All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tony Zelenoff <antonz@parallels.com>
To: <davem@davemloft.net>
Cc: <antonz@parallels.com>, <netdev@vger.kernel.org>,
	<jcliburn@gmail.com>, <csnook@redhat.com>,
	<khorenko@parallels.com>
Subject: [PATCH 7/9] atl1: enable errors and link ints when rx/tx scheduled
Date: Fri, 13 Apr 2012 20:09:52 +0400	[thread overview]
Message-ID: <1334333394-38404-8-git-send-email-antonz@parallels.com> (raw)
In-Reply-To: <1334333394-38404-1-git-send-email-antonz@parallels.com>

Signed-off-by: Tony Zelenoff <antonz@parallels.com>
---
 drivers/net/ethernet/atheros/atlx/atl1.c |   32 ++++++++++++++++++++---------
 drivers/net/ethernet/atheros/atlx/atl1.h |   10 ++++++--
 2 files changed, 29 insertions(+), 13 deletions(-)

diff --git a/drivers/net/ethernet/atheros/atlx/atl1.c b/drivers/net/ethernet/atheros/atlx/atl1.c
index 4fcdf57..5781597 100644
--- a/drivers/net/ethernet/atheros/atlx/atl1.c
+++ b/drivers/net/ethernet/atheros/atlx/atl1.c
@@ -2460,20 +2460,33 @@ static int atl1_rings_clean(struct napi_struct *napi, int budget)
 
 	napi_complete(napi);
 	/* re-enable Interrupt */
-	iowrite32(ISR_DIS_SMB | ISR_DIS_DMA, adapter->hw.hw_addr + REG_ISR);
+	if (likely(adapter->int_enabled))
+		atlx_imr_set(adapter, IMR_NORMAL_MASK);
 	return work_done;
 }
 
 static inline int atl1_sched_rings_clean(struct atl1_adapter* adapter)
 {
-	if (likely(napi_schedule_prep(&adapter->napi))) {
-		__napi_schedule(&adapter->napi);
+	if (!napi_schedule_prep(&adapter->napi))
+		/* It is possible in case even the RX/TX ints are disabled via IMR
+		 * register the ISR bits are set anyway (but do not produce IRQ).
+		 * To handle such situation the napi functions used to check is
+		 * something scheduled or not.
+		 */
+		return 0;
+
+	__napi_schedule(&adapter->napi);
+
+	/*
+	 * Disable RX/TX ints via IMR register if it is
+	 * allowed. NAPI handler must reenable them in same
+	 * way.
+	 */
+	if (!adapter->int_enabled)
 		return 1;
-	}
 
-	dev_printk(KERN_ERR, &adapter->pdev->dev,
-		   "rx: INTs must be disabled!");
-	return 0;
+	atlx_imr_set(adapter, IMR_NORXTX_MASK);
+	return 1;
 }
 
 /*
@@ -2538,8 +2551,7 @@ static irqreturn_t atl1_intr(int irq, void *data)
 		/* transmit or receive event */
 		if (status & (ISR_CMB_TX | ISR_CMB_RX) &&
 		    atl1_sched_rings_clean(adapter))
-			/* Go away with INTs disabled */
-			return IRQ_HANDLED;
+			break;
 
 		/* rx exception */
 		if (unlikely(status & (ISR_RXF_OV | ISR_RFD_UNRUN |
@@ -2551,7 +2563,7 @@ static irqreturn_t atl1_intr(int irq, void *data)
 					"rx exception, ISR = 0x%x\n",
 					status);
 			if (atl1_sched_rings_clean(adapter))
-				return IRQ_HANDLED;
+				break;
 		}
 
 		if (--max_ints < 0)
diff --git a/drivers/net/ethernet/atheros/atlx/atl1.h b/drivers/net/ethernet/atheros/atlx/atl1.h
index 5209875..3bf79a5 100644
--- a/drivers/net/ethernet/atheros/atlx/atl1.h
+++ b/drivers/net/ethernet/atheros/atlx/atl1.h
@@ -275,13 +275,17 @@ static u32 atl1_check_link(struct atl1_adapter *adapter);
 #define ISR_DIS_SMB				0x20000000
 #define ISR_DIS_DMA				0x40000000
 
-/* Normal Interrupt mask  */
-#define IMR_NORMAL_MASK	(\
+/* Normal Interrupt mask without RX/TX enabled */
+#define IMR_NORXTX_MASK	(\
 	ISR_SMB		|\
 	ISR_GPHY	|\
 	ISR_PHY_LINKDOWN|\
 	ISR_DMAR_TO_RST	|\
-	ISR_DMAW_TO_RST	|\
+	ISR_DMAW_TO_RST)
+
+/* Normal Interrupt mask  */
+#define IMR_NORMAL_MASK	(\
+	IMR_NORXTX_MASK	|\
 	ISR_CMB_TX	|\
 	ISR_CMB_RX)
 
-- 
1.7.1

  parent reply	other threads:[~2012-04-13 16:09 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-04-13 16:09 [PATCH 0/9] atl1: add napi to Atheros L1 NIC Tony Zelenoff
2012-04-13 16:09 ` [PATCH 1/9] atl1: handle rx in separate condition Tony Zelenoff
2012-04-13 16:09 ` [PATCH 2/9] atl1: make driver napi compatible Tony Zelenoff
2012-04-13 17:15   ` Ben Hutchings
2012-04-13 19:22     ` David Miller
2012-04-13 16:09 ` [PATCH 3/9] atl1: add napi process of tx interrupts Tony Zelenoff
2012-04-13 16:09 ` [PATCH 4/9] atl1: use defined functions to disable irq Tony Zelenoff
2012-04-13 16:09 ` [PATCH 5/9] atl1: make function to set imr of card Tony Zelenoff
2012-04-13 16:09 ` [PATCH 6/9] atl1: add value to check ability of reenabling IRQs Tony Zelenoff
2012-04-13 16:09 ` Tony Zelenoff [this message]
2012-04-13 16:09 ` [PATCH 8/9] atl1: do not process interrupts in cycle in handler Tony Zelenoff
2012-04-13 16:09 ` [PATCH 9/9] atl1: do not drop rx/tx interrupts before they are scheduled Tony Zelenoff
2012-04-15 17:03 ` [PATCH 0/9] atl1: add napi to Atheros L1 NIC David Miller
2012-04-15 17:28   ` David Miller
2012-04-16  7:22     ` Tony Zelenoff
2012-04-16 18:20       ` David Miller
2012-04-16 20:51       ` Chris Snook
2012-04-17  8:42         ` Tony Zelenoff

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1334333394-38404-8-git-send-email-antonz@parallels.com \
    --to=antonz@parallels.com \
    --cc=csnook@redhat.com \
    --cc=davem@davemloft.net \
    --cc=jcliburn@gmail.com \
    --cc=khorenko@parallels.com \
    --cc=netdev@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.