Message ID | 20181019042319.9457-1-mpe@ellerman.id.au |
---|---|
State | Not Applicable |
Headers | show |
Series | powerpc/time: Fix clockevent_decrementer initalisation for PR KVM | expand |
On Fri, 19 Oct 2018 15:23:19 +1100 Michael Ellerman <mpe@ellerman.id.au> wrote: > 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. Thanks Michael, I missed that completely. Acked-by: Anton Blanchard <anton@samba.org> Anton > > Fixes: 8b78fdb045de ("powerpc/time: Use > clockevents_register_device(), fixing an issue with large > decrementer") Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> --- > 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 40868f3ee113..68e8f963d108 100644 > --- a/arch/powerpc/kernel/time.c > +++ b/arch/powerpc/kernel/time.c > @@ -989,6 +989,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)
On Fri, 2018-10-19 at 04:23:19 UTC, Michael Ellerman wrote: > 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> > Acked-by: Anton Blanchard <anton@samba.org> Applied to powerpc next. https://git.kernel.org/powerpc/c/b4d16ab58c41ff0125822464bdff07 cheers
diff --git a/arch/powerpc/kernel/time.c b/arch/powerpc/kernel/time.c index 40868f3ee113..68e8f963d108 100644 --- a/arch/powerpc/kernel/time.c +++ b/arch/powerpc/kernel/time.c @@ -989,6 +989,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)
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> --- arch/powerpc/kernel/time.c | 4 ++++ 1 file changed, 4 insertions(+)