Date: Thu, 04 Jul 2013 08:51:09 +0100 From: Nick Hudson <sk...@netbsd.org>
On 06/23/13 03:35, Taylor R Campbell wrote: > + * rndsink_request takes a spin lock at IPL_VM, so we can be no > + * higher than that. > + */ > + KASSERT(ipl <= IPL_VM); This isn't always the case as some platforms have a different ordering for IPL levels. Blargh! How about KASSERT(ipl != IPL_SCHED && ipl != IPL_HIGH) although this was suggsted as well KASSERT(IPL_SCHED > IPL_VM ? ipl <= IPL_VM : ipl >= IPL_VM); I would prefer not to bake relations between different IPLs into subr_cprng.c, but as a temporary measure, go ahead either way. Perhaps we could add an MD predicate for the purpose of kasserts like this: KASSERT(ipl_atmost(ipl, IPL_VM)); /* machine A */ #define IPL_NONE 0 #define IPL_VM 3 #define IPL_SCHED 4 #define IPL_HIGH 6 static inline bool ipl_atmost(int x, int y) { return (x <= y); } /* machine B */ #define IPL_NONE 7 #define IPL_VM 5 #define IPL_SCHED 3 #define IPL_HIGH 0 static inline bool ipl_atmost(int x, int y) { return (x >= y); } /* machine C */ #define IPL_NONE 0xff #define IPL_VM 0xd6 #define IPL_SCHED 0xc4 #define IPL_HIGH 0x00 static inline bool ipl_atmost(int x, int y) { return ((x & y) == y); }