All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Cooper <andrew.cooper3@citrix.com>
To: Ian Campbell <Ian.Campbell@citrix.com>
Cc: Tim Deegan <tim@xen.org>, Xen-devel <xen-devel@lists.xen.org>
Subject: Re: [PATCH 11/13] xen: XEN_DOMCTL_shadow_op hypercall
Date: Fri, 29 Nov 2013 11:27:49 +0000	[thread overview]
Message-ID: <52987A35.3090403@citrix.com> (raw)
In-Reply-To: <1385724344.25763.24.camel@kazak.uk.xensource.com>

On 29/11/13 11:25, Ian Campbell wrote:
> On Thu, 2013-11-28 at 18:56 +0000, Andrew Cooper wrote:
>> And some of the sub-subops.  It is a little hacky given the legacy way of
>> having several methods of enabling/disbling LOG_DIRTY mode.
> Does the hypervisor still support all those methods. For valgrind
> purposes we only care as far back as 4.1 I think?

Sadly yes, and xc_domain_save() I believe makes use of both of them. 
(Most of these patches are from 6 months ago, so I don't remember for
certain)

While it is not explicitly deprecated in the ABI, it is still fair game
to use either method.

~Andrew

>
> Regardless, I intend to send this patch upstream.
>
>> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
>> ---
>>  coregrind/m_syswrap/syswrap-xen.c |   64 +++++++++++++++++++++++++++++++++++++
>>  include/vki/vki-xen-domctl.h      |   36 ++++++++++++++++++++-
>>  2 files changed, 99 insertions(+), 1 deletion(-)
>>
>> diff --git a/coregrind/m_syswrap/syswrap-xen.c b/coregrind/m_syswrap/syswrap-xen.c
>> index ea4a7c0..056f2b8 100644
>> --- a/coregrind/m_syswrap/syswrap-xen.c
>> +++ b/coregrind/m_syswrap/syswrap-xen.c
>> @@ -696,6 +696,49 @@ PRE(domctl)
>>        __PRE_XEN_DOMCTL_READ(getvcpuextstate, vcpuextstate, buffer);
>>        break;
>>  
>> +   case VKI_XEN_DOMCTL_shadow_op:
>> +       PRE_XEN_DOMCTL_READ(shadow_op, op);
>> +
>> +       switch(domctl->u.shadow_op.op)
>> +       {
>> +       case VKI_XEN_DOMCTL_SHADOW_OP_OFF:
>> +           /* No further inputs */
>> +           break;
>> +
>> +       case VKI_XEN_DOMCTL_SHADOW_OP_ENABLE:
>> +           PRE_XEN_DOMCTL_READ(shadow_op, mode);
>> +           switch(domctl->u.shadow_op.mode)
>> +           {
>> +           case XEN_DOMCTL_SHADOW_ENABLE_LOG_DIRTY:
>> +               goto domctl_shadow_op_enable_logdirty;
>> +
>> +
>> +           default:
>> +               bad_subop(tid, layout, arrghs, status, flags,
>> +                         "__HYPERVISOR_domctl shadowop mode",
>> +                         domctl->u.shadow_op.mode);
>> +               break;
>> +           }
>> +
>> +       case VKI_XEN_DOMCTL_SHADOW_OP_ENABLE_LOGDIRTY:
>> +       domctl_shadow_op_enable_logdirty:
>> +           /* No further inputs */
>> +           break;
>> +
>> +       case VKI_XEN_DOMCTL_SHADOW_OP_CLEAN:
>> +       case VKI_XEN_DOMCTL_SHADOW_OP_PEEK:
>> +           PRE_XEN_DOMCTL_READ(shadow_op, dirty_bitmap);
>> +           PRE_XEN_DOMCTL_READ(shadow_op, pages);
>> +           break;
>> +
>> +       default:
>> +           bad_subop(tid, layout, arrghs, status, flags,
>> +                     "__HYPERVISOR_domctl shadow(10)",
>> +                     domctl->u.shadow_op.op);
>> +           break;
>> +       }
>> +       break;
>> +
>>     default:
>>        bad_subop(tid, layout, arrghs, status, flags,
>>                  "__HYPERVISOR_domctl", domctl->cmd);
>> @@ -1212,6 +1255,27 @@ POST(domctl){
>>                       domctl->u.vcpuextstate.size);
>>        break;
>>  
>> +   case VKI_XEN_DOMCTL_shadow_op:
>> +       switch(domctl->u.shadow_op.op)
>> +       {
>> +       case VKI_XEN_DOMCTL_SHADOW_OP_OFF:
>> +           /* No outputs */
>> +           break;
>> +
>> +       case VKI_XEN_DOMCTL_SHADOW_OP_CLEAN:
>> +       case VKI_XEN_DOMCTL_SHADOW_OP_PEEK:
>> +           POST_XEN_DOMCTL_WRITE(shadow_op, pages);
>> +           POST_XEN_DOMCTL_WRITE(shadow_op, stats.fault_count);
>> +           POST_XEN_DOMCTL_WRITE(shadow_op, stats.dirty_count);
>> +           if(domctl->u.shadow_op.dirty_bitmap.p)
>> +               POST_MEM_WRITE((Addr)domctl->u.shadow_op.dirty_bitmap.p,
>> +                              domctl->u.shadow_op.pages * sizeof(vki_uint8_t));
>> +           break;
>> +
>> +       default:
>> +           break;
>> +       }
>> +       break;
>>     }
>>  #undef POST_XEN_DOMCTL_WRITE
>>  #undef __POST_XEN_DOMCTL_WRITE
>> diff --git a/include/vki/vki-xen-domctl.h b/include/vki/vki-xen-domctl.h
>> index 67dc2ef..7cce4af 100644
>> --- a/include/vki/vki-xen-domctl.h
>> +++ b/include/vki/vki-xen-domctl.h
>> @@ -173,6 +173,40 @@ struct vki_xen_domctl_vcpuaffinity {
>>      struct vki_xenctl_bitmap cpumap; /* IN/OUT */
>>  };
>>  
>> +struct vki_xen_domctl_shadow_op_stats {
>> +    vki_uint32_t fault_count;
>> +    vki_uint32_t dirty_count;
>> +};
>> +
>> +/* vki_xen_domctl_shadow_op.op is an utter mess for compatibily reasons. */
>> +
>> +struct vki_xen_domctl_shadow_op {
>> +    vki_uint32_t op; /* IN */
>> +
>> +#define VKI_XEN_DOMCTL_SHADOW_OP_OFF               0
>> +#define VKI_XEN_DOMCTL_SHADOW_OP_ENABLE           32
>> +#define VKI_XEN_DOMCTL_SHADOW_OP_CLEAN            11
>> +#define VKI_XEN_DOMCTL_SHADOW_OP_PEEK             12
>> +#define VKI_XEN_DOMCTL_SHADOW_OP_GET_ALLOCATION   30
>> +#define VKI_XEN_DOMCTL_SHADOW_OP_SET_ALLOCATION   31
>> +
>> +#define VKI_XEN_DOMCTL_SHADOW_OP_ENABLE_TEST       1
>> +#define VKI_XEN_DOMCTL_SHADOW_OP_ENABLE_LOGDIRTY   2
>> +#define VKI_XEN_DOMCTL_SHADOW_OP_ENABLE_TRANSLATE  3
>> +
>> +    vki_uint32_t mode;
>> +
>> +#define XEN_DOMCTL_SHADOW_ENABLE_REFCOUNT  (1 << 1)
>> +#define XEN_DOMCTL_SHADOW_ENABLE_LOG_DIRTY (1 << 2)
>> +#define XEN_DOMCTL_SHADOW_ENABLE_TRANSLATE (1 << 3)
>> +#define XEN_DOMCTL_SHADOW_ENABLE_EXTERNAL  (1 << 4)
>> +
>> +    vki_uint32_t mb;
>> +    VKI_XEN_GUEST_HANDLE_64(vki_uint8) dirty_bitmap;
>> +    vki_xen_uint64_aligned_t pages;
>> +    struct vki_xen_domctl_shadow_op_stats stats;
>> +};
>> +
>>  struct vki_xen_domctl_max_mem {
>>      /* IN variables. */
>>      vki_xen_uint64_aligned_t max_memkb;
>> @@ -285,7 +319,7 @@ struct vki_xen_domctl {
>>          struct vki_xen_domctl_getpageframeinfo3 getpageframeinfo3;
>>          struct vki_xen_domctl_nodeaffinity      nodeaffinity;
>>          struct vki_xen_domctl_vcpuaffinity      vcpuaffinity;
>> -        //struct vki_xen_domctl_shadow_op         shadow_op;
>> +        struct vki_xen_domctl_shadow_op         shadow_op;
>>          struct vki_xen_domctl_max_mem           max_mem;
>>          struct vki_xen_domctl_vcpucontext       vcpucontext;
>>          struct vki_xen_domctl_getvcpuinfo       getvcpuinfo;
>

  reply	other threads:[~2013-11-29 11:27 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-11-28 18:56 [PATCH 00/13] Valgrind patches for hypercalls Andrew Cooper
2013-11-28 18:56 ` [PATCH 01/13] xen: Fix XEN_SYSCTL_getdomaininfolist for version 0xa Andrew Cooper
2013-11-28 18:56 ` [PATCH 02/13] xen: Infratructure for XEN_TMEM_* hypercalls Andrew Cooper
2013-11-28 18:56 ` [PATCH 03/13] xen: XENMEM_maximum_ram_page hypercall Andrew Cooper
2013-11-28 18:56 ` [PATCH 04/13] xen: XENMEM_maximum_gpfn hypercall Andrew Cooper
2013-11-28 18:56 ` [PATCH 05/13] xen: XENMEM_machphys_mfn_list hypercall Andrew Cooper
2013-11-28 18:56 ` [PATCH 06/13] xen: XENMEM_add_to_physmap hypercall Andrew Cooper
2013-11-29 11:17   ` Ian Campbell
2013-11-28 18:56 ` [PATCH 07/13] xen: XENMEM_remove_from_physmap hypercall Andrew Cooper
2013-11-28 18:56 ` [PATCH 08/13] xen: XEN_DOMCTL_gethvmcontext hypercall Andrew Cooper
2013-11-28 18:56 ` [PATCH 09/13] xen: XEN_DOMCTL_getpageframeinfo3 hypercall Andrew Cooper
2013-11-28 18:56 ` [PATCH 10/13] xen: XEN_DOMCTL_sethvmcontext hypercall Andrew Cooper
2013-11-29 11:22   ` Ian Campbell
2013-11-28 18:56 ` [PATCH 11/13] xen: XEN_DOMCTL_shadow_op hypercall Andrew Cooper
2013-11-29 11:25   ` Ian Campbell
2013-11-29 11:27     ` Andrew Cooper [this message]
2013-11-28 18:57 ` [PATCH 12/13] xen: XEN_SYSCTL_readconsole hypercall Andrew Cooper
2013-11-28 18:57 ` [PATCH 13/13] xen: XEN_SYSCTL_debugkeys hypercall Andrew Cooper
2013-11-29 11:45 ` [PATCH 00/13] Valgrind patches for hypercalls Ian Campbell
2013-12-02 10:37   ` Ian Campbell
2013-12-02 10:46     ` Andrew Cooper
2013-12-02 10:49       ` Ian Campbell
2013-12-02 10:55         ` Andrew Cooper
2013-12-02 11:16           ` Ian Campbell
2013-12-02 14:25 ` Ian Campbell

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=52987A35.3090403@citrix.com \
    --to=andrew.cooper3@citrix.com \
    --cc=Ian.Campbell@citrix.com \
    --cc=tim@xen.org \
    --cc=xen-devel@lists.xen.org \
    /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.