[PATCH] hyperv: Handle long CPU models better.
Neal Gompa
ngompa13 at gmail.com
Fri Apr 9 01:28:22 UTC 2021
On Thu, Apr 8, 2021 at 11:52 AM Dawid Zamirski <dzrudy at gmail.com> wrote:
>
> Apparenlly exising code was dealing with stripping down Intel CPU models
> as reported by Hyper-V host but was still having issues with my AMD CPU
> for which Hyper-V returns "AMD FX(tm)-8350 Eight-Core Processor".
> Therefore, this patch deals with it by stripping out the "
> Processor" part, and if there's another CPU that we don't know of
> yet that causes trouble, trim the resulting string to 32 characters
> rather than failing as the node info has other information that are
> more useful than the model.
> ---
> src/hyperv/hyperv_driver.c | 17 ++++++++---------
> 1 file changed, 8 insertions(+), 9 deletions(-)
>
> diff --git a/src/hyperv/hyperv_driver.c b/src/hyperv/hyperv_driver.c
> index 17f5be1f0d..6e03aa4f18 100644
> --- a/src/hyperv/hyperv_driver.c
> +++ b/src/hyperv/hyperv_driver.c
> @@ -1948,14 +1948,14 @@ hypervNodeGetInfo(virConnectPtr conn, virNodeInfoPtr info)
> if (STRPREFIX(tmp, " ")) {
> memmove(tmp, tmp + 1, strlen(tmp + 1) + 1);
> continue;
> - } else if (STRPREFIX(tmp, "(R)") || STRPREFIX(tmp, "(C)")) {
> + } else if (STRCASEPREFIX(tmp, "(R)") || STRCASEPREFIX(tmp, "(C)")) {
> memmove(tmp, tmp + 3, strlen(tmp + 3) + 1);
> continue;
> - } else if (STRPREFIX(tmp, "(TM)")) {
> + } else if (STRCASEPREFIX(tmp, "(TM)")) {
> memmove(tmp, tmp + 4, strlen(tmp + 4) + 1);
> continue;
> - } else if (STRPREFIX(tmp, " @ ")) {
> - /* Remove " @ X.YZGHz" from the end. */
> + } else if (STRPREFIX(tmp, " @ ") || STRPREFIX(tmp, " Processor")) {
> + /* Remove " @ X.YZGHz" or " Processor" from the end. */
> *tmp = '\0';
> break;
> }
> @@ -1963,13 +1963,12 @@ hypervNodeGetInfo(virConnectPtr conn, virNodeInfoPtr info)
> ++tmp;
> }
>
> + /* trim whatever is left to 32 characters - better this than nothing */
> + processorList->data->Name[31] = '\0';
> +
> /* Fill struct */
> - if (virStrcpyStatic(info->model, processorList->data->Name) < 0) {
> - virReportError(VIR_ERR_INTERNAL_ERROR,
> - _("CPU model %s too long for destination"),
> - processorList->data->Name);
> + if (virStrcpyStatic(info->model, processorList->data->Name) < 0)
> return -1;
> - }
>
> info->memory = computerSystem->data->TotalPhysicalMemory / 1024; /* byte to kilobyte */
> info->mhz = processorList->data->MaxClockSpeed;
> --
> 2.31.1
>
Looks reasonable to me.
When you resend with the Signed-off-by statement added, you can also add:
Reviewed-by: Neal Gompa <ngompa13 at gmail.com>
--
真実はいつも一つ!/ Always, there's only one truth!
More information about the libvir-list
mailing list