On 2011-04-24 08:44, Avi Kivity wrote: > On 04/24/2011 01:50 AM, OGAWA Hirofumi wrote: >> OGAWA Hirofumi<hirofumi@xxxxxxxxxxxxxxxxxx> writes: >> >> > I noticed recently NMI on guest kernel is not working well. >> host/guest >> > kernel is 2.6.39-rc4, and using vmx. >> > >> > And test code is something like the following: >> > >> > local_irq_disable(); >> > for (i = 0; i< 10; i++) { >> > int cpu = get_cpu(); >> > printk("%s: nmi %u, lapic %u\n", __FUNCTION__, >> > nmi_count(cpu), irq_stat[cpu].apic_timer_irqs); >> > mdelay(1000); >> > put_cpu(); >> > } >> > >> > the result is both of nmi and lapic are not increased. If I used >> > -no-kvm-irqchip, it works fine (increase nmi only). So, it seems to be >> > the bug of kvm driver side. >> >> With some debug, the cause seems to be in pit_do_work(). With the >> following patch, NMI watchdog seems to be working correctly (if irq >> disabled for long time, NMI watchdog can detect it). >> >> Is the following patch right? > > This would cause IRQs to be delivered even if the PIT is masked, no? I checked the patch and our code again: NMI watchdog masking is managed via arch.vapics_in_nmi_mode and by re-checking the per-APIC mask situation in kvm_apic_local_deliver when delivering the NMI. So the patch looks correct - NMIs aren't acked like timer IRQs, the current logic is definitely wrong. Jan
Attachment:
signature.asc
Description: OpenPGP digital signature