Hello! I have some problems with mmu_update. I''m trying to map in the grant table frames onto the address 0xeff00000. Therefore, I want to install a page table for that region of memory. However, I get error messages from Xen when trying to install the page table into the page directory: ------------------------------------------------------------ (XEN) DOM216: (file=mm.c, line=351) Could not get page ref for pfn a01c0183 (XEN) DOM216: (file=mm.c, line=2141) Could not get page for normal update ------------------------------------------------------------ The code is ------------------------------------------------------------ new[NR_GRANT_FRAMES].ptr = phys_to_machine(to_phys(pgdir)) + sizeof(void*) * l2_table_offset(XEN_GNTTAB_START); new[NR_GRANT_FRAMES].val = phys_to_machine(pgtab) | (L1_PROT & ~_PAGE_RW); BUG_ON(HYPERVISOR_mmu_update(new, 1, NULL, DOMID_SELF) < 0); ------------------------------------------------------------ (mostly taken from the Mini-OS). The page directory (from start_info_t) is at: Virtual : 0xc21c4000 pgdir Pseudo-phys: 0x021c4000 to_phys(pgdir) Machine : 0x048a6000 phys_to_machine(to_phys(pgdir)) And the ptr mmu_update_t is ptr : 0x048a6efc val : 0x04899021 Do I pass the wrong arguments to the mmu_update_t? Isn''t the arguments supposed to be the physical address of the page table entry/page directory entry (ptr) and the new entry (val). I''m working on x86. // Simon _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
At Tue, 14 Feb 2006 14:53:39 +0100, Simon Kagstrom wrote:> ------------------------------------------------------------ > new[NR_GRANT_FRAMES].ptr = phys_to_machine(to_phys(pgdir)) + sizeof(void*) * l2_table_offset(XEN_GNTTAB_START); > new[NR_GRANT_FRAMES].val = phys_to_machine(pgtab) | (L1_PROT & ~_PAGE_RW); > > BUG_ON(HYPERVISOR_mmu_update(new, 1, NULL, DOMID_SELF) < 0); > ------------------------------------------------------------I''ve also tried to set val to 0, and I still get the same problem: ------------------------------------------------------------ (XEN) DOM7: (file=mm.c, line=352) Could not get page ref for pfn 921c0183 (XEN) DOM7: (file=mm.c, line=2042) Could not get page for normal update ------------------------------------------------------------ I''m puzzled. The pfn given there looks all wrong, and I''m not sure what is wrong with this code. The page directory is taken directly from start_info (pt_base). Does anyone see what I do wrong? // Simon _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
At Thu, 16 Feb 2006 13:11:40 +0100, Simon Kagstrom wrote:> > At Tue, 14 Feb 2006 14:53:39 +0100, > Simon Kagstrom wrote: > > ------------------------------------------------------------ > > new[NR_GRANT_FRAMES].ptr = phys_to_machine(to_phys(pgdir)) + sizeof(void*) * l2_table_offset(XEN_GNTTAB_START); > > new[NR_GRANT_FRAMES].val = phys_to_machine(pgtab) | (L1_PROT & ~_PAGE_RW); > > > > BUG_ON(HYPERVISOR_mmu_update(new, 1, NULL, DOMID_SELF) < 0); > > ------------------------------------------------------------ > > I''ve also tried to set val to 0, and I still get the same problem: > > ------------------------------------------------------------ > (XEN) DOM7: (file=mm.c, line=352) Could not get page ref for pfn 921c0183 > (XEN) DOM7: (file=mm.c, line=2042) Could not get page for normal update > ------------------------------------------------------------ > > I''m puzzled. The pfn given there looks all wrong, and I''m not sure > what is wrong with this code. The page directory is taken directly > from start_info (pt_base). Does anyone see what I do wrong?I''m sorry, my fault. The entries before NR_GRANT_FRAMES were uninitialized... On to the next error. // Simon _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel