Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933386AbbLHLKf (ORCPT ); Tue, 8 Dec 2015 06:10:35 -0500 Received: from lekensteyn.nl ([178.21.112.251]:49901 "EHLO lekensteyn.nl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932569AbbLHLKd (ORCPT ); Tue, 8 Dec 2015 06:10:33 -0500 Date: Tue, 8 Dec 2015 12:10:08 +0100 From: Peter Wu To: Hayes Wang Cc: "David S . Miller" , "linux-usb@vger.kernel.org" , "netdev@vger.kernel.org" , "linux-kernel@vger.kernel.org" , Lu Baolu Subject: Re: [PATCH] r8152: fix lockup when runtime PM is enabled Message-ID: <20151208111008.GA18728@al> References: <1449507520-10671-1-git-send-email-peter@lekensteyn.nl> <0835B3720019904CB8F7AA43166CEEB2F8D48F@RTITMBSV03.realtek.com.tw> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <0835B3720019904CB8F7AA43166CEEB2F8D48F@RTITMBSV03.realtek.com.tw> User-Agent: Mutt/1.5.24 (2015-08-30) X-Spam-Score: 0.0 (/) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1914 Lines: 69 On Tue, Dec 08, 2015 at 03:18:59AM +0000, Hayes Wang wrote: > Peter Wu > > Sent: Tuesday, December 08, 2015 12:59 AM > [...] > > + if (tp->netdev->flags & IFF_UP) { > > Maybe you could just replace the checking of netif_running(tp->netdev) > with this. Simply replacing netif_running by IFF_UP does not work, it hangs during close when the device is suspended. This patch is correct, but I have a v2 patch that moves rtl_runtime_suspend_enable from close to suspend. This is the evaluated scenario (run = netif_running, up = IFF_UP set): # suspended before open suspend (run=0, up=0) open (run=1) resume (run=1, up=0) <-- fixed by patch (open ends) # while up suspend (run=1, up=1) resume (run=1, up=1) <-- no issue, values match suspend (run=1, up=1) # close while suspended close (run=0, up=1) resume (run=0, up=1) <-- fixed in patch v2 (close cont and ends) <-- rtl_runtime_suspend_enable removed in v2 suspend (run=0, up=0) # while down resume (run=0, up=0) suspend (run=0, up=0) # open while suspended, open fails open (run=1) resume (run=1, up=0) <-- fixed by patch (open fails) suspend (run=0, up=0) > Excuse me. I have a question. Before the open() is finished, the > netif_running() would be true, but the IFF_UP wouldn't be set. Is it > right? That is right, this happens behind the scenes: # open netif_running = true open() if open succeeded set IFF_UP else netif_running = false # close netif_running = false close() clear IFF_UP -- Kind regards, Peter Wu https://lekensteyn.nl -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/