From patchwork Wed Dec 6 17:24:59 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lucas Stach X-Patchwork-Id: 845266 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3ysQVD6bFKz9s7v for ; Thu, 7 Dec 2017 04:25:08 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751950AbdLFRZC (ORCPT ); Wed, 6 Dec 2017 12:25:02 -0500 Received: from metis.ext.4.pengutronix.de ([92.198.50.35]:54909 "EHLO metis.ext.4.pengutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751570AbdLFRZB (ORCPT ); Wed, 6 Dec 2017 12:25:01 -0500 Received: from dude.hi.pengutronix.de ([2001:67c:670:100:1d::7] helo=dude.pengutronix.de.) by metis.ext.pengutronix.de with esmtp (Exim 4.84_2) (envelope-from ) id 1eMdRL-0003Fb-Tw; Wed, 06 Dec 2017 18:24:59 +0100 From: Lucas Stach To: Fugang Duan , netdev@vger.kernel.org Cc: patchwork-lst@pengutronix.de, kernel@pengutronix.de Subject: [PATCH 2/2] net: fec: optimize IRQ handler Date: Wed, 6 Dec 2017 18:24:59 +0100 Message-Id: <20171206172459.14059-2-l.stach@pengutronix.de> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20171206172459.14059-1-l.stach@pengutronix.de> References: <20171206172459.14059-1-l.stach@pengutronix.de> X-SA-Exim-Connect-IP: 2001:67c:670:100:1d::7 X-SA-Exim-Mail-From: l.stach@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: netdev@vger.kernel.org Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org fep->work_rx and fep->work_tx are both non-zero, as long as the NAPI softirq hasn't finished its work. So if the current IRQ does not signal any RX or TX completion, but some unrelated event, the path to schedule the NAPI context is still entered. The handler works correctly as in this case napi_schedule_prep() will reject the scheduling attempt, but the flow can still be optimized by not trying to schedule if the IRQ doesn't signal RX or TX completion. Signed-off-by: Lucas Stach Acked-by: Fugang Duan --- drivers/net/ethernet/freescale/fec_main.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c index 0b70c07eb703..2043e140e9bd 100644 --- a/drivers/net/ethernet/freescale/fec_main.c +++ b/drivers/net/ethernet/freescale/fec_main.c @@ -1587,14 +1587,14 @@ fec_enet_interrupt(int irq, void *dev_id) int_events = readl_relaxed(fep->hwp + FEC_IEVENT) & readl_relaxed(fep->hwp + FEC_IMASK); writel(int_events, fep->hwp + FEC_IEVENT); - fec_enet_collect_events(fep, int_events); - if ((fep->work_tx || fep->work_rx) && fep->link) { + if ((int_events & (FEC_ENET_RXF | FEC_ENET_TXF)) && fep->link) { ret = IRQ_HANDLED; if (napi_schedule_prep(&fep->napi)) { /* Disable the NAPI interrupts */ writel(FEC_NAPI_IMASK, fep->hwp + FEC_IMASK); + fec_enet_collect_events(fep, int_events); __napi_schedule(&fep->napi); } }