diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2008-01-18 16:20:13 +0000 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2008-01-18 16:20:13 +0000 |
commit | 04383f9c0fe6f18446c8f273d9200fdda4f1afe3 (patch) | |
tree | 56fd028d8180f14f7fcf62ebb34a096f738a8479 /extras/mini-os/arch/x86/mm.c | |
parent | 0747f6e56ec0c2a019f6c76cadb34feca6e0f103 (diff) | |
download | xen-04383f9c0fe6f18446c8f273d9200fdda4f1afe3.tar.gz xen-04383f9c0fe6f18446c8f273d9200fdda4f1afe3.tar.bz2 xen-04383f9c0fe6f18446c8f273d9200fdda4f1afe3.zip |
minios: support COW for a zero page
Permits to support sparse data.
Signed-off-by: Samuel Thibault <samuel.thibault@eu.citrix.com>
Diffstat (limited to 'extras/mini-os/arch/x86/mm.c')
-rw-r--r-- | extras/mini-os/arch/x86/mm.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/extras/mini-os/arch/x86/mm.c b/extras/mini-os/arch/x86/mm.c index 53becda146..b8f55b7c58 100644 --- a/extras/mini-os/arch/x86/mm.c +++ b/extras/mini-os/arch/x86/mm.c @@ -50,6 +50,7 @@ #endif unsigned long *phys_to_machine_mapping; +unsigned long mfn_zero; extern char stack[]; extern void page_walk(unsigned long virt_addr); @@ -492,10 +493,13 @@ void *map_frames_ex(unsigned long *f, unsigned long n, unsigned long stride, static void clear_bootstrap(void) { struct xen_memory_reservation reservation; - xen_pfn_t mfns[] = { virt_to_mfn(0), virt_to_mfn(&shared_info) }; + xen_pfn_t mfns[] = { virt_to_mfn(&shared_info) }; int n = sizeof(mfns)/sizeof(*mfns); pte_t nullpte = { }; + /* Use page 0 as the CoW zero page */ + memset(NULL, 0, PAGE_SIZE); + mfn_zero = pfn_to_mfn(0); if (HYPERVISOR_update_va_mapping(0, nullpte, UVMF_INVLPG)) printk("Unable to unmap page 0\n"); |