Commit fd15594b authored by Charles Keepax's avatar Charles Keepax Committed by Vinod Koul
Browse files

soundwire: bus: Fix race on the creation of the IRQ domain



The SoundWire IRQ domain needs to be created before any slaves are added
to the bus, such that the domain is always available when needed. Move
the call to sdw_irq_create() before the calls to sdw_acpi_find_slaves()
and sdw_of_find_slaves().

Fixes: 12a95123 ("soundwire: bus: Allow SoundWire peripherals to register IRQ handlers")
Signed-off-by: default avatarCharles Keepax <ckeepax@opensource.cirrus.com>
Link: https://lore.kernel.org/r/20250409122239.1396489-1-ckeepax@opensource.cirrus.com


Signed-off-by: default avatarVinod Koul <vkoul@kernel.org>
parent 0af2f6be
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -122,6 +122,10 @@ int sdw_bus_master_add(struct sdw_bus *bus, struct device *parent,
	set_bit(SDW_GROUP13_DEV_NUM, bus->assigned);
	set_bit(SDW_MASTER_DEV_NUM, bus->assigned);

	ret = sdw_irq_create(bus, fwnode);
	if (ret)
		return ret;

	/*
	 * SDW is an enumerable bus, but devices can be powered off. So,
	 * they won't be able to report as present.
@@ -138,6 +142,7 @@ int sdw_bus_master_add(struct sdw_bus *bus, struct device *parent,

	if (ret < 0) {
		dev_err(bus->dev, "Finding slaves failed:%d\n", ret);
		sdw_irq_delete(bus);
		return ret;
	}

@@ -156,10 +161,6 @@ int sdw_bus_master_add(struct sdw_bus *bus, struct device *parent,
	bus->params.curr_bank = SDW_BANK0;
	bus->params.next_bank = SDW_BANK1;

	ret = sdw_irq_create(bus, fwnode);
	if (ret)
		return ret;

	return 0;
}
EXPORT_SYMBOL(sdw_bus_master_add);