On Friday 02 October 2009 23:11:21 Scott Long wrote: > All, > > I have a candidate patch to fix the problem with USB boot media not being > found in time at boot, leading to the "mountroot" prompt instead of a > booting system. Please apply both patches below and let me know if it > works for you. Hi, Your patch looks OK. Some checkpoints however: Does your patch work if ehci/ohci/uhci is kldloaded after system startup? Does your patch work if CAM is not in the kernel? I have a simple imporovement to your patch: I would just add a synchronously blocking call to the end of "usb_bus_attach". Something like: #ifdef USB_HAVE_CAM static void usb_cam_wait_cb(void *arg) { struct usb_bus *bus = *(struct usb_bus **)arg; USB_BUS_LOCK(bus); *(struct usb_bus **)arg = NULL; wakeup(arg); USB_BUS_UNLOCK(bus); } static void usb_wait_cam(struct usb_bus *bus) { struct intr_config_hook *hook; void *temp = bus; hook = malloc(sizeof(*hook), M_TEMP, M_ZERO); hook->ich_func = usb_wait_cam_cb; hook->ich_arg = &temp; config_intrhook_establish(hook); USB_BUS_LOCK(bus); if (temp != NULL) mtx_sleep(&temp, &bus->bus_mtx, 0, "WCAM", 0); USB_BUS_UNLOCK(bus); } #endif That way makes the code more simple and avoids a race with the CAM callback being called after that the hardware is detached. For example if the Host Controller resides on a removable device. There are some more USB_HAVE_XXX in sys/dev/usb/usb_freebsd.h . --HPSReceived on Sat Oct 03 2009 - 05:52:31 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:56 UTC