From: Greg Kroah-Hartman Date: Sat, 9 Jul 2022 08:25:12 +0000 (+0200) Subject: 4.9-stable patches X-Git-Tag: v4.9.323~49 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=37dbbca79786c5ffeec33c22942b8307fede1bff;p=thirdparty%2Fkernel%2Fstable-queue.git 4.9-stable patches added patches: iommu-vt-d-fix-pci-bus-rescan-device-hot-add.patch video-of_display_timing.h-include-errno.h.patch --- diff --git a/queue-4.9/iommu-vt-d-fix-pci-bus-rescan-device-hot-add.patch b/queue-4.9/iommu-vt-d-fix-pci-bus-rescan-device-hot-add.patch new file mode 100644 index 00000000000..c82ce8d106a --- /dev/null +++ b/queue-4.9/iommu-vt-d-fix-pci-bus-rescan-device-hot-add.patch @@ -0,0 +1,57 @@ +From 316f92a705a4c2bf4712135180d56f3cca09243a Mon Sep 17 00:00:00 2001 +From: Yian Chen +Date: Fri, 20 May 2022 17:21:15 -0700 +Subject: iommu/vt-d: Fix PCI bus rescan device hot add + +From: Yian Chen + +commit 316f92a705a4c2bf4712135180d56f3cca09243a upstream. + +Notifier calling chain uses priority to determine the execution +order of the notifiers or listeners registered to the chain. +PCI bus device hot add utilizes the notification mechanism. + +The current code sets low priority (INT_MIN) to Intel +dmar_pci_bus_notifier and postpones DMAR decoding after adding +new device into IOMMU. The result is that struct device pointer +cannot be found in DRHD search for the new device's DMAR/IOMMU. +Subsequently, the device is put under the "catch-all" IOMMU +instead of the correct one. This could cause system hang when +device TLB invalidation is sent to the wrong IOMMU. Invalidation +timeout error and hard lockup have been observed and data +inconsistency/crush may occur as well. + +This patch fixes the issue by setting a positive priority(1) for +dmar_pci_bus_notifier while the priority of IOMMU bus notifier +uses the default value(0), therefore DMAR decoding will be in +advance of DRHD search for a new device to find the correct IOMMU. + +Following is a 2-step example that triggers the bug by simulating +PCI device hot add behavior in Intel Sapphire Rapids server. + +echo 1 > /sys/bus/pci/devices/0000:6a:01.0/remove +echo 1 > /sys/bus/pci/rescan + +Fixes: 59ce0515cdaf ("iommu/vt-d: Update DRHD/RMRR/ATSR device scope") +Cc: stable@vger.kernel.org # v3.15+ +Reported-by: Zhang, Bernice +Signed-off-by: Jacob Pan +Signed-off-by: Yian Chen +Link: https://lore.kernel.org/r/20220521002115.1624069-1-yian.chen@intel.com +Signed-off-by: Joerg Roedel +Signed-off-by: Greg Kroah-Hartman +--- + drivers/iommu/dmar.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/iommu/dmar.c ++++ b/drivers/iommu/dmar.c +@@ -373,7 +373,7 @@ static int dmar_pci_bus_notifier(struct + + static struct notifier_block dmar_pci_bus_nb = { + .notifier_call = dmar_pci_bus_notifier, +- .priority = INT_MIN, ++ .priority = 1, + }; + + static struct dmar_drhd_unit * diff --git a/queue-4.9/series b/queue-4.9/series index 3e9416aed64..cfb96507a93 100644 --- a/queue-4.9/series +++ b/queue-4.9/series @@ -3,3 +3,5 @@ can-grcan-grcan_probe-remove-extra-of_node_get.patch can-gs_usb-gs_usb_open-close-fix-memory-leak.patch usbnet-fix-memory-leak-in-error-case.patch net-rose-fix-uaf-bug-caused-by-rose_t0timer_expiry.patch +iommu-vt-d-fix-pci-bus-rescan-device-hot-add.patch +video-of_display_timing.h-include-errno.h.patch diff --git a/queue-4.9/video-of_display_timing.h-include-errno.h.patch b/queue-4.9/video-of_display_timing.h-include-errno.h.patch new file mode 100644 index 00000000000..3cc32f23147 --- /dev/null +++ b/queue-4.9/video-of_display_timing.h-include-errno.h.patch @@ -0,0 +1,33 @@ +From 3663a2fb325b8782524f3edb0ae32d6faa615109 Mon Sep 17 00:00:00 2001 +From: Hsin-Yi Wang +Date: Fri, 1 Jul 2022 01:33:29 +0800 +Subject: video: of_display_timing.h: include errno.h + +From: Hsin-Yi Wang + +commit 3663a2fb325b8782524f3edb0ae32d6faa615109 upstream. + +If CONFIG_OF is not enabled, default of_get_display_timing() returns an +errno, so include the header. + +Fixes: 422b67e0b31a ("videomode: provide dummy inline functions for !CONFIG_OF") +Suggested-by: Stephen Boyd +Signed-off-by: Hsin-Yi Wang +Reviewed-by: Stephen Boyd +Signed-off-by: Helge Deller +Signed-off-by: Greg Kroah-Hartman +--- + include/video/of_display_timing.h | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/include/video/of_display_timing.h ++++ b/include/video/of_display_timing.h +@@ -9,6 +9,8 @@ + #ifndef __LINUX_OF_DISPLAY_TIMING_H + #define __LINUX_OF_DISPLAY_TIMING_H + ++#include ++ + struct device_node; + struct display_timing; + struct display_timings;