Damien Zammit, le sam. 12 juil. 2025 11:30:01 +0000, a ecrit: > Also, do the lapic eoi before the ioapic eoi.
Why? > Add code for conditioning on TMR bit, but keep it disabled for now. > > TESTED: on SMP and UP+apic: receives a large file over rumpnet. > > --- > i386/i386/irq.c | 23 +++++++++++++++-------- > i386/i386at/ioapic.c | 26 +++++++++++++++++++------- > 2 files changed, 34 insertions(+), 15 deletions(-) > > diff --git a/i386/i386/irq.c b/i386/i386/irq.c > index 30457a3d..9d96578e 100644 > --- a/i386/i386/irq.c > +++ b/i386/i386/irq.c > /* Each array elem fits in a cache line */ > struct nested_irq { > simple_lock_irq_data_t irq_lock; > @@ -41,6 +33,21 @@ struct nested_irq { > uint32_t unused[14]; > } __attribute__((packed)) nested_irqs[NINTR]; > > +static void > +irq_eoi (struct irqdev *dev, int id) > +{ > +#ifdef APIC > + int irq_nr = dev->irq[id]; > + struct nested_irq *nirq = &nested_irqs[irq_nr]; > + > + spl_t s = simple_lock_irq(&nirq->irq_lock); That doesn't protect more than what we already protect thanks to ioapic_lock. > + ioapic_irq_eoi (irq_nr); > + > + simple_unlock_irq(s, &nirq->irq_lock); > +#endif > +} > + > void > init_irqs (void) > { Samuel