Re: linux-next: build failure after merge of the mfd tree

Lee Jones
2020-07-17T06:56:44Z

On Fri, 17 Jul 2020, Stephen Rothwell wrote:

> Hi all,
>
> After merging the mfd tree, today's linux-next build (x86_64 allmodconfig)
> failed like this:
>
> drivers/mfd/kempld-core.c: In function 'kempld_register_cells_generic':
> drivers/mfd/kempld-core.c:105:13: error: assignment of read-only location 'devs[i++]'
> 105 | devs[i++] = kempld_devs[KEMPLD_I2C];
> | ^
> drivers/mfd/kempld-core.c:108:13: error: assignment of read-only location 'devs[i++]'
> 108 | devs[i++] = kempld_devs[KEMPLD_WDT];
> | ^
> drivers/mfd/kempld-core.c:111:13: error: assignment of read-only location 'devs[i++]'
> 111 | devs[i++] = kempld_devs[KEMPLD_GPIO];
> | ^
> drivers/mfd/kempld-core.c:114:13: error: assignment of read-only location 'devs[i++]'
> 114 | devs[i++] = kempld_devs[KEMPLD_UART];
> | ^
>
> Caused by commit
>
> 70d48975c152 ("mfd: core: Make a best effort attempt to match devices with the correct of_nodes")
>
> I have added the following fix patch for today (I assume that there is
> a better solution):
>
> From: Stephen Rothwell <sfr@canb.auug.org.au>
> Date: Fri, 17 Jul 2020 13:36:22 +1000
> Subject: [PATCH] fix up for struct mfd_cell change
>
> Fixes: 70d48975c152 ("mfd: core: Make a best effort attempt to match devices with the correct of_nodes")

Thanks for fixing this Stephen.

I need to investigate why this didn't show up during my own testing.

> Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au>
> ---
> drivers/mfd/kempld-core.c | 28 ++++++++++------------------
> 1 file changed, 10 insertions(+), 18 deletions(-)
>
> diff --git a/drivers/mfd/kempld-core.c b/drivers/mfd/kempld-core.c
> index f48e21d8b97c..ad68ee699cb5 100644
> --- a/drivers/mfd/kempld-core.c
> +++ b/drivers/mfd/kempld-core.c
> @@ -79,39 +79,31 @@ enum kempld_cells {
> KEMPLD_UART,
> };
>
> -static const struct mfd_cell kempld_devs[] = {
> - [KEMPLD_I2C] = {
> - .name = "kempld-i2c",
> - },
> - [KEMPLD_WDT] = {
> - .name = "kempld-wdt",
> - },
> - [KEMPLD_GPIO] = {
> - .name = "kempld-gpio",
> - },
> - [KEMPLD_UART] = {
> - .name = "kempld-uart",
> - },
> +static const char *kempld_devs[] = {

Do you mind if I change this to 'kempld_dev_names' and still keep your
SoB?

> + [KEMPLD_I2C] = "kempld-i2c",
> + [KEMPLD_WDT] = "kempld-wdt",
> + [KEMPLD_GPIO] = "kempld-gpio",
> + [KEMPLD_UART] = "kempld-uart",
> };
>
> #define KEMPLD_MAX_DEVS ARRAY_SIZE(kempld_devs)
>
> static int kempld_register_cells_generic(struct kempld_device_data *pld)
> {
> - struct mfd_cell devs[KEMPLD_MAX_DEVS];
> + struct mfd_cell devs[KEMPLD_MAX_DEVS] = {};
> int i = 0;
>
> if (pld->feature_mask & KEMPLD_FEATURE_BIT_I2C)
> - devs[i++] = kempld_devs[KEMPLD_I2C];
> + devs[i++].name = kempld_devs[KEMPLD_I2C];
>
> if (pld->feature_mask & KEMPLD_FEATURE_BIT_WATCHDOG)
> - devs[i++] = kempld_devs[KEMPLD_WDT];
> + devs[i++].name = kempld_devs[KEMPLD_WDT];
>
> if (pld->feature_mask & KEMPLD_FEATURE_BIT_GPIO)
> - devs[i++] = kempld_devs[KEMPLD_GPIO];
> + devs[i++].name = kempld_devs[KEMPLD_GPIO];
>
> if (pld->feature_mask & KEMPLD_FEATURE_MASK_UART)
> - devs[i++] = kempld_devs[KEMPLD_UART];
> + devs[i++].name = kempld_devs[KEMPLD_UART];
>
> return mfd_add_devices(pld->dev, -1, devs, i, NULL, 0, NULL);
> }

--
Lee Jones [李琼斯]
Senior Technical Lead - Developer Services
Linaro.org │ Open source software for Arm SoCs
Follow Linaro: Facebook | Twitter | Blog