| From cb46b7f9ddb9da02630cfaebd4cc565de6fdf5ea Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 17 Oct 2018 23:39:41 +1100 |
| Subject: powerpc/time: Fix clockevent_decrementer initalisation for PR KVM |
| |
| From: Michael Ellerman <mpe@ellerman.id.au> |
| |
| [ Upstream commit b4d16ab58c41ff0125822464bdff074cebd0fe47 ] |
| |
| In the recent commit 8b78fdb045de ("powerpc/time: Use |
| clockevents_register_device(), fixing an issue with large |
| decrementer") we changed the way we initialise the decrementer |
| clockevent(s). |
| |
| We no longer initialise the mult & shift values of |
| decrementer_clockevent itself. |
| |
| This has the effect of breaking PR KVM, because it uses those values |
| in kvmppc_emulate_dec(). The symptom is guest kernels spin forever |
| mid-way through boot. |
| |
| For now fix it by assigning back to decrementer_clockevent the mult |
| and shift values. |
| |
| Fixes: 8b78fdb045de ("powerpc/time: Use clockevents_register_device(), fixing an issue with large decrementer") |
| Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| arch/powerpc/kernel/time.c | 4 ++++ |
| 1 file changed, 4 insertions(+) |
| |
| diff --git a/arch/powerpc/kernel/time.c b/arch/powerpc/kernel/time.c |
| index 870e75d304591..7c7c5a16284d2 100644 |
| --- a/arch/powerpc/kernel/time.c |
| +++ b/arch/powerpc/kernel/time.c |
| @@ -988,6 +988,10 @@ static void register_decrementer_clockevent(int cpu) |
| |
| printk_once(KERN_DEBUG "clockevent: %s mult[%x] shift[%d] cpu[%d]\n", |
| dec->name, dec->mult, dec->shift, cpu); |
| + |
| + /* Set values for KVM, see kvm_emulate_dec() */ |
| + decrementer_clockevent.mult = dec->mult; |
| + decrementer_clockevent.shift = dec->shift; |
| } |
| |
| static void enable_large_decrementer(void) |
| -- |
| 2.20.1 |
| |