[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v4] tools: set migration constraints from cmdline



On Mon, Feb 04, Ian Campbell wrote:

> On Fri, 2013-02-01 at 19:34 +0000, Olaf Hering wrote:
> > +++ b/tools/libxl/libxl.h
> > @@ -500,12 +500,25 @@ int libxl_domain_create_restore(libxl_ct
> >  void libxl_domain_config_init(libxl_domain_config *d_config);
> >  void libxl_domain_config_dispose(libxl_domain_config *d_config);
> > 
> > -int libxl_domain_suspend(libxl_ctx *ctx, uint32_t domid, int fd,
> > +int libxl_domain_suspend_0x040200(libxl_ctx *ctx, uint32_t domid, int fd,
> >                           int flags, /* LIBXL_SUSPEND_* */
> >                           const libxl_asyncop_how *ao_how)
> >                           LIBXL_EXTERNAL_CALLERS_ONLY;
> > +#ifdef LIBXL_API_VERSION
> > +#if LIBXL_API_VERSION == 0x040200
> > +#define libxl_domain_suspend libxl_domain_suspend_0x040200
> 
> int libxl_domain_suspend(libxl_ctx *ctx, uint32_t domid, int fd,
>                          int flags, /* LIBXL_SUSPEND_* */
>                          int max_iters, int max_factor,
>                          const libxl_asyncop_how *ao_how)
>                          LIBXL_EXTERNAL_CALLERS_ONLY;
> #ifdef LIBXL_API_VERSION
> #if LIBXL_API_VERSION == 0x040200
> #define libxl_domain_suspend(ctx, domid, fd, flags, ao_how) \
>             libxl_domain_suspend(ctx, domid, fd, flags, 0, 0, ao_how) 
> #endif /* LIBXL_API_VERSION == 0x040200 */
> #endif /* defined(LIBXL_API_VERSION) */
> 
> Should work?
> 
> Not sure if
> #if defined(LIBXL_API_VERSION) && LIBXL_API_VERSION == 0x040200
> works in CPP.
> 
> Maybe we should
> #ifndef LIBXL_API_VERSION
> #define LIBXL_API_VERSION LIBXL_API_VERSION_LATEST
> #endif
> ?

Here is another attempt to make use of LIBXL_API_VERSION. Two versions
just for testing. I would use the static inline variant because we code
in C, not cpp.


...
/* API compatibility. */
#ifdef LIBXL_API_VERSION
#if LIBXL_API_VERSION != 0x040200 && LIBXL_API_VERSION != 0x040300
#error Unknown LIBXL_API_VERSION
#endif
#endif

typedef struct {
    int xlflags; /* LIBXL_SUSPEND_* */
    int max_iters;
    int max_factor;
} libxl_save_properties;

int libxl_domain_suspend(libxl_ctx *ctx, uint32_t domid, int fd,
                         const libxl_save_properties *props,
                         const libxl_asyncop_how *ao_how)
                         LIBXL_EXTERNAL_CALLERS_ONLY;
#ifdef LIBXL_API_VERSION
#if LIBXL_API_VERSION == 0x040200
#define libxl_domain_suspend(__ctx, __domid, __fd, __flags, __ao_how) \
({ \
    libxl_save_properties __props = { .xlflags = (__flags) }; \
    int __ret = libxl_domain_suspend((__ctx), (__domid), (__fd), &__props, 
(__ao_how)); \
    __ret; \
})
#elif LIBXL_API_VERSION == 0x040300
static inline int libxl_domain_suspend_0x040300(libxl_ctx *ctx, uint32_t domid, 
int fd,
                          int flags, const libxl_asyncop_how *ao_how)
{
    libxl_save_properties props = { .xlflags = flags };
    return libxl_domain_suspend(ctx, domid, fd, &props, ao_how);
}
#define libxl_domain_suspend libxl_domain_suspend_0x040300
#endif
#endif


/* cat > t.c
 * gcc -Wall -o t t.c --save-temps -g
 * -I tools/libxc -I tools/libxl
 * -Ltools/libxc -L tools/libxl -lxenlight
 * -Wl,-rpath,$PWD/tools/libxc,-rpath,$PWD/tools/libxl
 */
#define LIBXL_API_VERSION  0x040300

#include "tools/libxl/libxl.h"

int main(void)
{
        int ret;
#if LIBXL_API_VERSION == 0x040200
        ret = libxl_domain_suspend(NULL, 0, 0, 0, NULL);
#elif LIBXL_API_VERSION == 0x040300
        ret = libxl_domain_suspend(NULL, 0, 0, 0, NULL);
#else
        ret = libxl_domain_suspend(NULL, 0, 0, NULL, NULL);
#endif
        return ret;
}


Olaf

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.