Re: shrink ci_ilevel from 32 to 8 bits ?
Jason Thorpe <[email protected]> Sat, 11 Apr 2020 14:53:05 -0700
| Newsgroups | gmane.os.netbsd.ports.x86-64,gmane.os.netbsd.ports.i386 |
|---|---|
| Message-ID | <[email protected]> |
> On Apr 11, 2020, at 1:25 PM, Manuel Bouyer <[email protected]> wrote: > > Hello, > at some point, the x86's cpu_info was changed to pack the istate in a > structure: > struct { > uint32_t ipending; > int ilevel; > uint32_t imasked; > } ci_istate __aligned(8); > #define ci_ipending ci_istate.ipending > #define ci_ilevel ci_istate.ilevel > #define ci_imasked ci_istate.imasked > > The point was to be able to change ipending and ilevel together > atomically, with cmpxchg8b. This is used in spllower() and mutex_spin_exit(). > This avoid using sti/cli which is more expansive. > > For Xen, a second interrupt pending integer exists, ci_xpending. It is > separate because for PVHVM, and probably PVH, we need both. > we can't use the native ipending mechanism because 32 events are really not > enough, especially for dom0. It is not a pending interrupt maks, but > a pending IPL mask. Can you please give the field a better name to indicate this (or, at the very least, a comment)? > With now, amd64's mutex_spin_exit checks the native pending interrupts > and resets ilevel using cmpxchg8b, then checks xpending. This is racy. > Also, as the goal is to get PVHVM support back in GENERIC, we can't really > go back to sti/cli. > > So I'ld like to change ci_istate to > struct { > uint32_t ipending; > int8_t ilevel; > uint8_t xpending; > int16_t ipad; /* free bits for futur use */ > uint32_t imasked; > } ci_istate __aligned(8); > #define ci_ipending ci_istate.ipending > #define ci_ipendin ci_istate.xpending I guess you mean ci_xpending here? > #define ci_ilevel ci_istate.ilevel > #define ci_imasked ci_istate.imasked > > and change the assembly code to access ilevel as byte instead of long > (e.g. with movsbl instead of movl). > > Does anyone see a problem with this approach ? That seems reasonable, though I'm not an expert. -- thorpej