NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: port-i386/57197: GENERIC kernel crash on pentium-III and earlier CPUs



> Date: Wed, 25 Jan 2023 17:01:58 +1100
> from: matthew green <mrg%eterna.com.au@localhost>
> 
> be nice to put a little more details in what needs fixing:
> 
> arch/i386/i386/vector.S:#define INTRSTUB1(name, num, sub, off, early_ack, late_ack, mask, unmask, level_mask) \
> 
> has this:
> 
> 	/* switch stack if necessary, and push a ptr to our intrframe */ \
> 	IDEPTH_INCR
> 
> the last part of IDEPTH_INCR being:
> 
> 999:    pushl   %eax; /* eax == pointer to intrframe */ \
> 
> so it's _this_ that becomes the 2nd arg for clockintr().

Tempted to say there should be a struct cpu_info::ci_iframe just like
ci_idepth, and when an interrupt handler is interrupted, it should
just be saved on the stack (perhaps in the same stack slot!) and
restored on return.

That way, i8254_clockintr could just do curcpu()->ci_iframe instead of
these horrible function pointer casts.


Home | Main Index | Thread Index | Old Index