diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/alpha/kernel/smp.c | 3 | ||||
-rw-r--r-- | arch/arm/kernel/smp.c | 1 | ||||
-rw-r--r-- | arch/cris/arch-v32/kernel/smp.c | 1 | ||||
-rw-r--r-- | arch/ia64/kernel/smpboot.c | 1 | ||||
-rw-r--r-- | arch/m32r/kernel/smpboot.c | 2 | ||||
-rw-r--r-- | arch/mips/Kconfig | 27 | ||||
-rw-r--r-- | arch/mips/kernel/head.S | 1 | ||||
-rw-r--r-- | arch/mips/kernel/smp.c | 2 | ||||
-rw-r--r-- | arch/mips/sibyte/swarm/Makefile | 3 | ||||
-rw-r--r-- | arch/mips/sibyte/swarm/platform.c | 81 | ||||
-rw-r--r-- | arch/powerpc/kernel/smp.c | 1 | ||||
-rw-r--r-- | arch/s390/kernel/smp.c | 2 | ||||
-rw-r--r-- | arch/sh/kernel/smp.c | 2 | ||||
-rw-r--r-- | arch/sparc/kernel/sun4d_smp.c | 1 | ||||
-rw-r--r-- | arch/sparc/kernel/sun4m_smp.c | 2 | ||||
-rw-r--r-- | arch/um/kernel/smp.c | 1 | ||||
-rw-r--r-- | arch/x86/kernel/acpi/boot.c | 16 | ||||
-rw-r--r-- | arch/x86/kernel/kgdb.c | 7 | ||||
-rw-r--r-- | arch/x86/kernel/pci-gart_64.c | 20 | ||||
-rw-r--r-- | arch/x86/kernel/smpboot.c | 1 | ||||
-rw-r--r-- | arch/x86/mach-voyager/voyager_smp.c | 2 |
21 files changed, 150 insertions, 27 deletions
diff --git a/arch/alpha/kernel/smp.c b/arch/alpha/kernel/smp.c index 83df541650fc..06b6fdab639f 100644 --- a/arch/alpha/kernel/smp.c +++ b/arch/alpha/kernel/smp.c | |||
@@ -149,6 +149,9 @@ smp_callin(void) | |||
149 | atomic_inc(&init_mm.mm_count); | 149 | atomic_inc(&init_mm.mm_count); |
150 | current->active_mm = &init_mm; | 150 | current->active_mm = &init_mm; |
151 | 151 | ||
152 | /* inform the notifiers about the new cpu */ | ||
153 | notify_cpu_starting(cpuid); | ||
154 | |||
152 | /* Must have completely accurate bogos. */ | 155 | /* Must have completely accurate bogos. */ |
153 | local_irq_enable(); | 156 | local_irq_enable(); |
154 | 157 | ||
diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c index e9842f6767f9..e42a749a56dd 100644 --- a/arch/arm/kernel/smp.c +++ b/arch/arm/kernel/smp.c | |||
@@ -277,6 +277,7 @@ asmlinkage void __cpuinit secondary_start_kernel(void) | |||
277 | /* | 277 | /* |
278 | * Enable local interrupts. | 278 | * Enable local interrupts. |
279 | */ | 279 | */ |
280 | notify_cpu_starting(cpu); | ||
280 | local_irq_enable(); | 281 | local_irq_enable(); |
281 | local_fiq_enable(); | 282 | local_fiq_enable(); |
282 | 283 | ||
diff --git a/arch/cris/arch-v32/kernel/smp.c b/arch/cris/arch-v32/kernel/smp.c index 952a24b2f5a9..52e16c6436f9 100644 --- a/arch/cris/arch-v32/kernel/smp.c +++ b/arch/cris/arch-v32/kernel/smp.c | |||
@@ -178,6 +178,7 @@ void __init smp_callin(void) | |||
178 | unmask_irq(IPI_INTR_VECT); | 178 | unmask_irq(IPI_INTR_VECT); |
179 | unmask_irq(TIMER0_INTR_VECT); | 179 | unmask_irq(TIMER0_INTR_VECT); |
180 | preempt_disable(); | 180 | preempt_disable(); |
181 | notify_cpu_starting(cpu); | ||
181 | local_irq_enable(); | 182 | local_irq_enable(); |
182 | 183 | ||
183 | cpu_set(cpu, cpu_online_map); | 184 | cpu_set(cpu, cpu_online_map); |
diff --git a/arch/ia64/kernel/smpboot.c b/arch/ia64/kernel/smpboot.c index d8f05e504fbf..1dcbb85fc4ee 100644 --- a/arch/ia64/kernel/smpboot.c +++ b/arch/ia64/kernel/smpboot.c | |||
@@ -401,6 +401,7 @@ smp_callin (void) | |||
401 | spin_lock(&vector_lock); | 401 | spin_lock(&vector_lock); |
402 | /* Setup the per cpu irq handling data structures */ | 402 | /* Setup the per cpu irq handling data structures */ |
403 | __setup_vector_irq(cpuid); | 403 | __setup_vector_irq(cpuid); |
404 | notify_cpu_starting(cpuid); | ||
404 | cpu_set(cpuid, cpu_online_map); | 405 | cpu_set(cpuid, cpu_online_map); |
405 | per_cpu(cpu_state, cpuid) = CPU_ONLINE; | 406 | per_cpu(cpu_state, cpuid) = CPU_ONLINE; |
406 | spin_unlock(&vector_lock); | 407 | spin_unlock(&vector_lock); |
diff --git a/arch/m32r/kernel/smpboot.c b/arch/m32r/kernel/smpboot.c index 2c03ac1d005f..fc2994811f15 100644 --- a/arch/m32r/kernel/smpboot.c +++ b/arch/m32r/kernel/smpboot.c | |||
@@ -498,6 +498,8 @@ static void __init smp_online(void) | |||
498 | { | 498 | { |
499 | int cpu_id = smp_processor_id(); | 499 | int cpu_id = smp_processor_id(); |
500 | 500 | ||
501 | notify_cpu_starting(cpu_id); | ||
502 | |||
501 | local_irq_enable(); | 503 | local_irq_enable(); |
502 | 504 | ||
503 | /* Get our bogomips. */ | 505 | /* Get our bogomips. */ |
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index c930b8ceb418..1e06d233fa83 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig | |||
@@ -211,6 +211,7 @@ config MIPS_MALTA | |||
211 | select SYS_SUPPORTS_64BIT_KERNEL | 211 | select SYS_SUPPORTS_64BIT_KERNEL |
212 | select SYS_SUPPORTS_BIG_ENDIAN | 212 | select SYS_SUPPORTS_BIG_ENDIAN |
213 | select SYS_SUPPORTS_LITTLE_ENDIAN | 213 | select SYS_SUPPORTS_LITTLE_ENDIAN |
214 | select SYS_SUPPORTS_MIPS_CMP if BROKEN # because SYNC_R4K is broken | ||
214 | select SYS_SUPPORTS_MULTITHREADING | 215 | select SYS_SUPPORTS_MULTITHREADING |
215 | select SYS_SUPPORTS_SMARTMIPS | 216 | select SYS_SUPPORTS_SMARTMIPS |
216 | help | 217 | help |
@@ -1499,6 +1500,18 @@ config MIPS_APSP_KSPD | |||
1499 | "exit" syscall notifying other kernel modules the SP program is | 1500 | "exit" syscall notifying other kernel modules the SP program is |
1500 | exiting. You probably want to say yes here. | 1501 | exiting. You probably want to say yes here. |
1501 | 1502 | ||
1503 | config MIPS_CMP | ||
1504 | bool "MIPS CMP framework support" | ||
1505 | depends on SYS_SUPPORTS_MIPS_CMP | ||
1506 | select SYNC_R4K if BROKEN | ||
1507 | select SYS_SUPPORTS_SMP | ||
1508 | select SYS_SUPPORTS_SCHED_SMT if SMP | ||
1509 | select WEAK_ORDERING | ||
1510 | default n | ||
1511 | help | ||
1512 | This is a placeholder option for the GCMP work. It will need to | ||
1513 | be handled differently... | ||
1514 | |||
1502 | config SB1_PASS_1_WORKAROUNDS | 1515 | config SB1_PASS_1_WORKAROUNDS |
1503 | bool | 1516 | bool |
1504 | depends on CPU_SB1_PASS_1 | 1517 | depends on CPU_SB1_PASS_1 |
@@ -1675,6 +1688,9 @@ config SMP | |||
1675 | config SMP_UP | 1688 | config SMP_UP |
1676 | bool | 1689 | bool |
1677 | 1690 | ||
1691 | config SYS_SUPPORTS_MIPS_CMP | ||
1692 | bool | ||
1693 | |||
1678 | config SYS_SUPPORTS_SMP | 1694 | config SYS_SUPPORTS_SMP |
1679 | bool | 1695 | bool |
1680 | 1696 | ||
@@ -1722,17 +1738,6 @@ config NR_CPUS | |||
1722 | performance should round up your number of processors to the next | 1738 | performance should round up your number of processors to the next |
1723 | power of two. | 1739 | power of two. |
1724 | 1740 | ||
1725 | config MIPS_CMP | ||
1726 | bool "MIPS CMP framework support" | ||
1727 | depends on SMP | ||
1728 | select SYNC_R4K | ||
1729 | select SYS_SUPPORTS_SCHED_SMT | ||
1730 | select WEAK_ORDERING | ||
1731 | default n | ||
1732 | help | ||
1733 | This is a placeholder option for the GCMP work. It will need to | ||
1734 | be handled differently... | ||
1735 | |||
1736 | source "kernel/time/Kconfig" | 1741 | source "kernel/time/Kconfig" |
1737 | 1742 | ||
1738 | # | 1743 | # |
diff --git a/arch/mips/kernel/head.S b/arch/mips/kernel/head.S index 361364501d34..492a0a8d70fb 100644 --- a/arch/mips/kernel/head.S +++ b/arch/mips/kernel/head.S | |||
@@ -22,6 +22,7 @@ | |||
22 | #include <asm/irqflags.h> | 22 | #include <asm/irqflags.h> |
23 | #include <asm/regdef.h> | 23 | #include <asm/regdef.h> |
24 | #include <asm/page.h> | 24 | #include <asm/page.h> |
25 | #include <asm/pgtable-bits.h> | ||
25 | #include <asm/mipsregs.h> | 26 | #include <asm/mipsregs.h> |
26 | #include <asm/stackframe.h> | 27 | #include <asm/stackframe.h> |
27 | 28 | ||
diff --git a/arch/mips/kernel/smp.c b/arch/mips/kernel/smp.c index 4410f172b8ab..7b59cfb7e602 100644 --- a/arch/mips/kernel/smp.c +++ b/arch/mips/kernel/smp.c | |||
@@ -121,6 +121,8 @@ asmlinkage __cpuinit void start_secondary(void) | |||
121 | cpu = smp_processor_id(); | 121 | cpu = smp_processor_id(); |
122 | cpu_data[cpu].udelay_val = loops_per_jiffy; | 122 | cpu_data[cpu].udelay_val = loops_per_jiffy; |
123 | 123 | ||
124 | notify_cpu_starting(cpu); | ||
125 | |||
124 | mp_ops->smp_finish(); | 126 | mp_ops->smp_finish(); |
125 | set_cpu_sibling_map(cpu); | 127 | set_cpu_sibling_map(cpu); |
126 | 128 | ||
diff --git a/arch/mips/sibyte/swarm/Makefile b/arch/mips/sibyte/swarm/Makefile index f18ba9201bbc..7b45f199d92a 100644 --- a/arch/mips/sibyte/swarm/Makefile +++ b/arch/mips/sibyte/swarm/Makefile | |||
@@ -1,3 +1,4 @@ | |||
1 | obj-y := setup.o rtc_xicor1241.o rtc_m41t81.o | 1 | obj-y := platform.o setup.o rtc_xicor1241.o \ |
2 | rtc_m41t81.o | ||
2 | 3 | ||
3 | obj-$(CONFIG_I2C_BOARDINFO) += swarm-i2c.o | 4 | obj-$(CONFIG_I2C_BOARDINFO) += swarm-i2c.o |
diff --git a/arch/mips/sibyte/swarm/platform.c b/arch/mips/sibyte/swarm/platform.c new file mode 100644 index 000000000000..dd0e5b9b64e8 --- /dev/null +++ b/arch/mips/sibyte/swarm/platform.c | |||
@@ -0,0 +1,81 @@ | |||
1 | #include <linux/err.h> | ||
2 | #include <linux/kernel.h> | ||
3 | #include <linux/init.h> | ||
4 | #include <linux/io.h> | ||
5 | #include <linux/platform_device.h> | ||
6 | #include <linux/ata_platform.h> | ||
7 | |||
8 | #include <asm/sibyte/board.h> | ||
9 | #include <asm/sibyte/sb1250_genbus.h> | ||
10 | #include <asm/sibyte/sb1250_regs.h> | ||
11 | |||
12 | #define DRV_NAME "pata-swarm" | ||
13 | |||
14 | #define SWARM_IDE_SHIFT 5 | ||
15 | #define SWARM_IDE_BASE 0x1f0 | ||
16 | #define SWARM_IDE_CTRL 0x3f6 | ||
17 | |||
18 | static struct resource swarm_pata_resource[] = { | ||
19 | { | ||
20 | .name = "Swarm GenBus IDE", | ||
21 | .flags = IORESOURCE_MEM, | ||
22 | }, { | ||
23 | .name = "Swarm GenBus IDE", | ||
24 | .flags = IORESOURCE_MEM, | ||
25 | }, { | ||
26 | .name = "Swarm GenBus IDE", | ||
27 | .flags = IORESOURCE_IRQ, | ||
28 | .start = K_INT_GB_IDE, | ||
29 | .end = K_INT_GB_IDE, | ||
30 | }, | ||
31 | }; | ||
32 | |||
33 | static struct pata_platform_info pata_platform_data = { | ||
34 | .ioport_shift = SWARM_IDE_SHIFT, | ||
35 | }; | ||
36 | |||
37 | static struct platform_device swarm_pata_device = { | ||
38 | .name = "pata_platform", | ||
39 | .id = -1, | ||
40 | .resource = swarm_pata_resource, | ||
41 | .num_resources = ARRAY_SIZE(swarm_pata_resource), | ||
42 | .dev = { | ||
43 | .platform_data = &pata_platform_data, | ||
44 | .coherent_dma_mask = ~0, /* grumble */ | ||
45 | }, | ||
46 | }; | ||
47 | |||
48 | static int __init swarm_pata_init(void) | ||
49 | { | ||
50 | u8 __iomem *base; | ||
51 | phys_t offset, size; | ||
52 | struct resource *r; | ||
53 | |||
54 | if (!SIBYTE_HAVE_IDE) | ||
55 | return -ENODEV; | ||
56 | |||
57 | base = ioremap(A_IO_EXT_BASE, 0x800); | ||
58 | offset = __raw_readq(base + R_IO_EXT_REG(R_IO_EXT_START_ADDR, IDE_CS)); | ||
59 | size = __raw_readq(base + R_IO_EXT_REG(R_IO_EXT_MULT_SIZE, IDE_CS)); | ||
60 | iounmap(base); | ||
61 | |||
62 | offset = G_IO_START_ADDR(offset) << S_IO_ADDRBASE; | ||
63 | size = (G_IO_MULT_SIZE(size) + 1) << S_IO_REGSIZE; | ||
64 | if (offset < A_PHYS_GENBUS || offset >= A_PHYS_GENBUS_END) { | ||
65 | pr_info(DRV_NAME ": PATA interface at GenBus disabled\n"); | ||
66 | |||
67 | return -EBUSY; | ||
68 | } | ||
69 | |||
70 | pr_info(DRV_NAME ": PATA interface at GenBus slot %i\n", IDE_CS); | ||
71 | |||
72 | r = swarm_pata_resource; | ||
73 | r[0].start = offset + (SWARM_IDE_BASE << SWARM_IDE_SHIFT); | ||
74 | r[0].end = offset + ((SWARM_IDE_BASE + 8) << SWARM_IDE_SHIFT) - 1; | ||
75 | r[1].start = offset + (SWARM_IDE_CTRL << SWARM_IDE_SHIFT); | ||
76 | r[1].end = offset + ((SWARM_IDE_CTRL + 1) << SWARM_IDE_SHIFT) - 1; | ||
77 | |||
78 | return platform_device_register(&swarm_pata_device); | ||
79 | } | ||
80 | |||
81 | device_initcall(swarm_pata_init); | ||
diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c index 5337ca7bb649..c27b10a1bd79 100644 --- a/arch/powerpc/kernel/smp.c +++ b/arch/powerpc/kernel/smp.c | |||
@@ -453,6 +453,7 @@ int __devinit start_secondary(void *unused) | |||
453 | secondary_cpu_time_init(); | 453 | secondary_cpu_time_init(); |
454 | 454 | ||
455 | ipi_call_lock(); | 455 | ipi_call_lock(); |
456 | notify_cpu_starting(cpu); | ||
456 | cpu_set(cpu, cpu_online_map); | 457 | cpu_set(cpu, cpu_online_map); |
457 | /* Update sibling maps */ | 458 | /* Update sibling maps */ |
458 | base = cpu_first_thread_in_core(cpu); | 459 | base = cpu_first_thread_in_core(cpu); |
diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c index 00b9b4dec5eb..9e8b1f9b8f4d 100644 --- a/arch/s390/kernel/smp.c +++ b/arch/s390/kernel/smp.c | |||
@@ -585,6 +585,8 @@ int __cpuinit start_secondary(void *cpuvoid) | |||
585 | /* Enable pfault pseudo page faults on this cpu. */ | 585 | /* Enable pfault pseudo page faults on this cpu. */ |
586 | pfault_init(); | 586 | pfault_init(); |
587 | 587 | ||
588 | /* call cpu notifiers */ | ||
589 | notify_cpu_starting(smp_processor_id()); | ||
588 | /* Mark this cpu as online */ | 590 | /* Mark this cpu as online */ |
589 | spin_lock(&call_lock); | 591 | spin_lock(&call_lock); |
590 | cpu_set(smp_processor_id(), cpu_online_map); | 592 | cpu_set(smp_processor_id(), cpu_online_map); |
diff --git a/arch/sh/kernel/smp.c b/arch/sh/kernel/smp.c index 60c50841143e..001778f9adaf 100644 --- a/arch/sh/kernel/smp.c +++ b/arch/sh/kernel/smp.c | |||
@@ -82,6 +82,8 @@ asmlinkage void __cpuinit start_secondary(void) | |||
82 | 82 | ||
83 | preempt_disable(); | 83 | preempt_disable(); |
84 | 84 | ||
85 | notify_cpu_starting(smp_processor_id()); | ||
86 | |||
85 | local_irq_enable(); | 87 | local_irq_enable(); |
86 | 88 | ||
87 | calibrate_delay(); | 89 | calibrate_delay(); |
diff --git a/arch/sparc/kernel/sun4d_smp.c b/arch/sparc/kernel/sun4d_smp.c index 69596402a500..446767e8f569 100644 --- a/arch/sparc/kernel/sun4d_smp.c +++ b/arch/sparc/kernel/sun4d_smp.c | |||
@@ -88,6 +88,7 @@ void __init smp4d_callin(void) | |||
88 | local_flush_cache_all(); | 88 | local_flush_cache_all(); |
89 | local_flush_tlb_all(); | 89 | local_flush_tlb_all(); |
90 | 90 | ||
91 | notify_cpu_starting(cpuid); | ||
91 | /* | 92 | /* |
92 | * Unblock the master CPU _only_ when the scheduler state | 93 | * Unblock the master CPU _only_ when the scheduler state |
93 | * of all secondary CPUs will be up-to-date, so after | 94 | * of all secondary CPUs will be up-to-date, so after |
diff --git a/arch/sparc/kernel/sun4m_smp.c b/arch/sparc/kernel/sun4m_smp.c index a14a76ac7f36..9964890dc1db 100644 --- a/arch/sparc/kernel/sun4m_smp.c +++ b/arch/sparc/kernel/sun4m_smp.c | |||
@@ -71,6 +71,8 @@ void __cpuinit smp4m_callin(void) | |||
71 | local_flush_cache_all(); | 71 | local_flush_cache_all(); |
72 | local_flush_tlb_all(); | 72 | local_flush_tlb_all(); |
73 | 73 | ||
74 | notify_cpu_starting(cpuid); | ||
75 | |||
74 | /* Get our local ticker going. */ | 76 | /* Get our local ticker going. */ |
75 | smp_setup_percpu_timer(); | 77 | smp_setup_percpu_timer(); |
76 | 78 | ||
diff --git a/arch/um/kernel/smp.c b/arch/um/kernel/smp.c index be2d50c3aa95..045772142844 100644 --- a/arch/um/kernel/smp.c +++ b/arch/um/kernel/smp.c | |||
@@ -85,6 +85,7 @@ static int idle_proc(void *cpup) | |||
85 | while (!cpu_isset(cpu, smp_commenced_mask)) | 85 | while (!cpu_isset(cpu, smp_commenced_mask)) |
86 | cpu_relax(); | 86 | cpu_relax(); |
87 | 87 | ||
88 | notify_cpu_starting(cpu); | ||
88 | cpu_set(cpu, cpu_online_map); | 89 | cpu_set(cpu, cpu_online_map); |
89 | default_idle(); | 90 | default_idle(); |
90 | return 0; | 91 | return 0; |
diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c index bfd10fd211cd..c102af85df9c 100644 --- a/arch/x86/kernel/acpi/boot.c +++ b/arch/x86/kernel/acpi/boot.c | |||
@@ -1605,6 +1605,14 @@ static struct dmi_system_id __initdata acpi_dmi_table[] = { | |||
1605 | */ | 1605 | */ |
1606 | { | 1606 | { |
1607 | .callback = dmi_ignore_irq0_timer_override, | 1607 | .callback = dmi_ignore_irq0_timer_override, |
1608 | .ident = "HP nx6115 laptop", | ||
1609 | .matches = { | ||
1610 | DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), | ||
1611 | DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq nx6115"), | ||
1612 | }, | ||
1613 | }, | ||
1614 | { | ||
1615 | .callback = dmi_ignore_irq0_timer_override, | ||
1608 | .ident = "HP NX6125 laptop", | 1616 | .ident = "HP NX6125 laptop", |
1609 | .matches = { | 1617 | .matches = { |
1610 | DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), | 1618 | DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), |
@@ -1619,6 +1627,14 @@ static struct dmi_system_id __initdata acpi_dmi_table[] = { | |||
1619 | DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq nx6325"), | 1627 | DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq nx6325"), |
1620 | }, | 1628 | }, |
1621 | }, | 1629 | }, |
1630 | { | ||
1631 | .callback = dmi_ignore_irq0_timer_override, | ||
1632 | .ident = "HP 6715b laptop", | ||
1633 | .matches = { | ||
1634 | DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), | ||
1635 | DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq 6715b"), | ||
1636 | }, | ||
1637 | }, | ||
1622 | {} | 1638 | {} |
1623 | }; | 1639 | }; |
1624 | 1640 | ||
diff --git a/arch/x86/kernel/kgdb.c b/arch/x86/kernel/kgdb.c index 8282a2139681..10435a120d22 100644 --- a/arch/x86/kernel/kgdb.c +++ b/arch/x86/kernel/kgdb.c | |||
@@ -455,12 +455,7 @@ static int __kgdb_notify(struct die_args *args, unsigned long cmd) | |||
455 | return NOTIFY_DONE; | 455 | return NOTIFY_DONE; |
456 | 456 | ||
457 | case DIE_NMI_IPI: | 457 | case DIE_NMI_IPI: |
458 | if (atomic_read(&kgdb_active) != -1) { | 458 | /* Just ignore, we will handle the roundup on DIE_NMI. */ |
459 | /* KGDB CPU roundup */ | ||
460 | kgdb_nmicallback(raw_smp_processor_id(), regs); | ||
461 | was_in_debug_nmi[raw_smp_processor_id()] = 1; | ||
462 | touch_nmi_watchdog(); | ||
463 | } | ||
464 | return NOTIFY_DONE; | 459 | return NOTIFY_DONE; |
465 | 460 | ||
466 | case DIE_NMIUNKNOWN: | 461 | case DIE_NMIUNKNOWN: |
diff --git a/arch/x86/kernel/pci-gart_64.c b/arch/x86/kernel/pci-gart_64.c index 49285f8fd4d5..be33a5442d82 100644 --- a/arch/x86/kernel/pci-gart_64.c +++ b/arch/x86/kernel/pci-gart_64.c | |||
@@ -626,7 +626,6 @@ static __init int init_k8_gatt(struct agp_kern_info *info) | |||
626 | struct pci_dev *dev; | 626 | struct pci_dev *dev; |
627 | void *gatt; | 627 | void *gatt; |
628 | int i, error; | 628 | int i, error; |
629 | unsigned long start_pfn, end_pfn; | ||
630 | 629 | ||
631 | printk(KERN_INFO "PCI-DMA: Disabling AGP.\n"); | 630 | printk(KERN_INFO "PCI-DMA: Disabling AGP.\n"); |
632 | aper_size = aper_base = info->aper_size = 0; | 631 | aper_size = aper_base = info->aper_size = 0; |
@@ -672,12 +671,6 @@ static __init int init_k8_gatt(struct agp_kern_info *info) | |||
672 | printk(KERN_INFO "PCI-DMA: aperture base @ %x size %u KB\n", | 671 | printk(KERN_INFO "PCI-DMA: aperture base @ %x size %u KB\n", |
673 | aper_base, aper_size>>10); | 672 | aper_base, aper_size>>10); |
674 | 673 | ||
675 | /* need to map that range */ | ||
676 | end_pfn = (aper_base>>PAGE_SHIFT) + (aper_size>>PAGE_SHIFT); | ||
677 | if (end_pfn > max_low_pfn_mapped) { | ||
678 | start_pfn = (aper_base>>PAGE_SHIFT); | ||
679 | init_memory_mapping(start_pfn<<PAGE_SHIFT, end_pfn<<PAGE_SHIFT); | ||
680 | } | ||
681 | return 0; | 674 | return 0; |
682 | 675 | ||
683 | nommu: | 676 | nommu: |
@@ -727,7 +720,8 @@ void __init gart_iommu_init(void) | |||
727 | { | 720 | { |
728 | struct agp_kern_info info; | 721 | struct agp_kern_info info; |
729 | unsigned long iommu_start; | 722 | unsigned long iommu_start; |
730 | unsigned long aper_size; | 723 | unsigned long aper_base, aper_size; |
724 | unsigned long start_pfn, end_pfn; | ||
731 | unsigned long scratch; | 725 | unsigned long scratch; |
732 | long i; | 726 | long i; |
733 | 727 | ||
@@ -765,8 +759,16 @@ void __init gart_iommu_init(void) | |||
765 | return; | 759 | return; |
766 | } | 760 | } |
767 | 761 | ||
762 | /* need to map that range */ | ||
763 | aper_size = info.aper_size << 20; | ||
764 | aper_base = info.aper_base; | ||
765 | end_pfn = (aper_base>>PAGE_SHIFT) + (aper_size>>PAGE_SHIFT); | ||
766 | if (end_pfn > max_low_pfn_mapped) { | ||
767 | start_pfn = (aper_base>>PAGE_SHIFT); | ||
768 | init_memory_mapping(start_pfn<<PAGE_SHIFT, end_pfn<<PAGE_SHIFT); | ||
769 | } | ||
770 | |||
768 | printk(KERN_INFO "PCI-DMA: using GART IOMMU.\n"); | 771 | printk(KERN_INFO "PCI-DMA: using GART IOMMU.\n"); |
769 | aper_size = info.aper_size * 1024 * 1024; | ||
770 | iommu_size = check_iommu_size(info.aper_base, aper_size); | 772 | iommu_size = check_iommu_size(info.aper_base, aper_size); |
771 | iommu_pages = iommu_size >> PAGE_SHIFT; | 773 | iommu_pages = iommu_size >> PAGE_SHIFT; |
772 | 774 | ||
diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c index 7985c5b3f916..0b8261c3cac2 100644 --- a/arch/x86/kernel/smpboot.c +++ b/arch/x86/kernel/smpboot.c | |||
@@ -257,6 +257,7 @@ static void __cpuinit smp_callin(void) | |||
257 | end_local_APIC_setup(); | 257 | end_local_APIC_setup(); |
258 | map_cpu_to_logical_apicid(); | 258 | map_cpu_to_logical_apicid(); |
259 | 259 | ||
260 | notify_cpu_starting(cpuid); | ||
260 | /* | 261 | /* |
261 | * Get our bogomips. | 262 | * Get our bogomips. |
262 | * | 263 | * |
diff --git a/arch/x86/mach-voyager/voyager_smp.c b/arch/x86/mach-voyager/voyager_smp.c index ee0fba092157..199a5f4a873c 100644 --- a/arch/x86/mach-voyager/voyager_smp.c +++ b/arch/x86/mach-voyager/voyager_smp.c | |||
@@ -448,6 +448,8 @@ static void __init start_secondary(void *unused) | |||
448 | 448 | ||
449 | VDEBUG(("VOYAGER SMP: CPU%d, stack at about %p\n", cpuid, &cpuid)); | 449 | VDEBUG(("VOYAGER SMP: CPU%d, stack at about %p\n", cpuid, &cpuid)); |
450 | 450 | ||
451 | notify_cpu_starting(cpuid); | ||
452 | |||
451 | /* enable interrupts */ | 453 | /* enable interrupts */ |
452 | local_irq_enable(); | 454 | local_irq_enable(); |
453 | 455 | ||