Re: [libvirt] [PATCH v2 02/22] conf: Add usability blockers to virDomainCapsCPUModel

2017-10-27 Thread Marc Hartmayer
On Thu, Oct 26, 2017 at 12:24 PM +0200, Jiri Denemark  
wrote:
> On Wed, Oct 25, 2017 at 10:56:51 +0200, Marc Hartmayer wrote:
>> On Fri, Oct 13, 2017 at 08:14 PM +0200, Jiri Denemark  
>> wrote:
>> > When a hypervisor marks a CPU model as unusable on the current host, it
>> > may also give us a list of features which prevent the model from being
>> > usable. Storing this list in virDomainCapsCPUModel will help the CPU
>> > driver with creating a host-model CPU configuration.
>> >
>> > Signed-off-by: Jiri Denemark 
>> > Reviewed-by: John Ferlan 
> ...
>> > diff --git a/src/conf/domain_capabilities.h 
>> > b/src/conf/domain_capabilities.h
>> > index 82183c4524..8c71dec21e 100644
>> > --- a/src/conf/domain_capabilities.h
>> > +++ b/src/conf/domain_capabilities.h
>> > @@ -116,6 +116,7 @@ typedef virDomainCapsCPUModel 
>> > *virDomainCapsCPUModelPtr;
>> >  struct _virDomainCapsCPUModel {
>> >  char *name;
>> >  virDomainCapsCPUUsable usable;
>> > +char **blockers; /* NULL-terminated list of usability blockers */
>> >  };
>>
>> I know this is an "old" thread and already pushed. But I think you have
>> to free the blockers list in virDomainCapsCPUModelsDispose as well. No?
>
> Oops, you're right. I've just sent a patch to fix this. Thanks.

Thanks.

>
> Jirka
>
--
Beste Grüße / Kind regards
   Marc Hartmayer

IBM Deutschland Research & Development GmbH
Vorsitzende des Aufsichtsrats: Martina Koederitz
Geschäftsführung: Dirk Wittkopp
Sitz der Gesellschaft: Böblingen
Registergericht: Amtsgericht Stuttgart, HRB 243294


--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Re: [libvirt] [PATCH v2 02/22] conf: Add usability blockers to virDomainCapsCPUModel

2017-10-26 Thread Jiri Denemark
On Wed, Oct 25, 2017 at 10:56:51 +0200, Marc Hartmayer wrote:
> On Fri, Oct 13, 2017 at 08:14 PM +0200, Jiri Denemark  
> wrote:
> > When a hypervisor marks a CPU model as unusable on the current host, it
> > may also give us a list of features which prevent the model from being
> > usable. Storing this list in virDomainCapsCPUModel will help the CPU
> > driver with creating a host-model CPU configuration.
> >
> > Signed-off-by: Jiri Denemark 
> > Reviewed-by: John Ferlan 
...
> > diff --git a/src/conf/domain_capabilities.h b/src/conf/domain_capabilities.h
> > index 82183c4524..8c71dec21e 100644
> > --- a/src/conf/domain_capabilities.h
> > +++ b/src/conf/domain_capabilities.h
> > @@ -116,6 +116,7 @@ typedef virDomainCapsCPUModel *virDomainCapsCPUModelPtr;
> >  struct _virDomainCapsCPUModel {
> >  char *name;
> >  virDomainCapsCPUUsable usable;
> > +char **blockers; /* NULL-terminated list of usability blockers */
> >  };
> 
> I know this is an "old" thread and already pushed. But I think you have
> to free the blockers list in virDomainCapsCPUModelsDispose as well. No?

Oops, you're right. I've just sent a patch to fix this. Thanks.

Jirka

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


Re: [libvirt] [PATCH v2 02/22] conf: Add usability blockers to virDomainCapsCPUModel

2017-10-25 Thread Marc Hartmayer
On Wed, Oct 25, 2017 at 10:56 AM +0200, Marc Hartmayer 
 wrote:
> On Fri, Oct 13, 2017 at 08:14 PM +0200, Jiri Denemark  
> wrote:
>> When a hypervisor marks a CPU model as unusable on the current host, it
>> may also give us a list of features which prevent the model from being
>> usable. Storing this list in virDomainCapsCPUModel will help the CPU
>> driver with creating a host-model CPU configuration.
>>
>> Signed-off-by: Jiri Denemark 
>> Reviewed-by: John Ferlan 
>> ---
[...snip...]

>>
>> diff --git a/src/conf/domain_capabilities.h b/src/conf/domain_capabilities.h
>> index 82183c4524..8c71dec21e 100644
>> --- a/src/conf/domain_capabilities.h
>> +++ b/src/conf/domain_capabilities.h
>> @@ -116,6 +116,7 @@ typedef virDomainCapsCPUModel *virDomainCapsCPUModelPtr;
>>  struct _virDomainCapsCPUModel {
>>  char *name;
>>  virDomainCapsCPUUsable usable;
>> +char **blockers; /* NULL-terminated list of usability blockers */
>>  };
>
> I know this is an "old" thread and already pushed. But I think you have
> to free the blockers list in virDomainCapsCPUModelsDispose as well. No?

Sorry for the inconvenience. I'll send a patch for it :)

>>
>>  typedef struct _virDomainCapsCPUModels virDomainCapsCPUModels;
>> @@ -171,11 +172,13 @@ virDomainCapsCPUModelsPtr 
>> virDomainCapsCPUModelsFilter(virDomainCapsCPUModelsPtr
>> const char 
>> **blacklist);
>>  int virDomainCapsCPUModelsAddSteal(virDomainCapsCPUModelsPtr cpuModels,
>> char **name,
>> -   virDomainCapsCPUUsable usable);
>> +   virDomainCapsCPUUsable usable,
>> +   char ***blockers);
>>  int virDomainCapsCPUModelsAdd(virDomainCapsCPUModelsPtr cpuModels,
>>const char *name,
>>ssize_t nameLen,
>> -  virDomainCapsCPUUsable usable);
>
> [...snip]
>
> --
> Beste Grüße / Kind regards
>Marc Hartmayer
>
> IBM Deutschland Research & Development GmbH
> Vorsitzende des Aufsichtsrats: Martina Koederitz
> Geschäftsführung: Dirk Wittkopp
> Sitz der Gesellschaft: Böblingen
> Registergericht: Amtsgericht Stuttgart, HRB 243294
--
Beste Grüße / Kind regards
   Marc Hartmayer

IBM Deutschland Research & Development GmbH
Vorsitzende des Aufsichtsrats: Martina Koederitz
Geschäftsführung: Dirk Wittkopp
Sitz der Gesellschaft: Böblingen
Registergericht: Amtsgericht Stuttgart, HRB 243294


--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Re: [libvirt] [PATCH v2 02/22] conf: Add usability blockers to virDomainCapsCPUModel

2017-10-25 Thread Marc Hartmayer
On Fri, Oct 13, 2017 at 08:14 PM +0200, Jiri Denemark  
wrote:
> When a hypervisor marks a CPU model as unusable on the current host, it
> may also give us a list of features which prevent the model from being
> usable. Storing this list in virDomainCapsCPUModel will help the CPU
> driver with creating a host-model CPU configuration.
>
> Signed-off-by: Jiri Denemark 
> Reviewed-by: John Ferlan 
> ---
>
> Notes:
> Version 2:
> - no change
>
>  src/conf/domain_capabilities.c | 30 ++
>  src/conf/domain_capabilities.h |  7 +--
>  src/qemu/qemu_capabilities.c   | 11 ++-
>  tests/domaincapstest.c |  6 +++---
>  4 files changed, 36 insertions(+), 18 deletions(-)
>
> diff --git a/src/conf/domain_capabilities.c b/src/conf/domain_capabilities.c
> index f62038b96c..be34576204 100644
> --- a/src/conf/domain_capabilities.c
> +++ b/src/conf/domain_capabilities.c
> @@ -163,7 +163,8 @@ virDomainCapsCPUModelsCopy(virDomainCapsCPUModelsPtr old)
>  for (i = 0; i < old->nmodels; i++) {
>  if (virDomainCapsCPUModelsAdd(cpuModels,
>old->models[i].name, -1,
> -  old->models[i].usable) < 0)
> +  old->models[i].usable,
> +  old->models[i].blockers) < 0)
>  goto error;
>  }
>
> @@ -195,7 +196,8 @@ virDomainCapsCPUModelsFilter(virDomainCapsCPUModelsPtr 
> old,
>
>  if (virDomainCapsCPUModelsAdd(cpuModels,
>old->models[i].name, -1,
> -  old->models[i].usable) < 0)
> +  old->models[i].usable,
> +  old->models[i].blockers) < 0)
>  goto error;
>  }
>
> @@ -210,7 +212,8 @@ virDomainCapsCPUModelsFilter(virDomainCapsCPUModelsPtr 
> old,
>  int
>  virDomainCapsCPUModelsAddSteal(virDomainCapsCPUModelsPtr cpuModels,
> char **name,
> -   virDomainCapsCPUUsable usable)
> +   virDomainCapsCPUUsable usable,
> +   char ***blockers)
>  {
>  if (VIR_RESIZE_N(cpuModels->models, cpuModels->nmodels_max,
>   cpuModels->nmodels, 1) < 0)
> @@ -218,6 +221,10 @@ virDomainCapsCPUModelsAddSteal(virDomainCapsCPUModelsPtr 
> cpuModels,
>
>  cpuModels->models[cpuModels->nmodels].usable = usable;
>  VIR_STEAL_PTR(cpuModels->models[cpuModels->nmodels].name, *name);
> +
> +if (blockers)
> +VIR_STEAL_PTR(cpuModels->models[cpuModels->nmodels].blockers, 
> *blockers);
> +
>  cpuModels->nmodels++;
>  return 0;
>  }
> @@ -227,20 +234,27 @@ int
>  virDomainCapsCPUModelsAdd(virDomainCapsCPUModelsPtr cpuModels,
>const char *name,
>ssize_t nameLen,
> -  virDomainCapsCPUUsable usable)
> +  virDomainCapsCPUUsable usable,
> +  char **blockers)
>  {
> -char *copy = NULL;
> +char *nameCopy = NULL;
> +char **blockersCopy = NULL;
>
> -if (VIR_STRNDUP(copy, name, nameLen) < 0)
> +if (VIR_STRNDUP(nameCopy, name, nameLen) < 0)
>  goto error;
>
> -if (virDomainCapsCPUModelsAddSteal(cpuModels, ©, usable) < 0)
> +if (virStringListCopy(&blockersCopy, (const char **)blockers) < 0)
> +goto error;
> +
> +if (virDomainCapsCPUModelsAddSteal(cpuModels, &nameCopy,
> +   usable, &blockersCopy) < 0)
>  goto error;
>
>  return 0;
>
>   error:
> -VIR_FREE(copy);
> +VIR_FREE(nameCopy);
> +virStringListFree(blockersCopy);
>  return -1;
>  }
>
> diff --git a/src/conf/domain_capabilities.h b/src/conf/domain_capabilities.h
> index 82183c4524..8c71dec21e 100644
> --- a/src/conf/domain_capabilities.h
> +++ b/src/conf/domain_capabilities.h
> @@ -116,6 +116,7 @@ typedef virDomainCapsCPUModel *virDomainCapsCPUModelPtr;
>  struct _virDomainCapsCPUModel {
>  char *name;
>  virDomainCapsCPUUsable usable;
> +char **blockers; /* NULL-terminated list of usability blockers */
>  };

I know this is an "old" thread and already pushed. But I think you have
to free the blockers list in virDomainCapsCPUModelsDispose as well. No?

>
>  typedef struct _virDomainCapsCPUModels virDomainCapsCPUModels;
> @@ -171,11 +172,13 @@ virDomainCapsCPUModelsPtr 
> virDomainCapsCPUModelsFilter(virDomainCapsCPUModelsPtr
> const char 
> **blacklist);
>  int virDomainCapsCPUModelsAddSteal(virDomainCapsCPUModelsPtr cpuModels,
> char **name,
> -   virDomainCapsCPUUsable usable);
> +   virDomainCapsCPUUsable usable,
> +   char ***blockers);
>  int vi

[libvirt] [PATCH v2 02/22] conf: Add usability blockers to virDomainCapsCPUModel

2017-10-13 Thread Jiri Denemark
When a hypervisor marks a CPU model as unusable on the current host, it
may also give us a list of features which prevent the model from being
usable. Storing this list in virDomainCapsCPUModel will help the CPU
driver with creating a host-model CPU configuration.

Signed-off-by: Jiri Denemark 
Reviewed-by: John Ferlan 
---

Notes:
Version 2:
- no change

 src/conf/domain_capabilities.c | 30 ++
 src/conf/domain_capabilities.h |  7 +--
 src/qemu/qemu_capabilities.c   | 11 ++-
 tests/domaincapstest.c |  6 +++---
 4 files changed, 36 insertions(+), 18 deletions(-)

diff --git a/src/conf/domain_capabilities.c b/src/conf/domain_capabilities.c
index f62038b96c..be34576204 100644
--- a/src/conf/domain_capabilities.c
+++ b/src/conf/domain_capabilities.c
@@ -163,7 +163,8 @@ virDomainCapsCPUModelsCopy(virDomainCapsCPUModelsPtr old)
 for (i = 0; i < old->nmodels; i++) {
 if (virDomainCapsCPUModelsAdd(cpuModels,
   old->models[i].name, -1,
-  old->models[i].usable) < 0)
+  old->models[i].usable,
+  old->models[i].blockers) < 0)
 goto error;
 }
 
@@ -195,7 +196,8 @@ virDomainCapsCPUModelsFilter(virDomainCapsCPUModelsPtr old,
 
 if (virDomainCapsCPUModelsAdd(cpuModels,
   old->models[i].name, -1,
-  old->models[i].usable) < 0)
+  old->models[i].usable,
+  old->models[i].blockers) < 0)
 goto error;
 }
 
@@ -210,7 +212,8 @@ virDomainCapsCPUModelsFilter(virDomainCapsCPUModelsPtr old,
 int
 virDomainCapsCPUModelsAddSteal(virDomainCapsCPUModelsPtr cpuModels,
char **name,
-   virDomainCapsCPUUsable usable)
+   virDomainCapsCPUUsable usable,
+   char ***blockers)
 {
 if (VIR_RESIZE_N(cpuModels->models, cpuModels->nmodels_max,
  cpuModels->nmodels, 1) < 0)
@@ -218,6 +221,10 @@ virDomainCapsCPUModelsAddSteal(virDomainCapsCPUModelsPtr 
cpuModels,
 
 cpuModels->models[cpuModels->nmodels].usable = usable;
 VIR_STEAL_PTR(cpuModels->models[cpuModels->nmodels].name, *name);
+
+if (blockers)
+VIR_STEAL_PTR(cpuModels->models[cpuModels->nmodels].blockers, 
*blockers);
+
 cpuModels->nmodels++;
 return 0;
 }
@@ -227,20 +234,27 @@ int
 virDomainCapsCPUModelsAdd(virDomainCapsCPUModelsPtr cpuModels,
   const char *name,
   ssize_t nameLen,
-  virDomainCapsCPUUsable usable)
+  virDomainCapsCPUUsable usable,
+  char **blockers)
 {
-char *copy = NULL;
+char *nameCopy = NULL;
+char **blockersCopy = NULL;
 
-if (VIR_STRNDUP(copy, name, nameLen) < 0)
+if (VIR_STRNDUP(nameCopy, name, nameLen) < 0)
 goto error;
 
-if (virDomainCapsCPUModelsAddSteal(cpuModels, ©, usable) < 0)
+if (virStringListCopy(&blockersCopy, (const char **)blockers) < 0)
+goto error;
+
+if (virDomainCapsCPUModelsAddSteal(cpuModels, &nameCopy,
+   usable, &blockersCopy) < 0)
 goto error;
 
 return 0;
 
  error:
-VIR_FREE(copy);
+VIR_FREE(nameCopy);
+virStringListFree(blockersCopy);
 return -1;
 }
 
diff --git a/src/conf/domain_capabilities.h b/src/conf/domain_capabilities.h
index 82183c4524..8c71dec21e 100644
--- a/src/conf/domain_capabilities.h
+++ b/src/conf/domain_capabilities.h
@@ -116,6 +116,7 @@ typedef virDomainCapsCPUModel *virDomainCapsCPUModelPtr;
 struct _virDomainCapsCPUModel {
 char *name;
 virDomainCapsCPUUsable usable;
+char **blockers; /* NULL-terminated list of usability blockers */
 };
 
 typedef struct _virDomainCapsCPUModels virDomainCapsCPUModels;
@@ -171,11 +172,13 @@ virDomainCapsCPUModelsPtr 
virDomainCapsCPUModelsFilter(virDomainCapsCPUModelsPtr
const char **blacklist);
 int virDomainCapsCPUModelsAddSteal(virDomainCapsCPUModelsPtr cpuModels,
char **name,
-   virDomainCapsCPUUsable usable);
+   virDomainCapsCPUUsable usable,
+   char ***blockers);
 int virDomainCapsCPUModelsAdd(virDomainCapsCPUModelsPtr cpuModels,
   const char *name,
   ssize_t nameLen,
-  virDomainCapsCPUUsable usable);
+  virDomainCapsCPUUsable usable,
+  char **blockers);
 
 # define VIR_DOMAIN_CAPS_ENUM_SET(capsEnum, ...)\
 do {