[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH v2 1/2] x86/hvm: make stdvga support optional


  • To: <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Jiqian Chen <Jiqian.Chen@xxxxxxx>
  • Date: Thu, 20 Feb 2025 17:53:48 +0800
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0)
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=jguRpQumSYfrCTS3CNMWJUYQXN7iVHAgzHE7mZNL2Eo=; b=rbFjmJ3O0mdgTSgZUdnbHzjlGY0Gg14N/Vs4v+ppNM14IZ0Qi3ENiAKgH8EiqC1P7Ld++mONwEfNT0g4oPFNecZdEnWmmIyVGULblbnDSHm0c8GL+yNFtGOzCgtblqo1eiygKC/1AUN6iB9mW0zp/bsU7kTfVOFA0Z9AD/KZ543E2d2RCY+qV6n8xCc99QhSVjWZ86v7ffusMVVa2qoEH52LbYSJsRLGVQPHZf3rqHIMJS3nY5UaB3KAg5xu0pJ8fA2ifZ8Wzp7D1iOcnFrBs8STPkpfVjwQ6SMDOOlRrPKTSqXKw1Zy8U7gSz7DJXI2mWSdwJ5/R8VNX/a1LYkBZw==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=IDqMY78f7/YpH8rG1+o5yzcMkO3g4kSWtfWOV+iA/MuvOYRSGlUpqyEi4qtm3vyD9NCCOChV1+WQxPRYR6YcgfjdWwyzYK6H2GD3FNHFs5lZdNGsrbzDOj/fKOB8nb7yVMHrpvNZGTbL8qEMly8+/WRnAYsMj4ed5oKGLJyMI1+YPzrP9MZbjabgzxHiU7VNsVpnmTEFl98KJXUJ46pKZ2j2aZgFebetiDNbp7gOHF17d0SdLJXA1J3s6PhFuQtS6leJpQd2cc2WVc/+nMuFO0kT0mP2T+P7LqRI3frFCoRw/LV1wpnDYj5BJ11HgfjilzUq3M/2JFjAZ6ZkYsQsKg==
  • Cc: Jan Beulich <jbeulich@xxxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Roger Pau Monné <roger.pau@xxxxxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, "Sergiy Kibrik" <Sergiy_Kibrik@xxxxxxxx>, Huang Rui <ray.huang@xxxxxxx>, Jiqian Chen <Jiqian.Chen@xxxxxxx>
  • Delivery-date: Thu, 20 Feb 2025 09:54:43 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

From: Sergiy Kibrik <Sergiy_Kibrik@xxxxxxxx>

Introduce config option X86_STDVGA so that stdvga driver can be
disabled on systems that don't need it.

What's more, in function emulation_flags_ok, to check if toolstack
pass any emulation flag that disabled in building time.

Signed-off-by: Sergiy Kibrik <Sergiy_Kibrik@xxxxxxxx>
Signed-off-by: Jiqian Chen <Jiqian.Chen@xxxxxxx>
---
Hi all,
this is a rework for 
https://lore.kernel.org/xen-devel/20240912085709.858052-1-Sergiy_Kibrik@xxxxxxxx/T/#u.

v1->v2 changes:
* For emulation flags, added a new file "arch/x86/hvm/Kconfig.emu" to be a 
separate seletion,
  and moved definition of "config X86_STDVGA" into it.
* Added a new macro "#define DISABLED_EMU_MASK (!IS_ENABLED(CONFIG_X86_STDVGA) 
? X86_EMU_VGA : 0)",
  and checked it in function emulation_flags_ok.
* Adjusted macro "has_vvga".

Best regards,
Jiqian Chen.
---
 xen/arch/x86/Kconfig              |  2 ++
 xen/arch/x86/domain.c             |  2 ++
 xen/arch/x86/hvm/Kconfig.emu      | 14 ++++++++++++++
 xen/arch/x86/hvm/Makefile         |  2 +-
 xen/arch/x86/include/asm/domain.h |  6 +++++-
 xen/arch/x86/include/asm/hvm/io.h |  4 ++++
 6 files changed, 28 insertions(+), 2 deletions(-)
 create mode 100644 xen/arch/x86/hvm/Kconfig.emu

diff --git a/xen/arch/x86/Kconfig b/xen/arch/x86/Kconfig
index 9cdd04721afa..e4fedf7e54d8 100644
--- a/xen/arch/x86/Kconfig
+++ b/xen/arch/x86/Kconfig
@@ -123,6 +123,8 @@ config HVM
 
          If unsure, say Y.
 
+source "arch/x86/hvm/Kconfig.emu"
+
 config AMD_SVM
        bool "AMD-V" if EXPERT
        depends on HVM
diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c
index 78a13e6812c9..289c91459470 100644
--- a/xen/arch/x86/domain.c
+++ b/xen/arch/x86/domain.c
@@ -758,6 +758,8 @@ static bool emulation_flags_ok(const struct domain *d, 
uint32_t emflags)
              (X86_EMU_ALL & ~(X86_EMU_VPCI | X86_EMU_USE_PIRQ)) &&
              emflags != X86_EMU_LAPIC )
             return false;
+        if ( emflags & DISABLED_EMU_MASK )
+            return false;
     }
     else if ( emflags != 0 && emflags != X86_EMU_PIT )
     {
diff --git a/xen/arch/x86/hvm/Kconfig.emu b/xen/arch/x86/hvm/Kconfig.emu
new file mode 100644
index 000000000000..aa60b6227036
--- /dev/null
+++ b/xen/arch/x86/hvm/Kconfig.emu
@@ -0,0 +1,14 @@
+menu "Emulated device support"
+       visible if EXPERT
+
+config X86_STDVGA
+       bool "Standard VGA card emulation support" if EXPERT
+       default y
+       depends on HVM
+       help
+         Build stdvga driver that emulates standard VGA card with VESA BIOS
+         Extensions for HVM guests.
+
+         If unsure, say Y.
+
+endmenu
diff --git a/xen/arch/x86/hvm/Makefile b/xen/arch/x86/hvm/Makefile
index 4c1fa5c6c2bf..4d1f8e00eb68 100644
--- a/xen/arch/x86/hvm/Makefile
+++ b/xen/arch/x86/hvm/Makefile
@@ -22,7 +22,7 @@ obj-y += pmtimer.o
 obj-y += quirks.o
 obj-y += rtc.o
 obj-y += save.o
-obj-y += stdvga.o
+obj-$(CONFIG_X86_STDVGA) += stdvga.o
 obj-y += vioapic.o
 obj-y += vlapic.o
 obj-y += vm_event.o
diff --git a/xen/arch/x86/include/asm/domain.h 
b/xen/arch/x86/include/asm/domain.h
index b79d6badd71c..68be23bf3bf4 100644
--- a/xen/arch/x86/include/asm/domain.h
+++ b/xen/arch/x86/include/asm/domain.h
@@ -494,13 +494,17 @@ struct arch_domain
                                  X86_EMU_PIT | X86_EMU_USE_PIRQ |       \
                                  X86_EMU_VPCI)
 
+#define DISABLED_EMU_MASK \
+    (!IS_ENABLED(CONFIG_X86_STDVGA) ? X86_EMU_VGA : 0)
+
 #define has_vlapic(d)      (!!((d)->arch.emulation_flags & X86_EMU_LAPIC))
 #define has_vhpet(d)       (!!((d)->arch.emulation_flags & X86_EMU_HPET))
 #define has_vpm(d)         (!!((d)->arch.emulation_flags & X86_EMU_PM))
 #define has_vrtc(d)        (!!((d)->arch.emulation_flags & X86_EMU_RTC))
 #define has_vioapic(d)     (!!((d)->arch.emulation_flags & X86_EMU_IOAPIC))
 #define has_vpic(d)        (!!((d)->arch.emulation_flags & X86_EMU_PIC))
-#define has_vvga(d)        (!!((d)->arch.emulation_flags & X86_EMU_VGA))
+#define has_vvga(d)        (IS_ENABLED(CONFIG_X86_STDVGA) && \
+                            !!((d)->arch.emulation_flags & X86_EMU_VGA))
 #define has_viommu(d)      (!!((d)->arch.emulation_flags & X86_EMU_IOMMU))
 #define has_vpit(d)        (!!((d)->arch.emulation_flags & X86_EMU_PIT))
 #define has_pirq(d)        (!!((d)->arch.emulation_flags & X86_EMU_USE_PIRQ))
diff --git a/xen/arch/x86/include/asm/hvm/io.h 
b/xen/arch/x86/include/asm/hvm/io.h
index f2b8431facb0..32a2490fbcb2 100644
--- a/xen/arch/x86/include/asm/hvm/io.h
+++ b/xen/arch/x86/include/asm/hvm/io.h
@@ -108,7 +108,11 @@ struct vpci_arch_msix_entry {
     int pirq;
 };
 
+#ifdef CONFIG_X86_STDVGA
 void stdvga_init(struct domain *d);
+#else
+static inline void stdvga_init(struct domain *d) {}
+#endif
 
 extern void hvm_dpci_msi_eoi(struct domain *d, int vector);
 
-- 
2.34.1




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.