diff options
author | Sven Schnelle <svens@linux.ibm.com> | 2020-06-12 12:59:19 +0200 |
---|---|---|
committer | Vasily Gorbik <gor@linux.ibm.com> | 2020-09-26 15:51:21 +0200 |
commit | b2539aa0d7ff1e42c74a9dd8c73ec1c2771c9e5d (patch) | |
tree | 74471364f8829eba85a20ca628d944b5b50ae864 /drivers/s390 | |
parent | 4ab79ed223d2ff32ffe16cfd841e064199341c34 (diff) | |
download | linux-b2539aa0d7ff1e42c74a9dd8c73ec1c2771c9e5d.tar.gz linux-b2539aa0d7ff1e42c74a9dd8c73ec1c2771c9e5d.tar.bz2 linux-b2539aa0d7ff1e42c74a9dd8c73ec1c2771c9e5d.zip |
s390/stp: add support for leap seconds
In the current implementation, leap seconds are only synchronized
during the bootup process when the STP clock is synced. If the Leap
second offset (LSO) changes the machine must be rebooted, which is
not desired. This patch adds the required code to handle Leap second
changes during runtime. If the Leap second changes, a Configuration
change machine check is triggered. The STP code than schedules a Leap
second insertion/deletion with do_adjtimex().
Signed-off-by: Sven Schnelle <svens@linux.ibm.com>
Reviewed-by: Alexander Egorenkov <egorenar@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
Diffstat (limited to 'drivers/s390')
-rw-r--r-- | drivers/s390/cio/chsc.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/drivers/s390/cio/chsc.c b/drivers/s390/cio/chsc.c index c314e9495c1b..e612e570447a 100644 --- a/drivers/s390/cio/chsc.c +++ b/drivers/s390/cio/chsc.c @@ -1260,6 +1260,27 @@ int chsc_sstpi(void *page, void *result, size_t size) return (rr->response.code == 0x0001) ? 0 : -EIO; } +int chsc_stzi(void *page, void *result, size_t size) +{ + struct { + struct chsc_header request; + unsigned int rsvd0[3]; + struct chsc_header response; + char data[]; + } *rr; + int rc; + + memset(page, 0, PAGE_SIZE); + rr = page; + rr->request.length = 0x0010; + rr->request.code = 0x003e; + rc = chsc(rr); + if (rc) + return -EIO; + memcpy(result, &rr->data, size); + return (rr->response.code == 0x0001) ? 0 : -EIO; +} + int chsc_siosl(struct subchannel_id schid) { struct { |