<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel.git/arch/x86/include/asm/pgalloc.h, branch linux-2.6.28.y</title>
<subtitle>Hosts the 0x221E linux distro kernel.
</subtitle>
<id>https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-2.6.28.y</id>
<link rel='self' href='https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-2.6.28.y'/>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/'/>
<updated>2009-02-02T17:53:19Z</updated>
<entry>
<title>x86, mm: fix pte_free()</title>
<updated>2009-02-02T17:53:19Z</updated>
<author>
<name>Peter Zijlstra</name>
</author>
<published>2009-01-23T16:37:49Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=16fd8be997245025ed5252f12306fff28801335b'/>
<id>urn:sha1:16fd8be997245025ed5252f12306fff28801335b</id>
<content type='text'>
commit 42ef73fe134732b2e91c0326df5fd568da17c4b2 upstream.

On -rt we were seeing spurious bad page states like:

Bad page state in process 'firefox'
page:c1bc2380 flags:0x40000000 mapping:c1bc2390 mapcount:0 count:0
Trying to fix it up, but a reboot is needed
Backtrace:
Pid: 503, comm: firefox Not tainted 2.6.26.8-rt13 #3
[&lt;c043d0f3&gt;] ? printk+0x14/0x19
[&lt;c0272d4e&gt;] bad_page+0x4e/0x79
[&lt;c0273831&gt;] free_hot_cold_page+0x5b/0x1d3
[&lt;c02739f6&gt;] free_hot_page+0xf/0x11
[&lt;c0273a18&gt;] __free_pages+0x20/0x2b
[&lt;c027d170&gt;] __pte_alloc+0x87/0x91
[&lt;c027d25e&gt;] handle_mm_fault+0xe4/0x733
[&lt;c043f680&gt;] ? rt_mutex_down_read_trylock+0x57/0x63
[&lt;c043f680&gt;] ? rt_mutex_down_read_trylock+0x57/0x63
[&lt;c0218875&gt;] do_page_fault+0x36f/0x88a

This is the case where a concurrent fault already installed the PTE and
we get to free the newly allocated one.

This is due to pgtable_page_ctor() doing the spin_lock_init(&amp;page-&gt;ptl)
which is overlaid with the {private, mapping} struct.

union {
    struct {
        unsigned long private;
        struct address_space *mapping;
    };
    spinlock_t ptl;
    struct kmem_cache *slab;
    struct page *first_page;
};

Normally the spinlock is small enough to not stomp on page-&gt;mapping, but
PREEMPT_RT=y has huge 'spin'locks.

But lockdep kernels should also be able to trigger this splat, as the
lock tracking code grows the spinlock to cover page-&gt;mapping.

The obvious fix is calling pgtable_page_dtor() like the regular pte free
path __pte_free_tlb() does.

It seems all architectures except x86 and nm10300 already do this, and
nm10300 doesn't seem to use pgtable_page_ctor(), which suggests it
doesn't do SMP or simply doesnt do MMU at all or something.

Signed-off-by: Peter Zijlstra &lt;a.p.zijlsta@chello.nl&gt;
Signed-off-by: Ingo Molnar &lt;mingo@elte.hu&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;

</content>
</entry>
<entry>
<title>x86: Fix ASM_X86__ header guards</title>
<updated>2008-10-23T05:55:23Z</updated>
<author>
<name>H. Peter Anvin</name>
</author>
<published>2008-10-23T05:26:29Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=1965aae3c98397aad957412413c07e97b1bd4e64'/>
<id>urn:sha1:1965aae3c98397aad957412413c07e97b1bd4e64</id>
<content type='text'>
Change header guards named "ASM_X86__*" to "_ASM_X86_*" since:

a. the double underscore is ugly and pointless.
b. no leading underscore violates namespace constraints.

Signed-off-by: H. Peter Anvin &lt;hpa@zytor.com&gt;
</content>
</entry>
<entry>
<title>x86, um: ... and asm-x86 move</title>
<updated>2008-10-23T05:55:20Z</updated>
<author>
<name>Al Viro</name>
</author>
<published>2008-08-18T01:05:42Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=bb8985586b7a906e116db835c64773b7a7d51663'/>
<id>urn:sha1:bb8985586b7a906e116db835c64773b7a7d51663</id>
<content type='text'>
Signed-off-by: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
Signed-off-by: H. Peter Anvin &lt;hpa@zytor.com&gt;
</content>
</entry>
</feed>
