[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [Patch] Support translating Guest physical address to H
From: |
Max Asbock |
Subject: |
Re: [Qemu-devel] [Patch] Support translating Guest physical address to Host virtual address. |
Date: |
Wed, 27 Jan 2010 14:31:00 -0800 |
On Wed, 2010-01-27 at 15:39 -0600, Anthony Liguori wrote:
> On 01/26/2010 09:25 PM, Zheng, Jiajia wrote:
> > Add command p2v to translate Guest physical address to Host virtual address.
> >
>
> For what purpose?
>
> > Signed-off-by: Max Asbock<address@hidden>
> > Jiajia Zheng<address@hidden>
> > ---
> > diff --git a/monitor.c b/monitor.c
> > index b33b01f..83d9ac7 100644
> > --- a/monitor.c
> > +++ b/monitor.c
> > @@ -668,6 +668,11 @@ static void do_info_uuid(Monitor *mon, QObject
> > **ret_data)
> > *ret_data = qobject_from_jsonf("{ 'UUID': %s }", uuid);
> > }
> >
> > +static void do_info_p2v(Monitor *mon)
> > +{
> > + monitor_printf(mon, "p2v implemented\n");
> > +}
> >
>
> These should be implemented as QMP commands.
>
> > /* get the current CPU defined by the user */
> > static int mon_set_cpu(int cpu_index)
> > {
> > @@ -2283,6 +2288,14 @@ static void do_inject_mce(Monitor *mon, const QDict
> > *qdict)
> > break;
> > }
> > }
> > +static void do_p2v(Monitor *mon, const QDict *qdict)
> > +{
> > + target_long size = 4096;
> > + target_long addr = qdict_get_int(qdict, "addr");
> > +
> > + monitor_printf(mon, "Guest physical address %p is mapped at host
> > virtual address %p\n", (void *)addr, cpu_physical_memory_map(
> > (target_phys_addr_t)addr, (target_phys_addr_t *)&size, 0));
> >
>
> This isn't quite right. It assumes TARGET_PAGE_SIZE is 4k which is
> certainly not always true. It also assumes that
> cpu_physical_memory_map() something that has some meaning which isn't
> necessarily the case. It could be a pointer to a bounce buffer.
>
> Could you give an end-to-end description of how you expect this
> mechanism to be used so we can work out a more appropriate set of
> interfaces. I assume this is MCE related.
>
The purpose of this is to translate a guest physical address to a host
virtual address.
This was indeed used for MCE testing. The p2v command provides one step
in a chain of translations from guest virtual to guest physical to host
virtual to host physical. Host physical is then used to inject a machine
check error. As a consequence the HPOISON code on the host and the MCE
injection code in qemu are exercised.
I was always assuming that this implementation perhaps isn't the most
optimal, but it simply worked for our test case.
What would an appropriate method be to get a host virtual address for
guest physical address that represents a page of RAM?
thanks,
Max