If rootdev is set, use it as currdev.

Setting rootdev in the enviornment should specify things
completely. If it is set, then have it override everything else.

PR: 229770
Differential Review: https://reviews.freebsd.org/D16322
This commit is contained in:
Warner Losh 2018-07-18 22:45:26 +00:00
parent a304238bcf
commit e39cc26762

View File

@ -165,17 +165,22 @@ has_keyboard(void)
return retval; return retval;
} }
static void
set_currdev(const char *devname)
{
env_setenv("currdev", EV_VOLATILE, devname, efi_setcurrdev, env_nounset);
env_setenv("loaddev", EV_VOLATILE, devname, env_noset, env_nounset);
}
static void static void
set_currdev_devdesc(struct devdesc *currdev) set_currdev_devdesc(struct devdesc *currdev)
{ {
const char *devname; const char *devname;
devname = efi_fmtdev(currdev); devname = efi_fmtdev(currdev);
printf("Setting currdev to %s\n", devname); printf("Setting currdev to %s\n", devname);
set_currdev(devname);
env_setenv("currdev", EV_VOLATILE, devname, efi_setcurrdev, env_nounset);
env_setenv("loaddev", EV_VOLATILE, devname, env_noset, env_nounset);
} }
static void static void
@ -279,6 +284,14 @@ find_currdev(EFI_LOADED_IMAGE *img)
struct devsw *dev; struct devsw *dev;
int unit; int unit;
uint64_t extra; uint64_t extra;
char *rootdev;
rootdev = getenv("rootdev");
if (rootdev != NULL) {
printf("Setting currdev to configured rootdev %s\n", rootdev);
set_currdev(rootdev);
return (0);
}
#ifdef EFI_ZFS_BOOT #ifdef EFI_ZFS_BOOT
/* /*
@ -616,7 +629,7 @@ main(int argc, CHAR16 *argv[])
* set the env based on it. * set the env based on it.
*/ */
boot_howto_to_env(howto); boot_howto_to_env(howto);
if (efi_copy_init()) { if (efi_copy_init()) {
printf("failed to allocate staging area\n"); printf("failed to allocate staging area\n");
return (EFI_BUFFER_TOO_SMALL); return (EFI_BUFFER_TOO_SMALL);