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 9/9] atl1: do not drop rx/tx interrupts before they are scheduled
Date: Fri, 13 Apr 2012 20:09:54 +0400	[thread overview]
Message-ID: <1334333394-38404-10-git-send-email-antonz@parallels.com> (raw)
In-Reply-To: <1334333394-38404-1-git-send-email-antonz@parallels.com>

To prevent interrupts lost they should be dropped only if
they are scheduled via napi interfaces. In other case, there is
exists situation when napi handler process TX interrupt, stay in
RX processing and in that moment any other interrupt received.
Then before this patch TX bit in ISR will be cleaned, napi
schedule will not occur in case of currently processing event and
TX interrupt definitely will be lost.

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

diff --git a/drivers/net/ethernet/atheros/atlx/atl1.c b/drivers/net/ethernet/atheros/atlx/atl1.c
index 3c57a30..a0b87b1 100644
--- a/drivers/net/ethernet/atheros/atlx/atl1.c
+++ b/drivers/net/ethernet/atheros/atlx/atl1.c
@@ -2504,8 +2504,12 @@ static irqreturn_t atl1_intr(int irq, void *data)
 	if (!status)
 		return IRQ_NONE;
 
-	/* clear CMB interrupt status at once */
-	adapter->cmb.cmb->int_stats = 0;
+	/* clear CMB interrupt status at once,
+	 * but leave rx/tx interrupt status in case it should be dropped
+	 * only if rx/tx processing queued. In other case interrupt
+	 * can be lost.
+	 */
+	adapter->cmb.cmb->int_stats = status & (ISR_CMB_TX | ISR_CMB_RX);
 
 	if (status & ISR_GPHY)	/* clear phy status */
 		atlx_clear_phy_int(adapter);
@@ -2547,8 +2551,10 @@ 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);
+	if (status & (ISR_CMB_TX | ISR_CMB_RX) &&
+	    atl1_sched_rings_clean(adapter))
+		adapter->cmb.cmb->int_stats = adapter->cmb.cmb->int_stats &
+					      ~(ISR_CMB_TX | ISR_CMB_RX);
 
 	/* rx exception */
 	if (unlikely(status & (ISR_RXF_OV | ISR_RFD_UNRUN |
-- 
1.7.1

  parent reply	other threads:[~2012-04-13 16:10 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 ` [PATCH 7/9] atl1: enable errors and link ints when rx/tx scheduled Tony Zelenoff
2012-04-13 16:09 ` [PATCH 8/9] atl1: do not process interrupts in cycle in handler Tony Zelenoff
2012-04-13 16:09 ` Tony Zelenoff [this message]
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-10-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.