• Jarkko Nikula's avatar
    spi: Fix unregistration of controller with fixed SPI bus number · 613bd1ea
    Jarkko Nikula authored
    Commit 9b61e302 (spi: Pick spi bus number from Linux idr or spi alias)
    ceased to unregister SPI buses with fixed bus numbers. Moreover this is
    visible only if CONFIG_SPI_DEBUG=y is set or when trying to re-register
    the same SPI controller.
    
    rmmod spi_pxa2xx_platform (with CONFIG_SPI_DEBUG=y):
    [   26.788362] spi_master spi1: attempting to delete unregistered controller [spi1]
    
    modprobe spi_pxa2xx_platform:
    [   37.883137] sysfs: cannot create duplicate filename '/devices/pci0000:00/0000:00:19.0/pxa2xx-spi.12/spi_master/spi1'
    [   37.894984] CPU: 1 PID: 1467 Comm: modprobe Not tainted 4.16.0-rc4+ #21
    [   37.902384] Call Trace:
    ...
    [   38.122680] kobject_add_internal failed for spi1 with -EEXIST, don't try to register things with the same name in the same directory.
    [   38.136154] WARNING: CPU: 1 PID: 1467 at lib/kobject.c:238 kobject_add_internal+0x2a5/0x2f0
    ...
    [   38.513817] pxa2xx-spi pxa2xx-spi.12: problem registering spi master
    [   38.521036] pxa2xx-spi: probe of pxa2xx-spi.12 failed with error -17
    
    Fix this by not returning immediately from spi_unregister_controller() if
    idr_find() doesn't find controller with given ID/bus number. It finds
    only those controllers that were registered with dynamic SPI bus
    numbers. Only conditional cleanup between dynamic and fixed bus numbers
    is to remove allocated IDR.
    
    Fixes: 9b61e302 (spi: Pick spi bus number from Linux idr or spi alias)
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarJarkko Nikula <jarkko.nikula@linux.intel.com>
    Signed-off-by: default avatarMark Brown <broonie@kernel.org>
    613bd1ea
spi.c 94.4 KB