]> Zhao Yanbai Git Server - minix.git/commitdiff
Message type for SYS_SETTIME
authorLionel Sambuc <lionel@minix3.org>
Thu, 22 May 2014 13:31:51 +0000 (15:31 +0200)
committerLionel Sambuc <lionel@minix3.org>
Mon, 28 Jul 2014 15:05:48 +0000 (17:05 +0200)
Change-Id: I10c2c27c0c9749b49d70735175e530b4341440dc

include/minix/com.h
include/minix/ipc.h
kernel/system/do_settime.c
lib/libsys/sys_settime.c

index f37f01d9988be0568ee5f6c98153de0ef32c4302..2f3889763abde8c1f881a6d6e3a826d3b9b0b8e4 100644 (file)
 #   define GET_REGS      24    /* get general process registers */
 #   define GET_RUSAGE    25    /* get resource usage */
 
-/* Field names for SYS_SETTIME. */
-#define T_SETTIME_NOW  m4_l2   /* non-zero for immediate, 0 for adjtime */
-#define T_CLOCK_ID     m4_l3   /* clock to adjust */
-#define T_TIME_SEC     m4_ll1  /* time in seconds since 1970 */
-#define T_TIME_NSEC    m4_l5   /* number of nano seconds */
-
 /* Field names for SYS_TRACE, SYS_PRIVCTL, SYS_STATECTL. */
 #define CTL_ENDPT      m2_i1   /* process number of the caller */
 #define CTL_REQUEST    m2_i2   /* server control request */
index f53c938e2339b3f2cd8b3d1fc681ee9e9804eb63..cfa25f1797cf374a74ed3c58f9137425225a94e2 100644 (file)
@@ -791,6 +791,16 @@ typedef struct {
 } mess_lsys_krn_sys_stime;
 _ASSERT_MSG_SIZE(mess_lsys_krn_sys_stime);
 
+typedef struct {
+       time_t sec;             /* time in seconds since 1970 */
+       long int nsec;
+       int now;                /* non-zero for immediate, 0 for adjtime */
+       clockid_t clock_id;
+
+       uint8_t padding[36];
+} mess_lsys_krn_sys_settime;
+_ASSERT_MSG_SIZE(mess_lsys_krn_sys_settime);
+
 typedef struct {
        endpoint_t endpt;
 
@@ -1603,6 +1613,7 @@ typedef struct {
                mess_lsys_krn_sys_sdevio m_lsys_krn_sys_sdevio;
                mess_lsys_krn_sys_setalarm m_lsys_krn_sys_setalarm;
                mess_lsys_krn_sys_stime m_lsys_krn_sys_stime;
+               mess_lsys_krn_sys_settime m_lsys_krn_sys_settime;
                mess_lsys_krn_sys_times m_lsys_krn_sys_times;
                mess_lsys_krn_sys_umap  m_lsys_krn_sys_umap;
                mess_lsys_krn_sys_vdevio m_lsys_krn_sys_vdevio;
index e21836eb8d50ee49503c9f3923a319dd66dc44fa..b57ed8089d044afe728802cf15dbd0fcb775be16 100644 (file)
@@ -2,10 +2,10 @@
  *   m_type:   SYS_SETTIME
  *
  * The parameters for this kernel call are:
- *    m4_l2:   T_SETTIME_NOW
- *    m4_l3:   T_CLOCK_ID
- *    m4_ll1:  T_TIME_SEC
- *    m4_l5:   T_TIME_NSEC
+ *   m_lsys_krn_sys_settime.now
+ *   m_lsys_krn_sys_settime.clock_id
+ *   m_lsys_krn_sys_settime.sec
+ *   m_lsys_krn_sys_settime.nsec
  */
 
 #include "kernel/system.h"
@@ -21,31 +21,32 @@ int do_settime(struct proc * caller, message * m_ptr)
   int32_t ticks;
   time_t timediff, timediff_ticks;
 
-  if (m_ptr->T_CLOCK_ID != CLOCK_REALTIME) /* only realtime can change */
+  if (m_ptr->m_lsys_krn_sys_settime.clock_id != CLOCK_REALTIME) /* only realtime can change */
        return EINVAL;
 
-  if (m_ptr->T_SETTIME_NOW == 0) { /* user just wants to adjtime() */
+  if (m_ptr->m_lsys_krn_sys_settime.now == 0) { /* user just wants to adjtime() */
        /* convert delta value from seconds and nseconds to ticks */
-       ticks = (m_ptr->T_TIME_SEC * system_hz) +
-                               (m_ptr->T_TIME_NSEC/(1000000000/system_hz));
+       ticks = (m_ptr->m_lsys_krn_sys_settime.sec * system_hz) +
+                       (m_ptr->m_lsys_krn_sys_settime.nsec/(1000000000/system_hz));
        set_adjtime_delta(ticks);
        return(OK);
   } /* else user wants to set the time */
 
-  timediff = m_ptr->T_TIME_SEC - boottime;
+  timediff = m_ptr->m_lsys_krn_sys_settime.sec - boottime;
   timediff_ticks = timediff * system_hz;
 
   /* prevent a negative value for realtime */
-  if (m_ptr->T_TIME_SEC <= boottime ||
+  if (m_ptr->m_lsys_krn_sys_settime.sec <= boottime ||
       timediff_ticks < LONG_MIN/2 || timediff_ticks > LONG_MAX/2) {
        /* boottime was likely wrong, try to correct it. */
-       boottime = m_ptr->T_TIME_SEC;
+       boottime = m_ptr->m_lsys_krn_sys_settime.sec;
        set_realtime(1);
        return(OK);
   }
 
   /* calculate the new value of realtime in ticks */
-  newclock = timediff_ticks + (m_ptr->T_TIME_NSEC/(1000000000/system_hz));
+  newclock = timediff_ticks +
+      (m_ptr->m_lsys_krn_sys_settime.nsec/(1000000000/system_hz));
 
   set_realtime(newclock);
 
index acb491a2a69727f6c9951b3362027ccba6c8ccce..abcc27518de926cde14b233b98ac531f8c7c25d0 100644 (file)
@@ -6,10 +6,10 @@ int sys_settime(int now, clockid_t clk_id, time_t sec, long nsec)
        message m;
        int r;
 
-       m.T_SETTIME_NOW = now;
-       m.T_CLOCK_ID = clk_id;
-       m.T_TIME_SEC = sec;
-       m.T_TIME_NSEC = nsec;
+       m.m_lsys_krn_sys_settime.now = now;
+       m.m_lsys_krn_sys_settime.clock_id = clk_id;
+       m.m_lsys_krn_sys_settime.sec = sec;
+       m.m_lsys_krn_sys_settime.nsec = nsec;
 
        r = _kernel_call(SYS_SETTIME, &m);
        return r;