From patchwork Mon Aug 1 05:45:30 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hau X-Patchwork-Id: 654541 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: davem@davemloft.net Delivered-To: davem-davemloft@shards.monkeyblade.net Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by shards.monkeyblade.net (Postfix) with ESMTP id 904F0598DA5 for ; Sun, 31 Jul 2016 22:45:53 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750817AbcHAFpl (ORCPT ); Mon, 1 Aug 2016 01:45:41 -0400 Received: from rtits2.realtek.com ([60.250.210.242]:37647 "EHLO rtits2.realtek.com.tw" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750711AbcHAFpk (ORCPT ); Mon, 1 Aug 2016 01:45:40 -0400 Authenticated-By: X-SpamFilter-By: BOX Solutions SpamTrap 5.56 with qID u715ja5v000369, This message is accepted by code: ctloc85258 Received: from mail.realtek.com (rtitexh01.realtek.com.tw[172.21.6.62]) by rtits2.realtek.com.tw (8.14.9/2.42/5.68) with ESMTP id u715ja5v000369 (version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=NOT); Mon, 1 Aug 2016 13:45:36 +0800 Received: from RTITCASV01.realtek.com.tw (172.21.6.18) by RTITEXH01.realtek.com.tw (172.21.6.62) with Microsoft SMTP Server (TLS) id 14.3.294.0; Mon, 1 Aug 2016 13:45:37 +0800 Received: from localhost.localdomain (172.21.177.169) by RTITCASV01.realtek.com.tw (172.21.6.18) with Microsoft SMTP Server id 14.3.294.0; Mon, 1 Aug 2016 13:45:36 +0800 From: Chunhao Lin To: CC: , , Chunhao Lin Subject: [PATCH net v2] 8139too: fix system hang when there is a tx timeout event. Date: Mon, 1 Aug 2016 13:45:30 +0800 Message-ID: <1470030330-13277-1-git-send-email-hau@realtek.com> X-Mailer: git-send-email 1.9.1 MIME-Version: 1.0 X-Originating-IP: [172.21.177.169] Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.5.12 (shards.monkeyblade.net [149.20.54.216]); Sun, 31 Jul 2016 22:45:53 -0700 (PDT) If tx timeout event occur, kernel will call rtl8139_tx_timeout_task() to reset hardware. But in this function, driver does not stop tx and rx function before reset hardware, that will cause system hang. In this patch, add stop tx and rx function before reset hardware. Signed-off-by: Chunhao Lin --- drivers/net/ethernet/realtek/8139too.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/realtek/8139too.c b/drivers/net/ethernet/realtek/8139too.c index ef668d3..da4c2d8 100644 --- a/drivers/net/ethernet/realtek/8139too.c +++ b/drivers/net/ethernet/realtek/8139too.c @@ -1667,6 +1667,10 @@ static void rtl8139_tx_timeout_task (struct work_struct *work) int i; u8 tmp8; + napi_disable(&tp->napi); + netif_stop_queue(dev); + synchronize_sched(); + netdev_dbg(dev, "Transmit timeout, status %02x %04x %04x media %02x\n", RTL_R8(ChipCmd), RTL_R16(IntrStatus), RTL_R16(IntrMask), RTL_R8(MediaStatus)); @@ -1696,10 +1700,10 @@ static void rtl8139_tx_timeout_task (struct work_struct *work) spin_unlock_irq(&tp->lock); /* ...and finally, reset everything */ - if (netif_running(dev)) { - rtl8139_hw_start (dev); - netif_wake_queue (dev); - } + napi_enable(&tp->napi); + rtl8139_hw_start(dev); + netif_wake_queue(dev); + spin_unlock_bh(&tp->rx_lock); }