mirror of
https://git.yoctoproject.org/meta-ti
synced 2026-07-21 03:17:18 +00:00
2177f80076
Duplicate patches between PSP and 3.2.17 have been dropped from the 3.2.17 series Signed-off-by: Koen Kooi <koen@dominion.thruhere.net> Signed-off-by: Denys Dmytriyenko <denys@ti.com>
54 lines
1.9 KiB
Diff
54 lines
1.9 KiB
Diff
From 453a85cabdd26d6525b6563e7d1b804b4b88d42f Mon Sep 17 00:00:00 2001
|
|
From: Will Deacon <will.deacon@arm.com>
|
|
Date: Fri, 27 Apr 2012 12:56:24 +0100
|
|
Subject: [PATCH 123/165] ARM: 7406/1: hotplug: copy the affinity mask when
|
|
forcefully migrating IRQs
|
|
|
|
commit 5e7371ded05adfcfcee44a8bc070bfc37979b8f2 upstream.
|
|
|
|
When a CPU is hotplugged off, we migrate any IRQs currently affine to it
|
|
away and onto another online CPU by calling the irq_set_affinity
|
|
function of the relevant interrupt controller chip. This function
|
|
returns either IRQ_SET_MASK_OK or IRQ_SET_MASK_OK_NOCOPY, to indicate
|
|
whether irq_data.affinity was updated.
|
|
|
|
If we are forcefully migrating an interrupt (because the affinity mask
|
|
no longer identifies any online CPUs) then we should update the IRQ
|
|
affinity mask to reflect the new CPU set. Failure to do so can
|
|
potentially leave /proc/irq/n/smp_affinity identifying only offline
|
|
CPUs, which may confuse userspace IRQ balancing daemons.
|
|
|
|
This patch updates migrate_one_irq to copy the affinity mask when
|
|
the interrupt chip returns IRQ_SET_MASK_OK after forcefully changing the
|
|
affinity of an interrupt.
|
|
|
|
Reported-by: Leif Lindholm <leif.lindholm@arm.com>
|
|
Signed-off-by: Will Deacon <will.deacon@arm.com>
|
|
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
|
|
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|
---
|
|
arch/arm/kernel/irq.c | 6 +++---
|
|
1 files changed, 3 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/arch/arm/kernel/irq.c b/arch/arm/kernel/irq.c
|
|
index 3efd82c..87c8be5 100644
|
|
--- a/arch/arm/kernel/irq.c
|
|
+++ b/arch/arm/kernel/irq.c
|
|
@@ -156,10 +156,10 @@ static bool migrate_one_irq(struct irq_desc *desc)
|
|
}
|
|
|
|
c = irq_data_get_irq_chip(d);
|
|
- if (c->irq_set_affinity)
|
|
- c->irq_set_affinity(d, affinity, true);
|
|
- else
|
|
+ if (!c->irq_set_affinity)
|
|
pr_debug("IRQ%u: unable to set affinity\n", d->irq);
|
|
+ else if (c->irq_set_affinity(d, affinity, true) == IRQ_SET_MASK_OK && ret)
|
|
+ cpumask_copy(d->affinity, affinity);
|
|
|
|
return ret;
|
|
}
|
|
--
|
|
1.7.7.6
|
|
|