<feed xmlns='http://www.w3.org/2005/Atom'>
<title>user/sven/linux.git/include/linux/list.h, branch v3.3.5</title>
<subtitle>Linux Kernel
</subtitle>
<id>https://git.stealer.net/cgit.cgi/user/sven/linux.git/atom?h=v3.3.5</id>
<link rel='self' href='https://git.stealer.net/cgit.cgi/user/sven/linux.git/atom?h=v3.3.5'/>
<link rel='alternate' type='text/html' href='https://git.stealer.net/cgit.cgi/user/sven/linux.git/'/>
<updated>2011-05-19T21:15:29Z</updated>
<entry>
<title>list: remove prefetching from regular list iterators</title>
<updated>2011-05-19T21:15:29Z</updated>
<author>
<name>Linus Torvalds</name>
<email>torvalds@linux-foundation.org</email>
</author>
<published>2011-05-19T21:15:29Z</published>
<link rel='alternate' type='text/html' href='https://git.stealer.net/cgit.cgi/user/sven/linux.git/commit/?id=e66eed651fd18a961f11cda62f3b5286c8cc4f9f'/>
<id>urn:sha1:e66eed651fd18a961f11cda62f3b5286c8cc4f9f</id>
<content type='text'>
This is removes the use of software prefetching from the regular list
iterators.  We don't want it.  If you do want to prefetch in some
iterator of yours, go right ahead.  Just don't expect the iterator to do
it, since normally the downsides are bigger than the upsides.

It also replaces &lt;linux/prefetch.h&gt; with &lt;linux/const.h&gt;, because the
use of LIST_POISON ends up needing it.  &lt;linux/poison.h&gt; is sadly not
self-contained, and including prefetch.h just happened to hide that.

Suggested by David Miller (networking has a lot of regular lists that
are often empty or a single entry, and prefetching is not going to do
anything but add useless instructions).

Acked-by: Ingo Molnar &lt;mingo@elte.hu&gt;
Acked-by: David S. Miller &lt;davem@davemloft.net&gt;
Cc: linux-arch@vger.kernel.org
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</content>
</entry>
<entry>
<title>hlist: remove software prefetching in hlist iterators</title>
<updated>2011-05-19T20:50:07Z</updated>
<author>
<name>Linus Torvalds</name>
<email>torvalds@linux-foundation.org</email>
</author>
<published>2011-05-19T20:50:07Z</published>
<link rel='alternate' type='text/html' href='https://git.stealer.net/cgit.cgi/user/sven/linux.git/commit/?id=75d65a425c0163d3ec476ddc12b51087217a070c'/>
<id>urn:sha1:75d65a425c0163d3ec476ddc12b51087217a070c</id>
<content type='text'>
They not only increase the code footprint, they actually make things
slower rather than faster.  On internationally acclaimed benchmarks
("make -j16" on an already fully built kernel source tree) the hlist
prefetching slows down the build by up to 1%.

(Almost all of it comes from hlist_for_each_entry_rcu() as used by
avc_has_perm_noaudit(), which is very hot due to all the pathname
lookups to see if there is anything to do).

The cause seems to be two-fold:

 - on at least some Intel cores, prefetch(NULL) ends up with some
   microarchitectural stall due to the TLB miss that it incurs.  The
   hlist case triggers this very commonly, since the NULL pointer is the
   last entry in the list.

 - the prefetch appears to cause more D$ activity, probably because it
   prefetches hash list entries that are never actually used (because we
   ended the search early due to a hit).

Regardless, the numbers clearly say that the implicit prefetching is
simply a bad idea.  If some _particular_ user of the hlist iterators
wants to prefetch the next list entry, they can do so themselves
explicitly, rather than depend on all list iterators doing so
implicitly.

Acked-by: Ingo Molnar &lt;mingo@elte.hu&gt;
Acked-by: David S. Miller &lt;davem@davemloft.net&gt;
Cc: linux-arch@vger.kernel.org
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</content>
</entry>
<entry>
<title>Expand CONFIG_DEBUG_LIST to several other list operations</title>
<updated>2011-02-18T19:32:28Z</updated>
<author>
<name>Linus Torvalds</name>
<email>torvalds@linux-foundation.org</email>
</author>
<published>2011-02-18T19:32:28Z</published>
<link rel='alternate' type='text/html' href='https://git.stealer.net/cgit.cgi/user/sven/linux.git/commit/?id=3c18d4de86e4a7f93815c081e50e0543fa27200f'/>
<id>urn:sha1:3c18d4de86e4a7f93815c081e50e0543fa27200f</id>
<content type='text'>
When list debugging is enabled, we aim to readably show list corruption
errors, and the basic list_add/list_del operations end up having extra
debugging code in them to do some basic validation of the list entries.

However, "list_del_init()" and "list_move[_tail]()" ended up avoiding
the debug code due to how they were written. This fixes that.

So the _next_ time we have list_move() problems with stale list entries,
we'll hopefully have an easier time finding them..

Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</content>
</entry>
<entry>
<title>list.h: new helper - hlist_add_fake()</title>
<updated>2010-10-26T01:24:15Z</updated>
<author>
<name>Al Viro</name>
<email>viro@zeniv.linux.org.uk</email>
</author>
<published>2010-10-23T19:23:40Z</published>
<link rel='alternate' type='text/html' href='https://git.stealer.net/cgit.cgi/user/sven/linux.git/commit/?id=756acc2d61712a8cafe2aa6ad626c60a185d3645'/>
<id>urn:sha1:756acc2d61712a8cafe2aa6ad626c60a185d3645</id>
<content type='text'>
Make node look as if it was on hlist, with hlist_del()
working correctly.  Usable without any locking...

Convert a couple of places where we want to do that to
inode-&gt;i_hash.

Signed-off-by: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
</content>
</entry>
<entry>
<title>Drop a couple of unnecessary asm/system.h inclusions</title>
<updated>2010-10-07T13:08:53Z</updated>
<author>
<name>David Howells</name>
<email>dhowells@redhat.com</email>
</author>
<published>2010-10-07T13:08:53Z</published>
<link rel='alternate' type='text/html' href='https://git.stealer.net/cgit.cgi/user/sven/linux.git/commit/?id=bcdb714c8856c76383ca455294f0074168705eab'/>
<id>urn:sha1:bcdb714c8856c76383ca455294f0074168705eab</id>
<content type='text'>
Drop inclusions of asm/system.h from linux/hardirq.h and linux/list.h as
they're no longer required and prevent the M68K arch's IRQ flag handling macros
from being made into inlined functions due to circular dependencies.

Signed-off-by: David Howells &lt;dhowells@redhat.com&gt;
Acked-by: Greg Ungerer &lt;gerg@uclinux.org&gt;
Acked-by: Geert Uytterhoeven &lt;geert@linux-m68k.org&gt;
</content>
</entry>
<entry>
<title>Merge branch 'master' into for-linus</title>
<updated>2010-07-06T17:45:24Z</updated>
<author>
<name>Chris Metcalf</name>
<email>cmetcalf@tilera.com</email>
</author>
<published>2010-07-06T17:45:24Z</published>
<link rel='alternate' type='text/html' href='https://git.stealer.net/cgit.cgi/user/sven/linux.git/commit/?id=a2262d8a231e92742651859a10c9a4430a5e899a'/>
<id>urn:sha1:a2262d8a231e92742651859a10c9a4430a5e899a</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Move list types from &lt;linux/list.h&gt; to &lt;linux/types.h&gt;.</title>
<updated>2010-07-06T17:33:54Z</updated>
<author>
<name>Chris Metcalf</name>
<email>cmetcalf@tilera.com</email>
</author>
<published>2010-07-02T17:41:14Z</published>
<link rel='alternate' type='text/html' href='https://git.stealer.net/cgit.cgi/user/sven/linux.git/commit/?id=de5d9bf6541736dc7ad264d2b5cc99bc1b2ad958'/>
<id>urn:sha1:de5d9bf6541736dc7ad264d2b5cc99bc1b2ad958</id>
<content type='text'>
This allows a list_head (or hlist_head, etc.) to be used from places
that used to be impractical, in particular &lt;asm/processor.h&gt;, which
used to cause include file recursion: &lt;linux/list.h&gt; includes
&lt;linux/prefetch.h&gt;, which always includes &lt;asm/processor.h&gt; for the
prefetch macros, as well as &lt;asm/system.h&gt;, which often includes
&lt;asm/processor.h&gt; directly or indirectly.

This avoids a lot of painful workaround hackery on the tile
architecture, where we use a list_head in the thread_struct to chain
together tasks that are activated on a particular hardwall.

Signed-off-by: Chris Metcalf &lt;cmetcalf@tilera.com&gt;
Reviewed-by: Matthew Wilcox &lt;willy@linux.intel.com&gt;
</content>
</entry>
<entry>
<title>fs: fix superblock iteration race</title>
<updated>2010-06-29T17:38:22Z</updated>
<author>
<name>npiggin@suse.de</name>
<email>npiggin@suse.de</email>
</author>
<published>2010-06-24T03:02:14Z</published>
<link rel='alternate' type='text/html' href='https://git.stealer.net/cgit.cgi/user/sven/linux.git/commit/?id=57439f878afafefad8836ebf5c49da2a0a746105'/>
<id>urn:sha1:57439f878afafefad8836ebf5c49da2a0a746105</id>
<content type='text'>
list_for_each_entry_safe is not suitable to protect against concurrent
modification of the list. 6754af6 introduced a race in sb walking.

list_for_each_entry can use the trick of pinning the current entry in
the list before we drop and retake the lock because it subsequently
follows cur-&gt;next. However list_for_each_entry_safe saves n=cur-&gt;next
for following before entering the loop body, so when the lock is
dropped, n may be deleted.

Signed-off-by: Nick Piggin &lt;npiggin@suse.de&gt;
Cc: Christoph Hellwig &lt;hch@infradead.org&gt;
Cc: John Stultz &lt;johnstul@us.ibm.com&gt;
Cc: Frank Mayhar &lt;fmayhar@google.com&gt;
Cc: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</content>
</entry>
<entry>
<title>lib: fix first line of kernel-doc for a few functions</title>
<updated>2010-03-06T19:26:35Z</updated>
<author>
<name>Ben Hutchings</name>
<email>ben@decadent.org.uk</email>
</author>
<published>2010-03-05T21:43:17Z</published>
<link rel='alternate' type='text/html' href='https://git.stealer.net/cgit.cgi/user/sven/linux.git/commit/?id=9a86e2bad0b9fbf3290ae496da6dab9536dd6bf7'/>
<id>urn:sha1:9a86e2bad0b9fbf3290ae496da6dab9536dd6bf7</id>
<content type='text'>
The function name must be followed by a space, hypen, space, and a short
description.

Signed-off-by: Ben Hutchings &lt;ben@decadent.org.uk&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</content>
</entry>
<entry>
<title>list: Introduce list_rotate_left()</title>
<updated>2010-01-16T11:29:32Z</updated>
<author>
<name>Frederic Weisbecker</name>
<email>fweisbec@gmail.com</email>
</author>
<published>2010-01-09T19:53:14Z</published>
<link rel='alternate' type='text/html' href='https://git.stealer.net/cgit.cgi/user/sven/linux.git/commit/?id=5908cdc85eb30f8d07f2cb11d4a62334d7229048'/>
<id>urn:sha1:5908cdc85eb30f8d07f2cb11d4a62334d7229048</id>
<content type='text'>
Bring a new list_rotate_left() helper that rotates a list to
the left. This is useful for codes that need to round roubin
elements which queue priority increases from tail to head.

Signed-off-by: Frederic Weisbecker &lt;fweisbec@gmail.com&gt;
Acked-by: Peter Zijlstra &lt;peterz@infradead.org&gt;
Cc: Paul Mackerras &lt;paulus@samba.org&gt;
Cc: Ingo Molnar &lt;mingo@elte.hu&gt;
Cc: Arnaldo Carvalho de Melo &lt;acme@infradead.org&gt;
</content>
</entry>
</feed>
