netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/5][v2] phylib: Add Clause 45 read/write functions
From: shh.xie @ 2013-11-26  9:51 UTC (permalink / raw)
  To: davem, jg1.han, mugunthanvnm, f.fainelli, netdev, linux-kernel
  Cc: Emilian.Medve, madalin.bucur

From: Andy Fleming <afleming@freescale.com>

Need an extra parameter to read or write Clause 45 PHYs, so
need a different API with the extra parameter.

Signed-off-by: Andy Fleming <afleming@freescale.com>
Signed-off-by: Shaohui Xie <Shaohui.Xie@freescale.com>
---
v2: no change.

 include/linux/phy.h | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/include/linux/phy.h b/include/linux/phy.h
index 48a4dc3..2549b42 100644
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
@@ -498,6 +498,21 @@ static inline int phy_read(struct phy_device *phydev, u32 regnum)
 }
 
 /**
+ * phy_read_mmd - Convenience function for reading a register
+ * from an MMD on a given PHY.
+ * @phydev: The phy_device struct
+ * @devad: The MMD to read from
+ * @regnum: The register on the MMD to read
+ *
+ * Same rules as for phy_read();
+ */
+static inline int phy_read_mmd(struct phy_device *phydev, int devad, u32 regnum)
+{
+	return mdiobus_read(phydev->bus, phydev->addr,
+		MII_ADDR_C45 | (devad << 16) | (regnum & 0xffff));
+}
+
+/**
  * phy_write - Convenience function for writing a given PHY register
  * @phydev: the phy_device struct
  * @regnum: register number to write
@@ -533,6 +548,24 @@ static inline bool phy_is_internal(struct phy_device *phydev)
 	return phydev->is_internal;
 }
 
+/**
+ * phy_write_mmd - Convenience function for writing a register
+ * on an MMD on a given PHY.
+ * @phydev: The phy_device struct
+ * @devad: The MMD to read from
+ * @regnum: The register on the MMD to read
+ * @val: value to write to @regnum
+ *
+ * Same rules as for phy_write();
+ */
+static inline int phy_write_mmd(struct phy_device *phydev, int devad,
+		u32 regnum, u16 val)
+{
+	regnum = MII_ADDR_C45 | ((devad & 0x1f) << 16) | (regnum & 0xffff);
+
+	return mdiobus_write(phydev->bus, phydev->addr, regnum, val);
+}
+
 struct phy_device *phy_device_create(struct mii_bus *bus, int addr, int phy_id,
 		bool is_c45, struct phy_c45_device_ids *c45_ids);
 struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45);
-- 
1.8.4.1

^ permalink raw reply related

* [PATCH 3/5][v2] phylib: Add generic 10G driver
From: shh.xie @ 2013-11-26  9:54 UTC (permalink / raw)
  To: davem, jg1.han, mugunthanvnm, f.fainelli, netdev, linux-kernel
  Cc: Emilian.Medve, madalin.bucur

From: Andy Fleming <afleming@freescale.com>

Very incomplete, but will allow for binding an ethernet controller
to it.

Signed-off-by: Andy Fleming <afleming@freescale.com>
Signed-off-by: Shaohui Xie <Shaohui.Xie@freescale.com>
---
v2: turn genphy_driver to an array, add generic 10g driver to it.

 drivers/net/phy/phy_device.c | 96 ++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 89 insertions(+), 7 deletions(-)

diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
index d6447b3..96a5e03 100644
--- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c
@@ -32,6 +32,7 @@
 #include <linux/module.h>
 #include <linux/mii.h>
 #include <linux/ethtool.h>
+#include <linux/mdio.h>
 #include <linux/phy.h>
 
 #include <asm/io.h>
@@ -53,7 +54,7 @@ static void phy_device_release(struct device *dev)
 	kfree(to_phy_device(dev));
 }
 
-static struct phy_driver genphy_driver;
+static struct phy_driver genphy_driver[2];
 extern int mdio_bus_init(void);
 extern void mdio_bus_exit(void);
 
@@ -539,7 +540,7 @@ static int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
 			return -ENODEV;
 		}
 
-		d->driver = &genphy_driver.driver;
+		d->driver = &genphy_driver[0].driver;
 
 		err = d->driver->probe(d);
 		if (err >= 0)
@@ -620,7 +621,7 @@ void phy_detach(struct phy_device *phydev)
 	 * was using the generic driver), we unbind the device
 	 * from the generic driver so that there's a chance a
 	 * real driver could be loaded */
-	if (phydev->dev.driver == &genphy_driver.driver)
+	if (phydev->dev.driver == &genphy_driver[0].driver)
 		device_release_driver(&phydev->dev);
 }
 EXPORT_SYMBOL(phy_detach);
@@ -689,6 +690,12 @@ static int genphy_config_advert(struct phy_device *phydev)
 	return changed;
 }
 
+int gen10g_config_advert(struct phy_device *dev)
+{
+	return 0;
+}
+EXPORT_SYMBOL(gen10g_config_advert);
+
 /**
  * genphy_setup_forced - configures/forces speed/duplex from @phydev
  * @phydev: target phy_device struct
@@ -742,6 +749,11 @@ int genphy_restart_aneg(struct phy_device *phydev)
 }
 EXPORT_SYMBOL(genphy_restart_aneg);
 
+int gen10g_restart_aneg(struct phy_device *phydev)
+{
+	return 0;
+}
+EXPORT_SYMBOL(gen10g_restart_aneg);
 
 /**
  * genphy_config_aneg - restart auto-negotiation or write BMCR
@@ -784,6 +796,12 @@ int genphy_config_aneg(struct phy_device *phydev)
 }
 EXPORT_SYMBOL(genphy_config_aneg);
 
+int gen10g_config_aneg(struct phy_device *phydev)
+{
+	return 0;
+}
+EXPORT_SYMBOL(gen10g_config_aneg);
+
 /**
  * genphy_update_link - update link status in @phydev
  * @phydev: target phy_device struct
@@ -913,6 +931,34 @@ int genphy_read_status(struct phy_device *phydev)
 }
 EXPORT_SYMBOL(genphy_read_status);
 
+int gen10g_read_status(struct phy_device *phydev)
+{
+	int devad, reg;
+	u32 mmd_mask = phydev->c45_ids.devices_in_package;
+
+	phydev->link = 1;
+
+	/* For now just lie and say it's 10G all the time */
+	phydev->speed = SPEED_10000;
+	phydev->duplex = DUPLEX_FULL;
+
+	for (devad = 0; mmd_mask; devad++, mmd_mask = mmd_mask >> 1) {
+		if (!(mmd_mask & 1))
+			continue;
+
+		/* Read twice because link state is latched and a
+		 * read moves the current state into the register
+		 */
+		phy_read_mmd(phydev, devad, MDIO_STAT1);
+		reg = phy_read_mmd(phydev, devad, MDIO_STAT1);
+		if (reg < 0 || !(reg & MDIO_STAT1_LSTATUS))
+			phydev->link = 0;
+	}
+
+	return 0;
+}
+EXPORT_SYMBOL(gen10g_read_status);
+
 static int genphy_config_init(struct phy_device *phydev)
 {
 	int val;
@@ -959,6 +1005,16 @@ static int genphy_config_init(struct phy_device *phydev)
 
 	return 0;
 }
+
+static int gen10g_config_init(struct phy_device *phydev)
+{
+	/* Temporarily just say we support everything */
+	phydev->supported = SUPPORTED_10000baseT_Full;
+	phydev->advertising = SUPPORTED_10000baseT_Full;
+
+	return 0;
+}
+
 int genphy_suspend(struct phy_device *phydev)
 {
 	int value;
@@ -974,6 +1030,12 @@ int genphy_suspend(struct phy_device *phydev)
 }
 EXPORT_SYMBOL(genphy_suspend);
 
+int gen10g_suspend(struct phy_device *phydev)
+{
+	return 0;
+}
+EXPORT_SYMBOL(gen10g_suspend);
+
 int genphy_resume(struct phy_device *phydev)
 {
 	int value;
@@ -989,6 +1051,12 @@ int genphy_resume(struct phy_device *phydev)
 }
 EXPORT_SYMBOL(genphy_resume);
 
+int gen10g_resume(struct phy_device *phydev)
+{
+	return 0;
+}
+EXPORT_SYMBOL(gen10g_resume);
+
 /**
  * phy_probe - probe and init a PHY device
  * @dev: device to probe and init
@@ -1116,7 +1184,8 @@ void phy_drivers_unregister(struct phy_driver *drv, int n)
 }
 EXPORT_SYMBOL(phy_drivers_unregister);
 
-static struct phy_driver genphy_driver = {
+static struct phy_driver genphy_driver[] = {
+{
 	.phy_id		= 0xffffffff,
 	.phy_id_mask	= 0xffffffff,
 	.name		= "Generic PHY",
@@ -1127,7 +1196,18 @@ static struct phy_driver genphy_driver = {
 	.suspend	= genphy_suspend,
 	.resume		= genphy_resume,
 	.driver		= {.owner= THIS_MODULE, },
-};
+}, {
+	.phy_id         = 0xffffffff,
+	.phy_id_mask    = 0xffffffff,
+	.name           = "Generic 10G PHY",
+	.config_init    = gen10g_config_init,
+	.features       = 0,
+	.config_aneg    = gen10g_config_aneg,
+	.read_status    = gen10g_read_status,
+	.suspend        = gen10g_suspend,
+	.resume         = gen10g_resume,
+	.driver         = {.owner = THIS_MODULE, },
+} };
 
 static int __init phy_init(void)
 {
@@ -1137,7 +1217,8 @@ static int __init phy_init(void)
 	if (rc)
 		return rc;
 
-	rc = phy_driver_register(&genphy_driver);
+	rc = phy_drivers_register(genphy_driver,
+				  ARRAY_SIZE(genphy_driver));
 	if (rc)
 		mdio_bus_exit();
 
@@ -1146,7 +1227,8 @@ static int __init phy_init(void)
 
 static void __exit phy_exit(void)
 {
-	phy_driver_unregister(&genphy_driver);
+	phy_drivers_unregister(genphy_driver,
+			       ARRAY_SIZE(genphy_driver));
 	mdio_bus_exit();
 }
 
-- 
1.8.4.1

^ permalink raw reply related

* [PATCH 4/5] phylib: Support attaching to generic 10g driver
From: shh.xie @ 2013-11-26  9:55 UTC (permalink / raw)
  To: davem, jg1.han, mugunthanvnm, f.fainelli, netdev, linux-kernel
  Cc: Emilian.Medve, madalin.bucur

From: Andy Fleming <afleming@freescale.com>

phy_attach_direct() may now attach to a generic 10G driver. It can
also be used exactly as phy_connect_direct(), which will be useful
when using of_mdio, as phy_connect (and therefore of_phy_connect)
start the PHY state machine, which is currently irrelevant for 10G
PHYs.

Signed-off-by: Andy Fleming <afleming@freescale.com>
Signed-off-by: Shaohui Xie <Shaohui.Xie@freescale.com>
---
v2: align with the array genphy_driver.

 drivers/net/phy/phy_device.c | 22 ++++++++++------------
 include/linux/phy.h          |  2 ++
 2 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
index 96a5e03..a6b4ce0 100644
--- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c
@@ -61,9 +61,6 @@ extern void mdio_bus_exit(void);
 static LIST_HEAD(phy_fixup_list);
 static DEFINE_MUTEX(phy_fixup_lock);
 
-static int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
-			     u32 flags, phy_interface_t interface);
-
 /*
  * Creates a new phy_fixup and adds it to the list
  * @bus_id: A string which matches phydev->dev.bus_id (or PHY_ANY_ID)
@@ -521,12 +518,12 @@ int phy_init_hw(struct phy_device *phydev)
  *
  * Description: Called by drivers to attach to a particular PHY
  *     device. The phy_device is found, and properly hooked up
- *     to the phy_driver.  If no driver is attached, then the
- *     genphy_driver is used.  The phy_device is given a ptr to
+ *     to the phy_driver.  If no driver is attached, then a
+ *     generic driver is used.  The phy_device is given a ptr to
  *     the attaching device, and given a callback for link status
  *     change.  The phy_device is returned to the attaching driver.
  */
-static int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
+int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
 			     u32 flags, phy_interface_t interface)
 {
 	struct device *d = &phydev->dev;
@@ -535,12 +532,10 @@ static int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
 	/* Assume that if there is no driver, that it doesn't
 	 * exist, and we should use the genphy driver. */
 	if (NULL == d->driver) {
-		if (phydev->is_c45) {
-			pr_err("No driver for phy %x\n", phydev->phy_id);
-			return -ENODEV;
-		}
-
-		d->driver = &genphy_driver[0].driver;
+		if (phydev->is_c45)
+			d->driver = &genphy_driver[1].driver;
+		else
+			d->driver = &genphy_driver[0].driver;
 
 		err = d->driver->probe(d);
 		if (err >= 0)
@@ -573,6 +568,7 @@ static int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
 
 	return err;
 }
+EXPORT_SYMBOL(phy_attach_direct);
 
 /**
  * phy_attach - attach a network device to a particular PHY device
@@ -623,6 +619,8 @@ void phy_detach(struct phy_device *phydev)
 	 * real driver could be loaded */
 	if (phydev->dev.driver == &genphy_driver[0].driver)
 		device_release_driver(&phydev->dev);
+	else if (phydev->dev.driver == &genphy_driver[1].driver)
+		device_release_driver(&phydev->dev);
 }
 EXPORT_SYMBOL(phy_detach);
 
diff --git a/include/linux/phy.h b/include/linux/phy.h
index 2606599..00abc35 100644
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
@@ -575,6 +575,8 @@ int phy_init_hw(struct phy_device *phydev);
 struct phy_device * phy_attach(struct net_device *dev,
 		const char *bus_id, phy_interface_t interface);
 struct phy_device *phy_find_first(struct mii_bus *bus);
+int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
+			     u32 flags, phy_interface_t interface);
 int phy_connect_direct(struct net_device *dev, struct phy_device *phydev,
 		void (*handler)(struct net_device *),
 		phy_interface_t interface);
-- 
1.8.4.1

^ permalink raw reply related

* [PATCH 5/5][v2] phylib: Add of_phy_attach
From: shh.xie @ 2013-11-26  9:55 UTC (permalink / raw)
  To: davem, jg1.han, mugunthanvnm, f.fainelli, netdev, linux-kernel
  Cc: Emilian.Medve, madalin.bucur

From: Andy Fleming <afleming@freescale.com>

10G PHYs don't currently support running the state machine, which
is implicitly setup via of_phy_connect(). Therefore, it is necessary
to implement an OF version of phy_attach(), which does everything
except start the state machine.

Signed-off-by: Andy Fleming <afleming@freescale.com>
Signed-off-by: Shaohui Xie <Shaohui.Xie@freescale.com>
---
v2: no changes.

 drivers/of/of_mdio.c    | 19 +++++++++++++++++++
 include/linux/of_mdio.h |  9 +++++++++
 2 files changed, 28 insertions(+)

diff --git a/drivers/of/of_mdio.c b/drivers/of/of_mdio.c
index d5a57a9..21076ac 100644
--- a/drivers/of/of_mdio.c
+++ b/drivers/of/of_mdio.c
@@ -247,3 +247,22 @@ struct phy_device *of_phy_connect_fixed_link(struct net_device *dev,
 	return IS_ERR(phy) ? NULL : phy;
 }
 EXPORT_SYMBOL(of_phy_connect_fixed_link);
+
+/**
+ * of_phy_attach - Attach to a PHY without starting the state machine
+ * @dev: pointer to net_device claiming the phy
+ * @phy_np: Node pointer for the PHY
+ * @flags: flags to pass to the PHY
+ * @iface: PHY data interface type
+ */
+struct phy_device *of_phy_attach(struct net_device *dev,
+		struct device_node *phy_np, u32 flags, phy_interface_t iface)
+{
+	struct phy_device *phy = of_phy_find_device(phy_np);
+
+	if (!phy)
+		return NULL;
+
+	return phy_attach_direct(dev, phy, flags, iface) ? NULL : phy;
+}
+EXPORT_SYMBOL(of_phy_attach);
diff --git a/include/linux/of_mdio.h b/include/linux/of_mdio.h
index 8163107..108583a 100644
--- a/include/linux/of_mdio.h
+++ b/include/linux/of_mdio.h
@@ -19,6 +19,9 @@ extern struct phy_device *of_phy_connect(struct net_device *dev,
 					 struct device_node *phy_np,
 					 void (*hndlr)(struct net_device *),
 					 u32 flags, phy_interface_t iface);
+struct phy_device *of_phy_attach(struct net_device *dev,
+				 struct device_node *phy_np, u32 flags,
+				 phy_interface_t iface);
 extern struct phy_device *of_phy_connect_fixed_link(struct net_device *dev,
 					 void (*hndlr)(struct net_device *),
 					 phy_interface_t iface);
@@ -44,6 +47,12 @@ static inline struct phy_device *of_phy_connect(struct net_device *dev,
 	return NULL;
 }
 
+static inline struct phy_device *of_phy_attach(struct net_device *dev,
+		struct device_node *phy_np, u32 flags, phy_interface_t iface)
+{
+	return NULL;
+}
+
 static inline struct phy_device *of_phy_connect_fixed_link(struct net_device *dev,
 							   void (*hndlr)(struct net_device *),
 							   phy_interface_t iface)
-- 
1.8.4.1

^ permalink raw reply related

* RE: [PATCH 01/17] net: Add utility function to clear rxhash
From: David Laight @ 2013-11-26 10:01 UTC (permalink / raw)
  To: Tom Herbert, davem, netdev
In-Reply-To: <alpine.DEB.2.02.1311252141350.23058@tomh.mtv.corp.google.com>

> From: Tom Herbert
> 
> In several places 'skb->rxhash = 0' is being done to clear the
> rxhash value in an skb.  This does not clear l4_rxhash which could
> still be set so that the rxhash wouldn't be recalculated on subsequent
> call to skb_get_rxhash.  This patch adds an explict function to clear
> all the rxhash related information in the skb properly.
> 
...
> 
> +static inline void skb_clear_rxhash(struct sk_buff *skb)
> +{
> +	skb->rxhash = 0;
> +	skb->l4_rxhash = 0;
> +}

Wouldn't it be better to also change the names of the structure members.
Then you'd be sure to find all the uses.

And in patch 2/17 ...

+enum rxhash_types {

Add RXHASH_TYPE_UNSET

+	RXHASH_TYPE_NONE,	/* Undefined type */
+	RXHASH_TYPE_L2,		/* Uses L2 information (addresses) */
+	RXHASH_TYPE_L3,		/* Uses L3 information */
+	RXHASH_TYPE_L4,		/* Uses L4 information (ports) */
+};
+
+static inline void
+skb_set_rxhash(struct sk_buff *skb, __u32 hash, enum rxhash_types type)
+{
+	skb->l4_rxhash = (type == RXHASH_TYPE_L4);

Save the actual type.

+	skb->rxhash = hash;
+}

	David

^ permalink raw reply

* Re: [PATCH 08/17] net: e1000e calls skb_get_rxhash
From: Jeff Kirsher @ 2013-11-26 10:21 UTC (permalink / raw)
  To: Tom Herbert; +Cc: David Miller, netdev
In-Reply-To: <alpine.DEB.2.02.1311252151460.22983@tomh.mtv.corp.google.com>

On Mon, Nov 25, 2013 at 9:52 PM, Tom Herbert <therbert@google.com> wrote:
> Drivers should call skb_get_rxhash to set the rxhash and its type
> in an skbuff.
>
> Signed-off-by: Tom Herbert <therbert@google.com>
> ---
>  drivers/net/ethernet/intel/e1000e/netdev.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>

I have added the patch to my queue, thanks Tom!

^ permalink raw reply

* Re: [PATCH 09/17] net: i40e calls skb_get_rxhash
From: Jeff Kirsher @ 2013-11-26 10:22 UTC (permalink / raw)
  To: Tom Herbert; +Cc: David Miller, netdev
In-Reply-To: <alpine.DEB.2.02.1311252151580.23058@tomh.mtv.corp.google.com>

On Mon, Nov 25, 2013 at 9:52 PM, Tom Herbert <therbert@google.com> wrote:
> Drivers should call skb_get_rxhash to set the rxhash and its type
> in an skbuff.
>
> Signed-off-by: Tom Herbert <therbert@google.com>
> ---
>  drivers/net/ethernet/intel/i40e/i40e_txrx.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)

I have added the patch to my queue, thanks Tom!

^ permalink raw reply

* Re: [PATCH 10/17] net: igb calls skb_get_rxhash
From: Jeff Kirsher @ 2013-11-26 10:22 UTC (permalink / raw)
  To: Tom Herbert; +Cc: David Miller, netdev
In-Reply-To: <alpine.DEB.2.02.1311252153020.22983@tomh.mtv.corp.google.com>

On Mon, Nov 25, 2013 at 9:54 PM, Tom Herbert <therbert@google.com> wrote:
> Drivers should call skb_get_rxhash to set the rxhash and its type
> in an skbuff.
>
> Signed-off-by: Tom Herbert <therbert@google.com>
> ---
>  drivers/net/ethernet/intel/igb/igb_main.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)

I have added the patch to my queue, thanks Tom!

^ permalink raw reply

* Re: [PATCH 11/17] net: ixgbe calls skb_get_rxhash
From: Jeff Kirsher @ 2013-11-26 10:23 UTC (permalink / raw)
  To: Tom Herbert; +Cc: David Miller, netdev
In-Reply-To: <alpine.DEB.2.02.1311252153050.23058@tomh.mtv.corp.google.com>

On Mon, Nov 25, 2013 at 9:54 PM, Tom Herbert <therbert@google.com> wrote:
> Drivers should call skb_get_rxhash to set the rxhash and its type
> in an skbuff.
>
> Signed-off-by: Tom Herbert <therbert@google.com>
> ---
>  drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)

I have added the patch to my queue, thanks Tom!

^ permalink raw reply

* Re: [PATCH] ath6kl: sdio: fix system panic when doing wifi stress test
From: Kalle Valo @ 2013-11-26 10:40 UTC (permalink / raw)
  To: Jason Liu
  Cc: linux-arm-kernel, linville, linux-wireless, netdev, linux-kernel,
	ath6kl-devel
In-Reply-To: <1384221185-8645-1-git-send-email-r64343@freescale.com>

Hi Jason,

Jason Liu <r64343@freescale.com> writes:

> When did the wifi iperf test, meet one following kernel panic:
> command: iperf -c $TARGET_IP -i 5 -t 50 -w 1M
>
> Unable to handle kernel paging request at virtual address 1a480000
> pgd = 80004000
> [1a480000] *pgd=00000000
> Internal error: Oops: 805 [#1] SMP ARM

[...]

> The kernel panic is caused by the sg_buf is not set correctly with the
> following code when compiled with Yocto GCC 4.8.1:
>
> drivers/net/wireless/ath/ath6kl/hif.h:
> struct hif_scatter_req {
>         struct list_head list;
>         /* address for the read/write operation */
>         u32 addr;
> 	...
>
>         /* bounce buffer for upper layers to copy to/from */
>         u8 *virt_dma_buf;
>
>         struct hif_scatter_item scat_list[1];
>
>         u32 scat_q_depth;
> };
>
> (Note: the scat_req.scat_list[] will dynamiclly grow with run-time)

There's actually a major bug right there, scat_list can corrupt scat_q_depth.

> The GCC 4.8.1 compiler will not do the for-loop till scat_entries, instead,
> it only run one round loop. This may be caused by that the GCC 4.8.1 thought
> that the scat_list only have one item and then no need to do full iteration,
> but this is simply wrong by looking at the assebly code. This will cause the
> sg buffer not get set when scat_entries > 1 and thus lead to kernel panic.
>
> This patch is a workaround to the GCC 4.8.1 complier issue by passing the
> entry address of the scat_req->scat_list to the for-loop and interate it,
> then, GCC 4.8.1 will do the full for-loop correctly.
> (Note: This issue not observed with GCC 4.7.2, only found on the GCC 4.8.1)
>
> This patch does not change any function logic and no any performance downgrade.

[...]

> +	scat_list = &scat_req->scat_list[0];
> +
>  	/* assemble SG list */
> -	for (i = 0; i < scat_req->scat_entries; i++, sg++) {
> +	for (i = 0; i < scat_req->scat_entries; i++, sg++, scat_list++) {
>  		ath6kl_dbg(ATH6KL_DBG_SCATTER, "%d: addr:0x%p, len:%d\n",
> -			   i, scat_req->scat_list[i].buf,
> -			   scat_req->scat_list[i].len);
> +			   i, scat_list->buf, scat_list->len);
>  
> -		sg_set_buf(sg, scat_req->scat_list[i].buf,
> -			   scat_req->scat_list[i].len);
> +		sg_set_buf(sg, scat_list->buf, scat_list->len);
>  	}

Working around the problem by adding a temporary variable makes me a bit
worried, I would rather fix the root cause. Is the root cause by that we
define the field with scat_list[1]?

Does the patch below help? It would also fix the corruption with
scat_q_depth. Please note that I have only compile tested it. And I
might have also missed something important, so please review it
carefully.

--- a/drivers/net/wireless/ath/ath6kl/hif.h
+++ b/drivers/net/wireless/ath/ath6kl/hif.h
@@ -197,9 +197,9 @@ struct hif_scatter_req {
 	/* bounce buffer for upper layers to copy to/from */
 	u8 *virt_dma_buf;
 
-	struct hif_scatter_item scat_list[1];
-
 	u32 scat_q_depth;
+
+	struct hif_scatter_item scat_list[0];
 };
 
 struct ath6kl_irq_proc_registers {
diff --git a/drivers/net/wireless/ath/ath6kl/sdio.c b/drivers/net/wireless/ath/ath6kl/sdio.c
index 7126bdd..6bf15a3 100644
--- a/drivers/net/wireless/ath/ath6kl/sdio.c
+++ b/drivers/net/wireless/ath/ath6kl/sdio.c
@@ -348,7 +348,7 @@ static int ath6kl_sdio_alloc_prep_scat_req(struct ath6kl_sdio *ar_sdio,
 	int i, scat_req_sz, scat_list_sz, size;
 	u8 *virt_buf;
 
-	scat_list_sz = (n_scat_entry - 1) * sizeof(struct hif_scatter_item);
+	scat_list_sz = n_scat_entry * sizeof(struct hif_scatter_item);
 	scat_req_sz = sizeof(*s_req) + scat_list_sz;
 
 	if (!virt_scat)


-- 
Kalle Valo

^ permalink raw reply related

* [PATCH 2/5][v2] phylib: introduce PHY_INTERFACE_MODE_XGMII for 10G PHY
From: shh.xie @ 2013-11-26  9:52 UTC (permalink / raw)
  To: davem, jg1.han, mugunthanvnm, f.fainelli, netdev, linux-kernel
  Cc: Emilian.Medve, madalin.bucur

From: Shaohui Xie <Shaohui.Xie@freescale.com>

Signed-off-by: Andy Fleming <afleming@freescale.com>
Signed-off-by: Shaohui Xie <Shaohui.Xie@freescale.com>
---
v2: update of_net.c.

 drivers/of/of_net.c | 1 +
 include/linux/phy.h | 1 +
 2 files changed, 2 insertions(+)

diff --git a/drivers/of/of_net.c b/drivers/of/of_net.c
index 8f9be2e..a208a45 100644
--- a/drivers/of/of_net.c
+++ b/drivers/of/of_net.c
@@ -30,6 +30,7 @@ static const char *phy_modes[] = {
 	[PHY_INTERFACE_MODE_RGMII_TXID] = "rgmii-txid",
 	[PHY_INTERFACE_MODE_RTBI]	= "rtbi",
 	[PHY_INTERFACE_MODE_SMII]	= "smii",
+	[PHY_INTERFACE_MODE_XGMII]	= "xgmii",
 };
 
 /**
diff --git a/include/linux/phy.h b/include/linux/phy.h
index 2549b42..2606599 100644
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
@@ -66,6 +66,7 @@ typedef enum {
 	PHY_INTERFACE_MODE_RGMII_TXID,
 	PHY_INTERFACE_MODE_RTBI,
 	PHY_INTERFACE_MODE_SMII,
+	PHY_INTERFACE_MODE_XGMII,
 } phy_interface_t;
 
 
-- 
1.8.4.1

^ permalink raw reply related

* Re:Answer back.
From: Lee Hyuk @ 2013-11-26 11:12 UTC (permalink / raw)





I would like to discuss a very important crude oil project with you,kindly
revert back to me if this is your valid email address forfurther
information.
Regards,
Lee

^ permalink raw reply

* Re: [PATCH 06/17] net: cisco-enic calls skb_get_rxhash
From: Govindarajulu Varadarajan @ 2013-11-26 11:56 UTC (permalink / raw)
  To: Christian Benvenuti (benve), Sujith Sankar (ssujith), Tom Herbert,
	jeffrey.t.kirsher
  Cc: David Miller, netdev
In-Reply-To: <alpine.DEB.2.02.1311252150050.22983@tomh.mtv.corp.google.com>



On Mon, 25 Nov 2013, Tom Herbert wrote:

> Drivers should call skb_get_rxhash to set the rxhash and its type in an skbuff.
                           ^^^
It should be skb_set_rxhash right? I would like to have 'git log' show
correct information.

Otherwise this patch looks fine for me.

Acked-by: Govindarajulu Varadarajan <govindarajulu90@gmail.com>

>
> Signed-off-by: Tom Herbert <therbert@google.com>
> ---
> drivers/net/ethernet/cisco/enic/enic_main.c | 11 ++++++-----
> 1 file changed, 6 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/net/ethernet/cisco/enic/enic_main.c b/drivers/net/ethernet/cisco/enic/enic_main.c
> index ff78dfa..ea30551 100644
> --- a/drivers/net/ethernet/cisco/enic/enic_main.c
> +++ b/drivers/net/ethernet/cisco/enic/enic_main.c
> @@ -1036,11 +1036,12 @@ static void enic_rq_indicate_buf(struct vnic_rq *rq,
> 		skb->protocol = eth_type_trans(skb, netdev);
> 		skb_record_rx_queue(skb, q_number);
> 		if (netdev->features & NETIF_F_RXHASH) {
> -			skb->rxhash = rss_hash;
> -			if (rss_type & (NIC_CFG_RSS_HASH_TYPE_TCP_IPV6_EX |
> -					NIC_CFG_RSS_HASH_TYPE_TCP_IPV6 |
> -					NIC_CFG_RSS_HASH_TYPE_TCP_IPV4))
> -				skb->l4_rxhash = true;
> +			skb_set_rxhash(skb, rss_hash,
> +			    (rss_type & (NIC_CFG_RSS_HASH_TYPE_TCP_IPV6_EX |
> +					 NIC_CFG_RSS_HASH_TYPE_TCP_IPV6 |
> +					 NIC_CFG_RSS_HASH_TYPE_TCP_IPV4)) ?
> +			     RXHASH_TYPE_L4 : RXHASH_TYPE_L3);
> +
> 		}
>
> 		if ((netdev->features & NETIF_F_RXCSUM) && !csum_not_calc) {
> -- 
> 1.8.4.1
>
> --
> To unsubscribe from this list: send the line "unsubscribe netdev" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>

^ permalink raw reply

* netfilter: xt_hashlimit: fix proc entry leak in netns destroy path
From: Sergey Popovich @ 2013-11-26 12:09 UTC (permalink / raw)
  To: netdev

commit 32263dd1b43378b4f7d7796ed713f77e95f27e8a
Author: Vitaly E. Lavrov <>
Date:   Mon Dec 24 14:42:17 2012 +0100

    netfilter: xt_hashlimit: fix namespace destroy path

Takes into account fact, that hashlimit_net_exit() called right before
hashlimit_mt_destroy() and fixes destroy path for netns.

However using xt_hashlimit for IPv4 and IPv6 together produces following 
output
on netconsole from one of our servers on netns destroy:

 Pid: 9499, comm: kworker/u:0 Tainted: G        WC O 3.2.0-5-netctl-amd64-
core2
 Call Trace:
  [<ffffffff8104708d>] ? warn_slowpath_common+0x78/0x8c
  [<ffffffff81047139>] ? warn_slowpath_fmt+0x45/0x4a
  [<ffffffff81144a99>] ? remove_proc_entry+0xd8/0x22e
  [<ffffffff810ebbaa>] ? kfree+0x5b/0x6c
  [<ffffffffa043c501>] ? hashlimit_net_exit+0x45/0x8d [xt_hashlimit]
  [<ffffffff8128ab30>] ? ops_exit_list+0x1c/0x44
  [<ffffffff8128b28e>] ? cleanup_net+0xf1/0x180
  [<ffffffff810369fc>] ? should_resched+0x5/0x23
  [<ffffffff8105b8f9>] ? process_one_work+0x161/0x269
  [<ffffffff8105aea5>] ? cwq_activate_delayed_work+0x3c/0x48
  [<ffffffff8105c8c2>] ? worker_thread+0xc2/0x145
  [<ffffffff8105c800>] ? manage_workers.isra.25+0x15b/0x15b
  [<ffffffff8105fa01>] ? kthread+0x76/0x7e
  [<ffffffff813581f4>] ? kernel_thread_helper+0x4/0x10
  [<ffffffff8105f98b>] ? kthread_worker_fn+0x139/0x139
  [<ffffffff813581f0>] ? gs_change+0x13/0x13
 ---[ end trace d8c3cc0ad163ef79 ]---
 ------------[ cut here ]------------
 WARNING: at 
/usr/src/linux-3.2.52/debian/build/source_netctl/fs/proc/generic.c:849
 remove_proc_entry+0x217/0x22e()
 Hardware name:
 remove_proc_entry: removing non-empty directory 'net/ip6t_hashlimit', leaking
at least 'IN-REJECT'

This is due to lack of removal net/ip6t_hashlimit/* entries in
hashlimit_proc_net_exit().

Found and tested with custom build 3.2.x and backported commits
32263dd1b (netfilter: xt_hashlimit: fix namespace destroy path) and
commit 665e205c1 (netfilter: xt_recent: fix namespace destroy path),
which seems not currently in linux-stable (at least for 3.2.x series).

Signed-off-by: Sergey Popovich <popovich_sergei@mail.ru>
---
 net/netfilter/xt_hashlimit.c | 25 +++++++++++--------------
 1 file changed, 11 insertions(+), 14 deletions(-)

diff --git a/net/netfilter/xt_hashlimit.c b/net/netfilter/xt_hashlimit.c
index 9ff035c..a3910fc 100644
--- a/net/netfilter/xt_hashlimit.c
+++ b/net/netfilter/xt_hashlimit.c
@@ -325,21 +325,24 @@ static void htable_gc(unsigned long htlong)
 	add_timer(&ht->timer);
 }
 
-static void htable_destroy(struct xt_hashlimit_htable *hinfo)
+static void htable_remove_proc_entry(struct xt_hashlimit_htable *hinfo)
 {
 	struct hashlimit_net *hashlimit_net = hashlimit_pernet(hinfo->net);
 	struct proc_dir_entry *parent;
 
-	del_timer_sync(&hinfo->timer);
-
 	if (hinfo->family == NFPROTO_IPV4)
 		parent = hashlimit_net->ipt_hashlimit;
 	else
 		parent = hashlimit_net->ip6t_hashlimit;
 
-	if(parent != NULL)
+	if (parent != NULL)
 		remove_proc_entry(hinfo->name, parent);
+}
 
+static void htable_destroy(struct xt_hashlimit_htable *hinfo)
+{
+	del_timer_sync(&hinfo->timer);
+	htable_remove_proc_entry(hinfo);
 	htable_selective_cleanup(hinfo, select_all);
 	kfree(hinfo->name);
 	vfree(hinfo);
@@ -883,21 +886,15 @@ static int __net_init hashlimit_proc_net_init(struct net 
*net)
 static void __net_exit hashlimit_proc_net_exit(struct net *net)
 {
 	struct xt_hashlimit_htable *hinfo;
-	struct proc_dir_entry *pde;
 	struct hashlimit_net *hashlimit_net = hashlimit_pernet(net);
 
-	/* recent_net_exit() is called before recent_mt_destroy(). Make sure
-	 * that the parent xt_recent proc entry is is empty before trying to
-	 * remove it.
+	/* hashlimit_net_exit() is called before hashlimit_mt_destroy().
+	 * Make sure that the parent ipt_hashlimit and ip6t_hashlimit proc
+	 * entries is empty before trying to remove it.
 	 */
 	mutex_lock(&hashlimit_mutex);
-	pde = hashlimit_net->ipt_hashlimit;
-	if (pde == NULL)
-		pde = hashlimit_net->ip6t_hashlimit;
-
 	hlist_for_each_entry(hinfo, &hashlimit_net->htables, node)
-		remove_proc_entry(hinfo->name, pde);
-
+		htable_remove_proc_entry(hinfo);
 	hashlimit_net->ipt_hashlimit = NULL;
 	hashlimit_net->ip6t_hashlimit = NULL;
 	mutex_unlock(&hashlimit_mutex);
-- 
1.8.3.4

^ permalink raw reply related

* Re: loop on reset adapter with ixgbe
From: William Dauchy @ 2013-11-26 13:00 UTC (permalink / raw)
  To: Skidmore, Donald C
  Cc: William Dauchy, netdev@vger.kernel.org, Keller, Jacob E,
	Fastabend, John R, Tantilov, Emil S, Potenza, Leonardo
In-Reply-To: <F6FB0E698C9B3143BDF729DF222866466FD88708@ORSMSX110.amr.corp.intel.com>

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

Hi,

Thank you for your quick reply.

On Nov20 18:53, Skidmore, Donald C wrote:
> Thanks for letting know what you're running into, however I don't remember ever seeing a failure quite like this.  I'm wondering if it is something we might have fixed in later versions of the driver.  By any chance could you see if you get the same failure with the latest source forge driver?  It will make it easier to track down if we are looking for something we already fix or a new problem altogether.

I am unfortunately getting the same result with ixgbe 3.18.7 compiled
with a linux kernel v3.10.x

Sorry for my late answer,
-- 
William

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply

* Re: loop on reset adapter with ixgbe
From: William Dauchy @ 2013-11-26 13:04 UTC (permalink / raw)
  To: Skidmore, Donald C
  Cc: William Dauchy, netdev@vger.kernel.org, Keller, Jacob E,
	Fastabend, John R, Tantilov, Emil S, Potenza, Leonardo
In-Reply-To: <F6FB0E698C9B3143BDF729DF222866466FD88724@ORSMSX110.amr.corp.intel.com>

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

On Nov20 18:58, Skidmore, Donald C wrote:
> I also just noticed your firmware looks in correct.  What is the DevID for your device?

might be a stupid question, but which id are you talking about? How can
I get it?

> Likewise do you have another NIC and if so could you check it's firmware-version?

I have some NIC with the same firmware without any problem.

Regards,
-- 
William

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply

* Re: bridge not getting ip since 3.11.5 and 3.4.66
From: Mark Trompell @ 2013-11-26 13:27 UTC (permalink / raw)
  To: Veaceslav Falico; +Cc: Linux-Kernel, netdev, herbert
In-Reply-To: <CAEPa5ym0+-_Q9zUidDfE2SD7XYZxAqqEUByBkkH1ZOmh9rmFHg@mail.gmail.com>

Answering my own mail again and even top posting, sorry, but makes
more sense to me in that case).
I reverted bridge related patches from 3.11.5 and it boils down to
commit 0e308361d7ca0bf8b23fd472b90aae0fb10a1c32
Author: Herbert Xu <herbert@gondor.apana.org.au>
Date:   Thu Sep 12 17:12:05 2013 +1000

    bridge: Clamp forward_delay when enabling STP

    [ Upstream commit be4f154d5ef0ca147ab6bcd38857a774133f5450 ]

    At some point limits were added to forward_delay.  However, the
    limits are only enforced when STP is enabled.  This created a
    scenario where you could have a value outside the allowed range
    while STP is disabled, which then stuck around even after STP
    is enabled.

    This patch fixes this by clamping the value when we enable STP.

    I had to move the locking around a bit to ensure that there is
    no window where someone could insert a value outside the range
    while we're in the middle of enabling STP.

Causing the issue for me. Reverting that patch and br0 comes up again
and gets an ip.

On Tue, Nov 12, 2013 at 11:57 AM, Mark Trompell <mark@foresightlinux.org> wrote:
> On Mon, Nov 11, 2013 at 1:52 PM, Mark Trompell <mark@foresightlinux.org> wrote:
>> On Mon, Nov 11, 2013 at 12:07 PM, Veaceslav Falico <veaceslav@falico.eu> wrote:
>>> On Mon, Nov 11, 2013 at 11:29 AM, Mark Trompell <mark@foresightlinux.org> wrote:
>>>> my bridge br0 doesn't get an ip from dhcp anymore after 3.11.5 and 3.4.66,
>>>> What information would be helpful and required to find out what's going wrong.
>>>
>>> CC netdev
>>>
>>> First thing would be to provide the network scheme. Do you use vlans?
>>> Which network
>>> cards/drivers are you using? Do you use some kind of virtualization?
>>> Is bonding involved?
>>>
>> Actually this is my desktop machine using kvm for a virtual machine
>> that uses eth0 which is connected to the bridge
>> which is used as interface for the host.
>>
>> $ ip addr
>> 2. eth0: <BROADCAST,MULTICAST,UP,10000> mtu 1500 qdisc pfifo_fast
>> master br0 qlen 1000
>> ...
>> 3. br0: <BROADCAST,MULTICAST,UP,10000> mtu 1500 qdisc noqueue
>> ...
>>
>> Anything else?
>
> Okay more about my hardware and configuration:
> from lspci:
> 00:19.0 Ethernet controller: Intel Corporation 82579V Gigabit Network
> Connection (rev 04)
>
> /etc/sysconfig/network-scripts/ifcfg-br0
> DEVICE=br0
> ONBOOT=yes
> MACADDR=00:19:99:ac:b3:24
> TYPE=Bridge
> BOOTPROTO=dhcp
> STP=on
> NM_CONTROLLED=no
> DELAY=0
>
> /etc/sysconfig/network-scripts/ifcfg-eth0
> DEVICE=eth0
> HWADDR=00:19:99:cd:a5:e6
> #BOOTPROTO=dhcp
> ONBOOT=yes
> BRIDGE=br0
> TYPE=Ethernet
> NM_CONTROLLED=no
>
>
>> Greetings
>> Mark



-- 
Mark Trompell

Foresight Linux Xfce Edition
Cause your desktop should be freaking cool
(and Xfce)

^ permalink raw reply

* Re: Supporting 4 way connections in LKSCTP
From: Vlad Yasevich @ 2013-11-26 15:19 UTC (permalink / raw)
  To: Sun Paul, linux-sctp, netdev, linux-kernel
In-Reply-To: <CAFXGft+CXk3W8=3w=AuYzqYtYnR8nH4Of9=668tUeT+tugD9-A@mail.gmail.com>

On 11/25/2013 08:03 PM, Sun Paul wrote:
> Hi
> 
> we have a problem on using LKSCTP to form a 4 ways multi-homing network.
> 
> Configuration
> - Node-A has 2 IP addresses in different subnets, known as IP-A (eth1),
> IP-B (eth2)
> - Node-B has 2 IP addresses in different subnets, known as IP-X (eth1),
> IP-Y (eth2)
> 

First of all, this is not a 4 way multi-homed network.  As far as each
SCTP association is concerned, it has only 2 destinations to send to
so it has only 2 ways to get there.  The fact that you have multiple
local addresses doesn't mean that every local address can and should
be used to connect to the remote.

> the four way paths are shown below.
> 1. IP-A (11.1.1.1) to IP-X (11.1.1.11)
> 2. IP-B (12.1.1.1) to IP-Y (12.1.1.11)
> 3. IP-A (11.1.1.1) to IP-Y (12.1.1.11)
> 4. IP-B (12.1.1.1) to IP-X (11.1.1.11)

No, actually you only have 2 paths:  one to IPX and one to IP-Y.
Which source address you choose is based on routing policy
decisions and is outside the scope of SCTP.

> 
> the HB/HB_ACK is normal for the paths " IP-A to IP-X" and "IP-B to
> IP-Y", but it is not correct for the rest of two.

Right, because linux is using a host addressing model, not an interface
addressing model.  SCTP stack simply finds the best source address
that can be used to reach IP-X and it happens to be IP-A.  So that
is what it is going to use.

The above explains why you are seeing what you describe below.

In the end, linux SCTP implementation determines paths solely based
on the destination address.

-vlad

> 
> First of all, we are using iproute2 to form 2 table such that when
> IP-B arrives on IP-X, it will know how to route back to IP-B on the
> same interface, i.e (eth1). Same logic for the path "IP-A to IP-X".
> 
> What we observed here is that when 12.1.1.1 sends INIT to 11.1.1.11,
> LKSCTP will send back the INIT_ACK to 12.1.1.1 using 12.1.1.11 but not
> using the IP 11.1.1.11.
> 
> The above operation makes the subsequence HB/HB_ACK in using wrong IP address.
> 
> TCP trace on eth1
> 18:02:41.058640 IP 12.1.1.1.2905 > 11.1.1.11.2905: sctp (1) [INIT]
> [init tag: 19933036] [rwnd: 102400] [OS: 16] [MIS: 16] [init TSN: 0]
> 18:02:41.061634 IP 12.1.1.1.2905 > 11.1.1.11.2905: sctp (1) [COOKIE ECHO]
> 18:02:41.062642 IP 12.1.1.1.2905 > 11.1.1.11.2905: sctp (1) [HB REQ]
> 18:02:41.062846 IP 11.1.1.11.2905 > 11.1.1.1.2905: sctp (1) [HB ACK]
> 18:02:41.361811 IP 11.1.1.11.2905 > 11.1.1.1.2905: sctp (1) [HB ACK]
> 18:02:41.661791 IP 11.1.1.11.2905 > 11.1.1.1.2905: sctp (1) [HB ACK]
> 18:02:41.961791 IP 11.1.1.11.2905 > 11.1.1.1.2905: sctp (1) [HB ACK]
> 
> TCP trace on eth2
> 18:02:41.058755 IP 12.1.1.11.2905 > 12.1.1.1.2905: sctp (1) [INIT ACK]
> [init tag: 424726157] [rwnd: 131072] [OS: 5] [MIS: 5] [init TSN:
> 3340756356]
> 18:02:41.061696 IP 12.1.1.11.2905 > 12.1.1.1.2905: sctp (1) [COOKIE ACK]
> 18:02:41.062663 IP 12.1.1.11.2905 > 12.1.1.1.2905: sctp (1) [HB ACK]
> 18:02:41.062791 IP 11.1.1.1.2905 > 12.1.1.11.2905: sctp (1) [HB REQ]
> 18:02:41.361777 IP 11.1.1.1.2905 > 12.1.1.11.2905: sctp (1) [HB REQ]
> 18:02:41.661772 IP 11.1.1.1.2905 > 12.1.1.11.2905: sctp (1) [HB REQ]
> 18:02:41.961772 IP 11.1.1.1.2905 > 12.1.1.11.2905: sctp (1) [HB REQ]
> 18:02:42.161771 IP 11.1.1.1.2905 > 12.1.1.11.2905: sctp (1) [HB REQ]
> 18:02:42.461770 IP 11.1.1.1.2905 > 12.1.1.11.2905: sctp (1) [HB REQ]
> 18:02:42.675770 IP 11.1.1.1.2905 > 12.1.1.11.2905: sctp (1) [HB REQ]
> 
> 
> If we are using single homing, there is no problem on the SCTP
> communication. Below is the TCP trace on eth1 using sctp_test
> 
> 18:09:55.356727 IP 12.1.1.1.2905 > 11.1.1.11.2905: sctp (1) [INIT]
> [init tag: 32516609] [rwnd: 102400] [OS: 16] [MIS: 16] [init TSN: 0]
> 18:09:55.356811 IP 11.1.1.11.2905 > 12.1.1.1.2905: sctp (1) [INIT ACK]
> [init tag: 3168861995] [rwnd: 131072] [OS: 10] [MIS: 16] [init TSN:
> 1877695021]
> 18:09:55.357727 IP 12.1.1.1.2905 > 11.1.1.11.2905: sctp (1) [COOKIE ECHO]
> 18:09:55.357788 IP 11.1.1.11.2905 > 12.1.1.1.2905: sctp (1) [COOKIE ACK]
> 18:09:55.358724 IP 12.1.1.1.2905 > 11.1.1.11.2905: sctp (1) [HB REQ]
> 18:09:55.358740 IP 11.1.1.11.2905 > 12.1.1.1.2905: sctp (1) [HB ACK]
> 18:09:55.379715 IP 12.1.1.1.2905 > 11.1.1.11.2905: sctp (1) [DATA]
> (B)(E) [TSN: 0] [SID: 0] [SSEQ 0] [PPID 0x3]
> 18:09:55.379735 IP 11.1.1.11.2905 > 12.1.1.1.2905: sctp (1) [SACK]
> [cum ack 0] [a_rwnd 131064] [#gap acks 0] [#dup tsns 0]
> 18:09:55.657716 IP 12.1.1.1.2905 > 11.1.1.11.2905: sctp (1) [HB REQ]
> 18:09:55.657732 IP 11.1.1.11.2905 > 12.1.1.1.2905: sctp (1) [HB ACK]
> 
> From the observations, it seems that the LKSCTP library is not able to
> use the original local address when multi-homing is being used. Is
> there anyway can be resolved it?
> 
> Thanks
> 
> PS
> --
> To unsubscribe from this list: send the line "unsubscribe linux-sctp" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 

^ permalink raw reply

* Re: Kernel 3.4.57: "tg3 0000:01:00.0: eth0: transmit timed out, resetting"
From: Urban Loesch @ 2013-11-26 15:20 UTC (permalink / raw)
  To: Nithin Nayak Sujir, Bjorn Helgaas
  Cc: linux-kernel@vger.kernel.org, Michael Chan, netdev
In-Reply-To: <528A59E4.20505@broadcom.com>

Hi Nithin,

sorry for the delay, but I had to wait to our regular maintaince window.
Yesterday I rebootet to kernel 3.10.19 (longterm). This kernel seems to have included the patch, too.

Until now the server is running normal without any errors in the logs, etc. and some load (15min average about: 3.5 - 8.10).

If I got the error again I let you know.

Many thanks for your help and best regards
Urban



Am 18.11.2013 19:18, schrieb Nithin Nayak Sujir:
> Can you try the latest stable kernel? There is a dma fix for 5720 that went into 3.10 for the tx timeout issue.
> 
> commit 9bc297ea0622bb2a6b3abfa2fa84f0a3b86ef8c8
> Author: Nithin Sujir <nsujir@broadcom.com>
> Date:   Mon Jun 3 09:19:34 2013 +0000
> 
>     tg3: Add read dma workaround for 5720
> 
>     Commit 091f0ea30074bc43f9250961b3247af713024bc6 "tg3: Add New 5719 Read
>     DMA workaround" added a workaround for TX DMA stall on the 5719. This
>     workaround needs to be applied to the 5720 as well.
> 
> 
> Nithin.
> 
> 
> On 11/16/2013 07:09 AM, Bjorn Helgaas wrote:
>> [+cc Nithin, Michael, netdev]
>>
>> On Sat, Nov 16, 2013 at 7:01 AM, Urban Loesch <bind@enas.net> wrote:
>>> Hi,
>>>
>>> I'm running a DELL PER620 with kernel 3.4.57 an Broadcom quad-port gbit
>>> adapter BCM5720. 15min load-average is about 4-8.
>>>
>>> After 13 days of uptime today the machine becomes unresponsible. But after a
>>> couple of minutes it becomes responsible again and was rebooted (sysctl
>>> paremter for kernel.panic = 1) automatically. the machine is acting a
>>> webserver fo about 3000 virtualhosts.
>>>
>>> After searching the lofiles on remote my syslog server I found the following
>>> messages regarding eth0:
>>>
>>> 2013-11-16 11:43:38  [1505491.196172] tg3 0000:01:00.0: eth0: transmit timed
>>> out, resetting
>>> 2013-11-16 11:43:38  [1505491.815002] INFO: rcu_bh detected stalls on
>>> CPUs/tasks:
>>> 2013-11-16 11:43:38  [1505491.815009]   16: (1 GPs behind)
>>> idle=1fd/140000000000000/0
>>> 2013-11-16 11:43:38  [1505491.815012]   (detected by 6, t=6002 jiffies)
>>> 2013-11-16 11:43:38  [1505491.815014] INFO: Stall ended before state dump
>>> start
>>> 2013-11-16 11:43:38  [1505492.450611] tg3 0000:01:00.0: eth0: 0x00000000:
>>> 0x165f14e4, 0x00100406, 0x02000000, 0x00800010
>>> 2013-11-16 11:43:38  [1505492.450614] tg3 0000:01:00.0: eth0: 0x00000010:
>>> 0xd57a000c, 0x00000000, 0xd57b000c, 0x00000000
>>> 2013-11-16 11:43:38  [1505492.450615] tg3 0000:01:00.0: eth0: 0x00000020:
>>> 0xd57c000c, 0x00000000, 0x00000000, 0x1f5b1028
>>> 2013-11-16 11:43:38  [1505492.450617] tg3 0000:01:00.0: eth0: 0x00000030:
>>> 0xd8800000, 0x00000048, 0x00000000, 0x0000010f
>>> 2013-11-16 11:43:38  [1505492.450619] tg3 0000:01:00.0: eth0: 0x00000040:
>>> 0x00000000, 0x3f000000, 0xc8035001, 0x64002008
>>> 2013-11-16 11:43:38  [1505492.450621] tg3 0000:01:00.0: eth0: 0x00000050:
>>> 0x818c5803, 0x78000000, 0x0086a005, 0x00000000
>>> 2013-11-16 11:43:38  [1505492.450623] tg3 0000:01:00.0: eth0: 0x00000060:
>>> 0x00000000, 0x00000000, 0xf0000298, 0x00380081
>>> 2013-11-16 11:43:38  [1505492.450624] tg3 0000:01:00.0: eth0: 0x00000070:
>>> 0x000710b0, 0xffcb28fa, 0x0001421c, 0x00000000
>>> 2013-11-16 11:43:38  [1505492.450626] tg3 0000:01:00.0: eth0: 0x00000080:
>>> 0x00000001, 0x00000002, 0x00000000, 0x000001d2
>>> 2013-11-16 11:43:38  [1505492.450628] tg3 0000:01:00.0: eth0: 0x00000090:
>>> 0x00000000, 0x00000000, 0x00000000, 0x000006a1
>>> 2013-11-16 11:43:38  [1505492.450629] tg3 0000:01:00.0: eth0: 0x000000a0:
>>> 0x8010ac11, 0x00000004, 0x00001004, 0x00020010
>>> 2013-11-16 11:43:38  [1505492.450631] tg3 0000:01:00.0: eth0: 0x000000b0:
>>> 0x10008d81, 0x0010242e, 0x0004cc22, 0x10120040
>>> 2013-11-16 11:43:38  [1505492.450633] tg3 0000:01:00.0: eth0: 0x000000d0:
>>> 0x0000001f, 0x00000006, 0x00000000, 0x00000001
>>> 2013-11-16 11:43:38  [1505492.450635] tg3 0000:01:00.0: eth0: 0x000000f0:
>>> 0x00000000, 0x05720000, 0x00000000, 0xbec733be
>>> 2013-11-16 11:43:38  [1505492.450637] tg3 0000:01:00.0: eth0: 0x00000100:
>>> 0x13c10001, 0x00000000, 0x00018000, 0x000e7030
>>> 2013-11-16 11:43:38  [1505492.450638] tg3 0000:01:00.0: eth0: 0x00000110:
>>> 0x00002000, 0x000031c0, 0x000000a0, 0x00000000
>>> 2013-11-16 11:43:38  [1505492.450640] tg3 0000:01:00.0: eth0: 0x00000130:
>>> 0x00000000, 0x00000000, 0x00000000, 0x15010003
>>> 2013-11-16 11:43:38  [1505492.450642] tg3 0000:01:00.0: eth0: 0x00000140:
>>> 0x1c3f67fa, 0x000090b1, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:38  [1505492.450643] tg3 0000:01:00.0: eth0: 0x00000150:
>>> 0x16010004, 0x00000000, 0x0007811b, 0x00000001
>>> 2013-11-16 11:43:38  [1505492.450645] tg3 0000:01:00.0: eth0: 0x00000160:
>>> 0x00010002, 0x00000000, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:38  [1505492.450647] tg3 0000:01:00.0: eth0: 0x00000170:
>>> 0x00000000, 0x800000ff, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:38  [1505492.450648] tg3 0000:01:00.0: eth0: 0x00000200:
>>> 0x00000000, 0x3f000000, 0x00000000, 0xfb000000
>>> 2013-11-16 11:43:38  [1505492.450650] tg3 0000:01:00.0: eth0: 0x00000210:
>>> 0x00000000, 0x0d000000, 0x00000000, 0xa7000000
>>> 2013-11-16 11:43:38  [1505492.450652] tg3 0000:01:00.0: eth0: 0x00000220:
>>> 0x00000000, 0x00000001, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:38  [1505492.450653] tg3 0000:01:00.0: eth0: 0x00000260:
>>> 0x00000000, 0x00000000, 0x00000000, 0x000006a1
>>> 2013-11-16 11:43:38  [1505492.450655] tg3 0000:01:00.0: eth0: 0x00000280:
>>> 0x00000000, 0x000001d2, 0x00000000, 0x00000d73
>>> 2013-11-16 11:43:38  [1505492.450657] tg3 0000:01:00.0: eth0: 0x00000290:
>>> 0x00000000, 0x000004df, 0x00000000, 0x000001b5
>>> 2013-11-16 11:43:38  [1505492.450659] tg3 0000:01:00.0: eth0: 0x00000300:
>>> 0x0000010d, 0x000001df, 0x000000bb, 0x00000035
>>> 2013-11-16 11:43:38  [1505492.450660] tg3 0000:01:00.0: eth0: 0x00000400:
>>> 0x18e04808, 0x00400000, 0x00001000, 0x00000880
>>> 2013-11-16 11:43:38  [1505492.450662] tg3 0000:01:00.0: eth0: 0x00000410:
>>> 0x000090b1, 0x1c3f67fa, 0x000090b1, 0x1c3f67fa
>>> 2013-11-16 11:43:38  [1505492.450664] tg3 0000:01:00.0: eth0: 0x00000420:
>>> 0x000090b1, 0x1c3f67fa, 0x000090b1, 0x1c3f67fa
>>> 2013-11-16 11:43:38  [1505492.450666] tg3 0000:01:00.0: eth0: 0x00000430:
>>> 0x00000400, 0x00000000, 0x000002f4, 0x000005f2
>>> 2013-11-16 11:43:38  [1505492.450667] tg3 0000:01:00.0: eth0: 0x00000440:
>>> 0x00000000, 0x00000000, 0x00000000, 0x04384400
>>> 2013-11-16 11:43:38  [1505492.450669] tg3 0000:01:00.0: eth0: 0x00000450:
>>> 0x00000001, 0x00008000, 0x00000000, 0x00000102
>>> 2013-11-16 11:43:38  [1505492.450671] tg3 0000:01:00.0: eth0: 0x00000460:
>>> 0x00000008, 0x00002620, 0x01ff0002, 0x00000000
>>> 2013-11-16 11:43:38  [1505492.450672] tg3 0000:01:00.0: eth0: 0x00000470:
>>> 0x80000200, 0x00c10000, 0x01000000, 0xc0000000
>>> 2013-11-16 11:43:38  [1505492.450674] tg3 0000:01:00.0: eth0: 0x00000480:
>>> 0x42000000, 0x7fffffff, 0x06000004, 0x7fffffff
>>> 2013-11-16 11:43:38  [1505492.450676] tg3 0000:01:00.0: eth0: 0x00000500:
>>> 0x00000008, 0x00000002, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:38  [1505492.450677] tg3 0000:01:00.0: eth0: 0x00000540:
>>> 0x0000e0db, 0x551fe086, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:38  [1505492.450679] tg3 0000:01:00.0: eth0: 0x00000590:
>>> 0x00e00000, 0x00000000, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:38  [1505492.450681] tg3 0000:01:00.0: eth0: 0x000005b0:
>>> 0x00000000, 0x00000008, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:38  [1505492.450682] tg3 0000:01:00.0: eth0: 0x000005c0:
>>> 0x52ad2878, 0x40ae6aee, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:38  [1505492.450684] tg3 0000:01:00.0: eth0: 0x00000600:
>>> 0xffffffff, 0x00f80011, 0x00000000, 0x00001f04
>>> 2013-11-16 11:43:38  [1505492.450686] tg3 0000:01:00.0: eth0: 0x00000610:
>>> 0xffffffff, 0x00000000, 0x07c00004, 0x00000000
>>> 2013-11-16 11:43:38  [1505492.450687] tg3 0000:01:00.0: eth0: 0x00000620:
>>> 0x00000040, 0x00000000, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:38  [1505492.450689] tg3 0000:01:00.0: eth0: 0x00000630:
>>> 0x01230123, 0x01230123, 0x01230123, 0x01230123
>>> 2013-11-16 11:43:38  [1505492.450691] tg3 0000:01:00.0: eth0: 0x00000640:
>>> 0x01230123, 0x01230123, 0x01230123, 0x01230123
>>> 2013-11-16 11:43:38  [1505492.450693] tg3 0000:01:00.0: eth0: 0x00000650:
>>> 0x01230123, 0x01230123, 0x01230123, 0x01230123
>>> 2013-11-16 11:43:38  [1505492.450694] tg3 0000:01:00.0: eth0: 0x00000660:
>>> 0x01230123, 0x01230123, 0x01230123, 0x01230123
>>> 2013-11-16 11:43:38  [1505492.450696] tg3 0000:01:00.0: eth0: 0x00000670:
>>> 0x5f865437, 0xe4ac62cc, 0x50103a45, 0x36621985
>>> 2013-11-16 11:43:38  [1505492.450698] tg3 0000:01:00.0: eth0: 0x00000680:
>>> 0xbf14c0e8, 0x1bc27a1e, 0x84f4b556, 0x094ea6fe
>>> 2013-11-16 11:43:38  [1505492.450699] tg3 0000:01:00.0: eth0: 0x00000690:
>>> 0x7dda01e7, 0xc04d7481, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:38  [1505492.450701] tg3 0000:01:00.0: eth0: 0x000006c0:
>>> 0x00000000, 0x00000000, 0x04000000, 0x00000000
>>> 2013-11-16 11:43:38  [1505492.450703] tg3 0000:01:00.0: eth0: 0x000006d0:
>>> 0x00000001, 0x00000000, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:38  [1505492.450705] tg3 0000:01:00.0: eth0: 0x00000800:
>>> 0x000008a6, 0xffffffff, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:38  [1505492.450706] tg3 0000:01:00.0: eth0: 0x00000810:
>>> 0x00000000, 0xffffffff, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:38  [1505492.450708] tg3 0000:01:00.0: eth0: 0x00000820:
>>> 0x00000000, 0x00000000, 0xffffffff, 0x00000000
>>> 2013-11-16 11:43:38  [1505492.450710] tg3 0000:01:00.0: eth0: 0x00000830:
>>> 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff
>>> 2013-11-16 11:43:38  [1505492.450711] tg3 0000:01:00.0: eth0: 0x00000840:
>>> 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff
>>> 2013-11-16 11:43:38  [1505492.450713] tg3 0000:01:00.0: eth0: 0x00000850:
>>> 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff
>>> 2013-11-16 11:43:38  [1505492.450715] tg3 0000:01:00.0: eth0: 0x00000860:
>>> 0xffffffff, 0xffffffff, 0xffffffff, 0x00000009
>>> 2013-11-16 11:43:38  [1505492.450716] tg3 0000:01:00.0: eth0: 0x00000880:
>>> 0x00000963, 0x019454f2, 0x00000000, 0x0000000a
>>> 2013-11-16 11:43:38  [1505492.450718] tg3 0000:01:00.0: eth0: 0x000008f0:
>>> 0x00000001, 0x00000000, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:38  [1505492.450720] tg3 0000:01:00.0: eth0: 0x00000900:
>>> 0x00006c19, 0xffffffff, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:38  [1505492.450721] tg3 0000:01:00.0: eth0: 0x00000910:
>>> 0x00000000, 0xffffffff, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:38  [1505492.450723] tg3 0000:01:00.0: eth0: 0x00000920:
>>> 0x00000000, 0x00000000, 0xffffffff, 0x00000000
>>> 2013-11-16 11:43:38  [1505492.450725] tg3 0000:01:00.0: eth0: 0x00000930:
>>> 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff
>>> 2013-11-16 11:43:38  [1505492.450726] tg3 0000:01:00.0: eth0: 0x00000940:
>>> 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff
>>> 2013-11-16 11:43:38  [1505492.450728] tg3 0000:01:00.0: eth0: 0x00000950:
>>> 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff
>>> 2013-11-16 11:43:38  [1505492.450730] tg3 0000:01:00.0: eth0: 0x00000960:
>>> 0xffffffff, 0xffffffff, 0xffffffff, 0x00000071
>>> 2013-11-16 11:43:38  [1505492.450732] tg3 0000:01:00.0: eth0: 0x00000980:
>>> 0x00005e7f, 0x00000000, 0x00000000, 0x00000097
>>> 2013-11-16 11:43:38  [1505492.450733] tg3 0000:01:00.0: eth0: 0x00000990:
>>> 0x00000003, 0x00000000, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:38  [1505492.450735] tg3 0000:01:00.0: eth0: 0x00000a00:
>>> 0xf428f606, 0x1613e7b3, 0x00000004, 0x00000000
>>> 2013-11-16 11:43:38  [1505492.450737] tg3 0000:01:00.0: eth0: 0x00000a20:
>>> 0x51b3edd8, 0x13a2f3e5, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:38  [1505492.450738] tg3 0000:01:00.0: eth0: 0x00000a40:
>>> 0x1bb17940, 0x1353913e, 0x00000002, 0x000000bb
>>> 2013-11-16 11:43:38  [1505492.450740] tg3 0000:01:00.0: eth0: 0x00000a60:
>>> 0xb79007bb, 0x13f86e55, 0x00000006, 0x00000000
>>> 2013-11-16 11:43:38  [1505492.450742] tg3 0000:01:00.0: eth0: 0x00000c00:
>>> 0x0000000a, 0x00000000, 0x00000003, 0x00000001
>>> 2013-11-16 11:43:38  [1505492.450743] tg3 0000:01:00.0: eth0: 0x00000c10:
>>> 0x00000000, 0x00000000, 0x00000000, 0x00f20000
>>> 2013-11-16 11:43:38  [1505492.450745] tg3 0000:01:00.0: eth0: 0x00000c80:
>>> 0x50438596, 0x00000000, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:38  [1505492.450747] tg3 0000:01:00.0: eth0: 0x00000ce0:
>>> 0xf2cfb402, 0x0000000b, 0x000000f2, 0x00040028
>>> 2013-11-16 11:43:38  [1505492.450748] tg3 0000:01:00.0: eth0: 0x00000cf0:
>>> 0x00000000, 0x5000005f, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:38  [1505492.450750] tg3 0000:01:00.0: eth0: 0x00001000:
>>> 0x00000002, 0x00000000, 0xa000c4c6, 0x00000000
>>> 2013-11-16 11:43:38  [1505492.450752] tg3 0000:01:00.0: eth0: 0x00001010:
>>> 0x01df1df1, 0x0000c4c6, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:38  [1505492.450754] tg3 0000:01:00.0: eth0: 0x00001400:
>>> 0x00000006, 0x00000000, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:39  [1505492.450755] tg3 0000:01:00.0: eth0: 0x00001440:
>>> 0x000001df, 0x0000010d, 0x00000035, 0x000000bb
>>> 2013-11-16 11:43:39  [1505492.450757] tg3 0000:01:00.0: eth0: 0x00001480:
>>> 0x00002211, 0x00000000, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:39  [1505492.450759] tg3 0000:01:00.0: eth0: 0x00001800:
>>> 0x00000036, 0x00000000, 0x000001df, 0x0000010d
>>> 2013-11-16 11:43:39  [1505492.450760] tg3 0000:01:00.0: eth0: 0x00001810:
>>> 0x00000035, 0x000000bb, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:39  [1505492.450762] tg3 0000:01:00.0: eth0: 0x00001830:
>>> 0x00000000, 0x00000000, 0x00000000, 0xf8354000
>>> 2013-11-16 11:43:39  [1505492.450764] tg3 0000:01:00.0: eth0: 0x00001840:
>>> 0xf82f8000, 0x00000017, 0x00000202, 0xc0000000
>>> 2013-11-16 11:43:39  [1505492.450766] tg3 0000:01:00.0: eth0: 0x00001850:
>>> 0x0000001f, 0x00000000, 0x000041e0, 0x010d01df
>>> 2013-11-16 11:43:39  [1505492.450767] tg3 0000:01:00.0: eth0: 0x00001860:
>>> 0x0100d200, 0x00000000, 0xf8355de0, 0x00000017
>>> 2013-11-16 11:43:39  [1505492.450769] tg3 0000:01:00.0: eth0: 0x00001c00:
>>> 0x00000002, 0x00000000, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:39  [1505492.450771] tg3 0000:01:00.0: eth0: 0x00002000:
>>> 0x00000002, 0x00000010, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:39  [1505492.450773] tg3 0000:01:00.0: eth0: 0x00002010:
>>> 0x00000181, 0x00000001, 0x00780003, 0x00000000
>>> 2013-11-16 11:43:39  [1505492.450775] tg3 0000:01:00.0: eth0: 0x00002100:
>>> 0x000e1710, 0x000e1710, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:39  [1505492.450776] tg3 0000:01:00.0: eth0: 0x00002110:
>>> 0x000e1710, 0x000e1710, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:39  [1505492.450778] tg3 0000:01:00.0: eth0: 0x00002120:
>>> 0x000e1710, 0x000e1710, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:39  [1505492.450780] tg3 0000:01:00.0: eth0: 0x00002130:
>>> 0x000e1710, 0x000e1710, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:39  [1505492.450781] tg3 0000:01:00.0: eth0: 0x00002140:
>>> 0x000e1710, 0x000e1710, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:39  [1505492.450783] tg3 0000:01:00.0: eth0: 0x00002150:
>>> 0x000e1710, 0x000e1710, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:39  [1505492.450784] tg3 0000:01:00.0: eth0: 0x00002160:
>>> 0x000e1710, 0x000e1710, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:39  [1505492.450786] tg3 0000:01:00.0: eth0: 0x00002170:
>>> 0x000e1710, 0x000e1710, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:39  [1505492.450788] tg3 0000:01:00.0: eth0: 0x00002180:
>>> 0x000e1710, 0x000e1710, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:39  [1505492.450789] tg3 0000:01:00.0: eth0: 0x00002190:
>>> 0x000e1710, 0x000e1710, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:39  [1505492.450791] tg3 0000:01:00.0: eth0: 0x000021a0:
>>> 0x000e1710, 0x000e1710, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:39  [1505492.450793] tg3 0000:01:00.0: eth0: 0x000021b0:
>>> 0x000e1710, 0x000e1710, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:39  [1505492.450794] tg3 0000:01:00.0: eth0: 0x000021c0:
>>> 0x000e1710, 0x000e1710, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:39  [1505492.450796] tg3 0000:01:00.0: eth0: 0x000021d0:
>>> 0x000e1710, 0x000e1710, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:39  [1505492.450798] tg3 0000:01:00.0: eth0: 0x000021e0:
>>> 0x000e1710, 0x000e1710, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:39  [1505492.450799] tg3 0000:01:00.0: eth0: 0x000021f0:
>>> 0x000e1710, 0x000e1710, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:39  [1505492.450801] tg3 0000:01:00.0: eth0: 0x00002200:
>>> 0x3d943ab4, 0x00000000, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:39  [1505492.450803] tg3 0000:01:00.0: eth0: 0x00002250:
>>> 0x00004e57, 0x00000000, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:39  [1505492.450804] tg3 0000:01:00.0: eth0: 0x00002400:
>>> 0x00010012, 0x00000000, 0x00240001, 0x00000000
>>> 2013-11-16 11:43:39  [1505492.450806] tg3 0000:01:00.0: eth0: 0x00002410:
>>> 0x0000000f, 0x00005d00, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:39  [1505492.450808] tg3 0000:01:00.0: eth0: 0x00002440:
>>> 0x00000000, 0x00000000, 0x00000002, 0x00044400
>>> 2013-11-16 11:43:39  [1505492.450809] tg3 0000:01:00.0: eth0: 0x00002450:
>>> 0x00000017, 0xf6bb0000, 0x08001800, 0x00040000
>>> 2013-11-16 11:43:39  [1505492.450811] tg3 0000:01:00.0: eth0: 0x00002470:
>>> 0x00000000, 0x00000684, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:39  [1505492.450813] tg3 0000:01:00.0: eth0: 0x00002500:
>>> 0x00000000, 0x00000000, 0x00000002, 0x00044800
>>> 2013-11-16 11:43:39  [1505492.450815] tg3 0000:01:00.0: eth0: 0x00002510:
>>> 0x00000000, 0x00000000, 0x00000002, 0x00040400
>>> 2013-11-16 11:43:39  [1505492.450816] tg3 0000:01:00.0: eth0: 0x00002520:
>>> 0x00000000, 0x00000000, 0x00000002, 0x00044c00
>>> 2013-11-16 11:43:39  [1505492.450818] tg3 0000:01:00.0: eth0: 0x00002530:
>>> 0x00000000, 0x00000000, 0x00000002, 0x00040800
>>> 2013-11-16 11:43:39  [1505492.450819] tg3 0000:01:00.0: eth0: 0x00002540:
>>> 0x00000000, 0x00000000, 0x00000002, 0x00045000
>>> 2013-11-16 11:43:39  [1505492.450821] tg3 0000:01:00.0: eth0: 0x00002550:
>>> 0x00000000, 0x00000000, 0x00000002, 0x00040c00
>>> 2013-11-16 11:43:39  [1505492.450823] tg3 0000:01:00.0: eth0: 0x00002560:
>>> 0x00000000, 0x00000000, 0x00000002, 0x00045400
>>> 2013-11-16 11:43:39  [1505492.450824] tg3 0000:01:00.0: eth0: 0x00002570:
>>> 0x00000000, 0x00000000, 0x00000002, 0x00041000
>>> 2013-11-16 11:43:39  [1505492.450826] tg3 0000:01:00.0: eth0: 0x00002580:
>>> 0x00000000, 0x00000000, 0x00000002, 0x00045800
>>> 2013-11-16 11:43:39  [1505492.450828] tg3 0000:01:00.0: eth0: 0x00002590:
>>> 0x00000000, 0x00000000, 0x00000002, 0x00041400
>>> 2013-11-16 11:43:39  [1505492.450829] tg3 0000:01:00.0: eth0: 0x000025a0:
>>> 0x00000000, 0x00000000, 0x00000002, 0x00045c00
>>> 2013-11-16 11:43:39  [1505492.450831] tg3 0000:01:00.0: eth0: 0x000025b0:
>>> 0x00000000, 0x00000000, 0x00000002, 0x00041800
>>> 2013-11-16 11:43:39  [1505492.450833] tg3 0000:01:00.0: eth0: 0x000025c0:
>>> 0x00000000, 0x00000000, 0x00000002, 0x00046000
>>> 2013-11-16 11:43:39  [1505492.450834] tg3 0000:01:00.0: eth0: 0x000025d0:
>>> 0x00000000, 0x00000000, 0x00000002, 0x00041c00
>>> 2013-11-16 11:43:39  [1505492.450836] tg3 0000:01:00.0: eth0: 0x000025e0:
>>> 0x00000000, 0x00000000, 0x00000002, 0x00046400
>>> 2013-11-16 11:43:39  [1505492.450838] tg3 0000:01:00.0: eth0: 0x000025f0:
>>> 0x00000000, 0x00000000, 0x00000002, 0x00042000
>>> 2013-11-16 11:43:39  [1505492.450839] tg3 0000:01:00.0: eth0: 0x00002600:
>>> 0x00000000, 0x00000000, 0x00000002, 0x00046800
>>> 2013-11-16 11:43:39  [1505492.450841] tg3 0000:01:00.0: eth0: 0x00002610:
>>> 0x00000000, 0x00000000, 0x00000002, 0x00042400
>>> 2013-11-16 11:43:39  [1505492.450843] tg3 0000:01:00.0: eth0: 0x00002620:
>>> 0x00000000, 0x00000000, 0x00000002, 0x00046c00
>>> 2013-11-16 11:43:39  [1505492.450844] tg3 0000:01:00.0: eth0: 0x00002630:
>>> 0x00000000, 0x00000000, 0x00000002, 0x00042800
>>> 2013-11-16 11:43:39  [1505492.450846] tg3 0000:01:00.0: eth0: 0x00002640:
>>> 0x00000000, 0x00000000, 0x00000002, 0x00047000
>>> 2013-11-16 11:43:39  [1505492.450848] tg3 0000:01:00.0: eth0: 0x00002650:
>>> 0x00000000, 0x00000000, 0x00000002, 0x00042c00
>>> 2013-11-16 11:43:39  [1505492.450849] tg3 0000:01:00.0: eth0: 0x00002660:
>>> 0x00000000, 0x00000000, 0x00000002, 0x00047400
>>> 2013-11-16 11:43:39  [1505492.450851] tg3 0000:01:00.0: eth0: 0x00002670:
>>> 0x00000000, 0x00000000, 0x00000002, 0x00043000
>>> 2013-11-16 11:43:39  [1505492.450852] tg3 0000:01:00.0: eth0: 0x00002680:
>>> 0x00000000, 0x00000000, 0x00000002, 0x00047800
>>> 2013-11-16 11:43:39  [1505492.450854] tg3 0000:01:00.0: eth0: 0x00002690:
>>> 0x00000000, 0x00000000, 0x00000002, 0x00043400
>>> 2013-11-16 11:43:39  [1505492.450856] tg3 0000:01:00.0: eth0: 0x000026a0:
>>> 0x00000000, 0x00000000, 0x00000002, 0x00047c00
>>> 2013-11-16 11:43:39  [1505492.450857] tg3 0000:01:00.0: eth0: 0x000026b0:
>>> 0x00000000, 0x00000000, 0x00000002, 0x00043800
>>> 2013-11-16 11:43:39  [1505492.450859] tg3 0000:01:00.0: eth0: 0x000026c0:
>>> 0x00000000, 0x00000000, 0x00000002, 0x00048000
>>> 2013-11-16 11:43:39  [1505492.450861] tg3 0000:01:00.0: eth0: 0x000026d0:
>>> 0x00000000, 0x00000000, 0x00000002, 0x00043c00
>>> 2013-11-16 11:43:39  [1505492.450862] tg3 0000:01:00.0: eth0: 0x000026e0:
>>> 0x00000000, 0x00000000, 0x00000002, 0x00048400
>>> 2013-11-16 11:43:39  [1505492.450864] tg3 0000:01:00.0: eth0: 0x000026f0:
>>> 0x00000000, 0x00000000, 0x00000002, 0x00044000
>>> 2013-11-16 11:43:39  [1505492.450866] tg3 0000:01:00.0: eth0: 0x00002800:
>>> 0x00000006, 0x00000000, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:39  [1505492.450868] tg3 0000:01:00.0: eth0: 0x00002c00:
>>> 0x00000006, 0x00000000, 0x00000000, 0x00000699
>>> 2013-11-16 11:43:39  [1505492.450869] tg3 0000:01:00.0: eth0: 0x00002c10:
>>> 0x00000000, 0x00000000, 0x00000019, 0x0000000c
>>> 2013-11-16 11:43:39  [1505492.450871] tg3 0000:01:00.0: eth0: 0x00002c20:
>>> 0x00000002, 0x00000000, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:39  [1505492.450873] tg3 0000:01:00.0: eth0: 0x00002d00:
>>> 0x00000080, 0x00000040, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:39  [1505492.450874] tg3 0000:01:00.0: eth0: 0x00003000:
>>> 0x00000006, 0x00000000, 0x00000000, 0x00000699
>>> 2013-11-16 11:43:39  [1505492.450876] tg3 0000:01:00.0: eth0: 0x00003400:
>>> 0x00000004, 0x00000000, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:39  [1505492.450878] tg3 0000:01:00.0: eth0: 0x00003600:
>>> 0x00004600, 0x00170000, 0x00110000, 0x00000000
>>> 2013-11-16 11:43:39  [1505492.450880] tg3 0000:01:00.0: eth0: 0x00003610:
>>> 0x00170000, 0x00000000, 0x00130000, 0x00000000
>>> 2013-11-16 11:43:39  [1505492.450881] tg3 0000:01:00.0: eth0: 0x00003620:
>>> 0x00110011, 0x00000000, 0x00000000, 0x00032080
>>> 2013-11-16 11:43:39  [1505492.450883] tg3 0000:01:00.0: eth0: 0x00003630:
>>> 0x00800000, 0x87748774, 0x02c01000, 0x00000000
>>> 2013-11-16 11:43:39  [1505492.450885] tg3 0000:01:00.0: eth0: 0x00003640:
>>> 0x00000000, 0x00000000, 0x00000020, 0x00000019
>>> 2013-11-16 11:43:39  [1505492.450886] tg3 0000:01:00.0: eth0: 0x00003650:
>>> 0x00000171, 0x000f03ff, 0x05720000, 0x00000000
>>> 2013-11-16 11:43:39  [1505492.450888] tg3 0000:01:00.0: eth0: 0x00003660:
>>> 0x00000000, 0x00000000, 0x02000000, 0x00000202
>>> 2013-11-16 11:43:39  [1505492.450890] tg3 0000:01:00.0: eth0: 0x00003670:
>>> 0x00000000, 0xfeffffe3, 0x00000000, 0x00000020
>>> 2013-11-16 11:43:39  [1505492.450891] tg3 0000:01:00.0: eth0: 0x00003680:
>>> 0x30018010, 0x00000000, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:39  [1505492.450893] tg3 0000:01:00.0: eth0: 0x000036a0:
>>> 0x000001a0, 0x00000000, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:39  [1505492.450895] tg3 0000:01:00.0: eth0: 0x000036b0:
>>> 0x0010034c, 0x07ff07ff, 0x07ff07ff, 0x01000004
>>> 2013-11-16 11:43:39  [1505492.450896] tg3 0000:01:00.0: eth0: 0x000036c0:
>>> 0xffffffff, 0x00000000, 0x00000000, 0x8c58c9dc
>>> 2013-11-16 11:43:39  [1505492.450898] tg3 0000:01:00.0: eth0: 0x000036d0:
>>> 0x0000019d, 0x00000000, 0x00000000, 0x000048ef
>>> 2013-11-16 11:43:39  [1505492.450900] tg3 0000:01:00.0: eth0: 0x000036f0:
>>> 0x00000000, 0x00000000, 0x00000000, 0x00010801
>>> 2013-11-16 11:43:39  [1505492.450902] tg3 0000:01:00.0: eth0: 0x00003800:
>>> 0x00000001, 0x00000000, 0x0000000e, 0x0516028b
>>> 2013-11-16 11:43:39  [1505492.450903] tg3 0000:01:00.0: eth0: 0x00003810:
>>> 0x0000002f, 0x000000ba, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:39  [1505492.450905] tg3 0000:01:00.0: eth0: 0x00003c00:
>>> 0x00000306, 0x00000000, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:39  [1505492.450907] tg3 0000:01:00.0: eth0: 0x00003c30:
>>> 0x00000000, 0x00000000, 0x00000017, 0xfa561000
>>> 2013-11-16 11:43:39  [1505492.450908] tg3 0000:01:00.0: eth0: 0x00003c40:
>>> 0x00000000, 0x00000b00, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:39  [1505492.450910] tg3 0000:01:00.0: eth0: 0x00003c50:
>>> 0x00000000, 0x00000699, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:39  [1505492.450912] tg3 0000:01:00.0: eth0: 0x00003c80:
>>> 0x000001d6, 0x00000d76, 0x000004e6, 0x00000267
>>> 2013-11-16 11:43:39  [1505492.450913] tg3 0000:01:00.0: eth0: 0x00003cc0:
>>> 0x000001ea, 0x00000000, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:39  [1505492.450915] tg3 0000:01:00.0: eth0: 0x00003cd0:
>>> 0x00000000, 0x0000000f, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:39  [1505492.450917] tg3 0000:01:00.0: eth0: 0x00003d00:
>>> 0x00000017, 0xf7fe1000, 0x00000017, 0xf73b8000
>>> 2013-11-16 11:43:39  [1505492.450918] tg3 0000:01:00.0: eth0: 0x00003d10:
>>> 0x00000017, 0xf7079000, 0x00000017, 0xf900c000
>>> 2013-11-16 11:43:39  [1505492.450920] tg3 0000:01:00.0: eth0: 0x00003d80:
>>> 0x00000014, 0x00000048, 0x00000005, 0x00000035
>>> 2013-11-16 11:43:39  [1505492.450922] tg3 0000:01:00.0: eth0: 0x00003d90:
>>> 0x00000005, 0x00000005, 0x00000014, 0x00000048
>>> 2013-11-16 11:43:39  [1505492.450924] tg3 0000:01:00.0: eth0: 0x00003da0:
>>> 0x00000005, 0x00000035, 0x00000005, 0x00000005
>>> 2013-11-16 11:43:40  [1505492.450925] tg3 0000:01:00.0: eth0: 0x00003db0:
>>> 0x00000014, 0x00000048, 0x00000005, 0x00000035
>>> 2013-11-16 11:43:40  [1505492.450927] tg3 0000:01:00.0: eth0: 0x00003dc0:
>>> 0x00000005, 0x00000005, 0x00000014, 0x00000048
>>> 2013-11-16 11:43:40  [1505492.450929] tg3 0000:01:00.0: eth0: 0x00003dd0:
>>> 0x00000005, 0x00000035, 0x00000005, 0x00000005
>>> 2013-11-16 11:43:40  [1505492.450930] tg3 0000:01:00.0: eth0: 0x00003f00:
>>> 0x00000000, 0x0000010d, 0x00000035, 0x000000bb
>>> 2013-11-16 11:43:40  [1505492.450932] tg3 0000:01:00.0: eth0: 0x00003fc0:
>>> 0x001e87b9, 0x00000000, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:40  [1505492.450934] tg3 0000:01:00.0: eth0: 0x00004000:
>>> 0x00000002, 0x00000000, 0x0012140b, 0x00143a42
>>> 2013-11-16 11:43:40  [1505492.450936] tg3 0000:01:00.0: eth0: 0x00004010:
>>> 0x00000000, 0x00201012, 0x00000490, 0x02005422
>>> 2013-11-16 11:43:40  [1505492.450937] tg3 0000:01:00.0: eth0: 0x00004020:
>>> 0x00000000, 0x00000000, 0x00000010, 0x00000000
>>> 2013-11-16 11:43:40  [1505492.450939] tg3 0000:01:00.0: eth0: 0x00004030:
>>> 0x00000010, 0x00806510, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:40  [1505492.450940] tg3 0000:01:00.0: eth0: 0x00004040:
>>> 0x00000000, 0x00000000, 0x01085220, 0x00000000
>>> 2013-11-16 11:43:40  [1505492.450942] tg3 0000:01:00.0: eth0: 0x00004050:
>>> 0x00000000, 0x00000000, 0x0033a010, 0x004d7002
>>> 2013-11-16 11:43:40  [1505492.450944] tg3 0000:01:00.0: eth0: 0x00004060:
>>> 0x004e3000, 0x00000000, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:40  [1505492.450946] tg3 0000:01:00.0: eth0: 0x00004400:
>>> 0x00000016, 0x00000000, 0x00010000, 0x0000a000
>>> 2013-11-16 11:43:40  [1505492.450947] tg3 0000:01:00.0: eth0: 0x00004410:
>>> 0x00000000, 0x0000002a, 0x000000a0, 0x00000000
>>> 2013-11-16 11:43:40  [1505492.450949] tg3 0000:01:00.0: eth0: 0x00004420:
>>> 0x0000003d, 0x00000000, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:40  [1505492.450951] tg3 0000:01:00.0: eth0: 0x00004440:
>>> 0x00000000, 0x00000000, 0x00000000, 0x00000804
>>> 2013-11-16 11:43:40  [1505492.450952] tg3 0000:01:00.0: eth0: 0x00004450:
>>> 0x00100538, 0x013b0003, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:40  [1505492.450954] tg3 0000:01:00.0: eth0: 0x00004800:
>>> 0x380303fe, 0x00000000, 0x00000000, 0x00000120
>>> 2013-11-16 11:43:40  [1505492.450956] tg3 0000:01:00.0: eth0: 0x00004810:
>>> 0x00000000, 0x0000000a, 0x00689c74, 0x00001514
>>> 2013-11-16 11:43:40  [1505492.450958] tg3 0000:01:00.0: eth0: 0x00004820:
>>> 0x000000e3, 0x00000000, 0xf0330000, 0x22ee9ae8
>>> 2013-11-16 11:43:40  [1505492.450959] tg3 0000:01:00.0: eth0: 0x00004830:
>>> 0x00000000, 0x000002b4, 0x000002b4, 0x00000000
>>> 2013-11-16 11:43:40  [1505492.450961] tg3 0000:01:00.0: eth0: 0x00004840:
>>> 0x00e18278, 0x00e18278, 0x000e2200, 0xe3426024
>>> 2013-11-16 11:43:40  [1505492.450963] tg3 0000:01:00.0: eth0: 0x00004850:
>>> 0x21cb6453, 0x702305ea, 0xd7d6d7d6, 0x00000000
>>> 2013-11-16 11:43:40  [1505492.450964] tg3 0000:01:00.0: eth0: 0x00004860:
>>> 0x000000e3, 0x11283020, 0x00100800, 0xf3000008
>>> 2013-11-16 11:43:40  [1505492.450966] tg3 0000:01:00.0: eth0: 0x00004870:
>>> 0x05ea0080, 0x003e1820, 0x003e1820, 0x00000000
>>> 2013-11-16 11:43:40  [1505492.450968] tg3 0000:01:00.0: eth0: 0x00004880:
>>> 0x0000e0db, 0x551fe086, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:40  [1505492.450970] tg3 0000:01:00.0: eth0: 0x00004900:
>>> 0x28190404, 0x00305407, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:40  [1505492.450971] tg3 0000:01:00.0: eth0: 0x00004910:
>>> 0x000f001c, 0x00000000, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:40  [1505492.450973] tg3 0000:01:00.0: eth0: 0x00004a00:
>>> 0x180303fe, 0x00100000, 0x00100010, 0x963b0000
>>> 2013-11-16 11:43:40  [1505492.450975] tg3 0000:01:00.0: eth0: 0x00004a10:
>>> 0xf8355e60, 0x008ca924, 0x00100012, 0x00000000
>>> 2013-11-16 11:43:40  [1505492.450976] tg3 0000:01:00.0: eth0: 0x00004a20:
>>> 0x00000000, 0x00000010, 0xf02c0000, 0xf8355ea0
>>> 2013-11-16 11:43:40  [1505492.450978] tg3 0000:01:00.0: eth0: 0x00004a30:
>>> 0x00000000, 0x00000032, 0x00000032, 0x00000000
>>> 2013-11-16 11:43:40  [1505492.450980] tg3 0000:01:00.0: eth0: 0x00004a40:
>>> 0xf8355e50, 0xf8355e60, 0xf8355e70, 0xf8355e40
>>> 2013-11-16 11:43:40  [1505492.450981] tg3 0000:01:00.0: eth0: 0x00004a50:
>>> 0x00100010, 0x00100010, 0x00100010, 0x00100010
>>> 2013-11-16 11:43:40  [1505492.450983] tg3 0000:01:00.0: eth0: 0x00004a70:
>>> 0x28190404, 0x00305407, 0x000f001c, 0x00000000
>>> 2013-11-16 11:43:40  [1505492.450985] tg3 0000:01:00.0: eth0: 0x00004b00:
>>> 0x180303fe, 0x00f30003, 0x30000000, 0x00f30120
>>> 2013-11-16 11:43:40  [1505492.450987] tg3 0000:01:00.0: eth0: 0x00004b10:
>>> 0x00f20040, 0x00f00003, 0x00f3dc78, 0x00000010
>>> 2013-11-16 11:43:40  [1505492.450988] tg3 0000:01:00.0: eth0: 0x00004b20:
>>> 0x00000003, 0x02000000, 0xd6aa1001, 0x0ff300f8
>>> 2013-11-16 11:43:40  [1505492.450990] tg3 0000:01:00.0: eth0: 0x00004b30:
>>> 0xd6aa1401, 0x0ff300f8, 0xd6aa0801, 0x0ff200f8
>>> 2013-11-16 11:43:40  [1505492.450992] tg3 0000:01:00.0: eth0: 0x00004b40:
>>> 0xd6aa0c01, 0x0ff000f8, 0x0101d7d7, 0x60603535
>>> 2013-11-16 11:43:40  [1505492.450994] tg3 0000:01:00.0: eth0: 0x00004b50:
>>> 0xf0330000, 0xd6aa10f8, 0xaf100000, 0x03000002
>>> 2013-11-16 11:43:40  [1505492.450996] tg3 0000:01:00.0: eth0: 0x00004b60:
>>> 0xf0330000, 0xd6aa14f8, 0xaf100000, 0x400001ea
>>> 2013-11-16 11:43:40  [1505492.450997] tg3 0000:01:00.0: eth0: 0x00004b70:
>>> 0xf0330000, 0xd6aa08f8, 0xaf100000, 0x000000ff
>>> 2013-11-16 11:43:40  [1505492.450999] tg3 0000:01:00.0: eth0: 0x00004b80:
>>> 0x00000003, 0x11283020, 0x00100800, 0xf3000008
>>> 2013-11-16 11:43:40  [1505492.451001] tg3 0000:01:00.0: eth0: 0x00004b90:
>>> 0x05ea0080, 0x28190404, 0x00305407, 0x000f001c
>>> 2013-11-16 11:43:40  [1505492.451003] tg3 0000:01:00.0: eth0: 0x00004ba0:
>>> 0x00f00092, 0x00000003, 0x11283020, 0x000f001c
>>> 2013-11-16 11:43:40  [1505492.451004] tg3 0000:01:00.0: eth0: 0x00004bb0:
>>> 0xd6aa0001, 0xd6aa0401, 0xf2cfd001, 0xf2cfb401
>>> 2013-11-16 11:43:40  [1505492.451006] tg3 0000:01:00.0: eth0: 0x00004bc0:
>>> 0xd6aa1002, 0xd6aa1402, 0xd6aa0802, 0xd6aa0c02
>>> 2013-11-16 11:43:40  [1505492.451008] tg3 0000:01:00.0: eth0: 0x00004bd0:
>>> 0xd6aa0002, 0xd6aa0402, 0xf2cfd002, 0xf2cfb402
>>> 2013-11-16 11:43:40  [1505492.451009] tg3 0000:01:00.0: eth0: 0x00004be0:
>>> 0x00f300f3, 0x00f000f2, 0x00f300f2, 0x00f000f1
>>> 2013-11-16 11:43:40  [1505492.451011] tg3 0000:01:00.0: eth0: 0x00004bf0:
>>> 0xf0330000, 0xd6aa0cf8, 0xaf0f0000, 0x0000ffff
>>> 2013-11-16 11:43:40  [1505492.451013] tg3 0000:01:00.0: eth0: 0x00004c00:
>>> 0x200003fe, 0x00000000, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:40  [1505492.451014] tg3 0000:01:00.0: eth0: 0x00004c10:
>>> 0x0000003f, 0x00000000, 0x00000006, 0x00000000
>>> 2013-11-16 11:43:40  [1505492.451016] tg3 0000:01:00.0: eth0: 0x00004c20:
>>> 0x00000000, 0x00000000, 0x00000000, 0x00000006
>>> 2013-11-16 11:43:40  [1505492.451018] tg3 0000:01:00.0: eth0: 0x00004c30:
>>> 0x00000000, 0x035d8000, 0x00108000, 0x00000000
>>> 2013-11-16 11:43:40  [1505492.451020] tg3 0000:01:00.0: eth0: 0x00004c40:
>>> 0x00000020, 0x00000000, 0x001d0020, 0x00140020
>>> 2013-11-16 11:43:40  [1505492.451021] tg3 0000:01:00.0: eth0: 0x00004c50:
>>> 0xe5d751d5, 0x001d5266, 0x674e6d76, 0x63193f3f
>>> 2013-11-16 11:43:40  [1505492.451023] tg3 0000:01:00.0: eth0: 0x00004c60:
>>> 0x00000020, 0x00000000, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:40  [1505492.451025] tg3 0000:01:00.0: eth0: 0x00005000:
>>> 0x00009800, 0x80004000, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:40  [1505492.451026] tg3 0000:01:00.0: eth0: 0x00005010:
>>> 0x00000000, 0x00000000, 0x00000000, 0x08001fc0
>>> 2013-11-16 11:43:40  [1505492.451028] tg3 0000:01:00.0: eth0: 0x00005020:
>>> 0x00021f02, 0x00000000, 0x00000000, 0x40000020
>>> 2013-11-16 11:43:40  [1505492.451030] tg3 0000:01:00.0: eth0: 0x00005030:
>>> 0x00000000, 0x0000001d, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:40  [1505492.451031] tg3 0000:01:00.0: eth0: 0x00005040:
>>> 0x00000000, 0x00000000, 0x080019d2, 0x00000000
>>> 2013-11-16 11:43:40  [1505492.451033] tg3 0000:01:00.0: eth0: 0x00005080:
>>> 0x00009800, 0x80004000, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:40  [1505492.451035] tg3 0000:01:00.0: eth0: 0x00005090:
>>> 0x00000000, 0x00000000, 0x00000000, 0x0800185c
>>> 2013-11-16 11:43:40  [1505492.451036] tg3 0000:01:00.0: eth0: 0x000050a0:
>>> 0xafa40014, 0x00000000, 0x00000000, 0x40000020
>>> 2013-11-16 11:43:40  [1505492.451038] tg3 0000:01:00.0: eth0: 0x000050b0:
>>> 0x00000000, 0x0000001d, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:40  [1505492.451040] tg3 0000:01:00.0: eth0: 0x000050c0:
>>> 0x00000000, 0x00000000, 0x08000088, 0x00000000
>>> 2013-11-16 11:43:40  [1505492.451042] tg3 0000:01:00.0: eth0: 0x00005100:
>>> 0x00009800, 0x80000000, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:40  [1505492.451043] tg3 0000:01:00.0: eth0: 0x00005110:
>>> 0x00000000, 0x00000000, 0x00000000, 0x08002ca0
>>> 2013-11-16 11:43:40  [1505492.451045] tg3 0000:01:00.0: eth0: 0x00005120:
>>> 0x30420001, 0x00000000, 0x00000000, 0x40000020
>>> 2013-11-16 11:43:40  [1505492.451047] tg3 0000:01:00.0: eth0: 0x00005130:
>>> 0x00000000, 0x0000001d, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:40  [1505492.451048] tg3 0000:01:00.0: eth0: 0x00005140:
>>> 0x00000000, 0x00000000, 0x0800203c, 0x00000000
>>> 2013-11-16 11:43:40  [1505492.451050] tg3 0000:01:00.0: eth0: 0x00005180:
>>> 0x00009800, 0x80004000, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:40  [1505492.451052] tg3 0000:01:00.0: eth0: 0x00005190:
>>> 0x00000000, 0x00000000, 0x00000000, 0x08001fac
>>> 2013-11-16 11:43:40  [1505492.451053] tg3 0000:01:00.0: eth0: 0x000051a0:
>>> 0x2404000f, 0x00000000, 0x00000000, 0x40000020
>>> 2013-11-16 11:43:40  [1505492.451055] tg3 0000:01:00.0: eth0: 0x000051b0:
>>> 0x00000000, 0x0000001d, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:40  [1505492.451057] tg3 0000:01:00.0: eth0: 0x000051c0:
>>> 0x00000000, 0x00000000, 0x080019d2, 0x00000000
>>> 2013-11-16 11:43:40  [1505492.451058] tg3 0000:01:00.0: eth0: 0x00005200:
>>> 0x00000000, 0x0b9604fa, 0x06000000, 0x00000000
>>> 2013-11-16 11:43:40  [1505492.451060] tg3 0000:01:00.0: eth0: 0x00005210:
>>> 0xc0000000, 0xc0000000, 0x00000000, 0x0b9604fa
>>> 2013-11-16 11:43:40  [1505492.451062] tg3 0000:01:00.0: eth0: 0x00005220:
>>> 0x06000000, 0x00000000, 0x00000000, 0xc0000000
>>> 2013-11-16 11:43:40  [1505492.451064] tg3 0000:01:00.0: eth0: 0x00005230:
>>> 0x00000000, 0x0b9604fa, 0x06000000, 0x00000000
>>> 2013-11-16 11:43:40  [1505492.451066] tg3 0000:01:00.0: eth0: 0x00005240:
>>> 0x00000000, 0x00000000, 0x00000000, 0x0b9604fa
>>> 2013-11-16 11:43:40  [1505492.451067] tg3 0000:01:00.0: eth0: 0x00005250:
>>> 0x06000000, 0x00000000, 0xc0000000, 0x00000000
>>> 2013-11-16 11:43:40  [1505492.451069] tg3 0000:01:00.0: eth0: 0x00005260:
>>> 0x00000000, 0x0b9604fa, 0x06000000, 0x00000000
>>> 2013-11-16 11:43:40  [1505492.451071] tg3 0000:01:00.0: eth0: 0x00005270:
>>> 0xc0000000, 0xc0000000, 0x00000000, 0x0b9604fa
>>> 2013-11-16 11:43:40  [1505492.451073] tg3 0000:01:00.0: eth0: 0x00005280:
>>> 0x00009800, 0x80000000, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:40  [1505492.451074] tg3 0000:01:00.0: eth0: 0x00005290:
>>> 0x00000000, 0x00000000, 0x00000000, 0x08002ca0
>>> 2013-11-16 11:43:40  [1505492.451076] tg3 0000:01:00.0: eth0: 0x000052a0:
>>> 0x30420001, 0x00000000, 0x00000000, 0x40000020
>>> 2013-11-16 11:43:40  [1505492.451078] tg3 0000:01:00.0: eth0: 0x000052b0:
>>> 0x00000000, 0x0000001d, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:40  [1505492.451079] tg3 0000:01:00.0: eth0: 0x000052c0:
>>> 0x00000000, 0x00000000, 0x0800203c, 0x00000000
>>> 2013-11-16 11:43:40  [1505492.451081] tg3 0000:01:00.0: eth0: 0x00005300:
>>> 0x00009800, 0x80004000, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:40  [1505492.451083] tg3 0000:01:00.0: eth0: 0x00005310:
>>> 0x00000000, 0x00000000, 0x00000000, 0x08001fac
>>> 2013-11-16 11:43:40  [1505492.451084] tg3 0000:01:00.0: eth0: 0x00005320:
>>> 0x2404000f, 0x00000000, 0x00000000, 0x40000020
>>> 2013-11-16 11:43:40  [1505492.451086] tg3 0000:01:00.0: eth0: 0x00005330:
>>> 0x00000000, 0x0000001d, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:40  [1505492.451088] tg3 0000:01:00.0: eth0: 0x00005340:
>>> 0x00000000, 0x00000000, 0x080019d2, 0x00000000
>>> 2013-11-16 11:43:40  [1505492.451089] tg3 0000:01:00.0: eth0: 0x00005380:
>>> 0x00009800, 0x80004000, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:40  [1505492.451091] tg3 0000:01:00.0: eth0: 0x00005390:
>>> 0x00000000, 0x00000000, 0x00000000, 0x0800185c
>>> 2013-11-16 11:43:40  [1505492.451093] tg3 0000:01:00.0: eth0: 0x000053a0:
>>> 0xafa40014, 0x00000000, 0x00000000, 0x40000020
>>> 2013-11-16 11:43:40  [1505492.451094] tg3 0000:01:00.0: eth0: 0x000053b0:
>>> 0x00000000, 0x0000001d, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:40  [1505492.451096] tg3 0000:01:00.0: eth0: 0x000053c0:
>>> 0x00000000, 0x00000000, 0x08000088, 0x00000000
>>> 2013-11-16 11:43:41  [1505492.451098] tg3 0000:01:00.0: eth0: 0x00005800:
>>> 0x3f000000, 0x3f000000, 0x00000001, 0x00000000
>>> 2013-11-16 11:43:41  [1505492.451099] tg3 0000:01:00.0: eth0: 0x00005810:
>>> 0x10000000, 0x00000000, 0xae000000, 0x00000000
>>> 2013-11-16 11:43:41  [1505492.451101] tg3 0000:01:00.0: eth0: 0x00005820:
>>> 0x00000001, 0x00000000, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:41  [1505492.451103] tg3 0000:01:00.0: eth0: 0x00005860:
>>> 0x00000000, 0x00000000, 0x000006a1, 0x000006a1
>>> 2013-11-16 11:43:41  [1505492.451104] tg3 0000:01:00.0: eth0: 0x00005880:
>>> 0x000001d2, 0x000001d2, 0x00000d76, 0x00000d76
>>> 2013-11-16 11:43:41  [1505492.451106] tg3 0000:01:00.0: eth0: 0x00005890:
>>> 0x000004e6, 0x000004e6, 0x000001b5, 0x000001b5
>>> 2013-11-16 11:43:41  [1505492.451108] tg3 0000:01:00.0: eth0: 0x00005900:
>>> 0x000001ea, 0x000001ea, 0x0000010d, 0x00000035
>>> 2013-11-16 11:43:41  [1505492.451110] tg3 0000:01:00.0: eth0: 0x00005910:
>>> 0x000000bb, 0x00000000, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:41  [1505492.451111] tg3 0000:01:00.0: eth0: 0x00005980:
>>> 0x000001ea, 0x0000010d, 0x00000035, 0x000000bb
>>> 2013-11-16 11:43:41  [1505492.451113] tg3 0000:01:00.0: eth0: 0x00005a00:
>>> 0x000f601f, 0x00000000, 0x00010000, 0x00000000
>>> 2013-11-16 11:43:41  [1505492.451115] tg3 0000:01:00.0: eth0: 0x00006000:
>>> 0x00010082, 0x00000000, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:41  [1505492.451117] tg3 0000:01:00.0: eth0: 0x00006400:
>>> 0x00000000, 0x00000000, 0x00010891, 0xc0000000
>>> 2013-11-16 11:43:41  [1505492.451118] tg3 0000:01:00.0: eth0: 0x00006410:
>>> 0x0a000064, 0x0a000064, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:41  [1505492.451120] tg3 0000:01:00.0: eth0: 0x00006420:
>>> 0x00000000, 0x00000000, 0x00000000, 0x818c0000
>>> 2013-11-16 11:43:41  [1505492.451122] tg3 0000:01:00.0: eth0: 0x00006430:
>>> 0x78000000, 0x14e4165f, 0x1f5b1028, 0x00020000
>>> 2013-11-16 11:43:41  [1505492.451123] tg3 0000:01:00.0: eth0: 0x00006440:
>>> 0x0000304f, 0x000002e4, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:41  [1505492.451125] tg3 0000:01:00.0: eth0: 0x000064c0:
>>> 0x00000010, 0x00000004, 0x00001004, 0x00000000
>>> 2013-11-16 11:43:41  [1505492.451127] tg3 0000:01:00.0: eth0: 0x000064d0:
>>> 0x00000000, 0x10008d81, 0x00000000, 0x00315e22
>>> 2013-11-16 11:43:41  [1505492.451129] tg3 0000:01:00.0: eth0: 0x000064e0:
>>> 0x00000031, 0x0000001f, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:41  [1505492.451130] tg3 0000:01:00.0: eth0: 0x000064f0:
>>> 0x00000002, 0x00000031, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:41  [1505492.451132] tg3 0000:01:00.0: eth0: 0x00006500:
>>> 0x01e10003, 0x1c3f67fa, 0x000090b1, 0x00000003
>>> 2013-11-16 11:43:41  [1505492.451134] tg3 0000:01:00.0: eth0: 0x00006510:
>>> 0x0007811b, 0x00058116, 0x00046113, 0x00000000
>>> 2013-11-16 11:43:41  [1505492.451136] tg3 0000:01:00.0: eth0: 0x00006550:
>>> 0x00000001, 0x02800000, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:41  [1505492.451138] tg3 0000:01:00.0: eth0: 0x000065f0:
>>> 0x00000000, 0x00000109, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:41  [1505492.451139] tg3 0000:01:00.0: eth0: 0x00006800:
>>> 0x14130034, 0x20099082, 0x01029208, 0xfade98a5
>>> 2013-11-16 11:43:41  [1505492.451141] tg3 0000:01:00.0: eth0: 0x00006810:
>>> 0x21020000, 0xffffffff, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:41  [1505492.451143] tg3 0000:01:00.0: eth0: 0x00006830:
>>> 0xffffffff, 0xffffffff, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:41  [1505492.451144] tg3 0000:01:00.0: eth0: 0x00006840:
>>> 0x00000000, 0x00000001, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:41  [1505492.451146] tg3 0000:01:00.0: eth0: 0x00006890:
>>> 0x00000000, 0x88003800, 0x00000000, 0x04102040
>>> 2013-11-16 11:43:41  [1505492.451148] tg3 0000:01:00.0: eth0: 0x000068a0:
>>> 0x00000020, 0x00000001, 0x03ff03ff, 0x00000000
>>> 2013-11-16 11:43:41  [1505492.451149] tg3 0000:01:00.0: eth0: 0x000068b0:
>>> 0xe0011514, 0x00000000, 0x00000000, 0x00000000
>>> 2013-11-16 11:43:41  [1505492.451151] tg3 0000:01:00.0: eth0: 0x000068e0:
>>> 0x00000000, 0x00000000, 0x00000000, 0x00050b08
>>> 2013-11-16 11:43:41  [1505492.451153] tg3 0000:01:00.0: eth0: 0x000068f0:
>>> 0x00ff000e, 0x00ff0000, 0x00000000, 0x04444444
>>> 2013-11-16 11:43:41  [1505492.451154] tg3 0000:01:00.0: eth0: 0x00006920:
>>> 0x00000000, 0x00000000, 0x00000001, 0x00000000
>>> 2013-11-16 11:43:41  [1505492.451156] tg3 0000:01:00.0: eth0: 0x00007000:
>>> 0x00000008, 0x00000000, 0x00000000, 0x00004868
>>> 2013-11-16 11:43:41  [1505492.451158] tg3 0000:01:00.0: eth0: 0x00007010:
>>> 0x1a5876c2, 0x01c08073, 0x00d70081, 0x03008200
>>> 2013-11-16 11:43:41  [1505492.451160] tg3 0000:01:00.0: eth0: 0x00007020:
>>> 0x00000000, 0x00000000, 0x00000406, 0x10004000
>>> 2013-11-16 11:43:41  [1505492.451161] tg3 0000:01:00.0: eth0: 0x00007030:
>>> 0x000e0000, 0x0000486c, 0x00170030, 0x00000000
>>> 2013-11-16 11:43:41  [1505492.451165] tg3 0000:01:00.0: eth0: 0: Host status
>>> block [00000004:0000003f:(0000:02e5:0000):(0000:0000)]
>>> 2013-11-16 11:43:41  [1505492.451167] tg3 0000:01:00.0: eth0: 0: NAPI info
>>> [0000003f:0000003f:(0000:0000:01ff):0000:(06a1:0000:0000:0000)]
>>> 2013-11-16 11:43:41  [1505492.451169] tg3 0000:01:00.0: eth0: 1: Host status
>>> block [00000001:00000033:(0000:0000:0000):(01d6:0013)]
>>> 2013-11-16 11:43:41  [1505492.451171] tg3 0000:01:00.0: eth0: 1: NAPI info
>>> [000000fb:000000fb:(0013:01df:01ff):01d2:(01d2:01d2:0000:0000)]
>>> 2013-11-16 11:43:41  [1505492.451173] tg3 0000:01:00.0: eth0: 2: Host status
>>> block [00000001:00000010:(0d76:0000:0000):(0000:010d)]
>>> 2013-11-16 11:43:41  [1505492.451176] tg3 0000:01:00.0: eth0: 2: NAPI info
>>> [00000010:00000010:(010d:010d:01ff):0d76:(0576:0573:0000:0000)]
>>> 2013-11-16 11:43:41  [1505492.451178] tg3 0000:01:00.0: eth0: 3: Host status
>>> block [00000001:000000ae:(0000:0000:0000):(0000:0035)]
>>> 2013-11-16 11:43:41  [1505492.451180] tg3 0000:01:00.0: eth0: 3: NAPI info
>>> [000000ae:000000ae:(0035:0035:01ff):04e6:(04e6:04df:0000:0000)]
>>> 2013-11-16 11:43:41  [1505492.451182] tg3 0000:01:00.0: eth0: 4: Host status
>>> block [00000001:000000b2:(0000:0000:0267):(0000:00bb)]
>>> 2013-11-16 11:43:41  [1505492.451184] tg3 0000:01:00.0: eth0: 4: NAPI info
>>> [000000cd:000000cd:(00bb:0062:01ff):01b5:(01b5:01b5:0000:0000)]
>>> 2013-11-16 11:43:41  [1505492.457748] tg3 0000:01:00.0: eth0: The system may
>>> be re-ordering memory-mapped I/O cycles to the network device, attempting to
>>> recover. Please report the problem to the driver maintainer and include
>>> system chipset information.
>>> 2013-11-16 11:43:41  [1505492.490118] tg3 0000:01:00.0: eth0: Link is down
>>> 2013-11-16 11:43:41  [1505498.044676] tg3 0000:01:00.0: eth0: Link is up at
>>> 1000 Mbps, full duplex
>>> 2013-11-16 11:43:41  [1505498.044678] tg3 0000:01:00.0: eth0: Flow control
>>> is off for TX and off for RX
>>> 2013-11-16 11:43:41  [1505498.044680] tg3 0000:01:00.0: eth0: EEE is
>>> disabled
>>>
>>> Further information:
>>> Current output of "ethtool -k eth0":
>>> rx-checksumming: on
>>> tx-checksumming: on
>>>          tx-checksum-ipv4: on
>>>          tx-checksum-ip-generic: off [fixed]
>>>          tx-checksum-ipv6: on
>>>          tx-checksum-fcoe-crc: off [fixed]
>>>          tx-checksum-sctp: off [fixed]
>>> scatter-gather: on
>>>          tx-scatter-gather: on
>>>          tx-scatter-gather-fraglist: off [fixed]
>>> tcp-segmentation-offload: off
>>>          tx-tcp-segmentation: off
>>>          tx-tcp-ecn-segmentation: off
>>>          tx-tcp6-segmentation: off
>>> udp-fragmentation-offload: off [fixed]
>>> generic-segmentation-offload: on
>>> generic-receive-offload: on
>>> large-receive-offload: off [fixed]
>>> rx-vlan-offload: on
>>> tx-vlan-offload: on
>>> ntuple-filters: off [fixed]
>>> receive-hashing: off [fixed]
>>> highdma: on
>>> rx-vlan-filter: off [fixed]
>>> vlan-challenged: off [fixed]
>>> tx-lockless: off [fixed]
>>> netns-local: off [fixed]
>>> tx-gso-robust: off [fixed]
>>> tx-fcoe-segmentation: off [fixed]
>>> fcoe-mtu: off [fixed]
>>> tx-nocache-copy: on
>>> loopback: off [fixed]
>>> rx-fcs: off [fixed]
>>> rx-all: off [fixed]
>>>
>>> Current output of "lscpi -vvvv" for eth0:
>>> 01:00.1 Ethernet controller: Broadcom Corporation NetXtreme BCM5720 Gigabit
>>> Ethernet PCIe
>>>          Subsystem: Dell Device 1f5b
>>>          Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
>>> Stepping- SERR- FastB2B- DisINTx+
>>>          Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
>>> <TAbort- <MAbort- >SERR- <PERR- INTx-
>>>          Latency: 0, Cache Line Size: 64 bytes
>>>          Interrupt: pin B routed to IRQ 38
>>>          Region 0: Memory at d57d0000 (64-bit, prefetchable) [size=64K]
>>>          Region 2: Memory at d57e0000 (64-bit, prefetchable) [size=64K]
>>>          Region 4: Memory at d57f0000 (64-bit, prefetchable) [size=64K]
>>>          Expansion ROM at d5700000 [disabled] [size=256K]
>>>          Capabilities: [48] Power Management version 3
>>>                  Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA
>>> PME(D0+,D1-,D2-,D3hot+,D3cold+)
>>>                  Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=1 PME-
>>>          Capabilities: [50] Vital Product Data
>>>                  Product Name: Broadcom NetXtreme Gigabit Ethernet
>>>                  Read-only fields:
>>>                          [PN] Part number: BCM95720
>>>                          [MN] Manufacture ID: 31 30 32 38
>>>                          [V0] Vendor specific: FFV7.4.8
>>>                          [V1] Vendor specific: DSV1028VPDR.VER1.0
>>>                          [V2] Vendor specific: NPY2
>>>                          [V3] Vendor specific: PMT1
>>>                          [V4] Vendor specific: NMVBroadcom Corp
>>>                          [V5] Vendor specific: DTINIC
>>>                          [V6] Vendor specific: DCM1001008d452101008d45
>>>                          [RV] Reserved: checksum good, 235 byte(s) reserved
>>>                  End
>>>          Capabilities: [58] MSI: Enable- Count=1/8 Maskable- 64bit+
>>>                  Address: 0000000000000000  Data: 0000
>>>          Capabilities: [a0] MSI-X: Enable+ Count=17 Masked-
>>>                  Vector table: BAR=4 offset=00000000
>>>                  PBA: BAR=4 offset=00001000
>>>          Capabilities: [ac] Express (v2) Endpoint, MSI 00
>>>                  DevCap: MaxPayload 256 bytes, PhantFunc 0, Latency L0s <4us,
>>> L1 <64us
>>>                          ExtTag- AttnBtn- AttnInd- PwrInd- RBE+ FLReset+
>>>                  DevCtl: Report errors: Correctable- Non-Fatal+ Fatal+
>>> Unsupported+
>>>                          RlxdOrd- ExtTag- PhantFunc- AuxPwr+ NoSnoop-
>>> FLReset-
>>>                          MaxPayload 256 bytes, MaxReadReq 512 bytes
>>>                  DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr+
>>> TransPend-
>>>                  LnkCap: Port #0, Speed 5GT/s, Width x2, ASPM L0s L1, Latency
>>> L0 <1us, L1 <2us
>>>                          ClockPM+ Surprise- LLActRep- BwNot-
>>>                  LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- Retrain-
>>> CommClk+
>>>                          ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
>>>                  LnkSta: Speed 5GT/s, Width x1, TrErr- Train- SlotClk+
>>> DLActive- BWMgmt- ABWMgmt-
>>>                  DevCap2: Completion Timeout: Range ABCD, TimeoutDis+
>>>                  DevCtl2: Completion Timeout: 65ms to 210ms, TimeoutDis-
>>>                  LnkCtl2: Target Link Speed: 2.5GT/s, EnterCompliance-
>>> SpeedDis-, Selectable De-emphasis: -6dB
>>>                           Transmit Margin: Normal Operating Range,
>>> EnterModifiedCompliance- ComplianceSOS-
>>>                           Compliance De-emphasis: -6dB
>>>                  LnkSta2: Current De-emphasis Level: -6dB,
>>> EqualizationComplete-, EqualizationPhase1-
>>>                           EqualizationPhase2-, EqualizationPhase3-,
>>> LinkEqualizationRequest-
>>>          Capabilities: [100 v1] Advanced Error Reporting
>>>                  UESta:  DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt-
>>> RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
>>>                  UEMsk:  DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt+ UnxCmplt+
>>> RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
>>>                  UESvrt: DLP+ SDES+ TLP+ FCP+ CmpltTO+ CmpltAbrt- UnxCmplt-
>>> RxOF+ MalfTLP+ ECRC+ UnsupReq- ACSViol-
>>>                  CESta:  RxErr- BadTLP- BadDLLP- Rollover- Timeout-
>>> NonFatalErr+
>>>                  CEMsk:  RxErr- BadTLP+ BadDLLP+ Rollover+ Timeout+
>>> NonFatalErr+
>>>                  AERCap: First Error Pointer: 00, GenCap+ CGenEn- ChkCap+
>>> ChkEn-
>>>          Capabilities: [13c v1] Device Serial Number 00-00-90-b1-1c-3f-67-fb
>>>          Capabilities: [150 v1] Power Budgeting <?>
>>>          Capabilities: [160 v1] Virtual Channel
>>>                  Caps:   LPEVC=0 RefClk=100ns PATEntryBits=1
>>>                  Arb:    Fixed- WRR32- WRR64- WRR128-
>>>                  Ctrl:   ArbSelect=Fixed
>>>                  Status: InProgress-
>>>                  VC0:    Caps:   PATOffset=00 MaxTimeSlots=1 RejSnoopTrans-
>>>                          Arb:    Fixed- WRR32- WRR64- WRR128- TWRR128-
>>> WRR256-
>>>                          Ctrl:   Enable+ ID=0 ArbSelect=Fixed TC/VC=ff
>>>                          Status: NegoPending- InProgress-
>>>          Kernel driver in use: tg3
>>>
>>>
>>> Can you please get me some help how to solve the problem?
>>> If you need more information please let me know.
>>>
>>> For answer please Cc me, as I'm not a member of lkml.
>>>
>>> Many thanks and regards
>>> Urban Loesch
>>>
>>>
>>> -- 
>>> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>>> the body of a message to majordomo@vger.kernel.org
>>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>> Please read the FAQ at  http://www.tux.org/lkml/
>>
> 
> 

^ permalink raw reply

* Re: bridge not getting ip since 3.11.5 and 3.4.66
From: Vlad Yasevich @ 2013-11-26 15:25 UTC (permalink / raw)
  To: Mark Trompell, Veaceslav Falico; +Cc: Linux-Kernel, netdev, herbert
In-Reply-To: <CAEPa5ym4HWK9vo_BYYZbQsGZXG9r2kfYR2rFGaYjjJqDfkf2uQ@mail.gmail.com>

On 11/26/2013 08:27 AM, Mark Trompell wrote:
> Answering my own mail again and even top posting, sorry, but makes
> more sense to me in that case).
> I reverted bridge related patches from 3.11.5 and it boils down to
> commit 0e308361d7ca0bf8b23fd472b90aae0fb10a1c32
> Author: Herbert Xu <herbert@gondor.apana.org.au>
> Date:   Thu Sep 12 17:12:05 2013 +1000
> 
>     bridge: Clamp forward_delay when enabling STP
> 
>     [ Upstream commit be4f154d5ef0ca147ab6bcd38857a774133f5450 ]
> 
>     At some point limits were added to forward_delay.  However, the
>     limits are only enforced when STP is enabled.  This created a
>     scenario where you could have a value outside the allowed range
>     while STP is disabled, which then stuck around even after STP
>     is enabled.
> 
>     This patch fixes this by clamping the value when we enable STP.
> 
>     I had to move the locking around a bit to ensure that there is
>     no window where someone could insert a value outside the range
>     while we're in the middle of enabling STP.
> 
> Causing the issue for me. Reverting that patch and br0 comes up again
> and gets an ip.

yes, that patch introduced a bug where we always used the
max_forward delay value.

you have 2 options:
 1) disable STP.  Since you are just running VMs and you have a single
    physical connection on the bridge, you can safely disable STP since
    your system is a leaf node.

 2) Get the latest stable kernel.  The bug has been fixed there.

-vlad

> 
> On Tue, Nov 12, 2013 at 11:57 AM, Mark Trompell <mark@foresightlinux.org> wrote:
>> On Mon, Nov 11, 2013 at 1:52 PM, Mark Trompell <mark@foresightlinux.org> wrote:
>>> On Mon, Nov 11, 2013 at 12:07 PM, Veaceslav Falico <veaceslav@falico.eu> wrote:
>>>> On Mon, Nov 11, 2013 at 11:29 AM, Mark Trompell <mark@foresightlinux.org> wrote:
>>>>> my bridge br0 doesn't get an ip from dhcp anymore after 3.11.5 and 3.4.66,
>>>>> What information would be helpful and required to find out what's going wrong.
>>>>
>>>> CC netdev
>>>>
>>>> First thing would be to provide the network scheme. Do you use vlans?
>>>> Which network
>>>> cards/drivers are you using? Do you use some kind of virtualization?
>>>> Is bonding involved?
>>>>
>>> Actually this is my desktop machine using kvm for a virtual machine
>>> that uses eth0 which is connected to the bridge
>>> which is used as interface for the host.
>>>
>>> $ ip addr
>>> 2. eth0: <BROADCAST,MULTICAST,UP,10000> mtu 1500 qdisc pfifo_fast
>>> master br0 qlen 1000
>>> ...
>>> 3. br0: <BROADCAST,MULTICAST,UP,10000> mtu 1500 qdisc noqueue
>>> ...
>>>
>>> Anything else?
>>
>> Okay more about my hardware and configuration:
>> from lspci:
>> 00:19.0 Ethernet controller: Intel Corporation 82579V Gigabit Network
>> Connection (rev 04)
>>
>> /etc/sysconfig/network-scripts/ifcfg-br0
>> DEVICE=br0
>> ONBOOT=yes
>> MACADDR=00:19:99:ac:b3:24
>> TYPE=Bridge
>> BOOTPROTO=dhcp
>> STP=on
>> NM_CONTROLLED=no
>> DELAY=0
>>
>> /etc/sysconfig/network-scripts/ifcfg-eth0
>> DEVICE=eth0
>> HWADDR=00:19:99:cd:a5:e6
>> #BOOTPROTO=dhcp
>> ONBOOT=yes
>> BRIDGE=br0
>> TYPE=Ethernet
>> NM_CONTROLLED=no
>>
>>
>>> Greetings
>>> Mark
> 
> 
> 

^ permalink raw reply

* Re: [ovs-dev] [PATCH v2.51 0/5] MPLS actions and matches
From: Ben Pfaff @ 2013-11-26 15:33 UTC (permalink / raw)
  To: Simon Horman; +Cc: dev, netdev, Jesse Gross, Ravi K
In-Reply-To: <20131126080759.GA26597@verge.net.au>

On Tue, Nov 26, 2013 at 05:08:04PM +0900, Simon Horman wrote:
> On Thu, Nov 21, 2013 at 12:46:41PM +0900, Simon Horman wrote:
> > Hi,
> > 
> > This series implements MPLS actions and matches based on work by
> > Ravi K, Leo Alterman, Yamahata-san and Joe Stringer.
> > 
> > This series provides three changes
> > 
> > * Patches 1 - 3
> > 
> >   Provide user-space support for the VLAN/MPLS tag insertion order
> >   up to and including OpenFlow 1.2, and the different ordering
> >   specified from OpenFlow 1.3. In a nutshell the datapath always
> >   uses the OpenFlow 1.3 ordering, which is to always insert tags
> >   immediately after the L2 header, regardless of the presence of other
> >   tags. And ovs-vswtichd provides compatibility for the behaviour up
> >   to OpenFlow 1.2, which is that MPLS tags should follow VLAN tags
> >   if present.
> > 
> >   Ben, these are for you to review.
> 
> Hi Ben,
> 
> I wonder if you could find some time to look over these.
> 
> I believe that the first patch has not previously been reviewed
> but other than that there should be few areas of excitement.

I'm taking today and the remainder of this week off (Thursday and Friday
are a holiday here in the U.S.), so unfortunately there is not much
chance of progress before Monday.

^ permalink raw reply

* When TCP keepalives tuned shorter than retransmission timeouts
From: Venkat Venkatsubra @ 2013-11-26 15:51 UTC (permalink / raw)
  To: netdev; +Cc: David Miller

Some of our customers have tcp socket level options set to:
TCP_KEEPIDLE 60
TCP_KEEPINTVL 6 
TCP_KEEPCNT 10

And when the peer is dead they expect the connection to timeout in 2 minutes instead of the
15 minutes from retransmission timeouts.
(We know the tunables are set very low.)

As this code in tcp_keepalive_timer() indicates we skip keepalive probes if there are packets in flight
Or we have more data to send:
/* It is alive without keepalive 8) */
        if (tp->packets_out || tcp_send_head(sk))
                goto resched;

The reason I guess is why burden the network with keepalive packets when
somebody else (retransmissions) is doing it for you.

The change we tried was to not actually send the keepalive probes in this situation but keep counting them as sent. 
To not do this when the receiver window is closed we check tp->snd_wnd. Maybe there are other (more correct ?) ways to do that. 
By the way, we didn't try to address yet the similar issue when the communication with peer dies
after the receiver closes the window.

This is the code change we tried.
--- tcp_timer.c.orig    2013-11-25 07:09:18.328112851 -0800
+++ tcp_timer.c 2013-11-25 08:06:47.339666980 -0800
@@ -588,18 +588,13 @@
                        }
                }
                tcp_send_active_reset(sk, GFP_ATOMIC);
-               goto death;
+               tcp_done(sk);
+               goto out;
        }

        if (!sock_flag(sk, SOCK_KEEPOPEN) || sk->sk_state == TCP_CLOSE)
                goto out;

-       elapsed = keepalive_time_when(tp);
-
-       /* It is alive without keepalive 8) */
-       if (tp->packets_out || tcp_send_head(sk))
-               goto resched;
-
        elapsed = keepalive_time_elapsed(tp);

        if (elapsed >= keepalive_time_when(tp)) {
@@ -615,8 +610,9 @@
                        tcp_write_err(sk);
                        goto out;
                }
-               if (tcp_write_wakeup(sk) <= 0) {
-                       icsk->icsk_probes_out++;
+               if (tp->packets_out || tcp_send_head(sk) || (tcp_write_wakeup(sk) <= 0)) {
+                       if (tp->snd_wnd)
+                               icsk->icsk_probes_out++;
                        elapsed = keepalive_intvl_when(tp);
                } else {
                        /* If keepalive was lost due to local congestion,
@@ -631,12 +627,7 @@

        sk_mem_reclaim(sk);

-resched:
        inet_csk_reset_keepalive_timer (sk, elapsed);
-       goto out;
-
-death:
-       tcp_done(sk);

out:
        bh_unlock_sock(sk);

We seek your opinion.

Thanks.

Venkat

^ permalink raw reply

* Re: When TCP keepalives tuned shorter than retransmission timeouts
From: Eric Dumazet @ 2013-11-26 16:20 UTC (permalink / raw)
  To: Venkat Venkatsubra; +Cc: netdev, David Miller
In-Reply-To: <4b6029b3-55da-441a-9550-0fed3b49506a@default>

On Tue, 2013-11-26 at 07:51 -0800, Venkat Venkatsubra wrote:
> Some of our customers have tcp socket level options set to:
> TCP_KEEPIDLE 60
> TCP_KEEPINTVL 6 
> TCP_KEEPCNT 10
> 
> And when the peer is dead they expect the connection to timeout in 2 minutes instead of the
> 15 minutes from retransmission timeouts.
> (We know the tunables are set very low.)

Then change max number of retransmits : tcp_retries2 ?

Keepalive timer is not a way to defeat TCP exponential backoff.

Its really there to send probes when a session is idle.

^ permalink raw reply

* [PATCH net-next v3] xen-netfront: Add support for IPv6 offloads
From: Paul Durrant @ 2013-11-26 16:41 UTC (permalink / raw)
  To: xen-devel, netdev
  Cc: Paul Durrant, Konrad Rzeszutek Wilk, Boris Ostrovsky,
	David Vrabel, Ian Campbell, Wei Liu, Annie Li

This patch adds support for IPv6 checksum offload and GSO when those
features are available in the backend.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Cc: David Vrabel <david.vrabel@citrix.com>
Cc: Ian Campbell <ian.campbell@citrix.com>
Cc: Wei Liu <wei.liu2@citrix.com>
Cc: Annie Li <annie.li@oracle.com>
---

v3:
 - Addressed comments raised by Annie Li

v2:
 - Addressed comments raised by Ian Campbell

 drivers/net/xen-netfront.c |  239 ++++++++++++++++++++++++++++++++++++++++----
 include/linux/ipv6.h       |    2 +
 2 files changed, 224 insertions(+), 17 deletions(-)

diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c
index dd1011e..fe747e4 100644
--- a/drivers/net/xen-netfront.c
+++ b/drivers/net/xen-netfront.c
@@ -616,7 +616,9 @@ static int xennet_start_xmit(struct sk_buff *skb, struct net_device *dev)
 		tx->flags |= XEN_NETTXF_extra_info;
 
 		gso->u.gso.size = skb_shinfo(skb)->gso_size;
-		gso->u.gso.type = XEN_NETIF_GSO_TYPE_TCPV4;
+		gso->u.gso.type = (skb_shinfo(skb)->gso_type & SKB_GSO_TCPV6) ?
+			          XEN_NETIF_GSO_TYPE_TCPV6 :
+			          XEN_NETIF_GSO_TYPE_TCPV4;
 		gso->u.gso.pad = 0;
 		gso->u.gso.features = 0;
 
@@ -808,15 +810,18 @@ static int xennet_set_skb_gso(struct sk_buff *skb,
 		return -EINVAL;
 	}
 
-	/* Currently only TCPv4 S.O. is supported. */
-	if (gso->u.gso.type != XEN_NETIF_GSO_TYPE_TCPV4) {
+	if (gso->u.gso.type != XEN_NETIF_GSO_TYPE_TCPV4 &&
+	    gso->u.gso.type != XEN_NETIF_GSO_TYPE_TCPV6) {
 		if (net_ratelimit())
 			pr_warn("Bad GSO type %d\n", gso->u.gso.type);
 		return -EINVAL;
 	}
 
 	skb_shinfo(skb)->gso_size = gso->u.gso.size;
-	skb_shinfo(skb)->gso_type = SKB_GSO_TCPV4;
+	skb_shinfo(skb)->gso_type =
+		(gso->u.gso.type == XEN_NETIF_GSO_TYPE_TCPV4) ?
+		SKB_GSO_TCPV4 :
+		SKB_GSO_TCPV6;
 
 	/* Header must be checked, and gso_segs computed. */
 	skb_shinfo(skb)->gso_type |= SKB_GSO_DODGY;
@@ -856,11 +861,42 @@ static RING_IDX xennet_fill_frags(struct netfront_info *np,
 	return cons;
 }
 
-static int checksum_setup(struct net_device *dev, struct sk_buff *skb)
+static inline bool maybe_pull_tail(struct sk_buff *skb, unsigned int min,
+				   unsigned int max)
 {
-	struct iphdr *iph;
-	int err = -EPROTO;
+	int target;
+
+	BUG_ON(max < min);
+
+	if (!skb_is_nonlinear(skb) || skb_headlen(skb) >= min)
+		return true;
+
+	/* If we need to pullup then pullup to max, so we hopefully
+	 * won't need to do it again.
+	 */
+	target = min_t(int, skb->len, max);
+	__pskb_pull_tail(skb, target - skb_headlen(skb));
+
+	if (skb_headlen(skb) < min) {
+		net_err_ratelimited("Failed to pullup packet header\n");
+		return false;    
+	}
+
+	return true;
+}
+
+/* This value should be large enough to cover a tagged ethernet header plus
+ * maximally sized IP and TCP or UDP headers.
+ */
+#define MAX_IP_HEADER 128
+
+static int checksum_setup_ip(struct net_device *dev, struct sk_buff *skb)
+{
+	struct iphdr *iph = (void *)skb->data;
+	unsigned int header_size;
+	unsigned int off;
 	int recalculate_partial_csum = 0;
+	int err = -EPROTO;
 
 	/*
 	 * A GSO SKB must be CHECKSUM_PARTIAL. However some buggy
@@ -879,40 +915,158 @@ static int checksum_setup(struct net_device *dev, struct sk_buff *skb)
 	if (skb->ip_summed != CHECKSUM_PARTIAL)
 		return 0;
 
-	if (skb->protocol != htons(ETH_P_IP))
+	off = sizeof(struct iphdr);
+
+	header_size = skb->network_header + off;
+	if (!maybe_pull_tail(skb, header_size, MAX_IP_HEADER))
 		goto out;
 
-	iph = (void *)skb->data;
+	off = iph->ihl * 4;
 
 	switch (iph->protocol) {
 	case IPPROTO_TCP:
-		if (!skb_partial_csum_set(skb, 4 * iph->ihl,
+		if (!skb_partial_csum_set(skb, off,
 					  offsetof(struct tcphdr, check)))
 			goto out;
 
 		if (recalculate_partial_csum) {
 			struct tcphdr *tcph = tcp_hdr(skb);
+
+			header_size = skb->network_header +
+				off +
+				sizeof(struct tcphdr);
+			if (!maybe_pull_tail(skb, header_size, MAX_IP_HEADER))
+				goto out;
+
 			tcph->check = ~csum_tcpudp_magic(iph->saddr, iph->daddr,
-							 skb->len - iph->ihl*4,
+							 skb->len - off,
 							 IPPROTO_TCP, 0);
 		}
 		break;
 	case IPPROTO_UDP:
-		if (!skb_partial_csum_set(skb, 4 * iph->ihl,
+		if (!skb_partial_csum_set(skb, off,
 					  offsetof(struct udphdr, check)))
 			goto out;
 
 		if (recalculate_partial_csum) {
 			struct udphdr *udph = udp_hdr(skb);
+
+			header_size = skb->network_header +
+				off +
+				sizeof(struct udphdr);
+			if (!maybe_pull_tail(skb, header_size, MAX_IP_HEADER))
+				goto out;
+
 			udph->check = ~csum_tcpudp_magic(iph->saddr, iph->daddr,
-							 skb->len - iph->ihl*4,
+							 skb->len - off,
 							 IPPROTO_UDP, 0);
 		}
 		break;
 	default:
-		if (net_ratelimit())
-			pr_err("Attempting to checksum a non-TCP/UDP packet, dropping a protocol %d packet\n",
-			       iph->protocol);
+		net_err_ratelimited("Attempting to checksum a non-TCP/UDP packet, dropping a protocol %d packet\n",
+				    iph->protocol);
+		goto out;
+	}
+
+	err = 0;
+
+out:
+	return err;
+}
+
+/* This value should be large enough to cover a tagged ethernet header plus
+ * an IPv6 header, all options, and a maximal TCP or UDP header.
+ */
+#define MAX_IPV6_HEADER 256
+
+static int checksum_setup_ipv6(struct net_device *dev, struct sk_buff *skb)
+{
+	struct ipv6hdr *ipv6h = (void *)skb->data;
+	u8 nexthdr;
+	unsigned int header_size;
+	unsigned int off;
+	bool fragment;
+	bool done;
+	int err = -EPROTO;
+
+	done = false;
+
+	/* A non-CHECKSUM_PARTIAL SKB does not require setup. */
+	if (skb->ip_summed != CHECKSUM_PARTIAL)
+		return 0;
+
+	off = sizeof(struct ipv6hdr);
+
+	header_size = skb->network_header + off;
+	if (!maybe_pull_tail(skb, header_size, MAX_IPV6_HEADER))
+		goto out;
+
+	nexthdr = ipv6h->nexthdr;
+
+	while ((off <= sizeof(struct ipv6hdr) + ntohs(ipv6h->payload_len)) &&
+	       !done) {
+		switch (nexthdr) {
+		case IPPROTO_DSTOPTS:
+		case IPPROTO_HOPOPTS:
+		case IPPROTO_ROUTING: {
+			struct ipv6_opt_hdr *hp = (void *)(skb->data + off);
+
+			header_size = skb->network_header +
+				off +
+				sizeof(struct ipv6_opt_hdr);
+			if (!maybe_pull_tail(skb, header_size, MAX_IPV6_HEADER))
+				goto out;
+
+			nexthdr = hp->nexthdr;
+			off += ipv6_optlen(hp);
+			break;
+		}
+		case IPPROTO_AH: {
+			struct ip_auth_hdr *hp = (void *)(skb->data + off);
+
+			header_size = skb->network_header +
+				off +
+				sizeof(struct ip_auth_hdr);
+			if (!maybe_pull_tail(skb, header_size, MAX_IPV6_HEADER))
+				goto out;
+
+			nexthdr = hp->nexthdr;
+			off += ipv6_ahlen(hp);
+			break;
+		}
+		case IPPROTO_FRAGMENT:
+			fragment = true;
+			/* fall through */
+		default:
+			done = true;
+			break;
+		}
+	}
+
+	if (!done) {
+		net_err_ratelimited("Failed to parse packet header\n");
+		goto out;
+	}
+
+	if (fragment) {
+		net_err_ratelimited("Packet is a fragment!\n");
+		goto out;
+	}
+
+	switch (nexthdr) {
+	case IPPROTO_TCP:
+		if (!skb_partial_csum_set(skb, off,
+					  offsetof(struct tcphdr, check)))
+			goto out;
+		break;
+	case IPPROTO_UDP:
+		if (!skb_partial_csum_set(skb, off,
+					  offsetof(struct udphdr, check)))
+			goto out;
+		break;
+	default:
+		net_err_ratelimited("Attempting to checksum a non-TCP/UDP packet, dropping a protocol %d packet\n",
+				    nexthdr);
 		goto out;
 	}
 
@@ -922,6 +1076,25 @@ out:
 	return err;
 }
 
+static int checksum_setup(struct net_device *dev, struct sk_buff *skb)
+{
+	int err;
+
+	switch (skb->protocol) {
+	case htons(ETH_P_IP):
+		err = checksum_setup_ip(dev, skb);
+		break;
+	case htons(ETH_P_IPV6):
+		err = checksum_setup_ipv6(dev, skb);
+		break;
+	default:
+		err = -EPROTO;
+		break;
+	}
+
+	return err;
+}
+
 static int handle_incoming_queue(struct net_device *dev,
 				 struct sk_buff_head *rxq)
 {
@@ -1232,6 +1405,15 @@ static netdev_features_t xennet_fix_features(struct net_device *dev,
 			features &= ~NETIF_F_SG;
 	}
 
+	if (features & NETIF_F_IPV6_CSUM) {
+		if (xenbus_scanf(XBT_NIL, np->xbdev->otherend,
+				 "feature-ipv6-csum-offload", "%d", &val) < 0)
+			val = 0;
+
+		if (!val)
+			features &= ~NETIF_F_IPV6_CSUM;
+	}
+
 	if (features & NETIF_F_TSO) {
 		if (xenbus_scanf(XBT_NIL, np->xbdev->otherend,
 				 "feature-gso-tcpv4", "%d", &val) < 0)
@@ -1241,6 +1423,15 @@ static netdev_features_t xennet_fix_features(struct net_device *dev,
 			features &= ~NETIF_F_TSO;
 	}
 
+	if (features & NETIF_F_TSO6) {
+		if (xenbus_scanf(XBT_NIL, np->xbdev->otherend,
+				 "feature-gso-tcpv6", "%d", &val) < 0)
+			val = 0;
+
+		if (!val)
+			features &= ~NETIF_F_TSO6;
+	}
+
 	return features;
 }
 
@@ -1373,7 +1564,9 @@ static struct net_device *xennet_create_dev(struct xenbus_device *dev)
 	netif_napi_add(netdev, &np->napi, xennet_poll, 64);
 	netdev->features        = NETIF_F_IP_CSUM | NETIF_F_RXCSUM |
 				  NETIF_F_GSO_ROBUST;
-	netdev->hw_features	= NETIF_F_IP_CSUM | NETIF_F_SG | NETIF_F_TSO;
+	netdev->hw_features	= NETIF_F_SG | 
+		                  NETIF_F_IPV6_CSUM |
+		                  NETIF_F_TSO | NETIF_F_TSO6;
 
 	/*
          * Assume that all hw features are available for now. This set
@@ -1751,6 +1944,18 @@ again:
 		goto abort_transaction;
 	}
 
+	err = xenbus_printf(xbt, dev->nodename, "feature-gso-tcpv6", "%d", 1);
+	if (err) {
+		message = "writing feature-gso-tcpv6";
+		goto abort_transaction;
+	}
+
+	err = xenbus_printf(xbt, dev->nodename, "feature-ipv6-csum-offload", "%d", 1);
+	if (err) {
+		message = "writing feature-ipv6-csum-offload";
+		goto abort_transaction;
+	}
+
 	err = xenbus_transaction_end(xbt, 0);
 	if (err) {
 		if (err == -EAGAIN)
diff --git a/include/linux/ipv6.h b/include/linux/ipv6.h
index 5d89d1b..10f1b03 100644
--- a/include/linux/ipv6.h
+++ b/include/linux/ipv6.h
@@ -4,6 +4,8 @@
 #include <uapi/linux/ipv6.h>
 
 #define ipv6_optlen(p)  (((p)->hdrlen+1) << 3)
+#define ipv6_ahlen(p)   (((p)->hdrlen+2) << 2);
+
 /*
  * This structure contains configuration options per IPv6 link.
  */
-- 
1.7.10.4

^ permalink raw reply related

* [PATCH net] be2net: call napi_disable() for all event queues
From: Ivan Vecera @ 2013-11-26 16:54 UTC (permalink / raw)
  To: netdev; +Cc: Sathya Perla, Subbu Seetharaman, Ajit Khaparde

The recent be2net commit 6384a4d (adds a support for busy polling)
introduces a regression that results in kernel crash. It incorrectly
modified be_close() so napi_disable() is called only for the first queue.
This breaks a correct pairing of napi_enable/_disable for the rest
of event queues and causes a crash in subsequent be_open() call.

Cc: Sathya Perla <sathya.perla@emulex.com>
Cc: Subbu Seetharaman <subbu.seetharaman@emulex.com>
Cc: Ajit Khaparde <ajit.khaparde@emulex.com>
Signed-off-by: Ivan Vecera <ivecera@redhat.com>
---
 drivers/net/ethernet/emulex/benet/be_main.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
index 78a0e85..0aec4d2 100644
--- a/drivers/net/ethernet/emulex/benet/be_main.c
+++ b/drivers/net/ethernet/emulex/benet/be_main.c
@@ -2663,8 +2663,8 @@ static int be_close(struct net_device *netdev)
 			napi_disable(&eqo->napi);
 			be_disable_busy_poll(eqo);
 		}
-		adapter->flags &= ~BE_FLAGS_NAPI_ENABLED;
 	}
+	adapter->flags &= ~BE_FLAGS_NAPI_ENABLED;
 
 	be_async_mcc_disable(adapter);
 
-- 
1.8.3.2

^ permalink raw reply related


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).