|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH for-4.5] xen: vnuma: expose vnode_to_pnode to guest
This information is passed in in domctl hypercall but the guest
interface doesn't expose it to guest. PV NUMA-aware ballooning relies on
this piece of information to function properly.
Also fixed one typo while I was there.
Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx>
Cc: Elena Ufimtseva <ufimtseva@xxxxxxxxx>
Cc: Jan Beulich <jbeulich@xxxxxxxx>
Cc: Konrad Wilk <konrad.wilk@xxxxxxxxxx>
Cc: Dario Faggioli <dario.faggioli@xxxxxxxxxx>
---
xen/common/memory.c | 13 +++++++++++--
xen/include/public/memory.h | 4 ++++
2 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/xen/common/memory.c b/xen/common/memory.c
index cc36e39..fde03dc 100644
--- a/xen/common/memory.c
+++ b/xen/common/memory.c
@@ -1013,7 +1013,7 @@ long do_memory_op(unsigned long cmd,
XEN_GUEST_HANDLE_PARAM(void) arg)
/*
* Copied from guest values may differ from domain vnuma config.
* Check here guest parameters make sure we dont overflow.
- * Additionaly check padding.
+ * Additionally check padding.
*/
if ( topology.nr_vnodes < dom_vnodes ||
topology.nr_vcpus < dom_vcpus ||
@@ -1035,10 +1035,12 @@ long do_memory_op(unsigned long cmd,
XEN_GUEST_HANDLE_PARAM(void) arg)
tmp.vdistance = xmalloc_array(unsigned int, dom_vnodes * dom_vnodes);
tmp.vmemrange = xmalloc_array(vmemrange_t, dom_vranges);
tmp.vcpu_to_vnode = xmalloc_array(unsigned int, dom_vcpus);
+ tmp.vnode_to_pnode = xmalloc_array(unsigned int, dom_vnodes);
if ( tmp.vdistance == NULL ||
tmp.vmemrange == NULL ||
- tmp.vcpu_to_vnode == NULL )
+ tmp.vcpu_to_vnode == NULL ||
+ tmp.vnode_to_pnode == NULL )
{
rc = -ENOMEM;
goto vnumainfo_out;
@@ -1069,6 +1071,8 @@ long do_memory_op(unsigned long cmd,
XEN_GUEST_HANDLE_PARAM(void) arg)
sizeof(*d->vnuma->vdistance) * dom_vnodes * dom_vnodes);
memcpy(tmp.vcpu_to_vnode, d->vnuma->vcpu_to_vnode,
sizeof(*d->vnuma->vcpu_to_vnode) * dom_vcpus);
+ memcpy(tmp.vnode_to_pnode, d->vnuma->vnode_to_pnode,
+ sizeof(*d->vnuma->vnode_to_pnode) * dom_vnodes);
read_unlock(&d->vnuma_rwlock);
@@ -1086,6 +1090,10 @@ long do_memory_op(unsigned long cmd,
XEN_GUEST_HANDLE_PARAM(void) arg)
dom_vcpus) != 0 )
goto vnumainfo_out;
+ if ( copy_to_guest(topology.vnode_to_pnode.h, tmp.vnode_to_pnode,
+ dom_vnodes) != 0 )
+ goto vnumainfo_out;
+
topology.nr_vnodes = dom_vnodes;
topology.nr_vcpus = dom_vcpus;
topology.nr_vmemranges = dom_vranges;
@@ -1098,6 +1106,7 @@ long do_memory_op(unsigned long cmd,
XEN_GUEST_HANDLE_PARAM(void) arg)
xfree(tmp.vdistance);
xfree(tmp.vmemrange);
xfree(tmp.vcpu_to_vnode);
+ xfree(tmp.vnode_to_pnode);
break;
}
diff --git a/xen/include/public/memory.h b/xen/include/public/memory.h
index f021958..9d8c27b 100644
--- a/xen/include/public/memory.h
+++ b/xen/include/public/memory.h
@@ -566,6 +566,10 @@ struct vnuma_topology_info {
uint64_t pad;
} vcpu_to_vnode;
union {
+ XEN_GUEST_HANDLE(uint) h;
+ uint64_t pad;
+ } vnode_to_pnode;
+ union {
XEN_GUEST_HANDLE(vmemrange_t) h;
uint64_t pad;
} vmemrange;
--
1.7.10.4
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |