|
|
|
|
|
|
|
|
|
|
xen-devel
Re: [Xen-devel] Problem setting up a custom GDT
Simon Kagstrom wrote:
Hello!
I have some problems setting up a custom GDT (I need one where the
code is readable). Anyway, I try to switch to my own GDT as follows:
unsigned long frames[16];
volatile unsigned long va = (unsigned long)GDT;
volatile unsigned long pa = to_phys(va);
volatile unsigned long ma = phys_to_machine(pa) & ~_PAGE_RW | _PAGE_PRESENT
| _PAGE_ACCESSED | _PAGE_DIRTY;
/* Make it read-only */
HYPERVISOR_update_va_mapping(va, (pte_t){ ma }, 0);
frames[0] = ma;
int ret = HYPERVISOR_set_gdt(frames, 16);
(The GDT Is just copied from Linux' right now). When doing this, I
always get -EINVAL from set_gdt, which I suspect is because
HYPERVISOR_update_va_mapping for some reason does not succeed in
setting the page read-only.
I've checked the Linux implementation, and it does basically the same
thing (pte_wrprotect() on the machine-address before calling
update_va_mapping). Does anyone see what is wrong here?
// Simon
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
The machine address you pass to Xen is a page table entry. Xen want a
machine frame number.
frames[0] = ma >> PAGE_SHIFT;
should fix you problem.
Mathieu
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|
|
|
|
|