]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
s390/stp: add sysfs file to show scheduled leap seconds
authorSven Schnelle <svens@linux.ibm.com>
Wed, 17 Jun 2020 08:58:47 +0000 (10:58 +0200)
committerVasily Gorbik <gor@linux.ibm.com>
Sat, 26 Sep 2020 13:51:21 +0000 (15:51 +0200)
This patch introduces /sys/devices/system/stp/scheduled_leap_seconds,
which will contain either 0,0 if no leap second is scheduled, or
the UTC timestamp + leap second offset.

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>
arch/s390/kernel/time.c

index 49648d574b35ce9f6eafd7d1f2514cbc14ad5104..da271f8ec8d669b562ae8efeec90333d9a730850 100644 (file)
@@ -790,6 +790,34 @@ static ssize_t leap_seconds_show(struct device *dev,
 
 static DEVICE_ATTR_RO(leap_seconds);
 
+static ssize_t leap_seconds_scheduled_show(struct device *dev,
+                                               struct device_attribute *attr,
+                                               char *buf)
+{
+       struct stp_stzi stzi;
+       ssize_t ret;
+
+       mutex_lock(&stp_work_mutex);
+       if (!stpinfo_valid() || !(stp_info.vbits & 0x8000) || !stp_info.lu) {
+               mutex_unlock(&stp_work_mutex);
+               return -ENODATA;
+       }
+
+       ret = chsc_stzi(stp_page, &stzi, sizeof(stzi));
+       mutex_unlock(&stp_work_mutex);
+       if (ret < 0)
+               return ret;
+
+       if (!stzi.lsoib.p)
+               return sprintf(buf, "0,0\n");
+
+       return sprintf(buf, "%llu,%d\n",
+                      tod_to_ns(stzi.lsoib.nlsout - TOD_UNIX_EPOCH) / NSEC_PER_SEC,
+                      stzi.lsoib.nlso - stzi.lsoib.also);
+}
+
+static DEVICE_ATTR_RO(leap_seconds_scheduled);
+
 static ssize_t stratum_show(struct device *dev,
                                struct device_attribute *attr,
                                char *buf)
@@ -906,6 +934,7 @@ static struct device_attribute *stp_attributes[] = {
        &dev_attr_dst_offset,
        &dev_attr_leap_seconds,
        &dev_attr_online,
+       &dev_attr_leap_seconds_scheduled,
        &dev_attr_stratum,
        &dev_attr_time_offset,
        &dev_attr_time_zone_offset,