On 31.03.2011, at 11:02, Alexander Graf wrote: > > On 31.03.2011, at 11:01, Liu Yu-B13201 wrote: > >> >> >>> -----Original Message----- >>> From: Alexander Graf [mailto:ag...@suse.de] >>> Sent: Thursday, March 31, 2011 4:43 PM >>> To: Liu Yu-B13201 >>> Cc: Wood Scott-B07421; kvm-ppc@vger.kernel.org >>> Subject: Re: [PATCH v5 4/4] KVM: PPC: e500: Save/restore SPE state >>> >>> >>> On 31.03.2011, at 10:40, Liu Yu-B13201 wrote: >>> >>>> >>>> >>>>> -----Original Message----- >>>>> From: Alexander Graf [mailto:ag...@suse.de] >>>>> Sent: Thursday, March 31, 2011 4:15 PM >>>>> To: Liu Yu-B13201 >>>>> Cc: Wood Scott-B07421; kvm-ppc@vger.kernel.org >>>>> Subject: Re: [PATCH v5 4/4] KVM: PPC: e500: Save/restore SPE state >>>>> >>>>> >>>>> On 31.03.2011, at 10:06, Liu Yu-B13201 wrote: >>>>> >>>>>> >>>>>> >>>>>>> -----Original Message----- >>>>>>> From: kvm-ppc-ow...@vger.kernel.org >>>>>>> [mailto:kvm-ppc-ow...@vger.kernel.org] On Behalf Of >>> Alexander Graf >>>>>>> Sent: Thursday, March 31, 2011 3:51 PM >>>>>>> To: Liu Yu-B13201 >>>>>>> Cc: Wood Scott-B07421; kvm-ppc@vger.kernel.org >>>>>>> Subject: Re: [PATCH v5 4/4] KVM: PPC: e500: Save/restore >>> SPE state >>>>>>> >>>>>>> >>>>>>> On 31.03.2011, at 05:21, Liu Yu-B13201 wrote: >>>>>>> >>>>>>>> >>>>>>>> >>>>>>>>> -----Original Message----- >>>>>>>>> From: kvm-ppc-ow...@vger.kernel.org >>>>>>>>> [mailto:kvm-ppc-ow...@vger.kernel.org] On Behalf Of Scott Wood >>>>>>>>> Sent: Thursday, March 31, 2011 7:35 AM >>>>>>>>> To: ag...@suse.de >>>>>>>>> Cc: kvm-ppc@vger.kernel.org >>>>>>>>> Subject: [PATCH v5 4/4] KVM: PPC: e500: Save/restore SPE state >>>>>>>>> >>>>>>>>> This is done lazily. The SPE save will be done only if >>>>>>> the guest has >>>>>>>>> used SPE since the last preemption or heavyweight exit. >>>>>>>>> Restore will be >>>>>>>>> done only on demand, when enabling MSR_SPE in the shadow MSR, >>>>>>>>> in response >>>>>>>>> to an SPE fault or mtmsr emulation. >>>>>>>>> >>>>>>>>> For SPEFSCR, Linux already switches it on context switch >>>>>>>>> (non-lazily), so >>>>>>>>> the only remaining bit is to save it between qemu and >>> the guest. >>>>>>>>> >>>>>>>>> Signed-off-by: Liu Yu <yu....@freescale.com> >>>>>>>>> Signed-off-by: Scott Wood <scottw...@freescale.com> >>>>>>>>> --- >>>>>>>>> v5: disable preemption when restoring SPE state >>>>>>>>> >>>>>>>>> Saving SPE state is only done from a preempt notifier or >>>>>>> vcpu_put(), >>>>>>>>> where preemption is already disabled. >>>>>>>>> >>>>>>>>> The other patches in this series are the same as v4. >>>>>>>>> >>>>>>>>> arch/powerpc/include/asm/kvm_host.h | 6 +++ >>>>>>>>> arch/powerpc/include/asm/reg_booke.h | 1 + >>>>>>>>> arch/powerpc/kernel/asm-offsets.c | 6 +++ >>>>>>>>> arch/powerpc/kvm/booke.c | 72 >>>>>>>>> +++++++++++++++++++++++++++++++++- >>>>>>>>> arch/powerpc/kvm/booke.h | 18 ++------- >>>>>>>>> arch/powerpc/kvm/booke_interrupts.S | 40 +++++++++++++++++++ >>>>>>>>> arch/powerpc/kvm/e500.c | 19 ++++++++- >>>>>>>>> 7 files changed, 145 insertions(+), 17 deletions(-) >>>>>>>>> >>>>>>>> >>>>>>>> I think the patch miss the bit to handle the case that >>>>>>>> if guest clear the MSR_SPE. >>>>>>> >>>>>>> Right. On set_msr the shadow_msr should get MSR_SPE removed. >>>>>>> Thanks for the catch! >>>>>>> >>>>>> >>>>>> BTW, >>>>>> looks like guest trap on MSR[SPE] in para virt mode for >>> now, is it? >>>>>> If we don't want to trap on that, then shadow_msr doesn't >>> work here. >>>>>> That's the intend to use msr_block.. >>>>> >>>>> I see. I still like it better when we explicitly set the MSR >>>>> value that's used while running the guest. Makes it harder >>>>> for things to slip through. Also, so far paravirt is disabled >>>>> for BookE. >>>> >>>> We already use paravirt in internal tree. >>>> >>>>> >>>>> So what happens is that since MSR_SPE is disabled, we get a >>>>> BOOKE_INTERRUPT_SPE_UNAVAIL. At that point, we need to check >>>>> if it's enabled inside the guest already or if we merely need >>>>> to activate the flag. That's what the patch does. We'd have >>>>> to do the exact same when using msr_block, no? The only >>>>> difference is that we'd set msr_block instead of shadow_msr >>>>> when we are actually able to use the SPE inside the guest. >>>>> >>>> >>>> Hmm. I think you're right. >>>> I thought that in paravirt mode, if we don't trap on MSR[SPE], >>>> the shadow_msr cannot get notified timely (we don't have >>> chance to call kvmppc_set_msr()). >>>> But looks like msr_block has the same issue. >>>> So that MSR[SPE] should always be traped. >>> >>> It doesn't have to be trapped - we can enable it lazily on >>> SPE_UNAVAIL :). Of course we should also explicitly enable it >>> on set_msr. >>> >> >> It works on set MSR[SPE], but doesn't work on clear MSR[SPE]. >> Guest may also do lazy SPE, if guest clear MSR[SPE], >> but kvm don't know and still keep it. >> Then guest app may get SPE state clobbered. > > Ah, yes. On SPE clear we definitely have to trap :).
Scott, to verify that I don't completely screw up the lazy FPU work back when I did it, I wrote some small test program that would just initialize an fpu register with a value and then constantly loop to verify if it's still the same. I ran that program with different values on the host and guest sides. That exposed quite a lot of glitches. It would be nice if you could provide something similar for the SPE patches, so we have some more faith in it :). Alex -- To unsubscribe from this list: send the line "unsubscribe kvm-ppc" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html