Hi Luca, On 12/19/2012 06:37 PM, Luca Ceresoli wrote: > I had some days ago, but I double-checked now as you suggested. Indeed > there is an important difference: attach_by_scanning() (build.c) calls > ubi_wl_init_scan() and ubi_eba_init_scan() just like Linux does, but in > a swapped order! > > This swap dates back to: > > commit d63894654df72b010de2abb4b3f07d0d755f65b6 > Author: Holger Brunck <holger.bru...@keymile.com> > Date: Mon Oct 10 13:08:19 2011 +0200 > > UBI: init eba tables before wl when attaching a device > > This fixes that u-boot gets stuck when a bitflip was detected > during "ubi part <ubi_device>". If a bitflip was detected UBI tries > to copy the PEB to a different place. This needs that the eba table > are initialized, but this was done after the wear levelling worker > detects the bitflip. So changes the initialisation of these two > tasks in u-boot. > > This is a u-boot specific patch and not needed in the linux layer, > because due to commit 1b1f9a9d00447d > UBI: Ensure that "background thread" operations are really executed > we schedule these tasks in place and not as in linux after the inital > task which schedule this new task is finished. > > Signed-off-by: Holger Brunck <holger.bru...@keymile.com> > cc: Stefan Roese <s...@denx.de> > Signed-off-by: Stefan Roese <s...@denx.de> > > I tried reverting that commit and... surprise! U-Boot can now attach UBI > and boot properly! >
:-( > But the cited commit actually fixed a bug that bite our board a few > months back, so it should not be reverted without thinking twice. Now > it apparently introduced another bug. :-( > yes definetely. I didn't read the whole thread, so I don't know what your exact problem is. On my boards the ubi layer seems to work fine on latest u-boot. But I see a general problem we have in the ubi layer in u-boot. I try to summarize my view: The UBI layer was initialy copied from the linux implementation. But the linux implementation relies for some tasks e.g. fix correctable errors on a background thread. Due to the fact that u-boot is single threaded there was one commit which wants to take care that these background tasks are really executed (CC-ing the author): commit 1b1f9a9d00 UBI: Ensure that "background thread" operations are really executed U-boot executes this background taks immediately but the linux implementation executes this tasks later with the help of some synchronisation mechanism. Therefore we have a different order executing these tasks. My fix did now a change in the initialisation order of eba tables and the wear leveling thread, to address my problem. But now it seems to cause a new problem on your side. So the synchronisation mechanism in u-boot for the ubi tasks which are running on linux in background is incorrect. But how this could be fixed needs to have some deeper analyses. Regards Holger _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot