kvm_get_vcpu(vcpu->kvm, src_id) == NULL)
                return -EINVAL;
  
 -      if (sclp_has_sigpif())
 +      if (sclp.has_sigpif)
                return __inject_extcall_sigpif(vcpu, src_id);
  
-       if (!test_and_set_bit(IRQ_PEND_EXT_EXTERNAL, &li->pending_irqs))
+       if (test_and_set_bit(IRQ_PEND_EXT_EXTERNAL, &li->pending_irqs))
                return -EBUSY;
        *extcall = irq->u.extcall;
        atomic_set_mask(CPUSTAT_EXT_INT, li->cpuflags);
 
  #include <linux/module.h>
  #include <linux/vmalloc.h>
  #include <linux/uaccess.h>
 -#include <asm/i387.h> /* For use_eager_fpu.  Ugh! */
 -#include <asm/fpu-internal.h> /* For use_eager_fpu.  Ugh! */
++#include <asm/fpu/internal.h> /* For use_eager_fpu.  Ugh! */
  #include <asm/user.h>
 -#include <asm/xsave.h>
 +#include <asm/fpu/xstate.h>
  #include "cpuid.h"
  #include "lapic.h"
  #include "mmu.h"
 
  
        for (i = 0; i < APIC_LVT_NUM; i++)
                apic_set_reg(apic, APIC_LVTT + 0x10 * i, APIC_LVT_MASKED);
 -      apic->lapic_timer.timer_mode = 0;
 +      apic_update_lvtt(apic);
-       apic_set_reg(apic, APIC_LVT0,
-                    SET_APIC_DELIVERY_MODE(0, APIC_MODE_EXTINT));
+       if (!(vcpu->kvm->arch.disabled_quirks & KVM_QUIRK_LINT0_REENABLED))
+               apic_set_reg(apic, APIC_LVT0,
+                            SET_APIC_DELIVERY_MODE(0, APIC_MODE_EXTINT));
  
        apic_set_reg(apic, APIC_DFR, 0xffffffffU);
        apic_set_spiv(apic, 0xff);
 
  #include <asm/debugreg.h>
  #include <asm/msr.h>
  #include <asm/desc.h>
- #include <asm/mtrr.h>
  #include <asm/mce.h>
 -#include <asm/i387.h>
 -#include <asm/fpu-internal.h> /* Ugh! */
 -#include <asm/xcr.h>
 +#include <linux/kernel_stat.h>
 +#include <asm/fpu/internal.h> /* Ugh! */
  #include <asm/pvclock.h>
  #include <asm/div64.h>
  
  {
        kvm_put_guest_xcr0(vcpu);
  
-       if (!vcpu->guest_fpu_loaded)
+       if (!vcpu->guest_fpu_loaded) {
+               vcpu->fpu_counter = 0;
                return;
+       }
  
        vcpu->guest_fpu_loaded = 0;
 -      fpu_save_init(&vcpu->arch.guest_fpu);
 +      copy_fpregs_to_fpstate(&vcpu->arch.guest_fpu);
        __kernel_fpu_end();
        ++vcpu->stat.fpu_reload;
-       if (!vcpu->arch.eager_fpu)
-               kvm_make_request(KVM_REQ_DEACTIVATE_FPU, vcpu);
- 
+       /*
+        * If using eager FPU mode, or if the guest is a frequent user
+        * of the FPU, just leave the FPU active for next time.
+        * Every 255 times fpu_counter rolls over to 0; a guest that uses
+        * the FPU in bursts will revert to loading it on demand.
+        */
+       if (!vcpu->arch.eager_fpu) {
+               if (++vcpu->fpu_counter < 5)
+                       kvm_make_request(KVM_REQ_DEACTIVATE_FPU, vcpu);
+       }
        trace_kvm_fpu(0);
  }