diff options
| author | bouyer <bouyer@NetBSD.org> | 2023-07-07 15:13:41 +0000 |
|---|---|---|
| committer | bouyer <bouyer@NetBSD.org> | 2023-07-07 15:13:41 +0000 |
| commit | 2a6361a63f44bb6164489194fb8f41acbee7cb4e (patch) | |
| tree | 3645f26593fe4a73add9de26f64891c2b22afc3b | |
| parent | 88b01cb4e58810347a8cd0b5edf74bd546f8e4c0 (diff) | |
Unmask event after VCPUOP_stop_periodic_timer and
initializing ci->ci_xen_hardclock_systime_ns, to avoid a possible race with
xen_timer_handler()
| -rw-r--r-- | sys/arch/xen/xen/xen_clock.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/sys/arch/xen/xen/xen_clock.c b/sys/arch/xen/xen/xen_clock.c index acc2a30b0aa..5ceb2901be7 100644 --- a/sys/arch/xen/xen/xen_clock.c +++ b/sys/arch/xen/xen/xen_clock.c @@ -1,4 +1,4 @@ -/* $NetBSD: xen_clock.c,v 1.9 2023/05/01 09:03:19 riastradh Exp $ */ +/* $NetBSD: xen_clock.c,v 1.10 2023/07/07 15:13:41 bouyer Exp $ */ /*- * Copyright (c) 2017, 2018 The NetBSD Foundation, Inc. @@ -36,7 +36,7 @@ #endif #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: xen_clock.c,v 1.9 2023/05/01 09:03:19 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: xen_clock.c,v 1.10 2023/07/07 15:13:41 bouyer Exp $"); #include <sys/param.h> #include <sys/types.h> @@ -700,7 +700,6 @@ xen_resumeclocks(struct cpu_info *ci) ci, IPL_CLOCK, NULL, intr_xname, true, ci) == NULL) panic("failed to establish timer interrupt handler"); - hypervisor_unmask_event(evtch); aprint_verbose("Xen %s: using event channel %d\n", intr_xname, evtch); @@ -714,6 +713,8 @@ xen_resumeclocks(struct cpu_info *ci) /* Pretend the last hardclock happened right now. */ ci->ci_xen_hardclock_systime_ns = xen_vcputime_systime_ns(); + hypervisor_unmask_event(evtch); + /* Arm the one-shot timer. */ error = HYPERVISOR_set_timer_op(ci->ci_xen_hardclock_systime_ns + NS_PER_TICK); |
