Re: [PATCH 1/2] virhostcpu: Introduce virHostCPUGetIsolated()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 4/22/24 15:11, Martin Kletzander wrote:
> On Mon, Apr 22, 2024 at 02:02:28PM +0100, Daniel P. Berrangé wrote:
>> On Mon, Apr 22, 2024 at 02:29:32PM +0200, Martin Kletzander wrote:
>>> On Mon, Apr 22, 2024 at 01:38:38PM +0200, Michal Privoznik wrote:
>>> > This is a helper that parses /sys/devices/system/cpu/isolated
>>> > into a virBitmap. It's going to be needed soon.
>>> >
>>> > Signed-off-by: Michal Privoznik <mprivozn@xxxxxxxxxx>
>>> > ---
>>> > src/libvirt_private.syms |  1 +
>>> > src/util/virhostcpu.c    | 21 +++++++++++++++++++++
>>> > src/util/virhostcpu.h    |  1 +
>>> > 3 files changed, 23 insertions(+)
>>> >
>>> > diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
>>> > index 839fe4f545..ed85f022e4 100644
>>> > --- a/src/libvirt_private.syms
>>> > +++ b/src/libvirt_private.syms
>>> > @@ -2502,6 +2502,7 @@ virHostCPUGetCount;
>>> > virHostCPUGetCPUID;
>>> > virHostCPUGetHaltPollTime;
>>> > virHostCPUGetInfo;
>>> > +virHostCPUGetIsolated;
>>> > virHostCPUGetKVMMaxVCPUs;
>>> > virHostCPUGetMap;
>>> > virHostCPUGetMicrocodeVersion;
>>> > diff --git a/src/util/virhostcpu.c b/src/util/virhostcpu.c
>>> > index 01de69c0d1..e61eb12414 100644
>>> > --- a/src/util/virhostcpu.c
>>> > +++ b/src/util/virhostcpu.c
>>> > @@ -1151,6 +1151,27 @@ virHostCPUGetAvailableCPUsBitmap(void)
>>> >     return g_steal_pointer(&bitmap);
>>> > }
>>> >
>>> > +/**
>>> > + * virHostCPUGetIsolated:
>>> > + *
>>> > + * Returns a bitmap of isolated CPUs (e.g. those passed to
>>> isolcpus= kernel
>>> > + * cmdline).
>>> > + */
>>> > +virBitmap *
>>> > +virHostCPUGetIsolated(void)
>>> > +{
>>>
>>> So this function will fail on anything non-Linux and we probably do not
>>> want that.  If the platform does not support isolcpus, then it is fine
>>> to return an empty bitmap.
>>>
>>> > +#ifdef __linux__
>>> > +    virBitmap *ret = NULL;
>>> > +
>>> > +    virFileReadValueBitmap(&ret, "%s/cpu/isolated",
>>> SYSFS_SYSTEM_PATH);
>>> > +
>>>
>>> And this will fail (return NULL) on any system without isolcpus=, which
>>> is also probably something we do not want.
>>
>> The 'isolated' file exists, but is empty on such systems. So IIUC you're
>> saying virFileReadValueBitmap will fail to parse the empty string and
>> report it as an error ?
>>
> 
> Yes, virBitmapParseUnlimited() will call virBitmapParseInternal() which
> checks:
> 
> [...]
> const char *cur = str;
> [...]
> if (!str)
>     goto error;
> 
> virSkipSpaces(&cur);
> 
> if (*cur == '\0')
>     goto error;
> 
> and to make sure I tested it and the virBitmap * is NULL and the
> function returns -1.

Oh, I didn't realize an empty file (well, "\n\0") makes this function
fail. That complicates things a bit. Let me see what can be done about it.

Michal
_______________________________________________
Devel mailing list -- devel@xxxxxxxxxxxxxxxxx
To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxx




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux