aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/usb/r8152.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c
index 0b1b9188625d..c34df33c6d72 100644
--- a/drivers/net/usb/r8152.c
+++ b/drivers/net/usb/r8152.c
@@ -1294,6 +1294,7 @@ static void intr_callback(struct urb *urb)
1294 } 1294 }
1295 } else { 1295 } else {
1296 if (netif_carrier_ok(tp->netdev)) { 1296 if (netif_carrier_ok(tp->netdev)) {
1297 netif_stop_queue(tp->netdev);
1297 set_bit(RTL8152_LINK_CHG, &tp->flags); 1298 set_bit(RTL8152_LINK_CHG, &tp->flags);
1298 schedule_delayed_work(&tp->schedule, 0); 1299 schedule_delayed_work(&tp->schedule, 0);
1299 } 1300 }
@@ -3169,6 +3170,9 @@ static void set_carrier(struct r8152 *tp)
3169 napi_enable(&tp->napi); 3170 napi_enable(&tp->napi);
3170 netif_wake_queue(netdev); 3171 netif_wake_queue(netdev);
3171 netif_info(tp, link, netdev, "carrier on\n"); 3172 netif_info(tp, link, netdev, "carrier on\n");
3173 } else if (netif_queue_stopped(netdev) &&
3174 skb_queue_len(&tp->tx_queue) < tp->tx_qlen) {
3175 netif_wake_queue(netdev);
3172 } 3176 }
3173 } else { 3177 } else {
3174 if (netif_carrier_ok(netdev)) { 3178 if (netif_carrier_ok(netdev)) {
@@ -3702,8 +3706,18 @@ static int rtl8152_resume(struct usb_interface *intf)
3702 tp->rtl_ops.autosuspend_en(tp, false); 3706 tp->rtl_ops.autosuspend_en(tp, false);
3703 napi_disable(&tp->napi); 3707 napi_disable(&tp->napi);
3704 set_bit(WORK_ENABLE, &tp->flags); 3708 set_bit(WORK_ENABLE, &tp->flags);
3705 if (netif_carrier_ok(tp->netdev)) 3709
3706 rtl_start_rx(tp); 3710 if (netif_carrier_ok(tp->netdev)) {
3711 if (rtl8152_get_speed(tp) & LINK_STATUS) {
3712 rtl_start_rx(tp);
3713 } else {
3714 netif_carrier_off(tp->netdev);
3715 tp->rtl_ops.disable(tp);
3716 netif_info(tp, link, tp->netdev,
3717 "linking down\n");
3718 }
3719 }
3720
3707 napi_enable(&tp->napi); 3721 napi_enable(&tp->napi);
3708 clear_bit(SELECTIVE_SUSPEND, &tp->flags); 3722 clear_bit(SELECTIVE_SUSPEND, &tp->flags);
3709 smp_mb__after_atomic(); 3723 smp_mb__after_atomic();