Commit c321a511 authored by Danilo Krummrich's avatar Danilo Krummrich
Browse files

devres: remove unnecessary unlocks in devres_release_group()



There is no need to call spin_unlock_irqrestore() in every conditional
block, as release_nodes() can safely be called with an empty list, in
case we hit the "if else" or "else" case.

We do not use a scoped_guard() here to not unnecessarily change the
indentation level.

Reviewed-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Link: https://patch.msgid.link/20260202235210.55176-8-dakr@kernel.org


Signed-off-by: default avatarDanilo Krummrich <dakr@kernel.org>
parent e19f3fed
Loading
Loading
Loading
Loading
+3 −6
Original line number Diff line number Diff line
@@ -712,7 +712,6 @@ int devres_release_group(struct device *dev, void *id)
	int cnt = 0;

	spin_lock_irqsave(&dev->devres_lock, flags);

	grp = find_group(dev, id);
	if (grp) {
		struct list_head *first = &grp->node[0].entry;
@@ -722,20 +721,18 @@ int devres_release_group(struct device *dev, void *id)
			end = grp->node[1].entry.next;

		cnt = remove_nodes(dev, first, end, &todo);
		spin_unlock_irqrestore(&dev->devres_lock, flags);

		release_nodes(dev, &todo);
	} else if (list_empty(&dev->devres_head)) {
		/*
		 * dev is probably dying via devres_release_all(): groups
		 * have already been removed and are on the process of
		 * being released - don't touch and don't warn.
		 */
		spin_unlock_irqrestore(&dev->devres_lock, flags);
	} else {
		WARN_ON(1);
		spin_unlock_irqrestore(&dev->devres_lock, flags);
	}
	spin_unlock_irqrestore(&dev->devres_lock, flags);

	release_nodes(dev, &todo);

	return cnt;
}