Unverified Commit 39191ce5 authored by Johan Hovold's avatar Johan Hovold Committed by Mark Brown
Browse files

ASoc: qcom: q6afe: fix bad guard conversion



A recent spinlock guard conversion used the wrong guard so that
interrupts are no longer disabled while holding the port list lock.

Based on a cursory look this appears to be safe currently, but it could
cause a deadlock if one of these helpers are ever called in interrupt
context.

Fixes: 4b1edbb0 ("ASoC: qcom: q6afe: Use guard() for spin locks")
Cc: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>
Signed-off-by: default avatarJohan Hovold <johan@kernel.org>
Reviewed-by: default avatarSrinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>
Link: https://patch.msgid.link/20251203105542.24765-2-johan@kernel.org


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 57d508b5
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -947,7 +947,7 @@ static struct q6afe_port *q6afe_find_port(struct q6afe *afe, int token)
	struct q6afe_port *p;
	struct q6afe_port *ret = NULL;

	guard(spinlock)(&afe->port_list_lock);
	guard(spinlock_irqsave)(&afe->port_list_lock);
	list_for_each_entry(p, &afe->port_list, node)
		if (p->token == token) {
			ret = p;
@@ -1807,7 +1807,7 @@ struct q6afe_port *q6afe_port_get_from_id(struct device *dev, int id)
	port->cfg_type = cfg_type;
	kref_init(&port->refcount);

	guard(spinlock)(&afe->port_list_lock);
	guard(spinlock_irqsave)(&afe->port_list_lock);
	list_add_tail(&port->node, &afe->port_list);

	return port;