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

[PATCH v2 2/2] x86/hvm: make ACPI PM timer support optional


  • To: <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Jiqian Chen <Jiqian.Chen@xxxxxxx>
  • Date: Thu, 20 Feb 2025 17:53:49 +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=GcfuVCgNryrXIg+YCgKLUIVzNSvHkNXFUZoJ8wJkULI=; b=oaMvGAtltqLF9iRYOg3T+CdINz7O2afCZKAH/5nJ/wZSEHRi2NG9/YpxG6XwkEKGvCqX3C3xV375oHJqYVvzMpKXNpXcK1+iQoMiWK+favFjc5D7YUe+4hsRWENSDMXb07tZUMzYlaKsSkCLcNP/35cIOPAmUYn3WrEWrNPNEFCXaZ8z/1KEEq833Ya4HZ4X3mb0rQhVYHevnHMeOMpPxp2Lx9UnNrdWcsnYwZZlhKgEtWAIVTtXBoABTF45ULLmfjyeDtUf2v2G+qtrCJ+lo/yV6q56+pioRcGRGthS96qzwLkVXUqew8yB7hZAHEedk+5WPBv5wO81CyetUn6RWw==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=DLMGubdQd2fVc5cxjzCqQLzNZOsTJVBXJV4Xuz/YpSsfTaUGnOIOWCLWFy4Kf6WZQn3hlQcMOMpQgWyklJr3ihvkDx+y9ANuXpUU598hHdpZVVV+AOpn/5Mb9DnzF6/RVR755L7ZK0nQPg+z5L5Vec8NH/eoVwbCmpSfUKkJRiMa3qDVo0FLn9LlQHeIJZvNi+XP5WQVtOZh+Vy8vKuzkWikgdUB2ooYujvzX/fE0CaZRl0yBxpY/Khs+bKlTa/jE9DkWrmvYK2nbonBk5szrEBl2o3L0v/b1GYBg9K1XHXj1ZLsJ1P7S7YZozjS73wSp/TwrEcJKvbPHztAqSM3Mw==
  • 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_PMTIMER so that pmtimer driver can be
disabled on systems that don't need it.

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/20240916063757.990070-1-Sergiy_Kibrik@xxxxxxxx/T/#u.

v1->v2 changes:
* Moved definition of "config X86_PMTIMER" into Kconfig.emu.
* Adjusted macro "has_vpm".

Best regards,
Jiqian Chen.
---
 xen/arch/x86/hvm/Kconfig.emu       |  9 +++++++++
 xen/arch/x86/hvm/Makefile          |  2 +-
 xen/arch/x86/include/asm/acpi.h    |  5 +++++
 xen/arch/x86/include/asm/domain.h  |  6 ++++--
 xen/arch/x86/include/asm/hvm/vpt.h | 10 ++++++++++
 5 files changed, 29 insertions(+), 3 deletions(-)

diff --git a/xen/arch/x86/hvm/Kconfig.emu b/xen/arch/x86/hvm/Kconfig.emu
index aa60b6227036..e2d0f5db1d15 100644
--- a/xen/arch/x86/hvm/Kconfig.emu
+++ b/xen/arch/x86/hvm/Kconfig.emu
@@ -11,4 +11,13 @@ config X86_STDVGA
 
          If unsure, say Y.
 
+config X86_PMTIMER
+       bool "ACPI PM timer emulation support" if EXPERT
+       default y
+       depends on HVM
+       help
+         Build pmtimer driver that emulates ACPI PM timer for HVM guests.
+
+         If unsure, say Y.
+
 endmenu
diff --git a/xen/arch/x86/hvm/Makefile b/xen/arch/x86/hvm/Makefile
index 4d1f8e00eb68..b7741b0f607e 100644
--- a/xen/arch/x86/hvm/Makefile
+++ b/xen/arch/x86/hvm/Makefile
@@ -18,7 +18,7 @@ obj-y += irq.o
 obj-y += monitor.o
 obj-y += mtrr.o
 obj-y += nestedhvm.o
-obj-y += pmtimer.o
+obj-$(CONFIG_X86_PMTIMER) += pmtimer.o
 obj-y += quirks.o
 obj-y += rtc.o
 obj-y += save.o
diff --git a/xen/arch/x86/include/asm/acpi.h b/xen/arch/x86/include/asm/acpi.h
index 217819dd619c..8d92014ae93a 100644
--- a/xen/arch/x86/include/asm/acpi.h
+++ b/xen/arch/x86/include/asm/acpi.h
@@ -150,8 +150,13 @@ void acpi_mmcfg_init(void);
 /* Incremented whenever we transition through S3. Value is 1 during boot. */
 extern uint32_t system_reset_counter;
 
+#ifdef CONFIG_X86_PMTIMER
 void hvm_acpi_power_button(struct domain *d);
 void hvm_acpi_sleep_button(struct domain *d);
+#else
+static inline void hvm_acpi_power_button(struct domain *d) {}
+static inline void hvm_acpi_sleep_button(struct domain *d) {}
+#endif
 
 /* suspend/resume */
 void save_rest_processor_state(void);
diff --git a/xen/arch/x86/include/asm/domain.h 
b/xen/arch/x86/include/asm/domain.h
index 68be23bf3bf4..1f3c02e3088f 100644
--- a/xen/arch/x86/include/asm/domain.h
+++ b/xen/arch/x86/include/asm/domain.h
@@ -495,11 +495,13 @@ struct arch_domain
                                  X86_EMU_VPCI)
 
 #define DISABLED_EMU_MASK \
-    (!IS_ENABLED(CONFIG_X86_STDVGA) ? X86_EMU_VGA : 0)
+    ((!IS_ENABLED(CONFIG_X86_STDVGA) ? X86_EMU_VGA : 0) | \
+     (!IS_ENABLED(CONFIG_X86_PMTIMER) ? X86_EMU_PM : 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_vpm(d)         (IS_ENABLED(CONFIG_X86_PMTIMER) && \
+                            !!((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))
diff --git a/xen/arch/x86/include/asm/hvm/vpt.h 
b/xen/arch/x86/include/asm/hvm/vpt.h
index 0b92b286252d..333b346068de 100644
--- a/xen/arch/x86/include/asm/hvm/vpt.h
+++ b/xen/arch/x86/include/asm/hvm/vpt.h
@@ -187,10 +187,20 @@ void rtc_deinit(struct domain *d);
 void rtc_reset(struct domain *d);
 void rtc_update_clock(struct domain *d);
 
+#ifdef CONFIG_X86_PMTIMER
 void pmtimer_init(struct vcpu *v);
 void pmtimer_deinit(struct domain *d);
 void pmtimer_reset(struct domain *d);
 int pmtimer_change_ioport(struct domain *d, uint64_t version);
+#else
+static inline void pmtimer_init(struct vcpu *v) {}
+static inline void pmtimer_deinit(struct domain *d) {}
+static inline void pmtimer_reset(struct domain *d) {}
+static inline int pmtimer_change_ioport(struct domain *d, uint64_t version)
+{
+    return -ENODEV;
+}
+#endif
 
 void hpet_init(struct domain *d);
 void hpet_deinit(struct domain *d);
-- 
2.34.1




 


Rackspace

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