Am 11.01.2011 11:29, Avi Kivity wrote: > Please try out the attached patch. > > From f3a6041b5bb3bf7c88f9694a66d7f34be2f78845 Mon Sep 17 00:00:00 2001 > From: Avi Kivity <avi@xxxxxxxxxx> > Date: Tue, 11 Jan 2011 12:15:54 +0200 > Subject: [PATCH] KVM: Initialize fpu state in preemptible context > > init_fpu() (which is indirectly called by the fpu switching code) assumes > it is in process context. Rather than makeing init_fpu() use an atomic > allocation, which can cause a task to be killed, make sure the fpu is > already initialized when we enter the run loop. > > Signed-off-by: Avi Kivity <avi@xxxxxxxxxx> > --- > arch/x86/kernel/i387.c | 1 + > arch/x86/kvm/x86.c | 3 +++ > 2 files changed, 4 insertions(+), 0 deletions(-) > > diff --git a/arch/x86/kernel/i387.c b/arch/x86/kernel/i387.c > index 58bb239..e60c38c 100644 > --- a/arch/x86/kernel/i387.c > +++ b/arch/x86/kernel/i387.c > @@ -169,6 +169,7 @@ int init_fpu(struct task_struct *tsk) > set_stopped_child_used_math(tsk); > return 0; > } > +EXPORT_SYMBOL_GPL(init_fpu); > > /* > * The xstateregs_active() routine is the same as the fpregs_active() routine, > diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c > index 8652643..fd93cda 100644 > --- a/arch/x86/kvm/x86.c > +++ b/arch/x86/kvm/x86.c > @@ -5351,6 +5351,9 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run) > int r; > sigset_t sigsaved; > > + if (!tsk_used_math(current) && init_fpu(current)) > + return -ENOMEM; > + Could become a rainy day for the kvm-kmod maintainer: For compat support on kernels without init_fpu exported yet, can I trigger the same result by simply issuing an FPU instruction here so that do_device_not_available will perform the allocation? Not really nice, but it doesn't appear to me like there is any code path that would complain about in-kernel FPU usage (provided we don't need math emulation - which is quite likely). Jan -- Siemens AG, Corporate Technology, CT T DE IT 1 Corporate Competence Center Embedded Linux -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html