Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 29 Jun 2012 18:39:23 +0000 (UTC)
From:      Marius Strobl <marius@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org
Subject:   svn commit: r237815 - stable/9/sys/boot/sparc64/loader
Message-ID:  <201206291839.q5TIdN1G063896@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: marius
Date: Fri Jun 29 18:39:22 2012
New Revision: 237815
URL: http://svn.freebsd.org/changeset/base/237815

Log:
  MFC: r236581
  
  The loaddev environment variable is not modifiable once set, so it is not
  update for ZFS. It seems that this does not really affect anything except
  the help command. Nevertheless, rearrange things so loaddev is set only
  once in all cases in order to get it right.
  Pointed out by: avg

Modified:
  stable/9/sys/boot/sparc64/loader/main.c
Directory Properties:
  stable/9/sys/   (props changed)
  stable/9/sys/amd64/include/xen/   (props changed)
  stable/9/sys/boot/   (props changed)
  stable/9/sys/boot/i386/efi/   (props changed)
  stable/9/sys/boot/ia64/efi/   (props changed)
  stable/9/sys/boot/ia64/ski/   (props changed)
  stable/9/sys/boot/powerpc/boot1.chrp/   (props changed)
  stable/9/sys/boot/powerpc/ofw/   (props changed)
  stable/9/sys/cddl/contrib/opensolaris/   (props changed)
  stable/9/sys/conf/   (props changed)
  stable/9/sys/contrib/dev/acpica/   (props changed)
  stable/9/sys/contrib/octeon-sdk/   (props changed)
  stable/9/sys/contrib/pf/   (props changed)
  stable/9/sys/contrib/x86emu/   (props changed)
  stable/9/sys/dev/   (props changed)
  stable/9/sys/dev/e1000/   (props changed)
  stable/9/sys/dev/isp/   (props changed)
  stable/9/sys/dev/ixgbe/   (props changed)
  stable/9/sys/fs/   (props changed)
  stable/9/sys/fs/ntfs/   (props changed)
  stable/9/sys/modules/   (props changed)

Modified: stable/9/sys/boot/sparc64/loader/main.c
==============================================================================
--- stable/9/sys/boot/sparc64/loader/main.c	Fri Jun 29 18:18:51 2012	(r237814)
+++ stable/9/sys/boot/sparc64/loader/main.c	Fri Jun 29 18:39:22 2012	(r237815)
@@ -141,6 +141,7 @@ static u_int tlb_locked;
 static vm_offset_t curkva = 0;
 static vm_offset_t heapva;
 
+static char bootpath[64];
 static phandle_t root;
 
 /*
@@ -740,7 +741,7 @@ sparc64_zfs_probe(void)
 
 	/* Get the GUID of the ZFS pool on the boot device. */
 	guid = 0;
-	zfs_probe_dev(getenv("currdev"), &guid);
+	zfs_probe_dev(bootpath, &guid);
 
 	for (unit = 0; unit < MAXDEV; unit++) {
 		/* Find freebsd-zfs slices in the VTOC. */
@@ -757,7 +758,7 @@ sparc64_zfs_probe(void)
 
 		for (part = 0; part < 8; part++) {
 			if (part == 2 || vtoc.part[part].tag !=
-			     VTOC_TAG_FREEBSD_ZFS)
+			    VTOC_TAG_FREEBSD_ZFS)
 				continue;
 			sprintf(devname, "disk%d:%c", unit, part + 'a');
 			if (zfs_probe_dev(devname, NULL) == ENXIO)
@@ -770,11 +771,9 @@ sparc64_zfs_probe(void)
 		zfs_currdev.root_guid = 0;
 		zfs_currdev.d_dev = &zfs_dev;
 		zfs_currdev.d_type = zfs_currdev.d_dev->dv_type;
-		/* Update the environment for ZFS. */
-		env_setenv("currdev", EV_VOLATILE, zfs_fmtdev(&zfs_currdev),
-		    ofw_setcurrdev, env_nounset);
-		env_setenv("loaddev", EV_VOLATILE, zfs_fmtdev(&zfs_currdev),
-		    env_noset, env_nounset);
+		(void)strncpy(bootpath, zfs_fmtdev(&zfs_currdev),
+		    sizeof(bootpath) - 1);
+		bootpath[sizeof(bootpath) - 1] = '\0';
 	}
 }
 #endif /* LOADER_ZFS_SUPPORT */
@@ -782,7 +781,6 @@ sparc64_zfs_probe(void)
 int
 main(int (*openfirm)(void *))
 {
-	char bootpath[64];
 	char compatible[32];
 	struct devsw **dp;
 
@@ -834,16 +832,11 @@ main(int (*openfirm)(void *))
 	 */
 	if (bootpath[strlen(bootpath) - 2] == ':' &&
 	    bootpath[strlen(bootpath) - 1] == 'f' &&
-	    strstr(bootpath, "cdrom")) {
+	    strstr(bootpath, "cdrom") != NULL) {
 		bootpath[strlen(bootpath) - 1] = 'a';
 		printf("Boot path set to %s\n", bootpath);
 	}
 
-	env_setenv("currdev", EV_VOLATILE, bootpath,
-	    ofw_setcurrdev, env_nounset);
-	env_setenv("loaddev", EV_VOLATILE, bootpath,
-	    env_noset, env_nounset);
-
 	/*
 	 * Initialize devices.
 	 */
@@ -851,6 +844,15 @@ main(int (*openfirm)(void *))
 		if ((*dp)->dv_init != 0)
 			(*dp)->dv_init();
 
+	/*
+	 * Now that sparc64_zfs_probe() might have altered bootpath,
+	 * export it.
+	 */
+	env_setenv("currdev", EV_VOLATILE, bootpath,
+	    ofw_setcurrdev, env_nounset);
+	env_setenv("loaddev", EV_VOLATILE, bootpath,
+	    env_noset, env_nounset);
+
 	printf("\n");
 	printf("%s, Revision %s\n", bootprog_name, bootprog_rev);
 	printf("(%s, %s)\n", bootprog_maker, bootprog_date);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201206291839.q5TIdN1G063896>