summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThorsten Leemhuis <fedora@leemhuis.info>2017-11-22 12:21:52 +0100
committerThorsten Leemhuis <fedora@leemhuis.info>2017-11-22 12:21:52 +0100
commit7e236794c7fad2c0cd428ffb5207e316e18d30e6 (patch)
tree87af7979e07f3e9c3cf8e05b72d1a1e93b21a080
parentad7ce96f0d997d55130482cb887e0a677eea4e44 (diff)
parentf65562a4d55f609622cc1e736175ee48dd70bb77 (diff)
downloadkernel-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.patch72
-rw-r--r--0001-staging-vboxvideo-Fix-reporting-invalid-suggested-of.patch118
-rw-r--r--baseconfig/CONFIG_SND_BCD20002
-rw-r--r--kernel-aarch64-debug.config2
-rw-r--r--kernel-aarch64.config2
-rw-r--r--kernel-armv7hl-debug.config2
-rw-r--r--kernel-armv7hl-lpae-debug.config2
-rw-r--r--kernel-armv7hl-lpae.config2
-rw-r--r--kernel-armv7hl.config2
-rw-r--r--kernel-i686-PAE.config2
-rw-r--r--kernel-i686-PAEdebug.config2
-rw-r--r--kernel-i686-debug.config2
-rw-r--r--kernel-i686.config2
-rw-r--r--kernel-ppc64-debug.config2
-rw-r--r--kernel-ppc64.config2
-rw-r--r--kernel-ppc64le-debug.config2
-rw-r--r--kernel-ppc64le.config2
-rw-r--r--kernel-s390x-debug.config2
-rw-r--r--kernel-s390x.config2
-rw-r--r--kernel-x86_64-debug.config2
-rw-r--r--kernel-x86_64.config2
-rw-r--r--kernel.spec20
-rw-r--r--qxl_cursor_fix.patch565
-rw-r--r--sources2
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
+
diff --git a/sources b/sources
index d7ff75a3a..b2d20930c 100644
--- a/sources
+++ b/sources
@@ -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