···137137 priv = spi_controller_get_devdata(ctlr);138138 priv->spi = spi;139139140140+ /*141141+ * Increase lockdep class as these lock are taken while the parent bus142142+ * already holds their instance's lock.143143+ */144144+ lockdep_set_subclass(&ctlr->io_mutex, 1);145145+ lockdep_set_subclass(&ctlr->add_lock, 1);146146+140147 priv->mux = devm_mux_control_get(&spi->dev, NULL);141148 if (IS_ERR(priv->mux)) {142149 ret = dev_err_probe(&spi->dev, PTR_ERR(priv->mux),
+11-16
drivers/spi/spi.c
···477477 */478478static DEFINE_MUTEX(board_lock);479479480480-/*481481- * Prevents addition of devices with same chip select and482482- * addition of devices below an unregistering controller.483483- */484484-static DEFINE_MUTEX(spi_add_lock);485485-486480/**487481 * spi_alloc_device - Allocate a new SPI device488482 * @ctlr: Controller to which device is connected···629635 /* Set the bus ID string */630636 spi_dev_set_name(spi);631637632632- mutex_lock(&spi_add_lock);638638+ mutex_lock(&ctlr->add_lock);633639 status = __spi_add_device(spi);634634- mutex_unlock(&spi_add_lock);640640+ mutex_unlock(&ctlr->add_lock);635641 return status;636642}637643···650656 /* Set the bus ID string */651657 spi_dev_set_name(spi);652658653653- WARN_ON(!mutex_is_locked(&spi_add_lock));659659+ WARN_ON(!mutex_is_locked(&ctlr->add_lock));654660 return __spi_add_device(spi);655661}656662···26262632 return NULL;2627263326282634 device_initialize(&ctlr->dev);26352635+ INIT_LIST_HEAD(&ctlr->queue);26362636+ spin_lock_init(&ctlr->queue_lock);26372637+ spin_lock_init(&ctlr->bus_lock_spinlock);26382638+ mutex_init(&ctlr->bus_lock_mutex);26392639+ mutex_init(&ctlr->io_mutex);26402640+ mutex_init(&ctlr->add_lock);26292641 ctlr->bus_num = -1;26302642 ctlr->num_chipselect = 1;26312643 ctlr->slave = slave;···29042904 return id;29052905 ctlr->bus_num = id;29062906 }29072907- INIT_LIST_HEAD(&ctlr->queue);29082908- spin_lock_init(&ctlr->queue_lock);29092909- spin_lock_init(&ctlr->bus_lock_spinlock);29102910- mutex_init(&ctlr->bus_lock_mutex);29112911- mutex_init(&ctlr->io_mutex);29122907 ctlr->bus_lock_flag = 0;29132908 init_completion(&ctlr->xfer_completion);29142909 if (!ctlr->max_dma_len)···3040304530413046 /* Prevent addition of new devices, unregister existing ones */30423047 if (IS_ENABLED(CONFIG_SPI_DYNAMIC))30433043- mutex_lock(&spi_add_lock);30483048+ mutex_lock(&ctlr->add_lock);3044304930453050 device_for_each_child(&ctlr->dev, NULL, __unregister);30463051···30713076 mutex_unlock(&board_lock);3072307730733078 if (IS_ENABLED(CONFIG_SPI_DYNAMIC))30743074- mutex_unlock(&spi_add_lock);30793079+ mutex_unlock(&ctlr->add_lock);30753080}30763081EXPORT_SYMBOL_GPL(spi_unregister_controller);30773082
+3
include/linux/spi/spi.h
···527527 /* I/O mutex */528528 struct mutex io_mutex;529529530530+ /* Used to avoid adding the same CS twice */531531+ struct mutex add_lock;532532+530533 /* lock and mutex for SPI bus locking */531534 spinlock_t bus_lock_spinlock;532535 struct mutex bus_lock_mutex;