All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yinghai Lu <yinghai@kernel.org>
To: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Cc: 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>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 6/7] x86, mm: setup page table from top-down
Date: Wed, 10 Oct 2012 10:38:36 -0700	[thread overview]
Message-ID: <CAE9FiQVSMP2TpTPxEB62T-uELY-W67m6LX-qTJ7yYSEE-cOZbA@mail.gmail.com> (raw)
In-Reply-To: <alpine.DEB.2.02.1210101821540.2689@kaball.uk.xensource.com>

[-- Attachment #1: Type: text/plain, Size: 704 bytes --]

On Wed, Oct 10, 2012 at 10:26 AM, Stefano Stabellini
<stefano.stabellini@eu.citrix.com> wrote:
> On Wed, 10 Oct 2012, Yinghai Lu wrote:
>
> It doesn't matter whether they come from BRK or other memory: Xen
> assumes that all the pagetable pages come from
> pgt_buf_start-pgt_buf_top, so if you are going to use another range you
> need to tell Xen about it.
>
> Alternatively, you can follow Peter's suggestion and replace the current
> hooks with a new one with a more precise and well defined semantic.
> Something along the lines of "this pagetable page is about to be hooked
> into the live pagetable". Xen would use the hook to mark it RO.

attached patch on top of this patch will fix the problem?

[-- Attachment #2: fix_xen.patch --]
[-- Type: application/octet-stream, Size: 3358 bytes --]

---
 arch/x86/include/asm/x86_init.h |    2 +-
 arch/x86/kernel/x86_init.c      |    3 ++-
 arch/x86/mm/init_32.c           |    1 +
 arch/x86/mm/init_64.c           |    1 +
 arch/x86/xen/mmu.c              |   15 +++------------
 5 files changed, 8 insertions(+), 14 deletions(-)

Index: linux-2.6/arch/x86/include/asm/x86_init.h
===================================================================
--- linux-2.6.orig/arch/x86/include/asm/x86_init.h
+++ linux-2.6/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 (*mark_page_ro)(u64 addr);
 };
 
 /**
Index: linux-2.6/arch/x86/kernel/x86_init.c
===================================================================
--- linux-2.6.orig/arch/x86/kernel/x86_init.c
+++ linux-2.6/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 mark_page_ro_noop(u64 addr) { }
 
 /*
  * 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,
+		.mark_page_ro			= mark_page_ro_noop;
 	},
 
 	.paging = {
Index: linux-2.6/arch/x86/xen/mmu.c
===================================================================
--- linux-2.6.orig/arch/x86/xen/mmu.c
+++ linux-2.6/arch/x86/xen/mmu.c
@@ -1177,18 +1177,9 @@ static void xen_exit_mmap(struct mm_stru
 
 static void xen_post_allocator_init(void);
 
-static __init void xen_mapping_pagetable_reserve(u64 start, u64 end)
+static __init void xen_mapping_mark_page_ro(u64 addr)
 {
-	/* 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;
-	}
+	make_lowmem_page_readonly(__va(addr));
 }
 
 #ifdef CONFIG_X86_64
@@ -2177,7 +2168,7 @@ static const struct pv_mmu_ops xen_mmu_o
 
 void __init xen_init_mmu_ops(void)
 {
-	x86_init.mapping.pagetable_reserve = xen_mapping_pagetable_reserve;
+	x86_init.mapping.mark_page_ro = xen_mapping_mark_page_ro;
 	x86_init.paging.pagetable_init = xen_pagetable_init;
 	pv_mmu_ops = xen_mmu_ops;
 
Index: linux-2.6/arch/x86/mm/init_32.c
===================================================================
--- linux-2.6.orig/arch/x86/mm/init_32.c
+++ linux-2.6/arch/x86/mm/init_32.c
@@ -78,6 +78,7 @@ static __init void *alloc_low_page(void)
 	} else
 		pfn = pgt_buf_end++;
 
+	x86_init.mapping.mark_page_ro(pfn << PAGE_SHIFT);
 	adr = __va(pfn * PAGE_SIZE);
 	clear_page(adr);
 	return adr;
Index: linux-2.6/arch/x86/mm/init_64.c
===================================================================
--- linux-2.6.orig/arch/x86/mm/init_64.c
+++ linux-2.6/arch/x86/mm/init_64.c
@@ -340,6 +340,7 @@ static __ref void *alloc_low_page(unsign
 	} else
 		pfn = pgt_buf_end++;
 
+	x86_init.mapping.mark_page_ro(pfn << PAGE_SHIFT);
 	adr = early_memremap(pfn * PAGE_SIZE, PAGE_SIZE);
 	clear_page(adr);
 	*phys  = pfn * PAGE_SIZE;

  reply	other threads:[~2012-10-10 17:38 UTC|newest]

Thread overview: 115+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-10-09 23:58 [PATCH -v3 0/7] x86: Use BRK to pre mapping page table to make xen happy Yinghai Lu
2012-10-09 23:58 ` [PATCH 1/7] x86, mm: align start address to correct big page size Yinghai Lu
2012-10-09 23:58 ` [PATCH 2/7] x86, mm: Use big page size for small memory range Yinghai Lu
2012-10-09 23:58 ` [PATCH 3/7] x86, mm: Don't clear page table if next range is ram Yinghai Lu
2012-10-09 23:58 ` [PATCH 4/7] x86, mm: only keep initial mapping for ram Yinghai Lu
2012-10-10 13:48   ` Konrad Rzeszutek Wilk
2012-10-10 14:59     ` Yinghai Lu
2012-10-09 23:58 ` [PATCH 5/7] x86, mm: Break down init_all_memory_mapping Yinghai Lu
2012-10-10 13:55   ` Konrad Rzeszutek Wilk
2012-10-10 15:42     ` Yinghai Lu
2012-10-09 23:58 ` [PATCH 6/7] x86, mm: setup page table from top-down Yinghai Lu
2012-10-10  1:53   ` Yinghai Lu
2012-10-10 16:38   ` Stefano Stabellini
2012-10-10 17:07     ` Yinghai Lu
2012-10-10 17:26       ` Stefano Stabellini
2012-10-10 17:38         ` Yinghai Lu [this message]
2012-11-16 17:14           ` H. Peter Anvin
2012-11-16 17:16             ` Yinghai Lu
2012-10-09 23:58 ` [PATCH 7/7] x86, mm: Remove early_memremap workaround for page table accessing Yinghai Lu
2012-10-10 13:47 ` [PATCH -v3 0/7] x86: Use BRK to pre mapping page table to make xen happy Konrad Rzeszutek Wilk
2012-10-10 14:55   ` Yinghai Lu
2012-10-10 16:40 ` Stefano Stabellini
2012-10-11  6:13   ` Yinghai Lu
2012-10-11 23:04     ` Yinghai Lu
2012-10-18 16:17     ` Stefano Stabellini
2012-10-18 16:26       ` Jacob Shin
2012-10-18 16:57         ` Stefano Stabellini
2012-10-18 20:36           ` Yinghai Lu
2012-10-18 20:40         ` Yinghai Lu
2012-10-18 21:57           ` Jacob Shin
2012-10-18 20:43       ` Yinghai Lu
2012-10-30 13:44     ` Konrad Rzeszutek Wilk
2012-10-30 14:47       ` Yinghai Lu
2012-11-03 21:35         ` Yinghai Lu
2012-11-03 21:37           ` H. Peter Anvin
2012-11-05 20:25             ` Yinghai Lu
2012-11-05 20:27               ` [PATCH 39/42] x86, mm: kill numa_free_all_bootmem() Yinghai Lu
2012-11-05 20:27                 ` [PATCH 40/42] x86, mm: kill numa_64.h Yinghai Lu
2012-11-05 20:27                 ` [PATCH 41/42] sparc, mm: Remove calling of free_all_bootmem_node() Yinghai Lu
2012-11-05 20:27                   ` Yinghai Lu
2012-11-06 17:44                   ` David Miller
2012-11-06 17:44                     ` David Miller
2012-11-05 20:27                 ` [PATCH 42/42] mm: Kill NO_BOOTMEM version free_all_bootmem_node() Yinghai Lu
2012-11-07 16:11               ` [PATCH -v3 0/7] x86: Use BRK to pre mapping page table to make xen happy Konrad Rzeszutek Wilk
2012-11-08  1:40                 ` Konrad Rzeszutek Wilk
2012-11-08  4:06                   ` Yinghai Lu
2012-11-09 20:31                     ` Yinghai Lu
2012-11-12 19:30           ` Konrad Rzeszutek Wilk
2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
2012-11-12 21:17               ` [PATCH 01/46] x86, mm: Add global page_size_mask and probe one time only Yinghai Lu
2012-11-12 21:17               ` [PATCH 02/46] x86, mm: Split out split_mem_range from init_memory_mapping Yinghai Lu
2012-11-13  5:51                 ` Yasuaki Ishimatsu
2012-11-13  6:20                   ` Yinghai Lu
2012-11-13  7:03                     ` snakky.zhang
2012-11-13 18:34                       ` Yinghai Lu
2012-11-12 21:17               ` [PATCH 03/46] x86, mm: Move down find_early_table_space() Yinghai Lu
2012-11-12 21:18               ` [PATCH 04/46] x86, mm: Move init_memory_mapping calling out of setup.c Yinghai Lu
2012-11-12 21:18               ` [PATCH 05/46] x86, mm: Revert back good_end setting for 64bit Yinghai Lu
2012-11-12 21:18               ` [PATCH 06/46] x86, mm: Change find_early_table_space() paramters Yinghai Lu
2012-11-12 21:18               ` [PATCH 07/46] x86, mm: Find early page table buffer together Yinghai Lu
2012-11-12 21:18               ` [PATCH 08/46] x86, mm: Separate out calculate_table_space_size() Yinghai Lu
2012-11-12 21:18               ` [PATCH 09/46] x86, mm: Set memblock initial limit to 1M Yinghai Lu
2012-11-12 21:18               ` [PATCH 10/46] x86, mm: if kernel .text .data .bss are not marked as E820_RAM, complain and fix Yinghai Lu
2012-11-12 21:18               ` [PATCH 11/46] x86, mm: Fixup code testing if a pfn is direct mapped Yinghai Lu
2012-11-12 21:18               ` [PATCH 12/46] x86, mm: use pfn_range_is_mapped() with CPA Yinghai Lu
2012-11-12 21:18               ` [PATCH 13/46] x86, mm: use pfn_range_is_mapped() with gart Yinghai Lu
2012-11-12 21:18               ` [PATCH 14/46] x86, mm: use pfn_range_is_mapped() with reserve_initrd Yinghai Lu
2012-11-12 21:18               ` [PATCH 15/46] x86, mm: Only direct map addresses that are marked as E820_RAM Yinghai Lu
2012-11-12 21:18               ` [PATCH 16/46] x86, mm: relocate initrd under all mem for 64bit Yinghai Lu
2012-11-12 21:18               ` [PATCH 17/46] x86, mm: Align start address to correct big page size Yinghai Lu
2012-11-12 21:18               ` [PATCH 18/46] x86, mm: Use big page size for small memory range Yinghai Lu
2012-11-12 21:18               ` [PATCH 19/46] x86, mm: Don't clear page table if range is ram Yinghai Lu
2012-11-12 21:18               ` [PATCH 20/46] x86, mm: Break down init_all_memory_mapping Yinghai Lu
2012-11-12 21:18               ` [PATCH 21/46] x86, mm: setup page table in top-down Yinghai Lu
2012-11-13 17:26                 ` Stefano Stabellini
2012-11-13 19:59                   ` Yinghai Lu
2012-11-13 20:01                     ` H. Peter Anvin
2012-11-13 20:36                       ` Yinghai Lu
2012-11-15 19:28                         ` Yinghai Lu
2012-11-12 21:18               ` [PATCH 22/46] x86, mm: Remove early_memremap workaround for page table accessing on 64bit Yinghai Lu
2012-11-13 16:52                 ` Stefano Stabellini
2012-11-12 21:18               ` [PATCH 23/46] x86, mm: Remove parameter in alloc_low_page for 64bit Yinghai Lu
2012-11-13 17:40                 ` Stefano Stabellini
2012-11-12 21:18               ` [PATCH 24/46] x86, mm: Merge alloc_low_page between 64bit and 32bit Yinghai Lu
2012-11-12 21:18               ` [PATCH 25/46] x86, mm: Move min_pfn_mapped back to mm/init.c Yinghai Lu
2012-11-12 21:18               ` [PATCH 26/46] x86, mm, Xen: Remove mapping_pagetable_reserve() Yinghai Lu
2012-11-13 16:36                 ` Stefano Stabellini
2012-11-13 18:51                   ` Yinghai Lu
2012-11-14 11:19                     ` Stefano Stabellini
2012-11-12 21:18               ` [PATCH 27/46] x86, mm: Add alloc_low_pages(num) Yinghai Lu
2012-11-13 16:37                 ` Stefano Stabellini
2012-11-13 18:53                   ` Yinghai Lu
2012-11-12 21:18               ` [PATCH 28/46] x86, mm: Add pointer about Xen mmu requirement for alloc_low_pages Yinghai Lu
2012-11-13 16:38                 ` Stefano Stabellini
2012-11-13 17:56                   ` H. Peter Anvin
2012-11-13 18:58                     ` Yinghai Lu
2012-11-12 21:18               ` [PATCH 29/46] x86, mm: only call early_ioremap_page_table_range_init() once Yinghai Lu
2012-11-12 21:18               ` [PATCH 30/46] x86, mm: Move back pgt_buf_* to mm/init.c Yinghai Lu
2012-11-12 21:18               ` [PATCH 31/46] x86, mm: Move init_gbpages() out of setup.c Yinghai Lu
2012-11-12 21:18               ` [PATCH 32/46] x86, mm: change low/hignmem_pfn_init to static on 32bit Yinghai Lu
2012-11-12 21:18               ` [PATCH 33/46] x86, mm: Move function declaration into mm_internal.h Yinghai Lu
2012-11-12 21:18               ` [PATCH 34/46] x86, mm: Add check before clear pte above max_low_pfn on 32bit Yinghai Lu
2012-11-12 21:18               ` [PATCH 35/46] x86, mm: use round_up/down in split_mem_range() Yinghai Lu
2012-11-12 21:18               ` [PATCH 36/46] x86, mm: use PFN_DOWN " Yinghai Lu
2012-11-12 21:18               ` [PATCH 37/46] x86, mm: use pfn instead of pos in split_mem_range Yinghai Lu
2012-11-12 21:18               ` [PATCH 38/46] x86, mm: use limit_pfn for end pfn Yinghai Lu
2012-11-12 21:18               ` [PATCH 39/46] x86, mm: Unifying after_bootmem for 32bit and 64bit Yinghai Lu
2012-11-12 21:18               ` [PATCH 40/46] x86, mm: Move after_bootmem to mm_internel.h Yinghai Lu
2012-11-12 21:18               ` [PATCH 41/46] x86, mm: Use clamp_t() in init_range_memory_mapping Yinghai Lu
2012-11-12 21:18               ` [PATCH 42/46] x86, mm: kill numa_free_all_bootmem() Yinghai Lu
2012-11-12 21:18               ` [PATCH 43/46] x86, mm: kill numa_64.h Yinghai Lu
2012-11-12 21:18               ` [PATCH 44/46] sparc, mm: Remove calling of free_all_bootmem_node() Yinghai Lu
2012-11-12 21:18                 ` Yinghai Lu
2012-11-12 21:18               ` [PATCH 45/46] mm: Kill NO_BOOTMEM version free_all_bootmem_node() Yinghai Lu
2012-11-12 21:18               ` [PATCH 46/46] x86, mm: Let "memmap=" take more entries one time 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=CAE9FiQVSMP2TpTPxEB62T-uELY-W67m6LX-qTJ7yYSEE-cOZbA@mail.gmail.com \
    --to=yinghai@kernel.org \
    --cc=hpa@zytor.com \
    --cc=jacob.shin@amd.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 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.