All of lore.kernel.org
 help / color / mirror / Atom feed
From: Heiko Schocher <hs@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH] ubi: reset relevant globals in ubi_exit()
Date: Fri, 14 Nov 2014 07:20:43 +0100	[thread overview]
Message-ID: <54659F3B.5050108@denx.de> (raw)
In-Reply-To: <1415898328-18819-1-git-send-email-andrew.ruder@elecsyscorp.com>

Hello Andrew,

Am 13.11.2014 18:05, schrieb Andrew Ruder:
> Before calling ubi_init() the U-Boot wrapper calls ubi_mtd_param_parse()
> to have the UBI driver add it to its mtd_dev_param[] array and increment
> mtd_devs.  The first time ubi_init() is called, mtd_devs would be 1.
>
> Before ubi_init() is called again (another partition is attached),
> ubi_mtd_param_parse() is called again, incrementing mtd_devs again (now
> 2).  This results in ubi_init() now trying to attach the first partition
> and the second partition.
>
> Fix this by adding a section at the end of ubi_exit() where we reset any
> globals that would need to be reset (in this case, just mtd_devs).
>
> Test case:
> $ ubi part <mtdname> ; ubi part <mtdname>
>
> Before patch:
>
> $ ubi part data
> UBI: attaching mtd1 to ubi0
> UBI: scanning is finished
> UBI: attached mtd1 (name "mtd=4", size 4 MiB) to ubi0
> [...]
> UBI: available PEBs: 0, total reserved PEBs: 32, [...]
> $ ubi part data
> UBI: detaching mtd1 from ubi0
> UBI: mtd1 is detached from ubi0
> UBI: attaching mtd1 to ubi0
> [...]
> UBI: available PEBs: 0, total reserved PEBs: 32, [...]
> ** Note that this is where it tries to attach mtd1 again, fails, and
> ** then detaches everything as it errors out of ubi_init()
> UBI: detaching mtd1 from ubi0
> UBI: mtd1 is detached from ubi0
> UBI init error 17
> $
>
> After patch:
>
> $ ubi part data
> UBI: attaching mtd1 to ubi0
> UBI: scanning is finished
> UBI: attached mtd1 (name "mtd=4", size 4 MiB) to ubi0
> [...]
> UBI: available PEBs: 0, total reserved PEBs: 32, [...]
> $ ubi part data
> UBI: detaching mtd1 from ubi0
> UBI: mtd1 is detached from ubi0
> UBI: attaching mtd1 to ubi0
> UBI: scanning is finished
> UBI: attached mtd1 (name "mtd=4", size 4 MiB) to ubi0
> [...]
> UBI: available PEBs: 0, total reserved PEBs: 32, [...]
> $
>
> Signed-off-by: Andrew Ruder <andrew.ruder@elecsyscorp.com>
> Cc: Heiko Schocher <hs@denx.de>
> Cc: Kyungmin Park <kmpark@infradead.org>
> ---
>   drivers/mtd/ubi/build.c | 4 ++++
>   1 file changed, 4 insertions(+)
>
> Not sure this is the best place to make the change, but it is one of the least
> obtrusive, IMO.  Please Cc: me on any responses as it will go directly to my inbox!
>
> diff --git a/drivers/mtd/ubi/build.c b/drivers/mtd/ubi/build.c
> index 584cf5f..fc5cbce 100644
> --- a/drivers/mtd/ubi/build.c
> +++ b/drivers/mtd/ubi/build.c
> @@ -1384,6 +1384,10 @@ void ubi_exit(void)
>   	misc_deregister(&ubi_ctrl_cdev);
>   	class_remove_file(ubi_class, &ubi_version);
>   	class_destroy(ubi_class);
> +#ifdef __UBOOT__
> +	/* Reset any globals that the driver depends on being zeroed */
> +	mtd_devs = 0;
> +#endif
>   }
>   module_exit(ubi_exit);

Good catch, but wondering, why this not poped up in my tests, as I
did such a test ... Hmm... trying currently on the tqm5200s
board on a cfi nor flash [1] shows no error for me. But I just
activated ubi errormessages and broke the board ... so I must wait
for a debugger :-(

Beside of this, your patch seems feasible, I test it soon.

bye,
Heiko

[1] log on the tqm5200s board:
=> mtdparts

device nor0 <fc000000.flash>, # parts = 7
  #: name                size            offset          mask_flags
  0: firmware            0x00100000      0x00000000      0
  1: dtb                 0x00040000      0x00100000      0
  2: kernel              0x00240000      0x00140000      0
  3: small-fs            0x00280000      0x00380000      0
  4: initrd              0x00200000      0x00600000      0
  5: misc                0x00800000      0x00800000      0
  6: big-fs              0x01000000      0x01000000      0

active partition: nor0,0 - (firmware) 0x00100000 @ 0x00000000

defaults:
mtdids  : nor0=fc000000.flash
mtdparts: mtdparts=fc000000.flash:1m(firmware),256k(dtb),2304k(kernel),2560k(small-fs),2m(initrd),8m(misc),16m(big-fs)
=> ubi part misc
UBI: default fastmap pool size: 8
UBI: default fastmap WL pool size: 25
UBI: attaching mtd1 to ubi0
UBI: scanning is finished
UBI: empty MTD device detected
UBI: attached mtd1 (name "mtd=5", size 8 MiB) to ubi0
UBI: PEB size: 262144 bytes (256 KiB), LEB size: 262016 bytes
UBI: min./max. I/O unit sizes: 1/1, sub-page size 1
UBI: VID header offset: 64 (aligned 64), data offset: 128
UBI: good PEBs: 32, bad PEBs: 0, corrupted PEBs: 0
UBI: user volume: 0, internal volumes: 1, max. volumes count: 128
UBI: max/mean erase counter: 1/0, WL threshold: 4096, image sequence number: 0
UBI: available PEBs: 26, total reserved PEBs: 6, PEBs reserved for bad PEB handling: 0
=> ubi info l
Volume information dump:
         vol_id          2147479551
         reserved_pebs   2
         alignment       1
         data_pad        0
         vol_type        3
         name_len        13
         usable_leb_size 262016
         used_ebs        2
         used_bytes      524032
         last_eb_bytes   2
         corrupted       0
         upd_marker      0
         name            layout volume
=> ubi info
UBI: MTD device name:            "mtd=5"
UBI: MTD device size:            8 MiB
UBI: physical eraseblock size:   262144 bytes (256 KiB)
UBI: logical eraseblock size:    262016 bytes
UBI: number of good PEBs:        32
UBI: number of bad PEBs:         0
UBI: smallest flash I/O unit:    1
UBI: VID header offset:          64 (aligned 64)
UBI: data offset:                128
UBI: max. allowed volumes:       128
UBI: wear-leveling threshold:    4096
UBI: number of internal volumes: 1
UBI: number of user volumes:     0
UBI: available PEBs:             26
UBI: total number of reserved PEBs: 6
UBI: number of PEBs reserved for bad PEB handling: 0
UBI: max/mean erase counter: 1/0
=> ubi create test 400000
Creating dynamic volume test of size 4194304
=> ubi info l
Volume information dump:
         vol_id          0
         reserved_pebs   17
         alignment       1
         data_pad        0
         vol_type        3
         name_len        4
         usable_leb_size 262016
         used_ebs        17
         used_bytes      4454272
         last_eb_bytes   262016
         corrupted       0
         upd_marker      0
         name            test
Volume information dump:
         vol_id          2147479551
         reserved_pebs   2
         alignment       1
         data_pad        0
         vol_type        3
         name_len        13
         usable_leb_size 262016
         used_ebs        2
         used_bytes      524032
         last_eb_bytes   2
         corrupted       0
         upd_marker      0
         name            layout volume
=> ubi part misc
UBI: detaching mtd1 from ubi0
UBI: mtd1 is detached from ubi0
UBI: default fastmap pool size: 8
UBI: default fastmap WL pool size: 25
UBI: attaching mtd1 to ubi0
UBI: scanning is finished
UBI: attached mtd1 (name "mtd=5", size 8 MiB) to ubi0
UBI: PEB size: 262144 bytes (256 KiB), LEB size: 262016 bytes
UBI: min./max. I/O unit sizes: 1/1, sub-page size 1
UBI: VID header offset: 64 (aligned 64), data offset: 128
UBI: good PEBs: 32, bad PEBs: 0, corrupted PEBs: 0
UBI: user volume: 1, internal volumes: 1, max. volumes count: 128
UBI: max/mean erase counter: 2/1, WL threshold: 4096, image sequence number: 0
UBI: available PEBs: 9, total reserved PEBs: 23, PEBs reserved for bad PEB handling: 0
=> ubi part misc
UBI: detaching mtd1 from ubi0
UBI: mtd1 is detached from ubi0
UBI: default fastmap pool size: 8
UBI: default fastmap WL pool size: 25
UBI: attaching mtd1 to ubi0
UBI: scanning is finished
UBI: attached mtd1 (name "mtd=5", size 8 MiB) to ubi0
UBI: PEB size: 262144 bytes (256 KiB), LEB size: 262016 bytes
UBI: min./max. I/O unit sizes: 1/1, sub-page size 1
UBI: VID header offset: 64 (aligned 64), data offset: 128
UBI: good PEBs: 32, bad PEBs: 0, corrupted PEBs: 0
UBI: user volume: 1, internal volumes: 1, max. volumes count: 128
UBI: max/mean erase counter: 2/1, WL threshold: 4096, image sequence number: 0
UBI: available PEBs: 9, total reserved PEBs: 23, PEBs reserved for bad PEB handling: 0
=> ubi part misc
UBI: detaching mtd1 from ubi0
UBI: mtd1 is detached from ubi0
UBI: default fastmap pool size: 8
UBI: default fastmap WL pool size: 25
UBI: attaching mtd1 to ubi0
UBI: scanning is finished
UBI: attached mtd1 (name "mtd=5", size 8 MiB) to ubi0
UBI: PEB size: 262144 bytes (256 KiB), LEB size: 262016 bytes
UBI: min./max. I/O unit sizes: 1/1, sub-page size 1
UBI: VID header offset: 64 (aligned 64), data offset: 128
UBI: good PEBs: 32, bad PEBs: 0, corrupted PEBs: 0
UBI: user volume: 1, internal volumes: 1, max. volumes count: 128
UBI: max/mean erase counter: 2/1, WL threshold: 4096, image sequence number: 0
UBI: available PEBs: 9, total reserved PEBs: 23, PEBs reserved for bad PEB handling: 0
=>

bye,
Heiko
-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany

  reply	other threads:[~2014-11-14  6:20 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-11-13 17:05 [U-Boot] [PATCH] ubi: reset relevant globals in ubi_exit() Andrew Ruder
2014-11-14  6:20 ` Heiko Schocher [this message]
2014-11-14 13:31   ` Andrew Ruder
2014-11-17  6:21     ` Heiko Schocher
2014-11-19  6:57       ` Heiko Schocher

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=54659F3B.5050108@denx.de \
    --to=hs@denx.de \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.