[kernel/f20] Add backported drm qxl fix (rhbz 1060327)

Josh Boyer jwboyer at fedoraproject.org
Thu May 1 15:35:47 UTC 2014


commit 05009c750bfc35afde8c106ef6f4884a684a0490
Author: Josh Boyer <jwboyer at fedoraproject.org>
Date:   Thu May 1 11:35:57 2014 -0400

    Add backported drm qxl fix (rhbz 1060327)

 drm-fix-qxl-mode-flags-backport.patch |  119 +++++++++++++++++++++++++++++++++
 kernel.spec                           |    9 +++
 2 files changed, 128 insertions(+), 0 deletions(-)
---
diff --git a/drm-fix-qxl-mode-flags-backport.patch b/drm-fix-qxl-mode-flags-backport.patch
new file mode 100644
index 0000000..e8885ff
--- /dev/null
+++ b/drm-fix-qxl-mode-flags-backport.patch
@@ -0,0 +1,119 @@
+Bugzilla: 1060327
+Upstream-status: Queued for 3.16
+
+diff -up linux-3.14.2-200.fc20.i686/drivers/gpu/drm/drm_crtc_helper.c.dma linux-3.14.2-200.fc20.i686/drivers/gpu/drm/drm_crtc_helper.c
+--- linux-3.14.2-200.fc20.i686/drivers/gpu/drm/drm_crtc_helper.c.dma	2014-03-31 13:40:15.000000000 +1000
++++ linux-3.14.2-200.fc20.i686/drivers/gpu/drm/drm_crtc_helper.c	2014-05-01 10:27:07.410210002 +1000
+@@ -120,8 +120,8 @@ static void drm_mode_validate_flag(struc
+  * RETURNS:
+  * Number of modes found on @connector.
+  */
+-int drm_helper_probe_single_connector_modes(struct drm_connector *connector,
+-					    uint32_t maxX, uint32_t maxY)
++static int drm_helper_probe_single_connector_modes_merge_bits(struct drm_connector *connector,
++					    uint32_t maxX, uint32_t maxY, bool merge_type_bits)
+ {
+ 	struct drm_device *dev = connector->dev;
+ 	struct drm_display_mode *mode;
+@@ -173,7 +173,7 @@ int drm_helper_probe_single_connector_mo
+ 	if (count == 0)
+ 		goto prune;
+ 
+-	drm_mode_connector_list_update(connector);
++	drm_mode_connector_list_update(connector, merge_type_bits);
+ 
+ 	if (maxX && maxY)
+ 		drm_mode_validate_size(dev, &connector->modes, maxX,
+@@ -213,8 +213,21 @@ prune:
+ 
+ 	return count;
+ }
++
++int drm_helper_probe_single_connector_modes(struct drm_connector *connector,
++					    uint32_t maxX, uint32_t maxY)
++{
++	return drm_helper_probe_single_connector_modes_merge_bits(connector, maxX, maxY, true);
++}
+ EXPORT_SYMBOL(drm_helper_probe_single_connector_modes);
+ 
++int drm_helper_probe_single_connector_modes_nomerge(struct drm_connector *connector,
++						    uint32_t maxX, uint32_t maxY)
++{
++	return drm_helper_probe_single_connector_modes_merge_bits(connector, maxX, maxY, false);
++}
++EXPORT_SYMBOL(drm_helper_probe_single_connector_modes_nomerge);
++
+ /**
+  * drm_helper_encoder_in_use - check if a given encoder is in use
+  * @encoder: encoder to check
+diff -up linux-3.14.2-200.fc20.i686/drivers/gpu/drm/drm_modes.c.dma linux-3.14.2-200.fc20.i686/drivers/gpu/drm/drm_modes.c
+--- linux-3.14.2-200.fc20.i686/drivers/gpu/drm/drm_modes.c.dma	2014-03-31 13:40:15.000000000 +1000
++++ linux-3.14.2-200.fc20.i686/drivers/gpu/drm/drm_modes.c	2014-05-01 10:27:59.015207267 +1000
+@@ -1025,7 +1025,7 @@ EXPORT_SYMBOL(drm_mode_sort);
+  * list and only adds different modes. All modes unverified after this point
+  * will be removed by the prune invalid modes.
+  */
+-void drm_mode_connector_list_update(struct drm_connector *connector)
++void drm_mode_connector_list_update(struct drm_connector *connector, bool merge_type_bits)
+ {
+ 	struct drm_display_mode *mode;
+ 	struct drm_display_mode *pmode, *pt;
+@@ -1041,7 +1041,10 @@ void drm_mode_connector_list_update(stru
+ 				/* if equal delete the probed mode */
+ 				mode->status = pmode->status;
+ 				/* Merge type bits together */
+-				mode->type |= pmode->type;
++				if (merge_type_bits)
++					mode->type |= pmode->type;
++				else
++					mode->type = pmode->type;
+ 				list_del(&pmode->head);
+ 				drm_mode_destroy(connector->dev, pmode);
+ 				break;
+diff -up linux-3.14.2-200.fc20.i686/drivers/gpu/drm/qxl/qxl_display.c.dma linux-3.14.2-200.fc20.i686/drivers/gpu/drm/qxl/qxl_display.c
+--- linux-3.14.2-200.fc20.i686/drivers/gpu/drm/qxl/qxl_display.c.dma	2014-03-31 13:40:15.000000000 +1000
++++ linux-3.14.2-200.fc20.i686/drivers/gpu/drm/qxl/qxl_display.c	2014-05-01 10:27:07.411210001 +1000
+@@ -841,7 +841,7 @@ static const struct drm_connector_funcs
+ 	.save = qxl_conn_save,
+ 	.restore = qxl_conn_restore,
+ 	.detect = qxl_conn_detect,
+-	.fill_modes = drm_helper_probe_single_connector_modes,
++	.fill_modes = drm_helper_probe_single_connector_modes_nomerge,
+ 	.set_property = qxl_conn_set_property,
+ 	.destroy = qxl_conn_destroy,
+ };
+diff -up linux-3.14.2-200.fc20.i686/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c.dma linux-3.14.2-200.fc20.i686/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
+--- linux-3.14.2-200.fc20.i686/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c.dma	2014-03-31 13:40:15.000000000 +1000
++++ linux-3.14.2-200.fc20.i686/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c	2014-05-01 10:27:07.411210001 +1000
+@@ -2003,7 +2003,7 @@ int vmw_du_connector_fill_modes(struct d
+ 	if (du->pref_mode)
+ 		list_move(&du->pref_mode->head, &connector->probed_modes);
+ 
+-	drm_mode_connector_list_update(connector);
++	drm_mode_connector_list_update(connector, true);
+ 
+ 	return 1;
+ }
+diff -up linux-3.14.2-200.fc20.i686/include/drm/drm_crtc.h.dma linux-3.14.2-200.fc20.i686/include/drm/drm_crtc.h
+--- linux-3.14.2-200.fc20.i686/include/drm/drm_crtc.h.dma	2014-03-31 13:40:15.000000000 +1000
++++ linux-3.14.2-200.fc20.i686/include/drm/drm_crtc.h	2014-05-01 10:27:07.412210001 +1000
+@@ -1033,7 +1033,7 @@ extern int drm_mode_hsync(const struct d
+ extern int drm_mode_vrefresh(const struct drm_display_mode *mode);
+ extern void drm_mode_set_crtcinfo(struct drm_display_mode *p,
+ 				  int adjust_flags);
+-extern void drm_mode_connector_list_update(struct drm_connector *connector);
++extern void drm_mode_connector_list_update(struct drm_connector *connector, bool merge_type_bits);
+ extern int drm_mode_connector_update_edid_property(struct drm_connector *connector,
+ 						struct edid *edid);
+ extern int drm_object_property_set_value(struct drm_mode_object *obj,
+diff -up linux-3.14.2-200.fc20.i686/include/drm/drm_crtc_helper.h.dma linux-3.14.2-200.fc20.i686/include/drm/drm_crtc_helper.h
+--- linux-3.14.2-200.fc20.i686/include/drm/drm_crtc_helper.h.dma	2014-03-31 13:40:15.000000000 +1000
++++ linux-3.14.2-200.fc20.i686/include/drm/drm_crtc_helper.h	2014-05-01 10:27:07.412210001 +1000
+@@ -126,6 +126,7 @@ struct drm_connector_helper_funcs {
+ };
+ 
+ extern int drm_helper_probe_single_connector_modes(struct drm_connector *connector, uint32_t maxX, uint32_t maxY);
++extern int drm_helper_probe_single_connector_modes_nomerge(struct drm_connector *connector, uint32_t maxX, uint32_t maxY);
+ extern void drm_helper_disable_unused_functions(struct drm_device *dev);
+ extern int drm_crtc_helper_set_config(struct drm_mode_set *set);
+ extern bool drm_crtc_helper_set_mode(struct drm_crtc *crtc,
diff --git a/kernel.spec b/kernel.spec
index cfb4d94..cadc8b6 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -754,6 +754,9 @@ Patch25069: mm-try_to_unmap_cluster-should-lock_page-before-mloc.patch
 #rhbz 983342 1093120
 Patch25070: 0001-acpi-video-Add-4-new-models-to-the-use_native_backli.patch
 
+#rhbz 1060327
+Patch25071: drm-fix-qxl-mode-flags-backport.patch
+
 # END OF PATCH DEFINITIONS
 
 %endif
@@ -1462,6 +1465,9 @@ ApplyPatch mm-try_to_unmap_cluster-should-lock_page-before-mloc.patch
 #rhbz 983342 1093120
 ApplyPatch 0001-acpi-video-Add-4-new-models-to-the-use_native_backli.patch
 
+#rhbz 1060327
+ApplyPatch drm-fix-qxl-mode-flags-backport.patch
+
 # END OF PATCH APPLICATIONS
 
 %endif
@@ -2273,6 +2279,9 @@ fi
 #                 ||----w |
 #                 ||     ||
 %changelog
+* Thu May 01 2014 Josh Boyer <jwboyer at fedoraproject.org>
+- Add backported drm qxl fix (rhbz 1060327)
+
 * Thu May  1 2014 Hans de Goede <hdegoede at redhat.com>
 - Sync min/max quirk patch with upstream to add a quirk for the ThinkPad L540
   (rhbz 1088588)


More information about the scm-commits mailing list