From: david <david_n@gmx.at>
To: Tim Deegan <Tim.Deegan@citrix.com>
Cc: xen-devel@lists.xensource.com
Subject: Re: Can't map the page referenced by HVM-DomU CR3 in Dom0
Date: Tue, 19 Apr 2011 17:44:08 +0200 [thread overview]
Message-ID: <4DADADC8.3050903@gmx.at> (raw)
In-Reply-To: <20110418093409.GA16867@whitby.uk.xensource.com>
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:
----------------------------------------------------------------------
...
...
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.
>
next prev parent reply other threads:[~2011-04-19 15:44 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-04-15 13:45 Can't map the page referenced by HVM-DomU CR3 in Dom0 david
2011-04-18 9:34 ` Tim Deegan
2011-04-19 15:44 ` david [this message]
2011-04-19 16:26 ` Keir Fraser
2011-04-19 21:58 ` david
2011-04-19 22:14 ` Keir Fraser
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4DADADC8.3050903@gmx.at \
--to=david_n@gmx.at \
--cc=Tim.Deegan@citrix.com \
--cc=xen-devel@lists.xensource.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.