Subject: Re: ipl_cookie_t is too big!
To: None <thorpej@shagadelic.org>
From: Izumi Tsutsui <tsutsui@ceres.dti.ne.jp>
List: port-m68k
Date: 03/10/2007 22:17:13
> The reason that kmutex_t is 16 bytes on the m68k instead of 8 is
> because ipl_cookie_t is an int. If it could be made smaller (say, a
> short or a char), mtx_ipl and mtx_lock could overlay their storage
> with mtx_owner (they way x86 does).
>
> So, which platforms are storing the big values in ipl_cookie_t?
> Actually, it looks like nobody is, because the m68k SR is only 16-bit,
> yes?
On some ports ipl_cookie_t contains ipl_t _ipl which is used
as index to pick up SR values.
---
typedef int ipl_t;
typedef struct {
ipl_t _ipl;
} ipl_cookie_t;
static inline ipl_cookie_t
makeiplcookie(ipl_t ipl)
{
return (ipl_cookie_t){._ipl = ipl};
}
static inline int
splraiseipl(ipl_cookie_t icookie)
{
return _splraise(ipl2spl_table[icookie._ipl]);
}
---
On other ports ipl_cookie_t contains ipl_t _psl which is used
to pass (static) SR values to _splraise() directly in splraiseipl().
---
typedef int ipl_t;
typedef struct {
int _psl;
} ipl_cookie_t;
static inline ipl_cookie_t
makeiplcookie(ipl_t ipl)
{
return (ipl_cookie_t){._psl = hp300_ipl2psl[ipl]};
}
static inline int
splraiseipl(ipl_cookie_t icookie)
{
return _splraise(icookie._psl);
}
---
In the former case, ipl_t could be a char, and in the latter
it should be uint16_t. Anyway I don't think there is any reason
it should be an int.
(should we use the same way among all m68k ports?)
---
Izumi Tsutsui