On Wed, Feb 15, 2012 at 01:50:02PM -0800, Shawn Guo wrote: > On Wed, Feb 15, 2012 at 01:21:45PM -0700, Grant Likely wrote: > > On Wed, Feb 15, 2012 at 04:04:28PM +0100, Nicolas Ferre wrote: > > > On 02/07/2012 07:07 PM, Nicolas Ferre : > > > > On 01/27/2012 10:36 PM, Grant Likely : > > > >> The 'hint' used to try and line up irq numbers with hw irq numbers is > > > >> rather a hack and not very useful. Now that /proc/interrupts also > > > >> outputs > > > >> the hwirq number, it is even less useful to keep around the 'hint' > > > >> heuristic. > > > >> > > > >> This patch removes it. > > > > > > > > Grant, > > > > > > > > While trying your patch series in conjunction with Rob one, I do not > > > > find this patch in your irqdomain/next branch (and a couple of others). > > > > Can you tell me if this v3 series is available as a git tree? > > > > > > I am still interested by patch 24-25 of this series but still cannot > > > find them in your irqdomain/next branch: > > > Are they also expected to join the 3.4 merge window material? > > > > I've held off on putting them in irqdomain/next because they are a bit more > > risky than the other patches, and I want an explicit ack from Ben for > > patches > > 24 & 25. However, that shouldn't really cause any issues since the changes > > in 24 & 25 don't impact the irq_domain functionality or API. They are just > > optimizations. > > > I'm seeing that patch 24 does impact on irq_domain functionality > a little bit. On next tree which has no this patch yet, > irq_create_mapping can reasonably create virq in range 1..15, while > irq_find_mapping will only try to find the virq from 16 > (NUM_ISA_INTERRUPTS). This will result in that any hwirq that is < 16 > gets multiple entries in the mapping table with different virq numbers > mapped to the same one hwirq.
That's a bug then. The implementation should work without patch 24. Does this patch fix it? --- diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c index 2c1d6f8..2d3dfff 100644 --- a/kernel/irq/irqdomain.c +++ b/kernel/irq/irqdomain.c @@ -516,8 +516,8 @@ unsigned int irq_find_mapping(struct irq_domain *domain, return irq_domain_legacy_revmap(domain, hwirq); /* Slow path does a linear search of the map */ - if (hint < NUM_ISA_INTERRUPTS) - hint = NUM_ISA_INTERRUPTS; + if (hint == 0) + hint = 1; i = hint; do { struct irq_data *data = irq_get_irq_data(i); @@ -525,7 +525,7 @@ unsigned int irq_find_mapping(struct irq_domain *domain, return i; i++; if (i >= irq_virq_count) - i = NUM_ISA_INTERRUPTS; + i = 1 } while(i != hint); return 0; } _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev