ACPI: PM: Make acpi_sleep_state_supported() non-static
authorDexuan Cui <decui@microsoft.com>
Thu, 4 Jul 2019 02:43:32 +0000 (02:43 +0000)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Sat, 6 Jul 2019 07:49:22 +0000 (09:49 +0200)
With some upcoming patches to save/restore the Hyper-V drivers related
states, a Linux VM running on Hyper-V will be able to hibernate. When
a Linux VM hibernates, unluckily we must disable the memory hot-add/remove
and balloon up/down capabilities in the hv_balloon driver
(drivers/hv/hv_balloon.c), because these can not really work according to
the design of the related back-end driver on the host.

By default, Hyper-V does not enable the virtual ACPI S4 state for a VM;
on recent Hyper-V hosts, the administrator is able to enable the virtual
ACPI S4 state for a VM, so we hope to use the presence of the virtual ACPI
S4 state as a hint for hv_balloon to disable the aforementioned
capabilities. In this way, hibernation will work more reliably, from the
user's perspective.

By marking acpi_sleep_state_supported() non-static, we'll be able to
implement a hv_is_hibernation_supported() API in the always-built-in
module arch/x86/hyperv/hv_init.c, and the API will be called by hv_balloon.

Signed-off-by: Dexuan Cui <decui@microsoft.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/acpi/sleep.c
include/acpi/acpi_bus.h

index e21a0f5fdadd96b8444b44fab9578cf455a9d5a4..a64b81719611581b8ced5d21206b7e4aa476e5ea 100644 (file)
@@ -79,7 +79,7 @@ static int acpi_sleep_prepare(u32 acpi_state)
        return 0;
 }
 
-static bool acpi_sleep_state_supported(u8 sleep_state)
+bool acpi_sleep_state_supported(u8 sleep_state)
 {
        acpi_status status;
        u8 type_a, type_b;
index 52d4375bde9d3e49c91e0659bdc64613b1e7f656..37c0bac4ad6aaa795e2fe182524f3d2ea0b54a79 100644 (file)
@@ -664,6 +664,12 @@ static inline int acpi_pm_set_bridge_wakeup(struct device *dev, bool enable)
 }
 #endif
 
+#ifdef CONFIG_ACPI_SYSTEM_POWER_STATES_SUPPORT
+bool acpi_sleep_state_supported(u8 sleep_state);
+#else
+static inline bool acpi_sleep_state_supported(u8 sleep_state) { return false; }
+#endif
+
 #ifdef CONFIG_ACPI_SLEEP
 u32 acpi_target_system_state(void);
 #else