Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1687883 > unrolled thread
| Started by | sunil.m@techveda.org |
|---|---|
| First post | 2017-07-15 10:00 +0200 |
| Last post | 2017-07-15 10:00 +0200 |
| Articles | 10 — 4 participants |
Back to article view | Back to linux.kernel
[PATCH 0/3] staging: ccree: Employ devm_* functions, remove redundant code sunil.m@techveda.org - 2017-07-15 10:00 +0200
[PATCH 1/3] staging: ccree: Replace kzalloc with devm_kzalloc sunil.m@techveda.org - 2017-07-15 10:00 +0200
Re: [PATCH 1/3] staging: ccree: Replace kzalloc with devm_kzalloc Greg KH <gregkh@linuxfoundation.org> - 2017-07-17 14:40 +0200
Re: [PATCH 1/3] staging: ccree: Replace kzalloc with devm_kzalloc Suniel Mahesh <sunil.m@techveda.org> - 2017-07-18 06:40 +0200
[PATCH v2 1/3] staging: ccree: Replace kzalloc with devm_kzalloc sunil.m@techveda.org - 2017-07-18 13:00 +0200
[PATCH v2 3/3] staging: ccree: Use platform_get_irq and devm_request_irq sunil.m@techveda.org - 2017-07-18 13:00 +0200
[PATCH v2 2/3] staging: ccree: Convert to devm_ioremap_resource for map, unmap sunil.m@techveda.org - 2017-07-18 13:10 +0200
Re: [PATCH v2 1/3] staging: ccree: Replace kzalloc with devm_kzalloc Gilad Ben-Yossef <gilad@benyossef.com> - 2017-07-27 16:30 +0200
[PATCH 2/3] staging: ccree: Convert to devm_ioremap_resource for map, unmap sunil.m@techveda.org - 2017-07-15 10:00 +0200
[PATCH 3/3] staging: ccree: Use platform_get_irq and devm_request_irq sunil.m@techveda.org - 2017-07-15 10:00 +0200
| From | sunil.m@techveda.org |
|---|---|
| Date | 2017-07-15 10:00 +0200 |
| Subject | [PATCH 0/3] staging: ccree: Employ devm_* functions, remove redundant code |
| Message-ID | <u3q9z-79J-1@gated-at.bofh.it> |
From: Suniel Mahesh <sunil.m@techveda.org> Hi This patch series replaces the current API's which request for device resources in driver probe, with devm_*() functions of the kernel framework as recommended by the kernel community. Doing so simplifies driver cleanup paths and code organization. The current set of API's whch request for device resources are not device managed. The devm_*() functions of the kernel framework are kernel managed resources which the kernel tracks and then automatically releases them when the device goes away. Patch 1/3, replaces kzalloc with devm_kzalloc, kfree's and blank lines are removed accordingly. Patch 2/3, utilizes devm_ioremap_resource for map and unmap of device resources. request_mem_region(), ioremap() and corresponding error handling is replaced with devm_ioremap_resource(). release_mem_region() and iounmap() are dropped. A struct member in struct ssi_drvdata is dropped as it seemed redundant. Log messages adjusted accordingly. Patch 3/3, replaces platform_get_resource(), request_irq() and corresponding error handling with platform_get_irq() and devm_request_irq(). free_irq is not required any more, devm_request_irq() free's it on driver detach. A struct member in struct ssi_drvdata and a bool variable in driver probe are dropped as they seemed redundant. Changed type of a member in struct ssi_drvdata to use it with platform_get_irq(). Log messages adjusted accordingly. Note: Patch was tested and built(ARCH=arm) on next-20170714. No build issues reported, however it was not tested on real hardware. Please drop any patch if they break the flow. As per my analysis these changes should not create a problem. Thanks, Suniel Suniel Mahesh (3): staging: ccree: Replace kzalloc with devm_kzalloc staging: ccree: Convert to devm_ioremap_resource for map, unmap staging: ccree: Use platform_get_irq and devm_request_irq drivers/staging/ccree/ssi_driver.c | 92 +++++++++++--------------------------- drivers/staging/ccree/ssi_driver.h | 4 +- 2 files changed, 26 insertions(+), 70 deletions(-) -- 1.9.1
[toc] | [next] | [standalone]
| From | sunil.m@techveda.org |
|---|---|
| Date | 2017-07-15 10:00 +0200 |
| Subject | [PATCH 1/3] staging: ccree: Replace kzalloc with devm_kzalloc |
| Message-ID | <u3q9z-79J-5@gated-at.bofh.it> |
| In reply to | #1687883 |
From: Suniel Mahesh <sunil.m@techveda.org>
It is recommended to use managed function devm_kzalloc, which
simplifies driver cleanup paths and driver code.
This patch does the following:
(a) replace kzalloc with devm_kzalloc.
(b) drop kfree(), because memory allocated with devm_kzalloc() is
automatically freed on driver detach, otherwise it leads to a double
free.
(c) remove unnecessary blank lines.
Signed-off-by: Suniel Mahesh <sunil.m@techveda.org>
---
Note:
- Patch was tested and built(ARCH=arm) on next-20170714.
No build issues reported, however it was not tested on
real hardware.
---
drivers/staging/ccree/ssi_driver.c | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/drivers/staging/ccree/ssi_driver.c b/drivers/staging/ccree/ssi_driver.c
index 78709b92..f231ecf 100644
--- a/drivers/staging/ccree/ssi_driver.c
+++ b/drivers/staging/ccree/ssi_driver.c
@@ -224,13 +224,15 @@ static int init_cc_resources(struct platform_device *plat_dev)
struct resource *req_mem_cc_regs = NULL;
void __iomem *cc_base = NULL;
bool irq_registered = false;
- struct ssi_drvdata *new_drvdata = kzalloc(sizeof(struct ssi_drvdata), GFP_KERNEL);
+ struct ssi_drvdata *new_drvdata;
struct device *dev = &plat_dev->dev;
struct device_node *np = dev->of_node;
u32 signature_val;
int rc = 0;
- if (unlikely(!new_drvdata)) {
+ new_drvdata = devm_kzalloc(&plat_dev->dev, sizeof(struct ssi_drvdata),
+ GFP_KERNEL);
+ if (!new_drvdata) {
SSI_LOG_ERR("Failed to allocate drvdata");
rc = -ENOMEM;
goto init_cc_res_err;
@@ -431,10 +433,8 @@ static int init_cc_resources(struct platform_device *plat_dev)
resource_size(new_drvdata->res_mem));
new_drvdata->res_mem = NULL;
}
- kfree(new_drvdata);
dev_set_drvdata(&plat_dev->dev, NULL);
}
-
return rc;
}
@@ -475,8 +475,6 @@ static void cleanup_cc_resources(struct platform_device *plat_dev)
drvdata->cc_base = NULL;
drvdata->res_mem = NULL;
}
-
- kfree(drvdata);
dev_set_drvdata(&plat_dev->dev, NULL);
}
--
1.9.1
[toc] | [prev] | [next] | [standalone]
| From | Greg KH <gregkh@linuxfoundation.org> |
|---|---|
| Date | 2017-07-17 14:40 +0200 |
| Subject | Re: [PATCH 1/3] staging: ccree: Replace kzalloc with devm_kzalloc |
| Message-ID | <u4dtE-51t-17@gated-at.bofh.it> |
| In reply to | #1687884 |
On Sat, Jul 15, 2017 at 01:21:54PM +0530, sunil.m@techveda.org wrote:
> From: Suniel Mahesh <sunil.m@techveda.org>
>
> It is recommended to use managed function devm_kzalloc, which
> simplifies driver cleanup paths and driver code.
> This patch does the following:
> (a) replace kzalloc with devm_kzalloc.
> (b) drop kfree(), because memory allocated with devm_kzalloc() is
> automatically freed on driver detach, otherwise it leads to a double
> free.
> (c) remove unnecessary blank lines.
>
> Signed-off-by: Suniel Mahesh <sunil.m@techveda.org>
> ---
> Note:
> - Patch was tested and built(ARCH=arm) on next-20170714.
> No build issues reported, however it was not tested on
> real hardware.
> ---
> drivers/staging/ccree/ssi_driver.c | 10 ++++------
> 1 file changed, 4 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/staging/ccree/ssi_driver.c b/drivers/staging/ccree/ssi_driver.c
> index 78709b92..f231ecf 100644
> --- a/drivers/staging/ccree/ssi_driver.c
> +++ b/drivers/staging/ccree/ssi_driver.c
> @@ -224,13 +224,15 @@ static int init_cc_resources(struct platform_device *plat_dev)
> struct resource *req_mem_cc_regs = NULL;
> void __iomem *cc_base = NULL;
> bool irq_registered = false;
> - struct ssi_drvdata *new_drvdata = kzalloc(sizeof(struct ssi_drvdata), GFP_KERNEL);
> + struct ssi_drvdata *new_drvdata;
> struct device *dev = &plat_dev->dev;
> struct device_node *np = dev->of_node;
> u32 signature_val;
> int rc = 0;
>
> - if (unlikely(!new_drvdata)) {
> + new_drvdata = devm_kzalloc(&plat_dev->dev, sizeof(struct ssi_drvdata),
sizeof(*new_drvdata), right?
thanks,
greg k-h
[toc] | [prev] | [next] | [standalone]
| From | Suniel Mahesh <sunil.m@techveda.org> |
|---|---|
| Date | 2017-07-18 06:40 +0200 |
| Subject | Re: [PATCH 1/3] staging: ccree: Replace kzalloc with devm_kzalloc |
| Message-ID | <u4ssG-6bP-25@gated-at.bofh.it> |
| In reply to | #1688992 |
On Monday 17 July 2017 06:03 PM, Greg KH wrote:
> On Sat, Jul 15, 2017 at 01:21:54PM +0530, sunil.m@techveda.org wrote:
>> From: Suniel Mahesh <sunil.m@techveda.org>
>>
>> It is recommended to use managed function devm_kzalloc, which
>> simplifies driver cleanup paths and driver code.
>> This patch does the following:
>> (a) replace kzalloc with devm_kzalloc.
>> (b) drop kfree(), because memory allocated with devm_kzalloc() is
>> automatically freed on driver detach, otherwise it leads to a double
>> free.
>> (c) remove unnecessary blank lines.
>>
>> Signed-off-by: Suniel Mahesh <sunil.m@techveda.org>
>> ---
>> Note:
>> - Patch was tested and built(ARCH=arm) on next-20170714.
>> No build issues reported, however it was not tested on
>> real hardware.
>> ---
>> drivers/staging/ccree/ssi_driver.c | 10 ++++------
>> 1 file changed, 4 insertions(+), 6 deletions(-)
>>
>> diff --git a/drivers/staging/ccree/ssi_driver.c b/drivers/staging/ccree/ssi_driver.c
>> index 78709b92..f231ecf 100644
>> --- a/drivers/staging/ccree/ssi_driver.c
>> +++ b/drivers/staging/ccree/ssi_driver.c
>> @@ -224,13 +224,15 @@ static int init_cc_resources(struct platform_device *plat_dev)
>> struct resource *req_mem_cc_regs = NULL;
>> void __iomem *cc_base = NULL;
>> bool irq_registered = false;
>> - struct ssi_drvdata *new_drvdata = kzalloc(sizeof(struct ssi_drvdata), GFP_KERNEL);
>> + struct ssi_drvdata *new_drvdata;
>> struct device *dev = &plat_dev->dev;
>> struct device_node *np = dev->of_node;
>> u32 signature_val;
>> int rc = 0;
>>
>> - if (unlikely(!new_drvdata)) {
>> + new_drvdata = devm_kzalloc(&plat_dev->dev, sizeof(struct ssi_drvdata),
>
> sizeof(*new_drvdata), right?
>
Yes, sending v2 in a while. Thanks for the review
suniel
> thanks,
>
> greg k-h
>
[toc] | [prev] | [next] | [standalone]
| From | sunil.m@techveda.org |
|---|---|
| Date | 2017-07-18 13:00 +0200 |
| Subject | [PATCH v2 1/3] staging: ccree: Replace kzalloc with devm_kzalloc |
| Message-ID | <u4yop-1lh-1@gated-at.bofh.it> |
| In reply to | #1688992 |
From: Suniel Mahesh <sunil.m@techveda.org>
It is recommended to use managed function devm_kzalloc, which
simplifies driver cleanup paths and driver code.
This patch does the following:
(a) replace kzalloc with devm_kzalloc.
(b) drop kfree(), because memory allocated with devm_kzalloc() is
automatically freed on driver detach, otherwise it leads to a double
free.
(c) remove unnecessary blank lines.
Signed-off-by: Suniel Mahesh <sunil.m@techveda.org>
---
Changes for v2:
- Changes done as suggested by Greg-KH.
- Rebased on top of next-20170718.
---
Note:
- Patch was tested and built(ARCH=arm) on next-20170718.
No build issues reported, however it was not tested on
real hardware.
---
drivers/staging/ccree/ssi_driver.c | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/drivers/staging/ccree/ssi_driver.c b/drivers/staging/ccree/ssi_driver.c
index d7b9a63..e918cf4 100644
--- a/drivers/staging/ccree/ssi_driver.c
+++ b/drivers/staging/ccree/ssi_driver.c
@@ -223,13 +223,15 @@ static int init_cc_resources(struct platform_device *plat_dev)
struct resource *req_mem_cc_regs = NULL;
void __iomem *cc_base = NULL;
bool irq_registered = false;
- struct ssi_drvdata *new_drvdata = kzalloc(sizeof(struct ssi_drvdata), GFP_KERNEL);
+ struct ssi_drvdata *new_drvdata;
struct device *dev = &plat_dev->dev;
struct device_node *np = dev->of_node;
u32 signature_val;
int rc = 0;
- if (unlikely(!new_drvdata)) {
+ new_drvdata = devm_kzalloc(&plat_dev->dev, sizeof(*new_drvdata),
+ GFP_KERNEL);
+ if (!new_drvdata) {
SSI_LOG_ERR("Failed to allocate drvdata");
rc = -ENOMEM;
goto init_cc_res_err;
@@ -434,10 +436,8 @@ static int init_cc_resources(struct platform_device *plat_dev)
resource_size(new_drvdata->res_mem));
new_drvdata->res_mem = NULL;
}
- kfree(new_drvdata);
dev_set_drvdata(&plat_dev->dev, NULL);
}
-
return rc;
}
@@ -478,8 +478,6 @@ static void cleanup_cc_resources(struct platform_device *plat_dev)
drvdata->cc_base = NULL;
drvdata->res_mem = NULL;
}
-
- kfree(drvdata);
dev_set_drvdata(&plat_dev->dev, NULL);
}
--
1.9.1
[toc] | [prev] | [next] | [standalone]
| From | sunil.m@techveda.org |
|---|---|
| Date | 2017-07-18 13:00 +0200 |
| Subject | [PATCH v2 3/3] staging: ccree: Use platform_get_irq and devm_request_irq |
| Message-ID | <u4yos-1lh-89@gated-at.bofh.it> |
| In reply to | #1690096 |
From: Suniel Mahesh <sunil.m@techveda.org>
It is recommended to use managed function devm_request_irq(),
which simplifies driver cleanup paths and driver code.
This patch does the following:
(a) replace platform_get_resource(), request_irq() and corresponding
error handling with platform_get_irq() and devm_request_irq().
(b) remove struct resource pointer(res_irq) in struct ssi_drvdata as
it seems redundant.
(c) change type of member irq in struct ssi_drvdata from unsigned int
to int, as return type of platform_get_irq is int and can be used in
error handling.
(d) remove irq_registered variable from driver probe as it seems
redundant.
(e) free_irq is not required any more, devm_request_irq() free's it
on driver detach.
(f) adjust log messages accordingly and remove any blank lines.
Signed-off-by: Suniel Mahesh <sunil.m@techveda.org>
---
Changes for v2:
- Rebased on top of next-20170718.
---
Note:
- Patch was tested and built(ARCH=arm) on next-20170718.
No build issues reported, however it was not tested on
real hardware.
---
drivers/staging/ccree/ssi_driver.c | 30 +++++++++---------------------
drivers/staging/ccree/ssi_driver.h | 3 +--
2 files changed, 10 insertions(+), 23 deletions(-)
diff --git a/drivers/staging/ccree/ssi_driver.c b/drivers/staging/ccree/ssi_driver.c
index 36b7c92..bac27d4 100644
--- a/drivers/staging/ccree/ssi_driver.c
+++ b/drivers/staging/ccree/ssi_driver.c
@@ -222,7 +222,6 @@ static int init_cc_resources(struct platform_device *plat_dev)
{
struct resource *req_mem_cc_regs = NULL;
void __iomem *cc_base = NULL;
- bool irq_registered = false;
struct ssi_drvdata *new_drvdata;
struct device *dev = &plat_dev->dev;
struct device_node *np = dev->of_node;
@@ -262,26 +261,22 @@ static int init_cc_resources(struct platform_device *plat_dev)
&req_mem_cc_regs->start, new_drvdata->cc_base);
cc_base = new_drvdata->cc_base;
/* Then IRQ */
- new_drvdata->res_irq = platform_get_resource(plat_dev, IORESOURCE_IRQ, 0);
- if (unlikely(!new_drvdata->res_irq)) {
+ new_drvdata->irq = platform_get_irq(plat_dev, 0);
+ if (new_drvdata->irq < 0) {
SSI_LOG_ERR("Failed getting IRQ resource\n");
- rc = -ENODEV;
+ rc = new_drvdata->irq;
goto init_cc_res_err;
}
- rc = request_irq(new_drvdata->res_irq->start, cc_isr,
- IRQF_SHARED, "arm_cc7x", new_drvdata);
- if (unlikely(rc != 0)) {
- SSI_LOG_ERR("Could not register to interrupt %llu\n",
- (unsigned long long)new_drvdata->res_irq->start);
+ rc = devm_request_irq(&plat_dev->dev, new_drvdata->irq, cc_isr,
+ IRQF_SHARED, "arm_cc7x", new_drvdata);
+ if (rc) {
+ SSI_LOG_ERR("Could not register to interrupt %d\n",
+ new_drvdata->irq);
goto init_cc_res_err;
}
init_completion(&new_drvdata->icache_setup_completion);
- irq_registered = true;
- SSI_LOG_DEBUG("Registered to IRQ (%s) %llu\n",
- new_drvdata->res_irq->name,
- (unsigned long long)new_drvdata->res_irq->start);
-
+ SSI_LOG_DEBUG("Registered to IRQ: %d\n", new_drvdata->irq);
new_drvdata->plat_dev = plat_dev;
rc = cc_clk_on(new_drvdata);
@@ -410,10 +405,6 @@ static int init_cc_resources(struct platform_device *plat_dev)
#ifdef ENABLE_CC_SYSFS
ssi_sysfs_fini();
#endif
- if (irq_registered) {
- free_irq(new_drvdata->res_irq->start, new_drvdata);
- new_drvdata->res_irq = NULL;
- }
dev_set_drvdata(&plat_dev->dev, NULL);
}
return rc;
@@ -443,11 +434,8 @@ static void cleanup_cc_resources(struct platform_device *plat_dev)
#ifdef ENABLE_CC_SYSFS
ssi_sysfs_fini();
#endif
-
fini_cc_regs(drvdata);
cc_clk_off(drvdata);
- free_irq(drvdata->res_irq->start, drvdata);
- drvdata->res_irq = NULL;
dev_set_drvdata(&plat_dev->dev, NULL);
}
diff --git a/drivers/staging/ccree/ssi_driver.h b/drivers/staging/ccree/ssi_driver.h
index 518c0bf..88ef370 100644
--- a/drivers/staging/ccree/ssi_driver.h
+++ b/drivers/staging/ccree/ssi_driver.h
@@ -128,9 +128,8 @@ struct ssi_crypto_req {
* @fw_ver: SeP loaded firmware version
*/
struct ssi_drvdata {
- struct resource *res_irq;
void __iomem *cc_base;
- unsigned int irq;
+ int irq;
u32 irq_mask;
u32 fw_ver;
/* Calibration time of start/stop
--
1.9.1
[toc] | [prev] | [next] | [standalone]
| From | sunil.m@techveda.org |
|---|---|
| Date | 2017-07-18 13:10 +0200 |
| Subject | [PATCH v2 2/3] staging: ccree: Convert to devm_ioremap_resource for map, unmap |
| Message-ID | <u4yy5-1Ez-1@gated-at.bofh.it> |
| In reply to | #1690096 |
From: Suniel Mahesh <sunil.m@techveda.org>
It is recommended to use managed function devm_ioremap_resource(),
which simplifies driver cleanup paths and driver code.
This patch does the following:
(a) replace request_mem_region(), ioremap() and corresponding error
handling with devm_ioremap_resource().
(b) remove struct resource pointer(res_mem) in struct ssi_drvdata as it
seems redundant, use struct resource pointer which is defined locally and
adjust return value of platform_get_resource() accordingly.
(c) release_mem_region() and iounmap() are dropped, since devm_ioremap_
resource() releases and unmaps mem region on driver detach.
(d) adjust log messages accordingly and remove any blank lines.
Signed-off-by: Suniel Mahesh <sunil.m@techveda.org>
---
Changes for v2:
- format specifiers changed in log messages.
- Rebased on top of next-20170718.
---
Note:
- Patch was tested and built(ARCH=arm) on next-20170718.
No build issues reported, however it was not tested on
real hardware.
---
drivers/staging/ccree/ssi_driver.c | 60 ++++++++++----------------------------
drivers/staging/ccree/ssi_driver.h | 1 -
2 files changed, 15 insertions(+), 46 deletions(-)
diff --git a/drivers/staging/ccree/ssi_driver.c b/drivers/staging/ccree/ssi_driver.c
index e918cf4..36b7c92 100644
--- a/drivers/staging/ccree/ssi_driver.c
+++ b/drivers/staging/ccree/ssi_driver.c
@@ -246,35 +246,21 @@ static int init_cc_resources(struct platform_device *plat_dev)
dev_set_drvdata(&plat_dev->dev, new_drvdata);
/* Get device resources */
/* First CC registers space */
- new_drvdata->res_mem = platform_get_resource(plat_dev, IORESOURCE_MEM, 0);
- if (unlikely(!new_drvdata->res_mem)) {
- SSI_LOG_ERR("Failed getting IO memory resource\n");
- rc = -ENODEV;
- goto init_cc_res_err;
- }
- SSI_LOG_DEBUG("Got MEM resource (%s): start=%pad end=%pad\n",
- new_drvdata->res_mem->name,
- new_drvdata->res_mem->start,
- new_drvdata->res_mem->end);
+ req_mem_cc_regs = platform_get_resource(plat_dev, IORESOURCE_MEM, 0);
/* Map registers space */
- req_mem_cc_regs = request_mem_region(new_drvdata->res_mem->start, resource_size(new_drvdata->res_mem), "arm_cc7x_regs");
- if (unlikely(!req_mem_cc_regs)) {
- SSI_LOG_ERR("Couldn't allocate registers memory region at "
- "0x%08X\n", (unsigned int)new_drvdata->res_mem->start);
- rc = -EBUSY;
- goto init_cc_res_err;
- }
- cc_base = ioremap(new_drvdata->res_mem->start, resource_size(new_drvdata->res_mem));
- if (unlikely(!cc_base)) {
- SSI_LOG_ERR("ioremap[CC](0x%08X,0x%08X) failed\n",
- (unsigned int)new_drvdata->res_mem->start,
- (unsigned int)resource_size(new_drvdata->res_mem));
- rc = -ENOMEM;
+ new_drvdata->cc_base = devm_ioremap_resource(&plat_dev->dev,
+ req_mem_cc_regs);
+ if (IS_ERR(new_drvdata->cc_base)) {
+ rc = PTR_ERR(new_drvdata->cc_base);
goto init_cc_res_err;
}
- SSI_LOG_DEBUG("CC registers mapped from %pa to 0x%p\n", &new_drvdata->res_mem->start, cc_base);
- new_drvdata->cc_base = cc_base;
-
+ SSI_LOG_DEBUG("Got MEM resource (%s): start=%pad end=%pad\n",
+ req_mem_cc_regs->name,
+ req_mem_cc_regs->start,
+ req_mem_cc_regs->end);
+ SSI_LOG_DEBUG("CC registers mapped from %pa to 0x%p\n",
+ &req_mem_cc_regs->start, new_drvdata->cc_base);
+ cc_base = new_drvdata->cc_base;
/* Then IRQ */
new_drvdata->res_irq = platform_get_resource(plat_dev, IORESOURCE_IRQ, 0);
if (unlikely(!new_drvdata->res_irq)) {
@@ -424,17 +410,9 @@ static int init_cc_resources(struct platform_device *plat_dev)
#ifdef ENABLE_CC_SYSFS
ssi_sysfs_fini();
#endif
-
- if (req_mem_cc_regs) {
- if (irq_registered) {
- free_irq(new_drvdata->res_irq->start, new_drvdata);
- new_drvdata->res_irq = NULL;
- iounmap(cc_base);
- new_drvdata->cc_base = NULL;
- }
- release_mem_region(new_drvdata->res_mem->start,
- resource_size(new_drvdata->res_mem));
- new_drvdata->res_mem = NULL;
+ if (irq_registered) {
+ free_irq(new_drvdata->res_irq->start, new_drvdata);
+ new_drvdata->res_irq = NULL;
}
dev_set_drvdata(&plat_dev->dev, NULL);
}
@@ -470,14 +448,6 @@ static void cleanup_cc_resources(struct platform_device *plat_dev)
cc_clk_off(drvdata);
free_irq(drvdata->res_irq->start, drvdata);
drvdata->res_irq = NULL;
-
- if (drvdata->cc_base) {
- iounmap(drvdata->cc_base);
- release_mem_region(drvdata->res_mem->start,
- resource_size(drvdata->res_mem));
- drvdata->cc_base = NULL;
- drvdata->res_mem = NULL;
- }
dev_set_drvdata(&plat_dev->dev, NULL);
}
diff --git a/drivers/staging/ccree/ssi_driver.h b/drivers/staging/ccree/ssi_driver.h
index b6ad89a..518c0bf 100644
--- a/drivers/staging/ccree/ssi_driver.h
+++ b/drivers/staging/ccree/ssi_driver.h
@@ -128,7 +128,6 @@ struct ssi_crypto_req {
* @fw_ver: SeP loaded firmware version
*/
struct ssi_drvdata {
- struct resource *res_mem;
struct resource *res_irq;
void __iomem *cc_base;
unsigned int irq;
--
1.9.1
[toc] | [prev] | [next] | [standalone]
| From | Gilad Ben-Yossef <gilad@benyossef.com> |
|---|---|
| Date | 2017-07-27 16:30 +0200 |
| Subject | Re: [PATCH v2 1/3] staging: ccree: Replace kzalloc with devm_kzalloc |
| Message-ID | <u7RXz-7d4-5@gated-at.bofh.it> |
| In reply to | #1690096 |
On Tue, Jul 18, 2017 at 1:58 PM, <sunil.m@techveda.org> wrote: > From: Suniel Mahesh <sunil.m@techveda.org> > > It is recommended to use managed function devm_kzalloc, which > simplifies driver cleanup paths and driver code. > This patch does the following: > (a) replace kzalloc with devm_kzalloc. > (b) drop kfree(), because memory allocated with devm_kzalloc() is > automatically freed on driver detach, otherwise it leads to a double > free. > (c) remove unnecessary blank lines. > > Signed-off-by: Suniel Mahesh <sunil.m@techveda.org> > --- > Changes for v2: > > - Changes done as suggested by Greg-KH. > - Rebased on top of next-20170718. > --- > Note: > > - Patch was tested and built(ARCH=arm) on next-20170718. > No build issues reported, however it was not tested on > real hardware. I verified the patch set on CrytoCell HW and it's fine. Unfortunately, my coding style fixes patch set made two of these to fail to apply. Following up is a rebased patch. There are no changes except resolving conflicts. -- Gilad Ben-Yossef Chief Coffee Drinker "If you take a class in large-scale robotics, can you end up in a situation where the homework eats your dog?" -- Jean-Baptiste Queru
[toc] | [prev] | [next] | [standalone]
| From | sunil.m@techveda.org |
|---|---|
| Date | 2017-07-15 10:00 +0200 |
| Subject | [PATCH 2/3] staging: ccree: Convert to devm_ioremap_resource for map, unmap |
| Message-ID | <u3q9A-79J-17@gated-at.bofh.it> |
| In reply to | #1687883 |
From: Suniel Mahesh <sunil.m@techveda.org>
It is recommended to use managed function devm_ioremap_resource(),
which simplifies driver cleanup paths and driver code.
This patch does the following:
(a) replace request_mem_region(), ioremap() and corresponding error
handling with devm_ioremap_resource().
(b) remove struct resource pointer(res_mem) in struct ssi_drvdata as it
seems redundant, use struct resource pointer which is defined locally and
adjust return value of platform_get_resource() accordingly.
(c) release_mem_region() and iounmap() are dropped, since devm_ioremap_
resource() releases and unmaps mem region on driver detach.
(d) adjust log messages accordingly and remove any blank lines.
Signed-off-by: Suniel Mahesh <sunil.m@techveda.org>
---
Note:
- Patch was tested and built(ARCH=arm) on next-20170714.
No build issues reported, however it was not tested on
real hardware.
---
drivers/staging/ccree/ssi_driver.c | 59 ++++++++++----------------------------
drivers/staging/ccree/ssi_driver.h | 1 -
2 files changed, 15 insertions(+), 45 deletions(-)
diff --git a/drivers/staging/ccree/ssi_driver.c b/drivers/staging/ccree/ssi_driver.c
index f231ecf..dca0ce8 100644
--- a/drivers/staging/ccree/ssi_driver.c
+++ b/drivers/staging/ccree/ssi_driver.c
@@ -247,34 +247,21 @@ static int init_cc_resources(struct platform_device *plat_dev)
dev_set_drvdata(&plat_dev->dev, new_drvdata);
/* Get device resources */
/* First CC registers space */
- new_drvdata->res_mem = platform_get_resource(plat_dev, IORESOURCE_MEM, 0);
- if (unlikely(!new_drvdata->res_mem)) {
- SSI_LOG_ERR("Failed getting IO memory resource\n");
- rc = -ENODEV;
- goto init_cc_res_err;
- }
- SSI_LOG_DEBUG("Got MEM resource (%s): start=0x%llX end=0x%llX\n",
- new_drvdata->res_mem->name,
- (unsigned long long)new_drvdata->res_mem->start,
- (unsigned long long)new_drvdata->res_mem->end);
+ req_mem_cc_regs = platform_get_resource(plat_dev, IORESOURCE_MEM, 0);
/* Map registers space */
- req_mem_cc_regs = request_mem_region(new_drvdata->res_mem->start, resource_size(new_drvdata->res_mem), "arm_cc7x_regs");
- if (unlikely(!req_mem_cc_regs)) {
- SSI_LOG_ERR("Couldn't allocate registers memory region at "
- "0x%08X\n", (unsigned int)new_drvdata->res_mem->start);
- rc = -EBUSY;
- goto init_cc_res_err;
- }
- cc_base = ioremap(new_drvdata->res_mem->start, resource_size(new_drvdata->res_mem));
- if (unlikely(!cc_base)) {
- SSI_LOG_ERR("ioremap[CC](0x%08X,0x%08X) failed\n",
- (unsigned int)new_drvdata->res_mem->start, (unsigned int)resource_size(new_drvdata->res_mem));
- rc = -ENOMEM;
+ new_drvdata->cc_base = devm_ioremap_resource(&plat_dev->dev,
+ req_mem_cc_regs);
+ if (IS_ERR(new_drvdata->cc_base)) {
+ rc = PTR_ERR(new_drvdata->cc_base);
goto init_cc_res_err;
}
- SSI_LOG_DEBUG("CC registers mapped from %pa to 0x%p\n", &new_drvdata->res_mem->start, cc_base);
- new_drvdata->cc_base = cc_base;
-
+ SSI_LOG_DEBUG("Got MEM resource (%s): start=0x%llX end=0x%llX\n",
+ req_mem_cc_regs->name,
+ (unsigned long long)req_mem_cc_regs->start,
+ (unsigned long long)req_mem_cc_regs->end);
+ SSI_LOG_DEBUG("CC registers mapped from %pa to 0x%p\n",
+ &req_mem_cc_regs->start, new_drvdata->cc_base);
+ cc_base = new_drvdata->cc_base;
/* Then IRQ */
new_drvdata->res_irq = platform_get_resource(plat_dev, IORESOURCE_IRQ, 0);
if (unlikely(!new_drvdata->res_irq)) {
@@ -421,17 +408,9 @@ static int init_cc_resources(struct platform_device *plat_dev)
#ifdef ENABLE_CC_SYSFS
ssi_sysfs_fini();
#endif
-
- if (req_mem_cc_regs) {
- if (irq_registered) {
- free_irq(new_drvdata->res_irq->start, new_drvdata);
- new_drvdata->res_irq = NULL;
- iounmap(cc_base);
- new_drvdata->cc_base = NULL;
- }
- release_mem_region(new_drvdata->res_mem->start,
- resource_size(new_drvdata->res_mem));
- new_drvdata->res_mem = NULL;
+ if (irq_registered) {
+ free_irq(new_drvdata->res_irq->start, new_drvdata);
+ new_drvdata->res_irq = NULL;
}
dev_set_drvdata(&plat_dev->dev, NULL);
}
@@ -467,14 +446,6 @@ static void cleanup_cc_resources(struct platform_device *plat_dev)
cc_clk_off(drvdata);
free_irq(drvdata->res_irq->start, drvdata);
drvdata->res_irq = NULL;
-
- if (drvdata->cc_base) {
- iounmap(drvdata->cc_base);
- release_mem_region(drvdata->res_mem->start,
- resource_size(drvdata->res_mem));
- drvdata->cc_base = NULL;
- drvdata->res_mem = NULL;
- }
dev_set_drvdata(&plat_dev->dev, NULL);
}
diff --git a/drivers/staging/ccree/ssi_driver.h b/drivers/staging/ccree/ssi_driver.h
index c1ed61f..4b38fe2 100644
--- a/drivers/staging/ccree/ssi_driver.h
+++ b/drivers/staging/ccree/ssi_driver.h
@@ -129,7 +129,6 @@ struct ssi_crypto_req {
* @fw_ver: SeP loaded firmware version
*/
struct ssi_drvdata {
- struct resource *res_mem;
struct resource *res_irq;
void __iomem *cc_base;
unsigned int irq;
--
1.9.1
[toc] | [prev] | [next] | [standalone]
| From | sunil.m@techveda.org |
|---|---|
| Date | 2017-07-15 10:00 +0200 |
| Subject | [PATCH 3/3] staging: ccree: Use platform_get_irq and devm_request_irq |
| Message-ID | <u3q9A-79J-23@gated-at.bofh.it> |
| In reply to | #1687883 |
From: Suniel Mahesh <sunil.m@techveda.org>
It is recommended to use managed function devm_request_irq(),
which simplifies driver cleanup paths and driver code.
This patch does the following:
(a) replace platform_get_resource(), request_irq() and corresponding
error handling with platform_get_irq() and devm_request_irq().
(b) remove struct resource pointer(res_irq) in struct ssi_drvdata as
it seems redundant.
(c) change type of member irq in struct ssi_drvdata from unsigned int
to int, as return type of platform_get_irq is int and can be used in
error handling.
(d) remove irq_registered variable from driver probe as it seems
redundant.
(e) free_irq is not required any more, devm_request_irq() free's it
on driver detach.
(f) adjust log messages accordingly and remove any blank lines.
Signed-off-by: Suniel Mahesh <sunil.m@techveda.org>
---
Note:
- Patch was tested and built(ARCH=arm) on next-20170714.
No build issues reported, however it was not tested on
real hardware.
---
drivers/staging/ccree/ssi_driver.c | 29 +++++++++--------------------
drivers/staging/ccree/ssi_driver.h | 3 +--
2 files changed, 10 insertions(+), 22 deletions(-)
diff --git a/drivers/staging/ccree/ssi_driver.c b/drivers/staging/ccree/ssi_driver.c
index dca0ce8..11b62d0 100644
--- a/drivers/staging/ccree/ssi_driver.c
+++ b/drivers/staging/ccree/ssi_driver.c
@@ -223,7 +223,6 @@ static int init_cc_resources(struct platform_device *plat_dev)
{
struct resource *req_mem_cc_regs = NULL;
void __iomem *cc_base = NULL;
- bool irq_registered = false;
struct ssi_drvdata *new_drvdata;
struct device *dev = &plat_dev->dev;
struct device_node *np = dev->of_node;
@@ -263,25 +262,22 @@ static int init_cc_resources(struct platform_device *plat_dev)
&req_mem_cc_regs->start, new_drvdata->cc_base);
cc_base = new_drvdata->cc_base;
/* Then IRQ */
- new_drvdata->res_irq = platform_get_resource(plat_dev, IORESOURCE_IRQ, 0);
- if (unlikely(!new_drvdata->res_irq)) {
+ new_drvdata->irq = platform_get_irq(plat_dev, 0);
+ if (new_drvdata->irq < 0) {
SSI_LOG_ERR("Failed getting IRQ resource\n");
- rc = -ENODEV;
+ rc = new_drvdata->irq;
goto init_cc_res_err;
}
- rc = request_irq(new_drvdata->res_irq->start, cc_isr,
- IRQF_SHARED, "arm_cc7x", new_drvdata);
- if (unlikely(rc != 0)) {
- SSI_LOG_ERR("Could not register to interrupt %llu\n",
- (unsigned long long)new_drvdata->res_irq->start);
+ rc = devm_request_irq(&plat_dev->dev, new_drvdata->irq, cc_isr,
+ IRQF_SHARED, "arm_cc7x", new_drvdata);
+ if (rc) {
+ SSI_LOG_ERR("Could not register to interrupt: %d\n",
+ new_drvdata->irq);
goto init_cc_res_err;
}
init_completion(&new_drvdata->icache_setup_completion);
- irq_registered = true;
- SSI_LOG_DEBUG("Registered to IRQ (%s) %llu\n",
- new_drvdata->res_irq->name,
- (unsigned long long)new_drvdata->res_irq->start);
+ SSI_LOG_DEBUG("Registered to IRQ: %d\n", new_drvdata->irq);
new_drvdata->plat_dev = plat_dev;
@@ -408,10 +404,6 @@ static int init_cc_resources(struct platform_device *plat_dev)
#ifdef ENABLE_CC_SYSFS
ssi_sysfs_fini();
#endif
- if (irq_registered) {
- free_irq(new_drvdata->res_irq->start, new_drvdata);
- new_drvdata->res_irq = NULL;
- }
dev_set_drvdata(&plat_dev->dev, NULL);
}
return rc;
@@ -441,11 +433,8 @@ static void cleanup_cc_resources(struct platform_device *plat_dev)
#ifdef ENABLE_CC_SYSFS
ssi_sysfs_fini();
#endif
-
fini_cc_regs(drvdata);
cc_clk_off(drvdata);
- free_irq(drvdata->res_irq->start, drvdata);
- drvdata->res_irq = NULL;
dev_set_drvdata(&plat_dev->dev, NULL);
}
diff --git a/drivers/staging/ccree/ssi_driver.h b/drivers/staging/ccree/ssi_driver.h
index 4b38fe2..6fcd151 100644
--- a/drivers/staging/ccree/ssi_driver.h
+++ b/drivers/staging/ccree/ssi_driver.h
@@ -129,9 +129,8 @@ struct ssi_crypto_req {
* @fw_ver: SeP loaded firmware version
*/
struct ssi_drvdata {
- struct resource *res_irq;
void __iomem *cc_base;
- unsigned int irq;
+ int irq;
u32 irq_mask;
u32 fw_ver;
/* Calibration time of start/stop
--
1.9.1
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web