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