Re: [PATCH 2/2] soundwire: intel_auxdevice: Don't disable IRQs before removing children
From: Charles Keepax
Date: Tue Sep 15 2026 - 08:40:42 EST
On Tue, Sep 15, 2026 at 10:13:28AM +0100, Charles Keepax wrote:
> On Mon, Sep 14, 2026 at 08:27:23PM +0200, Pierre-Louis Bossart wrote:
> > On 9/11/26 18:19, Charles Keepax wrote:
> > Sorry, that sequence looks really weird to me.
> >
> > See the code in
> >
> > void sdw_bus_master_delete(struct sdw_bus *bus)
> > {
> > device_for_each_child(bus->dev, NULL, sdw_delete_slave);
> >
> > sdw_irq_delete(bus);
> >
> > sdw_master_device_del(bus);
> >
> > After doing all this, one would mask the interrupts on the host side with
> >
> > if (!bus->prop.hw_disabled)
> > sdw_cdns_enable_interrupt(cdns, false);
> >
> > but that host is long gone.
> >
> > Does this even work?
> >
> > The last sdw_cdns_enable_interrupt(cdns, false) looks either very racy
> > or useless, no?
>
> I mean it definitely works and fixes the problems on driver
> remove. I will check to see if the call is redundant at this
> stage, or if there are any potential dangers I am missing.
Hmm... ok so the call definitely isn't redundant nothing
else masks all the IRQs. However, I think you might be onto
something with the race, I think if we get a slave interrupt
in this window it could cause problems (queues cdns->work which
then uses things from the bus). I think we might need to export
cdns_enable_slave_interrupt() so we can separately disable the
slave interrupts whilst leaving the other interrupts functional.
Thanks,
Charles