]> Zhao Yanbai Git Server - minix.git/commitdiff
Cleanup of PM.
authorJorrit Herder <jnherder@minix3.org>
Fri, 5 Aug 2005 10:45:54 +0000 (10:45 +0000)
committerJorrit Herder <jnherder@minix3.org>
Fri, 5 Aug 2005 10:45:54 +0000 (10:45 +0000)
servers/pm/const.h
servers/pm/main.c
servers/pm/time.c
servers/pm/timers.c
servers/pm/utility.c

index 690d575afbe1b0b7626b1f9e4f0304144b2f6d9c..d33a539598bf35b42107d5cdfc735a5fb8f81127 100644 (file)
@@ -17,8 +17,6 @@
                                 */
 
 #define PM_PID            0    /* PM's process id number */
-
 #define INIT_PID          1    /* INIT's process id number */
 
 
-#define DEBUG(x,y)   if ((x)) { (y); }
index 0f6ccdd0efcb053a732f53dd5c9193414f61ea8e..c0c516330f5a0c8bac630d6638ff674f532c23ef 100644 (file)
@@ -51,14 +51,12 @@ PUBLIC void main()
        get_work();             /* wait for an PM system call */
 
        /* Check for system notifications first. Special cases. */
-        if (call_nr == SYN_ALARM) {
-               pm_expire_timers(m_in.NOTIFY_TIMESTAMP);
+       if (call_nr == SYN_ALARM) {
+               pm_expire_timers(m_in.NOTIFY_TIMESTAMP);
                result = SUSPEND;               /* don't reply */
        } else if (call_nr == SYS_SIG) {        /* signals pending */
                sigset = m_in.NOTIFY_ARG;
-               if (sigismember(&sigset, SIGKSIG)) {
-                       (void) ksig_pending();
-               }
+               if (sigismember(&sigset, SIGKSIG))  (void) ksig_pending();
                result = SUSPEND;               /* don't reply */
        }
        /* Else, if the system call number is valid, perform the call. */
@@ -181,7 +179,7 @@ PRIVATE void pm_init()
 
   /* Get the memory map of the kernel to see how much memory it uses. */
   if ((s=get_mem_map(SYSTASK, mem_map)) != OK)
-       panic(__FILE__,"PM couldn't get memory map of SYSTASK",s);
+       panic(__FILE__,"couldn't get memory map of SYSTASK",s);
   minix_clicks = (mem_map[S].mem_phys+mem_map[S].mem_len)-mem_map[T].mem_phys;
   patch_mem_chunks(mem_chunks, mem_map);
 
@@ -189,7 +187,7 @@ PRIVATE void pm_init()
    * that is defined at the kernel level to see which slots to fill in.
    */
   if (OK != (s=sys_getimage(image))) 
-       panic(__FILE__,"PM: warning, couldn't get image table: %d\n", s);
+       panic(__FILE__,"couldn't get image table: %d\n", s);
   procs_in_use = 0;                            /* start populating table */
   printf("Building process table:");           /* show what's happening */
   for (ip = &image[0]; ip < &image[NR_BOOT_PROCS]; ip++) {             
@@ -228,7 +226,7 @@ PRIVATE void pm_init()
                mess.PR_PROC_NR = ip->proc_nr;
                mess.PR_PID = rmp->mp_pid;
                if (OK != (s=send(FS_PROC_NR, &mess)))
-                       panic(__FILE__,"PM can't sync up with FS", s);
+                       panic(__FILE__,"can't sync up with FS", s);
                printf(" %s", ip->proc_name);   /* display process name */
        }
   }
@@ -244,7 +242,7 @@ PRIVATE void pm_init()
   /* Tell FS that no more system processes follow and synchronize. */
   mess.PR_PROC_NR = NONE;
   if (sendrec(FS_PROC_NR, &mess) != OK || mess.m_type != OK)
-       panic(__FILE__,"PM can't sync up with FS", NO_NUM);
+       panic(__FILE__,"can't sync up with FS", NO_NUM);
 
   /* Possibly we must correct the memory chunks for the boot device. */
   if (kinfo.bootdev_size > 0) {
@@ -255,7 +253,7 @@ PRIVATE void pm_init()
   }
 
   /* Initialize tables to all physical memory and print memory information. */
-  printf("Parsing memory:");
+  printf("Gathering memory:");
   mem_init(mem_chunks, &free_clicks);
   total_clicks = minix_clicks + free_clicks;
   printf(" total %u KB,", click_to_round_k(total_clicks));
index 27168037cacf067cc21733114f9d8138594291c0..d753f2208ea5ca0e007e29f10e0fe81bbf72f839 100644 (file)
@@ -3,7 +3,7 @@
  * The entry points into this file are
  *   do_time:          perform the TIME system call
  *   do_stime:         perform the STIME system call
- *   do_tims:          perform the TIMES system call
+ *   do_times:         perform the TIMES system call
  */
 
 #include "pm.h"
index 94fcf5a1f2b29a6c2263c8b964c9b8bbe47d1679..85d3ae5ecce6340c926a25956cb6d9ac3fddb46b 100644 (file)
@@ -1,77 +1,82 @@
-/* PM watchdog timer management. 
+/* PM watchdog timer management. These functions in this file provide
+ * a convenient interface to the timers library that manages a list of
+ * watchdog timers. All details of scheduling an alarm at the CLOCK task 
+ * are hidden behind this interface.
+ * Only system processes are allowed to set an alarm timer at the kernel. 
+ * Therefore, the PM maintains a local list of timers for user processes
+ * that requested an alarm signal. 
+ * 
+ * The entry points into this file are:
+ *   pm_set_timer:      reset and existing or set a new watchdog timer
+ *   pm_expire_timers:  check for expired timers and run watchdog functions
+ *   pm_cancel_timer:   remove a time from the list of timers
+ *
  */
 
 #include "pm.h"
 
-#define VERBOSE 0
-
 #include <timers.h>
 #include <minix/syslib.h>
 #include <minix/com.h>
 
 PRIVATE timer_t *pm_timers = NULL;
 
+
+/*===========================================================================*
+ *                             pm_set_timer                         *
+ *===========================================================================*/
 PUBLIC void pm_set_timer(timer_t *tp, int ticks, tmr_func_t watchdog, int arg)
 {
        int r;
        clock_t now, prev_time = 0, next_time;
 
        if((r = getuptime(&now)) != OK)
-               panic(__FILE__, "PM couldn't get uptime from system task.", NO_NUM);
+               panic(__FILE__, "PM couldn't get uptime", NO_NUM);
 
-       /* Set timer argument. */
+       /* Set timer argument and add timer to the list. */
        tmr_arg(tp)->ta_int = arg;
+       prev_time = tmrs_settimer(&pm_timers,tp,now+ticks,watchdog,&next_time);
 
-       prev_time = tmrs_settimer(&pm_timers, tp, now+ticks, watchdog, &next_time);
-
-       /* reschedule our synchronous alarm if necessary */
+       /* Reschedule our synchronous alarm if necessary. */
        if(! prev_time || prev_time > next_time) {
                if(sys_setalarm(next_time, 1) != OK)
-                       panic(__FILE__, "PM set timer couldn't set synchronous alarm.", NO_NUM);
-#if VERBOSE
-               else
-                       printf("timers: after setting, set synalarm to %d -> %d\n", prev_time, next_time);
-#endif
+                       panic(__FILE__, "PM set timer couldn't set alarm.", NO_NUM);
        }
 
        return;
 }
 
+
+/*===========================================================================*
+ *                             pm_expire_timers                             *
+ *===========================================================================*/
 PUBLIC void pm_expire_timers(clock_t now)
 {
        clock_t next_time;
+
+       /* Check for expired timers and possibly reschedule an alarm. */
        tmrs_exptimers(&pm_timers, now, &next_time);
        if(next_time > 0) {
                if(sys_setalarm(next_time, 1) != OK)
-                       panic(__FILE__, "PM expire timer couldn't set synchronous alarm.", NO_NUM);
-#if VERBOSE
-               else
-                       printf("timers: after expiry, set synalarm to %d\n", next_time);
-#endif
+                       panic(__FILE__, "PM expire timer couldn't set alarm.", NO_NUM);
        }
-#if VERBOSE
-       else printf("after expiry, no new timer set\n");
-#endif
 }
 
+
+/*===========================================================================*
+ *                             pm_cancel_timer                      *
+ *===========================================================================*/
 PUBLIC void pm_cancel_timer(timer_t *tp)
 {
        clock_t next_time, prev_time;
        prev_time = tmrs_clrtimer(&pm_timers, tp, &next_time);
 
-       /* if the earliest timer has been removed, we have to set
-        * the synalarm to the next timer, or cancel the synalarm
-        * altogether if th last time has been cancelled (next_time
-        * will be 0 then).
+       /* If the earliest timer has been removed, we have to set the alarm to  
+     * the next timer, or cancel the alarm altogether if the last timer has 
+     * been cancelled (next_time will be 0 then).
         */
        if(prev_time < next_time || ! next_time) {
                if(sys_setalarm(next_time, 1) != OK)
-                       panic(__FILE__, "PM expire timer couldn't set synchronous alarm.", NO_NUM);
-#if VERBOSE
-               printf("timers: after cancelling, set synalarm to %d -> %d\n", prev_time, next_time);
-#endif
+                       panic(__FILE__, "PM expire timer couldn't set alarm.", NO_NUM);
        }
-#if VERBOSE
-       else printf("timers: after cancelling no new timer\n");
-#endif
 }
index 02a39f9a9d21cdf6fe01e5f9828cc54a4948e714..13492cfc42d78dd20efe3ff4c276939c13b92991 100644 (file)
@@ -99,7 +99,7 @@ PUBLIC int no_sys()
 {
 /* A system call number not implemented by PM has been requested. */
 
-  return(EINVAL);
+  return(ENOSYS);
 }