From 09b7a3d45cb2dd1bbeb8a665103556cea70c2479 Mon Sep 17 00:00:00 2001 From: wpaul Date: Sat, 18 Feb 1995 18:05:35 +0000 Subject: [PATCH] Do away with 'options SWAP_GENERIC' once and for all: I get ill just thinking about it. Two changes need to be made to allow 'config kernel swap generic' to work properly without requiring any compile-time flags: /usr/src/usr.sbin/config/mkswapconf.c: we need to define a dummy stub for the setconf() function to replace the one in swapgeneric.c that isn't available in non-generic configurations. /usr/src/sys/i386/i386/autoconf.c: the -a boot flag causes setroot() to be skipped and lets setconf() prompt the user for a root device. If you skip setroot() in a non-generic kernel, you could get severely hosed. To avoid this, we silently ignore the -a flag if rootdev != NODEV. (rootdev is always initialized to NODEV in swapgeneric.c, so if we find that rootdev is something other than NODEV, we know we're not using a generic configuration.) --- sys/amd64/amd64/autoconf.c | 16 ++++++++++------ sys/i386/i386/autoconf.c | 16 ++++++++++------ usr.sbin/config/mkswapconf.c | 4 +++- 3 files changed, 23 insertions(+), 13 deletions(-) diff --git a/sys/amd64/amd64/autoconf.c b/sys/amd64/amd64/autoconf.c index d00e42e47113..00d0fa91dbd4 100644 --- a/sys/amd64/amd64/autoconf.c +++ b/sys/amd64/amd64/autoconf.c @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * from: @(#)autoconf.c 7.1 (Berkeley) 5/9/91 - * $Id: autoconf.c,v 1.18 1995/01/11 17:51:26 jkh Exp $ + * $Id: autoconf.c,v 1.19 1995/02/01 23:11:38 se Exp $ */ /* @@ -111,13 +111,17 @@ configure() #ifdef FFS if (!mountroot) { mountroot = ffs_mountroot; -#ifdef SWAP_GENERIC - if ((boothowto & RB_ASKNAME) == 0) + /* + * Ignore the -a flag if this kernel isn't compiled + * with a generic root/swap configuration: if we skip + * setroot() and we aren't a generic kernel, chaos + * will ensue because setconf() will be a no-op. + * (rootdev is always initialized to NODEV in a + * generic configuration, so we test for that.) + */ + if ((boothowto & RB_ASKNAME) == 0 || rootdev != NODEV) setroot(); setconf(); -#else - setroot(); -#endif } #endif if (!mountroot) { diff --git a/sys/i386/i386/autoconf.c b/sys/i386/i386/autoconf.c index d00e42e47113..00d0fa91dbd4 100644 --- a/sys/i386/i386/autoconf.c +++ b/sys/i386/i386/autoconf.c @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * from: @(#)autoconf.c 7.1 (Berkeley) 5/9/91 - * $Id: autoconf.c,v 1.18 1995/01/11 17:51:26 jkh Exp $ + * $Id: autoconf.c,v 1.19 1995/02/01 23:11:38 se Exp $ */ /* @@ -111,13 +111,17 @@ configure() #ifdef FFS if (!mountroot) { mountroot = ffs_mountroot; -#ifdef SWAP_GENERIC - if ((boothowto & RB_ASKNAME) == 0) + /* + * Ignore the -a flag if this kernel isn't compiled + * with a generic root/swap configuration: if we skip + * setroot() and we aren't a generic kernel, chaos + * will ensue because setconf() will be a no-op. + * (rootdev is always initialized to NODEV in a + * generic configuration, so we test for that.) + */ + if ((boothowto & RB_ASKNAME) == 0 || rootdev != NODEV) setroot(); setconf(); -#else - setroot(); -#endif } #endif if (!mountroot) { diff --git a/usr.sbin/config/mkswapconf.c b/usr.sbin/config/mkswapconf.c index 1ffb7081cf17..4b883a4dc437 100644 --- a/usr.sbin/config/mkswapconf.c +++ b/usr.sbin/config/mkswapconf.c @@ -111,7 +111,9 @@ do_swap(fl) } while (swap && swap->f_type == SWAPSPEC); fprintf(fp, "\t{ NODEV, 0, 0 },\t/* for NFS diskless */\n"); fprintf(fp, "\t{ NODEV, 0, 0 }\n"); - fprintf(fp, "};\n"); + fprintf(fp, "};\n\n"); + fprintf(fp, "/* Stub for when generic swap config is not used. */\n"); + fprintf(fp, "void setconf(void) {};\n"); fclose(fp); return (swap); }