On Fri, Dec 15, 2023 at 02:31:01PM +0800, Yajun Deng wrote: > There is usbdrv_wrap in struct usb_driver and usb_device_driver, > it contains device_driver and for_devices. for_devices is used to > distinguish between device drivers and interface drivers. > > We can compare that if 'drv->probe' is equal to usb_probe_device instead > of using for_devices in is_usb_device_driver(). > > Remove struct usbdrv_wrap, use device_driver directly in struct usb_driver > and usb_device_driver. This makes the code more concise. > > Signed-off-by: Yajun Deng <yajun.deng@xxxxxxxxx> > --- Acked-by: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> However you should simplify the new test: > --- a/drivers/usb/core/usb.h > +++ b/drivers/usb/core/usb.h > @@ -176,11 +176,12 @@ static inline int is_root_hub(struct usb_device *udev) > } > > /* Do the same for device drivers and interface drivers. */ > - > +extern int usb_probe_device(struct device *dev); > static inline int is_usb_device_driver(struct device_driver *drv) > { > - return container_of(drv, struct usbdrv_wrap, driver)-> > - for_devices; > + if (drv->probe == usb_probe_device) > + return 1; > + return 0; > } This should just be: return drv->probe == usb_probe_device; Alan Stern