diff options
author | Thorsten Leemhuis <fedora@leemhuis.info> | 2017-11-22 12:21:52 +0100 |
---|---|---|
committer | Thorsten Leemhuis <fedora@leemhuis.info> | 2017-11-22 12:21:52 +0100 |
commit | 7e236794c7fad2c0cd428ffb5207e316e18d30e6 (patch) | |
tree | 87af7979e07f3e9c3cf8e05b72d1a1e93b21a080 | |
parent | ad7ce96f0d997d55130482cb887e0a677eea4e44 (diff) | |
parent | f65562a4d55f609622cc1e736175ee48dd70bb77 (diff) | |
download | kernel-4.13.15-300.vanilla.knurd.1.fc27.tar.gz kernel-4.13.15-300.vanilla.knurd.1.fc27.tar.xz kernel-4.13.15-300.vanilla.knurd.1.fc27.zip |
Merge remote-tracking branch 'origin/f27' into f27-user-thl-vanilla-fedorakernel-4.13.15-300.vanilla.knurd.1.fc27
-rw-r--r-- | 0001-platform-x86-peaq-wmi-Add-DMI-check-before-binding-t.patch | 72 | ||||
-rw-r--r-- | 0001-staging-vboxvideo-Fix-reporting-invalid-suggested-of.patch | 118 | ||||
-rw-r--r-- | baseconfig/CONFIG_SND_BCD2000 | 2 | ||||
-rw-r--r-- | kernel-aarch64-debug.config | 2 | ||||
-rw-r--r-- | kernel-aarch64.config | 2 | ||||
-rw-r--r-- | kernel-armv7hl-debug.config | 2 | ||||
-rw-r--r-- | kernel-armv7hl-lpae-debug.config | 2 | ||||
-rw-r--r-- | kernel-armv7hl-lpae.config | 2 | ||||
-rw-r--r-- | kernel-armv7hl.config | 2 | ||||
-rw-r--r-- | kernel-i686-PAE.config | 2 | ||||
-rw-r--r-- | kernel-i686-PAEdebug.config | 2 | ||||
-rw-r--r-- | kernel-i686-debug.config | 2 | ||||
-rw-r--r-- | kernel-i686.config | 2 | ||||
-rw-r--r-- | kernel-ppc64-debug.config | 2 | ||||
-rw-r--r-- | kernel-ppc64.config | 2 | ||||
-rw-r--r-- | kernel-ppc64le-debug.config | 2 | ||||
-rw-r--r-- | kernel-ppc64le.config | 2 | ||||
-rw-r--r-- | kernel-s390x-debug.config | 2 | ||||
-rw-r--r-- | kernel-s390x.config | 2 | ||||
-rw-r--r-- | kernel-x86_64-debug.config | 2 | ||||
-rw-r--r-- | kernel-x86_64.config | 2 | ||||
-rw-r--r-- | kernel.spec | 20 | ||||
-rw-r--r-- | qxl_cursor_fix.patch | 565 | ||||
-rw-r--r-- | sources | 2 |
24 files changed, 598 insertions, 217 deletions
diff --git a/0001-platform-x86-peaq-wmi-Add-DMI-check-before-binding-t.patch b/0001-platform-x86-peaq-wmi-Add-DMI-check-before-binding-t.patch deleted file mode 100644 index 2242e2d44..000000000 --- a/0001-platform-x86-peaq-wmi-Add-DMI-check-before-binding-t.patch +++ /dev/null @@ -1,72 +0,0 @@ -From 0e9df6a74f9573409e5a2fbe29c1389188280bfc Mon Sep 17 00:00:00 2001 -From: Hans de Goede <hdegoede@redhat.com> -Date: Thu, 5 Oct 2017 16:02:33 +0200 -Subject: [PATCH] platform/x86: peaq-wmi: Add DMI check before binding to the - WMI interface - -It seems that the WMI GUID used by the PEAQ 2-in-1 WMI hotkeys is not -as unique as a GUID should be and is used on some other devices too. - -This is causing spurious key-press reports on these other devices. - -This commits adds a DMI check to the PEAQ 2-in-1 WMI hotkeys driver to -ensure that it is actually running on a PEAQ 2-in-1, fixing the -spurious key-presses on these other devices. - -BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1497861 -BugLink: https://bugzilla.suse.com/attachment.cgi?id=743182 -Cc: stable@vger.kernel.org -Signed-off-by: Hans de Goede <hdegoede@redhat.com> ---- - drivers/platform/x86/peaq-wmi.c | 18 ++++++++++++++++++ - 1 file changed, 18 insertions(+) - -diff --git a/drivers/platform/x86/peaq-wmi.c b/drivers/platform/x86/peaq-wmi.c -index bc98ef95514a..67fa3fa32011 100644 ---- a/drivers/platform/x86/peaq-wmi.c -+++ b/drivers/platform/x86/peaq-wmi.c -@@ -8,6 +8,7 @@ - */ - - #include <linux/acpi.h> -+#include <linux/dmi.h> - #include <linux/input-polldev.h> - #include <linux/kernel.h> - #include <linux/module.h> -@@ -64,8 +65,23 @@ static void peaq_wmi_poll(struct input_polled_dev *dev) - } - } - -+/* Some other devices (Shuttle XS35) use the same WMI GUID for other purposes */ -+static const struct dmi_system_id peaq_dmi_table[] = { -+ { -+ .matches = { -+ DMI_MATCH(DMI_SYS_VENDOR, "PEAQ"), -+ DMI_MATCH(DMI_PRODUCT_NAME, "PEAQ PMM C1010 MD99187"), -+ }, -+ }, -+ {} -+}; -+ - static int __init peaq_wmi_init(void) - { -+ /* WMI GUID is not unique, also check for a DMI match */ -+ if (!dmi_check_system(peaq_dmi_table)) -+ return -ENODEV; -+ - if (!wmi_has_guid(PEAQ_DOLBY_BUTTON_GUID)) - return -ENODEV; - -@@ -86,6 +101,9 @@ static int __init peaq_wmi_init(void) - - static void __exit peaq_wmi_exit(void) - { -+ if (!dmi_check_system(peaq_dmi_table)) -+ return; -+ - if (!wmi_has_guid(PEAQ_DOLBY_BUTTON_GUID)) - return; - --- -2.14.2 - diff --git a/0001-staging-vboxvideo-Fix-reporting-invalid-suggested-of.patch b/0001-staging-vboxvideo-Fix-reporting-invalid-suggested-of.patch deleted file mode 100644 index 695fcda36..000000000 --- a/0001-staging-vboxvideo-Fix-reporting-invalid-suggested-of.patch +++ /dev/null @@ -1,118 +0,0 @@ -From 3b40f521aa2f42862203497a94ae77536f41ade2 Mon Sep 17 00:00:00 2001 -From: Hans de Goede <hdegoede@redhat.com> -Date: Thu, 12 Oct 2017 19:44:48 +0200 -Subject: [PATCH] staging: vboxvideo: Fix reporting invalid - suggested-offset-properties - -The x and y hints receives from the host are unsigned 32 bit integers and -they get set to -1 (0xffffffff) when invalid. Before this commit the -vboxvideo driver was storing them in an u16 causing the -1 to be truncated -to 65535 which, once reported to userspace, was breaking gnome 3.26+ -in Wayland mode. - -This commit stores the host values in 32 bit variables, removing the -truncation and checks for -1, replacing it with 0 as -1 is not a valid -suggested-offset-property value. Likewise the properties are now -initialized to 0 instead of -1, since -1 is not a valid value. -This fixes gnome 3.26+ in Wayland mode not working with the vboxvideo -driver. - -Reported-by: Gianfranco Costamagna <locutusofborg@debian.org> -Cc: stable@vger.kernel.org -Cc: Michael Thayer <michael.thayer@oracle.com> -Signed-off-by: Hans de Goede <hdegoede@redhat.com> ---- - drivers/staging/vboxvideo/vbox_drv.h | 8 ++++---- - drivers/staging/vboxvideo/vbox_irq.c | 4 ++-- - drivers/staging/vboxvideo/vbox_mode.c | 26 ++++++++++++++++++-------- - 3 files changed, 24 insertions(+), 14 deletions(-) - -diff --git a/drivers/staging/vboxvideo/vbox_drv.h b/drivers/staging/vboxvideo/vbox_drv.h -index 4b9302703b36..eeac4f0cb2c6 100644 ---- a/drivers/staging/vboxvideo/vbox_drv.h -+++ b/drivers/staging/vboxvideo/vbox_drv.h -@@ -137,8 +137,8 @@ struct vbox_connector { - char name[32]; - struct vbox_crtc *vbox_crtc; - struct { -- u16 width; -- u16 height; -+ u32 width; -+ u32 height; - bool disconnected; - } mode_hint; - }; -@@ -150,8 +150,8 @@ struct vbox_crtc { - unsigned int crtc_id; - u32 fb_offset; - bool cursor_enabled; -- u16 x_hint; -- u16 y_hint; -+ u32 x_hint; -+ u32 y_hint; - }; - - struct vbox_encoder { -diff --git a/drivers/staging/vboxvideo/vbox_irq.c b/drivers/staging/vboxvideo/vbox_irq.c -index 3ca8bec62ac4..74abdf02d9fd 100644 ---- a/drivers/staging/vboxvideo/vbox_irq.c -+++ b/drivers/staging/vboxvideo/vbox_irq.c -@@ -150,8 +150,8 @@ static void vbox_update_mode_hints(struct vbox_private *vbox) - - disconnected = !(hints->enabled); - crtc_id = vbox_conn->vbox_crtc->crtc_id; -- vbox_conn->mode_hint.width = hints->cx & 0x8fff; -- vbox_conn->mode_hint.height = hints->cy & 0x8fff; -+ vbox_conn->mode_hint.width = hints->cx; -+ vbox_conn->mode_hint.height = hints->cy; - vbox_conn->vbox_crtc->x_hint = hints->dx; - vbox_conn->vbox_crtc->y_hint = hints->dy; - vbox_conn->mode_hint.disconnected = disconnected; -diff --git a/drivers/staging/vboxvideo/vbox_mode.c b/drivers/staging/vboxvideo/vbox_mode.c -index 257a77830410..6f08dc966719 100644 ---- a/drivers/staging/vboxvideo/vbox_mode.c -+++ b/drivers/staging/vboxvideo/vbox_mode.c -@@ -553,12 +553,22 @@ static int vbox_get_modes(struct drm_connector *connector) - ++num_modes; - } - vbox_set_edid(connector, preferred_width, preferred_height); -- drm_object_property_set_value( -- &connector->base, vbox->dev->mode_config.suggested_x_property, -- vbox_connector->vbox_crtc->x_hint); -- drm_object_property_set_value( -- &connector->base, vbox->dev->mode_config.suggested_y_property, -- vbox_connector->vbox_crtc->y_hint); -+ -+ if (vbox_connector->vbox_crtc->x_hint != -1) -+ drm_object_property_set_value(&connector->base, -+ vbox->dev->mode_config.suggested_x_property, -+ vbox_connector->vbox_crtc->x_hint); -+ else -+ drm_object_property_set_value(&connector->base, -+ vbox->dev->mode_config.suggested_x_property, 0); -+ -+ if (vbox_connector->vbox_crtc->y_hint != -1) -+ drm_object_property_set_value(&connector->base, -+ vbox->dev->mode_config.suggested_y_property, -+ vbox_connector->vbox_crtc->y_hint); -+ else -+ drm_object_property_set_value(&connector->base, -+ vbox->dev->mode_config.suggested_y_property, 0); - - return num_modes; - } -@@ -640,9 +650,9 @@ static int vbox_connector_init(struct drm_device *dev, - - drm_mode_create_suggested_offset_properties(dev); - drm_object_attach_property(&connector->base, -- dev->mode_config.suggested_x_property, -1); -+ dev->mode_config.suggested_x_property, 0); - drm_object_attach_property(&connector->base, -- dev->mode_config.suggested_y_property, -1); -+ dev->mode_config.suggested_y_property, 0); - drm_connector_register(connector); - - drm_mode_connector_attach_encoder(connector, encoder); --- -2.14.2 - diff --git a/baseconfig/CONFIG_SND_BCD2000 b/baseconfig/CONFIG_SND_BCD2000 index 0a60c490b..b56c9162f 100644 --- a/baseconfig/CONFIG_SND_BCD2000 +++ b/baseconfig/CONFIG_SND_BCD2000 @@ -1 +1 @@ -# CONFIG_SND_BCD2000 is not set +CONFIG_SND_BCD2000=m diff --git a/kernel-aarch64-debug.config b/kernel-aarch64-debug.config index fb2298280..398e4a2a7 100644 --- a/kernel-aarch64-debug.config +++ b/kernel-aarch64-debug.config @@ -5035,7 +5035,7 @@ CONFIG_SND_AUDIO_GRAPH_CARD=m # CONFIG_SND_AUDIO_GRAPH_SCU_CARD is not set # CONFIG_SND_AW2 is not set CONFIG_SND_AZT3328=m -# CONFIG_SND_BCD2000 is not set +CONFIG_SND_BCD2000=m CONFIG_SND_BCM2835_SOC_I2S=m CONFIG_SND_BEBOB=m CONFIG_SND_BT87X=m diff --git a/kernel-aarch64.config b/kernel-aarch64.config index 056a21e13..a55442073 100644 --- a/kernel-aarch64.config +++ b/kernel-aarch64.config @@ -5013,7 +5013,7 @@ CONFIG_SND_AUDIO_GRAPH_CARD=m # CONFIG_SND_AUDIO_GRAPH_SCU_CARD is not set # CONFIG_SND_AW2 is not set CONFIG_SND_AZT3328=m -# CONFIG_SND_BCD2000 is not set +CONFIG_SND_BCD2000=m CONFIG_SND_BCM2835_SOC_I2S=m CONFIG_SND_BEBOB=m CONFIG_SND_BT87X=m diff --git a/kernel-armv7hl-debug.config b/kernel-armv7hl-debug.config index 30e2a4ab0..a1de25f55 100644 --- a/kernel-armv7hl-debug.config +++ b/kernel-armv7hl-debug.config @@ -5417,7 +5417,7 @@ CONFIG_SND_AUDIO_GRAPH_CARD=m # CONFIG_SND_AUDIO_GRAPH_SCU_CARD is not set # CONFIG_SND_AW2 is not set CONFIG_SND_AZT3328=m -# CONFIG_SND_BCD2000 is not set +CONFIG_SND_BCD2000=m CONFIG_SND_BCM2835_SOC_I2S=m CONFIG_SND_BEBOB=m CONFIG_SND_BT87X=m diff --git a/kernel-armv7hl-lpae-debug.config b/kernel-armv7hl-lpae-debug.config index 0fd13fba4..2ceb6e17e 100644 --- a/kernel-armv7hl-lpae-debug.config +++ b/kernel-armv7hl-lpae-debug.config @@ -5095,7 +5095,7 @@ CONFIG_SND_AUDIO_GRAPH_CARD=m # CONFIG_SND_AUDIO_GRAPH_SCU_CARD is not set # CONFIG_SND_AW2 is not set CONFIG_SND_AZT3328=m -# CONFIG_SND_BCD2000 is not set +CONFIG_SND_BCD2000=m CONFIG_SND_BCM2835_SOC_I2S=m CONFIG_SND_BEBOB=m CONFIG_SND_BT87X=m diff --git a/kernel-armv7hl-lpae.config b/kernel-armv7hl-lpae.config index 2b2754971..ed501e5a5 100644 --- a/kernel-armv7hl-lpae.config +++ b/kernel-armv7hl-lpae.config @@ -5073,7 +5073,7 @@ CONFIG_SND_AUDIO_GRAPH_CARD=m # CONFIG_SND_AUDIO_GRAPH_SCU_CARD is not set # CONFIG_SND_AW2 is not set CONFIG_SND_AZT3328=m -# CONFIG_SND_BCD2000 is not set +CONFIG_SND_BCD2000=m CONFIG_SND_BCM2835_SOC_I2S=m CONFIG_SND_BEBOB=m CONFIG_SND_BT87X=m diff --git a/kernel-armv7hl.config b/kernel-armv7hl.config index a85ff06d3..9ae4f4dda 100644 --- a/kernel-armv7hl.config +++ b/kernel-armv7hl.config @@ -5395,7 +5395,7 @@ CONFIG_SND_AUDIO_GRAPH_CARD=m # CONFIG_SND_AUDIO_GRAPH_SCU_CARD is not set # CONFIG_SND_AW2 is not set CONFIG_SND_AZT3328=m -# CONFIG_SND_BCD2000 is not set +CONFIG_SND_BCD2000=m CONFIG_SND_BCM2835_SOC_I2S=m CONFIG_SND_BEBOB=m CONFIG_SND_BT87X=m diff --git a/kernel-i686-PAE.config b/kernel-i686-PAE.config index c0d0cad8e..c41b1366c 100644 --- a/kernel-i686-PAE.config +++ b/kernel-i686-PAE.config @@ -4755,7 +4755,7 @@ CONFIG_SND_AU8830=m # CONFIG_SND_AUDIO_GRAPH_SCU_CARD is not set # CONFIG_SND_AW2 is not set CONFIG_SND_AZT3328=m -# CONFIG_SND_BCD2000 is not set +CONFIG_SND_BCD2000=m CONFIG_SND_BEBOB=m CONFIG_SND_BT87X=m # CONFIG_SND_BT87X_OVERCLOCK is not set diff --git a/kernel-i686-PAEdebug.config b/kernel-i686-PAEdebug.config index 7623aa6cb..1020a8ce0 100644 --- a/kernel-i686-PAEdebug.config +++ b/kernel-i686-PAEdebug.config @@ -4776,7 +4776,7 @@ CONFIG_SND_AU8830=m # CONFIG_SND_AUDIO_GRAPH_SCU_CARD is not set # CONFIG_SND_AW2 is not set CONFIG_SND_AZT3328=m -# CONFIG_SND_BCD2000 is not set +CONFIG_SND_BCD2000=m CONFIG_SND_BEBOB=m CONFIG_SND_BT87X=m # CONFIG_SND_BT87X_OVERCLOCK is not set diff --git a/kernel-i686-debug.config b/kernel-i686-debug.config index 1bfbfe612..8e739d7fc 100644 --- a/kernel-i686-debug.config +++ b/kernel-i686-debug.config @@ -4776,7 +4776,7 @@ CONFIG_SND_AU8830=m # CONFIG_SND_AUDIO_GRAPH_SCU_CARD is not set # CONFIG_SND_AW2 is not set CONFIG_SND_AZT3328=m -# CONFIG_SND_BCD2000 is not set +CONFIG_SND_BCD2000=m CONFIG_SND_BEBOB=m CONFIG_SND_BT87X=m # CONFIG_SND_BT87X_OVERCLOCK is not set diff --git a/kernel-i686.config b/kernel-i686.config index 0d6400861..323dc8e1c 100644 --- a/kernel-i686.config +++ b/kernel-i686.config @@ -4755,7 +4755,7 @@ CONFIG_SND_AU8830=m # CONFIG_SND_AUDIO_GRAPH_SCU_CARD is not set # CONFIG_SND_AW2 is not set CONFIG_SND_AZT3328=m -# CONFIG_SND_BCD2000 is not set +CONFIG_SND_BCD2000=m CONFIG_SND_BEBOB=m CONFIG_SND_BT87X=m # CONFIG_SND_BT87X_OVERCLOCK is not set diff --git a/kernel-ppc64-debug.config b/kernel-ppc64-debug.config index 0bb02e588..0c7047250 100644 --- a/kernel-ppc64-debug.config +++ b/kernel-ppc64-debug.config @@ -4590,7 +4590,7 @@ CONFIG_SND_AU8830=m # CONFIG_SND_AUDIO_GRAPH_SCU_CARD is not set # CONFIG_SND_AW2 is not set CONFIG_SND_AZT3328=m -# CONFIG_SND_BCD2000 is not set +CONFIG_SND_BCD2000=m CONFIG_SND_BEBOB=m CONFIG_SND_BT87X=m # CONFIG_SND_BT87X_OVERCLOCK is not set diff --git a/kernel-ppc64.config b/kernel-ppc64.config index 44e9fcad9..1d697184b 100644 --- a/kernel-ppc64.config +++ b/kernel-ppc64.config @@ -4567,7 +4567,7 @@ CONFIG_SND_AU8830=m # CONFIG_SND_AUDIO_GRAPH_SCU_CARD is not set # CONFIG_SND_AW2 is not set CONFIG_SND_AZT3328=m -# CONFIG_SND_BCD2000 is not set +CONFIG_SND_BCD2000=m CONFIG_SND_BEBOB=m CONFIG_SND_BT87X=m # CONFIG_SND_BT87X_OVERCLOCK is not set diff --git a/kernel-ppc64le-debug.config b/kernel-ppc64le-debug.config index 0425ae672..33fbd04f8 100644 --- a/kernel-ppc64le-debug.config +++ b/kernel-ppc64le-debug.config @@ -4520,7 +4520,7 @@ CONFIG_SND_AU8830=m # CONFIG_SND_AUDIO_GRAPH_SCU_CARD is not set # CONFIG_SND_AW2 is not set CONFIG_SND_AZT3328=m -# CONFIG_SND_BCD2000 is not set +CONFIG_SND_BCD2000=m CONFIG_SND_BEBOB=m CONFIG_SND_BT87X=m # CONFIG_SND_BT87X_OVERCLOCK is not set diff --git a/kernel-ppc64le.config b/kernel-ppc64le.config index 8e5100770..f668b8e62 100644 --- a/kernel-ppc64le.config +++ b/kernel-ppc64le.config @@ -4497,7 +4497,7 @@ CONFIG_SND_AU8830=m # CONFIG_SND_AUDIO_GRAPH_SCU_CARD is not set # CONFIG_SND_AW2 is not set CONFIG_SND_AZT3328=m -# CONFIG_SND_BCD2000 is not set +CONFIG_SND_BCD2000=m CONFIG_SND_BEBOB=m CONFIG_SND_BT87X=m # CONFIG_SND_BT87X_OVERCLOCK is not set diff --git a/kernel-s390x-debug.config b/kernel-s390x-debug.config index 854ba3b67..dc9e7643a 100644 --- a/kernel-s390x-debug.config +++ b/kernel-s390x-debug.config @@ -4419,7 +4419,7 @@ CONFIG_SND_AU8830=m # CONFIG_SND_AUDIO_GRAPH_SCU_CARD is not set # CONFIG_SND_AW2 is not set CONFIG_SND_AZT3328=m -# CONFIG_SND_BCD2000 is not set +CONFIG_SND_BCD2000=m CONFIG_SND_BEBOB=m CONFIG_SND_BT87X=m # CONFIG_SND_BT87X_OVERCLOCK is not set diff --git a/kernel-s390x.config b/kernel-s390x.config index c23ddc822..058b61400 100644 --- a/kernel-s390x.config +++ b/kernel-s390x.config @@ -4396,7 +4396,7 @@ CONFIG_SND_AU8830=m # CONFIG_SND_AUDIO_GRAPH_SCU_CARD is not set # CONFIG_SND_AW2 is not set CONFIG_SND_AZT3328=m -# CONFIG_SND_BCD2000 is not set +CONFIG_SND_BCD2000=m CONFIG_SND_BEBOB=m CONFIG_SND_BT87X=m # CONFIG_SND_BT87X_OVERCLOCK is not set diff --git a/kernel-x86_64-debug.config b/kernel-x86_64-debug.config index 710962742..d260a9646 100644 --- a/kernel-x86_64-debug.config +++ b/kernel-x86_64-debug.config @@ -4819,7 +4819,7 @@ CONFIG_SND_AU8830=m # CONFIG_SND_AUDIO_GRAPH_SCU_CARD is not set # CONFIG_SND_AW2 is not set CONFIG_SND_AZT3328=m -# CONFIG_SND_BCD2000 is not set +CONFIG_SND_BCD2000=m CONFIG_SND_BEBOB=m CONFIG_SND_BT87X=m # CONFIG_SND_BT87X_OVERCLOCK is not set diff --git a/kernel-x86_64.config b/kernel-x86_64.config index 71da3856a..11c0799b6 100644 --- a/kernel-x86_64.config +++ b/kernel-x86_64.config @@ -4798,7 +4798,7 @@ CONFIG_SND_AU8830=m # CONFIG_SND_AUDIO_GRAPH_SCU_CARD is not set # CONFIG_SND_AW2 is not set CONFIG_SND_AZT3328=m -# CONFIG_SND_BCD2000 is not set +CONFIG_SND_BCD2000=m CONFIG_SND_BEBOB=m CONFIG_SND_BT87X=m # CONFIG_SND_BT87X_OVERCLOCK is not set diff --git a/kernel.spec b/kernel.spec index 60c5be8bb..c7c0d395d 100644 --- a/kernel.spec +++ b/kernel.spec @@ -58,7 +58,7 @@ Summary: The Linux kernel %define stable_rc 0 # Do we have a -stable update to apply? -%define stable_update 14 +%define stable_update 15 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -715,18 +715,12 @@ Patch626: 1-3-net-set-tb--fast_sk_family.patch Patch627: 2-3-net-use-inet6_rcv_saddr-to-compare-sockets.patch Patch628: 3-3-inet-fix-improper-empty-comparison.patch -# rhbz 1497861 -Patch629: 0001-platform-x86-peaq-wmi-Add-DMI-check-before-binding-t.patch - # rhbz 1482648 Patch630: Input-synaptics---Disable-kernel-tracking-on-SMBus-devices.patch # Headed upstream Patch631: drm-i915-boost-GPU-clocks-if-we-miss-the-pageflip.patch -# fix gnome 3.26+ not working under VirtualBox, submitted upstream, Cc: Stable -Patch632: 0001-staging-vboxvideo-Fix-reporting-invalid-suggested-of.patch - # http://patchwork.ozlabs.org/patch/831938/ Patch633: net-mlxsw-reg-Add-high-and-low-temperature-thresholds.patch @@ -743,6 +737,9 @@ Patch637: 1-2-kvm-vmx-Reinstate-support-for-CPUs-without-virtual-NMI.patch # CVE-2017-16538 rhbz 1510826 1510854 Patch639: CVE-2017-16538.patch +# rhbz 1507931 +Patch640: qxl_cursor_fix.patch + # END OF PATCH DEFINITIONS %endif @@ -2300,6 +2297,15 @@ fi # # %changelog +* Tue Nov 21 2017 Justin M. Forbes <jforbes@fedoraproject.org> +- Fix cursor issues with QXL (rhbz 1507931) + +* Tue Nov 21 2017 Jeremy Cline <jeremy@jcline.org> - 4.13.15-300 +- Linux v4.13.15 + +* Mon Nov 20 2017 Laura Abbott <labbott@redhat.com> +- Enable driver for the Behringer BCD 2000 (rhbz 1514945) + * Sun Nov 19 2017 Jeremy Cline <jeremy@jcline.org> - 4.13.14-300 - Linux v4.13.14 diff --git a/qxl_cursor_fix.patch b/qxl_cursor_fix.patch new file mode 100644 index 000000000..8d59cb48b --- /dev/null +++ b/qxl_cursor_fix.patch @@ -0,0 +1,565 @@ +From fda212272d75dd46a53bdeba9466c6f7db7ee3fa Mon Sep 17 00:00:00 2001 +From: Ray Strode <rstrode@redhat.com> +Date: Fri, 17 Nov 2017 15:08:05 -0500 +Subject: [PATCH 1/2] drm/qxl: unref cursor bo when finished with it + +qxl_cursor_atomic_update allocs a bo for the cursor that +it never frees up at the end of the function. + +This commit fixes that. + +Signed-off-by: Ray Strode <rstrode@redhat.com> +--- + drivers/gpu/drm/qxl/qxl_display.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/qxl/qxl_display.c b/drivers/gpu/drm/qxl/qxl_display.c +index da6648e75374..dab9f860626f 100644 +--- a/drivers/gpu/drm/qxl/qxl_display.c ++++ b/drivers/gpu/drm/qxl/qxl_display.c +@@ -551,61 +551,61 @@ static void qxl_primary_atomic_disable(struct drm_plane *plane, + struct qxl_device *qdev = plane->dev->dev_private; + + if (old_state->fb) { + struct qxl_framebuffer *qfb = + to_qxl_framebuffer(old_state->fb); + struct qxl_bo *bo = gem_to_qxl_bo(qfb->obj); + + if (bo->is_primary) { + qxl_io_destroy_primary(qdev); + bo->is_primary = false; + } + } + } + + int qxl_plane_atomic_check(struct drm_plane *plane, + struct drm_plane_state *state) + { + return 0; + } + + static void qxl_cursor_atomic_update(struct drm_plane *plane, + struct drm_plane_state *old_state) + { + struct drm_device *dev = plane->dev; + struct qxl_device *qdev = dev->dev_private; + struct drm_framebuffer *fb = plane->state->fb; + struct qxl_release *release; + struct qxl_cursor_cmd *cmd; + struct qxl_cursor *cursor; + struct drm_gem_object *obj; +- struct qxl_bo *cursor_bo, *user_bo = NULL; ++ struct qxl_bo *cursor_bo = NULL, *user_bo = NULL; + int ret; + void *user_ptr; + int size = 64*64*4; + + ret = qxl_alloc_release_reserved(qdev, sizeof(*cmd), + QXL_RELEASE_CURSOR_CMD, + &release, NULL); + if (ret) + return; + + if (fb != old_state->fb) { + obj = to_qxl_framebuffer(fb)->obj; + user_bo = gem_to_qxl_bo(obj); + + /* pinning is done in the prepare/cleanup framevbuffer */ + ret = qxl_bo_kmap(user_bo, &user_ptr); + if (ret) + goto out_free_release; + + ret = qxl_alloc_bo_reserved(qdev, release, + sizeof(struct qxl_cursor) + size, + &cursor_bo); + if (ret) + goto out_kunmap; + + ret = qxl_release_reserve_list(release, true); + if (ret) + goto out_free_bo; + + ret = qxl_bo_kmap(cursor_bo, (void **)&cursor); +@@ -621,60 +621,62 @@ static void qxl_cursor_atomic_update(struct drm_plane *plane, + cursor->data_size = size; + cursor->chunk.next_chunk = 0; + cursor->chunk.prev_chunk = 0; + cursor->chunk.data_size = size; + memcpy(cursor->chunk.data, user_ptr, size); + qxl_bo_kunmap(cursor_bo); + qxl_bo_kunmap(user_bo); + + cmd = (struct qxl_cursor_cmd *) qxl_release_map(qdev, release); + cmd->u.set.visible = 1; + cmd->u.set.shape = qxl_bo_physical_address(qdev, + cursor_bo, 0); + cmd->type = QXL_CURSOR_SET; + } else { + + ret = qxl_release_reserve_list(release, true); + if (ret) + goto out_free_release; + + cmd = (struct qxl_cursor_cmd *) qxl_release_map(qdev, release); + cmd->type = QXL_CURSOR_MOVE; + } + + cmd->u.position.x = plane->state->crtc_x + fb->hot_x; + cmd->u.position.y = plane->state->crtc_y + fb->hot_y; + + qxl_release_unmap(qdev, release, &cmd->release_info); + qxl_push_cursor_ring_release(qdev, release, QXL_CMD_CURSOR, false); + qxl_release_fence_buffer_objects(release); + ++ qxl_bo_unref (&cursor_bo); ++ + return; + + out_backoff: + qxl_release_backoff_reserve_list(release); + out_free_bo: + qxl_bo_unref(&cursor_bo); + out_kunmap: + qxl_bo_kunmap(user_bo); + out_free_release: + qxl_release_free(qdev, release); + return; + + } + + void qxl_cursor_atomic_disable(struct drm_plane *plane, + struct drm_plane_state *old_state) + { + struct qxl_device *qdev = plane->dev->dev_private; + struct qxl_release *release; + struct qxl_cursor_cmd *cmd; + int ret; + + ret = qxl_alloc_release_reserved(qdev, sizeof(*cmd), + QXL_RELEASE_CURSOR_CMD, + &release, NULL); + if (ret) + return; + + ret = qxl_release_reserve_list(release, true); + if (ret) { +-- +2.14.3 + + +From c779c917be6cd38a0c39ebb10f75f223efc5ffef Mon Sep 17 00:00:00 2001 +From: Ray Strode <rstrode@redhat.com> +Date: Fri, 17 Nov 2017 14:49:46 -0500 +Subject: [PATCH 2/2] drm/qxl: reapply cursor after resetting primary + +QXL associates mouse state with its primary plane. + +Destroying a primary plane and putting a new one +in place has the side effect of destroying the cursor +as well. + +This commit changes the driver to reapply the cursor +any time a new primary is created. It achieves this +by keeping a reference to the cursor bo on the qxl_crtc +struct. + +This fix is very similar to commit 4532b241a4b which +got implicitly reverted as part of implementing the +atomic modeset feature. + +Signed-off-by: Ray Strode <rstrode@redhat.com> + +https://bugzilla.redhat.com/show_bug.cgi?id=1512097 +--- + drivers/gpu/drm/qxl/qxl_display.c | 59 +++++++++++++++++++++++++++++++++++++++ + drivers/gpu/drm/qxl/qxl_drv.h | 2 ++ + 2 files changed, 61 insertions(+) + +diff --git a/drivers/gpu/drm/qxl/qxl_display.c b/drivers/gpu/drm/qxl/qxl_display.c +index dab9f860626f..ef5c3a83130f 100644 +--- a/drivers/gpu/drm/qxl/qxl_display.c ++++ b/drivers/gpu/drm/qxl/qxl_display.c +@@ -262,60 +262,61 @@ static int qxl_add_common_modes(struct drm_connector *connector, + mode = drm_cvt_mode(dev, common_modes[i].w, common_modes[i].h, + 60, false, false, false); + if (common_modes[i].w == pwidth && common_modes[i].h == pheight) + mode->type |= DRM_MODE_TYPE_PREFERRED; + drm_mode_probed_add(connector, mode); + } + return i - 1; + } + + static void qxl_crtc_atomic_flush(struct drm_crtc *crtc, + struct drm_crtc_state *old_crtc_state) + { + struct drm_device *dev = crtc->dev; + struct drm_pending_vblank_event *event; + unsigned long flags; + + if (crtc->state && crtc->state->event) { + event = crtc->state->event; + crtc->state->event = NULL; + + spin_lock_irqsave(&dev->event_lock, flags); + drm_crtc_send_vblank_event(crtc, event); + spin_unlock_irqrestore(&dev->event_lock, flags); + } + } + + static void qxl_crtc_destroy(struct drm_crtc *crtc) + { + struct qxl_crtc *qxl_crtc = to_qxl_crtc(crtc); + ++ qxl_bo_unref(&qxl_crtc->cursor_bo); + drm_crtc_cleanup(crtc); + kfree(qxl_crtc); + } + + static const struct drm_crtc_funcs qxl_crtc_funcs = { + .set_config = drm_atomic_helper_set_config, + .destroy = qxl_crtc_destroy, + .page_flip = drm_atomic_helper_page_flip, + .reset = drm_atomic_helper_crtc_reset, + .atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state, + .atomic_destroy_state = drm_atomic_helper_crtc_destroy_state, + }; + + void qxl_user_framebuffer_destroy(struct drm_framebuffer *fb) + { + struct qxl_framebuffer *qxl_fb = to_qxl_framebuffer(fb); + struct qxl_bo *bo = gem_to_qxl_bo(qxl_fb->obj); + + WARN_ON(bo->shadow); + drm_gem_object_unreference_unlocked(qxl_fb->obj); + drm_framebuffer_cleanup(fb); + kfree(qxl_fb); + } + + static int qxl_framebuffer_surface_dirty(struct drm_framebuffer *fb, + struct drm_file *file_priv, + unsigned flags, unsigned color, + struct drm_clip_rect *clips, + unsigned num_clips) + { +@@ -471,193 +472,251 @@ static void qxl_crtc_disable(struct drm_crtc *crtc) + static const struct drm_crtc_helper_funcs qxl_crtc_helper_funcs = { + .dpms = qxl_crtc_dpms, + .disable = qxl_crtc_disable, + .mode_fixup = qxl_crtc_mode_fixup, + .mode_set_nofb = qxl_mode_set_nofb, + .commit = qxl_crtc_commit, + .atomic_flush = qxl_crtc_atomic_flush, + }; + + int qxl_primary_atomic_check(struct drm_plane *plane, + struct drm_plane_state *state) + { + struct qxl_device *qdev = plane->dev->dev_private; + struct qxl_framebuffer *qfb; + struct qxl_bo *bo; + + if (!state->crtc || !state->fb) + return 0; + + qfb = to_qxl_framebuffer(state->fb); + bo = gem_to_qxl_bo(qfb->obj); + + if (bo->surf.stride * bo->surf.height > qdev->vram_size) { + DRM_ERROR("Mode doesn't fit in vram size (vgamem)"); + return -EINVAL; + } + + return 0; + } + ++static int qxl_primary_apply_cursor(struct drm_plane *plane) ++{ ++ struct drm_device *dev = plane->dev; ++ struct qxl_device *qdev = dev->dev_private; ++ struct drm_framebuffer *fb = plane->state->fb; ++ struct qxl_crtc *qcrtc = to_qxl_crtc(plane->state->crtc); ++ struct qxl_cursor_cmd *cmd; ++ struct qxl_release *release; ++ int ret = 0; ++ ++ if (!qcrtc->cursor_bo) ++ return 0; ++ ++ ret = qxl_alloc_release_reserved(qdev, sizeof(*cmd), ++ QXL_RELEASE_CURSOR_CMD, ++ &release, NULL); ++ if (ret) ++ return ret; ++ ++ ret = qxl_release_list_add(release, qcrtc->cursor_bo); ++ if (ret) ++ goto out_free_release; ++ ++ ret = qxl_release_reserve_list(release, false); ++ if (ret) ++ goto out_free_release; ++ ++ cmd = (struct qxl_cursor_cmd *)qxl_release_map(qdev, release); ++ cmd->type = QXL_CURSOR_SET; ++ cmd->u.set.position.x = plane->state->crtc_x + fb->hot_x; ++ cmd->u.set.position.y = plane->state->crtc_y + fb->hot_y; ++ ++ cmd->u.set.shape = qxl_bo_physical_address(qdev, qcrtc->cursor_bo, 0); ++ ++ cmd->u.set.visible = 1; ++ qxl_release_unmap(qdev, release, &cmd->release_info); ++ ++ qxl_push_cursor_ring_release(qdev, release, QXL_CMD_CURSOR, false); ++ qxl_release_fence_buffer_objects(release); ++ ++ return ret; ++ ++out_free_release: ++ qxl_release_free(qdev, release); ++ return ret; ++} ++ + static void qxl_primary_atomic_update(struct drm_plane *plane, + struct drm_plane_state *old_state) + { + struct qxl_device *qdev = plane->dev->dev_private; + struct qxl_framebuffer *qfb = + to_qxl_framebuffer(plane->state->fb); + struct qxl_framebuffer *qfb_old; + struct qxl_bo *bo = gem_to_qxl_bo(qfb->obj); + struct qxl_bo *bo_old; + struct drm_clip_rect norect = { + .x1 = 0, + .y1 = 0, + .x2 = qfb->base.width, + .y2 = qfb->base.height + }; ++ int ret; + bool same_shadow = false; + + if (old_state->fb) { + qfb_old = to_qxl_framebuffer(old_state->fb); + bo_old = gem_to_qxl_bo(qfb_old->obj); + } else { + bo_old = NULL; + } + + if (bo == bo_old) + return; + + if (bo_old && bo_old->shadow && bo->shadow && + bo_old->shadow == bo->shadow) { + same_shadow = true; + } + + if (bo_old && bo_old->is_primary) { + if (!same_shadow) + qxl_io_destroy_primary(qdev); + bo_old->is_primary = false; ++ ++ ret = qxl_primary_apply_cursor(plane); ++ if (ret) { ++ DRM_ERROR("could not set cursor after creating primary"); ++ } + } + + if (!bo->is_primary) { + if (!same_shadow) + qxl_io_create_primary(qdev, 0, bo); + bo->is_primary = true; + } + + qxl_draw_dirty_fb(qdev, qfb, bo, 0, 0, &norect, 1, 1); + } + + static void qxl_primary_atomic_disable(struct drm_plane *plane, + struct drm_plane_state *old_state) + { + struct qxl_device *qdev = plane->dev->dev_private; + + if (old_state->fb) { + struct qxl_framebuffer *qfb = + to_qxl_framebuffer(old_state->fb); + struct qxl_bo *bo = gem_to_qxl_bo(qfb->obj); + + if (bo->is_primary) { + qxl_io_destroy_primary(qdev); + bo->is_primary = false; + } + } + } + + int qxl_plane_atomic_check(struct drm_plane *plane, + struct drm_plane_state *state) + { + return 0; + } + + static void qxl_cursor_atomic_update(struct drm_plane *plane, + struct drm_plane_state *old_state) + { + struct drm_device *dev = plane->dev; + struct qxl_device *qdev = dev->dev_private; + struct drm_framebuffer *fb = plane->state->fb; ++ struct qxl_crtc *qcrtc = to_qxl_crtc(plane->state->crtc); + struct qxl_release *release; + struct qxl_cursor_cmd *cmd; + struct qxl_cursor *cursor; + struct drm_gem_object *obj; + struct qxl_bo *cursor_bo = NULL, *user_bo = NULL; + int ret; + void *user_ptr; + int size = 64*64*4; + + ret = qxl_alloc_release_reserved(qdev, sizeof(*cmd), + QXL_RELEASE_CURSOR_CMD, + &release, NULL); + if (ret) + return; + + if (fb != old_state->fb) { + obj = to_qxl_framebuffer(fb)->obj; + user_bo = gem_to_qxl_bo(obj); + + /* pinning is done in the prepare/cleanup framevbuffer */ + ret = qxl_bo_kmap(user_bo, &user_ptr); + if (ret) + goto out_free_release; + + ret = qxl_alloc_bo_reserved(qdev, release, + sizeof(struct qxl_cursor) + size, + &cursor_bo); + if (ret) + goto out_kunmap; + + ret = qxl_release_reserve_list(release, true); + if (ret) + goto out_free_bo; + + ret = qxl_bo_kmap(cursor_bo, (void **)&cursor); + if (ret) + goto out_backoff; + + cursor->header.unique = 0; + cursor->header.type = SPICE_CURSOR_TYPE_ALPHA; + cursor->header.width = 64; + cursor->header.height = 64; + cursor->header.hot_spot_x = fb->hot_x; + cursor->header.hot_spot_y = fb->hot_y; + cursor->data_size = size; + cursor->chunk.next_chunk = 0; + cursor->chunk.prev_chunk = 0; + cursor->chunk.data_size = size; + memcpy(cursor->chunk.data, user_ptr, size); + qxl_bo_kunmap(cursor_bo); + qxl_bo_kunmap(user_bo); + + cmd = (struct qxl_cursor_cmd *) qxl_release_map(qdev, release); + cmd->u.set.visible = 1; + cmd->u.set.shape = qxl_bo_physical_address(qdev, + cursor_bo, 0); + cmd->type = QXL_CURSOR_SET; ++ ++ qxl_bo_unref (&qcrtc->cursor_bo); ++ qcrtc->cursor_bo = cursor_bo; ++ cursor_bo = NULL; + } else { + + ret = qxl_release_reserve_list(release, true); + if (ret) + goto out_free_release; + + cmd = (struct qxl_cursor_cmd *) qxl_release_map(qdev, release); + cmd->type = QXL_CURSOR_MOVE; + } + + cmd->u.position.x = plane->state->crtc_x + fb->hot_x; + cmd->u.position.y = plane->state->crtc_y + fb->hot_y; + + qxl_release_unmap(qdev, release, &cmd->release_info); + qxl_push_cursor_ring_release(qdev, release, QXL_CMD_CURSOR, false); + qxl_release_fence_buffer_objects(release); + + qxl_bo_unref (&cursor_bo); + + return; + + out_backoff: + qxl_release_backoff_reserve_list(release); + out_free_bo: + qxl_bo_unref(&cursor_bo); + out_kunmap: + qxl_bo_kunmap(user_bo); + out_free_release: + qxl_release_free(qdev, release); + return; +diff --git a/drivers/gpu/drm/qxl/qxl_drv.h b/drivers/gpu/drm/qxl/qxl_drv.h +index b5e9dc6eebac..d3e2373ef821 100644 +--- a/drivers/gpu/drm/qxl/qxl_drv.h ++++ b/drivers/gpu/drm/qxl/qxl_drv.h +@@ -107,60 +107,62 @@ struct qxl_bo { + struct ttm_bo_kmap_obj kmap; + unsigned pin_count; + void *kptr; + int type; + + /* Constant after initialization */ + struct drm_gem_object gem_base; + bool is_primary; /* is this now a primary surface */ + bool is_dumb; + struct qxl_bo *shadow; + bool hw_surf_alloc; + struct qxl_surface surf; + uint32_t surface_id; + struct qxl_release *surf_create; + }; + #define gem_to_qxl_bo(gobj) container_of((gobj), struct qxl_bo, gem_base) + #define to_qxl_bo(tobj) container_of((tobj), struct qxl_bo, tbo) + + struct qxl_gem { + struct mutex mutex; + struct list_head objects; + }; + + struct qxl_bo_list { + struct ttm_validate_buffer tv; + }; + + struct qxl_crtc { + struct drm_crtc base; + int index; ++ ++ struct qxl_bo *cursor_bo; + }; + + struct qxl_output { + int index; + struct drm_connector base; + struct drm_encoder enc; + }; + + struct qxl_framebuffer { + struct drm_framebuffer base; + struct drm_gem_object *obj; + }; + + #define to_qxl_crtc(x) container_of(x, struct qxl_crtc, base) + #define drm_connector_to_qxl_output(x) container_of(x, struct qxl_output, base) + #define drm_encoder_to_qxl_output(x) container_of(x, struct qxl_output, enc) + #define to_qxl_framebuffer(x) container_of(x, struct qxl_framebuffer, base) + + struct qxl_mman { + struct ttm_bo_global_ref bo_global_ref; + struct drm_global_reference mem_global_ref; + bool mem_global_referenced; + struct ttm_bo_device bdev; + }; + + struct qxl_mode_info { + bool mode_config_initialized; + + /* pointer to fbdev info structure */ + struct qxl_fbdev *qfbdev; +-- +2.14.3 + @@ -1,3 +1,3 @@ SHA512 (linux-4.13.tar.xz) = a557c2f0303ae618910b7106ff63d9978afddf470f03cb72aa748213e099a0ecd5f3119aea6cbd7b61df30ca6ef3ec57044d524b7babbaabddf8b08b8bafa7d2 SHA512 (perf-man-4.13.tar.gz) = 9bcc2cd8e56ec583ed2d8e0b0c88e7a94035a1915e40b3177bb02d6c0f10ddd4df9b097b1f5af59efc624226b613e240ddba8ddc2156f3682f992d5455fc5c03 -SHA512 (patch-4.13.14.xz) = 6cbcd43f1691be45f74a2d06ed55d59e4dc49c9a02d7573f3ca11130ad27a6f35f36d9da054e762ffbf9a5517735fba44bae601b60d477fcf5603a8867221c08 +SHA512 (patch-4.13.15.xz) = 54e1d3b526984efe90a5c759b35ac849ac65525c977b3982ef32b0fbb83e73f1fca92d73c3ffb1f23643d9f72a3083eeb4edb54768b105138722434811f622c4 |