Activating the sigma0 thread in the Fiasco kernel
Paul Boddie
paul at boddie.org.uk
Tue Mar 6 01:14:25 CET 2018
On Tuesday 6. March 2018 00.46.29 Adam Lackorzynski wrote:
>
> All what you write sounds good. In any case the eret must restore state
> including setting the right interrupt state. Are you getting timer
> interrupts when sigma0 shall run, or is there silence? Is ESC working to
> get into jdb?
Thanks for the reply as usual! :-)
After Proc::cli is called in user_invoke, I don't think any interrupts will be
delivered, and if I display the status register, the IE (interrupt enable) bit
is indeed not set. So I wouldn't expect any timer interrupts unless something
else enables interrupts again, but I can't find any statement where this gets
done.
Here, I think that I *might* have transcribed some operation incorrectly,
leaving interrupts disabled when they should be re-enabled. The eret shouldn't
itself re-enable interrupts, as far as I remember from messing around with my
own boot payloads, since it merely clears the EXL (exception level) bit which
prevents interrupts if set (and then jumps to EPC, of course).
(Thinking about it, EXL isn't even set when I check the status register, but
if allowing interrupts in kernel mode, it is customary to clear it, from what
I have read, so maybe Fiasco does that.)
Now, I have transcribed the di instruction to the supposedly-equivalent status
register operations that clear IE, and the ei instruction to the operations
that set IE, both of these featuring in the Proc::cli and Proc::sti methods.
Maybe these instructions should be transcribed to set and clear EXL, however,
even though that is not what di and ei do.
As for jdb and UART interactions, I've had to use more primitive techniques
because I can't establish a reliable physical connection to the relevant pins.
Fortunately, I can take over the framebuffer and display simple bit patterns
(to keep debugging code at a minimum), and this is how I can comment on things
like the status register. Yes, it is a slow and tedious way of working, but
I've used it successfully before. :-)
Do you have any idea where this missing re-enabling statement might be, or
should I really be manipulating EXL instead of IE?
Thanks once again for indulging me!
Paul
More information about the l4-hackers
mailing list