[linux-yocto] [PATCH 20/21] arch/arm/mach-axxia: changed affinity parameter to cpu
Cristian Bercaru
cristian.bercaru at windriver.com
Fri May 15 05:25:01 PDT 2015
From: John Jacques <john.jacques at intel.com>
Signed-off-by: John Jacques <john.jacques at intel.com>
---
arch/arm/mach-axxia/axxia-gic.c | 38 ++++++++++++++++++++++----------------
1 file changed, 22 insertions(+), 16 deletions(-)
diff --git a/arch/arm/mach-axxia/axxia-gic.c b/arch/arm/mach-axxia/axxia-gic.c
index d59c20a..f151916 100644
--- a/arch/arm/mach-axxia/axxia-gic.c
+++ b/arch/arm/mach-axxia/axxia-gic.c
@@ -186,12 +186,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);
}
@@ -273,11 +275,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);
}
@@ -395,6 +399,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);
}
@@ -436,13 +441,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;
@@ -483,12 +487,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)
@@ -556,10 +564,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;
@@ -577,19 +584,18 @@ 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