MD code must recheck for new ast scheduled after the existing ast was handled. It seems that the branch was missed as result of typo, the code is correctly structured to reenter the loop.
Details
Diff Detail
- Repository
- rS FreeBSD src repository - subversion
- Lint
Lint Not Applicable - Unit
Tests Not Applicable
Event Timeline
Indeed, it seems that placing the 1: label earlier would allow to remove the daif read duplication.
sys/arm64/arm64/exception.S | ||
---|---|---|
101 ↗ | (On Diff #8809) | I think you could move this to the daifset instruction below. Unless there is a case where interrupts are left dis/enabled after calling ast this shouldn't change. Along with this the restore interrupts code below can also be removed, the next instruction after do_ast disables interrupts as we will be modifying x18, which may be in an inconsistent state. |
sys/arm64/arm64/exception.S | ||
---|---|---|
101 ↗ | (On Diff #8809) | I moved the '1' label to msr instruction. x19 is callee-saved. Do you propose to not restore the the interrupts state around the call to ast ? If yes, I do not think this is correct. Ast handling should be done with interrupts enabled. This way, I even think that we should not restore the interrupts, but explicitely enable them. But the patch is probably fine for now. |