Print this page
4663 apic_cr8pri complicates pcplusmp
@@ -142,11 +142,11 @@
uchar_t apic_ipltopri[MAXIPL + 1]; /* unix ipl to apic pri */
/* The taskpri to be programmed into apic to mask given ipl */
#if defined(__amd64)
-uchar_t apic_cr8pri[MAXIPL + 1]; /* unix ipl to cr8 pri */
+static unsigned char dummy_cpu_pri[MAXIPL + 1];
#endif
/*
* Correlation of the hardware vector to the IPL in use, initialized
* from apic_vectortoipl[] in apic_init(). The final IPLs may not correlate
@@ -299,16 +299,11 @@
for (; j < MAXIPL + 1; j++)
/* fill up any empty ipltopri slots */
apic_ipltopri[j] = (i << APIC_IPL_SHIFT) + APIC_BASE_VECT;
apic_init_common();
#if defined(__amd64)
- /*
- * Make cpu-specific interrupt info point to cr8pri vector
- */
- for (i = 0; i <= MAXIPL; i++)
- apic_cr8pri[i] = apic_ipltopri[i] >> APIC_IPL_SHIFT;
- CPU->cpu_pri_data = apic_cr8pri;
+ CPU->cpu_pri_data = dummy_cpu_pri;
#else
if (cpuid_have_cr8access(CPU))
apic_have_32bit_cr8 = 1;
#endif /* __amd64 */
}
@@ -696,11 +691,11 @@
apic_intr_exit(int prev_ipl, int irq)
{
apic_cpus_info_t *cpu_infop;
#if defined(__amd64)
- setcr8((ulong_t)apic_cr8pri[prev_ipl]);
+ setcr8((ulong_t)(apic_ipltopri[prev_ipl] >> APIC_IPL_SHIFT));
#else
if (apic_have_32bit_cr8)
setcr8((ulong_t)(apic_ipltopri[prev_ipl] >> APIC_IPL_SHIFT));
else
apicadr[APIC_TASK_REG] = apic_ipltopri[prev_ipl];
@@ -738,11 +733,11 @@
*/
static void
apic_setspl(int ipl)
{
#if defined(__amd64)
- setcr8((ulong_t)apic_cr8pri[ipl]);
+ setcr8((ulong_t)(apic_ipltopri[ipl] >> APIC_IPL_SHIFT));
#else
if (apic_have_32bit_cr8)
setcr8((ulong_t)(apic_ipltopri[ipl] >> APIC_IPL_SHIFT));
else
apicadr[APIC_TASK_REG] = apic_ipltopri[ipl];