Lines Matching +full:clock +full:- +full:error +full:- +full:detect

2  * TOD (Time Of Day) clock - KVM implementation
8 * See the COPYING file in the top-level directory.
12 #include "qapi/error.h"
19 static void kvm_s390_get_tod_raw(S390TOD *tod, Error **errp) in kvm_s390_get_tod_raw()
23 r = kvm_s390_get_clock_ext(&tod->high, &tod->low); in kvm_s390_get_tod_raw()
24 if (r == -ENXIO) { in kvm_s390_get_tod_raw()
25 r = kvm_s390_get_clock(&tod->high, &tod->low); in kvm_s390_get_tod_raw()
28 error_setg(errp, "Unable to get KVM guest TOD clock: %s", in kvm_s390_get_tod_raw()
29 strerror(-r)); in kvm_s390_get_tod_raw()
33 static void kvm_s390_tod_get(const S390TODState *td, S390TOD *tod, Error **errp) in kvm_s390_tod_get()
35 if (td->stopped) { in kvm_s390_tod_get()
36 *tod = td->base; in kvm_s390_tod_get()
43 static void kvm_s390_set_tod_raw(const S390TOD *tod, Error **errp) in kvm_s390_set_tod_raw()
47 r = kvm_s390_set_clock_ext(tod->high, tod->low); in kvm_s390_set_tod_raw()
48 if (r == -ENXIO) { in kvm_s390_set_tod_raw()
49 r = kvm_s390_set_clock(tod->high, tod->low); in kvm_s390_set_tod_raw()
52 error_setg(errp, "Unable to set KVM guest TOD clock: %s", in kvm_s390_set_tod_raw()
53 strerror(-r)); in kvm_s390_set_tod_raw()
57 static void kvm_s390_tod_set(S390TODState *td, const S390TOD *tod, Error **errp) in kvm_s390_tod_set()
59 Error *local_err = NULL; in kvm_s390_tod_set()
63 * properly detect errors now but take a look at the runstate to decide in kvm_s390_tod_set()
75 td->stopped = false; in kvm_s390_tod_set()
77 td->stopped = true; in kvm_s390_tod_set()
78 td->base = *tod; in kvm_s390_tod_set()
86 Error *local_err = NULL; in kvm_s390_tod_vm_state_change()
89 * Under PV, the clock is under ultravisor control, hence we cannot restore in kvm_s390_tod_vm_state_change()
96 if (running && td->stopped) { in kvm_s390_tod_vm_state_change()
97 /* Set the old TOD when running the VM - start the TOD clock. */ in kvm_s390_tod_vm_state_change()
98 kvm_s390_set_tod_raw(&td->base, &local_err); in kvm_s390_tod_vm_state_change()
103 td->stopped = false; in kvm_s390_tod_vm_state_change()
104 } else if (!running && !td->stopped) { in kvm_s390_tod_vm_state_change()
105 /* Store the TOD when stopping the VM - stop the TOD clock. */ in kvm_s390_tod_vm_state_change()
106 kvm_s390_get_tod_raw(&td->base, &local_err); in kvm_s390_tod_vm_state_change()
111 td->stopped = true; in kvm_s390_tod_vm_state_change()
116 static void kvm_s390_tod_realize(DeviceState *dev, Error **errp) in kvm_s390_tod_realize()
120 Error *local_err = NULL; in kvm_s390_tod_realize()
122 tdc->parent_realize(dev, &local_err); in kvm_s390_tod_realize()
141 &tdc->parent_realize); in kvm_s390_tod_class_init()
142 tdc->get = kvm_s390_tod_get; in kvm_s390_tod_class_init()
143 tdc->set = kvm_s390_tod_set; in kvm_s390_tod_class_init()
156 td->stopped = false; in kvm_s390_tod_init()