tech-kern archive

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

Re: Understanding SPL(9)



On Mon, 31 Aug 2015, Stephan wrote:

> I´m trying to understand interrupt priority levels using the example
> of x86. From what I´ve seen so far I´d say that all spl*() functions
> end up in either splraise() or spllower() from
> sys/arch/i386/i386/spl.S. What these functions actually do is not
> clear to me. For example, splraise() starts with this:
> 
> ENTRY(splraise)
>         movl    4(%esp),%edx
>         movl    CPUVAR(ILEVEL),%eax
>         cmpl    %edx,%eax
>         ja      1f
>         movl    %edx,CPUVAR(ILEVEL)
> ...
> 
> I´m unable to find out what CPUVAR(ILEVEL) means. I would guess that
> something needs to happen to the APIC´s task priority register.
> However I can´t see any coherence just now.

Don't look at x86, it doesn't have real interrupt levels.  Look at SPARC 
or 68K which do.

Most machines nowadays only have one interrupt line and an external 
interrupt controller.  True interrupt levels are simulated by assigning 
levels to individual interrupt sources and masking the appropriate ones in 
the interrupt controller.  This makes the code rather complicated, 
especially since interrupts can nest.

If you want to see cleaner implementations look at machines with hardware 
interrupt levels.

Eduardo


Home | Main Index | Thread Index | Old Index