2013.09.25. 11:26 keltezéssel, Gabor Juhos írta: >> Now I tried to create a UBI volume using the initramfs-Kernel. I get >> this kernel crash dump: >> >> # ubiattach -m 8 /dev/ubi_ctrl >> [ 3712.320000] UBI: attaching mtd8 to ubi0 >> [ 3712.510000] UBI: scanning is finished >> [ 3712.520000] UBI: empty MTD device detected >> [ 3712.520000] CPU 0 Unable to handle kernel paging request at virtual >> address 00000000, epc == 00000000, ra == 802094fc >> [ 3712.530000] Oops[#1]: >> [ 3712.530000] CPU: 0 PID: 1216 Comm: ubiattach Not tainted 3.10.12 #10 >> [ 3712.530000] task: 878b5d50 ti: 8654c000 task.ti: 8654c000 >> [ 3712.530000] $ 0 : 00000000 00000001 00000000 8037c810 >> [ 3712.530000] $ 4 : 87826010 00000001 000001ff 00000200 >> [ 3712.530000] $ 8 : 00000005 80064830 00000000 00000000 >> [ 3712.530000] $12 : 00000000 d8197822 00000000 00000000 >> [ 3712.530000] $16 : 878261b8 00000000 87826010 86e34000 >> [ 3712.530000] $20 : 00000200 86e34500 86e34d00 00000007 >> [ 3712.530000] $24 : 00000000 00000000 >> [ 3712.530000] $28 : 8654c000 8654dae8 00000000 802094fc >> [ 3712.530000] Hi : 00000000 >> [ 3712.530000] Lo : 00000010 >> [ 3712.530000] epc : 00000000 (null) >> [ 3712.530000] Not tainted >> [ 3712.530000] ra : 802094fc nand_write_subpage_hwecc+0xa0/0x1c4 > > Hm, this is a NULL pointer dereference. It seems that the > nand_write_subpage_hwecc function tries to run a callback which is not > initialized by the ar934x-nfc driver. I will look into that later.
FYI, I have disabled writing of subpages in the driver. It is not supported by the controller if hardware ECC is used. At least I was not able to make it work. > In the past, I have tested the ar934x-nfc driver (w/o hw ECC) with the modules > provided by the mtdtests package and it passed all tests. Ideally, it should > be > tested again with hw ECC support but that is quite dangerous on devices which > are using a NAND flash only. It passes all MTD tests now. Tested on the first MB of the reserved area on a on the WNDR4300: > root@OpenWrt:/# cat /proc/mtd > dev: size erasesize name > mtd0: 00040000 00020000 "u-boot" > mtd1: 00040000 00020000 "u-boot-env" > mtd2: 00040000 00020000 "caldata" > mtd3: 00080000 00020000 "pot" > mtd4: 00200000 00020000 "language" > mtd5: 00080000 00020000 "config" > mtd6: 00300000 00020000 "traffic_meter" > mtd7: 00120000 00020000 "kernel" > mtd8: 017e0000 00020000 "rootfs" > mtd9: 01900000 00020000 "firmware" > mtd10: 00040000 00020000 "caldata_backup" > mtd11: 00100000 00020000 "test" > mtd12: 05f00000 00020000 "reserved" > root@OpenWrt:/# insmod /lib/modules/3.10.12/mtd_readtest.ko dev=11 > [ 53.390000] > [ 53.390000] ================================================= > [ 53.400000] mtd_readtest: MTD device: 11 > [ 53.400000] mtd_readtest: MTD device size 1048576, eraseblock size 131072, > page size 2048, count of eraseblocks 8, pages per eraseblock 64, OOB size 64 > [ 53.420000] mtd_readtest: scanning for bad eraseblocks > [ 53.420000] mtd_readtest: scanned 8 eraseblocks, 0 are bad > [ 53.430000] mtd_readtest: testing page read > [ 53.760000] mtd_readtest: finished > [ 53.770000] ================================================= > root@OpenWrt:/# insmod /lib/modules/3.10.12/mtd_speedtest.ko dev=11 > [ 115.180000] > [ 115.180000] ================================================= > [ 115.190000] mtd_speedtest: MTD device: 11 > [ 115.190000] mtd_speedtest: MTD device size 1048576, eraseblock size > 131072, page size 2048, count of eraseblocks 8, pages per eraseblock 64, OOB > size 64 > [ 115.210000] mtd_speedtest: scanning for bad eraseblocks > [ 115.220000] mtd_speedtest: scanned 8 eraseblocks, 0 are bad > [ 115.230000] mtd_speedtest: testing eraseblock write speed > [ 115.480000] mtd_speedtest: eraseblock write speed is 4162 KiB/s > [ 115.490000] mtd_speedtest: testing eraseblock read speed > [ 115.800000] mtd_speedtest: eraseblock read speed is 3313 KiB/s > [ 115.810000] mtd_speedtest: testing page write speed > [ 116.070000] mtd_speedtest: page write speed is 4129 KiB/s > [ 116.070000] mtd_speedtest: testing page read speed > [ 116.390000] mtd_speedtest: page read speed is 3303 KiB/s > [ 116.400000] mtd_speedtest: testing 2 page write speed > [ 116.650000] mtd_speedtest: 2 page write speed is 4162 KiB/s > [ 116.660000] mtd_speedtest: testing 2 page read speed > [ 116.970000] mtd_speedtest: 2 page read speed is 3303 KiB/s > [ 116.980000] mtd_speedtest: Testing erase speed > [ 116.990000] mtd_speedtest: erase speed is 170666 KiB/s > [ 116.990000] mtd_speedtest: Testing 2x multi-block erase speed > [ 117.000000] mtd_speedtest: 2x multi-block erase speed is 341333 KiB/s > [ 117.010000] mtd_speedtest: Testing 4x multi-block erase speed > [ 117.020000] mtd_speedtest: 4x multi-block erase speed is 341333 KiB/s > [ 117.020000] mtd_speedtest: Testing 8x multi-block erase speed > [ 117.030000] mtd_speedtest: 8x multi-block erase speed is 341333 KiB/s > [ 117.040000] mtd_speedtest: Testing 16x multi-block erase speed > [ 117.050000] mtd_speedtest: 16x multi-block erase speed is 341333 KiB/s > [ 117.060000] mtd_speedtest: Testing 32x multi-block erase speed > [ 117.070000] mtd_speedtest: 32x multi-block erase speed is 341333 KiB/s > [ 117.070000] mtd_speedtest: Testing 64x multi-block erase speed > [ 117.080000] mtd_speedtest: 64x multi-block erase speed is 341333 KiB/s > [ 117.090000] mtd_speedtest: finished > [ 117.090000] ================================================= > root@OpenWrt:/# insmod /lib/modules/3.10.12/mtd_pagetest.ko dev=11 > [ 134.090000] > [ 134.090000] ================================================= > [ 134.090000] mtd_pagetest: MTD device: 11 > [ 134.100000] mtd_pagetest: MTD device size 1048576, eraseblock size 131072, > page size 2048, count of eraseblocks 8, pages per eraseblock 64, OOB size 64 > [ 134.110000] mtd_pagetest: scanning for bad eraseblocks > [ 134.120000] mtd_pagetest: scanned 8 eraseblocks, 0 are bad > [ 134.120000] mtd_pagetest: erasing whole device > [ 134.130000] mtd_pagetest: erased 8 eraseblocks > [ 134.130000] mtd_pagetest: writing whole device > [ 134.170000] mtd_pagetest: written up to eraseblock 0 > [ 134.410000] mtd_pagetest: written 8 eraseblocks > [ 134.420000] mtd_pagetest: verifying all eraseblocks > [ 134.650000] mtd_pagetest: verified up to eraseblock 0 > [ 136.290000] mtd_pagetest: verified 8 eraseblocks > [ 136.300000] mtd_pagetest: crosstest > [ 136.300000] mtd_pagetest: reading page at 0x0 > [ 136.310000] mtd_pagetest: reading page at 0xff800 > [ 136.310000] mtd_pagetest: reading page at 0x0 > [ 136.320000] mtd_pagetest: verifying pages read at 0x0 match > [ 136.320000] mtd_pagetest: crosstest ok > [ 136.330000] mtd_pagetest: erasecrosstest > [ 136.330000] mtd_pagetest: erasing block 0 > [ 136.340000] mtd_pagetest: writing 1st page of block 0 > [ 136.350000] mtd_pagetest: reading 1st page of block 0 > [ 136.350000] mtd_pagetest: verifying 1st page of block 0 > [ 136.360000] mtd_pagetest: erasing block 0 > [ 136.360000] mtd_pagetest: writing 1st page of block 0 > [ 136.380000] mtd_pagetest: erasing block 7 > [ 136.380000] mtd_pagetest: reading 1st page of block 0 > [ 136.390000] mtd_pagetest: verifying 1st page of block 0 > [ 136.390000] mtd_pagetest: erasecrosstest ok > [ 136.400000] mtd_pagetest: erasetest > [ 136.400000] mtd_pagetest: erasing block 0 > [ 136.410000] mtd_pagetest: writing 1st page of block 0 > [ 136.410000] mtd_pagetest: erasing block 0 > [ 136.420000] mtd_pagetest: reading 1st page of block 0 > [ 136.420000] mtd_pagetest: verifying 1st page of block 0 is all 0xff > [ 136.430000] mtd_pagetest: erasetest ok > [ 136.430000] mtd_pagetest: finished with 0 errors > [ 136.440000] ================================================= > root@OpenWrt:/# insmod /lib/modules/3.10.12/mtd_subpagetest.ko dev=11 > [ 158.500000] > [ 158.500000] ================================================= > [ 158.500000] mtd_subpagetest: MTD device: 11 > [ 158.510000] mtd_subpagetest: MTD device size 1048576, eraseblock size > 131072, page size 2048, subpage size 2048, count of eraseblocks 8, pages per > eraseblock 64, OOB size 64 > [ 158.520000] mtd_subpagetest: scanning for bad eraseblocks > [ 158.530000] mtd_subpagetest: scanned 8 eraseblocks, 0 are bad > [ 158.540000] mtd_subpagetest: erasing whole device > [ 158.550000] mtd_subpagetest: erased 8 eraseblocks > [ 158.550000] mtd_subpagetest: writing whole device > [ 158.560000] mtd_subpagetest: written up to eraseblock 0 > [ 158.570000] mtd_subpagetest: written 8 eraseblocks > [ 158.570000] mtd_subpagetest: verifying all eraseblocks > [ 158.580000] mtd_subpagetest: verified up to eraseblock 0 > [ 158.590000] mtd_subpagetest: verified 8 eraseblocks > [ 158.600000] mtd_subpagetest: erasing whole device > [ 158.610000] mtd_subpagetest: erased 8 eraseblocks > [ 158.610000] mtd_subpagetest: verifying all eraseblocks for 0xff > [ 158.680000] mtd_subpagetest: verified up to eraseblock 0 > [ 159.150000] mtd_subpagetest: verified 8 eraseblocks > [ 159.160000] mtd_subpagetest: writing whole device > [ 159.190000] mtd_subpagetest: written up to eraseblock 0 > [ 159.390000] mtd_subpagetest: written 8 eraseblocks > [ 159.390000] mtd_subpagetest: verifying all eraseblocks > [ 159.430000] mtd_subpagetest: verified up to eraseblock 0 > [ 159.690000] mtd_subpagetest: verified 8 eraseblocks > [ 159.700000] mtd_subpagetest: erasing whole device > [ 159.710000] mtd_subpagetest: erased 8 eraseblocks > [ 159.720000] mtd_subpagetest: verifying all eraseblocks for 0xff > [ 159.790000] mtd_subpagetest: verified up to eraseblock 0 > [ 160.250000] mtd_subpagetest: verified 8 eraseblocks > [ 160.250000] mtd_subpagetest: finished with 0 errors > [ 160.260000] ================================================= > root@OpenWrt:/# insmod /lib/modules/3.10.12/mtd_oobtest.ko dev=11 > [ 186.480000] > [ 186.480000] ================================================= > [ 186.480000] mtd_oobtest: MTD device: 11 > [ 186.490000] mtd_oobtest: MTD device size 1048576, eraseblock size 131072, > page size 2048, count of eraseblocks 8, pages per eraseblock 64, OOB size 64 > [ 186.500000] mtd_oobtest: scanning for bad eraseblocks > [ 186.510000] mtd_oobtest: scanned 8 eraseblocks, 0 are bad > [ 186.510000] mtd_oobtest: test 1 of 5 > [ 186.520000] mtd_oobtest: erasing whole device > [ 186.520000] mtd_oobtest: erased 8 eraseblocks > [ 186.530000] mtd_oobtest: writing OOBs of whole device > [ 186.550000] mtd_oobtest: written up to eraseblock 0 > [ 186.640000] mtd_oobtest: written 8 eraseblocks > [ 186.640000] mtd_oobtest: verifying all eraseblocks > [ 186.650000] mtd_oobtest: verified up to eraseblock 0 > [ 186.670000] mtd_oobtest: verified 8 eraseblocks > [ 186.680000] mtd_oobtest: test 2 of 5 > [ 186.680000] mtd_oobtest: erasing whole device > [ 186.690000] mtd_oobtest: erased 8 eraseblocks > [ 186.690000] mtd_oobtest: writing OOBs of whole device > [ 186.710000] mtd_oobtest: written up to eraseblock 0 > [ 186.800000] mtd_oobtest: written 8 eraseblocks > [ 186.810000] mtd_oobtest: verifying all eraseblocks > [ 186.820000] mtd_oobtest: verified up to eraseblock 0 > [ 186.840000] mtd_oobtest: verified 8 eraseblocks > [ 186.840000] mtd_oobtest: test 3 of 5 > [ 186.850000] mtd_oobtest: erasing whole device > [ 186.860000] mtd_oobtest: erased 8 eraseblocks > [ 186.860000] mtd_oobtest: writing OOBs of whole device > [ 186.880000] mtd_oobtest: written up to eraseblock 0 > [ 186.970000] mtd_oobtest: written 8 eraseblocks > [ 186.970000] mtd_oobtest: verifying all eraseblocks > [ 186.980000] mtd_oobtest: verified up to eraseblock 0 > [ 187.030000] mtd_oobtest: verified 8 eraseblocks > [ 187.030000] mtd_oobtest: test 4 of 5 > [ 187.030000] mtd_oobtest: erasing whole device > [ 187.040000] mtd_oobtest: erased 8 eraseblocks > [ 187.050000] mtd_oobtest: attempting to start write past end of OOB > [ 187.050000] mtd_oobtest: an error is expected... > [ 187.060000] mtd_oobtest: error occurred as expected > [ 187.060000] mtd_oobtest: attempting to start read past end of OOB > [ 187.070000] mtd_oobtest: an error is expected... > [ 187.070000] mtd_oobtest: error occurred as expected > [ 187.080000] mtd_oobtest: attempting to write past end of device > [ 187.080000] mtd_oobtest: an error is expected... > [ 187.090000] mtd_oobtest: error occurred as expected > [ 187.090000] mtd_oobtest: attempting to read past end of device > [ 187.100000] mtd_oobtest: an error is expected... > [ 187.110000] mtd_oobtest: error occurred as expected > [ 187.110000] mtd_oobtest: attempting to write past end of device > [ 187.120000] mtd_oobtest: an error is expected... > [ 187.120000] mtd_oobtest: error occurred as expected > [ 187.130000] mtd_oobtest: attempting to read past end of device > [ 187.130000] mtd_oobtest: an error is expected... > [ 187.140000] mtd_oobtest: error occurred as expected > [ 187.140000] mtd_oobtest: test 5 of 5 > [ 187.150000] mtd_oobtest: erasing whole device > [ 187.150000] mtd_oobtest: erased 8 eraseblocks > [ 187.160000] mtd_oobtest: writing OOBs of whole device > [ 187.160000] mtd_oobtest: written up to eraseblock 0 > [ 187.170000] mtd_oobtest: written up to eraseblock 0 > [ 187.180000] mtd_oobtest: written 7 eraseblocks > [ 187.180000] mtd_oobtest: verifying all eraseblocks > [ 187.190000] mtd_oobtest: verified up to eraseblock 0 > [ 187.190000] mtd_oobtest: verified 7 eraseblocks > [ 187.200000] mtd_oobtest: finished with 0 errors > [ 187.200000] ================================================= > root@OpenWrt:/# insmod /lib/modules/3.10.12/mtd_stresstest.ko dev=11 count=10 > [ 285.120000] > [ 285.130000] ================================================= > [ 285.130000] mtd_stresstest: MTD device: 11 > [ 285.140000] mtd_stresstest: MTD device size 1048576, eraseblock size > 131072, page size 2048, count of eraseblocks 8, pages per eraseblock 64, OOB > size 64 > [ 285.150000] mtd_stresstest: scanning for bad eraseblocks > [ 285.160000] mtd_stresstest: scanned 8 eraseblocks, 0 are bad > [ 285.170000] mtd_stresstest: doing operations > [ 285.170000] mtd_stresstest: 0 operations done > [ 285.460000] mtd_stresstest: finished, 10 operations done > [ 285.470000] ================================================= > root@OpenWrt:/# Did not want to damage the flash, so I did not run the torture test. -Gabor _______________________________________________ openwrt-devel mailing list [email protected] https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
