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

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



On Tue, 2013-02-19 at 11:42 +0000, Olaf Hering wrote:
> 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_* */

Why is this called "xlflags"? xl isn't the only user of this interface.

>     int max_iters;
>     int max_factor;
> } libxl_save_properties;

s/save/suspend/ to match the function it is passed to? Perhaps
libxl_domain_suspend_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

I don't understand the need for this alternative, you are defining
version 0x040300 in this patch and in the absence of LIBXL_API_VERSION
this should therefore be the expected interface I think. We haven't
released Xen 0x040300 yet.

> #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®.