* [PATCH v6][RESEND] x86/hyperv: Suspend/resume the hypercall page for hibernation
@ 2020-01-06 22:42 Dexuan Cui
2020-01-25 1:44 ` Dexuan Cui
0 siblings, 1 reply; 5+ messages in thread
From: Dexuan Cui @ 2020-01-06 22:42 UTC (permalink / raw)
To: arnd, bp, daniel.lezcano, haiyangz, hpa, kys, linux-hyperv,
linux-kernel, mingo, sashal, sthemmin, tglx, x86, mikelley,
Alexander.Levin, vkuznets
Cc: linux-arch, Dexuan Cui
This is needed for hibernation, e.g. when we resume the old kernel, we need
to disable the "current" kernel's hypercall page and then resume the old
kernel's.
Signed-off-by: Dexuan Cui <decui@microsoft.com>
Reviewed-by: Michael Kelley <mikelley@microsoft.com>
---
This is a RESEND of https://lkml.org/lkml/2019/11/20/68 .
Please review.
If it looks good, can you please pick it up through the tip.git tree?
arch/x86/hyperv/hv_init.c | 48 +++++++++++++++++++++++++++++++++++++++
1 file changed, 48 insertions(+)
diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c
index caaf4dce99bf..24a62d33067c 100644
--- a/arch/x86/hyperv/hv_init.c
+++ b/arch/x86/hyperv/hv_init.c
@@ -21,11 +21,15 @@
#include <linux/hyperv.h>
#include <linux/slab.h>
#include <linux/cpuhotplug.h>
+#include <linux/syscore_ops.h>
#include <clocksource/hyperv_timer.h>
void *hv_hypercall_pg;
EXPORT_SYMBOL_GPL(hv_hypercall_pg);
+/* Save the hypercall page temporarily for hibernation */
+static void *hv_hypercall_pg_saved;
+
u32 *hv_vp_index;
EXPORT_SYMBOL_GPL(hv_vp_index);
@@ -246,6 +250,46 @@ static int __init hv_pci_init(void)
return 1;
}
+static int hv_suspend(void)
+{
+ union hv_x64_msr_hypercall_contents hypercall_msr;
+
+ /*
+ * Reset hypercall page reference before reset the page,
+ * let hypercall operations fail safely rather than
+ * panic the kernel for using invalid hypercall page
+ */
+ hv_hypercall_pg_saved = hv_hypercall_pg;
+ hv_hypercall_pg = NULL;
+
+ /* Reset the hypercall page */
+ rdmsrl(HV_X64_MSR_HYPERCALL, hypercall_msr.as_uint64);
+ hypercall_msr.enable = 0;
+ wrmsrl(HV_X64_MSR_HYPERCALL, hypercall_msr.as_uint64);
+
+ return 0;
+}
+
+static void hv_resume(void)
+{
+ union hv_x64_msr_hypercall_contents hypercall_msr;
+
+ /* Re-enable the hypercall page */
+ rdmsrl(HV_X64_MSR_HYPERCALL, hypercall_msr.as_uint64);
+ hypercall_msr.enable = 1;
+ hypercall_msr.guest_physical_address =
+ vmalloc_to_pfn(hv_hypercall_pg_saved);
+ wrmsrl(HV_X64_MSR_HYPERCALL, hypercall_msr.as_uint64);
+
+ hv_hypercall_pg = hv_hypercall_pg_saved;
+ hv_hypercall_pg_saved = NULL;
+}
+
+static struct syscore_ops hv_syscore_ops = {
+ .suspend = hv_suspend,
+ .resume = hv_resume,
+};
+
/*
* This function is to be invoked early in the boot sequence after the
* hypervisor has been detected.
@@ -330,6 +374,8 @@ void __init hyperv_init(void)
x86_init.pci.arch_init = hv_pci_init;
+ register_syscore_ops(&hv_syscore_ops);
+
return;
remove_cpuhp_state:
@@ -349,6 +395,8 @@ void hyperv_cleanup(void)
{
union hv_x64_msr_hypercall_contents hypercall_msr;
+ unregister_syscore_ops(&hv_syscore_ops);
+
/* Reset our OS id */
wrmsrl(HV_X64_MSR_GUEST_OS_ID, 0);
--
2.19.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* RE: [PATCH v6][RESEND] x86/hyperv: Suspend/resume the hypercall page for hibernation
2020-01-06 22:42 [PATCH v6][RESEND] x86/hyperv: Suspend/resume the hypercall page for hibernation Dexuan Cui
@ 2020-01-25 1:44 ` Dexuan Cui
2020-01-30 0:05 ` Sasha Levin
0 siblings, 1 reply; 5+ messages in thread
From: Dexuan Cui @ 2020-01-25 1:44 UTC (permalink / raw)
To: arnd, bp, daniel.lezcano, Haiyang Zhang, hpa, KY Srinivasan,
linux-hyperv, linux-kernel, mingo, sashal, Stephen Hemminger,
tglx, x86, Michael Kelley, Sasha Levin, vkuznets
Cc: linux-arch
> From: Dexuan Cui <decui@microsoft.com>
> Sent: Monday, January 6, 2020 2:43 PM
>
> This is needed for hibernation, e.g. when we resume the old kernel, we need
> to disable the "current" kernel's hypercall page and then resume the old
> kernel's.
>
> Signed-off-by: Dexuan Cui <decui@microsoft.com>
> Reviewed-by: Michael Kelley <mikelley@microsoft.com>
> ---
>
> This is a RESEND of https://lkml.org/lkml/2019/11/20/68
>
> Please review.
>
> If it looks good, can you please pick it up through the tip.git tree?
>
> arch/x86/hyperv/hv_init.c | 48
> +++++++++++++++++++++++++++++++++++++++
> 1 file changed, 48 insertions(+)
Hi, Vitaly and x86 maintainers,
Can you please take a look at this patch?
Thanks,
-- Dexuan
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v6][RESEND] x86/hyperv: Suspend/resume the hypercall page for hibernation
2020-01-25 1:44 ` Dexuan Cui
@ 2020-01-30 0:05 ` Sasha Levin
2020-01-30 1:02 ` Dexuan Cui
2020-01-30 7:37 ` Thomas Gleixner
0 siblings, 2 replies; 5+ messages in thread
From: Sasha Levin @ 2020-01-30 0:05 UTC (permalink / raw)
To: Dexuan Cui
Cc: arnd, bp, daniel.lezcano, Haiyang Zhang, hpa, KY Srinivasan,
linux-hyperv, linux-kernel, mingo, Stephen Hemminger, tglx, x86,
Michael Kelley, Sasha Levin, vkuznets, linux-arch
On Sat, Jan 25, 2020 at 01:44:31AM +0000, Dexuan Cui wrote:
>> From: Dexuan Cui <decui@microsoft.com>
>> Sent: Monday, January 6, 2020 2:43 PM
>>
>> This is needed for hibernation, e.g. when we resume the old kernel, we need
>> to disable the "current" kernel's hypercall page and then resume the old
>> kernel's.
>>
>> Signed-off-by: Dexuan Cui <decui@microsoft.com>
>> Reviewed-by: Michael Kelley <mikelley@microsoft.com>
>> ---
>>
>> This is a RESEND of https://lkml.org/lkml/2019/11/20/68
>>
>> Please review.
>>
>> If it looks good, can you please pick it up through the tip.git tree?
>>
>> arch/x86/hyperv/hv_init.c | 48
>> +++++++++++++++++++++++++++++++++++++++
>> 1 file changed, 48 insertions(+)
>
>Hi, Vitaly and x86 maintainers,
>Can you please take a look at this patch?
Ping?
This patch has been floating around in it's current form for the past 2
months. I'll happily take Hyper-V patches under arch/x86/hyperv/ via the
Hyper-V tree rather than tip if the x86 folks don't want to deal with
them.
--
Thanks,
Sasha
^ permalink raw reply [flat|nested] 5+ messages in thread
* RE: [PATCH v6][RESEND] x86/hyperv: Suspend/resume the hypercall page for hibernation
2020-01-30 0:05 ` Sasha Levin
@ 2020-01-30 1:02 ` Dexuan Cui
2020-01-30 7:37 ` Thomas Gleixner
1 sibling, 0 replies; 5+ messages in thread
From: Dexuan Cui @ 2020-01-30 1:02 UTC (permalink / raw)
To: Sasha Levin, tglx
Cc: arnd, bp, daniel.lezcano, Haiyang Zhang, hpa, KY Srinivasan,
linux-hyperv, linux-kernel, mingo, Stephen Hemminger, x86,
Michael Kelley, Sasha Levin, vkuznets, linux-arch
> From: linux-hyperv-owner@vger.kernel.org
> <linux-hyperv-owner@vger.kernel.org> On Behalf Of Sasha Levin
> Sent: Wednesday, January 29, 2020 4:06 PM
> To: Dexuan Cui <decui@microsoft.com>
> Cc: arnd@arndb.de; bp@alien8.de; daniel.lezcano@linaro.org; Haiyang Zhang
> <haiyangz@microsoft.com>; hpa@zytor.com; KY Srinivasan
> <kys@microsoft.com>; linux-hyperv@vger.kernel.org;
> linux-kernel@vger.kernel.org; mingo@redhat.com; Stephen Hemminger
> <sthemmin@microsoft.com>; tglx@linutronix.de; x86@kernel.org; Michael
> Kelley <mikelley@microsoft.com>; Sasha Levin
> <Alexander.Levin@microsoft.com>; vkuznets <vkuznets@redhat.com>;
> linux-arch@vger.kernel.org
> Subject: Re: [PATCH v6][RESEND] x86/hyperv: Suspend/resume the hypercall
> page for hibernation
>
> On Sat, Jan 25, 2020 at 01:44:31AM +0000, Dexuan Cui wrote:
> >> From: Dexuan Cui <decui@microsoft.com>
> >> Sent: Monday, January 6, 2020 2:43 PM
> >>
> >> This is needed for hibernation, e.g. when we resume the old kernel, we
> need
> >> to disable the "current" kernel's hypercall page and then resume the old
> >> kernel's.
> >>
> >> Signed-off-by: Dexuan Cui <decui@microsoft.com>
> >> Reviewed-by: Michael Kelley <mikelley@microsoft.com>
> >> ---
> >>
> >> This is a RESEND of https://lkml.org/lkml/2019/11/20/68
> >>
> >> Please review.
> >>
> >> If it looks good, can you please pick it up through the tip.git tree?
> >>
> >> arch/x86/hyperv/hv_init.c | 48
> >> +++++++++++++++++++++++++++++++++++++++
> >> 1 file changed, 48 insertions(+)
> >
> >Hi, Vitaly and x86 maintainers,
> >Can you please take a look at this patch?
>
> Ping?
>
> This patch has been floating around in it's current form for the past 2
> months. I'll happily take Hyper-V patches under arch/x86/hyperv/ via the
> Hyper-V tree rather than tip if the x86 folks don't want to deal with
> them.
>
> --
> Thanks,
> Sasha
This straightforward patch is the only pending patch for v5.6 for the
hibernation functionality of Linux VM on Hyper-V. It would be really great
if we could merge it for v5.6-rc1. The patch is safe in that it only runs when
the VM hibernates, and the hibernation functionality of Linux VM on
Hyper-V never worked before. I'm pretty sure the patch can not cause any
merge conflict since nobody else tries to modify the file recently.
Thanks,
-- Dexuan
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v6][RESEND] x86/hyperv: Suspend/resume the hypercall page for hibernation
2020-01-30 0:05 ` Sasha Levin
2020-01-30 1:02 ` Dexuan Cui
@ 2020-01-30 7:37 ` Thomas Gleixner
1 sibling, 0 replies; 5+ messages in thread
From: Thomas Gleixner @ 2020-01-30 7:37 UTC (permalink / raw)
To: Sasha Levin, Dexuan Cui
Cc: arnd, bp, daniel.lezcano, Haiyang Zhang, hpa, KY Srinivasan,
linux-hyperv, linux-kernel, mingo, Stephen Hemminger, x86,
Michael Kelley, Sasha Levin, vkuznets, linux-arch
Sasha Levin <sashal@kernel.org> writes:
> On Sat, Jan 25, 2020 at 01:44:31AM +0000, Dexuan Cui wrote:
>>> This is a RESEND of https://lkml.org/lkml/2019/11/20/68
>>>
>>> Please review.
>>>
>>> If it looks good, can you please pick it up through the tip.git tree?
>>>
>>> arch/x86/hyperv/hv_init.c | 48
>>> +++++++++++++++++++++++++++++++++++++++
>>> 1 file changed, 48 insertions(+)
>>
>>Hi, Vitaly and x86 maintainers,
>>Can you please take a look at this patch?
>
> Ping?
>
> This patch has been floating around in it's current form for the past 2
> months. I'll happily take Hyper-V patches under arch/x86/hyperv/ via the
> Hyper-V tree rather than tip if the x86 folks don't want to deal with
> them.
sorry fell through the cracks. Will take care of it.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2020-01-30 7:37 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-01-06 22:42 [PATCH v6][RESEND] x86/hyperv: Suspend/resume the hypercall page for hibernation Dexuan Cui
2020-01-25 1:44 ` Dexuan Cui
2020-01-30 0:05 ` Sasha Levin
2020-01-30 1:02 ` Dexuan Cui
2020-01-30 7:37 ` Thomas Gleixner
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).