diff options
author | Christopher Bostic <cbostic@linux.vnet.ibm.com> | 2017-03-09 22:12:39 +0300 |
---|---|---|
committer | Joel Stanley <joel@jms.id.au> | 2017-03-10 03:07:41 +0300 |
commit | ec62e5e4b9bb4f4e9df718fa7aa4d452fa906e1e (patch) | |
tree | 4d0506cad32c540e82c5205c1a6f4d3bc733ec94 | |
parent | e97a91f178e55719b08d48af7f592b18cfd4da91 (diff) | |
download | linux-ec62e5e4b9bb4f4e9df718fa7aa4d452fa906e1e.tar.xz |
drivers/fsi: Free up allocated resources on fsi-master unbind
In order to allow repeated bind/unbind operations on fsi-master
the scan file created on bind must be removed. Also check for
valid pointers during unregister which is the path taken during
unbind.
Signed-off-by: Christopher Bostic <cbostic@linux.vnet.ibm.com>
Signed-off-by: Joel Stanley <joel@jms.id.au>
-rw-r--r-- | drivers/fsi/fsi-core.c | 8 | ||||
-rw-r--r-- | drivers/fsi/fsi-master-gpio.c | 1 |
2 files changed, 5 insertions, 4 deletions
diff --git a/drivers/fsi/fsi-core.c b/drivers/fsi/fsi-core.c index b3b245a02257..3d382e6e4ecc 100644 --- a/drivers/fsi/fsi-core.c +++ b/drivers/fsi/fsi-core.c @@ -868,11 +868,11 @@ EXPORT_SYMBOL_GPL(fsi_master_register); void fsi_master_unregister(struct fsi_master *master) { - if (master->idx >= 0) { - ida_simple_remove(&master_ida, master->idx); - master->idx = -1; - } + if (!master || !master->dev || master->idx < 0) + return; + ida_simple_remove(&master_ida, master->idx); + master->idx = -1; device_remove_file(master->dev, &dev_attr_fsi_ipoll_period); fsi_master_unscan(master); put_device(master->dev); diff --git a/drivers/fsi/fsi-master-gpio.c b/drivers/fsi/fsi-master-gpio.c index c92384648036..e3431c49a12b 100644 --- a/drivers/fsi/fsi-master-gpio.c +++ b/drivers/fsi/fsi-master-gpio.c @@ -576,6 +576,7 @@ static int fsi_master_gpio_remove(struct platform_device *pdev) devm_gpiod_put(&pdev->dev, master->gpio_mux); } fsi_master_unregister(&master->master); + device_remove_file(&pdev->dev, &dev_attr_scan); return 0; } |