I get a panic if I remove this patch, because intf comes NULL for cdc_ncm devices. I'll send an updated patch that solves this issue while still using usb_control_msg. On 02/07/18 10:25, Oliver Neukum wrote: > On So, 2018-07-01 at 11:05 +0200, Miguel Rodríguez Pérez wrote: >> Remove some unneded varibles to make the code easier to read >> and, replace the generic usb_control_msg function for the >> more specific usbnet_write_cmd. >> >> Signed-off-by: Miguel Rodríguez Pérez <miguel@xxxxxxxxxxxxx> > > No, > > sorry, but this is not good. The reason is a bit subtle. > Drivers need to reset the filters when handling post_reset() > [ and reset_resume() ] usbnet_write_cmd() falls back to > kmemdup() with GFP_KERNEL. Usbnet is a framework with class > drivers and some of the devices we drive have a storage > interface. Thence we are on the block error handling path here. > > The simplest solution is to leave out this patch in the sequence. > > Regards > Oliver > > > NACKED-BY: Oliver Neukum <oneukum@xxxxxxxx> > > >> --- >> drivers/net/usb/cdc_ether.c | 15 +++++---------- >> 1 file changed, 5 insertions(+), 10 deletions(-) >> >> diff --git a/drivers/net/usb/cdc_ether.c b/drivers/net/usb/cdc_ether.c >> index 178b956501a7..815ed0dc18fe 100644 >> --- a/drivers/net/usb/cdc_ether.c >> +++ b/drivers/net/usb/cdc_ether.c >> @@ -77,9 +77,7 @@ static const u8 mbm_guid[16] = { >> >> static void usbnet_cdc_update_filter(struct usbnet *dev) >> { >> - struct cdc_state *info = (void *) &dev->data; >> - struct usb_interface *intf = info->control; >> - struct net_device *net = dev->net; >> + struct net_device *net = dev->net; >> >> u16 cdc_filter = USB_CDC_PACKET_TYPE_DIRECTED >> | USB_CDC_PACKET_TYPE_BROADCAST; >> @@ -93,16 +91,13 @@ static void usbnet_cdc_update_filter(struct usbnet *dev) >> if (!netdev_mc_empty(net) || (net->flags & IFF_ALLMULTI)) >> cdc_filter |= USB_CDC_PACKET_TYPE_ALL_MULTICAST; >> >> - usb_control_msg(dev->udev, >> - usb_sndctrlpipe(dev->udev, 0), >> + usbnet_write_cmd(dev, >> USB_CDC_SET_ETHERNET_PACKET_FILTER, >> - USB_TYPE_CLASS | USB_RECIP_INTERFACE, >> + USB_TYPE_CLASS | USB_DIR_OUT | USB_RECIP_INTERFACE, >> cdc_filter, >> - intf->cur_altsetting->desc.bInterfaceNumber, >> + dev->intf->cur_altsetting->desc.bInterfaceNumber, >> NULL, >> - 0, >> - USB_CTRL_SET_TIMEOUT >> - ); >> + 0); >> } >> >> /* probes control interface, claims data interface, collects the bulk > -- Miguel Rodríguez Pérez Laboratorio de Redes EE Telecomunicación – Universidade de Vigo -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html