From: Yinghai Lu <yinghai@kernel.org>
To: Thomas Gleixner <tglx@linutronix.de>, Ingo Molnar <mingo@elte.hu>,
"H. Peter Anvin" <hpa@zytor.com>, Jacob Shin <jacob.shin@amd.com>,
Tejun Heo <tj@kernel.org>
Cc: Stefano Stabellini <stefano.stabellini@eu.citrix.com>,
linux-kernel@vger.kernel.org, Yinghai Lu <yinghai@kernel.org>,
Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
Jeremy Fitzhardinge <jeremy@goop.org>
Subject: [PATCH 08/10] x86, xen, mm: fix mapping_pagetable_reserve logic
Date: Mon, 8 Oct 2012 21:39:16 -0700 [thread overview]
Message-ID: <1349757558-10856-9-git-send-email-yinghai@kernel.org> (raw)
In-Reply-To: <1349757558-10856-1-git-send-email-yinghai@kernel.org>
Current code has hidden usage for pgt_buf_top, so we can not call that with
different pgt_buf_top continuous.
Acutully its main purpose is set some page back to RW.
Split that to make_range_readwrite that is reflecting the real thing is
done by that function.
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: Jeremy Fitzhardinge <jeremy@goop.org>
---
arch/x86/include/asm/pgtable_types.h | 1 -
arch/x86/include/asm/x86_init.h | 2 +-
arch/x86/kernel/x86_init.c | 3 ++-
arch/x86/mm/init.c | 16 ++++++++--------
arch/x86/xen/mmu.c | 18 +++++++-----------
5 files changed, 18 insertions(+), 22 deletions(-)
diff --git a/arch/x86/include/asm/pgtable_types.h b/arch/x86/include/asm/pgtable_types.h
index db8fec6..b1a7107 100644
--- a/arch/x86/include/asm/pgtable_types.h
+++ b/arch/x86/include/asm/pgtable_types.h
@@ -301,7 +301,6 @@ int phys_mem_access_prot_allowed(struct file *file, unsigned long pfn,
/* Install a pte for a particular vaddr in kernel space. */
void set_pte_vaddr(unsigned long vaddr, pte_t pte);
-extern void native_pagetable_reserve(u64 start, u64 end);
#ifdef CONFIG_X86_32
extern void native_pagetable_init(void);
#else
diff --git a/arch/x86/include/asm/x86_init.h b/arch/x86/include/asm/x86_init.h
index 5769349..357d055 100644
--- a/arch/x86/include/asm/x86_init.h
+++ b/arch/x86/include/asm/x86_init.h
@@ -76,7 +76,7 @@ struct x86_init_oem {
* init_memory_mapping and the commit that added it.
*/
struct x86_init_mapping {
- void (*pagetable_reserve)(u64 start, u64 end);
+ void (*make_range_readwrite)(u64 start, u64 end);
};
/**
diff --git a/arch/x86/kernel/x86_init.c b/arch/x86/kernel/x86_init.c
index 7a3d075..dee4021 100644
--- a/arch/x86/kernel/x86_init.c
+++ b/arch/x86/kernel/x86_init.c
@@ -28,6 +28,7 @@ void __cpuinit x86_init_noop(void) { }
void __init x86_init_uint_noop(unsigned int unused) { }
int __init iommu_init_noop(void) { return 0; }
void iommu_shutdown_noop(void) { }
+static void make_range_readwrite_noop(u64 start, u64 end) { }
/*
* The platform setup functions are preset with the default functions
@@ -63,7 +64,7 @@ struct x86_init_ops x86_init __initdata = {
},
.mapping = {
- .pagetable_reserve = native_pagetable_reserve,
+ .make_range_readwrite = make_range_readwrite_noop,
},
.paging = {
diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index a89f485..6622d35 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -61,10 +61,6 @@ static void __init probe_page_size_mask(void)
__supported_pte_mask |= _PAGE_GLOBAL;
}
}
-void __init native_pagetable_reserve(u64 start, u64 end)
-{
- memblock_reserve(start, end - start);
-}
#ifdef CONFIG_X86_32
#define NR_RANGE_MR 3
@@ -329,9 +325,11 @@ static void __init find_early_table_space(unsigned long start,
base, base + tables - 1, pgt_buf_start << PAGE_SHIFT,
(pgt_buf_end << PAGE_SHIFT) - 1);
- x86_init.mapping.pagetable_reserve(PFN_PHYS(pgt_buf_start),
- PFN_PHYS(pgt_buf_end));
+ memblock_reserve(PFN_PHYS(pgt_buf_start),
+ PFN_PHYS(pgt_buf_end) - PFN_PHYS(pgt_buf_start));
}
+ x86_init.mapping.make_range_readwrite(PFN_PHYS(pgt_buf_end),
+ PFN_PHYS(pgt_buf_top));
pgt_buf_start = base >> PAGE_SHIFT;
pgt_buf_end = pgt_buf_start;
@@ -469,9 +467,11 @@ void __init init_mem_mapping(void)
printk(KERN_DEBUG "kernel direct mapping tables up to %#lx @ [mem %#010lx-%#010lx] final\n",
end - 1, pgt_buf_start << PAGE_SHIFT,
(pgt_buf_end << PAGE_SHIFT) - 1);
- x86_init.mapping.pagetable_reserve(PFN_PHYS(pgt_buf_start),
- PFN_PHYS(pgt_buf_end));
+ memblock_reserve(PFN_PHYS(pgt_buf_start),
+ PFN_PHYS(pgt_buf_end) - PFN_PHYS(pgt_buf_start));
}
+ x86_init.mapping.make_range_readwrite(PFN_PHYS(pgt_buf_end),
+ PFN_PHYS(pgt_buf_top));
/* stop the wrong using */
pgt_buf_top = 0;
diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
index 9c0956c..7607a33 100644
--- a/arch/x86/xen/mmu.c
+++ b/arch/x86/xen/mmu.c
@@ -1183,17 +1183,13 @@ static void __init xen_pagetable_init(void)
xen_post_allocator_init();
}
-static __init void xen_mapping_pagetable_reserve(u64 start, u64 end)
+static __init void xen_make_range_readwrite(u64 start, u64 end)
{
- /* reserve the range used */
- native_pagetable_reserve(start, end);
-
- /* set as RW the rest */
- printk(KERN_DEBUG "xen: setting RW the range %llx - %llx\n", end,
- PFN_PHYS(pgt_buf_top));
- while (end < PFN_PHYS(pgt_buf_top)) {
- make_lowmem_page_readwrite(__va(end));
- end += PAGE_SIZE;
+ printk(KERN_DEBUG "xen: setting RW the range %llx - %llx\n",
+ start, end);
+ while (start < end) {
+ make_lowmem_page_readwrite(__va(start));
+ start += PAGE_SIZE;
}
}
@@ -2060,7 +2056,7 @@ static const struct pv_mmu_ops xen_mmu_ops __initconst = {
void __init xen_init_mmu_ops(void)
{
- x86_init.mapping.pagetable_reserve = xen_mapping_pagetable_reserve;
+ x86_init.mapping.make_range_readwrite = xen_make_range_readwrite;
x86_init.paging.pagetable_init = xen_pagetable_init;
pv_mmu_ops = xen_mmu_ops;
--
1.7.7
next prev parent reply other threads:[~2012-10-09 4:40 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-09 4:39 [PATCH -v2 00/10] x86: Use BRK to pre mapping page table to make xen happy Yinghai Lu
2012-10-09 4:39 ` [PATCH 01/10] x86, mm: align start address to correct big page size Yinghai Lu
2012-10-09 4:39 ` [PATCH 02/10] x86, mm: Use big page size for small memory range Yinghai Lu
2012-10-09 4:39 ` [PATCH 03/10] x86, mm: get early page table from BRK Yinghai Lu
2012-10-09 16:01 ` Konrad Rzeszutek Wilk
2012-10-10 1:03 ` Yinghai Lu
2012-10-10 14:17 ` Konrad Rzeszutek Wilk
2012-10-10 15:49 ` Yinghai Lu
2012-10-11 14:41 ` Konrad Rzeszutek Wilk
2012-10-11 22:55 ` Yinghai Lu
2012-10-11 23:18 ` H. Peter Anvin
2012-10-09 4:39 ` [PATCH 04/10] x86, mm: Don't clear page table if next range is ram Yinghai Lu
2012-10-09 16:04 ` Konrad Rzeszutek Wilk
2012-10-10 1:08 ` Yinghai Lu
2012-10-09 4:39 ` [PATCH 05/10] x86, mm: Remove early_memremap workaround for page table accessing Yinghai Lu
2012-10-09 4:39 ` [PATCH 06/10] x86, mm: only keep initial mapping for ram Yinghai Lu
2012-10-09 4:39 ` [PATCH 07/10] x86, xen, mm: Do not need to check if page table is ioremap Yinghai Lu
2012-10-09 16:13 ` Konrad Rzeszutek Wilk
2012-10-09 4:39 ` Yinghai Lu [this message]
2012-10-09 6:12 ` [PATCH 08/10] x86, xen, mm: fix mapping_pagetable_reserve logic H. Peter Anvin
2012-10-09 6:33 ` Yinghai Lu
2012-10-09 7:22 ` H. Peter Anvin
2012-10-09 12:22 ` Stefano Stabellini
2012-10-09 14:15 ` H. Peter Anvin
2012-10-09 4:39 ` [PATCH 09/10] x86, mm: Hide pgt_buf_* into internal to xen Yinghai Lu
2012-10-09 4:39 ` [PATCH 10/10] x86, mm: Add early_pgt_buf_* Yinghai Lu
2012-10-09 6:07 ` [PATCH -v2 00/10] x86: Use BRK to pre mapping page table to make xen happy H. Peter Anvin
2012-10-09 6:21 ` Yinghai Lu
2012-10-09 6:25 ` H. Peter Anvin
2012-10-09 6:45 ` Yinghai Lu
2012-10-09 12:19 ` Stefano Stabellini
2012-10-09 18:27 ` Yinghai Lu
2012-10-10 0:00 ` Yinghai Lu
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=1349757558-10856-9-git-send-email-yinghai@kernel.org \
--to=yinghai@kernel.org \
--cc=hpa@zytor.com \
--cc=jacob.shin@amd.com \
--cc=jeremy@goop.org \
--cc=konrad.wilk@oracle.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=stefano.stabellini@eu.citrix.com \
--cc=tglx@linutronix.de \
--cc=tj@kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome