linux-5.15.69-timers-gem5.patch 1.86 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
diff -ur linux-5.15.69.old/arch/x86/kernel/apic/apic.c linux-5.15.69/arch/x86/kernel/apic/apic.c
--- linux-5.15.69.old/arch/x86/kernel/apic/apic.c	2022-09-20 12:39:46.000000000 +0200
+++ linux-5.15.69/arch/x86/kernel/apic/apic.c	2022-09-22 12:30:20.240719422 +0200
@@ -1001,6 +1001,8 @@
 		return -1;
 	}
 
+
+        printk(KERN_ERR " calibrated lapic_timer_period=%u\n", lapic_timer_period);
 	return 0;
 }
 
@@ -2957,3 +2959,13 @@
 	return 0;
 }
 early_param("apic_extnmi", apic_set_extnmi);
+
+static int __init lapic_set_timer_period(char *arg)
+{
+  if (!arg || kstrtouint(arg, 10, &lapic_timer_period)) {
+    return -EINVAL;
+  }
+  return 0;
+}
+
+early_param("lapic_timer_period", lapic_set_timer_period);
diff -ur linux-5.15.69.old/arch/x86/kernel/tsc.c linux-5.15.69/arch/x86/kernel/tsc.c
--- linux-5.15.69.old/arch/x86/kernel/tsc.c	2022-09-20 12:39:46.000000000 +0200
+++ linux-5.15.69/arch/x86/kernel/tsc.c	2022-09-22 12:30:20.240719422 +0200
@@ -53,6 +53,8 @@
 static u64 art_to_tsc_offset;
 struct clocksource *art_related_clocksource;
 
+static unsigned long tsc_override_freq = 0;
+
 struct cyc2ns {
 	struct cyc2ns_data data[2];	/*  0 + 2*16 = 32 */
 	seqcount_latch_t   seq;		/* 32 + 4    = 36 */
@@ -870,6 +872,8 @@
 {
 	unsigned long flags, fast_calibrate = cpu_khz_from_cpuid();
 
+	if (tsc_override_freq)
+		return tsc_override_freq;
 	if (!fast_calibrate)
 		fast_calibrate = cpu_khz_from_msr();
 	if (!fast_calibrate) {
@@ -877,6 +881,7 @@
 		fast_calibrate = quick_pit_calibrate();
 		local_irq_restore(flags);
 	}
+        pr_warn("calibrated TSC: tsc_freq=%lu\n", fast_calibrate);
 	return fast_calibrate;
 }
 
@@ -1575,3 +1580,14 @@
 	return 0;
 }
 #endif
+
+
+static int __init tsc_set_override_freq(char *arg)
+{
+  if (!arg || kstrtoul(arg, 10, &tsc_override_freq)) {
+    return -EINVAL;
+  }
+  return 0;
+}
+
+early_param("tsc_override_freq", tsc_set_override_freq);