On Sun, Sep 09, 2012 at 12:09:00PM +0900, 李 ヨンジュン wrote: > Hello, I am trying to inject interrupt, in final phase of Live migration. > > I use vmcs_write32 function to inject interrupt. This function is called > by qemu, with ioctl. > > This is Code. > > (KVM) > > void vmcs_write32_provider(unsigned long field, u32 value) > { > vmcs_write32(field, value); > } > > > long kvm_arch_vcpu_ioctl(struct file *filp, > unsigned int ioctl, unsigned long arg) > { > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~// > case KVM_TEST_IOCTL: { > r=0; > //printk("Test IOCTL!!!\n"); > int type = 0; > int trap=58; > u32 intr_fields= (0x80000000 | (type<<8) | trap); > vmcs_write32_provider(0x00004016,intr_fields); > printk("vmcs_write Success!!!\n"); > > goto out; > } This is not how you inject interrupts in KVM. You are calling kvm_set_irq() instead.
> > > This code works perfectly when called by hypercall.(When call this > function in kvm_emulate_hypercall function by guest VM.) > You mean this code sometimes accidentally has desirable effect. > But, when I trying to call this function by qemu(ioctl), This error > message is occurred. > > http://pds23.egloos.com/pds/201209/09/86/f0062286_504c07a4bc3c7.png > You are trying to inject interrupt when interrupts are disabled. -- Gleb.