Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -258,10 +258,8 @@ struct hso_serial {
|
||||
* so as not to drop characters on the floor.
|
||||
*/
|
||||
int curr_rx_urb_idx;
|
||||
u16 curr_rx_urb_offset;
|
||||
u8 rx_urb_filled[MAX_RX_URBS];
|
||||
struct tasklet_struct unthrottle_tasklet;
|
||||
struct work_struct retry_unthrottle_workqueue;
|
||||
};
|
||||
|
||||
struct hso_device {
|
||||
@@ -1252,14 +1250,6 @@ static void hso_unthrottle(struct tty_struct *tty)
|
||||
tasklet_hi_schedule(&serial->unthrottle_tasklet);
|
||||
}
|
||||
|
||||
static void hso_unthrottle_workfunc(struct work_struct *work)
|
||||
{
|
||||
struct hso_serial *serial =
|
||||
container_of(work, struct hso_serial,
|
||||
retry_unthrottle_workqueue);
|
||||
hso_unthrottle_tasklet(serial);
|
||||
}
|
||||
|
||||
/* open the requested serial port */
|
||||
static int hso_serial_open(struct tty_struct *tty, struct file *filp)
|
||||
{
|
||||
@@ -1295,8 +1285,6 @@ static int hso_serial_open(struct tty_struct *tty, struct file *filp)
|
||||
tasklet_init(&serial->unthrottle_tasklet,
|
||||
(void (*)(unsigned long))hso_unthrottle_tasklet,
|
||||
(unsigned long)serial);
|
||||
INIT_WORK(&serial->retry_unthrottle_workqueue,
|
||||
hso_unthrottle_workfunc);
|
||||
result = hso_start_serial_device(serial->parent, GFP_KERNEL);
|
||||
if (result) {
|
||||
hso_stop_serial_device(serial->parent);
|
||||
@@ -1345,7 +1333,6 @@ static void hso_serial_close(struct tty_struct *tty, struct file *filp)
|
||||
if (!usb_gone)
|
||||
hso_stop_serial_device(serial->parent);
|
||||
tasklet_kill(&serial->unthrottle_tasklet);
|
||||
cancel_work_sync(&serial->retry_unthrottle_workqueue);
|
||||
}
|
||||
|
||||
if (!usb_gone)
|
||||
@@ -2013,8 +2000,7 @@ static void ctrl_callback(struct urb *urb)
|
||||
static int put_rxbuf_data(struct urb *urb, struct hso_serial *serial)
|
||||
{
|
||||
struct tty_struct *tty;
|
||||
int write_length_remaining = 0;
|
||||
int curr_write_len;
|
||||
int count;
|
||||
|
||||
/* Sanity check */
|
||||
if (urb == NULL || serial == NULL) {
|
||||
@@ -2024,29 +2010,28 @@ static int put_rxbuf_data(struct urb *urb, struct hso_serial *serial)
|
||||
|
||||
tty = tty_port_tty_get(&serial->port);
|
||||
|
||||
/* Push data to tty */
|
||||
write_length_remaining = urb->actual_length -
|
||||
serial->curr_rx_urb_offset;
|
||||
D1("data to push to tty");
|
||||
while (write_length_remaining) {
|
||||
if (tty && test_bit(TTY_THROTTLED, &tty->flags)) {
|
||||
tty_kref_put(tty);
|
||||
return -1;
|
||||
}
|
||||
curr_write_len = tty_insert_flip_string(&serial->port,
|
||||
urb->transfer_buffer + serial->curr_rx_urb_offset,
|
||||
write_length_remaining);
|
||||
serial->curr_rx_urb_offset += curr_write_len;
|
||||
write_length_remaining -= curr_write_len;
|
||||
tty_flip_buffer_push(&serial->port);
|
||||
if (tty && test_bit(TTY_THROTTLED, &tty->flags)) {
|
||||
tty_kref_put(tty);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Push data to tty */
|
||||
D1("data to push to tty");
|
||||
count = tty_buffer_request_room(&serial->port, urb->actual_length);
|
||||
if (count >= urb->actual_length) {
|
||||
tty_insert_flip_string(&serial->port, urb->transfer_buffer,
|
||||
urb->actual_length);
|
||||
tty_flip_buffer_push(&serial->port);
|
||||
} else {
|
||||
dev_warn(&serial->parent->usb->dev,
|
||||
"dropping data, %d bytes lost\n", urb->actual_length);
|
||||
}
|
||||
|
||||
tty_kref_put(tty);
|
||||
|
||||
if (write_length_remaining == 0) {
|
||||
serial->curr_rx_urb_offset = 0;
|
||||
serial->rx_urb_filled[hso_urb_to_index(serial, urb)] = 0;
|
||||
}
|
||||
return write_length_remaining;
|
||||
serial->rx_urb_filled[hso_urb_to_index(serial, urb)] = 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -2217,7 +2202,6 @@ static int hso_stop_serial_device(struct hso_device *hso_dev)
|
||||
}
|
||||
}
|
||||
serial->curr_rx_urb_idx = 0;
|
||||
serial->curr_rx_urb_offset = 0;
|
||||
|
||||
if (serial->tx_urb)
|
||||
usb_kill_urb(serial->tx_urb);
|
||||
|
@@ -741,6 +741,7 @@ static const struct usb_device_id products[] = {
|
||||
{QMI_FIXED_INTF(0x19d2, 0x1424, 2)},
|
||||
{QMI_FIXED_INTF(0x19d2, 0x1425, 2)},
|
||||
{QMI_FIXED_INTF(0x19d2, 0x1426, 2)}, /* ZTE MF91 */
|
||||
{QMI_FIXED_INTF(0x19d2, 0x1428, 2)}, /* Telewell TW-LTE 4G v2 */
|
||||
{QMI_FIXED_INTF(0x19d2, 0x2002, 4)}, /* ZTE (Vodafone) K3765-Z */
|
||||
{QMI_FIXED_INTF(0x0f3d, 0x68a2, 8)}, /* Sierra Wireless MC7700 */
|
||||
{QMI_FIXED_INTF(0x114f, 0x68a2, 8)}, /* Sierra Wireless MC7750 */
|
||||
|
@@ -1367,7 +1367,7 @@ static void r8152_csum_workaround(struct r8152 *tp, struct sk_buff *skb,
|
||||
struct sk_buff_head seg_list;
|
||||
struct sk_buff *segs, *nskb;
|
||||
|
||||
features &= ~(NETIF_F_IP_CSUM | NETIF_F_SG | NETIF_F_TSO);
|
||||
features &= ~(NETIF_F_SG | NETIF_F_IPV6_CSUM | NETIF_F_TSO6);
|
||||
segs = skb_gso_segment(skb, features);
|
||||
if (IS_ERR(segs) || !segs)
|
||||
goto drop;
|
||||
@@ -3213,8 +3213,13 @@ static void rtl8152_get_ethtool_stats(struct net_device *dev,
|
||||
struct r8152 *tp = netdev_priv(dev);
|
||||
struct tally_counter tally;
|
||||
|
||||
if (usb_autopm_get_interface(tp->intf) < 0)
|
||||
return;
|
||||
|
||||
generic_ocp_read(tp, PLA_TALLYCNT, sizeof(tally), &tally, MCU_TYPE_PLA);
|
||||
|
||||
usb_autopm_put_interface(tp->intf);
|
||||
|
||||
data[0] = le64_to_cpu(tally.tx_packets);
|
||||
data[1] = le64_to_cpu(tally.rx_packets);
|
||||
data[2] = le64_to_cpu(tally.tx_errors);
|
||||
|
@@ -1714,6 +1714,18 @@ static int smsc95xx_resume(struct usb_interface *intf)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int smsc95xx_reset_resume(struct usb_interface *intf)
|
||||
{
|
||||
struct usbnet *dev = usb_get_intfdata(intf);
|
||||
int ret;
|
||||
|
||||
ret = smsc95xx_reset(dev);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
return smsc95xx_resume(intf);
|
||||
}
|
||||
|
||||
static void smsc95xx_rx_csum_offload(struct sk_buff *skb)
|
||||
{
|
||||
skb->csum = *(u16 *)(skb_tail_pointer(skb) - 2);
|
||||
@@ -2004,7 +2016,7 @@ static struct usb_driver smsc95xx_driver = {
|
||||
.probe = usbnet_probe,
|
||||
.suspend = smsc95xx_suspend,
|
||||
.resume = smsc95xx_resume,
|
||||
.reset_resume = smsc95xx_resume,
|
||||
.reset_resume = smsc95xx_reset_resume,
|
||||
.disconnect = usbnet_disconnect,
|
||||
.disable_hub_initiated_lpm = 1,
|
||||
.supports_autosuspend = 1,
|
||||
|
Reference in New Issue
Block a user