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(a)redhat.com>
---
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)
+{
+#ifdef __linux__
+ virBitmap *ret = NULL;
+
+ virFileReadValueBitmap(&ret, "%s/cpu/isolated", SYSFS_SYSTEM_PATH);
This can return '-2' if the file does not exist, or '-1' with error
reported if there's a problem opennig/parsing it.
In both cases 'ret' should end up NULL
The next patch treats NULL as an error scenario, but this
means in the '-2' case we'll be returning an error status
up the call stack, but without having actually reported an
error message.
+
+ return ret;
+#else
+ virReportError(VIR_ERR_NO_SUPPORT, "%s",
+ _("map of isolated CPUs not implemented on this
platform"));
+ return NULL;
+#endif
+}
#if WITH_LINUX_KVM_H && defined(KVM_CAP_PPC_SMT)
diff --git a/src/util/virhostcpu.h b/src/util/virhostcpu.h
index d7e09bff22..e7b15a2649 100644
--- a/src/util/virhostcpu.h
+++ b/src/util/virhostcpu.h
@@ -43,6 +43,7 @@ bool virHostCPUHasBitmap(void);
virBitmap *virHostCPUGetPresentBitmap(void);
virBitmap *virHostCPUGetOnlineBitmap(void);
virBitmap *virHostCPUGetAvailableCPUsBitmap(void);
+virBitmap *virHostCPUGetIsolated(void);
int virHostCPUGetCount(void);
int virHostCPUGetThreadsPerSubcore(virArch arch) G_NO_INLINE;
--
2.43.2
_______________________________________________
Devel mailing list -- devel(a)lists.libvirt.org
To unsubscribe send an email to devel-leave(a)lists.libvirt.org
With regards,
Daniel
--
|:
https://berrange.com -o-
https://www.flickr.com/photos/dberrange :|
|:
https://libvirt.org -o-
https://fstop138.berrange.com :|
|:
https://entangle-photo.org -o-
https://www.instagram.com/dberrange :|