xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3] x86/altp2m: Add a subop for obtaining the mem access of a page
@ 2018-07-25 11:16 Adrian Pop
  2018-07-31 11:37 ` Jan Beulich
  0 siblings, 1 reply; 5+ messages in thread
From: Adrian Pop @ 2018-07-25 11:16 UTC (permalink / raw)
  To: xen-devel
  Cc: Stefano Stabellini, Wei Liu, Razvan Cojocaru, George Dunlap,
	Andrew Cooper, Adrian Pop, Ian Jackson, Tim Deegan, Julien Grall,
	Tamas K Lengyel, Jan Beulich, Sergej Proskurin

Currently there is a subop for setting the memaccess of a page, but not
for consulting it.  The new HVMOP_altp2m_get_mem_access adds this
functionality.

Both altp2m get/set mem access functions use the struct
xen_hvm_altp2m_mem_access which has now dropped the `set' part and has
been renamed from xen_hvm_altp2m_set_mem_access.

Signed-off-by: Adrian Pop <apop@bitdefender.com>
---
Changes in v3:
- remove the unrelated helper function
- simplify the locking in p2m_get_mem_access

Changes in v2:
- use the _p2m_get_mem_access helper from p2m_get_mem_access
- minor Arm adjustments
- move out the addition of a memaccess helper function to a separate
  patch in the attempts of making the diff clearer
---
 tools/libxc/include/xenctrl.h   |  3 +++
 tools/libxc/xc_altp2m.c         | 33 ++++++++++++++++++++++++++++++---
 xen/arch/arm/mem_access.c       |  8 ++++++--
 xen/arch/x86/hvm/hvm.c          | 26 ++++++++++++++++++++++----
 xen/arch/x86/mm/mem_access.c    | 21 +++++++++++++++++++--
 xen/common/mem_access.c         |  2 +-
 xen/include/public/hvm/hvm_op.h | 10 ++++++----
 xen/include/xen/mem_access.h    |  3 ++-
 8 files changed, 89 insertions(+), 17 deletions(-)

diff --git a/tools/libxc/include/xenctrl.h b/tools/libxc/include/xenctrl.h
index dd7d8a9724..82286c2f52 100644
--- a/tools/libxc/include/xenctrl.h
+++ b/tools/libxc/include/xenctrl.h
@@ -1972,6 +1972,9 @@ int xc_altp2m_set_mem_access(xc_interface *handle, uint32_t domid,
 int xc_altp2m_set_mem_access_multi(xc_interface *handle, uint32_t domid,
                                    uint16_t view_id, uint8_t *access,
                                    uint64_t *gfns, uint32_t nr);
+int xc_altp2m_get_mem_access(xc_interface *handle, uint32_t domid,
+                             uint16_t view_id, xen_pfn_t gfn,
+                             xenmem_access_t *access);
 int xc_altp2m_change_gfn(xc_interface *handle, uint32_t domid,
                          uint16_t view_id, xen_pfn_t old_gfn,
                          xen_pfn_t new_gfn);
diff --git a/tools/libxc/xc_altp2m.c b/tools/libxc/xc_altp2m.c
index ce4a1e4d60..0ddb18fa2c 100644
--- a/tools/libxc/xc_altp2m.c
+++ b/tools/libxc/xc_altp2m.c
@@ -177,9 +177,9 @@ int xc_altp2m_set_mem_access(xc_interface *handle, uint32_t domid,
     arg->version = HVMOP_ALTP2M_INTERFACE_VERSION;
     arg->cmd = HVMOP_altp2m_set_mem_access;
     arg->domain = domid;
-    arg->u.set_mem_access.view = view_id;
-    arg->u.set_mem_access.hvmmem_access = access;
-    arg->u.set_mem_access.gfn = gfn;
+    arg->u.mem_access.view = view_id;
+    arg->u.mem_access.hvmmem_access = access;
+    arg->u.mem_access.gfn = gfn;
 
     rc = xencall2(handle->xcall, __HYPERVISOR_hvm_op, HVMOP_altp2m,
 		  HYPERCALL_BUFFER_AS_ARG(arg));
@@ -254,3 +254,30 @@ int xc_altp2m_set_mem_access_multi(xc_interface *xch, uint32_t domid,
 
     return rc;
 }
+
+int xc_altp2m_get_mem_access(xc_interface *handle, uint32_t domid,
+                             uint16_t view_id, xen_pfn_t gfn,
+                             xenmem_access_t *access)
+{
+    int rc;
+    DECLARE_HYPERCALL_BUFFER(xen_hvm_altp2m_op_t, arg);
+
+    arg = xc_hypercall_buffer_alloc(handle, arg, sizeof(*arg));
+    if ( arg == NULL )
+        return -1;
+
+    arg->version = HVMOP_ALTP2M_INTERFACE_VERSION;
+    arg->cmd = HVMOP_altp2m_get_mem_access;
+    arg->domain = domid;
+    arg->u.mem_access.view = view_id;
+    arg->u.mem_access.gfn = gfn;
+
+    rc = xencall2(handle->xcall, __HYPERVISOR_hvm_op, HVMOP_altp2m,
+                 HYPERCALL_BUFFER_AS_ARG(arg));
+
+    if ( !rc )
+        *access = arg->u.mem_access.hvmmem_access;
+
+    xc_hypercall_buffer_free(handle, arg);
+    return rc;
+}
diff --git a/xen/arch/arm/mem_access.c b/xen/arch/arm/mem_access.c
index ba4ec780fd..178bc1a6c1 100644
--- a/xen/arch/arm/mem_access.c
+++ b/xen/arch/arm/mem_access.c
@@ -236,7 +236,7 @@ bool p2m_mem_access_check(paddr_t gpa, vaddr_t gla, const struct npfec npfec)
     if ( !p2m->mem_access_enabled )
         return true;
 
-    rc = p2m_get_mem_access(v->domain, gaddr_to_gfn(gpa), &xma);
+    rc = p2m_get_mem_access(v->domain, gaddr_to_gfn(gpa), &xma, 0);
     if ( rc )
         return true;
 
@@ -441,11 +441,15 @@ long p2m_set_mem_access_multi(struct domain *d,
 }
 
 int p2m_get_mem_access(struct domain *d, gfn_t gfn,
-                       xenmem_access_t *access)
+                       xenmem_access_t *access, unsigned int altp2m_idx)
 {
     int ret;
     struct p2m_domain *p2m = p2m_get_hostp2m(d);
 
+    /* altp2m is not yet implemented on Arm. The altp2m_idx should be 0. */
+    if ( altp2m_idx )
+        return -EINVAL;
+
     p2m_read_lock(p2m);
     ret = __p2m_get_mem_access(d, gfn, access);
     p2m_read_unlock(p2m);
diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c
index 67b99af334..49f4afabac 100644
--- a/xen/arch/x86/hvm/hvm.c
+++ b/xen/arch/x86/hvm/hvm.c
@@ -4495,6 +4495,7 @@ static int do_altp2m_op(
     case HVMOP_altp2m_switch_p2m:
     case HVMOP_altp2m_set_mem_access:
     case HVMOP_altp2m_set_mem_access_multi:
+    case HVMOP_altp2m_get_mem_access:
     case HVMOP_altp2m_change_gfn:
         break;
 
@@ -4611,12 +4612,12 @@ static int do_altp2m_op(
         break;
 
     case HVMOP_altp2m_set_mem_access:
-        if ( a.u.set_mem_access.pad )
+        if ( a.u.mem_access.pad )
             rc = -EINVAL;
         else
-            rc = p2m_set_mem_access(d, _gfn(a.u.set_mem_access.gfn), 1, 0, 0,
-                                    a.u.set_mem_access.hvmmem_access,
-                                    a.u.set_mem_access.view);
+            rc = p2m_set_mem_access(d, _gfn(a.u.mem_access.gfn), 1, 0, 0,
+                                    a.u.mem_access.hvmmem_access,
+                                    a.u.mem_access.view);
         break;
 
     case HVMOP_altp2m_set_mem_access_multi:
@@ -4652,6 +4653,23 @@ static int do_altp2m_op(
         }
         break;
 
+    case HVMOP_altp2m_get_mem_access:
+        if ( a.u.mem_access.pad )
+            rc = -EINVAL;
+        else
+        {
+            xenmem_access_t access;
+
+            rc = p2m_get_mem_access(d, _gfn(a.u.mem_access.gfn), &access,
+                                    a.u.mem_access.view);
+            if ( !rc )
+            {
+                a.u.mem_access.hvmmem_access = access;
+                rc = __copy_to_guest(arg, &a, 1) ? -EFAULT : 0;
+            }
+        }
+        break;
+
     case HVMOP_altp2m_change_gfn:
         if ( a.u.change_gfn.pad1 || a.u.change_gfn.pad2 )
             rc = -EINVAL;
diff --git a/xen/arch/x86/mm/mem_access.c b/xen/arch/x86/mm/mem_access.c
index 03a8641569..d55825097a 100644
--- a/xen/arch/x86/mm/mem_access.c
+++ b/xen/arch/x86/mm/mem_access.c
@@ -467,9 +467,26 @@ long p2m_set_mem_access_multi(struct domain *d,
     return rc;
 }
 
-int p2m_get_mem_access(struct domain *d, gfn_t gfn, xenmem_access_t *access)
+int p2m_get_mem_access(struct domain *d, gfn_t gfn, xenmem_access_t *access,
+                       unsigned int altp2m_idx)
 {
-    struct p2m_domain *p2m = p2m_get_hostp2m(d);
+    struct p2m_domain *p2m;
+
+    if ( !altp2m_active(d) )
+    {
+        if ( altp2m_idx )
+            return -EINVAL;
+
+        p2m = p2m_get_hostp2m(d);
+    }
+    else
+    {
+        if ( altp2m_idx >= MAX_ALTP2M ||
+             d->arch.altp2m_eptp[altp2m_idx] == mfn_x(INVALID_MFN) )
+            return -EINVAL;
+
+        p2m = d->arch.altp2m_p2m[altp2m_idx];
+    }
 
     return _p2m_get_mem_access(p2m, gfn, access);
 }
diff --git a/xen/common/mem_access.c b/xen/common/mem_access.c
index 1bf6824442..010e6f8dbf 100644
--- a/xen/common/mem_access.c
+++ b/xen/common/mem_access.c
@@ -99,7 +99,7 @@ int mem_access_memop(unsigned long cmd,
         if ( (mao.pfn > domain_get_maximum_gpfn(d)) && mao.pfn != ~0ull )
             break;
 
-        rc = p2m_get_mem_access(d, _gfn(mao.pfn), &access);
+        rc = p2m_get_mem_access(d, _gfn(mao.pfn), &access, 0);
         if ( rc != 0 )
             break;
 
diff --git a/xen/include/public/hvm/hvm_op.h b/xen/include/public/hvm/hvm_op.h
index bbba99e5f5..36fd97f329 100644
--- a/xen/include/public/hvm/hvm_op.h
+++ b/xen/include/public/hvm/hvm_op.h
@@ -234,7 +234,7 @@ struct xen_hvm_altp2m_view {
 typedef struct xen_hvm_altp2m_view xen_hvm_altp2m_view_t;
 DEFINE_XEN_GUEST_HANDLE(xen_hvm_altp2m_view_t);
 
-struct xen_hvm_altp2m_set_mem_access {
+struct xen_hvm_altp2m_mem_access {
     /* view */
     uint16_t view;
     /* Memory type */
@@ -243,8 +243,8 @@ struct xen_hvm_altp2m_set_mem_access {
     /* gfn */
     uint64_t gfn;
 };
-typedef struct xen_hvm_altp2m_set_mem_access xen_hvm_altp2m_set_mem_access_t;
-DEFINE_XEN_GUEST_HANDLE(xen_hvm_altp2m_set_mem_access_t);
+typedef struct xen_hvm_altp2m_mem_access xen_hvm_altp2m_mem_access_t;
+DEFINE_XEN_GUEST_HANDLE(xen_hvm_altp2m_mem_access_t);
 
 struct xen_hvm_altp2m_set_mem_access_multi {
     /* view */
@@ -296,6 +296,8 @@ struct xen_hvm_altp2m_op {
 #define HVMOP_altp2m_change_gfn           8
 /* Set access for an array of pages */
 #define HVMOP_altp2m_set_mem_access_multi 9
+/* Get the access of a page of memory from a certain view */
+#define HVMOP_altp2m_get_mem_access       10
     domid_t domain;
     uint16_t pad1;
     uint32_t pad2;
@@ -303,7 +305,7 @@ struct xen_hvm_altp2m_op {
         struct xen_hvm_altp2m_domain_state         domain_state;
         struct xen_hvm_altp2m_vcpu_enable_notify   enable_notify;
         struct xen_hvm_altp2m_view                 view;
-        struct xen_hvm_altp2m_set_mem_access       set_mem_access;
+        struct xen_hvm_altp2m_mem_access           mem_access;
         struct xen_hvm_altp2m_change_gfn           change_gfn;
         struct xen_hvm_altp2m_set_mem_access_multi set_mem_access_multi;
         uint8_t pad[64];
diff --git a/xen/include/xen/mem_access.h b/xen/include/xen/mem_access.h
index 5ab34c1553..99fe11f6bc 100644
--- a/xen/include/xen/mem_access.h
+++ b/xen/include/xen/mem_access.h
@@ -76,7 +76,8 @@ long p2m_set_mem_access_multi(struct domain *d,
  * Get access type for a gfn.
  * If gfn == INVALID_GFN, gets the default access type.
  */
-int p2m_get_mem_access(struct domain *d, gfn_t gfn, xenmem_access_t *access);
+int p2m_get_mem_access(struct domain *d, gfn_t gfn, xenmem_access_t *access,
+                       unsigned int altp2m_idx);
 
 #ifdef CONFIG_HAS_MEM_ACCESS
 int mem_access_memop(unsigned long cmd,
-- 
2.17.0


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH v3] x86/altp2m: Add a subop for obtaining the mem access of a page
  2018-07-25 11:16 [PATCH v3] x86/altp2m: Add a subop for obtaining the mem access of a page Adrian Pop
@ 2018-07-31 11:37 ` Jan Beulich
  2018-08-27  9:38   ` Adrian Pop
  0 siblings, 1 reply; 5+ messages in thread
From: Jan Beulich @ 2018-07-31 11:37 UTC (permalink / raw)
  To: Adrian Pop, George Dunlap
  Cc: Stefano Stabellini, Wei Liu, Razvan Cojocaru, Andrew Cooper,
	Ian Jackson, Tim Deegan, Julien Grall, Tamas K Lengyel,
	Sergej Proskurin, xen-devel

>>> On 25.07.18 at 13:16, <apop@bitdefender.com> wrote:
> --- a/xen/include/public/hvm/hvm_op.h
> +++ b/xen/include/public/hvm/hvm_op.h
> @@ -234,7 +234,7 @@ struct xen_hvm_altp2m_view {
>  typedef struct xen_hvm_altp2m_view xen_hvm_altp2m_view_t;
>  DEFINE_XEN_GUEST_HANDLE(xen_hvm_altp2m_view_t);
>  
> -struct xen_hvm_altp2m_set_mem_access {
> +struct xen_hvm_altp2m_mem_access {
>      /* view */
>      uint16_t view;
>      /* Memory type */
> @@ -243,8 +243,8 @@ struct xen_hvm_altp2m_set_mem_access {
>      /* gfn */
>      uint64_t gfn;
>  };
> -typedef struct xen_hvm_altp2m_set_mem_access xen_hvm_altp2m_set_mem_access_t;
> -DEFINE_XEN_GUEST_HANDLE(xen_hvm_altp2m_set_mem_access_t);
> +typedef struct xen_hvm_altp2m_mem_access xen_hvm_altp2m_mem_access_t;
> +DEFINE_XEN_GUEST_HANDLE(xen_hvm_altp2m_mem_access_t);
>  
>  struct xen_hvm_altp2m_set_mem_access_multi {
>      /* view */
> @@ -296,6 +296,8 @@ struct xen_hvm_altp2m_op {
>  #define HVMOP_altp2m_change_gfn           8
>  /* Set access for an array of pages */
>  #define HVMOP_altp2m_set_mem_access_multi 9
> +/* Get the access of a page of memory from a certain view */
> +#define HVMOP_altp2m_get_mem_access       10
>      domid_t domain;
>      uint16_t pad1;
>      uint32_t pad2;
> @@ -303,7 +305,7 @@ struct xen_hvm_altp2m_op {
>          struct xen_hvm_altp2m_domain_state         domain_state;
>          struct xen_hvm_altp2m_vcpu_enable_notify   enable_notify;
>          struct xen_hvm_altp2m_view                 view;
> -        struct xen_hvm_altp2m_set_mem_access       set_mem_access;
> +        struct xen_hvm_altp2m_mem_access           mem_access;
>          struct xen_hvm_altp2m_change_gfn           change_gfn;
>          struct xen_hvm_altp2m_set_mem_access_multi set_mem_access_multi;
>          uint8_t pad[64];

This being exposed to guests, the interface has to be considered
stable imo, in which case you can't rename things like this. You'd
need __XEN_INTERFACE_VERSION__ dependent logic (just like is the
case further up in the file).

Also, to you, George, and whoever else advocates for this, another
remark regarding the guest accessibility here (at the risk of getting
flamed once again): The less capable (afaict)
XENMEM_access_op_{g,s}et_access (previously
HVMOP_{g,s}et_mem_access) are tools accessible only. I find such
an inconsistency rather odd.

Jan



_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v3] x86/altp2m: Add a subop for obtaining the mem access of a page
  2018-07-31 11:37 ` Jan Beulich
@ 2018-08-27  9:38   ` Adrian Pop
  2018-08-27  9:59     ` Jan Beulich
  0 siblings, 1 reply; 5+ messages in thread
From: Adrian Pop @ 2018-08-27  9:38 UTC (permalink / raw)
  To: Jan Beulich
  Cc: Stefano Stabellini, Wei Liu, Razvan Cojocaru, George Dunlap,
	Andrew Cooper, Ian Jackson, Tim Deegan, Julien Grall,
	Tamas K Lengyel, Sergej Proskurin, xen-devel

On Tue, Jul 31, 2018 at 05:37:30AM -0600, Jan Beulich wrote:
> >>> On 25.07.18 at 13:16, <apop@bitdefender.com> wrote:
> > --- a/xen/include/public/hvm/hvm_op.h
> > +++ b/xen/include/public/hvm/hvm_op.h
> > @@ -234,7 +234,7 @@ struct xen_hvm_altp2m_view {
> >  typedef struct xen_hvm_altp2m_view xen_hvm_altp2m_view_t;
> >  DEFINE_XEN_GUEST_HANDLE(xen_hvm_altp2m_view_t);
> >  
> > -struct xen_hvm_altp2m_set_mem_access {
> > +struct xen_hvm_altp2m_mem_access {
> >      /* view */
> >      uint16_t view;
> >      /* Memory type */
> > @@ -243,8 +243,8 @@ struct xen_hvm_altp2m_set_mem_access {
> >      /* gfn */
> >      uint64_t gfn;
> >  };
> > -typedef struct xen_hvm_altp2m_set_mem_access xen_hvm_altp2m_set_mem_access_t;
> > -DEFINE_XEN_GUEST_HANDLE(xen_hvm_altp2m_set_mem_access_t);
> > +typedef struct xen_hvm_altp2m_mem_access xen_hvm_altp2m_mem_access_t;
> > +DEFINE_XEN_GUEST_HANDLE(xen_hvm_altp2m_mem_access_t);
> >  
> >  struct xen_hvm_altp2m_set_mem_access_multi {
> >      /* view */
> > @@ -296,6 +296,8 @@ struct xen_hvm_altp2m_op {
> >  #define HVMOP_altp2m_change_gfn           8
> >  /* Set access for an array of pages */
> >  #define HVMOP_altp2m_set_mem_access_multi 9
> > +/* Get the access of a page of memory from a certain view */
> > +#define HVMOP_altp2m_get_mem_access       10
> >      domid_t domain;
> >      uint16_t pad1;
> >      uint32_t pad2;
> > @@ -303,7 +305,7 @@ struct xen_hvm_altp2m_op {
> >          struct xen_hvm_altp2m_domain_state         domain_state;
> >          struct xen_hvm_altp2m_vcpu_enable_notify   enable_notify;
> >          struct xen_hvm_altp2m_view                 view;
> > -        struct xen_hvm_altp2m_set_mem_access       set_mem_access;
> > +        struct xen_hvm_altp2m_mem_access           mem_access;
> >          struct xen_hvm_altp2m_change_gfn           change_gfn;
> >          struct xen_hvm_altp2m_set_mem_access_multi set_mem_access_multi;
> >          uint8_t pad[64];
> 
> This being exposed to guests, the interface has to be considered
> stable imo, in which case you can't rename things like this. You'd
> need __XEN_INTERFACE_VERSION__ dependent logic (just like is the
> case further up in the file).

Right.  Sorry about that.  Maybe just having separate structs for
get/set would be cleaner in this case, even though they would be
similar.

> Also, to you, George, and whoever else advocates for this, another
> remark regarding the guest accessibility here (at the risk of getting
> flamed once again): The less capable (afaict)
> XENMEM_access_op_{g,s}et_access (previously
> HVMOP_{g,s}et_mem_access) are tools accessible only. I find such
> an inconsistency rather odd.

I don't really know what to reply.  While there probably isn't, as far
as I'm aware, any use-case for the non-altp2m OPs to be accessed from
the guest via HVMOPs directly, if my understanding is correct, the
scenario involving #VE and an in-guest agent would require this
functionality.

Thanks.

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v3] x86/altp2m: Add a subop for obtaining the mem access of a page
  2018-08-27  9:38   ` Adrian Pop
@ 2018-08-27  9:59     ` Jan Beulich
  2018-08-27 10:47       ` Adrian Pop
  0 siblings, 1 reply; 5+ messages in thread
From: Jan Beulich @ 2018-08-27  9:59 UTC (permalink / raw)
  To: Adrian Pop
  Cc: Stefano Stabellini, Wei Liu, Razvan Cojocaru, George Dunlap,
	Andrew Cooper, Ian Jackson, Tim Deegan, Julien Grall,
	Tamas K Lengyel, Sergej Proskurin, xen-devel

>>> On 27.08.18 at 11:38, <apop@bitdefender.com> wrote:
> On Tue, Jul 31, 2018 at 05:37:30AM -0600, Jan Beulich wrote:
>> >>> On 25.07.18 at 13:16, <apop@bitdefender.com> wrote:
>> > --- a/xen/include/public/hvm/hvm_op.h
>> > +++ b/xen/include/public/hvm/hvm_op.h
>> > @@ -234,7 +234,7 @@ struct xen_hvm_altp2m_view {
>> >  typedef struct xen_hvm_altp2m_view xen_hvm_altp2m_view_t;
>> >  DEFINE_XEN_GUEST_HANDLE(xen_hvm_altp2m_view_t);
>> >  
>> > -struct xen_hvm_altp2m_set_mem_access {
>> > +struct xen_hvm_altp2m_mem_access {
>> >      /* view */
>> >      uint16_t view;
>> >      /* Memory type */
>> > @@ -243,8 +243,8 @@ struct xen_hvm_altp2m_set_mem_access {
>> >      /* gfn */
>> >      uint64_t gfn;
>> >  };
>> > -typedef struct xen_hvm_altp2m_set_mem_access xen_hvm_altp2m_set_mem_access_t;
>> > -DEFINE_XEN_GUEST_HANDLE(xen_hvm_altp2m_set_mem_access_t);
>> > +typedef struct xen_hvm_altp2m_mem_access xen_hvm_altp2m_mem_access_t;
>> > +DEFINE_XEN_GUEST_HANDLE(xen_hvm_altp2m_mem_access_t);
>> >  
>> >  struct xen_hvm_altp2m_set_mem_access_multi {
>> >      /* view */
>> > @@ -296,6 +296,8 @@ struct xen_hvm_altp2m_op {
>> >  #define HVMOP_altp2m_change_gfn           8
>> >  /* Set access for an array of pages */
>> >  #define HVMOP_altp2m_set_mem_access_multi 9
>> > +/* Get the access of a page of memory from a certain view */
>> > +#define HVMOP_altp2m_get_mem_access       10
>> >      domid_t domain;
>> >      uint16_t pad1;
>> >      uint32_t pad2;
>> > @@ -303,7 +305,7 @@ struct xen_hvm_altp2m_op {
>> >          struct xen_hvm_altp2m_domain_state         domain_state;
>> >          struct xen_hvm_altp2m_vcpu_enable_notify   enable_notify;
>> >          struct xen_hvm_altp2m_view                 view;
>> > -        struct xen_hvm_altp2m_set_mem_access       set_mem_access;
>> > +        struct xen_hvm_altp2m_mem_access           mem_access;
>> >          struct xen_hvm_altp2m_change_gfn           change_gfn;
>> >          struct xen_hvm_altp2m_set_mem_access_multi set_mem_access_multi;
>> >          uint8_t pad[64];
>> 
>> This being exposed to guests, the interface has to be considered
>> stable imo, in which case you can't rename things like this. You'd
>> need __XEN_INTERFACE_VERSION__ dependent logic (just like is the
>> case further up in the file).
> 
> Right.  Sorry about that.  Maybe just having separate structs for
> get/set would be cleaner in this case, even though they would be
> similar.

Personally I'd prefer to avoid having two structures with identical
layout but different tags. But if others think differently, I'm not
meaning to stand in the way.

Jan



_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v3] x86/altp2m: Add a subop for obtaining the mem access of a page
  2018-08-27  9:59     ` Jan Beulich
@ 2018-08-27 10:47       ` Adrian Pop
  0 siblings, 0 replies; 5+ messages in thread
From: Adrian Pop @ 2018-08-27 10:47 UTC (permalink / raw)
  To: Jan Beulich
  Cc: Stefano Stabellini, Wei Liu, Razvan Cojocaru, George Dunlap,
	Andrew Cooper, Ian Jackson, Tim Deegan, Julien Grall,
	Tamas K Lengyel, Sergej Proskurin, xen-devel

On Mon, Aug 27, 2018 at 03:59:16AM -0600, Jan Beulich wrote:
> >>> On 27.08.18 at 11:38, <apop@bitdefender.com> wrote:
> > On Tue, Jul 31, 2018 at 05:37:30AM -0600, Jan Beulich wrote:
> >> >>> On 25.07.18 at 13:16, <apop@bitdefender.com> wrote:
> >> > --- a/xen/include/public/hvm/hvm_op.h
> >> > +++ b/xen/include/public/hvm/hvm_op.h
> >> > @@ -234,7 +234,7 @@ struct xen_hvm_altp2m_view {
> >> >  typedef struct xen_hvm_altp2m_view xen_hvm_altp2m_view_t;
> >> >  DEFINE_XEN_GUEST_HANDLE(xen_hvm_altp2m_view_t);
> >> >  
> >> > -struct xen_hvm_altp2m_set_mem_access {
> >> > +struct xen_hvm_altp2m_mem_access {
> >> >      /* view */
> >> >      uint16_t view;
> >> >      /* Memory type */
> >> > @@ -243,8 +243,8 @@ struct xen_hvm_altp2m_set_mem_access {
> >> >      /* gfn */
> >> >      uint64_t gfn;
> >> >  };
> >> > -typedef struct xen_hvm_altp2m_set_mem_access xen_hvm_altp2m_set_mem_access_t;
> >> > -DEFINE_XEN_GUEST_HANDLE(xen_hvm_altp2m_set_mem_access_t);
> >> > +typedef struct xen_hvm_altp2m_mem_access xen_hvm_altp2m_mem_access_t;
> >> > +DEFINE_XEN_GUEST_HANDLE(xen_hvm_altp2m_mem_access_t);
> >> >  
> >> >  struct xen_hvm_altp2m_set_mem_access_multi {
> >> >      /* view */
> >> > @@ -296,6 +296,8 @@ struct xen_hvm_altp2m_op {
> >> >  #define HVMOP_altp2m_change_gfn           8
> >> >  /* Set access for an array of pages */
> >> >  #define HVMOP_altp2m_set_mem_access_multi 9
> >> > +/* Get the access of a page of memory from a certain view */
> >> > +#define HVMOP_altp2m_get_mem_access       10
> >> >      domid_t domain;
> >> >      uint16_t pad1;
> >> >      uint32_t pad2;
> >> > @@ -303,7 +305,7 @@ struct xen_hvm_altp2m_op {
> >> >          struct xen_hvm_altp2m_domain_state         domain_state;
> >> >          struct xen_hvm_altp2m_vcpu_enable_notify   enable_notify;
> >> >          struct xen_hvm_altp2m_view                 view;
> >> > -        struct xen_hvm_altp2m_set_mem_access       set_mem_access;
> >> > +        struct xen_hvm_altp2m_mem_access           mem_access;
> >> >          struct xen_hvm_altp2m_change_gfn           change_gfn;
> >> >          struct xen_hvm_altp2m_set_mem_access_multi set_mem_access_multi;
> >> >          uint8_t pad[64];
> >> 
> >> This being exposed to guests, the interface has to be considered
> >> stable imo, in which case you can't rename things like this. You'd
> >> need __XEN_INTERFACE_VERSION__ dependent logic (just like is the
> >> case further up in the file).
> > 
> > Right.  Sorry about that.  Maybe just having separate structs for
> > get/set would be cleaner in this case, even though they would be
> > similar.
> 
> Personally I'd prefer to avoid having two structures with identical
> layout but different tags. But if others think differently, I'm not
> meaning to stand in the way.

Ok then.  I have no strong preference either way.

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2018-08-27 10:47 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-07-25 11:16 [PATCH v3] x86/altp2m: Add a subop for obtaining the mem access of a page Adrian Pop
2018-07-31 11:37 ` Jan Beulich
2018-08-27  9:38   ` Adrian Pop
2018-08-27  9:59     ` Jan Beulich
2018-08-27 10:47       ` Adrian Pop

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).