[PATCH RFC 11/11] um: Remove all TSC flags when using Time Travel Mode

Benjamin Beichler
2023-11-03T16:42:28Z

In time travel mode, the internal time is only advanced at discrete
synchronization points, while the TSC register continuously increases.
Although the TSC registers remain accessible, we remove the TSC flags to
indicate to programs that properly check the TSC flag before reading
that the CPU lacks a proper TSC register.

This change is primarily cosmetic but may encourage some programs to use
gettimeofday and similar calls for time measurement.

Signed-off-by: Benjamin Beichler <benjamin.beichler@uni-rostock.de>
---
arch/um/kernel/um_arch.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/arch/um/kernel/um_arch.c b/arch/um/kernel/um_arch.c
index b1bfed0c8528..6bfd531b5f87 100644
--- a/arch/um/kernel/um_arch.c
+++ b/arch/um/kernel/um_arch.c
@@ -30,6 +30,7 @@
#include <kern_util.h>
#include <mem_user.h>
#include <os.h>
+#include <timetravel.h>

#include "um_arch.h"

@@ -284,7 +285,8 @@ static void parse_host_cpu_flags(char *line)
{
int i;
for (i = 0; i < 32*NCAPINTS; i++) {
- if ((x86_cap_flags[i] != NULL) && strstr(line, x86_cap_flags[i]))
+ if ((x86_cap_flags[i] != NULL) && strstr(line, x86_cap_flags[i]) &&
+ !(time_travel_mode != TT_MODE_OFF && strstr("tsc", x86_cap_flags[i])))
set_cpu_cap(&boot_cpu_data, i);
}
}

--
2.34.1