From patchwork Fri Sep 9 10:19:53 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tobias Regnery X-Patchwork-Id: 667955 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 3sVtXd3Vz0z9s3s for ; Fri, 9 Sep 2016 20:21:37 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b=PqeqaQwj; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754106AbcIIKVK (ORCPT ); Fri, 9 Sep 2016 06:21:10 -0400 Received: from mail-wm0-f67.google.com ([74.125.82.67]:33767 "EHLO mail-wm0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754072AbcIIKUR (ORCPT ); Fri, 9 Sep 2016 06:20:17 -0400 Received: by mail-wm0-f67.google.com with SMTP id b187so2057939wme.0 for ; Fri, 09 Sep 2016 03:20:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=iRR9ohb4HNn61XWPiPatIHf9oB/9XP+EriukmYoB614=; b=PqeqaQwjDweurdtFXnWRLxkLM7rBUx/Bx7HRVa3K6SBKtAU+//45NC4HfyMbMPfVw1 FYJdAWpfnAfOLkPnFBh70UMPfV4ZsAQ6UKnbzQ6TGxCIqt8rLTSupcSifx05GhREyJM5 on0xxKlgQhUOnP8H1WE8t1wQJu9lValGwFzUdc69aRHo68peTYjCNSaNjlQhbU4sc3/l agkkPEjgVci5tFMZPBdrvMDAHzajSNvDLwntTY/CLLyWk4yMVatJGT6jp6ONumrdPMRM 32C38igf2TE97fra+JlFq89u0FY3A1k1zV3vRCreCWGp11cZSnwYYvvv0dS/cnb8q6dh 4yRA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:in-reply-to:references; bh=iRR9ohb4HNn61XWPiPatIHf9oB/9XP+EriukmYoB614=; b=OnQmzFG8LrIkcVM+LKMlfAZtLYyu1DGMwd4opXu6K9L/CLV1W8lqN071CFR94AF6K7 Jq86cz6pS40t2y7deNeVuf7K7G06dNuZbjPGsN/9YOmfFV0aza+ILS0g6rr0bJEa/PKD B0YKyb4j38gCr12XtPGe8DMPe7Df5PEQysy96DoW9WbVLSscIV9wIuqIK66lCqZ8HdFK OAuxcv9AVrXwTg08Kt0qGDKc5oyInNk0ofUaduDmTxE/rPy7XP3hHN3BEVD3g5Tb7ZzG 7I176zQUfC9utUftyp8/gX5q5uyn4QzJiVn7qfZY5iab03fsegeBGt4VWVOXEHRSY/Hc vrPg== X-Gm-Message-State: AE9vXwOkOUTK8I18m+RtcV86nQfa+AkdmHmLlSQ3AXuKSzKjMtiMuouIqVT12kagkNVA4A== X-Received: by 10.28.25.71 with SMTP id 68mr2053754wmz.19.1473416415606; Fri, 09 Sep 2016 03:20:15 -0700 (PDT) Received: from localhost.localdomain ([83.243.48.53]) by smtp.gmail.com with ESMTPSA id i5sm2305637wjm.17.2016.09.09.03.20.14 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 09 Sep 2016 03:20:14 -0700 (PDT) From: Tobias Regnery To: netdev@vger.kernel.org, jcliburn@gmail.com, chris.snook@gmail.com Cc: davem@davemloft.net, feng.tang@intel.com, jarod@redhat.com, Tobias Regnery Subject: [PATCH net-next 2/4] alx: factor out part of the interrupt handler Date: Fri, 9 Sep 2016 12:19:53 +0200 Message-Id: <562afaca7ba46bc937da523245a9e40aaf7c4e15.1473404401.git.tobias.regnery@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: References: In-Reply-To: References: Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Factor out the handling of misc interrupts into a new function. This function can be reused later for msi-x interrupts. Signed-off-by: Tobias Regnery --- drivers/net/ethernet/atheros/alx/main.c | 34 +++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/drivers/net/ethernet/atheros/alx/main.c b/drivers/net/ethernet/atheros/alx/main.c index 6dc1539205eb..b34f7b693cec 100644 --- a/drivers/net/ethernet/atheros/alx/main.c +++ b/drivers/net/ethernet/atheros/alx/main.c @@ -302,22 +302,15 @@ static int alx_poll(struct napi_struct *napi, int budget) return work; } -static irqreturn_t alx_intr_handle(struct alx_priv *alx, u32 intr) +static bool alx_intr_handle_misc(struct alx_priv *alx, u32 intr) { struct alx_hw *hw = &alx->hw; - bool write_int_mask = false; - - spin_lock(&alx->irq_lock); - - /* ACK interrupt */ - alx_write_mem32(hw, ALX_ISR, intr | ALX_ISR_DIS); - intr &= alx->int_mask; if (intr & ALX_ISR_FATAL) { netif_warn(alx, hw, alx->dev, "fatal interrupt 0x%x, resetting\n", intr); alx_schedule_reset(alx); - goto out; + return true; } if (intr & ALX_ISR_ALERT) @@ -329,19 +322,32 @@ static irqreturn_t alx_intr_handle(struct alx_priv *alx, u32 intr) * is cleared, the interrupt status could be cleared. */ alx->int_mask &= ~ALX_ISR_PHY; - write_int_mask = true; + alx_write_mem32(hw, ALX_IMR, alx->int_mask); alx_schedule_link_check(alx); } + return false; +} + +static irqreturn_t alx_intr_handle(struct alx_priv *alx, u32 intr) +{ + struct alx_hw *hw = &alx->hw; + + spin_lock(&alx->irq_lock); + + /* ACK interrupt */ + alx_write_mem32(hw, ALX_ISR, intr | ALX_ISR_DIS); + intr &= alx->int_mask; + + if (alx_intr_handle_misc(alx, intr)) + goto out; + if (intr & (ALX_ISR_TX_Q0 | ALX_ISR_RX_Q0)) { napi_schedule(&alx->napi); /* mask rx/tx interrupt, enable them when napi complete */ alx->int_mask &= ~ALX_ISR_ALL_QUEUES; - write_int_mask = true; - } - - if (write_int_mask) alx_write_mem32(hw, ALX_IMR, alx->int_mask); + } alx_write_mem32(hw, ALX_ISR, 0);