On 10/17/2011 11:17 AM, Lai Jiangshan wrote: > On 10/16/2011 05:39 PM, Avi Kivity wrote: > > On 10/14/2011 11:03 AM, Lai Jiangshan wrote: > >> Currently, NMI interrupt is blindly sent to all the vCPUs when NMI > >> button event happens. This doesn't properly emulate real hardware on > >> which NMI button event triggers LINT1. Because of this, NMI is sent to > >> the processor even when LINT1 is masked in LVT. For example, this > >> causes the problem that kdump initiated by NMI sometimes doesn't work > >> on KVM, because kdump assumes NMI is masked on CPUs other than CPU0. > >> > >> With this patch, we introduce introduce KVM_SET_LINT1, > >> and we can use KVM_SET_LINT1 to correctly emulate NMI button > >> without change the old KVM_NMI behavior. > >> > >> @@ -759,6 +762,8 @@ struct kvm_clock_data { > >> #define KVM_CREATE_SPAPR_TCE _IOW(KVMIO, 0xa8, struct kvm_create_spapr_tce) > >> /* Available with KVM_CAP_RMA */ > >> #define KVM_ALLOCATE_RMA _IOR(KVMIO, 0xa9, struct kvm_allocate_rma) > >> +/* Available with KVM_CAP_SET_LINT1 for x86 */ > >> +#define KVM_SET_LINT1 _IO(KVMIO, 0xaa) > >> > >> > > > > LINT1 may have been programmed as a level -triggered interrupt instead > > of edge triggered (NMI or interrupt). We can use the ioctl argument for > > the level (and pressing the NMI button needs to pulse the level to 1 and > > back to 0). > > > > Hi, Avi, > > How to handle level=0 in the kernel? > Or just ignore it? It needs to be handled according to the delivery mode, polarity, and trigger mode bits in the LVT. For example, a Fixed delivery mode with polarity 1 and level trigger mode will post the interrupt as long as it is in level 0 and not masked by the ISR. __apic_accept_irq() should handle this. -- error compiling committee.c: too many arguments to function -- 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