[Xen-devel] [PATCH V5 03/12] xen/mem_paging: Convert mem_event_op to mem_paging_op

2015-02-13 Thread Tamas K Lengyel
The only use-case of the mem_event_op structure had been in mem_paging,
thus renaming the structure mem_paging_op and relocating its associated
functions clarifies its actual usage.

Signed-off-by: Tamas K Lengyel tamas.leng...@zentific.com
Acked-by: Tim Deegan t...@xen.org
Acked-by: Ian Campbell ian.campb...@citrix.com
Acked-by: Jan Beulich jbeul...@suse.com
---
v5: Style fixes
v4: Style fixes
v3: Style fixes
---
 tools/libxc/xc_mem_event.c   | 16 
 tools/libxc/xc_mem_paging.c  | 26 ++
 tools/libxc/xc_private.h |  3 ---
 xen/arch/x86/mm/mem_paging.c | 32 +---
 xen/arch/x86/x86_64/compat/mm.c  | 10 ++
 xen/arch/x86/x86_64/mm.c |  8 
 xen/common/mem_event.c   |  4 ++--
 xen/include/asm-x86/mem_paging.h |  2 +-
 xen/include/public/memory.h  |  9 -
 9 files changed, 48 insertions(+), 62 deletions(-)

diff --git a/tools/libxc/xc_mem_event.c b/tools/libxc/xc_mem_event.c
index ee25cdd..487fcee 100644
--- a/tools/libxc/xc_mem_event.c
+++ b/tools/libxc/xc_mem_event.c
@@ -40,22 +40,6 @@ int xc_mem_event_control(xc_interface *xch, domid_t 
domain_id, unsigned int op,
 return rc;
 }
 
-int xc_mem_event_memop(xc_interface *xch, domid_t domain_id, 
-unsigned int op, unsigned int mode,
-uint32_t gfn, void *buffer)
-{
-xen_mem_event_op_t meo;
-
-memset(meo, 0, sizeof(meo));
-
-meo.op  = op;
-meo.domain  = domain_id;
-meo.gfn = gfn;
-meo.buffer  = (unsigned long) buffer;
-
-return do_memory_op(xch, mode, meo, sizeof(meo));
-}
-
 void *xc_mem_event_enable(xc_interface *xch, domid_t domain_id, int param,
   uint32_t *port, int enable_introspection)
 {
diff --git a/tools/libxc/xc_mem_paging.c b/tools/libxc/xc_mem_paging.c
index 5194423..049aff4 100644
--- a/tools/libxc/xc_mem_paging.c
+++ b/tools/libxc/xc_mem_paging.c
@@ -23,6 +23,20 @@
 
 #include xc_private.h
 
+static int xc_mem_paging_memop(xc_interface *xch, domid_t domain_id,
+   unsigned int op, uint32_t gfn, void *buffer)
+{
+xen_mem_paging_op_t mpo;
+
+memset(mpo, 0, sizeof(mpo));
+
+mpo.op  = op;
+mpo.domain  = domain_id;
+mpo.gfn = gfn;
+mpo.buffer  = (unsigned long) buffer;
+
+return do_memory_op(xch, XENMEM_paging_op, mpo, sizeof(mpo));
+}
 
 int xc_mem_paging_enable(xc_interface *xch, domid_t domain_id,
  uint32_t *port)
@@ -49,25 +63,22 @@ int xc_mem_paging_disable(xc_interface *xch, domid_t 
domain_id)
 
 int xc_mem_paging_nominate(xc_interface *xch, domid_t domain_id, unsigned long 
gfn)
 {
-return xc_mem_event_memop(xch, domain_id,
+return xc_mem_paging_memop(xch, domain_id,
 XENMEM_paging_op_nominate,
-XENMEM_paging_op,
 gfn, NULL);
 }
 
 int xc_mem_paging_evict(xc_interface *xch, domid_t domain_id, unsigned long 
gfn)
 {
-return xc_mem_event_memop(xch, domain_id,
+return xc_mem_paging_memop(xch, domain_id,
 XENMEM_paging_op_evict,
-XENMEM_paging_op,
 gfn, NULL);
 }
 
 int xc_mem_paging_prep(xc_interface *xch, domid_t domain_id, unsigned long gfn)
 {
-return xc_mem_event_memop(xch, domain_id,
+return xc_mem_paging_memop(xch, domain_id,
 XENMEM_paging_op_prep,
-XENMEM_paging_op,
 gfn, NULL);
 }
 
@@ -87,9 +98,8 @@ int xc_mem_paging_load(xc_interface *xch, domid_t domain_id,
 if ( mlock(buffer, XC_PAGE_SIZE) )
 return -1;
 
-rc = xc_mem_event_memop(xch, domain_id,
+rc = xc_mem_paging_memop(xch, domain_id,
 XENMEM_paging_op_prep,
-XENMEM_paging_op,
 gfn, buffer);
 
 old_errno = errno;
diff --git a/tools/libxc/xc_private.h b/tools/libxc/xc_private.h
index bc021b8..f1f601c 100644
--- a/tools/libxc/xc_private.h
+++ b/tools/libxc/xc_private.h
@@ -425,9 +425,6 @@ int xc_ffs64(uint64_t x);
  */
 int xc_mem_event_control(xc_interface *xch, domid_t domain_id, unsigned int op,
  unsigned int mode, uint32_t *port);
-int xc_mem_event_memop(xc_interface *xch, domid_t domain_id,
-unsigned int op, unsigned int mode,
-uint32_t gfn, void *buffer);
 /*
  * Enables mem_event and returns the mapped ring page indicated by param.
  * param can be HVM_PARAM_PAGING/ACCESS/SHARING_RING_PFN
diff --git a/xen/arch/x86/mm/mem_paging.c b/xen/arch/x86/mm/mem_paging.c
index 65f6a3d..87a7b72 100644
--- a/xen/arch/x86/mm/mem_paging.c
+++ b/xen/arch/x86/mm/mem_paging.c
@@ -25,38 +25,32 @@
 #include xen/mem_event.h
 
 
-int mem_paging_memop(struct domain *d, 

Re: [Xen-devel] [PATCH V5 03/12] xen/mem_paging: Convert mem_event_op to mem_paging_op

2015-02-13 Thread Andrew Cooper
On 13/02/15 16:33, Tamas K Lengyel wrote:
 The only use-case of the mem_event_op structure had been in mem_paging,
 thus renaming the structure mem_paging_op and relocating its associated
 functions clarifies its actual usage.

 Signed-off-by: Tamas K Lengyel tamas.leng...@zentific.com
 Acked-by: Tim Deegan t...@xen.org
 Acked-by: Ian Campbell ian.campb...@citrix.com
 Acked-by: Jan Beulich jbeul...@suse.com
 ---
 v5: Style fixes
 v4: Style fixes
 v3: Style fixes
 ---
  tools/libxc/xc_mem_event.c   | 16 
  tools/libxc/xc_mem_paging.c  | 26 ++
  tools/libxc/xc_private.h |  3 ---
  xen/arch/x86/mm/mem_paging.c | 32 +---
  xen/arch/x86/x86_64/compat/mm.c  | 10 ++
  xen/arch/x86/x86_64/mm.c |  8 
  xen/common/mem_event.c   |  4 ++--
  xen/include/asm-x86/mem_paging.h |  2 +-
  xen/include/public/memory.h  |  9 -
  9 files changed, 48 insertions(+), 62 deletions(-)

 diff --git a/tools/libxc/xc_mem_event.c b/tools/libxc/xc_mem_event.c
 index ee25cdd..487fcee 100644
 --- a/tools/libxc/xc_mem_event.c
 +++ b/tools/libxc/xc_mem_event.c
 @@ -40,22 +40,6 @@ int xc_mem_event_control(xc_interface *xch, domid_t 
 domain_id, unsigned int op,
  return rc;
  }
  
 -int xc_mem_event_memop(xc_interface *xch, domid_t domain_id, 
 -unsigned int op, unsigned int mode,
 -uint32_t gfn, void *buffer)
 -{
 -xen_mem_event_op_t meo;
 -
 -memset(meo, 0, sizeof(meo));
 -
 -meo.op  = op;
 -meo.domain  = domain_id;
 -meo.gfn = gfn;
 -meo.buffer  = (unsigned long) buffer;
 -
 -return do_memory_op(xch, mode, meo, sizeof(meo));
 -}
 -
  void *xc_mem_event_enable(xc_interface *xch, domid_t domain_id, int param,
uint32_t *port, int enable_introspection)
  {
 diff --git a/tools/libxc/xc_mem_paging.c b/tools/libxc/xc_mem_paging.c
 index 5194423..049aff4 100644
 --- a/tools/libxc/xc_mem_paging.c
 +++ b/tools/libxc/xc_mem_paging.c
 @@ -23,6 +23,20 @@
  
  #include xc_private.h
  
 +static int xc_mem_paging_memop(xc_interface *xch, domid_t domain_id,
 +   unsigned int op, uint32_t gfn, void *buffer)

As said in patch 1, this gfn must be a uint64_t

 +{
 +xen_mem_paging_op_t mpo;
 +
 +memset(mpo, 0, sizeof(mpo));
 +
 +mpo.op  = op;
 +mpo.domain  = domain_id;
 +mpo.gfn = gfn;
 +mpo.buffer  = (unsigned long) buffer;
 +
 +return do_memory_op(xch, XENMEM_paging_op, mpo, sizeof(mpo));
 +}
  
  int xc_mem_paging_enable(xc_interface *xch, domid_t domain_id,
   uint32_t *port)
 @@ -49,25 +63,22 @@ int xc_mem_paging_disable(xc_interface *xch, domid_t 
 domain_id)
  
  int xc_mem_paging_nominate(xc_interface *xch, domid_t domain_id, unsigned 
 long gfn)
  {

And these 'unsigned long gfn' should be promoted to a uint64_t gfn to
avoid truncation in 32bit toolstacks.

Whether you wish to fix this in the same patch, or fix it in a separate
make mem_event interface 64/32bit safe patch is up to you.  This is
straying somewhat form a simple refactoring of mem_event_op to
mem_paging_op.

 -return xc_mem_event_memop(xch, domain_id,
 +return xc_mem_paging_memop(xch, domain_id,
  XENMEM_paging_op_nominate,
 -XENMEM_paging_op,
  gfn, NULL);
  }
  
  int xc_mem_paging_evict(xc_interface *xch, domid_t domain_id, unsigned long 
 gfn)
  {
 -return xc_mem_event_memop(xch, domain_id,
 +return xc_mem_paging_memop(xch, domain_id,
  XENMEM_paging_op_evict,
 -XENMEM_paging_op,
  gfn, NULL);
  }
  
  int xc_mem_paging_prep(xc_interface *xch, domid_t domain_id, unsigned long 
 gfn)
  {
 -return xc_mem_event_memop(xch, domain_id,
 +return xc_mem_paging_memop(xch, domain_id,
  XENMEM_paging_op_prep,
 -XENMEM_paging_op,
  gfn, NULL);
  }
  
 @@ -87,9 +98,8 @@ int xc_mem_paging_load(xc_interface *xch, domid_t domain_id,
  if ( mlock(buffer, XC_PAGE_SIZE) )
  return -1;
  
 -rc = xc_mem_event_memop(xch, domain_id,
 +rc = xc_mem_paging_memop(xch, domain_id,
  XENMEM_paging_op_prep,
 -XENMEM_paging_op,
  gfn, buffer);
  
  old_errno = errno;
 diff --git a/xen/include/asm-x86/mem_paging.h 
 b/xen/include/asm-x86/mem_paging.h
 index 6b7a1fe..92ed2fa 100644
 --- a/xen/include/asm-x86/mem_paging.h
 +++ b/xen/include/asm-x86/mem_paging.h
 @@ -21,7 +21,7 @@
   */
  
  
 -int mem_paging_memop(struct domain *d, xen_mem_event_op_t *meo);
 +int mem_paging_memop(struct domain *d, xen_mem_paging_op_t *meo);

s/meo/mpo/ like the 

Re: [Xen-devel] [PATCH V5 03/12] xen/mem_paging: Convert mem_event_op to mem_paging_op

2015-02-13 Thread Tamas K Lengyel
On Fri, Feb 13, 2015 at 7:17 PM, Andrew Cooper
andrew.coop...@citrix.com wrote:
 On 13/02/15 16:33, Tamas K Lengyel wrote:
 The only use-case of the mem_event_op structure had been in mem_paging,
 thus renaming the structure mem_paging_op and relocating its associated
 functions clarifies its actual usage.

 Signed-off-by: Tamas K Lengyel tamas.leng...@zentific.com
 Acked-by: Tim Deegan t...@xen.org
 Acked-by: Ian Campbell ian.campb...@citrix.com
 Acked-by: Jan Beulich jbeul...@suse.com
 ---
 v5: Style fixes
 v4: Style fixes
 v3: Style fixes
 ---
  tools/libxc/xc_mem_event.c   | 16 
  tools/libxc/xc_mem_paging.c  | 26 ++
  tools/libxc/xc_private.h |  3 ---
  xen/arch/x86/mm/mem_paging.c | 32 +---
  xen/arch/x86/x86_64/compat/mm.c  | 10 ++
  xen/arch/x86/x86_64/mm.c |  8 
  xen/common/mem_event.c   |  4 ++--
  xen/include/asm-x86/mem_paging.h |  2 +-
  xen/include/public/memory.h  |  9 -
  9 files changed, 48 insertions(+), 62 deletions(-)

 diff --git a/tools/libxc/xc_mem_event.c b/tools/libxc/xc_mem_event.c
 index ee25cdd..487fcee 100644
 --- a/tools/libxc/xc_mem_event.c
 +++ b/tools/libxc/xc_mem_event.c
 @@ -40,22 +40,6 @@ int xc_mem_event_control(xc_interface *xch, domid_t 
 domain_id, unsigned int op,
  return rc;
  }

 -int xc_mem_event_memop(xc_interface *xch, domid_t domain_id,
 -unsigned int op, unsigned int mode,
 -uint32_t gfn, void *buffer)
 -{
 -xen_mem_event_op_t meo;
 -
 -memset(meo, 0, sizeof(meo));
 -
 -meo.op  = op;
 -meo.domain  = domain_id;
 -meo.gfn = gfn;
 -meo.buffer  = (unsigned long) buffer;
 -
 -return do_memory_op(xch, mode, meo, sizeof(meo));
 -}
 -
  void *xc_mem_event_enable(xc_interface *xch, domid_t domain_id, int param,
uint32_t *port, int enable_introspection)
  {
 diff --git a/tools/libxc/xc_mem_paging.c b/tools/libxc/xc_mem_paging.c
 index 5194423..049aff4 100644
 --- a/tools/libxc/xc_mem_paging.c
 +++ b/tools/libxc/xc_mem_paging.c
 @@ -23,6 +23,20 @@

  #include xc_private.h

 +static int xc_mem_paging_memop(xc_interface *xch, domid_t domain_id,
 +   unsigned int op, uint32_t gfn, void *buffer)

 As said in patch 1, this gfn must be a uint64_t

 +{
 +xen_mem_paging_op_t mpo;
 +
 +memset(mpo, 0, sizeof(mpo));
 +
 +mpo.op  = op;
 +mpo.domain  = domain_id;
 +mpo.gfn = gfn;
 +mpo.buffer  = (unsigned long) buffer;
 +
 +return do_memory_op(xch, XENMEM_paging_op, mpo, sizeof(mpo));
 +}

  int xc_mem_paging_enable(xc_interface *xch, domid_t domain_id,
   uint32_t *port)
 @@ -49,25 +63,22 @@ int xc_mem_paging_disable(xc_interface *xch, domid_t 
 domain_id)

  int xc_mem_paging_nominate(xc_interface *xch, domid_t domain_id, unsigned 
 long gfn)
  {

 And these 'unsigned long gfn' should be promoted to a uint64_t gfn to
 avoid truncation in 32bit toolstacks.

 Whether you wish to fix this in the same patch, or fix it in a separate
 make mem_event interface 64/32bit safe patch is up to you.  This is
 straying somewhat form a simple refactoring of mem_event_op to
 mem_paging_op.

I'll just do it here for the sake of juggling fewer patches.


 -return xc_mem_event_memop(xch, domain_id,
 +return xc_mem_paging_memop(xch, domain_id,
  XENMEM_paging_op_nominate,
 -XENMEM_paging_op,
  gfn, NULL);
  }

  int xc_mem_paging_evict(xc_interface *xch, domid_t domain_id, unsigned long 
 gfn)
  {
 -return xc_mem_event_memop(xch, domain_id,
 +return xc_mem_paging_memop(xch, domain_id,
  XENMEM_paging_op_evict,
 -XENMEM_paging_op,
  gfn, NULL);
  }

  int xc_mem_paging_prep(xc_interface *xch, domid_t domain_id, unsigned long 
 gfn)
  {
 -return xc_mem_event_memop(xch, domain_id,
 +return xc_mem_paging_memop(xch, domain_id,
  XENMEM_paging_op_prep,
 -XENMEM_paging_op,
  gfn, NULL);
  }

 @@ -87,9 +98,8 @@ int xc_mem_paging_load(xc_interface *xch, domid_t 
 domain_id,
  if ( mlock(buffer, XC_PAGE_SIZE) )
  return -1;

 -rc = xc_mem_event_memop(xch, domain_id,
 +rc = xc_mem_paging_memop(xch, domain_id,
  XENMEM_paging_op_prep,
 -XENMEM_paging_op,
  gfn, buffer);

  old_errno = errno;
 diff --git a/xen/include/asm-x86/mem_paging.h 
 b/xen/include/asm-x86/mem_paging.h
 index 6b7a1fe..92ed2fa 100644
 --- a/xen/include/asm-x86/mem_paging.h
 +++ b/xen/include/asm-x86/mem_paging.h
 @@ -21,7 +21,7 @@
   */


 -int mem_paging_memop(struct domain *d,