* [PATCH] irqchip, gicv3: Fix out-of-range cpumask access reported by cpumask_check()
@ 2016-09-20 11:34 Robert Richter
2016-09-20 11:39 ` Mark Rutland
0 siblings, 1 reply; 3+ messages in thread
From: Robert Richter @ 2016-09-20 11:34 UTC (permalink / raw)
To: linux-arm-kernel
Booting a kernel with DEBUG_PER_CPU_MAPS enabled triggers the follwing
warning:
WARNING: CPU: 1 PID: 0 at ./include/linux/cpumask.h:121 gic_raise_softirq+0x298/0x308
Reason for this is the code in for_each_cpu() that modifies cpu in
gic_compute_target_list() which may cause cpu set to nr_cpumask_bits
and cpumask_check() (cpumask_next() of for_each_cpu()) throwing the
warning.
Change the code to avoid out-of-range access that stops the warning.
Note: Though cpumask_check() fails, current for_each_cpu()
implementation is save to use cpu out of range. Also, code in
gic_raise_softirq() might be reworked at all in a way that a single
each-cpu loop is used by squashing it with gic_compute_target_list().
Signed-off-by: Robert Richter <rrichter@cavium.com>
---
drivers/irqchip/irq-gic-v3.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/irqchip/irq-gic-v3.c b/drivers/irqchip/irq-gic-v3.c
index ede5672ab34d..ed46b906cf0a 100644
--- a/drivers/irqchip/irq-gic-v3.c
+++ b/drivers/irqchip/irq-gic-v3.c
@@ -615,6 +615,8 @@ static void gic_raise_softirq(const struct cpumask *mask, unsigned int irq)
tlist = gic_compute_target_list(&cpu, mask, cluster_id);
gic_send_sgi(cluster_id, tlist, irq);
+ if (cpu >= nr_cpu_ids)
+ break;
}
/* Force the above writes to ICC_SGI1R_EL1 to be executed */
--
2.7.0.rc3
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [PATCH] irqchip, gicv3: Fix out-of-range cpumask access reported by cpumask_check()
2016-09-20 11:34 [PATCH] irqchip, gicv3: Fix out-of-range cpumask access reported by cpumask_check() Robert Richter
@ 2016-09-20 11:39 ` Mark Rutland
2016-09-20 11:58 ` Marc Zyngier
0 siblings, 1 reply; 3+ messages in thread
From: Mark Rutland @ 2016-09-20 11:39 UTC (permalink / raw)
To: linux-arm-kernel
On Tue, Sep 20, 2016 at 01:34:19PM +0200, Robert Richter wrote:
> Booting a kernel with DEBUG_PER_CPU_MAPS enabled triggers the follwing
> warning:
>
> WARNING: CPU: 1 PID: 0 at ./include/linux/cpumask.h:121 gic_raise_softirq+0x298/0x308
James posted a patch for this [1], which we were hoping Thomas would
pick up [2].
Does that patch work for you?
Thanks,
Mark.
[1] http://lists.infradead.org/pipermail/linux-arm-kernel/2016-September/458087.html
[2] http://lists.infradead.org/pipermail/linux-arm-kernel/2016-September/458094.html
> Reason for this is the code in for_each_cpu() that modifies cpu in
> gic_compute_target_list() which may cause cpu set to nr_cpumask_bits
> and cpumask_check() (cpumask_next() of for_each_cpu()) throwing the
> warning.
>
> Change the code to avoid out-of-range access that stops the warning.
>
> Note: Though cpumask_check() fails, current for_each_cpu()
> implementation is save to use cpu out of range. Also, code in
> gic_raise_softirq() might be reworked at all in a way that a single
> each-cpu loop is used by squashing it with gic_compute_target_list().
>
> Signed-off-by: Robert Richter <rrichter@cavium.com>
> ---
> drivers/irqchip/irq-gic-v3.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/drivers/irqchip/irq-gic-v3.c b/drivers/irqchip/irq-gic-v3.c
> index ede5672ab34d..ed46b906cf0a 100644
> --- a/drivers/irqchip/irq-gic-v3.c
> +++ b/drivers/irqchip/irq-gic-v3.c
> @@ -615,6 +615,8 @@ static void gic_raise_softirq(const struct cpumask *mask, unsigned int irq)
>
> tlist = gic_compute_target_list(&cpu, mask, cluster_id);
> gic_send_sgi(cluster_id, tlist, irq);
> + if (cpu >= nr_cpu_ids)
> + break;
> }
>
> /* Force the above writes to ICC_SGI1R_EL1 to be executed */
> --
> 2.7.0.rc3
>
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH] irqchip, gicv3: Fix out-of-range cpumask access reported by cpumask_check()
2016-09-20 11:39 ` Mark Rutland
@ 2016-09-20 11:58 ` Marc Zyngier
0 siblings, 0 replies; 3+ messages in thread
From: Marc Zyngier @ 2016-09-20 11:58 UTC (permalink / raw)
To: linux-arm-kernel
On 20/09/16 12:39, Mark Rutland wrote:
> On Tue, Sep 20, 2016 at 01:34:19PM +0200, Robert Richter wrote:
>> Booting a kernel with DEBUG_PER_CPU_MAPS enabled triggers the follwing
>> warning:
>>
>> WARNING: CPU: 1 PID: 0 at ./include/linux/cpumask.h:121 gic_raise_softirq+0x298/0x308
>
> James posted a patch for this [1], which we were hoping Thomas would
> pick up [2].
It is already in tip/irq/urgent (727653d).
Thanks,
M.
--
Jazz is not dead. It just smells funny...
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2016-09-20 11:58 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-09-20 11:34 [PATCH] irqchip, gicv3: Fix out-of-range cpumask access reported by cpumask_check() Robert Richter
2016-09-20 11:39 ` Mark Rutland
2016-09-20 11:58 ` Marc Zyngier
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).