WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

Re: [Xen-devel] Problem setting up a custom GDT

To: Simon Kagstrom <simon.kagstrom@xxxxxx>
Subject: Re: [Xen-devel] Problem setting up a custom GDT
From: Mathieu Ropert <mro@xxxxxxxxxx>
Date: Fri, 09 Jun 2006 13:07:02 +0200
Cc: xen-devel list <xen-devel@xxxxxxxxxxxxxxxxxxx>
Delivery-date: Mon, 12 Jun 2006 01:39:05 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
In-reply-to: <8764jalhgb.wl%simon.kagstrom@xxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <8764jalhgb.wl%simon.kagstrom@xxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mozilla Thunderbird 1.0.2 (Windows/20050317)
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

<Prev in Thread] Current Thread [Next in Thread>