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/kernel/time/tick-common.c | 19 +++++++++++++++++-- 1 files changed, 17 insertions(+), 2 deletions(-) diff --git a/kernel/kernel/time/tick-common.c b/kernel/kernel/time/tick-common.c index 572b4c0..3f4b7ec 100644 --- a/kernel/kernel/time/tick-common.c +++ b/kernel/kernel/time/tick-common.c @@ -248,7 +248,8 @@ } else { handler = td->evtdev->event_handler; next_event = td->evtdev->next_event; - td->evtdev->event_handler = clockevents_handle_noop; + if (!clockevent_state_reserved(td->evtdev)) + td->evtdev->event_handler = clockevents_handle_noop; } td->evtdev = newdev; @@ -330,6 +331,12 @@ bool tick_check_replacement(struct clock_event_device *curdev, struct clock_event_device *newdev) { + /* + * Never replace an active proxy except when unregistering it. + */ + if (tick_check_is_proxy(curdev)) + return false; + if (!tick_check_percpu(curdev, newdev, smp_processor_id())) return false; @@ -350,6 +357,9 @@ td = &per_cpu(tick_cpu_device, cpu); curdev = td->evtdev; + if (tick_check_is_proxy(curdev)) + goto out_bc; + /* cpu local device ? */ if (!tick_check_percpu(curdev, newdev, cpu)) goto out_bc; @@ -367,7 +377,12 @@ * not give it back to the clockevents layer ! */ if (tick_is_broadcast_device(curdev)) { - clockevents_shutdown(curdev); + if (tick_check_is_proxy(newdev)) { + list_del(&curdev->list); + clockevents_switch_state(curdev, CLOCK_EVT_STATE_RESERVED); + } else { + clockevents_shutdown(curdev); + } curdev = NULL; } clockevents_exchange_device(curdev, newdev); -- Gitblit v1.6.2