All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stephen Hemminger <shemminger@linux-foundation.org>
To: Jeff Garzik <jgarzik@pobox.com>
Cc: netdev@vger.kernel.org
Cc: Greg KH <greg@kroah.com>
Subject: [PATCH 09/17] sky2: memory barriers change
Date: Tue, 08 May 2007 20:49:58 -0700	[thread overview]
Message-ID: <20070509035029.621237655@linux-foundation.org> (raw)
In-Reply-To: 20070509034949.624934448@linux-foundation.org

[-- Attachment #1: sky2-more-mb.patch --]
[-- Type: text/plain, Size: 2059 bytes --]

Do some memory barrier changes for safety/perfomance:
Don't need read after update to index, mmiowb() followed by read at end
of irq is sufficient.

Signed-off-by: Stephn Hemminger <shemminger@linux-foundation.org>

---
 drivers/net/sky2.c |   15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

--- sky2-2.6.21.orig/drivers/net/sky2.c	2007-05-08 10:29:09.000000000 -0700
+++ sky2-2.6.21/drivers/net/sky2.c	2007-05-08 10:29:14.000000000 -0700
@@ -836,10 +836,12 @@ static inline struct tx_ring_info *tx_le
 /* Update chip's next pointer */
 static inline void sky2_put_idx(struct sky2_hw *hw, unsigned q, u16 idx)
 {
-	q = Y2_QADDR(q, PREF_UNIT_PUT_IDX);
+	/* Make sure write' to descriptors are complete before we tell hardware */
 	wmb();
-	sky2_write16(hw, q, idx);
-	sky2_read16(hw, q);
+	sky2_write16(hw, Y2_QADDR(q, PREF_UNIT_PUT_IDX), idx);
+
+	/* Synchronize I/O on since next processor may write to tail */
+	mmiowb();
 }
 
 
@@ -971,6 +973,7 @@ stopped:
 
 	/* reset the Rx prefetch unit */
 	sky2_write32(hw, Y2_QADDR(rxq, PREF_UNIT_CTRL), PREF_UNIT_RST_SET);
+	mmiowb();
 }
 
 /* Clean out receive buffer area, assumes receiver hardware stopped */
@@ -1190,7 +1193,7 @@ static int sky2_rx_start(struct sky2_por
 	}
 
 	/* Tell chip about available buffers */
-	sky2_write16(hw, Y2_QADDR(rxq, PREF_UNIT_PUT_IDX), sky2->rx_put);
+	sky2_put_idx(hw, rxq, sky2->rx_put);
 	return 0;
 nomem:
 	sky2_rx_clean(sky2);
@@ -1532,6 +1535,8 @@ static void sky2_tx_complete(struct sky2
 	}
 
 	sky2->tx_cons = idx;
+	smp_mb();
+
 	if (tx_avail(sky2) > MAX_SKB_TX_LE + 4)
 		netif_wake_queue(dev);
 }
@@ -2210,6 +2215,7 @@ force_update:
 
 	/* Fully processed status ring so clear irq */
 	sky2_write32(hw, STAT_CTRL, SC_STAT_CLR_IRQ);
+	mmiowb();
 
 exit_loop:
 	if (buf_write[0]) {
@@ -2436,6 +2442,7 @@ static int sky2_poll(struct net_device *
 	if (work_done < work_limit) {
 		netif_rx_complete(dev0);
 
+		/* end of interrupt, re-enables also acts as I/O synchronization */
 		sky2_read32(hw, B0_Y2_SP_LISR);
 		return 0;
 	} else {

--


  parent reply	other threads:[~2007-05-09  4:03 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-05-09  3:49 [PATCH 00/17] sky2 update for 2.6.22 Stephen Hemminger
2007-05-09  3:49 ` [PATCH 01/17] sky2: fix oops on shutdown Stephen Hemminger
2007-05-09  3:49 ` [PATCH 02/17] sky2: dont restrict config space access Stephen Hemminger
2007-05-09  3:49 ` [PATCH 03/17] sky2: keep track of receive alloc failures Stephen Hemminger
2007-05-09  3:49 ` [PATCH 04/17] sky2: remove dual port workaround Stephen Hemminger
2007-05-09  3:49 ` [PATCH 05/17] pci: advanced error reporting stub return values Stephen Hemminger
2007-05-10 15:48   ` Stephen Hemminger
2007-05-09  3:49 ` [PATCH 06/17] sky2: advanced error reporting Stephen Hemminger
2007-05-09 17:05   ` Linas Vepstas
2007-05-09 22:35     ` Stephen Hemminger
2007-05-09  3:49 ` [PATCH 07/17] sky2: use pci_config access functions Stephen Hemminger
2007-05-09  3:49 ` [PATCH 08/17] sky2: MIB counter overflow handling Stephen Hemminger
2007-05-09  3:49 ` Stephen Hemminger [this message]
2007-05-09  3:49 ` [PATCH 10/17] sky2: add prefetch for next skb on receive Stephen Hemminger
2007-05-09  3:50 ` [PATCH 11/17] sky2: use MII defines Stephen Hemminger
2007-05-09  3:50 ` [PATCH 12/17] sky2: chip id enum Stephen Hemminger
2007-05-09  3:50 ` [PATCH 13/17] sky2: whitespace cleanups Stephen Hemminger
2007-05-09  3:50 ` [PATCH 14/17] pci_wake_enabled function Stephen Hemminger
2007-05-09  3:50 ` [PATCH 15/17] sky2: only disable 88e8056 on some boards Stephen Hemminger
2007-05-09  3:50 ` [PATCH 16/17] sky2: make sure high DMA bits set Stephen Hemminger
2007-05-09  3:50 ` [PATCH 17/17] sky2: version 1.15 Stephen Hemminger
2007-05-09  4:16 ` [PATCH 00/17] sky2 update for 2.6.22 Jeff Garzik
2007-05-09 14:48   ` Stephen Hemminger
2007-05-09 23:27     ` Jeff Garzik
2007-05-10  5:08       ` Stephen Hemminger

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=20070509035029.621237655@linux-foundation.org \
    --to=shemminger@linux-foundation.org \
    --cc=jgarzik@pobox.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.