Re: [PATCH v3 1/4] Simplify usbnet_cdc_update_filter
From: Miguel Rodríguez Pérez <hidden>
Date: 2018-07-02 11:19:20
Also in:
linux-usb
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:quoted
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 <redacted>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 [off-list ref]quoted
--- 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