[PATCH v2 4/6] net: eth_bootdev_hunt() must not try to boot
Simon Glass
sjg at chromium.org
Tue Nov 26 16:38:45 CET 2024
Hi Heinrich,
On Tue, 26 Nov 2024 at 00:42, Heinrich Schuchardt
<heinrich.schuchardt at canonical.com> wrote:
>
> On 11/26/24 01:32, Simon Glass wrote:
> > Hi Heinrich,
> >
> > On Sat, 23 Nov 2024 at 14:46, Heinrich Schuchardt
> > <heinrich.schuchardt at canonical.com> wrote:
> >>
> >> eth_bootdev_hunt() should not execute dhcp_run() as this itself would load
> >> a file and boot it if autostart=yes.
> >>
> >> Instead just check that there is a network device.
> >
> > If you look at dhcp_run() you will see an 'autoload' parameter. This
> > is 'false' in this code, so it never loads a file.
>
> This is not the complete truth.
>
> If $autostart=true and CONFIG_NET=y, dhcp_run(false) still tries to load
> a file.
Here is the code:
int dhcp_run(ulong addr, const char *fname, bool autoload)
{
char *dhcp_argv[] = {"dhcp", NULL, (char *)fname, NULL};
struct cmd_tbl cmdtp = {}; /* dummy */
char file_addr[17];
int old_autoload;
int ret, result;
log_debug("addr=%lx, fname=%s, autoload=%d\n", addr, fname, autoload);
old_autoload = env_get_yesno("autoload");
ret = env_set("autoload", autoload ? "y" : "n");
if (ret)
return log_msg_ret("en1", -EINVAL);
It respects the autoload parameter. If there is a bug in that, we
should fix it, but it seems to work OK to me. Please fix your commit
message.
>
> In all cases dhcp_run() wastes boot time.
Yes, it uses time. With bootstd the hunters are only called as needed.
In your case you are calling all of them at once.
Is there a way to just call hunters which relate to block devices, perhaps?
>
> CONFIG_NET=y
> => dhcp_run
> BOOTP broadcast 1
> BOOTP broadcast 2
> BOOTP broadcast 3
> DHCP client bound to address 10.0.2.15 (1004 ms)
>
> => setenv autostart true
> => dhcp run
> BOOTP broadcast 1
> BOOTP broadcast 2
> BOOTP broadcast 3
> DHCP client bound to address 10.0.2.15 (1002 ms)
> Using e1000#0 device
> TFTP from server 10.0.2.2; our IP address is 10.0.2.15
> Filename 'run'.
> Load address: 0x40200000
> Loading: *
> TFTP error: 'File not found' (1)
> Not retrying...
>
> CONFIG_NET_LWIP=y
> => dhcp_run
> DHCP client bound to address 10.0.2.15 (1007 ms)
>
> Where command dhcp_run is provided by:
>
> #include <command.h>
> #include <env.h>
> #include <net-common.h>
> #include <vsprintf.h>
>
> static int do_dhcp_run(struct cmd_tbl *cmdtp, int flag, int argc,
> char *const argv[])
> {
> ulong addr = hextoul(env_get("loadaddr"), NULL);
>
> dhcp_run(addr, NULL, false);
>
> return 0;
> }
>
> U_BOOT_CMD(
> dhcp_run, CONFIG_SYS_MAXARGS, 1, do_dhcp_run,
> "dhcp_run",
> NULL
> );
See above
[..]
Regards,
Simon
More information about the U-Boot
mailing list