mpparse.c (a976c2951d8f376112361830aa7762beff83a205) mpparse.c (f7750a79568788473c5e8092ee58a52248f34329)
1/*
2 * Intel Multiprocessor Specification 1.1 and 1.4
3 * compliant MP-table parsing routines.
4 *
5 * (c) 1995 Alan Cox, Building #3 <alan@lxorguk.ukuu.org.uk>
6 * (c) 1998, 1999, 2000, 2009 Ingo Molnar <mingo@redhat.com>
7 * (c) 2008 Alexey Starikovskiy <astarikovskiy@suse.de>
8 */

--- 422 unchanged lines hidden (view full) ---

431
432static struct mpf_intel *mpf_found;
433
434static unsigned long __init get_mpc_size(unsigned long physptr)
435{
436 struct mpc_table *mpc;
437 unsigned long size;
438
1/*
2 * Intel Multiprocessor Specification 1.1 and 1.4
3 * compliant MP-table parsing routines.
4 *
5 * (c) 1995 Alan Cox, Building #3 <alan@lxorguk.ukuu.org.uk>
6 * (c) 1998, 1999, 2000, 2009 Ingo Molnar <mingo@redhat.com>
7 * (c) 2008 Alexey Starikovskiy <astarikovskiy@suse.de>
8 */

--- 422 unchanged lines hidden (view full) ---

431
432static struct mpf_intel *mpf_found;
433
434static unsigned long __init get_mpc_size(unsigned long physptr)
435{
436 struct mpc_table *mpc;
437 unsigned long size;
438
439 mpc = early_ioremap(physptr, PAGE_SIZE);
439 mpc = early_memremap(physptr, PAGE_SIZE);
440 size = mpc->length;
440 size = mpc->length;
441 early_iounmap(mpc, PAGE_SIZE);
441 early_memunmap(mpc, PAGE_SIZE);
442 apic_printk(APIC_VERBOSE, " mpc: %lx-%lx\n", physptr, physptr + size);
443
444 return size;
445}
446
447static int __init check_physptr(struct mpf_intel *mpf, unsigned int early)
448{
449 struct mpc_table *mpc;
450 unsigned long size;
451
452 size = get_mpc_size(mpf->physptr);
442 apic_printk(APIC_VERBOSE, " mpc: %lx-%lx\n", physptr, physptr + size);
443
444 return size;
445}
446
447static int __init check_physptr(struct mpf_intel *mpf, unsigned int early)
448{
449 struct mpc_table *mpc;
450 unsigned long size;
451
452 size = get_mpc_size(mpf->physptr);
453 mpc = early_ioremap(mpf->physptr, size);
453 mpc = early_memremap(mpf->physptr, size);
454 /*
455 * Read the physical hardware table. Anything here will
456 * override the defaults.
457 */
458 if (!smp_read_mpc(mpc, early)) {
459#ifdef CONFIG_X86_LOCAL_APIC
460 smp_found_config = 0;
461#endif
462 pr_err("BIOS bug, MP table errors detected!...\n");
463 pr_cont("... disabling SMP support. (tell your hw vendor)\n");
454 /*
455 * Read the physical hardware table. Anything here will
456 * override the defaults.
457 */
458 if (!smp_read_mpc(mpc, early)) {
459#ifdef CONFIG_X86_LOCAL_APIC
460 smp_found_config = 0;
461#endif
462 pr_err("BIOS bug, MP table errors detected!...\n");
463 pr_cont("... disabling SMP support. (tell your hw vendor)\n");
464 early_iounmap(mpc, size);
464 early_memunmap(mpc, size);
465 return -1;
466 }
465 return -1;
466 }
467 early_iounmap(mpc, size);
467 early_memunmap(mpc, size);
468
469 if (early)
470 return -1;
471
472#ifdef CONFIG_X86_IO_APIC
473 /*
474 * If there are no explicit MP IRQ entries, then we are
475 * broken. We set up most of the low 16 IO-APIC pins to

--- 440 unchanged lines hidden ---
468
469 if (early)
470 return -1;
471
472#ifdef CONFIG_X86_IO_APIC
473 /*
474 * If there are no explicit MP IRQ entries, then we are
475 * broken. We set up most of the low 16 IO-APIC pins to

--- 440 unchanged lines hidden ---