From 1fec3ae2869ced029993827bd6b4bedc47160c68 Mon Sep 17 00:00:00 2001 From: Andrew Lukoshko Date: Mon, 28 Aug 2023 12:56:50 +0000 Subject: [PATCH] x86/xen: Split HVM vector callback setup and interrupt gate allocation --- ...M-vector-callback-setup-and-interrup.patch | 110 ++++++++++++++++++ SPECS/kernel.spec | 12 +- 2 files changed, 120 insertions(+), 2 deletions(-) create mode 100644 SOURCES/9001-x86-xen-Split-HVM-vector-callback-setup-and-interrup.patch diff --git a/SOURCES/9001-x86-xen-Split-HVM-vector-callback-setup-and-interrup.patch b/SOURCES/9001-x86-xen-Split-HVM-vector-callback-setup-and-interrup.patch new file mode 100644 index 000000000..dbae34384 --- /dev/null +++ b/SOURCES/9001-x86-xen-Split-HVM-vector-callback-setup-and-interrup.patch @@ -0,0 +1,110 @@ +From a0bb51f2638e0810c347024679239fd10a8f7990 Mon Sep 17 00:00:00 2001 +From: Vitaly Kuznetsov +Date: Tue, 28 Apr 2020 11:38:22 +0200 +Subject: [PATCH] x86/xen: Split HVM vector callback setup and interrupt gate + allocation + +As a preparatory change for making alloc_intr_gate() __init split +xen_callback_vector() into callback vector setup via hypercall +(xen_setup_callback_vector()) and interrupt gate allocation +(xen_alloc_callback_vector()). + +xen_setup_callback_vector() is being called twice: on init and upon +system resume from xen_hvm_post_suspend(). alloc_intr_gate() only +needs to be called once. + +Suggested-by: Thomas Gleixner +Signed-off-by: Vitaly Kuznetsov +Signed-off-by: Thomas Gleixner +Link: https://lkml.kernel.org/r/20200428093824.1451532-2-vkuznets@redhat.com +--- + arch/x86/xen/suspend_hvm.c | 2 +- + arch/x86/xen/xen-ops.h | 2 +- + drivers/xen/events/events_base.c | 28 +++++++++++++++++----------- + 3 files changed, 19 insertions(+), 13 deletions(-) + +diff --git a/arch/x86/xen/suspend_hvm.c b/arch/x86/xen/suspend_hvm.c +index e666b614cf6d..5152afe16876 100644 +--- a/arch/x86/xen/suspend_hvm.c ++++ b/arch/x86/xen/suspend_hvm.c +@@ -13,6 +13,6 @@ void xen_hvm_post_suspend(int suspend_cancelled) + xen_hvm_init_shared_info(); + xen_vcpu_restore(); + } +- xen_callback_vector(); ++ xen_setup_callback_vector(); + xen_unplug_emulated_devices(); + } +diff --git a/arch/x86/xen/xen-ops.h b/arch/x86/xen/xen-ops.h +index 45a441c33d6d..1cc1568bfe04 100644 +--- a/arch/x86/xen/xen-ops.h ++++ b/arch/x86/xen/xen-ops.h +@@ -55,7 +55,7 @@ void xen_enable_sysenter(void); + void xen_enable_syscall(void); + void xen_vcpu_restore(void); + +-void xen_callback_vector(void); ++void xen_setup_callback_vector(void); + void xen_hvm_init_shared_info(void); + void xen_unplug_emulated_devices(void); + +diff --git a/drivers/xen/events/events_base.c b/drivers/xen/events/events_base.c +index 3a791c8485d0..eb35c3cda9a6 100644 +--- a/drivers/xen/events/events_base.c ++++ b/drivers/xen/events/events_base.c +@@ -1639,26 +1639,30 @@ EXPORT_SYMBOL_GPL(xen_set_callback_via); + /* Vector callbacks are better than PCI interrupts to receive event + * channel notifications because we can receive vector callbacks on any + * vcpu and we don't need PCI support or APIC interactions. */ +-void xen_callback_vector(void) ++void xen_setup_callback_vector(void) + { +- int rc; + uint64_t callback_via; + + if (xen_have_vector_callback) { + callback_via = HVM_CALLBACK_VECTOR(HYPERVISOR_CALLBACK_VECTOR); +- rc = xen_set_callback_via(callback_via); +- if (rc) { ++ if (xen_set_callback_via(callback_via)) { + pr_err("Request for Xen HVM callback vector failed\n"); + xen_have_vector_callback = 0; +- return; + } +- pr_info_once("Xen HVM callback vector for event delivery is enabled\n"); +- alloc_intr_gate(HYPERVISOR_CALLBACK_VECTOR, +- xen_hvm_callback_vector); + } + } ++ ++static __init void xen_alloc_callback_vector(void) ++{ ++ if (!xen_have_vector_callback) ++ return; ++ ++ pr_info("Xen HVM callback vector for event delivery is enabled\n"); ++ alloc_intr_gate(HYPERVISOR_CALLBACK_VECTOR, xen_hvm_callback_vector); ++} + #else +-void xen_callback_vector(void) {} ++void xen_setup_callback_vector(void) {} ++static inline void xen_alloc_callback_vector(void) {} + #endif + + #undef MODULE_PARAM_PREFIX +@@ -1692,8 +1696,10 @@ void __init xen_init_IRQ(void) + if (xen_initial_domain()) + pci_xen_initial_domain(); + } +- if (xen_feature(XENFEAT_hvm_callback_vector)) +- xen_callback_vector(); ++ if (xen_feature(XENFEAT_hvm_callback_vector)) { ++ xen_setup_callback_vector(); ++ xen_alloc_callback_vector(); ++ } + + if (xen_hvm_domain()) { + native_init_IRQ(); +-- +2.27.0 + diff --git a/SPECS/kernel.spec b/SPECS/kernel.spec index 99663c900..a657080e5 100644 --- a/SPECS/kernel.spec +++ b/SPECS/kernel.spec @@ -38,11 +38,11 @@ # define buildid .local %define rpmversion 4.18.0 -%define pkgrelease 477.21.1.el8_8 +%define pkgrelease 477.21.2.el8_8 %define tarfile_release 477.13.1.el8_8 # allow pkg_release to have configurable %%{?dist} tag -%define specrelease 477.21.1%{?dist} +%define specrelease 477.21.2%{?dist} %define pkg_release %{specrelease}%{?buildid} @@ -535,6 +535,8 @@ Patch1008: 1006-xfs-verify-buffer-contents-when-we-skip-log-replay.patch Patch1009: 1007-i2c-xgene-slimpro-Fix-out-of-bounds-bug-in-xgene_sli.patch Patch1010: 1008-perf-Fix-check-before-add_event_to_groups-in-perf_gr.patch +Patch9001: 9001-x86-xen-Split-HVM-vector-callback-setup-and-interrup.patch + # END OF PATCH DEFINITIONS BuildRoot: %{_tmppath}/%{name}-%{KVERREL}-root @@ -1105,6 +1107,9 @@ ApplyPatch 1005-net-sched-Retire-tcindex-classifier.patch ApplyPatch 1006-xfs-verify-buffer-contents-when-we-skip-log-replay.patch ApplyPatch 1007-i2c-xgene-slimpro-Fix-out-of-bounds-bug-in-xgene_sli.patch ApplyPatch 1008-perf-Fix-check-before-add_event_to_groups-in-perf_gr.patch + +ApplyPatch 9001-x86-xen-Split-HVM-vector-callback-setup-and-interrup.patch + ApplyOptionalPatch linux-kernel-test.patch # END OF PATCH APPLICATIONS @@ -2708,6 +2713,9 @@ fi # # %changelog +* Mon Aug 28 2023 Andrew Lukoshko [4.18.0-477.21.2.el8_8] +- x86/xen: Split HVM vector callback setup and interrupt gate allocation + * Tue Aug 8 2023 Nagappan Ramasamy Palaniappan [4.18.0-477.21.1.el8_8] - Bluetooth: L2CAP: Fix accepting connection request for invalid SPSM (Tamás Koczka) {CVE-2022-42896} - net/sched: tcindex: update imperfect hash filters respecting rcu (Jamal Hadi Salim) {CVE-2023-1281}