Re: [PATCH -v2] Monitor command: pfa2hva, translate guest physical address to host virtual address

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux