diff --git a/stand/efi/libefi/eficom.c b/stand/efi/libefi/eficom.c --- a/stand/efi/libefi/eficom.c +++ b/stand/efi/libefi/eficom.c @@ -254,6 +254,11 @@ return (NULL); } +/* + * Called from cons_probe() to see if this device is available. + * Return immediately on x86, except for hyperv, since it interferes with + * common configurations otherwise (yes, this is just firewalling the bug). + */ static void comc_probe(struct console *sc) { @@ -265,6 +270,18 @@ char *env, *buf, *ep; size_t sz; +#ifdef __amd64__ + /* + * This driver tickles issues on a number of different firmware loads. + * It is only required for HyperV, and is only known to work on HyperV, + * so only allow it on HyperV. + */ + env = getenv("smbios.bios.version"); + if (env == NULL || strncmp(env, "Hyper-V", 7) != 0) { + return; + } +#endif + if (comc_port == NULL) { comc_port = calloc(1, sizeof (struct serial)); if (comc_port == NULL)