Date: Fri, 05 Apr 2002 13:17:02 +0100 From: Brian Somers <brian@freebsd-services.com> To: Doug Rabson <dfr@nlsystems.com> Cc: Brian Somers <brian@freebsd-services.com>, cvs-committers@FreeBSD.org, cvs-all@FreeBSD.org Subject: Re: cvs commit: src/sys/i386/i386 autoconf.c src/sys/ia64/ia64 autoconf.c Message-ID: <200204051217.g35CH3q7029711@hak.lan.Awfulhak.org> In-Reply-To: Message from Doug Rabson <dfr@nlsystems.com> of "Fri, 05 Apr 2002 09:49:02 BST." <Pine.BSF.4.33.0204050948070.94066-100000@herring.nlsystems.com>
next in thread | previous in thread | raw e-mail | index | archive | help
> On Thu, 4 Apr 2002, Brian Somers wrote:
>
> > > brian 2002/04/04 09:58:21 PST
> > >
> > > Modified files:
> > > sys/i386/i386 autoconf.c
> > > sys/ia64/ia64 autoconf.c
> > > Log:
> > > Back out the previous commit.
> > >
> > > In the i386 case, options BOOTP requires options NFS_ROOT as well as
> > > options NFSCLIENT. With *both* the NFS options, a bootpc_init()
> > > prototype is brought in by nfsclient/nfsdiskless.h.
> > >
> > > In the ia64 case, it just doesn't work and my change just pushes it
> > > further away from working.
> > >
> > > Suggested to be wrong by: bde
> > >
> > > Revision Changes Path
> > > 1.166 +0 -1 src/sys/i386/i386/autoconf.c
> > > 1.13 +0 -1 src/sys/ia64/ia64/autoconf.c
> >
> > Methinks that options BOOTP hasn't been tested much on non-i386
> > platforms. The call to bootpc_init() isn't present on alpha or
> > powerpc and I'm suspicious about ia64 & sparc64.
>
> I use BOOTP, BOOTP_NFSROOT and BOOTP_NFSV3 options on ia64 and they work
> fine (I also have NFSCLIENT and NFS_ROOT).
It seems that BOOTP works ok, but only when certain conditions are
met.
BOOTP on it's own seems to insist on a root device being given by
the bootp server at runtime in bootpc_call() - unless BOOTP_TIMEOUT
is defined and >0. This should probably depend on BOOTP_NFSROOT.
-Werror has broken BOOTP on it's own on some archs due to the missing
bootpc_init() prototype:
sparc64 declares it's own bootpc_init() prototype in autoconf.c and
never includes nfsclient/nfsdiskless.h.
i386 requires NFSCLIENT and NFS_ROOT so that it includes
nfsclient/nfsdiskless.h.
ia64 doesn't prototype bootpc_init or include
nfsclient/nfsdiskless.h, so it's *probably* broken by -Werror.
alpha and powerpc don't even call bootpc_init() from
cpu_rootconf().
I have a patch for i386 (attached), but I can't test it with much
more than a compile at the moment as I triple-panic:
panic: Assertion (opts & ~(MTX_SPIN | MTX_QUIET | MTX_RECURSE | MTX_SLEEPABLE | MTX_NOWITNESS | MTX_DUPOK)) == 0 failed at /usr/src/sys/kern/kern_mutex.c:807
Uptime: 0s
panic: Assertion mtx_unowned(m) failed at /usr/src/sys/kern/kern_mutex.c:856
Uptime: 0s
panic: _sx_xlock (shutdown_post_sync): xlock already held @ /usr/src/sys/kern/kern_shutdown.c:332
Uptime: 0s
> --
> Doug Rabson Mail: dfr@nlsystems.com
> Phone: +44 20 8348 6160
--
Brian <brian@freebsd-services.com> <brian@Awfulhak.org>
http://www.freebsd-services.com/ <brian@[uk.]FreeBSD.org>
Don't _EVER_ lose your sense of humour ! <brian@[uk.]OpenBSD.org>
Index: conf/NOTES
===================================================================
RCS file: /home/ncvs/src/sys/conf/NOTES,v
retrieving revision 1.1017
diff -u -r1.1017 NOTES
--- conf/NOTES 4 Apr 2002 18:01:55 -0000 1.1017
+++ conf/NOTES 5 Apr 2002 11:46:00 -0000
@@ -1637,7 +1637,6 @@
# Kernel BOOTP support
options BOOTP # Use BOOTP to obtain IP address/hostname
- # Requires NFSCLIENT and NFS_ROOT
options BOOTP_NFSROOT # NFS mount root filesystem using BOOTP info
options BOOTP_NFSV3 # Use NFS v3 to NFS mount root
options BOOTP_COMPAT # Workaround for broken bootp daemons.
Index: i386/i386/autoconf.c
===================================================================
RCS file: /home/ncvs/src/sys/i386/i386/autoconf.c,v
retrieving revision 1.166
diff -u -r1.166 autoconf.c
--- i386/i386/autoconf.c 4 Apr 2002 17:58:18 -0000 1.166
+++ i386/i386/autoconf.c 5 Apr 2002 11:28:23 -0000
@@ -63,16 +63,17 @@
#include <sys/mount.h>
#include <sys/cons.h>
-#if defined(NFSCLIENT) && defined(NFS_ROOT)
-#include <sys/socket.h>
-#include <net/if.h>
+#if defined(NFSCLIENT) && defined(NFS_ROOT) && !defined(BOOTP_NFSROOT)
#include <net/if_dl.h>
#include <net/if_types.h>
-#include <net/if_var.h>
#include <net/ethernet.h>
-#include <netinet/in.h>
-#include <nfs/rpcv2.h>
+#endif
+
+#if defined(BOOTP)
+#include <sys/socket.h>
+#include <net/if.h>
#include <nfs/nfsproto.h>
+#include <netinet/in.h>
#include <nfsclient/nfs.h>
#include <nfsclient/nfsdiskless.h>
#endif
Index: nfsclient/bootp_subr.c
===================================================================
RCS file: /home/ncvs/src/sys/nfsclient/bootp_subr.c,v
retrieving revision 1.36
diff -u -r1.36 bootp_subr.c
--- nfsclient/bootp_subr.c 13 Mar 2002 09:23:11 -0000 1.36
+++ nfsclient/bootp_subr.c 5 Apr 2002 11:53:29 -0000
@@ -679,7 +679,10 @@
ifctx = ifctx->next) {
ifctx->outstanding = 0;
if (bootpc_ifctx_isresolved(ifctx) != 0 &&
- gotrootpath != 0) {
+#ifndef BOOTP_NFSROOT
+ gotrootpath != 0
+#endif
+ ) {
continue;
}
if (bootpc_ifctx_isfailed(ifctx) != 0)
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe cvs-all" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200204051217.g35CH3q7029711>
