CVSROOT:        /cvs
Module name:    src
Changes by:     d...@cvs.openbsd.org    2025/07/06 06:22:31

Modified files:
        sys/arch/arm64/dev: agintc.c ampintc.c aplintc.c bcm2836_intr.c 

Log message:
rework and try to unify ipi handlers.

agintc and ampintc tried to allocate an interrupt per type of ipi,
but could fall back to a combined ipi handler if needed. aplintc
and bcm2836_intr always used a combined handler.

i want to add another IPI in the future, so this diff sets it up
to be as easy as possible by making all these drivers consistent
around ipi handling. in this verson the type of IPI is encoded as
a bit in a reason word, and then an IPI is sent to the target cpu.
the ipi handler loops over the encoded bits and farms out handling
to the more specific handlers as necessary. the nop ipi, which is
the most common ipi, is optimised to avoid the atomic ops. it just
needs the remote cpu to wake up, it doesnt rely on it runnning
specific code, so we don't encode any bit in the reason word and
just send the ipi. the handler special cases no bits set and returns
immediately.

testing and ok kettenis@

Reply via email to