Print this page
XXX Rearchitect and replace interrupt distribution

@@ -85,10 +85,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() */
 

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

@@ -620,10 +622,14 @@
         /* create fsflush daemon */
         if (newproc(fsflush, NULL, syscid, minclsyspri, NULL,
             FAMOUS_PID_FSFLUSH))
                 panic("main: unable to fork fsflush()");
 
+        /* create interrupt balancer process */
+        if (newproc(interrupt_balancer, NULL, syscid, minclsyspri, NULL, 0))
+                panic("main: unable to fork interrupt_balancer()");
+
         /* 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()");