From 86ad481cc8bfbc0155ef221a0fe07ef23db58f68 Mon Sep 17 00:00:00 2001 From: Jerry Jelinek Date: Sat, 19 Oct 2013 17:06:42 -0700 Subject: [PATCH] 4245 boot_time kstat for zones should be epoch timestamp of zone boot, not "random" number Reviewed by: Richard Elling Reviewed by: Garrett D'Amore Approved by: Gordon Ross --- usr/src/uts/common/os/kstat_fr.c | 5 ++--- usr/src/uts/common/os/zone.c | 3 +++ usr/src/uts/common/sys/zone.h | 3 +++ 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/usr/src/uts/common/os/kstat_fr.c b/usr/src/uts/common/os/kstat_fr.c index 83b817e866..9ee61a2fb7 100644 --- a/usr/src/uts/common/os/kstat_fr.c +++ b/usr/src/uts/common/os/kstat_fr.c @@ -20,6 +20,7 @@ */ /* * Copyright (c) 1992, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, Joyent, Inc. All rights reserved. */ /* @@ -838,9 +839,7 @@ system_misc_kstat_update(kstat_t *ksp, int rw) zone_lbolt = ddi_get_lbolt(); zone_nproc = nproc; } else { - struct timeval tvp; - hrt2tv(curproc->p_zone->zone_zsched->p_mstart, &tvp); - zone_boot_time = tvp.tv_sec; + zone_boot_time = curproc->p_zone->zone_boot_time; zone_hrtime = gethrtime(); zone_lbolt = (clock_t)(NSEC_TO_TICK(zone_hrtime) - diff --git a/usr/src/uts/common/os/zone.c b/usr/src/uts/common/os/zone.c index 79ccd94ae4..826fba8718 100644 --- a/usr/src/uts/common/os/zone.c +++ b/usr/src/uts/common/os/zone.c @@ -3789,7 +3789,10 @@ zsched(void *arg) mutex_enter(&zone_status_lock); zone_status_set(zone, ZONE_IS_SHUTTING_DOWN); mutex_exit(&zone_status_lock); + } else { + zone->zone_boot_time = gethrestime_sec(); } + pool_unlock(); } diff --git a/usr/src/uts/common/sys/zone.h b/usr/src/uts/common/sys/zone.h index 3ba7bf47f4..75d03ee712 100644 --- a/usr/src/uts/common/sys/zone.h +++ b/usr/src/uts/common/sys/zone.h @@ -490,6 +490,9 @@ typedef struct zone { hrtime_t zone_pool_mod; /* last pool bind modification time */ /* zone_psetid is protected by cpu_lock */ psetid_t zone_psetid; /* pset the zone is bound to */ + + time_t zone_boot_time; /* Similar to boot_time */ + /* * The following two can be read without holding any locks. They are * updated under cpu_lock. -- 2.11.4.GIT