From patchwork Sat Dec 24 03:56:56 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 708562 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 3tls015ktXz9ssP for ; Sat, 24 Dec 2016 14:57:05 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="MHXsUyq8"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1762474AbcLXD5B (ORCPT ); Fri, 23 Dec 2016 22:57:01 -0500 Received: from mail-oi0-f66.google.com ([209.85.218.66]:33820 "EHLO mail-oi0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751671AbcLXD5A (ORCPT ); Fri, 23 Dec 2016 22:57:00 -0500 Received: by mail-oi0-f66.google.com with SMTP id 3so10275493oih.1 for ; Fri, 23 Dec 2016 19:57:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=DxBvbNu96mwTO0CsELYK/qBvfvyu0IqMyM7TjuX40YI=; b=MHXsUyq8CmqD2ky4uoKAIpy5hLt3Fnpa/SfQcxE+nI5qC2yQDz8P0bmOJ6DIdzlj9Q q625kA1wSOHB5O+Msn8OoX4YYmtVGevfSgQO3BqgBiAF1TCVKQYTwrYvtDQ5+f0Xw2A1 zfqWZ4XDiLh3aBgtHTlX8WabQSxMx+7C2B3prksrziLidOydqrj5GaexOREXxLXZwnmV 8Hhc6H96UpOb4w4GSuv/+U/xJM67A9/tlRxzAUkyDG6bVgyJcgZyFGO3peEAadjSjNwM uOhAkX2GxpCvfZGdPdr4WojX2JPL0+ixrAUly6bT4ILtoxoErJE5K3CuPtMJddAye0Qo ZLaw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=DxBvbNu96mwTO0CsELYK/qBvfvyu0IqMyM7TjuX40YI=; b=MjS8aMsIqa3WIMQc0fcDzDknBC1ZXf6pjFalE4t/qcbMt2z6y/fehwcp9+0eLZM2nL WAmPVQdWoo3n0hRMAkWf64/lpKVz0te1gEDYzQdcdlEKLNCBL8VkwHoEwigkuKeWkjsG IFiDkAcpqdtuqAIDQmojx+VDljcd1Pn14Up6srjxC4PsMmeSZFF0ZbiC8nntBg0rgYyX G/NEPmmKiPZYvByBbB9uuGdkfUAisAf5KSjGP1Kt8fqArLgZvxN4cr3L4+7XIywMsAcv cEZNJ2iOH57tQ+3YCOcxtTJDQYyhOjb0jfY37rxFimDrh4A99eyYHn86WMevBJhvb7eU xioQ== X-Gm-Message-State: AIkVDXLNafy09R+4Qk3Xs6zy7dUT2kCGfR4YQv3/3ZKNCk2TRiu3cLEgrX7sCoK1OYiUfQ== X-Received: by 10.157.56.40 with SMTP id i37mr8627789otc.213.1482551819888; Fri, 23 Dec 2016 19:56:59 -0800 (PST) Received: from bender.lan ([2001:470:d:73f:4069:aa1c:c8dd:bb59]) by smtp.gmail.com with ESMTPSA id t50sm7235570ota.12.2016.12.23.19.56.58 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 23 Dec 2016 19:56:58 -0800 (PST) From: Florian Fainelli To: netdev@vger.kernel.org Cc: davem@davemloft.net, alex@ozo.com, phil@nwl.cc, Florian Fainelli Subject: [PATCH net] net: korina: Fix NAPI versus resources freeing Date: Fri, 23 Dec 2016 19:56:56 -0800 Message-Id: <20161224035656.11289-1-f.fainelli@gmail.com> X-Mailer: git-send-email 2.9.3 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Commit beb0babfb77e ("korina: disable napi on close and restart") introduced calls to napi_disable() that were missing before, unfortunately this leaves a small window during which NAPI has a chance to run, yet we just freed resources since korina_free_ring() has been called: Fix this by disabling NAPI first then freeing resource, and make sure that we also cancel the restart taks before doing the resource freeing. Fixes: beb0babfb77e ("korina: disable napi on close and restart") Reported-by: Alexandros C. Couloumbis Signed-off-by: Florian Fainelli --- drivers/net/ethernet/korina.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/korina.c b/drivers/net/ethernet/korina.c index cbeea915f026..8037426ec50f 100644 --- a/drivers/net/ethernet/korina.c +++ b/drivers/net/ethernet/korina.c @@ -900,10 +900,10 @@ static void korina_restart_task(struct work_struct *work) DMA_STAT_DONE | DMA_STAT_HALT | DMA_STAT_ERR, &lp->rx_dma_regs->dmasm); - korina_free_ring(dev); - napi_disable(&lp->napi); + korina_free_ring(dev); + if (korina_init(dev) < 0) { printk(KERN_ERR "%s: cannot restart device\n", dev->name); return; @@ -1064,12 +1064,12 @@ static int korina_close(struct net_device *dev) tmp = tmp | DMA_STAT_DONE | DMA_STAT_HALT | DMA_STAT_ERR; writel(tmp, &lp->rx_dma_regs->dmasm); - korina_free_ring(dev); - napi_disable(&lp->napi); cancel_work_sync(&lp->restart_task); + korina_free_ring(dev); + free_irq(lp->rx_irq, dev); free_irq(lp->tx_irq, dev); free_irq(lp->ovr_irq, dev);