This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
Home Products Support Community News


[Xen-devel] Mini-OS: new_pt_frame fails

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] Mini-OS: new_pt_frame fails
From: Julian Stecklina <der_julian@xxxxxx>
Date: Thu, 08 Mar 2007 15:32:44 +0100
Delivery-date: Thu, 08 Mar 2007 06:32:09 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Thunderbird (X11/20061206)

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)] &
                         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");

Any help is appreciated.


Xen-devel mailing list

<Prev in Thread] Current Thread [Next in Thread>