[libvirt] [PATCH 07/23] cpu: Return model from virCPUModelIsAllowed
John Ferlan
jferlan at redhat.com
Thu Oct 12 19:50:29 UTC 2017
On 10/04/2017 10:58 AM, Jiri Denemark wrote:
> If a given CPU model is supported by the hypervisor, we want to know
> more about it, e.g., what features may block its usage on the current
> host and such details are stored in the virDomainCapsCPUModelsPtr list
> which virCPUModelIsAllowed uses to check whether the CPU model is
> supported. Thus if the CPU model is found in the list we can directly
> return a pointer to the corresponding virDomainCapsCPUModel if the
> caller needs to look at the details.
>
> Signed-off-by: Jiri Denemark <jdenemar at redhat.com>
> ---
> src/cpu/cpu.c | 18 ++++++++++++++----
> src/cpu/cpu.h | 3 ++-
> src/cpu/cpu_ppc64.c | 2 +-
> src/cpu/cpu_x86.c | 2 +-
> 4 files changed, 18 insertions(+), 7 deletions(-)
>
> diff --git a/src/cpu/cpu.c b/src/cpu/cpu.c
> index b815ed383a..48290a471b 100644
> --- a/src/cpu/cpu.c
> +++ b/src/cpu/cpu.c
> @@ -819,24 +819,34 @@ virCPUDataParse(const char *xmlStr)
> *
> * @model: CPU model to be checked
> * @models: list of supported CPU models
> + * @hvModel: pointer to matching model from @models will be returned here
As later pointed out - 'hv' == hypervisor version.
In any case, the 'ModelIsAllowed" now feels overloaded returning more
than just true/false that a typical "Is" type function would return.
Sorry, I don't have suggestions, so unless someone else is looking and
has a better name, then just go with it.
The only other concern is that since you're returning a pointer in the
middle of some array, any concerns over some other thread changing
things and freeing what you're looking at?
e.g., should there be a way to deep copy the model information and force
the caller to free when it's done?
As long as you're comfortable with pointing in the middle of an array
(and I didn't see anything existing that would seem to cause a problem),
then fine go with what you have.
Reviewed-by: John Ferlan <jferlan at redhat.com>
John
> *
> * Checks whether @model can be found in the list of supported @models.
> - * If @models is NULL, all models are supported.
> + * If @models is NULL, all models are supported. If both @models and @hvModel
> + * are non-NULL and @model is found in the list of supported models, @hvModel
> + * will be filled with the pointer to the matching CPU model from @models.
> *
> * Returns true if @model is supported, false otherwise.
> */
> bool
> virCPUModelIsAllowed(const char *model,
> - virDomainCapsCPUModelsPtr models)
> + virDomainCapsCPUModelsPtr models,
> + virDomainCapsCPUModelPtr *hvModel)
> {
> size_t i;
>
> + if (hvModel)
> + *hvModel = NULL;
> +
> if (!models)
> return true;
>
> for (i = 0; i < models->nmodels; i++) {
> - if (STREQ(models->models[i].name, model))
> + if (STREQ(models->models[i].name, model)) {
> + if (hvModel)
> + *hvModel = models->models + i;
> return true;
> + }
> }
> return false;
> }
> @@ -908,7 +918,7 @@ virCPUTranslate(virArch arch,
> cpu->mode == VIR_CPU_MODE_HOST_PASSTHROUGH)
> return 0;
>
> - if (virCPUModelIsAllowed(cpu->model, models))
> + if (virCPUModelIsAllowed(cpu->model, models, NULL))
> return 0;
>
> if (cpu->fallback != VIR_CPU_FALLBACK_ALLOW) {
[...]
More information about the libvir-list
mailing list