aboutsummaryrefslogtreecommitdiff
path: root/hw/s390x/tod.c
diff options
context:
space:
mode:
authorDavid Hildenbrand <david@redhat.com>2018-06-27 15:44:06 +0200
committerCornelia Huck <cohuck@redhat.com>2018-07-02 10:37:38 +0200
commit7de3b1cdc67dcb572c1761c2051252e91a438b22 (patch)
tree0c3045416a75bd11ecc4eac3c2743bea454b1cb1 /hw/s390x/tod.c
parentf777b20544fe5db3de179a83374cbf9f1e454427 (diff)
downloadqemu-7de3b1cdc67dcb572c1761c2051252e91a438b22.zip
qemu-7de3b1cdc67dcb572c1761c2051252e91a438b22.tar.gz
qemu-7de3b1cdc67dcb572c1761c2051252e91a438b22.tar.bz2
s390x/tcg: properly implement the TOD
Right now, each CPU has its own TOD. Especially, the TOD will differ based on creation time of a CPU - e.g. when hotplugging a CPU the times will differ quite a lot, resulting in stall warnings in the guest. Let's use a single TOD by implementing our new TOD device. Prepare it for TOD-clock epoch extension. Most importantly, whenever we set the TOD, we have to update the CKC timer. Introduce "tcg_s390x.h" just like "kvm_s390x.h" for tcg specific function declarations that should not go into cpu.h. Reviewed-by: Thomas Huth <thuth@redhat.com> Signed-off-by: David Hildenbrand <david@redhat.com> Message-Id: <20180627134410.4901-6-david@redhat.com> Signed-off-by: Cornelia Huck <cohuck@redhat.com>
Diffstat (limited to 'hw/s390x/tod.c')
-rw-r--r--hw/s390x/tod.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/hw/s390x/tod.c b/hw/s390x/tod.c
index 0501aff..1c63f41 100644
--- a/hw/s390x/tod.c
+++ b/hw/s390x/tod.c
@@ -30,6 +30,17 @@ void s390_init_tod(void)
qdev_init_nofail(DEVICE(obj));
}
+S390TODState *s390_get_todstate(void)
+{
+ static S390TODState *ts;
+
+ if (!ts) {
+ ts = S390_TOD(object_resolve_path_type("", TYPE_S390_TOD, NULL));
+ }
+
+ return ts;
+}
+
#define S390_TOD_CLOCK_VALUE_MISSING 0x00
#define S390_TOD_CLOCK_VALUE_PRESENT 0x01