Overall this patchset looks pretty sane, but I don't see a clear picture
of what everything is going to look like when the dust settles.
I believe you have distored the design when aiming for migration
of active irq descriptors (which you have not even implemented yet).
How do you plan to remove the radix tree lookup from the irq
handling path?
On x86 the obvious implementation is to store a pointer to the irq_desc
in our 256 entry per cpu tables. Please implement this and see how
it affects the design. The code is pretty trivial.
From what I can see of your migration plan it seems incompatible with
removing the radix tree look up in the path to generic_handle_irq().
Where is that a short coming?
If by core you mean arch code irq handling code certainly and
msi fits that bill.
And always handing down the data structure so you can do the same
thing with sparse irq enabled or not is a much needed code cleanup.
I don't know that I have a problem with this but I do have a problem
with using a bitmap. A lot of the kernels irq usage has been distored
because we use a compact array, that we cannot grow over time. Using a
bitmap here essentially removes 90% of the point of sparse irq. The
ability to remove a hard coded NR_IRQS from the kernel.
You should be able to do all of that by walking your radix tree in the
sparse irq case.
Those files provide the genirq irq chip implementation especially
drivers/pci/msi.c. Of course they will do what every other irq_chip
implementation does to get access to data. There is an unpleasant
difference between which generic irq data field htirq.c uses and msi.c
which may be worth cleaning up. But otherwise I don't see any
fundamental problems.
The big difference is those are the irq controllers that we have code
for that is not necessarily architecture specific.
You should be able to convert msi.c and company directly to using
irq_data immediately following your previous patchset shouldn't you.
Perhaps with two flavors of helper functions during the transition
to passing irq_data everywhere.
I don't see any code in the msi code is arch specific or sparse irq
specific.
Eric
--