]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
bootstd: Adjust code ordering to work around compiler quirk
authorSimon Glass <sjg@chromium.org>
Mon, 24 Apr 2023 01:49:49 +0000 (13:49 +1200)
committerTom Rini <trini@konsulko.com>
Wed, 26 Apr 2023 12:43:05 +0000 (08:43 -0400)
At present when debugging is off, bootdev_find_in_blk() sometimes fails
to find a valid bootflow, e.g. with virtio. Accessing the 'blk' variable
later in the function seems to correct it.

Move the 'ret' check before the debug statement and set the block device
again aftewards, to work around this.

Signed-off-by: Simon Glass <sjg@chromium.org>
boot/bootdev-uclass.c

index 91087981d21326350e0f1841c671436f40cdce23..57d294464764568fa0f069b245845f6a38342bd4 100644 (file)
@@ -174,6 +174,8 @@ int bootdev_find_in_blk(struct udevice *dev, struct udevice *blk,
        } else {
                ret = fs_set_blk_dev_with_part(desc, bflow->part);
                bflow->state = BOOTFLOWST_PART;
+               if (ret)
+                       return log_msg_ret("fs", ret);
 
                /* Use an #ifdef due to info.sys_ind */
 #ifdef CONFIG_DOS_PARTITION
@@ -181,8 +183,7 @@ int bootdev_find_in_blk(struct udevice *dev, struct udevice *blk,
                          blk->name, bflow->part, info.sys_ind,
                          ret ? -1 : fs_get_type());
 #endif
-               if (ret)
-                       return log_msg_ret("fs", ret);
+               bflow->blk = blk;
                bflow->state = BOOTFLOWST_FS;
        }