On 03.07.2013, at 19:17, Scott Wood wrote: > On 07/03/2013 11:59:45 AM, Alexander Graf wrote: >> On 03.07.2013, at 17:41, Caraman Mihai Claudiu-B02008 wrote: >> >>>>> Increase FPU laziness by calling kvmppc_load_guest_fp() just before >> >>>>> returning to guest instead of each sched in. Without this improvement >> >>>>> an interrupt may also claim floting point corrupting guest state. >> >>>> >> >>>> Not sure I follow. Could you please describe exactly what's happening? >> >>> >> >>> This was already discussed on the list, I will forward you the thread. >> >> >> >> The only thing I've seen in that thread was some pathetic theoretical >> >> case where an interrupt handler would enable fp and clobber state >> >> carelessly. That's not something I'm worried about. >> > >> > Neither me though I don't find it pathetic. Please refer it to Scott. >> If from Linux's point of view we look like a user space program with active >> floating point registers, we don't have to worry about this case. Kernel >> code that would clobber that fp state would clobber random user space's fp >> state too. > > This patch makes it closer to how it works with a user space program. Or > rather, it reduces the time window when we don't (and can't) act like a > normal userspace program -- and ensures that we have interrupts disabled > during that window. An interrupt can't randomly clobber FP state; it has to > call enable_kernel_fp() just like KVM does. enable_kernel_fp() clears the > userspace MSR_FP to ensure that the state it saves gets restored before > userspace uses it again, but that won't have any effect on guest execution > (especially in HV-mode). Thus kvmppc_load_guest_fp() needs to be atomic with > guest entry. Conceptually it's like taking an automatic FP unavailable trap > when we enter the guest, since we can't be lazy in HV-mode.
Yep. Once I understood that point things became clear to me :). > >> >> I really don't see where this patch improves anything tbh. It certainly >> >> makes the code flow more awkward. >> > >> > I was pointing you to this: The idea of FPU/AltiVec laziness that the >> > kernel >> > is struggling to achieve is to reduce the number of store/restore >> > operations. >> > Without this improvement we restore the unit each time we are sched it. If >> > an >> > other process take the ownership of the unit (on SMP it's even worse but >> > don't >> > bother with this) the kernel store the unit state to qemu task. This can >> > happen >> > multiple times during handle_exit(). >> > >> > Do you see it now? >> Yup. Looks good. The code flow is very hard to follow though - there are a >> lot of implicit assumptions that don't get documented anywhere. For example >> the fact that we rely on giveup_fpu() to remove MSR_FP from our thread. > > That's not new to this patch... Would be nice to fix nevertheless. I'm probably not going to be the last person forgetting how this works. 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