Lines Matching +full:report +full:- +full:speed +full:- +full:hz
1 // SPDX-License-Identifier: GPL-2.0
30 #include "xen-ops.h"
37 /* Get the TSC speed from Xen */
41 &HYPERVISOR_shared_info->vcpu_info[0].time; in xen_tsc_khz()
53 src = &__this_cpu_read(xen_vcpu)->time; in xen_clocksource_read()
69 src = &__this_cpu_read(xen_vcpu)->time; in xen_sched_clock()
71 ret -= xen_sched_clock_offset; in xen_sched_clock()
79 struct pvclock_wall_clock *wall_clock = &(s->wc); in xen_read_wallclock()
82 vcpu_time = &get_cpu_var(xen_vcpu)->time; in xen_read_wallclock()
94 return -ENODEV; in xen_set_wallclock()
109 now.tv_sec = tk->xtime_sec; in xen_pvclock_gtod_notify()
110 now.tv_nsec = (long)(tk->tkr_mono.xtime_nsec >> tk->tkr_mono.shift); in xen_pvclock_gtod_notify()
135 if (ret == -ENOSYS && settime64_supported) { in xen_pvclock_gtod_notify()
179 single-shot timer with nanosecond resolution. However, sharing the
180 same event channel is a 100Hz tick which is delivered while the
187 The new vcpu_op-based timer interface allows the tick timer period
190 The one-shot timer can report when a timeout is in the past, so
191 set_next_event is capable of returning -ETIME when appropriate.
317 static DEFINE_PER_CPU(struct xen_clock_event_device, xen_clock_events) = { .evt.irq = -1 };
325 if (evt->event_handler) { in xen_timer_interrupt()
326 evt->event_handler(evt); in xen_timer_interrupt()
338 if (evt->irq >= 0) { in xen_teardown_timer()
339 unbind_from_irqhandler(evt->irq, NULL); in xen_teardown_timer()
340 evt->irq = -1; in xen_teardown_timer()
347 struct clock_event_device *evt = &xevt->evt; in xen_setup_timer()
350 WARN(evt->irq >= 0, "IRQ%d for CPU%d is already allocated\n", evt->irq, cpu); in xen_setup_timer()
351 if (evt->irq >= 0) in xen_setup_timer()
356 snprintf(xevt->name, sizeof(xevt->name), "timer%d", cpu); in xen_setup_timer()
361 xevt->name, NULL); in xen_setup_timer()
366 evt->cpumask = cpumask_of(cpu); in xen_setup_timer()
367 evt->irq = irq; in xen_setup_timer()
398 xen_clock_value_saved = xen_clocksource_read() - xen_sched_clock_offset; in xen_save_time_memory_area()
421 t.addr.v = &xen_clock->pvti; in xen_restore_time_memory_area()
441 xen_sched_clock_offset = xen_clocksource_read() - xen_clock_value_saved; in xen_restore_time_memory_area()
454 t.addr.v = &ti->pvti; in xen_setup_vsyscall_time_info()
468 if (!(ti->pvti.flags & PVCLOCK_TSC_STABLE_BIT)) { in xen_setup_vsyscall_time_info()
503 /* Leaf 4, sub-leaf 0 (0x40000x03) */ in xen_tsc_safe_clocksource()
531 /* Successfully turned off 100Hz tick, so we have the in xen_time_init()
532 vcpuop-based timer interface */ in xen_time_init()
547 pvti = &__this_cpu_read(xen_vcpu)->time; in xen_time_init()
548 if (pvti->flags & PVCLOCK_TSC_STABLE_BIT) { in xen_time_init()
592 * xen_setup_timer(cpu) - snprintf is bad in atomic context. Hence in xen_hvm_setup_cpu_clockevents()