Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 145639
b: refs/heads/master
c: 4797f6b
h: refs/heads/master
i:
  145637: ac5f75e
  145635: fe26ed1
  145631: 7565880
v: v3
  • Loading branch information
Yinghai Lu authored and Ingo Molnar committed May 12, 2009
1 parent 8f4cd0e commit 35c5563
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 26 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 6cda3eb62ef42aa5acd649bf99c8db544e0f4051
refs/heads/master: 4797f6b021a3fa399942245d07a1feb30df81bb8
2 changes: 1 addition & 1 deletion trunk/arch/x86/include/asm/smp.h
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ extern int safe_smp_processor_id(void);
static inline int logical_smp_processor_id(void)
{
/* we don't want to mark this access volatile - bad code generation */
return GET_APIC_LOGICAL_ID(*(u32 *)(APIC_BASE + APIC_LDR));
return GET_APIC_LOGICAL_ID(apic_read(APIC_LDR));
}

#endif
Expand Down
46 changes: 22 additions & 24 deletions trunk/arch/x86/kernel/apic/apic.c
Original file line number Diff line number Diff line change
Expand Up @@ -242,17 +242,24 @@ static int modern_apic(void)
* bare function to substitute write operation
* and it's _that_ fast :)
*/
void native_apic_write_dummy(u32 reg, u32 v)
static void native_apic_write_dummy(u32 reg, u32 v)
{
WARN_ON_ONCE((cpu_has_apic || !disable_apic));
}

static u32 native_apic_read_dummy(u32 reg)
{
WARN_ON_ONCE((cpu_has_apic || !disable_apic));
return 0;
}

/*
* right after this call apic->write doesn't do anything
* right after this call apic->write/read doesn't do anything
* note that there is no restore operation it works one way
*/
void apic_disable(void)
{
apic->read = native_apic_read_dummy;
apic->write = native_apic_write_dummy;
}

Expand Down Expand Up @@ -1576,32 +1583,23 @@ void __init init_apic_mappings(void)
return;
}

/*
* If no local APIC can be found then set up a fake all
* zeroes page to simulate the local APIC and another
* one for the IO-APIC.
*/
/* If no local APIC can be found return early */
if (!smp_found_config && detect_init_APIC()) {
apic_phys = (unsigned long) alloc_bootmem_pages(PAGE_SIZE);
apic_phys = __pa(apic_phys);
} else
/* lets NOP'ify apic operations */
pr_info("APIC: disable apic facility\n");
apic_disable();
} else {
apic_phys = mp_lapic_addr;

/*
* acpi lapic path already maps that address in
* acpi_register_lapic_address()
*/
if (!acpi_lapic)
set_fixmap_nocache(FIX_APIC_BASE, apic_phys);

apic_printk(APIC_VERBOSE, "mapped APIC to %08lx (%08lx)\n",
APIC_BASE, apic_phys);
/*
* acpi lapic path already maps that address in
* acpi_register_lapic_address()
*/
if (!acpi_lapic)
set_fixmap_nocache(FIX_APIC_BASE, apic_phys);

/* lets check if we may NOP'ify apic operations */
if (!cpu_has_apic) {
pr_info("APIC: disable apic facility\n");
apic_disable();
return;
apic_printk(APIC_VERBOSE, "mapped APIC to %08lx (%08lx)\n",
APIC_BASE, apic_phys);
}

/*
Expand Down
5 changes: 5 additions & 0 deletions trunk/arch/x86/kernel/apic/io_apic.c
Original file line number Diff line number Diff line change
Expand Up @@ -1878,6 +1878,11 @@ __apicdebuginit(void) print_PIC(void)
__apicdebuginit(int) print_all_ICs(void)
{
print_PIC();

/* don't print out if apic is not there */
if (!cpu_has_apic || disable_apic)
return 0;

print_all_local_APICs();
print_IO_APIC();

Expand Down

0 comments on commit 35c5563

Please sign in to comment.