<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel.git/include/net/sock.h, branch linux-2.6.38.y</title>
<subtitle>Hosts the 0x221E linux distro kernel.
</subtitle>
<id>https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-2.6.38.y</id>
<link rel='self' href='https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-2.6.38.y'/>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/'/>
<updated>2011-01-30T09:14:38Z</updated>
<entry>
<title>net: Add compat ioctl support for the ipv4 multicast ioctl SIOCGETSGCNT</title>
<updated>2011-01-30T09:14:38Z</updated>
<author>
<name>Eric W. Biederman</name>
</author>
<published>2011-01-29T16:15:56Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=709b46e8d90badda1898caea50483c12af178e96'/>
<id>urn:sha1:709b46e8d90badda1898caea50483c12af178e96</id>
<content type='text'>
SIOCGETSGCNT is not a unique ioctl value as it it maps tio SIOCPROTOPRIVATE +1,
which unfortunately means the existing infrastructure for compat networking
ioctls is insufficient.  A trivial compact ioctl implementation would conflict
with:

SIOCAX25ADDUID
SIOCAIPXPRISLT
SIOCGETSGCNT_IN6
SIOCGETSGCNT
SIOCRSSCAUSE
SIOCX25SSUBSCRIP
SIOCX25SDTEFACILITIES

To make this work I have updated the compat_ioctl decode path to mirror the
the normal ioctl decode path.  I have added an ipv4 inet_compat_ioctl function
so that I can have ipv4 specific compat ioctls.   I have added a compat_ioctl
function into struct proto so I can break out ioctls by which kind of ip socket
I am using.  I have added a compat_raw_ioctl function because SIOCGETSGCNT only
works on raw sockets.  I have added a ipmr_compat_ioctl that mirrors the normal
ipmr_ioctl.

This was necessary because unfortunately the struct layout for the SIOCGETSGCNT
has unsigned longs in it so changes between 32bit and 64bit kernels.

This change was sufficient to run a 32bit ip multicast routing daemon on a
64bit kernel.

Reported-by: Bill Fenner &lt;fenner@aristanetworks.com&gt;
Signed-off-by: Eric W. Biederman &lt;ebiederm@xmission.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
<entry>
<title>net/sock.h: make some fields private to fix kernel-doc warning(s)</title>
<updated>2011-01-10T00:26:51Z</updated>
<author>
<name>Randy Dunlap</name>
</author>
<published>2011-01-08T17:39:21Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=928c41e7a15d1164bb725f3445575f4651b5b9f0'/>
<id>urn:sha1:928c41e7a15d1164bb725f3445575f4651b5b9f0</id>
<content type='text'>
Fix new kernel-doc notation warning in sock.h by annotating skc_dontcopy_*
as private fields.

Warning(include/net/sock.h:163): No description found for parameter 'skc_dontcopy_end[0]'

Signed-off-by: Randy Dunlap &lt;randy.dunlap@oracle.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
<entry>
<title>Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6</title>
<updated>2010-12-17T20:27:22Z</updated>
<author>
<name>David S. Miller</name>
</author>
<published>2010-12-17T20:27:22Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=b4aa9e05a61b845541fa6f5b1d246976922601f0'/>
<id>urn:sha1:b4aa9e05a61b845541fa6f5b1d246976922601f0</id>
<content type='text'>
Conflicts:
	drivers/net/bnx2x/bnx2x.h
	drivers/net/wireless/iwlwifi/iwl-1000.c
	drivers/net/wireless/iwlwifi/iwl-6000.c
	drivers/net/wireless/iwlwifi/iwl-core.h
	drivers/vhost/vhost.c
</content>
</entry>
<entry>
<title>net: fix nulls list corruptions in sk_prot_alloc</title>
<updated>2010-12-16T22:26:56Z</updated>
<author>
<name>Octavian Purdila</name>
</author>
<published>2010-12-16T22:26:56Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=fcbdf09d9652c8919dcf47072e3ae7dcb4eb98ac'/>
<id>urn:sha1:fcbdf09d9652c8919dcf47072e3ae7dcb4eb98ac</id>
<content type='text'>
Special care is taken inside sk_port_alloc to avoid overwriting
skc_node/skc_nulls_node. We should also avoid overwriting
skc_bind_node/skc_portaddr_node.

The patch fixes the following crash:

 BUG: unable to handle kernel paging request at fffffffffffffff0
 IP: [&lt;ffffffff812ec6dd&gt;] udp4_lib_lookup2+0xad/0x370
 [&lt;ffffffff812ecc22&gt;] __udp4_lib_lookup+0x282/0x360
 [&lt;ffffffff812ed63e&gt;] __udp4_lib_rcv+0x31e/0x700
 [&lt;ffffffff812bba45&gt;] ? ip_local_deliver_finish+0x65/0x190
 [&lt;ffffffff812bbbf8&gt;] ? ip_local_deliver+0x88/0xa0
 [&lt;ffffffff812eda35&gt;] udp_rcv+0x15/0x20
 [&lt;ffffffff812bba45&gt;] ip_local_deliver_finish+0x65/0x190
 [&lt;ffffffff812bbbf8&gt;] ip_local_deliver+0x88/0xa0
 [&lt;ffffffff812bb2cd&gt;] ip_rcv_finish+0x32d/0x6f0
 [&lt;ffffffff8128c14c&gt;] ? netif_receive_skb+0x99c/0x11c0
 [&lt;ffffffff812bb94b&gt;] ip_rcv+0x2bb/0x350
 [&lt;ffffffff8128c14c&gt;] netif_receive_skb+0x99c/0x11c0

Signed-off-by: Leonard Crestez &lt;lcrestez@ixiacom.com&gt;
Signed-off-by: Octavian Purdila &lt;opurdila@ixiacom.com&gt;
Acked-by: Eric Dumazet &lt;eric.dumazet@gmail.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
<entry>
<title>net: optimize INET input path further</title>
<updated>2010-12-10T04:05:58Z</updated>
<author>
<name>Eric Dumazet</name>
</author>
<published>2010-11-30T19:04:07Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=68835aba4d9b74e2f94106d13b6a4bddc447c4c8'/>
<id>urn:sha1:68835aba4d9b74e2f94106d13b6a4bddc447c4c8</id>
<content type='text'>
Followup of commit b178bb3dfc30 (net: reorder struct sock fields)

Optimize INET input path a bit further, by :

1) moving sk_refcnt close to sk_lock.

This reduces number of dirtied cache lines by one on 64bit arches (and
64 bytes cache line size).

2) moving inet_daddr &amp; inet_rcv_saddr at the beginning of sk

(same cache line than hash / family / bound_dev_if / nulls_node)

This reduces number of accessed cache lines in lookups by one, and dont
increase size of inet and timewait socks.
inet and tw sockets now share same place-holder for these fields.

Before patch :

offsetof(struct sock, sk_refcnt) = 0x10
offsetof(struct sock, sk_lock) = 0x40
offsetof(struct sock, sk_receive_queue) = 0x60
offsetof(struct inet_sock, inet_daddr) = 0x270
offsetof(struct inet_sock, inet_rcv_saddr) = 0x274

After patch :

offsetof(struct sock, sk_refcnt) = 0x44
offsetof(struct sock, sk_lock) = 0x48
offsetof(struct sock, sk_receive_queue) = 0x68
offsetof(struct inet_sock, inet_daddr) = 0x0
offsetof(struct inet_sock, inet_rcv_saddr) = 0x4

compute_score() (udp or tcp) now use a single cache line per ignored
item, instead of two.

Signed-off-by: Eric Dumazet &lt;eric.dumazet@gmail.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
<entry>
<title>Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6</title>
<updated>2010-12-08T21:47:38Z</updated>
<author>
<name>David S. Miller</name>
</author>
<published>2010-12-08T21:15:38Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=fe6c791570efe717946ea7b7dd50aec96b70d551'/>
<id>urn:sha1:fe6c791570efe717946ea7b7dd50aec96b70d551</id>
<content type='text'>
Conflicts:
	drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
	net/llc/af_llc.c
</content>
</entry>
<entry>
<title>filter: fix sk_filter rcu handling</title>
<updated>2010-12-06T17:29:43Z</updated>
<author>
<name>Eric Dumazet</name>
</author>
<published>2010-12-06T17:29:43Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=46bcf14f44d8f31ecfdc8b6708ec15a3b33316d9'/>
<id>urn:sha1:46bcf14f44d8f31ecfdc8b6708ec15a3b33316d9</id>
<content type='text'>
Pavel Emelyanov tried to fix a race between sk_filter_(de|at)tach and
sk_clone() in commit 47e958eac280c263397

Problem is we can have several clones sharing a common sk_filter, and
these clones might want to sk_filter_attach() their own filters at the
same time, and can overwrite old_filter-&gt;rcu, corrupting RCU queues.

We can not use filter-&gt;rcu without being sure no other thread could do
the same thing.

Switch code to a more conventional ref-counting technique : Do the
atomic decrement immediately and queue one rcu call back when last
reference is released.

Signed-off-by: Eric Dumazet &lt;eric.dumazet@gmail.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
<entry>
<title>net: kill unused macros from head file</title>
<updated>2010-12-02T21:27:33Z</updated>
<author>
<name>Shan Wei</name>
</author>
<published>2010-12-01T18:05:17Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=dca9b2404a6d6579828da2425c051462701efd3f'/>
<id>urn:sha1:dca9b2404a6d6579828da2425c051462701efd3f</id>
<content type='text'>
These macros have been defined for several years since v2.6.12-rc2（tracing by git）,
but never be used. So remove them.

Signed-off-by: Shan Wei &lt;shanwei@cn.fujitsu.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
<entry>
<title>net: reorder struct sock fields</title>
<updated>2010-11-16T19:17:43Z</updated>
<author>
<name>Eric Dumazet</name>
</author>
<published>2010-11-16T05:56:04Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=b178bb3dfc30d9555bdd2401e95af98e23e83e10'/>
<id>urn:sha1:b178bb3dfc30d9555bdd2401e95af98e23e83e10</id>
<content type='text'>
Right now, fields in struct sock are not optimally ordered, because each
path (RX softirq, TX completion, RX user,  TX user) has to touch fields
that are contained in many different cache lines.

The really critical thing is to shrink number of cache lines that are
used at RX softirq time : CPU handling softirqs for a device can receive
many frames per second for many sockets. If load is too big, we can drop
frames at NIC level. RPS or multiqueue cards can help, but better reduce
latency if possible.

This patch starts with UDP protocol, then additional patches will try to
reduce latencies of other ones as well.

At RX softirq time, fields of interest for UDP protocol are :
(not counting ones in inet struct for the lookup)

Read/Written:
sk_refcnt   (atomic increment/decrement)
sk_rmem_alloc &amp; sk_backlog.len (to check if there is room in queues)
sk_receive_queue
sk_backlog (if socket locked by user program)
sk_rxhash
sk_forward_alloc
sk_drops

Read only:
sk_rcvbuf (sk_rcvqueues_full())
sk_filter
sk_wq
sk_policy[0]
sk_flags

Additional notes :

- sk_backlog has one hole on 64bit arches. We can fill it to save 8
bytes.
- sk_backlog is used only if RX sofirq handler finds the socket while
locked by user.
- sk_rxhash is written only once per flow.
- sk_drops is written only if queues are full

Final layout :

[1] One section grouping all read/write fields, but placing rxhash and
sk_backlog at the end of this section.

[2] One section grouping all read fields in RX handler
   (sk_filter, sk_rcv_buf, sk_wq)

[3] Section used by other paths

I'll post a patch on its own to put sk_refcnt at the end of struct
sock_common so that it shares same cache line than section [1]

New offsets on 64bit arch :

sizeof(struct sock)=0x268
offsetof(struct sock, sk_refcnt)  =0x10
offsetof(struct sock, sk_lock)    =0x48
offsetof(struct sock, sk_receive_queue)=0x68
offsetof(struct sock, sk_backlog)=0x80
offsetof(struct sock, sk_rmem_alloc)=0x80
offsetof(struct sock, sk_forward_alloc)=0x98
offsetof(struct sock, sk_rxhash)=0x9c
offsetof(struct sock, sk_rcvbuf)=0xa4
offsetof(struct sock, sk_drops) =0xa0
offsetof(struct sock, sk_filter)=0xa8
offsetof(struct sock, sk_wq)=0xb0
offsetof(struct sock, sk_policy)=0xd0
offsetof(struct sock, sk_flags) =0xe0

Instead of :

sizeof(struct sock)=0x270
offsetof(struct sock, sk_refcnt)  =0x10
offsetof(struct sock, sk_lock)    =0x50
offsetof(struct sock, sk_receive_queue)=0xc0
offsetof(struct sock, sk_backlog)=0x70
offsetof(struct sock, sk_rmem_alloc)=0xac
offsetof(struct sock, sk_forward_alloc)=0x10c
offsetof(struct sock, sk_rxhash)=0x128
offsetof(struct sock, sk_rcvbuf)=0x4c
offsetof(struct sock, sk_drops) =0x16c
offsetof(struct sock, sk_filter)=0x198
offsetof(struct sock, sk_wq)=0x88
offsetof(struct sock, sk_policy)=0x98
offsetof(struct sock, sk_flags) =0x130

Signed-off-by: Eric Dumazet &lt;eric.dumazet@gmail.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
<entry>
<title>udp: use atomic_inc_not_zero_hint</title>
<updated>2010-11-16T19:17:43Z</updated>
<author>
<name>Eric Dumazet</name>
</author>
<published>2010-11-15T19:58:26Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=c31504dc0d1dc853dcee509d9999169a9097a717'/>
<id>urn:sha1:c31504dc0d1dc853dcee509d9999169a9097a717</id>
<content type='text'>
UDP sockets refcount is usually 2, unless an incoming frame is going to
be queued in receive or backlog queue.

Using atomic_inc_not_zero_hint() permits to reduce latency, because
processor issues less memory transactions.

Signed-off-by: Eric Dumazet &lt;eric.dumazet@gmail.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
</feed>
