diff mbox

[linux,dev-4.7,v2] drivers/fsi: Free up allocated resources on fsi-master unbind

Message ID 20170309191239.77302-1-cbostic@linux.vnet.ibm.com
State Accepted, archived
Headers show

Commit Message

Christopher Bostic March 9, 2017, 7:12 p.m. UTC
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>
---
v2 - Remove devm_kfree in gpio remove
   - Rebase on e97a91f178e55719b08d48af7f592b18cfd4da91
---
 drivers/fsi/fsi-core.c        | 8 ++++----
 drivers/fsi/fsi-master-gpio.c | 1 +
 2 files changed, 5 insertions(+), 4 deletions(-)

Comments

Joel Stanley March 10, 2017, 12:07 a.m. UTC | #1
On Fri, Mar 10, 2017 at 5:42 AM, Christopher Bostic
<cbostic@linux.vnet.ibm.com> wrote:
> 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>
> ---
> v2 - Remove devm_kfree in gpio remove
>    - Rebase on e97a91f178e55719b08d48af7f592b18cfd4da91

Applied to dev-4.7.

Cheers,

Joel

> ---
>  drivers/fsi/fsi-core.c        | 8 ++++----
>  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 b3b245a..3d382e6 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 c923846..e3431c4 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;
>  }
> --
> 1.8.2.2
>
diff mbox

Patch

diff --git a/drivers/fsi/fsi-core.c b/drivers/fsi/fsi-core.c
index b3b245a..3d382e6 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 c923846..e3431c4 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;
 }