Skip to content

Commit e19f3fe

Browse files
author
Danilo Krummrich
committed
devres: use guard(spinlock_irqsave) where applicable
Use guard(spinlock_irqsave)(&dev->devres_lock) where it improves the code. Some places still use manual spin_lock_irqsave() and spin_unlock() as changing it to use a scoped_guard() would result in unnecessary churn. Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Link: https://patch.msgid.link/20260202235210.55176-7-dakr@kernel.org Signed-off-by: Danilo Krummrich <dakr@kernel.org>
1 parent 55e329d commit e19f3fe

1 file changed

Lines changed: 6 additions & 17 deletions

File tree

drivers/base/devres.c

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -228,12 +228,11 @@ void devres_for_each_res(struct device *dev, dr_release_t release,
228228
{
229229
struct devres_node *node;
230230
struct devres_node *tmp;
231-
unsigned long flags;
232231

233232
if (!fn)
234233
return;
235234

236-
spin_lock_irqsave(&dev->devres_lock, flags);
235+
guard(spinlock_irqsave)(&dev->devres_lock);
237236
list_for_each_entry_safe_reverse(node, tmp,
238237
&dev->devres_head, entry) {
239238
struct devres *dr = container_of(node, struct devres, node);
@@ -246,7 +245,6 @@ void devres_for_each_res(struct device *dev, dr_release_t release,
246245
continue;
247246
fn(dev, dr->data, data);
248247
}
249-
spin_unlock_irqrestore(&dev->devres_lock, flags);
250248
}
251249
EXPORT_SYMBOL_GPL(devres_for_each_res);
252250

@@ -334,14 +332,12 @@ void *devres_find(struct device *dev, dr_release_t release,
334332
dr_match_t match, void *match_data)
335333
{
336334
struct devres *dr;
337-
unsigned long flags;
338335

339-
spin_lock_irqsave(&dev->devres_lock, flags);
336+
guard(spinlock_irqsave)(&dev->devres_lock);
340337
dr = find_dr(dev, release, match, match_data);
341-
spin_unlock_irqrestore(&dev->devres_lock, flags);
342-
343338
if (dr)
344339
return dr->data;
340+
345341
return NULL;
346342
}
347343
EXPORT_SYMBOL_GPL(devres_find);
@@ -400,18 +396,15 @@ void *devres_remove(struct device *dev, dr_release_t release,
400396
dr_match_t match, void *match_data)
401397
{
402398
struct devres *dr;
403-
unsigned long flags;
404399

405-
spin_lock_irqsave(&dev->devres_lock, flags);
400+
guard(spinlock_irqsave)(&dev->devres_lock);
406401
dr = find_dr(dev, release, match, match_data);
407402
if (dr) {
408403
list_del_init(&dr->node.entry);
409404
devres_log(dev, &dr->node, "REM");
405+
return dr->data;
410406
}
411-
spin_unlock_irqrestore(&dev->devres_lock, flags);
412407

413-
if (dr)
414-
return dr->data;
415408
return NULL;
416409
}
417410
EXPORT_SYMBOL_GPL(devres_remove);
@@ -659,17 +652,13 @@ static struct devres_group *find_group(struct device *dev, void *id)
659652
void devres_close_group(struct device *dev, void *id)
660653
{
661654
struct devres_group *grp;
662-
unsigned long flags;
663-
664-
spin_lock_irqsave(&dev->devres_lock, flags);
665655

656+
guard(spinlock_irqsave)(&dev->devres_lock);
666657
grp = find_group(dev, id);
667658
if (grp)
668659
add_dr(dev, &grp->node[1]);
669660
else
670661
WARN_ON(1);
671-
672-
spin_unlock_irqrestore(&dev->devres_lock, flags);
673662
}
674663
EXPORT_SYMBOL_GPL(devres_close_group);
675664

0 commit comments

Comments
 (0)