diff options
author | David Hildenbrand <david@redhat.com> | 2018-06-27 15:44:06 +0200 |
---|---|---|
committer | Cornelia Huck <cohuck@redhat.com> | 2018-07-02 10:37:38 +0200 |
commit | 7de3b1cdc67dcb572c1761c2051252e91a438b22 (patch) | |
tree | 0c3045416a75bd11ecc4eac3c2743bea454b1cb1 /hw/s390x/tod.c | |
parent | f777b20544fe5db3de179a83374cbf9f1e454427 (diff) |
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.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/hw/s390x/tod.c b/hw/s390x/tod.c index 0501affa7f..1c63f411e6 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 |