On Tue, Oct 26, 2010 at 10:39:48AM +0800, Huang Ying wrote: > Author: Max Asbock <masbock@xxxxxxxxxxxxxxxxxx> > > Add command pfa2hva to translate guest physical address to host > virtual address. > > The pfa2hva 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 HWPOISON code on the host and the MCE injection code > in qemu-kvm are exercised. > > v2: > > - Add QMP support Looks good to me. Anthony? > > Signed-off-by: Max Asbock <masbock@xxxxxxxxxxxxxxxxxx> > Signed-off-by: Jiajia Zheng <jiajia.zheng@xxxxxxxxx> > Signed-off-by: Huang Ying <ying.huang@xxxxxxxxx> > --- > hmp-commands.hx | 15 +++++++++++++++ > monitor.c | 22 ++++++++++++++++++++++ > qmp-commands.hx | 27 +++++++++++++++++++++++++++ > 3 files changed, 64 insertions(+) > > --- a/monitor.c > +++ b/monitor.c > @@ -2272,6 +2272,28 @@ static void do_inject_mce(Monitor *mon, > } > #endif > > +static void do_pfa2hva_print(Monitor *mon, const QObject *data) > +{ > + QInt *qint; > + > + qint = qobject_to_qint(data); > + monitor_printf(mon, "0x%lx\n", (unsigned long)qint->value); > +} > + > +static int do_pfa2hva(Monitor *mon, const QDict *qdict, QObject **ret_data) > +{ > + target_phys_addr_t paddr; > + target_phys_addr_t size = TARGET_PAGE_SIZE; > + void *vaddr; > + > + paddr = qdict_get_int(qdict, "addr"); > + vaddr = cpu_physical_memory_map(paddr, &size, 0); > + cpu_physical_memory_unmap(vaddr, size, 0, 0); > + *ret_data = qobject_from_jsonf("%ld", (unsigned long)vaddr); > + > + return 0; > +} > + > static int do_getfd(Monitor *mon, const QDict *qdict, QObject **ret_data) > { > const char *fdname = qdict_get_str(qdict, "fdname"); > --- a/hmp-commands.hx > +++ b/hmp-commands.hx > @@ -293,6 +293,21 @@ Start gdbserver session (default @var{po > ETEXI > > { > + .name = "pfa2hva", > + .args_type = "fmt:/,addr:l", > + .params = "/fmt addr", > + .help = "translate guest physical 'addr' to host virtual address", > + .user_print = do_pfa2hva_print, > + .mhandler.cmd_new = do_pfa2hva, > + }, > + > +STEXI > +@item pfa2hva @var{addr} > +@findex pfa2hva > +Translate guest physical @var{addr} to host virtual address. > +ETEXI > + > + { > .name = "x", > .args_type = "fmt:/,addr:l", > .params = "/fmt addr", > --- a/qmp-commands.hx > +++ b/qmp-commands.hx > @@ -738,6 +738,33 @@ Example: > EQMP > > { > + .name = "pfa2hva", > + .args_type = "addr:l", > + .params = "addr", > + .help = "translate guest physical 'addr' to host virtual address", > + .user_print = do_pfa2hva_print, > + .mhandler.cmd_new = do_pfa2hva, > + }, > + > +SQMP > +pfa2hva > +--- > + > +Translate guest physical 'addr' to host virtual address. > + > +Arguments: > + > +- "addr": the guest physical address > + > +Example: > + > +-> { "execute": "pfa2hva", > + "arguments": { "addr": 196608 } } > +<- { "return": 139888084717568 } > + > +EQMP > + > + { > .name = "qmp_capabilities", > .args_type = "", > .params = "", > -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html