svn commit: r236581 - head/sys/boot/sparc64/loader
Marius Strobl
marius at FreeBSD.org
Mon Jun 4 20:56:41 UTC 2012
Author: marius
Date: Mon Jun 4 20:56:40 2012
New Revision: 236581
URL: http://svn.freebsd.org/changeset/base/236581
Log:
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
MFC after: r235364
Modified:
head/sys/boot/sparc64/loader/main.c
Modified: head/sys/boot/sparc64/loader/main.c
==============================================================================
--- head/sys/boot/sparc64/loader/main.c Mon Jun 4 20:50:41 2012 (r236580)
+++ head/sys/boot/sparc64/loader/main.c Mon Jun 4 20:56:40 2012 (r236581)
@@ -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);
More information about the svn-src-head
mailing list