On Tue, 4 Feb 2025, Emile `iMil' Heitor wrote:
com_attach_subr() in sys/dev/ic/com.c has a delay(10000) waiting for output to finish, this is very unlikely to be useful inside a virtual machine and slows down boot time in such machine.
After several back-and-forths, thanks Martin, Simon and Taylor for your help, here's a cleaner approach based on prop_dictionary_util, avoiding #ifdefs: ba0f8fc85baa9144d0a3e1194865b6995f67c1de Avoid delay(10000) for virtual machines diff --git a/sys/arch/x86/x86/x86_autoconf.c b/sys/arch/x86/x86/x86_autoconf.c index 835bb019175..6357967184b 100644 --- a/sys/arch/x86/x86/x86_autoconf.c +++ b/sys/arch/x86/x86/x86_autoconf.c @@ -602,6 +602,10 @@ device_register(device_t dev, void *aux) (void)device_hyperv_register(dev, aux); #endif + if (device_is_a(dev, "com") && vm_guest > VM_GUEST_NO) + prop_dictionary_set_bool(device_properties(dev), + "skip_attach_delay", true); + if (isaboot == NULL && pciboot == NULL) return; diff --git a/sys/dev/ic/com.c b/sys/dev/ic/com.c index d271b594346..5e15ed17a1d 100644 --- a/sys/dev/ic/com.c +++ b/sys/dev/ic/com.c @@ -540,12 +540,14 @@ com_attach_subr(struct com_softc *sc) prop_dictionary_t dict; bool is_console = true; bool force_console = false; + bool skip_attach_delay = false; aprint_naive("\n"); dict = device_properties(sc->sc_dev); prop_dictionary_get_bool(dict, "is_console", &is_console); prop_dictionary_get_bool(dict, "force_console", &force_console); + prop_dictionary_get_bool(dict, "skip_attach_delay", &skip_attach_delay); callout_init(&sc->sc_diag_callout, 0); callout_init(&sc->sc_poll_callout, 0); callout_setfunc(&sc->sc_poll_callout, com_intr_poll, sc); @@ -589,8 +591,11 @@ com_attach_subr(struct com_softc *sc) break; } + /* No need for a delay on virtual machines. */ + if (!skip_attach_delay) + delay(10000); /* wait for output to finish */ + /* Make sure the console is always "hardwired". */ - delay(10000); /* wait for output to finish */ if (is_console) { SET(sc->sc_hwflags, COM_HW_CONSOLE); } ------------------------------------------------------------------------ Emile `iMil' Heitor <imil@{home.imil.net,NetBSD.org}> | https://imil.net