Skip to content

Commit 4cf364c

Browse files
LeviYeoReumSuzuki K Poulose
authored andcommitted
coresight: change coresight_trace_id_map's lock type to raw_spinlock_t
coresight_trace_id_map->lock can be acquired while coresight devices' drvdata_lock. But the drvdata_lock can be raw_spinlock_t (i.e) coresight-etm4x. To address this, change type of coresight_trace_id_map->lock to raw_spinlock_t Signed-off-by: Yeoreum Yun <yeoreum.yun@arm.com> Reviewed-by: James Clark <james.clark@linaro.org> Reviewed-by: Mike Leach <mike.leach@linaro.org> Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com> Link: https://lore.kernel.org/r/20250306121110.1647948-4-yeoreum.yun@arm.com
1 parent 743c5a9 commit 4cf364c

File tree

3 files changed

+13
-13
lines changed

3 files changed

+13
-13
lines changed

drivers/hwtracing/coresight/coresight-core.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1296,7 +1296,7 @@ struct coresight_device *coresight_register(struct coresight_desc *desc)
12961296

12971297
if (csdev->type == CORESIGHT_DEV_TYPE_SINK ||
12981298
csdev->type == CORESIGHT_DEV_TYPE_LINKSINK) {
1299-
spin_lock_init(&csdev->perf_sink_id_map.lock);
1299+
raw_spin_lock_init(&csdev->perf_sink_id_map.lock);
13001300
csdev->perf_sink_id_map.cpu_map = alloc_percpu(atomic_t);
13011301
if (!csdev->perf_sink_id_map.cpu_map) {
13021302
kfree(csdev);

drivers/hwtracing/coresight/coresight-trace-id.c

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ enum trace_id_flags {
2222
static DEFINE_PER_CPU(atomic_t, id_map_default_cpu_ids) = ATOMIC_INIT(0);
2323
static struct coresight_trace_id_map id_map_default = {
2424
.cpu_map = &id_map_default_cpu_ids,
25-
.lock = __SPIN_LOCK_UNLOCKED(id_map_default.lock)
25+
.lock = __RAW_SPIN_LOCK_UNLOCKED(id_map_default.lock)
2626
};
2727

2828
/* #define TRACE_ID_DEBUG 1 */
@@ -131,11 +131,11 @@ static void coresight_trace_id_release_all(struct coresight_trace_id_map *id_map
131131
unsigned long flags;
132132
int cpu;
133133

134-
spin_lock_irqsave(&id_map->lock, flags);
134+
raw_spin_lock_irqsave(&id_map->lock, flags);
135135
bitmap_zero(id_map->used_ids, CORESIGHT_TRACE_IDS_MAX);
136136
for_each_possible_cpu(cpu)
137137
atomic_set(per_cpu_ptr(id_map->cpu_map, cpu), 0);
138-
spin_unlock_irqrestore(&id_map->lock, flags);
138+
raw_spin_unlock_irqrestore(&id_map->lock, flags);
139139
DUMP_ID_MAP(id_map);
140140
}
141141

@@ -144,7 +144,7 @@ static int _coresight_trace_id_get_cpu_id(int cpu, struct coresight_trace_id_map
144144
unsigned long flags;
145145
int id;
146146

147-
spin_lock_irqsave(&id_map->lock, flags);
147+
raw_spin_lock_irqsave(&id_map->lock, flags);
148148

149149
/* check for existing allocation for this CPU */
150150
id = _coresight_trace_id_read_cpu_id(cpu, id_map);
@@ -171,7 +171,7 @@ static int _coresight_trace_id_get_cpu_id(int cpu, struct coresight_trace_id_map
171171
atomic_set(per_cpu_ptr(id_map->cpu_map, cpu), id);
172172

173173
get_cpu_id_out_unlock:
174-
spin_unlock_irqrestore(&id_map->lock, flags);
174+
raw_spin_unlock_irqrestore(&id_map->lock, flags);
175175

176176
DUMP_ID_CPU(cpu, id);
177177
DUMP_ID_MAP(id_map);
@@ -188,12 +188,12 @@ static void _coresight_trace_id_put_cpu_id(int cpu, struct coresight_trace_id_ma
188188
if (!id)
189189
return;
190190

191-
spin_lock_irqsave(&id_map->lock, flags);
191+
raw_spin_lock_irqsave(&id_map->lock, flags);
192192

193193
coresight_trace_id_free(id, id_map);
194194
atomic_set(per_cpu_ptr(id_map->cpu_map, cpu), 0);
195195

196-
spin_unlock_irqrestore(&id_map->lock, flags);
196+
raw_spin_unlock_irqrestore(&id_map->lock, flags);
197197
DUMP_ID_CPU(cpu, id);
198198
DUMP_ID_MAP(id_map);
199199
}
@@ -204,9 +204,9 @@ static int coresight_trace_id_map_get_system_id(struct coresight_trace_id_map *i
204204
unsigned long flags;
205205
int id;
206206

207-
spin_lock_irqsave(&id_map->lock, flags);
207+
raw_spin_lock_irqsave(&id_map->lock, flags);
208208
id = coresight_trace_id_alloc_new_id(id_map, preferred_id, traceid_flags);
209-
spin_unlock_irqrestore(&id_map->lock, flags);
209+
raw_spin_unlock_irqrestore(&id_map->lock, flags);
210210

211211
DUMP_ID(id);
212212
DUMP_ID_MAP(id_map);
@@ -217,9 +217,9 @@ static void coresight_trace_id_map_put_system_id(struct coresight_trace_id_map *
217217
{
218218
unsigned long flags;
219219

220-
spin_lock_irqsave(&id_map->lock, flags);
220+
raw_spin_lock_irqsave(&id_map->lock, flags);
221221
coresight_trace_id_free(id, id_map);
222-
spin_unlock_irqrestore(&id_map->lock, flags);
222+
raw_spin_unlock_irqrestore(&id_map->lock, flags);
223223

224224
DUMP_ID(id);
225225
DUMP_ID_MAP(id_map);

include/linux/coresight.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ struct coresight_trace_id_map {
239239
DECLARE_BITMAP(used_ids, CORESIGHT_TRACE_IDS_MAX);
240240
atomic_t __percpu *cpu_map;
241241
atomic_t perf_cs_etm_session_active;
242-
spinlock_t lock;
242+
raw_spinlock_t lock;
243243
};
244244

245245
/**

0 commit comments

Comments
 (0)