summaryrefslogtreecommitdiffstats
path: root/sys/dev/usb/uhub.c
diff options
context:
space:
mode:
authorpascoe <pascoe@openbsd.org>2007-03-18 06:00:45 +0000
committerpascoe <pascoe@openbsd.org>2007-03-18 06:00:45 +0000
commit9c4bd3342b0b294765a754f0a5abbece2548b05b (patch)
tree6c5c59f2dbe306f33eaad72bee22220e45e864fe /sys/dev/usb/uhub.c
parentSave SOF (frame timing adjustment) before the very first host controller (diff)
downloadwireguard-openbsd-9c4bd3342b0b294765a754f0a5abbece2548b05b.tar.xz
wireguard-openbsd-9c4bd3342b0b294765a754f0a5abbece2548b05b.zip
Wait the stable power delay on a USB hub only once per hub (not per port),
and defer the delay for root hubs until the host controller event thread starts, permitting some concurrency. Speeds up the boot process dramatically when you have lots of host controllers. ok dlg@
Diffstat (limited to 'sys/dev/usb/uhub.c')
-rw-r--r--sys/dev/usb/uhub.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/sys/dev/usb/uhub.c b/sys/dev/usb/uhub.c
index 035e20c94d1..056158408e2 100644
--- a/sys/dev/usb/uhub.c
+++ b/sys/dev/usb/uhub.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: uhub.c,v 1.34 2006/06/26 19:12:38 mjc Exp $ */
+/* $OpenBSD: uhub.c,v 1.35 2007/03/18 06:00:45 pascoe Exp $ */
/* $NetBSD: uhub.c,v 1.64 2003/02/08 03:32:51 ichiro Exp $ */
/* $FreeBSD: src/sys/dev/usb/uhub.c,v 1.18 1999/11/17 22:33:43 n_hibma Exp $ */
@@ -338,10 +338,12 @@ USB_ATTACH(uhub)
USBDEVNAME(sc->sc_dev), port,
usbd_errstr(err));
DPRINTF(("usb_init_port: turn on port %d power\n", port));
- /* Wait for stable power. */
- usbd_delay_ms(dev, pwrdly);
}
+ /* Wait for stable power. Root hubs delay in their event thread. */
+ if (dev->powersrc->parent != NULL)
+ usbd_delay_ms(dev, pwrdly);
+
/* The usual exploration will finish the setup. */
sc->sc_running = 1;