Hello, I'm attaching below three files which rework the Xen interrupt servicing mechanism a little bit. The basic motivation is to re-use the native interrupt path as much as possible (i've not included the vector.S diffs here). How this works is that the callback handler scans through the pending bitstring that Xen uses to notify pending events on, and translates this to ci->ci_ipending on the target CPUs. We define a SPL_HYPERVISOR, which is the highest SPL the kernel can be in. We then yank the current spl to this level, and slowly iterate downwards to whatever spl we were at before. This churns the pending registered handlers of the appropriate drivers whose pending bits have been set, thus scheduling the interrupts for us. A less cheeky way to do this would be to use workqueue(9) with the appropriate SPL and the entry stackframe() appropriately setup. Anyway, this is meant as an RFC. Our current code is a little obtuse, and I'd like to have it simplified, so that we don't have to maintain a separate assembler path for the code XEN code. I've Cc:ed Taylor - he's really helped hash through some of the assumptions on the current code - thank you! -- ~cherry
Attachment:
hypervisor_machdep.c
Description: Binary data
Attachment:
evtchn.c
Description: Binary data
Attachment:
intr.c
Description: Binary data