Re: shrink ci_ilevel from 32 to 8 bits ?
Manuel Bouyer <[email protected]> Sun, 12 Apr 2020 21:43:51 +0200
| Newsgroups | gmane.os.netbsd.ports.x86-64,gmane.os.netbsd.ports.i386 |
|---|---|
| Message-ID | <[email protected]> |
On Sun, Apr 12, 2020 at 08:52:54AM +0200, JaromÃr Dole?ek wrote: > Le sam. 11 avr. 2020 à 22:25, Manuel Bouyer <[email protected]> a écrit : > > 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); > > A while ago there was talk that it would be nice to expand ipending to > allow more native interrupts per CPU, which also involved shrinking > ilevel to int8_t and reusing the extra space. I started on that, but > never finished. > > So this helps with that eventually too. It will be easier to adapt and > reuse the remaining space for native interrupts since ilevel handling > would be out of the way already by your change. thanks, after a night I could see that Xen could use the fast software interrupt setip for its need (just register software interrupts for IPL_VM, IPL_SCHED and IPL_HIGH). So I went this way and could get rid of the Xen-specific interrupt handlings in cpu_info and simplify the assembly functions. Now, this use another 3 slots in ipending when running Xen. so I would change my proposal to use a 8-bit word for software interrupts. This could also fix this issue noted in intrdefs.h: * XXX These should be lowest numbered, but right now would * conflict with the legacy IRQs. Their current position * means that soft interrupt take priority over hardware * interrupts when lowering the priority level! This would free 4 slots from ipending. So I propose to change ci_istate to struct { uint32_t ipending; /* pending hardware interrupts */ int8_t ilevel; /* current SPL */ uint8_t sipending; /* pending software interrupts */ int16_t ipad; /* free bits for futur use */ uint32_t imasked; /* masked hardware interrupts */ } ci_istate __aligned(8); and associated ci_isources[], ci_simask[] and ci_siunmask[] If nobody objects I'll start working on this. Unless I have a better idea tomorow :) -- Manuel Bouyer <[email protected]> NetBSD: 26 ans d'experience feront toujours la difference --