The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/servers/pm/time.c

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /* This file takes care of those system calls that deal with time.
    2  *
    3  * The entry points into this file are
    4  *   do_time:           perform the TIME system call
    5  *   do_stime:          perform the STIME system call
    6  *   do_times:          perform the TIMES system call
    7  */
    8 
    9 #include "pm.h"
   10 #include <minix/callnr.h>
   11 #include <minix/com.h>
   12 #include <signal.h>
   13 #include "mproc.h"
   14 #include "param.h"
   15 
   16 PRIVATE time_t boottime;
   17 
   18 /*===========================================================================*
   19  *                              do_time                                      *
   20  *===========================================================================*/
   21 PUBLIC int do_time()
   22 {
   23 /* Perform the time(tp) system call. This returns the time in seconds since 
   24  * 1.1.1970.  MINIX is an astrophysically naive system that assumes the earth 
   25  * rotates at a constant rate and that such things as leap seconds do not 
   26  * exist.
   27  */
   28   clock_t uptime;
   29   int s;
   30 
   31   if ( (s=getuptime(&uptime)) != OK) 
   32         panic(__FILE__,"do_time couldn't get uptime", s);
   33 
   34   mp->mp_reply.reply_time = (time_t) (boottime + (uptime/HZ));
   35   mp->mp_reply.reply_utime = (uptime%HZ)*1000000/HZ;
   36   return(OK);
   37 }
   38 
   39 /*===========================================================================*
   40  *                              do_stime                                     *
   41  *===========================================================================*/
   42 PUBLIC int do_stime()
   43 {
   44 /* Perform the stime(tp) system call. Retrieve the system's uptime (ticks 
   45  * since boot) and store the time in seconds at system boot in the global
   46  * variable 'boottime'.
   47  */
   48   clock_t uptime;
   49   int s;
   50 
   51   if (mp->mp_effuid != SUPER_USER) { 
   52       return(EPERM);
   53   }
   54   if ( (s=getuptime(&uptime)) != OK) 
   55       panic(__FILE__,"do_stime couldn't get uptime", s);
   56   boottime = (long) m_in.stime - (uptime/HZ);
   57 
   58   /* Also inform FS about the new system time. */
   59   tell_fs(STIME, boottime, 0, 0);
   60 
   61   return(OK);
   62 }
   63 
   64 /*===========================================================================*
   65  *                              do_times                                     *
   66  *===========================================================================*/
   67 PUBLIC int do_times()
   68 {
   69 /* Perform the times(buffer) system call. */
   70   register struct mproc *rmp = mp;
   71   clock_t t[5];
   72   int s;
   73 
   74   if (OK != (s=sys_times(who, t)))
   75       panic(__FILE__,"do_times couldn't get times", s);
   76   rmp->mp_reply.reply_t1 = t[0];                /* user time */
   77   rmp->mp_reply.reply_t2 = t[1];                /* system time */
   78   rmp->mp_reply.reply_t3 = rmp->mp_child_utime; /* child user time */
   79   rmp->mp_reply.reply_t4 = rmp->mp_child_stime; /* child system time */
   80   rmp->mp_reply.reply_t5 = t[4];                /* uptime since boot */
   81 
   82   return(OK);
   83 }
   84 

Cache object: dbc53c2849eff19f7d6b0d78ede34d85


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.