Netdev List
 help / color / mirror / Atom feed
* [PATCH] bridge: revisit IEEE 802 local multicast groups
From: David Lamparter @ 2011-07-01 11:12 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: netdev, Nick Carter, David Lamparter

this first and foremost fixes handling of bonding frames, which were
incorrectly forwarded until now. they need to never cross a bridge.

it also introduces a new switch to control handling of the other
not-that-special groups; if you want them forwarded despite having
STP running, there's a sysfs knob for that. you can implement your
local policy with ebtables then.

in the end, we now match hardware switch behaviour rather closely, but
still additionally allow playing tricks on things like 802.1X.

Signed-off-by: David Lamparter <equinox@diac24.net>
Cc: Stephen Hemminger <shemminger@linux-foundation.org>
Cc: Nick Carter <ncarter100@gmail.com>
---
 net/bridge/br_device.c   |    1 +
 net/bridge/br_input.c    |   25 ++++++++++++++++++-------
 net/bridge/br_private.h  |    2 ++
 net/bridge/br_sysfs_br.c |   24 ++++++++++++++++++++++++
 4 files changed, 45 insertions(+), 7 deletions(-)

diff --git a/net/bridge/br_device.c b/net/bridge/br_device.c
index c188c80..4a01a3e 100644
--- a/net/bridge/br_device.c
+++ b/net/bridge/br_device.c
@@ -359,6 +359,7 @@ void br_dev_setup(struct net_device *dev)
 	memcpy(br->group_addr, br_group_address, ETH_ALEN);
 
 	br->stp_enabled = BR_NO_STP;
+	br->stp_forward_802local = 0;
 	br->designated_root = br->bridge_id;
 	br->bridge_max_age = br->max_age = 20 * HZ;
 	br->bridge_hello_time = br->hello_time = 2 * HZ;
diff --git a/net/bridge/br_input.c b/net/bridge/br_input.c
index f3ac1e8..0060b10 100644
--- a/net/bridge/br_input.c
+++ b/net/bridge/br_input.c
@@ -160,13 +160,24 @@ rx_handler_result_t br_handle_frame(struct sk_buff **pskb)
 	p = br_port_get_rcu(skb->dev);
 
 	if (unlikely(is_link_local(dest))) {
-		/* Pause frames shouldn't be passed up by driver anyway */
-		if (skb->protocol == htons(ETH_P_PAUSE))
-			goto drop;
-
-		/* If STP is turned off, then forward */
-		if (p->br->stp_enabled == BR_NO_STP && dest[5] == 0)
-			goto forward;
+		switch (dest[5]) {
+		/* Pause/3x frames shouldn't be passed up by driver anyway
+		 * LACP/3ad can never be allowed to cross even a dumb hub
+		 */
+		case 0x01:	/* pause */
+		case 0x02:	/* bonding */
+			break;
+
+		case 0x00:	/* STP */
+			if (p->br->stp_enabled == BR_NO_STP)
+				goto forward;
+			break;
+
+		default:
+			if (p->br->stp_enabled == BR_NO_STP
+					|| p->br->stp_forward_802local)
+				goto forward;
+		}
 
 		if (NF_HOOK(NFPROTO_BRIDGE, NF_BR_LOCAL_IN, skb, skb->dev,
 			    NULL, br_handle_local_finish)) {
diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h
index 54578f2..909814f 100644
--- a/net/bridge/br_private.h
+++ b/net/bridge/br_private.h
@@ -213,6 +213,8 @@ struct net_bridge
 		BR_USER_STP,		/* new RSTP in userspace */
 	} stp_enabled;
 
+	bool				stp_forward_802local;
+
 	unsigned char			topology_change;
 	unsigned char			topology_change_detected;
 
diff --git a/net/bridge/br_sysfs_br.c b/net/bridge/br_sysfs_br.c
index 68b893e..8004bf7 100644
--- a/net/bridge/br_sysfs_br.c
+++ b/net/bridge/br_sysfs_br.c
@@ -149,6 +149,29 @@ static ssize_t store_stp_state(struct device *d,
 static DEVICE_ATTR(stp_state, S_IRUGO | S_IWUSR, show_stp_state,
 		   store_stp_state);
 
+static ssize_t show_stp_forward_802local(struct device *d,
+					 struct device_attribute *attr,
+					 char *buf)
+{
+	struct net_bridge *br = to_bridge(d);
+	return sprintf(buf, "%d\n", br->stp_forward_802local);
+}
+
+static int set_stp_forward_802local(struct net_bridge *br, unsigned long val)
+{
+	br->stp_forward_802local = !!val;
+	return 0;
+}
+
+static ssize_t store_stp_forward_802local(struct device *d,
+					  struct device_attribute *attr,
+					  const char *buf, size_t len)
+{
+	return store_bridge_parm(d, buf, len, set_stp_forward_802local);
+}
+static DEVICE_ATTR(stp_forward_802local, S_IRUGO | S_IWUSR,
+		   show_stp_forward_802local, store_stp_forward_802local);
+
 static ssize_t show_priority(struct device *d, struct device_attribute *attr,
 			     char *buf)
 {
@@ -652,6 +675,7 @@ static struct attribute *bridge_attrs[] = {
 	&dev_attr_max_age.attr,
 	&dev_attr_ageing_time.attr,
 	&dev_attr_stp_state.attr,
+	&dev_attr_stp_forward_802local.attr,
 	&dev_attr_priority.attr,
 	&dev_attr_bridge_id.attr,
 	&dev_attr_root_id.attr,
-- 
1.7.5.3


^ permalink raw reply related

* Re: Regarding sumbiting a new NIC driver to kernel.
From: Marius Kotsbak @ 2011-07-01 11:13 UTC (permalink / raw)
  To: Ren, Cloud
  Cc: 'davem@davemloft.net', Huang, Xiong,
	netdev@vger.kernel.org
In-Reply-To: <6349D7A510622448B1BA0967850A843801163B91@nasanexd02d.na.qualcomm.com>

Den 01. juli 2011 11:09, skrev Ren, Cloud:
> Would you have any advices to us?  If this is possible, how do I submit the new driver and remove the old driver? Can you give me a doc how to submit the driver to kernel or any hints?

All should be explained in:

http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=Documentation/SubmittingPatches;h=569f3532e1383cb3e67dcba7b77990b5f18a1411;hb=HEAD

http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=Documentation/SubmittingDrivers;h=319baa8b60dd727d82c5e8fa062c13e3bb3126d5;hb=HEAD

http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=Documentation/SubmitChecklist;h=da0382daa39556939dcc94717b658b5917e4009f;hb=HEAD

--
Marius



^ permalink raw reply

* Re: [PATCH] bridge: Forward EAPOL Kconfig option BRIDGE_PAE_FORWARD
From: David Lamparter @ 2011-07-01 10:16 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: Nick Carter, David Lamparter, netdev, davem
In-Reply-To: <20110629163423.1d73b0ef@nehalam.ftrdhcpuser.net>

On Wed, Jun 29, 2011 at 04:34:23PM -0700, Stephen Hemminger wrote:
> The problem is that the damn 802.1 committees keep loading up protocols
> on the same multicast address range. Trying to solve a design committee 
> problem in the kernel is not going to make anybody happy.
> 
> I am happy with the simple solution of:
>   no STP == Hub
>   STP    == Bridge
> These are both well know configurations and are blessed by standards.

I agree, that is how we should behave by default, and we'll match most
admin's expectations.

Regarding multicast groups, I would summarise like this:
1. any multicast gets forwarded by default,
 2. unless it is 01:80:c2:00:00:01 or :02 (pause/bonding)
    (this rule applies regardless of STP state)
 3. if STP is on:
  4. 01:80:c2:00:00:00 (STP) never gets forwarded
  5. 01:80:c2:00:00:03-0f don't get forwarded by default

What we can do is add a switch to disable the #5 rule. The way I see it
is that that switch would remove an exception from the rule and turn it
back to the default #1; that's acceptable for making a new knob in my
eyes.

(Adding an 802.1X knob would be an exception to the exception for me,
which is why I'm against it.)

I'll cook up a patch in a few minutes, we really need to get rule #2
right anyway. We _MUST_NOT_ pass bonding frames in any case, but we
currently do that if STP is off. (cf. my earlier patch 1/2)


-David


^ permalink raw reply

* Re: possible bridge regression in "bridge: implement [add/del]_slave ops"?
From: David Lamparter @ 2011-07-01 10:08 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: Alexander Stein, David S. Miller, bridge, netdev
In-Reply-To: <20110630100819.0e4b536f@nehalam.ftrdhcpuser.net>

On Thu, Jun 30, 2011 at 10:08:19AM -0700, Stephen Hemminger wrote:
> On Thu, 30 Jun 2011 10:33:23 +0200
> Alexander Stein <alexander.stein@systec-electronic.com> wrote:
> 
> > * echo $(pgrep rstpd) > /var/run/rstpd.pid
> > * brctl addbr br1
> > * echo 1 > /sys/class/net/br1/bridge/stp_state
> 
> This bogus. You are running both kernel and spanning
> tree daemon at the same time!
> 
> Doing the echo of 1 to stp_state forces kernel spanning
> tree. You want 2 which is what is supposed to be use for user
> mode spanning tree.

I just tested this on my box, you can't echo 2 into that sysfs file (it
reads back as 1).

That you can change this variable at all when an userspace stp
implementation is running is a bug anyway, IMHO. rstpd should do all the
required settings and the kernel should prevent them from being changed
while rstpd has the bridge under its control.


-David


^ permalink raw reply

* [PATCH] net/fec: gasket needs to be enabled for some i.mx
From: Shawn Guo @ 2011-07-01 10:11 UTC (permalink / raw)
  To: netdev
  Cc: linux-arm-kernel, u.kleine-koenig, LW, Shawn Guo, Troy Kisky,
	David S. Miller, Sascha Hauer
In-Reply-To: <20110630161935.GA7977@S2100-06.ap.freescale.net>

On the recent i.mx (mx25/50/53), there is a gasket inside fec
controller which needs to be enabled no matter phy works in MII
or RMII mode.

The current code enables the gasket only when phy interface is RMII.
It's broken when the driver works with a MII phy.  The patch uses
platform_device_id to distinguish the SoCs that have the gasket and
enables it on these SoCs for both MII and RMII mode.

Signed-off-by: Troy Kisky <troy.kisky@boundarydevices.com>
Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
Cc: David S. Miller <davem@davemloft.net>
Cc: Sascha Hauer <s.hauer@pengutronix.de>
---
 arch/arm/mach-imx/clock-imx25.c                 |    2 +-
 arch/arm/mach-imx/clock-imx27.c                 |    2 +-
 arch/arm/mach-imx/clock-imx35.c                 |    2 +-
 arch/arm/mach-mx5/clock-mx51-mx53.c             |    4 +-
 arch/arm/plat-mxc/devices/platform-fec.c        |   17 ++++++++-------
 arch/arm/plat-mxc/include/mach/devices-common.h |    1 +
 drivers/net/fec.c                               |   26 ++++++++++++++++++++--
 7 files changed, 38 insertions(+), 16 deletions(-)

diff --git a/arch/arm/mach-imx/clock-imx25.c b/arch/arm/mach-imx/clock-imx25.c
index a65838f..5527fff 100644
--- a/arch/arm/mach-imx/clock-imx25.c
+++ b/arch/arm/mach-imx/clock-imx25.c
@@ -294,7 +294,7 @@ static struct clk_lookup lookups[] = {
 	_REGISTER_CLOCK("imx-i2c.0", NULL, i2c_clk)
 	_REGISTER_CLOCK("imx-i2c.1", NULL, i2c_clk)
 	_REGISTER_CLOCK("imx-i2c.2", NULL, i2c_clk)
-	_REGISTER_CLOCK("fec.0", NULL, fec_clk)
+	_REGISTER_CLOCK("imx25-fec.0", NULL, fec_clk)
 	_REGISTER_CLOCK("imxdi_rtc.0", NULL, dryice_clk)
 	_REGISTER_CLOCK("imx-fb.0", NULL, lcdc_clk)
 	_REGISTER_CLOCK("imx2-wdt.0", NULL, wdt_clk)
diff --git a/arch/arm/mach-imx/clock-imx27.c b/arch/arm/mach-imx/clock-imx27.c
index 583f251..d197df2 100644
--- a/arch/arm/mach-imx/clock-imx27.c
+++ b/arch/arm/mach-imx/clock-imx27.c
@@ -662,7 +662,7 @@ static struct clk_lookup lookups[] = {
 	_REGISTER_CLOCK(NULL, "brom", brom_clk)
 	_REGISTER_CLOCK(NULL, "emma", emma_clk)
 	_REGISTER_CLOCK(NULL, "slcdc", slcdc_clk)
-	_REGISTER_CLOCK("fec.0", NULL, fec_clk)
+	_REGISTER_CLOCK("imx27-fec.0", NULL, fec_clk)
 	_REGISTER_CLOCK(NULL, "emi", emi_clk)
 	_REGISTER_CLOCK(NULL, "sahara2", sahara2_clk)
 	_REGISTER_CLOCK(NULL, "ata", ata_clk)
diff --git a/arch/arm/mach-imx/clock-imx35.c b/arch/arm/mach-imx/clock-imx35.c
index 5a4cc1e..fb4007b 100644
--- a/arch/arm/mach-imx/clock-imx35.c
+++ b/arch/arm/mach-imx/clock-imx35.c
@@ -461,7 +461,7 @@ static struct clk_lookup lookups[] = {
 	_REGISTER_CLOCK("sdhci-esdhc-imx.0", NULL, esdhc1_clk)
 	_REGISTER_CLOCK("sdhci-esdhc-imx.1", NULL, esdhc2_clk)
 	_REGISTER_CLOCK("sdhci-esdhc-imx.2", NULL, esdhc3_clk)
-	_REGISTER_CLOCK("fec.0", NULL, fec_clk)
+	_REGISTER_CLOCK("imx35-fec.0", NULL, fec_clk)
 	_REGISTER_CLOCK(NULL, "gpio", gpio1_clk)
 	_REGISTER_CLOCK(NULL, "gpio", gpio2_clk)
 	_REGISTER_CLOCK(NULL, "gpio", gpio3_clk)
diff --git a/arch/arm/mach-mx5/clock-mx51-mx53.c b/arch/arm/mach-mx5/clock-mx51-mx53.c
index 699b0d2..04c5a01 100644
--- a/arch/arm/mach-mx5/clock-mx51-mx53.c
+++ b/arch/arm/mach-mx5/clock-mx51-mx53.c
@@ -1426,7 +1426,7 @@ static struct clk_lookup mx51_lookups[] = {
 	_REGISTER_CLOCK("imx-uart.1", NULL, uart2_clk)
 	_REGISTER_CLOCK("imx-uart.2", NULL, uart3_clk)
 	_REGISTER_CLOCK(NULL, "gpt", gpt_clk)
-	_REGISTER_CLOCK("fec.0", NULL, fec_clk)
+	_REGISTER_CLOCK("imx51-fec.0", NULL, fec_clk)
 	_REGISTER_CLOCK("mxc_pwm.0", "pwm", pwm1_clk)
 	_REGISTER_CLOCK("mxc_pwm.1", "pwm", pwm2_clk)
 	_REGISTER_CLOCK("imx-i2c.0", NULL, i2c1_clk)
@@ -1475,7 +1475,7 @@ static struct clk_lookup mx53_lookups[] = {
 	_REGISTER_CLOCK("imx-uart.3", NULL, uart4_clk)
 	_REGISTER_CLOCK("imx-uart.4", NULL, uart5_clk)
 	_REGISTER_CLOCK(NULL, "gpt", gpt_clk)
-	_REGISTER_CLOCK("fec.0", NULL, fec_clk)
+	_REGISTER_CLOCK("imx53-fec.0", NULL, fec_clk)
 	_REGISTER_CLOCK(NULL, "iim_clk", iim_clk)
 	_REGISTER_CLOCK("imx-i2c.0", NULL, i2c1_clk)
 	_REGISTER_CLOCK("imx-i2c.1", NULL, i2c2_clk)
diff --git a/arch/arm/plat-mxc/devices/platform-fec.c b/arch/arm/plat-mxc/devices/platform-fec.c
index ccc789e..3790c59 100644
--- a/arch/arm/plat-mxc/devices/platform-fec.c
+++ b/arch/arm/plat-mxc/devices/platform-fec.c
@@ -10,40 +10,41 @@
 #include <mach/hardware.h>
 #include <mach/devices-common.h>
 
-#define imx_fec_data_entry_single(soc)					\
+#define imx_fec_data_entry_single(soc, _devid)				\
 	{								\
+		.devid = _devid,					\
 		.iobase = soc ## _FEC_BASE_ADDR,			\
 		.irq = soc ## _INT_FEC,					\
 	}
 
 #ifdef CONFIG_SOC_IMX25
 const struct imx_fec_data imx25_fec_data __initconst =
-	imx_fec_data_entry_single(MX25);
+	imx_fec_data_entry_single(MX25, "imx25-fec");
 #endif /* ifdef CONFIG_SOC_IMX25 */
 
 #ifdef CONFIG_SOC_IMX27
 const struct imx_fec_data imx27_fec_data __initconst =
-	imx_fec_data_entry_single(MX27);
+	imx_fec_data_entry_single(MX27, "imx27-fec");
 #endif /* ifdef CONFIG_SOC_IMX27 */
 
 #ifdef CONFIG_SOC_IMX35
 const struct imx_fec_data imx35_fec_data __initconst =
-	imx_fec_data_entry_single(MX35);
+	imx_fec_data_entry_single(MX35, "imx35-fec");
 #endif
 
 #ifdef CONFIG_SOC_IMX50
 const struct imx_fec_data imx50_fec_data __initconst =
-	imx_fec_data_entry_single(MX50);
+	imx_fec_data_entry_single(MX50, "imx50-fec");
 #endif
 
 #ifdef CONFIG_SOC_IMX51
 const struct imx_fec_data imx51_fec_data __initconst =
-	imx_fec_data_entry_single(MX51);
+	imx_fec_data_entry_single(MX51, "imx51-fec");
 #endif
 
 #ifdef CONFIG_SOC_IMX53
 const struct imx_fec_data imx53_fec_data __initconst =
-	imx_fec_data_entry_single(MX53);
+	imx_fec_data_entry_single(MX53, "imx53-fec");
 #endif
 
 struct platform_device *__init imx_add_fec(
@@ -62,7 +63,7 @@ struct platform_device *__init imx_add_fec(
 		},
 	};
 
-	return imx_add_platform_device_dmamask("fec", 0,
+	return imx_add_platform_device_dmamask(data->devid, 0,
 			res, ARRAY_SIZE(res),
 			pdata, sizeof(*pdata), DMA_BIT_MASK(32));
 }
diff --git a/arch/arm/plat-mxc/include/mach/devices-common.h b/arch/arm/plat-mxc/include/mach/devices-common.h
index bf93820..6ac2450 100644
--- a/arch/arm/plat-mxc/include/mach/devices-common.h
+++ b/arch/arm/plat-mxc/include/mach/devices-common.h
@@ -30,6 +30,7 @@ static inline struct platform_device *imx_add_platform_device(
 
 #include <linux/fec.h>
 struct imx_fec_data {
+	const char *devid;
 	resource_size_t iobase;
 	resource_size_t irq;
 };
diff --git a/drivers/net/fec.c b/drivers/net/fec.c
index 885d8ba..9161a82 100644
--- a/drivers/net/fec.c
+++ b/drivers/net/fec.c
@@ -66,14 +66,31 @@
 #define FEC_QUIRK_ENET_MAC		(1 << 0)
 /* Controller needs driver to swap frame */
 #define FEC_QUIRK_SWAP_FRAME		(1 << 1)
+/* Controller uses gasket */
+#define FEC_QUIRK_USE_GASKET		(1 << 2)
 
 static struct platform_device_id fec_devtype[] = {
 	{
-		.name = DRIVER_NAME,
+		.name = "imx25-fec",
+		.driver_data = FEC_QUIRK_USE_GASKET,
+	}, {
+		.name = "imx27-fec",
 		.driver_data = 0,
 	}, {
 		.name = "imx28-fec",
 		.driver_data = FEC_QUIRK_ENET_MAC | FEC_QUIRK_SWAP_FRAME,
+	}, {
+		.name = "imx35-fec",
+		.driver_data = 0,
+	}, {
+		.name = "imx50-fec",
+		.driver_data = FEC_QUIRK_USE_GASKET,
+	}, {
+		.name = "imx51-fec",
+		.driver_data = 0,
+	}, {
+		.name = "imx53-fec",
+		.driver_data = FEC_QUIRK_USE_GASKET,
 	},
 	{ }
 };
@@ -425,7 +442,7 @@ fec_restart(struct net_device *ndev, int duplex)
 
 	} else {
 #ifdef FEC_MIIGSK_ENR
-		if (fep->phy_interface == PHY_INTERFACE_MODE_RMII) {
+		if (id_entry->driver_data & FEC_QUIRK_USE_GASKET) {
 			/* disable the gasket and wait */
 			writel(0, fep->hwp + FEC_MIIGSK_ENR);
 			while (readl(fep->hwp + FEC_MIIGSK_ENR) & 4)
@@ -434,8 +451,11 @@ fec_restart(struct net_device *ndev, int duplex)
 			/*
 			 * configure the gasket:
 			 *   RMII, 50 MHz, no loopback, no echo
+			 *   MII, 25 MHz, no loopback, no echo
 			 */
-			writel(1, fep->hwp + FEC_MIIGSK_CFGR);
+			writel((fep->phy_interface == PHY_INTERFACE_MODE_RMII) ?
+					1 : 0, fep->hwp + FEC_MIIGSK_CFGR);
+
 
 			/* re-enable the gasket */
 			writel(2, fep->hwp + FEC_MIIGSK_ENR);
-- 
1.7.4.1


^ permalink raw reply related

* Regarding sumbiting a new NIC driver to kernel.
From: Ren, Cloud @ 2011-07-01  9:09 UTC (permalink / raw)
  To: 'davem@davemloft.net', Huang, Xiong; +Cc: netdev@vger.kernel.org

Dear David S. Miller

I am working for Qualcomm(Atheros) as an engineer. Recently, we are developing a new Linux driver, "alx" , that supports AR8131, AR8151, AR8152 ,  AR8161 and etc. AR8161 is our new NIC that will be released soon.

As we know, there is a linux driver "atl1c"  in the kernel. It can also support AR8131, AR8152, AR8151. So "alx" at functionality is a little repeated with "atl1c". Now,  we hope to push the new "alx" into linux kernel and remove the old "atl1c". 

Would you have any advices to us?  If this is possible, how do I submit the new driver and remove the old driver? Can you give me a doc how to submit the driver to kernel or any hints?

Btw, why do we need to develop the new driver?
The most important reason is for convenience on maintenance 1. we need to make HW operations uniform on all supported OS, such as WinXP, Win7 and Linux.
2. As our company is continuous to release new NICs, there are more and more drivers to support those NICs. It's a pity to develop and maintain so many drivers. So we have developed the driver, "alx". We will use it to support as many NICs as possible, including NICs released in future.


Thanks
Cloud


^ permalink raw reply

* [PATCH] gianfar: code cleanups
From: Sebastian Pöhn @ 2011-07-01  9:00 UTC (permalink / raw)
  To: Linux Netdev; +Cc: Joe Perches, Sebastian Pöhn

This patch:
# moves if_vlan.h include from gianfar.c to gianfar.h
# improves readability of some gianfar nfc code

Signed-off-by: Sebastian Poehn <sebastian.poehn@belden.com>
---

 drivers/net/gianfar.c         |    1 -
 drivers/net/gianfar.h         |    2 +
 drivers/net/gianfar_ethtool.c |   51 +++++++++++++++++++++-------------------
 3 files changed, 29 insertions(+), 25 deletions(-)

diff --git a/drivers/net/gianfar.c b/drivers/net/gianfar.c
index 3321d71..d55cdf2 100644
--- a/drivers/net/gianfar.c
+++ b/drivers/net/gianfar.c
@@ -76,7 +76,6 @@
 #include <linux/netdevice.h>
 #include <linux/etherdevice.h>
 #include <linux/skbuff.h>
-#include <linux/if_vlan.h>
 #include <linux/spinlock.h>
 #include <linux/mm.h>
 #include <linux/of_mdio.h>
diff --git a/drivers/net/gianfar.h b/drivers/net/gianfar.h
index 76f14d0..9c0e56c 100644
--- a/drivers/net/gianfar.h
+++ b/drivers/net/gianfar.h
@@ -38,6 +38,7 @@
 #include <linux/mm.h>
 #include <linux/mii.h>
 #include <linux/phy.h>
+#include <linux/if_vlan.h>
 
 #include <asm/io.h>
 #include <asm/irq.h>
@@ -409,6 +410,7 @@ extern const char gfar_driver_version[];
 #define RQFCR_HASHTBL_2		0x00060000
 #define RQFCR_HASHTBL_3		0x00080000
 #define RQFCR_HASH		0x00010000
+#define RQFCR_QUEUE		0x0000FC00
 #define RQFCR_CLE		0x00000200
 #define RQFCR_RJE		0x00000100
 #define RQFCR_AND		0x00000080
diff --git a/drivers/net/gianfar_ethtool.c b/drivers/net/gianfar_ethtool.c
index 2ecdc9a..da856ba 100644
--- a/drivers/net/gianfar_ethtool.c
+++ b/drivers/net/gianfar_ethtool.c
@@ -883,7 +883,7 @@ static void gfar_set_attribute(u32 value, u32 mask, u32 flag,
 		struct filer_table *tab)
 {
 	switch (flag) {
-	/* 3bit */
+		/* 3bit */
 	case RQFCR_PID_PRI:
 		if (!(value | mask))
 			return;
@@ -1051,17 +1051,17 @@ static int gfar_convert_to_filer(struct ethtool_rx_flow_spec *rule,
 		vlan_mask = RQFPR_VLN;
 
 		/* Separate the fields */
-		id = rule->h_ext.vlan_tci & 0xFFF;
-		id_mask = rule->m_ext.vlan_tci & 0xFFF;
-		cfi = (rule->h_ext.vlan_tci >> 12) & 1;
-		cfi_mask = (rule->m_ext.vlan_tci >> 12) & 1;
-		prio = (rule->h_ext.vlan_tci >> 13) & 0x7;
-		prio_mask = (rule->m_ext.vlan_tci >> 13) & 0x7;
-
-		if (cfi == 1 && cfi_mask == 1) {
+		id = rule->h_ext.vlan_tci & VLAN_VID_MASK;
+		id_mask = rule->m_ext.vlan_tci & VLAN_VID_MASK;
+		cfi = rule->h_ext.vlan_tci & VLAN_CFI_MASK;
+		cfi_mask = rule->m_ext.vlan_tci & VLAN_CFI_MASK;
+		prio = (rule->h_ext.vlan_tci & VLAN_PRIO_MASK) >> VLAN_PRIO_SHIFT;
+		prio_mask = (rule->m_ext.vlan_tci & VLAN_PRIO_MASK) >> VLAN_PRIO_SHIFT;
+
+		if (cfi == VLAN_TAG_PRESENT && cfi_mask == VLAN_TAG_PRESENT) {
 			vlan |= RQFPR_CFI;
 			vlan_mask |= RQFPR_CFI;
-		} else if (cfi == 0 && cfi_mask == 1) {
+		} else if (cfi != VLAN_TAG_PRESENT && cfi_mask == VLAN_TAG_PRESENT) {
 			vlan_mask |= RQFPR_CFI;
 		}
 	}
@@ -1262,21 +1262,21 @@ static void gfar_cluster_filer(struct filer_table *tab)
 	}
 }
 
-/* Swaps the 0xFF80 masked bits of a1<>a2 and b1<>b2 */
-static void gfar_swap_ff80_bits(struct gfar_filer_entry *a1,
+/* Swaps the masked bits of a1<>a2 and b1<>b2 */
+static void gfar_swap_bits(struct gfar_filer_entry *a1,
 		struct gfar_filer_entry *a2, struct gfar_filer_entry *b1,
-		struct gfar_filer_entry *b2)
+		struct gfar_filer_entry *b2, u32 mask)
 {
 	u32 temp[4];
-	temp[0] = a1->ctrl & 0xFF80;
-	temp[1] = a2->ctrl & 0xFF80;
-	temp[2] = b1->ctrl & 0xFF80;
-	temp[3] = b2->ctrl & 0xFF80;
+	temp[0] = a1->ctrl & mask;
+	temp[1] = a2->ctrl & mask;
+	temp[2] = b1->ctrl & mask;
+	temp[3] = b2->ctrl & mask;
 
-	a1->ctrl &= ~0xFF80;
-	a2->ctrl &= ~0xFF80;
-	b1->ctrl &= ~0xFF80;
-	b2->ctrl &= ~0xFF80;
+	a1->ctrl &= ~mask;
+	a2->ctrl &= ~mask;
+	b1->ctrl &= ~mask;
+	b2->ctrl &= ~mask;
 
 	a1->ctrl |= temp[1];
 	a2->ctrl |= temp[0];
@@ -1305,7 +1305,7 @@ static u32 gfar_generate_mask_table(struct gfar_mask_entry *mask_table,
 				mask_table[and_index - 1].end = i - 1;
 			and_index++;
 		}
-		/* cluster starts will be separated because they should
+		/* cluster starts and ends will be separated because they should
 		 * hold their position */
 		if (tab->fe[i].ctrl & RQFCR_CLE)
 			block_index++;
@@ -1356,10 +1356,13 @@ static void gfar_sort_mask_table(struct gfar_mask_entry *mask_table,
 			new_first = mask_table[start].start + 1;
 			new_last = mask_table[i - 1].end;
 
-			gfar_swap_ff80_bits(&temp_table->fe[new_first],
+			gfar_swap_bits(&temp_table->fe[new_first],
 					&temp_table->fe[old_first],
 					&temp_table->fe[new_last],
-					&temp_table->fe[old_last]);
+					&temp_table->fe[old_last],
+					RQFCR_QUEUE | RQFCR_CLE |
+						RQFCR_RJE | RQFCR_AND
+					);
 
 			start = i;
 			size = 0;



^ permalink raw reply related

* Re: pull request: wireless-2.6 2011-06-30
From: David Miller @ 2011-07-01  8:52 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless, netdev, linux-kernel
In-Reply-To: <20110630173223.GA12963@tuxdriver.com>

From: "John W. Linville" <linville@tuxdriver.com>
Date: Thu, 30 Jun 2011 13:32:25 -0400

> Here is a batch of fixes intended for 3.0.  Arik gives us a fix for a
> potential NULL dereference in mac80211.  Emmanuel gives us a fix for a
> regression introduced by "iwlagn: support multiple TBs per command" that
> can corrupt memory.  Eugene (and Bob) gives a memory leak fix for ath5k.
> Evgeni gives us a preprocessor-related fix that makes modinfo output
> make more sense for iwlagn.  Johannes gives us a trio of fixes, all
> isolated to the bowels of iwlagn.  I overlayed a fixup on top of one of
> Johannes's patches, since there was some confusion between DMA and PCI
> API usage.  Finally, Rajkumar gives us an ath9k fix to ensure the chip
> is properly awakened even if there is no active interface when the
> resume occurs.
> 
> Please let me know if there are problems!

Pulled, thanks John.

^ permalink raw reply

* [PATCH] net: sh_eth: remove __flush_purge_region
From: Yoshihiro Shimoda @ 2011-07-01  8:52 UTC (permalink / raw)
  To: davem; +Cc: netdev, SH-Linux

It is a function of SuperH architecture. There is no good to use
the function on a driver generally. So, the driver uses
dma_map_single() instead of __flush_purge_region.

Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
---
 drivers/net/sh_eth.c |    8 ++++----
 1 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/net/sh_eth.c b/drivers/net/sh_eth.c
index 8a72a97..09b5aa8 100644
--- a/drivers/net/sh_eth.c
+++ b/drivers/net/sh_eth.c
@@ -33,7 +33,6 @@
 #include <linux/pm_runtime.h>
 #include <linux/slab.h>
 #include <linux/ethtool.h>
-#include <asm/cacheflush.h>

 #include "sh_eth.h"

@@ -864,6 +863,8 @@ static int sh_eth_txfree(struct net_device *ndev)
 			break;
 		/* Free the original skb. */
 		if (mdp->tx_skbuff[entry]) {
+			dma_unmap_single(&ndev->dev, txdesc->addr,
+					 txdesc->buffer_length, DMA_TO_DEVICE);
 			dev_kfree_skb_irq(mdp->tx_skbuff[entry]);
 			mdp->tx_skbuff[entry] = NULL;
 			freeNum++;
@@ -1487,13 +1488,12 @@ static int sh_eth_start_xmit(struct sk_buff *skb, struct net_device *ndev)
 	entry = mdp->cur_tx % TX_RING_SIZE;
 	mdp->tx_skbuff[entry] = skb;
 	txdesc = &mdp->tx_ring[entry];
-	txdesc->addr = virt_to_phys(skb->data);
 	/* soft swap. */
 	if (!mdp->cd->hw_swap)
 		sh_eth_soft_swap(phys_to_virt(ALIGN(txdesc->addr, 4)),
 				 skb->len + 2);
-	/* write back */
-	__flush_purge_region(skb->data, skb->len);
+	txdesc->addr = dma_map_single(&ndev->dev, skb->data, skb->len,
+				      DMA_TO_DEVICE);
 	if (skb->len < ETHERSMALL)
 		txdesc->buffer_length = ETHERSMALL;
 	else
-- 
1.7.1

^ permalink raw reply related

* Re: [PATCH net-next v2] net: de4x5: Omit check for multicast bit in netdev_for_each_mc_addr
From: David Miller @ 2011-07-01  8:51 UTC (permalink / raw)
  To: tklauser; +Cc: grundler, netdev
In-Reply-To: <1309505872-28090-1-git-send-email-tklauser@distanz.ch>

From: Tobias Klauser <tklauser@distanz.ch>
Date: Fri,  1 Jul 2011 09:37:52 +0200

> There is no need to check for the address being a multicast address in
> the netdev_for_each_mc_addr loop, so remove it.
> 
> Signed-off-by: Tobias Klauser <tklauser@distanz.ch>

Applied, thanks.

^ permalink raw reply

* Re: Skipping past TCP lost packet in userspace
From: Josh Lehan @ 2011-07-01  8:39 UTC (permalink / raw)
  To: Neil Horman
  Cc: Josh Lehan, janardhan.iyengar, Janardhan Iyengar, rick.jones2,
	Yuchung Cheng, netdev, Bryan Ford
In-Reply-To: <20110630143614.GA4392@shamino.rdu.redhat.com>

On 06/30/2011 07:36 AM, Neil Horman wrote:
> I'll leave the rest of this alone, since its pretty obvious that no one is going
> to break TCP for you, but just so that you're aware, The only reason you have to

That's the fundamental disconnect we've been trying to communicate: TCP
*won't break*.  None of the rules of TCP are broken, from the wire's
point of view.  The OS merely gets a richer API, from the application's
point of view, to optimize the TCP protocol implementation to serve a
wider variety of needs.

> use the 2-Wire gateway that AT&T provides is because there are no commercially
> available routers that support the uplink interface (which I expect will change

That would be good to give the customer a choice of access devices with
which to get on the network, and let the market device what is best,
instead of AT&T dictating what's allowed.  I'm getting deja vu of a
famous legal case from 27 years ago.

> eventually).  In the time being, if you want to use a different router, place
> the RG in bridge mode by selecting a host as your DMZ device.  That will assign
> the wan address to that connected device via DHCP and allow you to pass whatever
> traffic you want through it.  I use it to pass SCTP and IPv6 traffice all the
> time, works great.

Wow, that's news to me, that it allows this.

http://www.ka9q.net/Uverse/

Have the limitations in these documents been addressed?  If so, kudos to
AT&T.

Josh Lehan

^ permalink raw reply

* HELLO
From: Zainur Binta  Zakaria @ 2011-07-01  6:12 UTC (permalink / raw)


Zainur Binta  Zakaria Advocate & solicitor
No. 18 & 20 1st Floor 
Jalan Kampung Nyabor 
96000 Sibu,Malaysia

Dear Friend,

I am Barrister Zainur Bin Zakaria, an attorney at law. A deceased client of 
mine, that shares the same last name as yours, died as a result of His heart 
condition, due to the death of all the members of his family in the tsunami 
disaster on the 26th December 2004 in Sumatra Indonesia. As reported by 
http://en.wikipedia.org/wiki/2004_Indian_Ocean_earthquake. 
 
I have contacted you to assist in distributing the money left behind by my 
client before it is confiscated or declared unserviceable by the bank where this 
deposit valued at Five Million, Six Hundred Thousand United States Dollars 
(US$5.6 Million). This bank has issued me a notice to contact the next of kin, 
or the account will be confiscated.
 
My proposition to you is to seek your consent to present you as the next-of-kin 
and beneficiary of my named client, since you have the same last name, so that 
the proceeds of this account can be paid to you.  Then we can share the amount 
on a mutually agreed-upon percentage. All legal documents to back up your claim 
as my client's next-of-kin will be provided. All I require is your honest 
cooperation to enable us see this transaction through. 
 
 This will be executed under a legitimate arrangement that will protect you from 
many breach of the law.  If this business proposition offends your moral values, 
do accept my apology. I must use this opportunity to implore you to exercise the 
utmost indulgence to keep this matter extraordinary confidential, whatever your 
decision, while I await your prompt response. Please contact me at once to 
indicate your interest. I will like you to acknowledge the receipt of this 
e-mail as soon as possible via my private Email: zakaria2010@w.cn
 
And treats with absolute confidentiality and sincerity. I look forward to your 
quick reply.

Best regards, 

Zainur Bin Zakaria
 Attorney at Law

^ permalink raw reply

* Re: IEEE 802.1ag / 802.1x / Y1731
From: Satendra... @ 2011-07-01  8:16 UTC (permalink / raw)
  To: netdev
In-Reply-To: <BANLkTingLv9XxLqU7nQSct8wqhyvkq=LqA@mail.gmail.com>

Hello All,
Could anyone please tell me whether there is any support in Linux
networking stack
for 802.1ag ? If yes please mention the linux version.
What I need to do is to use CFM OAM (802.1ag) open source client on
our routers running linux
on them. Open source client to be used is dot1ag utils.

Thanks,
Satendra

On 24 June 2011 17:36, Satendra... <satendra.pratap@gmail.com> wrote:
> Hi,
> Could someone please tell me which version of linux has got support
> for below (all three) protocols:
> - IEEE 802.1ag
> - 802.1x
> - Y1731
>
> Thanks,
> Satendra
>

^ permalink raw reply

* [PATCH net-next v2] net: de4x5: Omit check for multicast bit in netdev_for_each_mc_addr
From: Tobias Klauser @ 2011-07-01  7:37 UTC (permalink / raw)
  To: David S. Miller, Grant Grundler; +Cc: netdev
In-Reply-To: <1309349760-1776-1-git-send-email-tklauser@distanz.ch>

There is no need to check for the address being a multicast address in
the netdev_for_each_mc_addr loop, so remove it.

Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
---
 drivers/net/tulip/de4x5.c |    5 +----
 1 files changed, 1 insertions(+), 4 deletions(-)

diff --git a/drivers/net/tulip/de4x5.c b/drivers/net/tulip/de4x5.c
index efaa1d6..d8db2b6 100644
--- a/drivers/net/tulip/de4x5.c
+++ b/drivers/net/tulip/de4x5.c
@@ -1964,9 +1964,7 @@ SetMulticastFilter(struct net_device *dev)
 	omr |= OMR_PM;                       /* Pass all multicasts */
     } else if (lp->setup_f == HASH_PERF) {   /* Hash Filtering */
 	netdev_for_each_mc_addr(ha, dev) {
-	    addrs = ha->addr;
-	    if ((*addrs & 0x01) == 1) {      /* multicast address? */
-		crc = ether_crc_le(ETH_ALEN, addrs);
+		crc = ether_crc_le(ETH_ALEN, ha->addr);
 		hashcode = crc & HASH_BITS;  /* hashcode is 9 LSb of CRC */
 
 		byte = hashcode >> 3;        /* bit[3-8] -> byte in filter */
@@ -1977,7 +1975,6 @@ SetMulticastFilter(struct net_device *dev)
 		    byte -= 1;
 		}
 		lp->setup_frame[byte] |= bit;
-	    }
 	}
     } else {                                 /* Perfect filtering */
 	netdev_for_each_mc_addr(ha, dev) {
-- 
1.7.5.4


^ permalink raw reply related

* Re: [PATCH net-next] net: de4x5: Omit check for multicast bit in netdev_for_each_mc_addr
From: Tobias Klauser @ 2011-07-01  7:25 UTC (permalink / raw)
  To: David Miller; +Cc: grundler, netdev
In-Reply-To: <20110630.235730.726339338074212677.davem@davemloft.net>

On 2011-07-01 at 08:57:30 +0200, David Miller <davem@davemloft.net> wrote:
> From: Tobias Klauser <tklauser@distanz.ch>
> Date: Wed, 29 Jun 2011 14:16:00 +0200
> 
> > There is no need to check for the address being a multicast address in
> > the netdev_for_each_mc_addr loop, so remove it.
> > 
> > Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
> 
> Please build test your patches!

Sorry for the mess. Here's an updated patch, not removing the addrs
local variable.

There is no need to check for the address being a multicast address in
the netdev_for_each_mc_addr loop, so remove it.

Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
---
 drivers/net/tulip/de4x5.c |    5 +----
 1 files changed, 1 insertions(+), 4 deletions(-)

diff --git a/drivers/net/tulip/de4x5.c b/drivers/net/tulip/de4x5.c
index efaa1d6..d8db2b6 100644
--- a/drivers/net/tulip/de4x5.c
+++ b/drivers/net/tulip/de4x5.c
@@ -1964,9 +1964,7 @@ SetMulticastFilter(struct net_device *dev)
 	omr |= OMR_PM;                       /* Pass all multicasts */
     } else if (lp->setup_f == HASH_PERF) {   /* Hash Filtering */
 	netdev_for_each_mc_addr(ha, dev) {
-	    addrs = ha->addr;
-	    if ((*addrs & 0x01) == 1) {      /* multicast address? */
-		crc = ether_crc_le(ETH_ALEN, addrs);
+		crc = ether_crc_le(ETH_ALEN, ha->addr);
 		hashcode = crc & HASH_BITS;  /* hashcode is 9 LSb of CRC */
 
 		byte = hashcode >> 3;        /* bit[3-8] -> byte in filter */
@@ -1977,7 +1975,6 @@ SetMulticastFilter(struct net_device *dev)
 		    byte -= 1;
 		}
 		lp->setup_frame[byte] |= bit;
-	    }
 	}
     } else {                                 /* Perfect filtering */
 	netdev_for_each_mc_addr(ha, dev) {
-- 
1.7.5.4


^ permalink raw reply related

* Re: [PATCH net-next] net: de4x5: Omit check for multicast bit in netdev_for_each_mc_addr
From: David Miller @ 2011-07-01  7:31 UTC (permalink / raw)
  To: tklauser; +Cc: grundler, netdev
In-Reply-To: <20110701072533.GY28247@distanz.ch>

From: Tobias Klauser <tklauser@distanz.ch>
Date: Fri, 1 Jul 2011 09:25:33 +0200

> On 2011-07-01 at 08:57:30 +0200, David Miller <davem@davemloft.net> wrote:
>> From: Tobias Klauser <tklauser@distanz.ch>
>> Date: Wed, 29 Jun 2011 14:16:00 +0200
>> 
>> > There is no need to check for the address being a multicast address in
>> > the netdev_for_each_mc_addr loop, so remove it.
>> > 
>> > Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
>> 
>> Please build test your patches!
> 
> Sorry for the mess. Here's an updated patch, not removing the addrs
> local variable.
> 
> There is no need to check for the address being a multicast address in
> the netdev_for_each_mc_addr loop, so remove it.
> 
> Signed-off-by: Tobias Klauser <tklauser@distanz.ch>

Do not mix patch submissions into existing discussions.

Please, instead, make a new fresh patch submission.

Otherwise I have to do a lot of work editing your commit
log messages and the headers.

Thanks.

^ permalink raw reply

* Re: [PATCH 0/2] netpoll: Trivial updates
From: David Miller @ 2011-07-01  7:06 UTC (permalink / raw)
  To: amwang; +Cc: joe, linux-kernel, netdev
In-Reply-To: <4E0D43C3.5090502@redhat.com>

From: Cong Wang <amwang@redhat.com>
Date: Fri, 01 Jul 2011 11:49:23 +0800

> 于 2011年07月01日 11:35, Joe Perches 写道:
>>
>>> BTW, you can kill the export of netpoll_send_skb_on_dev() too.
>>
>> Not too sure about that.
>>
>> It's used in netpoll.h by netpoll_send_skb.
>> It could be called from anywhere.
>> It's currently called/used by bonding.h.
> 
> % git grep netpoll_send_skb_on_dev .
> include/linux/netpoll.h:void netpoll_send_skb_on_dev(struct netpoll
> *np, struct sk_buff *skb,
> include/linux/netpoll.h: netpoll_send_skb_on_dev(np, skb, np->dev);
> net/core/netpoll.c:void netpoll_send_skb_on_dev(struct netpoll *np,
> struct sk_buff *skb,
> net/core/netpoll.c:EXPORT_SYMBOL(netpoll_send_skb_on_dev);
> 
> No modules use it...

Right, this is a relic that bonding was using at one point
in the past but it no longer does.

^ permalink raw reply

* Re: [PATCH net-next] net: ucc_geth: Omit check for multicast bit in netdev_for_each_mc_addr
From: David Miller @ 2011-07-01  6:57 UTC (permalink / raw)
  To: tklauser; +Cc: leoli, netdev, linuxppc-dev
In-Reply-To: <1309349793-1864-1-git-send-email-tklauser@distanz.ch>

From: Tobias Klauser <tklauser@distanz.ch>
Date: Wed, 29 Jun 2011 14:16:33 +0200

> There is no need to check for the address being a multicast address in
> the netdev_for_each_mc_addr loop, so remove it.
> 
> Signed-off-by: Tobias Klauser <tklauser@distanz.ch>

Applied.

^ permalink raw reply

* Re: [PATCH net-next-2.6 0/3] be2net fixes
From: David Miller @ 2011-07-01  6:59 UTC (permalink / raw)
  To: sathya.perla; +Cc: netdev
In-Reply-To: <1309426301-15783-1-git-send-email-sathya.perla@emulex.com>

From: Sathya Perla <sathya.perla@emulex.com>
Date: Thu, 30 Jun 2011 15:01:41 +0530

> Pls apply.
> 
> Sathya Perla (3):
>   be2net: fix certain cmd failure logging
>   be2net: create/destroy rx-queues on interface open/close
>   be2net: clear intr bit in be_probe()

Applied, but I had to fix up many whitespace problems.

Some of your lines began with mixes of spaces and tabs.

Some of your lines had trailing whitespace.

^ permalink raw reply

* Re: [PATCH net-next] net: am79c961a: Omit check for multicast bit in netdev_for_each_mc_addr
From: David Miller @ 2011-07-01  6:56 UTC (permalink / raw)
  To: tklauser; +Cc: linux, linux-arm-kernel, netdev
In-Reply-To: <1309349686-1506-1-git-send-email-tklauser@distanz.ch>

From: Tobias Klauser <tklauser@distanz.ch>
Date: Wed, 29 Jun 2011 14:14:46 +0200

> There is no need to check for the address being a multicast address in
> the netdev_for_each_mc_addr loop, so remove it.
> 
> Signed-off-by: Tobias Klauser <tklauser@distanz.ch>

Applied.

^ permalink raw reply

* Re: [PATCHv2 NEXT 2/2] qlcnic: add external loopback support
From: David Miller @ 2011-07-01  6:58 UTC (permalink / raw)
  To: amit.salecha; +Cc: bhutchings, netdev, ameen.rahman, sucheta.chakraborty
In-Reply-To: <1309413650-15952-3-git-send-email-amit.salecha@qlogic.com>

From: amit.salecha@qlogic.com
Date: Wed, 29 Jun 2011 23:00:50 -0700

> From: Amit Kumar Salecha <amit.salecha@qlogic.com>
> 
> o Add external loopback test in self test:
>   - Send set external loopback mode request to fw.
>      To quiscent other storage functions.
>   - Perform test
>   - Send unset loopback mode request to fw.
> 
> o Rename ilb to lb.
> o Update driver version 5.0.20.
> 
> Signed-off-by: Sucheta Chakraborty <sucheta.chakraborty@qlogic.com>
> Signed-off-by: Amit Kumar Salecha <amit.salecha@qlogic.com>

Applied.

^ permalink raw reply

* Re: [PATCHv2 NEXT 1/2] net: add external loopback test in ethtool self test
From: David Miller @ 2011-07-01  6:58 UTC (permalink / raw)
  To: amit.salecha; +Cc: bhutchings, netdev, ameen.rahman, sucheta.chakraborty
In-Reply-To: <1309413650-15952-2-git-send-email-amit.salecha@qlogic.com>

From: amit.salecha@qlogic.com
Date: Wed, 29 Jun 2011 23:00:49 -0700

> From: Amit Kumar Salecha <amit.salecha@qlogic.com>
> 
> External loopback test can be performed by application without any driver
> support on normal Ethernet cards.
> But on CNA devices, where multiple functions share same physical port.
> Here internal loopback test and external loopback test can be initiated by
> multiple functions at same time. To co exist all functions, firmware need
> to regulate what test can be run by which function. So before performing external
> loopback test, command need to send to firmware, which will quiescent other functions.
> 
> User may not want to run external loopback test always. As special cable need to be
> connected for this test.
> So adding explicit flag in ethtool self test, which will specify interface
> to perform external loopback test.
>  ETH_TEST_FL_EXTERNAL_LB: Application set to request external loopback test
>  ETH_TEST_FL_EXTERNAL_LB_DONE: Driver ack if test performed
> 
> Signed-off-by: Amit Kumar Salecha <amit.salecha@qlogic.com>

Applied.

^ permalink raw reply

* Re: [PATCH net-next] net: de4x5: Omit check for multicast bit in netdev_for_each_mc_addr
From: David Miller @ 2011-07-01  6:57 UTC (permalink / raw)
  To: tklauser; +Cc: grundler, netdev
In-Reply-To: <1309349760-1776-1-git-send-email-tklauser@distanz.ch>

From: Tobias Klauser <tklauser@distanz.ch>
Date: Wed, 29 Jun 2011 14:16:00 +0200

> There is no need to check for the address being a multicast address in
> the netdev_for_each_mc_addr loop, so remove it.
> 
> Signed-off-by: Tobias Klauser <tklauser@distanz.ch>

Please build test your patches!

> @@ -1954,7 +1954,6 @@ SetMulticastFilter(struct net_device *dev)
>      u16 hashcode;
>      u32 omr, crc;
>      char *pa;
> -    unsigned char *addrs;
>  
>      omr = inl(DE4X5_OMR);
>      omr &= ~(OMR_PR | OMR_PM);

You removed this local variable 'addrs' but you did not remove
all uses of that variable, so the build will fail.

^ permalink raw reply

* Re: [PATCH net-next] net: iseries_veth: Omit check for multicast bit in netdev_for_each_mc_addr
From: David Miller @ 2011-07-01  6:57 UTC (permalink / raw)
  To: tklauser; +Cc: netdev
In-Reply-To: <1309349735-1690-1-git-send-email-tklauser@distanz.ch>

From: Tobias Klauser <tklauser@distanz.ch>
Date: Wed, 29 Jun 2011 14:15:35 +0200

> There is no need to check for the address being a multicast address in
> the netdev_for_each_mc_addr loop, so remove it.
> 
> Signed-off-by: Tobias Klauser <tklauser@distanz.ch>

Applied.

^ permalink raw reply

* Re: [PATCH net-next] net: depca: Omit check for multicast bit in netdev_for_each_mc_addr
From: David Miller @ 2011-07-01  6:56 UTC (permalink / raw)
  To: tklauser; +Cc: netdev
In-Reply-To: <1309349715-1604-1-git-send-email-tklauser@distanz.ch>

From: Tobias Klauser <tklauser@distanz.ch>
Date: Wed, 29 Jun 2011 14:15:15 +0200

> There is no need to check for the address being a multicast address in
> the netdev_for_each_mc_addr loop, so remove it.
> 
> Signed-off-by: Tobias Klauser <tklauser@distanz.ch>

Applied.

^ permalink raw reply


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