Fix PLIC priority tie-breaking to favor lowest ID #635
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The RISC-V PLIC specification states that "if two or more pending interrupts have the same priority, the one with the lowest ID has the highest priority."
The previous implementation used ilog2(), which identifies the most significant bit (highest ID). Replace it with rv_ctz() to select the least significant bit (lowest ID), ensuring compliance with the specification's arbitration rule.
Summary by cubic
Fix PLIC tie-breaking to choose the lowest interrupt ID when multiple pending interrupts share the same priority, matching the RISC-V spec. Replaced ilog2() with rv_ctz() to select the least significant set bit in the pending-enabled mask.
Written for commit a7ca51b. Summary will update automatically on new commits.