Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts: drivers/net/geneve.c Here we had an overlapping change, where in 'net' the extraneous stats bump was being removed whilst in 'net-next' the final argument to udp_tunnel6_xmit_skb() was being changed. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -158,7 +158,7 @@ static int cdc_mbim_bind(struct usbnet *dev, struct usb_interface *intf)
|
||||
if (!cdc_ncm_comm_intf_is_mbim(intf->cur_altsetting))
|
||||
goto err;
|
||||
|
||||
ret = cdc_ncm_bind_common(dev, intf, data_altsetting, 0);
|
||||
ret = cdc_ncm_bind_common(dev, intf, data_altsetting, dev->driver_info->data);
|
||||
if (ret)
|
||||
goto err;
|
||||
|
||||
@@ -582,6 +582,26 @@ static const struct driver_info cdc_mbim_info_zlp = {
|
||||
.tx_fixup = cdc_mbim_tx_fixup,
|
||||
};
|
||||
|
||||
/* The spefication explicitly allows NDPs to be placed anywhere in the
|
||||
* frame, but some devices fail unless the NDP is placed after the IP
|
||||
* packets. Using the CDC_NCM_FLAG_NDP_TO_END flags to force this
|
||||
* behaviour.
|
||||
*
|
||||
* Note: The current implementation of this feature restricts each NTB
|
||||
* to a single NDP, implying that multiplexed sessions cannot share an
|
||||
* NTB. This might affect performace for multiplexed sessions.
|
||||
*/
|
||||
static const struct driver_info cdc_mbim_info_ndp_to_end = {
|
||||
.description = "CDC MBIM",
|
||||
.flags = FLAG_NO_SETINT | FLAG_MULTI_PACKET | FLAG_WWAN,
|
||||
.bind = cdc_mbim_bind,
|
||||
.unbind = cdc_mbim_unbind,
|
||||
.manage_power = cdc_mbim_manage_power,
|
||||
.rx_fixup = cdc_mbim_rx_fixup,
|
||||
.tx_fixup = cdc_mbim_tx_fixup,
|
||||
.data = CDC_NCM_FLAG_NDP_TO_END,
|
||||
};
|
||||
|
||||
static const struct usb_device_id mbim_devs[] = {
|
||||
/* This duplicate NCM entry is intentional. MBIM devices can
|
||||
* be disguised as NCM by default, and this is necessary to
|
||||
@@ -597,6 +617,10 @@ static const struct usb_device_id mbim_devs[] = {
|
||||
{ USB_VENDOR_AND_INTERFACE_INFO(0x0bdb, USB_CLASS_COMM, USB_CDC_SUBCLASS_MBIM, USB_CDC_PROTO_NONE),
|
||||
.driver_info = (unsigned long)&cdc_mbim_info,
|
||||
},
|
||||
/* Huawei E3372 fails unless NDP comes after the IP packets */
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(0x12d1, 0x157d, USB_CLASS_COMM, USB_CDC_SUBCLASS_MBIM, USB_CDC_PROTO_NONE),
|
||||
.driver_info = (unsigned long)&cdc_mbim_info_ndp_to_end,
|
||||
},
|
||||
/* default entry */
|
||||
{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_MBIM, USB_CDC_PROTO_NONE),
|
||||
.driver_info = (unsigned long)&cdc_mbim_info_zlp,
|
||||
|
@@ -998,10 +998,18 @@ static struct usb_cdc_ncm_ndp16 *cdc_ncm_ndp(struct cdc_ncm_ctx *ctx, struct sk_
|
||||
* NTH16 header as we would normally do. NDP isn't written to the SKB yet, and
|
||||
* the wNdpIndex field in the header is actually not consistent with reality. It will be later.
|
||||
*/
|
||||
if (ctx->drvflags & CDC_NCM_FLAG_NDP_TO_END)
|
||||
if (ctx->drvflags & CDC_NCM_FLAG_NDP_TO_END) {
|
||||
if (ctx->delayed_ndp16->dwSignature == sign)
|
||||
return ctx->delayed_ndp16;
|
||||
|
||||
/* We can only push a single NDP to the end. Return
|
||||
* NULL to send what we've already got and queue this
|
||||
* skb for later.
|
||||
*/
|
||||
else if (ctx->delayed_ndp16->dwSignature)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* follow the chain of NDPs, looking for a match */
|
||||
while (ndpoffset) {
|
||||
ndp16 = (struct usb_cdc_ncm_ndp16 *)(skb->data + ndpoffset);
|
||||
|
@@ -3067,17 +3067,6 @@ static int rtl8152_open(struct net_device *netdev)
|
||||
|
||||
mutex_lock(&tp->control);
|
||||
|
||||
/* The WORK_ENABLE may be set when autoresume occurs */
|
||||
if (test_bit(WORK_ENABLE, &tp->flags)) {
|
||||
clear_bit(WORK_ENABLE, &tp->flags);
|
||||
usb_kill_urb(tp->intr_urb);
|
||||
cancel_delayed_work_sync(&tp->schedule);
|
||||
|
||||
/* disable the tx/rx, if the workqueue has enabled them. */
|
||||
if (netif_carrier_ok(netdev))
|
||||
tp->rtl_ops.disable(tp);
|
||||
}
|
||||
|
||||
tp->rtl_ops.up(tp);
|
||||
|
||||
rtl8152_set_speed(tp, AUTONEG_ENABLE,
|
||||
@@ -3124,12 +3113,6 @@ static int rtl8152_close(struct net_device *netdev)
|
||||
} else {
|
||||
mutex_lock(&tp->control);
|
||||
|
||||
/* The autosuspend may have been enabled and wouldn't
|
||||
* be disable when autoresume occurs, because the
|
||||
* netif_running() would be false.
|
||||
*/
|
||||
rtl_runtime_suspend_enable(tp, false);
|
||||
|
||||
tp->rtl_ops.down(tp);
|
||||
|
||||
mutex_unlock(&tp->control);
|
||||
@@ -3512,7 +3495,7 @@ static int rtl8152_resume(struct usb_interface *intf)
|
||||
netif_device_attach(tp->netdev);
|
||||
}
|
||||
|
||||
if (netif_running(tp->netdev)) {
|
||||
if (netif_running(tp->netdev) && tp->netdev->flags & IFF_UP) {
|
||||
if (test_bit(SELECTIVE_SUSPEND, &tp->flags)) {
|
||||
rtl_runtime_suspend_enable(tp, false);
|
||||
clear_bit(SELECTIVE_SUSPEND, &tp->flags);
|
||||
@@ -3532,6 +3515,8 @@ static int rtl8152_resume(struct usb_interface *intf)
|
||||
}
|
||||
usb_submit_urb(tp->intr_urb, GFP_KERNEL);
|
||||
} else if (test_bit(SELECTIVE_SUSPEND, &tp->flags)) {
|
||||
if (tp->netdev->flags & IFF_UP)
|
||||
rtl_runtime_suspend_enable(tp, false);
|
||||
clear_bit(SELECTIVE_SUSPEND, &tp->flags);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user