[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v3 4/6] tools/libxc: Introduce ARRAY_SIZE() and replace handrolled examples
xen-hptool and xen-mfndump include xc_private.h. This is bad, but not trivial to fix, so they gain a protective #undef and a stern comment. MiniOS leaks ARRAY_SIZE into the libxc namespace as part of a stubdom build. Therefore, xc_private.h gains an #ifndef until MiniOS is fixed. Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> CC: Ian Campbell <Ian.Campbell@xxxxxxxxxx> CC: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx> -- v2: Find more areas of the codebase which are poking at libxc private internals v3: Refine how xen-{hptool,mfndump} deal with the namespace issue --- tools/libxc/xc_dom_arm.c | 2 +- tools/libxc/xc_dom_x86.c | 4 ++-- tools/libxc/xc_minios.c | 2 +- tools/libxc/xc_private.h | 5 +++++ tools/misc/xen-hptool.c | 1 + tools/misc/xen-mfndump.c | 1 + 6 files changed, 11 insertions(+), 4 deletions(-) diff --git a/tools/libxc/xc_dom_arm.c b/tools/libxc/xc_dom_arm.c index 75f8363..cc64363 100644 --- a/tools/libxc/xc_dom_arm.c +++ b/tools/libxc/xc_dom_arm.c @@ -230,7 +230,7 @@ static int set_mode(xc_interface *xch, domid_t domid, char *guest_type) domctl.domain = domid; domctl.cmd = XEN_DOMCTL_set_address_size; - for ( i = 0; i < sizeof(types)/sizeof(types[0]); i++ ) + for ( i = 0; i < ARRAY_SIZE(types); i++ ) if ( !strcmp(types[i].guest, guest_type) ) domctl.u.address_size.size = types[i].size; if ( domctl.u.address_size.size == 0 ) diff --git a/tools/libxc/xc_dom_x86.c b/tools/libxc/xc_dom_x86.c index e034d62..bf06fe4 100644 --- a/tools/libxc/xc_dom_x86.c +++ b/tools/libxc/xc_dom_x86.c @@ -716,7 +716,7 @@ static int x86_compat(xc_interface *xch, domid_t domid, char *guest_type) memset(&domctl, 0, sizeof(domctl)); domctl.domain = domid; domctl.cmd = XEN_DOMCTL_set_address_size; - for ( i = 0; i < sizeof(types)/sizeof(types[0]); i++ ) + for ( i = 0; i < ARRAY_SIZE(types); i++ ) if ( !strcmp(types[i].guest, guest_type) ) domctl.u.address_size.size = types[i].size; if ( domctl.u.address_size.size == 0 ) @@ -887,7 +887,7 @@ int arch_setup_bootlate(struct xc_dom_image *dom) xen_pfn_t shinfo; int i, rc; - for ( i = 0; i < sizeof(types) / sizeof(types[0]); i++ ) + for ( i = 0; i < ARRAY_SIZE(types); i++ ) if ( !strcmp(types[i].guest, dom->guest_type) ) pgd_type = types[i].pgd_type; diff --git a/tools/libxc/xc_minios.c b/tools/libxc/xc_minios.c index e621417..e703684 100644 --- a/tools/libxc/xc_minios.c +++ b/tools/libxc/xc_minios.c @@ -87,7 +87,7 @@ static int minios_privcmd_hypercall(xc_interface *xch, xc_osdep_handle h, privcm int i, ret; call.op = hypercall->op; - for (i = 0; i < sizeof(hypercall->arg) / sizeof(*hypercall->arg); i++) + for (i = 0; i < ARRAY_SIZE(hypercall->arg); i++) call.args[i] = hypercall->arg[i]; ret = HYPERVISOR_multicall(&call, 1); diff --git a/tools/libxc/xc_private.h b/tools/libxc/xc_private.h index 12476ec..4447cec 100644 --- a/tools/libxc/xc_private.h +++ b/tools/libxc/xc_private.h @@ -54,6 +54,11 @@ #define XC_BUILD_BUG_ON(p) ((void)sizeof(struct { int:-!!(p); })) #endif +#ifndef ARRAY_SIZE /* MiniOS leaks ARRAY_SIZE into our namespace as part of a + * stubdom build. It shouldn't... */ +#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0])) +#endif + /* ** Define max dirty page cache to permit during save/restore -- need to balance ** keeping cache usage down with CPU impact of invalidating too often. diff --git a/tools/misc/xen-hptool.c b/tools/misc/xen-hptool.c index d0e8e90..1134603 100644 --- a/tools/misc/xen-hptool.c +++ b/tools/misc/xen-hptool.c @@ -4,6 +4,7 @@ #include <xenstore.h> #include <unistd.h> +#undef ARRAY_SIZE /* We shouldn't be including xc_private.h */ #define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0])) static xc_interface *xch; diff --git a/tools/misc/xen-mfndump.c b/tools/misc/xen-mfndump.c index 1af3bd8..0761f6e 100644 --- a/tools/misc/xen-mfndump.c +++ b/tools/misc/xen-mfndump.c @@ -6,6 +6,7 @@ #include "xg_save_restore.h" +#undef ARRAY_SIZE /* We shouldn't be including xc_private.h */ #define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0])) static xc_interface *xch; -- 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 |