Module Name: src Committed By: pgoyette Date: Mon Jun 24 13:58:24 UTC 2019
Modified Files: src/sys/arch/i386/stand/lib: exec.c libi386.h src/sys/lib/libsa: ext2fs.c ffsv1.c ffsv2.c Log Message: Now that the ufs module has been split out from ffs and ext2fs, we need to update the boot-loader to push all modules required to support the booted filesystem. We treat the fsmod string as a slash-separated list of module names (relative to kern.module.path), rather than as a single module path name. Note that ffsv1 and ffsv2 are still exempted from the boot-loader's auto-push, but the list of required filesystems is still noted in the source. Also note that arch/sandpoint needs a similar change. I have not made this change because I am totally unable to test it. Tested on my kernel with _no_ built-in file-systems and with the ffs bootloader settings of fsmod enabled. To generate a diff of this commit: cvs rdiff -u -r1.71 -r1.72 src/sys/arch/i386/stand/lib/exec.c cvs rdiff -u -r1.42 -r1.43 src/sys/arch/i386/stand/lib/libi386.h cvs rdiff -u -r1.27 -r1.28 src/sys/lib/libsa/ext2fs.c cvs rdiff -u -r1.6 -r1.7 src/sys/lib/libsa/ffsv1.c src/sys/lib/libsa/ffsv2.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/i386/stand/lib/exec.c diff -u src/sys/arch/i386/stand/lib/exec.c:1.71 src/sys/arch/i386/stand/lib/exec.c:1.72 --- src/sys/arch/i386/stand/lib/exec.c:1.71 Mon Jun 24 02:48:51 2019 +++ src/sys/arch/i386/stand/lib/exec.c Mon Jun 24 13:58:24 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: exec.c,v 1.71 2019/06/24 02:48:51 pgoyette Exp $ */ +/* $NetBSD: exec.c,v 1.72 2019/06/24 13:58:24 pgoyette Exp $ */ /* * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc. @@ -121,6 +121,8 @@ #define MODULE_WARNING_SEC 5 +#define MAXMODNAME 32 /* from <sys/module.h> */ + extern struct btinfo_console btinfo_console; boot_module_t *boot_modules; @@ -190,6 +192,42 @@ fs_add(char *name) return module_add_common(name, BM_TYPE_FS); } +/* + * Add a /-separated list of module names to the boot list + */ +void +module_add_split(const char *name, uint8_t type) +{ + char mod_name[MAXMODNAME]; + int i; + const char *mp = name; + char *ep; + + while (*mp) { /* scan list of module names */ + i = MAXMODNAME; + ep = mod_name; + while (--i) { /* scan for end of first name */ + *ep = *mp; + if (*ep == '/') /* NUL-terminate the name */ + *ep = '\0'; + + if (*ep == 0 ) { /* add non-empty name */ + if (ep != mod_name) + module_add_common(mod_name, type); + break; + } + ep++; mp++; + } + if (*ep != 0) { + printf("module name too long\n"); + return; + } + if (*mp == '/') { /* skip separator if more */ + mp++; + } + } +} + static void module_add_common(const char *name, uint8_t type) { @@ -305,7 +343,7 @@ common_load_prekern(const char *file, u_ /* If the root fs type is unusual, load its module. */ if (fsmod != NULL) - module_add_common(fsmod, BM_TYPE_KMOD); + module_add_split(fsmod, BM_TYPE_KMOD); bi_prekern.kernpa_start = kernpa_start; bi_prekern.kernpa_end = kernpa_end; @@ -383,7 +421,7 @@ common_load_kernel(const char *file, u_l /* If the root fs type is unusual, load its module. */ if (fsmod != NULL) - module_add_common(fsmod, BM_TYPE_KMOD); + module_add_split(fsmod, BM_TYPE_KMOD); /* * Gather some information for the kernel. Do this after the @@ -572,7 +610,7 @@ count_netbsd(const char *file, u_long *r /* If the root fs type is unusual, load its module. */ if (fsmod != NULL) - module_add_common(fsmod, BM_TYPE_KMOD); + module_add_split(fsmod, BM_TYPE_KMOD); for (bm = boot_modules; bm; bm = bm->bm_next) { fd = module_open(bm, 0, kdev, base_path, false); Index: src/sys/arch/i386/stand/lib/libi386.h diff -u src/sys/arch/i386/stand/lib/libi386.h:1.42 src/sys/arch/i386/stand/lib/libi386.h:1.43 --- src/sys/arch/i386/stand/lib/libi386.h:1.42 Sun Mar 12 05:33:48 2017 +++ src/sys/arch/i386/stand/lib/libi386.h Mon Jun 24 13:58:24 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: libi386.h,v 1.42 2017/03/12 05:33:48 nonaka Exp $ */ +/* $NetBSD: libi386.h,v 1.43 2019/06/24 13:58:24 pgoyette Exp $ */ /* * Copyright (c) 1996 @@ -145,6 +145,7 @@ void splash_add(char *); void rnd_add(char *); void fs_add(char *); void userconf_add(char *); +void module_add_split(const char *, uint8_t); struct btinfo_framebuffer; void framebuffer_configure(struct btinfo_framebuffer *); Index: src/sys/lib/libsa/ext2fs.c diff -u src/sys/lib/libsa/ext2fs.c:1.27 src/sys/lib/libsa/ext2fs.c:1.28 --- src/sys/lib/libsa/ext2fs.c:1.27 Fri Apr 5 20:09:29 2019 +++ src/sys/lib/libsa/ext2fs.c Mon Jun 24 13:58:24 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: ext2fs.c,v 1.27 2019/04/05 20:09:29 christos Exp $ */ +/* $NetBSD: ext2fs.c,v 1.28 2019/06/24 13:58:24 pgoyette Exp $ */ /* * Copyright (c) 1997 Manuel Bouyer. @@ -692,7 +692,7 @@ out: if (rc) ext2fs_close(f); else - fsmod = "ext2fs"; + fsmod = "ufs/ext2fs"; return rc; } Index: src/sys/lib/libsa/ffsv1.c diff -u src/sys/lib/libsa/ffsv1.c:1.6 src/sys/lib/libsa/ffsv1.c:1.7 --- src/sys/lib/libsa/ffsv1.c:1.6 Mon May 21 21:34:16 2012 +++ src/sys/lib/libsa/ffsv1.c Mon Jun 24 13:58:24 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: ffsv1.c,v 1.6 2012/05/21 21:34:16 dsl Exp $ */ +/* $NetBSD: ffsv1.c,v 1.7 2019/06/24 13:58:24 pgoyette Exp $ */ #define LIBSA_FFSv1 @@ -15,4 +15,8 @@ #define ufs_dinode ufs1_dinode #define indp_t int32_t +#if 0 +#define FSMOD "wapbl/ufs/ffs" +#endif + #include "ufs.c" Index: src/sys/lib/libsa/ffsv2.c diff -u src/sys/lib/libsa/ffsv2.c:1.6 src/sys/lib/libsa/ffsv2.c:1.7 --- src/sys/lib/libsa/ffsv2.c:1.6 Mon May 21 21:34:16 2012 +++ src/sys/lib/libsa/ffsv2.c Mon Jun 24 13:58:24 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: ffsv2.c,v 1.6 2012/05/21 21:34:16 dsl Exp $ */ +/* $NetBSD: ffsv2.c,v 1.7 2019/06/24 13:58:24 pgoyette Exp $ */ #define LIBSA_FFSv2 @@ -15,4 +15,8 @@ #define ufs_dinode ufs2_dinode #define indp_t int64_t +#if 0 +#define FSMOD "wapbl/ufs/ffs" +#endif + #include "ufs.c"