[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 1 of 5] tools: Add xc_domain_set_memory_map and xc_get_machine_memory_map calls
# HG changeset patch # User Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx> # Date 1302194186 14400 # Node ID decab6c21cc3d7ce4d4dad949d34ba35d4600490 # Parent 97763efc41f9b664cf6f7db653c9c3f51e50b358 tools: Add xc_domain_set_memory_map and xc_get_machine_memory_map calls. The later retrieves the E820 as seen by the hypervisor (completly unchanged) and the second call sets the E820 for a specific guest. Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx> diff -r 97763efc41f9 -r decab6c21cc3 tools/libxc/xc_domain.c --- a/tools/libxc/xc_domain.c Tue Apr 05 18:23:54 2011 +0100 +++ b/tools/libxc/xc_domain.c Thu Apr 07 12:36:26 2011 -0400 @@ -510,6 +510,55 @@ return rc; } + +int xc_domain_set_memory_map(xc_interface *xch, + uint32_t domid, + struct e820entry entries[], + uint32_t nr_entries) +{ + int rc; + struct xen_foreign_memory_map fmap = { + .domid = domid, + .map = { .nr_entries = nr_entries } + }; + DECLARE_HYPERCALL_BOUNCE(entries, nr_entries * sizeof(struct e820entry), + XC_HYPERCALL_BUFFER_BOUNCE_IN); + + if ( !entries || xc_hypercall_bounce_pre(xch, entries) ) + return -1; + + set_xen_guest_handle(fmap.map.buffer, entries); + + rc = do_memory_op(xch, XENMEM_set_memory_map, &fmap, sizeof(fmap)); + + xc_hypercall_bounce_post(xch, entries); + + return rc; +} + +int xc_get_machine_memory_map(xc_interface *xch, + struct e820entry entries[], + uint32_t max_entries) +{ + int rc; + struct xen_memory_map memmap = { + .nr_entries = max_entries + }; + DECLARE_HYPERCALL_BOUNCE(entries, sizeof(struct e820entry) * max_entries, + XC_HYPERCALL_BUFFER_BOUNCE_OUT); + + if ( !entries || xc_hypercall_bounce_pre(xch, entries) || max_entries <= 1) + return -1; + + + set_xen_guest_handle(memmap.buffer, entries); + + rc = do_memory_op(xch, XENMEM_machine_memory_map, &memmap, sizeof(memmap)); + + xc_hypercall_bounce_post(xch, entries); + + return rc ? rc : memmap.nr_entries; +} #else int xc_domain_set_memmap_limit(xc_interface *xch, uint32_t domid, @@ -519,6 +568,23 @@ errno = ENOSYS; return -1; } +int xc_domain_set_memory_map(xc_interface *xch, + uint32_t domid, + struct e820entry entries[], + uint32_t nr_entries) +{ + PERROR("Function not implemented"); + errno = ENOSYS; + return -1; +} +int xc_get_machine_memory_map(xc_interface *xch, + struct e820entry entries[], + uint32_t max_entries) +{ + PERROR("Function not implemented"); + errno = ENOSYS; + return -1; +} #endif int xc_domain_set_time_offset(xc_interface *xch, diff -r 97763efc41f9 -r decab6c21cc3 tools/libxc/xc_e820.h --- a/tools/libxc/xc_e820.h Tue Apr 05 18:23:54 2011 +0100 +++ b/tools/libxc/xc_e820.h Thu Apr 07 12:36:26 2011 -0400 @@ -26,6 +26,7 @@ #define E820_RESERVED 2 #define E820_ACPI 3 #define E820_NVS 4 +#define E820_UNUSABLE 5 struct e820entry { uint64_t addr; diff -r 97763efc41f9 -r decab6c21cc3 tools/libxc/xenctrl.h --- a/tools/libxc/xenctrl.h Tue Apr 05 18:23:54 2011 +0100 +++ b/tools/libxc/xenctrl.h Thu Apr 07 12:36:26 2011 -0400 @@ -53,6 +53,7 @@ #include <xen/foreign/x86_32.h> #include <xen/foreign/x86_64.h> #include <xen/arch-x86/xen-mca.h> +#include "xc_e820.h" #endif #ifdef __ia64__ @@ -966,6 +967,15 @@ uint32_t domid, unsigned long map_limitkb); +int xc_domain_set_memory_map(xc_interface *xch, + uint32_t domid, + struct e820entry entries[], + uint32_t nr_entries); + +int xc_get_machine_memory_map(xc_interface *xch, + struct e820entry entries[], + uint32_t max_entries); + int xc_domain_set_time_offset(xc_interface *xch, uint32_t domid, int32_t time_offset_seconds); _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |