Message ID | 1438176493-26033-1-git-send-email-pbonzini@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Wed, Jul 29, 2015 at 03:28:13PM +0200, Paolo Bonzini wrote: > Test resampling of level interrupts after EOI, by leaving the IRQ > line set in the ISR. One tests does reset the IRQ line after a while, > the other uses masking instead in the ISR. > > Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> > --- > x86/ioapic.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 51 insertions(+) > > diff --git a/x86/ioapic.c b/x86/ioapic.c > index 1fcf67e..d43d5c1 100644 > --- a/x86/ioapic.c > +++ b/x86/ioapic.c > @@ -188,6 +188,31 @@ static void test_ioapic_level_sequential(void) > report("sequential level interrupts", g_isr_99 == 2); > } > > +static volatile int g_isr_9a; > + > +static void ioapic_isr_9a(isr_regs_t *regs) > +{ > + ++g_isr_9a; > + if (g_isr_9a == 2) > + set_irq_line(0x0e, 0); > + eoi(); > +} > + > +static void test_ioapic_level_retrigger(void) > +{ > + handle_irq(0x9a, ioapic_isr_9a); > + set_ioapic_redir(0x0e, 0x9a, LEVEL_TRIGGERED); > + > + asm volatile ("cli"); > + set_irq_line(0x0e, 1); > + while (g_isr_9a != 2) > + asm volatile ("sti; hlt; cli"); This seems sketchy. The test should be able to exit this and fail. Steve -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 30/07/2015 05:14, Steve Rutherford wrote: >> > +static void test_ioapic_level_retrigger(void) >> > +{ >> > + handle_irq(0x9a, ioapic_isr_9a); >> > + set_ioapic_redir(0x0e, 0x9a, LEVEL_TRIGGERED); >> > + >> > + asm volatile ("cli"); >> > + set_irq_line(0x0e, 1); >> > + while (g_isr_9a != 2) >> > + asm volatile ("sti; hlt; cli"); > This seems sketchy. The test should be able to exit this and fail. You're right, this shouldn't take more than 10-15 iterations of the while loop. Paolo -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/x86/ioapic.c b/x86/ioapic.c index 1fcf67e..d43d5c1 100644 --- a/x86/ioapic.c +++ b/x86/ioapic.c @@ -188,6 +188,31 @@ static void test_ioapic_level_sequential(void) report("sequential level interrupts", g_isr_99 == 2); } +static volatile int g_isr_9a; + +static void ioapic_isr_9a(isr_regs_t *regs) +{ + ++g_isr_9a; + if (g_isr_9a == 2) + set_irq_line(0x0e, 0); + eoi(); +} + +static void test_ioapic_level_retrigger(void) +{ + handle_irq(0x9a, ioapic_isr_9a); + set_ioapic_redir(0x0e, 0x9a, LEVEL_TRIGGERED); + + asm volatile ("cli"); + set_irq_line(0x0e, 1); + while (g_isr_9a != 2) + asm volatile ("sti; hlt; cli"); + + asm volatile ("sti"); + + report("retriggered level interrupts without masking", g_isr_9a == 2); +} + static volatile int g_isr_81; static void ioapic_isr_81(isr_regs_t *regs) @@ -242,6 +267,30 @@ static void test_ioapic_level_mask(void) report("unmasked level interrupt", g_isr_82 == 1); } +static volatile int g_isr_83; + +static void ioapic_isr_83(isr_regs_t *regs) +{ + ++g_isr_83; + set_mask(0x0e, true); + eoi(); +} + +static void test_ioapic_level_retrigger_mask(void) +{ + handle_irq(0x83, ioapic_isr_83); + set_ioapic_redir(0x0e, 0x83, LEVEL_TRIGGERED); + + set_irq_line(0x0e, 1); + asm volatile ("nop"); + set_mask(0x0e, false); + asm volatile ("nop"); + report("retriggered level interrupts with mask", g_isr_83 == 2); + + set_irq_line(0x0e, 0); + set_mask(0x0e, false); +} + int main(void) { @@ -263,9 +312,11 @@ int main(void) test_ioapic_simultaneous(); test_ioapic_level_coalesce(); test_ioapic_level_sequential(); + test_ioapic_level_retrigger(); test_ioapic_edge_mask(); test_ioapic_level_mask(); + test_ioapic_level_retrigger_mask(); return report_summary(); }
Test resampling of level interrupts after EOI, by leaving the IRQ line set in the ISR. One tests does reset the IRQ line after a while, the other uses masking instead in the ISR. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> --- x86/ioapic.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+)