* [PATCH] KVM: arm/arm64: Handle CPU_PM_ENTER_FAILED
@ 2018-01-22 18:19 James Morse
2018-01-23 14:55 ` Christoffer Dall
0 siblings, 1 reply; 2+ messages in thread
From: James Morse @ 2018-01-22 18:19 UTC (permalink / raw)
To: kvmarm; +Cc: Marc Zyngier, Lorenzo Pieralisi
cpu_pm_enter() calls the pm notifier chain with CPU_PM_ENTER, then if
there is a failure: CPU_PM_ENTER_FAILED.
When KVM receives CPU_PM_ENTER it calls cpu_hyp_reset() which will
return us to the hyp-stub. If we subsequently get a CPU_PM_ENTER_FAILED,
KVM does nothing, leaving the CPU running with the hyp-stub, at odds
with kvm_arm_hardware_enabled.
Add CPU_PM_ENTER_FAILED as a fallthrough for CPU_PM_EXIT, this reloads
KVM based on kvm_arm_hardware_enabled. This is safe even if CPU_PM_ENTER
never gets as far as KVM, as cpu_hyp_reinit() calls cpu_hyp_reset()
to make sure the hyp-stub is loaded before reloading KVM.
CC: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Signed-off-by: James Morse <james.morse@arm.com>
---
Prior to 67f691976662 ("arm64: kvm: allows kvm cpu hotplug") KVM only
called cpu_hpy_reinit() when it got CPU_PM_EXIT, so KVM would stay
loaded in the above scenario. But, this patch doesn't apply that far
back as KVM moved from arch/arm to virt/kvm/arm.
Fixes: 67f691976662 ("arm64: kvm: allows kvm cpu hotplug")
virt/kvm/arm/arm.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/virt/kvm/arm/arm.c b/virt/kvm/arm/arm.c
index 15bf026eb182..0a1025f87909 100644
--- a/virt/kvm/arm/arm.c
+++ b/virt/kvm/arm/arm.c
@@ -1246,6 +1246,7 @@ static int hyp_init_cpu_pm_notifier(struct notifier_block *self,
cpu_hyp_reset();
return NOTIFY_OK;
+ case CPU_PM_ENTER_FAILED:
case CPU_PM_EXIT:
if (__this_cpu_read(kvm_arm_hardware_enabled))
/* The hardware was enabled before suspend. */
--
2.15.1
^ permalink raw reply related [flat|nested] 2+ messages in thread* Re: [PATCH] KVM: arm/arm64: Handle CPU_PM_ENTER_FAILED
2018-01-22 18:19 [PATCH] KVM: arm/arm64: Handle CPU_PM_ENTER_FAILED James Morse
@ 2018-01-23 14:55 ` Christoffer Dall
0 siblings, 0 replies; 2+ messages in thread
From: Christoffer Dall @ 2018-01-23 14:55 UTC (permalink / raw)
To: James Morse; +Cc: Marc Zyngier, Lorenzo Pieralisi, kvmarm
On Mon, Jan 22, 2018 at 06:19:06PM +0000, James Morse wrote:
> cpu_pm_enter() calls the pm notifier chain with CPU_PM_ENTER, then if
> there is a failure: CPU_PM_ENTER_FAILED.
>
> When KVM receives CPU_PM_ENTER it calls cpu_hyp_reset() which will
> return us to the hyp-stub. If we subsequently get a CPU_PM_ENTER_FAILED,
> KVM does nothing, leaving the CPU running with the hyp-stub, at odds
> with kvm_arm_hardware_enabled.
>
> Add CPU_PM_ENTER_FAILED as a fallthrough for CPU_PM_EXIT, this reloads
> KVM based on kvm_arm_hardware_enabled. This is safe even if CPU_PM_ENTER
> never gets as far as KVM, as cpu_hyp_reinit() calls cpu_hyp_reset()
> to make sure the hyp-stub is loaded before reloading KVM.
>
> CC: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
> Signed-off-by: James Morse <james.morse@arm.com>
> ---
> Prior to 67f691976662 ("arm64: kvm: allows kvm cpu hotplug") KVM only
> called cpu_hpy_reinit() when it got CPU_PM_EXIT, so KVM would stay
> loaded in the above scenario. But, this patch doesn't apply that far
> back as KVM moved from arch/arm to virt/kvm/arm.
Ok, but this should still be cc'ed stable with #v4.7+ then and then we'd
simply have to provide a backport for the versions where it doesn't
apply, or am I missing something?
>
> Fixes: 67f691976662 ("arm64: kvm: allows kvm cpu hotplug")
And I think this belongs in the main commit message, but I can fix that.
Speaking of which, it's probably too late to try and get this in for
v4.15, so unless there are objections, I'll just queue this for v4.16
and cc stable.
>
> virt/kvm/arm/arm.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/virt/kvm/arm/arm.c b/virt/kvm/arm/arm.c
> index 15bf026eb182..0a1025f87909 100644
> --- a/virt/kvm/arm/arm.c
> +++ b/virt/kvm/arm/arm.c
> @@ -1246,6 +1246,7 @@ static int hyp_init_cpu_pm_notifier(struct notifier_block *self,
> cpu_hyp_reset();
>
> return NOTIFY_OK;
> + case CPU_PM_ENTER_FAILED:
> case CPU_PM_EXIT:
> if (__this_cpu_read(kvm_arm_hardware_enabled))
> /* The hardware was enabled before suspend. */
> --
> 2.15.1
>
Reviewed-by: Christoffer Dall <christoffer.dall@linaro.org>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2018-01-23 14:49 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-01-22 18:19 [PATCH] KVM: arm/arm64: Handle CPU_PM_ENTER_FAILED James Morse
2018-01-23 14:55 ` Christoffer Dall
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox