Subject: Re: splraiseipl()
To: None <yamt@mwd.biglobe.ne.jp>
From: Izumi Tsutsui <tsutsui@ceres.dti.ne.jp>
List: tech-kern
Date: 05/08/2006 19:08:24
In article <1147053499.956793.19061.nullmailer@yamt.dyndns.org>
yamt@mwd.biglobe.ne.jp wrote:
> > - style of '#define<space>' or '#define<tab>' shouldn't be changed
> > in each file
> then i'll change all of them to use "#define<tab>". ok?
Ah, okay, now I see intr.h of luna68k and next68k are already
inconsistent...
> > - is splsoft() still needed?
> i don't know.
At least it can be removed from news68k/include/intr.h.
> > - do you have any idea for hp300? should all spl levels refer hp300_ipls[]?
> do you mean how to implement splraiseipl() for hp300?
> it can be similar to mac68k, i guess.
:
> what's level specific macro?
On hp300, some spl levels (bio, net, tty etc.) are computed
at boot time, but others (high, soft) could be constants.
I know such micro optimization would not be so useful,
but I thought it might be better if it could be specified easily.
> > - it looks weird a bit to define IPL_* macro as (PSL_S|PSL_IPL?)
> > because IPL_* macros are used to specify interrupt priority order
> > on some ports (hp300, some mips etc).
> how are hp300 and mips related to this patch?
On hp300, IPL_* macros already have some meaning:
>> /*
>> * Interrupt "levels". These are a more abstract representation
>> * of interrupt levels, and do not have the same meaning as m68k
>> * CPU interrupt levels. They serve two purposes:
>> *
>> * - properly order ISRs in the list for that CPU ipl
>> * - compute CPU PSL values for the spl*() calls.
>> */
>>#define IPL_NONE 0 /* disable only this interrupt */
:
but in <sys/spl.h> IPL_* macros are used as opaque values passed
to splraise(). Maybe we should rename either of them, but it
might cause some confusion to use existing names for splraiseipl(),
as you wrote in PR/33218.
If we introduce new independent SPL_* macros, we could define them like:
---
#define IPL_NONE 0 /* disable only this interrupt */
#define IPL_BIO 1 /* disable block I/O interrupts */
#define IPL_NET 2 /* disable network interrupts */
#define IPL_TTY 3 /* disable terminal interrupts */
#define IPL_TTYNOBUF 4 /* IPL_TTY + higher ISR priority */
#define IPL_CLOCK 5 /* disable clock interrupts */
#define IPL_HIGH 6 /* disable all interrupts */
:
#define spllowersoftclock() spl1()
#define SPL_SOFTCLOCK (PSL_S|PSL_IPL1)
#define SPL_SOFTNET (PSL_S|PSL_IPL1)
#define SPL_BIO (hp300_ipls[HP300_IPL_BIO])
#define SPL_NET (hp300_ipls[HP300_IPL_NET])
#define SPL_TTY (hp300_ipls[HP300_IPL_TTY])
#define SPL_SERIAL (hp300_ipls[HP300_IPL_TTY])
#define SPL_VM (hp300_ipls[HP300_IPL_VM])
#define SPL_CLOCK (PSL_S|PSL_IPL6)
#define SPL_STATCLOCK SPL_CLOCK
#define SPL_SCHED (PSL_S|PSL_IPL7)
#define SPL_LOCK (PSL_S|PSL_IPL7)
#define SPL_HIGH (PSL_S|PSL_IPL7)
:
---
then all m68k ports could have the same meanings of SPL_*,
definition of splraiseipl() could be defined as
"#define splraiseipl(ipl) _splraise(ipl)" in common <m68k/psl.h>.
Just my two cents...
---
Izumi Tsutsui