From 2f529f9b558ca1c1bd74be7437a84e4711743404 Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Fri, 01 Nov 2024 02:11:33 +0000
Subject: [PATCH] add xenomai
---
kernel/arch/x86/kernel/tsc.c | 19 +++++++++++++------
1 files changed, 13 insertions(+), 6 deletions(-)
diff --git a/kernel/arch/x86/kernel/tsc.c b/kernel/arch/x86/kernel/tsc.c
index f9f1b45..2b59b30 100644
--- a/kernel/arch/x86/kernel/tsc.c
+++ b/kernel/arch/x86/kernel/tsc.c
@@ -131,7 +131,10 @@
{
unsigned long long ns_now;
struct cyc2ns_data data;
+ unsigned long flags;
struct cyc2ns *c2n;
+
+ flags = hard_cond_local_irq_save();
ns_now = cycles_2_ns(tsc_now);
@@ -163,6 +166,8 @@
c2n->data[0] = data;
raw_write_seqcount_latch(&c2n->seq);
c2n->data[1] = data;
+
+ hard_cond_local_irq_restore(flags);
}
static void set_cyc2ns_scale(unsigned long khz, int cpu, unsigned long long tsc_now)
@@ -759,11 +764,11 @@
* calibration, which will take at least 50ms, and
* read the end value.
*/
- local_irq_save(flags);
+ flags = hard_local_irq_save();
tsc1 = tsc_read_refs(&ref1, hpet);
tsc_pit_khz = pit_calibrate_tsc(latch, ms, loopmin);
tsc2 = tsc_read_refs(&ref2, hpet);
- local_irq_restore(flags);
+ hard_local_irq_restore(flags);
/* Pick the lowest PIT TSC calibration so far */
tsc_pit_min = min(tsc_pit_min, tsc_pit_khz);
@@ -872,9 +877,9 @@
if (!fast_calibrate)
fast_calibrate = cpu_khz_from_msr();
if (!fast_calibrate) {
- local_irq_save(flags);
+ flags = hard_local_irq_save();
fast_calibrate = quick_pit_calibrate();
- local_irq_restore(flags);
+ hard_local_irq_restore(flags);
}
return fast_calibrate;
}
@@ -942,7 +947,7 @@
if (!sched_clock_stable())
return;
- local_irq_save(flags);
+ flags = hard_local_irq_save();
/*
* We're coming out of suspend, there's no concurrency yet; don't
@@ -960,7 +965,7 @@
per_cpu(cyc2ns.data[1].cyc2ns_offset, cpu) = offset;
}
- local_irq_restore(flags);
+ hard_local_irq_restore(flags);
}
#ifdef CONFIG_CPU_FREQ
@@ -1411,6 +1416,8 @@
if (boot_cpu_has(X86_FEATURE_NONSTOP_TSC_S3))
clocksource_tsc.flags |= CLOCK_SOURCE_SUSPEND_NONSTOP;
+ clocksource_tsc.vdso_type = CLOCKSOURCE_VDSO_ARCHITECTED;
+
/*
* When TSC frequency is known (retrieved via MSR or CPUID), we skip
* the refined calibration and directly register it as a clocksource.
--
Gitblit v1.6.2