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

Reply via email to