[PATCH v3 24/25] irq_domain: remove "hint" when allocating irq numbers
From: Shawn Guo <hidden>
Date: 2012-02-15 21:50:13
Also in:
linux-devicetree, linuxppc-dev, lkml
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:quoted
On 02/07/2012 07:07 PM, Nicolas Ferre :quoted
On 01/27/2012 10:36 PM, Grant Likely :quoted
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 why I have to apply patch #24 (with one line change below) on top of next tree to get my imx irqdomain series work properly.
@@ -371,7 +371,7 @@ unsigned int irq_create_mapping(struct irq_domain *domain, return irq_domain_legacy_revmap(domain, hwirq); /* Allocate a virtual interrupt number */ - virq = irq_alloc_desc(0); + virq = irq_alloc_desc_from(1, 0); if (!virq) { pr_debug("irq: -> virq allocation failed\n"); return 0;
I need this line of change, because the first call on irq_alloc_desc will always return 0 to virq and in turn irq_create_mapping fails. On imx, that's the mapping for timer irq. Hence, the system will hang there due to irq mapping failure. -- Regards, Shawn