Port-i386 archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: shrink ci_ilevel from 32 to 8 bits ?
On Sun, Apr 12, 2020 at 08:52:54AM +0200, Jaromír Dole?ek wrote:
> Le sam. 11 avr. 2020 à 22:25, Manuel Bouyer <bouyer%antioche.eu.org@localhost> 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 <bouyer%antioche.eu.org@localhost>
NetBSD: 26 ans d'experience feront toujours la difference
--
Home |
Main Index |
Thread Index |
Old Index