Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/lib/libsa Now that the ufs module has been split out fro...
details: https://anonhg.NetBSD.org/src/rev/ebbb5afb0b79
branches: trunk
changeset: 999926:ebbb5afb0b79
user: pgoyette <pgoyette%NetBSD.org@localhost>
date: Mon Jun 24 13:58:24 2019 +0000
description:
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.
diffstat:
sys/arch/i386/stand/lib/exec.c | 46 +++++++++++++++++++++++++++++++++++---
sys/arch/i386/stand/lib/libi386.h | 3 +-
sys/lib/libsa/ext2fs.c | 4 +-
sys/lib/libsa/ffsv1.c | 6 ++++-
sys/lib/libsa/ffsv2.c | 6 ++++-
5 files changed, 56 insertions(+), 9 deletions(-)
diffs (159 lines):
diff -r 02fa057908dc -r ebbb5afb0b79 sys/arch/i386/stand/lib/exec.c
--- a/sys/arch/i386/stand/lib/exec.c Mon Jun 24 13:57:30 2019 +0000
+++ b/sys/arch/i386/stand/lib/exec.c Mon Jun 24 13:58:24 2019 +0000
@@ -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 @@
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 @@
/* 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 @@
/* 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 @@
/* 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);
diff -r 02fa057908dc -r ebbb5afb0b79 sys/arch/i386/stand/lib/libi386.h
--- a/sys/arch/i386/stand/lib/libi386.h Mon Jun 24 13:57:30 2019 +0000
+++ b/sys/arch/i386/stand/lib/libi386.h Mon Jun 24 13:58:24 2019 +0000
@@ -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 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 *);
diff -r 02fa057908dc -r ebbb5afb0b79 sys/lib/libsa/ext2fs.c
--- a/sys/lib/libsa/ext2fs.c Mon Jun 24 13:57:30 2019 +0000
+++ b/sys/lib/libsa/ext2fs.c Mon Jun 24 13:58:24 2019 +0000
@@ -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 @@
if (rc)
ext2fs_close(f);
else
- fsmod = "ext2fs";
+ fsmod = "ufs/ext2fs";
return rc;
}
diff -r 02fa057908dc -r ebbb5afb0b79 sys/lib/libsa/ffsv1.c
--- a/sys/lib/libsa/ffsv1.c Mon Jun 24 13:57:30 2019 +0000
+++ b/sys/lib/libsa/ffsv1.c Mon Jun 24 13:58:24 2019 +0000
@@ -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"
diff -r 02fa057908dc -r ebbb5afb0b79 sys/lib/libsa/ffsv2.c
--- a/sys/lib/libsa/ffsv2.c Mon Jun 24 13:57:30 2019 +0000
+++ b/sys/lib/libsa/ffsv2.c Mon Jun 24 13:58:24 2019 +0000
@@ -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"
Home |
Main Index |
Thread Index |
Old Index