All of lore.kernel.org
 help / color / mirror / Atom feed
From: Boris Brezillon <boris.brezillon@collabora.com>
To: "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com>
Cc: linux-mtd@lists.infradead.org, Alban Bedel <albeu@free.fr>
Subject: Re: [PATCH] drivers/mtd: Fix device registration error
Date: Tue, 5 Feb 2019 23:48:43 +0100	[thread overview]
Message-ID: <20190205234805.5558ef98@gmail.com> (raw)
In-Reply-To: <20190205090547.8418-1-aneesh.kumar@linux.ibm.com>

Hello Aneesh,

On Tue,  5 Feb 2019 14:35:47 +0530
"Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com> wrote:

> This change helps me to get multiple mtd device registered. Without this
> I get
> 
> sysfs: cannot create duplicate filename '/bus/nvmem/devices/flash0'
> CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.0.0-rc2-00557-g1ef20ef21f22 #13
> Call Trace:
> [c0000000b38e3220] [c000000000b58fe4] dump_stack+0xe8/0x164 (unreliable)
> [c0000000b38e3270] [c0000000004cf074] sysfs_warn_dup+0x84/0xb0
> [c0000000b38e32f0] [c0000000004cf6c4] sysfs_do_create_link_sd.isra.0+0x114/0x150
> [c0000000b38e3340] [c000000000726a84] bus_add_device+0x94/0x1e0
> [c0000000b38e33c0] [c0000000007218f0] device_add+0x4d0/0x830
> [c0000000b38e3480] [c0000000009d54a8] nvmem_register.part.2+0x1c8/0xb30
> [c0000000b38e3560] [c000000000834530] mtd_nvmem_add+0x90/0x120
> [c0000000b38e3650] [c000000000835bc8] add_mtd_device+0x198/0x4e0
> [c0000000b38e36f0] [c00000000083619c] mtd_device_parse_register+0x11c/0x280
> [c0000000b38e3780] [c000000000840830] powernv_flash_probe+0x180/0x250
> [c0000000b38e3820] [c00000000072c120] platform_drv_probe+0x60/0xf0
> [c0000000b38e38a0] [c0000000007283c8] really_probe+0x138/0x4d0
> [c0000000b38e3930] [c000000000728acc] driver_probe_device+0x13c/0x1b0
> [c0000000b38e39b0] [c000000000728c7c] __driver_attach+0x13c/0x1c0
> [c0000000b38e3a30] [c000000000725130] bus_for_each_dev+0xa0/0x120
> [c0000000b38e3a90] [c000000000727b2c] driver_attach+0x2c/0x40
> [c0000000b38e3ab0] [c0000000007270f8] bus_add_driver+0x228/0x360
> [c0000000b38e3b40] [c00000000072a2e0] driver_register+0x90/0x1a0
> [c0000000b38e3bb0] [c00000000072c020] __platform_driver_register+0x50/0x70
> [c0000000b38e3bd0] [c00000000105c984] powernv_flash_driver_init+0x24/0x38
> [c0000000b38e3bf0] [c000000000010904] do_one_initcall+0x84/0x464
> [c0000000b38e3cd0] [c000000001004548] kernel_init_freeable+0x530/0x634
> [c0000000b38e3db0] [c000000000011154] kernel_init+0x1c/0x168
> [c0000000b38e3e20] [c00000000000bed4] ret_from_kernel_thread+0x5c/0x68
> mtd mtd1: Failed to register NVMEM device
> 
> With the change we now have
> 
> /sys/bus/nvmem/devices# ls -al
> total 0
> drwxr-xr-x 2 root root 0 Feb  5 12:21 .
> drwxr-xr-x 4 root root 0 Feb  5 12:21 ..
> lrwxrwxrwx 1 root root 0 Feb  5 12:21 flash0 -> ../../../devices/platform/ibm,opal:flash@0/mtd/mtd0/flash0
> lrwxrwxrwx 1 root root 0 Feb  5 12:21 flash1 -> ../../../devices/platform/ibm,opal:flash@1/mtd/mtd1/flash1
> 
> Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
> ---
>  drivers/mtd/mtdcore.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c
> index 999b705769a8..90035da3423c 100644
> --- a/drivers/mtd/mtdcore.c
> +++ b/drivers/mtd/mtdcore.c
> @@ -503,10 +503,11 @@ static int mtd_nvmem_reg_read(void *priv, unsigned int offset,
>  	return retlen == bytes ? 0 : -EIO;
>  }
>  
> -static int mtd_nvmem_add(struct mtd_info *mtd)
> +static int mtd_nvmem_add(struct mtd_info *mtd, int i)
>  {
>  	struct nvmem_config config = {};
>  
> +	config.id = i;
>  	config.dev = &mtd->dev;
>  	config.name = mtd->name;

mtd->name should be unique in the first place, otherwise mtdparts
parsing won't work (it's using mtd->name to match the device
partitions should be applied to) and I guess there might be other
issues. I know it's currently not enforced, but this kind of
situation makes me realize we should enforce it.

So the right fix would be to have config.id = -1 and ensure mtd->name
is unique at MTD registration time.

Back to your specific powernv case, using DT node name doesn't work, as
the @<id> suffix is dropped, which means all your flash devices are
named 'flash'.

>  	config.owner = THIS_MODULE;
> @@ -616,7 +617,7 @@ int add_mtd_device(struct mtd_info *mtd)
>  		goto fail_added;
>  
>  	/* Add the nvmem provider */
> -	error = mtd_nvmem_add(mtd);
> +	error = mtd_nvmem_add(mtd, i);
>  	if (error)
>  		goto fail_nvmem_add;
>  

Regards,

Boris

______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/

  reply	other threads:[~2019-02-05 22:48 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-02-05  9:05 [PATCH] drivers/mtd: Fix device registration error Aneesh Kumar K.V
2019-02-05 22:48 ` Boris Brezillon [this message]
2019-02-06  4:52   ` Aneesh Kumar K.V
2019-02-06  6:40     ` Boris Brezillon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190205234805.5558ef98@gmail.com \
    --to=boris.brezillon@collabora.com \
    --cc=albeu@free.fr \
    --cc=aneesh.kumar@linux.ibm.com \
    --cc=linux-mtd@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.