]> Zhao Yanbai Git Server - minix.git/commitdiff
proc_init()
authorTomas Hruby <tom@minix3.org>
Wed, 15 Sep 2010 14:09:43 +0000 (14:09 +0000)
committerTomas Hruby <tom@minix3.org>
Wed, 15 Sep 2010 14:09:43 +0000 (14:09 +0000)
- code that initializes proc.c structures removed from main() and placed in
  proc_init() function

kernel/main.c
kernel/proc.c
kernel/proto.h

index df88e040cb792a407faa2dc1d8e62e8e9501852c..100609933cd5c2a778be12ea88b53975e04ae587 100644 (file)
@@ -32,7 +32,6 @@ PUBLIC int main(void)
 /* Start the ball rolling. */
   struct boot_image *ip;       /* boot image pointer */
   register struct proc *rp;    /* process pointer */
-  register struct priv *sp;    /* privilege structure pointer */
   register int i, j;
   int hdrindex;                        /* index to array of a.out headers */
   phys_clicks text_base;
@@ -46,26 +45,7 @@ PUBLIC int main(void)
  
    DEBUGEXTRA(("main()\n"));
 
-  /* Clear the process table. Anounce each slot as empty and set up mappings 
-   * for proc_addr() and proc_nr() macros. Do the same for the table with 
-   * privilege structures for the system processes. 
-   */
-  for (rp = BEG_PROC_ADDR, i = -NR_TASKS; rp < END_PROC_ADDR; ++rp, ++i) {
-       rp->p_rts_flags = RTS_SLOT_FREE;                /* initialize free slot */
-       rp->p_magic = PMAGIC;
-       rp->p_nr = i;                           /* proc number from ptr */
-       rp->p_endpoint = _ENDPOINT(0, rp->p_nr); /* generation no. 0 */
-       rp->p_scheduler = NULL;                 /* no user space scheduler */
-       rp->p_priority = 0;                     /* no priority */
-       rp->p_quantum_size_ms = 0;              /* no quantum size */
-  }
-  for (sp = BEG_PRIV_ADDR, i = 0; sp < END_PRIV_ADDR; ++sp, ++i) {
-       sp->s_proc_nr = NONE;                   /* initialize as free */
-       sp->s_id = (sys_id_t) i;                /* priv structure index */
-       ppriv_addr[i] = sp;                     /* priv ptr from number */
-       sp->s_sig_mgr = NONE;                   /* clear signal managers */
-       sp->s_bak_sig_mgr = NONE;
-  }
+   proc_init();
 
   /* Set up proc table entries for processes in boot image.  The stacks of the
    * kernel tasks are initialized to an array in data space.  The stacks
index ecb12880d3c7eb510182c285a27ce1f8ca31e056..8167bf458ad14bc6b39b77230de7e76401170e13 100644 (file)
@@ -79,6 +79,34 @@ FORWARD _PROTOTYPE( void enqueue_head, (struct proc *rp));
                break;                                                  \
        }
 
+PUBLIC void proc_init(void)
+{
+       struct proc * rp;
+       struct priv *sp;
+       int i;
+
+       /* Clear the process table. Anounce each slot as empty and set up
+        * mappings for proc_addr() and proc_nr() macros. Do the same for the
+        * table with privilege structures for the system processes. 
+        */
+       for (rp = BEG_PROC_ADDR, i = -NR_TASKS; rp < END_PROC_ADDR; ++rp, ++i) {
+               rp->p_rts_flags = RTS_SLOT_FREE;/* initialize free slot */
+               rp->p_magic = PMAGIC;
+               rp->p_nr = i;                   /* proc number from ptr */
+               rp->p_endpoint = _ENDPOINT(0, rp->p_nr); /* generation no. 0 */
+               rp->p_scheduler = NULL;         /* no user space scheduler */
+               rp->p_priority = 0;             /* no priority */
+               rp->p_quantum_size_ms = 0;      /* no quantum size */
+       }
+       for (sp = BEG_PRIV_ADDR, i = 0; sp < END_PRIV_ADDR; ++sp, ++i) {
+               sp->s_proc_nr = NONE;           /* initialize as free */
+               sp->s_id = (sys_id_t) i;        /* priv structure index */
+               ppriv_addr[i] = sp;             /* priv ptr from number */
+               sp->s_sig_mgr = NONE;           /* clear signal managers */
+               sp->s_bak_sig_mgr = NONE;
+       }
+}
+
 /*===========================================================================*
  *                             idle                                         * 
  *===========================================================================*/
index fb84aa51c7fc50c0472e22c3a7cc0c1c8f86278d..bdc7a8a18ecd1adcda09f086fa27ae7a3030a9d3 100644 (file)
@@ -41,6 +41,7 @@ _PROTOTYPE( __dead void minix_shutdown, (struct timer *tp)            );
 /* proc.c */
 
 _PROTOTYPE( int do_ipc, (reg_t r1, reg_t r2, reg_t r3)                 );
+_PROTOTYPE( void proc_init, (void)                                     );
 _PROTOTYPE( int mini_notify, (const struct proc *src, endpoint_t dst)  );
 _PROTOTYPE( void enqueue, (struct proc *rp)                            );
 _PROTOTYPE( void dequeue, (const struct proc *rp)                      );