• Thomas Petazzoni's avatar
    mtd: nand: reduce the warning noise when the ECC is too weak · 54c39e9b
    Thomas Petazzoni authored
    In commit 67a9ad9b ("mtd: nand: Warn the user if the selected ECC
    strength is too weak"), a check was added to inform the user when the
    ECC used for a NAND device is weaker than the recommended ECC
    advertised by the NAND chip. However, the warning uses WARN_ON(),
    which has two undesirable side-effects:
    
     - It just prints to the kernel log the fact that there is a warning
       in this file, at this line, but it doesn't explain anything about
       the warning itself.
    
     - It dumps a stack trace which is very noisy, for something that the
       user is most likely not able to fix. If a certain ECC used by the
       kernel is weaker than the advertised one, it's most likely to make
       sure the kernel uses an ECC that is compatible with the one used by
       the bootloader, and changing the bootloader may not necessarily be
       easy. Therefore, normal users would not be able to do anything to
       fix this very noisy warning, and will have to suffer from it at
       every kernel boot. At least every time I see this stack trace in my
       kernel boot log, I wonder what new thing is broken, just to realize
       that it's once again this NAND ECC warning.
    
    Therefore, this commit turns:
    
    ------------[ cut here ]------------
    WARNING: CPU: 0 PID: 1 at /home/thomas/projets/linux-2.6/drivers/mtd/nand/nand_base.c:4051 nand_scan_tail+0x538/0x780()
    Modules linked in:
    CPU: 0 PID: 1 Comm: swapper Not tainted 3.16.0-rc3-dirty #4
    [<c000e3dc>] (unwind_backtrace) from [<c000bee4>] (show_stack+0x10/0x14)
    [<c000bee4>] (show_stack) from [<c0018180>] (warn_slowpath_common+0x6c/0x8c)
    [<c0018180>] (warn_slowpath_common) from [<c001823c>] (warn_slowpath_null+0x1c/0x24)
    [<c001823c>] (warn_slowpath_null) from [<c02c50cc>] (nand_scan_tail+0x538/0x780)
    [<c02c50cc>] (nand_scan_tail) from [<c0639f78>] (orion_nand_probe+0x224/0x2e4)
    [<c0639f78>] (orion_nand_probe) from [<c026da00>] (platform_drv_probe+0x18/0x4c)
    [<c026da00>] (platform_drv_probe) from [<c026c1f4>] (really_probe+0x80/0x218)
    [<c026c1f4>] (really_probe) from [<c026c47c>] (__driver_attach+0x98/0x9c)
    [<c026c47c>] (__driver_attach) from [<c026a8f0>] (bus_for_each_dev+0x64/0x94)
    [<c026a8f0>] (bus_for_each_dev) from [<c026bae4>] (bus_add_driver+0x144/0x1ec)
    [<c026bae4>] (bus_add_driver) from [<c026cb00>] (driver_register+0x78/0xf8)
    [<c026cb00>] (driver_register) from [<c026da5c>] (platform_driver_probe+0x20/0xb8)
    [<c026da5c>] (platform_driver_probe) from [<c00088b8>] (do_one_initcall+0x80/0x1d8)
    [<c00088b8>] (do_one_initcall) from [<c0620c9c>] (kernel_init_freeable+0xf4/0x1b4)
    [<c0620c9c>] (kernel_init_freeable) from [<c049a098>] (kernel_init+0x8/0xec)
    [<c049a098>] (kernel_init) from [<c00095f0>] (ret_from_fork+0x14/0x24)
    ---[ end trace 62f87d875aceccb4 ]---
    
    Into the much shorter, and much more useful:
    
    nand: WARNING: MT29F2G08ABAEAWP: the ECC used on your system is too weak compared to the one required by the NAND chip
    Signed-off-by: default avatarThomas Petazzoni <thomas.petazzoni@free-electrons.com>
    Signed-off-by: default avatarBrian Norris <computersforpeace@gmail.com>
    54c39e9b
nand_base.c 110 KB