From patchwork Sat Feb 4 23:24:53 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 724174 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 3vG8xb38glz9s1y for ; Sun, 5 Feb 2017 10:26:11 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.b="m3DpLI7N"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751870AbdBDX0F (ORCPT ); Sat, 4 Feb 2017 18:26:05 -0500 Received: from mail-pg0-f44.google.com ([74.125.83.44]:35908 "EHLO mail-pg0-f44.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751507AbdBDXZP (ORCPT ); Sat, 4 Feb 2017 18:25:15 -0500 Received: by mail-pg0-f44.google.com with SMTP id v184so17045350pgv.3 for ; Sat, 04 Feb 2017 15:25:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=LZMIVXTox/3EPCp0TTcdnmxnb8xPhM7BEMT+upysOTI=; b=m3DpLI7N16WTpDkHdienQo+OfkH41EqPwaIRHVSmHSO0iaJeaOtCsrEP+Dy88XpPnr aXyWhx/sFwwlLNyZiy/gsIXclecDaAIhFqqZMstSv+pbJkwunmn7+AS3YFH5PsWI3KGk XD7SY4HPv/LtMbenVfdFiQBDdYWCvhlBLgnrpHxDIqYkX9GUtl2MItu9THrOcTb3jU90 YHUA5vG0BtJ7SepNrcMqBM9V4A9OBfLG+OlqJjNyOQm0GM/JzmxQinGWidGbhF0dM8dD FW6V3rsKGuue6NAXhkG3vC8IgqSygBgoRLWmm+JMEkQ3zzWfJ2sbHaJnGp7qN0QFwCMq 1XUw== 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:in-reply-to :references; bh=LZMIVXTox/3EPCp0TTcdnmxnb8xPhM7BEMT+upysOTI=; b=mmiGyLeSO0sRCuZL9uedjJe/btG2Z63D5KAharMX4xoVp91ZPajOmLiUYCKLYHEoyi XtoRd+GssLKYryk1k0lXNki7XLdwPb/LgfiVcL9jd4v6bQP+ixZyJKdV6z8xAyjPi/gY HBNN7JKCRMyZKITL0NdmapJtKYmRHpr6tZQGw1r+XvBRjby0L+e2I7PNi2hz/wHGs5KG 2YndBkwzDoxBPYg5TJeK0tmZQTi/5PKrtlqgoWy9RVTUVXWEu+eKKLASS1QVsbISLBh9 /MjvMeWrjhYejTUDSN3Gz5OLdcfBOCdV/r5KHUotk9XypLwbPFg+w3Wzmvz3Q9YFVaqy 9wUw== X-Gm-Message-State: AIkVDXK9pGjz6p9JPIx0sn3SnBLY6djos5WVpkb5H2iYdyfmzrhrN7HbuDhLyf8qC8oGq2WT X-Received: by 10.98.204.216 with SMTP id j85mr5078991pfk.130.1486250714340; Sat, 04 Feb 2017 15:25:14 -0800 (PST) Received: from localhost ([2620:0:1000:3012:d537:7fd4:76bd:9074]) by smtp.gmail.com with ESMTPSA id g87sm77582877pfj.20.2017.02.04.15.25.13 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Sat, 04 Feb 2017 15:25:13 -0800 (PST) From: Eric Dumazet To: "David S . Miller" Cc: netdev , Eric Dumazet , Eric Dumazet Subject: [PATCH v2 net-next 03/12] epic100: use napi_complete_done() Date: Sat, 4 Feb 2017 15:24:53 -0800 Message-Id: <20170204232502.22361-4-edumazet@google.com> X-Mailer: git-send-email 2.11.0.483.g087da7b7c-goog In-Reply-To: <20170204232502.22361-1-edumazet@google.com> References: <20170204232502.22361-1-edumazet@google.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Use napi_complete_done() instead of __napi_complete() to : 1) Get support of gro_flush_timeout if opt-in 2) Not rearm interrupts for busy-polling users. 3) use standard NAPI API. 4) get rid of baroque code and ease maintenance. Signed-off-by: Eric Dumazet --- drivers/net/ethernet/smsc/epic100.c | 31 +++++++------------------------ 1 file changed, 7 insertions(+), 24 deletions(-) diff --git a/drivers/net/ethernet/smsc/epic100.c b/drivers/net/ethernet/smsc/epic100.c index 55a95e1d69d68b45ec85a8648e85d24e3673..5f2737189c724eea48ffdd8d8a48f520a209 100644 --- a/drivers/net/ethernet/smsc/epic100.c +++ b/drivers/net/ethernet/smsc/epic100.c @@ -264,7 +264,6 @@ struct epic_private { spinlock_t lock; /* Group with Tx control cache line. */ spinlock_t napi_lock; struct napi_struct napi; - unsigned int reschedule_in_poll; unsigned int cur_tx, dirty_tx; unsigned int cur_rx, dirty_rx; @@ -400,7 +399,6 @@ static int epic_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) spin_lock_init(&ep->lock); spin_lock_init(&ep->napi_lock); - ep->reschedule_in_poll = 0; /* Bring the chip out of low-power mode. */ ew32(GENCTL, 0x4200); @@ -1086,13 +1084,12 @@ static irqreturn_t epic_interrupt(int irq, void *dev_instance) handled = 1; - if ((status & EpicNapiEvent) && !ep->reschedule_in_poll) { + if (status & EpicNapiEvent) { spin_lock(&ep->napi_lock); if (napi_schedule_prep(&ep->napi)) { epic_napi_irq_off(dev, ep); __napi_schedule(&ep->napi); - } else - ep->reschedule_in_poll++; + } spin_unlock(&ep->napi_lock); } status &= ~EpicNapiEvent; @@ -1248,37 +1245,23 @@ static int epic_poll(struct napi_struct *napi, int budget) { struct epic_private *ep = container_of(napi, struct epic_private, napi); struct net_device *dev = ep->mii.dev; - int work_done = 0; void __iomem *ioaddr = ep->ioaddr; - -rx_action: + int work_done; epic_tx(dev, ep); - work_done += epic_rx(dev, budget); + work_done = epic_rx(dev, budget); epic_rx_err(dev, ep); - if (work_done < budget) { + if (work_done < budget && napi_complete_done(napi, work_done)) { unsigned long flags; - int more; - - /* A bit baroque but it avoids a (space hungry) spin_unlock */ spin_lock_irqsave(&ep->napi_lock, flags); - more = ep->reschedule_in_poll; - if (!more) { - __napi_complete(napi); - ew32(INTSTAT, EpicNapiEvent); - epic_napi_irq_on(dev, ep); - } else - ep->reschedule_in_poll--; - + ew32(INTSTAT, EpicNapiEvent); + epic_napi_irq_on(dev, ep); spin_unlock_irqrestore(&ep->napi_lock, flags); - - if (more) - goto rx_action; } return work_done;