[libvirt] [PATCH] Convert qemu command line flags to 64-bit int

Daniel Veillard veillard at redhat.com
Wed Feb 10 09:56:49 UTC 2010


On Tue, Feb 09, 2010 at 07:04:24PM +0000, Daniel P. Berrange wrote:
> The QEMU flags are commonly stored as a signed or unsigned int,
> allowing only 31 flags. This limit is rather close, so to aid
> future patches, change it to a 64-bit int
> 
> * src/qemu/qemu_conf.c, src/qemu/qemu_conf.h, src/qemu/qemu_driver.c,
>   tests/qemuargv2xmltest.c, tests/qemuhelptest.c, tests/qemuxml2argvtest.c:
>   Use 'unsigned long long' for QEMU flags
> ---
>  src/qemu/qemu_conf.c     |   28 ++++++++++++++--------------
>  src/qemu/qemu_conf.h     |   14 +++++++-------
>  src/qemu/qemu_driver.c   |   12 ++++++------
>  tests/qemuargv2xmltest.c |    2 +-
>  tests/qemuhelptest.c     |   13 +++++++------
>  tests/qemuxml2argvtest.c |    7 ++++---
>  6 files changed, 39 insertions(+), 37 deletions(-)
> 
> diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
> index 257b4a4..e3769c8 100644
> --- a/src/qemu/qemu_conf.c
> +++ b/src/qemu/qemu_conf.c
> @@ -1108,12 +1108,12 @@ virCapsPtr qemudCapsInit(virCapsPtr old_caps) {
>      return NULL;
>  }
>  
> -static unsigned int qemudComputeCmdFlags(const char *help,
> -                                         unsigned int version,
> -                                         unsigned int is_kvm,
> -                                         unsigned int kvm_version)
> +static unsigned long long qemudComputeCmdFlags(const char *help,
> +                                               unsigned int version,
> +                                               unsigned int is_kvm,
> +                                               unsigned int kvm_version)
>  {
> -    unsigned int flags = 0;
> +    unsigned long long flags = 0;
>  
>      if (strstr(help, "-no-kqemu"))
>          flags |= QEMUD_CMD_FLAG_KQEMU;
> @@ -1236,7 +1236,7 @@ static unsigned int qemudComputeCmdFlags(const char *help,
>  #define SKIP_BLANKS(p) do { while ((*(p) == ' ') || (*(p) == '\t')) (p)++; } while (0)
>  
>  int qemudParseHelpStr(const char *help,
> -                      unsigned int *flags,
> +                      unsigned long long *flags,
>                        unsigned int *version,
>                        unsigned int *is_kvm,
>                        unsigned int *kvm_version)
> @@ -1316,14 +1316,14 @@ fail:
>  
>  int qemudExtractVersionInfo(const char *qemu,
>                              unsigned int *retversion,
> -                            unsigned int *retflags) {
> +                            unsigned long long *retflags) {
>      const char *const qemuarg[] = { qemu, "-help", NULL };
>      const char *const qemuenv[] = { "LC_ALL=C", NULL };
>      pid_t child;
>      int newstdout = -1;
>      int ret = -1, status;
>      unsigned int version, is_kvm, kvm_version;
> -    unsigned int flags = 0;
> +    unsigned long long flags = 0;
>  
>      if (retflags)
>          *retflags = 0;
> @@ -1425,7 +1425,7 @@ int
>  qemudNetworkIfaceConnect(virConnectPtr conn,
>                           struct qemud_driver *driver,
>                           virDomainNetDefPtr net,
> -                         int qemuCmdFlags)
> +                         unsigned long long qemuCmdFlags)
>  {
>      char *brname = NULL;
>      int err;
> @@ -1637,7 +1637,7 @@ no_memory:
>  
>  
>  int
> -qemuAssignDeviceDiskAlias(virDomainDiskDefPtr def, int qemuCmdFlags)
> +qemuAssignDeviceDiskAlias(virDomainDiskDefPtr def, unsigned long long qemuCmdFlags)
>  {
>      if (qemuCmdFlags & QEMUD_CMD_FLAG_DRIVE) {
>          if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE)
> @@ -1720,7 +1720,7 @@ qemuAssignDeviceControllerAlias(virDomainControllerDefPtr controller)
>  
>  
>  static int
> -qemuAssignDeviceAliases(virDomainDefPtr def, int qemuCmdFlags)
> +qemuAssignDeviceAliases(virDomainDefPtr def, unsigned long long qemuCmdFlags)
>  {
>      int i;
>  
> @@ -2189,7 +2189,7 @@ qemuSafeSerialParamValue(virConnectPtr conn,
>  char *
>  qemuBuildDriveStr(virDomainDiskDefPtr disk,
>                    int bootable,
> -                  int qemuCmdFlags)
> +                  unsigned long long qemuCmdFlags)
>  {
>      virBuffer opt = VIR_BUFFER_INITIALIZER;
>      const char *bus = virDomainDiskQEMUBusTypeToString(disk->bus);
> @@ -3017,7 +3017,7 @@ no_memory:
>  
>  static char *
>  qemuBuildSmpArgStr(const virDomainDefPtr def,
> -                   int qemuCmdFlags)
> +                   unsigned long long qemuCmdFlags)
>  {
>      virBuffer buf = VIR_BUFFER_INITIALIZER;
>  
> @@ -3057,7 +3057,7 @@ int qemudBuildCommandLine(virConnectPtr conn,
>                            virDomainDefPtr def,
>                            virDomainChrDefPtr monitor_chr,
>                            int monitor_json,
> -                          unsigned int qemuCmdFlags,
> +                          unsigned long long qemuCmdFlags,
>                            const char ***retargv,
>                            const char ***retenv,
>                            int **tapfds,
> diff --git a/src/qemu/qemu_conf.h b/src/qemu/qemu_conf.h
> index 5525b6c..f6397b7 100644
> --- a/src/qemu/qemu_conf.h
> +++ b/src/qemu/qemu_conf.h
> @@ -170,10 +170,10 @@ virCapsPtr  qemudCapsInit               (virCapsPtr old_caps);
>  int         qemudExtractVersion         (struct qemud_driver *driver);
>  int         qemudExtractVersionInfo     (const char *qemu,
>                                           unsigned int *version,
> -                                         unsigned int *flags);
> +                                         unsigned long long *qemuCmdFlags);
>  
>  int         qemudParseHelpStr           (const char *str,
> -                                         unsigned int *flags,
> +                                         unsigned long long *qemuCmdFlags,
>                                           unsigned int *version,
>                                           unsigned int *is_kvm,
>                                           unsigned int *kvm_version);
> @@ -183,7 +183,7 @@ int         qemudBuildCommandLine       (virConnectPtr conn,
>                                           virDomainDefPtr def,
>                                           virDomainChrDefPtr monitor_chr,
>                                           int monitor_json,
> -                                         unsigned int qemuCmdFlags,
> +                                         unsigned long long qemuCmdFlags,
>                                           const char ***retargv,
>                                           const char ***retenv,
>                                           int **tapfds,
> @@ -205,12 +205,12 @@ char * qemuBuildNicStr(virConnectPtr conn,
>  
>  /* Current, best practice */
>  char * qemuBuildNicDevStr(virDomainNetDefPtr net,
> -                          int qemuCmdFlags);
> +                          int vlan);
>  
>  /* Both legacy & current support */
>  char *qemuBuildDriveStr(virDomainDiskDefPtr disk,
>                          int bootable,
> -                        int qemuCmdFlags);
> +                        unsigned long long qemuCmdFlags);
>  
>  /* Current, best practice */
>  char * qemuBuildDriveDevStr(virConnectPtr conn,
> @@ -244,7 +244,7 @@ char * qemuBuildUSBHostdevDevStr(virDomainHostdevDefPtr dev);
>  int         qemudNetworkIfaceConnect    (virConnectPtr conn,
>                                           struct qemud_driver *driver,
>                                           virDomainNetDefPtr net,
> -                                         int qemuCmdFlags);
> +                                         unsigned long long qemuCmdFlags);
>  
>  int         qemudProbeMachineTypes      (const char *binary,
>                                           virCapsGuestMachinePtr **machines,
> @@ -283,7 +283,7 @@ int  qemuAssignDevicePCISlots(virDomainDefPtr def, qemuDomainPCIAddressSetPtr ad
>  
>  int qemuDomainNetVLAN(virDomainNetDefPtr def);
>  int qemuAssignDeviceNetAlias(virDomainDefPtr def, virDomainNetDefPtr net, int idx);
> -int qemuAssignDeviceDiskAlias(virDomainDiskDefPtr def, int qemuCmdFlags);
> +int qemuAssignDeviceDiskAlias(virDomainDiskDefPtr def, unsigned long long qemuCmdFlags);
>  int qemuAssignDeviceHostdevAlias(virDomainDefPtr def, virDomainHostdevDefPtr net, int idx);
>  int qemuAssignDeviceControllerAlias(virDomainControllerDefPtr controller);
>  
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index 4374291..54d33cd 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -2520,7 +2520,7 @@ static int qemudStartVMDaemon(virConnectPtr conn,
>      struct stat sb;
>      int *tapfds = NULL;
>      int ntapfds = 0;
> -    unsigned int qemuCmdFlags;
> +    unsigned long long qemuCmdFlags;
>      fd_set keepfd;
>      const char *emulator;
>      pid_t child;
> @@ -4707,7 +4707,7 @@ static char *qemuDomainXMLToNative(virConnectPtr conn,
>      virDomainDefPtr def = NULL;
>      virDomainChrDef monConfig;
>      const char *emulator;
> -    unsigned int qemuCmdFlags;
> +    unsigned long long qemuCmdFlags;
>      struct stat sb;
>      const char **retargv = NULL;
>      const char **retenv = NULL;
> @@ -5586,7 +5586,7 @@ static int qemudDomainAttachNetDevice(virConnectPtr conn,
>                                        struct qemud_driver *driver,
>                                        virDomainObjPtr vm,
>                                        virDomainNetDefPtr net,
> -                                      unsigned int qemuCmdFlags)
> +                                      unsigned long long qemuCmdFlags)
>  {
>      qemuDomainObjPrivatePtr priv = vm->privateData;
>      char *tapfd_name = NULL;
> @@ -5901,7 +5901,7 @@ static int qemudDomainAttachDevice(virDomainPtr dom,
>      struct qemud_driver *driver = dom->conn->privateData;
>      virDomainObjPtr vm;
>      virDomainDeviceDefPtr dev = NULL;
> -    unsigned int qemuCmdFlags;
> +    unsigned long long qemuCmdFlags;
>      virCgroupPtr cgroup = NULL;
>      int ret = -1;
>  
> @@ -7437,7 +7437,7 @@ qemudDomainMigratePrepareTunnel(virConnectPtr dconn,
>      int ret = -1;
>      int internalret;
>      char *unixfile = NULL;
> -    unsigned int qemuCmdFlags;
> +    unsigned long long qemuCmdFlags;
>      struct qemuStreamMigFile *qemust = NULL;
>  
>      qemuDriverLock(driver);
> @@ -7884,7 +7884,7 @@ static int doTunnelMigrate(virDomainPtr dom,
>      virStreamPtr st = NULL;
>      char *unixfile = NULL;
>      int internalret;
> -    unsigned int qemuCmdFlags;
> +    unsigned long long qemuCmdFlags;
>      int status;
>      unsigned long long transferred, remaining, total;
>  
> diff --git a/tests/qemuargv2xmltest.c b/tests/qemuargv2xmltest.c
> index 1f1914b..c125a34 100644
> --- a/tests/qemuargv2xmltest.c
> +++ b/tests/qemuargv2xmltest.c
> @@ -75,7 +75,7 @@ static int testCompareXMLToArgvFiles(const char *xml,
>  
>  struct testInfo {
>      const char *name;
> -    int extraFlags;
> +    unsigned long long extraFlags;
>      const char *migrateFrom;
>  };
>  
> diff --git a/tests/qemuhelptest.c b/tests/qemuhelptest.c
> index 34a6048..0f2b509 100644
> --- a/tests/qemuhelptest.c
> +++ b/tests/qemuhelptest.c
> @@ -12,10 +12,10 @@
>  
>  struct testInfo {
>      const char *name;
> -    unsigned flags;
> -    unsigned version;
> -    unsigned is_kvm;
> -    unsigned kvm_version;
> +    unsigned long long flags;
> +    unsigned int version;
> +    unsigned int is_kvm;
> +    unsigned int kvm_version;
>  };
>  
>  static char *progname;
> @@ -41,7 +41,8 @@ static int testHelpStrParsing(const void *data)
>      char path[PATH_MAX];
>      char helpStr[MAX_HELP_OUTPUT_SIZE];
>      char *help = &(helpStr[0]);
> -    unsigned flags, version, is_kvm, kvm_version;
> +    unsigned int version, is_kvm, kvm_version;
> +    unsigned long long flags;
>  
>      snprintf(path, PATH_MAX, "%s/qemuhelpdata/%s", abs_srcdir, info->name);
>  
> @@ -52,7 +53,7 @@ static int testHelpStrParsing(const void *data)
>          return -1;
>  
>      if (flags != info->flags) {
> -        fprintf(stderr, "Computed flags do not match: got 0x%x, expected 0x%x\n",
> +        fprintf(stderr, "Computed flags do not match: got 0x%llx, expected 0x%llx\n",
>                  flags, info->flags);
>  
>          if (getenv("VIR_TEST_DEBUG"))
> diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
> index 67dc47e..f4908b8 100644
> --- a/tests/qemuxml2argvtest.c
> +++ b/tests/qemuxml2argvtest.c
> @@ -24,7 +24,7 @@ static struct qemud_driver driver;
>  
>  static int testCompareXMLToArgvFiles(const char *xml,
>                                       const char *cmd,
> -                                     int extraFlags,
> +                                     unsigned long long extraFlags,
>                                       const char *migrateFrom) {
>      char argvData[MAX_FILE];
>      char *expectargv = &(argvData[0]);
> @@ -32,7 +32,8 @@ static int testCompareXMLToArgvFiles(const char *xml,
>      const char **argv = NULL;
>      const char **qenv = NULL;
>      const char **tmp = NULL;
> -    int ret = -1, len, flags;
> +    int ret = -1, len;
> +    unsigned long long flags;
>      virDomainDefPtr vmdef = NULL;
>      virDomainChrDef monitor_chr;
>  
> @@ -142,7 +143,7 @@ static int testCompareXMLToArgvFiles(const char *xml,
>  
>  struct testInfo {
>      const char *name;
> -    int extraFlags;
> +    unsigned long long extraFlags;
>      const char *migrateFrom;
>  };

  ACK, that was something I was about to look at :-)
hopefully the enum definition for the flags will allow to go over
32 bits too, I think the patch should also change all the
QEMUD_CMD_FLAG_ in /src/qemu/qemu_conf.h to be redefined from
(1 << x) into (1UUL << x),

Daniel


-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/




More information about the libvir-list mailing list