From patchwork Sun Oct 15 16:23:18 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Roman Yeryomin X-Patchwork-Id: 826019 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 3yFRhz1CZhz9t3B for ; Mon, 16 Oct 2017 03:28:35 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751930AbdJOQ2b (ORCPT ); Sun, 15 Oct 2017 12:28:31 -0400 Received: from s1l1v.rtu.lv ([213.175.92.62]:52618 "EHLO mail.pbx.lv" rhost-flags-OK-FAIL-OK-OK) by vger.kernel.org with ESMTP id S1751763AbdJOQ2K (ORCPT ); Sun, 15 Oct 2017 12:28:10 -0400 Received: from ubrain.corp.ubnt.com (unknown [213.175.92.61]) by mail.pbx.lv (MailSystem) with ESMTPSA id 7825219189D for ; Sun, 15 Oct 2017 19:22:39 +0300 (EEST) From: Roman Yeryomin To: netdev Subject: [PATCH net-next 04/10] net: korina: optimize tx/rx interrupt handlers Date: Sun, 15 Oct 2017 19:23:18 +0300 Message-Id: <20171015162318.859-1-roman@advem.lv> X-Mailer: git-send-email 2.11.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Signed-off-by: Roman Yeryomin --- drivers/net/ethernet/korina.c | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/drivers/net/ethernet/korina.c b/drivers/net/ethernet/korina.c index 04c1a3f38a79..64ae32af7539 100644 --- a/drivers/net/ethernet/korina.c +++ b/drivers/net/ethernet/korina.c @@ -542,11 +542,10 @@ korina_tx_dma_interrupt(int irq, void *dev_id) struct net_device *dev = dev_id; struct korina_private *lp = netdev_priv(dev); u32 dmas; - irqreturn_t retval; dmas = readl(&lp->tx_dma_regs->dmas); - if (dmas & (DMA_STAT_FINI | DMA_STAT_ERR)) { + if (likely(dmas & KORINA_INT_TX)) { korina_int_disable_tx(lp); korina_tx(dev); @@ -559,14 +558,14 @@ korina_tx_dma_interrupt(int irq, void *dev_id) lp->tx_chain_head = lp->tx_chain_tail; netif_trans_update(dev); } - if (dmas & DMA_STAT_ERR) - printk(KERN_ERR "%s: DMA error\n", dev->name); - retval = IRQ_HANDLED; - } else - retval = IRQ_NONE; + if (unlikely(dmas & DMA_STAT_ERR)) + lp->dma_halt_cnt++; - return retval; + return IRQ_HANDLED; + } + + return IRQ_NONE; } /* Ethernet Rx DMA interrupt */ @@ -575,22 +574,21 @@ static irqreturn_t korina_rx_dma_interrupt(int irq, void *dev_id) struct net_device *dev = dev_id; struct korina_private *lp = netdev_priv(dev); u32 dmas; - irqreturn_t retval; dmas = readl(&lp->rx_dma_regs->dmas); - if (dmas & (DMA_STAT_DONE | DMA_STAT_HALT | DMA_STAT_ERR)) { + + if (likely(dmas & KORINA_INT_RX)) { korina_int_disable_rx(lp); napi_schedule(&lp->napi); - if (dmas & DMA_STAT_ERR) - printk(KERN_ERR "%s: DMA error\n", dev->name); + if (unlikely(dmas & DMA_STAT_ERR)) + lp->dma_halt_cnt++; - retval = IRQ_HANDLED; - } else - retval = IRQ_NONE; + return IRQ_HANDLED; + } - return retval; + return IRQ_NONE; } /*