From: Dave Hansen <dave@linux.vnet.ibm.com>
To: linux-kernel@vger.kernel.org
Cc: bp@alien8.de, hpa@linux.intel.com,
penguin-kernel@i-love.sakura.ne.jp,
Dave Hansen <dave@linux.vnet.ibm.com>
Subject: [PATCH] do not try to sync identity map for non-mapped pages
Date: Wed, 06 Mar 2013 15:10:09 -0800 [thread overview]
Message-ID: <20130306231009.D782087E@kernel.stglabs.ibm.com> (raw)
kernel_map_sync_memtype() is called from a variety of contexts. The
pat.c code that calls it seems to ensure that it is not called for
non-ram areas by checking via pat_pagerange_is_ram(). It is important
that it only be called on the actual identity map because there *IS*
no map to sync for highmem pages, or for memory holes.
The ioremap.c uses are not as careful as those from pat.c, and call
kernel_map_sync_memtype() on PCI space which is in the middle of the
kernel identity map _range_, but is not actually mapped.
This patch adds a check to kernel_map_sync_memtype() which probably
duplicates some of the checks already in pat.c. But, it is necessary
for the ioremap.c uses and shouldn't hurt other callers.
I have reproduced this bug and this patch fixes it for me
https://lkml.org/lkml/2013/2/5/396
Signed-off-by: Dave Hansen <dave@linux.vnet.ibm.com>
---
linux-2.6.git-dave/arch/x86/mm/pat.c | 7 +++++++
1 file changed, 7 insertions(+)
diff -puN arch/x86/mm/pat.c~dont-flush-map-for-non-ram-pages arch/x86/mm/pat.c
--- linux-2.6.git/arch/x86/mm/pat.c~dont-flush-map-for-non-ram-pages 2013-03-06 15:03:56.403628100 -0800
+++ linux-2.6.git-dave/arch/x86/mm/pat.c 2013-03-06 15:03:56.419628258 -0800
@@ -563,6 +563,13 @@ int kernel_map_sync_memtype(u64 base, un
if (base > __pa(high_memory-1))
return 0;
+ /*
+ * some areas in the middle of the kernel identity range
+ * are not mapped, like the PCI space.
+ */
+ if (!page_is_ram(base >> PAGE_SHIFT))
+ return 0;
+
id_sz = (__pa(high_memory-1) <= base + size) ?
__pa(high_memory) - base :
size;
diff -puN arch/x86/mm/ioremap.c~dont-flush-map-for-non-ram-pages arch/x86/mm/ioremap.c
_
next reply other threads:[~2013-03-06 23:10 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-03-06 23:10 Dave Hansen [this message]
2013-03-07 10:19 ` [PATCH] do not try to sync identity map for non-mapped pages Tetsuo Handa
-- strict thread matches above, loose matches on Subject: below --
2013-03-07 16:31 Dave Hansen
2013-03-07 22:05 ` Tetsuo Handa
2013-03-07 22:13 ` H. Peter Anvin
2013-04-07 13:33 ` Borislav Petkov
2013-04-07 16:34 ` H. Peter Anvin
2013-04-07 17:25 ` Borislav Petkov
2013-04-08 20:33 ` Dave Hansen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20130306231009.D782087E@kernel.stglabs.ibm.com \
--to=dave@linux.vnet.ibm.com \
--cc=bp@alien8.de \
--cc=hpa@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=penguin-kernel@i-love.sakura.ne.jp \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.