PROBLEM: do_IRQ: [number] No irq handler for vector (irq -1)
Anthony DeRobertis
aderobertis at metrics.net
Thu Jan 23 19:24:06 UTC 2014
On 01/23/2014 07:37 AM, Neil Horman wrote:
> diff --git a/drivers/iommu/intel_irq_remapping.c b/drivers/iommu/intel_irq_remapping.c
> index bab10b1..19f41ee 100644
> --- a/drivers/iommu/intel_irq_remapping.c
> +++ b/drivers/iommu/intel_irq_remapping.c
> @@ -533,6 +533,8 @@ static int __init intel_irq_remapping_supported(void)
> "contact your BIOS vendor for an update\n");
> add_taint(TAINT_FIRMWARE_WORKAROUND, LOCKDEP_STILL_OK);
> disable_irq_remap = 1;
> + /* In case BIOS already enabled irq remapping */
> + disable_irq_remapping();
> return 0;
> }
I already tried that, well, similar (you need to declare
disable_irq_remapping above that or it won't compile). I also added in
some printks, to see what it is doing:
diff --git a/drivers/iommu/intel_irq_remapping.c b/drivers/iommu/intel_irq_remapping.c
index bab10b1..8a502d7 100644
--- a/drivers/iommu/intel_irq_remapping.c
+++ b/drivers/iommu/intel_irq_remapping.c
@@ -496,8 +496,13 @@ static void iommu_disable_irq_remapping(struct intel_iommu *iommu)
raw_spin_lock_irqsave(&iommu->register_lock, flags);
sts = dmar_readq(iommu->reg + DMAR_GSTS_REG);
- if (!(sts & DMA_GSTS_IRES))
+ if (!(sts & DMA_GSTS_IRES)) {
+ printk(KERN_WARNING
+ "Not disabling interrupt remapping, was not enabled.\n");
goto end;
+ } else {
+ printk(KERN_INFO "Disabling interrupt remapping.\n");
+ }
iommu->gcmd &= ~DMA_GCMD_IRE;
writel(iommu->gcmd, iommu->reg + DMAR_GCMD_REG);
@@ -518,6 +523,8 @@ static int __init dmar_x2apic_optout(void)
return dmar->flags & DMAR_X2APIC_OPT_OUT;
}
+static void disable_irq_remapping(void);
+
static int __init intel_irq_remapping_supported(void)
{
struct dmar_drhd_unit *drhd;
@@ -533,6 +540,7 @@ static int __init intel_irq_remapping_supported(void)
"contact your BIOS vendor for an update\n");
add_taint(TAINT_FIRMWARE_WORKAROUND, LOCKDEP_STILL_OK);
disable_irq_remap = 1;
+ disable_irq_remapping();
return 0;
}
The result. Note this is two boots, I changed to printk messages to
something more understandable and rebooted to make sure there were no
brown paper bag bugs. So the do_IRQ bugs logs are the first boot, the
rest is the second boot:
[ 0.063923] dmar: ATSR flags: 0x0
[ 0.064075] This system BIOS has enabled interrupt remapping
[ 0.064075] on a chipset that contains an erratum making that
[ 0.064075] feature unstable. To maintain system stability
[ 0.064075] interrupt remapping is being disabled. Please
[ 0.064075] contact your BIOS vendor for an update
[ 0.064226] Not disabling interrupt remapping, was not enabled.
[ 0.064287] Not disabling interrupt remapping, was not enabled.
[ 0.064408] Switched APIC routing to physical flat.
anthony at Zia:~$ dmesg | grep do_IRQ # this is from the first boot
[ 2713.768956] do_IRQ: 40 callbacks suppressed
[ 2713.768963] do_IRQ: 0.132 No irq handler for vector (irq -1)
[ 3914.191481] do_IRQ: 3.219 No irq handler for vector (irq -1)
[12336.482217] do_IRQ: 3.106 No irq handler for vector (irq -1)
[19669.277859] do_IRQ: 2.136 No irq handler for vector (irq -1)
[31304.932672] do_IRQ: 2.204 No irq handler for vector (irq -1)
[35867.281432] do_IRQ: 2.135 No irq handler for vector (irq -1)
[43867.266257] do_IRQ: 1.174 No irq handler for vector (irq -1)
[50097.592403] do_IRQ: 3.81 No irq handler for vector (irq -1)
[55498.847866] do_IRQ: 0.92 No irq handler for vector (irq -1)
[57560.923165] do_IRQ: 0.199 No irq handler for vector (irq -1)
[57650.204418] do_IRQ: 0.120 No irq handler for vector (irq -1)
[72835.450862] do_IRQ: 0.163 No irq handler for vector (irq -1)
[76884.819496] do_IRQ: 2.68 No irq handler for vector (irq -1)
[77687.282915] do_IRQ: 2.216 No irq handler for vector (irq -1)
[77885.355992] do_IRQ: 2.185 No irq handler for vector (irq -1)
[78615.309285] do_IRQ: 12 callbacks suppressed
[78615.309291] do_IRQ: 3.45 No irq handler for vector (irq -1)
[78735.392357] do_IRQ: 6 callbacks suppressed
[78735.392362] do_IRQ: 2.173 No irq handler for vector (irq -1)
[79785.646442] do_IRQ: 6 callbacks suppressed
[79785.646449] do_IRQ: 1.53 No irq handler for vector (irq -1)
[79965.718447] do_IRQ: 8 callbacks suppressed
[79965.718453] do_IRQ: 0.150 No irq handler for vector (irq -1)
PS: Sent Asus a support request, to see if they have anything to say
about what the BIOS is doing with that erratum. Will let you know if
they respond with anything useful, I mostly expect "we don't support
Linux".
https://vip.asus.com/VIP2/Services/MailDetail/WTM20140124024244911 ...
no idea if that link works for anyone but me.
More information about the iommu
mailing list