Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp1420851imu; Tue, 20 Nov 2018 17:53:48 -0800 (PST) X-Google-Smtp-Source: AJdET5cGBN+kP0lYmqm/LkjGmKI7VpZyp5GYUq04TXKaQAcs0MVb8Uh0RqqVSYYDiEj/GtdU7C0z X-Received: by 2002:a62:9111:: with SMTP id l17mr4575991pfe.200.1542765228886; Tue, 20 Nov 2018 17:53:48 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1542765228; cv=none; d=google.com; s=arc-20160816; b=vyxYLkg+TiylpVVy09JgKtEh2cUv2VV5067Rf0nskOfc0UPL4jWvo1yIM6bXxEHzaf T+nT9e+P0ZfxLTsYZckJqje85z2PD7wIWNhTDYYDWAaiFbfSxZdDIH6y2kMoe1WuEYdY BVLZ72FCe6qlFtTPlrjmSe+a+ERPxIb5LZxEHUE6CVo9TlFIruZ5Po7pf6Nhriej2dj1 M4B8PaDuygHE9/LzSjn1LCYV/cF/l1gUvMy322eGZHYBRuP3IAjjMhIcNljkxcjb60hh Z6fn8IHxRxqefYBEbNYH+FtztzWr3UjnH2SUz1saWdTfGcLBqyLQllneeOrBj3tenRlY TZdw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:message-id:date:subject:cc :to:from; bh=rHkU6SEFaKV5ee0N/eT7pFXERqzO7AV5wsJIjj8KO8k=; b=0IKblPm5w2GTCvg60ExLpBngLi1J7nDobaycnPeohGp27oOLy2GcXvj3Mb8Ywko6WY nlcXWwz+k7M/VJKfccCX3hbXPRzKNgFwTWDMqf9WaxgK9smZ0D6XThm9vaAibNaGvBna IrOQVqA49XKaRo7Am8lhcvgI4WOscwdM9uz9w/d/wcVviheV7qH+sQPZiTzhY2INmjCd Glvu7jhkH+y7how277kbf1jUMeA+CIIVTXTIo2pRsE/lcCKPl60dNmA2h7Ekxp8Ob6Ak 2x3dDRC329FjGj9B8M/ZKuZplPe4piI0vuXiQel1YOh11l50rr/nhgeiAeuVp+svAAdz RuBA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id p126si39255427pgp.529.2018.11.20.17.53.34; Tue, 20 Nov 2018 17:53:48 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726428AbeKUMK6 (ORCPT + 99 others); Wed, 21 Nov 2018 07:10:58 -0500 Received: from 59-120-53-16.HINET-IP.hinet.net ([59.120.53.16]:54211 "EHLO ATCSQR.andestech.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725913AbeKUMK6 (ORCPT ); Wed, 21 Nov 2018 07:10:58 -0500 Received: from mail.andestech.com (atcpcs16.andestech.com [10.0.1.222]) by ATCSQR.andestech.com with ESMTP id wAL1bYQo004897; Wed, 21 Nov 2018 09:37:34 +0800 (GMT-8) (envelope-from vincentc@andestech.com) Received: from atcsqa06.andestech.com (10.0.15.65) by ATCPCS16.andestech.com (10.0.1.222) with Microsoft SMTP Server id 14.3.123.3; Wed, 21 Nov 2018 09:38:15 +0800 From: Vincent Chen To: , , , CC: , , Subject: [PATCH v2] net: faraday: ftmac100: remove netif_running(netdev) check before disabling interrupts Date: Wed, 21 Nov 2018 09:38:11 +0800 Message-ID: <1542764291-11208-1-git-send-email-vincentc@andestech.com> X-Mailer: git-send-email 2.7.4 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.0.15.65] X-DNSRBL: X-MAIL: ATCSQR.andestech.com wAL1bYQo004897 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In the original ftmac100_interrupt(), the interrupts are only disabled when the condition "netif_running(netdev)" is true. However, this condition causes kerenl hang in the following case. When the user requests to disable the network device, kernel will clear the bit __LINK_STATE_START from the dev->state and then call the driver's ndo_stop function. Network device interrupts are not blocked during this process. If an interrupt occurs between clearing __LINK_STATE_START and stopping network device, kernel cannot disable the interrupts due to the condition "netif_running(netdev)" in the ISR. Hence, kernel will hang due to the continuous interruption of the network device. In order to solve the above problem, the interrupts of the network device should always be disabled in the ISR without being restricted by the condition "netif_running(netdev)". [V2] Remove unnecessary curly braces. Signed-off-by: Vincent Chen --- drivers/net/ethernet/faraday/ftmac100.c | 7 +++---- 1 files changed, 3 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/faraday/ftmac100.c b/drivers/net/ethernet/faraday/ftmac100.c index 21d7660..17a3625 100644 --- a/drivers/net/ethernet/faraday/ftmac100.c +++ b/drivers/net/ethernet/faraday/ftmac100.c @@ -875,11 +875,10 @@ static irqreturn_t ftmac100_interrupt(int irq, void *dev_id) struct net_device *netdev = dev_id; struct ftmac100 *priv = netdev_priv(netdev); - if (likely(netif_running(netdev))) { - /* Disable interrupts for polling */ - ftmac100_disable_all_int(priv); + /* Disable interrupts for polling */ + ftmac100_disable_all_int(priv); + if (likely(netif_running(netdev))) napi_schedule(&priv->napi); - } return IRQ_HANDLED; } -- 1.7.1