svn commit: r237815 - stable/9/sys/boot/sparc64/loader
Marius Strobl
marius at alchemy.franken.de
Sat Jun 30 12:22:10 UTC 2012
FYI, with this commit and r237816 for stable/8, the ZFS boot support
for sparc64 in stable/{8,9} should be en par with x86. Instructions
can be found in the original commit log:
http://svnweb.freebsd.org/base?view=revision&revision=234898
Thanks to Gavin Mu for his work!
Marius
On Fri, Jun 29, 2012 at 06:39:23PM +0000, Marius Strobl wrote:
> 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);
> _______________________________________________
> svn-src-all at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/svn-src-all
> To unsubscribe, send any mail to "svn-src-all-unsubscribe at freebsd.org"
More information about the freebsd-sparc64
mailing list