2022-11-20 08:39:54

by Christophe JAILLET

[permalink] [raw]
Subject: [PATCH] mailbox: zynq: Switch to flexible array to simplify code

Using flexible array is more straight forward. It
- saves 1 pointer in the 'zynqmp_ipi_pdata' structure
- saves an indirection when using this array
- saves some LoC and avoids some always spurious pointer arithmetic

Signed-off-by: Christophe JAILLET <[email protected]>
---
Compile tested only
---
drivers/mailbox/zynqmp-ipi-mailbox.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/mailbox/zynqmp-ipi-mailbox.c b/drivers/mailbox/zynqmp-ipi-mailbox.c
index 31a0fa914274..68e5726f5157 100644
--- a/drivers/mailbox/zynqmp-ipi-mailbox.c
+++ b/drivers/mailbox/zynqmp-ipi-mailbox.c
@@ -110,7 +110,7 @@ struct zynqmp_ipi_pdata {
unsigned int method;
u32 local_id;
int num_mboxes;
- struct zynqmp_ipi_mbox *ipi_mboxes;
+ struct zynqmp_ipi_mbox ipi_mboxes[];
};

static struct device_driver zynqmp_ipi_mbox_driver = {
@@ -633,7 +633,7 @@ static int zynqmp_ipi_probe(struct platform_device *pdev)
int num_mboxes, ret = -EINVAL;

num_mboxes = of_get_child_count(np);
- pdata = devm_kzalloc(dev, sizeof(*pdata) + (num_mboxes * sizeof(*mbox)),
+ pdata = devm_kzalloc(dev, struct_size(pdata, ipi_mboxes, num_mboxes),
GFP_KERNEL);
if (!pdata)
return -ENOMEM;
@@ -647,8 +647,6 @@ static int zynqmp_ipi_probe(struct platform_device *pdev)
}

pdata->num_mboxes = num_mboxes;
- pdata->ipi_mboxes = (struct zynqmp_ipi_mbox *)
- ((char *)pdata + sizeof(*pdata));

mbox = pdata->ipi_mboxes;
for_each_available_child_of_node(np, nc) {
--
2.34.1



2022-12-23 02:39:39

by Tanmay Shah

[permalink] [raw]
Subject:

Thanks for your patch. The patch looks good to me.

From 48e51754dd7cd49abdf3adc7a01e6863bf5e3764 Mon Sep 17 00:00:00 2001
From: Christophe JAILLET <[email protected]>
Date: Sun, 20 Nov 2022 09:25:54 +0100
Subject: [PATCH] mailbox: zynq: Switch to flexible array to simplify code

>Using flexible array is more straight forward. It
> - saves 1 pointer in the 'zynqmp_ipi_pdata' structure
> - saves an indirection when using this array
> - saves some LoC and avoids some always spurious pointer arithmetic
>
>Signed-off-by: Christophe JAILLET <[email protected]>
>---
> drivers/mailbox/zynqmp-ipi-mailbox.c | 6 ++----
> 1 file changed, 2 insertions(+), 4 deletions(-)
>
>diff --git a/drivers/mailbox/zynqmp-ipi-mailbox.c b/drivers/mailbox/zynqmp-ipi-mailbox.c
>index 12e004ff1a14..a4c8d23c76e2 100644
>--- a/drivers/mailbox/zynqmp-ipi-mailbox.c
>+++ b/drivers/mailbox/zynqmp-ipi-mailbox.c
>@@ -110,7 +110,7 @@ struct zynqmp_ipi_pdata {
> unsigned int method;
> u32 local_id;
> int num_mboxes;
>- struct zynqmp_ipi_mbox *ipi_mboxes;
>+ struct zynqmp_ipi_mbox ipi_mboxes[];
> };
>
> static struct device_driver zynqmp_ipi_mbox_driver = {
>@@ -635,7 +635,7 @@ static int zynqmp_ipi_probe(struct platform_device *pdev)
> int num_mboxes, ret = -EINVAL;
>
> num_mboxes = of_get_child_count(np);
>- pdata = devm_kzalloc(dev, sizeof(*pdata) + (num_mboxes * sizeof(*mbox)),
>+ pdata = devm_kzalloc(dev, struct_size(pdata, ipi_mboxes, num_mboxes),
> GFP_KERNEL);
> if (!pdata)
> return -ENOMEM;
>@@ -649,8 +649,6 @@ static int zynqmp_ipi_probe(struct platform_device *pdev)
> }
>
> pdata->num_mboxes = num_mboxes;
>- pdata->ipi_mboxes = (struct zynqmp_ipi_mbox *)
>- ((char *)pdata + sizeof(*pdata));
>
> mbox = pdata->ipi_mboxes;
> for_each_available_child_of_node(np, nc) {
>
>--
>2.25.1

2022-12-23 03:54:13

by Tanmay Shah

[permalink] [raw]
Subject: RE: [PATCH] mailbox: zynq: Switch to flexible array to simplify code

Reviewed-by: Tanmay Shah <[email protected]>

Thanks for your patch. The patch looks good to me.

(Update: Fixed subject of email)

From 48e51754dd7cd49abdf3adc7a01e6863bf5e3764 Mon Sep 17 00:00:00 2001
>From: Christophe JAILLET <[email protected]>
>Date: Sun, 20 Nov 2022 09:25:54 +0100
>Subject: [PATCH] mailbox: zynq: Switch to flexible array to simplify code
>
>Using flexible array is more straight forward. It
> - saves 1 pointer in the 'zynqmp_ipi_pdata' structure
> - saves an indirection when using this array
> - saves some LoC and avoids some always spurious pointer arithmetic
>
>Signed-off-by: Christophe JAILLET <[email protected]>
>---
> drivers/mailbox/zynqmp-ipi-mailbox.c | 6 ++----
> 1 file changed, 2 insertions(+), 4 deletions(-)
>
>diff --git a/drivers/mailbox/zynqmp-ipi-mailbox.c b/drivers/mailbox/zynqmp-ipi-mailbox.c
>index 12e004ff1a14..a4c8d23c76e2 100644
>--- a/drivers/mailbox/zynqmp-ipi-mailbox.c
>+++ b/drivers/mailbox/zynqmp-ipi-mailbox.c
>@@ -110,7 +110,7 @@ struct zynqmp_ipi_pdata {
> unsigned int method;
> u32 local_id;
> int num_mboxes;
>- struct zynqmp_ipi_mbox *ipi_mboxes;
>+ struct zynqmp_ipi_mbox ipi_mboxes[];
> };
>
> static struct device_driver zynqmp_ipi_mbox_driver = {
>@@ -635,7 +635,7 @@ static int zynqmp_ipi_probe(struct platform_device *pdev)
> int num_mboxes, ret = -EINVAL;
>
> num_mboxes = of_get_child_count(np);
>- pdata = devm_kzalloc(dev, sizeof(*pdata) + (num_mboxes * sizeof(*mbox)),
>+ pdata = devm_kzalloc(dev, struct_size(pdata, ipi_mboxes, num_mboxes),
> GFP_KERNEL);
> if (!pdata)
> return -ENOMEM;
>@@ -649,8 +649,6 @@ static int zynqmp_ipi_probe(struct platform_device *pdev)
> }
>
> pdata->num_mboxes = num_mboxes;
>- pdata->ipi_mboxes = (struct zynqmp_ipi_mbox *)
>- ((char *)pdata + sizeof(*pdata));
>
> mbox = pdata->ipi_mboxes;
> for_each_available_child_of_node(np, nc) {
>
>--
>2.25.1