From c4f795859cf13324ac269391cc6bf7fd922dcdb2 Mon Sep 17 00:00:00 2001 From: Ben Dooks Date: Thu, 25 Jan 2024 17:17:18 +0000 Subject: [PATCH 1/3] add errno to sched_setattr failure The sched_setattr() call returns -1 and sets errno to the error code for the failure. Print errno to provide more info than just -1 for the failure. Signed-off-by: Ben Dooks --- src/rt-app.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/rt-app.c b/src/rt-app.c index 673df44..699d1f4 100644 --- a/src/rt-app.c +++ b/src/rt-app.c @@ -1030,9 +1030,10 @@ static void _set_thread_deadline(thread_data_t *data, sched_data_t *sched_data) ret = sched_setattr(tid, &sa_params, flags); if (ret) { - log_critical("[%d] sched_setattr returned %d", - data->ind, ret); - errno = ret; + int tmp = errno; + log_critical("[%d] sched_setattr returned %d (%d - %s)", + data->ind, ret, errno, strerror(errno)); + errno = tmp; perror("sched_setattr: failed to set deadline attributes"); exit(EXIT_FAILURE); } @@ -1076,9 +1077,10 @@ static void _set_thread_uclamp(thread_data_t *data, sched_data_t *sched_data) ret = sched_setattr(tid, &sa_params, flags); if (ret) { - log_critical("[%d] sched_setattr returned %d", - data->ind, ret); - errno = ret; + int tmp = errno; + log_critical("[%d] sched_setattr returned %d (errno %d: %s)", + data->ind, ret, tmp, strerror(tmp)); + errno = tmp; perror("sched_setattr: failed to set uclamp value(s)"); exit(EXIT_FAILURE); } From f3a010a7aaac84f7d8195755caf9ac6e47acd5aa Mon Sep 17 00:00:00 2001 From: Ben Dooks Date: Tue, 6 Feb 2024 13:59:57 +0000 Subject: [PATCH 2/3] error if calibrate_cpu_cycles() fails If calibrate_cpu_cycles() fails, then it returns 0 and this value is used to calculate other information and thus will fail with an divide-by-zero error further along. Exit out here if it returns 0. --- src/rt-app.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/rt-app.c b/src/rt-app.c index 699d1f4..f7d54ab 100644 --- a/src/rt-app.c +++ b/src/rt-app.c @@ -1585,6 +1585,10 @@ int main(int argc, char* argv[]) p_load = calibrate_cpu_cycles(CLOCK_MONOTONIC); sched_setaffinity(0, sizeof(cpu_set_t), &orig_set); log_notice("pLoad = %dns : calib_cpu %d", p_load, opts.calib_cpu); + if (p_load == 0) { + log_error("Did not get a good calibration value (p_load=%d)", p_load); + exit(EXIT_FAILURE); + } } else { p_load = opts.calib_ns_per_loop; log_notice("pLoad = %dns", p_load); From b22cd73dafcaae6332203b6370d55df1b9687fc9 Mon Sep 17 00:00:00 2001 From: Ben Dooks Date: Wed, 7 Feb 2024 11:46:22 +0000 Subject: [PATCH 3/3] fix indentation of rtapp_sleep event code The rtapp_sleep case is not correctly intended in the run_event code. Fix this annoyance by indeting it correctly. Signed-off-by: Ben Dooks --- src/rt-app.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/rt-app.c b/src/rt-app.c index f7d54ab..af95c69 100644 --- a/src/rt-app.c +++ b/src/rt-app.c @@ -457,9 +457,9 @@ static int run_event(event_data_t *event, int dry_run, break; case rtapp_sleep: { - struct timespec sleep = usec_to_timespec(event->duration); - log_debug("sleep %d ", event->duration); - nanosleep(&sleep, NULL); + struct timespec sleep = usec_to_timespec(event->duration); + log_debug("sleep %d ", event->duration); + nanosleep(&sleep, NULL); } break; case rtapp_run: