• Stephen Warren's avatar
    spi: core: invert success test in devm_spi_register_master · 4b92894e
    Stephen Warren authored
    devres_add() should be called when the action to be undone succeeded,
    not when it failed. Fix the inverted test in devm_spi_register_master()
    which was doing the opposite.
    
    The user-visible issue without this fix is:
    insmod spi-tegra114.ko
      Assume there's an MTD device on that SPI bus, which creates /dev/mtd0.
    rmmod spi-tegra114
      Doesn't remove devices on the SPI bus.
    insmod spi-tegra114.ko
      Creates a duplicate SPI device which creates /dev/mtd1.
    hexdump -C /dev/mtd0
      That's the old device, which uses an SPI bus hosted by a non-existent
      module, which causes the oops below.
    
    Unable to handle kernel paging request at virtual address bf0017c0
    pgd = c0004000
    [bf0017c0] *pgd=ad51b811, *pte=00000000, *ppte=00000000
    Internal error: Oops: 80000007 [#1] PREEMPT SMP ARM
    ...
    PC is at 0xbf0017c0
    LR is at spi_pump_messages+0x15c/0x204
    pc : [<bf0017c0>] lr : [<c02f0af8>] psr: 60000113
    ...
    
    Fixes: 666d5b4c ("spi: core: Add devm_spi_register_master()")
    Signed-off-by: default avatarStephen Warren <swarren@nvidia.com>
    Signed-off-by: default avatarMark Brown <broonie@linaro.org>
    4b92894e
spi.c 54.5 KB