summaryrefslogtreecommitdiffstats
path: root/drivers/spi/spi.c
diff options
context:
space:
mode:
authorStephen Warren <swarren@nvidia.com>2013-11-21 16:11:15 -0700
committerMark Brown <broonie@linaro.org>2013-11-22 00:07:29 +0000
commit4b92894ee70c9110c083aa60b0663d357495864d (patch)
treed60cf2b146efe7c2d9135818fa4188dc42f55563 /drivers/spi/spi.c
parent82f85cf98f0eb60093e8b3d606711c2d49538478 (diff)
downloadop-kernel-dev-4b92894ee70c9110c083aa60b0663d357495864d.zip
op-kernel-dev-4b92894ee70c9110c083aa60b0663d357495864d.tar.gz
spi: core: invert success test in devm_spi_register_master
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: 666d5b4c742b ("spi: core: Add devm_spi_register_master()") Signed-off-by: Stephen Warren <swarren@nvidia.com> Signed-off-by: Mark Brown <broonie@linaro.org>
Diffstat (limited to 'drivers/spi/spi.c')
-rw-r--r--drivers/spi/spi.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
index 8d05acc..481e13f 100644
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
@@ -1390,7 +1390,7 @@ int devm_spi_register_master(struct device *dev, struct spi_master *master)
return -ENOMEM;
ret = spi_register_master(master);
- if (ret != 0) {
+ if (!ret) {
*ptr = master;
devres_add(dev, ptr);
} else {
OpenPOWER on IntegriCloud