2019-12-26 09:53:47

by Masahiro Yamada

[permalink] [raw]
Subject: [PATCH 2/2] iommu/arm-smmu-v3: simplify parse_driver_options()

Using ARRAY_SIZE() instead of the sentinel is slightly simpler, IMHO.

Signed-off-by: Masahiro Yamada <[email protected]>
---

drivers/iommu/arm-smmu-v3.c | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/drivers/iommu/arm-smmu-v3.c b/drivers/iommu/arm-smmu-v3.c
index ed9933960370..b27489b7f9d8 100644
--- a/drivers/iommu/arm-smmu-v3.c
+++ b/drivers/iommu/arm-smmu-v3.c
@@ -676,7 +676,6 @@ struct arm_smmu_option_prop {
static const struct arm_smmu_option_prop arm_smmu_options[] = {
{ ARM_SMMU_OPT_SKIP_PREFETCH, "hisilicon,broken-prefetch-cmd" },
{ ARM_SMMU_OPT_PAGE0_REGS_ONLY, "cavium,cn9900-broken-page1-regspace"},
- { 0, NULL},
};

static inline void __iomem *arm_smmu_page1_fixup(unsigned long offset,
@@ -696,16 +695,16 @@ static struct arm_smmu_domain *to_smmu_domain(struct iommu_domain *dom)

static void parse_driver_options(struct arm_smmu_device *smmu)
{
- int i = 0;
+ int i;

- do {
+ for (i = 0; i < ARRAY_SIZE(arm_smmu_options); i++) {
if (of_property_read_bool(smmu->dev->of_node,
arm_smmu_options[i].prop)) {
smmu->options |= arm_smmu_options[i].opt;
dev_notice(smmu->dev, "option %s\n",
arm_smmu_options[i].prop);
}
- } while (arm_smmu_options[++i].opt);
+ };
}

/* Low-level queue manipulation functions */
--
2.17.1


2020-01-09 16:27:44

by Robin Murphy

[permalink] [raw]
Subject: Re: [PATCH 2/2] iommu/arm-smmu-v3: simplify parse_driver_options()

On 26/12/2019 9:51 am, Masahiro Yamada wrote:
> Using ARRAY_SIZE() instead of the sentinel is slightly simpler, IMHO.

Given that it's fairly well-decided that we don't want to add any more
of these anyway, I'd be inclined to lose the array/loop machinery
altogether. As it is we'd need a lot more options for it to actually
offer any kind of code size saving.

Robin.

> Signed-off-by: Masahiro Yamada <[email protected]>
> ---
>
> drivers/iommu/arm-smmu-v3.c | 7 +++----
> 1 file changed, 3 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/iommu/arm-smmu-v3.c b/drivers/iommu/arm-smmu-v3.c
> index ed9933960370..b27489b7f9d8 100644
> --- a/drivers/iommu/arm-smmu-v3.c
> +++ b/drivers/iommu/arm-smmu-v3.c
> @@ -676,7 +676,6 @@ struct arm_smmu_option_prop {
> static const struct arm_smmu_option_prop arm_smmu_options[] = {
> { ARM_SMMU_OPT_SKIP_PREFETCH, "hisilicon,broken-prefetch-cmd" },
> { ARM_SMMU_OPT_PAGE0_REGS_ONLY, "cavium,cn9900-broken-page1-regspace"},
> - { 0, NULL},
> };
>
> static inline void __iomem *arm_smmu_page1_fixup(unsigned long offset,
> @@ -696,16 +695,16 @@ static struct arm_smmu_domain *to_smmu_domain(struct iommu_domain *dom)
>
> static void parse_driver_options(struct arm_smmu_device *smmu)
> {
> - int i = 0;
> + int i;
>
> - do {
> + for (i = 0; i < ARRAY_SIZE(arm_smmu_options); i++) {
> if (of_property_read_bool(smmu->dev->of_node,
> arm_smmu_options[i].prop)) {
> smmu->options |= arm_smmu_options[i].opt;
> dev_notice(smmu->dev, "option %s\n",
> arm_smmu_options[i].prop);
> }
> - } while (arm_smmu_options[++i].opt);
> + };
> }
>
> /* Low-level queue manipulation functions */
>