Patch "r8152: fix lockup when runtime PM is enabled" has been added to the 4.3-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
r8152: fix lockup when runtime PM is enabled
to the 4.3-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
r8152-fix-lockup-when-runtime-pm-is-enabled.patch
and it can be found in the queue-4.3 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Wed Dec 30 19:48:47 PST 2015
From: Peter Wu <[email protected]>
Date: Tue, 8 Dec 2015 12:17:42 +0100
Subject: r8152: fix lockup when runtime PM is enabled
From: Peter Wu <[email protected]>
[ Upstream commit 90186af404ada5a47b875bf3c16d0b02bb023ea0 ]
When an interface is brought up which was previously suspended (via runtime PM), it would hang. This happens because napi_disable is called before napi_enable.
Solve this by avoiding napi_enable in the resume during open function (netif_running is true when open is called, IFF_UP is set after a successful open; netif_running is false when close is called, but IFF_UP is then still set).
While at it, remove WORK_ENABLE check from rtl8152_open (introduced with the original change) because it cannot happen:
- After this patch, runtime resume will not set it during rtl8152_open.
- When link is up, rtl8152_open is not called.
- When link is down during system/auto suspend/resume, it is not set.
--- drivers/net/usb/r8152.c | 21 +++------------------ 1 file changed, 3 insertions(+), 18 deletions(-)
drivers/net/usb/r8152.c +3 -18
@@ -3067,17 +3067,6 @@ static int rtl8152_open(struct net_devicmutex_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_devi }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_intnetif_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_int }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); }
Patches currently in stable-queue which might be from [email protected] are
queue-4.3/r8152-fix-lockup-when-runtime-pm-is-enabled.patch