x86 core_id() uses the LAPIC again
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 12 Aug 2009 18:43:20 +0000 (11:43 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Wed, 12 Aug 2009 19:53:24 +0000 (12:53 -0700)
Was using cpuid, due to a bug in KVM.  If you're using a bad version of
kvm (85 < x < 89), locally change this to lapic_get_default_id().

kern/arch/i386/arch.h

index 1182bc4..cfa69f7 100644 (file)
@@ -134,17 +134,10 @@ irq_is_enabled(void)
        return read_eflags() & FL_IF;
 }
 
-/*
- * Returns the core id.  Unfortunately, this is a serializing instruction, and
- * may not be the best way either.  This is ripped from lapic_get_default_id().
- */
 static __inline uint32_t
 core_id(void)
 {
-       uint32_t ebx;
-       cpuid(1, 0, &ebx, 0, 0);
-       // p6 family only uses 4 bits here, and 0xf is reserved for the IOAPIC
-       return (ebx & 0xFF000000) >> 24;
+       return lapic_get_id();
 }
 
 static __inline void