• Mark Brown's avatar
    spi: Fix deadlock when adding SPI controllers on SPI buses · 6098475d
    Mark Brown authored
    Currently we have a global spi_add_lock which we take when adding new
    devices so that we can check that we're not trying to reuse a chip
    select that's already controlled.  This means that if the SPI device is
    itself a SPI controller and triggers the instantiation of further SPI
    devices we trigger a deadlock as we try to register and instantiate
    those devices while in the process of doing so for the parent controller
    and hence already holding the global spi_add_lock.  Since we only care
    about concurrency within a single SPI bus move the lock to be per
    controller, avoiding the deadlock.
    
    This can be easily triggered in the case of spi-mux.
    Reported-by: default avatarUwe Kleine-König <u.kleine-koenig@pengutronix.de>
    Signed-off-by: default avatarMark Brown <broonie@kernel.org>
    6098475d
spi.c 115 KB