All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 0/5] Make mem_access APIs and hypercalls generic
@ 2014-04-16  0:25 Aravindh Puthiyaparambil
  2014-04-16  0:25 ` [PATCH v3 1/5] x86/mem_access: Make the mem_access ops generic Aravindh Puthiyaparambil
                   ` (5 more replies)
  0 siblings, 6 replies; 17+ messages in thread
From: Aravindh Puthiyaparambil @ 2014-04-16  0:25 UTC (permalink / raw)
  To: xen-devel
  Cc: Keir Fraser, Ian Campbell, Stefano Stabellini, Ian Jackson,
	Tim Deegan, Jan Beulich

This is a precusor patch to the one that enables mem_access for PV domains.

The mem_access APIs, hypercalls and structures all have HVM specific naming. As
a first step to making this work for PV domains, this patch renames them in a
more generic fashion.

Signed-off-by: Aravindh Puthiyaparambil <aravindp@cisco.com>
Cc: Keir Fraser <keir@xen.org>
Cc: Jan Beulich <jbeulich@suse.com>
Cc: Tim Deegan <tim@xen.org>
Cc: Ian Jackson <ian.jackson@eu.citrix.com>
Cc: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Cc: Ian Campbell <ian.campbell@citrix.com>

  x86/mem_access: Make the mem_access ops generic
  tools/libxc: Make the mem_access APIs generic
  tools/xen-access: Use the new mem_access APIs
  tools/libxc: Remove xc_hvm_[sg]et_mem_access() APIs
  x86/mem_access: Deprecate the HVM mem_access ops

 tools/libxc/xc_mem_access.c         | 54 +++++++++++++++++++++++---
 tools/libxc/xc_misc.c               | 61 ------------------------------
 tools/libxc/xenctrl.h               | 32 ++++++++--------
 tools/tests/xen-access/xen-access.c | 34 ++++++++---------
 xen/arch/x86/hvm/hvm.c              | 74 +-----------------------------------
 xen/arch/x86/mm.c                   |  6 ++-
 xen/arch/x86/mm/mem_access.c        | 75 ++++++++++++++++++++++++++++++++++---
 xen/arch/x86/mm/mem_event.c         |  3 --
 xen/arch/x86/mm/p2m.c               | 31 ++++++++-------
 xen/arch/x86/x86_64/compat/mm.c     | 16 +++++---
 xen/arch/x86/x86_64/mm.c            | 11 +++++-
 xen/common/compat/memory.c          |  2 +
 xen/common/memory.c                 |  2 +-
 xen/include/asm-x86/mem_access.h    |  3 +-
 xen/include/asm-x86/mm.h            |  6 +--
 xen/include/asm-x86/p2m.h           |  6 +--
 xen/include/public/hvm/hvm_op.h     | 42 +--------------------
 xen/include/public/memory.h         | 53 ++++++++++++++++++++++++--
 xen/include/xlat.lst                |  1 +
 19 files changed, 256 insertions(+), 256 deletions(-)

-- 
1.8.3.2

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

* [PATCH v3 1/5] x86/mem_access: Make the mem_access ops generic
  2014-04-16  0:25 [PATCH v3 0/5] Make mem_access APIs and hypercalls generic Aravindh Puthiyaparambil
@ 2014-04-16  0:25 ` Aravindh Puthiyaparambil
  2014-04-16  9:24   ` Jan Beulich
  2014-04-16  0:25 ` [PATCH v3 2/5] tools/libxc: Make the mem_access APIs generic Aravindh Puthiyaparambil
                   ` (4 subsequent siblings)
  5 siblings, 1 reply; 17+ messages in thread
From: Aravindh Puthiyaparambil @ 2014-04-16  0:25 UTC (permalink / raw)
  To: xen-devel; +Cc: Tim Deegan, Keir Fraser, Jan Beulich

This patch does the following:
1. Add mem_access ops under XENMEM_access_ops.
2. Add enums and structs whose names are generic.

Signed-off-by: Aravindh Puthiyaparambil <aravindp@cisco.com>
Cc: Keir Fraser <keir@xen.org>
Cc: Jan Beulich <jbeulich@suse.com>
Cc: Tim Deegan <tim@xen.org>

---
Changes from version 2 of the patch:
1. Move deprecation of HVM ops and removal of enums and structs associated
with them to a seperate patch.
2. Fix return on errors in mem_access_memop().
3. Use XENMEM_access_op when setting up hypercall continuation.
4. Remove pointless opening braces.

Changes from version 1 of the patch:
1. Use MEMOP_CMD_MASK instead of introducing a new mask.
2. Pass "cmd" down from do_memory_op() instead of "op" and
"start_extent".
3. Pass typed handle to mem_access_memop() and use
__copy_field_to_guest().
4. Use ACCESS() macro to remove ordering dependency.
5. Add compat verification for xen_mem_access_op_t.
6. Fix formatting.

Changes from the RFC version of the patch:
1. Removed pointless braces.
2. Change preemption handling to use upper "cmd" bits from
do_memory_op().
3. Delete old interface enum and structs.
4. Remove xenmem_ prefix.
5. Make access uint8_t and place above domid.

diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c
index 38c491e..8363257 100644
--- a/xen/arch/x86/hvm/hvm.c
+++ b/xen/arch/x86/hvm/hvm.c
@@ -4632,7 +4632,7 @@ long do_hvm_op(unsigned long op, XEN_GUEST_HANDLE_PARAM(void) arg)
     {
         struct xen_hvm_get_mem_access a;
         struct domain *d;
-        hvmmem_access_t access;
+        xenmem_access_t access;
 
         if ( copy_from_guest(&a, arg, 1) )
             return -EFAULT;
diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c
index fdc5ed3..719b255 100644
--- a/xen/arch/x86/mm.c
+++ b/xen/arch/x86/mm.c
@@ -104,6 +104,7 @@
 #include <xen/xmalloc.h>
 #include <xen/efi.h>
 #include <xen/grant_table.h>
+#include <xen/hypercall.h>
 #include <asm/paging.h>
 #include <asm/shadow.h>
 #include <asm/page.h>
@@ -4631,9 +4632,10 @@ int xenmem_add_to_physmap_one(
     return rc;
 }
 
-long arch_memory_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg)
+long arch_memory_op(unsigned long cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
 {
     int rc;
+    int op = cmd & MEMOP_CMD_MASK;
 
     switch ( op )
     {
@@ -4853,7 +4855,7 @@ long arch_memory_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg)
     }
 
     default:
-        return subarch_memory_op(op, arg);
+        return subarch_memory_op(cmd, arg);
     }
 
     return 0;
diff --git a/xen/arch/x86/mm/mem_access.c b/xen/arch/x86/mm/mem_access.c
index 50aaf27..462c318 100644
--- a/xen/arch/x86/mm/mem_access.c
+++ b/xen/arch/x86/mm/mem_access.c
@@ -21,31 +21,94 @@
  */
 
 
+#include <xen/sched.h>
+#include <xen/guest_access.h>
+#include <xen/hypercall.h>
 #include <asm/p2m.h>
 #include <asm/mem_event.h>
+#include <xsm/xsm.h>
 
 
-int mem_access_memop(struct domain *d, xen_mem_event_op_t *meo)
+int mem_access_memop(unsigned long cmd,
+                     XEN_GUEST_HANDLE_PARAM(xen_mem_access_op_t) arg)
 {
-    int rc;
+    long rc;
+    xen_mem_access_op_t mao;
+    struct domain *d;
 
+    if ( copy_from_guest(&mao, arg, 1) )
+        return -EFAULT;
+
+    rc = rcu_lock_live_remote_domain_by_id(mao.domid, &d);
+    if ( rc )
+        return rc;
+
+    rc = -EINVAL;
+    if ( !is_hvm_domain(d) )
+        goto out;
+
+    rc = xsm_mem_event_op(XSM_TARGET, d, XENMEM_access_op);
+    if ( rc )
+        goto out;
+
+    rc = -ENODEV;
     if ( unlikely(!d->mem_event->access.ring_page) )
-        return -ENODEV;
+        goto out;
 
-    switch( meo->op )
+    switch ( mao.op )
     {
     case XENMEM_access_op_resume:
-    {
         p2m_mem_access_resume(d);
         rc = 0;
+        break;
+
+    case XENMEM_access_op_set_access:
+    {
+        unsigned long start_iter = cmd & ~MEMOP_CMD_MASK;
+
+        rc = -EINVAL;
+        if ( (mao.pfn != ~0ull) &&
+             (mao.nr < start_iter ||
+              ((mao.pfn + mao.nr - 1) < mao.pfn) ||
+              ((mao.pfn + mao.nr - 1) > domain_get_maximum_gpfn(d))) )
+            break;
+
+        rc = p2m_set_mem_access(d, mao.pfn, mao.nr, start_iter,
+                                MEMOP_CMD_MASK, mao.access);
+        if ( rc > 0 )
+        {
+            ASSERT(!(rc & MEMOP_CMD_MASK));
+            rc = hypercall_create_continuation(__HYPERVISOR_memory_op, "lh",
+                                               XENMEM_access_op | rc, arg);
+        }
+        break;
+    }
+
+    case XENMEM_access_op_get_access:
+    {
+        xenmem_access_t access;
+
+        rc = -EINVAL;
+        if ( (mao.pfn > domain_get_maximum_gpfn(d)) && mao.pfn != ~0ull )
+            break;
+
+        rc = p2m_get_mem_access(d, mao.pfn, &access);
+        if ( rc != 0 )
+            break;
+
+        mao.access = access;
+        rc = __copy_field_to_guest(arg, &mao, access) ? -EFAULT : 0;
+
+        break;
     }
-    break;
 
     default:
         rc = -ENOSYS;
         break;
     }
 
+ out:
+    rcu_unlock_domain(d);
     return rc;
 }
 
diff --git a/xen/arch/x86/mm/mem_event.c b/xen/arch/x86/mm/mem_event.c
index d00e404..36b9dba 100644
--- a/xen/arch/x86/mm/mem_event.c
+++ b/xen/arch/x86/mm/mem_event.c
@@ -458,9 +458,6 @@ int do_mem_event_op(int op, uint32_t domain, void *arg)
         case XENMEM_paging_op:
             ret = mem_paging_memop(d, (xen_mem_event_op_t *) arg);
             break;
-        case XENMEM_access_op:
-            ret = mem_access_memop(d, (xen_mem_event_op_t *) arg);
-            break;
         case XENMEM_sharing_op:
             ret = mem_sharing_memop(d, (xen_mem_sharing_op_t *) arg);
             break;
diff --git a/xen/arch/x86/mm/p2m.c b/xen/arch/x86/mm/p2m.c
index c38f334..be77d7c 100644
--- a/xen/arch/x86/mm/p2m.c
+++ b/xen/arch/x86/mm/p2m.c
@@ -1350,7 +1350,7 @@ void p2m_mem_access_resume(struct domain *d)
 /* Set access type for a region of pfns.
  * If start_pfn == -1ul, sets the default access type */
 long p2m_set_mem_access(struct domain *d, unsigned long pfn, uint32_t nr,
-                        uint32_t start, uint32_t mask, hvmmem_access_t access)
+                        uint32_t start, uint32_t mask, xenmem_access_t access)
 {
     struct p2m_domain *p2m = p2m_get_hostp2m(d);
     p2m_access_t a, _a;
@@ -1359,7 +1359,7 @@ long p2m_set_mem_access(struct domain *d, unsigned long pfn, uint32_t nr,
     long rc = 0;
 
     static const p2m_access_t memaccess[] = {
-#define ACCESS(ac) [HVMMEM_access_##ac] = p2m_access_##ac
+#define ACCESS(ac) [XENMEM_access_##ac] = p2m_access_##ac
         ACCESS(n),
         ACCESS(r),
         ACCESS(w),
@@ -1378,7 +1378,7 @@ long p2m_set_mem_access(struct domain *d, unsigned long pfn, uint32_t nr,
     case 0 ... ARRAY_SIZE(memaccess) - 1:
         a = memaccess[access];
         break;
-    case HVMMEM_access_default:
+    case XENMEM_access_default:
         a = p2m->default_access;
         break;
     default:
@@ -1416,23 +1416,26 @@ long p2m_set_mem_access(struct domain *d, unsigned long pfn, uint32_t nr,
 /* Get access type for a pfn
  * If pfn == -1ul, gets the default access type */
 int p2m_get_mem_access(struct domain *d, unsigned long pfn, 
-                       hvmmem_access_t *access)
+                       xenmem_access_t *access)
 {
     struct p2m_domain *p2m = p2m_get_hostp2m(d);
     p2m_type_t t;
     p2m_access_t a;
     mfn_t mfn;
 
-    static const hvmmem_access_t memaccess[] = {
-        HVMMEM_access_n,
-        HVMMEM_access_r,
-        HVMMEM_access_w,
-        HVMMEM_access_rw,
-        HVMMEM_access_x,
-        HVMMEM_access_rx,
-        HVMMEM_access_wx,
-        HVMMEM_access_rwx,
-        HVMMEM_access_rx2rw
+    static const xenmem_access_t memaccess[] = {
+#define ACCESS(ac) [XENMEM_access_##ac] = XENMEM_access_##ac
+            ACCESS(n),
+            ACCESS(r),
+            ACCESS(w),
+            ACCESS(rw),
+            ACCESS(x),
+            ACCESS(rx),
+            ACCESS(wx),
+            ACCESS(rwx),
+            ACCESS(rx2rw),
+            ACCESS(n2rwx),
+#undef ACCESS
     };
 
     /* If request to get default access */
diff --git a/xen/arch/x86/x86_64/compat/mm.c b/xen/arch/x86/x86_64/compat/mm.c
index 0a8408b..b768158 100644
--- a/xen/arch/x86/x86_64/compat/mm.c
+++ b/xen/arch/x86/x86_64/compat/mm.c
@@ -4,6 +4,7 @@
 #include <compat/xen.h>
 #include <asm/mem_event.h>
 #include <asm/mem_sharing.h>
+#include <asm/mem_access.h>
 
 int compat_set_gdt(XEN_GUEST_HANDLE_PARAM(uint) frame_list, unsigned int entries)
 {
@@ -44,7 +45,7 @@ int compat_update_descriptor(u32 pa_lo, u32 pa_hi, u32 desc_lo, u32 desc_hi)
                                 desc_lo | ((u64)desc_hi << 32));
 }
 
-int compat_arch_memory_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg)
+int compat_arch_memory_op(unsigned long cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
 {
     struct compat_machphys_mfn_list xmml;
     l2_pgentry_t l2e;
@@ -52,6 +53,7 @@ int compat_arch_memory_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg)
     compat_pfn_t mfn;
     unsigned int i;
     int rc = 0;
+    int op = cmd & MEMOP_CMD_MASK;
 
     switch ( op )
     {
@@ -68,7 +70,7 @@ int compat_arch_memory_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg)
         XLAT_foreign_memory_map(nat, &cmp);
 #undef XLAT_memory_map_HNDL_buffer
 
-        rc = arch_memory_op(op, guest_handle_from_ptr(nat, void));
+        rc = arch_memory_op(cmd, guest_handle_from_ptr(nat, void));
 
         break;
     }
@@ -87,7 +89,7 @@ int compat_arch_memory_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg)
         XLAT_memory_map(nat, &cmp);
 #undef XLAT_memory_map_HNDL_buffer
 
-        rc = arch_memory_op(op, guest_handle_from_ptr(nat, void));
+        rc = arch_memory_op(cmd, guest_handle_from_ptr(nat, void));
         if ( rc < 0 )
             break;
 
@@ -111,7 +113,7 @@ int compat_arch_memory_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg)
 
         XLAT_pod_target(nat, &cmp);
 
-        rc = arch_memory_op(op, guest_handle_from_ptr(nat, void));
+        rc = arch_memory_op(cmd, guest_handle_from_ptr(nat, void));
         if ( rc < 0 )
             break;
 
@@ -185,7 +187,6 @@ int compat_arch_memory_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg)
         return mem_sharing_get_nr_shared_mfns();
 
     case XENMEM_paging_op:
-    case XENMEM_access_op:
     {
         xen_mem_event_op_t meo;
         if ( copy_from_guest(&meo, arg, 1) )
@@ -195,6 +196,11 @@ int compat_arch_memory_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg)
             return -EFAULT;
         break;
     }
+
+    case XENMEM_access_op:
+        rc = mem_access_memop(cmd, guest_handle_cast(arg, xen_mem_access_op_t));
+        break;
+
     case XENMEM_sharing_op:
     {
         xen_mem_sharing_op_t mso;
diff --git a/xen/arch/x86/x86_64/mm.c b/xen/arch/x86/x86_64/mm.c
index f6ea012..264e39f 100644
--- a/xen/arch/x86/x86_64/mm.c
+++ b/xen/arch/x86/x86_64/mm.c
@@ -25,6 +25,7 @@
 #include <xen/numa.h>
 #include <xen/nodemask.h>
 #include <xen/guest_access.h>
+#include <xen/hypercall.h>
 #include <asm/current.h>
 #include <asm/asm_defns.h>
 #include <asm/page.h>
@@ -36,6 +37,7 @@
 #include <asm/numa.h>
 #include <asm/mem_event.h>
 #include <asm/mem_sharing.h>
+#include <asm/mem_access.h>
 #include <public/memory.h>
 
 /* Parameters for PFN/MADDR compression. */
@@ -948,7 +950,7 @@ void __init subarch_init_memory(void)
     }
 }
 
-long subarch_memory_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg)
+long subarch_memory_op(unsigned long cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
 {
     struct xen_machphys_mfn_list xmml;
     l3_pgentry_t l3e;
@@ -957,6 +959,7 @@ long subarch_memory_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg)
     xen_pfn_t mfn, last_mfn;
     unsigned int i;
     long rc = 0;
+    int op = cmd & MEMOP_CMD_MASK;
 
     switch ( op )
     {
@@ -1007,7 +1010,6 @@ long subarch_memory_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg)
         return mem_sharing_get_nr_shared_mfns();
 
     case XENMEM_paging_op:
-    case XENMEM_access_op:
     {
         xen_mem_event_op_t meo;
         if ( copy_from_guest(&meo, arg, 1) )
@@ -1017,6 +1019,11 @@ long subarch_memory_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg)
             return -EFAULT;
         break;
     }
+
+    case XENMEM_access_op:
+        rc = mem_access_memop(cmd, guest_handle_cast(arg, xen_mem_access_op_t));
+        break;
+
     case XENMEM_sharing_op:
     {
         xen_mem_sharing_op_t mso;
diff --git a/xen/common/compat/memory.c b/xen/common/compat/memory.c
index daa2e04..25dc016 100644
--- a/xen/common/compat/memory.c
+++ b/xen/common/compat/memory.c
@@ -13,6 +13,8 @@ CHECK_TYPE(domid);
 #undef compat_domid_t
 #undef xen_domid_t
 
+CHECK_mem_access_op;
+
 int compat_memory_op(unsigned int cmd, XEN_GUEST_HANDLE_PARAM(void) compat)
 {
     int split, op = cmd & MEMOP_CMD_MASK;
diff --git a/xen/common/memory.c b/xen/common/memory.c
index 4d6ffee..257f4b0 100644
--- a/xen/common/memory.c
+++ b/xen/common/memory.c
@@ -964,7 +964,7 @@ long do_memory_op(unsigned long cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
         break;
 
     default:
-        rc = arch_memory_op(op, arg);
+        rc = arch_memory_op(cmd, arg);
         break;
     }
 
diff --git a/xen/include/asm-x86/mem_access.h b/xen/include/asm-x86/mem_access.h
index 60c2834..5c7c5fd 100644
--- a/xen/include/asm-x86/mem_access.h
+++ b/xen/include/asm-x86/mem_access.h
@@ -23,7 +23,8 @@
 #ifndef _XEN_ASM_MEM_ACCESS_H
 #define _XEN_ASM_MEM_ACCESS_H
 
-int mem_access_memop(struct domain *d, xen_mem_event_op_t *meo);
+int mem_access_memop(unsigned long cmd,
+                     XEN_GUEST_HANDLE_PARAM(xen_mem_access_op_t) arg);
 int mem_access_send_req(struct domain *d, mem_event_request_t *req);
 
 #endif /* _XEN_ASM_MEM_ACCESS_H */
diff --git a/xen/include/asm-x86/mm.h b/xen/include/asm-x86/mm.h
index c835f76..7059adc 100644
--- a/xen/include/asm-x86/mm.h
+++ b/xen/include/asm-x86/mm.h
@@ -561,9 +561,9 @@ void *do_page_walk(struct vcpu *v, unsigned long addr);
 int __sync_local_execstate(void);
 
 /* Arch-specific portion of memory_op hypercall. */
-long arch_memory_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg);
-long subarch_memory_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg);
-int compat_arch_memory_op(int op, XEN_GUEST_HANDLE_PARAM(void));
+long arch_memory_op(unsigned long cmd, XEN_GUEST_HANDLE_PARAM(void) arg);
+long subarch_memory_op(unsigned long cmd, XEN_GUEST_HANDLE_PARAM(void) arg);
+int compat_arch_memory_op(unsigned long cmd, XEN_GUEST_HANDLE_PARAM(void));
 int compat_subarch_memory_op(int op, XEN_GUEST_HANDLE_PARAM(void));
 
 int steal_page(
diff --git a/xen/include/asm-x86/p2m.h b/xen/include/asm-x86/p2m.h
index d644f82..743bb59 100644
--- a/xen/include/asm-x86/p2m.h
+++ b/xen/include/asm-x86/p2m.h
@@ -577,12 +577,12 @@ void p2m_mem_access_resume(struct domain *d);
 /* Set access type for a region of pfns.
  * If start_pfn == -1ul, sets the default access type */
 long p2m_set_mem_access(struct domain *d, unsigned long start_pfn, uint32_t nr,
-                        uint32_t start, uint32_t mask, hvmmem_access_t access);
+                        uint32_t start, uint32_t mask, xenmem_access_t access);
 
 /* Get access type for a pfn
  * If pfn == -1ul, gets the default access type */
-int p2m_get_mem_access(struct domain *d, unsigned long pfn, 
-                       hvmmem_access_t *access);
+int p2m_get_mem_access(struct domain *d, unsigned long pfn,
+                       xenmem_access_t *access);
 
 /* 
  * Internal functions, only called by other p2m code
diff --git a/xen/include/public/memory.h b/xen/include/public/memory.h
index f19ac14..5bcd475 100644
--- a/xen/include/public/memory.h
+++ b/xen/include/public/memory.h
@@ -363,9 +363,6 @@ typedef struct xen_pod_target xen_pod_target_t;
 #define XENMEM_paging_op_evict              1
 #define XENMEM_paging_op_prep               2
 
-#define XENMEM_access_op                    21
-#define XENMEM_access_op_resume             0
-
 struct xen_mem_event_op {
     uint8_t     op;         /* XENMEM_*_op_* */
     domid_t     domain;
@@ -379,6 +376,56 @@ struct xen_mem_event_op {
 typedef struct xen_mem_event_op xen_mem_event_op_t;
 DEFINE_XEN_GUEST_HANDLE(xen_mem_event_op_t);
 
+#define XENMEM_access_op                    21
+#define XENMEM_access_op_resume             0
+#define XENMEM_access_op_set_access         1
+#define XENMEM_access_op_get_access         2
+
+typedef enum {
+    XENMEM_access_n,
+    XENMEM_access_r,
+    XENMEM_access_w,
+    XENMEM_access_rw,
+    XENMEM_access_x,
+    XENMEM_access_rx,
+    XENMEM_access_wx,
+    XENMEM_access_rwx,
+    /*
+     * Page starts off as r-x, but automatically
+     * change to r-w on a write
+     */
+    XENMEM_access_rx2rw,
+    /*
+     * Log access: starts off as n, automatically
+     * goes to rwx, generating an event without
+     * pausing the vcpu
+     */
+    XENMEM_access_n2rwx,
+    /* Take the domain default */
+    XENMEM_access_default
+} xenmem_access_t;
+
+struct xen_mem_access_op {
+    /* XENMEM_access_op_* */
+    uint8_t op;
+    /* xenmem_access_t */
+    uint8_t access;
+    domid_t domid;
+    /*
+     * Number of pages for set op
+     * Ignored on setting default access and other ops
+     */
+    uint32_t nr;
+    /*
+     * First pfn for set op
+     * pfn for get op
+     * ~0ull is used to set and get the default access for pages
+     */
+    uint64_aligned_t pfn;
+};
+typedef struct xen_mem_access_op xen_mem_access_op_t;
+DEFINE_XEN_GUEST_HANDLE(xen_mem_access_op_t);
+
 #define XENMEM_sharing_op                   22
 #define XENMEM_sharing_op_nominate_gfn      0
 #define XENMEM_sharing_op_nominate_gref     1
diff --git a/xen/include/xlat.lst b/xen/include/xlat.lst
index 5d354d8..9a35dd7 100644
--- a/xen/include/xlat.lst
+++ b/xen/include/xlat.lst
@@ -60,6 +60,7 @@
 !	memory_exchange			memory.h
 !	memory_map			memory.h
 !	memory_reservation		memory.h
+?	mem_access_op		memory.h
 !	pod_target			memory.h
 !	remove_from_physmap		memory.h
 ?	physdev_eoi			physdev.h
-- 
1.8.3.2

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

* [PATCH v3 2/5] tools/libxc: Make the mem_access APIs generic
  2014-04-16  0:25 [PATCH v3 0/5] Make mem_access APIs and hypercalls generic Aravindh Puthiyaparambil
  2014-04-16  0:25 ` [PATCH v3 1/5] x86/mem_access: Make the mem_access ops generic Aravindh Puthiyaparambil
@ 2014-04-16  0:25 ` Aravindh Puthiyaparambil
  2014-04-16 15:58   ` Ian Campbell
  2014-04-17  9:46   ` Tamas Lengyel
  2014-04-16  0:25 ` [PATCH v3 3/5] tools/xen-access: Use the new mem_access APIs Aravindh Puthiyaparambil
                   ` (3 subsequent siblings)
  5 siblings, 2 replies; 17+ messages in thread
From: Aravindh Puthiyaparambil @ 2014-04-16  0:25 UTC (permalink / raw)
  To: xen-devel; +Cc: Ian Jackson, Ian Campbell, Stefano Stabellini

Add new xc_[sg]et_mem_access() APIs.

Signed-off-by: Aravindh Puthiyaparambil <aravindp@cisco.com>
Cc: Ian Jackson <ian.jackson@eu.citrix.com>
Cc: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Cc: Ian Campbell <ian.campbell@citrix.com>

---
Changes from version 2 of the patch:
1. Move removal of xc_hvm_[sg]et_mem_access() APIs into a seperate
patch.

Changes from version 1 of the patch:
1. Remove unused "gfn" from the parameter list of
xc_mem_access_resume().
2. Use structure initialisation.
3. Write "access" back only in the case of do_memory_op returning
success.
4. Fix formatting.

Changes from the RFC version of the patch:
1. Remove xc_mem_access_memop() wrapper.
2. Remove xc_hvm_[sg]et_mem_access() APIs.

diff --git a/tools/libxc/xc_mem_access.c b/tools/libxc/xc_mem_access.c
index a50c145..f436e69 100644
--- a/tools/libxc/xc_mem_access.c
+++ b/tools/libxc/xc_mem_access.c
@@ -22,7 +22,7 @@
  */
 
 #include "xc_private.h"
-
+#include <xen/memory.h>
 
 int xc_mem_access_enable(xc_interface *xch, domid_t domain_id,
                          uint32_t *port)
@@ -47,12 +47,54 @@ int xc_mem_access_disable(xc_interface *xch, domid_t domain_id)
                                 NULL);
 }
 
-int xc_mem_access_resume(xc_interface *xch, domid_t domain_id, unsigned long gfn)
+int xc_mem_access_resume(xc_interface *xch, domid_t domain_id)
+{
+    xen_mem_access_op_t mao =
+    {
+        .op    = XENMEM_access_op_resume,
+        .domid = domain_id
+    };
+
+    return do_memory_op(xch, XENMEM_access_op, &mao, sizeof(mao));
+}
+
+int xc_set_mem_access(xc_interface *xch,
+                      domid_t domain_id,
+                      xenmem_access_t access,
+                      uint64_t first_pfn,
+                      uint32_t nr)
 {
-    return xc_mem_event_memop(xch, domain_id,
-                                XENMEM_access_op_resume,
-                                XENMEM_access_op,
-                                gfn, NULL);
+    xen_mem_access_op_t mao =
+    {
+        .op     = XENMEM_access_op_set_access,
+        .domid  = domain_id,
+        .access = access,
+        .pfn    = first_pfn,
+        .nr     = nr
+    };
+
+    return do_memory_op(xch, XENMEM_access_op, &mao, sizeof(mao));
+}
+
+int xc_get_mem_access(xc_interface *xch,
+                      domid_t domain_id,
+                      uint64_t pfn,
+                      xenmem_access_t *access)
+{
+    int rc;
+    xen_mem_access_op_t mao =
+    {
+        .op    = XENMEM_access_op_get_access,
+        .domid = domain_id,
+        .pfn   = pfn
+    };
+
+    rc = do_memory_op(xch, XENMEM_access_op, &mao, sizeof(mao));
+
+    if ( rc == 0 )
+        *access = mao.access;
+
+    return rc;
 }
 
 /*
diff --git a/tools/libxc/xenctrl.h b/tools/libxc/xenctrl.h
index e3a32f2..3513ddb 100644
--- a/tools/libxc/xenctrl.h
+++ b/tools/libxc/xenctrl.h
@@ -2059,8 +2059,22 @@ int xc_mem_paging_load(xc_interface *xch, domid_t domain_id,
  */
 int xc_mem_access_enable(xc_interface *xch, domid_t domain_id, uint32_t *port);
 int xc_mem_access_disable(xc_interface *xch, domid_t domain_id);
-int xc_mem_access_resume(xc_interface *xch, domid_t domain_id,
-                         unsigned long gfn);
+int xc_mem_access_resume(xc_interface *xch, domid_t domain_id);
+
+/*
+ * Set a range of memory to a specific access.
+ * Allowed types are XENMEM_access_default, XENMEM_access_n, any combination of
+ * XENMEM_access_ + (rwx), and XENMEM_access_rx2rw
+ */
+int xc_set_mem_access(xc_interface *xch, domid_t domain_id,
+                      xenmem_access_t access, uint64_t first_pfn,
+                      uint32_t nr);
+
+/*
+ * Gets the mem access for the given page (returned in access on success)
+ */
+int xc_get_mem_access(xc_interface *xch, domid_t domain_id,
+                      uint64_t pfn, xenmem_access_t *access);
 
 /***
  * Memory sharing operations.
-- 
1.8.3.2

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

* [PATCH v3 3/5] tools/xen-access: Use the new mem_access APIs
  2014-04-16  0:25 [PATCH v3 0/5] Make mem_access APIs and hypercalls generic Aravindh Puthiyaparambil
  2014-04-16  0:25 ` [PATCH v3 1/5] x86/mem_access: Make the mem_access ops generic Aravindh Puthiyaparambil
  2014-04-16  0:25 ` [PATCH v3 2/5] tools/libxc: Make the mem_access APIs generic Aravindh Puthiyaparambil
@ 2014-04-16  0:25 ` Aravindh Puthiyaparambil
  2014-04-16 15:58   ` Ian Campbell
  2014-04-16  0:25 ` [PATCH v3 4/5] tools/libxc: Remove xc_hvm_[sg]et_mem_access() APIs Aravindh Puthiyaparambil
                   ` (2 subsequent siblings)
  5 siblings, 1 reply; 17+ messages in thread
From: Aravindh Puthiyaparambil @ 2014-04-16  0:25 UTC (permalink / raw)
  To: xen-devel; +Cc: Ian Jackson, Ian Campbell, Stefano Stabellini

Modify the xen-access test program to use the new mem_access APIs.

Signed-off-by: Aravindh Puthiyaparambil <aravindp@cisco.com>
Cc: Ian Jackson <ian.jackson@eu.citrix.com>
Cc: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Cc: Ian Campbell <ian.campbell@citrix.com>

---
No changes from version 2 of the patch.

Changes from version 1 of the patch:
Remove extra "gfn" parameter from xc_mem_access_resume() call.

diff --git a/tools/tests/xen-access/xen-access.c b/tools/tests/xen-access/xen-access.c
index f6522a1..0a84bd5 100644
--- a/tools/tests/xen-access/xen-access.c
+++ b/tools/tests/xen-access/xen-access.c
@@ -410,8 +410,7 @@ static int xenaccess_resume_page(xenaccess_t *paging, mem_event_response_t *rsp)
         goto out;
 
     /* Tell Xen page is ready */
-    ret = xc_mem_access_resume(paging->xc_handle, paging->mem_event.domain_id,
-                               rsp->gfn);
+    ret = xc_mem_access_resume(paging->xc_handle, paging->mem_event.domain_id);
     ret = xc_evtchn_notify(paging->mem_event.xce_handle,
                            paging->mem_event.port);
 
@@ -440,8 +439,8 @@ int main(int argc, char *argv[])
     int rc = -1;
     int rc1;
     xc_interface *xch;
-    hvmmem_access_t default_access = HVMMEM_access_rwx;
-    hvmmem_access_t after_first_access = HVMMEM_access_rwx;
+    xenmem_access_t default_access = XENMEM_access_rwx;
+    xenmem_access_t after_first_access = XENMEM_access_rwx;
     int required = 0;
     int int3 = 0;
     int shutting_down = 0;
@@ -475,13 +474,13 @@ int main(int argc, char *argv[])
 
     if ( !strcmp(argv[0], "write") )
     {
-        default_access = HVMMEM_access_rx;
-        after_first_access = HVMMEM_access_rwx;
+        default_access = XENMEM_access_rx;
+        after_first_access = XENMEM_access_rwx;
     }
     else if ( !strcmp(argv[0], "exec") )
     {
-        default_access = HVMMEM_access_rw;
-        after_first_access = HVMMEM_access_rwx;
+        default_access = XENMEM_access_rw;
+        after_first_access = XENMEM_access_rwx;
     }
     else if ( !strcmp(argv[0], "int3") )
     {
@@ -520,15 +519,15 @@ int main(int argc, char *argv[])
     }
 
     /* Set the default access type and convert all pages to it */
-    rc = xc_hvm_set_mem_access(xch, domain_id, default_access, ~0ull, 0);
+    rc = xc_set_mem_access(xch, domain_id, default_access, ~0ull, 0);
     if ( rc < 0 )
     {
         ERROR("Error %d setting default mem access type\n", rc);
         goto exit;
     }
 
-    rc = xc_hvm_set_mem_access(xch, domain_id, default_access, 0,
-                               xenaccess->domain_info->max_pages);
+    rc = xc_set_mem_access(xch, domain_id, default_access, 0,
+                           xenaccess->domain_info->max_pages);
     if ( rc < 0 )
     {
         ERROR("Error %d setting all memory to access type %d\n", rc,
@@ -554,8 +553,9 @@ int main(int argc, char *argv[])
             DPRINTF("xenaccess shutting down on signal %d\n", interrupted);
 
             /* Unregister for every event */
-            rc = xc_hvm_set_mem_access(xch, domain_id, HVMMEM_access_rwx, ~0ull, 0);
-            rc = xc_hvm_set_mem_access(xch, domain_id, HVMMEM_access_rwx, 0, xenaccess->domain_info->max_pages);
+            rc = xc_set_mem_access(xch, domain_id, XENMEM_access_rwx, ~0ull, 0);
+            rc = xc_set_mem_access(xch, domain_id, XENMEM_access_rwx, 0,
+                                   xenaccess->domain_info->max_pages);
             rc = xc_set_hvm_param(xch, domain_id, HVM_PARAM_MEMORY_EVENT_INT3, HVMPME_mode_disabled);
 
             shutting_down = 1;
@@ -575,7 +575,7 @@ int main(int argc, char *argv[])
 
         while ( RING_HAS_UNCONSUMED_REQUESTS(&xenaccess->mem_event.back_ring) )
         {
-            hvmmem_access_t access;
+            xenmem_access_t access;
 
             rc = get_request(&xenaccess->mem_event, &req);
             if ( rc != 0 )
@@ -591,7 +591,7 @@ int main(int argc, char *argv[])
 
             switch (req.reason) {
             case MEM_EVENT_REASON_VIOLATION:
-                rc = xc_hvm_get_mem_access(xch, domain_id, req.gfn, &access);
+                rc = xc_get_mem_access(xch, domain_id, req.gfn, &access);
                 if (rc < 0)
                 {
                     ERROR("Error %d getting mem_access event\n", rc);
@@ -611,8 +611,8 @@ int main(int argc, char *argv[])
 
                 if ( default_access != after_first_access )
                 {
-                    rc = xc_hvm_set_mem_access(xch, domain_id,
-                                               after_first_access, req.gfn, 1);
+                    rc = xc_set_mem_access(xch, domain_id, after_first_access,
+                                           req.gfn, 1);
                     if (rc < 0)
                     {
                         ERROR("Error %d setting gfn to access_type %d\n", rc,
-- 
1.8.3.2

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

* [PATCH v3 4/5] tools/libxc: Remove xc_hvm_[sg]et_mem_access() APIs
  2014-04-16  0:25 [PATCH v3 0/5] Make mem_access APIs and hypercalls generic Aravindh Puthiyaparambil
                   ` (2 preceding siblings ...)
  2014-04-16  0:25 ` [PATCH v3 3/5] tools/xen-access: Use the new mem_access APIs Aravindh Puthiyaparambil
@ 2014-04-16  0:25 ` Aravindh Puthiyaparambil
  2014-04-16 15:59   ` Ian Campbell
  2014-04-16  0:25 ` [PATCH v3 5/5] x86/mem_access: Deprecate the HVM mem_access ops Aravindh Puthiyaparambil
  2014-04-24 11:13 ` [PATCH v3 0/5] Make mem_access APIs and hypercalls generic Tim Deegan
  5 siblings, 1 reply; 17+ messages in thread
From: Aravindh Puthiyaparambil @ 2014-04-16  0:25 UTC (permalink / raw)
  To: xen-devel; +Cc: Ian Jackson, Ian Campbell, Stefano Stabellini

Remove xc_hvm_[sg]et_mem_access() APIs which have been replaced by
xc_[sg]_mem_access() APIs.

Signed-off-by: Aravindh Puthiyaparambil <aravindp@cisco.com>
Cc: Ian Jackson <ian.jackson@eu.citrix.com>
Cc: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Cc: Ian Campbell <ian.campbell@citrix.com>

---
This was part of "tools/libxc: Make the mem_access APIs generic" in the
earlier versions of the series and is now a seperate patch.

diff --git a/tools/libxc/xc_misc.c b/tools/libxc/xc_misc.c
index 3303454..4143de6 100644
--- a/tools/libxc/xc_misc.c
+++ b/tools/libxc/xc_misc.c
@@ -593,67 +593,6 @@ int xc_hvm_set_mem_type(
     return rc;
 }
 
-int xc_hvm_set_mem_access(
-    xc_interface *xch, domid_t dom, hvmmem_access_t mem_access, uint64_t first_pfn, uint64_t nr)
-{
-    DECLARE_HYPERCALL;
-    DECLARE_HYPERCALL_BUFFER(struct xen_hvm_set_mem_access, arg);
-    int rc;
-
-    arg = xc_hypercall_buffer_alloc(xch, arg, sizeof(*arg));
-    if ( arg == NULL )
-    {
-        PERROR("Could not allocate memory for xc_hvm_set_mem_access hypercall");
-        return -1;
-    }
-
-    arg->domid         = dom;
-    arg->hvmmem_access = mem_access;
-    arg->first_pfn     = first_pfn;
-    arg->nr            = nr;
-
-    hypercall.op     = __HYPERVISOR_hvm_op;
-    hypercall.arg[0] = HVMOP_set_mem_access;
-    hypercall.arg[1] = HYPERCALL_BUFFER_AS_ARG(arg);
-
-    rc = do_xen_hypercall(xch, &hypercall);
-
-    xc_hypercall_buffer_free(xch, arg);
-
-    return rc;
-}
-
-int xc_hvm_get_mem_access(
-    xc_interface *xch, domid_t dom, uint64_t pfn, hvmmem_access_t* mem_access)
-{
-    DECLARE_HYPERCALL;
-    DECLARE_HYPERCALL_BUFFER(struct xen_hvm_get_mem_access, arg);
-    int rc;
-
-    arg = xc_hypercall_buffer_alloc(xch, arg, sizeof(*arg));
-    if ( arg == NULL )
-    {
-        PERROR("Could not allocate memory for xc_hvm_get_mem_access hypercall");
-        return -1;
-    }
-
-    arg->domid       = dom;
-    arg->pfn         = pfn;
-
-    hypercall.op     = __HYPERVISOR_hvm_op;
-    hypercall.arg[0] = HVMOP_get_mem_access;
-    hypercall.arg[1] = HYPERCALL_BUFFER_AS_ARG(arg);
-
-    rc = do_xen_hypercall(xch, &hypercall);
-
-    if ( !rc )
-        *mem_access = arg->hvmmem_access;
-
-    xc_hypercall_buffer_free(xch, arg);
-
-    return rc;
-}
-
 int xc_hvm_inject_trap(
     xc_interface *xch, domid_t dom, int vcpu, uint32_t vector,
     uint32_t type, uint32_t error_code, uint32_t insn_len,
diff --git a/tools/libxc/xenctrl.h b/tools/libxc/xenctrl.h
index 3513ddb..02129f7 100644
--- a/tools/libxc/xenctrl.h
+++ b/tools/libxc/xenctrl.h
@@ -1729,20 +1729,6 @@ int xc_hvm_set_mem_type(
     xc_interface *xch, domid_t dom, hvmmem_type_t memtype, uint64_t first_pfn, uint64_t nr);
 
 /*
- * Set a range of memory to a specific access.
- * Allowed types are HVMMEM_access_default, HVMMEM_access_n, any combination of 
- * HVM_access_ + (rwx), and HVM_access_rx2rw
- */
-int xc_hvm_set_mem_access(
-    xc_interface *xch, domid_t dom, hvmmem_access_t memaccess, uint64_t first_pfn, uint64_t nr);
-
-/*
- * Gets the mem access for the given page (returned in memacess on success)
- */
-int xc_hvm_get_mem_access(
-    xc_interface *xch, domid_t dom, uint64_t pfn, hvmmem_access_t* memaccess);
-
-/*
  * Injects a hardware/software CPU trap, to take effect the next time the HVM 
  * resumes. 
  */
-- 
1.8.3.2

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

* [PATCH v3 5/5] x86/mem_access: Deprecate the HVM mem_access ops
  2014-04-16  0:25 [PATCH v3 0/5] Make mem_access APIs and hypercalls generic Aravindh Puthiyaparambil
                   ` (3 preceding siblings ...)
  2014-04-16  0:25 ` [PATCH v3 4/5] tools/libxc: Remove xc_hvm_[sg]et_mem_access() APIs Aravindh Puthiyaparambil
@ 2014-04-16  0:25 ` Aravindh Puthiyaparambil
  2014-04-16  9:28   ` Jan Beulich
  2014-04-24 11:13 ` [PATCH v3 0/5] Make mem_access APIs and hypercalls generic Tim Deegan
  5 siblings, 1 reply; 17+ messages in thread
From: Aravindh Puthiyaparambil @ 2014-04-16  0:25 UTC (permalink / raw)
  To: xen-devel; +Cc: Tim Deegan, Keir Fraser, Jan Beulich

This patch does the following:
1. Deprecate the HVMOP_[sg]et_mem_access HVM ops.
2. Remove the enums and structs associated with the HVM ops.

Signed-off-by: Aravindh Puthiyaparambil <aravindp@cisco.com>
Cc: Keir Fraser <keir@xen.org>
Cc: Jan Beulich <jbeulich@suse.com>
Cc: Tim Deegan <tim@xen.org>

---
This was part of "x86/mem_access: Make the mem_access ops generic" in
the earlier versions of the series and is now a seperate patch.

diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c
index 8363257..44ddd8e 100644
--- a/xen/arch/x86/hvm/hvm.c
+++ b/xen/arch/x86/hvm/hvm.c
@@ -4589,81 +4589,9 @@ long do_hvm_op(unsigned long op, XEN_GUEST_HANDLE_PARAM(void) arg)
     }
 
     case HVMOP_set_mem_access:
-    {
-        struct xen_hvm_set_mem_access a;
-        struct domain *d;
-
-        if ( copy_from_guest(&a, arg, 1) )
-            return -EFAULT;
-
-        rc = rcu_lock_remote_domain_by_id(a.domid, &d);
-        if ( rc != 0 )
-            return rc;
-
-        rc = -EINVAL;
-        if ( !is_hvm_domain(d) )
-            goto param_fail5;
-
-        rc = xsm_hvm_param(XSM_TARGET, d, op);
-        if ( rc )
-            goto param_fail5;
-
-        rc = -EINVAL;
-        if ( (a.first_pfn != ~0ull) &&
-             (a.nr < start_iter ||
-              ((a.first_pfn + a.nr - 1) < a.first_pfn) ||
-              ((a.first_pfn + a.nr - 1) > domain_get_maximum_gpfn(d))) )
-            goto param_fail5;
-            
-        rc = p2m_set_mem_access(d, a.first_pfn, a.nr, start_iter,
-                                HVMOP_op_mask, a.hvmmem_access);
-        if ( rc > 0 )
-        {
-            start_iter = rc;
-            rc = -EAGAIN;
-        }
-
-    param_fail5:
-        rcu_unlock_domain(d);
-        break;
-    }
-
     case HVMOP_get_mem_access:
-    {
-        struct xen_hvm_get_mem_access a;
-        struct domain *d;
-        xenmem_access_t access;
-
-        if ( copy_from_guest(&a, arg, 1) )
-            return -EFAULT;
-
-        rc = rcu_lock_remote_domain_by_id(a.domid, &d);
-        if ( rc != 0 )
-            return rc;
-
-        rc = -EINVAL;
-        if ( !is_hvm_domain(d) )
-            goto param_fail6;
-
-        rc = xsm_hvm_param(XSM_TARGET, d, op);
-        if ( rc )
-            goto param_fail6;
-
-        rc = -EINVAL;
-        if ( (a.pfn > domain_get_maximum_gpfn(d)) && a.pfn != ~0ull )
-            goto param_fail6;
-
-        rc = p2m_get_mem_access(d, a.pfn, &access);
-        if ( rc != 0 )
-            goto param_fail6;
-
-        a.hvmmem_access = access;
-        rc = __copy_to_guest(arg, &a, 1) ? -EFAULT : 0;
-
-    param_fail6:
-        rcu_unlock_domain(d);
+        rc = -ENOSYS;
         break;
-    }
 
     case HVMOP_pagetable_dying:
     {
diff --git a/xen/include/public/hvm/hvm_op.h b/xen/include/public/hvm/hvm_op.h
index 3204ec4..f00f6d2 100644
--- a/xen/include/public/hvm/hvm_op.h
+++ b/xen/include/public/hvm/hvm_op.h
@@ -162,49 +162,11 @@ DEFINE_XEN_GUEST_HANDLE(xen_hvm_xentrace_t);
 /* Following tools-only interfaces may change in future. */
 #if defined(__XEN__) || defined(__XEN_TOOLS__)
 
+/* Deprecated by XENMEM_access_op_set_access */
 #define HVMOP_set_mem_access        12
-typedef enum {
-    HVMMEM_access_n,
-    HVMMEM_access_r,
-    HVMMEM_access_w,
-    HVMMEM_access_rw,
-    HVMMEM_access_x,
-    HVMMEM_access_rx,
-    HVMMEM_access_wx,
-    HVMMEM_access_rwx,
-    HVMMEM_access_rx2rw,       /* Page starts off as r-x, but automatically
-                                * change to r-w on a write */
-    HVMMEM_access_n2rwx,       /* Log access: starts off as n, automatically 
-                                * goes to rwx, generating an event without
-                                * pausing the vcpu */
-    HVMMEM_access_default      /* Take the domain default */
-} hvmmem_access_t;
-/* Notify that a region of memory is to have specific access types */
-struct xen_hvm_set_mem_access {
-    /* Domain to be updated. */
-    domid_t domid;
-    /* Memory type */
-    uint16_t hvmmem_access; /* hvm_access_t */
-    /* Number of pages, ignored on setting default access */
-    uint32_t nr;
-    /* First pfn, or ~0ull to set the default access for new pages */
-    uint64_aligned_t first_pfn;
-};
-typedef struct xen_hvm_set_mem_access xen_hvm_set_mem_access_t;
-DEFINE_XEN_GUEST_HANDLE(xen_hvm_set_mem_access_t);
 
+/* Deprecated by XENMEM_access_op_get_access */
 #define HVMOP_get_mem_access        13
-/* Get the specific access type for that region of memory */
-struct xen_hvm_get_mem_access {
-    /* Domain to be queried. */
-    domid_t domid;
-    /* Memory type: OUT */
-    uint16_t hvmmem_access; /* hvm_access_t */
-    /* pfn, or ~0ull for default access for new pages.  IN */
-    uint64_aligned_t pfn;
-};
-typedef struct xen_hvm_get_mem_access xen_hvm_get_mem_access_t;
-DEFINE_XEN_GUEST_HANDLE(xen_hvm_get_mem_access_t);
 
 #define HVMOP_inject_trap            14
 /* Inject a trap into a VCPU, which will get taken up on the next
-- 
1.8.3.2

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

* Re: [PATCH v3 1/5] x86/mem_access: Make the mem_access ops generic
  2014-04-16  0:25 ` [PATCH v3 1/5] x86/mem_access: Make the mem_access ops generic Aravindh Puthiyaparambil
@ 2014-04-16  9:24   ` Jan Beulich
  0 siblings, 0 replies; 17+ messages in thread
From: Jan Beulich @ 2014-04-16  9:24 UTC (permalink / raw)
  To: Aravindh Puthiyaparambil; +Cc: xen-devel, Keir Fraser, Tim Deegan

>>> On 16.04.14 at 02:25, <aravindp@cisco.com> wrote:
> This patch does the following:
> 1. Add mem_access ops under XENMEM_access_ops.
> 2. Add enums and structs whose names are generic.
> 
> Signed-off-by: Aravindh Puthiyaparambil <aravindp@cisco.com>
> Cc: Keir Fraser <keir@xen.org>

Reviewed-by: Jan Beulich <jbeulich@suse.com>

> Cc: Tim Deegan <tim@xen.org>

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

* Re: [PATCH v3 5/5] x86/mem_access: Deprecate the HVM mem_access ops
  2014-04-16  0:25 ` [PATCH v3 5/5] x86/mem_access: Deprecate the HVM mem_access ops Aravindh Puthiyaparambil
@ 2014-04-16  9:28   ` Jan Beulich
  2014-04-16 15:18     ` Aravindh Puthiyaparambil (aravindp)
  0 siblings, 1 reply; 17+ messages in thread
From: Jan Beulich @ 2014-04-16  9:28 UTC (permalink / raw)
  To: Aravindh Puthiyaparambil; +Cc: xen-devel, Keir Fraser, Tim Deegan

>>> On 16.04.14 at 02:25, <aravindp@cisco.com> wrote:
> --- a/xen/arch/x86/hvm/hvm.c
> +++ b/xen/arch/x86/hvm/hvm.c
> @@ -4589,81 +4589,9 @@ long do_hvm_op(unsigned long op, XEN_GUEST_HANDLE_PARAM(void) arg)
>      }
>  
>      case HVMOP_set_mem_access:
> -    {
> -        struct xen_hvm_set_mem_access a;
> -        struct domain *d;
> -
> -        if ( copy_from_guest(&a, arg, 1) )
> -            return -EFAULT;
> -
> -        rc = rcu_lock_remote_domain_by_id(a.domid, &d);
> -        if ( rc != 0 )
> -            return rc;
> -
> -        rc = -EINVAL;
> -        if ( !is_hvm_domain(d) )
> -            goto param_fail5;
> -
> -        rc = xsm_hvm_param(XSM_TARGET, d, op);
> -        if ( rc )
> -            goto param_fail5;
> -
> -        rc = -EINVAL;
> -        if ( (a.first_pfn != ~0ull) &&
> -             (a.nr < start_iter ||
> -              ((a.first_pfn + a.nr - 1) < a.first_pfn) ||
> -              ((a.first_pfn + a.nr - 1) > domain_get_maximum_gpfn(d))) )
> -            goto param_fail5;
> -            
> -        rc = p2m_set_mem_access(d, a.first_pfn, a.nr, start_iter,
> -                                HVMOP_op_mask, a.hvmmem_access);
> -        if ( rc > 0 )
> -        {
> -            start_iter = rc;
> -            rc = -EAGAIN;
> -        }
> -
> -    param_fail5:
> -        rcu_unlock_domain(d);
> -        break;
> -    }
> -
>      case HVMOP_get_mem_access:
> -    {
> -        struct xen_hvm_get_mem_access a;
> -        struct domain *d;
> -        xenmem_access_t access;
> -
> -        if ( copy_from_guest(&a, arg, 1) )
> -            return -EFAULT;
> -
> -        rc = rcu_lock_remote_domain_by_id(a.domid, &d);
> -        if ( rc != 0 )
> -            return rc;
> -
> -        rc = -EINVAL;
> -        if ( !is_hvm_domain(d) )
> -            goto param_fail6;
> -
> -        rc = xsm_hvm_param(XSM_TARGET, d, op);
> -        if ( rc )
> -            goto param_fail6;
> -
> -        rc = -EINVAL;
> -        if ( (a.pfn > domain_get_maximum_gpfn(d)) && a.pfn != ~0ull )
> -            goto param_fail6;
> -
> -        rc = p2m_get_mem_access(d, a.pfn, &access);
> -        if ( rc != 0 )
> -            goto param_fail6;
> -
> -        a.hvmmem_access = access;
> -        rc = __copy_to_guest(arg, &a, 1) ? -EFAULT : 0;
> -
> -    param_fail6:
> -        rcu_unlock_domain(d);
> +        rc = -ENOSYS;
>          break;
> -    }

I can't see why these need to remain here - just have them be
handled by the default case (which at once gives you back your
log message).

Jan

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

* Re: [PATCH v3 5/5] x86/mem_access: Deprecate the HVM mem_access ops
  2014-04-16  9:28   ` Jan Beulich
@ 2014-04-16 15:18     ` Aravindh Puthiyaparambil (aravindp)
  2014-04-16 16:11       ` Jan Beulich
  0 siblings, 1 reply; 17+ messages in thread
From: Aravindh Puthiyaparambil (aravindp) @ 2014-04-16 15:18 UTC (permalink / raw)
  To: Jan Beulich; +Cc: xen-devel, Keir Fraser, Tim Deegan

>> --- a/xen/arch/x86/hvm/hvm.c
>> +++ b/xen/arch/x86/hvm/hvm.c
>> @@ -4589,81 +4589,9 @@ long do_hvm_op(unsigned long op,
>XEN_GUEST_HANDLE_PARAM(void) arg)
>>      }
>>
>>      case HVMOP_set_mem_access:
>> -    {
>> -        struct xen_hvm_set_mem_access a;
>> -        struct domain *d;
>> -
>> -        if ( copy_from_guest(&a, arg, 1) )
>> -            return -EFAULT;
>> -
>> -        rc = rcu_lock_remote_domain_by_id(a.domid, &d);
>> -        if ( rc != 0 )
>> -            return rc;
>> -
>> -        rc = -EINVAL;
>> -        if ( !is_hvm_domain(d) )
>> -            goto param_fail5;
>> -
>> -        rc = xsm_hvm_param(XSM_TARGET, d, op);
>> -        if ( rc )
>> -            goto param_fail5;
>> -
>> -        rc = -EINVAL;
>> -        if ( (a.first_pfn != ~0ull) &&
>> -             (a.nr < start_iter ||
>> -              ((a.first_pfn + a.nr - 1) < a.first_pfn) ||
>> -              ((a.first_pfn + a.nr - 1) > domain_get_maximum_gpfn(d))) )
>> -            goto param_fail5;
>> -
>> -        rc = p2m_set_mem_access(d, a.first_pfn, a.nr, start_iter,
>> -                                HVMOP_op_mask, a.hvmmem_access);
>> -        if ( rc > 0 )
>> -        {
>> -            start_iter = rc;
>> -            rc = -EAGAIN;
>> -        }
>> -
>> -    param_fail5:
>> -        rcu_unlock_domain(d);
>> -        break;
>> -    }
>> -
>>      case HVMOP_get_mem_access:
>> -    {
>> -        struct xen_hvm_get_mem_access a;
>> -        struct domain *d;
>> -        xenmem_access_t access;
>> -
>> -        if ( copy_from_guest(&a, arg, 1) )
>> -            return -EFAULT;
>> -
>> -        rc = rcu_lock_remote_domain_by_id(a.domid, &d);
>> -        if ( rc != 0 )
>> -            return rc;
>> -
>> -        rc = -EINVAL;
>> -        if ( !is_hvm_domain(d) )
>> -            goto param_fail6;
>> -
>> -        rc = xsm_hvm_param(XSM_TARGET, d, op);
>> -        if ( rc )
>> -            goto param_fail6;
>> -
>> -        rc = -EINVAL;
>> -        if ( (a.pfn > domain_get_maximum_gpfn(d)) && a.pfn != ~0ull )
>> -            goto param_fail6;
>> -
>> -        rc = p2m_get_mem_access(d, a.pfn, &access);
>> -        if ( rc != 0 )
>> -            goto param_fail6;
>> -
>> -        a.hvmmem_access = access;
>> -        rc = __copy_to_guest(arg, &a, 1) ? -EFAULT : 0;
>> -
>> -    param_fail6:
>> -        rcu_unlock_domain(d);
>> +        rc = -ENOSYS;
>>          break;
>> -    }
>
>I can't see why these need to remain here - just have them be handled by the
>default case (which at once gives you back your log message).

OK, I will get rid of them. Should I resubmit the whole series again as v4 or just this patch again?

Thanks,
Aravindh

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

* Re: [PATCH v3 2/5] tools/libxc: Make the mem_access APIs generic
  2014-04-16  0:25 ` [PATCH v3 2/5] tools/libxc: Make the mem_access APIs generic Aravindh Puthiyaparambil
@ 2014-04-16 15:58   ` Ian Campbell
  2014-04-17  9:46   ` Tamas Lengyel
  1 sibling, 0 replies; 17+ messages in thread
From: Ian Campbell @ 2014-04-16 15:58 UTC (permalink / raw)
  To: Aravindh Puthiyaparambil; +Cc: xen-devel, Ian Jackson, Stefano Stabellini

On Tue, 2014-04-15 at 17:25 -0700, Aravindh Puthiyaparambil wrote:
> Add new xc_[sg]et_mem_access() APIs.
> 
> Signed-off-by: Aravindh Puthiyaparambil <aravindp@cisco.com>
> Cc: Ian Jackson <ian.jackson@eu.citrix.com>
> Cc: Stefano Stabellini <stefano.stabellini@eu.citrix.com>

Acked-by: Ian Campbell <ian.campbell@citrix.com>

(I assume this will be committed by a hypervisor person along with the
hypercall bits of the series)

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

* Re: [PATCH v3 3/5] tools/xen-access: Use the new mem_access APIs
  2014-04-16  0:25 ` [PATCH v3 3/5] tools/xen-access: Use the new mem_access APIs Aravindh Puthiyaparambil
@ 2014-04-16 15:58   ` Ian Campbell
  0 siblings, 0 replies; 17+ messages in thread
From: Ian Campbell @ 2014-04-16 15:58 UTC (permalink / raw)
  To: Aravindh Puthiyaparambil; +Cc: xen-devel, Ian Jackson, Stefano Stabellini

On Tue, 2014-04-15 at 17:25 -0700, Aravindh Puthiyaparambil wrote:
> Modify the xen-access test program to use the new mem_access APIs.
> 
> Signed-off-by: Aravindh Puthiyaparambil <aravindp@cisco.com>
> Cc: Ian Jackson <ian.jackson@eu.citrix.com>
> Cc: Stefano Stabellini <stefano.stabellini@eu.citrix.com>

Acked-by: Ian Campbell <ian.campbell@citrix.com>

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

* Re: [PATCH v3 4/5] tools/libxc: Remove xc_hvm_[sg]et_mem_access() APIs
  2014-04-16  0:25 ` [PATCH v3 4/5] tools/libxc: Remove xc_hvm_[sg]et_mem_access() APIs Aravindh Puthiyaparambil
@ 2014-04-16 15:59   ` Ian Campbell
  0 siblings, 0 replies; 17+ messages in thread
From: Ian Campbell @ 2014-04-16 15:59 UTC (permalink / raw)
  To: Aravindh Puthiyaparambil; +Cc: xen-devel, Ian Jackson, Stefano Stabellini

On Tue, 2014-04-15 at 17:25 -0700, Aravindh Puthiyaparambil wrote:
> Remove xc_hvm_[sg]et_mem_access() APIs which have been replaced by
> xc_[sg]_mem_access() APIs.
> 
> Signed-off-by: Aravindh Puthiyaparambil <aravindp@cisco.com>
> Cc: Ian Jackson <ian.jackson@eu.citrix.com>
> Cc: Stefano Stabellini <stefano.stabellini@eu.citrix.com>

Acked-by: Ian Campbell <ian.campbell@citrix.com>

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

* Re: [PATCH v3 5/5] x86/mem_access: Deprecate the HVM mem_access ops
  2014-04-16 15:18     ` Aravindh Puthiyaparambil (aravindp)
@ 2014-04-16 16:11       ` Jan Beulich
  0 siblings, 0 replies; 17+ messages in thread
From: Jan Beulich @ 2014-04-16 16:11 UTC (permalink / raw)
  To: Aravindh Puthiyaparambil (aravindp); +Cc: xen-devel, KeirFraser, Tim Deegan

>>> On 16.04.14 at 17:18, <aravindp@cisco.com> wrote:
>>I can't see why these need to remain here - just have them be handled by the
>>default case (which at once gives you back your log message).
> 
> OK, I will get rid of them. Should I resubmit the whole series again as v4 
> or just this patch again?

If you don't get any other comments on the other patches, just
resending this one would seem fine to me.

Jan

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

* Re: [PATCH v3 2/5] tools/libxc: Make the mem_access APIs generic
  2014-04-16  0:25 ` [PATCH v3 2/5] tools/libxc: Make the mem_access APIs generic Aravindh Puthiyaparambil
  2014-04-16 15:58   ` Ian Campbell
@ 2014-04-17  9:46   ` Tamas Lengyel
  2014-04-17 15:52     ` Aravindh Puthiyaparambil (aravindp)
  1 sibling, 1 reply; 17+ messages in thread
From: Tamas Lengyel @ 2014-04-17  9:46 UTC (permalink / raw)
  To: Aravindh Puthiyaparambil
  Cc: xen-devel, Ian Jackson, Ian Campbell, Stefano Stabellini


[-- Attachment #1.1: Type: text/plain, Size: 4411 bytes --]

On Wed, Apr 16, 2014 at 2:25 AM, Aravindh Puthiyaparambil <
aravindp@cisco.com> wrote:

> Add new xc_[sg]et_mem_access() APIs.
>
> Signed-off-by: Aravindh Puthiyaparambil <aravindp@cisco.com>
> Cc: Ian Jackson <ian.jackson@eu.citrix.com>
> Cc: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
> Cc: Ian Campbell <ian.campbell@citrix.com>
>
> ---
> Changes from version 2 of the patch:
> 1. Move removal of xc_hvm_[sg]et_mem_access() APIs into a seperate
> patch.
>
> Changes from version 1 of the patch:
> 1. Remove unused "gfn" from the parameter list of
> xc_mem_access_resume().
> 2. Use structure initialisation.
> 3. Write "access" back only in the case of do_memory_op returning
> success.
> 4. Fix formatting.
>
> Changes from the RFC version of the patch:
> 1. Remove xc_mem_access_memop() wrapper.
> 2. Remove xc_hvm_[sg]et_mem_access() APIs.
>
> diff --git a/tools/libxc/xc_mem_access.c b/tools/libxc/xc_mem_access.c
> index a50c145..f436e69 100644
> --- a/tools/libxc/xc_mem_access.c
> +++ b/tools/libxc/xc_mem_access.c
> @@ -22,7 +22,7 @@
>   */
>
>  #include "xc_private.h"
> -
> +#include <xen/memory.h>
>
>  int xc_mem_access_enable(xc_interface *xch, domid_t domain_id,
>                           uint32_t *port)
> @@ -47,12 +47,54 @@ int xc_mem_access_disable(xc_interface *xch, domid_t
> domain_id)
>                                  NULL);
>  }
>
> -int xc_mem_access_resume(xc_interface *xch, domid_t domain_id, unsigned
> long gfn)
> +int xc_mem_access_resume(xc_interface *xch, domid_t domain_id)
> +{
> +    xen_mem_access_op_t mao =
> +    {
> +        .op    = XENMEM_access_op_resume,
> +        .domid = domain_id
> +    };
> +
> +    return do_memory_op(xch, XENMEM_access_op, &mao, sizeof(mao));
> +}
> +
> +int xc_set_mem_access(xc_interface *xch,
> +                      domid_t domain_id,
> +                      xenmem_access_t access,
> +                      uint64_t first_pfn,
> +                      uint32_t nr)
>  {
> -    return xc_mem_event_memop(xch, domain_id,
> -                                XENMEM_access_op_resume,
> -                                XENMEM_access_op,
> -                                gfn, NULL);
> +    xen_mem_access_op_t mao =
> +    {
> +        .op     = XENMEM_access_op_set_access,
> +        .domid  = domain_id,
> +        .access = access,
> +        .pfn    = first_pfn,
> +        .nr     = nr
> +    };
> +
> +    return do_memory_op(xch, XENMEM_access_op, &mao, sizeof(mao));
> +}
> +
> +int xc_get_mem_access(xc_interface *xch,
> +                      domid_t domain_id,
> +                      uint64_t pfn,
> +                      xenmem_access_t *access)
> +{
> +    int rc;
> +    xen_mem_access_op_t mao =
> +    {
> +        .op    = XENMEM_access_op_get_access,
> +        .domid = domain_id,
> +        .pfn   = pfn
> +    };
> +
> +    rc = do_memory_op(xch, XENMEM_access_op, &mao, sizeof(mao));
> +
> +    if ( rc == 0 )
> +        *access = mao.access;
> +
> +    return rc;
>  }
>
>  /*
> diff --git a/tools/libxc/xenctrl.h b/tools/libxc/xenctrl.h
> index e3a32f2..3513ddb 100644
> --- a/tools/libxc/xenctrl.h
> +++ b/tools/libxc/xenctrl.h
> @@ -2059,8 +2059,22 @@ int xc_mem_paging_load(xc_interface *xch, domid_t
> domain_id,
>   */
>  int xc_mem_access_enable(xc_interface *xch, domid_t domain_id, uint32_t
> *port);
>  int xc_mem_access_disable(xc_interface *xch, domid_t domain_id);
> -int xc_mem_access_resume(xc_interface *xch, domid_t domain_id,
> -                         unsigned long gfn);
> +int xc_mem_access_resume(xc_interface *xch, domid_t domain_id);
> +
> +/*
> + * Set a range of memory to a specific access.
> + * Allowed types are XENMEM_access_default, XENMEM_access_n, any
> combination of
> + * XENMEM_access_ + (rwx), and XENMEM_access_rx2rw
> + */
>

What about XENMEM_access_n2rwx?


> +int xc_set_mem_access(xc_interface *xch, domid_t domain_id,
> +                      xenmem_access_t access, uint64_t first_pfn,
> +                      uint32_t nr);
> +
> +/*
> + * Gets the mem access for the given page (returned in access on success)
> + */
> +int xc_get_mem_access(xc_interface *xch, domid_t domain_id,
> +                      uint64_t pfn, xenmem_access_t *access);
>
>  /***
>   * Memory sharing operations.
> --
> 1.8.3.2
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> http://lists.xen.org/xen-devel
>

[-- Attachment #1.2: Type: text/html, Size: 5814 bytes --]

[-- Attachment #2: Type: text/plain, Size: 126 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel

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

* Re: [PATCH v3 2/5] tools/libxc: Make the mem_access APIs generic
  2014-04-17  9:46   ` Tamas Lengyel
@ 2014-04-17 15:52     ` Aravindh Puthiyaparambil (aravindp)
  2014-04-17 20:50       ` Tamas Lengyel
  0 siblings, 1 reply; 17+ messages in thread
From: Aravindh Puthiyaparambil (aravindp) @ 2014-04-17 15:52 UTC (permalink / raw)
  To: Tamas Lengyel; +Cc: xen-devel, Ian Jackson, Ian Campbell, Stefano Stabellini

>	diff --git a/tools/libxc/xenctrl.h b/tools/libxc/xenctrl.h
>	index e3a32f2..3513ddb 100644
>	--- a/tools/libxc/xenctrl.h
>	+++ b/tools/libxc/xenctrl.h
>	@@ -2059,8 +2059,22 @@ int xc_mem_paging_load(xc_interface
>*xch, domid_t domain_id,
>	  */
>	 int xc_mem_access_enable(xc_interface *xch, domid_t domain_id,
>uint32_t *port);
>	 int xc_mem_access_disable(xc_interface *xch, domid_t domain_id);
>	-int xc_mem_access_resume(xc_interface *xch, domid_t domain_id,
>	-                         unsigned long gfn);
>	+int xc_mem_access_resume(xc_interface *xch, domid_t
>domain_id);
>	+
>	+/*
>	+ * Set a range of memory to a specific access.
>	+ * Allowed types are XENMEM_access_default, XENMEM_access_n,
>any combination of
>	+ * XENMEM_access_ + (rwx), and XENMEM_access_rx2rw
>	+ */
>
>
>
>What about XENMEM_access_n2rwx?

That should work too. The patch does add or remove any functionality. I just copied the API description over from the original xc_hvm_set_mem_access(). So whoever added access_n2rwx did not update the description. I have more patches in this area so I will update it in the next go around or you can submit a patch once this one goes in.

Thanks,
Aravindh

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

* Re: [PATCH v3 2/5] tools/libxc: Make the mem_access APIs generic
  2014-04-17 15:52     ` Aravindh Puthiyaparambil (aravindp)
@ 2014-04-17 20:50       ` Tamas Lengyel
  0 siblings, 0 replies; 17+ messages in thread
From: Tamas Lengyel @ 2014-04-17 20:50 UTC (permalink / raw)
  To: Aravindh Puthiyaparambil (aravindp)
  Cc: xen-devel, Ian Jackson, Ian Campbell, Stefano Stabellini


[-- Attachment #1.1: Type: text/plain, Size: 1529 bytes --]

On Thu, Apr 17, 2014 at 5:52 PM, Aravindh Puthiyaparambil (aravindp) <
aravindp@cisco.com> wrote:

> >       diff --git a/tools/libxc/xenctrl.h b/tools/libxc/xenctrl.h
> >       index e3a32f2..3513ddb 100644
> >       --- a/tools/libxc/xenctrl.h
> >       +++ b/tools/libxc/xenctrl.h
> >       @@ -2059,8 +2059,22 @@ int xc_mem_paging_load(xc_interface
> >*xch, domid_t domain_id,
> >         */
> >        int xc_mem_access_enable(xc_interface *xch, domid_t domain_id,
> >uint32_t *port);
> >        int xc_mem_access_disable(xc_interface *xch, domid_t domain_id);
> >       -int xc_mem_access_resume(xc_interface *xch, domid_t domain_id,
> >       -                         unsigned long gfn);
> >       +int xc_mem_access_resume(xc_interface *xch, domid_t
> >domain_id);
> >       +
> >       +/*
> >       + * Set a range of memory to a specific access.
> >       + * Allowed types are XENMEM_access_default, XENMEM_access_n,
> >any combination of
> >       + * XENMEM_access_ + (rwx), and XENMEM_access_rx2rw
> >       + */
> >
> >
> >
> >What about XENMEM_access_n2rwx?
>
> That should work too. The patch does add or remove any functionality. I
> just copied the API description over from the original
> xc_hvm_set_mem_access(). So whoever added access_n2rwx did not update the
> description. I have more patches in this area so I will update it in the
> next go around or you can submit a patch once this one goes in.
>
> Thanks,
> Aravindh
>
>
If you are already at it, might as well fix the comment too.

Thanks!
Tamas

[-- Attachment #1.2: Type: text/html, Size: 2130 bytes --]

[-- Attachment #2: Type: text/plain, Size: 126 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel

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

* Re: [PATCH v3 0/5] Make mem_access APIs and hypercalls generic
  2014-04-16  0:25 [PATCH v3 0/5] Make mem_access APIs and hypercalls generic Aravindh Puthiyaparambil
                   ` (4 preceding siblings ...)
  2014-04-16  0:25 ` [PATCH v3 5/5] x86/mem_access: Deprecate the HVM mem_access ops Aravindh Puthiyaparambil
@ 2014-04-24 11:13 ` Tim Deegan
  5 siblings, 0 replies; 17+ messages in thread
From: Tim Deegan @ 2014-04-24 11:13 UTC (permalink / raw)
  To: Aravindh Puthiyaparambil
  Cc: Keir Fraser, Ian Campbell, Stefano Stabellini, Ian Jackson,
	Jan Beulich, xen-devel

At 17:25 -0700 on 15 Apr (1397579121), Aravindh Puthiyaparambil wrote:
> This is a precusor patch to the one that enables mem_access for PV domains.
> 
> The mem_access APIs, hypercalls and structures all have HVM specific naming. As
> a first step to making this work for PV domains, this patch renames them in a
> more generic fashion.
> 
> Signed-off-by: Aravindh Puthiyaparambil <aravindp@cisco.com>
> Cc: Keir Fraser <keir@xen.org>
> Cc: Jan Beulich <jbeulich@suse.com>
> Cc: Tim Deegan <tim@xen.org>
> Cc: Ian Jackson <ian.jackson@eu.citrix.com>
> Cc: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
> Cc: Ian Campbell <ian.campbell@citrix.com>

Applied (using v4 of patch 5/5), thanks.

Tim.

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

end of thread, other threads:[~2014-04-24 11:13 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-04-16  0:25 [PATCH v3 0/5] Make mem_access APIs and hypercalls generic Aravindh Puthiyaparambil
2014-04-16  0:25 ` [PATCH v3 1/5] x86/mem_access: Make the mem_access ops generic Aravindh Puthiyaparambil
2014-04-16  9:24   ` Jan Beulich
2014-04-16  0:25 ` [PATCH v3 2/5] tools/libxc: Make the mem_access APIs generic Aravindh Puthiyaparambil
2014-04-16 15:58   ` Ian Campbell
2014-04-17  9:46   ` Tamas Lengyel
2014-04-17 15:52     ` Aravindh Puthiyaparambil (aravindp)
2014-04-17 20:50       ` Tamas Lengyel
2014-04-16  0:25 ` [PATCH v3 3/5] tools/xen-access: Use the new mem_access APIs Aravindh Puthiyaparambil
2014-04-16 15:58   ` Ian Campbell
2014-04-16  0:25 ` [PATCH v3 4/5] tools/libxc: Remove xc_hvm_[sg]et_mem_access() APIs Aravindh Puthiyaparambil
2014-04-16 15:59   ` Ian Campbell
2014-04-16  0:25 ` [PATCH v3 5/5] x86/mem_access: Deprecate the HVM mem_access ops Aravindh Puthiyaparambil
2014-04-16  9:28   ` Jan Beulich
2014-04-16 15:18     ` Aravindh Puthiyaparambil (aravindp)
2014-04-16 16:11       ` Jan Beulich
2014-04-24 11:13 ` [PATCH v3 0/5] Make mem_access APIs and hypercalls generic Tim Deegan

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.