On 2019-07-07 22:36, Steve Kargl wrote:
On Sun, Jul 07, 2019 at 09:10:00PM +0200, Hans Petter Selasky wrote:
On 2019-07-07 20:58, Steve Kargl wrote:
I assume the pause goes after "max--;" statement. I also
assume you want the info with the sysctl removed from
/boot/loader.conf.
You can play with it and see what happens.
Built kernel with pause() added, and commented out the
sysctl in /boot/loader.conf. One reboot took a long
time to get to the a login prompt, but all of my USB
devices were found. A few reboots appeared to hang
after probing the USB mouse (or perhaps I was too
impatient).
On a side note, it seems the wpi0 mapped to wlan0
is now unstable. Luckily, I have an ath(4) pccard
that I can use instead of the builtin wifi of the
laptop. The joys of current. :-)
It sounds like we have a race there and that a wait between the probes
solves it.
Can you try the attached patch on top of -current:
--HPS
Index: sys/dev/usb/usb_hub.c
===================================================================
--- sys/dev/usb/usb_hub.c (revision 349802)
+++ sys/dev/usb/usb_hub.c (working copy)
@@ -2274,18 +2274,19 @@
}
/*------------------------------------------------------------------------*
- * usb_needs_explore_all
+ * usb_needs_explore_all_flags
*
* This function is called whenever a new driver is loaded and will
* cause that all USB buses are re-explored.
*------------------------------------------------------------------------*/
-void
-usb_needs_explore_all(void)
+static void
+usb_needs_explore_all_flags(int flags)
{
struct usb_bus *bus;
devclass_t dc;
device_t dev;
int max;
+ int x;
DPRINTFN(3, "\n");
@@ -2297,9 +2298,9 @@
/*
* Explore all USB buses in parallel.
*/
- max = devclass_get_maxunit(dc);
- while (max >= 0) {
- dev = devclass_get_device(dc, max);
+ max = devclass_get_maxunit(dc) + 1;
+ for (x = 0; x < max; x++) {
+ dev = devclass_get_device(dc, x);
if (dev) {
bus = device_get_softc(dev);
if (bus) {
@@ -2306,10 +2307,17 @@
usb_needs_explore(bus, 1);
}
}
- max--;
+ if (flags & 1)
+ pause("W", hz / max);
}
}
+void
+usb_needs_explore_all(void)
+{
+ usb_needs_explore_all_flags(0);
+}
+
/*------------------------------------------------------------------------*
* usb_needs_explore_init
*
@@ -2324,7 +2332,7 @@
* being called:
*/
if (cold == 0)
- usb_needs_explore_all();
+ usb_needs_explore_all_flags(1);
else
DPRINTFN(-1, "Cold variable is still set!\n");
}
_______________________________________________
freebsd-current@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"