staging: most: hdm-dim2: Use devm_* functions
Subsystems (2)
cover staging: most: hdm-dim2: Use devm_* functions
Devm_ functions allocate memory that is released when a driver detaches. Replace kzalloc, ioremap and request_irq with their devm_* counterparts in the probe function of a platform device which were originally freed in the remove function.
Also, unnecessary labels have been removed, an unnecessary platform_set_drvdata has been removed as well as switching from pr_err to dev_err.
Amitoj Kaur Chawla (4):
staging: most: hdm-dim2: Replace kzalloc with devm_kzalloc
staging: most: hdm-dim2: Switch to devm_ioremap_resource()
staging: most: hdm-dim2: Replace request_irq with devm_request_irq
staging: most: hdm-dim2: Replace pr_err with dev_err
drivers/staging/most/hdm-dim2/dim2_hdm.c | 58 +++++++------------------------- 1 file changed, 12 insertions(+), 46 deletions(-)
Signature · 1 line
1.9.1
PATCH 1/4 staging: most: hdm-dim2: Replace kzalloc with devm_kzalloc
Devm_ functions allocate memory that is released when a driver detaches. Replace kzalloc with devm_kzalloc and remove corresponding kfrees from probe and remove functions of a platform
device.
Also, an unnecessary label has been removed.
--- drivers/staging/most/hdm-dim2/dim2_hdm.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-)
drivers/staging/most/hdm-dim2/dim2_hdm.c +3 -6
@@ -736,7 +736,7 @@ static int dim2_probe(struct platform_device *pdev)int ret, i;struct kobject *kobj; - dev =kzalloc (sizeof (*dev),GFP_KERNEL ); + dev =devm_kzalloc (&pdev->dev,sizeof (*dev),GFP_KERNEL );if (!dev)return -ENOMEM ;
@@ -750,13 +750,13 @@ static int dim2_probe(struct platform_device *pdev)if (!res) {pr_err ("no memory region defined\n" ); ret = -ENOENT ; - goto err_free_dev; +return ret; }if (!request_mem_region (res->start,resource_size (res), pdev->name)) {pr_err ("failed to request mem region\n" ); ret = -EBUSY ; - goto err_free_dev; +return ret; } dev->io_base =ioremap (res->start,resource_size (res));
@@ -862,9 +862,7 @@ err_unmap_io:iounmap (dev->io_base); err_release_mem:release_mem_region (res->start,resource_size (res)); -err_free_dev:#endif -kfree (dev);return ret; }
@@ -897,7 +895,6 @@ static int dim2_remove(struct platform_device *pdev)iounmap (dev->io_base);release_mem_region (res->start,resource_size (res));#endif -kfree (dev);platform_set_drvdata (pdev,NULL );/*
Signature · 1 line
1.9.1
PATCH 2/4 staging: most: hdm-dim2: Switch to devm_ioremap_resource()
In reply to Amitoj Kaur ChawlaDevm_ functions allocate memory that is released when a driver detaches. Replace request_mem_region and ioremap with devm_ioremap_resource and remove corresponding freeing functions release_mem_region and iounmap from probe and remove functions of a platform device.
Also, an unnecessary platform_set_drvdata() has been removed since the driver core clears the driver data to NULL after device release or on probe failure. There is no need to manually clear the device driver data to NULL.
Lastly, unnecessary labels have been removed.
--- drivers/staging/most/hdm-dim2/dim2_hdm.c | 33 +++++--------------------------- 1 file changed, 5 insertions(+), 28 deletions(-)
drivers/staging/most/hdm-dim2/dim2_hdm.c +5 -28
@@ -747,29 +747,14 @@ static int dim2_probe(struct platform_device *pdev) test_dev = dev;#else res =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); -if (!res) { -pr_err ("no memory region defined\n" ); - ret = -ENOENT ; -return ret; - } - -if (!request_mem_region (res->start,resource_size (res), pdev->name)) { -pr_err ("failed to request mem region\n" ); - ret = -EBUSY ; -return ret; - } - - dev->io_base =ioremap (res->start,resource_size (res)); -if (!dev->io_base) { -pr_err ("failed to ioremap\n" ); - ret = -ENOMEM ; - goto err_release_mem; - } + dev->io_base =devm_ioremap_resource (&pdev->dev, res); +if (IS_ERR (dev->io_base)) +return PTR_ERR (dev->io_base); ret =platform_get_irq (pdev,0 );if (ret <0 ) {pr_err ("failed to get irq\n" ); - goto err_unmap_io; +return -ENODEV ; } dev->irq_ahb0 = ret;
@@ -777,7 +762,7 @@ static int dim2_probe(struct platform_device *pdev)if (ret) {pr_err ("failed to request IRQ: %d, err: %d\n" , dev->irq_ahb0, ret); - goto err_unmap_io; +return ret; }#endif init_waitqueue_head (&dev->netinfo_waitq);
@@ -858,10 +843,6 @@ err_stop_thread: err_free_irq:#if !defined(ENABLE_HDM_TEST )free_irq (dev->irq_ahb0, dev); -err_unmap_io: -iounmap (dev->io_base); -err_release_mem: -release_mem_region (res->start,resource_size (res));#endif return ret;
@@ -876,7 +857,6 @@ err_release_mem:static int dim2_remove (struct platform_device *pdev) {struct dim2_hdm *dev =platform_get_drvdata (pdev); -struct resource *res =platform_get_resource (pdev,IORESOURCE_MEM ,0 );struct dim2_platform_data *pdata = pdev->dev.platform_data;unsigned long flags;
@@ -892,10 +872,7 @@ static int dim2_remove(struct platform_device *pdev)kthread_stop (dev->netinfo_task);#if !defined(ENABLE_HDM_TEST )free_irq (dev->irq_ahb0, dev); -iounmap (dev->io_base); -release_mem_region (res->start,resource_size (res));#endif -platform_set_drvdata (pdev,NULL );/* * break link to local platform_device_id struct
Signature · 1 line
1.9.1
PATCH 3/4 staging: most: hdm-dim2: Replace request_irq with devm_request_irq
In reply to Amitoj Kaur ChawlaDevm_ functions allocate memory that is released when a driver detaches. Replace request_irq with devm_request_irq to get the interrupt for device which is automatically freed on exit. Remove corresponding free_irq from probe and remove functions of a platform device.
Also, remove an unnecessary label.
--- drivers/staging/most/hdm-dim2/dim2_hdm.c | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-)
drivers/staging/most/hdm-dim2/dim2_hdm.c +3 -11
@@ -758,7 +758,8 @@ static int dim2_probe(struct platform_device *pdev) } dev->irq_ahb0 = ret; - ret =request_irq (dev->irq_ahb0, dim2_ahb_isr,0 ,"mlb_ahb0" , dev); + ret =devm_request_irq (&pdev->dev, dev->irq_ahb0, dim2_ahb_isr,0 , +"mlb_ahb0" , dev);if (ret) {pr_err ("failed to request IRQ: %d, err: %d\n" , dev->irq_ahb0, ret);
@@ -769,10 +770,8 @@ static int dim2_probe(struct platform_device *pdev) dev->deliver_netinfo =0 ; dev->netinfo_task =kthread_run (&deliver_netinfo_thread, (void *)dev,"dim2_netinfo" ); -if (IS_ERR (dev->netinfo_task)) { +if (IS_ERR (dev->netinfo_task)) ret =PTR_ERR (dev->netinfo_task); - goto err_free_irq; - }for (i =0 ; i <DMA_CHANNELS ; i++) {struct most_channel_capability *cap = dev->capabilities + i;
@@ -840,10 +839,6 @@ err_unreg_iface:most_deregister_interface (&dev->most_iface); err_stop_thread:kthread_stop (dev->netinfo_task); -err_free_irq: -#if !defined(ENABLE_HDM_TEST ) -free_irq (dev->irq_ahb0, dev); -#endif return ret; }
@@ -870,9 +865,6 @@ static int dim2_remove(struct platform_device *pdev)dim2_sysfs_destroy (&dev->bus);most_deregister_interface (&dev->most_iface);kthread_stop (dev->netinfo_task); -#if !defined(ENABLE_HDM_TEST ) -free_irq (dev->irq_ahb0, dev); -#endif /* * break link to local platform_device_id struct
Signature · 1 line
1.9.1
PATCH 4/4 staging: most: hdm-dim2: Replace pr_err with dev_err
In reply to Amitoj Kaur ChawlaReplace pr_err with dev_err when a appropriate device structure is present.
--- drivers/staging/most/hdm-dim2/dim2_hdm.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
drivers/staging/most/hdm-dim2/dim2_hdm.c +3 -3
@@ -753,7 +753,7 @@ static int dim2_probe(struct platform_device *pdev) ret =platform_get_irq (pdev,0 );if (ret <0 ) { -pr_err ("failed to get irq\n" ); +dev_err (&pdev->dev,"failed to get irq\n" );return -ENODEV ; } dev->irq_ahb0 = ret;
@@ -761,8 +761,8 @@ static int dim2_probe(struct platform_device *pdev) ret =devm_request_irq (&pdev->dev, dev->irq_ahb0, dim2_ahb_isr,0 ,"mlb_ahb0" , dev);if (ret) { -pr_err ("failed to request IRQ: %d, err: %d\n" , - dev->irq_ahb0, ret); +dev_err (&pdev->dev,"failed to request IRQ: %d, err: %d\n" , + dev->irq_ahb0, ret);return ret; }#endif
Signature · 1 line
1.9.1
Quoted 9 lines · Amitoj Kaur Chawla
Devm_functions allocate memory that is released when a driver detaches. Replace kzalloc, ioremap andrequest_irqwith their devm_* counterparts in the probe function of a platform device which were originally freed in the remove function.Also, unnecessary labels have been removed, an unnecessary
platform_set_drvdatahas been removed as well as switching frompr_errtodev_err.
Quoted 5 lines
Amitoj Kaur Chawla (4):
staging: most: hdm-dim2: Replace kzalloc withdevm_kzalloc
staging: most: hdm-dim2: Switch todevm_ioremap_resource()
staging: most: hdm-dim2: Replacerequest_irqwithdevm_request_irq
staging: most: hdm-dim2: Replacepr_errwithdev_err
For the patchset,
Thanks.
Signature · 1 line
tejun