Generic MP rollup work.
authorMatthew Dillon <dillon@dragonflybsd.org>
Fri, 4 Jul 2003 00:32:32 +0000 (00:32 +0000)
committerMatthew Dillon <dillon@dragonflybsd.org>
Fri, 4 Jul 2003 00:32:32 +0000 (00:32 +0000)
30 files changed:
sys/i386/apic/mpapic.c
sys/i386/apic/mpapic.h
sys/i386/i386/db_interface.c
sys/i386/i386/genassym.c
sys/i386/i386/mpapic.c
sys/i386/i386/pmap.c
sys/i386/i386/swtch.s
sys/i386/i386/vm_machdep.c
sys/i386/icu/icu_ipl.s
sys/i386/include/mpapic.h
sys/i386/isa/icu_ipl.s
sys/i386/isa/intr_machdep.c
sys/kern/kern_mib.c
sys/kern/kern_shutdown.c
sys/kern/lwkt_thread.c
sys/platform/pc32/apic/mpapic.c
sys/platform/pc32/apic/mpapic.h
sys/platform/pc32/i386/db_interface.c
sys/platform/pc32/i386/genassym.c
sys/platform/pc32/i386/mpapic.c
sys/platform/pc32/i386/pmap.c
sys/platform/pc32/i386/swtch.s
sys/platform/pc32/i386/vm_machdep.c
sys/platform/pc32/icu/icu_ipl.s
sys/platform/pc32/include/mpapic.h
sys/platform/pc32/isa/icu_ipl.s
sys/platform/pc32/isa/intr_machdep.c
sys/platform/vkernel/i386/genassym.c
sys/sys/proc.h
sys/sys/thread.h

index 2ba63fa..3f28c6e 100644 (file)
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/i386/i386/mpapic.c,v 1.37.2.7 2003/01/25 02:31:47 peter Exp $
- * $DragonFly: src/sys/i386/apic/Attic/mpapic.c,v 1.2 2003/06/17 04:28:35 dillon Exp $
+ * $DragonFly: src/sys/i386/apic/Attic/mpapic.c,v 1.3 2003/07/04 00:32:24 dillon Exp $
  */
 
 #include <sys/param.h>
 #include <sys/systm.h>
-
 #include <machine/smptests.h>  /** TEST_TEST1, GRAB_LOPRIO */
+#include <machine/globaldata.h>
 #include <machine/smp.h>
 #include <machine/mpapic.h>
 #include <machine/segments.h>
@@ -59,7 +59,7 @@ apic_initialize(void)
        /* setup LVT1 as ExtINT */
        temp = lapic.lvt_lint0;
        temp &= ~(APIC_LVT_M | APIC_LVT_TM | APIC_LVT_IIPP | APIC_LVT_DM);
-       if (cpuid == 0)
+       if (mycpu->gd_cpuid == 0)
                temp |= 0x00000700;     /* process ExtInts */
        else
                temp |= 0x00010700;     /* mask ExtInts */
@@ -76,7 +76,7 @@ apic_initialize(void)
        temp &= ~APIC_TPR_PRIO;         /* clear priority field */
 #ifdef GRAB_LOPRIO
        /* Leave the BSP at TPR 0 during boot to make sure it gets interrupts */
-       if (cpuid != 0)
+       if (mycpu->gd_cpuid != 0)
                temp |= LOPRIO_LEVEL;   /* allow INT arbitration */
 #endif
        lapic.tpr = temp;
@@ -111,7 +111,7 @@ apic_initialize(void)
 void
 apic_dump(char* str)
 {
-       printf("SMP: CPU%d %s:\n", cpuid, str);
+       printf("SMP: CPU%d %s:\n", mycpu->gd_cpuid, str);
        printf("     lint0: 0x%08x lint1: 0x%08x TPR: 0x%08x SVR: 0x%08x\n",
                lapic.lvt_lint0, lapic.lvt_lint1, lapic.tpr, lapic.svr);
 }
index 65e3a32..1a8d508 100644 (file)
@@ -23,7 +23,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/i386/include/mpapic.h,v 1.14.2.2 2000/09/30 02:49:34 ps Exp $
- * $DragonFly: src/sys/i386/apic/Attic/mpapic.h,v 1.2 2003/06/17 04:28:35 dillon Exp $
+ * $DragonFly: src/sys/i386/apic/Attic/mpapic.h,v 1.3 2003/07/04 00:32:26 dillon Exp $
  */
 
 #ifndef _MACHINE_MPAPIC_H_
@@ -89,7 +89,7 @@ all_procs_ipi(int vector)
 static __inline int
 all_but_self_ipi(int vector)
 {
-       if (mp_ncpus <= 1)
+       if (ncpus <= 1)
                return 0;
        return apic_ipi(APIC_DEST_ALLESELF, vector, APIC_DELMODE_FIXED);
 }
index 6c9fed6..7021f1e 100644 (file)
@@ -24,7 +24,7 @@
  * rights to redistribute these changes.
  *
  * $FreeBSD: src/sys/i386/i386/db_interface.c,v 1.48.2.1 2000/07/07 00:38:46 obrien Exp $
- * $DragonFly: src/sys/i386/i386/Attic/db_interface.c,v 1.2 2003/06/17 04:28:35 dillon Exp $
+ * $DragonFly: src/sys/i386/i386/Attic/db_interface.c,v 1.3 2003/07/04 00:32:24 dillon Exp $
  */
 
 /*
@@ -40,6 +40,7 @@
 #include <machine/smp.h>
 #include <machine/smptests.h>  /** CPUSTOP_ON_DDBBREAK */
 #endif
+#include <machine/globaldata.h>
 
 #include <vm/vm.h>
 #include <vm/pmap.h>
@@ -142,7 +143,7 @@ kdb_trap(type, code, regs)
 #endif /* VERBOSE_CPUSTOP_ON_DDBBREAK */
 
        /* We stop all CPUs except ourselves (obviously) */
-       stop_cpus(other_cpus);
+       stop_cpus(mycpu->gd_other_cpus);
 
 #if defined(VERBOSE_CPUSTOP_ON_DDBBREAK)
        db_printf(" stopped\n");
@@ -171,9 +172,9 @@ kdb_trap(type, code, regs)
 #endif /* VERBOSE_CPUSTOP_ON_DDBBREAK */
 
        /* Restart all the CPUs we previously stopped */
-       if (stopped_cpus != other_cpus && smp_started != 0) {
+       if (stopped_cpus != mycpu->gd_other_cpus && smp_started != 0) {
                db_printf("whoa, other_cpus: 0x%08x, stopped_cpus: 0x%08x\n",
-                         other_cpus, stopped_cpus);
+                         mycpu->gd_other_cpus, stopped_cpus);
                panic("stop_cpus() failed");
        }
        restart_cpus(stopped_cpus);
index 5108d04..3aec802 100644 (file)
@@ -35,7 +35,7 @@
  *
  *     from: @(#)genassym.c    5.11 (Berkeley) 5/10/91
  * $FreeBSD: src/sys/i386/i386/genassym.c,v 1.86.2.3 2002/03/03 05:42:49 nyan Exp $
- * $DragonFly: src/sys/i386/i386/Attic/genassym.c,v 1.19 2003/07/03 17:24:01 dillon Exp $
+ * $DragonFly: src/sys/i386/i386/Attic/genassym.c,v 1.20 2003/07/04 00:32:24 dillon Exp $
  */
 
 #include "opt_user_ldt.h"
@@ -96,9 +96,6 @@ ASSYM(TD_CPL, offsetof(struct thread, td_mach) + offsetof(struct md_thread, mtd_
 
 ASSYM(TDPRI_CRIT, TDPRI_CRIT);
 
-ASSYM(P_ONCPU, offsetof(struct proc, p_oncpu));
-ASSYM(P_LASTCPU, offsetof(struct proc, p_lastcpu));
-
 ASSYM(SSLEEP, SSLEEP);
 ASSYM(SRUN, SRUN);
 ASSYM(V_TRAP, offsetof(struct vmmeter, v_trap));
@@ -140,10 +137,6 @@ ASSYM(PCB_DR7, offsetof(struct pcb, pcb_dr7));
 ASSYM(PCB_DBREGS, PCB_DBREGS);
 ASSYM(PCB_EXT, offsetof(struct pcb, pcb_ext));
 
-#ifdef SMP
-ASSYM(PCB_MPNEST, offsetof(struct pcb, pcb_mpnest));
-#endif
-
 ASSYM(PCB_SPARE, offsetof(struct pcb, __pcb_spare));
 ASSYM(PCB_FLAGS, offsetof(struct pcb, pcb_flags));
 ASSYM(PCB_SAVEFPU, offsetof(struct pcb, pcb_save));
index 666cda4..8e4c7cc 100644 (file)
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/i386/i386/mpapic.c,v 1.37.2.7 2003/01/25 02:31:47 peter Exp $
- * $DragonFly: src/sys/i386/i386/Attic/mpapic.c,v 1.2 2003/06/17 04:28:35 dillon Exp $
+ * $DragonFly: src/sys/i386/i386/Attic/mpapic.c,v 1.3 2003/07/04 00:32:24 dillon Exp $
  */
 
 #include <sys/param.h>
 #include <sys/systm.h>
-
 #include <machine/smptests.h>  /** TEST_TEST1, GRAB_LOPRIO */
+#include <machine/globaldata.h>
 #include <machine/smp.h>
 #include <machine/mpapic.h>
 #include <machine/segments.h>
@@ -59,7 +59,7 @@ apic_initialize(void)
        /* setup LVT1 as ExtINT */
        temp = lapic.lvt_lint0;
        temp &= ~(APIC_LVT_M | APIC_LVT_TM | APIC_LVT_IIPP | APIC_LVT_DM);
-       if (cpuid == 0)
+       if (mycpu->gd_cpuid == 0)
                temp |= 0x00000700;     /* process ExtInts */
        else
                temp |= 0x00010700;     /* mask ExtInts */
@@ -76,7 +76,7 @@ apic_initialize(void)
        temp &= ~APIC_TPR_PRIO;         /* clear priority field */
 #ifdef GRAB_LOPRIO
        /* Leave the BSP at TPR 0 during boot to make sure it gets interrupts */
-       if (cpuid != 0)
+       if (mycpu->gd_cpuid != 0)
                temp |= LOPRIO_LEVEL;   /* allow INT arbitration */
 #endif
        lapic.tpr = temp;
@@ -111,7 +111,7 @@ apic_initialize(void)
 void
 apic_dump(char* str)
 {
-       printf("SMP: CPU%d %s:\n", cpuid, str);
+       printf("SMP: CPU%d %s:\n", mycpu->gd_cpuid, str);
        printf("     lint0: 0x%08x lint1: 0x%08x TPR: 0x%08x SVR: 0x%08x\n",
                lapic.lvt_lint0, lapic.lvt_lint1, lapic.tpr, lapic.svr);
 }
index 3cfbf9a..3210ed5 100644 (file)
@@ -40,7 +40,7 @@
  *
  *     from:   @(#)pmap.c      7.7 (Berkeley)  5/12/91
  * $FreeBSD: src/sys/i386/i386/pmap.c,v 1.250.2.18 2002/03/06 22:48:53 silby Exp $
- * $DragonFly: src/sys/i386/i386/Attic/pmap.c,v 1.14 2003/07/03 17:24:01 dillon Exp $
+ * $DragonFly: src/sys/i386/i386/Attic/pmap.c,v 1.15 2003/07/04 00:32:24 dillon Exp $
  */
 
 /*
@@ -426,7 +426,7 @@ pmap_set_opt(void)
 {
        if (pseflag && (cpu_feature & CPUID_PSE)) {
                load_cr4(rcr4() | CR4_PSE);
-               if (pdir4mb && cpuid == 0) {    /* only on BSP */
+               if (pdir4mb && mycpu->gd_cpuid == 0) {  /* only on BSP */
                        kernel_pmap->pm_pdir[KPTDI] =
                            PTD[KPTDI] = (pd_entry_t)pdir4mb;
                        cpu_invltlb();
@@ -558,9 +558,9 @@ static __inline void
 pmap_TLB_invalidate(pmap_t pmap, vm_offset_t va)
 {
 #if defined(SMP)
-       if (pmap->pm_active & (1 << cpuid))
+       if (pmap->pm_active & (1 << mycpu->gd_cpuid))
                cpu_invlpg((void *)va);
-       if (pmap->pm_active & other_cpus)
+       if (pmap->pm_active & mycpu->gd_other_cpus)
                smp_invltlb();
 #else
        if (pmap->pm_active)
@@ -572,9 +572,9 @@ static __inline void
 pmap_TLB_invalidate_all(pmap_t pmap)
 {
 #if defined(SMP)
-       if (pmap->pm_active & (1 << cpuid))
+       if (pmap->pm_active & (1 << mycpu->gd_cpuid))
                cpu_invltlb();
-       if (pmap->pm_active & other_cpus)
+       if (pmap->pm_active & mycpu->gd_other_cpus)
                smp_invltlb();
 #else
        if (pmap->pm_active)
@@ -1985,7 +1985,7 @@ pmap_enter(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_prot_t prot,
                                *pte |= PG_RW;
 #ifdef SMP
                                cpu_invlpg((void *)va);
-                               if (pmap->pm_active & other_cpus)
+                               if (pmap->pm_active & mycpu->gd_other_cpus)
                                        smp_invltlb();
 #else
                                invltlb_1pg(va);
@@ -2059,7 +2059,7 @@ validate:
                /*if (origpte)*/ {
 #ifdef SMP
                        cpu_invlpg((void *)va);
-                       if (pmap->pm_active & other_cpus)
+                       if (pmap->pm_active & mycpu->gd_other_cpus)
                                smp_invltlb();
 #else
                        invltlb_1pg(va);
@@ -3202,7 +3202,7 @@ pmap_activate(struct proc *p)
 
        pmap = vmspace_pmap(p->p_vmspace);
 #if defined(SMP)
-       pmap->pm_active |= 1 << cpuid;
+       pmap->pm_active |= 1 << mycpu->gd_cpuid;
 #else
        pmap->pm_active |= 1;
 #endif
index ee24e3c..78dccc6 100644 (file)
@@ -35,7 +35,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/i386/i386/swtch.s,v 1.89.2.10 2003/01/23 03:36:24 ps Exp $
- * $DragonFly: src/sys/i386/i386/Attic/swtch.s,v 1.18 2003/07/01 20:30:40 dillon Exp $
+ * $DragonFly: src/sys/i386/i386/Attic/swtch.s,v 1.19 2003/07/04 00:32:24 dillon Exp $
  */
 
 #include "npx.h"
@@ -82,17 +82,8 @@ ENTRY(cpu_heavy_switch)
        movl    TD_PROC(%ecx),%ecx
 
        cli
-#ifdef SMP
-       movb    P_ONCPU(%ecx), %al              /* save "last" cpu */
-       movb    %al, P_LASTCPU(%ecx)
-       movb    $0xff, P_ONCPU(%ecx)            /* "leave" the cpu */
-#endif /* SMP */
        movl    P_VMSPACE(%ecx), %edx
-#ifdef SMP
-       movl    _cpuid, %eax
-#else
-       xorl    %eax, %eax
-#endif /* SMP */
+       movl    PCPU(cpuid), %eax
        btrl    %eax, VM_PMAP+PM_ACTIVE(%edx)
 
        /*
@@ -142,21 +133,6 @@ ENTRY(cpu_heavy_switch)
        movl    %eax,PCB_DR0(%edx)
 1:
  
-       /*
-        * Save BGL nesting count.  Note that we hold the BGL with a
-        * count of at least 1 on entry to cpu_heavy_switch().
-        */
-#ifdef SMP
-       movl    _mp_lock, %eax
-       /* XXX FIXME: we should be saving the local APIC TPR */
-#ifdef DIAGNOSTIC
-       cmpl    $FREE_LOCK, %eax                /* is it free? */
-       je      badsw4                          /* yes, bad medicine! */
-#endif /* DIAGNOSTIC */
-       andl    $COUNT_FIELD, %eax              /* clear CPU portion */
-       movl    %eax, PCB_MPNEST(%edx)          /* store it */
-#endif /* SMP */
-
        /*
         * Save the FP state if we have used the FP.
         */
@@ -279,11 +255,7 @@ ENTRY(cpu_heavy_restore)
        /*
         * Deal with the PCB extension, restore the private tss
         */
-#ifdef SMP
-       movl    _cpuid, %esi
-#else
-       xorl    %esi, %esi
-#endif
+       movl    PCPU(cpuid), %esi
        cmpl    $0, PCB_EXT(%edx)               /* has pcb extension? */
        je      1f
        btsl    %esi, private_tss               /* mark use of private tss */
@@ -358,19 +330,6 @@ ENTRY(cpu_heavy_restore)
        andl    $~APIC_TPR_PRIO, lapic_tpr
 #endif /** CHEAP_TPR */
 #endif /** GRAB_LOPRIO */
-       movl    _cpuid,%eax
-       movb    %al, P_ONCPU(%ecx)
-#endif /* SMP */
-
-       /*
-        * Restore the BGL nesting count.  Note that the nesting count will
-        * be at least 1.
-        */
-#ifdef SMP
-       movl    _cpu_lockid, %eax
-       orl     PCB_MPNEST(%edx), %eax          /* add next count from PROC */
-       movl    %eax, _mp_lock                  /* load the mp_lock */
-       /* XXX FIXME: we should be restoring the local APIC TPR */
 #endif /* SMP */
 
        /*
@@ -530,10 +489,22 @@ ENTRY(savectx)
  *     don't die.  This restore function is used to bootstrap into the
  *     cpu_idle() LWKT only, after that cpu_lwkt_*() will be used for
  *     switching.
+ *
+ *     If we are an AP we have to call ap_init() before jumping to
+ *     cpu_idle().  ap_init() will synchronize with the BP and finish
+ *     setting up various ncpu-dependant globaldata fields.  This may
+ *     happen on UP as well as SMP if we happen to be simulating multiple
+ *     cpus.
  */
 ENTRY(cpu_idle_restore)
        movl    $0,%ebp
        pushl   $0
+#ifdef SMP
+       cmpl    $0,PCPU(cpuid)
+       je      1f
+       call    ap_init
+1:
+#endif
        sti
        jmp     cpu_idle
 
index 8fbb65d..d5362a0 100644 (file)
@@ -39,7 +39,7 @@
  *     from: @(#)vm_machdep.c  7.3 (Berkeley) 5/13/91
  *     Utah $Hdr: vm_machdep.c 1.16.1.1 89/06/23$
  * $FreeBSD: src/sys/i386/i386/vm_machdep.c,v 1.132.2.9 2003/01/25 19:02:23 dillon Exp $
- * $DragonFly: src/sys/i386/i386/Attic/vm_machdep.c,v 1.16 2003/07/03 17:24:01 dillon Exp $
+ * $DragonFly: src/sys/i386/i386/Attic/vm_machdep.c,v 1.17 2003/07/04 00:32:24 dillon Exp $
  */
 
 #include "npx.h"
@@ -196,9 +196,6 @@ cpu_fork(p1, p2, flags)
         * pcb2->pcb_onfault:   cloned above (always NULL here?).
         */
 
-#ifdef SMP
-       pcb2->pcb_mpnest = 1;
-#endif
        /*
         * XXX don't copy the i/o pages.  this should probably be fixed.
         */
@@ -431,23 +428,23 @@ cpu_reset()
 
                u_int map;
                int cnt;
-               printf("cpu_reset called on cpu#%d\n",cpuid);
+               printf("cpu_reset called on cpu#%d\n",mycpu->gd_cpuid);
 
-               map = other_cpus & ~ stopped_cpus;
+               map = mycpu->gd_other_cpus & ~ stopped_cpus;
 
                if (map != 0) {
                        printf("cpu_reset: Stopping other CPUs\n");
                        stop_cpus(map);         /* Stop all other CPUs */
                }
 
-               if (cpuid == 0) {
+               if (mycpu->gd_cpuid == 0) {
                        DELAY(1000000);
                        cpu_reset_real();
                        /* NOTREACHED */
                } else {
                        /* We are not BSP (CPU #0) */
 
-                       cpu_reset_proxyid = cpuid;
+                       cpu_reset_proxyid = mycpu->gd_cpuid;
                        cpustop_restartfunc = cpu_reset_proxy;
                        printf("cpu_reset: Restarting BSP\n");
                        started_cpus = (1<<0);          /* Restart CPU #0 */
index 7537171..2af4dd8 100644 (file)
@@ -36,7 +36,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/i386/isa/icu_ipl.s,v 1.6 1999/08/28 00:44:42 peter Exp $
- * $DragonFly: src/sys/i386/icu/Attic/icu_ipl.s,v 1.6 2003/07/01 20:31:38 dillon Exp $
+ * $DragonFly: src/sys/i386/icu/Attic/icu_ipl.s,v 1.7 2003/07/04 00:32:28 dillon Exp $
  */
 
        .data
@@ -46,6 +46,8 @@
         * Interrupt mask for ICU interrupts, defaults to all hardware
         * interrupts turned off.
         */
+       .p2align 2                      /* MUST be 32bit aligned */
+
        .globl  imen
 imen:  .long   HWI_MASK
 
index 9b76173..8d49d9d 100644 (file)
@@ -23,7 +23,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/i386/include/mpapic.h,v 1.14.2.2 2000/09/30 02:49:34 ps Exp $
- * $DragonFly: src/sys/i386/include/Attic/mpapic.h,v 1.2 2003/06/17 04:28:35 dillon Exp $
+ * $DragonFly: src/sys/i386/include/Attic/mpapic.h,v 1.3 2003/07/04 00:32:26 dillon Exp $
  */
 
 #ifndef _MACHINE_MPAPIC_H_
@@ -89,7 +89,7 @@ all_procs_ipi(int vector)
 static __inline int
 all_but_self_ipi(int vector)
 {
-       if (mp_ncpus <= 1)
+       if (ncpus <= 1)
                return 0;
        return apic_ipi(APIC_DEST_ALLESELF, vector, APIC_DELMODE_FIXED);
 }
index b7de2b3..394297a 100644 (file)
@@ -36,7 +36,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/i386/isa/icu_ipl.s,v 1.6 1999/08/28 00:44:42 peter Exp $
- * $DragonFly: src/sys/i386/isa/Attic/icu_ipl.s,v 1.6 2003/07/01 20:31:38 dillon Exp $
+ * $DragonFly: src/sys/i386/isa/Attic/icu_ipl.s,v 1.7 2003/07/04 00:32:28 dillon Exp $
  */
 
        .data
@@ -46,6 +46,8 @@
         * Interrupt mask for ICU interrupts, defaults to all hardware
         * interrupts turned off.
         */
+       .p2align 2                      /* MUST be 32bit aligned */
+
        .globl  imen
 imen:  .long   HWI_MASK
 
index 7fed089..6ae5dde 100644 (file)
@@ -35,7 +35,7 @@
  *
  *     from: @(#)isa.c 7.2 (Berkeley) 5/13/91
  * $FreeBSD: src/sys/i386/isa/intr_machdep.c,v 1.29.2.5 2001/10/14 06:54:27 luigi Exp $
- * $DragonFly: src/sys/i386/isa/Attic/intr_machdep.c,v 1.4 2003/06/30 19:50:31 dillon Exp $
+ * $DragonFly: src/sys/i386/isa/Attic/intr_machdep.c,v 1.5 2003/07/04 00:32:28 dillon Exp $
  */
 /*
  * This file contains an aggregated module marked:
@@ -160,10 +160,6 @@ unpendhand_t *fastunpend[ICU_LEN] = {
        IDTVEC(fastunpend18), IDTVEC(fastunpend19),
        IDTVEC(fastunpend20), IDTVEC(fastunpend21),
        IDTVEC(fastunpend22), IDTVEC(fastunpend23),
-       IDTVEC(fastunpend24), IDTVEC(fastunpend25),
-       IDTVEC(fastunpend26), IDTVEC(fastunpend27),
-       IDTVEC(fastunpend28), IDTVEC(fastunpend29),
-       IDTVEC(fastunpend30), IDTVEC(fastunpend31),
 #endif
 };
 
@@ -518,7 +514,6 @@ icu_setup(int intr, inthand2_t *handler, void *arg, u_int *maskptr, int flags)
               SDT_SYS386IGT, SEL_KPL, GSEL(GCODE_SEL, SEL_KPL));
 #endif /* FAST_HI */
        INTREN(1 << intr);
-       MPINTR_UNLOCK();
        write_eflags(ef);
        return (0);
 }
@@ -552,7 +547,6 @@ icu_unset(intr, handler)
        setidt(ICU_OFFSET + intr, slowintr[intr], SDT_SYS386IGT, SEL_KPL,
            GSEL(GCODE_SEL, SEL_KPL));
 #endif /* FAST_HI */
-       MPINTR_UNLOCK();
        write_eflags(ef);
        return (0);
 }
index 5b6e2bc..32fd0de 100644 (file)
@@ -38,7 +38,7 @@
  *
  *     @(#)kern_sysctl.c       8.4 (Berkeley) 4/14/94
  * $FreeBSD: src/sys/kern/kern_mib.c,v 1.29.2.4 2001/07/30 23:28:00 peter Exp $
- * $DragonFly: src/sys/kern/kern_mib.c,v 1.5 2003/06/29 06:48:31 dillon Exp $
+ * $DragonFly: src/sys/kern/kern_mib.c,v 1.6 2003/07/04 00:32:30 dillon Exp $
  */
 
 #include <sys/param.h>
@@ -129,7 +129,7 @@ SYSCTL_STRING(_kern, KERN_BOOTFILE, bootfile, CTLFLAG_RW,
 
 #ifdef SMP
 SYSCTL_INT(_hw, HW_NCPU, ncpu, CTLFLAG_RD, 
-    &mp_ncpus, 0, "Number of active CPUs");
+    &ncpus, 0, "Number of active CPUs");
 #else
 SYSCTL_INT(_hw, HW_NCPU, ncpu, CTLFLAG_RD, 
     0, 1, "Number of active CPUs");
index a66d200..30e02cf 100644 (file)
@@ -37,7 +37,7 @@
  *
  *     @(#)kern_shutdown.c     8.3 (Berkeley) 1/21/94
  * $FreeBSD: src/sys/kern/kern_shutdown.c,v 1.72.2.12 2002/02/21 19:15:10 dillon Exp $
- * $DragonFly: src/sys/kern/kern_shutdown.c,v 1.7 2003/06/27 01:53:25 dillon Exp $
+ * $DragonFly: src/sys/kern/kern_shutdown.c,v 1.8 2003/07/04 00:32:30 dillon Exp $
  */
 
 #include "opt_ddb.h"
@@ -214,7 +214,7 @@ boot(int howto)
 
 #ifdef SMP
        if (smp_active) {
-               printf("boot() called on cpu#%d\n", cpuid);
+               printf("boot() called on cpu#%d\n", mycpu->gd_cpuid);
        }
 #endif
        /*
@@ -584,7 +584,7 @@ panic(const char *fmt, ...)
 #ifdef SMP
        /* three seperate prints in case of an unmapped page and trap */
        printf("mp_lock = %08x; ", mp_lock);
-       printf("cpuid = %d; ", cpuid);
+       printf("cpuid = %d; ", mycpu->gd_cpuid);
        printf("lapic.id = %08x\n", lapic.id);
 #endif
 
index 3889887..5e37b08 100644 (file)
@@ -27,7 +27,7 @@
  *     thread scheduler, which means that generally speaking we only need
  *     to use a critical section to prevent hicups.
  *
- * $DragonFly: src/sys/kern/lwkt_thread.c,v 1.13 2003/06/30 23:54:02 dillon Exp $
+ * $DragonFly: src/sys/kern/lwkt_thread.c,v 1.14 2003/07/04 00:32:30 dillon Exp $
  */
 
 #include <sys/param.h>
@@ -791,6 +791,15 @@ lwkt_regettoken(lwkt_token_t tok)
     return(0);
 }
 
+void
+lwkt_inittoken(lwkt_token_t tok)
+{
+    /*
+     * Zero structure and set cpu owner and reqcpu to cpu 0.
+     */
+    bzero(tok, sizeof(*tok));
+}
+
 /*
  * Create a kernel process/thread/whatever.  It shares it's address space
  * with proc0 - ie: kernel only.
index b5c2940..c6bdc88 100644 (file)
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/i386/i386/mpapic.c,v 1.37.2.7 2003/01/25 02:31:47 peter Exp $
- * $DragonFly: src/sys/platform/pc32/apic/mpapic.c,v 1.2 2003/06/17 04:28:35 dillon Exp $
+ * $DragonFly: src/sys/platform/pc32/apic/mpapic.c,v 1.3 2003/07/04 00:32:24 dillon Exp $
  */
 
 #include <sys/param.h>
 #include <sys/systm.h>
-
 #include <machine/smptests.h>  /** TEST_TEST1, GRAB_LOPRIO */
+#include <machine/globaldata.h>
 #include <machine/smp.h>
 #include <machine/mpapic.h>
 #include <machine/segments.h>
@@ -59,7 +59,7 @@ apic_initialize(void)
        /* setup LVT1 as ExtINT */
        temp = lapic.lvt_lint0;
        temp &= ~(APIC_LVT_M | APIC_LVT_TM | APIC_LVT_IIPP | APIC_LVT_DM);
-       if (cpuid == 0)
+       if (mycpu->gd_cpuid == 0)
                temp |= 0x00000700;     /* process ExtInts */
        else
                temp |= 0x00010700;     /* mask ExtInts */
@@ -76,7 +76,7 @@ apic_initialize(void)
        temp &= ~APIC_TPR_PRIO;         /* clear priority field */
 #ifdef GRAB_LOPRIO
        /* Leave the BSP at TPR 0 during boot to make sure it gets interrupts */
-       if (cpuid != 0)
+       if (mycpu->gd_cpuid != 0)
                temp |= LOPRIO_LEVEL;   /* allow INT arbitration */
 #endif
        lapic.tpr = temp;
@@ -111,7 +111,7 @@ apic_initialize(void)
 void
 apic_dump(char* str)
 {
-       printf("SMP: CPU%d %s:\n", cpuid, str);
+       printf("SMP: CPU%d %s:\n", mycpu->gd_cpuid, str);
        printf("     lint0: 0x%08x lint1: 0x%08x TPR: 0x%08x SVR: 0x%08x\n",
                lapic.lvt_lint0, lapic.lvt_lint1, lapic.tpr, lapic.svr);
 }
index 9bba1b7..24bf941 100644 (file)
@@ -23,7 +23,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/i386/include/mpapic.h,v 1.14.2.2 2000/09/30 02:49:34 ps Exp $
- * $DragonFly: src/sys/platform/pc32/apic/mpapic.h,v 1.2 2003/06/17 04:28:35 dillon Exp $
+ * $DragonFly: src/sys/platform/pc32/apic/mpapic.h,v 1.3 2003/07/04 00:32:26 dillon Exp $
  */
 
 #ifndef _MACHINE_MPAPIC_H_
@@ -89,7 +89,7 @@ all_procs_ipi(int vector)
 static __inline int
 all_but_self_ipi(int vector)
 {
-       if (mp_ncpus <= 1)
+       if (ncpus <= 1)
                return 0;
        return apic_ipi(APIC_DEST_ALLESELF, vector, APIC_DELMODE_FIXED);
 }
index 7db71d5..ea872e3 100644 (file)
@@ -24,7 +24,7 @@
  * rights to redistribute these changes.
  *
  * $FreeBSD: src/sys/i386/i386/db_interface.c,v 1.48.2.1 2000/07/07 00:38:46 obrien Exp $
- * $DragonFly: src/sys/platform/pc32/i386/db_interface.c,v 1.2 2003/06/17 04:28:35 dillon Exp $
+ * $DragonFly: src/sys/platform/pc32/i386/db_interface.c,v 1.3 2003/07/04 00:32:24 dillon Exp $
  */
 
 /*
@@ -40,6 +40,7 @@
 #include <machine/smp.h>
 #include <machine/smptests.h>  /** CPUSTOP_ON_DDBBREAK */
 #endif
+#include <machine/globaldata.h>
 
 #include <vm/vm.h>
 #include <vm/pmap.h>
@@ -142,7 +143,7 @@ kdb_trap(type, code, regs)
 #endif /* VERBOSE_CPUSTOP_ON_DDBBREAK */
 
        /* We stop all CPUs except ourselves (obviously) */
-       stop_cpus(other_cpus);
+       stop_cpus(mycpu->gd_other_cpus);
 
 #if defined(VERBOSE_CPUSTOP_ON_DDBBREAK)
        db_printf(" stopped\n");
@@ -171,9 +172,9 @@ kdb_trap(type, code, regs)
 #endif /* VERBOSE_CPUSTOP_ON_DDBBREAK */
 
        /* Restart all the CPUs we previously stopped */
-       if (stopped_cpus != other_cpus && smp_started != 0) {
+       if (stopped_cpus != mycpu->gd_other_cpus && smp_started != 0) {
                db_printf("whoa, other_cpus: 0x%08x, stopped_cpus: 0x%08x\n",
-                         other_cpus, stopped_cpus);
+                         mycpu->gd_other_cpus, stopped_cpus);
                panic("stop_cpus() failed");
        }
        restart_cpus(stopped_cpus);
index d7fb534..4d8d7de 100644 (file)
@@ -35,7 +35,7 @@
  *
  *     from: @(#)genassym.c    5.11 (Berkeley) 5/10/91
  * $FreeBSD: src/sys/i386/i386/genassym.c,v 1.86.2.3 2002/03/03 05:42:49 nyan Exp $
- * $DragonFly: src/sys/platform/pc32/i386/genassym.c,v 1.19 2003/07/03 17:24:01 dillon Exp $
+ * $DragonFly: src/sys/platform/pc32/i386/genassym.c,v 1.20 2003/07/04 00:32:24 dillon Exp $
  */
 
 #include "opt_user_ldt.h"
@@ -96,9 +96,6 @@ ASSYM(TD_CPL, offsetof(struct thread, td_mach) + offsetof(struct md_thread, mtd_
 
 ASSYM(TDPRI_CRIT, TDPRI_CRIT);
 
-ASSYM(P_ONCPU, offsetof(struct proc, p_oncpu));
-ASSYM(P_LASTCPU, offsetof(struct proc, p_lastcpu));
-
 ASSYM(SSLEEP, SSLEEP);
 ASSYM(SRUN, SRUN);
 ASSYM(V_TRAP, offsetof(struct vmmeter, v_trap));
@@ -140,10 +137,6 @@ ASSYM(PCB_DR7, offsetof(struct pcb, pcb_dr7));
 ASSYM(PCB_DBREGS, PCB_DBREGS);
 ASSYM(PCB_EXT, offsetof(struct pcb, pcb_ext));
 
-#ifdef SMP
-ASSYM(PCB_MPNEST, offsetof(struct pcb, pcb_mpnest));
-#endif
-
 ASSYM(PCB_SPARE, offsetof(struct pcb, __pcb_spare));
 ASSYM(PCB_FLAGS, offsetof(struct pcb, pcb_flags));
 ASSYM(PCB_SAVEFPU, offsetof(struct pcb, pcb_save));
index d4bd7ba..a487785 100644 (file)
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/i386/i386/mpapic.c,v 1.37.2.7 2003/01/25 02:31:47 peter Exp $
- * $DragonFly: src/sys/platform/pc32/i386/Attic/mpapic.c,v 1.2 2003/06/17 04:28:35 dillon Exp $
+ * $DragonFly: src/sys/platform/pc32/i386/Attic/mpapic.c,v 1.3 2003/07/04 00:32:24 dillon Exp $
  */
 
 #include <sys/param.h>
 #include <sys/systm.h>
-
 #include <machine/smptests.h>  /** TEST_TEST1, GRAB_LOPRIO */
+#include <machine/globaldata.h>
 #include <machine/smp.h>
 #include <machine/mpapic.h>
 #include <machine/segments.h>
@@ -59,7 +59,7 @@ apic_initialize(void)
        /* setup LVT1 as ExtINT */
        temp = lapic.lvt_lint0;
        temp &= ~(APIC_LVT_M | APIC_LVT_TM | APIC_LVT_IIPP | APIC_LVT_DM);
-       if (cpuid == 0)
+       if (mycpu->gd_cpuid == 0)
                temp |= 0x00000700;     /* process ExtInts */
        else
                temp |= 0x00010700;     /* mask ExtInts */
@@ -76,7 +76,7 @@ apic_initialize(void)
        temp &= ~APIC_TPR_PRIO;         /* clear priority field */
 #ifdef GRAB_LOPRIO
        /* Leave the BSP at TPR 0 during boot to make sure it gets interrupts */
-       if (cpuid != 0)
+       if (mycpu->gd_cpuid != 0)
                temp |= LOPRIO_LEVEL;   /* allow INT arbitration */
 #endif
        lapic.tpr = temp;
@@ -111,7 +111,7 @@ apic_initialize(void)
 void
 apic_dump(char* str)
 {
-       printf("SMP: CPU%d %s:\n", cpuid, str);
+       printf("SMP: CPU%d %s:\n", mycpu->gd_cpuid, str);
        printf("     lint0: 0x%08x lint1: 0x%08x TPR: 0x%08x SVR: 0x%08x\n",
                lapic.lvt_lint0, lapic.lvt_lint1, lapic.tpr, lapic.svr);
 }
index 8f9aa44..32d0a2a 100644 (file)
@@ -40,7 +40,7 @@
  *
  *     from:   @(#)pmap.c      7.7 (Berkeley)  5/12/91
  * $FreeBSD: src/sys/i386/i386/pmap.c,v 1.250.2.18 2002/03/06 22:48:53 silby Exp $
- * $DragonFly: src/sys/platform/pc32/i386/pmap.c,v 1.14 2003/07/03 17:24:01 dillon Exp $
+ * $DragonFly: src/sys/platform/pc32/i386/pmap.c,v 1.15 2003/07/04 00:32:24 dillon Exp $
  */
 
 /*
@@ -426,7 +426,7 @@ pmap_set_opt(void)
 {
        if (pseflag && (cpu_feature & CPUID_PSE)) {
                load_cr4(rcr4() | CR4_PSE);
-               if (pdir4mb && cpuid == 0) {    /* only on BSP */
+               if (pdir4mb && mycpu->gd_cpuid == 0) {  /* only on BSP */
                        kernel_pmap->pm_pdir[KPTDI] =
                            PTD[KPTDI] = (pd_entry_t)pdir4mb;
                        cpu_invltlb();
@@ -558,9 +558,9 @@ static __inline void
 pmap_TLB_invalidate(pmap_t pmap, vm_offset_t va)
 {
 #if defined(SMP)
-       if (pmap->pm_active & (1 << cpuid))
+       if (pmap->pm_active & (1 << mycpu->gd_cpuid))
                cpu_invlpg((void *)va);
-       if (pmap->pm_active & other_cpus)
+       if (pmap->pm_active & mycpu->gd_other_cpus)
                smp_invltlb();
 #else
        if (pmap->pm_active)
@@ -572,9 +572,9 @@ static __inline void
 pmap_TLB_invalidate_all(pmap_t pmap)
 {
 #if defined(SMP)
-       if (pmap->pm_active & (1 << cpuid))
+       if (pmap->pm_active & (1 << mycpu->gd_cpuid))
                cpu_invltlb();
-       if (pmap->pm_active & other_cpus)
+       if (pmap->pm_active & mycpu->gd_other_cpus)
                smp_invltlb();
 #else
        if (pmap->pm_active)
@@ -1985,7 +1985,7 @@ pmap_enter(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_prot_t prot,
                                *pte |= PG_RW;
 #ifdef SMP
                                cpu_invlpg((void *)va);
-                               if (pmap->pm_active & other_cpus)
+                               if (pmap->pm_active & mycpu->gd_other_cpus)
                                        smp_invltlb();
 #else
                                invltlb_1pg(va);
@@ -2059,7 +2059,7 @@ validate:
                /*if (origpte)*/ {
 #ifdef SMP
                        cpu_invlpg((void *)va);
-                       if (pmap->pm_active & other_cpus)
+                       if (pmap->pm_active & mycpu->gd_other_cpus)
                                smp_invltlb();
 #else
                        invltlb_1pg(va);
@@ -3202,7 +3202,7 @@ pmap_activate(struct proc *p)
 
        pmap = vmspace_pmap(p->p_vmspace);
 #if defined(SMP)
-       pmap->pm_active |= 1 << cpuid;
+       pmap->pm_active |= 1 << mycpu->gd_cpuid;
 #else
        pmap->pm_active |= 1;
 #endif
index 98bc8af..8819cc1 100644 (file)
@@ -35,7 +35,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/i386/i386/swtch.s,v 1.89.2.10 2003/01/23 03:36:24 ps Exp $
- * $DragonFly: src/sys/platform/pc32/i386/swtch.s,v 1.18 2003/07/01 20:30:40 dillon Exp $
+ * $DragonFly: src/sys/platform/pc32/i386/swtch.s,v 1.19 2003/07/04 00:32:24 dillon Exp $
  */
 
 #include "npx.h"
@@ -82,17 +82,8 @@ ENTRY(cpu_heavy_switch)
        movl    TD_PROC(%ecx),%ecx
 
        cli
-#ifdef SMP
-       movb    P_ONCPU(%ecx), %al              /* save "last" cpu */
-       movb    %al, P_LASTCPU(%ecx)
-       movb    $0xff, P_ONCPU(%ecx)            /* "leave" the cpu */
-#endif /* SMP */
        movl    P_VMSPACE(%ecx), %edx
-#ifdef SMP
-       movl    _cpuid, %eax
-#else
-       xorl    %eax, %eax
-#endif /* SMP */
+       movl    PCPU(cpuid), %eax
        btrl    %eax, VM_PMAP+PM_ACTIVE(%edx)
 
        /*
@@ -142,21 +133,6 @@ ENTRY(cpu_heavy_switch)
        movl    %eax,PCB_DR0(%edx)
 1:
  
-       /*
-        * Save BGL nesting count.  Note that we hold the BGL with a
-        * count of at least 1 on entry to cpu_heavy_switch().
-        */
-#ifdef SMP
-       movl    _mp_lock, %eax
-       /* XXX FIXME: we should be saving the local APIC TPR */
-#ifdef DIAGNOSTIC
-       cmpl    $FREE_LOCK, %eax                /* is it free? */
-       je      badsw4                          /* yes, bad medicine! */
-#endif /* DIAGNOSTIC */
-       andl    $COUNT_FIELD, %eax              /* clear CPU portion */
-       movl    %eax, PCB_MPNEST(%edx)          /* store it */
-#endif /* SMP */
-
        /*
         * Save the FP state if we have used the FP.
         */
@@ -279,11 +255,7 @@ ENTRY(cpu_heavy_restore)
        /*
         * Deal with the PCB extension, restore the private tss
         */
-#ifdef SMP
-       movl    _cpuid, %esi
-#else
-       xorl    %esi, %esi
-#endif
+       movl    PCPU(cpuid), %esi
        cmpl    $0, PCB_EXT(%edx)               /* has pcb extension? */
        je      1f
        btsl    %esi, private_tss               /* mark use of private tss */
@@ -358,19 +330,6 @@ ENTRY(cpu_heavy_restore)
        andl    $~APIC_TPR_PRIO, lapic_tpr
 #endif /** CHEAP_TPR */
 #endif /** GRAB_LOPRIO */
-       movl    _cpuid,%eax
-       movb    %al, P_ONCPU(%ecx)
-#endif /* SMP */
-
-       /*
-        * Restore the BGL nesting count.  Note that the nesting count will
-        * be at least 1.
-        */
-#ifdef SMP
-       movl    _cpu_lockid, %eax
-       orl     PCB_MPNEST(%edx), %eax          /* add next count from PROC */
-       movl    %eax, _mp_lock                  /* load the mp_lock */
-       /* XXX FIXME: we should be restoring the local APIC TPR */
 #endif /* SMP */
 
        /*
@@ -530,10 +489,22 @@ ENTRY(savectx)
  *     don't die.  This restore function is used to bootstrap into the
  *     cpu_idle() LWKT only, after that cpu_lwkt_*() will be used for
  *     switching.
+ *
+ *     If we are an AP we have to call ap_init() before jumping to
+ *     cpu_idle().  ap_init() will synchronize with the BP and finish
+ *     setting up various ncpu-dependant globaldata fields.  This may
+ *     happen on UP as well as SMP if we happen to be simulating multiple
+ *     cpus.
  */
 ENTRY(cpu_idle_restore)
        movl    $0,%ebp
        pushl   $0
+#ifdef SMP
+       cmpl    $0,PCPU(cpuid)
+       je      1f
+       call    ap_init
+1:
+#endif
        sti
        jmp     cpu_idle
 
index 1cf91fe..3da4f3a 100644 (file)
@@ -39,7 +39,7 @@
  *     from: @(#)vm_machdep.c  7.3 (Berkeley) 5/13/91
  *     Utah $Hdr: vm_machdep.c 1.16.1.1 89/06/23$
  * $FreeBSD: src/sys/i386/i386/vm_machdep.c,v 1.132.2.9 2003/01/25 19:02:23 dillon Exp $
- * $DragonFly: src/sys/platform/pc32/i386/vm_machdep.c,v 1.16 2003/07/03 17:24:01 dillon Exp $
+ * $DragonFly: src/sys/platform/pc32/i386/vm_machdep.c,v 1.17 2003/07/04 00:32:24 dillon Exp $
  */
 
 #include "npx.h"
@@ -196,9 +196,6 @@ cpu_fork(p1, p2, flags)
         * pcb2->pcb_onfault:   cloned above (always NULL here?).
         */
 
-#ifdef SMP
-       pcb2->pcb_mpnest = 1;
-#endif
        /*
         * XXX don't copy the i/o pages.  this should probably be fixed.
         */
@@ -431,23 +428,23 @@ cpu_reset()
 
                u_int map;
                int cnt;
-               printf("cpu_reset called on cpu#%d\n",cpuid);
+               printf("cpu_reset called on cpu#%d\n",mycpu->gd_cpuid);
 
-               map = other_cpus & ~ stopped_cpus;
+               map = mycpu->gd_other_cpus & ~ stopped_cpus;
 
                if (map != 0) {
                        printf("cpu_reset: Stopping other CPUs\n");
                        stop_cpus(map);         /* Stop all other CPUs */
                }
 
-               if (cpuid == 0) {
+               if (mycpu->gd_cpuid == 0) {
                        DELAY(1000000);
                        cpu_reset_real();
                        /* NOTREACHED */
                } else {
                        /* We are not BSP (CPU #0) */
 
-                       cpu_reset_proxyid = cpuid;
+                       cpu_reset_proxyid = mycpu->gd_cpuid;
                        cpustop_restartfunc = cpu_reset_proxy;
                        printf("cpu_reset: Restarting BSP\n");
                        started_cpus = (1<<0);          /* Restart CPU #0 */
index 2cbf746..cba05ab 100644 (file)
@@ -36,7 +36,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/i386/isa/icu_ipl.s,v 1.6 1999/08/28 00:44:42 peter Exp $
- * $DragonFly: src/sys/platform/pc32/icu/icu_ipl.s,v 1.6 2003/07/01 20:31:38 dillon Exp $
+ * $DragonFly: src/sys/platform/pc32/icu/icu_ipl.s,v 1.7 2003/07/04 00:32:28 dillon Exp $
  */
 
        .data
@@ -46,6 +46,8 @@
         * Interrupt mask for ICU interrupts, defaults to all hardware
         * interrupts turned off.
         */
+       .p2align 2                      /* MUST be 32bit aligned */
+
        .globl  imen
 imen:  .long   HWI_MASK
 
index ce013fe..434ded3 100644 (file)
@@ -23,7 +23,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/i386/include/mpapic.h,v 1.14.2.2 2000/09/30 02:49:34 ps Exp $
- * $DragonFly: src/sys/platform/pc32/include/Attic/mpapic.h,v 1.2 2003/06/17 04:28:35 dillon Exp $
+ * $DragonFly: src/sys/platform/pc32/include/Attic/mpapic.h,v 1.3 2003/07/04 00:32:26 dillon Exp $
  */
 
 #ifndef _MACHINE_MPAPIC_H_
@@ -89,7 +89,7 @@ all_procs_ipi(int vector)
 static __inline int
 all_but_self_ipi(int vector)
 {
-       if (mp_ncpus <= 1)
+       if (ncpus <= 1)
                return 0;
        return apic_ipi(APIC_DEST_ALLESELF, vector, APIC_DELMODE_FIXED);
 }
index 48fdde2..5c205c7 100644 (file)
@@ -36,7 +36,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/i386/isa/icu_ipl.s,v 1.6 1999/08/28 00:44:42 peter Exp $
- * $DragonFly: src/sys/platform/pc32/isa/Attic/icu_ipl.s,v 1.6 2003/07/01 20:31:38 dillon Exp $
+ * $DragonFly: src/sys/platform/pc32/isa/Attic/icu_ipl.s,v 1.7 2003/07/04 00:32:28 dillon Exp $
  */
 
        .data
@@ -46,6 +46,8 @@
         * Interrupt mask for ICU interrupts, defaults to all hardware
         * interrupts turned off.
         */
+       .p2align 2                      /* MUST be 32bit aligned */
+
        .globl  imen
 imen:  .long   HWI_MASK
 
index 84bd458..9444244 100644 (file)
@@ -35,7 +35,7 @@
  *
  *     from: @(#)isa.c 7.2 (Berkeley) 5/13/91
  * $FreeBSD: src/sys/i386/isa/intr_machdep.c,v 1.29.2.5 2001/10/14 06:54:27 luigi Exp $
- * $DragonFly: src/sys/platform/pc32/isa/intr_machdep.c,v 1.4 2003/06/30 19:50:31 dillon Exp $
+ * $DragonFly: src/sys/platform/pc32/isa/intr_machdep.c,v 1.5 2003/07/04 00:32:28 dillon Exp $
  */
 /*
  * This file contains an aggregated module marked:
@@ -160,10 +160,6 @@ unpendhand_t *fastunpend[ICU_LEN] = {
        IDTVEC(fastunpend18), IDTVEC(fastunpend19),
        IDTVEC(fastunpend20), IDTVEC(fastunpend21),
        IDTVEC(fastunpend22), IDTVEC(fastunpend23),
-       IDTVEC(fastunpend24), IDTVEC(fastunpend25),
-       IDTVEC(fastunpend26), IDTVEC(fastunpend27),
-       IDTVEC(fastunpend28), IDTVEC(fastunpend29),
-       IDTVEC(fastunpend30), IDTVEC(fastunpend31),
 #endif
 };
 
@@ -518,7 +514,6 @@ icu_setup(int intr, inthand2_t *handler, void *arg, u_int *maskptr, int flags)
               SDT_SYS386IGT, SEL_KPL, GSEL(GCODE_SEL, SEL_KPL));
 #endif /* FAST_HI */
        INTREN(1 << intr);
-       MPINTR_UNLOCK();
        write_eflags(ef);
        return (0);
 }
@@ -552,7 +547,6 @@ icu_unset(intr, handler)
        setidt(ICU_OFFSET + intr, slowintr[intr], SDT_SYS386IGT, SEL_KPL,
            GSEL(GCODE_SEL, SEL_KPL));
 #endif /* FAST_HI */
-       MPINTR_UNLOCK();
        write_eflags(ef);
        return (0);
 }
index 165eb3f..3ef0541 100644 (file)
@@ -35,7 +35,7 @@
  *
  *     from: @(#)genassym.c    5.11 (Berkeley) 5/10/91
  * $FreeBSD: src/sys/i386/i386/genassym.c,v 1.86.2.3 2002/03/03 05:42:49 nyan Exp $
- * $DragonFly: src/sys/platform/vkernel/i386/genassym.c,v 1.19 2003/07/03 17:24:01 dillon Exp $
+ * $DragonFly: src/sys/platform/vkernel/i386/genassym.c,v 1.20 2003/07/04 00:32:24 dillon Exp $
  */
 
 #include "opt_user_ldt.h"
@@ -96,9 +96,6 @@ ASSYM(TD_CPL, offsetof(struct thread, td_mach) + offsetof(struct md_thread, mtd_
 
 ASSYM(TDPRI_CRIT, TDPRI_CRIT);
 
-ASSYM(P_ONCPU, offsetof(struct proc, p_oncpu));
-ASSYM(P_LASTCPU, offsetof(struct proc, p_lastcpu));
-
 ASSYM(SSLEEP, SSLEEP);
 ASSYM(SRUN, SRUN);
 ASSYM(V_TRAP, offsetof(struct vmmeter, v_trap));
@@ -140,10 +137,6 @@ ASSYM(PCB_DR7, offsetof(struct pcb, pcb_dr7));
 ASSYM(PCB_DBREGS, PCB_DBREGS);
 ASSYM(PCB_EXT, offsetof(struct pcb, pcb_ext));
 
-#ifdef SMP
-ASSYM(PCB_MPNEST, offsetof(struct pcb, pcb_mpnest));
-#endif
-
 ASSYM(PCB_SPARE, offsetof(struct pcb, __pcb_spare));
 ASSYM(PCB_FLAGS, offsetof(struct pcb, pcb_flags));
 ASSYM(PCB_SAVEFPU, offsetof(struct pcb, pcb_save));
index e227f8e..8110b01 100644 (file)
@@ -37,7 +37,7 @@
  *
  *     @(#)proc.h      8.15 (Berkeley) 5/19/95
  * $FreeBSD: src/sys/sys/proc.h,v 1.99.2.9 2003/06/06 20:21:32 tegge Exp $
- * $DragonFly: src/sys/sys/proc.h,v 1.20 2003/06/30 23:54:04 dillon Exp $
+ * $DragonFly: src/sys/sys/proc.h,v 1.21 2003/07/04 00:32:32 dillon Exp $
  */
 
 #ifndef _SYS_PROC_H_
@@ -176,8 +176,8 @@ struct      proc {
        struct  vnode *p_textvp;        /* Vnode of executable. */
 
        char    p_lock;                 /* Process lock (prevent swap) count. */
-       u_char  p_oncpu;                /* Which cpu we are on */
-       u_char  p_lastcpu;              /* Last cpu we were on */
+       u_char  p_unused01;             /* Which cpu we are on */
+       u_char  p_unused02;             /* Last cpu we were on */
        char    p_rqindex;              /* Run queue index */
 
        short   p_locks;                /* DEBUG: lockmgr count of held locks */
index 2f9d412..a926663 100644 (file)
@@ -4,7 +4,7 @@
  *     Implements the architecture independant portion of the LWKT 
  *     subsystem.
  * 
- * $DragonFly: src/sys/sys/thread.h,v 1.17 2003/06/30 23:54:04 dillon Exp $
+ * $DragonFly: src/sys/sys/thread.h,v 1.18 2003/07/04 00:32:32 dillon Exp $
  */
 
 #ifndef _SYS_THREAD_H_
@@ -225,6 +225,7 @@ extern void lwkt_block(lwkt_wait_t w, const char *wmesg, int *gen);
 extern void lwkt_signal(lwkt_wait_t w);
 extern void lwkt_gettoken(lwkt_token_t tok);
 extern void lwkt_reltoken(lwkt_token_t tok);
+extern void lwkt_inittoken(lwkt_token_t tok);
 extern int  lwkt_regettoken(lwkt_token_t tok);
 extern void lwkt_rwlock_init(lwkt_rwlock_t lock);
 extern void lwkt_exlock(lwkt_rwlock_t lock, const char *wmesg);