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);
