tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: patch review: avoid com delay() in VMs
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.
> I propose the following approach:
Expanding on Martin's suggestion, I wonder if something like this
is better (completely untested!)? This way we'd always have
inside_vm_guest() available to remove the #ifdef check from any
consumers and reduce clutter a little bit.
diff --git a/sys/arch/x86/include/cpu.h b/sys/arch/x86/include/cpu.h
index 6c26dc624b1..94c99946bc9 100644
--- a/sys/arch/x86/include/cpu.h
+++ b/sys/arch/x86/include/cpu.h
@@ -558,6 +558,12 @@ vm_guest_is_pvh(void)
}
}
+#define __HAVE_VIRTUAL_HOST_P
+static __inline bool __unused
+inside_vm_guest(void)
+{
+ return vm_guest != VM_GUEST_NO;
+}
+
/* cpu_topology.c */
void x86_cpu_topology(struct cpu_info *);
diff --git a/sys/dev/ic/com.c b/sys/dev/ic/com.c
index 539b6597accd..f835e493184c 100644
--- a/sys/dev/ic/com.c
+++ b/sys/dev/ic/com.c
@@ -589,8 +589,15 @@ com_attach_subr(struct com_softc *sc)
break;
}
+ if (!inside_vm_guest()) {
+ /*
+ * Wait for output to finish. No need for
+ * a delay on virtual machines.
+ */
+ delay(10000);
+ }
+
/* Make sure the console is always "hardwired". */
- delay(10000); /* wait for output to finish */
if (is_console) {
SET(sc->sc_hwflags, COM_HW_CONSOLE);
}
diff --git a/sys/sys/cpu.h b/sys/sys/cpu.h
index 0393f9c0058a..3f8a0d1ea684 100644
--- a/sys/sys/cpu.h
+++ b/sys/sys/cpu.h
@@ -50,6 +50,14 @@ void cpu_idle(void);
#endif
#endif
+#ifndef __HAVE_VIRTUAL_HOST_P
+static __inline bool __unused
+inside_vm_guest(void)
+{
+ return 0;
+}
+#endif /* !__HAVE_VIRTUAL_HOST_P */
+
#ifndef cpu_need_resched
void cpu_need_resched(struct cpu_info *, struct lwp *, int);
#endif
Cheers,
Simon.
Home |
Main Index |
Thread Index |
Old Index