From nobody Fri Sep 11 05:04:31 2026 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4hh2XH4xrkz6rbhc for ; Fri, 11 Sep 2026 05:04:31 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "YR2" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4hh2XH2qpPz4CTZ for ; Fri, 11 Sep 2026 05:04:31 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1789103071; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=HVfk2uUWAklE1Nknz4IZOkVn40ihxuUAWiBDCKW78rs=; b=KqX2ES3+HVuTDL14apLHW4x9M+FPzpu6BPrqrb2sEZhNwgHQf9XNYH2B1CWRhEY+u+R62v G8Z3efX6U4lZk8Ci0jFXCeCgb9kt5UIWDfQPTL+gQFYoui58V+QzAPfricmxy1JdUZLIQz oxEAK5xqDw12omJ2Uo6iMZpC1xkmSOewifb7IQ98mB/e/3yNQEILkxoJNYemusgE9ux3Kf +MmA/QtuhS1dcuXm6n4HHyz/BiHSfYrJnvpHou0vdbhRrWHW9Di0UZfTPOhb3IRNuNLz6v w05VFJY6r+kJSOuZbJl8Mun4r6fZy+t92sMDzO0XHZct05I1zBRPhUsAJ4Fx9Q== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1789103071; b=rfcsM/m6B0DYm001T7+sshMSa5BP61waNVUxARyfGuSfnZHtHWVsiq+Hr6IP7lMUfLnQ4i 1yzBY0L31pz6FA00XSBf6KHYeJqAvpf+nE652z9LkSHya5vL/u49GBm7bauMjDNaMoiaTW Y0HTCrW5EVAd+IHplK7775lrZtM2lPHO6pTHviSHRiBWFKXD9pAmlTiDN0Przx0gCRDsFp SLAL3YpS8BcZSx5tq2iGYiE6nPTnE2oQXoRh9pi2ZIXbq+X0+ieaVHScIUdfh+UUP2G05F eixvibCzMSZpG2d0HgyeGSwxwN3ORoSCQwzXKXGYYPUxctjzxyaKS/Vi/9dEOg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1789103071; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=HVfk2uUWAklE1Nknz4IZOkVn40ihxuUAWiBDCKW78rs=; b=hSdX0Qv0alC+lUUSbyprBtULNwzYztThP//OhGRXva/KQq8yyoU2eQdsBrvlwyOGTrByDI csJRXj6UiJBH0wS0Yhihp14DmQiVbMbF6SA/GM0XXhcFoKH2c2NoY2TnPsi1kgX/d/eIUJ KJ4OdjNRM8lDG/PzXo7T6Rts4srmfryZngCEmNanVAQWRUgRhAhiZD0NxwWxMqUkIbxTA5 uIXGLazdKuKuVZc4SxSYduikHTc2dAABD3/Bd2R25D2qhKfIenmfTEVAWEOvh7h9s9iZRZ P+3qXeFRJLaWhNnkRiQjEcDtQ9X2zqhrcgl631Du2DlaWY4pIlCgAg9u70TvNg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hh2XH1x0jz10WL for ; Fri, 11 Sep 2026 05:04:31 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 39f7a by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 11 Sep 2026 05:04:31 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Warner Losh Subject: git: 6de311d309da - main - loader.efi: download DHCP initmd specified image List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: imp X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 6de311d309dadee0d66e7f1533c254a44b9b5635 Auto-Submitted: auto-generated Date: Fri, 11 Sep 2026 05:04:31 +0000 Message-Id: <6aa38bdf.39f7a.7e7913f5@gitrepo.freebsd.org> The branch main has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=6de311d309dadee0d66e7f1533c254a44b9b5635 commit 6de311d309dadee0d66e7f1533c254a44b9b5635 Author: Warner Losh AuthorDate: 2026-09-11 04:14:30 +0000 Commit: Warner Losh CommitDate: 2026-09-11 04:15:29 +0000 loader.efi: download DHCP initmd specified image When we haven't downloaded an image via mem{disk,cd} and ipxe, try any image specified by the FreeBSD-specific initmd dhcp option. This allows direct booting of loader.efi with a detached root ramdisk filesystem. Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D59433 --- stand/efi/loader/loader_efi.h | 2 +- stand/efi/loader/main.c | 6 ++++-- stand/efi/loader/memdisk.c | 23 +++++++++++++---------- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/stand/efi/loader/loader_efi.h b/stand/efi/loader/loader_efi.h index d6a45e04e27c..e53e165d5ffc 100644 --- a/stand/efi/loader/loader_efi.h +++ b/stand/efi/loader/loader_efi.h @@ -59,7 +59,7 @@ void * efi_translate(vm_offset_t ptr); void efi_copy_finish(void); void efi_copy_finish_nop(void); -void maybe_download_ramdisk(int argc, CHAR16 **argv); +bool maybe_download_ramdisk(int argc, CHAR16 **argv); int download_md_image(const char *url); void maybe_download_initmd(void); diff --git a/stand/efi/loader/main.c b/stand/efi/loader/main.c index fa551e6fb742..0714b6647c13 100644 --- a/stand/efi/loader/main.c +++ b/stand/efi/loader/main.c @@ -1275,7 +1275,7 @@ EFI_STATUS main(int argc, CHAR16 *argv[]) { int howto, i, uhowto; - bool has_kbd; + bool has_ipxe, has_kbd; char *s; EFI_DEVICE_PATH *imgpath; CHAR16 *text; @@ -1340,7 +1340,7 @@ main(int argc, CHAR16 *argv[]) * handles because it installs a handle and creates the right ACPI * tables for the kernel to find it. */ - maybe_download_ramdisk(argc, argv); + has_ipxe = maybe_download_ramdisk(argc, argv); /* * Scan the BLOCK IO MEDIA handles then @@ -1358,6 +1358,8 @@ main(int argc, CHAR16 *argv[]) efiblk_memdisk_preload(); devinit(); + if (!has_ipxe) + maybe_download_initmd(); /* * Detect console settings two different ways: one via the command diff --git a/stand/efi/loader/memdisk.c b/stand/efi/loader/memdisk.c index ce509e50c71c..e4d08f54c16b 100644 --- a/stand/efi/loader/memdisk.c +++ b/stand/efi/loader/memdisk.c @@ -237,11 +237,6 @@ do_download_ramdisk(CHAR8 *url, bool is_disk) IPXE_DOWNLOAD_FILE token; dl_state *ctx = &dl; - Status = BS->LocateProtocol(&ipxeGuid, NULL, (void**)&ipxe_download); - if (EFI_ERROR(Status)) { - printf("No ipxe download\n"); - return; /* most uses won't have this, don't whine */ - } printf("Downloading %s as a %s\n", url, is_disk ? "disk" : "cd"); ctx->in_progress = true; Status = ipxe_download->Start(ipxe_download, url, download_data, download_finish, @@ -317,28 +312,36 @@ do_download_ramdisk(CHAR8 *url, bool is_disk) /* * Scan the command line for memdisk=url or memcd=url. Do nothing if that's not - * present, otherwise try to download that image. + * present, otherwise try to download that image. Returns true when we've tried + * to download an image, whether successful or not. * * Open Question: Do we want some way to chain boot into the /boot/loader.efi or * \efi\boot\bootXXXXX.efi inside the ram disk we load? If so, how do we keep * from infinite chainbooting? Also, I don't understand the load it but don't save * it option... */ -void +bool maybe_download_ramdisk(int argc, CHAR16 **argv) { char var[256]; + EFI_STATUS status; + + status = BS->LocateProtocol(&ipxeGuid, NULL, (void **)&ipxe_download); + if (EFI_ERROR(status)) { + ipxe_download = NULL; + return (false); + } for (int i = 0; i < argc; i++) { cpy16to8(argv[i], var, sizeof(var)); if (strncmp(var, "memdisk=", 8) == 0) { do_download_ramdisk(var + 8, true); - return; + return (true); } if (strncmp(var, "memcd=", 6) == 0) { do_download_ramdisk(var + 6, false); - return; + return (true); } } - return; + return (false); }