Skip to content

Commit 531558b

Browse files
committed
Merge branch 'spi-5.15' into spi-5.16
2 parents d9c55c9 + 16a8e2f commit 531558b

File tree

3 files changed

+21
-16
lines changed

3 files changed

+21
-16
lines changed

drivers/spi/spi-mux.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,13 @@ static int spi_mux_probe(struct spi_device *spi)
137137
priv = spi_controller_get_devdata(ctlr);
138138
priv->spi = spi;
139139

140+
/*
141+
* Increase lockdep class as these lock are taken while the parent bus
142+
* already holds their instance's lock.
143+
*/
144+
lockdep_set_subclass(&ctlr->io_mutex, 1);
145+
lockdep_set_subclass(&ctlr->add_lock, 1);
146+
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),

drivers/spi/spi.c

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -477,12 +477,6 @@ static LIST_HEAD(spi_controller_list);
477477
*/
478478
static DEFINE_MUTEX(board_lock);
479479

480-
/*
481-
* Prevents addition of devices with same chip select and
482-
* addition of devices below an unregistering controller.
483-
*/
484-
static DEFINE_MUTEX(spi_add_lock);
485-
486480
/**
487481
* spi_alloc_device - Allocate a new SPI device
488482
* @ctlr: Controller to which device is connected
@@ -635,9 +629,9 @@ static int spi_add_device(struct spi_device *spi)
635629
/* Set the bus ID string */
636630
spi_dev_set_name(spi);
637631

638-
mutex_lock(&spi_add_lock);
632+
mutex_lock(&ctlr->add_lock);
639633
status = __spi_add_device(spi);
640-
mutex_unlock(&spi_add_lock);
634+
mutex_unlock(&ctlr->add_lock);
641635
return status;
642636
}
643637

@@ -656,7 +650,7 @@ static int spi_add_device_locked(struct spi_device *spi)
656650
/* Set the bus ID string */
657651
spi_dev_set_name(spi);
658652

659-
WARN_ON(!mutex_is_locked(&spi_add_lock));
653+
WARN_ON(!mutex_is_locked(&ctlr->add_lock));
660654
return __spi_add_device(spi);
661655
}
662656

@@ -2632,6 +2626,12 @@ struct spi_controller *__spi_alloc_controller(struct device *dev,
26322626
return NULL;
26332627

26342628
device_initialize(&ctlr->dev);
2629+
INIT_LIST_HEAD(&ctlr->queue);
2630+
spin_lock_init(&ctlr->queue_lock);
2631+
spin_lock_init(&ctlr->bus_lock_spinlock);
2632+
mutex_init(&ctlr->bus_lock_mutex);
2633+
mutex_init(&ctlr->io_mutex);
2634+
mutex_init(&ctlr->add_lock);
26352635
ctlr->bus_num = -1;
26362636
ctlr->num_chipselect = 1;
26372637
ctlr->slave = slave;
@@ -2904,11 +2904,6 @@ int spi_register_controller(struct spi_controller *ctlr)
29042904
return id;
29052905
ctlr->bus_num = id;
29062906
}
2907-
INIT_LIST_HEAD(&ctlr->queue);
2908-
spin_lock_init(&ctlr->queue_lock);
2909-
spin_lock_init(&ctlr->bus_lock_spinlock);
2910-
mutex_init(&ctlr->bus_lock_mutex);
2911-
mutex_init(&ctlr->io_mutex);
29122907
ctlr->bus_lock_flag = 0;
29132908
init_completion(&ctlr->xfer_completion);
29142909
if (!ctlr->max_dma_len)
@@ -3045,7 +3040,7 @@ void spi_unregister_controller(struct spi_controller *ctlr)
30453040

30463041
/* Prevent addition of new devices, unregister existing ones */
30473042
if (IS_ENABLED(CONFIG_SPI_DYNAMIC))
3048-
mutex_lock(&spi_add_lock);
3043+
mutex_lock(&ctlr->add_lock);
30493044

30503045
device_for_each_child(&ctlr->dev, NULL, __unregister);
30513046

@@ -3076,7 +3071,7 @@ void spi_unregister_controller(struct spi_controller *ctlr)
30763071
mutex_unlock(&board_lock);
30773072

30783073
if (IS_ENABLED(CONFIG_SPI_DYNAMIC))
3079-
mutex_unlock(&spi_add_lock);
3074+
mutex_unlock(&ctlr->add_lock);
30803075
}
30813076
EXPORT_SYMBOL_GPL(spi_unregister_controller);
30823077

include/linux/spi/spi.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -527,6 +527,9 @@ struct spi_controller {
527527
/* I/O mutex */
528528
struct mutex io_mutex;
529529

530+
/* Used to avoid adding the same CS twice */
531+
struct mutex add_lock;
532+
530533
/* lock and mutex for SPI bus locking */
531534
spinlock_t bus_lock_spinlock;
532535
struct mutex bus_lock_mutex;

0 commit comments

Comments
 (0)