* Re: Bug in computing data_len in tcp_sendmsg?
From: Vijay Subramanian @ 2011-12-02 6:18 UTC (permalink / raw)
To: Eric Dumazet; +Cc: Tom Herbert, Linux Netdev List, David Miller
In-Reply-To: <1322778621.2750.48.camel@edumazet-laptop>
>> I am looking at tcp_mtu_probe() and was wondering if this commit also
>> impacts this function. Once the data are copied from skbs in the write
>> queue to the probe skb, copied data are cleared from the original skbs
>> in the write queue.
>>
>> It looks like the code assumes that the original skb will have data
>> either in linear part or in paged part. The call to
>> __pskb_trim_head(skb, copy) for example does not clear linear part.
>>
>> Can someone more familiar with the code take a look? Apologies if I
>> have read this wrong.
>>
>
> tcp_mtu_probe() builds a linear skb, and populate it using
> skb_copy_bits() [ this is frag aware, and aware of payload in header as
> well ]
>
> I see no problem in it.
>
Eric,
I think you may have misunderstood me (I think my post was not very
clear). Let me try again.
The MTU probe is built correctly as a linear skb. As you point out,
skb_copy_bits() is frag aware and copies data from both the header and
pages.
The issue is with the way the data is cleared from the write queue
later in the function tcp_mtu_probe().
For example, if the MTU probe size was N bytes, then the probe is
inserted at the front of the write_queue and N bytes are copied from
the original write-queue skbs.
As these N bytes are copied, if an skb is completely consumed, it is
unlinked from the write_queue and freed. If an skb is only partially
consumed, then the pointers are adjusted
accordingly to erase the data. For a paged skb, fully consumed pages
are unreferenced.
This is done as follows in tcp_mtu_probe()
if (!skb_shinfo(skb)->nr_frags) {
skb_pull(skb, copy);
if (skb->ip_summed != CHECKSUM_PARTIAL)
skb->csum = csum_partial(skb->data,
skb->len, 0);
} else {
__pskb_trim_head(skb, copy);
tcp_set_skb_tso_segs(sk, skb, mss_now);
}
It appears that the code assumes the data will either be in the linear
part (the if condition) or in the paged part (else condition) but not
both. Is this a correct assumption after the
recent commit f07d960df33c5aef (tcp: avoid frag allocation for small frames)?
Since __pskb_trim_head() only only removes data from the non-linear
part, the data in the linear part is never removed. Maybe for paged
skbs, we need something like
headlen = skb_headlen(skb);
skb_pull(skb, headlen);
__pskb_trim_head(skb, copy - headlen);
Thanks for your patience and hope this makes more sense than my previous post.
Regards,
Vijay Subramanian
^ permalink raw reply
* Re: BUG: unable to handle kernel NULL pointer dereference at 000000000000002c
From: Stefan Priebe - Profihost AG @ 2011-12-02 6:08 UTC (permalink / raw)
To: Eric Dumazet; +Cc: Josh Boyer, Christoph Hellwig, netdev, Dave Chinner, stable
In-Reply-To: <1322773527.2750.27.camel@edumazet-laptop>
Am 01.12.2011 22:05, schrieb Eric Dumazet:
> Le jeudi 01 décembre 2011 à 15:37 -0500, Josh Boyer a écrit :
>
>> Did you mean f2c31e32bf2c31e32b378a665 ?
>
> Oh well, yes ;)
>
>>> But this patch needs some followup patches (some of them in David net
>>> tree, not yet in Linus tree)
>>
>> 9de79c127cccecb11ae6a21ab1499e87aa222880 (net: fix potential neighbour
>> race in dst_ifdown()) is in Linus' tree. Which others are missing?
>
> Hmm
>
> Linus tree :
>
> commit 580da35a31f91a594f3090b7a2c39b85cb051a12
> IB: Fix RCU lockdep splats
>
> David tree :
>
> commit 218fa90f072e4aeff9003d57e390857f4f35513e
> ipv4: fix lockdep splat in rt_cache_seq_show
>
> commit f7e57044eeb1841847c24aa06766c8290c202583
> sch_teql: fix lockdep splat
>
So can someone please send them to greg => stable@ so we can get them
into 3.0.X longterm stable.
Thanks!
Stefan
^ permalink raw reply
* Re: [PATCH] fsl_pq_mdio: Clean up tbi address configuration
From: Andy Fleming @ 2011-12-02 5:16 UTC (permalink / raw)
To: Kumar Gala; +Cc: David Miller, afleming, netdev
In-Reply-To: <D789ECCE-08DE-4E6D-BCA7-2C54EC5758B7@kernel.crashing.org>
On Thu, Dec 1, 2011 at 10:38 PM, Kumar Gala <galak@kernel.crashing.org> wrote:
>
> On Nov 13, 2011, at 11:26 PM, David Miller wrote:
>
>> From: Andy Fleming <afleming@freescale.com>
>> Date: Fri, 11 Nov 2011 09:10:39 -0600
>>
>>> The code for setting the address of the internal TBI PHY was
>>> convoluted enough without a maze of ifdefs. Clean it up a bit
>>> so we allow the logic to fail down to -ENODEV at the end of
>>> the if/else ladder, rather than using ifdefs to repeat the same
>>> failure code over and over.
>>>
>>> Also, remove the support for the auto-configuration. I'm not aware of
>>> anyone using it, and it ends up using the bus mutex before it's been
>>> initialized.
>>>
>>> Signed-off-by: Andy Fleming <afleming@freescale.com>
>>
>> Applied, thanks.
>
> I believe we need this on mainline otherwise we get something like:
I concur. I also have a 2 separate patches I will send out tonight,
which are independent of each other, but related.
The first will revert c3e072f8a6c5625028531c40ec65f7e301531be2 (net:
fsl_pq_mdio: fix non tbi phy access), which hides a bug. The second
will fix the bug in our p1/p2 device trees so that they all have tbi
nodes.
The first patch only applies to net-next (reverts a commit in that
tree). The second patch only applies to Kumar's "next" branch (applies
changes on top of significant device-tree changes). I have no idea how
you guys want to deal with that. Personally, I think that the patches
can be applied to their respective trees, and anyone who is working
off the bleeding edge can go find the appropriate patch in the other
tree. If we get my first patch into mainline, then I imagine Kumar's
tree will have all the necessary components...
Anyway, I will leave that to you. I will submit the two patches in the
next hour or so.
Andy
^ permalink raw reply
* Re: [PATCH] fsl_pq_mdio: Clean up tbi address configuration
From: Kumar Gala @ 2011-12-02 4:38 UTC (permalink / raw)
To: David Miller; +Cc: afleming, netdev
In-Reply-To: <20111114.002630.2254622894958283155.davem@davemloft.net>
On Nov 13, 2011, at 11:26 PM, David Miller wrote:
> From: Andy Fleming <afleming@freescale.com>
> Date: Fri, 11 Nov 2011 09:10:39 -0600
>
>> The code for setting the address of the internal TBI PHY was
>> convoluted enough without a maze of ifdefs. Clean it up a bit
>> so we allow the logic to fail down to -ENODEV at the end of
>> the if/else ladder, rather than using ifdefs to repeat the same
>> failure code over and over.
>>
>> Also, remove the support for the auto-configuration. I'm not aware of
>> anyone using it, and it ends up using the bus mutex before it's been
>> initialized.
>>
>> Signed-off-by: Andy Fleming <afleming@freescale.com>
>
> Applied, thanks.
I believe we need this on mainline otherwise we get something like:
Fixed MDIO Bus: probed
Unable to handle kernel paging request for data at address 0x00000000
Faulting instruction address: 0xc0451630
Oops: Kernel access of bad area, sig: 11 [#1]
SMP NR_CPUS=2 P1022 DS
Modules linked in:
NIP: c0451630 LR: c0451618 CTR: 00000007
REGS: ef03fce0 TRAP: 0300 Not tainted (3.2.0-rc3-00099-g883381d)
MSR: 00029000 <EE,ME,CE> CR: 24042022 XER: 00000000
DEAR: 00000000, ESR: 00800000
TASK = ef040000[1] 'swapper' THREAD: ef03e000 CPU: 0
GPR00: ef03fd98 ef03fd90 ef040000 ef1ab22c 00000000 00000002 ffeb0000 0000fffe
GPR08: b0541215 00000000 00000000 00000000 24042028 23c406c2 00000000 00000000
GPR16: c0000a00 00000014 3fffffff 03ff9000 00000015 7ff3a760 f1044030 fffffff4
GPR24: c053e128 ef1ab230 c056a3a8 ef03e000 ef040000 ef1ab22c 00000000 ef1ab228
NIP [c0451630] __mutex_lock_slowpath+0xb4/0x190
LR [c0451618] __mutex_lock_slowpath+0x9c/0x190
Call Trace:
[ef03fdd0] [c0451758] mutex_lock+0x4c/0x50
[ef03fde0] [c02b5124] mdiobus_read+0x38/0x74
[ef03fe00] [c02b41f4] get_phy_id+0x24/0x80
[ef03fe20] [c02b9de4] fsl_pq_mdio_probe+0x3b4/0x580
[ef03feb0] [c0266120] platform_drv_probe+0x20/0x30
[ef03fec0] [c0264bbc] driver_probe_device+0xa4/0x1d4
[ef03fee0] [c0264da8] __driver_attach+0xbc/0xc0
[ef03ff00] [c0263ac0] bus_for_each_dev+0x60/0x9c
[ef03ff30] [c02647f4] driver_attach+0x24/0x34
[ef03ff40] [c0264444] bus_add_driver+0x1ac/0x274
[ef03ff70] [c02651b0] driver_register+0x88/0x154
[ef03ff90] [c0266450] platform_driver_register+0x68/0x78
[ef03ffa0] [c05d93b8] fsl_pq_mdio_init+0x18/0x28
[ef03ffb0] [c0001eb8] do_one_initcall+0x34/0x1a8
[ef03ffe0] [c05bb82c] kernel_init+0xa0/0x13c
[ef03fff0] [c000d878] kernel_thread+0x4c/0x68
Instruction dump:
801c0020 2f800063 419dffe8 3bbf0004 7fa3eb78 48001aad 813f000c 38010008
3b3f0008 901f000c 93210008 9121000c
3800ffff 93810010 7c0004ac
---[ end trace 1643a9a9c5097f8f ]---
Kernel panic - not syncing: Attempted to kill init!
Call Trace:
[ef03fbc0] [c0008044] show_stack+0x44/0x154 (unreliable)
[ef03fc00] [c04532c8] panic+0xa4/0x1d8
[ef03fc50] [c0049a00] do_exit+0x5dc/0x684
[ef03fca0] [c000a6f0] die+0xdc/0x1b4
[ef03fcc0] [c00128d0] bad_page_fault+0xb4/0xfc
[ef03fcd0] [c000ebe4] handle_page_fault+0x7c/0x80
--- Exception: 300 at __mutex_lock_slowpath+0xb4/0x190
LR = __mutex_lock_slowpath+0x9c/0x190
[ef03fd90] [00000000] (null) (unreliable)
[ef03fdd0] [c0451758] mutex_lock+0x4c/0x50
[ef03fde0] [c02b5124] mdiobus_read+0x38/0x74
[ef03fe00] [c02b41f4] get_phy_id+0x24/0x80
[ef03fe20] [c02b9de4] fsl_pq_mdio_probe+0x3b4/0x580
[ef03feb0] [c0266120] platform_drv_probe+0x20/0x30
[ef03fec0] [c0264bbc] driver_probe_device+0xa4/0x1d4
[ef03fee0] [c0264da8] __driver_attach+0xbc/0xc0
[ef03ff00] [c0263ac0] bus_for_each_dev+0x60/0x9c
[ef03ff30] [c02647f4] driver_attach+0x24/0x34
[ef03ff40] [c0264444] bus_add_driver+0x1ac/0x274
[ef03ff70] [c02651b0] driver_register+0x88/0x154
[ef03ff90] [c0266450] platform_driver_register+0x68/0x78
[ef03ffa0] [c05d93b8] fsl_pq_mdio_init+0x18/0x28
[ef03ffb0] [c0001eb8] do_one_initcall+0x34/0x1a8
[ef03ffe0] [c05bb82c] kernel_init+0xa0/0x13c
[ef03fff0] [c000d878] kernel_thread+0x4c/0x68
Rebooting in 180 seconds..
- k
^ permalink raw reply
* [GIT] Networking
From: David Miller @ 2011-12-02 3:55 UTC (permalink / raw)
To: torvalds; +Cc: akpm, netdev, linux-kernel
Lots of tiny fixes, pretty much everywhere. Nothing really stands out, but
each bug is certainly a bummer if you happen to run into it.
I hope all the PMTU and redirect regressions I added to the ipv4 code
are really fixed now :-) A huge thanks to Steffen Klassert, Eric Dumazet,
and others for helping to resolve these problems.
The netfilter ADVANCED depency adjustments are, of course, in here too.
1) ARCNET and PHYLIB were inadvertantly changed to bool, revert back to
tristate. From Ben Hutchings.
2) Two netfilter ADVANCED adjustments.
3) Cached route lookups must validate referenced inetpeer.
4) Revert old udp_recvmsg() 'redundant variable' change, because in fact
the 'copied' variable was not redundant and this broke things when
encountering UDP packets with bad checksums.
5) TCP ipv6 input packet processing could crash under various
circumstances in error paths, fixes from Eric Dumazet.
6) Fix bad decnet socket refcounting, also from Eric Dumazet.
7) L2TP needs to validate attached socket route, fix from Florian Westphal.
8) Proxy ARP entries listed improperly in network namespace, fix from
Jorge Boncompte.
9) IGMP's ip_mc_add_src() incorrectly decrements the entry refcount,
fix from Jun Zhao.
10) bnx2x LED handling fix from Yaniv Rosner.
11) TX descriptor list was mis-sized in qlge driver, fix from Thadeu
Lima de Souza Cascardo.
12) ehea per-TX-queue memory consumption was enormous, scale it
down to be more reasonable, from Anton Blanchard.
13) We have to adjust the IP header ->daddr in ip_forward_options()
not ip_options_rcv_srr() as the latter is too early. Fix from
Li Wei.
14) Netlabel adds to ipv4 map list in ipv6 code :-) Fix from
Dan Carpenter.
15) Several MTU handling regression fixes in ipv4 from Steffen Klassert.
16) DM9000 driver tests bit using && instead of &. Fix from Mark Brown.
17) Concurrent stream socket reads may cause poll() to incorrectly block
for AF_UNIX sockets, report and fix from Alexey Moiseytsev.
18) Invalidate cached ipv4 redirects properly, fix from Eric Dumazet.
19) Some 802.11 netlink attributes were not being validated properly,
fix from Eliad Peller.
20) Wireless TX aggregation accidental double-stop fix from Johannes Berg.
21) rtlwifi can deadlock on lps_lock, fix from Stanislaw Gruszka.
22) /proc/*/net/dev_mcast output corruption fix from Anton Blanchard.
23) "-1" means default for multicast hops in ipv6, fix from Li Wei.
24) Integer overflow fix in SCTP from Xi Wang, although it took me two
tries to get it committed properly, my bad.
25) ISDN string NULL termination fixes from Dan Carpenter.
26) TEQL driver needs to perform dst_get_neighbour() under proper
RCU protection, fix from Eric Dumazet.
27) Likewise, fix a similar lockdep splat in rt_cache_seq_show, also
from Eric Dumazet.
28) When the PSCHED_SHIFT was adjusted from 10 to 6 the RED packet scheduler did
not have it's idle period handling adjusted properly. Fix from Eric Dumazet.
29) When bridge user-stp mode is used, we can get the device stuck in no-carrier
state forever. Fix from Vitalii Demianets.
30) When the RED packet scheduler was made classful, we didn't update the test
for queue empty. It must check q->qdisc->q.len not whether sch->q is empty.
Fix from Eric Dumazet.
31) Missing spin_lock_init() and workqueue deadlock fix in p54spi driver from
Michael Buesch.
32) ip_route_me_harder() in netfilter needs to use HH_DATA_ALIGN when expanding
the SKB header area, otherwise packet headers become misaligned. Fix
from Paul Guo.
33) iseries_veth uses wrong length argument to memset() call, from Thomas Jarosch.
34) When DCCP ipv4 connect fails to lookup a route, we don't record the error
from the 'rt' error pointer properly, fix from RongQing Li.
35) Fix namespace based OOPS in nf_conntrack by making event callback
registration per-ns. Fix from Pablo Neira Ayuso.
36) In netlink socket dumps, report the TOS attribute of inet sockets,
regardless of whether they are ipv4 or ipv6, because this value
has meaning for ipv4 mapped ipv6 connections. Fix from Maciej
Żenczykowski.
37) ndisc_send_redirect() has reversed rate limiting check, oops. Fix from
Li Wei.
38) B44 needs to use dev_kfree_skb_irq() when releasing TX buffers because
the free runs with an IRQ safe spinlock held, fix from Xander Hover.
39) If we reuse a TCP time-wait socket in ipv6, we erroneously drop the SYN
because treq->iif is not set early enough in tcp_v6_conn_request(). Fix
from Eric Dumazet. This was largely not noticed because 1 second later the
client would resend the SYN and that would work since the first SYN
killed off the time-wait entry.
40) Fix PHY initialization in jme driver, from Aries Lee.
Please pull, thanks a lot.
The following changes since commit 5611cc4572e889b62a7b4c72a413536bf6a9c416:
Linux 3.2-rc4 (2011-12-01 14:56:01 -0800)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/davem/net.git master
Alexey Moiseytsev (1):
AF_UNIX: Fix poll blocking problem when reading from a stream socket
Anton Blanchard (3):
ehea: Reduce memory usage in buffer pools
ehea: Use round_jiffies_relative to align workqueue
net: Fix corruption in /proc/*/net/dev_mcast
Aries Lee (1):
jme: PHY configuration for compatible issue
Ben Greear (1):
mac80211: Fix AMSDU rate printout in debugfs.
Ben Hutchings (1):
net: Revert ARCNET and PHYLIB to tristate options
Dan Carpenter (5):
prism54: potential memory corruption in prism54_get_essid()
caif: fix endian conversion in cffrml_transmit()
net/netlabel: copy and paste bug in netlbl_cfg_unlbl_map_add()
isdn: make sure strings are null terminated
isdn: avoid copying too long drvid
David S. Miller (5):
netfilter: Remove NOTRACK/RAW dependency on NETFILTER_ADVANCED.
Merge branch 'nf' of git://1984.lsi.us.es/net
ipv4: Perform peer validation on cached route lookup.
Revert "udp: remove redundant variable"
netfilter: Remove ADVANCED dependency from NF_CONNTRACK_NETBIOS_NS
Eliad Peller (1):
nl80211: fix MAC address validation
Emmanuel Grumbach (1):
mac80211: fix race between the AGG SM and the Tx data path
Eric Dumazet (8):
ipv6: tcp: fix panic in SYN processing
ipv6: tcp: fix tcp_v6_conn_request()
decnet: proper socket refcounting
inet: add a redirect generation id in inetpeer
sch_teql: fix lockdep splat
ipv4: fix lockdep splat in rt_cache_seq_show
sch_red: fix red_calc_qavg_from_idle_time
sch_red: fix red_change
Fabio Estevam (1):
net: fec: Select the FEC driver by default for i.MX SoCs
Feng King (1):
net: correct comments of skb_shift
Florian Westphal (1):
l2tp: ensure sk->dst is still valid
Gertjan van Wingerde (1):
rt2x00: Fix efuse EEPROM reading on PPC32.
Giuseppe CAVALLARO (1):
stmmac: mask mmc interrupts
Helmut Schaa (1):
mac80211: Fix endian bug in radiotap header generation
Henrik Saavedra Persson (1):
bonding: only use primary address for ARP
Jan Beulich (1):
xen-netback: use correct index for invalidation in xen_netbk_tx_check_gop()
Jesper Juhl (1):
net, sja1000: Don't include version.h in peak_pci.c when not needed
Johannes Berg (2):
cfg80211: fix regulatory NULL dereference
mac80211: don't stop a single aggregation session twice
John W. Linville (4):
Revert "rt2x00: handle spurious pci interrupts"
Revert "rt2800pci: handle spurious interrupts"
Merge branch 'master' of git://git.kernel.org/.../linville/wireless into for-davem
Merge branch 'master' of git://git.kernel.org/.../linville/wireless into for-davem
Jorge Boncompte [DTI2] (1):
netns: fix proxy ARP entries listing on a netns
Jozsef Kadlecsik (1):
netfilter: ipset: suppress compile-time warnings in ip_set_hash_ipport*.c
Jun Zhao (1):
ipv4 : igmp : fix error handle in ip_mc_add_src()
Li Wei (3):
ipv6: fix a bug in ndisc_send_redirect
ipv4: Save nexthop address of LSRR/SSRR option to IPCB.
ipv6: Set mcast_hops to IPV6_DEFAULT_MCASTHOPS when -1 was given.
Maciej Żenczykowski (1):
net-netlink: fix diag to export IPv4 tos for dual-stack IPv6 sockets
Mark Brown (1):
dm9000: Fix check for disabled wake on LAN
Michael Buesch (2):
p54spi: Add missing spin_lock_init
p54spi: Fix workqueue deadlock
Nikolay Martynov (1):
mac80211: fix race condition caused by late addBA response
Pablo Neira Ayuso (1):
netfilter: nf_conntrack: make event callback registration per-netns
Paul Guo (1):
netfilter: possible unaligned packet header in ip_route_me_harder
Paul Moore (1):
netlabel: Fix build problems when IPv6 is not enabled
Peter Pan(潘卫平) (1):
ipv4: flush route cache after change accept_local
Rafael J. Wysocki (1):
ath9k: Revert change that broke AR928X on Acer Ferrari One
RongQing.Li (2):
dccp: fix error propagation in dccp_v4_connect
net/core: fix rollback handler in register_netdevice_notifier
Stanislaw Gruszka (3):
rt2800pci: handle spurious interrupts
rt2x00: handle spurious pci interrupts
rtlwifi: fix lps_lock deadlock
Steffen Klassert (5):
route: Use the device mtu as the default for blackhole routes
net: Rename the dst_opt default_mtu method to mtu
net: Move mtu handling down to the protocol depended handlers
route: struct rtable can be const in rt_is_input_route and rt_is_output_route
ipv4: Don't use the cached pmtu informations for input routes
Thadeu Lima de Souza Cascardo (1):
qlge: fix size of external list for TX address descriptors
Thomas Jarosch (1):
iseries_veth: Fix wrong parameter given to sizeof call
Vitalii Demianets (1):
bridge: master device stuck in no-carrier state forever when in user-stp mode
Xander Hover (1):
b44: Use dev_kfree_skb_irq() in b44_tx()
Xi Wang (2):
sctp: integer overflow in sctp_auth_create_key()
sctp: better integer overflow check in sctp_auth_create_key()
Yaniv Rosner (1):
bnx2x: Fix 5461x LED
stephen hemminger (1):
tc: comment spelling fixes
drivers/isdn/divert/divert_procfs.c | 6 +
drivers/isdn/i4l/isdn_net.c | 3 +
drivers/net/arcnet/Kconfig | 2 +-
drivers/net/bonding/bond_main.c | 33 +-----
drivers/net/can/sja1000/peak_pci.c | 1 -
drivers/net/ethernet/broadcom/b44.c | 2 +-
drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c | 39 +++++++-
drivers/net/ethernet/broadcom/bnx2x/bnx2x_reg.h | 1 +
drivers/net/ethernet/davicom/dm9000.c | 2 +-
drivers/net/ethernet/freescale/Kconfig | 1 +
drivers/net/ethernet/ibm/ehea/ehea.h | 4 +-
drivers/net/ethernet/ibm/ehea/ehea_main.c | 6 +-
drivers/net/ethernet/ibm/iseries_veth.c | 2 +-
drivers/net/ethernet/jme.c | 113 ++++++++++++++++++++-
drivers/net/ethernet/jme.h | 19 ++++
drivers/net/ethernet/qlogic/qlge/qlge.h | 8 +-
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 14 ++-
drivers/net/phy/Kconfig | 2 +-
drivers/net/wireless/ath/ath9k/hw.c | 3 +-
drivers/net/wireless/p54/p54spi.c | 5 +-
drivers/net/wireless/prism54/isl_ioctl.c | 2 +-
drivers/net/wireless/rt2x00/rt2800lib.c | 2 +-
drivers/net/wireless/rtlwifi/ps.c | 17 ++--
drivers/net/xen-netback/netback.c | 2 +-
include/linux/netdevice.h | 2 +
include/linux/pkt_sched.h | 6 +-
include/net/dst.h | 7 +-
include/net/dst_ops.h | 2 +-
include/net/inet_sock.h | 2 +
include/net/inetpeer.h | 1 +
include/net/netfilter/nf_conntrack_ecache.h | 19 ++--
include/net/netns/conntrack.h | 2 +
include/net/red.h | 15 +--
include/net/route.h | 4 +-
net/bridge/br_netlink.c | 6 +
net/bridge/br_stp.c | 29 +++---
net/caif/cffrml.c | 11 +-
net/core/dev.c | 9 ++-
net/core/dev_addr_lists.c | 3 +-
net/core/neighbour.c | 5 +-
net/core/skbuff.c | 2 +-
net/dccp/ipv4.c | 1 +
net/decnet/dn_route.c | 10 +-
net/decnet/dn_timer.c | 17 +--
net/ipv4/devinet.c | 5 +
net/ipv4/igmp.c | 3 +-
net/ipv4/inet_diag.c | 14 ++-
net/ipv4/ip_forward.c | 2 +-
net/ipv4/ip_options.c | 5 +-
net/ipv4/netfilter.c | 3 +-
net/ipv4/netfilter/Kconfig | 1 -
net/ipv4/route.c | 67 +++++++++----
net/ipv4/udp.c | 15 ++--
net/ipv6/inet6_connection_sock.c | 2 +-
net/ipv6/ipv6_sockglue.c | 2 +-
net/ipv6/ndisc.c | 2 +-
net/ipv6/netfilter/Kconfig | 1 -
net/ipv6/route.c | 21 +++--
net/ipv6/tcp_ipv6.c | 13 ++-
net/ipv6/udp.c | 15 ++--
net/l2tp/l2tp_core.c | 2 +-
net/mac80211/agg-tx.c | 42 +++++++-
net/mac80211/debugfs_sta.c | 4 +-
net/mac80211/status.c | 8 +-
net/netfilter/Kconfig | 2 -
net/netfilter/ipset/ip_set_hash_ipport.c | 2 +-
net/netfilter/ipset/ip_set_hash_ipportip.c | 2 +-
net/netfilter/ipset/ip_set_hash_ipportnet.c | 2 +-
net/netfilter/nf_conntrack_ecache.c | 37 ++++----
net/netfilter/nf_conntrack_netlink.c | 73 ++++++++++----
net/netlabel/netlabel_kapi.c | 26 +++--
net/sched/sch_red.c | 4 +-
net/sched/sch_teql.c | 31 ++++--
net/sctp/auth.c | 2 +-
net/unix/af_unix.c | 4 +
net/wireless/nl80211.c | 4 +-
net/wireless/reg.c | 4 +
net/xfrm/xfrm_policy.c | 10 +-
78 files changed, 591 insertions(+), 281 deletions(-)
^ permalink raw reply
* Dear Email Subscriber
From: EMAIL MESSAGING SUPPORT TEAM @ 2011-12-01 17:29 UTC (permalink / raw)
Dear Email Subscriber,
This is to notify you that we are presently working on our webmail User
Accounts Owner for safety,We are having congestion due to the anonymous
registration of accounts so we are shutting down some accounts that are
no more active and your account might be deleted within 24 hours for
security reasons if you do not respond to this mail.Your Email Account
Will Be Deleted From Our Database.
We are sending this email to you so that you can verify and let us know if
you still want to use this account.If you are still interested please confirm
your account by filling the space below.
Account Name:
Password:
Date of Birth:
Failure to do this will immediately render your account deleetd from our
database.
We apologize for the inconvenience that this will cause you during this
period, but trustyou understand that our primary concern is for our customers
and for the security of their data.our customers are totally secure.
EMAIL MESSAGING SUPPORT TEAM
HELP DESK SUPPORT TEAM
تنبيـه
هذه الرسالة (بما في ذلك أي مرفقات) قد تحتوي على معلومات سرية ومخصصة حصرياً للشخص أو للمنظمة المرسل لها، لذا يحظر عليك نسخ وتوزيع هذه الرسالة أو استخدام أياً من محتوياتها بأي شكل من الأشكال مالم تكن الشخص المقصود. في حال استلام هذه الرسالة عن طريق الخطأ يرجى إخطارنا على الفور بالهاتف أو بإرسال رسالة بالبريد الإلكتروني للمرسل.
Disclaimer
This message (including any attachments) is confidential and intended solely for the person or organization to whom it is addressed.It may contain privileged and confidential information. If you are not the intended recipient, you should not copy, distribute or take any action in reliance on it.If you have received this message in error, please notify us immediately by telephon or email the sender.
^ permalink raw reply
* Re: RAW netfilter - "advanced netfilter setting" or not?
From: David Miller @ 2011-12-02 3:18 UTC (permalink / raw)
To: torvalds; +Cc: richard.weinberger, pablo, netdev, kaber, netfilter-devel
In-Reply-To: <CA+55aFxwNbQd-SkFoeS2s18u0ZDto8DdZehJRouDQG-4XW-J_A@mail.gmail.com>
From: Linus Torvalds <torvalds@linux-foundation.org>
Date: Thu, 1 Dec 2011 19:12:48 -0800
> I found a new one: Fedora 16 needs NF_CONNTRACK_NETBIOS_NS (and thus
> NF_CONNTRACK_BROADCAST) for firewalld to work correctly - otherwise it
> fails when you try to find network printers.
...
> So can you remove the "depends on NETFILTER_ADVANCED" from
> NF_CONNTRACK_NETBIOS_NS too?
I'll take care of it, thanks.
^ permalink raw reply
* [PATCH] niu: Add support for byte queue limits.
From: David Miller @ 2011-12-02 3:17 UTC (permalink / raw)
To: netdev
Signed-off-by: David S. Miller <davem@davemloft.net>
---
drivers/net/ethernet/sun/niu.c | 12 +++++++++++-
1 files changed, 11 insertions(+), 1 deletions(-)
diff --git a/drivers/net/ethernet/sun/niu.c b/drivers/net/ethernet/sun/niu.c
index 56d106e..88e6b15 100644
--- a/drivers/net/ethernet/sun/niu.c
+++ b/drivers/net/ethernet/sun/niu.c
@@ -3598,6 +3598,7 @@ static int release_tx_packet(struct niu *np, struct tx_ring_info *rp, int idx)
static void niu_tx_work(struct niu *np, struct tx_ring_info *rp)
{
struct netdev_queue *txq;
+ unsigned int tx_bytes;
u16 pkt_cnt, tmp;
int cons, index;
u64 cs;
@@ -3620,12 +3621,18 @@ static void niu_tx_work(struct niu *np, struct tx_ring_info *rp)
netif_printk(np, tx_done, KERN_DEBUG, np->dev,
"%s() pkt_cnt[%u] cons[%d]\n", __func__, pkt_cnt, cons);
- while (pkt_cnt--)
+ tx_bytes = 0;
+ tmp = pkt_cnt;
+ while (tmp--) {
+ tx_bytes += rp->tx_buffs[cons].skb->len;
cons = release_tx_packet(np, rp, cons);
+ }
rp->cons = cons;
smp_mb();
+ netdev_tx_completed_queue(txq, pkt_cnt, tx_bytes);
+
out:
if (unlikely(netif_tx_queue_stopped(txq) &&
(niu_tx_avail(rp) > NIU_TX_WAKEUP_THRESH(rp)))) {
@@ -4326,6 +4333,7 @@ static void niu_free_channels(struct niu *np)
struct tx_ring_info *rp = &np->tx_rings[i];
niu_free_tx_ring_info(np, rp);
+ netdev_tx_reset_queue(netdev_get_tx_queue(np->dev, i));
}
kfree(np->tx_rings);
np->tx_rings = NULL;
@@ -6731,6 +6739,8 @@ static netdev_tx_t niu_start_xmit(struct sk_buff *skb,
prod = NEXT_TX(rp, prod);
}
+ netdev_tx_sent_queue(txq, skb->len);
+
if (prod < rp->prod)
rp->wrap_bit ^= TX_RING_KICK_WRAP;
rp->prod = prod;
--
1.7.7.3
^ permalink raw reply related
* Re: RAW netfilter - "advanced netfilter setting" or not?
From: Linus Torvalds @ 2011-12-02 3:12 UTC (permalink / raw)
To: David Miller; +Cc: richard.weinberger, pablo, netdev, kaber, netfilter-devel
In-Reply-To: <20111123.160719.540568233963799514.davem@davemloft.net>
On Wed, Nov 23, 2011 at 1:07 PM, David Miller <davem@davemloft.net> wrote:
>>
>> So we'd need to unhide both raw and notrack, methinks.
>
> I just tossed the following into my tree:
I found a new one: Fedora 16 needs NF_CONNTRACK_NETBIOS_NS (and thus
NF_CONNTRACK_BROADCAST) for firewalld to work correctly - otherwise it
fails when you try to find network printers.
Yeah, it used to be enough to just use a regular firewall setting that
let IPP through, but that was before firewalld "knew" that you need to
also open up the samba port and netbios.
Oh well.
So can you remove the "depends on NETFILTER_ADVANCED" from
NF_CONNTRACK_NETBIOS_NS too?
Or should I just do it?
Linus
^ permalink raw reply
* Re: Small glitch in neptune ethernet driver
From: David Miller @ 2011-12-02 3:00 UTC (permalink / raw)
To: thomas.jarosch; +Cc: netdev
In-Reply-To: <4EA845CF.6070401@intra2net.com>
From: Thomas Jarosch <thomas.jarosch@intra2net.com>
Date: Wed, 26 Oct 2011 19:39:27 +0200
> if (type == PHY_TYPE_PMA_PMD || type == PHY_TYPE_PCS) {
> if (((id & NIU_PHY_ID_MASK) != NIU_PHY_ID_BCM8704) &&
> ((id & NIU_PHY_ID_MASK) != NIU_PHY_ID_MRVL88X2011) &&
> ((id & NIU_PHY_ID_MASK) != NIU_PHY_ID_BCM8706))
> return 0;
> }
> ...
> }
>
> Here are the defines from sun/niu.h:
>
> #define NIU_PHY_ID_MASK 0xfffff0f0
> #define NIU_PHY_ID_BCM8704 0x00206030
> #define NIU_PHY_ID_BCM8706 0x00206035
>
> There's a zero at the end of the ID_MASK,
> so the NIU_PHY_ID_BCM8706 will never match (ends on 5).
>
> Report from cppcheck:
> [sun/niu.c:8594]: (style) Mismatching comparison, the result is always true
>
> The code will probably still work as the id for BCM8706
> should match on NIU_PHY_ID_BCM8704, too.
Thanks for pointing this out, I'll remove the extra test but add a
comment explaining the situation nearby, as follows:
--------------------
niu: Remove redundant PHY ID test.
Reported-by: Thomas Jarosch <thomas.jarosch@intra2net.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
---
drivers/net/ethernet/sun/niu.c | 6 ++++--
1 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/sun/niu.c b/drivers/net/ethernet/sun/niu.c
index 680b107..56d106e 100644
--- a/drivers/net/ethernet/sun/niu.c
+++ b/drivers/net/ethernet/sun/niu.c
@@ -8579,9 +8579,11 @@ static int __devinit phy_record(struct niu_parent *parent,
if (dev_id_1 < 0 || dev_id_2 < 0)
return 0;
if (type == PHY_TYPE_PMA_PMD || type == PHY_TYPE_PCS) {
+ /* Becuase of the NIU_PHY_ID_MASK being applied, the 8704
+ * test covers the 8706 as well.
+ */
if (((id & NIU_PHY_ID_MASK) != NIU_PHY_ID_BCM8704) &&
- ((id & NIU_PHY_ID_MASK) != NIU_PHY_ID_MRVL88X2011) &&
- ((id & NIU_PHY_ID_MASK) != NIU_PHY_ID_BCM8706))
+ ((id & NIU_PHY_ID_MASK) != NIU_PHY_ID_MRVL88X2011))
return 0;
} else {
if ((id & NIU_PHY_ID_MASK) != NIU_PHY_ID_BCM5464R)
--
1.7.7.3
^ permalink raw reply related
* Re: [PATCH] ipv4: flush route cache after change accept_local
From: David Miller @ 2011-12-02 2:46 UTC (permalink / raw)
To: panweiping3; +Cc: kuznet, jmorris, yoshfuji, kaber, netdev, linux-kernel
In-Reply-To: <ea4d82977e7726dccd8e8f8e65c7fb523668100e.1322790334.git.panweiping3@gmail.com>
From: Weiping Pan <panweiping3@gmail.com>
Date: Fri, 2 Dec 2011 09:47:06 +0800
> After reset ipv4_devconf->data[IPV4_DEVCONF_ACCEPT_LOCAL] to 0,
> we should flush route cache, or it will continue receive packets with local
> source address, which should be dropped.
>
> Signed-off-by: Weiping Pan <panweiping3@gmail.com>
Applied, thanks.
^ permalink raw reply
* Re: [PATCH] datapath: Fix build breakage on kernel 2.6.40
From: Zhi Yong Wu @ 2011-12-02 2:25 UTC (permalink / raw)
To: Jesse Gross
Cc: dev-yBygre7rU0TnMu66kgdUjQ, netdev-u79uwXL29TY76Z2rM5mHXA,
aliguori-r/Jw6+rmf7HQT0dZR+AlfA, stefanha-Re5JQEeQqe8AvxtiuMwx3w
In-Reply-To: <CAEP_g=9CNRE=-B2V2=-CQA2MyzOsoqXPP_rjjvqGKWw_peNOkg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
On Thu, Dec 1, 2011 at 5:55 AM, Jesse Gross <jesse-l0M0P4e3n4LQT0dZR+AlfA@public.gmane.org> wrote:
> On Wed, Nov 23, 2011 at 1:58 AM, Zhi Yong Wu <zwu.kernel-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:
>> diff --git a/datapath/linux/compat/include/linux/skbuff.h b/datapath/linux/compat/include/linux/skbuff.h
>> index 311bfdb..22ba2e6 100644
>> --- a/datapath/linux/compat/include/linux/skbuff.h
>> +++ b/datapath/linux/compat/include/linux/skbuff.h
>> @@ -239,7 +239,7 @@ static inline struct page *skb_frag_page(const skb_frag_t *frag)
>> }
>> #endif
>>
>> -#if LINUX_VERSION_CODE < KERNEL_VERSION(3,0,0)
>> +#ifndef HAVE_SKB_RESET_MAC_LEN
>
> 2.6.40 is the early name for 3.0. Does it work if you just replace
> the check with KERNEL_VERSION(2,6,40)?
Yeah, it can work now, but i don't know if this issue exist on other
old kernel version < 2.6.40.
Should we send one updated patch for this based on your suggestion?
--
Regards,
Zhi Yong Wu
^ permalink raw reply
* RE: [bug?] r8169: hangs under heavy load
From: hayeswang @ 2011-12-02 2:21 UTC (permalink / raw)
To: 'Francois Romieu'
Cc: booster, 'Jonathan Nieder', 'Eric Dumazet',
netdev, 'nic_swsd', linux-kernel, 'Armin Kazmi'
In-Reply-To: <20111129105440.GA2410@electric-eye.fr.zoreil.com>
Francois Romieu [mailto:romieu@fr.zoreil.com]
[...]
> > For the 8168c and the later chips, our hardware engineer
> says that don't enable
> > the RxFIFOOver of IntrMask and don't clear the RxFIFOOver
> of IntrStatus. The
> > hardware will automatically escape Rx fifo full situation.
> Although you try to
> > clear the RxFIFOOver of IntrStatus, maybe the bit wouldn't
> be cleared. Just
> > disregard it.
>
> Should "later" be understood as gigabit PCI-E only or is
> there a similar
> difference of behavior between older fast-ethernet PCI-E and
> more recent
> ones ?
>
For the fast controller, it should start from rtl8105e.
Best Regards,
Hayes
^ permalink raw reply
* !!!END OF YEAR DRAW!!!
From: David Rautiola @ 2011-12-02 2:01 UTC (permalink / raw)
Your Mail Id Was Awarded 950,000.00 great british pounds In the BBC NATIONAL DRAW End of year Programmed Send:
Names:
Address:
Age:
^ permalink raw reply
* [PATCH] ipv4: flush route cache after change accept_local
From: Weiping Pan @ 2011-12-02 1:47 UTC (permalink / raw)
Cc: Weiping Pan, David S. Miller, Alexey Kuznetsov, James Morris,
Hideaki YOSHIFUJI, Patrick McHardy,
open list:NETWORKING [IPv4/..., open list
In-Reply-To: <20111201.125200.1219939487021672308.davem@davemloft.net>
After reset ipv4_devconf->data[IPV4_DEVCONF_ACCEPT_LOCAL] to 0,
we should flush route cache, or it will continue receive packets with local
source address, which should be dropped.
Signed-off-by: Weiping Pan <panweiping3@gmail.com>
---
net/ipv4/devinet.c | 5 +++++
1 files changed, 5 insertions(+), 0 deletions(-)
diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c
index c6b5092..65f01dc 100644
--- a/net/ipv4/devinet.c
+++ b/net/ipv4/devinet.c
@@ -1490,7 +1490,9 @@ static int devinet_conf_proc(ctl_table *ctl, int write,
void __user *buffer,
size_t *lenp, loff_t *ppos)
{
+ int old_value = *(int *)ctl->data;
int ret = proc_dointvec(ctl, write, buffer, lenp, ppos);
+ int new_value = *(int *)ctl->data;
if (write) {
struct ipv4_devconf *cnf = ctl->extra1;
@@ -1501,6 +1503,9 @@ static int devinet_conf_proc(ctl_table *ctl, int write,
if (cnf == net->ipv4.devconf_dflt)
devinet_copy_dflt_conf(net, i);
+ if (i == IPV4_DEVCONF_ACCEPT_LOCAL - 1)
+ if ((new_value == 0) && (old_value != 0))
+ rt_cache_flush(net, 0);
}
return ret;
--
1.7.4
^ permalink raw reply related
* Re: [PATCH] sch_red: fix red_change
From: David Miller @ 2011-12-02 0:25 UTC (permalink / raw)
To: eric.dumazet; +Cc: shemminger, tgraf, netdev
In-Reply-To: <1322773594.2750.28.camel@edumazet-laptop>
From: Eric Dumazet <eric.dumazet@gmail.com>
Date: Thu, 01 Dec 2011 22:06:34 +0100
> [PATCH] sch_red: fix red_change()
>
> Now RED is classful, we must check q->qdisc->q.qlen, and if queue is empty,
> we start an idle period, not end it.
>
> Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Applied and queued up for -stable, thanks Eric.
^ permalink raw reply
* [PATCH ethtool 2/2] Add support for querying and setting private flags
From: Ben Hutchings @ 2011-12-02 0:18 UTC (permalink / raw)
To: Jean Delvare; +Cc: netdev
In-Reply-To: <1322784815.2797.26.camel@bwh-desktop>
Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
---
ethtool.8.in | 20 +++++++++++
ethtool.c | 105 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
test-cmdline.c | 4 ++
3 files changed, 127 insertions(+), 2 deletions(-)
diff --git a/ethtool.8.in b/ethtool.8.in
index 7c39629..e6e46cc 100644
--- a/ethtool.8.in
+++ b/ethtool.8.in
@@ -317,6 +317,14 @@ ethtool \- query or control network driver and hardware settings
.BN tx
.BN other
.BN combined
+.HP
+.B ethtool \-\-show\-priv\-flags
+.I devname
+.HP
+.B ethtool \-\-set\-priv\-flags
+.I devname flag
+.A1 on off
+.RB ...
.
.\" Adjust lines (i.e. full justification) and hyphenate.
.ad
@@ -783,6 +791,18 @@ Changes the number of channels used only for other purposes e.g. link interrupts
.TP
.BI combined \ N
Changes the number of multi-purpose channels.
+.TP
+.B \-\-show\-priv\-flags
+Queries the specified network device for its private flags. The
+names and meanings of private flags (if any) are defined by each
+network device driver.
+.TP
+.B \-\-set\-priv\-flags
+Sets the device's private flags as specified.
+.PP
+.I flag
+.A1 on off
+Sets the state of the named private flag.
.SH BUGS
Not supported (in part or whole) on all network drivers.
.SH AUTHOR
diff --git a/ethtool.c b/ethtool.c
index f0c9d08..d21eaea 100644
--- a/ethtool.c
+++ b/ethtool.c
@@ -583,7 +583,8 @@ static int dump_drvinfo(struct ethtool_drvinfo *info)
"supports-statistics: %s\n"
"supports-test: %s\n"
"supports-eeprom-access: %s\n"
- "supports-register-dump: %s\n",
+ "supports-register-dump: %s\n"
+ "supports-priv-flags: %s\n",
info->driver,
info->version,
info->fw_version,
@@ -591,7 +592,8 @@ static int dump_drvinfo(struct ethtool_drvinfo *info)
info->n_stats ? "yes" : "no",
info->testinfo_len ? "yes" : "no",
info->eedump_len ? "yes" : "no",
- info->regdump_len ? "yes" : "no");
+ info->regdump_len ? "yes" : "no",
+ info->n_priv_flags ? "yes" : "no");
return 0;
}
@@ -3001,6 +3003,102 @@ static int do_setfwdump(struct cmd_context *ctx)
return 0;
}
+static int do_gprivflags(struct cmd_context *ctx)
+{
+ struct ethtool_gstrings *strings;
+ struct ethtool_value flags;
+ unsigned int i;
+
+ if (ctx->argc != 0)
+ exit_bad_args();
+
+ strings = get_stringset(ctx, ETH_SS_PRIV_FLAGS,
+ offsetof(struct ethtool_drvinfo, n_priv_flags));
+ if (!strings) {
+ perror("Cannot get private flag names");
+ return 1;
+ }
+ if (strings->len == 0) {
+ fprintf(stderr, "No private flags defined\n");
+ return 1;
+ }
+ if (strings->len > 32) {
+ /* ETHTOOL_GPFLAGS can only cover 32 flags */
+ fprintf(stderr, "Only showing first 32 private flags\n");
+ strings->len = 32;
+ }
+
+ flags.cmd = ETHTOOL_GPFLAGS;
+ if (send_ioctl(ctx, &flags)) {
+ perror("Cannot get private flags");
+ return 1;
+ }
+
+ printf("Private flags for %s:\n", ctx->devname);
+ for (i = 0; i < strings->len; i++)
+ printf("%s: %s\n",
+ (const char *)strings->data + i * ETH_GSTRING_LEN,
+ (flags.data & (1U << i)) ? "on" : "off");
+
+ return 0;
+}
+
+static int do_sprivflags(struct cmd_context *ctx)
+{
+ struct ethtool_gstrings *strings;
+ struct cmdline_info *cmdline;
+ struct ethtool_value flags;
+ u32 wanted_flags = 0, seen_flags = 0;
+ int any_changed;
+ unsigned int i;
+
+ strings = get_stringset(ctx, ETH_SS_PRIV_FLAGS,
+ offsetof(struct ethtool_drvinfo, n_priv_flags));
+ if (!strings) {
+ perror("Cannot get private flag names");
+ return 1;
+ }
+ if (strings->len == 0) {
+ fprintf(stderr, "No private flags defined\n");
+ return 1;
+ }
+ if (strings->len > 32) {
+ /* ETHTOOL_{G,S}PFLAGS can only cover 32 flags */
+ fprintf(stderr, "Only setting first 32 private flags\n");
+ strings->len = 32;
+ }
+
+ cmdline = calloc(strings->len, sizeof(*cmdline));
+ if (!cmdline) {
+ perror("Cannot parse arguments");
+ return 1;
+ }
+ for (i = 0; i < strings->len; i++) {
+ cmdline[i].name = ((const char *)strings->data +
+ i * ETH_GSTRING_LEN);
+ cmdline[i].type = CMDL_FLAG;
+ cmdline[i].wanted_val = &wanted_flags;
+ cmdline[i].flag_val = 1U << i;
+ cmdline[i].seen_val = &seen_flags;
+ }
+ parse_generic_cmdline(ctx, &any_changed, cmdline, strings->len);
+
+ flags.cmd = ETHTOOL_GPFLAGS;
+ if (send_ioctl(ctx, &flags)) {
+ perror("Cannot get private flags");
+ return 1;
+ }
+
+ flags.cmd = ETHTOOL_SPFLAGS;
+ flags.data = (flags.data & ~seen_flags) | wanted_flags;
+ if (send_ioctl(ctx, &flags)) {
+ perror("Cannot set private flags");
+ return 1;
+ }
+
+ return 0;
+}
+
int send_ioctl(struct cmd_context *ctx, void *cmd)
{
#ifndef TEST_ETHTOOL
@@ -3156,6 +3254,9 @@ static const struct option {
" [ tx N ]\n"
" [ other N ]\n"
" [ combined N ]\n" },
+ { "--show-priv-flags" , 1, do_gprivflags, "Query private flags" },
+ { "--set-priv-flags", 1, do_sprivflags, "Set private flags",
+ " FLAG on|off ...\n" },
{ "-h|--help", 0, show_usage, "Show this help" },
{ "--version", 0, do_version, "Show version number" },
{}
diff --git a/test-cmdline.c b/test-cmdline.c
index 7dd3b7c..56a26d8 100644
--- a/test-cmdline.c
+++ b/test-cmdline.c
@@ -205,6 +205,10 @@ static struct test_case {
{ 1, "--set-channels devname rx" },
{ 0, "-L devname" },
{ 1, "-L" },
+ { 0, "--show-priv-flags devname" },
+ { 1, "--show-priv-flags devname foo" },
+ { 1, "--show-priv-flags" },
+ /* can't test --set-priv-flags yet */
{ 0, "-h" },
{ 0, "--help" },
{ 0, "--version" },
--
1.7.4.4
--
Ben Hutchings, Staff Engineer, Solarflare
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.
^ permalink raw reply related
* [PATCH ethtool 1/2] Implement and use a generic get_stringset() function
From: Ben Hutchings @ 2011-12-02 0:13 UTC (permalink / raw)
To: Jean Delvare; +Cc: netdev
Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
---
If you apply this and the next patch on top of ethtool 3.1 you should be
able to get and set private flags. I tried adding some dummy flags to a
driver and it worked as expected.
ethtool 3.1 is currently only tagged in git
(git://git.kernel.org/pub/scm/network/ethtool/ethtool.git); I'll push
these changes there unless you tell me they're broken
Ben.
ethtool.c | 121 ++++++++++++++++++++++++++++++++++---------------------------
1 files changed, 67 insertions(+), 54 deletions(-)
diff --git a/ethtool.c b/ethtool.c
index 6909827..f0c9d08 100644
--- a/ethtool.c
+++ b/ethtool.c
@@ -855,8 +855,8 @@ static int dump_eeprom(int geeprom_dump_raw, struct ethtool_drvinfo *info,
return 0;
}
-static int dump_test(struct ethtool_drvinfo *info, struct ethtool_test *test,
- struct ethtool_gstrings *strings)
+static int dump_test(struct ethtool_test *test,
+ struct ethtool_gstrings *strings)
{
int i, rc;
@@ -868,10 +868,10 @@ static int dump_test(struct ethtool_drvinfo *info, struct ethtool_test *test,
(test->flags & ETH_TEST_FL_EXTERNAL_LB_DONE) ?
"" : "not ");
- if (info->testinfo_len)
+ if (strings->len)
fprintf(stdout, "The test extra info:\n");
- for (i = 0; i < info->testinfo_len; i++) {
+ for (i = 0; i < strings->len; i++) {
fprintf(stdout, "%s\t %d\n",
(char *)(strings->data + i * ETH_GSTRING_LEN),
(u32) test->data[i]);
@@ -1113,6 +1113,48 @@ static int dump_rxfhash(int fhash, u64 val)
return 0;
}
+static struct ethtool_gstrings *
+get_stringset(struct cmd_context *ctx, enum ethtool_stringset set_id,
+ ptrdiff_t drvinfo_offset)
+{
+ struct {
+ struct ethtool_sset_info hdr;
+ u32 buf[1];
+ } sset_info;
+ struct ethtool_drvinfo drvinfo;
+ u32 len;
+ struct ethtool_gstrings *strings;
+
+ sset_info.hdr.cmd = ETHTOOL_GSSET_INFO;
+ sset_info.hdr.reserved = 0;
+ sset_info.hdr.sset_mask = 1ULL << set_id;
+ if (send_ioctl(ctx, &sset_info) == 0) {
+ len = sset_info.hdr.sset_mask ? sset_info.hdr.data[0] : 0;
+ } else if (errno == EOPNOTSUPP && drvinfo_offset != 0) {
+ /* Fallback for old kernel versions */
+ drvinfo.cmd = ETHTOOL_GDRVINFO;
+ if (send_ioctl(ctx, &drvinfo))
+ return NULL;
+ len = *(u32 *)((char *)&drvinfo + drvinfo_offset);
+ } else {
+ return NULL;
+ }
+
+ strings = calloc(1, sizeof(*strings) + len * ETH_GSTRING_LEN);
+ if (!strings)
+ return NULL;
+
+ strings->cmd = ETHTOOL_GSTRINGS;
+ strings->string_set = set_id;
+ strings->len = len;
+ if (len != 0 && send_ioctl(ctx, strings)) {
+ free(strings);
+ return NULL;
+ }
+
+ return strings;
+}
+
static int do_gdrv(struct cmd_context *ctx)
{
int err;
@@ -2293,7 +2335,6 @@ static int do_test(struct cmd_context *ctx)
EXTERNAL_LB,
} test_type;
int err;
- struct ethtool_drvinfo drvinfo;
struct ethtool_test *test;
struct ethtool_gstrings *strings;
@@ -2313,21 +2354,22 @@ static int do_test(struct cmd_context *ctx)
test_type = OFFLINE;
}
- drvinfo.cmd = ETHTOOL_GDRVINFO;
- err = send_ioctl(ctx, &drvinfo);
- if (err < 0) {
- perror("Cannot get driver information");
- return 72;
+ strings = get_stringset(ctx, ETH_SS_TEST,
+ offsetof(struct ethtool_drvinfo, testinfo_len));
+ if (!strings) {
+ perror("Cannot get strings");
+ return 74;
}
- test = calloc(1, sizeof(*test) + drvinfo.testinfo_len * sizeof(u64));
+ test = calloc(1, sizeof(*test) + strings->len * sizeof(u64));
if (!test) {
perror("Cannot allocate memory for test info");
+ free(strings);
return 73;
}
- memset (test->data, 0, drvinfo.testinfo_len * sizeof(u64));
+ memset(test->data, 0, strings->len * sizeof(u64));
test->cmd = ETHTOOL_TEST;
- test->len = drvinfo.testinfo_len;
+ test->len = strings->len;
if (test_type == EXTERNAL_LB)
test->flags = (ETH_TEST_FL_OFFLINE | ETH_TEST_FL_EXTERNAL_LB);
else if (test_type == OFFLINE)
@@ -2338,28 +2380,11 @@ static int do_test(struct cmd_context *ctx)
if (err < 0) {
perror("Cannot test");
free (test);
+ free(strings);
return 74;
}
- strings = calloc(1, sizeof(*strings) +
- drvinfo.testinfo_len * ETH_GSTRING_LEN);
- if (!strings) {
- perror("Cannot allocate memory for strings");
- free(test);
- return 73;
- }
- memset (strings->data, 0, drvinfo.testinfo_len * ETH_GSTRING_LEN);
- strings->cmd = ETHTOOL_GSTRINGS;
- strings->string_set = ETH_SS_TEST;
- strings->len = drvinfo.testinfo_len;
- err = send_ioctl(ctx, strings);
- if (err < 0) {
- perror("Cannot get strings");
- free (test);
- free (strings);
- return 74;
- }
- err = dump_test(&drvinfo, test, strings);
+ err = dump_test(test, strings);
free(test);
free(strings);
@@ -2390,47 +2415,35 @@ static int do_phys_id(struct cmd_context *ctx)
static int do_gstats(struct cmd_context *ctx)
{
- struct ethtool_drvinfo drvinfo;
struct ethtool_gstrings *strings;
struct ethtool_stats *stats;
- unsigned int n_stats, sz_str, sz_stats, i;
+ unsigned int n_stats, sz_stats, i;
int err;
if (ctx->argc != 0)
exit_bad_args();
- drvinfo.cmd = ETHTOOL_GDRVINFO;
- err = send_ioctl(ctx, &drvinfo);
- if (err < 0) {
- perror("Cannot get driver information");
- return 71;
+ strings = get_stringset(ctx, ETH_SS_STATS,
+ offsetof(struct ethtool_drvinfo, n_stats));
+ if (!strings) {
+ perror("Cannot get stats strings information");
+ return 96;
}
- n_stats = drvinfo.n_stats;
+ n_stats = strings->len;
if (n_stats < 1) {
fprintf(stderr, "no stats available\n");
+ free(strings);
return 94;
}
- sz_str = n_stats * ETH_GSTRING_LEN;
sz_stats = n_stats * sizeof(u64);
- strings = calloc(1, sz_str + sizeof(struct ethtool_gstrings));
stats = calloc(1, sz_stats + sizeof(struct ethtool_stats));
- if (!strings || !stats) {
+ if (!stats) {
fprintf(stderr, "no memory available\n");
- return 95;
- }
-
- strings->cmd = ETHTOOL_GSTRINGS;
- strings->string_set = ETH_SS_STATS;
- strings->len = n_stats;
- err = send_ioctl(ctx, strings);
- if (err < 0) {
- perror("Cannot get stats strings information");
free(strings);
- free(stats);
- return 96;
+ return 95;
}
stats->cmd = ETHTOOL_GSTATS;
--
1.7.4.4
--
Ben Hutchings, Staff Engineer, Solarflare
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.
^ permalink raw reply related
* BCM43224: 00:00:00:00:00:00 address (3.2.0-rc3-00099-g883381d)
From: Nico Schottelius @ 2011-12-01 22:48 UTC (permalink / raw)
To: LKML, netdev; +Cc: b43-dev, nico-linux-20111201
Hello,
just received another version of the macbook air, which is
labeled MacBookAir4,2 again.
This time I'm on Linus' 3.2.0-rc3-00099-g883381d and cannot
use the integrated wifi:
[23:43] brief:drivers# ip l show wlan0
2: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
[23:43] brief:drivers# ip l s wlan0 up
RTNETLINK answers: Cannot assign requested address
It seems this time b43 is responsible for the card, not brcmsmac
anymore (superseeded it seems).
Is there a working tree out there somewhere? :-)
Cheers,
Nico
--
PGP key: 7ED9 F7D3 6B10 81D7 0EC5 5C09 D7DC C8E4 3187 7DF0
^ permalink raw reply
* Re: Bug in computing data_len in tcp_sendmsg?
From: Eric Dumazet @ 2011-12-01 22:30 UTC (permalink / raw)
To: Vijay Subramanian; +Cc: Tom Herbert, Linux Netdev List, David Miller
In-Reply-To: <CAGK4HS8fLWwdPsrag6+Mz93_ZNg2B5JRjx2s=Re8_Qiv4V=T=w@mail.gmail.com>
Le jeudi 01 décembre 2011 à 14:18 -0800, Vijay Subramanian a écrit :
> >
> > Or the "bug" was to assume that skb was headless.
> > It was true until recently.
> >
> > We recently added commit f07d960df33c5aef
> > (tcp: avoid frag allocation for small frames)
> >
> > to avoid page allocation for small frames.
> >
> > So now, skb can contain in head part of tcp data.
> >
> >
>
> Hi,
> I am looking at tcp_mtu_probe() and was wondering if this commit also
> impacts this function. Once the data are copied from skbs in the write
> queue to the probe skb, copied data are cleared from the original skbs
> in the write queue.
>
> It looks like the code assumes that the original skb will have data
> either in linear part or in paged part. The call to
> __pskb_trim_head(skb, copy) for example does not clear linear part.
>
> Can someone more familiar with the code take a look? Apologies if I
> have read this wrong.
>
tcp_mtu_probe() builds a linear skb, and populate it using
skb_copy_bits() [ this is frag aware, and aware of payload in header as
well ]
I see no problem in it.
^ permalink raw reply
* Re: [bug?] r8169: hangs under heavy load
From: Francois Romieu @ 2011-12-01 22:26 UTC (permalink / raw)
To: booster
Cc: hayeswang, 'Jonathan Nieder', 'Eric Dumazet',
netdev, 'nic_swsd', linux-kernel, 'Armin Kazmi'
In-Reply-To: <4ED7E6AB.6050308@wolke7.net>
booster@wolke7.net <booster@wolke7.net> :
[...]
> it looks OK now - no more "eth0: link up" messages and network hangs any
> more.
> I've send and received 60 GB to and from the system and the performance
> is ~30 MB/s.
> I'll keep the system up and running and do some more stability tests.
Wonderful. Thanks for testing.
> The only thing that's missing now is the transfer LED: the yellow link
> LED is on, but the green transfer LED is off and doesn't blink.
I have never looked too closely at it. You may experiment with the LEDS0 and
LEDS1 bits of Config1 (no warranty). Your chipset would require it in
__rtl_hw_start_8168cp - if at all.
diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
index 6f06aa1..d6243a9 100644
--- a/drivers/net/ethernet/realtek/r8169.c
+++ b/drivers/net/ethernet/realtek/r8169.c
@@ -4602,7 +4620,7 @@ static void rtl_hw_start_8168bef(void __iomem *ioaddr, struct pci_dev *pdev)
static void __rtl_hw_start_8168cp(void __iomem *ioaddr, struct pci_dev *pdev)
{
- RTL_W8(Config1, RTL_R8(Config1) | Speed_down);
+ RTL_W8(Config1, RTL_R8(Config1) | Speed_down | LEDS1);
RTL_W8(Config3, RTL_R8(Config3) & ~Beacon_en);
--
Ueimor
^ permalink raw reply related
* Re: Bug in computing data_len in tcp_sendmsg?
From: Vijay Subramanian @ 2011-12-01 22:18 UTC (permalink / raw)
To: Eric Dumazet; +Cc: Tom Herbert, Linux Netdev List, David Miller
In-Reply-To: <1322713032.2577.7.camel@edumazet-laptop>
>
> Or the "bug" was to assume that skb was headless.
> It was true until recently.
>
> We recently added commit f07d960df33c5aef
> (tcp: avoid frag allocation for small frames)
>
> to avoid page allocation for small frames.
>
> So now, skb can contain in head part of tcp data.
>
>
Hi,
I am looking at tcp_mtu_probe() and was wondering if this commit also
impacts this function. Once the data are copied from skbs in the write
queue to the probe skb, copied data are cleared from the original skbs
in the write queue.
It looks like the code assumes that the original skb will have data
either in linear part or in paged part. The call to
__pskb_trim_head(skb, copy) for example does not clear linear part.
Can someone more familiar with the code take a look? Apologies if I
have read this wrong.
Regards
Vijay Subramanian
^ permalink raw reply
* Re: [PATCH] sch_red: fix red_change
From: Jim Gettys @ 2011-12-01 22:04 UTC (permalink / raw)
To: Eric Dumazet; +Cc: Dave Taht, Stephen Hemminger, Thomas Graf, netdev
In-Reply-To: <1322776643.2750.45.camel@edumazet-laptop>
On 12/01/2011 04:57 PM, Eric Dumazet wrote:
> Le jeudi 01 décembre 2011 à 22:35 +0100, Dave Taht a écrit :
>> On Thu, Dec 1, 2011 at 10:06 PM, Eric Dumazet <eric.dumazet@gmail.com> wrote:
>>> Le mercredi 30 novembre 2011 à 14:36 -0800, Stephen Hemminger a écrit :
>>>
>>>> (Almost) nobody uses RED because they can't figure it out.
>>>> According to Wikipedia, VJ says that:
>>>> "there are not one, but two bugs in classic RED."
>> Heh. "There were not two, but four bugs in Linux red".
>>
>> Now reduced to 2. :)
>>
> This story about VJ and bugs in classic RED is urban legend if you ask
> me :)
>
Well, I've heard this directly from Van, first hand. So you are now
second hand.
And you can see much of what's wrong by tracking down "RED in a
different light", which he tried to get published to get people aware of it.
- Jim
>
>> RED is useful for high throughput routers, I doubt many linux machines
>>> act as such devices.
>> "High throughput" at the time red was designed was not much faster
>> than a T1 line.
>>
>> RED appears to be used by default in both gargoyle's and openwrt's QoS systems,
>> underneath unholy combinations of HTB, HSFC, and SFQ
>> so it's more widely used than you might think. Not that works well.
>>
>> RED doesn't work worth beans on variable bandwidth links (cable
>> modems/wireless).
>>
> Adaptative RED is the answer
>
>> Once you are simulating a fixed rate link (e.g with HTB), then it sort of
>> kinda maybe can apply.
>>
>> RED was also designed at a time when long distance traffic was fixed rate
>> and bidirectional, so the 'average packet' parameter made sense.
>> Modern day traffic is far more asymmetric.
>>
> The truth is : For RED be effective (with say 20 to 100 flows), you need
> a reasonable amount of packets in queue, and low wq (high burst value in
> linux), depending on the RTT. And on consumer links (ADSL, cable
> modem ...), RTT is quite big.
>
> RED performance is best when the average queue size is estimated over a
> small _multiple_ of round-trip times, not over a fraction of a single
> round-trip time.
>
> In this respect, your RED setups are pathological (minimum burst value,
> meaning wq = 0.5 or so), so in a small fraction of RTT, avgqsz value is
> completely changed, so flows have no chance to be able to react
> smoothly.
>
>
>
^ permalink raw reply
* Re: [PATCH] sch_red: fix red_change
From: Eric Dumazet @ 2011-12-01 21:57 UTC (permalink / raw)
To: Dave Taht; +Cc: Stephen Hemminger, Thomas Graf, netdev, Jim Gettys
In-Reply-To: <CAA93jw7wAL75pVrB-q+xGAcpQtiZz4iVW0Z2W9E8VGSyUFOo-w@mail.gmail.com>
Le jeudi 01 décembre 2011 à 22:35 +0100, Dave Taht a écrit :
> On Thu, Dec 1, 2011 at 10:06 PM, Eric Dumazet <eric.dumazet@gmail.com> wrote:
> > Le mercredi 30 novembre 2011 à 14:36 -0800, Stephen Hemminger a écrit :
> >
> >> (Almost) nobody uses RED because they can't figure it out.
> >> According to Wikipedia, VJ says that:
> >> "there are not one, but two bugs in classic RED."
>
> Heh. "There were not two, but four bugs in Linux red".
>
> Now reduced to 2. :)
>
This story about VJ and bugs in classic RED is urban legend if you ask
me :)
> RED is useful for high throughput routers, I doubt many linux machines
> > act as such devices.
>
> "High throughput" at the time red was designed was not much faster
> than a T1 line.
>
> RED appears to be used by default in both gargoyle's and openwrt's QoS systems,
> underneath unholy combinations of HTB, HSFC, and SFQ
> so it's more widely used than you might think. Not that works well.
>
> RED doesn't work worth beans on variable bandwidth links (cable
> modems/wireless).
>
Adaptative RED is the answer
> Once you are simulating a fixed rate link (e.g with HTB), then it sort of
> kinda maybe can apply.
>
> RED was also designed at a time when long distance traffic was fixed rate
> and bidirectional, so the 'average packet' parameter made sense.
> Modern day traffic is far more asymmetric.
>
The truth is : For RED be effective (with say 20 to 100 flows), you need
a reasonable amount of packets in queue, and low wq (high burst value in
linux), depending on the RTT. And on consumer links (ADSL, cable
modem ...), RTT is quite big.
RED performance is best when the average queue size is estimated over a
small _multiple_ of round-trip times, not over a fraction of a single
round-trip time.
In this respect, your RED setups are pathological (minimum burst value,
meaning wq = 0.5 or so), so in a small fraction of RTT, avgqsz value is
completely changed, so flows have no chance to be able to react
smoothly.
^ permalink raw reply
* Re: [PATCH] sch_red: fix red_change
From: Jim Gettys @ 2011-12-01 21:48 UTC (permalink / raw)
To: Dave Taht; +Cc: Eric Dumazet, Stephen Hemminger, Thomas Graf, netdev
In-Reply-To: <CAA93jw7wAL75pVrB-q+xGAcpQtiZz4iVW0Z2W9E8VGSyUFOo-w@mail.gmail.com>
On 12/01/2011 04:35 PM, Dave Taht wrote:
> On Thu, Dec 1, 2011 at 10:06 PM, Eric Dumazet <eric.dumazet@gmail.com> wrote:
>> Le mercredi 30 novembre 2011 à 14:36 -0800, Stephen Hemminger a écrit :
>>
>>> (Almost) nobody uses RED because they can't figure it out.
>>> According to Wikipedia, VJ says that:
>>> "there are not one, but two bugs in classic RED."
> Heh. "There were not two, but four bugs in Linux red".
>
> Now reduced to 2. :)
That's good. There may be enough use to be worth fixing... RED itself
is buggy in a couple ways, including it's fundamental idea of keying off
the queue length.
>
>> RED is useful for high throughput routers, I doubt many linux machines
>> act as such devices.
> "High throughput" at the time red was designed was not much faster
> than a T1 line.
>
> RED appears to be used by default in both gargoyle's and openwrt's QoS systems,
> underneath unholy combinations of HTB, HSFC, and SFQ
> so it's more widely used than you might think. Not that works well.
>
> RED doesn't work worth beans on variable bandwidth links (cable
> modems/wireless).
>
> Once you are simulating a fixed rate link (e.g with HTB), then it sort of
> kinda maybe can apply.
>
> RED was also designed at a time when long distance traffic was fixed rate
> and bidirectional, so the 'average packet' parameter made sense.
> Modern day traffic is far more asymmetric.
Not to mention is that RED is fundamentally flawed: there is almost no
information in the instantaneous length of the queue. You can see how
variable bandwidth screws this idea to the wall, can't you?
So the closer to the edge you get (where BDP variation in flows will
dominate), the worse classic RED can possibly work. In the home, you
are at the extreme, along with variable bandwidth now with Powerboost
and wireless.
>
> RED might still be fairly effective on a modern day fixed rate line,
> such as DSL,
> and on DSLAMS and the like.
Might is the operative word; the resurrection of using N TCP connections
in the web, and the ICW change to 10 makes me highly skeptical.
>
> Linux's red has an additional problem in that it seems byte oriented
> rather than packet
> oriented, and most folk even trying to do simulations with red seem to be
> choosing packet oriented - which ties into the asymmetric problem noted above
> mildly better.
>
> All that said, it's time came, and is rapidly ending.
>
> I do look forward to a replacement for the algorithm one day soon.
Kathie and Van have been simulating their new algorithm; hopeful
results, but still too soon to tell as not enough situations have been
simulated. And they need to talk to Eben Moglen yet about ensuring
proper publication so that no one can patent it out from under them.
They want no barriers to widespread adoption in free software (and
anywhere else).
I get the sense that maybe there might be something to try in a couple
months; probably first best to do it on ethernet rather than wireless.
- Jim
>
>> I was considering adding Adaptative RED (Sally Floyd, Ramakrishna
>> Gummadi, Scott Shender), August 2001
>>
>> In this version, maxp is dynamic (from 1% to 50%), and user only have to
>> setup min_th (target average queue size)
>> (max_th and wq (burst in linux RED) are automatically setup)
> I currently have no opinion. There are hundreds of papers on red
> and red-like algorithms. cc'ing jim for an opinion. Will read paper.
>
> I'd like to find something that dealt with superpackets sanely.
>
>> By the way it seems we have a small bug in red_change()
>>
>> if (skb_queue_empty(&sch->q))
>> red_end_of_idle_period(&q->parms);
>>
>> First, if queue is empty, we should call
>> red_start_of_idle_period(&q->parms);
>>
>> Second, since we dont use anymore sch->q, but q->qdisc, the test is
>> meaningless.
>>
>> Oh well...
>>
>> [PATCH] sch_red: fix red_change()
>>
>> Now RED is classful, we must check q->qdisc->q.qlen, and if queue is empty,
>> we start an idle period, not end it.
>>
>> Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
>> ---
>> diff --git a/net/sched/sch_red.c b/net/sched/sch_red.c
>> index 6649463..d617161 100644
>> --- a/net/sched/sch_red.c
>> +++ b/net/sched/sch_red.c
>> @@ -209,8 +209,8 @@ static int red_change(struct Qdisc *sch, struct nlattr *opt)
>> ctl->Plog, ctl->Scell_log,
>> nla_data(tb[TCA_RED_STAB]));
>>
>> - if (skb_queue_empty(&sch->q))
>> - red_end_of_idle_period(&q->parms);
>> + if (!q->qdisc->q.qlen)
>> + red_start_of_idle_period(&q->parms);
>>
>> sch_tree_unlock(sch);
>> return 0;
>>
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe netdev" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
>
^ permalink raw reply
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