The driver scans the complete partition for every one of the three header formats it supports. So every non-matching format adds a considerable delay. It therefore makes sense to order the scanning by (assumed) popularity:
1) uimage 2) netgear 3) edimax This is achieved by registering in the reverse order. Typical example of speedup - before: [ 1.340391] 8 fixed-partitions partitions found on MTD device MT7621-NAND [ 1.353897] Creating 8 MTD partitions on "MT7621-NAND": [ 1.364307] 0x000000000000-0x000000100000 : "Bootloader" [ 1.376046] 0x000000100000-0x000000200000 : "MRD" [ 1.386515] 0x000000200000-0x000000300000 : "Factory" [ 1.397648] 0x000000300000-0x000000400000 : "Config" [ 1.408588] 0x000000400000-0x000004400000 : "firmware" [ 2.314262] 2 uimage-fw partitions found on MTD device firmware [ 2.326072] 0x000000400000-0x0000005e0000 : "kernel" [ 2.337227] 0x0000005e0000-0x000004400000 : "ubi" [ 2.348162] 0x000004400000-0x000004500000 : "Private" [ 2.359309] 0x000004500000-0x000005500000 : "Log" [ 2.369891] 0x000005500000-0x000008000000 : "App" [ 2.380691] [mtk_nand] probe successfully! after: [ 1.339471] 8 fixed-partitions partitions found on MTD device MT7621-NAND [ 1.352981] Creating 8 MTD partitions on "MT7621-NAND": [ 1.363387] 0x000000000000-0x000000100000 : "Bootloader" [ 1.375150] 0x000000100000-0x000000200000 : "MRD" [ 1.385603] 0x000000200000-0x000000300000 : "Factory" [ 1.396744] 0x000000300000-0x000000400000 : "Config" [ 1.407705] 0x000000400000-0x000004400000 : "firmware" [ 1.716393] 2 uimage-fw partitions found on MTD device firmware [ 1.728233] 0x000000400000-0x0000005e0000 : "kernel" [ 1.739291] 0x0000005e0000-0x000004400000 : "ubi" [ 1.750251] 0x000004400000-0x000004500000 : "Private" [ 1.761403] 0x000004500000-0x000005500000 : "Log" [ 1.771983] 0x000005500000-0x000008000000 : "App" [ 1.782811] [mtk_nand] probe successfully! The time spent in mtdsplit was reduced from .9 to .3 seconds! Signed-off-by: Bjørn Mork <bj...@mork.no> --- Stumbled across this while fiddling with a new device. There is still much room for improvements here, but this simple reordering seems like a quick fix. At least for uimage devices... For further improments: - Do we have to scan the whole partition? - Can we run a list of header matching functions against the block we want to test instead of having to read through every block before continuing to the next matching function? Bjørn target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_uimage.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_uimage.c b/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_uimage.c index bd1c723e7499..4194c547cc2e 100644 --- a/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_uimage.c +++ b/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_uimage.c @@ -351,9 +351,9 @@ static struct mtd_part_parser uimage_edimax_parser = { static int __init mtdsplit_uimage_init(void) { - register_mtd_parser(&uimage_generic_parser); - register_mtd_parser(&uimage_netgear_parser); register_mtd_parser(&uimage_edimax_parser); + register_mtd_parser(&uimage_netgear_parser); + register_mtd_parser(&uimage_generic_parser); return 0; } -- 2.11.0 _______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel