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] Can't map the page referenced by HVM-DomU CR3 in Dom0

To: david <david_n@xxxxxx>, Tim Deegan <Tim.Deegan@xxxxxxxxxx>
Subject: Re: [Xen-devel] Can't map the page referenced by HVM-DomU CR3 in Dom0
From: Keir Fraser <keir.xen@xxxxxxxxx>
Date: Tue, 19 Apr 2011 17:26:05 +0100
Cc: xen-devel@xxxxxxxxxxxxxxxxxxx
Delivery-date: Tue, 19 Apr 2011 09:27:04 -0700
Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:user-agent:date:subject:from:to:cc:message-id :thread-topic:thread-index:in-reply-to:mime-version:content-type :content-transfer-encoding; bh=BlhaEo5q9ls9bOfgeBdokAQoLToAonpSoQK1XK4mSRI=; b=rLm+T8CxJtkpgYjSLGbz+6x7JkV3XKrCem2gTBEAvEoI7ja5spT1P4sNR8KgF33RJp 4QwoXCQwMC8k4otciMLyENH3YEcpHIftmQnWWQ2l4KSeUmdZdqgUF/fYvVikpzQHgjhH d5uX2xvQGbA/hqRN0IvqV2mlKve4bE65yyDtE=
Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=user-agent:date:subject:from:to:cc:message-id:thread-topic :thread-index:in-reply-to:mime-version:content-type :content-transfer-encoding; b=pkZNjCSylXI9NQ/9YUDHzZijqxr5NGY1q+WevUBzxEsQh4Bd+1SCcprAc5C+62Qzwe Eonw9VfIpvX4RMSxLxCQkMg5uAHYxiOJwoLMKdCrGD/k1AvEmTiOsTcr5oYzuxOqqy7K BLRWWFr0uanuLDTJ9izvVkQDa3k3aVHGyknzQ=
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <4DADADC8.3050903@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/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
Thread-index: Acv+rnroybw82wb+fkauKqLG16ENYw==
Thread-topic: [Xen-devel] Can't map the page referenced by HVM-DomU CR3 in Dom0
User-agent: Microsoft-Entourage/12.29.0.110113
On 19/04/2011 16:44, "david" <david_n@xxxxxx> wrote:

> On 04/18/2011 11:34 AM, Tim Deegan wrote:
>> At 14:45 +0100 on 15 Apr (1302878734), david wrote:
>>> I'm trying to access the page containing the paging information for a
>>> DomU from Dom0.
>>> 
>>> I'm doing that by translating the address contained in the DomU CR3
>>> register with xc_translate_foreign_address (libxc) and try to map the
>>> returned frame number with xc_map_foreign_range.
>>> 
>>> The problem is, that the return value from xc_translate_foreign_address
>>> is 0 (guest cr3 is 0x002f3000 in my case), which indicates an error
>>> (corresponding to the code comments). After some debugging I have
>>> discovered, that pte becomes 0 when level=2 and therefore the function
>>> returns 0 on line 79:
>> 
>> How often does this happen?  On every attempt or only from time to time?
>> Have you checked (say, from inside the guest) that the level-2 PTE isn't
>> actually zero?
> 
> hi,
> 
> it happens for every cr3 value. I made some quick and dirty code, which
> reads 10 different cr3 values and tries to map the corresponding page:

xc_translate_foreign_address() will convert a guest virtual address into a
guest physical address. It's not working out for you because guest cr3
values are already guest physical addresses. Thus the virtual-to-physical
conversion you subject the values to is meaningless.

 -- Keir

> ----------------------------------------------------------------------
> ...
> ...
> int crfinder = 1;
> 
> if(crfinder == 1){
>          int m;
>          unsigned long cr3s[10] = {0};
>          unsigned long mfn = 0;
>          vcpu_guest_context_any_t *ctxt =
> malloc(sizeof(vcpu_guest_context_any_t));
>          unsigned long cr3 = ctxt->c.ctrlreg[3];
> 
>          while(1 == 1){
> 
>                  xc_vcpu_getcontext(xcinterface, domain,
> dominfo.max_vcpu_id, ctxt);
>                  cr3 = ctxt->c.ctrlreg[3];
> 
>                  for(m = 0; m < 10; m++){
> 
>                          //already stored?
>                          if(cr3s[m] == cr3){
> 
>                                  break;
>                          //checked all stored cr3 values?
>                          }else if (cr3s[m] != 0){
> 
>                                  continue;
>                          //obviously new one found
>                          }else{
>                                  cr3s[m] = cr3;
>                                  printf("new cr3 found %08x, stored in
> %d\n", cr3, m);
> 
>                                  mfn =
> xc_translate_foreign_address(xcinterface, domain, 0, cr3s[m]);
>                                  printf("calculated mfn %08d for address
> %08x\n", mfn, cr3s[m]);
>                                  break;
>                          }
>                  }
> 
>                  if(m == 10)
>                         return 0;
>          }
> }
> ----------------------------------------------------------------------
> 
> the corresponding output is:
> 
> new cr3 found 002f3000, stored in 0
> calculated mfn 00000000 for address 002f3000
> new cr3 found 06ac01a0, stored in 1
> calculated mfn 00000000 for address 06ac01a0
> new cr3 found 06ac0040, stored in 2
> calculated mfn 00000000 for address 06ac0040
> new cr3 found 06ac00a0, stored in 3
> calculated mfn 00000000 for address 06ac00a0
> new cr3 found 06ac01e0, stored in 4
> calculated mfn 00000000 for address 06ac01e0
> new cr3 found 06ac0320, stored in 5
> calculated mfn 00000000 for address 06ac0320
> new cr3 found 06ac02a0, stored in 6
> calculated mfn 00000000 for address 06ac02a0
> new cr3 found 06ac01c0, stored in 7
> calculated mfn 00000000 for address 06ac01c0
> new cr3 found 06ac0200, stored in 8
> calculated mfn 00000000 for address 06ac0200
> new cr3 found 06ac0060, stored in 9
> calculated mfn 00000000 for address 06ac0060
> 
> so, every try to translate a cr3 address to a frame number (I don't know
> what's the correct wording for frame numbers in hvm domains, .. mfn?)
> ends in 0. Maybe it's a failure in my code? I can't find it currently :)
> ... I'm trying now, to read the cr3 values inside the domain, to check
> if the values are the same.
> 
> greets,
> david
> 
> 
>> 
>> Cheers,
>> 
>> Tim.
>> 
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-devel



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel