From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julian Stecklina Subject: Mini-OS: new_pt_frame fails Date: Thu, 08 Mar 2007 15:32:44 +0100 Message-ID: Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org Hello, as some might have read in my previous postings, I have a Mini-OS dom0 that constructs a Mini-OS domU on x86 xen-3.0.4-testing. As the memory layout my Dom0 builds does not guarantee, that pages the DomU Mini-OS tries to use as page tables are mapped to existing memory, I changed new_pt_frame in arch/x86/mm.c in the following way: The pt_pfn is mapped R/W, then it is zeroed by a memset(). After that it is mapped with the correct protection flags and pinned. The problem is that the first mapping fails: Mapping memory range 0xc0400000 - 0xc1000000 MINI_OS(file=mm.c, line=68) Allocating new L1 pt frame for pt_pfn=36, mfn=ca8, prev_l_mfn=cad, offset=301 (XEN) .../xen-3.0.4-testing.hg/xen/include/asm/mm.h:184:d1 Error pfn 0: rd=ffbe8100, od=ffbf4100, caf=80000002, taf=e8000002 (XEN) mm.c:456:d1 Could not get page ref for pfn 0 (XEN) mm.c:2225:d1 Could not get page for normal update New PT could not be mapped R/W. Now I am puzzled what these hypervisor errors mean, and what I could have done wrong? The code in question is the following: mmu_updates[0].ptr = ((pgentry_t)tab[l2_table_offset(pt_page)] & PAGE_MASK) + sizeof(pgentry_t) * l1_table_offset(pt_page); mmu_updates[0].val = ((pgentry_t)pfn_to_mfn(*pt_pfn) << PAGE_SHIFT) | _PAGE_RW | _PAGE_PRESENT; if(HYPERVISOR_mmu_update(mmu_updates, 1, NULL, DOMID_SELF) < 0) { printk("New PT could not be mapped R/W.\n"); do_exit(); } Any help is appreciated. Regards, Julian