Subject: [PATCH 15/31] irqchips: Replace __this_cpu_ptr uses

[ARM specific]

These are generally replaced with raw_cpu_ptr. However, in
gic_get_percpu_base() we immediately dereference the pointer. This is
equivalent to a raw_cpu_read. So use that operation there.

Cc: [email protected]
Cc: Russell King <[email protected]>
Signed-off-by: Christoph Lameter <[email protected]>

Index: linux/drivers/irqchip/irq-gic.c
===================================================================
--- linux.orig/drivers/irqchip/irq-gic.c 2014-06-16 09:14:29.772747511 -0500
+++ linux/drivers/irqchip/irq-gic.c 2014-06-16 09:14:29.768747590 -0500
@@ -102,7 +102,7 @@
#ifdef CONFIG_GIC_NON_BANKED
static void __iomem *gic_get_percpu_base(union gic_base *base)
{
- return *__this_cpu_ptr(base->percpu_base);
+ return raw_cpu_read(base->percpu_base);
}

static void __iomem *gic_get_common_base(union gic_base *base)
@@ -556,11 +556,11 @@
if (!dist_base || !cpu_base)
return;

- ptr = __this_cpu_ptr(gic_data[gic_nr].saved_ppi_enable);
+ ptr = raw_cpu_ptr(gic_data[gic_nr].saved_ppi_enable);
for (i = 0; i < DIV_ROUND_UP(32, 32); i++)
ptr[i] = readl_relaxed(dist_base + GIC_DIST_ENABLE_SET + i * 4);

- ptr = __this_cpu_ptr(gic_data[gic_nr].saved_ppi_conf);
+ ptr = raw_cpu_ptr(gic_data[gic_nr].saved_ppi_conf);
for (i = 0; i < DIV_ROUND_UP(32, 16); i++)
ptr[i] = readl_relaxed(dist_base + GIC_DIST_CONFIG + i * 4);

@@ -582,11 +582,11 @@
if (!dist_base || !cpu_base)
return;

- ptr = __this_cpu_ptr(gic_data[gic_nr].saved_ppi_enable);
+ ptr = raw_cpu_ptr(gic_data[gic_nr].saved_ppi_enable);
for (i = 0; i < DIV_ROUND_UP(32, 32); i++)
writel_relaxed(ptr[i], dist_base + GIC_DIST_ENABLE_SET + i * 4);

- ptr = __this_cpu_ptr(gic_data[gic_nr].saved_ppi_conf);
+ ptr = raw_cpu_ptr(gic_data[gic_nr].saved_ppi_conf);
for (i = 0; i < DIV_ROUND_UP(32, 16); i++)
writel_relaxed(ptr[i], dist_base + GIC_DIST_CONFIG + i * 4);

Index: linux/kernel/irq/chip.c
===================================================================
--- linux.orig/kernel/irq/chip.c 2014-06-16 09:14:29.772747511 -0500
+++ linux/kernel/irq/chip.c 2014-06-16 09:14:29.768747590 -0500
@@ -669,7 +669,7 @@
{
struct irq_chip *chip = irq_desc_get_chip(desc);
struct irqaction *action = desc->action;
- void *dev_id = __this_cpu_ptr(action->percpu_dev_id);
+ void *dev_id = raw_cpu_ptr(action->percpu_dev_id);
irqreturn_t res;

kstat_incr_irqs_this_cpu(irq, desc);


2014-07-18 23:30:46

by Tejun Heo

[permalink] [raw]
Subject: Re: [PATCH 15/31] irqchips: Replace __this_cpu_ptr uses

On Fri, Jun 20, 2014 at 02:31:30PM -0500, Christoph Lameter wrote:
> [ARM specific]
>
> These are generally replaced with raw_cpu_ptr. However, in
> gic_get_percpu_base() we immediately dereference the pointer. This is
> equivalent to a raw_cpu_read. So use that operation there.
>
> Cc: [email protected]
> Cc: Russell King <[email protected]>
> Signed-off-by: Christoph Lameter <[email protected]>

Applied to wq/for-3.17-consistent-ops. If this patch should be routed
differently, please holler.

Thanks.

--
tejun