Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

dde_linux: improve handling of interrupt masking and acknowledgement #5164

Open
chelmuth opened this issue Mar 25, 2024 · 2 comments
Open

dde_linux: improve handling of interrupt masking and acknowledgement #5164

chelmuth opened this issue Mar 25, 2024 · 2 comments

Comments

@chelmuth
Copy link
Member

chelmuth commented Mar 25, 2024

While debugging pc_nic_drv link handling, I discovered that unmasked pending interrupts are sometimes not delivered immediately. This was caused by sloppy task execution that is fixed by 1ea641a paired with shaky handling of interrupt masking and acknowledgement. I addressed the latter in a work-in-progress commit on x86/pc, but then discovered that ARM comes with a slightly different implementation of irqchip.c regarding EOI and ACK.

May we merge the both implementations?

If not, could someone check if arm/irqchip.c contradicts my work in progress?

chelmuth added a commit to chelmuth/genode that referenced this issue Mar 25, 2024
Unmasking of a pending interrupt did not lead to immediate IRQ handler
execution in all cases.

Issue genodelabs#5164
@chelmuth
Copy link
Member Author

Commit fb00f4a reflects my WIP.

@skalk
Copy link
Member

skalk commented Mar 26, 2024

I would very much appreciate, if we can merge both irqchip variants (x86, arm). They are in my eyes not so much architecture dependent, it's more a question of configuration. The arm variant reflects the different needs already a bit by the CONFIG_IRQ_DOMAIN_HIERARCHY optional part. If we put several parts into a CONFIG_OF optional part too, we would gain an almost identical version.
The EOI when doing unmask in the arm version might be located there for no particular reason. The development history was such that x86 came later, and EOI got placed differently. I would think we can check whether it works in the ARM case the same way.
Another function provided in the arm case is .irq_set_wake, which seems to have no value regarding functionality, I think we can simply remove it. The function .irq_set_type (only in arm) might be necessary, but probably it does not disturb the x86 scenarios.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants