lkml.org 
[lkml]   [2019]   [Aug]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 02/12] x86/hyper-v: Implement hv_is_hibernation_supported()
    Date
    When a Linux VM runs on Hyper-V and hibernates, it must disable the
    memory hot-add/remove and balloon up/down capabilities in the hv_balloon
    driver.

    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.

    The new API will be used by hv_balloon.

    Signed-off-by: Dexuan Cui <decui@microsoft.com>
    ---
    arch/x86/hyperv/hv_init.c | 7 +++++++
    include/asm-generic/mshyperv.h | 2 ++
    2 files changed, 9 insertions(+)

    diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c
    index 78e53d9..6735e45 100644
    --- a/arch/x86/hyperv/hv_init.c
    +++ b/arch/x86/hyperv/hv_init.c
    @@ -7,6 +7,7 @@
    * Author : K. Y. Srinivasan <kys@microsoft.com>
    */

    +#include <linux/acpi.h>
    #include <linux/efi.h>
    #include <linux/types.h>
    #include <asm/apic.h>
    @@ -453,3 +454,9 @@ bool hv_is_hyperv_initialized(void)
    return hypercall_msr.enable;
    }
    EXPORT_SYMBOL_GPL(hv_is_hyperv_initialized);
    +
    +bool hv_is_hibernation_supported(void)
    +{
    + return acpi_sleep_state_supported(ACPI_STATE_S4);
    +}
    +EXPORT_SYMBOL_GPL(hv_is_hibernation_supported);
    diff --git a/include/asm-generic/mshyperv.h b/include/asm-generic/mshyperv.h
    index 0becb7d..1cb4001 100644
    --- a/include/asm-generic/mshyperv.h
    +++ b/include/asm-generic/mshyperv.h
    @@ -166,9 +166,11 @@ static inline int cpumask_to_vpset(struct hv_vpset *vpset,
    void hyperv_report_panic(struct pt_regs *regs, long err);
    void hyperv_report_panic_msg(phys_addr_t pa, size_t size);
    bool hv_is_hyperv_initialized(void);
    +bool hv_is_hibernation_supported(void);
    void hyperv_cleanup(void);
    #else /* CONFIG_HYPERV */
    static inline bool hv_is_hyperv_initialized(void) { return false; }
    +static inline bool hv_is_hibernation_supported(void) { return false; }
    static inline void hyperv_cleanup(void) {}
    #endif /* CONFIG_HYPERV */

    --
    1.8.3.1
    \
     
     \ /
      Last update: 2019-08-20 03:53    [W:4.027 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site