From df469a85e84b7e4e3b057254b4853055e9c6ee4c Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Mon, 21 Sep 2015 16:45:27 -0500 Subject: [PATCH] Linux v4.2.1 --- drm-qxl-validate-monitors-config-modes.patch | 148 ------------------- kernel.spec | 13 +- sources | 1 + 3 files changed, 6 insertions(+), 156 deletions(-) delete mode 100644 drm-qxl-validate-monitors-config-modes.patch diff --git a/drm-qxl-validate-monitors-config-modes.patch b/drm-qxl-validate-monitors-config-modes.patch deleted file mode 100644 index 0b2c93804..000000000 --- a/drm-qxl-validate-monitors-config-modes.patch +++ /dev/null @@ -1,148 +0,0 @@ -From 9851cf5d02703ab60b58a2335481cc195c72ff9c Mon Sep 17 00:00:00 2001 -From: Jonathon Jongsma -Date: Thu, 20 Aug 2015 12:04:32 -0700 -Subject: [PATCH] drm/qxl: validate monitors config modes - -Due to some recent changes in -drm_helper_probe_single_connector_modes_merge_bits(), old custom modes -were not being pruned properly. In current kernels, -drm_mode_validate_basic() is called to sanity-check each mode in the -list. If the sanity-check passes, the mode's status gets set to to -MODE_OK. In older kernels this check was not done, so old custom modes -would still have a status of MODE_UNVERIFIED at this point, and would -therefore be pruned later in the function. - -As a result of this new behavior, the list of modes for a device always -includes every custom mode ever configured for the device, with the -largest one listed first. Since desktop environments usually choose the -first preferred mode when a hotplug event is emitted, this had the -result of making it very difficult for the user to reduce the size of -the display. - -The qxl driver did implement the mode_valid connector function, but it -was empty. In order to restore the old behavior where old custom modes -are pruned, we implement a proper mode_valid function for the qxl -driver. This function now checks each mode against the last configured -custom mode and the list of standard modes. If the mode doesn't match -any of these, its status is set to MODE_BAD so that it will be pruned as -expected. - -Signed-off-by: Jonathon Jongsma -Cc: stable at vger.kernel.org ---- - drivers/gpu/drm/qxl/qxl_display.c | 66 ++++++++++++++++++++++++--------------- - drivers/gpu/drm/qxl/qxl_drv.h | 2 ++ - 2 files changed, 42 insertions(+), 26 deletions(-) - -diff --git a/drivers/gpu/drm/qxl/qxl_display.c b/drivers/gpu/drm/qxl/qxl_display.c -index a8dbb3ef4e3c..7c6225c84ba6 100644 ---- a/drivers/gpu/drm/qxl/qxl_display.c -+++ b/drivers/gpu/drm/qxl/qxl_display.c -@@ -160,9 +160,35 @@ static int qxl_add_monitors_config_modes(struct drm_connector *connector, - *pwidth = head->width; - *pheight = head->height; - drm_mode_probed_add(connector, mode); -+ /* remember the last custom size for mode validation */ -+ qdev->monitors_config_width = mode->hdisplay; -+ qdev->monitors_config_height = mode->vdisplay; - return 1; - } - -+static struct mode_size { -+ int w; -+ int h; -+} common_modes[] = { -+ { 640, 480}, -+ { 720, 480}, -+ { 800, 600}, -+ { 848, 480}, -+ {1024, 768}, -+ {1152, 768}, -+ {1280, 720}, -+ {1280, 800}, -+ {1280, 854}, -+ {1280, 960}, -+ {1280, 1024}, -+ {1440, 900}, -+ {1400, 1050}, -+ {1680, 1050}, -+ {1600, 1200}, -+ {1920, 1080}, -+ {1920, 1200} -+}; -+ - static int qxl_add_common_modes(struct drm_connector *connector, - unsigned pwidth, - unsigned pheight) -@@ -170,29 +196,6 @@ static int qxl_add_common_modes(struct drm_connector *connector, - struct drm_device *dev = connector->dev; - struct drm_display_mode *mode = NULL; - int i; -- struct mode_size { -- int w; -- int h; -- } common_modes[] = { -- { 640, 480}, -- { 720, 480}, -- { 800, 600}, -- { 848, 480}, -- {1024, 768}, -- {1152, 768}, -- {1280, 720}, -- {1280, 800}, -- {1280, 854}, -- {1280, 960}, -- {1280, 1024}, -- {1440, 900}, -- {1400, 1050}, -- {1680, 1050}, -- {1600, 1200}, -- {1920, 1080}, -- {1920, 1200} -- }; -- - for (i = 0; i < ARRAY_SIZE(common_modes); i++) { - mode = drm_cvt_mode(dev, common_modes[i].w, common_modes[i].h, - 60, false, false, false); -@@ -823,11 +826,22 @@ static int qxl_conn_get_modes(struct drm_connector *connector) - static int qxl_conn_mode_valid(struct drm_connector *connector, - struct drm_display_mode *mode) - { -+ struct drm_device *ddev = connector->dev; -+ struct qxl_device *qdev = ddev->dev_private; -+ int i; -+ - /* TODO: is this called for user defined modes? (xrandr --add-mode) - * TODO: check that the mode fits in the framebuffer */ -- DRM_DEBUG("%s: %dx%d status=%d\n", mode->name, mode->hdisplay, -- mode->vdisplay, mode->status); -- return MODE_OK; -+ -+ if(qdev->monitors_config_width == mode->hdisplay && -+ qdev->monitors_config_height == mode->vdisplay) -+ return MODE_OK; -+ -+ for (i = 0; i < ARRAY_SIZE(common_modes); i++) { -+ if (common_modes[i].w == mode->hdisplay && common_modes[i].h == mode->vdisplay) -+ return MODE_OK; -+ } -+ return MODE_BAD; - } - - static struct drm_encoder *qxl_best_encoder(struct drm_connector *connector) -diff --git a/drivers/gpu/drm/qxl/qxl_drv.h b/drivers/gpu/drm/qxl/qxl_drv.h -index d8549690801d..01a86948eb8c 100644 ---- a/drivers/gpu/drm/qxl/qxl_drv.h -+++ b/drivers/gpu/drm/qxl/qxl_drv.h -@@ -325,6 +325,8 @@ struct qxl_device { - struct work_struct fb_work; - - struct drm_property *hotplug_mode_update_property; -+ int monitors_config_width; -+ int monitors_config_height; - }; - - /* forward declaration for QXL_INFO_IO */ --- -2.4.3 - diff --git a/kernel.spec b/kernel.spec index 1c53c307f..4132376fe 100644 --- a/kernel.spec +++ b/kernel.spec @@ -40,7 +40,7 @@ Summary: The Linux kernel # For non-released -rc kernels, this will be appended after the rcX and # gitX tags, so a 3 here would become part of release "0.rcX.gitX.3" # -%global baserelease 201 +%global baserelease 200 %global fedora_build %{baserelease} # base_sublevel is the kernel version we're starting with and patching @@ -52,7 +52,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 0 +%define stable_update 1 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -618,9 +618,6 @@ Patch26265: mmc-sdhci-fix-dma-memory-leak-in-sdhci_pre_req.patch #rhbz 1257534 Patch515: nv46-Change-mc-subdev-oclass-from-nv44-to-nv4c.patch -#rhbz 1212201 -Patch514: drm-qxl-validate-monitors-config-modes.patch - #rhbz 1257500 Patch517: vmwgfx-Rework-device-initialization.patch Patch518: drm-vmwgfx-Allow-dropped-masters-render-node-like-ac.patch @@ -1373,9 +1370,6 @@ ApplyPatch mmc-sdhci-fix-dma-memory-leak-in-sdhci_pre_req.patch #rhbz 1257534 ApplyPatch nv46-Change-mc-subdev-oclass-from-nv44-to-nv4c.patch -#rhbz 1212201 -ApplyPatch drm-qxl-validate-monitors-config-modes.patch - #rhbz 1257500 ApplyPatch vmwgfx-Rework-device-initialization.patch ApplyPatch drm-vmwgfx-Allow-dropped-masters-render-node-like-ac.patch @@ -2242,6 +2236,9 @@ fi # # %changelog +* Mon Sep 21 2015 Justin M. Forbes - 4.2.1-300 +- Linux v4.2.1 + * Fri Sep 18 2015 Josh Boyer - Fix oops in 32-bit kernel on 64-bit AMD cpus (rhbz 1263762) diff --git a/sources b/sources index 07d7ee3e6..878b71b73 100644 --- a/sources +++ b/sources @@ -1,2 +1,3 @@ 3d5ea06d767e2f35c999eeadafc76523 linux-4.2.tar.xz 4c964bfba54d65b5b54cc898baddecad perf-man-4.2.tar.gz +3e1cc007d930f8760ef0730609dca035 patch-4.2.1.xz