<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel.git/arch/mips/mm/highmem.c, branch linux-3.2.y</title>
<subtitle>Hosts the 0x221E linux distro kernel.
</subtitle>
<id>https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-3.2.y</id>
<link rel='self' href='https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-3.2.y'/>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/'/>
<updated>2010-10-28T01:03:05Z</updated>
<entry>
<title>mm: fix race in kunmap_atomic()</title>
<updated>2010-10-28T01:03:05Z</updated>
<author>
<name>Peter Zijlstra</name>
</author>
<published>2010-10-27T22:32:58Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=20273941f2129aa5a432796d98a276ed73d60782'/>
<id>urn:sha1:20273941f2129aa5a432796d98a276ed73d60782</id>
<content type='text'>
Christoph reported a nice splat which illustrated a race in the new stack
based kmap_atomic implementation.

The problem is that we pop our stack slot before we're completely done
resetting its state -- in particular clearing the PTE (sometimes that's
CONFIG_DEBUG_HIGHMEM).  If an interrupt happens before we actually clear
the PTE used for the last slot, that interrupt can reuse the slot in a
dirty state, which triggers a BUG in kmap_atomic().

Fix this by introducing kmap_atomic_idx() which reports the current slot
index without actually releasing it and use that to find the PTE and delay
the _pop() until after we're completely done.

Signed-off-by: Peter Zijlstra &lt;a.p.zijlstra@chello.nl&gt;
Reported-by: Christoph Hellwig &lt;hch@infradead.org&gt;
Acked-by: Rik van Riel &lt;riel@redhat.com&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>mm: stack based kmap_atomic()</title>
<updated>2010-10-26T23:52:08Z</updated>
<author>
<name>Peter Zijlstra</name>
</author>
<published>2010-10-26T21:21:51Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=3e4d3af501cccdc8a8cca41bdbe57d54ad7e7e73'/>
<id>urn:sha1:3e4d3af501cccdc8a8cca41bdbe57d54ad7e7e73</id>
<content type='text'>
Keep the current interface but ignore the KM_type and use a stack based
approach.

The advantage is that we get rid of crappy code like:

	#define __KM_PTE			\
		(in_nmi() ? KM_NMI_PTE : 	\
		 in_irq() ? KM_IRQ_PTE :	\
		 KM_PTE0)

and in general can stop worrying about what context we're in and what kmap
slots might be appropriate for that.

The downside is that FRV kmap_atomic() gets more expensive.

For now we use a CPP trick suggested by Andrew:

  #define kmap_atomic(page, args...) __kmap_atomic(page)

to avoid having to touch all kmap_atomic() users in a single patch.

[ not compiled on:
  - mn10300: the arch doesn't actually build with highmem to begin with ]

[akpm@linux-foundation.org: coding-style fixes]
[akpm@linux-foundation.org: fix up drivers/gpu/drm/i915/intel_overlay.c]
Acked-by: Rik van Riel &lt;riel@redhat.com&gt;
Signed-off-by: Peter Zijlstra &lt;a.p.zijlstra@chello.nl&gt;
Acked-by: Chris Metcalf &lt;cmetcalf@tilera.com&gt;
Cc: David Howells &lt;dhowells@redhat.com&gt;
Cc: Hugh Dickins &lt;hughd@google.com&gt;
Cc: Ingo Molnar &lt;mingo@elte.hu&gt;
Cc: Thomas Gleixner &lt;tglx@linutronix.de&gt;
Cc: "H. Peter Anvin" &lt;hpa@zytor.com&gt;
Cc: Steven Rostedt &lt;rostedt@goodmis.org&gt;
Cc: Russell King &lt;rmk@arm.linux.org.uk&gt;
Cc: Ralf Baechle &lt;ralf@linux-mips.org&gt;
Cc: David Miller &lt;davem@davemloft.net&gt;
Cc: Paul Mackerras &lt;paulus@samba.org&gt;
Cc: Benjamin Herrenschmidt &lt;benh@kernel.crashing.org&gt;
Cc: Dave Airlie &lt;airlied@linux.ie&gt;
Cc: Li Zefan &lt;lizf@cn.fujitsu.com&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>kmap_atomic: make kunmap_atomic() harder to misuse</title>
<updated>2010-08-10T03:44:54Z</updated>
<author>
<name>Cesar Eduardo Barros</name>
</author>
<published>2010-08-10T00:18:32Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=597781f3e51f48ef8e67be772196d9e9673752c4'/>
<id>urn:sha1:597781f3e51f48ef8e67be772196d9e9673752c4</id>
<content type='text'>
kunmap_atomic() is currently at level -4 on Rusty's "Hard To Misuse"
list[1] ("Follow common convention and you'll get it wrong"), except in
some architectures when CONFIG_DEBUG_HIGHMEM is set[2][3].

kunmap() takes a pointer to a struct page; kunmap_atomic(), however, takes
takes a pointer to within the page itself.  This seems to once in a while
trip people up (the convention they are following is the one from
kunmap()).

Make it much harder to misuse, by moving it to level 9 on Rusty's list[4]
("The compiler/linker won't let you get it wrong").  This is done by
refusing to build if the type of its first argument is a pointer to a
struct page.

The real kunmap_atomic() is renamed to kunmap_atomic_notypecheck()
(which is what you would call in case for some strange reason calling it
with a pointer to a struct page is not incorrect in your code).

The previous version of this patch was compile tested on x86-64.

[1] http://ozlabs.org/~rusty/index.cgi/tech/2008-04-01.html
[2] In these cases, it is at level 5, "Do it right or it will always
    break at runtime."
[3] At least mips and powerpc look very similar, and sparc also seems to
    share a common ancestor with both; there seems to be quite some
    degree of copy-and-paste coding here. The include/asm/highmem.h file
    for these three archs mention x86 CPUs at its top.
[4] http://ozlabs.org/~rusty/index.cgi/tech/2008-03-30.html
[5] As an aside, could someone tell me why mn10300 uses unsigned long as
    the first parameter of kunmap_atomic() instead of void *?

Signed-off-by: Cesar Eduardo Barros &lt;cesarb@cesarb.net&gt;
Cc: Russell King &lt;linux@arm.linux.org.uk&gt; (arch/arm)
Cc: Ralf Baechle &lt;ralf@linux-mips.org&gt; (arch/mips)
Cc: David Howells &lt;dhowells@redhat.com&gt; (arch/frv, arch/mn10300)
Cc: Koichi Yasutake &lt;yasutake.koichi@jp.panasonic.com&gt; (arch/mn10300)
Cc: Kyle McMartin &lt;kyle@mcmartin.ca&gt; (arch/parisc)
Cc: Helge Deller &lt;deller@gmx.de&gt; (arch/parisc)
Cc: "James E.J. Bottomley" &lt;jejb@parisc-linux.org&gt; (arch/parisc)
Cc: Benjamin Herrenschmidt &lt;benh@kernel.crashing.org&gt; (arch/powerpc)
Cc: Paul Mackerras &lt;paulus@samba.org&gt; (arch/powerpc)
Cc: "David S. Miller" &lt;davem@davemloft.net&gt; (arch/sparc)
Cc: Thomas Gleixner &lt;tglx@linutronix.de&gt; (arch/x86)
Cc: Ingo Molnar &lt;mingo@redhat.com&gt; (arch/x86)
Cc: "H. Peter Anvin" &lt;hpa@zytor.com&gt; (arch/x86)
Cc: Arnd Bergmann &lt;arnd@arndb.de&gt; (include/asm-generic)
Cc: Rusty Russell &lt;rusty@rustcorp.com.au&gt; ("Hard To Misuse" list)
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>MIPS: Highmem: Fix build error</title>
<updated>2010-02-22T20:42:11Z</updated>
<author>
<name>Yoichi Yuasa</name>
</author>
<published>2010-02-20T12:23:22Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=52ab320ac560af3333191a473e56615fb48fff95'/>
<id>urn:sha1:52ab320ac560af3333191a473e56615fb48fff95</id>
<content type='text'>
arch/mips/mm/highmem.c: In function 'kmap_init':
arch/mips/mm/highmem.c:130: error: 'init_mm' undeclared (first use in this function)
arch/mips/mm/highmem.c:130: error: (Each undeclared identifier is reported only once
arch/mips/mm/highmem.c:130: error: for each function it appears in.)

Signed-off-by: Yoichi Yuasa &lt;yuasa@linux-mips.org&gt;
Cc: linux-mips &lt;linux-mips@linux-mips.org&gt;
Patchwork: http://patchwork.linux-mips.org/patch/980/
Signed-off-by: Ralf Baechle &lt;ralf@linux-mips.org&gt;
</content>
</entry>
<entry>
<title>MIPS: Build fix - include &lt;linux/smp.h&gt; into all smp_processor_id() users.</title>
<updated>2009-06-24T17:34:39Z</updated>
<author>
<name>Ralf Baechle</name>
</author>
<published>2009-06-19T13:05:26Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=631330f5847b3f8a7ea67d689e9f7c56833ccaa6'/>
<id>urn:sha1:631330f5847b3f8a7ea67d689e9f7c56833ccaa6</id>
<content type='text'>
Some of the were relying into smp.h being dragged in by another header
which of course is fragile.  &lt;asm/cpu-info.h&gt; uses smp_processor_id()
only in macros and including smp.h there leads to an include loop, so
don't change cpu-info.h.

Signed-off-by: Ralf Baechle &lt;ralf@linux-mips.org&gt;
</content>
</entry>
<entry>
<title>MIPS: Fix highmem.</title>
<updated>2009-05-14T12:50:29Z</updated>
<author>
<name>Ralf Baechle</name>
</author>
<published>2009-04-25T09:25:34Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=bb86bf28aec6d0a207ae09f38a43e94133d4d6db'/>
<id>urn:sha1:bb86bf28aec6d0a207ae09f38a43e94133d4d6db</id>
<content type='text'>
Commit 351336929ccf222ae38ff0cb7a8dd5fd5c6236a0 (kernel.org) rsp.
b3594a089f1c17ff919f8f78505c3f20e1f6f8ce (linux-mips.org):

&gt; From: Chris Dearman &lt;chris@mips.com&gt;
&gt; Date: Wed, 19 Sep 2007 00:58:24 +0100
&gt; Subject: [PATCH] [MIPS] Allow setting of the cache attribute at run time.
&gt;
&gt; Slightly tacky, but there is a precedent in the sparc archirecture code.

introduces the variable _page_cachable_default, which defaults to zero and.
is used to create the prototype PTE for __kmap_atomic in
arch/mips/mm/init.c:kmap_init before initialization in
arch/mips/mm/c-r4k.c:coherency_setup, so the default value of 0 will be
used as the CCA of kmap atomic pages which on many processors is not a
defined CCA value and may result in writes to kmap_atomic pages getting
corrupted.  Debugged by Jon Fraser (jfraser@broadcom.com).

Signed-off-by: Ralf Baechle &lt;ralf@linux-mips.org&gt;
</content>
</entry>
<entry>
<title>mm: use debug_kmap_atomic</title>
<updated>2009-04-01T15:59:14Z</updated>
<author>
<name>Akinobu Mita</name>
</author>
<published>2009-03-31T22:23:25Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=7ca43e7564679604d86e9ed834e7bbcffd8a4a3f'/>
<id>urn:sha1:7ca43e7564679604d86e9ed834e7bbcffd8a4a3f</id>
<content type='text'>
Use debug_kmap_atomic in kmap_atomic, kmap_atomic_pfn, and
iomap_atomic_prot_pfn.

Signed-off-by: Akinobu Mita &lt;akinobu.mita@gmail.com&gt;
Cc: Thomas Gleixner &lt;tglx@linutronix.de&gt;
Cc: Ingo Molnar &lt;mingo@redhat.com&gt;
Cc: "H. Peter Anvin" &lt;hpa@zytor.com&gt;
Cc: &lt;linux-arch@vger.kernel.org&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>MIPS: Use BUG_ON() where possible.</title>
<updated>2009-03-30T12:49:44Z</updated>
<author>
<name>Ralf Baechle</name>
</author>
<published>2009-03-30T12:49:44Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=b72b7092f8f5f0729cc9f0868997351f21dbc5cd'/>
<id>urn:sha1:b72b7092f8f5f0729cc9f0868997351f21dbc5cd</id>
<content type='text'>
Based on original patch by Stoyan Gaydarov &lt;stoyboyker@gmail.com&gt; which
missed a few places.

Signed-off-by: Ralf Baechle &lt;ralf@linux-mips.org&gt;
</content>
</entry>
<entry>
<title>[MIPS] unexport __kmap_atomic_to_page</title>
<updated>2008-05-12T15:46:51Z</updated>
<author>
<name>Adrian Bunk</name>
</author>
<published>2008-04-21T08:51:37Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=a64063046026729a69ad06c94453f4ddaa562d60'/>
<id>urn:sha1:a64063046026729a69ad06c94453f4ddaa562d60</id>
<content type='text'>
This patch removes the no longer used export of __kmap_atomic_to_page.

Signed-off-by: Adrian Bunk &lt;bunk@kernel.org&gt;
Signed-off-by: Ralf Baechle &lt;ralf@linux-mips.org&gt;
</content>
</entry>
<entry>
<title>[MIPS] Remove LIMITED_DMA support</title>
<updated>2007-05-11T13:28:31Z</updated>
<author>
<name>Franck Bui-Huu</name>
</author>
<published>2007-05-07T16:01:53Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=599ca0fb639ba843da46c3ad1a53590763539750'/>
<id>urn:sha1:599ca0fb639ba843da46c3ad1a53590763539750</id>
<content type='text'>
This code was needed only by Jaguar ATX.

Signed-off-by: Franck Bui-Huu &lt;fbuihuu@gmail.com&gt;
Signed-off-by: Ralf Baechle &lt;ralf@linux-mips.org&gt;
</content>
</entry>
</feed>
