git: 5b90ffad8759 - main - stand/i386/zfsboot: Initialzie archsw at compile time.

From: Warner Losh <imp_at_FreeBSD.org>
Date: Mon, 26 May 2025 15:33:37 UTC
The branch main has been updated by imp:

URL: https://cgit.FreeBSD.org/src/commit/?id=5b90ffad8759633aa79bc9736b1bb65e3a5248b7

commit 5b90ffad8759633aa79bc9736b1bb65e3a5248b7
Author:     Warner Losh <imp@FreeBSD.org>
AuthorDate: 2025-05-26 03:46:32 +0000
Commit:     Warner Losh <imp@FreeBSD.org>
CommitDate: 2025-05-26 15:30:37 +0000

    stand/i386/zfsboot: Initialzie archsw at compile time.
    
    Also, add a comment about the weird reason we even have an archsw here
    at all. tl;dr: zfs code uses archsw when it aught not, but this hack
    here is easier than fixing that code properly.
    
    Sponsored by:           Netflix
---
 stand/i386/zfsboot/zfsboot.c | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/stand/i386/zfsboot/zfsboot.c b/stand/i386/zfsboot/zfsboot.c
index 07bf31eac7a1..4c8eae9b65e5 100644
--- a/stand/i386/zfsboot/zfsboot.c
+++ b/stand/i386/zfsboot/zfsboot.c
@@ -131,7 +131,16 @@ static int parse_cmd(void);
 static char gelipw[GELI_PW_MAXLEN];
 #endif
 
-struct arch_switch archsw;	/* MI/MD interface boundary */
+/*
+ * Only because the zfs code requires access through archsw, otherwise the
+ * 'boot' programs don't need archsw. This is less than ideal, but this
+ * workaround is easier than many of the alternatives.
+ */
+struct arch_switch archsw = {	/* MI/MD interface boundary */
+	.arch_getdev = i386_getdev,
+	.arch_zfs_probe = i386_zfs_probe,
+};
+
 static char boot_devname[2 * ZFS_MAXNAMELEN + 8]; /* disk or pool:dataset */
 
 struct devsw *devsw[] = {
@@ -184,15 +193,6 @@ main(void)
 	 */
 	bcache_init(32768, 512);
 
-	archsw.arch_autoload = NULL;
-	archsw.arch_getdev = i386_getdev;
-	archsw.arch_copyin = NULL;
-	archsw.arch_copyout = NULL;
-	archsw.arch_readin = NULL;
-	archsw.arch_isainb = NULL;
-	archsw.arch_isaoutb = NULL;
-	archsw.arch_zfs_probe = i386_zfs_probe;
-
 	bootinfo.bi_version = BOOTINFO_VERSION;
 	bootinfo.bi_size = sizeof(bootinfo);
 	bootinfo.bi_basemem = bios_basemem / 1024;