[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] Problem setting up a custom GDT


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 

   /* 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



Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.