]> xenbits.xensource.com Git - xen.git/commitdiff
ioreq: do not build arch_vcpu_ioreq_completion() for non-VMX configurations
authorXenia Ragiadakou <burzalodowa@gmail.com>
Thu, 29 Aug 2024 08:02:46 +0000 (10:02 +0200)
committerJan Beulich <jbeulich@suse.com>
Thu, 29 Aug 2024 08:02:46 +0000 (10:02 +0200)
VIO_realmode_completion is specific to vmx realmode and thus the function
arch_vcpu_ioreq_completion() has actual handling work only in VMX-enabled build,
as for the rest x86 and ARM build configurations it is basically a stub.

Here a separate configuration option ARCH_VCPU_IOREQ_COMPLETION introduced that
tells whether the platform we're building for requires any specific ioreq
completion handling. As of now only VMX has such requirement, so the option is
selected by INTEL_VMX, for other configurations a generic default stub is
provided (it is ARM's version of arch_vcpu_ioreq_completion() moved to common
header).

Signed-off-by: Xenia Ragiadakou <burzalodowa@gmail.com>
Signed-off-by: Sergiy Kibrik <Sergiy_Kibrik@epam.com>
Acked-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
xen/Kconfig
xen/arch/arm/ioreq.c
xen/arch/x86/Kconfig
xen/arch/x86/hvm/ioreq.c
xen/include/xen/ioreq.h

index e459cdac0cd7721650e462f464cd60ee7c19efa3..72fdb8376087853abe7981b04ca4f16376decefe 100644 (file)
@@ -95,4 +95,11 @@ config LTO
 config ARCH_SUPPORTS_INT128
        bool
 
+#
+# For platforms that require specific handling of per-vCPU ioreq completion
+# events
+#
+config ARCH_VCPU_IOREQ_COMPLETION
+       bool
+
 source "Kconfig.debug"
index 5df755b48be81b7905212f8cf1fccd903b513e83..2e829d2e7f3760401b96fa7c930e2015fb1cf463 100644 (file)
@@ -135,12 +135,6 @@ bool arch_ioreq_complete_mmio(void)
     return false;
 }
 
-bool arch_vcpu_ioreq_completion(enum vio_completion completion)
-{
-    ASSERT_UNREACHABLE();
-    return true;
-}
-
 /*
  * The "legacy" mechanism of mapping magic pages for the IOREQ servers
  * is x86 specific, so the following hooks don't need to be implemented on Arm:
index 7ef5c8bc48aacfbb00e0f6fa80fe6e1a4a27e512..74e081c7bdd0e2acb61fe77a03732d6b125b6ad2 100644 (file)
@@ -127,6 +127,7 @@ config AMD_SVM
 
 config INTEL_VMX
        def_bool HVM
+       select ARCH_VCPU_IOREQ_COMPLETION
 
 config XEN_SHSTK
        bool "Supervisor Shadow Stacks"
index 4eb7a70182ab31fbb541bc4b82767d73ae781b2d..5c3d0c69aa99dadd78acbd3fa828a08ccf34c3b8 100644 (file)
@@ -29,6 +29,7 @@ bool arch_ioreq_complete_mmio(void)
     return handle_mmio();
 }
 
+#ifdef CONFIG_VCPU_ARCH_IOREQ_COMPLETION
 bool arch_vcpu_ioreq_completion(enum vio_completion completion)
 {
     switch ( completion )
@@ -51,6 +52,7 @@ bool arch_vcpu_ioreq_completion(enum vio_completion completion)
 
     return true;
 }
+#endif
 
 static gfn_t hvm_alloc_legacy_ioreq_gfn(struct ioreq_server *s)
 {
index cd399adf17251747012505272a19b91701f53663..29a17e8ff52e080eb584368e5ccb1f5a786d0103 100644 (file)
@@ -111,7 +111,17 @@ void ioreq_domain_init(struct domain *d);
 int ioreq_server_dm_op(struct xen_dm_op *op, struct domain *d, bool *const_op);
 
 bool arch_ioreq_complete_mmio(void);
+
+#ifdef CONFIG_VCPU_ARCH_IOREQ_COMPLETION
 bool arch_vcpu_ioreq_completion(enum vio_completion completion);
+#else
+static inline bool arch_vcpu_ioreq_completion(enum vio_completion completion)
+{
+    ASSERT_UNREACHABLE();
+    return true;
+}
+#endif
+
 int arch_ioreq_server_map_pages(struct ioreq_server *s);
 void arch_ioreq_server_unmap_pages(struct ioreq_server *s);
 void arch_ioreq_server_enable(struct ioreq_server *s);