|
@@ -17,8 +17,7 @@ static int mpeisabus = -1;
|
|
|
extern int i8259elcr; /* mask of level-triggered interrupts */
|
|
|
static Apic mpapic[MaxAPICNO+1];
|
|
|
static int machno2apicno[MaxAPICNO+1]; /* inverse map: machno -> APIC ID */
|
|
|
-static Lock mprdthilock;
|
|
|
-static int mprdthi;
|
|
|
+static u32int mprdthi = ~0;
|
|
|
static Ref mpvnoref; /* unique vector assignment */
|
|
|
static int mpmachno = 1;
|
|
|
|
|
@@ -49,7 +48,7 @@ mkprocessor(PCMPprocessor* p)
|
|
|
{
|
|
|
Apic *apic;
|
|
|
|
|
|
- if(!(p->flags & PcmpEN) || p->apicno > MaxAPICNO)
|
|
|
+ if(!(p->flags & PcmpEN)/* || p->apicno > MaxAPICNO*/)
|
|
|
return 0;
|
|
|
|
|
|
apic = &mpapic[p->apicno];
|
|
@@ -140,7 +139,7 @@ mkioapic(PCMPioapic* p)
|
|
|
Apic *apic;
|
|
|
void *va;
|
|
|
|
|
|
- if(!(p->flags & PcmpEN) || p->apicno > MaxAPICNO)
|
|
|
+ if(!(p->flags & PcmpEN)/* || p->apicno > MaxAPICNO*/)
|
|
|
return 0;
|
|
|
|
|
|
/*
|
|
@@ -386,9 +385,7 @@ squidboy(Apic* apic)
|
|
|
cpuidprint();
|
|
|
checkmtrr();
|
|
|
|
|
|
- lock(&mprdthilock);
|
|
|
- mprdthi |= (1<<apic->apicno)<<24;
|
|
|
- unlock(&mprdthilock);
|
|
|
+ apic->online = 1;
|
|
|
|
|
|
lapicinit(apic);
|
|
|
lapiconline();
|
|
@@ -475,12 +472,8 @@ mpstartap(Apic* apic)
|
|
|
nvramwrite(0x0F, 0x0A);
|
|
|
lapicstartap(apic, PADDR(APBOOTSTRAP));
|
|
|
for(i = 0; i < 1000; i++){
|
|
|
- lock(&mprdthilock);
|
|
|
- if(mprdthi & ((1<<apic->apicno)<<24)){
|
|
|
- unlock(&mprdthilock);
|
|
|
+ if(apic->online)
|
|
|
break;
|
|
|
- }
|
|
|
- unlock(&mprdthilock);
|
|
|
delay(10);
|
|
|
}
|
|
|
nvramwrite(0x0F, 0x00);
|
|
@@ -577,9 +570,6 @@ mpinit(void)
|
|
|
return;
|
|
|
|
|
|
lapicinit(bpapic);
|
|
|
- lock(&mprdthilock);
|
|
|
- mprdthi |= (1<<bpapic->apicno)<<24;
|
|
|
- unlock(&mprdthilock);
|
|
|
|
|
|
/*
|
|
|
* These interrupts are local to the processor
|
|
@@ -743,9 +733,9 @@ mpintrenablex(Vctl* v, int tbdf)
|
|
|
lo |= ApicLOGICAL;
|
|
|
|
|
|
if((apic->flags & PcmpEN) && apic->type == PcmpIOAPIC){
|
|
|
- lock(&mprdthilock);
|
|
|
+ //lock(&mprdthilock);
|
|
|
ioapicrdtw(apic, aintr->intr->intin, mprdthi, lo);
|
|
|
- unlock(&mprdthilock);
|
|
|
+ //unlock(&mprdthilock);
|
|
|
}
|
|
|
//else
|
|
|
// print("lo not enabled 0x%uX %d\n",
|