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