Skip to content

Commit 8df0387

Browse files
Sebastian Andrzej SiewiorKAGA-KOKO
authored andcommitted
bus/arm-ccn: Use cpu-hp's multi instance support instead custom list
Signed-off-by: Sebastian Andrzej Siewior <[email protected]> Cc: Mark Rutland <[email protected]> Cc: Pawel Moll <[email protected]> Cc: Arnd Bergmann <[email protected]> Cc: Suzuki K Poulose <[email protected]> Cc: Peter Zijlstra <[email protected]> Cc: Will Deacon <[email protected]> Cc: [email protected] Link: http://lkml.kernel.org/r/[email protected] Signed-off-by: Thomas Gleixner <[email protected]>
1 parent b230f0d commit 8df0387

File tree

1 file changed

+21
-33
lines changed

1 file changed

+21
-33
lines changed

drivers/bus/arm-ccn.c

Lines changed: 21 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ struct arm_ccn_dt {
167167
struct hrtimer hrtimer;
168168

169169
cpumask_t cpu;
170-
struct list_head entry;
170+
struct hlist_node node;
171171

172172
struct pmu pmu;
173173
};
@@ -189,9 +189,6 @@ struct arm_ccn {
189189
struct arm_ccn_dt dt;
190190
};
191191

192-
static DEFINE_MUTEX(arm_ccn_mutex);
193-
static LIST_HEAD(arm_ccn_list);
194-
195192
static int arm_ccn_node_to_xp(int node)
196193
{
197194
return node / CCN_NUM_XP_PORTS;
@@ -1173,30 +1170,24 @@ static enum hrtimer_restart arm_ccn_pmu_timer_handler(struct hrtimer *hrtimer)
11731170
}
11741171

11751172

1176-
static int arm_ccn_pmu_offline_cpu(unsigned int cpu)
1173+
static int arm_ccn_pmu_offline_cpu(unsigned int cpu, struct hlist_node *node)
11771174
{
1178-
struct arm_ccn_dt *dt;
1175+
struct arm_ccn_dt *dt = hlist_entry_safe(node, struct arm_ccn_dt, node);
1176+
struct arm_ccn *ccn = container_of(dt, struct arm_ccn, dt);
11791177
unsigned int target;
11801178

1181-
mutex_lock(&arm_ccn_mutex);
1182-
list_for_each_entry(dt, &arm_ccn_list, entry) {
1183-
struct arm_ccn *ccn = container_of(dt, struct arm_ccn, dt);
1184-
1185-
if (!cpumask_test_and_clear_cpu(cpu, &dt->cpu))
1186-
continue;
1187-
target = cpumask_any_but(cpu_online_mask, cpu);
1188-
if (target >= nr_cpu_ids)
1189-
continue;
1190-
perf_pmu_migrate_context(&dt->pmu, cpu, target);
1191-
cpumask_set_cpu(target, &dt->cpu);
1192-
if (ccn->irq)
1193-
WARN_ON(irq_set_affinity_hint(ccn->irq, &dt->cpu) != 0);
1194-
}
1195-
mutex_unlock(&arm_ccn_mutex);
1179+
if (!cpumask_test_and_clear_cpu(cpu, &dt->cpu))
1180+
return 0;
1181+
target = cpumask_any_but(cpu_online_mask, cpu);
1182+
if (target >= nr_cpu_ids)
1183+
return 0;
1184+
perf_pmu_migrate_context(&dt->pmu, cpu, target);
1185+
cpumask_set_cpu(target, &dt->cpu);
1186+
if (ccn->irq)
1187+
WARN_ON(irq_set_affinity_hint(ccn->irq, &dt->cpu) != 0);
11961188
return 0;
11971189
}
11981190

1199-
12001191
static DEFINE_IDA(arm_ccn_pmu_ida);
12011192

12021193
static int arm_ccn_pmu_init(struct arm_ccn *ccn)
@@ -1278,9 +1269,8 @@ static int arm_ccn_pmu_init(struct arm_ccn *ccn)
12781269
if (err)
12791270
goto error_pmu_register;
12801271

1281-
mutex_lock(&arm_ccn_mutex);
1282-
list_add(&ccn->dt.entry, &arm_ccn_list);
1283-
mutex_unlock(&arm_ccn_mutex);
1272+
cpuhp_state_add_instance_nocalls(CPUHP_AP_PERF_ARM_CCN_ONLINE,
1273+
&ccn->dt.node);
12841274
return 0;
12851275

12861276
error_pmu_register:
@@ -1296,10 +1286,8 @@ static void arm_ccn_pmu_cleanup(struct arm_ccn *ccn)
12961286
{
12971287
int i;
12981288

1299-
mutex_lock(&arm_ccn_mutex);
1300-
list_del(&ccn->dt.entry);
1301-
mutex_unlock(&arm_ccn_mutex);
1302-
1289+
cpuhp_state_remove_instance_nocalls(CPUHP_AP_PERF_ARM_CCN_ONLINE,
1290+
&ccn->dt.node);
13031291
if (ccn->irq)
13041292
irq_set_affinity_hint(ccn->irq, NULL);
13051293
for (i = 0; i < ccn->num_xps; i++)
@@ -1527,9 +1515,9 @@ static int __init arm_ccn_init(void)
15271515
{
15281516
int i, ret;
15291517

1530-
ret = cpuhp_setup_state_nocalls(CPUHP_AP_PERF_ARM_CCN_ONLINE,
1531-
"AP_PERF_ARM_CCN_ONLINE", NULL,
1532-
arm_ccn_pmu_offline_cpu);
1518+
ret = cpuhp_setup_state_multi(CPUHP_AP_PERF_ARM_CCN_ONLINE,
1519+
"AP_PERF_ARM_CCN_ONLINE", NULL,
1520+
arm_ccn_pmu_offline_cpu);
15331521
if (ret)
15341522
return ret;
15351523

@@ -1541,7 +1529,7 @@ static int __init arm_ccn_init(void)
15411529

15421530
static void __exit arm_ccn_exit(void)
15431531
{
1544-
cpuhp_remove_state_nocalls(CPUHP_AP_PERF_ARM_CCN_ONLINE);
1532+
cpuhp_remove_multi_state(CPUHP_AP_PERF_ARM_CCN_ONLINE);
15451533
platform_driver_unregister(&arm_ccn_driver);
15461534
}
15471535

0 commit comments

Comments
 (0)