Index: sys/dev/usb/usb_dev.c =================================================================== --- sys/dev/usb/usb_dev.c +++ sys/dev/usb/usb_dev.c @@ -1687,7 +1687,7 @@ err = priv_check(curthread, PRIV_DRIVER); if (err) break; - usb_template = *(int *)data; + usb_set_template(*(int *)data); break; default: err = ENOTTY; Index: sys/dev/usb/usb_device.h =================================================================== --- sys/dev/usb/usb_device.h +++ sys/dev/usb/usb_device.h @@ -315,6 +315,7 @@ struct usb_endpoint *usb_endpoint_foreach(struct usb_device *udev, struct usb_endpoint *ep); void usb_set_device_state(struct usb_device *, enum usb_dev_state); enum usb_dev_state usb_get_device_state(struct usb_device *); +void usb_set_template(int); uint8_t usbd_enum_lock(struct usb_device *); #if USB_HAVE_UGEN Index: sys/dev/usb/usb_device.c =================================================================== --- sys/dev/usb/usb_device.c +++ sys/dev/usb/usb_device.c @@ -232,6 +232,19 @@ usb_trigger_reprobe_on_off(1); } +void +usb_set_template(int val) +{ + + usb_template = val; + + if (usb_template < 0) { + usb_trigger_reprobe_on_off(0); + } else { + usb_trigger_reprobe_all(); + } +} + static int sysctl_hw_usb_template(SYSCTL_HANDLER_ARGS) { @@ -242,13 +255,7 @@ if (error != 0 || req->newptr == NULL || usb_template == val) return (error); - usb_template = val; - - if (usb_template < 0) { - usb_trigger_reprobe_on_off(0); - } else { - usb_trigger_reprobe_all(); - } + usb_set_template(val); return (0); }