linux/drivers/mtd/nand
Thomas Petazzoni 54c39e9ba3 mtd: nand: reduce the warning noise when the ECC is too weak
In commit 67a9ad9b8a ("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: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
2014-07-13 22:19:02 -07:00
..
bcm47xxnflash mtd: bcm47xxnflash: Use devm_kzalloc 2013-11-06 23:32:56 -08:00
gpmi-nand mtd: gpmi: add gpmi support for imx6sx 2014-05-28 16:02:16 -07:00
ams-delta.c mtd: delete non-required instances of include <linux/init.h> 2014-03-10 22:42:22 -07:00
atmel_nand_ecc.h
atmel_nand_nfc.h mtd: atmel_nand: add Nand Flash Controller (NFC) support 2013-08-05 21:07:41 +01:00
atmel_nand.c mtd: atmel_nand: Disable subpage NAND write when using Atmel PMECC 2014-03-10 22:42:31 -07:00
au1550nd.c mtd: nand: force NAND_CMD_READID onto 8-bit bus 2014-03-10 22:42:22 -07:00
bf5xx_nand.c mtd: bf5xx_nand: use the managed version of kzalloc 2014-05-28 13:27:55 -07:00
cafe_nand.c mtd: nand: kill the the NAND_MAX_PAGESIZE/NAND_MAX_OOBSIZE for nand_buffers{} 2014-03-10 22:42:22 -07:00
cmx270_nand.c mtd: cmx270_nand: Remove unnecessary OOM messages 2014-01-03 11:22:29 -08:00
cs553x_nand.c mtd: cs553x_nand: Remove unnecessary OOM messages 2014-01-03 11:22:29 -08:00
davinci_nand.c mtd: davinci-nand: disable subpage write for keystone-nand 2014-04-30 15:26:49 -07:00
denali_dt.c mtd: denali_dt: Use devm_ioremap_resource() 2014-03-25 23:21:08 -07:00
denali_pci.c mtd: denali: Drop print of build date/time 2014-01-09 08:52:48 -08:00
denali.c mtd: nand: refactor erase_cmd() to return chip status 2014-05-09 13:19:42 -07:00
denali.h mtd: denali: kill the NAND_MAX_PAGESIZE/NAND_MAX_OOBSIZE 2014-01-11 12:20:15 -08:00
diskonchip.c mtd: diskonchip: mem resource name is not optional 2014-03-31 18:43:22 -07:00
docg4.c mtd: nand: refactor erase_cmd() to return chip status 2014-05-09 13:19:42 -07:00
fsl_elbc_nand.c mtd: eLBC NAND: fix subpage write support 2014-05-20 16:35:31 -07:00
fsl_ifc_nand.c mtd: fsl_ifc_nand: Workaround bogus WP on 16-bit NAND 2014-05-20 17:36:34 -07:00
fsl_upm.c drivers: clean-up prom.h implicit includes 2013-10-09 20:04:04 -05:00
fsmc_nand.c mtd: fsmc_nand: use dev_warn() instead of printk() 2014-01-07 10:07:03 -08:00
gpio.c mtd: delete non-required instances of include <linux/init.h> 2014-03-10 22:42:22 -07:00
jz4740_nand.c mtd: jz4740_nand: Remove unnecessary OOM messages 2014-01-03 11:22:30 -08:00
Kconfig MTD updates for 3.15: 2014-04-07 10:17:30 -07:00
lpc32xx_mlc.c mtd: lpc32xx_mlc: Remove unnecessary OOM messages 2014-01-07 10:06:58 -08:00
lpc32xx_slc.c mtd: lpc32xx_slc: Remove unnecessary OOM messages 2014-01-07 10:07:00 -08:00
Makefile mtd: remove alauda driver 2013-08-30 21:51:57 +01:00
mpc5121_nfc.c mtd: delete non-required instances of include <linux/init.h> 2014-03-10 22:42:22 -07:00
mxc_nand.c mtd: mxc_nand: Propagate the error if platform_get_irq() fails 2014-03-10 22:42:26 -07:00
nand_base.c mtd: nand: reduce the warning noise when the ECC is too weak 2014-07-13 22:19:02 -07:00
nand_bbt.c mtd: nand_bbt: handle error case for nand_create_badblock_pattern() 2014-05-28 00:05:25 -07:00
nand_bch.c
nand_ecc.c mtd: nand: add line feed to pr_err 2014-04-16 00:18:26 -07:00
nand_ids.c mtd: nand: add support for SanDisk SDTNRGAMA-008G 2014-03-10 22:42:22 -07:00
nandsim.c replace checking for ->read/->aio_read presence with check in ->f_mode 2014-05-06 17:32:55 -04:00
ndfc.c drivers: clean-up prom.h implicit includes 2013-10-09 20:04:04 -05:00
nuc900_nand.c mtd: nuc900_nand: NULL dereference in nuc900_nand_enable() 2014-03-10 22:42:27 -07:00
omap2.c mtd: nand: omap: fix omap_calculate_ecc_bch() for-loop error 2014-05-28 13:13:00 -07:00
orion_nand.c mtd: orion_nand: Make of_device_id array const 2014-05-20 16:35:30 -07:00
pasemi_nand.c mtd: delete non-required instances of include <linux/init.h> 2014-03-10 22:42:22 -07:00
plat_nand.c mtd: plat_nand: remove redundant return value check of platform_get_resource() 2014-01-20 11:37:29 -08:00
pxa3xx_nand.c mtd: pxa3xx_nand: make the driver work on big-endian systems 2014-05-28 13:27:37 -07:00
r852.c mtd: nand: r852: correct write_buf loop bounds 2014-05-28 00:05:26 -07:00
r852.h
s3c2410.c mtd: delete non-required instances of include <linux/init.h> 2014-03-10 22:42:22 -07:00
sh_flctl.c PM / QoS: Rename device resume latency QoS items 2014-02-11 00:35:23 +01:00
sharpsl.c mtd: sharpsl: use dev_err() instead of printk() 2014-01-07 10:07:31 -08:00
sm_common.c mtd: nand: refactor chip->block_markbad interface 2013-08-30 16:47:52 +01:00
sm_common.h
socrates_nand.c MTD merge for 3.13 2013-11-14 12:31:43 +09:00
tmio_nand.c mtd: tmio_nand: Use devm_*() functions 2014-01-03 11:22:28 -08:00
txx9ndfmc.c mtd: txx9ndfmc: Remove unnecessary OOM messages 2014-01-03 11:22:30 -08:00
xway_nand.c