
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@edu.unito.it> Signed-off-by: Dario Faggioli <dfaggioli@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