Print this page
XXX Rearchitect and replace interrupt distribution

@@ -81,10 +81,11 @@
 /* well known processes */
 proc_t *proc_sched;             /* memory scheduler */
 proc_t *proc_init;              /* init */
 proc_t *proc_pageout;           /* pageout daemon */
 proc_t *proc_fsflush;           /* fsflush daemon */
+proc_t *proc_intrd;             /* interrupt daemon */
 
 pgcnt_t maxmem;         /* Maximum available memory in pages.   */
 pgcnt_t freemem;        /* Current available memory in pages.   */
 int     interrupts_unleashed;   /* set when we do the first spl0() */
 

@@ -357,10 +358,11 @@
 {
         proc_t          *p = ttoproc(curthread);        /* &p0 */
         int             (**initptr)();
         extern void     sched();
         extern void     fsflush();
+        extern void     intrd();
         extern int      (*init_tbl[])();
         extern int      (*mp_init_tbl[])();
         extern id_t     syscid, defaultcid;
         extern int      swaploaded;
         extern int      netboot;

@@ -616,10 +618,14 @@
         /* create fsflush daemon */
         if (newproc(fsflush, NULL, syscid, minclsyspri, NULL,
             FAMOUS_PID_FSFLUSH))
                 panic("main: unable to fork fsflush()");
 
+        /* create interrupt balancer daemon */
+        if (newproc(intrd, NULL, syscid, minclsyspri, NULL, 0))
+                panic("main: unable to fork intrd()");
+
         /* create cluster process if we're a member of one */
         if (cluster_bootflags & CLUSTER_BOOTED) {
                 if (newproc(cluster_wrapper, NULL, syscid, minclsyspri,
                     NULL, 0)) {
                         panic("main: unable to fork cluster()");