From patchwork Tue Feb 19 02:38:18 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fabio Estevam X-Patchwork-Id: 221605 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 4D5E72C007A for ; Tue, 19 Feb 2013 13:44:18 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757696Ab3BSCoO (ORCPT ); Mon, 18 Feb 2013 21:44:14 -0500 Received: from mail-vc0-f178.google.com ([209.85.220.178]:51830 "EHLO mail-vc0-f178.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757359Ab3BSCoN (ORCPT ); Mon, 18 Feb 2013 21:44:13 -0500 Received: by mail-vc0-f178.google.com with SMTP id m8so3971898vcd.37 for ; Mon, 18 Feb 2013 18:44:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:x-received:in-reply-to:references:date:message-id :subject:from:to:cc:content-type; bh=6cM2sVsNxrZFNtv9Q15aKS02Fh0NCDa7O49lSdItA80=; b=c9qUwzkuXv6CgPti9I+keMXw1apTDTsI17XtzpmesUxGYz5JNFRS0qI+3m6BFfoWlJ 6dyMP23f6fBOvXkSqCN3MKO712G/4/EF6P/xtsiDwTj+ZVgoCYSOnbATpN8942XHlILp JAWu1Vw2r1TfG7ZrILwCvmCNwU4RzVAhEtiu91GT988GwxcpegI2SuoaZV3PbcjbC3Wl dEPOLTdNyxn6kXshcnlr38usUTrdraH3O/ZYo5PoTjXLiZ5AII1qR5/a/+8URxIcKNck DnL84xWNOL/Yx7koIw4OJ64ZZCMlHgdZD5DoxDDxNZL4sb5cP0Sjv9wtBLjPvOK+abB8 3Xxg== MIME-Version: 1.0 X-Received: by 10.52.38.234 with SMTP id j10mr16570922vdk.0.1361241498468; Mon, 18 Feb 2013 18:38:18 -0800 (PST) Received: by 10.58.210.3 with HTTP; Mon, 18 Feb 2013 18:38:18 -0800 (PST) In-Reply-To: References: <1361217895-17143-1-git-send-email-fabio.estevam@freescale.com> Date: Mon, 18 Feb 2013 23:38:18 -0300 Message-ID: Subject: Re: [PATCH v2] net: fec: Fix the disabling of RX interrupt From: Fabio Estevam To: Frank Li Cc: Fabio Estevam , davem@davemloft.net, Frank.Li@freescale.com, shawn.guo@linaro.org, marex@denx.de, s.hauer@pengutronix.de, netdev@vger.kernel.org Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org On Mon, Feb 18, 2013 at 10:54 PM, Frank Li wrote: > This is not correct fix. > Read, OR and write is not atomic. Need lock. > But if use hw_lock, it cause dead lock. > I spend some time to remove such lock. Ok, could you please try the patch below? It avoids the kernel crash on my mx53qsb: drivers/net/ethernet/freescale/fec.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/drivers/net/ethernet/freescale/fec.c b/drivers/net/ethernet/freescale/fec.c index 0fe68c4..4df6518 100644 --- a/drivers/net/ethernet/freescale/fec.c +++ b/drivers/net/ethernet/freescale/fec.c @@ -804,6 +804,24 @@ rx_processing_done: return pkt_received; } +static void fec_control_rx(struct net_device *ndev, bool enable) +{ + struct fec_enet_private *fep = netdev_priv(ndev); + int reg; + unsigned long flags; + + spin_lock_irqsave(&fep->hw_lock, flags); + reg = readl(fep->hwp + FEC_IMASK); + if (enable) + reg |= FEC_ENET_RXF; + else + reg &= ~FEC_ENET_RXF; + + writel(reg, fep->hwp + FEC_IMASK); + + spin_unlock_irqrestore(&fep->hw_lock, flags); +} + static irqreturn_t fec_enet_interrupt(int irq, void *dev_id) { @@ -821,8 +839,7 @@ fec_enet_interrupt(int irq, void *dev_id) /* Disable the RX interrupt */ if (napi_schedule_prep(&fep->napi)) { - writel(FEC_RX_DISABLED_IMASK, - fep->hwp + FEC_IMASK); + fec_control_rx(ndev, false); __napi_schedule(&fep->napi); } } @@ -1628,7 +1645,7 @@ static int fec_enet_init(struct net_device *ndev) ndev->netdev_ops = &fec_netdev_ops; ndev->ethtool_ops = &fec_enet_ethtool_ops; - writel(FEC_RX_DISABLED_IMASK, fep->hwp + FEC_IMASK); + fec_control_rx(ndev, false); netif_napi_add(ndev, &fep->napi, fec_enet_rx_napi, FEC_NAPI_WEIGHT); /* Initialize the receive buffer descriptors. */