Netdev List
 help / color / mirror / Atom feed
* Re: [PATCH net v3 0/9] forcedeth: minor fixes for stats, rmmod, sparse
From: David Miller @ 2011-11-05  2:27 UTC (permalink / raw)
  To: david.decotigny
  Cc: netdev, linux-kernel, ian.campbell, eric.dumazet,
	jeffrey.t.kirsher, jpirko, joe, szymon
In-Reply-To: <cover.1320457247.git.david.decotigny@google.com>

From: David Decotigny <david.decotigny@google.com>
Date: Fri,  4 Nov 2011 18:53:24 -0700

> Changes since v2:
>  - removed "Fix a race during rmmod of forcedeth" from the series
>    (will look at it separately with original author)
>  - added "remove unneeded stats updates" and "64-bit stats"
>  - reordered patches
> 
> Changes since v1:
>  - rebased on top of netdev tip
>  - do not repeat name of device in netdev_dbg
>  - do not completely mute TX timeout messages when debug_tx_timeout is
>    not set
>  - make debug_tx_timeout writable in /sys/module
>  Note: I am re-submitting "expose module parameters in /sys/module" as
>        it can be useful in production and I was assured it doesn't add
>        much memory overhead by the sysfs maintainers.

If you want me to apply any of this now you're going to have to split
out the pure bug fixes from the feature additions and submit the feature
bits later when net-next opens back up.

Because things like 64-bit stats and new stat counters are not
appropriate at this time in the development cycle.

^ permalink raw reply

* Re: [net] etherh: Add MAINTAINERS entry for etherh
From: David Miller @ 2011-11-05  2:25 UTC (permalink / raw)
  To: jeffrey.t.kirsher; +Cc: netdev, gospo, sassmann, linux, joe
In-Reply-To: <1320447521-14270-1-git-send-email-jeffrey.t.kirsher@intel.com>

From: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Date: Fri,  4 Nov 2011 15:58:41 -0700

> During the re-organization of Ethernet drivers, the MAINTAINERS
> entry for etherh got dropped accidentally.
> 
> CC: Russell King <linux@arm.linux.org.uk>
> CC: Joe Perches <joe@perches.com>
> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>

Applied, thanks Jeff.

^ permalink raw reply

* Re: NFSROOT mount fails on SPARC after 2.6.37
From: David Miller @ 2011-11-05  2:03 UTC (permalink / raw)
  To: chuck.lever-QHcLZuEGTsvQT0dZR+AlfA
  Cc: netdev-u79uwXL29TY76Z2rM5mHXA, linux-nfs-u79uwXL29TY76Z2rM5mHXA,
	linux-GLgANOly0l1BDLzU/O5InQ
In-Reply-To: <119BC4C8-E1AB-4415-AF00-B183FC7EB16A-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>


Should be fixed by:

commit 3fb72f1e6e6165c5f495e8dc11c5bbd14c73385c
Author: Micha Nelissen <micha-NMpVyAPB7R5Fb86tMAXRjw@public.gmane.org>
Date:   Thu May 19 10:14:06 2011 +0000

    ipconfig wait for carrier
    
    v3 -> v4: fix return boolean false instead of 0 for ic_is_init_dev
    
    Currently the ip auto configuration has a hardcoded delay of 1 second.
    When (ethernet) link takes longer to come up (e.g. more than 3 seconds),
    nfs root may not be found.
    
    Remove the hardcoded delay, and wait for carrier on at least one network
    device.
    
    Signed-off-by: Micha Nelissen <micha-NMpVyAPB7R5Fb86tMAXRjw@public.gmane.org>
    Cc: David Miller <davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org>
    Signed-off-by: David S. Miller <davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org>
--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply

* [PATCH net v3 7/9] forcedeth: new ethtool stat "tx_timeout" to account for tx_timeouts
From: David Decotigny @ 2011-11-05  1:53 UTC (permalink / raw)
  To: netdev, linux-kernel
  Cc: David S. Miller, Ian Campbell, Eric Dumazet, Jeff Kirsher,
	Jiri Pirko, Joe Perches, Szymon Janc, Sameer Nanda,
	David Decotigny
In-Reply-To: <cover.1320457247.git.david.decotigny@google.com>

From: Sameer Nanda <snanda@google.com>

This change publishes a new ethtool stats: tx_timeout that counts the
number of times the tx_timeout callback was triggered.



Signed-off-by: David Decotigny <david.decotigny@google.com>
---
 drivers/net/ethernet/nvidia/forcedeth.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/drivers/net/ethernet/nvidia/forcedeth.c b/drivers/net/ethernet/nvidia/forcedeth.c
index b26e7db..90cdf26 100644
--- a/drivers/net/ethernet/nvidia/forcedeth.c
+++ b/drivers/net/ethernet/nvidia/forcedeth.c
@@ -633,6 +633,7 @@ static const struct nv_ethtool_str nv_estats_str[] = {
 	{ "rx_packets" },
 	{ "rx_errors_total" },
 	{ "tx_errors_total" },
+	{ "tx_timeout" },
 
 	/* version 2 stats */
 	{ "tx_deferral" },
@@ -673,6 +674,7 @@ struct nv_ethtool_stats {
 	u64 rx_packets;
 	u64 rx_errors_total;
 	u64 tx_errors_total;
+	u64 tx_timeout;
 
 	/* version 2 stats */
 	u64 tx_deferral;
@@ -2529,6 +2531,8 @@ static void nv_tx_timeout(struct net_device *dev)
 
 	spin_lock_irq(&np->lock);
 
+	np->estats.tx_timeout++;
+
 	/* 1) stop tx engine */
 	nv_stop_tx(dev);
 
-- 
1.7.3.1

^ permalink raw reply related

* [PATCH net v3 9/9] forcedeth: fix a few sparse warnings (variable shadowing)
From: David Decotigny @ 2011-11-05  1:53 UTC (permalink / raw)
  To: netdev, linux-kernel
  Cc: David S. Miller, Ian Campbell, Eric Dumazet, Jeff Kirsher,
	Jiri Pirko, Joe Perches, Szymon Janc, David Decotigny
In-Reply-To: <cover.1320457247.git.david.decotigny@google.com>

This fixes the following sparse warnings:
drivers/net/ethernet/nvidia/forcedeth.c:2113:7: warning: symbol 'size' shadows an earlier one
drivers/net/ethernet/nvidia/forcedeth.c:2102:6: originally declared here
drivers/net/ethernet/nvidia/forcedeth.c:2155:7: warning: symbol 'size' shadows an earlier one
drivers/net/ethernet/nvidia/forcedeth.c:2102:6: originally declared here
drivers/net/ethernet/nvidia/forcedeth.c:2227:7: warning: symbol 'size' shadows an earlier one
drivers/net/ethernet/nvidia/forcedeth.c:2215:6: originally declared here
drivers/net/ethernet/nvidia/forcedeth.c:2271:7: warning: symbol 'size' shadows an earlier one
drivers/net/ethernet/nvidia/forcedeth.c:2215:6: originally declared here
drivers/net/ethernet/nvidia/forcedeth.c:2986:20: warning: symbol 'addr' shadows an earlier one
drivers/net/ethernet/nvidia/forcedeth.c:2963:6: originally declared here



Signed-off-by: David Decotigny <david.decotigny@google.com>
---
 drivers/net/ethernet/nvidia/forcedeth.c |   34 +++++++++++++++---------------
 1 files changed, 17 insertions(+), 17 deletions(-)

diff --git a/drivers/net/ethernet/nvidia/forcedeth.c b/drivers/net/ethernet/nvidia/forcedeth.c
index 08c512b..5ca9859 100644
--- a/drivers/net/ethernet/nvidia/forcedeth.c
+++ b/drivers/net/ethernet/nvidia/forcedeth.c
@@ -2131,10 +2131,10 @@ static netdev_tx_t nv_start_xmit(struct sk_buff *skb, struct net_device *dev)
 
 	/* add fragments to entries count */
 	for (i = 0; i < fragments; i++) {
-		u32 size = skb_frag_size(&skb_shinfo(skb)->frags[i]);
+		u32 frag_size = skb_frag_size(&skb_shinfo(skb)->frags[i]);
 
-		entries += (size >> NV_TX2_TSO_MAX_SHIFT) +
-			   ((size & (NV_TX2_TSO_MAX_SIZE-1)) ? 1 : 0);
+		entries += (frag_size >> NV_TX2_TSO_MAX_SHIFT) +
+			   ((frag_size & (NV_TX2_TSO_MAX_SIZE-1)) ? 1 : 0);
 	}
 
 	spin_lock_irqsave(&np->lock, flags);
@@ -2173,13 +2173,13 @@ static netdev_tx_t nv_start_xmit(struct sk_buff *skb, struct net_device *dev)
 	/* setup the fragments */
 	for (i = 0; i < fragments; i++) {
 		const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
-		u32 size = skb_frag_size(frag);
+		u32 frag_size = skb_frag_size(frag);
 		offset = 0;
 
 		do {
 			prev_tx = put_tx;
 			prev_tx_ctx = np->put_tx_ctx;
-			bcnt = (size > NV_TX2_TSO_MAX_SIZE) ? NV_TX2_TSO_MAX_SIZE : size;
+			bcnt = (frag_size > NV_TX2_TSO_MAX_SIZE) ? NV_TX2_TSO_MAX_SIZE : frag_size;
 			np->put_tx_ctx->dma = skb_frag_dma_map(
 							&np->pci_dev->dev,
 							frag, offset,
@@ -2191,12 +2191,12 @@ static netdev_tx_t nv_start_xmit(struct sk_buff *skb, struct net_device *dev)
 			put_tx->flaglen = cpu_to_le32((bcnt-1) | tx_flags);
 
 			offset += bcnt;
-			size -= bcnt;
+			frag_size -= bcnt;
 			if (unlikely(put_tx++ == np->last_tx.orig))
 				put_tx = np->first_tx.orig;
 			if (unlikely(np->put_tx_ctx++ == np->last_tx_ctx))
 				np->put_tx_ctx = np->first_tx_ctx;
-		} while (size);
+		} while (frag_size);
 	}
 
 	/* set last fragment flag  */
@@ -2245,10 +2245,10 @@ static netdev_tx_t nv_start_xmit_optimized(struct sk_buff *skb,
 
 	/* add fragments to entries count */
 	for (i = 0; i < fragments; i++) {
-		u32 size = skb_frag_size(&skb_shinfo(skb)->frags[i]);
+		u32 frag_size = skb_frag_size(&skb_shinfo(skb)->frags[i]);
 
-		entries += (size >> NV_TX2_TSO_MAX_SHIFT) +
-			   ((size & (NV_TX2_TSO_MAX_SIZE-1)) ? 1 : 0);
+		entries += (frag_size >> NV_TX2_TSO_MAX_SHIFT) +
+			   ((frag_size & (NV_TX2_TSO_MAX_SIZE-1)) ? 1 : 0);
 	}
 
 	spin_lock_irqsave(&np->lock, flags);
@@ -2289,13 +2289,13 @@ static netdev_tx_t nv_start_xmit_optimized(struct sk_buff *skb,
 	/* setup the fragments */
 	for (i = 0; i < fragments; i++) {
 		skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
-		u32 size = skb_frag_size(frag);
+		u32 frag_size = skb_frag_size(frag);
 		offset = 0;
 
 		do {
 			prev_tx = put_tx;
 			prev_tx_ctx = np->put_tx_ctx;
-			bcnt = (size > NV_TX2_TSO_MAX_SIZE) ? NV_TX2_TSO_MAX_SIZE : size;
+			bcnt = (frag_size > NV_TX2_TSO_MAX_SIZE) ? NV_TX2_TSO_MAX_SIZE : frag_size;
 			np->put_tx_ctx->dma = skb_frag_dma_map(
 							&np->pci_dev->dev,
 							frag, offset,
@@ -2308,12 +2308,12 @@ static netdev_tx_t nv_start_xmit_optimized(struct sk_buff *skb,
 			put_tx->flaglen = cpu_to_le32((bcnt-1) | tx_flags);
 
 			offset += bcnt;
-			size -= bcnt;
+			frag_size -= bcnt;
 			if (unlikely(put_tx++ == np->last_tx.ex))
 				put_tx = np->first_tx.ex;
 			if (unlikely(np->put_tx_ctx++ == np->last_tx_ctx))
 				np->put_tx_ctx = np->first_tx_ctx;
-		} while (size);
+		} while (frag_size);
 	}
 
 	/* set last fragment flag  */
@@ -2969,11 +2969,11 @@ static void nv_set_multicast(struct net_device *dev)
 				struct netdev_hw_addr *ha;
 
 				netdev_for_each_mc_addr(ha, dev) {
-					unsigned char *addr = ha->addr;
+					unsigned char *hw_addr = ha->addr;
 					u32 a, b;
 
-					a = le32_to_cpu(*(__le32 *) addr);
-					b = le16_to_cpu(*(__le16 *) (&addr[4]));
+					a = le32_to_cpu(*(__le32 *) hw_addr);
+					b = le16_to_cpu(*(__le16 *) (&hw_addr[4]));
 					alwaysOn[0] &= a;
 					alwaysOff[0] &= ~a;
 					alwaysOn[1] &= b;
-- 
1.7.3.1

^ permalink raw reply related

* [PATCH net v3 8/9] forcedeth: 64-bit stats
From: David Decotigny @ 2011-11-05  1:53 UTC (permalink / raw)
  To: netdev, linux-kernel
  Cc: David S. Miller, Ian Campbell, Eric Dumazet, Jeff Kirsher,
	Jiri Pirko, Joe Perches, Szymon Janc, David Decotigny
In-Reply-To: <cover.1320457247.git.david.decotigny@google.com>

This converts forcedeth stats to be 64-bits. It also improves
accounting for dropped rx frames.

Tested:
  16-way SMP x86_64 ->
  RX bytes:7244556582 (7.2 GB)  TX bytes:181904254 (181.9 MB)



Signed-off-by: David Decotigny <david.decotigny@google.com>
---
 drivers/net/ethernet/nvidia/forcedeth.c |   69 +++++++++++++++++++-----------
 1 files changed, 44 insertions(+), 25 deletions(-)

diff --git a/drivers/net/ethernet/nvidia/forcedeth.c b/drivers/net/ethernet/nvidia/forcedeth.c
index 90cdf26..08c512b 100644
--- a/drivers/net/ethernet/nvidia/forcedeth.c
+++ b/drivers/net/ethernet/nvidia/forcedeth.c
@@ -799,6 +799,8 @@ struct fe_priv {
 	struct timer_list stats_poll;
 	u32 nic_poll_irq;
 	int rx_ring_size;
+	unsigned long stats_rx_dropped;
+	unsigned long stats_rx_missed_errors;
 
 	/* media detection workaround.
 	 * Locking: Within irq hander or disable_irq+spin_lock(&np->lock);
@@ -821,6 +823,7 @@ struct fe_priv {
 	struct nv_skb_map *tx_change_owner;
 	struct nv_skb_map *tx_end_flip;
 	int tx_stop;
+	unsigned long stats_tx_dropped;
 
 	/* msi/msi-x fields */
 	u32 msi_flags;
@@ -1700,33 +1703,47 @@ static void nv_get_hw_stats(struct net_device *dev)
 }
 
 /*
- * nv_get_stats: dev->get_stats function
+ * nv_get_stats: dev->ndo_get_stats64 function
  * Get latest stats value from the nic.
  * Called with read_lock(&dev_base_lock) held for read -
  * only synchronized against unregister_netdevice.
  */
-static struct net_device_stats *nv_get_stats(struct net_device *dev)
+static struct rtnl_link_stats64*
+nv_get_stats64(struct net_device *dev, struct rtnl_link_stats64 *storage)
 {
 	struct fe_priv *np = netdev_priv(dev);
 
 	/* If the nic supports hw counters then retrieve latest values */
-	if (np->driver_data & (DEV_HAS_STATISTICS_V1|DEV_HAS_STATISTICS_V2|DEV_HAS_STATISTICS_V3)) {
+	if (np->driver_data & (DEV_HAS_STATISTICS_V1
+			       | DEV_HAS_STATISTICS_V2
+			       | DEV_HAS_STATISTICS_V3)) {
 		nv_get_hw_stats(dev);
 
-		/* copy to net_device stats */
-		dev->stats.tx_packets = np->estats.tx_packets;
-		dev->stats.rx_bytes = np->estats.rx_bytes;
-		dev->stats.tx_bytes = np->estats.tx_bytes;
-		dev->stats.tx_fifo_errors = np->estats.tx_fifo_errors;
-		dev->stats.tx_carrier_errors = np->estats.tx_carrier_errors;
-		dev->stats.rx_crc_errors = np->estats.rx_crc_errors;
-		dev->stats.rx_over_errors = np->estats.rx_over_errors;
-		dev->stats.rx_fifo_errors = np->estats.rx_drop_frame;
-		dev->stats.rx_errors = np->estats.rx_errors_total;
-		dev->stats.tx_errors = np->estats.tx_errors_total;
-	}
-
-	return &dev->stats;
+		/* generic stats */
+		storage->rx_packets = np->estats.rx_packets;
+		storage->tx_packets = np->estats.tx_packets;
+		storage->rx_bytes   = np->estats.rx_bytes;
+		storage->tx_bytes   = np->estats.tx_bytes;
+		storage->rx_errors  = np->estats.rx_errors_total;
+		storage->tx_errors  = np->estats.tx_errors_total;
+		storage->rx_dropped = np->stats_rx_dropped;
+		storage->tx_dropped = np->stats_tx_dropped;
+		storage->multicast  = np->estats.rx_multicast;
+
+		/* detailed rx_errors */
+		storage->rx_length_errors = np->estats.rx_length_error;
+		storage->rx_over_errors   = np->estats.rx_over_errors;
+		storage->rx_crc_errors    = np->estats.rx_crc_errors;
+		storage->rx_frame_errors  = np->estats.rx_frame_align_error;
+		storage->rx_fifo_errors   = np->estats.rx_drop_frame;
+		storage->rx_missed_errors = np->stats_rx_missed_errors;
+
+		/* detailed tx_errors */
+		storage->tx_carrier_errors = np->estats.tx_carrier_errors;
+		storage->tx_fifo_errors    = np->estats.tx_fifo_errors;
+	}
+
+	return storage;
 }
 
 /*
@@ -1759,8 +1776,10 @@ static int nv_alloc_rx(struct net_device *dev)
 				np->put_rx.orig = np->first_rx.orig;
 			if (unlikely(np->put_rx_ctx++ == np->last_rx_ctx))
 				np->put_rx_ctx = np->first_rx_ctx;
-		} else
+		} else {
+			np->stats_rx_dropped++;
 			return 1;
+		}
 	}
 	return 0;
 }
@@ -1791,8 +1810,10 @@ static int nv_alloc_rx_optimized(struct net_device *dev)
 				np->put_rx.ex = np->first_rx.ex;
 			if (unlikely(np->put_rx_ctx++ == np->last_rx_ctx))
 				np->put_rx_ctx = np->first_rx_ctx;
-		} else
+		} else {
+			np->stats_rx_dropped++;
 			return 1;
+		}
 	}
 	return 0;
 }
@@ -1928,7 +1949,7 @@ static void nv_drain_tx(struct net_device *dev)
 			np->tx_ring.ex[i].buflow = 0;
 		}
 		if (nv_release_txskb(np, &np->tx_skb[i]))
-			dev->stats.tx_dropped++;
+			np->stats_tx_dropped++;
 		np->tx_skb[i].dma = 0;
 		np->tx_skb[i].dma_len = 0;
 		np->tx_skb[i].dma_single = 0;
@@ -2651,7 +2672,7 @@ static int nv_rx_process(struct net_device *dev, int limit)
 					/* the rest are hard errors */
 					else {
 						if (flags & NV_RX_MISSEDFRAME)
-							dev->stats.rx_missed_errors++;
+							np->stats_rx_missed_errors++;
 						dev_kfree_skb(skb);
 						goto next_pkt;
 					}
@@ -2694,7 +2715,6 @@ static int nv_rx_process(struct net_device *dev, int limit)
 		skb_put(skb, len);
 		skb->protocol = eth_type_trans(skb, dev);
 		napi_gro_receive(&np->napi, skb);
-		dev->stats.rx_packets++;
 next_pkt:
 		if (unlikely(np->get_rx.orig++ == np->last_rx.orig))
 			np->get_rx.orig = np->first_rx.orig;
@@ -2777,7 +2797,6 @@ static int nv_rx_process_optimized(struct net_device *dev, int limit)
 				__vlan_hwaccel_put_tag(skb, vid);
 			}
 			napi_gro_receive(&np->napi, skb);
-			dev->stats.rx_packets++;
 		} else {
 			dev_kfree_skb(skb);
 		}
@@ -5199,7 +5218,7 @@ static int nv_close(struct net_device *dev)
 static const struct net_device_ops nv_netdev_ops = {
 	.ndo_open		= nv_open,
 	.ndo_stop		= nv_close,
-	.ndo_get_stats		= nv_get_stats,
+	.ndo_get_stats64	= nv_get_stats64,
 	.ndo_start_xmit		= nv_start_xmit,
 	.ndo_tx_timeout		= nv_tx_timeout,
 	.ndo_change_mtu		= nv_change_mtu,
@@ -5216,7 +5235,7 @@ static const struct net_device_ops nv_netdev_ops = {
 static const struct net_device_ops nv_netdev_ops_optimized = {
 	.ndo_open		= nv_open,
 	.ndo_stop		= nv_close,
-	.ndo_get_stats		= nv_get_stats,
+	.ndo_get_stats64	= nv_get_stats64,
 	.ndo_start_xmit		= nv_start_xmit_optimized,
 	.ndo_tx_timeout		= nv_tx_timeout,
 	.ndo_change_mtu		= nv_change_mtu,
-- 
1.7.3.1

^ permalink raw reply related

* [PATCH net v3 6/9] forcedeth: Improve stats counters
From: David Decotigny @ 2011-11-05  1:53 UTC (permalink / raw)
  To: netdev, linux-kernel
  Cc: David S. Miller, Ian Campbell, Eric Dumazet, Jeff Kirsher,
	Jiri Pirko, Joe Perches, Szymon Janc, Mandeep Baines,
	David Decotigny
In-Reply-To: <cover.1320457247.git.david.decotigny@google.com>

From: Mandeep Baines <msb@google.com>

Rx byte count was off; instead use the hardware's count.  Tx packet
count was counting pre-TSO packets; instead count on-the-wire packets.
Report hardware dropped frame count as rx_fifo_errors.

- The count of transmitted packets reported by the forcedeth driver
  reports pre-TSO (TCP Segmentation Offload) packet counts and not the
  count of the number of packets sent on the wire. This change fixes
  the forcedeth driver to report the correct count. Fixed the code by
  copying the count stored in the NIC H/W to the value reported by the
  driver.

- Count rx_drop_frame errors as rx_fifo_errors:
  We see a lot of rx_drop_frame errors if we disable the rx bottom-halves
  for too long.  Normally, rx_fifo_errors would be counted in this case.
  The rx_drop_frame error count is private to forcedeth and is not
  reported by ifconfig or sysfs.  The rx_fifo_errors count is currently
  unused in the forcedeth driver.  It is reported by ifconfig as overruns.
  This change reports rx_drop_frame errors as rx_fifo_errors.



Signed-off-by: David Decotigny <david.decotigny@google.com>
---
 drivers/net/ethernet/nvidia/forcedeth.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/drivers/net/ethernet/nvidia/forcedeth.c b/drivers/net/ethernet/nvidia/forcedeth.c
index 38d8391..b26e7db 100644
--- a/drivers/net/ethernet/nvidia/forcedeth.c
+++ b/drivers/net/ethernet/nvidia/forcedeth.c
@@ -1687,6 +1687,7 @@ static void nv_get_hw_stats(struct net_device *dev)
 		np->estats.tx_pause += readl(base + NvRegTxPause);
 		np->estats.rx_pause += readl(base + NvRegRxPause);
 		np->estats.rx_drop_frame += readl(base + NvRegRxDropFrame);
+		np->estats.rx_errors_total += np->estats.rx_drop_frame;
 	}
 
 	if (np->driver_data & DEV_HAS_STATISTICS_V3) {
@@ -1711,11 +1712,14 @@ static struct net_device_stats *nv_get_stats(struct net_device *dev)
 		nv_get_hw_stats(dev);
 
 		/* copy to net_device stats */
+		dev->stats.tx_packets = np->estats.tx_packets;
+		dev->stats.rx_bytes = np->estats.rx_bytes;
 		dev->stats.tx_bytes = np->estats.tx_bytes;
 		dev->stats.tx_fifo_errors = np->estats.tx_fifo_errors;
 		dev->stats.tx_carrier_errors = np->estats.tx_carrier_errors;
 		dev->stats.rx_crc_errors = np->estats.rx_crc_errors;
 		dev->stats.rx_over_errors = np->estats.rx_over_errors;
+		dev->stats.rx_fifo_errors = np->estats.rx_drop_frame;
 		dev->stats.rx_errors = np->estats.rx_errors_total;
 		dev->stats.tx_errors = np->estats.tx_errors_total;
 	}
-- 
1.7.3.1

^ permalink raw reply related

* [PATCH net v3 5/9] forcedeth: remove unneeded stats updates
From: David Decotigny @ 2011-11-05  1:53 UTC (permalink / raw)
  To: netdev, linux-kernel
  Cc: David S. Miller, Ian Campbell, Eric Dumazet, Jeff Kirsher,
	Jiri Pirko, Joe Perches, Szymon Janc, David Decotigny
In-Reply-To: <cover.1320457247.git.david.decotigny@google.com>

Function ndo_get_stats() updates most of the stats from hardware
registers, making the manual updates un-needed. This change removes
these manual updates. Main exception is rx_missed_errors which needs
manual update. Another exception is rx_packets, still updated manually
in this commit to make sure this patch doesn't change behavior of
driver (this is addressed by a later commit in this series).



Signed-off-by: David Decotigny <david.decotigny@google.com>
---
 drivers/net/ethernet/nvidia/forcedeth.c |   35 +------------------------------
 1 files changed, 1 insertions(+), 34 deletions(-)

diff --git a/drivers/net/ethernet/nvidia/forcedeth.c b/drivers/net/ethernet/nvidia/forcedeth.c
index 295652d..38d8391 100644
--- a/drivers/net/ethernet/nvidia/forcedeth.c
+++ b/drivers/net/ethernet/nvidia/forcedeth.c
@@ -2379,16 +2379,8 @@ static int nv_tx_done(struct net_device *dev, int limit)
 		if (np->desc_ver == DESC_VER_1) {
 			if (flags & NV_TX_LASTPACKET) {
 				if (flags & NV_TX_ERROR) {
-					if (flags & NV_TX_UNDERFLOW)
-						dev->stats.tx_fifo_errors++;
-					if (flags & NV_TX_CARRIERLOST)
-						dev->stats.tx_carrier_errors++;
 					if ((flags & NV_TX_RETRYERROR) && !(flags & NV_TX_RETRYCOUNT_MASK))
 						nv_legacybackoff_reseed(dev);
-					dev->stats.tx_errors++;
-				} else {
-					dev->stats.tx_packets++;
-					dev->stats.tx_bytes += np->get_tx_ctx->skb->len;
 				}
 				dev_kfree_skb_any(np->get_tx_ctx->skb);
 				np->get_tx_ctx->skb = NULL;
@@ -2397,16 +2389,8 @@ static int nv_tx_done(struct net_device *dev, int limit)
 		} else {
 			if (flags & NV_TX2_LASTPACKET) {
 				if (flags & NV_TX2_ERROR) {
-					if (flags & NV_TX2_UNDERFLOW)
-						dev->stats.tx_fifo_errors++;
-					if (flags & NV_TX2_CARRIERLOST)
-						dev->stats.tx_carrier_errors++;
 					if ((flags & NV_TX2_RETRYERROR) && !(flags & NV_TX2_RETRYCOUNT_MASK))
 						nv_legacybackoff_reseed(dev);
-					dev->stats.tx_errors++;
-				} else {
-					dev->stats.tx_packets++;
-					dev->stats.tx_bytes += np->get_tx_ctx->skb->len;
 				}
 				dev_kfree_skb_any(np->get_tx_ctx->skb);
 				np->get_tx_ctx->skb = NULL;
@@ -2439,9 +2423,7 @@ static int nv_tx_done_optimized(struct net_device *dev, int limit)
 		nv_unmap_txskb(np, np->get_tx_ctx);
 
 		if (flags & NV_TX2_LASTPACKET) {
-			if (!(flags & NV_TX2_ERROR))
-				dev->stats.tx_packets++;
-			else {
+			if (flags & NV_TX2_ERROR) {
 				if ((flags & NV_TX2_RETRYERROR) && !(flags & NV_TX2_RETRYCOUNT_MASK)) {
 					if (np->driver_data & DEV_HAS_GEAR_MODE)
 						nv_gear_backoff_reseed(dev);
@@ -2649,7 +2631,6 @@ static int nv_rx_process(struct net_device *dev, int limit)
 					if ((flags & NV_RX_ERROR_MASK) == NV_RX_ERROR4) {
 						len = nv_getlen(dev, skb->data, len);
 						if (len < 0) {
-							dev->stats.rx_errors++;
 							dev_kfree_skb(skb);
 							goto next_pkt;
 						}
@@ -2663,11 +2644,6 @@ static int nv_rx_process(struct net_device *dev, int limit)
 					else {
 						if (flags & NV_RX_MISSEDFRAME)
 							dev->stats.rx_missed_errors++;
-						if (flags & NV_RX_CRCERR)
-							dev->stats.rx_crc_errors++;
-						if (flags & NV_RX_OVERFLOW)
-							dev->stats.rx_over_errors++;
-						dev->stats.rx_errors++;
 						dev_kfree_skb(skb);
 						goto next_pkt;
 					}
@@ -2683,7 +2659,6 @@ static int nv_rx_process(struct net_device *dev, int limit)
 					if ((flags & NV_RX2_ERROR_MASK) == NV_RX2_ERROR4) {
 						len = nv_getlen(dev, skb->data, len);
 						if (len < 0) {
-							dev->stats.rx_errors++;
 							dev_kfree_skb(skb);
 							goto next_pkt;
 						}
@@ -2695,11 +2670,6 @@ static int nv_rx_process(struct net_device *dev, int limit)
 					}
 					/* the rest are hard errors */
 					else {
-						if (flags & NV_RX2_CRCERR)
-							dev->stats.rx_crc_errors++;
-						if (flags & NV_RX2_OVERFLOW)
-							dev->stats.rx_over_errors++;
-						dev->stats.rx_errors++;
 						dev_kfree_skb(skb);
 						goto next_pkt;
 					}
@@ -2717,7 +2687,6 @@ static int nv_rx_process(struct net_device *dev, int limit)
 		skb->protocol = eth_type_trans(skb, dev);
 		napi_gro_receive(&np->napi, skb);
 		dev->stats.rx_packets++;
-		dev->stats.rx_bytes += len;
 next_pkt:
 		if (unlikely(np->get_rx.orig++ == np->last_rx.orig))
 			np->get_rx.orig = np->first_rx.orig;
@@ -2800,9 +2769,7 @@ static int nv_rx_process_optimized(struct net_device *dev, int limit)
 				__vlan_hwaccel_put_tag(skb, vid);
 			}
 			napi_gro_receive(&np->napi, skb);
-
 			dev->stats.rx_packets++;
-			dev->stats.rx_bytes += len;
 		} else {
 			dev_kfree_skb(skb);
 		}
-- 
1.7.3.1

^ permalink raw reply related

* [PATCH net v3 4/9] forcedeth: expose module parameters in /sys/module
From: David Decotigny @ 2011-11-05  1:53 UTC (permalink / raw)
  To: netdev, linux-kernel
  Cc: David S. Miller, Ian Campbell, Eric Dumazet, Jeff Kirsher,
	Jiri Pirko, Joe Perches, Szymon Janc, David Decotigny
In-Reply-To: <cover.1320457247.git.david.decotigny@google.com>

In particular, debug_tx_timeout can be updated at runtime.



Signed-off-by: David Decotigny <david.decotigny@google.com>
---
 drivers/net/ethernet/nvidia/forcedeth.c |   18 +++++++++---------
 1 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/drivers/net/ethernet/nvidia/forcedeth.c b/drivers/net/ethernet/nvidia/forcedeth.c
index 3f66b74..295652d 100644
--- a/drivers/net/ethernet/nvidia/forcedeth.c
+++ b/drivers/net/ethernet/nvidia/forcedeth.c
@@ -6010,23 +6010,23 @@ static void __exit exit_nic(void)
 	pci_unregister_driver(&driver);
 }
 
-module_param(max_interrupt_work, int, 0);
+module_param(max_interrupt_work, int, S_IRUGO);
 MODULE_PARM_DESC(max_interrupt_work, "forcedeth maximum events handled per interrupt");
-module_param(optimization_mode, int, 0);
+module_param(optimization_mode, int, S_IRUGO);
 MODULE_PARM_DESC(optimization_mode, "In throughput mode (0), every tx & rx packet will generate an interrupt. In CPU mode (1), interrupts are controlled by a timer. In dynamic mode (2), the mode toggles between throughput and CPU mode based on network load.");
-module_param(poll_interval, int, 0);
+module_param(poll_interval, int, S_IRUGO);
 MODULE_PARM_DESC(poll_interval, "Interval determines how frequent timer interrupt is generated by [(time_in_micro_secs * 100) / (2^10)]. Min is 0 and Max is 65535.");
-module_param(msi, int, 0);
+module_param(msi, int, S_IRUGO);
 MODULE_PARM_DESC(msi, "MSI interrupts are enabled by setting to 1 and disabled by setting to 0.");
-module_param(msix, int, 0);
+module_param(msix, int, S_IRUGO);
 MODULE_PARM_DESC(msix, "MSIX interrupts are enabled by setting to 1 and disabled by setting to 0.");
-module_param(dma_64bit, int, 0);
+module_param(dma_64bit, int, S_IRUGO);
 MODULE_PARM_DESC(dma_64bit, "High DMA is enabled by setting to 1 and disabled by setting to 0.");
-module_param(phy_cross, int, 0);
+module_param(phy_cross, int, S_IRUGO);
 MODULE_PARM_DESC(phy_cross, "Phy crossover detection for Realtek 8201 phy is enabled by setting to 1 and disabled by setting to 0.");
-module_param(phy_power_down, int, 0);
+module_param(phy_power_down, int, S_IRUGO);
 MODULE_PARM_DESC(phy_power_down, "Power down phy and disable link when interface is down (1), or leave phy powered up (0).");
-module_param(debug_tx_timeout, bool, 0);
+module_param(debug_tx_timeout, bool, S_IRUGO|S_IWUSR);
 MODULE_PARM_DESC(debug_tx_timeout,
 		 "Dump tx related registers and ring when tx_timeout happens");
 
-- 
1.7.3.1

^ permalink raw reply related

* [PATCH net v3 3/9] forcedeth: allow to silence tx_timeout debug messages
From: David Decotigny @ 2011-11-05  1:53 UTC (permalink / raw)
  To: netdev, linux-kernel
  Cc: David S. Miller, Ian Campbell, Eric Dumazet, Jeff Kirsher,
	Jiri Pirko, Joe Perches, Szymon Janc, Sameer Nanda,
	David Decotigny
In-Reply-To: <cover.1320457247.git.david.decotigny@google.com>

From: Sameer Nanda <snanda@google.com>

This adds a new module parameter "debug_tx_timeout" to silence most
debug messages in case of TX timeout. These messages don't provide a
signal/noise ratio high enough for production systems and, with ~30kB
logged each time, they tend to add to a cascade effect if the system
is already under stress (memory pressure, disk, etc.).

By default, the parameter is clear, meaning the debug messages are not
displayed.



Signed-off-by: David Decotigny <david.decotigny@google.com>
---
 drivers/net/ethernet/nvidia/forcedeth.c |   98 ++++++++++++++++++-------------
 1 files changed, 57 insertions(+), 41 deletions(-)

diff --git a/drivers/net/ethernet/nvidia/forcedeth.c b/drivers/net/ethernet/nvidia/forcedeth.c
index 9aefee1..3f66b74 100644
--- a/drivers/net/ethernet/nvidia/forcedeth.c
+++ b/drivers/net/ethernet/nvidia/forcedeth.c
@@ -892,6 +892,11 @@ enum {
 static int dma_64bit = NV_DMA_64BIT_ENABLED;
 
 /*
+ * Debug output control for tx_timeout
+ */
+static bool debug_tx_timeout = false;
+
+/*
  * Crossover Detection
  * Realtek 8201 phy + some OEM boards do not work properly.
  */
@@ -2475,56 +2480,64 @@ static void nv_tx_timeout(struct net_device *dev)
 	u32 status;
 	union ring_type put_tx;
 	int saved_tx_limit;
-	int i;
 
 	if (np->msi_flags & NV_MSI_X_ENABLED)
 		status = readl(base + NvRegMSIXIrqStatus) & NVREG_IRQSTAT_MASK;
 	else
 		status = readl(base + NvRegIrqStatus) & NVREG_IRQSTAT_MASK;
 
-	netdev_info(dev, "Got tx_timeout. irq: %08x\n", status);
+	netdev_warn(dev, "Got tx_timeout. irq status: %08x\n", status);
 
-	netdev_info(dev, "Ring at %lx\n", (unsigned long)np->ring_addr);
-	netdev_info(dev, "Dumping tx registers\n");
-	for (i = 0; i <= np->register_size; i += 32) {
-		netdev_info(dev,
-			    "%3x: %08x %08x %08x %08x %08x %08x %08x %08x\n",
-			    i,
-			    readl(base + i + 0), readl(base + i + 4),
-			    readl(base + i + 8), readl(base + i + 12),
-			    readl(base + i + 16), readl(base + i + 20),
-			    readl(base + i + 24), readl(base + i + 28));
-	}
-	netdev_info(dev, "Dumping tx ring\n");
-	for (i = 0; i < np->tx_ring_size; i += 4) {
-		if (!nv_optimized(np)) {
-			netdev_info(dev,
-				    "%03x: %08x %08x // %08x %08x // %08x %08x // %08x %08x\n",
-				    i,
-				    le32_to_cpu(np->tx_ring.orig[i].buf),
-				    le32_to_cpu(np->tx_ring.orig[i].flaglen),
-				    le32_to_cpu(np->tx_ring.orig[i+1].buf),
-				    le32_to_cpu(np->tx_ring.orig[i+1].flaglen),
-				    le32_to_cpu(np->tx_ring.orig[i+2].buf),
-				    le32_to_cpu(np->tx_ring.orig[i+2].flaglen),
-				    le32_to_cpu(np->tx_ring.orig[i+3].buf),
-				    le32_to_cpu(np->tx_ring.orig[i+3].flaglen));
-		} else {
+	if (unlikely(debug_tx_timeout)) {
+		int i;
+
+		netdev_info(dev, "Ring at %lx\n", (unsigned long)np->ring_addr);
+		netdev_info(dev, "Dumping tx registers\n");
+		for (i = 0; i <= np->register_size; i += 32) {
 			netdev_info(dev,
-				    "%03x: %08x %08x %08x // %08x %08x %08x // %08x %08x %08x // %08x %08x %08x\n",
+				    "%3x: %08x %08x %08x %08x "
+				    "%08x %08x %08x %08x\n",
 				    i,
-				    le32_to_cpu(np->tx_ring.ex[i].bufhigh),
-				    le32_to_cpu(np->tx_ring.ex[i].buflow),
-				    le32_to_cpu(np->tx_ring.ex[i].flaglen),
-				    le32_to_cpu(np->tx_ring.ex[i+1].bufhigh),
-				    le32_to_cpu(np->tx_ring.ex[i+1].buflow),
-				    le32_to_cpu(np->tx_ring.ex[i+1].flaglen),
-				    le32_to_cpu(np->tx_ring.ex[i+2].bufhigh),
-				    le32_to_cpu(np->tx_ring.ex[i+2].buflow),
-				    le32_to_cpu(np->tx_ring.ex[i+2].flaglen),
-				    le32_to_cpu(np->tx_ring.ex[i+3].bufhigh),
-				    le32_to_cpu(np->tx_ring.ex[i+3].buflow),
-				    le32_to_cpu(np->tx_ring.ex[i+3].flaglen));
+				    readl(base + i + 0), readl(base + i + 4),
+				    readl(base + i + 8), readl(base + i + 12),
+				    readl(base + i + 16), readl(base + i + 20),
+				    readl(base + i + 24), readl(base + i + 28));
+		}
+		netdev_info(dev, "Dumping tx ring\n");
+		for (i = 0; i < np->tx_ring_size; i += 4) {
+			if (!nv_optimized(np)) {
+				netdev_info(dev,
+					    "%03x: %08x %08x // %08x %08x "
+					    "// %08x %08x // %08x %08x\n",
+					    i,
+					    le32_to_cpu(np->tx_ring.orig[i].buf),
+					    le32_to_cpu(np->tx_ring.orig[i].flaglen),
+					    le32_to_cpu(np->tx_ring.orig[i+1].buf),
+					    le32_to_cpu(np->tx_ring.orig[i+1].flaglen),
+					    le32_to_cpu(np->tx_ring.orig[i+2].buf),
+					    le32_to_cpu(np->tx_ring.orig[i+2].flaglen),
+					    le32_to_cpu(np->tx_ring.orig[i+3].buf),
+					    le32_to_cpu(np->tx_ring.orig[i+3].flaglen));
+			} else {
+				netdev_info(dev,
+					    "%03x: %08x %08x %08x "
+					    "// %08x %08x %08x "
+					    "// %08x %08x %08x "
+					    "// %08x %08x %08x\n",
+					    i,
+					    le32_to_cpu(np->tx_ring.ex[i].bufhigh),
+					    le32_to_cpu(np->tx_ring.ex[i].buflow),
+					    le32_to_cpu(np->tx_ring.ex[i].flaglen),
+					    le32_to_cpu(np->tx_ring.ex[i+1].bufhigh),
+					    le32_to_cpu(np->tx_ring.ex[i+1].buflow),
+					    le32_to_cpu(np->tx_ring.ex[i+1].flaglen),
+					    le32_to_cpu(np->tx_ring.ex[i+2].bufhigh),
+					    le32_to_cpu(np->tx_ring.ex[i+2].buflow),
+					    le32_to_cpu(np->tx_ring.ex[i+2].flaglen),
+					    le32_to_cpu(np->tx_ring.ex[i+3].bufhigh),
+					    le32_to_cpu(np->tx_ring.ex[i+3].buflow),
+					    le32_to_cpu(np->tx_ring.ex[i+3].flaglen));
+			}
 		}
 	}
 
@@ -6013,6 +6026,9 @@ module_param(phy_cross, int, 0);
 MODULE_PARM_DESC(phy_cross, "Phy crossover detection for Realtek 8201 phy is enabled by setting to 1 and disabled by setting to 0.");
 module_param(phy_power_down, int, 0);
 MODULE_PARM_DESC(phy_power_down, "Power down phy and disable link when interface is down (1), or leave phy powered up (0).");
+module_param(debug_tx_timeout, bool, 0);
+MODULE_PARM_DESC(debug_tx_timeout,
+		 "Dump tx related registers and ring when tx_timeout happens");
 
 MODULE_AUTHOR("Manfred Spraul <manfred@colorfullife.com>");
 MODULE_DESCRIPTION("Reverse Engineered nForce ethernet driver");
-- 
1.7.3.1

^ permalink raw reply related

* [PATCH net v3 2/9] forcedeth: Acknowledge only interrupts that are being processed
From: David Decotigny @ 2011-11-05  1:53 UTC (permalink / raw)
  To: netdev, linux-kernel
  Cc: David S. Miller, Ian Campbell, Eric Dumazet, Jeff Kirsher,
	Jiri Pirko, Joe Perches, Szymon Janc, Mike Ditto, David Decotigny
In-Reply-To: <cover.1320457247.git.david.decotigny@google.com>

From: Mike Ditto <mditto@google.com>

This is to avoid a race, accidentally acknowledging an interrupt that
we didn't notice and won't immediately process.  This is based solely
on code inspection; it is not known if there was an actual bug here.



Signed-off-by: David Decotigny <david.decotigny@google.com>
---
 drivers/net/ethernet/nvidia/forcedeth.c |   13 ++++++++-----
 1 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/drivers/net/ethernet/nvidia/forcedeth.c b/drivers/net/ethernet/nvidia/forcedeth.c
index 2f884fc..9aefee1 100644
--- a/drivers/net/ethernet/nvidia/forcedeth.c
+++ b/drivers/net/ethernet/nvidia/forcedeth.c
@@ -3398,7 +3398,8 @@ static irqreturn_t nv_nic_irq_tx(int foo, void *data)
 
 	for (i = 0;; i++) {
 		events = readl(base + NvRegMSIXIrqStatus) & NVREG_IRQ_TX_ALL;
-		writel(NVREG_IRQ_TX_ALL, base + NvRegMSIXIrqStatus);
+		writel(events, base + NvRegMSIXIrqStatus);
+		netdev_dbg(dev, "tx irq events: %08x\n", events);
 		if (!(events & np->irqmask))
 			break;
 
@@ -3509,7 +3510,8 @@ static irqreturn_t nv_nic_irq_rx(int foo, void *data)
 
 	for (i = 0;; i++) {
 		events = readl(base + NvRegMSIXIrqStatus) & NVREG_IRQ_RX_ALL;
-		writel(NVREG_IRQ_RX_ALL, base + NvRegMSIXIrqStatus);
+		writel(events, base + NvRegMSIXIrqStatus);
+		netdev_dbg(dev, "rx irq events: %08x\n", events);
 		if (!(events & np->irqmask))
 			break;
 
@@ -3553,7 +3555,8 @@ static irqreturn_t nv_nic_irq_other(int foo, void *data)
 
 	for (i = 0;; i++) {
 		events = readl(base + NvRegMSIXIrqStatus) & NVREG_IRQ_OTHER;
-		writel(NVREG_IRQ_OTHER, base + NvRegMSIXIrqStatus);
+		writel(events, base + NvRegMSIXIrqStatus);
+		netdev_dbg(dev, "irq events: %08x\n", events);
 		if (!(events & np->irqmask))
 			break;
 
@@ -3617,10 +3620,10 @@ static irqreturn_t nv_nic_irq_test(int foo, void *data)
 
 	if (!(np->msi_flags & NV_MSI_X_ENABLED)) {
 		events = readl(base + NvRegIrqStatus) & NVREG_IRQSTAT_MASK;
-		writel(NVREG_IRQ_TIMER, base + NvRegIrqStatus);
+		writel(events & NVREG_IRQ_TIMER, base + NvRegIrqStatus);
 	} else {
 		events = readl(base + NvRegMSIXIrqStatus) & NVREG_IRQSTAT_MASK;
-		writel(NVREG_IRQ_TIMER, base + NvRegMSIXIrqStatus);
+		writel(events & NVREG_IRQ_TIMER, base + NvRegMSIXIrqStatus);
 	}
 	pci_push(base);
 	if (!(events & NVREG_IRQ_TIMER))
-- 
1.7.3.1

^ permalink raw reply related

* [PATCH net v3 1/9] forcedeth: Add messages to indicate using MSI or MSI-X
From: David Decotigny @ 2011-11-05  1:53 UTC (permalink / raw)
  To: netdev, linux-kernel
  Cc: David S. Miller, Ian Campbell, Eric Dumazet, Jeff Kirsher,
	Jiri Pirko, Joe Perches, Szymon Janc, Mike Ditto, David Decotigny
In-Reply-To: <cover.1320457247.git.david.decotigny@google.com>

From: Mike Ditto <mditto@google.com>

This adds a few debug messages to indicate whether PCIe interrupts are
signaled with MSI or MSI-X.



Signed-off-by: David Decotigny <david.decotigny@google.com>
---
 drivers/net/ethernet/nvidia/forcedeth.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/drivers/net/ethernet/nvidia/forcedeth.c b/drivers/net/ethernet/nvidia/forcedeth.c
index 1e37eb9..2f884fc 100644
--- a/drivers/net/ethernet/nvidia/forcedeth.c
+++ b/drivers/net/ethernet/nvidia/forcedeth.c
@@ -3737,6 +3737,7 @@ static int nv_request_irq(struct net_device *dev, int intr_test)
 				writel(0, base + NvRegMSIXMap0);
 				writel(0, base + NvRegMSIXMap1);
 			}
+			netdev_info(dev, "MSI-X enabled\n");
 		}
 	}
 	if (ret != 0 && np->msi_flags & NV_MSI_CAPABLE) {
@@ -3758,6 +3759,7 @@ static int nv_request_irq(struct net_device *dev, int intr_test)
 			writel(0, base + NvRegMSIMap1);
 			/* enable msi vector 0 */
 			writel(NVREG_MSI_VECTOR_0_ENABLED, base + NvRegMSIIrqMask);
+			netdev_info(dev, "MSI enabled\n");
 		}
 	}
 	if (ret != 0) {
-- 
1.7.3.1

^ permalink raw reply related

* [PATCH net v3 0/9] forcedeth: minor fixes for stats, rmmod, sparse
From: David Decotigny @ 2011-11-05  1:53 UTC (permalink / raw)
  To: netdev, linux-kernel
  Cc: David S. Miller, Ian Campbell, Eric Dumazet, Jeff Kirsher,
	Jiri Pirko, Joe Perches, Szymon Janc, David Decotigny

Changes since v2:
 - removed "Fix a race during rmmod of forcedeth" from the series
   (will look at it separately with original author)
 - added "remove unneeded stats updates" and "64-bit stats"
 - reordered patches

Changes since v1:
 - rebased on top of netdev tip
 - do not repeat name of device in netdev_dbg
 - do not completely mute TX timeout messages when debug_tx_timeout is
   not set
 - make debug_tx_timeout writable in /sys/module
 Note: I am re-submitting "expose module parameters in /sys/module" as
       it can be useful in production and I was assured it doesn't add
       much memory overhead by the sysfs maintainers.

Tested:
  16-way x86_64 SMP, dual forcedeth ->
  RX bytes:7244556582 (7.2 GB)  TX bytes:181904254 (181.9 MB)


############################################
# Patch Set Summary:

David Decotigny (4):
  forcedeth: expose module parameters in /sys/module
  forcedeth: remove unneeded stats updates
  forcedeth: 64-bit stats
  forcedeth: fix a few sparse warnings (variable shadowing)

Mandeep Baines (1):
  forcedeth: Improve stats counters

Mike Ditto (2):
  forcedeth: Add messages to indicate using MSI or MSI-X
  forcedeth: Acknowledge only interrupts that are being processed

Sameer Nanda (2):
  forcedeth: allow to silence tx_timeout debug messages
  forcedeth: new ethtool stat "tx_timeout" to account for tx_timeouts

 drivers/net/ethernet/nvidia/forcedeth.c |  269 ++++++++++++++++---------------
 1 files changed, 142 insertions(+), 127 deletions(-)

-- 
1.7.3.1

^ permalink raw reply

* Re: what's in a bus_info
From: Rick Jones @ 2011-11-05  1:17 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: Ben Hutchings, netdev, rusty, mst
In-Reply-To: <20111104170705.0553b8cf@nehalam.linuxnetplumber.net>

On 11/04/2011 05:07 PM, Stephen Hemminger wrote:
> My view of bus_info, is that it is an informational string for administrators.
> Tools shouldn't depend on the value.  If a tool wants to find out about
> the physical device, then it should readlink the value of /sys/class/net/ethX/device

Just a quick look under device for the virtio_net interface shows it 
isn't quite as "complete" as a bare iron tg3 interface (as an example)

The bare iron tg3 example:
raj@tardy:~$ ls /sys/class/net/eth0/device
broken_parity_status      enable         net        resource0
class                     firmware_node  numa_node  subsystem
config                    irq            power      subsystem_device
consistent_dma_mask_bits  local_cpulist  remove     subsystem_vendor
device                    local_cpus     rescan     uevent
dma_mask_bits             modalias       reset      vendor
driver                    msi_bus        resource   vpd

The virtio_net interface:

raj@raj-ubuntu-guest:~$ ls /sys/class/net/eth0/device
device  features  net    status     uevent
driver  modalias  power  subsystem  vendor


I have found that if I add a function to return a struct pci_dev * given 
a struct virtio_device, to virtio/virtio_pci.c and do a pci_name() 
against that, I do get a familiar looking bus address:

raj@raj-ubuntu-guest:~$ ethtool -i eth0
driver: virtio_net
version: I am versionless
firmware-version: I have no firmware
bus-info: 0000:00:03.0

and it even matches the lspci output for the guest:

00:03.0 Ethernet controller: Red Hat, Inc Virtio network device

(still my "playing around" version, hence the silly strings in version 
and firmware-version)

I suppose the question becomes whether it is worthwhile to clean it up 
and submit.    I'm also thinking it would be goodness to start 
displaying some sort of version number, and if there is anything the 
driver might query to fill-in as a firmware-version - perhaps something 
about the version of the driver on the other side?

rick jones

^ permalink raw reply

* Re: [PATCH 6/7] fsl_pmc: Add API to enable device as wakeup event source
From: Tabi Timur-B04825 @ 2011-11-05  0:08 UTC (permalink / raw)
  To: Zhao Chenhui-B35336
  Cc: linuxppc-dev@lists.ozlabs.org, Li Yang-R58472,
	netdev@vger.kernel.org
In-Reply-To: <1320410349-14600-1-git-send-email-chenhui.zhao@freescale.com>

On Fri, Nov 4, 2011 at 7:39 AM, Zhao Chenhui <chenhui.zhao@freescale.com> wrote:

> +       if (!pmc_regs) {
> +               printk(KERN_WARNING "PMC is unavailable\n");

Use pr_warn() and the other pr_xxx functions.

> +       pmcdr_mask = (u32 *)of_get_property(clk_np, "fsl,pmcdr-mask", NULL);

The typecast is unnecessary here.

> +       /* clear to enable clock in low power mode */
> +       if (enable)
> +               clrbits32(&pmc_regs->pmcdr, *pmcdr_mask);
> +       else
> +               setbits32(&pmc_regs->pmcdr, *pmcdr_mask);

You need to use be32_to_cpup() when dereferencing a pointer to a
device tree property.

-- 
Timur Tabi
Linux kernel developer at Freescale

^ permalink raw reply

* Re: what's in a bus_info
From: Stephen Hemminger @ 2011-11-05  0:07 UTC (permalink / raw)
  To: Rick Jones; +Cc: Ben Hutchings, netdev, rusty, mst
In-Reply-To: <4EB47DB1.2000005@hp.com>

On Fri, 04 Nov 2011 17:05:05 -0700
Rick Jones <rick.jones2@hp.com> wrote:

> On 11/04/2011 04:42 PM, Ben Hutchings wrote:
> > On Fri, 2011-11-04 at 16:31 -0700, Rick Jones wrote:
> 
> >> I guess that wraps back around to the question of whether there is a
> >> "standard" for what should be in bus_info.  And if it is impractical to
> >> get the PCI bus information,
> >
> > I'm not that familiar with virtio, but would I be right in thinking that
> > the virtio 'bus' device is likely to be the child of a PCI device?  So
> > then you mgiht want to get bus_name() for the grandparent of the net
> > device:
> > 	dev_dev = dev->dev.parent->parent;
> > (possibly checking for nulls).
> 
> I'll take a look.
> 
> > If there's some reasonable way to distinguish a 'real' from a virtual
> > bus then we could have the generic implementation try to follow parents
> > until it finds a bus device.  However I think the device model
> > maintainers have been gradually moving away from the bus/class
> > distinction and so we may not be able to do that.
> >
> >> whether it is better to return virtioN or
> >> ethN.  Or perhaps something else entirely.
> > [...]
> >
> > Returning the device name seems entirely unhelpful since the user
> > already has that.  'virtioN' is perhaps not much better though.
> 
> Agreed, but thought I should ask :)

My view of bus_info, is that it is an informational string for administrators.
Tools shouldn't depend on the value.  If a tool wants to find out about
the physical device, then it should readlink the value of /sys/class/net/ethX/device

^ permalink raw reply

* Re: what's in a bus_info
From: Rick Jones @ 2011-11-05  0:05 UTC (permalink / raw)
  To: Ben Hutchings; +Cc: netdev, rusty, mst
In-Reply-To: <1320450167.2753.39.camel@bwh-desktop>

On 11/04/2011 04:42 PM, Ben Hutchings wrote:
> On Fri, 2011-11-04 at 16:31 -0700, Rick Jones wrote:

>> I guess that wraps back around to the question of whether there is a
>> "standard" for what should be in bus_info.  And if it is impractical to
>> get the PCI bus information,
>
> I'm not that familiar with virtio, but would I be right in thinking that
> the virtio 'bus' device is likely to be the child of a PCI device?  So
> then you mgiht want to get bus_name() for the grandparent of the net
> device:
> 	dev_dev = dev->dev.parent->parent;
> (possibly checking for nulls).

I'll take a look.

> If there's some reasonable way to distinguish a 'real' from a virtual
> bus then we could have the generic implementation try to follow parents
> until it finds a bus device.  However I think the device model
> maintainers have been gradually moving away from the bus/class
> distinction and so we may not be able to do that.
>
>> whether it is better to return virtioN or
>> ethN.  Or perhaps something else entirely.
> [...]
>
> Returning the device name seems entirely unhelpful since the user
> already has that.  'virtioN' is perhaps not much better though.

Agreed, but thought I should ask :)

rick

^ permalink raw reply

* Re: what's in a bus_info
From: Ben Hutchings @ 2011-11-04 23:42 UTC (permalink / raw)
  To: Rick Jones; +Cc: netdev, rusty, mst
In-Reply-To: <4EB475CC.1000601@hp.com>

On Fri, 2011-11-04 at 16:31 -0700, Rick Jones wrote:
> On 11/04/2011 04:02 PM, Ben Hutchings wrote:
> > On Fri, 2011-11-04 at 15:27 -0700, Rick Jones wrote:
> >> ...or would an interface name smell as sweet? (as PCI bus addressing)
> >>
> >> Is there a "standard" for what is returned in bus_info of
> >> ethtool_drvinfo?  I have been very used to seeing PCI bus addressing
> >> information in that field (at least as displayed by ethtool -i) and when
> >> I went to "leverage how to" from other drivers, to add "native" ethtool
> >> -i support to virtio_net, I ended-up with "eth0" rather than the PCI
> >> information I see in lspci output and in ethtool -i against other
> >> devices.  Including an emulated e1000 interface in the same kernel.
> >>
> >> What I'm doing is calling pci_name(), feeding it with to_pci_dev() from
> >> the address of the struct device in the struct net_device.
> >
> > to_pci_dev() just uses container_of() to find a pci_dev when you have a
> > pointer to the generic device structure embedded in it.  However, you're
> > passing a pointer to the device embedded in a net_device.  The net
> > device is a child of the PCI device, so you need to do:
> >
> > 	dev_dev = dev->dev.parent;
> >
> > And you don't even have to assume that the parent is a PCI device,
> > because you can use the generic dev_name().
> >
> > But you don't even need to this, since the ethtool core has a default
> > implementation that does this...
> 
> Yes, I noticed that.  For a little while I was confused because ethtool 
> -i was emitting something even before I added a ".get_drvinfo" - though 
> what it ends-up returning in my case is "virtio0." Which is also what I 
> get if I take the path through the virtio_device to the struct device 
> therein instead of the path through the struct net_device alone.
> 
> I guess that wraps back around to the question of whether there is a 
> "standard" for what should be in bus_info.  And if it is impractical to 
> get the PCI bus information,

I'm not that familiar with virtio, but would I be right in thinking that
the virtio 'bus' device is likely to be the child of a PCI device?  So
then you mgiht want to get bus_name() for the grandparent of the net
device:
	dev_dev = dev->dev.parent->parent;
(possibly checking for nulls).

If there's some reasonable way to distinguish a 'real' from a virtual
bus then we could have the generic implementation try to follow parents
until it finds a bus device.  However I think the device model
maintainers have been gradually moving away from the bus/class
distinction and so we may not be able to do that.

> whether it is better to return virtioN or 
> ethN.  Or perhaps something else entirely.
[...]

Returning the device name seems entirely unhelpful since the user
already has that.  'virtioN' is perhaps not much better though.

Ben.

-- 
Ben Hutchings, Staff Engineer, Solarflare
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.

^ permalink raw reply

* Re: what's in a bus_info
From: Rick Jones @ 2011-11-04 23:31 UTC (permalink / raw)
  To: Ben Hutchings; +Cc: netdev, rusty, mst
In-Reply-To: <1320447726.2753.30.camel@bwh-desktop>

On 11/04/2011 04:02 PM, Ben Hutchings wrote:
> On Fri, 2011-11-04 at 15:27 -0700, Rick Jones wrote:
>> ...or would an interface name smell as sweet? (as PCI bus addressing)
>>
>> Is there a "standard" for what is returned in bus_info of
>> ethtool_drvinfo?  I have been very used to seeing PCI bus addressing
>> information in that field (at least as displayed by ethtool -i) and when
>> I went to "leverage how to" from other drivers, to add "native" ethtool
>> -i support to virtio_net, I ended-up with "eth0" rather than the PCI
>> information I see in lspci output and in ethtool -i against other
>> devices.  Including an emulated e1000 interface in the same kernel.
>>
>> What I'm doing is calling pci_name(), feeding it with to_pci_dev() from
>> the address of the struct device in the struct net_device.
>
> to_pci_dev() just uses container_of() to find a pci_dev when you have a
> pointer to the generic device structure embedded in it.  However, you're
> passing a pointer to the device embedded in a net_device.  The net
> device is a child of the PCI device, so you need to do:
>
> 	dev_dev = dev->dev.parent;
>
> And you don't even have to assume that the parent is a PCI device,
> because you can use the generic dev_name().
>
> But you don't even need to this, since the ethtool core has a default
> implementation that does this...

Yes, I noticed that.  For a little while I was confused because ethtool 
-i was emitting something even before I added a ".get_drvinfo" - though 
what it ends-up returning in my case is "virtio0." Which is also what I 
get if I take the path through the virtio_device to the struct device 
therein instead of the path through the struct net_device alone.

I guess that wraps back around to the question of whether there is a 
"standard" for what should be in bus_info.  And if it is impractical to 
get the PCI bus information, whether it is better to return virtioN or 
ethN.  Or perhaps something else entirely.

> [...]
>> BTW, I notice some drivers call strlcpy and some strncpy, and some even
>> call strcpy.  Is there one that is meant to be preferred over the others?
>
> strlcpy() is preferred - if it has to truncate, it will at least leave a
> null terminator, as clients may expect.  Back when drivers handled
> SIOCETHTOOL directly strncpy() may have been preferable since they were
> responsible for initialising the entire structure returned to
> user-space.

Thanks.  Perhaps that is another "floor sweeping" opportunity.

rick jones

^ permalink raw reply

* NFSROOT mount fails on SPARC after 2.6.37
From: Chuck Lever @ 2011-11-04 23:15 UTC (permalink / raw)
  To: netdev-u79uwXL29TY76Z2rM5mHXA; +Cc: Linux NFS Mailing List, Lukas Razik
In-Reply-To: <1320429339.53513.YahooMailNeo@web24704.mail.ird.yahoo.com>

Below is an example of an NFSROOT failure on SPARC with 2.6.37+.  NFSROOT worked on earlier kernels because NFSROOT in those kernels ignored this failure and went ahead with a default.  On any kernel, later socket creation works as expected.

To perform the NFSROOT mount, the kernel RPC client creates a socket and sends an RPC request (in this case) before the system NIC becomes ready.  The request times out, the NIC becomes ready, and the RPC request is resent, but the resend never appears at the server.

NFSROOT is designed to retry RPC requests after a few seconds to avoid just this scenario.  On other platforms with other NICs, this design seemed to work (or perhaps it papers over the problem with a high degree of success).

Questions:

1.  Why does the retransmitted request not get sent, even though the NIC has become ready?

2.  Should kernel_sendmsg() report an error (say, EHOSTUNREACH, ENETDOWN, or ENETUNREACH) if a UDP packet cannot be sent because the local NIC is down?  Trying with TCP, we get EHOSTUNREACH.  Is the difference the use of a connected socket?

3.  Naively, is there a way to cause the kernel to wait until the local NIC is ready before attempting to mount NFSROOT?

4.  What should the RPC client retransmit logic do to better guarantee recovery and swift retransmission in this case?


Thanks for any advice.


Begin forwarded message:

> From: Lukas Razik <linux-GLgANOly0l1BDLzU/O5InQ@public.gmane.org>
> Date: November 4, 2011 1:55:39 PM EDT
> To: Chuck Lever <chuck.lever-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
> Cc: Jim Rees <rees-63aXycvo3TyHXe+LvDLADg@public.gmane.org>, Trond Myklebust <Trond.Myklebust-HgOvQuBEEgTQT0dZR+AlfA@public.gmane.org>, Linux NFS Mailing List <linux-nfs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
> Subject: Re: [BUG?] Maybe NFS bug since 2.6.37 on SPARC64
> Reply-To: Lukas Razik <linux-GLgANOly0l1BDLzU/O5InQ@public.gmane.org>
> 
>> As for a patch: no-one can write a patch unless we understand precisely why the 
> 
>> first RPC fails.  I already explained how to add a line or two to 
>> fs/nfs/nfsroot.c to give us more information.  If you need a patch to do this, I 
>> can send one later today.
>> 
>> I might be able to reproduce it here, now that I understand your set up, but it 
>> would require building a partial NFSROOT environment.  I can't get to that 
>> until next week.
> 
> OK, it was easier than I thought...
> I've set NFSDBG_ALL where you wanted it and rpc_debug = RPCDBG_ALL .
> 
> That's the linux-2.6.39.4 output now. Hopefully you can see the problem now...
> ---
> {0} ok boot net                                                                                                                               
> Boot device: /pci@0/pci@0/pci@1/pci@0/pci@2/network@0  File and args: root=/dev/nfs rw nfsroot=137.226.167.241:/srv/nfs/cluster2 ip=137.226.167.242:::255.255.255.224::eth0:off nfsrootdebug
> 1000 Mbps full duplex  Link up
> Requesting Internet Address for 0:14:4f:98:9:c2
> Requesting Internet Address for 0:14:4f:98:9:c2
> Requesting Internet Address for 0:14:4f:98:9:c2
> Requesting Internet Address for 0:14:4f:98:9:c2
> Requesting Internet Address for 0:14:4f:98:9:c2
> Requesting Internet Address for 0:14:4f:98:9:c2
> /
> [    0.000000] PROMLIB: Sun IEEE Boot Prom 'OBP 4.30.0 2008/12/11 12:15'
> [    0.000000] PROMLIB: Root node compatible: sun4v
> [    0.000000] Initializing cgroup subsys cpuset
> [    0.000000] Initializing cgroup subsys cpu
> [    0.000000] Linux version 2.6.39.4-razik-2011-11-04 (root@cluster1) (gcc version 4.4.5 (Debian 4.4.5-8) ) #8 SMP Fri Nov 4 18:40:53 CET 2011
> [    0.000000] bootconsole [earlyprom0] enabled
> [    0.000000] ARCH: SUN4V
> [    0.000000] Ethernet address: 00:14:4f:98:09:c2
> [    0.000000] Kernel: Using 2 locked TLB entries for main kernel image.
> [    0.000000] Remapping the kernel... done.
> [    0.000000] OF stdout device is: /virtual-devices@100/console@1
> [    0.000000] PROM: Built device tree with 123763 bytes of memory.
> [    0.000000] MDESC: Size is 58816 bytes.
> [    0.000000] PLATFORM: banner-name [SPARC Enterprise T5120]
> [    0.000000] PLATFORM: name [SUNW,SPARC-Enterprise-T5120]
> [    0.000000] PLATFORM: hostid [849809c2]
> [    0.000000] PLATFORM: serial# [00ab4130]
> [    0.000000] PLATFORM: stick-frequency [5458c3a0]
> [    0.000000] PLATFORM: mac-address [144f9809c2]
> [    0.000000] PLATFORM: watchdog-resolution [1000 ms]
> [    0.000000] PLATFORM: watchdog-max-timeout [31536000000 ms]
> [    0.000000] PLATFORM: max-cpus [64]
> [    0.000000] Top of RAM: 0x7ffb1c000, Total RAM: 0x7f76c2000
> [    0.000000] Memory hole size: 132MB
> [    0.000000] [0000010000000000-fffff80009000000] page_structs=131072 node=0 entry=0/8192
> [    0.000000] [0000010000000000-fffff80009400000] page_structs=131072 node=0 entry=1/8192
> [    0.000000] [0000010000800000-fffff80009800000] page_structs=131072 node=0 entry=2/8192
> [    0.000000] [0000010000800000-fffff80009c00000] page_structs=131072 node=0 entry=3/8192
> [    0.000000] [0000010001000000-fffff8000a000000] page_structs=131072 node=0 entry=4/8192
> [    0.000000] [0000010001000000-fffff8000a400000] page_structs=131072 node=0 entry=5/8192
> [    0.000000] [0000010001800000-fffff8000a800000] page_structs=131072 node=0 entry=6/8192
> [    0.000000] [0000010001800000-fffff8000ac00000] page_structs=131072 node=0 entry=7/8192
> [    0.000000] [0000010002000000-fffff8000b000000] page_structs=131072 node=0 entry=8/8192
> [    0.000000] [0000010002000000-fffff8000b400000] page_structs=131072 node=0 entry=9/8192
> [    0.000000] [0000010002800000-fffff8000b800000] page_structs=131072 node=0 entry=10/8192
> [    0.000000] [0000010002800000-fffff8000bc00000] page_structs=131072 node=0 entry=11/8192
> [    0.000000] [0000010003000000-fffff8000c000000] page_structs=131072 node=0 entry=12/8192
> [    0.000000] [0000010003000000-fffff8000c400000] page_structs=131072 node=0 entry=13/8192
> [    0.000000] [0000010003800000-fffff8000c800000] page_structs=131072 node=0 entry=14/8192
> [    0.000000] [0000010003800000-fffff8000cc00000] page_structs=131072 node=0 entry=15/8192
> [    0.000000] [0000010004000000-fffff8000d000000] page_structs=131072 node=0 entry=16/8192
> [    0.000000] [0000010004000000-fffff8000d400000] page_structs=131072 node=0 entry=17/8192
> [    0.000000] [0000010004800000-fffff8000d800000] page_structs=131072 node=0 entry=18/8192
> [    0.000000] [0000010004800000-fffff8000dc00000] page_structs=131072 node=0 entry=19/8192
> [    0.000000] [0000010005000000-fffff8000e000000] page_structs=131072 node=0 entry=20/8192
> [    0.000000] [0000010005000000-fffff8000e400000] page_structs=131072 node=0 entry=21/8192
> [    0.000000] [0000010005800000-fffff8000e800000] page_structs=131072 node=0 entry=22/8192
> [    0.000000] [0000010005800000-fffff8000ec00000] page_structs=131072 node=0 entry=23/8192
> [    0.000000] [0000010006000000-fffff8000f000000] page_structs=131072 node=0 entry=24/8192
> [    0.000000] [0000010006000000-fffff8000f400000] page_structs=131072 node=0 entry=25/8192
> [    0.000000] [0000010006800000-fffff8000f800000] page_structs=131072 node=0 entry=26/8192
> [    0.000000] [0000010006800000-fffff8000fc00000] page_structs=131072 node=0 entry=27/8192
> [    0.000000] [0000010007000000-fffff80010000000] page_structs=131072 node=0 entry=28/8192
> [    0.000000] [0000010007000000-fffff80010400000] page_structs=131072 node=0 entry=29/8192
> [    0.000000] [0000010007800000-fffff80010800000] page_structs=131072 node=0 entry=30/8192
> [    0.000000] [0000010007800000-fffff80010c00000] page_structs=131072 node=0 entry=31/8192
> [    0.000000] [0000010008000000-fffff80011000000] page_structs=131072 node=0 entry=32/8192
> [    0.000000] [0000010008000000-fffff80011400000] page_structs=131072 node=0 entry=33/8192
> [    0.000000] [0000010008800000-fffff80011800000] page_structs=131072 node=0 entry=34/8192
> [    0.000000] [0000010008800000-fffff80011c00000] page_structs=131072 node=0 entry=35/8192
> [    0.000000] [0000010009000000-fffff80012000000] page_structs=131072 node=0 entry=36/8192
> [    0.000000] [0000010009000000-fffff80012400000] page_structs=131072 node=0 entry=37/8192
> [    0.000000] [0000010009800000-fffff80012800000] page_structs=131072 node=0 entry=38/8192
> [    0.000000] [0000010009800000-fffff80012c00000] page_structs=131072 node=0 entry=39/8192
> [    0.000000] [000001000a000000-fffff80013000000] page_structs=131072 node=0 entry=40/8192
> [    0.000000] [000001000a000000-fffff80013400000] page_structs=131072 node=0 entry=41/8192
> [    0.000000] [000001000a800000-fffff80013800000] page_structs=131072 node=0 entry=42/8192
> [    0.000000] [000001000a800000-fffff80013c00000] page_structs=131072 node=0 entry=43/8192
> [    0.000000] [000001000b000000-fffff80014000000] page_structs=131072 node=0 entry=44/8192
> [    0.000000] [000001000b000000-fffff80014400000] page_structs=131072 node=0 entry=45/8192
> [    0.000000] [000001000b800000-fffff80014800000] page_structs=131072 node=0 entry=46/8192
> [    0.000000] [000001000b800000-fffff80014c00000] page_structs=131072 node=0 entry=47/8192
> [    0.000000] [000001000c000000-fffff80015000000] page_structs=131072 node=0 entry=48/8192
> [    0.000000] [000001000c000000-fffff80015400000] page_structs=131072 node=0 entry=49/8192
> [    0.000000] [000001000c800000-fffff80015800000] page_structs=131072 node=0 entry=50/8192
> [    0.000000] [000001000c800000-fffff80015c00000] page_structs=131072 node=0 entry=51/8192
> [    0.000000] [000001000d000000-fffff80016000000] page_structs=131072 node=0 entry=52/8192
> [    0.000000] [000001000d000000-fffff80016400000] page_structs=131072 node=0 entry=53/8192
> [    0.000000] [000001000d800000-fffff80016800000] page_structs=131072 node=0 entry=54/8192
> [    0.000000] [000001000d800000-fffff80016c00000] page_structs=131072 node=0 entry=55/8192
> [    0.000000] [000001000e000000-fffff80017000000] page_structs=131072 node=0 entry=56/8192
> [    0.000000] [000001000e000000-fffff80017400000] page_structs=131072 node=0 entry=57/8192
> [    0.000000] [000001000e800000-fffff80017800000] page_structs=131072 node=0 entry=58/8192
> [    0.000000] [000001000e800000-fffff80017c00000] page_structs=131072 node=0 entry=59/8192
> [    0.000000] [000001000f000000-fffff80018000000] page_structs=131072 node=0 entry=60/8192
> [    0.000000] [000001000f000000-fffff80018400000] page_structs=131072 node=0 entry=61/8192
> [    0.000000] [000001000f800000-fffff80018800000] page_structs=131072 node=0 entry=62/8192
> [    0.000000] [000001000f800000-fffff80018c00000] page_structs=131072 node=0 entry=63/8192
> [    0.000000] Zone PFN ranges:
> [    0.000000]   Normal   0x00004200 -> 0x003ffd8e
> [    0.000000] Movable zone start PFN for each node
> [    0.000000] early_node_map[3] active PFN ranges
> [    0.000000]     0: 0x00004200 -> 0x003ffd47
> [    0.000000]     0: 0x003ffd50 -> 0x003ffd63
> [    0.000000]     0: 0x003ffd87 -> 0x003ffd8e
> [    0.000000] Booting Linux...
> [    0.000000] PERCPU: Embedded 6 pages/cpu @fffff80019000000 s15616 r8192 d25344 u65536
> [    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 4144105
> [    0.000000] Kernel command line: root=/dev/nfs rw nfsroot=137.226.167.241:/srv/nfs/cluster2 ip=137.226.167.242:::255.255.255.224::eth0:off nfsrootdebug
> [    0.000000] PID hash table entries: 4096 (order: 2, 32768 bytes)
> [    0.000000] Dentry cache hash table entries: 4194304 (order: 12, 33554432 bytes)
> [    0.000000] Inode-cache hash table entries: 2097152 (order: 11, 16777216 bytes)
> [    0.000000] Memory: 33091488k available (3528k kernel code, 1248k data, 208k init) [fffff80000000000,00000007ffb1c000]
> [    0.000000] SLUB: Genslabs=16, HWalign=32, Order=0-3, MinObjects=0, CPUs=64, Nodes=1
> [    0.000000] Hierarchical RCU implementation.
> [    0.000000]  CONFIG_RCU_FANOUT set to non-default value of 32
> [    0.000000]  RCU-based detection of stalled CPUs is disabled.
> [    0.000000] NR_IRQS:255
> [    0.000000] clocksource: mult[5a73e7bb] shift[31]
> [    0.000000] clockevent: mult[b5221ba3] shift[31]
> [    0.000000] Console: colour dummy device 80x25
> [    0.000000] console [tty0] enabled, bootconsole disabled
> [    0.000000] PROMLIB: Sun IEEE Boot Prom 'OBP 4.30.0 2008/12/11 12:15'
> [    0.000000] PROMLIB: Root node compatible: sun4v
> [    0.000000] Initializing cgroup subsys cpuset
> [    0.000000] Initializing cgroup subsys cpu
> [    0.000000] Linux version 2.6.39.4-razik-2011-11-04 (root@cluster1) (gcc version 4.4.5 (Debian 4.4.5-8) ) #8 SMP Fri Nov 4 18:40:53 CET 2011
> [    0.000000] bootconsole [earlyprom0] enabled
> [    0.000000] ARCH: SUN4V
> [    0.000000] Ethernet address: 00:14:4f:98:09:c2
> [    0.000000] Kernel: Using 2 locked TLB entries for main kernel image.
> [    0.000000] Remapping the kernel... done.
> [    0.000000] OF stdout device is: /virtual-devices@100/console@1
> [    0.000000] PROM: Built device tree with 123763 bytes of memory.
> [    0.000000] MDESC: Size is 58816 bytes.
> [    0.000000] PLATFORM: banner-name [SPARC Enterprise T5120]
> [    0.000000] PLATFORM: name [SUNW,SPARC-Enterprise-T5120]
> [    0.000000] PLATFORM: hostid [849809c2]
> [    0.000000] PLATFORM: serial# [00ab4130]
> [    0.000000] PLATFORM: stick-frequency [5458c3a0]
> [    0.000000] PLATFORM: mac-address [144f9809c2]
> [    0.000000] PLATFORM: watchdog-resolution [1000 ms]
> [    0.000000] PLATFORM: watchdog-max-timeout [31536000000 ms]
> [    0.000000] PLATFORM: max-cpus [64]
> [    0.000000] Top of RAM: 0x7ffb1c000, Total RAM: 0x7f76c2000
> [    0.000000] Memory hole size: 132MB
> [    0.000000] [0000010000000000-fffff80009000000] page_structs=131072 node=0 entry=0/8192
> [    0.000000] [0000010000000000-fffff80009400000] page_structs=131072 node=0 entry=1/8192
> [    0.000000] [0000010000800000-fffff80009800000] page_structs=131072 node=0 entry=2/8192
> [    0.000000] [0000010000800000-fffff80009c00000] page_structs=131072 node=0 entry=3/8192
> [    0.000000] [0000010001000000-fffff8000a000000] page_structs=131072 node=0 entry=4/8192
> [    0.000000] [0000010001000000-fffff8000a400000] page_structs=131072 node=0 entry=5/8192
> [    0.000000] [0000010001800000-fffff8000a800000] page_structs=131072 node=0 entry=6/8192
> [    0.000000] [0000010001800000-fffff8000ac00000] page_structs=131072 node=0 entry=7/8192
> [    0.000000] [0000010002000000-fffff8000b000000] page_structs=131072 node=0 entry=8/8192
> [    0.000000] [0000010002000000-fffff8000b400000] page_structs=131072 node=0 entry=9/8192
> [    0.000000] [0000010002800000-fffff8000b800000] page_structs=131072 node=0 entry=10/8192
> [    0.000000] [0000010002800000-fffff8000bc00000] page_structs=131072 node=0 entry=11/8192
> [    0.000000] [0000010003000000-fffff8000c000000] page_structs=131072 node=0 entry=12/8192
> [    0.000000] [0000010003000000-fffff8000c400000] page_structs=131072 node=0 entry=13/8192
> [    0.000000] [0000010003800000-fffff8000c800000] page_structs=131072 node=0 entry=14/8192
> [    0.000000] [0000010003800000-fffff8000cc00000] page_structs=131072 node=0 entry=15/8192
> [    0.000000] [0000010004000000-fffff8000d000000] page_structs=131072 node=0 entry=16/8192
> [    0.000000] [0000010004000000-fffff8000d400000] page_structs=131072 node=0 entry=17/8192
> [    0.000000] [0000010004800000-fffff8000d800000] page_structs=131072 node=0 entry=18/8192
> [    0.000000] [0000010004800000-fffff8000dc00000] page_structs=131072 node=0 entry=19/8192
> [    0.000000] [0000010005000000-fffff8000e000000] page_structs=131072 node=0 entry=20/8192
> [    0.000000] [0000010005000000-fffff8000e400000] page_structs=131072 node=0 entry=21/8192
> [    0.000000] [0000010005800000-fffff8000e800000] page_structs=131072 node=0 entry=22/8192
> [    0.000000] [0000010005800000-fffff8000ec00000] page_structs=131072 node=0 entry=23/8192
> [    0.000000] [0000010006000000-fffff8000f000000] page_structs=131072 node=0 entry=24/8192
> [    0.000000] [0000010006000000-fffff8000f400000] page_structs=131072 node=0 entry=25/8192
> [    0.000000] [0000010006800000-fffff8000f800000] page_structs=131072 node=0 entry=26/8192
> [    0.000000] [0000010006800000-fffff8000fc00000] page_structs=131072 node=0 entry=27/8192
> [    0.000000] [0000010007000000-fffff80010000000] page_structs=131072 node=0 entry=28/8192
> [    0.000000] [0000010007000000-fffff80010400000] page_structs=131072 node=0 entry=29/8192
> [    0.000000] [0000010007800000-fffff80010800000] page_structs=131072 node=0 entry=30/8192
> [    0.000000] [0000010007800000-fffff80010c00000] page_structs=131072 node=0 entry=31/8192
> [    0.000000] [0000010008000000-fffff80011000000] page_structs=131072 node=0 entry=32/8192
> [    0.000000] [0000010008000000-fffff80011400000] page_structs=131072 node=0 entry=33/8192
> [    0.000000] [0000010008800000-fffff80011800000] page_structs=131072 node=0 entry=34/8192
> [    0.000000] [0000010008800000-fffff80011c00000] page_structs=131072 node=0 entry=35/8192
> [    0.000000] [0000010009000000-fffff80012000000] page_structs=131072 node=0 entry=36/8192
> [    0.000000] [0000010009000000-fffff80012400000] page_structs=131072 node=0 entry=37/8192
> [    0.000000] [0000010009800000-fffff80012800000] page_structs=131072 node=0 entry=38/8192
> [    0.000000] [0000010009800000-fffff80012c00000] page_structs=131072 node=0 entry=39/8192
> [    0.000000] [000001000a000000-fffff80013000000] page_structs=131072 node=0 entry=40/8192
> [    0.000000] [000001000a000000-fffff80013400000] page_structs=131072 node=0 entry=41/8192
> [    0.000000] [000001000a800000-fffff80013800000] page_structs=131072 node=0 entry=42/8192
> [    0.000000] [000001000a800000-fffff80013c00000] page_structs=131072 node=0 entry=43/8192
> [    0.000000] [000001000b000000-fffff80014000000] page_structs=131072 node=0 entry=44/8192
> [    0.000000] [000001000b000000-fffff80014400000] page_structs=131072 node=0 entry=45/8192
> [    0.000000] [000001000b800000-fffff80014800000] page_structs=131072 node=0 entry=46/8192
> [    0.000000] [000001000b800000-fffff80014c00000] page_structs=131072 node=0 entry=47/8192
> [    0.000000] [000001000c000000-fffff80015000000] page_structs=131072 node=0 entry=48/8192
> [    0.000000] [000001000c000000-fffff80015400000] page_structs=131072 node=0 entry=49/8192
> [    0.000000] [000001000c800000-fffff80015800000] page_structs=131072 node=0 entry=50/8192
> [    0.000000] [000001000c800000-fffff80015c00000] page_structs=131072 node=0 entry=51/8192
> [    0.000000] [000001000d000000-fffff80016000000] page_structs=131072 node=0 entry=52/8192
> [    0.000000] [000001000d000000-fffff80016400000] page_structs=131072 node=0 entry=53/8192
> [    0.000000] [000001000d800000-fffff80016800000] page_structs=131072 node=0 entry=54/8192
> [    0.000000] [000001000d800000-fffff80016c00000] page_structs=131072 node=0 entry=55/8192
> [    0.000000] [000001000e000000-fffff80017000000] page_structs=131072 node=0 entry=56/8192
> [    0.000000] [000001000e000000-fffff80017400000] page_structs=131072 node=0 entry=57/8192
> [    0.000000] [000001000e800000-fffff80017800000] page_structs=131072 node=0 entry=58/8192
> [    0.000000] [000001000e800000-fffff80017c00000] page_structs=131072 node=0 entry=59/8192
> [    0.000000] [000001000f000000-fffff80018000000] page_structs=131072 node=0 entry=60/8192
> [    0.000000] [000001000f000000-fffff80018400000] page_structs=131072 node=0 entry=61/8192
> [    0.000000] [000001000f800000-fffff80018800000] page_structs=131072 node=0 entry=62/8192
> [    0.000000] [000001000f800000-fffff80018c00000] page_structs=131072 node=0 entry=63/8192
> [    0.000000] Zone PFN ranges:
> [    0.000000]   Normal   0x00004200 -> 0x003ffd8e
> [    0.000000] Movable zone start PFN for each node
> [    0.000000] early_node_map[3] active PFN ranges
> [    0.000000]     0: 0x00004200 -> 0x003ffd47
> [    0.000000]     0: 0x003ffd50 -> 0x003ffd63
> [    0.000000]     0: 0x003ffd87 -> 0x003ffd8e
> [    0.000000] Booting Linux...
> [    0.000000] PERCPU: Embedded 6 pages/cpu @fffff80019000000 s15616 r8192 d25344 u65536
> [    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 4144105
> [    0.000000] Kernel command line: root=/dev/nfs rw nfsroot=137.226.167.241:/srv/nfs/cluster2 ip=137.226.167.242:::255.255.255.224::eth0:off nfsrootdebug
> [    0.000000] PID hash table entries: 4096 (order: 2, 32768 bytes)
> [    0.000000] Dentry cache hash table entries: 4194304 (order: 12, 33554432 bytes)
> [    0.000000] Inode-cache hash table entries: 2097152 (order: 11, 16777216 bytes)
> [    0.000000] Memory: 33091488k available (3528k kernel code, 1248k data, 208k init) [fffff80000000000,00000007ffb1c000]
> [    0.000000] SLUB: Genslabs=16, HWalign=32, Order=0-3, MinObjects=0, CPUs=64, Nodes=1
> [    0.000000] Hierarchical RCU implementation.
> [    0.000000]  CONFIG_RCU_FANOUT set to non-default value of 32
> [    0.000000]  RCU-based detection of stalled CPUs is disabled.
> [    0.000000] NR_IRQS:255
> [    0.000000] clocksource: mult[5a73e7bb] shift[31]
> [    0.000000] clockevent: mult[b5221ba3] shift[31]
> [    0.000000] Console: colour dummy device 80x25
> [    0.000000] console [tty0] enabled, bootconsole disabled
> [  120.892024] Calibrating delay using timer specific routine.. 2832.74 BogoMIPS (lpj=5665497)
> [  120.892057] pid_max: default: 65536 minimum: 512
> [  120.892502] Mount-cache hash table entries: 512
> [  120.893663] Initializing cgroup subsys ns
> [  120.893682] ns_cgroup deprecated: consider using the 'clone_children' flag without the ns_cgroup.
> [  120.893710] Initializing cgroup subsys cpuacct
> [  120.893817] Initializing cgroup subsys devices
> [  120.893835] Initializing cgroup subsys freezer
> [  120.893851] Initializing cgroup subsys net_cls
> [  120.894117] Performance events: Supported PMU type is 'niagara2'
> [  120.916617] Brought up 64 CPUs
> [  120.916685] Testing NMI watchdog ... OK.
> [  120.998031] devtmpfs: initialized
> [  120.998482] ldc.c:v1.1 (July 22, 2008)
> [  120.998753] print_constraints: dummy: 
> [  120.999091] NET: Registered protocol family 16
> [  121.008200] VIO: Adding device channel-devices
> [  121.008276] VIO: Adding device vldc-port-3-0
> [  121.008338] VIO: Adding device vldc-port-3-1
> [  121.008398] VIO: Adding device vldc-port-3-2
> [  121.008457] VIO: Adding device vldc-port-3-3
> [  121.008526] VIO: Adding device vldc-port-3-4
> [  121.008594] VIO: Adding device vldc-port-3-5
> [  121.008663] VIO: Adding device vldc-port-2-0
> [  121.008730] VIO: Adding device vldc-port-0-0
> [  121.008795] VIO: Adding device vldc-port-0-1
> [  121.008862] VIO: Adding device vldc-port-0-2
> [  121.008939] VIO: Adding device vldc-port-1-0
> [  121.009011] VIO: Adding device vldc-port-3-7
> [  121.009082] VIO: Adding device vldc-port-3-8
> [  121.009164] VIO: Adding device ds-1
> [  121.009227] VIO: Adding device ds-0
> [  121.013776] pci_sun4v: Registered hvapi major[1] minor[0]
> [  121.014050] /pci@0: SUN4V PCI Bus Module
> [  121.014069] /pci@0: On NUMA node -1
> [  121.014089] /pci@0: PCI IO[c0f0000000] MEM[c100000000]
> [  121.014117] /pci@0: Unable to request IOMMU resource.
> [  121.058300] /pci@0: Imported 3 TSB entries from OBP
> [  121.059736] /pci@0: MSI Queue first[0] num[36] count[128] devino[0x18]
> [  121.059764] /pci@0: MSI first[0] num[256] mask[0xff] width[32]
> [  121.059788] /pci@0: MSI addr32[0x7fff0000:0x10000] addr64[0x3ffff0000:0x10000]
> [  121.059817] /pci@0: MSI queues at RA [00000007f8180000]
> [  121.059841] PCI: Scanning PBM /pci@0
> [  121.071538] ds.c:v1.0 (Jul 11, 2007)
> [  121.074662] bio: create slab <bio-0> at 0
> [  121.075346] vgaarb: loaded
> [  121.076145] Switching to clocksource stick
> [  121.076886] Switched to NOHz mode on CPU #30
> [  121.077007] Switched to NOHz mode on CPU #42
> [  121.077128] Switched to NOHz mode on CPU #19
> [  121.077162] Switched to NOHz mode on CPU #7
> [  121.077206] Switched to NOHz mode on CPU #54
> [  121.077215] Switched to NOHz mode on CPU #31
> [  121.077346] Switched to NOHz mode on CPU #43
> [  121.077457] Switched to NOHz mode on CPU #20
> [  121.077468] Switched to NOHz mode on CPU #8
> [  121.077551] Switched to NOHz mode on CPU #32
> [  121.077563] Switched to NOHz mode on CPU #55
> [  121.077693] Switched to NOHz mode on CPU #44
> [  121.077791] Switched to NOHz mode on CPU #9
> [  121.077799] Switched to NOHz mode on CPU #21
> [  121.077897] Switched to NOHz mode on CPU #33
> [  121.077910] Switched to NOHz mode on CPU #56
> [  121.078038] Switched to NOHz mode on CPU #45
> [  121.078125] Switched to NOHz mode on CPU #10
> [  121.078134] Switched to NOHz mode on CPU #22
> [  121.078231] Switched to NOHz mode on CPU #34
> [  121.078262] Switched to NOHz mode on CPU #57
> [  121.078382] Switched to NOHz mode on CPU #46
> [  121.078457] Switched to NOHz mode on CPU #11
> [  121.078479] Switched to NOHz mode on CPU #23
> [  121.078586] Switched to NOHz mode on CPU #35
> [  121.078607] Switched to NOHz mode on CPU #58
> [  121.078730] Switched to NOHz mode on CPU #47
> [  121.078786] Switched to NOHz mode on CPU #12
> [  121.078819] Switched to NOHz mode on CPU #24
> [  121.078922] Switched to NOHz mode on CPU #36
> [  121.078973] Switched to NOHz mode on CPU #59
> [  121.079081] Switched to NOHz mode on CPU #48
> [  121.079103] Switched to NOHz mode on CPU #1
> [  121.079115] Switched to NOHz mode on CPU #13
> [  121.079158] Switched to NOHz mode on CPU #25
> [  121.079275] Switched to NOHz mode on CPU #37
> [  121.079323] Switched to NOHz mode on CPU #60
> [  121.079438] Switched to NOHz mode on CPU #14
> [  121.079447] Switched to NOHz mode on CPU #49
> [  121.079494] Switched to NOHz mode on CPU #26
> [  121.079504] Switched to NOHz mode on CPU #2
> [  121.079612] Switched to NOHz mode on CPU #38
> [  121.079674] Switched to NOHz mode on CPU #61
> [  121.079777] Switched to NOHz mode on CPU #15
> [  121.079788] Switched to NOHz mode on CPU #50
> [  121.079828] Switched to NOHz mode on CPU #3
> [  121.079843] Switched to NOHz mode on CPU #27
> [  121.079928] Switched to NOHz mode on CPU #0
> [  121.079946] Switched to NOHz mode on CPU #39
> [  121.080027] Switched to NOHz mode on CPU #62
> [  121.080115] Switched to NOHz mode on CPU #16
> [  121.080137] Switched to NOHz mode on CPU #51
> [  121.080163] Switched to NOHz mode on CPU #4
> [  121.080178] Switched to NOHz mode on CPU #28
> [  121.080300] Switched to NOHz mode on CPU #40
> [  121.080378] Switched to NOHz mode on CPU #63
> [  121.080631] Switched to NOHz mode on CPU #53
> [  121.080640] Switched to NOHz mode on CPU #52
> [  121.080649] Switched to NOHz mode on CPU #29
> [  121.080658] Switched to NOHz mode on CPU #18
> [  121.080666] Switched to NOHz mode on CPU #17
> [  121.080676] Switched to NOHz mode on CPU #6
> [  121.080685] Switched to NOHz mode on CPU #5
> [  121.080694] Switched to NOHz mode on CPU #41
> [  121.084586] NET: Registered protocol family 2
> [  121.085036] IP route cache hash table entries: 524288 (order: 9, 4194304 bytes)
> [  121.087098] TCP established hash table entries: 524288 (order: 10, 8388608 bytes)
> [  121.112468] TCP bind hash table entries: 65536 (order: 7, 1048576 bytes)
> [  121.116211] TCP: Hash tables configured (established 524288 bind 65536)
> [  121.116237] TCP reno registered
> [  121.116275] UDP hash table entries: 16384 (order: 6, 524288 bytes)
> [  121.118284] UDP-Lite hash table entries: 16384 (order: 6, 524288 bytes)
> [  121.121764] NET: Registered protocol family 1
> [  121.121844] RPC:       creating workqueue rpciod
> [  121.122191] RPC:       registering /proc/net/rpc
> [  121.122304] svc: Adding svc transport class 'tcp'
> [  121.122330] svc: Adding svc transport class 'udp'
> [  121.122417] RPC: Registered udp transport module.
> [  121.122439] RPC: Registered tcp transport module.
> [  121.122460] RPC: Registered tcp NFSv4.1 backchannel transport module.
> [  121.123725] audit: initializing netlink socket (disabled)
> [  121.123771] type=2000 audit(0.304:1): initialized
> [  121.138489] ds-1: Registered pri service.
> [  121.144197] ds-1: Registered var-config-backup service.
> [  121.172347] HugeTLB registered 4 MB page size, pre-allocated 0 pages
> [  121.180933] VFS: Disk quotas dquot_6.5.2
> [  121.181389] Dquot-cache hash table entries: 1024 (order 0, 8192 bytes)
> [  121.181957] RPC:       creating workqueue nfsiod
> [  121.182576] RPC:       registering /proc/net/rpc/nfs
> [  121.182629] msgmni has been set to 32768
> [  121.183725] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253)
> [  121.183758] io scheduler noop registered
> [  121.183777] io scheduler deadline registered
> [  121.184006] io scheduler cfq registered (default)
> [  121.185364] f027ab74: ttyS0 at I/O 0x0 (irq = 17) is a SUN4V HCONS
> [  121.290493] console [ttyHV0] enabled
> [  121.296625] f028af14: ttyS1 at MMIO 0xfff0ca0000 (irq = 24) is a 16550A
> [  121.297233] [drm] Initialized drm 1.1.0 20060810
> [  121.298368] e1000e: Intel(R) PRO/1000 Network Driver - 1.3.10-k2
> [  121.298415] e1000e: Copyright(c) 1999 - 2011 Intel Corporation.
> [  121.316970] e1000e 0000:08:00.0: Disabling ASPM  L1
> [  121.495481] e1000e 0000:08:00.0: eth0: (PCI Express:2.5GB/s:Width x4) 00:14:4f:98:09:c2
> [  121.495542] e1000e 0000:08:00.0: eth0: Intel(R) PRO/1000 Network Connection
> [  121.495668] e1000e 0000:08:00.0: eth0: MAC: 0, PHY: 4, PBA No: FFFFFF-0FF
> [  121.495749] e1000e 0000:08:00.1: Disabling ASPM  L1
> [  121.677262] e1000e 0000:08:00.1: eth1: (PCI Express:2.5GB/s:Width x4) 00:14:4f:98:09:c3
> [  121.677322] e1000e 0000:08:00.1: eth1: Intel(R) PRO/1000 Network Connection
> [  121.677448] e1000e 0000:08:00.1: eth1: MAC: 0, PHY: 4, PBA No: FFFFFF-0FF
> [  121.677516] e1000e 0000:09:00.0: Disabling ASPM  L1
> [  121.855616] e1000e 0000:09:00.0: eth2: (PCI Express:2.5GB/s:Width x4) 00:14:4f:98:09:c4
> [  121.855736] e1000e 0000:09:00.0: eth2: Intel(R) PRO/1000 Network Connection
> [  121.855919] e1000e 0000:09:00.0: eth2: MAC: 0, PHY: 4, PBA No: FFFFFF-0FF
> [  121.856045] e1000e 0000:09:00.1: Disabling ASPM  L1
> [  122.037491] e1000e 0000:09:00.1: eth3: (PCI Express:2.5GB/s:Width x4) 00:14:4f:98:09:c5
> [  122.037612] e1000e 0000:09:00.1: eth3: Intel(R) PRO/1000 Network Connection
> [  122.037795] e1000e 0000:09:00.1: eth3: MAC: 0, PHY: 4, PBA No: FFFFFF-0FF
> [  122.038436] mousedev: PS/2 mouse device common for all mice
> [  122.039494] rtc-sun4v rtc-sun4v: rtc core: registered sun4v as rtc0
> [  122.040139] TCP cubic registered
> [  122.041005] NET: Registered protocol family 10
> [  122.045854] Mobile IPv6
> [  122.045927] NET: Registered protocol family 17
> [  122.046031] Registering the dns_resolver key type
> [  122.046545] registered taskstats version 1
> [  122.049569] rtc-sun4v rtc-sun4v: setting system clock to 2011-11-04 17:52:28 UTC (1320429148)
> [  122.798799] ADDRCONF(NETDEV_UP): eth0: link is not ready
> [  123.821111] IP-Config: Complete:
> [  123.821180]      device=eth0, addr=137.226.167.242, mask=255.255.255.224, gw=255.255.255.255,
> [  123.821382]      host=137.226.167.242, domain=, nis-domain=(none),
> [  123.821497]      bootserver=255.255.255.255, rootserver=137.226.167.241, rootpath=
> [  123.821828] Root-NFS: nfsroot=/srv/nfs/cluster2
> [  123.822225] NFS: nfs mount opts='udp,nolock,addr=137.226.167.241'
> [  123.822447] NFS:   parsing nfs mount option 'udp'
> [  123.822514] NFS:   parsing nfs mount option 'nolock'
> [  123.822589] NFS:   parsing nfs mount option 'addr=137.226.167.241'
> [  123.822657] NFS: MNTPATH: '/srv/nfs/cluster2'
> [  123.822720] NFS: sending MNT request for 137.226.167.241:/srv/nfs/cluster2
> [  123.822816] RPC:       set up xprt to 137.226.167.241 (autobind) via udp
> [  123.822898] RPC:       created transport fffff807f7595000 with 16 slots
> [  123.822947] RPC:       creating mount client for 137.226.167.241 (xprt fffff807f7595000)
> [  123.823037] RPC:       creating UNIX authenticator for client fffff807f74f4c00
> [  123.823125] RPC:       new task initialized, procpid 1
> [  123.823198] RPC:       allocated task fffff807f8212700
> [  123.823274] RPC:     1 __rpc_execute flags=0x680
> [  123.823309] RPC:     1 call_start mount3 proc NULL (sync)
> [  123.823384] RPC:     1 call_reserve (status 0)
> [  123.823417] RPC:     1 reserved req fffff807f71c8000 xid 28f70b9f
> [  123.823493] RPC:     1 call_reserveresult (status 0)
> [  123.823566] RPC:     1 call_refresh (status 0)
> [  123.823599] RPC:     1 holding NULL cred 00000000008aa050
> [  123.823674] RPC:     1 refreshing NULL cred 00000000008aa050
> [  123.823719] RPC:     1 call_refreshresult (status 0)
> [  123.823792] RPC:     1 call_allocate (status 0)
> [  123.823856] RPC:     1 allocated buffer of size 96 at fffff807f7595800
> [  123.823904] RPC:     1 call_bind (status 0)
> [  123.823967] RPC:     1 rpcb_getport_async(137.226.167.241, 100005, 3, 17)
> [  123.824016] RPC:     1 sleep_on(queue "xprt_binding" time 4294893049)
> [  123.824093] RPC:     1 added to queue fffff807f75950c8 "xprt_binding"
> [  123.824169] RPC:     1 setting alarm for 60000 ms
> [  123.824206] RPC:     1 rpcb_getport_async: trying rpcbind version 2
> [  123.824296] RPC:       set up xprt to 137.226.167.241 (port 111) via udp
> [  123.824376] RPC:       created transport fffff807f7596000 with 16 slots
> [  123.824454] RPC:       creating rpcbind client for 137.226.167.241 (xprt fffff807f7596000)
> [  123.824513] RPC:       creating UNIX authenticator for client fffff807f74f4e00
> [  123.824599] RPC:       new task initialized, procpid 1
> [  123.824672] RPC:       allocated task fffff807f82127e0
> [  123.824752] RPC:       rpc_release_client(fffff807f74f4e00)
> [  123.824800] RPC:     1 sync task going to sleep
> [  123.824869] RPC:     2 __rpc_execute flags=0x681
> [  123.824933] RPC:     2 call_start rpcbind2 proc GETPORT (async)
> [  123.824980] RPC:     2 call_reserve (status 0)
> [  123.825042] RPC:     2 reserved req fffff807f71ca000 xid 61482335
> [  123.825088] RPC:     2 call_reserveresult (status 0)
> [  123.825161] RPC:     2 call_refresh (status 0)
> [  123.825221] RPC:     2 looking up UNIX cred
> [  123.825252] RPC:       looking up UNIX cred
> [  123.825286] RPC:       allocating UNIX cred for uid 0 gid 0
> [  123.825362] RPC:     2 refreshing UNIX cred fffff807f74035c0
> [  123.825437] RPC:     2 call_refreshresult (status 0)
> [  123.825481] RPC:     2 call_allocate (status 0)
> [  123.825543] RPC:     2 allocated buffer of size 416 at fffff807f7596800
> [  123.825620] RPC:     2 call_bind (status 0)
> [  123.825653] RPC:     2 call_connect xprt fffff807f7596000 is not connected
> [  123.825731] RPC:     2 xprt_connect xprt fffff807f7596000 is not connected
> [  123.825809] RPC:     2 xprt_cwnd_limited cong = 0 cwnd = 256
> [  123.825856] RPC:     2 sleep_on(queue "xprt_pending" time 4294893049)
> [  123.825933] RPC:     2 added to queue fffff807f75962d8 "xprt_pending"
> [  123.826008] RPC:     2 setting alarm for 5000 ms
> [  123.826042] RPC:       xs_connect scheduled xprt fffff807f7596000
> [  123.826167] RPC:       xs_bind 0.0.0.0:0: ok (0)
> [  123.826232] RPC:       worker connecting xprt fffff807f7596000 via udp to 137.226.167.241 (port 111)
> [  123.826323] RPC:     2 __rpc_wake_up_task (now 4294893050)
> [  123.826396] RPC:     2 disabling timer
> [  123.826428] RPC:     2 removed from queue fffff807f75962d8 "xprt_pending"
> [  123.826475] RPC:       __rpc_wake_up_task done
> [  123.826508] RPC:     2 __rpc_execute flags=0x681
> [  123.826541] RPC:     2 xprt_connect_status: connection established
> [  123.826588] RPC:     2 call_connect_status (status 0)
> [  123.826632] RPC:     2 call_transmit (status 0)
> [  123.826664] RPC:     2 xprt_prepare_transmit
> [  123.826696] RPC:     2 rpc_xdr_encode (status 0)
> [  123.826729] RPC:     2 marshaling UNIX cred fffff807f74035c0
> [  123.826777] RPC:     2 using AUTH_UNIX cred fffff807f74035c0 to wrap rpc data
> [  123.826830] RPC:     2 encoding PMAP_GETPORT call (100005, 3, 17, 0)
> [  123.826877] RPC:     2 xprt_transmit(92)
> [  123.826973] RPC:       xs_udp_send_request(92) = 92
> [  123.827007] RPC:     2 xmit complete
> [  123.827040] RPC:     2 sleep_on(queue "xprt_pending" time 4294893050)
> [  123.827088] RPC:     2 added to queue fffff807f75962d8 "xprt_pending"
> [  123.827135] RPC:     2 setting alarm for 5000 ms
> [  124.915844] e1000e: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx
> [  124.936050] ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
> [  128.844738] RPC:     2 timeout
> [  128.844798] RPC:     2 __rpc_wake_up_task (now 4294894304)
> [  128.844901] RPC:     2 disabling timer
> [  128.844962] RPC:     2 removed from queue fffff807f75962d8 "xprt_pending"
> [  128.845068] RPC:       __rpc_wake_up_task done
> [  128.845172] RPC:     2 __rpc_execute flags=0xe81
> [  128.845206] RPC:     2 xprt_timer
> [  128.845238] RPC:       cong 256, cwnd was 256, now 256
> [  128.845312] RPC:       wake_up_next(fffff807f7596228 "xprt_resend")
> [  128.845360] RPC:       wake_up_next(fffff807f7596178 "xprt_sending")
> [  128.845437] RPC:     2 call_status (status -60)
> [  128.845470] RPC:     2 call_timeout (minor)
> [  128.845530] RPC:     2 call_bind (status 0)
> [  128.845563] RPC:     2 call_connect xprt fffff807f7596000 is connected
> [  128.845638] RPC:     2 call_transmit (status 0)
> [  128.845669] RPC:     2 xprt_prepare_transmit
> [  128.845731] RPC:     2 xprt_cwnd_limited cong = 0 cwnd = 256
> [  128.845776] RPC:     2 rpc_xdr_encode (status 0)
> [  128.845839] RPC:     2 marshaling UNIX cred fffff807f74035c0
> [  128.845915] RPC:     2 using AUTH_UNIX cred fffff807f74035c0 to wrap rpc data
> [  128.845968] RPC:     2 encoding PMAP_GETPORT call (100005, 3, 17, 0)
> [  128.846044] RPC:     2 xprt_transmit(92)
> [  128.846125] RPC:       xs_udp_send_request(92) = 92
> [  128.846159] RPC:     2 xmit complete
> [  128.846220] RPC:     2 sleep_on(queue "xprt_pending" time 4294894304)
> [  128.846297] RPC:     2 added to queue fffff807f75962d8 "xprt_pending"
> [  128.846344] RPC:     2 setting alarm for 10000 ms
> [  138.865672] RPC:     2 timeout
> [  138.865733] RPC:     2 __rpc_wake_up_task (now 4294896808)
> [  138.865834] RPC:     2 disabling timer
> [  138.865894] RPC:     2 removed from queue fffff807f75962d8 "xprt_pending"
> [  138.866002] RPC:       __rpc_wake_up_task done
> [  138.866101] RPC:     2 __rpc_execute flags=0xe81
> [  138.866134] RPC:     2 xprt_timer
> [  138.866165] RPC:       cong 256, cwnd was 256, now 256
> [  138.866238] RPC:       wake_up_next(fffff807f7596228 "xprt_resend")
> [  138.866285] RPC:       wake_up_next(fffff807f7596178 "xprt_sending")
> [  138.866362] RPC:     2 call_status (status -60)
> [  138.866394] RPC:     2 call_timeout (minor)
> [  138.866454] RPC:     2 call_bind (status 0)
> [  138.866486] RPC:     2 call_connect xprt fffff807f7596000 is connected
> [  138.866562] RPC:     2 call_transmit (status 0)
> [  138.866593] RPC:     2 xprt_prepare_transmit
> [  138.866654] RPC:     2 xprt_cwnd_limited cong = 0 cwnd = 256
> [  138.866700] RPC:     2 rpc_xdr_encode (status 0)
> [  138.866761] RPC:     2 marshaling UNIX cred fffff807f74035c0
> [  138.866837] RPC:     2 using AUTH_UNIX cred fffff807f74035c0 to wrap rpc data
> [  138.866889] RPC:     2 encoding PMAP_GETPORT call (100005, 3, 17, 0)
> [  138.866963] RPC:     2 xprt_transmit(92)
> [  138.867007] RPC:       xs_udp_send_request(92) = 92
> [  138.867070] RPC:     2 xmit complete
> [  138.867130] RPC:     2 sleep_on(queue "xprt_pending" time 4294896808)
> [  138.867179] RPC:     2 added to queue fffff807f75962d8 "xprt_pending"
> [  138.867254] RPC:     2 setting alarm for 20000 ms
> [  158.940429] RPC:     2 timeout
> [  158.940490] RPC:     2 __rpc_wake_up_task (now 4294901824)
> [  158.940591] RPC:     2 disabling timer
> [  158.940651] RPC:     2 removed from queue fffff807f75962d8 "xprt_pending"
> [  158.940756] RPC:       __rpc_wake_up_task done
> [  158.940902] RPC:     2 __rpc_execute flags=0xe81
> [  158.940965] RPC:     2 xprt_timer
> [  158.940995] RPC:       cong 256, cwnd was 256, now 256
> [  158.941039] RPC:       wake_up_next(fffff807f7596228 "xprt_resend")
> [  158.941115] RPC:       wake_up_next(fffff807f7596178 "xprt_sending")
> [  158.941163] RPC:     2 call_status (status -60)
> [  158.941225] RPC:     2 call_timeout (major)
> [  158.941258] RPC:       setting port for xprt fffff807f7595000 to 0
> [  158.941337] RPC:     2 rpcb_getport_done(status -60, port 0)
> [  158.941412] RPC:     2 return 0, status -60
> [  158.941442] RPC:     2 release task
> [  158.941504] RPC:       freeing buffer of size 416 at fffff807f7596800
> [  158.941554] RPC:     2 release request fffff807f71ca000
> [  158.941628] RPC:       wake_up_next(fffff807f7596388 "xprt_backlog")
> [  158.941705] RPC:       rpc_release_client(fffff807f74f4e00)
> [  158.941751] RPC:       destroying rpcbind client for 137.226.167.241
> [  158.941827] RPC:       destroying transport fffff807f7596000
> [  158.941937] RPC:       xs_destroy xprt fffff807f7596000
> [  158.942033] RPC:       xs_close xprt fffff807f7596000
> [  158.942125] RPC:       disconnected transport fffff807f7596000
> [  158.942205] RPC:     2 freeing task
> [  158.942238] RPC:     1 __rpc_wake_up_task (now 4294901824)
> [  158.942310] RPC:     1 disabling timer
> [  158.942371] RPC:     1 removed from queue fffff807f75950c8 "xprt_binding"
> [  158.942427] RPC:       __rpc_wake_up_task done
> [  158.942439] RPC:     1 sync task resuming
> [  158.942447] RPC:     1 rpcbind request timed out
> [  158.942456] RPC:     1 call_timeout (major)
> [  158.942465] RPC:     1 return 0, status -60
> [  158.942472] RPC:     1 release task
> [  158.942485] RPC:       freeing buffer of size 96 at fffff807f7595800
> [  158.942498] RPC:     1 release request fffff807f71c8000
> [  158.942508] RPC:       wake_up_next(fffff807f7595388 "xprt_backlog")
> [  158.942520] RPC:       rpc_release_client(fffff807f74f4c00)
> [  158.942531] RPC:     1 freeing task
> [  158.942541] RPC:       shutting down mount client for 137.226.167.241
> [  158.942550] RPC:       rpc_release_client(fffff807f74f4c00)
> [  158.942560] RPC:       destroying UNIX authenticator 00000000008aa0d8
> [  158.942575] RPC:       destroying mount client for 137.226.167.241
> [  158.942587] NFS: failed to create MNT RPC client, status=-60
> [  158.942599] NFS: unable to mount server 137.226.167.241, error -60
> [  158.942642] VFS: Unable to mount root fs via NFS, trying floppy.
> [  158.942804] List of all partitions:
> [  158.942815] No filesystem could mount root, tried: 
> [  158.942829] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
> [  158.942840] Call Trace:
> [  158.942867]  [00000000008b8d18] mount_block_root+0x210/0x228
> [  158.942884]  [00000000008b8df4] mount_root+0xc4/0xd4
> [  158.942899]  [00000000008b8f80] prepare_namespace+0x17c/0x1c0
> [  158.942915]  [00000000008b8260] kernel_init+0x164/0x17c
> [  158.942934]  [000000000042ac74] kernel_thread+0x30/0x48
> [  158.942952]  [000000000075d1fc] rest_init+0x18/0x74
> [  158.943026] Press Stop-A (L1-A) to return to the boot prom
> [  158.943848] RPC:       destroying transport fffff807f7595000
> [  158.943913] RPC:       xs_destroy xprt fffff807f7595000
> [  158.944013] RPC:       xs_close xprt fffff807f7595000
> [  158.944087] RPC:       disconnected transport fffff807f7595000

-- 
Chuck Lever
chuck[dot]lever[at]oracle[dot]com




--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply

* Re: what's in a bus_info
From: Ben Hutchings @ 2011-11-04 23:02 UTC (permalink / raw)
  To: Rick Jones; +Cc: netdev, rusty, mst
In-Reply-To: <4EB466CB.2040506@hp.com>

On Fri, 2011-11-04 at 15:27 -0700, Rick Jones wrote:
> ...or would an interface name smell as sweet? (as PCI bus addressing)
> 
> Is there a "standard" for what is returned in bus_info of 
> ethtool_drvinfo?  I have been very used to seeing PCI bus addressing 
> information in that field (at least as displayed by ethtool -i) and when 
> I went to "leverage how to" from other drivers, to add "native" ethtool 
> -i support to virtio_net, I ended-up with "eth0" rather than the PCI 
> information I see in lspci output and in ethtool -i against other 
> devices.  Including an emulated e1000 interface in the same kernel.
>
> What I'm doing is calling pci_name(), feeding it with to_pci_dev() from 
> the address of the struct device in the struct net_device.

to_pci_dev() just uses container_of() to find a pci_dev when you have a
pointer to the generic device structure embedded in it.  However, you're
passing a pointer to the device embedded in a net_device.  The net
device is a child of the PCI device, so you need to do:

	dev_dev = dev->dev.parent;

And you don't even have to assume that the parent is a PCI device,
because you can use the generic dev_name().

But you don't even need to this, since the ethtool core has a default
implementation that does this...

[...]
> BTW, I notice some drivers call strlcpy and some strncpy, and some even 
> call strcpy.  Is there one that is meant to be preferred over the others?

strlcpy() is preferred - if it has to truncate, it will at least leave a
null terminator, as clients may expect.  Back when drivers handled
SIOCETHTOOL directly strncpy() may have been preferable since they were
responsible for initialising the entire structure returned to
user-space.

Ben.

-- 
Ben Hutchings, Staff Engineer, Solarflare
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.

^ permalink raw reply

* [net] etherh: Add MAINTAINERS entry for etherh
From: Jeff Kirsher @ 2011-11-04 22:58 UTC (permalink / raw)
  To: davem; +Cc: Jeff Kirsher, netdev, gospo, sassmann, Russell King, Joe Perches

During the re-organization of Ethernet drivers, the MAINTAINERS
entry for etherh got dropped accidentally.

CC: Russell King <linux@arm.linux.org.uk>
CC: Joe Perches <joe@perches.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---
 MAINTAINERS |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/MAINTAINERS b/MAINTAINERS
index a6afe34..ecb2299 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1032,6 +1032,7 @@ F:	arch/arm/include/asm/hardware/ioc.h
 F:	arch/arm/include/asm/hardware/iomd.h
 F:	arch/arm/include/asm/hardware/memc.h
 F:	arch/arm/mach-rpc/
+F:	drivers/net/ethernet/8390/etherh.c
 F:	drivers/net/ethernet/i825xx/ether1*
 F:	drivers/net/ethernet/seeq/ether3*
 F:	drivers/scsi/arm/
-- 
1.7.6.4

^ permalink raw reply related

* Re: [patch] bonding: comparing a u8 with -1 is always false
From: David Miller @ 2011-11-04 22:37 UTC (permalink / raw)
  To: dan.carpenter; +Cc: fubar, wpan, andy, netdev, kernel-janitors, bhutchings
In-Reply-To: <20111104205351.GQ4682@mwanda>

From: Dan Carpenter <dan.carpenter@oracle.com>
Date: Fri, 4 Nov 2011 23:53:51 +0300

> On Fri, Nov 04, 2011 at 01:02:01PM -0700, Jay Vosburgh wrote:
>> 
>> 	Since you #define SPEED_UNKNOWN to -1 (below), how does this
>> actually change anything?  Did you mean 0xffff (because struct
>> ethtool_cmd's speed is a u16)?
>> 
> 
> Sorry I could have explained this better in the changelog.  The
> slave->speed is stored in a u32 and the -1 works fine as is.
> Obviously, as you point out the define doesn't change anything.  I
> just changed it so it would look symetric with DUPLEX_UNKNOWN.
> 
> But I think you missed that I defined #define DUPLEX_UNKNOWN 0xff.
> Before it we used a -1 for both and that didn't work.
> 
> I can resend this with a note about the SPEED_UNKNOWN cleanup if
> you'd like.  I'll do that tomorrow or Sunday.

That won't be necessary, I'll apply your patch as-is.

Thanks Dan.

^ permalink raw reply

* Re: [net] i825xx:xscale:8390:freescale: Fix Kconfig dependancies
From: Jeff Kirsher @ 2011-11-04 22:30 UTC (permalink / raw)
  To: David Miller
  Cc: netdev@vger.kernel.org, gospo@redhat.com, sassmann@redhat.com
In-Reply-To: <20111104.174159.1262489521924521081.davem@redhat.com>

[-- Attachment #1: Type: text/plain, Size: 951 bytes --]

On Fri, 2011-11-04 at 14:41 -0700, David Miller wrote:
> From: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
> Date: Wed,  2 Nov 2011 03:30:52 -0700
> 
> > i825xx and xscale are "sub" Kconfigs to NET_VENDOR_INTEL, so
> > NET_VENDOR_INTEL should contain ALL the dependencies of the
> > "sub" Kconfigs.
> > 
> > Same with 8390 is a "sub" Kconfig to NET_VENDOR_NATSEMI, so
> > NET_VENDOR_NATSEMI needs to contains ALL the dependencies.
> > 
> > Freescale Kconfig only had fs_enet as a sub Kconfig, and already
> > contained the needed dependencies, just cleaned up the dependencies.
> > 
> > Reported-by: Geert Uytterhoeven <geert@linux-m68k.org>
> > Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
> 
> Applied, but:
> 
> > +		   XTENSA_PLATFORM_XT2000 || ZORRO
> > +		   
> >  	---help---
> 
> I removed that extraneous white-space-only line before "--help--"
> 

Sorry about that Dave, that was not intended.  Thanks

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

^ permalink raw reply

* Re: pull request: wireless 2011-11-04
From: Rafał Miłecki @ 2011-11-04 22:30 UTC (permalink / raw)
  To: John W. Linville; +Cc: davem, linux-wireless, netdev, linux-kernel
In-Reply-To: <20111104191343.GB13505@tuxdriver.com>

2011/11/4 John W. Linville <linville@tuxdriver.com>:
> commit 22097fd297c85ec6c2e700d506f231f7cae442e1
>
> Dave,
>
> Here is the first batch of wireless fixes intended for 3.2 -- hooray!

John, could you take a look at 2 patches?
[PATCH 3.2 REQ V2] b43: HT-PHY: report signal to mac80211
[PATCH V2 3.2] b43: fill ctl1 word on all newer PHYs, fix PHY errors
I don't think there were commited for 3.2 or rejected by you.

Were there any problems with that 2 patches?

-- 
Rafał

^ permalink raw reply


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox