From: Julien Grall Date: Thu, 23 Jul 2015 16:47:09 +0000 (+0100) Subject: libxc: Expose xc_reserved_device_memory_map to ARM too X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~2703 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=b4a044f6e8b5da47790d44ba0b93fa12c1819642;p=xen.git libxc: Expose xc_reserved_device_memory_map to ARM too The commit 25652f2 "tools/libxl: detect and avoid conflicts with RDM" introduced the usage of xc_reserved_device_memory_map in the libxl generic code. But the function is only defined for x86 which breaks the ARM build. The hypercall called by this helper is implemented in the generic code and doesn't contain any x86 specific code. Therefore, it's fine to expose the helper to ARM. Signed-off-by: Julien Grall CC: Ian Jackson CC: Stefano Stabellini CC: Ian Campbell CC: Wei Liu CC: Tiejun Chen Acked-by: Wei Liu Acked-by: Ian Jackson --- diff --git a/tools/libxc/include/xenctrl.h b/tools/libxc/include/xenctrl.h index 3f2381a040..0a98aee624 100644 --- a/tools/libxc/include/xenctrl.h +++ b/tools/libxc/include/xenctrl.h @@ -1314,6 +1314,7 @@ int xc_domain_set_memory_map(xc_interface *xch, int xc_get_machine_memory_map(xc_interface *xch, struct e820entry entries[], uint32_t max_entries); +#endif int xc_reserved_device_memory_map(xc_interface *xch, uint32_t flags, @@ -1322,7 +1323,6 @@ int xc_reserved_device_memory_map(xc_interface *xch, uint8_t devfn, struct xen_reserved_device_memory entries[], uint32_t *max_entries); -#endif int xc_domain_set_time_offset(xc_interface *xch, uint32_t domid, int32_t time_offset_seconds); diff --git a/tools/libxc/xc_domain.c b/tools/libxc/xc_domain.c index df063148ae..77d852b5e2 100644 --- a/tools/libxc/xc_domain.c +++ b/tools/libxc/xc_domain.c @@ -685,41 +685,6 @@ int xc_domain_set_memory_map(xc_interface *xch, return rc; } -int xc_reserved_device_memory_map(xc_interface *xch, - uint32_t flags, - uint16_t seg, - uint8_t bus, - uint8_t devfn, - struct xen_reserved_device_memory entries[], - uint32_t *max_entries) -{ - int rc; - struct xen_reserved_device_memory_map xrdmmap = { - .flags = flags, - .dev.pci.seg = seg, - .dev.pci.bus = bus, - .dev.pci.devfn = devfn, - .nr_entries = *max_entries - }; - DECLARE_HYPERCALL_BOUNCE(entries, - sizeof(struct xen_reserved_device_memory) * - *max_entries, XC_HYPERCALL_BUFFER_BOUNCE_OUT); - - if ( xc_hypercall_bounce_pre(xch, entries) ) - return -1; - - set_xen_guest_handle(xrdmmap.buffer, entries); - - rc = do_memory_op(xch, XENMEM_reserved_device_memory_map, - &xrdmmap, sizeof(xrdmmap)); - - xc_hypercall_bounce_post(xch, entries); - - *max_entries = xrdmmap.nr_entries; - - return rc; -} - int xc_get_machine_memory_map(xc_interface *xch, struct e820entry entries[], uint32_t max_entries) @@ -766,6 +731,41 @@ int xc_domain_set_memmap_limit(xc_interface *xch, } #endif +int xc_reserved_device_memory_map(xc_interface *xch, + uint32_t flags, + uint16_t seg, + uint8_t bus, + uint8_t devfn, + struct xen_reserved_device_memory entries[], + uint32_t *max_entries) +{ + int rc; + struct xen_reserved_device_memory_map xrdmmap = { + .flags = flags, + .dev.pci.seg = seg, + .dev.pci.bus = bus, + .dev.pci.devfn = devfn, + .nr_entries = *max_entries + }; + DECLARE_HYPERCALL_BOUNCE(entries, + sizeof(struct xen_reserved_device_memory) * + *max_entries, XC_HYPERCALL_BUFFER_BOUNCE_OUT); + + if ( xc_hypercall_bounce_pre(xch, entries) ) + return -1; + + set_xen_guest_handle(xrdmmap.buffer, entries); + + rc = do_memory_op(xch, XENMEM_reserved_device_memory_map, + &xrdmmap, sizeof(xrdmmap)); + + xc_hypercall_bounce_post(xch, entries); + + *max_entries = xrdmmap.nr_entries; + + return rc; +} + int xc_domain_set_time_offset(xc_interface *xch, uint32_t domid, int32_t time_offset_seconds)