2019-09-27 08:28:39

by Baolin Wang

[permalink] [raw]
Subject: [PATCH 0/3] Optimize the u8500_hsem hwlock driver

This patch set did some Optimization with changing to use devm_xxx()
APIs to simplify the code and make code more readable.

Baolin Wang (3):
hwspinlock: u8500_hsem: Change to use
devm_platform_ioremap_resource()
hwspinlock: u8500_hsem: Use devm_kzalloc() to allocate memory
hwspinlock: u8500_hsem: Use devm_hwspin_lock_register() to register
hwlock controller

drivers/hwspinlock/u8500_hsem.c | 46 +++++++++++----------------------------
1 file changed, 13 insertions(+), 33 deletions(-)

--
1.7.9.5


2019-09-27 08:29:43

by Baolin Wang

[permalink] [raw]
Subject: [PATCH 2/3] hwspinlock: u8500_hsem: Use devm_kzalloc() to allocate memory

Use devm_kzalloc() to allocate memory.

Signed-off-by: Baolin Wang <[email protected]>
---
drivers/hwspinlock/u8500_hsem.c | 15 ++++++---------
1 file changed, 6 insertions(+), 9 deletions(-)

diff --git a/drivers/hwspinlock/u8500_hsem.c b/drivers/hwspinlock/u8500_hsem.c
index c247a87..0e8d4ff 100644
--- a/drivers/hwspinlock/u8500_hsem.c
+++ b/drivers/hwspinlock/u8500_hsem.c
@@ -106,7 +106,8 @@ static int u8500_hsem_probe(struct platform_device *pdev)
/* clear all interrupts */
writel(0xFFFF, io_base + HSEM_ICRALL);

- bank = kzalloc(struct_size(bank, lock, num_locks), GFP_KERNEL);
+ bank = devm_kzalloc(&pdev->dev, struct_size(bank, lock, num_locks),
+ GFP_KERNEL);
if (!bank)
return -ENOMEM;

@@ -120,15 +121,12 @@ static int u8500_hsem_probe(struct platform_device *pdev)

ret = hwspin_lock_register(bank, &pdev->dev, &u8500_hwspinlock_ops,
pdata->base_id, num_locks);
- if (ret)
- goto reg_fail;
+ if (ret) {
+ pm_runtime_disable(&pdev->dev);
+ return ret;
+ }

return 0;
-
-reg_fail:
- pm_runtime_disable(&pdev->dev);
- kfree(bank);
- return ret;
}

static int u8500_hsem_remove(struct platform_device *pdev)
@@ -147,7 +145,6 @@ static int u8500_hsem_remove(struct platform_device *pdev)
}

pm_runtime_disable(&pdev->dev);
- kfree(bank);

return 0;
}
--
1.7.9.5

2019-09-27 08:30:02

by Baolin Wang

[permalink] [raw]
Subject: [PATCH 3/3] hwspinlock: u8500_hsem: Use devm_hwspin_lock_register() to register hwlock controller

Use devm_hwspin_lock_register() to register the hwlock controller instead of
unregistering the hwlock controller explicitly when removing the device.

Signed-off-by: Baolin Wang <[email protected]>
---
drivers/hwspinlock/u8500_hsem.c | 11 ++---------
1 file changed, 2 insertions(+), 9 deletions(-)

diff --git a/drivers/hwspinlock/u8500_hsem.c b/drivers/hwspinlock/u8500_hsem.c
index 0e8d4ff..b31141a 100644
--- a/drivers/hwspinlock/u8500_hsem.c
+++ b/drivers/hwspinlock/u8500_hsem.c
@@ -119,8 +119,8 @@ static int u8500_hsem_probe(struct platform_device *pdev)
/* no pm needed for HSem but required to comply with hwspilock core */
pm_runtime_enable(&pdev->dev);

- ret = hwspin_lock_register(bank, &pdev->dev, &u8500_hwspinlock_ops,
- pdata->base_id, num_locks);
+ ret = devm_hwspin_lock_register(&pdev->dev, bank, &u8500_hwspinlock_ops,
+ pdata->base_id, num_locks);
if (ret) {
pm_runtime_disable(&pdev->dev);
return ret;
@@ -133,17 +133,10 @@ static int u8500_hsem_remove(struct platform_device *pdev)
{
struct hwspinlock_device *bank = platform_get_drvdata(pdev);
void __iomem *io_base = bank->lock[0].priv - HSEM_REGISTER_OFFSET;
- int ret;

/* clear all interrupts */
writel(0xFFFF, io_base + HSEM_ICRALL);

- ret = hwspin_lock_unregister(bank);
- if (ret) {
- dev_err(&pdev->dev, "%s failed: %d\n", __func__, ret);
- return ret;
- }
-
pm_runtime_disable(&pdev->dev);

return 0;
--
1.7.9.5

2019-09-27 08:30:47

by Baolin Wang

[permalink] [raw]
Subject: [PATCH 1/3] hwspinlock: u8500_hsem: Change to use devm_platform_ioremap_resource()

Use the new helper that wraps the calls to platform_get_resource()
and devm_ioremap_resource() together, which can simpify the code.

Signed-off-by: Baolin Wang <[email protected]>
---
drivers/hwspinlock/u8500_hsem.c | 20 +++++---------------
1 file changed, 5 insertions(+), 15 deletions(-)

diff --git a/drivers/hwspinlock/u8500_hsem.c b/drivers/hwspinlock/u8500_hsem.c
index 572ca79..c247a87 100644
--- a/drivers/hwspinlock/u8500_hsem.c
+++ b/drivers/hwspinlock/u8500_hsem.c
@@ -88,7 +88,6 @@ static int u8500_hsem_probe(struct platform_device *pdev)
struct hwspinlock_pdata *pdata = pdev->dev.platform_data;
struct hwspinlock_device *bank;
struct hwspinlock *hwlock;
- struct resource *res;
void __iomem *io_base;
int i, ret, num_locks = U8500_MAX_SEMAPHORE;
ulong val;
@@ -96,13 +95,9 @@ static int u8500_hsem_probe(struct platform_device *pdev)
if (!pdata)
return -ENODEV;

- res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
- if (!res)
- return -ENODEV;
-
- io_base = ioremap(res->start, resource_size(res));
- if (!io_base)
- return -ENOMEM;
+ io_base = devm_platform_ioremap_resource(pdev, 0);
+ if (IS_ERR(io_base))
+ return PTR_ERR(io_base);

/* make sure protocol 1 is selected */
val = readl(io_base + HSEM_CTRL_REG);
@@ -112,10 +107,8 @@ static int u8500_hsem_probe(struct platform_device *pdev)
writel(0xFFFF, io_base + HSEM_ICRALL);

bank = kzalloc(struct_size(bank, lock, num_locks), GFP_KERNEL);
- if (!bank) {
- ret = -ENOMEM;
- goto iounmap_base;
- }
+ if (!bank)
+ return -ENOMEM;

platform_set_drvdata(pdev, bank);

@@ -135,8 +128,6 @@ static int u8500_hsem_probe(struct platform_device *pdev)
reg_fail:
pm_runtime_disable(&pdev->dev);
kfree(bank);
-iounmap_base:
- iounmap(io_base);
return ret;
}

@@ -156,7 +147,6 @@ static int u8500_hsem_remove(struct platform_device *pdev)
}

pm_runtime_disable(&pdev->dev);
- iounmap(io_base);
kfree(bank);

return 0;
--
1.7.9.5

2019-10-04 21:40:04

by Linus Walleij

[permalink] [raw]
Subject: Re: [PATCH 3/3] hwspinlock: u8500_hsem: Use devm_hwspin_lock_register() to register hwlock controller

On Fri, Sep 27, 2019 at 10:28 AM Baolin Wang <[email protected]> wrote:

> Use devm_hwspin_lock_register() to register the hwlock controller instead of
> unregistering the hwlock controller explicitly when removing the device.
>
> Signed-off-by: Baolin Wang <[email protected]>

Reviewed-by: Linus Walleij <[email protected]>

Yours,
Linus Walleij

2019-10-04 21:40:53

by Linus Walleij

[permalink] [raw]
Subject: Re: [PATCH 1/3] hwspinlock: u8500_hsem: Change to use devm_platform_ioremap_resource()

On Fri, Sep 27, 2019 at 10:28 AM Baolin Wang <[email protected]> wrote:

> Use the new helper that wraps the calls to platform_get_resource()
> and devm_ioremap_resource() together, which can simpify the code.
>
> Signed-off-by: Baolin Wang <[email protected]>

Reviewed-by: Linus Walleij <[email protected]>

Yours,
Linus Walleij

2019-10-04 21:41:13

by Linus Walleij

[permalink] [raw]
Subject: Re: [PATCH 2/3] hwspinlock: u8500_hsem: Use devm_kzalloc() to allocate memory

On Fri, Sep 27, 2019 at 10:28 AM Baolin Wang <[email protected]> wrote:

> Use devm_kzalloc() to allocate memory.
>
> Signed-off-by: Baolin Wang <[email protected]>

Reviewed-by: Linus Walleij <[email protected]>

Yours,
Linus Walleij

2019-10-05 04:04:46

by Bjorn Andersson

[permalink] [raw]
Subject: Re: [PATCH 0/3] Optimize the u8500_hsem hwlock driver

On Fri 27 Sep 01:27 PDT 2019, Baolin Wang wrote:

> This patch set did some Optimization with changing to use devm_xxx()
> APIs to simplify the code and make code more readable.
>

Applied, with Linus' r-b

Thanks,
Bjorn

> Baolin Wang (3):
> hwspinlock: u8500_hsem: Change to use
> devm_platform_ioremap_resource()
> hwspinlock: u8500_hsem: Use devm_kzalloc() to allocate memory
> hwspinlock: u8500_hsem: Use devm_hwspin_lock_register() to register
> hwlock controller
>
> drivers/hwspinlock/u8500_hsem.c | 46 +++++++++++----------------------------
> 1 file changed, 13 insertions(+), 33 deletions(-)
>
> --
> 1.7.9.5
>