Pull IMCR setting out of mptable_pass2()
authorSepherosa Ziehau <sephe@dragonflybsd.org>
Sun, 21 Jun 2009 04:37:23 +0000 (12:37 +0800)
committerSepherosa Ziehau <sephe@dragonflybsd.org>
Mon, 22 Jun 2009 11:39:54 +0000 (19:39 +0800)
sys/platform/pc32/i386/mp_machdep.c

index b035e5e..206200e 100644 (file)
@@ -313,6 +313,7 @@ static int  mptable_map(struct mptable_pos *, vm_paddr_t);
 static void    mptable_unmap(struct mptable_pos *);
 static void    mptable_lapic_enumerate(struct mptable_pos *);
 static void    mptable_lapic_default(void);
+static void    mptable_imcr(struct mptable_pos *);
 
 #ifdef APIC_IO
 static void    setup_apic_irq_mapping(void);
@@ -652,6 +653,8 @@ mp_enable(u_int boot_addr)
 
                mptable_lapic_enumerate(&mpt);
 
+               mptable_imcr(&mpt);
+
                /*
                 * We can safely map physical memory into SMPpt after
                 * mptable_pass1() completes.
@@ -982,9 +985,6 @@ mptable_pass2(struct mptable_pos *mpt)
        }
 #endif
 
-       /* record whether PIC or virtual-wire mode */
-       machintr_setvar_simple(MACHINTR_VAR_IMCR_PRESENT, fps->mpfb2 & 0x80);
-
        /* check for use of 'default' configuration */
        if (fps->mpfb1 != 0) {
                mptable_default(fps->mpfb1);
@@ -2933,6 +2933,14 @@ mptable_lapic_enumerate(struct mptable_pos *mpt)
 }
 
 static void
+mptable_imcr(struct mptable_pos *mpt)
+{
+       /* record whether PIC or virtual-wire mode */
+       machintr_setvar_simple(MACHINTR_VAR_IMCR_PRESENT,
+                              mpt->mp_fps->mpfb2 & 0x80);
+}
+
+static void
 lapic_init(vm_offset_t lapic_addr)
 {
        /* Local apic is mapped on last page */