[linux-yocto] [PATCH 38/42] arch/arm/mach-axxia: changed affinity parameter to cpu
Cristian Bercaru
cristian.bercaru at windriver.com
Thu Jun 11 01:32:23 PDT 2015
From: Charlie Paul <cpaul.windriver at gmail.com>
Signed-off-by: Charlie Paul <cpaul.windriver at gmail.com>
---
arch/arm/mach-axxia/axxia-gic.c | 47 ++++++++++++++++++++++-----------------
1 file changed, 27 insertions(+), 20 deletions(-)
diff --git a/arch/arm/mach-axxia/axxia-gic.c b/arch/arm/mach-axxia/axxia-gic.c
index a7656a7..27e0111 100644
--- a/arch/arm/mach-axxia/axxia-gic.c
+++ b/arch/arm/mach-axxia/axxia-gic.c
@@ -192,12 +192,14 @@ static struct gic_rpc_data gic_rpc_data = {NULL, 0, 0, 0, 0, NULL};
static inline void __iomem *gic_dist_base(struct irq_data *d)
{
struct gic_chip_data *gic_data = irq_data_get_irq_chip_data(d);
+
return gic_data_dist_base(gic_data);
}
static inline void __iomem *gic_cpu_base(struct irq_data *d)
{
struct gic_chip_data *gic_data = irq_data_get_irq_chip_data(d);
+
return gic_data_cpu_base(gic_data);
}
@@ -279,11 +281,13 @@ static void _gic_mask_irq(struct irq_data *d, bool do_mask)
static void gic_mask_remote(void *info)
{
struct irq_data *d = (struct irq_data *)info;
+
_gic_mask_irq(d, 1);
}
static void gic_unmask_remote(void *info)
{
struct irq_data *d = (struct irq_data *)info;
+
_gic_mask_irq(d, 0);
}
@@ -401,6 +405,7 @@ static int _gic_set_type(struct irq_data *d, unsigned int type)
static void gic_set_type_remote(void *info)
{
struct gic_rpc_data *rpc = (struct gic_rpc_data *)info;
+
_gic_set_type(rpc->d, rpc->type);
}
@@ -442,13 +447,12 @@ static int gic_retrigger(struct irq_data *d)
}
static int _gic_set_affinity(struct irq_data *d,
- const struct cpumask *mask_val,
- bool do_clear)
+ unsigned int cpu,
+ bool do_clear)
{
void __iomem *reg = gic_dist_base(d) + GIC_DIST_TARGET +
(gic_irq(d) & ~3);
unsigned int shift = (gic_irq(d) % 4) * 8;
- unsigned int cpu = cpumask_any_and(mask_val, cpu_online_mask);
u32 val, mask, bit;
u32 enable_mask, enable_offset;
@@ -489,12 +493,16 @@ static int _gic_set_affinity(struct irq_data *d,
static void gic_set_affinity_remote(void *info)
{
struct gic_rpc_data *rpc = (struct gic_rpc_data *)info;
- _gic_set_affinity(rpc->d, rpc->mask_val, false);
+
+ _gic_set_affinity(rpc->d, rpc->cpu, false);
+
}
static void gic_clr_affinity_remote(void *info)
{
struct gic_rpc_data *rpc = (struct gic_rpc_data *)info;
- _gic_set_affinity(rpc->d, rpc->mask_val, true);
+
+ _gic_set_affinity(rpc->d, rpc->oldcpu, true);
+
}
static bool on_same_cluster(u32 pcpu1, u32 pcpu2)
@@ -540,7 +548,7 @@ static int gic_set_affinity(struct irq_data *d,
BUG_ON(!irqs_disabled());
if (cpu >= nr_cpu_ids)
- return -EINVAL;
+ return -EINVAL;
if (irqid >= MAX_GIC_INTERRUPTS)
return -EINVAL;
@@ -550,9 +558,9 @@ static int gic_set_affinity(struct irq_data *d,
return IRQ_SET_MASK_OK;
/*
- * If the new IRQ affinity is the same as current, then
- * there's no need to update anything.
- */
+ * If the new IRQ affinity is the same as current, then
+ * there's no need to update anything.
+ */
if (cpu_logical_map(cpu) == irq_cpuid[irqid])
return IRQ_SET_MASK_OK;
@@ -562,10 +570,9 @@ static int gic_set_affinity(struct irq_data *d,
* affinity directly. Otherwise, use the RPC mechanism.
*/
if (on_same_cluster(cpu_logical_map(cpu), pcpu))
- _gic_set_affinity(d, mask_val, false);
+ _gic_set_affinity(d, cpu_logical_map(cpu), false);
else{
- ret = exec_remote_set_affinity(false, cpu, d, mask_val,
- force);
+ ret = exec_remote_set_affinity(false, cpu_logical_map(cpu), d, mask_val, force);
if (ret != IRQ_SET_MASK_OK)
return ret;
@@ -583,19 +590,19 @@ static int gic_set_affinity(struct irq_data *d,
* the cpu we're currently running on, clear the IRQ affinity
* directly. Otherwise, use RPC mechanism.
*/
- if (on_same_cluster(irq_cpuid[irqid], pcpu))
- _gic_set_affinity(d, mask_val, true);
- else
+ if (on_same_cluster(irq_cpuid[irqid], pcpu)) {
+ _gic_set_affinity(d, irq_cpuid[irqid], true);
+ }
+ else {
ret = exec_remote_set_affinity(true,
- get_logical_index(irq_cpuid[irqid]), d,
- mask_val, force);
+ get_logical_index(irq_cpuid[irqid]), d, mask_val, force);
+ }
if (ret != IRQ_SET_MASK_OK) {
/* Need to back out the set operation */
if (on_same_cluster(cpu_logical_map(cpu), pcpu))
- _gic_set_affinity(d, mask_val, true);
+ _gic_set_affinity(d, irq_cpuid[irqid], true);
else
- exec_remote_set_affinity(true, cpu, d,
- mask_val, force);
+ exec_remote_set_affinity(true, cpu, d, mask_val, force);
return ret;
}
--
1.7.9.5
More information about the linux-yocto
mailing list