Netdev List
 help / color / mirror / Atom feed
* Re: [PATCH] can: kvaser_usb: Add support for Kvaser CAN/USB devices
From: Olivier Sobrie @ 2012-08-02 12:16 UTC (permalink / raw)
  To: Marc Kleine-Budde; +Cc: Wolfgang Grandegger, linux-can, netdev
In-Reply-To: <501A6AE7.9060508@pengutronix.de>

On Thu, Aug 02, 2012 at 01:56:23PM +0200, Marc Kleine-Budde wrote:
> BTW: is it possible to update the firmware on these devices?

Yes it possible. But I don't know how to do it... I never did it.
I saw on their website that they propose a zipfile with new firmwares.
Inside the zipfile there is a tool 'Update.exe' which, I suppose, does
the upgrade.

Kr,

-- 
Olivier

^ permalink raw reply

* Re: [PATCH] firmware: Remove obsolete Chelsio cxgb3 firmware
From: Tim Gardner @ 2012-08-02 12:28 UTC (permalink / raw)
  To: David Miller
  Cc: linux-kernel, paul.gortmaker, ben, JBottomley, dan.j.williams,
	divy, netdev
In-Reply-To: <20120802.002000.2023014747210925552.davem@davemloft.net>

On 08/02/2012 01:20 AM, David Miller wrote:
> 
> "git am" refuses to apply this to current 'net':
> 
> Applying: firmware: Remove obsolete Chelsio cxgb3 firmware
> error: removal patch leaves file contents
> error: firmware/cxgb3/t3fw-7.10.0.bin.ihex: patch does not apply
> 

Paul Gortmaker suggested I use 'git format-patch --irreversible-delete'
to produce shorter patches, but then even I can't reapply it.

How about a pull request against net-next instead ?

The following changes since commit 1a9b4993b70fb1884716902774dc9025b457760d:

  Merge branch 'upstream' of
git://git.linux-mips.org/pub/scm/ralf/upstream-linus (2012-08-01
16:47:15 -0700)

are available in the git repository at:


  git://kernel.ubuntu.com/rtg/net-next.git master

for you to fetch changes up to 044b722f36a17bc5f7f472cc3246cb15a430bb0e:

  firmware: Remove obsolete Chelsio cxgb3 firmware (2012-08-02 06:23:25
-0600)

----------------------------------------------------------------
Tim Gardner (1):
      firmware: Remove obsolete Chelsio cxgb3 firmware

 firmware/Makefile                   |    1 -
 firmware/cxgb3/t3fw-7.10.0.bin.ihex | 1935
-----------------------------------
 2 files changed, 1936 deletions(-)
 delete mode 100644 firmware/cxgb3/t3fw-7.10.0.bin.ihex
-- 
Tim Gardner tim.gardner@canonical.com

^ permalink raw reply

* Re: [PATCH] cdc-ncm: tag Ericsson WWAN devices (eg F5521gw) with FLAG_WWAN
From: Peter Meiser @ 2012-08-02 12:30 UTC (permalink / raw)
  To: public-netdev-u79uwXL29TY76Z2rM5mHXA,
	public-linux-usb-u79uwXL29TY76Z2rM5mHXA
In-Reply-To: <1343155402.29196.7.camel@dcbw.foobar.com>




Hello,

looking at http://sourceforge.net/apps/mediawiki/mbm/index.php?title=Main_Page#Supported_devices, there are branded Ericsson devices from Dell and Toshiba.

The to-be-added vendor IDs are 0x413c for Dell and 0x0930 for Toshiba.

Please find attached a patch to add these vendor IDs.

Signed-off-by: Peter Meiser <meiser@gmx-topmail.de>
---

diff -Naur a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c
--- a/drivers/net/usb/cdc_ncm.c
+++ b/drivers/net/usb/cdc_ncm.c
@@ -1233,6 +1233,26 @@
 	  .driver_info = (unsigned long) &wwan_info,
 	},
 
+	/* Dell branded MBM devices like DW5550 */
+	{ .match_flags = USB_DEVICE_ID_MATCH_INT_INFO
+		| USB_DEVICE_ID_MATCH_VENDOR,
+	  .idVendor = 0x413c,
+	  .bInterfaceClass = USB_CLASS_COMM,
+	  .bInterfaceSubClass = USB_CDC_SUBCLASS_NCM,
+	  .bInterfaceProtocol = USB_CDC_PROTO_NONE,
+	  .driver_info = (unsigned long) &wwan_info,
+	},
+
+	/* Toshiba branded MBM devices */
+	{ .match_flags = USB_DEVICE_ID_MATCH_INT_INFO
+		| USB_DEVICE_ID_MATCH_VENDOR,
+	  .idVendor = 0x0930,
+	  .bInterfaceClass = USB_CLASS_COMM,
+	  .bInterfaceSubClass = USB_CDC_SUBCLASS_NCM,
+	  .bInterfaceProtocol = USB_CDC_PROTO_NONE,
+	  .driver_info = (unsigned long) &wwan_info,
+	},
+
 	/* Generic CDC-NCM devices */
 	{ USB_INTERFACE_INFO(USB_CLASS_COMM,
 		USB_CDC_SUBCLASS_NCM, USB_CDC_PROTO_NONE),

^ permalink raw reply

* Re: [PATCH] can: kvaser_usb: Add support for Kvaser CAN/USB devices
From: Marc Kleine-Budde @ 2012-08-02 12:33 UTC (permalink / raw)
  To: Olivier Sobrie; +Cc: Wolfgang Grandegger, linux-can, netdev
In-Reply-To: <20120802121643.GA12913@hposo>

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

On 08/02/2012 02:16 PM, Olivier Sobrie wrote:
> On Thu, Aug 02, 2012 at 01:56:23PM +0200, Marc Kleine-Budde wrote:
>> BTW: is it possible to update the firmware on these devices?
> 
> Yes it possible. But I don't know how to do it... I never did it.
> I saw on their website that they propose a zipfile with new firmwares.
> Inside the zipfile there is a tool 'Update.exe' which, I suppose, does
> the upgrade.

...on windows only :). If they would be cool, they support dfu.

Marc

-- 
Pengutronix e.K.                  | Marc Kleine-Budde           |
Industrial Linux Solutions        | Phone: +49-231-2826-924     |
Vertretung West/Dortmund          | Fax:   +49-5121-206917-5555 |
Amtsgericht Hildesheim, HRA 2686  | http://www.pengutronix.de   |


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 262 bytes --]

^ permalink raw reply

* Re: Premature timeout for MLDv1 Host compatibility mode?
From: David Stevens @ 2012-08-02 12:58 UTC (permalink / raw)
  To: Dragos Ilie; +Cc: netdev, netdev-owner
In-Reply-To: <CAOLNa-dCpLG4XCarzbSb=ptu-KGVX_Fghv4Z_CDQ8HBF_n-rGQ@mail.gmail.com>

netdev-owner@vger.kernel.org wrote on 07/26/2012 10:57:43 AM:

> RFC 3810 says that the timeout should be computed as
> Robustness_Variable * Query_Interval + Query_Response_Interval. This
> suggests that the line where switchback is computed should be changed
> to something like
> 
> switchback = (idev->mc_qrv * 125 * HZ)  + max_delay;
> 
> where 125 is the default Query_Interval in seconds

Dragos,
        I agree that it's too short, but this shouldn't be using the
default value, but rather the actual value of the querier, if one is 
present,
as calculated from a QQIC in a query. I suggest saving the QQI,
decoded, in a new "idev->mc_qqi" which should be initialized to 125
but updated by received queries and then using:

switchback = idev->mc_qrv * idev->mc_qqi * HZ + max_delay;

                                                +-DLS

^ permalink raw reply

* [PATCH 1/1] ipv6 : ip6mr.c : Fix can't match the IPv6 multicast packets with input net device in netfilter FORWARD chain.
From: Jun Zhao @ 2012-08-02 13:00 UTC (permalink / raw)
  To: David S. Miller, Alexey Kuznetsov, James Morris,
	Hideaki YOSHIFUJI, netdev
  Cc: mypopydev

Current kernel change the skb's net device with output device before netfilter FORWARD chain,
that will lead to can't match the IPv6 multicast packets with input net device in netfilter
FORWARD chain.

the test case for reproduce this issue as follow:

IPv6 multicast udp stream from eth0(input device) to eth1(output device)

Dst Addr: Port
{ff03::4}:6789 --->

                    Router
         +---------------------------+
-------> | [eth0] --FORWARD--> [eth1]| ------->
         +---------------------------+

ip6tables -I FORWARD -p udp -i eth0 -o eth1 --dst ff03::4 -j ACCEPT [first rules ]
ip6tables -A FORWARD -p udp -i eth1 -o eth1 --dst ff03::4 -j ACCEPT [second rules]

Before fix this issue, it will match the second rules not the first rules. you can used
command "ip6tables -L -vnx" to check the match result.

Signed-off-by: Jun Zhao <mypopydev@gmail.com>
---
 net/ipv6/ip6mr.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/net/ipv6/ip6mr.c b/net/ipv6/ip6mr.c
index 4532973..a9d3dd7 100644
--- a/net/ipv6/ip6mr.c
+++ b/net/ipv6/ip6mr.c
@@ -1946,7 +1946,7 @@ static int ip6mr_forward2(struct net *net, struct mr6_table *mrt,
 	 * result in receiving multiple packets.
 	 */
 	dev = vif->dev;
-	skb->dev = dev;
+
 	vif->pkt_out++;
 	vif->bytes_out += skb->len;
 
-- 
1.7.2.5

^ permalink raw reply related

* Is it the right time to write to you?))
From: Justina Tores @ 2012-08-02 13:12 UTC (permalink / raw)
  To: steve@aviaselect.com

I'm ur sweetest strawberry. A chick from your hottest fantasies! 
I could demonstrate images of mine if you want it and u'll understand that I am right. 
All of ur dreams would be about me! 
My name is Justina and I'm a very playful female. 
Let's have some chat and there're no hesitations u will be wishing me! Maybe we will go somewhere, go traveling or have fun in my bedroom. 
Let's start satisfying ur fantasies together, honey!

^ permalink raw reply

* Re: [PATCH] can: kvaser_usb: Add support for Kvaser CAN/USB devices
From: Olivier Sobrie @ 2012-08-02 13:20 UTC (permalink / raw)
  To: Marc Kleine-Budde; +Cc: Wolfgang Grandegger, linux-can, netdev
In-Reply-To: <501A73B4.6030203@pengutronix.de>

On Thu, Aug 02, 2012 at 02:33:56PM +0200, Marc Kleine-Budde wrote:
> On 08/02/2012 02:16 PM, Olivier Sobrie wrote:
> > On Thu, Aug 02, 2012 at 01:56:23PM +0200, Marc Kleine-Budde wrote:
> >> BTW: is it possible to update the firmware on these devices?
> > 
> > Yes it possible. But I don't know how to do it... I never did it.
> > I saw on their website that they propose a zipfile with new firmwares.
> > Inside the zipfile there is a tool 'Update.exe' which, I suppose, does
> > the upgrade.
> 
> ...on windows only :). If they would be cool, they support dfu.

Indeed. I'll check if they are cool ;-)

-- 
Olivier

^ permalink raw reply

* Re: Premature timeout for MLDv1 Host compatibility mode?
From: Dragos Ilie @ 2012-08-02 13:28 UTC (permalink / raw)
  To: David Stevens; +Cc: netdev, netdev-owner
In-Reply-To: <OFB6FB6105.8DE1252A-ON85257A4E.004637D4-85257A4E.00474EEF@us.ibm.com>

On Thu, Aug 2, 2012 at 2:58 PM, David Stevens <dlstevens@us.ibm.com> wrote:
> netdev-owner@vger.kernel.org wrote on 07/26/2012 10:57:43 AM:
>
>> RFC 3810 says that the timeout should be computed as
>> Robustness_Variable * Query_Interval + Query_Response_Interval. This
>> suggests that the line where switchback is computed should be changed
>> to something like
>>
>> switchback = (idev->mc_qrv * 125 * HZ)  + max_delay;
>>
>> where 125 is the default Query_Interval in seconds
>
> Dragos,
>         I agree that it's too short, but this shouldn't be using the
> default value, but rather the actual value of the querier, if one is
> present,
> as calculated from a QQIC in a query. I suggest saving the QQI,
> decoded, in a new "idev->mc_qqi" which should be initialized to 125
> but updated by received queries and then using:
>
> switchback = idev->mc_qrv * idev->mc_qqi * HZ + max_delay;
>
>                                                 +-DLS
>

David,

MLDv1 packets do not have a QQIC field in the Query header. That is a
available for MLDv2 only. Consequently, MLDv1 queriers should fallback
 on the Query Interval variable, which has a  default value of 125
seconds. Since the Query Interval value is not user-configurable, I
assume that using the default value is a reasonable choice.

RFC 3810(MLDv2)  does mention that the Older Version Querier Present
Timeout must be calculated using the Query Interval from the last
received Query. I think the RFC is wrong on that point because I don't
see how a MLDv1 querier can convey its Query Interval to a listener.

Regards,
Dragos

^ permalink raw reply

* Re: v3.5: NETDEV WATCHDOG: eth0 (r8169): transmit queue 0 timed out
From: George Spelvin @ 2012-08-02 13:32 UTC (permalink / raw)
  To: romieu; +Cc: linux, netdev
In-Reply-To: <20120801232953.3791.qmail@science.horizon.com>

My, that was exciting.

I rebooted with the drastic timeout reduction I proposed last night.
(Actuallly, I compiled a version before I realized TSO could increase the
output size, so it was set to (HZ/150) = 2 jiffies.)

Anyway, it worked fine last night, and *didn't* display the NETDEV
WATCHDOG warning on reboot.

But this morning at uptime 12 hours, (and as the office was filling up
in the morning, although there certainly was *some* traffic overnight),
things went pear-shaped:

Aug  2 12:45:11: ------------[ cut here ]------------
Aug  2 12:45:11: WARNING: at net/sched/sch_generic.c:255 dev_watchdog+0xe9/0x154()
Aug  2 12:45:11: Hardware name: MS-7376
Aug  2 12:45:11: NETDEV WATCHDOG: inside (r8169): transmit queue 0 timed out
Aug  2 12:45:11: Pid: 0, comm: swapper/3 Not tainted 3.5.0-00021-gc432f46 #162
Aug  2 12:45:11: Call Trace:
Aug  2 12:45:11: <IRQ>  [<ffffffff8131d2c2>] ? dev_watchdog+0xe9/0x154
Aug  2 12:45:11: [<ffffffff810254c9>] ? warn_slowpath_common+0x71/0x85
Aug  2 12:45:11: [<ffffffff8131d1d9>] ? netif_tx_lock+0x7a/0x7a
Aug  2 12:45:11: [<ffffffff81025541>] ? warn_slowpath_fmt+0x45/0x4a
Aug  2 12:45:11: [<ffffffff8103cf28>] ? hrtimer_interrupt+0x100/0x1a4
Aug  2 12:45:11: [<ffffffff8131d1c6>] ? netif_tx_lock+0x67/0x7a
Aug  2 12:45:11: [<ffffffff8131d2c2>] ? dev_watchdog+0xe9/0x154
Aug  2 12:45:11: [<ffffffff8104e800>] ? clockevents_program_event+0x9a/0xb6
Aug  2 12:45:11: [<ffffffff8102ea43>] ? run_timer_softirq+0x17e/0x20b
Aug  2 12:45:11: [<ffffffff8102a9b1>] ? __do_softirq+0x80/0x102
Aug  2 12:45:11: [<ffffffff81411f4c>] ? call_softirq+0x1c/0x30
Aug  2 12:45:11: [<ffffffff810032f4>] ? do_softirq+0x2c/0x60
Aug  2 12:45:11: [<ffffffff8102abe4>] ? irq_exit+0x3a/0x91
Aug  2 12:45:11: [<ffffffff81003141>] ? do_IRQ+0x81/0x97
Aug  2 12:45:11: [<ffffffff81410567>] ? common_interrupt+0x67/0x67
Aug  2 12:45:11: <EOI>  [<ffffffff81007d63>] ? default_idle+0x1e/0x32
Aug  2 12:45:11: [<ffffffff81007e87>] ? amd_e400_idle+0xb7/0xd4
Aug  2 12:45:11: [<ffffffff81008501>] ? cpu_idle+0x58/0x98
Aug  2 12:45:11: ---[ end trace d46f8d5c6451870e ]---
Aug  2 12:45:11: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:11: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:11: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:11: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:11: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:11: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:11: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:11: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:11: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:11: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:16: net_ratelimit: 255 callbacks suppressed
Aug  2 12:45:16: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:16: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:16: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:16: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:16: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:16: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:16: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:16: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:16: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:16: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:21: net_ratelimit: 258 callbacks suppressed
Aug  2 12:45:21: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:21: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:21: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:21: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:21: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:21: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:21: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:21: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:21: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:21: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:26: net_ratelimit: 262 callbacks suppressed
Aug  2 12:45:26: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:26: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:26: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:26: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:26: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:26: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:26: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:26: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:26: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:26: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:31: net_ratelimit: 262 callbacks suppressed
Aug  2 12:45:31: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:31: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:31: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:31: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:31: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:31: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:31: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:31: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:31: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:31: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:36: net_ratelimit: 259 callbacks suppressed
Aug  2 12:45:36: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:36: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:36: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:36: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:36: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:36: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:36: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:36: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:36: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:36: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:41: net_ratelimit: 261 callbacks suppressed
Aug  2 12:45:41: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:41: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:41: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:41: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:41: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:41: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:41: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:41: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:41: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:41: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:46: net_ratelimit: 248 callbacks suppressed
Aug  2 12:45:46: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:46: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:46: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:46: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:46: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:46: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:46: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:46: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:46: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:46: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:51: net_ratelimit: 248 callbacks suppressed
Aug  2 12:45:51: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:51: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:51: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:51: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:51: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:51: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:51: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:51: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:51: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:51: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:56: net_ratelimit: 258 callbacks suppressed
Aug  2 12:45:56: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:56: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:56: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:56: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:56: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:56: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:56: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:56: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:56: r8169 0000:02:00.0: inside: link up
Aug  2 12:45:56: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:01: net_ratelimit: 258 callbacks suppressed
Aug  2 12:46:01: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:01: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:01: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:01: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:01: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:01: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:01: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:01: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:01: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:01: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:06: net_ratelimit: 252 callbacks suppressed
Aug  2 12:46:06: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:06: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:06: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:06: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:06: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:06: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:06: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:06: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:06: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:06: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:11: net_ratelimit: 253 callbacks suppressed
Aug  2 12:46:11: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:11: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:11: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:11: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:11: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:11: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:11: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:11: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:11: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:11: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:16: net_ratelimit: 260 callbacks suppressed
Aug  2 12:46:16: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:16: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:16: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:16: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:16: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:16: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:16: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:16: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:16: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:16: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:21: net_ratelimit: 261 callbacks suppressed
Aug  2 12:46:21: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:21: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:21: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:21: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:21: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:21: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:21: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:21: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:21: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:21: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:26: net_ratelimit: 269 callbacks suppressed
Aug  2 12:46:26: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:26: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:26: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:26: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:26: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:26: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:26: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:26: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:26: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:26: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:31: net_ratelimit: 263 callbacks suppressed
Aug  2 12:46:31: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:31: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:31: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:31: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:31: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:31: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:31: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:31: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:31: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:31: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:36: net_ratelimit: 260 callbacks suppressed
Aug  2 12:46:36: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:36: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:36: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:36: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:36: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:36: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:36: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:36: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:36: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:36: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:41: net_ratelimit: 266 callbacks suppressed
Aug  2 12:46:41: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:41: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:41: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:41: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:41: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:41: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:41: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:41: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:41: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:41: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:46: net_ratelimit: 254 callbacks suppressed
Aug  2 12:46:46: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:46: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:46: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:46: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:46: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:46: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:46: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:46: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:46: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:46: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:51: net_ratelimit: 257 callbacks suppressed
Aug  2 12:46:51: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:51: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:51: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:51: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:51: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:51: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:51: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:51: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:52: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:52: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:56: net_ratelimit: 257 callbacks suppressed
Aug  2 12:46:56: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:56: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:56: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:56: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:56: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:56: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:56: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:57: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:57: r8169 0000:02:00.0: inside: link up
Aug  2 12:46:57: r8169 0000:02:00.0: inside: link up
Aug  2 12:47:01: net_ratelimit: 246 callbacks suppressed
Aug  2 12:47:01: r8169 0000:02:00.0: inside: link up
Aug  2 12:47:01: r8169 0000:02:00.0: inside: link up
Aug  2 12:47:01: r8169 0000:02:00.0: inside: link up
Aug  2 12:47:01: r8169 0000:02:00.0: inside: link up
Aug  2 12:47:01: r8169 0000:02:00.0: inside: link up
Aug  2 12:47:01: r8169 0000:02:00.0: inside: link up
Aug  2 12:47:02: r8169 0000:02:00.0: inside: link up
Aug  2 12:47:02: r8169 0000:02:00.0: inside: link up
Aug  2 12:47:02: r8169 0000:02:00.0: inside: link up
Aug  2 12:47:02: r8169 0000:02:00.0: inside: link up
Aug  2 12:47:06: net_ratelimit: 265 callbacks suppressed
Aug  2 12:47:06: r8169 0000:02:00.0: inside: link up
Aug  2 12:47:06: r8169 0000:02:00.0: inside: link up
Aug  2 12:47:06: r8169 0000:02:00.0: inside: link up
Aug  2 12:47:06: r8169 0000:02:00.0: inside: link up
Aug  2 12:47:07: r8169 0000:02:00.0: inside: link up
Aug  2 12:47:07: r8169 0000:02:00.0: inside: link up
Aug  2 12:47:07: r8169 0000:02:00.0: inside: link up
Aug  2 12:47:07: r8169 0000:02:00.0: inside: link up
Aug  2 12:47:07: r8169 0000:02:00.0: inside: link up
Aug  2 12:47:07: r8169 0000:02:00.0: inside: link up
Aug  2 12:47:11: net_ratelimit: 252 callbacks suppressed
Aug  2 12:47:11: r8169 0000:02:00.0: inside: link up
Aug  2 12:47:11: r8169 0000:02:00.0: inside: link up
Aug  2 12:47:12: r8169 0000:02:00.0: inside: link up
Aug  2 12:47:12: r8169 0000:02:00.0: inside: link up
Aug  2 12:47:12: r8169 0000:02:00.0: inside: link up
Aug  2 12:47:12: r8169 0000:02:00.0: inside: link up
Aug  2 12:47:12: r8169 0000:02:00.0: inside: link up
Aug  2 12:47:12: r8169 0000:02:00.0: inside: link up
Aug  2 12:47:12: r8169 0000:02:00.0: inside: link up
Aug  2 12:47:12: r8169 0000:02:00.0: inside: link up
Aug  2 12:47:16: net_ratelimit: 254 callbacks suppressed
Aug  2 12:47:16: r8169 0000:02:00.0: inside: link up
Aug  2 12:47:17: r8169 0000:02:00.0: inside: link up
Aug  2 12:47:17: r8169 0000:02:00.0: inside: link up
Aug  2 12:47:17: r8169 0000:02:00.0: inside: link up
Aug  2 12:47:17: r8169 0000:02:00.0: inside: link up
Aug  2 12:47:17: r8169 0000:02:00.0: inside: link up
Aug  2 12:47:17: r8169 0000:02:00.0: inside: link up
Aug  2 12:47:17: r8169 0000:02:00.0: inside: link up
Aug  2 12:47:17: r8169 0000:02:00.0: inside: link up
Aug  2 12:47:17: r8169 0000:02:00.0: inside: link up

# The following is me trying "ifconfig down" and "ip link set up" from
# the console to try to restart things.  First attempts didn't work, but
# something seems to have fixed it not long after.

Aug  2 12:47:18: r8169 0000:02:00.0: inside: link down
Aug  2 12:47:18: r8169 0000:02:00.0: inside: link down
Aug  2 12:47:18: IPv6: ADDRCONF(NETDEV_UP): inside: link is not ready
Aug  2 12:47:18: r8169 0000:02:00.0: inside: link down
Aug  2 12:47:21: IPv6: ADDRCONF(NETDEV_CHANGE): inside: link becomes ready
Aug  2 12:47:21: net dmz: Setting full-duplex based on MII#1 link partner capability of 45e1
Aug  2 12:47:21: net cable: Setting full-duplex based on MII#1 link partner capability of 41e1
Aug  2 12:47:37: r8169 0000:02:00.0: inside: link down
Aug  2 12:47:37: r8169 0000:02:00.0: inside: link down
Aug  2 12:47:37: IPv6: ADDRCONF(NETDEV_UP): inside: link is not ready
Aug  2 12:47:39: net_ratelimit: 58 callbacks suppressed
Aug  2 12:47:39: r8169 0000:02:00.0: inside: link up
Aug  2 12:47:39: IPv6: ADDRCONF(NETDEV_CHANGE): inside: link becomes ready
Aug  2 12:47:40: net dmz: Setting full-duplex based on MII#1 link partner capability of 45e1
Aug  2 12:47:40: net cable: Setting full-duplex based on MII#1 link partner capability of 41e1


After it came back, I did a few simple stress tests, which it survived just fine:
ping -c 1000000 -l 50 -f:
1000000 packets transmitted, 1000000 received, 0% packet loss, time 14503ms
rtt min/avg/max/mdev = 0.043/0.138/0.686/0.053 ms, pipe 50, ipg/ewma 0.014/0.102 ms

ping -s 1472 -c 1000000 -l 50 -f:
1000000 packets transmitted, 1000000 received, 0% packet loss, time 30672ms
rtt min/avg/max/mdev = 0.156/0.330/1.364/0.055 ms, pipe 50, ipg/ewma 0.030/0.350 ms

4 GiB of wire-speed copy from /dev/zero to /dev/null (dd bs=65536 count=65536 | nc):
4294967296 bytes (4.3 GB) copied, 36.6281 s, 117 MB/s


Very odd.  I'm posting this in case it is of any debugging assistance.

^ permalink raw reply

* Re: Premature timeout for MLDv1 Host compatibility mode?
From: David Stevens @ 2012-08-02 13:57 UTC (permalink / raw)
  To: Dragos Ilie; +Cc: netdev, netdev-owner
In-Reply-To: <CAOLNa-dj1N-3Lo6Bu8X4H51gxBs4B2V0qWSDFQ-2qQzjEApJfw@mail.gmail.com>

Dragos Ilie <dragos.ilie@gmail.com> wrote on 08/02/2012 09:28:49 AM:
 
> MLDv1 packets do not have a QQIC field in the Query header. That is a
> available for MLDv2 only. Consequently, MLDv1 queriers should fallback
>  on the Query Interval variable, which has a  default value of 125
> seconds. Since the Query Interval value is not user-configurable, I
> assume that using the default value is a reasonable choice.

The QQIC would come from v2 queries prior to the v1 query that
triggered us to switch to v1. But, see below.
 
> RFC 3810(MLDv2)  does mention that the Older Version Querier Present
> Timeout must be calculated using the Query Interval from the last
> received Query. I think the RFC is wrong on that point because I don't
> see how a MLDv1 querier can convey its Query Interval to a listener.

I'll look through this some more. I think using a fixed timeout
is a bad idea since it doesn't account for shorter or longer interval
queriers intentionally configured that way. Ideally it should,
of course, be a positive indication that the v1 querier is gone
based on v1 querier data (your point).

                                                +-DLS

^ permalink raw reply

* Re: Premature timeout for MLDv1 Host compatibility mode?
From: Dragos Ilie @ 2012-08-02 14:03 UTC (permalink / raw)
  To: David Stevens; +Cc: netdev, netdev-owner
In-Reply-To: <OF675087EF.EDC93ADE-ON85257A4E.004B2D96-85257A4E.004CB6BE@us.ibm.com>

On Thu, Aug 2, 2012 at 3:57 PM, David Stevens <dlstevens@us.ibm.com> wrote:
> Dragos Ilie <dragos.ilie@gmail.com> wrote on 08/02/2012 09:28:49 AM:
>
>> MLDv1 packets do not have a QQIC field in the Query header. That is a
>> available for MLDv2 only. Consequently, MLDv1 queriers should fallback
>>  on the Query Interval variable, which has a  default value of 125
>> seconds. Since the Query Interval value is not user-configurable, I
>> assume that using the default value is a reasonable choice.
>
> The QQIC would come from v2 queries prior to the v1 query that
> triggered us to switch to v1. But, see below.

How about the scenario where you have only MLDv1 queriers? There will
be no prior v2 query

>
>> RFC 3810(MLDv2)  does mention that the Older Version Querier Present
>> Timeout must be calculated using the Query Interval from the last
>> received Query. I think the RFC is wrong on that point because I don't
>> see how a MLDv1 querier can convey its Query Interval to a listener.
>
> I'll look through this some more. I think using a fixed timeout
> is a bad idea since it doesn't account for shorter or longer interval
> queriers intentionally configured that way. Ideally it should,
> of course, be a positive indication that the v1 querier is gone
> based on v1 querier data (your point).
>
>                                                 +-DLS
>

^ permalink raw reply

* Re: Premature timeout for MLDv1 Host compatibility mode?
From: David Stevens @ 2012-08-02 14:25 UTC (permalink / raw)
  To: Dragos Ilie; +Cc: netdev, netdev-owner
In-Reply-To: <CAOLNa-cMkHaFxoWym-oVT6i7ZZ25tZPxaAEcwUuT1TB4kPGfag@mail.gmail.com>

netdev-owner@vger.kernel.org wrote on 08/02/2012 10:03:24 AM:

> > The QQIC would come from v2 queries prior to the v1 query that
> > triggered us to switch to v1. But, see below.
> 
> How about the scenario where you have only MLDv1 queriers? There will
> be no prior v2 query

        Yes, this is why I suggested initializing it to the
default of 125. If we actually saw v2 queries with different
intervals, we'd adjust longer or shorter, but use the default
only when we had no queries to update it.

                                                +-DLS

^ permalink raw reply

* Huge performance degradation for UDP between kernel 2.4.17 and 2.6.x
From: leroy christophe @ 2012-08-02 14:02 UTC (permalink / raw)
  To: netdev

Hi

I'm having a big issue with UDP. Using a powerpc board (MPC860).

With our board running kernel 2.4.17, I'm able to send 160000 voice 
packets (UDP, 96 bytes per packet) in 11 seconds.
With the same board running either Kernel 2.6.35.14 or Kernel 3.4.7, I 
need 55 seconds to send the same amount of packets.


Is there anything to tune in order to get same output rate as with 
Kernel 2.4 ?

Regards
Christophe

^ permalink raw reply

* [PATCH] igb: reduce Rx header size
From: Eric Dumazet @ 2012-08-02 15:15 UTC (permalink / raw)
  To: Jeff Kirsher; +Cc: Alexander Duyck, netdev
In-Reply-To: <1342912142-11130-8-git-send-email-jeffrey.t.kirsher@intel.com>

From: Eric Dumazet <edumazet@google.com>

Reduce skb truesize by 256 bytes.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Alexander Duyck <alexander.h.duyck@intel.com>
---
Tested on my machine without any problem

 drivers/net/ethernet/intel/igb/igb.h |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/intel/igb/igb.h b/drivers/net/ethernet/intel/igb/igb.h
index 9e572dd..0c9f62c 100644
--- a/drivers/net/ethernet/intel/igb/igb.h
+++ b/drivers/net/ethernet/intel/igb/igb.h
@@ -131,9 +131,9 @@ struct vf_data_storage {
 #define MAXIMUM_ETHERNET_VLAN_SIZE 1522
 
 /* Supported Rx Buffer Sizes */
-#define IGB_RXBUFFER_512   512
+#define IGB_RXBUFFER_256   256
 #define IGB_RXBUFFER_16384 16384
-#define IGB_RX_HDR_LEN     IGB_RXBUFFER_512
+#define IGB_RX_HDR_LEN     IGB_RXBUFFER_256
 
 /* How many Tx Descriptors do we need to call netif_wake_queue ? */
 #define IGB_TX_QUEUE_WAKE	16

^ permalink raw reply related

* Re: [PATCH V2 06/12] net/core: Add rtnetlink support to vif parameters
From: Erez Shitrit @ 2012-08-02 15:29 UTC (permalink / raw)
  To: Ben Hutchings
  Cc: Or Gerlitz, davem, roland, netdev, ali, sean.hefty, Erez Shitrit
In-Reply-To: <1343866837.2602.64.camel@bwh-desktop.uk.solarflarecom.com>

On 8/2/2012 3:20 AM, Ben Hutchings wrote:
> On Wed, 2012-08-01 at 20:09 +0300, Or Gerlitz wrote:
>> From: Erez Shitrit <erezsh@mellanox.co.il>
>>
>> Add IFLA_VIF_INFO which allows user space to configure mac/vlan for a VIF
> [...]
>> --- a/net/core/rtnetlink.c
>> +++ b/net/core/rtnetlink.c
>> @@ -780,7 +780,8 @@ static noinline size_t if_nlmsg_size(const struct net_device *dev,
>>   	       + rtnl_vfinfo_size(dev, ext_filter_mask) /* IFLA_VFINFO_LIST */
>>   	       + rtnl_port_size(dev) /* IFLA_VF_PORTS + IFLA_PORT_SELF */
>>   	       + rtnl_link_get_size(dev) /* IFLA_LINKINFO */
>> -	       + rtnl_link_get_af_size(dev); /* IFLA_AF_SPEC */
>> +	       + rtnl_link_get_af_size(dev) /* IFLA_AF_SPEC */
>> +	       + nla_total_size(sizeof(struct ifla_vif_param)); /* IFLA_VIF_INFO */
>>   }
> [...]
>
> if_nlmsg_size() returns the size of a message describing the interface.
> But IFLA_VIF_INFO is write-only (why?) and therefore shouldn't be
> included.
>
> Ben.

thanks, we missed that.
currently, we don't expose the vifs on its parent interface, we need to 
think if we want to expose it, if yes we will add "get" option, 
otherwise we will take it from if_nlmsg_size() function.

^ permalink raw reply

* [PATCH 3/4] net/mlx4_en: Fixing TX queue stop/wake flow
From: Yevgeny Petrilin @ 2012-08-02 15:30 UTC (permalink / raw)
  To: davem; +Cc: netdev, Yevgeny Petrilin
In-Reply-To: <1343921456-19180-1-git-send-email-yevgenyp@mellanox.co.il>

Removing the ring->blocked flag, it is redundant and leads to a race:

We close the TX queue and then set the "blocked" flag.
Between those 2 operations the completion function can check the "blocked"
flag, sees that it is 0, and wouldn't open the TX queue.

Using netif_tx_queue_stopped to check the state of the queue to avoid this race.

Signed-off-by: Yevgeny Petrilin <yevgenyp@mellanox.co.il>
---
 drivers/net/ethernet/mellanox/mlx4/en_tx.c   |   17 +++++++----------
 drivers/net/ethernet/mellanox/mlx4/mlx4_en.h |    1 -
 2 files changed, 7 insertions(+), 11 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlx4/en_tx.c b/drivers/net/ethernet/mellanox/mlx4/en_tx.c
index 019d856..10bba09 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_tx.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_tx.c
@@ -164,7 +164,6 @@ int mlx4_en_activate_tx_ring(struct mlx4_en_priv *priv,
 	ring->cons = 0xffffffff;
 	ring->last_nr_txbb = 1;
 	ring->poll_cnt = 0;
-	ring->blocked = 0;
 	memset(ring->tx_info, 0, ring->size * sizeof(struct mlx4_en_tx_info));
 	memset(ring->buf, 0, ring->buf_size);
 
@@ -365,14 +364,13 @@ static void mlx4_en_process_tx_cq(struct net_device *dev, struct mlx4_en_cq *cq)
 	ring->cons += txbbs_skipped;
 	netdev_tx_completed_queue(ring->tx_queue, packets, bytes);
 
-	/* Wakeup Tx queue if this ring stopped it */
-	if (unlikely(ring->blocked)) {
-		if ((u32) (ring->prod - ring->cons) <=
-		     ring->size - HEADROOM - MAX_DESC_TXBBS) {
-			ring->blocked = 0;
-			netif_tx_wake_queue(ring->tx_queue);
-			priv->port_stats.wake_queue++;
-		}
+	/*
+	 * Wakeup Tx queue if this stopped, and at least 1 packet
+	 * was completed
+	 */
+	if (netif_tx_queue_stopped(ring->tx_queue) && txbbs_skipped > 0) {
+		netif_tx_wake_queue(ring->tx_queue);
+		priv->port_stats.wake_queue++;
 	}
 }
 
@@ -592,7 +590,6 @@ netdev_tx_t mlx4_en_xmit(struct sk_buff *skb, struct net_device *dev)
 		     ring->size - HEADROOM - MAX_DESC_TXBBS)) {
 		/* every full Tx ring stops queue */
 		netif_tx_stop_queue(ring->tx_queue);
-		ring->blocked = 1;
 		priv->port_stats.queue_stopped++;
 
 		return NETDEV_TX_BUSY;
diff --git a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
index 5f1ab10..9d27e42 100644
--- a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
+++ b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
@@ -248,7 +248,6 @@ struct mlx4_en_tx_ring {
 	u32 doorbell_qpn;
 	void *buf;
 	u16 poll_cnt;
-	int blocked;
 	struct mlx4_en_tx_info *tx_info;
 	u8 *bounce_buf;
 	u32 last_nr_txbb;
-- 
1.7.7

^ permalink raw reply related

* [PATCH 2/4] net/mlx4_en: loopbacked packets are dropped when SMAC=DMAC
From: Yevgeny Petrilin @ 2012-08-02 15:30 UTC (permalink / raw)
  To: davem; +Cc: netdev, Amir Vadai
In-Reply-To: <1343921456-19180-1-git-send-email-yevgenyp@mellanox.co.il>

From: Amir Vadai <amirv@mellanox.com>

Should NOT check SMAC=DMAC when:
1. loopback is turned on
2. validate_loopback is true.

Fixed it accordingly.

Signed-off-by: Amir Vadai <amirv@mellanox.com>
---
 drivers/net/ethernet/mellanox/mlx4/en_rx.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlx4/en_rx.c b/drivers/net/ethernet/mellanox/mlx4/en_rx.c
index f32e703..5aba5ec 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_rx.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_rx.c
@@ -614,8 +614,8 @@ int mlx4_en_process_rx_cq(struct net_device *dev, struct mlx4_en_cq *cq, int bud
 		/* If source MAC is equal to our own MAC and not performing
 		 * the selftest or flb disabled - drop the packet */
 		if (s_mac == priv->mac &&
-			(!(dev->features & NETIF_F_LOOPBACK) ||
-			 !priv->validate_loopback))
+		    !((dev->features & NETIF_F_LOOPBACK) ||
+		      priv->validate_loopback))
 			goto next;
 
 		/*
-- 
1.7.7

^ permalink raw reply related

* [PATCH 1/4] net/mlx4_en: Setting the NETIF_F_GRO flag back to dev->hw_features
From: Yevgeny Petrilin @ 2012-08-02 15:30 UTC (permalink / raw)
  To: davem; +Cc: netdev, Yevgeny Petrilin
In-Reply-To: <1343921456-19180-1-git-send-email-yevgenyp@mellanox.co.il>

The bug which removed it was introduced in commit c8c64cff
which added the hw_features.

Signed-off-by: Yevgeny Petrilin <yevgenyp@mellanox.co.il>
---
 drivers/net/ethernet/mellanox/mlx4/en_netdev.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
index edd9cb8..c031e12 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
@@ -1658,7 +1658,8 @@ int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port,
 	/*
 	 * Set driver features
 	 */
-	dev->hw_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM;
+	dev->hw_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
+			   NETIF_F_GRO;
 	if (mdev->LSO_support)
 		dev->hw_features |= NETIF_F_TSO | NETIF_F_TSO6;
 
-- 
1.7.7

^ permalink raw reply related

* [PATCH 4/4] net/mlx4_core: Remove port type restrictions
From: Yevgeny Petrilin @ 2012-08-02 15:30 UTC (permalink / raw)
  To: davem; +Cc: netdev, Yevgeny Petrilin
In-Reply-To: <1343921456-19180-1-git-send-email-yevgenyp@mellanox.co.il>

Port1=Eth, Port2=IB restriction is no longer required.
Having RoCE, there will always rdma port initialized over ConnectX
physical port, no matter whether the link layer is IB or Ethernet.
So we always have dual port IB device.

Signed-off-by: Yevgeny Petrilin <yevgenyp@mellanox.co.il>
---
 drivers/net/ethernet/mellanox/mlx4/main.c  |    3 ---
 drivers/net/ethernet/mellanox/mlx4/sense.c |   14 --------------
 2 files changed, 0 insertions(+), 17 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlx4/main.c b/drivers/net/ethernet/mellanox/mlx4/main.c
index 48d0e90..827b72d 100644
--- a/drivers/net/ethernet/mellanox/mlx4/main.c
+++ b/drivers/net/ethernet/mellanox/mlx4/main.c
@@ -157,9 +157,6 @@ int mlx4_check_port_params(struct mlx4_dev *dev,
 					 "on this HCA, aborting.\n");
 				return -EINVAL;
 			}
-			if (port_type[i] == MLX4_PORT_TYPE_ETH &&
-			    port_type[i + 1] == MLX4_PORT_TYPE_IB)
-				return -EINVAL;
 		}
 	}
 
diff --git a/drivers/net/ethernet/mellanox/mlx4/sense.c b/drivers/net/ethernet/mellanox/mlx4/sense.c
index 8024982..34ee09b 100644
--- a/drivers/net/ethernet/mellanox/mlx4/sense.c
+++ b/drivers/net/ethernet/mellanox/mlx4/sense.c
@@ -81,20 +81,6 @@ void mlx4_do_sense_ports(struct mlx4_dev *dev,
 	}
 
 	/*
-	 * Adjust port configuration:
-	 * If port 1 sensed nothing and port 2 is IB, set both as IB
-	 * If port 2 sensed nothing and port 1 is Eth, set both as Eth
-	 */
-	if (stype[0] == MLX4_PORT_TYPE_ETH) {
-		for (i = 1; i < dev->caps.num_ports; i++)
-			stype[i] = stype[i] ? stype[i] : MLX4_PORT_TYPE_ETH;
-	}
-	if (stype[dev->caps.num_ports - 1] == MLX4_PORT_TYPE_IB) {
-		for (i = 0; i < dev->caps.num_ports - 1; i++)
-			stype[i] = stype[i] ? stype[i] : MLX4_PORT_TYPE_IB;
-	}
-
-	/*
 	 * If sensed nothing, remain in current configuration.
 	 */
 	for (i = 0; i < dev->caps.num_ports; i++)
-- 
1.7.7

^ permalink raw reply related

* [PATCH 0/4] net/mlx4: Fixes to mlx4 driver
From: Yevgeny Petrilin @ 2012-08-02 15:30 UTC (permalink / raw)
  To: davem; +Cc: netdev, Yevgeny Petrilin

Hello Dave,

This is a patchset of 3 fixes and additional change that removes
a port Link layer type restriction that is no longer relevant.

Thanks,
Yevgeny
---
Yevgeny Petrilin (3):
  net/mlx4_en: Setting the NETIF_F_GRO flag back to dev->hw_features
  net/mlx4_en: Fixing TX queue stop/wake flow
  net/mlx4_core: Remove port type restrictions

Amir Vadai (1):
  net/mlx4_en: loopbacked packets are dropped when SMAC=DMAC

 drivers/net/ethernet/mellanox/mlx4/en_netdev.c |    3 ++-
 drivers/net/ethernet/mellanox/mlx4/en_rx.c     |    4 ++--
 drivers/net/ethernet/mellanox/mlx4/en_tx.c     |   17 +++++++----------
 drivers/net/ethernet/mellanox/mlx4/main.c      |    3 ---
 drivers/net/ethernet/mellanox/mlx4/mlx4_en.h   |    1 -
 drivers/net/ethernet/mellanox/mlx4/sense.c     |   14 --------------
 6 files changed, 11 insertions(+), 31 deletions(-)

^ permalink raw reply

* Re: [PATCH V2 08/12] net/eipoib: Add ethtool file support
From: Ben Hutchings @ 2012-08-02 15:42 UTC (permalink / raw)
  To: Erez Shitrit
  Cc: Or Gerlitz, davem, roland, netdev, ali, sean.hefty, Erez Shitrit
In-Reply-To: <501A3BDE.1070509@mellanox.com>

On Thu, 2012-08-02 at 11:35 +0300, Erez Shitrit wrote:
> On 8/2/2012 3:22 AM, Ben Hutchings wrote:
> > On Wed, 2012-08-01 at 20:09 +0300, Or Gerlitz wrote:
> >> From: Erez Shitrit <erezsh@mellanox.co.il>
> >>
> >> Via ethtool the driver describes its version, ABI version, on what PIF
> >> interface it runs and various statistics.
> > [...]
> >> --- /dev/null
> >> +++ b/drivers/net/eipoib/eth_ipoib_ethtool.c
> > [...]
> >> +static void parent_ethtool_get_drvinfo(struct net_device *parent_dev,
> >> +				       struct ethtool_drvinfo *drvinfo)
> >> +{
> >> +	struct parent *parent = netdev_priv(parent_dev);
> >> +
> >> +	strncpy(drvinfo->driver, DRV_NAME, 32);
> >> +
> >> +	strncpy(drvinfo->version, DRV_VERSION, 32);
> >> +
> >> +	strncpy(drvinfo->bus_info, parent->ipoib_main_interface,
> >> +		ETHTOOL_BUSINFO_LEN);
> > These must be null-terminated; therefore use strlcpy().
> 
> ok, will fix.
> 
> >> +	/* indicates ABI version */
> >> +	snprintf(drvinfo->fw_version, 32, "%d", EIPOIB_ABI_VER);
> > [...]
> >
> > This is an abuse of fw_version.
> >
> > Ben.
> we took the idea from the bonding driver,
> (snprintf(drvinfo->fw_version, 32, "%d", BOND_ABI_VERSION);)

The bonding driver has lots of warts.

> Do you have any idea where can we keep the abi version?

You don't need to, because David will insist that you will only change
the ABI in a backward-compatible way. :-)

(The bonding ABI version hasn't changed since Linux 2.6.3, and even then
it provided backward compatibility.)

Ben.

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

^ permalink raw reply

* Re: [PATCH] igb: reduce Rx header size
From: Alexander Duyck @ 2012-08-02 15:43 UTC (permalink / raw)
  To: Eric Dumazet; +Cc: Jeff Kirsher, netdev, Wyborny, Carolyn
In-Reply-To: <1343920538.9299.200.camel@edumazet-glaptop>

On 08/02/2012 08:15 AM, Eric Dumazet wrote:
> From: Eric Dumazet <edumazet@google.com>
>
> Reduce skb truesize by 256 bytes.
>
> Signed-off-by: Eric Dumazet <edumazet@google.com>
> Cc: Alexander Duyck <alexander.h.duyck@intel.com>
> ---
> Tested on my machine without any problem
>
>  drivers/net/ethernet/intel/igb/igb.h |    4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/net/ethernet/intel/igb/igb.h b/drivers/net/ethernet/intel/igb/igb.h
> index 9e572dd..0c9f62c 100644
> --- a/drivers/net/ethernet/intel/igb/igb.h
> +++ b/drivers/net/ethernet/intel/igb/igb.h
> @@ -131,9 +131,9 @@ struct vf_data_storage {
>  #define MAXIMUM_ETHERNET_VLAN_SIZE 1522
>  
>  /* Supported Rx Buffer Sizes */
> -#define IGB_RXBUFFER_512   512
> +#define IGB_RXBUFFER_256   256
>  #define IGB_RXBUFFER_16384 16384
> -#define IGB_RX_HDR_LEN     IGB_RXBUFFER_512
> +#define IGB_RX_HDR_LEN     IGB_RXBUFFER_256
>  
>  /* How many Tx Descriptors do we need to call netif_wake_queue ? */
>  #define IGB_TX_QUEUE_WAKE	16
>
>
Would there be any problems with us running this through Jeff's tree for
testing prior to applying this?  I'm just wanting to do some testing
internally for any performance regressions due to this change.

Thanks,

Alex

^ permalink raw reply

* Re: [RFC PATCH 01/10] net: Split core bits of dev_pick_tx into __dev_pick_tx
From: Alexander Duyck @ 2012-08-02 15:45 UTC (permalink / raw)
  To: Ying Cai
  Cc: Ben Hutchings, netdev, davem, jeffrey.t.kirsher, edumazet,
	therbert, alexander.duyck
In-Reply-To: <CAL1qit_mpmVYQ3D4HQsii5LJ+Nu5=ftFWAWVnfPiDbmW5eWa0Q@mail.gmail.com>

On 08/01/2012 08:51 PM, Ying Cai wrote:
> I liked this patch too. It enabled Ethernet NIC drivers to use
> the __dev_pick_tx() in their ndo_select_queue() to use XPS. I have
> data showing XPS helps performances of bnx2x driver significantly.
>
> Acked-by: Ying Cai <ycai@ <mailto:jg1.han@samsung.com>google.com
> <http://google.com>>
This was an RFC so there is no need to ack it.

I will try to get these patches cleaned up and ready for submission. 
Hopefully I will have something to submit to net-next in the next couple
of weeks.

Thanks,

Alex

^ permalink raw reply

* [PATCH net-next] igb: use build_skb()
From: Eric Dumazet @ 2012-08-02 15:51 UTC (permalink / raw)
  To: Jeff Kirsher; +Cc: Alexander Duyck, netdev

From: Eric Dumazet <edumazet@google.com>

By using netdev_alloc_frag() & build_skb() instead of legacy
netdev_alloc_skb_ip_align() calls, we reduce number of cache misses in
RX path and size of working set.

For a given rx workload, number of 'inuse' sk_buff can be reduced to a
very minimum, especially when packets are dropped by our stack.

(Before this patch, default sk_buff allocation was 2048 sk_buffs in rx
ring buffer)

They are initialized right before being delivered to stack, so can stay
hot in cpu caches.

Ethernet header prefetching is more effective (old prefetch of skb->data
paid a stall to access skb->data pointer)

I have 15% performance increase in a RX stress test, removing SLUB slow
path in the profiles.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Alexander Duyck <alexander.h.duyck@intel.com>
---
 drivers/net/ethernet/intel/igb/igb.h         |    8 ++
 drivers/net/ethernet/intel/igb/igb_ethtool.c |   14 ++--
 drivers/net/ethernet/intel/igb/igb_main.c    |   56 ++++++++++-------
 3 files changed, 49 insertions(+), 29 deletions(-)

diff --git a/drivers/net/ethernet/intel/igb/igb.h b/drivers/net/ethernet/intel/igb/igb.h
index 9e572dd..e43b160 100644
--- a/drivers/net/ethernet/intel/igb/igb.h
+++ b/drivers/net/ethernet/intel/igb/igb.h
@@ -135,6 +135,11 @@ struct vf_data_storage {
 #define IGB_RXBUFFER_16384 16384
 #define IGB_RX_HDR_LEN     IGB_RXBUFFER_512
 
+/* size of fragments allocated with netdev_alloc_frag() */
+#define IGB_FRAGSZ							\
+	(SKB_DATA_ALIGN(IGB_RX_HDR_LEN + NET_SKB_PAD + NET_IP_ALIGN) +	\
+	 SKB_DATA_ALIGN(sizeof(struct skb_shared_info)))		
+
 /* How many Tx Descriptors do we need to call netif_wake_queue ? */
 #define IGB_TX_QUEUE_WAKE	16
 /* How many Rx Buffers do we bundle into one write to the hardware ? */
@@ -173,7 +178,7 @@ struct igb_tx_buffer {
 };
 
 struct igb_rx_buffer {
-	struct sk_buff *skb;
+	void *data;
 	dma_addr_t dma;
 	struct page *page;
 	dma_addr_t page_dma;
@@ -242,6 +247,7 @@ struct igb_ring {
 	u16 next_to_clean ____cacheline_aligned_in_smp;
 	u16 next_to_use;
 
+	struct sk_buff *skb;
 	union {
 		/* TX */
 		struct {
diff --git a/drivers/net/ethernet/intel/igb/igb_ethtool.c b/drivers/net/ethernet/intel/igb/igb_ethtool.c
index a19c84c..e6fc5cb 100644
--- a/drivers/net/ethernet/intel/igb/igb_ethtool.c
+++ b/drivers/net/ethernet/intel/igb/igb_ethtool.c
@@ -1636,12 +1636,12 @@ static void igb_create_lbtest_frame(struct sk_buff *skb,
 	memset(&skb->data[frame_size + 12], 0xAF, 1);
 }
 
-static int igb_check_lbtest_frame(struct sk_buff *skb, unsigned int frame_size)
+static int igb_check_lbtest_frame(const u8 *data, unsigned int frame_size)
 {
 	frame_size /= 2;
-	if (*(skb->data + 3) == 0xFF) {
-		if ((*(skb->data + frame_size + 10) == 0xBE) &&
-		   (*(skb->data + frame_size + 12) == 0xAF)) {
+	if (*(data + 3) == 0xFF) {
+		if ((*(data + frame_size + 10) == 0xBE) &&
+		   (*(data + frame_size + 12) == 0xAF)) {
 			return 0;
 		}
 	}
@@ -1675,8 +1675,10 @@ static int igb_clean_test_rings(struct igb_ring *rx_ring,
 				 DMA_FROM_DEVICE);
 		rx_buffer_info->dma = 0;
 
-		/* verify contents of skb */
-		if (!igb_check_lbtest_frame(rx_buffer_info->skb, size))
+		/* verify contents of buffer */
+		if (!igb_check_lbtest_frame(rx_buffer_info->data +
+					    NET_SKB_PAD + NET_IP_ALIGN,
+					    size))
 			count++;
 
 		/* unmap buffer on tx side */
diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
index b7c2d50..8b732c9 100644
--- a/drivers/net/ethernet/intel/igb/igb_main.c
+++ b/drivers/net/ethernet/intel/igb/igb_main.c
@@ -538,14 +538,14 @@ rx_ring_summary:
 					"--------- %p%s\n", "RWB", i,
 					le64_to_cpu(u0->a),
 					le64_to_cpu(u0->b),
-					buffer_info->skb, next_desc);
+					buffer_info->data, next_desc);
 			} else {
 				pr_info("%s[0x%03X]     %016llX %016llX %016llX"
 					" %p%s\n", "R  ", i,
 					le64_to_cpu(u0->a),
 					le64_to_cpu(u0->b),
 					(u64)buffer_info->dma,
-					buffer_info->skb, next_desc);
+					buffer_info->data, next_desc);
 
 				if (netif_msg_pktdata(adapter)) {
 					print_hex_dump(KERN_INFO, "",
@@ -3379,7 +3379,7 @@ static void igb_clean_rx_ring(struct igb_ring *rx_ring)
 	if (!rx_ring->rx_buffer_info)
 		return;
 
-	/* Free all the Rx ring sk_buffs */
+	/* Free all the Rx ring frags */
 	for (i = 0; i < rx_ring->count; i++) {
 		struct igb_rx_buffer *buffer_info = &rx_ring->rx_buffer_info[i];
 		if (buffer_info->dma) {
@@ -3390,9 +3390,9 @@ static void igb_clean_rx_ring(struct igb_ring *rx_ring)
 			buffer_info->dma = 0;
 		}
 
-		if (buffer_info->skb) {
-			dev_kfree_skb(buffer_info->skb);
-			buffer_info->skb = NULL;
+		if (buffer_info->data) {
+			put_page(virt_to_head_page(buffer_info->data));
+			buffer_info->data = NULL;
 		}
 		if (buffer_info->page_dma) {
 			dma_unmap_page(rx_ring->dev,
@@ -3407,6 +3407,8 @@ static void igb_clean_rx_ring(struct igb_ring *rx_ring)
 			buffer_info->page_offset = 0;
 		}
 	}
+	kfree_skb(rx_ring->skb);
+	rx_ring->skb = NULL;
 
 	size = sizeof(struct igb_rx_buffer) * rx_ring->count;
 	memset(rx_ring->rx_buffer_info, 0, size);
@@ -6078,11 +6080,13 @@ static bool igb_clean_rx_irq(struct igb_q_vector *q_vector, int budget)
 
 	while (igb_test_staterr(rx_desc, E1000_RXD_STAT_DD)) {
 		struct igb_rx_buffer *buffer_info = &rx_ring->rx_buffer_info[i];
-		struct sk_buff *skb = buffer_info->skb;
+		struct sk_buff *skb = rx_ring->skb;
+		void *data = buffer_info->data;
 		union e1000_adv_rx_desc *next_rxd;
 
-		buffer_info->skb = NULL;
-		prefetch(skb->data);
+		prefetch(data + NET_SKB_PAD);
+		buffer_info->data = NULL;
+		rx_ring->skb = NULL;
 
 		i++;
 		if (i == rx_ring->count)
@@ -6091,6 +6095,15 @@ static bool igb_clean_rx_irq(struct igb_q_vector *q_vector, int budget)
 		next_rxd = IGB_RX_DESC(rx_ring, i);
 		prefetch(next_rxd);
 
+		if (!skb) {
+			skb = build_skb(data, IGB_FRAGSZ);
+			if (unlikely(!skb)) {
+				rx_ring->rx_stats.alloc_failed++;
+				buffer_info->data = data;
+				goto next_desc;
+			}
+			skb_reserve(skb, NET_SKB_PAD + NET_IP_ALIGN);
+		}
 		/*
 		 * This memory barrier is needed to keep us from reading
 		 * any other fields out of the rx_desc until we know the
@@ -6118,6 +6131,8 @@ static bool igb_clean_rx_irq(struct igb_q_vector *q_vector, int budget)
 			skb->data_len += length;
 			skb->truesize += PAGE_SIZE / 2;
 
+			skb_propagate_pfmemalloc(buffer_info->page, skb);
+
 			if ((page_count(buffer_info->page) != 1) ||
 			    (page_to_nid(buffer_info->page) != current_node))
 				buffer_info->page = NULL;
@@ -6132,9 +6147,9 @@ static bool igb_clean_rx_irq(struct igb_q_vector *q_vector, int budget)
 		if (!igb_test_staterr(rx_desc, E1000_RXD_STAT_EOP)) {
 			struct igb_rx_buffer *next_buffer;
 			next_buffer = &rx_ring->rx_buffer_info[i];
-			buffer_info->skb = next_buffer->skb;
+			buffer_info->data = next_buffer->data;
 			buffer_info->dma = next_buffer->dma;
-			next_buffer->skb = skb;
+			rx_ring->skb = skb;
 			next_buffer->dma = 0;
 			goto next_desc;
 		}
@@ -6158,6 +6173,7 @@ static bool igb_clean_rx_irq(struct igb_q_vector *q_vector, int budget)
 
 		skb->protocol = eth_type_trans(skb, rx_ring->netdev);
 
+		skb_record_rx_queue(skb, rx_ring->queue_index);
 		napi_gro_receive(&q_vector->napi, skb);
 
 		budget--;
@@ -6193,26 +6209,22 @@ next_desc:
 static bool igb_alloc_mapped_skb(struct igb_ring *rx_ring,
 				 struct igb_rx_buffer *bi)
 {
-	struct sk_buff *skb = bi->skb;
+	void *data = bi->data;
 	dma_addr_t dma = bi->dma;
 
 	if (dma)
 		return true;
 
-	if (likely(!skb)) {
-		skb = netdev_alloc_skb_ip_align(rx_ring->netdev,
-						IGB_RX_HDR_LEN);
-		bi->skb = skb;
-		if (!skb) {
+	if (likely(!data)) {
+		data = netdev_alloc_frag(IGB_FRAGSZ);
+		bi->data = data;
+		if (!data) {
 			rx_ring->rx_stats.alloc_failed++;
 			return false;
 		}
-
-		/* initialize skb for ring */
-		skb_record_rx_queue(skb, rx_ring->queue_index);
 	}
 
-	dma = dma_map_single(rx_ring->dev, skb->data,
+	dma = dma_map_single(rx_ring->dev, data + NET_SKB_PAD + NET_IP_ALIGN,
 			     IGB_RX_HDR_LEN, DMA_FROM_DEVICE);
 
 	if (dma_mapping_error(rx_ring->dev, dma)) {
@@ -6235,7 +6247,7 @@ static bool igb_alloc_mapped_page(struct igb_ring *rx_ring,
 		return true;
 
 	if (!page) {
-		page = __skb_alloc_page(GFP_ATOMIC, bi->skb);
+		page = alloc_page(GFP_ATOMIC | __GFP_COLD);
 		bi->page = page;
 		if (unlikely(!page)) {
 			rx_ring->rx_stats.alloc_failed++;

^ 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