On Fri, Dec 11, 2015 at 09:39:18PM -0800, Brian Norris wrote:
> On Sat, Dec 12, 2015 at 05:45:21AM +0100, Heiko Schocher wrote:
> > Am 12.12.2015 um 00:58 schrieb Brian Norris:
> > >Commit 807f16d4db95 ("mtd: core: set some defaults when dev.parent is
> > >set") attempted to provide some default settings for MTDs that
> > >  (a) assign the parent device and
> > >  (b) don't provide their own name or owner
> > >
> > >However, this isn't a perfect drop-in replacement for the boilerplate
> > >found in some drivers, because the MTD name is used by partition
> > >parsers like cmdlinepart, but the name isn't set until add_mtd_device(),
> > >after the parsing is completed. This means cmdlinepart sees a NULL name
> > >and therefore will not work properly.
> > >
> > >Fix this by moving the default name and owner assignment to be first in
> > >the MTD registration process.
> > >
> > >Fixes: 807f16d4db95 ("mtd: core: set some defaults when dev.parent is set")
> > >Reported-by: Heiko Schocher <h...@denx.de>
> > >Signed-off-by: Brian Norris <computersforpe...@gmail.com>
> > >Cc: Heiko Schocher <h...@denx.de>
> > >Cc: Frans Klaver <franskla...@gmail.com>
> > >---
> > >Heiko, can you provide testing feedback (e.g., 'Tested-by: ...')?
> > 
> > Sorry, does not work for me:
> > 
> > Based on:
> > pollux:linux hs [20151212] $ git describe master
> > v4.4-rc4-135-gb9d8545
> > 
> > and this patch, shows the same problem,
> 
> [...]

BTW, can you please include the relevant log snippets when replying in
the future?

> Ugh, I see the problem. In nand_base.c, nand_get_flash_type():
> 
>       if (!mtd->name)
>               mtd->name = type->name;

Specifically, I think we could hack around this with something like the
following additional patch. Untested:

diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
index ece544efccc3..9f169566fba4 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
@@ -3826,6 +3826,9 @@ static struct nand_flash_dev *nand_get_flash_type(struct 
mtd_info *mtd,
        if (!type)
                type = nand_flash_ids;
 
+       if (!mtd->name && mtd->dev.parent)
+               mtd->name = dev_name(mtd->dev.parent);
+
        for (; type->name != NULL; type++) {
                if (is_full_id_nand(type)) {
                        if (find_full_id_nand(mtd, chip, type, id_data, &busw))
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to