[Libvir] C bindings

Daniel P. Berrange berrange at redhat.com
Tue Dec 11 16:11:55 UTC 2007


On Tue, Dec 11, 2007 at 12:47:34PM +0000, Richard W.M. Jones wrote:
> Katti, Vadiraj (STSD-Openview) wrote:
> >Hi Richard,
> >
> >DOMFLAGS_DYING is available in dom0_ops.h
> >
> ># find /usr/include -name '*.h' | xargs grep DOMFLAGS_DYING
> >/usr/include/xen/dom0_ops.h:#define DOMFLAGS_DYING     (1<<0) /* Domain
> >is scheduled to die.             */
> 
> I'm pretty certain this is a bug in libvirt, introduced by this patch:
> 
> http://www.redhat.com/archives/libvir-list/2007-April/msg00078.html
> 
> I think Dan's probably the best one to tell us what's going on here, but 
> from my understanding the patch above is wrong and should have instead 
> added this:
> 
> #ifndef DOMFLAGS_HVM
> #define DOMFLAGS_HVM (1<<1)
> #endif

Well the existing code block is this

#ifndef DOMFLAGS_DYING
#define DOMFLAGS_DYING     (1<<0) /* Domain is scheduled to die.             */
#define DOMFLAGS_HVM       (1<<1) /* Domain is HVM                           */
#define DOMFLAGS_SHUTDOWN  (1<<2) /* The guest OS has shut down.             */
#define DOMFLAGS_PAUSED    (1<<3) /* Currently paused by control software.   */
#define DOMFLAGS_BLOCKED   (1<<4) /* Currently blocked pending an event.     */
#define DOMFLAGS_RUNNING   (1<<5) /* Domain is currently running.            */
#define DOMFLAGS_CPUMASK      255 /* CPU to which this domain is bound.      */
#define DOMFLAGS_CPUSHIFT       8
#define DOMFLAGS_SHUTDOWNMASK 255 /* DOMFLAGS_SHUTDOWN guest-supplied code.  */
#define DOMFLAGS_SHUTDOWNSHIFT 16
#endif

So, all the DOMFLAGS_* constants are defined if we don't already have
them. Current Xen headers don't define any of the DOMFLAGS_* values,
but it seems older headers do define some, but not all, which is why 
we end up missing the _HVM flag. 

To be honest, we should have simply #define'd them all ourselves with a
different namespace to the public Xen headers. We should't rely on any
stuff in the Xen headers since we know they chance that at will.

> #ifdef DOMFLAGS_HVM
> domain_flags &= ~DOMFLAGS_HVM; /* Mask out HVM flags */
> #endif

This #ifdef is unneccessary, since the code higher up should always
define DOMFLAGS_HVM.

Regards,
Dan.
-- 
|=- Red Hat, Engineering, Emerging Technologies, Boston.  +1 978 392 2496 -=|
|=-           Perl modules: http://search.cpan.org/~danberr/              -=|
|=-               Projects: http://freshmeat.net/~danielpb/               -=|
|=-  GnuPG: 7D3B9505   F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505  -=| 




More information about the libvir-list mailing list