bug-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 1/4 gnumach] ioapic: Detect version of IOAPIC for correct EOI


From: Samuel Thibault
Subject: Re: [PATCH 1/4 gnumach] ioapic: Detect version of IOAPIC for correct EOI handling
Date: Sat, 30 Sep 2023 10:45:09 +0200
User-agent: NeoMutt/20170609 (1.8.3)

applied, thanks!

Damien Zammit, le sam. 30 sept. 2023 06:30:51 +0000, a ecrit:
> ---
>  i386/i386at/ioapic.c | 15 ++++++++++++++-
>  1 file changed, 14 insertions(+), 1 deletion(-)
> 
> diff --git a/i386/i386at/ioapic.c b/i386/i386at/ioapic.c
> index 218f9a51..57d18789 100644
> --- a/i386/i386at/ioapic.c
> +++ b/i386/i386at/ioapic.c
> @@ -33,7 +33,7 @@
>  #include <kern/printf.h>
>  #include <kern/timer.h>
>  
> -static int has_irq_specific_eoi = 1; /* FIXME: Assume all machines have this 
> */
> +static int has_irq_specific_eoi = 0;
>  int timer_pin;
>  
>  uint32_t lapic_timer_val = 0;
> @@ -153,6 +153,12 @@ ioapic_toggle_entry(int apic, int pin, int mask)
>      ioapic_write(apic, APIC_IO_REDIR_LOW(pin), entry.lo);
>  }
>  
> +static int
> +ioapic_version(int apic)
> +{
> +    return ioapic_read(apic, APIC_IO_VERSION) & 0xff;
> +}
> +
>  static void timer_expiry_callback(void *arg)
>  {
>      volatile int *done = arg;
> @@ -305,6 +311,13 @@ ioapic_configure(void)
>      int gsi, apic = 0, bsp = 0, pin;
>      IrqOverrideData *irq_over;
>      int timer_gsi;
> +    int version = ioapic_version(apic);
> +
> +    if (version >= 0x20) {
> +        has_irq_specific_eoi = 1;
> +    }
> +
> +    printf("IOAPIC version 0x%x\n", version);
>  
>      /* Disable IOAPIC interrupts and set spurious interrupt */
>      lapic->spurious_vector.r = IOAPIC_SPURIOUS_BASE;
> -- 
> 2.40.1
> 
> 
> 

-- 
Samuel
---
Pour une évaluation indépendante, transparente et rigoureuse !
Je soutiens la Commission d'Évaluation de l'Inria.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]