Hi, i''m trying to run a very simple domU kernel on Xen/x86_64, and i''m getting some trouble with update_va_mapping(): when trying to remap some page table entry, i find the virtual address still pointing to the same machine address after the return of the hypercall. Here''s the interesting part of the code: cons = (struct xencons_interface *) addr; cons->out_prod = 0x42; if (HYPERVISOR_update_va_mapping (addr, (xen_start_info->console_mfn << PAGE_SHIFT) | 0x67, 0)) BUG (); tlb_flush (); cons = (struct xencons_interface *) addr; if (cons->out_prod == 0x42) /* Fails here */ BUG (); I''ve double-checked hypercalls and tlb_flush() function, all seems fine. So my guess is that either i missed something in the docs, or there''s something wrong with update_va_mapping(). Regards, Mathieu _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
On 13 Feb 2006, at 16:06, Mathieu Ropert wrote:> i''m trying to run a very simple domU kernel on Xen/x86_64, and i''m > getting some trouble with update_va_mapping(): when trying to remap > some page table entry, i find the virtual address still pointing to > the same machine address after the return of the hypercall.What machine page does ''cons'' point at before update_va_mapping()? Is it definitely a different page? -- Keir _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Keir Fraser wrote:> > On 13 Feb 2006, at 16:06, Mathieu Ropert wrote: > >> i''m trying to run a very simple domU kernel on Xen/x86_64, and i''m >> getting some trouble with update_va_mapping(): when trying to remap >> some page table entry, i find the virtual address still pointing to >> the same machine address after the return of the hypercall. > > > What machine page does ''cons'' point at before update_va_mapping()? Is > it definitely a different page? > > -- Keir >"cons" is a page in the domU kernel address space. I left a 4k blank (page aligned) after the kernel entry point for this purpose. In terms of assembly code, it looks like something like this: .org 0x2000 .globl console_page console_page: .fill 256, 8, 0 and then, cons = (struct xencons_interface *) &console_page in my C code. That may sound stupid and/or lazy, but i wanted a valid virtual address easy, complexity will come after i fully understand the thing :) _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Keir Fraser wrote:> > On 13 Feb 2006, at 16:06, Mathieu Ropert wrote: > >> i''m trying to run a very simple domU kernel on Xen/x86_64, and i''m >> getting some trouble with update_va_mapping(): when trying to remap >> some page table entry, i find the virtual address still pointing to >> the same machine address after the return of the hypercall. > > > What machine page does ''cons'' point at before update_va_mapping()? Is > it definitely a different page? > > -- Keir >Done some more checks and found the bug: the virtual address i used was mis-aligned (missing a 0x in .align directive :)). How does update_va_mapping() should normally behave when given a non paged-aligned virtual address? From the code, i guess it just remap the page containing the given address (discarding the lower 12 bits). Is this intended? Mathieu _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel