On 8/1/22 19:11, Sasha Algisi wrote:
In order to use SCHED_DEADLINE we need sched_setattr(), as
sched_setscheduler() does not support all the necessary parameters.
Signed-off-by: Sasha Algisi <sasha.algisi(a)edu.unito.it>
Signed-off-by: Dario Faggioli <dfaggioli(a)suse.com>
---
src/util/virprocess.c | 39 +++++++++++++++++++++++++++++++++++++++
1 file changed, 39 insertions(+)
diff --git a/src/util/virprocess.c b/src/util/virprocess.c
index 013afd91b4..a8f86784e1 100644
--- a/src/util/virprocess.c
+++ b/src/util/virprocess.c
@@ -51,6 +51,10 @@
# include <sys/cpuset.h>
#endif
+#if WITH_SYS_SYSCALL_H
+# include <sys/syscall.h>
+#endif
+
#ifdef WIN32
# define WIN32_LEAN_AND_MEAN
# include <windows.h>
@@ -67,6 +71,10 @@
#define VIR_FROM_THIS VIR_FROM_NONE
+#if defined(__linux__) && !defined(SCHED_FLAG_RESET_ON_FORK)
+# define SCHED_FLAG_RESET_ON_FORK 0x01
+#endif
+
VIR_LOG_INIT("util.process");
VIR_ENUM_IMPL(virProcessSchedPolicy,
@@ -79,6 +87,37 @@ VIR_ENUM_IMPL(virProcessSchedPolicy,
);
+#if defined(__linux__) && defined(SCHED_DEADLINE)
+
+struct sched_attr {
+ uint32_t size;
+ uint32_t sched_policy;
+ uint64_t sched_flags;
+
+ /*SCHED_OTHER, SCHED_BATCH*/
+ int32_t sched_nice;
+
+ /*SCHED_FIFO, SCHED_RR*/
+ uint32_t sched_priority;
+
+ /*SCHED_DEADLINE*/
+ uint64_t sched_runtime;
+ uint64_t sched_deadline;
+ uint64_t sched_period;
+};
Darn, I wish we could just include <linux/sched/types.h> but we can't.
Kernel headers (at least the version I'm using: 5.15) are broken as the
header file redefines sched_param struct.
+
+
+static
+int sched_setattr(pid_t pid,
We format it differently:
static int
function(int arg, ..)
+ struct sched_attr *attr,
+ unsigned int flags)
+{
+ return syscall(SYS_sched_setattr, pid, attr, flags);
+}
+
+#endif
Now, this function is not used and is static which makes compiler sad.
Maybe it can be marked as G_GNUC_UNUSED for the time being, until is
used (in the following patch). Or just squash patches together.
Michal