From: Greg Kroah-Hartman Date: Wed, 15 Sep 2021 11:34:45 +0000 (+0200) Subject: 4.9-stable patches X-Git-Tag: v5.14.5~52 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=013cddcdc88b2ec35521d4f7adf2bc52ca60c55e;p=thirdparty%2Fkernel%2Fstable-queue.git 4.9-stable patches added patches: pci-msi-skip-masking-msi-x-on-xen-pv.patch powerpc-perf-hv-gpci-fix-counter-value-parsing.patch rtc-tps65910-correct-driver-module-alias.patch xen-fix-setting-of-max_pfn-in-shared_info.patch --- diff --git a/queue-4.9/pci-msi-skip-masking-msi-x-on-xen-pv.patch b/queue-4.9/pci-msi-skip-masking-msi-x-on-xen-pv.patch new file mode 100644 index 00000000000..9a216b13d9b --- /dev/null +++ b/queue-4.9/pci-msi-skip-masking-msi-x-on-xen-pv.patch @@ -0,0 +1,55 @@ +From 1a519dc7a73c977547d8b5108d98c6e769c89f4b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?= + +Date: Thu, 26 Aug 2021 19:03:42 +0200 +Subject: PCI/MSI: Skip masking MSI-X on Xen PV +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Marek Marczykowski-Górecki + +commit 1a519dc7a73c977547d8b5108d98c6e769c89f4b upstream. + +When running as Xen PV guest, masking MSI-X is a responsibility of the +hypervisor. The guest has no write access to the relevant BAR at all - when +it tries to, it results in a crash like this: + + BUG: unable to handle page fault for address: ffffc9004069100c + #PF: supervisor write access in kernel mode + #PF: error_code(0x0003) - permissions violation + RIP: e030:__pci_enable_msix_range.part.0+0x26b/0x5f0 + e1000e_set_interrupt_capability+0xbf/0xd0 [e1000e] + e1000_probe+0x41f/0xdb0 [e1000e] + local_pci_probe+0x42/0x80 + (...) + +The recently introduced function msix_mask_all() does not check the global +variable pci_msi_ignore_mask which is set by XEN PV to bypass the masking +of MSI[-X] interrupts. + +Add the check to make this function XEN PV compatible. + +Fixes: 7d5ec3d36123 ("PCI/MSI: Mask all unused MSI-X entries") +Signed-off-by: Marek Marczykowski-Górecki +Signed-off-by: Thomas Gleixner +Acked-by: Bjorn Helgaas +Cc: stable@vger.kernel.org +Link: https://lore.kernel.org/r/20210826170342.135172-1-marmarek@invisiblethingslab.com +Signed-off-by: Greg Kroah-Hartman +--- + drivers/pci/msi.c | 3 +++ + 1 file changed, 3 insertions(+) + +--- a/drivers/pci/msi.c ++++ b/drivers/pci/msi.c +@@ -777,6 +777,9 @@ static void msix_mask_all(void __iomem * + u32 ctrl = PCI_MSIX_ENTRY_CTRL_MASKBIT; + int i; + ++ if (pci_msi_ignore_mask) ++ return; ++ + for (i = 0; i < tsize; i++, base += PCI_MSIX_ENTRY_SIZE) + writel(ctrl, base + PCI_MSIX_ENTRY_VECTOR_CTRL); + } diff --git a/queue-4.9/powerpc-perf-hv-gpci-fix-counter-value-parsing.patch b/queue-4.9/powerpc-perf-hv-gpci-fix-counter-value-parsing.patch new file mode 100644 index 00000000000..6a7ad847920 --- /dev/null +++ b/queue-4.9/powerpc-perf-hv-gpci-fix-counter-value-parsing.patch @@ -0,0 +1,67 @@ +From f9addd85fbfacf0d155e83dbee8696d6df5ed0c7 Mon Sep 17 00:00:00 2001 +From: Kajol Jain +Date: Fri, 13 Aug 2021 13:51:58 +0530 +Subject: powerpc/perf/hv-gpci: Fix counter value parsing + +From: Kajol Jain + +commit f9addd85fbfacf0d155e83dbee8696d6df5ed0c7 upstream. + +H_GetPerformanceCounterInfo (0xF080) hcall returns the counter data in +the result buffer. Result buffer has specific format defined in the PAPR +specification. One of the fields is counter offset and width of the +counter data returned. + +Counter data are returned in a unsigned char array in big endian byte +order. To get the final counter data, the values must be left shifted +byte at a time. But commit 220a0c609ad17 ("powerpc/perf: Add support for +the hv gpci (get performance counter info) interface") made the shifting +bitwise and also assumed little endian order. Because of that, hcall +counters values are reported incorrectly. + +In particular this can lead to counters go backwards which messes up the +counter prev vs now calculation and leads to huge counter value +reporting: + + #: perf stat -e hv_gpci/system_tlbie_count_and_time_tlbie_instructions_issued/ + -C 0 -I 1000 + time counts unit events + 1.000078854 18,446,744,073,709,535,232 hv_gpci/system_tlbie_count_and_time_tlbie_instructions_issued/ + 2.000213293 0 hv_gpci/system_tlbie_count_and_time_tlbie_instructions_issued/ + 3.000320107 0 hv_gpci/system_tlbie_count_and_time_tlbie_instructions_issued/ + 4.000428392 0 hv_gpci/system_tlbie_count_and_time_tlbie_instructions_issued/ + 5.000537864 0 hv_gpci/system_tlbie_count_and_time_tlbie_instructions_issued/ + 6.000649087 0 hv_gpci/system_tlbie_count_and_time_tlbie_instructions_issued/ + 7.000760312 0 hv_gpci/system_tlbie_count_and_time_tlbie_instructions_issued/ + 8.000865218 16,448 hv_gpci/system_tlbie_count_and_time_tlbie_instructions_issued/ + 9.000978985 18,446,744,073,709,535,232 hv_gpci/system_tlbie_count_and_time_tlbie_instructions_issued/ + 10.001088891 16,384 hv_gpci/system_tlbie_count_and_time_tlbie_instructions_issued/ + 11.001201435 0 hv_gpci/system_tlbie_count_and_time_tlbie_instructions_issued/ + 12.001307937 18,446,744,073,709,535,232 hv_gpci/system_tlbie_count_and_time_tlbie_instructions_issued/ + +Fix the shifting logic to correct match the format, ie. read bytes in +big endian order. + +Fixes: e4f226b1580b ("powerpc/perf/hv-gpci: Increase request buffer size") +Cc: stable@vger.kernel.org # v4.6+ +Reported-by: Nageswara R Sastry +Signed-off-by: Kajol Jain +Tested-by: Nageswara R Sastry +Signed-off-by: Michael Ellerman +Link: https://lore.kernel.org/r/20210813082158.429023-1-kjain@linux.ibm.com +Signed-off-by: Greg Kroah-Hartman +--- + arch/powerpc/perf/hv-gpci.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/arch/powerpc/perf/hv-gpci.c ++++ b/arch/powerpc/perf/hv-gpci.c +@@ -168,7 +168,7 @@ static unsigned long single_gpci_request + */ + count = 0; + for (i = offset; i < offset + length; i++) +- count |= arg->bytes[i] << (i - offset); ++ count |= (u64)(arg->bytes[i]) << ((length - 1 - (i - offset)) * 8); + + *value = count; + out: diff --git a/queue-4.9/rtc-tps65910-correct-driver-module-alias.patch b/queue-4.9/rtc-tps65910-correct-driver-module-alias.patch new file mode 100644 index 00000000000..39e15133d8d --- /dev/null +++ b/queue-4.9/rtc-tps65910-correct-driver-module-alias.patch @@ -0,0 +1,33 @@ +From 8d448fa0a8bb1c8d94eef7647edffe9ac81a281e Mon Sep 17 00:00:00 2001 +From: Dmitry Osipenko +Date: Sun, 8 Aug 2021 19:00:30 +0300 +Subject: rtc: tps65910: Correct driver module alias + +From: Dmitry Osipenko + +commit 8d448fa0a8bb1c8d94eef7647edffe9ac81a281e upstream. + +The TPS65910 RTC driver module doesn't auto-load because of the wrong +module alias that doesn't match the device name, fix it. + +Cc: stable@vger.kernel.org +Reported-by: Anton Bambura +Tested-by: Anton Bambura +Signed-off-by: Dmitry Osipenko +Signed-off-by: Alexandre Belloni +Link: https://lore.kernel.org/r/20210808160030.8556-1-digetx@gmail.com +Signed-off-by: Greg Kroah-Hartman +--- + drivers/rtc/rtc-tps65910.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/rtc/rtc-tps65910.c ++++ b/drivers/rtc/rtc-tps65910.c +@@ -332,6 +332,6 @@ static struct platform_driver tps65910_r + }; + + module_platform_driver(tps65910_rtc_driver); +-MODULE_ALIAS("platform:rtc-tps65910"); ++MODULE_ALIAS("platform:tps65910-rtc"); + MODULE_AUTHOR("Venu Byravarasu "); + MODULE_LICENSE("GPL"); diff --git a/queue-4.9/series b/queue-4.9/series index 28a9523bb3c..e07d89607ca 100644 --- a/queue-4.9/series +++ b/queue-4.9/series @@ -87,3 +87,7 @@ kvm-x86-update-vcpu-s-hv_clock-before-back-to-guest-when-tsc_offset-is-adjusted. ima-remove-wmissing-prototypes-warning.patch clk-kirkwood-fix-a-clocking-boot-regression.patch fbmem-don-t-allow-too-huge-resolutions.patch +rtc-tps65910-correct-driver-module-alias.patch +pci-msi-skip-masking-msi-x-on-xen-pv.patch +powerpc-perf-hv-gpci-fix-counter-value-parsing.patch +xen-fix-setting-of-max_pfn-in-shared_info.patch diff --git a/queue-4.9/xen-fix-setting-of-max_pfn-in-shared_info.patch b/queue-4.9/xen-fix-setting-of-max_pfn-in-shared_info.patch new file mode 100644 index 00000000000..d49f03b7db1 --- /dev/null +++ b/queue-4.9/xen-fix-setting-of-max_pfn-in-shared_info.patch @@ -0,0 +1,51 @@ +From 4b511d5bfa74b1926daefd1694205c7f1bcf677f Mon Sep 17 00:00:00 2001 +From: Juergen Gross +Date: Fri, 30 Jul 2021 11:26:21 +0200 +Subject: xen: fix setting of max_pfn in shared_info + +From: Juergen Gross + +commit 4b511d5bfa74b1926daefd1694205c7f1bcf677f upstream. + +Xen PV guests are specifying the highest used PFN via the max_pfn +field in shared_info. This value is used by the Xen tools when saving +or migrating the guest. + +Unfortunately this field is misnamed, as in reality it is specifying +the number of pages (including any memory holes) of the guest, so it +is the highest used PFN + 1. Renaming isn't possible, as this is a +public Xen hypervisor interface which needs to be kept stable. + +The kernel will set the value correctly initially at boot time, but +when adding more pages (e.g. due to memory hotplug or ballooning) a +real PFN number is stored in max_pfn. This is done when expanding the +p2m array, and the PFN stored there is even possibly wrong, as it +should be the last possible PFN of the just added P2M frame, and not +one which led to the P2M expansion. + +Fix that by setting shared_info->max_pfn to the last possible PFN + 1. + +Fixes: 98dd166ea3a3c3 ("x86/xen/p2m: hint at the last populated P2M entry") +Cc: stable@vger.kernel.org +Signed-off-by: Juergen Gross +Reviewed-by: Jan Beulich +Link: https://lore.kernel.org/r/20210730092622.9973-2-jgross@suse.com +Signed-off-by: Juergen Gross +Signed-off-by: Greg Kroah-Hartman +--- + arch/x86/xen/p2m.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/arch/x86/xen/p2m.c ++++ b/arch/x86/xen/p2m.c +@@ -623,8 +623,8 @@ int xen_alloc_p2m_entry(unsigned long pf + } + + /* Expanded the p2m? */ +- if (pfn > xen_p2m_last_pfn) { +- xen_p2m_last_pfn = pfn; ++ if (pfn >= xen_p2m_last_pfn) { ++ xen_p2m_last_pfn = ALIGN(pfn + 1, P2M_PER_PAGE); + HYPERVISOR_shared_info->arch.max_pfn = xen_p2m_last_pfn; + } +