* [PATCH v2] can: test size of struct sockaddr in sendmsg
From: Kurt Van Dijck @ 2011-01-15 19:39 UTC (permalink / raw)
To: netdev-u79uwXL29TY76Z2rM5mHXA,
socketcan-core-0fE9KPoRgkgATYTw5x5z8w, Oliver Hartkopp
This patch makes the CAN socket code conform to the manpage of sendmsg.
Signed-off-by: Kurt Van Dijck <kurt.van.dijck-/BeEPy95v10@public.gmane.org>
Acked-by: Oliver Hartkopp <socketcan-fJ+pQTUTwRTk1uMJSBkQmQ@public.gmane.org>
---
net/can/bcm.c | 3 +++
net/can/raw.c | 3 +++
2 files changed, 6 insertions(+), 0 deletions(-)
diff --git a/net/can/bcm.c b/net/can/bcm.c
index 6faa825..2f804e4 100644
--- a/net/can/bcm.c
+++ b/net/can/bcm.c
@@ -1256,6 +1256,9 @@ static int bcm_sendmsg(struct kiocb *iocb, struct socket *sock,
struct sockaddr_can *addr =
(struct sockaddr_can *)msg->msg_name;
+ if (msg->msg_namelen < sizeof(*addr))
+ return -EINVAL;
+
if (addr->can_family != AF_CAN)
return -EINVAL;
diff --git a/net/can/raw.c b/net/can/raw.c
index e88f610..883e9d7 100644
--- a/net/can/raw.c
+++ b/net/can/raw.c
@@ -649,6 +649,9 @@ static int raw_sendmsg(struct kiocb *iocb, struct socket *sock,
struct sockaddr_can *addr =
(struct sockaddr_can *)msg->msg_name;
+ if (msg->msg_namelen < sizeof(*addr))
+ return -EINVAL;
+
if (addr->can_family != AF_CAN)
return -EINVAL;
^ permalink raw reply related
* Re: [PATCH] can: test size of struct sockaddr
From: Kurt Van Dijck @ 2011-01-15 19:35 UTC (permalink / raw)
To: Oliver Hartkopp
Cc: socketcan-core-0fE9KPoRgkgATYTw5x5z8w,
netdev-u79uwXL29TY76Z2rM5mHXA
In-Reply-To: <4D31D4A6.4040701-fJ+pQTUTwRTk1uMJSBkQmQ@public.gmane.org>
On Sat, Jan 15, 2011 at 06:08:54PM +0100, Oliver Hartkopp wrote:
> On 14.01.2011 18:23, Kurt Van Dijck wrote:
> > I think this patch makes the CAN socket code comform to the
> > manpages of sendmsg & recvmsg.
>
> Hello Kurt,
>
> if you check similar code sniplets in the kernel you would see, that in
> recvmsg()-cases the given namelen is not used from userspace.
I went into udp code, but my mind got troubled there.
>
> If msg->msg_name is not NULL the msg_namelen is just set by the kernel. E.g.
> see af_packet.c, af_econet.c, etc.
I should have looked further ...
Given this, I went up to net/socket.c:__sys_recvmsg.
Within kernel space, a struct sockaddr_storage is used in fact ....
This solves indeed the problem I was trying to address.
>
> So the code in candump.c setting the msg_namelen before recvmsg() is obviously
> obsolete ...
I think no, since after the socket's recvmsg() has been called,
since move_addr_to_user() will do checks similar as I tried to reimplement.
>
> Btw. your two patches below for bcm_sendmsg() and raw_sendmesg() look good.
>
> If you would like to resubmit these two patches, you may add my Acked-by
Thanks, I will do so.
Kurt
^ permalink raw reply
* NETLINK: Failed to browse: Invalid argument from avahi-daemon in F14 since 2.6.37-git8
From: Alessandro Suardi @ 2011-01-15 18:34 UTC (permalink / raw)
To: linux-kernel, netdev
/var/log/messages says:
Jan 13 12:42:02 duff avahi-daemon[2771]: Found user 'avahi' (UID 70)
and group 'avahi' (GID 70).
Jan 13 12:42:02 duff avahi-daemon[2771]: Successfully dropped root privileges.
Jan 13 12:42:02 duff avahi-daemon[2771]: avahi-daemon 0.6.27 starting up.
Jan 13 12:42:02 duff avahi-daemon[2771]: Successfully called chroot().
Jan 13 12:42:02 duff avahi-daemon[2771]: Successfully dropped
remaining capabilities.
Jan 13 12:42:02 duff avahi-daemon[2771]: Loading service file
/services/ssh.service.
Jan 13 12:42:02 duff avahi-daemon[2771]: Loading service file
/services/udisks.service.
Jan 13 12:42:02 duff avahi-daemon[2771]: NETLINK: Failed to browse:
Invalid argument
Jan 13 12:42:23 duff acpid: starting up with netlink and the input layer
Happens both at boot and after boot if restarting avahi-daemon service,
and there is a 10-15" wait before the service start script prints a [FAILED]
red tag; avahi-daemon process does start up anyways.
-git7 is the latest "good" kernel
-git8, -git9, -git11, -git13 have been reproducing the issue
thanks, ciao,
--alessandro
"There's always a siren singing you to shipwreck"
(Radiohead, "There There")
^ permalink raw reply
* Re: [2.6.37 vanilla] PC freezing, call stack pointing at net/sched/sch_generic.c
From: Joe Perches @ 2011-01-15 17:38 UTC (permalink / raw)
To: David Robin; +Cc: netdev, LKML
In-Reply-To: <AANLkTimrP5Mqg340SwHrvdn=4KkvRchOjoy3-_f-9UJg@mail.gmail.com>
On Sat, 2011-01-15 at 14:49 +0100, David Robin wrote:
> Hello,
>
> As I noticed you are one of the latest forcedeth contributers, I take
> the opportunity to report you this series of errors in forcedeth
> driver, which caused my desktop PC to freeze, in a reproducable way.
>
> I am running Debian testing on a nForce4-based motheboard, and an AMD
> Athlon X2 Dual Core Processor 4200+.
> The stock 2.6.32-5 kernel package is running perfectly fine, whereas
> 2.6.37 kernel image I compiled is freezing after 1 or 2 days of
> uptime.
>
> Unfortunately, I have tried to compile intermediate versions of Linux
> kernel to try and identify the period when the issue was introduced.
Try git-bisect.
http://www.reactivated.net/weblog/archives/2006/01/using-git-bisect-to-find-buggy-kernel-patches/
Here's a list of the changelog since 2.6.32
------------------
$ git shortlog v2.6.32..v2.6.37 -- drivers/net/forcedeth.c
Alexey Dobriyan (1):
drivers/net/: use DEFINE_PCI_DEVICE_TABLE()
Ayaz Abdulla (1):
forcedeth: fix tx limit2 flag check
David S. Miller (3):
Merge branch 'master' of master.kernel.org:/.../davem/net-2.6
Merge branch 'master' of master.kernel.org:/.../davem/net-2.6
forcedeth: Kill NAPI config options.
Eric Dumazet (3):
drivers: net: use skb_headlen()
net: trans_start cleanups
drivers/net: return operator cleanup
Jesse Gross (1):
vlan: Don't check for vlan group before vlan_tx_tag_present.
Jiri Pirko (2):
net: convert multiple drivers to use netdev_for_each_mc_addr, part4
net: convert multicast list to list_head
Joe Perches (2):
drivers/net: request_irq - Remove unnecessary leading & from second arg
drivers/net: Remove address use from assignments of function pointers
Julia Lawall (1):
forcedeth: correct valid flag
Mike Ditto (1):
forcedeth: Fix different hardware statistics versions.
Tejun Heo (1):
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit s
Tom Herbert (2):
forcedeth: GRO support
forcedeth: Account for consumed budget in napi poll
stephen hemminger (1):
forcedeth: Stay in NAPI as long as there's work
------------------
Based only on the changelog, I'd guess it might be the NAPI change
and some hardware issue, but who really knows.
git bisect should help figure that out.
> Are you the right person I should report this error too,
No.
You should report this to linux-kernel@vger.kernel.org
and to netdev@vger.kernel.org
I added them to the cc's on this reply.
> and is there more debug information I could provide ?
Not really, other than it'd really help if you could
run the git bisect.
David Robin's original attachment:
----------------------
Jan 14 01:50:02 gizeh kernel: [13653.828013] ------------[ cut here ]------------
Jan 14 01:50:02 gizeh kernel: [13653.828023] WARNING: at net/sched/sch_generic.c:258 dev_watchdog+0xfc/0x1a2()
Jan 14 01:50:02 gizeh kernel: [13653.828026] Hardware name: MS-7125
Jan 14 01:50:02 gizeh kernel: [13653.828029] NETDEV WATCHDOG: eth1 (forcedeth): transmit queue 0 timed out
Jan 14 01:50:02 gizeh kernel: [13653.828031] Modules linked in: radeon ttm drm_kms_helper drm i2c_algo_bit fuse loop firewire_sbp2 usbhid hid arc4 ecb option usb_wwan usbserial ath5k ath snd_hda_codec_hdmi sg snd_hda_intel ohci_hcd sr_mod cdrom mac80211 firewire_ohci ehci_hcd i2c_nforce2 usbcore snd_hda_codec cfg80211 snd_intel8x0 firewire_core k8temp parport_pc sata_sil pata_amd sky2 rfkill snd_hwdep i2c_core parport snd_ac97_codec pcspkr shpchp evdev forcedeth ac97_bus nls_base snd_pcm snd_timer snd tpm_tis tpm tpm_bios soundcore processor button edac_core pci_hotplug crc_itu_t snd_page_alloc edac_mce_amd ext3 jbd mbcache sd_mod crc_t10dif sata_nv ata_generic libata scsi_mod thermal fan thermal_sys
Jan 14 01:50:02 gizeh kernel: [13653.828085] Pid: 2096, comm: Xorg Not tainted 2.6.37 #1
Jan 14 01:50:02 gizeh kernel: [13653.828087] Call Trace:
Jan 14 01:50:02 gizeh kernel: [13653.828090] <IRQ> [<ffffffff8103bc50>] ? warn_slowpath_common+0x78/0x8c
Jan 14 01:50:02 gizeh kernel: [13653.828099] [<ffffffff8103bd03>] ? warn_slowpath_fmt+0x45/0x4a
Jan 14 01:50:02 gizeh kernel: [13653.828103] [<ffffffff8125ce41>] ? netif_tx_lock+0x3d/0x65
Jan 14 01:50:02 gizeh kernel: [13653.828106] [<ffffffff8125cf65>] ? dev_watchdog+0xfc/0x1a2
Jan 14 01:50:02 gizeh kernel: [13653.828111] [<ffffffff8104fa7c>] ? __queue_work+0x22d/0x251
Jan 14 01:50:02 gizeh kernel: [13653.828116] [<ffffffff81047c33>] ? run_timer_softirq+0x1c2/0x285
Jan 14 01:50:02 gizeh kernel: [13653.828119] [<ffffffff8125ce69>] ? dev_watchdog+0x0/0x1a2
Jan 14 01:50:02 gizeh kernel: [13653.828124] [<ffffffff8105c45e>] ? ktime_get+0x5f/0xb8
Jan 14 01:50:02 gizeh kernel: [13653.828127] [<ffffffff81041552>] ? __do_softirq+0xc9/0x1ab
Jan 14 01:50:02 gizeh kernel: [13653.828131] [<ffffffff8100388c>] ? call_softirq+0x1c/0x28
Jan 14 01:50:02 gizeh kernel: [13653.828134] [<ffffffff81004ca5>] ? do_softirq+0x31/0x63
Jan 14 01:50:02 gizeh kernel: [13653.828137] [<ffffffff810413f0>] ? irq_exit+0x36/0x79
Jan 14 01:50:02 gizeh kernel: [13653.828142] [<ffffffff81018d72>] ? smp_apic_timer_interrupt+0x87/0x94
Jan 14 01:50:02 gizeh kernel: [13653.828146] [<ffffffff81003353>] ? apic_timer_interrupt+0x13/0x20
Jan 14 01:50:02 gizeh kernel: [13653.828148] <EOI> [<ffffffff8118b12c>] ? delay_tsc+0x1a/0x4e
Jan 14 01:50:02 gizeh kernel: [13653.828171] [<ffffffffa0336acc>] ? radeon_freelist_get+0xd5/0xf6 [radeon]
Jan 14 01:50:02 gizeh kernel: [13653.828181] [<ffffffffa033a495>] ? radeon_cp_buffers+0xe5/0x169 [radeon]
Jan 14 01:50:02 gizeh kernel: [13653.828191] [<ffffffffa02f1e06>] ? drm_ioctl+0x26c/0x322 [drm]
Jan 14 01:50:02 gizeh kernel: [13653.828201] [<ffffffffa033a3b0>] ? radeon_cp_buffers+0x0/0x169 [radeon]
Jan 14 01:50:02 gizeh kernel: [13653.828205] [<ffffffff81002497>] ? do_signal+0x584/0x68a
Jan 14 01:50:02 gizeh kernel: [13653.828209] [<ffffffff810f0ea4>] ? do_vfs_ioctl+0x4a2/0x4ef
Jan 14 01:50:02 gizeh kernel: [13653.828213] [<ffffffff8100a7a8>] ? restore_i387_xstate+0x61/0x139
Jan 14 01:50:02 gizeh kernel: [13653.828216] [<ffffffff8100334e>] ? apic_timer_interrupt+0xe/0x20
Jan 14 01:50:02 gizeh kernel: [13653.828220] [<ffffffff810f0f3c>] ? sys_ioctl+0x4b/0x6f
Jan 14 01:50:02 gizeh kernel: [13653.828223] [<ffffffff810029bb>] ? system_call_fastpath+0x16/0x1b
Jan 14 01:50:02 gizeh kernel: [13653.828226] ---[ end trace 119f4557b810af02 ]---
Jan 14 01:50:02 gizeh kernel: [13653.828229] eth1: Got tx_timeout. irq: 00000036
Jan 14 01:50:02 gizeh kernel: [13653.828231] eth1: Ring at 12a73c000
Jan 14 01:50:02 gizeh kernel: [13653.828233] eth1: Dumping tx registers
Jan 14 01:50:02 gizeh kernel: [13653.828238] 0: 00000036 00000000 00000003 0000000d 00000000 00000000 00000000 00000000
Jan 14 01:50:02 gizeh kernel: [13653.828243] 20: 06255300 ff701365 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 01:50:02 gizeh kernel: [13653.828249] 40: 0420e20e 0000a855 00002e20 00000000 00000000 00000000 00000000 00000000
Jan 14 01:50:02 gizeh kernel: [13653.828254] 60: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 01:50:02 gizeh kernel: [13653.828260] 80: 003b0f3c 00000001 00040000 007f0020 0000061c 00000001 00200000 80007fae
Jan 14 01:50:02 gizeh kernel: [13653.828265] a0: 0016070f 00000016 d2091100 0000b21b 00000001 00000000 2d00cccd 00004ce4
Jan 14 01:50:02 gizeh kernel: [13653.828271] c0: 10000001 00000001 00000001 00000001 00000001 00000001 00000001 00000001
Jan 14 01:50:02 gizeh kernel: [13653.828276] e0: 00000001 00000001 00000001 00000001 00000001 00000001 00000001 00000001
Jan 14 01:50:02 gizeh kernel: [13653.828282] 100: 2a73e000 2a73c000 01ff00ff 00008000 00010064 00000000 00000024 2a73e500
Jan 14 01:50:02 gizeh kernel: [13653.828287] 120: 2a73d4c0 bf435380 a000ffde 117bf040 8000061c 2a73e50c 2a73d374 01e08000
Jan 14 01:50:02 gizeh kernel: [13653.828293] 140: 00304120 80002600 00000001 00000001 00000000 00000000 00000000 00000000
Jan 14 01:50:02 gizeh kernel: [13653.828298] 160: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 01:50:02 gizeh kernel: [13653.828304] 180: 00000016 00000008 0194796d 00008103 0000002a 00004000 0194000f 00000003
Jan 14 01:50:02 gizeh kernel: [13653.828309] 1a0: 00000016 00000008 0194796d 00008103 0000002a 00004000 0194000f 00000003
Jan 14 01:50:02 gizeh kernel: [13653.828315] 1c0: 00000016 00000008 0194796d 00008103 0000002a 00004000 0194000f 00000003
Jan 14 01:50:02 gizeh kernel: [13653.828320] 1e0: 00000016 00000008 0194796d 00008103 0000002a 00004000 0194000f 00000003
Jan 14 01:50:02 gizeh kernel: [13653.828326] 200: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 01:50:02 gizeh kernel: [13653.828331] 220: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 01:50:02 gizeh kernel: [13653.828336] 240: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 01:50:02 gizeh kernel: [13653.828342] 260: 00000000 00000000 fe020001 00000100 00000000 00000000 7e020001 00000100
Jan 14 01:50:02 gizeh kernel: [13653.828347] 280: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 01:50:02 gizeh kernel: [13653.828352] 2a0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 01:50:02 gizeh kernel: [13653.828358] 2c0: 00000000 00000000 00000000 00000000 00000000 00000001 00000001 00000001
Jan 14 01:50:02 gizeh kernel: [13653.828360] eth1: Dumping tx ring
Jan 14 01:50:02 gizeh kernel: [13653.828364] 000: 00000000 b7267402 20000029 // 00000000 b7267602 20000029 // 00000000 b7267802 20000029 // 00000000 b7267a02 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828370] 004: 00000000 b7267c02 20000029 // 00000000 b7267e02 20000029 // 00000001 2498b202 20000029 // 00000001 2498aa02 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828375] 008: 00000000 b736c002 20000029 // 00000000 b736c202 20000029 // 00000000 b736c402 20000029 // 00000000 b736c602 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828380] 00c: 00000000 b736c802 20000029 // 00000000 b736ca02 20000029 // 00000000 b736cc02 20000029 // 00000000 b736ce02 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828385] 010: 00000000 b736d002 20000029 // 00000000 b736d202 20000029 // 00000000 b736d402 20000029 // 00000000 b736d602 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828390] 014: 00000000 b736d802 20000029 // 00000000 b736da02 20000029 // 00000000 b736dc02 20000029 // 00000000 b736de02 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828395] 018: 00000000 b72a2002 20000029 // 00000000 b72a2202 20000029 // 00000000 b72a2402 20000029 // 00000000 b72a2602 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828400] 01c: 00000000 b72a2802 20000029 // 00000000 b72a2a02 20000029 // 00000000 b72a2c02 20000029 // 00000000 b72a2e02 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828405] 020: 00000000 b72a3002 20000029 // 00000000 b72a3202 20000029 // 00000000 b72a3402 20000029 // 00000000 b72a3602 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828410] 024: 00000000 b72a3802 20000029 // 00000000 b72a3a02 20000029 // 00000000 b72a3c02 20000029 // 00000000 b72a3e02 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828415] 028: 00000000 b72a4002 20000029 // 00000000 b72a4202 20000029 // 00000000 b72a4402 20000029 // 00000000 b72a4602 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828420] 02c: 00000000 b72a4802 20000029 // 00000000 b72a4a02 20000029 // 00000000 b72a4c02 20000029 // 00000000 b72a4e02 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828425] 030: 00000000 bf4150fa 20000040 // 00000000 bf4150ee 22000046 // 00000000 a465c8ee 22000046 // 00000001 26b710fe 00000000
Jan 14 01:50:02 gizeh kernel: [13653.828430] 034: 00000000 b6d01374 220005ee // 00000000 a465ed0a 00000000 // 00000000 cda7562e 220005ee // 00000001 26b73d0a 00000000
Jan 14 01:50:02 gizeh kernel: [13653.828435] 038: 00000000 bf6dfd77 00000000 // 00000000 cdac7000 220005b4 // 00000000 bf414cee 22000046 // 00000000 bf4148ee 22000046
Jan 14 01:50:02 gizeh kernel: [13653.828440] 03c: 00000000 bf415cfe 00000000 // 00000000 b6d0191c 200005ee // 00000000 bf41750a 00000000 // 00000000 cda75be2 00000000
Jan 14 01:50:02 gizeh kernel: [13653.828445] 040: 00000000 04d69000 200005ee // 00000000 bf41650a 00000000 // 00000000 cdac72f1 220005b4 // 00000000 cd9b30fe 00000000
Jan 14 01:50:02 gizeh kernel: [13653.828450] 044: 00000000 b6cefd94 00000000 // 00000000 b6d01000 200005ee // 00000000 b72d78ee 20000046 // 00000001 26b7150a 00000000
Jan 14 01:50:02 gizeh kernel: [13653.828455] 048: 00000000 cda7500b 200005ee // 00000000 b72d4d0a 00000000 // 00000000 cdac786b 200005b4 // 00000000 b72d5d0a 00000000
Jan 14 01:50:02 gizeh kernel: [13653.828460] 04c: 00000000 04cd5951 20000040 // 00000000 b72d710a 00000000 // 00000000 cdac7de5 00000000 // 00000000 bf435000 220005b4
Jan 14 01:50:02 gizeh kernel: [13653.828465] 050: 00000001 2a69e8ee 2c000041 // 00000000 a465cd0a 0c000035 // 00000000 bf6df2b8 a0000579 // 00000001 2a55050a 0c000035
Jan 14 01:50:02 gizeh kernel: [13653.828470] 054: 00000000 04cd5951 a0000004 // 00000000 a465dcfe 0c000041 // 00000000 b6cefd94 8000026b // 00000000 b6d01000 a000033b
Jan 14 01:50:02 gizeh kernel: [13653.828476] 058: 00000001 26b6d8ee 2c000041 // 00000001 2613290a 0c000035 // 00000000 cda7500b a00005b3 // 00000001 2a1f150a 0c000035
Jan 14 01:50:02 gizeh kernel: [13653.828481] 05c: 00000000 04cd5951 a0000004 // 00000000 b6dfb10a 0c000035 // 00000000 bf6df2b8 a0000579 // 00000000 b6dfa4ee 2c000041
Jan 14 01:50:02 gizeh kernel: [13653.828486] 060: 00000000 a465e8fe 0c000041 // 00000000 b6cefd94 8000026b // 00000000 b6d01000 a000033b // 00000000 b6df990a 0c000035
Jan 14 01:50:02 gizeh kernel: [13653.828491] 064: 00000000 04cd5951 a0000004 // 00000000 b728710a 0c000035 // 00000000 cda7500b a00005b3 // 00000000 b728410a 0c000035
Jan 14 01:50:02 gizeh kernel: [13653.828496] 068: 00000000 bf6df2b8 a0000579 // 00000000 b728590a 0c000035 // 00000000 04cd5951 a0000004 // 00000000 a465d4fe 0c000041
Jan 14 01:50:02 gizeh kernel: [13653.828501] 06c: 00000000 b6cefd94 8000026b // 00000000 b6d01000 a000033b // 00000000 b7287d0a 0c000035 // 00000000 cda7500b a00005b3
Jan 14 01:50:02 gizeh kernel: [13653.828506] 070: 00000000 b728450a 0c000035 // 00000000 bf6df2b8 a0000579 // 00000000 b728510a 0c000035 // 00000000 04cd5951 a0000004
Jan 14 01:50:02 gizeh kernel: [13653.828512] 074: 00000000 a465e4fe 0c000041 // 00000000 b6cefd94 8000026b // 00000000 b6d01000 a000033b // 00000000 b7284d0a 0c000035
Jan 14 01:50:02 gizeh kernel: [13653.828517] 078: 00000000 cda7500b a00005b3 // 00000001 26b7310a 0c000035 // 00000000 04cd5951 a0000004 // 00000001 26b7290a 0c000035
Jan 14 01:50:02 gizeh kernel: [13653.828522] 07c: 00000000 bf6df2b8 a0000579 // 00000000 a465d0fe 0c000041 // 00000000 b6cefd94 8000026b // 00000000 b6d01000 a000033b
Jan 14 01:50:02 gizeh kernel: [13653.828527] 080: 00000001 2f80e50a 0c000035 // 00000000 cda7500b a00005b3 // 00000001 2f80e10a 0c000035 // 00000000 04cd5951 a0000004
Jan 14 01:50:02 gizeh kernel: [13653.828532] 084: 00000001 2a48610a 0c000035 // 00000000 bf6df2b8 a0000579 // 00000000 b72fb002 20000029 // 00000000 b72fb202 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828537] 088: 00000000 b72fb602 20000029 // 00000000 b72fba02 20000029 // 00000000 b72faa02 20000029 // 00000000 b72fa402 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828542] 08c: 00000000 b72fbc02 20000029 // 00000000 b72fa002 20000029 // 00000000 b72fbe02 20000029 // 00000000 b72fae02 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828547] 090: 00000000 b72fa802 20000029 // 00000000 b72fa602 20000029 // 00000001 29f47202 20000029 // 00000001 29f46402 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828552] 094: 00000001 29f47602 20000029 // 00000001 29f46002 20000029 // 00000001 29f46202 20000029 // 00000001 26a2f402 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828557] 098: 00000001 26a2e602 20000029 // 00000001 26a2e202 20000029 // 00000001 26a2e002 20000029 // 00000001 26a2ea02 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828562] 09c: 00000001 26a2ec02 20000029 // 00000001 26a2fe02 20000029 // 00000001 26afe202 20000029 // 00000001 26afea02 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828567] 0a0: 00000001 26afe402 20000029 // 00000001 26afec02 20000029 // 00000001 26affe02 20000029 // 00000001 29826402 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828572] 0a4: 00000001 29826802 20000029 // 00000001 29bcbe02 20000029 // 00000001 29bca802 20000029 // 00000001 269b9c02 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828578] 0a8: 00000001 269b8802 20000029 // 00000001 269b9e02 20000029 // 00000001 26859e02 20000029 // 00000001 26858802 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828583] 0ac: 00000001 26859602 20000029 // 00000001 26858402 20000029 // 00000001 26859002 20000029 // 00000001 26859c02 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828588] 0b0: 00000001 26859202 20000029 // 00000001 26858202 20000029 // 00000001 26859402 20000029 // 00000001 26859802 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828593] 0b4: 00000001 26858c02 20000029 // 00000001 2907f402 20000029 // 00000001 24932202 20000029 // 00000001 24933e02 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828598] 0b8: 00000001 2a2b2202 20000029 // 00000001 2a0c1c02 20000029 // 00000001 26aff402 20000029 // 00000001 26affa02 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828603] 0bc: 00000000 b7210002 20000029 // 00000000 b7210202 20000029 // 00000000 b7210402 20000029 // 00000000 b7210602 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828608] 0c0: 00000000 b7210802 20000029 // 00000000 b7210a02 20000029 // 00000000 b7210c02 20000029 // 00000000 b7210e02 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828613] 0c4: 00000000 b7211002 20000029 // 00000000 b7211202 20000029 // 00000000 b7211402 20000029 // 00000000 b7211602 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828618] 0c8: 00000000 b7211802 20000029 // 00000000 b7211a02 20000029 // 00000000 b7211c02 20000029 // 00000000 b7211e02 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828623] 0cc: 00000001 2a6c4a02 20000029 // 00000000 b6c26002 20000029 // 00000000 b6c26202 20000029 // 00000000 b6c26402 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828628] 0d0: 00000000 b6c26602 20000029 // 00000000 b6c26802 20000029 // 00000000 b6c26a02 20000029 // 00000000 b6c26c02 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828633] 0d4: 00000000 b6c26e02 20000029 // 00000000 b6c27002 20000029 // 00000000 b6c27202 20000029 // 00000000 b6c27402 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828638] 0d8: 00000000 b6c27602 20000029 // 00000000 b6c27802 20000029 // 00000000 b6c27a02 20000029 // 00000000 b6c27c02 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828643] 0dc: 00000000 b6c27e02 20000029 // 00000000 b70c0002 20000029 // 00000000 b70c0202 20000029 // 00000000 b70c0402 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828648] 0e0: 00000000 b70c0602 20000029 // 00000000 b70c0802 20000029 // 00000000 b70c0a02 20000029 // 00000000 b70c0c02 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828653] 0e4: 00000000 b70c0e02 20000029 // 00000000 b70c1002 20000029 // 00000000 b70c1202 20000029 // 00000000 b70c1402 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828659] 0e8: 00000000 b70c1602 20000029 // 00000001 2498a202 20000029 // 00000001 2498a402 20000029 // 00000001 2498ba02 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828664] 0ec: 00000000 b70c1802 20000029 // 00000000 b70c1a02 20000029 // 00000000 b70c1c02 20000029 // 00000000 b70c1e02 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828669] 0f0: 00000000 b7266002 20000029 // 00000000 b7266202 20000029 // 00000000 37aae002 20000029 // 00000000 37aae402 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828673] 0f4: 00000000 37aae602 20000029 // 00000000 37aaea02 20000029 // 00000000 37aaec02 20000029 // 00000000 37aaee02 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828678] 0f8: 00000000 b7266402 20000029 // 00000000 b7266602 20000029 // 00000000 b7266802 20000029 // 00000000 b7266a02 20000029
Jan 14 01:50:02 gizeh kernel: [13653.828683] 0fc: 00000000 b7266c02 20000029 // 00000000 b7266e02 20000029 // 00000000 b7267002 20000029 // 00000000 b7267202 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828017] eth1: Got tx_timeout. irq: 00000036
Jan 14 03:10:22 gizeh kernel: [18473.828021] eth1: Ring at 12a73c000
Jan 14 03:10:22 gizeh kernel: [18473.828023] eth1: Dumping tx registers
Jan 14 03:10:22 gizeh kernel: [18473.828028] 0: 00000036 00000000 00000003 000a000d 00000000 00000000 00000000 00000000
Jan 14 03:10:22 gizeh kernel: [18473.828034] 20: 06255300 ff701365 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 03:10:22 gizeh kernel: [18473.828039] 40: 0420e20e 0000a855 00002e20 00000000 00000000 00000000 00000000 00000000
Jan 14 03:10:22 gizeh kernel: [18473.828045] 60: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 03:10:22 gizeh kernel: [18473.828050] 80: 003b0f3c 00c02601 00040000 007f0020 0000061c 00000001 00200000 80007fae
Jan 14 03:10:22 gizeh kernel: [18473.828056] a0: 0016070f 00000016 d2091100 0000b21b 00000001 00000000 2d00cccd 00004ce4
Jan 14 03:10:22 gizeh kernel: [18473.828061] c0: 10000001 00000001 00000001 00000001 00000001 00000001 00000001 00000001
Jan 14 03:10:22 gizeh kernel: [18473.828067] e0: 00000001 00000001 00000001 00000001 00000001 00000001 00000001 00000001
Jan 14 03:10:22 gizeh kernel: [18473.828072] 100: 2a73e000 2a73c000 01ff00ff 00002601 00010064 00000000 0000002a 2a73e600
Jan 14 03:10:22 gizeh kernel: [18473.828078] 120: 2a73d4c0 b72a5e40 a000ffeb 117bf040 8000061c 2a73e604 2a73d374 01e08000
Jan 14 03:10:22 gizeh kernel: [18473.828083] 140: 00304120 80002600 00000001 00000001 00000000 00000000 00000000 00000000
Jan 14 03:10:22 gizeh kernel: [18473.828089] 160: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 03:10:22 gizeh kernel: [18473.828095] 180: 00000016 00000008 0194796d 00008103 0000002a 00004000 0194000f 00000003
Jan 14 03:10:22 gizeh kernel: [18473.828100] 1a0: 00000016 00000008 0194796d 00008103 0000002a 00004000 0194000f 00000003
Jan 14 03:10:22 gizeh kernel: [18473.828106] 1c0: 00000016 00000008 0194796d 00008103 0000002a 00004000 0194000f 00000003
Jan 14 03:10:22 gizeh kernel: [18473.828111] 1e0: 00000016 00000008 0194796d 00008103 0000002a 00004000 0194000f 00000003
Jan 14 03:10:22 gizeh kernel: [18473.828117] 200: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 03:10:22 gizeh kernel: [18473.828122] 220: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 03:10:22 gizeh kernel: [18473.828127] 240: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 03:10:22 gizeh kernel: [18473.828133] 260: 00000000 00000000 fe020001 00000100 00000000 00000000 7e020001 00000100
Jan 14 03:10:22 gizeh kernel: [18473.828138] 280: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 03:10:22 gizeh kernel: [18473.828143] 2a0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 03:10:22 gizeh kernel: [18473.828149] 2c0: 00000000 00000000 00000000 00000000 00000000 00000001 00000001 00000001
Jan 14 03:10:22 gizeh kernel: [18473.828151] eth1: Dumping tx ring
Jan 14 03:10:22 gizeh kernel: [18473.828155] 000: 00000000 b736d402 20000029 // 00000000 b736d602 20000029 // 00000000 b736d802 20000029 // 00000000 b736da02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828161] 004: 00000000 b736de02 20000029 // 00000000 b736dc02 20000029 // 00000000 b734a202 20000029 // 00000000 b736c202 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828166] 008: 00000000 b7210002 20000029 // 00000000 b7210402 20000029 // 00000000 b7210602 20000029 // 00000000 b7210a02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828171] 00c: 00000000 b7210c02 20000029 // 00000000 b7211002 20000029 // 00000000 b7210e02 20000029 // 00000000 b7211202 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828176] 010: 00000000 b7211402 20000029 // 00000000 b7211602 20000029 // 00000000 b7211802 20000029 // 00000000 b7211a02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828181] 014: 00000000 b7211c02 20000029 // 00000000 b7211e02 20000029 // 00000000 b72a2202 20000029 // 00000000 b7210202 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828186] 018: 00000000 b6c26002 20000029 // 00000000 b6c26402 20000029 // 00000000 b6c26802 20000029 // 00000000 b6c26a02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828191] 01c: 00000000 b6c26c02 20000029 // 00000000 b6c26e02 20000029 // 00000000 b6c27002 20000029 // 00000000 b6c27202 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828196] 020: 00000000 b6c27402 20000029 // 00000000 b6c27602 20000029 // 00000000 b6c27802 20000029 // 00000000 b6c27a02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828201] 024: 00000000 b6c27c02 20000029 // 00000000 b6c27e02 20000029 // 00000000 b7210802 20000029 // 00000000 b6c26602 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828206] 028: 00000000 b70c0002 20000029 // 00000000 b70c0602 20000029 // 00000000 b70c0802 20000029 // 00000000 b70c0a02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828211] 02c: 00000000 b70c0c02 20000029 // 00000000 b70c0e02 20000029 // 00000000 b70c1002 20000029 // 00000000 b70c1202 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828216] 030: 00000000 b70c1402 20000029 // 00000000 b70c1602 20000029 // 00000000 b70c1a02 20000029 // 00000000 b70c1c02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828221] 034: 00000000 b70c1e02 20000029 // 00000000 b736c402 20000029 // 00000000 b70c0402 20000029 // 00000000 cdb26002 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828226] 038: 00000000 cdb26602 20000029 // 00000000 cdb26802 20000029 // 00000000 cdb26a02 20000029 // 00000000 cdb26c02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828231] 03c: 00000000 cdb26e02 20000029 // 00000000 cdb27002 20000029 // 00000000 cdb27202 20000029 // 00000000 cdb27402 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828236] 040: 00000000 cdb27602 20000029 // 00000000 cdb27802 20000029 // 00000000 cdb27a02 20000029 // 00000000 cdb27c02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828240] 044: 00000000 cdb27e02 20000029 // 00000000 b6c26202 20000029 // 00000000 b70c1802 20000029 // 00000000 cdb26402 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828246] 048: 00000000 b7304002 20000029 // 00000000 b7304402 20000029 // 00000000 b7304802 20000029 // 00000000 b7304a02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828250] 04c: 00000000 b7304c02 20000029 // 00000000 b7304e02 20000029 // 00000000 b7305002 20000029 // 00000000 00000000 00000000
Jan 14 03:10:22 gizeh kernel: [18473.828256] 050: 00000000 b72a5002 00000000 // 00000000 20000040 a0000029 // 00000000 22000040 a0000029 // 00000000 22000040 a0000029
Jan 14 03:10:22 gizeh kernel: [18473.828261] 054: 00000000 22000040 a0000029 // 00000000 22000040 a0000029 // 00000000 22000040 a0000029 // 00000000 22000040 a0000029
Jan 14 03:10:22 gizeh kernel: [18473.828266] 058: 00000000 22000040 a0000029 // 00000000 22000040 a0000029 // 00000000 22000040 a0000029 // 00000000 22000040 a0000029
Jan 14 03:10:22 gizeh kernel: [18473.828271] 05c: 00000000 22000040 a0000029 // 00000000 22000040 a0000029 // 00000000 22000040 a0000029 // 00000000 22000040 a0000029
Jan 14 03:10:22 gizeh kernel: [18473.828276] 060: 00000001 2498b202 20000029 // 00000001 2498aa02 20000029 // 00000001 2498a202 20000029 // 00000001 2498a402 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828281] 064: 00000001 2498ba02 20000029 // 00000001 2a6c4a02 20000029 // 00000001 26afe202 20000029 // 00000001 26afea02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828286] 068: 00000001 26afe402 20000029 // 00000001 26afec02 20000029 // 00000001 26affe02 20000029 // 00000001 26aff402 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828291] 06c: 00000001 26affa02 20000029 // 00000001 2a0c1c02 20000029 // 00000001 2a2b2202 20000029 // 00000001 24932202 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828296] 070: 00000001 24933e02 20000029 // 00000001 2907f402 20000029 // 00000001 26859e02 20000029 // 00000001 26858802 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828301] 074: 00000001 26859602 20000029 // 00000001 26858402 20000029 // 00000001 26859002 20000029 // 00000001 26859c02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828306] 078: 00000001 26859202 20000029 // 00000001 26858202 20000029 // 00000001 26859402 20000029 // 00000001 26859802 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828311] 07c: 00000001 26858c02 20000029 // 00000001 269b9c02 20000029 // 00000001 269b8802 20000029 // 00000001 269b9e02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828316] 080: 00000001 29bcbe02 20000029 // 00000001 29bca802 20000029 // 00000001 29826402 20000029 // 00000001 29826802 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828321] 084: 00000001 26a2f402 20000029 // 00000001 26a2e602 20000029 // 00000001 26a2e202 20000029 // 00000001 26a2e002 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828326] 088: 00000001 26a2ea02 20000029 // 00000001 26a2ec02 20000029 // 00000001 29f47202 20000029 // 00000001 29f46402 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828331] 08c: 00000001 29f47602 20000029 // 00000001 29f46002 20000029 // 00000001 29f46202 20000029 // 00000000 b72fb002 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828336] 090: 00000000 b72fb202 20000029 // 00000000 b72fb602 20000029 // 00000000 b72fba02 20000029 // 00000000 b72faa02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828341] 094: 00000000 b72fa402 20000029 // 00000000 b72fbc02 20000029 // 00000000 b72fa002 20000029 // 00000000 b72fbe02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828346] 098: 00000000 b72fae02 20000029 // 00000000 37aaf202 20000029 // 00000000 37aaf402 20000029 // 00000000 37aaf602 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828351] 09c: 00000000 37aaf802 20000029 // 00000000 37aafa02 20000029 // 00000000 37aafc02 20000029 // 00000000 37aafe02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828356] 0a0: 00000000 37aaf002 20000029 // 00000000 37aae002 20000029 // 00000000 37aae402 20000029 // 00000000 37aae602 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828361] 0a4: 00000000 37aaea02 20000029 // 00000000 37aaec02 20000029 // 00000000 37aaee02 20000029 // 00000001 26a2fe02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828366] 0a8: 00000001 24932a02 20000029 // 00000001 24933602 20000029 // 00000001 24933202 20000029 // 00000001 24933802 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828371] 0ac: 00000001 269b9802 20000029 // 00000001 269b8e02 20000029 // 00000001 269b9a02 20000029 // 00000001 2498a002 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828376] 0b0: 00000001 29bcb402 20000029 // 00000001 24932602 20000029 // 00000001 24932402 20000029 // 00000001 269b8402 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828381] 0b4: 00000000 37aae802 20000029 // 00000001 24933c02 20000029 // 00000001 269b9002 20000029 // 00000001 26afe002 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828386] 0b8: 00000000 b7256002 20000029 // 00000000 b7256402 20000029 // 00000000 b7256802 20000029 // 00000000 b7256a02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828391] 0bc: 00000000 b7256c02 20000029 // 00000000 b7256e02 20000029 // 00000000 b7257002 20000029 // 00000000 b7257202 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828396] 0c0: 00000000 b7257402 20000029 // 00000000 b7257602 20000029 // 00000000 b7257802 20000029 // 00000000 b7257a02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828401] 0c4: 00000000 b7257c02 20000029 // 00000000 b7257e02 20000029 // 00000001 24932c02 20000029 // 00000000 b7256602 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828406] 0c8: 00000000 b734a002 20000029 // 00000000 b734a602 20000029 // 00000000 b734a802 20000029 // 00000000 b734aa02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828411] 0cc: 00000000 b734ac02 20000029 // 00000000 b734ae02 20000029 // 00000000 b734b002 20000029 // 00000000 b734b202 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828416] 0d0: 00000000 b734b402 20000029 // 00000000 b734b602 20000029 // 00000000 b734b802 20000029 // 00000000 b734ba02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828421] 0d4: 00000000 b734bc02 20000029 // 00000000 b734be02 20000029 // 00000000 37aae202 20000029 // 00000000 b734a402 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828426] 0d8: 00000000 b7266602 20000029 // 00000000 b7266802 20000029 // 00000000 b7266a02 20000029 // 00000000 b7266c02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828431] 0dc: 00000000 b7266e02 20000029 // 00000000 b7267002 20000029 // 00000000 b7267202 20000029 // 00000000 b7267402 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828436] 0e0: 00000000 b7267602 20000029 // 00000000 b7267802 20000029 // 00000000 b7267a02 20000029 // 00000000 b7267c02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828441] 0e4: 00000000 b7266402 20000029 // 00000000 b7267e02 20000029 // 00000000 b7256202 20000029 // 00000000 b7266202 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828446] 0e8: 00000000 b72a2002 20000029 // 00000000 b72a2402 20000029 // 00000000 b72a2802 20000029 // 00000000 b72a2a02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828451] 0ec: 00000000 b72a2c02 20000029 // 00000000 b72a2e02 20000029 // 00000000 b72a3002 20000029 // 00000000 b72a3202 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828456] 0f0: 00000000 b72a3402 20000029 // 00000000 b72a3602 20000029 // 00000000 b72a3802 20000029 // 00000000 b72a3a02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828461] 0f4: 00000000 b72a3c02 20000029 // 00000000 b72a3e02 20000029 // 00000000 b7266002 20000029 // 00000000 b72a2602 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828466] 0f8: 00000000 b736c002 20000029 // 00000000 b736c602 20000029 // 00000000 b736c802 20000029 // 00000000 b736ca02 20000029
Jan 14 03:10:22 gizeh kernel: [18473.828470] 0fc: 00000000 b736cc02 20000029 // 00000000 b736ce02 20000029 // 00000000 b736d002 20000029 // 00000000 b736d202 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836016] eth1: Got tx_timeout. irq: 00000036
Jan 14 05:03:47 gizeh kernel: [25278.836019] eth1: Ring at 12a73c000
Jan 14 05:03:47 gizeh kernel: [25278.836021] eth1: Dumping tx registers
Jan 14 05:03:47 gizeh kernel: [25278.836026] 0: 00000036 00000000 00000003 0002000d 00000000 00000000 00000000 00000000
Jan 14 05:03:47 gizeh kernel: [25278.836032] 20: 06255300 ff701365 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 05:03:47 gizeh kernel: [25278.836038] 40: 0420e20e 0000a855 00002e20 00000000 00000000 00000000 00000000 00000000
Jan 14 05:03:47 gizeh kernel: [25278.836043] 60: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 05:03:47 gizeh kernel: [25278.836049] 80: 003b0f3c 00000000 00040000 007f0020 0000061c 00000001 00200000 80007fae
Jan 14 05:03:47 gizeh kernel: [25278.836054] a0: 0016070f 00000016 d2091100 0000b21b 00000001 00000000 2d00cccd 00004ce4
Jan 14 05:03:47 gizeh kernel: [25278.836059] c0: 10000001 00000001 00000001 00000001 00000001 00000001 00000001 00000001
Jan 14 05:03:47 gizeh kernel: [25278.836065] e0: 00000001 00000001 00000001 00000001 00000001 00000001 00000001 00000001
Jan 14 05:03:47 gizeh kernel: [25278.836070] 100: 2a73e000 2a73c000 01ff00ff 00000000 00010064 00000000 00000026 2a73e700
Jan 14 05:03:47 gizeh kernel: [25278.836076] 120: 2a73d4c0 00002c00 b7302a02 117bf040 8000061c 2a73e614 2a73d374 01e08000
Jan 14 05:03:47 gizeh kernel: [25278.836081] 140: 00304120 00002600 00000001 00000001 00000000 00000000 00000000 00000000
Jan 14 05:03:47 gizeh kernel: [25278.836087] 160: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 05:03:47 gizeh kernel: [25278.836092] 180: 00000016 00000008 0194796d 00008103 0000002a 00004000 0194000f 00000003
Jan 14 05:03:47 gizeh kernel: [25278.836098] 1a0: 00000016 00000008 0194796d 00008103 0000002a 00004000 0194000f 00000003
Jan 14 05:03:47 gizeh kernel: [25278.836103] 1c0: 00000016 00000008 0194796d 00008103 0000002a 00004000 0194000f 00000003
Jan 14 05:03:47 gizeh kernel: [25278.836109] 1e0: 00000016 00000008 0194796d 00008103 0000002a 00004000 0194000f 00000003
Jan 14 05:03:47 gizeh kernel: [25278.836114] 200: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 05:03:47 gizeh kernel: [25278.836119] 220: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 05:03:47 gizeh kernel: [25278.836125] 240: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 05:03:47 gizeh kernel: [25278.836130] 260: 00000000 00000000 fe020001 00000100 00000000 00000000 7e020001 00000100
Jan 14 05:03:47 gizeh kernel: [25278.836136] 280: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 05:03:47 gizeh kernel: [25278.836141] 2a0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 05:03:47 gizeh kernel: [25278.836147] 2c0: 00000000 00000000 00000000 00000000 00000000 00000001 00000001 00000001
Jan 14 05:03:47 gizeh kernel: [25278.836149] eth1: Dumping tx ring
Jan 14 05:03:47 gizeh kernel: [25278.836153] 000: 00000000 b72a2802 20000029 // 00000000 b72a2a02 20000029 // 00000000 b72a2c02 20000029 // 00000000 b72a2e02 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836158] 004: 00000000 b72a3002 20000029 // 00000000 b72a3202 20000029 // 00000000 b72a3402 20000029 // 00000000 b72a3602 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836163] 008: 00000000 b72a3802 20000029 // 00000000 b72a3a02 20000029 // 00000000 b72a3c02 20000029 // 00000000 b72a3e02 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836168] 00c: 00000000 b72a2602 20000029 // 00000000 b736c002 20000029 // 00000000 b736c402 20000029 // 00000000 b736c802 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836173] 010: 00000000 b736ca02 20000029 // 00000000 b736cc02 20000029 // 00000000 b736ce02 20000029 // 00000000 b736d002 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836178] 014: 00000000 b736d202 20000029 // 00000000 b736d402 20000029 // 00000000 b736d602 20000029 // 00000000 b736d802 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836183] 018: 00000000 b736da02 20000029 // 00000000 b736dc02 20000029 // 00000000 b736de02 20000029 // 00000000 b72a2202 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836188] 01c: 00000000 b7256002 20000029 // 00000000 b7266202 20000029 // 00000000 b7210002 20000029 // 00000000 b7210402 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836193] 020: 00000000 b7210602 20000029 // 00000000 b7210a02 20000029 // 00000000 b7210c02 20000029 // 00000000 b7210e02 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836198] 024: 00000000 b7211002 20000029 // 00000000 b7211202 20000029 // 00000000 b7211402 20000029 // 00000000 b7211602 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836203] 028: 00000000 b7211802 20000029 // 00000000 b7211a02 20000029 // 00000000 b7211c02 20000029 // 00000000 b7211e02 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836208] 02c: 00000000 b736c602 20000029 // 00000000 b7210802 20000029 // 00000000 b6c26002 20000029 // 00000000 b6c26402 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836213] 030: 00000000 b6c26802 20000029 // 00000000 b6c26a02 20000029 // 00000000 b6c26c02 20000029 // 00000000 b6c26e02 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836218] 034: 00000000 b6c27002 20000029 // 00000000 b6c27202 20000029 // 00000000 b6c27402 20000029 // 00000000 b6c27602 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836223] 038: 00000000 b6c27802 20000029 // 00000000 b6c27a02 20000029 // 00000000 b6c27c02 20000029 // 00000000 b6c27e02 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836228] 03c: 00000000 b7210202 20000029 // 00000000 b6c26602 20000029 // 00000000 b734a002 20000029 // 00000000 b734a802 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836233] 040: 00000000 b734aa02 20000029 // 00000000 b734ac02 20000029 // 00000000 b734a602 20000029 // 00000000 b734ae02 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836238] 044: 00000000 b734b002 20000029 // 00000000 b734b202 20000029 // 00000000 b734b402 20000029 // 00000000 b734b602 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836243] 048: 00000000 b734b802 20000029 // 00000000 b734ba02 20000029 // 00000000 b734bc02 20000029 // 00000000 b734be02 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836248] 04c: 00000000 b736c202 20000029 // 00000000 b734a402 20000029 // 00000000 b70c0002 20000029 // 00000000 b70c0402 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836253] 050: 00000000 b70c0602 20000029 // 00000000 b70c0a02 20000029 // 00000000 b70c0c02 20000029 // 00000000 b70c0e02 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836258] 054: 00000000 b70c1002 20000029 // 00000000 b70c1202 20000029 // 00000000 b70c1402 20000029 // 00000000 b70c1802 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836263] 058: 00000000 b70c1a02 20000029 // 00000000 b70c1c02 20000029 // 00000000 b70c1e02 20000029 // 00000000 b6c26202 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836268] 05c: 00000000 b70c0802 20000029 // 00000000 b6c7e002 20000029 // 00000000 b6c7e402 20000029 // 00000000 00000000 00000000
Jan 14 05:03:47 gizeh kernel: [25278.836273] 060: 00000000 22000040 a0000029 // 00000000 b7305602 a0000029 // 00000000 b7305802 a0000029 // 00000000 b7305a02 a0000029
Jan 14 05:03:47 gizeh kernel: [25278.836278] 064: 00000000 b7305c02 a0000029 // 00000000 b7305e02 a0000029 // 00000000 b7304002 a0000029 // 00000000 b7304402 a0000029
Jan 14 05:03:47 gizeh kernel: [25278.836283] 068: 00000000 b7304802 a0000029 // 00000000 b7304a02 a0000029 // 00000000 b7304c02 a0000029 // 00000000 b7304e02 a0000029
Jan 14 05:03:47 gizeh kernel: [25278.836288] 06c: 00000000 b7305002 a0000029 // 00000000 b7305402 a0000029 // 00000001 24932202 a0000029 // 00000001 24932a02 a0000029
Jan 14 05:03:47 gizeh kernel: [25278.836293] 070: 00000001 24933202 20000029 // 00000001 24933802 20000029 // 00000001 24932602 20000029 // 00000001 26afe402 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836298] 074: 00000001 26afec02 20000029 // 00000001 26affe02 20000029 // 00000001 26aff402 20000029 // 00000001 26affa02 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836303] 078: 00000001 26afe002 20000029 // 00000001 269b9c02 20000029 // 00000001 269b9e02 20000029 // 00000001 269b9802 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836308] 07c: 00000001 269b9a02 20000029 // 00000001 269b8402 20000029 // 00000001 269b9002 20000029 // 00000001 29bcbe02 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836313] 080: 00000001 29bcb402 20000029 // 00000001 2498b202 20000029 // 00000001 2498a402 20000029 // 00000001 2498ba02 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836318] 084: 00000001 2498a002 20000029 // 00000001 26a2f402 20000029 // 00000001 26a2e202 20000029 // 00000001 26a2e002 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836323] 088: 00000001 26a2ec02 20000029 // 00000001 26a2fe02 20000029 // 00000001 29f47202 20000029 // 00000001 29f46002 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836329] 08c: 00000001 29f46202 20000029 // 00000001 29826402 20000029 // 00000001 26858802 20000029 // 00000001 26859602 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836334] 090: 00000001 26858402 20000029 // 00000001 26859c02 20000029 // 00000001 26859202 20000029 // 00000001 26858202 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836339] 094: 00000001 26859402 20000029 // 00000001 26859802 20000029 // 00000001 26858c02 20000029 // 00000001 2a6c4a02 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836344] 098: 00000000 b7304602 20000029 // 00000001 24933602 20000029 // 00000001 24933c02 20000029 // 00000001 24932c02 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836349] 09c: 00000001 26afe202 20000029 // 00000001 29bca802 20000029 // 00000001 2498a202 20000029 // 00000001 26a2e602 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836354] 0a0: 00000001 29826802 20000029 // 00000001 26859002 20000029 // 00000001 2a0c1c02 20000029 // 00000001 24932402 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836359] 0a4: 00000001 26afea02 20000029 // 00000001 269b8e02 20000029 // 00000001 26a2ea02 20000029 // 00000001 29f47602 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836364] 0a8: 00000001 26859e02 20000029 // 00000001 24933e02 20000029 // 00000001 2498aa02 20000029 // 00000001 269b8802 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836369] 0ac: 00000001 29f46402 20000029 // 00000001 2a2b2202 20000029 // 00000000 37aae002 20000029 // 00000000 37aae602 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836374] 0b0: 00000000 37aae802 20000029 // 00000000 37aaea02 20000029 // 00000000 37aaec02 20000029 // 00000000 37aaee02 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836379] 0b4: 00000000 37aaf002 20000029 // 00000000 37aaf202 20000029 // 00000000 37aaf402 20000029 // 00000000 37aaf602 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836384] 0b8: 00000000 37aaf802 20000029 // 00000000 37aafa02 20000029 // 00000000 37aafc02 20000029 // 00000000 37aafe02 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836388] 0bc: 00000000 b7304202 20000029 // 00000000 37aae402 20000029 // 00000000 b72a4002 20000029 // 00000000 b72a4402 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836393] 0c0: 00000000 b72a4602 20000029 // 00000000 b72a4a02 20000029 // 00000000 b72a4c02 20000029 // 00000000 b72a4e02 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836398] 0c4: 00000000 b72a5002 20000029 // 00000000 b72a5202 20000029 // 00000000 b72a5402 20000029 // 00000000 b72a5602 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836403] 0c8: 00000000 b72a5802 20000029 // 00000000 b72a5a02 20000029 // 00000000 b72a5c02 20000029 // 00000000 b72a5e02 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836409] 0cc: 00000001 2907f402 20000029 // 00000000 b72a4802 20000029 // 00000000 b732c202 20000029 // 00000000 b732c402 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836414] 0d0: 00000000 b732c802 20000029 // 00000000 b732ca02 20000029 // 00000000 b732cc02 20000029 // 00000000 b732ce02 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836419] 0d4: 00000000 b732d202 20000029 // 00000000 b732d402 20000029 // 00000000 b732d002 20000029 // 00000000 b732d602 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836423] 0d8: 00000000 b732d802 20000029 // 00000000 b732da02 20000029 // 00000000 b732dc02 20000029 // 00000000 b732de02 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836428] 0dc: 00000000 37aae202 20000029 // 00000000 b732c002 20000029 // 00000000 b7256202 20000029 // 00000000 b7256602 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836434] 0e0: 00000000 b7256802 20000029 // 00000000 b7256a02 20000029 // 00000000 b7256e02 20000029 // 00000000 b7257002 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836439] 0e4: 00000000 b7257202 20000029 // 00000000 b7257402 20000029 // 00000000 b7257602 20000029 // 00000000 b7257802 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836444] 0e8: 00000000 b7257a02 20000029 // 00000000 b7257c02 20000029 // 00000000 b7257e02 20000029 // 00000000 b732c602 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836449] 0ec: 00000000 b7256402 20000029 // 00000000 b7266002 20000029 // 00000000 b7266602 20000029 // 00000000 b7266802 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836454] 0f0: 00000000 b7266a02 20000029 // 00000000 b7266c02 20000029 // 00000000 b7266e02 20000029 // 00000000 b7267002 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836459] 0f4: 00000000 b7267202 20000029 // 00000000 b7267402 20000029 // 00000000 b7267802 20000029 // 00000000 b7267602 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836464] 0f8: 00000000 b7267a02 20000029 // 00000000 b7267c02 20000029 // 00000000 b7267e02 20000029 // 00000000 b72a4202 20000029
Jan 14 05:03:47 gizeh kernel: [25278.836469] 0fc: 00000000 b7266402 20000029 // 00000000 b7256c02 20000029 // 00000000 b72a2002 20000029 // 00000000 b72a2402 20000029
Jan 14 06:25:34 gizeh rsyslogd: [origin software="rsyslogd" swVersion="4.6.4" x-pid="1750" x-info="http://www.rsyslog.com"] rsyslogd was HUPed, type 'lightweight'.
Jan 14 07:15:47 gizeh kernel: [33198.836015] eth1: Got tx_timeout. irq: 00000036
Jan 14 07:15:47 gizeh kernel: [33198.836019] eth1: Ring at 12a73c000
Jan 14 07:15:47 gizeh kernel: [33198.836021] eth1: Dumping tx registers
Jan 14 07:15:47 gizeh kernel: [33198.836026] 0: 00000036 00000000 00000003 000d000d 00000000 00000000 00000000 00000000
Jan 14 07:15:47 gizeh kernel: [33198.836032] 20: 06255300 ff701365 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 07:15:47 gizeh kernel: [33198.836037] 40: 0420e20e 0000a855 00002e20 00000000 00000000 00000000 00000000 00000000
Jan 14 07:15:47 gizeh kernel: [33198.836042] 60: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 07:15:47 gizeh kernel: [33198.836048] 80: 003b0f3c 00c02601 00040000 007f0020 0000061c 00000001 00200000 80007fae
Jan 14 07:15:47 gizeh kernel: [33198.836054] a0: 0016070f 00000016 d2091100 0000b21b 00000001 00000000 2d00cccd 00004ce4
Jan 14 07:15:47 gizeh kernel: [33198.836059] c0: 10000001 00000001 00000001 00000001 00000001 00000001 00000001 00000001
Jan 14 07:15:47 gizeh kernel: [33198.836064] e0: 00000001 00000001 00000001 00000001 00000001 00000001 00000001 00000001
Jan 14 07:15:47 gizeh kernel: [33198.836070] 100: 2a73e000 2a73c000 01ff00ff 00002601 00010064 00000000 00000039 2a73e800
Jan 14 07:15:47 gizeh kernel: [33198.836076] 120: 2a73d4c0 00002c40 b73029c2 117bf040 8000061c 2a73e614 2a73d374 01e08000
Jan 14 07:15:47 gizeh kernel: [33198.836081] 140: 00304120 00002600 00000001 00000001 00000000 00000000 00000000 00000000
Jan 14 07:15:47 gizeh kernel: [33198.836086] 160: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 07:15:47 gizeh kernel: [33198.836092] 180: 00000016 00000008 0194796d 00008103 0000002a 00004000 0194000f 00000003
Jan 14 07:15:47 gizeh kernel: [33198.836097] 1a0: 00000016 00000008 0194796d 00008103 0000002a 00004000 0194000f 00000003
Jan 14 07:15:47 gizeh kernel: [33198.836103] 1c0: 00000016 00000008 0194796d 00008103 0000002a 00004000 0194000f 00000003
Jan 14 07:15:47 gizeh kernel: [33198.836108] 1e0: 00000016 00000008 0194796d 00008103 0000002a 00004000 0194000f 00000003
Jan 14 07:15:47 gizeh kernel: [33198.836114] 200: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 07:15:47 gizeh kernel: [33198.836119] 220: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 07:15:47 gizeh kernel: [33198.836124] 240: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 07:15:47 gizeh kernel: [33198.836130] 260: 00000000 00000000 fe020001 00000100 00000000 00000000 7e020001 00000100
Jan 14 07:15:47 gizeh kernel: [33198.836135] 280: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 07:15:47 gizeh kernel: [33198.836141] 2a0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Jan 14 07:15:47 gizeh kernel: [33198.836146] 2c0: 00000000 00000000 00000000 00000000 00000000 00000001 00000001 00000001
Jan 14 07:15:47 gizeh kernel: [33198.836148] eth1: Dumping tx ring
Jan 14 07:15:47 gizeh kernel: [33198.836152] 000: 00000000 b732c602 20000029 // 00000000 b732ca02 20000029 // 00000000 b732cc02 20000029 // 00000000 b732ce02 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836158] 004: 00000000 b732d002 20000029 // 00000000 b732d202 20000029 // 00000000 b732d602 20000029 // 00000000 b732d402 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836163] 008: 00000000 b732d802 20000029 // 00000000 b732da02 20000029 // 00000000 b732dc02 20000029 // 00000000 b732de02 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836168] 00c: 00000000 b72a4202 20000029 // 00000000 b732c202 20000029 // 00000000 b7256002 20000029 // 00000000 b7256402 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836173] 010: 00000000 99e2b802 20000029 // 00000000 99e2b202 20000029 // 00000000 99e2ae02 20000029 // 00000000 99e2a202 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836178] 014: 00000000 99e2b402 20000029 // 00000000 99e2aa02 20000029 // 00000000 99e2bc02 20000029 // 00000000 99e2ba02 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836183] 018: 00000000 99e2a802 20000029 // 00000000 99e2a602 20000029 // 00000000 b70c0602 20000029 // 00000000 b7256e02 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836188] 01c: 00000000 55a2e402 20000029 // 00000000 55a2f602 20000029 // 00000000 55a2f202 20000029 // 00000000 55a2f802 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836193] 020: 00000000 55a2ec02 20000029 // 00000000 55a2e202 20000029 // 00000000 55a2ea02 20000029 // 00000000 55a2fe02 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836198] 024: 00000000 55a2fc02 20000029 // 00000000 55a2fa02 20000029 // 00000000 55a2ee02 20000029 // 00000000 55a2e802 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836203] 028: 00000000 55a2e002 20000029 // 00000000 55a2e602 20000029 // 00000000 99e2be02 20000029 // 00000000 99e2a002 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836208] 02c: 00000000 99e2b002 20000029 // 00000000 b7256602 20000029 // 00000000 b7256a02 20000029 // 00000000 b7257e02 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836213] 030: 00000000 b7256c02 20000029 // 00000000 b7257202 20000029 // 00000000 b7257602 20000029 // 00000000 b7257002 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836218] 034: 00000000 b7257402 20000029 // 00000000 b7257a02 20000029 // 00000000 b7257c02 20000029 // 00000000 b7257802 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836223] 038: 00000000 b732c802 20000029 // 00000000 55a2f002 20000029 // 00000000 99e2a402 20000029 // 00000000 99e2b602 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836228] 03c: 00000000 b7256802 20000029 // 00000000 55a2f402 20000029 // 00000001 1e7c4002 20000029 // 00000001 1e7c4402 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836233] 040: 00000001 1e7c4802 20000029 // 00000001 1e7c4a02 20000029 // 00000001 1e7c4c02 20000029 // 00000001 1e7c4e02 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836238] 044: 00000001 1e7c5002 20000029 // 00000001 1e7c5202 20000029 // 00000001 1e7c5402 20000029 // 00000001 1e7c5602 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836243] 048: 00000001 1e7c5802 20000029 // 00000001 1e7c5a02 20000029 // 00000001 1e7c5e02 20000029 // 00000000 99e2ac02 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836248] 04c: 00000001 1e7c4202 20000029 // 00000001 1e7c5c02 20000029 // 00000001 1faac002 20000029 // 00000001 1faac802 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836253] 050: 00000001 1faaca02 20000029 // 00000001 1faacc02 20000029 // 00000001 1faac602 20000029 // 00000001 1faace02 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836258] 054: 00000001 1faad002 20000029 // 00000001 1faad202 20000029 // 00000001 1faad402 20000029 // 00000001 1faad602 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836263] 058: 00000001 1faad802 20000029 // 00000001 1faada02 20000029 // 00000001 1faadc02 20000029 // 00000001 1faade02 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836268] 05c: 00000001 1e7c4602 20000029 // 00000001 1faac202 20000029 // 00000001 13708002 20000029 // 00000001 13708402 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836273] 060: 00000001 13708602 20000029 // 00000001 13708c02 20000029 // 00000001 13708e02 20000029 // 00000001 13709002 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836278] 064: 00000001 13709202 20000029 // 00000001 13709402 20000029 // 00000001 13709602 20000029 // 00000001 13709802 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836283] 068: 00000001 13709a02 20000029 // 00000001 13709c02 20000029 // 00000001 13709e02 20000029 // 00000000 b7256202 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836288] 06c: 00000001 13708802 20000029 // 00000001 1faac402 20000029 // 00000001 0d884002 20000029 // 00000000 00000000 00000000
Jan 14 07:15:47 gizeh kernel: [33198.836293] 070: 00000000 b6c7e602 a0000029 // 00000000 b6c7ea02 a0000029 // 00000000 b6c7ec02 a0000029 // 00000000 b6c7ee02 a0000029
Jan 14 07:15:47 gizeh kernel: [33198.836298] 074: 00000000 b6c7f202 a0000029 // 00000000 b6c7f402 a0000029 // 00000000 b6c7f602 a0000029 // 00000000 b6c7e202 a0000029
Jan 14 07:15:47 gizeh kernel: [33198.836303] 078: 00000000 b6c7f802 a0000029 // 00000000 b6c7fa02 a0000029 // 00000000 b6c7fc02 a0000029 // 00000000 b6c7fe02 a0000029
Jan 14 07:15:47 gizeh kernel: [33198.836308] 07c: 00000000 b6c7e402 a0000029 // 00000000 b6c7e002 a0000029 // 00000001 2907f402 a0000029 // 00000001 29f47202 a0000029
Jan 14 07:15:47 gizeh kernel: [33198.836313] 080: 00000001 29f47602 20000029 // 00000001 29f46402 20000029 // 00000001 269b9c02 20000029 // 00000001 269b9a02 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836318] 084: 00000001 269b8402 20000029 // 00000001 269b9002 20000029 // 00000001 269b8e02 20000029 // 00000001 269b8802 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836323] 088: 00000001 2498b202 20000029 // 00000001 2498a002 20000029 // 00000001 2498a202 20000029 // 00000001 2498aa02 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836329] 08c: 00000001 24932202 20000029 // 00000001 24933202 20000029 // 00000001 24933802 20000029 // 00000001 24933602 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836334] 090: 00000001 24933c02 20000029 // 00000001 24932c02 20000029 // 00000001 24932402 20000029 // 00000001 24933e02 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836339] 094: 00000001 26858802 20000029 // 00000001 26859202 20000029 // 00000001 26858202 20000029 // 00000001 26859402 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836344] 098: 00000001 26859802 20000029 // 00000001 26858c02 20000029 // 00000001 26859002 20000029 // 00000001 26859e02 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836349] 09c: 00000001 26a2f402 20000029 // 00000001 26a2e002 20000029 // 00000001 26a2fe02 20000029 // 00000001 26a2e602 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836354] 0a0: 00000001 26a2ea02 20000029 // 00000001 26afe402 20000029 // 00000001 26affe02 20000029 // 00000001 26aff402 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836359] 0a4: 00000001 26afe002 20000029 // 00000001 26afe202 20000029 // 00000001 26afea02 20000029 // 00000001 2a0c1c02 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836364] 0a8: 00000001 29826802 20000029 // 00000001 29bcbe02 20000029 // 00000001 2a6c4a02 20000029 // 00000000 b6c7f002 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836369] 0ac: 00000001 2a2b2202 20000029 // 00000001 269b9e02 20000029 // 00000001 2498a402 20000029 // 00000001 24932a02 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836374] 0b0: 00000001 26858402 20000029 // 00000001 26859c02 20000029 // 00000001 26a2ec02 20000029 // 00000001 26affa02 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836379] 0b4: 00000001 29826402 20000029 // 00000001 29bca802 20000029 // 00000001 29f46002 20000029 // 00000001 269b9802 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836384] 0b8: 00000001 26859602 20000029 // 00000001 26a2e202 20000029 // 00000001 29f46202 20000029 // 00000001 29bcb402 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836389] 0bc: 00000001 2498ba02 20000029 // 00000000 b6c7e802 20000029 // 00000000 b7304002 20000029 // 00000000 b7304602 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836394] 0c0: 00000000 b7304802 20000029 // 00000000 b7304a02 20000029 // 00000000 b7304c02 20000029 // 00000000 b7304e02 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836398] 0c4: 00000000 b7305002 20000029 // 00000000 b7305202 20000029 // 00000000 b7305402 20000029 // 00000000 b7305602 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836403] 0c8: 00000000 b7305802 20000029 // 00000000 b7305a02 20000029 // 00000000 b7305c02 20000029 // 00000000 b7305e02 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836408] 0cc: 00000001 24932602 20000029 // 00000000 b7304402 20000029 // 00000000 cdb26002 20000029 // 00000000 cdb26402 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836413] 0d0: 00000000 cdb26602 20000029 // 00000000 cdb26a02 20000029 // 00000000 cdb26c02 20000029 // 00000000 cdb26e02 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836418] 0d4: 00000000 cdb27002 20000029 // 00000000 cdb27202 20000029 // 00000000 cdb27402 20000029 // 00000000 cdb27602 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836423] 0d8: 00000000 cdb27802 20000029 // 00000000 cdb27a02 20000029 // 00000000 cdb27c02 20000029 // 00000000 cdb27e02 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836428] 0dc: 00000001 26afec02 20000029 // 00000000 cdb26802 20000029 // 00000000 b70c0002 20000029 // 00000000 b70c0402 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836433] 0e0: 00000000 b70c0802 20000029 // 00000000 b70c0a02 20000029 // 00000000 b70c0c02 20000029 // 00000000 b70c0e02 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836438] 0e4: 00000000 b70c1002 20000029 // 00000000 b70c1202 20000029 // 00000000 b70c1402 20000029 // 00000000 b70c1602 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836443] 0e8: 00000000 b70c1802 20000029 // 00000000 b70c1c02 20000029 // 00000000 b70c1e02 20000029 // 00000000 cdb26202 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836448] 0ec: 00000000 b7304202 20000029 // 00000000 b72a4002 20000029 // 00000000 b72a4402 20000029 // 00000000 b72a4802 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836453] 0f0: 00000000 b72a4a02 20000029 // 00000000 b72a4c02 20000029 // 00000000 b72a4e02 20000029 // 00000000 b72a5002 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836458] 0f4: 00000000 b72a5202 20000029 // 00000000 b72a5402 20000029 // 00000000 b72a5802 20000029 // 00000000 b72a5a02 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836463] 0f8: 00000000 b72a5c02 20000029 // 00000000 b72a5e02 20000029 // 00000000 b70c0202 20000029 // 00000000 b72a5602 20000029
Jan 14 07:15:47 gizeh kernel: [33198.836468] 0fc: 00000000 b72a4602 20000029 // 00000000 b70c1a02 20000029 // 00000000 b732c002 20000029 // 00000000 b732c402 20000029
^ permalink raw reply
* Re: [PATCH] can: test size of struct sockaddr
From: Oliver Hartkopp @ 2011-01-15 17:08 UTC (permalink / raw)
To: Kurt Van Dijck
Cc: socketcan-core-0fE9KPoRgkgATYTw5x5z8w,
netdev-u79uwXL29TY76Z2rM5mHXA
In-Reply-To: <20110114172321.GB331-MxZ6Iy/zr/UdbCeoMzGj59i2O/JbrIOy@public.gmane.org>
On 14.01.2011 18:23, Kurt Van Dijck wrote:
> I think this patch makes the CAN socket code comform to the
> manpages of sendmsg & recvmsg.
Hello Kurt,
if you check similar code sniplets in the kernel you would see, that in
recvmsg()-cases the given namelen is not used from userspace.
If msg->msg_name is not NULL the msg_namelen is just set by the kernel. E.g.
see af_packet.c, af_econet.c, etc.
So the code in candump.c setting the msg_namelen before recvmsg() is obviously
obsolete ...
Btw. your two patches below for bcm_sendmsg() and raw_sendmesg() look good.
If you would like to resubmit these two patches, you may add my Acked-by
Thanks,
Oliver
> diff --git a/net/can/bcm.c b/net/can/bcm.c
> index 6faa825..dc0d5d6 100644
> --- a/net/can/bcm.c
> +++ b/net/can/bcm.c
> @@ -1256,6 +1256,9 @@ static int bcm_sendmsg(struct kiocb *iocb, struct socket *sock,
> struct sockaddr_can *addr =
> (struct sockaddr_can *)msg->msg_name;
>
> + if (msg->msg_namelen < sizeof(*addr))
> + return -EINVAL;
> +
> if (addr->can_family != AF_CAN)
> return -EINVAL;
>
> diff --git a/net/can/raw.c b/net/can/raw.c
> index e88f610..e68a6d3 100644
> --- a/net/can/raw.c
> +++ b/net/can/raw.c
> @@ -649,6 +649,9 @@ static int raw_sendmsg(struct kiocb *iocb, struct socket *sock,
> struct sockaddr_can *addr =
> (struct sockaddr_can *)msg->msg_name;
>
> + if (msg->msg_namelen < sizeof(*addr))
> + return -EINVAL;
> +
> if (addr->can_family != AF_CAN)
> return -EINVAL;
>
^ permalink raw reply
* Re: [PATCH v3 0/2] net: add device groups
From: Vlad Dogaru @ 2011-01-15 16:45 UTC (permalink / raw)
To: Stephen Hemminger; +Cc: netdev, jamal, Octavian Purdila
In-Reply-To: <20110114080810.2f128064@nehalam>
On Fri, Jan 14, 2011 at 08:08:10AM -0800, Stephen Hemminger wrote:
> On Fri, 14 Jan 2011 11:38:29 +0200
> Vlad Dogaru <ddvlad@rosedu.org> wrote:
>
> > This patchset implements network device grouping and simple manipulation
> > of groups. Netlink has been updated to provide group information and
> > means of applying changes to members of a specific group via a single
> > message.
> >
> > The patchset has a corresponding one for iproute2, which implements the
> > new functionality in userspace.
>
> What about a read/write sysfs interface as well?
> /sys/class/net/eth0/devgroup
Oops, I overlooked that, probably because I've been testing in a virtual
machine where the kernel has sysfs turned off -- less waiting for simple
tests.
> Not sure if numeric devgroup is best choice. Since this is more of
> a human interface parameter maybe it should be a string? Or have
> a translation in the utilities /etc/iproute2/devgroup?
I didn't know about /etc/iproute2. I could add the devgroup file as you
mention, seems like a good choice for userspace.
I'll update the patches with these, but it will probably take a few days,
I have a few exams next week :)
Thanks for the suggestions,
Vlad
^ permalink raw reply
* Re: [patch] caif: checking the wrong variable
From: Sjur Brændeland @ 2011-01-15 14:03 UTC (permalink / raw)
To: Dan Carpenter; +Cc: David S. Miller, netdev, kernel-janitors
In-Reply-To: <20110115130639.GA2721@bicker>
> In the original code we check if (servl == NULL) twice. The first time
> should print the message that cfmuxl_remove_uplayer() failed and set
> "ret" correctly, but instead it just returns success. The second check
> should be checking the value of "ret" instead of "servl".
>
> Signed-off-by: Dan Carpenter <error27@gmail.com>
Thank you for spotting and correcting this.
Looks good to me (reviewed only)
Acked-by: Sjur Braendeland <sjur.brandeland@stericsson.com>
^ permalink raw reply
* Re: [PATCH net-next] net: cleanup unused macros in net directory
From: Sjur Brændeland @ 2011-01-15 13:59 UTC (permalink / raw)
To: Shan Wei
Cc: David Miller, andy.grover, ericvh, jvrao, aneesh.kumar, joe,
Changli Gao, Eric Dumazet, jpirko, nhorman, pebolle, jkosina,
arnd, Network-Maillist, linux-decnet-user, rds-devel
In-Reply-To: <4D300728.8030402@cn.fujitsu.com>
> Clean up some unused macros in net/*.
> 1. be left for code change. e.g. PGV_FROM_VMALLOC, PGV_FROM_VMALLOC, KMEM_SAFETYZONE.
> 2. never be used since introduced to kernel.
> e.g. P9_RDMA_MAX_SGE, UTIL_CTRL_PKT_SIZE.
>
>
> Signed-off-by: Shan Wei <shanwei@cn.fujitsu.com>
CAIF parts looks ok to me (reviewed only).
Acked-by: Sjur Braendeland <sjur.brandeland@stericsson.com>
^ permalink raw reply
* [patch] caif: checking the wrong variable
From: Dan Carpenter @ 2011-01-15 13:06 UTC (permalink / raw)
To: Sjur Braendeland; +Cc: David S. Miller, netdev, kernel-janitors
In the original code we check if (servl == NULL) twice. The first time
should print the message that cfmuxl_remove_uplayer() failed and set
"ret" correctly, but instead it just returns success. The second check
should be checking the value of "ret" instead of "servl".
Signed-off-by: Dan Carpenter <error27@gmail.com>
diff --git a/net/caif/cfcnfg.c b/net/caif/cfcnfg.c
index 21ede14..c665de7 100644
--- a/net/caif/cfcnfg.c
+++ b/net/caif/cfcnfg.c
@@ -191,6 +191,7 @@ int cfcnfg_disconn_adapt_layer(struct cfcnfg *cnfg, struct cflayer *adap_layer)
struct cflayer *servl = NULL;
struct cfcnfg_phyinfo *phyinfo = NULL;
u8 phyid = 0;
+
caif_assert(adap_layer != NULL);
channel_id = adap_layer->id;
if (adap_layer->dn == NULL || channel_id == 0) {
@@ -199,16 +200,16 @@ int cfcnfg_disconn_adapt_layer(struct cfcnfg *cnfg, struct cflayer *adap_layer)
goto end;
}
servl = cfmuxl_remove_uplayer(cnfg->mux, channel_id);
- if (servl == NULL)
- goto end;
- layer_set_up(servl, NULL);
- ret = cfctrl_linkdown_req(cnfg->ctrl, channel_id, adap_layer);
if (servl == NULL) {
pr_err("PROTOCOL ERROR - Error removing service_layer Channel_Id(%d)",
channel_id);
ret = -EINVAL;
goto end;
}
+ layer_set_up(servl, NULL);
+ ret = cfctrl_linkdown_req(cnfg->ctrl, channel_id, adap_layer);
+ if (ret)
+ goto end;
caif_assert(channel_id == servl->id);
if (adap_layer->dn != NULL) {
phyid = cfsrvl_getphyid(adap_layer->dn);
^ permalink raw reply related
* Re: [PATCH] bonding: added 802.3ad round-robin hashing policy for single TCP session balancing
From: Oleg V. Ukhno @ 2011-01-15 12:11 UTC (permalink / raw)
To: Jay Vosburgh; +Cc: netdev, David S. Miller, John Fastabend
In-Reply-To: <26330.1295049912@death>
Jay Vosburgh wrote:
> Oleg V. Ukhno <olegu@yandex-team.ru> wrote:
>> Jay Vosburgh wrote:
>>
>>> Also, what does a round robin in 802.3ad provide that the
>>> existing round robin does not? My presumption is that you're looking to
>>> get the aggregator autoconfiguration that 802.3ad provides, but you
>>> don't say.
>
> I'm still curious about this question. Given the rather
> intricate setup of your particular network (described below), I'm not
> sure why 802.3ad is of benefit over traditional etherchannel
> (balance-rr / balance-xor).
Yes, I wanted 802.3ad autoconfiguration. Besides, all switches I use
support LACP so I've chosen 802.3ad link aggregation.
Of course, it would be cool it both 802.3ad and balance-rr modes
supported such load striping feature.
>
>> Yes, I am resetting MAC addresses when transmitting packets to have switch
>> to put packets into different ports of the receiving etherchannel.
>
> By "etherchannel" do you really mean "Cisco switch with a
> port-channel group using LACP"?
Yes, exactly
>
>> I am using this patch to provide full-mesh ISCSI connectivity between at
>> least 4 hosts (all hosts of course are in same ethernet segment) and every
>> host is connected with aggregate link with 4 slaves(usually).
>> Using round-robin I provide near-equal load striping when transmitting,
>> using MAC address magic I force switch to stripe packets over all slave
>> links in destination port-channel(when number of rx-ing slaves is equal to
>> number ot tx-ing slaves and is even).
>
> By "MAC address magic" do you mean that you're assigning
> specifically chosen MAC addresses to the slaves so that the switch's
> hash is essentially "assigning" the bonding slaves to particular ports
> on the outgoing port-channel group?
Yes, so I am able to make equal load striping even for single TCP
session between just two hosts not only for transmiting host, but also
for receiving host(iperf, when doing TCP test, is able to utilize all
available bandwith in given etherchannel).
>
> Assuming that this is the case, it's an interesting idea, but
> I'm unconvinced that it's better on 802.3ad vs. balance-rr. Unless I'm
> missing something, you can get everything you need from an option to
> have balance-rr / balance-xor utilize the slave's permanent address as
> the source address for outgoing traffic.
Yes, balance-rr would satisfy my requrements if patched for doing "MAC
address magic"(replacing MAC address of packets being transmitted by
slave's permanent address), except for 802.3ad link autoconfiguration.
"Pure" balance-rr won't allow to utilize whole etherchannel bandwidth
when transmitting data just between 2 hosts( for example, when I have
one iSCSI initiator and one iSCSI target). balance-xor is not what I
wanted because data transmitted on source host will stick to any, but
single slave.
>
>
>>> This is the code that resets the MAC header as described above.
>>> It doesn't quite match the documentation, since it only resets the MAC
>>> for ETH_P_IP packets.
>> Yes, I really meant that my patch applies to ETH_P_IP packets and I've
>> missed that from documentation I wrote.
>
> Is limiting this to just ETH_P_IP really a means to exclude ARP,
> or is there some advantage to (effectively) only balancing IP traffic,
> and leaving other traffic (IPv6, for one) essentially unbalanced (when
> exiting the switch through the destination port-channel group, which
> you've set to use a src-mac hash)?
>
Well, when making initial version of this patch(it was for 2.6.18
kernel), I meant just excluding ARP .
> -J
>
> ---
> -Jay Vosburgh, IBM Linux Technology Center, fubar@us.ibm.com
>
--
Best regards,
Oleg Ukhno
^ permalink raw reply
* [PATCH resend] netfilter: make rcu read section smaller
From: Changli Gao @ 2011-01-15 11:28 UTC (permalink / raw)
To: Patrick McHardy; +Cc: David S. Miller, netfilter-devel, netdev, Changli Gao
In-Reply-To: <1295090930-16671-1-git-send-email-xiaosuo@gmail.com>
Signed-off-by: Changli Gao <xiaosuo@gmail.com>
---
net/ipv4/netfilter/nf_nat_core.c | 38 +++++++++++++++++++-------------------
1 file changed, 19 insertions(+), 19 deletions(-)
diff --git a/net/ipv4/netfilter/nf_nat_core.c b/net/ipv4/netfilter/nf_nat_core.c
index c04787c..7300611 100644
--- a/net/ipv4/netfilter/nf_nat_core.c
+++ b/net/ipv4/netfilter/nf_nat_core.c
@@ -85,7 +85,7 @@ in_range(const struct nf_conntrack_tuple *tuple,
const struct nf_nat_range *range)
{
const struct nf_nat_protocol *proto;
- int ret = 0;
+ int ret = 1;
/* If we are supposed to map IPs, then we must be in the
range specified, otherwise let this drag us onto a new src IP. */
@@ -95,13 +95,14 @@ in_range(const struct nf_conntrack_tuple *tuple,
return 0;
}
- rcu_read_lock();
- proto = __nf_nat_proto_find(tuple->dst.protonum);
- if (!(range->flags & IP_NAT_RANGE_PROTO_SPECIFIED) ||
- proto->in_range(tuple, IP_NAT_MANIP_SRC,
- &range->min, &range->max))
- ret = 1;
- rcu_read_unlock();
+ if (range->flags & IP_NAT_RANGE_PROTO_SPECIFIED) {
+ rcu_read_lock();
+ proto = __nf_nat_proto_find(tuple->dst.protonum);
+ if (!proto->in_range(tuple, IP_NAT_MANIP_SRC, &range->min,
+ &range->max))
+ ret = 0;
+ rcu_read_unlock();
+ }
return ret;
}
@@ -235,22 +236,21 @@ get_unique_tuple(struct nf_conntrack_tuple *tuple,
/* 3) The per-protocol part of the manip is made to map into
the range to make a unique tuple. */
+ if (!(range->flags & (IP_NAT_RANGE_PROTO_RANDOM |
+ IP_NAT_RANGE_PROTO_SPECIFIED)) &&
+ !nf_nat_used_tuple(tuple, ct))
+ return;
rcu_read_lock();
proto = __nf_nat_proto_find(orig_tuple->dst.protonum);
/* Only bother mapping if it's not already in range and unique */
- if (!(range->flags & IP_NAT_RANGE_PROTO_RANDOM)) {
- if (range->flags & IP_NAT_RANGE_PROTO_SPECIFIED) {
- if (proto->in_range(tuple, maniptype, &range->min,
- &range->max) &&
- (range->min.all == range->max.all ||
- !nf_nat_used_tuple(tuple, ct)))
- goto out;
- } else if (!nf_nat_used_tuple(tuple, ct)) {
- goto out;
- }
- }
+ if ((range->flags & (IP_NAT_RANGE_PROTO_RANDOM |
+ IP_NAT_RANGE_PROTO_SPECIFIED)) ==
+ IP_NAT_RANGE_PROTO_SPECIFIED &&
+ proto->in_range(tuple, maniptype, &range->min, &range->max) &&
+ (range->min.all == range->max.all || !nf_nat_used_tuple(tuple, ct)))
+ goto out;
/* Last change: get protocol to try to obtain unique tuple. */
proto->unique_tuple(tuple, range, maniptype, ct);
^ permalink raw reply related
* [PATCH resend] netfilter: place in source hash after SNAT is done
From: Changli Gao @ 2011-01-15 11:28 UTC (permalink / raw)
To: Patrick McHardy; +Cc: David S. Miller, netfilter-devel, netdev, Changli Gao
If SNAT isn't done, the wrong info maybe got by the other cts.
As the filter table is after DNAT table, the packets dropped in filter
table also bother bysource hash table.
Signed-off-by: Changli Gao <xiaosuo@gmail.com>
---
net/ipv4/netfilter/nf_nat_core.c | 18 +++++++++++-------
1 file changed, 11 insertions(+), 7 deletions(-)
diff --git a/net/ipv4/netfilter/nf_nat_core.c b/net/ipv4/netfilter/nf_nat_core.c
index c04787c..51ce55a 100644
--- a/net/ipv4/netfilter/nf_nat_core.c
+++ b/net/ipv4/netfilter/nf_nat_core.c
@@ -221,7 +221,14 @@ get_unique_tuple(struct nf_conntrack_tuple *tuple,
manips not an issue. */
if (maniptype == IP_NAT_MANIP_SRC &&
!(range->flags & IP_NAT_RANGE_PROTO_RANDOM)) {
- if (find_appropriate_src(net, zone, orig_tuple, tuple, range)) {
+ /* try the original tuple first */
+ if (in_range(orig_tuple, range)) {
+ if (!nf_nat_used_tuple(orig_tuple, ct)) {
+ *tuple = *orig_tuple;
+ return;
+ }
+ } else if (find_appropriate_src(net, zone, orig_tuple, tuple,
+ range)) {
pr_debug("get_unique_tuple: Found current src map\n");
if (!nf_nat_used_tuple(tuple, ct))
return;
@@ -266,7 +273,6 @@ nf_nat_setup_info(struct nf_conn *ct,
struct net *net = nf_ct_net(ct);
struct nf_conntrack_tuple curr_tuple, new_tuple;
struct nf_conn_nat *nat;
- int have_to_hash = !(ct->status & IPS_NAT_DONE_MASK);
/* nat helper or nfctnetlink also setup binding */
nat = nfct_nat(ct);
@@ -306,8 +312,7 @@ nf_nat_setup_info(struct nf_conn *ct,
ct->status |= IPS_DST_NAT;
}
- /* Place in source hash if this is the first time. */
- if (have_to_hash) {
+ if (maniptype == IP_NAT_MANIP_SRC) {
unsigned int srchash;
srchash = hash_by_src(net, nf_ct_zone(ct),
@@ -532,7 +537,7 @@ static void nf_nat_cleanup_conntrack(struct nf_conn *ct)
if (nat == NULL || nat->ct == NULL)
return;
- NF_CT_ASSERT(nat->ct->status & IPS_NAT_DONE_MASK);
+ NF_CT_ASSERT(nat->ct->status & IPS_SRC_NAT_DONE);
spin_lock_bh(&nf_nat_lock);
hlist_del_rcu(&nat->bysource);
@@ -545,11 +550,10 @@ static void nf_nat_move_storage(void *new, void *old)
struct nf_conn_nat *old_nat = old;
struct nf_conn *ct = old_nat->ct;
- if (!ct || !(ct->status & IPS_NAT_DONE_MASK))
+ if (!ct || !(ct->status & IPS_SRC_NAT_DONE))
return;
spin_lock_bh(&nf_nat_lock);
- new_nat->ct = ct;
hlist_replace_rcu(&old_nat->bysource, &new_nat->bysource);
spin_unlock_bh(&nf_nat_lock);
}
^ permalink raw reply related
* [PATCH v2 resend] netfilter: remove an atomic bit operation
From: Changli Gao @ 2011-01-15 11:23 UTC (permalink / raw)
To: Patrick McHardy
Cc: David S. Miller, netfilter-devel, netdev, Changli Gao,
Tim Gardner, Eric Dumazet
As this ct won't be seen by the others, we don't need to set the
IPS_CONFIRMED_BIT in atomic way.
Signed-off-by: Changli Gao <xiaosuo@gmail.com>
Cc: Tim Gardner <tim.gardner@canonical.com>
Cc: Eric Dumazet <eric.dumazet@gmail.com>
---
v2: IPS_CONFIRMED_BIT is changed to IPS_CONFIRMED.
net/netfilter/nf_conntrack_core.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c
index 27a5ea6..c708248 100644
--- a/net/netfilter/nf_conntrack_core.c
+++ b/net/netfilter/nf_conntrack_core.c
@@ -486,7 +486,7 @@ __nf_conntrack_confirm(struct sk_buff *skb)
ct->timeout.expires += jiffies;
add_timer(&ct->timeout);
atomic_inc(&ct->ct_general.use);
- set_bit(IPS_CONFIRMED_BIT, &ct->status);
+ ct->status |= IPS_CONFIRMED;
/* Since the lookup is lockless, hash insertion must be done after
* starting the timer and setting the CONFIRMED bit. The RCU barriers
^ permalink raw reply related
* [PATCH resend] netfilter: change IPS_*_BIT to IPS_*
From: Changli Gao @ 2011-01-15 11:20 UTC (permalink / raw)
To: Patrick McHardy
Cc: David S. Miller, netfilter-devel, netdev, Changli Gao,
Tim Gardner, Eric Dumazet
My previous patch made a mistake when converting atomic_set to a normal
bit 'or'. IPS_*_BIT should be replaced with IPS_*.
commit 76a2d3bcfcc86e2a8044258515b86492a37631a3
Author: Changli Gao <xiaosuo@gmail.com>
Date: Mon Nov 15 11:59:03 2010 +0100
netfilter: nf_nat: don't use atomic bit operation
As we own the conntrack and the others can't see it until we confirm it,
we don't need to use atomic bit operation on ct->status.
Signed-off-by: Changli Gao <xiaosuo@gmail.com>
Cc: Tim Gardner <tim.gardner@canonical.com>
Cc: Eric Dumazet <eric.dumazet@gmail.com>
---
include/net/netfilter/nf_nat_core.h | 4 ++--
net/ipv4/netfilter/nf_nat_core.c | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/include/net/netfilter/nf_nat_core.h b/include/net/netfilter/nf_nat_core.h
index 5aec85c..3dc7b98 100644
--- a/include/net/netfilter/nf_nat_core.h
+++ b/include/net/netfilter/nf_nat_core.h
@@ -21,9 +21,9 @@ static inline int nf_nat_initialized(struct nf_conn *ct,
enum nf_nat_manip_type manip)
{
if (manip == IP_NAT_MANIP_SRC)
- return ct->status & IPS_SRC_NAT_DONE_BIT;
+ return ct->status & IPS_SRC_NAT_DONE;
else
- return ct->status & IPS_DST_NAT_DONE_BIT;
+ return ct->status & IPS_DST_NAT_DONE;
}
struct nlattr;
diff --git a/net/ipv4/netfilter/nf_nat_core.c b/net/ipv4/netfilter/nf_nat_core.c
index eb55835..21e6e92 100644
--- a/net/ipv4/netfilter/nf_nat_core.c
+++ b/net/ipv4/netfilter/nf_nat_core.c
@@ -323,9 +323,9 @@ nf_nat_setup_info(struct nf_conn *ct,
/* It's done. */
if (maniptype == IP_NAT_MANIP_DST)
- ct->status |= IPS_DST_NAT_DONE_BIT;
+ ct->status |= IPS_DST_NAT_DONE;
else
- ct->status |= IPS_SRC_NAT_DONE_BIT;
+ ct->status |= IPS_SRC_NAT_DONE;
return NF_ACCEPT;
}
^ permalink raw reply related
* Re: [PATCH] RFC: ipv4: share sysctl net/ipv4/conf/DEVNAME/ tables
From: Lucian Adrian Grijincu @ 2011-01-15 11:09 UTC (permalink / raw)
To: Alexey Dobriyan
Cc: netdev, David S. Miller, Alexey Kuznetsov, Pekka Savola (ipv6),
James Morris, Hideaki YOSHIFUJI, Patrick McHardy, Nick Piggin,
Al Viro, Christoph Hellwig, Dave Chinner, Neil Horman,
Eric Dumazet, Octavian Purdila, Vlad Dogaru
In-Reply-To: <20110115104139.GA4816@p183.telecom.by>
On Sat, Jan 15, 2011 at 12:41 PM, Alexey Dobriyan <adobriyan@gmail.com> wrote:
> On Sat, Jan 15, 2011 at 04:46:11AM +0200, Lucian Adrian Grijincu wrote:
>> To gain access to the name of the directory above a file, sysctl
>> handlers are passed an extra argument: the 'struct file*'
>> corresponding to the file. From the file we walk up one level to find
>> the name of the device. None of the other handlers were changed to
>> receive this extra parameter, but due to C's calling convention they
>> shouldn't care.
>
> We don't do creepy stuff like that.
I did this this way to not waste time changing all the handlers in the
tree and then get this patch struck down as uninterested, ugly-hack or
being suggested another more sensible, yet completely different
approach.
> I wonder where interactions with device renaming are handled.
I took two things taken into consideration:
* the .procname of the device directory has it's own copy of the device name
This was inherited from the previous version
* when looking for a "struct net_device*" we might not find any:
+ /* the device could have been renamed (SIOCSIFADDR) or
+ * deleted since we started accessing it's proc sysctl */
+ dev = dev_get_by_name(net, dev_name);
+ if (dev == NULL)
+ return -ENOENT;
I'm not sure (will look into it later) whether
filp->f_path.dentry->d_parent->d_name.name;
is still valid if a rename is running concurrently.
On device rename we run this
net/ipv4/devinet.c:
static int inetdev_event(struct notifier_block *this, unsigned long event,
void *ptr)
....
case NETDEV_CHANGENAME:
/* Do not notify about label change, this event is
* not interesting to applications using netlink.
*/
inetdev_changename(dev, in_dev);
devinet_sysctl_unregister(in_dev);
devinet_sysctl_register(in_dev);
I'm not sure whether this code can run in parallel with the
proc_handlers and if it can if it will invalidate
filp->f_path.dentry->d_parent->d_name.name;
but I'll look into it.
Is there anything else that I should check regarding net device renaming?
--
.
..: Lucian
^ permalink raw reply
* Re: [PATCH] RFC: ipv4: share sysctl net/ipv4/conf/DEVNAME/ tables
From: Alexey Dobriyan @ 2011-01-15 10:41 UTC (permalink / raw)
To: Lucian Adrian Grijincu
Cc: netdev, David S. Miller, Alexey Kuznetsov, Pekka Savola (ipv6),
James Morris, Hideaki YOSHIFUJI, Patrick McHardy, Nick Piggin,
Al Viro, Christoph Hellwig, Dave Chinner, Neil Horman,
Eric Dumazet, Octavian Purdila, Vlad Dogaru
In-Reply-To: <AANLkTikVDn_0c+Ob_XnUauEMBZhsYCh+42QF7FwM=Bey@mail.gmail.com>
On Sat, Jan 15, 2011 at 04:46:11AM +0200, Lucian Adrian Grijincu wrote:
> To gain access to the name of the directory above a file, sysctl
> handlers are passed an extra argument: the 'struct file*'
> corresponding to the file. From the file we walk up one level to find
> the name of the device. None of the other handlers were changed to
> receive this extra parameter, but due to C's calling convention they
> shouldn't care.
We don't do creepy stuff like that.
I wonder where interactions with device renaming are handled.
> +static int devinet_conf_handler(ctl_table *ctl, int write,
> + void __user *buffer,
> + size_t *lenp, loff_t *ppos,
> + struct file *filp,
> + proc_handler *proc_handler)
> +{
> + /* The path to this file is of the form /proc/sys/net/ipv4/conf/$DEVNAME/$CTL
> + *
> + * To save space, ctl_table is shared between all network
> + * devices in the same network namespace, but we need to
> + * change the data corresponding to the $DEVNAME network
> + * device, not any other's.
> + *
> + * Use $DEVNAME to obtain the coresponding ipv4_devconf.
> + */
> + struct net *net = ctl->extra2;
> + const char *dev_name = filp->f_path.dentry->d_parent->d_name.name;
^ permalink raw reply
* Re: [PATCH] CHOKe flow scheduler (0.9)
From: Eric Dumazet @ 2011-01-15 7:45 UTC (permalink / raw)
To: Stephen Hemminger; +Cc: Patrick McHardy, David Miller, netdev
In-Reply-To: <20110114154521.54cc8ef5@nehalam>
Le vendredi 14 janvier 2011 à 15:45 -0800, Stephen Hemminger a écrit :
> CHOKe ("CHOose and Kill" or "CHOose and Keep") is an alternative
> packet scheduler based on the Random Exponential Drop (RED) algorithm.
>
> The core idea is:
> For every packet arrival:
> Calculate Qave
> if (Qave < minth)
> Queue the new packet
> else
> Select randomly a packet from the queue
> if (both packets from same flow)
> then Drop both the packets
> else if (Qave > maxth)
> Drop packet
> else
> Admit packet with proability p (same as RED)
>
> See also:
> Rong Pan, Balaji Prabhakar, Konstantinos Psounis, "CHOKe: a stateless active
> queue management scheme for approximating fair bandwidth allocation",
> Proceeding of INFOCOM'2000, March 2000.
>
> Help from:
> Eric Dumazet <eric.dumazet@gmail.com>
> Patrick McHardy <kaber@trash.net>
>
> Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
>
> ---
> This version is based on net-next, and assumes Eric's patch for
> corrected bstats is already applied.
>
> 0.9 incorporate patches from Patrick/Eric
> rework the peek_random and drop code to simplify and fix bug where
> random_N needs to called with full length (including holes).
Nice catch, I now have more "matched" counts after my test :
qdisc choke 11: parent 1:11 limit 130000b min 10833b max 32500b ewma 13 Plog 21 Scell_log 30
Sent 93944198 bytes 170889 pkt (dropped 829140, overlimits 436686 requeues 0)
rate 48bit 0pps backlog 0b 0p requeues 0
marked 0 early 436686 pdrop 0 other 0 matched 196227
You missed the qdisc_bstats_update() move from enqueue() to dequeue()
And some minor CodingStyle / checkpatch.pl changes, here is my
latest diff on top of 0.9
I believe you can release v1 :)
Thanks !
net/sched/sch_choke.c | 35 ++++++++++++++++++-----------------
1 files changed, 18 insertions(+), 17 deletions(-)
diff --git a/net/sched/sch_choke.c b/net/sched/sch_choke.c
index 55eeb7d..a7605a0 100644
--- a/net/sched/sch_choke.c
+++ b/net/sched/sch_choke.c
@@ -20,7 +20,7 @@
#include <net/red.h>
/* CHOKe stateless AQM for fair bandwidth allocation
- =================================================
+ =================================================
CHOKe (CHOose and Keep for responsive flows, CHOose and Kill for
unresponsive flows) is a variant of RED that penalizes misbehaving flows but
@@ -137,10 +137,10 @@ static void choke_drop_by_idx(struct Qdisc *sch, unsigned int idx)
}
/* Classify flow using either:
- 1. pre-existing classification result in skb
- 2. fast internal classification
- 3. use TC filter based classification
-*/
+ * 1. pre-existing classification result in skb
+ * 2. fast internal classification (rxhash)
+ * 3. use TC filter based classification
+ */
static unsigned int choke_classify(struct sk_buff *skb,
struct Qdisc *sch, int *qerr)
@@ -176,10 +176,9 @@ static unsigned int choke_classify(struct sk_buff *skb,
}
/* Select a packet at random from the queue and return flow classification
- returns 0 if queue empty
+ * returns 0 if queue empty
*/
-static unsigned int choke_peek_random(struct Qdisc *sch,
- unsigned int *pidx)
+static unsigned int choke_peek_random(struct Qdisc *sch, unsigned int *pidx)
{
struct choke_sched_data *q = qdisc_priv(sch);
const struct sk_buff *skb;
@@ -229,9 +228,9 @@ static int choke_enqueue(struct sk_buff *skb, struct Qdisc *sch)
red_end_of_idle_period(p);
/* Is queue small? */
- if (p->qavg <= p->qth_min)
+ if (p->qavg <= p->qth_min) {
p->qcount = -1;
- else {
+ } else {
unsigned int idx;
/* Draw a packet at random from queue and compare flow */
@@ -266,8 +265,9 @@ static int choke_enqueue(struct sk_buff *skb, struct Qdisc *sch)
q->stats.prob_mark++;
}
- } else
+ } else {
p->qR = red_random(p);
+ }
}
/* Admit new packet */
@@ -276,7 +276,6 @@ static int choke_enqueue(struct sk_buff *skb, struct Qdisc *sch)
q->tail = (q->tail + 1) & q->tab_mask;
++sch->q.qlen;
sch->qstats.backlog += qdisc_pkt_len(skb);
- qdisc_bstats_update(sch, skb);
return NET_XMIT_SUCCESS;
}
@@ -306,6 +305,7 @@ static struct sk_buff *choke_dequeue(struct Qdisc *sch)
choke_zap_head_holes(q);
--sch->q.qlen;
sch->qstats.backlog -= qdisc_pkt_len(skb);
+ qdisc_bstats_update(sch, skb);
return skb;
}
@@ -316,9 +316,9 @@ static unsigned int choke_drop(struct Qdisc *sch)
unsigned int len;
len = qdisc_queue_drop(sch);
- if (len > 0)
+ if (len > 0) {
q->stats.other++;
- else {
+ } else {
if (!red_is_idling(&q->parms))
red_start_of_idle_period(&q->parms);
}
@@ -326,7 +326,7 @@ static unsigned int choke_drop(struct Qdisc *sch)
return len;
}
-static void choke_reset(struct Qdisc* sch)
+static void choke_reset(struct Qdisc *sch)
{
struct choke_sched_data *q = qdisc_priv(sch);
@@ -410,8 +410,9 @@ static int choke_change(struct Qdisc *sch, struct nlattr *opt)
q->tab_mask = mask;
q->tab = ntab;
- } else
+ } else {
sch_tree_lock(sch);
+ }
q->flags = ctl->flags;
q->limit = ctl->limit;
@@ -428,7 +429,7 @@ static int choke_change(struct Qdisc *sch, struct nlattr *opt)
return 0;
}
-static int choke_init(struct Qdisc* sch, struct nlattr *opt)
+static int choke_init(struct Qdisc *sch, struct nlattr *opt)
{
return choke_change(sch, opt);
}
^ permalink raw reply related
* [PATCH] RFC: ipv4: share sysctl net/ipv4/conf/DEVNAME/ tables
From: Lucian Adrian Grijincu @ 2011-01-15 2:46 UTC (permalink / raw)
To: netdev
Cc: David S. Miller, Alexey Kuznetsov, Pekka Savola (ipv6),
James Morris, Hideaki YOSHIFUJI, Patrick McHardy, Nick Piggin,
Al Viro, Christoph Hellwig, Lucian Adrian Grijincu, Dave Chinner,
Neil Horman, Eric Dumazet, Alexey Dobriyan, Octavian Purdila,
Vlad Dogaru
[-- Attachment #1: Type: text/plain, Size: 1802 bytes --]
For each network device DEVNAME that supports ipv4 a new table was
registered in net/ipv4/conf/DEVNAME/. The sysctl table was identical
for all network devices, except for the ->data, ->extra1 and ->extra2
members.
However, given the 'struct net_device*' corresponding to the device
DEVNAME we can compute data and extra1.
extra2 cannot be computed, it is the 'struct net*' of the device and
it is used to find the correct 'struct net_device*' with this name
(e.g. we will have 'lo' in every network namespace).
We cannot use the current process' network namespace. For example,
after running this code:
int fd = open("/proc/sys/net/ipv4/conf/default/tag", O_RDONLY);
unshare(CLONE_NEWNET);
'fd' points to a sysctl for a network namespace different from the
current process' network namespace.
To gain access to the name of the directory above a file, sysctl
handlers are passed an extra argument: the 'struct file*'
corresponding to the file. From the file we walk up one level to find
the name of the device. None of the other handlers were changed to
receive this extra parameter, but due to C's calling convention they
shouldn't care.
Each table has 26 entries (25 files + 1 sentinel). For each net device
this patch should save:
* 32bit: 26 * 36 = 936 bytes
* 64bit: 26 * 64 = 1664 bytes
**This patch was not thoroughly tested, I'm just looking for feedback
whether the approach is sound and could be applied. Similar changes
can be implemented for ipv6 too.**
Signed-off-by: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>
---
fs/proc/proc_sysctl.c | 11 ++-
include/linux/inetdevice.h | 14 +++-
include/net/netns/ipv4.h | 14 +++
net/ipv4/devinet.c | 236 +++++++++++++++++++++++++++++---------------
4 files changed, 194 insertions(+), 81 deletions(-)
[-- Attachment #2: 0001-RFC-ipv4-share-sysctl-net-ipv4-conf-DEVNAME-tables.patch --]
[-- Type: text/x-patch, Size: 15497 bytes --]
diff --git a/fs/proc/proc_sysctl.c b/fs/proc/proc_sysctl.c
index 09a1f92..901bfe3 100644
--- a/fs/proc/proc_sysctl.c
+++ b/fs/proc/proc_sysctl.c
@@ -129,6 +129,11 @@ out:
return err;
}
+
+typedef int proc_handler_extended(struct ctl_table *ctl, int write,
+ void __user *buffer, size_t *lenp, loff_t *ppos,
+ struct file *filp);
+
static ssize_t proc_sys_call_handler(struct file *filp, void __user *buf,
size_t count, loff_t *ppos, int write)
{
@@ -137,6 +142,7 @@ static ssize_t proc_sys_call_handler(struct file *filp, void __user *buf,
struct ctl_table *table = PROC_I(inode)->sysctl_entry;
ssize_t error;
size_t res;
+ proc_handler_extended *phx = (proc_handler_extended *) table->proc_handler;
if (IS_ERR(head))
return PTR_ERR(head);
@@ -156,7 +162,10 @@ static ssize_t proc_sys_call_handler(struct file *filp, void __user *buf,
/* careful: calling conventions are nasty here */
res = count;
- error = table->proc_handler(table, write, buf, &res, ppos);
+ /* most handlers only use the first 5 arguments (without @filp).
+ * Changing all is too much of work, as, at the time of writting only
+ * one proc_handler knows about and uses the @filp. */
+ error = phx(table, write, buf, &res, ppos, filp);
if (!error)
error = res;
out:
diff --git a/include/linux/inetdevice.h b/include/linux/inetdevice.h
index ae8fdc5..abe2e25 100644
--- a/include/linux/inetdevice.h
+++ b/include/linux/inetdevice.h
@@ -43,8 +43,20 @@ enum
#define IPV4_DEVCONF_MAX (__IPV4_DEVCONF_MAX - 1)
+
+struct devinet_sysctl {
+ /*
+ * dev_name holds a copy of dev_name, because '.procname' is regarded as const
+ * by sysctl and we wouldn't want anyone to change it under our feet
+ * (see SIOCSIFNAME).
+ */
+ char *dev_name;
+ struct ctl_table_header *sysctl_header;
+};
+
+
struct ipv4_devconf {
- void *sysctl;
+ struct devinet_sysctl devinet_sysctl;
int data[IPV4_DEVCONF_MAX];
DECLARE_BITMAP(state, IPV4_DEVCONF_MAX);
};
diff --git a/include/net/netns/ipv4.h b/include/net/netns/ipv4.h
index d68c3f1..5210215 100644
--- a/include/net/netns/ipv4.h
+++ b/include/net/netns/ipv4.h
@@ -7,6 +7,7 @@
#include <net/inet_frag.h>
+struct ctl_table;
struct ctl_table_header;
struct ipv4_devconf;
struct fib_rules_ops;
@@ -19,6 +20,19 @@ struct netns_ipv4 {
struct ctl_table_header *frags_hdr;
struct ctl_table_header *ipv4_hdr;
struct ctl_table_header *route_hdr;
+ /* This holds the contents of /proc/sys/net/ipv4/conf/$DEV_NAME/
+ *
+ * The devinet_sysctl_table is shared by all network devices
+ * in the same network namespace, but each network namespace
+ * needs it's own copy of the table (the ->extra2 member of
+ * each ctl_table must point to the corresponding 'struct net*').
+ *
+ * The ->data member is not used as defined in this table. The
+ * proc_handler determines the apropiate data location based
+ * on the 'struct net_device*' having the same name as
+ * $DEV_NAME above.
+ */
+ struct ctl_table *devinet_sysctl_table;
#endif
struct ipv4_devconf *devconf_all;
struct ipv4_devconf *devconf_dflt;
diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c
index 748cb5b..d03dfdc 100644
--- a/net/ipv4/devinet.c
+++ b/net/ipv4/devinet.c
@@ -158,7 +158,8 @@ static struct in_device *inetdev_init(struct net_device *dev)
goto out;
memcpy(&in_dev->cnf, dev_net(dev)->ipv4.devconf_dflt,
sizeof(in_dev->cnf));
- in_dev->cnf.sysctl = NULL;
+ in_dev->cnf.devinet_sysctl.dev_name = NULL;
+ in_dev->cnf.devinet_sysctl.sysctl_header = NULL;
in_dev->dev = dev;
in_dev->arp_parms = neigh_parms_alloc(dev, &arp_tbl);
if (!in_dev->arp_parms)
@@ -1375,9 +1376,56 @@ static void inet_forward_change(struct net *net)
}
}
-static int devinet_conf_proc(ctl_table *ctl, int write,
- void __user *buffer,
- size_t *lenp, loff_t *ppos)
+
+
+static int devinet_conf_handler(ctl_table *ctl, int write,
+ void __user *buffer,
+ size_t *lenp, loff_t *ppos,
+ struct file *filp,
+ proc_handler *proc_handler)
+{
+ /* The path to this file is of the form /proc/sys/net/ipv4/conf/$DEVNAME/$CTL
+ *
+ * To save space, ctl_table is shared between all network
+ * devices in the same network namespace, but we need to
+ * change the data corresponding to the $DEVNAME network
+ * device, not any other's.
+ *
+ * Use $DEVNAME to obtain the coresponding ipv4_devconf.
+ */
+ struct net *net = ctl->extra2;
+ const char *dev_name = filp->f_path.dentry->d_parent->d_name.name;
+ struct ctl_table tmp_ctl = *ctl;
+ struct net_device *dev = NULL;
+ struct ipv4_devconf *cnf;
+ int ret;
+
+ if (strcmp(dev_name, "all") == 0) {
+ cnf = net->ipv4.devconf_all;
+ } else if (strcmp(dev_name, "default") == 0) {
+ cnf = net->ipv4.devconf_dflt;
+ } else {
+ /* the device could have been renamed (SIOCSIFADDR) or
+ * deleted since we started accessing it's proc sysctl */
+ dev = dev_get_by_name(net, dev_name);
+ if (dev == NULL)
+ return -ENOENT;
+ cnf = &in_dev_get(dev)->cnf;
+ }
+
+ tmp_ctl.data += (char *)cnf - (char *)&ipv4_devconf;
+ tmp_ctl.extra1 = cnf;
+
+ ret = proc_handler(&tmp_ctl, write, buffer, lenp, ppos);
+
+ if (dev)
+ dev_put(dev);
+ return ret;
+}
+
+static int __devinet_conf_proc(ctl_table *ctl, int write,
+ void __user *buffer,
+ size_t *lenp, loff_t *ppos)
{
int ret = proc_dointvec(ctl, write, buffer, lenp, ppos);
@@ -1395,9 +1443,9 @@ static int devinet_conf_proc(ctl_table *ctl, int write,
return ret;
}
-static int devinet_sysctl_forward(ctl_table *ctl, int write,
- void __user *buffer,
- size_t *lenp, loff_t *ppos)
+static int __devinet_sysctl_forward(ctl_table *ctl, int write,
+ void __user *buffer,
+ size_t *lenp, loff_t *ppos)
{
int *valp = ctl->data;
int val = *valp;
@@ -1430,9 +1478,10 @@ static int devinet_sysctl_forward(ctl_table *ctl, int write,
return ret;
}
-static int ipv4_doint_and_flush(ctl_table *ctl, int write,
- void __user *buffer,
- size_t *lenp, loff_t *ppos)
+
+static int __ipv4_doint_and_flush(ctl_table *ctl, int write,
+ void __user *buffer,
+ size_t *lenp, loff_t *ppos)
{
int *valp = ctl->data;
int val = *valp;
@@ -1445,6 +1494,33 @@ static int ipv4_doint_and_flush(ctl_table *ctl, int write,
return ret;
}
+static int devinet_conf_proc(ctl_table *ctl, int write,
+ void __user *buffer,
+ size_t *lenp, loff_t *ppos,
+ struct file *filp)
+{
+ return devinet_conf_handler(ctl, write, buffer, lenp, ppos, filp,
+ __devinet_conf_proc);
+}
+
+static int devinet_sysctl_forward(ctl_table *ctl, int write,
+ void __user *buffer,
+ size_t *lenp, loff_t *ppos,
+ struct file *filp)
+{
+ return devinet_conf_handler(ctl, write, buffer, lenp, ppos, filp,
+ __devinet_sysctl_forward);
+}
+
+static int ipv4_doint_and_flush(ctl_table *ctl, int write,
+ void __user *buffer,
+ size_t *lenp, loff_t *ppos,
+ struct file *filp)
+{
+ return devinet_conf_handler(ctl, write, buffer, lenp, ppos, filp,
+ __ipv4_doint_and_flush);
+}
+
#define DEVINET_SYSCTL_ENTRY(attr, name, mval, proc) \
{ \
.procname = name, \
@@ -1454,6 +1530,7 @@ static int ipv4_doint_and_flush(ctl_table *ctl, int write,
.mode = mval, \
.proc_handler = proc, \
.extra1 = &ipv4_devconf, \
+ .extra2 = &init_net, \
}
#define DEVINET_SYSCTL_RW_ENTRY(attr, name) \
@@ -1468,51 +1545,45 @@ static int ipv4_doint_and_flush(ctl_table *ctl, int write,
#define DEVINET_SYSCTL_FLUSHING_ENTRY(attr, name) \
DEVINET_SYSCTL_COMPLEX_ENTRY(attr, name, ipv4_doint_and_flush)
-static struct devinet_sysctl_table {
- struct ctl_table_header *sysctl_header;
- struct ctl_table devinet_vars[__IPV4_DEVCONF_MAX];
- char *dev_name;
-} devinet_sysctl = {
- .devinet_vars = {
- DEVINET_SYSCTL_COMPLEX_ENTRY(FORWARDING, "forwarding",
- devinet_sysctl_forward),
- DEVINET_SYSCTL_RO_ENTRY(MC_FORWARDING, "mc_forwarding"),
-
- DEVINET_SYSCTL_RW_ENTRY(ACCEPT_REDIRECTS, "accept_redirects"),
- DEVINET_SYSCTL_RW_ENTRY(SECURE_REDIRECTS, "secure_redirects"),
- DEVINET_SYSCTL_RW_ENTRY(SHARED_MEDIA, "shared_media"),
- DEVINET_SYSCTL_RW_ENTRY(RP_FILTER, "rp_filter"),
- DEVINET_SYSCTL_RW_ENTRY(SEND_REDIRECTS, "send_redirects"),
- DEVINET_SYSCTL_RW_ENTRY(ACCEPT_SOURCE_ROUTE,
- "accept_source_route"),
- DEVINET_SYSCTL_RW_ENTRY(ACCEPT_LOCAL, "accept_local"),
- DEVINET_SYSCTL_RW_ENTRY(SRC_VMARK, "src_valid_mark"),
- DEVINET_SYSCTL_RW_ENTRY(PROXY_ARP, "proxy_arp"),
- DEVINET_SYSCTL_RW_ENTRY(MEDIUM_ID, "medium_id"),
- DEVINET_SYSCTL_RW_ENTRY(BOOTP_RELAY, "bootp_relay"),
- DEVINET_SYSCTL_RW_ENTRY(LOG_MARTIANS, "log_martians"),
- DEVINET_SYSCTL_RW_ENTRY(TAG, "tag"),
- DEVINET_SYSCTL_RW_ENTRY(ARPFILTER, "arp_filter"),
- DEVINET_SYSCTL_RW_ENTRY(ARP_ANNOUNCE, "arp_announce"),
- DEVINET_SYSCTL_RW_ENTRY(ARP_IGNORE, "arp_ignore"),
- DEVINET_SYSCTL_RW_ENTRY(ARP_ACCEPT, "arp_accept"),
- DEVINET_SYSCTL_RW_ENTRY(ARP_NOTIFY, "arp_notify"),
- DEVINET_SYSCTL_RW_ENTRY(PROXY_ARP_PVLAN, "proxy_arp_pvlan"),
-
- DEVINET_SYSCTL_FLUSHING_ENTRY(NOXFRM, "disable_xfrm"),
- DEVINET_SYSCTL_FLUSHING_ENTRY(NOPOLICY, "disable_policy"),
- DEVINET_SYSCTL_FLUSHING_ENTRY(FORCE_IGMP_VERSION,
- "force_igmp_version"),
- DEVINET_SYSCTL_FLUSHING_ENTRY(PROMOTE_SECONDARIES,
- "promote_secondaries"),
- },
+struct ctl_table ipv4_devinet_sysctl_table[__IPV4_DEVCONF_MAX] = {
+ DEVINET_SYSCTL_COMPLEX_ENTRY(FORWARDING, "forwarding",
+ devinet_sysctl_forward),
+ DEVINET_SYSCTL_RO_ENTRY(MC_FORWARDING, "mc_forwarding"),
+
+ DEVINET_SYSCTL_RW_ENTRY(ACCEPT_REDIRECTS, "accept_redirects"),
+ DEVINET_SYSCTL_RW_ENTRY(SECURE_REDIRECTS, "secure_redirects"),
+ DEVINET_SYSCTL_RW_ENTRY(SHARED_MEDIA, "shared_media"),
+ DEVINET_SYSCTL_RW_ENTRY(RP_FILTER, "rp_filter"),
+ DEVINET_SYSCTL_RW_ENTRY(SEND_REDIRECTS, "send_redirects"),
+ DEVINET_SYSCTL_RW_ENTRY(ACCEPT_SOURCE_ROUTE,
+ "accept_source_route"),
+ DEVINET_SYSCTL_RW_ENTRY(ACCEPT_LOCAL, "accept_local"),
+ DEVINET_SYSCTL_RW_ENTRY(SRC_VMARK, "src_valid_mark"),
+ DEVINET_SYSCTL_RW_ENTRY(PROXY_ARP, "proxy_arp"),
+ DEVINET_SYSCTL_RW_ENTRY(MEDIUM_ID, "medium_id"),
+ DEVINET_SYSCTL_RW_ENTRY(BOOTP_RELAY, "bootp_relay"),
+ DEVINET_SYSCTL_RW_ENTRY(LOG_MARTIANS, "log_martians"),
+ DEVINET_SYSCTL_RW_ENTRY(TAG, "tag"),
+ DEVINET_SYSCTL_RW_ENTRY(ARPFILTER, "arp_filter"),
+ DEVINET_SYSCTL_RW_ENTRY(ARP_ANNOUNCE, "arp_announce"),
+ DEVINET_SYSCTL_RW_ENTRY(ARP_IGNORE, "arp_ignore"),
+ DEVINET_SYSCTL_RW_ENTRY(ARP_ACCEPT, "arp_accept"),
+ DEVINET_SYSCTL_RW_ENTRY(ARP_NOTIFY, "arp_notify"),
+ DEVINET_SYSCTL_RW_ENTRY(PROXY_ARP_PVLAN, "proxy_arp_pvlan"),
+
+ DEVINET_SYSCTL_FLUSHING_ENTRY(NOXFRM, "disable_xfrm"),
+ DEVINET_SYSCTL_FLUSHING_ENTRY(NOPOLICY, "disable_policy"),
+ DEVINET_SYSCTL_FLUSHING_ENTRY(FORCE_IGMP_VERSION,
+ "force_igmp_version"),
+ DEVINET_SYSCTL_FLUSHING_ENTRY(PROMOTE_SECONDARIES,
+ "promote_secondaries"),
+ { }
};
static int __devinet_sysctl_register(struct net *net, char *dev_name,
- struct ipv4_devconf *p)
+ struct ipv4_devconf *cnf)
{
- int i;
- struct devinet_sysctl_table *t;
+ struct devinet_sysctl *dsys = &cnf->devinet_sysctl;
#define DEVINET_CTL_PATH_DEV 3
@@ -1524,54 +1595,42 @@ static int __devinet_sysctl_register(struct net *net, char *dev_name,
{ },
};
- t = kmemdup(&devinet_sysctl, sizeof(*t), GFP_KERNEL);
- if (!t)
- goto out;
-
- for (i = 0; i < ARRAY_SIZE(t->devinet_vars) - 1; i++) {
- t->devinet_vars[i].data += (char *)p - (char *)&ipv4_devconf;
- t->devinet_vars[i].extra1 = p;
- t->devinet_vars[i].extra2 = net;
- }
-
/*
* Make a copy of dev_name, because '.procname' is regarded as const
* by sysctl and we wouldn't want anyone to change it under our feet
* (see SIOCSIFNAME).
*/
- t->dev_name = kstrdup(dev_name, GFP_KERNEL);
- if (!t->dev_name)
- goto free;
+ dsys->dev_name = kstrdup(dev_name, GFP_KERNEL);
+ if (!dsys->dev_name)
+ goto out;
- devinet_ctl_path[DEVINET_CTL_PATH_DEV].procname = t->dev_name;
+ devinet_ctl_path[DEVINET_CTL_PATH_DEV].procname = dsys->dev_name;
- t->sysctl_header = register_net_sysctl_table(net, devinet_ctl_path,
- t->devinet_vars);
- if (!t->sysctl_header)
+ dsys->sysctl_header = register_net_sysctl_table(net, devinet_ctl_path,
+ net->ipv4.devinet_sysctl_table);
+ if (!dsys->sysctl_header)
goto free_procname;
- p->sysctl = t;
return 0;
free_procname:
- kfree(t->dev_name);
-free:
- kfree(t);
+ kfree(dsys->dev_name);
out:
return -ENOBUFS;
}
static void __devinet_sysctl_unregister(struct ipv4_devconf *cnf)
{
- struct devinet_sysctl_table *t = cnf->sysctl;
+ struct devinet_sysctl *dsys = &cnf->devinet_sysctl;
- if (t == NULL)
+ if (dsys == NULL)
return;
- cnf->sysctl = NULL;
- unregister_sysctl_table(t->sysctl_header);
- kfree(t->dev_name);
- kfree(t);
+ unregister_sysctl_table(dsys->sysctl_header);
+ kfree(dsys->dev_name);
+
+ dsys->dev_name = NULL;
+ dsys->sysctl_header = NULL;
}
static void devinet_sysctl_register(struct in_device *idev)
@@ -1610,9 +1669,10 @@ static __net_initdata struct ctl_path net_ipv4_path[] = {
static __net_init int devinet_init_net(struct net *net)
{
- int err;
+ int i, err;
struct ipv4_devconf *all, *dflt;
#ifdef CONFIG_SYSCTL
+ struct ctl_table *devinet_sysctl_table;
struct ctl_table *tbl = ctl_forward_entry;
struct ctl_table_header *forw_hdr;
#endif
@@ -1620,6 +1680,7 @@ static __net_init int devinet_init_net(struct net *net)
err = -ENOMEM;
all = &ipv4_devconf;
dflt = &ipv4_devconf_dflt;
+ devinet_sysctl_table = &ipv4_devinet_sysctl_table[0];
if (!net_eq(net, &init_net)) {
all = kmemdup(all, sizeof(ipv4_devconf), GFP_KERNEL);
@@ -1638,10 +1699,23 @@ static __net_init int devinet_init_net(struct net *net)
tbl[0].data = &all->data[IPV4_DEVCONF_FORWARDING - 1];
tbl[0].extra1 = all;
tbl[0].extra2 = net;
+
+ devinet_sysctl_table = kmemdup(ipv4_devinet_sysctl_table,
+ sizeof(ipv4_devinet_sysctl_table),
+ GFP_KERNEL);
+ if (devinet_sysctl_table == NULL)
+ goto err_alloc_devinet_sysctl_table;
+
+ /* the last element in the table is { } and must remain so */
+ for (i = 0; i < ARRAY_SIZE(ipv4_devinet_sysctl_table) - 1; i++) {
+ devinet_sysctl_table->extra2 = net;
+ }
#endif
}
#ifdef CONFIG_SYSCTL
+ net->ipv4.devinet_sysctl_table = devinet_sysctl_table;
+
err = __devinet_sysctl_register(net, "all", all);
if (err < 0)
goto err_reg_all;
@@ -1667,6 +1741,9 @@ err_reg_ctl:
err_reg_dflt:
__devinet_sysctl_unregister(all);
err_reg_all:
+ if (devinet_sysctl_table != &ipv4_devinet_sysctl_table[0])
+ kfree(devinet_sysctl_table);
+err_alloc_devinet_sysctl_table:
if (tbl != ctl_forward_entry)
kfree(tbl);
err_alloc_ctl:
@@ -1689,6 +1766,7 @@ static __net_exit void devinet_exit_net(struct net *net)
unregister_net_sysctl_table(net->ipv4.forw_hdr);
__devinet_sysctl_unregister(net->ipv4.devconf_dflt);
__devinet_sysctl_unregister(net->ipv4.devconf_all);
+ kfree(net->ipv4.devinet_sysctl_table);
kfree(tbl);
#endif
kfree(net->ipv4.devconf_dflt);
^ permalink raw reply related
* [PATCH net-next 8/8] vmxnet3: Dont allocate extra MSI-x vectors
From: Shreyas N Bhatewara @ 2011-01-15 1:00 UTC (permalink / raw)
To: netdev, linux-kernel; +Cc: pv-drivers
In-Reply-To: <20110115005701.1064.67435.stgit@sbhatewara-dev1.eng.vmware.com>
In case of single tx and rx queues, three MSI-x vectors are allocated instead
of two. This patch fixes that.
Signed-off-by: Shreyas N Bhatewara <sbhatewara@vmware.com>
---
drivers/net/vmxnet3/vmxnet3_drv.c | 4 ++--
drivers/net/vmxnet3/vmxnet3_int.h | 6 +++---
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/drivers/net/vmxnet3/vmxnet3_drv.c b/drivers/net/vmxnet3/vmxnet3_drv.c
index 3b5b134..cc14b4a 100644
--- a/drivers/net/vmxnet3/vmxnet3_drv.c
+++ b/drivers/net/vmxnet3/vmxnet3_drv.c
@@ -2712,7 +2712,7 @@ vmxnet3_acquire_msix_vectors(struct vmxnet3_adapter *adapter,
break;
} else {
/* If fails to enable required number of MSI-x vectors
- * try enabling 3 of them. One each for rx, tx and event
+ * try enabling minimum number of vectors required.
*/
vectors = vector_threshold;
printk(KERN_ERR "Failed to enable %d MSI-X for %s, try"
@@ -2774,7 +2774,7 @@ vmxnet3_alloc_intr_resources(struct vmxnet3_adapter *adapter)
*/
if (err == VMXNET3_LINUX_MIN_MSIX_VECT) {
if (adapter->share_intr != VMXNET3_INTR_BUDDYSHARE
- || adapter->num_rx_queues != 2) {
+ || adapter->num_rx_queues != 1) {
adapter->share_intr = VMXNET3_INTR_TXSHARE;
printk(KERN_ERR "Number of rx queues : 1\n");
adapter->num_rx_queues = 1;
diff --git a/drivers/net/vmxnet3/vmxnet3_int.h b/drivers/net/vmxnet3/vmxnet3_int.h
index 474f5df..fb5d245 100644
--- a/drivers/net/vmxnet3/vmxnet3_int.h
+++ b/drivers/net/vmxnet3/vmxnet3_int.h
@@ -68,10 +68,10 @@
/*
* Version numbers
*/
-#define VMXNET3_DRIVER_VERSION_STRING "1.0.16.0-k"
+#define VMXNET3_DRIVER_VERSION_STRING "1.0.25.0-k"
/* a 32-bit int, each byte encode a verion number in VMXNET3_DRIVER_VERSION */
-#define VMXNET3_DRIVER_VERSION_NUM 0x01001000
+#define VMXNET3_DRIVER_VERSION_NUM 0x01001900
#if defined(CONFIG_PCI_MSI)
/* RSS only makes sense if MSI-X is supported. */
@@ -289,7 +289,7 @@ struct vmxnet3_rx_queue {
#define VMXNET3_LINUX_MAX_MSIX_VECT (VMXNET3_DEVICE_MAX_TX_QUEUES + \
VMXNET3_DEVICE_MAX_RX_QUEUES + 1)
-#define VMXNET3_LINUX_MIN_MSIX_VECT 3 /* 1 for each : tx, rx and event */
+#define VMXNET3_LINUX_MIN_MSIX_VECT 2 /* 1 for tx-rx pair and 1 for event */
struct vmxnet3_intr {
^ permalink raw reply related
* [PATCH net-next 7/8] vmxnet3: Add locking for access to command register
From: Shreyas N Bhatewara @ 2011-01-15 0:59 UTC (permalink / raw)
To: netdev, linux-kernel; +Cc: pv-drivers, Matthieu Bucchianeri
In-Reply-To: <20110115005701.1064.67435.stgit@sbhatewara-dev1.eng.vmware.com>
Access to cmd register is racey, especially in smp environments. Protect
it using a spinlock.
Signed-off-by: Matthieu Bucchianeri <matthieu@vmware.com>
Signed-off-by: Shreyas N Bhatewara <sbhatewara@vmware.com>
---
drivers/net/vmxnet3/vmxnet3_drv.c | 38 +++++++++++++++++++++++++++++++++
drivers/net/vmxnet3/vmxnet3_ethtool.c | 15 +++++++++++++
drivers/net/vmxnet3/vmxnet3_int.h | 1 +
3 files changed, 54 insertions(+), 0 deletions(-)
diff --git a/drivers/net/vmxnet3/vmxnet3_drv.c b/drivers/net/vmxnet3/vmxnet3_drv.c
index 20ef4f3..3b5b134 100644
--- a/drivers/net/vmxnet3/vmxnet3_drv.c
+++ b/drivers/net/vmxnet3/vmxnet3_drv.c
@@ -142,9 +142,13 @@ vmxnet3_check_link(struct vmxnet3_adapter *adapter, bool affectTxQueue)
{
u32 ret;
int i;
+ unsigned long flags;
+ spin_lock_irqsave(&adapter->cmd_lock, flags);
VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, VMXNET3_CMD_GET_LINK);
ret = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD);
+ spin_unlock_irqrestore(&adapter->cmd_lock, flags);
+
adapter->link_speed = ret >> 16;
if (ret & 1) { /* Link is up. */
printk(KERN_INFO "%s: NIC Link is Up %d Mbps\n",
@@ -186,8 +190,10 @@ vmxnet3_process_events(struct vmxnet3_adapter *adapter)
/* Check if there is an error on xmit/recv queues */
if (events & (VMXNET3_ECR_TQERR | VMXNET3_ECR_RQERR)) {
+ spin_lock(&adapter->cmd_lock);
VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
VMXNET3_CMD_GET_QUEUE_STATUS);
+ spin_unlock(&adapter->cmd_lock);
for (i = 0; i < adapter->num_tx_queues; i++)
if (adapter->tqd_start[i].status.stopped)
@@ -1857,6 +1863,7 @@ vmxnet3_vlan_rx_register(struct net_device *netdev, struct vlan_group *grp)
struct vmxnet3_adapter *adapter = netdev_priv(netdev);
struct Vmxnet3_DriverShared *shared = adapter->shared;
u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable;
+ unsigned long flags;
if (grp) {
/* add vlan rx stripping. */
@@ -1873,8 +1880,10 @@ vmxnet3_vlan_rx_register(struct net_device *netdev, struct vlan_group *grp)
vfTable[i] = 0;
VMXNET3_SET_VFTABLE_ENTRY(vfTable, 0);
+ spin_lock_irqsave(&adapter->cmd_lock, flags);
VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
VMXNET3_CMD_UPDATE_VLAN_FILTERS);
+ spin_unlock_irqrestore(&adapter->cmd_lock, flags);
} else {
printk(KERN_ERR "%s: vlan_rx_register when device has "
"no NETIF_F_HW_VLAN_RX\n", netdev->name);
@@ -1893,8 +1902,10 @@ vmxnet3_vlan_rx_register(struct net_device *netdev, struct vlan_group *grp)
*/
vfTable[i] = 0;
}
+ spin_lock_irqsave(&adapter->cmd_lock, flags);
VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
VMXNET3_CMD_UPDATE_VLAN_FILTERS);
+ spin_unlock_irqrestore(&adapter->cmd_lock, flags);
}
}
}
@@ -1927,10 +1938,13 @@ vmxnet3_vlan_rx_add_vid(struct net_device *netdev, u16 vid)
{
struct vmxnet3_adapter *adapter = netdev_priv(netdev);
u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable;
+ unsigned long flags;
VMXNET3_SET_VFTABLE_ENTRY(vfTable, vid);
+ spin_lock_irqsave(&adapter->cmd_lock, flags);
VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
VMXNET3_CMD_UPDATE_VLAN_FILTERS);
+ spin_unlock_irqrestore(&adapter->cmd_lock, flags);
}
@@ -1939,10 +1953,13 @@ vmxnet3_vlan_rx_kill_vid(struct net_device *netdev, u16 vid)
{
struct vmxnet3_adapter *adapter = netdev_priv(netdev);
u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable;
+ unsigned long flags;
VMXNET3_CLEAR_VFTABLE_ENTRY(vfTable, vid);
+ spin_lock_irqsave(&adapter->cmd_lock, flags);
VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
VMXNET3_CMD_UPDATE_VLAN_FILTERS);
+ spin_unlock_irqrestore(&adapter->cmd_lock, flags);
}
@@ -1973,6 +1990,7 @@ static void
vmxnet3_set_mc(struct net_device *netdev)
{
struct vmxnet3_adapter *adapter = netdev_priv(netdev);
+ unsigned long flags;
struct Vmxnet3_RxFilterConf *rxConf =
&adapter->shared->devRead.rxFilterConf;
u8 *new_table = NULL;
@@ -2008,6 +2026,7 @@ vmxnet3_set_mc(struct net_device *netdev)
rxConf->mfTablePA = 0;
}
+ spin_lock_irqsave(&adapter->cmd_lock, flags);
if (new_mode != rxConf->rxMode) {
rxConf->rxMode = cpu_to_le32(new_mode);
VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
@@ -2016,6 +2035,7 @@ vmxnet3_set_mc(struct net_device *netdev)
VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
VMXNET3_CMD_UPDATE_MAC_FILTERS);
+ spin_unlock_irqrestore(&adapter->cmd_lock, flags);
kfree(new_table);
}
@@ -2165,6 +2185,7 @@ vmxnet3_activate_dev(struct vmxnet3_adapter *adapter)
{
int err, i;
u32 ret;
+ unsigned long flags;
dev_dbg(&adapter->netdev->dev, "%s: skb_buf_size %d, rx_buf_per_pkt %d,"
" ring sizes %u %u %u\n", adapter->netdev->name,
@@ -2194,9 +2215,11 @@ vmxnet3_activate_dev(struct vmxnet3_adapter *adapter)
adapter->shared_pa));
VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DSAH, VMXNET3_GET_ADDR_HI(
adapter->shared_pa));
+ spin_lock_irqsave(&adapter->cmd_lock, flags);
VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
VMXNET3_CMD_ACTIVATE_DEV);
ret = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD);
+ spin_unlock_irqrestore(&adapter->cmd_lock, flags);
if (ret != 0) {
printk(KERN_ERR "Failed to activate dev %s: error %u\n",
@@ -2243,7 +2266,10 @@ rq_err:
void
vmxnet3_reset_dev(struct vmxnet3_adapter *adapter)
{
+ unsigned long flags;
+ spin_lock_irqsave(&adapter->cmd_lock, flags);
VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, VMXNET3_CMD_RESET_DEV);
+ spin_unlock_irqrestore(&adapter->cmd_lock, flags);
}
@@ -2251,12 +2277,15 @@ int
vmxnet3_quiesce_dev(struct vmxnet3_adapter *adapter)
{
int i;
+ unsigned long flags;
if (test_and_set_bit(VMXNET3_STATE_BIT_QUIESCED, &adapter->state))
return 0;
+ spin_lock_irqsave(&adapter->cmd_lock, flags);
VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
VMXNET3_CMD_QUIESCE_DEV);
+ spin_unlock_irqrestore(&adapter->cmd_lock, flags);
vmxnet3_disable_all_intrs(adapter);
for (i = 0; i < adapter->num_rx_queues; i++)
@@ -2706,9 +2735,11 @@ vmxnet3_alloc_intr_resources(struct vmxnet3_adapter *adapter)
u32 cfg;
/* intr settings */
+ spin_lock(&adapter->cmd_lock);
VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
VMXNET3_CMD_GET_CONF_INTR);
cfg = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD);
+ spin_unlock(&adapter->cmd_lock);
adapter->intr.type = cfg & 0x3;
adapter->intr.mask_mode = (cfg >> 2) & 0x3;
@@ -2893,6 +2924,7 @@ vmxnet3_probe_device(struct pci_dev *pdev,
adapter->netdev = netdev;
adapter->pdev = pdev;
+ spin_lock_init(&adapter->cmd_lock);
adapter->shared = pci_alloc_consistent(adapter->pdev,
sizeof(struct Vmxnet3_DriverShared),
&adapter->shared_pa);
@@ -3096,6 +3128,7 @@ vmxnet3_suspend(struct device *device)
u8 *arpreq;
struct in_device *in_dev;
struct in_ifaddr *ifa;
+ unsigned long flags;
int i = 0;
if (!netif_running(netdev))
@@ -3179,8 +3212,10 @@ skip_arp:
adapter->shared->devRead.pmConfDesc.confPA = cpu_to_le64(virt_to_phys(
pmConf));
+ spin_lock_irqsave(&adapter->cmd_lock, flags);
VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
VMXNET3_CMD_UPDATE_PMCFG);
+ spin_unlock_irqrestore(&adapter->cmd_lock, flags);
pci_save_state(pdev);
pci_enable_wake(pdev, pci_choose_state(pdev, PMSG_SUSPEND),
@@ -3196,6 +3231,7 @@ static int
vmxnet3_resume(struct device *device)
{
int err, i = 0;
+ unsigned long flags;
struct pci_dev *pdev = to_pci_dev(device);
struct net_device *netdev = pci_get_drvdata(pdev);
struct vmxnet3_adapter *adapter = netdev_priv(netdev);
@@ -3223,8 +3259,10 @@ vmxnet3_resume(struct device *device)
pci_enable_wake(pdev, PCI_D0, 0);
+ spin_lock_irqsave(&adapter->cmd_lock, flags);
VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
VMXNET3_CMD_UPDATE_PMCFG);
+ spin_unlock_irqrestore(&adapter->cmd_lock, flags);
vmxnet3_alloc_intr_resources(adapter);
vmxnet3_request_irqs(adapter);
for (i = 0; i < adapter->num_rx_queues; i++)
diff --git a/drivers/net/vmxnet3/vmxnet3_ethtool.c b/drivers/net/vmxnet3/vmxnet3_ethtool.c
index d70cee1..81254be 100644
--- a/drivers/net/vmxnet3/vmxnet3_ethtool.c
+++ b/drivers/net/vmxnet3/vmxnet3_ethtool.c
@@ -45,6 +45,7 @@ static int
vmxnet3_set_rx_csum(struct net_device *netdev, u32 val)
{
struct vmxnet3_adapter *adapter = netdev_priv(netdev);
+ unsigned long flags;
if (adapter->rxcsum != val) {
adapter->rxcsum = val;
@@ -56,8 +57,10 @@ vmxnet3_set_rx_csum(struct net_device *netdev, u32 val)
adapter->shared->devRead.misc.uptFeatures &=
~UPT1_F_RXCSUM;
+ spin_lock_irqsave(&adapter->cmd_lock, flags);
VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
VMXNET3_CMD_UPDATE_FEATURE);
+ spin_unlock_irqrestore(&adapter->cmd_lock, flags);
}
}
return 0;
@@ -153,12 +156,15 @@ vmxnet3_get_stats(struct net_device *netdev)
struct UPT1_TxStats *devTxStats;
struct UPT1_RxStats *devRxStats;
struct net_device_stats *net_stats = &netdev->stats;
+ unsigned long flags;
int i;
adapter = netdev_priv(netdev);
/* Collect the dev stats into the shared area */
+ spin_lock_irqsave(&adapter->cmd_lock, flags);
VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, VMXNET3_CMD_GET_STATS);
+ spin_unlock_irqrestore(&adapter->cmd_lock, flags);
memset(net_stats, 0, sizeof(*net_stats));
for (i = 0; i < adapter->num_tx_queues; i++) {
@@ -296,6 +302,7 @@ vmxnet3_set_flags(struct net_device *netdev, u32 data)
struct vmxnet3_adapter *adapter = netdev_priv(netdev);
u8 lro_requested = (data & ETH_FLAG_LRO) == 0 ? 0 : 1;
u8 lro_present = (netdev->features & NETIF_F_LRO) == 0 ? 0 : 1;
+ unsigned long flags;
if (data & ~ETH_FLAG_LRO)
return -EOPNOTSUPP;
@@ -311,8 +318,10 @@ vmxnet3_set_flags(struct net_device *netdev, u32 data)
else
adapter->shared->devRead.misc.uptFeatures &=
~UPT1_F_LRO;
+ spin_lock_irqsave(&adapter->cmd_lock, flags);
VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
VMXNET3_CMD_UPDATE_FEATURE);
+ spin_unlock_irqrestore(&adapter->cmd_lock, flags);
}
return 0;
}
@@ -322,11 +331,14 @@ vmxnet3_get_ethtool_stats(struct net_device *netdev,
struct ethtool_stats *stats, u64 *buf)
{
struct vmxnet3_adapter *adapter = netdev_priv(netdev);
+ unsigned long flags;
u8 *base;
int i;
int j = 0;
+ spin_lock_irqsave(&adapter->cmd_lock, flags);
VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, VMXNET3_CMD_GET_STATS);
+ spin_unlock_irqrestore(&adapter->cmd_lock, flags);
/* this does assume each counter is 64-bit wide */
for (j = 0; j < adapter->num_tx_queues; j++) {
@@ -605,6 +617,7 @@ vmxnet3_set_rss_indir(struct net_device *netdev,
const struct ethtool_rxfh_indir *p)
{
unsigned int i;
+ unsigned long flags;
struct vmxnet3_adapter *adapter = netdev_priv(netdev);
struct UPT1_RSSConf *rssConf = adapter->rss_conf;
@@ -623,8 +636,10 @@ vmxnet3_set_rss_indir(struct net_device *netdev,
for (i = 0; i < rssConf->indTableSize; i++)
rssConf->indTable[i] = p->ring_index[i];
+ spin_lock_irqsave(&adapter->cmd_lock, flags);
VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
VMXNET3_CMD_UPDATE_RSSIDT);
+ spin_unlock_irqrestore(&adapter->cmd_lock, flags);
return 0;
diff --git a/drivers/net/vmxnet3/vmxnet3_int.h b/drivers/net/vmxnet3/vmxnet3_int.h
index 7fadeed..474f5df 100644
--- a/drivers/net/vmxnet3/vmxnet3_int.h
+++ b/drivers/net/vmxnet3/vmxnet3_int.h
@@ -317,6 +317,7 @@ struct vmxnet3_adapter {
struct vmxnet3_rx_queue rx_queue[VMXNET3_DEVICE_MAX_RX_QUEUES];
struct vlan_group *vlan_grp;
struct vmxnet3_intr intr;
+ spinlock_t cmd_lock;
struct Vmxnet3_DriverShared *shared;
struct Vmxnet3_PMConf *pm_conf;
struct Vmxnet3_TxQueueDesc *tqd_start; /* all tx queue desc */
^ permalink raw reply related
* [PATCH net-next 6/8] vmxnet3: Disable napi in suspend, reenable in resume.
From: Shreyas N Bhatewara @ 2011-01-15 0:59 UTC (permalink / raw)
To: netdev, linux-kernel; +Cc: pv-drivers, Dmitry Torokhov
In-Reply-To: <20110115005701.1064.67435.stgit@sbhatewara-dev1.eng.vmware.com>
There is a small possibility of a race where the suspend routine gets
called, while a napi callback is still pending and when that comes up,
it enables interrupts which just got disabled in the suspend routine.
This change adds napi disable call in suspend and enable in resume to
avoid race.
Signed-off-by: Shreyas N Bhatewara <sbhatewara@vmware.com>
Acked-by: Dmitry Torokhov <dtor@vmware.com>
---
drivers/net/vmxnet3/vmxnet3_drv.c | 7 ++++++-
1 files changed, 6 insertions(+), 1 deletions(-)
diff --git a/drivers/net/vmxnet3/vmxnet3_drv.c b/drivers/net/vmxnet3/vmxnet3_drv.c
index a1632a9..20ef4f3 100644
--- a/drivers/net/vmxnet3/vmxnet3_drv.c
+++ b/drivers/net/vmxnet3/vmxnet3_drv.c
@@ -3101,6 +3101,9 @@ vmxnet3_suspend(struct device *device)
if (!netif_running(netdev))
return 0;
+ for (i = 0; i < adapter->num_rx_queues; i++)
+ napi_disable(&adapter->rx_queue[i].napi);
+
vmxnet3_disable_all_intrs(adapter);
vmxnet3_free_irqs(adapter);
vmxnet3_free_intr_resources(adapter);
@@ -3192,7 +3195,7 @@ skip_arp:
static int
vmxnet3_resume(struct device *device)
{
- int err;
+ int err, i = 0;
struct pci_dev *pdev = to_pci_dev(device);
struct net_device *netdev = pci_get_drvdata(pdev);
struct vmxnet3_adapter *adapter = netdev_priv(netdev);
@@ -3224,6 +3227,8 @@ vmxnet3_resume(struct device *device)
VMXNET3_CMD_UPDATE_PMCFG);
vmxnet3_alloc_intr_resources(adapter);
vmxnet3_request_irqs(adapter);
+ for (i = 0; i < adapter->num_rx_queues; i++)
+ napi_enable(&adapter->rx_queue[i].napi);
vmxnet3_enable_all_intrs(adapter);
return 0;
^ permalink raw reply related
* [PATCH net-next 5/8] vmxnet3: Make ethtool handlers multiqueue aware
From: Shreyas N Bhatewara @ 2011-01-15 0:59 UTC (permalink / raw)
To: netdev, linux-kernel; +Cc: pv-drivers
In-Reply-To: <20110115005701.1064.67435.stgit@sbhatewara-dev1.eng.vmware.com>
Show per-queue stats in ethtool -S output for vmxnet3 interface. Register dump
of ethtool should dump registers for all tx and rx queues.
Signed-off-by: Shreyas N Bhatewara <sbhatewara@vmware.com>
---
drivers/net/vmxnet3/vmxnet3_ethtool.c | 259 ++++++++++++++++++---------------
1 files changed, 145 insertions(+), 114 deletions(-)
diff --git a/drivers/net/vmxnet3/vmxnet3_ethtool.c b/drivers/net/vmxnet3/vmxnet3_ethtool.c
index 8e17fc8..d70cee1 100644
--- a/drivers/net/vmxnet3/vmxnet3_ethtool.c
+++ b/drivers/net/vmxnet3/vmxnet3_ethtool.c
@@ -68,76 +68,78 @@ vmxnet3_set_rx_csum(struct net_device *netdev, u32 val)
static const struct vmxnet3_stat_desc
vmxnet3_tq_dev_stats[] = {
/* description, offset */
- { "TSO pkts tx", offsetof(struct UPT1_TxStats, TSOPktsTxOK) },
- { "TSO bytes tx", offsetof(struct UPT1_TxStats, TSOBytesTxOK) },
- { "ucast pkts tx", offsetof(struct UPT1_TxStats, ucastPktsTxOK) },
- { "ucast bytes tx", offsetof(struct UPT1_TxStats, ucastBytesTxOK) },
- { "mcast pkts tx", offsetof(struct UPT1_TxStats, mcastPktsTxOK) },
- { "mcast bytes tx", offsetof(struct UPT1_TxStats, mcastBytesTxOK) },
- { "bcast pkts tx", offsetof(struct UPT1_TxStats, bcastPktsTxOK) },
- { "bcast bytes tx", offsetof(struct UPT1_TxStats, bcastBytesTxOK) },
- { "pkts tx err", offsetof(struct UPT1_TxStats, pktsTxError) },
- { "pkts tx discard", offsetof(struct UPT1_TxStats, pktsTxDiscard) },
+ { "Tx Queue#", 0 },
+ { " TSO pkts tx", offsetof(struct UPT1_TxStats, TSOPktsTxOK) },
+ { " TSO bytes tx", offsetof(struct UPT1_TxStats, TSOBytesTxOK) },
+ { " ucast pkts tx", offsetof(struct UPT1_TxStats, ucastPktsTxOK) },
+ { " ucast bytes tx", offsetof(struct UPT1_TxStats, ucastBytesTxOK) },
+ { " mcast pkts tx", offsetof(struct UPT1_TxStats, mcastPktsTxOK) },
+ { " mcast bytes tx", offsetof(struct UPT1_TxStats, mcastBytesTxOK) },
+ { " bcast pkts tx", offsetof(struct UPT1_TxStats, bcastPktsTxOK) },
+ { " bcast bytes tx", offsetof(struct UPT1_TxStats, bcastBytesTxOK) },
+ { " pkts tx err", offsetof(struct UPT1_TxStats, pktsTxError) },
+ { " pkts tx discard", offsetof(struct UPT1_TxStats, pktsTxDiscard) },
};
/* per tq stats maintained by the driver */
static const struct vmxnet3_stat_desc
vmxnet3_tq_driver_stats[] = {
/* description, offset */
- {"drv dropped tx total", offsetof(struct vmxnet3_tq_driver_stats,
- drop_total) },
- { " too many frags", offsetof(struct vmxnet3_tq_driver_stats,
- drop_too_many_frags) },
- { " giant hdr", offsetof(struct vmxnet3_tq_driver_stats,
- drop_oversized_hdr) },
- { " hdr err", offsetof(struct vmxnet3_tq_driver_stats,
- drop_hdr_inspect_err) },
- { " tso", offsetof(struct vmxnet3_tq_driver_stats,
- drop_tso) },
- { "ring full", offsetof(struct vmxnet3_tq_driver_stats,
- tx_ring_full) },
- { "pkts linearized", offsetof(struct vmxnet3_tq_driver_stats,
- linearized) },
- { "hdr cloned", offsetof(struct vmxnet3_tq_driver_stats,
- copy_skb_header) },
- { "giant hdr", offsetof(struct vmxnet3_tq_driver_stats,
- oversized_hdr) },
+ {" drv dropped tx total", offsetof(struct vmxnet3_tq_driver_stats,
+ drop_total) },
+ { " too many frags", offsetof(struct vmxnet3_tq_driver_stats,
+ drop_too_many_frags) },
+ { " giant hdr", offsetof(struct vmxnet3_tq_driver_stats,
+ drop_oversized_hdr) },
+ { " hdr err", offsetof(struct vmxnet3_tq_driver_stats,
+ drop_hdr_inspect_err) },
+ { " tso", offsetof(struct vmxnet3_tq_driver_stats,
+ drop_tso) },
+ { " ring full", offsetof(struct vmxnet3_tq_driver_stats,
+ tx_ring_full) },
+ { " pkts linearized", offsetof(struct vmxnet3_tq_driver_stats,
+ linearized) },
+ { " hdr cloned", offsetof(struct vmxnet3_tq_driver_stats,
+ copy_skb_header) },
+ { " giant hdr", offsetof(struct vmxnet3_tq_driver_stats,
+ oversized_hdr) },
};
/* per rq stats maintained by the device */
static const struct vmxnet3_stat_desc
vmxnet3_rq_dev_stats[] = {
- { "LRO pkts rx", offsetof(struct UPT1_RxStats, LROPktsRxOK) },
- { "LRO byte rx", offsetof(struct UPT1_RxStats, LROBytesRxOK) },
- { "ucast pkts rx", offsetof(struct UPT1_RxStats, ucastPktsRxOK) },
- { "ucast bytes rx", offsetof(struct UPT1_RxStats, ucastBytesRxOK) },
- { "mcast pkts rx", offsetof(struct UPT1_RxStats, mcastPktsRxOK) },
- { "mcast bytes rx", offsetof(struct UPT1_RxStats, mcastBytesRxOK) },
- { "bcast pkts rx", offsetof(struct UPT1_RxStats, bcastPktsRxOK) },
- { "bcast bytes rx", offsetof(struct UPT1_RxStats, bcastBytesRxOK) },
- { "pkts rx out of buf", offsetof(struct UPT1_RxStats, pktsRxOutOfBuf) },
- { "pkts rx err", offsetof(struct UPT1_RxStats, pktsRxError) },
+ { "Rx Queue#", 0 },
+ { " LRO pkts rx", offsetof(struct UPT1_RxStats, LROPktsRxOK) },
+ { " LRO byte rx", offsetof(struct UPT1_RxStats, LROBytesRxOK) },
+ { " ucast pkts rx", offsetof(struct UPT1_RxStats, ucastPktsRxOK) },
+ { " ucast bytes rx", offsetof(struct UPT1_RxStats, ucastBytesRxOK) },
+ { " mcast pkts rx", offsetof(struct UPT1_RxStats, mcastPktsRxOK) },
+ { " mcast bytes rx", offsetof(struct UPT1_RxStats, mcastBytesRxOK) },
+ { " bcast pkts rx", offsetof(struct UPT1_RxStats, bcastPktsRxOK) },
+ { " bcast bytes rx", offsetof(struct UPT1_RxStats, bcastBytesRxOK) },
+ { " pkts rx OOB", offsetof(struct UPT1_RxStats, pktsRxOutOfBuf) },
+ { " pkts rx err", offsetof(struct UPT1_RxStats, pktsRxError) },
};
/* per rq stats maintained by the driver */
static const struct vmxnet3_stat_desc
vmxnet3_rq_driver_stats[] = {
/* description, offset */
- { "drv dropped rx total", offsetof(struct vmxnet3_rq_driver_stats,
- drop_total) },
- { " err", offsetof(struct vmxnet3_rq_driver_stats,
- drop_err) },
- { " fcs", offsetof(struct vmxnet3_rq_driver_stats,
- drop_fcs) },
- { "rx buf alloc fail", offsetof(struct vmxnet3_rq_driver_stats,
- rx_buf_alloc_failure) },
+ { " drv dropped rx total", offsetof(struct vmxnet3_rq_driver_stats,
+ drop_total) },
+ { " err", offsetof(struct vmxnet3_rq_driver_stats,
+ drop_err) },
+ { " fcs", offsetof(struct vmxnet3_rq_driver_stats,
+ drop_fcs) },
+ { " rx buf alloc fail", offsetof(struct vmxnet3_rq_driver_stats,
+ rx_buf_alloc_failure) },
};
/* gloabl stats maintained by the driver */
static const struct vmxnet3_stat_desc
vmxnet3_global_stats[] = {
/* description, offset */
- { "tx timeout count", offsetof(struct vmxnet3_adapter,
+ { "tx timeout count", offsetof(struct vmxnet3_adapter,
tx_timeout_count) }
};
@@ -193,12 +195,15 @@ vmxnet3_get_stats(struct net_device *netdev)
static int
vmxnet3_get_sset_count(struct net_device *netdev, int sset)
{
+ struct vmxnet3_adapter *adapter = netdev_priv(netdev);
switch (sset) {
case ETH_SS_STATS:
- return ARRAY_SIZE(vmxnet3_tq_dev_stats) +
- ARRAY_SIZE(vmxnet3_tq_driver_stats) +
- ARRAY_SIZE(vmxnet3_rq_dev_stats) +
- ARRAY_SIZE(vmxnet3_rq_driver_stats) +
+ return (ARRAY_SIZE(vmxnet3_tq_dev_stats) +
+ ARRAY_SIZE(vmxnet3_tq_driver_stats)) *
+ adapter->num_tx_queues +
+ (ARRAY_SIZE(vmxnet3_rq_dev_stats) +
+ ARRAY_SIZE(vmxnet3_rq_driver_stats)) *
+ adapter->num_rx_queues +
ARRAY_SIZE(vmxnet3_global_stats);
default:
return -EOPNOTSUPP;
@@ -206,10 +211,16 @@ vmxnet3_get_sset_count(struct net_device *netdev, int sset)
}
+/* Should be multiple of 4 */
+#define NUM_TX_REGS 8
+#define NUM_RX_REGS 12
+
static int
vmxnet3_get_regs_len(struct net_device *netdev)
{
- return 20 * sizeof(u32);
+ struct vmxnet3_adapter *adapter = netdev_priv(netdev);
+ return (adapter->num_tx_queues * NUM_TX_REGS * sizeof(u32) +
+ adapter->num_rx_queues * NUM_RX_REGS * sizeof(u32));
}
@@ -240,29 +251,37 @@ vmxnet3_get_drvinfo(struct net_device *netdev, struct ethtool_drvinfo *drvinfo)
static void
vmxnet3_get_strings(struct net_device *netdev, u32 stringset, u8 *buf)
{
+ struct vmxnet3_adapter *adapter = netdev_priv(netdev);
if (stringset == ETH_SS_STATS) {
- int i;
-
- for (i = 0; i < ARRAY_SIZE(vmxnet3_tq_dev_stats); i++) {
- memcpy(buf, vmxnet3_tq_dev_stats[i].desc,
- ETH_GSTRING_LEN);
- buf += ETH_GSTRING_LEN;
- }
- for (i = 0; i < ARRAY_SIZE(vmxnet3_tq_driver_stats); i++) {
- memcpy(buf, vmxnet3_tq_driver_stats[i].desc,
- ETH_GSTRING_LEN);
- buf += ETH_GSTRING_LEN;
- }
- for (i = 0; i < ARRAY_SIZE(vmxnet3_rq_dev_stats); i++) {
- memcpy(buf, vmxnet3_rq_dev_stats[i].desc,
- ETH_GSTRING_LEN);
- buf += ETH_GSTRING_LEN;
+ int i, j;
+ for (j = 0; j < adapter->num_tx_queues; j++) {
+ for (i = 0; i < ARRAY_SIZE(vmxnet3_tq_dev_stats); i++) {
+ memcpy(buf, vmxnet3_tq_dev_stats[i].desc,
+ ETH_GSTRING_LEN);
+ buf += ETH_GSTRING_LEN;
+ }
+ for (i = 0; i < ARRAY_SIZE(vmxnet3_tq_driver_stats);
+ i++) {
+ memcpy(buf, vmxnet3_tq_driver_stats[i].desc,
+ ETH_GSTRING_LEN);
+ buf += ETH_GSTRING_LEN;
+ }
}
- for (i = 0; i < ARRAY_SIZE(vmxnet3_rq_driver_stats); i++) {
- memcpy(buf, vmxnet3_rq_driver_stats[i].desc,
- ETH_GSTRING_LEN);
- buf += ETH_GSTRING_LEN;
+
+ for (j = 0; j < adapter->num_rx_queues; j++) {
+ for (i = 0; i < ARRAY_SIZE(vmxnet3_rq_dev_stats); i++) {
+ memcpy(buf, vmxnet3_rq_dev_stats[i].desc,
+ ETH_GSTRING_LEN);
+ buf += ETH_GSTRING_LEN;
+ }
+ for (i = 0; i < ARRAY_SIZE(vmxnet3_rq_driver_stats);
+ i++) {
+ memcpy(buf, vmxnet3_rq_driver_stats[i].desc,
+ ETH_GSTRING_LEN);
+ buf += ETH_GSTRING_LEN;
+ }
}
+
for (i = 0; i < ARRAY_SIZE(vmxnet3_global_stats); i++) {
memcpy(buf, vmxnet3_global_stats[i].desc,
ETH_GSTRING_LEN);
@@ -310,23 +329,31 @@ vmxnet3_get_ethtool_stats(struct net_device *netdev,
VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, VMXNET3_CMD_GET_STATS);
/* this does assume each counter is 64-bit wide */
-/* TODO change this for multiple queues */
-
- base = (u8 *)&adapter->tqd_start[j].stats;
- for (i = 0; i < ARRAY_SIZE(vmxnet3_tq_dev_stats); i++)
- *buf++ = *(u64 *)(base + vmxnet3_tq_dev_stats[i].offset);
-
- base = (u8 *)&adapter->tx_queue[j].stats;
- for (i = 0; i < ARRAY_SIZE(vmxnet3_tq_driver_stats); i++)
- *buf++ = *(u64 *)(base + vmxnet3_tq_driver_stats[i].offset);
-
- base = (u8 *)&adapter->rqd_start[j].stats;
- for (i = 0; i < ARRAY_SIZE(vmxnet3_rq_dev_stats); i++)
- *buf++ = *(u64 *)(base + vmxnet3_rq_dev_stats[i].offset);
+ for (j = 0; j < adapter->num_tx_queues; j++) {
+ base = (u8 *)&adapter->tqd_start[j].stats;
+ *buf++ = (u64)j;
+ for (i = 1; i < ARRAY_SIZE(vmxnet3_tq_dev_stats); i++)
+ *buf++ = *(u64 *)(base +
+ vmxnet3_tq_dev_stats[i].offset);
+
+ base = (u8 *)&adapter->tx_queue[j].stats;
+ for (i = 0; i < ARRAY_SIZE(vmxnet3_tq_driver_stats); i++)
+ *buf++ = *(u64 *)(base +
+ vmxnet3_tq_driver_stats[i].offset);
+ }
- base = (u8 *)&adapter->rx_queue[j].stats;
- for (i = 0; i < ARRAY_SIZE(vmxnet3_rq_driver_stats); i++)
- *buf++ = *(u64 *)(base + vmxnet3_rq_driver_stats[i].offset);
+ for (j = 0; j < adapter->num_tx_queues; j++) {
+ base = (u8 *)&adapter->rqd_start[j].stats;
+ *buf++ = (u64) j;
+ for (i = 1; i < ARRAY_SIZE(vmxnet3_rq_dev_stats); i++)
+ *buf++ = *(u64 *)(base +
+ vmxnet3_rq_dev_stats[i].offset);
+
+ base = (u8 *)&adapter->rx_queue[j].stats;
+ for (i = 0; i < ARRAY_SIZE(vmxnet3_rq_driver_stats); i++)
+ *buf++ = *(u64 *)(base +
+ vmxnet3_rq_driver_stats[i].offset);
+ }
base = (u8 *)adapter;
for (i = 0; i < ARRAY_SIZE(vmxnet3_global_stats); i++)
@@ -339,7 +366,7 @@ vmxnet3_get_regs(struct net_device *netdev, struct ethtool_regs *regs, void *p)
{
struct vmxnet3_adapter *adapter = netdev_priv(netdev);
u32 *buf = p;
- int i = 0;
+ int i = 0, j = 0;
memset(p, 0, vmxnet3_get_regs_len(netdev));
@@ -348,31 +375,35 @@ vmxnet3_get_regs(struct net_device *netdev, struct ethtool_regs *regs, void *p)
/* Update vmxnet3_get_regs_len if we want to dump more registers */
/* make each ring use multiple of 16 bytes */
-/* TODO change this for multiple queues */
- buf[0] = adapter->tx_queue[i].tx_ring.next2fill;
- buf[1] = adapter->tx_queue[i].tx_ring.next2comp;
- buf[2] = adapter->tx_queue[i].tx_ring.gen;
- buf[3] = 0;
-
- buf[4] = adapter->tx_queue[i].comp_ring.next2proc;
- buf[5] = adapter->tx_queue[i].comp_ring.gen;
- buf[6] = adapter->tx_queue[i].stopped;
- buf[7] = 0;
-
- buf[8] = adapter->rx_queue[i].rx_ring[0].next2fill;
- buf[9] = adapter->rx_queue[i].rx_ring[0].next2comp;
- buf[10] = adapter->rx_queue[i].rx_ring[0].gen;
- buf[11] = 0;
-
- buf[12] = adapter->rx_queue[i].rx_ring[1].next2fill;
- buf[13] = adapter->rx_queue[i].rx_ring[1].next2comp;
- buf[14] = adapter->rx_queue[i].rx_ring[1].gen;
- buf[15] = 0;
-
- buf[16] = adapter->rx_queue[i].comp_ring.next2proc;
- buf[17] = adapter->rx_queue[i].comp_ring.gen;
- buf[18] = 0;
- buf[19] = 0;
+ for (i = 0; i < adapter->num_tx_queues; i++) {
+ buf[j++] = adapter->tx_queue[i].tx_ring.next2fill;
+ buf[j++] = adapter->tx_queue[i].tx_ring.next2comp;
+ buf[j++] = adapter->tx_queue[i].tx_ring.gen;
+ buf[j++] = 0;
+
+ buf[j++] = adapter->tx_queue[i].comp_ring.next2proc;
+ buf[j++] = adapter->tx_queue[i].comp_ring.gen;
+ buf[j++] = adapter->tx_queue[i].stopped;
+ buf[j++] = 0;
+ }
+
+ for (i = 0; i < adapter->num_rx_queues; i++) {
+ buf[j++] = adapter->rx_queue[i].rx_ring[0].next2fill;
+ buf[j++] = adapter->rx_queue[i].rx_ring[0].next2comp;
+ buf[j++] = adapter->rx_queue[i].rx_ring[0].gen;
+ buf[j++] = 0;
+
+ buf[j++] = adapter->rx_queue[i].rx_ring[1].next2fill;
+ buf[j++] = adapter->rx_queue[i].rx_ring[1].next2comp;
+ buf[j++] = adapter->rx_queue[i].rx_ring[1].gen;
+ buf[j++] = 0;
+
+ buf[j++] = adapter->rx_queue[i].comp_ring.next2proc;
+ buf[j++] = adapter->rx_queue[i].comp_ring.gen;
+ buf[j++] = 0;
+ buf[j++] = 0;
+ }
+
}
^ permalink raw reply related
* [PATCH net-next 4/8] vmxnet3: Provide required number of bytes in first SG buffer
From: Shreyas N Bhatewara @ 2011-01-15 0:59 UTC (permalink / raw)
To: netdev, linux-kernel; +Cc: pv-drivers
In-Reply-To: <20110115005701.1064.67435.stgit@sbhatewara-dev1.eng.vmware.com>
This is a performance enhancement fix. vmxnet3 device performs better when
provided with at least 54 bytes (ethernet 14 + IP 20+ TCP 20) in the first SG
buffer. For UDP packets driver provides lesser than that in first sg. This
change fixes the same. Also avoid the redundant pskb_may_pull() call.
Signed-off-by: Shreyas N Bhatewara <sbhatewara@vmware.com>
---
drivers/net/vmxnet3/vmxnet3_drv.c | 23 +++++++++--------------
1 files changed, 9 insertions(+), 14 deletions(-)
diff --git a/drivers/net/vmxnet3/vmxnet3_drv.c b/drivers/net/vmxnet3/vmxnet3_drv.c
index f47db1c..a1632a9 100644
--- a/drivers/net/vmxnet3/vmxnet3_drv.c
+++ b/drivers/net/vmxnet3/vmxnet3_drv.c
@@ -807,30 +807,25 @@ vmxnet3_parse_and_copy_hdr(struct sk_buff *skb, struct vmxnet3_tx_queue *tq,
skb_transport_header(skb))->doff * 4;
ctx->copy_size = ctx->eth_ip_hdr_size + ctx->l4_hdr_size;
} else {
- unsigned int pull_size;
-
if (skb->ip_summed == CHECKSUM_PARTIAL) {
ctx->eth_ip_hdr_size = skb_checksum_start_offset(skb);
if (ctx->ipv4) {
struct iphdr *iph = (struct iphdr *)
skb_network_header(skb);
- if (iph->protocol == IPPROTO_TCP) {
- pull_size = ctx->eth_ip_hdr_size +
- sizeof(struct tcphdr);
-
- if (unlikely(!pskb_may_pull(skb,
- pull_size))) {
- goto err;
- }
+ if (iph->protocol == IPPROTO_TCP)
ctx->l4_hdr_size = ((struct tcphdr *)
skb_transport_header(skb))->doff * 4;
- } else if (iph->protocol == IPPROTO_UDP) {
+ else if (iph->protocol == IPPROTO_UDP)
+ /*
+ * Use tcp header size so that bytes to
+ * be copied are more than required by
+ * the device.
+ */
ctx->l4_hdr_size =
- sizeof(struct udphdr);
- } else {
+ sizeof(struct tcphdr);
+ else
ctx->l4_hdr_size = 0;
- }
} else {
/* for simplicity, don't copy L4 headers */
ctx->l4_hdr_size = 0;
^ permalink raw reply related
* [PATCH net-next 3/8] vmxnet3: Enable HW Rx VLAN stripping by default
From: Shreyas N Bhatewara @ 2011-01-15 0:59 UTC (permalink / raw)
To: netdev, linux-kernel; +Cc: pv-drivers, Guolin Yang
In-Reply-To: <20110115005701.1064.67435.stgit@sbhatewara-dev1.eng.vmware.com>
Make hw vlan tag stripping as enabled by default. Thereby remove
the code to conditionally enable it later.
Signed-off-by: Guolin Yang <gyang@vmware.com>
Signed-off-by: Shreyas N Bhatewara <sbhatewara@vmware.com>
---
drivers/net/vmxnet3/vmxnet3_drv.c | 14 +-------------
1 files changed, 1 insertions(+), 13 deletions(-)
diff --git a/drivers/net/vmxnet3/vmxnet3_drv.c b/drivers/net/vmxnet3/vmxnet3_drv.c
index 89bcee8..f47db1c 100644
--- a/drivers/net/vmxnet3/vmxnet3_drv.c
+++ b/drivers/net/vmxnet3/vmxnet3_drv.c
@@ -1867,13 +1867,8 @@ vmxnet3_vlan_rx_register(struct net_device *netdev, struct vlan_group *grp)
/* add vlan rx stripping. */
if (adapter->netdev->features & NETIF_F_HW_VLAN_RX) {
int i;
- struct Vmxnet3_DSDevRead *devRead = &shared->devRead;
adapter->vlan_grp = grp;
- /* update FEATURES to device */
- devRead->misc.uptFeatures |= UPT1_F_RXVLAN;
- VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
- VMXNET3_CMD_UPDATE_FEATURE);
/*
* Clear entire vfTable; then enable untagged pkts.
* Note: setting one entry in vfTable to non-zero turns
@@ -1905,11 +1900,6 @@ vmxnet3_vlan_rx_register(struct net_device *netdev, struct vlan_group *grp)
}
VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
VMXNET3_CMD_UPDATE_VLAN_FILTERS);
-
- /* update FEATURES to device */
- devRead->misc.uptFeatures &= ~UPT1_F_RXVLAN;
- VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
- VMXNET3_CMD_UPDATE_FEATURE);
}
}
}
@@ -2083,10 +2073,8 @@ vmxnet3_setup_driver_shared(struct vmxnet3_adapter *adapter)
devRead->misc.uptFeatures |= UPT1_F_LRO;
devRead->misc.maxNumRxSG = cpu_to_le16(1 + MAX_SKB_FRAGS);
}
- if ((adapter->netdev->features & NETIF_F_HW_VLAN_RX) &&
- adapter->vlan_grp) {
+ if (adapter->netdev->features & NETIF_F_HW_VLAN_RX)
devRead->misc.uptFeatures |= UPT1_F_RXVLAN;
- }
devRead->misc.mtu = cpu_to_le32(adapter->netdev->mtu);
devRead->misc.queueDescPA = cpu_to_le64(adapter->queue_desc_pa);
^ permalink raw reply related
* [PATCH net-next 2/8] vmxnet3: Preserve the MAC address configured by ifconfig
From: Shreyas N Bhatewara @ 2011-01-15 0:59 UTC (permalink / raw)
To: netdev, linux-kernel; +Cc: pv-drivers
In-Reply-To: <20110115005701.1064.67435.stgit@sbhatewara-dev1.eng.vmware.com>
While activating the device get it's MAC address from netdev. This will allow
the MAC address iconfigured using ifconfig to persist through the reset.
Signed-off-by: Shreyas N Bhatewara <sbhatewara@vmware.com>
---
drivers/net/vmxnet3/vmxnet3_drv.c | 5 +++++
1 files changed, 5 insertions(+), 0 deletions(-)
diff --git a/drivers/net/vmxnet3/vmxnet3_drv.c b/drivers/net/vmxnet3/vmxnet3_drv.c
index 562bdbb..89bcee8 100644
--- a/drivers/net/vmxnet3/vmxnet3_drv.c
+++ b/drivers/net/vmxnet3/vmxnet3_drv.c
@@ -48,6 +48,9 @@ static atomic_t devices_found;
static int enable_mq = 1;
static int irq_share_mode;
+static void
+vmxnet3_write_mac_addr(struct vmxnet3_adapter *adapter, u8 *mac);
+
/*
* Enable/Disable the given intr
*/
@@ -2168,6 +2171,8 @@ vmxnet3_setup_driver_shared(struct vmxnet3_adapter *adapter)
/* rx filter settings */
devRead->rxFilterConf.rxMode = 0;
vmxnet3_restore_vlan(adapter);
+ vmxnet3_write_mac_addr(adapter, adapter->netdev->dev_addr);
+
/* the rest are already zeroed */
}
^ permalink raw reply related
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox