diff options
author | Linus Torvalds <torvalds@g5.osdl.org> | 2006-03-21 11:52:18 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-03-21 11:52:18 -0500 |
commit | b05005772f34497eb2b7415a651fe785cbe70e16 (patch) | |
tree | b176aeb7fa9baf69e77ddd83e844727490bfcf28 /arch | |
parent | 044f324f6ea5d55391db62fca6a295b2651cb946 (diff) | |
parent | 7705a8792b0fc82fd7d4dd923724606bbfd9fb20 (diff) |
Merge branch 'origin'
Conflicts:
Documentation/video4linux/CARDLIST.cx88
drivers/media/video/cx88/Kconfig
drivers/media/video/em28xx/em28xx-video.c
drivers/media/video/saa7134/saa7134-dvb.c
Resolved as in the original merge by Mauro Carvalho Chehab
Diffstat (limited to 'arch')
649 files changed, 8810 insertions, 7383 deletions
diff --git a/arch/alpha/kernel/asm-offsets.c b/arch/alpha/kernel/asm-offsets.c index 8f2e5c718b50..6c56c754a0b5 100644 --- a/arch/alpha/kernel/asm-offsets.c +++ b/arch/alpha/kernel/asm-offsets.c | |||
@@ -28,6 +28,7 @@ void foo(void) | |||
28 | DEFINE(TASK_GID, offsetof(struct task_struct, gid)); | 28 | DEFINE(TASK_GID, offsetof(struct task_struct, gid)); |
29 | DEFINE(TASK_EGID, offsetof(struct task_struct, egid)); | 29 | DEFINE(TASK_EGID, offsetof(struct task_struct, egid)); |
30 | DEFINE(TASK_REAL_PARENT, offsetof(struct task_struct, real_parent)); | 30 | DEFINE(TASK_REAL_PARENT, offsetof(struct task_struct, real_parent)); |
31 | DEFINE(TASK_GROUP_LEADER, offsetof(struct task_struct, group_leader)); | ||
31 | DEFINE(TASK_TGID, offsetof(struct task_struct, tgid)); | 32 | DEFINE(TASK_TGID, offsetof(struct task_struct, tgid)); |
32 | BLANK(); | 33 | BLANK(); |
33 | 34 | ||
diff --git a/arch/alpha/kernel/entry.S b/arch/alpha/kernel/entry.S index e38671c922bc..7af15bf7e5ab 100644 --- a/arch/alpha/kernel/entry.S +++ b/arch/alpha/kernel/entry.S | |||
@@ -879,17 +879,19 @@ sys_getxpid: | |||
879 | 879 | ||
880 | /* See linux/kernel/timer.c sys_getppid for discussion | 880 | /* See linux/kernel/timer.c sys_getppid for discussion |
881 | about this loop. */ | 881 | about this loop. */ |
882 | ldq $3, TASK_REAL_PARENT($2) | 882 | ldq $3, TASK_GROUP_LEADER($2) |
883 | 1: ldl $1, TASK_TGID($3) | 883 | ldq $4, TASK_REAL_PARENT($3) |
884 | ldl $0, TASK_TGID($2) | ||
885 | 1: ldl $1, TASK_TGID($4) | ||
884 | #ifdef CONFIG_SMP | 886 | #ifdef CONFIG_SMP |
885 | mov $3, $4 | 887 | mov $4, $5 |
886 | mb | 888 | mb |
887 | ldq $3, TASK_REAL_PARENT($2) | 889 | ldq $3, TASK_GROUP_LEADER($2) |
888 | cmpeq $3, $4, $4 | 890 | ldq $4, TASK_REAL_PARENT($3) |
889 | beq $4, 1b | 891 | cmpeq $4, $5, $5 |
892 | beq $5, 1b | ||
890 | #endif | 893 | #endif |
891 | stq $1, 80($sp) | 894 | stq $1, 80($sp) |
892 | ldl $0, TASK_TGID($2) | ||
893 | ret | 895 | ret |
894 | .end sys_getxpid | 896 | .end sys_getxpid |
895 | 897 | ||
diff --git a/arch/alpha/kernel/irq.c b/arch/alpha/kernel/irq.c index 76be5cf0de13..da677f829f76 100644 --- a/arch/alpha/kernel/irq.c +++ b/arch/alpha/kernel/irq.c | |||
@@ -68,34 +68,32 @@ show_interrupts(struct seq_file *p, void *v) | |||
68 | #ifdef CONFIG_SMP | 68 | #ifdef CONFIG_SMP |
69 | int j; | 69 | int j; |
70 | #endif | 70 | #endif |
71 | int i = *(loff_t *) v; | 71 | int irq = *(loff_t *) v; |
72 | struct irqaction * action; | 72 | struct irqaction * action; |
73 | unsigned long flags; | 73 | unsigned long flags; |
74 | 74 | ||
75 | #ifdef CONFIG_SMP | 75 | #ifdef CONFIG_SMP |
76 | if (i == 0) { | 76 | if (irq == 0) { |
77 | seq_puts(p, " "); | 77 | seq_puts(p, " "); |
78 | for (i = 0; i < NR_CPUS; i++) | 78 | for_each_online_cpu(j) |
79 | if (cpu_online(i)) | 79 | seq_printf(p, "CPU%d ", j); |
80 | seq_printf(p, "CPU%d ", i); | ||
81 | seq_putc(p, '\n'); | 80 | seq_putc(p, '\n'); |
82 | } | 81 | } |
83 | #endif | 82 | #endif |
84 | 83 | ||
85 | if (i < ACTUAL_NR_IRQS) { | 84 | if (irq < ACTUAL_NR_IRQS) { |
86 | spin_lock_irqsave(&irq_desc[i].lock, flags); | 85 | spin_lock_irqsave(&irq_desc[irq].lock, flags); |
87 | action = irq_desc[i].action; | 86 | action = irq_desc[irq].action; |
88 | if (!action) | 87 | if (!action) |
89 | goto unlock; | 88 | goto unlock; |
90 | seq_printf(p, "%3d: ",i); | 89 | seq_printf(p, "%3d: ", irq); |
91 | #ifndef CONFIG_SMP | 90 | #ifndef CONFIG_SMP |
92 | seq_printf(p, "%10u ", kstat_irqs(i)); | 91 | seq_printf(p, "%10u ", kstat_irqs(irq)); |
93 | #else | 92 | #else |
94 | for (j = 0; j < NR_CPUS; j++) | 93 | for_each_online_cpu(j) |
95 | if (cpu_online(j)) | 94 | seq_printf(p, "%10u ", kstat_cpu(j).irqs[irq]); |
96 | seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]); | ||
97 | #endif | 95 | #endif |
98 | seq_printf(p, " %14s", irq_desc[i].handler->typename); | 96 | seq_printf(p, " %14s", irq_desc[irq].handler->typename); |
99 | seq_printf(p, " %c%s", | 97 | seq_printf(p, " %c%s", |
100 | (action->flags & SA_INTERRUPT)?'+':' ', | 98 | (action->flags & SA_INTERRUPT)?'+':' ', |
101 | action->name); | 99 | action->name); |
@@ -108,13 +106,12 @@ show_interrupts(struct seq_file *p, void *v) | |||
108 | 106 | ||
109 | seq_putc(p, '\n'); | 107 | seq_putc(p, '\n'); |
110 | unlock: | 108 | unlock: |
111 | spin_unlock_irqrestore(&irq_desc[i].lock, flags); | 109 | spin_unlock_irqrestore(&irq_desc[irq].lock, flags); |
112 | } else if (i == ACTUAL_NR_IRQS) { | 110 | } else if (irq == ACTUAL_NR_IRQS) { |
113 | #ifdef CONFIG_SMP | 111 | #ifdef CONFIG_SMP |
114 | seq_puts(p, "IPI: "); | 112 | seq_puts(p, "IPI: "); |
115 | for (i = 0; i < NR_CPUS; i++) | 113 | for_each_online_cpu(j) |
116 | if (cpu_online(i)) | 114 | seq_printf(p, "%10lu ", cpu_data[j].ipi_count); |
117 | seq_printf(p, "%10lu ", cpu_data[i].ipi_count); | ||
118 | seq_putc(p, '\n'); | 115 | seq_putc(p, '\n'); |
119 | #endif | 116 | #endif |
120 | seq_printf(p, "ERR: %10lu\n", irq_err_count); | 117 | seq_printf(p, "ERR: %10lu\n", irq_err_count); |
@@ -122,7 +119,6 @@ unlock: | |||
122 | return 0; | 119 | return 0; |
123 | } | 120 | } |
124 | 121 | ||
125 | |||
126 | /* | 122 | /* |
127 | * handle_irq handles all normal device IRQ's (the special | 123 | * handle_irq handles all normal device IRQ's (the special |
128 | * SMP cross-CPU interrupts have their own specific | 124 | * SMP cross-CPU interrupts have their own specific |
@@ -155,8 +151,13 @@ handle_irq(int irq, struct pt_regs * regs) | |||
155 | } | 151 | } |
156 | 152 | ||
157 | irq_enter(); | 153 | irq_enter(); |
154 | /* | ||
155 | * __do_IRQ() must be called with IPL_MAX. Note that we do not | ||
156 | * explicitly enable interrupts afterwards - some MILO PALcode | ||
157 | * (namely LX164 one) seems to have severe problems with RTI | ||
158 | * at IPL 0. | ||
159 | */ | ||
158 | local_irq_disable(); | 160 | local_irq_disable(); |
159 | __do_IRQ(irq, regs); | 161 | __do_IRQ(irq, regs); |
160 | local_irq_enable(); | ||
161 | irq_exit(); | 162 | irq_exit(); |
162 | } | 163 | } |
diff --git a/arch/alpha/kernel/smp.c b/arch/alpha/kernel/smp.c index 4b873527ce1c..02c2db08114a 100644 --- a/arch/alpha/kernel/smp.c +++ b/arch/alpha/kernel/smp.c | |||
@@ -73,9 +73,6 @@ cpumask_t cpu_online_map; | |||
73 | 73 | ||
74 | EXPORT_SYMBOL(cpu_online_map); | 74 | EXPORT_SYMBOL(cpu_online_map); |
75 | 75 | ||
76 | /* cpus reported in the hwrpb */ | ||
77 | static unsigned long hwrpb_cpu_present_mask __initdata = 0; | ||
78 | |||
79 | int smp_num_probed; /* Internal processor count */ | 76 | int smp_num_probed; /* Internal processor count */ |
80 | int smp_num_cpus = 1; /* Number that came online. */ | 77 | int smp_num_cpus = 1; /* Number that came online. */ |
81 | 78 | ||
@@ -442,7 +439,7 @@ setup_smp(void) | |||
442 | if ((cpu->flags & 0x1cc) == 0x1cc) { | 439 | if ((cpu->flags & 0x1cc) == 0x1cc) { |
443 | smp_num_probed++; | 440 | smp_num_probed++; |
444 | /* Assume here that "whami" == index */ | 441 | /* Assume here that "whami" == index */ |
445 | hwrpb_cpu_present_mask |= (1UL << i); | 442 | cpu_set(i, cpu_possible_map); |
446 | cpu->pal_revision = boot_cpu_palrev; | 443 | cpu->pal_revision = boot_cpu_palrev; |
447 | } | 444 | } |
448 | 445 | ||
@@ -453,12 +450,12 @@ setup_smp(void) | |||
453 | } | 450 | } |
454 | } else { | 451 | } else { |
455 | smp_num_probed = 1; | 452 | smp_num_probed = 1; |
456 | hwrpb_cpu_present_mask = (1UL << boot_cpuid); | 453 | cpu_set(boot_cpuid, cpu_possible_map); |
457 | } | 454 | } |
458 | cpu_present_mask = cpumask_of_cpu(boot_cpuid); | 455 | cpu_present_mask = cpumask_of_cpu(boot_cpuid); |
459 | 456 | ||
460 | printk(KERN_INFO "SMP: %d CPUs probed -- cpu_present_mask = %lx\n", | 457 | printk(KERN_INFO "SMP: %d CPUs probed -- cpu_present_mask = %lx\n", |
461 | smp_num_probed, hwrpb_cpu_present_mask); | 458 | smp_num_probed, cpu_possible_map.bits[0]); |
462 | } | 459 | } |
463 | 460 | ||
464 | /* | 461 | /* |
@@ -467,8 +464,6 @@ setup_smp(void) | |||
467 | void __init | 464 | void __init |
468 | smp_prepare_cpus(unsigned int max_cpus) | 465 | smp_prepare_cpus(unsigned int max_cpus) |
469 | { | 466 | { |
470 | int cpu_count, i; | ||
471 | |||
472 | /* Take care of some initial bookkeeping. */ | 467 | /* Take care of some initial bookkeeping. */ |
473 | memset(ipi_data, 0, sizeof(ipi_data)); | 468 | memset(ipi_data, 0, sizeof(ipi_data)); |
474 | 469 | ||
@@ -486,19 +481,7 @@ smp_prepare_cpus(unsigned int max_cpus) | |||
486 | 481 | ||
487 | printk(KERN_INFO "SMP starting up secondaries.\n"); | 482 | printk(KERN_INFO "SMP starting up secondaries.\n"); |
488 | 483 | ||
489 | cpu_count = 1; | 484 | smp_num_cpus = smp_num_probed; |
490 | for (i = 0; (i < NR_CPUS) && (cpu_count < max_cpus); i++) { | ||
491 | if (i == boot_cpuid) | ||
492 | continue; | ||
493 | |||
494 | if (((hwrpb_cpu_present_mask >> i) & 1) == 0) | ||
495 | continue; | ||
496 | |||
497 | cpu_set(i, cpu_possible_map); | ||
498 | cpu_count++; | ||
499 | } | ||
500 | |||
501 | smp_num_cpus = cpu_count; | ||
502 | } | 485 | } |
503 | 486 | ||
504 | void __devinit | 487 | void __devinit |
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 5959e36c3b4c..32ba00bd0a2f 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
@@ -10,9 +10,9 @@ config ARM | |||
10 | default y | 10 | default y |
11 | help | 11 | help |
12 | The ARM series is a line of low-power-consumption RISC chip designs | 12 | The ARM series is a line of low-power-consumption RISC chip designs |
13 | licensed by ARM ltd and targeted at embedded applications and | 13 | licensed by ARM Ltd and targeted at embedded applications and |
14 | handhelds such as the Compaq IPAQ. ARM-based PCs are no longer | 14 | handhelds such as the Compaq IPAQ. ARM-based PCs are no longer |
15 | manufactured, but legacy ARM-based PC hardware remains popular in | 15 | manufactured, but legacy ARM-based PC hardware remains popular in |
16 | Europe. There is an ARM Linux project with a web page at | 16 | Europe. There is an ARM Linux project with a web page at |
17 | <http://www.arm.linux.org.uk/>. | 17 | <http://www.arm.linux.org.uk/>. |
18 | 18 | ||
@@ -69,57 +69,77 @@ config GENERIC_ISA_DMA | |||
69 | config FIQ | 69 | config FIQ |
70 | bool | 70 | bool |
71 | 71 | ||
72 | config ARCH_MTD_XIP | ||
73 | bool | ||
74 | |||
72 | source "init/Kconfig" | 75 | source "init/Kconfig" |
73 | 76 | ||
74 | menu "System Type" | 77 | menu "System Type" |
75 | 78 | ||
76 | choice | 79 | choice |
77 | prompt "ARM system type" | 80 | prompt "ARM system type" |
78 | default ARCH_RPC | 81 | default ARCH_VERSATILE |
79 | 82 | ||
80 | config ARCH_CLPS7500 | 83 | config ARCH_CLPS7500 |
81 | bool "Cirrus-CL-PS7500FE" | 84 | bool "Cirrus-CL-PS7500FE" |
82 | select TIMER_ACORN | 85 | select TIMER_ACORN |
83 | select ISA | 86 | select ISA |
87 | help | ||
88 | Support for the Cirrus Logic PS7500FE system-on-a-chip. | ||
84 | 89 | ||
85 | config ARCH_CLPS711X | 90 | config ARCH_CLPS711X |
86 | bool "CLPS711x/EP721x-based" | 91 | bool "CLPS711x/EP721x-based" |
92 | help | ||
93 | Support for Cirrus Logic 711x/721x based boards. | ||
87 | 94 | ||
88 | config ARCH_CO285 | 95 | config ARCH_CO285 |
89 | bool "Co-EBSA285" | 96 | bool "Co-EBSA285" |
90 | select FOOTBRIDGE | 97 | select FOOTBRIDGE |
91 | select FOOTBRIDGE_ADDIN | 98 | select FOOTBRIDGE_ADDIN |
99 | help | ||
100 | Support for Intel's EBSA285 companion chip. | ||
92 | 101 | ||
93 | config ARCH_EBSA110 | 102 | config ARCH_EBSA110 |
94 | bool "EBSA-110" | 103 | bool "EBSA-110" |
95 | select ISA | 104 | select ISA |
96 | help | 105 | help |
97 | This is an evaluation board for the StrongARM processor available | 106 | This is an evaluation board for the StrongARM processor available |
98 | from Digital. It has limited hardware on-board, including an onboard | 107 | from Digital. It has limited hardware on-board, including an |
99 | Ethernet interface, two PCMCIA sockets, two serial ports and a | 108 | Ethernet interface, two PCMCIA sockets, two serial ports and a |
100 | parallel port. | 109 | parallel port. |
101 | 110 | ||
102 | config ARCH_FOOTBRIDGE | 111 | config ARCH_FOOTBRIDGE |
103 | bool "FootBridge" | 112 | bool "FootBridge" |
104 | select FOOTBRIDGE | 113 | select FOOTBRIDGE |
114 | help | ||
115 | Support for systems based on the DC21285 companion chip | ||
116 | ("FootBridge"), such as the Simtec CATS and the Rebel NetWinder. | ||
105 | 117 | ||
106 | config ARCH_INTEGRATOR | 118 | config ARCH_INTEGRATOR |
107 | bool "Integrator" | 119 | bool "Integrator" |
108 | select ARM_AMBA | 120 | select ARM_AMBA |
109 | select ICST525 | 121 | select ICST525 |
122 | help | ||
123 | Support for ARM's Integrator platform. | ||
110 | 124 | ||
111 | config ARCH_IOP3XX | 125 | config ARCH_IOP3XX |
112 | bool "IOP3xx-based" | 126 | bool "IOP3xx-based" |
113 | select PCI | 127 | select PCI |
128 | help | ||
129 | Support for Intel's IOP3XX (XScale) family of processors. | ||
114 | 130 | ||
115 | config ARCH_IXP4XX | 131 | config ARCH_IXP4XX |
116 | bool "IXP4xx-based" | 132 | bool "IXP4xx-based" |
117 | select DMABOUNCE | 133 | select DMABOUNCE |
118 | select PCI | 134 | select PCI |
135 | help | ||
136 | Support for Intel's IXP4XX (XScale) family of processors. | ||
119 | 137 | ||
120 | config ARCH_IXP2000 | 138 | config ARCH_IXP2000 |
121 | bool "IXP2400/2800-based" | 139 | bool "IXP2400/2800-based" |
122 | select PCI | 140 | select PCI |
141 | help | ||
142 | Support for Intel's IXP2400/2800 (XScale) family of processors. | ||
123 | 143 | ||
124 | config ARCH_L7200 | 144 | config ARCH_L7200 |
125 | bool "LinkUp-L7200" | 145 | bool "LinkUp-L7200" |
@@ -136,6 +156,9 @@ config ARCH_L7200 | |||
136 | 156 | ||
137 | config ARCH_PXA | 157 | config ARCH_PXA |
138 | bool "PXA2xx-based" | 158 | bool "PXA2xx-based" |
159 | select ARCH_MTD_XIP | ||
160 | help | ||
161 | Support for Intel's PXA2XX processor line. | ||
139 | 162 | ||
140 | config ARCH_RPC | 163 | config ARCH_RPC |
141 | bool "RiscPC" | 164 | bool "RiscPC" |
@@ -152,19 +175,25 @@ config ARCH_SA1100 | |||
152 | bool "SA1100-based" | 175 | bool "SA1100-based" |
153 | select ISA | 176 | select ISA |
154 | select ARCH_DISCONTIGMEM_ENABLE | 177 | select ARCH_DISCONTIGMEM_ENABLE |
178 | select ARCH_MTD_XIP | ||
179 | help | ||
180 | Support for StrongARM 11x0 based boards. | ||
155 | 181 | ||
156 | config ARCH_S3C2410 | 182 | config ARCH_S3C2410 |
157 | bool "Samsung S3C2410" | 183 | bool "Samsung S3C2410" |
158 | help | 184 | help |
159 | Samsung S3C2410X CPU based systems, such as the Simtec Electronics | 185 | Samsung S3C2410X CPU based systems, such as the Simtec Electronics |
160 | BAST (<http://www.simtec.co.uk/products/EB110ITX/>), the IPAQ 1940 or | 186 | BAST (<http://www.simtec.co.uk/products/EB110ITX/>), the IPAQ 1940 or |
161 | the Samsung SMDK2410 development board (and derviatives). | 187 | the Samsung SMDK2410 development board (and derivatives). |
162 | 188 | ||
163 | config ARCH_SHARK | 189 | config ARCH_SHARK |
164 | bool "Shark" | 190 | bool "Shark" |
165 | select ISA | 191 | select ISA |
166 | select ISA_DMA | 192 | select ISA_DMA |
167 | select PCI | 193 | select PCI |
194 | help | ||
195 | Support for the StrongARM based Digital DNARD machine, also known | ||
196 | as "Shark" (<http://www.shark-linux.de/shark.html>). | ||
168 | 197 | ||
169 | config ARCH_LH7A40X | 198 | config ARCH_LH7A40X |
170 | bool "Sharp LH7A40X" | 199 | bool "Sharp LH7A40X" |
@@ -176,6 +205,8 @@ config ARCH_LH7A40X | |||
176 | 205 | ||
177 | config ARCH_OMAP | 206 | config ARCH_OMAP |
178 | bool "TI OMAP" | 207 | bool "TI OMAP" |
208 | help | ||
209 | Support for TI's OMAP platform (OMAP1 and OMAP2). | ||
179 | 210 | ||
180 | config ARCH_VERSATILE | 211 | config ARCH_VERSATILE |
181 | bool "Versatile" | 212 | bool "Versatile" |
@@ -194,6 +225,8 @@ config ARCH_REALVIEW | |||
194 | 225 | ||
195 | config ARCH_IMX | 226 | config ARCH_IMX |
196 | bool "IMX" | 227 | bool "IMX" |
228 | help | ||
229 | Support for Motorola's i.MX family of processors (MX1, MXL). | ||
197 | 230 | ||
198 | config ARCH_H720X | 231 | config ARCH_H720X |
199 | bool "Hynix-HMS720x-based" | 232 | bool "Hynix-HMS720x-based" |
@@ -210,8 +243,8 @@ config ARCH_AAEC2000 | |||
210 | config ARCH_AT91RM9200 | 243 | config ARCH_AT91RM9200 |
211 | bool "AT91RM9200" | 244 | bool "AT91RM9200" |
212 | help | 245 | help |
213 | Say Y here if you intend to run this kernel on an AT91RM9200-based | 246 | Say Y here if you intend to run this kernel on an Atmel |
214 | board. | 247 | AT91RM9200-based board. |
215 | 248 | ||
216 | endchoice | 249 | endchoice |
217 | 250 | ||
@@ -417,8 +450,8 @@ config AEABI | |||
417 | To use this you need GCC version 4.0.0 or later. | 450 | To use this you need GCC version 4.0.0 or later. |
418 | 451 | ||
419 | config OABI_COMPAT | 452 | config OABI_COMPAT |
420 | bool "Allow old ABI binaries to run with this kernel" | 453 | bool "Allow old ABI binaries to run with this kernel (EXPERIMENTAL)" |
421 | depends on AEABI | 454 | depends on AEABI && EXPERIMENTAL |
422 | default y | 455 | default y |
423 | help | 456 | help |
424 | This option preserves the old syscall interface along with the | 457 | This option preserves the old syscall interface along with the |
@@ -766,6 +799,8 @@ source "drivers/i2c/Kconfig" | |||
766 | 799 | ||
767 | source "drivers/spi/Kconfig" | 800 | source "drivers/spi/Kconfig" |
768 | 801 | ||
802 | source "drivers/w1/Kconfig" | ||
803 | |||
769 | source "drivers/hwmon/Kconfig" | 804 | source "drivers/hwmon/Kconfig" |
770 | 805 | ||
771 | #source "drivers/l3/Kconfig" | 806 | #source "drivers/l3/Kconfig" |
diff --git a/arch/arm/common/locomo.c b/arch/arm/common/locomo.c index 159ad7ed7a40..d31b1cb7eea0 100644 --- a/arch/arm/common/locomo.c +++ b/arch/arm/common/locomo.c | |||
@@ -629,6 +629,22 @@ static int locomo_resume(struct platform_device *dev) | |||
629 | } | 629 | } |
630 | #endif | 630 | #endif |
631 | 631 | ||
632 | |||
633 | #define LCM_ALC_EN 0x8000 | ||
634 | |||
635 | void frontlight_set(struct locomo *lchip, int duty, int vr, int bpwf) | ||
636 | { | ||
637 | unsigned long flags; | ||
638 | |||
639 | spin_lock_irqsave(&lchip->lock, flags); | ||
640 | locomo_writel(bpwf, lchip->base + LOCOMO_FRONTLIGHT + LOCOMO_ALS); | ||
641 | udelay(100); | ||
642 | locomo_writel(duty, lchip->base + LOCOMO_FRONTLIGHT + LOCOMO_ALD); | ||
643 | locomo_writel(bpwf | LCM_ALC_EN, lchip->base + LOCOMO_FRONTLIGHT + LOCOMO_ALS); | ||
644 | spin_unlock_irqrestore(&lchip->lock, flags); | ||
645 | } | ||
646 | |||
647 | |||
632 | /** | 648 | /** |
633 | * locomo_probe - probe for a single LoCoMo chip. | 649 | * locomo_probe - probe for a single LoCoMo chip. |
634 | * @phys_addr: physical address of device. | 650 | * @phys_addr: physical address of device. |
@@ -688,6 +704,11 @@ __locomo_probe(struct device *me, struct resource *mem, int irq) | |||
688 | /* FrontLight */ | 704 | /* FrontLight */ |
689 | locomo_writel(0, lchip->base + LOCOMO_FRONTLIGHT + LOCOMO_ALS); | 705 | locomo_writel(0, lchip->base + LOCOMO_FRONTLIGHT + LOCOMO_ALS); |
690 | locomo_writel(0, lchip->base + LOCOMO_FRONTLIGHT + LOCOMO_ALD); | 706 | locomo_writel(0, lchip->base + LOCOMO_FRONTLIGHT + LOCOMO_ALD); |
707 | |||
708 | /* Same constants can be used for collie and poodle | ||
709 | (depending on CONFIG options in original sharp code)? */ | ||
710 | frontlight_set(lchip, 163, 0, 148); | ||
711 | |||
691 | /* Longtime timer */ | 712 | /* Longtime timer */ |
692 | locomo_writel(0, lchip->base + LOCOMO_LTINT); | 713 | locomo_writel(0, lchip->base + LOCOMO_LTINT); |
693 | /* SPI */ | 714 | /* SPI */ |
diff --git a/arch/arm/common/rtctime.c b/arch/arm/common/rtctime.c index 48b1e19b131f..e851d86c212c 100644 --- a/arch/arm/common/rtctime.c +++ b/arch/arm/common/rtctime.c | |||
@@ -128,19 +128,27 @@ EXPORT_SYMBOL(rtc_tm_to_time); | |||
128 | /* | 128 | /* |
129 | * Calculate the next alarm time given the requested alarm time mask | 129 | * Calculate the next alarm time given the requested alarm time mask |
130 | * and the current time. | 130 | * and the current time. |
131 | * | ||
132 | * FIXME: for now, we just copy the alarm time because we're lazy (and | ||
133 | * is therefore buggy - setting a 10am alarm at 8pm will not result in | ||
134 | * the alarm triggering.) | ||
135 | */ | 131 | */ |
136 | void rtc_next_alarm_time(struct rtc_time *next, struct rtc_time *now, struct rtc_time *alrm) | 132 | void rtc_next_alarm_time(struct rtc_time *next, struct rtc_time *now, struct rtc_time *alrm) |
137 | { | 133 | { |
134 | unsigned long next_time; | ||
135 | unsigned long now_time; | ||
136 | |||
138 | next->tm_year = now->tm_year; | 137 | next->tm_year = now->tm_year; |
139 | next->tm_mon = now->tm_mon; | 138 | next->tm_mon = now->tm_mon; |
140 | next->tm_mday = now->tm_mday; | 139 | next->tm_mday = now->tm_mday; |
141 | next->tm_hour = alrm->tm_hour; | 140 | next->tm_hour = alrm->tm_hour; |
142 | next->tm_min = alrm->tm_min; | 141 | next->tm_min = alrm->tm_min; |
143 | next->tm_sec = alrm->tm_sec; | 142 | next->tm_sec = alrm->tm_sec; |
143 | |||
144 | rtc_tm_to_time(now, &now_time); | ||
145 | rtc_tm_to_time(next, &next_time); | ||
146 | |||
147 | if (next_time < now_time) { | ||
148 | /* Advance one day */ | ||
149 | next_time += 60 * 60 * 24; | ||
150 | rtc_time_to_tm(next_time, next); | ||
151 | } | ||
144 | } | 152 | } |
145 | 153 | ||
146 | static inline int rtc_read_time(struct rtc_ops *ops, struct rtc_time *tm) | 154 | static inline int rtc_read_time(struct rtc_ops *ops, struct rtc_time *tm) |
diff --git a/arch/arm/configs/at91rm9200dk_defconfig b/arch/arm/configs/at91rm9200dk_defconfig index 5cdd13acf8ff..1fe73d198888 100644 --- a/arch/arm/configs/at91rm9200dk_defconfig +++ b/arch/arm/configs/at91rm9200dk_defconfig | |||
@@ -85,7 +85,6 @@ CONFIG_DEFAULT_IOSCHED="anticipatory" | |||
85 | # CONFIG_ARCH_CLPS711X is not set | 85 | # CONFIG_ARCH_CLPS711X is not set |
86 | # CONFIG_ARCH_CO285 is not set | 86 | # CONFIG_ARCH_CO285 is not set |
87 | # CONFIG_ARCH_EBSA110 is not set | 87 | # CONFIG_ARCH_EBSA110 is not set |
88 | # CONFIG_ARCH_CAMELOT is not set | ||
89 | # CONFIG_ARCH_FOOTBRIDGE is not set | 88 | # CONFIG_ARCH_FOOTBRIDGE is not set |
90 | # CONFIG_ARCH_INTEGRATOR is not set | 89 | # CONFIG_ARCH_INTEGRATOR is not set |
91 | # CONFIG_ARCH_IOP3XX is not set | 90 | # CONFIG_ARCH_IOP3XX is not set |
diff --git a/arch/arm/configs/at91rm9200ek_defconfig b/arch/arm/configs/at91rm9200ek_defconfig index 20838ccf1da7..b7d934cdb1b7 100644 --- a/arch/arm/configs/at91rm9200ek_defconfig +++ b/arch/arm/configs/at91rm9200ek_defconfig | |||
@@ -85,7 +85,6 @@ CONFIG_DEFAULT_IOSCHED="anticipatory" | |||
85 | # CONFIG_ARCH_CLPS711X is not set | 85 | # CONFIG_ARCH_CLPS711X is not set |
86 | # CONFIG_ARCH_CO285 is not set | 86 | # CONFIG_ARCH_CO285 is not set |
87 | # CONFIG_ARCH_EBSA110 is not set | 87 | # CONFIG_ARCH_EBSA110 is not set |
88 | # CONFIG_ARCH_CAMELOT is not set | ||
89 | # CONFIG_ARCH_FOOTBRIDGE is not set | 88 | # CONFIG_ARCH_FOOTBRIDGE is not set |
90 | # CONFIG_ARCH_INTEGRATOR is not set | 89 | # CONFIG_ARCH_INTEGRATOR is not set |
91 | # CONFIG_ARCH_IOP3XX is not set | 90 | # CONFIG_ARCH_IOP3XX is not set |
diff --git a/arch/arm/configs/bast_defconfig b/arch/arm/configs/bast_defconfig index 6886001b5366..4a8564f386af 100644 --- a/arch/arm/configs/bast_defconfig +++ b/arch/arm/configs/bast_defconfig | |||
@@ -14,8 +14,7 @@ CONFIG_GENERIC_IOMAP=y | |||
14 | # Code maturity level options | 14 | # Code maturity level options |
15 | # | 15 | # |
16 | CONFIG_EXPERIMENTAL=y | 16 | CONFIG_EXPERIMENTAL=y |
17 | # CONFIG_CLEAN_COMPILE is not set | 17 | CONFIG_CLEAN_COMPILE=y |
18 | CONFIG_BROKEN=y | ||
19 | CONFIG_BROKEN_ON_SMP=y | 18 | CONFIG_BROKEN_ON_SMP=y |
20 | 19 | ||
21 | # | 20 | # |
@@ -360,7 +359,6 @@ CONFIG_BLK_DEV_IDE_BAST=y | |||
360 | # | 359 | # |
361 | # IEEE 1394 (FireWire) support | 360 | # IEEE 1394 (FireWire) support |
362 | # | 361 | # |
363 | # CONFIG_IEEE1394 is not set | ||
364 | 362 | ||
365 | # | 363 | # |
366 | # I2O device support | 364 | # I2O device support |
@@ -781,7 +779,6 @@ CONFIG_SYSFS=y | |||
781 | # CONFIG_DEVFS_FS is not set | 779 | # CONFIG_DEVFS_FS is not set |
782 | # CONFIG_DEVPTS_FS_XATTR is not set | 780 | # CONFIG_DEVPTS_FS_XATTR is not set |
783 | # CONFIG_TMPFS is not set | 781 | # CONFIG_TMPFS is not set |
784 | # CONFIG_HUGETLBFS is not set | ||
785 | # CONFIG_HUGETLB_PAGE is not set | 782 | # CONFIG_HUGETLB_PAGE is not set |
786 | CONFIG_RAMFS=y | 783 | CONFIG_RAMFS=y |
787 | 784 | ||
diff --git a/arch/arm/configs/collie_defconfig b/arch/arm/configs/collie_defconfig index 15468a0cf70e..c9aa878e610a 100644 --- a/arch/arm/configs/collie_defconfig +++ b/arch/arm/configs/collie_defconfig | |||
@@ -13,8 +13,7 @@ CONFIG_GENERIC_CALIBRATE_DELAY=y | |||
13 | # Code maturity level options | 13 | # Code maturity level options |
14 | # | 14 | # |
15 | CONFIG_EXPERIMENTAL=y | 15 | CONFIG_EXPERIMENTAL=y |
16 | # CONFIG_CLEAN_COMPILE is not set | 16 | CONFIG_CLEAN_COMPILE=y |
17 | CONFIG_BROKEN=y | ||
18 | CONFIG_BROKEN_ON_SMP=y | 17 | CONFIG_BROKEN_ON_SMP=y |
19 | CONFIG_LOCK_KERNEL=y | 18 | CONFIG_LOCK_KERNEL=y |
20 | CONFIG_INIT_ENV_ARG_LIMIT=32 | 19 | CONFIG_INIT_ENV_ARG_LIMIT=32 |
@@ -308,9 +307,7 @@ CONFIG_MTD_CFI_I2=y | |||
308 | # CONFIG_MTD_ROM is not set | 307 | # CONFIG_MTD_ROM is not set |
309 | # CONFIG_MTD_ABSENT is not set | 308 | # CONFIG_MTD_ABSENT is not set |
310 | CONFIG_MTD_OBSOLETE_CHIPS=y | 309 | CONFIG_MTD_OBSOLETE_CHIPS=y |
311 | # CONFIG_MTD_AMDSTD is not set | ||
312 | CONFIG_MTD_SHARP=y | 310 | CONFIG_MTD_SHARP=y |
313 | # CONFIG_MTD_JEDEC is not set | ||
314 | 311 | ||
315 | # | 312 | # |
316 | # Mapping drivers for chip access | 313 | # Mapping drivers for chip access |
@@ -396,7 +393,6 @@ CONFIG_ATA_OVER_ETH=m | |||
396 | # | 393 | # |
397 | # IEEE 1394 (FireWire) support | 394 | # IEEE 1394 (FireWire) support |
398 | # | 395 | # |
399 | # CONFIG_IEEE1394 is not set | ||
400 | 396 | ||
401 | # | 397 | # |
402 | # I2O device support | 398 | # I2O device support |
@@ -741,7 +737,6 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | |||
741 | CONFIG_PROC_FS=y | 737 | CONFIG_PROC_FS=y |
742 | CONFIG_SYSFS=y | 738 | CONFIG_SYSFS=y |
743 | CONFIG_TMPFS=y | 739 | CONFIG_TMPFS=y |
744 | # CONFIG_HUGETLBFS is not set | ||
745 | # CONFIG_HUGETLB_PAGE is not set | 740 | # CONFIG_HUGETLB_PAGE is not set |
746 | CONFIG_RAMFS=y | 741 | CONFIG_RAMFS=y |
747 | # CONFIG_RELAYFS_FS is not set | 742 | # CONFIG_RELAYFS_FS is not set |
diff --git a/arch/arm/configs/csb337_defconfig b/arch/arm/configs/csb337_defconfig index 885a3184830a..94bd9932a402 100644 --- a/arch/arm/configs/csb337_defconfig +++ b/arch/arm/configs/csb337_defconfig | |||
@@ -85,7 +85,6 @@ CONFIG_DEFAULT_IOSCHED="anticipatory" | |||
85 | # CONFIG_ARCH_CLPS711X is not set | 85 | # CONFIG_ARCH_CLPS711X is not set |
86 | # CONFIG_ARCH_CO285 is not set | 86 | # CONFIG_ARCH_CO285 is not set |
87 | # CONFIG_ARCH_EBSA110 is not set | 87 | # CONFIG_ARCH_EBSA110 is not set |
88 | # CONFIG_ARCH_CAMELOT is not set | ||
89 | # CONFIG_ARCH_FOOTBRIDGE is not set | 88 | # CONFIG_ARCH_FOOTBRIDGE is not set |
90 | # CONFIG_ARCH_INTEGRATOR is not set | 89 | # CONFIG_ARCH_INTEGRATOR is not set |
91 | # CONFIG_ARCH_IOP3XX is not set | 90 | # CONFIG_ARCH_IOP3XX is not set |
diff --git a/arch/arm/configs/csb637_defconfig b/arch/arm/configs/csb637_defconfig index 95a96a5462a0..1519124c5501 100644 --- a/arch/arm/configs/csb637_defconfig +++ b/arch/arm/configs/csb637_defconfig | |||
@@ -85,7 +85,6 @@ CONFIG_DEFAULT_IOSCHED="anticipatory" | |||
85 | # CONFIG_ARCH_CLPS711X is not set | 85 | # CONFIG_ARCH_CLPS711X is not set |
86 | # CONFIG_ARCH_CO285 is not set | 86 | # CONFIG_ARCH_CO285 is not set |
87 | # CONFIG_ARCH_EBSA110 is not set | 87 | # CONFIG_ARCH_EBSA110 is not set |
88 | # CONFIG_ARCH_CAMELOT is not set | ||
89 | # CONFIG_ARCH_FOOTBRIDGE is not set | 88 | # CONFIG_ARCH_FOOTBRIDGE is not set |
90 | # CONFIG_ARCH_INTEGRATOR is not set | 89 | # CONFIG_ARCH_INTEGRATOR is not set |
91 | # CONFIG_ARCH_IOP3XX is not set | 90 | # CONFIG_ARCH_IOP3XX is not set |
diff --git a/arch/arm/configs/enp2611_defconfig b/arch/arm/configs/enp2611_defconfig index 9592e3925c79..5fdaf3ce9d56 100644 --- a/arch/arm/configs/enp2611_defconfig +++ b/arch/arm/configs/enp2611_defconfig | |||
@@ -171,7 +171,7 @@ CONFIG_ALIGNMENT_TRAP=y | |||
171 | # | 171 | # |
172 | CONFIG_ZBOOT_ROM_TEXT=0x0 | 172 | CONFIG_ZBOOT_ROM_TEXT=0x0 |
173 | CONFIG_ZBOOT_ROM_BSS=0x0 | 173 | CONFIG_ZBOOT_ROM_BSS=0x0 |
174 | CONFIG_CMDLINE="console=ttyS0,57600 root=/dev/nfs ip=bootp mem=64M@0x0 pci=firmware" | 174 | CONFIG_CMDLINE="console=ttyS0,57600 root=/dev/nfs ip=bootp mem=64M@0x0" |
175 | # CONFIG_XIP_KERNEL is not set | 175 | # CONFIG_XIP_KERNEL is not set |
176 | 176 | ||
177 | # | 177 | # |
diff --git a/arch/arm/configs/ixdp2400_defconfig b/arch/arm/configs/ixdp2400_defconfig index d9d6bb86a6fa..c67fc449a11f 100644 --- a/arch/arm/configs/ixdp2400_defconfig +++ b/arch/arm/configs/ixdp2400_defconfig | |||
@@ -172,7 +172,7 @@ CONFIG_ALIGNMENT_TRAP=y | |||
172 | # | 172 | # |
173 | CONFIG_ZBOOT_ROM_TEXT=0x0 | 173 | CONFIG_ZBOOT_ROM_TEXT=0x0 |
174 | CONFIG_ZBOOT_ROM_BSS=0x0 | 174 | CONFIG_ZBOOT_ROM_BSS=0x0 |
175 | CONFIG_CMDLINE="console=ttyS0,57600 root=/dev/nfs ip=bootp mem=64M@0x0 pci=firmware" | 175 | CONFIG_CMDLINE="console=ttyS0,57600 root=/dev/nfs ip=bootp mem=64M@0x0" |
176 | # CONFIG_XIP_KERNEL is not set | 176 | # CONFIG_XIP_KERNEL is not set |
177 | 177 | ||
178 | # | 178 | # |
diff --git a/arch/arm/configs/ixdp2401_defconfig b/arch/arm/configs/ixdp2401_defconfig index 2dc9d499c7d7..60d66e82c51f 100644 --- a/arch/arm/configs/ixdp2401_defconfig +++ b/arch/arm/configs/ixdp2401_defconfig | |||
@@ -172,7 +172,7 @@ CONFIG_ALIGNMENT_TRAP=y | |||
172 | # | 172 | # |
173 | CONFIG_ZBOOT_ROM_TEXT=0x0 | 173 | CONFIG_ZBOOT_ROM_TEXT=0x0 |
174 | CONFIG_ZBOOT_ROM_BSS=0x0 | 174 | CONFIG_ZBOOT_ROM_BSS=0x0 |
175 | CONFIG_CMDLINE="console=ttyS0,115200 root=/dev/nfs ip=bootp mem=64M@0x0 pci=firmware" | 175 | CONFIG_CMDLINE="console=ttyS0,115200 root=/dev/nfs ip=bootp mem=64M@0x0" |
176 | # CONFIG_XIP_KERNEL is not set | 176 | # CONFIG_XIP_KERNEL is not set |
177 | 177 | ||
178 | # | 178 | # |
diff --git a/arch/arm/configs/ixdp2801_defconfig b/arch/arm/configs/ixdp2801_defconfig index ea8f4b478fa3..f54f3dcc5b33 100644 --- a/arch/arm/configs/ixdp2801_defconfig +++ b/arch/arm/configs/ixdp2801_defconfig | |||
@@ -172,7 +172,7 @@ CONFIG_ALIGNMENT_TRAP=y | |||
172 | # | 172 | # |
173 | CONFIG_ZBOOT_ROM_TEXT=0x0 | 173 | CONFIG_ZBOOT_ROM_TEXT=0x0 |
174 | CONFIG_ZBOOT_ROM_BSS=0x0 | 174 | CONFIG_ZBOOT_ROM_BSS=0x0 |
175 | CONFIG_CMDLINE="console=ttyS0,115200 root=/dev/nfs ip=bootp mem=64M@0x0 pci=firmware ixdp2x01_clock=50000000" | 175 | CONFIG_CMDLINE="console=ttyS0,115200 root=/dev/nfs ip=bootp mem=64M@0x0" |
176 | # CONFIG_XIP_KERNEL is not set | 176 | # CONFIG_XIP_KERNEL is not set |
177 | 177 | ||
178 | # | 178 | # |
diff --git a/arch/arm/configs/s3c2410_defconfig b/arch/arm/configs/s3c2410_defconfig index 33f31080a98c..6695b07cf1ba 100644 --- a/arch/arm/configs/s3c2410_defconfig +++ b/arch/arm/configs/s3c2410_defconfig | |||
@@ -1,11 +1,10 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.15-rc1 | 3 | # Linux kernel version: 2.6.16-rc2 |
4 | # Sun Nov 13 17:41:24 2005 | 4 | # Mon Feb 6 11:17:23 2006 |
5 | # | 5 | # |
6 | CONFIG_ARM=y | 6 | CONFIG_ARM=y |
7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
8 | CONFIG_UID16=y | ||
9 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | 8 | CONFIG_RWSEM_GENERIC_SPINLOCK=y |
10 | CONFIG_GENERIC_CALIBRATE_DELAY=y | 9 | CONFIG_GENERIC_CALIBRATE_DELAY=y |
11 | 10 | ||
@@ -13,8 +12,7 @@ CONFIG_GENERIC_CALIBRATE_DELAY=y | |||
13 | # Code maturity level options | 12 | # Code maturity level options |
14 | # | 13 | # |
15 | CONFIG_EXPERIMENTAL=y | 14 | CONFIG_EXPERIMENTAL=y |
16 | # CONFIG_CLEAN_COMPILE is not set | 15 | CONFIG_CLEAN_COMPILE=y |
17 | CONFIG_BROKEN=y | ||
18 | CONFIG_BROKEN_ON_SMP=y | 16 | CONFIG_BROKEN_ON_SMP=y |
19 | CONFIG_INIT_ENV_ARG_LIMIT=32 | 17 | CONFIG_INIT_ENV_ARG_LIMIT=32 |
20 | 18 | ||
@@ -29,27 +27,31 @@ CONFIG_SYSVIPC=y | |||
29 | # CONFIG_BSD_PROCESS_ACCT is not set | 27 | # CONFIG_BSD_PROCESS_ACCT is not set |
30 | CONFIG_SYSCTL=y | 28 | CONFIG_SYSCTL=y |
31 | # CONFIG_AUDIT is not set | 29 | # CONFIG_AUDIT is not set |
32 | # CONFIG_HOTPLUG is not set | ||
33 | CONFIG_KOBJECT_UEVENT=y | ||
34 | # CONFIG_IKCONFIG is not set | 30 | # CONFIG_IKCONFIG is not set |
35 | CONFIG_INITRAMFS_SOURCE="" | 31 | CONFIG_INITRAMFS_SOURCE="" |
32 | CONFIG_UID16=y | ||
33 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
36 | # CONFIG_EMBEDDED is not set | 34 | # CONFIG_EMBEDDED is not set |
37 | CONFIG_KALLSYMS=y | 35 | CONFIG_KALLSYMS=y |
38 | # CONFIG_KALLSYMS_ALL is not set | 36 | # CONFIG_KALLSYMS_ALL is not set |
39 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 37 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
38 | CONFIG_HOTPLUG=y | ||
40 | CONFIG_PRINTK=y | 39 | CONFIG_PRINTK=y |
41 | CONFIG_BUG=y | 40 | CONFIG_BUG=y |
41 | CONFIG_ELF_CORE=y | ||
42 | CONFIG_BASE_FULL=y | 42 | CONFIG_BASE_FULL=y |
43 | CONFIG_FUTEX=y | 43 | CONFIG_FUTEX=y |
44 | CONFIG_EPOLL=y | 44 | CONFIG_EPOLL=y |
45 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
46 | CONFIG_SHMEM=y | 45 | CONFIG_SHMEM=y |
47 | CONFIG_CC_ALIGN_FUNCTIONS=0 | 46 | CONFIG_CC_ALIGN_FUNCTIONS=0 |
48 | CONFIG_CC_ALIGN_LABELS=0 | 47 | CONFIG_CC_ALIGN_LABELS=0 |
49 | CONFIG_CC_ALIGN_LOOPS=0 | 48 | CONFIG_CC_ALIGN_LOOPS=0 |
50 | CONFIG_CC_ALIGN_JUMPS=0 | 49 | CONFIG_CC_ALIGN_JUMPS=0 |
50 | CONFIG_SLAB=y | ||
51 | # CONFIG_TINY_SHMEM is not set | 51 | # CONFIG_TINY_SHMEM is not set |
52 | CONFIG_BASE_SMALL=0 | 52 | CONFIG_BASE_SMALL=0 |
53 | # CONFIG_SLOB is not set | ||
54 | CONFIG_OBSOLETE_INTERMODULE=y | ||
53 | 55 | ||
54 | # | 56 | # |
55 | # Loadable module support | 57 | # Loadable module support |
@@ -103,6 +105,7 @@ CONFIG_ARCH_S3C2410=y | |||
103 | # CONFIG_ARCH_IMX is not set | 105 | # CONFIG_ARCH_IMX is not set |
104 | # CONFIG_ARCH_H720X is not set | 106 | # CONFIG_ARCH_H720X is not set |
105 | # CONFIG_ARCH_AAEC2000 is not set | 107 | # CONFIG_ARCH_AAEC2000 is not set |
108 | # CONFIG_ARCH_AT91RM9200 is not set | ||
106 | 109 | ||
107 | # | 110 | # |
108 | # S3C24XX Implementations | 111 | # S3C24XX Implementations |
@@ -161,7 +164,6 @@ CONFIG_CPU_TLB_V4WBI=y | |||
161 | # Bus support | 164 | # Bus support |
162 | # | 165 | # |
163 | CONFIG_ISA=y | 166 | CONFIG_ISA=y |
164 | CONFIG_ISA_DMA_API=y | ||
165 | 167 | ||
166 | # | 168 | # |
167 | # PCCARD (PCMCIA/CardBus) support | 169 | # PCCARD (PCMCIA/CardBus) support |
@@ -173,6 +175,7 @@ CONFIG_ISA_DMA_API=y | |||
173 | # | 175 | # |
174 | # CONFIG_PREEMPT is not set | 176 | # CONFIG_PREEMPT is not set |
175 | # CONFIG_NO_IDLE_HZ is not set | 177 | # CONFIG_NO_IDLE_HZ is not set |
178 | # CONFIG_AEABI is not set | ||
176 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set | 179 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set |
177 | CONFIG_SELECT_MEMORY_MODEL=y | 180 | CONFIG_SELECT_MEMORY_MODEL=y |
178 | CONFIG_FLATMEM_MANUAL=y | 181 | CONFIG_FLATMEM_MANUAL=y |
@@ -215,6 +218,8 @@ CONFIG_BINFMT_AOUT=y | |||
215 | # Power management options | 218 | # Power management options |
216 | # | 219 | # |
217 | CONFIG_PM=y | 220 | CONFIG_PM=y |
221 | CONFIG_PM_LEGACY=y | ||
222 | # CONFIG_PM_DEBUG is not set | ||
218 | CONFIG_APM=y | 223 | CONFIG_APM=y |
219 | 224 | ||
220 | # | 225 | # |
@@ -260,6 +265,11 @@ CONFIG_TCP_CONG_BIC=y | |||
260 | # SCTP Configuration (EXPERIMENTAL) | 265 | # SCTP Configuration (EXPERIMENTAL) |
261 | # | 266 | # |
262 | # CONFIG_IP_SCTP is not set | 267 | # CONFIG_IP_SCTP is not set |
268 | |||
269 | # | ||
270 | # TIPC Configuration (EXPERIMENTAL) | ||
271 | # | ||
272 | # CONFIG_TIPC is not set | ||
263 | # CONFIG_ATM is not set | 273 | # CONFIG_ATM is not set |
264 | # CONFIG_BRIDGE is not set | 274 | # CONFIG_BRIDGE is not set |
265 | # CONFIG_VLAN_8021Q is not set | 275 | # CONFIG_VLAN_8021Q is not set |
@@ -277,7 +287,6 @@ CONFIG_TCP_CONG_BIC=y | |||
277 | # QoS and/or fair queueing | 287 | # QoS and/or fair queueing |
278 | # | 288 | # |
279 | # CONFIG_NET_SCHED is not set | 289 | # CONFIG_NET_SCHED is not set |
280 | # CONFIG_NET_CLS_ROUTE is not set | ||
281 | 290 | ||
282 | # | 291 | # |
283 | # Network testing | 292 | # Network testing |
@@ -301,6 +310,11 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y | |||
301 | # CONFIG_DEBUG_DRIVER is not set | 310 | # CONFIG_DEBUG_DRIVER is not set |
302 | 311 | ||
303 | # | 312 | # |
313 | # Connector - unified userspace <-> kernelspace linker | ||
314 | # | ||
315 | # CONFIG_CONNECTOR is not set | ||
316 | |||
317 | # | ||
304 | # Memory Technology Devices (MTD) | 318 | # Memory Technology Devices (MTD) |
305 | # | 319 | # |
306 | CONFIG_MTD=y | 320 | CONFIG_MTD=y |
@@ -413,8 +427,6 @@ CONFIG_PARPORT_1284=y | |||
413 | # | 427 | # |
414 | # Block devices | 428 | # Block devices |
415 | # | 429 | # |
416 | # CONFIG_BLK_DEV_XD is not set | ||
417 | # CONFIG_PARIDE is not set | ||
418 | # CONFIG_BLK_DEV_COW_COMMON is not set | 430 | # CONFIG_BLK_DEV_COW_COMMON is not set |
419 | CONFIG_BLK_DEV_LOOP=y | 431 | CONFIG_BLK_DEV_LOOP=y |
420 | # CONFIG_BLK_DEV_CRYPTOLOOP is not set | 432 | # CONFIG_BLK_DEV_CRYPTOLOOP is not set |
@@ -473,7 +485,6 @@ CONFIG_BLK_DEV_IDE_BAST=y | |||
473 | # | 485 | # |
474 | # IEEE 1394 (FireWire) support | 486 | # IEEE 1394 (FireWire) support |
475 | # | 487 | # |
476 | # CONFIG_IEEE1394 is not set | ||
477 | 488 | ||
478 | # | 489 | # |
479 | # I2O device support | 490 | # I2O device support |
@@ -504,7 +515,6 @@ CONFIG_NETDEVICES=y | |||
504 | CONFIG_NET_ETHERNET=y | 515 | CONFIG_NET_ETHERNET=y |
505 | CONFIG_MII=y | 516 | CONFIG_MII=y |
506 | # CONFIG_NET_VENDOR_3COM is not set | 517 | # CONFIG_NET_VENDOR_3COM is not set |
507 | # CONFIG_LANCE is not set | ||
508 | # CONFIG_NET_VENDOR_SMC is not set | 518 | # CONFIG_NET_VENDOR_SMC is not set |
509 | # CONFIG_SMC91X is not set | 519 | # CONFIG_SMC91X is not set |
510 | CONFIG_DM9000=y | 520 | CONFIG_DM9000=y |
@@ -609,11 +619,11 @@ CONFIG_SERIAL_NONSTANDARD=y | |||
609 | # CONFIG_ROCKETPORT is not set | 619 | # CONFIG_ROCKETPORT is not set |
610 | # CONFIG_CYCLADES is not set | 620 | # CONFIG_CYCLADES is not set |
611 | # CONFIG_DIGIEPCA is not set | 621 | # CONFIG_DIGIEPCA is not set |
612 | # CONFIG_ESPSERIAL is not set | ||
613 | # CONFIG_MOXA_INTELLIO is not set | 622 | # CONFIG_MOXA_INTELLIO is not set |
614 | # CONFIG_MOXA_SMARTIO is not set | 623 | # CONFIG_MOXA_SMARTIO is not set |
615 | # CONFIG_ISI is not set | 624 | # CONFIG_ISI is not set |
616 | # CONFIG_SYNCLINKMP is not set | 625 | # CONFIG_SYNCLINKMP is not set |
626 | # CONFIG_SYNCLINK_GT is not set | ||
617 | # CONFIG_N_HDLC is not set | 627 | # CONFIG_N_HDLC is not set |
618 | # CONFIG_RISCOM8 is not set | 628 | # CONFIG_RISCOM8 is not set |
619 | # CONFIG_SPECIALIX is not set | 629 | # CONFIG_SPECIALIX is not set |
@@ -627,6 +637,7 @@ CONFIG_SERIAL_NONSTANDARD=y | |||
627 | CONFIG_SERIAL_8250=y | 637 | CONFIG_SERIAL_8250=y |
628 | CONFIG_SERIAL_8250_CONSOLE=y | 638 | CONFIG_SERIAL_8250_CONSOLE=y |
629 | CONFIG_SERIAL_8250_NR_UARTS=8 | 639 | CONFIG_SERIAL_8250_NR_UARTS=8 |
640 | CONFIG_SERIAL_8250_RUNTIME_UARTS=4 | ||
630 | CONFIG_SERIAL_8250_EXTENDED=y | 641 | CONFIG_SERIAL_8250_EXTENDED=y |
631 | CONFIG_SERIAL_8250_MANY_PORTS=y | 642 | CONFIG_SERIAL_8250_MANY_PORTS=y |
632 | CONFIG_SERIAL_8250_SHARE_IRQ=y | 643 | CONFIG_SERIAL_8250_SHARE_IRQ=y |
@@ -689,6 +700,7 @@ CONFIG_S3C2410_RTC=y | |||
689 | # | 700 | # |
690 | # TPM devices | 701 | # TPM devices |
691 | # | 702 | # |
703 | # CONFIG_TCG_TPM is not set | ||
692 | # CONFIG_TELCLOCK is not set | 704 | # CONFIG_TELCLOCK is not set |
693 | 705 | ||
694 | # | 706 | # |
@@ -733,6 +745,12 @@ CONFIG_SENSORS_EEPROM=m | |||
733 | # CONFIG_I2C_DEBUG_CHIP is not set | 745 | # CONFIG_I2C_DEBUG_CHIP is not set |
734 | 746 | ||
735 | # | 747 | # |
748 | # SPI support | ||
749 | # | ||
750 | # CONFIG_SPI is not set | ||
751 | # CONFIG_SPI_MASTER is not set | ||
752 | |||
753 | # | ||
736 | # Hardware Monitoring support | 754 | # Hardware Monitoring support |
737 | # | 755 | # |
738 | CONFIG_HWMON=y | 756 | CONFIG_HWMON=y |
@@ -865,6 +883,7 @@ CONFIG_FS_MBCACHE=y | |||
865 | # CONFIG_JFS_FS is not set | 883 | # CONFIG_JFS_FS is not set |
866 | # CONFIG_FS_POSIX_ACL is not set | 884 | # CONFIG_FS_POSIX_ACL is not set |
867 | # CONFIG_XFS_FS is not set | 885 | # CONFIG_XFS_FS is not set |
886 | # CONFIG_OCFS2_FS is not set | ||
868 | # CONFIG_MINIX_FS is not set | 887 | # CONFIG_MINIX_FS is not set |
869 | CONFIG_ROMFS_FS=y | 888 | CONFIG_ROMFS_FS=y |
870 | CONFIG_INOTIFY=y | 889 | CONFIG_INOTIFY=y |
@@ -896,10 +915,10 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | |||
896 | CONFIG_PROC_FS=y | 915 | CONFIG_PROC_FS=y |
897 | CONFIG_SYSFS=y | 916 | CONFIG_SYSFS=y |
898 | # CONFIG_TMPFS is not set | 917 | # CONFIG_TMPFS is not set |
899 | # CONFIG_HUGETLBFS is not set | ||
900 | # CONFIG_HUGETLB_PAGE is not set | 918 | # CONFIG_HUGETLB_PAGE is not set |
901 | CONFIG_RAMFS=y | 919 | CONFIG_RAMFS=y |
902 | # CONFIG_RELAYFS_FS is not set | 920 | # CONFIG_RELAYFS_FS is not set |
921 | # CONFIG_CONFIGFS_FS is not set | ||
903 | 922 | ||
904 | # | 923 | # |
905 | # Miscellaneous filesystems | 924 | # Miscellaneous filesystems |
@@ -968,6 +987,7 @@ CONFIG_SOLARIS_X86_PARTITION=y | |||
968 | # CONFIG_SGI_PARTITION is not set | 987 | # CONFIG_SGI_PARTITION is not set |
969 | # CONFIG_ULTRIX_PARTITION is not set | 988 | # CONFIG_ULTRIX_PARTITION is not set |
970 | # CONFIG_SUN_PARTITION is not set | 989 | # CONFIG_SUN_PARTITION is not set |
990 | # CONFIG_KARMA_PARTITION is not set | ||
971 | # CONFIG_EFI_PARTITION is not set | 991 | # CONFIG_EFI_PARTITION is not set |
972 | 992 | ||
973 | # | 993 | # |
@@ -1023,12 +1043,13 @@ CONFIG_NLS_DEFAULT="iso8859-1" | |||
1023 | # Kernel hacking | 1043 | # Kernel hacking |
1024 | # | 1044 | # |
1025 | # CONFIG_PRINTK_TIME is not set | 1045 | # CONFIG_PRINTK_TIME is not set |
1026 | CONFIG_DEBUG_KERNEL=y | ||
1027 | CONFIG_MAGIC_SYSRQ=y | 1046 | CONFIG_MAGIC_SYSRQ=y |
1047 | CONFIG_DEBUG_KERNEL=y | ||
1028 | CONFIG_LOG_BUF_SHIFT=16 | 1048 | CONFIG_LOG_BUF_SHIFT=16 |
1029 | CONFIG_DETECT_SOFTLOCKUP=y | 1049 | CONFIG_DETECT_SOFTLOCKUP=y |
1030 | # CONFIG_SCHEDSTATS is not set | 1050 | # CONFIG_SCHEDSTATS is not set |
1031 | # CONFIG_DEBUG_SLAB is not set | 1051 | # CONFIG_DEBUG_SLAB is not set |
1052 | CONFIG_DEBUG_MUTEXES=y | ||
1032 | # CONFIG_DEBUG_SPINLOCK is not set | 1053 | # CONFIG_DEBUG_SPINLOCK is not set |
1033 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | 1054 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set |
1034 | # CONFIG_DEBUG_KOBJECT is not set | 1055 | # CONFIG_DEBUG_KOBJECT is not set |
@@ -1037,6 +1058,7 @@ CONFIG_DEBUG_INFO=y | |||
1037 | # CONFIG_DEBUG_FS is not set | 1058 | # CONFIG_DEBUG_FS is not set |
1038 | # CONFIG_DEBUG_VM is not set | 1059 | # CONFIG_DEBUG_VM is not set |
1039 | CONFIG_FRAME_POINTER=y | 1060 | CONFIG_FRAME_POINTER=y |
1061 | CONFIG_FORCED_INLINING=y | ||
1040 | # CONFIG_RCU_TORTURE_TEST is not set | 1062 | # CONFIG_RCU_TORTURE_TEST is not set |
1041 | CONFIG_DEBUG_USER=y | 1063 | CONFIG_DEBUG_USER=y |
1042 | # CONFIG_DEBUG_WAITQ is not set | 1064 | # CONFIG_DEBUG_WAITQ is not set |
diff --git a/arch/arm/kernel/asm-offsets.c b/arch/arm/kernel/asm-offsets.c index 0abbce8c70bc..b324dcac1c56 100644 --- a/arch/arm/kernel/asm-offsets.c +++ b/arch/arm/kernel/asm-offsets.c | |||
@@ -57,7 +57,9 @@ int main(void) | |||
57 | DEFINE(TI_TP_VALUE, offsetof(struct thread_info, tp_value)); | 57 | DEFINE(TI_TP_VALUE, offsetof(struct thread_info, tp_value)); |
58 | DEFINE(TI_FPSTATE, offsetof(struct thread_info, fpstate)); | 58 | DEFINE(TI_FPSTATE, offsetof(struct thread_info, fpstate)); |
59 | DEFINE(TI_VFPSTATE, offsetof(struct thread_info, vfpstate)); | 59 | DEFINE(TI_VFPSTATE, offsetof(struct thread_info, vfpstate)); |
60 | DEFINE(TI_IWMMXT_STATE, (offsetof(struct thread_info, fpstate)+4)&~7); | 60 | #ifdef CONFIG_IWMMXT |
61 | DEFINE(TI_IWMMXT_STATE, offsetof(struct thread_info, fpstate.iwmmxt)); | ||
62 | #endif | ||
61 | BLANK(); | 63 | BLANK(); |
62 | DEFINE(S_R0, offsetof(struct pt_regs, ARM_r0)); | 64 | DEFINE(S_R0, offsetof(struct pt_regs, ARM_r0)); |
63 | DEFINE(S_R1, offsetof(struct pt_regs, ARM_r1)); | 65 | DEFINE(S_R1, offsetof(struct pt_regs, ARM_r1)); |
diff --git a/arch/arm/kernel/calls.S b/arch/arm/kernel/calls.S index 75e6f9a94713..3173924a9b60 100644 --- a/arch/arm/kernel/calls.S +++ b/arch/arm/kernel/calls.S | |||
@@ -7,337 +7,334 @@ | |||
7 | * it under the terms of the GNU General Public License version 2 as | 7 | * it under the terms of the GNU General Public License version 2 as |
8 | * published by the Free Software Foundation. | 8 | * published by the Free Software Foundation. |
9 | * | 9 | * |
10 | * This file is included twice in entry-common.S | 10 | * This file is included thrice in entry-common.S |
11 | */ | 11 | */ |
12 | #ifndef NR_syscalls | 12 | /* 0 */ CALL(sys_restart_syscall) |
13 | #define NR_syscalls 328 | 13 | CALL(sys_exit) |
14 | #else | 14 | CALL(sys_fork_wrapper) |
15 | 15 | CALL(sys_read) | |
16 | 100: | 16 | CALL(sys_write) |
17 | /* 0 */ .long sys_restart_syscall | 17 | /* 5 */ CALL(sys_open) |
18 | .long sys_exit | 18 | CALL(sys_close) |
19 | .long sys_fork_wrapper | 19 | CALL(sys_ni_syscall) /* was sys_waitpid */ |
20 | .long sys_read | 20 | CALL(sys_creat) |
21 | .long sys_write | 21 | CALL(sys_link) |
22 | /* 5 */ .long sys_open | 22 | /* 10 */ CALL(sys_unlink) |
23 | .long sys_close | 23 | CALL(sys_execve_wrapper) |
24 | .long sys_ni_syscall /* was sys_waitpid */ | 24 | CALL(sys_chdir) |
25 | .long sys_creat | 25 | CALL(OBSOLETE(sys_time)) /* used by libc4 */ |
26 | .long sys_link | 26 | CALL(sys_mknod) |
27 | /* 10 */ .long sys_unlink | 27 | /* 15 */ CALL(sys_chmod) |
28 | .long sys_execve_wrapper | 28 | CALL(sys_lchown16) |
29 | .long sys_chdir | 29 | CALL(sys_ni_syscall) /* was sys_break */ |
30 | .long OBSOLETE(sys_time) /* used by libc4 */ | 30 | CALL(sys_ni_syscall) /* was sys_stat */ |
31 | .long sys_mknod | 31 | CALL(sys_lseek) |
32 | /* 15 */ .long sys_chmod | 32 | /* 20 */ CALL(sys_getpid) |
33 | .long sys_lchown16 | 33 | CALL(sys_mount) |
34 | .long sys_ni_syscall /* was sys_break */ | 34 | CALL(OBSOLETE(sys_oldumount)) /* used by libc4 */ |
35 | .long sys_ni_syscall /* was sys_stat */ | 35 | CALL(sys_setuid16) |
36 | .long sys_lseek | 36 | CALL(sys_getuid16) |
37 | /* 20 */ .long sys_getpid | 37 | /* 25 */ CALL(OBSOLETE(sys_stime)) |
38 | .long sys_mount | 38 | CALL(sys_ptrace) |
39 | .long OBSOLETE(sys_oldumount) /* used by libc4 */ | 39 | CALL(OBSOLETE(sys_alarm)) /* used by libc4 */ |
40 | .long sys_setuid16 | 40 | CALL(sys_ni_syscall) /* was sys_fstat */ |
41 | .long sys_getuid16 | 41 | CALL(sys_pause) |
42 | /* 25 */ .long OBSOLETE(sys_stime) | 42 | /* 30 */ CALL(OBSOLETE(sys_utime)) /* used by libc4 */ |
43 | .long sys_ptrace | 43 | CALL(sys_ni_syscall) /* was sys_stty */ |
44 | .long OBSOLETE(sys_alarm) /* used by libc4 */ | 44 | CALL(sys_ni_syscall) /* was sys_getty */ |
45 | .long sys_ni_syscall /* was sys_fstat */ | 45 | CALL(sys_access) |
46 | .long sys_pause | 46 | CALL(sys_nice) |
47 | /* 30 */ .long OBSOLETE(sys_utime) /* used by libc4 */ | 47 | /* 35 */ CALL(sys_ni_syscall) /* was sys_ftime */ |
48 | .long sys_ni_syscall /* was sys_stty */ | 48 | CALL(sys_sync) |
49 | .long sys_ni_syscall /* was sys_getty */ | 49 | CALL(sys_kill) |
50 | .long sys_access | 50 | CALL(sys_rename) |
51 | .long sys_nice | 51 | CALL(sys_mkdir) |
52 | /* 35 */ .long sys_ni_syscall /* was sys_ftime */ | 52 | /* 40 */ CALL(sys_rmdir) |
53 | .long sys_sync | 53 | CALL(sys_dup) |
54 | .long sys_kill | 54 | CALL(sys_pipe) |
55 | .long sys_rename | 55 | CALL(sys_times) |
56 | .long sys_mkdir | 56 | CALL(sys_ni_syscall) /* was sys_prof */ |
57 | /* 40 */ .long sys_rmdir | 57 | /* 45 */ CALL(sys_brk) |
58 | .long sys_dup | 58 | CALL(sys_setgid16) |
59 | .long sys_pipe | 59 | CALL(sys_getgid16) |
60 | .long sys_times | 60 | CALL(sys_ni_syscall) /* was sys_signal */ |
61 | .long sys_ni_syscall /* was sys_prof */ | 61 | CALL(sys_geteuid16) |
62 | /* 45 */ .long sys_brk | 62 | /* 50 */ CALL(sys_getegid16) |
63 | .long sys_setgid16 | 63 | CALL(sys_acct) |
64 | .long sys_getgid16 | 64 | CALL(sys_umount) |
65 | .long sys_ni_syscall /* was sys_signal */ | 65 | CALL(sys_ni_syscall) /* was sys_lock */ |
66 | .long sys_geteuid16 | 66 | CALL(sys_ioctl) |
67 | /* 50 */ .long sys_getegid16 | 67 | /* 55 */ CALL(sys_fcntl) |
68 | .long sys_acct | 68 | CALL(sys_ni_syscall) /* was sys_mpx */ |
69 | .long sys_umount | 69 | CALL(sys_setpgid) |
70 | .long sys_ni_syscall /* was sys_lock */ | 70 | CALL(sys_ni_syscall) /* was sys_ulimit */ |
71 | .long sys_ioctl | 71 | CALL(sys_ni_syscall) /* was sys_olduname */ |
72 | /* 55 */ .long sys_fcntl | 72 | /* 60 */ CALL(sys_umask) |
73 | .long sys_ni_syscall /* was sys_mpx */ | 73 | CALL(sys_chroot) |
74 | .long sys_setpgid | 74 | CALL(sys_ustat) |
75 | .long sys_ni_syscall /* was sys_ulimit */ | 75 | CALL(sys_dup2) |
76 | .long sys_ni_syscall /* was sys_olduname */ | 76 | CALL(sys_getppid) |
77 | /* 60 */ .long sys_umask | 77 | /* 65 */ CALL(sys_getpgrp) |
78 | .long sys_chroot | 78 | CALL(sys_setsid) |
79 | .long sys_ustat | 79 | CALL(sys_sigaction) |
80 | .long sys_dup2 | 80 | CALL(sys_ni_syscall) /* was sys_sgetmask */ |
81 | .long sys_getppid | 81 | CALL(sys_ni_syscall) /* was sys_ssetmask */ |
82 | /* 65 */ .long sys_getpgrp | 82 | /* 70 */ CALL(sys_setreuid16) |
83 | .long sys_setsid | 83 | CALL(sys_setregid16) |
84 | .long sys_sigaction | 84 | CALL(sys_sigsuspend_wrapper) |
85 | .long sys_ni_syscall /* was sys_sgetmask */ | 85 | CALL(sys_sigpending) |
86 | .long sys_ni_syscall /* was sys_ssetmask */ | 86 | CALL(sys_sethostname) |
87 | /* 70 */ .long sys_setreuid16 | 87 | /* 75 */ CALL(sys_setrlimit) |
88 | .long sys_setregid16 | 88 | CALL(OBSOLETE(sys_old_getrlimit)) /* used by libc4 */ |
89 | .long sys_sigsuspend_wrapper | 89 | CALL(sys_getrusage) |
90 | .long sys_sigpending | 90 | CALL(sys_gettimeofday) |
91 | .long sys_sethostname | 91 | CALL(sys_settimeofday) |
92 | /* 75 */ .long sys_setrlimit | 92 | /* 80 */ CALL(sys_getgroups16) |
93 | .long OBSOLETE(sys_old_getrlimit) /* used by libc4 */ | 93 | CALL(sys_setgroups16) |
94 | .long sys_getrusage | 94 | CALL(OBSOLETE(old_select)) /* used by libc4 */ |
95 | .long sys_gettimeofday | 95 | CALL(sys_symlink) |
96 | .long sys_settimeofday | 96 | CALL(sys_ni_syscall) /* was sys_lstat */ |
97 | /* 80 */ .long sys_getgroups16 | 97 | /* 85 */ CALL(sys_readlink) |
98 | .long sys_setgroups16 | 98 | CALL(sys_uselib) |
99 | .long OBSOLETE(old_select) /* used by libc4 */ | 99 | CALL(sys_swapon) |
100 | .long sys_symlink | 100 | CALL(sys_reboot) |
101 | .long sys_ni_syscall /* was sys_lstat */ | 101 | CALL(OBSOLETE(old_readdir)) /* used by libc4 */ |
102 | /* 85 */ .long sys_readlink | 102 | /* 90 */ CALL(OBSOLETE(old_mmap)) /* used by libc4 */ |
103 | .long sys_uselib | 103 | CALL(sys_munmap) |
104 | .long sys_swapon | 104 | CALL(sys_truncate) |
105 | .long sys_reboot | 105 | CALL(sys_ftruncate) |
106 | .long OBSOLETE(old_readdir) /* used by libc4 */ | 106 | CALL(sys_fchmod) |
107 | /* 90 */ .long OBSOLETE(old_mmap) /* used by libc4 */ | 107 | /* 95 */ CALL(sys_fchown16) |
108 | .long sys_munmap | 108 | CALL(sys_getpriority) |
109 | .long sys_truncate | 109 | CALL(sys_setpriority) |
110 | .long sys_ftruncate | 110 | CALL(sys_ni_syscall) /* was sys_profil */ |
111 | .long sys_fchmod | 111 | CALL(sys_statfs) |
112 | /* 95 */ .long sys_fchown16 | 112 | /* 100 */ CALL(sys_fstatfs) |
113 | .long sys_getpriority | 113 | CALL(sys_ni_syscall) |
114 | .long sys_setpriority | 114 | CALL(OBSOLETE(ABI(sys_socketcall, sys_oabi_socketcall))) |
115 | .long sys_ni_syscall /* was sys_profil */ | 115 | CALL(sys_syslog) |
116 | .long sys_statfs | 116 | CALL(sys_setitimer) |
117 | /* 100 */ .long sys_fstatfs | 117 | /* 105 */ CALL(sys_getitimer) |
118 | .long sys_ni_syscall | 118 | CALL(sys_newstat) |
119 | .long OBSOLETE(sys_socketcall) | 119 | CALL(sys_newlstat) |
120 | .long sys_syslog | 120 | CALL(sys_newfstat) |
121 | .long sys_setitimer | 121 | CALL(sys_ni_syscall) /* was sys_uname */ |
122 | /* 105 */ .long sys_getitimer | 122 | /* 110 */ CALL(sys_ni_syscall) /* was sys_iopl */ |
123 | .long sys_newstat | 123 | CALL(sys_vhangup) |
124 | .long sys_newlstat | 124 | CALL(sys_ni_syscall) |
125 | .long sys_newfstat | 125 | CALL(OBSOLETE(sys_syscall)) /* call a syscall */ |
126 | .long sys_ni_syscall /* was sys_uname */ | 126 | CALL(sys_wait4) |
127 | /* 110 */ .long sys_ni_syscall /* was sys_iopl */ | 127 | /* 115 */ CALL(sys_swapoff) |
128 | .long sys_vhangup | 128 | CALL(sys_sysinfo) |
129 | .long sys_ni_syscall | 129 | CALL(OBSOLETE(ABI(sys_ipc, sys_oabi_ipc))) |
130 | .long OBSOLETE(sys_syscall) /* call a syscall */ | 130 | CALL(sys_fsync) |
131 | .long sys_wait4 | 131 | CALL(sys_sigreturn_wrapper) |
132 | /* 115 */ .long sys_swapoff | 132 | /* 120 */ CALL(sys_clone_wrapper) |
133 | .long sys_sysinfo | 133 | CALL(sys_setdomainname) |
134 | .long OBSOLETE(ABI(sys_ipc, sys_oabi_ipc)) | 134 | CALL(sys_newuname) |
135 | .long sys_fsync | 135 | CALL(sys_ni_syscall) |
136 | .long sys_sigreturn_wrapper | 136 | CALL(sys_adjtimex) |
137 | /* 120 */ .long sys_clone_wrapper | 137 | /* 125 */ CALL(sys_mprotect) |
138 | .long sys_setdomainname | 138 | CALL(sys_sigprocmask) |
139 | .long sys_newuname | 139 | CALL(sys_ni_syscall) /* was sys_create_module */ |
140 | .long sys_ni_syscall | 140 | CALL(sys_init_module) |
141 | .long sys_adjtimex | 141 | CALL(sys_delete_module) |
142 | /* 125 */ .long sys_mprotect | 142 | /* 130 */ CALL(sys_ni_syscall) /* was sys_get_kernel_syms */ |
143 | .long sys_sigprocmask | 143 | CALL(sys_quotactl) |
144 | .long sys_ni_syscall /* was sys_create_module */ | 144 | CALL(sys_getpgid) |
145 | .long sys_init_module | 145 | CALL(sys_fchdir) |
146 | .long sys_delete_module | 146 | CALL(sys_bdflush) |
147 | /* 130 */ .long sys_ni_syscall /* was sys_get_kernel_syms */ | 147 | /* 135 */ CALL(sys_sysfs) |
148 | .long sys_quotactl | 148 | CALL(sys_personality) |
149 | .long sys_getpgid | 149 | CALL(sys_ni_syscall) /* CALL(_sys_afs_syscall) */ |
150 | .long sys_fchdir | 150 | CALL(sys_setfsuid16) |
151 | .long sys_bdflush | 151 | CALL(sys_setfsgid16) |
152 | /* 135 */ .long sys_sysfs | 152 | /* 140 */ CALL(sys_llseek) |
153 | .long sys_personality | 153 | CALL(sys_getdents) |
154 | .long sys_ni_syscall /* .long _sys_afs_syscall */ | 154 | CALL(sys_select) |
155 | .long sys_setfsuid16 | 155 | CALL(sys_flock) |
156 | .long sys_setfsgid16 | 156 | CALL(sys_msync) |
157 | /* 140 */ .long sys_llseek | 157 | /* 145 */ CALL(sys_readv) |
158 | .long sys_getdents | 158 | CALL(sys_writev) |
159 | .long sys_select | 159 | CALL(sys_getsid) |
160 | .long sys_flock | 160 | CALL(sys_fdatasync) |
161 | .long sys_msync | 161 | CALL(sys_sysctl) |
162 | /* 145 */ .long sys_readv | 162 | /* 150 */ CALL(sys_mlock) |
163 | .long sys_writev | 163 | CALL(sys_munlock) |
164 | .long sys_getsid | 164 | CALL(sys_mlockall) |
165 | .long sys_fdatasync | 165 | CALL(sys_munlockall) |
166 | .long sys_sysctl | 166 | CALL(sys_sched_setparam) |
167 | /* 150 */ .long sys_mlock | 167 | /* 155 */ CALL(sys_sched_getparam) |
168 | .long sys_munlock | 168 | CALL(sys_sched_setscheduler) |
169 | .long sys_mlockall | 169 | CALL(sys_sched_getscheduler) |
170 | .long sys_munlockall | 170 | CALL(sys_sched_yield) |
171 | .long sys_sched_setparam | 171 | CALL(sys_sched_get_priority_max) |
172 | /* 155 */ .long sys_sched_getparam | 172 | /* 160 */ CALL(sys_sched_get_priority_min) |
173 | .long sys_sched_setscheduler | 173 | CALL(sys_sched_rr_get_interval) |
174 | .long sys_sched_getscheduler | 174 | CALL(sys_nanosleep) |
175 | .long sys_sched_yield | 175 | CALL(sys_arm_mremap) |
176 | .long sys_sched_get_priority_max | 176 | CALL(sys_setresuid16) |
177 | /* 160 */ .long sys_sched_get_priority_min | 177 | /* 165 */ CALL(sys_getresuid16) |
178 | .long sys_sched_rr_get_interval | 178 | CALL(sys_ni_syscall) |
179 | .long sys_nanosleep | 179 | CALL(sys_ni_syscall) /* was sys_query_module */ |
180 | .long sys_arm_mremap | 180 | CALL(sys_poll) |
181 | .long sys_setresuid16 | 181 | CALL(sys_nfsservctl) |
182 | /* 165 */ .long sys_getresuid16 | 182 | /* 170 */ CALL(sys_setresgid16) |
183 | .long sys_ni_syscall | 183 | CALL(sys_getresgid16) |
184 | .long sys_ni_syscall /* was sys_query_module */ | 184 | CALL(sys_prctl) |
185 | .long sys_poll | 185 | CALL(sys_rt_sigreturn_wrapper) |
186 | .long sys_nfsservctl | 186 | CALL(sys_rt_sigaction) |
187 | /* 170 */ .long sys_setresgid16 | 187 | /* 175 */ CALL(sys_rt_sigprocmask) |
188 | .long sys_getresgid16 | 188 | CALL(sys_rt_sigpending) |
189 | .long sys_prctl | 189 | CALL(sys_rt_sigtimedwait) |
190 | .long sys_rt_sigreturn_wrapper | 190 | CALL(sys_rt_sigqueueinfo) |
191 | .long sys_rt_sigaction | 191 | CALL(sys_rt_sigsuspend_wrapper) |
192 | /* 175 */ .long sys_rt_sigprocmask | 192 | /* 180 */ CALL(ABI(sys_pread64, sys_oabi_pread64)) |
193 | .long sys_rt_sigpending | 193 | CALL(ABI(sys_pwrite64, sys_oabi_pwrite64)) |
194 | .long sys_rt_sigtimedwait | 194 | CALL(sys_chown16) |
195 | .long sys_rt_sigqueueinfo | 195 | CALL(sys_getcwd) |
196 | .long sys_rt_sigsuspend_wrapper | 196 | CALL(sys_capget) |
197 | /* 180 */ .long ABI(sys_pread64, sys_oabi_pread64) | 197 | /* 185 */ CALL(sys_capset) |
198 | .long ABI(sys_pwrite64, sys_oabi_pwrite64) | 198 | CALL(sys_sigaltstack_wrapper) |
199 | .long sys_chown16 | 199 | CALL(sys_sendfile) |
200 | .long sys_getcwd | 200 | CALL(sys_ni_syscall) |
201 | .long sys_capget | 201 | CALL(sys_ni_syscall) |
202 | /* 185 */ .long sys_capset | 202 | /* 190 */ CALL(sys_vfork_wrapper) |
203 | .long sys_sigaltstack_wrapper | 203 | CALL(sys_getrlimit) |
204 | .long sys_sendfile | 204 | CALL(sys_mmap2) |
205 | .long sys_ni_syscall | 205 | CALL(ABI(sys_truncate64, sys_oabi_truncate64)) |
206 | .long sys_ni_syscall | 206 | CALL(ABI(sys_ftruncate64, sys_oabi_ftruncate64)) |
207 | /* 190 */ .long sys_vfork_wrapper | 207 | /* 195 */ CALL(ABI(sys_stat64, sys_oabi_stat64)) |
208 | .long sys_getrlimit | 208 | CALL(ABI(sys_lstat64, sys_oabi_lstat64)) |
209 | .long sys_mmap2 | 209 | CALL(ABI(sys_fstat64, sys_oabi_fstat64)) |
210 | .long ABI(sys_truncate64, sys_oabi_truncate64) | 210 | CALL(sys_lchown) |
211 | .long ABI(sys_ftruncate64, sys_oabi_ftruncate64) | 211 | CALL(sys_getuid) |
212 | /* 195 */ .long ABI(sys_stat64, sys_oabi_stat64) | 212 | /* 200 */ CALL(sys_getgid) |
213 | .long ABI(sys_lstat64, sys_oabi_lstat64) | 213 | CALL(sys_geteuid) |
214 | .long ABI(sys_fstat64, sys_oabi_fstat64) | 214 | CALL(sys_getegid) |
215 | .long sys_lchown | 215 | CALL(sys_setreuid) |
216 | .long sys_getuid | 216 | CALL(sys_setregid) |
217 | /* 200 */ .long sys_getgid | 217 | /* 205 */ CALL(sys_getgroups) |
218 | .long sys_geteuid | 218 | CALL(sys_setgroups) |
219 | .long sys_getegid | 219 | CALL(sys_fchown) |
220 | .long sys_setreuid | 220 | CALL(sys_setresuid) |
221 | .long sys_setregid | 221 | CALL(sys_getresuid) |
222 | /* 205 */ .long sys_getgroups | 222 | /* 210 */ CALL(sys_setresgid) |
223 | .long sys_setgroups | 223 | CALL(sys_getresgid) |
224 | .long sys_fchown | 224 | CALL(sys_chown) |
225 | .long sys_setresuid | 225 | CALL(sys_setuid) |
226 | .long sys_getresuid | 226 | CALL(sys_setgid) |
227 | /* 210 */ .long sys_setresgid | 227 | /* 215 */ CALL(sys_setfsuid) |
228 | .long sys_getresgid | 228 | CALL(sys_setfsgid) |
229 | .long sys_chown | 229 | CALL(sys_getdents64) |
230 | .long sys_setuid | 230 | CALL(sys_pivot_root) |
231 | .long sys_setgid | 231 | CALL(sys_mincore) |
232 | /* 215 */ .long sys_setfsuid | 232 | /* 220 */ CALL(sys_madvise) |
233 | .long sys_setfsgid | 233 | CALL(ABI(sys_fcntl64, sys_oabi_fcntl64)) |
234 | .long sys_getdents64 | 234 | CALL(sys_ni_syscall) /* TUX */ |
235 | .long sys_pivot_root | 235 | CALL(sys_ni_syscall) |
236 | .long sys_mincore | 236 | CALL(sys_gettid) |
237 | /* 220 */ .long sys_madvise | 237 | /* 225 */ CALL(ABI(sys_readahead, sys_oabi_readahead)) |
238 | .long ABI(sys_fcntl64, sys_oabi_fcntl64) | 238 | CALL(sys_setxattr) |
239 | .long sys_ni_syscall /* TUX */ | 239 | CALL(sys_lsetxattr) |
240 | .long sys_ni_syscall | 240 | CALL(sys_fsetxattr) |
241 | .long sys_gettid | 241 | CALL(sys_getxattr) |
242 | /* 225 */ .long ABI(sys_readahead, sys_oabi_readahead) | 242 | /* 230 */ CALL(sys_lgetxattr) |
243 | .long sys_setxattr | 243 | CALL(sys_fgetxattr) |
244 | .long sys_lsetxattr | 244 | CALL(sys_listxattr) |
245 | .long sys_fsetxattr | 245 | CALL(sys_llistxattr) |
246 | .long sys_getxattr | 246 | CALL(sys_flistxattr) |
247 | /* 230 */ .long sys_lgetxattr | 247 | /* 235 */ CALL(sys_removexattr) |
248 | .long sys_fgetxattr | 248 | CALL(sys_lremovexattr) |
249 | .long sys_listxattr | 249 | CALL(sys_fremovexattr) |
250 | .long sys_llistxattr | 250 | CALL(sys_tkill) |
251 | .long sys_flistxattr | 251 | CALL(sys_sendfile64) |
252 | /* 235 */ .long sys_removexattr | 252 | /* 240 */ CALL(sys_futex) |
253 | .long sys_lremovexattr | 253 | CALL(sys_sched_setaffinity) |
254 | .long sys_fremovexattr | 254 | CALL(sys_sched_getaffinity) |
255 | .long sys_tkill | 255 | CALL(sys_io_setup) |
256 | .long sys_sendfile64 | 256 | CALL(sys_io_destroy) |
257 | /* 240 */ .long sys_futex | 257 | /* 245 */ CALL(sys_io_getevents) |
258 | .long sys_sched_setaffinity | 258 | CALL(sys_io_submit) |
259 | .long sys_sched_getaffinity | 259 | CALL(sys_io_cancel) |
260 | .long sys_io_setup | 260 | CALL(sys_exit_group) |
261 | .long sys_io_destroy | 261 | CALL(sys_lookup_dcookie) |
262 | /* 245 */ .long sys_io_getevents | 262 | /* 250 */ CALL(sys_epoll_create) |
263 | .long sys_io_submit | 263 | CALL(ABI(sys_epoll_ctl, sys_oabi_epoll_ctl)) |
264 | .long sys_io_cancel | 264 | CALL(ABI(sys_epoll_wait, sys_oabi_epoll_wait)) |
265 | .long sys_exit_group | 265 | CALL(sys_remap_file_pages) |
266 | .long sys_lookup_dcookie | 266 | CALL(sys_ni_syscall) /* sys_set_thread_area */ |
267 | /* 250 */ .long sys_epoll_create | 267 | /* 255 */ CALL(sys_ni_syscall) /* sys_get_thread_area */ |
268 | .long ABI(sys_epoll_ctl, sys_oabi_epoll_ctl) | 268 | CALL(sys_set_tid_address) |
269 | .long ABI(sys_epoll_wait, sys_oabi_epoll_wait) | 269 | CALL(sys_timer_create) |
270 | .long sys_remap_file_pages | 270 | CALL(sys_timer_settime) |
271 | .long sys_ni_syscall /* sys_set_thread_area */ | 271 | CALL(sys_timer_gettime) |
272 | /* 255 */ .long sys_ni_syscall /* sys_get_thread_area */ | 272 | /* 260 */ CALL(sys_timer_getoverrun) |
273 | .long sys_set_tid_address | 273 | CALL(sys_timer_delete) |
274 | .long sys_timer_create | 274 | CALL(sys_clock_settime) |
275 | .long sys_timer_settime | 275 | CALL(sys_clock_gettime) |
276 | .long sys_timer_gettime | 276 | CALL(sys_clock_getres) |
277 | /* 260 */ .long sys_timer_getoverrun | 277 | /* 265 */ CALL(sys_clock_nanosleep) |
278 | .long sys_timer_delete | 278 | CALL(sys_statfs64_wrapper) |
279 | .long sys_clock_settime | 279 | CALL(sys_fstatfs64_wrapper) |
280 | .long sys_clock_gettime | 280 | CALL(sys_tgkill) |
281 | .long sys_clock_getres | 281 | CALL(sys_utimes) |
282 | /* 265 */ .long sys_clock_nanosleep | 282 | /* 270 */ CALL(sys_arm_fadvise64_64) |
283 | .long sys_statfs64_wrapper | 283 | CALL(sys_pciconfig_iobase) |
284 | .long sys_fstatfs64_wrapper | 284 | CALL(sys_pciconfig_read) |
285 | .long sys_tgkill | 285 | CALL(sys_pciconfig_write) |
286 | .long sys_utimes | 286 | CALL(sys_mq_open) |
287 | /* 270 */ .long sys_arm_fadvise64_64 | 287 | /* 275 */ CALL(sys_mq_unlink) |
288 | .long sys_pciconfig_iobase | 288 | CALL(sys_mq_timedsend) |
289 | .long sys_pciconfig_read | 289 | CALL(sys_mq_timedreceive) |
290 | .long sys_pciconfig_write | 290 | CALL(sys_mq_notify) |
291 | .long sys_mq_open | 291 | CALL(sys_mq_getsetattr) |
292 | /* 275 */ .long sys_mq_unlink | 292 | /* 280 */ CALL(sys_waitid) |
293 | .long sys_mq_timedsend | 293 | CALL(sys_socket) |
294 | .long sys_mq_timedreceive | 294 | CALL(ABI(sys_bind, sys_oabi_bind)) |
295 | .long sys_mq_notify | 295 | CALL(ABI(sys_connect, sys_oabi_connect)) |
296 | .long sys_mq_getsetattr | 296 | CALL(sys_listen) |
297 | /* 280 */ .long sys_waitid | 297 | /* 285 */ CALL(sys_accept) |
298 | .long sys_socket | 298 | CALL(sys_getsockname) |
299 | .long sys_bind | 299 | CALL(sys_getpeername) |
300 | .long sys_connect | 300 | CALL(sys_socketpair) |
301 | .long sys_listen | 301 | CALL(sys_send) |
302 | /* 285 */ .long sys_accept | 302 | /* 290 */ CALL(ABI(sys_sendto, sys_oabi_sendto)) |
303 | .long sys_getsockname | 303 | CALL(sys_recv) |
304 | .long sys_getpeername | 304 | CALL(sys_recvfrom) |
305 | .long sys_socketpair | 305 | CALL(sys_shutdown) |
306 | .long sys_send | 306 | CALL(sys_setsockopt) |
307 | /* 290 */ .long sys_sendto | 307 | /* 295 */ CALL(sys_getsockopt) |
308 | .long sys_recv | 308 | CALL(ABI(sys_sendmsg, sys_oabi_sendmsg)) |
309 | .long sys_recvfrom | 309 | CALL(sys_recvmsg) |
310 | .long sys_shutdown | 310 | CALL(ABI(sys_semop, sys_oabi_semop)) |
311 | .long sys_setsockopt | 311 | CALL(sys_semget) |
312 | /* 295 */ .long sys_getsockopt | 312 | /* 300 */ CALL(sys_semctl) |
313 | .long sys_sendmsg | 313 | CALL(sys_msgsnd) |
314 | .long sys_recvmsg | 314 | CALL(sys_msgrcv) |
315 | .long ABI(sys_semop, sys_oabi_semop) | 315 | CALL(sys_msgget) |
316 | .long sys_semget | 316 | CALL(sys_msgctl) |
317 | /* 300 */ .long sys_semctl | 317 | /* 305 */ CALL(sys_shmat) |
318 | .long sys_msgsnd | 318 | CALL(sys_shmdt) |
319 | .long sys_msgrcv | 319 | CALL(sys_shmget) |
320 | .long sys_msgget | 320 | CALL(sys_shmctl) |
321 | .long sys_msgctl | 321 | CALL(sys_add_key) |
322 | /* 305 */ .long sys_shmat | 322 | /* 310 */ CALL(sys_request_key) |
323 | .long sys_shmdt | 323 | CALL(sys_keyctl) |
324 | .long sys_shmget | 324 | CALL(ABI(sys_semtimedop, sys_oabi_semtimedop)) |
325 | .long sys_shmctl | 325 | /* vserver */ CALL(sys_ni_syscall) |
326 | .long sys_add_key | 326 | CALL(sys_ioprio_set) |
327 | /* 310 */ .long sys_request_key | 327 | /* 315 */ CALL(sys_ioprio_get) |
328 | .long sys_keyctl | 328 | CALL(sys_inotify_init) |
329 | .long ABI(sys_semtimedop, sys_oabi_semtimedop) | 329 | CALL(sys_inotify_add_watch) |
330 | /* vserver */ .long sys_ni_syscall | 330 | CALL(sys_inotify_rm_watch) |
331 | .long sys_ioprio_set | 331 | CALL(sys_mbind) |
332 | /* 315 */ .long sys_ioprio_get | 332 | /* 320 */ CALL(sys_get_mempolicy) |
333 | .long sys_inotify_init | 333 | CALL(sys_set_mempolicy) |
334 | .long sys_inotify_add_watch | 334 | #ifndef syscalls_counted |
335 | .long sys_inotify_rm_watch | 335 | .equ syscalls_padding, ((NR_syscalls + 3) & ~3) - NR_syscalls |
336 | .long sys_mbind | 336 | #define syscalls_counted |
337 | /* 320 */ .long sys_get_mempolicy | ||
338 | .long sys_set_mempolicy | ||
339 | |||
340 | .rept NR_syscalls - (. - 100b) / 4 | ||
341 | .long sys_ni_syscall | ||
342 | .endr | ||
343 | #endif | 337 | #endif |
338 | .rept syscalls_padding | ||
339 | CALL(sys_ni_syscall) | ||
340 | .endr | ||
diff --git a/arch/arm/kernel/compat.c b/arch/arm/kernel/compat.c index 7195add42e74..60cfa7f3226c 100644 --- a/arch/arm/kernel/compat.c +++ b/arch/arm/kernel/compat.c | |||
@@ -27,6 +27,8 @@ | |||
27 | 27 | ||
28 | #include <asm/mach/arch.h> | 28 | #include <asm/mach/arch.h> |
29 | 29 | ||
30 | #include "compat.h" | ||
31 | |||
30 | /* | 32 | /* |
31 | * Usage: | 33 | * Usage: |
32 | * - do not go blindly adding fields, add them at the end | 34 | * - do not go blindly adding fields, add them at the end |
diff --git a/arch/arm/kernel/compat.h b/arch/arm/kernel/compat.h new file mode 100644 index 000000000000..27e61a68bd1c --- /dev/null +++ b/arch/arm/kernel/compat.h | |||
@@ -0,0 +1,13 @@ | |||
1 | /* | ||
2 | * linux/arch/arm/kernel/compat.h | ||
3 | * | ||
4 | * Copyright (C) 2001 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | |||
11 | extern void convert_to_tag_list(struct tag *tags); | ||
12 | |||
13 | extern void squash_mem_tags(struct tag *tag); | ||
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S index d401d908c463..ec48d70c6d8b 100644 --- a/arch/arm/kernel/entry-armv.S +++ b/arch/arm/kernel/entry-armv.S | |||
@@ -333,10 +333,14 @@ __pabt_svc: | |||
333 | @ from the exception stack | 333 | @ from the exception stack |
334 | 334 | ||
335 | #if __LINUX_ARM_ARCH__ < 6 && !defined(CONFIG_NEEDS_SYSCALL_FOR_CMPXCHG) | 335 | #if __LINUX_ARM_ARCH__ < 6 && !defined(CONFIG_NEEDS_SYSCALL_FOR_CMPXCHG) |
336 | #ifndef CONFIG_MMU | ||
337 | #warning "NPTL on non MMU needs fixing" | ||
338 | #else | ||
336 | @ make sure our user space atomic helper is aborted | 339 | @ make sure our user space atomic helper is aborted |
337 | cmp r2, #TASK_SIZE | 340 | cmp r2, #TASK_SIZE |
338 | bichs r3, r3, #PSR_Z_BIT | 341 | bichs r3, r3, #PSR_Z_BIT |
339 | #endif | 342 | #endif |
343 | #endif | ||
340 | 344 | ||
341 | @ | 345 | @ |
342 | @ We are now ready to fill in the remaining blanks on the stack: | 346 | @ We are now ready to fill in the remaining blanks on the stack: |
@@ -562,7 +566,7 @@ ENTRY(__switch_to) | |||
562 | ldr r6, [r2, #TI_CPU_DOMAIN]! | 566 | ldr r6, [r2, #TI_CPU_DOMAIN]! |
563 | #endif | 567 | #endif |
564 | #if __LINUX_ARM_ARCH__ >= 6 | 568 | #if __LINUX_ARM_ARCH__ >= 6 |
565 | #ifdef CONFIG_CPU_MPCORE | 569 | #ifdef CONFIG_CPU_32v6K |
566 | clrex | 570 | clrex |
567 | #else | 571 | #else |
568 | strex r5, r4, [ip] @ Clear exclusive monitor | 572 | strex r5, r4, [ip] @ Clear exclusive monitor |
@@ -705,7 +709,12 @@ __kuser_memory_barrier: @ 0xffff0fa0 | |||
705 | * The C flag is also set if *ptr was changed to allow for assembly | 709 | * The C flag is also set if *ptr was changed to allow for assembly |
706 | * optimization in the calling code. | 710 | * optimization in the calling code. |
707 | * | 711 | * |
708 | * Note: this routine already includes memory barriers as needed. | 712 | * Notes: |
713 | * | ||
714 | * - This routine already includes memory barriers as needed. | ||
715 | * | ||
716 | * - A failure might be transient, i.e. it is possible, although unlikely, | ||
717 | * that "failure" be returned even if *ptr == oldval. | ||
709 | * | 718 | * |
710 | * For example, a user space atomic_add implementation could look like this: | 719 | * For example, a user space atomic_add implementation could look like this: |
711 | * | 720 | * |
@@ -756,12 +765,18 @@ __kuser_cmpxchg: @ 0xffff0fc0 | |||
756 | * exception happening just after the str instruction which would | 765 | * exception happening just after the str instruction which would |
757 | * clear the Z flag although the exchange was done. | 766 | * clear the Z flag although the exchange was done. |
758 | */ | 767 | */ |
768 | #ifdef CONFIG_MMU | ||
759 | teq ip, ip @ set Z flag | 769 | teq ip, ip @ set Z flag |
760 | ldr ip, [r2] @ load current val | 770 | ldr ip, [r2] @ load current val |
761 | add r3, r2, #1 @ prepare store ptr | 771 | add r3, r2, #1 @ prepare store ptr |
762 | teqeq ip, r0 @ compare with oldval if still allowed | 772 | teqeq ip, r0 @ compare with oldval if still allowed |
763 | streq r1, [r3, #-1]! @ store newval if still allowed | 773 | streq r1, [r3, #-1]! @ store newval if still allowed |
764 | subs r0, r2, r3 @ if r2 == r3 the str occured | 774 | subs r0, r2, r3 @ if r2 == r3 the str occured |
775 | #else | ||
776 | #warning "NPTL on non MMU needs fixing" | ||
777 | mov r0, #-1 | ||
778 | adds r0, r0, #0 | ||
779 | #endif | ||
765 | mov pc, lr | 780 | mov pc, lr |
766 | 781 | ||
767 | #else | 782 | #else |
diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S index 2b92ce85f97f..dbcb11a31f78 100644 --- a/arch/arm/kernel/entry-common.S +++ b/arch/arm/kernel/entry-common.S | |||
@@ -87,7 +87,11 @@ ENTRY(ret_from_fork) | |||
87 | b ret_slow_syscall | 87 | b ret_slow_syscall |
88 | 88 | ||
89 | 89 | ||
90 | .equ NR_syscalls,0 | ||
91 | #define CALL(x) .equ NR_syscalls,NR_syscalls+1 | ||
90 | #include "calls.S" | 92 | #include "calls.S" |
93 | #undef CALL | ||
94 | #define CALL(x) .long x | ||
91 | 95 | ||
92 | /*============================================================================= | 96 | /*============================================================================= |
93 | * SWI handler | 97 | * SWI handler |
diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c index 4b4e4cf79c80..489c069e5c3e 100644 --- a/arch/arm/kernel/process.c +++ b/arch/arm/kernel/process.c | |||
@@ -27,6 +27,7 @@ | |||
27 | #include <linux/kallsyms.h> | 27 | #include <linux/kallsyms.h> |
28 | #include <linux/init.h> | 28 | #include <linux/init.h> |
29 | #include <linux/cpu.h> | 29 | #include <linux/cpu.h> |
30 | #include <linux/elfcore.h> | ||
30 | 31 | ||
31 | #include <asm/leds.h> | 32 | #include <asm/leds.h> |
32 | #include <asm/processor.h> | 33 | #include <asm/processor.h> |
@@ -83,7 +84,7 @@ EXPORT_SYMBOL(pm_power_off); | |||
83 | * This is our default idle handler. We need to disable | 84 | * This is our default idle handler. We need to disable |
84 | * interrupts here to ensure we don't miss a wakeup call. | 85 | * interrupts here to ensure we don't miss a wakeup call. |
85 | */ | 86 | */ |
86 | void default_idle(void) | 87 | static void default_idle(void) |
87 | { | 88 | { |
88 | if (hlt_counter) | 89 | if (hlt_counter) |
89 | cpu_relax(); | 90 | cpu_relax(); |
diff --git a/arch/arm/kernel/ptrace.c b/arch/arm/kernel/ptrace.c index 7b6256bb590e..a1d1b2906e8d 100644 --- a/arch/arm/kernel/ptrace.c +++ b/arch/arm/kernel/ptrace.c | |||
@@ -610,15 +610,12 @@ static int ptrace_setfpregs(struct task_struct *tsk, void __user *ufp) | |||
610 | static int ptrace_getwmmxregs(struct task_struct *tsk, void __user *ufp) | 610 | static int ptrace_getwmmxregs(struct task_struct *tsk, void __user *ufp) |
611 | { | 611 | { |
612 | struct thread_info *thread = task_thread_info(tsk); | 612 | struct thread_info *thread = task_thread_info(tsk); |
613 | void *ptr = &thread->fpstate; | ||
614 | 613 | ||
615 | if (!test_ti_thread_flag(thread, TIF_USING_IWMMXT)) | 614 | if (!test_ti_thread_flag(thread, TIF_USING_IWMMXT)) |
616 | return -ENODATA; | 615 | return -ENODATA; |
617 | iwmmxt_task_disable(thread); /* force it to ram */ | 616 | iwmmxt_task_disable(thread); /* force it to ram */ |
618 | /* The iWMMXt state is stored doubleword-aligned. */ | 617 | return copy_to_user(ufp, &thread->fpstate.iwmmxt, IWMMXT_SIZE) |
619 | if (((long) ptr) & 4) | 618 | ? -EFAULT : 0; |
620 | ptr += 4; | ||
621 | return copy_to_user(ufp, ptr, 0x98) ? -EFAULT : 0; | ||
622 | } | 619 | } |
623 | 620 | ||
624 | /* | 621 | /* |
@@ -627,15 +624,12 @@ static int ptrace_getwmmxregs(struct task_struct *tsk, void __user *ufp) | |||
627 | static int ptrace_setwmmxregs(struct task_struct *tsk, void __user *ufp) | 624 | static int ptrace_setwmmxregs(struct task_struct *tsk, void __user *ufp) |
628 | { | 625 | { |
629 | struct thread_info *thread = task_thread_info(tsk); | 626 | struct thread_info *thread = task_thread_info(tsk); |
630 | void *ptr = &thread->fpstate; | ||
631 | 627 | ||
632 | if (!test_ti_thread_flag(thread, TIF_USING_IWMMXT)) | 628 | if (!test_ti_thread_flag(thread, TIF_USING_IWMMXT)) |
633 | return -EACCES; | 629 | return -EACCES; |
634 | iwmmxt_task_release(thread); /* force a reload */ | 630 | iwmmxt_task_release(thread); /* force a reload */ |
635 | /* The iWMMXt state is stored doubleword-aligned. */ | 631 | return copy_from_user(&thread->fpstate.iwmmxt, ufp, IWMMXT_SIZE) |
636 | if (((long) ptr) & 4) | 632 | ? -EFAULT : 0; |
637 | ptr += 4; | ||
638 | return copy_from_user(ptr, ufp, 0x98) ? -EFAULT : 0; | ||
639 | } | 633 | } |
640 | 634 | ||
641 | #endif | 635 | #endif |
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c index c45d10d07bde..08974cbe9824 100644 --- a/arch/arm/kernel/setup.c +++ b/arch/arm/kernel/setup.c | |||
@@ -23,6 +23,7 @@ | |||
23 | #include <linux/root_dev.h> | 23 | #include <linux/root_dev.h> |
24 | #include <linux/cpu.h> | 24 | #include <linux/cpu.h> |
25 | #include <linux/interrupt.h> | 25 | #include <linux/interrupt.h> |
26 | #include <linux/smp.h> | ||
26 | 27 | ||
27 | #include <asm/cpu.h> | 28 | #include <asm/cpu.h> |
28 | #include <asm/elf.h> | 29 | #include <asm/elf.h> |
@@ -36,6 +37,8 @@ | |||
36 | #include <asm/mach/irq.h> | 37 | #include <asm/mach/irq.h> |
37 | #include <asm/mach/time.h> | 38 | #include <asm/mach/time.h> |
38 | 39 | ||
40 | #include "compat.h" | ||
41 | |||
39 | #ifndef MEM_SIZE | 42 | #ifndef MEM_SIZE |
40 | #define MEM_SIZE (16*1024*1024) | 43 | #define MEM_SIZE (16*1024*1024) |
41 | #endif | 44 | #endif |
@@ -52,10 +55,7 @@ static int __init fpe_setup(char *line) | |||
52 | __setup("fpe=", fpe_setup); | 55 | __setup("fpe=", fpe_setup); |
53 | #endif | 56 | #endif |
54 | 57 | ||
55 | extern unsigned int mem_fclk_21285; | ||
56 | extern void paging_init(struct meminfo *, struct machine_desc *desc); | 58 | extern void paging_init(struct meminfo *, struct machine_desc *desc); |
57 | extern void convert_to_tag_list(struct tag *tags); | ||
58 | extern void squash_mem_tags(struct tag *tag); | ||
59 | extern void reboot_setup(char *str); | 59 | extern void reboot_setup(char *str); |
60 | extern int root_mountflags; | 60 | extern int root_mountflags; |
61 | extern void _stext, _text, _etext, __data_start, _edata, _end; | 61 | extern void _stext, _text, _etext, __data_start, _edata, _end; |
@@ -771,6 +771,10 @@ void __init setup_arch(char **cmdline_p) | |||
771 | paging_init(&meminfo, mdesc); | 771 | paging_init(&meminfo, mdesc); |
772 | request_standard_resources(&meminfo, mdesc); | 772 | request_standard_resources(&meminfo, mdesc); |
773 | 773 | ||
774 | #ifdef CONFIG_SMP | ||
775 | smp_init_cpus(); | ||
776 | #endif | ||
777 | |||
774 | cpu_init(); | 778 | cpu_init(); |
775 | 779 | ||
776 | /* | 780 | /* |
diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c index 7338948bd7d3..02aa300c4633 100644 --- a/arch/arm/kernel/smp.c +++ b/arch/arm/kernel/smp.c | |||
@@ -338,7 +338,6 @@ void __init smp_prepare_boot_cpu(void) | |||
338 | 338 | ||
339 | per_cpu(cpu_data, cpu).idle = current; | 339 | per_cpu(cpu_data, cpu).idle = current; |
340 | 340 | ||
341 | cpu_set(cpu, cpu_possible_map); | ||
342 | cpu_set(cpu, cpu_present_map); | 341 | cpu_set(cpu, cpu_present_map); |
343 | cpu_set(cpu, cpu_online_map); | 342 | cpu_set(cpu, cpu_online_map); |
344 | } | 343 | } |
diff --git a/arch/arm/kernel/sys_oabi-compat.c b/arch/arm/kernel/sys_oabi-compat.c index eafa8e5284af..8e2f9bc3368b 100644 --- a/arch/arm/kernel/sys_oabi-compat.c +++ b/arch/arm/kernel/sys_oabi-compat.c | |||
@@ -59,6 +59,17 @@ | |||
59 | * struct sembuf loses its padding with EABI. Since arrays of them are | 59 | * struct sembuf loses its padding with EABI. Since arrays of them are |
60 | * used they have to be copyed to remove the padding. Compatibility wrappers | 60 | * used they have to be copyed to remove the padding. Compatibility wrappers |
61 | * provided below. | 61 | * provided below. |
62 | * | ||
63 | * sys_bind: | ||
64 | * sys_connect: | ||
65 | * sys_sendmsg: | ||
66 | * sys_sendto: | ||
67 | * sys_socketcall: | ||
68 | * | ||
69 | * struct sockaddr_un loses its padding with EABI. Since the size of the | ||
70 | * structure is used as a validation test in unix_mkname(), we need to | ||
71 | * change the length argument to 110 whenever it is 112. Compatibility | ||
72 | * wrappers provided below. | ||
62 | */ | 73 | */ |
63 | 74 | ||
64 | #include <linux/syscalls.h> | 75 | #include <linux/syscalls.h> |
@@ -67,6 +78,8 @@ | |||
67 | #include <linux/fcntl.h> | 78 | #include <linux/fcntl.h> |
68 | #include <linux/eventpoll.h> | 79 | #include <linux/eventpoll.h> |
69 | #include <linux/sem.h> | 80 | #include <linux/sem.h> |
81 | #include <linux/socket.h> | ||
82 | #include <linux/net.h> | ||
70 | #include <asm/ipc.h> | 83 | #include <asm/ipc.h> |
71 | #include <asm/uaccess.h> | 84 | #include <asm/uaccess.h> |
72 | 85 | ||
@@ -337,3 +350,91 @@ asmlinkage int sys_oabi_ipc(uint call, int first, int second, int third, | |||
337 | return sys_ipc(call, first, second, third, ptr, fifth); | 350 | return sys_ipc(call, first, second, third, ptr, fifth); |
338 | } | 351 | } |
339 | } | 352 | } |
353 | |||
354 | asmlinkage long sys_oabi_bind(int fd, struct sockaddr __user *addr, int addrlen) | ||
355 | { | ||
356 | sa_family_t sa_family; | ||
357 | if (addrlen == 112 && | ||
358 | get_user(sa_family, &addr->sa_family) == 0 && | ||
359 | sa_family == AF_UNIX) | ||
360 | addrlen = 110; | ||
361 | return sys_bind(fd, addr, addrlen); | ||
362 | } | ||
363 | |||
364 | asmlinkage long sys_oabi_connect(int fd, struct sockaddr __user *addr, int addrlen) | ||
365 | { | ||
366 | sa_family_t sa_family; | ||
367 | if (addrlen == 112 && | ||
368 | get_user(sa_family, &addr->sa_family) == 0 && | ||
369 | sa_family == AF_UNIX) | ||
370 | addrlen = 110; | ||
371 | return sys_connect(fd, addr, addrlen); | ||
372 | } | ||
373 | |||
374 | asmlinkage long sys_oabi_sendto(int fd, void __user *buff, | ||
375 | size_t len, unsigned flags, | ||
376 | struct sockaddr __user *addr, | ||
377 | int addrlen) | ||
378 | { | ||
379 | sa_family_t sa_family; | ||
380 | if (addrlen == 112 && | ||
381 | get_user(sa_family, &addr->sa_family) == 0 && | ||
382 | sa_family == AF_UNIX) | ||
383 | addrlen = 110; | ||
384 | return sys_sendto(fd, buff, len, flags, addr, addrlen); | ||
385 | } | ||
386 | |||
387 | asmlinkage long sys_oabi_sendmsg(int fd, struct msghdr __user *msg, unsigned flags) | ||
388 | { | ||
389 | struct sockaddr __user *addr; | ||
390 | int msg_namelen; | ||
391 | sa_family_t sa_family; | ||
392 | if (msg && | ||
393 | get_user(msg_namelen, &msg->msg_namelen) == 0 && | ||
394 | msg_namelen == 112 && | ||
395 | get_user(addr, &msg->msg_name) == 0 && | ||
396 | get_user(sa_family, &addr->sa_family) == 0 && | ||
397 | sa_family == AF_UNIX) | ||
398 | { | ||
399 | /* | ||
400 | * HACK ALERT: there is a limit to how much backward bending | ||
401 | * we should do for what is actually a transitional | ||
402 | * compatibility layer. This already has known flaws with | ||
403 | * a few ioctls that we don't intend to fix. Therefore | ||
404 | * consider this blatent hack as another one... and take care | ||
405 | * to run for cover. In most cases it will "just work fine". | ||
406 | * If it doesn't, well, tough. | ||
407 | */ | ||
408 | put_user(110, &msg->msg_namelen); | ||
409 | } | ||
410 | return sys_sendmsg(fd, msg, flags); | ||
411 | } | ||
412 | |||
413 | asmlinkage long sys_oabi_socketcall(int call, unsigned long __user *args) | ||
414 | { | ||
415 | unsigned long r = -EFAULT, a[6]; | ||
416 | |||
417 | switch (call) { | ||
418 | case SYS_BIND: | ||
419 | if (copy_from_user(a, args, 3 * sizeof(long)) == 0) | ||
420 | r = sys_oabi_bind(a[0], (struct sockaddr __user *)a[1], a[2]); | ||
421 | break; | ||
422 | case SYS_CONNECT: | ||
423 | if (copy_from_user(a, args, 3 * sizeof(long)) == 0) | ||
424 | r = sys_oabi_connect(a[0], (struct sockaddr __user *)a[1], a[2]); | ||
425 | break; | ||
426 | case SYS_SENDTO: | ||
427 | if (copy_from_user(a, args, 6 * sizeof(long)) == 0) | ||
428 | r = sys_oabi_sendto(a[0], (void __user *)a[1], a[2], a[3], | ||
429 | (struct sockaddr __user *)a[4], a[5]); | ||
430 | break; | ||
431 | case SYS_SENDMSG: | ||
432 | if (copy_from_user(a, args, 3 * sizeof(long)) == 0) | ||
433 | r = sys_oabi_sendmsg(a[0], (struct msghdr __user *)a[1], a[2]); | ||
434 | break; | ||
435 | default: | ||
436 | r = sys_socketcall(call, args); | ||
437 | } | ||
438 | |||
439 | return r; | ||
440 | } | ||
diff --git a/arch/arm/kernel/time.c b/arch/arm/kernel/time.c index d7d932c02866..d6bd435a6857 100644 --- a/arch/arm/kernel/time.c +++ b/arch/arm/kernel/time.c | |||
@@ -422,12 +422,14 @@ static int timer_dyn_tick_disable(void) | |||
422 | void timer_dyn_reprogram(void) | 422 | void timer_dyn_reprogram(void) |
423 | { | 423 | { |
424 | struct dyn_tick_timer *dyn_tick = system_timer->dyn_tick; | 424 | struct dyn_tick_timer *dyn_tick = system_timer->dyn_tick; |
425 | unsigned long next, seq; | ||
425 | 426 | ||
426 | if (dyn_tick) { | 427 | if (dyn_tick && (dyn_tick->state & DYN_TICK_ENABLED)) { |
427 | write_seqlock(&xtime_lock); | 428 | next = next_timer_interrupt(); |
428 | if (dyn_tick->state & DYN_TICK_ENABLED) | 429 | do { |
430 | seq = read_seqbegin(&xtime_lock); | ||
429 | dyn_tick->reprogram(next_timer_interrupt() - jiffies); | 431 | dyn_tick->reprogram(next_timer_interrupt() - jiffies); |
430 | write_sequnlock(&xtime_lock); | 432 | } while (read_seqretry(&xtime_lock, seq)); |
431 | } | 433 | } |
432 | } | 434 | } |
433 | 435 | ||
diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c index 10235b01582e..03924bcc6129 100644 --- a/arch/arm/kernel/traps.c +++ b/arch/arm/kernel/traps.c | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <linux/personality.h> | 19 | #include <linux/personality.h> |
20 | #include <linux/ptrace.h> | 20 | #include <linux/ptrace.h> |
21 | #include <linux/kallsyms.h> | 21 | #include <linux/kallsyms.h> |
22 | #include <linux/delay.h> | ||
22 | #include <linux/init.h> | 23 | #include <linux/init.h> |
23 | 24 | ||
24 | #include <asm/atomic.h> | 25 | #include <asm/atomic.h> |
@@ -231,6 +232,13 @@ NORET_TYPE void die(const char *str, struct pt_regs *regs, int err) | |||
231 | __die(str, err, thread, regs); | 232 | __die(str, err, thread, regs); |
232 | bust_spinlocks(0); | 233 | bust_spinlocks(0); |
233 | spin_unlock_irq(&die_lock); | 234 | spin_unlock_irq(&die_lock); |
235 | |||
236 | if (panic_on_oops) { | ||
237 | printk(KERN_EMERG "Fatal exception: panic in 5 seconds\n"); | ||
238 | ssleep(5); | ||
239 | panic("Fatal exception"); | ||
240 | } | ||
241 | |||
234 | do_exit(SIGSEGV); | 242 | do_exit(SIGSEGV); |
235 | } | 243 | } |
236 | 244 | ||
diff --git a/arch/arm/lib/muldi3.S b/arch/arm/lib/muldi3.S index 72d594184b8a..d89c60615794 100644 --- a/arch/arm/lib/muldi3.S +++ b/arch/arm/lib/muldi3.S | |||
@@ -29,8 +29,8 @@ ENTRY(__aeabi_lmul) | |||
29 | 29 | ||
30 | mul xh, yl, xh | 30 | mul xh, yl, xh |
31 | mla xh, xl, yh, xh | 31 | mla xh, xl, yh, xh |
32 | mov ip, xl, asr #16 | 32 | mov ip, xl, lsr #16 |
33 | mov yh, yl, asr #16 | 33 | mov yh, yl, lsr #16 |
34 | bic xl, xl, ip, lsl #16 | 34 | bic xl, xl, ip, lsl #16 |
35 | bic yl, yl, yh, lsl #16 | 35 | bic yl, yl, yh, lsl #16 |
36 | mla xh, yh, ip, xh | 36 | mla xh, yh, ip, xh |
diff --git a/arch/arm/mach-at91rm9200/devices.c b/arch/arm/mach-at91rm9200/devices.c index 8df3e5245651..57eedd5beaf6 100644 --- a/arch/arm/mach-at91rm9200/devices.c +++ b/arch/arm/mach-at91rm9200/devices.c | |||
@@ -100,8 +100,10 @@ void __init at91_add_device_udc(struct at91_udc_data *data) | |||
100 | at91_set_gpio_input(data->vbus_pin, 0); | 100 | at91_set_gpio_input(data->vbus_pin, 0); |
101 | at91_set_deglitch(data->vbus_pin, 1); | 101 | at91_set_deglitch(data->vbus_pin, 1); |
102 | } | 102 | } |
103 | if (data->pullup_pin) | 103 | if (data->pullup_pin) { |
104 | at91_set_gpio_output(data->pullup_pin, 0); | 104 | at91_set_gpio_output(data->pullup_pin, 0); |
105 | at91_set_multi_drive(data->pullup_pin, 1); | ||
106 | } | ||
105 | 107 | ||
106 | udc_data = *data; | 108 | udc_data = *data; |
107 | platform_device_register(&at91rm9200_udc_device); | 109 | platform_device_register(&at91rm9200_udc_device); |
diff --git a/arch/arm/mach-at91rm9200/gpio.c b/arch/arm/mach-at91rm9200/gpio.c index 2fd2ef583e4d..0e396feec468 100644 --- a/arch/arm/mach-at91rm9200/gpio.c +++ b/arch/arm/mach-at91rm9200/gpio.c | |||
@@ -159,6 +159,23 @@ int __init_or_module at91_set_deglitch(unsigned pin, int is_on) | |||
159 | } | 159 | } |
160 | EXPORT_SYMBOL(at91_set_deglitch); | 160 | EXPORT_SYMBOL(at91_set_deglitch); |
161 | 161 | ||
162 | /* | ||
163 | * enable/disable the multi-driver; This is only valid for output and | ||
164 | * allows the output pin to run as an open collector output. | ||
165 | */ | ||
166 | int __init_or_module at91_set_multi_drive(unsigned pin, int is_on) | ||
167 | { | ||
168 | void __iomem *pio = pin_to_controller(pin); | ||
169 | unsigned mask = pin_to_mask(pin); | ||
170 | |||
171 | if (!pio) | ||
172 | return -EINVAL; | ||
173 | |||
174 | __raw_writel(mask, pio + (is_on ? PIO_MDER : PIO_MDDR)); | ||
175 | return 0; | ||
176 | } | ||
177 | EXPORT_SYMBOL(at91_set_multi_drive); | ||
178 | |||
162 | /*--------------------------------------------------------------------------*/ | 179 | /*--------------------------------------------------------------------------*/ |
163 | 180 | ||
164 | 181 | ||
@@ -257,8 +274,18 @@ static void gpio_irq_handler(unsigned irq, struct irqdesc *desc, struct pt_regs | |||
257 | gpio = &irq_desc[pin]; | 274 | gpio = &irq_desc[pin]; |
258 | 275 | ||
259 | while (isr) { | 276 | while (isr) { |
260 | if (isr & 1) | 277 | if (isr & 1) { |
261 | gpio->handle(pin, gpio, regs); | 278 | if (unlikely(gpio->disable_depth)) { |
279 | /* | ||
280 | * The core ARM interrupt handler lazily disables IRQs so | ||
281 | * another IRQ must be generated before it actually gets | ||
282 | * here to be disabled on the GPIO controller. | ||
283 | */ | ||
284 | gpio_irq_mask(pin); | ||
285 | } | ||
286 | else | ||
287 | gpio->handle(pin, gpio, regs); | ||
288 | } | ||
262 | pin++; | 289 | pin++; |
263 | gpio++; | 290 | gpio++; |
264 | isr >>= 1; | 291 | isr >>= 1; |
diff --git a/arch/arm/mach-clps711x/Kconfig b/arch/arm/mach-clps711x/Kconfig index 0793dcf54f2e..0e2b641268ad 100644 --- a/arch/arm/mach-clps711x/Kconfig +++ b/arch/arm/mach-clps711x/Kconfig | |||
@@ -24,6 +24,8 @@ config ARCH_CEIVA | |||
24 | 24 | ||
25 | config ARCH_CLEP7312 | 25 | config ARCH_CLEP7312 |
26 | bool "CLEP7312" | 26 | bool "CLEP7312" |
27 | help | ||
28 | Boards based on the Cirrus Logic 7212/7312 chips. | ||
27 | 29 | ||
28 | config ARCH_EDB7211 | 30 | config ARCH_EDB7211 |
29 | bool "EDB7211" | 31 | bool "EDB7211" |
diff --git a/arch/arm/mach-imx/mx1ads.c b/arch/arm/mach-imx/mx1ads.c index dc31e3fd6c57..8ab1b040288c 100644 --- a/arch/arm/mach-imx/mx1ads.c +++ b/arch/arm/mach-imx/mx1ads.c | |||
@@ -27,7 +27,6 @@ | |||
27 | #include <asm/mach/arch.h> | 27 | #include <asm/mach/arch.h> |
28 | #include <linux/interrupt.h> | 28 | #include <linux/interrupt.h> |
29 | #include "generic.h" | 29 | #include "generic.h" |
30 | #include <asm/serial.h> | ||
31 | 30 | ||
32 | static struct resource cs89x0_resources[] = { | 31 | static struct resource cs89x0_resources[] = { |
33 | [0] = { | 32 | [0] = { |
diff --git a/arch/arm/mach-integrator/integrator_cp.c b/arch/arm/mach-integrator/integrator_cp.c index 31820170f306..a0724f2b24ce 100644 --- a/arch/arm/mach-integrator/integrator_cp.c +++ b/arch/arm/mach-integrator/integrator_cp.c | |||
@@ -469,7 +469,9 @@ static void cp_clcd_enable(struct clcd_fb *fb) | |||
469 | if (fb->fb.var.bits_per_pixel <= 8) | 469 | if (fb->fb.var.bits_per_pixel <= 8) |
470 | val = CM_CTRL_LCDMUXSEL_VGA_8421BPP; | 470 | val = CM_CTRL_LCDMUXSEL_VGA_8421BPP; |
471 | else if (fb->fb.var.bits_per_pixel <= 16) | 471 | else if (fb->fb.var.bits_per_pixel <= 16) |
472 | val = CM_CTRL_LCDMUXSEL_VGA_16BPP; | 472 | val = CM_CTRL_LCDMUXSEL_VGA_16BPP |
473 | | CM_CTRL_LCDEN0 | CM_CTRL_LCDEN1 | ||
474 | | CM_CTRL_STATIC1 | CM_CTRL_STATIC2; | ||
473 | else | 475 | else |
474 | val = 0; /* no idea for this, don't trust the docs */ | 476 | val = 0; /* no idea for this, don't trust the docs */ |
475 | 477 | ||
diff --git a/arch/arm/mach-integrator/platsmp.c b/arch/arm/mach-integrator/platsmp.c index ea10bd8c972c..1bc8534ef0c6 100644 --- a/arch/arm/mach-integrator/platsmp.c +++ b/arch/arm/mach-integrator/platsmp.c | |||
@@ -140,6 +140,18 @@ static void __init poke_milo(void) | |||
140 | mb(); | 140 | mb(); |
141 | } | 141 | } |
142 | 142 | ||
143 | /* | ||
144 | * Initialise the CPU possible map early - this describes the CPUs | ||
145 | * which may be present or become present in the system. | ||
146 | */ | ||
147 | void __init smp_init_cpus(void) | ||
148 | { | ||
149 | unsigned int i, ncores = get_core_count(); | ||
150 | |||
151 | for (i = 0; i < ncores; i++) | ||
152 | cpu_set(i, cpu_possible_map); | ||
153 | } | ||
154 | |||
143 | void __init smp_prepare_cpus(unsigned int max_cpus) | 155 | void __init smp_prepare_cpus(unsigned int max_cpus) |
144 | { | 156 | { |
145 | unsigned int ncores = get_core_count(); | 157 | unsigned int ncores = get_core_count(); |
@@ -176,14 +188,11 @@ void __init smp_prepare_cpus(unsigned int max_cpus) | |||
176 | max_cpus = ncores; | 188 | max_cpus = ncores; |
177 | 189 | ||
178 | /* | 190 | /* |
179 | * Initialise the possible/present maps. | 191 | * Initialise the present map, which describes the set of CPUs |
180 | * cpu_possible_map describes the set of CPUs which may be present | 192 | * actually populated at the present time. |
181 | * cpu_present_map describes the set of CPUs populated | ||
182 | */ | 193 | */ |
183 | for (i = 0; i < max_cpus; i++) { | 194 | for (i = 0; i < max_cpus; i++) |
184 | cpu_set(i, cpu_possible_map); | ||
185 | cpu_set(i, cpu_present_map); | 195 | cpu_set(i, cpu_present_map); |
186 | } | ||
187 | 196 | ||
188 | /* | 197 | /* |
189 | * Do we need any more CPUs? If so, then let them know where | 198 | * Do we need any more CPUs? If so, then let them know where |
diff --git a/arch/arm/mach-iop3xx/iop321-setup.c b/arch/arm/mach-iop3xx/iop321-setup.c index e4f4c52d93d4..0ebbcb20c6ae 100644 --- a/arch/arm/mach-iop3xx/iop321-setup.c +++ b/arch/arm/mach-iop3xx/iop321-setup.c | |||
@@ -13,7 +13,6 @@ | |||
13 | #include <linux/mm.h> | 13 | #include <linux/mm.h> |
14 | #include <linux/init.h> | 14 | #include <linux/init.h> |
15 | #include <linux/config.h> | 15 | #include <linux/config.h> |
16 | #include <linux/init.h> | ||
17 | #include <linux/major.h> | 16 | #include <linux/major.h> |
18 | #include <linux/fs.h> | 17 | #include <linux/fs.h> |
19 | #include <linux/platform_device.h> | 18 | #include <linux/platform_device.h> |
diff --git a/arch/arm/mach-iop3xx/iop331-setup.c b/arch/arm/mach-iop3xx/iop331-setup.c index 63585485123e..2d6abe5be14d 100644 --- a/arch/arm/mach-iop3xx/iop331-setup.c +++ b/arch/arm/mach-iop3xx/iop331-setup.c | |||
@@ -12,7 +12,6 @@ | |||
12 | #include <linux/mm.h> | 12 | #include <linux/mm.h> |
13 | #include <linux/init.h> | 13 | #include <linux/init.h> |
14 | #include <linux/config.h> | 14 | #include <linux/config.h> |
15 | #include <linux/init.h> | ||
16 | #include <linux/major.h> | 15 | #include <linux/major.h> |
17 | #include <linux/fs.h> | 16 | #include <linux/fs.h> |
18 | #include <linux/platform_device.h> | 17 | #include <linux/platform_device.h> |
diff --git a/arch/arm/mach-ixp2000/enp2611.c b/arch/arm/mach-ixp2000/enp2611.c index 9e5a13bb39d0..52fac89e95b5 100644 --- a/arch/arm/mach-ixp2000/enp2611.c +++ b/arch/arm/mach-ixp2000/enp2611.c | |||
@@ -106,6 +106,7 @@ static void __init enp2611_pci_preinit(void) | |||
106 | { | 106 | { |
107 | ixp2000_reg_write(IXP2000_PCI_ADDR_EXT, 0x00100000); | 107 | ixp2000_reg_write(IXP2000_PCI_ADDR_EXT, 0x00100000); |
108 | ixp2000_pci_preinit(); | 108 | ixp2000_pci_preinit(); |
109 | pcibios_setup("firmware"); | ||
109 | } | 110 | } |
110 | 111 | ||
111 | static inline int enp2611_pci_valid_device(struct pci_bus *bus, | 112 | static inline int enp2611_pci_valid_device(struct pci_bus *bus, |
diff --git a/arch/arm/mach-ixp2000/ixdp2400.c b/arch/arm/mach-ixp2000/ixdp2400.c index 7c782403042a..09101271298e 100644 --- a/arch/arm/mach-ixp2000/ixdp2400.c +++ b/arch/arm/mach-ixp2000/ixdp2400.c | |||
@@ -68,6 +68,7 @@ void __init ixdp2400_pci_preinit(void) | |||
68 | { | 68 | { |
69 | ixp2000_reg_write(IXP2000_PCI_ADDR_EXT, 0x00100000); | 69 | ixp2000_reg_write(IXP2000_PCI_ADDR_EXT, 0x00100000); |
70 | ixp2000_pci_preinit(); | 70 | ixp2000_pci_preinit(); |
71 | pcibios_setup("firmware"); | ||
71 | } | 72 | } |
72 | 73 | ||
73 | int ixdp2400_pci_setup(int nr, struct pci_sys_data *sys) | 74 | int ixdp2400_pci_setup(int nr, struct pci_sys_data *sys) |
diff --git a/arch/arm/mach-ixp2000/ixdp2x01.c b/arch/arm/mach-ixp2000/ixdp2x01.c index 10f06606d460..150519fb38ec 100644 --- a/arch/arm/mach-ixp2000/ixdp2x01.c +++ b/arch/arm/mach-ixp2000/ixdp2x01.c | |||
@@ -212,6 +212,7 @@ void __init ixdp2x01_pci_preinit(void) | |||
212 | { | 212 | { |
213 | ixp2000_reg_write(IXP2000_PCI_ADDR_EXT, 0x00000000); | 213 | ixp2000_reg_write(IXP2000_PCI_ADDR_EXT, 0x00000000); |
214 | ixp2000_pci_preinit(); | 214 | ixp2000_pci_preinit(); |
215 | pcibios_setup("firmware"); | ||
215 | } | 216 | } |
216 | 217 | ||
217 | #define DEVPIN(dev, pin) ((pin) | ((dev) << 3)) | 218 | #define DEVPIN(dev, pin) ((pin) | ((dev) << 3)) |
@@ -299,7 +300,9 @@ struct hw_pci ixdp2x01_pci __initdata = { | |||
299 | 300 | ||
300 | int __init ixdp2x01_pci_init(void) | 301 | int __init ixdp2x01_pci_init(void) |
301 | { | 302 | { |
302 | pci_common_init(&ixdp2x01_pci); | 303 | if (machine_is_ixdp2401() || machine_is_ixdp2801()) |
304 | pci_common_init(&ixdp2x01_pci); | ||
305 | |||
303 | return 0; | 306 | return 0; |
304 | } | 307 | } |
305 | 308 | ||
diff --git a/arch/arm/mach-ixp4xx/Kconfig b/arch/arm/mach-ixp4xx/Kconfig index daadc78e271b..5bf50a2a737d 100644 --- a/arch/arm/mach-ixp4xx/Kconfig +++ b/arch/arm/mach-ixp4xx/Kconfig | |||
@@ -8,11 +8,9 @@ menu "Intel IXP4xx Implementation Options" | |||
8 | 8 | ||
9 | comment "IXP4xx Platforms" | 9 | comment "IXP4xx Platforms" |
10 | 10 | ||
11 | # This entry is placed on top because otherwise it would have | ||
12 | # been shown as a submenu. | ||
13 | config MACH_NSLU2 | 11 | config MACH_NSLU2 |
14 | bool | 12 | bool |
15 | prompt "NSLU2" if !(MACH_IXDP465 || MACH_IXDPG425 || ARCH_IXDP425 || ARCH_ADI_COYOTE || ARCH_AVILA || ARCH_IXCDP1100 || ARCH_PRPMC1100 || MACH_GTWX5715) | 13 | prompt "Linksys NSLU2" |
16 | help | 14 | help |
17 | Say 'Y' here if you want your kernel to support Linksys's | 15 | Say 'Y' here if you want your kernel to support Linksys's |
18 | NSLU2 NAS device. For more information on this platform, | 16 | NSLU2 NAS device. For more information on this platform, |
diff --git a/arch/arm/mach-ixp4xx/common.c b/arch/arm/mach-ixp4xx/common.c index 4bdc9d4526cd..fbadf3021b9e 100644 --- a/arch/arm/mach-ixp4xx/common.c +++ b/arch/arm/mach-ixp4xx/common.c | |||
@@ -111,24 +111,30 @@ static int ixp4xx_set_irq_type(unsigned int irq, unsigned int type) | |||
111 | if (line < 0) | 111 | if (line < 0) |
112 | return -EINVAL; | 112 | return -EINVAL; |
113 | 113 | ||
114 | if (type & IRQT_BOTHEDGE) { | 114 | switch (type){ |
115 | case IRQT_BOTHEDGE: | ||
115 | int_style = IXP4XX_GPIO_STYLE_TRANSITIONAL; | 116 | int_style = IXP4XX_GPIO_STYLE_TRANSITIONAL; |
116 | irq_type = IXP4XX_IRQ_EDGE; | 117 | irq_type = IXP4XX_IRQ_EDGE; |
117 | } else if (type & IRQT_RISING) { | 118 | break; |
119 | case IRQT_RISING: | ||
118 | int_style = IXP4XX_GPIO_STYLE_RISING_EDGE; | 120 | int_style = IXP4XX_GPIO_STYLE_RISING_EDGE; |
119 | irq_type = IXP4XX_IRQ_EDGE; | 121 | irq_type = IXP4XX_IRQ_EDGE; |
120 | } else if (type & IRQT_FALLING) { | 122 | break; |
123 | case IRQT_FALLING: | ||
121 | int_style = IXP4XX_GPIO_STYLE_FALLING_EDGE; | 124 | int_style = IXP4XX_GPIO_STYLE_FALLING_EDGE; |
122 | irq_type = IXP4XX_IRQ_EDGE; | 125 | irq_type = IXP4XX_IRQ_EDGE; |
123 | } else if (type & IRQT_HIGH) { | 126 | break; |
127 | case IRQT_HIGH: | ||
124 | int_style = IXP4XX_GPIO_STYLE_ACTIVE_HIGH; | 128 | int_style = IXP4XX_GPIO_STYLE_ACTIVE_HIGH; |
125 | irq_type = IXP4XX_IRQ_LEVEL; | 129 | irq_type = IXP4XX_IRQ_LEVEL; |
126 | } else if (type & IRQT_LOW) { | 130 | break; |
131 | case IRQT_LOW: | ||
127 | int_style = IXP4XX_GPIO_STYLE_ACTIVE_LOW; | 132 | int_style = IXP4XX_GPIO_STYLE_ACTIVE_LOW; |
128 | irq_type = IXP4XX_IRQ_LEVEL; | 133 | irq_type = IXP4XX_IRQ_LEVEL; |
129 | } else | 134 | break; |
135 | default: | ||
130 | return -EINVAL; | 136 | return -EINVAL; |
131 | 137 | } | |
132 | ixp4xx_config_irq(irq, irq_type); | 138 | ixp4xx_config_irq(irq, irq_type); |
133 | 139 | ||
134 | if (line >= 8) { /* pins 8-15 */ | 140 | if (line >= 8) { /* pins 8-15 */ |
diff --git a/arch/arm/mach-ixp4xx/nas100d-power.c b/arch/arm/mach-ixp4xx/nas100d-power.c index 2bec69bfa715..99d333d7ebdd 100644 --- a/arch/arm/mach-ixp4xx/nas100d-power.c +++ b/arch/arm/mach-ixp4xx/nas100d-power.c | |||
@@ -56,6 +56,9 @@ static int __init nas100d_power_init(void) | |||
56 | 56 | ||
57 | static void __exit nas100d_power_exit(void) | 57 | static void __exit nas100d_power_exit(void) |
58 | { | 58 | { |
59 | if (!(machine_is_nas100d())) | ||
60 | return; | ||
61 | |||
59 | free_irq(NAS100D_RB_IRQ, NULL); | 62 | free_irq(NAS100D_RB_IRQ, NULL); |
60 | } | 63 | } |
61 | 64 | ||
diff --git a/arch/arm/mach-ixp4xx/nas100d-setup.c b/arch/arm/mach-ixp4xx/nas100d-setup.c index 856d56f3b2ae..a3b4c6ac5708 100644 --- a/arch/arm/mach-ixp4xx/nas100d-setup.c +++ b/arch/arm/mach-ixp4xx/nas100d-setup.c | |||
@@ -113,6 +113,9 @@ static void __init nas100d_init(void) | |||
113 | { | 113 | { |
114 | ixp4xx_sys_init(); | 114 | ixp4xx_sys_init(); |
115 | 115 | ||
116 | /* gpio 14 and 15 are _not_ clocks */ | ||
117 | *IXP4XX_GPIO_GPCLKR = 0; | ||
118 | |||
116 | nas100d_flash_resource.start = IXP4XX_EXP_BUS_BASE(0); | 119 | nas100d_flash_resource.start = IXP4XX_EXP_BUS_BASE(0); |
117 | nas100d_flash_resource.end = | 120 | nas100d_flash_resource.end = |
118 | IXP4XX_EXP_BUS_BASE(0) + ixp4xx_exp_bus_size - 1; | 121 | IXP4XX_EXP_BUS_BASE(0) + ixp4xx_exp_bus_size - 1; |
diff --git a/arch/arm/mach-ixp4xx/nslu2-power.c b/arch/arm/mach-ixp4xx/nslu2-power.c index b0ad9e901f6e..d80c362bc539 100644 --- a/arch/arm/mach-ixp4xx/nslu2-power.c +++ b/arch/arm/mach-ixp4xx/nslu2-power.c | |||
@@ -77,6 +77,9 @@ static int __init nslu2_power_init(void) | |||
77 | 77 | ||
78 | static void __exit nslu2_power_exit(void) | 78 | static void __exit nslu2_power_exit(void) |
79 | { | 79 | { |
80 | if (!(machine_is_nslu2())) | ||
81 | return; | ||
82 | |||
80 | free_irq(NSLU2_RB_IRQ, NULL); | 83 | free_irq(NSLU2_RB_IRQ, NULL); |
81 | free_irq(NSLU2_PB_IRQ, NULL); | 84 | free_irq(NSLU2_PB_IRQ, NULL); |
82 | } | 85 | } |
diff --git a/arch/arm/mach-ixp4xx/nslu2-setup.c b/arch/arm/mach-ixp4xx/nslu2-setup.c index da9340a53434..55411f21d838 100644 --- a/arch/arm/mach-ixp4xx/nslu2-setup.c +++ b/arch/arm/mach-ixp4xx/nslu2-setup.c | |||
@@ -27,8 +27,6 @@ static struct flash_platform_data nslu2_flash_data = { | |||
27 | }; | 27 | }; |
28 | 28 | ||
29 | static struct resource nslu2_flash_resource = { | 29 | static struct resource nslu2_flash_resource = { |
30 | .start = NSLU2_FLASH_BASE, | ||
31 | .end = NSLU2_FLASH_BASE + NSLU2_FLASH_SIZE, | ||
32 | .flags = IORESOURCE_MEM, | 30 | .flags = IORESOURCE_MEM, |
33 | }; | 31 | }; |
34 | 32 | ||
@@ -52,6 +50,12 @@ static struct platform_device nslu2_i2c_controller = { | |||
52 | .num_resources = 0, | 50 | .num_resources = 0, |
53 | }; | 51 | }; |
54 | 52 | ||
53 | static struct platform_device nslu2_beeper = { | ||
54 | .name = "ixp4xx-beeper", | ||
55 | .id = NSLU2_GPIO_BUZZ, | ||
56 | .num_resources = 0, | ||
57 | }; | ||
58 | |||
55 | static struct resource nslu2_uart_resources[] = { | 59 | static struct resource nslu2_uart_resources[] = { |
56 | { | 60 | { |
57 | .start = IXP4XX_UART1_BASE_PHYS, | 61 | .start = IXP4XX_UART1_BASE_PHYS, |
@@ -99,6 +103,7 @@ static struct platform_device *nslu2_devices[] __initdata = { | |||
99 | &nslu2_i2c_controller, | 103 | &nslu2_i2c_controller, |
100 | &nslu2_flash, | 104 | &nslu2_flash, |
101 | &nslu2_uart, | 105 | &nslu2_uart, |
106 | &nslu2_beeper, | ||
102 | }; | 107 | }; |
103 | 108 | ||
104 | static void nslu2_power_off(void) | 109 | static void nslu2_power_off(void) |
@@ -116,6 +121,10 @@ static void __init nslu2_init(void) | |||
116 | { | 121 | { |
117 | ixp4xx_sys_init(); | 122 | ixp4xx_sys_init(); |
118 | 123 | ||
124 | nslu2_flash_resource.start = IXP4XX_EXP_BUS_BASE(0); | ||
125 | nslu2_flash_resource.end = | ||
126 | IXP4XX_EXP_BUS_BASE(0) + ixp4xx_exp_bus_size - 1; | ||
127 | |||
119 | pm_power_off = nslu2_power_off; | 128 | pm_power_off = nslu2_power_off; |
120 | 129 | ||
121 | platform_add_devices(nslu2_devices, ARRAY_SIZE(nslu2_devices)); | 130 | platform_add_devices(nslu2_devices, ARRAY_SIZE(nslu2_devices)); |
diff --git a/arch/arm/mach-omap1/board-generic.c b/arch/arm/mach-omap1/board-generic.c index bdc20b51b076..a177e78b2b87 100644 --- a/arch/arm/mach-omap1/board-generic.c +++ b/arch/arm/mach-omap1/board-generic.c | |||
@@ -30,6 +30,7 @@ | |||
30 | 30 | ||
31 | static void __init omap_generic_init_irq(void) | 31 | static void __init omap_generic_init_irq(void) |
32 | { | 32 | { |
33 | omap1_init_common_hw(); | ||
33 | omap_init_irq(); | 34 | omap_init_irq(); |
34 | } | 35 | } |
35 | 36 | ||
@@ -104,7 +105,7 @@ static void __init omap_generic_init(void) | |||
104 | 105 | ||
105 | static void __init omap_generic_map_io(void) | 106 | static void __init omap_generic_map_io(void) |
106 | { | 107 | { |
107 | omap_map_common_io(); | 108 | omap1_map_common_io(); |
108 | } | 109 | } |
109 | 110 | ||
110 | MACHINE_START(OMAP_GENERIC, "Generic OMAP1510/1610/1710") | 111 | MACHINE_START(OMAP_GENERIC, "Generic OMAP1510/1610/1710") |
diff --git a/arch/arm/mach-omap1/board-h2.c b/arch/arm/mach-omap1/board-h2.c index 9533c36a92df..89f0cc74a519 100644 --- a/arch/arm/mach-omap1/board-h2.c +++ b/arch/arm/mach-omap1/board-h2.c | |||
@@ -128,6 +128,7 @@ static void __init h2_init_smc91x(void) | |||
128 | 128 | ||
129 | static void __init h2_init_irq(void) | 129 | static void __init h2_init_irq(void) |
130 | { | 130 | { |
131 | omap1_init_common_hw(); | ||
131 | omap_init_irq(); | 132 | omap_init_irq(); |
132 | omap_gpio_init(); | 133 | omap_gpio_init(); |
133 | h2_init_smc91x(); | 134 | h2_init_smc91x(); |
@@ -194,7 +195,7 @@ static void __init h2_init(void) | |||
194 | 195 | ||
195 | static void __init h2_map_io(void) | 196 | static void __init h2_map_io(void) |
196 | { | 197 | { |
197 | omap_map_common_io(); | 198 | omap1_map_common_io(); |
198 | } | 199 | } |
199 | 200 | ||
200 | MACHINE_START(OMAP_H2, "TI-H2") | 201 | MACHINE_START(OMAP_H2, "TI-H2") |
diff --git a/arch/arm/mach-omap1/board-h3.c b/arch/arm/mach-omap1/board-h3.c index d665efc1c344..d9f386265996 100644 --- a/arch/arm/mach-omap1/board-h3.c +++ b/arch/arm/mach-omap1/board-h3.c | |||
@@ -203,6 +203,7 @@ static void __init h3_init_smc91x(void) | |||
203 | 203 | ||
204 | void h3_init_irq(void) | 204 | void h3_init_irq(void) |
205 | { | 205 | { |
206 | omap1_init_common_hw(); | ||
206 | omap_init_irq(); | 207 | omap_init_irq(); |
207 | omap_gpio_init(); | 208 | omap_gpio_init(); |
208 | h3_init_smc91x(); | 209 | h3_init_smc91x(); |
@@ -210,7 +211,7 @@ void h3_init_irq(void) | |||
210 | 211 | ||
211 | static void __init h3_map_io(void) | 212 | static void __init h3_map_io(void) |
212 | { | 213 | { |
213 | omap_map_common_io(); | 214 | omap1_map_common_io(); |
214 | } | 215 | } |
215 | 216 | ||
216 | MACHINE_START(OMAP_H3, "TI OMAP1710 H3 board") | 217 | MACHINE_START(OMAP_H3, "TI OMAP1710 H3 board") |
diff --git a/arch/arm/mach-omap1/board-innovator.c b/arch/arm/mach-omap1/board-innovator.c index 652f37c7f906..a04e4332915e 100644 --- a/arch/arm/mach-omap1/board-innovator.c +++ b/arch/arm/mach-omap1/board-innovator.c | |||
@@ -181,6 +181,7 @@ static void __init innovator_init_smc91x(void) | |||
181 | 181 | ||
182 | void innovator_init_irq(void) | 182 | void innovator_init_irq(void) |
183 | { | 183 | { |
184 | omap1_init_common_hw(); | ||
184 | omap_init_irq(); | 185 | omap_init_irq(); |
185 | omap_gpio_init(); | 186 | omap_gpio_init(); |
186 | #ifdef CONFIG_ARCH_OMAP15XX | 187 | #ifdef CONFIG_ARCH_OMAP15XX |
@@ -285,7 +286,7 @@ static void __init innovator_init(void) | |||
285 | 286 | ||
286 | static void __init innovator_map_io(void) | 287 | static void __init innovator_map_io(void) |
287 | { | 288 | { |
288 | omap_map_common_io(); | 289 | omap1_map_common_io(); |
289 | 290 | ||
290 | #ifdef CONFIG_ARCH_OMAP15XX | 291 | #ifdef CONFIG_ARCH_OMAP15XX |
291 | if (cpu_is_omap1510()) { | 292 | if (cpu_is_omap1510()) { |
diff --git a/arch/arm/mach-omap1/board-netstar.c b/arch/arm/mach-omap1/board-netstar.c index 58f783930d45..60d5f8a3339c 100644 --- a/arch/arm/mach-omap1/board-netstar.c +++ b/arch/arm/mach-omap1/board-netstar.c | |||
@@ -65,6 +65,7 @@ static struct omap_board_config_kernel netstar_config[] = { | |||
65 | 65 | ||
66 | static void __init netstar_init_irq(void) | 66 | static void __init netstar_init_irq(void) |
67 | { | 67 | { |
68 | omap1_init_common_hw(); | ||
68 | omap_init_irq(); | 69 | omap_init_irq(); |
69 | omap_gpio_init(); | 70 | omap_gpio_init(); |
70 | } | 71 | } |
@@ -108,7 +109,7 @@ static void __init netstar_init(void) | |||
108 | 109 | ||
109 | static void __init netstar_map_io(void) | 110 | static void __init netstar_map_io(void) |
110 | { | 111 | { |
111 | omap_map_common_io(); | 112 | omap1_map_common_io(); |
112 | } | 113 | } |
113 | 114 | ||
114 | #define MACHINE_PANICED 1 | 115 | #define MACHINE_PANICED 1 |
diff --git a/arch/arm/mach-omap1/board-osk.c b/arch/arm/mach-omap1/board-osk.c index e5d126e8f276..543fa136106d 100644 --- a/arch/arm/mach-omap1/board-osk.c +++ b/arch/arm/mach-omap1/board-osk.c | |||
@@ -169,6 +169,7 @@ static void __init osk_init_cf(void) | |||
169 | 169 | ||
170 | static void __init osk_init_irq(void) | 170 | static void __init osk_init_irq(void) |
171 | { | 171 | { |
172 | omap1_init_common_hw(); | ||
172 | omap_init_irq(); | 173 | omap_init_irq(); |
173 | omap_gpio_init(); | 174 | omap_gpio_init(); |
174 | osk_init_smc91x(); | 175 | osk_init_smc91x(); |
@@ -269,7 +270,7 @@ static void __init osk_init(void) | |||
269 | 270 | ||
270 | static void __init osk_map_io(void) | 271 | static void __init osk_map_io(void) |
271 | { | 272 | { |
272 | omap_map_common_io(); | 273 | omap1_map_common_io(); |
273 | } | 274 | } |
274 | 275 | ||
275 | MACHINE_START(OMAP_OSK, "TI-OSK") | 276 | MACHINE_START(OMAP_OSK, "TI-OSK") |
diff --git a/arch/arm/mach-omap1/board-palmte.c b/arch/arm/mach-omap1/board-palmte.c index 67fada207622..e488f7236775 100644 --- a/arch/arm/mach-omap1/board-palmte.c +++ b/arch/arm/mach-omap1/board-palmte.c | |||
@@ -34,6 +34,7 @@ | |||
34 | 34 | ||
35 | static void __init omap_generic_init_irq(void) | 35 | static void __init omap_generic_init_irq(void) |
36 | { | 36 | { |
37 | omap1_init_common_hw(); | ||
37 | omap_init_irq(); | 38 | omap_init_irq(); |
38 | } | 39 | } |
39 | 40 | ||
@@ -72,7 +73,7 @@ static void __init omap_generic_init(void) | |||
72 | 73 | ||
73 | static void __init omap_generic_map_io(void) | 74 | static void __init omap_generic_map_io(void) |
74 | { | 75 | { |
75 | omap_map_common_io(); | 76 | omap1_map_common_io(); |
76 | } | 77 | } |
77 | 78 | ||
78 | MACHINE_START(OMAP_PALMTE, "OMAP310 based Palm Tungsten E") | 79 | MACHINE_START(OMAP_PALMTE, "OMAP310 based Palm Tungsten E") |
diff --git a/arch/arm/mach-omap1/board-perseus2.c b/arch/arm/mach-omap1/board-perseus2.c index 88708a0c52a2..3913a3cc0ce6 100644 --- a/arch/arm/mach-omap1/board-perseus2.c +++ b/arch/arm/mach-omap1/board-perseus2.c | |||
@@ -144,6 +144,7 @@ static void __init perseus2_init_smc91x(void) | |||
144 | 144 | ||
145 | void omap_perseus2_init_irq(void) | 145 | void omap_perseus2_init_irq(void) |
146 | { | 146 | { |
147 | omap1_init_common_hw(); | ||
147 | omap_init_irq(); | 148 | omap_init_irq(); |
148 | omap_gpio_init(); | 149 | omap_gpio_init(); |
149 | perseus2_init_smc91x(); | 150 | perseus2_init_smc91x(); |
@@ -160,7 +161,7 @@ static struct map_desc omap_perseus2_io_desc[] __initdata = { | |||
160 | 161 | ||
161 | static void __init omap_perseus2_map_io(void) | 162 | static void __init omap_perseus2_map_io(void) |
162 | { | 163 | { |
163 | omap_map_common_io(); | 164 | omap1_map_common_io(); |
164 | iotable_init(omap_perseus2_io_desc, | 165 | iotable_init(omap_perseus2_io_desc, |
165 | ARRAY_SIZE(omap_perseus2_io_desc)); | 166 | ARRAY_SIZE(omap_perseus2_io_desc)); |
166 | 167 | ||
diff --git a/arch/arm/mach-omap1/board-voiceblue.c b/arch/arm/mach-omap1/board-voiceblue.c index 959b4b847c87..bfd5fdd1a875 100644 --- a/arch/arm/mach-omap1/board-voiceblue.c +++ b/arch/arm/mach-omap1/board-voiceblue.c | |||
@@ -162,6 +162,7 @@ static struct omap_board_config_kernel voiceblue_config[] = { | |||
162 | 162 | ||
163 | static void __init voiceblue_init_irq(void) | 163 | static void __init voiceblue_init_irq(void) |
164 | { | 164 | { |
165 | omap1_init_common_hw(); | ||
165 | omap_init_irq(); | 166 | omap_init_irq(); |
166 | omap_gpio_init(); | 167 | omap_gpio_init(); |
167 | } | 168 | } |
@@ -206,7 +207,7 @@ static void __init voiceblue_init(void) | |||
206 | 207 | ||
207 | static void __init voiceblue_map_io(void) | 208 | static void __init voiceblue_map_io(void) |
208 | { | 209 | { |
209 | omap_map_common_io(); | 210 | omap1_map_common_io(); |
210 | } | 211 | } |
211 | 212 | ||
212 | #define MACHINE_PANICED 1 | 213 | #define MACHINE_PANICED 1 |
diff --git a/arch/arm/mach-omap1/io.c b/arch/arm/mach-omap1/io.c index a7a19f75b9e1..82d556be79c5 100644 --- a/arch/arm/mach-omap1/io.c +++ b/arch/arm/mach-omap1/io.c | |||
@@ -13,6 +13,7 @@ | |||
13 | #include <linux/kernel.h> | 13 | #include <linux/kernel.h> |
14 | #include <linux/init.h> | 14 | #include <linux/init.h> |
15 | 15 | ||
16 | #include <asm/tlb.h> | ||
16 | #include <asm/mach/map.h> | 17 | #include <asm/mach/map.h> |
17 | #include <asm/io.h> | 18 | #include <asm/io.h> |
18 | #include <asm/arch/mux.h> | 19 | #include <asm/arch/mux.h> |
@@ -83,15 +84,24 @@ static struct map_desc omap16xx_io_desc[] __initdata = { | |||
83 | }; | 84 | }; |
84 | #endif | 85 | #endif |
85 | 86 | ||
86 | static int initialized = 0; | 87 | /* |
87 | 88 | * Maps common IO regions for omap1. This should only get called from | |
88 | static void __init _omap_map_io(void) | 89 | * board specific init. |
90 | */ | ||
91 | void __init omap1_map_common_io(void) | ||
89 | { | 92 | { |
90 | initialized = 1; | ||
91 | |||
92 | /* We have to initialize the IO space mapping before we can run | ||
93 | * cpu_is_omapxxx() macros. */ | ||
94 | iotable_init(omap_io_desc, ARRAY_SIZE(omap_io_desc)); | 93 | iotable_init(omap_io_desc, ARRAY_SIZE(omap_io_desc)); |
94 | |||
95 | /* Normally devicemaps_init() would flush caches and tlb after | ||
96 | * mdesc->map_io(), but we must also do it here because of the CPU | ||
97 | * revision check below. | ||
98 | */ | ||
99 | local_flush_tlb_all(); | ||
100 | flush_cache_all(); | ||
101 | |||
102 | /* We want to check CPU revision early for cpu_is_omapxxxx() macros. | ||
103 | * IO space mapping must be initialized before we can do that. | ||
104 | */ | ||
95 | omap_check_revision(); | 105 | omap_check_revision(); |
96 | 106 | ||
97 | #ifdef CONFIG_ARCH_OMAP730 | 107 | #ifdef CONFIG_ARCH_OMAP730 |
@@ -111,7 +121,14 @@ static void __init _omap_map_io(void) | |||
111 | #endif | 121 | #endif |
112 | 122 | ||
113 | omap_sram_init(); | 123 | omap_sram_init(); |
124 | } | ||
114 | 125 | ||
126 | /* | ||
127 | * Common low-level hardware init for omap1. This should only get called from | ||
128 | * board specific init. | ||
129 | */ | ||
130 | void __init omap1_init_common_hw() | ||
131 | { | ||
115 | /* REVISIT: Refer to OMAP5910 Errata, Advisory SYS_1: "Timeout Abort | 132 | /* REVISIT: Refer to OMAP5910 Errata, Advisory SYS_1: "Timeout Abort |
116 | * on a Posted Write in the TIPB Bridge". | 133 | * on a Posted Write in the TIPB Bridge". |
117 | */ | 134 | */ |
@@ -121,16 +138,7 @@ static void __init _omap_map_io(void) | |||
121 | /* Must init clocks early to assure that timer interrupt works | 138 | /* Must init clocks early to assure that timer interrupt works |
122 | */ | 139 | */ |
123 | omap1_clk_init(); | 140 | omap1_clk_init(); |
124 | } | ||
125 | 141 | ||
126 | /* | 142 | omap1_mux_init(); |
127 | * This should only get called from board specific init | ||
128 | */ | ||
129 | void __init omap_map_common_io(void) | ||
130 | { | ||
131 | if (!initialized) { | ||
132 | _omap_map_io(); | ||
133 | omap1_mux_init(); | ||
134 | } | ||
135 | } | 143 | } |
136 | 144 | ||
diff --git a/arch/arm/mach-omap2/board-generic.c b/arch/arm/mach-omap2/board-generic.c index b937123e5c65..eaecbf422d8c 100644 --- a/arch/arm/mach-omap2/board-generic.c +++ b/arch/arm/mach-omap2/board-generic.c | |||
@@ -33,6 +33,7 @@ | |||
33 | 33 | ||
34 | static void __init omap_generic_init_irq(void) | 34 | static void __init omap_generic_init_irq(void) |
35 | { | 35 | { |
36 | omap2_init_common_hw(); | ||
36 | omap_init_irq(); | 37 | omap_init_irq(); |
37 | } | 38 | } |
38 | 39 | ||
@@ -64,7 +65,7 @@ static void __init omap_generic_init(void) | |||
64 | 65 | ||
65 | static void __init omap_generic_map_io(void) | 66 | static void __init omap_generic_map_io(void) |
66 | { | 67 | { |
67 | omap_map_common_io(); | 68 | omap2_map_common_io(); |
68 | } | 69 | } |
69 | 70 | ||
70 | MACHINE_START(OMAP_GENERIC, "Generic OMAP24xx") | 71 | MACHINE_START(OMAP_GENERIC, "Generic OMAP24xx") |
diff --git a/arch/arm/mach-omap2/board-h4.c b/arch/arm/mach-omap2/board-h4.c index c3c35d40378a..a300d634d8a5 100644 --- a/arch/arm/mach-omap2/board-h4.c +++ b/arch/arm/mach-omap2/board-h4.c | |||
@@ -136,6 +136,7 @@ static inline void __init h4_init_smc91x(void) | |||
136 | 136 | ||
137 | static void __init omap_h4_init_irq(void) | 137 | static void __init omap_h4_init_irq(void) |
138 | { | 138 | { |
139 | omap2_init_common_hw(); | ||
139 | omap_init_irq(); | 140 | omap_init_irq(); |
140 | omap_gpio_init(); | 141 | omap_gpio_init(); |
141 | h4_init_smc91x(); | 142 | h4_init_smc91x(); |
@@ -181,7 +182,7 @@ static void __init omap_h4_init(void) | |||
181 | 182 | ||
182 | static void __init omap_h4_map_io(void) | 183 | static void __init omap_h4_map_io(void) |
183 | { | 184 | { |
184 | omap_map_common_io(); | 185 | omap2_map_common_io(); |
185 | } | 186 | } |
186 | 187 | ||
187 | MACHINE_START(OMAP_H4, "OMAP2420 H4 board") | 188 | MACHINE_START(OMAP_H4, "OMAP2420 H4 board") |
diff --git a/arch/arm/mach-pxa/pxa27x.c b/arch/arm/mach-pxa/pxa27x.c index b41b1efaa2cf..3baa70819f24 100644 --- a/arch/arm/mach-pxa/pxa27x.c +++ b/arch/arm/mach-pxa/pxa27x.c | |||
@@ -44,7 +44,7 @@ unsigned int get_clk_frequency_khz( int info) | |||
44 | 44 | ||
45 | /* Read clkcfg register: it has turbo, b, half-turbo (and f) */ | 45 | /* Read clkcfg register: it has turbo, b, half-turbo (and f) */ |
46 | asm( "mrc\tp14, 0, %0, c6, c0, 0" : "=r" (clkcfg) ); | 46 | asm( "mrc\tp14, 0, %0, c6, c0, 0" : "=r" (clkcfg) ); |
47 | t = clkcfg & (1 << 1); | 47 | t = clkcfg & (1 << 0); |
48 | ht = clkcfg & (1 << 2); | 48 | ht = clkcfg & (1 << 2); |
49 | b = clkcfg & (1 << 3); | 49 | b = clkcfg & (1 << 3); |
50 | 50 | ||
diff --git a/arch/arm/mach-realview/core.c b/arch/arm/mach-realview/core.c index 4a222f59f2cf..4303d988c4bf 100644 --- a/arch/arm/mach-realview/core.c +++ b/arch/arm/mach-realview/core.c | |||
@@ -182,7 +182,7 @@ static const struct icst307_params realview_oscvco_params = { | |||
182 | static void realview_oscvco_set(struct clk *clk, struct icst307_vco vco) | 182 | static void realview_oscvco_set(struct clk *clk, struct icst307_vco vco) |
183 | { | 183 | { |
184 | void __iomem *sys_lock = __io_address(REALVIEW_SYS_BASE) + REALVIEW_SYS_LOCK_OFFSET; | 184 | void __iomem *sys_lock = __io_address(REALVIEW_SYS_BASE) + REALVIEW_SYS_LOCK_OFFSET; |
185 | void __iomem *sys_osc = __io_address(REALVIEW_SYS_BASE) + REALVIEW_SYS_OSC1_OFFSET; | 185 | void __iomem *sys_osc = __io_address(REALVIEW_SYS_BASE) + REALVIEW_SYS_OSC4_OFFSET; |
186 | u32 val; | 186 | u32 val; |
187 | 187 | ||
188 | val = readl(sys_osc) & ~0x7ffff; | 188 | val = readl(sys_osc) & ~0x7ffff; |
diff --git a/arch/arm/mach-realview/platsmp.c b/arch/arm/mach-realview/platsmp.c index a8fbd76d8be5..b8484e15dacb 100644 --- a/arch/arm/mach-realview/platsmp.c +++ b/arch/arm/mach-realview/platsmp.c | |||
@@ -143,6 +143,18 @@ static void __init poke_milo(void) | |||
143 | mb(); | 143 | mb(); |
144 | } | 144 | } |
145 | 145 | ||
146 | /* | ||
147 | * Initialise the CPU possible map early - this describes the CPUs | ||
148 | * which may be present or become present in the system. | ||
149 | */ | ||
150 | void __init smp_init_cpus(void) | ||
151 | { | ||
152 | unsigned int i, ncores = get_core_count(); | ||
153 | |||
154 | for (i = 0; i < ncores; i++) | ||
155 | cpu_set(i, cpu_possible_map); | ||
156 | } | ||
157 | |||
146 | void __init smp_prepare_cpus(unsigned int max_cpus) | 158 | void __init smp_prepare_cpus(unsigned int max_cpus) |
147 | { | 159 | { |
148 | unsigned int ncores = get_core_count(); | 160 | unsigned int ncores = get_core_count(); |
@@ -179,14 +191,11 @@ void __init smp_prepare_cpus(unsigned int max_cpus) | |||
179 | local_timer_setup(cpu); | 191 | local_timer_setup(cpu); |
180 | 192 | ||
181 | /* | 193 | /* |
182 | * Initialise the possible/present maps. | 194 | * Initialise the present map, which describes the set of CPUs |
183 | * cpu_possible_map describes the set of CPUs which may be present | 195 | * actually populated at the present time. |
184 | * cpu_present_map describes the set of CPUs populated | ||
185 | */ | 196 | */ |
186 | for (i = 0; i < max_cpus; i++) { | 197 | for (i = 0; i < max_cpus; i++) |
187 | cpu_set(i, cpu_possible_map); | ||
188 | cpu_set(i, cpu_present_map); | 198 | cpu_set(i, cpu_present_map); |
189 | } | ||
190 | 199 | ||
191 | /* | 200 | /* |
192 | * Do we need any more CPUs? If so, then let them know where | 201 | * Do we need any more CPUs? If so, then let them know where |
diff --git a/arch/arm/mach-s3c2410/Makefile b/arch/arm/mach-s3c2410/Makefile index b4f1e051c768..1217bf00309c 100644 --- a/arch/arm/mach-s3c2410/Makefile +++ b/arch/arm/mach-s3c2410/Makefile | |||
@@ -10,9 +10,13 @@ obj-m := | |||
10 | obj-n := | 10 | obj-n := |
11 | obj- := | 11 | obj- := |
12 | 12 | ||
13 | # S3C2400 support files | ||
14 | obj-$(CONFIG_CPU_S3C2400) += s3c2400-gpio.o | ||
15 | |||
13 | # S3C2410 support files | 16 | # S3C2410 support files |
14 | 17 | ||
15 | obj-$(CONFIG_CPU_S3C2410) += s3c2410.o | 18 | obj-$(CONFIG_CPU_S3C2410) += s3c2410.o |
19 | obj-$(CONFIG_CPU_S3C2410) += s3c2410-gpio.o | ||
16 | obj-$(CONFIG_S3C2410_DMA) += dma.o | 20 | obj-$(CONFIG_S3C2410_DMA) += dma.o |
17 | 21 | ||
18 | # Power Management support | 22 | # Power Management support |
@@ -25,6 +29,7 @@ obj-$(CONFIG_PM_SIMTEC) += pm-simtec.o | |||
25 | obj-$(CONFIG_CPU_S3C2440) += s3c2440.o s3c2440-dsc.o | 29 | obj-$(CONFIG_CPU_S3C2440) += s3c2440.o s3c2440-dsc.o |
26 | obj-$(CONFIG_CPU_S3C2440) += s3c2440-irq.o | 30 | obj-$(CONFIG_CPU_S3C2440) += s3c2440-irq.o |
27 | obj-$(CONFIG_CPU_S3C2440) += s3c2440-clock.o | 31 | obj-$(CONFIG_CPU_S3C2440) += s3c2440-clock.o |
32 | obj-$(CONFIG_CPU_S3C2440) += s3c2410-gpio.o | ||
28 | 33 | ||
29 | # bast extras | 34 | # bast extras |
30 | 35 | ||
diff --git a/arch/arm/mach-s3c2410/clock.c b/arch/arm/mach-s3c2410/clock.c index af2f3d52b61b..08489efdaf06 100644 --- a/arch/arm/mach-s3c2410/clock.c +++ b/arch/arm/mach-s3c2410/clock.c | |||
@@ -40,7 +40,6 @@ | |||
40 | #include <linux/mutex.h> | 40 | #include <linux/mutex.h> |
41 | 41 | ||
42 | #include <asm/hardware.h> | 42 | #include <asm/hardware.h> |
43 | #include <asm/atomic.h> | ||
44 | #include <asm/irq.h> | 43 | #include <asm/irq.h> |
45 | #include <asm/io.h> | 44 | #include <asm/io.h> |
46 | 45 | ||
@@ -59,22 +58,18 @@ static DEFINE_MUTEX(clocks_mutex); | |||
59 | void inline s3c24xx_clk_enable(unsigned int clocks, unsigned int enable) | 58 | void inline s3c24xx_clk_enable(unsigned int clocks, unsigned int enable) |
60 | { | 59 | { |
61 | unsigned long clkcon; | 60 | unsigned long clkcon; |
62 | unsigned long flags; | ||
63 | |||
64 | local_irq_save(flags); | ||
65 | 61 | ||
66 | clkcon = __raw_readl(S3C2410_CLKCON); | 62 | clkcon = __raw_readl(S3C2410_CLKCON); |
67 | clkcon &= ~clocks; | ||
68 | 63 | ||
69 | if (enable) | 64 | if (enable) |
70 | clkcon |= clocks; | 65 | clkcon |= clocks; |
66 | else | ||
67 | clkcon &= ~clocks; | ||
71 | 68 | ||
72 | /* ensure none of the special function bits set */ | 69 | /* ensure none of the special function bits set */ |
73 | clkcon &= ~(S3C2410_CLKCON_IDLE|S3C2410_CLKCON_POWER); | 70 | clkcon &= ~(S3C2410_CLKCON_IDLE|S3C2410_CLKCON_POWER); |
74 | 71 | ||
75 | __raw_writel(clkcon, S3C2410_CLKCON); | 72 | __raw_writel(clkcon, S3C2410_CLKCON); |
76 | |||
77 | local_irq_restore(flags); | ||
78 | } | 73 | } |
79 | 74 | ||
80 | /* enable and disable calls for use with the clk struct */ | 75 | /* enable and disable calls for use with the clk struct */ |
@@ -138,16 +133,32 @@ void clk_put(struct clk *clk) | |||
138 | 133 | ||
139 | int clk_enable(struct clk *clk) | 134 | int clk_enable(struct clk *clk) |
140 | { | 135 | { |
141 | if (IS_ERR(clk)) | 136 | if (IS_ERR(clk) || clk == NULL) |
142 | return -EINVAL; | 137 | return -EINVAL; |
143 | 138 | ||
144 | return (clk->enable)(clk, 1); | 139 | clk_enable(clk->parent); |
140 | |||
141 | mutex_lock(&clocks_mutex); | ||
142 | |||
143 | if ((clk->usage++) == 0) | ||
144 | (clk->enable)(clk, 1); | ||
145 | |||
146 | mutex_unlock(&clocks_mutex); | ||
147 | return 0; | ||
145 | } | 148 | } |
146 | 149 | ||
147 | void clk_disable(struct clk *clk) | 150 | void clk_disable(struct clk *clk) |
148 | { | 151 | { |
149 | if (!IS_ERR(clk)) | 152 | if (IS_ERR(clk) || clk == NULL) |
153 | return; | ||
154 | |||
155 | mutex_lock(&clocks_mutex); | ||
156 | |||
157 | if ((--clk->usage) == 0) | ||
150 | (clk->enable)(clk, 0); | 158 | (clk->enable)(clk, 0); |
159 | |||
160 | mutex_unlock(&clocks_mutex); | ||
161 | clk_disable(clk->parent); | ||
151 | } | 162 | } |
152 | 163 | ||
153 | 164 | ||
@@ -361,6 +372,14 @@ int s3c24xx_register_clock(struct clk *clk) | |||
361 | if (clk->enable == NULL) | 372 | if (clk->enable == NULL) |
362 | clk->enable = clk_null_enable; | 373 | clk->enable = clk_null_enable; |
363 | 374 | ||
375 | /* if this is a standard clock, set the usage state */ | ||
376 | |||
377 | if (clk->ctrlbit) { | ||
378 | unsigned long clkcon = __raw_readl(S3C2410_CLKCON); | ||
379 | |||
380 | clk->usage = (clkcon & clk->ctrlbit) ? 1 : 0; | ||
381 | } | ||
382 | |||
364 | /* add to the list of available clocks */ | 383 | /* add to the list of available clocks */ |
365 | 384 | ||
366 | mutex_lock(&clocks_mutex); | 385 | mutex_lock(&clocks_mutex); |
@@ -402,6 +421,8 @@ int __init s3c24xx_setup_clocks(unsigned long xtal, | |||
402 | * the LCD clock if it is not needed. | 421 | * the LCD clock if it is not needed. |
403 | */ | 422 | */ |
404 | 423 | ||
424 | mutex_lock(&clocks_mutex); | ||
425 | |||
405 | s3c24xx_clk_enable(S3C2410_CLKCON_NAND, 0); | 426 | s3c24xx_clk_enable(S3C2410_CLKCON_NAND, 0); |
406 | s3c24xx_clk_enable(S3C2410_CLKCON_USBH, 0); | 427 | s3c24xx_clk_enable(S3C2410_CLKCON_USBH, 0); |
407 | s3c24xx_clk_enable(S3C2410_CLKCON_USBD, 0); | 428 | s3c24xx_clk_enable(S3C2410_CLKCON_USBD, 0); |
@@ -409,6 +430,8 @@ int __init s3c24xx_setup_clocks(unsigned long xtal, | |||
409 | s3c24xx_clk_enable(S3C2410_CLKCON_IIC, 0); | 430 | s3c24xx_clk_enable(S3C2410_CLKCON_IIC, 0); |
410 | s3c24xx_clk_enable(S3C2410_CLKCON_SPI, 0); | 431 | s3c24xx_clk_enable(S3C2410_CLKCON_SPI, 0); |
411 | 432 | ||
433 | mutex_unlock(&clocks_mutex); | ||
434 | |||
412 | /* assume uart clocks are correctly setup */ | 435 | /* assume uart clocks are correctly setup */ |
413 | 436 | ||
414 | /* register our clocks */ | 437 | /* register our clocks */ |
diff --git a/arch/arm/mach-s3c2410/clock.h b/arch/arm/mach-s3c2410/clock.h index 177d5c8decf7..eb5c95d1e7f2 100644 --- a/arch/arm/mach-s3c2410/clock.h +++ b/arch/arm/mach-s3c2410/clock.h | |||
@@ -16,6 +16,7 @@ struct clk { | |||
16 | struct clk *parent; | 16 | struct clk *parent; |
17 | const char *name; | 17 | const char *name; |
18 | int id; | 18 | int id; |
19 | int usage; | ||
19 | unsigned long rate; | 20 | unsigned long rate; |
20 | unsigned long ctrlbit; | 21 | unsigned long ctrlbit; |
21 | int (*enable)(struct clk *, int enable); | 22 | int (*enable)(struct clk *, int enable); |
diff --git a/arch/arm/mach-s3c2410/cpu.c b/arch/arm/mach-s3c2410/cpu.c index 687fe371369d..00a379334b60 100644 --- a/arch/arm/mach-s3c2410/cpu.c +++ b/arch/arm/mach-s3c2410/cpu.c | |||
@@ -40,6 +40,7 @@ | |||
40 | 40 | ||
41 | #include "cpu.h" | 41 | #include "cpu.h" |
42 | #include "clock.h" | 42 | #include "clock.h" |
43 | #include "s3c2400.h" | ||
43 | #include "s3c2410.h" | 44 | #include "s3c2410.h" |
44 | #include "s3c2440.h" | 45 | #include "s3c2440.h" |
45 | 46 | ||
@@ -55,6 +56,7 @@ struct cpu_table { | |||
55 | 56 | ||
56 | /* table of supported CPUs */ | 57 | /* table of supported CPUs */ |
57 | 58 | ||
59 | static const char name_s3c2400[] = "S3C2400"; | ||
58 | static const char name_s3c2410[] = "S3C2410"; | 60 | static const char name_s3c2410[] = "S3C2410"; |
59 | static const char name_s3c2440[] = "S3C2440"; | 61 | static const char name_s3c2440[] = "S3C2440"; |
60 | static const char name_s3c2410a[] = "S3C2410A"; | 62 | static const char name_s3c2410a[] = "S3C2410A"; |
@@ -96,7 +98,16 @@ static struct cpu_table cpu_ids[] __initdata = { | |||
96 | .init_uarts = s3c2440_init_uarts, | 98 | .init_uarts = s3c2440_init_uarts, |
97 | .init = s3c2440_init, | 99 | .init = s3c2440_init, |
98 | .name = name_s3c2440a | 100 | .name = name_s3c2440a |
99 | } | 101 | }, |
102 | { | ||
103 | .idcode = 0x0, /* S3C2400 doesn't have an idcode */ | ||
104 | .idmask = 0xffffffff, | ||
105 | .map_io = s3c2400_map_io, | ||
106 | .init_clocks = s3c2400_init_clocks, | ||
107 | .init_uarts = s3c2400_init_uarts, | ||
108 | .init = s3c2400_init, | ||
109 | .name = name_s3c2400 | ||
110 | }, | ||
100 | }; | 111 | }; |
101 | 112 | ||
102 | /* minimal IO mapping */ | 113 | /* minimal IO mapping */ |
@@ -148,12 +159,15 @@ static struct cpu_table *cpu; | |||
148 | 159 | ||
149 | void __init s3c24xx_init_io(struct map_desc *mach_desc, int size) | 160 | void __init s3c24xx_init_io(struct map_desc *mach_desc, int size) |
150 | { | 161 | { |
151 | unsigned long idcode; | 162 | unsigned long idcode = 0x0; |
152 | 163 | ||
153 | /* initialise the io descriptors we need for initialisation */ | 164 | /* initialise the io descriptors we need for initialisation */ |
154 | iotable_init(s3c_iodesc, ARRAY_SIZE(s3c_iodesc)); | 165 | iotable_init(s3c_iodesc, ARRAY_SIZE(s3c_iodesc)); |
155 | 166 | ||
167 | #ifndef CONFIG_CPU_S3C2400 | ||
156 | idcode = __raw_readl(S3C2410_GSTATUS1); | 168 | idcode = __raw_readl(S3C2410_GSTATUS1); |
169 | #endif | ||
170 | |||
157 | cpu = s3c_lookup_cpu(idcode); | 171 | cpu = s3c_lookup_cpu(idcode); |
158 | 172 | ||
159 | if (cpu == NULL) { | 173 | if (cpu == NULL) { |
diff --git a/arch/arm/mach-s3c2410/cpu.h b/arch/arm/mach-s3c2410/cpu.h index 9cbe5eef492b..fc1067783f6d 100644 --- a/arch/arm/mach-s3c2410/cpu.h +++ b/arch/arm/mach-s3c2410/cpu.h | |||
@@ -17,11 +17,12 @@ | |||
17 | * 14-Jan-2005 BJD Added s3c24xx_init_clocks() call | 17 | * 14-Jan-2005 BJD Added s3c24xx_init_clocks() call |
18 | * 10-Mar-2005 LCVR Changed S3C2410_{VA,SZ} to S3C24XX_{VA,SZ} & IODESC_ENT | 18 | * 10-Mar-2005 LCVR Changed S3C2410_{VA,SZ} to S3C24XX_{VA,SZ} & IODESC_ENT |
19 | * 14-Mar-2005 BJD Updated for __iomem | 19 | * 14-Mar-2005 BJD Updated for __iomem |
20 | * 15-Jan-2006 LCVR Updated S3C2410_PA_##x to new S3C24XX_PA_##x macro | ||
20 | */ | 21 | */ |
21 | 22 | ||
22 | /* todo - fix when rmk changes iodescs to use `void __iomem *` */ | 23 | /* todo - fix when rmk changes iodescs to use `void __iomem *` */ |
23 | 24 | ||
24 | #define IODESC_ENT(x) { (unsigned long)S3C24XX_VA_##x, __phys_to_pfn(S3C2410_PA_##x), S3C24XX_SZ_##x, MT_DEVICE } | 25 | #define IODESC_ENT(x) { (unsigned long)S3C24XX_VA_##x, __phys_to_pfn(S3C24XX_PA_##x), S3C24XX_SZ_##x, MT_DEVICE } |
25 | 26 | ||
26 | #ifndef MHZ | 27 | #ifndef MHZ |
27 | #define MHZ (1000*1000) | 28 | #define MHZ (1000*1000) |
diff --git a/arch/arm/mach-s3c2410/devs.c b/arch/arm/mach-s3c2410/devs.c index f58406e6ef5a..ca09ba516e4c 100644 --- a/arch/arm/mach-s3c2410/devs.c +++ b/arch/arm/mach-s3c2410/devs.c | |||
@@ -10,6 +10,7 @@ | |||
10 | * published by the Free Software Foundation. | 10 | * published by the Free Software Foundation. |
11 | * | 11 | * |
12 | * Modifications: | 12 | * Modifications: |
13 | * 15-Jan-2006 LCVR Using S3C24XX_PA_##x macro for common S3C24XX devices | ||
13 | * 10-Mar-2005 LCVR Changed S3C2410_{VA,SZ} to S3C24XX_{VA,SZ} | 14 | * 10-Mar-2005 LCVR Changed S3C2410_{VA,SZ} to S3C24XX_{VA,SZ} |
14 | * 10-Feb-2005 BJD Added camera from guillaume.gourat@nexvision.tv | 15 | * 10-Feb-2005 BJD Added camera from guillaume.gourat@nexvision.tv |
15 | * 29-Aug-2004 BJD Added timers 0 through 3 | 16 | * 29-Aug-2004 BJD Added timers 0 through 3 |
@@ -46,8 +47,8 @@ struct platform_device *s3c24xx_uart_devs[3]; | |||
46 | 47 | ||
47 | static struct resource s3c_usb_resource[] = { | 48 | static struct resource s3c_usb_resource[] = { |
48 | [0] = { | 49 | [0] = { |
49 | .start = S3C2410_PA_USBHOST, | 50 | .start = S3C24XX_PA_USBHOST, |
50 | .end = S3C2410_PA_USBHOST + S3C24XX_SZ_USBHOST - 1, | 51 | .end = S3C24XX_PA_USBHOST + S3C24XX_SZ_USBHOST - 1, |
51 | .flags = IORESOURCE_MEM, | 52 | .flags = IORESOURCE_MEM, |
52 | }, | 53 | }, |
53 | [1] = { | 54 | [1] = { |
@@ -76,8 +77,8 @@ EXPORT_SYMBOL(s3c_device_usb); | |||
76 | 77 | ||
77 | static struct resource s3c_lcd_resource[] = { | 78 | static struct resource s3c_lcd_resource[] = { |
78 | [0] = { | 79 | [0] = { |
79 | .start = S3C2410_PA_LCD, | 80 | .start = S3C24XX_PA_LCD, |
80 | .end = S3C2410_PA_LCD + S3C24XX_SZ_LCD - 1, | 81 | .end = S3C24XX_PA_LCD + S3C24XX_SZ_LCD - 1, |
81 | .flags = IORESOURCE_MEM, | 82 | .flags = IORESOURCE_MEM, |
82 | }, | 83 | }, |
83 | [1] = { | 84 | [1] = { |
@@ -139,8 +140,8 @@ EXPORT_SYMBOL(s3c_device_nand); | |||
139 | 140 | ||
140 | static struct resource s3c_usbgadget_resource[] = { | 141 | static struct resource s3c_usbgadget_resource[] = { |
141 | [0] = { | 142 | [0] = { |
142 | .start = S3C2410_PA_USBDEV, | 143 | .start = S3C24XX_PA_USBDEV, |
143 | .end = S3C2410_PA_USBDEV + S3C24XX_SZ_USBDEV - 1, | 144 | .end = S3C24XX_PA_USBDEV + S3C24XX_SZ_USBDEV - 1, |
144 | .flags = IORESOURCE_MEM, | 145 | .flags = IORESOURCE_MEM, |
145 | }, | 146 | }, |
146 | [1] = { | 147 | [1] = { |
@@ -164,8 +165,8 @@ EXPORT_SYMBOL(s3c_device_usbgadget); | |||
164 | 165 | ||
165 | static struct resource s3c_wdt_resource[] = { | 166 | static struct resource s3c_wdt_resource[] = { |
166 | [0] = { | 167 | [0] = { |
167 | .start = S3C2410_PA_WATCHDOG, | 168 | .start = S3C24XX_PA_WATCHDOG, |
168 | .end = S3C2410_PA_WATCHDOG + S3C24XX_SZ_WATCHDOG - 1, | 169 | .end = S3C24XX_PA_WATCHDOG + S3C24XX_SZ_WATCHDOG - 1, |
169 | .flags = IORESOURCE_MEM, | 170 | .flags = IORESOURCE_MEM, |
170 | }, | 171 | }, |
171 | [1] = { | 172 | [1] = { |
@@ -189,8 +190,8 @@ EXPORT_SYMBOL(s3c_device_wdt); | |||
189 | 190 | ||
190 | static struct resource s3c_i2c_resource[] = { | 191 | static struct resource s3c_i2c_resource[] = { |
191 | [0] = { | 192 | [0] = { |
192 | .start = S3C2410_PA_IIC, | 193 | .start = S3C24XX_PA_IIC, |
193 | .end = S3C2410_PA_IIC + S3C24XX_SZ_IIC - 1, | 194 | .end = S3C24XX_PA_IIC + S3C24XX_SZ_IIC - 1, |
194 | .flags = IORESOURCE_MEM, | 195 | .flags = IORESOURCE_MEM, |
195 | }, | 196 | }, |
196 | [1] = { | 197 | [1] = { |
@@ -214,8 +215,8 @@ EXPORT_SYMBOL(s3c_device_i2c); | |||
214 | 215 | ||
215 | static struct resource s3c_iis_resource[] = { | 216 | static struct resource s3c_iis_resource[] = { |
216 | [0] = { | 217 | [0] = { |
217 | .start = S3C2410_PA_IIS, | 218 | .start = S3C24XX_PA_IIS, |
218 | .end = S3C2410_PA_IIS + S3C24XX_SZ_IIS -1, | 219 | .end = S3C24XX_PA_IIS + S3C24XX_SZ_IIS -1, |
219 | .flags = IORESOURCE_MEM, | 220 | .flags = IORESOURCE_MEM, |
220 | } | 221 | } |
221 | }; | 222 | }; |
@@ -239,8 +240,8 @@ EXPORT_SYMBOL(s3c_device_iis); | |||
239 | 240 | ||
240 | static struct resource s3c_rtc_resource[] = { | 241 | static struct resource s3c_rtc_resource[] = { |
241 | [0] = { | 242 | [0] = { |
242 | .start = S3C2410_PA_RTC, | 243 | .start = S3C24XX_PA_RTC, |
243 | .end = S3C2410_PA_RTC + 0xff, | 244 | .end = S3C24XX_PA_RTC + 0xff, |
244 | .flags = IORESOURCE_MEM, | 245 | .flags = IORESOURCE_MEM, |
245 | }, | 246 | }, |
246 | [1] = { | 247 | [1] = { |
@@ -268,12 +269,17 @@ EXPORT_SYMBOL(s3c_device_rtc); | |||
268 | 269 | ||
269 | static struct resource s3c_adc_resource[] = { | 270 | static struct resource s3c_adc_resource[] = { |
270 | [0] = { | 271 | [0] = { |
271 | .start = S3C2410_PA_ADC, | 272 | .start = S3C24XX_PA_ADC, |
272 | .end = S3C2410_PA_ADC + S3C24XX_SZ_ADC - 1, | 273 | .end = S3C24XX_PA_ADC + S3C24XX_SZ_ADC - 1, |
273 | .flags = IORESOURCE_MEM, | 274 | .flags = IORESOURCE_MEM, |
274 | }, | 275 | }, |
275 | [1] = { | 276 | [1] = { |
276 | .start = IRQ_TC, | 277 | .start = IRQ_TC, |
278 | .end = IRQ_TC, | ||
279 | .flags = IORESOURCE_IRQ, | ||
280 | }, | ||
281 | [2] = { | ||
282 | .start = IRQ_ADC, | ||
277 | .end = IRQ_ADC, | 283 | .end = IRQ_ADC, |
278 | .flags = IORESOURCE_IRQ, | 284 | .flags = IORESOURCE_IRQ, |
279 | } | 285 | } |
@@ -316,8 +322,8 @@ EXPORT_SYMBOL(s3c_device_sdi); | |||
316 | 322 | ||
317 | static struct resource s3c_spi0_resource[] = { | 323 | static struct resource s3c_spi0_resource[] = { |
318 | [0] = { | 324 | [0] = { |
319 | .start = S3C2410_PA_SPI, | 325 | .start = S3C24XX_PA_SPI, |
320 | .end = S3C2410_PA_SPI + 0x1f, | 326 | .end = S3C24XX_PA_SPI + 0x1f, |
321 | .flags = IORESOURCE_MEM, | 327 | .flags = IORESOURCE_MEM, |
322 | }, | 328 | }, |
323 | [1] = { | 329 | [1] = { |
@@ -328,11 +334,17 @@ static struct resource s3c_spi0_resource[] = { | |||
328 | 334 | ||
329 | }; | 335 | }; |
330 | 336 | ||
337 | static u64 s3c_device_spi0_dmamask = 0xffffffffUL; | ||
338 | |||
331 | struct platform_device s3c_device_spi0 = { | 339 | struct platform_device s3c_device_spi0 = { |
332 | .name = "s3c2410-spi", | 340 | .name = "s3c2410-spi", |
333 | .id = 0, | 341 | .id = 0, |
334 | .num_resources = ARRAY_SIZE(s3c_spi0_resource), | 342 | .num_resources = ARRAY_SIZE(s3c_spi0_resource), |
335 | .resource = s3c_spi0_resource, | 343 | .resource = s3c_spi0_resource, |
344 | .dev = { | ||
345 | .dma_mask = &s3c_device_spi0_dmamask, | ||
346 | .coherent_dma_mask = 0xffffffffUL | ||
347 | } | ||
336 | }; | 348 | }; |
337 | 349 | ||
338 | EXPORT_SYMBOL(s3c_device_spi0); | 350 | EXPORT_SYMBOL(s3c_device_spi0); |
@@ -341,8 +353,8 @@ EXPORT_SYMBOL(s3c_device_spi0); | |||
341 | 353 | ||
342 | static struct resource s3c_spi1_resource[] = { | 354 | static struct resource s3c_spi1_resource[] = { |
343 | [0] = { | 355 | [0] = { |
344 | .start = S3C2410_PA_SPI + 0x20, | 356 | .start = S3C24XX_PA_SPI + 0x20, |
345 | .end = S3C2410_PA_SPI + 0x20 + 0x1f, | 357 | .end = S3C24XX_PA_SPI + 0x20 + 0x1f, |
346 | .flags = IORESOURCE_MEM, | 358 | .flags = IORESOURCE_MEM, |
347 | }, | 359 | }, |
348 | [1] = { | 360 | [1] = { |
@@ -353,11 +365,17 @@ static struct resource s3c_spi1_resource[] = { | |||
353 | 365 | ||
354 | }; | 366 | }; |
355 | 367 | ||
368 | static u64 s3c_device_spi1_dmamask = 0xffffffffUL; | ||
369 | |||
356 | struct platform_device s3c_device_spi1 = { | 370 | struct platform_device s3c_device_spi1 = { |
357 | .name = "s3c2410-spi", | 371 | .name = "s3c2410-spi", |
358 | .id = 1, | 372 | .id = 1, |
359 | .num_resources = ARRAY_SIZE(s3c_spi1_resource), | 373 | .num_resources = ARRAY_SIZE(s3c_spi1_resource), |
360 | .resource = s3c_spi1_resource, | 374 | .resource = s3c_spi1_resource, |
375 | .dev = { | ||
376 | .dma_mask = &s3c_device_spi1_dmamask, | ||
377 | .coherent_dma_mask = 0xffffffffUL | ||
378 | } | ||
361 | }; | 379 | }; |
362 | 380 | ||
363 | EXPORT_SYMBOL(s3c_device_spi1); | 381 | EXPORT_SYMBOL(s3c_device_spi1); |
@@ -366,8 +384,8 @@ EXPORT_SYMBOL(s3c_device_spi1); | |||
366 | 384 | ||
367 | static struct resource s3c_timer0_resource[] = { | 385 | static struct resource s3c_timer0_resource[] = { |
368 | [0] = { | 386 | [0] = { |
369 | .start = S3C2410_PA_TIMER + 0x0C, | 387 | .start = S3C24XX_PA_TIMER + 0x0C, |
370 | .end = S3C2410_PA_TIMER + 0x0C + 0xB, | 388 | .end = S3C24XX_PA_TIMER + 0x0C + 0xB, |
371 | .flags = IORESOURCE_MEM, | 389 | .flags = IORESOURCE_MEM, |
372 | }, | 390 | }, |
373 | [1] = { | 391 | [1] = { |
@@ -391,8 +409,8 @@ EXPORT_SYMBOL(s3c_device_timer0); | |||
391 | 409 | ||
392 | static struct resource s3c_timer1_resource[] = { | 410 | static struct resource s3c_timer1_resource[] = { |
393 | [0] = { | 411 | [0] = { |
394 | .start = S3C2410_PA_TIMER + 0x18, | 412 | .start = S3C24XX_PA_TIMER + 0x18, |
395 | .end = S3C2410_PA_TIMER + 0x23, | 413 | .end = S3C24XX_PA_TIMER + 0x23, |
396 | .flags = IORESOURCE_MEM, | 414 | .flags = IORESOURCE_MEM, |
397 | }, | 415 | }, |
398 | [1] = { | 416 | [1] = { |
@@ -416,8 +434,8 @@ EXPORT_SYMBOL(s3c_device_timer1); | |||
416 | 434 | ||
417 | static struct resource s3c_timer2_resource[] = { | 435 | static struct resource s3c_timer2_resource[] = { |
418 | [0] = { | 436 | [0] = { |
419 | .start = S3C2410_PA_TIMER + 0x24, | 437 | .start = S3C24XX_PA_TIMER + 0x24, |
420 | .end = S3C2410_PA_TIMER + 0x2F, | 438 | .end = S3C24XX_PA_TIMER + 0x2F, |
421 | .flags = IORESOURCE_MEM, | 439 | .flags = IORESOURCE_MEM, |
422 | }, | 440 | }, |
423 | [1] = { | 441 | [1] = { |
@@ -441,8 +459,8 @@ EXPORT_SYMBOL(s3c_device_timer2); | |||
441 | 459 | ||
442 | static struct resource s3c_timer3_resource[] = { | 460 | static struct resource s3c_timer3_resource[] = { |
443 | [0] = { | 461 | [0] = { |
444 | .start = S3C2410_PA_TIMER + 0x30, | 462 | .start = S3C24XX_PA_TIMER + 0x30, |
445 | .end = S3C2410_PA_TIMER + 0x3B, | 463 | .end = S3C24XX_PA_TIMER + 0x3B, |
446 | .flags = IORESOURCE_MEM, | 464 | .flags = IORESOURCE_MEM, |
447 | }, | 465 | }, |
448 | [1] = { | 466 | [1] = { |
diff --git a/arch/arm/mach-s3c2410/dma.c b/arch/arm/mach-s3c2410/dma.c index 65feaf20d23e..4dbd8e758ea6 100644 --- a/arch/arm/mach-s3c2410/dma.c +++ b/arch/arm/mach-s3c2410/dma.c | |||
@@ -1152,7 +1152,7 @@ static int __init s3c2410_init_dma(void) | |||
1152 | 1152 | ||
1153 | printk("S3C2410 DMA Driver, (c) 2003-2004 Simtec Electronics\n"); | 1153 | printk("S3C2410 DMA Driver, (c) 2003-2004 Simtec Electronics\n"); |
1154 | 1154 | ||
1155 | dma_base = ioremap(S3C2410_PA_DMA, 0x200); | 1155 | dma_base = ioremap(S3C24XX_PA_DMA, 0x200); |
1156 | if (dma_base == NULL) { | 1156 | if (dma_base == NULL) { |
1157 | printk(KERN_ERR "dma failed to remap register block\n"); | 1157 | printk(KERN_ERR "dma failed to remap register block\n"); |
1158 | return -ENOMEM; | 1158 | return -ENOMEM; |
diff --git a/arch/arm/mach-s3c2410/gpio.c b/arch/arm/mach-s3c2410/gpio.c index 23ea3d5fa09c..cd39e8684584 100644 --- a/arch/arm/mach-s3c2410/gpio.c +++ b/arch/arm/mach-s3c2410/gpio.c | |||
@@ -31,6 +31,7 @@ | |||
31 | * 05-Nov-2004 BJD EXPORT_SYMBOL() added for all code | 31 | * 05-Nov-2004 BJD EXPORT_SYMBOL() added for all code |
32 | * 13-Mar-2005 BJD Updates for __iomem | 32 | * 13-Mar-2005 BJD Updates for __iomem |
33 | * 26-Oct-2005 BJD Added generic configuration types | 33 | * 26-Oct-2005 BJD Added generic configuration types |
34 | * 15-Jan-2006 LCVR Added support for the S3C2400 | ||
34 | */ | 35 | */ |
35 | 36 | ||
36 | 37 | ||
@@ -48,7 +49,7 @@ | |||
48 | 49 | ||
49 | void s3c2410_gpio_cfgpin(unsigned int pin, unsigned int function) | 50 | void s3c2410_gpio_cfgpin(unsigned int pin, unsigned int function) |
50 | { | 51 | { |
51 | void __iomem *base = S3C2410_GPIO_BASE(pin); | 52 | void __iomem *base = S3C24XX_GPIO_BASE(pin); |
52 | unsigned long mask; | 53 | unsigned long mask; |
53 | unsigned long con; | 54 | unsigned long con; |
54 | unsigned long flags; | 55 | unsigned long flags; |
@@ -95,7 +96,7 @@ EXPORT_SYMBOL(s3c2410_gpio_cfgpin); | |||
95 | 96 | ||
96 | unsigned int s3c2410_gpio_getcfg(unsigned int pin) | 97 | unsigned int s3c2410_gpio_getcfg(unsigned int pin) |
97 | { | 98 | { |
98 | void __iomem *base = S3C2410_GPIO_BASE(pin); | 99 | void __iomem *base = S3C24XX_GPIO_BASE(pin); |
99 | unsigned long mask; | 100 | unsigned long mask; |
100 | 101 | ||
101 | if (pin < S3C2410_GPIO_BANKB) { | 102 | if (pin < S3C2410_GPIO_BANKB) { |
@@ -111,7 +112,7 @@ EXPORT_SYMBOL(s3c2410_gpio_getcfg); | |||
111 | 112 | ||
112 | void s3c2410_gpio_pullup(unsigned int pin, unsigned int to) | 113 | void s3c2410_gpio_pullup(unsigned int pin, unsigned int to) |
113 | { | 114 | { |
114 | void __iomem *base = S3C2410_GPIO_BASE(pin); | 115 | void __iomem *base = S3C24XX_GPIO_BASE(pin); |
115 | unsigned long offs = S3C2410_GPIO_OFFSET(pin); | 116 | unsigned long offs = S3C2410_GPIO_OFFSET(pin); |
116 | unsigned long flags; | 117 | unsigned long flags; |
117 | unsigned long up; | 118 | unsigned long up; |
@@ -133,7 +134,7 @@ EXPORT_SYMBOL(s3c2410_gpio_pullup); | |||
133 | 134 | ||
134 | void s3c2410_gpio_setpin(unsigned int pin, unsigned int to) | 135 | void s3c2410_gpio_setpin(unsigned int pin, unsigned int to) |
135 | { | 136 | { |
136 | void __iomem *base = S3C2410_GPIO_BASE(pin); | 137 | void __iomem *base = S3C24XX_GPIO_BASE(pin); |
137 | unsigned long offs = S3C2410_GPIO_OFFSET(pin); | 138 | unsigned long offs = S3C2410_GPIO_OFFSET(pin); |
138 | unsigned long flags; | 139 | unsigned long flags; |
139 | unsigned long dat; | 140 | unsigned long dat; |
@@ -152,7 +153,7 @@ EXPORT_SYMBOL(s3c2410_gpio_setpin); | |||
152 | 153 | ||
153 | unsigned int s3c2410_gpio_getpin(unsigned int pin) | 154 | unsigned int s3c2410_gpio_getpin(unsigned int pin) |
154 | { | 155 | { |
155 | void __iomem *base = S3C2410_GPIO_BASE(pin); | 156 | void __iomem *base = S3C24XX_GPIO_BASE(pin); |
156 | unsigned long offs = S3C2410_GPIO_OFFSET(pin); | 157 | unsigned long offs = S3C2410_GPIO_OFFSET(pin); |
157 | 158 | ||
158 | return __raw_readl(base + 0x04) & (1<< offs); | 159 | return __raw_readl(base + 0x04) & (1<< offs); |
@@ -166,70 +167,13 @@ unsigned int s3c2410_modify_misccr(unsigned int clear, unsigned int change) | |||
166 | unsigned long misccr; | 167 | unsigned long misccr; |
167 | 168 | ||
168 | local_irq_save(flags); | 169 | local_irq_save(flags); |
169 | misccr = __raw_readl(S3C2410_MISCCR); | 170 | misccr = __raw_readl(S3C24XX_MISCCR); |
170 | misccr &= ~clear; | 171 | misccr &= ~clear; |
171 | misccr ^= change; | 172 | misccr ^= change; |
172 | __raw_writel(misccr, S3C2410_MISCCR); | 173 | __raw_writel(misccr, S3C24XX_MISCCR); |
173 | local_irq_restore(flags); | 174 | local_irq_restore(flags); |
174 | 175 | ||
175 | return misccr; | 176 | return misccr; |
176 | } | 177 | } |
177 | 178 | ||
178 | EXPORT_SYMBOL(s3c2410_modify_misccr); | 179 | EXPORT_SYMBOL(s3c2410_modify_misccr); |
179 | |||
180 | int s3c2410_gpio_getirq(unsigned int pin) | ||
181 | { | ||
182 | if (pin < S3C2410_GPF0 || pin > S3C2410_GPG15_EINT23) | ||
183 | return -1; /* not valid interrupts */ | ||
184 | |||
185 | if (pin < S3C2410_GPG0 && pin > S3C2410_GPF7) | ||
186 | return -1; /* not valid pin */ | ||
187 | |||
188 | if (pin < S3C2410_GPF4) | ||
189 | return (pin - S3C2410_GPF0) + IRQ_EINT0; | ||
190 | |||
191 | if (pin < S3C2410_GPG0) | ||
192 | return (pin - S3C2410_GPF4) + IRQ_EINT4; | ||
193 | |||
194 | return (pin - S3C2410_GPG0) + IRQ_EINT8; | ||
195 | } | ||
196 | |||
197 | EXPORT_SYMBOL(s3c2410_gpio_getirq); | ||
198 | |||
199 | int s3c2410_gpio_irqfilter(unsigned int pin, unsigned int on, | ||
200 | unsigned int config) | ||
201 | { | ||
202 | void __iomem *reg = S3C2410_EINFLT0; | ||
203 | unsigned long flags; | ||
204 | unsigned long val; | ||
205 | |||
206 | if (pin < S3C2410_GPG8 || pin > S3C2410_GPG15) | ||
207 | return -1; | ||
208 | |||
209 | config &= 0xff; | ||
210 | |||
211 | pin -= S3C2410_GPG8_EINT16; | ||
212 | reg += pin & ~3; | ||
213 | |||
214 | local_irq_save(flags); | ||
215 | |||
216 | /* update filter width and clock source */ | ||
217 | |||
218 | val = __raw_readl(reg); | ||
219 | val &= ~(0xff << ((pin & 3) * 8)); | ||
220 | val |= config << ((pin & 3) * 8); | ||
221 | __raw_writel(val, reg); | ||
222 | |||
223 | /* update filter enable */ | ||
224 | |||
225 | val = __raw_readl(S3C2410_EXTINT2); | ||
226 | val &= ~(1 << ((pin * 4) + 3)); | ||
227 | val |= on << ((pin * 4) + 3); | ||
228 | __raw_writel(val, S3C2410_EXTINT2); | ||
229 | |||
230 | local_irq_restore(flags); | ||
231 | |||
232 | return 0; | ||
233 | } | ||
234 | |||
235 | EXPORT_SYMBOL(s3c2410_gpio_irqfilter); | ||
diff --git a/arch/arm/mach-s3c2410/mach-h1940.c b/arch/arm/mach-s3c2410/mach-h1940.c index 1c316f14ed94..646a3a5d33a5 100644 --- a/arch/arm/mach-s3c2410/mach-h1940.c +++ b/arch/arm/mach-s3c2410/mach-h1940.c | |||
@@ -46,10 +46,11 @@ | |||
46 | #include <asm/irq.h> | 46 | #include <asm/irq.h> |
47 | #include <asm/mach-types.h> | 47 | #include <asm/mach-types.h> |
48 | 48 | ||
49 | //#include <asm/debug-ll.h> | 49 | |
50 | #include <asm/arch/regs-serial.h> | 50 | #include <asm/arch/regs-serial.h> |
51 | #include <asm/arch/regs-lcd.h> | 51 | #include <asm/arch/regs-lcd.h> |
52 | 52 | ||
53 | #include <asm/arch/h1940-latch.h> | ||
53 | #include <asm/arch/fb.h> | 54 | #include <asm/arch/fb.h> |
54 | 55 | ||
55 | #include <linux/serial_core.h> | 56 | #include <linux/serial_core.h> |
@@ -59,7 +60,12 @@ | |||
59 | #include "cpu.h" | 60 | #include "cpu.h" |
60 | 61 | ||
61 | static struct map_desc h1940_iodesc[] __initdata = { | 62 | static struct map_desc h1940_iodesc[] __initdata = { |
62 | /* nothing here yet */ | 63 | [0] = { |
64 | .virtual = (unsigned long)H1940_LATCH, | ||
65 | .pfn = __phys_to_pfn(H1940_PA_LATCH), | ||
66 | .length = SZ_16K, | ||
67 | .type = MT_DEVICE | ||
68 | }, | ||
63 | }; | 69 | }; |
64 | 70 | ||
65 | #define UCON S3C2410_UCON_DEFAULT | S3C2410_UCON_UCLK | 71 | #define UCON S3C2410_UCON_DEFAULT | S3C2410_UCON_UCLK |
@@ -92,6 +98,25 @@ static struct s3c2410_uartcfg h1940_uartcfgs[] = { | |||
92 | } | 98 | } |
93 | }; | 99 | }; |
94 | 100 | ||
101 | /* Board control latch control */ | ||
102 | |||
103 | static unsigned int latch_state = H1940_LATCH_DEFAULT; | ||
104 | |||
105 | void h1940_latch_control(unsigned int clear, unsigned int set) | ||
106 | { | ||
107 | unsigned long flags; | ||
108 | |||
109 | local_irq_save(flags); | ||
110 | |||
111 | latch_state &= ~clear; | ||
112 | latch_state |= set; | ||
113 | |||
114 | __raw_writel(latch_state, H1940_LATCH); | ||
115 | |||
116 | local_irq_restore(flags); | ||
117 | } | ||
118 | |||
119 | EXPORT_SYMBOL_GPL(h1940_latch_control); | ||
95 | 120 | ||
96 | 121 | ||
97 | /** | 122 | /** |
diff --git a/arch/arm/mach-s3c2410/s3c2400-gpio.c b/arch/arm/mach-s3c2410/s3c2400-gpio.c new file mode 100644 index 000000000000..5127f39fa9bf --- /dev/null +++ b/arch/arm/mach-s3c2410/s3c2400-gpio.c | |||
@@ -0,0 +1,45 @@ | |||
1 | /* linux/arch/arm/mach-s3c2410/gpio.c | ||
2 | * | ||
3 | * Copyright (c) 2006 Lucas Correia Villa Real <lucasvr@gobolinux.org> | ||
4 | * | ||
5 | * S3C2400 GPIO support | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License as published by | ||
9 | * the Free Software Foundation; either version 2 of the License, or | ||
10 | * (at your option) any later version. | ||
11 | * | ||
12 | * This program is distributed in the hope that it will be useful, | ||
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
15 | * GNU General Public License for more details. | ||
16 | * | ||
17 | * You should have received a copy of the GNU General Public License | ||
18 | * along with this program; if not, write to the Free Software | ||
19 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
20 | * | ||
21 | * Changelog | ||
22 | * 15-Jan-2006 LCVR Splitted from gpio.c, adding support for the S3C2400 | ||
23 | */ | ||
24 | |||
25 | #include <linux/kernel.h> | ||
26 | #include <linux/init.h> | ||
27 | #include <linux/module.h> | ||
28 | #include <linux/interrupt.h> | ||
29 | #include <linux/ioport.h> | ||
30 | |||
31 | #include <asm/hardware.h> | ||
32 | #include <asm/irq.h> | ||
33 | #include <asm/io.h> | ||
34 | |||
35 | #include <asm/arch/regs-gpio.h> | ||
36 | |||
37 | int s3c2400_gpio_getirq(unsigned int pin) | ||
38 | { | ||
39 | if (pin < S3C2410_GPE0 || pin > S3C2400_GPE7_EINT7) | ||
40 | return -1; /* not valid interrupts */ | ||
41 | |||
42 | return (pin - S3C2410_GPE0) + IRQ_EINT0; | ||
43 | } | ||
44 | |||
45 | EXPORT_SYMBOL(s3c2400_gpio_getirq); | ||
diff --git a/arch/arm/mach-s3c2410/s3c2400.h b/arch/arm/mach-s3c2410/s3c2400.h new file mode 100644 index 000000000000..8b2394e1ed40 --- /dev/null +++ b/arch/arm/mach-s3c2410/s3c2400.h | |||
@@ -0,0 +1,31 @@ | |||
1 | /* arch/arm/mach-s3c2410/s3c2400.h | ||
2 | * | ||
3 | * Copyright (c) 2004 Simtec Electronics | ||
4 | * Ben Dooks <ben@simtec.co.uk> | ||
5 | * | ||
6 | * Header file for S3C2400 cpu support | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | * | ||
12 | * Modifications: | ||
13 | * 09-Fev-2006 LCVR First version, based on s3c2410.h | ||
14 | */ | ||
15 | |||
16 | #ifdef CONFIG_CPU_S3C2400 | ||
17 | |||
18 | extern int s3c2400_init(void); | ||
19 | |||
20 | extern void s3c2400_map_io(struct map_desc *mach_desc, int size); | ||
21 | |||
22 | extern void s3c2400_init_uarts(struct s3c2410_uartcfg *cfg, int no); | ||
23 | |||
24 | extern void s3c2400_init_clocks(int xtal); | ||
25 | |||
26 | #else | ||
27 | #define s3c2400_init_clocks NULL | ||
28 | #define s3c2400_init_uarts NULL | ||
29 | #define s3c2400_map_io NULL | ||
30 | #define s3c2400_init NULL | ||
31 | #endif | ||
diff --git a/arch/arm/mach-s3c2410/s3c2410-gpio.c b/arch/arm/mach-s3c2410/s3c2410-gpio.c new file mode 100644 index 000000000000..d5e1caea1d23 --- /dev/null +++ b/arch/arm/mach-s3c2410/s3c2410-gpio.c | |||
@@ -0,0 +1,93 @@ | |||
1 | /* linux/arch/arm/mach-s3c2410/gpio.c | ||
2 | * | ||
3 | * Copyright (c) 2004-2006 Simtec Electronics | ||
4 | * Ben Dooks <ben@simtec.co.uk> | ||
5 | * | ||
6 | * S3C2410 GPIO support | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License as published by | ||
10 | * the Free Software Foundation; either version 2 of the License, or | ||
11 | * (at your option) any later version. | ||
12 | * | ||
13 | * This program is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
16 | * GNU General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License | ||
19 | * along with this program; if not, write to the Free Software | ||
20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
21 | * | ||
22 | * Changelog | ||
23 | * 15-Jan-2006 LCVR Splitted from gpio.c | ||
24 | */ | ||
25 | |||
26 | #include <linux/kernel.h> | ||
27 | #include <linux/init.h> | ||
28 | #include <linux/module.h> | ||
29 | #include <linux/interrupt.h> | ||
30 | #include <linux/ioport.h> | ||
31 | |||
32 | #include <asm/hardware.h> | ||
33 | #include <asm/irq.h> | ||
34 | #include <asm/io.h> | ||
35 | |||
36 | #include <asm/arch/regs-gpio.h> | ||
37 | |||
38 | int s3c2410_gpio_irqfilter(unsigned int pin, unsigned int on, | ||
39 | unsigned int config) | ||
40 | { | ||
41 | void __iomem *reg = S3C2410_EINFLT0; | ||
42 | unsigned long flags; | ||
43 | unsigned long val; | ||
44 | |||
45 | if (pin < S3C2410_GPG8 || pin > S3C2410_GPG15) | ||
46 | return -1; | ||
47 | |||
48 | config &= 0xff; | ||
49 | |||
50 | pin -= S3C2410_GPG8_EINT16; | ||
51 | reg += pin & ~3; | ||
52 | |||
53 | local_irq_save(flags); | ||
54 | |||
55 | /* update filter width and clock source */ | ||
56 | |||
57 | val = __raw_readl(reg); | ||
58 | val &= ~(0xff << ((pin & 3) * 8)); | ||
59 | val |= config << ((pin & 3) * 8); | ||
60 | __raw_writel(val, reg); | ||
61 | |||
62 | /* update filter enable */ | ||
63 | |||
64 | val = __raw_readl(S3C2410_EXTINT2); | ||
65 | val &= ~(1 << ((pin * 4) + 3)); | ||
66 | val |= on << ((pin * 4) + 3); | ||
67 | __raw_writel(val, S3C2410_EXTINT2); | ||
68 | |||
69 | local_irq_restore(flags); | ||
70 | |||
71 | return 0; | ||
72 | } | ||
73 | |||
74 | EXPORT_SYMBOL(s3c2410_gpio_irqfilter); | ||
75 | |||
76 | int s3c2410_gpio_getirq(unsigned int pin) | ||
77 | { | ||
78 | if (pin < S3C2410_GPF0 || pin > S3C2410_GPG15_EINT23) | ||
79 | return -1; /* not valid interrupts */ | ||
80 | |||
81 | if (pin < S3C2410_GPG0 && pin > S3C2410_GPF7) | ||
82 | return -1; /* not valid pin */ | ||
83 | |||
84 | if (pin < S3C2410_GPF4) | ||
85 | return (pin - S3C2410_GPF0) + IRQ_EINT0; | ||
86 | |||
87 | if (pin < S3C2410_GPG0) | ||
88 | return (pin - S3C2410_GPF4) + IRQ_EINT4; | ||
89 | |||
90 | return (pin - S3C2410_GPG0) + IRQ_EINT8; | ||
91 | } | ||
92 | |||
93 | EXPORT_SYMBOL(s3c2410_gpio_getirq); | ||
diff --git a/arch/arm/mach-s3c2410/sleep.S b/arch/arm/mach-s3c2410/sleep.S index 61768dac7fee..832fb86a03b4 100644 --- a/arch/arm/mach-s3c2410/sleep.S +++ b/arch/arm/mach-s3c2410/sleep.S | |||
@@ -72,7 +72,7 @@ ENTRY(s3c2410_cpu_suspend) | |||
72 | @@ prepare cpu to sleep | 72 | @@ prepare cpu to sleep |
73 | 73 | ||
74 | ldr r4, =S3C2410_REFRESH | 74 | ldr r4, =S3C2410_REFRESH |
75 | ldr r5, =S3C2410_MISCCR | 75 | ldr r5, =S3C24XX_MISCCR |
76 | ldr r6, =S3C2410_CLKCON | 76 | ldr r6, =S3C2410_CLKCON |
77 | ldr r7, [ r4 ] @ get REFRESH (and ensure in TLB) | 77 | ldr r7, [ r4 ] @ get REFRESH (and ensure in TLB) |
78 | ldr r8, [ r5 ] @ get MISCCR (and ensure in TLB) | 78 | ldr r8, [ r5 ] @ get MISCCR (and ensure in TLB) |
@@ -133,12 +133,12 @@ ENTRY(s3c2410_cpu_resume) | |||
133 | @@ load UART to allow us to print the two characters for | 133 | @@ load UART to allow us to print the two characters for |
134 | @@ resume debug | 134 | @@ resume debug |
135 | 135 | ||
136 | mov r2, #S3C2410_PA_UART & 0xff000000 | 136 | mov r2, #S3C24XX_PA_UART & 0xff000000 |
137 | orr r2, r2, #S3C2410_PA_UART & 0xff000 | 137 | orr r2, r2, #S3C24XX_PA_UART & 0xff000 |
138 | 138 | ||
139 | #if 0 | 139 | #if 0 |
140 | /* SMDK2440 LED set */ | 140 | /* SMDK2440 LED set */ |
141 | mov r14, #S3C2410_PA_GPIO | 141 | mov r14, #S3C24XX_PA_GPIO |
142 | ldr r12, [ r14, #0x54 ] | 142 | ldr r12, [ r14, #0x54 ] |
143 | bic r12, r12, #3<<4 | 143 | bic r12, r12, #3<<4 |
144 | orr r12, r12, #1<<7 | 144 | orr r12, r12, #1<<7 |
diff --git a/arch/arm/mach-versatile/pci.c b/arch/arm/mach-versatile/pci.c index b80d57d51699..722fbabc9cfb 100644 --- a/arch/arm/mach-versatile/pci.c +++ b/arch/arm/mach-versatile/pci.c | |||
@@ -240,6 +240,14 @@ int __init pci_versatile_setup(int nr, struct pci_sys_data *sys) | |||
240 | int i; | 240 | int i; |
241 | int myslot = -1; | 241 | int myslot = -1; |
242 | unsigned long val; | 242 | unsigned long val; |
243 | void __iomem *local_pci_cfg_base; | ||
244 | |||
245 | val = __raw_readl(SYS_PCICTL); | ||
246 | if (!(val & 1)) { | ||
247 | printk("Not plugged into PCI backplane!\n"); | ||
248 | ret = -EIO; | ||
249 | goto out; | ||
250 | } | ||
243 | 251 | ||
244 | if (nr == 0) { | 252 | if (nr == 0) { |
245 | sys->mem_offset = 0; | 253 | sys->mem_offset = 0; |
@@ -253,48 +261,45 @@ int __init pci_versatile_setup(int nr, struct pci_sys_data *sys) | |||
253 | goto out; | 261 | goto out; |
254 | } | 262 | } |
255 | 263 | ||
256 | __raw_writel(VERSATILE_PCI_MEM_BASE0 >> 28,PCI_IMAP0); | ||
257 | __raw_writel(VERSATILE_PCI_MEM_BASE1 >> 28,PCI_IMAP1); | ||
258 | __raw_writel(VERSATILE_PCI_MEM_BASE2 >> 28,PCI_IMAP2); | ||
259 | |||
260 | __raw_writel(1, SYS_PCICTL); | ||
261 | |||
262 | val = __raw_readl(SYS_PCICTL); | ||
263 | if (!(val & 1)) { | ||
264 | printk("Not plugged into PCI backplane!\n"); | ||
265 | ret = -EIO; | ||
266 | goto out; | ||
267 | } | ||
268 | |||
269 | /* | 264 | /* |
270 | * We need to discover the PCI core first to configure itself | 265 | * We need to discover the PCI core first to configure itself |
271 | * before the main PCI probing is performed | 266 | * before the main PCI probing is performed |
272 | */ | 267 | */ |
273 | for (i=0; i<32; i++) { | 268 | for (i=0; i<32; i++) |
274 | if ((__raw_readl(VERSATILE_PCI_VIRT_BASE+(i<<11)+DEVICE_ID_OFFSET) == VP_PCI_DEVICE_ID) && | 269 | if ((__raw_readl(VERSATILE_PCI_VIRT_BASE+(i<<11)+DEVICE_ID_OFFSET) == VP_PCI_DEVICE_ID) && |
275 | (__raw_readl(VERSATILE_PCI_VIRT_BASE+(i<<11)+CLASS_ID_OFFSET) == VP_PCI_CLASS_ID)) { | 270 | (__raw_readl(VERSATILE_PCI_VIRT_BASE+(i<<11)+CLASS_ID_OFFSET) == VP_PCI_CLASS_ID)) { |
276 | myslot = i; | 271 | myslot = i; |
277 | |||
278 | __raw_writel(myslot, PCI_SELFID); | ||
279 | val = __raw_readl(VERSATILE_PCI_CFG_VIRT_BASE+(myslot<<11)+CSR_OFFSET); | ||
280 | val |= (1<<2); | ||
281 | __raw_writel(val, VERSATILE_PCI_CFG_VIRT_BASE+(myslot<<11)+CSR_OFFSET); | ||
282 | break; | 272 | break; |
283 | } | 273 | } |
284 | } | ||
285 | 274 | ||
286 | if (myslot == -1) { | 275 | if (myslot == -1) { |
287 | printk("Cannot find PCI core!\n"); | 276 | printk("Cannot find PCI core!\n"); |
288 | ret = -EIO; | 277 | ret = -EIO; |
289 | } else { | 278 | goto out; |
290 | printk("PCI core found (slot %d)\n",myslot); | ||
291 | /* Do not to map Versatile FPGA PCI device | ||
292 | into memory space as we are short of | ||
293 | mappable memory */ | ||
294 | pci_slot_ignore |= (1 << myslot); | ||
295 | ret = 1; | ||
296 | } | 279 | } |
297 | 280 | ||
281 | printk("PCI core found (slot %d)\n",myslot); | ||
282 | |||
283 | __raw_writel(myslot, PCI_SELFID); | ||
284 | local_pci_cfg_base = (void *) VERSATILE_PCI_CFG_VIRT_BASE + (myslot << 11); | ||
285 | |||
286 | val = __raw_readl(local_pci_cfg_base + CSR_OFFSET); | ||
287 | val |= PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER | PCI_COMMAND_INVALIDATE; | ||
288 | __raw_writel(val, local_pci_cfg_base + CSR_OFFSET); | ||
289 | |||
290 | /* | ||
291 | * Configure the PCI inbound memory windows to be 1:1 mapped to SDRAM | ||
292 | */ | ||
293 | __raw_writel(PHYS_OFFSET, local_pci_cfg_base + PCI_BASE_ADDRESS_0); | ||
294 | __raw_writel(PHYS_OFFSET, local_pci_cfg_base + PCI_BASE_ADDRESS_1); | ||
295 | __raw_writel(PHYS_OFFSET, local_pci_cfg_base + PCI_BASE_ADDRESS_2); | ||
296 | |||
297 | /* | ||
298 | * Do not to map Versatile FPGA PCI device into memory space | ||
299 | */ | ||
300 | pci_slot_ignore |= (1 << myslot); | ||
301 | ret = 1; | ||
302 | |||
298 | out: | 303 | out: |
299 | return ret; | 304 | return ret; |
300 | } | 305 | } |
@@ -305,18 +310,18 @@ struct pci_bus *pci_versatile_scan_bus(int nr, struct pci_sys_data *sys) | |||
305 | return pci_scan_bus(sys->busnr, &pci_versatile_ops, sys); | 310 | return pci_scan_bus(sys->busnr, &pci_versatile_ops, sys); |
306 | } | 311 | } |
307 | 312 | ||
308 | /* | ||
309 | * V3_LB_BASE? - local bus address | ||
310 | * V3_LB_MAP? - pci bus address | ||
311 | */ | ||
312 | void __init pci_versatile_preinit(void) | 313 | void __init pci_versatile_preinit(void) |
313 | { | 314 | { |
314 | } | 315 | __raw_writel(VERSATILE_PCI_MEM_BASE0 >> 28, PCI_IMAP0); |
316 | __raw_writel(VERSATILE_PCI_MEM_BASE1 >> 28, PCI_IMAP1); | ||
317 | __raw_writel(VERSATILE_PCI_MEM_BASE2 >> 28, PCI_IMAP2); | ||
315 | 318 | ||
316 | void __init pci_versatile_postinit(void) | 319 | __raw_writel(PHYS_OFFSET >> 28, PCI_SMAP0); |
317 | { | 320 | __raw_writel(PHYS_OFFSET >> 28, PCI_SMAP1); |
318 | } | 321 | __raw_writel(PHYS_OFFSET >> 28, PCI_SMAP2); |
319 | 322 | ||
323 | __raw_writel(1, SYS_PCICTL); | ||
324 | } | ||
320 | 325 | ||
321 | /* | 326 | /* |
322 | * map the specified device/slot/pin to an IRQ. Different backplanes may need to modify this. | 327 | * map the specified device/slot/pin to an IRQ. Different backplanes may need to modify this. |
@@ -326,16 +331,15 @@ static int __init versatile_map_irq(struct pci_dev *dev, u8 slot, u8 pin) | |||
326 | int irq; | 331 | int irq; |
327 | int devslot = PCI_SLOT(dev->devfn); | 332 | int devslot = PCI_SLOT(dev->devfn); |
328 | 333 | ||
329 | /* slot, pin, irq | 334 | /* slot, pin, irq |
330 | 24 1 27 | 335 | * 24 1 27 |
331 | 25 1 28 untested | 336 | * 25 1 28 |
332 | 26 1 29 | 337 | * 26 1 29 |
333 | 27 1 30 untested | 338 | * 27 1 30 |
334 | */ | 339 | */ |
335 | 340 | irq = 27 + ((slot + pin - 1) & 3); | |
336 | irq = 27 + ((slot + pin + 2) % 3); /* Fudged */ | ||
337 | 341 | ||
338 | printk("map irq: slot %d, pin %d, devslot %d, irq: %d\n",slot,pin,devslot,irq); | 342 | printk("PCI map irq: slot %d, pin %d, devslot %d, irq: %d\n",slot,pin,devslot,irq); |
339 | 343 | ||
340 | return irq; | 344 | return irq; |
341 | } | 345 | } |
@@ -347,7 +351,6 @@ static struct hw_pci versatile_pci __initdata = { | |||
347 | .setup = pci_versatile_setup, | 351 | .setup = pci_versatile_setup, |
348 | .scan = pci_versatile_scan_bus, | 352 | .scan = pci_versatile_scan_bus, |
349 | .preinit = pci_versatile_preinit, | 353 | .preinit = pci_versatile_preinit, |
350 | .postinit = pci_versatile_postinit, | ||
351 | }; | 354 | }; |
352 | 355 | ||
353 | static int __init versatile_pci_init(void) | 356 | static int __init versatile_pci_init(void) |
diff --git a/arch/arm/mm/abort-ev6.S b/arch/arm/mm/abort-ev6.S index dbd346033122..8a7f65ba14b7 100644 --- a/arch/arm/mm/abort-ev6.S +++ b/arch/arm/mm/abort-ev6.S | |||
@@ -20,7 +20,7 @@ | |||
20 | */ | 20 | */ |
21 | .align 5 | 21 | .align 5 |
22 | ENTRY(v6_early_abort) | 22 | ENTRY(v6_early_abort) |
23 | #ifdef CONFIG_CPU_MPCORE | 23 | #ifdef CONFIG_CPU_32v6K |
24 | clrex | 24 | clrex |
25 | #else | 25 | #else |
26 | strex r0, r1, [sp] @ Clear the exclusive monitor | 26 | strex r0, r1, [sp] @ Clear the exclusive monitor |
diff --git a/arch/arm/mm/cache-v6.S b/arch/arm/mm/cache-v6.S index 72966d90e956..2c6c2a7c05a0 100644 --- a/arch/arm/mm/cache-v6.S +++ b/arch/arm/mm/cache-v6.S | |||
@@ -92,25 +92,20 @@ ENTRY(v6_coherent_kern_range) | |||
92 | * - the Icache does not read data from the write buffer | 92 | * - the Icache does not read data from the write buffer |
93 | */ | 93 | */ |
94 | ENTRY(v6_coherent_user_range) | 94 | ENTRY(v6_coherent_user_range) |
95 | bic r0, r0, #CACHE_LINE_SIZE - 1 | 95 | |
96 | 1: | ||
97 | #ifdef HARVARD_CACHE | 96 | #ifdef HARVARD_CACHE |
98 | mcr p15, 0, r0, c7, c10, 1 @ clean D line | 97 | bic r0, r0, #CACHE_LINE_SIZE - 1 |
99 | mcr p15, 0, r0, c7, c5, 1 @ invalidate I line | 98 | 1: mcr p15, 0, r0, c7, c10, 1 @ clean D line |
100 | #endif | 99 | add r0, r0, #CACHE_LINE_SIZE |
101 | mcr p15, 0, r0, c7, c5, 7 @ invalidate BTB entry | ||
102 | add r0, r0, #BTB_FLUSH_SIZE | ||
103 | mcr p15, 0, r0, c7, c5, 7 @ invalidate BTB entry | ||
104 | add r0, r0, #BTB_FLUSH_SIZE | ||
105 | mcr p15, 0, r0, c7, c5, 7 @ invalidate BTB entry | ||
106 | add r0, r0, #BTB_FLUSH_SIZE | ||
107 | mcr p15, 0, r0, c7, c5, 7 @ invalidate BTB entry | ||
108 | add r0, r0, #BTB_FLUSH_SIZE | ||
109 | cmp r0, r1 | 100 | cmp r0, r1 |
110 | blo 1b | 101 | blo 1b |
111 | #ifdef HARVARD_CACHE | 102 | #endif |
112 | mov r0, #0 | 103 | mov r0, #0 |
104 | #ifdef HARVARD_CACHE | ||
113 | mcr p15, 0, r0, c7, c10, 4 @ drain write buffer | 105 | mcr p15, 0, r0, c7, c10, 4 @ drain write buffer |
106 | mcr p15, 0, r0, c7, c5, 0 @ I+BTB cache invalidate | ||
107 | #else | ||
108 | mcr p15, 0, r0, c7, c5, 6 @ invalidate BTB | ||
114 | #endif | 109 | #endif |
115 | mov pc, lr | 110 | mov pc, lr |
116 | 111 | ||
diff --git a/arch/arm/mm/flush.c b/arch/arm/mm/flush.c index 330695b6b19d..b103e56806bd 100644 --- a/arch/arm/mm/flush.c +++ b/arch/arm/mm/flush.c | |||
@@ -24,14 +24,16 @@ | |||
24 | static void flush_pfn_alias(unsigned long pfn, unsigned long vaddr) | 24 | static void flush_pfn_alias(unsigned long pfn, unsigned long vaddr) |
25 | { | 25 | { |
26 | unsigned long to = ALIAS_FLUSH_START + (CACHE_COLOUR(vaddr) << PAGE_SHIFT); | 26 | unsigned long to = ALIAS_FLUSH_START + (CACHE_COLOUR(vaddr) << PAGE_SHIFT); |
27 | const int zero = 0; | ||
27 | 28 | ||
28 | set_pte(TOP_PTE(to), pfn_pte(pfn, PAGE_KERNEL)); | 29 | set_pte(TOP_PTE(to), pfn_pte(pfn, PAGE_KERNEL)); |
29 | flush_tlb_kernel_page(to); | 30 | flush_tlb_kernel_page(to); |
30 | 31 | ||
31 | asm( "mcrr p15, 0, %1, %0, c14\n" | 32 | asm( "mcrr p15, 0, %1, %0, c14\n" |
32 | " mcrr p15, 0, %1, %0, c5\n" | 33 | " mcr p15, 0, %2, c7, c10, 4\n" |
34 | " mcr p15, 0, %2, c7, c5, 0\n" | ||
33 | : | 35 | : |
34 | : "r" (to), "r" (to + PAGE_SIZE - L1_CACHE_BYTES) | 36 | : "r" (to), "r" (to + PAGE_SIZE - L1_CACHE_BYTES), "r" (zero) |
35 | : "cc"); | 37 | : "cc"); |
36 | } | 38 | } |
37 | 39 | ||
diff --git a/arch/arm/mm/ioremap.c b/arch/arm/mm/ioremap.c index de3ce1eec2ec..da9b35974118 100644 --- a/arch/arm/mm/ioremap.c +++ b/arch/arm/mm/ioremap.c | |||
@@ -142,7 +142,7 @@ __ioremap_pfn(unsigned long pfn, unsigned long offset, size_t size, | |||
142 | return NULL; | 142 | return NULL; |
143 | addr = (unsigned long)area->addr; | 143 | addr = (unsigned long)area->addr; |
144 | if (remap_area_pages(addr, pfn, size, flags)) { | 144 | if (remap_area_pages(addr, pfn, size, flags)) { |
145 | vfree(addr); | 145 | vfree((void *)addr); |
146 | return NULL; | 146 | return NULL; |
147 | } | 147 | } |
148 | return (void __iomem *) (offset + (char *)addr); | 148 | return (void __iomem *) (offset + (char *)addr); |
diff --git a/arch/arm/mm/mm-armv.c b/arch/arm/mm/mm-armv.c index d0245a31d4dd..ef8d30a185a9 100644 --- a/arch/arm/mm/mm-armv.c +++ b/arch/arm/mm/mm-armv.c | |||
@@ -343,6 +343,12 @@ static struct mem_types mem_types[] __initdata = { | |||
343 | PMD_SECT_AP_WRITE | PMD_SECT_BUFFERABLE | | 343 | PMD_SECT_AP_WRITE | PMD_SECT_BUFFERABLE | |
344 | PMD_SECT_TEX(1), | 344 | PMD_SECT_TEX(1), |
345 | .domain = DOMAIN_IO, | 345 | .domain = DOMAIN_IO, |
346 | }, | ||
347 | [MT_NONSHARED_DEVICE] = { | ||
348 | .prot_l1 = PMD_TYPE_TABLE, | ||
349 | .prot_sect = PMD_TYPE_SECT | PMD_SECT_NONSHARED_DEV | | ||
350 | PMD_SECT_AP_WRITE, | ||
351 | .domain = DOMAIN_IO, | ||
346 | } | 352 | } |
347 | }; | 353 | }; |
348 | 354 | ||
diff --git a/arch/arm/mm/proc-xscale.S b/arch/arm/mm/proc-xscale.S index 861b35947280..2d3823ec3153 100644 --- a/arch/arm/mm/proc-xscale.S +++ b/arch/arm/mm/proc-xscale.S | |||
@@ -241,7 +241,15 @@ ENTRY(xscale_flush_user_cache_range) | |||
241 | * it also trashes the mini I-cache used by JTAG debuggers. | 241 | * it also trashes the mini I-cache used by JTAG debuggers. |
242 | */ | 242 | */ |
243 | ENTRY(xscale_coherent_kern_range) | 243 | ENTRY(xscale_coherent_kern_range) |
244 | /* FALLTHROUGH */ | 244 | bic r0, r0, #CACHELINESIZE - 1 |
245 | 1: mcr p15, 0, r0, c7, c10, 1 @ clean D entry | ||
246 | add r0, r0, #CACHELINESIZE | ||
247 | cmp r0, r1 | ||
248 | blo 1b | ||
249 | mov r0, #0 | ||
250 | mcr p15, 0, r0, c7, c5, 0 @ Invalidate I cache & BTB | ||
251 | mcr p15, 0, r0, c7, c10, 4 @ Drain Write (& Fill) Buffer | ||
252 | mov pc, lr | ||
245 | 253 | ||
246 | /* | 254 | /* |
247 | * coherent_user_range(start, end) | 255 | * coherent_user_range(start, end) |
@@ -252,18 +260,16 @@ ENTRY(xscale_coherent_kern_range) | |||
252 | * | 260 | * |
253 | * - start - virtual start address | 261 | * - start - virtual start address |
254 | * - end - virtual end address | 262 | * - end - virtual end address |
255 | * | ||
256 | * Note: single I-cache line invalidation isn't used here since | ||
257 | * it also trashes the mini I-cache used by JTAG debuggers. | ||
258 | */ | 263 | */ |
259 | ENTRY(xscale_coherent_user_range) | 264 | ENTRY(xscale_coherent_user_range) |
260 | bic r0, r0, #CACHELINESIZE - 1 | 265 | bic r0, r0, #CACHELINESIZE - 1 |
261 | 1: mcr p15, 0, r0, c7, c10, 1 @ clean D entry | 266 | 1: mcr p15, 0, r0, c7, c10, 1 @ clean D entry |
267 | mcr p15, 0, r0, c7, c5, 1 @ Invalidate I cache entry | ||
262 | add r0, r0, #CACHELINESIZE | 268 | add r0, r0, #CACHELINESIZE |
263 | cmp r0, r1 | 269 | cmp r0, r1 |
264 | blo 1b | 270 | blo 1b |
265 | mov r0, #0 | 271 | mov r0, #0 |
266 | mcr p15, 0, r0, c7, c5, 0 @ Invalidate I cache & BTB | 272 | mcr p15, 0, r0, c7, c5, 6 @ Invalidate BTB |
267 | mcr p15, 0, r0, c7, c10, 4 @ Drain Write (& Fill) Buffer | 273 | mcr p15, 0, r0, c7, c10, 4 @ Drain Write (& Fill) Buffer |
268 | mov pc, lr | 274 | mov pc, lr |
269 | 275 | ||
diff --git a/arch/arm/mm/tlb-v6.S b/arch/arm/mm/tlb-v6.S index 6f76b89ef46e..fd6adde39091 100644 --- a/arch/arm/mm/tlb-v6.S +++ b/arch/arm/mm/tlb-v6.S | |||
@@ -80,6 +80,7 @@ ENTRY(v6wbi_flush_kern_tlb_range) | |||
80 | add r0, r0, #PAGE_SZ | 80 | add r0, r0, #PAGE_SZ |
81 | cmp r0, r1 | 81 | cmp r0, r1 |
82 | blo 1b | 82 | blo 1b |
83 | mcr p15, 0, r2, c7, c10, 4 @ data synchronization barrier | ||
83 | mov pc, lr | 84 | mov pc, lr |
84 | 85 | ||
85 | .section ".text.init", #alloc, #execinstr | 86 | .section ".text.init", #alloc, #execinstr |
diff --git a/arch/arm/oprofile/common.c b/arch/arm/oprofile/common.c index 1415930ceee1..6f8bc1f0e6a1 100644 --- a/arch/arm/oprofile/common.c +++ b/arch/arm/oprofile/common.c | |||
@@ -137,8 +137,9 @@ int __init oprofile_arch_init(struct oprofile_operations *ops) | |||
137 | if (spec) { | 137 | if (spec) { |
138 | init_MUTEX(&op_arm_sem); | 138 | init_MUTEX(&op_arm_sem); |
139 | 139 | ||
140 | if (spec->init() < 0) | 140 | ret = spec->init(); |
141 | return -ENODEV; | 141 | if (ret < 0) |
142 | return ret; | ||
142 | 143 | ||
143 | op_arm_model = spec; | 144 | op_arm_model = spec; |
144 | init_driverfs(); | 145 | init_driverfs(); |
diff --git a/arch/arm/plat-omap/pm.c b/arch/arm/plat-omap/pm.c index 1a24e2c10714..093efd786f21 100644 --- a/arch/arm/plat-omap/pm.c +++ b/arch/arm/plat-omap/pm.c | |||
@@ -38,7 +38,6 @@ | |||
38 | #include <linux/pm.h> | 38 | #include <linux/pm.h> |
39 | #include <linux/sched.h> | 39 | #include <linux/sched.h> |
40 | #include <linux/proc_fs.h> | 40 | #include <linux/proc_fs.h> |
41 | #include <linux/pm.h> | ||
42 | #include <linux/interrupt.h> | 41 | #include <linux/interrupt.h> |
43 | 42 | ||
44 | #include <asm/io.h> | 43 | #include <asm/io.h> |
diff --git a/arch/arm/plat-omap/sram.c b/arch/arm/plat-omap/sram.c index 792f66375830..ee82763b02b8 100644 --- a/arch/arm/plat-omap/sram.c +++ b/arch/arm/plat-omap/sram.c | |||
@@ -17,6 +17,7 @@ | |||
17 | #include <linux/init.h> | 17 | #include <linux/init.h> |
18 | 18 | ||
19 | #include <asm/mach/map.h> | 19 | #include <asm/mach/map.h> |
20 | #include <asm/tlb.h> | ||
20 | #include <asm/io.h> | 21 | #include <asm/io.h> |
21 | #include <asm/cacheflush.h> | 22 | #include <asm/cacheflush.h> |
22 | 23 | ||
@@ -96,6 +97,14 @@ void __init omap_map_sram(void) | |||
96 | omap_sram_io_desc[0].length); | 97 | omap_sram_io_desc[0].length); |
97 | 98 | ||
98 | /* | 99 | /* |
100 | * Normally devicemaps_init() would flush caches and tlb after | ||
101 | * mdesc->map_io(), but since we're called from map_io(), we | ||
102 | * must do it here. | ||
103 | */ | ||
104 | local_flush_tlb_all(); | ||
105 | flush_cache_all(); | ||
106 | |||
107 | /* | ||
99 | * Looks like we need to preserve some bootloader code at the | 108 | * Looks like we need to preserve some bootloader code at the |
100 | * beginning of SRAM for jumping to flash for reboot to work... | 109 | * beginning of SRAM for jumping to flash for reboot to work... |
101 | */ | 110 | */ |
diff --git a/arch/arm/tools/mach-types b/arch/arm/tools/mach-types index d0f9bb5e9023..8ab5300dcb94 100644 --- a/arch/arm/tools/mach-types +++ b/arch/arm/tools/mach-types | |||
@@ -12,7 +12,7 @@ | |||
12 | # | 12 | # |
13 | # http://www.arm.linux.org.uk/developer/machines/?action=new | 13 | # http://www.arm.linux.org.uk/developer/machines/?action=new |
14 | # | 14 | # |
15 | # Last update: Mon Jan 9 12:56:42 2006 | 15 | # Last update: Mon Feb 20 10:18:02 2006 |
16 | # | 16 | # |
17 | # machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number | 17 | # machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number |
18 | # | 18 | # |
@@ -904,7 +904,7 @@ wg302v2 MACH_WG302V2 WG302V2 890 | |||
904 | eb42x MACH_EB42X EB42X 891 | 904 | eb42x MACH_EB42X EB42X 891 |
905 | iq331es MACH_IQ331ES IQ331ES 892 | 905 | iq331es MACH_IQ331ES IQ331ES 892 |
906 | cosydsp MACH_COSYDSP COSYDSP 893 | 906 | cosydsp MACH_COSYDSP COSYDSP 893 |
907 | uplat7d MACH_UPLAT7D UPLAT7D 894 | 907 | uplat7d_proto MACH_UPLAT7D UPLAT7D 894 |
908 | ptdavinci MACH_PTDAVINCI PTDAVINCI 895 | 908 | ptdavinci MACH_PTDAVINCI PTDAVINCI 895 |
909 | mbus MACH_MBUS MBUS 896 | 909 | mbus MACH_MBUS MBUS 896 |
910 | nadia2vb MACH_NADIA2VB NADIA2VB 897 | 910 | nadia2vb MACH_NADIA2VB NADIA2VB 897 |
@@ -938,3 +938,34 @@ auckland MACH_AUCKLAND AUCKLAND 924 | |||
938 | ak3220m MACH_AK3320M AK3320M 925 | 938 | ak3220m MACH_AK3320M AK3320M 925 |
939 | duramax MACH_DURAMAX DURAMAX 926 | 939 | duramax MACH_DURAMAX DURAMAX 926 |
940 | n35 MACH_N35 N35 927 | 940 | n35 MACH_N35 N35 927 |
941 | pronghorn MACH_PRONGHORN PRONGHORN 928 | ||
942 | fundy MACH_FUNDY FUNDY 929 | ||
943 | logicpd_pxa270 MACH_LOGICPD_PXA270 LOGICPD_PXA270 930 | ||
944 | cpu777 MACH_CPU777 CPU777 931 | ||
945 | simicon9201 MACH_SIMICON9201 SIMICON9201 932 | ||
946 | leap2_hpm MACH_LEAP2_HPM LEAP2_HPM 933 | ||
947 | cm922txa10 MACH_CM922TXA10 CM922TXA10 934 | ||
948 | sandgate MACH_PXA PXA 935 | ||
949 | sandgate2 MACH_SANDGATE2 SANDGATE2 936 | ||
950 | sandgate2g MACH_SANDGATE2G SANDGATE2G 937 | ||
951 | sandgate2p MACH_SANDGATE2P SANDGATE2P 938 | ||
952 | fred_jack MACH_FRED_JACK FRED_JACK 939 | ||
953 | ttg_color1 MACH_TTG_COLOR1 TTG_COLOR1 940 | ||
954 | nxeb500hmi MACH_NXEB500HMI NXEB500HMI 941 | ||
955 | netdcu8 MACH_NETDCU8 NETDCU8 942 | ||
956 | ml675050_cpu_boa MACH_ML675050_CPU_BOA ML675050_CPU_BOA 943 | ||
957 | ng_fvx538 MACH_NG_FVX538 NG_FVX538 944 | ||
958 | ng_fvs338 MACH_NG_FVS338 NG_FVS338 945 | ||
959 | pnx4103 MACH_PNX4103 PNX4103 946 | ||
960 | hesdb MACH_HESDB HESDB 947 | ||
961 | xsilo MACH_XSILO XSILO 948 | ||
962 | espresso MACH_ESPRESSO ESPRESSO 949 | ||
963 | emlc MACH_EMLC EMLC 950 | ||
964 | sisteron MACH_SISTERON SISTERON 951 | ||
965 | rx1950 MACH_RX1950 RX1950 952 | ||
966 | tsc_venus MACH_TSC_VENUS TSC_VENUS 953 | ||
967 | ds101j MACH_DS101J DS101J 954 | ||
968 | mxc300_30ads MACH_MXC30030ADS MXC30030ADS 955 | ||
969 | fujitsu_wimaxsoc MACH_FUJITSU_WIMAXSOC FUJITSU_WIMAXSOC 956 | ||
970 | dualpcmodem MACH_DUALPCMODEM DUALPCMODEM 957 | ||
971 | gesbc9312 MACH_GESBC9312 GESBC9312 958 | ||
diff --git a/arch/arm26/Kconfig b/arch/arm26/Kconfig index 274e07019b46..dee23d87fc5a 100644 --- a/arch/arm26/Kconfig +++ b/arch/arm26/Kconfig | |||
@@ -53,14 +53,14 @@ config GENERIC_ISA_DMA | |||
53 | 53 | ||
54 | config ARCH_MAY_HAVE_PC_FDC | 54 | config ARCH_MAY_HAVE_PC_FDC |
55 | bool | 55 | bool |
56 | default y | ||
57 | 56 | ||
58 | source "init/Kconfig" | 57 | source "init/Kconfig" |
59 | 58 | ||
60 | 59 | ||
61 | menu "System Type" | 60 | menu "System Type" |
62 | 61 | ||
63 | comment "Archimedes/A5000 Implementations (select only ONE)" | 62 | choice |
63 | prompt "Archimedes/A5000 Implementations" | ||
64 | 64 | ||
65 | config ARCH_ARC | 65 | config ARCH_ARC |
66 | bool "Archimedes" | 66 | bool "Archimedes" |
@@ -73,6 +73,7 @@ config ARCH_ARC | |||
73 | 73 | ||
74 | config ARCH_A5K | 74 | config ARCH_A5K |
75 | bool "A5000" | 75 | bool "A5000" |
76 | select ARCH_MAY_HAVE_PC_FDC | ||
76 | help | 77 | help |
77 | Say Y here to to support the Acorn A5000. | 78 | Say Y here to to support the Acorn A5000. |
78 | 79 | ||
@@ -87,6 +88,7 @@ config PAGESIZE_16 | |||
87 | Say Y here if your Archimedes or A5000 system has only 2MB of | 88 | Say Y here if your Archimedes or A5000 system has only 2MB of |
88 | memory, otherwise say N. The resulting kernel will not run on a | 89 | memory, otherwise say N. The resulting kernel will not run on a |
89 | machine with 4MB of memory. | 90 | machine with 4MB of memory. |
91 | endchoice | ||
90 | endmenu | 92 | endmenu |
91 | 93 | ||
92 | config ISA_DMA_API | 94 | config ISA_DMA_API |
diff --git a/arch/arm26/kernel/fiq.c b/arch/arm26/kernel/fiq.c index 08a97c9498ff..a24272b61f30 100644 --- a/arch/arm26/kernel/fiq.c +++ b/arch/arm26/kernel/fiq.c | |||
@@ -104,14 +104,14 @@ void set_fiq_regs(struct pt_regs *regs) | |||
104 | { | 104 | { |
105 | register unsigned long tmp, tmp2; | 105 | register unsigned long tmp, tmp2; |
106 | __asm__ volatile ( | 106 | __asm__ volatile ( |
107 | "mov %0, pc | 107 | "mov %0, pc \n" |
108 | bic %1, %0, #0x3 | 108 | "bic %1, %0, #0x3 \n" |
109 | orr %1, %1, %3 | 109 | "orr %1, %1, %3 \n" |
110 | teqp %1, #0 @ select FIQ mode | 110 | "teqp %1, #0 @ select FIQ mode \n" |
111 | mov r0, r0 | 111 | "mov r0, r0 \n" |
112 | ldmia %2, {r8 - r14} | 112 | "ldmia %2, {r8 - r14} \n" |
113 | teqp %0, #0 @ return to SVC mode | 113 | "teqp %0, #0 @ return to SVC mode \n" |
114 | mov r0, r0" | 114 | "mov r0, r0 " |
115 | : "=&r" (tmp), "=&r" (tmp2) | 115 | : "=&r" (tmp), "=&r" (tmp2) |
116 | : "r" (®s->ARM_r8), "I" (PSR_I_BIT | PSR_F_BIT | MODE_FIQ26) | 116 | : "r" (®s->ARM_r8), "I" (PSR_I_BIT | PSR_F_BIT | MODE_FIQ26) |
117 | /* These registers aren't modified by the above code in a way | 117 | /* These registers aren't modified by the above code in a way |
@@ -125,14 +125,14 @@ void get_fiq_regs(struct pt_regs *regs) | |||
125 | { | 125 | { |
126 | register unsigned long tmp, tmp2; | 126 | register unsigned long tmp, tmp2; |
127 | __asm__ volatile ( | 127 | __asm__ volatile ( |
128 | "mov %0, pc | 128 | "mov %0, pc \n" |
129 | bic %1, %0, #0x3 | 129 | "bic %1, %0, #0x3 \n" |
130 | orr %1, %1, %3 | 130 | "orr %1, %1, %3 \n" |
131 | teqp %1, #0 @ select FIQ mode | 131 | "teqp %1, #0 @ select FIQ mode \n" |
132 | mov r0, r0 | 132 | "mov r0, r0 \n" |
133 | stmia %2, {r8 - r14} | 133 | "stmia %2, {r8 - r14} \n" |
134 | teqp %0, #0 @ return to SVC mode | 134 | "teqp %0, #0 @ return to SVC mode \n" |
135 | mov r0, r0" | 135 | "mov r0, r0 " |
136 | : "=&r" (tmp), "=&r" (tmp2) | 136 | : "=&r" (tmp), "=&r" (tmp2) |
137 | : "r" (®s->ARM_r8), "I" (PSR_I_BIT | PSR_F_BIT | MODE_FIQ26) | 137 | : "r" (®s->ARM_r8), "I" (PSR_I_BIT | PSR_F_BIT | MODE_FIQ26) |
138 | /* These registers aren't modified by the above code in a way | 138 | /* These registers aren't modified by the above code in a way |
diff --git a/arch/arm26/kernel/signal.c b/arch/arm26/kernel/signal.c index ce2055bdc9ee..2a48c12100c0 100644 --- a/arch/arm26/kernel/signal.c +++ b/arch/arm26/kernel/signal.c | |||
@@ -480,6 +480,7 @@ static int do_signal(sigset_t *oldset, struct pt_regs *regs, int syscall) | |||
480 | { | 480 | { |
481 | siginfo_t info; | 481 | siginfo_t info; |
482 | int signr; | 482 | int signr; |
483 | struct k_sigaction ka; | ||
483 | 484 | ||
484 | /* | 485 | /* |
485 | * We want the common case to go fast, which | 486 | * We want the common case to go fast, which |
@@ -493,7 +494,7 @@ static int do_signal(sigset_t *oldset, struct pt_regs *regs, int syscall) | |||
493 | if (current->ptrace & PT_SINGLESTEP) | 494 | if (current->ptrace & PT_SINGLESTEP) |
494 | ptrace_cancel_bpt(current); | 495 | ptrace_cancel_bpt(current); |
495 | 496 | ||
496 | signr = get_signal_to_deliver(&info, regs, NULL); | 497 | signr = get_signal_to_deliver(&info, &ka, regs, NULL); |
497 | if (signr > 0) { | 498 | if (signr > 0) { |
498 | handle_signal(signr, &info, oldset, regs, syscall); | 499 | handle_signal(signr, &info, oldset, regs, syscall); |
499 | if (current->ptrace & PT_SINGLESTEP) | 500 | if (current->ptrace & PT_SINGLESTEP) |
diff --git a/arch/cris/Makefile b/arch/cris/Makefile index ea65d585cf5e..ee114699ef8e 100644 --- a/arch/cris/Makefile +++ b/arch/cris/Makefile | |||
@@ -119,7 +119,7 @@ $(SRC_ARCH)/.links: | |||
119 | @ln -sfn $(SRC_ARCH)/$(SARCH)/lib $(SRC_ARCH)/lib | 119 | @ln -sfn $(SRC_ARCH)/$(SARCH)/lib $(SRC_ARCH)/lib |
120 | @ln -sfn $(SRC_ARCH)/$(SARCH) $(SRC_ARCH)/arch | 120 | @ln -sfn $(SRC_ARCH)/$(SARCH) $(SRC_ARCH)/arch |
121 | @ln -sfn $(SRC_ARCH)/$(SARCH)/vmlinux.lds.S $(SRC_ARCH)/kernel/vmlinux.lds.S | 121 | @ln -sfn $(SRC_ARCH)/$(SARCH)/vmlinux.lds.S $(SRC_ARCH)/kernel/vmlinux.lds.S |
122 | @ln -sfn $(SRC_ARCH)/$(SARCH)/asm-offsets.c $(SRC_ARCH)/kernel/asm-offsets.c | 122 | @ln -sfn $(SRC_ARCH)/$(SARCH)/kernel/asm-offsets.c $(SRC_ARCH)/kernel/asm-offsets.c |
123 | @touch $@ | 123 | @touch $@ |
124 | 124 | ||
125 | # Create link to sub arch includes | 125 | # Create link to sub arch includes |
diff --git a/arch/cris/arch-v10/kernel/ptrace.c b/arch/cris/arch-v10/kernel/ptrace.c index f214f74f264e..961c0d58ded4 100644 --- a/arch/cris/arch-v10/kernel/ptrace.c +++ b/arch/cris/arch-v10/kernel/ptrace.c | |||
@@ -202,18 +202,18 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
202 | int i; | 202 | int i; |
203 | unsigned long tmp; | 203 | unsigned long tmp; |
204 | 204 | ||
205 | ret = 0; | ||
205 | for (i = 0; i <= PT_MAX; i++) { | 206 | for (i = 0; i <= PT_MAX; i++) { |
206 | tmp = get_reg(child, i); | 207 | tmp = get_reg(child, i); |
207 | 208 | ||
208 | if (put_user(tmp, datap)) { | 209 | if (put_user(tmp, datap)) { |
209 | ret = -EFAULT; | 210 | ret = -EFAULT; |
210 | goto out_tsk; | 211 | break; |
211 | } | 212 | } |
212 | 213 | ||
213 | data += sizeof(long); | 214 | data += sizeof(long); |
214 | } | 215 | } |
215 | 216 | ||
216 | ret = 0; | ||
217 | break; | 217 | break; |
218 | } | 218 | } |
219 | 219 | ||
@@ -222,10 +222,11 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
222 | int i; | 222 | int i; |
223 | unsigned long tmp; | 223 | unsigned long tmp; |
224 | 224 | ||
225 | ret = 0; | ||
225 | for (i = 0; i <= PT_MAX; i++) { | 226 | for (i = 0; i <= PT_MAX; i++) { |
226 | if (get_user(tmp, datap)) { | 227 | if (get_user(tmp, datap)) { |
227 | ret = -EFAULT; | 228 | ret = -EFAULT; |
228 | goto out_tsk; | 229 | break; |
229 | } | 230 | } |
230 | 231 | ||
231 | if (i == PT_DCCR) { | 232 | if (i == PT_DCCR) { |
@@ -237,7 +238,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
237 | data += sizeof(long); | 238 | data += sizeof(long); |
238 | } | 239 | } |
239 | 240 | ||
240 | ret = 0; | ||
241 | break; | 241 | break; |
242 | } | 242 | } |
243 | 243 | ||
diff --git a/arch/cris/kernel/setup.c b/arch/cris/kernel/setup.c index d11206e467ab..1ba57efff60d 100644 --- a/arch/cris/kernel/setup.c +++ b/arch/cris/kernel/setup.c | |||
@@ -24,7 +24,6 @@ | |||
24 | /* | 24 | /* |
25 | * Setup options | 25 | * Setup options |
26 | */ | 26 | */ |
27 | struct drive_info_struct { char dummy[32]; } drive_info; | ||
28 | struct screen_info screen_info; | 27 | struct screen_info screen_info; |
29 | 28 | ||
30 | extern int root_mountflags; | 29 | extern int root_mountflags; |
diff --git a/arch/frv/Kconfig b/arch/frv/Kconfig index 60a617aff8ba..e08383712370 100644 --- a/arch/frv/Kconfig +++ b/arch/frv/Kconfig | |||
@@ -25,6 +25,10 @@ config GENERIC_HARDIRQS | |||
25 | bool | 25 | bool |
26 | default n | 26 | default n |
27 | 27 | ||
28 | config TIME_LOW_RES | ||
29 | bool | ||
30 | default y | ||
31 | |||
28 | mainmenu "Fujitsu FR-V Kernel Configuration" | 32 | mainmenu "Fujitsu FR-V Kernel Configuration" |
29 | 33 | ||
30 | source "init/Kconfig" | 34 | source "init/Kconfig" |
diff --git a/arch/frv/Makefile b/arch/frv/Makefile index 90c0fb8d9dc3..d163747d17c0 100644 --- a/arch/frv/Makefile +++ b/arch/frv/Makefile | |||
@@ -81,7 +81,7 @@ endif | |||
81 | # - reserve CC3 for use with atomic ops | 81 | # - reserve CC3 for use with atomic ops |
82 | # - all the extra registers are dealt with only at context switch time | 82 | # - all the extra registers are dealt with only at context switch time |
83 | CFLAGS += -mno-fdpic -mgpr-32 -msoft-float -mno-media | 83 | CFLAGS += -mno-fdpic -mgpr-32 -msoft-float -mno-media |
84 | CFLAGS += -ffixed-fcc3 -ffixed-cc3 -ffixed-gr15 | 84 | CFLAGS += -ffixed-fcc3 -ffixed-cc3 -ffixed-gr15 -ffixed-icc2 |
85 | AFLAGS += -mno-fdpic | 85 | AFLAGS += -mno-fdpic |
86 | ASFLAGS += -mno-fdpic | 86 | ASFLAGS += -mno-fdpic |
87 | 87 | ||
diff --git a/arch/frv/kernel/break.S b/arch/frv/kernel/break.S index 33233dc23e29..687c48d62dde 100644 --- a/arch/frv/kernel/break.S +++ b/arch/frv/kernel/break.S | |||
@@ -200,12 +200,20 @@ __break_step: | |||
200 | movsg bpcsr,gr2 | 200 | movsg bpcsr,gr2 |
201 | sethi.p %hi(__entry_kernel_external_interrupt),gr3 | 201 | sethi.p %hi(__entry_kernel_external_interrupt),gr3 |
202 | setlo %lo(__entry_kernel_external_interrupt),gr3 | 202 | setlo %lo(__entry_kernel_external_interrupt),gr3 |
203 | subcc gr2,gr3,gr0,icc0 | 203 | subcc.p gr2,gr3,gr0,icc0 |
204 | sethi %hi(__entry_uspace_external_interrupt),gr3 | ||
205 | setlo.p %lo(__entry_uspace_external_interrupt),gr3 | ||
204 | beq icc0,#2,__break_step_kernel_external_interrupt | 206 | beq icc0,#2,__break_step_kernel_external_interrupt |
205 | sethi.p %hi(__entry_uspace_external_interrupt),gr3 | 207 | subcc.p gr2,gr3,gr0,icc0 |
206 | setlo %lo(__entry_uspace_external_interrupt),gr3 | 208 | sethi %hi(__entry_kernel_external_interrupt_virtually_disabled),gr3 |
207 | subcc gr2,gr3,gr0,icc0 | 209 | setlo.p %lo(__entry_kernel_external_interrupt_virtually_disabled),gr3 |
208 | beq icc0,#2,__break_step_uspace_external_interrupt | 210 | beq icc0,#2,__break_step_uspace_external_interrupt |
211 | subcc.p gr2,gr3,gr0,icc0 | ||
212 | sethi %hi(__entry_kernel_external_interrupt_virtual_reenable),gr3 | ||
213 | setlo.p %lo(__entry_kernel_external_interrupt_virtual_reenable),gr3 | ||
214 | beq icc0,#2,__break_step_kernel_external_interrupt_virtually_disabled | ||
215 | subcc gr2,gr3,gr0,icc0 | ||
216 | beq icc0,#2,__break_step_kernel_external_interrupt_virtual_reenable | ||
209 | 217 | ||
210 | LEDS 0x2007,gr2 | 218 | LEDS 0x2007,gr2 |
211 | 219 | ||
@@ -254,6 +262,9 @@ __break_step_kernel_softprog_interrupt: | |||
254 | # step through an external interrupt from kernel mode | 262 | # step through an external interrupt from kernel mode |
255 | .globl __break_step_kernel_external_interrupt | 263 | .globl __break_step_kernel_external_interrupt |
256 | __break_step_kernel_external_interrupt: | 264 | __break_step_kernel_external_interrupt: |
265 | # deal with virtual interrupt disablement | ||
266 | beq icc2,#0,__break_step_kernel_external_interrupt_virtually_disabled | ||
267 | |||
257 | sethi.p %hi(__entry_kernel_external_interrupt_reentry),gr3 | 268 | sethi.p %hi(__entry_kernel_external_interrupt_reentry),gr3 |
258 | setlo %lo(__entry_kernel_external_interrupt_reentry),gr3 | 269 | setlo %lo(__entry_kernel_external_interrupt_reentry),gr3 |
259 | 270 | ||
@@ -294,6 +305,64 @@ __break_return_as_kernel_prologue: | |||
294 | #endif | 305 | #endif |
295 | rett #1 | 306 | rett #1 |
296 | 307 | ||
308 | # we single-stepped into an interrupt handler whilst interrupts were merely virtually disabled | ||
309 | # need to really disable interrupts, set flag, fix up and return | ||
310 | __break_step_kernel_external_interrupt_virtually_disabled: | ||
311 | movsg psr,gr2 | ||
312 | andi gr2,#~PSR_PIL,gr2 | ||
313 | ori gr2,#PSR_PIL_14,gr2 /* debugging interrupts only */ | ||
314 | movgs gr2,psr | ||
315 | |||
316 | ldi @(gr31,#REG_CCR),gr3 | ||
317 | movgs gr3,ccr | ||
318 | subcc.p gr0,gr0,gr0,icc2 /* leave Z set, clear C */ | ||
319 | |||
320 | # exceptions must've been enabled and we must've been in supervisor mode | ||
321 | setlos BPSR_BET|BPSR_BS,gr3 | ||
322 | movgs gr3,bpsr | ||
323 | |||
324 | # return to where the interrupt happened | ||
325 | movsg pcsr,gr2 | ||
326 | movgs gr2,bpcsr | ||
327 | |||
328 | lddi.p @(gr31,#REG_GR(2)),gr2 | ||
329 | |||
330 | xor gr31,gr31,gr31 | ||
331 | movgs gr0,brr | ||
332 | #ifdef CONFIG_MMU | ||
333 | movsg scr3,gr31 | ||
334 | #endif | ||
335 | rett #1 | ||
336 | |||
337 | # we stepped through into the virtual interrupt reenablement trap | ||
338 | # | ||
339 | # we also want to single step anyway, but after fixing up so that we get an event on the | ||
340 | # instruction after the broken-into exception returns | ||
341 | .globl __break_step_kernel_external_interrupt_virtual_reenable | ||
342 | __break_step_kernel_external_interrupt_virtual_reenable: | ||
343 | movsg psr,gr2 | ||
344 | andi gr2,#~PSR_PIL,gr2 | ||
345 | movgs gr2,psr | ||
346 | |||
347 | ldi @(gr31,#REG_CCR),gr3 | ||
348 | movgs gr3,ccr | ||
349 | subicc gr0,#1,gr0,icc2 /* clear Z, set C */ | ||
350 | |||
351 | # save the adjusted ICC2 | ||
352 | movsg ccr,gr3 | ||
353 | sti gr3,@(gr31,#REG_CCR) | ||
354 | |||
355 | # exceptions must've been enabled and we must've been in supervisor mode | ||
356 | setlos BPSR_BET|BPSR_BS,gr3 | ||
357 | movgs gr3,bpsr | ||
358 | |||
359 | # return to where the trap happened | ||
360 | movsg pcsr,gr2 | ||
361 | movgs gr2,bpcsr | ||
362 | |||
363 | # and then process the single step | ||
364 | bra __break_continue | ||
365 | |||
297 | # step through an internal exception from uspace mode | 366 | # step through an internal exception from uspace mode |
298 | .globl __break_step_uspace_softprog_interrupt | 367 | .globl __break_step_uspace_softprog_interrupt |
299 | __break_step_uspace_softprog_interrupt: | 368 | __break_step_uspace_softprog_interrupt: |
diff --git a/arch/frv/kernel/entry-table.S b/arch/frv/kernel/entry-table.S index 9b9243e2103c..81568acea9cd 100644 --- a/arch/frv/kernel/entry-table.S +++ b/arch/frv/kernel/entry-table.S | |||
@@ -116,6 +116,8 @@ __break_kerneltrap_fixup_table: | |||
116 | .long __break_step_uspace_external_interrupt | 116 | .long __break_step_uspace_external_interrupt |
117 | .section .trap.kernel | 117 | .section .trap.kernel |
118 | .org \tbr_tt | 118 | .org \tbr_tt |
119 | # deal with virtual interrupt disablement | ||
120 | beq icc2,#0,__entry_kernel_external_interrupt_virtually_disabled | ||
119 | bra __entry_kernel_external_interrupt | 121 | bra __entry_kernel_external_interrupt |
120 | .section .trap.fixup.kernel | 122 | .section .trap.fixup.kernel |
121 | .org \tbr_tt >> 2 | 123 | .org \tbr_tt >> 2 |
@@ -259,25 +261,52 @@ __trap_fixup_kernel_data_tlb_miss: | |||
259 | .org TBR_TT_TRAP0 | 261 | .org TBR_TT_TRAP0 |
260 | .rept 127 | 262 | .rept 127 |
261 | bra __entry_uspace_softprog_interrupt | 263 | bra __entry_uspace_softprog_interrupt |
262 | bra __break_step_uspace_softprog_interrupt | 264 | .long 0,0,0 |
263 | .long 0,0 | ||
264 | .endr | 265 | .endr |
265 | .org TBR_TT_BREAK | 266 | .org TBR_TT_BREAK |
266 | bra __entry_break | 267 | bra __entry_break |
267 | .long 0,0,0 | 268 | .long 0,0,0 |
268 | 269 | ||
270 | .section .trap.fixup.user | ||
271 | .org TBR_TT_TRAP0 >> 2 | ||
272 | .rept 127 | ||
273 | .long __break_step_uspace_softprog_interrupt | ||
274 | .endr | ||
275 | .org TBR_TT_BREAK >> 2 | ||
276 | .long 0 | ||
277 | |||
269 | # miscellaneous kernel mode entry points | 278 | # miscellaneous kernel mode entry points |
270 | .section .trap.kernel | 279 | .section .trap.kernel |
271 | .org TBR_TT_TRAP0 | 280 | .org TBR_TT_TRAP0 |
272 | .rept 127 | ||
273 | bra __entry_kernel_softprog_interrupt | 281 | bra __entry_kernel_softprog_interrupt |
274 | bra __break_step_kernel_softprog_interrupt | 282 | .org TBR_TT_TRAP1 |
275 | .long 0,0 | 283 | bra __entry_kernel_softprog_interrupt |
284 | |||
285 | # trap #2 in kernel - reenable interrupts | ||
286 | .org TBR_TT_TRAP2 | ||
287 | bra __entry_kernel_external_interrupt_virtual_reenable | ||
288 | |||
289 | # miscellaneous kernel traps | ||
290 | .org TBR_TT_TRAP3 | ||
291 | .rept 124 | ||
292 | bra __entry_kernel_softprog_interrupt | ||
293 | .long 0,0,0 | ||
276 | .endr | 294 | .endr |
277 | .org TBR_TT_BREAK | 295 | .org TBR_TT_BREAK |
278 | bra __entry_break | 296 | bra __entry_break |
279 | .long 0,0,0 | 297 | .long 0,0,0 |
280 | 298 | ||
299 | .section .trap.fixup.kernel | ||
300 | .org TBR_TT_TRAP0 >> 2 | ||
301 | .long __break_step_kernel_softprog_interrupt | ||
302 | .long __break_step_kernel_softprog_interrupt | ||
303 | .long __break_step_kernel_external_interrupt_virtual_reenable | ||
304 | .rept 124 | ||
305 | .long __break_step_kernel_softprog_interrupt | ||
306 | .endr | ||
307 | .org TBR_TT_BREAK >> 2 | ||
308 | .long 0 | ||
309 | |||
281 | # miscellaneous debug mode entry points | 310 | # miscellaneous debug mode entry points |
282 | .section .trap.break | 311 | .section .trap.break |
283 | .org TBR_TT_BREAK | 312 | .org TBR_TT_BREAK |
diff --git a/arch/frv/kernel/entry.S b/arch/frv/kernel/entry.S index 5f6548388b74..1d21c8d34d8a 100644 --- a/arch/frv/kernel/entry.S +++ b/arch/frv/kernel/entry.S | |||
@@ -141,7 +141,10 @@ __entry_uspace_external_interrupt_reentry: | |||
141 | 141 | ||
142 | movsg gner0,gr4 | 142 | movsg gner0,gr4 |
143 | movsg gner1,gr5 | 143 | movsg gner1,gr5 |
144 | stdi gr4,@(gr28,#REG_GNER0) | 144 | stdi.p gr4,@(gr28,#REG_GNER0) |
145 | |||
146 | # interrupts start off fully disabled in the interrupt handler | ||
147 | subcc gr0,gr0,gr0,icc2 /* set Z and clear C */ | ||
145 | 148 | ||
146 | # set up kernel global registers | 149 | # set up kernel global registers |
147 | sethi.p %hi(__kernel_current_task),gr5 | 150 | sethi.p %hi(__kernel_current_task),gr5 |
@@ -193,9 +196,8 @@ __entry_uspace_external_interrupt_reentry: | |||
193 | .type __entry_kernel_external_interrupt,@function | 196 | .type __entry_kernel_external_interrupt,@function |
194 | __entry_kernel_external_interrupt: | 197 | __entry_kernel_external_interrupt: |
195 | LEDS 0x6210 | 198 | LEDS 0x6210 |
196 | 199 | // sub sp,gr15,gr31 | |
197 | sub sp,gr15,gr31 | 200 | // LEDS32 |
198 | LEDS32 | ||
199 | 201 | ||
200 | # set up the stack pointer | 202 | # set up the stack pointer |
201 | or.p sp,gr0,gr30 | 203 | or.p sp,gr0,gr30 |
@@ -231,7 +233,10 @@ __entry_kernel_external_interrupt_reentry: | |||
231 | stdi gr24,@(gr28,#REG_GR(24)) | 233 | stdi gr24,@(gr28,#REG_GR(24)) |
232 | stdi gr26,@(gr28,#REG_GR(26)) | 234 | stdi gr26,@(gr28,#REG_GR(26)) |
233 | sti gr29,@(gr28,#REG_GR(29)) | 235 | sti gr29,@(gr28,#REG_GR(29)) |
234 | stdi gr30,@(gr28,#REG_GR(30)) | 236 | stdi.p gr30,@(gr28,#REG_GR(30)) |
237 | |||
238 | # note virtual interrupts will be fully enabled upon return | ||
239 | subicc gr0,#1,gr0,icc2 /* clear Z, set C */ | ||
235 | 240 | ||
236 | movsg tbr ,gr20 | 241 | movsg tbr ,gr20 |
237 | movsg psr ,gr22 | 242 | movsg psr ,gr22 |
@@ -267,7 +272,10 @@ __entry_kernel_external_interrupt_reentry: | |||
267 | 272 | ||
268 | movsg gner0,gr4 | 273 | movsg gner0,gr4 |
269 | movsg gner1,gr5 | 274 | movsg gner1,gr5 |
270 | stdi gr4,@(gr28,#REG_GNER0) | 275 | stdi.p gr4,@(gr28,#REG_GNER0) |
276 | |||
277 | # interrupts start off fully disabled in the interrupt handler | ||
278 | subcc gr0,gr0,gr0,icc2 /* set Z and clear C */ | ||
271 | 279 | ||
272 | # set the return address | 280 | # set the return address |
273 | sethi.p %hi(__entry_return_from_kernel_interrupt),gr4 | 281 | sethi.p %hi(__entry_return_from_kernel_interrupt),gr4 |
@@ -291,6 +299,45 @@ __entry_kernel_external_interrupt_reentry: | |||
291 | 299 | ||
292 | .size __entry_kernel_external_interrupt,.-__entry_kernel_external_interrupt | 300 | .size __entry_kernel_external_interrupt,.-__entry_kernel_external_interrupt |
293 | 301 | ||
302 | ############################################################################### | ||
303 | # | ||
304 | # deal with interrupts that were actually virtually disabled | ||
305 | # - we need to really disable them, flag the fact and return immediately | ||
306 | # - if you change this, you must alter break.S also | ||
307 | # | ||
308 | ############################################################################### | ||
309 | .balign L1_CACHE_BYTES | ||
310 | .globl __entry_kernel_external_interrupt_virtually_disabled | ||
311 | .type __entry_kernel_external_interrupt_virtually_disabled,@function | ||
312 | __entry_kernel_external_interrupt_virtually_disabled: | ||
313 | movsg psr,gr30 | ||
314 | andi gr30,#~PSR_PIL,gr30 | ||
315 | ori gr30,#PSR_PIL_14,gr30 ; debugging interrupts only | ||
316 | movgs gr30,psr | ||
317 | subcc gr0,gr0,gr0,icc2 ; leave Z set, clear C | ||
318 | rett #0 | ||
319 | |||
320 | .size __entry_kernel_external_interrupt_virtually_disabled,.-__entry_kernel_external_interrupt_virtually_disabled | ||
321 | |||
322 | ############################################################################### | ||
323 | # | ||
324 | # deal with re-enablement of interrupts that were pending when virtually re-enabled | ||
325 | # - set ICC2.C, re-enable the real interrupts and return | ||
326 | # - we can clear ICC2.Z because we shouldn't be here if it's not 0 [due to TIHI] | ||
327 | # - if you change this, you must alter break.S also | ||
328 | # | ||
329 | ############################################################################### | ||
330 | .balign L1_CACHE_BYTES | ||
331 | .globl __entry_kernel_external_interrupt_virtual_reenable | ||
332 | .type __entry_kernel_external_interrupt_virtual_reenable,@function | ||
333 | __entry_kernel_external_interrupt_virtual_reenable: | ||
334 | movsg psr,gr30 | ||
335 | andi gr30,#~PSR_PIL,gr30 ; re-enable interrupts | ||
336 | movgs gr30,psr | ||
337 | subicc gr0,#1,gr0,icc2 ; clear Z, set C | ||
338 | rett #0 | ||
339 | |||
340 | .size __entry_kernel_external_interrupt_virtual_reenable,.-__entry_kernel_external_interrupt_virtual_reenable | ||
294 | 341 | ||
295 | ############################################################################### | 342 | ############################################################################### |
296 | # | 343 | # |
@@ -335,6 +382,7 @@ __entry_uspace_softprog_interrupt_reentry: | |||
335 | 382 | ||
336 | sethi.p %hi(__entry_return_from_user_exception),gr23 | 383 | sethi.p %hi(__entry_return_from_user_exception),gr23 |
337 | setlo %lo(__entry_return_from_user_exception),gr23 | 384 | setlo %lo(__entry_return_from_user_exception),gr23 |
385 | |||
338 | bra __entry_common | 386 | bra __entry_common |
339 | 387 | ||
340 | .size __entry_uspace_softprog_interrupt,.-__entry_uspace_softprog_interrupt | 388 | .size __entry_uspace_softprog_interrupt,.-__entry_uspace_softprog_interrupt |
@@ -495,7 +543,10 @@ __entry_common: | |||
495 | 543 | ||
496 | movsg gner0,gr4 | 544 | movsg gner0,gr4 |
497 | movsg gner1,gr5 | 545 | movsg gner1,gr5 |
498 | stdi gr4,@(gr28,#REG_GNER0) | 546 | stdi.p gr4,@(gr28,#REG_GNER0) |
547 | |||
548 | # set up virtual interrupt disablement | ||
549 | subicc gr0,#1,gr0,icc2 /* clear Z flag, set C flag */ | ||
499 | 550 | ||
500 | # set up kernel global registers | 551 | # set up kernel global registers |
501 | sethi.p %hi(__kernel_current_task),gr5 | 552 | sethi.p %hi(__kernel_current_task),gr5 |
@@ -1418,11 +1469,27 @@ sys_call_table: | |||
1418 | .long sys_add_key | 1469 | .long sys_add_key |
1419 | .long sys_request_key | 1470 | .long sys_request_key |
1420 | .long sys_keyctl | 1471 | .long sys_keyctl |
1421 | .long sys_ni_syscall // sys_vperfctr_open | 1472 | .long sys_ioprio_set |
1422 | .long sys_ni_syscall // sys_vperfctr_control /* 290 */ | 1473 | .long sys_ioprio_get /* 290 */ |
1423 | .long sys_ni_syscall // sys_vperfctr_unlink | 1474 | .long sys_inotify_init |
1424 | .long sys_ni_syscall // sys_vperfctr_iresume | 1475 | .long sys_inotify_add_watch |
1425 | .long sys_ni_syscall // sys_vperfctr_read | 1476 | .long sys_inotify_rm_watch |
1477 | .long sys_migrate_pages | ||
1478 | .long sys_openat /* 295 */ | ||
1479 | .long sys_mkdirat | ||
1480 | .long sys_mknodat | ||
1481 | .long sys_fchownat | ||
1482 | .long sys_futimesat | ||
1483 | .long sys_newfstatat /* 300 */ | ||
1484 | .long sys_unlinkat | ||
1485 | .long sys_renameat | ||
1486 | .long sys_linkat | ||
1487 | .long sys_symlinkat | ||
1488 | .long sys_readlinkat /* 305 */ | ||
1489 | .long sys_fchmodat | ||
1490 | .long sys_faccessat | ||
1491 | .long sys_pselect6 | ||
1492 | .long sys_ppoll | ||
1426 | 1493 | ||
1427 | 1494 | ||
1428 | syscall_table_size = (. - sys_call_table) | 1495 | syscall_table_size = (. - sys_call_table) |
diff --git a/arch/frv/kernel/head.S b/arch/frv/kernel/head.S index c73b4fe9f6ca..29a5265489b7 100644 --- a/arch/frv/kernel/head.S +++ b/arch/frv/kernel/head.S | |||
@@ -513,6 +513,9 @@ __head_mmu_enabled: | |||
513 | movgs gr0,ccr | 513 | movgs gr0,ccr |
514 | movgs gr0,cccr | 514 | movgs gr0,cccr |
515 | 515 | ||
516 | # initialise the virtual interrupt handling | ||
517 | subcc gr0,gr0,gr0,icc2 /* set Z, clear C */ | ||
518 | |||
516 | #ifdef CONFIG_MMU | 519 | #ifdef CONFIG_MMU |
517 | movgs gr3,scr2 | 520 | movgs gr3,scr2 |
518 | movgs gr3,scr3 | 521 | movgs gr3,scr3 |
diff --git a/arch/frv/kernel/irq.c b/arch/frv/kernel/irq.c index 59580c59c62c..27ab4c30aac6 100644 --- a/arch/frv/kernel/irq.c +++ b/arch/frv/kernel/irq.c | |||
@@ -287,18 +287,11 @@ asmlinkage void do_IRQ(void) | |||
287 | struct irq_source *source; | 287 | struct irq_source *source; |
288 | int level, cpu; | 288 | int level, cpu; |
289 | 289 | ||
290 | irq_enter(); | ||
291 | |||
290 | level = (__frame->tbr >> 4) & 0xf; | 292 | level = (__frame->tbr >> 4) & 0xf; |
291 | cpu = smp_processor_id(); | 293 | cpu = smp_processor_id(); |
292 | 294 | ||
293 | #if 0 | ||
294 | { | ||
295 | static u32 irqcount; | ||
296 | *(volatile u32 *) 0xe1200004 = ~((irqcount++ << 8) | level); | ||
297 | *(volatile u16 *) 0xffc00100 = (u16) ~0x9999; | ||
298 | mb(); | ||
299 | } | ||
300 | #endif | ||
301 | |||
302 | if ((unsigned long) __frame - (unsigned long) (current + 1) < 512) | 295 | if ((unsigned long) __frame - (unsigned long) (current + 1) < 512) |
303 | BUG(); | 296 | BUG(); |
304 | 297 | ||
@@ -308,40 +301,12 @@ asmlinkage void do_IRQ(void) | |||
308 | 301 | ||
309 | kstat_this_cpu.irqs[level]++; | 302 | kstat_this_cpu.irqs[level]++; |
310 | 303 | ||
311 | irq_enter(); | ||
312 | |||
313 | for (source = frv_irq_levels[level].sources; source; source = source->next) | 304 | for (source = frv_irq_levels[level].sources; source; source = source->next) |
314 | source->doirq(source); | 305 | source->doirq(source); |
315 | 306 | ||
316 | irq_exit(); | ||
317 | |||
318 | __clr_MASK(level); | 307 | __clr_MASK(level); |
319 | 308 | ||
320 | /* only process softirqs if we didn't interrupt another interrupt handler */ | 309 | irq_exit(); |
321 | if ((__frame->psr & PSR_PIL) == PSR_PIL_0) | ||
322 | if (local_softirq_pending()) | ||
323 | do_softirq(); | ||
324 | |||
325 | #ifdef CONFIG_PREEMPT | ||
326 | local_irq_disable(); | ||
327 | while (--current->preempt_count == 0) { | ||
328 | if (!(__frame->psr & PSR_S) || | ||
329 | current->need_resched == 0 || | ||
330 | in_interrupt()) | ||
331 | break; | ||
332 | current->preempt_count++; | ||
333 | local_irq_enable(); | ||
334 | preempt_schedule(); | ||
335 | local_irq_disable(); | ||
336 | } | ||
337 | #endif | ||
338 | |||
339 | #if 0 | ||
340 | { | ||
341 | *(volatile u16 *) 0xffc00100 = (u16) ~0x6666; | ||
342 | mb(); | ||
343 | } | ||
344 | #endif | ||
345 | 310 | ||
346 | } /* end do_IRQ() */ | 311 | } /* end do_IRQ() */ |
347 | 312 | ||
diff --git a/arch/frv/mm/kmap.c b/arch/frv/mm/kmap.c index 539f45e6d15e..c54f18e65ea6 100644 --- a/arch/frv/mm/kmap.c +++ b/arch/frv/mm/kmap.c | |||
@@ -44,15 +44,6 @@ void iounmap(void *addr) | |||
44 | } | 44 | } |
45 | 45 | ||
46 | /* | 46 | /* |
47 | * __iounmap unmaps nearly everything, so be careful | ||
48 | * it doesn't free currently pointer/page tables anymore but it | ||
49 | * wans't used anyway and might be added later. | ||
50 | */ | ||
51 | void __iounmap(void *addr, unsigned long size) | ||
52 | { | ||
53 | } | ||
54 | |||
55 | /* | ||
56 | * Set new cache mode for some kernel address space. | 47 | * Set new cache mode for some kernel address space. |
57 | * The caller must push data for that range itself, if such data may already | 48 | * The caller must push data for that range itself, if such data may already |
58 | * be in the cache. | 49 | * be in the cache. |
diff --git a/arch/h8300/Kconfig b/arch/h8300/Kconfig index 80940d712acf..98308b018a35 100644 --- a/arch/h8300/Kconfig +++ b/arch/h8300/Kconfig | |||
@@ -33,6 +33,10 @@ config GENERIC_CALIBRATE_DELAY | |||
33 | bool | 33 | bool |
34 | default y | 34 | default y |
35 | 35 | ||
36 | config TIME_LOW_RES | ||
37 | bool | ||
38 | default y | ||
39 | |||
36 | config ISA | 40 | config ISA |
37 | bool | 41 | bool |
38 | default y | 42 | default y |
diff --git a/arch/h8300/Kconfig.cpu b/arch/h8300/Kconfig.cpu index a380167a13cf..582797db9603 100644 --- a/arch/h8300/Kconfig.cpu +++ b/arch/h8300/Kconfig.cpu | |||
@@ -169,7 +169,7 @@ endif | |||
169 | 169 | ||
170 | config CPU_H8300H | 170 | config CPU_H8300H |
171 | bool | 171 | bool |
172 | depends on (H8002 || H83007 || H83048 || H83068) | 172 | depends on (H83002 || H83007 || H83048 || H83068) |
173 | default y | 173 | default y |
174 | 174 | ||
175 | config CPU_H8S | 175 | config CPU_H8S |
diff --git a/arch/h8300/Kconfig.debug b/arch/h8300/Kconfig.debug index 55034d08abff..e0e9bcb015a9 100644 --- a/arch/h8300/Kconfig.debug +++ b/arch/h8300/Kconfig.debug | |||
@@ -34,7 +34,7 @@ config GDB_DEBUG | |||
34 | help | 34 | help |
35 | gdb stub exception support | 35 | gdb stub exception support |
36 | 36 | ||
37 | config CONFIG_SH_STANDARD_BIOS | 37 | config SH_STANDARD_BIOS |
38 | bool "Use gdb protocol serial console" | 38 | bool "Use gdb protocol serial console" |
39 | depends on (!H8300H_SIM && !H8S_SIM) | 39 | depends on (!H8300H_SIM && !H8S_SIM) |
40 | help | 40 | help |
diff --git a/arch/h8300/defconfig b/arch/h8300/defconfig index 9d9b491cfc2c..8f1ec3297150 100644 --- a/arch/h8300/defconfig +++ b/arch/h8300/defconfig | |||
@@ -328,7 +328,7 @@ CONFIG_FULLDEBUG=y | |||
328 | CONFIG_NO_KERNEL_MSG=y | 328 | CONFIG_NO_KERNEL_MSG=y |
329 | # CONFIG_SYSCALL_PRINT is not set | 329 | # CONFIG_SYSCALL_PRINT is not set |
330 | # CONFIG_GDB_DEBUG is not set | 330 | # CONFIG_GDB_DEBUG is not set |
331 | # CONFIG_CONFIG_SH_STANDARD_BIOS is not set | 331 | # CONFIG_SH_STANDARD_BIOS is not set |
332 | # CONFIG_DEFAULT_CMDLINE is not set | 332 | # CONFIG_DEFAULT_CMDLINE is not set |
333 | # CONFIG_BLKDEV_RESERVE is not set | 333 | # CONFIG_BLKDEV_RESERVE is not set |
334 | 334 | ||
diff --git a/arch/h8300/kernel/process.c b/arch/h8300/kernel/process.c index ed79ae20e88d..dd344f112cfe 100644 --- a/arch/h8300/kernel/process.c +++ b/arch/h8300/kernel/process.c | |||
@@ -45,6 +45,9 @@ | |||
45 | #include <asm/setup.h> | 45 | #include <asm/setup.h> |
46 | #include <asm/pgtable.h> | 46 | #include <asm/pgtable.h> |
47 | 47 | ||
48 | void (*pm_power_off)(void) = NULL; | ||
49 | EXPORT_SYMBOL(pm_power_off); | ||
50 | |||
48 | asmlinkage void ret_from_fork(void); | 51 | asmlinkage void ret_from_fork(void); |
49 | 52 | ||
50 | /* | 53 | /* |
diff --git a/arch/i386/Kconfig b/arch/i386/Kconfig index cbde675bc95c..5b1a7d46d1d9 100644 --- a/arch/i386/Kconfig +++ b/arch/i386/Kconfig | |||
@@ -47,15 +47,6 @@ config DMI | |||
47 | 47 | ||
48 | source "init/Kconfig" | 48 | source "init/Kconfig" |
49 | 49 | ||
50 | config DOUBLEFAULT | ||
51 | default y | ||
52 | bool "Enable doublefault exception handler" if EMBEDDED | ||
53 | help | ||
54 | This option allows trapping of rare doublefault exceptions that | ||
55 | would otherwise cause a system to silently reboot. Disabling this | ||
56 | option saves about 4k and might cause you much additional grey | ||
57 | hair. | ||
58 | |||
59 | menu "Processor type and features" | 50 | menu "Processor type and features" |
60 | 51 | ||
61 | choice | 52 | choice |
@@ -451,12 +442,50 @@ config HIGHMEM4G | |||
451 | 442 | ||
452 | config HIGHMEM64G | 443 | config HIGHMEM64G |
453 | bool "64GB" | 444 | bool "64GB" |
445 | depends on X86_CMPXCHG64 | ||
454 | help | 446 | help |
455 | Select this if you have a 32-bit processor and more than 4 | 447 | Select this if you have a 32-bit processor and more than 4 |
456 | gigabytes of physical RAM. | 448 | gigabytes of physical RAM. |
457 | 449 | ||
458 | endchoice | 450 | endchoice |
459 | 451 | ||
452 | choice | ||
453 | depends on EXPERIMENTAL && !X86_PAE | ||
454 | prompt "Memory split" | ||
455 | default VMSPLIT_3G | ||
456 | help | ||
457 | Select the desired split between kernel and user memory. | ||
458 | |||
459 | If the address range available to the kernel is less than the | ||
460 | physical memory installed, the remaining memory will be available | ||
461 | as "high memory". Accessing high memory is a little more costly | ||
462 | than low memory, as it needs to be mapped into the kernel first. | ||
463 | Note that increasing the kernel address space limits the range | ||
464 | available to user programs, making the address space there | ||
465 | tighter. Selecting anything other than the default 3G/1G split | ||
466 | will also likely make your kernel incompatible with binary-only | ||
467 | kernel modules. | ||
468 | |||
469 | If you are not absolutely sure what you are doing, leave this | ||
470 | option alone! | ||
471 | |||
472 | config VMSPLIT_3G | ||
473 | bool "3G/1G user/kernel split" | ||
474 | config VMSPLIT_3G_OPT | ||
475 | bool "3G/1G user/kernel split (for full 1G low memory)" | ||
476 | config VMSPLIT_2G | ||
477 | bool "2G/2G user/kernel split" | ||
478 | config VMSPLIT_1G | ||
479 | bool "1G/3G user/kernel split" | ||
480 | endchoice | ||
481 | |||
482 | config PAGE_OFFSET | ||
483 | hex | ||
484 | default 0xB0000000 if VMSPLIT_3G_OPT | ||
485 | default 0x78000000 if VMSPLIT_2G | ||
486 | default 0x40000000 if VMSPLIT_1G | ||
487 | default 0xC0000000 | ||
488 | |||
460 | config HIGHMEM | 489 | config HIGHMEM |
461 | bool | 490 | bool |
462 | depends on HIGHMEM64G || HIGHMEM4G | 491 | depends on HIGHMEM64G || HIGHMEM4G |
@@ -704,13 +733,22 @@ config PHYSICAL_START | |||
704 | 733 | ||
705 | config HOTPLUG_CPU | 734 | config HOTPLUG_CPU |
706 | bool "Support for hot-pluggable CPUs (EXPERIMENTAL)" | 735 | bool "Support for hot-pluggable CPUs (EXPERIMENTAL)" |
707 | depends on SMP && HOTPLUG && EXPERIMENTAL | 736 | depends on SMP && HOTPLUG && EXPERIMENTAL && !X86_VOYAGER |
708 | ---help--- | 737 | ---help--- |
709 | Say Y here to experiment with turning CPUs off and on. CPUs | 738 | Say Y here to experiment with turning CPUs off and on. CPUs |
710 | can be controlled through /sys/devices/system/cpu. | 739 | can be controlled through /sys/devices/system/cpu. |
711 | 740 | ||
712 | Say N. | 741 | Say N. |
713 | 742 | ||
743 | config DOUBLEFAULT | ||
744 | default y | ||
745 | bool "Enable doublefault exception handler" if EMBEDDED | ||
746 | help | ||
747 | This option allows trapping of rare doublefault exceptions that | ||
748 | would otherwise cause a system to silently reboot. Disabling this | ||
749 | option saves about 4k and might cause you much additional grey | ||
750 | hair. | ||
751 | |||
714 | endmenu | 752 | endmenu |
715 | 753 | ||
716 | 754 | ||
@@ -1022,6 +1060,7 @@ source "arch/i386/oprofile/Kconfig" | |||
1022 | 1060 | ||
1023 | config KPROBES | 1061 | config KPROBES |
1024 | bool "Kprobes (EXPERIMENTAL)" | 1062 | bool "Kprobes (EXPERIMENTAL)" |
1063 | depends on EXPERIMENTAL && MODULES | ||
1025 | help | 1064 | help |
1026 | Kprobes allows you to trap at almost any kernel address and | 1065 | Kprobes allows you to trap at almost any kernel address and |
1027 | execute a callback function. register_kprobe() establishes | 1066 | execute a callback function. register_kprobe() establishes |
diff --git a/arch/i386/boot/.gitignore b/arch/i386/boot/.gitignore new file mode 100644 index 000000000000..495f20c085de --- /dev/null +++ b/arch/i386/boot/.gitignore | |||
@@ -0,0 +1,3 @@ | |||
1 | bootsect | ||
2 | bzImage | ||
3 | setup | ||
diff --git a/arch/i386/boot/tools/.gitignore b/arch/i386/boot/tools/.gitignore new file mode 100644 index 000000000000..378eac25d311 --- /dev/null +++ b/arch/i386/boot/tools/.gitignore | |||
@@ -0,0 +1 @@ | |||
build | |||
diff --git a/arch/i386/kernel/.gitignore b/arch/i386/kernel/.gitignore new file mode 100644 index 000000000000..40836ad9079c --- /dev/null +++ b/arch/i386/kernel/.gitignore | |||
@@ -0,0 +1 @@ | |||
vsyscall.lds | |||
diff --git a/arch/i386/kernel/Makefile b/arch/i386/kernel/Makefile index 60c3f76dfca4..65656c033d70 100644 --- a/arch/i386/kernel/Makefile +++ b/arch/i386/kernel/Makefile | |||
@@ -7,11 +7,11 @@ extra-y := head.o init_task.o vmlinux.lds | |||
7 | obj-y := process.o semaphore.o signal.o entry.o traps.o irq.o \ | 7 | obj-y := process.o semaphore.o signal.o entry.o traps.o irq.o \ |
8 | ptrace.o time.o ioport.o ldt.o setup.o i8259.o sys_i386.o \ | 8 | ptrace.o time.o ioport.o ldt.o setup.o i8259.o sys_i386.o \ |
9 | pci-dma.o i386_ksyms.o i387.o dmi_scan.o bootflag.o \ | 9 | pci-dma.o i386_ksyms.o i387.o dmi_scan.o bootflag.o \ |
10 | quirks.o i8237.o | 10 | quirks.o i8237.o topology.o |
11 | 11 | ||
12 | obj-y += cpu/ | 12 | obj-y += cpu/ |
13 | obj-y += timers/ | 13 | obj-y += timers/ |
14 | obj-$(CONFIG_ACPI) += acpi/ | 14 | obj-y += acpi/ |
15 | obj-$(CONFIG_X86_BIOS_REBOOT) += reboot.o | 15 | obj-$(CONFIG_X86_BIOS_REBOOT) += reboot.o |
16 | obj-$(CONFIG_MCA) += mca.o | 16 | obj-$(CONFIG_MCA) += mca.o |
17 | obj-$(CONFIG_X86_MSR) += msr.o | 17 | obj-$(CONFIG_X86_MSR) += msr.o |
diff --git a/arch/i386/kernel/acpi/Makefile b/arch/i386/kernel/acpi/Makefile index 267ca48e1b6c..7e9ac99354f4 100644 --- a/arch/i386/kernel/acpi/Makefile +++ b/arch/i386/kernel/acpi/Makefile | |||
@@ -1,8 +1,8 @@ | |||
1 | obj-y := boot.o | 1 | obj-$(CONFIG_ACPI) += boot.o |
2 | obj-$(CONFIG_X86_IO_APIC) += earlyquirk.o | 2 | obj-$(CONFIG_X86_IO_APIC) += earlyquirk.o |
3 | obj-$(CONFIG_ACPI_SLEEP) += sleep.o wakeup.o | 3 | obj-$(CONFIG_ACPI_SLEEP) += sleep.o wakeup.o |
4 | 4 | ||
5 | ifneq ($(CONFIG_ACPI_PROCESSOR),) | 5 | ifneq ($(CONFIG_ACPI_PROCESSOR),) |
6 | obj-y += cstate.o | 6 | obj-y += cstate.o processor.o |
7 | endif | 7 | endif |
8 | 8 | ||
diff --git a/arch/i386/kernel/acpi/boot.c b/arch/i386/kernel/acpi/boot.c index 2111529dea77..f1a21945963d 100644 --- a/arch/i386/kernel/acpi/boot.c +++ b/arch/i386/kernel/acpi/boot.c | |||
@@ -248,10 +248,17 @@ acpi_parse_lapic(acpi_table_entry_header * header, const unsigned long end) | |||
248 | 248 | ||
249 | acpi_table_print_madt_entry(header); | 249 | acpi_table_print_madt_entry(header); |
250 | 250 | ||
251 | /* Register even disabled CPUs for cpu hotplug */ | 251 | /* Record local apic id only when enabled */ |
252 | 252 | if (processor->flags.enabled) | |
253 | x86_acpiid_to_apicid[processor->acpi_id] = processor->id; | 253 | x86_acpiid_to_apicid[processor->acpi_id] = processor->id; |
254 | 254 | ||
255 | /* | ||
256 | * We need to register disabled CPU as well to permit | ||
257 | * counting disabled CPUs. This allows us to size | ||
258 | * cpus_possible_map more accurately, to permit | ||
259 | * to not preallocating memory for all NR_CPUS | ||
260 | * when we use CPU hotplug. | ||
261 | */ | ||
255 | mp_register_lapic(processor->id, /* APIC ID */ | 262 | mp_register_lapic(processor->id, /* APIC ID */ |
256 | processor->flags.enabled); /* Enabled? */ | 263 | processor->flags.enabled); /* Enabled? */ |
257 | 264 | ||
@@ -464,7 +471,7 @@ int acpi_gsi_to_irq(u32 gsi, unsigned int *irq) | |||
464 | * success: return IRQ number (>=0) | 471 | * success: return IRQ number (>=0) |
465 | * failure: return < 0 | 472 | * failure: return < 0 |
466 | */ | 473 | */ |
467 | int acpi_register_gsi(u32 gsi, int edge_level, int active_high_low) | 474 | int acpi_register_gsi(u32 gsi, int triggering, int polarity) |
468 | { | 475 | { |
469 | unsigned int irq; | 476 | unsigned int irq; |
470 | unsigned int plat_gsi = gsi; | 477 | unsigned int plat_gsi = gsi; |
@@ -476,14 +483,14 @@ int acpi_register_gsi(u32 gsi, int edge_level, int active_high_low) | |||
476 | if (acpi_irq_model == ACPI_IRQ_MODEL_PIC) { | 483 | if (acpi_irq_model == ACPI_IRQ_MODEL_PIC) { |
477 | extern void eisa_set_level_irq(unsigned int irq); | 484 | extern void eisa_set_level_irq(unsigned int irq); |
478 | 485 | ||
479 | if (edge_level == ACPI_LEVEL_SENSITIVE) | 486 | if (triggering == ACPI_LEVEL_SENSITIVE) |
480 | eisa_set_level_irq(gsi); | 487 | eisa_set_level_irq(gsi); |
481 | } | 488 | } |
482 | #endif | 489 | #endif |
483 | 490 | ||
484 | #ifdef CONFIG_X86_IO_APIC | 491 | #ifdef CONFIG_X86_IO_APIC |
485 | if (acpi_irq_model == ACPI_IRQ_MODEL_IOAPIC) { | 492 | if (acpi_irq_model == ACPI_IRQ_MODEL_IOAPIC) { |
486 | plat_gsi = mp_register_gsi(gsi, edge_level, active_high_low); | 493 | plat_gsi = mp_register_gsi(gsi, triggering, polarity); |
487 | } | 494 | } |
488 | #endif | 495 | #endif |
489 | acpi_gsi_to_irq(plat_gsi, &irq); | 496 | acpi_gsi_to_irq(plat_gsi, &irq); |
@@ -1104,9 +1111,6 @@ int __init acpi_boot_table_init(void) | |||
1104 | disable_acpi(); | 1111 | disable_acpi(); |
1105 | return error; | 1112 | return error; |
1106 | } | 1113 | } |
1107 | #ifdef __i386__ | ||
1108 | check_acpi_pci(); | ||
1109 | #endif | ||
1110 | 1114 | ||
1111 | acpi_table_parse(ACPI_BOOT, acpi_parse_sbf); | 1115 | acpi_table_parse(ACPI_BOOT, acpi_parse_sbf); |
1112 | 1116 | ||
diff --git a/arch/i386/kernel/acpi/cstate.c b/arch/i386/kernel/acpi/cstate.c index 4c3036ba65df..25db49ef1770 100644 --- a/arch/i386/kernel/acpi/cstate.c +++ b/arch/i386/kernel/acpi/cstate.c | |||
@@ -14,64 +14,6 @@ | |||
14 | #include <acpi/processor.h> | 14 | #include <acpi/processor.h> |
15 | #include <asm/acpi.h> | 15 | #include <asm/acpi.h> |
16 | 16 | ||
17 | static void acpi_processor_power_init_intel_pdc(struct acpi_processor_power | ||
18 | *pow) | ||
19 | { | ||
20 | struct acpi_object_list *obj_list; | ||
21 | union acpi_object *obj; | ||
22 | u32 *buf; | ||
23 | |||
24 | /* allocate and initialize pdc. It will be used later. */ | ||
25 | obj_list = kmalloc(sizeof(struct acpi_object_list), GFP_KERNEL); | ||
26 | if (!obj_list) { | ||
27 | printk(KERN_ERR "Memory allocation error\n"); | ||
28 | return; | ||
29 | } | ||
30 | |||
31 | obj = kmalloc(sizeof(union acpi_object), GFP_KERNEL); | ||
32 | if (!obj) { | ||
33 | printk(KERN_ERR "Memory allocation error\n"); | ||
34 | kfree(obj_list); | ||
35 | return; | ||
36 | } | ||
37 | |||
38 | buf = kmalloc(12, GFP_KERNEL); | ||
39 | if (!buf) { | ||
40 | printk(KERN_ERR "Memory allocation error\n"); | ||
41 | kfree(obj); | ||
42 | kfree(obj_list); | ||
43 | return; | ||
44 | } | ||
45 | |||
46 | buf[0] = ACPI_PDC_REVISION_ID; | ||
47 | buf[1] = 1; | ||
48 | buf[2] = ACPI_PDC_C_CAPABILITY_SMP; | ||
49 | |||
50 | obj->type = ACPI_TYPE_BUFFER; | ||
51 | obj->buffer.length = 12; | ||
52 | obj->buffer.pointer = (u8 *) buf; | ||
53 | obj_list->count = 1; | ||
54 | obj_list->pointer = obj; | ||
55 | pow->pdc = obj_list; | ||
56 | |||
57 | return; | ||
58 | } | ||
59 | |||
60 | /* Initialize _PDC data based on the CPU vendor */ | ||
61 | void acpi_processor_power_init_pdc(struct acpi_processor_power *pow, | ||
62 | unsigned int cpu) | ||
63 | { | ||
64 | struct cpuinfo_x86 *c = cpu_data + cpu; | ||
65 | |||
66 | pow->pdc = NULL; | ||
67 | if (c->x86_vendor == X86_VENDOR_INTEL) | ||
68 | acpi_processor_power_init_intel_pdc(pow); | ||
69 | |||
70 | return; | ||
71 | } | ||
72 | |||
73 | EXPORT_SYMBOL(acpi_processor_power_init_pdc); | ||
74 | |||
75 | /* | 17 | /* |
76 | * Initialize bm_flags based on the CPU cache properties | 18 | * Initialize bm_flags based on the CPU cache properties |
77 | * On SMP it depends on cache configuration | 19 | * On SMP it depends on cache configuration |
diff --git a/arch/i386/kernel/acpi/earlyquirk.c b/arch/i386/kernel/acpi/earlyquirk.c index f1b9d2a46dab..2e3b643a4dc4 100644 --- a/arch/i386/kernel/acpi/earlyquirk.c +++ b/arch/i386/kernel/acpi/earlyquirk.c | |||
@@ -7,14 +7,22 @@ | |||
7 | #include <linux/pci.h> | 7 | #include <linux/pci.h> |
8 | #include <asm/pci-direct.h> | 8 | #include <asm/pci-direct.h> |
9 | #include <asm/acpi.h> | 9 | #include <asm/acpi.h> |
10 | #include <asm/apic.h> | ||
10 | 11 | ||
11 | static int __init check_bridge(int vendor, int device) | 12 | static int __init check_bridge(int vendor, int device) |
12 | { | 13 | { |
14 | #ifdef CONFIG_ACPI | ||
13 | /* According to Nvidia all timer overrides are bogus. Just ignore | 15 | /* According to Nvidia all timer overrides are bogus. Just ignore |
14 | them all. */ | 16 | them all. */ |
15 | if (vendor == PCI_VENDOR_ID_NVIDIA) { | 17 | if (vendor == PCI_VENDOR_ID_NVIDIA) { |
16 | acpi_skip_timer_override = 1; | 18 | acpi_skip_timer_override = 1; |
17 | } | 19 | } |
20 | #endif | ||
21 | if (vendor == PCI_VENDOR_ID_ATI && timer_over_8254 == 1) { | ||
22 | timer_over_8254 = 0; | ||
23 | printk(KERN_INFO "ATI board detected. Disabling timer routing " | ||
24 | "over 8254.\n"); | ||
25 | } | ||
18 | return 0; | 26 | return 0; |
19 | } | 27 | } |
20 | 28 | ||
diff --git a/arch/i386/kernel/acpi/processor.c b/arch/i386/kernel/acpi/processor.c new file mode 100644 index 000000000000..9f4cc02717ec --- /dev/null +++ b/arch/i386/kernel/acpi/processor.c | |||
@@ -0,0 +1,75 @@ | |||
1 | /* | ||
2 | * arch/i386/kernel/acpi/processor.c | ||
3 | * | ||
4 | * Copyright (C) 2005 Intel Corporation | ||
5 | * Venkatesh Pallipadi <venkatesh.pallipadi@intel.com> | ||
6 | * - Added _PDC for platforms with Intel CPUs | ||
7 | */ | ||
8 | |||
9 | #include <linux/kernel.h> | ||
10 | #include <linux/module.h> | ||
11 | #include <linux/init.h> | ||
12 | #include <linux/acpi.h> | ||
13 | |||
14 | #include <acpi/processor.h> | ||
15 | #include <asm/acpi.h> | ||
16 | |||
17 | static void init_intel_pdc(struct acpi_processor *pr, struct cpuinfo_x86 *c) | ||
18 | { | ||
19 | struct acpi_object_list *obj_list; | ||
20 | union acpi_object *obj; | ||
21 | u32 *buf; | ||
22 | |||
23 | /* allocate and initialize pdc. It will be used later. */ | ||
24 | obj_list = kmalloc(sizeof(struct acpi_object_list), GFP_KERNEL); | ||
25 | if (!obj_list) { | ||
26 | printk(KERN_ERR "Memory allocation error\n"); | ||
27 | return; | ||
28 | } | ||
29 | |||
30 | obj = kmalloc(sizeof(union acpi_object), GFP_KERNEL); | ||
31 | if (!obj) { | ||
32 | printk(KERN_ERR "Memory allocation error\n"); | ||
33 | kfree(obj_list); | ||
34 | return; | ||
35 | } | ||
36 | |||
37 | buf = kmalloc(12, GFP_KERNEL); | ||
38 | if (!buf) { | ||
39 | printk(KERN_ERR "Memory allocation error\n"); | ||
40 | kfree(obj); | ||
41 | kfree(obj_list); | ||
42 | return; | ||
43 | } | ||
44 | |||
45 | buf[0] = ACPI_PDC_REVISION_ID; | ||
46 | buf[1] = 1; | ||
47 | buf[2] = ACPI_PDC_C_CAPABILITY_SMP; | ||
48 | |||
49 | if (cpu_has(c, X86_FEATURE_EST)) | ||
50 | buf[2] |= ACPI_PDC_EST_CAPABILITY_SMP; | ||
51 | |||
52 | obj->type = ACPI_TYPE_BUFFER; | ||
53 | obj->buffer.length = 12; | ||
54 | obj->buffer.pointer = (u8 *) buf; | ||
55 | obj_list->count = 1; | ||
56 | obj_list->pointer = obj; | ||
57 | pr->pdc = obj_list; | ||
58 | |||
59 | return; | ||
60 | } | ||
61 | |||
62 | /* Initialize _PDC data based on the CPU vendor */ | ||
63 | void arch_acpi_processor_init_pdc(struct acpi_processor *pr) | ||
64 | { | ||
65 | unsigned int cpu = pr->id; | ||
66 | struct cpuinfo_x86 *c = cpu_data + cpu; | ||
67 | |||
68 | pr->pdc = NULL; | ||
69 | if (c->x86_vendor == X86_VENDOR_INTEL) | ||
70 | init_intel_pdc(pr, c); | ||
71 | |||
72 | return; | ||
73 | } | ||
74 | |||
75 | EXPORT_SYMBOL(arch_acpi_processor_init_pdc); | ||
diff --git a/arch/i386/kernel/apic.c b/arch/i386/kernel/apic.c index acd3f1e34ca6..776c90989e06 100644 --- a/arch/i386/kernel/apic.c +++ b/arch/i386/kernel/apic.c | |||
@@ -75,8 +75,10 @@ void ack_bad_irq(unsigned int irq) | |||
75 | * holds up an irq slot - in excessive cases (when multiple | 75 | * holds up an irq slot - in excessive cases (when multiple |
76 | * unexpected vectors occur) that might lock up the APIC | 76 | * unexpected vectors occur) that might lock up the APIC |
77 | * completely. | 77 | * completely. |
78 | * But only ack when the APIC is enabled -AK | ||
78 | */ | 79 | */ |
79 | ack_APIC_irq(); | 80 | if (cpu_has_apic) |
81 | ack_APIC_irq(); | ||
80 | } | 82 | } |
81 | 83 | ||
82 | void __init apic_intr_init(void) | 84 | void __init apic_intr_init(void) |
@@ -568,16 +570,18 @@ void __devinit setup_local_APIC(void) | |||
568 | */ | 570 | */ |
569 | void lapic_shutdown(void) | 571 | void lapic_shutdown(void) |
570 | { | 572 | { |
573 | unsigned long flags; | ||
574 | |||
571 | if (!cpu_has_apic) | 575 | if (!cpu_has_apic) |
572 | return; | 576 | return; |
573 | 577 | ||
574 | local_irq_disable(); | 578 | local_irq_save(flags); |
575 | clear_local_APIC(); | 579 | clear_local_APIC(); |
576 | 580 | ||
577 | if (enabled_via_apicbase) | 581 | if (enabled_via_apicbase) |
578 | disable_local_APIC(); | 582 | disable_local_APIC(); |
579 | 583 | ||
580 | local_irq_enable(); | 584 | local_irq_restore(flags); |
581 | } | 585 | } |
582 | 586 | ||
583 | #ifdef CONFIG_PM | 587 | #ifdef CONFIG_PM |
@@ -1303,6 +1307,7 @@ int __init APIC_init_uniprocessor (void) | |||
1303 | if (!cpu_has_apic && APIC_INTEGRATED(apic_version[boot_cpu_physical_apicid])) { | 1307 | if (!cpu_has_apic && APIC_INTEGRATED(apic_version[boot_cpu_physical_apicid])) { |
1304 | printk(KERN_ERR "BIOS bug, local APIC #%d not detected!...\n", | 1308 | printk(KERN_ERR "BIOS bug, local APIC #%d not detected!...\n", |
1305 | boot_cpu_physical_apicid); | 1309 | boot_cpu_physical_apicid); |
1310 | clear_bit(X86_FEATURE_APIC, boot_cpu_data.x86_capability); | ||
1306 | return -1; | 1311 | return -1; |
1307 | } | 1312 | } |
1308 | 1313 | ||
diff --git a/arch/i386/kernel/cpu/amd.c b/arch/i386/kernel/cpu/amd.c index 333578a4e91a..0810f81f2a05 100644 --- a/arch/i386/kernel/cpu/amd.c +++ b/arch/i386/kernel/cpu/amd.c | |||
@@ -282,3 +282,11 @@ int __init amd_init_cpu(void) | |||
282 | } | 282 | } |
283 | 283 | ||
284 | //early_arch_initcall(amd_init_cpu); | 284 | //early_arch_initcall(amd_init_cpu); |
285 | |||
286 | static int __init amd_exit_cpu(void) | ||
287 | { | ||
288 | cpu_devs[X86_VENDOR_AMD] = NULL; | ||
289 | return 0; | ||
290 | } | ||
291 | |||
292 | late_initcall(amd_exit_cpu); | ||
diff --git a/arch/i386/kernel/cpu/centaur.c b/arch/i386/kernel/cpu/centaur.c index 394814e57672..f52669ecb93f 100644 --- a/arch/i386/kernel/cpu/centaur.c +++ b/arch/i386/kernel/cpu/centaur.c | |||
@@ -405,10 +405,6 @@ static void __init init_centaur(struct cpuinfo_x86 *c) | |||
405 | winchip2_protect_mcr(); | 405 | winchip2_protect_mcr(); |
406 | #endif | 406 | #endif |
407 | break; | 407 | break; |
408 | case 10: | ||
409 | name="4"; | ||
410 | /* no info on the WC4 yet */ | ||
411 | break; | ||
412 | default: | 408 | default: |
413 | name="??"; | 409 | name="??"; |
414 | } | 410 | } |
@@ -474,3 +470,11 @@ int __init centaur_init_cpu(void) | |||
474 | } | 470 | } |
475 | 471 | ||
476 | //early_arch_initcall(centaur_init_cpu); | 472 | //early_arch_initcall(centaur_init_cpu); |
473 | |||
474 | static int __init centaur_exit_cpu(void) | ||
475 | { | ||
476 | cpu_devs[X86_VENDOR_CENTAUR] = NULL; | ||
477 | return 0; | ||
478 | } | ||
479 | |||
480 | late_initcall(centaur_exit_cpu); | ||
diff --git a/arch/i386/kernel/cpu/common.c b/arch/i386/kernel/cpu/common.c index 15aee26ec2b6..e6bd095ae108 100644 --- a/arch/i386/kernel/cpu/common.c +++ b/arch/i386/kernel/cpu/common.c | |||
@@ -4,6 +4,7 @@ | |||
4 | #include <linux/smp.h> | 4 | #include <linux/smp.h> |
5 | #include <linux/module.h> | 5 | #include <linux/module.h> |
6 | #include <linux/percpu.h> | 6 | #include <linux/percpu.h> |
7 | #include <linux/bootmem.h> | ||
7 | #include <asm/semaphore.h> | 8 | #include <asm/semaphore.h> |
8 | #include <asm/processor.h> | 9 | #include <asm/processor.h> |
9 | #include <asm/i387.h> | 10 | #include <asm/i387.h> |
@@ -18,6 +19,9 @@ | |||
18 | 19 | ||
19 | #include "cpu.h" | 20 | #include "cpu.h" |
20 | 21 | ||
22 | DEFINE_PER_CPU(struct Xgt_desc_struct, cpu_gdt_descr); | ||
23 | EXPORT_PER_CPU_SYMBOL(cpu_gdt_descr); | ||
24 | |||
21 | DEFINE_PER_CPU(unsigned char, cpu_16bit_stack[CPU_16BIT_STACK_SIZE]); | 25 | DEFINE_PER_CPU(unsigned char, cpu_16bit_stack[CPU_16BIT_STACK_SIZE]); |
22 | EXPORT_PER_CPU_SYMBOL(cpu_16bit_stack); | 26 | EXPORT_PER_CPU_SYMBOL(cpu_16bit_stack); |
23 | 27 | ||
@@ -44,6 +48,7 @@ static void default_init(struct cpuinfo_x86 * c) | |||
44 | 48 | ||
45 | static struct cpu_dev default_cpu = { | 49 | static struct cpu_dev default_cpu = { |
46 | .c_init = default_init, | 50 | .c_init = default_init, |
51 | .c_vendor = "Unknown", | ||
47 | }; | 52 | }; |
48 | static struct cpu_dev * this_cpu = &default_cpu; | 53 | static struct cpu_dev * this_cpu = &default_cpu; |
49 | 54 | ||
@@ -150,6 +155,7 @@ static void __devinit get_cpu_vendor(struct cpuinfo_x86 *c, int early) | |||
150 | { | 155 | { |
151 | char *v = c->x86_vendor_id; | 156 | char *v = c->x86_vendor_id; |
152 | int i; | 157 | int i; |
158 | static int printed; | ||
153 | 159 | ||
154 | for (i = 0; i < X86_VENDOR_NUM; i++) { | 160 | for (i = 0; i < X86_VENDOR_NUM; i++) { |
155 | if (cpu_devs[i]) { | 161 | if (cpu_devs[i]) { |
@@ -159,10 +165,17 @@ static void __devinit get_cpu_vendor(struct cpuinfo_x86 *c, int early) | |||
159 | c->x86_vendor = i; | 165 | c->x86_vendor = i; |
160 | if (!early) | 166 | if (!early) |
161 | this_cpu = cpu_devs[i]; | 167 | this_cpu = cpu_devs[i]; |
162 | break; | 168 | return; |
163 | } | 169 | } |
164 | } | 170 | } |
165 | } | 171 | } |
172 | if (!printed) { | ||
173 | printed++; | ||
174 | printk(KERN_ERR "CPU: Vendor unknown, using generic init.\n"); | ||
175 | printk(KERN_ERR "CPU: Your system may be unstable.\n"); | ||
176 | } | ||
177 | c->x86_vendor = X86_VENDOR_UNKNOWN; | ||
178 | this_cpu = &default_cpu; | ||
166 | } | 179 | } |
167 | 180 | ||
168 | 181 | ||
@@ -265,10 +278,10 @@ void __devinit generic_identify(struct cpuinfo_x86 * c) | |||
265 | c->x86_capability[4] = excap; | 278 | c->x86_capability[4] = excap; |
266 | c->x86 = (tfms >> 8) & 15; | 279 | c->x86 = (tfms >> 8) & 15; |
267 | c->x86_model = (tfms >> 4) & 15; | 280 | c->x86_model = (tfms >> 4) & 15; |
268 | if (c->x86 == 0xf) { | 281 | if (c->x86 == 0xf) |
269 | c->x86 += (tfms >> 20) & 0xff; | 282 | c->x86 += (tfms >> 20) & 0xff; |
283 | if (c->x86 >= 0x6) | ||
270 | c->x86_model += ((tfms >> 16) & 0xF) << 4; | 284 | c->x86_model += ((tfms >> 16) & 0xF) << 4; |
271 | } | ||
272 | c->x86_mask = tfms & 15; | 285 | c->x86_mask = tfms & 15; |
273 | } else { | 286 | } else { |
274 | /* Have CPUID level 0 only - unheard of */ | 287 | /* Have CPUID level 0 only - unheard of */ |
@@ -562,8 +575,9 @@ void __devinit cpu_init(void) | |||
562 | int cpu = smp_processor_id(); | 575 | int cpu = smp_processor_id(); |
563 | struct tss_struct * t = &per_cpu(init_tss, cpu); | 576 | struct tss_struct * t = &per_cpu(init_tss, cpu); |
564 | struct thread_struct *thread = ¤t->thread; | 577 | struct thread_struct *thread = ¤t->thread; |
565 | struct desc_struct *gdt = get_cpu_gdt_table(cpu); | 578 | struct desc_struct *gdt; |
566 | __u32 stk16_off = (__u32)&per_cpu(cpu_16bit_stack, cpu); | 579 | __u32 stk16_off = (__u32)&per_cpu(cpu_16bit_stack, cpu); |
580 | struct Xgt_desc_struct *cpu_gdt_descr = &per_cpu(cpu_gdt_descr, cpu); | ||
567 | 581 | ||
568 | if (cpu_test_and_set(cpu, cpu_initialized)) { | 582 | if (cpu_test_and_set(cpu, cpu_initialized)) { |
569 | printk(KERN_WARNING "CPU#%d already initialized!\n", cpu); | 583 | printk(KERN_WARNING "CPU#%d already initialized!\n", cpu); |
@@ -581,6 +595,25 @@ void __devinit cpu_init(void) | |||
581 | } | 595 | } |
582 | 596 | ||
583 | /* | 597 | /* |
598 | * This is a horrible hack to allocate the GDT. The problem | ||
599 | * is that cpu_init() is called really early for the boot CPU | ||
600 | * (and hence needs bootmem) but much later for the secondary | ||
601 | * CPUs, when bootmem will have gone away | ||
602 | */ | ||
603 | if (NODE_DATA(0)->bdata->node_bootmem_map) { | ||
604 | gdt = (struct desc_struct *)alloc_bootmem_pages(PAGE_SIZE); | ||
605 | /* alloc_bootmem_pages panics on failure, so no check */ | ||
606 | memset(gdt, 0, PAGE_SIZE); | ||
607 | } else { | ||
608 | gdt = (struct desc_struct *)get_zeroed_page(GFP_KERNEL); | ||
609 | if (unlikely(!gdt)) { | ||
610 | printk(KERN_CRIT "CPU%d failed to allocate GDT\n", cpu); | ||
611 | for (;;) | ||
612 | local_irq_enable(); | ||
613 | } | ||
614 | } | ||
615 | |||
616 | /* | ||
584 | * Initialize the per-CPU GDT with the boot GDT, | 617 | * Initialize the per-CPU GDT with the boot GDT, |
585 | * and set up the GDT descriptor: | 618 | * and set up the GDT descriptor: |
586 | */ | 619 | */ |
@@ -592,10 +625,10 @@ void __devinit cpu_init(void) | |||
592 | ((((__u64)stk16_off) << 32) & 0xff00000000000000ULL) | | 625 | ((((__u64)stk16_off) << 32) & 0xff00000000000000ULL) | |
593 | (CPU_16BIT_STACK_SIZE - 1); | 626 | (CPU_16BIT_STACK_SIZE - 1); |
594 | 627 | ||
595 | cpu_gdt_descr[cpu].size = GDT_SIZE - 1; | 628 | cpu_gdt_descr->size = GDT_SIZE - 1; |
596 | cpu_gdt_descr[cpu].address = (unsigned long)gdt; | 629 | cpu_gdt_descr->address = (unsigned long)gdt; |
597 | 630 | ||
598 | load_gdt(&cpu_gdt_descr[cpu]); | 631 | load_gdt(cpu_gdt_descr); |
599 | load_idt(&idt_descr); | 632 | load_idt(&idt_descr); |
600 | 633 | ||
601 | /* | 634 | /* |
diff --git a/arch/i386/kernel/cpu/cpufreq/Kconfig b/arch/i386/kernel/cpu/cpufreq/Kconfig index 0f1eb507233b..26892d2099b0 100644 --- a/arch/i386/kernel/cpu/cpufreq/Kconfig +++ b/arch/i386/kernel/cpu/cpufreq/Kconfig | |||
@@ -96,6 +96,7 @@ config X86_POWERNOW_K8_ACPI | |||
96 | 96 | ||
97 | config X86_GX_SUSPMOD | 97 | config X86_GX_SUSPMOD |
98 | tristate "Cyrix MediaGX/NatSemi Geode Suspend Modulation" | 98 | tristate "Cyrix MediaGX/NatSemi Geode Suspend Modulation" |
99 | depends on PCI | ||
99 | help | 100 | help |
100 | This add the CPUFreq driver for NatSemi Geode processors which | 101 | This add the CPUFreq driver for NatSemi Geode processors which |
101 | support suspend modulation. | 102 | support suspend modulation. |
diff --git a/arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c b/arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c index 7975e79d5fa4..3852d0a4c1b5 100644 --- a/arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c +++ b/arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c | |||
@@ -295,68 +295,6 @@ acpi_cpufreq_guess_freq ( | |||
295 | } | 295 | } |
296 | 296 | ||
297 | 297 | ||
298 | /* | ||
299 | * acpi_processor_cpu_init_pdc_est - let BIOS know about the SMP capabilities | ||
300 | * of this driver | ||
301 | * @perf: processor-specific acpi_io_data struct | ||
302 | * @cpu: CPU being initialized | ||
303 | * | ||
304 | * To avoid issues with legacy OSes, some BIOSes require to be informed of | ||
305 | * the SMP capabilities of OS P-state driver. Here we set the bits in _PDC | ||
306 | * accordingly, for Enhanced Speedstep. Actual call to _PDC is done in | ||
307 | * driver/acpi/processor.c | ||
308 | */ | ||
309 | static void | ||
310 | acpi_processor_cpu_init_pdc_est( | ||
311 | struct acpi_processor_performance *perf, | ||
312 | unsigned int cpu, | ||
313 | struct acpi_object_list *obj_list | ||
314 | ) | ||
315 | { | ||
316 | union acpi_object *obj; | ||
317 | u32 *buf; | ||
318 | struct cpuinfo_x86 *c = cpu_data + cpu; | ||
319 | dprintk("acpi_processor_cpu_init_pdc_est\n"); | ||
320 | |||
321 | if (!cpu_has(c, X86_FEATURE_EST)) | ||
322 | return; | ||
323 | |||
324 | /* Initialize pdc. It will be used later. */ | ||
325 | if (!obj_list) | ||
326 | return; | ||
327 | |||
328 | if (!(obj_list->count && obj_list->pointer)) | ||
329 | return; | ||
330 | |||
331 | obj = obj_list->pointer; | ||
332 | if ((obj->buffer.length == 12) && obj->buffer.pointer) { | ||
333 | buf = (u32 *)obj->buffer.pointer; | ||
334 | buf[0] = ACPI_PDC_REVISION_ID; | ||
335 | buf[1] = 1; | ||
336 | buf[2] = ACPI_PDC_EST_CAPABILITY_SMP; | ||
337 | perf->pdc = obj_list; | ||
338 | } | ||
339 | return; | ||
340 | } | ||
341 | |||
342 | |||
343 | /* CPU specific PDC initialization */ | ||
344 | static void | ||
345 | acpi_processor_cpu_init_pdc( | ||
346 | struct acpi_processor_performance *perf, | ||
347 | unsigned int cpu, | ||
348 | struct acpi_object_list *obj_list | ||
349 | ) | ||
350 | { | ||
351 | struct cpuinfo_x86 *c = cpu_data + cpu; | ||
352 | dprintk("acpi_processor_cpu_init_pdc\n"); | ||
353 | perf->pdc = NULL; | ||
354 | if (cpu_has(c, X86_FEATURE_EST)) | ||
355 | acpi_processor_cpu_init_pdc_est(perf, cpu, obj_list); | ||
356 | return; | ||
357 | } | ||
358 | |||
359 | |||
360 | static int | 298 | static int |
361 | acpi_cpufreq_cpu_init ( | 299 | acpi_cpufreq_cpu_init ( |
362 | struct cpufreq_policy *policy) | 300 | struct cpufreq_policy *policy) |
@@ -367,14 +305,7 @@ acpi_cpufreq_cpu_init ( | |||
367 | unsigned int result = 0; | 305 | unsigned int result = 0; |
368 | struct cpuinfo_x86 *c = &cpu_data[policy->cpu]; | 306 | struct cpuinfo_x86 *c = &cpu_data[policy->cpu]; |
369 | 307 | ||
370 | union acpi_object arg0 = {ACPI_TYPE_BUFFER}; | ||
371 | u32 arg0_buf[3]; | ||
372 | struct acpi_object_list arg_list = {1, &arg0}; | ||
373 | |||
374 | dprintk("acpi_cpufreq_cpu_init\n"); | 308 | dprintk("acpi_cpufreq_cpu_init\n"); |
375 | /* setup arg_list for _PDC settings */ | ||
376 | arg0.buffer.length = 12; | ||
377 | arg0.buffer.pointer = (u8 *) arg0_buf; | ||
378 | 309 | ||
379 | data = kzalloc(sizeof(struct cpufreq_acpi_io), GFP_KERNEL); | 310 | data = kzalloc(sizeof(struct cpufreq_acpi_io), GFP_KERNEL); |
380 | if (!data) | 311 | if (!data) |
@@ -382,9 +313,7 @@ acpi_cpufreq_cpu_init ( | |||
382 | 313 | ||
383 | acpi_io_data[cpu] = data; | 314 | acpi_io_data[cpu] = data; |
384 | 315 | ||
385 | acpi_processor_cpu_init_pdc(&data->acpi_data, cpu, &arg_list); | ||
386 | result = acpi_processor_register_performance(&data->acpi_data, cpu); | 316 | result = acpi_processor_register_performance(&data->acpi_data, cpu); |
387 | data->acpi_data.pdc = NULL; | ||
388 | 317 | ||
389 | if (result) | 318 | if (result) |
390 | goto err_free; | 319 | goto err_free; |
diff --git a/arch/i386/kernel/cpu/cpufreq/p4-clockmod.c b/arch/i386/kernel/cpu/cpufreq/p4-clockmod.c index 270f2188d68b..cc73a7ae34bc 100644 --- a/arch/i386/kernel/cpu/cpufreq/p4-clockmod.c +++ b/arch/i386/kernel/cpu/cpufreq/p4-clockmod.c | |||
@@ -52,6 +52,7 @@ enum { | |||
52 | 52 | ||
53 | 53 | ||
54 | static int has_N44_O17_errata[NR_CPUS]; | 54 | static int has_N44_O17_errata[NR_CPUS]; |
55 | static int has_N60_errata[NR_CPUS]; | ||
55 | static unsigned int stock_freq; | 56 | static unsigned int stock_freq; |
56 | static struct cpufreq_driver p4clockmod_driver; | 57 | static struct cpufreq_driver p4clockmod_driver; |
57 | static unsigned int cpufreq_p4_get(unsigned int cpu); | 58 | static unsigned int cpufreq_p4_get(unsigned int cpu); |
@@ -226,6 +227,12 @@ static int cpufreq_p4_cpu_init(struct cpufreq_policy *policy) | |||
226 | case 0x0f12: | 227 | case 0x0f12: |
227 | has_N44_O17_errata[policy->cpu] = 1; | 228 | has_N44_O17_errata[policy->cpu] = 1; |
228 | dprintk("has errata -- disabling low frequencies\n"); | 229 | dprintk("has errata -- disabling low frequencies\n"); |
230 | break; | ||
231 | |||
232 | case 0x0f29: | ||
233 | has_N60_errata[policy->cpu] = 1; | ||
234 | dprintk("has errata -- disabling frequencies lower than 2ghz\n"); | ||
235 | break; | ||
229 | } | 236 | } |
230 | 237 | ||
231 | /* get max frequency */ | 238 | /* get max frequency */ |
@@ -237,6 +244,8 @@ static int cpufreq_p4_cpu_init(struct cpufreq_policy *policy) | |||
237 | for (i=1; (p4clockmod_table[i].frequency != CPUFREQ_TABLE_END); i++) { | 244 | for (i=1; (p4clockmod_table[i].frequency != CPUFREQ_TABLE_END); i++) { |
238 | if ((i<2) && (has_N44_O17_errata[policy->cpu])) | 245 | if ((i<2) && (has_N44_O17_errata[policy->cpu])) |
239 | p4clockmod_table[i].frequency = CPUFREQ_ENTRY_INVALID; | 246 | p4clockmod_table[i].frequency = CPUFREQ_ENTRY_INVALID; |
247 | else if (has_N60_errata[policy->cpu] && p4clockmod_table[i].frequency < 2000000) | ||
248 | p4clockmod_table[i].frequency = CPUFREQ_ENTRY_INVALID; | ||
240 | else | 249 | else |
241 | p4clockmod_table[i].frequency = (stock_freq * i)/8; | 250 | p4clockmod_table[i].frequency = (stock_freq * i)/8; |
242 | } | 251 | } |
diff --git a/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c b/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c index 9a826cde4fd1..c173c0fa117a 100644 --- a/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c +++ b/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c | |||
@@ -362,22 +362,10 @@ static struct acpi_processor_performance p; | |||
362 | */ | 362 | */ |
363 | static int centrino_cpu_init_acpi(struct cpufreq_policy *policy) | 363 | static int centrino_cpu_init_acpi(struct cpufreq_policy *policy) |
364 | { | 364 | { |
365 | union acpi_object arg0 = {ACPI_TYPE_BUFFER}; | ||
366 | u32 arg0_buf[3]; | ||
367 | struct acpi_object_list arg_list = {1, &arg0}; | ||
368 | unsigned long cur_freq; | 365 | unsigned long cur_freq; |
369 | int result = 0, i; | 366 | int result = 0, i; |
370 | unsigned int cpu = policy->cpu; | 367 | unsigned int cpu = policy->cpu; |
371 | 368 | ||
372 | /* _PDC settings */ | ||
373 | arg0.buffer.length = 12; | ||
374 | arg0.buffer.pointer = (u8 *) arg0_buf; | ||
375 | arg0_buf[0] = ACPI_PDC_REVISION_ID; | ||
376 | arg0_buf[1] = 1; | ||
377 | arg0_buf[2] = ACPI_PDC_EST_CAPABILITY_SMP_MSR; | ||
378 | |||
379 | p.pdc = &arg_list; | ||
380 | |||
381 | /* register with ACPI core */ | 369 | /* register with ACPI core */ |
382 | if (acpi_processor_register_performance(&p, cpu)) { | 370 | if (acpi_processor_register_performance(&p, cpu)) { |
383 | dprintk(KERN_INFO PFX "obtaining ACPI data failed\n"); | 371 | dprintk(KERN_INFO PFX "obtaining ACPI data failed\n"); |
diff --git a/arch/i386/kernel/cpu/cyrix.c b/arch/i386/kernel/cpu/cyrix.c index 75015975d038..00f2e058797c 100644 --- a/arch/i386/kernel/cpu/cyrix.c +++ b/arch/i386/kernel/cpu/cyrix.c | |||
@@ -345,7 +345,7 @@ static void __init init_cyrix(struct cpuinfo_x86 *c) | |||
345 | /* | 345 | /* |
346 | * Handle National Semiconductor branded processors | 346 | * Handle National Semiconductor branded processors |
347 | */ | 347 | */ |
348 | static void __devinit init_nsc(struct cpuinfo_x86 *c) | 348 | static void __init init_nsc(struct cpuinfo_x86 *c) |
349 | { | 349 | { |
350 | /* There may be GX1 processors in the wild that are branded | 350 | /* There may be GX1 processors in the wild that are branded |
351 | * NSC and not Cyrix. | 351 | * NSC and not Cyrix. |
@@ -444,6 +444,14 @@ int __init cyrix_init_cpu(void) | |||
444 | 444 | ||
445 | //early_arch_initcall(cyrix_init_cpu); | 445 | //early_arch_initcall(cyrix_init_cpu); |
446 | 446 | ||
447 | static int __init cyrix_exit_cpu(void) | ||
448 | { | ||
449 | cpu_devs[X86_VENDOR_CYRIX] = NULL; | ||
450 | return 0; | ||
451 | } | ||
452 | |||
453 | late_initcall(cyrix_exit_cpu); | ||
454 | |||
447 | static struct cpu_dev nsc_cpu_dev __initdata = { | 455 | static struct cpu_dev nsc_cpu_dev __initdata = { |
448 | .c_vendor = "NSC", | 456 | .c_vendor = "NSC", |
449 | .c_ident = { "Geode by NSC" }, | 457 | .c_ident = { "Geode by NSC" }, |
@@ -458,3 +466,11 @@ int __init nsc_init_cpu(void) | |||
458 | } | 466 | } |
459 | 467 | ||
460 | //early_arch_initcall(nsc_init_cpu); | 468 | //early_arch_initcall(nsc_init_cpu); |
469 | |||
470 | static int __init nsc_exit_cpu(void) | ||
471 | { | ||
472 | cpu_devs[X86_VENDOR_NSC] = NULL; | ||
473 | return 0; | ||
474 | } | ||
475 | |||
476 | late_initcall(nsc_exit_cpu); | ||
diff --git a/arch/i386/kernel/cpu/intel_cacheinfo.c b/arch/i386/kernel/cpu/intel_cacheinfo.c index fbfd374aa336..ffe58cee0c48 100644 --- a/arch/i386/kernel/cpu/intel_cacheinfo.c +++ b/arch/i386/kernel/cpu/intel_cacheinfo.c | |||
@@ -43,13 +43,23 @@ static struct _cache_table cache_table[] __cpuinitdata = | |||
43 | { 0x2c, LVL_1_DATA, 32 }, /* 8-way set assoc, 64 byte line size */ | 43 | { 0x2c, LVL_1_DATA, 32 }, /* 8-way set assoc, 64 byte line size */ |
44 | { 0x30, LVL_1_INST, 32 }, /* 8-way set assoc, 64 byte line size */ | 44 | { 0x30, LVL_1_INST, 32 }, /* 8-way set assoc, 64 byte line size */ |
45 | { 0x39, LVL_2, 128 }, /* 4-way set assoc, sectored cache, 64 byte line size */ | 45 | { 0x39, LVL_2, 128 }, /* 4-way set assoc, sectored cache, 64 byte line size */ |
46 | { 0x3a, LVL_2, 192 }, /* 6-way set assoc, sectored cache, 64 byte line size */ | ||
46 | { 0x3b, LVL_2, 128 }, /* 2-way set assoc, sectored cache, 64 byte line size */ | 47 | { 0x3b, LVL_2, 128 }, /* 2-way set assoc, sectored cache, 64 byte line size */ |
47 | { 0x3c, LVL_2, 256 }, /* 4-way set assoc, sectored cache, 64 byte line size */ | 48 | { 0x3c, LVL_2, 256 }, /* 4-way set assoc, sectored cache, 64 byte line size */ |
49 | { 0x3d, LVL_2, 384 }, /* 6-way set assoc, sectored cache, 64 byte line size */ | ||
50 | { 0x3e, LVL_2, 512 }, /* 4-way set assoc, sectored cache, 64 byte line size */ | ||
48 | { 0x41, LVL_2, 128 }, /* 4-way set assoc, 32 byte line size */ | 51 | { 0x41, LVL_2, 128 }, /* 4-way set assoc, 32 byte line size */ |
49 | { 0x42, LVL_2, 256 }, /* 4-way set assoc, 32 byte line size */ | 52 | { 0x42, LVL_2, 256 }, /* 4-way set assoc, 32 byte line size */ |
50 | { 0x43, LVL_2, 512 }, /* 4-way set assoc, 32 byte line size */ | 53 | { 0x43, LVL_2, 512 }, /* 4-way set assoc, 32 byte line size */ |
51 | { 0x44, LVL_2, 1024 }, /* 4-way set assoc, 32 byte line size */ | 54 | { 0x44, LVL_2, 1024 }, /* 4-way set assoc, 32 byte line size */ |
52 | { 0x45, LVL_2, 2048 }, /* 4-way set assoc, 32 byte line size */ | 55 | { 0x45, LVL_2, 2048 }, /* 4-way set assoc, 32 byte line size */ |
56 | { 0x46, LVL_3, 4096 }, /* 4-way set assoc, 64 byte line size */ | ||
57 | { 0x47, LVL_3, 8192 }, /* 8-way set assoc, 64 byte line size */ | ||
58 | { 0x49, LVL_3, 4096 }, /* 16-way set assoc, 64 byte line size */ | ||
59 | { 0x4a, LVL_3, 6144 }, /* 12-way set assoc, 64 byte line size */ | ||
60 | { 0x4b, LVL_3, 8192 }, /* 16-way set assoc, 64 byte line size */ | ||
61 | { 0x4c, LVL_3, 12288 }, /* 12-way set assoc, 64 byte line size */ | ||
62 | { 0x4d, LVL_3, 16384 }, /* 16-way set assoc, 64 byte line size */ | ||
53 | { 0x60, LVL_1_DATA, 16 }, /* 8-way set assoc, sectored cache, 64 byte line size */ | 63 | { 0x60, LVL_1_DATA, 16 }, /* 8-way set assoc, sectored cache, 64 byte line size */ |
54 | { 0x66, LVL_1_DATA, 8 }, /* 4-way set assoc, sectored cache, 64 byte line size */ | 64 | { 0x66, LVL_1_DATA, 8 }, /* 4-way set assoc, sectored cache, 64 byte line size */ |
55 | { 0x67, LVL_1_DATA, 16 }, /* 4-way set assoc, sectored cache, 64 byte line size */ | 65 | { 0x67, LVL_1_DATA, 16 }, /* 4-way set assoc, sectored cache, 64 byte line size */ |
@@ -57,6 +67,7 @@ static struct _cache_table cache_table[] __cpuinitdata = | |||
57 | { 0x70, LVL_TRACE, 12 }, /* 8-way set assoc */ | 67 | { 0x70, LVL_TRACE, 12 }, /* 8-way set assoc */ |
58 | { 0x71, LVL_TRACE, 16 }, /* 8-way set assoc */ | 68 | { 0x71, LVL_TRACE, 16 }, /* 8-way set assoc */ |
59 | { 0x72, LVL_TRACE, 32 }, /* 8-way set assoc */ | 69 | { 0x72, LVL_TRACE, 32 }, /* 8-way set assoc */ |
70 | { 0x73, LVL_TRACE, 64 }, /* 8-way set assoc */ | ||
60 | { 0x78, LVL_2, 1024 }, /* 4-way set assoc, 64 byte line size */ | 71 | { 0x78, LVL_2, 1024 }, /* 4-way set assoc, 64 byte line size */ |
61 | { 0x79, LVL_2, 128 }, /* 8-way set assoc, sectored cache, 64 byte line size */ | 72 | { 0x79, LVL_2, 128 }, /* 8-way set assoc, sectored cache, 64 byte line size */ |
62 | { 0x7a, LVL_2, 256 }, /* 8-way set assoc, sectored cache, 64 byte line size */ | 73 | { 0x7a, LVL_2, 256 }, /* 8-way set assoc, sectored cache, 64 byte line size */ |
@@ -141,6 +152,7 @@ static int __cpuinit cpuid4_cache_lookup(int index, struct _cpuid4_info *this_le | |||
141 | return 0; | 152 | return 0; |
142 | } | 153 | } |
143 | 154 | ||
155 | /* will only be called once; __init is safe here */ | ||
144 | static int __init find_num_cache_leaves(void) | 156 | static int __init find_num_cache_leaves(void) |
145 | { | 157 | { |
146 | unsigned int eax, ebx, ecx, edx; | 158 | unsigned int eax, ebx, ecx, edx; |
diff --git a/arch/i386/kernel/cpu/mtrr/main.c b/arch/i386/kernel/cpu/mtrr/main.c index 1e9db198c440..3b4618bed70d 100644 --- a/arch/i386/kernel/cpu/mtrr/main.c +++ b/arch/i386/kernel/cpu/mtrr/main.c | |||
@@ -44,12 +44,10 @@ | |||
44 | #include <asm/msr.h> | 44 | #include <asm/msr.h> |
45 | #include "mtrr.h" | 45 | #include "mtrr.h" |
46 | 46 | ||
47 | #define MTRR_VERSION "2.0 (20020519)" | ||
48 | |||
49 | u32 num_var_ranges = 0; | 47 | u32 num_var_ranges = 0; |
50 | 48 | ||
51 | unsigned int *usage_table; | 49 | unsigned int *usage_table; |
52 | static DECLARE_MUTEX(main_lock); | 50 | static DECLARE_MUTEX(mtrr_sem); |
53 | 51 | ||
54 | u32 size_or_mask, size_and_mask; | 52 | u32 size_or_mask, size_and_mask; |
55 | 53 | ||
@@ -335,7 +333,7 @@ int mtrr_add_page(unsigned long base, unsigned long size, | |||
335 | /* No CPU hotplug when we change MTRR entries */ | 333 | /* No CPU hotplug when we change MTRR entries */ |
336 | lock_cpu_hotplug(); | 334 | lock_cpu_hotplug(); |
337 | /* Search for existing MTRR */ | 335 | /* Search for existing MTRR */ |
338 | down(&main_lock); | 336 | down(&mtrr_sem); |
339 | for (i = 0; i < num_var_ranges; ++i) { | 337 | for (i = 0; i < num_var_ranges; ++i) { |
340 | mtrr_if->get(i, &lbase, &lsize, <ype); | 338 | mtrr_if->get(i, &lbase, &lsize, <ype); |
341 | if (base >= lbase + lsize) | 339 | if (base >= lbase + lsize) |
@@ -373,7 +371,7 @@ int mtrr_add_page(unsigned long base, unsigned long size, | |||
373 | printk(KERN_INFO "mtrr: no more MTRRs available\n"); | 371 | printk(KERN_INFO "mtrr: no more MTRRs available\n"); |
374 | error = i; | 372 | error = i; |
375 | out: | 373 | out: |
376 | up(&main_lock); | 374 | up(&mtrr_sem); |
377 | unlock_cpu_hotplug(); | 375 | unlock_cpu_hotplug(); |
378 | return error; | 376 | return error; |
379 | } | 377 | } |
@@ -466,7 +464,7 @@ int mtrr_del_page(int reg, unsigned long base, unsigned long size) | |||
466 | max = num_var_ranges; | 464 | max = num_var_ranges; |
467 | /* No CPU hotplug when we change MTRR entries */ | 465 | /* No CPU hotplug when we change MTRR entries */ |
468 | lock_cpu_hotplug(); | 466 | lock_cpu_hotplug(); |
469 | down(&main_lock); | 467 | down(&mtrr_sem); |
470 | if (reg < 0) { | 468 | if (reg < 0) { |
471 | /* Search for existing MTRR */ | 469 | /* Search for existing MTRR */ |
472 | for (i = 0; i < max; ++i) { | 470 | for (i = 0; i < max; ++i) { |
@@ -505,7 +503,7 @@ int mtrr_del_page(int reg, unsigned long base, unsigned long size) | |||
505 | set_mtrr(reg, 0, 0, 0); | 503 | set_mtrr(reg, 0, 0, 0); |
506 | error = reg; | 504 | error = reg; |
507 | out: | 505 | out: |
508 | up(&main_lock); | 506 | up(&mtrr_sem); |
509 | unlock_cpu_hotplug(); | 507 | unlock_cpu_hotplug(); |
510 | return error; | 508 | return error; |
511 | } | 509 | } |
@@ -671,7 +669,6 @@ void __init mtrr_bp_init(void) | |||
671 | break; | 669 | break; |
672 | } | 670 | } |
673 | } | 671 | } |
674 | printk(KERN_INFO "mtrr: v%s\n",MTRR_VERSION); | ||
675 | 672 | ||
676 | if (mtrr_if) { | 673 | if (mtrr_if) { |
677 | set_num_var_ranges(); | 674 | set_num_var_ranges(); |
@@ -688,7 +685,7 @@ void mtrr_ap_init(void) | |||
688 | if (!mtrr_if || !use_intel()) | 685 | if (!mtrr_if || !use_intel()) |
689 | return; | 686 | return; |
690 | /* | 687 | /* |
691 | * Ideally we should hold main_lock here to avoid mtrr entries changed, | 688 | * Ideally we should hold mtrr_sem here to avoid mtrr entries changed, |
692 | * but this routine will be called in cpu boot time, holding the lock | 689 | * but this routine will be called in cpu boot time, holding the lock |
693 | * breaks it. This routine is called in two cases: 1.very earily time | 690 | * breaks it. This routine is called in two cases: 1.very earily time |
694 | * of software resume, when there absolutely isn't mtrr entry changes; | 691 | * of software resume, when there absolutely isn't mtrr entry changes; |
diff --git a/arch/i386/kernel/cpu/nexgen.c b/arch/i386/kernel/cpu/nexgen.c index 30898a260a5c..ad87fa58058d 100644 --- a/arch/i386/kernel/cpu/nexgen.c +++ b/arch/i386/kernel/cpu/nexgen.c | |||
@@ -61,3 +61,11 @@ int __init nexgen_init_cpu(void) | |||
61 | } | 61 | } |
62 | 62 | ||
63 | //early_arch_initcall(nexgen_init_cpu); | 63 | //early_arch_initcall(nexgen_init_cpu); |
64 | |||
65 | static int __init nexgen_exit_cpu(void) | ||
66 | { | ||
67 | cpu_devs[X86_VENDOR_NEXGEN] = NULL; | ||
68 | return 0; | ||
69 | } | ||
70 | |||
71 | late_initcall(nexgen_exit_cpu); | ||
diff --git a/arch/i386/kernel/cpu/rise.c b/arch/i386/kernel/cpu/rise.c index 8602425628ca..d08d5a2811c8 100644 --- a/arch/i386/kernel/cpu/rise.c +++ b/arch/i386/kernel/cpu/rise.c | |||
@@ -51,3 +51,11 @@ int __init rise_init_cpu(void) | |||
51 | } | 51 | } |
52 | 52 | ||
53 | //early_arch_initcall(rise_init_cpu); | 53 | //early_arch_initcall(rise_init_cpu); |
54 | |||
55 | static int __init rise_exit_cpu(void) | ||
56 | { | ||
57 | cpu_devs[X86_VENDOR_RISE] = NULL; | ||
58 | return 0; | ||
59 | } | ||
60 | |||
61 | late_initcall(rise_exit_cpu); | ||
diff --git a/arch/i386/kernel/cpu/transmeta.c b/arch/i386/kernel/cpu/transmeta.c index fc426380366b..7214c9b577ab 100644 --- a/arch/i386/kernel/cpu/transmeta.c +++ b/arch/i386/kernel/cpu/transmeta.c | |||
@@ -1,4 +1,5 @@ | |||
1 | #include <linux/kernel.h> | 1 | #include <linux/kernel.h> |
2 | #include <linux/mm.h> | ||
2 | #include <linux/init.h> | 3 | #include <linux/init.h> |
3 | #include <asm/processor.h> | 4 | #include <asm/processor.h> |
4 | #include <asm/msr.h> | 5 | #include <asm/msr.h> |
@@ -84,7 +85,7 @@ static void __init init_transmeta(struct cpuinfo_x86 *c) | |||
84 | #endif | 85 | #endif |
85 | } | 86 | } |
86 | 87 | ||
87 | static void transmeta_identify(struct cpuinfo_x86 * c) | 88 | static void __init transmeta_identify(struct cpuinfo_x86 * c) |
88 | { | 89 | { |
89 | u32 xlvl; | 90 | u32 xlvl; |
90 | generic_identify(c); | 91 | generic_identify(c); |
@@ -111,3 +112,11 @@ int __init transmeta_init_cpu(void) | |||
111 | } | 112 | } |
112 | 113 | ||
113 | //early_arch_initcall(transmeta_init_cpu); | 114 | //early_arch_initcall(transmeta_init_cpu); |
115 | |||
116 | static int __init transmeta_exit_cpu(void) | ||
117 | { | ||
118 | cpu_devs[X86_VENDOR_TRANSMETA] = NULL; | ||
119 | return 0; | ||
120 | } | ||
121 | |||
122 | late_initcall(transmeta_exit_cpu); | ||
diff --git a/arch/i386/kernel/cpu/umc.c b/arch/i386/kernel/cpu/umc.c index 264fcad559d5..2cd988f6dc55 100644 --- a/arch/i386/kernel/cpu/umc.c +++ b/arch/i386/kernel/cpu/umc.c | |||
@@ -31,3 +31,11 @@ int __init umc_init_cpu(void) | |||
31 | } | 31 | } |
32 | 32 | ||
33 | //early_arch_initcall(umc_init_cpu); | 33 | //early_arch_initcall(umc_init_cpu); |
34 | |||
35 | static int __init umc_exit_cpu(void) | ||
36 | { | ||
37 | cpu_devs[X86_VENDOR_UMC] = NULL; | ||
38 | return 0; | ||
39 | } | ||
40 | |||
41 | late_initcall(umc_exit_cpu); | ||
diff --git a/arch/i386/kernel/efi.c b/arch/i386/kernel/efi.c index ecad519fd395..c9cad7ba0d2d 100644 --- a/arch/i386/kernel/efi.c +++ b/arch/i386/kernel/efi.c | |||
@@ -70,10 +70,13 @@ static void efi_call_phys_prelog(void) | |||
70 | { | 70 | { |
71 | unsigned long cr4; | 71 | unsigned long cr4; |
72 | unsigned long temp; | 72 | unsigned long temp; |
73 | struct Xgt_desc_struct *cpu_gdt_descr; | ||
73 | 74 | ||
74 | spin_lock(&efi_rt_lock); | 75 | spin_lock(&efi_rt_lock); |
75 | local_irq_save(efi_rt_eflags); | 76 | local_irq_save(efi_rt_eflags); |
76 | 77 | ||
78 | cpu_gdt_descr = &per_cpu(cpu_gdt_descr, 0); | ||
79 | |||
77 | /* | 80 | /* |
78 | * If I don't have PSE, I should just duplicate two entries in page | 81 | * If I don't have PSE, I should just duplicate two entries in page |
79 | * directory. If I have PSE, I just need to duplicate one entry in | 82 | * directory. If I have PSE, I just need to duplicate one entry in |
@@ -103,17 +106,18 @@ static void efi_call_phys_prelog(void) | |||
103 | */ | 106 | */ |
104 | local_flush_tlb(); | 107 | local_flush_tlb(); |
105 | 108 | ||
106 | cpu_gdt_descr[0].address = __pa(cpu_gdt_descr[0].address); | 109 | cpu_gdt_descr->address = __pa(cpu_gdt_descr->address); |
107 | load_gdt((struct Xgt_desc_struct *) __pa(&cpu_gdt_descr[0])); | 110 | load_gdt(cpu_gdt_descr); |
108 | } | 111 | } |
109 | 112 | ||
110 | static void efi_call_phys_epilog(void) | 113 | static void efi_call_phys_epilog(void) |
111 | { | 114 | { |
112 | unsigned long cr4; | 115 | unsigned long cr4; |
116 | struct Xgt_desc_struct *cpu_gdt_descr = &per_cpu(cpu_gdt_descr, 0); | ||
117 | |||
118 | cpu_gdt_descr->address = __va(cpu_gdt_descr->address); | ||
119 | load_gdt(cpu_gdt_descr); | ||
113 | 120 | ||
114 | cpu_gdt_descr[0].address = | ||
115 | (unsigned long) __va(cpu_gdt_descr[0].address); | ||
116 | load_gdt(&cpu_gdt_descr[0]); | ||
117 | cr4 = read_cr4(); | 121 | cr4 = read_cr4(); |
118 | 122 | ||
119 | if (cr4 & X86_CR4_PSE) { | 123 | if (cr4 & X86_CR4_PSE) { |
diff --git a/arch/i386/kernel/head.S b/arch/i386/kernel/head.S index 5884469f6bfe..e0b7c632efbc 100644 --- a/arch/i386/kernel/head.S +++ b/arch/i386/kernel/head.S | |||
@@ -398,7 +398,11 @@ ignore_int: | |||
398 | pushl 32(%esp) | 398 | pushl 32(%esp) |
399 | pushl 40(%esp) | 399 | pushl 40(%esp) |
400 | pushl $int_msg | 400 | pushl $int_msg |
401 | #ifdef CONFIG_EARLY_PRINTK | ||
402 | call early_printk | ||
403 | #else | ||
401 | call printk | 404 | call printk |
405 | #endif | ||
402 | addl $(5*4),%esp | 406 | addl $(5*4),%esp |
403 | popl %ds | 407 | popl %ds |
404 | popl %es | 408 | popl %es |
@@ -530,5 +534,3 @@ ENTRY(cpu_gdt_table) | |||
530 | .quad 0x0000000000000000 /* 0xf0 - unused */ | 534 | .quad 0x0000000000000000 /* 0xf0 - unused */ |
531 | .quad 0x0000000000000000 /* 0xf8 - GDT entry 31: double-fault TSS */ | 535 | .quad 0x0000000000000000 /* 0xf8 - GDT entry 31: double-fault TSS */ |
532 | 536 | ||
533 | /* Be sure this is zeroed to avoid false validations in Xen */ | ||
534 | .fill PAGE_SIZE_asm / 8 - GDT_ENTRIES,8,0 | ||
diff --git a/arch/i386/kernel/i386_ksyms.c b/arch/i386/kernel/i386_ksyms.c index 3999bec50c33..055325056a74 100644 --- a/arch/i386/kernel/i386_ksyms.c +++ b/arch/i386/kernel/i386_ksyms.c | |||
@@ -3,8 +3,6 @@ | |||
3 | #include <asm/checksum.h> | 3 | #include <asm/checksum.h> |
4 | #include <asm/desc.h> | 4 | #include <asm/desc.h> |
5 | 5 | ||
6 | EXPORT_SYMBOL_GPL(cpu_gdt_descr); | ||
7 | |||
8 | EXPORT_SYMBOL(__down_failed); | 6 | EXPORT_SYMBOL(__down_failed); |
9 | EXPORT_SYMBOL(__down_failed_interruptible); | 7 | EXPORT_SYMBOL(__down_failed_interruptible); |
10 | EXPORT_SYMBOL(__down_failed_trylock); | 8 | EXPORT_SYMBOL(__down_failed_trylock); |
diff --git a/arch/i386/kernel/io_apic.c b/arch/i386/kernel/io_apic.c index f2dd218d88cb..39d9a5fa907e 100644 --- a/arch/i386/kernel/io_apic.c +++ b/arch/i386/kernel/io_apic.c | |||
@@ -51,6 +51,8 @@ static struct { int pin, apic; } ioapic_i8259 = { -1, -1 }; | |||
51 | 51 | ||
52 | static DEFINE_SPINLOCK(ioapic_lock); | 52 | static DEFINE_SPINLOCK(ioapic_lock); |
53 | 53 | ||
54 | int timer_over_8254 __initdata = 1; | ||
55 | |||
54 | /* | 56 | /* |
55 | * Is the SiS APIC rmw bug present ? | 57 | * Is the SiS APIC rmw bug present ? |
56 | * -1 = don't know, 0 = no, 1 = yes | 58 | * -1 = don't know, 0 = no, 1 = yes |
@@ -2267,7 +2269,8 @@ static inline void check_timer(void) | |||
2267 | apic_write_around(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_EXTINT); | 2269 | apic_write_around(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_EXTINT); |
2268 | init_8259A(1); | 2270 | init_8259A(1); |
2269 | timer_ack = 1; | 2271 | timer_ack = 1; |
2270 | enable_8259A_irq(0); | 2272 | if (timer_over_8254 > 0) |
2273 | enable_8259A_irq(0); | ||
2271 | 2274 | ||
2272 | pin1 = find_isa_irq_pin(0, mp_INT); | 2275 | pin1 = find_isa_irq_pin(0, mp_INT); |
2273 | apic1 = find_isa_irq_apic(0, mp_INT); | 2276 | apic1 = find_isa_irq_apic(0, mp_INT); |
@@ -2392,6 +2395,20 @@ void __init setup_IO_APIC(void) | |||
2392 | print_IO_APIC(); | 2395 | print_IO_APIC(); |
2393 | } | 2396 | } |
2394 | 2397 | ||
2398 | static int __init setup_disable_8254_timer(char *s) | ||
2399 | { | ||
2400 | timer_over_8254 = -1; | ||
2401 | return 1; | ||
2402 | } | ||
2403 | static int __init setup_enable_8254_timer(char *s) | ||
2404 | { | ||
2405 | timer_over_8254 = 2; | ||
2406 | return 1; | ||
2407 | } | ||
2408 | |||
2409 | __setup("disable_8254_timer", setup_disable_8254_timer); | ||
2410 | __setup("enable_8254_timer", setup_enable_8254_timer); | ||
2411 | |||
2395 | /* | 2412 | /* |
2396 | * Called after all the initialization is done. If we didnt find any | 2413 | * Called after all the initialization is done. If we didnt find any |
2397 | * APIC bugs then we can allow the modify fast path | 2414 | * APIC bugs then we can allow the modify fast path |
@@ -2566,8 +2583,10 @@ int __init io_apic_get_unique_id (int ioapic, int apic_id) | |||
2566 | spin_unlock_irqrestore(&ioapic_lock, flags); | 2583 | spin_unlock_irqrestore(&ioapic_lock, flags); |
2567 | 2584 | ||
2568 | /* Sanity check */ | 2585 | /* Sanity check */ |
2569 | if (reg_00.bits.ID != apic_id) | 2586 | if (reg_00.bits.ID != apic_id) { |
2570 | panic("IOAPIC[%d]: Unable change apic_id!\n", ioapic); | 2587 | printk("IOAPIC[%d]: Unable to change apic_id!\n", ioapic); |
2588 | return -1; | ||
2589 | } | ||
2571 | } | 2590 | } |
2572 | 2591 | ||
2573 | apic_printk(APIC_VERBOSE, KERN_INFO | 2592 | apic_printk(APIC_VERBOSE, KERN_INFO |
diff --git a/arch/i386/kernel/kprobes.c b/arch/i386/kernel/kprobes.c index 6483eeb1a4e8..694a13997637 100644 --- a/arch/i386/kernel/kprobes.c +++ b/arch/i386/kernel/kprobes.c | |||
@@ -58,6 +58,11 @@ static inline int is_IF_modifier(kprobe_opcode_t opcode) | |||
58 | 58 | ||
59 | int __kprobes arch_prepare_kprobe(struct kprobe *p) | 59 | int __kprobes arch_prepare_kprobe(struct kprobe *p) |
60 | { | 60 | { |
61 | /* insn: must be on special executable page on i386. */ | ||
62 | p->ainsn.insn = get_insn_slot(); | ||
63 | if (!p->ainsn.insn) | ||
64 | return -ENOMEM; | ||
65 | |||
61 | memcpy(p->ainsn.insn, p->addr, MAX_INSN_SIZE * sizeof(kprobe_opcode_t)); | 66 | memcpy(p->ainsn.insn, p->addr, MAX_INSN_SIZE * sizeof(kprobe_opcode_t)); |
62 | p->opcode = *p->addr; | 67 | p->opcode = *p->addr; |
63 | return 0; | 68 | return 0; |
@@ -77,6 +82,13 @@ void __kprobes arch_disarm_kprobe(struct kprobe *p) | |||
77 | (unsigned long) p->addr + sizeof(kprobe_opcode_t)); | 82 | (unsigned long) p->addr + sizeof(kprobe_opcode_t)); |
78 | } | 83 | } |
79 | 84 | ||
85 | void __kprobes arch_remove_kprobe(struct kprobe *p) | ||
86 | { | ||
87 | down(&kprobe_mutex); | ||
88 | free_insn_slot(p->ainsn.insn); | ||
89 | up(&kprobe_mutex); | ||
90 | } | ||
91 | |||
80 | static inline void save_previous_kprobe(struct kprobe_ctlblk *kcb) | 92 | static inline void save_previous_kprobe(struct kprobe_ctlblk *kcb) |
81 | { | 93 | { |
82 | kcb->prev_kprobe.kp = kprobe_running(); | 94 | kcb->prev_kprobe.kp = kprobe_running(); |
@@ -111,7 +123,7 @@ static inline void prepare_singlestep(struct kprobe *p, struct pt_regs *regs) | |||
111 | if (p->opcode == BREAKPOINT_INSTRUCTION) | 123 | if (p->opcode == BREAKPOINT_INSTRUCTION) |
112 | regs->eip = (unsigned long)p->addr; | 124 | regs->eip = (unsigned long)p->addr; |
113 | else | 125 | else |
114 | regs->eip = (unsigned long)&p->ainsn.insn; | 126 | regs->eip = (unsigned long)p->ainsn.insn; |
115 | } | 127 | } |
116 | 128 | ||
117 | /* Called with kretprobe_lock held */ | 129 | /* Called with kretprobe_lock held */ |
@@ -351,7 +363,7 @@ static void __kprobes resume_execution(struct kprobe *p, | |||
351 | { | 363 | { |
352 | unsigned long *tos = (unsigned long *)®s->esp; | 364 | unsigned long *tos = (unsigned long *)®s->esp; |
353 | unsigned long next_eip = 0; | 365 | unsigned long next_eip = 0; |
354 | unsigned long copy_eip = (unsigned long)&p->ainsn.insn; | 366 | unsigned long copy_eip = (unsigned long)p->ainsn.insn; |
355 | unsigned long orig_eip = (unsigned long)p->addr; | 367 | unsigned long orig_eip = (unsigned long)p->addr; |
356 | 368 | ||
357 | switch (p->ainsn.insn[0]) { | 369 | switch (p->ainsn.insn[0]) { |
diff --git a/arch/i386/kernel/machine_kexec.c b/arch/i386/kernel/machine_kexec.c index a912fed48482..f73d7374a2ba 100644 --- a/arch/i386/kernel/machine_kexec.c +++ b/arch/i386/kernel/machine_kexec.c | |||
@@ -116,13 +116,13 @@ static void load_segments(void) | |||
116 | __asm__ __volatile__ ( | 116 | __asm__ __volatile__ ( |
117 | "\tljmp $"STR(__KERNEL_CS)",$1f\n" | 117 | "\tljmp $"STR(__KERNEL_CS)",$1f\n" |
118 | "\t1:\n" | 118 | "\t1:\n" |
119 | "\tmovl $"STR(__KERNEL_DS)",%eax\n" | 119 | "\tmovl $"STR(__KERNEL_DS)",%%eax\n" |
120 | "\tmovl %eax,%ds\n" | 120 | "\tmovl %%eax,%%ds\n" |
121 | "\tmovl %eax,%es\n" | 121 | "\tmovl %%eax,%%es\n" |
122 | "\tmovl %eax,%fs\n" | 122 | "\tmovl %%eax,%%fs\n" |
123 | "\tmovl %eax,%gs\n" | 123 | "\tmovl %%eax,%%gs\n" |
124 | "\tmovl %eax,%ss\n" | 124 | "\tmovl %%eax,%%ss\n" |
125 | ); | 125 | ::: "eax", "memory"); |
126 | #undef STR | 126 | #undef STR |
127 | #undef __STR | 127 | #undef __STR |
128 | } | 128 | } |
diff --git a/arch/i386/kernel/microcode.c b/arch/i386/kernel/microcode.c index d3fdf0057d82..5390b521aca0 100644 --- a/arch/i386/kernel/microcode.c +++ b/arch/i386/kernel/microcode.c | |||
@@ -74,6 +74,7 @@ | |||
74 | #include <linux/kernel.h> | 74 | #include <linux/kernel.h> |
75 | #include <linux/init.h> | 75 | #include <linux/init.h> |
76 | #include <linux/sched.h> | 76 | #include <linux/sched.h> |
77 | #include <linux/cpumask.h> | ||
77 | #include <linux/module.h> | 78 | #include <linux/module.h> |
78 | #include <linux/slab.h> | 79 | #include <linux/slab.h> |
79 | #include <linux/vmalloc.h> | 80 | #include <linux/vmalloc.h> |
@@ -250,8 +251,8 @@ static int find_matching_ucodes (void) | |||
250 | error = -EINVAL; | 251 | error = -EINVAL; |
251 | goto out; | 252 | goto out; |
252 | } | 253 | } |
253 | 254 | ||
254 | for (cpu_num = 0; cpu_num < num_online_cpus(); cpu_num++) { | 255 | for_each_online_cpu(cpu_num) { |
255 | struct ucode_cpu_info *uci = ucode_cpu_info + cpu_num; | 256 | struct ucode_cpu_info *uci = ucode_cpu_info + cpu_num; |
256 | if (uci->err != MC_NOTFOUND) /* already found a match or not an online cpu*/ | 257 | if (uci->err != MC_NOTFOUND) /* already found a match or not an online cpu*/ |
257 | continue; | 258 | continue; |
@@ -293,7 +294,7 @@ static int find_matching_ucodes (void) | |||
293 | error = -EFAULT; | 294 | error = -EFAULT; |
294 | goto out; | 295 | goto out; |
295 | } | 296 | } |
296 | for (cpu_num = 0; cpu_num < num_online_cpus(); cpu_num++) { | 297 | for_each_online_cpu(cpu_num) { |
297 | struct ucode_cpu_info *uci = ucode_cpu_info + cpu_num; | 298 | struct ucode_cpu_info *uci = ucode_cpu_info + cpu_num; |
298 | if (uci->err != MC_NOTFOUND) /* already found a match or not an online cpu*/ | 299 | if (uci->err != MC_NOTFOUND) /* already found a match or not an online cpu*/ |
299 | continue; | 300 | continue; |
@@ -304,7 +305,9 @@ static int find_matching_ucodes (void) | |||
304 | } | 305 | } |
305 | } | 306 | } |
306 | /* now check if any cpu has matched */ | 307 | /* now check if any cpu has matched */ |
307 | for (cpu_num = 0, allocated_flag = 0, sum = 0; cpu_num < num_online_cpus(); cpu_num++) { | 308 | allocated_flag = 0; |
309 | sum = 0; | ||
310 | for_each_online_cpu(cpu_num) { | ||
308 | if (ucode_cpu_info[cpu_num].err == MC_MARKED) { | 311 | if (ucode_cpu_info[cpu_num].err == MC_MARKED) { |
309 | struct ucode_cpu_info *uci = ucode_cpu_info + cpu_num; | 312 | struct ucode_cpu_info *uci = ucode_cpu_info + cpu_num; |
310 | if (!allocated_flag) { | 313 | if (!allocated_flag) { |
@@ -415,12 +418,12 @@ static int do_microcode_update (void) | |||
415 | } | 418 | } |
416 | 419 | ||
417 | out_free: | 420 | out_free: |
418 | for (i = 0; i < num_online_cpus(); i++) { | 421 | for_each_online_cpu(i) { |
419 | if (ucode_cpu_info[i].mc) { | 422 | if (ucode_cpu_info[i].mc) { |
420 | int j; | 423 | int j; |
421 | void *tmp = ucode_cpu_info[i].mc; | 424 | void *tmp = ucode_cpu_info[i].mc; |
422 | vfree(tmp); | 425 | vfree(tmp); |
423 | for (j = i; j < num_online_cpus(); j++) { | 426 | for_each_online_cpu(j) { |
424 | if (ucode_cpu_info[j].mc == tmp) | 427 | if (ucode_cpu_info[j].mc == tmp) |
425 | ucode_cpu_info[j].mc = NULL; | 428 | ucode_cpu_info[j].mc = NULL; |
426 | } | 429 | } |
diff --git a/arch/i386/kernel/mpparse.c b/arch/i386/kernel/mpparse.c index 91a64016956e..e6e2f43db85e 100644 --- a/arch/i386/kernel/mpparse.c +++ b/arch/i386/kernel/mpparse.c | |||
@@ -710,7 +710,7 @@ void __init get_smp_config (void) | |||
710 | * Read the physical hardware table. Anything here will | 710 | * Read the physical hardware table. Anything here will |
711 | * override the defaults. | 711 | * override the defaults. |
712 | */ | 712 | */ |
713 | if (!smp_read_mpc((void *)mpf->mpf_physptr)) { | 713 | if (!smp_read_mpc(phys_to_virt(mpf->mpf_physptr))) { |
714 | smp_found_config = 0; | 714 | smp_found_config = 0; |
715 | printk(KERN_ERR "BIOS bug, MP table errors detected!...\n"); | 715 | printk(KERN_ERR "BIOS bug, MP table errors detected!...\n"); |
716 | printk(KERN_ERR "... disabling SMP support. (tell your hw vendor)\n"); | 716 | printk(KERN_ERR "... disabling SMP support. (tell your hw vendor)\n"); |
@@ -915,6 +915,7 @@ void __init mp_register_ioapic ( | |||
915 | u32 gsi_base) | 915 | u32 gsi_base) |
916 | { | 916 | { |
917 | int idx = 0; | 917 | int idx = 0; |
918 | int tmpid; | ||
918 | 919 | ||
919 | if (nr_ioapics >= MAX_IO_APICS) { | 920 | if (nr_ioapics >= MAX_IO_APICS) { |
920 | printk(KERN_ERR "ERROR: Max # of I/O APICs (%d) exceeded " | 921 | printk(KERN_ERR "ERROR: Max # of I/O APICs (%d) exceeded " |
@@ -935,9 +936,14 @@ void __init mp_register_ioapic ( | |||
935 | 936 | ||
936 | set_fixmap_nocache(FIX_IO_APIC_BASE_0 + idx, address); | 937 | set_fixmap_nocache(FIX_IO_APIC_BASE_0 + idx, address); |
937 | if ((boot_cpu_data.x86_vendor == X86_VENDOR_INTEL) && (boot_cpu_data.x86 < 15)) | 938 | if ((boot_cpu_data.x86_vendor == X86_VENDOR_INTEL) && (boot_cpu_data.x86 < 15)) |
938 | mp_ioapics[idx].mpc_apicid = io_apic_get_unique_id(idx, id); | 939 | tmpid = io_apic_get_unique_id(idx, id); |
939 | else | 940 | else |
940 | mp_ioapics[idx].mpc_apicid = id; | 941 | tmpid = id; |
942 | if (tmpid == -1) { | ||
943 | nr_ioapics--; | ||
944 | return; | ||
945 | } | ||
946 | mp_ioapics[idx].mpc_apicid = tmpid; | ||
941 | mp_ioapics[idx].mpc_apicver = io_apic_get_version(idx); | 947 | mp_ioapics[idx].mpc_apicver = io_apic_get_version(idx); |
942 | 948 | ||
943 | /* | 949 | /* |
@@ -1080,7 +1086,7 @@ void __init mp_config_acpi_legacy_irqs (void) | |||
1080 | 1086 | ||
1081 | #define MAX_GSI_NUM 4096 | 1087 | #define MAX_GSI_NUM 4096 |
1082 | 1088 | ||
1083 | int mp_register_gsi (u32 gsi, int edge_level, int active_high_low) | 1089 | int mp_register_gsi (u32 gsi, int triggering, int polarity) |
1084 | { | 1090 | { |
1085 | int ioapic = -1; | 1091 | int ioapic = -1; |
1086 | int ioapic_pin = 0; | 1092 | int ioapic_pin = 0; |
@@ -1129,7 +1135,7 @@ int mp_register_gsi (u32 gsi, int edge_level, int active_high_low) | |||
1129 | 1135 | ||
1130 | mp_ioapic_routing[ioapic].pin_programmed[idx] |= (1<<bit); | 1136 | mp_ioapic_routing[ioapic].pin_programmed[idx] |= (1<<bit); |
1131 | 1137 | ||
1132 | if (edge_level) { | 1138 | if (triggering == ACPI_LEVEL_SENSITIVE) { |
1133 | /* | 1139 | /* |
1134 | * For PCI devices assign IRQs in order, avoiding gaps | 1140 | * For PCI devices assign IRQs in order, avoiding gaps |
1135 | * due to unused I/O APIC pins. | 1141 | * due to unused I/O APIC pins. |
@@ -1151,8 +1157,8 @@ int mp_register_gsi (u32 gsi, int edge_level, int active_high_low) | |||
1151 | } | 1157 | } |
1152 | 1158 | ||
1153 | io_apic_set_pci_routing(ioapic, ioapic_pin, gsi, | 1159 | io_apic_set_pci_routing(ioapic, ioapic_pin, gsi, |
1154 | edge_level == ACPI_EDGE_SENSITIVE ? 0 : 1, | 1160 | triggering == ACPI_EDGE_SENSITIVE ? 0 : 1, |
1155 | active_high_low == ACPI_ACTIVE_HIGH ? 0 : 1); | 1161 | polarity == ACPI_ACTIVE_HIGH ? 0 : 1); |
1156 | return gsi; | 1162 | return gsi; |
1157 | } | 1163 | } |
1158 | 1164 | ||
diff --git a/arch/i386/kernel/nmi.c b/arch/i386/kernel/nmi.c index d661703ac1cb..be87c5e2ee95 100644 --- a/arch/i386/kernel/nmi.c +++ b/arch/i386/kernel/nmi.c | |||
@@ -138,7 +138,7 @@ static int __init check_nmi_watchdog(void) | |||
138 | if (nmi_watchdog == NMI_LOCAL_APIC) | 138 | if (nmi_watchdog == NMI_LOCAL_APIC) |
139 | smp_call_function(nmi_cpu_busy, (void *)&endflag, 0, 0); | 139 | smp_call_function(nmi_cpu_busy, (void *)&endflag, 0, 0); |
140 | 140 | ||
141 | for (cpu = 0; cpu < NR_CPUS; cpu++) | 141 | for_each_cpu(cpu) |
142 | prev_nmi_count[cpu] = per_cpu(irq_stat, cpu).__nmi_count; | 142 | prev_nmi_count[cpu] = per_cpu(irq_stat, cpu).__nmi_count; |
143 | local_irq_enable(); | 143 | local_irq_enable(); |
144 | mdelay((10*1000)/nmi_hz); // wait 10 ticks | 144 | mdelay((10*1000)/nmi_hz); // wait 10 ticks |
@@ -357,7 +357,7 @@ static void clear_msr_range(unsigned int base, unsigned int n) | |||
357 | wrmsr(base+i, 0, 0); | 357 | wrmsr(base+i, 0, 0); |
358 | } | 358 | } |
359 | 359 | ||
360 | static inline void write_watchdog_counter(const char *descr) | 360 | static void write_watchdog_counter(const char *descr) |
361 | { | 361 | { |
362 | u64 count = (u64)cpu_khz * 1000; | 362 | u64 count = (u64)cpu_khz * 1000; |
363 | 363 | ||
@@ -544,7 +544,7 @@ void nmi_watchdog_tick (struct pt_regs * regs) | |||
544 | * die_nmi will return ONLY if NOTIFY_STOP happens.. | 544 | * die_nmi will return ONLY if NOTIFY_STOP happens.. |
545 | */ | 545 | */ |
546 | die_nmi(regs, "NMI Watchdog detected LOCKUP"); | 546 | die_nmi(regs, "NMI Watchdog detected LOCKUP"); |
547 | 547 | } else { | |
548 | last_irq_sums[cpu] = sum; | 548 | last_irq_sums[cpu] = sum; |
549 | alert_counter[cpu] = 0; | 549 | alert_counter[cpu] = 0; |
550 | } | 550 | } |
diff --git a/arch/i386/kernel/process.c b/arch/i386/kernel/process.c index 2185377fdde1..0480454ebffa 100644 --- a/arch/i386/kernel/process.c +++ b/arch/i386/kernel/process.c | |||
@@ -297,8 +297,10 @@ void show_regs(struct pt_regs * regs) | |||
297 | 297 | ||
298 | if (user_mode(regs)) | 298 | if (user_mode(regs)) |
299 | printk(" ESP: %04x:%08lx",0xffff & regs->xss,regs->esp); | 299 | printk(" ESP: %04x:%08lx",0xffff & regs->xss,regs->esp); |
300 | printk(" EFLAGS: %08lx %s (%s)\n", | 300 | printk(" EFLAGS: %08lx %s (%s %.*s)\n", |
301 | regs->eflags, print_tainted(), system_utsname.release); | 301 | regs->eflags, print_tainted(), system_utsname.release, |
302 | (int)strcspn(system_utsname.version, " "), | ||
303 | system_utsname.version); | ||
302 | printk("EAX: %08lx EBX: %08lx ECX: %08lx EDX: %08lx\n", | 304 | printk("EAX: %08lx EBX: %08lx ECX: %08lx EDX: %08lx\n", |
303 | regs->eax,regs->ebx,regs->ecx,regs->edx); | 305 | regs->eax,regs->ebx,regs->ecx,regs->edx); |
304 | printk("ESI: %08lx EDI: %08lx EBP: %08lx", | 306 | printk("ESI: %08lx EDI: %08lx EBP: %08lx", |
diff --git a/arch/i386/kernel/setup.c b/arch/i386/kernel/setup.c index 51e513b4f72d..ab62a9f4701e 100644 --- a/arch/i386/kernel/setup.c +++ b/arch/i386/kernel/setup.c | |||
@@ -1599,6 +1599,10 @@ void __init setup_arch(char **cmdline_p) | |||
1599 | if (efi_enabled) | 1599 | if (efi_enabled) |
1600 | efi_map_memmap(); | 1600 | efi_map_memmap(); |
1601 | 1601 | ||
1602 | #ifdef CONFIG_X86_IO_APIC | ||
1603 | check_acpi_pci(); /* Checks more than just ACPI actually */ | ||
1604 | #endif | ||
1605 | |||
1602 | #ifdef CONFIG_ACPI | 1606 | #ifdef CONFIG_ACPI |
1603 | /* | 1607 | /* |
1604 | * Parse the ACPI tables for possible boot-time SMP configuration. | 1608 | * Parse the ACPI tables for possible boot-time SMP configuration. |
diff --git a/arch/i386/kernel/smpboot.c b/arch/i386/kernel/smpboot.c index 255adb498268..7007e1783797 100644 --- a/arch/i386/kernel/smpboot.c +++ b/arch/i386/kernel/smpboot.c | |||
@@ -87,11 +87,7 @@ EXPORT_SYMBOL(cpu_online_map); | |||
87 | cpumask_t cpu_callin_map; | 87 | cpumask_t cpu_callin_map; |
88 | cpumask_t cpu_callout_map; | 88 | cpumask_t cpu_callout_map; |
89 | EXPORT_SYMBOL(cpu_callout_map); | 89 | EXPORT_SYMBOL(cpu_callout_map); |
90 | #ifdef CONFIG_HOTPLUG_CPU | ||
91 | cpumask_t cpu_possible_map = CPU_MASK_ALL; | ||
92 | #else | ||
93 | cpumask_t cpu_possible_map; | 90 | cpumask_t cpu_possible_map; |
94 | #endif | ||
95 | EXPORT_SYMBOL(cpu_possible_map); | 91 | EXPORT_SYMBOL(cpu_possible_map); |
96 | static cpumask_t smp_commenced_mask; | 92 | static cpumask_t smp_commenced_mask; |
97 | 93 | ||
@@ -902,12 +898,6 @@ static int __devinit do_boot_cpu(int apicid, int cpu) | |||
902 | unsigned long start_eip; | 898 | unsigned long start_eip; |
903 | unsigned short nmi_high = 0, nmi_low = 0; | 899 | unsigned short nmi_high = 0, nmi_low = 0; |
904 | 900 | ||
905 | if (!cpu_gdt_descr[cpu].address && | ||
906 | !(cpu_gdt_descr[cpu].address = get_zeroed_page(GFP_KERNEL))) { | ||
907 | printk("Failed to allocate GDT for CPU %d\n", cpu); | ||
908 | return 1; | ||
909 | } | ||
910 | |||
911 | ++cpucount; | 901 | ++cpucount; |
912 | 902 | ||
913 | /* | 903 | /* |
@@ -1039,6 +1029,16 @@ int __devinit smp_prepare_cpu(int cpu) | |||
1039 | int apicid, ret; | 1029 | int apicid, ret; |
1040 | 1030 | ||
1041 | lock_cpu_hotplug(); | 1031 | lock_cpu_hotplug(); |
1032 | |||
1033 | /* | ||
1034 | * On x86, CPU0 is never offlined. Trying to bring up an | ||
1035 | * already-booted CPU will hang. So check for that case. | ||
1036 | */ | ||
1037 | if (cpu_online(cpu)) { | ||
1038 | ret = -EINVAL; | ||
1039 | goto exit; | ||
1040 | } | ||
1041 | |||
1042 | apicid = x86_cpu_to_apicid[cpu]; | 1042 | apicid = x86_cpu_to_apicid[cpu]; |
1043 | if (apicid == BAD_APICID) { | 1043 | if (apicid == BAD_APICID) { |
1044 | ret = -ENODEV; | 1044 | ret = -ENODEV; |
diff --git a/arch/i386/kernel/syscall_table.S b/arch/i386/kernel/syscall_table.S index 1b665928336b..ac687d00a1ce 100644 --- a/arch/i386/kernel/syscall_table.S +++ b/arch/i386/kernel/syscall_table.S | |||
@@ -299,7 +299,7 @@ ENTRY(sys_call_table) | |||
299 | .long sys_mknodat | 299 | .long sys_mknodat |
300 | .long sys_fchownat | 300 | .long sys_fchownat |
301 | .long sys_futimesat | 301 | .long sys_futimesat |
302 | .long sys_newfstatat /* 300 */ | 302 | .long sys_fstatat64 /* 300 */ |
303 | .long sys_unlinkat | 303 | .long sys_unlinkat |
304 | .long sys_renameat | 304 | .long sys_renameat |
305 | .long sys_linkat | 305 | .long sys_linkat |
@@ -309,3 +309,4 @@ ENTRY(sys_call_table) | |||
309 | .long sys_faccessat | 309 | .long sys_faccessat |
310 | .long sys_pselect6 | 310 | .long sys_pselect6 |
311 | .long sys_ppoll | 311 | .long sys_ppoll |
312 | .long sys_unshare /* 310 */ | ||
diff --git a/arch/i386/kernel/time.c b/arch/i386/kernel/time.c index a14d594bfbeb..9d3074759856 100644 --- a/arch/i386/kernel/time.c +++ b/arch/i386/kernel/time.c | |||
@@ -412,9 +412,9 @@ static int timer_resume(struct sys_device *dev) | |||
412 | write_seqlock_irqsave(&xtime_lock, flags); | 412 | write_seqlock_irqsave(&xtime_lock, flags); |
413 | xtime.tv_sec = sec; | 413 | xtime.tv_sec = sec; |
414 | xtime.tv_nsec = 0; | 414 | xtime.tv_nsec = 0; |
415 | write_sequnlock_irqrestore(&xtime_lock, flags); | 415 | jiffies_64 += sleep_length; |
416 | jiffies += sleep_length; | ||
417 | wall_jiffies += sleep_length; | 416 | wall_jiffies += sleep_length; |
417 | write_sequnlock_irqrestore(&xtime_lock, flags); | ||
418 | if (last_timer->resume) | 418 | if (last_timer->resume) |
419 | last_timer->resume(); | 419 | last_timer->resume(); |
420 | cur_timer = last_timer; | 420 | cur_timer = last_timer; |
diff --git a/arch/i386/kernel/timers/timer_tsc.c b/arch/i386/kernel/timers/timer_tsc.c index 47675bbbb316..a7f5a2aceba2 100644 --- a/arch/i386/kernel/timers/timer_tsc.c +++ b/arch/i386/kernel/timers/timer_tsc.c | |||
@@ -45,6 +45,15 @@ static unsigned long last_tsc_high; /* msb 32 bits of Time Stamp Counter */ | |||
45 | static unsigned long long monotonic_base; | 45 | static unsigned long long monotonic_base; |
46 | static seqlock_t monotonic_lock = SEQLOCK_UNLOCKED; | 46 | static seqlock_t monotonic_lock = SEQLOCK_UNLOCKED; |
47 | 47 | ||
48 | /* Avoid compensating for lost ticks before TSCs are synched */ | ||
49 | static int detect_lost_ticks; | ||
50 | static int __init start_lost_tick_compensation(void) | ||
51 | { | ||
52 | detect_lost_ticks = 1; | ||
53 | return 0; | ||
54 | } | ||
55 | late_initcall(start_lost_tick_compensation); | ||
56 | |||
48 | /* convert from cycles(64bits) => nanoseconds (64bits) | 57 | /* convert from cycles(64bits) => nanoseconds (64bits) |
49 | * basic equation: | 58 | * basic equation: |
50 | * ns = cycles / (freq / ns_per_sec) | 59 | * ns = cycles / (freq / ns_per_sec) |
@@ -196,7 +205,8 @@ static void mark_offset_tsc_hpet(void) | |||
196 | 205 | ||
197 | /* lost tick compensation */ | 206 | /* lost tick compensation */ |
198 | offset = hpet_readl(HPET_T0_CMP) - hpet_tick; | 207 | offset = hpet_readl(HPET_T0_CMP) - hpet_tick; |
199 | if (unlikely(((offset - hpet_last) > hpet_tick) && (hpet_last != 0))) { | 208 | if (unlikely(((offset - hpet_last) > hpet_tick) && (hpet_last != 0)) |
209 | && detect_lost_ticks) { | ||
200 | int lost_ticks = (offset - hpet_last) / hpet_tick; | 210 | int lost_ticks = (offset - hpet_last) / hpet_tick; |
201 | jiffies_64 += lost_ticks; | 211 | jiffies_64 += lost_ticks; |
202 | } | 212 | } |
@@ -272,6 +282,10 @@ time_cpufreq_notifier(struct notifier_block *nb, unsigned long val, | |||
272 | if (val != CPUFREQ_RESUMECHANGE) | 282 | if (val != CPUFREQ_RESUMECHANGE) |
273 | write_seqlock_irq(&xtime_lock); | 283 | write_seqlock_irq(&xtime_lock); |
274 | if (!ref_freq) { | 284 | if (!ref_freq) { |
285 | if (!freq->old){ | ||
286 | ref_freq = freq->new; | ||
287 | goto end; | ||
288 | } | ||
275 | ref_freq = freq->old; | 289 | ref_freq = freq->old; |
276 | loops_per_jiffy_ref = cpu_data[freq->cpu].loops_per_jiffy; | 290 | loops_per_jiffy_ref = cpu_data[freq->cpu].loops_per_jiffy; |
277 | #ifndef CONFIG_SMP | 291 | #ifndef CONFIG_SMP |
@@ -297,6 +311,7 @@ time_cpufreq_notifier(struct notifier_block *nb, unsigned long val, | |||
297 | #endif | 311 | #endif |
298 | } | 312 | } |
299 | 313 | ||
314 | end: | ||
300 | if (val != CPUFREQ_RESUMECHANGE) | 315 | if (val != CPUFREQ_RESUMECHANGE) |
301 | write_sequnlock_irq(&xtime_lock); | 316 | write_sequnlock_irq(&xtime_lock); |
302 | 317 | ||
@@ -421,7 +436,7 @@ static void mark_offset_tsc(void) | |||
421 | delta += delay_at_last_interrupt; | 436 | delta += delay_at_last_interrupt; |
422 | lost = delta/(1000000/HZ); | 437 | lost = delta/(1000000/HZ); |
423 | delay = delta%(1000000/HZ); | 438 | delay = delta%(1000000/HZ); |
424 | if (lost >= 2) { | 439 | if (lost >= 2 && detect_lost_ticks) { |
425 | jiffies_64 += lost-1; | 440 | jiffies_64 += lost-1; |
426 | 441 | ||
427 | /* sanity check to ensure we're not always losing ticks */ | 442 | /* sanity check to ensure we're not always losing ticks */ |
diff --git a/arch/i386/mach-default/topology.c b/arch/i386/kernel/topology.c index b64314069e78..67a0e1baa28b 100644 --- a/arch/i386/mach-default/topology.c +++ b/arch/i386/kernel/topology.c | |||
@@ -1,12 +1,12 @@ | |||
1 | /* | 1 | /* |
2 | * arch/i386/mach-generic/topology.c - Populate driverfs with topology information | 2 | * arch/i386/kernel/topology.c - Populate driverfs with topology information |
3 | * | 3 | * |
4 | * Written by: Matthew Dobson, IBM Corporation | 4 | * Written by: Matthew Dobson, IBM Corporation |
5 | * Original Code: Paul Dorwin, IBM Corporation, Patrick Mochel, OSDL | 5 | * Original Code: Paul Dorwin, IBM Corporation, Patrick Mochel, OSDL |
6 | * | 6 | * |
7 | * Copyright (C) 2002, IBM Corp. | 7 | * Copyright (C) 2002, IBM Corp. |
8 | * | 8 | * |
9 | * All rights reserved. | 9 | * All rights reserved. |
10 | * | 10 | * |
11 | * This program is free software; you can redistribute it and/or modify | 11 | * This program is free software; you can redistribute it and/or modify |
12 | * it under the terms of the GNU General Public License as published by | 12 | * it under the terms of the GNU General Public License as published by |
@@ -34,7 +34,7 @@ static struct i386_cpu cpu_devices[NR_CPUS]; | |||
34 | 34 | ||
35 | int arch_register_cpu(int num){ | 35 | int arch_register_cpu(int num){ |
36 | struct node *parent = NULL; | 36 | struct node *parent = NULL; |
37 | 37 | ||
38 | #ifdef CONFIG_NUMA | 38 | #ifdef CONFIG_NUMA |
39 | int node = cpu_to_node(num); | 39 | int node = cpu_to_node(num); |
40 | if (node_online(node)) | 40 | if (node_online(node)) |
diff --git a/arch/i386/kernel/traps.c b/arch/i386/kernel/traps.c index 0aaebf3e1cfa..b814dbdcc91e 100644 --- a/arch/i386/kernel/traps.c +++ b/arch/i386/kernel/traps.c | |||
@@ -166,7 +166,8 @@ static void show_trace_log_lvl(struct task_struct *task, | |||
166 | stack = (unsigned long*)context->previous_esp; | 166 | stack = (unsigned long*)context->previous_esp; |
167 | if (!stack) | 167 | if (!stack) |
168 | break; | 168 | break; |
169 | printk(KERN_EMERG " =======================\n"); | 169 | printk(log_lvl); |
170 | printk(" =======================\n"); | ||
170 | } | 171 | } |
171 | } | 172 | } |
172 | 173 | ||
@@ -239,9 +240,11 @@ void show_registers(struct pt_regs *regs) | |||
239 | } | 240 | } |
240 | print_modules(); | 241 | print_modules(); |
241 | printk(KERN_EMERG "CPU: %d\nEIP: %04x:[<%08lx>] %s VLI\n" | 242 | printk(KERN_EMERG "CPU: %d\nEIP: %04x:[<%08lx>] %s VLI\n" |
242 | "EFLAGS: %08lx (%s) \n", | 243 | "EFLAGS: %08lx (%s %.*s) \n", |
243 | smp_processor_id(), 0xffff & regs->xcs, regs->eip, | 244 | smp_processor_id(), 0xffff & regs->xcs, regs->eip, |
244 | print_tainted(), regs->eflags, system_utsname.release); | 245 | print_tainted(), regs->eflags, system_utsname.release, |
246 | (int)strcspn(system_utsname.version, " "), | ||
247 | system_utsname.version); | ||
245 | print_symbol(KERN_EMERG "EIP is at %s\n", regs->eip); | 248 | print_symbol(KERN_EMERG "EIP is at %s\n", regs->eip); |
246 | printk(KERN_EMERG "eax: %08lx ebx: %08lx ecx: %08lx edx: %08lx\n", | 249 | printk(KERN_EMERG "eax: %08lx ebx: %08lx ecx: %08lx edx: %08lx\n", |
247 | regs->eax, regs->ebx, regs->ecx, regs->edx); | 250 | regs->eax, regs->ebx, regs->ecx, regs->edx); |
diff --git a/arch/i386/kernel/vsyscall-sysenter.S b/arch/i386/kernel/vsyscall-sysenter.S index 4daefb2ec1b2..76b728159403 100644 --- a/arch/i386/kernel/vsyscall-sysenter.S +++ b/arch/i386/kernel/vsyscall-sysenter.S | |||
@@ -7,6 +7,21 @@ | |||
7 | * for details. | 7 | * for details. |
8 | */ | 8 | */ |
9 | 9 | ||
10 | /* | ||
11 | * The caller puts arg2 in %ecx, which gets pushed. The kernel will use | ||
12 | * %ecx itself for arg2. The pushing is because the sysexit instruction | ||
13 | * (found in entry.S) requires that we clobber %ecx with the desired %esp. | ||
14 | * User code might expect that %ecx is unclobbered though, as it would be | ||
15 | * for returning via the iret instruction, so we must push and pop. | ||
16 | * | ||
17 | * The caller puts arg3 in %edx, which the sysexit instruction requires | ||
18 | * for %eip. Thus, exactly as for arg2, we must push and pop. | ||
19 | * | ||
20 | * Arg6 is different. The caller puts arg6 in %ebp. Since the sysenter | ||
21 | * instruction clobbers %esp, the user's %esp won't even survive entry | ||
22 | * into the kernel. We store %esp in %ebp. Code in entry.S must fetch | ||
23 | * arg6 from the stack. | ||
24 | */ | ||
10 | .text | 25 | .text |
11 | .globl __kernel_vsyscall | 26 | .globl __kernel_vsyscall |
12 | .type __kernel_vsyscall,@function | 27 | .type __kernel_vsyscall,@function |
diff --git a/arch/i386/mach-default/Makefile b/arch/i386/mach-default/Makefile index e95bb0237921..012fe34459e6 100644 --- a/arch/i386/mach-default/Makefile +++ b/arch/i386/mach-default/Makefile | |||
@@ -2,4 +2,4 @@ | |||
2 | # Makefile for the linux kernel. | 2 | # Makefile for the linux kernel. |
3 | # | 3 | # |
4 | 4 | ||
5 | obj-y := setup.o topology.o | 5 | obj-y := setup.o |
diff --git a/arch/i386/mach-voyager/voyager_basic.c b/arch/i386/mach-voyager/voyager_basic.c index aa49a33a572c..b584060ec004 100644 --- a/arch/i386/mach-voyager/voyager_basic.c +++ b/arch/i386/mach-voyager/voyager_basic.c | |||
@@ -23,6 +23,8 @@ | |||
23 | #include <linux/delay.h> | 23 | #include <linux/delay.h> |
24 | #include <linux/reboot.h> | 24 | #include <linux/reboot.h> |
25 | #include <linux/sysrq.h> | 25 | #include <linux/sysrq.h> |
26 | #include <linux/smp.h> | ||
27 | #include <linux/nodemask.h> | ||
26 | #include <asm/io.h> | 28 | #include <asm/io.h> |
27 | #include <asm/voyager.h> | 29 | #include <asm/voyager.h> |
28 | #include <asm/vic.h> | 30 | #include <asm/vic.h> |
@@ -328,4 +330,3 @@ void machine_power_off(void) | |||
328 | if (pm_power_off) | 330 | if (pm_power_off) |
329 | pm_power_off(); | 331 | pm_power_off(); |
330 | } | 332 | } |
331 | |||
diff --git a/arch/i386/mach-voyager/voyager_smp.c b/arch/i386/mach-voyager/voyager_smp.c index 72a1b9cae2e4..8165626a5c30 100644 --- a/arch/i386/mach-voyager/voyager_smp.c +++ b/arch/i386/mach-voyager/voyager_smp.c | |||
@@ -240,7 +240,7 @@ static cpumask_t smp_commenced_mask = CPU_MASK_NONE; | |||
240 | cpumask_t cpu_callin_map = CPU_MASK_NONE; | 240 | cpumask_t cpu_callin_map = CPU_MASK_NONE; |
241 | cpumask_t cpu_callout_map = CPU_MASK_NONE; | 241 | cpumask_t cpu_callout_map = CPU_MASK_NONE; |
242 | EXPORT_SYMBOL(cpu_callout_map); | 242 | EXPORT_SYMBOL(cpu_callout_map); |
243 | cpumask_t cpu_possible_map = CPU_MASK_ALL; | 243 | cpumask_t cpu_possible_map = CPU_MASK_NONE; |
244 | EXPORT_SYMBOL(cpu_possible_map); | 244 | EXPORT_SYMBOL(cpu_possible_map); |
245 | 245 | ||
246 | /* The per processor IRQ masks (these are usually kept in sync) */ | 246 | /* The per processor IRQ masks (these are usually kept in sync) */ |
@@ -402,6 +402,7 @@ find_smp_config(void) | |||
402 | cpus_addr(phys_cpu_present_map)[0] |= voyager_extended_cmos_read(VOYAGER_PROCESSOR_PRESENT_MASK + 1) << 8; | 402 | cpus_addr(phys_cpu_present_map)[0] |= voyager_extended_cmos_read(VOYAGER_PROCESSOR_PRESENT_MASK + 1) << 8; |
403 | cpus_addr(phys_cpu_present_map)[0] |= voyager_extended_cmos_read(VOYAGER_PROCESSOR_PRESENT_MASK + 2) << 16; | 403 | cpus_addr(phys_cpu_present_map)[0] |= voyager_extended_cmos_read(VOYAGER_PROCESSOR_PRESENT_MASK + 2) << 16; |
404 | cpus_addr(phys_cpu_present_map)[0] |= voyager_extended_cmos_read(VOYAGER_PROCESSOR_PRESENT_MASK + 3) << 24; | 404 | cpus_addr(phys_cpu_present_map)[0] |= voyager_extended_cmos_read(VOYAGER_PROCESSOR_PRESENT_MASK + 3) << 24; |
405 | cpu_possible_map = phys_cpu_present_map; | ||
405 | printk("VOYAGER SMP: phys_cpu_present_map = 0x%lx\n", cpus_addr(phys_cpu_present_map)[0]); | 406 | printk("VOYAGER SMP: phys_cpu_present_map = 0x%lx\n", cpus_addr(phys_cpu_present_map)[0]); |
406 | /* Here we set up the VIC to enable SMP */ | 407 | /* Here we set up the VIC to enable SMP */ |
407 | /* enable the CPIs by writing the base vector to their register */ | 408 | /* enable the CPIs by writing the base vector to their register */ |
diff --git a/arch/i386/oprofile/backtrace.c b/arch/i386/oprofile/backtrace.c index 21654be3f73f..c049ce414f01 100644 --- a/arch/i386/oprofile/backtrace.c +++ b/arch/i386/oprofile/backtrace.c | |||
@@ -20,7 +20,20 @@ struct frame_head { | |||
20 | } __attribute__((packed)); | 20 | } __attribute__((packed)); |
21 | 21 | ||
22 | static struct frame_head * | 22 | static struct frame_head * |
23 | dump_backtrace(struct frame_head * head) | 23 | dump_kernel_backtrace(struct frame_head * head) |
24 | { | ||
25 | oprofile_add_trace(head->ret); | ||
26 | |||
27 | /* frame pointers should strictly progress back up the stack | ||
28 | * (towards higher addresses) */ | ||
29 | if (head >= head->ebp) | ||
30 | return NULL; | ||
31 | |||
32 | return head->ebp; | ||
33 | } | ||
34 | |||
35 | static struct frame_head * | ||
36 | dump_user_backtrace(struct frame_head * head) | ||
24 | { | 37 | { |
25 | struct frame_head bufhead[2]; | 38 | struct frame_head bufhead[2]; |
26 | 39 | ||
@@ -49,7 +62,9 @@ dump_backtrace(struct frame_head * head) | |||
49 | * | stack | | 62 | * | stack | |
50 | * --------------- saved regs->ebp value if valid (frame_head address) | 63 | * --------------- saved regs->ebp value if valid (frame_head address) |
51 | * . . | 64 | * . . |
52 | * --------------- struct pt_regs stored on stack (struct pt_regs *) | 65 | * --------------- saved regs->rsp value if x86_64 |
66 | * | | | ||
67 | * --------------- struct pt_regs * stored on stack if 32-bit | ||
53 | * | | | 68 | * | | |
54 | * . . | 69 | * . . |
55 | * | | | 70 | * | | |
@@ -57,13 +72,26 @@ dump_backtrace(struct frame_head * head) | |||
57 | * | | | 72 | * | | |
58 | * | | \/ Lower addresses | 73 | * | | \/ Lower addresses |
59 | * | 74 | * |
60 | * Thus, &pt_regs <-> stack base restricts the valid(ish) ebp values | 75 | * Thus, regs (or regs->rsp for x86_64) <-> stack base restricts the |
76 | * valid(ish) ebp values. Note: (1) for x86_64, NMI and several other | ||
77 | * exceptions use special stacks, maintained by the interrupt stack table | ||
78 | * (IST). These stacks are set up in trap_init() in | ||
79 | * arch/x86_64/kernel/traps.c. Thus, for x86_64, regs now does not point | ||
80 | * to the kernel stack; instead, it points to some location on the NMI | ||
81 | * stack. On the other hand, regs->rsp is the stack pointer saved when the | ||
82 | * NMI occurred. (2) For 32-bit, regs->esp is not valid because the | ||
83 | * processor does not save %esp on the kernel stack when interrupts occur | ||
84 | * in the kernel mode. | ||
61 | */ | 85 | */ |
62 | #ifdef CONFIG_FRAME_POINTER | 86 | #ifdef CONFIG_FRAME_POINTER |
63 | static int valid_kernel_stack(struct frame_head * head, struct pt_regs * regs) | 87 | static int valid_kernel_stack(struct frame_head * head, struct pt_regs * regs) |
64 | { | 88 | { |
65 | unsigned long headaddr = (unsigned long)head; | 89 | unsigned long headaddr = (unsigned long)head; |
90 | #ifdef CONFIG_X86_64 | ||
91 | unsigned long stack = (unsigned long)regs->rsp; | ||
92 | #else | ||
66 | unsigned long stack = (unsigned long)regs; | 93 | unsigned long stack = (unsigned long)regs; |
94 | #endif | ||
67 | unsigned long stack_base = (stack & ~(THREAD_SIZE - 1)) + THREAD_SIZE; | 95 | unsigned long stack_base = (stack & ~(THREAD_SIZE - 1)) + THREAD_SIZE; |
68 | 96 | ||
69 | return headaddr > stack && headaddr < stack_base; | 97 | return headaddr > stack && headaddr < stack_base; |
@@ -90,10 +118,10 @@ x86_backtrace(struct pt_regs * const regs, unsigned int depth) | |||
90 | 118 | ||
91 | if (!user_mode_vm(regs)) { | 119 | if (!user_mode_vm(regs)) { |
92 | while (depth-- && valid_kernel_stack(head, regs)) | 120 | while (depth-- && valid_kernel_stack(head, regs)) |
93 | head = dump_backtrace(head); | 121 | head = dump_kernel_backtrace(head); |
94 | return; | 122 | return; |
95 | } | 123 | } |
96 | 124 | ||
97 | while (depth-- && head) | 125 | while (depth-- && head) |
98 | head = dump_backtrace(head); | 126 | head = dump_user_backtrace(head); |
99 | } | 127 | } |
diff --git a/arch/i386/pci/irq.c b/arch/i386/pci/irq.c index e715aa930036..3ca59cad05f3 100644 --- a/arch/i386/pci/irq.c +++ b/arch/i386/pci/irq.c | |||
@@ -539,6 +539,11 @@ static __init int intel_router_probe(struct irq_router *r, struct pci_dev *route | |||
539 | case PCI_DEVICE_ID_INTEL_ICH7_30: | 539 | case PCI_DEVICE_ID_INTEL_ICH7_30: |
540 | case PCI_DEVICE_ID_INTEL_ICH7_31: | 540 | case PCI_DEVICE_ID_INTEL_ICH7_31: |
541 | case PCI_DEVICE_ID_INTEL_ESB2_0: | 541 | case PCI_DEVICE_ID_INTEL_ESB2_0: |
542 | case PCI_DEVICE_ID_INTEL_ICH8_0: | ||
543 | case PCI_DEVICE_ID_INTEL_ICH8_1: | ||
544 | case PCI_DEVICE_ID_INTEL_ICH8_2: | ||
545 | case PCI_DEVICE_ID_INTEL_ICH8_3: | ||
546 | case PCI_DEVICE_ID_INTEL_ICH8_4: | ||
542 | r->name = "PIIX/ICH"; | 547 | r->name = "PIIX/ICH"; |
543 | r->get = pirq_piix_get; | 548 | r->get = pirq_piix_get; |
544 | r->set = pirq_piix_set; | 549 | r->set = pirq_piix_set; |
diff --git a/arch/i386/pci/mmconfig.c b/arch/i386/pci/mmconfig.c index 4bb4d4b0f73a..0ee8a983708c 100644 --- a/arch/i386/pci/mmconfig.c +++ b/arch/i386/pci/mmconfig.c | |||
@@ -36,8 +36,7 @@ static u32 get_base_addr(unsigned int seg, int bus, unsigned devfn) | |||
36 | while (1) { | 36 | while (1) { |
37 | ++cfg_num; | 37 | ++cfg_num; |
38 | if (cfg_num >= pci_mmcfg_config_num) { | 38 | if (cfg_num >= pci_mmcfg_config_num) { |
39 | /* Not found - fallback to type 1 */ | 39 | break; |
40 | return 0; | ||
41 | } | 40 | } |
42 | cfg = &pci_mmcfg_config[cfg_num]; | 41 | cfg = &pci_mmcfg_config[cfg_num]; |
43 | if (cfg->pci_segment_group_number != seg) | 42 | if (cfg->pci_segment_group_number != seg) |
@@ -46,6 +45,18 @@ static u32 get_base_addr(unsigned int seg, int bus, unsigned devfn) | |||
46 | (cfg->end_bus_number >= bus)) | 45 | (cfg->end_bus_number >= bus)) |
47 | return cfg->base_address; | 46 | return cfg->base_address; |
48 | } | 47 | } |
48 | |||
49 | /* Handle more broken MCFG tables on Asus etc. | ||
50 | They only contain a single entry for bus 0-0. Assume | ||
51 | this applies to all busses. */ | ||
52 | cfg = &pci_mmcfg_config[0]; | ||
53 | if (pci_mmcfg_config_num == 1 && | ||
54 | cfg->pci_segment_group_number == 0 && | ||
55 | (cfg->start_bus_number | cfg->end_bus_number) == 0) | ||
56 | return cfg->base_address; | ||
57 | |||
58 | /* Fall back to type 0 */ | ||
59 | return 0; | ||
49 | } | 60 | } |
50 | 61 | ||
51 | static inline void pci_exp_set_dev_base(unsigned int base, int bus, int devfn) | 62 | static inline void pci_exp_set_dev_base(unsigned int base, int bus, int devfn) |
diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig index 199eeaf0f4e3..a85ea9d37f05 100644 --- a/arch/ia64/Kconfig +++ b/arch/ia64/Kconfig | |||
@@ -194,7 +194,6 @@ config IA64_L1_CACHE_SHIFT | |||
194 | default "7" if MCKINLEY | 194 | default "7" if MCKINLEY |
195 | default "6" if ITANIUM | 195 | default "6" if ITANIUM |
196 | 196 | ||
197 | # align cache-sensitive data to 64 bytes | ||
198 | config IA64_CYCLONE | 197 | config IA64_CYCLONE |
199 | bool "Cyclone (EXA) Time Source support" | 198 | bool "Cyclone (EXA) Time Source support" |
200 | help | 199 | help |
@@ -374,6 +373,9 @@ config IA64_PALINFO | |||
374 | To use this option, you have to ensure that the "/proc file system | 373 | To use this option, you have to ensure that the "/proc file system |
375 | support" (CONFIG_PROC_FS) is enabled, too. | 374 | support" (CONFIG_PROC_FS) is enabled, too. |
376 | 375 | ||
376 | config SGI_SN | ||
377 | def_bool y if (IA64_SGI_SN2 || IA64_GENERIC) | ||
378 | |||
377 | source "drivers/firmware/Kconfig" | 379 | source "drivers/firmware/Kconfig" |
378 | 380 | ||
379 | source "fs/Kconfig.binfmt" | 381 | source "fs/Kconfig.binfmt" |
@@ -451,6 +453,7 @@ source "arch/ia64/oprofile/Kconfig" | |||
451 | 453 | ||
452 | config KPROBES | 454 | config KPROBES |
453 | bool "Kprobes (EXPERIMENTAL)" | 455 | bool "Kprobes (EXPERIMENTAL)" |
456 | depends on EXPERIMENTAL && MODULES | ||
454 | help | 457 | help |
455 | Kprobes allows you to trap at almost any kernel address and | 458 | Kprobes allows you to trap at almost any kernel address and |
456 | execute a callback function. register_kprobe() establishes | 459 | execute a callback function. register_kprobe() establishes |
diff --git a/arch/ia64/configs/bigsur_defconfig b/arch/ia64/configs/bigsur_defconfig index b40672bb3ab0..90e9c2e61bf4 100644 --- a/arch/ia64/configs/bigsur_defconfig +++ b/arch/ia64/configs/bigsur_defconfig | |||
@@ -1,14 +1,13 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.14-rc1 | 3 | # Linux kernel version: 2.6.16-rc5 |
4 | # Wed Sep 14 15:18:49 2005 | 4 | # Mon Feb 27 16:10:42 2006 |
5 | # | 5 | # |
6 | 6 | ||
7 | # | 7 | # |
8 | # Code maturity level options | 8 | # Code maturity level options |
9 | # | 9 | # |
10 | CONFIG_EXPERIMENTAL=y | 10 | CONFIG_EXPERIMENTAL=y |
11 | CONFIG_CLEAN_COMPILE=y | ||
12 | CONFIG_LOCK_KERNEL=y | 11 | CONFIG_LOCK_KERNEL=y |
13 | CONFIG_INIT_ENV_ARG_LIMIT=32 | 12 | CONFIG_INIT_ENV_ARG_LIMIT=32 |
14 | 13 | ||
@@ -23,17 +22,18 @@ CONFIG_POSIX_MQUEUE=y | |||
23 | # CONFIG_BSD_PROCESS_ACCT is not set | 22 | # CONFIG_BSD_PROCESS_ACCT is not set |
24 | CONFIG_SYSCTL=y | 23 | CONFIG_SYSCTL=y |
25 | # CONFIG_AUDIT is not set | 24 | # CONFIG_AUDIT is not set |
26 | CONFIG_HOTPLUG=y | ||
27 | CONFIG_KOBJECT_UEVENT=y | ||
28 | # CONFIG_IKCONFIG is not set | 25 | # CONFIG_IKCONFIG is not set |
29 | # CONFIG_CPUSETS is not set | 26 | # CONFIG_CPUSETS is not set |
30 | CONFIG_INITRAMFS_SOURCE="" | 27 | CONFIG_INITRAMFS_SOURCE="" |
28 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
31 | # CONFIG_EMBEDDED is not set | 29 | # CONFIG_EMBEDDED is not set |
32 | CONFIG_KALLSYMS=y | 30 | CONFIG_KALLSYMS=y |
33 | # CONFIG_KALLSYMS_ALL is not set | 31 | # CONFIG_KALLSYMS_ALL is not set |
34 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 32 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
33 | CONFIG_HOTPLUG=y | ||
35 | CONFIG_PRINTK=y | 34 | CONFIG_PRINTK=y |
36 | CONFIG_BUG=y | 35 | CONFIG_BUG=y |
36 | CONFIG_ELF_CORE=y | ||
37 | CONFIG_BASE_FULL=y | 37 | CONFIG_BASE_FULL=y |
38 | CONFIG_FUTEX=y | 38 | CONFIG_FUTEX=y |
39 | CONFIG_EPOLL=y | 39 | CONFIG_EPOLL=y |
@@ -42,8 +42,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0 | |||
42 | CONFIG_CC_ALIGN_LABELS=0 | 42 | CONFIG_CC_ALIGN_LABELS=0 |
43 | CONFIG_CC_ALIGN_LOOPS=0 | 43 | CONFIG_CC_ALIGN_LOOPS=0 |
44 | CONFIG_CC_ALIGN_JUMPS=0 | 44 | CONFIG_CC_ALIGN_JUMPS=0 |
45 | CONFIG_SLAB=y | ||
45 | # CONFIG_TINY_SHMEM is not set | 46 | # CONFIG_TINY_SHMEM is not set |
46 | CONFIG_BASE_SMALL=0 | 47 | CONFIG_BASE_SMALL=0 |
48 | # CONFIG_SLOB is not set | ||
47 | 49 | ||
48 | # | 50 | # |
49 | # Loadable module support | 51 | # Loadable module support |
@@ -58,17 +60,36 @@ CONFIG_KMOD=y | |||
58 | CONFIG_STOP_MACHINE=y | 60 | CONFIG_STOP_MACHINE=y |
59 | 61 | ||
60 | # | 62 | # |
63 | # Block layer | ||
64 | # | ||
65 | |||
66 | # | ||
67 | # IO Schedulers | ||
68 | # | ||
69 | CONFIG_IOSCHED_NOOP=y | ||
70 | CONFIG_IOSCHED_AS=y | ||
71 | CONFIG_IOSCHED_DEADLINE=y | ||
72 | CONFIG_IOSCHED_CFQ=y | ||
73 | CONFIG_DEFAULT_AS=y | ||
74 | # CONFIG_DEFAULT_DEADLINE is not set | ||
75 | # CONFIG_DEFAULT_CFQ is not set | ||
76 | # CONFIG_DEFAULT_NOOP is not set | ||
77 | CONFIG_DEFAULT_IOSCHED="anticipatory" | ||
78 | |||
79 | # | ||
61 | # Processor type and features | 80 | # Processor type and features |
62 | # | 81 | # |
63 | CONFIG_IA64=y | 82 | CONFIG_IA64=y |
64 | CONFIG_64BIT=y | 83 | CONFIG_64BIT=y |
65 | CONFIG_MMU=y | 84 | CONFIG_MMU=y |
85 | CONFIG_SWIOTLB=y | ||
66 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | 86 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y |
67 | CONFIG_GENERIC_CALIBRATE_DELAY=y | 87 | CONFIG_GENERIC_CALIBRATE_DELAY=y |
68 | CONFIG_TIME_INTERPOLATION=y | 88 | CONFIG_TIME_INTERPOLATION=y |
69 | CONFIG_EFI=y | 89 | CONFIG_EFI=y |
70 | CONFIG_GENERIC_IOMAP=y | 90 | CONFIG_GENERIC_IOMAP=y |
71 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | 91 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y |
92 | CONFIG_DMA_IS_DMA32=y | ||
72 | # CONFIG_IA64_GENERIC is not set | 93 | # CONFIG_IA64_GENERIC is not set |
73 | CONFIG_IA64_DIG=y | 94 | CONFIG_IA64_DIG=y |
74 | # CONFIG_IA64_HP_ZX1 is not set | 95 | # CONFIG_IA64_HP_ZX1 is not set |
@@ -81,18 +102,17 @@ CONFIG_ITANIUM=y | |||
81 | # CONFIG_IA64_PAGE_SIZE_8KB is not set | 102 | # CONFIG_IA64_PAGE_SIZE_8KB is not set |
82 | CONFIG_IA64_PAGE_SIZE_16KB=y | 103 | CONFIG_IA64_PAGE_SIZE_16KB=y |
83 | # CONFIG_IA64_PAGE_SIZE_64KB is not set | 104 | # CONFIG_IA64_PAGE_SIZE_64KB is not set |
105 | CONFIG_PGTABLE_3=y | ||
106 | # CONFIG_PGTABLE_4 is not set | ||
84 | # CONFIG_HZ_100 is not set | 107 | # CONFIG_HZ_100 is not set |
85 | CONFIG_HZ_250=y | 108 | CONFIG_HZ_250=y |
86 | # CONFIG_HZ_1000 is not set | 109 | # CONFIG_HZ_1000 is not set |
87 | CONFIG_HZ=250 | 110 | CONFIG_HZ=250 |
88 | CONFIG_IA64_BRL_EMU=y | 111 | CONFIG_IA64_BRL_EMU=y |
89 | CONFIG_IA64_L1_CACHE_SHIFT=6 | 112 | CONFIG_IA64_L1_CACHE_SHIFT=6 |
90 | # CONFIG_NUMA is not set | ||
91 | # CONFIG_VIRTUAL_MEM_MAP is not set | ||
92 | # CONFIG_IA64_CYCLONE is not set | 113 | # CONFIG_IA64_CYCLONE is not set |
93 | CONFIG_IOSAPIC=y | 114 | CONFIG_IOSAPIC=y |
94 | # CONFIG_IA64_SGI_SN_XP is not set | 115 | CONFIG_FORCE_MAX_ZONEORDER=17 |
95 | CONFIG_FORCE_MAX_ZONEORDER=18 | ||
96 | CONFIG_SMP=y | 116 | CONFIG_SMP=y |
97 | CONFIG_NR_CPUS=2 | 117 | CONFIG_NR_CPUS=2 |
98 | # CONFIG_HOTPLUG_CPU is not set | 118 | # CONFIG_HOTPLUG_CPU is not set |
@@ -105,7 +125,12 @@ CONFIG_FLATMEM_MANUAL=y | |||
105 | CONFIG_FLATMEM=y | 125 | CONFIG_FLATMEM=y |
106 | CONFIG_FLAT_NODE_MEM_MAP=y | 126 | CONFIG_FLAT_NODE_MEM_MAP=y |
107 | # CONFIG_SPARSEMEM_STATIC is not set | 127 | # CONFIG_SPARSEMEM_STATIC is not set |
108 | CONFIG_HAVE_DEC_LOCK=y | 128 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
129 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | ||
130 | CONFIG_ARCH_DISCONTIGMEM_ENABLE=y | ||
131 | CONFIG_ARCH_FLATMEM_ENABLE=y | ||
132 | CONFIG_ARCH_SPARSEMEM_ENABLE=y | ||
133 | # CONFIG_VIRTUAL_MEM_MAP is not set | ||
109 | CONFIG_IA32_SUPPORT=y | 134 | CONFIG_IA32_SUPPORT=y |
110 | CONFIG_COMPAT=y | 135 | CONFIG_COMPAT=y |
111 | # CONFIG_IA64_MCA_RECOVERY is not set | 136 | # CONFIG_IA64_MCA_RECOVERY is not set |
@@ -117,7 +142,6 @@ CONFIG_IA64_PALINFO=y | |||
117 | # | 142 | # |
118 | CONFIG_EFI_VARS=y | 143 | CONFIG_EFI_VARS=y |
119 | CONFIG_EFI_PCDP=y | 144 | CONFIG_EFI_PCDP=y |
120 | # CONFIG_DELL_RBU is not set | ||
121 | CONFIG_BINFMT_ELF=y | 145 | CONFIG_BINFMT_ELF=y |
122 | CONFIG_BINFMT_MISC=m | 146 | CONFIG_BINFMT_MISC=m |
123 | 147 | ||
@@ -125,6 +149,7 @@ CONFIG_BINFMT_MISC=m | |||
125 | # Power management and ACPI | 149 | # Power management and ACPI |
126 | # | 150 | # |
127 | CONFIG_PM=y | 151 | CONFIG_PM=y |
152 | CONFIG_PM_LEGACY=y | ||
128 | # CONFIG_PM_DEBUG is not set | 153 | # CONFIG_PM_DEBUG is not set |
129 | 154 | ||
130 | # | 155 | # |
@@ -137,6 +162,7 @@ CONFIG_ACPI_PROCESSOR=m | |||
137 | CONFIG_ACPI_THERMAL=m | 162 | CONFIG_ACPI_THERMAL=m |
138 | CONFIG_ACPI_BLACKLIST_YEAR=0 | 163 | CONFIG_ACPI_BLACKLIST_YEAR=0 |
139 | # CONFIG_ACPI_DEBUG is not set | 164 | # CONFIG_ACPI_DEBUG is not set |
165 | CONFIG_ACPI_EC=y | ||
140 | CONFIG_ACPI_POWER=y | 166 | CONFIG_ACPI_POWER=y |
141 | CONFIG_ACPI_SYSTEM=y | 167 | CONFIG_ACPI_SYSTEM=y |
142 | # CONFIG_ACPI_CONTAINER is not set | 168 | # CONFIG_ACPI_CONTAINER is not set |
@@ -173,6 +199,7 @@ CONFIG_NET=y | |||
173 | # | 199 | # |
174 | # Networking options | 200 | # Networking options |
175 | # | 201 | # |
202 | # CONFIG_NETDEBUG is not set | ||
176 | CONFIG_PACKET=y | 203 | CONFIG_PACKET=y |
177 | CONFIG_PACKET_MMAP=y | 204 | CONFIG_PACKET_MMAP=y |
178 | CONFIG_UNIX=y | 205 | CONFIG_UNIX=y |
@@ -206,6 +233,11 @@ CONFIG_TCP_CONG_BIC=y | |||
206 | # SCTP Configuration (EXPERIMENTAL) | 233 | # SCTP Configuration (EXPERIMENTAL) |
207 | # | 234 | # |
208 | # CONFIG_IP_SCTP is not set | 235 | # CONFIG_IP_SCTP is not set |
236 | |||
237 | # | ||
238 | # TIPC Configuration (EXPERIMENTAL) | ||
239 | # | ||
240 | # CONFIG_TIPC is not set | ||
209 | # CONFIG_ATM is not set | 241 | # CONFIG_ATM is not set |
210 | # CONFIG_BRIDGE is not set | 242 | # CONFIG_BRIDGE is not set |
211 | # CONFIG_VLAN_8021Q is not set | 243 | # CONFIG_VLAN_8021Q is not set |
@@ -218,14 +250,16 @@ CONFIG_TCP_CONG_BIC=y | |||
218 | # CONFIG_NET_DIVERT is not set | 250 | # CONFIG_NET_DIVERT is not set |
219 | # CONFIG_ECONET is not set | 251 | # CONFIG_ECONET is not set |
220 | # CONFIG_WAN_ROUTER is not set | 252 | # CONFIG_WAN_ROUTER is not set |
253 | |||
254 | # | ||
255 | # QoS and/or fair queueing | ||
256 | # | ||
221 | # CONFIG_NET_SCHED is not set | 257 | # CONFIG_NET_SCHED is not set |
222 | # CONFIG_NET_CLS_ROUTE is not set | ||
223 | 258 | ||
224 | # | 259 | # |
225 | # Network testing | 260 | # Network testing |
226 | # | 261 | # |
227 | # CONFIG_NET_PKTGEN is not set | 262 | # CONFIG_NET_PKTGEN is not set |
228 | # CONFIG_NETFILTER_NETLINK is not set | ||
229 | # CONFIG_HAMRADIO is not set | 263 | # CONFIG_HAMRADIO is not set |
230 | # CONFIG_IRDA is not set | 264 | # CONFIG_IRDA is not set |
231 | # CONFIG_BT is not set | 265 | # CONFIG_BT is not set |
@@ -286,20 +320,13 @@ CONFIG_BLK_DEV_RAM=m | |||
286 | CONFIG_BLK_DEV_RAM_COUNT=16 | 320 | CONFIG_BLK_DEV_RAM_COUNT=16 |
287 | CONFIG_BLK_DEV_RAM_SIZE=4096 | 321 | CONFIG_BLK_DEV_RAM_SIZE=4096 |
288 | # CONFIG_CDROM_PKTCDVD is not set | 322 | # CONFIG_CDROM_PKTCDVD is not set |
289 | |||
290 | # | ||
291 | # IO Schedulers | ||
292 | # | ||
293 | CONFIG_IOSCHED_NOOP=y | ||
294 | CONFIG_IOSCHED_AS=y | ||
295 | CONFIG_IOSCHED_DEADLINE=y | ||
296 | CONFIG_IOSCHED_CFQ=y | ||
297 | # CONFIG_ATA_OVER_ETH is not set | 323 | # CONFIG_ATA_OVER_ETH is not set |
298 | 324 | ||
299 | # | 325 | # |
300 | # ATA/ATAPI/MFM/RLL support | 326 | # ATA/ATAPI/MFM/RLL support |
301 | # | 327 | # |
302 | CONFIG_IDE=m | 328 | CONFIG_IDE=m |
329 | CONFIG_IDE_MAX_HWIFS=4 | ||
303 | CONFIG_BLK_DEV_IDE=m | 330 | CONFIG_BLK_DEV_IDE=m |
304 | 331 | ||
305 | # | 332 | # |
@@ -390,6 +417,7 @@ CONFIG_SCSI_SPI_ATTRS=m | |||
390 | # | 417 | # |
391 | # SCSI low-level drivers | 418 | # SCSI low-level drivers |
392 | # | 419 | # |
420 | # CONFIG_ISCSI_TCP is not set | ||
393 | # CONFIG_BLK_DEV_3W_XXXX_RAID is not set | 421 | # CONFIG_BLK_DEV_3W_XXXX_RAID is not set |
394 | # CONFIG_SCSI_3W_9XXX is not set | 422 | # CONFIG_SCSI_3W_9XXX is not set |
395 | # CONFIG_SCSI_ACARD is not set | 423 | # CONFIG_SCSI_ACARD is not set |
@@ -399,6 +427,7 @@ CONFIG_SCSI_SPI_ATTRS=m | |||
399 | # CONFIG_SCSI_AIC79XX is not set | 427 | # CONFIG_SCSI_AIC79XX is not set |
400 | # CONFIG_MEGARAID_NEWGEN is not set | 428 | # CONFIG_MEGARAID_NEWGEN is not set |
401 | # CONFIG_MEGARAID_LEGACY is not set | 429 | # CONFIG_MEGARAID_LEGACY is not set |
430 | # CONFIG_MEGARAID_SAS is not set | ||
402 | # CONFIG_SCSI_SATA is not set | 431 | # CONFIG_SCSI_SATA is not set |
403 | # CONFIG_SCSI_DMX3191D is not set | 432 | # CONFIG_SCSI_DMX3191D is not set |
404 | # CONFIG_SCSI_FUTURE_DOMAIN is not set | 433 | # CONFIG_SCSI_FUTURE_DOMAIN is not set |
@@ -409,14 +438,7 @@ CONFIG_SCSI_SPI_ATTRS=m | |||
409 | # CONFIG_SCSI_IPR is not set | 438 | # CONFIG_SCSI_IPR is not set |
410 | # CONFIG_SCSI_QLOGIC_FC is not set | 439 | # CONFIG_SCSI_QLOGIC_FC is not set |
411 | CONFIG_SCSI_QLOGIC_1280=y | 440 | CONFIG_SCSI_QLOGIC_1280=y |
412 | # CONFIG_SCSI_QLOGIC_1280_1040 is not set | 441 | # CONFIG_SCSI_QLA_FC is not set |
413 | CONFIG_SCSI_QLA2XXX=y | ||
414 | # CONFIG_SCSI_QLA21XX is not set | ||
415 | # CONFIG_SCSI_QLA22XX is not set | ||
416 | # CONFIG_SCSI_QLA2300 is not set | ||
417 | # CONFIG_SCSI_QLA2322 is not set | ||
418 | # CONFIG_SCSI_QLA6312 is not set | ||
419 | # CONFIG_SCSI_QLA24XX is not set | ||
420 | # CONFIG_SCSI_LPFC is not set | 442 | # CONFIG_SCSI_LPFC is not set |
421 | # CONFIG_SCSI_DC395x is not set | 443 | # CONFIG_SCSI_DC395x is not set |
422 | # CONFIG_SCSI_DC390T is not set | 444 | # CONFIG_SCSI_DC390T is not set |
@@ -448,6 +470,7 @@ CONFIG_DM_ZERO=m | |||
448 | # CONFIG_FUSION is not set | 470 | # CONFIG_FUSION is not set |
449 | # CONFIG_FUSION_SPI is not set | 471 | # CONFIG_FUSION_SPI is not set |
450 | # CONFIG_FUSION_FC is not set | 472 | # CONFIG_FUSION_FC is not set |
473 | # CONFIG_FUSION_SAS is not set | ||
451 | 474 | ||
452 | # | 475 | # |
453 | # IEEE 1394 (FireWire) support | 476 | # IEEE 1394 (FireWire) support |
@@ -486,6 +509,7 @@ CONFIG_NET_ETHERNET=y | |||
486 | CONFIG_MII=y | 509 | CONFIG_MII=y |
487 | # CONFIG_HAPPYMEAL is not set | 510 | # CONFIG_HAPPYMEAL is not set |
488 | # CONFIG_SUNGEM is not set | 511 | # CONFIG_SUNGEM is not set |
512 | # CONFIG_CASSINI is not set | ||
489 | # CONFIG_NET_VENDOR_3COM is not set | 513 | # CONFIG_NET_VENDOR_3COM is not set |
490 | 514 | ||
491 | # | 515 | # |
@@ -524,6 +548,7 @@ CONFIG_EEPRO100=y | |||
524 | # CONFIG_R8169 is not set | 548 | # CONFIG_R8169 is not set |
525 | # CONFIG_SIS190 is not set | 549 | # CONFIG_SIS190 is not set |
526 | # CONFIG_SKGE is not set | 550 | # CONFIG_SKGE is not set |
551 | # CONFIG_SKY2 is not set | ||
527 | # CONFIG_SK98LIN is not set | 552 | # CONFIG_SK98LIN is not set |
528 | # CONFIG_VIA_VELOCITY is not set | 553 | # CONFIG_VIA_VELOCITY is not set |
529 | # CONFIG_TIGON3 is not set | 554 | # CONFIG_TIGON3 is not set |
@@ -630,6 +655,7 @@ CONFIG_SERIAL_8250=y | |||
630 | CONFIG_SERIAL_8250_CONSOLE=y | 655 | CONFIG_SERIAL_8250_CONSOLE=y |
631 | CONFIG_SERIAL_8250_ACPI=y | 656 | CONFIG_SERIAL_8250_ACPI=y |
632 | CONFIG_SERIAL_8250_NR_UARTS=4 | 657 | CONFIG_SERIAL_8250_NR_UARTS=4 |
658 | CONFIG_SERIAL_8250_RUNTIME_UARTS=4 | ||
633 | CONFIG_SERIAL_8250_EXTENDED=y | 659 | CONFIG_SERIAL_8250_EXTENDED=y |
634 | CONFIG_SERIAL_8250_SHARE_IRQ=y | 660 | CONFIG_SERIAL_8250_SHARE_IRQ=y |
635 | # CONFIG_SERIAL_8250_DETECT_IRQ is not set | 661 | # CONFIG_SERIAL_8250_DETECT_IRQ is not set |
@@ -681,6 +707,7 @@ CONFIG_DRM_R128=m | |||
681 | # TPM devices | 707 | # TPM devices |
682 | # | 708 | # |
683 | # CONFIG_TCG_TPM is not set | 709 | # CONFIG_TCG_TPM is not set |
710 | # CONFIG_TELCLOCK is not set | ||
684 | 711 | ||
685 | # | 712 | # |
686 | # I2C support | 713 | # I2C support |
@@ -731,12 +758,19 @@ CONFIG_I2C_ALGOBIT=y | |||
731 | # CONFIG_SENSORS_PCF8591 is not set | 758 | # CONFIG_SENSORS_PCF8591 is not set |
732 | # CONFIG_SENSORS_RTC8564 is not set | 759 | # CONFIG_SENSORS_RTC8564 is not set |
733 | # CONFIG_SENSORS_MAX6875 is not set | 760 | # CONFIG_SENSORS_MAX6875 is not set |
761 | # CONFIG_RTC_X1205_I2C is not set | ||
734 | # CONFIG_I2C_DEBUG_CORE is not set | 762 | # CONFIG_I2C_DEBUG_CORE is not set |
735 | # CONFIG_I2C_DEBUG_ALGO is not set | 763 | # CONFIG_I2C_DEBUG_ALGO is not set |
736 | # CONFIG_I2C_DEBUG_BUS is not set | 764 | # CONFIG_I2C_DEBUG_BUS is not set |
737 | # CONFIG_I2C_DEBUG_CHIP is not set | 765 | # CONFIG_I2C_DEBUG_CHIP is not set |
738 | 766 | ||
739 | # | 767 | # |
768 | # SPI support | ||
769 | # | ||
770 | # CONFIG_SPI is not set | ||
771 | # CONFIG_SPI_MASTER is not set | ||
772 | |||
773 | # | ||
740 | # Dallas's 1-wire bus | 774 | # Dallas's 1-wire bus |
741 | # | 775 | # |
742 | # CONFIG_W1 is not set | 776 | # CONFIG_W1 is not set |
@@ -754,6 +788,7 @@ CONFIG_HWMON=y | |||
754 | # CONFIG_SENSORS_ASB100 is not set | 788 | # CONFIG_SENSORS_ASB100 is not set |
755 | # CONFIG_SENSORS_ATXP1 is not set | 789 | # CONFIG_SENSORS_ATXP1 is not set |
756 | # CONFIG_SENSORS_DS1621 is not set | 790 | # CONFIG_SENSORS_DS1621 is not set |
791 | # CONFIG_SENSORS_F71805F is not set | ||
757 | # CONFIG_SENSORS_FSCHER is not set | 792 | # CONFIG_SENSORS_FSCHER is not set |
758 | # CONFIG_SENSORS_FSCPOS is not set | 793 | # CONFIG_SENSORS_FSCPOS is not set |
759 | # CONFIG_SENSORS_GL518SM is not set | 794 | # CONFIG_SENSORS_GL518SM is not set |
@@ -775,6 +810,7 @@ CONFIG_HWMON=y | |||
775 | # CONFIG_SENSORS_SMSC47M1 is not set | 810 | # CONFIG_SENSORS_SMSC47M1 is not set |
776 | # CONFIG_SENSORS_SMSC47B397 is not set | 811 | # CONFIG_SENSORS_SMSC47B397 is not set |
777 | # CONFIG_SENSORS_VIA686A is not set | 812 | # CONFIG_SENSORS_VIA686A is not set |
813 | # CONFIG_SENSORS_VT8231 is not set | ||
778 | # CONFIG_SENSORS_W83781D is not set | 814 | # CONFIG_SENSORS_W83781D is not set |
779 | # CONFIG_SENSORS_W83792D is not set | 815 | # CONFIG_SENSORS_W83792D is not set |
780 | # CONFIG_SENSORS_W83L785TS is not set | 816 | # CONFIG_SENSORS_W83L785TS is not set |
@@ -830,6 +866,8 @@ CONFIG_SND_OSSEMUL=y | |||
830 | CONFIG_SND_MIXER_OSS=m | 866 | CONFIG_SND_MIXER_OSS=m |
831 | CONFIG_SND_PCM_OSS=m | 867 | CONFIG_SND_PCM_OSS=m |
832 | # CONFIG_SND_SEQUENCER_OSS is not set | 868 | # CONFIG_SND_SEQUENCER_OSS is not set |
869 | # CONFIG_SND_DYNAMIC_MINORS is not set | ||
870 | CONFIG_SND_SUPPORT_OLD_API=y | ||
833 | # CONFIG_SND_VERBOSE_PRINTK is not set | 871 | # CONFIG_SND_VERBOSE_PRINTK is not set |
834 | # CONFIG_SND_DEBUG is not set | 872 | # CONFIG_SND_DEBUG is not set |
835 | 873 | ||
@@ -837,17 +875,18 @@ CONFIG_SND_PCM_OSS=m | |||
837 | # Generic devices | 875 | # Generic devices |
838 | # | 876 | # |
839 | CONFIG_SND_OPL3_LIB=m | 877 | CONFIG_SND_OPL3_LIB=m |
878 | CONFIG_SND_AC97_CODEC=m | ||
879 | CONFIG_SND_AC97_BUS=m | ||
840 | # CONFIG_SND_DUMMY is not set | 880 | # CONFIG_SND_DUMMY is not set |
841 | # CONFIG_SND_VIRMIDI is not set | 881 | # CONFIG_SND_VIRMIDI is not set |
842 | # CONFIG_SND_MTPAV is not set | 882 | # CONFIG_SND_MTPAV is not set |
843 | # CONFIG_SND_SERIAL_U16550 is not set | 883 | # CONFIG_SND_SERIAL_U16550 is not set |
844 | # CONFIG_SND_MPU401 is not set | 884 | # CONFIG_SND_MPU401 is not set |
845 | CONFIG_SND_AC97_CODEC=m | ||
846 | CONFIG_SND_AC97_BUS=m | ||
847 | 885 | ||
848 | # | 886 | # |
849 | # PCI devices | 887 | # PCI devices |
850 | # | 888 | # |
889 | # CONFIG_SND_AD1889 is not set | ||
851 | # CONFIG_SND_ALI5451 is not set | 890 | # CONFIG_SND_ALI5451 is not set |
852 | # CONFIG_SND_ATIIXP is not set | 891 | # CONFIG_SND_ATIIXP is not set |
853 | # CONFIG_SND_ATIIXP_MODEM is not set | 892 | # CONFIG_SND_ATIIXP_MODEM is not set |
@@ -856,38 +895,38 @@ CONFIG_SND_AC97_BUS=m | |||
856 | # CONFIG_SND_AU8830 is not set | 895 | # CONFIG_SND_AU8830 is not set |
857 | # CONFIG_SND_AZT3328 is not set | 896 | # CONFIG_SND_AZT3328 is not set |
858 | # CONFIG_SND_BT87X is not set | 897 | # CONFIG_SND_BT87X is not set |
859 | # CONFIG_SND_CS46XX is not set | 898 | # CONFIG_SND_CA0106 is not set |
899 | # CONFIG_SND_CMIPCI is not set | ||
860 | CONFIG_SND_CS4281=m | 900 | CONFIG_SND_CS4281=m |
901 | # CONFIG_SND_CS46XX is not set | ||
861 | # CONFIG_SND_EMU10K1 is not set | 902 | # CONFIG_SND_EMU10K1 is not set |
862 | # CONFIG_SND_EMU10K1X is not set | 903 | # CONFIG_SND_EMU10K1X is not set |
863 | # CONFIG_SND_CA0106 is not set | ||
864 | # CONFIG_SND_KORG1212 is not set | ||
865 | # CONFIG_SND_MIXART is not set | ||
866 | # CONFIG_SND_NM256 is not set | ||
867 | # CONFIG_SND_RME32 is not set | ||
868 | # CONFIG_SND_RME96 is not set | ||
869 | # CONFIG_SND_RME9652 is not set | ||
870 | # CONFIG_SND_HDSP is not set | ||
871 | # CONFIG_SND_HDSPM is not set | ||
872 | # CONFIG_SND_TRIDENT is not set | ||
873 | # CONFIG_SND_YMFPCI is not set | ||
874 | # CONFIG_SND_AD1889 is not set | ||
875 | # CONFIG_SND_CMIPCI is not set | ||
876 | # CONFIG_SND_ENS1370 is not set | 904 | # CONFIG_SND_ENS1370 is not set |
877 | # CONFIG_SND_ENS1371 is not set | 905 | # CONFIG_SND_ENS1371 is not set |
878 | # CONFIG_SND_ES1938 is not set | 906 | # CONFIG_SND_ES1938 is not set |
879 | # CONFIG_SND_ES1968 is not set | 907 | # CONFIG_SND_ES1968 is not set |
880 | # CONFIG_SND_MAESTRO3 is not set | ||
881 | # CONFIG_SND_FM801 is not set | 908 | # CONFIG_SND_FM801 is not set |
909 | # CONFIG_SND_HDA_INTEL is not set | ||
910 | # CONFIG_SND_HDSP is not set | ||
911 | # CONFIG_SND_HDSPM is not set | ||
882 | # CONFIG_SND_ICE1712 is not set | 912 | # CONFIG_SND_ICE1712 is not set |
883 | # CONFIG_SND_ICE1724 is not set | 913 | # CONFIG_SND_ICE1724 is not set |
884 | # CONFIG_SND_INTEL8X0 is not set | 914 | # CONFIG_SND_INTEL8X0 is not set |
885 | # CONFIG_SND_INTEL8X0M is not set | 915 | # CONFIG_SND_INTEL8X0M is not set |
916 | # CONFIG_SND_KORG1212 is not set | ||
917 | # CONFIG_SND_MAESTRO3 is not set | ||
918 | # CONFIG_SND_MIXART is not set | ||
919 | # CONFIG_SND_NM256 is not set | ||
920 | # CONFIG_SND_PCXHR is not set | ||
921 | # CONFIG_SND_RME32 is not set | ||
922 | # CONFIG_SND_RME96 is not set | ||
923 | # CONFIG_SND_RME9652 is not set | ||
886 | # CONFIG_SND_SONICVIBES is not set | 924 | # CONFIG_SND_SONICVIBES is not set |
925 | # CONFIG_SND_TRIDENT is not set | ||
887 | # CONFIG_SND_VIA82XX is not set | 926 | # CONFIG_SND_VIA82XX is not set |
888 | # CONFIG_SND_VIA82XX_MODEM is not set | 927 | # CONFIG_SND_VIA82XX_MODEM is not set |
889 | # CONFIG_SND_VX222 is not set | 928 | # CONFIG_SND_VX222 is not set |
890 | # CONFIG_SND_HDA_INTEL is not set | 929 | # CONFIG_SND_YMFPCI is not set |
891 | 930 | ||
892 | # | 931 | # |
893 | # USB devices | 932 | # USB devices |
@@ -929,12 +968,15 @@ CONFIG_USB_UHCI_HCD=m | |||
929 | # USB Device Class drivers | 968 | # USB Device Class drivers |
930 | # | 969 | # |
931 | # CONFIG_OBSOLETE_OSS_USB_DRIVER is not set | 970 | # CONFIG_OBSOLETE_OSS_USB_DRIVER is not set |
932 | CONFIG_USB_BLUETOOTH_TTY=m | ||
933 | CONFIG_USB_ACM=m | 971 | CONFIG_USB_ACM=m |
934 | CONFIG_USB_PRINTER=m | 972 | CONFIG_USB_PRINTER=m |
935 | 973 | ||
936 | # | 974 | # |
937 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information | 975 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' |
976 | # | ||
977 | |||
978 | # | ||
979 | # may also be needed; see USB_STORAGE Help for more information | ||
938 | # | 980 | # |
939 | CONFIG_USB_STORAGE=m | 981 | CONFIG_USB_STORAGE=m |
940 | # CONFIG_USB_STORAGE_DEBUG is not set | 982 | # CONFIG_USB_STORAGE_DEBUG is not set |
@@ -946,13 +988,15 @@ CONFIG_USB_STORAGE=m | |||
946 | # CONFIG_USB_STORAGE_SDDR09 is not set | 988 | # CONFIG_USB_STORAGE_SDDR09 is not set |
947 | # CONFIG_USB_STORAGE_SDDR55 is not set | 989 | # CONFIG_USB_STORAGE_SDDR55 is not set |
948 | # CONFIG_USB_STORAGE_JUMPSHOT is not set | 990 | # CONFIG_USB_STORAGE_JUMPSHOT is not set |
949 | # CONFIG_USB_STORAGE_ONETOUCH is not set | 991 | # CONFIG_USB_STORAGE_ALAUDA is not set |
992 | # CONFIG_USB_LIBUSUAL is not set | ||
950 | 993 | ||
951 | # | 994 | # |
952 | # USB Input Devices | 995 | # USB Input Devices |
953 | # | 996 | # |
954 | CONFIG_USB_HID=m | 997 | CONFIG_USB_HID=m |
955 | CONFIG_USB_HIDINPUT=y | 998 | CONFIG_USB_HIDINPUT=y |
999 | # CONFIG_USB_HIDINPUT_POWERBOOK is not set | ||
956 | # CONFIG_HID_FF is not set | 1000 | # CONFIG_HID_FF is not set |
957 | CONFIG_USB_HIDDEV=y | 1001 | CONFIG_USB_HIDDEV=y |
958 | 1002 | ||
@@ -972,6 +1016,7 @@ CONFIG_USB_HIDDEV=y | |||
972 | # CONFIG_USB_YEALINK is not set | 1016 | # CONFIG_USB_YEALINK is not set |
973 | # CONFIG_USB_XPAD is not set | 1017 | # CONFIG_USB_XPAD is not set |
974 | # CONFIG_USB_ATI_REMOTE is not set | 1018 | # CONFIG_USB_ATI_REMOTE is not set |
1019 | # CONFIG_USB_ATI_REMOTE2 is not set | ||
975 | # CONFIG_USB_KEYSPAN_REMOTE is not set | 1020 | # CONFIG_USB_KEYSPAN_REMOTE is not set |
976 | # CONFIG_USB_APPLETOUCH is not set | 1021 | # CONFIG_USB_APPLETOUCH is not set |
977 | 1022 | ||
@@ -1046,7 +1091,7 @@ CONFIG_USB_MON=y | |||
1046 | # CONFIG_INFINIBAND is not set | 1091 | # CONFIG_INFINIBAND is not set |
1047 | 1092 | ||
1048 | # | 1093 | # |
1049 | # SN Devices | 1094 | # EDAC - error detection and reporting (RAS) |
1050 | # | 1095 | # |
1051 | 1096 | ||
1052 | # | 1097 | # |
@@ -1071,6 +1116,7 @@ CONFIG_XFS_QUOTA=y | |||
1071 | CONFIG_XFS_SECURITY=y | 1116 | CONFIG_XFS_SECURITY=y |
1072 | CONFIG_XFS_POSIX_ACL=y | 1117 | CONFIG_XFS_POSIX_ACL=y |
1073 | # CONFIG_XFS_RT is not set | 1118 | # CONFIG_XFS_RT is not set |
1119 | # CONFIG_OCFS2_FS is not set | ||
1074 | # CONFIG_MINIX_FS is not set | 1120 | # CONFIG_MINIX_FS is not set |
1075 | # CONFIG_ROMFS_FS is not set | 1121 | # CONFIG_ROMFS_FS is not set |
1076 | CONFIG_INOTIFY=y | 1122 | CONFIG_INOTIFY=y |
@@ -1111,6 +1157,7 @@ CONFIG_HUGETLBFS=y | |||
1111 | CONFIG_HUGETLB_PAGE=y | 1157 | CONFIG_HUGETLB_PAGE=y |
1112 | CONFIG_RAMFS=y | 1158 | CONFIG_RAMFS=y |
1113 | # CONFIG_RELAYFS_FS is not set | 1159 | # CONFIG_RELAYFS_FS is not set |
1160 | # CONFIG_CONFIGFS_FS is not set | ||
1114 | 1161 | ||
1115 | # | 1162 | # |
1116 | # Miscellaneous filesystems | 1163 | # Miscellaneous filesystems |
@@ -1153,6 +1200,7 @@ CONFIG_RPCSEC_GSS_KRB5=m | |||
1153 | # CONFIG_SMB_FS is not set | 1200 | # CONFIG_SMB_FS is not set |
1154 | CONFIG_CIFS=m | 1201 | CONFIG_CIFS=m |
1155 | CONFIG_CIFS_STATS=y | 1202 | CONFIG_CIFS_STATS=y |
1203 | # CONFIG_CIFS_STATS2 is not set | ||
1156 | CONFIG_CIFS_XATTR=y | 1204 | CONFIG_CIFS_XATTR=y |
1157 | CONFIG_CIFS_POSIX=y | 1205 | CONFIG_CIFS_POSIX=y |
1158 | # CONFIG_CIFS_EXPERIMENTAL is not set | 1206 | # CONFIG_CIFS_EXPERIMENTAL is not set |
@@ -1179,6 +1227,7 @@ CONFIG_MSDOS_PARTITION=y | |||
1179 | CONFIG_SGI_PARTITION=y | 1227 | CONFIG_SGI_PARTITION=y |
1180 | # CONFIG_ULTRIX_PARTITION is not set | 1228 | # CONFIG_ULTRIX_PARTITION is not set |
1181 | # CONFIG_SUN_PARTITION is not set | 1229 | # CONFIG_SUN_PARTITION is not set |
1230 | # CONFIG_KARMA_PARTITION is not set | ||
1182 | CONFIG_EFI_PARTITION=y | 1231 | CONFIG_EFI_PARTITION=y |
1183 | 1232 | ||
1184 | # | 1233 | # |
@@ -1237,28 +1286,32 @@ CONFIG_GENERIC_IRQ_PROBE=y | |||
1237 | CONFIG_GENERIC_PENDING_IRQ=y | 1286 | CONFIG_GENERIC_PENDING_IRQ=y |
1238 | 1287 | ||
1239 | # | 1288 | # |
1240 | # Profiling support | 1289 | # Instrumentation Support |
1241 | # | 1290 | # |
1242 | CONFIG_PROFILING=y | 1291 | CONFIG_PROFILING=y |
1243 | CONFIG_OPROFILE=y | 1292 | CONFIG_OPROFILE=y |
1293 | # CONFIG_KPROBES is not set | ||
1244 | 1294 | ||
1245 | # | 1295 | # |
1246 | # Kernel hacking | 1296 | # Kernel hacking |
1247 | # | 1297 | # |
1248 | # CONFIG_PRINTK_TIME is not set | 1298 | # CONFIG_PRINTK_TIME is not set |
1249 | CONFIG_DEBUG_KERNEL=y | ||
1250 | CONFIG_MAGIC_SYSRQ=y | 1299 | CONFIG_MAGIC_SYSRQ=y |
1300 | CONFIG_DEBUG_KERNEL=y | ||
1251 | CONFIG_LOG_BUF_SHIFT=16 | 1301 | CONFIG_LOG_BUF_SHIFT=16 |
1252 | CONFIG_DETECT_SOFTLOCKUP=y | 1302 | CONFIG_DETECT_SOFTLOCKUP=y |
1253 | # CONFIG_SCHEDSTATS is not set | 1303 | # CONFIG_SCHEDSTATS is not set |
1254 | # CONFIG_DEBUG_SLAB is not set | 1304 | # CONFIG_DEBUG_SLAB is not set |
1255 | CONFIG_DEBUG_PREEMPT=y | 1305 | CONFIG_DEBUG_PREEMPT=y |
1306 | CONFIG_DEBUG_MUTEXES=y | ||
1256 | # CONFIG_DEBUG_SPINLOCK is not set | 1307 | # CONFIG_DEBUG_SPINLOCK is not set |
1257 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | 1308 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set |
1258 | # CONFIG_DEBUG_KOBJECT is not set | 1309 | # CONFIG_DEBUG_KOBJECT is not set |
1259 | # CONFIG_DEBUG_INFO is not set | 1310 | # CONFIG_DEBUG_INFO is not set |
1260 | # CONFIG_DEBUG_FS is not set | 1311 | # CONFIG_DEBUG_FS is not set |
1261 | # CONFIG_KPROBES is not set | 1312 | # CONFIG_DEBUG_VM is not set |
1313 | CONFIG_FORCED_INLINING=y | ||
1314 | # CONFIG_RCU_TORTURE_TEST is not set | ||
1262 | # CONFIG_IA64_GRANULE_16MB is not set | 1315 | # CONFIG_IA64_GRANULE_16MB is not set |
1263 | CONFIG_IA64_GRANULE_64MB=y | 1316 | CONFIG_IA64_GRANULE_64MB=y |
1264 | # CONFIG_IA64_PRINT_HAZARDS is not set | 1317 | # CONFIG_IA64_PRINT_HAZARDS is not set |
diff --git a/arch/ia64/configs/gensparse_defconfig b/arch/ia64/configs/gensparse_defconfig index 991c07b57c24..744fd2f79f61 100644 --- a/arch/ia64/configs/gensparse_defconfig +++ b/arch/ia64/configs/gensparse_defconfig | |||
@@ -1,14 +1,13 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.14-rc2 | 3 | # Linux kernel version: 2.6.16-rc5 |
4 | # Wed Sep 28 08:27:29 2005 | 4 | # Thu Mar 2 16:39:10 2006 |
5 | # | 5 | # |
6 | 6 | ||
7 | # | 7 | # |
8 | # Code maturity level options | 8 | # Code maturity level options |
9 | # | 9 | # |
10 | CONFIG_EXPERIMENTAL=y | 10 | CONFIG_EXPERIMENTAL=y |
11 | CONFIG_CLEAN_COMPILE=y | ||
12 | CONFIG_LOCK_KERNEL=y | 11 | CONFIG_LOCK_KERNEL=y |
13 | CONFIG_INIT_ENV_ARG_LIMIT=32 | 12 | CONFIG_INIT_ENV_ARG_LIMIT=32 |
14 | 13 | ||
@@ -23,18 +22,19 @@ CONFIG_POSIX_MQUEUE=y | |||
23 | # CONFIG_BSD_PROCESS_ACCT is not set | 22 | # CONFIG_BSD_PROCESS_ACCT is not set |
24 | CONFIG_SYSCTL=y | 23 | CONFIG_SYSCTL=y |
25 | # CONFIG_AUDIT is not set | 24 | # CONFIG_AUDIT is not set |
26 | CONFIG_HOTPLUG=y | ||
27 | CONFIG_KOBJECT_UEVENT=y | ||
28 | CONFIG_IKCONFIG=y | 25 | CONFIG_IKCONFIG=y |
29 | CONFIG_IKCONFIG_PROC=y | 26 | CONFIG_IKCONFIG_PROC=y |
30 | # CONFIG_CPUSETS is not set | 27 | # CONFIG_CPUSETS is not set |
31 | CONFIG_INITRAMFS_SOURCE="" | 28 | CONFIG_INITRAMFS_SOURCE="" |
29 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
32 | # CONFIG_EMBEDDED is not set | 30 | # CONFIG_EMBEDDED is not set |
33 | CONFIG_KALLSYMS=y | 31 | CONFIG_KALLSYMS=y |
34 | CONFIG_KALLSYMS_ALL=y | 32 | CONFIG_KALLSYMS_ALL=y |
35 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 33 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
34 | CONFIG_HOTPLUG=y | ||
36 | CONFIG_PRINTK=y | 35 | CONFIG_PRINTK=y |
37 | CONFIG_BUG=y | 36 | CONFIG_BUG=y |
37 | CONFIG_ELF_CORE=y | ||
38 | CONFIG_BASE_FULL=y | 38 | CONFIG_BASE_FULL=y |
39 | CONFIG_FUTEX=y | 39 | CONFIG_FUTEX=y |
40 | CONFIG_EPOLL=y | 40 | CONFIG_EPOLL=y |
@@ -43,8 +43,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0 | |||
43 | CONFIG_CC_ALIGN_LABELS=0 | 43 | CONFIG_CC_ALIGN_LABELS=0 |
44 | CONFIG_CC_ALIGN_LOOPS=0 | 44 | CONFIG_CC_ALIGN_LOOPS=0 |
45 | CONFIG_CC_ALIGN_JUMPS=0 | 45 | CONFIG_CC_ALIGN_JUMPS=0 |
46 | CONFIG_SLAB=y | ||
46 | # CONFIG_TINY_SHMEM is not set | 47 | # CONFIG_TINY_SHMEM is not set |
47 | CONFIG_BASE_SMALL=0 | 48 | CONFIG_BASE_SMALL=0 |
49 | # CONFIG_SLOB is not set | ||
48 | 50 | ||
49 | # | 51 | # |
50 | # Loadable module support | 52 | # Loadable module support |
@@ -59,17 +61,36 @@ CONFIG_KMOD=y | |||
59 | CONFIG_STOP_MACHINE=y | 61 | CONFIG_STOP_MACHINE=y |
60 | 62 | ||
61 | # | 63 | # |
64 | # Block layer | ||
65 | # | ||
66 | |||
67 | # | ||
68 | # IO Schedulers | ||
69 | # | ||
70 | CONFIG_IOSCHED_NOOP=y | ||
71 | CONFIG_IOSCHED_AS=y | ||
72 | CONFIG_IOSCHED_DEADLINE=y | ||
73 | CONFIG_IOSCHED_CFQ=y | ||
74 | CONFIG_DEFAULT_AS=y | ||
75 | # CONFIG_DEFAULT_DEADLINE is not set | ||
76 | # CONFIG_DEFAULT_CFQ is not set | ||
77 | # CONFIG_DEFAULT_NOOP is not set | ||
78 | CONFIG_DEFAULT_IOSCHED="anticipatory" | ||
79 | |||
80 | # | ||
62 | # Processor type and features | 81 | # Processor type and features |
63 | # | 82 | # |
64 | CONFIG_IA64=y | 83 | CONFIG_IA64=y |
65 | CONFIG_64BIT=y | 84 | CONFIG_64BIT=y |
66 | CONFIG_MMU=y | 85 | CONFIG_MMU=y |
86 | CONFIG_SWIOTLB=y | ||
67 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | 87 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y |
68 | CONFIG_GENERIC_CALIBRATE_DELAY=y | 88 | CONFIG_GENERIC_CALIBRATE_DELAY=y |
69 | CONFIG_TIME_INTERPOLATION=y | 89 | CONFIG_TIME_INTERPOLATION=y |
70 | CONFIG_EFI=y | 90 | CONFIG_EFI=y |
71 | CONFIG_GENERIC_IOMAP=y | 91 | CONFIG_GENERIC_IOMAP=y |
72 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | 92 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y |
93 | CONFIG_DMA_IS_DMA32=y | ||
73 | CONFIG_IA64_GENERIC=y | 94 | CONFIG_IA64_GENERIC=y |
74 | # CONFIG_IA64_DIG is not set | 95 | # CONFIG_IA64_DIG is not set |
75 | # CONFIG_IA64_HP_ZX1 is not set | 96 | # CONFIG_IA64_HP_ZX1 is not set |
@@ -82,6 +103,8 @@ CONFIG_MCKINLEY=y | |||
82 | # CONFIG_IA64_PAGE_SIZE_8KB is not set | 103 | # CONFIG_IA64_PAGE_SIZE_8KB is not set |
83 | CONFIG_IA64_PAGE_SIZE_16KB=y | 104 | CONFIG_IA64_PAGE_SIZE_16KB=y |
84 | # CONFIG_IA64_PAGE_SIZE_64KB is not set | 105 | # CONFIG_IA64_PAGE_SIZE_64KB is not set |
106 | CONFIG_PGTABLE_3=y | ||
107 | # CONFIG_PGTABLE_4 is not set | ||
85 | # CONFIG_HZ_100 is not set | 108 | # CONFIG_HZ_100 is not set |
86 | CONFIG_HZ_250=y | 109 | CONFIG_HZ_250=y |
87 | # CONFIG_HZ_1000 is not set | 110 | # CONFIG_HZ_1000 is not set |
@@ -105,6 +128,9 @@ CONFIG_NEED_MULTIPLE_NODES=y | |||
105 | CONFIG_HAVE_MEMORY_PRESENT=y | 128 | CONFIG_HAVE_MEMORY_PRESENT=y |
106 | # CONFIG_SPARSEMEM_STATIC is not set | 129 | # CONFIG_SPARSEMEM_STATIC is not set |
107 | CONFIG_SPARSEMEM_EXTREME=y | 130 | CONFIG_SPARSEMEM_EXTREME=y |
131 | # CONFIG_MEMORY_HOTPLUG is not set | ||
132 | CONFIG_SPLIT_PTLOCK_CPUS=4 | ||
133 | CONFIG_MIGRATION=y | ||
108 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | 134 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y |
109 | CONFIG_ARCH_DISCONTIGMEM_ENABLE=y | 135 | CONFIG_ARCH_DISCONTIGMEM_ENABLE=y |
110 | CONFIG_ARCH_FLATMEM_ENABLE=y | 136 | CONFIG_ARCH_FLATMEM_ENABLE=y |
@@ -117,13 +143,13 @@ CONFIG_COMPAT=y | |||
117 | CONFIG_IA64_MCA_RECOVERY=y | 143 | CONFIG_IA64_MCA_RECOVERY=y |
118 | CONFIG_PERFMON=y | 144 | CONFIG_PERFMON=y |
119 | CONFIG_IA64_PALINFO=y | 145 | CONFIG_IA64_PALINFO=y |
146 | CONFIG_SGI_SN=y | ||
120 | 147 | ||
121 | # | 148 | # |
122 | # Firmware Drivers | 149 | # Firmware Drivers |
123 | # | 150 | # |
124 | CONFIG_EFI_VARS=y | 151 | CONFIG_EFI_VARS=y |
125 | CONFIG_EFI_PCDP=y | 152 | CONFIG_EFI_PCDP=y |
126 | # CONFIG_DELL_RBU is not set | ||
127 | CONFIG_BINFMT_ELF=y | 153 | CONFIG_BINFMT_ELF=y |
128 | CONFIG_BINFMT_MISC=m | 154 | CONFIG_BINFMT_MISC=m |
129 | 155 | ||
@@ -131,6 +157,7 @@ CONFIG_BINFMT_MISC=m | |||
131 | # Power management and ACPI | 157 | # Power management and ACPI |
132 | # | 158 | # |
133 | CONFIG_PM=y | 159 | CONFIG_PM=y |
160 | CONFIG_PM_LEGACY=y | ||
134 | # CONFIG_PM_DEBUG is not set | 161 | # CONFIG_PM_DEBUG is not set |
135 | 162 | ||
136 | # | 163 | # |
@@ -145,6 +172,7 @@ CONFIG_ACPI_THERMAL=m | |||
145 | CONFIG_ACPI_NUMA=y | 172 | CONFIG_ACPI_NUMA=y |
146 | CONFIG_ACPI_BLACKLIST_YEAR=0 | 173 | CONFIG_ACPI_BLACKLIST_YEAR=0 |
147 | # CONFIG_ACPI_DEBUG is not set | 174 | # CONFIG_ACPI_DEBUG is not set |
175 | CONFIG_ACPI_EC=y | ||
148 | CONFIG_ACPI_POWER=y | 176 | CONFIG_ACPI_POWER=y |
149 | CONFIG_ACPI_SYSTEM=y | 177 | CONFIG_ACPI_SYSTEM=y |
150 | CONFIG_ACPI_CONTAINER=m | 178 | CONFIG_ACPI_CONTAINER=m |
@@ -187,6 +215,7 @@ CONFIG_NET=y | |||
187 | # | 215 | # |
188 | # Networking options | 216 | # Networking options |
189 | # | 217 | # |
218 | # CONFIG_NETDEBUG is not set | ||
190 | CONFIG_PACKET=y | 219 | CONFIG_PACKET=y |
191 | # CONFIG_PACKET_MMAP is not set | 220 | # CONFIG_PACKET_MMAP is not set |
192 | CONFIG_UNIX=y | 221 | CONFIG_UNIX=y |
@@ -221,6 +250,11 @@ CONFIG_TCP_CONG_BIC=y | |||
221 | # SCTP Configuration (EXPERIMENTAL) | 250 | # SCTP Configuration (EXPERIMENTAL) |
222 | # | 251 | # |
223 | # CONFIG_IP_SCTP is not set | 252 | # CONFIG_IP_SCTP is not set |
253 | |||
254 | # | ||
255 | # TIPC Configuration (EXPERIMENTAL) | ||
256 | # | ||
257 | # CONFIG_TIPC is not set | ||
224 | # CONFIG_ATM is not set | 258 | # CONFIG_ATM is not set |
225 | # CONFIG_BRIDGE is not set | 259 | # CONFIG_BRIDGE is not set |
226 | # CONFIG_VLAN_8021Q is not set | 260 | # CONFIG_VLAN_8021Q is not set |
@@ -233,8 +267,11 @@ CONFIG_TCP_CONG_BIC=y | |||
233 | # CONFIG_NET_DIVERT is not set | 267 | # CONFIG_NET_DIVERT is not set |
234 | # CONFIG_ECONET is not set | 268 | # CONFIG_ECONET is not set |
235 | # CONFIG_WAN_ROUTER is not set | 269 | # CONFIG_WAN_ROUTER is not set |
270 | |||
271 | # | ||
272 | # QoS and/or fair queueing | ||
273 | # | ||
236 | # CONFIG_NET_SCHED is not set | 274 | # CONFIG_NET_SCHED is not set |
237 | # CONFIG_NET_CLS_ROUTE is not set | ||
238 | 275 | ||
239 | # | 276 | # |
240 | # Network testing | 277 | # Network testing |
@@ -275,7 +312,13 @@ CONFIG_FW_LOADER=m | |||
275 | # | 312 | # |
276 | # Plug and Play support | 313 | # Plug and Play support |
277 | # | 314 | # |
278 | # CONFIG_PNP is not set | 315 | CONFIG_PNP=y |
316 | # CONFIG_PNP_DEBUG is not set | ||
317 | |||
318 | # | ||
319 | # Protocols | ||
320 | # | ||
321 | CONFIG_PNPACPI=y | ||
279 | 322 | ||
280 | # | 323 | # |
281 | # Block devices | 324 | # Block devices |
@@ -295,20 +338,13 @@ CONFIG_BLK_DEV_RAM_COUNT=16 | |||
295 | CONFIG_BLK_DEV_RAM_SIZE=4096 | 338 | CONFIG_BLK_DEV_RAM_SIZE=4096 |
296 | CONFIG_BLK_DEV_INITRD=y | 339 | CONFIG_BLK_DEV_INITRD=y |
297 | # CONFIG_CDROM_PKTCDVD is not set | 340 | # CONFIG_CDROM_PKTCDVD is not set |
298 | |||
299 | # | ||
300 | # IO Schedulers | ||
301 | # | ||
302 | CONFIG_IOSCHED_NOOP=y | ||
303 | CONFIG_IOSCHED_AS=y | ||
304 | CONFIG_IOSCHED_DEADLINE=y | ||
305 | CONFIG_IOSCHED_CFQ=y | ||
306 | # CONFIG_ATA_OVER_ETH is not set | 341 | # CONFIG_ATA_OVER_ETH is not set |
307 | 342 | ||
308 | # | 343 | # |
309 | # ATA/ATAPI/MFM/RLL support | 344 | # ATA/ATAPI/MFM/RLL support |
310 | # | 345 | # |
311 | CONFIG_IDE=y | 346 | CONFIG_IDE=y |
347 | CONFIG_IDE_MAX_HWIFS=4 | ||
312 | CONFIG_BLK_DEV_IDE=y | 348 | CONFIG_BLK_DEV_IDE=y |
313 | 349 | ||
314 | # | 350 | # |
@@ -327,6 +363,7 @@ CONFIG_BLK_DEV_IDESCSI=m | |||
327 | # IDE chipset support/bugfixes | 363 | # IDE chipset support/bugfixes |
328 | # | 364 | # |
329 | CONFIG_IDE_GENERIC=y | 365 | CONFIG_IDE_GENERIC=y |
366 | # CONFIG_BLK_DEV_IDEPNP is not set | ||
330 | CONFIG_BLK_DEV_IDEPCI=y | 367 | CONFIG_BLK_DEV_IDEPCI=y |
331 | # CONFIG_IDEPCI_SHARE_IRQ is not set | 368 | # CONFIG_IDEPCI_SHARE_IRQ is not set |
332 | # CONFIG_BLK_DEV_OFFBOARD is not set | 369 | # CONFIG_BLK_DEV_OFFBOARD is not set |
@@ -400,6 +437,7 @@ CONFIG_SCSI_FC_ATTRS=y | |||
400 | # | 437 | # |
401 | # SCSI low-level drivers | 438 | # SCSI low-level drivers |
402 | # | 439 | # |
440 | # CONFIG_ISCSI_TCP is not set | ||
403 | # CONFIG_BLK_DEV_3W_XXXX_RAID is not set | 441 | # CONFIG_BLK_DEV_3W_XXXX_RAID is not set |
404 | # CONFIG_SCSI_3W_9XXX is not set | 442 | # CONFIG_SCSI_3W_9XXX is not set |
405 | # CONFIG_SCSI_ACARD is not set | 443 | # CONFIG_SCSI_ACARD is not set |
@@ -409,16 +447,19 @@ CONFIG_SCSI_FC_ATTRS=y | |||
409 | # CONFIG_SCSI_AIC79XX is not set | 447 | # CONFIG_SCSI_AIC79XX is not set |
410 | # CONFIG_MEGARAID_NEWGEN is not set | 448 | # CONFIG_MEGARAID_NEWGEN is not set |
411 | # CONFIG_MEGARAID_LEGACY is not set | 449 | # CONFIG_MEGARAID_LEGACY is not set |
450 | # CONFIG_MEGARAID_SAS is not set | ||
412 | CONFIG_SCSI_SATA=y | 451 | CONFIG_SCSI_SATA=y |
413 | # CONFIG_SCSI_SATA_AHCI is not set | 452 | # CONFIG_SCSI_SATA_AHCI is not set |
414 | # CONFIG_SCSI_SATA_SVW is not set | 453 | # CONFIG_SCSI_SATA_SVW is not set |
415 | # CONFIG_SCSI_ATA_PIIX is not set | 454 | # CONFIG_SCSI_ATA_PIIX is not set |
416 | # CONFIG_SCSI_SATA_MV is not set | 455 | # CONFIG_SCSI_SATA_MV is not set |
417 | # CONFIG_SCSI_SATA_NV is not set | 456 | # CONFIG_SCSI_SATA_NV is not set |
418 | # CONFIG_SCSI_SATA_PROMISE is not set | 457 | # CONFIG_SCSI_PDC_ADMA is not set |
419 | # CONFIG_SCSI_SATA_QSTOR is not set | 458 | # CONFIG_SCSI_SATA_QSTOR is not set |
459 | # CONFIG_SCSI_SATA_PROMISE is not set | ||
420 | # CONFIG_SCSI_SATA_SX4 is not set | 460 | # CONFIG_SCSI_SATA_SX4 is not set |
421 | # CONFIG_SCSI_SATA_SIL is not set | 461 | # CONFIG_SCSI_SATA_SIL is not set |
462 | # CONFIG_SCSI_SATA_SIL24 is not set | ||
422 | # CONFIG_SCSI_SATA_SIS is not set | 463 | # CONFIG_SCSI_SATA_SIS is not set |
423 | # CONFIG_SCSI_SATA_ULI is not set | 464 | # CONFIG_SCSI_SATA_ULI is not set |
424 | # CONFIG_SCSI_SATA_VIA is not set | 465 | # CONFIG_SCSI_SATA_VIA is not set |
@@ -436,14 +477,7 @@ CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 | |||
436 | # CONFIG_SCSI_IPR is not set | 477 | # CONFIG_SCSI_IPR is not set |
437 | # CONFIG_SCSI_QLOGIC_FC is not set | 478 | # CONFIG_SCSI_QLOGIC_FC is not set |
438 | CONFIG_SCSI_QLOGIC_1280=y | 479 | CONFIG_SCSI_QLOGIC_1280=y |
439 | # CONFIG_SCSI_QLOGIC_1280_1040 is not set | 480 | # CONFIG_SCSI_QLA_FC is not set |
440 | CONFIG_SCSI_QLA2XXX=y | ||
441 | CONFIG_SCSI_QLA21XX=m | ||
442 | CONFIG_SCSI_QLA22XX=m | ||
443 | CONFIG_SCSI_QLA2300=m | ||
444 | CONFIG_SCSI_QLA2322=m | ||
445 | # CONFIG_SCSI_QLA6312 is not set | ||
446 | # CONFIG_SCSI_QLA24XX is not set | ||
447 | # CONFIG_SCSI_LPFC is not set | 481 | # CONFIG_SCSI_LPFC is not set |
448 | # CONFIG_SCSI_DC395x is not set | 482 | # CONFIG_SCSI_DC395x is not set |
449 | # CONFIG_SCSI_DC390T is not set | 483 | # CONFIG_SCSI_DC390T is not set |
@@ -476,6 +510,7 @@ CONFIG_DM_MULTIPATH=m | |||
476 | CONFIG_FUSION=y | 510 | CONFIG_FUSION=y |
477 | CONFIG_FUSION_SPI=y | 511 | CONFIG_FUSION_SPI=y |
478 | CONFIG_FUSION_FC=m | 512 | CONFIG_FUSION_FC=m |
513 | # CONFIG_FUSION_SAS is not set | ||
479 | CONFIG_FUSION_MAX_SGE=128 | 514 | CONFIG_FUSION_MAX_SGE=128 |
480 | # CONFIG_FUSION_CTL is not set | 515 | # CONFIG_FUSION_CTL is not set |
481 | 516 | ||
@@ -497,6 +532,7 @@ CONFIG_DUMMY=m | |||
497 | # CONFIG_BONDING is not set | 532 | # CONFIG_BONDING is not set |
498 | # CONFIG_EQUALIZER is not set | 533 | # CONFIG_EQUALIZER is not set |
499 | # CONFIG_TUN is not set | 534 | # CONFIG_TUN is not set |
535 | # CONFIG_NET_SB1000 is not set | ||
500 | 536 | ||
501 | # | 537 | # |
502 | # ARCnet devices | 538 | # ARCnet devices |
@@ -515,6 +551,7 @@ CONFIG_NET_ETHERNET=y | |||
515 | CONFIG_MII=m | 551 | CONFIG_MII=m |
516 | # CONFIG_HAPPYMEAL is not set | 552 | # CONFIG_HAPPYMEAL is not set |
517 | # CONFIG_SUNGEM is not set | 553 | # CONFIG_SUNGEM is not set |
554 | # CONFIG_CASSINI is not set | ||
518 | # CONFIG_NET_VENDOR_3COM is not set | 555 | # CONFIG_NET_VENDOR_3COM is not set |
519 | 556 | ||
520 | # | 557 | # |
@@ -564,6 +601,7 @@ CONFIG_E1000=y | |||
564 | # CONFIG_R8169 is not set | 601 | # CONFIG_R8169 is not set |
565 | # CONFIG_SIS190 is not set | 602 | # CONFIG_SIS190 is not set |
566 | # CONFIG_SKGE is not set | 603 | # CONFIG_SKGE is not set |
604 | # CONFIG_SKY2 is not set | ||
567 | # CONFIG_SK98LIN is not set | 605 | # CONFIG_SK98LIN is not set |
568 | # CONFIG_VIA_VELOCITY is not set | 606 | # CONFIG_VIA_VELOCITY is not set |
569 | CONFIG_TIGON3=y | 607 | CONFIG_TIGON3=y |
@@ -668,12 +706,15 @@ CONFIG_VT=y | |||
668 | CONFIG_VT_CONSOLE=y | 706 | CONFIG_VT_CONSOLE=y |
669 | CONFIG_HW_CONSOLE=y | 707 | CONFIG_HW_CONSOLE=y |
670 | CONFIG_SERIAL_NONSTANDARD=y | 708 | CONFIG_SERIAL_NONSTANDARD=y |
709 | # CONFIG_COMPUTONE is not set | ||
671 | # CONFIG_ROCKETPORT is not set | 710 | # CONFIG_ROCKETPORT is not set |
672 | # CONFIG_CYCLADES is not set | 711 | # CONFIG_CYCLADES is not set |
673 | # CONFIG_DIGIEPCA is not set | 712 | # CONFIG_DIGIEPCA is not set |
713 | # CONFIG_MOXA_INTELLIO is not set | ||
674 | # CONFIG_MOXA_SMARTIO is not set | 714 | # CONFIG_MOXA_SMARTIO is not set |
675 | # CONFIG_ISI is not set | 715 | # CONFIG_ISI is not set |
676 | # CONFIG_SYNCLINKMP is not set | 716 | # CONFIG_SYNCLINKMP is not set |
717 | # CONFIG_SYNCLINK_GT is not set | ||
677 | # CONFIG_N_HDLC is not set | 718 | # CONFIG_N_HDLC is not set |
678 | # CONFIG_SPECIALIX is not set | 719 | # CONFIG_SPECIALIX is not set |
679 | # CONFIG_SX is not set | 720 | # CONFIG_SX is not set |
@@ -689,6 +730,7 @@ CONFIG_SERIAL_8250=y | |||
689 | CONFIG_SERIAL_8250_CONSOLE=y | 730 | CONFIG_SERIAL_8250_CONSOLE=y |
690 | CONFIG_SERIAL_8250_ACPI=y | 731 | CONFIG_SERIAL_8250_ACPI=y |
691 | CONFIG_SERIAL_8250_NR_UARTS=6 | 732 | CONFIG_SERIAL_8250_NR_UARTS=6 |
733 | CONFIG_SERIAL_8250_RUNTIME_UARTS=4 | ||
692 | CONFIG_SERIAL_8250_EXTENDED=y | 734 | CONFIG_SERIAL_8250_EXTENDED=y |
693 | CONFIG_SERIAL_8250_SHARE_IRQ=y | 735 | CONFIG_SERIAL_8250_SHARE_IRQ=y |
694 | # CONFIG_SERIAL_8250_DETECT_IRQ is not set | 736 | # CONFIG_SERIAL_8250_DETECT_IRQ is not set |
@@ -738,10 +780,10 @@ CONFIG_DRM_SIS=m | |||
738 | # CONFIG_DRM_VIA is not set | 780 | # CONFIG_DRM_VIA is not set |
739 | # CONFIG_DRM_SAVAGE is not set | 781 | # CONFIG_DRM_SAVAGE is not set |
740 | CONFIG_RAW_DRIVER=m | 782 | CONFIG_RAW_DRIVER=m |
783 | CONFIG_MAX_RAW_DEVS=256 | ||
741 | CONFIG_HPET=y | 784 | CONFIG_HPET=y |
742 | # CONFIG_HPET_RTC_IRQ is not set | 785 | # CONFIG_HPET_RTC_IRQ is not set |
743 | CONFIG_HPET_MMAP=y | 786 | CONFIG_HPET_MMAP=y |
744 | CONFIG_MAX_RAW_DEVS=256 | ||
745 | # CONFIG_HANGCHECK_TIMER is not set | 787 | # CONFIG_HANGCHECK_TIMER is not set |
746 | CONFIG_MMTIMER=y | 788 | CONFIG_MMTIMER=y |
747 | 789 | ||
@@ -749,6 +791,7 @@ CONFIG_MMTIMER=y | |||
749 | # TPM devices | 791 | # TPM devices |
750 | # | 792 | # |
751 | # CONFIG_TCG_TPM is not set | 793 | # CONFIG_TCG_TPM is not set |
794 | # CONFIG_TELCLOCK is not set | ||
752 | 795 | ||
753 | # | 796 | # |
754 | # I2C support | 797 | # I2C support |
@@ -756,6 +799,12 @@ CONFIG_MMTIMER=y | |||
756 | # CONFIG_I2C is not set | 799 | # CONFIG_I2C is not set |
757 | 800 | ||
758 | # | 801 | # |
802 | # SPI support | ||
803 | # | ||
804 | # CONFIG_SPI is not set | ||
805 | # CONFIG_SPI_MASTER is not set | ||
806 | |||
807 | # | ||
759 | # Dallas's 1-wire bus | 808 | # Dallas's 1-wire bus |
760 | # | 809 | # |
761 | # CONFIG_W1 is not set | 810 | # CONFIG_W1 is not set |
@@ -765,6 +814,7 @@ CONFIG_MMTIMER=y | |||
765 | # | 814 | # |
766 | CONFIG_HWMON=y | 815 | CONFIG_HWMON=y |
767 | # CONFIG_HWMON_VID is not set | 816 | # CONFIG_HWMON_VID is not set |
817 | # CONFIG_SENSORS_F71805F is not set | ||
768 | # CONFIG_HWMON_DEBUG_CHIP is not set | 818 | # CONFIG_HWMON_DEBUG_CHIP is not set |
769 | 819 | ||
770 | # | 820 | # |
@@ -815,26 +865,28 @@ CONFIG_SND_OSSEMUL=y | |||
815 | CONFIG_SND_MIXER_OSS=m | 865 | CONFIG_SND_MIXER_OSS=m |
816 | CONFIG_SND_PCM_OSS=m | 866 | CONFIG_SND_PCM_OSS=m |
817 | CONFIG_SND_SEQUENCER_OSS=y | 867 | CONFIG_SND_SEQUENCER_OSS=y |
868 | # CONFIG_SND_DYNAMIC_MINORS is not set | ||
869 | CONFIG_SND_SUPPORT_OLD_API=y | ||
818 | CONFIG_SND_VERBOSE_PRINTK=y | 870 | CONFIG_SND_VERBOSE_PRINTK=y |
819 | # CONFIG_SND_DEBUG is not set | 871 | # CONFIG_SND_DEBUG is not set |
820 | CONFIG_SND_GENERIC_DRIVER=y | ||
821 | 872 | ||
822 | # | 873 | # |
823 | # Generic devices | 874 | # Generic devices |
824 | # | 875 | # |
825 | CONFIG_SND_MPU401_UART=m | 876 | CONFIG_SND_MPU401_UART=m |
826 | CONFIG_SND_OPL3_LIB=m | 877 | CONFIG_SND_OPL3_LIB=m |
878 | CONFIG_SND_AC97_CODEC=m | ||
879 | CONFIG_SND_AC97_BUS=m | ||
827 | CONFIG_SND_DUMMY=m | 880 | CONFIG_SND_DUMMY=m |
828 | CONFIG_SND_VIRMIDI=m | 881 | CONFIG_SND_VIRMIDI=m |
829 | CONFIG_SND_MTPAV=m | 882 | CONFIG_SND_MTPAV=m |
830 | CONFIG_SND_SERIAL_U16550=m | 883 | CONFIG_SND_SERIAL_U16550=m |
831 | CONFIG_SND_MPU401=m | 884 | CONFIG_SND_MPU401=m |
832 | CONFIG_SND_AC97_CODEC=m | ||
833 | CONFIG_SND_AC97_BUS=m | ||
834 | 885 | ||
835 | # | 886 | # |
836 | # PCI devices | 887 | # PCI devices |
837 | # | 888 | # |
889 | # CONFIG_SND_AD1889 is not set | ||
838 | # CONFIG_SND_ALI5451 is not set | 890 | # CONFIG_SND_ALI5451 is not set |
839 | # CONFIG_SND_ATIIXP is not set | 891 | # CONFIG_SND_ATIIXP is not set |
840 | # CONFIG_SND_ATIIXP_MODEM is not set | 892 | # CONFIG_SND_ATIIXP_MODEM is not set |
@@ -843,40 +895,40 @@ CONFIG_SND_AC97_BUS=m | |||
843 | # CONFIG_SND_AU8830 is not set | 895 | # CONFIG_SND_AU8830 is not set |
844 | # CONFIG_SND_AZT3328 is not set | 896 | # CONFIG_SND_AZT3328 is not set |
845 | # CONFIG_SND_BT87X is not set | 897 | # CONFIG_SND_BT87X is not set |
898 | # CONFIG_SND_CA0106 is not set | ||
899 | # CONFIG_SND_CMIPCI is not set | ||
900 | CONFIG_SND_CS4281=m | ||
846 | CONFIG_SND_CS46XX=m | 901 | CONFIG_SND_CS46XX=m |
847 | CONFIG_SND_CS46XX_NEW_DSP=y | 902 | CONFIG_SND_CS46XX_NEW_DSP=y |
848 | CONFIG_SND_CS4281=m | ||
849 | CONFIG_SND_EMU10K1=m | 903 | CONFIG_SND_EMU10K1=m |
850 | # CONFIG_SND_EMU10K1X is not set | 904 | # CONFIG_SND_EMU10K1X is not set |
851 | # CONFIG_SND_CA0106 is not set | ||
852 | # CONFIG_SND_KORG1212 is not set | ||
853 | # CONFIG_SND_MIXART is not set | ||
854 | # CONFIG_SND_NM256 is not set | ||
855 | # CONFIG_SND_RME32 is not set | ||
856 | # CONFIG_SND_RME96 is not set | ||
857 | # CONFIG_SND_RME9652 is not set | ||
858 | # CONFIG_SND_HDSP is not set | ||
859 | # CONFIG_SND_HDSPM is not set | ||
860 | # CONFIG_SND_TRIDENT is not set | ||
861 | # CONFIG_SND_YMFPCI is not set | ||
862 | # CONFIG_SND_AD1889 is not set | ||
863 | # CONFIG_SND_CMIPCI is not set | ||
864 | # CONFIG_SND_ENS1370 is not set | 905 | # CONFIG_SND_ENS1370 is not set |
865 | # CONFIG_SND_ENS1371 is not set | 906 | # CONFIG_SND_ENS1371 is not set |
866 | # CONFIG_SND_ES1938 is not set | 907 | # CONFIG_SND_ES1938 is not set |
867 | # CONFIG_SND_ES1968 is not set | 908 | # CONFIG_SND_ES1968 is not set |
868 | # CONFIG_SND_MAESTRO3 is not set | ||
869 | CONFIG_SND_FM801=m | 909 | CONFIG_SND_FM801=m |
870 | # CONFIG_SND_FM801_TEA575X is not set | 910 | # CONFIG_SND_FM801_TEA575X is not set |
911 | # CONFIG_SND_HDA_INTEL is not set | ||
912 | # CONFIG_SND_HDSP is not set | ||
913 | # CONFIG_SND_HDSPM is not set | ||
871 | # CONFIG_SND_ICE1712 is not set | 914 | # CONFIG_SND_ICE1712 is not set |
872 | # CONFIG_SND_ICE1724 is not set | 915 | # CONFIG_SND_ICE1724 is not set |
873 | # CONFIG_SND_INTEL8X0 is not set | 916 | # CONFIG_SND_INTEL8X0 is not set |
874 | # CONFIG_SND_INTEL8X0M is not set | 917 | # CONFIG_SND_INTEL8X0M is not set |
918 | # CONFIG_SND_KORG1212 is not set | ||
919 | # CONFIG_SND_MAESTRO3 is not set | ||
920 | # CONFIG_SND_MIXART is not set | ||
921 | # CONFIG_SND_NM256 is not set | ||
922 | # CONFIG_SND_PCXHR is not set | ||
923 | # CONFIG_SND_RME32 is not set | ||
924 | # CONFIG_SND_RME96 is not set | ||
925 | # CONFIG_SND_RME9652 is not set | ||
875 | # CONFIG_SND_SONICVIBES is not set | 926 | # CONFIG_SND_SONICVIBES is not set |
927 | # CONFIG_SND_TRIDENT is not set | ||
876 | # CONFIG_SND_VIA82XX is not set | 928 | # CONFIG_SND_VIA82XX is not set |
877 | # CONFIG_SND_VIA82XX_MODEM is not set | 929 | # CONFIG_SND_VIA82XX_MODEM is not set |
878 | # CONFIG_SND_VX222 is not set | 930 | # CONFIG_SND_VX222 is not set |
879 | # CONFIG_SND_HDA_INTEL is not set | 931 | # CONFIG_SND_YMFPCI is not set |
880 | 932 | ||
881 | # | 933 | # |
882 | # USB devices | 934 | # USB devices |
@@ -922,12 +974,15 @@ CONFIG_USB_UHCI_HCD=m | |||
922 | # USB Device Class drivers | 974 | # USB Device Class drivers |
923 | # | 975 | # |
924 | # CONFIG_OBSOLETE_OSS_USB_DRIVER is not set | 976 | # CONFIG_OBSOLETE_OSS_USB_DRIVER is not set |
925 | # CONFIG_USB_BLUETOOTH_TTY is not set | ||
926 | # CONFIG_USB_ACM is not set | 977 | # CONFIG_USB_ACM is not set |
927 | # CONFIG_USB_PRINTER is not set | 978 | # CONFIG_USB_PRINTER is not set |
928 | 979 | ||
929 | # | 980 | # |
930 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information | 981 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' |
982 | # | ||
983 | |||
984 | # | ||
985 | # may also be needed; see USB_STORAGE Help for more information | ||
931 | # | 986 | # |
932 | CONFIG_USB_STORAGE=m | 987 | CONFIG_USB_STORAGE=m |
933 | # CONFIG_USB_STORAGE_DEBUG is not set | 988 | # CONFIG_USB_STORAGE_DEBUG is not set |
@@ -939,12 +994,15 @@ CONFIG_USB_STORAGE=m | |||
939 | # CONFIG_USB_STORAGE_SDDR09 is not set | 994 | # CONFIG_USB_STORAGE_SDDR09 is not set |
940 | # CONFIG_USB_STORAGE_SDDR55 is not set | 995 | # CONFIG_USB_STORAGE_SDDR55 is not set |
941 | # CONFIG_USB_STORAGE_JUMPSHOT is not set | 996 | # CONFIG_USB_STORAGE_JUMPSHOT is not set |
997 | # CONFIG_USB_STORAGE_ALAUDA is not set | ||
998 | # CONFIG_USB_LIBUSUAL is not set | ||
942 | 999 | ||
943 | # | 1000 | # |
944 | # USB Input Devices | 1001 | # USB Input Devices |
945 | # | 1002 | # |
946 | CONFIG_USB_HID=m | 1003 | CONFIG_USB_HID=m |
947 | CONFIG_USB_HIDINPUT=y | 1004 | CONFIG_USB_HIDINPUT=y |
1005 | # CONFIG_USB_HIDINPUT_POWERBOOK is not set | ||
948 | # CONFIG_HID_FF is not set | 1006 | # CONFIG_HID_FF is not set |
949 | # CONFIG_USB_HIDDEV is not set | 1007 | # CONFIG_USB_HIDDEV is not set |
950 | 1008 | ||
@@ -964,6 +1022,7 @@ CONFIG_USB_HIDINPUT=y | |||
964 | # CONFIG_USB_YEALINK is not set | 1022 | # CONFIG_USB_YEALINK is not set |
965 | # CONFIG_USB_XPAD is not set | 1023 | # CONFIG_USB_XPAD is not set |
966 | # CONFIG_USB_ATI_REMOTE is not set | 1024 | # CONFIG_USB_ATI_REMOTE is not set |
1025 | # CONFIG_USB_ATI_REMOTE2 is not set | ||
967 | # CONFIG_USB_KEYSPAN_REMOTE is not set | 1026 | # CONFIG_USB_KEYSPAN_REMOTE is not set |
968 | # CONFIG_USB_APPLETOUCH is not set | 1027 | # CONFIG_USB_APPLETOUCH is not set |
969 | 1028 | ||
@@ -1043,6 +1102,7 @@ CONFIG_INFINIBAND_MTHCA=m | |||
1043 | # CONFIG_INFINIBAND_MTHCA_DEBUG is not set | 1102 | # CONFIG_INFINIBAND_MTHCA_DEBUG is not set |
1044 | CONFIG_INFINIBAND_IPOIB=m | 1103 | CONFIG_INFINIBAND_IPOIB=m |
1045 | # CONFIG_INFINIBAND_IPOIB_DEBUG is not set | 1104 | # CONFIG_INFINIBAND_IPOIB_DEBUG is not set |
1105 | # CONFIG_INFINIBAND_SRP is not set | ||
1046 | 1106 | ||
1047 | # | 1107 | # |
1048 | # SN Devices | 1108 | # SN Devices |
@@ -1051,6 +1111,10 @@ CONFIG_SGI_IOC4=y | |||
1051 | CONFIG_SGI_IOC3=y | 1111 | CONFIG_SGI_IOC3=y |
1052 | 1112 | ||
1053 | # | 1113 | # |
1114 | # EDAC - error detection and reporting (RAS) | ||
1115 | # | ||
1116 | |||
1117 | # | ||
1054 | # File systems | 1118 | # File systems |
1055 | # | 1119 | # |
1056 | CONFIG_EXT2_FS=y | 1120 | CONFIG_EXT2_FS=y |
@@ -1079,6 +1143,7 @@ CONFIG_XFS_EXPORT=y | |||
1079 | # CONFIG_XFS_SECURITY is not set | 1143 | # CONFIG_XFS_SECURITY is not set |
1080 | # CONFIG_XFS_POSIX_ACL is not set | 1144 | # CONFIG_XFS_POSIX_ACL is not set |
1081 | # CONFIG_XFS_RT is not set | 1145 | # CONFIG_XFS_RT is not set |
1146 | # CONFIG_OCFS2_FS is not set | ||
1082 | # CONFIG_MINIX_FS is not set | 1147 | # CONFIG_MINIX_FS is not set |
1083 | # CONFIG_ROMFS_FS is not set | 1148 | # CONFIG_ROMFS_FS is not set |
1084 | CONFIG_INOTIFY=y | 1149 | CONFIG_INOTIFY=y |
@@ -1120,6 +1185,7 @@ CONFIG_HUGETLBFS=y | |||
1120 | CONFIG_HUGETLB_PAGE=y | 1185 | CONFIG_HUGETLB_PAGE=y |
1121 | CONFIG_RAMFS=y | 1186 | CONFIG_RAMFS=y |
1122 | # CONFIG_RELAYFS_FS is not set | 1187 | # CONFIG_RELAYFS_FS is not set |
1188 | # CONFIG_CONFIGFS_FS is not set | ||
1123 | 1189 | ||
1124 | # | 1190 | # |
1125 | # Miscellaneous filesystems | 1191 | # Miscellaneous filesystems |
@@ -1189,6 +1255,7 @@ CONFIG_MSDOS_PARTITION=y | |||
1189 | CONFIG_SGI_PARTITION=y | 1255 | CONFIG_SGI_PARTITION=y |
1190 | # CONFIG_ULTRIX_PARTITION is not set | 1256 | # CONFIG_ULTRIX_PARTITION is not set |
1191 | # CONFIG_SUN_PARTITION is not set | 1257 | # CONFIG_SUN_PARTITION is not set |
1258 | # CONFIG_KARMA_PARTITION is not set | ||
1192 | CONFIG_EFI_PARTITION=y | 1259 | CONFIG_EFI_PARTITION=y |
1193 | 1260 | ||
1194 | # | 1261 | # |
@@ -1254,26 +1321,30 @@ CONFIG_GENERIC_PENDING_IRQ=y | |||
1254 | # CONFIG_HP_SIMSCSI is not set | 1321 | # CONFIG_HP_SIMSCSI is not set |
1255 | 1322 | ||
1256 | # | 1323 | # |
1257 | # Profiling support | 1324 | # Instrumentation Support |
1258 | # | 1325 | # |
1259 | # CONFIG_PROFILING is not set | 1326 | # CONFIG_PROFILING is not set |
1327 | # CONFIG_KPROBES is not set | ||
1260 | 1328 | ||
1261 | # | 1329 | # |
1262 | # Kernel hacking | 1330 | # Kernel hacking |
1263 | # | 1331 | # |
1264 | # CONFIG_PRINTK_TIME is not set | 1332 | # CONFIG_PRINTK_TIME is not set |
1265 | CONFIG_DEBUG_KERNEL=y | ||
1266 | CONFIG_MAGIC_SYSRQ=y | 1333 | CONFIG_MAGIC_SYSRQ=y |
1334 | CONFIG_DEBUG_KERNEL=y | ||
1267 | CONFIG_LOG_BUF_SHIFT=20 | 1335 | CONFIG_LOG_BUF_SHIFT=20 |
1268 | CONFIG_DETECT_SOFTLOCKUP=y | 1336 | CONFIG_DETECT_SOFTLOCKUP=y |
1269 | # CONFIG_SCHEDSTATS is not set | 1337 | # CONFIG_SCHEDSTATS is not set |
1270 | # CONFIG_DEBUG_SLAB is not set | 1338 | # CONFIG_DEBUG_SLAB is not set |
1339 | CONFIG_DEBUG_MUTEXES=y | ||
1271 | # CONFIG_DEBUG_SPINLOCK is not set | 1340 | # CONFIG_DEBUG_SPINLOCK is not set |
1272 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | 1341 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set |
1273 | # CONFIG_DEBUG_KOBJECT is not set | 1342 | # CONFIG_DEBUG_KOBJECT is not set |
1274 | # CONFIG_DEBUG_INFO is not set | 1343 | # CONFIG_DEBUG_INFO is not set |
1275 | # CONFIG_DEBUG_FS is not set | 1344 | # CONFIG_DEBUG_FS is not set |
1276 | # CONFIG_KPROBES is not set | 1345 | # CONFIG_DEBUG_VM is not set |
1346 | CONFIG_FORCED_INLINING=y | ||
1347 | # CONFIG_RCU_TORTURE_TEST is not set | ||
1277 | CONFIG_IA64_GRANULE_16MB=y | 1348 | CONFIG_IA64_GRANULE_16MB=y |
1278 | # CONFIG_IA64_GRANULE_64MB is not set | 1349 | # CONFIG_IA64_GRANULE_64MB is not set |
1279 | # CONFIG_IA64_PRINT_HAZARDS is not set | 1350 | # CONFIG_IA64_PRINT_HAZARDS is not set |
diff --git a/arch/ia64/configs/sim_defconfig b/arch/ia64/configs/sim_defconfig index a26781cfe8bf..d9146c31ea13 100644 --- a/arch/ia64/configs/sim_defconfig +++ b/arch/ia64/configs/sim_defconfig | |||
@@ -1,39 +1,52 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.16-rc5 | ||
4 | # Mon Feb 27 16:13:41 2006 | ||
3 | # | 5 | # |
4 | 6 | ||
5 | # | 7 | # |
6 | # Code maturity level options | 8 | # Code maturity level options |
7 | # | 9 | # |
8 | CONFIG_EXPERIMENTAL=y | 10 | CONFIG_EXPERIMENTAL=y |
9 | # CONFIG_CLEAN_COMPILE is not set | 11 | CONFIG_LOCK_KERNEL=y |
10 | # CONFIG_STANDALONE is not set | 12 | CONFIG_INIT_ENV_ARG_LIMIT=32 |
11 | CONFIG_BROKEN=y | ||
12 | CONFIG_BROKEN_ON_SMP=y | ||
13 | 13 | ||
14 | # | 14 | # |
15 | # General setup | 15 | # General setup |
16 | # | 16 | # |
17 | CONFIG_LOCALVERSION="" | ||
18 | CONFIG_LOCALVERSION_AUTO=y | ||
17 | CONFIG_SWAP=y | 19 | CONFIG_SWAP=y |
18 | CONFIG_SYSVIPC=y | 20 | CONFIG_SYSVIPC=y |
19 | # CONFIG_POSIX_MQUEUE is not set | 21 | # CONFIG_POSIX_MQUEUE is not set |
20 | # CONFIG_BSD_PROCESS_ACCT is not set | 22 | # CONFIG_BSD_PROCESS_ACCT is not set |
21 | CONFIG_SYSCTL=y | 23 | CONFIG_SYSCTL=y |
22 | # CONFIG_AUDIT is not set | 24 | # CONFIG_AUDIT is not set |
23 | CONFIG_LOG_BUF_SHIFT=16 | ||
24 | # CONFIG_HOTPLUG is not set | ||
25 | CONFIG_IKCONFIG=y | 25 | CONFIG_IKCONFIG=y |
26 | CONFIG_IKCONFIG_PROC=y | 26 | CONFIG_IKCONFIG_PROC=y |
27 | # CONFIG_CPUSETS is not set | ||
28 | CONFIG_INITRAMFS_SOURCE="" | ||
29 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | ||
27 | # CONFIG_EMBEDDED is not set | 30 | # CONFIG_EMBEDDED is not set |
28 | CONFIG_KALLSYMS=y | 31 | CONFIG_KALLSYMS=y |
29 | # CONFIG_KALLSYMS_ALL is not set | 32 | # CONFIG_KALLSYMS_ALL is not set |
33 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | ||
34 | CONFIG_HOTPLUG=y | ||
35 | CONFIG_PRINTK=y | ||
36 | CONFIG_BUG=y | ||
37 | CONFIG_ELF_CORE=y | ||
38 | CONFIG_BASE_FULL=y | ||
30 | CONFIG_FUTEX=y | 39 | CONFIG_FUTEX=y |
31 | CONFIG_EPOLL=y | 40 | CONFIG_EPOLL=y |
32 | CONFIG_IOSCHED_NOOP=y | 41 | CONFIG_SHMEM=y |
33 | CONFIG_IOSCHED_AS=y | 42 | CONFIG_CC_ALIGN_FUNCTIONS=0 |
34 | CONFIG_IOSCHED_DEADLINE=y | 43 | CONFIG_CC_ALIGN_LABELS=0 |
35 | CONFIG_IOSCHED_CFQ=y | 44 | CONFIG_CC_ALIGN_LOOPS=0 |
36 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 45 | CONFIG_CC_ALIGN_JUMPS=0 |
46 | CONFIG_SLAB=y | ||
47 | # CONFIG_TINY_SHMEM is not set | ||
48 | CONFIG_BASE_SMALL=0 | ||
49 | # CONFIG_SLOB is not set | ||
37 | 50 | ||
38 | # | 51 | # |
39 | # Loadable module support | 52 | # Loadable module support |
@@ -43,21 +56,45 @@ CONFIG_MODULE_UNLOAD=y | |||
43 | CONFIG_MODULE_FORCE_UNLOAD=y | 56 | CONFIG_MODULE_FORCE_UNLOAD=y |
44 | CONFIG_OBSOLETE_MODPARM=y | 57 | CONFIG_OBSOLETE_MODPARM=y |
45 | CONFIG_MODVERSIONS=y | 58 | CONFIG_MODVERSIONS=y |
59 | # CONFIG_MODULE_SRCVERSION_ALL is not set | ||
46 | CONFIG_KMOD=y | 60 | CONFIG_KMOD=y |
47 | CONFIG_STOP_MACHINE=y | 61 | CONFIG_STOP_MACHINE=y |
48 | 62 | ||
49 | # | 63 | # |
64 | # Block layer | ||
65 | # | ||
66 | |||
67 | # | ||
68 | # IO Schedulers | ||
69 | # | ||
70 | CONFIG_IOSCHED_NOOP=y | ||
71 | CONFIG_IOSCHED_AS=y | ||
72 | CONFIG_IOSCHED_DEADLINE=y | ||
73 | CONFIG_IOSCHED_CFQ=y | ||
74 | CONFIG_DEFAULT_AS=y | ||
75 | # CONFIG_DEFAULT_DEADLINE is not set | ||
76 | # CONFIG_DEFAULT_CFQ is not set | ||
77 | # CONFIG_DEFAULT_NOOP is not set | ||
78 | CONFIG_DEFAULT_IOSCHED="anticipatory" | ||
79 | |||
80 | # | ||
50 | # Processor type and features | 81 | # Processor type and features |
51 | # | 82 | # |
52 | CONFIG_IA64=y | 83 | CONFIG_IA64=y |
53 | CONFIG_64BIT=y | 84 | CONFIG_64BIT=y |
54 | CONFIG_MMU=y | 85 | CONFIG_MMU=y |
86 | CONFIG_SWIOTLB=y | ||
55 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | 87 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y |
88 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
56 | CONFIG_TIME_INTERPOLATION=y | 89 | CONFIG_TIME_INTERPOLATION=y |
57 | CONFIG_EFI=y | 90 | CONFIG_EFI=y |
91 | CONFIG_GENERIC_IOMAP=y | ||
92 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | ||
93 | CONFIG_DMA_IS_DMA32=y | ||
58 | # CONFIG_IA64_GENERIC is not set | 94 | # CONFIG_IA64_GENERIC is not set |
59 | # CONFIG_IA64_DIG is not set | 95 | # CONFIG_IA64_DIG is not set |
60 | # CONFIG_IA64_HP_ZX1 is not set | 96 | # CONFIG_IA64_HP_ZX1 is not set |
97 | # CONFIG_IA64_HP_ZX1_SWIOTLB is not set | ||
61 | # CONFIG_IA64_SGI_SN2 is not set | 98 | # CONFIG_IA64_SGI_SN2 is not set |
62 | CONFIG_IA64_HP_SIM=y | 99 | CONFIG_IA64_HP_SIM=y |
63 | # CONFIG_ITANIUM is not set | 100 | # CONFIG_ITANIUM is not set |
@@ -66,17 +103,36 @@ CONFIG_MCKINLEY=y | |||
66 | # CONFIG_IA64_PAGE_SIZE_8KB is not set | 103 | # CONFIG_IA64_PAGE_SIZE_8KB is not set |
67 | # CONFIG_IA64_PAGE_SIZE_16KB is not set | 104 | # CONFIG_IA64_PAGE_SIZE_16KB is not set |
68 | CONFIG_IA64_PAGE_SIZE_64KB=y | 105 | CONFIG_IA64_PAGE_SIZE_64KB=y |
106 | CONFIG_PGTABLE_3=y | ||
107 | # CONFIG_PGTABLE_4 is not set | ||
108 | # CONFIG_HZ_100 is not set | ||
109 | CONFIG_HZ_250=y | ||
110 | # CONFIG_HZ_1000 is not set | ||
111 | CONFIG_HZ=250 | ||
69 | CONFIG_IA64_L1_CACHE_SHIFT=7 | 112 | CONFIG_IA64_L1_CACHE_SHIFT=7 |
70 | # CONFIG_MCKINLEY_ASTEP_SPECIFIC is not set | ||
71 | # CONFIG_VIRTUAL_MEM_MAP is not set | ||
72 | # CONFIG_IA64_CYCLONE is not set | 113 | # CONFIG_IA64_CYCLONE is not set |
73 | CONFIG_FORCE_MAX_ZONEORDER=18 | 114 | CONFIG_FORCE_MAX_ZONEORDER=17 |
74 | CONFIG_SMP=y | 115 | CONFIG_SMP=y |
75 | CONFIG_NR_CPUS=64 | 116 | CONFIG_NR_CPUS=64 |
117 | # CONFIG_HOTPLUG_CPU is not set | ||
118 | # CONFIG_SCHED_SMT is not set | ||
76 | CONFIG_PREEMPT=y | 119 | CONFIG_PREEMPT=y |
77 | CONFIG_HAVE_DEC_LOCK=y | 120 | CONFIG_SELECT_MEMORY_MODEL=y |
121 | CONFIG_FLATMEM_MANUAL=y | ||
122 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
123 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
124 | CONFIG_FLATMEM=y | ||
125 | CONFIG_FLAT_NODE_MEM_MAP=y | ||
126 | # CONFIG_SPARSEMEM_STATIC is not set | ||
127 | CONFIG_SPLIT_PTLOCK_CPUS=4 | ||
128 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | ||
129 | CONFIG_ARCH_DISCONTIGMEM_ENABLE=y | ||
130 | CONFIG_ARCH_FLATMEM_ENABLE=y | ||
131 | CONFIG_ARCH_SPARSEMEM_ENABLE=y | ||
132 | # CONFIG_VIRTUAL_MEM_MAP is not set | ||
78 | CONFIG_IA32_SUPPORT=y | 133 | CONFIG_IA32_SUPPORT=y |
79 | CONFIG_COMPAT=y | 134 | CONFIG_COMPAT=y |
135 | # CONFIG_IA64_MCA_RECOVERY is not set | ||
80 | # CONFIG_PERFMON is not set | 136 | # CONFIG_PERFMON is not set |
81 | CONFIG_IA64_PALINFO=m | 137 | CONFIG_IA64_PALINFO=m |
82 | 138 | ||
@@ -84,7 +140,6 @@ CONFIG_IA64_PALINFO=m | |||
84 | # Firmware Drivers | 140 | # Firmware Drivers |
85 | # | 141 | # |
86 | CONFIG_EFI_VARS=y | 142 | CONFIG_EFI_VARS=y |
87 | # CONFIG_SMBIOS is not set | ||
88 | CONFIG_BINFMT_ELF=y | 143 | CONFIG_BINFMT_ELF=y |
89 | CONFIG_BINFMT_MISC=y | 144 | CONFIG_BINFMT_MISC=y |
90 | 145 | ||
@@ -93,15 +148,98 @@ CONFIG_BINFMT_MISC=y | |||
93 | # | 148 | # |
94 | 149 | ||
95 | # | 150 | # |
151 | # Networking | ||
152 | # | ||
153 | CONFIG_NET=y | ||
154 | |||
155 | # | ||
156 | # Networking options | ||
157 | # | ||
158 | # CONFIG_NETDEBUG is not set | ||
159 | CONFIG_PACKET=y | ||
160 | # CONFIG_PACKET_MMAP is not set | ||
161 | # CONFIG_UNIX is not set | ||
162 | # CONFIG_NET_KEY is not set | ||
163 | CONFIG_INET=y | ||
164 | CONFIG_IP_MULTICAST=y | ||
165 | # CONFIG_IP_ADVANCED_ROUTER is not set | ||
166 | CONFIG_IP_FIB_HASH=y | ||
167 | # CONFIG_IP_PNP is not set | ||
168 | # CONFIG_NET_IPIP is not set | ||
169 | # CONFIG_NET_IPGRE is not set | ||
170 | # CONFIG_IP_MROUTE is not set | ||
171 | # CONFIG_ARPD is not set | ||
172 | # CONFIG_SYN_COOKIES is not set | ||
173 | # CONFIG_INET_AH is not set | ||
174 | # CONFIG_INET_ESP is not set | ||
175 | # CONFIG_INET_IPCOMP is not set | ||
176 | # CONFIG_INET_TUNNEL is not set | ||
177 | CONFIG_INET_DIAG=y | ||
178 | CONFIG_INET_TCP_DIAG=y | ||
179 | # CONFIG_TCP_CONG_ADVANCED is not set | ||
180 | CONFIG_TCP_CONG_BIC=y | ||
181 | # CONFIG_IPV6 is not set | ||
182 | # CONFIG_NETFILTER is not set | ||
183 | |||
184 | # | ||
185 | # DCCP Configuration (EXPERIMENTAL) | ||
186 | # | ||
187 | # CONFIG_IP_DCCP is not set | ||
188 | |||
189 | # | ||
190 | # SCTP Configuration (EXPERIMENTAL) | ||
191 | # | ||
192 | # CONFIG_IP_SCTP is not set | ||
193 | |||
194 | # | ||
195 | # TIPC Configuration (EXPERIMENTAL) | ||
196 | # | ||
197 | # CONFIG_TIPC is not set | ||
198 | # CONFIG_ATM is not set | ||
199 | # CONFIG_BRIDGE is not set | ||
200 | # CONFIG_VLAN_8021Q is not set | ||
201 | # CONFIG_DECNET is not set | ||
202 | # CONFIG_LLC2 is not set | ||
203 | # CONFIG_IPX is not set | ||
204 | # CONFIG_ATALK is not set | ||
205 | # CONFIG_X25 is not set | ||
206 | # CONFIG_LAPB is not set | ||
207 | # CONFIG_NET_DIVERT is not set | ||
208 | # CONFIG_ECONET is not set | ||
209 | # CONFIG_WAN_ROUTER is not set | ||
210 | |||
211 | # | ||
212 | # QoS and/or fair queueing | ||
213 | # | ||
214 | # CONFIG_NET_SCHED is not set | ||
215 | |||
216 | # | ||
217 | # Network testing | ||
218 | # | ||
219 | # CONFIG_NET_PKTGEN is not set | ||
220 | # CONFIG_HAMRADIO is not set | ||
221 | # CONFIG_IRDA is not set | ||
222 | # CONFIG_BT is not set | ||
223 | # CONFIG_IEEE80211 is not set | ||
224 | |||
225 | # | ||
96 | # Device Drivers | 226 | # Device Drivers |
97 | # | 227 | # |
98 | 228 | ||
99 | # | 229 | # |
100 | # Generic Driver Options | 230 | # Generic Driver Options |
101 | # | 231 | # |
232 | # CONFIG_STANDALONE is not set | ||
233 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
234 | # CONFIG_FW_LOADER is not set | ||
102 | # CONFIG_DEBUG_DRIVER is not set | 235 | # CONFIG_DEBUG_DRIVER is not set |
103 | 236 | ||
104 | # | 237 | # |
238 | # Connector - unified userspace <-> kernelspace linker | ||
239 | # | ||
240 | # CONFIG_CONNECTOR is not set | ||
241 | |||
242 | # | ||
105 | # Memory Technology Devices (MTD) | 243 | # Memory Technology Devices (MTD) |
106 | # | 244 | # |
107 | # CONFIG_MTD is not set | 245 | # CONFIG_MTD is not set |
@@ -118,12 +256,16 @@ CONFIG_BINFMT_MISC=y | |||
118 | # | 256 | # |
119 | # Block devices | 257 | # Block devices |
120 | # | 258 | # |
259 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
121 | CONFIG_BLK_DEV_LOOP=y | 260 | CONFIG_BLK_DEV_LOOP=y |
122 | # CONFIG_BLK_DEV_CRYPTOLOOP is not set | 261 | # CONFIG_BLK_DEV_CRYPTOLOOP is not set |
123 | # CONFIG_BLK_DEV_NBD is not set | 262 | # CONFIG_BLK_DEV_NBD is not set |
124 | CONFIG_BLK_DEV_RAM=y | 263 | CONFIG_BLK_DEV_RAM=y |
264 | CONFIG_BLK_DEV_RAM_COUNT=16 | ||
125 | CONFIG_BLK_DEV_RAM_SIZE=4096 | 265 | CONFIG_BLK_DEV_RAM_SIZE=4096 |
126 | # CONFIG_BLK_DEV_INITRD is not set | 266 | # CONFIG_BLK_DEV_INITRD is not set |
267 | # CONFIG_CDROM_PKTCDVD is not set | ||
268 | # CONFIG_ATA_OVER_ETH is not set | ||
127 | 269 | ||
128 | # | 270 | # |
129 | # ATA/ATAPI/MFM/RLL support | 271 | # ATA/ATAPI/MFM/RLL support |
@@ -133,6 +275,7 @@ CONFIG_BLK_DEV_RAM_SIZE=4096 | |||
133 | # | 275 | # |
134 | # SCSI device support | 276 | # SCSI device support |
135 | # | 277 | # |
278 | # CONFIG_RAID_ATTRS is not set | ||
136 | CONFIG_SCSI=y | 279 | CONFIG_SCSI=y |
137 | CONFIG_SCSI_PROC_FS=y | 280 | CONFIG_SCSI_PROC_FS=y |
138 | 281 | ||
@@ -144,6 +287,7 @@ CONFIG_BLK_DEV_SD=y | |||
144 | # CONFIG_CHR_DEV_OSST is not set | 287 | # CONFIG_CHR_DEV_OSST is not set |
145 | # CONFIG_BLK_DEV_SR is not set | 288 | # CONFIG_BLK_DEV_SR is not set |
146 | # CONFIG_CHR_DEV_SG is not set | 289 | # CONFIG_CHR_DEV_SG is not set |
290 | # CONFIG_CHR_DEV_SCH is not set | ||
147 | 291 | ||
148 | # | 292 | # |
149 | # Some SCSI devices (e.g. CD jukebox) support multiple LUNs | 293 | # Some SCSI devices (e.g. CD jukebox) support multiple LUNs |
@@ -157,13 +301,14 @@ CONFIG_SCSI_LOGGING=y | |||
157 | # | 301 | # |
158 | CONFIG_SCSI_SPI_ATTRS=y | 302 | CONFIG_SCSI_SPI_ATTRS=y |
159 | # CONFIG_SCSI_FC_ATTRS is not set | 303 | # CONFIG_SCSI_FC_ATTRS is not set |
304 | # CONFIG_SCSI_ISCSI_ATTRS is not set | ||
305 | # CONFIG_SCSI_SAS_ATTRS is not set | ||
160 | 306 | ||
161 | # | 307 | # |
162 | # SCSI low-level drivers | 308 | # SCSI low-level drivers |
163 | # | 309 | # |
164 | # CONFIG_SCSI_AIC7XXX_OLD is not set | 310 | # CONFIG_ISCSI_TCP is not set |
165 | # CONFIG_SCSI_SATA is not set | 311 | # CONFIG_SCSI_SATA is not set |
166 | # CONFIG_SCSI_EATA_PIO is not set | ||
167 | # CONFIG_SCSI_DEBUG is not set | 312 | # CONFIG_SCSI_DEBUG is not set |
168 | 313 | ||
169 | # | 314 | # |
@@ -174,77 +319,47 @@ CONFIG_SCSI_SPI_ATTRS=y | |||
174 | # | 319 | # |
175 | # Fusion MPT device support | 320 | # Fusion MPT device support |
176 | # | 321 | # |
322 | # CONFIG_FUSION is not set | ||
177 | 323 | ||
178 | # | 324 | # |
179 | # IEEE 1394 (FireWire) support | 325 | # IEEE 1394 (FireWire) support |
180 | # | 326 | # |
181 | # CONFIG_IEEE1394 is not set | ||
182 | 327 | ||
183 | # | 328 | # |
184 | # I2O device support | 329 | # I2O device support |
185 | # | 330 | # |
186 | 331 | ||
187 | # | 332 | # |
188 | # Networking support | 333 | # Network device support |
189 | # | 334 | # |
190 | CONFIG_NET=y | 335 | # CONFIG_NETDEVICES is not set |
336 | # CONFIG_DUMMY is not set | ||
337 | # CONFIG_BONDING is not set | ||
338 | # CONFIG_EQUALIZER is not set | ||
339 | # CONFIG_TUN is not set | ||
191 | 340 | ||
192 | # | 341 | # |
193 | # Networking options | 342 | # PHY device support |
194 | # | 343 | # |
195 | CONFIG_PACKET=y | ||
196 | # CONFIG_PACKET_MMAP is not set | ||
197 | # CONFIG_NETLINK_DEV is not set | ||
198 | # CONFIG_UNIX is not set | ||
199 | # CONFIG_NET_KEY is not set | ||
200 | CONFIG_INET=y | ||
201 | CONFIG_IP_MULTICAST=y | ||
202 | # CONFIG_IP_ADVANCED_ROUTER is not set | ||
203 | # CONFIG_IP_PNP is not set | ||
204 | # CONFIG_NET_IPIP is not set | ||
205 | # CONFIG_NET_IPGRE is not set | ||
206 | # CONFIG_IP_MROUTE is not set | ||
207 | # CONFIG_ARPD is not set | ||
208 | # CONFIG_SYN_COOKIES is not set | ||
209 | # CONFIG_INET_AH is not set | ||
210 | # CONFIG_INET_ESP is not set | ||
211 | # CONFIG_INET_IPCOMP is not set | ||
212 | # CONFIG_IPV6 is not set | ||
213 | # CONFIG_NETFILTER is not set | ||
214 | 344 | ||
215 | # | 345 | # |
216 | # SCTP Configuration (EXPERIMENTAL) | 346 | # Ethernet (10 or 100Mbit) |
217 | # | 347 | # |
218 | # CONFIG_IP_SCTP is not set | 348 | # CONFIG_NET_ETHERNET is not set |
219 | # CONFIG_ATM is not set | ||
220 | # CONFIG_BRIDGE is not set | ||
221 | # CONFIG_VLAN_8021Q is not set | ||
222 | # CONFIG_DECNET is not set | ||
223 | # CONFIG_LLC2 is not set | ||
224 | # CONFIG_IPX is not set | ||
225 | # CONFIG_ATALK is not set | ||
226 | # CONFIG_X25 is not set | ||
227 | # CONFIG_LAPB is not set | ||
228 | # CONFIG_NET_DIVERT is not set | ||
229 | # CONFIG_ECONET is not set | ||
230 | # CONFIG_WAN_ROUTER is not set | ||
231 | # CONFIG_NET_HW_FLOWCONTROL is not set | ||
232 | 349 | ||
233 | # | 350 | # |
234 | # QoS and/or fair queueing | 351 | # Ethernet (1000 Mbit) |
235 | # | 352 | # |
236 | # CONFIG_NET_SCHED is not set | ||
237 | 353 | ||
238 | # | 354 | # |
239 | # Network testing | 355 | # Ethernet (10000 Mbit) |
240 | # | 356 | # |
241 | # CONFIG_NET_PKTGEN is not set | 357 | # CONFIG_PPP is not set |
358 | # CONFIG_SLIP is not set | ||
359 | # CONFIG_SHAPER is not set | ||
360 | # CONFIG_NETCONSOLE is not set | ||
242 | # CONFIG_NETPOLL is not set | 361 | # CONFIG_NETPOLL is not set |
243 | # CONFIG_NET_POLL_CONTROLLER is not set | 362 | # CONFIG_NET_POLL_CONTROLLER is not set |
244 | # CONFIG_HAMRADIO is not set | ||
245 | # CONFIG_IRDA is not set | ||
246 | # CONFIG_BT is not set | ||
247 | # CONFIG_NETDEVICES is not set | ||
248 | 363 | ||
249 | # | 364 | # |
250 | # ISDN subsystem | 365 | # ISDN subsystem |
@@ -274,16 +389,6 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | |||
274 | # CONFIG_INPUT_EVBUG is not set | 389 | # CONFIG_INPUT_EVBUG is not set |
275 | 390 | ||
276 | # | 391 | # |
277 | # Input I/O drivers | ||
278 | # | ||
279 | # CONFIG_GAMEPORT is not set | ||
280 | CONFIG_SOUND_GAMEPORT=y | ||
281 | CONFIG_SERIO=y | ||
282 | # CONFIG_SERIO_I8042 is not set | ||
283 | CONFIG_SERIO_SERPORT=y | ||
284 | # CONFIG_SERIO_CT82C710 is not set | ||
285 | |||
286 | # | ||
287 | # Input Device Drivers | 392 | # Input Device Drivers |
288 | # | 393 | # |
289 | # CONFIG_INPUT_KEYBOARD is not set | 394 | # CONFIG_INPUT_KEYBOARD is not set |
@@ -293,6 +398,15 @@ CONFIG_SERIO_SERPORT=y | |||
293 | # CONFIG_INPUT_MISC is not set | 398 | # CONFIG_INPUT_MISC is not set |
294 | 399 | ||
295 | # | 400 | # |
401 | # Hardware I/O ports | ||
402 | # | ||
403 | CONFIG_SERIO=y | ||
404 | # CONFIG_SERIO_I8042 is not set | ||
405 | CONFIG_SERIO_SERPORT=y | ||
406 | # CONFIG_SERIO_RAW is not set | ||
407 | # CONFIG_GAMEPORT is not set | ||
408 | |||
409 | # | ||
296 | # Character devices | 410 | # Character devices |
297 | # | 411 | # |
298 | CONFIG_VT=y | 412 | CONFIG_VT=y |
@@ -310,7 +424,6 @@ CONFIG_HW_CONSOLE=y | |||
310 | # | 424 | # |
311 | CONFIG_UNIX98_PTYS=y | 425 | CONFIG_UNIX98_PTYS=y |
312 | # CONFIG_LEGACY_PTYS is not set | 426 | # CONFIG_LEGACY_PTYS is not set |
313 | # CONFIG_QIC02_TAPE is not set | ||
314 | 427 | ||
315 | # | 428 | # |
316 | # IPMI | 429 | # IPMI |
@@ -324,15 +437,19 @@ CONFIG_UNIX98_PTYS=y | |||
324 | CONFIG_EFI_RTC=y | 437 | CONFIG_EFI_RTC=y |
325 | # CONFIG_DTLK is not set | 438 | # CONFIG_DTLK is not set |
326 | # CONFIG_R3964 is not set | 439 | # CONFIG_R3964 is not set |
327 | # CONFIG_APPLICOM is not set | ||
328 | 440 | ||
329 | # | 441 | # |
330 | # Ftape, the floppy tape device driver | 442 | # Ftape, the floppy tape device driver |
331 | # | 443 | # |
332 | # CONFIG_FTAPE is not set | ||
333 | # CONFIG_AGP is not set | 444 | # CONFIG_AGP is not set |
334 | # CONFIG_DRM is not set | ||
335 | # CONFIG_RAW_DRIVER is not set | 445 | # CONFIG_RAW_DRIVER is not set |
446 | # CONFIG_HANGCHECK_TIMER is not set | ||
447 | |||
448 | # | ||
449 | # TPM devices | ||
450 | # | ||
451 | # CONFIG_TCG_TPM is not set | ||
452 | # CONFIG_TELCLOCK is not set | ||
336 | 453 | ||
337 | # | 454 | # |
338 | # I2C support | 455 | # I2C support |
@@ -340,10 +457,33 @@ CONFIG_EFI_RTC=y | |||
340 | # CONFIG_I2C is not set | 457 | # CONFIG_I2C is not set |
341 | 458 | ||
342 | # | 459 | # |
460 | # SPI support | ||
461 | # | ||
462 | # CONFIG_SPI is not set | ||
463 | # CONFIG_SPI_MASTER is not set | ||
464 | |||
465 | # | ||
466 | # Dallas's 1-wire bus | ||
467 | # | ||
468 | # CONFIG_W1 is not set | ||
469 | |||
470 | # | ||
471 | # Hardware Monitoring support | ||
472 | # | ||
473 | CONFIG_HWMON=y | ||
474 | # CONFIG_HWMON_VID is not set | ||
475 | # CONFIG_SENSORS_F71805F is not set | ||
476 | # CONFIG_HWMON_DEBUG_CHIP is not set | ||
477 | |||
478 | # | ||
343 | # Misc devices | 479 | # Misc devices |
344 | # | 480 | # |
345 | 481 | ||
346 | # | 482 | # |
483 | # Multimedia Capabilities Port drivers | ||
484 | # | ||
485 | |||
486 | # | ||
347 | # Multimedia devices | 487 | # Multimedia devices |
348 | # | 488 | # |
349 | # CONFIG_VIDEO_DEV is not set | 489 | # CONFIG_VIDEO_DEV is not set |
@@ -362,7 +502,6 @@ CONFIG_EFI_RTC=y | |||
362 | # Console display driver support | 502 | # Console display driver support |
363 | # | 503 | # |
364 | # CONFIG_VGA_CONSOLE is not set | 504 | # CONFIG_VGA_CONSOLE is not set |
365 | # CONFIG_MDA_CONSOLE is not set | ||
366 | CONFIG_DUMMY_CONSOLE=y | 505 | CONFIG_DUMMY_CONSOLE=y |
367 | 506 | ||
368 | # | 507 | # |
@@ -373,6 +512,12 @@ CONFIG_DUMMY_CONSOLE=y | |||
373 | # | 512 | # |
374 | # USB support | 513 | # USB support |
375 | # | 514 | # |
515 | # CONFIG_USB_ARCH_HAS_HCD is not set | ||
516 | # CONFIG_USB_ARCH_HAS_OHCI is not set | ||
517 | |||
518 | # | ||
519 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | ||
520 | # | ||
376 | 521 | ||
377 | # | 522 | # |
378 | # USB Gadget Support | 523 | # USB Gadget Support |
@@ -380,22 +525,41 @@ CONFIG_DUMMY_CONSOLE=y | |||
380 | # CONFIG_USB_GADGET is not set | 525 | # CONFIG_USB_GADGET is not set |
381 | 526 | ||
382 | # | 527 | # |
528 | # MMC/SD Card support | ||
529 | # | ||
530 | # CONFIG_MMC is not set | ||
531 | |||
532 | # | ||
533 | # InfiniBand support | ||
534 | # | ||
535 | |||
536 | # | ||
537 | # EDAC - error detection and reporting (RAS) | ||
538 | # | ||
539 | |||
540 | # | ||
383 | # File systems | 541 | # File systems |
384 | # | 542 | # |
385 | CONFIG_EXT2_FS=y | 543 | CONFIG_EXT2_FS=y |
386 | # CONFIG_EXT2_FS_XATTR is not set | 544 | # CONFIG_EXT2_FS_XATTR is not set |
545 | # CONFIG_EXT2_FS_XIP is not set | ||
387 | CONFIG_EXT3_FS=y | 546 | CONFIG_EXT3_FS=y |
388 | # CONFIG_EXT3_FS_XATTR is not set | 547 | # CONFIG_EXT3_FS_XATTR is not set |
389 | CONFIG_JBD=y | 548 | CONFIG_JBD=y |
390 | # CONFIG_JBD_DEBUG is not set | 549 | # CONFIG_JBD_DEBUG is not set |
391 | # CONFIG_REISERFS_FS is not set | 550 | # CONFIG_REISERFS_FS is not set |
392 | # CONFIG_JFS_FS is not set | 551 | # CONFIG_JFS_FS is not set |
552 | # CONFIG_FS_POSIX_ACL is not set | ||
393 | # CONFIG_XFS_FS is not set | 553 | # CONFIG_XFS_FS is not set |
554 | # CONFIG_OCFS2_FS is not set | ||
394 | # CONFIG_MINIX_FS is not set | 555 | # CONFIG_MINIX_FS is not set |
395 | # CONFIG_ROMFS_FS is not set | 556 | # CONFIG_ROMFS_FS is not set |
557 | CONFIG_INOTIFY=y | ||
396 | # CONFIG_QUOTA is not set | 558 | # CONFIG_QUOTA is not set |
559 | CONFIG_DNOTIFY=y | ||
397 | # CONFIG_AUTOFS_FS is not set | 560 | # CONFIG_AUTOFS_FS is not set |
398 | # CONFIG_AUTOFS4_FS is not set | 561 | # CONFIG_AUTOFS4_FS is not set |
562 | # CONFIG_FUSE_FS is not set | ||
399 | 563 | ||
400 | # | 564 | # |
401 | # CD-ROM/DVD Filesystems | 565 | # CD-ROM/DVD Filesystems |
@@ -406,7 +570,8 @@ CONFIG_JBD=y | |||
406 | # | 570 | # |
407 | # DOS/FAT/NT Filesystems | 571 | # DOS/FAT/NT Filesystems |
408 | # | 572 | # |
409 | # CONFIG_FAT_FS is not set | 573 | # CONFIG_MSDOS_FS is not set |
574 | # CONFIG_VFAT_FS is not set | ||
410 | # CONFIG_NTFS_FS is not set | 575 | # CONFIG_NTFS_FS is not set |
411 | 576 | ||
412 | # | 577 | # |
@@ -415,12 +580,12 @@ CONFIG_JBD=y | |||
415 | CONFIG_PROC_FS=y | 580 | CONFIG_PROC_FS=y |
416 | CONFIG_PROC_KCORE=y | 581 | CONFIG_PROC_KCORE=y |
417 | CONFIG_SYSFS=y | 582 | CONFIG_SYSFS=y |
418 | # CONFIG_DEVFS_FS is not set | ||
419 | # CONFIG_DEVPTS_FS_XATTR is not set | ||
420 | # CONFIG_TMPFS is not set | 583 | # CONFIG_TMPFS is not set |
421 | CONFIG_HUGETLBFS=y | 584 | CONFIG_HUGETLBFS=y |
422 | CONFIG_HUGETLB_PAGE=y | 585 | CONFIG_HUGETLB_PAGE=y |
423 | CONFIG_RAMFS=y | 586 | CONFIG_RAMFS=y |
587 | # CONFIG_RELAYFS_FS is not set | ||
588 | # CONFIG_CONFIGFS_FS is not set | ||
424 | 589 | ||
425 | # | 590 | # |
426 | # Miscellaneous filesystems | 591 | # Miscellaneous filesystems |
@@ -448,18 +613,22 @@ CONFIG_NFS_FS=y | |||
448 | CONFIG_NFS_DIRECTIO=y | 613 | CONFIG_NFS_DIRECTIO=y |
449 | CONFIG_NFSD=y | 614 | CONFIG_NFSD=y |
450 | CONFIG_NFSD_V3=y | 615 | CONFIG_NFSD_V3=y |
616 | # CONFIG_NFSD_V3_ACL is not set | ||
451 | # CONFIG_NFSD_V4 is not set | 617 | # CONFIG_NFSD_V4 is not set |
452 | # CONFIG_NFSD_TCP is not set | 618 | # CONFIG_NFSD_TCP is not set |
453 | CONFIG_LOCKD=y | 619 | CONFIG_LOCKD=y |
454 | CONFIG_LOCKD_V4=y | 620 | CONFIG_LOCKD_V4=y |
455 | CONFIG_EXPORTFS=y | 621 | CONFIG_EXPORTFS=y |
622 | CONFIG_NFS_COMMON=y | ||
456 | CONFIG_SUNRPC=y | 623 | CONFIG_SUNRPC=y |
457 | # CONFIG_RPCSEC_GSS_KRB5 is not set | 624 | # CONFIG_RPCSEC_GSS_KRB5 is not set |
625 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | ||
458 | # CONFIG_SMB_FS is not set | 626 | # CONFIG_SMB_FS is not set |
459 | # CONFIG_CIFS is not set | 627 | # CONFIG_CIFS is not set |
460 | # CONFIG_NCP_FS is not set | 628 | # CONFIG_NCP_FS is not set |
461 | # CONFIG_CODA_FS is not set | 629 | # CONFIG_CODA_FS is not set |
462 | # CONFIG_AFS_FS is not set | 630 | # CONFIG_AFS_FS is not set |
631 | # CONFIG_9P_FS is not set | ||
463 | 632 | ||
464 | # | 633 | # |
465 | # Partition Types | 634 | # Partition Types |
@@ -476,10 +645,10 @@ CONFIG_MSDOS_PARTITION=y | |||
476 | # CONFIG_SOLARIS_X86_PARTITION is not set | 645 | # CONFIG_SOLARIS_X86_PARTITION is not set |
477 | # CONFIG_UNIXWARE_DISKLABEL is not set | 646 | # CONFIG_UNIXWARE_DISKLABEL is not set |
478 | # CONFIG_LDM_PARTITION is not set | 647 | # CONFIG_LDM_PARTITION is not set |
479 | # CONFIG_NEC98_PARTITION is not set | ||
480 | # CONFIG_SGI_PARTITION is not set | 648 | # CONFIG_SGI_PARTITION is not set |
481 | # CONFIG_ULTRIX_PARTITION is not set | 649 | # CONFIG_ULTRIX_PARTITION is not set |
482 | # CONFIG_SUN_PARTITION is not set | 650 | # CONFIG_SUN_PARTITION is not set |
651 | # CONFIG_KARMA_PARTITION is not set | ||
483 | CONFIG_EFI_PARTITION=y | 652 | CONFIG_EFI_PARTITION=y |
484 | 653 | ||
485 | # | 654 | # |
@@ -490,8 +659,13 @@ CONFIG_EFI_PARTITION=y | |||
490 | # | 659 | # |
491 | # Library routines | 660 | # Library routines |
492 | # | 661 | # |
662 | # CONFIG_CRC_CCITT is not set | ||
663 | # CONFIG_CRC16 is not set | ||
493 | CONFIG_CRC32=y | 664 | CONFIG_CRC32=y |
494 | # CONFIG_LIBCRC32C is not set | 665 | # CONFIG_LIBCRC32C is not set |
666 | CONFIG_GENERIC_HARDIRQS=y | ||
667 | CONFIG_GENERIC_IRQ_PROBE=y | ||
668 | CONFIG_GENERIC_PENDING_IRQ=y | ||
495 | 669 | ||
496 | # | 670 | # |
497 | # HP Simulator drivers | 671 | # HP Simulator drivers |
@@ -502,33 +676,50 @@ CONFIG_HP_SIMSERIAL_CONSOLE=y | |||
502 | CONFIG_HP_SIMSCSI=y | 676 | CONFIG_HP_SIMSCSI=y |
503 | 677 | ||
504 | # | 678 | # |
505 | # Profiling support | 679 | # Instrumentation Support |
506 | # | 680 | # |
507 | # CONFIG_PROFILING is not set | 681 | # CONFIG_PROFILING is not set |
682 | # CONFIG_KPROBES is not set | ||
508 | 683 | ||
509 | # | 684 | # |
510 | # Kernel hacking | 685 | # Kernel hacking |
511 | # | 686 | # |
512 | # CONFIG_IA64_GRANULE_16MB is not set | 687 | # CONFIG_PRINTK_TIME is not set |
513 | CONFIG_IA64_GRANULE_64MB=y | ||
514 | CONFIG_DEBUG_KERNEL=y | ||
515 | # CONFIG_IA64_PRINT_HAZARDS is not set | ||
516 | # CONFIG_DISABLE_VHPT is not set | ||
517 | # CONFIG_MAGIC_SYSRQ is not set | 688 | # CONFIG_MAGIC_SYSRQ is not set |
689 | CONFIG_DEBUG_KERNEL=y | ||
690 | CONFIG_LOG_BUF_SHIFT=16 | ||
691 | CONFIG_DETECT_SOFTLOCKUP=y | ||
692 | # CONFIG_SCHEDSTATS is not set | ||
518 | # CONFIG_DEBUG_SLAB is not set | 693 | # CONFIG_DEBUG_SLAB is not set |
694 | CONFIG_DEBUG_PREEMPT=y | ||
695 | CONFIG_DEBUG_MUTEXES=y | ||
519 | # CONFIG_DEBUG_SPINLOCK is not set | 696 | # CONFIG_DEBUG_SPINLOCK is not set |
520 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | 697 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set |
698 | # CONFIG_DEBUG_KOBJECT is not set | ||
699 | CONFIG_DEBUG_INFO=y | ||
700 | # CONFIG_DEBUG_FS is not set | ||
701 | # CONFIG_DEBUG_VM is not set | ||
702 | CONFIG_FORCED_INLINING=y | ||
703 | # CONFIG_RCU_TORTURE_TEST is not set | ||
704 | # CONFIG_IA64_GRANULE_16MB is not set | ||
705 | CONFIG_IA64_GRANULE_64MB=y | ||
706 | # CONFIG_IA64_PRINT_HAZARDS is not set | ||
707 | # CONFIG_DISABLE_VHPT is not set | ||
521 | # CONFIG_IA64_DEBUG_CMPXCHG is not set | 708 | # CONFIG_IA64_DEBUG_CMPXCHG is not set |
522 | # CONFIG_IA64_DEBUG_IRQ is not set | 709 | # CONFIG_IA64_DEBUG_IRQ is not set |
523 | CONFIG_DEBUG_INFO=y | ||
524 | CONFIG_SYSVIPC_COMPAT=y | 710 | CONFIG_SYSVIPC_COMPAT=y |
525 | 711 | ||
526 | # | 712 | # |
527 | # Security options | 713 | # Security options |
528 | # | 714 | # |
715 | # CONFIG_KEYS is not set | ||
529 | # CONFIG_SECURITY is not set | 716 | # CONFIG_SECURITY is not set |
530 | 717 | ||
531 | # | 718 | # |
532 | # Cryptographic options | 719 | # Cryptographic options |
533 | # | 720 | # |
534 | # CONFIG_CRYPTO is not set | 721 | # CONFIG_CRYPTO is not set |
722 | |||
723 | # | ||
724 | # Hardware crypto devices | ||
725 | # | ||
diff --git a/arch/ia64/configs/sn2_defconfig b/arch/ia64/configs/sn2_defconfig index 3cb503b659e6..8206752161bb 100644 --- a/arch/ia64/configs/sn2_defconfig +++ b/arch/ia64/configs/sn2_defconfig | |||
@@ -1,14 +1,13 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.15-rc4 | 3 | # Linux kernel version: 2.6.16-rc5 |
4 | # Fri Dec 2 10:33:48 2005 | 4 | # Mon Feb 27 16:06:38 2006 |
5 | # | 5 | # |
6 | 6 | ||
7 | # | 7 | # |
8 | # Code maturity level options | 8 | # Code maturity level options |
9 | # | 9 | # |
10 | CONFIG_EXPERIMENTAL=y | 10 | CONFIG_EXPERIMENTAL=y |
11 | CONFIG_CLEAN_COMPILE=y | ||
12 | CONFIG_LOCK_KERNEL=y | 11 | CONFIG_LOCK_KERNEL=y |
13 | CONFIG_INIT_ENV_ARG_LIMIT=32 | 12 | CONFIG_INIT_ENV_ARG_LIMIT=32 |
14 | 13 | ||
@@ -23,17 +22,18 @@ CONFIG_POSIX_MQUEUE=y | |||
23 | # CONFIG_BSD_PROCESS_ACCT is not set | 22 | # CONFIG_BSD_PROCESS_ACCT is not set |
24 | CONFIG_SYSCTL=y | 23 | CONFIG_SYSCTL=y |
25 | # CONFIG_AUDIT is not set | 24 | # CONFIG_AUDIT is not set |
26 | CONFIG_HOTPLUG=y | ||
27 | CONFIG_KOBJECT_UEVENT=y | ||
28 | # CONFIG_IKCONFIG is not set | 25 | # CONFIG_IKCONFIG is not set |
29 | CONFIG_CPUSETS=y | 26 | CONFIG_CPUSETS=y |
30 | CONFIG_INITRAMFS_SOURCE="" | 27 | CONFIG_INITRAMFS_SOURCE="" |
28 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
31 | # CONFIG_EMBEDDED is not set | 29 | # CONFIG_EMBEDDED is not set |
32 | CONFIG_KALLSYMS=y | 30 | CONFIG_KALLSYMS=y |
33 | CONFIG_KALLSYMS_ALL=y | 31 | CONFIG_KALLSYMS_ALL=y |
34 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 32 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
33 | CONFIG_HOTPLUG=y | ||
35 | CONFIG_PRINTK=y | 34 | CONFIG_PRINTK=y |
36 | CONFIG_BUG=y | 35 | CONFIG_BUG=y |
36 | CONFIG_ELF_CORE=y | ||
37 | CONFIG_BASE_FULL=y | 37 | CONFIG_BASE_FULL=y |
38 | CONFIG_FUTEX=y | 38 | CONFIG_FUTEX=y |
39 | CONFIG_EPOLL=y | 39 | CONFIG_EPOLL=y |
@@ -42,8 +42,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0 | |||
42 | CONFIG_CC_ALIGN_LABELS=0 | 42 | CONFIG_CC_ALIGN_LABELS=0 |
43 | CONFIG_CC_ALIGN_LOOPS=0 | 43 | CONFIG_CC_ALIGN_LOOPS=0 |
44 | CONFIG_CC_ALIGN_JUMPS=0 | 44 | CONFIG_CC_ALIGN_JUMPS=0 |
45 | CONFIG_SLAB=y | ||
45 | # CONFIG_TINY_SHMEM is not set | 46 | # CONFIG_TINY_SHMEM is not set |
46 | CONFIG_BASE_SMALL=0 | 47 | CONFIG_BASE_SMALL=0 |
48 | # CONFIG_SLOB is not set | ||
47 | 49 | ||
48 | # | 50 | # |
49 | # Loadable module support | 51 | # Loadable module support |
@@ -88,7 +90,7 @@ CONFIG_EFI=y | |||
88 | CONFIG_GENERIC_IOMAP=y | 90 | CONFIG_GENERIC_IOMAP=y |
89 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | 91 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y |
90 | CONFIG_IA64_UNCACHED_ALLOCATOR=y | 92 | CONFIG_IA64_UNCACHED_ALLOCATOR=y |
91 | CONFIG_ZONE_DMA_IS_DMA32=y | 93 | CONFIG_DMA_IS_DMA32=y |
92 | # CONFIG_IA64_GENERIC is not set | 94 | # CONFIG_IA64_GENERIC is not set |
93 | # CONFIG_IA64_DIG is not set | 95 | # CONFIG_IA64_DIG is not set |
94 | # CONFIG_IA64_HP_ZX1 is not set | 96 | # CONFIG_IA64_HP_ZX1 is not set |
@@ -126,6 +128,7 @@ CONFIG_FLAT_NODE_MEM_MAP=y | |||
126 | CONFIG_NEED_MULTIPLE_NODES=y | 128 | CONFIG_NEED_MULTIPLE_NODES=y |
127 | # CONFIG_SPARSEMEM_STATIC is not set | 129 | # CONFIG_SPARSEMEM_STATIC is not set |
128 | CONFIG_SPLIT_PTLOCK_CPUS=4 | 130 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
131 | CONFIG_MIGRATION=y | ||
129 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | 132 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y |
130 | CONFIG_ARCH_DISCONTIGMEM_ENABLE=y | 133 | CONFIG_ARCH_DISCONTIGMEM_ENABLE=y |
131 | CONFIG_ARCH_FLATMEM_ENABLE=y | 134 | CONFIG_ARCH_FLATMEM_ENABLE=y |
@@ -140,6 +143,7 @@ CONFIG_COMPAT=y | |||
140 | CONFIG_IA64_MCA_RECOVERY=y | 143 | CONFIG_IA64_MCA_RECOVERY=y |
141 | CONFIG_PERFMON=y | 144 | CONFIG_PERFMON=y |
142 | CONFIG_IA64_PALINFO=y | 145 | CONFIG_IA64_PALINFO=y |
146 | CONFIG_SGI_SN=y | ||
143 | 147 | ||
144 | # | 148 | # |
145 | # Firmware Drivers | 149 | # Firmware Drivers |
@@ -166,6 +170,7 @@ CONFIG_ACPI=y | |||
166 | CONFIG_ACPI_NUMA=y | 170 | CONFIG_ACPI_NUMA=y |
167 | CONFIG_ACPI_BLACKLIST_YEAR=0 | 171 | CONFIG_ACPI_BLACKLIST_YEAR=0 |
168 | # CONFIG_ACPI_DEBUG is not set | 172 | # CONFIG_ACPI_DEBUG is not set |
173 | CONFIG_ACPI_EC=y | ||
169 | CONFIG_ACPI_POWER=y | 174 | CONFIG_ACPI_POWER=y |
170 | CONFIG_ACPI_SYSTEM=y | 175 | CONFIG_ACPI_SYSTEM=y |
171 | # CONFIG_ACPI_CONTAINER is not set | 176 | # CONFIG_ACPI_CONTAINER is not set |
@@ -207,6 +212,7 @@ CONFIG_NET=y | |||
207 | # | 212 | # |
208 | # Networking options | 213 | # Networking options |
209 | # | 214 | # |
215 | # CONFIG_NETDEBUG is not set | ||
210 | CONFIG_PACKET=y | 216 | CONFIG_PACKET=y |
211 | CONFIG_PACKET_MMAP=y | 217 | CONFIG_PACKET_MMAP=y |
212 | CONFIG_UNIX=y | 218 | CONFIG_UNIX=y |
@@ -247,6 +253,11 @@ CONFIG_IPV6=m | |||
247 | # SCTP Configuration (EXPERIMENTAL) | 253 | # SCTP Configuration (EXPERIMENTAL) |
248 | # | 254 | # |
249 | # CONFIG_IP_SCTP is not set | 255 | # CONFIG_IP_SCTP is not set |
256 | |||
257 | # | ||
258 | # TIPC Configuration (EXPERIMENTAL) | ||
259 | # | ||
260 | # CONFIG_TIPC is not set | ||
250 | # CONFIG_ATM is not set | 261 | # CONFIG_ATM is not set |
251 | # CONFIG_BRIDGE is not set | 262 | # CONFIG_BRIDGE is not set |
252 | # CONFIG_VLAN_8021Q is not set | 263 | # CONFIG_VLAN_8021Q is not set |
@@ -330,6 +341,7 @@ CONFIG_ATA_OVER_ETH=m | |||
330 | # ATA/ATAPI/MFM/RLL support | 341 | # ATA/ATAPI/MFM/RLL support |
331 | # | 342 | # |
332 | CONFIG_IDE=y | 343 | CONFIG_IDE=y |
344 | CONFIG_IDE_MAX_HWIFS=4 | ||
333 | CONFIG_BLK_DEV_IDE=y | 345 | CONFIG_BLK_DEV_IDE=y |
334 | 346 | ||
335 | # | 347 | # |
@@ -457,13 +469,7 @@ CONFIG_SCSI_SATA_VITESSE=y | |||
457 | # CONFIG_SCSI_IPR is not set | 469 | # CONFIG_SCSI_IPR is not set |
458 | # CONFIG_SCSI_QLOGIC_FC is not set | 470 | # CONFIG_SCSI_QLOGIC_FC is not set |
459 | CONFIG_SCSI_QLOGIC_1280=y | 471 | CONFIG_SCSI_QLOGIC_1280=y |
460 | CONFIG_SCSI_QLA2XXX=y | 472 | # CONFIG_SCSI_QLA_FC is not set |
461 | # CONFIG_SCSI_QLA21XX is not set | ||
462 | CONFIG_SCSI_QLA22XX=y | ||
463 | CONFIG_SCSI_QLA2300=y | ||
464 | CONFIG_SCSI_QLA2322=y | ||
465 | # CONFIG_SCSI_QLA6312 is not set | ||
466 | # CONFIG_SCSI_QLA24XX is not set | ||
467 | # CONFIG_SCSI_LPFC is not set | 473 | # CONFIG_SCSI_LPFC is not set |
468 | # CONFIG_SCSI_DC395x is not set | 474 | # CONFIG_SCSI_DC395x is not set |
469 | # CONFIG_SCSI_DC390T is not set | 475 | # CONFIG_SCSI_DC390T is not set |
@@ -545,6 +551,7 @@ CONFIG_NETDEVICES=y | |||
545 | # CONFIG_R8169 is not set | 551 | # CONFIG_R8169 is not set |
546 | # CONFIG_SIS190 is not set | 552 | # CONFIG_SIS190 is not set |
547 | # CONFIG_SKGE is not set | 553 | # CONFIG_SKGE is not set |
554 | # CONFIG_SKY2 is not set | ||
548 | # CONFIG_SK98LIN is not set | 555 | # CONFIG_SK98LIN is not set |
549 | CONFIG_TIGON3=y | 556 | CONFIG_TIGON3=y |
550 | # CONFIG_BNX2 is not set | 557 | # CONFIG_BNX2 is not set |
@@ -632,12 +639,15 @@ CONFIG_VT=y | |||
632 | CONFIG_VT_CONSOLE=y | 639 | CONFIG_VT_CONSOLE=y |
633 | CONFIG_HW_CONSOLE=y | 640 | CONFIG_HW_CONSOLE=y |
634 | CONFIG_SERIAL_NONSTANDARD=y | 641 | CONFIG_SERIAL_NONSTANDARD=y |
642 | # CONFIG_COMPUTONE is not set | ||
635 | # CONFIG_ROCKETPORT is not set | 643 | # CONFIG_ROCKETPORT is not set |
636 | # CONFIG_CYCLADES is not set | 644 | # CONFIG_CYCLADES is not set |
637 | # CONFIG_DIGIEPCA is not set | 645 | # CONFIG_DIGIEPCA is not set |
646 | # CONFIG_MOXA_INTELLIO is not set | ||
638 | # CONFIG_MOXA_SMARTIO is not set | 647 | # CONFIG_MOXA_SMARTIO is not set |
639 | # CONFIG_ISI is not set | 648 | # CONFIG_ISI is not set |
640 | # CONFIG_SYNCLINKMP is not set | 649 | # CONFIG_SYNCLINKMP is not set |
650 | # CONFIG_SYNCLINK_GT is not set | ||
641 | # CONFIG_N_HDLC is not set | 651 | # CONFIG_N_HDLC is not set |
642 | # CONFIG_SPECIALIX is not set | 652 | # CONFIG_SPECIALIX is not set |
643 | # CONFIG_SX is not set | 653 | # CONFIG_SX is not set |
@@ -686,8 +696,8 @@ CONFIG_AGP=y | |||
686 | CONFIG_AGP_SGI_TIOCA=y | 696 | CONFIG_AGP_SGI_TIOCA=y |
687 | # CONFIG_DRM is not set | 697 | # CONFIG_DRM is not set |
688 | CONFIG_RAW_DRIVER=m | 698 | CONFIG_RAW_DRIVER=m |
689 | # CONFIG_HPET is not set | ||
690 | CONFIG_MAX_RAW_DEVS=256 | 699 | CONFIG_MAX_RAW_DEVS=256 |
700 | # CONFIG_HPET is not set | ||
691 | # CONFIG_HANGCHECK_TIMER is not set | 701 | # CONFIG_HANGCHECK_TIMER is not set |
692 | CONFIG_MMTIMER=y | 702 | CONFIG_MMTIMER=y |
693 | 703 | ||
@@ -703,6 +713,12 @@ CONFIG_MMTIMER=y | |||
703 | # CONFIG_I2C is not set | 713 | # CONFIG_I2C is not set |
704 | 714 | ||
705 | # | 715 | # |
716 | # SPI support | ||
717 | # | ||
718 | # CONFIG_SPI is not set | ||
719 | # CONFIG_SPI_MASTER is not set | ||
720 | |||
721 | # | ||
706 | # Dallas's 1-wire bus | 722 | # Dallas's 1-wire bus |
707 | # | 723 | # |
708 | # CONFIG_W1 is not set | 724 | # CONFIG_W1 is not set |
@@ -791,12 +807,14 @@ CONFIG_USB_UHCI_HCD=m | |||
791 | # may also be needed; see USB_STORAGE Help for more information | 807 | # may also be needed; see USB_STORAGE Help for more information |
792 | # | 808 | # |
793 | # CONFIG_USB_STORAGE is not set | 809 | # CONFIG_USB_STORAGE is not set |
810 | # CONFIG_USB_LIBUSUAL is not set | ||
794 | 811 | ||
795 | # | 812 | # |
796 | # USB Input Devices | 813 | # USB Input Devices |
797 | # | 814 | # |
798 | CONFIG_USB_HID=m | 815 | CONFIG_USB_HID=m |
799 | CONFIG_USB_HIDINPUT=y | 816 | CONFIG_USB_HIDINPUT=y |
817 | # CONFIG_USB_HIDINPUT_POWERBOOK is not set | ||
800 | # CONFIG_HID_FF is not set | 818 | # CONFIG_HID_FF is not set |
801 | # CONFIG_USB_HIDDEV is not set | 819 | # CONFIG_USB_HIDDEV is not set |
802 | 820 | ||
@@ -816,6 +834,7 @@ CONFIG_USB_HIDINPUT=y | |||
816 | # CONFIG_USB_YEALINK is not set | 834 | # CONFIG_USB_YEALINK is not set |
817 | # CONFIG_USB_XPAD is not set | 835 | # CONFIG_USB_XPAD is not set |
818 | # CONFIG_USB_ATI_REMOTE is not set | 836 | # CONFIG_USB_ATI_REMOTE is not set |
837 | # CONFIG_USB_ATI_REMOTE2 is not set | ||
819 | # CONFIG_USB_KEYSPAN_REMOTE is not set | 838 | # CONFIG_USB_KEYSPAN_REMOTE is not set |
820 | # CONFIG_USB_APPLETOUCH is not set | 839 | # CONFIG_USB_APPLETOUCH is not set |
821 | 840 | ||
@@ -903,6 +922,10 @@ CONFIG_SGI_IOC4=y | |||
903 | CONFIG_SGI_IOC3=y | 922 | CONFIG_SGI_IOC3=y |
904 | 923 | ||
905 | # | 924 | # |
925 | # EDAC - error detection and reporting (RAS) | ||
926 | # | ||
927 | |||
928 | # | ||
906 | # File systems | 929 | # File systems |
907 | # | 930 | # |
908 | CONFIG_EXT2_FS=y | 931 | CONFIG_EXT2_FS=y |
@@ -931,6 +954,7 @@ CONFIG_XFS_QUOTA=y | |||
931 | # CONFIG_XFS_SECURITY is not set | 954 | # CONFIG_XFS_SECURITY is not set |
932 | CONFIG_XFS_POSIX_ACL=y | 955 | CONFIG_XFS_POSIX_ACL=y |
933 | CONFIG_XFS_RT=y | 956 | CONFIG_XFS_RT=y |
957 | # CONFIG_OCFS2_FS is not set | ||
934 | # CONFIG_MINIX_FS is not set | 958 | # CONFIG_MINIX_FS is not set |
935 | # CONFIG_ROMFS_FS is not set | 959 | # CONFIG_ROMFS_FS is not set |
936 | CONFIG_INOTIFY=y | 960 | CONFIG_INOTIFY=y |
@@ -973,6 +997,7 @@ CONFIG_HUGETLBFS=y | |||
973 | CONFIG_HUGETLB_PAGE=y | 997 | CONFIG_HUGETLB_PAGE=y |
974 | CONFIG_RAMFS=y | 998 | CONFIG_RAMFS=y |
975 | CONFIG_RELAYFS_FS=m | 999 | CONFIG_RELAYFS_FS=m |
1000 | # CONFIG_CONFIGFS_FS is not set | ||
976 | 1001 | ||
977 | # | 1002 | # |
978 | # Miscellaneous filesystems | 1003 | # Miscellaneous filesystems |
@@ -1041,6 +1066,7 @@ CONFIG_MSDOS_PARTITION=y | |||
1041 | CONFIG_SGI_PARTITION=y | 1066 | CONFIG_SGI_PARTITION=y |
1042 | # CONFIG_ULTRIX_PARTITION is not set | 1067 | # CONFIG_ULTRIX_PARTITION is not set |
1043 | # CONFIG_SUN_PARTITION is not set | 1068 | # CONFIG_SUN_PARTITION is not set |
1069 | # CONFIG_KARMA_PARTITION is not set | ||
1044 | CONFIG_EFI_PARTITION=y | 1070 | CONFIG_EFI_PARTITION=y |
1045 | 1071 | ||
1046 | # | 1072 | # |
@@ -1111,19 +1137,21 @@ CONFIG_GENERIC_PENDING_IRQ=y | |||
1111 | # Kernel hacking | 1137 | # Kernel hacking |
1112 | # | 1138 | # |
1113 | # CONFIG_PRINTK_TIME is not set | 1139 | # CONFIG_PRINTK_TIME is not set |
1114 | CONFIG_DEBUG_KERNEL=y | ||
1115 | CONFIG_MAGIC_SYSRQ=y | 1140 | CONFIG_MAGIC_SYSRQ=y |
1141 | CONFIG_DEBUG_KERNEL=y | ||
1116 | CONFIG_LOG_BUF_SHIFT=20 | 1142 | CONFIG_LOG_BUF_SHIFT=20 |
1117 | CONFIG_DETECT_SOFTLOCKUP=y | 1143 | CONFIG_DETECT_SOFTLOCKUP=y |
1118 | # CONFIG_SCHEDSTATS is not set | 1144 | # CONFIG_SCHEDSTATS is not set |
1119 | # CONFIG_DEBUG_SLAB is not set | 1145 | # CONFIG_DEBUG_SLAB is not set |
1120 | CONFIG_DEBUG_PREEMPT=y | 1146 | CONFIG_DEBUG_PREEMPT=y |
1147 | CONFIG_DEBUG_MUTEXES=y | ||
1121 | # CONFIG_DEBUG_SPINLOCK is not set | 1148 | # CONFIG_DEBUG_SPINLOCK is not set |
1122 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | 1149 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set |
1123 | # CONFIG_DEBUG_KOBJECT is not set | 1150 | # CONFIG_DEBUG_KOBJECT is not set |
1124 | CONFIG_DEBUG_INFO=y | 1151 | CONFIG_DEBUG_INFO=y |
1125 | # CONFIG_DEBUG_FS is not set | 1152 | # CONFIG_DEBUG_FS is not set |
1126 | # CONFIG_DEBUG_VM is not set | 1153 | # CONFIG_DEBUG_VM is not set |
1154 | CONFIG_FORCED_INLINING=y | ||
1127 | # CONFIG_RCU_TORTURE_TEST is not set | 1155 | # CONFIG_RCU_TORTURE_TEST is not set |
1128 | CONFIG_IA64_GRANULE_16MB=y | 1156 | CONFIG_IA64_GRANULE_16MB=y |
1129 | # CONFIG_IA64_GRANULE_64MB is not set | 1157 | # CONFIG_IA64_GRANULE_64MB is not set |
diff --git a/arch/ia64/configs/tiger_defconfig b/arch/ia64/configs/tiger_defconfig index 6859119bc9dd..125568118b84 100644 --- a/arch/ia64/configs/tiger_defconfig +++ b/arch/ia64/configs/tiger_defconfig | |||
@@ -1,14 +1,13 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.15-rc4 | 3 | # Linux kernel version: 2.6.16-rc5 |
4 | # Fri Dec 2 16:06:32 2005 | 4 | # Mon Feb 27 15:49:18 2006 |
5 | # | 5 | # |
6 | 6 | ||
7 | # | 7 | # |
8 | # Code maturity level options | 8 | # Code maturity level options |
9 | # | 9 | # |
10 | CONFIG_EXPERIMENTAL=y | 10 | CONFIG_EXPERIMENTAL=y |
11 | CONFIG_CLEAN_COMPILE=y | ||
12 | CONFIG_LOCK_KERNEL=y | 11 | CONFIG_LOCK_KERNEL=y |
13 | CONFIG_INIT_ENV_ARG_LIMIT=32 | 12 | CONFIG_INIT_ENV_ARG_LIMIT=32 |
14 | 13 | ||
@@ -23,18 +22,19 @@ CONFIG_POSIX_MQUEUE=y | |||
23 | # CONFIG_BSD_PROCESS_ACCT is not set | 22 | # CONFIG_BSD_PROCESS_ACCT is not set |
24 | CONFIG_SYSCTL=y | 23 | CONFIG_SYSCTL=y |
25 | # CONFIG_AUDIT is not set | 24 | # CONFIG_AUDIT is not set |
26 | CONFIG_HOTPLUG=y | ||
27 | CONFIG_KOBJECT_UEVENT=y | ||
28 | CONFIG_IKCONFIG=y | 25 | CONFIG_IKCONFIG=y |
29 | CONFIG_IKCONFIG_PROC=y | 26 | CONFIG_IKCONFIG_PROC=y |
30 | # CONFIG_CPUSETS is not set | 27 | # CONFIG_CPUSETS is not set |
31 | CONFIG_INITRAMFS_SOURCE="" | 28 | CONFIG_INITRAMFS_SOURCE="" |
29 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
32 | # CONFIG_EMBEDDED is not set | 30 | # CONFIG_EMBEDDED is not set |
33 | CONFIG_KALLSYMS=y | 31 | CONFIG_KALLSYMS=y |
34 | CONFIG_KALLSYMS_ALL=y | 32 | CONFIG_KALLSYMS_ALL=y |
35 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 33 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
34 | CONFIG_HOTPLUG=y | ||
36 | CONFIG_PRINTK=y | 35 | CONFIG_PRINTK=y |
37 | CONFIG_BUG=y | 36 | CONFIG_BUG=y |
37 | CONFIG_ELF_CORE=y | ||
38 | CONFIG_BASE_FULL=y | 38 | CONFIG_BASE_FULL=y |
39 | CONFIG_FUTEX=y | 39 | CONFIG_FUTEX=y |
40 | CONFIG_EPOLL=y | 40 | CONFIG_EPOLL=y |
@@ -43,8 +43,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0 | |||
43 | CONFIG_CC_ALIGN_LABELS=0 | 43 | CONFIG_CC_ALIGN_LABELS=0 |
44 | CONFIG_CC_ALIGN_LOOPS=0 | 44 | CONFIG_CC_ALIGN_LOOPS=0 |
45 | CONFIG_CC_ALIGN_JUMPS=0 | 45 | CONFIG_CC_ALIGN_JUMPS=0 |
46 | CONFIG_SLAB=y | ||
46 | # CONFIG_TINY_SHMEM is not set | 47 | # CONFIG_TINY_SHMEM is not set |
47 | CONFIG_BASE_SMALL=0 | 48 | CONFIG_BASE_SMALL=0 |
49 | # CONFIG_SLOB is not set | ||
48 | 50 | ||
49 | # | 51 | # |
50 | # Loadable module support | 52 | # Loadable module support |
@@ -88,7 +90,7 @@ CONFIG_TIME_INTERPOLATION=y | |||
88 | CONFIG_EFI=y | 90 | CONFIG_EFI=y |
89 | CONFIG_GENERIC_IOMAP=y | 91 | CONFIG_GENERIC_IOMAP=y |
90 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | 92 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y |
91 | CONFIG_ZONE_DMA_IS_DMA32=y | 93 | CONFIG_DMA_IS_DMA32=y |
92 | # CONFIG_IA64_GENERIC is not set | 94 | # CONFIG_IA64_GENERIC is not set |
93 | CONFIG_IA64_DIG=y | 95 | CONFIG_IA64_DIG=y |
94 | # CONFIG_IA64_HP_ZX1 is not set | 96 | # CONFIG_IA64_HP_ZX1 is not set |
@@ -162,6 +164,7 @@ CONFIG_ACPI_HOTPLUG_CPU=y | |||
162 | CONFIG_ACPI_THERMAL=m | 164 | CONFIG_ACPI_THERMAL=m |
163 | CONFIG_ACPI_BLACKLIST_YEAR=0 | 165 | CONFIG_ACPI_BLACKLIST_YEAR=0 |
164 | # CONFIG_ACPI_DEBUG is not set | 166 | # CONFIG_ACPI_DEBUG is not set |
167 | CONFIG_ACPI_EC=y | ||
165 | CONFIG_ACPI_POWER=y | 168 | CONFIG_ACPI_POWER=y |
166 | CONFIG_ACPI_SYSTEM=y | 169 | CONFIG_ACPI_SYSTEM=y |
167 | CONFIG_ACPI_CONTAINER=m | 170 | CONFIG_ACPI_CONTAINER=m |
@@ -203,6 +206,7 @@ CONFIG_NET=y | |||
203 | # | 206 | # |
204 | # Networking options | 207 | # Networking options |
205 | # | 208 | # |
209 | # CONFIG_NETDEBUG is not set | ||
206 | CONFIG_PACKET=y | 210 | CONFIG_PACKET=y |
207 | # CONFIG_PACKET_MMAP is not set | 211 | # CONFIG_PACKET_MMAP is not set |
208 | CONFIG_UNIX=y | 212 | CONFIG_UNIX=y |
@@ -237,6 +241,11 @@ CONFIG_TCP_CONG_BIC=y | |||
237 | # SCTP Configuration (EXPERIMENTAL) | 241 | # SCTP Configuration (EXPERIMENTAL) |
238 | # | 242 | # |
239 | # CONFIG_IP_SCTP is not set | 243 | # CONFIG_IP_SCTP is not set |
244 | |||
245 | # | ||
246 | # TIPC Configuration (EXPERIMENTAL) | ||
247 | # | ||
248 | # CONFIG_TIPC is not set | ||
240 | # CONFIG_ATM is not set | 249 | # CONFIG_ATM is not set |
241 | # CONFIG_BRIDGE is not set | 250 | # CONFIG_BRIDGE is not set |
242 | # CONFIG_VLAN_8021Q is not set | 251 | # CONFIG_VLAN_8021Q is not set |
@@ -326,6 +335,7 @@ CONFIG_BLK_DEV_INITRD=y | |||
326 | # ATA/ATAPI/MFM/RLL support | 335 | # ATA/ATAPI/MFM/RLL support |
327 | # | 336 | # |
328 | CONFIG_IDE=y | 337 | CONFIG_IDE=y |
338 | CONFIG_IDE_MAX_HWIFS=4 | ||
329 | CONFIG_BLK_DEV_IDE=y | 339 | CONFIG_BLK_DEV_IDE=y |
330 | 340 | ||
331 | # | 341 | # |
@@ -443,13 +453,7 @@ CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 | |||
443 | CONFIG_SCSI_QLOGIC_FC=y | 453 | CONFIG_SCSI_QLOGIC_FC=y |
444 | # CONFIG_SCSI_QLOGIC_FC_FIRMWARE is not set | 454 | # CONFIG_SCSI_QLOGIC_FC_FIRMWARE is not set |
445 | CONFIG_SCSI_QLOGIC_1280=y | 455 | CONFIG_SCSI_QLOGIC_1280=y |
446 | CONFIG_SCSI_QLA2XXX=y | 456 | # CONFIG_SCSI_QLA_FC is not set |
447 | CONFIG_SCSI_QLA21XX=m | ||
448 | CONFIG_SCSI_QLA22XX=m | ||
449 | CONFIG_SCSI_QLA2300=m | ||
450 | CONFIG_SCSI_QLA2322=m | ||
451 | # CONFIG_SCSI_QLA6312 is not set | ||
452 | # CONFIG_SCSI_QLA24XX is not set | ||
453 | # CONFIG_SCSI_LPFC is not set | 457 | # CONFIG_SCSI_LPFC is not set |
454 | # CONFIG_SCSI_DC395x is not set | 458 | # CONFIG_SCSI_DC395x is not set |
455 | # CONFIG_SCSI_DC390T is not set | 459 | # CONFIG_SCSI_DC390T is not set |
@@ -572,6 +576,7 @@ CONFIG_E1000=y | |||
572 | # CONFIG_R8169 is not set | 576 | # CONFIG_R8169 is not set |
573 | # CONFIG_SIS190 is not set | 577 | # CONFIG_SIS190 is not set |
574 | # CONFIG_SKGE is not set | 578 | # CONFIG_SKGE is not set |
579 | # CONFIG_SKY2 is not set | ||
575 | # CONFIG_SK98LIN is not set | 580 | # CONFIG_SK98LIN is not set |
576 | # CONFIG_VIA_VELOCITY is not set | 581 | # CONFIG_VIA_VELOCITY is not set |
577 | CONFIG_TIGON3=y | 582 | CONFIG_TIGON3=y |
@@ -676,12 +681,15 @@ CONFIG_VT=y | |||
676 | CONFIG_VT_CONSOLE=y | 681 | CONFIG_VT_CONSOLE=y |
677 | CONFIG_HW_CONSOLE=y | 682 | CONFIG_HW_CONSOLE=y |
678 | CONFIG_SERIAL_NONSTANDARD=y | 683 | CONFIG_SERIAL_NONSTANDARD=y |
684 | # CONFIG_COMPUTONE is not set | ||
679 | # CONFIG_ROCKETPORT is not set | 685 | # CONFIG_ROCKETPORT is not set |
680 | # CONFIG_CYCLADES is not set | 686 | # CONFIG_CYCLADES is not set |
681 | # CONFIG_DIGIEPCA is not set | 687 | # CONFIG_DIGIEPCA is not set |
688 | # CONFIG_MOXA_INTELLIO is not set | ||
682 | # CONFIG_MOXA_SMARTIO is not set | 689 | # CONFIG_MOXA_SMARTIO is not set |
683 | # CONFIG_ISI is not set | 690 | # CONFIG_ISI is not set |
684 | # CONFIG_SYNCLINKMP is not set | 691 | # CONFIG_SYNCLINKMP is not set |
692 | # CONFIG_SYNCLINK_GT is not set | ||
685 | # CONFIG_N_HDLC is not set | 693 | # CONFIG_N_HDLC is not set |
686 | # CONFIG_SPECIALIX is not set | 694 | # CONFIG_SPECIALIX is not set |
687 | # CONFIG_SX is not set | 695 | # CONFIG_SX is not set |
@@ -694,6 +702,7 @@ CONFIG_SERIAL_8250=y | |||
694 | CONFIG_SERIAL_8250_CONSOLE=y | 702 | CONFIG_SERIAL_8250_CONSOLE=y |
695 | CONFIG_SERIAL_8250_ACPI=y | 703 | CONFIG_SERIAL_8250_ACPI=y |
696 | CONFIG_SERIAL_8250_NR_UARTS=6 | 704 | CONFIG_SERIAL_8250_NR_UARTS=6 |
705 | CONFIG_SERIAL_8250_RUNTIME_UARTS=4 | ||
697 | CONFIG_SERIAL_8250_EXTENDED=y | 706 | CONFIG_SERIAL_8250_EXTENDED=y |
698 | CONFIG_SERIAL_8250_SHARE_IRQ=y | 707 | CONFIG_SERIAL_8250_SHARE_IRQ=y |
699 | # CONFIG_SERIAL_8250_DETECT_IRQ is not set | 708 | # CONFIG_SERIAL_8250_DETECT_IRQ is not set |
@@ -738,10 +747,10 @@ CONFIG_DRM_SIS=m | |||
738 | # CONFIG_DRM_VIA is not set | 747 | # CONFIG_DRM_VIA is not set |
739 | # CONFIG_DRM_SAVAGE is not set | 748 | # CONFIG_DRM_SAVAGE is not set |
740 | CONFIG_RAW_DRIVER=m | 749 | CONFIG_RAW_DRIVER=m |
750 | CONFIG_MAX_RAW_DEVS=256 | ||
741 | CONFIG_HPET=y | 751 | CONFIG_HPET=y |
742 | # CONFIG_HPET_RTC_IRQ is not set | 752 | # CONFIG_HPET_RTC_IRQ is not set |
743 | CONFIG_HPET_MMAP=y | 753 | CONFIG_HPET_MMAP=y |
744 | CONFIG_MAX_RAW_DEVS=256 | ||
745 | # CONFIG_HANGCHECK_TIMER is not set | 754 | # CONFIG_HANGCHECK_TIMER is not set |
746 | 755 | ||
747 | # | 756 | # |
@@ -756,6 +765,12 @@ CONFIG_MAX_RAW_DEVS=256 | |||
756 | # CONFIG_I2C is not set | 765 | # CONFIG_I2C is not set |
757 | 766 | ||
758 | # | 767 | # |
768 | # SPI support | ||
769 | # | ||
770 | # CONFIG_SPI is not set | ||
771 | # CONFIG_SPI_MASTER is not set | ||
772 | |||
773 | # | ||
759 | # Dallas's 1-wire bus | 774 | # Dallas's 1-wire bus |
760 | # | 775 | # |
761 | # CONFIG_W1 is not set | 776 | # CONFIG_W1 is not set |
@@ -765,6 +780,7 @@ CONFIG_MAX_RAW_DEVS=256 | |||
765 | # | 780 | # |
766 | CONFIG_HWMON=y | 781 | CONFIG_HWMON=y |
767 | # CONFIG_HWMON_VID is not set | 782 | # CONFIG_HWMON_VID is not set |
783 | # CONFIG_SENSORS_F71805F is not set | ||
768 | # CONFIG_HWMON_DEBUG_CHIP is not set | 784 | # CONFIG_HWMON_DEBUG_CHIP is not set |
769 | 785 | ||
770 | # | 786 | # |
@@ -854,12 +870,15 @@ CONFIG_USB_STORAGE=m | |||
854 | # CONFIG_USB_STORAGE_SDDR09 is not set | 870 | # CONFIG_USB_STORAGE_SDDR09 is not set |
855 | # CONFIG_USB_STORAGE_SDDR55 is not set | 871 | # CONFIG_USB_STORAGE_SDDR55 is not set |
856 | # CONFIG_USB_STORAGE_JUMPSHOT is not set | 872 | # CONFIG_USB_STORAGE_JUMPSHOT is not set |
873 | # CONFIG_USB_STORAGE_ALAUDA is not set | ||
874 | # CONFIG_USB_LIBUSUAL is not set | ||
857 | 875 | ||
858 | # | 876 | # |
859 | # USB Input Devices | 877 | # USB Input Devices |
860 | # | 878 | # |
861 | CONFIG_USB_HID=y | 879 | CONFIG_USB_HID=y |
862 | CONFIG_USB_HIDINPUT=y | 880 | CONFIG_USB_HIDINPUT=y |
881 | # CONFIG_USB_HIDINPUT_POWERBOOK is not set | ||
863 | # CONFIG_HID_FF is not set | 882 | # CONFIG_HID_FF is not set |
864 | # CONFIG_USB_HIDDEV is not set | 883 | # CONFIG_USB_HIDDEV is not set |
865 | # CONFIG_USB_AIPTEK is not set | 884 | # CONFIG_USB_AIPTEK is not set |
@@ -873,6 +892,7 @@ CONFIG_USB_HIDINPUT=y | |||
873 | # CONFIG_USB_YEALINK is not set | 892 | # CONFIG_USB_YEALINK is not set |
874 | # CONFIG_USB_XPAD is not set | 893 | # CONFIG_USB_XPAD is not set |
875 | # CONFIG_USB_ATI_REMOTE is not set | 894 | # CONFIG_USB_ATI_REMOTE is not set |
895 | # CONFIG_USB_ATI_REMOTE2 is not set | ||
876 | # CONFIG_USB_KEYSPAN_REMOTE is not set | 896 | # CONFIG_USB_KEYSPAN_REMOTE is not set |
877 | # CONFIG_USB_APPLETOUCH is not set | 897 | # CONFIG_USB_APPLETOUCH is not set |
878 | 898 | ||
@@ -948,7 +968,7 @@ CONFIG_USB_HIDINPUT=y | |||
948 | # CONFIG_INFINIBAND is not set | 968 | # CONFIG_INFINIBAND is not set |
949 | 969 | ||
950 | # | 970 | # |
951 | # SN Devices | 971 | # EDAC - error detection and reporting (RAS) |
952 | # | 972 | # |
953 | 973 | ||
954 | # | 974 | # |
@@ -980,6 +1000,7 @@ CONFIG_XFS_EXPORT=y | |||
980 | # CONFIG_XFS_SECURITY is not set | 1000 | # CONFIG_XFS_SECURITY is not set |
981 | # CONFIG_XFS_POSIX_ACL is not set | 1001 | # CONFIG_XFS_POSIX_ACL is not set |
982 | # CONFIG_XFS_RT is not set | 1002 | # CONFIG_XFS_RT is not set |
1003 | # CONFIG_OCFS2_FS is not set | ||
983 | # CONFIG_MINIX_FS is not set | 1004 | # CONFIG_MINIX_FS is not set |
984 | # CONFIG_ROMFS_FS is not set | 1005 | # CONFIG_ROMFS_FS is not set |
985 | CONFIG_INOTIFY=y | 1006 | CONFIG_INOTIFY=y |
@@ -1021,6 +1042,7 @@ CONFIG_HUGETLBFS=y | |||
1021 | CONFIG_HUGETLB_PAGE=y | 1042 | CONFIG_HUGETLB_PAGE=y |
1022 | CONFIG_RAMFS=y | 1043 | CONFIG_RAMFS=y |
1023 | # CONFIG_RELAYFS_FS is not set | 1044 | # CONFIG_RELAYFS_FS is not set |
1045 | # CONFIG_CONFIGFS_FS is not set | ||
1024 | 1046 | ||
1025 | # | 1047 | # |
1026 | # Miscellaneous filesystems | 1048 | # Miscellaneous filesystems |
@@ -1090,6 +1112,7 @@ CONFIG_MSDOS_PARTITION=y | |||
1090 | CONFIG_SGI_PARTITION=y | 1112 | CONFIG_SGI_PARTITION=y |
1091 | # CONFIG_ULTRIX_PARTITION is not set | 1113 | # CONFIG_ULTRIX_PARTITION is not set |
1092 | # CONFIG_SUN_PARTITION is not set | 1114 | # CONFIG_SUN_PARTITION is not set |
1115 | # CONFIG_KARMA_PARTITION is not set | ||
1093 | CONFIG_EFI_PARTITION=y | 1116 | CONFIG_EFI_PARTITION=y |
1094 | 1117 | ||
1095 | # | 1118 | # |
@@ -1157,18 +1180,20 @@ CONFIG_GENERIC_PENDING_IRQ=y | |||
1157 | # Kernel hacking | 1180 | # Kernel hacking |
1158 | # | 1181 | # |
1159 | # CONFIG_PRINTK_TIME is not set | 1182 | # CONFIG_PRINTK_TIME is not set |
1160 | CONFIG_DEBUG_KERNEL=y | ||
1161 | CONFIG_MAGIC_SYSRQ=y | 1183 | CONFIG_MAGIC_SYSRQ=y |
1184 | CONFIG_DEBUG_KERNEL=y | ||
1162 | CONFIG_LOG_BUF_SHIFT=20 | 1185 | CONFIG_LOG_BUF_SHIFT=20 |
1163 | CONFIG_DETECT_SOFTLOCKUP=y | 1186 | CONFIG_DETECT_SOFTLOCKUP=y |
1164 | # CONFIG_SCHEDSTATS is not set | 1187 | # CONFIG_SCHEDSTATS is not set |
1165 | # CONFIG_DEBUG_SLAB is not set | 1188 | # CONFIG_DEBUG_SLAB is not set |
1189 | CONFIG_DEBUG_MUTEXES=y | ||
1166 | # CONFIG_DEBUG_SPINLOCK is not set | 1190 | # CONFIG_DEBUG_SPINLOCK is not set |
1167 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | 1191 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set |
1168 | # CONFIG_DEBUG_KOBJECT is not set | 1192 | # CONFIG_DEBUG_KOBJECT is not set |
1169 | # CONFIG_DEBUG_INFO is not set | 1193 | # CONFIG_DEBUG_INFO is not set |
1170 | # CONFIG_DEBUG_FS is not set | 1194 | # CONFIG_DEBUG_FS is not set |
1171 | # CONFIG_DEBUG_VM is not set | 1195 | # CONFIG_DEBUG_VM is not set |
1196 | CONFIG_FORCED_INLINING=y | ||
1172 | # CONFIG_RCU_TORTURE_TEST is not set | 1197 | # CONFIG_RCU_TORTURE_TEST is not set |
1173 | CONFIG_IA64_GRANULE_16MB=y | 1198 | CONFIG_IA64_GRANULE_16MB=y |
1174 | # CONFIG_IA64_GRANULE_64MB is not set | 1199 | # CONFIG_IA64_GRANULE_64MB is not set |
diff --git a/arch/ia64/configs/zx1_defconfig b/arch/ia64/configs/zx1_defconfig index 53899dc8eb53..949dc4670a0c 100644 --- a/arch/ia64/configs/zx1_defconfig +++ b/arch/ia64/configs/zx1_defconfig | |||
@@ -1,16 +1,13 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.14-rc1 | 3 | # Linux kernel version: 2.6.16-rc5 |
4 | # Wed Sep 14 15:15:01 2005 | 4 | # Mon Feb 27 15:55:36 2006 |
5 | # | 5 | # |
6 | 6 | ||
7 | # | 7 | # |
8 | # Code maturity level options | 8 | # Code maturity level options |
9 | # | 9 | # |
10 | CONFIG_EXPERIMENTAL=y | 10 | CONFIG_EXPERIMENTAL=y |
11 | # CONFIG_CLEAN_COMPILE is not set | ||
12 | CONFIG_BROKEN=y | ||
13 | CONFIG_BROKEN_ON_SMP=y | ||
14 | CONFIG_LOCK_KERNEL=y | 11 | CONFIG_LOCK_KERNEL=y |
15 | CONFIG_INIT_ENV_ARG_LIMIT=32 | 12 | CONFIG_INIT_ENV_ARG_LIMIT=32 |
16 | 13 | ||
@@ -26,17 +23,18 @@ CONFIG_BSD_PROCESS_ACCT=y | |||
26 | # CONFIG_BSD_PROCESS_ACCT_V3 is not set | 23 | # CONFIG_BSD_PROCESS_ACCT_V3 is not set |
27 | CONFIG_SYSCTL=y | 24 | CONFIG_SYSCTL=y |
28 | # CONFIG_AUDIT is not set | 25 | # CONFIG_AUDIT is not set |
29 | CONFIG_HOTPLUG=y | ||
30 | CONFIG_KOBJECT_UEVENT=y | ||
31 | # CONFIG_IKCONFIG is not set | 26 | # CONFIG_IKCONFIG is not set |
32 | # CONFIG_CPUSETS is not set | 27 | # CONFIG_CPUSETS is not set |
33 | CONFIG_INITRAMFS_SOURCE="" | 28 | CONFIG_INITRAMFS_SOURCE="" |
29 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
34 | # CONFIG_EMBEDDED is not set | 30 | # CONFIG_EMBEDDED is not set |
35 | CONFIG_KALLSYMS=y | 31 | CONFIG_KALLSYMS=y |
36 | # CONFIG_KALLSYMS_ALL is not set | 32 | # CONFIG_KALLSYMS_ALL is not set |
37 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 33 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
34 | CONFIG_HOTPLUG=y | ||
38 | CONFIG_PRINTK=y | 35 | CONFIG_PRINTK=y |
39 | CONFIG_BUG=y | 36 | CONFIG_BUG=y |
37 | CONFIG_ELF_CORE=y | ||
40 | CONFIG_BASE_FULL=y | 38 | CONFIG_BASE_FULL=y |
41 | CONFIG_FUTEX=y | 39 | CONFIG_FUTEX=y |
42 | CONFIG_EPOLL=y | 40 | CONFIG_EPOLL=y |
@@ -45,8 +43,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0 | |||
45 | CONFIG_CC_ALIGN_LABELS=0 | 43 | CONFIG_CC_ALIGN_LABELS=0 |
46 | CONFIG_CC_ALIGN_LOOPS=0 | 44 | CONFIG_CC_ALIGN_LOOPS=0 |
47 | CONFIG_CC_ALIGN_JUMPS=0 | 45 | CONFIG_CC_ALIGN_JUMPS=0 |
46 | CONFIG_SLAB=y | ||
48 | # CONFIG_TINY_SHMEM is not set | 47 | # CONFIG_TINY_SHMEM is not set |
49 | CONFIG_BASE_SMALL=0 | 48 | CONFIG_BASE_SMALL=0 |
49 | # CONFIG_SLOB is not set | ||
50 | 50 | ||
51 | # | 51 | # |
52 | # Loadable module support | 52 | # Loadable module support |
@@ -59,17 +59,36 @@ CONFIG_OBSOLETE_MODPARM=y | |||
59 | # CONFIG_KMOD is not set | 59 | # CONFIG_KMOD is not set |
60 | 60 | ||
61 | # | 61 | # |
62 | # Block layer | ||
63 | # | ||
64 | |||
65 | # | ||
66 | # IO Schedulers | ||
67 | # | ||
68 | CONFIG_IOSCHED_NOOP=y | ||
69 | CONFIG_IOSCHED_AS=y | ||
70 | CONFIG_IOSCHED_DEADLINE=y | ||
71 | CONFIG_IOSCHED_CFQ=y | ||
72 | CONFIG_DEFAULT_AS=y | ||
73 | # CONFIG_DEFAULT_DEADLINE is not set | ||
74 | # CONFIG_DEFAULT_CFQ is not set | ||
75 | # CONFIG_DEFAULT_NOOP is not set | ||
76 | CONFIG_DEFAULT_IOSCHED="anticipatory" | ||
77 | |||
78 | # | ||
62 | # Processor type and features | 79 | # Processor type and features |
63 | # | 80 | # |
64 | CONFIG_IA64=y | 81 | CONFIG_IA64=y |
65 | CONFIG_64BIT=y | 82 | CONFIG_64BIT=y |
66 | CONFIG_MMU=y | 83 | CONFIG_MMU=y |
84 | CONFIG_SWIOTLB=y | ||
67 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | 85 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y |
68 | CONFIG_GENERIC_CALIBRATE_DELAY=y | 86 | CONFIG_GENERIC_CALIBRATE_DELAY=y |
69 | CONFIG_TIME_INTERPOLATION=y | 87 | CONFIG_TIME_INTERPOLATION=y |
70 | CONFIG_EFI=y | 88 | CONFIG_EFI=y |
71 | CONFIG_GENERIC_IOMAP=y | 89 | CONFIG_GENERIC_IOMAP=y |
72 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | 90 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y |
91 | CONFIG_DMA_IS_DMA32=y | ||
73 | # CONFIG_IA64_GENERIC is not set | 92 | # CONFIG_IA64_GENERIC is not set |
74 | # CONFIG_IA64_DIG is not set | 93 | # CONFIG_IA64_DIG is not set |
75 | CONFIG_IA64_HP_ZX1=y | 94 | CONFIG_IA64_HP_ZX1=y |
@@ -82,18 +101,16 @@ CONFIG_MCKINLEY=y | |||
82 | # CONFIG_IA64_PAGE_SIZE_8KB is not set | 101 | # CONFIG_IA64_PAGE_SIZE_8KB is not set |
83 | CONFIG_IA64_PAGE_SIZE_16KB=y | 102 | CONFIG_IA64_PAGE_SIZE_16KB=y |
84 | # CONFIG_IA64_PAGE_SIZE_64KB is not set | 103 | # CONFIG_IA64_PAGE_SIZE_64KB is not set |
104 | CONFIG_PGTABLE_3=y | ||
105 | # CONFIG_PGTABLE_4 is not set | ||
85 | # CONFIG_HZ_100 is not set | 106 | # CONFIG_HZ_100 is not set |
86 | CONFIG_HZ_250=y | 107 | CONFIG_HZ_250=y |
87 | # CONFIG_HZ_1000 is not set | 108 | # CONFIG_HZ_1000 is not set |
88 | CONFIG_HZ=250 | 109 | CONFIG_HZ=250 |
89 | CONFIG_IA64_L1_CACHE_SHIFT=7 | 110 | CONFIG_IA64_L1_CACHE_SHIFT=7 |
90 | # CONFIG_NUMA is not set | ||
91 | CONFIG_VIRTUAL_MEM_MAP=y | ||
92 | CONFIG_HOLES_IN_ZONE=y | ||
93 | # CONFIG_IA64_CYCLONE is not set | 111 | # CONFIG_IA64_CYCLONE is not set |
94 | CONFIG_IOSAPIC=y | 112 | CONFIG_IOSAPIC=y |
95 | # CONFIG_IA64_SGI_SN_XP is not set | 113 | CONFIG_FORCE_MAX_ZONEORDER=17 |
96 | CONFIG_FORCE_MAX_ZONEORDER=18 | ||
97 | CONFIG_SMP=y | 114 | CONFIG_SMP=y |
98 | CONFIG_NR_CPUS=16 | 115 | CONFIG_NR_CPUS=16 |
99 | # CONFIG_HOTPLUG_CPU is not set | 116 | # CONFIG_HOTPLUG_CPU is not set |
@@ -106,7 +123,14 @@ CONFIG_FLATMEM_MANUAL=y | |||
106 | CONFIG_FLATMEM=y | 123 | CONFIG_FLATMEM=y |
107 | CONFIG_FLAT_NODE_MEM_MAP=y | 124 | CONFIG_FLAT_NODE_MEM_MAP=y |
108 | # CONFIG_SPARSEMEM_STATIC is not set | 125 | # CONFIG_SPARSEMEM_STATIC is not set |
109 | CONFIG_HAVE_DEC_LOCK=y | 126 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
127 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | ||
128 | CONFIG_ARCH_DISCONTIGMEM_ENABLE=y | ||
129 | CONFIG_ARCH_FLATMEM_ENABLE=y | ||
130 | CONFIG_ARCH_SPARSEMEM_ENABLE=y | ||
131 | CONFIG_ARCH_DISCONTIGMEM_DEFAULT=y | ||
132 | CONFIG_VIRTUAL_MEM_MAP=y | ||
133 | CONFIG_HOLES_IN_ZONE=y | ||
110 | CONFIG_IA32_SUPPORT=y | 134 | CONFIG_IA32_SUPPORT=y |
111 | CONFIG_COMPAT=y | 135 | CONFIG_COMPAT=y |
112 | CONFIG_IA64_MCA_RECOVERY=y | 136 | CONFIG_IA64_MCA_RECOVERY=y |
@@ -118,7 +142,6 @@ CONFIG_IA64_PALINFO=y | |||
118 | # | 142 | # |
119 | CONFIG_EFI_VARS=y | 143 | CONFIG_EFI_VARS=y |
120 | CONFIG_EFI_PCDP=y | 144 | CONFIG_EFI_PCDP=y |
121 | # CONFIG_DELL_RBU is not set | ||
122 | CONFIG_BINFMT_ELF=y | 145 | CONFIG_BINFMT_ELF=y |
123 | CONFIG_BINFMT_MISC=y | 146 | CONFIG_BINFMT_MISC=y |
124 | 147 | ||
@@ -126,6 +149,7 @@ CONFIG_BINFMT_MISC=y | |||
126 | # Power management and ACPI | 149 | # Power management and ACPI |
127 | # | 150 | # |
128 | CONFIG_PM=y | 151 | CONFIG_PM=y |
152 | CONFIG_PM_LEGACY=y | ||
129 | # CONFIG_PM_DEBUG is not set | 153 | # CONFIG_PM_DEBUG is not set |
130 | 154 | ||
131 | # | 155 | # |
@@ -138,6 +162,7 @@ CONFIG_ACPI_PROCESSOR=y | |||
138 | CONFIG_ACPI_THERMAL=y | 162 | CONFIG_ACPI_THERMAL=y |
139 | CONFIG_ACPI_BLACKLIST_YEAR=0 | 163 | CONFIG_ACPI_BLACKLIST_YEAR=0 |
140 | # CONFIG_ACPI_DEBUG is not set | 164 | # CONFIG_ACPI_DEBUG is not set |
165 | CONFIG_ACPI_EC=y | ||
141 | CONFIG_ACPI_POWER=y | 166 | CONFIG_ACPI_POWER=y |
142 | CONFIG_ACPI_SYSTEM=y | 167 | CONFIG_ACPI_SYSTEM=y |
143 | # CONFIG_ACPI_CONTAINER is not set | 168 | # CONFIG_ACPI_CONTAINER is not set |
@@ -179,6 +204,7 @@ CONFIG_NET=y | |||
179 | # | 204 | # |
180 | # Networking options | 205 | # Networking options |
181 | # | 206 | # |
207 | # CONFIG_NETDEBUG is not set | ||
182 | CONFIG_PACKET=y | 208 | CONFIG_PACKET=y |
183 | # CONFIG_PACKET_MMAP is not set | 209 | # CONFIG_PACKET_MMAP is not set |
184 | CONFIG_UNIX=y | 210 | CONFIG_UNIX=y |
@@ -211,14 +237,17 @@ CONFIG_NETFILTER=y | |||
211 | # CONFIG_NETFILTER_DEBUG is not set | 237 | # CONFIG_NETFILTER_DEBUG is not set |
212 | 238 | ||
213 | # | 239 | # |
240 | # Core Netfilter Configuration | ||
241 | # | ||
242 | # CONFIG_NETFILTER_NETLINK is not set | ||
243 | # CONFIG_NF_CONNTRACK is not set | ||
244 | # CONFIG_NETFILTER_XTABLES is not set | ||
245 | |||
246 | # | ||
214 | # IP: Netfilter Configuration | 247 | # IP: Netfilter Configuration |
215 | # | 248 | # |
216 | # CONFIG_IP_NF_CONNTRACK is not set | 249 | # CONFIG_IP_NF_CONNTRACK is not set |
217 | # CONFIG_IP_NF_QUEUE is not set | 250 | # CONFIG_IP_NF_QUEUE is not set |
218 | # CONFIG_IP_NF_IPTABLES is not set | ||
219 | CONFIG_IP_NF_ARPTABLES=y | ||
220 | # CONFIG_IP_NF_ARPFILTER is not set | ||
221 | # CONFIG_IP_NF_ARP_MANGLE is not set | ||
222 | 251 | ||
223 | # | 252 | # |
224 | # DCCP Configuration (EXPERIMENTAL) | 253 | # DCCP Configuration (EXPERIMENTAL) |
@@ -229,6 +258,11 @@ CONFIG_IP_NF_ARPTABLES=y | |||
229 | # SCTP Configuration (EXPERIMENTAL) | 258 | # SCTP Configuration (EXPERIMENTAL) |
230 | # | 259 | # |
231 | # CONFIG_IP_SCTP is not set | 260 | # CONFIG_IP_SCTP is not set |
261 | |||
262 | # | ||
263 | # TIPC Configuration (EXPERIMENTAL) | ||
264 | # | ||
265 | # CONFIG_TIPC is not set | ||
232 | # CONFIG_ATM is not set | 266 | # CONFIG_ATM is not set |
233 | # CONFIG_BRIDGE is not set | 267 | # CONFIG_BRIDGE is not set |
234 | # CONFIG_VLAN_8021Q is not set | 268 | # CONFIG_VLAN_8021Q is not set |
@@ -241,14 +275,16 @@ CONFIG_IP_NF_ARPTABLES=y | |||
241 | # CONFIG_NET_DIVERT is not set | 275 | # CONFIG_NET_DIVERT is not set |
242 | # CONFIG_ECONET is not set | 276 | # CONFIG_ECONET is not set |
243 | # CONFIG_WAN_ROUTER is not set | 277 | # CONFIG_WAN_ROUTER is not set |
278 | |||
279 | # | ||
280 | # QoS and/or fair queueing | ||
281 | # | ||
244 | # CONFIG_NET_SCHED is not set | 282 | # CONFIG_NET_SCHED is not set |
245 | # CONFIG_NET_CLS_ROUTE is not set | ||
246 | 283 | ||
247 | # | 284 | # |
248 | # Network testing | 285 | # Network testing |
249 | # | 286 | # |
250 | # CONFIG_NET_PKTGEN is not set | 287 | # CONFIG_NET_PKTGEN is not set |
251 | # CONFIG_NETFILTER_NETLINK is not set | ||
252 | # CONFIG_HAMRADIO is not set | 288 | # CONFIG_HAMRADIO is not set |
253 | # CONFIG_IRDA is not set | 289 | # CONFIG_IRDA is not set |
254 | # CONFIG_BT is not set | 290 | # CONFIG_BT is not set |
@@ -310,20 +346,13 @@ CONFIG_BLK_DEV_RAM_COUNT=16 | |||
310 | CONFIG_BLK_DEV_RAM_SIZE=4096 | 346 | CONFIG_BLK_DEV_RAM_SIZE=4096 |
311 | CONFIG_BLK_DEV_INITRD=y | 347 | CONFIG_BLK_DEV_INITRD=y |
312 | # CONFIG_CDROM_PKTCDVD is not set | 348 | # CONFIG_CDROM_PKTCDVD is not set |
313 | |||
314 | # | ||
315 | # IO Schedulers | ||
316 | # | ||
317 | CONFIG_IOSCHED_NOOP=y | ||
318 | CONFIG_IOSCHED_AS=y | ||
319 | CONFIG_IOSCHED_DEADLINE=y | ||
320 | CONFIG_IOSCHED_CFQ=y | ||
321 | # CONFIG_ATA_OVER_ETH is not set | 349 | # CONFIG_ATA_OVER_ETH is not set |
322 | 350 | ||
323 | # | 351 | # |
324 | # ATA/ATAPI/MFM/RLL support | 352 | # ATA/ATAPI/MFM/RLL support |
325 | # | 353 | # |
326 | CONFIG_IDE=y | 354 | CONFIG_IDE=y |
355 | CONFIG_IDE_MAX_HWIFS=4 | ||
327 | CONFIG_BLK_DEV_IDE=y | 356 | CONFIG_BLK_DEV_IDE=y |
328 | 357 | ||
329 | # | 358 | # |
@@ -407,13 +436,14 @@ CONFIG_SCSI_LOGGING=y | |||
407 | # SCSI Transport Attributes | 436 | # SCSI Transport Attributes |
408 | # | 437 | # |
409 | CONFIG_SCSI_SPI_ATTRS=y | 438 | CONFIG_SCSI_SPI_ATTRS=y |
410 | # CONFIG_SCSI_FC_ATTRS is not set | 439 | CONFIG_SCSI_FC_ATTRS=y |
411 | # CONFIG_SCSI_ISCSI_ATTRS is not set | 440 | # CONFIG_SCSI_ISCSI_ATTRS is not set |
412 | # CONFIG_SCSI_SAS_ATTRS is not set | 441 | # CONFIG_SCSI_SAS_ATTRS is not set |
413 | 442 | ||
414 | # | 443 | # |
415 | # SCSI low-level drivers | 444 | # SCSI low-level drivers |
416 | # | 445 | # |
446 | # CONFIG_ISCSI_TCP is not set | ||
417 | # CONFIG_BLK_DEV_3W_XXXX_RAID is not set | 447 | # CONFIG_BLK_DEV_3W_XXXX_RAID is not set |
418 | # CONFIG_SCSI_3W_9XXX is not set | 448 | # CONFIG_SCSI_3W_9XXX is not set |
419 | # CONFIG_SCSI_ACARD is not set | 449 | # CONFIG_SCSI_ACARD is not set |
@@ -421,13 +451,11 @@ CONFIG_SCSI_SPI_ATTRS=y | |||
421 | # CONFIG_SCSI_AIC7XXX is not set | 451 | # CONFIG_SCSI_AIC7XXX is not set |
422 | # CONFIG_SCSI_AIC7XXX_OLD is not set | 452 | # CONFIG_SCSI_AIC7XXX_OLD is not set |
423 | # CONFIG_SCSI_AIC79XX is not set | 453 | # CONFIG_SCSI_AIC79XX is not set |
424 | # CONFIG_SCSI_ADVANSYS is not set | ||
425 | # CONFIG_MEGARAID_NEWGEN is not set | 454 | # CONFIG_MEGARAID_NEWGEN is not set |
426 | # CONFIG_MEGARAID_LEGACY is not set | 455 | # CONFIG_MEGARAID_LEGACY is not set |
456 | # CONFIG_MEGARAID_SAS is not set | ||
427 | # CONFIG_SCSI_SATA is not set | 457 | # CONFIG_SCSI_SATA is not set |
428 | # CONFIG_SCSI_CPQFCTS is not set | ||
429 | # CONFIG_SCSI_DMX3191D is not set | 458 | # CONFIG_SCSI_DMX3191D is not set |
430 | # CONFIG_SCSI_EATA_PIO is not set | ||
431 | # CONFIG_SCSI_FUTURE_DOMAIN is not set | 459 | # CONFIG_SCSI_FUTURE_DOMAIN is not set |
432 | # CONFIG_SCSI_IPS is not set | 460 | # CONFIG_SCSI_IPS is not set |
433 | # CONFIG_SCSI_INITIO is not set | 461 | # CONFIG_SCSI_INITIO is not set |
@@ -438,17 +466,9 @@ CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 | |||
438 | CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 | 466 | CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 |
439 | # CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set | 467 | # CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set |
440 | # CONFIG_SCSI_IPR is not set | 468 | # CONFIG_SCSI_IPR is not set |
441 | # CONFIG_SCSI_QLOGIC_ISP is not set | ||
442 | # CONFIG_SCSI_QLOGIC_FC is not set | 469 | # CONFIG_SCSI_QLOGIC_FC is not set |
443 | CONFIG_SCSI_QLOGIC_1280=y | 470 | CONFIG_SCSI_QLOGIC_1280=y |
444 | # CONFIG_SCSI_QLOGIC_1280_1040 is not set | 471 | # CONFIG_SCSI_QLA_FC is not set |
445 | CONFIG_SCSI_QLA2XXX=y | ||
446 | # CONFIG_SCSI_QLA21XX is not set | ||
447 | # CONFIG_SCSI_QLA22XX is not set | ||
448 | # CONFIG_SCSI_QLA2300 is not set | ||
449 | # CONFIG_SCSI_QLA2322 is not set | ||
450 | # CONFIG_SCSI_QLA6312 is not set | ||
451 | # CONFIG_SCSI_QLA24XX is not set | ||
452 | # CONFIG_SCSI_LPFC is not set | 472 | # CONFIG_SCSI_LPFC is not set |
453 | # CONFIG_SCSI_DC395x is not set | 473 | # CONFIG_SCSI_DC395x is not set |
454 | # CONFIG_SCSI_DC390T is not set | 474 | # CONFIG_SCSI_DC390T is not set |
@@ -465,6 +485,7 @@ CONFIG_SCSI_QLA2XXX=y | |||
465 | CONFIG_FUSION=y | 485 | CONFIG_FUSION=y |
466 | CONFIG_FUSION_SPI=y | 486 | CONFIG_FUSION_SPI=y |
467 | CONFIG_FUSION_FC=y | 487 | CONFIG_FUSION_FC=y |
488 | # CONFIG_FUSION_SAS is not set | ||
468 | CONFIG_FUSION_MAX_SGE=128 | 489 | CONFIG_FUSION_MAX_SGE=128 |
469 | CONFIG_FUSION_CTL=m | 490 | CONFIG_FUSION_CTL=m |
470 | 491 | ||
@@ -505,6 +526,7 @@ CONFIG_NET_ETHERNET=y | |||
505 | CONFIG_MII=y | 526 | CONFIG_MII=y |
506 | # CONFIG_HAPPYMEAL is not set | 527 | # CONFIG_HAPPYMEAL is not set |
507 | # CONFIG_SUNGEM is not set | 528 | # CONFIG_SUNGEM is not set |
529 | # CONFIG_CASSINI is not set | ||
508 | # CONFIG_NET_VENDOR_3COM is not set | 530 | # CONFIG_NET_VENDOR_3COM is not set |
509 | 531 | ||
510 | # | 532 | # |
@@ -555,6 +577,7 @@ CONFIG_E1000=y | |||
555 | # CONFIG_R8169 is not set | 577 | # CONFIG_R8169 is not set |
556 | # CONFIG_SIS190 is not set | 578 | # CONFIG_SIS190 is not set |
557 | # CONFIG_SKGE is not set | 579 | # CONFIG_SKGE is not set |
580 | # CONFIG_SKY2 is not set | ||
558 | # CONFIG_SK98LIN is not set | 581 | # CONFIG_SK98LIN is not set |
559 | # CONFIG_VIA_VELOCITY is not set | 582 | # CONFIG_VIA_VELOCITY is not set |
560 | CONFIG_TIGON3=y | 583 | CONFIG_TIGON3=y |
@@ -652,6 +675,7 @@ CONFIG_SERIAL_8250=y | |||
652 | CONFIG_SERIAL_8250_CONSOLE=y | 675 | CONFIG_SERIAL_8250_CONSOLE=y |
653 | CONFIG_SERIAL_8250_ACPI=y | 676 | CONFIG_SERIAL_8250_ACPI=y |
654 | CONFIG_SERIAL_8250_NR_UARTS=8 | 677 | CONFIG_SERIAL_8250_NR_UARTS=8 |
678 | CONFIG_SERIAL_8250_RUNTIME_UARTS=4 | ||
655 | CONFIG_SERIAL_8250_EXTENDED=y | 679 | CONFIG_SERIAL_8250_EXTENDED=y |
656 | CONFIG_SERIAL_8250_SHARE_IRQ=y | 680 | CONFIG_SERIAL_8250_SHARE_IRQ=y |
657 | # CONFIG_SERIAL_8250_DETECT_IRQ is not set | 681 | # CONFIG_SERIAL_8250_DETECT_IRQ is not set |
@@ -703,6 +727,7 @@ CONFIG_DRM_RADEON=y | |||
703 | # TPM devices | 727 | # TPM devices |
704 | # | 728 | # |
705 | # CONFIG_TCG_TPM is not set | 729 | # CONFIG_TCG_TPM is not set |
730 | # CONFIG_TELCLOCK is not set | ||
706 | 731 | ||
707 | # | 732 | # |
708 | # I2C support | 733 | # I2C support |
@@ -753,12 +778,19 @@ CONFIG_I2C_ALGOPCF=y | |||
753 | # CONFIG_SENSORS_PCF8591 is not set | 778 | # CONFIG_SENSORS_PCF8591 is not set |
754 | # CONFIG_SENSORS_RTC8564 is not set | 779 | # CONFIG_SENSORS_RTC8564 is not set |
755 | # CONFIG_SENSORS_MAX6875 is not set | 780 | # CONFIG_SENSORS_MAX6875 is not set |
781 | # CONFIG_RTC_X1205_I2C is not set | ||
756 | # CONFIG_I2C_DEBUG_CORE is not set | 782 | # CONFIG_I2C_DEBUG_CORE is not set |
757 | # CONFIG_I2C_DEBUG_ALGO is not set | 783 | # CONFIG_I2C_DEBUG_ALGO is not set |
758 | # CONFIG_I2C_DEBUG_BUS is not set | 784 | # CONFIG_I2C_DEBUG_BUS is not set |
759 | # CONFIG_I2C_DEBUG_CHIP is not set | 785 | # CONFIG_I2C_DEBUG_CHIP is not set |
760 | 786 | ||
761 | # | 787 | # |
788 | # SPI support | ||
789 | # | ||
790 | # CONFIG_SPI is not set | ||
791 | # CONFIG_SPI_MASTER is not set | ||
792 | |||
793 | # | ||
762 | # Dallas's 1-wire bus | 794 | # Dallas's 1-wire bus |
763 | # | 795 | # |
764 | # CONFIG_W1 is not set | 796 | # CONFIG_W1 is not set |
@@ -789,6 +821,7 @@ CONFIG_VIDEO_DEV=y | |||
789 | # | 821 | # |
790 | # Video Adapters | 822 | # Video Adapters |
791 | # | 823 | # |
824 | # CONFIG_VIDEO_ADV_DEBUG is not set | ||
792 | # CONFIG_VIDEO_BT848 is not set | 825 | # CONFIG_VIDEO_BT848 is not set |
793 | # CONFIG_VIDEO_CPIA is not set | 826 | # CONFIG_VIDEO_CPIA is not set |
794 | # CONFIG_VIDEO_SAA5246A is not set | 827 | # CONFIG_VIDEO_SAA5246A is not set |
@@ -796,14 +829,16 @@ CONFIG_VIDEO_DEV=y | |||
796 | # CONFIG_TUNER_3036 is not set | 829 | # CONFIG_TUNER_3036 is not set |
797 | # CONFIG_VIDEO_STRADIS is not set | 830 | # CONFIG_VIDEO_STRADIS is not set |
798 | # CONFIG_VIDEO_ZORAN is not set | 831 | # CONFIG_VIDEO_ZORAN is not set |
799 | # CONFIG_VIDEO_ZR36120 is not set | ||
800 | # CONFIG_VIDEO_SAA7134 is not set | 832 | # CONFIG_VIDEO_SAA7134 is not set |
801 | # CONFIG_VIDEO_MXB is not set | 833 | # CONFIG_VIDEO_MXB is not set |
802 | # CONFIG_VIDEO_DPC is not set | 834 | # CONFIG_VIDEO_DPC is not set |
803 | # CONFIG_VIDEO_HEXIUM_ORION is not set | 835 | # CONFIG_VIDEO_HEXIUM_ORION is not set |
804 | # CONFIG_VIDEO_HEXIUM_GEMINI is not set | 836 | # CONFIG_VIDEO_HEXIUM_GEMINI is not set |
805 | # CONFIG_VIDEO_CX88 is not set | 837 | # CONFIG_VIDEO_CX88 is not set |
838 | # CONFIG_VIDEO_EM28XX is not set | ||
806 | # CONFIG_VIDEO_OVCAMCHIP is not set | 839 | # CONFIG_VIDEO_OVCAMCHIP is not set |
840 | # CONFIG_VIDEO_AUDIO_DECODER is not set | ||
841 | # CONFIG_VIDEO_DECODER is not set | ||
807 | 842 | ||
808 | # | 843 | # |
809 | # Radio Adapters | 844 | # Radio Adapters |
@@ -824,7 +859,6 @@ CONFIG_FB=y | |||
824 | CONFIG_FB_CFB_FILLRECT=y | 859 | CONFIG_FB_CFB_FILLRECT=y |
825 | CONFIG_FB_CFB_COPYAREA=y | 860 | CONFIG_FB_CFB_COPYAREA=y |
826 | CONFIG_FB_CFB_IMAGEBLIT=y | 861 | CONFIG_FB_CFB_IMAGEBLIT=y |
827 | CONFIG_FB_SOFT_CURSOR=y | ||
828 | # CONFIG_FB_MACMODES is not set | 862 | # CONFIG_FB_MACMODES is not set |
829 | CONFIG_FB_MODE_HELPERS=y | 863 | CONFIG_FB_MODE_HELPERS=y |
830 | # CONFIG_FB_TILEBLITTING is not set | 864 | # CONFIG_FB_TILEBLITTING is not set |
@@ -833,6 +867,7 @@ CONFIG_FB_MODE_HELPERS=y | |||
833 | # CONFIG_FB_CYBER2000 is not set | 867 | # CONFIG_FB_CYBER2000 is not set |
834 | # CONFIG_FB_ASILIANT is not set | 868 | # CONFIG_FB_ASILIANT is not set |
835 | # CONFIG_FB_IMSTT is not set | 869 | # CONFIG_FB_IMSTT is not set |
870 | # CONFIG_FB_S1D13XXX is not set | ||
836 | # CONFIG_FB_NVIDIA is not set | 871 | # CONFIG_FB_NVIDIA is not set |
837 | # CONFIG_FB_RIVA is not set | 872 | # CONFIG_FB_RIVA is not set |
838 | # CONFIG_FB_MATROX is not set | 873 | # CONFIG_FB_MATROX is not set |
@@ -848,10 +883,7 @@ CONFIG_FB_RADEON_DEBUG=y | |||
848 | # CONFIG_FB_KYRO is not set | 883 | # CONFIG_FB_KYRO is not set |
849 | # CONFIG_FB_3DFX is not set | 884 | # CONFIG_FB_3DFX is not set |
850 | # CONFIG_FB_VOODOO1 is not set | 885 | # CONFIG_FB_VOODOO1 is not set |
851 | # CONFIG_FB_CYBLA is not set | ||
852 | # CONFIG_FB_TRIDENT is not set | 886 | # CONFIG_FB_TRIDENT is not set |
853 | # CONFIG_FB_PM3 is not set | ||
854 | # CONFIG_FB_S1D13XXX is not set | ||
855 | # CONFIG_FB_VIRTUAL is not set | 887 | # CONFIG_FB_VIRTUAL is not set |
856 | 888 | ||
857 | # | 889 | # |
@@ -860,6 +892,7 @@ CONFIG_FB_RADEON_DEBUG=y | |||
860 | CONFIG_VGA_CONSOLE=y | 892 | CONFIG_VGA_CONSOLE=y |
861 | CONFIG_DUMMY_CONSOLE=y | 893 | CONFIG_DUMMY_CONSOLE=y |
862 | CONFIG_FRAMEBUFFER_CONSOLE=y | 894 | CONFIG_FRAMEBUFFER_CONSOLE=y |
895 | # CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set | ||
863 | # CONFIG_FONTS is not set | 896 | # CONFIG_FONTS is not set |
864 | CONFIG_FONT_8x8=y | 897 | CONFIG_FONT_8x8=y |
865 | CONFIG_FONT_8x16=y | 898 | CONFIG_FONT_8x16=y |
@@ -892,6 +925,8 @@ CONFIG_SND_OSSEMUL=y | |||
892 | CONFIG_SND_MIXER_OSS=y | 925 | CONFIG_SND_MIXER_OSS=y |
893 | CONFIG_SND_PCM_OSS=y | 926 | CONFIG_SND_PCM_OSS=y |
894 | CONFIG_SND_SEQUENCER_OSS=y | 927 | CONFIG_SND_SEQUENCER_OSS=y |
928 | # CONFIG_SND_DYNAMIC_MINORS is not set | ||
929 | CONFIG_SND_SUPPORT_OLD_API=y | ||
895 | # CONFIG_SND_VERBOSE_PRINTK is not set | 930 | # CONFIG_SND_VERBOSE_PRINTK is not set |
896 | # CONFIG_SND_DEBUG is not set | 931 | # CONFIG_SND_DEBUG is not set |
897 | 932 | ||
@@ -900,17 +935,18 @@ CONFIG_SND_SEQUENCER_OSS=y | |||
900 | # | 935 | # |
901 | CONFIG_SND_MPU401_UART=y | 936 | CONFIG_SND_MPU401_UART=y |
902 | CONFIG_SND_OPL3_LIB=y | 937 | CONFIG_SND_OPL3_LIB=y |
938 | CONFIG_SND_AC97_CODEC=y | ||
939 | CONFIG_SND_AC97_BUS=y | ||
903 | # CONFIG_SND_DUMMY is not set | 940 | # CONFIG_SND_DUMMY is not set |
904 | # CONFIG_SND_VIRMIDI is not set | 941 | # CONFIG_SND_VIRMIDI is not set |
905 | # CONFIG_SND_MTPAV is not set | 942 | # CONFIG_SND_MTPAV is not set |
906 | # CONFIG_SND_SERIAL_U16550 is not set | 943 | # CONFIG_SND_SERIAL_U16550 is not set |
907 | # CONFIG_SND_MPU401 is not set | 944 | # CONFIG_SND_MPU401 is not set |
908 | CONFIG_SND_AC97_CODEC=y | ||
909 | CONFIG_SND_AC97_BUS=y | ||
910 | 945 | ||
911 | # | 946 | # |
912 | # PCI devices | 947 | # PCI devices |
913 | # | 948 | # |
949 | # CONFIG_SND_AD1889 is not set | ||
914 | # CONFIG_SND_ALI5451 is not set | 950 | # CONFIG_SND_ALI5451 is not set |
915 | # CONFIG_SND_ATIIXP is not set | 951 | # CONFIG_SND_ATIIXP is not set |
916 | # CONFIG_SND_ATIIXP_MODEM is not set | 952 | # CONFIG_SND_ATIIXP_MODEM is not set |
@@ -919,39 +955,39 @@ CONFIG_SND_AC97_BUS=y | |||
919 | # CONFIG_SND_AU8830 is not set | 955 | # CONFIG_SND_AU8830 is not set |
920 | # CONFIG_SND_AZT3328 is not set | 956 | # CONFIG_SND_AZT3328 is not set |
921 | # CONFIG_SND_BT87X is not set | 957 | # CONFIG_SND_BT87X is not set |
922 | # CONFIG_SND_CS46XX is not set | 958 | # CONFIG_SND_CA0106 is not set |
959 | # CONFIG_SND_CMIPCI is not set | ||
923 | # CONFIG_SND_CS4281 is not set | 960 | # CONFIG_SND_CS4281 is not set |
961 | # CONFIG_SND_CS46XX is not set | ||
924 | # CONFIG_SND_EMU10K1 is not set | 962 | # CONFIG_SND_EMU10K1 is not set |
925 | # CONFIG_SND_EMU10K1X is not set | 963 | # CONFIG_SND_EMU10K1X is not set |
926 | # CONFIG_SND_CA0106 is not set | ||
927 | # CONFIG_SND_KORG1212 is not set | ||
928 | # CONFIG_SND_MIXART is not set | ||
929 | # CONFIG_SND_NM256 is not set | ||
930 | # CONFIG_SND_RME32 is not set | ||
931 | # CONFIG_SND_RME96 is not set | ||
932 | # CONFIG_SND_RME9652 is not set | ||
933 | # CONFIG_SND_HDSP is not set | ||
934 | # CONFIG_SND_HDSPM is not set | ||
935 | # CONFIG_SND_TRIDENT is not set | ||
936 | # CONFIG_SND_YMFPCI is not set | ||
937 | # CONFIG_SND_AD1889 is not set | ||
938 | # CONFIG_SND_CMIPCI is not set | ||
939 | # CONFIG_SND_ENS1370 is not set | 964 | # CONFIG_SND_ENS1370 is not set |
940 | # CONFIG_SND_ENS1371 is not set | 965 | # CONFIG_SND_ENS1371 is not set |
941 | # CONFIG_SND_ES1938 is not set | 966 | # CONFIG_SND_ES1938 is not set |
942 | # CONFIG_SND_ES1968 is not set | 967 | # CONFIG_SND_ES1968 is not set |
943 | # CONFIG_SND_MAESTRO3 is not set | ||
944 | CONFIG_SND_FM801=y | 968 | CONFIG_SND_FM801=y |
945 | CONFIG_SND_FM801_TEA575X=y | 969 | CONFIG_SND_FM801_TEA575X=y |
970 | # CONFIG_SND_HDA_INTEL is not set | ||
971 | # CONFIG_SND_HDSP is not set | ||
972 | # CONFIG_SND_HDSPM is not set | ||
946 | # CONFIG_SND_ICE1712 is not set | 973 | # CONFIG_SND_ICE1712 is not set |
947 | # CONFIG_SND_ICE1724 is not set | 974 | # CONFIG_SND_ICE1724 is not set |
948 | # CONFIG_SND_INTEL8X0 is not set | 975 | # CONFIG_SND_INTEL8X0 is not set |
949 | # CONFIG_SND_INTEL8X0M is not set | 976 | # CONFIG_SND_INTEL8X0M is not set |
977 | # CONFIG_SND_KORG1212 is not set | ||
978 | # CONFIG_SND_MAESTRO3 is not set | ||
979 | # CONFIG_SND_MIXART is not set | ||
980 | # CONFIG_SND_NM256 is not set | ||
981 | # CONFIG_SND_PCXHR is not set | ||
982 | # CONFIG_SND_RME32 is not set | ||
983 | # CONFIG_SND_RME96 is not set | ||
984 | # CONFIG_SND_RME9652 is not set | ||
950 | # CONFIG_SND_SONICVIBES is not set | 985 | # CONFIG_SND_SONICVIBES is not set |
986 | # CONFIG_SND_TRIDENT is not set | ||
951 | # CONFIG_SND_VIA82XX is not set | 987 | # CONFIG_SND_VIA82XX is not set |
952 | # CONFIG_SND_VIA82XX_MODEM is not set | 988 | # CONFIG_SND_VIA82XX_MODEM is not set |
953 | # CONFIG_SND_VX222 is not set | 989 | # CONFIG_SND_VX222 is not set |
954 | # CONFIG_SND_HDA_INTEL is not set | 990 | # CONFIG_SND_YMFPCI is not set |
955 | 991 | ||
956 | # | 992 | # |
957 | # USB devices | 993 | # USB devices |
@@ -997,12 +1033,15 @@ CONFIG_USB_UHCI_HCD=y | |||
997 | # USB Device Class drivers | 1033 | # USB Device Class drivers |
998 | # | 1034 | # |
999 | # CONFIG_OBSOLETE_OSS_USB_DRIVER is not set | 1035 | # CONFIG_OBSOLETE_OSS_USB_DRIVER is not set |
1000 | # CONFIG_USB_BLUETOOTH_TTY is not set | ||
1001 | # CONFIG_USB_ACM is not set | 1036 | # CONFIG_USB_ACM is not set |
1002 | # CONFIG_USB_PRINTER is not set | 1037 | # CONFIG_USB_PRINTER is not set |
1003 | 1038 | ||
1004 | # | 1039 | # |
1005 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information | 1040 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' |
1041 | # | ||
1042 | |||
1043 | # | ||
1044 | # may also be needed; see USB_STORAGE Help for more information | ||
1006 | # | 1045 | # |
1007 | CONFIG_USB_STORAGE=y | 1046 | CONFIG_USB_STORAGE=y |
1008 | # CONFIG_USB_STORAGE_DEBUG is not set | 1047 | # CONFIG_USB_STORAGE_DEBUG is not set |
@@ -1014,13 +1053,15 @@ CONFIG_USB_STORAGE=y | |||
1014 | # CONFIG_USB_STORAGE_SDDR09 is not set | 1053 | # CONFIG_USB_STORAGE_SDDR09 is not set |
1015 | # CONFIG_USB_STORAGE_SDDR55 is not set | 1054 | # CONFIG_USB_STORAGE_SDDR55 is not set |
1016 | # CONFIG_USB_STORAGE_JUMPSHOT is not set | 1055 | # CONFIG_USB_STORAGE_JUMPSHOT is not set |
1017 | # CONFIG_USB_STORAGE_ONETOUCH is not set | 1056 | # CONFIG_USB_STORAGE_ALAUDA is not set |
1057 | # CONFIG_USB_LIBUSUAL is not set | ||
1018 | 1058 | ||
1019 | # | 1059 | # |
1020 | # USB Input Devices | 1060 | # USB Input Devices |
1021 | # | 1061 | # |
1022 | CONFIG_USB_HID=y | 1062 | CONFIG_USB_HID=y |
1023 | CONFIG_USB_HIDINPUT=y | 1063 | CONFIG_USB_HIDINPUT=y |
1064 | # CONFIG_USB_HIDINPUT_POWERBOOK is not set | ||
1024 | # CONFIG_HID_FF is not set | 1065 | # CONFIG_HID_FF is not set |
1025 | CONFIG_USB_HIDDEV=y | 1066 | CONFIG_USB_HIDDEV=y |
1026 | # CONFIG_USB_AIPTEK is not set | 1067 | # CONFIG_USB_AIPTEK is not set |
@@ -1034,6 +1075,7 @@ CONFIG_USB_HIDDEV=y | |||
1034 | # CONFIG_USB_YEALINK is not set | 1075 | # CONFIG_USB_YEALINK is not set |
1035 | # CONFIG_USB_XPAD is not set | 1076 | # CONFIG_USB_XPAD is not set |
1036 | # CONFIG_USB_ATI_REMOTE is not set | 1077 | # CONFIG_USB_ATI_REMOTE is not set |
1078 | # CONFIG_USB_ATI_REMOTE2 is not set | ||
1037 | # CONFIG_USB_KEYSPAN_REMOTE is not set | 1079 | # CONFIG_USB_KEYSPAN_REMOTE is not set |
1038 | # CONFIG_USB_APPLETOUCH is not set | 1080 | # CONFIG_USB_APPLETOUCH is not set |
1039 | 1081 | ||
@@ -1049,6 +1091,7 @@ CONFIG_USB_HIDDEV=y | |||
1049 | # CONFIG_USB_DABUSB is not set | 1091 | # CONFIG_USB_DABUSB is not set |
1050 | # CONFIG_USB_VICAM is not set | 1092 | # CONFIG_USB_VICAM is not set |
1051 | # CONFIG_USB_DSBR is not set | 1093 | # CONFIG_USB_DSBR is not set |
1094 | # CONFIG_USB_ET61X251 is not set | ||
1052 | # CONFIG_USB_IBMCAM is not set | 1095 | # CONFIG_USB_IBMCAM is not set |
1053 | # CONFIG_USB_KONICAWC is not set | 1096 | # CONFIG_USB_KONICAWC is not set |
1054 | # CONFIG_USB_OV511 is not set | 1097 | # CONFIG_USB_OV511 is not set |
@@ -1113,7 +1156,7 @@ CONFIG_USB_MON=y | |||
1113 | # CONFIG_INFINIBAND is not set | 1156 | # CONFIG_INFINIBAND is not set |
1114 | 1157 | ||
1115 | # | 1158 | # |
1116 | # SN Devices | 1159 | # EDAC - error detection and reporting (RAS) |
1117 | # | 1160 | # |
1118 | 1161 | ||
1119 | # | 1162 | # |
@@ -1135,6 +1178,7 @@ CONFIG_FS_MBCACHE=y | |||
1135 | # CONFIG_JFS_FS is not set | 1178 | # CONFIG_JFS_FS is not set |
1136 | # CONFIG_FS_POSIX_ACL is not set | 1179 | # CONFIG_FS_POSIX_ACL is not set |
1137 | # CONFIG_XFS_FS is not set | 1180 | # CONFIG_XFS_FS is not set |
1181 | # CONFIG_OCFS2_FS is not set | ||
1138 | # CONFIG_MINIX_FS is not set | 1182 | # CONFIG_MINIX_FS is not set |
1139 | # CONFIG_ROMFS_FS is not set | 1183 | # CONFIG_ROMFS_FS is not set |
1140 | # CONFIG_INOTIFY is not set | 1184 | # CONFIG_INOTIFY is not set |
@@ -1174,6 +1218,7 @@ CONFIG_HUGETLBFS=y | |||
1174 | CONFIG_HUGETLB_PAGE=y | 1218 | CONFIG_HUGETLB_PAGE=y |
1175 | CONFIG_RAMFS=y | 1219 | CONFIG_RAMFS=y |
1176 | # CONFIG_RELAYFS_FS is not set | 1220 | # CONFIG_RELAYFS_FS is not set |
1221 | # CONFIG_CONFIGFS_FS is not set | ||
1177 | 1222 | ||
1178 | # | 1223 | # |
1179 | # Miscellaneous filesystems | 1224 | # Miscellaneous filesystems |
@@ -1238,6 +1283,7 @@ CONFIG_MSDOS_PARTITION=y | |||
1238 | # CONFIG_SGI_PARTITION is not set | 1283 | # CONFIG_SGI_PARTITION is not set |
1239 | # CONFIG_ULTRIX_PARTITION is not set | 1284 | # CONFIG_ULTRIX_PARTITION is not set |
1240 | # CONFIG_SUN_PARTITION is not set | 1285 | # CONFIG_SUN_PARTITION is not set |
1286 | # CONFIG_KARMA_PARTITION is not set | ||
1241 | CONFIG_EFI_PARTITION=y | 1287 | CONFIG_EFI_PARTITION=y |
1242 | 1288 | ||
1243 | # | 1289 | # |
@@ -1296,26 +1342,30 @@ CONFIG_GENERIC_IRQ_PROBE=y | |||
1296 | CONFIG_GENERIC_PENDING_IRQ=y | 1342 | CONFIG_GENERIC_PENDING_IRQ=y |
1297 | 1343 | ||
1298 | # | 1344 | # |
1299 | # Profiling support | 1345 | # Instrumentation Support |
1300 | # | 1346 | # |
1301 | # CONFIG_PROFILING is not set | 1347 | # CONFIG_PROFILING is not set |
1348 | CONFIG_KPROBES=y | ||
1302 | 1349 | ||
1303 | # | 1350 | # |
1304 | # Kernel hacking | 1351 | # Kernel hacking |
1305 | # | 1352 | # |
1306 | # CONFIG_PRINTK_TIME is not set | 1353 | # CONFIG_PRINTK_TIME is not set |
1307 | CONFIG_DEBUG_KERNEL=y | ||
1308 | CONFIG_MAGIC_SYSRQ=y | 1354 | CONFIG_MAGIC_SYSRQ=y |
1355 | CONFIG_DEBUG_KERNEL=y | ||
1309 | CONFIG_LOG_BUF_SHIFT=17 | 1356 | CONFIG_LOG_BUF_SHIFT=17 |
1310 | CONFIG_DETECT_SOFTLOCKUP=y | 1357 | CONFIG_DETECT_SOFTLOCKUP=y |
1311 | # CONFIG_SCHEDSTATS is not set | 1358 | # CONFIG_SCHEDSTATS is not set |
1312 | # CONFIG_DEBUG_SLAB is not set | 1359 | # CONFIG_DEBUG_SLAB is not set |
1360 | CONFIG_DEBUG_MUTEXES=y | ||
1313 | # CONFIG_DEBUG_SPINLOCK is not set | 1361 | # CONFIG_DEBUG_SPINLOCK is not set |
1314 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | 1362 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set |
1315 | # CONFIG_DEBUG_KOBJECT is not set | 1363 | # CONFIG_DEBUG_KOBJECT is not set |
1316 | # CONFIG_DEBUG_INFO is not set | 1364 | # CONFIG_DEBUG_INFO is not set |
1317 | # CONFIG_DEBUG_FS is not set | 1365 | # CONFIG_DEBUG_FS is not set |
1318 | CONFIG_KPROBES=y | 1366 | # CONFIG_DEBUG_VM is not set |
1367 | CONFIG_FORCED_INLINING=y | ||
1368 | # CONFIG_RCU_TORTURE_TEST is not set | ||
1319 | CONFIG_IA64_GRANULE_16MB=y | 1369 | CONFIG_IA64_GRANULE_16MB=y |
1320 | # CONFIG_IA64_GRANULE_64MB is not set | 1370 | # CONFIG_IA64_GRANULE_64MB is not set |
1321 | CONFIG_IA64_PRINT_HAZARDS=y | 1371 | CONFIG_IA64_PRINT_HAZARDS=y |
diff --git a/arch/ia64/defconfig b/arch/ia64/defconfig index dcbc78a4cfa4..3e767288a745 100644 --- a/arch/ia64/defconfig +++ b/arch/ia64/defconfig | |||
@@ -1,14 +1,13 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.14-rc1 | 3 | # Linux kernel version: 2.6.16-rc5 |
4 | # Wed Sep 14 15:13:03 2005 | 4 | # Mon Feb 27 16:02:28 2006 |
5 | # | 5 | # |
6 | 6 | ||
7 | # | 7 | # |
8 | # Code maturity level options | 8 | # Code maturity level options |
9 | # | 9 | # |
10 | CONFIG_EXPERIMENTAL=y | 10 | CONFIG_EXPERIMENTAL=y |
11 | CONFIG_CLEAN_COMPILE=y | ||
12 | CONFIG_LOCK_KERNEL=y | 11 | CONFIG_LOCK_KERNEL=y |
13 | CONFIG_INIT_ENV_ARG_LIMIT=32 | 12 | CONFIG_INIT_ENV_ARG_LIMIT=32 |
14 | 13 | ||
@@ -23,18 +22,19 @@ CONFIG_POSIX_MQUEUE=y | |||
23 | # CONFIG_BSD_PROCESS_ACCT is not set | 22 | # CONFIG_BSD_PROCESS_ACCT is not set |
24 | CONFIG_SYSCTL=y | 23 | CONFIG_SYSCTL=y |
25 | # CONFIG_AUDIT is not set | 24 | # CONFIG_AUDIT is not set |
26 | CONFIG_HOTPLUG=y | ||
27 | CONFIG_KOBJECT_UEVENT=y | ||
28 | CONFIG_IKCONFIG=y | 25 | CONFIG_IKCONFIG=y |
29 | CONFIG_IKCONFIG_PROC=y | 26 | CONFIG_IKCONFIG_PROC=y |
30 | # CONFIG_CPUSETS is not set | 27 | # CONFIG_CPUSETS is not set |
31 | CONFIG_INITRAMFS_SOURCE="" | 28 | CONFIG_INITRAMFS_SOURCE="" |
29 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
32 | # CONFIG_EMBEDDED is not set | 30 | # CONFIG_EMBEDDED is not set |
33 | CONFIG_KALLSYMS=y | 31 | CONFIG_KALLSYMS=y |
34 | CONFIG_KALLSYMS_ALL=y | 32 | CONFIG_KALLSYMS_ALL=y |
35 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 33 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
34 | CONFIG_HOTPLUG=y | ||
36 | CONFIG_PRINTK=y | 35 | CONFIG_PRINTK=y |
37 | CONFIG_BUG=y | 36 | CONFIG_BUG=y |
37 | CONFIG_ELF_CORE=y | ||
38 | CONFIG_BASE_FULL=y | 38 | CONFIG_BASE_FULL=y |
39 | CONFIG_FUTEX=y | 39 | CONFIG_FUTEX=y |
40 | CONFIG_EPOLL=y | 40 | CONFIG_EPOLL=y |
@@ -43,8 +43,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0 | |||
43 | CONFIG_CC_ALIGN_LABELS=0 | 43 | CONFIG_CC_ALIGN_LABELS=0 |
44 | CONFIG_CC_ALIGN_LOOPS=0 | 44 | CONFIG_CC_ALIGN_LOOPS=0 |
45 | CONFIG_CC_ALIGN_JUMPS=0 | 45 | CONFIG_CC_ALIGN_JUMPS=0 |
46 | CONFIG_SLAB=y | ||
46 | # CONFIG_TINY_SHMEM is not set | 47 | # CONFIG_TINY_SHMEM is not set |
47 | CONFIG_BASE_SMALL=0 | 48 | CONFIG_BASE_SMALL=0 |
49 | # CONFIG_SLOB is not set | ||
48 | 50 | ||
49 | # | 51 | # |
50 | # Loadable module support | 52 | # Loadable module support |
@@ -59,17 +61,36 @@ CONFIG_KMOD=y | |||
59 | CONFIG_STOP_MACHINE=y | 61 | CONFIG_STOP_MACHINE=y |
60 | 62 | ||
61 | # | 63 | # |
64 | # Block layer | ||
65 | # | ||
66 | |||
67 | # | ||
68 | # IO Schedulers | ||
69 | # | ||
70 | CONFIG_IOSCHED_NOOP=y | ||
71 | CONFIG_IOSCHED_AS=y | ||
72 | CONFIG_IOSCHED_DEADLINE=y | ||
73 | CONFIG_IOSCHED_CFQ=y | ||
74 | CONFIG_DEFAULT_AS=y | ||
75 | # CONFIG_DEFAULT_DEADLINE is not set | ||
76 | # CONFIG_DEFAULT_CFQ is not set | ||
77 | # CONFIG_DEFAULT_NOOP is not set | ||
78 | CONFIG_DEFAULT_IOSCHED="anticipatory" | ||
79 | |||
80 | # | ||
62 | # Processor type and features | 81 | # Processor type and features |
63 | # | 82 | # |
64 | CONFIG_IA64=y | 83 | CONFIG_IA64=y |
65 | CONFIG_64BIT=y | 84 | CONFIG_64BIT=y |
66 | CONFIG_MMU=y | 85 | CONFIG_MMU=y |
86 | CONFIG_SWIOTLB=y | ||
67 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | 87 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y |
68 | CONFIG_GENERIC_CALIBRATE_DELAY=y | 88 | CONFIG_GENERIC_CALIBRATE_DELAY=y |
69 | CONFIG_TIME_INTERPOLATION=y | 89 | CONFIG_TIME_INTERPOLATION=y |
70 | CONFIG_EFI=y | 90 | CONFIG_EFI=y |
71 | CONFIG_GENERIC_IOMAP=y | 91 | CONFIG_GENERIC_IOMAP=y |
72 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | 92 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y |
93 | CONFIG_DMA_IS_DMA32=y | ||
73 | CONFIG_IA64_GENERIC=y | 94 | CONFIG_IA64_GENERIC=y |
74 | # CONFIG_IA64_DIG is not set | 95 | # CONFIG_IA64_DIG is not set |
75 | # CONFIG_IA64_HP_ZX1 is not set | 96 | # CONFIG_IA64_HP_ZX1 is not set |
@@ -89,14 +110,10 @@ CONFIG_HZ_250=y | |||
89 | # CONFIG_HZ_1000 is not set | 110 | # CONFIG_HZ_1000 is not set |
90 | CONFIG_HZ=250 | 111 | CONFIG_HZ=250 |
91 | CONFIG_IA64_L1_CACHE_SHIFT=7 | 112 | CONFIG_IA64_L1_CACHE_SHIFT=7 |
92 | CONFIG_NUMA=y | ||
93 | CONFIG_VIRTUAL_MEM_MAP=y | ||
94 | CONFIG_HOLES_IN_ZONE=y | ||
95 | CONFIG_ARCH_DISCONTIGMEM_ENABLE=y | ||
96 | CONFIG_IA64_CYCLONE=y | 113 | CONFIG_IA64_CYCLONE=y |
97 | CONFIG_IOSAPIC=y | 114 | CONFIG_IOSAPIC=y |
98 | # CONFIG_IA64_SGI_SN_XP is not set | 115 | # CONFIG_IA64_SGI_SN_XP is not set |
99 | CONFIG_FORCE_MAX_ZONEORDER=18 | 116 | CONFIG_FORCE_MAX_ZONEORDER=17 |
100 | CONFIG_SMP=y | 117 | CONFIG_SMP=y |
101 | CONFIG_NR_CPUS=512 | 118 | CONFIG_NR_CPUS=512 |
102 | CONFIG_HOTPLUG_CPU=y | 119 | CONFIG_HOTPLUG_CPU=y |
@@ -110,19 +127,29 @@ CONFIG_DISCONTIGMEM=y | |||
110 | CONFIG_FLAT_NODE_MEM_MAP=y | 127 | CONFIG_FLAT_NODE_MEM_MAP=y |
111 | CONFIG_NEED_MULTIPLE_NODES=y | 128 | CONFIG_NEED_MULTIPLE_NODES=y |
112 | # CONFIG_SPARSEMEM_STATIC is not set | 129 | # CONFIG_SPARSEMEM_STATIC is not set |
113 | CONFIG_HAVE_DEC_LOCK=y | 130 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
131 | CONFIG_MIGRATION=y | ||
132 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | ||
133 | CONFIG_ARCH_DISCONTIGMEM_ENABLE=y | ||
134 | CONFIG_ARCH_FLATMEM_ENABLE=y | ||
135 | CONFIG_ARCH_SPARSEMEM_ENABLE=y | ||
136 | CONFIG_ARCH_DISCONTIGMEM_DEFAULT=y | ||
137 | CONFIG_NUMA=y | ||
138 | CONFIG_VIRTUAL_MEM_MAP=y | ||
139 | CONFIG_HOLES_IN_ZONE=y | ||
140 | CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y | ||
114 | CONFIG_IA32_SUPPORT=y | 141 | CONFIG_IA32_SUPPORT=y |
115 | CONFIG_COMPAT=y | 142 | CONFIG_COMPAT=y |
116 | CONFIG_IA64_MCA_RECOVERY=y | 143 | CONFIG_IA64_MCA_RECOVERY=y |
117 | CONFIG_PERFMON=y | 144 | CONFIG_PERFMON=y |
118 | CONFIG_IA64_PALINFO=y | 145 | CONFIG_IA64_PALINFO=y |
146 | CONFIG_SGI_SN=y | ||
119 | 147 | ||
120 | # | 148 | # |
121 | # Firmware Drivers | 149 | # Firmware Drivers |
122 | # | 150 | # |
123 | CONFIG_EFI_VARS=y | 151 | CONFIG_EFI_VARS=y |
124 | CONFIG_EFI_PCDP=y | 152 | CONFIG_EFI_PCDP=y |
125 | # CONFIG_DELL_RBU is not set | ||
126 | CONFIG_BINFMT_ELF=y | 153 | CONFIG_BINFMT_ELF=y |
127 | CONFIG_BINFMT_MISC=m | 154 | CONFIG_BINFMT_MISC=m |
128 | 155 | ||
@@ -130,6 +157,7 @@ CONFIG_BINFMT_MISC=m | |||
130 | # Power management and ACPI | 157 | # Power management and ACPI |
131 | # | 158 | # |
132 | CONFIG_PM=y | 159 | CONFIG_PM=y |
160 | CONFIG_PM_LEGACY=y | ||
133 | # CONFIG_PM_DEBUG is not set | 161 | # CONFIG_PM_DEBUG is not set |
134 | 162 | ||
135 | # | 163 | # |
@@ -144,6 +172,7 @@ CONFIG_ACPI_THERMAL=m | |||
144 | CONFIG_ACPI_NUMA=y | 172 | CONFIG_ACPI_NUMA=y |
145 | CONFIG_ACPI_BLACKLIST_YEAR=0 | 173 | CONFIG_ACPI_BLACKLIST_YEAR=0 |
146 | # CONFIG_ACPI_DEBUG is not set | 174 | # CONFIG_ACPI_DEBUG is not set |
175 | CONFIG_ACPI_EC=y | ||
147 | CONFIG_ACPI_POWER=y | 176 | CONFIG_ACPI_POWER=y |
148 | CONFIG_ACPI_SYSTEM=y | 177 | CONFIG_ACPI_SYSTEM=y |
149 | CONFIG_ACPI_CONTAINER=m | 178 | CONFIG_ACPI_CONTAINER=m |
@@ -186,6 +215,7 @@ CONFIG_NET=y | |||
186 | # | 215 | # |
187 | # Networking options | 216 | # Networking options |
188 | # | 217 | # |
218 | # CONFIG_NETDEBUG is not set | ||
189 | CONFIG_PACKET=y | 219 | CONFIG_PACKET=y |
190 | # CONFIG_PACKET_MMAP is not set | 220 | # CONFIG_PACKET_MMAP is not set |
191 | CONFIG_UNIX=y | 221 | CONFIG_UNIX=y |
@@ -220,6 +250,11 @@ CONFIG_TCP_CONG_BIC=y | |||
220 | # SCTP Configuration (EXPERIMENTAL) | 250 | # SCTP Configuration (EXPERIMENTAL) |
221 | # | 251 | # |
222 | # CONFIG_IP_SCTP is not set | 252 | # CONFIG_IP_SCTP is not set |
253 | |||
254 | # | ||
255 | # TIPC Configuration (EXPERIMENTAL) | ||
256 | # | ||
257 | # CONFIG_TIPC is not set | ||
223 | # CONFIG_ATM is not set | 258 | # CONFIG_ATM is not set |
224 | # CONFIG_BRIDGE is not set | 259 | # CONFIG_BRIDGE is not set |
225 | # CONFIG_VLAN_8021Q is not set | 260 | # CONFIG_VLAN_8021Q is not set |
@@ -232,14 +267,16 @@ CONFIG_TCP_CONG_BIC=y | |||
232 | # CONFIG_NET_DIVERT is not set | 267 | # CONFIG_NET_DIVERT is not set |
233 | # CONFIG_ECONET is not set | 268 | # CONFIG_ECONET is not set |
234 | # CONFIG_WAN_ROUTER is not set | 269 | # CONFIG_WAN_ROUTER is not set |
270 | |||
271 | # | ||
272 | # QoS and/or fair queueing | ||
273 | # | ||
235 | # CONFIG_NET_SCHED is not set | 274 | # CONFIG_NET_SCHED is not set |
236 | # CONFIG_NET_CLS_ROUTE is not set | ||
237 | 275 | ||
238 | # | 276 | # |
239 | # Network testing | 277 | # Network testing |
240 | # | 278 | # |
241 | # CONFIG_NET_PKTGEN is not set | 279 | # CONFIG_NET_PKTGEN is not set |
242 | # CONFIG_NETFILTER_NETLINK is not set | ||
243 | # CONFIG_HAMRADIO is not set | 280 | # CONFIG_HAMRADIO is not set |
244 | # CONFIG_IRDA is not set | 281 | # CONFIG_IRDA is not set |
245 | # CONFIG_BT is not set | 282 | # CONFIG_BT is not set |
@@ -301,20 +338,13 @@ CONFIG_BLK_DEV_RAM_COUNT=16 | |||
301 | CONFIG_BLK_DEV_RAM_SIZE=4096 | 338 | CONFIG_BLK_DEV_RAM_SIZE=4096 |
302 | CONFIG_BLK_DEV_INITRD=y | 339 | CONFIG_BLK_DEV_INITRD=y |
303 | # CONFIG_CDROM_PKTCDVD is not set | 340 | # CONFIG_CDROM_PKTCDVD is not set |
304 | |||
305 | # | ||
306 | # IO Schedulers | ||
307 | # | ||
308 | CONFIG_IOSCHED_NOOP=y | ||
309 | CONFIG_IOSCHED_AS=y | ||
310 | CONFIG_IOSCHED_DEADLINE=y | ||
311 | CONFIG_IOSCHED_CFQ=y | ||
312 | # CONFIG_ATA_OVER_ETH is not set | 341 | # CONFIG_ATA_OVER_ETH is not set |
313 | 342 | ||
314 | # | 343 | # |
315 | # ATA/ATAPI/MFM/RLL support | 344 | # ATA/ATAPI/MFM/RLL support |
316 | # | 345 | # |
317 | CONFIG_IDE=y | 346 | CONFIG_IDE=y |
347 | CONFIG_IDE_MAX_HWIFS=4 | ||
318 | CONFIG_BLK_DEV_IDE=y | 348 | CONFIG_BLK_DEV_IDE=y |
319 | 349 | ||
320 | # | 350 | # |
@@ -407,6 +437,7 @@ CONFIG_SCSI_FC_ATTRS=y | |||
407 | # | 437 | # |
408 | # SCSI low-level drivers | 438 | # SCSI low-level drivers |
409 | # | 439 | # |
440 | # CONFIG_ISCSI_TCP is not set | ||
410 | # CONFIG_BLK_DEV_3W_XXXX_RAID is not set | 441 | # CONFIG_BLK_DEV_3W_XXXX_RAID is not set |
411 | # CONFIG_SCSI_3W_9XXX is not set | 442 | # CONFIG_SCSI_3W_9XXX is not set |
412 | # CONFIG_SCSI_ACARD is not set | 443 | # CONFIG_SCSI_ACARD is not set |
@@ -416,16 +447,19 @@ CONFIG_SCSI_FC_ATTRS=y | |||
416 | # CONFIG_SCSI_AIC79XX is not set | 447 | # CONFIG_SCSI_AIC79XX is not set |
417 | # CONFIG_MEGARAID_NEWGEN is not set | 448 | # CONFIG_MEGARAID_NEWGEN is not set |
418 | # CONFIG_MEGARAID_LEGACY is not set | 449 | # CONFIG_MEGARAID_LEGACY is not set |
450 | # CONFIG_MEGARAID_SAS is not set | ||
419 | CONFIG_SCSI_SATA=y | 451 | CONFIG_SCSI_SATA=y |
420 | # CONFIG_SCSI_SATA_AHCI is not set | 452 | # CONFIG_SCSI_SATA_AHCI is not set |
421 | # CONFIG_SCSI_SATA_SVW is not set | 453 | # CONFIG_SCSI_SATA_SVW is not set |
422 | # CONFIG_SCSI_ATA_PIIX is not set | 454 | # CONFIG_SCSI_ATA_PIIX is not set |
423 | # CONFIG_SCSI_SATA_MV is not set | 455 | # CONFIG_SCSI_SATA_MV is not set |
424 | # CONFIG_SCSI_SATA_NV is not set | 456 | # CONFIG_SCSI_SATA_NV is not set |
425 | # CONFIG_SCSI_SATA_PROMISE is not set | 457 | # CONFIG_SCSI_PDC_ADMA is not set |
426 | # CONFIG_SCSI_SATA_QSTOR is not set | 458 | # CONFIG_SCSI_SATA_QSTOR is not set |
459 | # CONFIG_SCSI_SATA_PROMISE is not set | ||
427 | # CONFIG_SCSI_SATA_SX4 is not set | 460 | # CONFIG_SCSI_SATA_SX4 is not set |
428 | # CONFIG_SCSI_SATA_SIL is not set | 461 | # CONFIG_SCSI_SATA_SIL is not set |
462 | # CONFIG_SCSI_SATA_SIL24 is not set | ||
429 | # CONFIG_SCSI_SATA_SIS is not set | 463 | # CONFIG_SCSI_SATA_SIS is not set |
430 | # CONFIG_SCSI_SATA_ULI is not set | 464 | # CONFIG_SCSI_SATA_ULI is not set |
431 | # CONFIG_SCSI_SATA_VIA is not set | 465 | # CONFIG_SCSI_SATA_VIA is not set |
@@ -443,14 +477,7 @@ CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 | |||
443 | # CONFIG_SCSI_IPR is not set | 477 | # CONFIG_SCSI_IPR is not set |
444 | # CONFIG_SCSI_QLOGIC_FC is not set | 478 | # CONFIG_SCSI_QLOGIC_FC is not set |
445 | CONFIG_SCSI_QLOGIC_1280=y | 479 | CONFIG_SCSI_QLOGIC_1280=y |
446 | # CONFIG_SCSI_QLOGIC_1280_1040 is not set | 480 | # CONFIG_SCSI_QLA_FC is not set |
447 | CONFIG_SCSI_QLA2XXX=y | ||
448 | CONFIG_SCSI_QLA21XX=m | ||
449 | CONFIG_SCSI_QLA22XX=m | ||
450 | CONFIG_SCSI_QLA2300=m | ||
451 | CONFIG_SCSI_QLA2322=m | ||
452 | # CONFIG_SCSI_QLA6312 is not set | ||
453 | # CONFIG_SCSI_QLA24XX is not set | ||
454 | # CONFIG_SCSI_LPFC is not set | 481 | # CONFIG_SCSI_LPFC is not set |
455 | # CONFIG_SCSI_DC395x is not set | 482 | # CONFIG_SCSI_DC395x is not set |
456 | # CONFIG_SCSI_DC390T is not set | 483 | # CONFIG_SCSI_DC390T is not set |
@@ -483,6 +510,7 @@ CONFIG_DM_MULTIPATH=m | |||
483 | CONFIG_FUSION=y | 510 | CONFIG_FUSION=y |
484 | CONFIG_FUSION_SPI=y | 511 | CONFIG_FUSION_SPI=y |
485 | CONFIG_FUSION_FC=m | 512 | CONFIG_FUSION_FC=m |
513 | # CONFIG_FUSION_SAS is not set | ||
486 | CONFIG_FUSION_MAX_SGE=128 | 514 | CONFIG_FUSION_MAX_SGE=128 |
487 | # CONFIG_FUSION_CTL is not set | 515 | # CONFIG_FUSION_CTL is not set |
488 | 516 | ||
@@ -523,6 +551,7 @@ CONFIG_NET_ETHERNET=y | |||
523 | CONFIG_MII=m | 551 | CONFIG_MII=m |
524 | # CONFIG_HAPPYMEAL is not set | 552 | # CONFIG_HAPPYMEAL is not set |
525 | # CONFIG_SUNGEM is not set | 553 | # CONFIG_SUNGEM is not set |
554 | # CONFIG_CASSINI is not set | ||
526 | # CONFIG_NET_VENDOR_3COM is not set | 555 | # CONFIG_NET_VENDOR_3COM is not set |
527 | 556 | ||
528 | # | 557 | # |
@@ -572,6 +601,7 @@ CONFIG_E1000=y | |||
572 | # CONFIG_R8169 is not set | 601 | # CONFIG_R8169 is not set |
573 | # CONFIG_SIS190 is not set | 602 | # CONFIG_SIS190 is not set |
574 | # CONFIG_SKGE is not set | 603 | # CONFIG_SKGE is not set |
604 | # CONFIG_SKY2 is not set | ||
575 | # CONFIG_SK98LIN is not set | 605 | # CONFIG_SK98LIN is not set |
576 | # CONFIG_VIA_VELOCITY is not set | 606 | # CONFIG_VIA_VELOCITY is not set |
577 | CONFIG_TIGON3=y | 607 | CONFIG_TIGON3=y |
@@ -676,12 +706,15 @@ CONFIG_VT=y | |||
676 | CONFIG_VT_CONSOLE=y | 706 | CONFIG_VT_CONSOLE=y |
677 | CONFIG_HW_CONSOLE=y | 707 | CONFIG_HW_CONSOLE=y |
678 | CONFIG_SERIAL_NONSTANDARD=y | 708 | CONFIG_SERIAL_NONSTANDARD=y |
709 | # CONFIG_COMPUTONE is not set | ||
679 | # CONFIG_ROCKETPORT is not set | 710 | # CONFIG_ROCKETPORT is not set |
680 | # CONFIG_CYCLADES is not set | 711 | # CONFIG_CYCLADES is not set |
681 | # CONFIG_DIGIEPCA is not set | 712 | # CONFIG_DIGIEPCA is not set |
713 | # CONFIG_MOXA_INTELLIO is not set | ||
682 | # CONFIG_MOXA_SMARTIO is not set | 714 | # CONFIG_MOXA_SMARTIO is not set |
683 | # CONFIG_ISI is not set | 715 | # CONFIG_ISI is not set |
684 | # CONFIG_SYNCLINKMP is not set | 716 | # CONFIG_SYNCLINKMP is not set |
717 | # CONFIG_SYNCLINK_GT is not set | ||
685 | # CONFIG_N_HDLC is not set | 718 | # CONFIG_N_HDLC is not set |
686 | # CONFIG_SPECIALIX is not set | 719 | # CONFIG_SPECIALIX is not set |
687 | # CONFIG_SX is not set | 720 | # CONFIG_SX is not set |
@@ -697,6 +730,7 @@ CONFIG_SERIAL_8250=y | |||
697 | CONFIG_SERIAL_8250_CONSOLE=y | 730 | CONFIG_SERIAL_8250_CONSOLE=y |
698 | CONFIG_SERIAL_8250_ACPI=y | 731 | CONFIG_SERIAL_8250_ACPI=y |
699 | CONFIG_SERIAL_8250_NR_UARTS=6 | 732 | CONFIG_SERIAL_8250_NR_UARTS=6 |
733 | CONFIG_SERIAL_8250_RUNTIME_UARTS=4 | ||
700 | CONFIG_SERIAL_8250_EXTENDED=y | 734 | CONFIG_SERIAL_8250_EXTENDED=y |
701 | CONFIG_SERIAL_8250_SHARE_IRQ=y | 735 | CONFIG_SERIAL_8250_SHARE_IRQ=y |
702 | # CONFIG_SERIAL_8250_DETECT_IRQ is not set | 736 | # CONFIG_SERIAL_8250_DETECT_IRQ is not set |
@@ -710,6 +744,7 @@ CONFIG_SERIAL_CORE_CONSOLE=y | |||
710 | CONFIG_SERIAL_SGI_L1_CONSOLE=y | 744 | CONFIG_SERIAL_SGI_L1_CONSOLE=y |
711 | # CONFIG_SERIAL_JSM is not set | 745 | # CONFIG_SERIAL_JSM is not set |
712 | CONFIG_SERIAL_SGI_IOC4=y | 746 | CONFIG_SERIAL_SGI_IOC4=y |
747 | # CONFIG_SERIAL_SGI_IOC3 is not set | ||
713 | CONFIG_UNIX98_PTYS=y | 748 | CONFIG_UNIX98_PTYS=y |
714 | CONFIG_LEGACY_PTYS=y | 749 | CONFIG_LEGACY_PTYS=y |
715 | CONFIG_LEGACY_PTY_COUNT=256 | 750 | CONFIG_LEGACY_PTY_COUNT=256 |
@@ -745,10 +780,10 @@ CONFIG_DRM_SIS=m | |||
745 | # CONFIG_DRM_VIA is not set | 780 | # CONFIG_DRM_VIA is not set |
746 | # CONFIG_DRM_SAVAGE is not set | 781 | # CONFIG_DRM_SAVAGE is not set |
747 | CONFIG_RAW_DRIVER=m | 782 | CONFIG_RAW_DRIVER=m |
783 | CONFIG_MAX_RAW_DEVS=256 | ||
748 | CONFIG_HPET=y | 784 | CONFIG_HPET=y |
749 | # CONFIG_HPET_RTC_IRQ is not set | 785 | # CONFIG_HPET_RTC_IRQ is not set |
750 | CONFIG_HPET_MMAP=y | 786 | CONFIG_HPET_MMAP=y |
751 | CONFIG_MAX_RAW_DEVS=256 | ||
752 | # CONFIG_HANGCHECK_TIMER is not set | 787 | # CONFIG_HANGCHECK_TIMER is not set |
753 | CONFIG_MMTIMER=y | 788 | CONFIG_MMTIMER=y |
754 | 789 | ||
@@ -756,6 +791,7 @@ CONFIG_MMTIMER=y | |||
756 | # TPM devices | 791 | # TPM devices |
757 | # | 792 | # |
758 | # CONFIG_TCG_TPM is not set | 793 | # CONFIG_TCG_TPM is not set |
794 | # CONFIG_TELCLOCK is not set | ||
759 | 795 | ||
760 | # | 796 | # |
761 | # I2C support | 797 | # I2C support |
@@ -763,6 +799,12 @@ CONFIG_MMTIMER=y | |||
763 | # CONFIG_I2C is not set | 799 | # CONFIG_I2C is not set |
764 | 800 | ||
765 | # | 801 | # |
802 | # SPI support | ||
803 | # | ||
804 | # CONFIG_SPI is not set | ||
805 | # CONFIG_SPI_MASTER is not set | ||
806 | |||
807 | # | ||
766 | # Dallas's 1-wire bus | 808 | # Dallas's 1-wire bus |
767 | # | 809 | # |
768 | # CONFIG_W1 is not set | 810 | # CONFIG_W1 is not set |
@@ -772,6 +814,7 @@ CONFIG_MMTIMER=y | |||
772 | # | 814 | # |
773 | CONFIG_HWMON=y | 815 | CONFIG_HWMON=y |
774 | # CONFIG_HWMON_VID is not set | 816 | # CONFIG_HWMON_VID is not set |
817 | # CONFIG_SENSORS_F71805F is not set | ||
775 | # CONFIG_HWMON_DEBUG_CHIP is not set | 818 | # CONFIG_HWMON_DEBUG_CHIP is not set |
776 | 819 | ||
777 | # | 820 | # |
@@ -822,26 +865,28 @@ CONFIG_SND_OSSEMUL=y | |||
822 | CONFIG_SND_MIXER_OSS=m | 865 | CONFIG_SND_MIXER_OSS=m |
823 | CONFIG_SND_PCM_OSS=m | 866 | CONFIG_SND_PCM_OSS=m |
824 | CONFIG_SND_SEQUENCER_OSS=y | 867 | CONFIG_SND_SEQUENCER_OSS=y |
868 | # CONFIG_SND_DYNAMIC_MINORS is not set | ||
869 | CONFIG_SND_SUPPORT_OLD_API=y | ||
825 | CONFIG_SND_VERBOSE_PRINTK=y | 870 | CONFIG_SND_VERBOSE_PRINTK=y |
826 | # CONFIG_SND_DEBUG is not set | 871 | # CONFIG_SND_DEBUG is not set |
827 | CONFIG_SND_GENERIC_DRIVER=y | ||
828 | 872 | ||
829 | # | 873 | # |
830 | # Generic devices | 874 | # Generic devices |
831 | # | 875 | # |
832 | CONFIG_SND_MPU401_UART=m | 876 | CONFIG_SND_MPU401_UART=m |
833 | CONFIG_SND_OPL3_LIB=m | 877 | CONFIG_SND_OPL3_LIB=m |
878 | CONFIG_SND_AC97_CODEC=m | ||
879 | CONFIG_SND_AC97_BUS=m | ||
834 | CONFIG_SND_DUMMY=m | 880 | CONFIG_SND_DUMMY=m |
835 | CONFIG_SND_VIRMIDI=m | 881 | CONFIG_SND_VIRMIDI=m |
836 | CONFIG_SND_MTPAV=m | 882 | CONFIG_SND_MTPAV=m |
837 | CONFIG_SND_SERIAL_U16550=m | 883 | CONFIG_SND_SERIAL_U16550=m |
838 | CONFIG_SND_MPU401=m | 884 | CONFIG_SND_MPU401=m |
839 | CONFIG_SND_AC97_CODEC=m | ||
840 | CONFIG_SND_AC97_BUS=m | ||
841 | 885 | ||
842 | # | 886 | # |
843 | # PCI devices | 887 | # PCI devices |
844 | # | 888 | # |
889 | # CONFIG_SND_AD1889 is not set | ||
845 | # CONFIG_SND_ALI5451 is not set | 890 | # CONFIG_SND_ALI5451 is not set |
846 | # CONFIG_SND_ATIIXP is not set | 891 | # CONFIG_SND_ATIIXP is not set |
847 | # CONFIG_SND_ATIIXP_MODEM is not set | 892 | # CONFIG_SND_ATIIXP_MODEM is not set |
@@ -850,40 +895,40 @@ CONFIG_SND_AC97_BUS=m | |||
850 | # CONFIG_SND_AU8830 is not set | 895 | # CONFIG_SND_AU8830 is not set |
851 | # CONFIG_SND_AZT3328 is not set | 896 | # CONFIG_SND_AZT3328 is not set |
852 | # CONFIG_SND_BT87X is not set | 897 | # CONFIG_SND_BT87X is not set |
898 | # CONFIG_SND_CA0106 is not set | ||
899 | # CONFIG_SND_CMIPCI is not set | ||
900 | CONFIG_SND_CS4281=m | ||
853 | CONFIG_SND_CS46XX=m | 901 | CONFIG_SND_CS46XX=m |
854 | CONFIG_SND_CS46XX_NEW_DSP=y | 902 | CONFIG_SND_CS46XX_NEW_DSP=y |
855 | CONFIG_SND_CS4281=m | ||
856 | CONFIG_SND_EMU10K1=m | 903 | CONFIG_SND_EMU10K1=m |
857 | # CONFIG_SND_EMU10K1X is not set | 904 | # CONFIG_SND_EMU10K1X is not set |
858 | # CONFIG_SND_CA0106 is not set | ||
859 | # CONFIG_SND_KORG1212 is not set | ||
860 | # CONFIG_SND_MIXART is not set | ||
861 | # CONFIG_SND_NM256 is not set | ||
862 | # CONFIG_SND_RME32 is not set | ||
863 | # CONFIG_SND_RME96 is not set | ||
864 | # CONFIG_SND_RME9652 is not set | ||
865 | # CONFIG_SND_HDSP is not set | ||
866 | # CONFIG_SND_HDSPM is not set | ||
867 | # CONFIG_SND_TRIDENT is not set | ||
868 | # CONFIG_SND_YMFPCI is not set | ||
869 | # CONFIG_SND_AD1889 is not set | ||
870 | # CONFIG_SND_CMIPCI is not set | ||
871 | # CONFIG_SND_ENS1370 is not set | 905 | # CONFIG_SND_ENS1370 is not set |
872 | # CONFIG_SND_ENS1371 is not set | 906 | # CONFIG_SND_ENS1371 is not set |
873 | # CONFIG_SND_ES1938 is not set | 907 | # CONFIG_SND_ES1938 is not set |
874 | # CONFIG_SND_ES1968 is not set | 908 | # CONFIG_SND_ES1968 is not set |
875 | # CONFIG_SND_MAESTRO3 is not set | ||
876 | CONFIG_SND_FM801=m | 909 | CONFIG_SND_FM801=m |
877 | # CONFIG_SND_FM801_TEA575X is not set | 910 | # CONFIG_SND_FM801_TEA575X is not set |
911 | # CONFIG_SND_HDA_INTEL is not set | ||
912 | # CONFIG_SND_HDSP is not set | ||
913 | # CONFIG_SND_HDSPM is not set | ||
878 | # CONFIG_SND_ICE1712 is not set | 914 | # CONFIG_SND_ICE1712 is not set |
879 | # CONFIG_SND_ICE1724 is not set | 915 | # CONFIG_SND_ICE1724 is not set |
880 | # CONFIG_SND_INTEL8X0 is not set | 916 | # CONFIG_SND_INTEL8X0 is not set |
881 | # CONFIG_SND_INTEL8X0M is not set | 917 | # CONFIG_SND_INTEL8X0M is not set |
918 | # CONFIG_SND_KORG1212 is not set | ||
919 | # CONFIG_SND_MAESTRO3 is not set | ||
920 | # CONFIG_SND_MIXART is not set | ||
921 | # CONFIG_SND_NM256 is not set | ||
922 | # CONFIG_SND_PCXHR is not set | ||
923 | # CONFIG_SND_RME32 is not set | ||
924 | # CONFIG_SND_RME96 is not set | ||
925 | # CONFIG_SND_RME9652 is not set | ||
882 | # CONFIG_SND_SONICVIBES is not set | 926 | # CONFIG_SND_SONICVIBES is not set |
927 | # CONFIG_SND_TRIDENT is not set | ||
883 | # CONFIG_SND_VIA82XX is not set | 928 | # CONFIG_SND_VIA82XX is not set |
884 | # CONFIG_SND_VIA82XX_MODEM is not set | 929 | # CONFIG_SND_VIA82XX_MODEM is not set |
885 | # CONFIG_SND_VX222 is not set | 930 | # CONFIG_SND_VX222 is not set |
886 | # CONFIG_SND_HDA_INTEL is not set | 931 | # CONFIG_SND_YMFPCI is not set |
887 | 932 | ||
888 | # | 933 | # |
889 | # USB devices | 934 | # USB devices |
@@ -929,12 +974,15 @@ CONFIG_USB_UHCI_HCD=m | |||
929 | # USB Device Class drivers | 974 | # USB Device Class drivers |
930 | # | 975 | # |
931 | # CONFIG_OBSOLETE_OSS_USB_DRIVER is not set | 976 | # CONFIG_OBSOLETE_OSS_USB_DRIVER is not set |
932 | # CONFIG_USB_BLUETOOTH_TTY is not set | ||
933 | # CONFIG_USB_ACM is not set | 977 | # CONFIG_USB_ACM is not set |
934 | # CONFIG_USB_PRINTER is not set | 978 | # CONFIG_USB_PRINTER is not set |
935 | 979 | ||
936 | # | 980 | # |
937 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information | 981 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' |
982 | # | ||
983 | |||
984 | # | ||
985 | # may also be needed; see USB_STORAGE Help for more information | ||
938 | # | 986 | # |
939 | CONFIG_USB_STORAGE=m | 987 | CONFIG_USB_STORAGE=m |
940 | # CONFIG_USB_STORAGE_DEBUG is not set | 988 | # CONFIG_USB_STORAGE_DEBUG is not set |
@@ -946,12 +994,15 @@ CONFIG_USB_STORAGE=m | |||
946 | # CONFIG_USB_STORAGE_SDDR09 is not set | 994 | # CONFIG_USB_STORAGE_SDDR09 is not set |
947 | # CONFIG_USB_STORAGE_SDDR55 is not set | 995 | # CONFIG_USB_STORAGE_SDDR55 is not set |
948 | # CONFIG_USB_STORAGE_JUMPSHOT is not set | 996 | # CONFIG_USB_STORAGE_JUMPSHOT is not set |
997 | # CONFIG_USB_STORAGE_ALAUDA is not set | ||
998 | # CONFIG_USB_LIBUSUAL is not set | ||
949 | 999 | ||
950 | # | 1000 | # |
951 | # USB Input Devices | 1001 | # USB Input Devices |
952 | # | 1002 | # |
953 | CONFIG_USB_HID=m | 1003 | CONFIG_USB_HID=m |
954 | CONFIG_USB_HIDINPUT=y | 1004 | CONFIG_USB_HIDINPUT=y |
1005 | # CONFIG_USB_HIDINPUT_POWERBOOK is not set | ||
955 | # CONFIG_HID_FF is not set | 1006 | # CONFIG_HID_FF is not set |
956 | # CONFIG_USB_HIDDEV is not set | 1007 | # CONFIG_USB_HIDDEV is not set |
957 | 1008 | ||
@@ -971,6 +1022,7 @@ CONFIG_USB_HIDINPUT=y | |||
971 | # CONFIG_USB_YEALINK is not set | 1022 | # CONFIG_USB_YEALINK is not set |
972 | # CONFIG_USB_XPAD is not set | 1023 | # CONFIG_USB_XPAD is not set |
973 | # CONFIG_USB_ATI_REMOTE is not set | 1024 | # CONFIG_USB_ATI_REMOTE is not set |
1025 | # CONFIG_USB_ATI_REMOTE2 is not set | ||
974 | # CONFIG_USB_KEYSPAN_REMOTE is not set | 1026 | # CONFIG_USB_KEYSPAN_REMOTE is not set |
975 | # CONFIG_USB_APPLETOUCH is not set | 1027 | # CONFIG_USB_APPLETOUCH is not set |
976 | 1028 | ||
@@ -1050,11 +1102,17 @@ CONFIG_INFINIBAND_MTHCA=m | |||
1050 | # CONFIG_INFINIBAND_MTHCA_DEBUG is not set | 1102 | # CONFIG_INFINIBAND_MTHCA_DEBUG is not set |
1051 | CONFIG_INFINIBAND_IPOIB=m | 1103 | CONFIG_INFINIBAND_IPOIB=m |
1052 | # CONFIG_INFINIBAND_IPOIB_DEBUG is not set | 1104 | # CONFIG_INFINIBAND_IPOIB_DEBUG is not set |
1105 | # CONFIG_INFINIBAND_SRP is not set | ||
1053 | 1106 | ||
1054 | # | 1107 | # |
1055 | # SN Devices | 1108 | # SN Devices |
1056 | # | 1109 | # |
1057 | CONFIG_SGI_IOC4=y | 1110 | CONFIG_SGI_IOC4=y |
1111 | CONFIG_SGI_IOC3=m | ||
1112 | |||
1113 | # | ||
1114 | # EDAC - error detection and reporting (RAS) | ||
1115 | # | ||
1058 | 1116 | ||
1059 | # | 1117 | # |
1060 | # File systems | 1118 | # File systems |
@@ -1085,6 +1143,7 @@ CONFIG_XFS_EXPORT=y | |||
1085 | # CONFIG_XFS_SECURITY is not set | 1143 | # CONFIG_XFS_SECURITY is not set |
1086 | # CONFIG_XFS_POSIX_ACL is not set | 1144 | # CONFIG_XFS_POSIX_ACL is not set |
1087 | # CONFIG_XFS_RT is not set | 1145 | # CONFIG_XFS_RT is not set |
1146 | # CONFIG_OCFS2_FS is not set | ||
1088 | # CONFIG_MINIX_FS is not set | 1147 | # CONFIG_MINIX_FS is not set |
1089 | # CONFIG_ROMFS_FS is not set | 1148 | # CONFIG_ROMFS_FS is not set |
1090 | CONFIG_INOTIFY=y | 1149 | CONFIG_INOTIFY=y |
@@ -1126,6 +1185,7 @@ CONFIG_HUGETLBFS=y | |||
1126 | CONFIG_HUGETLB_PAGE=y | 1185 | CONFIG_HUGETLB_PAGE=y |
1127 | CONFIG_RAMFS=y | 1186 | CONFIG_RAMFS=y |
1128 | # CONFIG_RELAYFS_FS is not set | 1187 | # CONFIG_RELAYFS_FS is not set |
1188 | # CONFIG_CONFIGFS_FS is not set | ||
1129 | 1189 | ||
1130 | # | 1190 | # |
1131 | # Miscellaneous filesystems | 1191 | # Miscellaneous filesystems |
@@ -1195,6 +1255,7 @@ CONFIG_MSDOS_PARTITION=y | |||
1195 | CONFIG_SGI_PARTITION=y | 1255 | CONFIG_SGI_PARTITION=y |
1196 | # CONFIG_ULTRIX_PARTITION is not set | 1256 | # CONFIG_ULTRIX_PARTITION is not set |
1197 | # CONFIG_SUN_PARTITION is not set | 1257 | # CONFIG_SUN_PARTITION is not set |
1258 | # CONFIG_KARMA_PARTITION is not set | ||
1198 | CONFIG_EFI_PARTITION=y | 1259 | CONFIG_EFI_PARTITION=y |
1199 | 1260 | ||
1200 | # | 1261 | # |
@@ -1260,26 +1321,30 @@ CONFIG_GENERIC_PENDING_IRQ=y | |||
1260 | # CONFIG_HP_SIMSCSI is not set | 1321 | # CONFIG_HP_SIMSCSI is not set |
1261 | 1322 | ||
1262 | # | 1323 | # |
1263 | # Profiling support | 1324 | # Instrumentation Support |
1264 | # | 1325 | # |
1265 | # CONFIG_PROFILING is not set | 1326 | # CONFIG_PROFILING is not set |
1327 | # CONFIG_KPROBES is not set | ||
1266 | 1328 | ||
1267 | # | 1329 | # |
1268 | # Kernel hacking | 1330 | # Kernel hacking |
1269 | # | 1331 | # |
1270 | # CONFIG_PRINTK_TIME is not set | 1332 | # CONFIG_PRINTK_TIME is not set |
1271 | CONFIG_DEBUG_KERNEL=y | ||
1272 | CONFIG_MAGIC_SYSRQ=y | 1333 | CONFIG_MAGIC_SYSRQ=y |
1334 | CONFIG_DEBUG_KERNEL=y | ||
1273 | CONFIG_LOG_BUF_SHIFT=20 | 1335 | CONFIG_LOG_BUF_SHIFT=20 |
1274 | CONFIG_DETECT_SOFTLOCKUP=y | 1336 | CONFIG_DETECT_SOFTLOCKUP=y |
1275 | # CONFIG_SCHEDSTATS is not set | 1337 | # CONFIG_SCHEDSTATS is not set |
1276 | # CONFIG_DEBUG_SLAB is not set | 1338 | # CONFIG_DEBUG_SLAB is not set |
1339 | CONFIG_DEBUG_MUTEXES=y | ||
1277 | # CONFIG_DEBUG_SPINLOCK is not set | 1340 | # CONFIG_DEBUG_SPINLOCK is not set |
1278 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | 1341 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set |
1279 | # CONFIG_DEBUG_KOBJECT is not set | 1342 | # CONFIG_DEBUG_KOBJECT is not set |
1280 | # CONFIG_DEBUG_INFO is not set | 1343 | # CONFIG_DEBUG_INFO is not set |
1281 | # CONFIG_DEBUG_FS is not set | 1344 | # CONFIG_DEBUG_FS is not set |
1282 | # CONFIG_KPROBES is not set | 1345 | # CONFIG_DEBUG_VM is not set |
1346 | CONFIG_FORCED_INLINING=y | ||
1347 | # CONFIG_RCU_TORTURE_TEST is not set | ||
1283 | CONFIG_IA64_GRANULE_16MB=y | 1348 | CONFIG_IA64_GRANULE_16MB=y |
1284 | # CONFIG_IA64_GRANULE_64MB is not set | 1349 | # CONFIG_IA64_GRANULE_64MB is not set |
1285 | # CONFIG_IA64_PRINT_HAZARDS is not set | 1350 | # CONFIG_IA64_PRINT_HAZARDS is not set |
diff --git a/arch/ia64/dig/setup.c b/arch/ia64/dig/setup.c index d58003f1ad02..c9104bfff667 100644 --- a/arch/ia64/dig/setup.c +++ b/arch/ia64/dig/setup.c | |||
@@ -25,16 +25,6 @@ | |||
25 | #include <asm/machvec.h> | 25 | #include <asm/machvec.h> |
26 | #include <asm/system.h> | 26 | #include <asm/system.h> |
27 | 27 | ||
28 | /* | ||
29 | * This is here so we can use the CMOS detection in ide-probe.c to | ||
30 | * determine what drives are present. In theory, we don't need this | ||
31 | * as the auto-detection could be done via ide-probe.c:do_probe() but | ||
32 | * in practice that would be much slower, which is painful when | ||
33 | * running in the simulator. Note that passing zeroes in DRIVE_INFO | ||
34 | * is sufficient (the IDE driver will autodetect the drive geometry). | ||
35 | */ | ||
36 | char drive_info[4*16]; | ||
37 | |||
38 | void __init | 28 | void __init |
39 | dig_setup (char **cmdline_p) | 29 | dig_setup (char **cmdline_p) |
40 | { | 30 | { |
diff --git a/arch/ia64/ia32/ia32_signal.c b/arch/ia64/ia32/ia32_signal.c index 5856510210fa..b3355a9ca2c3 100644 --- a/arch/ia64/ia32/ia32_signal.c +++ b/arch/ia64/ia32/ia32_signal.c | |||
@@ -515,6 +515,7 @@ sys32_signal (int sig, unsigned int handler) | |||
515 | 515 | ||
516 | sigact_set_handler(&new_sa, handler, 0); | 516 | sigact_set_handler(&new_sa, handler, 0); |
517 | new_sa.sa.sa_flags = SA_ONESHOT | SA_NOMASK; | 517 | new_sa.sa.sa_flags = SA_ONESHOT | SA_NOMASK; |
518 | sigemptyset(&new_sa.sa.sa_mask); | ||
518 | 519 | ||
519 | ret = do_sigaction(sig, &new_sa, &old_sa); | 520 | ret = do_sigaction(sig, &new_sa, &old_sa); |
520 | 521 | ||
diff --git a/arch/ia64/kernel/Makefile b/arch/ia64/kernel/Makefile index 307514f7a282..09a0dbc17fb6 100644 --- a/arch/ia64/kernel/Makefile +++ b/arch/ia64/kernel/Makefile | |||
@@ -13,6 +13,11 @@ obj-$(CONFIG_IA64_BRL_EMU) += brl_emu.o | |||
13 | obj-$(CONFIG_IA64_GENERIC) += acpi-ext.o | 13 | obj-$(CONFIG_IA64_GENERIC) += acpi-ext.o |
14 | obj-$(CONFIG_IA64_HP_ZX1) += acpi-ext.o | 14 | obj-$(CONFIG_IA64_HP_ZX1) += acpi-ext.o |
15 | obj-$(CONFIG_IA64_HP_ZX1_SWIOTLB) += acpi-ext.o | 15 | obj-$(CONFIG_IA64_HP_ZX1_SWIOTLB) += acpi-ext.o |
16 | |||
17 | ifneq ($(CONFIG_ACPI_PROCESSOR),) | ||
18 | obj-y += acpi-processor.o | ||
19 | endif | ||
20 | |||
16 | obj-$(CONFIG_IA64_PALINFO) += palinfo.o | 21 | obj-$(CONFIG_IA64_PALINFO) += palinfo.o |
17 | obj-$(CONFIG_IOSAPIC) += iosapic.o | 22 | obj-$(CONFIG_IOSAPIC) += iosapic.o |
18 | obj-$(CONFIG_MODULES) += module.o | 23 | obj-$(CONFIG_MODULES) += module.o |
diff --git a/arch/ia64/kernel/acpi-ext.c b/arch/ia64/kernel/acpi-ext.c index 13a5b3b49bf8..4a5574ff007b 100644 --- a/arch/ia64/kernel/acpi-ext.c +++ b/arch/ia64/kernel/acpi-ext.c | |||
@@ -33,33 +33,33 @@ acpi_vendor_resource_match(struct acpi_resource *resource, void *context) | |||
33 | struct acpi_vendor_info *info = (struct acpi_vendor_info *)context; | 33 | struct acpi_vendor_info *info = (struct acpi_vendor_info *)context; |
34 | struct acpi_resource_vendor *vendor; | 34 | struct acpi_resource_vendor *vendor; |
35 | struct acpi_vendor_descriptor *descriptor; | 35 | struct acpi_vendor_descriptor *descriptor; |
36 | u32 length; | 36 | u32 byte_length; |
37 | 37 | ||
38 | if (resource->id != ACPI_RSTYPE_VENDOR) | 38 | if (resource->type != ACPI_RESOURCE_TYPE_VENDOR) |
39 | return AE_OK; | 39 | return AE_OK; |
40 | 40 | ||
41 | vendor = (struct acpi_resource_vendor *)&resource->data; | 41 | vendor = (struct acpi_resource_vendor *)&resource->data; |
42 | descriptor = (struct acpi_vendor_descriptor *)vendor->reserved; | 42 | descriptor = (struct acpi_vendor_descriptor *)vendor->byte_data; |
43 | if (vendor->length <= sizeof(*info->descriptor) || | 43 | if (vendor->byte_length <= sizeof(*info->descriptor) || |
44 | descriptor->guid_id != info->descriptor->guid_id || | 44 | descriptor->guid_id != info->descriptor->guid_id || |
45 | efi_guidcmp(descriptor->guid, info->descriptor->guid)) | 45 | efi_guidcmp(descriptor->guid, info->descriptor->guid)) |
46 | return AE_OK; | 46 | return AE_OK; |
47 | 47 | ||
48 | length = vendor->length - sizeof(struct acpi_vendor_descriptor); | 48 | byte_length = vendor->byte_length - sizeof(struct acpi_vendor_descriptor); |
49 | info->data = acpi_os_allocate(length); | 49 | info->data = acpi_os_allocate(byte_length); |
50 | if (!info->data) | 50 | if (!info->data) |
51 | return AE_NO_MEMORY; | 51 | return AE_NO_MEMORY; |
52 | 52 | ||
53 | memcpy(info->data, | 53 | memcpy(info->data, |
54 | vendor->reserved + sizeof(struct acpi_vendor_descriptor), | 54 | vendor->byte_data + sizeof(struct acpi_vendor_descriptor), |
55 | length); | 55 | byte_length); |
56 | info->length = length; | 56 | info->length = byte_length; |
57 | return AE_CTRL_TERMINATE; | 57 | return AE_CTRL_TERMINATE; |
58 | } | 58 | } |
59 | 59 | ||
60 | acpi_status | 60 | acpi_status |
61 | acpi_find_vendor_resource(acpi_handle obj, struct acpi_vendor_descriptor * id, | 61 | acpi_find_vendor_resource(acpi_handle obj, struct acpi_vendor_descriptor * id, |
62 | u8 ** data, u32 * length) | 62 | u8 ** data, u32 * byte_length) |
63 | { | 63 | { |
64 | struct acpi_vendor_info info; | 64 | struct acpi_vendor_info info; |
65 | 65 | ||
@@ -72,7 +72,7 @@ acpi_find_vendor_resource(acpi_handle obj, struct acpi_vendor_descriptor * id, | |||
72 | return AE_NOT_FOUND; | 72 | return AE_NOT_FOUND; |
73 | 73 | ||
74 | *data = info.data; | 74 | *data = info.data; |
75 | *length = info.length; | 75 | *byte_length = info.length; |
76 | return AE_OK; | 76 | return AE_OK; |
77 | } | 77 | } |
78 | 78 | ||
diff --git a/arch/ia64/kernel/acpi-processor.c b/arch/ia64/kernel/acpi-processor.c new file mode 100644 index 000000000000..e683630c8ce2 --- /dev/null +++ b/arch/ia64/kernel/acpi-processor.c | |||
@@ -0,0 +1,67 @@ | |||
1 | /* | ||
2 | * arch/ia64/kernel/cpufreq/processor.c | ||
3 | * | ||
4 | * Copyright (C) 2005 Intel Corporation | ||
5 | * Venkatesh Pallipadi <venkatesh.pallipadi@intel.com> | ||
6 | * - Added _PDC for platforms with Intel CPUs | ||
7 | */ | ||
8 | |||
9 | #include <linux/kernel.h> | ||
10 | #include <linux/module.h> | ||
11 | #include <linux/init.h> | ||
12 | #include <linux/acpi.h> | ||
13 | |||
14 | #include <acpi/processor.h> | ||
15 | #include <asm/acpi.h> | ||
16 | |||
17 | static void init_intel_pdc(struct acpi_processor *pr) | ||
18 | { | ||
19 | struct acpi_object_list *obj_list; | ||
20 | union acpi_object *obj; | ||
21 | u32 *buf; | ||
22 | |||
23 | /* allocate and initialize pdc. It will be used later. */ | ||
24 | obj_list = kmalloc(sizeof(struct acpi_object_list), GFP_KERNEL); | ||
25 | if (!obj_list) { | ||
26 | printk(KERN_ERR "Memory allocation error\n"); | ||
27 | return; | ||
28 | } | ||
29 | |||
30 | obj = kmalloc(sizeof(union acpi_object), GFP_KERNEL); | ||
31 | if (!obj) { | ||
32 | printk(KERN_ERR "Memory allocation error\n"); | ||
33 | kfree(obj_list); | ||
34 | return; | ||
35 | } | ||
36 | |||
37 | buf = kmalloc(12, GFP_KERNEL); | ||
38 | if (!buf) { | ||
39 | printk(KERN_ERR "Memory allocation error\n"); | ||
40 | kfree(obj); | ||
41 | kfree(obj_list); | ||
42 | return; | ||
43 | } | ||
44 | |||
45 | buf[0] = ACPI_PDC_REVISION_ID; | ||
46 | buf[1] = 1; | ||
47 | buf[2] |= ACPI_PDC_EST_CAPABILITY_SMP; | ||
48 | |||
49 | obj->type = ACPI_TYPE_BUFFER; | ||
50 | obj->buffer.length = 12; | ||
51 | obj->buffer.pointer = (u8 *) buf; | ||
52 | obj_list->count = 1; | ||
53 | obj_list->pointer = obj; | ||
54 | pr->pdc = obj_list; | ||
55 | |||
56 | return; | ||
57 | } | ||
58 | |||
59 | /* Initialize _PDC data based on the CPU vendor */ | ||
60 | void arch_acpi_processor_init_pdc(struct acpi_processor *pr) | ||
61 | { | ||
62 | pr->pdc = NULL; | ||
63 | init_intel_pdc(pr); | ||
64 | return; | ||
65 | } | ||
66 | |||
67 | EXPORT_SYMBOL(arch_acpi_processor_init_pdc); | ||
diff --git a/arch/ia64/kernel/acpi.c b/arch/ia64/kernel/acpi.c index 9ad94ddf6687..ecd44bdc8394 100644 --- a/arch/ia64/kernel/acpi.c +++ b/arch/ia64/kernel/acpi.c | |||
@@ -567,16 +567,16 @@ void __init acpi_numa_arch_fixup(void) | |||
567 | * success: return IRQ number (>=0) | 567 | * success: return IRQ number (>=0) |
568 | * failure: return < 0 | 568 | * failure: return < 0 |
569 | */ | 569 | */ |
570 | int acpi_register_gsi(u32 gsi, int edge_level, int active_high_low) | 570 | int acpi_register_gsi(u32 gsi, int triggering, int polarity) |
571 | { | 571 | { |
572 | if (has_8259 && gsi < 16) | 572 | if (has_8259 && gsi < 16) |
573 | return isa_irq_to_vector(gsi); | 573 | return isa_irq_to_vector(gsi); |
574 | 574 | ||
575 | return iosapic_register_intr(gsi, | 575 | return iosapic_register_intr(gsi, |
576 | (active_high_low == | 576 | (polarity == |
577 | ACPI_ACTIVE_HIGH) ? IOSAPIC_POL_HIGH : | 577 | ACPI_ACTIVE_HIGH) ? IOSAPIC_POL_HIGH : |
578 | IOSAPIC_POL_LOW, | 578 | IOSAPIC_POL_LOW, |
579 | (edge_level == | 579 | (triggering == |
580 | ACPI_EDGE_SENSITIVE) ? IOSAPIC_EDGE : | 580 | ACPI_EDGE_SENSITIVE) ? IOSAPIC_EDGE : |
581 | IOSAPIC_LEVEL); | 581 | IOSAPIC_LEVEL); |
582 | } | 582 | } |
@@ -761,6 +761,59 @@ int acpi_map_cpu2node(acpi_handle handle, int cpu, long physid) | |||
761 | return (0); | 761 | return (0); |
762 | } | 762 | } |
763 | 763 | ||
764 | int additional_cpus __initdata = -1; | ||
765 | |||
766 | static __init int setup_additional_cpus(char *s) | ||
767 | { | ||
768 | if (s) | ||
769 | additional_cpus = simple_strtol(s, NULL, 0); | ||
770 | |||
771 | return 0; | ||
772 | } | ||
773 | |||
774 | early_param("additional_cpus", setup_additional_cpus); | ||
775 | |||
776 | /* | ||
777 | * cpu_possible_map should be static, it cannot change as cpu's | ||
778 | * are onlined, or offlined. The reason is per-cpu data-structures | ||
779 | * are allocated by some modules at init time, and dont expect to | ||
780 | * do this dynamically on cpu arrival/departure. | ||
781 | * cpu_present_map on the other hand can change dynamically. | ||
782 | * In case when cpu_hotplug is not compiled, then we resort to current | ||
783 | * behaviour, which is cpu_possible == cpu_present. | ||
784 | * - Ashok Raj | ||
785 | * | ||
786 | * Three ways to find out the number of additional hotplug CPUs: | ||
787 | * - If the BIOS specified disabled CPUs in ACPI/mptables use that. | ||
788 | * - The user can overwrite it with additional_cpus=NUM | ||
789 | * - Otherwise don't reserve additional CPUs. | ||
790 | */ | ||
791 | __init void prefill_possible_map(void) | ||
792 | { | ||
793 | int i; | ||
794 | int possible, disabled_cpus; | ||
795 | |||
796 | disabled_cpus = total_cpus - available_cpus; | ||
797 | |||
798 | if (additional_cpus == -1) { | ||
799 | if (disabled_cpus > 0) | ||
800 | additional_cpus = disabled_cpus; | ||
801 | else | ||
802 | additional_cpus = 0; | ||
803 | } | ||
804 | |||
805 | possible = available_cpus + additional_cpus; | ||
806 | |||
807 | if (possible > NR_CPUS) | ||
808 | possible = NR_CPUS; | ||
809 | |||
810 | printk(KERN_INFO "SMP: Allowing %d CPUs, %d hotplug CPUs\n", | ||
811 | possible, max((possible - available_cpus), 0)); | ||
812 | |||
813 | for (i = 0; i < possible; i++) | ||
814 | cpu_set(i, cpu_possible_map); | ||
815 | } | ||
816 | |||
764 | int acpi_map_lsapic(acpi_handle handle, int *pcpu) | 817 | int acpi_map_lsapic(acpi_handle handle, int *pcpu) |
765 | { | 818 | { |
766 | struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; | 819 | struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; |
diff --git a/arch/ia64/kernel/cpufreq/Makefile b/arch/ia64/kernel/cpufreq/Makefile index f748d34c02f0..4838f2a57c7a 100644 --- a/arch/ia64/kernel/cpufreq/Makefile +++ b/arch/ia64/kernel/cpufreq/Makefile | |||
@@ -1 +1,2 @@ | |||
1 | obj-$(CONFIG_IA64_ACPI_CPUFREQ) += acpi-cpufreq.o | 1 | obj-$(CONFIG_IA64_ACPI_CPUFREQ) += acpi-cpufreq.o |
2 | |||
diff --git a/arch/ia64/kernel/cpufreq/acpi-cpufreq.c b/arch/ia64/kernel/cpufreq/acpi-cpufreq.c index da4d5cf80a48..5a1bf815282d 100644 --- a/arch/ia64/kernel/cpufreq/acpi-cpufreq.c +++ b/arch/ia64/kernel/cpufreq/acpi-cpufreq.c | |||
@@ -269,48 +269,6 @@ acpi_cpufreq_verify ( | |||
269 | } | 269 | } |
270 | 270 | ||
271 | 271 | ||
272 | /* | ||
273 | * processor_init_pdc - let BIOS know about the SMP capabilities | ||
274 | * of this driver | ||
275 | * @perf: processor-specific acpi_io_data struct | ||
276 | * @cpu: CPU being initialized | ||
277 | * | ||
278 | * To avoid issues with legacy OSes, some BIOSes require to be informed of | ||
279 | * the SMP capabilities of OS P-state driver. Here we set the bits in _PDC | ||
280 | * accordingly. Actual call to _PDC is done in driver/acpi/processor.c | ||
281 | */ | ||
282 | static void | ||
283 | processor_init_pdc ( | ||
284 | struct acpi_processor_performance *perf, | ||
285 | unsigned int cpu, | ||
286 | struct acpi_object_list *obj_list | ||
287 | ) | ||
288 | { | ||
289 | union acpi_object *obj; | ||
290 | u32 *buf; | ||
291 | |||
292 | dprintk("processor_init_pdc\n"); | ||
293 | |||
294 | perf->pdc = NULL; | ||
295 | /* Initialize pdc. It will be used later. */ | ||
296 | if (!obj_list) | ||
297 | return; | ||
298 | |||
299 | if (!(obj_list->count && obj_list->pointer)) | ||
300 | return; | ||
301 | |||
302 | obj = obj_list->pointer; | ||
303 | if ((obj->buffer.length == 12) && obj->buffer.pointer) { | ||
304 | buf = (u32 *)obj->buffer.pointer; | ||
305 | buf[0] = ACPI_PDC_REVISION_ID; | ||
306 | buf[1] = 1; | ||
307 | buf[2] = ACPI_PDC_EST_CAPABILITY_SMP; | ||
308 | perf->pdc = obj_list; | ||
309 | } | ||
310 | return; | ||
311 | } | ||
312 | |||
313 | |||
314 | static int | 272 | static int |
315 | acpi_cpufreq_cpu_init ( | 273 | acpi_cpufreq_cpu_init ( |
316 | struct cpufreq_policy *policy) | 274 | struct cpufreq_policy *policy) |
@@ -320,14 +278,7 @@ acpi_cpufreq_cpu_init ( | |||
320 | struct cpufreq_acpi_io *data; | 278 | struct cpufreq_acpi_io *data; |
321 | unsigned int result = 0; | 279 | unsigned int result = 0; |
322 | 280 | ||
323 | union acpi_object arg0 = {ACPI_TYPE_BUFFER}; | ||
324 | u32 arg0_buf[3]; | ||
325 | struct acpi_object_list arg_list = {1, &arg0}; | ||
326 | |||
327 | dprintk("acpi_cpufreq_cpu_init\n"); | 281 | dprintk("acpi_cpufreq_cpu_init\n"); |
328 | /* setup arg_list for _PDC settings */ | ||
329 | arg0.buffer.length = 12; | ||
330 | arg0.buffer.pointer = (u8 *) arg0_buf; | ||
331 | 282 | ||
332 | data = kmalloc(sizeof(struct cpufreq_acpi_io), GFP_KERNEL); | 283 | data = kmalloc(sizeof(struct cpufreq_acpi_io), GFP_KERNEL); |
333 | if (!data) | 284 | if (!data) |
@@ -337,9 +288,7 @@ acpi_cpufreq_cpu_init ( | |||
337 | 288 | ||
338 | acpi_io_data[cpu] = data; | 289 | acpi_io_data[cpu] = data; |
339 | 290 | ||
340 | processor_init_pdc(&data->acpi_data, cpu, &arg_list); | ||
341 | result = acpi_processor_register_performance(&data->acpi_data, cpu); | 291 | result = acpi_processor_register_performance(&data->acpi_data, cpu); |
342 | data->acpi_data.pdc = NULL; | ||
343 | 292 | ||
344 | if (result) | 293 | if (result) |
345 | goto err_free; | 294 | goto err_free; |
diff --git a/arch/ia64/kernel/cyclone.c b/arch/ia64/kernel/cyclone.c index 6ade3790ce07..e00b21514f7c 100644 --- a/arch/ia64/kernel/cyclone.c +++ b/arch/ia64/kernel/cyclone.c | |||
@@ -36,7 +36,7 @@ int __init init_cyclone_clock(void) | |||
36 | u32* volatile cyclone_timer; /* Cyclone MPMC0 register */ | 36 | u32* volatile cyclone_timer; /* Cyclone MPMC0 register */ |
37 | 37 | ||
38 | if (!use_cyclone) | 38 | if (!use_cyclone) |
39 | return -ENODEV; | 39 | return 0; |
40 | 40 | ||
41 | printk(KERN_INFO "Summit chipset: Starting Cyclone Counter.\n"); | 41 | printk(KERN_INFO "Summit chipset: Starting Cyclone Counter.\n"); |
42 | 42 | ||
diff --git a/arch/ia64/kernel/efi.c b/arch/ia64/kernel/efi.c index c485a3b32ba8..9990320b6f9a 100644 --- a/arch/ia64/kernel/efi.c +++ b/arch/ia64/kernel/efi.c | |||
@@ -410,24 +410,16 @@ efi_init (void) | |||
410 | efi_config_table_t *config_tables; | 410 | efi_config_table_t *config_tables; |
411 | efi_char16_t *c16; | 411 | efi_char16_t *c16; |
412 | u64 efi_desc_size; | 412 | u64 efi_desc_size; |
413 | char *cp, *end, vendor[100] = "unknown"; | 413 | char *cp, vendor[100] = "unknown"; |
414 | extern char saved_command_line[]; | 414 | extern char saved_command_line[]; |
415 | int i; | 415 | int i; |
416 | 416 | ||
417 | /* it's too early to be able to use the standard kernel command line support... */ | 417 | /* it's too early to be able to use the standard kernel command line support... */ |
418 | for (cp = saved_command_line; *cp; ) { | 418 | for (cp = saved_command_line; *cp; ) { |
419 | if (memcmp(cp, "mem=", 4) == 0) { | 419 | if (memcmp(cp, "mem=", 4) == 0) { |
420 | cp += 4; | 420 | mem_limit = memparse(cp + 4, &cp); |
421 | mem_limit = memparse(cp, &end); | ||
422 | if (end != cp) | ||
423 | break; | ||
424 | cp = end; | ||
425 | } else if (memcmp(cp, "max_addr=", 9) == 0) { | 421 | } else if (memcmp(cp, "max_addr=", 9) == 0) { |
426 | cp += 9; | 422 | max_addr = GRANULEROUNDDOWN(memparse(cp + 9, &cp)); |
427 | max_addr = GRANULEROUNDDOWN(memparse(cp, &end)); | ||
428 | if (end != cp) | ||
429 | break; | ||
430 | cp = end; | ||
431 | } else { | 423 | } else { |
432 | while (*cp != ' ' && *cp) | 424 | while (*cp != ' ' && *cp) |
433 | ++cp; | 425 | ++cp; |
@@ -458,7 +450,7 @@ efi_init (void) | |||
458 | /* Show what we know for posterity */ | 450 | /* Show what we know for posterity */ |
459 | c16 = __va(efi.systab->fw_vendor); | 451 | c16 = __va(efi.systab->fw_vendor); |
460 | if (c16) { | 452 | if (c16) { |
461 | for (i = 0;i < (int) sizeof(vendor) && *c16; ++i) | 453 | for (i = 0;i < (int) sizeof(vendor) - 1 && *c16; ++i) |
462 | vendor[i] = *c16++; | 454 | vendor[i] = *c16++; |
463 | vendor[i] = '\0'; | 455 | vendor[i] = '\0'; |
464 | } | 456 | } |
diff --git a/arch/ia64/kernel/entry.S b/arch/ia64/kernel/entry.S index 7a6ffd613789..930fdfca6ddb 100644 --- a/arch/ia64/kernel/entry.S +++ b/arch/ia64/kernel/entry.S | |||
@@ -569,7 +569,9 @@ GLOBAL_ENTRY(ia64_trace_syscall) | |||
569 | .mem.offset 0,0; st8.spill [r2]=r8 // store return value in slot for r8 | 569 | .mem.offset 0,0; st8.spill [r2]=r8 // store return value in slot for r8 |
570 | .mem.offset 8,0; st8.spill [r3]=r10 // clear error indication in slot for r10 | 570 | .mem.offset 8,0; st8.spill [r3]=r10 // clear error indication in slot for r10 |
571 | br.call.sptk.many rp=syscall_trace_leave // give parent a chance to catch return value | 571 | br.call.sptk.many rp=syscall_trace_leave // give parent a chance to catch return value |
572 | .ret3: br.cond.sptk .work_pending_syscall_end | 572 | .ret3: |
573 | (pUStk) cmp.eq.unc p6,p0=r0,r0 // p6 <- pUStk | ||
574 | br.cond.sptk .work_pending_syscall_end | ||
573 | 575 | ||
574 | strace_error: | 576 | strace_error: |
575 | ld8 r3=[r2] // load pt_regs.r8 | 577 | ld8 r3=[r2] // load pt_regs.r8 |
@@ -1601,5 +1603,21 @@ sys_call_table: | |||
1601 | data8 sys_inotify_add_watch | 1603 | data8 sys_inotify_add_watch |
1602 | data8 sys_inotify_rm_watch | 1604 | data8 sys_inotify_rm_watch |
1603 | data8 sys_migrate_pages // 1280 | 1605 | data8 sys_migrate_pages // 1280 |
1606 | data8 sys_openat | ||
1607 | data8 sys_mkdirat | ||
1608 | data8 sys_mknodat | ||
1609 | data8 sys_fchownat | ||
1610 | data8 sys_futimesat // 1285 | ||
1611 | data8 sys_newfstatat | ||
1612 | data8 sys_unlinkat | ||
1613 | data8 sys_renameat | ||
1614 | data8 sys_linkat | ||
1615 | data8 sys_symlinkat // 1290 | ||
1616 | data8 sys_readlinkat | ||
1617 | data8 sys_fchmodat | ||
1618 | data8 sys_faccessat | ||
1619 | data8 sys_ni_syscall // reserved for pselect | ||
1620 | data8 sys_ni_syscall // 1295 reserved for ppoll | ||
1621 | data8 sys_unshare | ||
1604 | 1622 | ||
1605 | .org sys_call_table + 8*NR_syscalls // guard against failures to increase NR_syscalls | 1623 | .org sys_call_table + 8*NR_syscalls // guard against failures to increase NR_syscalls |
diff --git a/arch/ia64/kernel/fsys.S b/arch/ia64/kernel/fsys.S index ce423910ca97..7a05b1cb2ad5 100644 --- a/arch/ia64/kernel/fsys.S +++ b/arch/ia64/kernel/fsys.S | |||
@@ -878,31 +878,7 @@ fsyscall_table: | |||
878 | data8 0 // timer_delete | 878 | data8 0 // timer_delete |
879 | data8 0 // clock_settime | 879 | data8 0 // clock_settime |
880 | data8 fsys_clock_gettime // clock_gettime | 880 | data8 fsys_clock_gettime // clock_gettime |
881 | data8 0 // clock_getres // 1255 | ||
882 | data8 0 // clock_nanosleep | ||
883 | data8 0 // fstatfs64 | ||
884 | data8 0 // statfs64 | ||
885 | data8 0 | ||
886 | data8 0 // 1260 | ||
887 | data8 0 | ||
888 | data8 0 // mq_open | ||
889 | data8 0 // mq_unlink | ||
890 | data8 0 // mq_timedsend | ||
891 | data8 0 // mq_timedreceive // 1265 | ||
892 | data8 0 // mq_notify | ||
893 | data8 0 // mq_getsetattr | ||
894 | data8 0 // kexec_load | ||
895 | data8 0 | ||
896 | data8 0 // 1270 | ||
897 | data8 0 | ||
898 | data8 0 | ||
899 | data8 0 | ||
900 | data8 0 | ||
901 | data8 0 // 1275 | ||
902 | data8 0 | ||
903 | data8 0 | ||
904 | data8 0 | ||
905 | data8 0 | ||
906 | data8 0 // 1280 | ||
907 | 881 | ||
908 | .org fsyscall_table + 8*NR_syscalls // guard against failures to increase NR_syscalls | 882 | // fill in zeros for the remaining entries |
883 | .zero: | ||
884 | .space fsyscall_table + 8*NR_syscalls - .zero, 0 | ||
diff --git a/arch/ia64/kernel/head.S b/arch/ia64/kernel/head.S index fbc7ea35dd57..f1778a84ea61 100644 --- a/arch/ia64/kernel/head.S +++ b/arch/ia64/kernel/head.S | |||
@@ -352,6 +352,7 @@ start_ap: | |||
352 | mov ar.rsc=0 // place RSE in enforced lazy mode | 352 | mov ar.rsc=0 // place RSE in enforced lazy mode |
353 | ;; | 353 | ;; |
354 | loadrs // clear the dirty partition | 354 | loadrs // clear the dirty partition |
355 | mov IA64_KR(PER_CPU_DATA)=r0 // clear physical per-CPU base | ||
355 | ;; | 356 | ;; |
356 | mov ar.bspstore=r2 // establish the new RSE stack | 357 | mov ar.bspstore=r2 // establish the new RSE stack |
357 | ;; | 358 | ;; |
diff --git a/arch/ia64/kernel/ia64_ksyms.c b/arch/ia64/kernel/ia64_ksyms.c index e72de580ebbf..bbcfd08378a6 100644 --- a/arch/ia64/kernel/ia64_ksyms.c +++ b/arch/ia64/kernel/ia64_ksyms.c | |||
@@ -10,23 +10,8 @@ | |||
10 | 10 | ||
11 | #include <linux/string.h> | 11 | #include <linux/string.h> |
12 | EXPORT_SYMBOL(memset); | 12 | EXPORT_SYMBOL(memset); |
13 | EXPORT_SYMBOL(memchr); | ||
14 | EXPORT_SYMBOL(memcmp); | ||
15 | EXPORT_SYMBOL(memcpy); | 13 | EXPORT_SYMBOL(memcpy); |
16 | EXPORT_SYMBOL(memmove); | ||
17 | EXPORT_SYMBOL(memscan); | ||
18 | EXPORT_SYMBOL(strcat); | ||
19 | EXPORT_SYMBOL(strchr); | ||
20 | EXPORT_SYMBOL(strcmp); | ||
21 | EXPORT_SYMBOL(strcpy); | ||
22 | EXPORT_SYMBOL(strlen); | 14 | EXPORT_SYMBOL(strlen); |
23 | EXPORT_SYMBOL(strncat); | ||
24 | EXPORT_SYMBOL(strncmp); | ||
25 | EXPORT_SYMBOL(strncpy); | ||
26 | EXPORT_SYMBOL(strnlen); | ||
27 | EXPORT_SYMBOL(strrchr); | ||
28 | EXPORT_SYMBOL(strstr); | ||
29 | EXPORT_SYMBOL(strpbrk); | ||
30 | 15 | ||
31 | #include <asm/checksum.h> | 16 | #include <asm/checksum.h> |
32 | EXPORT_SYMBOL(ip_fast_csum); /* hand-coded assembly */ | 17 | EXPORT_SYMBOL(ip_fast_csum); /* hand-coded assembly */ |
diff --git a/arch/ia64/kernel/ivt.S b/arch/ia64/kernel/ivt.S index 301f2e9d262e..dcd906fe5749 100644 --- a/arch/ia64/kernel/ivt.S +++ b/arch/ia64/kernel/ivt.S | |||
@@ -561,11 +561,12 @@ ENTRY(dirty_bit) | |||
561 | ;; // avoid RAW on r18 | 561 | ;; // avoid RAW on r18 |
562 | mov ar.ccv=r18 // set compare value for cmpxchg | 562 | mov ar.ccv=r18 // set compare value for cmpxchg |
563 | or r25=_PAGE_D|_PAGE_A,r18 // set the dirty and accessed bits | 563 | or r25=_PAGE_D|_PAGE_A,r18 // set the dirty and accessed bits |
564 | tbit.z p7,p6 = r18,_PAGE_P_BIT // Check present bit | ||
564 | ;; | 565 | ;; |
565 | cmpxchg8.acq r26=[r17],r25,ar.ccv | 566 | (p6) cmpxchg8.acq r26=[r17],r25,ar.ccv // Only update if page is present |
566 | mov r24=PAGE_SHIFT<<2 | 567 | mov r24=PAGE_SHIFT<<2 |
567 | ;; | 568 | ;; |
568 | cmp.eq p6,p7=r26,r18 | 569 | (p6) cmp.eq p6,p7=r26,r18 // Only compare if page is present |
569 | ;; | 570 | ;; |
570 | (p6) itc.d r25 // install updated PTE | 571 | (p6) itc.d r25 // install updated PTE |
571 | ;; | 572 | ;; |
@@ -626,11 +627,12 @@ ENTRY(iaccess_bit) | |||
626 | ;; | 627 | ;; |
627 | mov ar.ccv=r18 // set compare value for cmpxchg | 628 | mov ar.ccv=r18 // set compare value for cmpxchg |
628 | or r25=_PAGE_A,r18 // set the accessed bit | 629 | or r25=_PAGE_A,r18 // set the accessed bit |
630 | tbit.z p7,p6 = r18,_PAGE_P_BIT // Check present bit | ||
629 | ;; | 631 | ;; |
630 | cmpxchg8.acq r26=[r17],r25,ar.ccv | 632 | (p6) cmpxchg8.acq r26=[r17],r25,ar.ccv // Only if page present |
631 | mov r24=PAGE_SHIFT<<2 | 633 | mov r24=PAGE_SHIFT<<2 |
632 | ;; | 634 | ;; |
633 | cmp.eq p6,p7=r26,r18 | 635 | (p6) cmp.eq p6,p7=r26,r18 // Only if page present |
634 | ;; | 636 | ;; |
635 | (p6) itc.i r25 // install updated PTE | 637 | (p6) itc.i r25 // install updated PTE |
636 | ;; | 638 | ;; |
@@ -680,11 +682,12 @@ ENTRY(daccess_bit) | |||
680 | ;; // avoid RAW on r18 | 682 | ;; // avoid RAW on r18 |
681 | mov ar.ccv=r18 // set compare value for cmpxchg | 683 | mov ar.ccv=r18 // set compare value for cmpxchg |
682 | or r25=_PAGE_A,r18 // set the dirty bit | 684 | or r25=_PAGE_A,r18 // set the dirty bit |
685 | tbit.z p7,p6 = r18,_PAGE_P_BIT // Check present bit | ||
683 | ;; | 686 | ;; |
684 | cmpxchg8.acq r26=[r17],r25,ar.ccv | 687 | (p6) cmpxchg8.acq r26=[r17],r25,ar.ccv // Only if page is present |
685 | mov r24=PAGE_SHIFT<<2 | 688 | mov r24=PAGE_SHIFT<<2 |
686 | ;; | 689 | ;; |
687 | cmp.eq p6,p7=r26,r18 | 690 | (p6) cmp.eq p6,p7=r26,r18 // Only if page is present |
688 | ;; | 691 | ;; |
689 | (p6) itc.d r25 // install updated PTE | 692 | (p6) itc.d r25 // install updated PTE |
690 | /* | 693 | /* |
@@ -1362,7 +1365,6 @@ END(debug_vector) | |||
1362 | // 0x5a00 Entry 30 (size 16 bundles) Unaligned Reference (57) | 1365 | // 0x5a00 Entry 30 (size 16 bundles) Unaligned Reference (57) |
1363 | ENTRY(unaligned_access) | 1366 | ENTRY(unaligned_access) |
1364 | DBG_FAULT(30) | 1367 | DBG_FAULT(30) |
1365 | mov r16=cr.ipsr | ||
1366 | mov r31=pr // prepare to save predicates | 1368 | mov r31=pr // prepare to save predicates |
1367 | ;; | 1369 | ;; |
1368 | br.sptk.many dispatch_unaligned_handler | 1370 | br.sptk.many dispatch_unaligned_handler |
diff --git a/arch/ia64/kernel/mca_asm.S b/arch/ia64/kernel/mca_asm.S index 403a80a58c13..60a464bfd9e2 100644 --- a/arch/ia64/kernel/mca_asm.S +++ b/arch/ia64/kernel/mca_asm.S | |||
@@ -512,7 +512,7 @@ ia64_state_save: | |||
512 | st8 [temp1]=r12 // os_status, default is cold boot | 512 | st8 [temp1]=r12 // os_status, default is cold boot |
513 | mov r6=IA64_MCA_SAME_CONTEXT | 513 | mov r6=IA64_MCA_SAME_CONTEXT |
514 | ;; | 514 | ;; |
515 | st8 [temp1]=r6 // context, default is same context | 515 | st8 [temp2]=r6 // context, default is same context |
516 | 516 | ||
517 | // Save the pt_regs data that is not in minstate. The previous code | 517 | // Save the pt_regs data that is not in minstate. The previous code |
518 | // left regs at sos. | 518 | // left regs at sos. |
diff --git a/arch/ia64/kernel/mca_drv.c b/arch/ia64/kernel/mca_drv.c index 3492e3211a44..e883d85906db 100644 --- a/arch/ia64/kernel/mca_drv.c +++ b/arch/ia64/kernel/mca_drv.c | |||
@@ -123,8 +123,9 @@ mca_page_isolate(unsigned long paddr) | |||
123 | void | 123 | void |
124 | mca_handler_bh(unsigned long paddr) | 124 | mca_handler_bh(unsigned long paddr) |
125 | { | 125 | { |
126 | printk(KERN_DEBUG "OS_MCA: process [pid: %d](%s) encounters MCA.\n", | 126 | printk(KERN_ERR |
127 | current->pid, current->comm); | 127 | "OS_MCA: process [pid: %d](%s) encounters MCA (paddr=%lx)\n", |
128 | current->pid, current->comm, paddr); | ||
128 | 129 | ||
129 | spin_lock(&mca_bh_lock); | 130 | spin_lock(&mca_bh_lock); |
130 | switch (mca_page_isolate(paddr)) { | 131 | switch (mca_page_isolate(paddr)) { |
@@ -132,7 +133,7 @@ mca_handler_bh(unsigned long paddr) | |||
132 | printk(KERN_DEBUG "Page isolation: ( %lx ) success.\n", paddr); | 133 | printk(KERN_DEBUG "Page isolation: ( %lx ) success.\n", paddr); |
133 | break; | 134 | break; |
134 | case ISOLATE_NG: | 135 | case ISOLATE_NG: |
135 | printk(KERN_DEBUG "Page isolation: ( %lx ) failure.\n", paddr); | 136 | printk(KERN_CRIT "Page isolation: ( %lx ) failure.\n", paddr); |
136 | break; | 137 | break; |
137 | default: | 138 | default: |
138 | break; | 139 | break; |
@@ -437,6 +438,9 @@ recover_from_read_error(slidx_table_t *slidx, | |||
437 | * the process not have any locks of kernel. | 438 | * the process not have any locks of kernel. |
438 | */ | 439 | */ |
439 | 440 | ||
441 | /* Is minstate valid? */ | ||
442 | if (!peidx_bottom(peidx) || !(peidx_bottom(peidx)->valid.minstate)) | ||
443 | return 0; | ||
440 | psr1 =(struct ia64_psr *)&(peidx_minstate_area(peidx)->pmsa_ipsr); | 444 | psr1 =(struct ia64_psr *)&(peidx_minstate_area(peidx)->pmsa_ipsr); |
441 | 445 | ||
442 | /* | 446 | /* |
@@ -564,10 +568,15 @@ recover_from_processor_error(int platform, slidx_table_t *slidx, | |||
564 | return 0; | 568 | return 0; |
565 | 569 | ||
566 | /* | 570 | /* |
567 | * If there is no bus error, record is weird but we need not to recover. | 571 | * The cache check and bus check bits have four possible states |
572 | * cc bc | ||
573 | * 0 0 Weird record, not recovered | ||
574 | * 1 0 Cache error, not recovered | ||
575 | * 0 1 I/O error, attempt recovery | ||
576 | * 1 1 Memory error, attempt recovery | ||
568 | */ | 577 | */ |
569 | if (psp->bc == 0 || pbci == NULL) | 578 | if (psp->bc == 0 || pbci == NULL) |
570 | return 1; | 579 | return 0; |
571 | 580 | ||
572 | /* | 581 | /* |
573 | * Sorry, we cannot handle so many. | 582 | * Sorry, we cannot handle so many. |
diff --git a/arch/ia64/kernel/sal.c b/arch/ia64/kernel/sal.c index acc0f132f86c..056f7a6eedc7 100644 --- a/arch/ia64/kernel/sal.c +++ b/arch/ia64/kernel/sal.c | |||
@@ -14,6 +14,7 @@ | |||
14 | #include <linux/spinlock.h> | 14 | #include <linux/spinlock.h> |
15 | #include <linux/string.h> | 15 | #include <linux/string.h> |
16 | 16 | ||
17 | #include <asm/delay.h> | ||
17 | #include <asm/page.h> | 18 | #include <asm/page.h> |
18 | #include <asm/sal.h> | 19 | #include <asm/sal.h> |
19 | #include <asm/pal.h> | 20 | #include <asm/pal.h> |
@@ -214,6 +215,78 @@ chk_nointroute_opt(void) | |||
214 | static void __init sal_desc_ap_wakeup(void *p) { } | 215 | static void __init sal_desc_ap_wakeup(void *p) { } |
215 | #endif | 216 | #endif |
216 | 217 | ||
218 | /* | ||
219 | * HP rx5670 firmware polls for interrupts during SAL_CACHE_FLUSH by reading | ||
220 | * cr.ivr, but it never writes cr.eoi. This leaves any interrupt marked as | ||
221 | * "in-service" and masks other interrupts of equal or lower priority. | ||
222 | * | ||
223 | * HP internal defect reports: F1859, F2775, F3031. | ||
224 | */ | ||
225 | static int sal_cache_flush_drops_interrupts; | ||
226 | |||
227 | static void __init | ||
228 | check_sal_cache_flush (void) | ||
229 | { | ||
230 | unsigned long flags, itv; | ||
231 | int cpu; | ||
232 | u64 vector; | ||
233 | |||
234 | cpu = get_cpu(); | ||
235 | local_irq_save(flags); | ||
236 | |||
237 | /* | ||
238 | * Schedule a timer interrupt, wait until it's reported, and see if | ||
239 | * SAL_CACHE_FLUSH drops it. | ||
240 | */ | ||
241 | itv = ia64_get_itv(); | ||
242 | BUG_ON((itv & (1 << 16)) == 0); | ||
243 | |||
244 | ia64_set_itv(IA64_TIMER_VECTOR); | ||
245 | ia64_set_itm(ia64_get_itc() + 1000); | ||
246 | |||
247 | while (!ia64_get_irr(IA64_TIMER_VECTOR)) | ||
248 | cpu_relax(); | ||
249 | |||
250 | ia64_sal_cache_flush(3); | ||
251 | |||
252 | if (ia64_get_irr(IA64_TIMER_VECTOR)) { | ||
253 | vector = ia64_get_ivr(); | ||
254 | ia64_eoi(); | ||
255 | WARN_ON(vector != IA64_TIMER_VECTOR); | ||
256 | } else { | ||
257 | sal_cache_flush_drops_interrupts = 1; | ||
258 | printk(KERN_ERR "SAL: SAL_CACHE_FLUSH drops interrupts; " | ||
259 | "PAL_CACHE_FLUSH will be used instead\n"); | ||
260 | ia64_eoi(); | ||
261 | } | ||
262 | |||
263 | ia64_set_itv(itv); | ||
264 | local_irq_restore(flags); | ||
265 | put_cpu(); | ||
266 | } | ||
267 | |||
268 | s64 | ||
269 | ia64_sal_cache_flush (u64 cache_type) | ||
270 | { | ||
271 | struct ia64_sal_retval isrv; | ||
272 | |||
273 | if (sal_cache_flush_drops_interrupts) { | ||
274 | unsigned long flags; | ||
275 | u64 progress; | ||
276 | s64 rc; | ||
277 | |||
278 | progress = 0; | ||
279 | local_irq_save(flags); | ||
280 | rc = ia64_pal_cache_flush(cache_type, | ||
281 | PAL_CACHE_FLUSH_INVALIDATE, &progress, NULL); | ||
282 | local_irq_restore(flags); | ||
283 | return rc; | ||
284 | } | ||
285 | |||
286 | SAL_CALL(isrv, SAL_CACHE_FLUSH, cache_type, 0, 0, 0, 0, 0, 0); | ||
287 | return isrv.status; | ||
288 | } | ||
289 | |||
217 | void __init | 290 | void __init |
218 | ia64_sal_init (struct ia64_sal_systab *systab) | 291 | ia64_sal_init (struct ia64_sal_systab *systab) |
219 | { | 292 | { |
@@ -262,6 +335,8 @@ ia64_sal_init (struct ia64_sal_systab *systab) | |||
262 | } | 335 | } |
263 | p += SAL_DESC_SIZE(*p); | 336 | p += SAL_DESC_SIZE(*p); |
264 | } | 337 | } |
338 | |||
339 | check_sal_cache_flush(); | ||
265 | } | 340 | } |
266 | 341 | ||
267 | int | 342 | int |
diff --git a/arch/ia64/kernel/setup.c b/arch/ia64/kernel/setup.c index c0766575a3a2..3258e09278d0 100644 --- a/arch/ia64/kernel/setup.c +++ b/arch/ia64/kernel/setup.c | |||
@@ -71,6 +71,8 @@ unsigned long __per_cpu_offset[NR_CPUS]; | |||
71 | EXPORT_SYMBOL(__per_cpu_offset); | 71 | EXPORT_SYMBOL(__per_cpu_offset); |
72 | #endif | 72 | #endif |
73 | 73 | ||
74 | extern void ia64_setup_printk_clock(void); | ||
75 | |||
74 | DEFINE_PER_CPU(struct cpuinfo_ia64, cpu_info); | 76 | DEFINE_PER_CPU(struct cpuinfo_ia64, cpu_info); |
75 | DEFINE_PER_CPU(unsigned long, local_per_cpu_offset); | 77 | DEFINE_PER_CPU(unsigned long, local_per_cpu_offset); |
76 | DEFINE_PER_CPU(unsigned long, ia64_phys_stacked_size_p8); | 78 | DEFINE_PER_CPU(unsigned long, ia64_phys_stacked_size_p8); |
@@ -428,6 +430,7 @@ setup_arch (char **cmdline_p) | |||
428 | if (early_console_setup(*cmdline_p) == 0) | 430 | if (early_console_setup(*cmdline_p) == 0) |
429 | mark_bsp_online(); | 431 | mark_bsp_online(); |
430 | 432 | ||
433 | parse_early_param(); | ||
431 | #ifdef CONFIG_ACPI | 434 | #ifdef CONFIG_ACPI |
432 | /* Initialize the ACPI boot-time table parser */ | 435 | /* Initialize the ACPI boot-time table parser */ |
433 | acpi_table_init(); | 436 | acpi_table_init(); |
@@ -445,6 +448,8 @@ setup_arch (char **cmdline_p) | |||
445 | /* process SAL system table: */ | 448 | /* process SAL system table: */ |
446 | ia64_sal_init(efi.sal_systab); | 449 | ia64_sal_init(efi.sal_systab); |
447 | 450 | ||
451 | ia64_setup_printk_clock(); | ||
452 | |||
448 | #ifdef CONFIG_SMP | 453 | #ifdef CONFIG_SMP |
449 | cpu_physical_id(0) = hard_smp_processor_id(); | 454 | cpu_physical_id(0) = hard_smp_processor_id(); |
450 | 455 | ||
@@ -684,6 +689,9 @@ void | |||
684 | setup_per_cpu_areas (void) | 689 | setup_per_cpu_areas (void) |
685 | { | 690 | { |
686 | /* start_kernel() requires this... */ | 691 | /* start_kernel() requires this... */ |
692 | #ifdef CONFIG_ACPI_HOTPLUG_CPU | ||
693 | prefill_possible_map(); | ||
694 | #endif | ||
687 | } | 695 | } |
688 | 696 | ||
689 | /* | 697 | /* |
diff --git a/arch/ia64/kernel/smpboot.c b/arch/ia64/kernel/smpboot.c index 8f44e7d2df66..b681ef34a86e 100644 --- a/arch/ia64/kernel/smpboot.c +++ b/arch/ia64/kernel/smpboot.c | |||
@@ -129,7 +129,7 @@ DEFINE_PER_CPU(int, cpu_state); | |||
129 | /* Bitmasks of currently online, and possible CPUs */ | 129 | /* Bitmasks of currently online, and possible CPUs */ |
130 | cpumask_t cpu_online_map; | 130 | cpumask_t cpu_online_map; |
131 | EXPORT_SYMBOL(cpu_online_map); | 131 | EXPORT_SYMBOL(cpu_online_map); |
132 | cpumask_t cpu_possible_map; | 132 | cpumask_t cpu_possible_map = CPU_MASK_NONE; |
133 | EXPORT_SYMBOL(cpu_possible_map); | 133 | EXPORT_SYMBOL(cpu_possible_map); |
134 | 134 | ||
135 | cpumask_t cpu_core_map[NR_CPUS] __cacheline_aligned; | 135 | cpumask_t cpu_core_map[NR_CPUS] __cacheline_aligned; |
@@ -506,9 +506,6 @@ smp_build_cpu_map (void) | |||
506 | 506 | ||
507 | for (cpu = 0; cpu < NR_CPUS; cpu++) { | 507 | for (cpu = 0; cpu < NR_CPUS; cpu++) { |
508 | ia64_cpu_to_sapicid[cpu] = -1; | 508 | ia64_cpu_to_sapicid[cpu] = -1; |
509 | #ifdef CONFIG_HOTPLUG_CPU | ||
510 | cpu_set(cpu, cpu_possible_map); | ||
511 | #endif | ||
512 | } | 509 | } |
513 | 510 | ||
514 | ia64_cpu_to_sapicid[0] = boot_cpu_id; | 511 | ia64_cpu_to_sapicid[0] = boot_cpu_id; |
diff --git a/arch/ia64/kernel/time.c b/arch/ia64/kernel/time.c index 028a2b95936c..307d01e15b2e 100644 --- a/arch/ia64/kernel/time.c +++ b/arch/ia64/kernel/time.c | |||
@@ -250,31 +250,53 @@ time_init (void) | |||
250 | set_normalized_timespec(&wall_to_monotonic, -xtime.tv_sec, -xtime.tv_nsec); | 250 | set_normalized_timespec(&wall_to_monotonic, -xtime.tv_sec, -xtime.tv_nsec); |
251 | } | 251 | } |
252 | 252 | ||
253 | #define SMALLUSECS 100 | 253 | /* |
254 | * Generic udelay assumes that if preemption is allowed and the thread | ||
255 | * migrates to another CPU, that the ITC values are synchronized across | ||
256 | * all CPUs. | ||
257 | */ | ||
258 | static void | ||
259 | ia64_itc_udelay (unsigned long usecs) | ||
260 | { | ||
261 | unsigned long start = ia64_get_itc(); | ||
262 | unsigned long end = start + usecs*local_cpu_data->cyc_per_usec; | ||
263 | |||
264 | while (time_before(ia64_get_itc(), end)) | ||
265 | cpu_relax(); | ||
266 | } | ||
267 | |||
268 | void (*ia64_udelay)(unsigned long usecs) = &ia64_itc_udelay; | ||
254 | 269 | ||
255 | void | 270 | void |
256 | udelay (unsigned long usecs) | 271 | udelay (unsigned long usecs) |
257 | { | 272 | { |
258 | unsigned long start; | 273 | (*ia64_udelay)(usecs); |
259 | unsigned long cycles; | 274 | } |
260 | unsigned long smallusecs; | 275 | EXPORT_SYMBOL(udelay); |
261 | 276 | ||
262 | /* | 277 | static unsigned long long ia64_itc_printk_clock(void) |
263 | * Execute the non-preemptible delay loop (because the ITC might | 278 | { |
264 | * not be synchronized between CPUS) in relatively short time | 279 | if (ia64_get_kr(IA64_KR_PER_CPU_DATA)) |
265 | * chunks, allowing preemption between the chunks. | 280 | return sched_clock(); |
266 | */ | 281 | return 0; |
267 | while (usecs > 0) { | 282 | } |
268 | smallusecs = (usecs > SMALLUSECS) ? SMALLUSECS : usecs; | 283 | |
269 | preempt_disable(); | 284 | static unsigned long long ia64_default_printk_clock(void) |
270 | cycles = smallusecs*local_cpu_data->cyc_per_usec; | 285 | { |
271 | start = ia64_get_itc(); | 286 | return (unsigned long long)(jiffies_64 - INITIAL_JIFFIES) * |
287 | (1000000000/HZ); | ||
288 | } | ||
272 | 289 | ||
273 | while (ia64_get_itc() - start < cycles) | 290 | unsigned long long (*ia64_printk_clock)(void) = &ia64_default_printk_clock; |
274 | cpu_relax(); | ||
275 | 291 | ||
276 | preempt_enable(); | 292 | unsigned long long printk_clock(void) |
277 | usecs -= smallusecs; | 293 | { |
278 | } | 294 | return ia64_printk_clock(); |
295 | } | ||
296 | |||
297 | void __init | ||
298 | ia64_setup_printk_clock(void) | ||
299 | { | ||
300 | if (!(sal_platform_features & IA64_SAL_PLATFORM_FEATURE_ITC_DRIFT)) | ||
301 | ia64_printk_clock = ia64_itc_printk_clock; | ||
279 | } | 302 | } |
280 | EXPORT_SYMBOL(udelay); | ||
diff --git a/arch/ia64/kernel/topology.c b/arch/ia64/kernel/topology.c index 706b7734e191..6e5eea19fa67 100644 --- a/arch/ia64/kernel/topology.c +++ b/arch/ia64/kernel/topology.c | |||
@@ -71,31 +71,33 @@ static int __init topology_init(void) | |||
71 | int i, err = 0; | 71 | int i, err = 0; |
72 | 72 | ||
73 | #ifdef CONFIG_NUMA | 73 | #ifdef CONFIG_NUMA |
74 | sysfs_nodes = kmalloc(sizeof(struct node) * MAX_NUMNODES, GFP_KERNEL); | 74 | sysfs_nodes = kzalloc(sizeof(struct node) * MAX_NUMNODES, GFP_KERNEL); |
75 | if (!sysfs_nodes) { | 75 | if (!sysfs_nodes) { |
76 | err = -ENOMEM; | 76 | err = -ENOMEM; |
77 | goto out; | 77 | goto out; |
78 | } | 78 | } |
79 | memset(sysfs_nodes, 0, sizeof(struct node) * MAX_NUMNODES); | ||
80 | 79 | ||
81 | /* MCD - Do we want to register all ONLINE nodes, or all POSSIBLE nodes? */ | 80 | /* |
82 | for_each_online_node(i) | 81 | * MCD - Do we want to register all ONLINE nodes, or all POSSIBLE nodes? |
82 | */ | ||
83 | for_each_online_node(i) { | ||
83 | if ((err = register_node(&sysfs_nodes[i], i, 0))) | 84 | if ((err = register_node(&sysfs_nodes[i], i, 0))) |
84 | goto out; | 85 | goto out; |
86 | } | ||
85 | #endif | 87 | #endif |
86 | 88 | ||
87 | sysfs_cpus = kmalloc(sizeof(struct ia64_cpu) * NR_CPUS, GFP_KERNEL); | 89 | sysfs_cpus = kzalloc(sizeof(struct ia64_cpu) * NR_CPUS, GFP_KERNEL); |
88 | if (!sysfs_cpus) { | 90 | if (!sysfs_cpus) { |
89 | err = -ENOMEM; | 91 | err = -ENOMEM; |
90 | goto out; | 92 | goto out; |
91 | } | 93 | } |
92 | memset(sysfs_cpus, 0, sizeof(struct ia64_cpu) * NR_CPUS); | ||
93 | 94 | ||
94 | for_each_present_cpu(i) | 95 | for_each_present_cpu(i) { |
95 | if((err = arch_register_cpu(i))) | 96 | if((err = arch_register_cpu(i))) |
96 | goto out; | 97 | goto out; |
98 | } | ||
97 | out: | 99 | out: |
98 | return err; | 100 | return err; |
99 | } | 101 | } |
100 | 102 | ||
101 | __initcall(topology_init); | 103 | subsys_initcall(topology_init); |
diff --git a/arch/ia64/kernel/traps.c b/arch/ia64/kernel/traps.c index 55391901b013..dabd6c32641e 100644 --- a/arch/ia64/kernel/traps.c +++ b/arch/ia64/kernel/traps.c | |||
@@ -16,6 +16,7 @@ | |||
16 | #include <linux/module.h> /* for EXPORT_SYMBOL */ | 16 | #include <linux/module.h> /* for EXPORT_SYMBOL */ |
17 | #include <linux/hardirq.h> | 17 | #include <linux/hardirq.h> |
18 | #include <linux/kprobes.h> | 18 | #include <linux/kprobes.h> |
19 | #include <linux/delay.h> /* for ssleep() */ | ||
19 | 20 | ||
20 | #include <asm/fpswa.h> | 21 | #include <asm/fpswa.h> |
21 | #include <asm/ia32.h> | 22 | #include <asm/ia32.h> |
@@ -116,6 +117,13 @@ die (const char *str, struct pt_regs *regs, long err) | |||
116 | bust_spinlocks(0); | 117 | bust_spinlocks(0); |
117 | die.lock_owner = -1; | 118 | die.lock_owner = -1; |
118 | spin_unlock_irq(&die.lock); | 119 | spin_unlock_irq(&die.lock); |
120 | |||
121 | if (panic_on_oops) { | ||
122 | printk(KERN_EMERG "Fatal exception: panic in 5 seconds\n"); | ||
123 | ssleep(5); | ||
124 | panic("Fatal exception"); | ||
125 | } | ||
126 | |||
119 | do_exit(SIGSEGV); | 127 | do_exit(SIGSEGV); |
120 | } | 128 | } |
121 | 129 | ||
diff --git a/arch/ia64/kernel/unaligned.c b/arch/ia64/kernel/unaligned.c index 43b45b65ee5a..1e357550c776 100644 --- a/arch/ia64/kernel/unaligned.c +++ b/arch/ia64/kernel/unaligned.c | |||
@@ -24,7 +24,7 @@ | |||
24 | #include <asm/uaccess.h> | 24 | #include <asm/uaccess.h> |
25 | #include <asm/unaligned.h> | 25 | #include <asm/unaligned.h> |
26 | 26 | ||
27 | extern void die_if_kernel(char *str, struct pt_regs *regs, long err) __attribute__ ((noreturn)); | 27 | extern void die_if_kernel(char *str, struct pt_regs *regs, long err); |
28 | 28 | ||
29 | #undef DEBUG_UNALIGNED_TRAP | 29 | #undef DEBUG_UNALIGNED_TRAP |
30 | 30 | ||
@@ -53,6 +53,15 @@ dump (const char *str, void *vp, size_t len) | |||
53 | #define SIGN_EXT9 0xffffffffffffff00ul | 53 | #define SIGN_EXT9 0xffffffffffffff00ul |
54 | 54 | ||
55 | /* | 55 | /* |
56 | * sysctl settable hook which tells the kernel whether to honor the | ||
57 | * IA64_THREAD_UAC_NOPRINT prctl. Because this is user settable, we want | ||
58 | * to allow the super user to enable/disable this for security reasons | ||
59 | * (i.e. don't allow attacker to fill up logs with unaligned accesses). | ||
60 | */ | ||
61 | int no_unaligned_warning; | ||
62 | static int noprint_warning; | ||
63 | |||
64 | /* | ||
56 | * For M-unit: | 65 | * For M-unit: |
57 | * | 66 | * |
58 | * opcode | m | x6 | | 67 | * opcode | m | x6 | |
@@ -1283,8 +1292,9 @@ within_logging_rate_limit (void) | |||
1283 | 1292 | ||
1284 | if (jiffies - last_time > 5*HZ) | 1293 | if (jiffies - last_time > 5*HZ) |
1285 | count = 0; | 1294 | count = 0; |
1286 | if (++count < 5) { | 1295 | if (count < 5) { |
1287 | last_time = jiffies; | 1296 | last_time = jiffies; |
1297 | count++; | ||
1288 | return 1; | 1298 | return 1; |
1289 | } | 1299 | } |
1290 | return 0; | 1300 | return 0; |
@@ -1323,8 +1333,9 @@ ia64_handle_unaligned (unsigned long ifa, struct pt_regs *regs) | |||
1323 | if ((current->thread.flags & IA64_THREAD_UAC_SIGBUS) != 0) | 1333 | if ((current->thread.flags & IA64_THREAD_UAC_SIGBUS) != 0) |
1324 | goto force_sigbus; | 1334 | goto force_sigbus; |
1325 | 1335 | ||
1326 | if (!(current->thread.flags & IA64_THREAD_UAC_NOPRINT) | 1336 | if (!no_unaligned_warning && |
1327 | && within_logging_rate_limit()) | 1337 | !(current->thread.flags & IA64_THREAD_UAC_NOPRINT) && |
1338 | within_logging_rate_limit()) | ||
1328 | { | 1339 | { |
1329 | char buf[200]; /* comm[] is at most 16 bytes... */ | 1340 | char buf[200]; /* comm[] is at most 16 bytes... */ |
1330 | size_t len; | 1341 | size_t len; |
@@ -1339,7 +1350,22 @@ ia64_handle_unaligned (unsigned long ifa, struct pt_regs *regs) | |||
1339 | if (user_mode(regs)) | 1350 | if (user_mode(regs)) |
1340 | tty_write_message(current->signal->tty, buf); | 1351 | tty_write_message(current->signal->tty, buf); |
1341 | buf[len-1] = '\0'; /* drop '\r' */ | 1352 | buf[len-1] = '\0'; /* drop '\r' */ |
1342 | printk(KERN_WARNING "%s", buf); /* watch for command names containing %s */ | 1353 | /* watch for command names containing %s */ |
1354 | printk(KERN_WARNING "%s", buf); | ||
1355 | } else { | ||
1356 | if (no_unaligned_warning && !noprint_warning) { | ||
1357 | noprint_warning = 1; | ||
1358 | printk(KERN_WARNING "%s(%d) encountered an " | ||
1359 | "unaligned exception which required\n" | ||
1360 | "kernel assistance, which degrades " | ||
1361 | "the performance of the application.\n" | ||
1362 | "Unaligned exception warnings have " | ||
1363 | "been disabled by the system " | ||
1364 | "administrator\n" | ||
1365 | "echo 0 > /proc/sys/kernel/ignore-" | ||
1366 | "unaligned-usertrap to re-enable\n", | ||
1367 | current->comm, current->pid); | ||
1368 | } | ||
1343 | } | 1369 | } |
1344 | } else { | 1370 | } else { |
1345 | if (within_logging_rate_limit()) | 1371 | if (within_logging_rate_limit()) |
diff --git a/arch/ia64/pci/pci.c b/arch/ia64/pci/pci.c index d27ecdcb6fca..9ba32b2d96d0 100644 --- a/arch/ia64/pci/pci.c +++ b/arch/ia64/pci/pci.c | |||
@@ -193,12 +193,12 @@ add_io_space (struct pci_root_info *info, struct acpi_resource_address64 *addr) | |||
193 | goto free_resource; | 193 | goto free_resource; |
194 | } | 194 | } |
195 | 195 | ||
196 | min = addr->min_address_range; | 196 | min = addr->minimum; |
197 | max = min + addr->address_length - 1; | 197 | max = min + addr->address_length - 1; |
198 | if (addr->attribute.io.translation_attribute == ACPI_SPARSE_TRANSLATION) | 198 | if (addr->info.io.translation_type == ACPI_SPARSE_TRANSLATION) |
199 | sparse = 1; | 199 | sparse = 1; |
200 | 200 | ||
201 | space_nr = new_space(addr->address_translation_offset, sparse); | 201 | space_nr = new_space(addr->translation_offset, sparse); |
202 | if (space_nr == ~0) | 202 | if (space_nr == ~0) |
203 | goto free_name; | 203 | goto free_name; |
204 | 204 | ||
@@ -285,7 +285,7 @@ static __devinit acpi_status add_window(struct acpi_resource *res, void *data) | |||
285 | if (addr.resource_type == ACPI_MEMORY_RANGE) { | 285 | if (addr.resource_type == ACPI_MEMORY_RANGE) { |
286 | flags = IORESOURCE_MEM; | 286 | flags = IORESOURCE_MEM; |
287 | root = &iomem_resource; | 287 | root = &iomem_resource; |
288 | offset = addr.address_translation_offset; | 288 | offset = addr.translation_offset; |
289 | } else if (addr.resource_type == ACPI_IO_RANGE) { | 289 | } else if (addr.resource_type == ACPI_IO_RANGE) { |
290 | flags = IORESOURCE_IO; | 290 | flags = IORESOURCE_IO; |
291 | root = &ioport_resource; | 291 | root = &ioport_resource; |
@@ -298,7 +298,7 @@ static __devinit acpi_status add_window(struct acpi_resource *res, void *data) | |||
298 | window = &info->controller->window[info->controller->windows++]; | 298 | window = &info->controller->window[info->controller->windows++]; |
299 | window->resource.name = info->name; | 299 | window->resource.name = info->name; |
300 | window->resource.flags = flags; | 300 | window->resource.flags = flags; |
301 | window->resource.start = addr.min_address_range + offset; | 301 | window->resource.start = addr.minimum + offset; |
302 | window->resource.end = window->resource.start + addr.address_length - 1; | 302 | window->resource.end = window->resource.start + addr.address_length - 1; |
303 | window->resource.child = NULL; | 303 | window->resource.child = NULL; |
304 | window->offset = offset; | 304 | window->offset = offset; |
@@ -579,7 +579,7 @@ pcibios_align_resource (void *data, struct resource *res, | |||
579 | char * __init | 579 | char * __init |
580 | pcibios_setup (char *str) | 580 | pcibios_setup (char *str) |
581 | { | 581 | { |
582 | return NULL; | 582 | return str; |
583 | } | 583 | } |
584 | 584 | ||
585 | int | 585 | int |
diff --git a/arch/ia64/sn/Makefile b/arch/ia64/sn/Makefile index a269f6d84c29..79a7df02e812 100644 --- a/arch/ia64/sn/Makefile +++ b/arch/ia64/sn/Makefile | |||
@@ -9,6 +9,4 @@ | |||
9 | # Makefile for the sn ia64 subplatform | 9 | # Makefile for the sn ia64 subplatform |
10 | # | 10 | # |
11 | 11 | ||
12 | CPPFLAGS += -I$(srctree)/arch/ia64/sn/include | ||
13 | |||
14 | obj-y += kernel/ pci/ | 12 | obj-y += kernel/ pci/ |
diff --git a/arch/ia64/sn/kernel/Makefile b/arch/ia64/sn/kernel/Makefile index 4351c4ff9845..3e9b4eea7418 100644 --- a/arch/ia64/sn/kernel/Makefile +++ b/arch/ia64/sn/kernel/Makefile | |||
@@ -7,6 +7,8 @@ | |||
7 | # Copyright (C) 1999,2001-2005 Silicon Graphics, Inc. All Rights Reserved. | 7 | # Copyright (C) 1999,2001-2005 Silicon Graphics, Inc. All Rights Reserved. |
8 | # | 8 | # |
9 | 9 | ||
10 | CPPFLAGS += -I$(srctree)/arch/ia64/sn/include | ||
11 | |||
10 | obj-y += setup.o bte.o bte_error.o irq.o mca.o idle.o \ | 12 | obj-y += setup.o bte.o bte_error.o irq.o mca.o idle.o \ |
11 | huberror.o io_init.o iomv.o klconflib.o sn2/ | 13 | huberror.o io_init.o iomv.o klconflib.o sn2/ |
12 | obj-$(CONFIG_IA64_GENERIC) += machvec.o | 14 | obj-$(CONFIG_IA64_GENERIC) += machvec.o |
diff --git a/arch/ia64/sn/kernel/bte.c b/arch/ia64/sn/kernel/bte.c index dd73c0cb754b..1f11db470d90 100644 --- a/arch/ia64/sn/kernel/bte.c +++ b/arch/ia64/sn/kernel/bte.c | |||
@@ -3,7 +3,7 @@ | |||
3 | * License. See the file "COPYING" in the main directory of this archive | 3 | * License. See the file "COPYING" in the main directory of this archive |
4 | * for more details. | 4 | * for more details. |
5 | * | 5 | * |
6 | * Copyright (c) 2000-2005 Silicon Graphics, Inc. All Rights Reserved. | 6 | * Copyright (c) 2000-2006 Silicon Graphics, Inc. All Rights Reserved. |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include <linux/config.h> | 9 | #include <linux/config.h> |
@@ -186,18 +186,13 @@ retry_bteop: | |||
186 | 186 | ||
187 | /* Initialize the notification to a known value. */ | 187 | /* Initialize the notification to a known value. */ |
188 | *bte->most_rcnt_na = BTE_WORD_BUSY; | 188 | *bte->most_rcnt_na = BTE_WORD_BUSY; |
189 | notif_phys_addr = TO_PHYS(ia64_tpa((unsigned long)bte->most_rcnt_na)); | 189 | notif_phys_addr = (u64)bte->most_rcnt_na; |
190 | 190 | ||
191 | if (is_shub2()) { | ||
192 | src = SH2_TIO_PHYS_TO_DMA(src); | ||
193 | dest = SH2_TIO_PHYS_TO_DMA(dest); | ||
194 | notif_phys_addr = SH2_TIO_PHYS_TO_DMA(notif_phys_addr); | ||
195 | } | ||
196 | /* Set the source and destination registers */ | 191 | /* Set the source and destination registers */ |
197 | BTE_PRINTKV(("IBSA = 0x%lx)\n", (TO_PHYS(src)))); | 192 | BTE_PRINTKV(("IBSA = 0x%lx)\n", src)); |
198 | BTE_SRC_STORE(bte, TO_PHYS(src)); | 193 | BTE_SRC_STORE(bte, src); |
199 | BTE_PRINTKV(("IBDA = 0x%lx)\n", (TO_PHYS(dest)))); | 194 | BTE_PRINTKV(("IBDA = 0x%lx)\n", dest)); |
200 | BTE_DEST_STORE(bte, TO_PHYS(dest)); | 195 | BTE_DEST_STORE(bte, dest); |
201 | 196 | ||
202 | /* Set the notification register */ | 197 | /* Set the notification register */ |
203 | BTE_PRINTKV(("IBNA = 0x%lx)\n", notif_phys_addr)); | 198 | BTE_PRINTKV(("IBNA = 0x%lx)\n", notif_phys_addr)); |
diff --git a/arch/ia64/sn/kernel/io_init.c b/arch/ia64/sn/kernel/io_init.c index 00700f7e6837..dfb3f2902379 100644 --- a/arch/ia64/sn/kernel/io_init.c +++ b/arch/ia64/sn/kernel/io_init.c | |||
@@ -10,6 +10,7 @@ | |||
10 | #include <linux/nodemask.h> | 10 | #include <linux/nodemask.h> |
11 | #include <asm/sn/types.h> | 11 | #include <asm/sn/types.h> |
12 | #include <asm/sn/addrs.h> | 12 | #include <asm/sn/addrs.h> |
13 | #include <asm/sn/sn_feature_sets.h> | ||
13 | #include <asm/sn/geo.h> | 14 | #include <asm/sn/geo.h> |
14 | #include <asm/sn/io.h> | 15 | #include <asm/sn/io.h> |
15 | #include <asm/sn/pcibr_provider.h> | 16 | #include <asm/sn/pcibr_provider.h> |
@@ -22,6 +23,10 @@ | |||
22 | #include "xtalk/hubdev.h" | 23 | #include "xtalk/hubdev.h" |
23 | #include "xtalk/xwidgetdev.h" | 24 | #include "xtalk/xwidgetdev.h" |
24 | 25 | ||
26 | |||
27 | extern void sn_init_cpei_timer(void); | ||
28 | extern void register_sn_procfs(void); | ||
29 | |||
25 | static struct list_head sn_sysdata_list; | 30 | static struct list_head sn_sysdata_list; |
26 | 31 | ||
27 | /* sysdata list struct */ | 32 | /* sysdata list struct */ |
@@ -39,12 +44,12 @@ struct brick { | |||
39 | struct slab_info slab_info[MAX_SLABS + 1]; | 44 | struct slab_info slab_info[MAX_SLABS + 1]; |
40 | }; | 45 | }; |
41 | 46 | ||
42 | int sn_ioif_inited = 0; /* SN I/O infrastructure initialized? */ | 47 | int sn_ioif_inited; /* SN I/O infrastructure initialized? */ |
43 | 48 | ||
44 | struct sn_pcibus_provider *sn_pci_provider[PCIIO_ASIC_MAX_TYPES]; /* indexed by asic type */ | 49 | struct sn_pcibus_provider *sn_pci_provider[PCIIO_ASIC_MAX_TYPES]; /* indexed by asic type */ |
45 | 50 | ||
46 | static int max_segment_number = 0; /* Default highest segment number */ | 51 | static int max_segment_number; /* Default highest segment number */ |
47 | static int max_pcibus_number = 255; /* Default highest pci bus number */ | 52 | static int max_pcibus_number = 255; /* Default highest pci bus number */ |
48 | 53 | ||
49 | /* | 54 | /* |
50 | * Hooks and struct for unsupported pci providers | 55 | * Hooks and struct for unsupported pci providers |
@@ -83,7 +88,6 @@ static inline u64 | |||
83 | sal_get_device_dmaflush_list(u64 nasid, u64 widget_num, u64 device_num, | 88 | sal_get_device_dmaflush_list(u64 nasid, u64 widget_num, u64 device_num, |
84 | u64 address) | 89 | u64 address) |
85 | { | 90 | { |
86 | |||
87 | struct ia64_sal_retval ret_stuff; | 91 | struct ia64_sal_retval ret_stuff; |
88 | ret_stuff.status = 0; | 92 | ret_stuff.status = 0; |
89 | ret_stuff.v0 = 0; | 93 | ret_stuff.v0 = 0; |
@@ -93,7 +97,6 @@ sal_get_device_dmaflush_list(u64 nasid, u64 widget_num, u64 device_num, | |||
93 | (u64) nasid, (u64) widget_num, | 97 | (u64) nasid, (u64) widget_num, |
94 | (u64) device_num, (u64) address, 0, 0, 0); | 98 | (u64) device_num, (u64) address, 0, 0, 0); |
95 | return ret_stuff.status; | 99 | return ret_stuff.status; |
96 | |||
97 | } | 100 | } |
98 | 101 | ||
99 | /* | 102 | /* |
@@ -101,7 +104,6 @@ sal_get_device_dmaflush_list(u64 nasid, u64 widget_num, u64 device_num, | |||
101 | */ | 104 | */ |
102 | static inline u64 sal_get_hubdev_info(u64 handle, u64 address) | 105 | static inline u64 sal_get_hubdev_info(u64 handle, u64 address) |
103 | { | 106 | { |
104 | |||
105 | struct ia64_sal_retval ret_stuff; | 107 | struct ia64_sal_retval ret_stuff; |
106 | ret_stuff.status = 0; | 108 | ret_stuff.status = 0; |
107 | ret_stuff.v0 = 0; | 109 | ret_stuff.v0 = 0; |
@@ -117,7 +119,6 @@ static inline u64 sal_get_hubdev_info(u64 handle, u64 address) | |||
117 | */ | 119 | */ |
118 | static inline u64 sal_get_pcibus_info(u64 segment, u64 busnum, u64 address) | 120 | static inline u64 sal_get_pcibus_info(u64 segment, u64 busnum, u64 address) |
119 | { | 121 | { |
120 | |||
121 | struct ia64_sal_retval ret_stuff; | 122 | struct ia64_sal_retval ret_stuff; |
122 | ret_stuff.status = 0; | 123 | ret_stuff.status = 0; |
123 | ret_stuff.v0 = 0; | 124 | ret_stuff.v0 = 0; |
@@ -173,8 +174,8 @@ sn_pcidev_info_get(struct pci_dev *dev) | |||
173 | */ | 174 | */ |
174 | static u8 war_implemented = 0; | 175 | static u8 war_implemented = 0; |
175 | 176 | ||
176 | static void sn_device_fixup_war(u64 nasid, u64 widget, int device, | 177 | static s64 sn_device_fixup_war(u64 nasid, u64 widget, int device, |
177 | struct sn_flush_device_common *common) | 178 | struct sn_flush_device_common *common) |
178 | { | 179 | { |
179 | struct sn_flush_device_war *war_list; | 180 | struct sn_flush_device_war *war_list; |
180 | struct sn_flush_device_war *dev_entry; | 181 | struct sn_flush_device_war *dev_entry; |
@@ -198,22 +199,23 @@ static void sn_device_fixup_war(u64 nasid, u64 widget, int device, | |||
198 | 199 | ||
199 | dev_entry = war_list + device; | 200 | dev_entry = war_list + device; |
200 | memcpy(common,dev_entry, sizeof(*common)); | 201 | memcpy(common,dev_entry, sizeof(*common)); |
201 | |||
202 | kfree(war_list); | 202 | kfree(war_list); |
203 | |||
204 | return isrv.status; | ||
203 | } | 205 | } |
204 | 206 | ||
205 | /* | 207 | /* |
206 | * sn_fixup_ionodes() - This routine initializes the HUB data strcuture for | 208 | * sn_fixup_ionodes() - This routine initializes the HUB data strcuture for |
207 | * each node in the system. | 209 | * each node in the system. |
208 | */ | 210 | */ |
209 | static void sn_fixup_ionodes(void) | 211 | static void __init sn_fixup_ionodes(void) |
210 | { | 212 | { |
211 | struct sn_flush_device_kernel *sn_flush_device_kernel; | 213 | struct sn_flush_device_kernel *sn_flush_device_kernel; |
212 | struct sn_flush_device_kernel *dev_entry; | 214 | struct sn_flush_device_kernel *dev_entry; |
213 | struct hubdev_info *hubdev; | 215 | struct hubdev_info *hubdev; |
214 | u64 status; | 216 | u64 status; |
215 | u64 nasid; | 217 | u64 nasid; |
216 | int i, widget, device; | 218 | int i, widget, device, size; |
217 | 219 | ||
218 | /* | 220 | /* |
219 | * Get SGI Specific HUB chipset information. | 221 | * Get SGI Specific HUB chipset information. |
@@ -249,53 +251,40 @@ static void sn_fixup_ionodes(void) | |||
249 | if (!hubdev->hdi_flush_nasid_list.widget_p) | 251 | if (!hubdev->hdi_flush_nasid_list.widget_p) |
250 | continue; | 252 | continue; |
251 | 253 | ||
254 | size = (HUB_WIDGET_ID_MAX + 1) * | ||
255 | sizeof(struct sn_flush_device_kernel *); | ||
252 | hubdev->hdi_flush_nasid_list.widget_p = | 256 | hubdev->hdi_flush_nasid_list.widget_p = |
253 | kmalloc((HUB_WIDGET_ID_MAX + 1) * | 257 | kzalloc(size, GFP_KERNEL); |
254 | sizeof(struct sn_flush_device_kernel *), | 258 | if (!hubdev->hdi_flush_nasid_list.widget_p) |
255 | GFP_KERNEL); | 259 | BUG(); |
256 | memset(hubdev->hdi_flush_nasid_list.widget_p, 0x0, | ||
257 | (HUB_WIDGET_ID_MAX + 1) * | ||
258 | sizeof(struct sn_flush_device_kernel *)); | ||
259 | 260 | ||
260 | for (widget = 0; widget <= HUB_WIDGET_ID_MAX; widget++) { | 261 | for (widget = 0; widget <= HUB_WIDGET_ID_MAX; widget++) { |
261 | sn_flush_device_kernel = kmalloc(DEV_PER_WIDGET * | 262 | size = DEV_PER_WIDGET * |
262 | sizeof(struct | 263 | sizeof(struct sn_flush_device_kernel); |
263 | sn_flush_device_kernel), | 264 | sn_flush_device_kernel = kzalloc(size, GFP_KERNEL); |
264 | GFP_KERNEL); | ||
265 | if (!sn_flush_device_kernel) | 265 | if (!sn_flush_device_kernel) |
266 | BUG(); | 266 | BUG(); |
267 | memset(sn_flush_device_kernel, 0x0, | ||
268 | DEV_PER_WIDGET * | ||
269 | sizeof(struct sn_flush_device_kernel)); | ||
270 | 267 | ||
271 | dev_entry = sn_flush_device_kernel; | 268 | dev_entry = sn_flush_device_kernel; |
272 | for (device = 0; device < DEV_PER_WIDGET; | 269 | for (device = 0; device < DEV_PER_WIDGET; |
273 | device++,dev_entry++) { | 270 | device++,dev_entry++) { |
274 | dev_entry->common = kmalloc(sizeof(struct | 271 | size = sizeof(struct sn_flush_device_common); |
275 | sn_flush_device_common), | 272 | dev_entry->common = kzalloc(size, GFP_KERNEL); |
276 | GFP_KERNEL); | ||
277 | if (!dev_entry->common) | 273 | if (!dev_entry->common) |
278 | BUG(); | 274 | BUG(); |
279 | memset(dev_entry->common, 0x0, sizeof(struct | 275 | |
280 | sn_flush_device_common)); | 276 | if (sn_prom_feature_available( |
281 | 277 | PRF_DEVICE_FLUSH_LIST)) | |
282 | status = sal_get_device_dmaflush_list(nasid, | 278 | status = sal_get_device_dmaflush_list( |
283 | widget, | 279 | nasid, widget, device, |
284 | device, | 280 | (u64)(dev_entry->common)); |
285 | (u64)(dev_entry->common)); | 281 | else |
286 | if (status) { | 282 | status = sn_device_fixup_war(nasid, |
287 | if (sn_sal_rev() < 0x0450) { | 283 | widget, device, |
288 | /* shortlived WAR for older | 284 | dev_entry->common); |
289 | * PROM images | 285 | if (status != SALRET_OK) |
290 | */ | 286 | panic("SAL call failed: %s\n", |
291 | sn_device_fixup_war(nasid, | 287 | ia64_sal_strerror(status)); |
292 | widget, | ||
293 | device, | ||
294 | dev_entry->common); | ||
295 | } | ||
296 | else | ||
297 | BUG(); | ||
298 | } | ||
299 | 288 | ||
300 | spin_lock_init(&dev_entry->sfdl_flush_lock); | 289 | spin_lock_init(&dev_entry->sfdl_flush_lock); |
301 | } | 290 | } |
@@ -383,13 +372,12 @@ void sn_pci_fixup_slot(struct pci_dev *dev) | |||
383 | 372 | ||
384 | pci_dev_get(dev); /* for the sysdata pointer */ | 373 | pci_dev_get(dev); /* for the sysdata pointer */ |
385 | pcidev_info = kzalloc(sizeof(struct pcidev_info), GFP_KERNEL); | 374 | pcidev_info = kzalloc(sizeof(struct pcidev_info), GFP_KERNEL); |
386 | if (pcidev_info <= 0) | 375 | if (!pcidev_info) |
387 | BUG(); /* Cannot afford to run out of memory */ | 376 | BUG(); /* Cannot afford to run out of memory */ |
388 | 377 | ||
389 | sn_irq_info = kmalloc(sizeof(struct sn_irq_info), GFP_KERNEL); | 378 | sn_irq_info = kzalloc(sizeof(struct sn_irq_info), GFP_KERNEL); |
390 | if (sn_irq_info <= 0) | 379 | if (!sn_irq_info) |
391 | BUG(); /* Cannot afford to run out of memory */ | 380 | BUG(); /* Cannot afford to run out of memory */ |
392 | memset(sn_irq_info, 0, sizeof(struct sn_irq_info)); | ||
393 | 381 | ||
394 | /* Call to retrieve pci device information needed by kernel. */ | 382 | /* Call to retrieve pci device information needed by kernel. */ |
395 | status = sal_get_pcidev_info((u64) segment, (u64) dev->bus->number, | 383 | status = sal_get_pcidev_info((u64) segment, (u64) dev->bus->number, |
@@ -467,6 +455,13 @@ void sn_pci_fixup_slot(struct pci_dev *dev) | |||
467 | pcidev_info->pdi_sn_irq_info = NULL; | 455 | pcidev_info->pdi_sn_irq_info = NULL; |
468 | kfree(sn_irq_info); | 456 | kfree(sn_irq_info); |
469 | } | 457 | } |
458 | |||
459 | /* | ||
460 | * MSI currently not supported on altix. Remove this when | ||
461 | * the MSI abstraction patches are integrated into the kernel | ||
462 | * (sometime after 2.6.16 releases) | ||
463 | */ | ||
464 | dev->no_msi = 1; | ||
470 | } | 465 | } |
471 | 466 | ||
472 | /* | 467 | /* |
@@ -475,13 +470,13 @@ void sn_pci_fixup_slot(struct pci_dev *dev) | |||
475 | */ | 470 | */ |
476 | void sn_pci_controller_fixup(int segment, int busnum, struct pci_bus *bus) | 471 | void sn_pci_controller_fixup(int segment, int busnum, struct pci_bus *bus) |
477 | { | 472 | { |
478 | int status = 0; | 473 | int status; |
479 | int nasid, cnode; | 474 | int nasid, cnode; |
480 | struct pci_controller *controller; | 475 | struct pci_controller *controller; |
481 | struct sn_pci_controller *sn_controller; | 476 | struct sn_pci_controller *sn_controller; |
482 | struct pcibus_bussoft *prom_bussoft_ptr; | 477 | struct pcibus_bussoft *prom_bussoft_ptr; |
483 | struct hubdev_info *hubdev_info; | 478 | struct hubdev_info *hubdev_info; |
484 | void *provider_soft = NULL; | 479 | void *provider_soft; |
485 | struct sn_pcibus_provider *provider; | 480 | struct sn_pcibus_provider *provider; |
486 | 481 | ||
487 | status = sal_get_pcibus_info((u64) segment, (u64) busnum, | 482 | status = sal_get_pcibus_info((u64) segment, (u64) busnum, |
@@ -528,6 +523,8 @@ void sn_pci_controller_fixup(int segment, int busnum, struct pci_bus *bus) | |||
528 | bus->sysdata = controller; | 523 | bus->sysdata = controller; |
529 | if (provider->bus_fixup) | 524 | if (provider->bus_fixup) |
530 | provider_soft = (*provider->bus_fixup) (prom_bussoft_ptr, controller); | 525 | provider_soft = (*provider->bus_fixup) (prom_bussoft_ptr, controller); |
526 | else | ||
527 | provider_soft = NULL; | ||
531 | 528 | ||
532 | if (provider_soft == NULL) { | 529 | if (provider_soft == NULL) { |
533 | /* fixup failed or not applicable */ | 530 | /* fixup failed or not applicable */ |
@@ -610,15 +607,15 @@ void sn_bus_store_sysdata(struct pci_dev *dev) | |||
610 | void sn_bus_free_sysdata(void) | 607 | void sn_bus_free_sysdata(void) |
611 | { | 608 | { |
612 | struct sysdata_el *element; | 609 | struct sysdata_el *element; |
613 | struct list_head *list; | 610 | struct list_head *list, *safe; |
614 | 611 | ||
615 | sn_sysdata_free_start: | 612 | list_for_each_safe(list, safe, &sn_sysdata_list) { |
616 | list_for_each(list, &sn_sysdata_list) { | ||
617 | element = list_entry(list, struct sysdata_el, entry); | 613 | element = list_entry(list, struct sysdata_el, entry); |
618 | list_del(&element->entry); | 614 | list_del(&element->entry); |
615 | list_del(&(((struct pcidev_info *) | ||
616 | (element->sysdata))->pdi_list)); | ||
619 | kfree(element->sysdata); | 617 | kfree(element->sysdata); |
620 | kfree(element); | 618 | kfree(element); |
621 | goto sn_sysdata_free_start; | ||
622 | } | 619 | } |
623 | return; | 620 | return; |
624 | } | 621 | } |
@@ -631,13 +628,8 @@ sn_sysdata_free_start: | |||
631 | 628 | ||
632 | static int __init sn_pci_init(void) | 629 | static int __init sn_pci_init(void) |
633 | { | 630 | { |
634 | int i = 0; | 631 | int i, j; |
635 | int j = 0; | ||
636 | struct pci_dev *pci_dev = NULL; | 632 | struct pci_dev *pci_dev = NULL; |
637 | extern void sn_init_cpei_timer(void); | ||
638 | #ifdef CONFIG_PROC_FS | ||
639 | extern void register_sn_procfs(void); | ||
640 | #endif | ||
641 | 633 | ||
642 | if (!ia64_platform_is("sn2") || IS_RUNNING_ON_FAKE_PROM()) | 634 | if (!ia64_platform_is("sn2") || IS_RUNNING_ON_FAKE_PROM()) |
643 | return 0; | 635 | return 0; |
@@ -693,32 +685,29 @@ static int __init sn_pci_init(void) | |||
693 | */ | 685 | */ |
694 | void hubdev_init_node(nodepda_t * npda, cnodeid_t node) | 686 | void hubdev_init_node(nodepda_t * npda, cnodeid_t node) |
695 | { | 687 | { |
696 | |||
697 | struct hubdev_info *hubdev_info; | 688 | struct hubdev_info *hubdev_info; |
689 | int size; | ||
690 | pg_data_t *pg; | ||
691 | |||
692 | size = sizeof(struct hubdev_info); | ||
698 | 693 | ||
699 | if (node >= num_online_nodes()) /* Headless/memless IO nodes */ | 694 | if (node >= num_online_nodes()) /* Headless/memless IO nodes */ |
700 | hubdev_info = | 695 | pg = NODE_DATA(0); |
701 | (struct hubdev_info *)alloc_bootmem_node(NODE_DATA(0), | ||
702 | sizeof(struct | ||
703 | hubdev_info)); | ||
704 | else | 696 | else |
705 | hubdev_info = | 697 | pg = NODE_DATA(node); |
706 | (struct hubdev_info *)alloc_bootmem_node(NODE_DATA(node), | 698 | |
707 | sizeof(struct | 699 | hubdev_info = (struct hubdev_info *)alloc_bootmem_node(pg, size); |
708 | hubdev_info)); | ||
709 | npda->pdinfo = (void *)hubdev_info; | ||
710 | 700 | ||
701 | npda->pdinfo = (void *)hubdev_info; | ||
711 | } | 702 | } |
712 | 703 | ||
713 | geoid_t | 704 | geoid_t |
714 | cnodeid_get_geoid(cnodeid_t cnode) | 705 | cnodeid_get_geoid(cnodeid_t cnode) |
715 | { | 706 | { |
716 | |||
717 | struct hubdev_info *hubdev; | 707 | struct hubdev_info *hubdev; |
718 | 708 | ||
719 | hubdev = (struct hubdev_info *)(NODEPDA(cnode)->pdinfo); | 709 | hubdev = (struct hubdev_info *)(NODEPDA(cnode)->pdinfo); |
720 | return hubdev->hdi_geoid; | 710 | return hubdev->hdi_geoid; |
721 | |||
722 | } | 711 | } |
723 | 712 | ||
724 | subsys_initcall(sn_pci_init); | 713 | subsys_initcall(sn_pci_init); |
diff --git a/arch/ia64/sn/kernel/irq.c b/arch/ia64/sn/kernel/irq.c index ec37084bdc17..c373113d073a 100644 --- a/arch/ia64/sn/kernel/irq.c +++ b/arch/ia64/sn/kernel/irq.c | |||
@@ -5,11 +5,12 @@ | |||
5 | * License. See the file "COPYING" in the main directory of this archive | 5 | * License. See the file "COPYING" in the main directory of this archive |
6 | * for more details. | 6 | * for more details. |
7 | * | 7 | * |
8 | * Copyright (c) 2000-2005 Silicon Graphics, Inc. All Rights Reserved. | 8 | * Copyright (c) 2000-2006 Silicon Graphics, Inc. All Rights Reserved. |
9 | */ | 9 | */ |
10 | 10 | ||
11 | #include <linux/irq.h> | 11 | #include <linux/irq.h> |
12 | #include <linux/spinlock.h> | 12 | #include <linux/spinlock.h> |
13 | #include <linux/init.h> | ||
13 | #include <asm/sn/addrs.h> | 14 | #include <asm/sn/addrs.h> |
14 | #include <asm/sn/arch.h> | 15 | #include <asm/sn/arch.h> |
15 | #include <asm/sn/intr.h> | 16 | #include <asm/sn/intr.h> |
@@ -76,17 +77,15 @@ static void sn_enable_irq(unsigned int irq) | |||
76 | 77 | ||
77 | static void sn_ack_irq(unsigned int irq) | 78 | static void sn_ack_irq(unsigned int irq) |
78 | { | 79 | { |
79 | u64 event_occurred, mask = 0; | 80 | u64 event_occurred, mask; |
80 | 81 | ||
81 | irq = irq & 0xff; | 82 | irq = irq & 0xff; |
82 | event_occurred = | 83 | event_occurred = HUB_L((u64*)LOCAL_MMR_ADDR(SH_EVENT_OCCURRED)); |
83 | HUB_L((u64*)LOCAL_MMR_ADDR(SH_EVENT_OCCURRED)); | ||
84 | mask = event_occurred & SH_ALL_INT_MASK; | 84 | mask = event_occurred & SH_ALL_INT_MASK; |
85 | HUB_S((u64*)LOCAL_MMR_ADDR(SH_EVENT_OCCURRED_ALIAS), | 85 | HUB_S((u64*)LOCAL_MMR_ADDR(SH_EVENT_OCCURRED_ALIAS), mask); |
86 | mask); | ||
87 | __set_bit(irq, (volatile void *)pda->sn_in_service_ivecs); | 86 | __set_bit(irq, (volatile void *)pda->sn_in_service_ivecs); |
88 | 87 | ||
89 | move_irq(irq); | 88 | move_native_irq(irq); |
90 | } | 89 | } |
91 | 90 | ||
92 | static void sn_end_irq(unsigned int irq) | 91 | static void sn_end_irq(unsigned int irq) |
@@ -219,9 +218,8 @@ static void register_intr_pda(struct sn_irq_info *sn_irq_info) | |||
219 | pdacpu(cpu)->sn_last_irq = irq; | 218 | pdacpu(cpu)->sn_last_irq = irq; |
220 | } | 219 | } |
221 | 220 | ||
222 | if (pdacpu(cpu)->sn_first_irq == 0 || pdacpu(cpu)->sn_first_irq > irq) { | 221 | if (pdacpu(cpu)->sn_first_irq == 0 || pdacpu(cpu)->sn_first_irq > irq) |
223 | pdacpu(cpu)->sn_first_irq = irq; | 222 | pdacpu(cpu)->sn_first_irq = irq; |
224 | } | ||
225 | } | 223 | } |
226 | 224 | ||
227 | static void unregister_intr_pda(struct sn_irq_info *sn_irq_info) | 225 | static void unregister_intr_pda(struct sn_irq_info *sn_irq_info) |
@@ -289,7 +287,7 @@ void sn_irq_fixup(struct pci_dev *pci_dev, struct sn_irq_info *sn_irq_info) | |||
289 | list_add_rcu(&sn_irq_info->list, sn_irq_lh[sn_irq_info->irq_irq]); | 287 | list_add_rcu(&sn_irq_info->list, sn_irq_lh[sn_irq_info->irq_irq]); |
290 | spin_unlock(&sn_irq_info_lock); | 288 | spin_unlock(&sn_irq_info_lock); |
291 | 289 | ||
292 | (void)register_intr_pda(sn_irq_info); | 290 | register_intr_pda(sn_irq_info); |
293 | } | 291 | } |
294 | 292 | ||
295 | void sn_irq_unfixup(struct pci_dev *pci_dev) | 293 | void sn_irq_unfixup(struct pci_dev *pci_dev) |
@@ -301,7 +299,9 @@ void sn_irq_unfixup(struct pci_dev *pci_dev) | |||
301 | return; | 299 | return; |
302 | 300 | ||
303 | sn_irq_info = SN_PCIDEV_INFO(pci_dev)->pdi_sn_irq_info; | 301 | sn_irq_info = SN_PCIDEV_INFO(pci_dev)->pdi_sn_irq_info; |
304 | if (!sn_irq_info || !sn_irq_info->irq_irq) { | 302 | if (!sn_irq_info) |
303 | return; | ||
304 | if (!sn_irq_info->irq_irq) { | ||
305 | kfree(sn_irq_info); | 305 | kfree(sn_irq_info); |
306 | return; | 306 | return; |
307 | } | 307 | } |
@@ -419,7 +419,7 @@ void sn_lb_int_war_check(void) | |||
419 | rcu_read_unlock(); | 419 | rcu_read_unlock(); |
420 | } | 420 | } |
421 | 421 | ||
422 | void sn_irq_lh_init(void) | 422 | void __init sn_irq_lh_init(void) |
423 | { | 423 | { |
424 | int i; | 424 | int i; |
425 | 425 | ||
@@ -434,5 +434,4 @@ void sn_irq_lh_init(void) | |||
434 | 434 | ||
435 | INIT_LIST_HEAD(sn_irq_lh[i]); | 435 | INIT_LIST_HEAD(sn_irq_lh[i]); |
436 | } | 436 | } |
437 | |||
438 | } | 437 | } |
diff --git a/arch/ia64/sn/kernel/klconflib.c b/arch/ia64/sn/kernel/klconflib.c index 0f11a3299cd2..87682b48ef83 100644 --- a/arch/ia64/sn/kernel/klconflib.c +++ b/arch/ia64/sn/kernel/klconflib.c | |||
@@ -78,31 +78,30 @@ format_module_id(char *buffer, moduleid_t m, int fmt) | |||
78 | position = MODULE_GET_BPOS(m); | 78 | position = MODULE_GET_BPOS(m); |
79 | 79 | ||
80 | if ((fmt == MODULE_FORMAT_BRIEF) || (fmt == MODULE_FORMAT_LCD)) { | 80 | if ((fmt == MODULE_FORMAT_BRIEF) || (fmt == MODULE_FORMAT_LCD)) { |
81 | /* Brief module number format, eg. 002c15 */ | 81 | /* Brief module number format, eg. 002c15 */ |
82 | 82 | ||
83 | /* Decompress the rack number */ | 83 | /* Decompress the rack number */ |
84 | *buffer++ = '0' + RACK_GET_CLASS(rack); | 84 | *buffer++ = '0' + RACK_GET_CLASS(rack); |
85 | *buffer++ = '0' + RACK_GET_GROUP(rack); | 85 | *buffer++ = '0' + RACK_GET_GROUP(rack); |
86 | *buffer++ = '0' + RACK_GET_NUM(rack); | 86 | *buffer++ = '0' + RACK_GET_NUM(rack); |
87 | 87 | ||
88 | /* Add the brick type */ | 88 | /* Add the brick type */ |
89 | *buffer++ = brickchar; | 89 | *buffer++ = brickchar; |
90 | } | 90 | } |
91 | else if (fmt == MODULE_FORMAT_LONG) { | 91 | else if (fmt == MODULE_FORMAT_LONG) { |
92 | /* Fuller hwgraph format, eg. rack/002/bay/15 */ | 92 | /* Fuller hwgraph format, eg. rack/002/bay/15 */ |
93 | 93 | ||
94 | strcpy(buffer, "rack" "/"); buffer += strlen(buffer); | 94 | strcpy(buffer, "rack" "/"); buffer += strlen(buffer); |
95 | 95 | ||
96 | *buffer++ = '0' + RACK_GET_CLASS(rack); | 96 | *buffer++ = '0' + RACK_GET_CLASS(rack); |
97 | *buffer++ = '0' + RACK_GET_GROUP(rack); | 97 | *buffer++ = '0' + RACK_GET_GROUP(rack); |
98 | *buffer++ = '0' + RACK_GET_NUM(rack); | 98 | *buffer++ = '0' + RACK_GET_NUM(rack); |
99 | 99 | ||
100 | strcpy(buffer, "/" "bay" "/"); buffer += strlen(buffer); | 100 | strcpy(buffer, "/" "bay" "/"); buffer += strlen(buffer); |
101 | } | 101 | } |
102 | 102 | ||
103 | /* Add the bay position, using at least two digits */ | 103 | /* Add the bay position, using at least two digits */ |
104 | if (position < 10) | 104 | if (position < 10) |
105 | *buffer++ = '0'; | 105 | *buffer++ = '0'; |
106 | sprintf(buffer, "%d", position); | 106 | sprintf(buffer, "%d", position); |
107 | |||
108 | } | 107 | } |
diff --git a/arch/ia64/sn/kernel/mca.c b/arch/ia64/sn/kernel/mca.c index 9ab684d1bb55..3db62f24596c 100644 --- a/arch/ia64/sn/kernel/mca.c +++ b/arch/ia64/sn/kernel/mca.c | |||
@@ -3,7 +3,7 @@ | |||
3 | * License. See the file "COPYING" in the main directory of this archive | 3 | * License. See the file "COPYING" in the main directory of this archive |
4 | * for more details. | 4 | * for more details. |
5 | * | 5 | * |
6 | * Copyright (c) 2000-2004 Silicon Graphics, Inc. All Rights Reserved. | 6 | * Copyright (c) 2000-2006 Silicon Graphics, Inc. All Rights Reserved. |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include <linux/types.h> | 9 | #include <linux/types.h> |
@@ -137,7 +137,8 @@ int sn_salinfo_platform_oemdata(const u8 *sect_header, u8 **oemdata, u64 *oemdat | |||
137 | 137 | ||
138 | static int __init sn_salinfo_init(void) | 138 | static int __init sn_salinfo_init(void) |
139 | { | 139 | { |
140 | salinfo_platform_oemdata = &sn_salinfo_platform_oemdata; | 140 | if (ia64_platform_is("sn2")) |
141 | salinfo_platform_oemdata = &sn_salinfo_platform_oemdata; | ||
141 | return 0; | 142 | return 0; |
142 | } | 143 | } |
143 | 144 | ||
diff --git a/arch/ia64/sn/kernel/setup.c b/arch/ia64/sn/kernel/setup.c index e510dce9971f..5b84836c2171 100644 --- a/arch/ia64/sn/kernel/setup.c +++ b/arch/ia64/sn/kernel/setup.c | |||
@@ -67,6 +67,7 @@ extern unsigned long last_time_offset; | |||
67 | extern void (*ia64_mark_idle) (int); | 67 | extern void (*ia64_mark_idle) (int); |
68 | extern void snidle(int); | 68 | extern void snidle(int); |
69 | extern unsigned char acpi_kbd_controller_present; | 69 | extern unsigned char acpi_kbd_controller_present; |
70 | extern unsigned long long (*ia64_printk_clock)(void); | ||
70 | 71 | ||
71 | unsigned long sn_rtc_cycles_per_second; | 72 | unsigned long sn_rtc_cycles_per_second; |
72 | EXPORT_SYMBOL(sn_rtc_cycles_per_second); | 73 | EXPORT_SYMBOL(sn_rtc_cycles_per_second); |
@@ -74,7 +75,7 @@ EXPORT_SYMBOL(sn_rtc_cycles_per_second); | |||
74 | DEFINE_PER_CPU(struct sn_hub_info_s, __sn_hub_info); | 75 | DEFINE_PER_CPU(struct sn_hub_info_s, __sn_hub_info); |
75 | EXPORT_PER_CPU_SYMBOL(__sn_hub_info); | 76 | EXPORT_PER_CPU_SYMBOL(__sn_hub_info); |
76 | 77 | ||
77 | DEFINE_PER_CPU(short, __sn_cnodeid_to_nasid[MAX_NUMNODES]); | 78 | DEFINE_PER_CPU(short, __sn_cnodeid_to_nasid[MAX_COMPACT_NODES]); |
78 | EXPORT_PER_CPU_SYMBOL(__sn_cnodeid_to_nasid); | 79 | EXPORT_PER_CPU_SYMBOL(__sn_cnodeid_to_nasid); |
79 | 80 | ||
80 | DEFINE_PER_CPU(struct nodepda_s *, __sn_nodepda); | 81 | DEFINE_PER_CPU(struct nodepda_s *, __sn_nodepda); |
@@ -125,20 +126,6 @@ struct screen_info sn_screen_info = { | |||
125 | }; | 126 | }; |
126 | 127 | ||
127 | /* | 128 | /* |
128 | * This is here so we can use the CMOS detection in ide-probe.c to | ||
129 | * determine what drives are present. In theory, we don't need this | ||
130 | * as the auto-detection could be done via ide-probe.c:do_probe() but | ||
131 | * in practice that would be much slower, which is painful when | ||
132 | * running in the simulator. Note that passing zeroes in DRIVE_INFO | ||
133 | * is sufficient (the IDE driver will autodetect the drive geometry). | ||
134 | */ | ||
135 | #ifdef CONFIG_IA64_GENERIC | ||
136 | extern char drive_info[4 * 16]; | ||
137 | #else | ||
138 | char drive_info[4 * 16]; | ||
139 | #endif | ||
140 | |||
141 | /* | ||
142 | * This routine can only be used during init, since | 129 | * This routine can only be used during init, since |
143 | * smp_boot_data is an init data structure. | 130 | * smp_boot_data is an init data structure. |
144 | * We have to use smp_boot_data.cpu_phys_id to find | 131 | * We have to use smp_boot_data.cpu_phys_id to find |
@@ -209,7 +196,7 @@ void __init early_sn_setup(void) | |||
209 | } | 196 | } |
210 | 197 | ||
211 | extern int platform_intr_list[]; | 198 | extern int platform_intr_list[]; |
212 | static int __initdata shub_1_1_found = 0; | 199 | static int __initdata shub_1_1_found; |
213 | 200 | ||
214 | /* | 201 | /* |
215 | * sn_check_for_wars | 202 | * sn_check_for_wars |
@@ -330,6 +317,7 @@ struct pcdp_vga_device { | |||
330 | #define PCDP_PCI_TRANS_IOPORT 0x02 | 317 | #define PCDP_PCI_TRANS_IOPORT 0x02 |
331 | #define PCDP_PCI_TRANS_MMIO 0x01 | 318 | #define PCDP_PCI_TRANS_MMIO 0x01 |
332 | 319 | ||
320 | #if defined(CONFIG_VT) && defined(CONFIG_VGA_CONSOLE) | ||
333 | static void | 321 | static void |
334 | sn_scan_pcdp(void) | 322 | sn_scan_pcdp(void) |
335 | { | 323 | { |
@@ -371,6 +359,17 @@ sn_scan_pcdp(void) | |||
371 | break; /* once we find the primary, we're done */ | 359 | break; /* once we find the primary, we're done */ |
372 | } | 360 | } |
373 | } | 361 | } |
362 | #endif | ||
363 | |||
364 | static unsigned long sn2_rtc_initial; | ||
365 | |||
366 | static unsigned long long ia64_sn2_printk_clock(void) | ||
367 | { | ||
368 | unsigned long rtc_now = rtc_time(); | ||
369 | |||
370 | return (rtc_now - sn2_rtc_initial) * | ||
371 | (1000000000 / sn_rtc_cycles_per_second); | ||
372 | } | ||
374 | 373 | ||
375 | /** | 374 | /** |
376 | * sn_setup - SN platform setup routine | 375 | * sn_setup - SN platform setup routine |
@@ -386,6 +385,7 @@ void __init sn_setup(char **cmdline_p) | |||
386 | u32 version = sn_sal_rev(); | 385 | u32 version = sn_sal_rev(); |
387 | extern void sn_cpu_init(void); | 386 | extern void sn_cpu_init(void); |
388 | 387 | ||
388 | sn2_rtc_initial = rtc_time(); | ||
389 | ia64_sn_plat_set_error_handling_features(); // obsolete | 389 | ia64_sn_plat_set_error_handling_features(); // obsolete |
390 | ia64_sn_set_os_feature(OSF_MCA_SLV_TO_OS_INIT_SLV); | 390 | ia64_sn_set_os_feature(OSF_MCA_SLV_TO_OS_INIT_SLV); |
391 | ia64_sn_set_os_feature(OSF_FEAT_LOG_SBES); | 391 | ia64_sn_set_os_feature(OSF_FEAT_LOG_SBES); |
@@ -437,19 +437,6 @@ void __init sn_setup(char **cmdline_p) | |||
437 | */ | 437 | */ |
438 | build_cnode_tables(); | 438 | build_cnode_tables(); |
439 | 439 | ||
440 | /* | ||
441 | * Old PROMs do not provide an ACPI FADT. Disable legacy keyboard | ||
442 | * support here so we don't have to listen to failed keyboard probe | ||
443 | * messages. | ||
444 | */ | ||
445 | if (version <= 0x0209 && acpi_kbd_controller_present) { | ||
446 | printk(KERN_INFO "Disabling legacy keyboard support as prom " | ||
447 | "is too old and doesn't provide FADT\n"); | ||
448 | acpi_kbd_controller_present = 0; | ||
449 | } | ||
450 | |||
451 | printk("SGI SAL version %x.%02x\n", version >> 8, version & 0x00FF); | ||
452 | |||
453 | status = | 440 | status = |
454 | ia64_sal_freq_base(SAL_FREQ_BASE_REALTIME_CLOCK, &ticks_per_sec, | 441 | ia64_sal_freq_base(SAL_FREQ_BASE_REALTIME_CLOCK, &ticks_per_sec, |
455 | &drift); | 442 | &drift); |
@@ -463,6 +450,21 @@ void __init sn_setup(char **cmdline_p) | |||
463 | 450 | ||
464 | platform_intr_list[ACPI_INTERRUPT_CPEI] = IA64_CPE_VECTOR; | 451 | platform_intr_list[ACPI_INTERRUPT_CPEI] = IA64_CPE_VECTOR; |
465 | 452 | ||
453 | ia64_printk_clock = ia64_sn2_printk_clock; | ||
454 | |||
455 | /* | ||
456 | * Old PROMs do not provide an ACPI FADT. Disable legacy keyboard | ||
457 | * support here so we don't have to listen to failed keyboard probe | ||
458 | * messages. | ||
459 | */ | ||
460 | if (version <= 0x0209 && acpi_kbd_controller_present) { | ||
461 | printk(KERN_INFO "Disabling legacy keyboard support as prom " | ||
462 | "is too old and doesn't provide FADT\n"); | ||
463 | acpi_kbd_controller_present = 0; | ||
464 | } | ||
465 | |||
466 | printk("SGI SAL version %x.%02x\n", version >> 8, version & 0x00FF); | ||
467 | |||
466 | /* | 468 | /* |
467 | * we set the default root device to /dev/hda | 469 | * we set the default root device to /dev/hda |
468 | * to make simulation easy | 470 | * to make simulation easy |
@@ -578,13 +580,17 @@ void __init sn_cpu_init(void) | |||
578 | sn_prom_type = 2; | 580 | sn_prom_type = 2; |
579 | else | 581 | else |
580 | sn_prom_type = 1; | 582 | sn_prom_type = 1; |
581 | printk("Running on medusa with %s PROM\n", (sn_prom_type == 1) ? "real" : "fake"); | 583 | printk(KERN_INFO "Running on medusa with %s PROM\n", |
584 | (sn_prom_type == 1) ? "real" : "fake"); | ||
582 | } | 585 | } |
583 | 586 | ||
584 | memset(pda, 0, sizeof(pda)); | 587 | memset(pda, 0, sizeof(pda)); |
585 | if (ia64_sn_get_sn_info(0, &sn_hub_info->shub2, &sn_hub_info->nasid_bitmask, &sn_hub_info->nasid_shift, | 588 | if (ia64_sn_get_sn_info(0, &sn_hub_info->shub2, |
586 | &sn_system_size, &sn_sharing_domain_size, &sn_partition_id, | 589 | &sn_hub_info->nasid_bitmask, |
587 | &sn_coherency_id, &sn_region_size)) | 590 | &sn_hub_info->nasid_shift, |
591 | &sn_system_size, &sn_sharing_domain_size, | ||
592 | &sn_partition_id, &sn_coherency_id, | ||
593 | &sn_region_size)) | ||
588 | BUG(); | 594 | BUG(); |
589 | sn_hub_info->as_shift = sn_hub_info->nasid_shift - 2; | 595 | sn_hub_info->as_shift = sn_hub_info->nasid_shift - 2; |
590 | 596 | ||
@@ -716,7 +722,8 @@ void __init build_cnode_tables(void) | |||
716 | for_each_online_node(node) { | 722 | for_each_online_node(node) { |
717 | kl_config_hdr_t *klgraph_header; | 723 | kl_config_hdr_t *klgraph_header; |
718 | nasid = cnodeid_to_nasid(node); | 724 | nasid = cnodeid_to_nasid(node); |
719 | if ((klgraph_header = ia64_sn_get_klconfig_addr(nasid)) == NULL) | 725 | klgraph_header = ia64_sn_get_klconfig_addr(nasid); |
726 | if (klgraph_header == NULL) | ||
720 | BUG(); | 727 | BUG(); |
721 | brd = NODE_OFFSET_TO_LBOARD(nasid, klgraph_header->ch_board_info); | 728 | brd = NODE_OFFSET_TO_LBOARD(nasid, klgraph_header->ch_board_info); |
722 | while (brd) { | 729 | while (brd) { |
@@ -734,7 +741,7 @@ nasid_slice_to_cpuid(int nasid, int slice) | |||
734 | { | 741 | { |
735 | long cpu; | 742 | long cpu; |
736 | 743 | ||
737 | for (cpu=0; cpu < NR_CPUS; cpu++) | 744 | for (cpu = 0; cpu < NR_CPUS; cpu++) |
738 | if (cpuid_to_nasid(cpu) == nasid && | 745 | if (cpuid_to_nasid(cpu) == nasid && |
739 | cpuid_to_slice(cpu) == slice) | 746 | cpuid_to_slice(cpu) == slice) |
740 | return cpu; | 747 | return cpu; |
diff --git a/arch/ia64/sn/kernel/sn2/Makefile b/arch/ia64/sn/kernel/sn2/Makefile index 170bde4549da..99e177693234 100644 --- a/arch/ia64/sn/kernel/sn2/Makefile +++ b/arch/ia64/sn/kernel/sn2/Makefile | |||
@@ -9,5 +9,7 @@ | |||
9 | # sn2 specific kernel files | 9 | # sn2 specific kernel files |
10 | # | 10 | # |
11 | 11 | ||
12 | CPPFLAGS += -I$(srctree)/arch/ia64/sn/include | ||
13 | |||
12 | obj-y += cache.o io.o ptc_deadlock.o sn2_smp.o sn_proc_fs.o \ | 14 | obj-y += cache.o io.o ptc_deadlock.o sn2_smp.o sn_proc_fs.o \ |
13 | prominfo_proc.o timer.o timer_interrupt.o sn_hwperf.o | 15 | prominfo_proc.o timer.o timer_interrupt.o sn_hwperf.o |
diff --git a/arch/ia64/sn/kernel/sn2/prominfo_proc.c b/arch/ia64/sn/kernel/sn2/prominfo_proc.c index 81c63b2f8ae9..6ae276d5d50c 100644 --- a/arch/ia64/sn/kernel/sn2/prominfo_proc.c +++ b/arch/ia64/sn/kernel/sn2/prominfo_proc.c | |||
@@ -3,7 +3,7 @@ | |||
3 | * License. See the file "COPYING" in the main directory of this archive | 3 | * License. See the file "COPYING" in the main directory of this archive |
4 | * for more details. | 4 | * for more details. |
5 | * | 5 | * |
6 | * Copyright (C) 1999,2001-2004 Silicon Graphics, Inc. All Rights Reserved. | 6 | * Copyright (C) 1999,2001-2004, 2006 Silicon Graphics, Inc. All Rights Reserved. |
7 | * | 7 | * |
8 | * Module to export the system's Firmware Interface Tables, including | 8 | * Module to export the system's Firmware Interface Tables, including |
9 | * PROM revision numbers and banners, in /proc | 9 | * PROM revision numbers and banners, in /proc |
@@ -190,7 +190,7 @@ static int | |||
190 | read_version_entry(char *page, char **start, off_t off, int count, int *eof, | 190 | read_version_entry(char *page, char **start, off_t off, int count, int *eof, |
191 | void *data) | 191 | void *data) |
192 | { | 192 | { |
193 | int len = 0; | 193 | int len; |
194 | 194 | ||
195 | /* data holds the NASID of the node */ | 195 | /* data holds the NASID of the node */ |
196 | len = dump_version(page, (unsigned long)data); | 196 | len = dump_version(page, (unsigned long)data); |
@@ -202,7 +202,7 @@ static int | |||
202 | read_fit_entry(char *page, char **start, off_t off, int count, int *eof, | 202 | read_fit_entry(char *page, char **start, off_t off, int count, int *eof, |
203 | void *data) | 203 | void *data) |
204 | { | 204 | { |
205 | int len = 0; | 205 | int len; |
206 | 206 | ||
207 | /* data holds the NASID of the node */ | 207 | /* data holds the NASID of the node */ |
208 | len = dump_fit(page, (unsigned long)data); | 208 | len = dump_fit(page, (unsigned long)data); |
@@ -229,13 +229,16 @@ int __init prominfo_init(void) | |||
229 | struct proc_dir_entry *p; | 229 | struct proc_dir_entry *p; |
230 | cnodeid_t cnodeid; | 230 | cnodeid_t cnodeid; |
231 | unsigned long nasid; | 231 | unsigned long nasid; |
232 | int size; | ||
232 | char name[NODE_NAME_LEN]; | 233 | char name[NODE_NAME_LEN]; |
233 | 234 | ||
234 | if (!ia64_platform_is("sn2")) | 235 | if (!ia64_platform_is("sn2")) |
235 | return 0; | 236 | return 0; |
236 | 237 | ||
237 | proc_entries = kmalloc(num_online_nodes() * sizeof(struct proc_dir_entry *), | 238 | size = num_online_nodes() * sizeof(struct proc_dir_entry *); |
238 | GFP_KERNEL); | 239 | proc_entries = kzalloc(size, GFP_KERNEL); |
240 | if (!proc_entries) | ||
241 | return -ENOMEM; | ||
239 | 242 | ||
240 | sgi_prominfo_entry = proc_mkdir("sgi_prominfo", NULL); | 243 | sgi_prominfo_entry = proc_mkdir("sgi_prominfo", NULL); |
241 | 244 | ||
@@ -244,14 +247,12 @@ int __init prominfo_init(void) | |||
244 | sprintf(name, "node%d", cnodeid); | 247 | sprintf(name, "node%d", cnodeid); |
245 | *entp = proc_mkdir(name, sgi_prominfo_entry); | 248 | *entp = proc_mkdir(name, sgi_prominfo_entry); |
246 | nasid = cnodeid_to_nasid(cnodeid); | 249 | nasid = cnodeid_to_nasid(cnodeid); |
247 | p = create_proc_read_entry( | 250 | p = create_proc_read_entry("fit", 0, *entp, read_fit_entry, |
248 | "fit", 0, *entp, read_fit_entry, | 251 | (void *)nasid); |
249 | (void *)nasid); | ||
250 | if (p) | 252 | if (p) |
251 | p->owner = THIS_MODULE; | 253 | p->owner = THIS_MODULE; |
252 | p = create_proc_read_entry( | 254 | p = create_proc_read_entry("version", 0, *entp, |
253 | "version", 0, *entp, read_version_entry, | 255 | read_version_entry, (void *)nasid); |
254 | (void *)nasid); | ||
255 | if (p) | 256 | if (p) |
256 | p->owner = THIS_MODULE; | 257 | p->owner = THIS_MODULE; |
257 | entp++; | 258 | entp++; |
@@ -263,7 +264,7 @@ int __init prominfo_init(void) | |||
263 | void __exit prominfo_exit(void) | 264 | void __exit prominfo_exit(void) |
264 | { | 265 | { |
265 | struct proc_dir_entry **entp; | 266 | struct proc_dir_entry **entp; |
266 | unsigned cnodeid; | 267 | unsigned int cnodeid; |
267 | char name[NODE_NAME_LEN]; | 268 | char name[NODE_NAME_LEN]; |
268 | 269 | ||
269 | entp = proc_entries; | 270 | entp = proc_entries; |
diff --git a/arch/ia64/sn/kernel/sn2/sn2_smp.c b/arch/ia64/sn/kernel/sn2/sn2_smp.c index 471bbaa65d1b..b2e1e746b47f 100644 --- a/arch/ia64/sn/kernel/sn2/sn2_smp.c +++ b/arch/ia64/sn/kernel/sn2/sn2_smp.c | |||
@@ -5,7 +5,7 @@ | |||
5 | * License. See the file "COPYING" in the main directory of this archive | 5 | * License. See the file "COPYING" in the main directory of this archive |
6 | * for more details. | 6 | * for more details. |
7 | * | 7 | * |
8 | * Copyright (C) 2000-2005 Silicon Graphics, Inc. All rights reserved. | 8 | * Copyright (C) 2000-2006 Silicon Graphics, Inc. All rights reserved. |
9 | */ | 9 | */ |
10 | 10 | ||
11 | #include <linux/init.h> | 11 | #include <linux/init.h> |
@@ -46,104 +46,24 @@ DECLARE_PER_CPU(struct ptc_stats, ptcstats); | |||
46 | 46 | ||
47 | static __cacheline_aligned DEFINE_SPINLOCK(sn2_global_ptc_lock); | 47 | static __cacheline_aligned DEFINE_SPINLOCK(sn2_global_ptc_lock); |
48 | 48 | ||
49 | void sn2_ptc_deadlock_recovery(short *, short, int, volatile unsigned long *, unsigned long data0, | 49 | extern unsigned long |
50 | volatile unsigned long *, unsigned long data1); | 50 | sn2_ptc_deadlock_recovery_core(volatile unsigned long *, unsigned long, |
51 | volatile unsigned long *, unsigned long, | ||
52 | volatile unsigned long *, unsigned long); | ||
53 | void | ||
54 | sn2_ptc_deadlock_recovery(short *, short, short, int, | ||
55 | volatile unsigned long *, unsigned long, | ||
56 | volatile unsigned long *, unsigned long); | ||
51 | 57 | ||
52 | #ifdef DEBUG_PTC | ||
53 | /* | 58 | /* |
54 | * ptctest: | 59 | * Note: some is the following is captured here to make degugging easier |
55 | * | 60 | * (the macros make more sense if you see the debug patch - not posted) |
56 | * xyz - 3 digit hex number: | ||
57 | * x - Force PTC purges to use shub: | ||
58 | * 0 - no force | ||
59 | * 1 - force | ||
60 | * y - interupt enable | ||
61 | * 0 - disable interrupts | ||
62 | * 1 - leave interuupts enabled | ||
63 | * z - type of lock: | ||
64 | * 0 - global lock | ||
65 | * 1 - node local lock | ||
66 | * 2 - no lock | ||
67 | * | ||
68 | * Note: on shub1, only ptctest == 0 is supported. Don't try other values! | ||
69 | */ | 61 | */ |
70 | |||
71 | static unsigned int sn2_ptctest = 0; | ||
72 | |||
73 | static int __init ptc_test(char *str) | ||
74 | { | ||
75 | get_option(&str, &sn2_ptctest); | ||
76 | return 1; | ||
77 | } | ||
78 | __setup("ptctest=", ptc_test); | ||
79 | |||
80 | static inline int ptc_lock(unsigned long *flagp) | ||
81 | { | ||
82 | unsigned long opt = sn2_ptctest & 255; | ||
83 | |||
84 | switch (opt) { | ||
85 | case 0x00: | ||
86 | spin_lock_irqsave(&sn2_global_ptc_lock, *flagp); | ||
87 | break; | ||
88 | case 0x01: | ||
89 | spin_lock_irqsave(&sn_nodepda->ptc_lock, *flagp); | ||
90 | break; | ||
91 | case 0x02: | ||
92 | local_irq_save(*flagp); | ||
93 | break; | ||
94 | case 0x10: | ||
95 | spin_lock(&sn2_global_ptc_lock); | ||
96 | break; | ||
97 | case 0x11: | ||
98 | spin_lock(&sn_nodepda->ptc_lock); | ||
99 | break; | ||
100 | case 0x12: | ||
101 | break; | ||
102 | default: | ||
103 | BUG(); | ||
104 | } | ||
105 | return opt; | ||
106 | } | ||
107 | |||
108 | static inline void ptc_unlock(unsigned long flags, int opt) | ||
109 | { | ||
110 | switch (opt) { | ||
111 | case 0x00: | ||
112 | spin_unlock_irqrestore(&sn2_global_ptc_lock, flags); | ||
113 | break; | ||
114 | case 0x01: | ||
115 | spin_unlock_irqrestore(&sn_nodepda->ptc_lock, flags); | ||
116 | break; | ||
117 | case 0x02: | ||
118 | local_irq_restore(flags); | ||
119 | break; | ||
120 | case 0x10: | ||
121 | spin_unlock(&sn2_global_ptc_lock); | ||
122 | break; | ||
123 | case 0x11: | ||
124 | spin_unlock(&sn_nodepda->ptc_lock); | ||
125 | break; | ||
126 | case 0x12: | ||
127 | break; | ||
128 | default: | ||
129 | BUG(); | ||
130 | } | ||
131 | } | ||
132 | #else | ||
133 | |||
134 | #define sn2_ptctest 0 | 62 | #define sn2_ptctest 0 |
135 | 63 | #define local_node_uses_ptc_ga(sh1) ((sh1) ? 1 : 0) | |
136 | static inline int ptc_lock(unsigned long *flagp) | 64 | #define max_active_pio(sh1) ((sh1) ? 32 : 7) |
137 | { | 65 | #define reset_max_active_on_deadlock() 1 |
138 | spin_lock_irqsave(&sn2_global_ptc_lock, *flagp); | 66 | #define PTC_LOCK(sh1) ((sh1) ? &sn2_global_ptc_lock : &sn_nodepda->ptc_lock) |
139 | return 0; | ||
140 | } | ||
141 | |||
142 | static inline void ptc_unlock(unsigned long flags, int opt) | ||
143 | { | ||
144 | spin_unlock_irqrestore(&sn2_global_ptc_lock, flags); | ||
145 | } | ||
146 | #endif | ||
147 | 67 | ||
148 | struct ptc_stats { | 68 | struct ptc_stats { |
149 | unsigned long ptc_l; | 69 | unsigned long ptc_l; |
@@ -151,27 +71,32 @@ struct ptc_stats { | |||
151 | unsigned long shub_ptc_flushes; | 71 | unsigned long shub_ptc_flushes; |
152 | unsigned long nodes_flushed; | 72 | unsigned long nodes_flushed; |
153 | unsigned long deadlocks; | 73 | unsigned long deadlocks; |
74 | unsigned long deadlocks2; | ||
154 | unsigned long lock_itc_clocks; | 75 | unsigned long lock_itc_clocks; |
155 | unsigned long shub_itc_clocks; | 76 | unsigned long shub_itc_clocks; |
156 | unsigned long shub_itc_clocks_max; | 77 | unsigned long shub_itc_clocks_max; |
78 | unsigned long shub_ptc_flushes_not_my_mm; | ||
157 | }; | 79 | }; |
158 | 80 | ||
81 | #define sn2_ptctest 0 | ||
82 | |||
159 | static inline unsigned long wait_piowc(void) | 83 | static inline unsigned long wait_piowc(void) |
160 | { | 84 | { |
161 | volatile unsigned long *piows, zeroval; | 85 | volatile unsigned long *piows; |
162 | unsigned long ws; | 86 | unsigned long zeroval, ws; |
163 | 87 | ||
164 | piows = pda->pio_write_status_addr; | 88 | piows = pda->pio_write_status_addr; |
165 | zeroval = pda->pio_write_status_val; | 89 | zeroval = pda->pio_write_status_val; |
166 | do { | 90 | do { |
167 | cpu_relax(); | 91 | cpu_relax(); |
168 | } while (((ws = *piows) & SH_PIO_WRITE_STATUS_PENDING_WRITE_COUNT_MASK) != zeroval); | 92 | } while (((ws = *piows) & SH_PIO_WRITE_STATUS_PENDING_WRITE_COUNT_MASK) != zeroval); |
169 | return ws; | 93 | return (ws & SH_PIO_WRITE_STATUS_WRITE_DEADLOCK_MASK) != 0; |
170 | } | 94 | } |
171 | 95 | ||
172 | void sn_tlb_migrate_finish(struct mm_struct *mm) | 96 | void sn_tlb_migrate_finish(struct mm_struct *mm) |
173 | { | 97 | { |
174 | if (mm == current->mm) | 98 | /* flush_tlb_mm is inefficient if more than 1 users of mm */ |
99 | if (mm == current->mm && mm && atomic_read(&mm->mm_users) == 1) | ||
175 | flush_tlb_mm(mm); | 100 | flush_tlb_mm(mm); |
176 | } | 101 | } |
177 | 102 | ||
@@ -201,12 +126,14 @@ void | |||
201 | sn2_global_tlb_purge(struct mm_struct *mm, unsigned long start, | 126 | sn2_global_tlb_purge(struct mm_struct *mm, unsigned long start, |
202 | unsigned long end, unsigned long nbits) | 127 | unsigned long end, unsigned long nbits) |
203 | { | 128 | { |
204 | int i, opt, shub1, cnode, mynasid, cpu, lcpu = 0, nasid, flushed = 0; | 129 | int i, ibegin, shub1, cnode, mynasid, cpu, lcpu = 0, nasid; |
205 | int mymm = (mm == current->active_mm && current->mm); | 130 | int mymm = (mm == current->active_mm && mm == current->mm); |
131 | int use_cpu_ptcga; | ||
206 | volatile unsigned long *ptc0, *ptc1; | 132 | volatile unsigned long *ptc0, *ptc1; |
207 | unsigned long itc, itc2, flags, data0 = 0, data1 = 0, rr_value; | 133 | unsigned long itc, itc2, flags, data0 = 0, data1 = 0, rr_value, old_rr = 0; |
208 | short nasids[MAX_NUMNODES], nix; | 134 | short nasids[MAX_NUMNODES], nix; |
209 | nodemask_t nodes_flushed; | 135 | nodemask_t nodes_flushed; |
136 | int active, max_active, deadlock; | ||
210 | 137 | ||
211 | nodes_clear(nodes_flushed); | 138 | nodes_clear(nodes_flushed); |
212 | i = 0; | 139 | i = 0; |
@@ -267,41 +194,56 @@ sn2_global_tlb_purge(struct mm_struct *mm, unsigned long start, | |||
267 | 194 | ||
268 | 195 | ||
269 | mynasid = get_nasid(); | 196 | mynasid = get_nasid(); |
197 | use_cpu_ptcga = local_node_uses_ptc_ga(shub1); | ||
198 | max_active = max_active_pio(shub1); | ||
270 | 199 | ||
271 | itc = ia64_get_itc(); | 200 | itc = ia64_get_itc(); |
272 | opt = ptc_lock(&flags); | 201 | spin_lock_irqsave(PTC_LOCK(shub1), flags); |
273 | itc2 = ia64_get_itc(); | 202 | itc2 = ia64_get_itc(); |
203 | |||
274 | __get_cpu_var(ptcstats).lock_itc_clocks += itc2 - itc; | 204 | __get_cpu_var(ptcstats).lock_itc_clocks += itc2 - itc; |
275 | __get_cpu_var(ptcstats).shub_ptc_flushes++; | 205 | __get_cpu_var(ptcstats).shub_ptc_flushes++; |
276 | __get_cpu_var(ptcstats).nodes_flushed += nix; | 206 | __get_cpu_var(ptcstats).nodes_flushed += nix; |
207 | if (!mymm) | ||
208 | __get_cpu_var(ptcstats).shub_ptc_flushes_not_my_mm++; | ||
277 | 209 | ||
210 | if (use_cpu_ptcga && !mymm) { | ||
211 | old_rr = ia64_get_rr(start); | ||
212 | ia64_set_rr(start, (old_rr & 0xff) | (rr_value << 8)); | ||
213 | ia64_srlz_d(); | ||
214 | } | ||
215 | |||
216 | wait_piowc(); | ||
278 | do { | 217 | do { |
279 | if (shub1) | 218 | if (shub1) |
280 | data1 = start | (1UL << SH1_PTC_1_START_SHFT); | 219 | data1 = start | (1UL << SH1_PTC_1_START_SHFT); |
281 | else | 220 | else |
282 | data0 = (data0 & ~SH2_PTC_ADDR_MASK) | (start & SH2_PTC_ADDR_MASK); | 221 | data0 = (data0 & ~SH2_PTC_ADDR_MASK) | (start & SH2_PTC_ADDR_MASK); |
283 | for (i = 0; i < nix; i++) { | 222 | deadlock = 0; |
223 | active = 0; | ||
224 | for (ibegin = 0, i = 0; i < nix; i++) { | ||
284 | nasid = nasids[i]; | 225 | nasid = nasids[i]; |
285 | if ((!(sn2_ptctest & 3)) && unlikely(nasid == mynasid && mymm)) { | 226 | if (use_cpu_ptcga && unlikely(nasid == mynasid)) { |
286 | ia64_ptcga(start, nbits << 2); | 227 | ia64_ptcga(start, nbits << 2); |
287 | ia64_srlz_i(); | 228 | ia64_srlz_i(); |
288 | } else { | 229 | } else { |
289 | ptc0 = CHANGE_NASID(nasid, ptc0); | 230 | ptc0 = CHANGE_NASID(nasid, ptc0); |
290 | if (ptc1) | 231 | if (ptc1) |
291 | ptc1 = CHANGE_NASID(nasid, ptc1); | 232 | ptc1 = CHANGE_NASID(nasid, ptc1); |
292 | pio_atomic_phys_write_mmrs(ptc0, data0, ptc1, | 233 | pio_atomic_phys_write_mmrs(ptc0, data0, ptc1, data1); |
293 | data1); | 234 | active++; |
294 | flushed = 1; | 235 | } |
236 | if (active >= max_active || i == (nix - 1)) { | ||
237 | if ((deadlock = wait_piowc())) { | ||
238 | sn2_ptc_deadlock_recovery(nasids, ibegin, i, mynasid, ptc0, data0, ptc1, data1); | ||
239 | if (reset_max_active_on_deadlock()) | ||
240 | max_active = 1; | ||
241 | } | ||
242 | active = 0; | ||
243 | ibegin = i + 1; | ||
295 | } | 244 | } |
296 | } | 245 | } |
297 | if (flushed | ||
298 | && (wait_piowc() & | ||
299 | (SH_PIO_WRITE_STATUS_WRITE_DEADLOCK_MASK))) { | ||
300 | sn2_ptc_deadlock_recovery(nasids, nix, mynasid, ptc0, data0, ptc1, data1); | ||
301 | } | ||
302 | |||
303 | start += (1UL << nbits); | 246 | start += (1UL << nbits); |
304 | |||
305 | } while (start < end); | 247 | } while (start < end); |
306 | 248 | ||
307 | itc2 = ia64_get_itc() - itc2; | 249 | itc2 = ia64_get_itc() - itc2; |
@@ -309,7 +251,12 @@ sn2_global_tlb_purge(struct mm_struct *mm, unsigned long start, | |||
309 | if (itc2 > __get_cpu_var(ptcstats).shub_itc_clocks_max) | 251 | if (itc2 > __get_cpu_var(ptcstats).shub_itc_clocks_max) |
310 | __get_cpu_var(ptcstats).shub_itc_clocks_max = itc2; | 252 | __get_cpu_var(ptcstats).shub_itc_clocks_max = itc2; |
311 | 253 | ||
312 | ptc_unlock(flags, opt); | 254 | if (old_rr) { |
255 | ia64_set_rr(start, old_rr); | ||
256 | ia64_srlz_d(); | ||
257 | } | ||
258 | |||
259 | spin_unlock_irqrestore(PTC_LOCK(shub1), flags); | ||
313 | 260 | ||
314 | preempt_enable(); | 261 | preempt_enable(); |
315 | } | 262 | } |
@@ -321,27 +268,31 @@ sn2_global_tlb_purge(struct mm_struct *mm, unsigned long start, | |||
321 | * TLB flush transaction. The recovery sequence is somewhat tricky & is | 268 | * TLB flush transaction. The recovery sequence is somewhat tricky & is |
322 | * coded in assembly language. | 269 | * coded in assembly language. |
323 | */ | 270 | */ |
324 | void sn2_ptc_deadlock_recovery(short *nasids, short nix, int mynasid, volatile unsigned long *ptc0, unsigned long data0, | 271 | |
325 | volatile unsigned long *ptc1, unsigned long data1) | 272 | void |
273 | sn2_ptc_deadlock_recovery(short *nasids, short ib, short ie, int mynasid, | ||
274 | volatile unsigned long *ptc0, unsigned long data0, | ||
275 | volatile unsigned long *ptc1, unsigned long data1) | ||
326 | { | 276 | { |
327 | extern void sn2_ptc_deadlock_recovery_core(volatile unsigned long *, unsigned long, | ||
328 | volatile unsigned long *, unsigned long, volatile unsigned long *, unsigned long); | ||
329 | short nasid, i; | 277 | short nasid, i; |
330 | unsigned long *piows, zeroval; | 278 | unsigned long *piows, zeroval, n; |
331 | 279 | ||
332 | __get_cpu_var(ptcstats).deadlocks++; | 280 | __get_cpu_var(ptcstats).deadlocks++; |
333 | 281 | ||
334 | piows = (unsigned long *) pda->pio_write_status_addr; | 282 | piows = (unsigned long *) pda->pio_write_status_addr; |
335 | zeroval = pda->pio_write_status_val; | 283 | zeroval = pda->pio_write_status_val; |
336 | 284 | ||
337 | for (i=0; i < nix; i++) { | 285 | |
286 | for (i=ib; i <= ie; i++) { | ||
338 | nasid = nasids[i]; | 287 | nasid = nasids[i]; |
339 | if (!(sn2_ptctest & 3) && nasid == mynasid) | 288 | if (local_node_uses_ptc_ga(is_shub1()) && nasid == mynasid) |
340 | continue; | 289 | continue; |
341 | ptc0 = CHANGE_NASID(nasid, ptc0); | 290 | ptc0 = CHANGE_NASID(nasid, ptc0); |
342 | if (ptc1) | 291 | if (ptc1) |
343 | ptc1 = CHANGE_NASID(nasid, ptc1); | 292 | ptc1 = CHANGE_NASID(nasid, ptc1); |
344 | sn2_ptc_deadlock_recovery_core(ptc0, data0, ptc1, data1, piows, zeroval); | 293 | |
294 | n = sn2_ptc_deadlock_recovery_core(ptc0, data0, ptc1, data1, piows, zeroval); | ||
295 | __get_cpu_var(ptcstats).deadlocks2 += n; | ||
345 | } | 296 | } |
346 | 297 | ||
347 | } | 298 | } |
@@ -452,20 +403,22 @@ static int sn2_ptc_seq_show(struct seq_file *file, void *data) | |||
452 | cpu = *(loff_t *) data; | 403 | cpu = *(loff_t *) data; |
453 | 404 | ||
454 | if (!cpu) { | 405 | if (!cpu) { |
455 | seq_printf(file, "# ptc_l change_rid shub_ptc_flushes shub_nodes_flushed deadlocks lock_nsec shub_nsec shub_nsec_max\n"); | 406 | seq_printf(file, |
407 | "# cpu ptc_l newrid ptc_flushes nodes_flushed deadlocks lock_nsec shub_nsec shub_nsec_max not_my_mm deadlock2\n"); | ||
456 | seq_printf(file, "# ptctest %d\n", sn2_ptctest); | 408 | seq_printf(file, "# ptctest %d\n", sn2_ptctest); |
457 | } | 409 | } |
458 | 410 | ||
459 | if (cpu < NR_CPUS && cpu_online(cpu)) { | 411 | if (cpu < NR_CPUS && cpu_online(cpu)) { |
460 | stat = &per_cpu(ptcstats, cpu); | 412 | stat = &per_cpu(ptcstats, cpu); |
461 | seq_printf(file, "cpu %d %ld %ld %ld %ld %ld %ld %ld %ld\n", cpu, stat->ptc_l, | 413 | seq_printf(file, "cpu %d %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld\n", cpu, stat->ptc_l, |
462 | stat->change_rid, stat->shub_ptc_flushes, stat->nodes_flushed, | 414 | stat->change_rid, stat->shub_ptc_flushes, stat->nodes_flushed, |
463 | stat->deadlocks, | 415 | stat->deadlocks, |
464 | 1000 * stat->lock_itc_clocks / per_cpu(cpu_info, cpu).cyc_per_usec, | 416 | 1000 * stat->lock_itc_clocks / per_cpu(cpu_info, cpu).cyc_per_usec, |
465 | 1000 * stat->shub_itc_clocks / per_cpu(cpu_info, cpu).cyc_per_usec, | 417 | 1000 * stat->shub_itc_clocks / per_cpu(cpu_info, cpu).cyc_per_usec, |
466 | 1000 * stat->shub_itc_clocks_max / per_cpu(cpu_info, cpu).cyc_per_usec); | 418 | 1000 * stat->shub_itc_clocks_max / per_cpu(cpu_info, cpu).cyc_per_usec, |
419 | stat->shub_ptc_flushes_not_my_mm, | ||
420 | stat->deadlocks2); | ||
467 | } | 421 | } |
468 | |||
469 | return 0; | 422 | return 0; |
470 | } | 423 | } |
471 | 424 | ||
@@ -476,7 +429,7 @@ static struct seq_operations sn2_ptc_seq_ops = { | |||
476 | .show = sn2_ptc_seq_show | 429 | .show = sn2_ptc_seq_show |
477 | }; | 430 | }; |
478 | 431 | ||
479 | int sn2_ptc_proc_open(struct inode *inode, struct file *file) | 432 | static int sn2_ptc_proc_open(struct inode *inode, struct file *file) |
480 | { | 433 | { |
481 | return seq_open(file, &sn2_ptc_seq_ops); | 434 | return seq_open(file, &sn2_ptc_seq_ops); |
482 | } | 435 | } |
@@ -493,7 +446,7 @@ static struct proc_dir_entry *proc_sn2_ptc; | |||
493 | static int __init sn2_ptc_init(void) | 446 | static int __init sn2_ptc_init(void) |
494 | { | 447 | { |
495 | if (!ia64_platform_is("sn2")) | 448 | if (!ia64_platform_is("sn2")) |
496 | return -ENOSYS; | 449 | return 0; |
497 | 450 | ||
498 | if (!(proc_sn2_ptc = create_proc_entry(PTC_BASENAME, 0444, NULL))) { | 451 | if (!(proc_sn2_ptc = create_proc_entry(PTC_BASENAME, 0444, NULL))) { |
499 | printk(KERN_ERR "unable to create %s proc entry", PTC_BASENAME); | 452 | printk(KERN_ERR "unable to create %s proc entry", PTC_BASENAME); |
diff --git a/arch/ia64/sn/kernel/sn2/sn_hwperf.c b/arch/ia64/sn/kernel/sn2/sn_hwperf.c index 19b54fbcd7ea..70db21f3df21 100644 --- a/arch/ia64/sn/kernel/sn2/sn_hwperf.c +++ b/arch/ia64/sn/kernel/sn2/sn_hwperf.c | |||
@@ -3,7 +3,7 @@ | |||
3 | * License. See the file "COPYING" in the main directory of this archive | 3 | * License. See the file "COPYING" in the main directory of this archive |
4 | * for more details. | 4 | * for more details. |
5 | * | 5 | * |
6 | * Copyright (C) 2004-2005 Silicon Graphics, Inc. All rights reserved. | 6 | * Copyright (C) 2004-2006 Silicon Graphics, Inc. All rights reserved. |
7 | * | 7 | * |
8 | * SGI Altix topology and hardware performance monitoring API. | 8 | * SGI Altix topology and hardware performance monitoring API. |
9 | * Mark Goodwin <markgw@sgi.com>. | 9 | * Mark Goodwin <markgw@sgi.com>. |
@@ -973,6 +973,9 @@ static int __devinit sn_hwperf_misc_register_init(void) | |||
973 | { | 973 | { |
974 | int e; | 974 | int e; |
975 | 975 | ||
976 | if (!ia64_platform_is("sn2")) | ||
977 | return 0; | ||
978 | |||
976 | sn_hwperf_init(); | 979 | sn_hwperf_init(); |
977 | 980 | ||
978 | /* | 981 | /* |
diff --git a/arch/ia64/sn/kernel/sn2/sn_proc_fs.c b/arch/ia64/sn/kernel/sn2/sn_proc_fs.c index a06719d752a0..c686d9c12f7b 100644 --- a/arch/ia64/sn/kernel/sn2/sn_proc_fs.c +++ b/arch/ia64/sn/kernel/sn2/sn_proc_fs.c | |||
@@ -6,11 +6,11 @@ | |||
6 | * Copyright (C) 2000-2005 Silicon Graphics, Inc. All rights reserved. | 6 | * Copyright (C) 2000-2005 Silicon Graphics, Inc. All rights reserved. |
7 | */ | 7 | */ |
8 | #include <linux/config.h> | 8 | #include <linux/config.h> |
9 | #include <asm/uaccess.h> | ||
10 | 9 | ||
11 | #ifdef CONFIG_PROC_FS | 10 | #ifdef CONFIG_PROC_FS |
12 | #include <linux/proc_fs.h> | 11 | #include <linux/proc_fs.h> |
13 | #include <linux/seq_file.h> | 12 | #include <linux/seq_file.h> |
13 | #include <asm/uaccess.h> | ||
14 | #include <asm/sn/sn_sal.h> | 14 | #include <asm/sn/sn_sal.h> |
15 | 15 | ||
16 | static int partition_id_show(struct seq_file *s, void *p) | 16 | static int partition_id_show(struct seq_file *s, void *p) |
@@ -90,10 +90,10 @@ static int coherence_id_open(struct inode *inode, struct file *file) | |||
90 | return single_open(file, coherence_id_show, NULL); | 90 | return single_open(file, coherence_id_show, NULL); |
91 | } | 91 | } |
92 | 92 | ||
93 | static struct proc_dir_entry *sn_procfs_create_entry( | 93 | static struct proc_dir_entry |
94 | const char *name, struct proc_dir_entry *parent, | 94 | *sn_procfs_create_entry(const char *name, struct proc_dir_entry *parent, |
95 | int (*openfunc)(struct inode *, struct file *), | 95 | int (*openfunc)(struct inode *, struct file *), |
96 | int (*releasefunc)(struct inode *, struct file *)) | 96 | int (*releasefunc)(struct inode *, struct file *)) |
97 | { | 97 | { |
98 | struct proc_dir_entry *e = create_proc_entry(name, 0444, parent); | 98 | struct proc_dir_entry *e = create_proc_entry(name, 0444, parent); |
99 | 99 | ||
@@ -126,24 +126,24 @@ void register_sn_procfs(void) | |||
126 | return; | 126 | return; |
127 | 127 | ||
128 | sn_procfs_create_entry("partition_id", sgi_proc_dir, | 128 | sn_procfs_create_entry("partition_id", sgi_proc_dir, |
129 | partition_id_open, single_release); | 129 | partition_id_open, single_release); |
130 | 130 | ||
131 | sn_procfs_create_entry("system_serial_number", sgi_proc_dir, | 131 | sn_procfs_create_entry("system_serial_number", sgi_proc_dir, |
132 | system_serial_number_open, single_release); | 132 | system_serial_number_open, single_release); |
133 | 133 | ||
134 | sn_procfs_create_entry("licenseID", sgi_proc_dir, | 134 | sn_procfs_create_entry("licenseID", sgi_proc_dir, |
135 | licenseID_open, single_release); | 135 | licenseID_open, single_release); |
136 | 136 | ||
137 | e = sn_procfs_create_entry("sn_force_interrupt", sgi_proc_dir, | 137 | e = sn_procfs_create_entry("sn_force_interrupt", sgi_proc_dir, |
138 | sn_force_interrupt_open, single_release); | 138 | sn_force_interrupt_open, single_release); |
139 | if (e) | 139 | if (e) |
140 | e->proc_fops->write = sn_force_interrupt_write_proc; | 140 | e->proc_fops->write = sn_force_interrupt_write_proc; |
141 | 141 | ||
142 | sn_procfs_create_entry("coherence_id", sgi_proc_dir, | 142 | sn_procfs_create_entry("coherence_id", sgi_proc_dir, |
143 | coherence_id_open, single_release); | 143 | coherence_id_open, single_release); |
144 | 144 | ||
145 | sn_procfs_create_entry("sn_topology", sgi_proc_dir, | 145 | sn_procfs_create_entry("sn_topology", sgi_proc_dir, |
146 | sn_topology_open, sn_topology_release); | 146 | sn_topology_open, sn_topology_release); |
147 | } | 147 | } |
148 | 148 | ||
149 | #endif /* CONFIG_PROC_FS */ | 149 | #endif /* CONFIG_PROC_FS */ |
diff --git a/arch/ia64/sn/kernel/sn2/timer.c b/arch/ia64/sn/kernel/sn2/timer.c index deb9baf4d473..56a88b6df4b4 100644 --- a/arch/ia64/sn/kernel/sn2/timer.c +++ b/arch/ia64/sn/kernel/sn2/timer.c | |||
@@ -14,6 +14,7 @@ | |||
14 | 14 | ||
15 | #include <asm/hw_irq.h> | 15 | #include <asm/hw_irq.h> |
16 | #include <asm/system.h> | 16 | #include <asm/system.h> |
17 | #include <asm/timex.h> | ||
17 | 18 | ||
18 | #include <asm/sn/leds.h> | 19 | #include <asm/sn/leds.h> |
19 | #include <asm/sn/shub_mmr.h> | 20 | #include <asm/sn/shub_mmr.h> |
@@ -28,9 +29,27 @@ static struct time_interpolator sn2_interpolator = { | |||
28 | .source = TIME_SOURCE_MMIO64 | 29 | .source = TIME_SOURCE_MMIO64 |
29 | }; | 30 | }; |
30 | 31 | ||
32 | /* | ||
33 | * sn udelay uses the RTC instead of the ITC because the ITC is not | ||
34 | * synchronized across all CPUs, and the thread may migrate to another CPU | ||
35 | * if preemption is enabled. | ||
36 | */ | ||
37 | static void | ||
38 | ia64_sn_udelay (unsigned long usecs) | ||
39 | { | ||
40 | unsigned long start = rtc_time(); | ||
41 | unsigned long end = start + | ||
42 | usecs * sn_rtc_cycles_per_second / 1000000; | ||
43 | |||
44 | while (time_before((unsigned long)rtc_time(), end)) | ||
45 | cpu_relax(); | ||
46 | } | ||
47 | |||
31 | void __init sn_timer_init(void) | 48 | void __init sn_timer_init(void) |
32 | { | 49 | { |
33 | sn2_interpolator.frequency = sn_rtc_cycles_per_second; | 50 | sn2_interpolator.frequency = sn_rtc_cycles_per_second; |
34 | sn2_interpolator.addr = RTC_COUNTER_ADDR; | 51 | sn2_interpolator.addr = RTC_COUNTER_ADDR; |
35 | register_time_interpolator(&sn2_interpolator); | 52 | register_time_interpolator(&sn2_interpolator); |
53 | |||
54 | ia64_udelay = &ia64_sn_udelay; | ||
36 | } | 55 | } |
diff --git a/arch/ia64/sn/kernel/sn2/timer_interrupt.c b/arch/ia64/sn/kernel/sn2/timer_interrupt.c index adf5db2e2afe..fa7f69945917 100644 --- a/arch/ia64/sn/kernel/sn2/timer_interrupt.c +++ b/arch/ia64/sn/kernel/sn2/timer_interrupt.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * | 2 | * |
3 | * | 3 | * |
4 | * Copyright (c) 2005 Silicon Graphics, Inc. All Rights Reserved. | 4 | * Copyright (c) 2005, 2006 Silicon Graphics, Inc. All Rights Reserved. |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify it | 6 | * This program is free software; you can redistribute it and/or modify it |
7 | * under the terms of version 2 of the GNU General Public License | 7 | * under the terms of version 2 of the GNU General Public License |
@@ -22,11 +22,6 @@ | |||
22 | * License along with this program; if not, write the Free Software | 22 | * License along with this program; if not, write the Free Software |
23 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. | 23 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. |
24 | * | 24 | * |
25 | * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy, | ||
26 | * Mountain View, CA 94043, or: | ||
27 | * | ||
28 | * http://www.sgi.com | ||
29 | * | ||
30 | * For further information regarding this notice, see: | 25 | * For further information regarding this notice, see: |
31 | * | 26 | * |
32 | * http://oss.sgi.com/projects/GenInfo/NoticeExplan | 27 | * http://oss.sgi.com/projects/GenInfo/NoticeExplan |
diff --git a/arch/ia64/sn/kernel/tiocx.c b/arch/ia64/sn/kernel/tiocx.c index d263d3e8fbb9..99cb28e74295 100644 --- a/arch/ia64/sn/kernel/tiocx.c +++ b/arch/ia64/sn/kernel/tiocx.c | |||
@@ -284,12 +284,10 @@ struct sn_irq_info *tiocx_irq_alloc(nasid_t nasid, int widget, int irq, | |||
284 | if ((nasid & 1) == 0) | 284 | if ((nasid & 1) == 0) |
285 | return NULL; | 285 | return NULL; |
286 | 286 | ||
287 | sn_irq_info = kmalloc(sn_irq_size, GFP_KERNEL); | 287 | sn_irq_info = kzalloc(sn_irq_size, GFP_KERNEL); |
288 | if (sn_irq_info == NULL) | 288 | if (sn_irq_info == NULL) |
289 | return NULL; | 289 | return NULL; |
290 | 290 | ||
291 | memset(sn_irq_info, 0x0, sn_irq_size); | ||
292 | |||
293 | status = tiocx_intr_alloc(nasid, widget, __pa(sn_irq_info), irq, | 291 | status = tiocx_intr_alloc(nasid, widget, __pa(sn_irq_info), irq, |
294 | req_nasid, slice); | 292 | req_nasid, slice); |
295 | if (status) { | 293 | if (status) { |
@@ -486,7 +484,7 @@ static int __init tiocx_init(void) | |||
486 | int found_tiocx_device = 0; | 484 | int found_tiocx_device = 0; |
487 | 485 | ||
488 | if (!ia64_platform_is("sn2")) | 486 | if (!ia64_platform_is("sn2")) |
489 | return -ENODEV; | 487 | return 0; |
490 | 488 | ||
491 | bus_register(&tiocx_bus_type); | 489 | bus_register(&tiocx_bus_type); |
492 | 490 | ||
diff --git a/arch/ia64/sn/kernel/xpc_channel.c b/arch/ia64/sn/kernel/xpc_channel.c index 8d950c778bb6..cdf6856ce089 100644 --- a/arch/ia64/sn/kernel/xpc_channel.c +++ b/arch/ia64/sn/kernel/xpc_channel.c | |||
@@ -447,7 +447,7 @@ xpc_allocate_local_msgqueue(struct xpc_channel *ch) | |||
447 | 447 | ||
448 | nbytes = nentries * ch->msg_size; | 448 | nbytes = nentries * ch->msg_size; |
449 | ch->local_msgqueue = xpc_kmalloc_cacheline_aligned(nbytes, | 449 | ch->local_msgqueue = xpc_kmalloc_cacheline_aligned(nbytes, |
450 | (GFP_KERNEL | GFP_DMA), | 450 | GFP_KERNEL, |
451 | &ch->local_msgqueue_base); | 451 | &ch->local_msgqueue_base); |
452 | if (ch->local_msgqueue == NULL) { | 452 | if (ch->local_msgqueue == NULL) { |
453 | continue; | 453 | continue; |
@@ -455,7 +455,7 @@ xpc_allocate_local_msgqueue(struct xpc_channel *ch) | |||
455 | memset(ch->local_msgqueue, 0, nbytes); | 455 | memset(ch->local_msgqueue, 0, nbytes); |
456 | 456 | ||
457 | nbytes = nentries * sizeof(struct xpc_notify); | 457 | nbytes = nentries * sizeof(struct xpc_notify); |
458 | ch->notify_queue = kmalloc(nbytes, (GFP_KERNEL | GFP_DMA)); | 458 | ch->notify_queue = kmalloc(nbytes, GFP_KERNEL); |
459 | if (ch->notify_queue == NULL) { | 459 | if (ch->notify_queue == NULL) { |
460 | kfree(ch->local_msgqueue_base); | 460 | kfree(ch->local_msgqueue_base); |
461 | ch->local_msgqueue = NULL; | 461 | ch->local_msgqueue = NULL; |
@@ -502,7 +502,7 @@ xpc_allocate_remote_msgqueue(struct xpc_channel *ch) | |||
502 | 502 | ||
503 | nbytes = nentries * ch->msg_size; | 503 | nbytes = nentries * ch->msg_size; |
504 | ch->remote_msgqueue = xpc_kmalloc_cacheline_aligned(nbytes, | 504 | ch->remote_msgqueue = xpc_kmalloc_cacheline_aligned(nbytes, |
505 | (GFP_KERNEL | GFP_DMA), | 505 | GFP_KERNEL, |
506 | &ch->remote_msgqueue_base); | 506 | &ch->remote_msgqueue_base); |
507 | if (ch->remote_msgqueue == NULL) { | 507 | if (ch->remote_msgqueue == NULL) { |
508 | continue; | 508 | continue; |
@@ -738,7 +738,9 @@ xpc_process_disconnect(struct xpc_channel *ch, unsigned long *irq_flags) | |||
738 | 738 | ||
739 | /* make sure all activity has settled down first */ | 739 | /* make sure all activity has settled down first */ |
740 | 740 | ||
741 | if (atomic_read(&ch->references) > 0) { | 741 | if (atomic_read(&ch->references) > 0 || |
742 | ((ch->flags & XPC_C_CONNECTEDCALLOUT_MADE) && | ||
743 | !(ch->flags & XPC_C_DISCONNECTINGCALLOUT_MADE))) { | ||
742 | return; | 744 | return; |
743 | } | 745 | } |
744 | DBUG_ON(atomic_read(&ch->kthreads_assigned) != 0); | 746 | DBUG_ON(atomic_read(&ch->kthreads_assigned) != 0); |
@@ -775,7 +777,7 @@ xpc_process_disconnect(struct xpc_channel *ch, unsigned long *irq_flags) | |||
775 | 777 | ||
776 | /* both sides are disconnected now */ | 778 | /* both sides are disconnected now */ |
777 | 779 | ||
778 | if (ch->flags & XPC_C_CONNECTCALLOUT) { | 780 | if (ch->flags & XPC_C_DISCONNECTINGCALLOUT_MADE) { |
779 | spin_unlock_irqrestore(&ch->lock, *irq_flags); | 781 | spin_unlock_irqrestore(&ch->lock, *irq_flags); |
780 | xpc_disconnect_callout(ch, xpcDisconnected); | 782 | xpc_disconnect_callout(ch, xpcDisconnected); |
781 | spin_lock_irqsave(&ch->lock, *irq_flags); | 783 | spin_lock_irqsave(&ch->lock, *irq_flags); |
@@ -1300,7 +1302,7 @@ xpc_process_msg_IPI(struct xpc_partition *part, int ch_number) | |||
1300 | "delivered=%d, partid=%d, channel=%d\n", | 1302 | "delivered=%d, partid=%d, channel=%d\n", |
1301 | nmsgs_sent, ch->partid, ch->number); | 1303 | nmsgs_sent, ch->partid, ch->number); |
1302 | 1304 | ||
1303 | if (ch->flags & XPC_C_CONNECTCALLOUT) { | 1305 | if (ch->flags & XPC_C_CONNECTEDCALLOUT_MADE) { |
1304 | xpc_activate_kthreads(ch, nmsgs_sent); | 1306 | xpc_activate_kthreads(ch, nmsgs_sent); |
1305 | } | 1307 | } |
1306 | } | 1308 | } |
diff --git a/arch/ia64/sn/kernel/xpc_main.c b/arch/ia64/sn/kernel/xpc_main.c index c75f8aeefc2b..8cbf16432570 100644 --- a/arch/ia64/sn/kernel/xpc_main.c +++ b/arch/ia64/sn/kernel/xpc_main.c | |||
@@ -575,18 +575,21 @@ xpc_activate_partition(struct xpc_partition *part) | |||
575 | 575 | ||
576 | spin_lock_irqsave(&part->act_lock, irq_flags); | 576 | spin_lock_irqsave(&part->act_lock, irq_flags); |
577 | 577 | ||
578 | pid = kernel_thread(xpc_activating, (void *) ((u64) partid), 0); | ||
579 | |||
580 | DBUG_ON(part->act_state != XPC_P_INACTIVE); | 578 | DBUG_ON(part->act_state != XPC_P_INACTIVE); |
581 | 579 | ||
582 | if (pid > 0) { | 580 | part->act_state = XPC_P_ACTIVATION_REQ; |
583 | part->act_state = XPC_P_ACTIVATION_REQ; | 581 | XPC_SET_REASON(part, xpcCloneKThread, __LINE__); |
584 | XPC_SET_REASON(part, xpcCloneKThread, __LINE__); | ||
585 | } else { | ||
586 | XPC_SET_REASON(part, xpcCloneKThreadFailed, __LINE__); | ||
587 | } | ||
588 | 582 | ||
589 | spin_unlock_irqrestore(&part->act_lock, irq_flags); | 583 | spin_unlock_irqrestore(&part->act_lock, irq_flags); |
584 | |||
585 | pid = kernel_thread(xpc_activating, (void *) ((u64) partid), 0); | ||
586 | |||
587 | if (unlikely(pid <= 0)) { | ||
588 | spin_lock_irqsave(&part->act_lock, irq_flags); | ||
589 | part->act_state = XPC_P_INACTIVE; | ||
590 | XPC_SET_REASON(part, xpcCloneKThreadFailed, __LINE__); | ||
591 | spin_unlock_irqrestore(&part->act_lock, irq_flags); | ||
592 | } | ||
590 | } | 593 | } |
591 | 594 | ||
592 | 595 | ||
@@ -747,12 +750,16 @@ xpc_daemonize_kthread(void *args) | |||
747 | /* let registerer know that connection has been established */ | 750 | /* let registerer know that connection has been established */ |
748 | 751 | ||
749 | spin_lock_irqsave(&ch->lock, irq_flags); | 752 | spin_lock_irqsave(&ch->lock, irq_flags); |
750 | if (!(ch->flags & XPC_C_CONNECTCALLOUT)) { | 753 | if (!(ch->flags & XPC_C_CONNECTEDCALLOUT)) { |
751 | ch->flags |= XPC_C_CONNECTCALLOUT; | 754 | ch->flags |= XPC_C_CONNECTEDCALLOUT; |
752 | spin_unlock_irqrestore(&ch->lock, irq_flags); | 755 | spin_unlock_irqrestore(&ch->lock, irq_flags); |
753 | 756 | ||
754 | xpc_connected_callout(ch); | 757 | xpc_connected_callout(ch); |
755 | 758 | ||
759 | spin_lock_irqsave(&ch->lock, irq_flags); | ||
760 | ch->flags |= XPC_C_CONNECTEDCALLOUT_MADE; | ||
761 | spin_unlock_irqrestore(&ch->lock, irq_flags); | ||
762 | |||
756 | /* | 763 | /* |
757 | * It is possible that while the callout was being | 764 | * It is possible that while the callout was being |
758 | * made that the remote partition sent some messages. | 765 | * made that the remote partition sent some messages. |
@@ -774,15 +781,17 @@ xpc_daemonize_kthread(void *args) | |||
774 | 781 | ||
775 | if (atomic_dec_return(&ch->kthreads_assigned) == 0) { | 782 | if (atomic_dec_return(&ch->kthreads_assigned) == 0) { |
776 | spin_lock_irqsave(&ch->lock, irq_flags); | 783 | spin_lock_irqsave(&ch->lock, irq_flags); |
777 | if ((ch->flags & XPC_C_CONNECTCALLOUT) && | 784 | if ((ch->flags & XPC_C_CONNECTEDCALLOUT_MADE) && |
778 | !(ch->flags & XPC_C_DISCONNECTCALLOUT)) { | 785 | !(ch->flags & XPC_C_DISCONNECTINGCALLOUT)) { |
779 | ch->flags |= XPC_C_DISCONNECTCALLOUT; | 786 | ch->flags |= XPC_C_DISCONNECTINGCALLOUT; |
780 | spin_unlock_irqrestore(&ch->lock, irq_flags); | 787 | spin_unlock_irqrestore(&ch->lock, irq_flags); |
781 | 788 | ||
782 | xpc_disconnect_callout(ch, xpcDisconnecting); | 789 | xpc_disconnect_callout(ch, xpcDisconnecting); |
783 | } else { | 790 | |
784 | spin_unlock_irqrestore(&ch->lock, irq_flags); | 791 | spin_lock_irqsave(&ch->lock, irq_flags); |
792 | ch->flags |= XPC_C_DISCONNECTINGCALLOUT_MADE; | ||
785 | } | 793 | } |
794 | spin_unlock_irqrestore(&ch->lock, irq_flags); | ||
786 | if (atomic_dec_return(&part->nchannels_engaged) == 0) { | 795 | if (atomic_dec_return(&part->nchannels_engaged) == 0) { |
787 | xpc_mark_partition_disengaged(part); | 796 | xpc_mark_partition_disengaged(part); |
788 | xpc_IPI_send_disengage(part); | 797 | xpc_IPI_send_disengage(part); |
diff --git a/arch/ia64/sn/pci/Makefile b/arch/ia64/sn/pci/Makefile index 321576b1b425..c6946784a6a8 100644 --- a/arch/ia64/sn/pci/Makefile +++ b/arch/ia64/sn/pci/Makefile | |||
@@ -7,4 +7,6 @@ | |||
7 | # | 7 | # |
8 | # Makefile for the sn pci general routines. | 8 | # Makefile for the sn pci general routines. |
9 | 9 | ||
10 | CPPFLAGS += -I$(srctree)/arch/ia64/sn/include | ||
11 | |||
10 | obj-y := pci_dma.o tioca_provider.o tioce_provider.o pcibr/ | 12 | obj-y := pci_dma.o tioca_provider.o tioce_provider.o pcibr/ |
diff --git a/arch/ia64/sn/pci/pci_dma.c b/arch/ia64/sn/pci/pci_dma.c index 9bf9f23b9a1f..b4b84c269210 100644 --- a/arch/ia64/sn/pci/pci_dma.c +++ b/arch/ia64/sn/pci/pci_dma.c | |||
@@ -90,14 +90,14 @@ void *sn_dma_alloc_coherent(struct device *dev, size_t size, | |||
90 | */ | 90 | */ |
91 | node = pcibus_to_node(pdev->bus); | 91 | node = pcibus_to_node(pdev->bus); |
92 | if (likely(node >=0)) { | 92 | if (likely(node >=0)) { |
93 | struct page *p = alloc_pages_node(node, GFP_ATOMIC, get_order(size)); | 93 | struct page *p = alloc_pages_node(node, flags, get_order(size)); |
94 | 94 | ||
95 | if (likely(p)) | 95 | if (likely(p)) |
96 | cpuaddr = page_address(p); | 96 | cpuaddr = page_address(p); |
97 | else | 97 | else |
98 | return NULL; | 98 | return NULL; |
99 | } else | 99 | } else |
100 | cpuaddr = (void *)__get_free_pages(GFP_ATOMIC, get_order(size)); | 100 | cpuaddr = (void *)__get_free_pages(flags, get_order(size)); |
101 | 101 | ||
102 | if (unlikely(!cpuaddr)) | 102 | if (unlikely(!cpuaddr)) |
103 | return NULL; | 103 | return NULL; |
@@ -335,10 +335,10 @@ int sn_pci_legacy_read(struct pci_bus *bus, u16 port, u32 *val, u8 size) | |||
335 | */ | 335 | */ |
336 | 336 | ||
337 | SAL_CALL(isrv, SN_SAL_IOIF_PCI_SAFE, | 337 | SAL_CALL(isrv, SN_SAL_IOIF_PCI_SAFE, |
338 | pci_domain_nr(bus), bus->number, | 338 | pci_domain_nr(bus), bus->number, |
339 | 0, /* io */ | 339 | 0, /* io */ |
340 | 0, /* read */ | 340 | 0, /* read */ |
341 | port, size, __pa(val)); | 341 | port, size, __pa(val)); |
342 | 342 | ||
343 | if (isrv.status == 0) | 343 | if (isrv.status == 0) |
344 | return size; | 344 | return size; |
@@ -381,10 +381,10 @@ int sn_pci_legacy_write(struct pci_bus *bus, u16 port, u32 val, u8 size) | |||
381 | */ | 381 | */ |
382 | 382 | ||
383 | SAL_CALL(isrv, SN_SAL_IOIF_PCI_SAFE, | 383 | SAL_CALL(isrv, SN_SAL_IOIF_PCI_SAFE, |
384 | pci_domain_nr(bus), bus->number, | 384 | pci_domain_nr(bus), bus->number, |
385 | 0, /* io */ | 385 | 0, /* io */ |
386 | 1, /* write */ | 386 | 1, /* write */ |
387 | port, size, __pa(&val)); | 387 | port, size, __pa(&val)); |
388 | 388 | ||
389 | if (isrv.status == 0) | 389 | if (isrv.status == 0) |
390 | return size; | 390 | return size; |
diff --git a/arch/ia64/sn/pci/pcibr/Makefile b/arch/ia64/sn/pci/pcibr/Makefile index 1850c4a94c41..3b403ea456f9 100644 --- a/arch/ia64/sn/pci/pcibr/Makefile +++ b/arch/ia64/sn/pci/pcibr/Makefile | |||
@@ -7,5 +7,7 @@ | |||
7 | # | 7 | # |
8 | # Makefile for the sn2 io routines. | 8 | # Makefile for the sn2 io routines. |
9 | 9 | ||
10 | CPPFLAGS += -I$(srctree)/arch/ia64/sn/include | ||
11 | |||
10 | obj-y += pcibr_dma.o pcibr_reg.o \ | 12 | obj-y += pcibr_dma.o pcibr_reg.o \ |
11 | pcibr_ate.o pcibr_provider.o | 13 | pcibr_ate.o pcibr_provider.o |
diff --git a/arch/ia64/sn/pci/pcibr/pcibr_ate.c b/arch/ia64/sn/pci/pcibr/pcibr_ate.c index aa3fa5152a32..1f0253bfe0a0 100644 --- a/arch/ia64/sn/pci/pcibr/pcibr_ate.c +++ b/arch/ia64/sn/pci/pcibr/pcibr_ate.c | |||
@@ -3,7 +3,7 @@ | |||
3 | * License. See the file "COPYING" in the main directory of this archive | 3 | * License. See the file "COPYING" in the main directory of this archive |
4 | * for more details. | 4 | * for more details. |
5 | * | 5 | * |
6 | * Copyright (C) 2001-2004 Silicon Graphics, Inc. All rights reserved. | 6 | * Copyright (C) 2001-2006 Silicon Graphics, Inc. All rights reserved. |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include <linux/types.h> | 9 | #include <linux/types.h> |
@@ -12,7 +12,7 @@ | |||
12 | #include <asm/sn/pcibus_provider_defs.h> | 12 | #include <asm/sn/pcibus_provider_defs.h> |
13 | #include <asm/sn/pcidev.h> | 13 | #include <asm/sn/pcidev.h> |
14 | 14 | ||
15 | int pcibr_invalidate_ate = 0; /* by default don't invalidate ATE on free */ | 15 | int pcibr_invalidate_ate; /* by default don't invalidate ATE on free */ |
16 | 16 | ||
17 | /* | 17 | /* |
18 | * mark_ate: Mark the ate as either free or inuse. | 18 | * mark_ate: Mark the ate as either free or inuse. |
@@ -20,14 +20,12 @@ int pcibr_invalidate_ate = 0; /* by default don't invalidate ATE on free */ | |||
20 | static void mark_ate(struct ate_resource *ate_resource, int start, int number, | 20 | static void mark_ate(struct ate_resource *ate_resource, int start, int number, |
21 | u64 value) | 21 | u64 value) |
22 | { | 22 | { |
23 | |||
24 | u64 *ate = ate_resource->ate; | 23 | u64 *ate = ate_resource->ate; |
25 | int index; | 24 | int index; |
26 | int length = 0; | 25 | int length = 0; |
27 | 26 | ||
28 | for (index = start; length < number; index++, length++) | 27 | for (index = start; length < number; index++, length++) |
29 | ate[index] = value; | 28 | ate[index] = value; |
30 | |||
31 | } | 29 | } |
32 | 30 | ||
33 | /* | 31 | /* |
@@ -37,7 +35,6 @@ static void mark_ate(struct ate_resource *ate_resource, int start, int number, | |||
37 | static int find_free_ate(struct ate_resource *ate_resource, int start, | 35 | static int find_free_ate(struct ate_resource *ate_resource, int start, |
38 | int count) | 36 | int count) |
39 | { | 37 | { |
40 | |||
41 | u64 *ate = ate_resource->ate; | 38 | u64 *ate = ate_resource->ate; |
42 | int index; | 39 | int index; |
43 | int start_free; | 40 | int start_free; |
@@ -70,12 +67,10 @@ static int find_free_ate(struct ate_resource *ate_resource, int start, | |||
70 | static inline void free_ate_resource(struct ate_resource *ate_resource, | 67 | static inline void free_ate_resource(struct ate_resource *ate_resource, |
71 | int start) | 68 | int start) |
72 | { | 69 | { |
73 | |||
74 | mark_ate(ate_resource, start, ate_resource->ate[start], 0); | 70 | mark_ate(ate_resource, start, ate_resource->ate[start], 0); |
75 | if ((ate_resource->lowest_free_index > start) || | 71 | if ((ate_resource->lowest_free_index > start) || |
76 | (ate_resource->lowest_free_index < 0)) | 72 | (ate_resource->lowest_free_index < 0)) |
77 | ate_resource->lowest_free_index = start; | 73 | ate_resource->lowest_free_index = start; |
78 | |||
79 | } | 74 | } |
80 | 75 | ||
81 | /* | 76 | /* |
@@ -84,7 +79,6 @@ static inline void free_ate_resource(struct ate_resource *ate_resource, | |||
84 | static inline int alloc_ate_resource(struct ate_resource *ate_resource, | 79 | static inline int alloc_ate_resource(struct ate_resource *ate_resource, |
85 | int ate_needed) | 80 | int ate_needed) |
86 | { | 81 | { |
87 | |||
88 | int start_index; | 82 | int start_index; |
89 | 83 | ||
90 | /* | 84 | /* |
@@ -118,19 +112,12 @@ static inline int alloc_ate_resource(struct ate_resource *ate_resource, | |||
118 | */ | 112 | */ |
119 | int pcibr_ate_alloc(struct pcibus_info *pcibus_info, int count) | 113 | int pcibr_ate_alloc(struct pcibus_info *pcibus_info, int count) |
120 | { | 114 | { |
121 | int status = 0; | 115 | int status; |
122 | u64 flag; | 116 | unsigned long flags; |
123 | 117 | ||
124 | flag = pcibr_lock(pcibus_info); | 118 | spin_lock_irqsave(&pcibus_info->pbi_lock, flags); |
125 | status = alloc_ate_resource(&pcibus_info->pbi_int_ate_resource, count); | 119 | status = alloc_ate_resource(&pcibus_info->pbi_int_ate_resource, count); |
126 | 120 | spin_unlock_irqrestore(&pcibus_info->pbi_lock, flags); | |
127 | if (status < 0) { | ||
128 | /* Failed to allocate */ | ||
129 | pcibr_unlock(pcibus_info, flag); | ||
130 | return -1; | ||
131 | } | ||
132 | |||
133 | pcibr_unlock(pcibus_info, flag); | ||
134 | 121 | ||
135 | return status; | 122 | return status; |
136 | } | 123 | } |
@@ -182,7 +169,7 @@ void pcibr_ate_free(struct pcibus_info *pcibus_info, int index) | |||
182 | ate_write(pcibus_info, index, count, (ate & ~PCI32_ATE_V)); | 169 | ate_write(pcibus_info, index, count, (ate & ~PCI32_ATE_V)); |
183 | } | 170 | } |
184 | 171 | ||
185 | flags = pcibr_lock(pcibus_info); | 172 | spin_lock_irqsave(&pcibus_info->pbi_lock, flags); |
186 | free_ate_resource(&pcibus_info->pbi_int_ate_resource, index); | 173 | free_ate_resource(&pcibus_info->pbi_int_ate_resource, index); |
187 | pcibr_unlock(pcibus_info, flags); | 174 | spin_unlock_irqrestore(&pcibus_info->pbi_lock, flags); |
188 | } | 175 | } |
diff --git a/arch/ia64/sn/pci/pcibr/pcibr_dma.c b/arch/ia64/sn/pci/pcibr/pcibr_dma.c index 54ce5b7ceed2..9f86bb6519aa 100644 --- a/arch/ia64/sn/pci/pcibr/pcibr_dma.c +++ b/arch/ia64/sn/pci/pcibr/pcibr_dma.c | |||
@@ -137,14 +137,12 @@ pcibr_dmatrans_direct64(struct pcidev_info * info, u64 paddr, | |||
137 | pci_addr |= PCI64_ATTR_VIRTUAL; | 137 | pci_addr |= PCI64_ATTR_VIRTUAL; |
138 | 138 | ||
139 | return pci_addr; | 139 | return pci_addr; |
140 | |||
141 | } | 140 | } |
142 | 141 | ||
143 | static dma_addr_t | 142 | static dma_addr_t |
144 | pcibr_dmatrans_direct32(struct pcidev_info * info, | 143 | pcibr_dmatrans_direct32(struct pcidev_info * info, |
145 | u64 paddr, size_t req_size, u64 flags) | 144 | u64 paddr, size_t req_size, u64 flags) |
146 | { | 145 | { |
147 | |||
148 | struct pcidev_info *pcidev_info = info->pdi_host_pcidev_info; | 146 | struct pcidev_info *pcidev_info = info->pdi_host_pcidev_info; |
149 | struct pcibus_info *pcibus_info = (struct pcibus_info *)pcidev_info-> | 147 | struct pcibus_info *pcibus_info = (struct pcibus_info *)pcidev_info-> |
150 | pdi_pcibus_info; | 148 | pdi_pcibus_info; |
@@ -171,7 +169,6 @@ pcibr_dmatrans_direct32(struct pcidev_info * info, | |||
171 | } | 169 | } |
172 | 170 | ||
173 | return PCI32_DIRECT_BASE | offset; | 171 | return PCI32_DIRECT_BASE | offset; |
174 | |||
175 | } | 172 | } |
176 | 173 | ||
177 | /* | 174 | /* |
@@ -218,9 +215,8 @@ void sn_dma_flush(u64 addr) | |||
218 | u64 flags; | 215 | u64 flags; |
219 | u64 itte; | 216 | u64 itte; |
220 | struct hubdev_info *hubinfo; | 217 | struct hubdev_info *hubinfo; |
221 | volatile struct sn_flush_device_kernel *p; | 218 | struct sn_flush_device_kernel *p; |
222 | volatile struct sn_flush_device_common *common; | 219 | struct sn_flush_device_common *common; |
223 | |||
224 | struct sn_flush_nasid_entry *flush_nasid_list; | 220 | struct sn_flush_nasid_entry *flush_nasid_list; |
225 | 221 | ||
226 | if (!sn_ioif_inited) | 222 | if (!sn_ioif_inited) |
@@ -310,8 +306,7 @@ void sn_dma_flush(u64 addr) | |||
310 | (common->sfdl_slot - 1)); | 306 | (common->sfdl_slot - 1)); |
311 | } | 307 | } |
312 | } else { | 308 | } else { |
313 | spin_lock_irqsave((spinlock_t *)&p->sfdl_flush_lock, | 309 | spin_lock_irqsave(&p->sfdl_flush_lock, flags); |
314 | flags); | ||
315 | *common->sfdl_flush_addr = 0; | 310 | *common->sfdl_flush_addr = 0; |
316 | 311 | ||
317 | /* force an interrupt. */ | 312 | /* force an interrupt. */ |
@@ -322,8 +317,7 @@ void sn_dma_flush(u64 addr) | |||
322 | cpu_relax(); | 317 | cpu_relax(); |
323 | 318 | ||
324 | /* okay, everything is synched up. */ | 319 | /* okay, everything is synched up. */ |
325 | spin_unlock_irqrestore((spinlock_t *)&p->sfdl_flush_lock, | 320 | spin_unlock_irqrestore(&p->sfdl_flush_lock, flags); |
326 | flags); | ||
327 | } | 321 | } |
328 | return; | 322 | return; |
329 | } | 323 | } |
diff --git a/arch/ia64/sn/pci/pcibr/pcibr_provider.c b/arch/ia64/sn/pci/pcibr/pcibr_provider.c index 2fac27049bf6..98f716bd92f0 100644 --- a/arch/ia64/sn/pci/pcibr/pcibr_provider.c +++ b/arch/ia64/sn/pci/pcibr/pcibr_provider.c | |||
@@ -163,9 +163,12 @@ pcibr_bus_fixup(struct pcibus_bussoft *prom_bussoft, struct pci_controller *cont | |||
163 | /* Setup the PMU ATE map */ | 163 | /* Setup the PMU ATE map */ |
164 | soft->pbi_int_ate_resource.lowest_free_index = 0; | 164 | soft->pbi_int_ate_resource.lowest_free_index = 0; |
165 | soft->pbi_int_ate_resource.ate = | 165 | soft->pbi_int_ate_resource.ate = |
166 | kmalloc(soft->pbi_int_ate_size * sizeof(u64), GFP_KERNEL); | 166 | kzalloc(soft->pbi_int_ate_size * sizeof(u64), GFP_KERNEL); |
167 | memset(soft->pbi_int_ate_resource.ate, 0, | 167 | |
168 | (soft->pbi_int_ate_size * sizeof(u64))); | 168 | if (!soft->pbi_int_ate_resource.ate) { |
169 | kfree(soft); | ||
170 | return NULL; | ||
171 | } | ||
169 | 172 | ||
170 | if (prom_bussoft->bs_asic_type == PCIIO_ASIC_TYPE_TIOCP) { | 173 | if (prom_bussoft->bs_asic_type == PCIIO_ASIC_TYPE_TIOCP) { |
171 | /* TIO PCI Bridge: find nearest node with CPUs */ | 174 | /* TIO PCI Bridge: find nearest node with CPUs */ |
diff --git a/arch/m32r/Makefile b/arch/m32r/Makefile index 983d438b14b6..4b3c90ba926c 100644 --- a/arch/m32r/Makefile +++ b/arch/m32r/Makefile | |||
@@ -12,14 +12,14 @@ CFLAGS_MODULE += -mmodel=large | |||
12 | 12 | ||
13 | ifdef CONFIG_CHIP_VDEC2 | 13 | ifdef CONFIG_CHIP_VDEC2 |
14 | cflags-$(CONFIG_ISA_M32R2) += -DNO_FPU -Wa,-bitinst | 14 | cflags-$(CONFIG_ISA_M32R2) += -DNO_FPU -Wa,-bitinst |
15 | aflags-$(CONFIG_ISA_M32R2) += -DNO_FPU -Wa,-bitinst | 15 | aflags-$(CONFIG_ISA_M32R2) += -DNO_FPU -O2 -Wa,-bitinst -Wa,-no-parallel |
16 | else | 16 | else |
17 | cflags-$(CONFIG_ISA_M32R2) += -DNO_FPU -m32r2 | 17 | cflags-$(CONFIG_ISA_M32R2) += -DNO_FPU -m32r2 |
18 | aflags-$(CONFIG_ISA_M32R2) += -DNO_FPU -m32r2 | 18 | aflags-$(CONFIG_ISA_M32R2) += -DNO_FPU -m32r2 -O2 |
19 | endif | 19 | endif |
20 | 20 | ||
21 | cflags-$(CONFIG_ISA_M32R) += -DNO_FPU | 21 | cflags-$(CONFIG_ISA_M32R) += -DNO_FPU |
22 | aflags-$(CONFIG_ISA_M32R) += -DNO_FPU -Wa,-no-bitinst | 22 | aflags-$(CONFIG_ISA_M32R) += -DNO_FPU -O2 -Wa,-no-bitinst |
23 | 23 | ||
24 | CFLAGS += $(cflags-y) | 24 | CFLAGS += $(cflags-y) |
25 | AFLAGS += $(aflags-y) | 25 | AFLAGS += $(aflags-y) |
diff --git a/arch/m32r/kernel/m32r_ksyms.c b/arch/m32r/kernel/m32r_ksyms.c index dbc8a392105f..be8b711367ec 100644 --- a/arch/m32r/kernel/m32r_ksyms.c +++ b/arch/m32r/kernel/m32r_ksyms.c | |||
@@ -18,11 +18,6 @@ | |||
18 | #include <asm/irq.h> | 18 | #include <asm/irq.h> |
19 | #include <asm/tlbflush.h> | 19 | #include <asm/tlbflush.h> |
20 | 20 | ||
21 | #if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_HD) || defined(CONFIG_BLK_DEV_IDE_MODULE) || defined(CONFIG_BLK_DEV_HD_MODULE) | ||
22 | extern struct drive_info_struct drive_info; | ||
23 | EXPORT_SYMBOL(drive_info); | ||
24 | #endif | ||
25 | |||
26 | /* platform dependent support */ | 21 | /* platform dependent support */ |
27 | EXPORT_SYMBOL(boot_cpu_data); | 22 | EXPORT_SYMBOL(boot_cpu_data); |
28 | EXPORT_SYMBOL(dump_fpu); | 23 | EXPORT_SYMBOL(dump_fpu); |
diff --git a/arch/m32r/kernel/setup.c b/arch/m32r/kernel/setup.c index c2e4dccf0112..d742037a7ccb 100644 --- a/arch/m32r/kernel/setup.c +++ b/arch/m32r/kernel/setup.c | |||
@@ -37,12 +37,6 @@ | |||
37 | extern void init_mmu(void); | 37 | extern void init_mmu(void); |
38 | #endif | 38 | #endif |
39 | 39 | ||
40 | #if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_HD) \ | ||
41 | || defined(CONFIG_BLK_DEV_IDE_MODULE) \ | ||
42 | || defined(CONFIG_BLK_DEV_HD_MODULE) | ||
43 | struct drive_info_struct { char dummy[32]; } drive_info; | ||
44 | #endif | ||
45 | |||
46 | extern char _end[]; | 40 | extern char _end[]; |
47 | 41 | ||
48 | /* | 42 | /* |
diff --git a/arch/m32r/kernel/signal.c b/arch/m32r/kernel/signal.c index 71763f7a1d19..cb33097fefc4 100644 --- a/arch/m32r/kernel/signal.c +++ b/arch/m32r/kernel/signal.c | |||
@@ -36,7 +36,7 @@ int do_signal(struct pt_regs *, sigset_t *); | |||
36 | asmlinkage int | 36 | asmlinkage int |
37 | sys_rt_sigsuspend(sigset_t *unewset, size_t sigsetsize, | 37 | sys_rt_sigsuspend(sigset_t *unewset, size_t sigsetsize, |
38 | unsigned long r2, unsigned long r3, unsigned long r4, | 38 | unsigned long r2, unsigned long r3, unsigned long r4, |
39 | unsigned long r5, unsigned long r6, struct pt_regs regs) | 39 | unsigned long r5, unsigned long r6, struct pt_regs *regs) |
40 | { | 40 | { |
41 | sigset_t saveset, newset; | 41 | sigset_t saveset, newset; |
42 | 42 | ||
@@ -54,21 +54,21 @@ sys_rt_sigsuspend(sigset_t *unewset, size_t sigsetsize, | |||
54 | recalc_sigpending(); | 54 | recalc_sigpending(); |
55 | spin_unlock_irq(¤t->sighand->siglock); | 55 | spin_unlock_irq(¤t->sighand->siglock); |
56 | 56 | ||
57 | regs.r0 = -EINTR; | 57 | regs->r0 = -EINTR; |
58 | while (1) { | 58 | while (1) { |
59 | current->state = TASK_INTERRUPTIBLE; | 59 | current->state = TASK_INTERRUPTIBLE; |
60 | schedule(); | 60 | schedule(); |
61 | if (do_signal(®s, &saveset)) | 61 | if (do_signal(regs, &saveset)) |
62 | return regs.r0; | 62 | return regs->r0; |
63 | } | 63 | } |
64 | } | 64 | } |
65 | 65 | ||
66 | asmlinkage int | 66 | asmlinkage int |
67 | sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss, | 67 | sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss, |
68 | unsigned long r2, unsigned long r3, unsigned long r4, | 68 | unsigned long r2, unsigned long r3, unsigned long r4, |
69 | unsigned long r5, unsigned long r6, struct pt_regs regs) | 69 | unsigned long r5, unsigned long r6, struct pt_regs *regs) |
70 | { | 70 | { |
71 | return do_sigaltstack(uss, uoss, regs.spu); | 71 | return do_sigaltstack(uss, uoss, regs->spu); |
72 | } | 72 | } |
73 | 73 | ||
74 | 74 | ||
@@ -140,11 +140,10 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc, | |||
140 | asmlinkage int | 140 | asmlinkage int |
141 | sys_rt_sigreturn(unsigned long r0, unsigned long r1, | 141 | sys_rt_sigreturn(unsigned long r0, unsigned long r1, |
142 | unsigned long r2, unsigned long r3, unsigned long r4, | 142 | unsigned long r2, unsigned long r3, unsigned long r4, |
143 | unsigned long r5, unsigned long r6, struct pt_regs regs) | 143 | unsigned long r5, unsigned long r6, struct pt_regs *regs) |
144 | { | 144 | { |
145 | struct rt_sigframe __user *frame = (struct rt_sigframe __user *)regs.spu; | 145 | struct rt_sigframe __user *frame = (struct rt_sigframe __user *)regs->spu; |
146 | sigset_t set; | 146 | sigset_t set; |
147 | stack_t st; | ||
148 | int result; | 147 | int result; |
149 | 148 | ||
150 | if (!access_ok(VERIFY_READ, frame, sizeof(*frame))) | 149 | if (!access_ok(VERIFY_READ, frame, sizeof(*frame))) |
@@ -158,14 +157,11 @@ sys_rt_sigreturn(unsigned long r0, unsigned long r1, | |||
158 | recalc_sigpending(); | 157 | recalc_sigpending(); |
159 | spin_unlock_irq(¤t->sighand->siglock); | 158 | spin_unlock_irq(¤t->sighand->siglock); |
160 | 159 | ||
161 | if (restore_sigcontext(®s, &frame->uc.uc_mcontext, &result)) | 160 | if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &result)) |
162 | goto badframe; | 161 | goto badframe; |
163 | 162 | ||
164 | if (__copy_from_user(&st, &frame->uc.uc_stack, sizeof(st))) | 163 | if (do_sigaltstack(&frame->uc.uc_stack, NULL, regs->spu) == -EFAULT) |
165 | goto badframe; | 164 | goto badframe; |
166 | /* It is more difficult to avoid calling this function than to | ||
167 | call it and ignore errors. */ | ||
168 | do_sigaltstack(&st, NULL, regs.spu); | ||
169 | 165 | ||
170 | return result; | 166 | return result; |
171 | 167 | ||
diff --git a/arch/m32r/kernel/sys_m32r.c b/arch/m32r/kernel/sys_m32r.c index fe55b28d3725..670cb49210af 100644 --- a/arch/m32r/kernel/sys_m32r.c +++ b/arch/m32r/kernel/sys_m32r.c | |||
@@ -29,28 +29,7 @@ | |||
29 | 29 | ||
30 | /* | 30 | /* |
31 | * sys_tas() - test-and-set | 31 | * sys_tas() - test-and-set |
32 | * linuxthreads testing version | ||
33 | */ | 32 | */ |
34 | #ifndef CONFIG_SMP | ||
35 | asmlinkage int sys_tas(int *addr) | ||
36 | { | ||
37 | int oldval; | ||
38 | unsigned long flags; | ||
39 | |||
40 | if (!access_ok(VERIFY_WRITE, addr, sizeof (int))) | ||
41 | return -EFAULT; | ||
42 | local_irq_save(flags); | ||
43 | oldval = *addr; | ||
44 | if (!oldval) | ||
45 | *addr = 1; | ||
46 | local_irq_restore(flags); | ||
47 | return oldval; | ||
48 | } | ||
49 | #else /* CONFIG_SMP */ | ||
50 | #include <linux/spinlock.h> | ||
51 | |||
52 | static DEFINE_SPINLOCK(tas_lock); | ||
53 | |||
54 | asmlinkage int sys_tas(int *addr) | 33 | asmlinkage int sys_tas(int *addr) |
55 | { | 34 | { |
56 | int oldval; | 35 | int oldval; |
@@ -58,15 +37,43 @@ asmlinkage int sys_tas(int *addr) | |||
58 | if (!access_ok(VERIFY_WRITE, addr, sizeof (int))) | 37 | if (!access_ok(VERIFY_WRITE, addr, sizeof (int))) |
59 | return -EFAULT; | 38 | return -EFAULT; |
60 | 39 | ||
61 | _raw_spin_lock(&tas_lock); | 40 | /* atomic operation: |
62 | oldval = *addr; | 41 | * oldval = *addr; *addr = 1; |
63 | if (!oldval) | 42 | */ |
64 | *addr = 1; | 43 | __asm__ __volatile__ ( |
65 | _raw_spin_unlock(&tas_lock); | 44 | DCACHE_CLEAR("%0", "r4", "%1") |
45 | " .fillinsn\n" | ||
46 | "1:\n" | ||
47 | " lock %0, @%1 -> unlock %2, @%1\n" | ||
48 | "2:\n" | ||
49 | /* NOTE: | ||
50 | * The m32r processor can accept interrupts only | ||
51 | * at the 32-bit instruction boundary. | ||
52 | * So, in the above code, the "unlock" instruction | ||
53 | * can be executed continuously after the "lock" | ||
54 | * instruction execution without any interruptions. | ||
55 | */ | ||
56 | ".section .fixup,\"ax\"\n" | ||
57 | " .balign 4\n" | ||
58 | "3: ldi %0, #%3\n" | ||
59 | " seth r14, #high(2b)\n" | ||
60 | " or3 r14, r14, #low(2b)\n" | ||
61 | " jmp r14\n" | ||
62 | ".previous\n" | ||
63 | ".section __ex_table,\"a\"\n" | ||
64 | " .balign 4\n" | ||
65 | " .long 1b,3b\n" | ||
66 | ".previous\n" | ||
67 | : "=&r" (oldval) | ||
68 | : "r" (addr), "r" (1), "i"(-EFAULT) | ||
69 | : "r14", "memory" | ||
70 | #ifdef CONFIG_CHIP_M32700_TS1 | ||
71 | , "r4" | ||
72 | #endif /* CONFIG_CHIP_M32700_TS1 */ | ||
73 | ); | ||
66 | 74 | ||
67 | return oldval; | 75 | return oldval; |
68 | } | 76 | } |
69 | #endif /* CONFIG_SMP */ | ||
70 | 77 | ||
71 | /* | 78 | /* |
72 | * sys_pipe() is the normal C calling standard for creating | 79 | * sys_pipe() is the normal C calling standard for creating |
diff --git a/arch/m32r/lib/usercopy.c b/arch/m32r/lib/usercopy.c index ce16bbe26a52..2d1dd2106c4d 100644 --- a/arch/m32r/lib/usercopy.c +++ b/arch/m32r/lib/usercopy.c | |||
@@ -64,7 +64,7 @@ do { \ | |||
64 | " .balign 4\n" \ | 64 | " .balign 4\n" \ |
65 | " .long 0b,3b\n" \ | 65 | " .long 0b,3b\n" \ |
66 | ".previous" \ | 66 | ".previous" \ |
67 | : "=r"(res), "=r"(count), "=&r" (__d0), "=&r" (__d1), \ | 67 | : "=&r"(res), "=&r"(count), "=&r" (__d0), "=&r" (__d1), \ |
68 | "=&r" (__d2) \ | 68 | "=&r" (__d2) \ |
69 | : "i"(-EFAULT), "0"(count), "1"(count), "3"(src), \ | 69 | : "i"(-EFAULT), "0"(count), "1"(count), "3"(src), \ |
70 | "4"(dst) \ | 70 | "4"(dst) \ |
@@ -101,7 +101,7 @@ do { \ | |||
101 | " .balign 4\n" \ | 101 | " .balign 4\n" \ |
102 | " .long 0b,3b\n" \ | 102 | " .long 0b,3b\n" \ |
103 | ".previous" \ | 103 | ".previous" \ |
104 | : "=r"(res), "=r"(count), "=&r" (__d0), "=&r" (__d1), \ | 104 | : "=&r"(res), "=&r"(count), "=&r" (__d0), "=&r" (__d1), \ |
105 | "=&r" (__d2) \ | 105 | "=&r" (__d2) \ |
106 | : "i"(-EFAULT), "0"(count), "1"(count), "3"(src), \ | 106 | : "i"(-EFAULT), "0"(count), "1"(count), "3"(src), \ |
107 | "4"(dst) \ | 107 | "4"(dst) \ |
diff --git a/arch/m68k/Kconfig b/arch/m68k/Kconfig index 96b919828053..8849439e88dd 100644 --- a/arch/m68k/Kconfig +++ b/arch/m68k/Kconfig | |||
@@ -21,6 +21,10 @@ config GENERIC_CALIBRATE_DELAY | |||
21 | bool | 21 | bool |
22 | default y | 22 | default y |
23 | 23 | ||
24 | config TIME_LOW_RES | ||
25 | bool | ||
26 | default y | ||
27 | |||
24 | config ARCH_MAY_HAVE_PC_FDC | 28 | config ARCH_MAY_HAVE_PC_FDC |
25 | bool | 29 | bool |
26 | depends on Q40 || (BROKEN && SUN3X) | 30 | depends on Q40 || (BROKEN && SUN3X) |
diff --git a/arch/m68k/fpsp040/bindec.S b/arch/m68k/fpsp040/bindec.S index 3ba446a99a12..72f1159cb804 100644 --- a/arch/m68k/fpsp040/bindec.S +++ b/arch/m68k/fpsp040/bindec.S | |||
@@ -131,9 +131,8 @@ | |||
131 | | Copyright (C) Motorola, Inc. 1990 | 131 | | Copyright (C) Motorola, Inc. 1990 |
132 | | All Rights Reserved | 132 | | All Rights Reserved |
133 | | | 133 | | |
134 | | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA | 134 | | For details on the license for this file, please see the |
135 | | The copyright notice above does not evidence any | 135 | | file, README, in this same directory. |
136 | | actual or intended publication of such source code. | ||
137 | 136 | ||
138 | |BINDEC idnt 2,1 | Motorola 040 Floating Point Software Package | 137 | |BINDEC idnt 2,1 | Motorola 040 Floating Point Software Package |
139 | 138 | ||
diff --git a/arch/m68k/fpsp040/binstr.S b/arch/m68k/fpsp040/binstr.S index d53555c0a2b6..8a05ba92a8a0 100644 --- a/arch/m68k/fpsp040/binstr.S +++ b/arch/m68k/fpsp040/binstr.S | |||
@@ -60,9 +60,8 @@ | |||
60 | | Copyright (C) Motorola, Inc. 1990 | 60 | | Copyright (C) Motorola, Inc. 1990 |
61 | | All Rights Reserved | 61 | | All Rights Reserved |
62 | | | 62 | | |
63 | | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA | 63 | | For details on the license for this file, please see the |
64 | | The copyright notice above does not evidence any | 64 | | file, README, in this same directory. |
65 | | actual or intended publication of such source code. | ||
66 | 65 | ||
67 | |BINSTR idnt 2,1 | Motorola 040 Floating Point Software Package | 66 | |BINSTR idnt 2,1 | Motorola 040 Floating Point Software Package |
68 | 67 | ||
diff --git a/arch/m68k/fpsp040/bugfix.S b/arch/m68k/fpsp040/bugfix.S index 942c4f6f4fd1..3bb9c84bb058 100644 --- a/arch/m68k/fpsp040/bugfix.S +++ b/arch/m68k/fpsp040/bugfix.S | |||
@@ -152,9 +152,8 @@ | |||
152 | | Copyright (C) Motorola, Inc. 1990 | 152 | | Copyright (C) Motorola, Inc. 1990 |
153 | | All Rights Reserved | 153 | | All Rights Reserved |
154 | | | 154 | | |
155 | | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA | 155 | | For details on the license for this file, please see the |
156 | | The copyright notice above does not evidence any | 156 | | file, README, in this same directory. |
157 | | actual or intended publication of such source code. | ||
158 | 157 | ||
159 | |BUGFIX idnt 2,1 | Motorola 040 Floating Point Software Package | 158 | |BUGFIX idnt 2,1 | Motorola 040 Floating Point Software Package |
160 | 159 | ||
diff --git a/arch/m68k/fpsp040/decbin.S b/arch/m68k/fpsp040/decbin.S index 2160609e328d..16ed796bad87 100644 --- a/arch/m68k/fpsp040/decbin.S +++ b/arch/m68k/fpsp040/decbin.S | |||
@@ -69,9 +69,8 @@ | |||
69 | | Copyright (C) Motorola, Inc. 1990 | 69 | | Copyright (C) Motorola, Inc. 1990 |
70 | | All Rights Reserved | 70 | | All Rights Reserved |
71 | | | 71 | | |
72 | | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA | 72 | | For details on the license for this file, please see the |
73 | | The copyright notice above does not evidence any | 73 | | file, README, in this same directory. |
74 | | actual or intended publication of such source code. | ||
75 | 74 | ||
76 | |DECBIN idnt 2,1 | Motorola 040 Floating Point Software Package | 75 | |DECBIN idnt 2,1 | Motorola 040 Floating Point Software Package |
77 | 76 | ||
diff --git a/arch/m68k/fpsp040/do_func.S b/arch/m68k/fpsp040/do_func.S index 81f6a9856dce..3eff99a80413 100644 --- a/arch/m68k/fpsp040/do_func.S +++ b/arch/m68k/fpsp040/do_func.S | |||
@@ -22,9 +22,8 @@ | |||
22 | | Copyright (C) Motorola, Inc. 1990 | 22 | | Copyright (C) Motorola, Inc. 1990 |
23 | | All Rights Reserved | 23 | | All Rights Reserved |
24 | | | 24 | | |
25 | | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA | 25 | | For details on the license for this file, please see the |
26 | | The copyright notice above does not evidence any | 26 | | file, README, in this same directory. |
27 | | actual or intended publication of such source code. | ||
28 | 27 | ||
29 | DO_FUNC: |idnt 2,1 | Motorola 040 Floating Point Software Package | 28 | DO_FUNC: |idnt 2,1 | Motorola 040 Floating Point Software Package |
30 | 29 | ||
diff --git a/arch/m68k/fpsp040/fpsp.h b/arch/m68k/fpsp040/fpsp.h index 984a4eb8010a..5df4cd772934 100644 --- a/arch/m68k/fpsp040/fpsp.h +++ b/arch/m68k/fpsp040/fpsp.h | |||
@@ -5,9 +5,8 @@ | |||
5 | | Copyright (C) Motorola, Inc. 1990 | 5 | | Copyright (C) Motorola, Inc. 1990 |
6 | | All Rights Reserved | 6 | | All Rights Reserved |
7 | | | 7 | | |
8 | | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA | 8 | | For details on the license for this file, please see the |
9 | | The copyright notice above does not evidence any | 9 | | file, README, in this same directory. |
10 | | actual or intended publication of such source code. | ||
11 | 10 | ||
12 | | fpsp.h --- stack frame offsets during FPSP exception handling | 11 | | fpsp.h --- stack frame offsets during FPSP exception handling |
13 | | | 12 | | |
diff --git a/arch/m68k/fpsp040/gen_except.S b/arch/m68k/fpsp040/gen_except.S index 401d06f39f73..3642cb7e3641 100644 --- a/arch/m68k/fpsp040/gen_except.S +++ b/arch/m68k/fpsp040/gen_except.S | |||
@@ -29,9 +29,8 @@ | |||
29 | | Copyright (C) Motorola, Inc. 1990 | 29 | | Copyright (C) Motorola, Inc. 1990 |
30 | | All Rights Reserved | 30 | | All Rights Reserved |
31 | | | 31 | | |
32 | | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA | 32 | | For details on the license for this file, please see the |
33 | | The copyright notice above does not evidence any | 33 | | file, README, in this same directory. |
34 | | actual or intended publication of such source code. | ||
35 | 34 | ||
36 | GEN_EXCEPT: |idnt 2,1 | Motorola 040 Floating Point Software Package | 35 | GEN_EXCEPT: |idnt 2,1 | Motorola 040 Floating Point Software Package |
37 | 36 | ||
diff --git a/arch/m68k/fpsp040/get_op.S b/arch/m68k/fpsp040/get_op.S index c7c2f3727425..64c36d79ef83 100644 --- a/arch/m68k/fpsp040/get_op.S +++ b/arch/m68k/fpsp040/get_op.S | |||
@@ -54,9 +54,8 @@ | |||
54 | | Copyright (C) Motorola, Inc. 1990 | 54 | | Copyright (C) Motorola, Inc. 1990 |
55 | | All Rights Reserved | 55 | | All Rights Reserved |
56 | | | 56 | | |
57 | | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA | 57 | | For details on the license for this file, please see the |
58 | | The copyright notice above does not evidence any | 58 | | file, README, in this same directory. |
59 | | actual or intended publication of such source code. | ||
60 | 59 | ||
61 | GET_OP: |idnt 2,1 | Motorola 040 Floating Point Software Package | 60 | GET_OP: |idnt 2,1 | Motorola 040 Floating Point Software Package |
62 | 61 | ||
diff --git a/arch/m68k/fpsp040/kernel_ex.S b/arch/m68k/fpsp040/kernel_ex.S index 476b711967ce..45bcf3455d34 100644 --- a/arch/m68k/fpsp040/kernel_ex.S +++ b/arch/m68k/fpsp040/kernel_ex.S | |||
@@ -12,9 +12,8 @@ | |||
12 | | Copyright (C) Motorola, Inc. 1990 | 12 | | Copyright (C) Motorola, Inc. 1990 |
13 | | All Rights Reserved | 13 | | All Rights Reserved |
14 | | | 14 | | |
15 | | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA | 15 | | For details on the license for this file, please see the |
16 | | The copyright notice above does not evidence any | 16 | | file, README, in this same directory. |
17 | | actual or intended publication of such source code. | ||
18 | 17 | ||
19 | KERNEL_EX: |idnt 2,1 | Motorola 040 Floating Point Software Package | 18 | KERNEL_EX: |idnt 2,1 | Motorola 040 Floating Point Software Package |
20 | 19 | ||
diff --git a/arch/m68k/fpsp040/res_func.S b/arch/m68k/fpsp040/res_func.S index 8f6b95217865..d9cdf4383545 100644 --- a/arch/m68k/fpsp040/res_func.S +++ b/arch/m68k/fpsp040/res_func.S | |||
@@ -16,9 +16,8 @@ | |||
16 | | Copyright (C) Motorola, Inc. 1990 | 16 | | Copyright (C) Motorola, Inc. 1990 |
17 | | All Rights Reserved | 17 | | All Rights Reserved |
18 | | | 18 | | |
19 | | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA | 19 | | For details on the license for this file, please see the |
20 | | The copyright notice above does not evidence any | 20 | | file, README, in this same directory. |
21 | | actual or intended publication of such source code. | ||
22 | 21 | ||
23 | RES_FUNC: |idnt 2,1 | Motorola 040 Floating Point Software Package | 22 | RES_FUNC: |idnt 2,1 | Motorola 040 Floating Point Software Package |
24 | 23 | ||
diff --git a/arch/m68k/fpsp040/round.S b/arch/m68k/fpsp040/round.S index 00f98068783f..f84ae0dd4358 100644 --- a/arch/m68k/fpsp040/round.S +++ b/arch/m68k/fpsp040/round.S | |||
@@ -8,9 +8,8 @@ | |||
8 | | Copyright (C) Motorola, Inc. 1990 | 8 | | Copyright (C) Motorola, Inc. 1990 |
9 | | All Rights Reserved | 9 | | All Rights Reserved |
10 | | | 10 | | |
11 | | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA | 11 | | For details on the license for this file, please see the |
12 | | The copyright notice above does not evidence any | 12 | | file, README, in this same directory. |
13 | | actual or intended publication of such source code. | ||
14 | 13 | ||
15 | |ROUND idnt 2,1 | Motorola 040 Floating Point Software Package | 14 | |ROUND idnt 2,1 | Motorola 040 Floating Point Software Package |
16 | 15 | ||
diff --git a/arch/m68k/fpsp040/sacos.S b/arch/m68k/fpsp040/sacos.S index 83b00ab1c48f..513c7cca7318 100644 --- a/arch/m68k/fpsp040/sacos.S +++ b/arch/m68k/fpsp040/sacos.S | |||
@@ -38,9 +38,8 @@ | |||
38 | | Copyright (C) Motorola, Inc. 1990 | 38 | | Copyright (C) Motorola, Inc. 1990 |
39 | | All Rights Reserved | 39 | | All Rights Reserved |
40 | | | 40 | | |
41 | | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA | 41 | | For details on the license for this file, please see the |
42 | | The copyright notice above does not evidence any | 42 | | file, README, in this same directory. |
43 | | actual or intended publication of such source code. | ||
44 | 43 | ||
45 | |SACOS idnt 2,1 | Motorola 040 Floating Point Software Package | 44 | |SACOS idnt 2,1 | Motorola 040 Floating Point Software Package |
46 | 45 | ||
diff --git a/arch/m68k/fpsp040/sasin.S b/arch/m68k/fpsp040/sasin.S index 5647a6043903..2a269a58ceaa 100644 --- a/arch/m68k/fpsp040/sasin.S +++ b/arch/m68k/fpsp040/sasin.S | |||
@@ -38,9 +38,8 @@ | |||
38 | | Copyright (C) Motorola, Inc. 1990 | 38 | | Copyright (C) Motorola, Inc. 1990 |
39 | | All Rights Reserved | 39 | | All Rights Reserved |
40 | | | 40 | | |
41 | | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA | 41 | | For details on the license for this file, please see the |
42 | | The copyright notice above does not evidence any | 42 | | file, README, in this same directory. |
43 | | actual or intended publication of such source code. | ||
44 | 43 | ||
45 | |SASIN idnt 2,1 | Motorola 040 Floating Point Software Package | 44 | |SASIN idnt 2,1 | Motorola 040 Floating Point Software Package |
46 | 45 | ||
diff --git a/arch/m68k/fpsp040/satan.S b/arch/m68k/fpsp040/satan.S index 20dae222d51e..c8a664998f92 100644 --- a/arch/m68k/fpsp040/satan.S +++ b/arch/m68k/fpsp040/satan.S | |||
@@ -43,9 +43,8 @@ | |||
43 | | Copyright (C) Motorola, Inc. 1990 | 43 | | Copyright (C) Motorola, Inc. 1990 |
44 | | All Rights Reserved | 44 | | All Rights Reserved |
45 | | | 45 | | |
46 | | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA | 46 | | For details on the license for this file, please see the |
47 | | The copyright notice above does not evidence any | 47 | | file, README, in this same directory. |
48 | | actual or intended publication of such source code. | ||
49 | 48 | ||
50 | |satan idnt 2,1 | Motorola 040 Floating Point Software Package | 49 | |satan idnt 2,1 | Motorola 040 Floating Point Software Package |
51 | 50 | ||
diff --git a/arch/m68k/fpsp040/satanh.S b/arch/m68k/fpsp040/satanh.S index 20f07810bcda..ba91f77a7571 100644 --- a/arch/m68k/fpsp040/satanh.S +++ b/arch/m68k/fpsp040/satanh.S | |||
@@ -45,9 +45,8 @@ | |||
45 | | Copyright (C) Motorola, Inc. 1990 | 45 | | Copyright (C) Motorola, Inc. 1990 |
46 | | All Rights Reserved | 46 | | All Rights Reserved |
47 | | | 47 | | |
48 | | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA | 48 | | For details on the license for this file, please see the |
49 | | The copyright notice above does not evidence any | 49 | | file, README, in this same directory. |
50 | | actual or intended publication of such source code. | ||
51 | 50 | ||
52 | |satanh idnt 2,1 | Motorola 040 Floating Point Software Package | 51 | |satanh idnt 2,1 | Motorola 040 Floating Point Software Package |
53 | 52 | ||
diff --git a/arch/m68k/fpsp040/scale.S b/arch/m68k/fpsp040/scale.S index 5c9b805265f2..04829dd4f1f4 100644 --- a/arch/m68k/fpsp040/scale.S +++ b/arch/m68k/fpsp040/scale.S | |||
@@ -21,9 +21,8 @@ | |||
21 | | Copyright (C) Motorola, Inc. 1990 | 21 | | Copyright (C) Motorola, Inc. 1990 |
22 | | All Rights Reserved | 22 | | All Rights Reserved |
23 | | | 23 | | |
24 | | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA | 24 | | For details on the license for this file, please see the |
25 | | The copyright notice above does not evidence any | 25 | | file, README, in this same directory. |
26 | | actual or intended publication of such source code. | ||
27 | 26 | ||
28 | |SCALE idnt 2,1 | Motorola 040 Floating Point Software Package | 27 | |SCALE idnt 2,1 | Motorola 040 Floating Point Software Package |
29 | 28 | ||
diff --git a/arch/m68k/fpsp040/scosh.S b/arch/m68k/fpsp040/scosh.S index e81edbb87642..07d3a4d7c86d 100644 --- a/arch/m68k/fpsp040/scosh.S +++ b/arch/m68k/fpsp040/scosh.S | |||
@@ -49,9 +49,8 @@ | |||
49 | | Copyright (C) Motorola, Inc. 1990 | 49 | | Copyright (C) Motorola, Inc. 1990 |
50 | | All Rights Reserved | 50 | | All Rights Reserved |
51 | | | 51 | | |
52 | | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA | 52 | | For details on the license for this file, please see the |
53 | | The copyright notice above does not evidence any | 53 | | file, README, in this same directory. |
54 | | actual or intended publication of such source code. | ||
55 | 54 | ||
56 | |SCOSH idnt 2,1 | Motorola 040 Floating Point Software Package | 55 | |SCOSH idnt 2,1 | Motorola 040 Floating Point Software Package |
57 | 56 | ||
diff --git a/arch/m68k/fpsp040/setox.S b/arch/m68k/fpsp040/setox.S index 0aa75f9bf7d1..145af5447581 100644 --- a/arch/m68k/fpsp040/setox.S +++ b/arch/m68k/fpsp040/setox.S | |||
@@ -331,9 +331,8 @@ | |||
331 | | Copyright (C) Motorola, Inc. 1990 | 331 | | Copyright (C) Motorola, Inc. 1990 |
332 | | All Rights Reserved | 332 | | All Rights Reserved |
333 | | | 333 | | |
334 | | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA | 334 | | For details on the license for this file, please see the |
335 | | The copyright notice above does not evidence any | 335 | | file, README, in this same directory. |
336 | | actual or intended publication of such source code. | ||
337 | 336 | ||
338 | |setox idnt 2,1 | Motorola 040 Floating Point Software Package | 337 | |setox idnt 2,1 | Motorola 040 Floating Point Software Package |
339 | 338 | ||
diff --git a/arch/m68k/fpsp040/sgetem.S b/arch/m68k/fpsp040/sgetem.S index 0fcbd045ba75..d9234f4aed57 100644 --- a/arch/m68k/fpsp040/sgetem.S +++ b/arch/m68k/fpsp040/sgetem.S | |||
@@ -24,9 +24,8 @@ | |||
24 | | Copyright (C) Motorola, Inc. 1990 | 24 | | Copyright (C) Motorola, Inc. 1990 |
25 | | All Rights Reserved | 25 | | All Rights Reserved |
26 | | | 26 | | |
27 | | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA | 27 | | For details on the license for this file, please see the |
28 | | The copyright notice above does not evidence any | 28 | | file, README, in this same directory. |
29 | | actual or intended publication of such source code. | ||
30 | 29 | ||
31 | |SGETEM idnt 2,1 | Motorola 040 Floating Point Software Package | 30 | |SGETEM idnt 2,1 | Motorola 040 Floating Point Software Package |
32 | 31 | ||
diff --git a/arch/m68k/fpsp040/sint.S b/arch/m68k/fpsp040/sint.S index 0f9bd28e55a0..0e92d4e5d231 100644 --- a/arch/m68k/fpsp040/sint.S +++ b/arch/m68k/fpsp040/sint.S | |||
@@ -51,9 +51,8 @@ | |||
51 | | Copyright (C) Motorola, Inc. 1990 | 51 | | Copyright (C) Motorola, Inc. 1990 |
52 | | All Rights Reserved | 52 | | All Rights Reserved |
53 | | | 53 | | |
54 | | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA | 54 | | For details on the license for this file, please see the |
55 | | The copyright notice above does not evidence any | 55 | | file, README, in this same directory. |
56 | | actual or intended publication of such source code. | ||
57 | 56 | ||
58 | |SINT idnt 2,1 | Motorola 040 Floating Point Software Package | 57 | |SINT idnt 2,1 | Motorola 040 Floating Point Software Package |
59 | 58 | ||
diff --git a/arch/m68k/fpsp040/skeleton.S b/arch/m68k/fpsp040/skeleton.S index a1629194e3fd..a8f41615d94a 100644 --- a/arch/m68k/fpsp040/skeleton.S +++ b/arch/m68k/fpsp040/skeleton.S | |||
@@ -30,9 +30,8 @@ | |||
30 | | Copyright (C) Motorola, Inc. 1990 | 30 | | Copyright (C) Motorola, Inc. 1990 |
31 | | All Rights Reserved | 31 | | All Rights Reserved |
32 | | | 32 | | |
33 | | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA | 33 | | For details on the license for this file, please see the |
34 | | The copyright notice above does not evidence any | 34 | | file, README, in this same directory. |
35 | | actual or intended publication of such source code. | ||
36 | 35 | ||
37 | | | 36 | | |
38 | | Modified for Linux-1.3.x by Jes Sorensen (jds@kom.auc.dk) | 37 | | Modified for Linux-1.3.x by Jes Sorensen (jds@kom.auc.dk) |
diff --git a/arch/m68k/fpsp040/slog2.S b/arch/m68k/fpsp040/slog2.S index 517fa4563246..fac2c738382e 100644 --- a/arch/m68k/fpsp040/slog2.S +++ b/arch/m68k/fpsp040/slog2.S | |||
@@ -96,9 +96,8 @@ | |||
96 | | Copyright (C) Motorola, Inc. 1990 | 96 | | Copyright (C) Motorola, Inc. 1990 |
97 | | All Rights Reserved | 97 | | All Rights Reserved |
98 | | | 98 | | |
99 | | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA | 99 | | For details on the license for this file, please see the |
100 | | The copyright notice above does not evidence any | 100 | | file, README, in this same directory. |
101 | | actual or intended publication of such source code. | ||
102 | 101 | ||
103 | |SLOG2 idnt 2,1 | Motorola 040 Floating Point Software Package | 102 | |SLOG2 idnt 2,1 | Motorola 040 Floating Point Software Package |
104 | 103 | ||
diff --git a/arch/m68k/fpsp040/slogn.S b/arch/m68k/fpsp040/slogn.S index 2aaa0725c035..d98eaf641ec4 100644 --- a/arch/m68k/fpsp040/slogn.S +++ b/arch/m68k/fpsp040/slogn.S | |||
@@ -63,9 +63,8 @@ | |||
63 | | Copyright (C) Motorola, Inc. 1990 | 63 | | Copyright (C) Motorola, Inc. 1990 |
64 | | All Rights Reserved | 64 | | All Rights Reserved |
65 | | | 65 | | |
66 | | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA | 66 | | For details on the license for this file, please see the |
67 | | The copyright notice above does not evidence any | 67 | | file, README, in this same directory. |
68 | | actual or intended publication of such source code. | ||
69 | 68 | ||
70 | |slogn idnt 2,1 | Motorola 040 Floating Point Software Package | 69 | |slogn idnt 2,1 | Motorola 040 Floating Point Software Package |
71 | 70 | ||
diff --git a/arch/m68k/fpsp040/smovecr.S b/arch/m68k/fpsp040/smovecr.S index a0127fa55e9c..73c36512081b 100644 --- a/arch/m68k/fpsp040/smovecr.S +++ b/arch/m68k/fpsp040/smovecr.S | |||
@@ -15,9 +15,8 @@ | |||
15 | | Copyright (C) Motorola, Inc. 1990 | 15 | | Copyright (C) Motorola, Inc. 1990 |
16 | | All Rights Reserved | 16 | | All Rights Reserved |
17 | | | 17 | | |
18 | | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA | 18 | | For details on the license for this file, please see the |
19 | | The copyright notice above does not evidence any | 19 | | file, README, in this same directory. |
20 | | actual or intended publication of such source code. | ||
21 | 20 | ||
22 | |SMOVECR idnt 2,1 | Motorola 040 Floating Point Software Package | 21 | |SMOVECR idnt 2,1 | Motorola 040 Floating Point Software Package |
23 | 22 | ||
diff --git a/arch/m68k/fpsp040/srem_mod.S b/arch/m68k/fpsp040/srem_mod.S index 8c8d7f50cc68..a27e70c9a0eb 100644 --- a/arch/m68k/fpsp040/srem_mod.S +++ b/arch/m68k/fpsp040/srem_mod.S | |||
@@ -66,9 +66,8 @@ | |||
66 | | Copyright (C) Motorola, Inc. 1990 | 66 | | Copyright (C) Motorola, Inc. 1990 |
67 | | All Rights Reserved | 67 | | All Rights Reserved |
68 | | | 68 | | |
69 | | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA | 69 | | For details on the license for this file, please see the |
70 | | The copyright notice above does not evidence any | 70 | | file, README, in this same directory. |
71 | | actual or intended publication of such source code. | ||
72 | 71 | ||
73 | SREM_MOD: |idnt 2,1 | Motorola 040 Floating Point Software Package | 72 | SREM_MOD: |idnt 2,1 | Motorola 040 Floating Point Software Package |
74 | 73 | ||
diff --git a/arch/m68k/fpsp040/ssin.S b/arch/m68k/fpsp040/ssin.S index 043c91cdd657..a1ef8e01bf06 100644 --- a/arch/m68k/fpsp040/ssin.S +++ b/arch/m68k/fpsp040/ssin.S | |||
@@ -83,9 +83,8 @@ | |||
83 | | Copyright (C) Motorola, Inc. 1990 | 83 | | Copyright (C) Motorola, Inc. 1990 |
84 | | All Rights Reserved | 84 | | All Rights Reserved |
85 | | | 85 | | |
86 | | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA | 86 | | For details on the license for this file, please see the |
87 | | The copyright notice above does not evidence any | 87 | | file, README, in this same directory. |
88 | | actual or intended publication of such source code. | ||
89 | 88 | ||
90 | |SSIN idnt 2,1 | Motorola 040 Floating Point Software Package | 89 | |SSIN idnt 2,1 | Motorola 040 Floating Point Software Package |
91 | 90 | ||
diff --git a/arch/m68k/fpsp040/ssinh.S b/arch/m68k/fpsp040/ssinh.S index c8b3308bb143..8a560edc7653 100644 --- a/arch/m68k/fpsp040/ssinh.S +++ b/arch/m68k/fpsp040/ssinh.S | |||
@@ -49,9 +49,8 @@ | |||
49 | | Copyright (C) Motorola, Inc. 1990 | 49 | | Copyright (C) Motorola, Inc. 1990 |
50 | | All Rights Reserved | 50 | | All Rights Reserved |
51 | | | 51 | | |
52 | | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA | 52 | | For details on the license for this file, please see the |
53 | | The copyright notice above does not evidence any | 53 | | file, README, in this same directory. |
54 | | actual or intended publication of such source code. | ||
55 | 54 | ||
56 | |SSINH idnt 2,1 | Motorola 040 Floating Point Software Package | 55 | |SSINH idnt 2,1 | Motorola 040 Floating Point Software Package |
57 | 56 | ||
diff --git a/arch/m68k/fpsp040/stan.S b/arch/m68k/fpsp040/stan.S index b5c2a196e617..f8553aaececb 100644 --- a/arch/m68k/fpsp040/stan.S +++ b/arch/m68k/fpsp040/stan.S | |||
@@ -50,9 +50,8 @@ | |||
50 | | Copyright (C) Motorola, Inc. 1990 | 50 | | Copyright (C) Motorola, Inc. 1990 |
51 | | All Rights Reserved | 51 | | All Rights Reserved |
52 | | | 52 | | |
53 | | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA | 53 | | For details on the license for this file, please see the |
54 | | The copyright notice above does not evidence any | 54 | | file, README, in this same directory. |
55 | | actual or intended publication of such source code. | ||
56 | 55 | ||
57 | |STAN idnt 2,1 | Motorola 040 Floating Point Software Package | 56 | |STAN idnt 2,1 | Motorola 040 Floating Point Software Package |
58 | 57 | ||
diff --git a/arch/m68k/fpsp040/stanh.S b/arch/m68k/fpsp040/stanh.S index 33b009802243..7e12e59ee8c7 100644 --- a/arch/m68k/fpsp040/stanh.S +++ b/arch/m68k/fpsp040/stanh.S | |||
@@ -49,9 +49,8 @@ | |||
49 | | Copyright (C) Motorola, Inc. 1990 | 49 | | Copyright (C) Motorola, Inc. 1990 |
50 | | All Rights Reserved | 50 | | All Rights Reserved |
51 | | | 51 | | |
52 | | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA | 52 | | For details on the license for this file, please see the |
53 | | The copyright notice above does not evidence any | 53 | | file, README, in this same directory. |
54 | | actual or intended publication of such source code. | ||
55 | 54 | ||
56 | |STANH idnt 2,1 | Motorola 040 Floating Point Software Package | 55 | |STANH idnt 2,1 | Motorola 040 Floating Point Software Package |
57 | 56 | ||
diff --git a/arch/m68k/fpsp040/sto_res.S b/arch/m68k/fpsp040/sto_res.S index 0cdca3b060ad..484b47d4eaad 100644 --- a/arch/m68k/fpsp040/sto_res.S +++ b/arch/m68k/fpsp040/sto_res.S | |||
@@ -19,9 +19,8 @@ | |||
19 | | Copyright (C) Motorola, Inc. 1990 | 19 | | Copyright (C) Motorola, Inc. 1990 |
20 | | All Rights Reserved | 20 | | All Rights Reserved |
21 | | | 21 | | |
22 | | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA | 22 | | For details on the license for this file, please see the |
23 | | The copyright notice above does not evidence any | 23 | | file, README, in this same directory. |
24 | | actual or intended publication of such source code. | ||
25 | 24 | ||
26 | STO_RES: |idnt 2,1 | Motorola 040 Floating Point Software Package | 25 | STO_RES: |idnt 2,1 | Motorola 040 Floating Point Software Package |
27 | 26 | ||
diff --git a/arch/m68k/fpsp040/stwotox.S b/arch/m68k/fpsp040/stwotox.S index 4e3c1407d3df..0d5e6a1436a6 100644 --- a/arch/m68k/fpsp040/stwotox.S +++ b/arch/m68k/fpsp040/stwotox.S | |||
@@ -76,9 +76,8 @@ | |||
76 | | Copyright (C) Motorola, Inc. 1990 | 76 | | Copyright (C) Motorola, Inc. 1990 |
77 | | All Rights Reserved | 77 | | All Rights Reserved |
78 | | | 78 | | |
79 | | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA | 79 | | For details on the license for this file, please see the |
80 | | The copyright notice above does not evidence any | 80 | | file, README, in this same directory. |
81 | | actual or intended publication of such source code. | ||
82 | 81 | ||
83 | |STWOTOX idnt 2,1 | Motorola 040 Floating Point Software Package | 82 | |STWOTOX idnt 2,1 | Motorola 040 Floating Point Software Package |
84 | 83 | ||
diff --git a/arch/m68k/fpsp040/tbldo.S b/arch/m68k/fpsp040/tbldo.S index fe60cf4d20d7..fd5c37a5a2b9 100644 --- a/arch/m68k/fpsp040/tbldo.S +++ b/arch/m68k/fpsp040/tbldo.S | |||
@@ -17,9 +17,8 @@ | |||
17 | | Copyright (C) Motorola, Inc. 1990 | 17 | | Copyright (C) Motorola, Inc. 1990 |
18 | | All Rights Reserved | 18 | | All Rights Reserved |
19 | | | 19 | | |
20 | | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA | 20 | | For details on the license for this file, please see the |
21 | | The copyright notice above does not evidence any | 21 | | file, README, in this same directory. |
22 | | actual or intended publication of such source code. | ||
23 | 22 | ||
24 | |TBLDO idnt 2,1 | Motorola 040 Floating Point Software Package | 23 | |TBLDO idnt 2,1 | Motorola 040 Floating Point Software Package |
25 | 24 | ||
diff --git a/arch/m68k/fpsp040/util.S b/arch/m68k/fpsp040/util.S index 452f3d65857b..65b26fa88c60 100644 --- a/arch/m68k/fpsp040/util.S +++ b/arch/m68k/fpsp040/util.S | |||
@@ -16,9 +16,8 @@ | |||
16 | | Copyright (C) Motorola, Inc. 1990 | 16 | | Copyright (C) Motorola, Inc. 1990 |
17 | | All Rights Reserved | 17 | | All Rights Reserved |
18 | | | 18 | | |
19 | | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA | 19 | | For details on the license for this file, please see the |
20 | | The copyright notice above does not evidence any | 20 | | file, README, in this same directory. |
21 | | actual or intended publication of such source code. | ||
22 | 21 | ||
23 | |UTIL idnt 2,1 | Motorola 040 Floating Point Software Package | 22 | |UTIL idnt 2,1 | Motorola 040 Floating Point Software Package |
24 | 23 | ||
diff --git a/arch/m68k/fpsp040/x_bsun.S b/arch/m68k/fpsp040/x_bsun.S index 039247b09c8b..d5a576bfac79 100644 --- a/arch/m68k/fpsp040/x_bsun.S +++ b/arch/m68k/fpsp040/x_bsun.S | |||
@@ -13,9 +13,8 @@ | |||
13 | | Copyright (C) Motorola, Inc. 1990 | 13 | | Copyright (C) Motorola, Inc. 1990 |
14 | | All Rights Reserved | 14 | | All Rights Reserved |
15 | | | 15 | | |
16 | | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA | 16 | | For details on the license for this file, please see the |
17 | | The copyright notice above does not evidence any | 17 | | file, README, in this same directory. |
18 | | actual or intended publication of such source code. | ||
19 | 18 | ||
20 | X_BSUN: |idnt 2,1 | Motorola 040 Floating Point Software Package | 19 | X_BSUN: |idnt 2,1 | Motorola 040 Floating Point Software Package |
21 | 20 | ||
diff --git a/arch/m68k/fpsp040/x_fline.S b/arch/m68k/fpsp040/x_fline.S index 3917710b0fde..264e126d1db7 100644 --- a/arch/m68k/fpsp040/x_fline.S +++ b/arch/m68k/fpsp040/x_fline.S | |||
@@ -13,9 +13,8 @@ | |||
13 | | Copyright (C) Motorola, Inc. 1990 | 13 | | Copyright (C) Motorola, Inc. 1990 |
14 | | All Rights Reserved | 14 | | All Rights Reserved |
15 | | | 15 | | |
16 | | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA | 16 | | For details on the license for this file, please see the |
17 | | The copyright notice above does not evidence any | 17 | | file, README, in this same directory. |
18 | | actual or intended publication of such source code. | ||
19 | 18 | ||
20 | X_FLINE: |idnt 2,1 | Motorola 040 Floating Point Software Package | 19 | X_FLINE: |idnt 2,1 | Motorola 040 Floating Point Software Package |
21 | 20 | ||
diff --git a/arch/m68k/fpsp040/x_operr.S b/arch/m68k/fpsp040/x_operr.S index b0f54bcb49a7..e2c371c3a45d 100644 --- a/arch/m68k/fpsp040/x_operr.S +++ b/arch/m68k/fpsp040/x_operr.S | |||
@@ -43,9 +43,8 @@ | |||
43 | | Copyright (C) Motorola, Inc. 1990 | 43 | | Copyright (C) Motorola, Inc. 1990 |
44 | | All Rights Reserved | 44 | | All Rights Reserved |
45 | | | 45 | | |
46 | | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA | 46 | | For details on the license for this file, please see the |
47 | | The copyright notice above does not evidence any | 47 | | file, README, in this same directory. |
48 | | actual or intended publication of such source code. | ||
49 | 48 | ||
50 | X_OPERR: |idnt 2,1 | Motorola 040 Floating Point Software Package | 49 | X_OPERR: |idnt 2,1 | Motorola 040 Floating Point Software Package |
51 | 50 | ||
diff --git a/arch/m68k/fpsp040/x_ovfl.S b/arch/m68k/fpsp040/x_ovfl.S index 22cb8b42c7b6..6fe4989ee31f 100644 --- a/arch/m68k/fpsp040/x_ovfl.S +++ b/arch/m68k/fpsp040/x_ovfl.S | |||
@@ -35,9 +35,8 @@ | |||
35 | | Copyright (C) Motorola, Inc. 1990 | 35 | | Copyright (C) Motorola, Inc. 1990 |
36 | | All Rights Reserved | 36 | | All Rights Reserved |
37 | | | 37 | | |
38 | | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA | 38 | | For details on the license for this file, please see the |
39 | | The copyright notice above does not evidence any | 39 | | file, README, in this same directory. |
40 | | actual or intended publication of such source code. | ||
41 | 40 | ||
42 | X_OVFL: |idnt 2,1 | Motorola 040 Floating Point Software Package | 41 | X_OVFL: |idnt 2,1 | Motorola 040 Floating Point Software Package |
43 | 42 | ||
diff --git a/arch/m68k/fpsp040/x_snan.S b/arch/m68k/fpsp040/x_snan.S index 039af573312e..4ed766416378 100644 --- a/arch/m68k/fpsp040/x_snan.S +++ b/arch/m68k/fpsp040/x_snan.S | |||
@@ -22,9 +22,8 @@ | |||
22 | | Copyright (C) Motorola, Inc. 1990 | 22 | | Copyright (C) Motorola, Inc. 1990 |
23 | | All Rights Reserved | 23 | | All Rights Reserved |
24 | | | 24 | | |
25 | | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA | 25 | | For details on the license for this file, please see the |
26 | | The copyright notice above does not evidence any | 26 | | file, README, in this same directory. |
27 | | actual or intended publication of such source code. | ||
28 | 27 | ||
29 | X_SNAN: |idnt 2,1 | Motorola 040 Floating Point Software Package | 28 | X_SNAN: |idnt 2,1 | Motorola 040 Floating Point Software Package |
30 | 29 | ||
diff --git a/arch/m68k/fpsp040/x_store.S b/arch/m68k/fpsp040/x_store.S index 4282fa67d449..402dc0c0ebc0 100644 --- a/arch/m68k/fpsp040/x_store.S +++ b/arch/m68k/fpsp040/x_store.S | |||
@@ -11,9 +11,8 @@ | |||
11 | | Copyright (C) Motorola, Inc. 1990 | 11 | | Copyright (C) Motorola, Inc. 1990 |
12 | | All Rights Reserved | 12 | | All Rights Reserved |
13 | | | 13 | | |
14 | | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA | 14 | | For details on the license for this file, please see the |
15 | | The copyright notice above does not evidence any | 15 | | file, README, in this same directory. |
16 | | actual or intended publication of such source code. | ||
17 | 16 | ||
18 | X_STORE: |idnt 2,1 | Motorola 040 Floating Point Software Package | 17 | X_STORE: |idnt 2,1 | Motorola 040 Floating Point Software Package |
19 | 18 | ||
diff --git a/arch/m68k/fpsp040/x_unfl.S b/arch/m68k/fpsp040/x_unfl.S index 077fcc230fcc..eb772ff3b812 100644 --- a/arch/m68k/fpsp040/x_unfl.S +++ b/arch/m68k/fpsp040/x_unfl.S | |||
@@ -21,9 +21,8 @@ | |||
21 | | Copyright (C) Motorola, Inc. 1990 | 21 | | Copyright (C) Motorola, Inc. 1990 |
22 | | All Rights Reserved | 22 | | All Rights Reserved |
23 | | | 23 | | |
24 | | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA | 24 | | For details on the license for this file, please see the |
25 | | The copyright notice above does not evidence any | 25 | | file, README, in this same directory. |
26 | | actual or intended publication of such source code. | ||
27 | 26 | ||
28 | X_UNFL: |idnt 2,1 | Motorola 040 Floating Point Software Package | 27 | X_UNFL: |idnt 2,1 | Motorola 040 Floating Point Software Package |
29 | 28 | ||
diff --git a/arch/m68k/fpsp040/x_unimp.S b/arch/m68k/fpsp040/x_unimp.S index 920cb9410e9e..6f382b21228b 100644 --- a/arch/m68k/fpsp040/x_unimp.S +++ b/arch/m68k/fpsp040/x_unimp.S | |||
@@ -22,9 +22,8 @@ | |||
22 | | Copyright (C) Motorola, Inc. 1990 | 22 | | Copyright (C) Motorola, Inc. 1990 |
23 | | All Rights Reserved | 23 | | All Rights Reserved |
24 | | | 24 | | |
25 | | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA | 25 | | For details on the license for this file, please see the |
26 | | The copyright notice above does not evidence any | 26 | | file, README, in this same directory. |
27 | | actual or intended publication of such source code. | ||
28 | 27 | ||
29 | X_UNIMP: |idnt 2,1 | Motorola 040 Floating Point Software Package | 28 | X_UNIMP: |idnt 2,1 | Motorola 040 Floating Point Software Package |
30 | 29 | ||
diff --git a/arch/m68k/fpsp040/x_unsupp.S b/arch/m68k/fpsp040/x_unsupp.S index 4ec57285b683..d7cf46208c62 100644 --- a/arch/m68k/fpsp040/x_unsupp.S +++ b/arch/m68k/fpsp040/x_unsupp.S | |||
@@ -23,9 +23,8 @@ | |||
23 | | Copyright (C) Motorola, Inc. 1990 | 23 | | Copyright (C) Motorola, Inc. 1990 |
24 | | All Rights Reserved | 24 | | All Rights Reserved |
25 | | | 25 | | |
26 | | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA | 26 | | For details on the license for this file, please see the |
27 | | The copyright notice above does not evidence any | 27 | | file, README, in this same directory. |
28 | | actual or intended publication of such source code. | ||
29 | 28 | ||
30 | X_UNSUPP: |idnt 2,1 | Motorola 040 Floating Point Software Package | 29 | X_UNSUPP: |idnt 2,1 | Motorola 040 Floating Point Software Package |
31 | 30 | ||
diff --git a/arch/m68k/kernel/process.c b/arch/m68k/kernel/process.c index 3f9cb55d0356..2d8ad0727b6b 100644 --- a/arch/m68k/kernel/process.c +++ b/arch/m68k/kernel/process.c | |||
@@ -129,6 +129,9 @@ void machine_power_off(void) | |||
129 | for (;;); | 129 | for (;;); |
130 | } | 130 | } |
131 | 131 | ||
132 | void (*pm_power_off)(void) = machine_power_off; | ||
133 | EXPORT_SYMBOL(pm_power_off); | ||
134 | |||
132 | void show_regs(struct pt_regs * regs) | 135 | void show_regs(struct pt_regs * regs) |
133 | { | 136 | { |
134 | printk("\n"); | 137 | printk("\n"); |
diff --git a/arch/m68knommu/Kconfig b/arch/m68knommu/Kconfig index e2a6e8648960..e50858dbc237 100644 --- a/arch/m68knommu/Kconfig +++ b/arch/m68knommu/Kconfig | |||
@@ -29,6 +29,10 @@ config GENERIC_CALIBRATE_DELAY | |||
29 | bool | 29 | bool |
30 | default y | 30 | default y |
31 | 31 | ||
32 | config TIME_LOW_RES | ||
33 | bool | ||
34 | default y | ||
35 | |||
32 | source "init/Kconfig" | 36 | source "init/Kconfig" |
33 | 37 | ||
34 | menu "Processor type and features" | 38 | menu "Processor type and features" |
diff --git a/arch/m68knommu/kernel/process.c b/arch/m68knommu/kernel/process.c index 99bf43824795..63c117dae0c3 100644 --- a/arch/m68knommu/kernel/process.c +++ b/arch/m68knommu/kernel/process.c | |||
@@ -39,6 +39,14 @@ | |||
39 | 39 | ||
40 | asmlinkage void ret_from_fork(void); | 40 | asmlinkage void ret_from_fork(void); |
41 | 41 | ||
42 | /* | ||
43 | * The following aren't currently used. | ||
44 | */ | ||
45 | void (*pm_idle)(void); | ||
46 | EXPORT_SYMBOL(pm_idle); | ||
47 | |||
48 | void (*pm_power_off)(void); | ||
49 | EXPORT_SYMBOL(pm_power_off); | ||
42 | 50 | ||
43 | /* | 51 | /* |
44 | * The idle loop on an m68knommu.. | 52 | * The idle loop on an m68knommu.. |
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index c3e852e9953e..3a0f89d2c8dc 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig | |||
@@ -595,6 +595,7 @@ config SGI_IP32 | |||
595 | select SYS_HAS_CPU_R5000 | 595 | select SYS_HAS_CPU_R5000 |
596 | select SYS_HAS_CPU_R10000 if BROKEN | 596 | select SYS_HAS_CPU_R10000 if BROKEN |
597 | select SYS_HAS_CPU_RM7000 | 597 | select SYS_HAS_CPU_RM7000 |
598 | select SYS_HAS_CPU_NEVADA | ||
598 | select SYS_SUPPORTS_64BIT_KERNEL | 599 | select SYS_SUPPORTS_64BIT_KERNEL |
599 | select SYS_SUPPORTS_BIG_ENDIAN | 600 | select SYS_SUPPORTS_BIG_ENDIAN |
600 | help | 601 | help |
@@ -1052,6 +1053,7 @@ config CPU_MIPS32_R1 | |||
1052 | depends on SYS_HAS_CPU_MIPS32_R1 | 1053 | depends on SYS_HAS_CPU_MIPS32_R1 |
1053 | select CPU_HAS_PREFETCH | 1054 | select CPU_HAS_PREFETCH |
1054 | select CPU_SUPPORTS_32BIT_KERNEL | 1055 | select CPU_SUPPORTS_32BIT_KERNEL |
1056 | select CPU_SUPPORTS_HIGHMEM | ||
1055 | help | 1057 | help |
1056 | Choose this option to build a kernel for release 1 or later of the | 1058 | Choose this option to build a kernel for release 1 or later of the |
1057 | MIPS32 architecture. Most modern embedded systems with a 32-bit | 1059 | MIPS32 architecture. Most modern embedded systems with a 32-bit |
@@ -1068,6 +1070,7 @@ config CPU_MIPS32_R2 | |||
1068 | depends on SYS_HAS_CPU_MIPS32_R2 | 1070 | depends on SYS_HAS_CPU_MIPS32_R2 |
1069 | select CPU_HAS_PREFETCH | 1071 | select CPU_HAS_PREFETCH |
1070 | select CPU_SUPPORTS_32BIT_KERNEL | 1072 | select CPU_SUPPORTS_32BIT_KERNEL |
1073 | select CPU_SUPPORTS_HIGHMEM | ||
1071 | help | 1074 | help |
1072 | Choose this option to build a kernel for release 2 or later of the | 1075 | Choose this option to build a kernel for release 2 or later of the |
1073 | MIPS32 architecture. Most modern embedded systems with a 32-bit | 1076 | MIPS32 architecture. Most modern embedded systems with a 32-bit |
@@ -1081,6 +1084,7 @@ config CPU_MIPS64_R1 | |||
1081 | select CPU_HAS_PREFETCH | 1084 | select CPU_HAS_PREFETCH |
1082 | select CPU_SUPPORTS_32BIT_KERNEL | 1085 | select CPU_SUPPORTS_32BIT_KERNEL |
1083 | select CPU_SUPPORTS_64BIT_KERNEL | 1086 | select CPU_SUPPORTS_64BIT_KERNEL |
1087 | select CPU_SUPPORTS_HIGHMEM | ||
1084 | help | 1088 | help |
1085 | Choose this option to build a kernel for release 1 or later of the | 1089 | Choose this option to build a kernel for release 1 or later of the |
1086 | MIPS64 architecture. Many modern embedded systems with a 64-bit | 1090 | MIPS64 architecture. Many modern embedded systems with a 64-bit |
@@ -1098,6 +1102,7 @@ config CPU_MIPS64_R2 | |||
1098 | select CPU_HAS_PREFETCH | 1102 | select CPU_HAS_PREFETCH |
1099 | select CPU_SUPPORTS_32BIT_KERNEL | 1103 | select CPU_SUPPORTS_32BIT_KERNEL |
1100 | select CPU_SUPPORTS_64BIT_KERNEL | 1104 | select CPU_SUPPORTS_64BIT_KERNEL |
1105 | select CPU_SUPPORTS_HIGHMEM | ||
1101 | help | 1106 | help |
1102 | Choose this option to build a kernel for release 2 or later of the | 1107 | Choose this option to build a kernel for release 2 or later of the |
1103 | MIPS64 architecture. Many modern embedded systems with a 64-bit | 1108 | MIPS64 architecture. Many modern embedded systems with a 64-bit |
diff --git a/arch/mips/Makefile b/arch/mips/Makefile index 2a9f2ef27b29..3d8dac681c63 100644 --- a/arch/mips/Makefile +++ b/arch/mips/Makefile | |||
@@ -53,14 +53,17 @@ CROSS_COMPILE := $(tool-prefix) | |||
53 | endif | 53 | endif |
54 | 54 | ||
55 | CHECKFLAGS-y += -D__linux__ -D__mips__ \ | 55 | CHECKFLAGS-y += -D__linux__ -D__mips__ \ |
56 | -D_MIPS_SZINT=32 \ | ||
56 | -D_ABIO32=1 \ | 57 | -D_ABIO32=1 \ |
57 | -D_ABIN32=2 \ | 58 | -D_ABIN32=2 \ |
58 | -D_ABI64=3 | 59 | -D_ABI64=3 |
59 | CHECKFLAGS-$(CONFIG_32BIT) += -D_MIPS_SIM=_ABIO32 \ | 60 | CHECKFLAGS-$(CONFIG_32BIT) += -D_MIPS_SIM=_ABIO32 \ |
60 | -D_MIPS_SZLONG=32 \ | 61 | -D_MIPS_SZLONG=32 \ |
62 | -D_MIPS_SZPTR=32 \ | ||
61 | -D__PTRDIFF_TYPE__=int | 63 | -D__PTRDIFF_TYPE__=int |
62 | CHECKFLAGS-$(CONFIG_64BIT) += -m64 -D_MIPS_SIM=_ABI64 \ | 64 | CHECKFLAGS-$(CONFIG_64BIT) += -m64 -D_MIPS_SIM=_ABI64 \ |
63 | -D_MIPS_SZLONG=64 \ | 65 | -D_MIPS_SZLONG=64 \ |
66 | -D_MIPS_SZPTR=64 \ | ||
64 | -D__PTRDIFF_TYPE__="long int" | 67 | -D__PTRDIFF_TYPE__="long int" |
65 | CHECKFLAGS-$(CONFIG_CPU_BIG_ENDIAN) += -D__MIPSEB__ | 68 | CHECKFLAGS-$(CONFIG_CPU_BIG_ENDIAN) += -D__MIPSEB__ |
66 | CHECKFLAGS-$(CONFIG_CPU_LITTLE_ENDIAN) += -D__MIPSEL__ | 69 | CHECKFLAGS-$(CONFIG_CPU_LITTLE_ENDIAN) += -D__MIPSEL__ |
@@ -91,8 +94,8 @@ endif | |||
91 | # machines may also. Since BFD is incredibly buggy with respect to | 94 | # machines may also. Since BFD is incredibly buggy with respect to |
92 | # crossformat linking we rely on the elf2ecoff tool for format conversion. | 95 | # crossformat linking we rely on the elf2ecoff tool for format conversion. |
93 | # | 96 | # |
94 | cflags-y += -I $(TOPDIR)/include/asm/gcc | ||
95 | cflags-y += -G 0 -mno-abicalls -fno-pic -pipe | 97 | cflags-y += -G 0 -mno-abicalls -fno-pic -pipe |
98 | cflags-y += -msoft-float | ||
96 | LDFLAGS_vmlinux += -G 0 -static -n -nostdlib | 99 | LDFLAGS_vmlinux += -G 0 -static -n -nostdlib |
97 | MODFLAGS += -mlong-calls | 100 | MODFLAGS += -mlong-calls |
98 | 101 | ||
@@ -105,7 +108,8 @@ MODFLAGS += -mlong-calls | |||
105 | cflags-$(CONFIG_CPU_BIG_ENDIAN) += $(shell $(CC) -dumpmachine |grep -q 'mips.*el-.*' && echo -EB) | 108 | cflags-$(CONFIG_CPU_BIG_ENDIAN) += $(shell $(CC) -dumpmachine |grep -q 'mips.*el-.*' && echo -EB) |
106 | cflags-$(CONFIG_CPU_LITTLE_ENDIAN) += $(shell $(CC) -dumpmachine |grep -q 'mips.*el-.*' || echo -EL) | 109 | cflags-$(CONFIG_CPU_LITTLE_ENDIAN) += $(shell $(CC) -dumpmachine |grep -q 'mips.*el-.*' || echo -EL) |
107 | 110 | ||
108 | cflags-$(CONFIG_SB1XXX_CORELIS) += -mno-sched-prolog -fno-omit-frame-pointer | 111 | cflags-$(CONFIG_SB1XXX_CORELIS) += $(call cc-option,-mno-sched-prolog) \ |
112 | -fno-omit-frame-pointer | ||
109 | 113 | ||
110 | # | 114 | # |
111 | # Use: $(call set_gccflags,<cpu0>,<isa0>,<cpu1>,<isa1>,<isa2>) | 115 | # Use: $(call set_gccflags,<cpu0>,<isa0>,<cpu1>,<isa1>,<isa2>) |
@@ -166,79 +170,97 @@ echo $$gcc_abi $$gcc_opt$$gcc_cpu $$gcc_isa $$gas_abi $$gas_opt$$gas_cpu $$gas_i | |||
166 | # | 170 | # |
167 | cflags-$(CONFIG_CPU_R3000) += \ | 171 | cflags-$(CONFIG_CPU_R3000) += \ |
168 | $(call set_gccflags,r3000,mips1,r3000,mips1,mips1) | 172 | $(call set_gccflags,r3000,mips1,r3000,mips1,mips1) |
173 | CHECKFLAGS-$(CONFIG_CPU_R3000) += -D_MIPS_ISA=_MIPS_ISA_MIPS1 | ||
169 | 174 | ||
170 | cflags-$(CONFIG_CPU_TX39XX) += \ | 175 | cflags-$(CONFIG_CPU_TX39XX) += \ |
171 | $(call set_gccflags,r3900,mips1,r3000,mips1,mips1) | 176 | $(call set_gccflags,r3900,mips1,r3000,mips1,mips1) |
177 | CHECKFLAGS-$(CONFIG_CPU_TX39XX) += -D_MIPS_ISA=_MIPS_ISA_MIPS1 | ||
172 | 178 | ||
173 | cflags-$(CONFIG_CPU_R6000) += \ | 179 | cflags-$(CONFIG_CPU_R6000) += \ |
174 | $(call set_gccflags,r6000,mips2,r6000,mips2,mips2) \ | 180 | $(call set_gccflags,r6000,mips2,r6000,mips2,mips2) \ |
175 | -Wa,--trap | 181 | -Wa,--trap |
182 | CHECKFLAGS-$(CONFIG_CPU_R6000) += -D_MIPS_ISA=_MIPS_ISA_MIPS2 | ||
176 | 183 | ||
177 | cflags-$(CONFIG_CPU_R4300) += \ | 184 | cflags-$(CONFIG_CPU_R4300) += \ |
178 | $(call set_gccflags,r4300,mips3,r4300,mips3,mips2) \ | 185 | $(call set_gccflags,r4300,mips3,r4300,mips3,mips2) \ |
179 | -Wa,--trap | 186 | -Wa,--trap |
187 | CHECKFLAGS-$(CONFIG_CPU_R4300) += -D_MIPS_ISA=_MIPS_ISA_MIPS3 | ||
180 | 188 | ||
181 | cflags-$(CONFIG_CPU_VR41XX) += \ | 189 | cflags-$(CONFIG_CPU_VR41XX) += \ |
182 | $(call set_gccflags,r4100,mips3,r4600,mips3,mips2) \ | 190 | $(call set_gccflags,r4100,mips3,r4600,mips3,mips2) \ |
183 | -Wa,--trap | 191 | -Wa,--trap |
192 | CHECKFLAGS-$(CONFIG_CPU_VR41XX) += -D_MIPS_ISA=_MIPS_ISA_MIPS3 | ||
184 | 193 | ||
185 | cflags-$(CONFIG_CPU_R4X00) += \ | 194 | cflags-$(CONFIG_CPU_R4X00) += \ |
186 | $(call set_gccflags,r4600,mips3,r4600,mips3,mips2) \ | 195 | $(call set_gccflags,r4600,mips3,r4600,mips3,mips2) \ |
187 | -Wa,--trap | 196 | -Wa,--trap |
197 | CHECKFLAGS-$(CONFIG_CPU_R4X00) += -D_MIPS_ISA=_MIPS_ISA_MIPS3 | ||
188 | 198 | ||
189 | cflags-$(CONFIG_CPU_TX49XX) += \ | 199 | cflags-$(CONFIG_CPU_TX49XX) += \ |
190 | $(call set_gccflags,r4600,mips3,r4600,mips3,mips2) \ | 200 | $(call set_gccflags,r4600,mips3,r4600,mips3,mips2) \ |
191 | -Wa,--trap | 201 | -Wa,--trap |
202 | CHECKFLAGS-$(CONFIG_CPU_TX49XX) += -D_MIPS_ISA=_MIPS_ISA_MIPS3 | ||
192 | 203 | ||
193 | cflags-$(CONFIG_CPU_MIPS32_R1) += \ | 204 | cflags-$(CONFIG_CPU_MIPS32_R1) += \ |
194 | $(call set_gccflags,mips32,mips32,r4600,mips3,mips2) \ | 205 | $(call set_gccflags,mips32,mips32,r4600,mips3,mips2) \ |
195 | -Wa,--trap | 206 | -Wa,--trap |
207 | CHECKFLAGS-$(CONFIG_CPU_MIPS32_R1) += -D_MIPS_ISA=_MIPS_ISA_MIPS32 | ||
196 | 208 | ||
197 | cflags-$(CONFIG_CPU_MIPS32_R2) += \ | 209 | cflags-$(CONFIG_CPU_MIPS32_R2) += \ |
198 | $(call set_gccflags,mips32r2,mips32r2,r4600,mips3,mips2) \ | 210 | $(call set_gccflags,mips32r2,mips32r2,r4600,mips3,mips2) \ |
199 | -Wa,--trap | 211 | -Wa,--trap |
212 | CHECKFLAGS-$(CONFIG_CPU_MIPS32_R2) += -D_MIPS_ISA=_MIPS_ISA_MIPS32 | ||
200 | 213 | ||
201 | cflags-$(CONFIG_CPU_MIPS64_R1) += \ | 214 | cflags-$(CONFIG_CPU_MIPS64_R1) += \ |
202 | $(call set_gccflags,mips64,mips64,r4600,mips3,mips2) \ | 215 | $(call set_gccflags,mips64,mips64,r4600,mips3,mips2) \ |
203 | -Wa,--trap | 216 | -Wa,--trap |
217 | CHECKFLAGS-$(CONFIG_CPU_MIPS64_R1) += -D_MIPS_ISA=_MIPS_ISA_MIPS64 | ||
204 | 218 | ||
205 | cflags-$(CONFIG_CPU_MIPS64_R2) += \ | 219 | cflags-$(CONFIG_CPU_MIPS64_R2) += \ |
206 | $(call set_gccflags,mips64r2,mips64r2,r4600,mips3,mips2) \ | 220 | $(call set_gccflags,mips64r2,mips64r2,r4600,mips3,mips2) \ |
207 | -Wa,--trap | 221 | -Wa,--trap |
222 | CHECKFLAGS-$(CONFIG_CPU_MIPS64_R2) += -D_MIPS_ISA=_MIPS_ISA_MIPS64 | ||
208 | 223 | ||
209 | cflags-$(CONFIG_CPU_R5000) += \ | 224 | cflags-$(CONFIG_CPU_R5000) += \ |
210 | $(call set_gccflags,r5000,mips4,r5000,mips4,mips2) \ | 225 | $(call set_gccflags,r5000,mips4,r5000,mips4,mips2) \ |
211 | -Wa,--trap | 226 | -Wa,--trap |
227 | CHECKFLAGS-$(CONFIG_CPU_R5000) += -D_MIPS_ISA=_MIPS_ISA_MIPS4 | ||
212 | 228 | ||
213 | cflags-$(CONFIG_CPU_R5432) += \ | 229 | cflags-$(CONFIG_CPU_R5432) += \ |
214 | $(call set_gccflags,r5400,mips4,r5000,mips4,mips2) \ | 230 | $(call set_gccflags,r5400,mips4,r5000,mips4,mips2) \ |
215 | -Wa,--trap | 231 | -Wa,--trap |
232 | CHECKFLAGS-$(CONFIG_CPU_R5432) += -D_MIPS_ISA=_MIPS_ISA_MIPS4 | ||
216 | 233 | ||
217 | cflags-$(CONFIG_CPU_NEVADA) += \ | 234 | cflags-$(CONFIG_CPU_NEVADA) += \ |
218 | $(call set_gccflags,rm5200,mips4,r5000,mips4,mips2) \ | 235 | $(call set_gccflags,rm5200,mips4,r5000,mips4,mips2) \ |
219 | -Wa,--trap | 236 | -Wa,--trap |
220 | # $(call cc-option,-mmad) | 237 | CHECKFLAGS-$(CONFIG_CPU_NEVADA) += -D_MIPS_ISA=_MIPS_ISA_MIPS4 |
221 | 238 | ||
222 | cflags-$(CONFIG_CPU_RM7000) += \ | 239 | cflags-$(CONFIG_CPU_RM7000) += \ |
223 | $(call set_gccflags,rm7000,mips4,r5000,mips4,mips2) \ | 240 | $(call set_gccflags,rm7000,mips4,r5000,mips4,mips2) \ |
224 | -Wa,--trap | 241 | -Wa,--trap |
242 | CHECKFLAGS-$(CONFIG_CPU_RM7000) += -D_MIPS_ISA=_MIPS_ISA_MIPS4 | ||
225 | 243 | ||
226 | cflags-$(CONFIG_CPU_RM9000) += \ | 244 | cflags-$(CONFIG_CPU_RM9000) += \ |
227 | $(call set_gccflags,rm9000,mips4,r5000,mips4,mips2) \ | 245 | $(call set_gccflags,rm9000,mips4,r5000,mips4,mips2) \ |
228 | -Wa,--trap | 246 | -Wa,--trap |
247 | CHECKFLAGS-$(CONFIG_CPU_RM9000) += -D_MIPS_ISA=_MIPS_ISA_MIPS4 | ||
229 | 248 | ||
230 | 249 | ||
231 | cflags-$(CONFIG_CPU_SB1) += \ | 250 | cflags-$(CONFIG_CPU_SB1) += \ |
232 | $(call set_gccflags,sb1,mips64,r5000,mips4,mips2) \ | 251 | $(call set_gccflags,sb1,mips64,r5000,mips4,mips2) \ |
233 | -Wa,--trap | 252 | -Wa,--trap |
253 | CHECKFLAGS-$(CONFIG_CPU_SB1) += -D_MIPS_ISA=_MIPS_ISA_MIPS64 | ||
234 | 254 | ||
235 | cflags-$(CONFIG_CPU_R8000) += \ | 255 | cflags-$(CONFIG_CPU_R8000) += \ |
236 | $(call set_gccflags,r8000,mips4,r8000,mips4,mips2) \ | 256 | $(call set_gccflags,r8000,mips4,r8000,mips4,mips2) \ |
237 | -Wa,--trap | 257 | -Wa,--trap |
258 | CHECKFLAGS-$(CONFIG_CPU_R8000) += -D_MIPS_ISA=_MIPS_ISA_MIPS4 | ||
238 | 259 | ||
239 | cflags-$(CONFIG_CPU_R10000) += \ | 260 | cflags-$(CONFIG_CPU_R10000) += \ |
240 | $(call set_gccflags,r10000,mips4,r8000,mips4,mips2) \ | 261 | $(call set_gccflags,r10000,mips4,r8000,mips4,mips2) \ |
241 | -Wa,--trap | 262 | -Wa,--trap |
263 | CHECKFLAGS-$(CONFIG_CPU_R10000) += -D_MIPS_ISA=_MIPS_ISA_MIPS4 | ||
242 | 264 | ||
243 | ifdef CONFIG_CPU_SB1 | 265 | ifdef CONFIG_CPU_SB1 |
244 | ifdef CONFIG_SB1_PASS_1_WORKAROUNDS | 266 | ifdef CONFIG_SB1_PASS_1_WORKAROUNDS |
@@ -369,7 +391,7 @@ load-$(CONFIG_MIPS_XXS1500) += 0xffffffff80100000 | |||
369 | # Cobalt Server | 391 | # Cobalt Server |
370 | # | 392 | # |
371 | core-$(CONFIG_MIPS_COBALT) += arch/mips/cobalt/ | 393 | core-$(CONFIG_MIPS_COBALT) += arch/mips/cobalt/ |
372 | cflags-$(CONFIG_MIPS_COBALT) += -Iinclude/asm-mips/cobalt | 394 | cflags-$(CONFIG_MIPS_COBALT) += -Iinclude/asm-mips/mach-cobalt |
373 | load-$(CONFIG_MIPS_COBALT) += 0xffffffff80080000 | 395 | load-$(CONFIG_MIPS_COBALT) += 0xffffffff80080000 |
374 | 396 | ||
375 | # | 397 | # |
diff --git a/arch/mips/arc/arc_con.c b/arch/mips/arc/arc_con.c index 51785a6a7328..bc32fe64f42a 100644 --- a/arch/mips/arc/arc_con.c +++ b/arch/mips/arc/arc_con.c | |||
@@ -24,7 +24,7 @@ static void prom_console_write(struct console *co, const char *s, | |||
24 | } | 24 | } |
25 | } | 25 | } |
26 | 26 | ||
27 | static int __init prom_console_setup(struct console *co, char *options) | 27 | static int prom_console_setup(struct console *co, char *options) |
28 | { | 28 | { |
29 | return !(prom_flags & PROM_FLAG_USE_AS_CONSOLE); | 29 | return !(prom_flags & PROM_FLAG_USE_AS_CONSOLE); |
30 | } | 30 | } |
diff --git a/arch/mips/arc/misc.c b/arch/mips/arc/misc.c index 84867de22028..b2e10b9e9452 100644 --- a/arch/mips/arc/misc.c +++ b/arch/mips/arc/misc.c | |||
@@ -9,7 +9,6 @@ | |||
9 | * Copyright (C) 1999 Ralf Baechle (ralf@gnu.org) | 9 | * Copyright (C) 1999 Ralf Baechle (ralf@gnu.org) |
10 | * Copyright (C) 1999 Silicon Graphics, Inc. | 10 | * Copyright (C) 1999 Silicon Graphics, Inc. |
11 | */ | 11 | */ |
12 | #include <linux/config.h> | ||
13 | #include <linux/init.h> | 12 | #include <linux/init.h> |
14 | #include <linux/kernel.h> | 13 | #include <linux/kernel.h> |
15 | 14 | ||
@@ -20,17 +19,11 @@ | |||
20 | #include <asm/bootinfo.h> | 19 | #include <asm/bootinfo.h> |
21 | #include <asm/system.h> | 20 | #include <asm/system.h> |
22 | 21 | ||
23 | extern void *sgiwd93_host; | ||
24 | extern void reset_wd33c93(void *instance); | ||
25 | |||
26 | VOID | 22 | VOID |
27 | ArcHalt(VOID) | 23 | ArcHalt(VOID) |
28 | { | 24 | { |
29 | bc_disable(); | 25 | bc_disable(); |
30 | local_irq_disable(); | 26 | local_irq_disable(); |
31 | #ifdef CONFIG_SCSI_SGIWD93 | ||
32 | reset_wd33c93(sgiwd93_host); | ||
33 | #endif | ||
34 | ARC_CALL0(halt); | 27 | ARC_CALL0(halt); |
35 | never: goto never; | 28 | never: goto never; |
36 | } | 29 | } |
@@ -40,9 +33,6 @@ ArcPowerDown(VOID) | |||
40 | { | 33 | { |
41 | bc_disable(); | 34 | bc_disable(); |
42 | local_irq_disable(); | 35 | local_irq_disable(); |
43 | #ifdef CONFIG_SCSI_SGIWD93 | ||
44 | reset_wd33c93(sgiwd93_host); | ||
45 | #endif | ||
46 | ARC_CALL0(pdown); | 36 | ARC_CALL0(pdown); |
47 | never: goto never; | 37 | never: goto never; |
48 | } | 38 | } |
@@ -53,9 +43,6 @@ ArcRestart(VOID) | |||
53 | { | 43 | { |
54 | bc_disable(); | 44 | bc_disable(); |
55 | local_irq_disable(); | 45 | local_irq_disable(); |
56 | #ifdef CONFIG_SCSI_SGIWD93 | ||
57 | reset_wd33c93(sgiwd93_host); | ||
58 | #endif | ||
59 | ARC_CALL0(restart); | 46 | ARC_CALL0(restart); |
60 | never: goto never; | 47 | never: goto never; |
61 | } | 48 | } |
@@ -65,9 +52,6 @@ ArcReboot(VOID) | |||
65 | { | 52 | { |
66 | bc_disable(); | 53 | bc_disable(); |
67 | local_irq_disable(); | 54 | local_irq_disable(); |
68 | #ifdef CONFIG_SCSI_SGIWD93 | ||
69 | reset_wd33c93(sgiwd93_host); | ||
70 | #endif | ||
71 | ARC_CALL0(reboot); | 55 | ARC_CALL0(reboot); |
72 | never: goto never; | 56 | never: goto never; |
73 | } | 57 | } |
@@ -77,9 +61,6 @@ ArcEnterInteractiveMode(VOID) | |||
77 | { | 61 | { |
78 | bc_disable(); | 62 | bc_disable(); |
79 | local_irq_disable(); | 63 | local_irq_disable(); |
80 | #ifdef CONFIG_SCSI_SGIWD93 | ||
81 | reset_wd33c93(sgiwd93_host); | ||
82 | #endif | ||
83 | ARC_CALL0(imode); | 64 | ARC_CALL0(imode); |
84 | never: goto never; | 65 | never: goto never; |
85 | } | 66 | } |
diff --git a/arch/mips/au1000/common/reset.c b/arch/mips/au1000/common/reset.c index 65b84db800e4..c93af224c1b3 100644 --- a/arch/mips/au1000/common/reset.c +++ b/arch/mips/au1000/common/reset.c | |||
@@ -151,7 +151,7 @@ void au1000_restart(char *command) | |||
151 | } | 151 | } |
152 | 152 | ||
153 | set_c0_status(ST0_BEV | ST0_ERL); | 153 | set_c0_status(ST0_BEV | ST0_ERL); |
154 | set_c0_config(CONF_CM_UNCACHED); | 154 | change_c0_config(CONF_CM_CMASK, CONF_CM_UNCACHED); |
155 | flush_cache_all(); | 155 | flush_cache_all(); |
156 | write_c0_wired(0); | 156 | write_c0_wired(0); |
157 | 157 | ||
@@ -164,17 +164,20 @@ void au1000_restart(char *command) | |||
164 | 164 | ||
165 | void au1000_halt(void) | 165 | void au1000_halt(void) |
166 | { | 166 | { |
167 | #if defined(CONFIG_MIPS_PB1550) | 167 | #if defined(CONFIG_MIPS_PB1550) || defined(CONFIG_MIPS_DB1550) |
168 | /* power off system */ | 168 | /* power off system */ |
169 | printk("\n** Powering off Pb1550\n"); | 169 | printk("\n** Powering off...\n"); |
170 | au_writew(au_readw(0xAF00001C) | (3<<14), 0xAF00001C); | 170 | au_writew(au_readw(0xAF00001C) | (3<<14), 0xAF00001C); |
171 | au_sync(); | 171 | au_sync(); |
172 | while(1); /* should not get here */ | 172 | while(1); /* should not get here */ |
173 | #endif | 173 | #else |
174 | printk(KERN_NOTICE "\n** You can safely turn off the power\n"); | 174 | printk(KERN_NOTICE "\n** You can safely turn off the power\n"); |
175 | #ifdef CONFIG_MIPS_MIRAGE | 175 | #ifdef CONFIG_MIPS_MIRAGE |
176 | au_writel((1 << 26) | (1 << 10), GPIO2_OUTPUT); | 176 | au_writel((1 << 26) | (1 << 10), GPIO2_OUTPUT); |
177 | #endif | 177 | #endif |
178 | #ifdef CONFIG_MIPS_DB1200 | ||
179 | au_writew(au_readw(0xB980001C) | (1<<14), 0xB980001C); | ||
180 | #endif | ||
178 | #ifdef CONFIG_PM | 181 | #ifdef CONFIG_PM |
179 | au_sleep(); | 182 | au_sleep(); |
180 | 183 | ||
@@ -187,6 +190,7 @@ void au1000_halt(void) | |||
187 | "wait\n\t" | 190 | "wait\n\t" |
188 | ".set\tmips0"); | 191 | ".set\tmips0"); |
189 | #endif | 192 | #endif |
193 | #endif /* defined(CONFIG_MIPS_PB1550) || defined(CONFIG_MIPS_DB1550) */ | ||
190 | } | 194 | } |
191 | 195 | ||
192 | void au1000_power_off(void) | 196 | void au1000_power_off(void) |
diff --git a/arch/mips/au1000/common/setup.c b/arch/mips/au1000/common/setup.c index 08c8c855cc9c..eb155c071aa6 100644 --- a/arch/mips/au1000/common/setup.c +++ b/arch/mips/au1000/common/setup.c | |||
@@ -33,6 +33,7 @@ | |||
33 | #include <linux/delay.h> | 33 | #include <linux/delay.h> |
34 | #include <linux/interrupt.h> | 34 | #include <linux/interrupt.h> |
35 | #include <linux/module.h> | 35 | #include <linux/module.h> |
36 | #include <linux/pm.h> | ||
36 | 37 | ||
37 | #include <asm/cpu.h> | 38 | #include <asm/cpu.h> |
38 | #include <asm/bootinfo.h> | 39 | #include <asm/bootinfo.h> |
@@ -125,7 +126,7 @@ void __init plat_setup(void) | |||
125 | #endif | 126 | #endif |
126 | _machine_restart = au1000_restart; | 127 | _machine_restart = au1000_restart; |
127 | _machine_halt = au1000_halt; | 128 | _machine_halt = au1000_halt; |
128 | _machine_power_off = au1000_power_off; | 129 | pm_power_off = au1000_power_off; |
129 | board_time_init = au1xxx_time_init; | 130 | board_time_init = au1xxx_time_init; |
130 | board_timer_setup = au1xxx_timer_setup; | 131 | board_timer_setup = au1xxx_timer_setup; |
131 | 132 | ||
diff --git a/arch/mips/cobalt/int-handler.S b/arch/mips/cobalt/int-handler.S index f92608e8d84f..e75d5e3ca868 100644 --- a/arch/mips/cobalt/int-handler.S +++ b/arch/mips/cobalt/int-handler.S | |||
@@ -8,7 +8,7 @@ | |||
8 | */ | 8 | */ |
9 | #include <asm/asm.h> | 9 | #include <asm/asm.h> |
10 | #include <asm/mipsregs.h> | 10 | #include <asm/mipsregs.h> |
11 | #include <asm/cobalt/cobalt.h> | 11 | #include <asm/mach-cobalt/cobalt.h> |
12 | #include <asm/regdef.h> | 12 | #include <asm/regdef.h> |
13 | #include <asm/stackframe.h> | 13 | #include <asm/stackframe.h> |
14 | 14 | ||
diff --git a/arch/mips/cobalt/irq.c b/arch/mips/cobalt/irq.c index 0d90851f925e..f9a108820d6e 100644 --- a/arch/mips/cobalt/irq.c +++ b/arch/mips/cobalt/irq.c | |||
@@ -18,7 +18,7 @@ | |||
18 | #include <asm/gt64120.h> | 18 | #include <asm/gt64120.h> |
19 | #include <asm/ptrace.h> | 19 | #include <asm/ptrace.h> |
20 | 20 | ||
21 | #include <asm/cobalt/cobalt.h> | 21 | #include <asm/mach-cobalt/cobalt.h> |
22 | 22 | ||
23 | extern void cobalt_handle_int(void); | 23 | extern void cobalt_handle_int(void); |
24 | 24 | ||
diff --git a/arch/mips/cobalt/reset.c b/arch/mips/cobalt/reset.c index 805a0e88507b..753dfccae6fa 100644 --- a/arch/mips/cobalt/reset.c +++ b/arch/mips/cobalt/reset.c | |||
@@ -16,7 +16,7 @@ | |||
16 | #include <asm/reboot.h> | 16 | #include <asm/reboot.h> |
17 | #include <asm/system.h> | 17 | #include <asm/system.h> |
18 | #include <asm/mipsregs.h> | 18 | #include <asm/mipsregs.h> |
19 | #include <asm/cobalt/cobalt.h> | 19 | #include <asm/mach-cobalt/cobalt.h> |
20 | 20 | ||
21 | void cobalt_machine_halt(void) | 21 | void cobalt_machine_halt(void) |
22 | { | 22 | { |
diff --git a/arch/mips/cobalt/setup.c b/arch/mips/cobalt/setup.c index d358a118fa31..b9713a723053 100644 --- a/arch/mips/cobalt/setup.c +++ b/arch/mips/cobalt/setup.c | |||
@@ -5,7 +5,7 @@ | |||
5 | * License. See the file "COPYING" in the main directory of this archive | 5 | * License. See the file "COPYING" in the main directory of this archive |
6 | * for more details. | 6 | * for more details. |
7 | * | 7 | * |
8 | * Copyright (C) 1996, 1997, 2004 by Ralf Baechle (ralf@linux-mips.org) | 8 | * Copyright (C) 1996, 1997, 2004, 05 by Ralf Baechle (ralf@linux-mips.org) |
9 | * Copyright (C) 2001, 2002, 2003 by Liam Davies (ldavies@agile.tv) | 9 | * Copyright (C) 2001, 2002, 2003 by Liam Davies (ldavies@agile.tv) |
10 | * | 10 | * |
11 | */ | 11 | */ |
@@ -13,6 +13,7 @@ | |||
13 | #include <linux/interrupt.h> | 13 | #include <linux/interrupt.h> |
14 | #include <linux/pci.h> | 14 | #include <linux/pci.h> |
15 | #include <linux/init.h> | 15 | #include <linux/init.h> |
16 | #include <linux/pm.h> | ||
16 | #include <linux/serial.h> | 17 | #include <linux/serial.h> |
17 | #include <linux/serial_core.h> | 18 | #include <linux/serial_core.h> |
18 | 19 | ||
@@ -25,7 +26,7 @@ | |||
25 | #include <asm/gt64120.h> | 26 | #include <asm/gt64120.h> |
26 | #include <asm/serial.h> | 27 | #include <asm/serial.h> |
27 | 28 | ||
28 | #include <asm/cobalt/cobalt.h> | 29 | #include <asm/mach-cobalt/cobalt.h> |
29 | 30 | ||
30 | extern void cobalt_machine_restart(char *command); | 31 | extern void cobalt_machine_restart(char *command); |
31 | extern void cobalt_machine_halt(void); | 32 | extern void cobalt_machine_halt(void); |
@@ -99,7 +100,7 @@ void __init plat_setup(void) | |||
99 | 100 | ||
100 | _machine_restart = cobalt_machine_restart; | 101 | _machine_restart = cobalt_machine_restart; |
101 | _machine_halt = cobalt_machine_halt; | 102 | _machine_halt = cobalt_machine_halt; |
102 | _machine_power_off = cobalt_machine_power_off; | 103 | pm_power_off = cobalt_machine_power_off; |
103 | 104 | ||
104 | board_timer_setup = cobalt_timer_setup; | 105 | board_timer_setup = cobalt_timer_setup; |
105 | 106 | ||
@@ -139,7 +140,7 @@ void __init plat_setup(void) | |||
139 | uart.type = PORT_UNKNOWN; | 140 | uart.type = PORT_UNKNOWN; |
140 | uart.uartclk = 18432000; | 141 | uart.uartclk = 18432000; |
141 | uart.irq = COBALT_SERIAL_IRQ; | 142 | uart.irq = COBALT_SERIAL_IRQ; |
142 | uart.flags = STD_COM_FLAGS; | 143 | uart.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST; |
143 | uart.iobase = 0xc800000; | 144 | uart.iobase = 0xc800000; |
144 | uart.iotype = UPIO_PORT; | 145 | uart.iotype = UPIO_PORT; |
145 | 146 | ||
diff --git a/arch/mips/configs/ip27_defconfig b/arch/mips/configs/ip27_defconfig index e17d3adff021..58c22cd344d3 100644 --- a/arch/mips/configs/ip27_defconfig +++ b/arch/mips/configs/ip27_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.15-rc2 | 3 | # Linux kernel version: 2.6.16-rc4 |
4 | # Thu Nov 24 01:06:21 2005 | 4 | # Tue Feb 21 13:44:31 2006 |
5 | # | 5 | # |
6 | CONFIG_MIPS=y | 6 | CONFIG_MIPS=y |
7 | 7 | ||
@@ -144,7 +144,6 @@ CONFIG_PREEMPT_BKL=y | |||
144 | # Code maturity level options | 144 | # Code maturity level options |
145 | # | 145 | # |
146 | CONFIG_EXPERIMENTAL=y | 146 | CONFIG_EXPERIMENTAL=y |
147 | CONFIG_CLEAN_COMPILE=y | ||
148 | CONFIG_LOCK_KERNEL=y | 147 | CONFIG_LOCK_KERNEL=y |
149 | CONFIG_INIT_ENV_ARG_LIMIT=32 | 148 | CONFIG_INIT_ENV_ARG_LIMIT=32 |
150 | 149 | ||
@@ -250,6 +249,7 @@ CONFIG_NET=y | |||
250 | # | 249 | # |
251 | # Networking options | 250 | # Networking options |
252 | # | 251 | # |
252 | # CONFIG_NETDEBUG is not set | ||
253 | CONFIG_PACKET=y | 253 | CONFIG_PACKET=y |
254 | CONFIG_PACKET_MMAP=y | 254 | CONFIG_PACKET_MMAP=y |
255 | CONFIG_UNIX=y | 255 | CONFIG_UNIX=y |
@@ -289,6 +289,7 @@ CONFIG_TCP_CONG_BIC=y | |||
289 | # SCTP Configuration (EXPERIMENTAL) | 289 | # SCTP Configuration (EXPERIMENTAL) |
290 | # | 290 | # |
291 | # CONFIG_IP_SCTP is not set | 291 | # CONFIG_IP_SCTP is not set |
292 | |||
292 | # CONFIG_ATM is not set | 293 | # CONFIG_ATM is not set |
293 | # CONFIG_BRIDGE is not set | 294 | # CONFIG_BRIDGE is not set |
294 | # CONFIG_VLAN_8021Q is not set | 295 | # CONFIG_VLAN_8021Q is not set |
@@ -448,7 +449,7 @@ CONFIG_SCSI_SAS_ATTRS=m | |||
448 | # | 449 | # |
449 | # SCSI low-level drivers | 450 | # SCSI low-level drivers |
450 | # | 451 | # |
451 | CONFIG_ISCSI_TCP=m | 452 | # CONFIG_ISCSI_TCP is not set |
452 | # CONFIG_BLK_DEV_3W_XXXX_RAID is not set | 453 | # CONFIG_BLK_DEV_3W_XXXX_RAID is not set |
453 | # CONFIG_SCSI_3W_9XXX is not set | 454 | # CONFIG_SCSI_3W_9XXX is not set |
454 | # CONFIG_SCSI_ACARD is not set | 455 | # CONFIG_SCSI_ACARD is not set |
@@ -774,6 +775,10 @@ CONFIG_USB_ARCH_HAS_OHCI=y | |||
774 | # | 775 | # |
775 | 776 | ||
776 | # | 777 | # |
778 | # EDAC - error detection and reporting (RAS) | ||
779 | # | ||
780 | |||
781 | # | ||
777 | # File systems | 782 | # File systems |
778 | # | 783 | # |
779 | CONFIG_EXT2_FS=y | 784 | CONFIG_EXT2_FS=y |
diff --git a/arch/mips/configs/ip32_defconfig b/arch/mips/configs/ip32_defconfig index 967e7acd8e1f..a34db6e82b27 100644 --- a/arch/mips/configs/ip32_defconfig +++ b/arch/mips/configs/ip32_defconfig | |||
@@ -102,6 +102,7 @@ CONFIG_CPU_R5000=y | |||
102 | # CONFIG_CPU_RM9000 is not set | 102 | # CONFIG_CPU_RM9000 is not set |
103 | # CONFIG_CPU_SB1 is not set | 103 | # CONFIG_CPU_SB1 is not set |
104 | CONFIG_SYS_HAS_CPU_R5000=y | 104 | CONFIG_SYS_HAS_CPU_R5000=y |
105 | CONFIG_SYS_HAS_CPU_NEVADA=y | ||
105 | CONFIG_SYS_HAS_CPU_RM7000=y | 106 | CONFIG_SYS_HAS_CPU_RM7000=y |
106 | CONFIG_SYS_SUPPORTS_64BIT_KERNEL=y | 107 | CONFIG_SYS_SUPPORTS_64BIT_KERNEL=y |
107 | CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y | 108 | CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y |
diff --git a/arch/mips/configs/qemu_defconfig b/arch/mips/configs/qemu_defconfig index dee44606164c..c02becab850b 100644 --- a/arch/mips/configs/qemu_defconfig +++ b/arch/mips/configs/qemu_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.15-rc2 | 3 | # Linux kernel version: 2.6.16-rc2 |
4 | # Thu Nov 24 01:07:00 2005 | 4 | # Fri Feb 3 17:14:27 2006 |
5 | # | 5 | # |
6 | CONFIG_MIPS=y | 6 | CONFIG_MIPS=y |
7 | 7 | ||
@@ -147,26 +147,27 @@ CONFIG_LOCALVERSION_AUTO=y | |||
147 | # CONFIG_BSD_PROCESS_ACCT is not set | 147 | # CONFIG_BSD_PROCESS_ACCT is not set |
148 | # CONFIG_SYSCTL is not set | 148 | # CONFIG_SYSCTL is not set |
149 | # CONFIG_AUDIT is not set | 149 | # CONFIG_AUDIT is not set |
150 | # CONFIG_HOTPLUG is not set | ||
151 | CONFIG_KOBJECT_UEVENT=y | ||
152 | # CONFIG_IKCONFIG is not set | 150 | # CONFIG_IKCONFIG is not set |
153 | CONFIG_INITRAMFS_SOURCE="" | 151 | CONFIG_INITRAMFS_SOURCE="" |
154 | CONFIG_EMBEDDED=y | 152 | CONFIG_EMBEDDED=y |
155 | CONFIG_KALLSYMS=y | 153 | CONFIG_KALLSYMS=y |
156 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 154 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
155 | # CONFIG_HOTPLUG is not set | ||
157 | CONFIG_PRINTK=y | 156 | CONFIG_PRINTK=y |
158 | # CONFIG_BUG is not set | 157 | # CONFIG_BUG is not set |
158 | CONFIG_ELF_CORE=y | ||
159 | # CONFIG_BASE_FULL is not set | 159 | # CONFIG_BASE_FULL is not set |
160 | # CONFIG_FUTEX is not set | 160 | # CONFIG_FUTEX is not set |
161 | # CONFIG_EPOLL is not set | 161 | # CONFIG_EPOLL is not set |
162 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | ||
163 | # CONFIG_SHMEM is not set | 162 | # CONFIG_SHMEM is not set |
164 | CONFIG_CC_ALIGN_FUNCTIONS=0 | 163 | CONFIG_CC_ALIGN_FUNCTIONS=0 |
165 | CONFIG_CC_ALIGN_LABELS=0 | 164 | CONFIG_CC_ALIGN_LABELS=0 |
166 | CONFIG_CC_ALIGN_LOOPS=0 | 165 | CONFIG_CC_ALIGN_LOOPS=0 |
167 | CONFIG_CC_ALIGN_JUMPS=0 | 166 | CONFIG_CC_ALIGN_JUMPS=0 |
167 | CONFIG_SLAB=y | ||
168 | CONFIG_TINY_SHMEM=y | 168 | CONFIG_TINY_SHMEM=y |
169 | CONFIG_BASE_SMALL=1 | 169 | CONFIG_BASE_SMALL=1 |
170 | # CONFIG_SLOB is not set | ||
170 | 171 | ||
171 | # | 172 | # |
172 | # Loadable module support | 173 | # Loadable module support |
@@ -266,11 +267,7 @@ CONFIG_TCP_CONG_BIC=y | |||
266 | # CONFIG_HAMRADIO is not set | 267 | # CONFIG_HAMRADIO is not set |
267 | # CONFIG_IRDA is not set | 268 | # CONFIG_IRDA is not set |
268 | # CONFIG_BT is not set | 269 | # CONFIG_BT is not set |
269 | CONFIG_IEEE80211=y | 270 | # CONFIG_IEEE80211 is not set |
270 | # CONFIG_IEEE80211_DEBUG is not set | ||
271 | CONFIG_IEEE80211_CRYPT_WEP=y | ||
272 | CONFIG_IEEE80211_CRYPT_CCMP=y | ||
273 | CONFIG_IEEE80211_CRYPT_TKIP=y | ||
274 | 271 | ||
275 | # | 272 | # |
276 | # Device Drivers | 273 | # Device Drivers |
@@ -323,7 +320,7 @@ CONFIG_BLK_DEV_RAM_COUNT=16 | |||
323 | # | 320 | # |
324 | # SCSI device support | 321 | # SCSI device support |
325 | # | 322 | # |
326 | CONFIG_RAID_ATTRS=y | 323 | # CONFIG_RAID_ATTRS is not set |
327 | # CONFIG_SCSI is not set | 324 | # CONFIG_SCSI is not set |
328 | 325 | ||
329 | # | 326 | # |
@@ -366,24 +363,16 @@ CONFIG_NETDEVICES=y | |||
366 | # | 363 | # |
367 | # PHY device support | 364 | # PHY device support |
368 | # | 365 | # |
369 | CONFIG_PHYLIB=y | 366 | # CONFIG_PHYLIB is not set |
370 | |||
371 | # | ||
372 | # MII PHY device drivers | ||
373 | # | ||
374 | CONFIG_MARVELL_PHY=y | ||
375 | CONFIG_DAVICOM_PHY=y | ||
376 | CONFIG_QSEMI_PHY=y | ||
377 | CONFIG_LXT_PHY=y | ||
378 | CONFIG_CICADA_PHY=y | ||
379 | 367 | ||
380 | # | 368 | # |
381 | # Ethernet (10 or 100Mbit) | 369 | # Ethernet (10 or 100Mbit) |
382 | # | 370 | # |
383 | CONFIG_NET_ETHERNET=y | 371 | CONFIG_NET_ETHERNET=y |
384 | CONFIG_MII=y | 372 | # CONFIG_MII is not set |
385 | # CONFIG_NET_VENDOR_3COM is not set | 373 | # CONFIG_NET_VENDOR_3COM is not set |
386 | # CONFIG_NET_VENDOR_SMC is not set | 374 | # CONFIG_NET_VENDOR_SMC is not set |
375 | # CONFIG_DM9000 is not set | ||
387 | # CONFIG_NET_VENDOR_RACAL is not set | 376 | # CONFIG_NET_VENDOR_RACAL is not set |
388 | # CONFIG_DEPCA is not set | 377 | # CONFIG_DEPCA is not set |
389 | # CONFIG_HP100 is not set | 378 | # CONFIG_HP100 is not set |
@@ -479,6 +468,7 @@ CONFIG_HW_CONSOLE=y | |||
479 | CONFIG_SERIAL_8250=y | 468 | CONFIG_SERIAL_8250=y |
480 | CONFIG_SERIAL_8250_CONSOLE=y | 469 | CONFIG_SERIAL_8250_CONSOLE=y |
481 | CONFIG_SERIAL_8250_NR_UARTS=4 | 470 | CONFIG_SERIAL_8250_NR_UARTS=4 |
471 | CONFIG_SERIAL_8250_RUNTIME_UARTS=4 | ||
482 | # CONFIG_SERIAL_8250_EXTENDED is not set | 472 | # CONFIG_SERIAL_8250_EXTENDED is not set |
483 | 473 | ||
484 | # | 474 | # |
@@ -518,6 +508,12 @@ CONFIG_SERIAL_CORE_CONSOLE=y | |||
518 | # CONFIG_I2C is not set | 508 | # CONFIG_I2C is not set |
519 | 509 | ||
520 | # | 510 | # |
511 | # SPI support | ||
512 | # | ||
513 | # CONFIG_SPI is not set | ||
514 | # CONFIG_SPI_MASTER is not set | ||
515 | |||
516 | # | ||
521 | # Dallas's 1-wire bus | 517 | # Dallas's 1-wire bus |
522 | # | 518 | # |
523 | # CONFIG_W1 is not set | 519 | # CONFIG_W1 is not set |
@@ -592,11 +588,14 @@ CONFIG_DUMMY_CONSOLE=y | |||
592 | # | 588 | # |
593 | 589 | ||
594 | # | 590 | # |
591 | # EDAC - error detection and reporting (RAS) | ||
592 | # | ||
593 | |||
594 | # | ||
595 | # File systems | 595 | # File systems |
596 | # | 596 | # |
597 | # CONFIG_EXT2_FS is not set | 597 | # CONFIG_EXT2_FS is not set |
598 | # CONFIG_EXT3_FS is not set | 598 | # CONFIG_EXT3_FS is not set |
599 | # CONFIG_JBD is not set | ||
600 | # CONFIG_REISERFS_FS is not set | 599 | # CONFIG_REISERFS_FS is not set |
601 | # CONFIG_JFS_FS is not set | 600 | # CONFIG_JFS_FS is not set |
602 | # CONFIG_FS_POSIX_ACL is not set | 601 | # CONFIG_FS_POSIX_ACL is not set |
@@ -677,6 +676,7 @@ CONFIG_MSDOS_PARTITION=y | |||
677 | # Kernel hacking | 676 | # Kernel hacking |
678 | # | 677 | # |
679 | # CONFIG_PRINTK_TIME is not set | 678 | # CONFIG_PRINTK_TIME is not set |
679 | # CONFIG_MAGIC_SYSRQ is not set | ||
680 | # CONFIG_DEBUG_KERNEL is not set | 680 | # CONFIG_DEBUG_KERNEL is not set |
681 | CONFIG_LOG_BUF_SHIFT=14 | 681 | CONFIG_LOG_BUF_SHIFT=14 |
682 | CONFIG_CROSSCOMPILE=y | 682 | CONFIG_CROSSCOMPILE=y |
@@ -690,31 +690,7 @@ CONFIG_CMDLINE="console=ttyS0 debug ip=172.20.0.2:172.20.0.1::255.255.0.0" | |||
690 | # | 690 | # |
691 | # Cryptographic options | 691 | # Cryptographic options |
692 | # | 692 | # |
693 | CONFIG_CRYPTO=y | 693 | # CONFIG_CRYPTO is not set |
694 | CONFIG_CRYPTO_HMAC=y | ||
695 | CONFIG_CRYPTO_NULL=y | ||
696 | CONFIG_CRYPTO_MD4=y | ||
697 | CONFIG_CRYPTO_MD5=y | ||
698 | CONFIG_CRYPTO_SHA1=y | ||
699 | CONFIG_CRYPTO_SHA256=y | ||
700 | CONFIG_CRYPTO_SHA512=y | ||
701 | CONFIG_CRYPTO_WP512=y | ||
702 | CONFIG_CRYPTO_TGR192=y | ||
703 | CONFIG_CRYPTO_DES=y | ||
704 | CONFIG_CRYPTO_BLOWFISH=y | ||
705 | CONFIG_CRYPTO_TWOFISH=y | ||
706 | CONFIG_CRYPTO_SERPENT=y | ||
707 | CONFIG_CRYPTO_AES=y | ||
708 | CONFIG_CRYPTO_CAST5=y | ||
709 | CONFIG_CRYPTO_CAST6=y | ||
710 | CONFIG_CRYPTO_TEA=y | ||
711 | CONFIG_CRYPTO_ARC4=y | ||
712 | CONFIG_CRYPTO_KHAZAD=y | ||
713 | CONFIG_CRYPTO_ANUBIS=y | ||
714 | CONFIG_CRYPTO_DEFLATE=y | ||
715 | CONFIG_CRYPTO_MICHAEL_MIC=y | ||
716 | CONFIG_CRYPTO_CRC32C=y | ||
717 | # CONFIG_CRYPTO_TEST is not set | ||
718 | 694 | ||
719 | # | 695 | # |
720 | # Hardware crypto devices | 696 | # Hardware crypto devices |
@@ -724,8 +700,6 @@ CONFIG_CRYPTO_CRC32C=y | |||
724 | # Library routines | 700 | # Library routines |
725 | # | 701 | # |
726 | # CONFIG_CRC_CCITT is not set | 702 | # CONFIG_CRC_CCITT is not set |
727 | CONFIG_CRC16=y | 703 | # CONFIG_CRC16 is not set |
728 | CONFIG_CRC32=y | 704 | CONFIG_CRC32=y |
729 | CONFIG_LIBCRC32C=y | 705 | # CONFIG_LIBCRC32C is not set |
730 | CONFIG_ZLIB_INFLATE=y | ||
731 | CONFIG_ZLIB_DEFLATE=y | ||
diff --git a/arch/mips/ddb5xxx/ddb5074/setup.c b/arch/mips/ddb5xxx/ddb5074/setup.c index 11535be265b9..91456b068c2e 100644 --- a/arch/mips/ddb5xxx/ddb5074/setup.c +++ b/arch/mips/ddb5xxx/ddb5074/setup.c | |||
@@ -14,6 +14,7 @@ | |||
14 | #include <linux/ide.h> | 14 | #include <linux/ide.h> |
15 | #include <linux/ioport.h> | 15 | #include <linux/ioport.h> |
16 | #include <linux/irq.h> | 16 | #include <linux/irq.h> |
17 | #include <linux/pm.h> | ||
17 | 18 | ||
18 | #include <asm/addrspace.h> | 19 | #include <asm/addrspace.h> |
19 | #include <asm/bcache.h> | 20 | #include <asm/bcache.h> |
@@ -95,7 +96,7 @@ void __init plat_setup(void) | |||
95 | 96 | ||
96 | _machine_restart = ddb_machine_restart; | 97 | _machine_restart = ddb_machine_restart; |
97 | _machine_halt = ddb_machine_halt; | 98 | _machine_halt = ddb_machine_halt; |
98 | _machine_power_off = ddb_machine_power_off; | 99 | pm_power_off = ddb_machine_power_off; |
99 | 100 | ||
100 | ddb_out32(DDB_BAR0, 0); | 101 | ddb_out32(DDB_BAR0, 0); |
101 | 102 | ||
diff --git a/arch/mips/ddb5xxx/ddb5476/setup.c b/arch/mips/ddb5xxx/ddb5476/setup.c index f4e480a74edf..c902adef5942 100644 --- a/arch/mips/ddb5xxx/ddb5476/setup.c +++ b/arch/mips/ddb5xxx/ddb5476/setup.c | |||
@@ -11,6 +11,7 @@ | |||
11 | #include <linux/types.h> | 11 | #include <linux/types.h> |
12 | #include <linux/sched.h> | 12 | #include <linux/sched.h> |
13 | #include <linux/pci.h> | 13 | #include <linux/pci.h> |
14 | #include <linux/pm.h> | ||
14 | 15 | ||
15 | #include <asm/addrspace.h> | 16 | #include <asm/addrspace.h> |
16 | #include <asm/bcache.h> | 17 | #include <asm/bcache.h> |
@@ -133,7 +134,7 @@ void __init plat_setup(void) | |||
133 | 134 | ||
134 | _machine_restart = ddb_machine_restart; | 135 | _machine_restart = ddb_machine_restart; |
135 | _machine_halt = ddb_machine_halt; | 136 | _machine_halt = ddb_machine_halt; |
136 | _machine_power_off = ddb_machine_power_off; | 137 | pm_power_off = ddb_machine_power_off; |
137 | 138 | ||
138 | /* request io port/mem resources */ | 139 | /* request io port/mem resources */ |
139 | if (request_resource(&ioport_resource, &ddb5476_ioport.dma1) || | 140 | if (request_resource(&ioport_resource, &ddb5476_ioport.dma1) || |
diff --git a/arch/mips/ddb5xxx/ddb5477/setup.c b/arch/mips/ddb5xxx/ddb5477/setup.c index 81163353c4a8..2f566034cc44 100644 --- a/arch/mips/ddb5xxx/ddb5477/setup.c +++ b/arch/mips/ddb5xxx/ddb5477/setup.c | |||
@@ -26,6 +26,7 @@ | |||
26 | #include <linux/major.h> | 26 | #include <linux/major.h> |
27 | #include <linux/kdev_t.h> | 27 | #include <linux/kdev_t.h> |
28 | #include <linux/root_dev.h> | 28 | #include <linux/root_dev.h> |
29 | #include <linux/pm.h> | ||
29 | 30 | ||
30 | #include <asm/cpu.h> | 31 | #include <asm/cpu.h> |
31 | #include <asm/bootinfo.h> | 32 | #include <asm/bootinfo.h> |
@@ -182,7 +183,7 @@ void __init plat_setup(void) | |||
182 | 183 | ||
183 | _machine_restart = ddb_machine_restart; | 184 | _machine_restart = ddb_machine_restart; |
184 | _machine_halt = ddb_machine_halt; | 185 | _machine_halt = ddb_machine_halt; |
185 | _machine_power_off = ddb_machine_power_off; | 186 | pm_power_off = ddb_machine_power_off; |
186 | 187 | ||
187 | /* setup resource limits */ | 188 | /* setup resource limits */ |
188 | ioport_resource.end = DDB_PCI0_IO_SIZE + DDB_PCI1_IO_SIZE - 1; | 189 | ioport_resource.end = DDB_PCI0_IO_SIZE + DDB_PCI1_IO_SIZE - 1; |
diff --git a/arch/mips/dec/setup.c b/arch/mips/dec/setup.c index 9ef54fe1feaa..7c1ca8f6330e 100644 --- a/arch/mips/dec/setup.c +++ b/arch/mips/dec/setup.c | |||
@@ -17,6 +17,7 @@ | |||
17 | #include <linux/sched.h> | 17 | #include <linux/sched.h> |
18 | #include <linux/spinlock.h> | 18 | #include <linux/spinlock.h> |
19 | #include <linux/types.h> | 19 | #include <linux/types.h> |
20 | #include <linux/pm.h> | ||
20 | 21 | ||
21 | #include <asm/bootinfo.h> | 22 | #include <asm/bootinfo.h> |
22 | #include <asm/cpu.h> | 23 | #include <asm/cpu.h> |
@@ -158,7 +159,7 @@ void __init plat_setup(void) | |||
158 | 159 | ||
159 | _machine_restart = dec_machine_restart; | 160 | _machine_restart = dec_machine_restart; |
160 | _machine_halt = dec_machine_halt; | 161 | _machine_halt = dec_machine_halt; |
161 | _machine_power_off = dec_machine_power_off; | 162 | pm_power_off = dec_machine_power_off; |
162 | 163 | ||
163 | ioport_resource.start = ~0UL; | 164 | ioport_resource.start = ~0UL; |
164 | ioport_resource.end = 0UL; | 165 | ioport_resource.end = 0UL; |
diff --git a/arch/mips/gt64120/ev64120/setup.c b/arch/mips/gt64120/ev64120/setup.c index 98b5a96cc039..6d859d1e7a2d 100644 --- a/arch/mips/gt64120/ev64120/setup.c +++ b/arch/mips/gt64120/ev64120/setup.c | |||
@@ -34,6 +34,8 @@ | |||
34 | #include <linux/interrupt.h> | 34 | #include <linux/interrupt.h> |
35 | #include <linux/pci.h> | 35 | #include <linux/pci.h> |
36 | #include <linux/timex.h> | 36 | #include <linux/timex.h> |
37 | #include <linux/pm.h> | ||
38 | |||
37 | #include <asm/bootinfo.h> | 39 | #include <asm/bootinfo.h> |
38 | #include <asm/page.h> | 40 | #include <asm/page.h> |
39 | #include <asm/io.h> | 41 | #include <asm/io.h> |
@@ -73,7 +75,7 @@ void __init plat_setup(void) | |||
73 | { | 75 | { |
74 | _machine_restart = galileo_machine_restart; | 76 | _machine_restart = galileo_machine_restart; |
75 | _machine_halt = galileo_machine_halt; | 77 | _machine_halt = galileo_machine_halt; |
76 | _machine_power_off = galileo_machine_power_off; | 78 | pm_power_off = galileo_machine_power_off; |
77 | 79 | ||
78 | board_time_init = gt64120_time_init; | 80 | board_time_init = gt64120_time_init; |
79 | set_io_port_base(KSEG1); | 81 | set_io_port_base(KSEG1); |
diff --git a/arch/mips/gt64120/momenco_ocelot/setup.c b/arch/mips/gt64120/momenco_ocelot/setup.c index 0d07c33112d0..20b65d3d2151 100644 --- a/arch/mips/gt64120/momenco_ocelot/setup.c +++ b/arch/mips/gt64120/momenco_ocelot/setup.c | |||
@@ -4,7 +4,7 @@ | |||
4 | * BRIEF MODULE DESCRIPTION | 4 | * BRIEF MODULE DESCRIPTION |
5 | * Momentum Computer Ocelot (CP7000) - board dependent boot routines | 5 | * Momentum Computer Ocelot (CP7000) - board dependent boot routines |
6 | * | 6 | * |
7 | * Copyright (C) 1996, 1997, 2001 Ralf Baechle | 7 | * Copyright (C) 1996, 1997, 2001, 06 Ralf Baechle (ralf@linux-mips.org) |
8 | * Copyright (C) 2000 RidgeRun, Inc. | 8 | * Copyright (C) 2000 RidgeRun, Inc. |
9 | * Copyright (C) 2001 Red Hat, Inc. | 9 | * Copyright (C) 2001 Red Hat, Inc. |
10 | * Copyright (C) 2002 Momentum Computer | 10 | * Copyright (C) 2002 Momentum Computer |
@@ -47,6 +47,8 @@ | |||
47 | #include <linux/pci.h> | 47 | #include <linux/pci.h> |
48 | #include <linux/timex.h> | 48 | #include <linux/timex.h> |
49 | #include <linux/vmalloc.h> | 49 | #include <linux/vmalloc.h> |
50 | #include <linux/pm.h> | ||
51 | |||
50 | #include <asm/time.h> | 52 | #include <asm/time.h> |
51 | #include <asm/bootinfo.h> | 53 | #include <asm/bootinfo.h> |
52 | #include <asm/page.h> | 54 | #include <asm/page.h> |
@@ -159,7 +161,7 @@ void __init plat_setup(void) | |||
159 | 161 | ||
160 | _machine_restart = momenco_ocelot_restart; | 162 | _machine_restart = momenco_ocelot_restart; |
161 | _machine_halt = momenco_ocelot_halt; | 163 | _machine_halt = momenco_ocelot_halt; |
162 | _machine_power_off = momenco_ocelot_power_off; | 164 | pm_power_off = momenco_ocelot_power_off; |
163 | 165 | ||
164 | /* | 166 | /* |
165 | * initrd_start = (ulong)ocelot_initrd_start; | 167 | * initrd_start = (ulong)ocelot_initrd_start; |
diff --git a/arch/mips/ite-boards/generic/it8172_setup.c b/arch/mips/ite-boards/generic/it8172_setup.c index 062429dd7ca0..fc73c8d69df7 100644 --- a/arch/mips/ite-boards/generic/it8172_setup.c +++ b/arch/mips/ite-boards/generic/it8172_setup.c | |||
@@ -34,6 +34,7 @@ | |||
34 | #include <linux/major.h> | 34 | #include <linux/major.h> |
35 | #include <linux/kdev_t.h> | 35 | #include <linux/kdev_t.h> |
36 | #include <linux/root_dev.h> | 36 | #include <linux/root_dev.h> |
37 | #include <linux/pm.h> | ||
37 | 38 | ||
38 | #include <asm/cpu.h> | 39 | #include <asm/cpu.h> |
39 | #include <asm/time.h> | 40 | #include <asm/time.h> |
@@ -125,7 +126,7 @@ void __init plat_setup(void) | |||
125 | 126 | ||
126 | _machine_restart = it8172_restart; | 127 | _machine_restart = it8172_restart; |
127 | _machine_halt = it8172_halt; | 128 | _machine_halt = it8172_halt; |
128 | _machine_power_off = it8172_power_off; | 129 | pm_power_off = it8172_power_off; |
129 | 130 | ||
130 | /* | 131 | /* |
131 | * IO/MEM resources. | 132 | * IO/MEM resources. |
diff --git a/arch/mips/jazz/setup.c b/arch/mips/jazz/setup.c index 044df9d4ab7c..4036dc434551 100644 --- a/arch/mips/jazz/setup.c +++ b/arch/mips/jazz/setup.c | |||
@@ -19,6 +19,8 @@ | |||
19 | #include <linux/console.h> | 19 | #include <linux/console.h> |
20 | #include <linux/fb.h> | 20 | #include <linux/fb.h> |
21 | #include <linux/ide.h> | 21 | #include <linux/ide.h> |
22 | #include <linux/pm.h> | ||
23 | |||
22 | #include <asm/bootinfo.h> | 24 | #include <asm/bootinfo.h> |
23 | #include <asm/irq.h> | 25 | #include <asm/irq.h> |
24 | #include <asm/jazz.h> | 26 | #include <asm/jazz.h> |
@@ -79,7 +81,7 @@ void __init plat_setup(void) | |||
79 | 81 | ||
80 | _machine_restart = jazz_machine_restart; | 82 | _machine_restart = jazz_machine_restart; |
81 | _machine_halt = jazz_machine_halt; | 83 | _machine_halt = jazz_machine_halt; |
82 | _machine_power_off = jazz_machine_power_off; | 84 | pm_power_off = jazz_machine_power_off; |
83 | 85 | ||
84 | #warning "Somebody should check if screen_info is ok for Jazz." | 86 | #warning "Somebody should check if screen_info is ok for Jazz." |
85 | 87 | ||
diff --git a/arch/mips/jmr3927/rbhma3100/setup.c b/arch/mips/jmr3927/rbhma3100/setup.c index 4763957df8fc..9359cc413494 100644 --- a/arch/mips/jmr3927/rbhma3100/setup.c +++ b/arch/mips/jmr3927/rbhma3100/setup.c | |||
@@ -44,6 +44,7 @@ | |||
44 | #include <linux/ioport.h> | 44 | #include <linux/ioport.h> |
45 | #include <linux/param.h> /* for HZ */ | 45 | #include <linux/param.h> /* for HZ */ |
46 | #include <linux/delay.h> | 46 | #include <linux/delay.h> |
47 | #include <linux/pm.h> | ||
47 | #ifdef CONFIG_SERIAL_TXX9 | 48 | #ifdef CONFIG_SERIAL_TXX9 |
48 | #include <linux/tty.h> | 49 | #include <linux/tty.h> |
49 | #include <linux/serial.h> | 50 | #include <linux/serial.h> |
@@ -211,7 +212,7 @@ void __init plat_setup(void) | |||
211 | 212 | ||
212 | _machine_restart = jmr3927_machine_restart; | 213 | _machine_restart = jmr3927_machine_restart; |
213 | _machine_halt = jmr3927_machine_halt; | 214 | _machine_halt = jmr3927_machine_halt; |
214 | _machine_power_off = jmr3927_machine_power_off; | 215 | pm_power_off = jmr3927_machine_power_off; |
215 | 216 | ||
216 | /* | 217 | /* |
217 | * IO/MEM resources. | 218 | * IO/MEM resources. |
diff --git a/arch/mips/kernel/binfmt_elfn32.c b/arch/mips/kernel/binfmt_elfn32.c index d8e2674a1543..4a9f1ecefaf2 100644 --- a/arch/mips/kernel/binfmt_elfn32.c +++ b/arch/mips/kernel/binfmt_elfn32.c | |||
@@ -103,8 +103,9 @@ jiffies_to_compat_timeval(unsigned long jiffies, struct compat_timeval *value) | |||
103 | * one divide. | 103 | * one divide. |
104 | */ | 104 | */ |
105 | u64 nsec = (u64)jiffies * TICK_NSEC; | 105 | u64 nsec = (u64)jiffies * TICK_NSEC; |
106 | value->tv_sec = div_long_long_rem(nsec, NSEC_PER_SEC, &value->tv_usec); | 106 | long rem; |
107 | value->tv_usec /= NSEC_PER_USEC; | 107 | value->tv_sec = div_long_long_rem(nsec, NSEC_PER_SEC, &rem); |
108 | value->tv_usec = rem / NSEC_PER_USEC; | ||
108 | } | 109 | } |
109 | 110 | ||
110 | #define ELF_CORE_EFLAGS EF_MIPS_ABI2 | 111 | #define ELF_CORE_EFLAGS EF_MIPS_ABI2 |
diff --git a/arch/mips/kernel/binfmt_elfo32.c b/arch/mips/kernel/binfmt_elfo32.c index cec5f327e360..e31813779895 100644 --- a/arch/mips/kernel/binfmt_elfo32.c +++ b/arch/mips/kernel/binfmt_elfo32.c | |||
@@ -105,8 +105,9 @@ jiffies_to_compat_timeval(unsigned long jiffies, struct compat_timeval *value) | |||
105 | * one divide. | 105 | * one divide. |
106 | */ | 106 | */ |
107 | u64 nsec = (u64)jiffies * TICK_NSEC; | 107 | u64 nsec = (u64)jiffies * TICK_NSEC; |
108 | value->tv_sec = div_long_long_rem(nsec, NSEC_PER_SEC, &value->tv_usec); | 108 | long rem; |
109 | value->tv_usec /= NSEC_PER_USEC; | 109 | value->tv_sec = div_long_long_rem(nsec, NSEC_PER_SEC, &rem); |
110 | value->tv_usec = rem / NSEC_PER_USEC; | ||
110 | } | 111 | } |
111 | 112 | ||
112 | #undef ELF_CORE_COPY_REGS | 113 | #undef ELF_CORE_COPY_REGS |
diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c index fac48ad27b34..292f8b243a5e 100644 --- a/arch/mips/kernel/cpu-probe.c +++ b/arch/mips/kernel/cpu-probe.c | |||
@@ -2,8 +2,8 @@ | |||
2 | * Processor capabilities determination functions. | 2 | * Processor capabilities determination functions. |
3 | * | 3 | * |
4 | * Copyright (C) xxxx the Anonymous | 4 | * Copyright (C) xxxx the Anonymous |
5 | * Copyright (C) 1994 - 2006 Ralf Baechle | ||
5 | * Copyright (C) 2003, 2004 Maciej W. Rozycki | 6 | * Copyright (C) 2003, 2004 Maciej W. Rozycki |
6 | * Copyright (C) 1994 - 2003 Ralf Baechle | ||
7 | * Copyright (C) 2001, 2004 MIPS Inc. | 7 | * Copyright (C) 2001, 2004 MIPS Inc. |
8 | * | 8 | * |
9 | * This program is free software; you can redistribute it and/or | 9 | * This program is free software; you can redistribute it and/or |
@@ -641,10 +641,9 @@ static inline void cpu_probe_sibyte(struct cpuinfo_mips *c) | |||
641 | switch (c->processor_id & 0xff00) { | 641 | switch (c->processor_id & 0xff00) { |
642 | case PRID_IMP_SB1: | 642 | case PRID_IMP_SB1: |
643 | c->cputype = CPU_SB1; | 643 | c->cputype = CPU_SB1; |
644 | #ifdef CONFIG_SB1_PASS_1_WORKAROUNDS | ||
645 | /* FPU in pass1 is known to have issues. */ | 644 | /* FPU in pass1 is known to have issues. */ |
646 | c->options &= ~(MIPS_CPU_FPU | MIPS_CPU_32FPR); | 645 | if ((c->processor_id & 0xff) < 0x20) |
647 | #endif | 646 | c->options &= ~(MIPS_CPU_FPU | MIPS_CPU_32FPR); |
648 | break; | 647 | break; |
649 | case PRID_IMP_SB1A: | 648 | case PRID_IMP_SB1A: |
650 | c->cputype = CPU_SB1A; | 649 | c->cputype = CPU_SB1A; |
diff --git a/arch/mips/kernel/gdb-stub.c b/arch/mips/kernel/gdb-stub.c index 96d18c43dca0..d4f88e0af24c 100644 --- a/arch/mips/kernel/gdb-stub.c +++ b/arch/mips/kernel/gdb-stub.c | |||
@@ -178,7 +178,7 @@ int kgdb_enabled; | |||
178 | */ | 178 | */ |
179 | static DEFINE_SPINLOCK(kgdb_lock); | 179 | static DEFINE_SPINLOCK(kgdb_lock); |
180 | static raw_spinlock_t kgdb_cpulock[NR_CPUS] = { | 180 | static raw_spinlock_t kgdb_cpulock[NR_CPUS] = { |
181 | [0 ... NR_CPUS-1] = __RAW_SPIN_LOCK_UNLOCKED; | 181 | [0 ... NR_CPUS-1] = __RAW_SPIN_LOCK_UNLOCKED, |
182 | }; | 182 | }; |
183 | 183 | ||
184 | /* | 184 | /* |
diff --git a/arch/mips/kernel/genex.S b/arch/mips/kernel/genex.S index aa18a8b7b380..13f22d1d0e8b 100644 --- a/arch/mips/kernel/genex.S +++ b/arch/mips/kernel/genex.S | |||
@@ -233,11 +233,11 @@ NESTED(except_vec_nmi, 0, sp) | |||
233 | NESTED(nmi_handler, PT_SIZE, sp) | 233 | NESTED(nmi_handler, PT_SIZE, sp) |
234 | .set push | 234 | .set push |
235 | .set noat | 235 | .set noat |
236 | .set mips3 | ||
237 | SAVE_ALL | 236 | SAVE_ALL |
238 | move a0, sp | 237 | move a0, sp |
239 | jal nmi_exception_handler | 238 | jal nmi_exception_handler |
240 | RESTORE_ALL | 239 | RESTORE_ALL |
240 | .set mips3 | ||
241 | eret | 241 | eret |
242 | .set pop | 242 | .set pop |
243 | END(nmi_handler) | 243 | END(nmi_handler) |
diff --git a/arch/mips/kernel/irq-mv6434x.c b/arch/mips/kernel/irq-mv6434x.c index 0ac067f45cf5..0613f1f36b1b 100644 --- a/arch/mips/kernel/irq-mv6434x.c +++ b/arch/mips/kernel/irq-mv6434x.c | |||
@@ -11,12 +11,14 @@ | |||
11 | #include <linux/module.h> | 11 | #include <linux/module.h> |
12 | #include <linux/interrupt.h> | 12 | #include <linux/interrupt.h> |
13 | #include <linux/kernel.h> | 13 | #include <linux/kernel.h> |
14 | #include <asm/ptrace.h> | ||
15 | #include <linux/sched.h> | ||
16 | #include <linux/kernel_stat.h> | 14 | #include <linux/kernel_stat.h> |
15 | #include <linux/mv643xx.h> | ||
16 | #include <linux/sched.h> | ||
17 | |||
18 | #include <asm/ptrace.h> | ||
17 | #include <asm/io.h> | 19 | #include <asm/io.h> |
18 | #include <asm/irq.h> | 20 | #include <asm/irq.h> |
19 | #include <linux/mv643xx.h> | 21 | #include <asm/marvell.h> |
20 | 22 | ||
21 | static unsigned int irq_base; | 23 | static unsigned int irq_base; |
22 | 24 | ||
diff --git a/arch/mips/kernel/linux32.c b/arch/mips/kernel/linux32.c index 60353f5acc48..e00e5f6e7fdd 100644 --- a/arch/mips/kernel/linux32.c +++ b/arch/mips/kernel/linux32.c | |||
@@ -161,60 +161,6 @@ out: | |||
161 | return error; | 161 | return error; |
162 | } | 162 | } |
163 | 163 | ||
164 | struct dirent32 { | ||
165 | unsigned int d_ino; | ||
166 | unsigned int d_off; | ||
167 | unsigned short d_reclen; | ||
168 | char d_name[NAME_MAX + 1]; | ||
169 | }; | ||
170 | |||
171 | static void | ||
172 | xlate_dirent(void *dirent64, void *dirent32, long n) | ||
173 | { | ||
174 | long off; | ||
175 | struct dirent *dirp; | ||
176 | struct dirent32 *dirp32; | ||
177 | |||
178 | off = 0; | ||
179 | while (off < n) { | ||
180 | dirp = (struct dirent *)(dirent64 + off); | ||
181 | dirp32 = (struct dirent32 *)(dirent32 + off); | ||
182 | off += dirp->d_reclen; | ||
183 | dirp32->d_ino = dirp->d_ino; | ||
184 | dirp32->d_off = (unsigned int)dirp->d_off; | ||
185 | dirp32->d_reclen = dirp->d_reclen; | ||
186 | strncpy(dirp32->d_name, dirp->d_name, dirp->d_reclen - ((3 * 4) + 2)); | ||
187 | } | ||
188 | return; | ||
189 | } | ||
190 | |||
191 | asmlinkage long | ||
192 | sys32_getdents(unsigned int fd, void * dirent32, unsigned int count) | ||
193 | { | ||
194 | long n; | ||
195 | void *dirent64; | ||
196 | |||
197 | dirent64 = (void *)((unsigned long)(dirent32 + (sizeof(long) - 1)) & ~(sizeof(long) - 1)); | ||
198 | if ((n = sys_getdents(fd, dirent64, count - (dirent64 - dirent32))) < 0) | ||
199 | return(n); | ||
200 | xlate_dirent(dirent64, dirent32, n); | ||
201 | return(n); | ||
202 | } | ||
203 | |||
204 | asmlinkage int old_readdir(unsigned int fd, void * dirent, unsigned int count); | ||
205 | |||
206 | asmlinkage int | ||
207 | sys32_readdir(unsigned int fd, void * dirent32, unsigned int count) | ||
208 | { | ||
209 | int n; | ||
210 | struct dirent dirent64; | ||
211 | |||
212 | if ((n = old_readdir(fd, &dirent64, count)) < 0) | ||
213 | return(n); | ||
214 | xlate_dirent(&dirent64, dirent32, dirent64.d_reclen); | ||
215 | return(n); | ||
216 | } | ||
217 | |||
218 | asmlinkage int | 164 | asmlinkage int |
219 | sys32_waitpid(compat_pid_t pid, unsigned int *stat_addr, int options) | 165 | sys32_waitpid(compat_pid_t pid, unsigned int *stat_addr, int options) |
220 | { | 166 | { |
@@ -230,6 +176,9 @@ sysn32_waitid(int which, compat_pid_t pid, | |||
230 | long ret; | 176 | long ret; |
231 | mm_segment_t old_fs = get_fs(); | 177 | mm_segment_t old_fs = get_fs(); |
232 | 178 | ||
179 | if (!access_ok(VERIFY_WRITE, uinfo, sizeof(*uinfo))) | ||
180 | return -EFAULT; | ||
181 | |||
233 | set_fs (KERNEL_DS); | 182 | set_fs (KERNEL_DS); |
234 | ret = sys_waitid(which, pid, uinfo, options, | 183 | ret = sys_waitid(which, pid, uinfo, options, |
235 | uru ? (struct rusage __user *) &ru : NULL); | 184 | uru ? (struct rusage __user *) &ru : NULL); |
@@ -1450,25 +1399,6 @@ sys32_timer_create(u32 clock, struct sigevent32 __user *se32, timer_t __user *ti | |||
1450 | return sys_timer_create(clock, p, timer_id); | 1399 | return sys_timer_create(clock, p, timer_id); |
1451 | } | 1400 | } |
1452 | 1401 | ||
1453 | asmlinkage long | ||
1454 | sysn32_rt_sigtimedwait(const sigset_t __user *uthese, | ||
1455 | siginfo_t __user *uinfo, | ||
1456 | const struct compat_timespec __user *uts32, | ||
1457 | size_t sigsetsize) | ||
1458 | { | ||
1459 | struct timespec __user *uts = NULL; | ||
1460 | |||
1461 | if (uts32) { | ||
1462 | struct timespec ts; | ||
1463 | uts = compat_alloc_user_space(sizeof(struct timespec)); | ||
1464 | if (get_user(ts.tv_sec, &uts32->tv_sec) || | ||
1465 | get_user(ts.tv_nsec, &uts32->tv_nsec) || | ||
1466 | copy_to_user (uts, &ts, sizeof (ts))) | ||
1467 | return -EFAULT; | ||
1468 | } | ||
1469 | return sys_rt_sigtimedwait(uthese, uinfo, uts, sigsetsize); | ||
1470 | } | ||
1471 | |||
1472 | save_static_function(sys32_clone); | 1402 | save_static_function(sys32_clone); |
1473 | __attribute_used__ noinline static int | 1403 | __attribute_used__ noinline static int |
1474 | _sys32_clone(nabi_no_regargs struct pt_regs regs) | 1404 | _sys32_clone(nabi_no_regargs struct pt_regs regs) |
diff --git a/arch/mips/kernel/process.c b/arch/mips/kernel/process.c index fa98f10d0132..092679c2dca9 100644 --- a/arch/mips/kernel/process.c +++ b/arch/mips/kernel/process.c | |||
@@ -4,6 +4,7 @@ | |||
4 | * for more details. | 4 | * for more details. |
5 | * | 5 | * |
6 | * Copyright (C) 1994 - 1999, 2000 by Ralf Baechle and others. | 6 | * Copyright (C) 1994 - 1999, 2000 by Ralf Baechle and others. |
7 | * Copyright (C) 2005, 2006 by Ralf Baechle (ralf@linux-mips.org) | ||
7 | * Copyright (C) 1999, 2000 Silicon Graphics, Inc. | 8 | * Copyright (C) 1999, 2000 Silicon Graphics, Inc. |
8 | * Copyright (C) 2004 Thiemo Seufer | 9 | * Copyright (C) 2004 Thiemo Seufer |
9 | */ | 10 | */ |
@@ -24,6 +25,7 @@ | |||
24 | #include <linux/a.out.h> | 25 | #include <linux/a.out.h> |
25 | #include <linux/init.h> | 26 | #include <linux/init.h> |
26 | #include <linux/completion.h> | 27 | #include <linux/completion.h> |
28 | #include <linux/kallsyms.h> | ||
27 | 29 | ||
28 | #include <asm/abi.h> | 30 | #include <asm/abi.h> |
29 | #include <asm/bootinfo.h> | 31 | #include <asm/bootinfo.h> |
@@ -58,8 +60,8 @@ ATTRIB_NORET void cpu_idle(void) | |||
58 | } | 60 | } |
59 | } | 61 | } |
60 | 62 | ||
61 | extern int do_signal(sigset_t *oldset, struct pt_regs *regs); | 63 | extern void do_signal(struct pt_regs *regs); |
62 | extern int do_signal32(sigset_t *oldset, struct pt_regs *regs); | 64 | extern void do_signal32(struct pt_regs *regs); |
63 | 65 | ||
64 | /* | 66 | /* |
65 | * Native o32 and N64 ABI without DSP ASE | 67 | * Native o32 and N64 ABI without DSP ASE |
@@ -271,46 +273,19 @@ long kernel_thread(int (*fn)(void *), void *arg, unsigned long flags) | |||
271 | 273 | ||
272 | static struct mips_frame_info { | 274 | static struct mips_frame_info { |
273 | void *func; | 275 | void *func; |
274 | int omit_fp; /* compiled without fno-omit-frame-pointer */ | 276 | unsigned long func_size; |
275 | int frame_offset; | 277 | int frame_size; |
276 | int pc_offset; | 278 | int pc_offset; |
277 | } schedule_frame, mfinfo[] = { | 279 | } *schedule_frame, mfinfo[64]; |
278 | { schedule, 0 }, /* must be first */ | 280 | static int mfinfo_num; |
279 | /* arch/mips/kernel/semaphore.c */ | ||
280 | { __down, 1 }, | ||
281 | { __down_interruptible, 1 }, | ||
282 | /* kernel/sched.c */ | ||
283 | #ifdef CONFIG_PREEMPT | ||
284 | { preempt_schedule, 0 }, | ||
285 | #endif | ||
286 | { wait_for_completion, 0 }, | ||
287 | { interruptible_sleep_on, 0 }, | ||
288 | { interruptible_sleep_on_timeout, 0 }, | ||
289 | { sleep_on, 0 }, | ||
290 | { sleep_on_timeout, 0 }, | ||
291 | { yield, 0 }, | ||
292 | { io_schedule, 0 }, | ||
293 | { io_schedule_timeout, 0 }, | ||
294 | #if defined(CONFIG_SMP) && defined(CONFIG_PREEMPT) | ||
295 | { __preempt_spin_lock, 0 }, | ||
296 | { __preempt_write_lock, 0 }, | ||
297 | #endif | ||
298 | /* kernel/timer.c */ | ||
299 | { schedule_timeout, 1 }, | ||
300 | /* { nanosleep_restart, 1 }, */ | ||
301 | /* lib/rwsem-spinlock.c */ | ||
302 | { __down_read, 1 }, | ||
303 | { __down_write, 1 }, | ||
304 | }; | ||
305 | 281 | ||
306 | static int mips_frame_info_initialized; | ||
307 | static int __init get_frame_info(struct mips_frame_info *info) | 282 | static int __init get_frame_info(struct mips_frame_info *info) |
308 | { | 283 | { |
309 | int i; | 284 | int i; |
310 | void *func = info->func; | 285 | void *func = info->func; |
311 | union mips_instruction *ip = (union mips_instruction *)func; | 286 | union mips_instruction *ip = (union mips_instruction *)func; |
312 | info->pc_offset = -1; | 287 | info->pc_offset = -1; |
313 | info->frame_offset = info->omit_fp ? 0 : -1; | 288 | info->frame_size = 0; |
314 | for (i = 0; i < 128; i++, ip++) { | 289 | for (i = 0; i < 128; i++, ip++) { |
315 | /* if jal, jalr, jr, stop. */ | 290 | /* if jal, jalr, jr, stop. */ |
316 | if (ip->j_format.opcode == jal_op || | 291 | if (ip->j_format.opcode == jal_op || |
@@ -319,6 +294,23 @@ static int __init get_frame_info(struct mips_frame_info *info) | |||
319 | ip->r_format.func == jr_op))) | 294 | ip->r_format.func == jr_op))) |
320 | break; | 295 | break; |
321 | 296 | ||
297 | if (info->func_size && i >= info->func_size / 4) | ||
298 | break; | ||
299 | if ( | ||
300 | #ifdef CONFIG_32BIT | ||
301 | ip->i_format.opcode == addiu_op && | ||
302 | #endif | ||
303 | #ifdef CONFIG_64BIT | ||
304 | ip->i_format.opcode == daddiu_op && | ||
305 | #endif | ||
306 | ip->i_format.rs == 29 && | ||
307 | ip->i_format.rt == 29) { | ||
308 | /* addiu/daddiu sp,sp,-imm */ | ||
309 | if (info->frame_size) | ||
310 | continue; | ||
311 | info->frame_size = - ip->i_format.simmediate; | ||
312 | } | ||
313 | |||
322 | if ( | 314 | if ( |
323 | #ifdef CONFIG_32BIT | 315 | #ifdef CONFIG_32BIT |
324 | ip->i_format.opcode == sw_op && | 316 | ip->i_format.opcode == sw_op && |
@@ -326,31 +318,20 @@ static int __init get_frame_info(struct mips_frame_info *info) | |||
326 | #ifdef CONFIG_64BIT | 318 | #ifdef CONFIG_64BIT |
327 | ip->i_format.opcode == sd_op && | 319 | ip->i_format.opcode == sd_op && |
328 | #endif | 320 | #endif |
329 | ip->i_format.rs == 29) | 321 | ip->i_format.rs == 29 && |
330 | { | 322 | ip->i_format.rt == 31) { |
331 | /* sw / sd $ra, offset($sp) */ | 323 | /* sw / sd $ra, offset($sp) */ |
332 | if (ip->i_format.rt == 31) { | 324 | if (info->pc_offset != -1) |
333 | if (info->pc_offset != -1) | 325 | continue; |
334 | continue; | 326 | info->pc_offset = |
335 | info->pc_offset = | 327 | ip->i_format.simmediate / sizeof(long); |
336 | ip->i_format.simmediate / sizeof(long); | ||
337 | } | ||
338 | /* sw / sd $s8, offset($sp) */ | ||
339 | if (ip->i_format.rt == 30) { | ||
340 | //#if 0 /* gcc 3.4 does aggressive optimization... */ | ||
341 | if (info->frame_offset != -1) | ||
342 | continue; | ||
343 | //#endif | ||
344 | info->frame_offset = | ||
345 | ip->i_format.simmediate / sizeof(long); | ||
346 | } | ||
347 | } | 328 | } |
348 | } | 329 | } |
349 | if (info->pc_offset == -1 || info->frame_offset == -1) { | 330 | if (info->pc_offset == -1 || info->frame_size == 0) { |
350 | printk("Can't analyze prologue code at %p\n", func); | 331 | if (func == schedule) |
332 | printk("Can't analyze prologue code at %p\n", func); | ||
351 | info->pc_offset = -1; | 333 | info->pc_offset = -1; |
352 | info->frame_offset = -1; | 334 | info->frame_size = 0; |
353 | return -1; | ||
354 | } | 335 | } |
355 | 336 | ||
356 | return 0; | 337 | return 0; |
@@ -358,25 +339,36 @@ static int __init get_frame_info(struct mips_frame_info *info) | |||
358 | 339 | ||
359 | static int __init frame_info_init(void) | 340 | static int __init frame_info_init(void) |
360 | { | 341 | { |
361 | int i, found; | 342 | int i; |
362 | for (i = 0; i < ARRAY_SIZE(mfinfo); i++) | 343 | #ifdef CONFIG_KALLSYMS |
363 | if (get_frame_info(&mfinfo[i])) | 344 | char *modname; |
364 | return -1; | 345 | char namebuf[KSYM_NAME_LEN + 1]; |
365 | schedule_frame = mfinfo[0]; | 346 | unsigned long start, size, ofs; |
366 | /* bubble sort */ | 347 | extern char __sched_text_start[], __sched_text_end[]; |
367 | do { | 348 | extern char __lock_text_start[], __lock_text_end[]; |
368 | struct mips_frame_info tmp; | 349 | |
369 | found = 0; | 350 | start = (unsigned long)__sched_text_start; |
370 | for (i = 1; i < ARRAY_SIZE(mfinfo); i++) { | 351 | for (i = 0; i < ARRAY_SIZE(mfinfo); i++) { |
371 | if (mfinfo[i-1].func > mfinfo[i].func) { | 352 | if (start == (unsigned long)schedule) |
372 | tmp = mfinfo[i]; | 353 | schedule_frame = &mfinfo[i]; |
373 | mfinfo[i] = mfinfo[i-1]; | 354 | if (!kallsyms_lookup(start, &size, &ofs, &modname, namebuf)) |
374 | mfinfo[i-1] = tmp; | 355 | break; |
375 | found = 1; | 356 | mfinfo[i].func = (void *)(start + ofs); |
376 | } | 357 | mfinfo[i].func_size = size; |
377 | } | 358 | start += size - ofs; |
378 | } while (found); | 359 | if (start >= (unsigned long)__lock_text_end) |
379 | mips_frame_info_initialized = 1; | 360 | break; |
361 | if (start == (unsigned long)__sched_text_end) | ||
362 | start = (unsigned long)__lock_text_start; | ||
363 | } | ||
364 | #else | ||
365 | mfinfo[0].func = schedule; | ||
366 | schedule_frame = &mfinfo[0]; | ||
367 | #endif | ||
368 | for (i = 0; i < ARRAY_SIZE(mfinfo) && mfinfo[i].func; i++) | ||
369 | get_frame_info(&mfinfo[i]); | ||
370 | |||
371 | mfinfo_num = i; | ||
380 | return 0; | 372 | return 0; |
381 | } | 373 | } |
382 | 374 | ||
@@ -393,47 +385,52 @@ unsigned long thread_saved_pc(struct task_struct *tsk) | |||
393 | if (t->reg31 == (unsigned long) ret_from_fork) | 385 | if (t->reg31 == (unsigned long) ret_from_fork) |
394 | return t->reg31; | 386 | return t->reg31; |
395 | 387 | ||
396 | if (schedule_frame.pc_offset < 0) | 388 | if (!schedule_frame || schedule_frame->pc_offset < 0) |
397 | return 0; | 389 | return 0; |
398 | return ((unsigned long *)t->reg29)[schedule_frame.pc_offset]; | 390 | return ((unsigned long *)t->reg29)[schedule_frame->pc_offset]; |
399 | } | 391 | } |
400 | 392 | ||
401 | /* get_wchan - a maintenance nightmare^W^Wpain in the ass ... */ | 393 | /* get_wchan - a maintenance nightmare^W^Wpain in the ass ... */ |
402 | unsigned long get_wchan(struct task_struct *p) | 394 | unsigned long get_wchan(struct task_struct *p) |
403 | { | 395 | { |
404 | unsigned long stack_page; | 396 | unsigned long stack_page; |
405 | unsigned long frame, pc; | 397 | unsigned long pc; |
398 | #ifdef CONFIG_KALLSYMS | ||
399 | unsigned long frame; | ||
400 | #endif | ||
406 | 401 | ||
407 | if (!p || p == current || p->state == TASK_RUNNING) | 402 | if (!p || p == current || p->state == TASK_RUNNING) |
408 | return 0; | 403 | return 0; |
409 | 404 | ||
410 | stack_page = (unsigned long)task_stack_page(p); | 405 | stack_page = (unsigned long)task_stack_page(p); |
411 | if (!stack_page || !mips_frame_info_initialized) | 406 | if (!stack_page || !mfinfo_num) |
412 | return 0; | 407 | return 0; |
413 | 408 | ||
414 | pc = thread_saved_pc(p); | 409 | pc = thread_saved_pc(p); |
410 | #ifdef CONFIG_KALLSYMS | ||
415 | if (!in_sched_functions(pc)) | 411 | if (!in_sched_functions(pc)) |
416 | return pc; | 412 | return pc; |
417 | 413 | ||
418 | frame = ((unsigned long *)p->thread.reg30)[schedule_frame.frame_offset]; | 414 | frame = p->thread.reg29 + schedule_frame->frame_size; |
419 | do { | 415 | do { |
420 | int i; | 416 | int i; |
421 | 417 | ||
422 | if (frame < stack_page || frame > stack_page + THREAD_SIZE - 32) | 418 | if (frame < stack_page || frame > stack_page + THREAD_SIZE - 32) |
423 | return 0; | 419 | return 0; |
424 | 420 | ||
425 | for (i = ARRAY_SIZE(mfinfo) - 1; i >= 0; i--) { | 421 | for (i = mfinfo_num - 1; i >= 0; i--) { |
426 | if (pc >= (unsigned long) mfinfo[i].func) | 422 | if (pc >= (unsigned long) mfinfo[i].func) |
427 | break; | 423 | break; |
428 | } | 424 | } |
429 | if (i < 0) | 425 | if (i < 0) |
430 | break; | 426 | break; |
431 | 427 | ||
432 | if (mfinfo[i].omit_fp) | ||
433 | break; | ||
434 | pc = ((unsigned long *)frame)[mfinfo[i].pc_offset]; | 428 | pc = ((unsigned long *)frame)[mfinfo[i].pc_offset]; |
435 | frame = ((unsigned long *)frame)[mfinfo[i].frame_offset]; | 429 | if (!mfinfo[i].frame_size) |
430 | break; | ||
431 | frame += mfinfo[i].frame_size; | ||
436 | } while (in_sched_functions(pc)); | 432 | } while (in_sched_functions(pc)); |
433 | #endif | ||
437 | 434 | ||
438 | return pc; | 435 | return pc; |
439 | } | 436 | } |
diff --git a/arch/mips/kernel/ptrace32.c b/arch/mips/kernel/ptrace32.c index 0c82b25d8c6d..0d5cf97af727 100644 --- a/arch/mips/kernel/ptrace32.c +++ b/arch/mips/kernel/ptrace32.c | |||
@@ -88,7 +88,7 @@ asmlinkage int sys32_ptrace(int request, int pid, int addr, int data) | |||
88 | ret = -EIO; | 88 | ret = -EIO; |
89 | if (copied != sizeof(tmp)) | 89 | if (copied != sizeof(tmp)) |
90 | break; | 90 | break; |
91 | ret = put_user(tmp, (unsigned int *) (unsigned long) data); | 91 | ret = put_user(tmp, (unsigned int __user *) (unsigned long) data); |
92 | break; | 92 | break; |
93 | } | 93 | } |
94 | 94 | ||
@@ -174,8 +174,10 @@ asmlinkage int sys32_ptrace(int request, int pid, int addr, int data) | |||
174 | case FPC_EIR: { /* implementation / version register */ | 174 | case FPC_EIR: { /* implementation / version register */ |
175 | unsigned int flags; | 175 | unsigned int flags; |
176 | 176 | ||
177 | if (!cpu_has_fpu) | 177 | if (!cpu_has_fpu) { |
178 | tmp = 0; | ||
178 | break; | 179 | break; |
180 | } | ||
179 | 181 | ||
180 | preempt_disable(); | 182 | preempt_disable(); |
181 | if (cpu_has_mipsmt) { | 183 | if (cpu_has_mipsmt) { |
@@ -194,15 +196,18 @@ asmlinkage int sys32_ptrace(int request, int pid, int addr, int data) | |||
194 | preempt_enable(); | 196 | preempt_enable(); |
195 | break; | 197 | break; |
196 | } | 198 | } |
197 | case DSP_BASE ... DSP_BASE + 5: | 199 | case DSP_BASE ... DSP_BASE + 5: { |
200 | dspreg_t *dregs; | ||
201 | |||
198 | if (!cpu_has_dsp) { | 202 | if (!cpu_has_dsp) { |
199 | tmp = 0; | 203 | tmp = 0; |
200 | ret = -EIO; | 204 | ret = -EIO; |
201 | goto out_tsk; | 205 | goto out_tsk; |
202 | } | 206 | } |
203 | dspreg_t *dregs = __get_dsp_regs(child); | 207 | dregs = __get_dsp_regs(child); |
204 | tmp = (unsigned long) (dregs[addr - DSP_BASE]); | 208 | tmp = (unsigned long) (dregs[addr - DSP_BASE]); |
205 | break; | 209 | break; |
210 | } | ||
206 | case DSP_CONTROL: | 211 | case DSP_CONTROL: |
207 | if (!cpu_has_dsp) { | 212 | if (!cpu_has_dsp) { |
208 | tmp = 0; | 213 | tmp = 0; |
@@ -216,7 +221,7 @@ asmlinkage int sys32_ptrace(int request, int pid, int addr, int data) | |||
216 | ret = -EIO; | 221 | ret = -EIO; |
217 | goto out_tsk; | 222 | goto out_tsk; |
218 | } | 223 | } |
219 | ret = put_user(tmp, (unsigned *) (unsigned long) data); | 224 | ret = put_user(tmp, (unsigned __user *) (unsigned long) data); |
220 | break; | 225 | break; |
221 | } | 226 | } |
222 | 227 | ||
@@ -304,15 +309,18 @@ asmlinkage int sys32_ptrace(int request, int pid, int addr, int data) | |||
304 | else | 309 | else |
305 | child->thread.fpu.soft.fcr31 = data; | 310 | child->thread.fpu.soft.fcr31 = data; |
306 | break; | 311 | break; |
307 | case DSP_BASE ... DSP_BASE + 5: | 312 | case DSP_BASE ... DSP_BASE + 5: { |
313 | dspreg_t *dregs; | ||
314 | |||
308 | if (!cpu_has_dsp) { | 315 | if (!cpu_has_dsp) { |
309 | ret = -EIO; | 316 | ret = -EIO; |
310 | break; | 317 | break; |
311 | } | 318 | } |
312 | 319 | ||
313 | dspreg_t *dregs = __get_dsp_regs(child); | 320 | dregs = __get_dsp_regs(child); |
314 | dregs[addr - DSP_BASE] = data; | 321 | dregs[addr - DSP_BASE] = data; |
315 | break; | 322 | break; |
323 | } | ||
316 | case DSP_CONTROL: | 324 | case DSP_CONTROL: |
317 | if (!cpu_has_dsp) { | 325 | if (!cpu_has_dsp) { |
318 | ret = -EIO; | 326 | ret = -EIO; |
diff --git a/arch/mips/kernel/reset.c b/arch/mips/kernel/reset.c index 5e37df3111ad..621037db2290 100644 --- a/arch/mips/kernel/reset.c +++ b/arch/mips/kernel/reset.c | |||
@@ -3,17 +3,16 @@ | |||
3 | * License. See the file "COPYING" in the main directory of this archive | 3 | * License. See the file "COPYING" in the main directory of this archive |
4 | * for more details. | 4 | * for more details. |
5 | * | 5 | * |
6 | * Copyright (C) 2001 by Ralf Baechle | 6 | * Copyright (C) 2001, 06 by Ralf Baechle (ralf@linux-mips.org) |
7 | * Copyright (C) 2001 MIPS Technologies, Inc. | 7 | * Copyright (C) 2001 MIPS Technologies, Inc. |
8 | */ | 8 | */ |
9 | #include <linux/kernel.h> | 9 | #include <linux/kernel.h> |
10 | #include <linux/module.h> | 10 | #include <linux/module.h> |
11 | #include <linux/pm.h> | ||
11 | #include <linux/types.h> | 12 | #include <linux/types.h> |
12 | #include <linux/reboot.h> | 13 | #include <linux/reboot.h> |
13 | #include <asm/reboot.h> | ||
14 | 14 | ||
15 | void (*pm_power_off)(void); | 15 | #include <asm/reboot.h> |
16 | EXPORT_SYMBOL(pm_power_off); | ||
17 | 16 | ||
18 | /* | 17 | /* |
19 | * Urgs ... Too many MIPS machines to handle this in a generic way. | 18 | * Urgs ... Too many MIPS machines to handle this in a generic way. |
@@ -22,23 +21,22 @@ EXPORT_SYMBOL(pm_power_off); | |||
22 | */ | 21 | */ |
23 | void (*_machine_restart)(char *command); | 22 | void (*_machine_restart)(char *command); |
24 | void (*_machine_halt)(void); | 23 | void (*_machine_halt)(void); |
25 | void (*_machine_power_off)(void); | 24 | void (*pm_power_off)(void); |
26 | 25 | ||
27 | void machine_restart(char *command) | 26 | void machine_restart(char *command) |
28 | { | 27 | { |
29 | _machine_restart(command); | 28 | if (_machine_restart) |
29 | _machine_restart(command); | ||
30 | } | 30 | } |
31 | 31 | ||
32 | void machine_halt(void) | 32 | void machine_halt(void) |
33 | { | 33 | { |
34 | _machine_halt(); | 34 | if (_machine_halt) |
35 | _machine_halt(); | ||
35 | } | 36 | } |
36 | 37 | ||
37 | void machine_power_off(void) | 38 | void machine_power_off(void) |
38 | { | 39 | { |
39 | if (pm_power_off) | 40 | if (pm_power_off) |
40 | pm_power_off(); | 41 | pm_power_off(); |
41 | |||
42 | _machine_power_off(); | ||
43 | } | 42 | } |
44 | |||
diff --git a/arch/mips/kernel/rtlx.c b/arch/mips/kernel/rtlx.c index 1d855112bac2..986a9cf23067 100644 --- a/arch/mips/kernel/rtlx.c +++ b/arch/mips/kernel/rtlx.c | |||
@@ -1,5 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (C) 2005 MIPS Technologies, Inc. All rights reserved. | 2 | * Copyright (C) 2005 MIPS Technologies, Inc. All rights reserved. |
3 | * Copyright (C) 2005, 06 Ralf Baechle (ralf@linux-mips.org) | ||
3 | * | 4 | * |
4 | * This program is free software; you can distribute it and/or modify it | 5 | * This program is free software; you can distribute it and/or modify it |
5 | * under the terms of the GNU General Public License (Version 2) as | 6 | * under the terms of the GNU General Public License (Version 2) as |
@@ -20,9 +21,12 @@ | |||
20 | #include <linux/module.h> | 21 | #include <linux/module.h> |
21 | #include <linux/fs.h> | 22 | #include <linux/fs.h> |
22 | #include <linux/init.h> | 23 | #include <linux/init.h> |
24 | #include <linux/interrupt.h> | ||
25 | #include <linux/irq.h> | ||
23 | #include <linux/poll.h> | 26 | #include <linux/poll.h> |
24 | #include <linux/sched.h> | 27 | #include <linux/sched.h> |
25 | #include <linux/wait.h> | 28 | #include <linux/wait.h> |
29 | |||
26 | #include <asm/mipsmtregs.h> | 30 | #include <asm/mipsmtregs.h> |
27 | #include <asm/bitops.h> | 31 | #include <asm/bitops.h> |
28 | #include <asm/cpu.h> | 32 | #include <asm/cpu.h> |
diff --git a/arch/mips/kernel/scall32-o32.S b/arch/mips/kernel/scall32-o32.S index a42e0e8caa7b..2f2dc54b2e26 100644 --- a/arch/mips/kernel/scall32-o32.S +++ b/arch/mips/kernel/scall32-o32.S | |||
@@ -617,6 +617,23 @@ einval: li v0, -EINVAL | |||
617 | sys sys_inotify_init 0 | 617 | sys sys_inotify_init 0 |
618 | sys sys_inotify_add_watch 3 /* 4285 */ | 618 | sys sys_inotify_add_watch 3 /* 4285 */ |
619 | sys sys_inotify_rm_watch 2 | 619 | sys sys_inotify_rm_watch 2 |
620 | sys sys_migrate_pages 4 | ||
621 | sys sys_openat 4 | ||
622 | sys sys_mkdirat 3 | ||
623 | sys sys_mknodat 4 /* 4290 */ | ||
624 | sys sys_fchownat 5 | ||
625 | sys sys_futimesat 3 | ||
626 | sys sys_fstatat64 4 | ||
627 | sys sys_unlinkat 3 | ||
628 | sys sys_renameat 4 /* 4295 */ | ||
629 | sys sys_linkat 5 | ||
630 | sys sys_symlinkat 3 | ||
631 | sys sys_readlinkat 4 | ||
632 | sys sys_fchmodat 3 | ||
633 | sys sys_faccessat 3 /* 4300 */ | ||
634 | sys sys_pselect6 6 | ||
635 | sys sys_ppoll 5 | ||
636 | sys sys_unshare 1 | ||
620 | .endm | 637 | .endm |
621 | 638 | ||
622 | /* We pre-compute the number of _instruction_ bytes needed to | 639 | /* We pre-compute the number of _instruction_ bytes needed to |
diff --git a/arch/mips/kernel/scall64-64.S b/arch/mips/kernel/scall64-64.S index 47bfbd416709..98bf25df56f3 100644 --- a/arch/mips/kernel/scall64-64.S +++ b/arch/mips/kernel/scall64-64.S | |||
@@ -443,3 +443,20 @@ sys_call_table: | |||
443 | PTR sys_inotify_init | 443 | PTR sys_inotify_init |
444 | PTR sys_inotify_add_watch | 444 | PTR sys_inotify_add_watch |
445 | PTR sys_inotify_rm_watch /* 5245 */ | 445 | PTR sys_inotify_rm_watch /* 5245 */ |
446 | PTR sys_migrate_pages | ||
447 | PTR sys_openat | ||
448 | PTR sys_mkdirat | ||
449 | PTR sys_mknodat | ||
450 | PTR sys_fchownat /* 5250 */ | ||
451 | PTR sys_futimesat | ||
452 | PTR sys_newfstatat | ||
453 | PTR sys_unlinkat | ||
454 | PTR sys_renameat | ||
455 | PTR sys_linkat /* 5255 */ | ||
456 | PTR sys_symlinkat | ||
457 | PTR sys_readlinkat | ||
458 | PTR sys_fchmodat | ||
459 | PTR sys_faccessat | ||
460 | PTR sys_pselect6 /* 5260 */ | ||
461 | PTR sys_ppoll | ||
462 | PTR sys_unshare | ||
diff --git a/arch/mips/kernel/scall64-n32.S b/arch/mips/kernel/scall64-n32.S index b465ced1758f..02c8267e45e7 100644 --- a/arch/mips/kernel/scall64-n32.S +++ b/arch/mips/kernel/scall64-n32.S | |||
@@ -195,7 +195,7 @@ EXPORT(sysn32_call_table) | |||
195 | PTR sys_fdatasync | 195 | PTR sys_fdatasync |
196 | PTR sys_truncate | 196 | PTR sys_truncate |
197 | PTR sys_ftruncate /* 6075 */ | 197 | PTR sys_ftruncate /* 6075 */ |
198 | PTR sys32_getdents | 198 | PTR compat_sys_getdents |
199 | PTR sys_getcwd | 199 | PTR sys_getcwd |
200 | PTR sys_chdir | 200 | PTR sys_chdir |
201 | PTR sys_fchdir | 201 | PTR sys_fchdir |
@@ -245,9 +245,9 @@ EXPORT(sysn32_call_table) | |||
245 | PTR sys_capget | 245 | PTR sys_capget |
246 | PTR sys_capset | 246 | PTR sys_capset |
247 | PTR sys32_rt_sigpending /* 6125 */ | 247 | PTR sys32_rt_sigpending /* 6125 */ |
248 | PTR sysn32_rt_sigtimedwait | 248 | PTR compat_sys_rt_sigtimedwait |
249 | PTR sys_rt_sigqueueinfo | 249 | PTR sys_rt_sigqueueinfo |
250 | PTR sys32_rt_sigsuspend | 250 | PTR sysn32_rt_sigsuspend |
251 | PTR sys32_sigaltstack | 251 | PTR sys32_sigaltstack |
252 | PTR compat_sys_utime /* 6130 */ | 252 | PTR compat_sys_utime /* 6130 */ |
253 | PTR sys_mknod | 253 | PTR sys_mknod |
@@ -369,3 +369,20 @@ EXPORT(sysn32_call_table) | |||
369 | PTR sys_inotify_init | 369 | PTR sys_inotify_init |
370 | PTR sys_inotify_add_watch | 370 | PTR sys_inotify_add_watch |
371 | PTR sys_inotify_rm_watch | 371 | PTR sys_inotify_rm_watch |
372 | PTR sys_migrate_pages /* 6250 */ | ||
373 | PTR sys_openat | ||
374 | PTR sys_mkdirat | ||
375 | PTR sys_mknodat | ||
376 | PTR sys_fchownat | ||
377 | PTR sys_futimesat /* 6255 */ | ||
378 | PTR sys_newfstatat | ||
379 | PTR sys_unlinkat | ||
380 | PTR sys_renameat | ||
381 | PTR sys_linkat | ||
382 | PTR sys_symlinkat /* 6260 */ | ||
383 | PTR sys_readlinkat | ||
384 | PTR sys_fchmodat | ||
385 | PTR sys_faccessat | ||
386 | PTR sys_pselect6 | ||
387 | PTR sys_ppoll /* 6265 */ | ||
388 | PTR sys_unshare | ||
diff --git a/arch/mips/kernel/scall64-o32.S b/arch/mips/kernel/scall64-o32.S index 3d338ca7eeeb..797e0d874889 100644 --- a/arch/mips/kernel/scall64-o32.S +++ b/arch/mips/kernel/scall64-o32.S | |||
@@ -293,7 +293,7 @@ sys_call_table: | |||
293 | PTR sys_uselib | 293 | PTR sys_uselib |
294 | PTR sys_swapon | 294 | PTR sys_swapon |
295 | PTR sys_reboot | 295 | PTR sys_reboot |
296 | PTR sys32_readdir | 296 | PTR compat_sys_old_readdir |
297 | PTR old_mmap /* 4090 */ | 297 | PTR old_mmap /* 4090 */ |
298 | PTR sys_munmap | 298 | PTR sys_munmap |
299 | PTR sys_truncate | 299 | PTR sys_truncate |
@@ -345,7 +345,7 @@ sys_call_table: | |||
345 | PTR sys_setfsuid | 345 | PTR sys_setfsuid |
346 | PTR sys_setfsgid | 346 | PTR sys_setfsgid |
347 | PTR sys32_llseek /* 4140 */ | 347 | PTR sys32_llseek /* 4140 */ |
348 | PTR sys32_getdents | 348 | PTR compat_sys_getdents |
349 | PTR compat_sys_select | 349 | PTR compat_sys_select |
350 | PTR sys_flock | 350 | PTR sys_flock |
351 | PTR sys_msync | 351 | PTR sys_msync |
@@ -491,4 +491,21 @@ sys_call_table: | |||
491 | PTR sys_inotify_init | 491 | PTR sys_inotify_init |
492 | PTR sys_inotify_add_watch /* 4285 */ | 492 | PTR sys_inotify_add_watch /* 4285 */ |
493 | PTR sys_inotify_rm_watch | 493 | PTR sys_inotify_rm_watch |
494 | PTR sys_migrate_pages | ||
495 | PTR compat_sys_openat | ||
496 | PTR sys_mkdirat | ||
497 | PTR sys_mknodat /* 4290 */ | ||
498 | PTR sys_fchownat | ||
499 | PTR compat_sys_futimesat | ||
500 | PTR compat_sys_newfstatat | ||
501 | PTR sys_unlinkat | ||
502 | PTR sys_renameat /* 4295 */ | ||
503 | PTR sys_linkat | ||
504 | PTR sys_symlinkat | ||
505 | PTR sys_readlinkat | ||
506 | PTR sys_fchmodat | ||
507 | PTR sys_faccessat /* 4300 */ | ||
508 | PTR sys_pselect6 | ||
509 | PTR sys_ppoll | ||
510 | PTR sys_unshare | ||
494 | .size sys_call_table,.-sys_call_table | 511 | .size sys_call_table,.-sys_call_table |
diff --git a/arch/mips/kernel/setup.c b/arch/mips/kernel/setup.c index d86affa21278..d9293c558e41 100644 --- a/arch/mips/kernel/setup.c +++ b/arch/mips/kernel/setup.c | |||
@@ -540,6 +540,9 @@ void __init setup_arch(char **cmdline_p) | |||
540 | sparse_init(); | 540 | sparse_init(); |
541 | paging_init(); | 541 | paging_init(); |
542 | resource_init(); | 542 | resource_init(); |
543 | #ifdef CONFIG_SMP | ||
544 | plat_smp_setup(); | ||
545 | #endif | ||
543 | } | 546 | } |
544 | 547 | ||
545 | int __init fpu_disable(char *s) | 548 | int __init fpu_disable(char *s) |
diff --git a/arch/mips/kernel/signal-common.h b/arch/mips/kernel/signal-common.h index 0f66ae5838b9..36bfc2588aa3 100644 --- a/arch/mips/kernel/signal-common.h +++ b/arch/mips/kernel/signal-common.h | |||
@@ -11,7 +11,7 @@ | |||
11 | #include <linux/config.h> | 11 | #include <linux/config.h> |
12 | 12 | ||
13 | static inline int | 13 | static inline int |
14 | setup_sigcontext(struct pt_regs *regs, struct sigcontext *sc) | 14 | setup_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc) |
15 | { | 15 | { |
16 | int err = 0; | 16 | int err = 0; |
17 | 17 | ||
@@ -82,7 +82,7 @@ out: | |||
82 | } | 82 | } |
83 | 83 | ||
84 | static inline int | 84 | static inline int |
85 | restore_sigcontext(struct pt_regs *regs, struct sigcontext *sc) | 85 | restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc) |
86 | { | 86 | { |
87 | unsigned int used_math; | 87 | unsigned int used_math; |
88 | unsigned long treg; | 88 | unsigned long treg; |
@@ -157,7 +157,7 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext *sc) | |||
157 | /* | 157 | /* |
158 | * Determine which stack to use.. | 158 | * Determine which stack to use.. |
159 | */ | 159 | */ |
160 | static inline void * | 160 | static inline void __user * |
161 | get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, size_t frame_size) | 161 | get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, size_t frame_size) |
162 | { | 162 | { |
163 | unsigned long sp; | 163 | unsigned long sp; |
@@ -176,7 +176,7 @@ get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, size_t frame_size) | |||
176 | if ((ka->sa.sa_flags & SA_ONSTACK) && (sas_ss_flags (sp) == 0)) | 176 | if ((ka->sa.sa_flags & SA_ONSTACK) && (sas_ss_flags (sp) == 0)) |
177 | sp = current->sas_ss_sp + current->sas_ss_size; | 177 | sp = current->sas_ss_sp + current->sas_ss_size; |
178 | 178 | ||
179 | return (void *)((sp - frame_size) & (ICACHE_REFILLS_WORKAROUND_WAR ? 32 : ALMASK)); | 179 | return (void __user *)((sp - frame_size) & (ICACHE_REFILLS_WORKAROUND_WAR ? ~(cpu_icache_line_size()-1) : ALMASK)); |
180 | } | 180 | } |
181 | 181 | ||
182 | static inline int install_sigtramp(unsigned int __user *tramp, | 182 | static inline int install_sigtramp(unsigned int __user *tramp, |
diff --git a/arch/mips/kernel/signal.c b/arch/mips/kernel/signal.c index 7d1800fe7038..c974cc9b30eb 100644 --- a/arch/mips/kernel/signal.c +++ b/arch/mips/kernel/signal.c | |||
@@ -39,8 +39,6 @@ | |||
39 | 39 | ||
40 | #define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP))) | 40 | #define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP))) |
41 | 41 | ||
42 | int do_signal(sigset_t *oldset, struct pt_regs *regs); | ||
43 | |||
44 | /* | 42 | /* |
45 | * Atomically swap in the new signal mask, and wait for a signal. | 43 | * Atomically swap in the new signal mask, and wait for a signal. |
46 | */ | 44 | */ |
@@ -50,7 +48,7 @@ save_static_function(sys_sigsuspend); | |||
50 | __attribute_used__ noinline static int | 48 | __attribute_used__ noinline static int |
51 | _sys_sigsuspend(nabi_no_regargs struct pt_regs regs) | 49 | _sys_sigsuspend(nabi_no_regargs struct pt_regs regs) |
52 | { | 50 | { |
53 | sigset_t saveset, newset; | 51 | sigset_t newset; |
54 | sigset_t __user *uset; | 52 | sigset_t __user *uset; |
55 | 53 | ||
56 | uset = (sigset_t __user *) regs.regs[4]; | 54 | uset = (sigset_t __user *) regs.regs[4]; |
@@ -59,19 +57,15 @@ _sys_sigsuspend(nabi_no_regargs struct pt_regs regs) | |||
59 | sigdelsetmask(&newset, ~_BLOCKABLE); | 57 | sigdelsetmask(&newset, ~_BLOCKABLE); |
60 | 58 | ||
61 | spin_lock_irq(¤t->sighand->siglock); | 59 | spin_lock_irq(¤t->sighand->siglock); |
62 | saveset = current->blocked; | 60 | current->saved_sigmask = current->blocked; |
63 | current->blocked = newset; | 61 | current->blocked = newset; |
64 | recalc_sigpending(); | 62 | recalc_sigpending(); |
65 | spin_unlock_irq(¤t->sighand->siglock); | 63 | spin_unlock_irq(¤t->sighand->siglock); |
66 | 64 | ||
67 | regs.regs[2] = EINTR; | 65 | current->state = TASK_INTERRUPTIBLE; |
68 | regs.regs[7] = 1; | 66 | schedule(); |
69 | while (1) { | 67 | set_thread_flag(TIF_RESTORE_SIGMASK); |
70 | current->state = TASK_INTERRUPTIBLE; | 68 | return -ERESTARTNOHAND; |
71 | schedule(); | ||
72 | if (do_signal(&saveset, ®s)) | ||
73 | return -EINTR; | ||
74 | } | ||
75 | } | 69 | } |
76 | #endif | 70 | #endif |
77 | 71 | ||
@@ -79,7 +73,7 @@ save_static_function(sys_rt_sigsuspend); | |||
79 | __attribute_used__ noinline static int | 73 | __attribute_used__ noinline static int |
80 | _sys_rt_sigsuspend(nabi_no_regargs struct pt_regs regs) | 74 | _sys_rt_sigsuspend(nabi_no_regargs struct pt_regs regs) |
81 | { | 75 | { |
82 | sigset_t saveset, newset; | 76 | sigset_t newset; |
83 | sigset_t __user *unewset; | 77 | sigset_t __user *unewset; |
84 | size_t sigsetsize; | 78 | size_t sigsetsize; |
85 | 79 | ||
@@ -94,19 +88,15 @@ _sys_rt_sigsuspend(nabi_no_regargs struct pt_regs regs) | |||
94 | sigdelsetmask(&newset, ~_BLOCKABLE); | 88 | sigdelsetmask(&newset, ~_BLOCKABLE); |
95 | 89 | ||
96 | spin_lock_irq(¤t->sighand->siglock); | 90 | spin_lock_irq(¤t->sighand->siglock); |
97 | saveset = current->blocked; | 91 | current->saved_sigmask = current->blocked; |
98 | current->blocked = newset; | 92 | current->blocked = newset; |
99 | recalc_sigpending(); | 93 | recalc_sigpending(); |
100 | spin_unlock_irq(¤t->sighand->siglock); | 94 | spin_unlock_irq(¤t->sighand->siglock); |
101 | 95 | ||
102 | regs.regs[2] = EINTR; | 96 | current->state = TASK_INTERRUPTIBLE; |
103 | regs.regs[7] = 1; | 97 | schedule(); |
104 | while (1) { | 98 | set_thread_flag(TIF_RESTORE_SIGMASK); |
105 | current->state = TASK_INTERRUPTIBLE; | 99 | return -ERESTARTNOHAND; |
106 | schedule(); | ||
107 | if (do_signal(&saveset, ®s)) | ||
108 | return -EINTR; | ||
109 | } | ||
110 | } | 100 | } |
111 | 101 | ||
112 | #ifdef CONFIG_TRAD_SIGNALS | 102 | #ifdef CONFIG_TRAD_SIGNALS |
@@ -199,10 +189,10 @@ save_static_function(sys_sigreturn); | |||
199 | __attribute_used__ noinline static void | 189 | __attribute_used__ noinline static void |
200 | _sys_sigreturn(nabi_no_regargs struct pt_regs regs) | 190 | _sys_sigreturn(nabi_no_regargs struct pt_regs regs) |
201 | { | 191 | { |
202 | struct sigframe *frame; | 192 | struct sigframe __user *frame; |
203 | sigset_t blocked; | 193 | sigset_t blocked; |
204 | 194 | ||
205 | frame = (struct sigframe *) regs.regs[29]; | 195 | frame = (struct sigframe __user *) regs.regs[29]; |
206 | if (!access_ok(VERIFY_READ, frame, sizeof(*frame))) | 196 | if (!access_ok(VERIFY_READ, frame, sizeof(*frame))) |
207 | goto badframe; | 197 | goto badframe; |
208 | if (__copy_from_user(&blocked, &frame->sf_mask, sizeof(blocked))) | 198 | if (__copy_from_user(&blocked, &frame->sf_mask, sizeof(blocked))) |
@@ -236,11 +226,11 @@ save_static_function(sys_rt_sigreturn); | |||
236 | __attribute_used__ noinline static void | 226 | __attribute_used__ noinline static void |
237 | _sys_rt_sigreturn(nabi_no_regargs struct pt_regs regs) | 227 | _sys_rt_sigreturn(nabi_no_regargs struct pt_regs regs) |
238 | { | 228 | { |
239 | struct rt_sigframe *frame; | 229 | struct rt_sigframe __user *frame; |
240 | sigset_t set; | 230 | sigset_t set; |
241 | stack_t st; | 231 | stack_t st; |
242 | 232 | ||
243 | frame = (struct rt_sigframe *) regs.regs[29]; | 233 | frame = (struct rt_sigframe __user *) regs.regs[29]; |
244 | if (!access_ok(VERIFY_READ, frame, sizeof(*frame))) | 234 | if (!access_ok(VERIFY_READ, frame, sizeof(*frame))) |
245 | goto badframe; | 235 | goto badframe; |
246 | if (__copy_from_user(&set, &frame->rs_uc.uc_sigmask, sizeof(set))) | 236 | if (__copy_from_user(&set, &frame->rs_uc.uc_sigmask, sizeof(set))) |
@@ -259,7 +249,7 @@ _sys_rt_sigreturn(nabi_no_regargs struct pt_regs regs) | |||
259 | goto badframe; | 249 | goto badframe; |
260 | /* It is more difficult to avoid calling this function than to | 250 | /* It is more difficult to avoid calling this function than to |
261 | call it and ignore errors. */ | 251 | call it and ignore errors. */ |
262 | do_sigaltstack(&st, NULL, regs.regs[29]); | 252 | do_sigaltstack((stack_t __user *)&st, NULL, regs.regs[29]); |
263 | 253 | ||
264 | /* | 254 | /* |
265 | * Don't let your children do this ... | 255 | * Don't let your children do this ... |
@@ -279,7 +269,7 @@ badframe: | |||
279 | int setup_frame(struct k_sigaction * ka, struct pt_regs *regs, | 269 | int setup_frame(struct k_sigaction * ka, struct pt_regs *regs, |
280 | int signr, sigset_t *set) | 270 | int signr, sigset_t *set) |
281 | { | 271 | { |
282 | struct sigframe *frame; | 272 | struct sigframe __user *frame; |
283 | int err = 0; | 273 | int err = 0; |
284 | 274 | ||
285 | frame = get_sigframe(ka, regs, sizeof(*frame)); | 275 | frame = get_sigframe(ka, regs, sizeof(*frame)); |
@@ -315,18 +305,18 @@ int setup_frame(struct k_sigaction * ka, struct pt_regs *regs, | |||
315 | current->comm, current->pid, | 305 | current->comm, current->pid, |
316 | frame, regs->cp0_epc, frame->regs[31]); | 306 | frame, regs->cp0_epc, frame->regs[31]); |
317 | #endif | 307 | #endif |
318 | return 1; | 308 | return 0; |
319 | 309 | ||
320 | give_sigsegv: | 310 | give_sigsegv: |
321 | force_sigsegv(signr, current); | 311 | force_sigsegv(signr, current); |
322 | return 0; | 312 | return -EFAULT; |
323 | } | 313 | } |
324 | #endif | 314 | #endif |
325 | 315 | ||
326 | int setup_rt_frame(struct k_sigaction * ka, struct pt_regs *regs, | 316 | int setup_rt_frame(struct k_sigaction * ka, struct pt_regs *regs, |
327 | int signr, sigset_t *set, siginfo_t *info) | 317 | int signr, sigset_t *set, siginfo_t *info) |
328 | { | 318 | { |
329 | struct rt_sigframe *frame; | 319 | struct rt_sigframe __user *frame; |
330 | int err = 0; | 320 | int err = 0; |
331 | 321 | ||
332 | frame = get_sigframe(ka, regs, sizeof(*frame)); | 322 | frame = get_sigframe(ka, regs, sizeof(*frame)); |
@@ -340,7 +330,7 @@ int setup_rt_frame(struct k_sigaction * ka, struct pt_regs *regs, | |||
340 | 330 | ||
341 | /* Create the ucontext. */ | 331 | /* Create the ucontext. */ |
342 | err |= __put_user(0, &frame->rs_uc.uc_flags); | 332 | err |= __put_user(0, &frame->rs_uc.uc_flags); |
343 | err |= __put_user(0, &frame->rs_uc.uc_link); | 333 | err |= __put_user(NULL, &frame->rs_uc.uc_link); |
344 | err |= __put_user((void *)current->sas_ss_sp, | 334 | err |= __put_user((void *)current->sas_ss_sp, |
345 | &frame->rs_uc.uc_stack.ss_sp); | 335 | &frame->rs_uc.uc_stack.ss_sp); |
346 | err |= __put_user(sas_ss_flags(regs->regs[29]), | 336 | err |= __put_user(sas_ss_flags(regs->regs[29]), |
@@ -375,11 +365,11 @@ int setup_rt_frame(struct k_sigaction * ka, struct pt_regs *regs, | |||
375 | current->comm, current->pid, | 365 | current->comm, current->pid, |
376 | frame, regs->cp0_epc, regs->regs[31]); | 366 | frame, regs->cp0_epc, regs->regs[31]); |
377 | #endif | 367 | #endif |
378 | return 1; | 368 | return 0; |
379 | 369 | ||
380 | give_sigsegv: | 370 | give_sigsegv: |
381 | force_sigsegv(signr, current); | 371 | force_sigsegv(signr, current); |
382 | return 0; | 372 | return -EFAULT; |
383 | } | 373 | } |
384 | 374 | ||
385 | static inline int handle_signal(unsigned long sig, siginfo_t *info, | 375 | static inline int handle_signal(unsigned long sig, siginfo_t *info, |
@@ -393,7 +383,7 @@ static inline int handle_signal(unsigned long sig, siginfo_t *info, | |||
393 | regs->regs[2] = EINTR; | 383 | regs->regs[2] = EINTR; |
394 | break; | 384 | break; |
395 | case ERESTARTSYS: | 385 | case ERESTARTSYS: |
396 | if(!(ka->sa.sa_flags & SA_RESTART)) { | 386 | if (!(ka->sa.sa_flags & SA_RESTART)) { |
397 | regs->regs[2] = EINTR; | 387 | regs->regs[2] = EINTR; |
398 | break; | 388 | break; |
399 | } | 389 | } |
@@ -420,9 +410,10 @@ static inline int handle_signal(unsigned long sig, siginfo_t *info, | |||
420 | return ret; | 410 | return ret; |
421 | } | 411 | } |
422 | 412 | ||
423 | int do_signal(sigset_t *oldset, struct pt_regs *regs) | 413 | void do_signal(struct pt_regs *regs) |
424 | { | 414 | { |
425 | struct k_sigaction ka; | 415 | struct k_sigaction ka; |
416 | sigset_t *oldset; | ||
426 | siginfo_t info; | 417 | siginfo_t info; |
427 | int signr; | 418 | int signr; |
428 | 419 | ||
@@ -432,17 +423,31 @@ int do_signal(sigset_t *oldset, struct pt_regs *regs) | |||
432 | * if so. | 423 | * if so. |
433 | */ | 424 | */ |
434 | if (!user_mode(regs)) | 425 | if (!user_mode(regs)) |
435 | return 1; | 426 | return; |
436 | 427 | ||
437 | if (try_to_freeze()) | 428 | if (try_to_freeze()) |
438 | goto no_signal; | 429 | goto no_signal; |
439 | 430 | ||
440 | if (!oldset) | 431 | if (test_thread_flag(TIF_RESTORE_SIGMASK)) |
432 | oldset = ¤t->saved_sigmask; | ||
433 | else | ||
441 | oldset = ¤t->blocked; | 434 | oldset = ¤t->blocked; |
442 | 435 | ||
436 | |||
443 | signr = get_signal_to_deliver(&info, &ka, regs, NULL); | 437 | signr = get_signal_to_deliver(&info, &ka, regs, NULL); |
444 | if (signr > 0) | 438 | if (signr > 0) { |
445 | return handle_signal(signr, &info, &ka, oldset, regs); | 439 | /* Whee! Actually deliver the signal. */ |
440 | if (handle_signal(signr, &info, &ka, oldset, regs) == 0) { | ||
441 | /* | ||
442 | * A signal was successfully delivered; the saved | ||
443 | * sigmask will have been stored in the signal frame, | ||
444 | * and will be restored by sigreturn, so we can simply | ||
445 | * clear the TIF_RESTORE_SIGMASK flag. | ||
446 | */ | ||
447 | if (test_thread_flag(TIF_RESTORE_SIGMASK)) | ||
448 | clear_thread_flag(TIF_RESTORE_SIGMASK); | ||
449 | } | ||
450 | } | ||
446 | 451 | ||
447 | no_signal: | 452 | no_signal: |
448 | /* | 453 | /* |
@@ -463,18 +468,25 @@ no_signal: | |||
463 | regs->cp0_epc -= 4; | 468 | regs->cp0_epc -= 4; |
464 | } | 469 | } |
465 | } | 470 | } |
466 | return 0; | 471 | |
472 | /* | ||
473 | * If there's no signal to deliver, we just put the saved sigmask | ||
474 | * back | ||
475 | */ | ||
476 | if (test_thread_flag(TIF_RESTORE_SIGMASK)) { | ||
477 | clear_thread_flag(TIF_RESTORE_SIGMASK); | ||
478 | sigprocmask(SIG_SETMASK, ¤t->saved_sigmask, NULL); | ||
479 | } | ||
467 | } | 480 | } |
468 | 481 | ||
469 | /* | 482 | /* |
470 | * notification of userspace execution resumption | 483 | * notification of userspace execution resumption |
471 | * - triggered by current->work.notify_resume | 484 | * - triggered by the TIF_WORK_MASK flags |
472 | */ | 485 | */ |
473 | asmlinkage void do_notify_resume(struct pt_regs *regs, sigset_t *oldset, | 486 | asmlinkage void do_notify_resume(struct pt_regs *regs, void *unused, |
474 | __u32 thread_info_flags) | 487 | __u32 thread_info_flags) |
475 | { | 488 | { |
476 | /* deal with pending signal delivery */ | 489 | /* deal with pending signal delivery */ |
477 | if (thread_info_flags & _TIF_SIGPENDING) { | 490 | if (thread_info_flags & (_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK)) |
478 | current->thread.abi->do_signal(oldset, regs); | 491 | current->thread.abi->do_signal(regs); |
479 | } | ||
480 | } | 492 | } |
diff --git a/arch/mips/kernel/signal32.c b/arch/mips/kernel/signal32.c index 98b185bbc947..237cd8a2cd32 100644 --- a/arch/mips/kernel/signal32.c +++ b/arch/mips/kernel/signal32.c | |||
@@ -4,7 +4,7 @@ | |||
4 | * for more details. | 4 | * for more details. |
5 | * | 5 | * |
6 | * Copyright (C) 1991, 1992 Linus Torvalds | 6 | * Copyright (C) 1991, 1992 Linus Torvalds |
7 | * Copyright (C) 1994 - 2000 Ralf Baechle | 7 | * Copyright (C) 1994 - 2000, 2006 Ralf Baechle |
8 | * Copyright (C) 1999, 2000 Silicon Graphics, Inc. | 8 | * Copyright (C) 1999, 2000 Silicon Graphics, Inc. |
9 | */ | 9 | */ |
10 | #include <linux/cache.h> | 10 | #include <linux/cache.h> |
@@ -106,8 +106,6 @@ typedef struct compat_siginfo { | |||
106 | 106 | ||
107 | #define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP))) | 107 | #define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP))) |
108 | 108 | ||
109 | extern int do_signal32(sigset_t *oldset, struct pt_regs *regs); | ||
110 | |||
111 | /* 32-bit compatibility types */ | 109 | /* 32-bit compatibility types */ |
112 | 110 | ||
113 | #define _NSIG_BPW32 32 | 111 | #define _NSIG_BPW32 32 |
@@ -144,7 +142,7 @@ struct ucontext32 { | |||
144 | extern void __put_sigset_unknown_nsig(void); | 142 | extern void __put_sigset_unknown_nsig(void); |
145 | extern void __get_sigset_unknown_nsig(void); | 143 | extern void __get_sigset_unknown_nsig(void); |
146 | 144 | ||
147 | static inline int put_sigset(const sigset_t *kbuf, compat_sigset_t *ubuf) | 145 | static inline int put_sigset(const sigset_t *kbuf, compat_sigset_t __user *ubuf) |
148 | { | 146 | { |
149 | int err = 0; | 147 | int err = 0; |
150 | 148 | ||
@@ -198,7 +196,7 @@ __attribute_used__ noinline static int | |||
198 | _sys32_sigsuspend(nabi_no_regargs struct pt_regs regs) | 196 | _sys32_sigsuspend(nabi_no_regargs struct pt_regs regs) |
199 | { | 197 | { |
200 | compat_sigset_t *uset; | 198 | compat_sigset_t *uset; |
201 | sigset_t newset, saveset; | 199 | sigset_t newset; |
202 | 200 | ||
203 | uset = (compat_sigset_t *) regs.regs[4]; | 201 | uset = (compat_sigset_t *) regs.regs[4]; |
204 | if (get_sigset(&newset, uset)) | 202 | if (get_sigset(&newset, uset)) |
@@ -206,19 +204,15 @@ _sys32_sigsuspend(nabi_no_regargs struct pt_regs regs) | |||
206 | sigdelsetmask(&newset, ~_BLOCKABLE); | 204 | sigdelsetmask(&newset, ~_BLOCKABLE); |
207 | 205 | ||
208 | spin_lock_irq(¤t->sighand->siglock); | 206 | spin_lock_irq(¤t->sighand->siglock); |
209 | saveset = current->blocked; | 207 | current->saved_sigmask = current->blocked; |
210 | current->blocked = newset; | 208 | current->blocked = newset; |
211 | recalc_sigpending(); | 209 | recalc_sigpending(); |
212 | spin_unlock_irq(¤t->sighand->siglock); | 210 | spin_unlock_irq(¤t->sighand->siglock); |
213 | 211 | ||
214 | regs.regs[2] = EINTR; | 212 | current->state = TASK_INTERRUPTIBLE; |
215 | regs.regs[7] = 1; | 213 | schedule(); |
216 | while (1) { | 214 | set_thread_flag(TIF_RESTORE_SIGMASK); |
217 | current->state = TASK_INTERRUPTIBLE; | 215 | return -ERESTARTNOHAND; |
218 | schedule(); | ||
219 | if (do_signal32(&saveset, ®s)) | ||
220 | return -EINTR; | ||
221 | } | ||
222 | } | 216 | } |
223 | 217 | ||
224 | save_static_function(sys32_rt_sigsuspend); | 218 | save_static_function(sys32_rt_sigsuspend); |
@@ -226,8 +220,8 @@ __attribute_used__ noinline static int | |||
226 | _sys32_rt_sigsuspend(nabi_no_regargs struct pt_regs regs) | 220 | _sys32_rt_sigsuspend(nabi_no_regargs struct pt_regs regs) |
227 | { | 221 | { |
228 | compat_sigset_t *uset; | 222 | compat_sigset_t *uset; |
229 | sigset_t newset, saveset; | 223 | sigset_t newset; |
230 | size_t sigsetsize; | 224 | size_t sigsetsize; |
231 | 225 | ||
232 | /* XXX Don't preclude handling different sized sigset_t's. */ | 226 | /* XXX Don't preclude handling different sized sigset_t's. */ |
233 | sigsetsize = regs.regs[5]; | 227 | sigsetsize = regs.regs[5]; |
@@ -240,19 +234,15 @@ _sys32_rt_sigsuspend(nabi_no_regargs struct pt_regs regs) | |||
240 | sigdelsetmask(&newset, ~_BLOCKABLE); | 234 | sigdelsetmask(&newset, ~_BLOCKABLE); |
241 | 235 | ||
242 | spin_lock_irq(¤t->sighand->siglock); | 236 | spin_lock_irq(¤t->sighand->siglock); |
243 | saveset = current->blocked; | 237 | current->saved_sigmask = current->blocked; |
244 | current->blocked = newset; | 238 | current->blocked = newset; |
245 | recalc_sigpending(); | 239 | recalc_sigpending(); |
246 | spin_unlock_irq(¤t->sighand->siglock); | 240 | spin_unlock_irq(¤t->sighand->siglock); |
247 | 241 | ||
248 | regs.regs[2] = EINTR; | 242 | current->state = TASK_INTERRUPTIBLE; |
249 | regs.regs[7] = 1; | 243 | schedule(); |
250 | while (1) { | 244 | set_thread_flag(TIF_RESTORE_SIGMASK); |
251 | current->state = TASK_INTERRUPTIBLE; | 245 | return -ERESTARTNOHAND; |
252 | schedule(); | ||
253 | if (do_signal32(&saveset, ®s)) | ||
254 | return -EINTR; | ||
255 | } | ||
256 | } | 246 | } |
257 | 247 | ||
258 | asmlinkage int sys32_sigaction(int sig, const struct sigaction32 *act, | 248 | asmlinkage int sys32_sigaction(int sig, const struct sigaction32 *act, |
@@ -269,7 +259,7 @@ asmlinkage int sys32_sigaction(int sig, const struct sigaction32 *act, | |||
269 | if (!access_ok(VERIFY_READ, act, sizeof(*act))) | 259 | if (!access_ok(VERIFY_READ, act, sizeof(*act))) |
270 | return -EFAULT; | 260 | return -EFAULT; |
271 | err |= __get_user(handler, &act->sa_handler); | 261 | err |= __get_user(handler, &act->sa_handler); |
272 | new_ka.sa.sa_handler = (void*)(s64)handler; | 262 | new_ka.sa.sa_handler = (void __user *)(s64)handler; |
273 | err |= __get_user(new_ka.sa.sa_flags, &act->sa_flags); | 263 | err |= __get_user(new_ka.sa.sa_flags, &act->sa_flags); |
274 | err |= __get_user(mask, &act->sa_mask.sig[0]); | 264 | err |= __get_user(mask, &act->sa_mask.sig[0]); |
275 | if (err) | 265 | if (err) |
@@ -299,8 +289,8 @@ asmlinkage int sys32_sigaction(int sig, const struct sigaction32 *act, | |||
299 | 289 | ||
300 | asmlinkage int sys32_sigaltstack(nabi_no_regargs struct pt_regs regs) | 290 | asmlinkage int sys32_sigaltstack(nabi_no_regargs struct pt_regs regs) |
301 | { | 291 | { |
302 | const stack32_t *uss = (const stack32_t *) regs.regs[4]; | 292 | const stack32_t __user *uss = (const stack32_t __user *) regs.regs[4]; |
303 | stack32_t *uoss = (stack32_t *) regs.regs[5]; | 293 | stack32_t __user *uoss = (stack32_t __user *) regs.regs[5]; |
304 | unsigned long usp = regs.regs[29]; | 294 | unsigned long usp = regs.regs[29]; |
305 | stack_t kss, koss; | 295 | stack_t kss, koss; |
306 | int ret, err = 0; | 296 | int ret, err = 0; |
@@ -319,7 +309,8 @@ asmlinkage int sys32_sigaltstack(nabi_no_regargs struct pt_regs regs) | |||
319 | } | 309 | } |
320 | 310 | ||
321 | set_fs (KERNEL_DS); | 311 | set_fs (KERNEL_DS); |
322 | ret = do_sigaltstack(uss ? &kss : NULL , uoss ? &koss : NULL, usp); | 312 | ret = do_sigaltstack(uss ? (stack_t __user *)&kss : NULL, |
313 | uoss ? (stack_t __user *)&koss : NULL, usp); | ||
323 | set_fs (old_fs); | 314 | set_fs (old_fs); |
324 | 315 | ||
325 | if (!ret && uoss) { | 316 | if (!ret && uoss) { |
@@ -335,7 +326,7 @@ asmlinkage int sys32_sigaltstack(nabi_no_regargs struct pt_regs regs) | |||
335 | return ret; | 326 | return ret; |
336 | } | 327 | } |
337 | 328 | ||
338 | static int restore_sigcontext32(struct pt_regs *regs, struct sigcontext32 *sc) | 329 | static int restore_sigcontext32(struct pt_regs *regs, struct sigcontext32 __user *sc) |
339 | { | 330 | { |
340 | u32 used_math; | 331 | u32 used_math; |
341 | int err = 0; | 332 | int err = 0; |
@@ -420,7 +411,7 @@ struct rt_sigframe32 { | |||
420 | #endif | 411 | #endif |
421 | }; | 412 | }; |
422 | 413 | ||
423 | int copy_siginfo_to_user32(compat_siginfo_t *to, siginfo_t *from) | 414 | int copy_siginfo_to_user32(compat_siginfo_t __user *to, siginfo_t *from) |
424 | { | 415 | { |
425 | int err; | 416 | int err; |
426 | 417 | ||
@@ -455,7 +446,7 @@ int copy_siginfo_to_user32(compat_siginfo_t *to, siginfo_t *from) | |||
455 | err |= __put_user(from->si_uid, &to->si_uid); | 446 | err |= __put_user(from->si_uid, &to->si_uid); |
456 | break; | 447 | break; |
457 | case __SI_FAULT >> 16: | 448 | case __SI_FAULT >> 16: |
458 | err |= __put_user((long)from->si_addr, &to->si_addr); | 449 | err |= __put_user((unsigned long)from->si_addr, &to->si_addr); |
459 | break; | 450 | break; |
460 | case __SI_POLL >> 16: | 451 | case __SI_POLL >> 16: |
461 | err |= __put_user(from->si_band, &to->si_band); | 452 | err |= __put_user(from->si_band, &to->si_band); |
@@ -476,10 +467,10 @@ save_static_function(sys32_sigreturn); | |||
476 | __attribute_used__ noinline static void | 467 | __attribute_used__ noinline static void |
477 | _sys32_sigreturn(nabi_no_regargs struct pt_regs regs) | 468 | _sys32_sigreturn(nabi_no_regargs struct pt_regs regs) |
478 | { | 469 | { |
479 | struct sigframe *frame; | 470 | struct sigframe __user *frame; |
480 | sigset_t blocked; | 471 | sigset_t blocked; |
481 | 472 | ||
482 | frame = (struct sigframe *) regs.regs[29]; | 473 | frame = (struct sigframe __user *) regs.regs[29]; |
483 | if (!access_ok(VERIFY_READ, frame, sizeof(*frame))) | 474 | if (!access_ok(VERIFY_READ, frame, sizeof(*frame))) |
484 | goto badframe; | 475 | goto badframe; |
485 | if (__copy_from_user(&blocked, &frame->sf_mask, sizeof(blocked))) | 476 | if (__copy_from_user(&blocked, &frame->sf_mask, sizeof(blocked))) |
@@ -512,13 +503,13 @@ save_static_function(sys32_rt_sigreturn); | |||
512 | __attribute_used__ noinline static void | 503 | __attribute_used__ noinline static void |
513 | _sys32_rt_sigreturn(nabi_no_regargs struct pt_regs regs) | 504 | _sys32_rt_sigreturn(nabi_no_regargs struct pt_regs regs) |
514 | { | 505 | { |
515 | struct rt_sigframe32 *frame; | 506 | struct rt_sigframe32 __user *frame; |
516 | mm_segment_t old_fs; | 507 | mm_segment_t old_fs; |
517 | sigset_t set; | 508 | sigset_t set; |
518 | stack_t st; | 509 | stack_t st; |
519 | s32 sp; | 510 | s32 sp; |
520 | 511 | ||
521 | frame = (struct rt_sigframe32 *) regs.regs[29]; | 512 | frame = (struct rt_sigframe32 __user *) regs.regs[29]; |
522 | if (!access_ok(VERIFY_READ, frame, sizeof(*frame))) | 513 | if (!access_ok(VERIFY_READ, frame, sizeof(*frame))) |
523 | goto badframe; | 514 | goto badframe; |
524 | if (__copy_from_user(&set, &frame->rs_uc.uc_sigmask, sizeof(set))) | 515 | if (__copy_from_user(&set, &frame->rs_uc.uc_sigmask, sizeof(set))) |
@@ -536,7 +527,7 @@ _sys32_rt_sigreturn(nabi_no_regargs struct pt_regs regs) | |||
536 | /* The ucontext contains a stack32_t, so we must convert! */ | 527 | /* The ucontext contains a stack32_t, so we must convert! */ |
537 | if (__get_user(sp, &frame->rs_uc.uc_stack.ss_sp)) | 528 | if (__get_user(sp, &frame->rs_uc.uc_stack.ss_sp)) |
538 | goto badframe; | 529 | goto badframe; |
539 | st.ss_size = (long) sp; | 530 | st.ss_sp = (void *)(long) sp; |
540 | if (__get_user(st.ss_size, &frame->rs_uc.uc_stack.ss_size)) | 531 | if (__get_user(st.ss_size, &frame->rs_uc.uc_stack.ss_size)) |
541 | goto badframe; | 532 | goto badframe; |
542 | if (__get_user(st.ss_flags, &frame->rs_uc.uc_stack.ss_flags)) | 533 | if (__get_user(st.ss_flags, &frame->rs_uc.uc_stack.ss_flags)) |
@@ -546,7 +537,7 @@ _sys32_rt_sigreturn(nabi_no_regargs struct pt_regs regs) | |||
546 | call it and ignore errors. */ | 537 | call it and ignore errors. */ |
547 | old_fs = get_fs(); | 538 | old_fs = get_fs(); |
548 | set_fs (KERNEL_DS); | 539 | set_fs (KERNEL_DS); |
549 | do_sigaltstack(&st, NULL, regs.regs[29]); | 540 | do_sigaltstack((stack_t __user *)&st, NULL, regs.regs[29]); |
550 | set_fs (old_fs); | 541 | set_fs (old_fs); |
551 | 542 | ||
552 | /* | 543 | /* |
@@ -564,7 +555,7 @@ badframe: | |||
564 | } | 555 | } |
565 | 556 | ||
566 | static inline int setup_sigcontext32(struct pt_regs *regs, | 557 | static inline int setup_sigcontext32(struct pt_regs *regs, |
567 | struct sigcontext32 *sc) | 558 | struct sigcontext32 __user *sc) |
568 | { | 559 | { |
569 | int err = 0; | 560 | int err = 0; |
570 | 561 | ||
@@ -623,8 +614,9 @@ out: | |||
623 | /* | 614 | /* |
624 | * Determine which stack to use.. | 615 | * Determine which stack to use.. |
625 | */ | 616 | */ |
626 | static inline void *get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, | 617 | static inline void __user *get_sigframe(struct k_sigaction *ka, |
627 | size_t frame_size) | 618 | struct pt_regs *regs, |
619 | size_t frame_size) | ||
628 | { | 620 | { |
629 | unsigned long sp; | 621 | unsigned long sp; |
630 | 622 | ||
@@ -642,13 +634,13 @@ static inline void *get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, | |||
642 | if ((ka->sa.sa_flags & SA_ONSTACK) && (sas_ss_flags (sp) == 0)) | 634 | if ((ka->sa.sa_flags & SA_ONSTACK) && (sas_ss_flags (sp) == 0)) |
643 | sp = current->sas_ss_sp + current->sas_ss_size; | 635 | sp = current->sas_ss_sp + current->sas_ss_size; |
644 | 636 | ||
645 | return (void *)((sp - frame_size) & ALMASK); | 637 | return (void __user *)((sp - frame_size) & ALMASK); |
646 | } | 638 | } |
647 | 639 | ||
648 | int setup_frame_32(struct k_sigaction * ka, struct pt_regs *regs, | 640 | int setup_frame_32(struct k_sigaction * ka, struct pt_regs *regs, |
649 | int signr, sigset_t *set) | 641 | int signr, sigset_t *set) |
650 | { | 642 | { |
651 | struct sigframe *frame; | 643 | struct sigframe __user *frame; |
652 | int err = 0; | 644 | int err = 0; |
653 | 645 | ||
654 | frame = get_sigframe(ka, regs, sizeof(*frame)); | 646 | frame = get_sigframe(ka, regs, sizeof(*frame)); |
@@ -692,17 +684,17 @@ int setup_frame_32(struct k_sigaction * ka, struct pt_regs *regs, | |||
692 | current->comm, current->pid, | 684 | current->comm, current->pid, |
693 | frame, regs->cp0_epc, frame->sf_code); | 685 | frame, regs->cp0_epc, frame->sf_code); |
694 | #endif | 686 | #endif |
695 | return 1; | 687 | return 0; |
696 | 688 | ||
697 | give_sigsegv: | 689 | give_sigsegv: |
698 | force_sigsegv(signr, current); | 690 | force_sigsegv(signr, current); |
699 | return 0; | 691 | return -EFAULT; |
700 | } | 692 | } |
701 | 693 | ||
702 | int setup_rt_frame_32(struct k_sigaction * ka, struct pt_regs *regs, | 694 | int setup_rt_frame_32(struct k_sigaction * ka, struct pt_regs *regs, |
703 | int signr, sigset_t *set, siginfo_t *info) | 695 | int signr, sigset_t *set, siginfo_t *info) |
704 | { | 696 | { |
705 | struct rt_sigframe32 *frame; | 697 | struct rt_sigframe32 __user *frame; |
706 | int err = 0; | 698 | int err = 0; |
707 | s32 sp; | 699 | s32 sp; |
708 | 700 | ||
@@ -763,11 +755,11 @@ int setup_rt_frame_32(struct k_sigaction * ka, struct pt_regs *regs, | |||
763 | current->comm, current->pid, | 755 | current->comm, current->pid, |
764 | frame, regs->cp0_epc, frame->rs_code); | 756 | frame, regs->cp0_epc, frame->rs_code); |
765 | #endif | 757 | #endif |
766 | return 1; | 758 | return 0; |
767 | 759 | ||
768 | give_sigsegv: | 760 | give_sigsegv: |
769 | force_sigsegv(signr, current); | 761 | force_sigsegv(signr, current); |
770 | return 0; | 762 | return -EFAULT; |
771 | } | 763 | } |
772 | 764 | ||
773 | static inline int handle_signal(unsigned long sig, siginfo_t *info, | 765 | static inline int handle_signal(unsigned long sig, siginfo_t *info, |
@@ -781,7 +773,7 @@ static inline int handle_signal(unsigned long sig, siginfo_t *info, | |||
781 | regs->regs[2] = EINTR; | 773 | regs->regs[2] = EINTR; |
782 | break; | 774 | break; |
783 | case ERESTARTSYS: | 775 | case ERESTARTSYS: |
784 | if(!(ka->sa.sa_flags & SA_RESTART)) { | 776 | if (!(ka->sa.sa_flags & SA_RESTART)) { |
785 | regs->regs[2] = EINTR; | 777 | regs->regs[2] = EINTR; |
786 | break; | 778 | break; |
787 | } | 779 | } |
@@ -808,9 +800,10 @@ static inline int handle_signal(unsigned long sig, siginfo_t *info, | |||
808 | return ret; | 800 | return ret; |
809 | } | 801 | } |
810 | 802 | ||
811 | int do_signal32(sigset_t *oldset, struct pt_regs *regs) | 803 | void do_signal32(struct pt_regs *regs) |
812 | { | 804 | { |
813 | struct k_sigaction ka; | 805 | struct k_sigaction ka; |
806 | sigset_t *oldset; | ||
814 | siginfo_t info; | 807 | siginfo_t info; |
815 | int signr; | 808 | int signr; |
816 | 809 | ||
@@ -820,17 +813,30 @@ int do_signal32(sigset_t *oldset, struct pt_regs *regs) | |||
820 | * if so. | 813 | * if so. |
821 | */ | 814 | */ |
822 | if (!user_mode(regs)) | 815 | if (!user_mode(regs)) |
823 | return 1; | 816 | return; |
824 | 817 | ||
825 | if (try_to_freeze()) | 818 | if (try_to_freeze()) |
826 | goto no_signal; | 819 | goto no_signal; |
827 | 820 | ||
828 | if (!oldset) | 821 | if (test_thread_flag(TIF_RESTORE_SIGMASK)) |
822 | oldset = ¤t->saved_sigmask; | ||
823 | else | ||
829 | oldset = ¤t->blocked; | 824 | oldset = ¤t->blocked; |
830 | 825 | ||
831 | signr = get_signal_to_deliver(&info, &ka, regs, NULL); | 826 | signr = get_signal_to_deliver(&info, &ka, regs, NULL); |
832 | if (signr > 0) | 827 | if (signr > 0) { |
833 | return handle_signal(signr, &info, &ka, oldset, regs); | 828 | /* Whee! Actually deliver the signal. */ |
829 | if (handle_signal(signr, &info, &ka, oldset, regs) == 0) { | ||
830 | /* | ||
831 | * A signal was successfully delivered; the saved | ||
832 | * sigmask will have been stored in the signal frame, | ||
833 | * and will be restored by sigreturn, so we can simply | ||
834 | * clear the TIF_RESTORE_SIGMASK flag. | ||
835 | */ | ||
836 | if (test_thread_flag(TIF_RESTORE_SIGMASK)) | ||
837 | clear_thread_flag(TIF_RESTORE_SIGMASK); | ||
838 | } | ||
839 | } | ||
834 | 840 | ||
835 | no_signal: | 841 | no_signal: |
836 | /* | 842 | /* |
@@ -851,11 +857,19 @@ no_signal: | |||
851 | regs->cp0_epc -= 4; | 857 | regs->cp0_epc -= 4; |
852 | } | 858 | } |
853 | } | 859 | } |
854 | return 0; | 860 | |
861 | /* | ||
862 | * If there's no signal to deliver, we just put the saved sigmask | ||
863 | * back | ||
864 | */ | ||
865 | if (test_thread_flag(TIF_RESTORE_SIGMASK)) { | ||
866 | clear_thread_flag(TIF_RESTORE_SIGMASK); | ||
867 | sigprocmask(SIG_SETMASK, ¤t->saved_sigmask, NULL); | ||
868 | } | ||
855 | } | 869 | } |
856 | 870 | ||
857 | asmlinkage int sys32_rt_sigaction(int sig, const struct sigaction32 *act, | 871 | asmlinkage int sys32_rt_sigaction(int sig, const struct sigaction32 *act, |
858 | struct sigaction32 *oact, | 872 | struct sigaction32 __user *oact, |
859 | unsigned int sigsetsize) | 873 | unsigned int sigsetsize) |
860 | { | 874 | { |
861 | struct k_sigaction new_sa, old_sa; | 875 | struct k_sigaction new_sa, old_sa; |
@@ -872,7 +886,7 @@ asmlinkage int sys32_rt_sigaction(int sig, const struct sigaction32 *act, | |||
872 | if (!access_ok(VERIFY_READ, act, sizeof(*act))) | 886 | if (!access_ok(VERIFY_READ, act, sizeof(*act))) |
873 | return -EFAULT; | 887 | return -EFAULT; |
874 | err |= __get_user(handler, &act->sa_handler); | 888 | err |= __get_user(handler, &act->sa_handler); |
875 | new_sa.sa.sa_handler = (void*)(s64)handler; | 889 | new_sa.sa.sa_handler = (void __user *)(s64)handler; |
876 | err |= __get_user(new_sa.sa.sa_flags, &act->sa_flags); | 890 | err |= __get_user(new_sa.sa.sa_flags, &act->sa_flags); |
877 | err |= get_sigset(&new_sa.sa.sa_mask, &act->sa_mask); | 891 | err |= get_sigset(&new_sa.sa.sa_mask, &act->sa_mask); |
878 | if (err) | 892 | if (err) |
@@ -899,7 +913,7 @@ out: | |||
899 | } | 913 | } |
900 | 914 | ||
901 | asmlinkage int sys32_rt_sigprocmask(int how, compat_sigset_t *set, | 915 | asmlinkage int sys32_rt_sigprocmask(int how, compat_sigset_t *set, |
902 | compat_sigset_t *oset, unsigned int sigsetsize) | 916 | compat_sigset_t __user *oset, unsigned int sigsetsize) |
903 | { | 917 | { |
904 | sigset_t old_set, new_set; | 918 | sigset_t old_set, new_set; |
905 | int ret; | 919 | int ret; |
@@ -909,8 +923,9 @@ asmlinkage int sys32_rt_sigprocmask(int how, compat_sigset_t *set, | |||
909 | return -EFAULT; | 923 | return -EFAULT; |
910 | 924 | ||
911 | set_fs (KERNEL_DS); | 925 | set_fs (KERNEL_DS); |
912 | ret = sys_rt_sigprocmask(how, set ? &new_set : NULL, | 926 | ret = sys_rt_sigprocmask(how, set ? (sigset_t __user *)&new_set : NULL, |
913 | oset ? &old_set : NULL, sigsetsize); | 927 | oset ? (sigset_t __user *)&old_set : NULL, |
928 | sigsetsize); | ||
914 | set_fs (old_fs); | 929 | set_fs (old_fs); |
915 | 930 | ||
916 | if (!ret && oset && put_sigset(&old_set, oset)) | 931 | if (!ret && oset && put_sigset(&old_set, oset)) |
@@ -919,7 +934,7 @@ asmlinkage int sys32_rt_sigprocmask(int how, compat_sigset_t *set, | |||
919 | return ret; | 934 | return ret; |
920 | } | 935 | } |
921 | 936 | ||
922 | asmlinkage int sys32_rt_sigpending(compat_sigset_t *uset, | 937 | asmlinkage int sys32_rt_sigpending(compat_sigset_t __user *uset, |
923 | unsigned int sigsetsize) | 938 | unsigned int sigsetsize) |
924 | { | 939 | { |
925 | int ret; | 940 | int ret; |
@@ -927,7 +942,7 @@ asmlinkage int sys32_rt_sigpending(compat_sigset_t *uset, | |||
927 | mm_segment_t old_fs = get_fs(); | 942 | mm_segment_t old_fs = get_fs(); |
928 | 943 | ||
929 | set_fs (KERNEL_DS); | 944 | set_fs (KERNEL_DS); |
930 | ret = sys_rt_sigpending(&set, sigsetsize); | 945 | ret = sys_rt_sigpending((sigset_t __user *)&set, sigsetsize); |
931 | set_fs (old_fs); | 946 | set_fs (old_fs); |
932 | 947 | ||
933 | if (!ret && put_sigset(&set, uset)) | 948 | if (!ret && put_sigset(&set, uset)) |
@@ -936,7 +951,7 @@ asmlinkage int sys32_rt_sigpending(compat_sigset_t *uset, | |||
936 | return ret; | 951 | return ret; |
937 | } | 952 | } |
938 | 953 | ||
939 | asmlinkage int sys32_rt_sigqueueinfo(int pid, int sig, compat_siginfo_t *uinfo) | 954 | asmlinkage int sys32_rt_sigqueueinfo(int pid, int sig, compat_siginfo_t __user *uinfo) |
940 | { | 955 | { |
941 | siginfo_t info; | 956 | siginfo_t info; |
942 | int ret; | 957 | int ret; |
@@ -946,7 +961,7 @@ asmlinkage int sys32_rt_sigqueueinfo(int pid, int sig, compat_siginfo_t *uinfo) | |||
946 | copy_from_user (info._sifields._pad, uinfo->_sifields._pad, SI_PAD_SIZE)) | 961 | copy_from_user (info._sifields._pad, uinfo->_sifields._pad, SI_PAD_SIZE)) |
947 | return -EFAULT; | 962 | return -EFAULT; |
948 | set_fs (KERNEL_DS); | 963 | set_fs (KERNEL_DS); |
949 | ret = sys_rt_sigqueueinfo(pid, sig, &info); | 964 | ret = sys_rt_sigqueueinfo(pid, sig, (siginfo_t __user *)&info); |
950 | set_fs (old_fs); | 965 | set_fs (old_fs); |
951 | return ret; | 966 | return ret; |
952 | } | 967 | } |
diff --git a/arch/mips/kernel/signal_n32.c b/arch/mips/kernel/signal_n32.c index ec61b2670ba6..3e168c08a3a8 100644 --- a/arch/mips/kernel/signal_n32.c +++ b/arch/mips/kernel/signal_n32.c | |||
@@ -48,6 +48,8 @@ | |||
48 | #define __NR_N32_rt_sigreturn 6211 | 48 | #define __NR_N32_rt_sigreturn 6211 |
49 | #define __NR_N32_restart_syscall 6214 | 49 | #define __NR_N32_restart_syscall 6214 |
50 | 50 | ||
51 | #define DEBUG_SIG 0 | ||
52 | |||
51 | #define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP))) | 53 | #define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP))) |
52 | 54 | ||
53 | /* IRIX compatible stack_t */ | 55 | /* IRIX compatible stack_t */ |
@@ -79,16 +81,49 @@ struct rt_sigframe_n32 { | |||
79 | #endif | 81 | #endif |
80 | }; | 82 | }; |
81 | 83 | ||
84 | extern void sigset_from_compat (sigset_t *set, compat_sigset_t *compat); | ||
85 | |||
86 | save_static_function(sysn32_rt_sigsuspend); | ||
87 | __attribute_used__ noinline static int | ||
88 | _sysn32_rt_sigsuspend(nabi_no_regargs struct pt_regs regs) | ||
89 | { | ||
90 | compat_sigset_t __user *unewset, uset; | ||
91 | size_t sigsetsize; | ||
92 | sigset_t newset; | ||
93 | |||
94 | /* XXX Don't preclude handling different sized sigset_t's. */ | ||
95 | sigsetsize = regs.regs[5]; | ||
96 | if (sigsetsize != sizeof(sigset_t)) | ||
97 | return -EINVAL; | ||
98 | |||
99 | unewset = (compat_sigset_t __user *) regs.regs[4]; | ||
100 | if (copy_from_user(&uset, unewset, sizeof(uset))) | ||
101 | return -EFAULT; | ||
102 | sigset_from_compat (&newset, &uset); | ||
103 | sigdelsetmask(&newset, ~_BLOCKABLE); | ||
104 | |||
105 | spin_lock_irq(¤t->sighand->siglock); | ||
106 | current->saved_sigmask = current->blocked; | ||
107 | current->blocked = newset; | ||
108 | recalc_sigpending(); | ||
109 | spin_unlock_irq(¤t->sighand->siglock); | ||
110 | |||
111 | current->state = TASK_INTERRUPTIBLE; | ||
112 | schedule(); | ||
113 | set_thread_flag(TIF_RESTORE_SIGMASK); | ||
114 | return -ERESTARTNOHAND; | ||
115 | } | ||
116 | |||
82 | save_static_function(sysn32_rt_sigreturn); | 117 | save_static_function(sysn32_rt_sigreturn); |
83 | __attribute_used__ noinline static void | 118 | __attribute_used__ noinline static void |
84 | _sysn32_rt_sigreturn(nabi_no_regargs struct pt_regs regs) | 119 | _sysn32_rt_sigreturn(nabi_no_regargs struct pt_regs regs) |
85 | { | 120 | { |
86 | struct rt_sigframe_n32 *frame; | 121 | struct rt_sigframe_n32 __user *frame; |
87 | sigset_t set; | 122 | sigset_t set; |
88 | stack_t st; | 123 | stack_t st; |
89 | s32 sp; | 124 | s32 sp; |
90 | 125 | ||
91 | frame = (struct rt_sigframe_n32 *) regs.regs[29]; | 126 | frame = (struct rt_sigframe_n32 __user *) regs.regs[29]; |
92 | if (!access_ok(VERIFY_READ, frame, sizeof(*frame))) | 127 | if (!access_ok(VERIFY_READ, frame, sizeof(*frame))) |
93 | goto badframe; | 128 | goto badframe; |
94 | if (__copy_from_user(&set, &frame->rs_uc.uc_sigmask, sizeof(set))) | 129 | if (__copy_from_user(&set, &frame->rs_uc.uc_sigmask, sizeof(set))) |
@@ -106,7 +141,7 @@ _sysn32_rt_sigreturn(nabi_no_regargs struct pt_regs regs) | |||
106 | /* The ucontext contains a stack32_t, so we must convert! */ | 141 | /* The ucontext contains a stack32_t, so we must convert! */ |
107 | if (__get_user(sp, &frame->rs_uc.uc_stack.ss_sp)) | 142 | if (__get_user(sp, &frame->rs_uc.uc_stack.ss_sp)) |
108 | goto badframe; | 143 | goto badframe; |
109 | st.ss_size = (long) sp; | 144 | st.ss_sp = (void *)(long) sp; |
110 | if (__get_user(st.ss_size, &frame->rs_uc.uc_stack.ss_size)) | 145 | if (__get_user(st.ss_size, &frame->rs_uc.uc_stack.ss_size)) |
111 | goto badframe; | 146 | goto badframe; |
112 | if (__get_user(st.ss_flags, &frame->rs_uc.uc_stack.ss_flags)) | 147 | if (__get_user(st.ss_flags, &frame->rs_uc.uc_stack.ss_flags)) |
@@ -114,7 +149,7 @@ _sysn32_rt_sigreturn(nabi_no_regargs struct pt_regs regs) | |||
114 | 149 | ||
115 | /* It is more difficult to avoid calling this function than to | 150 | /* It is more difficult to avoid calling this function than to |
116 | call it and ignore errors. */ | 151 | call it and ignore errors. */ |
117 | do_sigaltstack(&st, NULL, regs.regs[29]); | 152 | do_sigaltstack((stack_t __user *)&st, NULL, regs.regs[29]); |
118 | 153 | ||
119 | /* | 154 | /* |
120 | * Don't let your children do this ... | 155 | * Don't let your children do this ... |
@@ -133,7 +168,7 @@ badframe: | |||
133 | int setup_rt_frame_n32(struct k_sigaction * ka, | 168 | int setup_rt_frame_n32(struct k_sigaction * ka, |
134 | struct pt_regs *regs, int signr, sigset_t *set, siginfo_t *info) | 169 | struct pt_regs *regs, int signr, sigset_t *set, siginfo_t *info) |
135 | { | 170 | { |
136 | struct rt_sigframe_n32 *frame; | 171 | struct rt_sigframe_n32 __user *frame; |
137 | int err = 0; | 172 | int err = 0; |
138 | s32 sp; | 173 | s32 sp; |
139 | 174 | ||
@@ -184,9 +219,9 @@ int setup_rt_frame_n32(struct k_sigaction * ka, | |||
184 | current->comm, current->pid, | 219 | current->comm, current->pid, |
185 | frame, regs->cp0_epc, regs->regs[31]); | 220 | frame, regs->cp0_epc, regs->regs[31]); |
186 | #endif | 221 | #endif |
187 | return 1; | 222 | return 0; |
188 | 223 | ||
189 | give_sigsegv: | 224 | give_sigsegv: |
190 | force_sigsegv(signr, current); | 225 | force_sigsegv(signr, current); |
191 | return 0; | 226 | return -EFAULT; |
192 | } | 227 | } |
diff --git a/arch/mips/kernel/smp.c b/arch/mips/kernel/smp.c index 25472fcaf715..06ed90752424 100644 --- a/arch/mips/kernel/smp.c +++ b/arch/mips/kernel/smp.c | |||
@@ -29,6 +29,7 @@ | |||
29 | #include <linux/timex.h> | 29 | #include <linux/timex.h> |
30 | #include <linux/sched.h> | 30 | #include <linux/sched.h> |
31 | #include <linux/cpumask.h> | 31 | #include <linux/cpumask.h> |
32 | #include <linux/cpu.h> | ||
32 | 33 | ||
33 | #include <asm/atomic.h> | 34 | #include <asm/atomic.h> |
34 | #include <asm/cpu.h> | 35 | #include <asm/cpu.h> |
@@ -235,7 +236,7 @@ void __init smp_prepare_cpus(unsigned int max_cpus) | |||
235 | init_new_context(current, &init_mm); | 236 | init_new_context(current, &init_mm); |
236 | current_thread_info()->cpu = 0; | 237 | current_thread_info()->cpu = 0; |
237 | smp_tune_scheduling(); | 238 | smp_tune_scheduling(); |
238 | prom_prepare_cpus(max_cpus); | 239 | plat_prepare_cpus(max_cpus); |
239 | } | 240 | } |
240 | 241 | ||
241 | /* preload SMP state for boot cpu */ | 242 | /* preload SMP state for boot cpu */ |
@@ -424,6 +425,25 @@ void flush_tlb_one(unsigned long vaddr) | |||
424 | local_flush_tlb_one(vaddr); | 425 | local_flush_tlb_one(vaddr); |
425 | } | 426 | } |
426 | 427 | ||
428 | static DEFINE_PER_CPU(struct cpu, cpu_devices); | ||
429 | |||
430 | static int __init topology_init(void) | ||
431 | { | ||
432 | int cpu; | ||
433 | int ret; | ||
434 | |||
435 | for_each_cpu(cpu) { | ||
436 | ret = register_cpu(&per_cpu(cpu_devices, cpu), cpu, NULL); | ||
437 | if (ret) | ||
438 | printk(KERN_WARNING "topology_init: register_cpu %d " | ||
439 | "failed (%d)\n", cpu, ret); | ||
440 | } | ||
441 | |||
442 | return 0; | ||
443 | } | ||
444 | |||
445 | subsys_initcall(topology_init); | ||
446 | |||
427 | EXPORT_SYMBOL(flush_tlb_page); | 447 | EXPORT_SYMBOL(flush_tlb_page); |
428 | EXPORT_SYMBOL(flush_tlb_one); | 448 | EXPORT_SYMBOL(flush_tlb_one); |
429 | EXPORT_SYMBOL(cpu_data); | 449 | EXPORT_SYMBOL(cpu_data); |
diff --git a/arch/mips/kernel/smp_mt.c b/arch/mips/kernel/smp_mt.c index 794a1c3de2a4..993b8bf56aaf 100644 --- a/arch/mips/kernel/smp_mt.c +++ b/arch/mips/kernel/smp_mt.c | |||
@@ -68,6 +68,8 @@ void __init sanitize_tlb_entries(void) | |||
68 | 68 | ||
69 | set_c0_mvpcontrol(MVPCONTROL_VPC); | 69 | set_c0_mvpcontrol(MVPCONTROL_VPC); |
70 | 70 | ||
71 | back_to_back_c0_hazard(); | ||
72 | |||
71 | /* Disable TLB sharing */ | 73 | /* Disable TLB sharing */ |
72 | clear_c0_mvpcontrol(MVPCONTROL_STLB); | 74 | clear_c0_mvpcontrol(MVPCONTROL_STLB); |
73 | 75 | ||
@@ -102,35 +104,6 @@ void __init sanitize_tlb_entries(void) | |||
102 | clear_c0_mvpcontrol(MVPCONTROL_VPC); | 104 | clear_c0_mvpcontrol(MVPCONTROL_VPC); |
103 | } | 105 | } |
104 | 106 | ||
105 | #if 0 | ||
106 | /* | ||
107 | * Use c0_MVPConf0 to find out how many CPUs are available, setting up | ||
108 | * phys_cpu_present_map and the logical/physical mappings. | ||
109 | */ | ||
110 | void __init prom_build_cpu_map(void) | ||
111 | { | ||
112 | int i, num, ncpus; | ||
113 | |||
114 | cpus_clear(phys_cpu_present_map); | ||
115 | |||
116 | /* assume we boot on cpu 0.... */ | ||
117 | cpu_set(0, phys_cpu_present_map); | ||
118 | __cpu_number_map[0] = 0; | ||
119 | __cpu_logical_map[0] = 0; | ||
120 | |||
121 | if (cpu_has_mipsmt) { | ||
122 | ncpus = ((read_c0_mvpconf0() & (MVPCONF0_PVPE)) >> MVPCONF0_PVPE_SHIFT) + 1; | ||
123 | for (i=1, num=0; i< NR_CPUS && i<ncpus; i++) { | ||
124 | cpu_set(i, phys_cpu_present_map); | ||
125 | __cpu_number_map[i] = ++num; | ||
126 | __cpu_logical_map[num] = i; | ||
127 | } | ||
128 | |||
129 | printk(KERN_INFO "%i available secondary CPU(s)\n", num); | ||
130 | } | ||
131 | } | ||
132 | #endif | ||
133 | |||
134 | static void ipi_resched_dispatch (struct pt_regs *regs) | 107 | static void ipi_resched_dispatch (struct pt_regs *regs) |
135 | { | 108 | { |
136 | do_IRQ(MIPS_CPU_IPI_RESCHED_IRQ, regs); | 109 | do_IRQ(MIPS_CPU_IPI_RESCHED_IRQ, regs); |
@@ -170,7 +143,7 @@ static struct irqaction irq_call = { | |||
170 | * Make sure all CPU's are in a sensible state before we boot any of the | 143 | * Make sure all CPU's are in a sensible state before we boot any of the |
171 | * secondarys | 144 | * secondarys |
172 | */ | 145 | */ |
173 | void prom_prepare_cpus(unsigned int max_cpus) | 146 | void plat_smp_setup(void) |
174 | { | 147 | { |
175 | unsigned long val; | 148 | unsigned long val; |
176 | int i, num; | 149 | int i, num; |
@@ -206,11 +179,9 @@ void prom_prepare_cpus(unsigned int max_cpus) | |||
206 | write_vpe_c0_vpeconf0(tmp); | 179 | write_vpe_c0_vpeconf0(tmp); |
207 | 180 | ||
208 | /* Record this as available CPU */ | 181 | /* Record this as available CPU */ |
209 | if (i < max_cpus) { | 182 | cpu_set(i, phys_cpu_present_map); |
210 | cpu_set(i, phys_cpu_present_map); | 183 | __cpu_number_map[i] = ++num; |
211 | __cpu_number_map[i] = ++num; | 184 | __cpu_logical_map[num] = i; |
212 | __cpu_logical_map[num] = i; | ||
213 | } | ||
214 | } | 185 | } |
215 | 186 | ||
216 | /* disable multi-threading with TC's */ | 187 | /* disable multi-threading with TC's */ |
@@ -222,6 +193,9 @@ void prom_prepare_cpus(unsigned int max_cpus) | |||
222 | 193 | ||
223 | /* set config to be the same as vpe0, particularly kseg0 coherency alg */ | 194 | /* set config to be the same as vpe0, particularly kseg0 coherency alg */ |
224 | write_vpe_c0_config( read_c0_config()); | 195 | write_vpe_c0_config( read_c0_config()); |
196 | |||
197 | /* Propagate Config7 */ | ||
198 | write_vpe_c0_config7(read_c0_config7()); | ||
225 | } | 199 | } |
226 | 200 | ||
227 | } | 201 | } |
@@ -265,7 +239,10 @@ void prom_prepare_cpus(unsigned int max_cpus) | |||
265 | set_vi_handler (MIPS_CPU_IPI_RESCHED_IRQ, ipi_resched_dispatch); | 239 | set_vi_handler (MIPS_CPU_IPI_RESCHED_IRQ, ipi_resched_dispatch); |
266 | set_vi_handler (MIPS_CPU_IPI_CALL_IRQ, ipi_call_dispatch); | 240 | set_vi_handler (MIPS_CPU_IPI_CALL_IRQ, ipi_call_dispatch); |
267 | } | 241 | } |
242 | } | ||
268 | 243 | ||
244 | void __init plat_prepare_cpus(unsigned int max_cpus) | ||
245 | { | ||
269 | cpu_ipi_resched_irq = MIPSCPU_INT_BASE + MIPS_CPU_IPI_RESCHED_IRQ; | 246 | cpu_ipi_resched_irq = MIPSCPU_INT_BASE + MIPS_CPU_IPI_RESCHED_IRQ; |
270 | cpu_ipi_call_irq = MIPSCPU_INT_BASE + MIPS_CPU_IPI_CALL_IRQ; | 247 | cpu_ipi_call_irq = MIPSCPU_INT_BASE + MIPS_CPU_IPI_CALL_IRQ; |
271 | 248 | ||
diff --git a/arch/mips/kernel/syscall.c b/arch/mips/kernel/syscall.c index 332358430ff5..1da2eeb3ef9e 100644 --- a/arch/mips/kernel/syscall.c +++ b/arch/mips/kernel/syscall.c | |||
@@ -212,12 +212,12 @@ asmlinkage int sys_execve(nabi_no_regargs struct pt_regs regs) | |||
212 | int error; | 212 | int error; |
213 | char * filename; | 213 | char * filename; |
214 | 214 | ||
215 | filename = getname((char *) (long)regs.regs[4]); | 215 | filename = getname((char __user *) (long)regs.regs[4]); |
216 | error = PTR_ERR(filename); | 216 | error = PTR_ERR(filename); |
217 | if (IS_ERR(filename)) | 217 | if (IS_ERR(filename)) |
218 | goto out; | 218 | goto out; |
219 | error = do_execve(filename, (char **) (long)regs.regs[5], | 219 | error = do_execve(filename, (char __user *__user *) (long)regs.regs[5], |
220 | (char **) (long)regs.regs[6], ®s); | 220 | (char __user *__user *) (long)regs.regs[6], ®s); |
221 | putname(filename); | 221 | putname(filename); |
222 | 222 | ||
223 | out: | 223 | out: |
@@ -227,7 +227,7 @@ out: | |||
227 | /* | 227 | /* |
228 | * Compacrapability ... | 228 | * Compacrapability ... |
229 | */ | 229 | */ |
230 | asmlinkage int sys_uname(struct old_utsname * name) | 230 | asmlinkage int sys_uname(struct old_utsname __user * name) |
231 | { | 231 | { |
232 | if (name && !copy_to_user(name, &system_utsname, sizeof (*name))) | 232 | if (name && !copy_to_user(name, &system_utsname, sizeof (*name))) |
233 | return 0; | 233 | return 0; |
@@ -237,7 +237,7 @@ asmlinkage int sys_uname(struct old_utsname * name) | |||
237 | /* | 237 | /* |
238 | * Compacrapability ... | 238 | * Compacrapability ... |
239 | */ | 239 | */ |
240 | asmlinkage int sys_olduname(struct oldold_utsname * name) | 240 | asmlinkage int sys_olduname(struct oldold_utsname __user * name) |
241 | { | 241 | { |
242 | int error; | 242 | int error; |
243 | 243 | ||
@@ -274,7 +274,7 @@ void sys_set_thread_area(unsigned long addr) | |||
274 | asmlinkage int _sys_sysmips(int cmd, long arg1, int arg2, int arg3) | 274 | asmlinkage int _sys_sysmips(int cmd, long arg1, int arg2, int arg3) |
275 | { | 275 | { |
276 | int tmp, len; | 276 | int tmp, len; |
277 | char *name; | 277 | char __user *name; |
278 | 278 | ||
279 | switch(cmd) { | 279 | switch(cmd) { |
280 | case SETNAME: { | 280 | case SETNAME: { |
@@ -283,7 +283,7 @@ asmlinkage int _sys_sysmips(int cmd, long arg1, int arg2, int arg3) | |||
283 | if (!capable(CAP_SYS_ADMIN)) | 283 | if (!capable(CAP_SYS_ADMIN)) |
284 | return -EPERM; | 284 | return -EPERM; |
285 | 285 | ||
286 | name = (char *) arg1; | 286 | name = (char __user *) arg1; |
287 | 287 | ||
288 | len = strncpy_from_user(nodename, name, __NEW_UTS_LEN); | 288 | len = strncpy_from_user(nodename, name, __NEW_UTS_LEN); |
289 | if (len < 0) | 289 | if (len < 0) |
@@ -324,7 +324,7 @@ asmlinkage int _sys_sysmips(int cmd, long arg1, int arg2, int arg3) | |||
324 | * This is really horribly ugly. | 324 | * This is really horribly ugly. |
325 | */ | 325 | */ |
326 | asmlinkage int sys_ipc (uint call, int first, int second, | 326 | asmlinkage int sys_ipc (uint call, int first, int second, |
327 | unsigned long third, void *ptr, long fifth) | 327 | unsigned long third, void __user *ptr, long fifth) |
328 | { | 328 | { |
329 | int version, ret; | 329 | int version, ret; |
330 | 330 | ||
@@ -333,24 +333,25 @@ asmlinkage int sys_ipc (uint call, int first, int second, | |||
333 | 333 | ||
334 | switch (call) { | 334 | switch (call) { |
335 | case SEMOP: | 335 | case SEMOP: |
336 | return sys_semtimedop (first, (struct sembuf *)ptr, second, | 336 | return sys_semtimedop (first, (struct sembuf __user *)ptr, |
337 | NULL); | 337 | second, NULL); |
338 | case SEMTIMEDOP: | 338 | case SEMTIMEDOP: |
339 | return sys_semtimedop (first, (struct sembuf *)ptr, second, | 339 | return sys_semtimedop (first, (struct sembuf __user *)ptr, |
340 | (const struct timespec __user *)fifth); | 340 | second, |
341 | (const struct timespec __user *)fifth); | ||
341 | case SEMGET: | 342 | case SEMGET: |
342 | return sys_semget (first, second, third); | 343 | return sys_semget (first, second, third); |
343 | case SEMCTL: { | 344 | case SEMCTL: { |
344 | union semun fourth; | 345 | union semun fourth; |
345 | if (!ptr) | 346 | if (!ptr) |
346 | return -EINVAL; | 347 | return -EINVAL; |
347 | if (get_user(fourth.__pad, (void **) ptr)) | 348 | if (get_user(fourth.__pad, (void *__user *) ptr)) |
348 | return -EFAULT; | 349 | return -EFAULT; |
349 | return sys_semctl (first, second, third, fourth); | 350 | return sys_semctl (first, second, third, fourth); |
350 | } | 351 | } |
351 | 352 | ||
352 | case MSGSND: | 353 | case MSGSND: |
353 | return sys_msgsnd (first, (struct msgbuf *) ptr, | 354 | return sys_msgsnd (first, (struct msgbuf __user *) ptr, |
354 | second, third); | 355 | second, third); |
355 | case MSGRCV: | 356 | case MSGRCV: |
356 | switch (version) { | 357 | switch (version) { |
@@ -360,7 +361,7 @@ asmlinkage int sys_ipc (uint call, int first, int second, | |||
360 | return -EINVAL; | 361 | return -EINVAL; |
361 | 362 | ||
362 | if (copy_from_user(&tmp, | 363 | if (copy_from_user(&tmp, |
363 | (struct ipc_kludge *) ptr, | 364 | (struct ipc_kludge __user *) ptr, |
364 | sizeof (tmp))) | 365 | sizeof (tmp))) |
365 | return -EFAULT; | 366 | return -EFAULT; |
366 | return sys_msgrcv (first, tmp.msgp, second, | 367 | return sys_msgrcv (first, tmp.msgp, second, |
@@ -368,35 +369,38 @@ asmlinkage int sys_ipc (uint call, int first, int second, | |||
368 | } | 369 | } |
369 | default: | 370 | default: |
370 | return sys_msgrcv (first, | 371 | return sys_msgrcv (first, |
371 | (struct msgbuf *) ptr, | 372 | (struct msgbuf __user *) ptr, |
372 | second, fifth, third); | 373 | second, fifth, third); |
373 | } | 374 | } |
374 | case MSGGET: | 375 | case MSGGET: |
375 | return sys_msgget ((key_t) first, second); | 376 | return sys_msgget ((key_t) first, second); |
376 | case MSGCTL: | 377 | case MSGCTL: |
377 | return sys_msgctl (first, second, (struct msqid_ds *) ptr); | 378 | return sys_msgctl (first, second, |
379 | (struct msqid_ds __user *) ptr); | ||
378 | 380 | ||
379 | case SHMAT: | 381 | case SHMAT: |
380 | switch (version) { | 382 | switch (version) { |
381 | default: { | 383 | default: { |
382 | ulong raddr; | 384 | ulong raddr; |
383 | ret = do_shmat (first, (char *) ptr, second, &raddr); | 385 | ret = do_shmat (first, (char __user *) ptr, second, |
386 | &raddr); | ||
384 | if (ret) | 387 | if (ret) |
385 | return ret; | 388 | return ret; |
386 | return put_user (raddr, (ulong *) third); | 389 | return put_user (raddr, (ulong __user *) third); |
387 | } | 390 | } |
388 | case 1: /* iBCS2 emulator entry point */ | 391 | case 1: /* iBCS2 emulator entry point */ |
389 | if (!segment_eq(get_fs(), get_ds())) | 392 | if (!segment_eq(get_fs(), get_ds())) |
390 | return -EINVAL; | 393 | return -EINVAL; |
391 | return do_shmat (first, (char *) ptr, second, (ulong *) third); | 394 | return do_shmat (first, (char __user *) ptr, second, |
395 | (ulong *) third); | ||
392 | } | 396 | } |
393 | case SHMDT: | 397 | case SHMDT: |
394 | return sys_shmdt ((char *)ptr); | 398 | return sys_shmdt ((char __user *)ptr); |
395 | case SHMGET: | 399 | case SHMGET: |
396 | return sys_shmget (first, second, third); | 400 | return sys_shmget (first, second, third); |
397 | case SHMCTL: | 401 | case SHMCTL: |
398 | return sys_shmctl (first, second, | 402 | return sys_shmctl (first, second, |
399 | (struct shmid_ds *) ptr); | 403 | (struct shmid_ds __user *) ptr); |
400 | default: | 404 | default: |
401 | return -ENOSYS; | 405 | return -ENOSYS; |
402 | } | 406 | } |
diff --git a/arch/mips/kernel/time.c b/arch/mips/kernel/time.c index 7050b4ffffcd..51273b7297a7 100644 --- a/arch/mips/kernel/time.c +++ b/arch/mips/kernel/time.c | |||
@@ -163,7 +163,7 @@ void do_gettimeofday(struct timeval *tv) | |||
163 | unsigned long seq; | 163 | unsigned long seq; |
164 | unsigned long lost; | 164 | unsigned long lost; |
165 | unsigned long usec, sec; | 165 | unsigned long usec, sec; |
166 | unsigned long max_ntp_tick = tick_usec - tickadj; | 166 | unsigned long max_ntp_tick; |
167 | 167 | ||
168 | do { | 168 | do { |
169 | seq = read_seqbegin(&xtime_lock); | 169 | seq = read_seqbegin(&xtime_lock); |
@@ -178,12 +178,13 @@ void do_gettimeofday(struct timeval *tv) | |||
178 | * Better to lose some accuracy than have time go backwards.. | 178 | * Better to lose some accuracy than have time go backwards.. |
179 | */ | 179 | */ |
180 | if (unlikely(time_adjust < 0)) { | 180 | if (unlikely(time_adjust < 0)) { |
181 | max_ntp_tick = (USEC_PER_SEC / HZ) - tickadj; | ||
181 | usec = min(usec, max_ntp_tick); | 182 | usec = min(usec, max_ntp_tick); |
182 | 183 | ||
183 | if (lost) | 184 | if (lost) |
184 | usec += lost * max_ntp_tick; | 185 | usec += lost * max_ntp_tick; |
185 | } else if (unlikely(lost)) | 186 | } else if (unlikely(lost)) |
186 | usec += lost * tick_usec; | 187 | usec += lost * (USEC_PER_SEC / HZ); |
187 | 188 | ||
188 | sec = xtime.tv_sec; | 189 | sec = xtime.tv_sec; |
189 | usec += (xtime.tv_nsec / 1000); | 190 | usec += (xtime.tv_nsec / 1000); |
@@ -423,6 +424,8 @@ irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | |||
423 | unsigned long j; | 424 | unsigned long j; |
424 | unsigned int count; | 425 | unsigned int count; |
425 | 426 | ||
427 | write_seqlock(&xtime_lock); | ||
428 | |||
426 | count = mips_hpt_read(); | 429 | count = mips_hpt_read(); |
427 | mips_timer_ack(); | 430 | mips_timer_ack(); |
428 | 431 | ||
@@ -440,7 +443,6 @@ irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | |||
440 | * CMOS clock accordingly every ~11 minutes. rtc_set_time() has to be | 443 | * CMOS clock accordingly every ~11 minutes. rtc_set_time() has to be |
441 | * called as close as possible to 500 ms before the new second starts. | 444 | * called as close as possible to 500 ms before the new second starts. |
442 | */ | 445 | */ |
443 | write_seqlock(&xtime_lock); | ||
444 | if (ntp_synced() && | 446 | if (ntp_synced() && |
445 | xtime.tv_sec > last_rtc_update + 660 && | 447 | xtime.tv_sec > last_rtc_update + 660 && |
446 | (xtime.tv_nsec / 1000) >= 500000 - ((unsigned) TICK_SIZE) / 2 && | 448 | (xtime.tv_nsec / 1000) >= 500000 - ((unsigned) TICK_SIZE) / 2 && |
@@ -452,7 +454,6 @@ irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | |||
452 | last_rtc_update = xtime.tv_sec - 600; | 454 | last_rtc_update = xtime.tv_sec - 600; |
453 | } | 455 | } |
454 | } | 456 | } |
455 | write_sequnlock(&xtime_lock); | ||
456 | 457 | ||
457 | /* | 458 | /* |
458 | * If jiffies has overflown in this timer_interrupt, we must | 459 | * If jiffies has overflown in this timer_interrupt, we must |
@@ -495,6 +496,8 @@ irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | |||
495 | } | 496 | } |
496 | } | 497 | } |
497 | 498 | ||
499 | write_sequnlock(&xtime_lock); | ||
500 | |||
498 | /* | 501 | /* |
499 | * In UP mode, we call local_timer_interrupt() to do profiling | 502 | * In UP mode, we call local_timer_interrupt() to do profiling |
500 | * and process accouting. | 503 | * and process accouting. |
diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c index 59a187956de0..005debbfbe84 100644 --- a/arch/mips/kernel/traps.c +++ b/arch/mips/kernel/traps.c | |||
@@ -3,7 +3,7 @@ | |||
3 | * License. See the file "COPYING" in the main directory of this archive | 3 | * License. See the file "COPYING" in the main directory of this archive |
4 | * for more details. | 4 | * for more details. |
5 | * | 5 | * |
6 | * Copyright (C) 1994 - 1999, 2000, 01 Ralf Baechle | 6 | * Copyright (C) 1994 - 1999, 2000, 01, 06 Ralf Baechle |
7 | * Copyright (C) 1995, 1996 Paul M. Antoine | 7 | * Copyright (C) 1995, 1996 Paul M. Antoine |
8 | * Copyright (C) 1998 Ulf Carlsson | 8 | * Copyright (C) 1998 Ulf Carlsson |
9 | * Copyright (C) 1999 Silicon Graphics, Inc. | 9 | * Copyright (C) 1999 Silicon Graphics, Inc. |
@@ -548,6 +548,8 @@ asmlinkage void do_ov(struct pt_regs *regs) | |||
548 | { | 548 | { |
549 | siginfo_t info; | 549 | siginfo_t info; |
550 | 550 | ||
551 | die_if_kernel("Integer overflow", regs); | ||
552 | |||
551 | info.si_code = FPE_INTOVF; | 553 | info.si_code = FPE_INTOVF; |
552 | info.si_signo = SIGFPE; | 554 | info.si_signo = SIGFPE; |
553 | info.si_errno = 0; | 555 | info.si_errno = 0; |
@@ -1168,7 +1170,7 @@ void __init per_cpu_trap_init(void) | |||
1168 | #endif | 1170 | #endif |
1169 | if (current_cpu_data.isa_level == MIPS_CPU_ISA_IV) | 1171 | if (current_cpu_data.isa_level == MIPS_CPU_ISA_IV) |
1170 | status_set |= ST0_XX; | 1172 | status_set |= ST0_XX; |
1171 | change_c0_status(ST0_CU|ST0_MX|ST0_FR|ST0_BEV|ST0_TS|ST0_KX|ST0_SX|ST0_UX, | 1173 | change_c0_status(ST0_CU|ST0_MX|ST0_RE|ST0_FR|ST0_BEV|ST0_TS|ST0_KX|ST0_SX|ST0_UX, |
1172 | status_set); | 1174 | status_set); |
1173 | 1175 | ||
1174 | if (cpu_has_dsp) | 1176 | if (cpu_has_dsp) |
diff --git a/arch/mips/kernel/vmlinux.lds.S b/arch/mips/kernel/vmlinux.lds.S index 25cc856d8e7e..2ad0cedf29fe 100644 --- a/arch/mips/kernel/vmlinux.lds.S +++ b/arch/mips/kernel/vmlinux.lds.S | |||
@@ -1,4 +1,5 @@ | |||
1 | #include <linux/config.h> | 1 | #include <linux/config.h> |
2 | #include <asm/asm-offsets.h> | ||
2 | #include <asm-generic/vmlinux.lds.h> | 3 | #include <asm-generic/vmlinux.lds.h> |
3 | 4 | ||
4 | #undef mips /* CPP really sucks for this job */ | 5 | #undef mips /* CPP really sucks for this job */ |
@@ -64,10 +65,10 @@ SECTIONS | |||
64 | we can shorten the on-disk segment size. */ | 65 | we can shorten the on-disk segment size. */ |
65 | .sdata : { *(.sdata) } | 66 | .sdata : { *(.sdata) } |
66 | 67 | ||
67 | . = ALIGN(4096); | 68 | . = ALIGN(_PAGE_SIZE); |
68 | __nosave_begin = .; | 69 | __nosave_begin = .; |
69 | .data_nosave : { *(.data.nosave) } | 70 | .data_nosave : { *(.data.nosave) } |
70 | . = ALIGN(4096); | 71 | . = ALIGN(_PAGE_SIZE); |
71 | __nosave_end = .; | 72 | __nosave_end = .; |
72 | 73 | ||
73 | . = ALIGN(32); | 74 | . = ALIGN(32); |
@@ -76,7 +77,7 @@ SECTIONS | |||
76 | _edata = .; /* End of data section */ | 77 | _edata = .; /* End of data section */ |
77 | 78 | ||
78 | /* will be freed after init */ | 79 | /* will be freed after init */ |
79 | . = ALIGN(4096); /* Init code and data */ | 80 | . = ALIGN(_PAGE_SIZE); /* Init code and data */ |
80 | __init_begin = .; | 81 | __init_begin = .; |
81 | .init.text : { | 82 | .init.text : { |
82 | _sinittext = .; | 83 | _sinittext = .; |
@@ -105,7 +106,10 @@ SECTIONS | |||
105 | .con_initcall.init : { *(.con_initcall.init) } | 106 | .con_initcall.init : { *(.con_initcall.init) } |
106 | __con_initcall_end = .; | 107 | __con_initcall_end = .; |
107 | SECURITY_INIT | 108 | SECURITY_INIT |
108 | . = ALIGN(4096); | 109 | /* .exit.text is discarded at runtime, not link time, to deal with |
110 | references from .rodata */ | ||
111 | .exit.text : { *(.exit.text) } | ||
112 | . = ALIGN(_PAGE_SIZE); | ||
109 | __initramfs_start = .; | 113 | __initramfs_start = .; |
110 | .init.ramfs : { *(.init.ramfs) } | 114 | .init.ramfs : { *(.init.ramfs) } |
111 | __initramfs_end = .; | 115 | __initramfs_end = .; |
@@ -113,7 +117,7 @@ SECTIONS | |||
113 | __per_cpu_start = .; | 117 | __per_cpu_start = .; |
114 | .data.percpu : { *(.data.percpu) } | 118 | .data.percpu : { *(.data.percpu) } |
115 | __per_cpu_end = .; | 119 | __per_cpu_end = .; |
116 | . = ALIGN(4096); | 120 | . = ALIGN(_PAGE_SIZE); |
117 | __init_end = .; | 121 | __init_end = .; |
118 | /* freed after init ends here */ | 122 | /* freed after init ends here */ |
119 | 123 | ||
@@ -132,7 +136,6 @@ SECTIONS | |||
132 | 136 | ||
133 | /* Sections to be discarded */ | 137 | /* Sections to be discarded */ |
134 | /DISCARD/ : { | 138 | /DISCARD/ : { |
135 | *(.exit.text) | ||
136 | *(.exit.data) | 139 | *(.exit.data) |
137 | *(.exitcall.exit) | 140 | *(.exitcall.exit) |
138 | 141 | ||
diff --git a/arch/mips/lasat/reset.c b/arch/mips/lasat/reset.c index 8d7d7a454f9a..181bf68175fc 100644 --- a/arch/mips/lasat/reset.c +++ b/arch/mips/lasat/reset.c | |||
@@ -19,9 +19,12 @@ | |||
19 | */ | 19 | */ |
20 | #include <linux/config.h> | 20 | #include <linux/config.h> |
21 | #include <linux/kernel.h> | 21 | #include <linux/kernel.h> |
22 | #include <linux/pm.h> | ||
23 | |||
22 | #include <asm/reboot.h> | 24 | #include <asm/reboot.h> |
23 | #include <asm/system.h> | 25 | #include <asm/system.h> |
24 | #include <asm/lasat/lasat.h> | 26 | #include <asm/lasat/lasat.h> |
27 | |||
25 | #include "picvue.h" | 28 | #include "picvue.h" |
26 | #include "prom.h" | 29 | #include "prom.h" |
27 | 30 | ||
@@ -63,5 +66,5 @@ void lasat_reboot_setup(void) | |||
63 | { | 66 | { |
64 | _machine_restart = lasat_machine_restart; | 67 | _machine_restart = lasat_machine_restart; |
65 | _machine_halt = lasat_machine_halt; | 68 | _machine_halt = lasat_machine_halt; |
66 | _machine_power_off = lasat_machine_halt; | 69 | pm_power_off = lasat_machine_halt; |
67 | } | 70 | } |
diff --git a/arch/mips/lasat/setup.c b/arch/mips/lasat/setup.c index dcd819d57dae..83eb08b7a072 100644 --- a/arch/mips/lasat/setup.c +++ b/arch/mips/lasat/setup.c | |||
@@ -134,8 +134,8 @@ void __init serial_init(void) | |||
134 | 134 | ||
135 | memset(&s, 0, sizeof(s)); | 135 | memset(&s, 0, sizeof(s)); |
136 | 136 | ||
137 | s.flags = STD_COM_FLAGS; | 137 | s.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST; |
138 | s.iotype = SERIAL_IO_MEM; | 138 | s.iotype = UPIO_MEM; |
139 | 139 | ||
140 | if (mips_machtype == MACH_LASAT_100) { | 140 | if (mips_machtype == MACH_LASAT_100) { |
141 | s.uartclk = LASAT_BASE_BAUD_100 * 16; | 141 | s.uartclk = LASAT_BASE_BAUD_100 * 16; |
diff --git a/arch/mips/lib-32/dump_tlb.c b/arch/mips/lib-32/dump_tlb.c index 46519f4331eb..c49a925d0169 100644 --- a/arch/mips/lib-32/dump_tlb.c +++ b/arch/mips/lib-32/dump_tlb.c | |||
@@ -158,29 +158,26 @@ void dump_list_process(struct task_struct *t, void *address) | |||
158 | printk("task->mm == %8p\n", t->mm); | 158 | printk("task->mm == %8p\n", t->mm); |
159 | //printk("tasks->mm.pgd == %08x\n", (unsigned int) t->mm->pgd); | 159 | //printk("tasks->mm.pgd == %08x\n", (unsigned int) t->mm->pgd); |
160 | 160 | ||
161 | if (addr > KSEG0) | 161 | if (addr > KSEG0) { |
162 | page_dir = pgd_offset_k(0); | 162 | page_dir = pgd_offset_k(0); |
163 | else if (t->mm) { | ||
164 | page_dir = pgd_offset(t->mm, 0); | ||
165 | printk("page_dir == %08x\n", (unsigned int) page_dir); | ||
166 | } else | ||
167 | printk("Current thread has no mm\n"); | ||
168 | |||
169 | if (addr > KSEG0) | ||
170 | pgd = pgd_offset_k(addr); | 163 | pgd = pgd_offset_k(addr); |
171 | else if (t->mm) { | 164 | } else if (t->mm) { |
165 | page_dir = pgd_offset(t->mm, 0); | ||
172 | pgd = pgd_offset(t->mm, addr); | 166 | pgd = pgd_offset(t->mm, addr); |
173 | printk("pgd == %08x, ", (unsigned int) pgd); | 167 | } else { |
174 | pud = pud_offset(pgd, addr); | 168 | printk("Current thread has no mm\n"); |
175 | printk("pud == %08x, ", (unsigned int) pud); | 169 | return; |
170 | } | ||
171 | printk("page_dir == %08x\n", (unsigned int) page_dir); | ||
172 | printk("pgd == %08x, ", (unsigned int) pgd); | ||
173 | pud = pud_offset(pgd, addr); | ||
174 | printk("pud == %08x, ", (unsigned int) pud); | ||
176 | 175 | ||
177 | pmd = pmd_offset(pud, addr); | 176 | pmd = pmd_offset(pud, addr); |
178 | printk("pmd == %08x, ", (unsigned int) pmd); | 177 | printk("pmd == %08x, ", (unsigned int) pmd); |
179 | 178 | ||
180 | pte = pte_offset(pmd, addr); | 179 | pte = pte_offset(pmd, addr); |
181 | printk("pte == %08x, ", (unsigned int) pte); | 180 | printk("pte == %08x, ", (unsigned int) pte); |
182 | } else | ||
183 | printk("Current thread has no mm\n"); | ||
184 | 181 | ||
185 | page = *pte; | 182 | page = *pte; |
186 | #ifdef CONFIG_64BIT_PHYS_ADDR | 183 | #ifdef CONFIG_64BIT_PHYS_ADDR |
diff --git a/arch/mips/lib/iomap.c b/arch/mips/lib/iomap.c index 7e2ced715cfb..f4ac5bbcd81f 100644 --- a/arch/mips/lib/iomap.c +++ b/arch/mips/lib/iomap.c | |||
@@ -63,7 +63,7 @@ void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen) | |||
63 | return ioport_map(start, len); | 63 | return ioport_map(start, len); |
64 | if (flags & IORESOURCE_MEM) { | 64 | if (flags & IORESOURCE_MEM) { |
65 | if (flags & IORESOURCE_CACHEABLE) | 65 | if (flags & IORESOURCE_CACHEABLE) |
66 | return ioremap_cacheable_cow(start, len); | 66 | return ioremap_cachable(start, len); |
67 | return ioremap_nocache(start, len); | 67 | return ioremap_nocache(start, len); |
68 | } | 68 | } |
69 | 69 | ||
diff --git a/arch/mips/math-emu/dp_simple.c b/arch/mips/math-emu/dp_simple.c index 495c1ac94298..1c555e6c6a9f 100644 --- a/arch/mips/math-emu/dp_simple.c +++ b/arch/mips/math-emu/dp_simple.c | |||
@@ -48,16 +48,22 @@ ieee754dp ieee754dp_neg(ieee754dp x) | |||
48 | CLEARCX; | 48 | CLEARCX; |
49 | FLUSHXDP; | 49 | FLUSHXDP; |
50 | 50 | ||
51 | /* | ||
52 | * Invert the sign ALWAYS to prevent an endless recursion on | ||
53 | * pow() in libc. | ||
54 | */ | ||
55 | /* quick fix up */ | ||
56 | DPSIGN(x) ^= 1; | ||
57 | |||
51 | if (xc == IEEE754_CLASS_SNAN) { | 58 | if (xc == IEEE754_CLASS_SNAN) { |
59 | ieee754dp y = ieee754dp_indef(); | ||
52 | SETCX(IEEE754_INVALID_OPERATION); | 60 | SETCX(IEEE754_INVALID_OPERATION); |
53 | return ieee754dp_nanxcpt(ieee754dp_indef(), "neg"); | 61 | DPSIGN(y) = DPSIGN(x); |
62 | return ieee754dp_nanxcpt(y, "neg"); | ||
54 | } | 63 | } |
55 | 64 | ||
56 | if (ieee754dp_isnan(x)) /* but not infinity */ | 65 | if (ieee754dp_isnan(x)) /* but not infinity */ |
57 | return ieee754dp_nanxcpt(x, "neg", x); | 66 | return ieee754dp_nanxcpt(x, "neg", x); |
58 | |||
59 | /* quick fix up */ | ||
60 | DPSIGN(x) ^= 1; | ||
61 | return x; | 67 | return x; |
62 | } | 68 | } |
63 | 69 | ||
diff --git a/arch/mips/math-emu/sp_simple.c b/arch/mips/math-emu/sp_simple.c index c809830dffb4..770f0f4677cd 100644 --- a/arch/mips/math-emu/sp_simple.c +++ b/arch/mips/math-emu/sp_simple.c | |||
@@ -48,16 +48,22 @@ ieee754sp ieee754sp_neg(ieee754sp x) | |||
48 | CLEARCX; | 48 | CLEARCX; |
49 | FLUSHXSP; | 49 | FLUSHXSP; |
50 | 50 | ||
51 | /* | ||
52 | * Invert the sign ALWAYS to prevent an endless recursion on | ||
53 | * pow() in libc. | ||
54 | */ | ||
55 | /* quick fix up */ | ||
56 | SPSIGN(x) ^= 1; | ||
57 | |||
51 | if (xc == IEEE754_CLASS_SNAN) { | 58 | if (xc == IEEE754_CLASS_SNAN) { |
59 | ieee754sp y = ieee754sp_indef(); | ||
52 | SETCX(IEEE754_INVALID_OPERATION); | 60 | SETCX(IEEE754_INVALID_OPERATION); |
53 | return ieee754sp_nanxcpt(ieee754sp_indef(), "neg"); | 61 | SPSIGN(y) = SPSIGN(x); |
62 | return ieee754sp_nanxcpt(y, "neg"); | ||
54 | } | 63 | } |
55 | 64 | ||
56 | if (ieee754sp_isnan(x)) /* but not infinity */ | 65 | if (ieee754sp_isnan(x)) /* but not infinity */ |
57 | return ieee754sp_nanxcpt(x, "neg", x); | 66 | return ieee754sp_nanxcpt(x, "neg", x); |
58 | |||
59 | /* quick fix up */ | ||
60 | SPSIGN(x) ^= 1; | ||
61 | return x; | 67 | return x; |
62 | } | 68 | } |
63 | 69 | ||
diff --git a/arch/mips/mips-boards/atlas/atlas_setup.c b/arch/mips/mips-boards/atlas/atlas_setup.c index 625843b30bed..873cf3141a31 100644 --- a/arch/mips/mips-boards/atlas/atlas_setup.c +++ b/arch/mips/mips-boards/atlas/atlas_setup.c | |||
@@ -82,8 +82,8 @@ static void __init serial_init(void) | |||
82 | #endif | 82 | #endif |
83 | s.irq = ATLASINT_UART; | 83 | s.irq = ATLASINT_UART; |
84 | s.uartclk = ATLAS_BASE_BAUD * 16; | 84 | s.uartclk = ATLAS_BASE_BAUD * 16; |
85 | s.flags = ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST | ASYNC_AUTO_IRQ; | 85 | s.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_AUTO_IRQ; |
86 | s.iotype = SERIAL_IO_PORT; | 86 | s.iotype = UPIO_PORT; |
87 | s.regshift = 3; | 87 | s.regshift = 3; |
88 | 88 | ||
89 | if (early_serial_setup(&s) != 0) { | 89 | if (early_serial_setup(&s) != 0) { |
diff --git a/arch/mips/mips-boards/generic/reset.c b/arch/mips/mips-boards/generic/reset.c index 9fdec743bd95..7213c395fb6b 100644 --- a/arch/mips/mips-boards/generic/reset.c +++ b/arch/mips/mips-boards/generic/reset.c | |||
@@ -23,6 +23,7 @@ | |||
23 | * | 23 | * |
24 | */ | 24 | */ |
25 | #include <linux/config.h> | 25 | #include <linux/config.h> |
26 | #include <linux/pm.h> | ||
26 | 27 | ||
27 | #include <asm/io.h> | 28 | #include <asm/io.h> |
28 | #include <asm/reboot.h> | 29 | #include <asm/reboot.h> |
@@ -65,9 +66,9 @@ void mips_reboot_setup(void) | |||
65 | _machine_restart = mips_machine_restart; | 66 | _machine_restart = mips_machine_restart; |
66 | _machine_halt = mips_machine_halt; | 67 | _machine_halt = mips_machine_halt; |
67 | #if defined(CONFIG_MIPS_ATLAS) | 68 | #if defined(CONFIG_MIPS_ATLAS) |
68 | _machine_power_off = atlas_machine_power_off; | 69 | pm_power_off = atlas_machine_power_off; |
69 | #endif | 70 | #endif |
70 | #if defined(CONFIG_MIPS_MALTA) || defined(CONFIG_MIPS_SEAD) | 71 | #if defined(CONFIG_MIPS_MALTA) || defined(CONFIG_MIPS_SEAD) |
71 | _machine_power_off = mips_machine_halt; | 72 | pm_power_off = mips_machine_halt; |
72 | #endif | 73 | #endif |
73 | } | 74 | } |
diff --git a/arch/mips/mips-boards/sead/sead_setup.c b/arch/mips/mips-boards/sead/sead_setup.c index f966bc161dfa..4266ce445174 100644 --- a/arch/mips/mips-boards/sead/sead_setup.c +++ b/arch/mips/mips-boards/sead/sead_setup.c | |||
@@ -71,8 +71,8 @@ static void __init serial_init(void) | |||
71 | #endif | 71 | #endif |
72 | s.irq = MIPSCPU_INT_BASE + MIPSCPU_INT_UART0; | 72 | s.irq = MIPSCPU_INT_BASE + MIPSCPU_INT_UART0; |
73 | s.uartclk = SEAD_BASE_BAUD * 16; | 73 | s.uartclk = SEAD_BASE_BAUD * 16; |
74 | s.flags = ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST | ASYNC_AUTO_IRQ; | 74 | s.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_AUTO_IRQ; |
75 | s.iotype = 0; | 75 | s.iotype = UPIO_PORT; |
76 | s.regshift = 3; | 76 | s.regshift = 3; |
77 | 77 | ||
78 | if (early_serial_setup(&s) != 0) { | 78 | if (early_serial_setup(&s) != 0) { |
diff --git a/arch/mips/mips-boards/sim/sim_setup.c b/arch/mips/mips-boards/sim/sim_setup.c index 485d5a58d9cf..a2fd62997ca3 100644 --- a/arch/mips/mips-boards/sim/sim_setup.c +++ b/arch/mips/mips-boards/sim/sim_setup.c | |||
@@ -88,8 +88,8 @@ static void __init serial_init(void) | |||
88 | but poll for now */ | 88 | but poll for now */ |
89 | s.irq = 0; | 89 | s.irq = 0; |
90 | s.uartclk = BASE_BAUD * 16; | 90 | s.uartclk = BASE_BAUD * 16; |
91 | s.flags = ASYNC_BOOT_AUTOCONF | UPF_SKIP_TEST; | 91 | s.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST; |
92 | s.iotype = SERIAL_IO_PORT | ASYNC_SKIP_TEST; | 92 | s.iotype = UPIO_PORT; |
93 | s.regshift = 0; | 93 | s.regshift = 0; |
94 | s.timeout = 4; | 94 | s.timeout = 4; |
95 | 95 | ||
diff --git a/arch/mips/mm/c-r4k.c b/arch/mips/mm/c-r4k.c index 422b55fab07a..9572ed44f0d5 100644 --- a/arch/mips/mm/c-r4k.c +++ b/arch/mips/mm/c-r4k.c | |||
@@ -235,7 +235,9 @@ static inline void r4k_blast_scache_page_setup(void) | |||
235 | { | 235 | { |
236 | unsigned long sc_lsize = cpu_scache_line_size(); | 236 | unsigned long sc_lsize = cpu_scache_line_size(); |
237 | 237 | ||
238 | if (sc_lsize == 16) | 238 | if (scache_size == 0) |
239 | r4k_blast_scache_page = (void *)no_sc_noop; | ||
240 | else if (sc_lsize == 16) | ||
239 | r4k_blast_scache_page = blast_scache16_page; | 241 | r4k_blast_scache_page = blast_scache16_page; |
240 | else if (sc_lsize == 32) | 242 | else if (sc_lsize == 32) |
241 | r4k_blast_scache_page = blast_scache32_page; | 243 | r4k_blast_scache_page = blast_scache32_page; |
@@ -251,7 +253,9 @@ static inline void r4k_blast_scache_page_indexed_setup(void) | |||
251 | { | 253 | { |
252 | unsigned long sc_lsize = cpu_scache_line_size(); | 254 | unsigned long sc_lsize = cpu_scache_line_size(); |
253 | 255 | ||
254 | if (sc_lsize == 16) | 256 | if (scache_size == 0) |
257 | r4k_blast_scache_page_indexed = (void *)no_sc_noop; | ||
258 | else if (sc_lsize == 16) | ||
255 | r4k_blast_scache_page_indexed = blast_scache16_page_indexed; | 259 | r4k_blast_scache_page_indexed = blast_scache16_page_indexed; |
256 | else if (sc_lsize == 32) | 260 | else if (sc_lsize == 32) |
257 | r4k_blast_scache_page_indexed = blast_scache32_page_indexed; | 261 | r4k_blast_scache_page_indexed = blast_scache32_page_indexed; |
@@ -267,7 +271,9 @@ static inline void r4k_blast_scache_setup(void) | |||
267 | { | 271 | { |
268 | unsigned long sc_lsize = cpu_scache_line_size(); | 272 | unsigned long sc_lsize = cpu_scache_line_size(); |
269 | 273 | ||
270 | if (sc_lsize == 16) | 274 | if (scache_size == 0) |
275 | r4k_blast_scache = (void *)no_sc_noop; | ||
276 | else if (sc_lsize == 16) | ||
271 | r4k_blast_scache = blast_scache16; | 277 | r4k_blast_scache = blast_scache16; |
272 | else if (sc_lsize == 32) | 278 | else if (sc_lsize == 32) |
273 | r4k_blast_scache = blast_scache32; | 279 | r4k_blast_scache = blast_scache32; |
@@ -369,6 +375,7 @@ static void r4k_flush_cache_mm(struct mm_struct *mm) | |||
369 | struct flush_cache_page_args { | 375 | struct flush_cache_page_args { |
370 | struct vm_area_struct *vma; | 376 | struct vm_area_struct *vma; |
371 | unsigned long addr; | 377 | unsigned long addr; |
378 | unsigned long pfn; | ||
372 | }; | 379 | }; |
373 | 380 | ||
374 | static inline void local_r4k_flush_cache_page(void *args) | 381 | static inline void local_r4k_flush_cache_page(void *args) |
@@ -376,6 +383,7 @@ static inline void local_r4k_flush_cache_page(void *args) | |||
376 | struct flush_cache_page_args *fcp_args = args; | 383 | struct flush_cache_page_args *fcp_args = args; |
377 | struct vm_area_struct *vma = fcp_args->vma; | 384 | struct vm_area_struct *vma = fcp_args->vma; |
378 | unsigned long addr = fcp_args->addr; | 385 | unsigned long addr = fcp_args->addr; |
386 | unsigned long paddr = fcp_args->pfn << PAGE_SHIFT; | ||
379 | int exec = vma->vm_flags & VM_EXEC; | 387 | int exec = vma->vm_flags & VM_EXEC; |
380 | struct mm_struct *mm = vma->vm_mm; | 388 | struct mm_struct *mm = vma->vm_mm; |
381 | pgd_t *pgdp; | 389 | pgd_t *pgdp; |
@@ -425,11 +433,12 @@ static inline void local_r4k_flush_cache_page(void *args) | |||
425 | * Do indexed flush, too much work to get the (possible) TLB refills | 433 | * Do indexed flush, too much work to get the (possible) TLB refills |
426 | * to work correctly. | 434 | * to work correctly. |
427 | */ | 435 | */ |
428 | addr = INDEX_BASE + (addr & (dcache_size - 1)); | ||
429 | if (cpu_has_dc_aliases || (exec && !cpu_has_ic_fills_f_dc)) { | 436 | if (cpu_has_dc_aliases || (exec && !cpu_has_ic_fills_f_dc)) { |
430 | r4k_blast_dcache_page_indexed(addr); | 437 | r4k_blast_dcache_page_indexed(cpu_has_pindexed_dcache ? |
431 | if (exec && !cpu_icache_snoops_remote_store) | 438 | paddr : addr); |
432 | r4k_blast_scache_page_indexed(addr); | 439 | if (exec && !cpu_icache_snoops_remote_store) { |
440 | r4k_blast_scache_page_indexed(paddr); | ||
441 | } | ||
433 | } | 442 | } |
434 | if (exec) { | 443 | if (exec) { |
435 | if (cpu_has_vtag_icache) { | 444 | if (cpu_has_vtag_icache) { |
@@ -449,6 +458,7 @@ static void r4k_flush_cache_page(struct vm_area_struct *vma, | |||
449 | 458 | ||
450 | args.vma = vma; | 459 | args.vma = vma; |
451 | args.addr = addr; | 460 | args.addr = addr; |
461 | args.pfn = pfn; | ||
452 | 462 | ||
453 | on_each_cpu(local_r4k_flush_cache_page, &args, 1, 1); | 463 | on_each_cpu(local_r4k_flush_cache_page, &args, 1, 1); |
454 | } | 464 | } |
@@ -464,72 +474,39 @@ static void r4k_flush_data_cache_page(unsigned long addr) | |||
464 | } | 474 | } |
465 | 475 | ||
466 | struct flush_icache_range_args { | 476 | struct flush_icache_range_args { |
467 | unsigned long __user start; | 477 | unsigned long start; |
468 | unsigned long __user end; | 478 | unsigned long end; |
469 | }; | 479 | }; |
470 | 480 | ||
471 | static inline void local_r4k_flush_icache_range(void *args) | 481 | static inline void local_r4k_flush_icache_range(void *args) |
472 | { | 482 | { |
473 | struct flush_icache_range_args *fir_args = args; | 483 | struct flush_icache_range_args *fir_args = args; |
474 | unsigned long dc_lsize = cpu_dcache_line_size(); | ||
475 | unsigned long ic_lsize = cpu_icache_line_size(); | ||
476 | unsigned long sc_lsize = cpu_scache_line_size(); | ||
477 | unsigned long start = fir_args->start; | 484 | unsigned long start = fir_args->start; |
478 | unsigned long end = fir_args->end; | 485 | unsigned long end = fir_args->end; |
479 | unsigned long addr, aend; | ||
480 | 486 | ||
481 | if (!cpu_has_ic_fills_f_dc) { | 487 | if (!cpu_has_ic_fills_f_dc) { |
482 | if (end - start > dcache_size) { | 488 | if (end - start > dcache_size) { |
483 | r4k_blast_dcache(); | 489 | r4k_blast_dcache(); |
484 | } else { | 490 | } else { |
485 | R4600_HIT_CACHEOP_WAR_IMPL; | 491 | R4600_HIT_CACHEOP_WAR_IMPL; |
486 | addr = start & ~(dc_lsize - 1); | 492 | protected_blast_dcache_range(start, end); |
487 | aend = (end - 1) & ~(dc_lsize - 1); | ||
488 | |||
489 | while (1) { | ||
490 | /* Hit_Writeback_Inv_D */ | ||
491 | protected_writeback_dcache_line(addr); | ||
492 | if (addr == aend) | ||
493 | break; | ||
494 | addr += dc_lsize; | ||
495 | } | ||
496 | } | 493 | } |
497 | 494 | ||
498 | if (!cpu_icache_snoops_remote_store) { | 495 | if (!cpu_icache_snoops_remote_store && scache_size) { |
499 | if (end - start > scache_size) { | 496 | if (end - start > scache_size) |
500 | r4k_blast_scache(); | 497 | r4k_blast_scache(); |
501 | } else { | 498 | else |
502 | addr = start & ~(sc_lsize - 1); | 499 | protected_blast_scache_range(start, end); |
503 | aend = (end - 1) & ~(sc_lsize - 1); | ||
504 | |||
505 | while (1) { | ||
506 | /* Hit_Writeback_Inv_SD */ | ||
507 | protected_writeback_scache_line(addr); | ||
508 | if (addr == aend) | ||
509 | break; | ||
510 | addr += sc_lsize; | ||
511 | } | ||
512 | } | ||
513 | } | 500 | } |
514 | } | 501 | } |
515 | 502 | ||
516 | if (end - start > icache_size) | 503 | if (end - start > icache_size) |
517 | r4k_blast_icache(); | 504 | r4k_blast_icache(); |
518 | else { | 505 | else |
519 | addr = start & ~(ic_lsize - 1); | 506 | protected_blast_icache_range(start, end); |
520 | aend = (end - 1) & ~(ic_lsize - 1); | ||
521 | while (1) { | ||
522 | /* Hit_Invalidate_I */ | ||
523 | protected_flush_icache_line(addr); | ||
524 | if (addr == aend) | ||
525 | break; | ||
526 | addr += ic_lsize; | ||
527 | } | ||
528 | } | ||
529 | } | 507 | } |
530 | 508 | ||
531 | static void r4k_flush_icache_range(unsigned long __user start, | 509 | static void r4k_flush_icache_range(unsigned long start, unsigned long end) |
532 | unsigned long __user end) | ||
533 | { | 510 | { |
534 | struct flush_icache_range_args args; | 511 | struct flush_icache_range_args args; |
535 | 512 | ||
@@ -620,27 +597,14 @@ static void r4k_flush_icache_page(struct vm_area_struct *vma, | |||
620 | 597 | ||
621 | static void r4k_dma_cache_wback_inv(unsigned long addr, unsigned long size) | 598 | static void r4k_dma_cache_wback_inv(unsigned long addr, unsigned long size) |
622 | { | 599 | { |
623 | unsigned long end, a; | ||
624 | |||
625 | /* Catch bad driver code */ | 600 | /* Catch bad driver code */ |
626 | BUG_ON(size == 0); | 601 | BUG_ON(size == 0); |
627 | 602 | ||
628 | if (cpu_has_subset_pcaches) { | 603 | if (cpu_has_subset_pcaches) { |
629 | unsigned long sc_lsize = cpu_scache_line_size(); | 604 | if (size >= scache_size) |
630 | |||
631 | if (size >= scache_size) { | ||
632 | r4k_blast_scache(); | 605 | r4k_blast_scache(); |
633 | return; | 606 | else |
634 | } | 607 | blast_scache_range(addr, addr + size); |
635 | |||
636 | a = addr & ~(sc_lsize - 1); | ||
637 | end = (addr + size - 1) & ~(sc_lsize - 1); | ||
638 | while (1) { | ||
639 | flush_scache_line(a); /* Hit_Writeback_Inv_SD */ | ||
640 | if (a == end) | ||
641 | break; | ||
642 | a += sc_lsize; | ||
643 | } | ||
644 | return; | 608 | return; |
645 | } | 609 | } |
646 | 610 | ||
@@ -652,17 +616,8 @@ static void r4k_dma_cache_wback_inv(unsigned long addr, unsigned long size) | |||
652 | if (size >= dcache_size) { | 616 | if (size >= dcache_size) { |
653 | r4k_blast_dcache(); | 617 | r4k_blast_dcache(); |
654 | } else { | 618 | } else { |
655 | unsigned long dc_lsize = cpu_dcache_line_size(); | ||
656 | |||
657 | R4600_HIT_CACHEOP_WAR_IMPL; | 619 | R4600_HIT_CACHEOP_WAR_IMPL; |
658 | a = addr & ~(dc_lsize - 1); | 620 | blast_dcache_range(addr, addr + size); |
659 | end = (addr + size - 1) & ~(dc_lsize - 1); | ||
660 | while (1) { | ||
661 | flush_dcache_line(a); /* Hit_Writeback_Inv_D */ | ||
662 | if (a == end) | ||
663 | break; | ||
664 | a += dc_lsize; | ||
665 | } | ||
666 | } | 621 | } |
667 | 622 | ||
668 | bc_wback_inv(addr, size); | 623 | bc_wback_inv(addr, size); |
@@ -670,44 +625,22 @@ static void r4k_dma_cache_wback_inv(unsigned long addr, unsigned long size) | |||
670 | 625 | ||
671 | static void r4k_dma_cache_inv(unsigned long addr, unsigned long size) | 626 | static void r4k_dma_cache_inv(unsigned long addr, unsigned long size) |
672 | { | 627 | { |
673 | unsigned long end, a; | ||
674 | |||
675 | /* Catch bad driver code */ | 628 | /* Catch bad driver code */ |
676 | BUG_ON(size == 0); | 629 | BUG_ON(size == 0); |
677 | 630 | ||
678 | if (cpu_has_subset_pcaches) { | 631 | if (cpu_has_subset_pcaches) { |
679 | unsigned long sc_lsize = cpu_scache_line_size(); | 632 | if (size >= scache_size) |
680 | |||
681 | if (size >= scache_size) { | ||
682 | r4k_blast_scache(); | 633 | r4k_blast_scache(); |
683 | return; | 634 | else |
684 | } | 635 | blast_scache_range(addr, addr + size); |
685 | |||
686 | a = addr & ~(sc_lsize - 1); | ||
687 | end = (addr + size - 1) & ~(sc_lsize - 1); | ||
688 | while (1) { | ||
689 | flush_scache_line(a); /* Hit_Writeback_Inv_SD */ | ||
690 | if (a == end) | ||
691 | break; | ||
692 | a += sc_lsize; | ||
693 | } | ||
694 | return; | 636 | return; |
695 | } | 637 | } |
696 | 638 | ||
697 | if (size >= dcache_size) { | 639 | if (size >= dcache_size) { |
698 | r4k_blast_dcache(); | 640 | r4k_blast_dcache(); |
699 | } else { | 641 | } else { |
700 | unsigned long dc_lsize = cpu_dcache_line_size(); | ||
701 | |||
702 | R4600_HIT_CACHEOP_WAR_IMPL; | 642 | R4600_HIT_CACHEOP_WAR_IMPL; |
703 | a = addr & ~(dc_lsize - 1); | 643 | blast_dcache_range(addr, addr + size); |
704 | end = (addr + size - 1) & ~(dc_lsize - 1); | ||
705 | while (1) { | ||
706 | flush_dcache_line(a); /* Hit_Writeback_Inv_D */ | ||
707 | if (a == end) | ||
708 | break; | ||
709 | a += dc_lsize; | ||
710 | } | ||
711 | } | 644 | } |
712 | 645 | ||
713 | bc_inv(addr, size); | 646 | bc_inv(addr, size); |
@@ -728,7 +661,7 @@ static void local_r4k_flush_cache_sigtramp(void * arg) | |||
728 | 661 | ||
729 | R4600_HIT_CACHEOP_WAR_IMPL; | 662 | R4600_HIT_CACHEOP_WAR_IMPL; |
730 | protected_writeback_dcache_line(addr & ~(dc_lsize - 1)); | 663 | protected_writeback_dcache_line(addr & ~(dc_lsize - 1)); |
731 | if (!cpu_icache_snoops_remote_store) | 664 | if (!cpu_icache_snoops_remote_store && scache_size) |
732 | protected_writeback_scache_line(addr & ~(sc_lsize - 1)); | 665 | protected_writeback_scache_line(addr & ~(sc_lsize - 1)); |
733 | protected_flush_icache_line(addr & ~(ic_lsize - 1)); | 666 | protected_flush_icache_line(addr & ~(ic_lsize - 1)); |
734 | if (MIPS4K_ICACHE_REFILL_WAR) { | 667 | if (MIPS4K_ICACHE_REFILL_WAR) { |
@@ -1027,6 +960,7 @@ static void __init probe_pcache(void) | |||
1027 | switch (c->cputype) { | 960 | switch (c->cputype) { |
1028 | case CPU_20KC: | 961 | case CPU_20KC: |
1029 | case CPU_25KF: | 962 | case CPU_25KF: |
963 | c->dcache.flags |= MIPS_CACHE_PINDEX; | ||
1030 | case CPU_R10000: | 964 | case CPU_R10000: |
1031 | case CPU_R12000: | 965 | case CPU_R12000: |
1032 | case CPU_SB1: | 966 | case CPU_SB1: |
diff --git a/arch/mips/mm/c-tx39.c b/arch/mips/mm/c-tx39.c index 0a97a9434eba..fe232e3988e3 100644 --- a/arch/mips/mm/c-tx39.c +++ b/arch/mips/mm/c-tx39.c | |||
@@ -44,8 +44,6 @@ __asm__ __volatile__( \ | |||
44 | /* TX39H-style cache flush routines. */ | 44 | /* TX39H-style cache flush routines. */ |
45 | static void tx39h_flush_icache_all(void) | 45 | static void tx39h_flush_icache_all(void) |
46 | { | 46 | { |
47 | unsigned long start = KSEG0; | ||
48 | unsigned long end = (start + icache_size); | ||
49 | unsigned long flags, config; | 47 | unsigned long flags, config; |
50 | 48 | ||
51 | /* disable icache (set ICE#) */ | 49 | /* disable icache (set ICE#) */ |
@@ -53,33 +51,18 @@ static void tx39h_flush_icache_all(void) | |||
53 | config = read_c0_conf(); | 51 | config = read_c0_conf(); |
54 | write_c0_conf(config & ~TX39_CONF_ICE); | 52 | write_c0_conf(config & ~TX39_CONF_ICE); |
55 | TX39_STOP_STREAMING(); | 53 | TX39_STOP_STREAMING(); |
56 | 54 | blast_icache16(); | |
57 | /* invalidate icache */ | ||
58 | while (start < end) { | ||
59 | cache16_unroll32(start, Index_Invalidate_I); | ||
60 | start += 0x200; | ||
61 | } | ||
62 | |||
63 | write_c0_conf(config); | 55 | write_c0_conf(config); |
64 | local_irq_restore(flags); | 56 | local_irq_restore(flags); |
65 | } | 57 | } |
66 | 58 | ||
67 | static void tx39h_dma_cache_wback_inv(unsigned long addr, unsigned long size) | 59 | static void tx39h_dma_cache_wback_inv(unsigned long addr, unsigned long size) |
68 | { | 60 | { |
69 | unsigned long end, a; | ||
70 | unsigned long dc_lsize = current_cpu_data.dcache.linesz; | ||
71 | |||
72 | /* Catch bad driver code */ | 61 | /* Catch bad driver code */ |
73 | BUG_ON(size == 0); | 62 | BUG_ON(size == 0); |
74 | 63 | ||
75 | iob(); | 64 | iob(); |
76 | a = addr & ~(dc_lsize - 1); | 65 | blast_inv_dcache_range(addr, addr + size); |
77 | end = (addr + size - 1) & ~(dc_lsize - 1); | ||
78 | while (1) { | ||
79 | invalidate_dcache_line(a); /* Hit_Invalidate_D */ | ||
80 | if (a == end) break; | ||
81 | a += dc_lsize; | ||
82 | } | ||
83 | } | 66 | } |
84 | 67 | ||
85 | 68 | ||
@@ -227,7 +210,6 @@ static void tx39_flush_cache_page(struct vm_area_struct *vma, unsigned long page | |||
227 | * Do indexed flush, too much work to get the (possible) TLB refills | 210 | * Do indexed flush, too much work to get the (possible) TLB refills |
228 | * to work correctly. | 211 | * to work correctly. |
229 | */ | 212 | */ |
230 | page = (KSEG0 + (page & (dcache_size - 1))); | ||
231 | if (cpu_has_dc_aliases || exec) | 213 | if (cpu_has_dc_aliases || exec) |
232 | tx39_blast_dcache_page_indexed(page); | 214 | tx39_blast_dcache_page_indexed(page); |
233 | if (exec) | 215 | if (exec) |
@@ -241,42 +223,21 @@ static void tx39_flush_data_cache_page(unsigned long addr) | |||
241 | 223 | ||
242 | static void tx39_flush_icache_range(unsigned long start, unsigned long end) | 224 | static void tx39_flush_icache_range(unsigned long start, unsigned long end) |
243 | { | 225 | { |
244 | unsigned long dc_lsize = current_cpu_data.dcache.linesz; | ||
245 | unsigned long addr, aend; | ||
246 | |||
247 | if (end - start > dcache_size) | 226 | if (end - start > dcache_size) |
248 | tx39_blast_dcache(); | 227 | tx39_blast_dcache(); |
249 | else { | 228 | else |
250 | addr = start & ~(dc_lsize - 1); | 229 | protected_blast_dcache_range(start, end); |
251 | aend = (end - 1) & ~(dc_lsize - 1); | ||
252 | |||
253 | while (1) { | ||
254 | /* Hit_Writeback_Inv_D */ | ||
255 | protected_writeback_dcache_line(addr); | ||
256 | if (addr == aend) | ||
257 | break; | ||
258 | addr += dc_lsize; | ||
259 | } | ||
260 | } | ||
261 | 230 | ||
262 | if (end - start > icache_size) | 231 | if (end - start > icache_size) |
263 | tx39_blast_icache(); | 232 | tx39_blast_icache(); |
264 | else { | 233 | else { |
265 | unsigned long flags, config; | 234 | unsigned long flags, config; |
266 | addr = start & ~(dc_lsize - 1); | ||
267 | aend = (end - 1) & ~(dc_lsize - 1); | ||
268 | /* disable icache (set ICE#) */ | 235 | /* disable icache (set ICE#) */ |
269 | local_irq_save(flags); | 236 | local_irq_save(flags); |
270 | config = read_c0_conf(); | 237 | config = read_c0_conf(); |
271 | write_c0_conf(config & ~TX39_CONF_ICE); | 238 | write_c0_conf(config & ~TX39_CONF_ICE); |
272 | TX39_STOP_STREAMING(); | 239 | TX39_STOP_STREAMING(); |
273 | while (1) { | 240 | protected_blast_icache_range(start, end); |
274 | /* Hit_Invalidate_I */ | ||
275 | protected_flush_icache_line(addr); | ||
276 | if (addr == aend) | ||
277 | break; | ||
278 | addr += dc_lsize; | ||
279 | } | ||
280 | write_c0_conf(config); | 241 | write_c0_conf(config); |
281 | local_irq_restore(flags); | 242 | local_irq_restore(flags); |
282 | } | 243 | } |
@@ -311,7 +272,7 @@ static void tx39_flush_icache_page(struct vm_area_struct *vma, struct page *page | |||
311 | 272 | ||
312 | static void tx39_dma_cache_wback_inv(unsigned long addr, unsigned long size) | 273 | static void tx39_dma_cache_wback_inv(unsigned long addr, unsigned long size) |
313 | { | 274 | { |
314 | unsigned long end, a; | 275 | unsigned long end; |
315 | 276 | ||
316 | if (((size | addr) & (PAGE_SIZE - 1)) == 0) { | 277 | if (((size | addr) & (PAGE_SIZE - 1)) == 0) { |
317 | end = addr + size; | 278 | end = addr + size; |
@@ -322,20 +283,13 @@ static void tx39_dma_cache_wback_inv(unsigned long addr, unsigned long size) | |||
322 | } else if (size > dcache_size) { | 283 | } else if (size > dcache_size) { |
323 | tx39_blast_dcache(); | 284 | tx39_blast_dcache(); |
324 | } else { | 285 | } else { |
325 | unsigned long dc_lsize = current_cpu_data.dcache.linesz; | 286 | blast_dcache_range(addr, addr + size); |
326 | a = addr & ~(dc_lsize - 1); | ||
327 | end = (addr + size - 1) & ~(dc_lsize - 1); | ||
328 | while (1) { | ||
329 | flush_dcache_line(a); /* Hit_Writeback_Inv_D */ | ||
330 | if (a == end) break; | ||
331 | a += dc_lsize; | ||
332 | } | ||
333 | } | 287 | } |
334 | } | 288 | } |
335 | 289 | ||
336 | static void tx39_dma_cache_inv(unsigned long addr, unsigned long size) | 290 | static void tx39_dma_cache_inv(unsigned long addr, unsigned long size) |
337 | { | 291 | { |
338 | unsigned long end, a; | 292 | unsigned long end; |
339 | 293 | ||
340 | if (((size | addr) & (PAGE_SIZE - 1)) == 0) { | 294 | if (((size | addr) & (PAGE_SIZE - 1)) == 0) { |
341 | end = addr + size; | 295 | end = addr + size; |
@@ -346,14 +300,7 @@ static void tx39_dma_cache_inv(unsigned long addr, unsigned long size) | |||
346 | } else if (size > dcache_size) { | 300 | } else if (size > dcache_size) { |
347 | tx39_blast_dcache(); | 301 | tx39_blast_dcache(); |
348 | } else { | 302 | } else { |
349 | unsigned long dc_lsize = current_cpu_data.dcache.linesz; | 303 | blast_inv_dcache_range(addr, addr + size); |
350 | a = addr & ~(dc_lsize - 1); | ||
351 | end = (addr + size - 1) & ~(dc_lsize - 1); | ||
352 | while (1) { | ||
353 | invalidate_dcache_line(a); /* Hit_Invalidate_D */ | ||
354 | if (a == end) break; | ||
355 | a += dc_lsize; | ||
356 | } | ||
357 | } | 304 | } |
358 | } | 305 | } |
359 | 306 | ||
diff --git a/arch/mips/mm/cache.c b/arch/mips/mm/cache.c index 314701a66b13..591c22b080e4 100644 --- a/arch/mips/mm/cache.c +++ b/arch/mips/mm/cache.c | |||
@@ -25,8 +25,7 @@ void (*flush_cache_range)(struct vm_area_struct *vma, unsigned long start, | |||
25 | unsigned long end); | 25 | unsigned long end); |
26 | void (*flush_cache_page)(struct vm_area_struct *vma, unsigned long page, | 26 | void (*flush_cache_page)(struct vm_area_struct *vma, unsigned long page, |
27 | unsigned long pfn); | 27 | unsigned long pfn); |
28 | void (*flush_icache_range)(unsigned long __user start, | 28 | void (*flush_icache_range)(unsigned long start, unsigned long end); |
29 | unsigned long __user end); | ||
30 | void (*flush_icache_page)(struct vm_area_struct *vma, struct page *page); | 29 | void (*flush_icache_page)(struct vm_area_struct *vma, struct page *page); |
31 | 30 | ||
32 | /* MIPS specific cache operations */ | 31 | /* MIPS specific cache operations */ |
@@ -53,7 +52,7 @@ EXPORT_SYMBOL(_dma_cache_inv); | |||
53 | * We could optimize the case where the cache argument is not BCACHE but | 52 | * We could optimize the case where the cache argument is not BCACHE but |
54 | * that seems very atypical use ... | 53 | * that seems very atypical use ... |
55 | */ | 54 | */ |
56 | asmlinkage int sys_cacheflush(unsigned long __user addr, | 55 | asmlinkage int sys_cacheflush(unsigned long addr, |
57 | unsigned long bytes, unsigned int cache) | 56 | unsigned long bytes, unsigned int cache) |
58 | { | 57 | { |
59 | if (bytes == 0) | 58 | if (bytes == 0) |
diff --git a/arch/mips/mm/cex-sb1.S b/arch/mips/mm/cex-sb1.S index 0e71580774ff..e54a62f2807c 100644 --- a/arch/mips/mm/cex-sb1.S +++ b/arch/mips/mm/cex-sb1.S | |||
@@ -64,7 +64,7 @@ LEAF(except_vec2_sb1) | |||
64 | sd k0,0x170($0) | 64 | sd k0,0x170($0) |
65 | sd k1,0x178($0) | 65 | sd k1,0x178($0) |
66 | 66 | ||
67 | #if CONFIG_SB1_CEX_ALWAYS_FATAL | 67 | #ifdef CONFIG_SB1_CEX_ALWAYS_FATAL |
68 | j handle_vec2_sb1 | 68 | j handle_vec2_sb1 |
69 | nop | 69 | nop |
70 | #else | 70 | #else |
diff --git a/arch/mips/mm/init.c b/arch/mips/mm/init.c index 4ee91c9a556f..0ff9a348b843 100644 --- a/arch/mips/mm/init.c +++ b/arch/mips/mm/init.c | |||
@@ -24,6 +24,7 @@ | |||
24 | #include <linux/bootmem.h> | 24 | #include <linux/bootmem.h> |
25 | #include <linux/highmem.h> | 25 | #include <linux/highmem.h> |
26 | #include <linux/swap.h> | 26 | #include <linux/swap.h> |
27 | #include <linux/proc_fs.h> | ||
27 | 28 | ||
28 | #include <asm/bootinfo.h> | 29 | #include <asm/bootinfo.h> |
29 | #include <asm/cachectl.h> | 30 | #include <asm/cachectl.h> |
@@ -200,6 +201,11 @@ static inline int page_is_ram(unsigned long pagenr) | |||
200 | return 0; | 201 | return 0; |
201 | } | 202 | } |
202 | 203 | ||
204 | static struct kcore_list kcore_mem, kcore_vmalloc; | ||
205 | #ifdef CONFIG_64BIT | ||
206 | static struct kcore_list kcore_kseg0; | ||
207 | #endif | ||
208 | |||
203 | void __init mem_init(void) | 209 | void __init mem_init(void) |
204 | { | 210 | { |
205 | unsigned long codesize, reservedpages, datasize, initsize; | 211 | unsigned long codesize, reservedpages, datasize, initsize; |
@@ -249,6 +255,16 @@ void __init mem_init(void) | |||
249 | datasize = (unsigned long) &_edata - (unsigned long) &_etext; | 255 | datasize = (unsigned long) &_edata - (unsigned long) &_etext; |
250 | initsize = (unsigned long) &__init_end - (unsigned long) &__init_begin; | 256 | initsize = (unsigned long) &__init_end - (unsigned long) &__init_begin; |
251 | 257 | ||
258 | #ifdef CONFIG_64BIT | ||
259 | if ((unsigned long) &_text > (unsigned long) CKSEG0) | ||
260 | /* The -4 is a hack so that user tools don't have to handle | ||
261 | the overflow. */ | ||
262 | kclist_add(&kcore_kseg0, (void *) CKSEG0, 0x80000000 - 4); | ||
263 | #endif | ||
264 | kclist_add(&kcore_mem, __va(0), max_low_pfn << PAGE_SHIFT); | ||
265 | kclist_add(&kcore_vmalloc, (void *)VMALLOC_START, | ||
266 | VMALLOC_END-VMALLOC_START); | ||
267 | |||
252 | printk(KERN_INFO "Memory: %luk/%luk available (%ldk kernel code, " | 268 | printk(KERN_INFO "Memory: %luk/%luk available (%ldk kernel code, " |
253 | "%ldk reserved, %ldk data, %ldk init, %ldk highmem)\n", | 269 | "%ldk reserved, %ldk data, %ldk init, %ldk highmem)\n", |
254 | (unsigned long) nr_free_pages() << (PAGE_SHIFT-10), | 270 | (unsigned long) nr_free_pages() << (PAGE_SHIFT-10), |
diff --git a/arch/mips/mm/tlbex.c b/arch/mips/mm/tlbex.c index 0f9485806bac..ac4f4bfaae50 100644 --- a/arch/mips/mm/tlbex.c +++ b/arch/mips/mm/tlbex.c | |||
@@ -280,69 +280,69 @@ static void __init build_insn(u32 **buf, enum opcode opc, ...) | |||
280 | } | 280 | } |
281 | 281 | ||
282 | #define I_u1u2u3(op) \ | 282 | #define I_u1u2u3(op) \ |
283 | static inline void i##op(u32 **buf, unsigned int a, \ | 283 | static inline void __init i##op(u32 **buf, unsigned int a, \ |
284 | unsigned int b, unsigned int c) \ | 284 | unsigned int b, unsigned int c) \ |
285 | { \ | 285 | { \ |
286 | build_insn(buf, insn##op, a, b, c); \ | 286 | build_insn(buf, insn##op, a, b, c); \ |
287 | } | 287 | } |
288 | 288 | ||
289 | #define I_u2u1u3(op) \ | 289 | #define I_u2u1u3(op) \ |
290 | static inline void i##op(u32 **buf, unsigned int a, \ | 290 | static inline void __init i##op(u32 **buf, unsigned int a, \ |
291 | unsigned int b, unsigned int c) \ | 291 | unsigned int b, unsigned int c) \ |
292 | { \ | 292 | { \ |
293 | build_insn(buf, insn##op, b, a, c); \ | 293 | build_insn(buf, insn##op, b, a, c); \ |
294 | } | 294 | } |
295 | 295 | ||
296 | #define I_u3u1u2(op) \ | 296 | #define I_u3u1u2(op) \ |
297 | static inline void i##op(u32 **buf, unsigned int a, \ | 297 | static inline void __init i##op(u32 **buf, unsigned int a, \ |
298 | unsigned int b, unsigned int c) \ | 298 | unsigned int b, unsigned int c) \ |
299 | { \ | 299 | { \ |
300 | build_insn(buf, insn##op, b, c, a); \ | 300 | build_insn(buf, insn##op, b, c, a); \ |
301 | } | 301 | } |
302 | 302 | ||
303 | #define I_u1u2s3(op) \ | 303 | #define I_u1u2s3(op) \ |
304 | static inline void i##op(u32 **buf, unsigned int a, \ | 304 | static inline void __init i##op(u32 **buf, unsigned int a, \ |
305 | unsigned int b, signed int c) \ | 305 | unsigned int b, signed int c) \ |
306 | { \ | 306 | { \ |
307 | build_insn(buf, insn##op, a, b, c); \ | 307 | build_insn(buf, insn##op, a, b, c); \ |
308 | } | 308 | } |
309 | 309 | ||
310 | #define I_u2s3u1(op) \ | 310 | #define I_u2s3u1(op) \ |
311 | static inline void i##op(u32 **buf, unsigned int a, \ | 311 | static inline void __init i##op(u32 **buf, unsigned int a, \ |
312 | signed int b, unsigned int c) \ | 312 | signed int b, unsigned int c) \ |
313 | { \ | 313 | { \ |
314 | build_insn(buf, insn##op, c, a, b); \ | 314 | build_insn(buf, insn##op, c, a, b); \ |
315 | } | 315 | } |
316 | 316 | ||
317 | #define I_u2u1s3(op) \ | 317 | #define I_u2u1s3(op) \ |
318 | static inline void i##op(u32 **buf, unsigned int a, \ | 318 | static inline void __init i##op(u32 **buf, unsigned int a, \ |
319 | unsigned int b, signed int c) \ | 319 | unsigned int b, signed int c) \ |
320 | { \ | 320 | { \ |
321 | build_insn(buf, insn##op, b, a, c); \ | 321 | build_insn(buf, insn##op, b, a, c); \ |
322 | } | 322 | } |
323 | 323 | ||
324 | #define I_u1u2(op) \ | 324 | #define I_u1u2(op) \ |
325 | static inline void i##op(u32 **buf, unsigned int a, \ | 325 | static inline void __init i##op(u32 **buf, unsigned int a, \ |
326 | unsigned int b) \ | 326 | unsigned int b) \ |
327 | { \ | 327 | { \ |
328 | build_insn(buf, insn##op, a, b); \ | 328 | build_insn(buf, insn##op, a, b); \ |
329 | } | 329 | } |
330 | 330 | ||
331 | #define I_u1s2(op) \ | 331 | #define I_u1s2(op) \ |
332 | static inline void i##op(u32 **buf, unsigned int a, \ | 332 | static inline void __init i##op(u32 **buf, unsigned int a, \ |
333 | signed int b) \ | 333 | signed int b) \ |
334 | { \ | 334 | { \ |
335 | build_insn(buf, insn##op, a, b); \ | 335 | build_insn(buf, insn##op, a, b); \ |
336 | } | 336 | } |
337 | 337 | ||
338 | #define I_u1(op) \ | 338 | #define I_u1(op) \ |
339 | static inline void i##op(u32 **buf, unsigned int a) \ | 339 | static inline void __init i##op(u32 **buf, unsigned int a) \ |
340 | { \ | 340 | { \ |
341 | build_insn(buf, insn##op, a); \ | 341 | build_insn(buf, insn##op, a); \ |
342 | } | 342 | } |
343 | 343 | ||
344 | #define I_0(op) \ | 344 | #define I_0(op) \ |
345 | static inline void i##op(u32 **buf) \ | 345 | static inline void __init i##op(u32 **buf) \ |
346 | { \ | 346 | { \ |
347 | build_insn(buf, insn##op); \ | 347 | build_insn(buf, insn##op); \ |
348 | } | 348 | } |
@@ -623,42 +623,42 @@ static __init int __attribute__((unused)) insn_has_bdelay(struct reloc *rel, | |||
623 | } | 623 | } |
624 | 624 | ||
625 | /* convenience functions for labeled branches */ | 625 | /* convenience functions for labeled branches */ |
626 | static void __attribute__((unused)) il_bltz(u32 **p, struct reloc **r, | 626 | static void __init __attribute__((unused)) |
627 | unsigned int reg, enum label_id l) | 627 | il_bltz(u32 **p, struct reloc **r, unsigned int reg, enum label_id l) |
628 | { | 628 | { |
629 | r_mips_pc16(r, *p, l); | 629 | r_mips_pc16(r, *p, l); |
630 | i_bltz(p, reg, 0); | 630 | i_bltz(p, reg, 0); |
631 | } | 631 | } |
632 | 632 | ||
633 | static void __attribute__((unused)) il_b(u32 **p, struct reloc **r, | 633 | static void __init __attribute__((unused)) il_b(u32 **p, struct reloc **r, |
634 | enum label_id l) | 634 | enum label_id l) |
635 | { | 635 | { |
636 | r_mips_pc16(r, *p, l); | 636 | r_mips_pc16(r, *p, l); |
637 | i_b(p, 0); | 637 | i_b(p, 0); |
638 | } | 638 | } |
639 | 639 | ||
640 | static void il_beqz(u32 **p, struct reloc **r, unsigned int reg, | 640 | static void __init il_beqz(u32 **p, struct reloc **r, unsigned int reg, |
641 | enum label_id l) | 641 | enum label_id l) |
642 | { | 642 | { |
643 | r_mips_pc16(r, *p, l); | 643 | r_mips_pc16(r, *p, l); |
644 | i_beqz(p, reg, 0); | 644 | i_beqz(p, reg, 0); |
645 | } | 645 | } |
646 | 646 | ||
647 | static void __attribute__((unused)) | 647 | static void __init __attribute__((unused)) |
648 | il_beqzl(u32 **p, struct reloc **r, unsigned int reg, enum label_id l) | 648 | il_beqzl(u32 **p, struct reloc **r, unsigned int reg, enum label_id l) |
649 | { | 649 | { |
650 | r_mips_pc16(r, *p, l); | 650 | r_mips_pc16(r, *p, l); |
651 | i_beqzl(p, reg, 0); | 651 | i_beqzl(p, reg, 0); |
652 | } | 652 | } |
653 | 653 | ||
654 | static void il_bnez(u32 **p, struct reloc **r, unsigned int reg, | 654 | static void __init il_bnez(u32 **p, struct reloc **r, unsigned int reg, |
655 | enum label_id l) | 655 | enum label_id l) |
656 | { | 656 | { |
657 | r_mips_pc16(r, *p, l); | 657 | r_mips_pc16(r, *p, l); |
658 | i_bnez(p, reg, 0); | 658 | i_bnez(p, reg, 0); |
659 | } | 659 | } |
660 | 660 | ||
661 | static void il_bgezl(u32 **p, struct reloc **r, unsigned int reg, | 661 | static void __init il_bgezl(u32 **p, struct reloc **r, unsigned int reg, |
662 | enum label_id l) | 662 | enum label_id l) |
663 | { | 663 | { |
664 | r_mips_pc16(r, *p, l); | 664 | r_mips_pc16(r, *p, l); |
diff --git a/arch/mips/momentum/jaguar_atx/ja-console.c b/arch/mips/momentum/jaguar_atx/ja-console.c index da6e1ed34db1..2292d0ec47fc 100644 --- a/arch/mips/momentum/jaguar_atx/ja-console.c +++ b/arch/mips/momentum/jaguar_atx/ja-console.c | |||
@@ -93,7 +93,7 @@ static void inline ja_console_probe(void) | |||
93 | up.uartclk = JAGUAR_ATX_UART_CLK; | 93 | up.uartclk = JAGUAR_ATX_UART_CLK; |
94 | up.regshift = 2; | 94 | up.regshift = 2; |
95 | up.iotype = UPIO_MEM; | 95 | up.iotype = UPIO_MEM; |
96 | up.flags = ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST; | 96 | up.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST; |
97 | up.line = 0; | 97 | up.line = 0; |
98 | 98 | ||
99 | if (early_serial_setup(&up)) | 99 | if (early_serial_setup(&up)) |
diff --git a/arch/mips/momentum/jaguar_atx/prom.c b/arch/mips/momentum/jaguar_atx/prom.c index aae7a802767a..1cadaa92946a 100644 --- a/arch/mips/momentum/jaguar_atx/prom.c +++ b/arch/mips/momentum/jaguar_atx/prom.c | |||
@@ -21,10 +21,10 @@ | |||
21 | #include <linux/mm.h> | 21 | #include <linux/mm.h> |
22 | #include <linux/sched.h> | 22 | #include <linux/sched.h> |
23 | #include <linux/bootmem.h> | 23 | #include <linux/bootmem.h> |
24 | #include <linux/mv643xx.h> | ||
24 | 25 | ||
25 | #include <asm/addrspace.h> | 26 | #include <asm/addrspace.h> |
26 | #include <asm/bootinfo.h> | 27 | #include <asm/bootinfo.h> |
27 | #include <asm/mv64340.h> | ||
28 | #include <asm/pmon.h> | 28 | #include <asm/pmon.h> |
29 | 29 | ||
30 | #include "jaguar_atx_fpga.h" | 30 | #include "jaguar_atx_fpga.h" |
diff --git a/arch/mips/momentum/jaguar_atx/setup.c b/arch/mips/momentum/jaguar_atx/setup.c index bab192ddc185..2699917b640a 100644 --- a/arch/mips/momentum/jaguar_atx/setup.c +++ b/arch/mips/momentum/jaguar_atx/setup.c | |||
@@ -2,7 +2,7 @@ | |||
2 | * BRIEF MODULE DESCRIPTION | 2 | * BRIEF MODULE DESCRIPTION |
3 | * Momentum Computer Jaguar-ATX board dependent boot routines | 3 | * Momentum Computer Jaguar-ATX board dependent boot routines |
4 | * | 4 | * |
5 | * Copyright (C) 1996, 1997, 2001, 2004 Ralf Baechle (ralf@linux-mips.org) | 5 | * Copyright (C) 1996, 1997, 2001, 04, 06 Ralf Baechle (ralf@linux-mips.org) |
6 | * Copyright (C) 2000 RidgeRun, Inc. | 6 | * Copyright (C) 2000 RidgeRun, Inc. |
7 | * Copyright (C) 2001 Red Hat, Inc. | 7 | * Copyright (C) 2001 Red Hat, Inc. |
8 | * Copyright (C) 2002 Momentum Computer | 8 | * Copyright (C) 2002 Momentum Computer |
@@ -50,10 +50,13 @@ | |||
50 | #include <linux/pci.h> | 50 | #include <linux/pci.h> |
51 | #include <linux/swap.h> | 51 | #include <linux/swap.h> |
52 | #include <linux/ioport.h> | 52 | #include <linux/ioport.h> |
53 | #include <linux/pm.h> | ||
53 | #include <linux/sched.h> | 54 | #include <linux/sched.h> |
54 | #include <linux/interrupt.h> | 55 | #include <linux/interrupt.h> |
55 | #include <linux/timex.h> | 56 | #include <linux/timex.h> |
56 | #include <linux/vmalloc.h> | 57 | #include <linux/vmalloc.h> |
58 | #include <linux/mv643xx.h> | ||
59 | |||
57 | #include <asm/time.h> | 60 | #include <asm/time.h> |
58 | #include <asm/bootinfo.h> | 61 | #include <asm/bootinfo.h> |
59 | #include <asm/page.h> | 62 | #include <asm/page.h> |
@@ -63,7 +66,6 @@ | |||
63 | #include <asm/ptrace.h> | 66 | #include <asm/ptrace.h> |
64 | #include <asm/reboot.h> | 67 | #include <asm/reboot.h> |
65 | #include <asm/tlbflush.h> | 68 | #include <asm/tlbflush.h> |
66 | #include <asm/mv64340.h> | ||
67 | 69 | ||
68 | #include "jaguar_atx_fpga.h" | 70 | #include "jaguar_atx_fpga.h" |
69 | 71 | ||
@@ -365,7 +367,7 @@ void __init plat_setup(void) | |||
365 | 367 | ||
366 | _machine_restart = momenco_jaguar_restart; | 368 | _machine_restart = momenco_jaguar_restart; |
367 | _machine_halt = momenco_jaguar_halt; | 369 | _machine_halt = momenco_jaguar_halt; |
368 | _machine_power_off = momenco_jaguar_power_off; | 370 | pm_power_off = momenco_jaguar_power_off; |
369 | 371 | ||
370 | /* | 372 | /* |
371 | * initrd_start = (ulong)jaguar_initrd_start; | 373 | * initrd_start = (ulong)jaguar_initrd_start; |
diff --git a/arch/mips/momentum/ocelot_3/setup.c b/arch/mips/momentum/ocelot_3/setup.c index c9b7ff8148ec..f95677f4f06f 100644 --- a/arch/mips/momentum/ocelot_3/setup.c +++ b/arch/mips/momentum/ocelot_3/setup.c | |||
@@ -57,6 +57,8 @@ | |||
57 | #include <linux/timex.h> | 57 | #include <linux/timex.h> |
58 | #include <linux/bootmem.h> | 58 | #include <linux/bootmem.h> |
59 | #include <linux/mv643xx.h> | 59 | #include <linux/mv643xx.h> |
60 | #include <linux/pm.h> | ||
61 | |||
60 | #include <asm/time.h> | 62 | #include <asm/time.h> |
61 | #include <asm/page.h> | 63 | #include <asm/page.h> |
62 | #include <asm/bootinfo.h> | 64 | #include <asm/bootinfo.h> |
@@ -321,7 +323,7 @@ void __init plat_setup(void) | |||
321 | 323 | ||
322 | _machine_restart = momenco_ocelot_restart; | 324 | _machine_restart = momenco_ocelot_restart; |
323 | _machine_halt = momenco_ocelot_halt; | 325 | _machine_halt = momenco_ocelot_halt; |
324 | _machine_power_off = momenco_ocelot_power_off; | 326 | pm_power_off = momenco_ocelot_power_off; |
325 | 327 | ||
326 | /* Wired TLB entries */ | 328 | /* Wired TLB entries */ |
327 | setup_wired_tlb_entries(); | 329 | setup_wired_tlb_entries(); |
diff --git a/arch/mips/momentum/ocelot_c/irq.c b/arch/mips/momentum/ocelot_c/irq.c index 300fe8e4fbe8..a5764bc20e36 100644 --- a/arch/mips/momentum/ocelot_c/irq.c +++ b/arch/mips/momentum/ocelot_c/irq.c | |||
@@ -41,11 +41,11 @@ | |||
41 | #include <linux/slab.h> | 41 | #include <linux/slab.h> |
42 | #include <linux/random.h> | 42 | #include <linux/random.h> |
43 | #include <linux/bitops.h> | 43 | #include <linux/bitops.h> |
44 | #include <linux/mv643xx.h> | ||
44 | #include <asm/bootinfo.h> | 45 | #include <asm/bootinfo.h> |
45 | #include <asm/io.h> | 46 | #include <asm/io.h> |
46 | #include <asm/irq_cpu.h> | 47 | #include <asm/irq_cpu.h> |
47 | #include <asm/mipsregs.h> | 48 | #include <asm/mipsregs.h> |
48 | #include <asm/mv64340.h> | ||
49 | #include <asm/system.h> | 49 | #include <asm/system.h> |
50 | 50 | ||
51 | extern asmlinkage void ocelot_handle_int(void); | 51 | extern asmlinkage void ocelot_handle_int(void); |
diff --git a/arch/mips/momentum/ocelot_c/prom.c b/arch/mips/momentum/ocelot_c/prom.c index 5b6809724b15..e92364482c7b 100644 --- a/arch/mips/momentum/ocelot_c/prom.c +++ b/arch/mips/momentum/ocelot_c/prom.c | |||
@@ -19,10 +19,10 @@ | |||
19 | #include <linux/mm.h> | 19 | #include <linux/mm.h> |
20 | #include <linux/sched.h> | 20 | #include <linux/sched.h> |
21 | #include <linux/bootmem.h> | 21 | #include <linux/bootmem.h> |
22 | #include <linux/mv643xx.h> | ||
22 | 23 | ||
23 | #include <asm/addrspace.h> | 24 | #include <asm/addrspace.h> |
24 | #include <asm/bootinfo.h> | 25 | #include <asm/bootinfo.h> |
25 | #include <asm/mv64340.h> | ||
26 | #include <asm/pmon.h> | 26 | #include <asm/pmon.h> |
27 | 27 | ||
28 | #include "ocelot_c_fpga.h" | 28 | #include "ocelot_c_fpga.h" |
diff --git a/arch/mips/momentum/ocelot_c/setup.c b/arch/mips/momentum/ocelot_c/setup.c index 2755c1547473..bd02e60d037a 100644 --- a/arch/mips/momentum/ocelot_c/setup.c +++ b/arch/mips/momentum/ocelot_c/setup.c | |||
@@ -51,8 +51,11 @@ | |||
51 | #include <linux/sched.h> | 51 | #include <linux/sched.h> |
52 | #include <linux/interrupt.h> | 52 | #include <linux/interrupt.h> |
53 | #include <linux/pci.h> | 53 | #include <linux/pci.h> |
54 | #include <linux/pm.h> | ||
54 | #include <linux/timex.h> | 55 | #include <linux/timex.h> |
55 | #include <linux/vmalloc.h> | 56 | #include <linux/vmalloc.h> |
57 | #include <linux/mv643xx.h> | ||
58 | |||
56 | #include <asm/time.h> | 59 | #include <asm/time.h> |
57 | #include <asm/bootinfo.h> | 60 | #include <asm/bootinfo.h> |
58 | #include <asm/page.h> | 61 | #include <asm/page.h> |
@@ -62,9 +65,9 @@ | |||
62 | #include <asm/processor.h> | 65 | #include <asm/processor.h> |
63 | #include <asm/ptrace.h> | 66 | #include <asm/ptrace.h> |
64 | #include <asm/reboot.h> | 67 | #include <asm/reboot.h> |
68 | #include <asm/marvell.h> | ||
65 | #include <linux/bootmem.h> | 69 | #include <linux/bootmem.h> |
66 | #include <linux/blkdev.h> | 70 | #include <linux/blkdev.h> |
67 | #include <asm/mv64340.h> | ||
68 | #include "ocelot_c_fpga.h" | 71 | #include "ocelot_c_fpga.h" |
69 | 72 | ||
70 | unsigned long marvell_base; | 73 | unsigned long marvell_base; |
@@ -236,7 +239,7 @@ void __init plat_setup(void) | |||
236 | 239 | ||
237 | _machine_restart = momenco_ocelot_restart; | 240 | _machine_restart = momenco_ocelot_restart; |
238 | _machine_halt = momenco_ocelot_halt; | 241 | _machine_halt = momenco_ocelot_halt; |
239 | _machine_power_off = momenco_ocelot_power_off; | 242 | pm_power_off = momenco_ocelot_power_off; |
240 | 243 | ||
241 | /* | 244 | /* |
242 | * initrd_start = (ulong)ocelot_initrd_start; | 245 | * initrd_start = (ulong)ocelot_initrd_start; |
@@ -250,22 +253,22 @@ void __init plat_setup(void) | |||
250 | /* shut down ethernet ports, just to be sure our memory doesn't get | 253 | /* shut down ethernet ports, just to be sure our memory doesn't get |
251 | * corrupted by random ethernet traffic. | 254 | * corrupted by random ethernet traffic. |
252 | */ | 255 | */ |
253 | MV_WRITE(MV64340_ETH_TRANSMIT_QUEUE_COMMAND_REG(0), 0xff << 8); | 256 | MV_WRITE(MV643XX_ETH_TRANSMIT_QUEUE_COMMAND_REG(0), 0xff << 8); |
254 | MV_WRITE(MV64340_ETH_TRANSMIT_QUEUE_COMMAND_REG(1), 0xff << 8); | 257 | MV_WRITE(MV643XX_ETH_TRANSMIT_QUEUE_COMMAND_REG(1), 0xff << 8); |
255 | MV_WRITE(MV64340_ETH_RECEIVE_QUEUE_COMMAND_REG(0), 0xff << 8); | 258 | MV_WRITE(MV643XX_ETH_RECEIVE_QUEUE_COMMAND_REG(0), 0xff << 8); |
256 | MV_WRITE(MV64340_ETH_RECEIVE_QUEUE_COMMAND_REG(1), 0xff << 8); | 259 | MV_WRITE(MV643XX_ETH_RECEIVE_QUEUE_COMMAND_REG(1), 0xff << 8); |
257 | do {} | 260 | do {} |
258 | while (MV_READ(MV64340_ETH_RECEIVE_QUEUE_COMMAND_REG(0)) & 0xff); | 261 | while (MV_READ(MV643XX_ETH_RECEIVE_QUEUE_COMMAND_REG(0)) & 0xff); |
259 | do {} | 262 | do {} |
260 | while (MV_READ(MV64340_ETH_RECEIVE_QUEUE_COMMAND_REG(1)) & 0xff); | 263 | while (MV_READ(MV643XX_ETH_RECEIVE_QUEUE_COMMAND_REG(1)) & 0xff); |
261 | do {} | 264 | do {} |
262 | while (MV_READ(MV64340_ETH_TRANSMIT_QUEUE_COMMAND_REG(0)) & 0xff); | 265 | while (MV_READ(MV643XX_ETH_TRANSMIT_QUEUE_COMMAND_REG(0)) & 0xff); |
263 | do {} | 266 | do {} |
264 | while (MV_READ(MV64340_ETH_TRANSMIT_QUEUE_COMMAND_REG(1)) & 0xff); | 267 | while (MV_READ(MV643XX_ETH_TRANSMIT_QUEUE_COMMAND_REG(1)) & 0xff); |
265 | MV_WRITE(MV64340_ETH_PORT_SERIAL_CONTROL_REG(0), | 268 | MV_WRITE(MV643XX_ETH_PORT_SERIAL_CONTROL_REG(0), |
266 | MV_READ(MV64340_ETH_PORT_SERIAL_CONTROL_REG(0)) & ~1); | 269 | MV_READ(MV643XX_ETH_PORT_SERIAL_CONTROL_REG(0)) & ~1); |
267 | MV_WRITE(MV64340_ETH_PORT_SERIAL_CONTROL_REG(1), | 270 | MV_WRITE(MV643XX_ETH_PORT_SERIAL_CONTROL_REG(1), |
268 | MV_READ(MV64340_ETH_PORT_SERIAL_CONTROL_REG(1)) & ~1); | 271 | MV_READ(MV643XX_ETH_PORT_SERIAL_CONTROL_REG(1)) & ~1); |
269 | 272 | ||
270 | /* Turn off the Bit-Error LED */ | 273 | /* Turn off the Bit-Error LED */ |
271 | OCELOT_FPGA_WRITE(0x80, CLR); | 274 | OCELOT_FPGA_WRITE(0x80, CLR); |
diff --git a/arch/mips/momentum/ocelot_g/setup.c b/arch/mips/momentum/ocelot_g/setup.c index 6336751391c3..fed4e8eee116 100644 --- a/arch/mips/momentum/ocelot_g/setup.c +++ b/arch/mips/momentum/ocelot_g/setup.c | |||
@@ -47,8 +47,10 @@ | |||
47 | #include <linux/sched.h> | 47 | #include <linux/sched.h> |
48 | #include <linux/interrupt.h> | 48 | #include <linux/interrupt.h> |
49 | #include <linux/pci.h> | 49 | #include <linux/pci.h> |
50 | #include <linux/pm.h> | ||
50 | #include <linux/timex.h> | 51 | #include <linux/timex.h> |
51 | #include <linux/vmalloc.h> | 52 | #include <linux/vmalloc.h> |
53 | |||
52 | #include <asm/time.h> | 54 | #include <asm/time.h> |
53 | #include <asm/bootinfo.h> | 55 | #include <asm/bootinfo.h> |
54 | #include <asm/page.h> | 56 | #include <asm/page.h> |
@@ -169,7 +171,7 @@ void __init plat_setup(void) | |||
169 | 171 | ||
170 | _machine_restart = momenco_ocelot_restart; | 172 | _machine_restart = momenco_ocelot_restart; |
171 | _machine_halt = momenco_ocelot_halt; | 173 | _machine_halt = momenco_ocelot_halt; |
172 | _machine_power_off = momenco_ocelot_power_off; | 174 | pm_power_off = momenco_ocelot_power_off; |
173 | 175 | ||
174 | /* | 176 | /* |
175 | * initrd_start = (ulong)ocelot_initrd_start; | 177 | * initrd_start = (ulong)ocelot_initrd_start; |
diff --git a/arch/mips/oprofile/Makefile b/arch/mips/oprofile/Makefile index 354261d37d62..0a50aad5bbe4 100644 --- a/arch/mips/oprofile/Makefile +++ b/arch/mips/oprofile/Makefile | |||
@@ -12,4 +12,5 @@ oprofile-y := $(DRIVER_OBJS) common.o | |||
12 | 12 | ||
13 | oprofile-$(CONFIG_CPU_MIPS32) += op_model_mipsxx.o | 13 | oprofile-$(CONFIG_CPU_MIPS32) += op_model_mipsxx.o |
14 | oprofile-$(CONFIG_CPU_MIPS64) += op_model_mipsxx.o | 14 | oprofile-$(CONFIG_CPU_MIPS64) += op_model_mipsxx.o |
15 | oprofile-$(CONFIG_CPU_SB1) += op_model_mipsxx.o | ||
15 | oprofile-$(CONFIG_CPU_RM9000) += op_model_rm9000.o | 16 | oprofile-$(CONFIG_CPU_RM9000) += op_model_rm9000.o |
diff --git a/arch/mips/oprofile/common.c b/arch/mips/oprofile/common.c index 53f9889b30ed..935dd851f480 100644 --- a/arch/mips/oprofile/common.c +++ b/arch/mips/oprofile/common.c | |||
@@ -79,6 +79,9 @@ int __init oprofile_arch_init(struct oprofile_operations *ops) | |||
79 | case CPU_20KC: | 79 | case CPU_20KC: |
80 | case CPU_24K: | 80 | case CPU_24K: |
81 | case CPU_25KF: | 81 | case CPU_25KF: |
82 | case CPU_34K: | ||
83 | case CPU_SB1: | ||
84 | case CPU_SB1A: | ||
82 | lmodel = &op_model_mipsxx; | 85 | lmodel = &op_model_mipsxx; |
83 | break; | 86 | break; |
84 | 87 | ||
diff --git a/arch/mips/oprofile/op_model_mipsxx.c b/arch/mips/oprofile/op_model_mipsxx.c index 1d1eee407faf..95d488ca0754 100644 --- a/arch/mips/oprofile/op_model_mipsxx.c +++ b/arch/mips/oprofile/op_model_mipsxx.c | |||
@@ -201,10 +201,21 @@ static int __init mipsxx_init(void) | |||
201 | op_model_mipsxx.cpu_type = "mips/25K"; | 201 | op_model_mipsxx.cpu_type = "mips/25K"; |
202 | break; | 202 | break; |
203 | 203 | ||
204 | #ifndef CONFIG_SMP | ||
205 | case CPU_34K: | ||
206 | op_model_mipsxx.cpu_type = "mips/34K"; | ||
207 | break; | ||
208 | #endif | ||
209 | |||
204 | case CPU_5KC: | 210 | case CPU_5KC: |
205 | op_model_mipsxx.cpu_type = "mips/5K"; | 211 | op_model_mipsxx.cpu_type = "mips/5K"; |
206 | break; | 212 | break; |
207 | 213 | ||
214 | case CPU_SB1: | ||
215 | case CPU_SB1A: | ||
216 | op_model_mipsxx.cpu_type = "mips/sb1"; | ||
217 | break; | ||
218 | |||
208 | default: | 219 | default: |
209 | printk(KERN_ERR "Profiling unsupported for this CPU\n"); | 220 | printk(KERN_ERR "Profiling unsupported for this CPU\n"); |
210 | 221 | ||
diff --git a/arch/mips/pci/Makefile b/arch/mips/pci/Makefile index 741e67c9195a..16205b587338 100644 --- a/arch/mips/pci/Makefile +++ b/arch/mips/pci/Makefile | |||
@@ -46,6 +46,7 @@ obj-$(CONFIG_PMC_YOSEMITE) += fixup-yosemite.o ops-titan.o ops-titan-ht.o \ | |||
46 | obj-$(CONFIG_SGI_IP27) += pci-ip27.o | 46 | obj-$(CONFIG_SGI_IP27) += pci-ip27.o |
47 | obj-$(CONFIG_SGI_IP32) += fixup-ip32.o ops-mace.o pci-ip32.o | 47 | obj-$(CONFIG_SGI_IP32) += fixup-ip32.o ops-mace.o pci-ip32.o |
48 | obj-$(CONFIG_SIBYTE_SB1250) += fixup-sb1250.o pci-sb1250.o | 48 | obj-$(CONFIG_SIBYTE_SB1250) += fixup-sb1250.o pci-sb1250.o |
49 | obj-$(CONFIG_SIBYTE_BCM112X) += fixup-sb1250.o pci-sb1250.o | ||
49 | obj-$(CONFIG_SIBYTE_BCM1x80) += pci-bcm1480.o pci-bcm1480ht.o | 50 | obj-$(CONFIG_SIBYTE_BCM1x80) += pci-bcm1480.o pci-bcm1480ht.o |
50 | obj-$(CONFIG_SNI_RM200_PCI) += fixup-sni.o ops-sni.o | 51 | obj-$(CONFIG_SNI_RM200_PCI) += fixup-sni.o ops-sni.o |
51 | obj-$(CONFIG_TANBAC_TB0219) += fixup-tb0219.o | 52 | obj-$(CONFIG_TANBAC_TB0219) += fixup-tb0219.o |
diff --git a/arch/mips/pci/fixup-cobalt.c b/arch/mips/pci/fixup-cobalt.c index 909292f50d06..75a01e764898 100644 --- a/arch/mips/pci/fixup-cobalt.c +++ b/arch/mips/pci/fixup-cobalt.c | |||
@@ -17,7 +17,7 @@ | |||
17 | #include <asm/io.h> | 17 | #include <asm/io.h> |
18 | #include <asm/gt64120.h> | 18 | #include <asm/gt64120.h> |
19 | 19 | ||
20 | #include <asm/cobalt/cobalt.h> | 20 | #include <asm/mach-cobalt/cobalt.h> |
21 | 21 | ||
22 | extern int cobalt_board_id; | 22 | extern int cobalt_board_id; |
23 | 23 | ||
@@ -52,7 +52,7 @@ static void qube_raq_via_bmIDE_fixup(struct pci_dev *dev) | |||
52 | pci_read_config_byte(dev, PCI_LATENCY_TIMER, <); | 52 | pci_read_config_byte(dev, PCI_LATENCY_TIMER, <); |
53 | if (lt < 64) | 53 | if (lt < 64) |
54 | pci_write_config_byte(dev, PCI_LATENCY_TIMER, 64); | 54 | pci_write_config_byte(dev, PCI_LATENCY_TIMER, 64); |
55 | pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, 7); | 55 | pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, 8); |
56 | } | 56 | } |
57 | 57 | ||
58 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_1, | 58 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_1, |
@@ -69,7 +69,7 @@ static void qube_raq_galileo_fixup(struct pci_dev *dev) | |||
69 | * host bridge. | 69 | * host bridge. |
70 | */ | 70 | */ |
71 | pci_write_config_byte(dev, PCI_LATENCY_TIMER, 64); | 71 | pci_write_config_byte(dev, PCI_LATENCY_TIMER, 64); |
72 | pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, 7); | 72 | pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, 8); |
73 | 73 | ||
74 | /* | 74 | /* |
75 | * The code described by the comment below has been removed | 75 | * The code described by the comment below has been removed |
diff --git a/arch/mips/pci/ops-gt64111.c b/arch/mips/pci/ops-gt64111.c index c1807934768d..13de45940b19 100644 --- a/arch/mips/pci/ops-gt64111.c +++ b/arch/mips/pci/ops-gt64111.c | |||
@@ -15,7 +15,7 @@ | |||
15 | #include <asm/io.h> | 15 | #include <asm/io.h> |
16 | #include <asm/gt64120.h> | 16 | #include <asm/gt64120.h> |
17 | 17 | ||
18 | #include <asm/cobalt/cobalt.h> | 18 | #include <asm/mach-cobalt/cobalt.h> |
19 | 19 | ||
20 | /* | 20 | /* |
21 | * Device 31 on the GT64111 is used to generate PCI special | 21 | * Device 31 on the GT64111 is used to generate PCI special |
diff --git a/arch/mips/pci/pci-bcm1480.c b/arch/mips/pci/pci-bcm1480.c index f194b4e4f86a..ca975e7d32ff 100644 --- a/arch/mips/pci/pci-bcm1480.c +++ b/arch/mips/pci/pci-bcm1480.c | |||
@@ -234,11 +234,9 @@ static int __init bcm1480_pcibios_init(void) | |||
234 | 234 | ||
235 | /* turn on ExpMemEn */ | 235 | /* turn on ExpMemEn */ |
236 | cmdreg = READCFG32(CFGOFFSET(0, PCI_DEVFN(PCI_BRIDGE_DEVICE, 0), 0x40)); | 236 | cmdreg = READCFG32(CFGOFFSET(0, PCI_DEVFN(PCI_BRIDGE_DEVICE, 0), 0x40)); |
237 | printk("PCIFeatureCtrl = %x\n", cmdreg); | ||
238 | WRITECFG32(CFGOFFSET(0, PCI_DEVFN(PCI_BRIDGE_DEVICE, 0), 0x40), | 237 | WRITECFG32(CFGOFFSET(0, PCI_DEVFN(PCI_BRIDGE_DEVICE, 0), 0x40), |
239 | cmdreg | 0x10); | 238 | cmdreg | 0x10); |
240 | cmdreg = READCFG32(CFGOFFSET(0, PCI_DEVFN(PCI_BRIDGE_DEVICE, 0), 0x40)); | 239 | cmdreg = READCFG32(CFGOFFSET(0, PCI_DEVFN(PCI_BRIDGE_DEVICE, 0), 0x40)); |
241 | printk("PCIFeatureCtrl = %x\n", cmdreg); | ||
242 | 240 | ||
243 | /* | 241 | /* |
244 | * Establish mappings in KSEG2 (kernel virtual) to PCI I/O | 242 | * Establish mappings in KSEG2 (kernel virtual) to PCI I/O |
diff --git a/arch/mips/pci/pci-ocelot-c.c b/arch/mips/pci/pci-ocelot-c.c index 1d84d36e034d..027759f7c904 100644 --- a/arch/mips/pci/pci-ocelot-c.c +++ b/arch/mips/pci/pci-ocelot-c.c | |||
@@ -3,15 +3,17 @@ | |||
3 | * License. See the file "COPYING" in the main directory of this archive | 3 | * License. See the file "COPYING" in the main directory of this archive |
4 | * for more details. | 4 | * for more details. |
5 | * | 5 | * |
6 | * Copyright (C) 2004 by Ralf Baechle (ralf@linux-mips.org) | 6 | * Copyright (C) 2004, 06 by Ralf Baechle (ralf@linux-mips.org) |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include <linux/types.h> | 9 | #include <linux/types.h> |
10 | #include <linux/pci.h> | 10 | #include <linux/pci.h> |
11 | #include <asm/mv64340.h> | 11 | #include <linux/mv643xx.h> |
12 | 12 | ||
13 | #include <linux/init.h> | 13 | #include <linux/init.h> |
14 | 14 | ||
15 | #include <asm/marvell.h> | ||
16 | |||
15 | /* | 17 | /* |
16 | * We assume the address ranges have already been setup appropriately by | 18 | * We assume the address ranges have already been setup appropriately by |
17 | * the firmware. PMON in case of the Ocelot C does that. | 19 | * the firmware. PMON in case of the Ocelot C does that. |
diff --git a/arch/mips/philips/pnx8550/common/platform.c b/arch/mips/philips/pnx8550/common/platform.c index 8aa9bd65b45e..a592260fd673 100644 --- a/arch/mips/philips/pnx8550/common/platform.c +++ b/arch/mips/philips/pnx8550/common/platform.c | |||
@@ -66,28 +66,28 @@ struct ip3106_port ip3106_ports[] = { | |||
66 | [0] = { | 66 | [0] = { |
67 | .port = { | 67 | .port = { |
68 | .type = PORT_IP3106, | 68 | .type = PORT_IP3106, |
69 | .iotype = SERIAL_IO_MEM, | 69 | .iotype = UPIO_MEM, |
70 | .membase = (void __iomem *)PNX8550_UART_PORT0, | 70 | .membase = (void __iomem *)PNX8550_UART_PORT0, |
71 | .mapbase = PNX8550_UART_PORT0, | 71 | .mapbase = PNX8550_UART_PORT0, |
72 | .irq = PNX8550_UART_INT(0), | 72 | .irq = PNX8550_UART_INT(0), |
73 | .uartclk = 3692300, | 73 | .uartclk = 3692300, |
74 | .fifosize = 16, | 74 | .fifosize = 16, |
75 | .ops = &ip3106_pops, | 75 | .ops = &ip3106_pops, |
76 | .flags = ASYNC_BOOT_AUTOCONF, | 76 | .flags = UPF_BOOT_AUTOCONF, |
77 | .line = 0, | 77 | .line = 0, |
78 | }, | 78 | }, |
79 | }, | 79 | }, |
80 | [1] = { | 80 | [1] = { |
81 | .port = { | 81 | .port = { |
82 | .type = PORT_IP3106, | 82 | .type = PORT_IP3106, |
83 | .iotype = SERIAL_IO_MEM, | 83 | .iotype = UPIO_MEM, |
84 | .membase = (void __iomem *)PNX8550_UART_PORT1, | 84 | .membase = (void __iomem *)PNX8550_UART_PORT1, |
85 | .mapbase = PNX8550_UART_PORT1, | 85 | .mapbase = PNX8550_UART_PORT1, |
86 | .irq = PNX8550_UART_INT(1), | 86 | .irq = PNX8550_UART_INT(1), |
87 | .uartclk = 3692300, | 87 | .uartclk = 3692300, |
88 | .fifosize = 16, | 88 | .fifosize = 16, |
89 | .ops = &ip3106_pops, | 89 | .ops = &ip3106_pops, |
90 | .flags = ASYNC_BOOT_AUTOCONF, | 90 | .flags = UPF_BOOT_AUTOCONF, |
91 | .line = 1, | 91 | .line = 1, |
92 | }, | 92 | }, |
93 | }, | 93 | }, |
diff --git a/arch/mips/philips/pnx8550/common/setup.c b/arch/mips/philips/pnx8550/common/setup.c index ee6bf72094f6..0d8a77619391 100644 --- a/arch/mips/philips/pnx8550/common/setup.c +++ b/arch/mips/philips/pnx8550/common/setup.c | |||
@@ -25,6 +25,7 @@ | |||
25 | #include <linux/delay.h> | 25 | #include <linux/delay.h> |
26 | #include <linux/interrupt.h> | 26 | #include <linux/interrupt.h> |
27 | #include <linux/serial_ip3106.h> | 27 | #include <linux/serial_ip3106.h> |
28 | #include <linux/pm.h> | ||
28 | 29 | ||
29 | #include <asm/cpu.h> | 30 | #include <asm/cpu.h> |
30 | #include <asm/bootinfo.h> | 31 | #include <asm/bootinfo.h> |
@@ -90,7 +91,7 @@ void __init plat_setup(void) | |||
90 | 91 | ||
91 | _machine_restart = pnx8550_machine_restart; | 92 | _machine_restart = pnx8550_machine_restart; |
92 | _machine_halt = pnx8550_machine_halt; | 93 | _machine_halt = pnx8550_machine_halt; |
93 | _machine_power_off = pnx8550_machine_power_off; | 94 | pm_power_off = pnx8550_machine_power_off; |
94 | 95 | ||
95 | board_time_init = pnx8550_time_init; | 96 | board_time_init = pnx8550_time_init; |
96 | board_timer_setup = pnx8550_timer_setup; | 97 | board_timer_setup = pnx8550_timer_setup; |
diff --git a/arch/mips/pmc-sierra/yosemite/prom.c b/arch/mips/pmc-sierra/yosemite/prom.c index 555bfacf7647..165275c00cbb 100644 --- a/arch/mips/pmc-sierra/yosemite/prom.c +++ b/arch/mips/pmc-sierra/yosemite/prom.c | |||
@@ -13,6 +13,7 @@ | |||
13 | #include <linux/sched.h> | 13 | #include <linux/sched.h> |
14 | #include <linux/mm.h> | 14 | #include <linux/mm.h> |
15 | #include <linux/delay.h> | 15 | #include <linux/delay.h> |
16 | #include <linux/pm.h> | ||
16 | #include <linux/smp.h> | 17 | #include <linux/smp.h> |
17 | 18 | ||
18 | #include <asm/io.h> | 19 | #include <asm/io.h> |
@@ -92,7 +93,7 @@ void __init prom_init(void) | |||
92 | /* Callbacks for halt, restart */ | 93 | /* Callbacks for halt, restart */ |
93 | _machine_restart = (void (*)(char *)) prom_exit; | 94 | _machine_restart = (void (*)(char *)) prom_exit; |
94 | _machine_halt = prom_halt; | 95 | _machine_halt = prom_halt; |
95 | _machine_power_off = prom_halt; | 96 | pm_power_off = prom_halt; |
96 | 97 | ||
97 | debug_vectors = cv; | 98 | debug_vectors = cv; |
98 | arcs_cmdline[0] = '\0'; | 99 | arcs_cmdline[0] = '\0'; |
diff --git a/arch/mips/pmc-sierra/yosemite/setup.c b/arch/mips/pmc-sierra/yosemite/setup.c index 059755b5ed57..8bce711575de 100644 --- a/arch/mips/pmc-sierra/yosemite/setup.c +++ b/arch/mips/pmc-sierra/yosemite/setup.c | |||
@@ -185,7 +185,7 @@ static void __init py_uart_setup(void) | |||
185 | up.uartclk = TITAN_UART_CLK; | 185 | up.uartclk = TITAN_UART_CLK; |
186 | up.regshift = 0; | 186 | up.regshift = 0; |
187 | up.iotype = UPIO_MEM; | 187 | up.iotype = UPIO_MEM; |
188 | up.flags = ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST; | 188 | up.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST; |
189 | up.line = 0; | 189 | up.line = 0; |
190 | 190 | ||
191 | if (early_serial_setup(&up)) | 191 | if (early_serial_setup(&up)) |
diff --git a/arch/mips/pmc-sierra/yosemite/smp.c b/arch/mips/pmc-sierra/yosemite/smp.c index f17f575f58f0..c197311e15d3 100644 --- a/arch/mips/pmc-sierra/yosemite/smp.c +++ b/arch/mips/pmc-sierra/yosemite/smp.c | |||
@@ -50,37 +50,25 @@ void __init prom_grab_secondary(void) | |||
50 | * We don't want to start the secondary CPU yet nor do we have a nice probing | 50 | * We don't want to start the secondary CPU yet nor do we have a nice probing |
51 | * feature in PMON so we just assume presence of the secondary core. | 51 | * feature in PMON so we just assume presence of the secondary core. |
52 | */ | 52 | */ |
53 | static char maxcpus_string[] __initdata = | 53 | void __init plat_smp_setup(void) |
54 | KERN_WARNING "max_cpus set to 0; using 1 instead\n"; | ||
55 | |||
56 | void __init prom_prepare_cpus(unsigned int max_cpus) | ||
57 | { | 54 | { |
58 | int enabled = 0, i; | 55 | int i; |
59 | |||
60 | if (max_cpus == 0) { | ||
61 | printk(maxcpus_string); | ||
62 | max_cpus = 1; | ||
63 | } | ||
64 | 56 | ||
65 | cpus_clear(phys_cpu_present_map); | 57 | cpus_clear(phys_cpu_present_map); |
66 | 58 | ||
67 | for (i = 0; i < 2; i++) { | 59 | for (i = 0; i < 2; i++) { |
68 | if (i == max_cpus) | ||
69 | break; | ||
70 | |||
71 | /* | ||
72 | * The boot CPU | ||
73 | */ | ||
74 | cpu_set(i, phys_cpu_present_map); | 60 | cpu_set(i, phys_cpu_present_map); |
75 | __cpu_number_map[i] = i; | 61 | __cpu_number_map[i] = i; |
76 | __cpu_logical_map[i] = i; | 62 | __cpu_logical_map[i] = i; |
77 | enabled++; | ||
78 | } | 63 | } |
64 | } | ||
79 | 65 | ||
66 | void __init plat_prepare_cpus(unsigned int max_cpus) | ||
67 | { | ||
80 | /* | 68 | /* |
81 | * Be paranoid. Enable the IPI only if we're really about to go SMP. | 69 | * Be paranoid. Enable the IPI only if we're really about to go SMP. |
82 | */ | 70 | */ |
83 | if (enabled > 1) | 71 | if (cpus_weight(cpu_possible_map)) |
84 | set_c0_status(STATUSF_IP5); | 72 | set_c0_status(STATUSF_IP5); |
85 | } | 73 | } |
86 | 74 | ||
@@ -94,7 +82,7 @@ void __init prom_prepare_cpus(unsigned int max_cpus) | |||
94 | void prom_boot_secondary(int cpu, struct task_struct *idle) | 82 | void prom_boot_secondary(int cpu, struct task_struct *idle) |
95 | { | 83 | { |
96 | unsigned long gp = (unsigned long) task_thread_info(idle); | 84 | unsigned long gp = (unsigned long) task_thread_info(idle); |
97 | unsigned long sp = __KSTK_TOP(idle); | 85 | unsigned long sp = __KSTK_TOS(idle); |
98 | 86 | ||
99 | secondary_sp = sp; | 87 | secondary_sp = sp; |
100 | secondary_gp = gp; | 88 | secondary_gp = gp; |
diff --git a/arch/mips/sgi-ip22/ip22-reset.c b/arch/mips/sgi-ip22/ip22-reset.c index 214ffd2e98a3..92a3b3c15ed3 100644 --- a/arch/mips/sgi-ip22/ip22-reset.c +++ b/arch/mips/sgi-ip22/ip22-reset.c | |||
@@ -3,8 +3,9 @@ | |||
3 | * License. See the file "COPYING" in the main directory of this archive | 3 | * License. See the file "COPYING" in the main directory of this archive |
4 | * for more details. | 4 | * for more details. |
5 | * | 5 | * |
6 | * Copyright (C) 1997, 1998, 2001, 2003 by Ralf Baechle | 6 | * Copyright (C) 1997, 1998, 2001, 03, 05, 06 by Ralf Baechle |
7 | */ | 7 | */ |
8 | #include <linux/linkage.h> | ||
8 | #include <linux/init.h> | 9 | #include <linux/init.h> |
9 | #include <linux/ds1286.h> | 10 | #include <linux/ds1286.h> |
10 | #include <linux/module.h> | 11 | #include <linux/module.h> |
@@ -12,6 +13,7 @@ | |||
12 | #include <linux/kernel.h> | 13 | #include <linux/kernel.h> |
13 | #include <linux/sched.h> | 14 | #include <linux/sched.h> |
14 | #include <linux/notifier.h> | 15 | #include <linux/notifier.h> |
16 | #include <linux/pm.h> | ||
15 | #include <linux/timer.h> | 17 | #include <linux/timer.h> |
16 | 18 | ||
17 | #include <asm/io.h> | 19 | #include <asm/io.h> |
@@ -41,28 +43,10 @@ static struct timer_list power_timer, blink_timer, debounce_timer, volume_timer; | |||
41 | 43 | ||
42 | #define MACHINE_PANICED 1 | 44 | #define MACHINE_PANICED 1 |
43 | #define MACHINE_SHUTTING_DOWN 2 | 45 | #define MACHINE_SHUTTING_DOWN 2 |
44 | static int machine_state = 0; | ||
45 | 46 | ||
46 | static void sgi_machine_restart(char *command) __attribute__((noreturn)); | 47 | static int machine_state; |
47 | static void sgi_machine_halt(void) __attribute__((noreturn)); | ||
48 | static void sgi_machine_power_off(void) __attribute__((noreturn)); | ||
49 | 48 | ||
50 | static void sgi_machine_restart(char *command) | 49 | static void ATTRIB_NORET sgi_machine_power_off(void) |
51 | { | ||
52 | if (machine_state & MACHINE_SHUTTING_DOWN) | ||
53 | sgi_machine_power_off(); | ||
54 | sgimc->cpuctrl0 |= SGIMC_CCTRL0_SYSINIT; | ||
55 | while (1); | ||
56 | } | ||
57 | |||
58 | static void sgi_machine_halt(void) | ||
59 | { | ||
60 | if (machine_state & MACHINE_SHUTTING_DOWN) | ||
61 | sgi_machine_power_off(); | ||
62 | ArcEnterInteractiveMode(); | ||
63 | } | ||
64 | |||
65 | static void sgi_machine_power_off(void) | ||
66 | { | 50 | { |
67 | unsigned int tmp; | 51 | unsigned int tmp; |
68 | 52 | ||
@@ -84,6 +68,21 @@ static void sgi_machine_power_off(void) | |||
84 | } | 68 | } |
85 | } | 69 | } |
86 | 70 | ||
71 | static void ATTRIB_NORET sgi_machine_restart(char *command) | ||
72 | { | ||
73 | if (machine_state & MACHINE_SHUTTING_DOWN) | ||
74 | sgi_machine_power_off(); | ||
75 | sgimc->cpuctrl0 |= SGIMC_CCTRL0_SYSINIT; | ||
76 | while (1); | ||
77 | } | ||
78 | |||
79 | static void ATTRIB_NORET sgi_machine_halt(void) | ||
80 | { | ||
81 | if (machine_state & MACHINE_SHUTTING_DOWN) | ||
82 | sgi_machine_power_off(); | ||
83 | ArcEnterInteractiveMode(); | ||
84 | } | ||
85 | |||
87 | static void power_timeout(unsigned long data) | 86 | static void power_timeout(unsigned long data) |
88 | { | 87 | { |
89 | sgi_machine_power_off(); | 88 | sgi_machine_power_off(); |
@@ -95,7 +94,7 @@ static void blink_timeout(unsigned long data) | |||
95 | sgi_ioc_reset ^= (SGIOC_RESET_LC0OFF|SGIOC_RESET_LC1OFF); | 94 | sgi_ioc_reset ^= (SGIOC_RESET_LC0OFF|SGIOC_RESET_LC1OFF); |
96 | sgioc->reset = sgi_ioc_reset; | 95 | sgioc->reset = sgi_ioc_reset; |
97 | 96 | ||
98 | mod_timer(&blink_timer, jiffies+data); | 97 | mod_timer(&blink_timer, jiffies + data); |
99 | } | 98 | } |
100 | 99 | ||
101 | static void debounce(unsigned long data) | 100 | static void debounce(unsigned long data) |
@@ -103,7 +102,7 @@ static void debounce(unsigned long data) | |||
103 | del_timer(&debounce_timer); | 102 | del_timer(&debounce_timer); |
104 | if (sgint->istat1 & SGINT_ISTAT1_PWR) { | 103 | if (sgint->istat1 & SGINT_ISTAT1_PWR) { |
105 | /* Interrupt still being sent. */ | 104 | /* Interrupt still being sent. */ |
106 | debounce_timer.expires = jiffies + 5; /* 0.05s */ | 105 | debounce_timer.expires = jiffies + (HZ / 20); /* 0.05s */ |
107 | add_timer(&debounce_timer); | 106 | add_timer(&debounce_timer); |
108 | 107 | ||
109 | sgioc->panel = SGIOC_PANEL_POWERON | SGIOC_PANEL_POWERINTR | | 108 | sgioc->panel = SGIOC_PANEL_POWERON | SGIOC_PANEL_POWERINTR | |
@@ -151,7 +150,7 @@ static inline void volume_up_button(unsigned long data) | |||
151 | indy_volume_button(1); | 150 | indy_volume_button(1); |
152 | 151 | ||
153 | if (sgint->istat1 & SGINT_ISTAT1_PWR) { | 152 | if (sgint->istat1 & SGINT_ISTAT1_PWR) { |
154 | volume_timer.expires = jiffies + 1; | 153 | volume_timer.expires = jiffies + (HZ / 100); |
155 | add_timer(&volume_timer); | 154 | add_timer(&volume_timer); |
156 | } | 155 | } |
157 | } | 156 | } |
@@ -164,7 +163,7 @@ static inline void volume_down_button(unsigned long data) | |||
164 | indy_volume_button(-1); | 163 | indy_volume_button(-1); |
165 | 164 | ||
166 | if (sgint->istat1 & SGINT_ISTAT1_PWR) { | 165 | if (sgint->istat1 & SGINT_ISTAT1_PWR) { |
167 | volume_timer.expires = jiffies + 1; | 166 | volume_timer.expires = jiffies + (HZ / 100); |
168 | add_timer(&volume_timer); | 167 | add_timer(&volume_timer); |
169 | } | 168 | } |
170 | } | 169 | } |
@@ -199,14 +198,14 @@ static irqreturn_t panel_int(int irq, void *dev_id, struct pt_regs *regs) | |||
199 | if (!(buttons & SGIOC_PANEL_VOLUPINTR)) { | 198 | if (!(buttons & SGIOC_PANEL_VOLUPINTR)) { |
200 | init_timer(&volume_timer); | 199 | init_timer(&volume_timer); |
201 | volume_timer.function = volume_up_button; | 200 | volume_timer.function = volume_up_button; |
202 | volume_timer.expires = jiffies + 1; | 201 | volume_timer.expires = jiffies + (HZ / 100); |
203 | add_timer(&volume_timer); | 202 | add_timer(&volume_timer); |
204 | } | 203 | } |
205 | /* Volume down button was pressed */ | 204 | /* Volume down button was pressed */ |
206 | if (!(buttons & SGIOC_PANEL_VOLDNINTR)) { | 205 | if (!(buttons & SGIOC_PANEL_VOLDNINTR)) { |
207 | init_timer(&volume_timer); | 206 | init_timer(&volume_timer); |
208 | volume_timer.function = volume_down_button; | 207 | volume_timer.function = volume_down_button; |
209 | volume_timer.expires = jiffies + 1; | 208 | volume_timer.expires = jiffies + (HZ / 100); |
210 | add_timer(&volume_timer); | 209 | add_timer(&volume_timer); |
211 | } | 210 | } |
212 | 211 | ||
@@ -234,7 +233,7 @@ static int __init reboot_setup(void) | |||
234 | { | 233 | { |
235 | _machine_restart = sgi_machine_restart; | 234 | _machine_restart = sgi_machine_restart; |
236 | _machine_halt = sgi_machine_halt; | 235 | _machine_halt = sgi_machine_halt; |
237 | _machine_power_off = sgi_machine_power_off; | 236 | pm_power_off = sgi_machine_power_off; |
238 | 237 | ||
239 | request_irq(SGI_PANEL_IRQ, panel_int, 0, "Front Panel", NULL); | 238 | request_irq(SGI_PANEL_IRQ, panel_int, 0, "Front Panel", NULL); |
240 | init_timer(&blink_timer); | 239 | init_timer(&blink_timer); |
diff --git a/arch/mips/sgi-ip22/ip22-setup.c b/arch/mips/sgi-ip22/ip22-setup.c index 5e59b4c8876b..7018e1833e85 100644 --- a/arch/mips/sgi-ip22/ip22-setup.c +++ b/arch/mips/sgi-ip22/ip22-setup.c | |||
@@ -56,6 +56,7 @@ extern void ip22_time_init(void) __init; | |||
56 | void __init plat_setup(void) | 56 | void __init plat_setup(void) |
57 | { | 57 | { |
58 | char *ctype; | 58 | char *ctype; |
59 | char *cserial; | ||
59 | 60 | ||
60 | board_be_init = ip22_be_init; | 61 | board_be_init = ip22_be_init; |
61 | ip22_time_init(); | 62 | ip22_time_init(); |
@@ -81,9 +82,14 @@ void __init plat_setup(void) | |||
81 | /* ARCS console environment variable is set to "g?" for | 82 | /* ARCS console environment variable is set to "g?" for |
82 | * graphics console, it is set to "d" for the first serial | 83 | * graphics console, it is set to "d" for the first serial |
83 | * line and "d2" for the second serial line. | 84 | * line and "d2" for the second serial line. |
85 | * | ||
86 | * Need to check if the case is 'g' but no keyboard: | ||
87 | * (ConsoleIn/Out = serial) | ||
84 | */ | 88 | */ |
85 | ctype = ArcGetEnvironmentVariable("console"); | 89 | ctype = ArcGetEnvironmentVariable("console"); |
86 | if (ctype && *ctype == 'd') { | 90 | cserial = ArcGetEnvironmentVariable("ConsoleOut"); |
91 | |||
92 | if ((ctype && *ctype == 'd') || (cserial && *cserial == 's')) { | ||
87 | static char options[8]; | 93 | static char options[8]; |
88 | char *baud = ArcGetEnvironmentVariable("dbaud"); | 94 | char *baud = ArcGetEnvironmentVariable("dbaud"); |
89 | if (baud) | 95 | if (baud) |
@@ -91,7 +97,7 @@ void __init plat_setup(void) | |||
91 | add_preferred_console("ttyS", *(ctype + 1) == '2' ? 1 : 0, | 97 | add_preferred_console("ttyS", *(ctype + 1) == '2' ? 1 : 0, |
92 | baud ? options : NULL); | 98 | baud ? options : NULL); |
93 | } else if (!ctype || *ctype != 'g') { | 99 | } else if (!ctype || *ctype != 'g') { |
94 | /* Use ARC if we don't want serial ('d') or Newport ('g'). */ | 100 | /* Use ARC if we don't want serial ('d') or graphics ('g'). */ |
95 | prom_flags |= PROM_FLAG_USE_AS_CONSOLE; | 101 | prom_flags |= PROM_FLAG_USE_AS_CONSOLE; |
96 | add_preferred_console("arc", 0, NULL); | 102 | add_preferred_console("arc", 0, NULL); |
97 | } | 103 | } |
diff --git a/arch/mips/sgi-ip27/ip27-reset.c b/arch/mips/sgi-ip27/ip27-reset.c index 2e16be94c78b..4322db57d3c1 100644 --- a/arch/mips/sgi-ip27/ip27-reset.c +++ b/arch/mips/sgi-ip27/ip27-reset.c | |||
@@ -5,7 +5,7 @@ | |||
5 | * | 5 | * |
6 | * Reset an IP27. | 6 | * Reset an IP27. |
7 | * | 7 | * |
8 | * Copyright (C) 1997, 1998, 1999, 2000 by Ralf Baechle | 8 | * Copyright (C) 1997, 1998, 1999, 2000, 06 by Ralf Baechle |
9 | * Copyright (C) 1999, 2000 Silicon Graphics, Inc. | 9 | * Copyright (C) 1999, 2000 Silicon Graphics, Inc. |
10 | */ | 10 | */ |
11 | #include <linux/config.h> | 11 | #include <linux/config.h> |
@@ -15,6 +15,7 @@ | |||
15 | #include <linux/smp.h> | 15 | #include <linux/smp.h> |
16 | #include <linux/mmzone.h> | 16 | #include <linux/mmzone.h> |
17 | #include <linux/nodemask.h> | 17 | #include <linux/nodemask.h> |
18 | #include <linux/pm.h> | ||
18 | 19 | ||
19 | #include <asm/io.h> | 20 | #include <asm/io.h> |
20 | #include <asm/irq.h> | 21 | #include <asm/irq.h> |
@@ -77,5 +78,5 @@ void ip27_reboot_setup(void) | |||
77 | { | 78 | { |
78 | _machine_restart = ip27_machine_restart; | 79 | _machine_restart = ip27_machine_restart; |
79 | _machine_halt = ip27_machine_halt; | 80 | _machine_halt = ip27_machine_halt; |
80 | _machine_power_off = ip27_machine_power_off; | 81 | pm_power_off = ip27_machine_power_off; |
81 | } | 82 | } |
diff --git a/arch/mips/sgi-ip27/ip27-smp.c b/arch/mips/sgi-ip27/ip27-smp.c index dbef3f6b5650..09fa7f5216f0 100644 --- a/arch/mips/sgi-ip27/ip27-smp.c +++ b/arch/mips/sgi-ip27/ip27-smp.c | |||
@@ -140,7 +140,7 @@ static __init void intr_clear_all(nasid_t nasid) | |||
140 | REMOTE_HUB_CLR_INTR(nasid, i); | 140 | REMOTE_HUB_CLR_INTR(nasid, i); |
141 | } | 141 | } |
142 | 142 | ||
143 | void __init prom_prepare_cpus(unsigned int max_cpus) | 143 | void __init plat_smp_setup(void) |
144 | { | 144 | { |
145 | cnodeid_t cnode; | 145 | cnodeid_t cnode; |
146 | 146 | ||
@@ -161,6 +161,11 @@ void __init prom_prepare_cpus(unsigned int max_cpus) | |||
161 | alloc_cpupda(0, 0); | 161 | alloc_cpupda(0, 0); |
162 | } | 162 | } |
163 | 163 | ||
164 | void __init plat_prepare_cpus(unsigned int max_cpus) | ||
165 | { | ||
166 | /* We already did everything necessary earlier */ | ||
167 | } | ||
168 | |||
164 | /* | 169 | /* |
165 | * Launch a slave into smp_bootstrap(). It doesn't take an argument, and we | 170 | * Launch a slave into smp_bootstrap(). It doesn't take an argument, and we |
166 | * set sp to the kernel stack of the newly created idle process, gp to the proc | 171 | * set sp to the kernel stack of the newly created idle process, gp to the proc |
diff --git a/arch/mips/sgi-ip32/ip32-reset.c b/arch/mips/sgi-ip32/ip32-reset.c index 88e1f52059ff..0c948008b023 100644 --- a/arch/mips/sgi-ip32/ip32-reset.c +++ b/arch/mips/sgi-ip32/ip32-reset.c | |||
@@ -15,6 +15,7 @@ | |||
15 | #include <linux/delay.h> | 15 | #include <linux/delay.h> |
16 | #include <linux/ds17287rtc.h> | 16 | #include <linux/ds17287rtc.h> |
17 | #include <linux/interrupt.h> | 17 | #include <linux/interrupt.h> |
18 | #include <linux/pm.h> | ||
18 | 19 | ||
19 | #include <asm/addrspace.h> | 20 | #include <asm/addrspace.h> |
20 | #include <asm/irq.h> | 21 | #include <asm/irq.h> |
@@ -188,7 +189,7 @@ static __init int ip32_reboot_setup(void) | |||
188 | 189 | ||
189 | _machine_restart = ip32_machine_restart; | 190 | _machine_restart = ip32_machine_restart; |
190 | _machine_halt = ip32_machine_halt; | 191 | _machine_halt = ip32_machine_halt; |
191 | _machine_power_off = ip32_machine_power_off; | 192 | pm_power_off = ip32_machine_power_off; |
192 | 193 | ||
193 | init_timer(&blink_timer); | 194 | init_timer(&blink_timer); |
194 | blink_timer.function = blink_timeout; | 195 | blink_timer.function = blink_timeout; |
diff --git a/arch/mips/sgi-ip32/ip32-setup.c b/arch/mips/sgi-ip32/ip32-setup.c index d10a269aeae1..2c38770b1e1b 100644 --- a/arch/mips/sgi-ip32/ip32-setup.c +++ b/arch/mips/sgi-ip32/ip32-setup.c | |||
@@ -66,11 +66,6 @@ static inline void str2eaddr(unsigned char *ea, unsigned char *str) | |||
66 | #include <linux/tty.h> | 66 | #include <linux/tty.h> |
67 | #include <linux/serial.h> | 67 | #include <linux/serial.h> |
68 | #include <linux/serial_core.h> | 68 | #include <linux/serial_core.h> |
69 | extern int early_serial_setup(struct uart_port *port); | ||
70 | |||
71 | #define STD_COM_FLAGS (ASYNC_SKIP_TEST) | ||
72 | #define BASE_BAUD (1843200 / 16) | ||
73 | |||
74 | #endif /* CONFIG_SERIAL_8250 */ | 69 | #endif /* CONFIG_SERIAL_8250 */ |
75 | 70 | ||
76 | /* An arbitrary time; this can be decreased if reliability looks good */ | 71 | /* An arbitrary time; this can be decreased if reliability looks good */ |
@@ -110,8 +105,8 @@ void __init plat_setup(void) | |||
110 | o2_serial[0].type = PORT_16550A; | 105 | o2_serial[0].type = PORT_16550A; |
111 | o2_serial[0].line = 0; | 106 | o2_serial[0].line = 0; |
112 | o2_serial[0].irq = MACEISA_SERIAL1_IRQ; | 107 | o2_serial[0].irq = MACEISA_SERIAL1_IRQ; |
113 | o2_serial[0].flags = STD_COM_FLAGS; | 108 | o2_serial[0].flags = UPF_SKIP_TEST; |
114 | o2_serial[0].uartclk = BASE_BAUD * 16; | 109 | o2_serial[0].uartclk = 1843200; |
115 | o2_serial[0].iotype = UPIO_MEM; | 110 | o2_serial[0].iotype = UPIO_MEM; |
116 | o2_serial[0].membase = (char *)&mace->isa.serial1; | 111 | o2_serial[0].membase = (char *)&mace->isa.serial1; |
117 | o2_serial[0].fifosize = 14; | 112 | o2_serial[0].fifosize = 14; |
@@ -121,8 +116,8 @@ void __init plat_setup(void) | |||
121 | o2_serial[1].type = PORT_16550A; | 116 | o2_serial[1].type = PORT_16550A; |
122 | o2_serial[1].line = 1; | 117 | o2_serial[1].line = 1; |
123 | o2_serial[1].irq = MACEISA_SERIAL2_IRQ; | 118 | o2_serial[1].irq = MACEISA_SERIAL2_IRQ; |
124 | o2_serial[1].flags = STD_COM_FLAGS; | 119 | o2_serial[1].flags = UPF_SKIP_TEST; |
125 | o2_serial[1].uartclk = BASE_BAUD * 16; | 120 | o2_serial[1].uartclk = 1843200; |
126 | o2_serial[1].iotype = UPIO_MEM; | 121 | o2_serial[1].iotype = UPIO_MEM; |
127 | o2_serial[1].membase = (char *)&mace->isa.serial2; | 122 | o2_serial[1].membase = (char *)&mace->isa.serial2; |
128 | o2_serial[1].fifosize = 14; | 123 | o2_serial[1].fifosize = 14; |
diff --git a/arch/mips/sibyte/Kconfig b/arch/mips/sibyte/Kconfig index de46f62ac462..816aee7fcd25 100644 --- a/arch/mips/sibyte/Kconfig +++ b/arch/mips/sibyte/Kconfig | |||
@@ -102,11 +102,11 @@ config SIMULATION | |||
102 | Build a kernel suitable for running under the GDB simulator. | 102 | Build a kernel suitable for running under the GDB simulator. |
103 | Primarily adjusts the kernel's notion of time. | 103 | Primarily adjusts the kernel's notion of time. |
104 | 104 | ||
105 | config CONFIG_SB1_CEX_ALWAYS_FATAL | 105 | config SB1_CEX_ALWAYS_FATAL |
106 | bool "All cache exceptions considered fatal (no recovery attempted)" | 106 | bool "All cache exceptions considered fatal (no recovery attempted)" |
107 | depends on SIBYTE_SB1xxx_SOC | 107 | depends on SIBYTE_SB1xxx_SOC |
108 | 108 | ||
109 | config CONFIG_SB1_CERR_STALL | 109 | config SB1_CERR_STALL |
110 | bool "Stall (rather than panic) on fatal cache error" | 110 | bool "Stall (rather than panic) on fatal cache error" |
111 | depends on SIBYTE_SB1xxx_SOC | 111 | depends on SIBYTE_SB1xxx_SOC |
112 | 112 | ||
diff --git a/arch/mips/sibyte/bcm1480/irq.c b/arch/mips/sibyte/bcm1480/irq.c index b2a1ba5d23df..9cf7d713b13c 100644 --- a/arch/mips/sibyte/bcm1480/irq.c +++ b/arch/mips/sibyte/bcm1480/irq.c | |||
@@ -139,7 +139,7 @@ void bcm1480_unmask_irq(int cpu, int irq) | |||
139 | #ifdef CONFIG_SMP | 139 | #ifdef CONFIG_SMP |
140 | static void bcm1480_set_affinity(unsigned int irq, cpumask_t mask) | 140 | static void bcm1480_set_affinity(unsigned int irq, cpumask_t mask) |
141 | { | 141 | { |
142 | int i = 0, old_cpu, cpu, int_on; | 142 | int i = 0, old_cpu, cpu, int_on, k; |
143 | u64 cur_ints; | 143 | u64 cur_ints; |
144 | irq_desc_t *desc = irq_desc + irq; | 144 | irq_desc_t *desc = irq_desc + irq; |
145 | unsigned long flags; | 145 | unsigned long flags; |
@@ -165,7 +165,6 @@ static void bcm1480_set_affinity(unsigned int irq, cpumask_t mask) | |||
165 | irq_dirty -= BCM1480_NR_IRQS_HALF; | 165 | irq_dirty -= BCM1480_NR_IRQS_HALF; |
166 | } | 166 | } |
167 | 167 | ||
168 | int k; | ||
169 | for (k=0; k<2; k++) { /* Loop through high and low interrupt mask register */ | 168 | for (k=0; k<2; k++) { /* Loop through high and low interrupt mask register */ |
170 | cur_ints = ____raw_readq(IOADDR(A_BCM1480_IMR_MAPPER(old_cpu) + R_BCM1480_IMR_INTERRUPT_MASK_H + (k*BCM1480_IMR_HL_SPACING))); | 169 | cur_ints = ____raw_readq(IOADDR(A_BCM1480_IMR_MAPPER(old_cpu) + R_BCM1480_IMR_INTERRUPT_MASK_H + (k*BCM1480_IMR_HL_SPACING))); |
171 | int_on = !(cur_ints & (((u64) 1) << irq_dirty)); | 170 | int_on = !(cur_ints & (((u64) 1) << irq_dirty)); |
@@ -216,6 +215,7 @@ static void ack_bcm1480_irq(unsigned int irq) | |||
216 | { | 215 | { |
217 | u64 pending; | 216 | u64 pending; |
218 | unsigned int irq_dirty; | 217 | unsigned int irq_dirty; |
218 | int k; | ||
219 | 219 | ||
220 | /* | 220 | /* |
221 | * If the interrupt was an HT interrupt, now is the time to | 221 | * If the interrupt was an HT interrupt, now is the time to |
@@ -227,7 +227,6 @@ static void ack_bcm1480_irq(unsigned int irq) | |||
227 | if ((irq_dirty >= BCM1480_NR_IRQS_HALF) && (irq_dirty <= BCM1480_NR_IRQS)) { | 227 | if ((irq_dirty >= BCM1480_NR_IRQS_HALF) && (irq_dirty <= BCM1480_NR_IRQS)) { |
228 | irq_dirty -= BCM1480_NR_IRQS_HALF; | 228 | irq_dirty -= BCM1480_NR_IRQS_HALF; |
229 | } | 229 | } |
230 | int k; | ||
231 | for (k=0; k<2; k++) { /* Loop through high and low LDT interrupts */ | 230 | for (k=0; k<2; k++) { /* Loop through high and low LDT interrupts */ |
232 | pending = __raw_readq(IOADDR(A_BCM1480_IMR_REGISTER(bcm1480_irq_owner[irq], | 231 | pending = __raw_readq(IOADDR(A_BCM1480_IMR_REGISTER(bcm1480_irq_owner[irq], |
233 | R_BCM1480_IMR_LDT_INTERRUPT_H + (k*BCM1480_IMR_HL_SPACING)))); | 232 | R_BCM1480_IMR_LDT_INTERRUPT_H + (k*BCM1480_IMR_HL_SPACING)))); |
diff --git a/arch/mips/sibyte/cfe/setup.c b/arch/mips/sibyte/cfe/setup.c index 7a2c7a8510d4..ea308029450e 100644 --- a/arch/mips/sibyte/cfe/setup.c +++ b/arch/mips/sibyte/cfe/setup.c | |||
@@ -23,6 +23,7 @@ | |||
23 | #include <linux/mm.h> | 23 | #include <linux/mm.h> |
24 | #include <linux/blkdev.h> | 24 | #include <linux/blkdev.h> |
25 | #include <linux/bootmem.h> | 25 | #include <linux/bootmem.h> |
26 | #include <linux/pm.h> | ||
26 | #include <linux/smp.h> | 27 | #include <linux/smp.h> |
27 | 28 | ||
28 | #include <asm/bootinfo.h> | 29 | #include <asm/bootinfo.h> |
@@ -248,7 +249,7 @@ void __init prom_init(void) | |||
248 | 249 | ||
249 | _machine_restart = cfe_linux_restart; | 250 | _machine_restart = cfe_linux_restart; |
250 | _machine_halt = cfe_linux_halt; | 251 | _machine_halt = cfe_linux_halt; |
251 | _machine_power_off = cfe_linux_halt; | 252 | pm_power_off = cfe_linux_halt; |
252 | 253 | ||
253 | /* | 254 | /* |
254 | * Check if a loader was used; if NOT, the 4 arguments are | 255 | * Check if a loader was used; if NOT, the 4 arguments are |
diff --git a/arch/mips/sibyte/cfe/smp.c b/arch/mips/sibyte/cfe/smp.c index 4477af3d8074..eab20e2db323 100644 --- a/arch/mips/sibyte/cfe/smp.c +++ b/arch/mips/sibyte/cfe/smp.c | |||
@@ -31,7 +31,7 @@ | |||
31 | * | 31 | * |
32 | * Common setup before any secondaries are started | 32 | * Common setup before any secondaries are started |
33 | */ | 33 | */ |
34 | void __init prom_prepare_cpus(unsigned int max_cpus) | 34 | void __init plat_smp_setup(void) |
35 | { | 35 | { |
36 | int i, num; | 36 | int i, num; |
37 | 37 | ||
@@ -40,14 +40,18 @@ void __init prom_prepare_cpus(unsigned int max_cpus) | |||
40 | __cpu_number_map[0] = 0; | 40 | __cpu_number_map[0] = 0; |
41 | __cpu_logical_map[0] = 0; | 41 | __cpu_logical_map[0] = 0; |
42 | 42 | ||
43 | for (i=1, num=0; i<NR_CPUS; i++) { | 43 | for (i = 1, num = 0; i < NR_CPUS; i++) { |
44 | if (cfe_cpu_stop(i) == 0) { | 44 | if (cfe_cpu_stop(i) == 0) { |
45 | cpu_set(i, phys_cpu_present_map); | 45 | cpu_set(i, phys_cpu_present_map); |
46 | __cpu_number_map[i] = ++num; | 46 | __cpu_number_map[i] = ++num; |
47 | __cpu_logical_map[num] = i; | 47 | __cpu_logical_map[num] = i; |
48 | } | 48 | } |
49 | } | 49 | } |
50 | printk("Detected %i available secondary CPU(s)\n", num); | 50 | printk(KERN_INFO "Detected %i available secondary CPU(s)\n", num); |
51 | } | ||
52 | |||
53 | void __init plat_prepare_cpus(unsigned int max_cpus) | ||
54 | { | ||
51 | } | 55 | } |
52 | 56 | ||
53 | /* | 57 | /* |
diff --git a/arch/mips/sibyte/sb1250/prom.c b/arch/mips/sibyte/sb1250/prom.c index de62ab0f55a2..742043f8d755 100644 --- a/arch/mips/sibyte/sb1250/prom.c +++ b/arch/mips/sibyte/sb1250/prom.c | |||
@@ -24,6 +24,7 @@ | |||
24 | #include <linux/bootmem.h> | 24 | #include <linux/bootmem.h> |
25 | #include <linux/smp.h> | 25 | #include <linux/smp.h> |
26 | #include <linux/initrd.h> | 26 | #include <linux/initrd.h> |
27 | #include <linux/pm.h> | ||
27 | 28 | ||
28 | #include <asm/bootinfo.h> | 29 | #include <asm/bootinfo.h> |
29 | #include <asm/reboot.h> | 30 | #include <asm/reboot.h> |
@@ -79,7 +80,7 @@ void __init prom_init(void) | |||
79 | { | 80 | { |
80 | _machine_restart = (void (*)(char *))prom_linux_exit; | 81 | _machine_restart = (void (*)(char *))prom_linux_exit; |
81 | _machine_halt = prom_linux_exit; | 82 | _machine_halt = prom_linux_exit; |
82 | _machine_power_off = prom_linux_exit; | 83 | pm_power_off = prom_linux_exit; |
83 | 84 | ||
84 | strcpy(arcs_cmdline, "root=/dev/ram0 "); | 85 | strcpy(arcs_cmdline, "root=/dev/ram0 "); |
85 | 86 | ||
diff --git a/arch/mips/sibyte/sb1250/setup.c b/arch/mips/sibyte/sb1250/setup.c index df2e266c700c..fde4751c84fe 100644 --- a/arch/mips/sibyte/sb1250/setup.c +++ b/arch/mips/sibyte/sb1250/setup.c | |||
@@ -16,6 +16,7 @@ | |||
16 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | 16 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
17 | */ | 17 | */ |
18 | #include <linux/config.h> | 18 | #include <linux/config.h> |
19 | #include <linux/init.h> | ||
19 | #include <linux/kernel.h> | 20 | #include <linux/kernel.h> |
20 | #include <linux/reboot.h> | 21 | #include <linux/reboot.h> |
21 | #include <linux/string.h> | 22 | #include <linux/string.h> |
@@ -42,7 +43,7 @@ static inline int setup_bcm112x(void); | |||
42 | 43 | ||
43 | /* Setup code likely to be common to all SiByte platforms */ | 44 | /* Setup code likely to be common to all SiByte platforms */ |
44 | 45 | ||
45 | static inline int sys_rev_decode(void) | 46 | static int __init sys_rev_decode(void) |
46 | { | 47 | { |
47 | int ret = 0; | 48 | int ret = 0; |
48 | 49 | ||
@@ -74,7 +75,7 @@ static inline int sys_rev_decode(void) | |||
74 | return ret; | 75 | return ret; |
75 | } | 76 | } |
76 | 77 | ||
77 | static inline int setup_bcm1250(void) | 78 | static int __init setup_bcm1250(void) |
78 | { | 79 | { |
79 | int ret = 0; | 80 | int ret = 0; |
80 | 81 | ||
@@ -120,7 +121,7 @@ static inline int setup_bcm1250(void) | |||
120 | return ret; | 121 | return ret; |
121 | } | 122 | } |
122 | 123 | ||
123 | static inline int setup_bcm112x(void) | 124 | static int __init setup_bcm112x(void) |
124 | { | 125 | { |
125 | int ret = 0; | 126 | int ret = 0; |
126 | 127 | ||
@@ -146,7 +147,7 @@ static inline int setup_bcm112x(void) | |||
146 | return ret; | 147 | return ret; |
147 | } | 148 | } |
148 | 149 | ||
149 | void sb1250_setup(void) | 150 | void __init sb1250_setup(void) |
150 | { | 151 | { |
151 | uint64_t sys_rev; | 152 | uint64_t sys_rev; |
152 | int plldiv; | 153 | int plldiv; |
@@ -169,31 +170,42 @@ void sb1250_setup(void) | |||
169 | soc_str, pass_str, zbbus_mhz * 2, sb1_pass); | 170 | soc_str, pass_str, zbbus_mhz * 2, sb1_pass); |
170 | prom_printf("Board type: %s\n", get_system_type()); | 171 | prom_printf("Board type: %s\n", get_system_type()); |
171 | 172 | ||
172 | switch(war_pass) { | 173 | switch (war_pass) { |
173 | case K_SYS_REVISION_BCM1250_PASS1: | 174 | case K_SYS_REVISION_BCM1250_PASS1: |
174 | #ifndef CONFIG_SB1_PASS_1_WORKAROUNDS | 175 | #ifndef CONFIG_SB1_PASS_1_WORKAROUNDS |
175 | prom_printf("@@@@ This is a BCM1250 A0-A2 (Pass 1) board, and the kernel doesn't have the proper workarounds compiled in. @@@@\n"); | 176 | prom_printf("@@@@ This is a BCM1250 A0-A2 (Pass 1) board, " |
177 | "and the kernel doesn't have the proper " | ||
178 | "workarounds compiled in. @@@@\n"); | ||
176 | bad_config = 1; | 179 | bad_config = 1; |
177 | #endif | 180 | #endif |
178 | break; | 181 | break; |
179 | case K_SYS_REVISION_BCM1250_PASS2: | 182 | case K_SYS_REVISION_BCM1250_PASS2: |
180 | /* Pass 2 - easiest as default for now - so many numbers */ | 183 | /* Pass 2 - easiest as default for now - so many numbers */ |
181 | #if !defined(CONFIG_SB1_PASS_2_WORKAROUNDS) || !defined(CONFIG_SB1_PASS_2_1_WORKAROUNDS) | 184 | #if !defined(CONFIG_SB1_PASS_2_WORKAROUNDS) || \ |
182 | prom_printf("@@@@ This is a BCM1250 A3-A10 board, and the kernel doesn't have the proper workarounds compiled in. @@@@\n"); | 185 | !defined(CONFIG_SB1_PASS_2_1_WORKAROUNDS) |
186 | prom_printf("@@@@ This is a BCM1250 A3-A10 board, and the " | ||
187 | "kernel doesn't have the proper workarounds " | ||
188 | "compiled in. @@@@\n"); | ||
183 | bad_config = 1; | 189 | bad_config = 1; |
184 | #endif | 190 | #endif |
185 | #ifdef CONFIG_CPU_HAS_PREFETCH | 191 | #ifdef CONFIG_CPU_HAS_PREFETCH |
186 | prom_printf("@@@@ Prefetches may be enabled in this kernel, but are buggy on this board. @@@@\n"); | 192 | prom_printf("@@@@ Prefetches may be enabled in this kernel, " |
193 | "but are buggy on this board. @@@@\n"); | ||
187 | bad_config = 1; | 194 | bad_config = 1; |
188 | #endif | 195 | #endif |
189 | break; | 196 | break; |
190 | case K_SYS_REVISION_BCM1250_PASS2_2: | 197 | case K_SYS_REVISION_BCM1250_PASS2_2: |
191 | #ifndef CONFIG_SB1_PASS_2_WORKAROUNDS | 198 | #ifndef CONFIG_SB1_PASS_2_WORKAROUNDS |
192 | prom_printf("@@@@ This is a BCM1250 B1/B2. board, and the kernel doesn't have the proper workarounds compiled in. @@@@\n"); | 199 | prom_printf("@@@@ This is a BCM1250 B1/B2. board, and the " |
200 | "kernel doesn't have the proper workarounds " | ||
201 | "compiled in. @@@@\n"); | ||
193 | bad_config = 1; | 202 | bad_config = 1; |
194 | #endif | 203 | #endif |
195 | #if defined(CONFIG_SB1_PASS_2_1_WORKAROUNDS) || !defined(CONFIG_CPU_HAS_PREFETCH) | 204 | #if defined(CONFIG_SB1_PASS_2_1_WORKAROUNDS) || \ |
196 | prom_printf("@@@@ This is a BCM1250 B1/B2, but the kernel is conservatively configured for an 'A' stepping. @@@@\n"); | 205 | !defined(CONFIG_CPU_HAS_PREFETCH) |
206 | prom_printf("@@@@ This is a BCM1250 B1/B2, but the kernel is " | ||
207 | "conservatively configured for an 'A' stepping. " | ||
208 | "@@@@\n"); | ||
197 | #endif | 209 | #endif |
198 | break; | 210 | break; |
199 | default: | 211 | default: |
diff --git a/arch/mips/sibyte/sb1250/time.c b/arch/mips/sibyte/sb1250/time.c index 511c89d65f38..1588f6debd90 100644 --- a/arch/mips/sibyte/sb1250/time.c +++ b/arch/mips/sibyte/sb1250/time.c | |||
@@ -47,23 +47,51 @@ | |||
47 | #define IMR_IP3_VAL K_INT_MAP_I1 | 47 | #define IMR_IP3_VAL K_INT_MAP_I1 |
48 | #define IMR_IP4_VAL K_INT_MAP_I2 | 48 | #define IMR_IP4_VAL K_INT_MAP_I2 |
49 | 49 | ||
50 | #define SB1250_HPT_NUM 3 | ||
51 | #define SB1250_HPT_VALUE M_SCD_TIMER_CNT /* max value */ | ||
52 | #define SB1250_HPT_SHIFT ((sizeof(unsigned int)*8)-V_SCD_TIMER_WIDTH) | ||
53 | |||
54 | |||
50 | extern int sb1250_steal_irq(int irq); | 55 | extern int sb1250_steal_irq(int irq); |
51 | 56 | ||
57 | static unsigned int sb1250_hpt_read(void); | ||
58 | static void sb1250_hpt_init(unsigned int); | ||
59 | |||
60 | static unsigned int hpt_offset; | ||
61 | |||
62 | void __init sb1250_hpt_setup(void) | ||
63 | { | ||
64 | int cpu = smp_processor_id(); | ||
65 | |||
66 | if (!cpu) { | ||
67 | /* Setup hpt using timer #3 but do not enable irq for it */ | ||
68 | __raw_writeq(0, IOADDR(A_SCD_TIMER_REGISTER(SB1250_HPT_NUM, R_SCD_TIMER_CFG))); | ||
69 | __raw_writeq(SB1250_HPT_VALUE, | ||
70 | IOADDR(A_SCD_TIMER_REGISTER(SB1250_HPT_NUM, R_SCD_TIMER_INIT))); | ||
71 | __raw_writeq(M_SCD_TIMER_ENABLE | M_SCD_TIMER_MODE_CONTINUOUS, | ||
72 | IOADDR(A_SCD_TIMER_REGISTER(SB1250_HPT_NUM, R_SCD_TIMER_CFG))); | ||
73 | |||
74 | /* | ||
75 | * we need to fill 32 bits, so just use the upper 23 bits and pretend | ||
76 | * the timer is going 512Mhz instead of 1Mhz | ||
77 | */ | ||
78 | mips_hpt_frequency = V_SCD_TIMER_FREQ << SB1250_HPT_SHIFT; | ||
79 | mips_hpt_init = sb1250_hpt_init; | ||
80 | mips_hpt_read = sb1250_hpt_read; | ||
81 | } | ||
82 | } | ||
83 | |||
84 | |||
52 | void sb1250_time_init(void) | 85 | void sb1250_time_init(void) |
53 | { | 86 | { |
54 | int cpu = smp_processor_id(); | 87 | int cpu = smp_processor_id(); |
55 | int irq = K_INT_TIMER_0+cpu; | 88 | int irq = K_INT_TIMER_0+cpu; |
56 | 89 | ||
57 | /* Only have 4 general purpose timers */ | 90 | /* Only have 4 general purpose timers, and we use last one as hpt */ |
58 | if (cpu > 3) { | 91 | if (cpu > 2) { |
59 | BUG(); | 92 | BUG(); |
60 | } | 93 | } |
61 | 94 | ||
62 | if (!cpu) { | ||
63 | /* Use our own gettimeoffset() routine */ | ||
64 | do_gettimeoffset = sb1250_gettimeoffset; | ||
65 | } | ||
66 | |||
67 | sb1250_mask_irq(cpu, irq); | 95 | sb1250_mask_irq(cpu, irq); |
68 | 96 | ||
69 | /* Map the timer interrupt to ip[4] of this cpu */ | 97 | /* Map the timer interrupt to ip[4] of this cpu */ |
@@ -75,10 +103,10 @@ void sb1250_time_init(void) | |||
75 | /* Disable the timer and set up the count */ | 103 | /* Disable the timer and set up the count */ |
76 | __raw_writeq(0, IOADDR(A_SCD_TIMER_REGISTER(cpu, R_SCD_TIMER_CFG))); | 104 | __raw_writeq(0, IOADDR(A_SCD_TIMER_REGISTER(cpu, R_SCD_TIMER_CFG))); |
77 | #ifdef CONFIG_SIMULATION | 105 | #ifdef CONFIG_SIMULATION |
78 | __raw_writeq(50000 / HZ, | 106 | __raw_writeq((50000 / HZ) - 1, |
79 | IOADDR(A_SCD_TIMER_REGISTER(cpu, R_SCD_TIMER_INIT))); | 107 | IOADDR(A_SCD_TIMER_REGISTER(cpu, R_SCD_TIMER_INIT))); |
80 | #else | 108 | #else |
81 | __raw_writeq(1000000 / HZ, | 109 | __raw_writeq((V_SCD_TIMER_FREQ / HZ) - 1, |
82 | IOADDR(A_SCD_TIMER_REGISTER(cpu, R_SCD_TIMER_INIT))); | 110 | IOADDR(A_SCD_TIMER_REGISTER(cpu, R_SCD_TIMER_INIT))); |
83 | #endif | 111 | #endif |
84 | 112 | ||
@@ -103,7 +131,7 @@ void sb1250_timer_interrupt(struct pt_regs *regs) | |||
103 | int cpu = smp_processor_id(); | 131 | int cpu = smp_processor_id(); |
104 | int irq = K_INT_TIMER_0 + cpu; | 132 | int irq = K_INT_TIMER_0 + cpu; |
105 | 133 | ||
106 | /* Reset the timer */ | 134 | /* ACK interrupt */ |
107 | ____raw_writeq(M_SCD_TIMER_ENABLE | M_SCD_TIMER_MODE_CONTINUOUS, | 135 | ____raw_writeq(M_SCD_TIMER_ENABLE | M_SCD_TIMER_MODE_CONTINUOUS, |
108 | IOADDR(A_SCD_TIMER_REGISTER(cpu, R_SCD_TIMER_CFG))); | 136 | IOADDR(A_SCD_TIMER_REGISTER(cpu, R_SCD_TIMER_CFG))); |
109 | 137 | ||
@@ -122,15 +150,26 @@ void sb1250_timer_interrupt(struct pt_regs *regs) | |||
122 | } | 150 | } |
123 | 151 | ||
124 | /* | 152 | /* |
125 | * We use our own do_gettimeoffset() instead of the generic one, | 153 | * The HPT is free running from SB1250_HPT_VALUE down to 0 then starts over |
126 | * because the generic one does not work for SMP case. | 154 | * again. There's no easy way to set to a specific value so store init value |
127 | * In addition, since we use general timer 0 for system time, | 155 | * in hpt_offset and subtract each time. |
128 | * we can get accurate intra-jiffy offset without calibration. | 156 | * |
157 | * Note: Timer isn't full 32bits so shift it into the upper part making | ||
158 | * it appear to run at a higher frequency. | ||
129 | */ | 159 | */ |
130 | unsigned long sb1250_gettimeoffset(void) | 160 | static unsigned int sb1250_hpt_read(void) |
131 | { | 161 | { |
132 | unsigned long count = | 162 | unsigned int count; |
133 | __raw_readq(IOADDR(A_SCD_TIMER_REGISTER(0, R_SCD_TIMER_CNT))); | ||
134 | 163 | ||
135 | return 1000000/HZ - count; | 164 | count = G_SCD_TIMER_CNT(__raw_readq(IOADDR(A_SCD_TIMER_REGISTER(SB1250_HPT_NUM, R_SCD_TIMER_CNT)))); |
136 | } | 165 | |
166 | count = (SB1250_HPT_VALUE - count) << SB1250_HPT_SHIFT; | ||
167 | |||
168 | return count - hpt_offset; | ||
169 | } | ||
170 | |||
171 | static void sb1250_hpt_init(unsigned int count) | ||
172 | { | ||
173 | hpt_offset = count; | ||
174 | return; | ||
175 | } | ||
diff --git a/arch/mips/sibyte/swarm/setup.c b/arch/mips/sibyte/swarm/setup.c index b614ca0ddb69..b661d2425a36 100644 --- a/arch/mips/sibyte/swarm/setup.c +++ b/arch/mips/sibyte/swarm/setup.c | |||
@@ -70,6 +70,12 @@ const char *get_system_type(void) | |||
70 | return "SiByte " SIBYTE_BOARD_NAME; | 70 | return "SiByte " SIBYTE_BOARD_NAME; |
71 | } | 71 | } |
72 | 72 | ||
73 | void __init swarm_time_init(void) | ||
74 | { | ||
75 | /* Setup HPT */ | ||
76 | sb1250_hpt_setup(); | ||
77 | } | ||
78 | |||
73 | void __init swarm_timer_setup(struct irqaction *irq) | 79 | void __init swarm_timer_setup(struct irqaction *irq) |
74 | { | 80 | { |
75 | /* | 81 | /* |
@@ -109,6 +115,7 @@ void __init plat_setup(void) | |||
109 | 115 | ||
110 | panic_timeout = 5; /* For debug. */ | 116 | panic_timeout = 5; /* For debug. */ |
111 | 117 | ||
118 | board_time_init = swarm_time_init; | ||
112 | board_timer_setup = swarm_timer_setup; | 119 | board_timer_setup = swarm_timer_setup; |
113 | board_be_handler = swarm_be_handler; | 120 | board_be_handler = swarm_be_handler; |
114 | 121 | ||
diff --git a/arch/mips/sni/setup.c b/arch/mips/sni/setup.c index 262c85680709..1141fcd13a59 100644 --- a/arch/mips/sni/setup.c +++ b/arch/mips/sni/setup.c | |||
@@ -5,7 +5,7 @@ | |||
5 | * License. See the file "COPYING" in the main directory of this archive | 5 | * License. See the file "COPYING" in the main directory of this archive |
6 | * for more details. | 6 | * for more details. |
7 | * | 7 | * |
8 | * Copyright (C) 1996, 97, 98, 2000, 03, 04 Ralf Baechle (ralf@linux-mips.org) | 8 | * Copyright (C) 1996, 97, 98, 2000, 03, 04, 06 Ralf Baechle (ralf@linux-mips.org) |
9 | */ | 9 | */ |
10 | #include <linux/config.h> | 10 | #include <linux/config.h> |
11 | #include <linux/eisa.h> | 11 | #include <linux/eisa.h> |
@@ -15,6 +15,7 @@ | |||
15 | #include <linux/init.h> | 15 | #include <linux/init.h> |
16 | #include <linux/interrupt.h> | 16 | #include <linux/interrupt.h> |
17 | #include <linux/mc146818rtc.h> | 17 | #include <linux/mc146818rtc.h> |
18 | #include <linux/pm.h> | ||
18 | #include <linux/pci.h> | 19 | #include <linux/pci.h> |
19 | #include <linux/console.h> | 20 | #include <linux/console.h> |
20 | #include <linux/fb.h> | 21 | #include <linux/fb.h> |
@@ -189,7 +190,7 @@ void __init plat_setup(void) | |||
189 | 190 | ||
190 | _machine_restart = sni_machine_restart; | 191 | _machine_restart = sni_machine_restart; |
191 | _machine_halt = sni_machine_halt; | 192 | _machine_halt = sni_machine_halt; |
192 | _machine_power_off = sni_machine_power_off; | 193 | pm_power_off = sni_machine_power_off; |
193 | 194 | ||
194 | sni_display_setup(); | 195 | sni_display_setup(); |
195 | 196 | ||
diff --git a/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_prom.c b/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_prom.c index e4d095d3e192..e19e2be70f76 100644 --- a/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_prom.c +++ b/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_prom.c | |||
@@ -60,7 +60,6 @@ void __init prom_init_cmdline(void) | |||
60 | 60 | ||
61 | void __init prom_init(void) | 61 | void __init prom_init(void) |
62 | { | 62 | { |
63 | const char* toshiba_name_list[] = GROUP_TOSHIBA_NAMES; | ||
64 | extern int tx4927_get_mem_size(void); | 63 | extern int tx4927_get_mem_size(void); |
65 | extern char* toshiba_name; | 64 | extern char* toshiba_name; |
66 | int msize; | 65 | int msize; |
@@ -69,12 +68,13 @@ void __init prom_init(void) | |||
69 | 68 | ||
70 | mips_machgroup = MACH_GROUP_TOSHIBA; | 69 | mips_machgroup = MACH_GROUP_TOSHIBA; |
71 | 70 | ||
72 | if ((read_c0_prid() & 0xff) == PRID_REV_TX4927) | 71 | if ((read_c0_prid() & 0xff) == PRID_REV_TX4927) { |
73 | mips_machtype = MACH_TOSHIBA_RBTX4927; | 72 | mips_machtype = MACH_TOSHIBA_RBTX4927; |
74 | else | 73 | toshiba_name = "TX4927"; |
74 | } else { | ||
75 | mips_machtype = MACH_TOSHIBA_RBTX4937; | 75 | mips_machtype = MACH_TOSHIBA_RBTX4937; |
76 | 76 | toshiba_name = "TX4937"; | |
77 | toshiba_name = toshiba_name_list[mips_machtype]; | 77 | } |
78 | 78 | ||
79 | msize = tx4927_get_mem_size(); | 79 | msize = tx4927_get_mem_size(); |
80 | add_memory_region(0, msize << 20, BOOT_MEM_RAM); | 80 | add_memory_region(0, msize << 20, BOOT_MEM_RAM); |
diff --git a/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_setup.c b/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_setup.c index 990fcb294bab..2ad6401d2af4 100644 --- a/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_setup.c +++ b/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_setup.c | |||
@@ -53,6 +53,8 @@ | |||
53 | #include <linux/interrupt.h> | 53 | #include <linux/interrupt.h> |
54 | #include <linux/pci.h> | 54 | #include <linux/pci.h> |
55 | #include <linux/timex.h> | 55 | #include <linux/timex.h> |
56 | #include <linux/pm.h> | ||
57 | |||
56 | #include <asm/bootinfo.h> | 58 | #include <asm/bootinfo.h> |
57 | #include <asm/page.h> | 59 | #include <asm/page.h> |
58 | #include <asm/io.h> | 60 | #include <asm/io.h> |
@@ -537,19 +539,10 @@ void tx4927_pci_setup(void) | |||
537 | TOSHIBA_RBTX4927_SETUP_DPRINTK(TOSHIBA_RBTX4927_SETUP_PCI2, | 539 | TOSHIBA_RBTX4927_SETUP_DPRINTK(TOSHIBA_RBTX4927_SETUP_PCI2, |
538 | "0x%08lx=mips_io_port_base", | 540 | "0x%08lx=mips_io_port_base", |
539 | mips_io_port_base); | 541 | mips_io_port_base); |
540 | |||
541 | TOSHIBA_RBTX4927_SETUP_DPRINTK(TOSHIBA_RBTX4927_SETUP_PCI2, | ||
542 | "setup pci_io_resource to 0x%08lx 0x%08lx\n", | ||
543 | pci_io_resource.start, | ||
544 | pci_io_resource.end); | ||
545 | TOSHIBA_RBTX4927_SETUP_DPRINTK(TOSHIBA_RBTX4927_SETUP_PCI2, | ||
546 | "setup pci_mem_resource to 0x%08lx 0x%08lx\n", | ||
547 | pci_mem_resource.start, | ||
548 | pci_mem_resource.end); | ||
549 | |||
550 | if (!called) { | 542 | if (!called) { |
551 | printk | 543 | printk |
552 | ("TX4927 PCIC -- DID:%04x VID:%04x RID:%02x Arbiter:%s\n", | 544 | ("%s PCIC -- DID:%04x VID:%04x RID:%02x Arbiter:%s\n", |
545 | toshiba_name, | ||
553 | (unsigned short) (tx4927_pcicptr->pciid >> 16), | 546 | (unsigned short) (tx4927_pcicptr->pciid >> 16), |
554 | (unsigned short) (tx4927_pcicptr->pciid & 0xffff), | 547 | (unsigned short) (tx4927_pcicptr->pciid & 0xffff), |
555 | (unsigned short) (tx4927_pcicptr->pciccrev & 0xff), | 548 | (unsigned short) (tx4927_pcicptr->pciccrev & 0xff), |
@@ -562,21 +555,52 @@ void tx4927_pci_setup(void) | |||
562 | (tx4927_ccfgptr->ccfg & TX4927_CCFG_PCI66) ? " PCI66" : ""); | 555 | (tx4927_ccfgptr->ccfg & TX4927_CCFG_PCI66) ? " PCI66" : ""); |
563 | if (tx4927_ccfgptr->pcfg & TX4927_PCFG_PCICLKEN_ALL) { | 556 | if (tx4927_ccfgptr->pcfg & TX4927_PCFG_PCICLKEN_ALL) { |
564 | int pciclk = 0; | 557 | int pciclk = 0; |
565 | switch ((unsigned long) tx4927_ccfgptr-> | 558 | if (mips_machtype == MACH_TOSHIBA_RBTX4937) |
566 | ccfg & TX4927_CCFG_PCIDIVMODE_MASK) { | 559 | switch ((unsigned long) tx4927_ccfgptr-> |
567 | case TX4927_CCFG_PCIDIVMODE_2_5: | 560 | ccfg & TX4937_CCFG_PCIDIVMODE_MASK) { |
568 | pciclk = tx4927_cpu_clock * 2 / 5; | 561 | case TX4937_CCFG_PCIDIVMODE_4: |
569 | break; | 562 | pciclk = tx4927_cpu_clock / 4; |
570 | case TX4927_CCFG_PCIDIVMODE_3: | 563 | break; |
571 | pciclk = tx4927_cpu_clock / 3; | 564 | case TX4937_CCFG_PCIDIVMODE_4_5: |
572 | break; | 565 | pciclk = tx4927_cpu_clock * 2 / 9; |
573 | case TX4927_CCFG_PCIDIVMODE_5: | 566 | break; |
574 | pciclk = tx4927_cpu_clock / 5; | 567 | case TX4937_CCFG_PCIDIVMODE_5: |
575 | break; | 568 | pciclk = tx4927_cpu_clock / 5; |
576 | case TX4927_CCFG_PCIDIVMODE_6: | 569 | break; |
577 | pciclk = tx4927_cpu_clock / 6; | 570 | case TX4937_CCFG_PCIDIVMODE_5_5: |
578 | break; | 571 | pciclk = tx4927_cpu_clock * 2 / 11; |
579 | } | 572 | break; |
573 | case TX4937_CCFG_PCIDIVMODE_8: | ||
574 | pciclk = tx4927_cpu_clock / 8; | ||
575 | break; | ||
576 | case TX4937_CCFG_PCIDIVMODE_9: | ||
577 | pciclk = tx4927_cpu_clock / 9; | ||
578 | break; | ||
579 | case TX4937_CCFG_PCIDIVMODE_10: | ||
580 | pciclk = tx4927_cpu_clock / 10; | ||
581 | break; | ||
582 | case TX4937_CCFG_PCIDIVMODE_11: | ||
583 | pciclk = tx4927_cpu_clock / 11; | ||
584 | break; | ||
585 | } | ||
586 | |||
587 | else | ||
588 | switch ((unsigned long) tx4927_ccfgptr-> | ||
589 | ccfg & TX4927_CCFG_PCIDIVMODE_MASK) { | ||
590 | case TX4927_CCFG_PCIDIVMODE_2_5: | ||
591 | pciclk = tx4927_cpu_clock * 2 / 5; | ||
592 | break; | ||
593 | case TX4927_CCFG_PCIDIVMODE_3: | ||
594 | pciclk = tx4927_cpu_clock / 3; | ||
595 | break; | ||
596 | case TX4927_CCFG_PCIDIVMODE_5: | ||
597 | pciclk = tx4927_cpu_clock / 5; | ||
598 | break; | ||
599 | case TX4927_CCFG_PCIDIVMODE_6: | ||
600 | pciclk = tx4927_cpu_clock / 6; | ||
601 | break; | ||
602 | } | ||
603 | |||
580 | printk("Internal(%dMHz)", pciclk / 1000000); | 604 | printk("Internal(%dMHz)", pciclk / 1000000); |
581 | } else { | 605 | } else { |
582 | int pciclk = 0; | 606 | int pciclk = 0; |
@@ -814,24 +838,40 @@ void __init toshiba_rbtx4927_setup(void) | |||
814 | ":ResetRoutines\n"); | 838 | ":ResetRoutines\n"); |
815 | _machine_restart = toshiba_rbtx4927_restart; | 839 | _machine_restart = toshiba_rbtx4927_restart; |
816 | _machine_halt = toshiba_rbtx4927_halt; | 840 | _machine_halt = toshiba_rbtx4927_halt; |
817 | _machine_power_off = toshiba_rbtx4927_power_off; | 841 | pm_power_off = toshiba_rbtx4927_power_off; |
818 | 842 | ||
819 | #ifdef CONFIG_PCI | 843 | #ifdef CONFIG_PCI |
820 | 844 | ||
821 | /* PCIC */ | 845 | /* PCIC */ |
822 | /* | 846 | /* |
823 | * ASSUMPTION: PCIDIVMODE is configured for PCI 33MHz or 66MHz. | 847 | * ASSUMPTION: PCIDIVMODE is configured for PCI 33MHz or 66MHz. |
824 | * PCIDIVMODE[12:11]'s initial value are given by S9[4:3] (ON:0, OFF:1). | 848 | * |
849 | * For TX4927: | ||
850 | * PCIDIVMODE[12:11]'s initial value is given by S9[4:3] (ON:0, OFF:1). | ||
825 | * CPU 166MHz: PCI 66MHz : PCIDIVMODE: 00 (1/2.5) | 851 | * CPU 166MHz: PCI 66MHz : PCIDIVMODE: 00 (1/2.5) |
826 | * CPU 200MHz: PCI 66MHz : PCIDIVMODE: 01 (1/3) | 852 | * CPU 200MHz: PCI 66MHz : PCIDIVMODE: 01 (1/3) |
827 | * CPU 166MHz: PCI 33MHz : PCIDIVMODE: 10 (1/5) | 853 | * CPU 166MHz: PCI 33MHz : PCIDIVMODE: 10 (1/5) |
828 | * CPU 200MHz: PCI 33MHz : PCIDIVMODE: 11 (1/6) | 854 | * CPU 200MHz: PCI 33MHz : PCIDIVMODE: 11 (1/6) |
829 | * i.e. S9[3]: ON (83MHz), OFF (100MHz) | 855 | * i.e. S9[3]: ON (83MHz), OFF (100MHz) |
856 | * | ||
857 | * For TX4937: | ||
858 | * PCIDIVMODE[12:11]'s initial value is given by S1[5:4] (ON:0, OFF:1) | ||
859 | * PCIDIVMODE[10] is 0. | ||
860 | * CPU 266MHz: PCI 33MHz : PCIDIVMODE: 000 (1/8) | ||
861 | * CPU 266MHz: PCI 66MHz : PCIDIVMODE: 001 (1/4) | ||
862 | * CPU 300MHz: PCI 33MHz : PCIDIVMODE: 010 (1/9) | ||
863 | * CPU 300MHz: PCI 66MHz : PCIDIVMODE: 011 (1/4.5) | ||
864 | * CPU 333MHz: PCI 33MHz : PCIDIVMODE: 100 (1/10) | ||
865 | * CPU 333MHz: PCI 66MHz : PCIDIVMODE: 101 (1/5) | ||
866 | * | ||
830 | */ | 867 | */ |
831 | TOSHIBA_RBTX4927_SETUP_DPRINTK(TOSHIBA_RBTX4927_SETUP_PCI1, | 868 | TOSHIBA_RBTX4927_SETUP_DPRINTK(TOSHIBA_RBTX4927_SETUP_PCI1, |
832 | "ccfg is %lx, DIV is %x\n", | 869 | "ccfg is %lx, PCIDIVMODE is %x\n", |
833 | (unsigned long) tx4927_ccfgptr-> | 870 | (unsigned long) tx4927_ccfgptr->ccfg, |
834 | ccfg, TX4927_CCFG_PCIDIVMODE_MASK); | 871 | (unsigned long) tx4927_ccfgptr->ccfg & |
872 | (mips_machtype == MACH_TOSHIBA_RBTX4937 ? | ||
873 | TX4937_CCFG_PCIDIVMODE_MASK : | ||
874 | TX4927_CCFG_PCIDIVMODE_MASK)); | ||
835 | 875 | ||
836 | TOSHIBA_RBTX4927_SETUP_DPRINTK(TOSHIBA_RBTX4927_SETUP_PCI1, | 876 | TOSHIBA_RBTX4927_SETUP_DPRINTK(TOSHIBA_RBTX4927_SETUP_PCI1, |
837 | "PCI66 mode is %lx, PCI mode is %lx, pci arb is %lx\n", | 877 | "PCI66 mode is %lx, PCI mode is %lx, pci arb is %lx\n", |
@@ -842,20 +882,30 @@ void __init toshiba_rbtx4927_setup(void) | |||
842 | (unsigned long) tx4927_ccfgptr-> | 882 | (unsigned long) tx4927_ccfgptr-> |
843 | ccfg & TX4927_CCFG_PCIXARB); | 883 | ccfg & TX4927_CCFG_PCIXARB); |
844 | 884 | ||
845 | TOSHIBA_RBTX4927_SETUP_DPRINTK(TOSHIBA_RBTX4927_SETUP_PCI1, | 885 | if (mips_machtype == MACH_TOSHIBA_RBTX4937) |
846 | "PCIDIVMODE is %lx\n", | 886 | switch ((unsigned long)tx4927_ccfgptr-> |
847 | (unsigned long) tx4927_ccfgptr-> | 887 | ccfg & TX4937_CCFG_PCIDIVMODE_MASK) { |
848 | ccfg & TX4927_CCFG_PCIDIVMODE_MASK); | 888 | case TX4937_CCFG_PCIDIVMODE_8: |
849 | 889 | case TX4937_CCFG_PCIDIVMODE_4: | |
850 | switch ((unsigned long) tx4927_ccfgptr-> | 890 | tx4927_cpu_clock = 266666666; /* 266MHz */ |
851 | ccfg & TX4927_CCFG_PCIDIVMODE_MASK) { | 891 | break; |
852 | case TX4927_CCFG_PCIDIVMODE_2_5: | 892 | case TX4937_CCFG_PCIDIVMODE_9: |
853 | case TX4927_CCFG_PCIDIVMODE_5: | 893 | case TX4937_CCFG_PCIDIVMODE_4_5: |
854 | tx4927_cpu_clock = 166000000; /* 166MHz */ | 894 | tx4927_cpu_clock = 300000000; /* 300MHz */ |
855 | break; | 895 | break; |
856 | default: | 896 | default: |
857 | tx4927_cpu_clock = 200000000; /* 200MHz */ | 897 | tx4927_cpu_clock = 333333333; /* 333MHz */ |
858 | } | 898 | } |
899 | else | ||
900 | switch ((unsigned long)tx4927_ccfgptr-> | ||
901 | ccfg & TX4927_CCFG_PCIDIVMODE_MASK) { | ||
902 | case TX4927_CCFG_PCIDIVMODE_2_5: | ||
903 | case TX4927_CCFG_PCIDIVMODE_5: | ||
904 | tx4927_cpu_clock = 166666666; /* 166MHz */ | ||
905 | break; | ||
906 | default: | ||
907 | tx4927_cpu_clock = 200000000; /* 200MHz */ | ||
908 | } | ||
859 | 909 | ||
860 | /* CCFG */ | 910 | /* CCFG */ |
861 | /* enable Timeout BusError */ | 911 | /* enable Timeout BusError */ |
diff --git a/arch/mips/tx4938/toshiba_rbtx4938/setup.c b/arch/mips/tx4938/toshiba_rbtx4938/setup.c index 9f1dcc8ca5a3..5c7ace982a49 100644 --- a/arch/mips/tx4938/toshiba_rbtx4938/setup.c +++ b/arch/mips/tx4938/toshiba_rbtx4938/setup.c | |||
@@ -20,6 +20,8 @@ | |||
20 | #include <linux/interrupt.h> | 20 | #include <linux/interrupt.h> |
21 | #include <linux/console.h> | 21 | #include <linux/console.h> |
22 | #include <linux/pci.h> | 22 | #include <linux/pci.h> |
23 | #include <linux/pm.h> | ||
24 | |||
23 | #include <asm/wbflush.h> | 25 | #include <asm/wbflush.h> |
24 | #include <asm/reboot.h> | 26 | #include <asm/reboot.h> |
25 | #include <asm/irq.h> | 27 | #include <asm/irq.h> |
@@ -1003,7 +1005,7 @@ void __init toshiba_rbtx4938_setup(void) | |||
1003 | 1005 | ||
1004 | _machine_restart = rbtx4938_machine_restart; | 1006 | _machine_restart = rbtx4938_machine_restart; |
1005 | _machine_halt = rbtx4938_machine_halt; | 1007 | _machine_halt = rbtx4938_machine_halt; |
1006 | _machine_power_off = rbtx4938_machine_power_off; | 1008 | pm_power_off = rbtx4938_machine_power_off; |
1007 | 1009 | ||
1008 | *rbtx4938_led_ptr = 0xff; | 1010 | *rbtx4938_led_ptr = 0xff; |
1009 | printk("RBTX4938 --- FPGA(Rev %02x)", *rbtx4938_fpga_rev_ptr); | 1011 | printk("RBTX4938 --- FPGA(Rev %02x)", *rbtx4938_fpga_rev_ptr); |
diff --git a/arch/mips/vr41xx/common/pmu.c b/arch/mips/vr41xx/common/pmu.c index 02bf4f7d06ba..5e469796413f 100644 --- a/arch/mips/vr41xx/common/pmu.c +++ b/arch/mips/vr41xx/common/pmu.c | |||
@@ -21,6 +21,7 @@ | |||
21 | #include <linux/init.h> | 21 | #include <linux/init.h> |
22 | #include <linux/ioport.h> | 22 | #include <linux/ioport.h> |
23 | #include <linux/kernel.h> | 23 | #include <linux/kernel.h> |
24 | #include <linux/pm.h> | ||
24 | #include <linux/smp.h> | 25 | #include <linux/smp.h> |
25 | #include <linux/types.h> | 26 | #include <linux/types.h> |
26 | 27 | ||
@@ -114,7 +115,7 @@ static int __init vr41xx_pmu_init(void) | |||
114 | 115 | ||
115 | _machine_restart = vr41xx_restart; | 116 | _machine_restart = vr41xx_restart; |
116 | _machine_halt = vr41xx_halt; | 117 | _machine_halt = vr41xx_halt; |
117 | _machine_power_off = vr41xx_power_off; | 118 | pm_power_off = vr41xx_power_off; |
118 | 119 | ||
119 | return 0; | 120 | return 0; |
120 | } | 121 | } |
diff --git a/arch/parisc/Kconfig b/arch/parisc/Kconfig index e77a06e9621e..eca33cfa8a4c 100644 --- a/arch/parisc/Kconfig +++ b/arch/parisc/Kconfig | |||
@@ -29,6 +29,11 @@ config GENERIC_CALIBRATE_DELAY | |||
29 | bool | 29 | bool |
30 | default y | 30 | default y |
31 | 31 | ||
32 | config TIME_LOW_RES | ||
33 | bool | ||
34 | depends on SMP | ||
35 | default y | ||
36 | |||
32 | config GENERIC_ISA_DMA | 37 | config GENERIC_ISA_DMA |
33 | bool | 38 | bool |
34 | 39 | ||
@@ -149,14 +154,20 @@ config HOTPLUG_CPU | |||
149 | default y if SMP | 154 | default y if SMP |
150 | select HOTPLUG | 155 | select HOTPLUG |
151 | 156 | ||
157 | config ARCH_SELECT_MEMORY_MODEL | ||
158 | def_bool y | ||
159 | depends on 64BIT | ||
160 | |||
152 | config ARCH_DISCONTIGMEM_ENABLE | 161 | config ARCH_DISCONTIGMEM_ENABLE |
153 | bool "Discontiguous memory support (EXPERIMENTAL)" | 162 | def_bool y |
154 | depends on 64BIT && EXPERIMENTAL | 163 | depends on 64BIT |
155 | help | 164 | |
156 | Say Y to support efficient handling of discontiguous physical memory, | 165 | config ARCH_FLATMEM_ENABLE |
157 | for architectures which are either NUMA (Non-Uniform Memory Access) | 166 | def_bool y |
158 | or have huge holes in the physical address space for other reasons. | 167 | |
159 | See <file:Documentation/vm/numa> for more. | 168 | config ARCH_DISCONTIGMEM_DEFAULT |
169 | def_bool y | ||
170 | depends on ARCH_DISCONTIGMEM_ENABLE | ||
160 | 171 | ||
161 | source "kernel/Kconfig.hz" | 172 | source "kernel/Kconfig.hz" |
162 | source "mm/Kconfig" | 173 | source "mm/Kconfig" |
diff --git a/arch/parisc/Kconfig.debug b/arch/parisc/Kconfig.debug index 8caaed187a1f..9166bd117267 100644 --- a/arch/parisc/Kconfig.debug +++ b/arch/parisc/Kconfig.debug | |||
@@ -11,4 +11,14 @@ config DEBUG_RWLOCK | |||
11 | too many attempts. If you suspect a rwlock problem or a kernel | 11 | too many attempts. If you suspect a rwlock problem or a kernel |
12 | hacker asks for this option then say Y. Otherwise say N. | 12 | hacker asks for this option then say Y. Otherwise say N. |
13 | 13 | ||
14 | config DEBUG_RODATA | ||
15 | bool "Write protect kernel read-only data structures" | ||
16 | depends on DEBUG_KERNEL | ||
17 | help | ||
18 | Mark the kernel read-only data as write-protected in the pagetables, | ||
19 | in order to catch accidental (and incorrect) writes to such const | ||
20 | data. This option may have a slight performance impact because a | ||
21 | portion of the kernel code won't be covered by a TLB anymore. | ||
22 | If in doubt, say "N". | ||
23 | |||
14 | endmenu | 24 | endmenu |
diff --git a/arch/parisc/configs/b180_defconfig b/arch/parisc/configs/b180_defconfig index 8819e7e6ae3f..37e98241ce4b 100644 --- a/arch/parisc/configs/b180_defconfig +++ b/arch/parisc/configs/b180_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.14-rc5-pa1 | 3 | # Linux kernel version: 2.6.16-rc1-pa0 |
4 | # Fri Oct 21 23:06:10 2005 | 4 | # Tue Jan 17 08:21:01 2006 |
5 | # | 5 | # |
6 | CONFIG_PARISC=y | 6 | CONFIG_PARISC=y |
7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
@@ -29,8 +29,6 @@ CONFIG_SYSVIPC=y | |||
29 | # CONFIG_BSD_PROCESS_ACCT is not set | 29 | # CONFIG_BSD_PROCESS_ACCT is not set |
30 | CONFIG_SYSCTL=y | 30 | CONFIG_SYSCTL=y |
31 | # CONFIG_AUDIT is not set | 31 | # CONFIG_AUDIT is not set |
32 | # CONFIG_HOTPLUG is not set | ||
33 | CONFIG_KOBJECT_UEVENT=y | ||
34 | CONFIG_IKCONFIG=y | 32 | CONFIG_IKCONFIG=y |
35 | CONFIG_IKCONFIG_PROC=y | 33 | CONFIG_IKCONFIG_PROC=y |
36 | CONFIG_INITRAMFS_SOURCE="" | 34 | CONFIG_INITRAMFS_SOURCE="" |
@@ -38,8 +36,10 @@ CONFIG_INITRAMFS_SOURCE="" | |||
38 | CONFIG_KALLSYMS=y | 36 | CONFIG_KALLSYMS=y |
39 | # CONFIG_KALLSYMS_ALL is not set | 37 | # CONFIG_KALLSYMS_ALL is not set |
40 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 38 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
39 | CONFIG_HOTPLUG=y | ||
41 | CONFIG_PRINTK=y | 40 | CONFIG_PRINTK=y |
42 | CONFIG_BUG=y | 41 | CONFIG_BUG=y |
42 | CONFIG_ELF_CORE=y | ||
43 | CONFIG_BASE_FULL=y | 43 | CONFIG_BASE_FULL=y |
44 | CONFIG_FUTEX=y | 44 | CONFIG_FUTEX=y |
45 | CONFIG_EPOLL=y | 45 | CONFIG_EPOLL=y |
@@ -48,8 +48,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0 | |||
48 | CONFIG_CC_ALIGN_LABELS=0 | 48 | CONFIG_CC_ALIGN_LABELS=0 |
49 | CONFIG_CC_ALIGN_LOOPS=0 | 49 | CONFIG_CC_ALIGN_LOOPS=0 |
50 | CONFIG_CC_ALIGN_JUMPS=0 | 50 | CONFIG_CC_ALIGN_JUMPS=0 |
51 | CONFIG_SLAB=y | ||
51 | # CONFIG_TINY_SHMEM is not set | 52 | # CONFIG_TINY_SHMEM is not set |
52 | CONFIG_BASE_SMALL=0 | 53 | CONFIG_BASE_SMALL=0 |
54 | # CONFIG_SLOB is not set | ||
53 | 55 | ||
54 | # | 56 | # |
55 | # Loadable module support | 57 | # Loadable module support |
@@ -57,10 +59,28 @@ CONFIG_BASE_SMALL=0 | |||
57 | CONFIG_MODULES=y | 59 | CONFIG_MODULES=y |
58 | # CONFIG_MODULE_UNLOAD is not set | 60 | # CONFIG_MODULE_UNLOAD is not set |
59 | CONFIG_OBSOLETE_MODPARM=y | 61 | CONFIG_OBSOLETE_MODPARM=y |
62 | CONFIG_MODVERSIONS=y | ||
60 | # CONFIG_MODULE_SRCVERSION_ALL is not set | 63 | # CONFIG_MODULE_SRCVERSION_ALL is not set |
61 | # CONFIG_KMOD is not set | 64 | # CONFIG_KMOD is not set |
62 | 65 | ||
63 | # | 66 | # |
67 | # Block layer | ||
68 | # | ||
69 | |||
70 | # | ||
71 | # IO Schedulers | ||
72 | # | ||
73 | CONFIG_IOSCHED_NOOP=y | ||
74 | CONFIG_IOSCHED_AS=y | ||
75 | CONFIG_IOSCHED_DEADLINE=y | ||
76 | CONFIG_IOSCHED_CFQ=y | ||
77 | # CONFIG_DEFAULT_AS is not set | ||
78 | # CONFIG_DEFAULT_DEADLINE is not set | ||
79 | CONFIG_DEFAULT_CFQ=y | ||
80 | # CONFIG_DEFAULT_NOOP is not set | ||
81 | CONFIG_DEFAULT_IOSCHED="cfq" | ||
82 | |||
83 | # | ||
64 | # Processor type and features | 84 | # Processor type and features |
65 | # | 85 | # |
66 | # CONFIG_PA7000 is not set | 86 | # CONFIG_PA7000 is not set |
@@ -77,6 +97,7 @@ CONFIG_HZ=250 | |||
77 | CONFIG_FLATMEM=y | 97 | CONFIG_FLATMEM=y |
78 | CONFIG_FLAT_NODE_MEM_MAP=y | 98 | CONFIG_FLAT_NODE_MEM_MAP=y |
79 | # CONFIG_SPARSEMEM_STATIC is not set | 99 | # CONFIG_SPARSEMEM_STATIC is not set |
100 | CONFIG_SPLIT_PTLOCK_CPUS=4096 | ||
80 | # CONFIG_PREEMPT is not set | 101 | # CONFIG_PREEMPT is not set |
81 | # CONFIG_HPUX is not set | 102 | # CONFIG_HPUX is not set |
82 | 103 | ||
@@ -84,8 +105,8 @@ CONFIG_FLAT_NODE_MEM_MAP=y | |||
84 | # Bus options (PCI, PCMCIA, EISA, GSC, ISA) | 105 | # Bus options (PCI, PCMCIA, EISA, GSC, ISA) |
85 | # | 106 | # |
86 | CONFIG_GSC=y | 107 | CONFIG_GSC=y |
87 | # CONFIG_HPPB is not set | 108 | CONFIG_HPPB=y |
88 | # CONFIG_IOMMU_CCIO is not set | 109 | CONFIG_IOMMU_CCIO=y |
89 | CONFIG_GSC_LASI=y | 110 | CONFIG_GSC_LASI=y |
90 | CONFIG_GSC_WAX=y | 111 | CONFIG_GSC_WAX=y |
91 | CONFIG_EISA=y | 112 | CONFIG_EISA=y |
@@ -165,8 +186,11 @@ CONFIG_IPV6=y | |||
165 | # CONFIG_LLC2 is not set | 186 | # CONFIG_LLC2 is not set |
166 | # CONFIG_IPX is not set | 187 | # CONFIG_IPX is not set |
167 | # CONFIG_ATALK is not set | 188 | # CONFIG_ATALK is not set |
189 | |||
190 | # | ||
191 | # QoS and/or fair queueing | ||
192 | # | ||
168 | # CONFIG_NET_SCHED is not set | 193 | # CONFIG_NET_SCHED is not set |
169 | # CONFIG_NET_CLS_ROUTE is not set | ||
170 | 194 | ||
171 | # | 195 | # |
172 | # Network testing | 196 | # Network testing |
@@ -205,6 +229,7 @@ CONFIG_STANDALONE=y | |||
205 | CONFIG_PARPORT=y | 229 | CONFIG_PARPORT=y |
206 | CONFIG_PARPORT_PC=y | 230 | CONFIG_PARPORT_PC=y |
207 | # CONFIG_PARPORT_SERIAL is not set | 231 | # CONFIG_PARPORT_SERIAL is not set |
232 | CONFIG_PARPORT_NOT_PC=y | ||
208 | CONFIG_PARPORT_GSC=y | 233 | CONFIG_PARPORT_GSC=y |
209 | # CONFIG_PARPORT_1284 is not set | 234 | # CONFIG_PARPORT_1284 is not set |
210 | 235 | ||
@@ -230,14 +255,6 @@ CONFIG_BLK_DEV_RAM_COUNT=16 | |||
230 | CONFIG_CDROM_PKTCDVD=m | 255 | CONFIG_CDROM_PKTCDVD=m |
231 | CONFIG_CDROM_PKTCDVD_BUFFERS=8 | 256 | CONFIG_CDROM_PKTCDVD_BUFFERS=8 |
232 | # CONFIG_CDROM_PKTCDVD_WCACHE is not set | 257 | # CONFIG_CDROM_PKTCDVD_WCACHE is not set |
233 | |||
234 | # | ||
235 | # IO Schedulers | ||
236 | # | ||
237 | CONFIG_IOSCHED_NOOP=y | ||
238 | CONFIG_IOSCHED_AS=y | ||
239 | CONFIG_IOSCHED_DEADLINE=y | ||
240 | CONFIG_IOSCHED_CFQ=y | ||
241 | CONFIG_ATA_OVER_ETH=y | 258 | CONFIG_ATA_OVER_ETH=y |
242 | 259 | ||
243 | # | 260 | # |
@@ -281,6 +298,7 @@ CONFIG_SCSI_SPI_ATTRS=y | |||
281 | # | 298 | # |
282 | # SCSI low-level drivers | 299 | # SCSI low-level drivers |
283 | # | 300 | # |
301 | # CONFIG_ISCSI_TCP is not set | ||
284 | # CONFIG_BLK_DEV_3W_XXXX_RAID is not set | 302 | # CONFIG_BLK_DEV_3W_XXXX_RAID is not set |
285 | # CONFIG_SCSI_3W_9XXX is not set | 303 | # CONFIG_SCSI_3W_9XXX is not set |
286 | # CONFIG_SCSI_ACARD is not set | 304 | # CONFIG_SCSI_ACARD is not set |
@@ -313,21 +331,19 @@ CONFIG_SCSI_SYM53C8XX_2=y | |||
313 | CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=0 | 331 | CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=0 |
314 | CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 | 332 | CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 |
315 | CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 | 333 | CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 |
316 | # CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set | 334 | CONFIG_SCSI_SYM53C8XX_MMIO=y |
317 | # CONFIG_SCSI_IPR is not set | 335 | # CONFIG_SCSI_IPR is not set |
318 | # CONFIG_SCSI_ZALON is not set | 336 | CONFIG_SCSI_ZALON=y |
337 | CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS=8 | ||
338 | CONFIG_SCSI_NCR53C8XX_MAX_TAGS=32 | ||
339 | CONFIG_SCSI_NCR53C8XX_SYNC=40 | ||
340 | # CONFIG_SCSI_NCR53C8XX_PROFILE is not set | ||
319 | # CONFIG_SCSI_PAS16 is not set | 341 | # CONFIG_SCSI_PAS16 is not set |
320 | # CONFIG_SCSI_PSI240I is not set | 342 | # CONFIG_SCSI_PSI240I is not set |
321 | # CONFIG_SCSI_QLOGIC_FAS is not set | 343 | # CONFIG_SCSI_QLOGIC_FAS is not set |
322 | # CONFIG_SCSI_QLOGIC_FC is not set | 344 | # CONFIG_SCSI_QLOGIC_FC is not set |
323 | # CONFIG_SCSI_QLOGIC_1280 is not set | 345 | # CONFIG_SCSI_QLOGIC_1280 is not set |
324 | CONFIG_SCSI_QLA2XXX=y | 346 | # CONFIG_SCSI_QLA_FC is not set |
325 | # CONFIG_SCSI_QLA21XX is not set | ||
326 | # CONFIG_SCSI_QLA22XX is not set | ||
327 | # CONFIG_SCSI_QLA2300 is not set | ||
328 | # CONFIG_SCSI_QLA2322 is not set | ||
329 | # CONFIG_SCSI_QLA6312 is not set | ||
330 | # CONFIG_SCSI_QLA24XX is not set | ||
331 | # CONFIG_SCSI_LPFC is not set | 347 | # CONFIG_SCSI_LPFC is not set |
332 | # CONFIG_SCSI_SIM710 is not set | 348 | # CONFIG_SCSI_SIM710 is not set |
333 | # CONFIG_SCSI_SYM53C416 is not set | 349 | # CONFIG_SCSI_SYM53C416 is not set |
@@ -397,7 +413,7 @@ CONFIG_NETDEVICES=y | |||
397 | # | 413 | # |
398 | CONFIG_NET_ETHERNET=y | 414 | CONFIG_NET_ETHERNET=y |
399 | # CONFIG_MII is not set | 415 | # CONFIG_MII is not set |
400 | # CONFIG_LASI_82596 is not set | 416 | CONFIG_LASI_82596=y |
401 | # CONFIG_HAPPYMEAL is not set | 417 | # CONFIG_HAPPYMEAL is not set |
402 | # CONFIG_SUNGEM is not set | 418 | # CONFIG_SUNGEM is not set |
403 | # CONFIG_CASSINI is not set | 419 | # CONFIG_CASSINI is not set |
@@ -464,6 +480,7 @@ CONFIG_NET_RADIO=y | |||
464 | # Wireless 802.11b ISA/PCI cards support | 480 | # Wireless 802.11b ISA/PCI cards support |
465 | # | 481 | # |
466 | # CONFIG_HERMES is not set | 482 | # CONFIG_HERMES is not set |
483 | # CONFIG_ATMEL is not set | ||
467 | 484 | ||
468 | # | 485 | # |
469 | # Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support | 486 | # Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support |
@@ -527,7 +544,7 @@ CONFIG_KEYBOARD_ATKBD_HP_KEYCODES=y | |||
527 | # CONFIG_KEYBOARD_XTKBD is not set | 544 | # CONFIG_KEYBOARD_XTKBD is not set |
528 | # CONFIG_KEYBOARD_NEWTON is not set | 545 | # CONFIG_KEYBOARD_NEWTON is not set |
529 | # CONFIG_KEYBOARD_HIL_OLD is not set | 546 | # CONFIG_KEYBOARD_HIL_OLD is not set |
530 | # CONFIG_KEYBOARD_HIL is not set | 547 | CONFIG_KEYBOARD_HIL=y |
531 | CONFIG_INPUT_MOUSE=y | 548 | CONFIG_INPUT_MOUSE=y |
532 | CONFIG_MOUSE_PS2=y | 549 | CONFIG_MOUSE_PS2=y |
533 | # CONFIG_MOUSE_SERIAL is not set | 550 | # CONFIG_MOUSE_SERIAL is not set |
@@ -535,7 +552,7 @@ CONFIG_MOUSE_PS2=y | |||
535 | # CONFIG_MOUSE_LOGIBM is not set | 552 | # CONFIG_MOUSE_LOGIBM is not set |
536 | # CONFIG_MOUSE_PC110PAD is not set | 553 | # CONFIG_MOUSE_PC110PAD is not set |
537 | # CONFIG_MOUSE_VSXXXAA is not set | 554 | # CONFIG_MOUSE_VSXXXAA is not set |
538 | # CONFIG_MOUSE_HIL is not set | 555 | CONFIG_MOUSE_HIL=y |
539 | # CONFIG_INPUT_JOYSTICK is not set | 556 | # CONFIG_INPUT_JOYSTICK is not set |
540 | # CONFIG_INPUT_TOUCHSCREEN is not set | 557 | # CONFIG_INPUT_TOUCHSCREEN is not set |
541 | CONFIG_INPUT_MISC=y | 558 | CONFIG_INPUT_MISC=y |
@@ -549,7 +566,8 @@ CONFIG_SERIO=y | |||
549 | # CONFIG_SERIO_SERPORT is not set | 566 | # CONFIG_SERIO_SERPORT is not set |
550 | # CONFIG_SERIO_PARKBD is not set | 567 | # CONFIG_SERIO_PARKBD is not set |
551 | CONFIG_SERIO_GSCPS2=y | 568 | CONFIG_SERIO_GSCPS2=y |
552 | # CONFIG_HP_SDC is not set | 569 | CONFIG_HP_SDC=y |
570 | CONFIG_HIL_MLC=y | ||
553 | # CONFIG_SERIO_PCIPS2 is not set | 571 | # CONFIG_SERIO_PCIPS2 is not set |
554 | CONFIG_SERIO_LIBPS2=y | 572 | CONFIG_SERIO_LIBPS2=y |
555 | # CONFIG_SERIO_RAW is not set | 573 | # CONFIG_SERIO_RAW is not set |
@@ -569,6 +587,7 @@ CONFIG_HW_CONSOLE=y | |||
569 | CONFIG_SERIAL_8250=y | 587 | CONFIG_SERIAL_8250=y |
570 | CONFIG_SERIAL_8250_CONSOLE=y | 588 | CONFIG_SERIAL_8250_CONSOLE=y |
571 | CONFIG_SERIAL_8250_NR_UARTS=13 | 589 | CONFIG_SERIAL_8250_NR_UARTS=13 |
590 | CONFIG_SERIAL_8250_RUNTIME_UARTS=4 | ||
572 | CONFIG_SERIAL_8250_EXTENDED=y | 591 | CONFIG_SERIAL_8250_EXTENDED=y |
573 | CONFIG_SERIAL_8250_MANY_PORTS=y | 592 | CONFIG_SERIAL_8250_MANY_PORTS=y |
574 | CONFIG_SERIAL_8250_SHARE_IRQ=y | 593 | CONFIG_SERIAL_8250_SHARE_IRQ=y |
@@ -582,11 +601,10 @@ CONFIG_SERIAL_8250_SHARE_IRQ=y | |||
582 | # | 601 | # |
583 | # Non-8250 serial port support | 602 | # Non-8250 serial port support |
584 | # | 603 | # |
585 | # CONFIG_SERIAL_MUX is not set | 604 | CONFIG_SERIAL_MUX=y |
586 | # CONFIG_PDC_CONSOLE is not set | 605 | CONFIG_SERIAL_MUX_CONSOLE=y |
587 | CONFIG_SERIAL_CORE=y | 606 | CONFIG_SERIAL_CORE=y |
588 | CONFIG_SERIAL_CORE_CONSOLE=y | 607 | CONFIG_SERIAL_CORE_CONSOLE=y |
589 | # CONFIG_SERIAL_JSM is not set | ||
590 | CONFIG_UNIX98_PTYS=y | 608 | CONFIG_UNIX98_PTYS=y |
591 | CONFIG_LEGACY_PTYS=y | 609 | CONFIG_LEGACY_PTYS=y |
592 | CONFIG_LEGACY_PTY_COUNT=256 | 610 | CONFIG_LEGACY_PTY_COUNT=256 |
@@ -626,6 +644,12 @@ CONFIG_GEN_RTC=y | |||
626 | # CONFIG_I2C is not set | 644 | # CONFIG_I2C is not set |
627 | 645 | ||
628 | # | 646 | # |
647 | # SPI support | ||
648 | # | ||
649 | # CONFIG_SPI is not set | ||
650 | # CONFIG_SPI_MASTER is not set | ||
651 | |||
652 | # | ||
629 | # Dallas's 1-wire bus | 653 | # Dallas's 1-wire bus |
630 | # | 654 | # |
631 | # CONFIG_W1 is not set | 655 | # CONFIG_W1 is not set |
@@ -661,7 +685,6 @@ CONFIG_FB=y | |||
661 | CONFIG_FB_CFB_FILLRECT=y | 685 | CONFIG_FB_CFB_FILLRECT=y |
662 | CONFIG_FB_CFB_COPYAREA=y | 686 | CONFIG_FB_CFB_COPYAREA=y |
663 | CONFIG_FB_CFB_IMAGEBLIT=y | 687 | CONFIG_FB_CFB_IMAGEBLIT=y |
664 | CONFIG_FB_SOFT_CURSOR=y | ||
665 | # CONFIG_FB_MACMODES is not set | 688 | # CONFIG_FB_MACMODES is not set |
666 | # CONFIG_FB_MODE_HELPERS is not set | 689 | # CONFIG_FB_MODE_HELPERS is not set |
667 | # CONFIG_FB_TILEBLITTING is not set | 690 | # CONFIG_FB_TILEBLITTING is not set |
@@ -671,6 +694,7 @@ CONFIG_FB_SOFT_CURSOR=y | |||
671 | # CONFIG_FB_ASILIANT is not set | 694 | # CONFIG_FB_ASILIANT is not set |
672 | # CONFIG_FB_IMSTT is not set | 695 | # CONFIG_FB_IMSTT is not set |
673 | CONFIG_FB_STI=y | 696 | CONFIG_FB_STI=y |
697 | # CONFIG_FB_S1D13XXX is not set | ||
674 | # CONFIG_FB_NVIDIA is not set | 698 | # CONFIG_FB_NVIDIA is not set |
675 | # CONFIG_FB_RIVA is not set | 699 | # CONFIG_FB_RIVA is not set |
676 | # CONFIG_FB_MATROX is not set | 700 | # CONFIG_FB_MATROX is not set |
@@ -683,9 +707,7 @@ CONFIG_FB_STI=y | |||
683 | # CONFIG_FB_KYRO is not set | 707 | # CONFIG_FB_KYRO is not set |
684 | # CONFIG_FB_3DFX is not set | 708 | # CONFIG_FB_3DFX is not set |
685 | # CONFIG_FB_VOODOO1 is not set | 709 | # CONFIG_FB_VOODOO1 is not set |
686 | # CONFIG_FB_CYBLA is not set | ||
687 | # CONFIG_FB_TRIDENT is not set | 710 | # CONFIG_FB_TRIDENT is not set |
688 | # CONFIG_FB_S1D13XXX is not set | ||
689 | # CONFIG_FB_VIRTUAL is not set | 711 | # CONFIG_FB_VIRTUAL is not set |
690 | 712 | ||
691 | # | 713 | # |
@@ -695,6 +717,7 @@ CONFIG_DUMMY_CONSOLE=y | |||
695 | CONFIG_DUMMY_CONSOLE_COLUMNS=160 | 717 | CONFIG_DUMMY_CONSOLE_COLUMNS=160 |
696 | CONFIG_DUMMY_CONSOLE_ROWS=64 | 718 | CONFIG_DUMMY_CONSOLE_ROWS=64 |
697 | CONFIG_FRAMEBUFFER_CONSOLE=y | 719 | CONFIG_FRAMEBUFFER_CONSOLE=y |
720 | # CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set | ||
698 | CONFIG_STI_CONSOLE=y | 721 | CONFIG_STI_CONSOLE=y |
699 | # CONFIG_FONTS is not set | 722 | # CONFIG_FONTS is not set |
700 | CONFIG_FONT_8x8=y | 723 | CONFIG_FONT_8x8=y |
@@ -713,7 +736,85 @@ CONFIG_LOGO_PARISC_CLUT224=y | |||
713 | # | 736 | # |
714 | # Sound | 737 | # Sound |
715 | # | 738 | # |
716 | # CONFIG_SOUND is not set | 739 | CONFIG_SOUND=y |
740 | |||
741 | # | ||
742 | # Advanced Linux Sound Architecture | ||
743 | # | ||
744 | CONFIG_SND=y | ||
745 | CONFIG_SND_TIMER=y | ||
746 | CONFIG_SND_PCM=y | ||
747 | CONFIG_SND_SEQUENCER=y | ||
748 | # CONFIG_SND_SEQ_DUMMY is not set | ||
749 | CONFIG_SND_OSSEMUL=y | ||
750 | CONFIG_SND_MIXER_OSS=y | ||
751 | CONFIG_SND_PCM_OSS=y | ||
752 | CONFIG_SND_SEQUENCER_OSS=y | ||
753 | CONFIG_SND_SUPPORT_OLD_API=y | ||
754 | # CONFIG_SND_VERBOSE_PRINTK is not set | ||
755 | # CONFIG_SND_DEBUG is not set | ||
756 | |||
757 | # | ||
758 | # Generic devices | ||
759 | # | ||
760 | # CONFIG_SND_DUMMY is not set | ||
761 | # CONFIG_SND_VIRMIDI is not set | ||
762 | # CONFIG_SND_MTPAV is not set | ||
763 | # CONFIG_SND_SERIAL_U16550 is not set | ||
764 | # CONFIG_SND_MPU401 is not set | ||
765 | |||
766 | # | ||
767 | # PCI devices | ||
768 | # | ||
769 | # CONFIG_SND_AD1889 is not set | ||
770 | # CONFIG_SND_ALI5451 is not set | ||
771 | # CONFIG_SND_ATIIXP is not set | ||
772 | # CONFIG_SND_ATIIXP_MODEM is not set | ||
773 | # CONFIG_SND_AU8810 is not set | ||
774 | # CONFIG_SND_AU8820 is not set | ||
775 | # CONFIG_SND_AU8830 is not set | ||
776 | # CONFIG_SND_BT87X is not set | ||
777 | # CONFIG_SND_CA0106 is not set | ||
778 | # CONFIG_SND_CMIPCI is not set | ||
779 | # CONFIG_SND_CS4281 is not set | ||
780 | # CONFIG_SND_CS46XX is not set | ||
781 | # CONFIG_SND_EMU10K1 is not set | ||
782 | # CONFIG_SND_EMU10K1X is not set | ||
783 | # CONFIG_SND_ENS1370 is not set | ||
784 | # CONFIG_SND_ENS1371 is not set | ||
785 | # CONFIG_SND_ES1938 is not set | ||
786 | # CONFIG_SND_ES1968 is not set | ||
787 | # CONFIG_SND_FM801 is not set | ||
788 | # CONFIG_SND_HDA_INTEL is not set | ||
789 | # CONFIG_SND_HDSP is not set | ||
790 | # CONFIG_SND_HDSPM is not set | ||
791 | # CONFIG_SND_ICE1712 is not set | ||
792 | # CONFIG_SND_ICE1724 is not set | ||
793 | # CONFIG_SND_INTEL8X0 is not set | ||
794 | # CONFIG_SND_KORG1212 is not set | ||
795 | # CONFIG_SND_MAESTRO3 is not set | ||
796 | # CONFIG_SND_MIXART is not set | ||
797 | # CONFIG_SND_NM256 is not set | ||
798 | # CONFIG_SND_PCXHR is not set | ||
799 | # CONFIG_SND_RME32 is not set | ||
800 | # CONFIG_SND_RME96 is not set | ||
801 | # CONFIG_SND_RME9652 is not set | ||
802 | # CONFIG_SND_SONICVIBES is not set | ||
803 | # CONFIG_SND_TRIDENT is not set | ||
804 | # CONFIG_SND_VIA82XX is not set | ||
805 | # CONFIG_SND_VIA82XX_MODEM is not set | ||
806 | # CONFIG_SND_VX222 is not set | ||
807 | # CONFIG_SND_YMFPCI is not set | ||
808 | |||
809 | # | ||
810 | # GSC devices | ||
811 | # | ||
812 | CONFIG_SND_HARMONY=y | ||
813 | |||
814 | # | ||
815 | # Open Sound System | ||
816 | # | ||
817 | # CONFIG_SOUND_PRIME is not set | ||
717 | 818 | ||
718 | # | 819 | # |
719 | # USB support | 820 | # USB support |
@@ -723,6 +824,10 @@ CONFIG_USB_ARCH_HAS_OHCI=y | |||
723 | # CONFIG_USB is not set | 824 | # CONFIG_USB is not set |
724 | 825 | ||
725 | # | 826 | # |
827 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | ||
828 | # | ||
829 | |||
830 | # | ||
726 | # USB Gadget Support | 831 | # USB Gadget Support |
727 | # | 832 | # |
728 | # CONFIG_USB_GADGET is not set | 833 | # CONFIG_USB_GADGET is not set |
@@ -877,18 +982,23 @@ CONFIG_NLS_DEFAULT="iso8859-1" | |||
877 | # Kernel hacking | 982 | # Kernel hacking |
878 | # | 983 | # |
879 | # CONFIG_PRINTK_TIME is not set | 984 | # CONFIG_PRINTK_TIME is not set |
880 | CONFIG_DEBUG_KERNEL=y | ||
881 | CONFIG_MAGIC_SYSRQ=y | 985 | CONFIG_MAGIC_SYSRQ=y |
986 | CONFIG_DEBUG_KERNEL=y | ||
882 | CONFIG_LOG_BUF_SHIFT=16 | 987 | CONFIG_LOG_BUF_SHIFT=16 |
883 | CONFIG_DETECT_SOFTLOCKUP=y | 988 | CONFIG_DETECT_SOFTLOCKUP=y |
884 | # CONFIG_SCHEDSTATS is not set | 989 | # CONFIG_SCHEDSTATS is not set |
885 | # CONFIG_DEBUG_SLAB is not set | 990 | # CONFIG_DEBUG_SLAB is not set |
991 | # CONFIG_DEBUG_MUTEXES is not set | ||
886 | # CONFIG_DEBUG_SPINLOCK is not set | 992 | # CONFIG_DEBUG_SPINLOCK is not set |
887 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | 993 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set |
888 | # CONFIG_DEBUG_KOBJECT is not set | 994 | # CONFIG_DEBUG_KOBJECT is not set |
889 | # CONFIG_DEBUG_INFO is not set | 995 | # CONFIG_DEBUG_INFO is not set |
890 | # CONFIG_DEBUG_IOREMAP is not set | 996 | # CONFIG_DEBUG_IOREMAP is not set |
891 | # CONFIG_DEBUG_FS is not set | 997 | # CONFIG_DEBUG_FS is not set |
998 | # CONFIG_DEBUG_VM is not set | ||
999 | CONFIG_FORCED_INLINING=y | ||
1000 | # CONFIG_RCU_TORTURE_TEST is not set | ||
1001 | # CONFIG_DEBUG_RODATA is not set | ||
892 | 1002 | ||
893 | # | 1003 | # |
894 | # Security options | 1004 | # Security options |
diff --git a/arch/parisc/hpux/entry_hpux.S b/arch/parisc/hpux/entry_hpux.S index fa9bf38787e7..31c8cccfba31 100644 --- a/arch/parisc/hpux/entry_hpux.S +++ b/arch/parisc/hpux/entry_hpux.S | |||
@@ -22,10 +22,9 @@ | |||
22 | #include <linux/linkage.h> | 22 | #include <linux/linkage.h> |
23 | #include <asm/unistd.h> | 23 | #include <asm/unistd.h> |
24 | 24 | ||
25 | .text | ||
26 | |||
27 | #define ENTRY_NAME(_name_) .word _name_ | 25 | #define ENTRY_NAME(_name_) .word _name_ |
28 | 26 | ||
27 | .section .rodata,"a" | ||
29 | .align 4 | 28 | .align 4 |
30 | .export hpux_call_table | 29 | .export hpux_call_table |
31 | .import hpux_unimplemented_wrapper | 30 | .import hpux_unimplemented_wrapper |
diff --git a/arch/parisc/hpux/sys_hpux.c b/arch/parisc/hpux/sys_hpux.c index 29b4d61898f2..05273ccced0e 100644 --- a/arch/parisc/hpux/sys_hpux.c +++ b/arch/parisc/hpux/sys_hpux.c | |||
@@ -468,19 +468,23 @@ int hpux_sysfs(int opcode, unsigned long arg1, unsigned long arg2) | |||
468 | if ( opcode == 1 ) { /* GETFSIND */ | 468 | if ( opcode == 1 ) { /* GETFSIND */ |
469 | len = strlen_user((char *)arg1); | 469 | len = strlen_user((char *)arg1); |
470 | printk(KERN_DEBUG "len of arg1 = %d\n", len); | 470 | printk(KERN_DEBUG "len of arg1 = %d\n", len); |
471 | 471 | if (len == 0) | |
472 | fsname = (char *) kmalloc(len+1, GFP_KERNEL); | 472 | return 0; |
473 | fsname = (char *) kmalloc(len, GFP_KERNEL); | ||
473 | if ( !fsname ) { | 474 | if ( !fsname ) { |
474 | printk(KERN_DEBUG "failed to kmalloc fsname\n"); | 475 | printk(KERN_DEBUG "failed to kmalloc fsname\n"); |
475 | return 0; | 476 | return 0; |
476 | } | 477 | } |
477 | 478 | ||
478 | if ( copy_from_user(fsname, (char *)arg1, len+1) ) { | 479 | if ( copy_from_user(fsname, (char *)arg1, len) ) { |
479 | printk(KERN_DEBUG "failed to copy_from_user fsname\n"); | 480 | printk(KERN_DEBUG "failed to copy_from_user fsname\n"); |
480 | kfree(fsname); | 481 | kfree(fsname); |
481 | return 0; | 482 | return 0; |
482 | } | 483 | } |
483 | 484 | ||
485 | /* String could be altered by userspace after strlen_user() */ | ||
486 | fsname[len] = '\0'; | ||
487 | |||
484 | printk(KERN_DEBUG "that is '%s' as (char *)\n", fsname); | 488 | printk(KERN_DEBUG "that is '%s' as (char *)\n", fsname); |
485 | if ( !strcmp(fsname, "hfs") ) { | 489 | if ( !strcmp(fsname, "hfs") ) { |
486 | fstype = 0; | 490 | fstype = 0; |
diff --git a/arch/parisc/kernel/drivers.c b/arch/parisc/kernel/drivers.c index 2d804e2d16d1..3d569a485a1a 100644 --- a/arch/parisc/kernel/drivers.c +++ b/arch/parisc/kernel/drivers.c | |||
@@ -408,11 +408,10 @@ static void setup_bus_id(struct parisc_device *padev) | |||
408 | 408 | ||
409 | struct parisc_device * create_tree_node(char id, struct device *parent) | 409 | struct parisc_device * create_tree_node(char id, struct device *parent) |
410 | { | 410 | { |
411 | struct parisc_device *dev = kmalloc(sizeof(*dev), GFP_KERNEL); | 411 | struct parisc_device *dev = kzalloc(sizeof(*dev), GFP_KERNEL); |
412 | if (!dev) | 412 | if (!dev) |
413 | return NULL; | 413 | return NULL; |
414 | 414 | ||
415 | memset(dev, 0, sizeof(*dev)); | ||
416 | dev->hw_path = id; | 415 | dev->hw_path = id; |
417 | dev->id.hw_type = HPHW_FAULTY; | 416 | dev->id.hw_type = HPHW_FAULTY; |
418 | 417 | ||
diff --git a/arch/parisc/kernel/parisc_ksyms.c b/arch/parisc/kernel/parisc_ksyms.c index f40a777dd388..1d00c365f2b1 100644 --- a/arch/parisc/kernel/parisc_ksyms.c +++ b/arch/parisc/kernel/parisc_ksyms.c | |||
@@ -48,9 +48,6 @@ EXPORT_SYMBOL(strrchr); | |||
48 | EXPORT_SYMBOL(strstr); | 48 | EXPORT_SYMBOL(strstr); |
49 | EXPORT_SYMBOL(strpbrk); | 49 | EXPORT_SYMBOL(strpbrk); |
50 | 50 | ||
51 | #include <linux/pm.h> | ||
52 | EXPORT_SYMBOL(pm_power_off); | ||
53 | |||
54 | #include <asm/atomic.h> | 51 | #include <asm/atomic.h> |
55 | EXPORT_SYMBOL(__xchg8); | 52 | EXPORT_SYMBOL(__xchg8); |
56 | EXPORT_SYMBOL(__xchg32); | 53 | EXPORT_SYMBOL(__xchg32); |
diff --git a/arch/parisc/kernel/pci.c b/arch/parisc/kernel/pci.c index 88cba49c5301..79c7db2705fd 100644 --- a/arch/parisc/kernel/pci.c +++ b/arch/parisc/kernel/pci.c | |||
@@ -47,18 +47,17 @@ | |||
47 | * this makes the boot time much longer than necessary. | 47 | * this makes the boot time much longer than necessary. |
48 | * 20ms seems to work for all the HP PCI implementations to date. | 48 | * 20ms seems to work for all the HP PCI implementations to date. |
49 | * | 49 | * |
50 | * XXX: turn into a #defined constant in <asm/pci.h> ? | 50 | * #define pci_post_reset_delay 50 |
51 | */ | 51 | */ |
52 | int pci_post_reset_delay = 50; | ||
53 | 52 | ||
54 | struct pci_port_ops *pci_port; | 53 | struct pci_port_ops *pci_port __read_mostly; |
55 | struct pci_bios_ops *pci_bios; | 54 | struct pci_bios_ops *pci_bios __read_mostly; |
56 | 55 | ||
57 | int pci_hba_count = 0; | 56 | static int pci_hba_count __read_mostly; |
58 | 57 | ||
59 | /* parisc_pci_hba used by pci_port->in/out() ops to lookup bus data. */ | 58 | /* parisc_pci_hba used by pci_port->in/out() ops to lookup bus data. */ |
60 | #define PCI_HBA_MAX 32 | 59 | #define PCI_HBA_MAX 32 |
61 | struct pci_hba_data *parisc_pci_hba[PCI_HBA_MAX]; | 60 | static struct pci_hba_data *parisc_pci_hba[PCI_HBA_MAX] __read_mostly; |
62 | 61 | ||
63 | 62 | ||
64 | /******************************************************************** | 63 | /******************************************************************** |
@@ -259,8 +258,10 @@ void __devinit pcibios_resource_to_bus(struct pci_dev *dev, | |||
259 | void pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res, | 258 | void pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res, |
260 | struct pci_bus_region *region) | 259 | struct pci_bus_region *region) |
261 | { | 260 | { |
261 | #ifdef CONFIG_64BIT | ||
262 | struct pci_bus *bus = dev->bus; | 262 | struct pci_bus *bus = dev->bus; |
263 | struct pci_hba_data *hba = HBA_DATA(bus->bridge->platform_data); | 263 | struct pci_hba_data *hba = HBA_DATA(bus->bridge->platform_data); |
264 | #endif | ||
264 | 265 | ||
265 | if (res->flags & IORESOURCE_MEM) { | 266 | if (res->flags & IORESOURCE_MEM) { |
266 | res->start = PCI_HOST_ADDR(hba, region->start); | 267 | res->start = PCI_HOST_ADDR(hba, region->start); |
diff --git a/arch/parisc/kernel/perf.c b/arch/parisc/kernel/perf.c index 11d406cd0b3e..53f861c82f93 100644 --- a/arch/parisc/kernel/perf.c +++ b/arch/parisc/kernel/perf.c | |||
@@ -68,20 +68,20 @@ struct rdr_tbl_ent { | |||
68 | }; | 68 | }; |
69 | 69 | ||
70 | static int perf_processor_interface __read_mostly = UNKNOWN_INTF; | 70 | static int perf_processor_interface __read_mostly = UNKNOWN_INTF; |
71 | static int perf_enabled __read_mostly = 0; | 71 | static int perf_enabled __read_mostly; |
72 | static spinlock_t perf_lock; | 72 | static spinlock_t perf_lock; |
73 | struct parisc_device *cpu_device __read_mostly = NULL; | 73 | struct parisc_device *cpu_device __read_mostly; |
74 | 74 | ||
75 | /* RDRs to write for PCX-W */ | 75 | /* RDRs to write for PCX-W */ |
76 | static int perf_rdrs_W[] = | 76 | static const int perf_rdrs_W[] = |
77 | { 0, 1, 4, 5, 6, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, -1 }; | 77 | { 0, 1, 4, 5, 6, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, -1 }; |
78 | 78 | ||
79 | /* RDRs to write for PCX-U */ | 79 | /* RDRs to write for PCX-U */ |
80 | static int perf_rdrs_U[] = | 80 | static const int perf_rdrs_U[] = |
81 | { 0, 1, 4, 5, 6, 7, 16, 17, 18, 20, 21, 22, 23, 24, 25, -1 }; | 81 | { 0, 1, 4, 5, 6, 7, 16, 17, 18, 20, 21, 22, 23, 24, 25, -1 }; |
82 | 82 | ||
83 | /* RDR register descriptions for PCX-W */ | 83 | /* RDR register descriptions for PCX-W */ |
84 | static struct rdr_tbl_ent perf_rdr_tbl_W[] = { | 84 | static const struct rdr_tbl_ent perf_rdr_tbl_W[] = { |
85 | { 19, 1, 8 }, /* RDR 0 */ | 85 | { 19, 1, 8 }, /* RDR 0 */ |
86 | { 16, 1, 16 }, /* RDR 1 */ | 86 | { 16, 1, 16 }, /* RDR 1 */ |
87 | { 72, 2, 0 }, /* RDR 2 */ | 87 | { 72, 2, 0 }, /* RDR 2 */ |
@@ -117,7 +117,7 @@ static struct rdr_tbl_ent perf_rdr_tbl_W[] = { | |||
117 | }; | 117 | }; |
118 | 118 | ||
119 | /* RDR register descriptions for PCX-U */ | 119 | /* RDR register descriptions for PCX-U */ |
120 | static struct rdr_tbl_ent perf_rdr_tbl_U[] = { | 120 | static const struct rdr_tbl_ent perf_rdr_tbl_U[] = { |
121 | { 19, 1, 8 }, /* RDR 0 */ | 121 | { 19, 1, 8 }, /* RDR 0 */ |
122 | { 32, 1, 16 }, /* RDR 1 */ | 122 | { 32, 1, 16 }, /* RDR 1 */ |
123 | { 20, 1, 0 }, /* RDR 2 */ | 123 | { 20, 1, 0 }, /* RDR 2 */ |
@@ -156,7 +156,7 @@ static struct rdr_tbl_ent perf_rdr_tbl_U[] = { | |||
156 | * A non-zero write_control in the above tables is a byte offset into | 156 | * A non-zero write_control in the above tables is a byte offset into |
157 | * this array. | 157 | * this array. |
158 | */ | 158 | */ |
159 | static uint64_t perf_bitmasks[] = { | 159 | static const uint64_t perf_bitmasks[] = { |
160 | 0x0000000000000000ul, /* first dbl word must be zero */ | 160 | 0x0000000000000000ul, /* first dbl word must be zero */ |
161 | 0xfdffe00000000000ul, /* RDR0 bitmask */ | 161 | 0xfdffe00000000000ul, /* RDR0 bitmask */ |
162 | 0x003f000000000000ul, /* RDR1 bitmask */ | 162 | 0x003f000000000000ul, /* RDR1 bitmask */ |
@@ -173,7 +173,7 @@ static uint64_t perf_bitmasks[] = { | |||
173 | * Write control bitmasks for Pa-8700 processor given | 173 | * Write control bitmasks for Pa-8700 processor given |
174 | * somethings have changed slightly. | 174 | * somethings have changed slightly. |
175 | */ | 175 | */ |
176 | static uint64_t perf_bitmasks_piranha[] = { | 176 | static const uint64_t perf_bitmasks_piranha[] = { |
177 | 0x0000000000000000ul, /* first dbl word must be zero */ | 177 | 0x0000000000000000ul, /* first dbl word must be zero */ |
178 | 0xfdffe00000000000ul, /* RDR0 bitmask */ | 178 | 0xfdffe00000000000ul, /* RDR0 bitmask */ |
179 | 0x003f000000000000ul, /* RDR1 bitmask */ | 179 | 0x003f000000000000ul, /* RDR1 bitmask */ |
@@ -186,7 +186,7 @@ static uint64_t perf_bitmasks_piranha[] = { | |||
186 | 0xfffc000000000000ul | 186 | 0xfffc000000000000ul |
187 | }; | 187 | }; |
188 | 188 | ||
189 | static uint64_t *bitmask_array; /* array of bitmasks to use */ | 189 | static const uint64_t *bitmask_array; /* array of bitmasks to use */ |
190 | 190 | ||
191 | /****************************************************************************** | 191 | /****************************************************************************** |
192 | * Function Prototypes | 192 | * Function Prototypes |
@@ -200,7 +200,7 @@ static ssize_t perf_write(struct file *file, const char __user *buf, size_t coun | |||
200 | static long perf_ioctl(struct file *file, unsigned int cmd, unsigned long arg); | 200 | static long perf_ioctl(struct file *file, unsigned int cmd, unsigned long arg); |
201 | static void perf_start_counters(void); | 201 | static void perf_start_counters(void); |
202 | static int perf_stop_counters(uint32_t *raddr); | 202 | static int perf_stop_counters(uint32_t *raddr); |
203 | static struct rdr_tbl_ent * perf_rdr_get_entry(uint32_t rdr_num); | 203 | static const struct rdr_tbl_ent * perf_rdr_get_entry(uint32_t rdr_num); |
204 | static int perf_rdr_read_ubuf(uint32_t rdr_num, uint64_t *buffer); | 204 | static int perf_rdr_read_ubuf(uint32_t rdr_num, uint64_t *buffer); |
205 | static int perf_rdr_clear(uint32_t rdr_num); | 205 | static int perf_rdr_clear(uint32_t rdr_num); |
206 | static int perf_write_image(uint64_t *memaddr); | 206 | static int perf_write_image(uint64_t *memaddr); |
@@ -444,7 +444,6 @@ static long perf_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
444 | uint32_t raddr[4]; | 444 | uint32_t raddr[4]; |
445 | int error = 0; | 445 | int error = 0; |
446 | 446 | ||
447 | lock_kernel(); | ||
448 | switch (cmd) { | 447 | switch (cmd) { |
449 | 448 | ||
450 | case PA_PERF_ON: | 449 | case PA_PERF_ON: |
@@ -477,8 +476,6 @@ static long perf_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
477 | error = -ENOTTY; | 476 | error = -ENOTTY; |
478 | } | 477 | } |
479 | 478 | ||
480 | unlock_kernel(); | ||
481 | |||
482 | return error; | 479 | return error; |
483 | } | 480 | } |
484 | 481 | ||
@@ -655,7 +652,7 @@ static int perf_stop_counters(uint32_t *raddr) | |||
655 | * Retrieve a pointer to the description of what this | 652 | * Retrieve a pointer to the description of what this |
656 | * RDR contains. | 653 | * RDR contains. |
657 | */ | 654 | */ |
658 | static struct rdr_tbl_ent * perf_rdr_get_entry(uint32_t rdr_num) | 655 | static const struct rdr_tbl_ent * perf_rdr_get_entry(uint32_t rdr_num) |
659 | { | 656 | { |
660 | if (perf_processor_interface == ONYX_INTF) { | 657 | if (perf_processor_interface == ONYX_INTF) { |
661 | return &perf_rdr_tbl_U[rdr_num]; | 658 | return &perf_rdr_tbl_U[rdr_num]; |
@@ -673,7 +670,7 @@ static int perf_rdr_read_ubuf(uint32_t rdr_num, uint64_t *buffer) | |||
673 | { | 670 | { |
674 | uint64_t data, data_mask = 0; | 671 | uint64_t data, data_mask = 0; |
675 | uint32_t width, xbits, i; | 672 | uint32_t width, xbits, i; |
676 | struct rdr_tbl_ent *tentry; | 673 | const struct rdr_tbl_ent *tentry; |
677 | 674 | ||
678 | tentry = perf_rdr_get_entry(rdr_num); | 675 | tentry = perf_rdr_get_entry(rdr_num); |
679 | if ((width = tentry->width) == 0) | 676 | if ((width = tentry->width) == 0) |
@@ -721,7 +718,7 @@ static int perf_rdr_read_ubuf(uint32_t rdr_num, uint64_t *buffer) | |||
721 | */ | 718 | */ |
722 | static int perf_rdr_clear(uint32_t rdr_num) | 719 | static int perf_rdr_clear(uint32_t rdr_num) |
723 | { | 720 | { |
724 | struct rdr_tbl_ent *tentry; | 721 | const struct rdr_tbl_ent *tentry; |
725 | int32_t i; | 722 | int32_t i; |
726 | 723 | ||
727 | tentry = perf_rdr_get_entry(rdr_num); | 724 | tentry = perf_rdr_get_entry(rdr_num); |
@@ -753,10 +750,11 @@ static int perf_write_image(uint64_t *memaddr) | |||
753 | uint64_t buffer[MAX_RDR_WORDS]; | 750 | uint64_t buffer[MAX_RDR_WORDS]; |
754 | uint64_t *bptr; | 751 | uint64_t *bptr; |
755 | uint32_t dwords; | 752 | uint32_t dwords; |
756 | uint32_t *intrigue_rdr; | 753 | const uint32_t *intrigue_rdr; |
757 | uint64_t *intrigue_bitmask, tmp64; | 754 | const uint64_t *intrigue_bitmask; |
755 | uint64_t tmp64; | ||
758 | void __iomem *runway; | 756 | void __iomem *runway; |
759 | struct rdr_tbl_ent *tentry; | 757 | const struct rdr_tbl_ent *tentry; |
760 | int i; | 758 | int i; |
761 | 759 | ||
762 | /* Clear out counters */ | 760 | /* Clear out counters */ |
@@ -830,7 +828,7 @@ static int perf_write_image(uint64_t *memaddr) | |||
830 | */ | 828 | */ |
831 | static void perf_rdr_write(uint32_t rdr_num, uint64_t *buffer) | 829 | static void perf_rdr_write(uint32_t rdr_num, uint64_t *buffer) |
832 | { | 830 | { |
833 | struct rdr_tbl_ent *tentry; | 831 | const struct rdr_tbl_ent *tentry; |
834 | int32_t i; | 832 | int32_t i; |
835 | 833 | ||
836 | printk("perf_rdr_write\n"); | 834 | printk("perf_rdr_write\n"); |
diff --git a/arch/parisc/kernel/perf_images.h b/arch/parisc/kernel/perf_images.h index d9562fe3f75c..7fef9644df47 100644 --- a/arch/parisc/kernel/perf_images.h +++ b/arch/parisc/kernel/perf_images.h | |||
@@ -25,7 +25,7 @@ | |||
25 | 25 | ||
26 | #define PCXU_IMAGE_SIZE 584 | 26 | #define PCXU_IMAGE_SIZE 584 |
27 | 27 | ||
28 | static uint32_t onyx_images[][PCXU_IMAGE_SIZE/sizeof(uint32_t)] = { | 28 | static uint32_t onyx_images[][PCXU_IMAGE_SIZE/sizeof(uint32_t)] __read_mostly = { |
29 | /* | 29 | /* |
30 | * CPI: | 30 | * CPI: |
31 | * | 31 | * |
@@ -2093,7 +2093,7 @@ static uint32_t onyx_images[][PCXU_IMAGE_SIZE/sizeof(uint32_t)] = { | |||
2093 | }; | 2093 | }; |
2094 | #define PCXW_IMAGE_SIZE 576 | 2094 | #define PCXW_IMAGE_SIZE 576 |
2095 | 2095 | ||
2096 | static uint32_t cuda_images[][PCXW_IMAGE_SIZE/sizeof(uint32_t)] = { | 2096 | static uint32_t cuda_images[][PCXW_IMAGE_SIZE/sizeof(uint32_t)] __read_mostly = { |
2097 | /* | 2097 | /* |
2098 | * CPI: FROM CPI.IDF (Image 0) | 2098 | * CPI: FROM CPI.IDF (Image 0) |
2099 | * | 2099 | * |
diff --git a/arch/parisc/kernel/process.c b/arch/parisc/kernel/process.c index 5da41677e70b..e8dea4177113 100644 --- a/arch/parisc/kernel/process.c +++ b/arch/parisc/kernel/process.c | |||
@@ -54,27 +54,6 @@ | |||
54 | #include <asm/uaccess.h> | 54 | #include <asm/uaccess.h> |
55 | #include <asm/unwind.h> | 55 | #include <asm/unwind.h> |
56 | 56 | ||
57 | static int hlt_counter __read_mostly; | ||
58 | |||
59 | /* | ||
60 | * Power off function, if any | ||
61 | */ | ||
62 | void (*pm_power_off)(void); | ||
63 | |||
64 | void disable_hlt(void) | ||
65 | { | ||
66 | hlt_counter++; | ||
67 | } | ||
68 | |||
69 | EXPORT_SYMBOL(disable_hlt); | ||
70 | |||
71 | void enable_hlt(void) | ||
72 | { | ||
73 | hlt_counter--; | ||
74 | } | ||
75 | |||
76 | EXPORT_SYMBOL(enable_hlt); | ||
77 | |||
78 | void default_idle(void) | 57 | void default_idle(void) |
79 | { | 58 | { |
80 | barrier(); | 59 | barrier(); |
@@ -102,12 +81,7 @@ void cpu_idle(void) | |||
102 | } | 81 | } |
103 | 82 | ||
104 | 83 | ||
105 | #ifdef __LP64__ | 84 | #define COMMAND_GLOBAL F_EXTEND(0xfffe0030) |
106 | #define COMMAND_GLOBAL 0xfffffffffffe0030UL | ||
107 | #else | ||
108 | #define COMMAND_GLOBAL 0xfffe0030 | ||
109 | #endif | ||
110 | |||
111 | #define CMD_RESET 5 /* reset any module */ | 85 | #define CMD_RESET 5 /* reset any module */ |
112 | 86 | ||
113 | /* | 87 | /* |
@@ -162,6 +136,7 @@ void machine_halt(void) | |||
162 | */ | 136 | */ |
163 | } | 137 | } |
164 | 138 | ||
139 | void (*chassis_power_off)(void); | ||
165 | 140 | ||
166 | /* | 141 | /* |
167 | * This routine is called from sys_reboot to actually turn off the | 142 | * This routine is called from sys_reboot to actually turn off the |
@@ -170,8 +145,8 @@ void machine_halt(void) | |||
170 | void machine_power_off(void) | 145 | void machine_power_off(void) |
171 | { | 146 | { |
172 | /* If there is a registered power off handler, call it. */ | 147 | /* If there is a registered power off handler, call it. */ |
173 | if(pm_power_off) | 148 | if (chassis_power_off) |
174 | pm_power_off(); | 149 | chassis_power_off(); |
175 | 150 | ||
176 | /* Put the soft power button back under hardware control. | 151 | /* Put the soft power button back under hardware control. |
177 | * If the user had already pressed the power button, the | 152 | * If the user had already pressed the power button, the |
@@ -187,6 +162,8 @@ void machine_power_off(void) | |||
187 | KERN_EMERG "Please power this system off now."); | 162 | KERN_EMERG "Please power this system off now."); |
188 | } | 163 | } |
189 | 164 | ||
165 | void (*pm_power_off)(void) = machine_power_off; | ||
166 | EXPORT_SYMBOL(pm_power_off); | ||
190 | 167 | ||
191 | /* | 168 | /* |
192 | * Create a kernel thread | 169 | * Create a kernel thread |
diff --git a/arch/parisc/kernel/ptrace.c b/arch/parisc/kernel/ptrace.c index 27160e8bf15b..413292f1a4a3 100644 --- a/arch/parisc/kernel/ptrace.c +++ b/arch/parisc/kernel/ptrace.c | |||
@@ -91,7 +91,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
91 | int copied; | 91 | int copied; |
92 | 92 | ||
93 | #ifdef __LP64__ | 93 | #ifdef __LP64__ |
94 | if (is_compat_task(child)) { | 94 | if (personality(child->personality) == PER_LINUX32) { |
95 | unsigned int tmp; | 95 | unsigned int tmp; |
96 | 96 | ||
97 | addr &= 0xffffffffL; | 97 | addr &= 0xffffffffL; |
@@ -123,7 +123,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
123 | case PTRACE_POKEDATA: | 123 | case PTRACE_POKEDATA: |
124 | ret = 0; | 124 | ret = 0; |
125 | #ifdef __LP64__ | 125 | #ifdef __LP64__ |
126 | if (is_compat_task(child)) { | 126 | if (personality(child->personality) == PER_LINUX32) { |
127 | unsigned int tmp = (unsigned int)data; | 127 | unsigned int tmp = (unsigned int)data; |
128 | DBG("sys_ptrace(POKE%s, %d, %lx, %lx)\n", | 128 | DBG("sys_ptrace(POKE%s, %d, %lx, %lx)\n", |
129 | request == PTRACE_POKETEXT ? "TEXT" : "DATA", | 129 | request == PTRACE_POKETEXT ? "TEXT" : "DATA", |
@@ -146,7 +146,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
146 | case PTRACE_PEEKUSR: { | 146 | case PTRACE_PEEKUSR: { |
147 | ret = -EIO; | 147 | ret = -EIO; |
148 | #ifdef __LP64__ | 148 | #ifdef __LP64__ |
149 | if (is_compat_task(child)) { | 149 | if (personality(child->personality) == PER_LINUX32) { |
150 | unsigned int tmp; | 150 | unsigned int tmp; |
151 | 151 | ||
152 | if (addr & (sizeof(int)-1)) | 152 | if (addr & (sizeof(int)-1)) |
@@ -205,7 +205,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
205 | goto out_tsk; | 205 | goto out_tsk; |
206 | } | 206 | } |
207 | #ifdef __LP64__ | 207 | #ifdef __LP64__ |
208 | if (is_compat_task(child)) { | 208 | if (personality(child->personality) == PER_LINUX32) { |
209 | if (addr & (sizeof(int)-1)) | 209 | if (addr & (sizeof(int)-1)) |
210 | goto out_tsk; | 210 | goto out_tsk; |
211 | if ((addr = translate_usr_offset(addr)) < 0) | 211 | if ((addr = translate_usr_offset(addr)) < 0) |
diff --git a/arch/parisc/kernel/signal.c b/arch/parisc/kernel/signal.c index 3a25a7bd673e..05767e83cf2d 100644 --- a/arch/parisc/kernel/signal.c +++ b/arch/parisc/kernel/signal.c | |||
@@ -317,7 +317,7 @@ setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, | |||
317 | 317 | ||
318 | if(personality(current->personality) == PER_LINUX32) { | 318 | if(personality(current->personality) == PER_LINUX32) { |
319 | DBG(1,"setup_rt_frame: frame->info = 0x%p\n", &compat_frame->info); | 319 | DBG(1,"setup_rt_frame: frame->info = 0x%p\n", &compat_frame->info); |
320 | err |= compat_copy_siginfo_to_user(&compat_frame->info, info); | 320 | err |= copy_siginfo_to_user32(&compat_frame->info, info); |
321 | DBG(1,"SETUP_RT_FRAME: 1\n"); | 321 | DBG(1,"SETUP_RT_FRAME: 1\n"); |
322 | compat_val = (compat_int_t)current->sas_ss_sp; | 322 | compat_val = (compat_int_t)current->sas_ss_sp; |
323 | err |= __put_user(compat_val, &compat_frame->uc.uc_stack.ss_sp); | 323 | err |= __put_user(compat_val, &compat_frame->uc.uc_stack.ss_sp); |
diff --git a/arch/parisc/kernel/signal32.c b/arch/parisc/kernel/signal32.c index 0792e20efef3..a6b4231cafa1 100644 --- a/arch/parisc/kernel/signal32.c +++ b/arch/parisc/kernel/signal32.c | |||
@@ -31,7 +31,6 @@ | |||
31 | #include <linux/types.h> | 31 | #include <linux/types.h> |
32 | #include <linux/errno.h> | 32 | #include <linux/errno.h> |
33 | 33 | ||
34 | #include <asm/compat_signal.h> | ||
35 | #include <asm/uaccess.h> | 34 | #include <asm/uaccess.h> |
36 | 35 | ||
37 | #include "signal32.h" | 36 | #include "signal32.h" |
@@ -398,3 +397,104 @@ setup_sigcontext32(struct compat_sigcontext __user *sc, struct compat_regfile __ | |||
398 | 397 | ||
399 | return err; | 398 | return err; |
400 | } | 399 | } |
400 | |||
401 | int | ||
402 | copy_siginfo_from_user32 (siginfo_t *to, compat_siginfo_t __user *from) | ||
403 | { | ||
404 | unsigned long tmp; | ||
405 | int err; | ||
406 | |||
407 | if (!access_ok(VERIFY_READ, from, sizeof(compat_siginfo_t))) | ||
408 | return -EFAULT; | ||
409 | |||
410 | err = __get_user(to->si_signo, &from->si_signo); | ||
411 | err |= __get_user(to->si_errno, &from->si_errno); | ||
412 | err |= __get_user(to->si_code, &from->si_code); | ||
413 | |||
414 | if (to->si_code < 0) | ||
415 | err |= __copy_from_user(&to->_sifields._pad, &from->_sifields._pad, SI_PAD_SIZE); | ||
416 | else { | ||
417 | switch (to->si_code >> 16) { | ||
418 | case __SI_CHLD >> 16: | ||
419 | err |= __get_user(to->si_utime, &from->si_utime); | ||
420 | err |= __get_user(to->si_stime, &from->si_stime); | ||
421 | err |= __get_user(to->si_status, &from->si_status); | ||
422 | default: | ||
423 | err |= __get_user(to->si_pid, &from->si_pid); | ||
424 | err |= __get_user(to->si_uid, &from->si_uid); | ||
425 | break; | ||
426 | case __SI_FAULT >> 16: | ||
427 | err |= __get_user(tmp, &from->si_addr); | ||
428 | to->si_addr = (void __user *) tmp; | ||
429 | break; | ||
430 | case __SI_POLL >> 16: | ||
431 | err |= __get_user(to->si_band, &from->si_band); | ||
432 | err |= __get_user(to->si_fd, &from->si_fd); | ||
433 | break; | ||
434 | case __SI_RT >> 16: /* This is not generated by the kernel as of now. */ | ||
435 | case __SI_MESGQ >> 16: | ||
436 | err |= __get_user(to->si_pid, &from->si_pid); | ||
437 | err |= __get_user(to->si_uid, &from->si_uid); | ||
438 | err |= __get_user(to->si_int, &from->si_int); | ||
439 | break; | ||
440 | } | ||
441 | } | ||
442 | return err; | ||
443 | } | ||
444 | |||
445 | int | ||
446 | copy_siginfo_to_user32 (compat_siginfo_t __user *to, siginfo_t *from) | ||
447 | { | ||
448 | unsigned int addr; | ||
449 | int err; | ||
450 | |||
451 | if (!access_ok(VERIFY_WRITE, to, sizeof(compat_siginfo_t))) | ||
452 | return -EFAULT; | ||
453 | |||
454 | /* If you change siginfo_t structure, please be sure | ||
455 | this code is fixed accordingly. | ||
456 | It should never copy any pad contained in the structure | ||
457 | to avoid security leaks, but must copy the generic | ||
458 | 3 ints plus the relevant union member. | ||
459 | This routine must convert siginfo from 64bit to 32bit as well | ||
460 | at the same time. */ | ||
461 | err = __put_user(from->si_signo, &to->si_signo); | ||
462 | err |= __put_user(from->si_errno, &to->si_errno); | ||
463 | err |= __put_user((short)from->si_code, &to->si_code); | ||
464 | if (from->si_code < 0) | ||
465 | err |= __copy_to_user(&to->_sifields._pad, &from->_sifields._pad, SI_PAD_SIZE); | ||
466 | else { | ||
467 | switch (from->si_code >> 16) { | ||
468 | case __SI_CHLD >> 16: | ||
469 | err |= __put_user(from->si_utime, &to->si_utime); | ||
470 | err |= __put_user(from->si_stime, &to->si_stime); | ||
471 | err |= __put_user(from->si_status, &to->si_status); | ||
472 | default: | ||
473 | err |= __put_user(from->si_pid, &to->si_pid); | ||
474 | err |= __put_user(from->si_uid, &to->si_uid); | ||
475 | break; | ||
476 | case __SI_FAULT >> 16: | ||
477 | /* avoid type-checking warnings by copying _pad[0] in lieu of si_addr... */ | ||
478 | err |= __put_user(from->_sifields._pad[0], &to->si_addr); | ||
479 | break; | ||
480 | case __SI_POLL >> 16: | ||
481 | err |= __put_user(from->si_band, &to->si_band); | ||
482 | err |= __put_user(from->si_fd, &to->si_fd); | ||
483 | break; | ||
484 | case __SI_TIMER >> 16: | ||
485 | err |= __put_user(from->si_tid, &to->si_tid); | ||
486 | err |= __put_user(from->si_overrun, &to->si_overrun); | ||
487 | addr = (unsigned long) from->si_ptr; | ||
488 | err |= __put_user(addr, &to->si_ptr); | ||
489 | break; | ||
490 | case __SI_RT >> 16: /* Not generated by the kernel as of now. */ | ||
491 | case __SI_MESGQ >> 16: | ||
492 | err |= __put_user(from->si_uid, &to->si_uid); | ||
493 | err |= __put_user(from->si_pid, &to->si_pid); | ||
494 | addr = (unsigned long) from->si_ptr; | ||
495 | err |= __put_user(addr, &to->si_ptr); | ||
496 | break; | ||
497 | } | ||
498 | } | ||
499 | return err; | ||
500 | } | ||
diff --git a/arch/parisc/kernel/signal32.h b/arch/parisc/kernel/signal32.h index 4d1569e717cc..e39b38a67a87 100644 --- a/arch/parisc/kernel/signal32.h +++ b/arch/parisc/kernel/signal32.h | |||
@@ -20,8 +20,34 @@ | |||
20 | #define _PARISC64_KERNEL_SIGNAL32_H | 20 | #define _PARISC64_KERNEL_SIGNAL32_H |
21 | 21 | ||
22 | #include <linux/compat.h> | 22 | #include <linux/compat.h> |
23 | #include <asm/compat_signal.h> | 23 | |
24 | #include <asm/compat_rt_sigframe.h> | 24 | typedef compat_uptr_t compat_sighandler_t; |
25 | |||
26 | typedef struct compat_sigaltstack { | ||
27 | compat_uptr_t ss_sp; | ||
28 | compat_int_t ss_flags; | ||
29 | compat_size_t ss_size; | ||
30 | } compat_stack_t; | ||
31 | |||
32 | /* Most things should be clean enough to redefine this at will, if care | ||
33 | is taken to make libc match. */ | ||
34 | |||
35 | struct compat_sigaction { | ||
36 | compat_sighandler_t sa_handler; | ||
37 | compat_uint_t sa_flags; | ||
38 | compat_sigset_t sa_mask; /* mask last for extensibility */ | ||
39 | }; | ||
40 | |||
41 | /* 32-bit ucontext as seen from an 64-bit kernel */ | ||
42 | struct compat_ucontext { | ||
43 | compat_uint_t uc_flags; | ||
44 | compat_uptr_t uc_link; | ||
45 | compat_stack_t uc_stack; /* struct compat_sigaltstack (12 bytes)*/ | ||
46 | /* FIXME: Pad out to get uc_mcontext to start at an 8-byte aligned boundary */ | ||
47 | compat_uint_t pad[1]; | ||
48 | struct compat_sigcontext uc_mcontext; | ||
49 | compat_sigset_t uc_sigmask; /* mask last for extensibility */ | ||
50 | }; | ||
25 | 51 | ||
26 | /* ELF32 signal handling */ | 52 | /* ELF32 signal handling */ |
27 | 53 | ||
@@ -29,6 +55,103 @@ struct k_sigaction32 { | |||
29 | struct compat_sigaction sa; | 55 | struct compat_sigaction sa; |
30 | }; | 56 | }; |
31 | 57 | ||
58 | typedef struct compat_siginfo { | ||
59 | int si_signo; | ||
60 | int si_errno; | ||
61 | int si_code; | ||
62 | |||
63 | union { | ||
64 | int _pad[((128/sizeof(int)) - 3)]; | ||
65 | |||
66 | /* kill() */ | ||
67 | struct { | ||
68 | unsigned int _pid; /* sender's pid */ | ||
69 | unsigned int _uid; /* sender's uid */ | ||
70 | } _kill; | ||
71 | |||
72 | /* POSIX.1b timers */ | ||
73 | struct { | ||
74 | compat_timer_t _tid; /* timer id */ | ||
75 | int _overrun; /* overrun count */ | ||
76 | char _pad[sizeof(unsigned int) - sizeof(int)]; | ||
77 | compat_sigval_t _sigval; /* same as below */ | ||
78 | int _sys_private; /* not to be passed to user */ | ||
79 | } _timer; | ||
80 | |||
81 | /* POSIX.1b signals */ | ||
82 | struct { | ||
83 | unsigned int _pid; /* sender's pid */ | ||
84 | unsigned int _uid; /* sender's uid */ | ||
85 | compat_sigval_t _sigval; | ||
86 | } _rt; | ||
87 | |||
88 | /* SIGCHLD */ | ||
89 | struct { | ||
90 | unsigned int _pid; /* which child */ | ||
91 | unsigned int _uid; /* sender's uid */ | ||
92 | int _status; /* exit code */ | ||
93 | compat_clock_t _utime; | ||
94 | compat_clock_t _stime; | ||
95 | } _sigchld; | ||
96 | |||
97 | /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */ | ||
98 | struct { | ||
99 | unsigned int _addr; /* faulting insn/memory ref. */ | ||
100 | } _sigfault; | ||
101 | |||
102 | /* SIGPOLL */ | ||
103 | struct { | ||
104 | int _band; /* POLL_IN, POLL_OUT, POLL_MSG */ | ||
105 | int _fd; | ||
106 | } _sigpoll; | ||
107 | } _sifields; | ||
108 | } compat_siginfo_t; | ||
109 | |||
110 | int copy_siginfo_to_user32 (compat_siginfo_t __user *to, siginfo_t *from); | ||
111 | int copy_siginfo_from_user32 (siginfo_t *to, compat_siginfo_t __user *from); | ||
112 | |||
113 | /* In a deft move of uber-hackery, we decide to carry the top half of all | ||
114 | * 64-bit registers in a non-portable, non-ABI, hidden structure. | ||
115 | * Userspace can read the hidden structure if it *wants* but is never | ||
116 | * guaranteed to be in the same place. Infact the uc_sigmask from the | ||
117 | * ucontext_t structure may push the hidden register file downards | ||
118 | */ | ||
119 | struct compat_regfile { | ||
120 | /* Upper half of all the 64-bit registers that were truncated | ||
121 | on a copy to a 32-bit userspace */ | ||
122 | compat_int_t rf_gr[32]; | ||
123 | compat_int_t rf_iasq[2]; | ||
124 | compat_int_t rf_iaoq[2]; | ||
125 | compat_int_t rf_sar; | ||
126 | }; | ||
127 | |||
128 | #define COMPAT_SIGRETURN_TRAMP 4 | ||
129 | #define COMPAT_SIGRESTARTBLOCK_TRAMP 5 | ||
130 | #define COMPAT_TRAMP_SIZE (COMPAT_SIGRETURN_TRAMP + \ | ||
131 | COMPAT_SIGRESTARTBLOCK_TRAMP) | ||
132 | |||
133 | struct compat_rt_sigframe { | ||
134 | /* XXX: Must match trampoline size in arch/parisc/kernel/signal.c | ||
135 | Secondary to that it must protect the ERESTART_RESTARTBLOCK | ||
136 | trampoline we left on the stack (we were bad and didn't | ||
137 | change sp so we could run really fast.) */ | ||
138 | compat_uint_t tramp[COMPAT_TRAMP_SIZE]; | ||
139 | compat_siginfo_t info; | ||
140 | struct compat_ucontext uc; | ||
141 | /* Hidden location of truncated registers, *must* be last. */ | ||
142 | struct compat_regfile regs; | ||
143 | }; | ||
144 | |||
145 | /* | ||
146 | * The 32-bit ABI wants at least 48 bytes for a function call frame: | ||
147 | * 16 bytes for arg0-arg3, and 32 bytes for magic (the only part of | ||
148 | * which Linux/parisc uses is sp-20 for the saved return pointer...) | ||
149 | * Then, the stack pointer must be rounded to a cache line (64 bytes). | ||
150 | */ | ||
151 | #define SIGFRAME32 64 | ||
152 | #define FUNCTIONCALLFRAME32 48 | ||
153 | #define PARISC_RT_SIGFRAME_SIZE32 (((sizeof(struct compat_rt_sigframe) + FUNCTIONCALLFRAME32) + SIGFRAME32) & -SIGFRAME32) | ||
154 | |||
32 | void sigset_32to64(sigset_t *s64, compat_sigset_t *s32); | 155 | void sigset_32to64(sigset_t *s64, compat_sigset_t *s32); |
33 | void sigset_64to32(compat_sigset_t *s32, sigset_t *s64); | 156 | void sigset_64to32(compat_sigset_t *s32, sigset_t *s64); |
34 | int do_sigaltstack32 (const compat_stack_t __user *uss32, | 157 | int do_sigaltstack32 (const compat_stack_t __user *uss32, |
diff --git a/arch/parisc/kernel/syscall.S b/arch/parisc/kernel/syscall.S index d66163492890..af88afef41bd 100644 --- a/arch/parisc/kernel/syscall.S +++ b/arch/parisc/kernel/syscall.S | |||
@@ -650,6 +650,8 @@ end_linux_gateway_page: | |||
650 | #define LWS_ENTRY(_name_) .word (lws_##_name_ - linux_gateway_page) | 650 | #define LWS_ENTRY(_name_) .word (lws_##_name_ - linux_gateway_page) |
651 | #endif | 651 | #endif |
652 | 652 | ||
653 | .section .rodata,"a" | ||
654 | |||
653 | .align 4096 | 655 | .align 4096 |
654 | /* Light-weight-syscall table */ | 656 | /* Light-weight-syscall table */ |
655 | /* Start of lws table. */ | 657 | /* Start of lws table. */ |
diff --git a/arch/parisc/kernel/syscall_table.S b/arch/parisc/kernel/syscall_table.S index 32cbc0489324..71011eadb872 100644 --- a/arch/parisc/kernel/syscall_table.S +++ b/arch/parisc/kernel/syscall_table.S | |||
@@ -374,5 +374,24 @@ | |||
374 | ENTRY_SAME(keyctl) | 374 | ENTRY_SAME(keyctl) |
375 | ENTRY_SAME(ioprio_set) | 375 | ENTRY_SAME(ioprio_set) |
376 | ENTRY_SAME(ioprio_get) | 376 | ENTRY_SAME(ioprio_get) |
377 | ENTRY_SAME(inotify_init) | ||
378 | ENTRY_SAME(inotify_add_watch) /* 270 */ | ||
379 | ENTRY_SAME(inotify_rm_watch) | ||
380 | ENTRY_SAME(ni_syscall) /* 271 ENTRY_COMP(pselect6) */ | ||
381 | ENTRY_SAME(ni_syscall) /* 272 ENTRY_COMP(ppoll) */ | ||
382 | ENTRY_SAME(migrate_pages) | ||
383 | ENTRY_COMP(openat) /* 275 */ | ||
384 | ENTRY_SAME(mkdirat) | ||
385 | ENTRY_SAME(mknodat) | ||
386 | ENTRY_SAME(fchownat) | ||
387 | ENTRY_COMP(futimesat) | ||
388 | ENTRY_SAME(fstatat64) /* 280 */ | ||
389 | ENTRY_SAME(unlinkat) | ||
390 | ENTRY_SAME(renameat) | ||
391 | ENTRY_SAME(linkat) | ||
392 | ENTRY_SAME(symlinkat) | ||
393 | ENTRY_SAME(readlinkat) /* 285 */ | ||
394 | ENTRY_SAME(fchmodat) | ||
395 | ENTRY_SAME(faccessat) | ||
377 | /* Nothing yet */ | 396 | /* Nothing yet */ |
378 | 397 | ||
diff --git a/arch/parisc/kernel/traps.c b/arch/parisc/kernel/traps.c index 15914f0235a0..ff200608c851 100644 --- a/arch/parisc/kernel/traps.c +++ b/arch/parisc/kernel/traps.c | |||
@@ -193,10 +193,9 @@ void show_stack(struct task_struct *task, unsigned long *s) | |||
193 | 193 | ||
194 | HERE: | 194 | HERE: |
195 | asm volatile ("copy %%r30, %0" : "=r"(sp)); | 195 | asm volatile ("copy %%r30, %0" : "=r"(sp)); |
196 | r = (struct pt_regs *)kmalloc(sizeof(struct pt_regs), GFP_KERNEL); | 196 | r = kzalloc(sizeof(struct pt_regs), GFP_KERNEL); |
197 | if (!r) | 197 | if (!r) |
198 | return; | 198 | return; |
199 | memset(r, 0, sizeof(struct pt_regs)); | ||
200 | r->iaoq[0] = (unsigned long)&&HERE; | 199 | r->iaoq[0] = (unsigned long)&&HERE; |
201 | r->gr[2] = (unsigned long)__builtin_return_address(0); | 200 | r->gr[2] = (unsigned long)__builtin_return_address(0); |
202 | r->gr[30] = sp; | 201 | r->gr[30] = sp; |
diff --git a/arch/parisc/math-emu/decode_exc.c b/arch/parisc/math-emu/decode_exc.c index f84f2586672b..66c8a9f6a27e 100644 --- a/arch/parisc/math-emu/decode_exc.c +++ b/arch/parisc/math-emu/decode_exc.c | |||
@@ -337,6 +337,7 @@ decode_fpu(unsigned int Fpu_register[], unsigned int trap_counts[]) | |||
337 | } | 337 | } |
338 | break; | 338 | break; |
339 | case INVALIDEXCEPTION: | 339 | case INVALIDEXCEPTION: |
340 | case OPC_2E_INVALIDEXCEPTION: | ||
340 | update_trap_counts(Fpu_register, aflags, bflags, trap_counts); | 341 | update_trap_counts(Fpu_register, aflags, bflags, trap_counts); |
341 | return SIGNALCODE(SIGFPE, FPE_FLTINV); | 342 | return SIGNALCODE(SIGFPE, FPE_FLTINV); |
342 | case DIVISIONBYZEROEXCEPTION: | 343 | case DIVISIONBYZEROEXCEPTION: |
diff --git a/arch/parisc/mm/init.c b/arch/parisc/mm/init.c index 720287d46e55..7847ca13d6c2 100644 --- a/arch/parisc/mm/init.c +++ b/arch/parisc/mm/init.c | |||
@@ -371,17 +371,11 @@ static void __init setup_bootmem(void) | |||
371 | 371 | ||
372 | void free_initmem(void) | 372 | void free_initmem(void) |
373 | { | 373 | { |
374 | /* FIXME: */ | ||
375 | #if 0 | ||
376 | printk(KERN_INFO "NOT FREEING INITMEM (%dk)\n", | ||
377 | (&__init_end - &__init_begin) >> 10); | ||
378 | return; | ||
379 | #else | ||
380 | unsigned long addr; | 374 | unsigned long addr; |
381 | 375 | ||
382 | printk(KERN_INFO "Freeing unused kernel memory: "); | 376 | printk(KERN_INFO "Freeing unused kernel memory: "); |
383 | 377 | ||
384 | #if 1 | 378 | #ifdef CONFIG_DEBUG_KERNEL |
385 | /* Attempt to catch anyone trying to execute code here | 379 | /* Attempt to catch anyone trying to execute code here |
386 | * by filling the page with BRK insns. | 380 | * by filling the page with BRK insns. |
387 | * | 381 | * |
@@ -414,9 +408,21 @@ void free_initmem(void) | |||
414 | pdc_chassis_send_status(PDC_CHASSIS_DIRECT_BCOMPLETE); | 408 | pdc_chassis_send_status(PDC_CHASSIS_DIRECT_BCOMPLETE); |
415 | 409 | ||
416 | printk("%luk freed\n", (unsigned long)(&__init_end - &__init_begin) >> 10); | 410 | printk("%luk freed\n", (unsigned long)(&__init_end - &__init_begin) >> 10); |
417 | #endif | ||
418 | } | 411 | } |
419 | 412 | ||
413 | |||
414 | #ifdef CONFIG_DEBUG_RODATA | ||
415 | void mark_rodata_ro(void) | ||
416 | { | ||
417 | extern char __start_rodata, __end_rodata; | ||
418 | /* rodata memory was already mapped with KERNEL_RO access rights by | ||
419 | pagetable_init() and map_pages(). No need to do additional stuff here */ | ||
420 | printk (KERN_INFO "Write protecting the kernel read-only data: %luk\n", | ||
421 | (unsigned long)(&__end_rodata - &__start_rodata) >> 10); | ||
422 | } | ||
423 | #endif | ||
424 | |||
425 | |||
420 | /* | 426 | /* |
421 | * Just an arbitrary offset to serve as a "hole" between mapping areas | 427 | * Just an arbitrary offset to serve as a "hole" between mapping areas |
422 | * (between top of physical memory and a potential pcxl dma mapping | 428 | * (between top of physical memory and a potential pcxl dma mapping |
@@ -477,11 +483,6 @@ void __init mem_init(void) | |||
477 | 483 | ||
478 | } | 484 | } |
479 | 485 | ||
480 | int do_check_pgt_cache(int low, int high) | ||
481 | { | ||
482 | return 0; | ||
483 | } | ||
484 | |||
485 | unsigned long *empty_zero_page __read_mostly; | 486 | unsigned long *empty_zero_page __read_mostly; |
486 | 487 | ||
487 | void show_mem(void) | 488 | void show_mem(void) |
@@ -690,7 +691,7 @@ static void __init pagetable_init(void) | |||
690 | 691 | ||
691 | #ifdef CONFIG_BLK_DEV_INITRD | 692 | #ifdef CONFIG_BLK_DEV_INITRD |
692 | if (initrd_end && initrd_end > mem_limit) { | 693 | if (initrd_end && initrd_end > mem_limit) { |
693 | printk("initrd: mapping %08lx-%08lx\n", initrd_start, initrd_end); | 694 | printk(KERN_INFO "initrd: mapping %08lx-%08lx\n", initrd_start, initrd_end); |
694 | map_pages(initrd_start, __pa(initrd_start), | 695 | map_pages(initrd_start, __pa(initrd_start), |
695 | initrd_end - initrd_start, PAGE_KERNEL); | 696 | initrd_end - initrd_start, PAGE_KERNEL); |
696 | } | 697 | } |
@@ -792,8 +793,6 @@ map_hpux_gateway_page(struct task_struct *tsk, struct mm_struct *mm) | |||
792 | EXPORT_SYMBOL(map_hpux_gateway_page); | 793 | EXPORT_SYMBOL(map_hpux_gateway_page); |
793 | #endif | 794 | #endif |
794 | 795 | ||
795 | extern void flush_tlb_all_local(void); | ||
796 | |||
797 | void __init paging_init(void) | 796 | void __init paging_init(void) |
798 | { | 797 | { |
799 | int i; | 798 | int i; |
@@ -802,7 +801,7 @@ void __init paging_init(void) | |||
802 | pagetable_init(); | 801 | pagetable_init(); |
803 | gateway_init(); | 802 | gateway_init(); |
804 | flush_cache_all_local(); /* start with known state */ | 803 | flush_cache_all_local(); /* start with known state */ |
805 | flush_tlb_all_local(); | 804 | flush_tlb_all_local(NULL); |
806 | 805 | ||
807 | for (i = 0; i < npmem_ranges; i++) { | 806 | for (i = 0; i < npmem_ranges; i++) { |
808 | unsigned long zones_size[MAX_NR_ZONES] = { 0, 0, 0 }; | 807 | unsigned long zones_size[MAX_NR_ZONES] = { 0, 0, 0 }; |
@@ -993,7 +992,7 @@ void flush_tlb_all(void) | |||
993 | do_recycle++; | 992 | do_recycle++; |
994 | } | 993 | } |
995 | spin_unlock(&sid_lock); | 994 | spin_unlock(&sid_lock); |
996 | on_each_cpu((void (*)(void *))flush_tlb_all_local, NULL, 1, 1); | 995 | on_each_cpu(flush_tlb_all_local, NULL, 1, 1); |
997 | if (do_recycle) { | 996 | if (do_recycle) { |
998 | spin_lock(&sid_lock); | 997 | spin_lock(&sid_lock); |
999 | recycle_sids(recycle_ndirty,recycle_dirty_array); | 998 | recycle_sids(recycle_ndirty,recycle_dirty_array); |
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index df338c5cc910..dfba81719dec 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig | |||
@@ -83,6 +83,12 @@ config GENERIC_TBSYNC | |||
83 | default y if PPC32 && SMP | 83 | default y if PPC32 && SMP |
84 | default n | 84 | default n |
85 | 85 | ||
86 | config DEFAULT_UIMAGE | ||
87 | bool | ||
88 | help | ||
89 | Used to allow a board to specify it wants a uImage built by default | ||
90 | default n | ||
91 | |||
86 | menu "Processor support" | 92 | menu "Processor support" |
87 | choice | 93 | choice |
88 | prompt "Processor Type" | 94 | prompt "Processor Type" |
@@ -574,7 +580,7 @@ config KEXEC | |||
574 | strongly in flux, so no good recommendation can be made. | 580 | strongly in flux, so no good recommendation can be made. |
575 | 581 | ||
576 | config CRASH_DUMP | 582 | config CRASH_DUMP |
577 | bool "kernel crash dumps (EXPERIMENTAL)" | 583 | bool "Build a kdump crash kernel (EXPERIMENTAL)" |
578 | depends on PPC_MULTIPLATFORM && PPC64 && EXPERIMENTAL | 584 | depends on PPC_MULTIPLATFORM && PPC64 && EXPERIMENTAL |
579 | help | 585 | help |
580 | Build a kernel suitable for use as a kdump capture kernel. | 586 | Build a kernel suitable for use as a kdump capture kernel. |
@@ -957,7 +963,7 @@ source "arch/powerpc/oprofile/Kconfig" | |||
957 | 963 | ||
958 | config KPROBES | 964 | config KPROBES |
959 | bool "Kprobes (EXPERIMENTAL)" | 965 | bool "Kprobes (EXPERIMENTAL)" |
960 | depends on PPC64 | 966 | depends on PPC64 && EXPERIMENTAL && MODULES |
961 | help | 967 | help |
962 | Kprobes allows you to trap at almost any kernel address and | 968 | Kprobes allows you to trap at almost any kernel address and |
963 | execute a callback function. register_kprobe() establishes | 969 | execute a callback function. register_kprobe() establishes |
diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile index 44dd82b791d1..5500ab55d042 100644 --- a/arch/powerpc/Makefile +++ b/arch/powerpc/Makefile | |||
@@ -142,6 +142,7 @@ drivers-$(CONFIG_OPROFILE) += arch/powerpc/oprofile/ | |||
142 | # Default to zImage, override when needed | 142 | # Default to zImage, override when needed |
143 | defaultimage-y := zImage | 143 | defaultimage-y := zImage |
144 | defaultimage-$(CONFIG_PPC_ISERIES) := vmlinux | 144 | defaultimage-$(CONFIG_PPC_ISERIES) := vmlinux |
145 | defaultimage-$(CONFIG_DEFAULT_UIMAGE) := uImage | ||
145 | KBUILD_IMAGE := $(defaultimage-y) | 146 | KBUILD_IMAGE := $(defaultimage-y) |
146 | all: $(KBUILD_IMAGE) | 147 | all: $(KBUILD_IMAGE) |
147 | 148 | ||
@@ -167,6 +168,8 @@ endef | |||
167 | 168 | ||
168 | archclean: | 169 | archclean: |
169 | $(Q)$(MAKE) $(clean)=$(boot) | 170 | $(Q)$(MAKE) $(clean)=$(boot) |
171 | |||
172 | archmrproper: | ||
170 | $(Q)rm -rf arch/$(ARCH)/include | 173 | $(Q)rm -rf arch/$(ARCH)/include |
171 | 174 | ||
172 | archprepare: checkbin | 175 | archprepare: checkbin |
diff --git a/arch/powerpc/boot/crt0.S b/arch/powerpc/boot/crt0.S index e0192c26037b..70e65b13e033 100644 --- a/arch/powerpc/boot/crt0.S +++ b/arch/powerpc/boot/crt0.S | |||
@@ -45,7 +45,8 @@ _zimage_start: | |||
45 | bdnz 2b | 45 | bdnz 2b |
46 | 46 | ||
47 | /* Do a cache flush for our text, in case OF didn't */ | 47 | /* Do a cache flush for our text, in case OF didn't */ |
48 | 3: lis r9,_start@h | 48 | 3: lis r9,_start@ha |
49 | addi r9,r9,_start@l | ||
49 | add r9,r0,r9 | 50 | add r9,r0,r9 |
50 | lis r8,_etext@ha | 51 | lis r8,_etext@ha |
51 | addi r8,r8,_etext@l | 52 | addi r8,r8,_etext@l |
@@ -53,7 +54,7 @@ _zimage_start: | |||
53 | 4: dcbf r0,r9 | 54 | 4: dcbf r0,r9 |
54 | icbi r0,r9 | 55 | icbi r0,r9 |
55 | addi r9,r9,0x20 | 56 | addi r9,r9,0x20 |
56 | cmplwi 0,r9,8 | 57 | cmplw cr0,r9,r8 |
57 | blt 4b | 58 | blt 4b |
58 | sync | 59 | sync |
59 | isync | 60 | isync |
diff --git a/arch/powerpc/configs/cell_defconfig b/arch/powerpc/configs/cell_defconfig index 063b84f2cbea..3c2acab63736 100644 --- a/arch/powerpc/configs/cell_defconfig +++ b/arch/powerpc/configs/cell_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.15-rc5 | 3 | # Linux kernel version: 2.6.16-rc6 |
4 | # Tue Dec 20 15:59:26 2005 | 4 | # Wed Mar 15 16:19:48 2006 |
5 | # | 5 | # |
6 | CONFIG_PPC64=y | 6 | CONFIG_PPC64=y |
7 | CONFIG_64BIT=y | 7 | CONFIG_64BIT=y |
@@ -16,6 +16,10 @@ CONFIG_COMPAT=y | |||
16 | CONFIG_SYSVIPC_COMPAT=y | 16 | CONFIG_SYSVIPC_COMPAT=y |
17 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | 17 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y |
18 | CONFIG_ARCH_MAY_HAVE_PC_FDC=y | 18 | CONFIG_ARCH_MAY_HAVE_PC_FDC=y |
19 | CONFIG_PPC_OF=y | ||
20 | CONFIG_PPC_UDBG_16550=y | ||
21 | # CONFIG_GENERIC_TBSYNC is not set | ||
22 | # CONFIG_DEFAULT_UIMAGE is not set | ||
19 | 23 | ||
20 | # | 24 | # |
21 | # Processor support | 25 | # Processor support |
@@ -33,7 +37,6 @@ CONFIG_NR_CPUS=4 | |||
33 | # Code maturity level options | 37 | # Code maturity level options |
34 | # | 38 | # |
35 | CONFIG_EXPERIMENTAL=y | 39 | CONFIG_EXPERIMENTAL=y |
36 | CONFIG_CLEAN_COMPILE=y | ||
37 | CONFIG_LOCK_KERNEL=y | 40 | CONFIG_LOCK_KERNEL=y |
38 | CONFIG_INIT_ENV_ARG_LIMIT=32 | 41 | CONFIG_INIT_ENV_ARG_LIMIT=32 |
39 | 42 | ||
@@ -48,8 +51,6 @@ CONFIG_SYSVIPC=y | |||
48 | # CONFIG_BSD_PROCESS_ACCT is not set | 51 | # CONFIG_BSD_PROCESS_ACCT is not set |
49 | CONFIG_SYSCTL=y | 52 | CONFIG_SYSCTL=y |
50 | # CONFIG_AUDIT is not set | 53 | # CONFIG_AUDIT is not set |
51 | CONFIG_HOTPLUG=y | ||
52 | CONFIG_KOBJECT_UEVENT=y | ||
53 | # CONFIG_IKCONFIG is not set | 54 | # CONFIG_IKCONFIG is not set |
54 | # CONFIG_CPUSETS is not set | 55 | # CONFIG_CPUSETS is not set |
55 | CONFIG_INITRAMFS_SOURCE="" | 56 | CONFIG_INITRAMFS_SOURCE="" |
@@ -58,8 +59,10 @@ CONFIG_CC_OPTIMIZE_FOR_SIZE=y | |||
58 | CONFIG_KALLSYMS=y | 59 | CONFIG_KALLSYMS=y |
59 | # CONFIG_KALLSYMS_ALL is not set | 60 | # CONFIG_KALLSYMS_ALL is not set |
60 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 61 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
62 | CONFIG_HOTPLUG=y | ||
61 | CONFIG_PRINTK=y | 63 | CONFIG_PRINTK=y |
62 | CONFIG_BUG=y | 64 | CONFIG_BUG=y |
65 | CONFIG_ELF_CORE=y | ||
63 | CONFIG_BASE_FULL=y | 66 | CONFIG_BASE_FULL=y |
64 | CONFIG_FUTEX=y | 67 | CONFIG_FUTEX=y |
65 | CONFIG_EPOLL=y | 68 | CONFIG_EPOLL=y |
@@ -68,8 +71,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0 | |||
68 | CONFIG_CC_ALIGN_LABELS=0 | 71 | CONFIG_CC_ALIGN_LABELS=0 |
69 | CONFIG_CC_ALIGN_LOOPS=0 | 72 | CONFIG_CC_ALIGN_LOOPS=0 |
70 | CONFIG_CC_ALIGN_JUMPS=0 | 73 | CONFIG_CC_ALIGN_JUMPS=0 |
74 | CONFIG_SLAB=y | ||
71 | # CONFIG_TINY_SHMEM is not set | 75 | # CONFIG_TINY_SHMEM is not set |
72 | CONFIG_BASE_SMALL=0 | 76 | CONFIG_BASE_SMALL=0 |
77 | # CONFIG_SLOB is not set | ||
73 | 78 | ||
74 | # | 79 | # |
75 | # Loadable module support | 80 | # Loadable module support |
@@ -111,7 +116,6 @@ CONFIG_PPC_MULTIPLATFORM=y | |||
111 | # CONFIG_PPC_PMAC is not set | 116 | # CONFIG_PPC_PMAC is not set |
112 | # CONFIG_PPC_MAPLE is not set | 117 | # CONFIG_PPC_MAPLE is not set |
113 | CONFIG_PPC_CELL=y | 118 | CONFIG_PPC_CELL=y |
114 | CONFIG_PPC_OF=y | ||
115 | # CONFIG_U3_DART is not set | 119 | # CONFIG_U3_DART is not set |
116 | CONFIG_PPC_RTAS=y | 120 | CONFIG_PPC_RTAS=y |
117 | # CONFIG_RTAS_ERROR_LOGGING is not set | 121 | # CONFIG_RTAS_ERROR_LOGGING is not set |
@@ -120,11 +124,15 @@ CONFIG_RTAS_FLASH=y | |||
120 | CONFIG_MMIO_NVRAM=y | 124 | CONFIG_MMIO_NVRAM=y |
121 | CONFIG_CELL_IIC=y | 125 | CONFIG_CELL_IIC=y |
122 | # CONFIG_PPC_MPC106 is not set | 126 | # CONFIG_PPC_MPC106 is not set |
123 | # CONFIG_GENERIC_TBSYNC is not set | ||
124 | # CONFIG_CPU_FREQ is not set | 127 | # CONFIG_CPU_FREQ is not set |
125 | # CONFIG_WANT_EARLY_SERIAL is not set | 128 | # CONFIG_WANT_EARLY_SERIAL is not set |
126 | 129 | ||
127 | # | 130 | # |
131 | # Cell Broadband Engine options | ||
132 | # | ||
133 | CONFIG_SPU_FS=y | ||
134 | |||
135 | # | ||
128 | # Kernel options | 136 | # Kernel options |
129 | # | 137 | # |
130 | # CONFIG_HZ_100 is not set | 138 | # CONFIG_HZ_100 is not set |
@@ -140,6 +148,7 @@ CONFIG_BINFMT_ELF=y | |||
140 | CONFIG_FORCE_MAX_ZONEORDER=13 | 148 | CONFIG_FORCE_MAX_ZONEORDER=13 |
141 | # CONFIG_IOMMU_VMERGE is not set | 149 | # CONFIG_IOMMU_VMERGE is not set |
142 | CONFIG_KEXEC=y | 150 | CONFIG_KEXEC=y |
151 | # CONFIG_CRASH_DUMP is not set | ||
143 | CONFIG_IRQ_ALL_CPUS=y | 152 | CONFIG_IRQ_ALL_CPUS=y |
144 | # CONFIG_NUMA is not set | 153 | # CONFIG_NUMA is not set |
145 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | 154 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y |
@@ -191,6 +200,7 @@ CONFIG_NET=y | |||
191 | # | 200 | # |
192 | # Networking options | 201 | # Networking options |
193 | # | 202 | # |
203 | # CONFIG_NETDEBUG is not set | ||
194 | CONFIG_PACKET=y | 204 | CONFIG_PACKET=y |
195 | # CONFIG_PACKET_MMAP is not set | 205 | # CONFIG_PACKET_MMAP is not set |
196 | CONFIG_UNIX=y | 206 | CONFIG_UNIX=y |
@@ -234,6 +244,25 @@ CONFIG_NETFILTER=y | |||
234 | # Core Netfilter Configuration | 244 | # Core Netfilter Configuration |
235 | # | 245 | # |
236 | # CONFIG_NETFILTER_NETLINK is not set | 246 | # CONFIG_NETFILTER_NETLINK is not set |
247 | CONFIG_NETFILTER_XTABLES=m | ||
248 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m | ||
249 | CONFIG_NETFILTER_XT_TARGET_MARK=m | ||
250 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | ||
251 | CONFIG_NETFILTER_XT_TARGET_NOTRACK=m | ||
252 | CONFIG_NETFILTER_XT_MATCH_COMMENT=m | ||
253 | CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m | ||
254 | # CONFIG_NETFILTER_XT_MATCH_DCCP is not set | ||
255 | CONFIG_NETFILTER_XT_MATCH_HELPER=m | ||
256 | CONFIG_NETFILTER_XT_MATCH_LENGTH=m | ||
257 | CONFIG_NETFILTER_XT_MATCH_LIMIT=m | ||
258 | CONFIG_NETFILTER_XT_MATCH_MAC=m | ||
259 | CONFIG_NETFILTER_XT_MATCH_MARK=m | ||
260 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m | ||
261 | CONFIG_NETFILTER_XT_MATCH_REALM=m | ||
262 | CONFIG_NETFILTER_XT_MATCH_SCTP=m | ||
263 | CONFIG_NETFILTER_XT_MATCH_STATE=m | ||
264 | CONFIG_NETFILTER_XT_MATCH_STRING=m | ||
265 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m | ||
237 | 266 | ||
238 | # | 267 | # |
239 | # IP: Netfilter Configuration | 268 | # IP: Netfilter Configuration |
@@ -251,37 +280,23 @@ CONFIG_IP_NF_AMANDA=m | |||
251 | # CONFIG_IP_NF_PPTP is not set | 280 | # CONFIG_IP_NF_PPTP is not set |
252 | CONFIG_IP_NF_QUEUE=m | 281 | CONFIG_IP_NF_QUEUE=m |
253 | CONFIG_IP_NF_IPTABLES=m | 282 | CONFIG_IP_NF_IPTABLES=m |
254 | CONFIG_IP_NF_MATCH_LIMIT=m | ||
255 | CONFIG_IP_NF_MATCH_IPRANGE=m | 283 | CONFIG_IP_NF_MATCH_IPRANGE=m |
256 | CONFIG_IP_NF_MATCH_MAC=m | ||
257 | CONFIG_IP_NF_MATCH_PKTTYPE=m | ||
258 | CONFIG_IP_NF_MATCH_MARK=m | ||
259 | CONFIG_IP_NF_MATCH_MULTIPORT=m | 284 | CONFIG_IP_NF_MATCH_MULTIPORT=m |
260 | CONFIG_IP_NF_MATCH_TOS=m | 285 | CONFIG_IP_NF_MATCH_TOS=m |
261 | CONFIG_IP_NF_MATCH_RECENT=m | 286 | CONFIG_IP_NF_MATCH_RECENT=m |
262 | CONFIG_IP_NF_MATCH_ECN=m | 287 | CONFIG_IP_NF_MATCH_ECN=m |
263 | CONFIG_IP_NF_MATCH_DSCP=m | 288 | CONFIG_IP_NF_MATCH_DSCP=m |
264 | CONFIG_IP_NF_MATCH_AH_ESP=m | 289 | CONFIG_IP_NF_MATCH_AH_ESP=m |
265 | CONFIG_IP_NF_MATCH_LENGTH=m | ||
266 | CONFIG_IP_NF_MATCH_TTL=m | 290 | CONFIG_IP_NF_MATCH_TTL=m |
267 | CONFIG_IP_NF_MATCH_TCPMSS=m | ||
268 | CONFIG_IP_NF_MATCH_HELPER=m | ||
269 | CONFIG_IP_NF_MATCH_STATE=m | ||
270 | CONFIG_IP_NF_MATCH_CONNTRACK=m | ||
271 | CONFIG_IP_NF_MATCH_OWNER=m | 291 | CONFIG_IP_NF_MATCH_OWNER=m |
272 | CONFIG_IP_NF_MATCH_ADDRTYPE=m | 292 | CONFIG_IP_NF_MATCH_ADDRTYPE=m |
273 | CONFIG_IP_NF_MATCH_REALM=m | ||
274 | CONFIG_IP_NF_MATCH_SCTP=m | ||
275 | # CONFIG_IP_NF_MATCH_DCCP is not set | ||
276 | CONFIG_IP_NF_MATCH_COMMENT=m | ||
277 | CONFIG_IP_NF_MATCH_HASHLIMIT=m | 293 | CONFIG_IP_NF_MATCH_HASHLIMIT=m |
278 | CONFIG_IP_NF_MATCH_STRING=m | 294 | CONFIG_IP_NF_MATCH_POLICY=m |
279 | CONFIG_IP_NF_FILTER=m | 295 | CONFIG_IP_NF_FILTER=m |
280 | CONFIG_IP_NF_TARGET_REJECT=m | 296 | CONFIG_IP_NF_TARGET_REJECT=m |
281 | CONFIG_IP_NF_TARGET_LOG=m | 297 | CONFIG_IP_NF_TARGET_LOG=m |
282 | CONFIG_IP_NF_TARGET_ULOG=m | 298 | CONFIG_IP_NF_TARGET_ULOG=m |
283 | CONFIG_IP_NF_TARGET_TCPMSS=m | 299 | CONFIG_IP_NF_TARGET_TCPMSS=m |
284 | CONFIG_IP_NF_TARGET_NFQUEUE=m | ||
285 | CONFIG_IP_NF_NAT=m | 300 | CONFIG_IP_NF_NAT=m |
286 | CONFIG_IP_NF_NAT_NEEDED=y | 301 | CONFIG_IP_NF_NAT_NEEDED=y |
287 | CONFIG_IP_NF_TARGET_MASQUERADE=m | 302 | CONFIG_IP_NF_TARGET_MASQUERADE=m |
@@ -297,11 +312,8 @@ CONFIG_IP_NF_MANGLE=m | |||
297 | CONFIG_IP_NF_TARGET_TOS=m | 312 | CONFIG_IP_NF_TARGET_TOS=m |
298 | CONFIG_IP_NF_TARGET_ECN=m | 313 | CONFIG_IP_NF_TARGET_ECN=m |
299 | CONFIG_IP_NF_TARGET_DSCP=m | 314 | CONFIG_IP_NF_TARGET_DSCP=m |
300 | CONFIG_IP_NF_TARGET_MARK=m | ||
301 | CONFIG_IP_NF_TARGET_CLASSIFY=m | ||
302 | CONFIG_IP_NF_TARGET_TTL=m | 315 | CONFIG_IP_NF_TARGET_TTL=m |
303 | CONFIG_IP_NF_RAW=m | 316 | CONFIG_IP_NF_RAW=m |
304 | CONFIG_IP_NF_TARGET_NOTRACK=m | ||
305 | CONFIG_IP_NF_ARPTABLES=m | 317 | CONFIG_IP_NF_ARPTABLES=m |
306 | CONFIG_IP_NF_ARPFILTER=m | 318 | CONFIG_IP_NF_ARPFILTER=m |
307 | CONFIG_IP_NF_ARP_MANGLE=m | 319 | CONFIG_IP_NF_ARP_MANGLE=m |
@@ -311,7 +323,6 @@ CONFIG_IP_NF_ARP_MANGLE=m | |||
311 | # | 323 | # |
312 | # CONFIG_IP6_NF_QUEUE is not set | 324 | # CONFIG_IP6_NF_QUEUE is not set |
313 | # CONFIG_IP6_NF_IPTABLES is not set | 325 | # CONFIG_IP6_NF_IPTABLES is not set |
314 | # CONFIG_IP6_NF_TARGET_NFQUEUE is not set | ||
315 | 326 | ||
316 | # | 327 | # |
317 | # DCCP Configuration (EXPERIMENTAL) | 328 | # DCCP Configuration (EXPERIMENTAL) |
@@ -322,6 +333,11 @@ CONFIG_IP_NF_ARP_MANGLE=m | |||
322 | # SCTP Configuration (EXPERIMENTAL) | 333 | # SCTP Configuration (EXPERIMENTAL) |
323 | # | 334 | # |
324 | # CONFIG_IP_SCTP is not set | 335 | # CONFIG_IP_SCTP is not set |
336 | |||
337 | # | ||
338 | # TIPC Configuration (EXPERIMENTAL) | ||
339 | # | ||
340 | # CONFIG_TIPC is not set | ||
325 | # CONFIG_ATM is not set | 341 | # CONFIG_ATM is not set |
326 | # CONFIG_BRIDGE is not set | 342 | # CONFIG_BRIDGE is not set |
327 | # CONFIG_VLAN_8021Q is not set | 343 | # CONFIG_VLAN_8021Q is not set |
@@ -540,9 +556,11 @@ CONFIG_E1000=m | |||
540 | # CONFIG_R8169 is not set | 556 | # CONFIG_R8169 is not set |
541 | # CONFIG_SIS190 is not set | 557 | # CONFIG_SIS190 is not set |
542 | CONFIG_SKGE=m | 558 | CONFIG_SKGE=m |
559 | # CONFIG_SKY2 is not set | ||
543 | # CONFIG_SK98LIN is not set | 560 | # CONFIG_SK98LIN is not set |
544 | # CONFIG_TIGON3 is not set | 561 | # CONFIG_TIGON3 is not set |
545 | # CONFIG_BNX2 is not set | 562 | # CONFIG_BNX2 is not set |
563 | CONFIG_SPIDER_NET=y | ||
546 | # CONFIG_MV643XX_ETH is not set | 564 | # CONFIG_MV643XX_ETH is not set |
547 | 565 | ||
548 | # | 566 | # |
@@ -628,13 +646,16 @@ CONFIG_VT=y | |||
628 | CONFIG_VT_CONSOLE=y | 646 | CONFIG_VT_CONSOLE=y |
629 | CONFIG_HW_CONSOLE=y | 647 | CONFIG_HW_CONSOLE=y |
630 | CONFIG_SERIAL_NONSTANDARD=y | 648 | CONFIG_SERIAL_NONSTANDARD=y |
649 | # CONFIG_COMPUTONE is not set | ||
631 | # CONFIG_ROCKETPORT is not set | 650 | # CONFIG_ROCKETPORT is not set |
632 | # CONFIG_CYCLADES is not set | 651 | # CONFIG_CYCLADES is not set |
633 | # CONFIG_DIGIEPCA is not set | 652 | # CONFIG_DIGIEPCA is not set |
653 | # CONFIG_MOXA_INTELLIO is not set | ||
634 | # CONFIG_MOXA_SMARTIO is not set | 654 | # CONFIG_MOXA_SMARTIO is not set |
635 | # CONFIG_ISI is not set | 655 | # CONFIG_ISI is not set |
636 | # CONFIG_SYNCLINK is not set | 656 | # CONFIG_SYNCLINK is not set |
637 | # CONFIG_SYNCLINKMP is not set | 657 | # CONFIG_SYNCLINKMP is not set |
658 | # CONFIG_SYNCLINK_GT is not set | ||
638 | # CONFIG_N_HDLC is not set | 659 | # CONFIG_N_HDLC is not set |
639 | # CONFIG_SPECIALIX is not set | 660 | # CONFIG_SPECIALIX is not set |
640 | # CONFIG_SX is not set | 661 | # CONFIG_SX is not set |
@@ -646,6 +667,7 @@ CONFIG_SERIAL_NONSTANDARD=y | |||
646 | CONFIG_SERIAL_8250=y | 667 | CONFIG_SERIAL_8250=y |
647 | CONFIG_SERIAL_8250_CONSOLE=y | 668 | CONFIG_SERIAL_8250_CONSOLE=y |
648 | CONFIG_SERIAL_8250_NR_UARTS=4 | 669 | CONFIG_SERIAL_8250_NR_UARTS=4 |
670 | CONFIG_SERIAL_8250_RUNTIME_UARTS=4 | ||
649 | # CONFIG_SERIAL_8250_EXTENDED is not set | 671 | # CONFIG_SERIAL_8250_EXTENDED is not set |
650 | 672 | ||
651 | # | 673 | # |
@@ -756,6 +778,12 @@ CONFIG_I2C_ALGOBIT=y | |||
756 | # CONFIG_I2C_DEBUG_CHIP is not set | 778 | # CONFIG_I2C_DEBUG_CHIP is not set |
757 | 779 | ||
758 | # | 780 | # |
781 | # SPI support | ||
782 | # | ||
783 | # CONFIG_SPI is not set | ||
784 | # CONFIG_SPI_MASTER is not set | ||
785 | |||
786 | # | ||
759 | # Dallas's 1-wire bus | 787 | # Dallas's 1-wire bus |
760 | # | 788 | # |
761 | # CONFIG_W1 is not set | 789 | # CONFIG_W1 is not set |
@@ -827,7 +855,7 @@ CONFIG_USB_ARCH_HAS_OHCI=y | |||
827 | # CONFIG_INFINIBAND is not set | 855 | # CONFIG_INFINIBAND is not set |
828 | 856 | ||
829 | # | 857 | # |
830 | # SN Devices | 858 | # EDAC - error detection and reporting (RAS) (EXPERIMENTAL) |
831 | # | 859 | # |
832 | 860 | ||
833 | # | 861 | # |
@@ -847,6 +875,7 @@ CONFIG_FS_MBCACHE=y | |||
847 | # CONFIG_JFS_FS is not set | 875 | # CONFIG_JFS_FS is not set |
848 | CONFIG_FS_POSIX_ACL=y | 876 | CONFIG_FS_POSIX_ACL=y |
849 | # CONFIG_XFS_FS is not set | 877 | # CONFIG_XFS_FS is not set |
878 | # CONFIG_OCFS2_FS is not set | ||
850 | # CONFIG_MINIX_FS is not set | 879 | # CONFIG_MINIX_FS is not set |
851 | # CONFIG_ROMFS_FS is not set | 880 | # CONFIG_ROMFS_FS is not set |
852 | CONFIG_INOTIFY=y | 881 | CONFIG_INOTIFY=y |
@@ -886,6 +915,7 @@ CONFIG_HUGETLBFS=y | |||
886 | CONFIG_HUGETLB_PAGE=y | 915 | CONFIG_HUGETLB_PAGE=y |
887 | CONFIG_RAMFS=y | 916 | CONFIG_RAMFS=y |
888 | # CONFIG_RELAYFS_FS is not set | 917 | # CONFIG_RELAYFS_FS is not set |
918 | # CONFIG_CONFIGFS_FS is not set | ||
889 | 919 | ||
890 | # | 920 | # |
891 | # Miscellaneous filesystems | 921 | # Miscellaneous filesystems |
@@ -951,6 +981,7 @@ CONFIG_MSDOS_PARTITION=y | |||
951 | # CONFIG_SGI_PARTITION is not set | 981 | # CONFIG_SGI_PARTITION is not set |
952 | # CONFIG_ULTRIX_PARTITION is not set | 982 | # CONFIG_ULTRIX_PARTITION is not set |
953 | # CONFIG_SUN_PARTITION is not set | 983 | # CONFIG_SUN_PARTITION is not set |
984 | # CONFIG_KARMA_PARTITION is not set | ||
954 | CONFIG_EFI_PARTITION=y | 985 | CONFIG_EFI_PARTITION=y |
955 | 986 | ||
956 | # | 987 | # |
@@ -1021,18 +1052,20 @@ CONFIG_TEXTSEARCH_FSM=m | |||
1021 | # Kernel hacking | 1052 | # Kernel hacking |
1022 | # | 1053 | # |
1023 | # CONFIG_PRINTK_TIME is not set | 1054 | # CONFIG_PRINTK_TIME is not set |
1024 | CONFIG_DEBUG_KERNEL=y | ||
1025 | CONFIG_MAGIC_SYSRQ=y | 1055 | CONFIG_MAGIC_SYSRQ=y |
1056 | CONFIG_DEBUG_KERNEL=y | ||
1026 | CONFIG_LOG_BUF_SHIFT=15 | 1057 | CONFIG_LOG_BUF_SHIFT=15 |
1027 | CONFIG_DETECT_SOFTLOCKUP=y | 1058 | CONFIG_DETECT_SOFTLOCKUP=y |
1028 | # CONFIG_SCHEDSTATS is not set | 1059 | # CONFIG_SCHEDSTATS is not set |
1029 | # CONFIG_DEBUG_SLAB is not set | 1060 | # CONFIG_DEBUG_SLAB is not set |
1061 | # CONFIG_DEBUG_MUTEXES is not set | ||
1030 | # CONFIG_DEBUG_SPINLOCK is not set | 1062 | # CONFIG_DEBUG_SPINLOCK is not set |
1031 | CONFIG_DEBUG_SPINLOCK_SLEEP=y | 1063 | CONFIG_DEBUG_SPINLOCK_SLEEP=y |
1032 | # CONFIG_DEBUG_KOBJECT is not set | 1064 | # CONFIG_DEBUG_KOBJECT is not set |
1033 | # CONFIG_DEBUG_INFO is not set | 1065 | # CONFIG_DEBUG_INFO is not set |
1034 | CONFIG_DEBUG_FS=y | 1066 | CONFIG_DEBUG_FS=y |
1035 | # CONFIG_DEBUG_VM is not set | 1067 | # CONFIG_DEBUG_VM is not set |
1068 | # CONFIG_FORCED_INLINING is not set | ||
1036 | # CONFIG_RCU_TORTURE_TEST is not set | 1069 | # CONFIG_RCU_TORTURE_TEST is not set |
1037 | # CONFIG_DEBUG_STACKOVERFLOW is not set | 1070 | # CONFIG_DEBUG_STACKOVERFLOW is not set |
1038 | # CONFIG_DEBUG_STACK_USAGE is not set | 1071 | # CONFIG_DEBUG_STACK_USAGE is not set |
@@ -1040,6 +1073,11 @@ CONFIG_DEBUGGER=y | |||
1040 | # CONFIG_XMON is not set | 1073 | # CONFIG_XMON is not set |
1041 | CONFIG_IRQSTACKS=y | 1074 | CONFIG_IRQSTACKS=y |
1042 | # CONFIG_BOOTX_TEXT is not set | 1075 | # CONFIG_BOOTX_TEXT is not set |
1076 | # CONFIG_PPC_EARLY_DEBUG_LPAR is not set | ||
1077 | # CONFIG_PPC_EARLY_DEBUG_G5 is not set | ||
1078 | # CONFIG_PPC_EARLY_DEBUG_RTAS is not set | ||
1079 | # CONFIG_PPC_EARLY_DEBUG_MAPLE is not set | ||
1080 | # CONFIG_PPC_EARLY_DEBUG_ISERIES is not set | ||
1043 | 1081 | ||
1044 | # | 1082 | # |
1045 | # Security options | 1083 | # Security options |
diff --git a/arch/powerpc/configs/g5_defconfig b/arch/powerpc/configs/g5_defconfig index d6fed3f56580..2c3fd2007676 100644 --- a/arch/powerpc/configs/g5_defconfig +++ b/arch/powerpc/configs/g5_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.15-rc5 | 3 | # Linux kernel version: 2.6.16-rc2 |
4 | # Tue Dec 20 15:59:30 2005 | 4 | # Fri Feb 10 17:33:08 2006 |
5 | # | 5 | # |
6 | CONFIG_PPC64=y | 6 | CONFIG_PPC64=y |
7 | CONFIG_64BIT=y | 7 | CONFIG_64BIT=y |
@@ -16,6 +16,10 @@ CONFIG_COMPAT=y | |||
16 | CONFIG_SYSVIPC_COMPAT=y | 16 | CONFIG_SYSVIPC_COMPAT=y |
17 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | 17 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y |
18 | CONFIG_ARCH_MAY_HAVE_PC_FDC=y | 18 | CONFIG_ARCH_MAY_HAVE_PC_FDC=y |
19 | CONFIG_PPC_OF=y | ||
20 | # CONFIG_PPC_UDBG_16550 is not set | ||
21 | CONFIG_GENERIC_TBSYNC=y | ||
22 | # CONFIG_DEFAULT_UIMAGE is not set | ||
19 | 23 | ||
20 | # | 24 | # |
21 | # Processor support | 25 | # Processor support |
@@ -26,13 +30,12 @@ CONFIG_PPC_FPU=y | |||
26 | CONFIG_ALTIVEC=y | 30 | CONFIG_ALTIVEC=y |
27 | CONFIG_PPC_STD_MMU=y | 31 | CONFIG_PPC_STD_MMU=y |
28 | CONFIG_SMP=y | 32 | CONFIG_SMP=y |
29 | CONFIG_NR_CPUS=2 | 33 | CONFIG_NR_CPUS=4 |
30 | 34 | ||
31 | # | 35 | # |
32 | # Code maturity level options | 36 | # Code maturity level options |
33 | # | 37 | # |
34 | CONFIG_EXPERIMENTAL=y | 38 | CONFIG_EXPERIMENTAL=y |
35 | CONFIG_CLEAN_COMPILE=y | ||
36 | CONFIG_LOCK_KERNEL=y | 39 | CONFIG_LOCK_KERNEL=y |
37 | CONFIG_INIT_ENV_ARG_LIMIT=32 | 40 | CONFIG_INIT_ENV_ARG_LIMIT=32 |
38 | 41 | ||
@@ -47,8 +50,6 @@ CONFIG_POSIX_MQUEUE=y | |||
47 | # CONFIG_BSD_PROCESS_ACCT is not set | 50 | # CONFIG_BSD_PROCESS_ACCT is not set |
48 | CONFIG_SYSCTL=y | 51 | CONFIG_SYSCTL=y |
49 | # CONFIG_AUDIT is not set | 52 | # CONFIG_AUDIT is not set |
50 | CONFIG_HOTPLUG=y | ||
51 | CONFIG_KOBJECT_UEVENT=y | ||
52 | CONFIG_IKCONFIG=y | 53 | CONFIG_IKCONFIG=y |
53 | CONFIG_IKCONFIG_PROC=y | 54 | CONFIG_IKCONFIG_PROC=y |
54 | # CONFIG_CPUSETS is not set | 55 | # CONFIG_CPUSETS is not set |
@@ -58,8 +59,10 @@ CONFIG_CC_OPTIMIZE_FOR_SIZE=y | |||
58 | CONFIG_KALLSYMS=y | 59 | CONFIG_KALLSYMS=y |
59 | # CONFIG_KALLSYMS_ALL is not set | 60 | # CONFIG_KALLSYMS_ALL is not set |
60 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 61 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
62 | CONFIG_HOTPLUG=y | ||
61 | CONFIG_PRINTK=y | 63 | CONFIG_PRINTK=y |
62 | CONFIG_BUG=y | 64 | CONFIG_BUG=y |
65 | CONFIG_ELF_CORE=y | ||
63 | CONFIG_BASE_FULL=y | 66 | CONFIG_BASE_FULL=y |
64 | CONFIG_FUTEX=y | 67 | CONFIG_FUTEX=y |
65 | CONFIG_EPOLL=y | 68 | CONFIG_EPOLL=y |
@@ -68,8 +71,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0 | |||
68 | CONFIG_CC_ALIGN_LABELS=0 | 71 | CONFIG_CC_ALIGN_LABELS=0 |
69 | CONFIG_CC_ALIGN_LOOPS=0 | 72 | CONFIG_CC_ALIGN_LOOPS=0 |
70 | CONFIG_CC_ALIGN_JUMPS=0 | 73 | CONFIG_CC_ALIGN_JUMPS=0 |
74 | CONFIG_SLAB=y | ||
71 | # CONFIG_TINY_SHMEM is not set | 75 | # CONFIG_TINY_SHMEM is not set |
72 | CONFIG_BASE_SMALL=0 | 76 | CONFIG_BASE_SMALL=0 |
77 | # CONFIG_SLOB is not set | ||
73 | 78 | ||
74 | # | 79 | # |
75 | # Loadable module support | 80 | # Loadable module support |
@@ -112,13 +117,12 @@ CONFIG_PPC_PMAC=y | |||
112 | CONFIG_PPC_PMAC64=y | 117 | CONFIG_PPC_PMAC64=y |
113 | # CONFIG_PPC_MAPLE is not set | 118 | # CONFIG_PPC_MAPLE is not set |
114 | # CONFIG_PPC_CELL is not set | 119 | # CONFIG_PPC_CELL is not set |
115 | CONFIG_PPC_OF=y | ||
116 | CONFIG_U3_DART=y | 120 | CONFIG_U3_DART=y |
117 | CONFIG_MPIC=y | 121 | CONFIG_MPIC=y |
118 | # CONFIG_PPC_RTAS is not set | 122 | # CONFIG_PPC_RTAS is not set |
119 | # CONFIG_MMIO_NVRAM is not set | 123 | # CONFIG_MMIO_NVRAM is not set |
124 | CONFIG_MPIC_BROKEN_U3=y | ||
120 | # CONFIG_PPC_MPC106 is not set | 125 | # CONFIG_PPC_MPC106 is not set |
121 | CONFIG_GENERIC_TBSYNC=y | ||
122 | CONFIG_CPU_FREQ=y | 126 | CONFIG_CPU_FREQ=y |
123 | CONFIG_CPU_FREQ_TABLE=y | 127 | CONFIG_CPU_FREQ_TABLE=y |
124 | # CONFIG_CPU_FREQ_DEBUG is not set | 128 | # CONFIG_CPU_FREQ_DEBUG is not set |
@@ -151,6 +155,7 @@ CONFIG_FORCE_MAX_ZONEORDER=13 | |||
151 | CONFIG_IOMMU_VMERGE=y | 155 | CONFIG_IOMMU_VMERGE=y |
152 | # CONFIG_HOTPLUG_CPU is not set | 156 | # CONFIG_HOTPLUG_CPU is not set |
153 | CONFIG_KEXEC=y | 157 | CONFIG_KEXEC=y |
158 | # CONFIG_CRASH_DUMP is not set | ||
154 | CONFIG_IRQ_ALL_CPUS=y | 159 | CONFIG_IRQ_ALL_CPUS=y |
155 | # CONFIG_NUMA is not set | 160 | # CONFIG_NUMA is not set |
156 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | 161 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y |
@@ -202,6 +207,7 @@ CONFIG_NET=y | |||
202 | # | 207 | # |
203 | # Networking options | 208 | # Networking options |
204 | # | 209 | # |
210 | # CONFIG_NETDEBUG is not set | ||
205 | CONFIG_PACKET=y | 211 | CONFIG_PACKET=y |
206 | # CONFIG_PACKET_MMAP is not set | 212 | # CONFIG_PACKET_MMAP is not set |
207 | CONFIG_UNIX=y | 213 | CONFIG_UNIX=y |
@@ -239,6 +245,7 @@ CONFIG_NETFILTER=y | |||
239 | # Core Netfilter Configuration | 245 | # Core Netfilter Configuration |
240 | # | 246 | # |
241 | # CONFIG_NETFILTER_NETLINK is not set | 247 | # CONFIG_NETFILTER_NETLINK is not set |
248 | # CONFIG_NETFILTER_XTABLES is not set | ||
242 | 249 | ||
243 | # | 250 | # |
244 | # IP: Netfilter Configuration | 251 | # IP: Netfilter Configuration |
@@ -255,65 +262,6 @@ CONFIG_IP_NF_TFTP=m | |||
255 | CONFIG_IP_NF_AMANDA=m | 262 | CONFIG_IP_NF_AMANDA=m |
256 | # CONFIG_IP_NF_PPTP is not set | 263 | # CONFIG_IP_NF_PPTP is not set |
257 | CONFIG_IP_NF_QUEUE=m | 264 | CONFIG_IP_NF_QUEUE=m |
258 | CONFIG_IP_NF_IPTABLES=m | ||
259 | CONFIG_IP_NF_MATCH_LIMIT=m | ||
260 | CONFIG_IP_NF_MATCH_IPRANGE=m | ||
261 | CONFIG_IP_NF_MATCH_MAC=m | ||
262 | CONFIG_IP_NF_MATCH_PKTTYPE=m | ||
263 | CONFIG_IP_NF_MATCH_MARK=m | ||
264 | CONFIG_IP_NF_MATCH_MULTIPORT=m | ||
265 | CONFIG_IP_NF_MATCH_TOS=m | ||
266 | CONFIG_IP_NF_MATCH_RECENT=m | ||
267 | CONFIG_IP_NF_MATCH_ECN=m | ||
268 | CONFIG_IP_NF_MATCH_DSCP=m | ||
269 | CONFIG_IP_NF_MATCH_AH_ESP=m | ||
270 | CONFIG_IP_NF_MATCH_LENGTH=m | ||
271 | CONFIG_IP_NF_MATCH_TTL=m | ||
272 | CONFIG_IP_NF_MATCH_TCPMSS=m | ||
273 | CONFIG_IP_NF_MATCH_HELPER=m | ||
274 | CONFIG_IP_NF_MATCH_STATE=m | ||
275 | CONFIG_IP_NF_MATCH_CONNTRACK=m | ||
276 | CONFIG_IP_NF_MATCH_OWNER=m | ||
277 | CONFIG_IP_NF_MATCH_ADDRTYPE=m | ||
278 | CONFIG_IP_NF_MATCH_REALM=m | ||
279 | CONFIG_IP_NF_MATCH_SCTP=m | ||
280 | # CONFIG_IP_NF_MATCH_DCCP is not set | ||
281 | CONFIG_IP_NF_MATCH_COMMENT=m | ||
282 | CONFIG_IP_NF_MATCH_CONNMARK=m | ||
283 | CONFIG_IP_NF_MATCH_CONNBYTES=m | ||
284 | CONFIG_IP_NF_MATCH_HASHLIMIT=m | ||
285 | CONFIG_IP_NF_MATCH_STRING=m | ||
286 | CONFIG_IP_NF_FILTER=m | ||
287 | CONFIG_IP_NF_TARGET_REJECT=m | ||
288 | CONFIG_IP_NF_TARGET_LOG=m | ||
289 | CONFIG_IP_NF_TARGET_ULOG=m | ||
290 | CONFIG_IP_NF_TARGET_TCPMSS=m | ||
291 | CONFIG_IP_NF_TARGET_NFQUEUE=m | ||
292 | CONFIG_IP_NF_NAT=m | ||
293 | CONFIG_IP_NF_NAT_NEEDED=y | ||
294 | CONFIG_IP_NF_TARGET_MASQUERADE=m | ||
295 | CONFIG_IP_NF_TARGET_REDIRECT=m | ||
296 | CONFIG_IP_NF_TARGET_NETMAP=m | ||
297 | CONFIG_IP_NF_TARGET_SAME=m | ||
298 | CONFIG_IP_NF_NAT_SNMP_BASIC=m | ||
299 | CONFIG_IP_NF_NAT_IRC=m | ||
300 | CONFIG_IP_NF_NAT_FTP=m | ||
301 | CONFIG_IP_NF_NAT_TFTP=m | ||
302 | CONFIG_IP_NF_NAT_AMANDA=m | ||
303 | CONFIG_IP_NF_MANGLE=m | ||
304 | CONFIG_IP_NF_TARGET_TOS=m | ||
305 | CONFIG_IP_NF_TARGET_ECN=m | ||
306 | CONFIG_IP_NF_TARGET_DSCP=m | ||
307 | CONFIG_IP_NF_TARGET_MARK=m | ||
308 | CONFIG_IP_NF_TARGET_CLASSIFY=m | ||
309 | CONFIG_IP_NF_TARGET_TTL=m | ||
310 | CONFIG_IP_NF_TARGET_CONNMARK=m | ||
311 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | ||
312 | CONFIG_IP_NF_RAW=m | ||
313 | CONFIG_IP_NF_TARGET_NOTRACK=m | ||
314 | CONFIG_IP_NF_ARPTABLES=m | ||
315 | CONFIG_IP_NF_ARPFILTER=m | ||
316 | CONFIG_IP_NF_ARP_MANGLE=m | ||
317 | 265 | ||
318 | # | 266 | # |
319 | # DCCP Configuration (EXPERIMENTAL) | 267 | # DCCP Configuration (EXPERIMENTAL) |
@@ -324,6 +272,11 @@ CONFIG_IP_NF_ARP_MANGLE=m | |||
324 | # SCTP Configuration (EXPERIMENTAL) | 272 | # SCTP Configuration (EXPERIMENTAL) |
325 | # | 273 | # |
326 | # CONFIG_IP_SCTP is not set | 274 | # CONFIG_IP_SCTP is not set |
275 | |||
276 | # | ||
277 | # TIPC Configuration (EXPERIMENTAL) | ||
278 | # | ||
279 | # CONFIG_TIPC is not set | ||
327 | # CONFIG_ATM is not set | 280 | # CONFIG_ATM is not set |
328 | # CONFIG_BRIDGE is not set | 281 | # CONFIG_BRIDGE is not set |
329 | # CONFIG_VLAN_8021Q is not set | 282 | # CONFIG_VLAN_8021Q is not set |
@@ -342,7 +295,6 @@ CONFIG_LLC=y | |||
342 | # QoS and/or fair queueing | 295 | # QoS and/or fair queueing |
343 | # | 296 | # |
344 | # CONFIG_NET_SCHED is not set | 297 | # CONFIG_NET_SCHED is not set |
345 | CONFIG_NET_CLS_ROUTE=y | ||
346 | 298 | ||
347 | # | 299 | # |
348 | # Network testing | 300 | # Network testing |
@@ -545,13 +497,7 @@ CONFIG_SCSI_SATA_SVW=y | |||
545 | # CONFIG_SCSI_IPR is not set | 497 | # CONFIG_SCSI_IPR is not set |
546 | # CONFIG_SCSI_QLOGIC_FC is not set | 498 | # CONFIG_SCSI_QLOGIC_FC is not set |
547 | # CONFIG_SCSI_QLOGIC_1280 is not set | 499 | # CONFIG_SCSI_QLOGIC_1280 is not set |
548 | CONFIG_SCSI_QLA2XXX=y | 500 | # CONFIG_SCSI_QLA_FC is not set |
549 | # CONFIG_SCSI_QLA21XX is not set | ||
550 | # CONFIG_SCSI_QLA22XX is not set | ||
551 | # CONFIG_SCSI_QLA2300 is not set | ||
552 | # CONFIG_SCSI_QLA2322 is not set | ||
553 | # CONFIG_SCSI_QLA6312 is not set | ||
554 | # CONFIG_SCSI_QLA24XX is not set | ||
555 | # CONFIG_SCSI_LPFC is not set | 501 | # CONFIG_SCSI_LPFC is not set |
556 | # CONFIG_SCSI_DC395x is not set | 502 | # CONFIG_SCSI_DC395x is not set |
557 | # CONFIG_SCSI_DC390T is not set | 503 | # CONFIG_SCSI_DC390T is not set |
@@ -614,7 +560,6 @@ CONFIG_IEEE1394_SBP2=m | |||
614 | CONFIG_IEEE1394_ETH1394=m | 560 | CONFIG_IEEE1394_ETH1394=m |
615 | CONFIG_IEEE1394_DV1394=m | 561 | CONFIG_IEEE1394_DV1394=m |
616 | CONFIG_IEEE1394_RAWIO=y | 562 | CONFIG_IEEE1394_RAWIO=y |
617 | # CONFIG_IEEE1394_CMP is not set | ||
618 | 563 | ||
619 | # | 564 | # |
620 | # I2O device support | 565 | # I2O device support |
@@ -630,6 +575,7 @@ CONFIG_THERM_PM72=y | |||
630 | CONFIG_WINDFARM=y | 575 | CONFIG_WINDFARM=y |
631 | CONFIG_WINDFARM_PM81=y | 576 | CONFIG_WINDFARM_PM81=y |
632 | CONFIG_WINDFARM_PM91=y | 577 | CONFIG_WINDFARM_PM91=y |
578 | CONFIG_WINDFARM_PM112=y | ||
633 | 579 | ||
634 | # | 580 | # |
635 | # Network device support | 581 | # Network device support |
@@ -682,8 +628,9 @@ CONFIG_E1000=y | |||
682 | # CONFIG_R8169 is not set | 628 | # CONFIG_R8169 is not set |
683 | # CONFIG_SIS190 is not set | 629 | # CONFIG_SIS190 is not set |
684 | # CONFIG_SKGE is not set | 630 | # CONFIG_SKGE is not set |
631 | # CONFIG_SKY2 is not set | ||
685 | # CONFIG_SK98LIN is not set | 632 | # CONFIG_SK98LIN is not set |
686 | CONFIG_TIGON3=m | 633 | CONFIG_TIGON3=y |
687 | # CONFIG_BNX2 is not set | 634 | # CONFIG_BNX2 is not set |
688 | # CONFIG_MV643XX_ETH is not set | 635 | # CONFIG_MV643XX_ETH is not set |
689 | 636 | ||
@@ -861,8 +808,7 @@ CONFIG_I2C_ALGOBIT=y | |||
861 | # CONFIG_I2C_I801 is not set | 808 | # CONFIG_I2C_I801 is not set |
862 | # CONFIG_I2C_I810 is not set | 809 | # CONFIG_I2C_I810 is not set |
863 | # CONFIG_I2C_PIIX4 is not set | 810 | # CONFIG_I2C_PIIX4 is not set |
864 | CONFIG_I2C_KEYWEST=y | 811 | CONFIG_I2C_POWERMAC=y |
865 | CONFIG_I2C_PMAC_SMU=y | ||
866 | # CONFIG_I2C_NFORCE2 is not set | 812 | # CONFIG_I2C_NFORCE2 is not set |
867 | # CONFIG_I2C_PARPORT_LIGHT is not set | 813 | # CONFIG_I2C_PARPORT_LIGHT is not set |
868 | # CONFIG_I2C_PROSAVAGE is not set | 814 | # CONFIG_I2C_PROSAVAGE is not set |
@@ -895,6 +841,12 @@ CONFIG_I2C_PMAC_SMU=y | |||
895 | # CONFIG_I2C_DEBUG_CHIP is not set | 841 | # CONFIG_I2C_DEBUG_CHIP is not set |
896 | 842 | ||
897 | # | 843 | # |
844 | # SPI support | ||
845 | # | ||
846 | # CONFIG_SPI is not set | ||
847 | # CONFIG_SPI_MASTER is not set | ||
848 | |||
849 | # | ||
898 | # Dallas's 1-wire bus | 850 | # Dallas's 1-wire bus |
899 | # | 851 | # |
900 | # CONFIG_W1 is not set | 852 | # CONFIG_W1 is not set |
@@ -961,7 +913,6 @@ CONFIG_FB_RADEON_I2C=y | |||
961 | # CONFIG_FB_KYRO is not set | 913 | # CONFIG_FB_KYRO is not set |
962 | # CONFIG_FB_3DFX is not set | 914 | # CONFIG_FB_3DFX is not set |
963 | # CONFIG_FB_VOODOO1 is not set | 915 | # CONFIG_FB_VOODOO1 is not set |
964 | # CONFIG_FB_CYBLA is not set | ||
965 | # CONFIG_FB_TRIDENT is not set | 916 | # CONFIG_FB_TRIDENT is not set |
966 | # CONFIG_FB_VIRTUAL is not set | 917 | # CONFIG_FB_VIRTUAL is not set |
967 | 918 | ||
@@ -1008,9 +959,10 @@ CONFIG_SND_OSSEMUL=y | |||
1008 | CONFIG_SND_MIXER_OSS=m | 959 | CONFIG_SND_MIXER_OSS=m |
1009 | CONFIG_SND_PCM_OSS=m | 960 | CONFIG_SND_PCM_OSS=m |
1010 | CONFIG_SND_SEQUENCER_OSS=y | 961 | CONFIG_SND_SEQUENCER_OSS=y |
962 | # CONFIG_SND_DYNAMIC_MINORS is not set | ||
963 | CONFIG_SND_SUPPORT_OLD_API=y | ||
1011 | # CONFIG_SND_VERBOSE_PRINTK is not set | 964 | # CONFIG_SND_VERBOSE_PRINTK is not set |
1012 | # CONFIG_SND_DEBUG is not set | 965 | # CONFIG_SND_DEBUG is not set |
1013 | CONFIG_SND_GENERIC_DRIVER=y | ||
1014 | 966 | ||
1015 | # | 967 | # |
1016 | # Generic devices | 968 | # Generic devices |
@@ -1024,6 +976,8 @@ CONFIG_SND_GENERIC_DRIVER=y | |||
1024 | # | 976 | # |
1025 | # PCI devices | 977 | # PCI devices |
1026 | # | 978 | # |
979 | # CONFIG_SND_AD1889 is not set | ||
980 | # CONFIG_SND_ALS4000 is not set | ||
1027 | # CONFIG_SND_ALI5451 is not set | 981 | # CONFIG_SND_ALI5451 is not set |
1028 | # CONFIG_SND_ATIIXP is not set | 982 | # CONFIG_SND_ATIIXP is not set |
1029 | # CONFIG_SND_ATIIXP_MODEM is not set | 983 | # CONFIG_SND_ATIIXP_MODEM is not set |
@@ -1032,39 +986,38 @@ CONFIG_SND_GENERIC_DRIVER=y | |||
1032 | # CONFIG_SND_AU8830 is not set | 986 | # CONFIG_SND_AU8830 is not set |
1033 | # CONFIG_SND_AZT3328 is not set | 987 | # CONFIG_SND_AZT3328 is not set |
1034 | # CONFIG_SND_BT87X is not set | 988 | # CONFIG_SND_BT87X is not set |
1035 | # CONFIG_SND_CS46XX is not set | 989 | # CONFIG_SND_CA0106 is not set |
990 | # CONFIG_SND_CMIPCI is not set | ||
1036 | # CONFIG_SND_CS4281 is not set | 991 | # CONFIG_SND_CS4281 is not set |
992 | # CONFIG_SND_CS46XX is not set | ||
1037 | # CONFIG_SND_EMU10K1 is not set | 993 | # CONFIG_SND_EMU10K1 is not set |
1038 | # CONFIG_SND_EMU10K1X is not set | 994 | # CONFIG_SND_EMU10K1X is not set |
1039 | # CONFIG_SND_CA0106 is not set | ||
1040 | # CONFIG_SND_KORG1212 is not set | ||
1041 | # CONFIG_SND_MIXART is not set | ||
1042 | # CONFIG_SND_NM256 is not set | ||
1043 | # CONFIG_SND_RME32 is not set | ||
1044 | # CONFIG_SND_RME96 is not set | ||
1045 | # CONFIG_SND_RME9652 is not set | ||
1046 | # CONFIG_SND_HDSP is not set | ||
1047 | # CONFIG_SND_HDSPM is not set | ||
1048 | # CONFIG_SND_TRIDENT is not set | ||
1049 | # CONFIG_SND_YMFPCI is not set | ||
1050 | # CONFIG_SND_AD1889 is not set | ||
1051 | # CONFIG_SND_ALS4000 is not set | ||
1052 | # CONFIG_SND_CMIPCI is not set | ||
1053 | # CONFIG_SND_ENS1370 is not set | 995 | # CONFIG_SND_ENS1370 is not set |
1054 | # CONFIG_SND_ENS1371 is not set | 996 | # CONFIG_SND_ENS1371 is not set |
1055 | # CONFIG_SND_ES1938 is not set | 997 | # CONFIG_SND_ES1938 is not set |
1056 | # CONFIG_SND_ES1968 is not set | 998 | # CONFIG_SND_ES1968 is not set |
1057 | # CONFIG_SND_MAESTRO3 is not set | ||
1058 | # CONFIG_SND_FM801 is not set | 999 | # CONFIG_SND_FM801 is not set |
1000 | # CONFIG_SND_HDA_INTEL is not set | ||
1001 | # CONFIG_SND_HDSP is not set | ||
1002 | # CONFIG_SND_HDSPM is not set | ||
1059 | # CONFIG_SND_ICE1712 is not set | 1003 | # CONFIG_SND_ICE1712 is not set |
1060 | # CONFIG_SND_ICE1724 is not set | 1004 | # CONFIG_SND_ICE1724 is not set |
1061 | # CONFIG_SND_INTEL8X0 is not set | 1005 | # CONFIG_SND_INTEL8X0 is not set |
1062 | # CONFIG_SND_INTEL8X0M is not set | 1006 | # CONFIG_SND_INTEL8X0M is not set |
1007 | # CONFIG_SND_KORG1212 is not set | ||
1008 | # CONFIG_SND_MAESTRO3 is not set | ||
1009 | # CONFIG_SND_MIXART is not set | ||
1010 | # CONFIG_SND_NM256 is not set | ||
1011 | # CONFIG_SND_PCXHR is not set | ||
1012 | # CONFIG_SND_RME32 is not set | ||
1013 | # CONFIG_SND_RME96 is not set | ||
1014 | # CONFIG_SND_RME9652 is not set | ||
1063 | # CONFIG_SND_SONICVIBES is not set | 1015 | # CONFIG_SND_SONICVIBES is not set |
1016 | # CONFIG_SND_TRIDENT is not set | ||
1064 | # CONFIG_SND_VIA82XX is not set | 1017 | # CONFIG_SND_VIA82XX is not set |
1065 | # CONFIG_SND_VIA82XX_MODEM is not set | 1018 | # CONFIG_SND_VIA82XX_MODEM is not set |
1066 | # CONFIG_SND_VX222 is not set | 1019 | # CONFIG_SND_VX222 is not set |
1067 | # CONFIG_SND_HDA_INTEL is not set | 1020 | # CONFIG_SND_YMFPCI is not set |
1068 | 1021 | ||
1069 | # | 1022 | # |
1070 | # ALSA PowerMac devices | 1023 | # ALSA PowerMac devices |
@@ -1136,13 +1089,16 @@ CONFIG_USB_STORAGE_DPCM=y | |||
1136 | CONFIG_USB_STORAGE_SDDR09=y | 1089 | CONFIG_USB_STORAGE_SDDR09=y |
1137 | CONFIG_USB_STORAGE_SDDR55=y | 1090 | CONFIG_USB_STORAGE_SDDR55=y |
1138 | CONFIG_USB_STORAGE_JUMPSHOT=y | 1091 | CONFIG_USB_STORAGE_JUMPSHOT=y |
1092 | # CONFIG_USB_STORAGE_ALAUDA is not set | ||
1139 | # CONFIG_USB_STORAGE_ONETOUCH is not set | 1093 | # CONFIG_USB_STORAGE_ONETOUCH is not set |
1094 | # CONFIG_USB_LIBUSUAL is not set | ||
1140 | 1095 | ||
1141 | # | 1096 | # |
1142 | # USB Input Devices | 1097 | # USB Input Devices |
1143 | # | 1098 | # |
1144 | CONFIG_USB_HID=y | 1099 | CONFIG_USB_HID=y |
1145 | CONFIG_USB_HIDINPUT=y | 1100 | CONFIG_USB_HIDINPUT=y |
1101 | # CONFIG_USB_HIDINPUT_POWERBOOK is not set | ||
1146 | CONFIG_HID_FF=y | 1102 | CONFIG_HID_FF=y |
1147 | CONFIG_HID_PID=y | 1103 | CONFIG_HID_PID=y |
1148 | CONFIG_LOGITECH_FF=y | 1104 | CONFIG_LOGITECH_FF=y |
@@ -1159,6 +1115,7 @@ CONFIG_USB_HIDDEV=y | |||
1159 | # CONFIG_USB_YEALINK is not set | 1115 | # CONFIG_USB_YEALINK is not set |
1160 | # CONFIG_USB_XPAD is not set | 1116 | # CONFIG_USB_XPAD is not set |
1161 | # CONFIG_USB_ATI_REMOTE is not set | 1117 | # CONFIG_USB_ATI_REMOTE is not set |
1118 | # CONFIG_USB_ATI_REMOTE2 is not set | ||
1162 | # CONFIG_USB_KEYSPAN_REMOTE is not set | 1119 | # CONFIG_USB_KEYSPAN_REMOTE is not set |
1163 | # CONFIG_USB_APPLETOUCH is not set | 1120 | # CONFIG_USB_APPLETOUCH is not set |
1164 | 1121 | ||
@@ -1207,6 +1164,7 @@ CONFIG_USB_SERIAL_GENERIC=y | |||
1207 | # CONFIG_USB_SERIAL_AIRPRIME is not set | 1164 | # CONFIG_USB_SERIAL_AIRPRIME is not set |
1208 | # CONFIG_USB_SERIAL_ANYDATA is not set | 1165 | # CONFIG_USB_SERIAL_ANYDATA is not set |
1209 | CONFIG_USB_SERIAL_BELKIN=m | 1166 | CONFIG_USB_SERIAL_BELKIN=m |
1167 | # CONFIG_USB_SERIAL_WHITEHEAT is not set | ||
1210 | CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m | 1168 | CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m |
1211 | # CONFIG_USB_SERIAL_CP2101 is not set | 1169 | # CONFIG_USB_SERIAL_CP2101 is not set |
1212 | CONFIG_USB_SERIAL_CYPRESS_M8=m | 1170 | CONFIG_USB_SERIAL_CYPRESS_M8=m |
@@ -1288,6 +1246,10 @@ CONFIG_USB_EZUSB=y | |||
1288 | # | 1246 | # |
1289 | 1247 | ||
1290 | # | 1248 | # |
1249 | # EDAC - error detection and reporting (RAS) | ||
1250 | # | ||
1251 | |||
1252 | # | ||
1291 | # File systems | 1253 | # File systems |
1292 | # | 1254 | # |
1293 | CONFIG_EXT2_FS=y | 1255 | CONFIG_EXT2_FS=y |
@@ -1317,6 +1279,7 @@ CONFIG_XFS_EXPORT=y | |||
1317 | CONFIG_XFS_SECURITY=y | 1279 | CONFIG_XFS_SECURITY=y |
1318 | CONFIG_XFS_POSIX_ACL=y | 1280 | CONFIG_XFS_POSIX_ACL=y |
1319 | # CONFIG_XFS_RT is not set | 1281 | # CONFIG_XFS_RT is not set |
1282 | # CONFIG_OCFS2_FS is not set | ||
1320 | # CONFIG_MINIX_FS is not set | 1283 | # CONFIG_MINIX_FS is not set |
1321 | # CONFIG_ROMFS_FS is not set | 1284 | # CONFIG_ROMFS_FS is not set |
1322 | CONFIG_INOTIFY=y | 1285 | CONFIG_INOTIFY=y |
@@ -1357,6 +1320,7 @@ CONFIG_HUGETLBFS=y | |||
1357 | CONFIG_HUGETLB_PAGE=y | 1320 | CONFIG_HUGETLB_PAGE=y |
1358 | CONFIG_RAMFS=y | 1321 | CONFIG_RAMFS=y |
1359 | # CONFIG_RELAYFS_FS is not set | 1322 | # CONFIG_RELAYFS_FS is not set |
1323 | # CONFIG_CONFIGFS_FS is not set | ||
1360 | 1324 | ||
1361 | # | 1325 | # |
1362 | # Miscellaneous filesystems | 1326 | # Miscellaneous filesystems |
@@ -1426,6 +1390,7 @@ CONFIG_MSDOS_PARTITION=y | |||
1426 | # CONFIG_SGI_PARTITION is not set | 1390 | # CONFIG_SGI_PARTITION is not set |
1427 | # CONFIG_ULTRIX_PARTITION is not set | 1391 | # CONFIG_ULTRIX_PARTITION is not set |
1428 | # CONFIG_SUN_PARTITION is not set | 1392 | # CONFIG_SUN_PARTITION is not set |
1393 | # CONFIG_KARMA_PARTITION is not set | ||
1429 | # CONFIG_EFI_PARTITION is not set | 1394 | # CONFIG_EFI_PARTITION is not set |
1430 | 1395 | ||
1431 | # | 1396 | # |
@@ -1481,10 +1446,6 @@ CONFIG_CRC32=y | |||
1481 | CONFIG_LIBCRC32C=m | 1446 | CONFIG_LIBCRC32C=m |
1482 | CONFIG_ZLIB_INFLATE=y | 1447 | CONFIG_ZLIB_INFLATE=y |
1483 | CONFIG_ZLIB_DEFLATE=m | 1448 | CONFIG_ZLIB_DEFLATE=m |
1484 | CONFIG_TEXTSEARCH=y | ||
1485 | CONFIG_TEXTSEARCH_KMP=m | ||
1486 | CONFIG_TEXTSEARCH_BM=m | ||
1487 | CONFIG_TEXTSEARCH_FSM=m | ||
1488 | 1449 | ||
1489 | # | 1450 | # |
1490 | # Instrumentation Support | 1451 | # Instrumentation Support |
@@ -1497,24 +1458,31 @@ CONFIG_OPROFILE=y | |||
1497 | # Kernel hacking | 1458 | # Kernel hacking |
1498 | # | 1459 | # |
1499 | # CONFIG_PRINTK_TIME is not set | 1460 | # CONFIG_PRINTK_TIME is not set |
1500 | CONFIG_DEBUG_KERNEL=y | ||
1501 | CONFIG_MAGIC_SYSRQ=y | 1461 | CONFIG_MAGIC_SYSRQ=y |
1462 | CONFIG_DEBUG_KERNEL=y | ||
1502 | CONFIG_LOG_BUF_SHIFT=17 | 1463 | CONFIG_LOG_BUF_SHIFT=17 |
1503 | CONFIG_DETECT_SOFTLOCKUP=y | 1464 | CONFIG_DETECT_SOFTLOCKUP=y |
1504 | # CONFIG_SCHEDSTATS is not set | 1465 | # CONFIG_SCHEDSTATS is not set |
1505 | # CONFIG_DEBUG_SLAB is not set | 1466 | # CONFIG_DEBUG_SLAB is not set |
1467 | CONFIG_DEBUG_MUTEXES=y | ||
1506 | # CONFIG_DEBUG_SPINLOCK is not set | 1468 | # CONFIG_DEBUG_SPINLOCK is not set |
1507 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | 1469 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set |
1508 | # CONFIG_DEBUG_KOBJECT is not set | 1470 | # CONFIG_DEBUG_KOBJECT is not set |
1509 | # CONFIG_DEBUG_INFO is not set | 1471 | # CONFIG_DEBUG_INFO is not set |
1510 | CONFIG_DEBUG_FS=y | 1472 | CONFIG_DEBUG_FS=y |
1511 | # CONFIG_DEBUG_VM is not set | 1473 | # CONFIG_DEBUG_VM is not set |
1474 | CONFIG_FORCED_INLINING=y | ||
1512 | # CONFIG_RCU_TORTURE_TEST is not set | 1475 | # CONFIG_RCU_TORTURE_TEST is not set |
1513 | # CONFIG_DEBUG_STACKOVERFLOW is not set | 1476 | # CONFIG_DEBUG_STACKOVERFLOW is not set |
1514 | # CONFIG_DEBUG_STACK_USAGE is not set | 1477 | # CONFIG_DEBUG_STACK_USAGE is not set |
1515 | # CONFIG_DEBUGGER is not set | 1478 | # CONFIG_DEBUGGER is not set |
1516 | CONFIG_IRQSTACKS=y | 1479 | CONFIG_IRQSTACKS=y |
1517 | CONFIG_BOOTX_TEXT=y | 1480 | CONFIG_BOOTX_TEXT=y |
1481 | # CONFIG_PPC_EARLY_DEBUG_LPAR is not set | ||
1482 | # CONFIG_PPC_EARLY_DEBUG_G5 is not set | ||
1483 | # CONFIG_PPC_EARLY_DEBUG_RTAS is not set | ||
1484 | # CONFIG_PPC_EARLY_DEBUG_MAPLE is not set | ||
1485 | # CONFIG_PPC_EARLY_DEBUG_ISERIES is not set | ||
1518 | 1486 | ||
1519 | # | 1487 | # |
1520 | # Security options | 1488 | # Security options |
diff --git a/arch/powerpc/configs/iseries_defconfig b/arch/powerpc/configs/iseries_defconfig index c775027947f9..1816a46742f6 100644 --- a/arch/powerpc/configs/iseries_defconfig +++ b/arch/powerpc/configs/iseries_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.15-rc5 | 3 | # Linux kernel version: 2.6.16-rc6 |
4 | # Tue Dec 20 15:59:32 2005 | 4 | # Wed Mar 15 16:19:52 2006 |
5 | # | 5 | # |
6 | CONFIG_PPC64=y | 6 | CONFIG_PPC64=y |
7 | CONFIG_64BIT=y | 7 | CONFIG_64BIT=y |
@@ -16,6 +16,10 @@ CONFIG_COMPAT=y | |||
16 | CONFIG_SYSVIPC_COMPAT=y | 16 | CONFIG_SYSVIPC_COMPAT=y |
17 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | 17 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y |
18 | CONFIG_ARCH_MAY_HAVE_PC_FDC=y | 18 | CONFIG_ARCH_MAY_HAVE_PC_FDC=y |
19 | CONFIG_PPC_OF=y | ||
20 | # CONFIG_PPC_UDBG_16550 is not set | ||
21 | # CONFIG_GENERIC_TBSYNC is not set | ||
22 | # CONFIG_DEFAULT_UIMAGE is not set | ||
19 | 23 | ||
20 | # | 24 | # |
21 | # Processor support | 25 | # Processor support |
@@ -33,7 +37,6 @@ CONFIG_NR_CPUS=32 | |||
33 | # Code maturity level options | 37 | # Code maturity level options |
34 | # | 38 | # |
35 | CONFIG_EXPERIMENTAL=y | 39 | CONFIG_EXPERIMENTAL=y |
36 | CONFIG_CLEAN_COMPILE=y | ||
37 | CONFIG_LOCK_KERNEL=y | 40 | CONFIG_LOCK_KERNEL=y |
38 | CONFIG_INIT_ENV_ARG_LIMIT=32 | 41 | CONFIG_INIT_ENV_ARG_LIMIT=32 |
39 | 42 | ||
@@ -49,8 +52,6 @@ CONFIG_POSIX_MQUEUE=y | |||
49 | CONFIG_SYSCTL=y | 52 | CONFIG_SYSCTL=y |
50 | CONFIG_AUDIT=y | 53 | CONFIG_AUDIT=y |
51 | CONFIG_AUDITSYSCALL=y | 54 | CONFIG_AUDITSYSCALL=y |
52 | CONFIG_HOTPLUG=y | ||
53 | CONFIG_KOBJECT_UEVENT=y | ||
54 | CONFIG_IKCONFIG=y | 55 | CONFIG_IKCONFIG=y |
55 | CONFIG_IKCONFIG_PROC=y | 56 | CONFIG_IKCONFIG_PROC=y |
56 | # CONFIG_CPUSETS is not set | 57 | # CONFIG_CPUSETS is not set |
@@ -60,8 +61,10 @@ CONFIG_CC_OPTIMIZE_FOR_SIZE=y | |||
60 | CONFIG_KALLSYMS=y | 61 | CONFIG_KALLSYMS=y |
61 | # CONFIG_KALLSYMS_ALL is not set | 62 | # CONFIG_KALLSYMS_ALL is not set |
62 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 63 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
64 | CONFIG_HOTPLUG=y | ||
63 | CONFIG_PRINTK=y | 65 | CONFIG_PRINTK=y |
64 | CONFIG_BUG=y | 66 | CONFIG_BUG=y |
67 | CONFIG_ELF_CORE=y | ||
65 | CONFIG_BASE_FULL=y | 68 | CONFIG_BASE_FULL=y |
66 | CONFIG_FUTEX=y | 69 | CONFIG_FUTEX=y |
67 | CONFIG_EPOLL=y | 70 | CONFIG_EPOLL=y |
@@ -70,8 +73,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0 | |||
70 | CONFIG_CC_ALIGN_LABELS=0 | 73 | CONFIG_CC_ALIGN_LABELS=0 |
71 | CONFIG_CC_ALIGN_LOOPS=0 | 74 | CONFIG_CC_ALIGN_LOOPS=0 |
72 | CONFIG_CC_ALIGN_JUMPS=0 | 75 | CONFIG_CC_ALIGN_JUMPS=0 |
76 | CONFIG_SLAB=y | ||
73 | # CONFIG_TINY_SHMEM is not set | 77 | # CONFIG_TINY_SHMEM is not set |
74 | CONFIG_BASE_SMALL=0 | 78 | CONFIG_BASE_SMALL=0 |
79 | # CONFIG_SLOB is not set | ||
75 | 80 | ||
76 | # | 81 | # |
77 | # Loadable module support | 82 | # Loadable module support |
@@ -113,7 +118,6 @@ CONFIG_PPC_ISERIES=y | |||
113 | # CONFIG_MMIO_NVRAM is not set | 118 | # CONFIG_MMIO_NVRAM is not set |
114 | CONFIG_IBMVIO=y | 119 | CONFIG_IBMVIO=y |
115 | # CONFIG_PPC_MPC106 is not set | 120 | # CONFIG_PPC_MPC106 is not set |
116 | # CONFIG_GENERIC_TBSYNC is not set | ||
117 | # CONFIG_CPU_FREQ is not set | 121 | # CONFIG_CPU_FREQ is not set |
118 | # CONFIG_WANT_EARLY_SERIAL is not set | 122 | # CONFIG_WANT_EARLY_SERIAL is not set |
119 | 123 | ||
@@ -183,6 +187,7 @@ CONFIG_NET=y | |||
183 | # | 187 | # |
184 | # Networking options | 188 | # Networking options |
185 | # | 189 | # |
190 | # CONFIG_NETDEBUG is not set | ||
186 | CONFIG_PACKET=y | 191 | CONFIG_PACKET=y |
187 | # CONFIG_PACKET_MMAP is not set | 192 | # CONFIG_PACKET_MMAP is not set |
188 | CONFIG_UNIX=y | 193 | CONFIG_UNIX=y |
@@ -220,6 +225,28 @@ CONFIG_NETFILTER=y | |||
220 | # Core Netfilter Configuration | 225 | # Core Netfilter Configuration |
221 | # | 226 | # |
222 | # CONFIG_NETFILTER_NETLINK is not set | 227 | # CONFIG_NETFILTER_NETLINK is not set |
228 | CONFIG_NETFILTER_XTABLES=m | ||
229 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m | ||
230 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m | ||
231 | CONFIG_NETFILTER_XT_TARGET_MARK=m | ||
232 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | ||
233 | CONFIG_NETFILTER_XT_TARGET_NOTRACK=m | ||
234 | CONFIG_NETFILTER_XT_MATCH_COMMENT=m | ||
235 | CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m | ||
236 | CONFIG_NETFILTER_XT_MATCH_CONNMARK=m | ||
237 | CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m | ||
238 | # CONFIG_NETFILTER_XT_MATCH_DCCP is not set | ||
239 | CONFIG_NETFILTER_XT_MATCH_HELPER=m | ||
240 | CONFIG_NETFILTER_XT_MATCH_LENGTH=m | ||
241 | CONFIG_NETFILTER_XT_MATCH_LIMIT=m | ||
242 | CONFIG_NETFILTER_XT_MATCH_MAC=m | ||
243 | CONFIG_NETFILTER_XT_MATCH_MARK=m | ||
244 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m | ||
245 | CONFIG_NETFILTER_XT_MATCH_REALM=m | ||
246 | CONFIG_NETFILTER_XT_MATCH_SCTP=m | ||
247 | CONFIG_NETFILTER_XT_MATCH_STATE=m | ||
248 | CONFIG_NETFILTER_XT_MATCH_STRING=m | ||
249 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m | ||
223 | 250 | ||
224 | # | 251 | # |
225 | # IP: Netfilter Configuration | 252 | # IP: Netfilter Configuration |
@@ -237,39 +264,23 @@ CONFIG_IP_NF_AMANDA=m | |||
237 | # CONFIG_IP_NF_PPTP is not set | 264 | # CONFIG_IP_NF_PPTP is not set |
238 | CONFIG_IP_NF_QUEUE=m | 265 | CONFIG_IP_NF_QUEUE=m |
239 | CONFIG_IP_NF_IPTABLES=m | 266 | CONFIG_IP_NF_IPTABLES=m |
240 | CONFIG_IP_NF_MATCH_LIMIT=m | ||
241 | CONFIG_IP_NF_MATCH_IPRANGE=m | 267 | CONFIG_IP_NF_MATCH_IPRANGE=m |
242 | CONFIG_IP_NF_MATCH_MAC=m | ||
243 | CONFIG_IP_NF_MATCH_PKTTYPE=m | ||
244 | CONFIG_IP_NF_MATCH_MARK=m | ||
245 | CONFIG_IP_NF_MATCH_MULTIPORT=m | 268 | CONFIG_IP_NF_MATCH_MULTIPORT=m |
246 | CONFIG_IP_NF_MATCH_TOS=m | 269 | CONFIG_IP_NF_MATCH_TOS=m |
247 | CONFIG_IP_NF_MATCH_RECENT=m | 270 | CONFIG_IP_NF_MATCH_RECENT=m |
248 | CONFIG_IP_NF_MATCH_ECN=m | 271 | CONFIG_IP_NF_MATCH_ECN=m |
249 | CONFIG_IP_NF_MATCH_DSCP=m | 272 | CONFIG_IP_NF_MATCH_DSCP=m |
250 | CONFIG_IP_NF_MATCH_AH_ESP=m | 273 | CONFIG_IP_NF_MATCH_AH_ESP=m |
251 | CONFIG_IP_NF_MATCH_LENGTH=m | ||
252 | CONFIG_IP_NF_MATCH_TTL=m | 274 | CONFIG_IP_NF_MATCH_TTL=m |
253 | CONFIG_IP_NF_MATCH_TCPMSS=m | ||
254 | CONFIG_IP_NF_MATCH_HELPER=m | ||
255 | CONFIG_IP_NF_MATCH_STATE=m | ||
256 | CONFIG_IP_NF_MATCH_CONNTRACK=m | ||
257 | CONFIG_IP_NF_MATCH_OWNER=m | 275 | CONFIG_IP_NF_MATCH_OWNER=m |
258 | CONFIG_IP_NF_MATCH_ADDRTYPE=m | 276 | CONFIG_IP_NF_MATCH_ADDRTYPE=m |
259 | CONFIG_IP_NF_MATCH_REALM=m | ||
260 | CONFIG_IP_NF_MATCH_SCTP=m | ||
261 | # CONFIG_IP_NF_MATCH_DCCP is not set | ||
262 | CONFIG_IP_NF_MATCH_COMMENT=m | ||
263 | CONFIG_IP_NF_MATCH_CONNMARK=m | ||
264 | CONFIG_IP_NF_MATCH_CONNBYTES=m | ||
265 | CONFIG_IP_NF_MATCH_HASHLIMIT=m | 277 | CONFIG_IP_NF_MATCH_HASHLIMIT=m |
266 | CONFIG_IP_NF_MATCH_STRING=m | 278 | CONFIG_IP_NF_MATCH_POLICY=m |
267 | CONFIG_IP_NF_FILTER=m | 279 | CONFIG_IP_NF_FILTER=m |
268 | CONFIG_IP_NF_TARGET_REJECT=m | 280 | CONFIG_IP_NF_TARGET_REJECT=m |
269 | CONFIG_IP_NF_TARGET_LOG=m | 281 | CONFIG_IP_NF_TARGET_LOG=m |
270 | CONFIG_IP_NF_TARGET_ULOG=m | 282 | CONFIG_IP_NF_TARGET_ULOG=m |
271 | CONFIG_IP_NF_TARGET_TCPMSS=m | 283 | CONFIG_IP_NF_TARGET_TCPMSS=m |
272 | CONFIG_IP_NF_TARGET_NFQUEUE=m | ||
273 | CONFIG_IP_NF_NAT=m | 284 | CONFIG_IP_NF_NAT=m |
274 | CONFIG_IP_NF_NAT_NEEDED=y | 285 | CONFIG_IP_NF_NAT_NEEDED=y |
275 | CONFIG_IP_NF_TARGET_MASQUERADE=m | 286 | CONFIG_IP_NF_TARGET_MASQUERADE=m |
@@ -285,13 +296,9 @@ CONFIG_IP_NF_MANGLE=m | |||
285 | CONFIG_IP_NF_TARGET_TOS=m | 296 | CONFIG_IP_NF_TARGET_TOS=m |
286 | CONFIG_IP_NF_TARGET_ECN=m | 297 | CONFIG_IP_NF_TARGET_ECN=m |
287 | CONFIG_IP_NF_TARGET_DSCP=m | 298 | CONFIG_IP_NF_TARGET_DSCP=m |
288 | CONFIG_IP_NF_TARGET_MARK=m | ||
289 | CONFIG_IP_NF_TARGET_CLASSIFY=m | ||
290 | CONFIG_IP_NF_TARGET_TTL=m | 299 | CONFIG_IP_NF_TARGET_TTL=m |
291 | CONFIG_IP_NF_TARGET_CONNMARK=m | ||
292 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | 300 | CONFIG_IP_NF_TARGET_CLUSTERIP=m |
293 | CONFIG_IP_NF_RAW=m | 301 | CONFIG_IP_NF_RAW=m |
294 | CONFIG_IP_NF_TARGET_NOTRACK=m | ||
295 | CONFIG_IP_NF_ARPTABLES=m | 302 | CONFIG_IP_NF_ARPTABLES=m |
296 | CONFIG_IP_NF_ARPFILTER=m | 303 | CONFIG_IP_NF_ARPFILTER=m |
297 | CONFIG_IP_NF_ARP_MANGLE=m | 304 | CONFIG_IP_NF_ARP_MANGLE=m |
@@ -305,6 +312,11 @@ CONFIG_IP_NF_ARP_MANGLE=m | |||
305 | # SCTP Configuration (EXPERIMENTAL) | 312 | # SCTP Configuration (EXPERIMENTAL) |
306 | # | 313 | # |
307 | # CONFIG_IP_SCTP is not set | 314 | # CONFIG_IP_SCTP is not set |
315 | |||
316 | # | ||
317 | # TIPC Configuration (EXPERIMENTAL) | ||
318 | # | ||
319 | # CONFIG_TIPC is not set | ||
308 | # CONFIG_ATM is not set | 320 | # CONFIG_ATM is not set |
309 | # CONFIG_BRIDGE is not set | 321 | # CONFIG_BRIDGE is not set |
310 | # CONFIG_VLAN_8021Q is not set | 322 | # CONFIG_VLAN_8021Q is not set |
@@ -451,13 +463,7 @@ CONFIG_SCSI_IBMVSCSI=m | |||
451 | # CONFIG_SCSI_IPR is not set | 463 | # CONFIG_SCSI_IPR is not set |
452 | # CONFIG_SCSI_QLOGIC_FC is not set | 464 | # CONFIG_SCSI_QLOGIC_FC is not set |
453 | # CONFIG_SCSI_QLOGIC_1280 is not set | 465 | # CONFIG_SCSI_QLOGIC_1280 is not set |
454 | CONFIG_SCSI_QLA2XXX=y | 466 | # CONFIG_SCSI_QLA_FC is not set |
455 | # CONFIG_SCSI_QLA21XX is not set | ||
456 | # CONFIG_SCSI_QLA22XX is not set | ||
457 | # CONFIG_SCSI_QLA2300 is not set | ||
458 | # CONFIG_SCSI_QLA2322 is not set | ||
459 | # CONFIG_SCSI_QLA6312 is not set | ||
460 | # CONFIG_SCSI_QLA24XX is not set | ||
461 | # CONFIG_SCSI_LPFC is not set | 467 | # CONFIG_SCSI_LPFC is not set |
462 | # CONFIG_SCSI_DC395x is not set | 468 | # CONFIG_SCSI_DC395x is not set |
463 | # CONFIG_SCSI_DC390T is not set | 469 | # CONFIG_SCSI_DC390T is not set |
@@ -574,6 +580,7 @@ CONFIG_E1000=m | |||
574 | # CONFIG_R8169 is not set | 580 | # CONFIG_R8169 is not set |
575 | # CONFIG_SIS190 is not set | 581 | # CONFIG_SIS190 is not set |
576 | # CONFIG_SKGE is not set | 582 | # CONFIG_SKGE is not set |
583 | # CONFIG_SKY2 is not set | ||
577 | # CONFIG_SK98LIN is not set | 584 | # CONFIG_SK98LIN is not set |
578 | # CONFIG_VIA_VELOCITY is not set | 585 | # CONFIG_VIA_VELOCITY is not set |
579 | # CONFIG_TIGON3 is not set | 586 | # CONFIG_TIGON3 is not set |
@@ -723,6 +730,12 @@ CONFIG_MAX_RAW_DEVS=256 | |||
723 | # CONFIG_I2C is not set | 730 | # CONFIG_I2C is not set |
724 | 731 | ||
725 | # | 732 | # |
733 | # SPI support | ||
734 | # | ||
735 | # CONFIG_SPI is not set | ||
736 | # CONFIG_SPI_MASTER is not set | ||
737 | |||
738 | # | ||
726 | # Dallas's 1-wire bus | 739 | # Dallas's 1-wire bus |
727 | # | 740 | # |
728 | # CONFIG_W1 is not set | 741 | # CONFIG_W1 is not set |
@@ -788,7 +801,7 @@ CONFIG_USB_ARCH_HAS_OHCI=y | |||
788 | # CONFIG_INFINIBAND is not set | 801 | # CONFIG_INFINIBAND is not set |
789 | 802 | ||
790 | # | 803 | # |
791 | # SN Devices | 804 | # EDAC - error detection and reporting (RAS) (EXPERIMENTAL) |
792 | # | 805 | # |
793 | 806 | ||
794 | # | 807 | # |
@@ -825,6 +838,7 @@ CONFIG_XFS_EXPORT=y | |||
825 | CONFIG_XFS_SECURITY=y | 838 | CONFIG_XFS_SECURITY=y |
826 | CONFIG_XFS_POSIX_ACL=y | 839 | CONFIG_XFS_POSIX_ACL=y |
827 | # CONFIG_XFS_RT is not set | 840 | # CONFIG_XFS_RT is not set |
841 | # CONFIG_OCFS2_FS is not set | ||
828 | # CONFIG_MINIX_FS is not set | 842 | # CONFIG_MINIX_FS is not set |
829 | # CONFIG_ROMFS_FS is not set | 843 | # CONFIG_ROMFS_FS is not set |
830 | CONFIG_INOTIFY=y | 844 | CONFIG_INOTIFY=y |
@@ -865,6 +879,7 @@ CONFIG_TMPFS=y | |||
865 | # CONFIG_HUGETLB_PAGE is not set | 879 | # CONFIG_HUGETLB_PAGE is not set |
866 | CONFIG_RAMFS=y | 880 | CONFIG_RAMFS=y |
867 | # CONFIG_RELAYFS_FS is not set | 881 | # CONFIG_RELAYFS_FS is not set |
882 | # CONFIG_CONFIGFS_FS is not set | ||
868 | 883 | ||
869 | # | 884 | # |
870 | # Miscellaneous filesystems | 885 | # Miscellaneous filesystems |
@@ -993,31 +1008,36 @@ CONFIG_TEXTSEARCH_FSM=m | |||
993 | # | 1008 | # |
994 | # Instrumentation Support | 1009 | # Instrumentation Support |
995 | # | 1010 | # |
996 | CONFIG_PROFILING=y | ||
997 | CONFIG_OPROFILE=y | ||
998 | # CONFIG_KPROBES is not set | 1011 | # CONFIG_KPROBES is not set |
999 | 1012 | ||
1000 | # | 1013 | # |
1001 | # Kernel hacking | 1014 | # Kernel hacking |
1002 | # | 1015 | # |
1003 | # CONFIG_PRINTK_TIME is not set | 1016 | # CONFIG_PRINTK_TIME is not set |
1004 | CONFIG_DEBUG_KERNEL=y | ||
1005 | CONFIG_MAGIC_SYSRQ=y | 1017 | CONFIG_MAGIC_SYSRQ=y |
1018 | CONFIG_DEBUG_KERNEL=y | ||
1006 | CONFIG_LOG_BUF_SHIFT=17 | 1019 | CONFIG_LOG_BUF_SHIFT=17 |
1007 | CONFIG_DETECT_SOFTLOCKUP=y | 1020 | CONFIG_DETECT_SOFTLOCKUP=y |
1008 | # CONFIG_SCHEDSTATS is not set | 1021 | # CONFIG_SCHEDSTATS is not set |
1009 | # CONFIG_DEBUG_SLAB is not set | 1022 | # CONFIG_DEBUG_SLAB is not set |
1023 | # CONFIG_DEBUG_MUTEXES is not set | ||
1010 | # CONFIG_DEBUG_SPINLOCK is not set | 1024 | # CONFIG_DEBUG_SPINLOCK is not set |
1011 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | 1025 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set |
1012 | # CONFIG_DEBUG_KOBJECT is not set | 1026 | # CONFIG_DEBUG_KOBJECT is not set |
1013 | # CONFIG_DEBUG_INFO is not set | 1027 | # CONFIG_DEBUG_INFO is not set |
1014 | CONFIG_DEBUG_FS=y | 1028 | CONFIG_DEBUG_FS=y |
1015 | # CONFIG_DEBUG_VM is not set | 1029 | # CONFIG_DEBUG_VM is not set |
1030 | # CONFIG_FORCED_INLINING is not set | ||
1016 | # CONFIG_RCU_TORTURE_TEST is not set | 1031 | # CONFIG_RCU_TORTURE_TEST is not set |
1017 | CONFIG_DEBUG_STACKOVERFLOW=y | 1032 | CONFIG_DEBUG_STACKOVERFLOW=y |
1018 | CONFIG_DEBUG_STACK_USAGE=y | 1033 | CONFIG_DEBUG_STACK_USAGE=y |
1019 | # CONFIG_DEBUGGER is not set | 1034 | # CONFIG_DEBUGGER is not set |
1020 | CONFIG_IRQSTACKS=y | 1035 | CONFIG_IRQSTACKS=y |
1036 | # CONFIG_PPC_EARLY_DEBUG_LPAR is not set | ||
1037 | # CONFIG_PPC_EARLY_DEBUG_G5 is not set | ||
1038 | # CONFIG_PPC_EARLY_DEBUG_RTAS is not set | ||
1039 | # CONFIG_PPC_EARLY_DEBUG_MAPLE is not set | ||
1040 | # CONFIG_PPC_EARLY_DEBUG_ISERIES is not set | ||
1021 | 1041 | ||
1022 | # | 1042 | # |
1023 | # Security options | 1043 | # Security options |
diff --git a/arch/powerpc/configs/maple_defconfig b/arch/powerpc/configs/maple_defconfig index 68194c03f6d1..80a0db43aeb7 100644 --- a/arch/powerpc/configs/maple_defconfig +++ b/arch/powerpc/configs/maple_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.15-rc5 | 3 | # Linux kernel version: 2.6.16-rc6 |
4 | # Tue Dec 20 15:59:36 2005 | 4 | # Wed Mar 15 16:19:54 2006 |
5 | # | 5 | # |
6 | CONFIG_PPC64=y | 6 | CONFIG_PPC64=y |
7 | CONFIG_64BIT=y | 7 | CONFIG_64BIT=y |
@@ -16,6 +16,10 @@ CONFIG_COMPAT=y | |||
16 | CONFIG_SYSVIPC_COMPAT=y | 16 | CONFIG_SYSVIPC_COMPAT=y |
17 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | 17 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y |
18 | CONFIG_ARCH_MAY_HAVE_PC_FDC=y | 18 | CONFIG_ARCH_MAY_HAVE_PC_FDC=y |
19 | CONFIG_PPC_OF=y | ||
20 | CONFIG_PPC_UDBG_16550=y | ||
21 | CONFIG_GENERIC_TBSYNC=y | ||
22 | # CONFIG_DEFAULT_UIMAGE is not set | ||
19 | 23 | ||
20 | # | 24 | # |
21 | # Processor support | 25 | # Processor support |
@@ -32,7 +36,6 @@ CONFIG_NR_CPUS=2 | |||
32 | # Code maturity level options | 36 | # Code maturity level options |
33 | # | 37 | # |
34 | CONFIG_EXPERIMENTAL=y | 38 | CONFIG_EXPERIMENTAL=y |
35 | CONFIG_CLEAN_COMPILE=y | ||
36 | CONFIG_LOCK_KERNEL=y | 39 | CONFIG_LOCK_KERNEL=y |
37 | CONFIG_INIT_ENV_ARG_LIMIT=32 | 40 | CONFIG_INIT_ENV_ARG_LIMIT=32 |
38 | 41 | ||
@@ -47,8 +50,6 @@ CONFIG_POSIX_MQUEUE=y | |||
47 | # CONFIG_BSD_PROCESS_ACCT is not set | 50 | # CONFIG_BSD_PROCESS_ACCT is not set |
48 | CONFIG_SYSCTL=y | 51 | CONFIG_SYSCTL=y |
49 | # CONFIG_AUDIT is not set | 52 | # CONFIG_AUDIT is not set |
50 | # CONFIG_HOTPLUG is not set | ||
51 | CONFIG_KOBJECT_UEVENT=y | ||
52 | CONFIG_IKCONFIG=y | 53 | CONFIG_IKCONFIG=y |
53 | CONFIG_IKCONFIG_PROC=y | 54 | CONFIG_IKCONFIG_PROC=y |
54 | # CONFIG_CPUSETS is not set | 55 | # CONFIG_CPUSETS is not set |
@@ -58,8 +59,10 @@ CONFIG_CC_OPTIMIZE_FOR_SIZE=y | |||
58 | CONFIG_KALLSYMS=y | 59 | CONFIG_KALLSYMS=y |
59 | CONFIG_KALLSYMS_ALL=y | 60 | CONFIG_KALLSYMS_ALL=y |
60 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 61 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
62 | CONFIG_HOTPLUG=y | ||
61 | CONFIG_PRINTK=y | 63 | CONFIG_PRINTK=y |
62 | CONFIG_BUG=y | 64 | CONFIG_BUG=y |
65 | CONFIG_ELF_CORE=y | ||
63 | CONFIG_BASE_FULL=y | 66 | CONFIG_BASE_FULL=y |
64 | CONFIG_FUTEX=y | 67 | CONFIG_FUTEX=y |
65 | CONFIG_EPOLL=y | 68 | CONFIG_EPOLL=y |
@@ -68,8 +71,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0 | |||
68 | CONFIG_CC_ALIGN_LABELS=0 | 71 | CONFIG_CC_ALIGN_LABELS=0 |
69 | CONFIG_CC_ALIGN_LOOPS=0 | 72 | CONFIG_CC_ALIGN_LOOPS=0 |
70 | CONFIG_CC_ALIGN_JUMPS=0 | 73 | CONFIG_CC_ALIGN_JUMPS=0 |
74 | CONFIG_SLAB=y | ||
71 | # CONFIG_TINY_SHMEM is not set | 75 | # CONFIG_TINY_SHMEM is not set |
72 | CONFIG_BASE_SMALL=0 | 76 | CONFIG_BASE_SMALL=0 |
77 | # CONFIG_SLOB is not set | ||
73 | 78 | ||
74 | # | 79 | # |
75 | # Loadable module support | 80 | # Loadable module support |
@@ -111,14 +116,12 @@ CONFIG_PPC_MULTIPLATFORM=y | |||
111 | # CONFIG_PPC_PMAC is not set | 116 | # CONFIG_PPC_PMAC is not set |
112 | CONFIG_PPC_MAPLE=y | 117 | CONFIG_PPC_MAPLE=y |
113 | # CONFIG_PPC_CELL is not set | 118 | # CONFIG_PPC_CELL is not set |
114 | CONFIG_PPC_OF=y | ||
115 | CONFIG_U3_DART=y | 119 | CONFIG_U3_DART=y |
116 | CONFIG_MPIC=y | 120 | CONFIG_MPIC=y |
117 | # CONFIG_PPC_RTAS is not set | 121 | # CONFIG_PPC_RTAS is not set |
118 | # CONFIG_MMIO_NVRAM is not set | 122 | # CONFIG_MMIO_NVRAM is not set |
119 | CONFIG_MPIC_BROKEN_U3=y | 123 | CONFIG_MPIC_BROKEN_U3=y |
120 | # CONFIG_PPC_MPC106 is not set | 124 | # CONFIG_PPC_MPC106 is not set |
121 | CONFIG_GENERIC_TBSYNC=y | ||
122 | # CONFIG_CPU_FREQ is not set | 125 | # CONFIG_CPU_FREQ is not set |
123 | # CONFIG_WANT_EARLY_SERIAL is not set | 126 | # CONFIG_WANT_EARLY_SERIAL is not set |
124 | 127 | ||
@@ -138,6 +141,7 @@ CONFIG_BINFMT_ELF=y | |||
138 | CONFIG_FORCE_MAX_ZONEORDER=13 | 141 | CONFIG_FORCE_MAX_ZONEORDER=13 |
139 | CONFIG_IOMMU_VMERGE=y | 142 | CONFIG_IOMMU_VMERGE=y |
140 | CONFIG_KEXEC=y | 143 | CONFIG_KEXEC=y |
144 | # CONFIG_CRASH_DUMP is not set | ||
141 | CONFIG_IRQ_ALL_CPUS=y | 145 | CONFIG_IRQ_ALL_CPUS=y |
142 | # CONFIG_NUMA is not set | 146 | # CONFIG_NUMA is not set |
143 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | 147 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y |
@@ -189,6 +193,7 @@ CONFIG_NET=y | |||
189 | # | 193 | # |
190 | # Networking options | 194 | # Networking options |
191 | # | 195 | # |
196 | # CONFIG_NETDEBUG is not set | ||
192 | CONFIG_PACKET=y | 197 | CONFIG_PACKET=y |
193 | CONFIG_PACKET_MMAP=y | 198 | CONFIG_PACKET_MMAP=y |
194 | CONFIG_UNIX=y | 199 | CONFIG_UNIX=y |
@@ -226,6 +231,11 @@ CONFIG_TCP_CONG_BIC=y | |||
226 | # SCTP Configuration (EXPERIMENTAL) | 231 | # SCTP Configuration (EXPERIMENTAL) |
227 | # | 232 | # |
228 | # CONFIG_IP_SCTP is not set | 233 | # CONFIG_IP_SCTP is not set |
234 | |||
235 | # | ||
236 | # TIPC Configuration (EXPERIMENTAL) | ||
237 | # | ||
238 | # CONFIG_TIPC is not set | ||
229 | # CONFIG_ATM is not set | 239 | # CONFIG_ATM is not set |
230 | # CONFIG_BRIDGE is not set | 240 | # CONFIG_BRIDGE is not set |
231 | # CONFIG_VLAN_8021Q is not set | 241 | # CONFIG_VLAN_8021Q is not set |
@@ -461,6 +471,7 @@ CONFIG_E1000=y | |||
461 | # CONFIG_R8169 is not set | 471 | # CONFIG_R8169 is not set |
462 | # CONFIG_SIS190 is not set | 472 | # CONFIG_SIS190 is not set |
463 | # CONFIG_SKGE is not set | 473 | # CONFIG_SKGE is not set |
474 | # CONFIG_SKY2 is not set | ||
464 | # CONFIG_SK98LIN is not set | 475 | # CONFIG_SK98LIN is not set |
465 | # CONFIG_VIA_VELOCITY is not set | 476 | # CONFIG_VIA_VELOCITY is not set |
466 | # CONFIG_TIGON3 is not set | 477 | # CONFIG_TIGON3 is not set |
@@ -553,6 +564,7 @@ CONFIG_HW_CONSOLE=y | |||
553 | CONFIG_SERIAL_8250=y | 564 | CONFIG_SERIAL_8250=y |
554 | CONFIG_SERIAL_8250_CONSOLE=y | 565 | CONFIG_SERIAL_8250_CONSOLE=y |
555 | CONFIG_SERIAL_8250_NR_UARTS=4 | 566 | CONFIG_SERIAL_8250_NR_UARTS=4 |
567 | CONFIG_SERIAL_8250_RUNTIME_UARTS=4 | ||
556 | # CONFIG_SERIAL_8250_EXTENDED is not set | 568 | # CONFIG_SERIAL_8250_EXTENDED is not set |
557 | 569 | ||
558 | # | 570 | # |
@@ -651,6 +663,12 @@ CONFIG_I2C_AMD8111=y | |||
651 | # CONFIG_I2C_DEBUG_CHIP is not set | 663 | # CONFIG_I2C_DEBUG_CHIP is not set |
652 | 664 | ||
653 | # | 665 | # |
666 | # SPI support | ||
667 | # | ||
668 | # CONFIG_SPI is not set | ||
669 | # CONFIG_SPI_MASTER is not set | ||
670 | |||
671 | # | ||
654 | # Dallas's 1-wire bus | 672 | # Dallas's 1-wire bus |
655 | # | 673 | # |
656 | # CONFIG_W1 is not set | 674 | # CONFIG_W1 is not set |
@@ -738,12 +756,14 @@ CONFIG_USB_UHCI_HCD=y | |||
738 | # may also be needed; see USB_STORAGE Help for more information | 756 | # may also be needed; see USB_STORAGE Help for more information |
739 | # | 757 | # |
740 | # CONFIG_USB_STORAGE is not set | 758 | # CONFIG_USB_STORAGE is not set |
759 | # CONFIG_USB_LIBUSUAL is not set | ||
741 | 760 | ||
742 | # | 761 | # |
743 | # USB Input Devices | 762 | # USB Input Devices |
744 | # | 763 | # |
745 | CONFIG_USB_HID=y | 764 | CONFIG_USB_HID=y |
746 | CONFIG_USB_HIDINPUT=y | 765 | CONFIG_USB_HIDINPUT=y |
766 | # CONFIG_USB_HIDINPUT_POWERBOOK is not set | ||
747 | # CONFIG_HID_FF is not set | 767 | # CONFIG_HID_FF is not set |
748 | # CONFIG_USB_HIDDEV is not set | 768 | # CONFIG_USB_HIDDEV is not set |
749 | # CONFIG_USB_AIPTEK is not set | 769 | # CONFIG_USB_AIPTEK is not set |
@@ -757,6 +777,7 @@ CONFIG_USB_HIDINPUT=y | |||
757 | # CONFIG_USB_YEALINK is not set | 777 | # CONFIG_USB_YEALINK is not set |
758 | # CONFIG_USB_XPAD is not set | 778 | # CONFIG_USB_XPAD is not set |
759 | # CONFIG_USB_ATI_REMOTE is not set | 779 | # CONFIG_USB_ATI_REMOTE is not set |
780 | # CONFIG_USB_ATI_REMOTE2 is not set | ||
760 | # CONFIG_USB_KEYSPAN_REMOTE is not set | 781 | # CONFIG_USB_KEYSPAN_REMOTE is not set |
761 | # CONFIG_USB_APPLETOUCH is not set | 782 | # CONFIG_USB_APPLETOUCH is not set |
762 | 783 | ||
@@ -797,6 +818,7 @@ CONFIG_USB_SERIAL_GENERIC=y | |||
797 | # CONFIG_USB_SERIAL_AIRPRIME is not set | 818 | # CONFIG_USB_SERIAL_AIRPRIME is not set |
798 | # CONFIG_USB_SERIAL_ANYDATA is not set | 819 | # CONFIG_USB_SERIAL_ANYDATA is not set |
799 | # CONFIG_USB_SERIAL_BELKIN is not set | 820 | # CONFIG_USB_SERIAL_BELKIN is not set |
821 | # CONFIG_USB_SERIAL_WHITEHEAT is not set | ||
800 | # CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set | 822 | # CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set |
801 | # CONFIG_USB_SERIAL_CP2101 is not set | 823 | # CONFIG_USB_SERIAL_CP2101 is not set |
802 | CONFIG_USB_SERIAL_CYPRESS_M8=m | 824 | CONFIG_USB_SERIAL_CYPRESS_M8=m |
@@ -873,7 +895,7 @@ CONFIG_USB_EZUSB=y | |||
873 | # CONFIG_INFINIBAND is not set | 895 | # CONFIG_INFINIBAND is not set |
874 | 896 | ||
875 | # | 897 | # |
876 | # SN Devices | 898 | # EDAC - error detection and reporting (RAS) (EXPERIMENTAL) |
877 | # | 899 | # |
878 | 900 | ||
879 | # | 901 | # |
@@ -891,6 +913,7 @@ CONFIG_JBD=y | |||
891 | # CONFIG_JFS_FS is not set | 913 | # CONFIG_JFS_FS is not set |
892 | CONFIG_FS_POSIX_ACL=y | 914 | CONFIG_FS_POSIX_ACL=y |
893 | # CONFIG_XFS_FS is not set | 915 | # CONFIG_XFS_FS is not set |
916 | # CONFIG_OCFS2_FS is not set | ||
894 | # CONFIG_MINIX_FS is not set | 917 | # CONFIG_MINIX_FS is not set |
895 | # CONFIG_ROMFS_FS is not set | 918 | # CONFIG_ROMFS_FS is not set |
896 | CONFIG_INOTIFY=y | 919 | CONFIG_INOTIFY=y |
@@ -927,6 +950,7 @@ CONFIG_HUGETLBFS=y | |||
927 | CONFIG_HUGETLB_PAGE=y | 950 | CONFIG_HUGETLB_PAGE=y |
928 | CONFIG_RAMFS=y | 951 | CONFIG_RAMFS=y |
929 | # CONFIG_RELAYFS_FS is not set | 952 | # CONFIG_RELAYFS_FS is not set |
953 | # CONFIG_CONFIGFS_FS is not set | ||
930 | 954 | ||
931 | # | 955 | # |
932 | # Miscellaneous filesystems | 956 | # Miscellaneous filesystems |
@@ -988,6 +1012,7 @@ CONFIG_MSDOS_PARTITION=y | |||
988 | # CONFIG_SGI_PARTITION is not set | 1012 | # CONFIG_SGI_PARTITION is not set |
989 | # CONFIG_ULTRIX_PARTITION is not set | 1013 | # CONFIG_ULTRIX_PARTITION is not set |
990 | # CONFIG_SUN_PARTITION is not set | 1014 | # CONFIG_SUN_PARTITION is not set |
1015 | # CONFIG_KARMA_PARTITION is not set | ||
991 | # CONFIG_EFI_PARTITION is not set | 1016 | # CONFIG_EFI_PARTITION is not set |
992 | 1017 | ||
993 | # | 1018 | # |
@@ -1053,18 +1078,20 @@ CONFIG_ZLIB_INFLATE=y | |||
1053 | # Kernel hacking | 1078 | # Kernel hacking |
1054 | # | 1079 | # |
1055 | # CONFIG_PRINTK_TIME is not set | 1080 | # CONFIG_PRINTK_TIME is not set |
1056 | CONFIG_DEBUG_KERNEL=y | ||
1057 | CONFIG_MAGIC_SYSRQ=y | 1081 | CONFIG_MAGIC_SYSRQ=y |
1082 | CONFIG_DEBUG_KERNEL=y | ||
1058 | CONFIG_LOG_BUF_SHIFT=17 | 1083 | CONFIG_LOG_BUF_SHIFT=17 |
1059 | CONFIG_DETECT_SOFTLOCKUP=y | 1084 | CONFIG_DETECT_SOFTLOCKUP=y |
1060 | # CONFIG_SCHEDSTATS is not set | 1085 | # CONFIG_SCHEDSTATS is not set |
1061 | CONFIG_DEBUG_SLAB=y | 1086 | CONFIG_DEBUG_SLAB=y |
1087 | # CONFIG_DEBUG_MUTEXES is not set | ||
1062 | # CONFIG_DEBUG_SPINLOCK is not set | 1088 | # CONFIG_DEBUG_SPINLOCK is not set |
1063 | CONFIG_DEBUG_SPINLOCK_SLEEP=y | 1089 | CONFIG_DEBUG_SPINLOCK_SLEEP=y |
1064 | # CONFIG_DEBUG_KOBJECT is not set | 1090 | # CONFIG_DEBUG_KOBJECT is not set |
1065 | # CONFIG_DEBUG_INFO is not set | 1091 | # CONFIG_DEBUG_INFO is not set |
1066 | CONFIG_DEBUG_FS=y | 1092 | CONFIG_DEBUG_FS=y |
1067 | # CONFIG_DEBUG_VM is not set | 1093 | # CONFIG_DEBUG_VM is not set |
1094 | # CONFIG_FORCED_INLINING is not set | ||
1068 | # CONFIG_RCU_TORTURE_TEST is not set | 1095 | # CONFIG_RCU_TORTURE_TEST is not set |
1069 | CONFIG_DEBUG_STACKOVERFLOW=y | 1096 | CONFIG_DEBUG_STACKOVERFLOW=y |
1070 | CONFIG_DEBUG_STACK_USAGE=y | 1097 | CONFIG_DEBUG_STACK_USAGE=y |
@@ -1073,6 +1100,11 @@ CONFIG_XMON=y | |||
1073 | CONFIG_XMON_DEFAULT=y | 1100 | CONFIG_XMON_DEFAULT=y |
1074 | # CONFIG_IRQSTACKS is not set | 1101 | # CONFIG_IRQSTACKS is not set |
1075 | CONFIG_BOOTX_TEXT=y | 1102 | CONFIG_BOOTX_TEXT=y |
1103 | # CONFIG_PPC_EARLY_DEBUG_LPAR is not set | ||
1104 | # CONFIG_PPC_EARLY_DEBUG_G5 is not set | ||
1105 | # CONFIG_PPC_EARLY_DEBUG_RTAS is not set | ||
1106 | # CONFIG_PPC_EARLY_DEBUG_MAPLE is not set | ||
1107 | # CONFIG_PPC_EARLY_DEBUG_ISERIES is not set | ||
1076 | 1108 | ||
1077 | # | 1109 | # |
1078 | # Security options | 1110 | # Security options |
diff --git a/arch/powerpc/configs/mpc834x_sys_defconfig b/arch/powerpc/configs/mpc834x_sys_defconfig index 3bff761965c2..5078b0441d61 100644 --- a/arch/powerpc/configs/mpc834x_sys_defconfig +++ b/arch/powerpc/configs/mpc834x_sys_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.15-g461d4edf-dirty | 3 | # Linux kernel version: 2.6.16-rc6 |
4 | # Fri Jan 13 11:01:47 2006 | 4 | # Wed Mar 15 16:19:56 2006 |
5 | # | 5 | # |
6 | # CONFIG_PPC64 is not set | 6 | # CONFIG_PPC64 is not set |
7 | CONFIG_PPC32=y | 7 | CONFIG_PPC32=y |
@@ -43,7 +43,6 @@ CONFIG_PPC_STD_MMU_32=y | |||
43 | # Code maturity level options | 43 | # Code maturity level options |
44 | # | 44 | # |
45 | CONFIG_EXPERIMENTAL=y | 45 | CONFIG_EXPERIMENTAL=y |
46 | CONFIG_CLEAN_COMPILE=y | ||
47 | CONFIG_BROKEN_ON_SMP=y | 46 | CONFIG_BROKEN_ON_SMP=y |
48 | CONFIG_INIT_ENV_ARG_LIMIT=32 | 47 | CONFIG_INIT_ENV_ARG_LIMIT=32 |
49 | 48 | ||
@@ -189,6 +188,7 @@ CONFIG_NET=y | |||
189 | # | 188 | # |
190 | # Networking options | 189 | # Networking options |
191 | # | 190 | # |
191 | # CONFIG_NETDEBUG is not set | ||
192 | CONFIG_PACKET=y | 192 | CONFIG_PACKET=y |
193 | # CONFIG_PACKET_MMAP is not set | 193 | # CONFIG_PACKET_MMAP is not set |
194 | CONFIG_UNIX=y | 194 | CONFIG_UNIX=y |
@@ -226,6 +226,11 @@ CONFIG_TCP_CONG_BIC=y | |||
226 | # SCTP Configuration (EXPERIMENTAL) | 226 | # SCTP Configuration (EXPERIMENTAL) |
227 | # | 227 | # |
228 | # CONFIG_IP_SCTP is not set | 228 | # CONFIG_IP_SCTP is not set |
229 | |||
230 | # | ||
231 | # TIPC Configuration (EXPERIMENTAL) | ||
232 | # | ||
233 | # CONFIG_TIPC is not set | ||
229 | # CONFIG_ATM is not set | 234 | # CONFIG_ATM is not set |
230 | # CONFIG_BRIDGE is not set | 235 | # CONFIG_BRIDGE is not set |
231 | # CONFIG_VLAN_8021Q is not set | 236 | # CONFIG_VLAN_8021Q is not set |
@@ -511,6 +516,7 @@ CONFIG_SERIAL_8250_RUNTIME_UARTS=4 | |||
511 | # | 516 | # |
512 | CONFIG_SERIAL_CORE=y | 517 | CONFIG_SERIAL_CORE=y |
513 | CONFIG_SERIAL_CORE_CONSOLE=y | 518 | CONFIG_SERIAL_CORE_CONSOLE=y |
519 | # CONFIG_SERIAL_JSM is not set | ||
514 | CONFIG_UNIX98_PTYS=y | 520 | CONFIG_UNIX98_PTYS=y |
515 | CONFIG_LEGACY_PTYS=y | 521 | CONFIG_LEGACY_PTYS=y |
516 | CONFIG_LEGACY_PTY_COUNT=256 | 522 | CONFIG_LEGACY_PTY_COUNT=256 |
@@ -615,6 +621,12 @@ CONFIG_I2C_MPC=y | |||
615 | # CONFIG_I2C_DEBUG_CHIP is not set | 621 | # CONFIG_I2C_DEBUG_CHIP is not set |
616 | 622 | ||
617 | # | 623 | # |
624 | # SPI support | ||
625 | # | ||
626 | # CONFIG_SPI is not set | ||
627 | # CONFIG_SPI_MASTER is not set | ||
628 | |||
629 | # | ||
618 | # Dallas's 1-wire bus | 630 | # Dallas's 1-wire bus |
619 | # | 631 | # |
620 | # CONFIG_W1 is not set | 632 | # CONFIG_W1 is not set |
@@ -632,6 +644,7 @@ CONFIG_HWMON=y | |||
632 | # CONFIG_SENSORS_ASB100 is not set | 644 | # CONFIG_SENSORS_ASB100 is not set |
633 | # CONFIG_SENSORS_ATXP1 is not set | 645 | # CONFIG_SENSORS_ATXP1 is not set |
634 | # CONFIG_SENSORS_DS1621 is not set | 646 | # CONFIG_SENSORS_DS1621 is not set |
647 | # CONFIG_SENSORS_F71805F is not set | ||
635 | # CONFIG_SENSORS_FSCHER is not set | 648 | # CONFIG_SENSORS_FSCHER is not set |
636 | # CONFIG_SENSORS_FSCPOS is not set | 649 | # CONFIG_SENSORS_FSCPOS is not set |
637 | # CONFIG_SENSORS_GL518SM is not set | 650 | # CONFIG_SENSORS_GL518SM is not set |
@@ -716,7 +729,7 @@ CONFIG_USB_ARCH_HAS_OHCI=y | |||
716 | # CONFIG_INFINIBAND is not set | 729 | # CONFIG_INFINIBAND is not set |
717 | 730 | ||
718 | # | 731 | # |
719 | # SN Devices | 732 | # EDAC - error detection and reporting (RAS) (EXPERIMENTAL) |
720 | # | 733 | # |
721 | 734 | ||
722 | # | 735 | # |
@@ -826,6 +839,7 @@ CONFIG_PARTITION_ADVANCED=y | |||
826 | # CONFIG_SGI_PARTITION is not set | 839 | # CONFIG_SGI_PARTITION is not set |
827 | # CONFIG_ULTRIX_PARTITION is not set | 840 | # CONFIG_ULTRIX_PARTITION is not set |
828 | # CONFIG_SUN_PARTITION is not set | 841 | # CONFIG_SUN_PARTITION is not set |
842 | # CONFIG_KARMA_PARTITION is not set | ||
829 | # CONFIG_EFI_PARTITION is not set | 843 | # CONFIG_EFI_PARTITION is not set |
830 | 844 | ||
831 | # | 845 | # |
@@ -899,13 +913,3 @@ CONFIG_CRYPTO_DES=y | |||
899 | # | 913 | # |
900 | # Hardware crypto devices | 914 | # Hardware crypto devices |
901 | # | 915 | # |
902 | |||
903 | # | ||
904 | # SEC2.x Options | ||
905 | # | ||
906 | CONFIG_MPC8349E_SEC2x=y | ||
907 | |||
908 | # | ||
909 | # SEC2.x Test Options | ||
910 | # | ||
911 | CONFIG_MPC8349E_SEC2xTEST=y | ||
diff --git a/arch/powerpc/configs/pmac32_defconfig b/arch/powerpc/configs/pmac32_defconfig index 2ace57d1e333..57a027971d67 100644 --- a/arch/powerpc/configs/pmac32_defconfig +++ b/arch/powerpc/configs/pmac32_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.15 | 3 | # Linux kernel version: 2.6.16-rc6 |
4 | # Sat Jan 14 16:26:08 2006 | 4 | # Wed Mar 15 16:21:32 2006 |
5 | # | 5 | # |
6 | # CONFIG_PPC64 is not set | 6 | # CONFIG_PPC64 is not set |
7 | CONFIG_PPC32=y | 7 | CONFIG_PPC32=y |
@@ -17,8 +17,8 @@ CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | |||
17 | CONFIG_ARCH_MAY_HAVE_PC_FDC=y | 17 | CONFIG_ARCH_MAY_HAVE_PC_FDC=y |
18 | CONFIG_PPC_OF=y | 18 | CONFIG_PPC_OF=y |
19 | # CONFIG_PPC_UDBG_16550 is not set | 19 | # CONFIG_PPC_UDBG_16550 is not set |
20 | # CONFIG_CRASH_DUMP is not set | ||
21 | # CONFIG_GENERIC_TBSYNC is not set | 20 | # CONFIG_GENERIC_TBSYNC is not set |
21 | # CONFIG_DEFAULT_UIMAGE is not set | ||
22 | 22 | ||
23 | # | 23 | # |
24 | # Processor support | 24 | # Processor support |
@@ -43,7 +43,6 @@ CONFIG_PPC_STD_MMU_32=y | |||
43 | # Code maturity level options | 43 | # Code maturity level options |
44 | # | 44 | # |
45 | CONFIG_EXPERIMENTAL=y | 45 | CONFIG_EXPERIMENTAL=y |
46 | CONFIG_CLEAN_COMPILE=y | ||
47 | CONFIG_BROKEN_ON_SMP=y | 46 | CONFIG_BROKEN_ON_SMP=y |
48 | CONFIG_INIT_ENV_ARG_LIMIT=32 | 47 | CONFIG_INIT_ENV_ARG_LIMIT=32 |
49 | 48 | ||
@@ -236,6 +235,7 @@ CONFIG_NET=y | |||
236 | # | 235 | # |
237 | # Networking options | 236 | # Networking options |
238 | # | 237 | # |
238 | # CONFIG_NETDEBUG is not set | ||
239 | CONFIG_PACKET=y | 239 | CONFIG_PACKET=y |
240 | # CONFIG_PACKET_MMAP is not set | 240 | # CONFIG_PACKET_MMAP is not set |
241 | CONFIG_UNIX=y | 241 | CONFIG_UNIX=y |
@@ -271,6 +271,25 @@ CONFIG_NETFILTER=y | |||
271 | # Core Netfilter Configuration | 271 | # Core Netfilter Configuration |
272 | # | 272 | # |
273 | # CONFIG_NETFILTER_NETLINK is not set | 273 | # CONFIG_NETFILTER_NETLINK is not set |
274 | CONFIG_NETFILTER_XTABLES=m | ||
275 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m | ||
276 | CONFIG_NETFILTER_XT_TARGET_MARK=m | ||
277 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | ||
278 | CONFIG_NETFILTER_XT_TARGET_NOTRACK=m | ||
279 | CONFIG_NETFILTER_XT_MATCH_COMMENT=m | ||
280 | CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m | ||
281 | # CONFIG_NETFILTER_XT_MATCH_DCCP is not set | ||
282 | CONFIG_NETFILTER_XT_MATCH_HELPER=m | ||
283 | CONFIG_NETFILTER_XT_MATCH_LENGTH=m | ||
284 | CONFIG_NETFILTER_XT_MATCH_LIMIT=m | ||
285 | CONFIG_NETFILTER_XT_MATCH_MAC=m | ||
286 | CONFIG_NETFILTER_XT_MATCH_MARK=m | ||
287 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m | ||
288 | CONFIG_NETFILTER_XT_MATCH_REALM=m | ||
289 | CONFIG_NETFILTER_XT_MATCH_SCTP=m | ||
290 | CONFIG_NETFILTER_XT_MATCH_STATE=m | ||
291 | CONFIG_NETFILTER_XT_MATCH_STRING=m | ||
292 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m | ||
274 | 293 | ||
275 | # | 294 | # |
276 | # IP: Netfilter Configuration | 295 | # IP: Netfilter Configuration |
@@ -288,37 +307,22 @@ CONFIG_IP_NF_AMANDA=m | |||
288 | CONFIG_IP_NF_PPTP=m | 307 | CONFIG_IP_NF_PPTP=m |
289 | # CONFIG_IP_NF_QUEUE is not set | 308 | # CONFIG_IP_NF_QUEUE is not set |
290 | CONFIG_IP_NF_IPTABLES=m | 309 | CONFIG_IP_NF_IPTABLES=m |
291 | CONFIG_IP_NF_MATCH_LIMIT=m | ||
292 | CONFIG_IP_NF_MATCH_IPRANGE=m | 310 | CONFIG_IP_NF_MATCH_IPRANGE=m |
293 | CONFIG_IP_NF_MATCH_MAC=m | ||
294 | CONFIG_IP_NF_MATCH_PKTTYPE=m | ||
295 | CONFIG_IP_NF_MATCH_MARK=m | ||
296 | CONFIG_IP_NF_MATCH_MULTIPORT=m | 311 | CONFIG_IP_NF_MATCH_MULTIPORT=m |
297 | CONFIG_IP_NF_MATCH_TOS=m | 312 | CONFIG_IP_NF_MATCH_TOS=m |
298 | CONFIG_IP_NF_MATCH_RECENT=m | 313 | CONFIG_IP_NF_MATCH_RECENT=m |
299 | CONFIG_IP_NF_MATCH_ECN=m | 314 | CONFIG_IP_NF_MATCH_ECN=m |
300 | CONFIG_IP_NF_MATCH_DSCP=m | 315 | CONFIG_IP_NF_MATCH_DSCP=m |
301 | CONFIG_IP_NF_MATCH_AH_ESP=m | 316 | CONFIG_IP_NF_MATCH_AH_ESP=m |
302 | CONFIG_IP_NF_MATCH_LENGTH=m | ||
303 | CONFIG_IP_NF_MATCH_TTL=m | 317 | CONFIG_IP_NF_MATCH_TTL=m |
304 | CONFIG_IP_NF_MATCH_TCPMSS=m | ||
305 | CONFIG_IP_NF_MATCH_HELPER=m | ||
306 | CONFIG_IP_NF_MATCH_STATE=m | ||
307 | CONFIG_IP_NF_MATCH_CONNTRACK=m | ||
308 | CONFIG_IP_NF_MATCH_OWNER=m | 318 | CONFIG_IP_NF_MATCH_OWNER=m |
309 | # CONFIG_IP_NF_MATCH_ADDRTYPE is not set | 319 | CONFIG_IP_NF_MATCH_ADDRTYPE=m |
310 | # CONFIG_IP_NF_MATCH_REALM is not set | 320 | CONFIG_IP_NF_MATCH_HASHLIMIT=m |
311 | # CONFIG_IP_NF_MATCH_SCTP is not set | ||
312 | CONFIG_IP_NF_MATCH_DCCP=m | ||
313 | # CONFIG_IP_NF_MATCH_COMMENT is not set | ||
314 | # CONFIG_IP_NF_MATCH_HASHLIMIT is not set | ||
315 | CONFIG_IP_NF_MATCH_STRING=m | ||
316 | CONFIG_IP_NF_FILTER=m | 321 | CONFIG_IP_NF_FILTER=m |
317 | CONFIG_IP_NF_TARGET_REJECT=m | 322 | CONFIG_IP_NF_TARGET_REJECT=m |
318 | # CONFIG_IP_NF_TARGET_LOG is not set | 323 | CONFIG_IP_NF_TARGET_LOG=m |
319 | CONFIG_IP_NF_TARGET_ULOG=m | 324 | CONFIG_IP_NF_TARGET_ULOG=m |
320 | CONFIG_IP_NF_TARGET_TCPMSS=m | 325 | CONFIG_IP_NF_TARGET_TCPMSS=m |
321 | # CONFIG_IP_NF_TARGET_NFQUEUE is not set | ||
322 | CONFIG_IP_NF_NAT=m | 326 | CONFIG_IP_NF_NAT=m |
323 | CONFIG_IP_NF_NAT_NEEDED=y | 327 | CONFIG_IP_NF_NAT_NEEDED=y |
324 | CONFIG_IP_NF_TARGET_MASQUERADE=m | 328 | CONFIG_IP_NF_TARGET_MASQUERADE=m |
@@ -331,9 +335,12 @@ CONFIG_IP_NF_NAT_FTP=m | |||
331 | CONFIG_IP_NF_NAT_TFTP=m | 335 | CONFIG_IP_NF_NAT_TFTP=m |
332 | CONFIG_IP_NF_NAT_AMANDA=m | 336 | CONFIG_IP_NF_NAT_AMANDA=m |
333 | CONFIG_IP_NF_NAT_PPTP=m | 337 | CONFIG_IP_NF_NAT_PPTP=m |
334 | # CONFIG_IP_NF_MANGLE is not set | 338 | CONFIG_IP_NF_MANGLE=m |
339 | CONFIG_IP_NF_TARGET_TOS=m | ||
340 | CONFIG_IP_NF_TARGET_ECN=m | ||
341 | CONFIG_IP_NF_TARGET_DSCP=m | ||
342 | CONFIG_IP_NF_TARGET_TTL=m | ||
335 | CONFIG_IP_NF_RAW=m | 343 | CONFIG_IP_NF_RAW=m |
336 | CONFIG_IP_NF_TARGET_NOTRACK=m | ||
337 | CONFIG_IP_NF_ARPTABLES=m | 344 | CONFIG_IP_NF_ARPTABLES=m |
338 | CONFIG_IP_NF_ARPFILTER=m | 345 | CONFIG_IP_NF_ARPFILTER=m |
339 | CONFIG_IP_NF_ARP_MANGLE=m | 346 | CONFIG_IP_NF_ARP_MANGLE=m |
@@ -360,6 +367,11 @@ CONFIG_IP_DCCP_TFRC_LIB=m | |||
360 | # SCTP Configuration (EXPERIMENTAL) | 367 | # SCTP Configuration (EXPERIMENTAL) |
361 | # | 368 | # |
362 | # CONFIG_IP_SCTP is not set | 369 | # CONFIG_IP_SCTP is not set |
370 | |||
371 | # | ||
372 | # TIPC Configuration (EXPERIMENTAL) | ||
373 | # | ||
374 | # CONFIG_TIPC is not set | ||
363 | # CONFIG_ATM is not set | 375 | # CONFIG_ATM is not set |
364 | # CONFIG_BRIDGE is not set | 376 | # CONFIG_BRIDGE is not set |
365 | # CONFIG_VLAN_8021Q is not set | 377 | # CONFIG_VLAN_8021Q is not set |
@@ -377,6 +389,7 @@ CONFIG_IP_DCCP_TFRC_LIB=m | |||
377 | # QoS and/or fair queueing | 389 | # QoS and/or fair queueing |
378 | # | 390 | # |
379 | # CONFIG_NET_SCHED is not set | 391 | # CONFIG_NET_SCHED is not set |
392 | CONFIG_NET_CLS_ROUTE=y | ||
380 | 393 | ||
381 | # | 394 | # |
382 | # Network testing | 395 | # Network testing |
@@ -568,7 +581,6 @@ CONFIG_IDEDMA_PCI_AUTO=y | |||
568 | # CONFIG_BLK_DEV_NS87415 is not set | 581 | # CONFIG_BLK_DEV_NS87415 is not set |
569 | # CONFIG_BLK_DEV_PDC202XX_OLD is not set | 582 | # CONFIG_BLK_DEV_PDC202XX_OLD is not set |
570 | CONFIG_BLK_DEV_PDC202XX_NEW=y | 583 | CONFIG_BLK_DEV_PDC202XX_NEW=y |
571 | # CONFIG_PDC202XX_FORCE is not set | ||
572 | # CONFIG_BLK_DEV_SVWKS is not set | 584 | # CONFIG_BLK_DEV_SVWKS is not set |
573 | # CONFIG_BLK_DEV_SIIMAGE is not set | 585 | # CONFIG_BLK_DEV_SIIMAGE is not set |
574 | # CONFIG_BLK_DEV_SLC90E66 is not set | 586 | # CONFIG_BLK_DEV_SLC90E66 is not set |
@@ -654,8 +666,7 @@ CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 | |||
654 | # CONFIG_SCSI_IPR is not set | 666 | # CONFIG_SCSI_IPR is not set |
655 | # CONFIG_SCSI_QLOGIC_FC is not set | 667 | # CONFIG_SCSI_QLOGIC_FC is not set |
656 | # CONFIG_SCSI_QLOGIC_1280 is not set | 668 | # CONFIG_SCSI_QLOGIC_1280 is not set |
657 | CONFIG_SCSI_QLA2XXX=y | 669 | # CONFIG_SCSI_QLA_FC is not set |
658 | # CONFIG_SCSI_QLA2XXX_EMBEDDED_FIRMWARE is not set | ||
659 | # CONFIG_SCSI_LPFC is not set | 670 | # CONFIG_SCSI_LPFC is not set |
660 | # CONFIG_SCSI_DC395x is not set | 671 | # CONFIG_SCSI_DC395x is not set |
661 | # CONFIG_SCSI_DC390T is not set | 672 | # CONFIG_SCSI_DC390T is not set |
@@ -991,6 +1002,7 @@ CONFIG_SERIAL_8250_RUNTIME_UARTS=4 | |||
991 | # | 1002 | # |
992 | CONFIG_SERIAL_CORE=m | 1003 | CONFIG_SERIAL_CORE=m |
993 | CONFIG_SERIAL_PMACZILOG=m | 1004 | CONFIG_SERIAL_PMACZILOG=m |
1005 | # CONFIG_SERIAL_JSM is not set | ||
994 | CONFIG_UNIX98_PTYS=y | 1006 | CONFIG_UNIX98_PTYS=y |
995 | CONFIG_LEGACY_PTYS=y | 1007 | CONFIG_LEGACY_PTYS=y |
996 | CONFIG_LEGACY_PTY_COUNT=256 | 1008 | CONFIG_LEGACY_PTY_COUNT=256 |
@@ -1098,6 +1110,12 @@ CONFIG_I2C_POWERMAC=y | |||
1098 | # CONFIG_I2C_DEBUG_CHIP is not set | 1110 | # CONFIG_I2C_DEBUG_CHIP is not set |
1099 | 1111 | ||
1100 | # | 1112 | # |
1113 | # SPI support | ||
1114 | # | ||
1115 | # CONFIG_SPI is not set | ||
1116 | # CONFIG_SPI_MASTER is not set | ||
1117 | |||
1118 | # | ||
1101 | # Dallas's 1-wire bus | 1119 | # Dallas's 1-wire bus |
1102 | # | 1120 | # |
1103 | # CONFIG_W1 is not set | 1121 | # CONFIG_W1 is not set |
@@ -1348,6 +1366,7 @@ CONFIG_USB_PRINTER=m | |||
1348 | # | 1366 | # |
1349 | CONFIG_USB_HID=y | 1367 | CONFIG_USB_HID=y |
1350 | CONFIG_USB_HIDINPUT=y | 1368 | CONFIG_USB_HIDINPUT=y |
1369 | CONFIG_USB_HIDINPUT_POWERBOOK=y | ||
1351 | # CONFIG_HID_FF is not set | 1370 | # CONFIG_HID_FF is not set |
1352 | # CONFIG_USB_HIDDEV is not set | 1371 | # CONFIG_USB_HIDDEV is not set |
1353 | # CONFIG_USB_AIPTEK is not set | 1372 | # CONFIG_USB_AIPTEK is not set |
@@ -1488,7 +1507,7 @@ CONFIG_USB_EZUSB=y | |||
1488 | # CONFIG_INFINIBAND is not set | 1507 | # CONFIG_INFINIBAND is not set |
1489 | 1508 | ||
1490 | # | 1509 | # |
1491 | # SN Devices | 1510 | # EDAC - error detection and reporting (RAS) (EXPERIMENTAL) |
1492 | # | 1511 | # |
1493 | 1512 | ||
1494 | # | 1513 | # |
@@ -1609,6 +1628,7 @@ CONFIG_MSDOS_PARTITION=y | |||
1609 | # CONFIG_SGI_PARTITION is not set | 1628 | # CONFIG_SGI_PARTITION is not set |
1610 | # CONFIG_ULTRIX_PARTITION is not set | 1629 | # CONFIG_ULTRIX_PARTITION is not set |
1611 | # CONFIG_SUN_PARTITION is not set | 1630 | # CONFIG_SUN_PARTITION is not set |
1631 | # CONFIG_KARMA_PARTITION is not set | ||
1612 | # CONFIG_EFI_PARTITION is not set | 1632 | # CONFIG_EFI_PARTITION is not set |
1613 | 1633 | ||
1614 | # | 1634 | # |
@@ -1692,6 +1712,7 @@ CONFIG_DETECT_SOFTLOCKUP=y | |||
1692 | # CONFIG_DEBUG_INFO is not set | 1712 | # CONFIG_DEBUG_INFO is not set |
1693 | # CONFIG_DEBUG_FS is not set | 1713 | # CONFIG_DEBUG_FS is not set |
1694 | # CONFIG_DEBUG_VM is not set | 1714 | # CONFIG_DEBUG_VM is not set |
1715 | # CONFIG_FORCED_INLINING is not set | ||
1695 | # CONFIG_RCU_TORTURE_TEST is not set | 1716 | # CONFIG_RCU_TORTURE_TEST is not set |
1696 | CONFIG_DEBUGGER=y | 1717 | CONFIG_DEBUGGER=y |
1697 | CONFIG_XMON=y | 1718 | CONFIG_XMON=y |
diff --git a/arch/powerpc/configs/ppc64_defconfig b/arch/powerpc/configs/ppc64_defconfig index 6f6c6bed1aa5..395e49847788 100644 --- a/arch/powerpc/configs/ppc64_defconfig +++ b/arch/powerpc/configs/ppc64_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.15-rc5 | 3 | # Linux kernel version: 2.6.16-rc2 |
4 | # Tue Dec 20 15:59:38 2005 | 4 | # Fri Feb 10 17:32:14 2006 |
5 | # | 5 | # |
6 | CONFIG_PPC64=y | 6 | CONFIG_PPC64=y |
7 | CONFIG_64BIT=y | 7 | CONFIG_64BIT=y |
@@ -16,6 +16,10 @@ CONFIG_COMPAT=y | |||
16 | CONFIG_SYSVIPC_COMPAT=y | 16 | CONFIG_SYSVIPC_COMPAT=y |
17 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | 17 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y |
18 | CONFIG_ARCH_MAY_HAVE_PC_FDC=y | 18 | CONFIG_ARCH_MAY_HAVE_PC_FDC=y |
19 | CONFIG_PPC_OF=y | ||
20 | CONFIG_PPC_UDBG_16550=y | ||
21 | CONFIG_GENERIC_TBSYNC=y | ||
22 | # CONFIG_DEFAULT_UIMAGE is not set | ||
19 | 23 | ||
20 | # | 24 | # |
21 | # Processor support | 25 | # Processor support |
@@ -33,7 +37,6 @@ CONFIG_NR_CPUS=32 | |||
33 | # Code maturity level options | 37 | # Code maturity level options |
34 | # | 38 | # |
35 | CONFIG_EXPERIMENTAL=y | 39 | CONFIG_EXPERIMENTAL=y |
36 | CONFIG_CLEAN_COMPILE=y | ||
37 | CONFIG_LOCK_KERNEL=y | 40 | CONFIG_LOCK_KERNEL=y |
38 | CONFIG_INIT_ENV_ARG_LIMIT=32 | 41 | CONFIG_INIT_ENV_ARG_LIMIT=32 |
39 | 42 | ||
@@ -48,8 +51,6 @@ CONFIG_POSIX_MQUEUE=y | |||
48 | # CONFIG_BSD_PROCESS_ACCT is not set | 51 | # CONFIG_BSD_PROCESS_ACCT is not set |
49 | CONFIG_SYSCTL=y | 52 | CONFIG_SYSCTL=y |
50 | # CONFIG_AUDIT is not set | 53 | # CONFIG_AUDIT is not set |
51 | CONFIG_HOTPLUG=y | ||
52 | CONFIG_KOBJECT_UEVENT=y | ||
53 | CONFIG_IKCONFIG=y | 54 | CONFIG_IKCONFIG=y |
54 | CONFIG_IKCONFIG_PROC=y | 55 | CONFIG_IKCONFIG_PROC=y |
55 | CONFIG_CPUSETS=y | 56 | CONFIG_CPUSETS=y |
@@ -59,8 +60,10 @@ CONFIG_CC_OPTIMIZE_FOR_SIZE=y | |||
59 | CONFIG_KALLSYMS=y | 60 | CONFIG_KALLSYMS=y |
60 | CONFIG_KALLSYMS_ALL=y | 61 | CONFIG_KALLSYMS_ALL=y |
61 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 62 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
63 | CONFIG_HOTPLUG=y | ||
62 | CONFIG_PRINTK=y | 64 | CONFIG_PRINTK=y |
63 | CONFIG_BUG=y | 65 | CONFIG_BUG=y |
66 | CONFIG_ELF_CORE=y | ||
64 | CONFIG_BASE_FULL=y | 67 | CONFIG_BASE_FULL=y |
65 | CONFIG_FUTEX=y | 68 | CONFIG_FUTEX=y |
66 | CONFIG_EPOLL=y | 69 | CONFIG_EPOLL=y |
@@ -69,8 +72,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0 | |||
69 | CONFIG_CC_ALIGN_LABELS=0 | 72 | CONFIG_CC_ALIGN_LABELS=0 |
70 | CONFIG_CC_ALIGN_LOOPS=0 | 73 | CONFIG_CC_ALIGN_LOOPS=0 |
71 | CONFIG_CC_ALIGN_JUMPS=0 | 74 | CONFIG_CC_ALIGN_JUMPS=0 |
75 | CONFIG_SLAB=y | ||
72 | # CONFIG_TINY_SHMEM is not set | 76 | # CONFIG_TINY_SHMEM is not set |
73 | CONFIG_BASE_SMALL=0 | 77 | CONFIG_BASE_SMALL=0 |
78 | # CONFIG_SLOB is not set | ||
74 | 79 | ||
75 | # | 80 | # |
76 | # Loadable module support | 81 | # Loadable module support |
@@ -113,7 +118,6 @@ CONFIG_PPC_PMAC=y | |||
113 | CONFIG_PPC_PMAC64=y | 118 | CONFIG_PPC_PMAC64=y |
114 | CONFIG_PPC_MAPLE=y | 119 | CONFIG_PPC_MAPLE=y |
115 | # CONFIG_PPC_CELL is not set | 120 | # CONFIG_PPC_CELL is not set |
116 | CONFIG_PPC_OF=y | ||
117 | CONFIG_XICS=y | 121 | CONFIG_XICS=y |
118 | CONFIG_U3_DART=y | 122 | CONFIG_U3_DART=y |
119 | CONFIG_MPIC=y | 123 | CONFIG_MPIC=y |
@@ -124,8 +128,8 @@ CONFIG_RTAS_FLASH=m | |||
124 | # CONFIG_MMIO_NVRAM is not set | 128 | # CONFIG_MMIO_NVRAM is not set |
125 | CONFIG_MPIC_BROKEN_U3=y | 129 | CONFIG_MPIC_BROKEN_U3=y |
126 | CONFIG_IBMVIO=y | 130 | CONFIG_IBMVIO=y |
131 | # CONFIG_IBMEBUS is not set | ||
127 | # CONFIG_PPC_MPC106 is not set | 132 | # CONFIG_PPC_MPC106 is not set |
128 | CONFIG_GENERIC_TBSYNC=y | ||
129 | CONFIG_CPU_FREQ=y | 133 | CONFIG_CPU_FREQ=y |
130 | CONFIG_CPU_FREQ_TABLE=y | 134 | CONFIG_CPU_FREQ_TABLE=y |
131 | # CONFIG_CPU_FREQ_DEBUG is not set | 135 | # CONFIG_CPU_FREQ_DEBUG is not set |
@@ -158,6 +162,7 @@ CONFIG_FORCE_MAX_ZONEORDER=13 | |||
158 | CONFIG_IOMMU_VMERGE=y | 162 | CONFIG_IOMMU_VMERGE=y |
159 | CONFIG_HOTPLUG_CPU=y | 163 | CONFIG_HOTPLUG_CPU=y |
160 | CONFIG_KEXEC=y | 164 | CONFIG_KEXEC=y |
165 | # CONFIG_CRASH_DUMP is not set | ||
161 | CONFIG_IRQ_ALL_CPUS=y | 166 | CONFIG_IRQ_ALL_CPUS=y |
162 | CONFIG_PPC_SPLPAR=y | 167 | CONFIG_PPC_SPLPAR=y |
163 | CONFIG_EEH=y | 168 | CONFIG_EEH=y |
@@ -178,6 +183,7 @@ CONFIG_HAVE_MEMORY_PRESENT=y | |||
178 | CONFIG_SPARSEMEM_EXTREME=y | 183 | CONFIG_SPARSEMEM_EXTREME=y |
179 | # CONFIG_MEMORY_HOTPLUG is not set | 184 | # CONFIG_MEMORY_HOTPLUG is not set |
180 | CONFIG_SPLIT_PTLOCK_CPUS=4 | 185 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
186 | CONFIG_MIGRATION=y | ||
181 | # CONFIG_PPC_64K_PAGES is not set | 187 | # CONFIG_PPC_64K_PAGES is not set |
182 | # CONFIG_SCHED_SMT is not set | 188 | # CONFIG_SCHED_SMT is not set |
183 | CONFIG_PROC_DEVICETREE=y | 189 | CONFIG_PROC_DEVICETREE=y |
@@ -221,6 +227,7 @@ CONFIG_NET=y | |||
221 | # | 227 | # |
222 | # Networking options | 228 | # Networking options |
223 | # | 229 | # |
230 | # CONFIG_NETDEBUG is not set | ||
224 | CONFIG_PACKET=y | 231 | CONFIG_PACKET=y |
225 | # CONFIG_PACKET_MMAP is not set | 232 | # CONFIG_PACKET_MMAP is not set |
226 | CONFIG_UNIX=y | 233 | CONFIG_UNIX=y |
@@ -260,6 +267,7 @@ CONFIG_NETFILTER=y | |||
260 | CONFIG_NETFILTER_NETLINK=y | 267 | CONFIG_NETFILTER_NETLINK=y |
261 | CONFIG_NETFILTER_NETLINK_QUEUE=m | 268 | CONFIG_NETFILTER_NETLINK_QUEUE=m |
262 | CONFIG_NETFILTER_NETLINK_LOG=m | 269 | CONFIG_NETFILTER_NETLINK_LOG=m |
270 | # CONFIG_NETFILTER_XTABLES is not set | ||
263 | 271 | ||
264 | # | 272 | # |
265 | # IP: Netfilter Configuration | 273 | # IP: Netfilter Configuration |
@@ -277,65 +285,6 @@ CONFIG_IP_NF_TFTP=m | |||
277 | CONFIG_IP_NF_AMANDA=m | 285 | CONFIG_IP_NF_AMANDA=m |
278 | # CONFIG_IP_NF_PPTP is not set | 286 | # CONFIG_IP_NF_PPTP is not set |
279 | CONFIG_IP_NF_QUEUE=m | 287 | CONFIG_IP_NF_QUEUE=m |
280 | CONFIG_IP_NF_IPTABLES=m | ||
281 | CONFIG_IP_NF_MATCH_LIMIT=m | ||
282 | CONFIG_IP_NF_MATCH_IPRANGE=m | ||
283 | CONFIG_IP_NF_MATCH_MAC=m | ||
284 | CONFIG_IP_NF_MATCH_PKTTYPE=m | ||
285 | CONFIG_IP_NF_MATCH_MARK=m | ||
286 | CONFIG_IP_NF_MATCH_MULTIPORT=m | ||
287 | CONFIG_IP_NF_MATCH_TOS=m | ||
288 | CONFIG_IP_NF_MATCH_RECENT=m | ||
289 | CONFIG_IP_NF_MATCH_ECN=m | ||
290 | CONFIG_IP_NF_MATCH_DSCP=m | ||
291 | CONFIG_IP_NF_MATCH_AH_ESP=m | ||
292 | CONFIG_IP_NF_MATCH_LENGTH=m | ||
293 | CONFIG_IP_NF_MATCH_TTL=m | ||
294 | CONFIG_IP_NF_MATCH_TCPMSS=m | ||
295 | CONFIG_IP_NF_MATCH_HELPER=m | ||
296 | CONFIG_IP_NF_MATCH_STATE=m | ||
297 | CONFIG_IP_NF_MATCH_CONNTRACK=m | ||
298 | CONFIG_IP_NF_MATCH_OWNER=m | ||
299 | CONFIG_IP_NF_MATCH_ADDRTYPE=m | ||
300 | CONFIG_IP_NF_MATCH_REALM=m | ||
301 | CONFIG_IP_NF_MATCH_SCTP=m | ||
302 | CONFIG_IP_NF_MATCH_DCCP=m | ||
303 | CONFIG_IP_NF_MATCH_COMMENT=m | ||
304 | CONFIG_IP_NF_MATCH_CONNMARK=m | ||
305 | CONFIG_IP_NF_MATCH_CONNBYTES=m | ||
306 | CONFIG_IP_NF_MATCH_HASHLIMIT=m | ||
307 | CONFIG_IP_NF_MATCH_STRING=m | ||
308 | CONFIG_IP_NF_FILTER=m | ||
309 | CONFIG_IP_NF_TARGET_REJECT=m | ||
310 | CONFIG_IP_NF_TARGET_LOG=m | ||
311 | CONFIG_IP_NF_TARGET_ULOG=m | ||
312 | CONFIG_IP_NF_TARGET_TCPMSS=m | ||
313 | CONFIG_IP_NF_TARGET_NFQUEUE=m | ||
314 | CONFIG_IP_NF_NAT=m | ||
315 | CONFIG_IP_NF_NAT_NEEDED=y | ||
316 | CONFIG_IP_NF_TARGET_MASQUERADE=m | ||
317 | CONFIG_IP_NF_TARGET_REDIRECT=m | ||
318 | CONFIG_IP_NF_TARGET_NETMAP=m | ||
319 | CONFIG_IP_NF_TARGET_SAME=m | ||
320 | CONFIG_IP_NF_NAT_SNMP_BASIC=m | ||
321 | CONFIG_IP_NF_NAT_IRC=m | ||
322 | CONFIG_IP_NF_NAT_FTP=m | ||
323 | CONFIG_IP_NF_NAT_TFTP=m | ||
324 | CONFIG_IP_NF_NAT_AMANDA=m | ||
325 | CONFIG_IP_NF_MANGLE=m | ||
326 | CONFIG_IP_NF_TARGET_TOS=m | ||
327 | CONFIG_IP_NF_TARGET_ECN=m | ||
328 | CONFIG_IP_NF_TARGET_DSCP=m | ||
329 | CONFIG_IP_NF_TARGET_MARK=m | ||
330 | CONFIG_IP_NF_TARGET_CLASSIFY=m | ||
331 | CONFIG_IP_NF_TARGET_TTL=m | ||
332 | CONFIG_IP_NF_TARGET_CONNMARK=m | ||
333 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | ||
334 | CONFIG_IP_NF_RAW=m | ||
335 | CONFIG_IP_NF_TARGET_NOTRACK=m | ||
336 | CONFIG_IP_NF_ARPTABLES=m | ||
337 | CONFIG_IP_NF_ARPFILTER=m | ||
338 | CONFIG_IP_NF_ARP_MANGLE=m | ||
339 | 288 | ||
340 | # | 289 | # |
341 | # DCCP Configuration (EXPERIMENTAL) | 290 | # DCCP Configuration (EXPERIMENTAL) |
@@ -346,6 +295,11 @@ CONFIG_IP_NF_ARP_MANGLE=m | |||
346 | # SCTP Configuration (EXPERIMENTAL) | 295 | # SCTP Configuration (EXPERIMENTAL) |
347 | # | 296 | # |
348 | # CONFIG_IP_SCTP is not set | 297 | # CONFIG_IP_SCTP is not set |
298 | |||
299 | # | ||
300 | # TIPC Configuration (EXPERIMENTAL) | ||
301 | # | ||
302 | # CONFIG_TIPC is not set | ||
349 | # CONFIG_ATM is not set | 303 | # CONFIG_ATM is not set |
350 | # CONFIG_BRIDGE is not set | 304 | # CONFIG_BRIDGE is not set |
351 | # CONFIG_VLAN_8021Q is not set | 305 | # CONFIG_VLAN_8021Q is not set |
@@ -364,7 +318,6 @@ CONFIG_LLC=y | |||
364 | # QoS and/or fair queueing | 318 | # QoS and/or fair queueing |
365 | # | 319 | # |
366 | # CONFIG_NET_SCHED is not set | 320 | # CONFIG_NET_SCHED is not set |
367 | CONFIG_NET_CLS_ROUTE=y | ||
368 | 321 | ||
369 | # | 322 | # |
370 | # Network testing | 323 | # Network testing |
@@ -454,7 +407,7 @@ CONFIG_IDEPCI_SHARE_IRQ=y | |||
454 | # CONFIG_BLK_DEV_OFFBOARD is not set | 407 | # CONFIG_BLK_DEV_OFFBOARD is not set |
455 | CONFIG_BLK_DEV_GENERIC=y | 408 | CONFIG_BLK_DEV_GENERIC=y |
456 | # CONFIG_BLK_DEV_OPTI621 is not set | 409 | # CONFIG_BLK_DEV_OPTI621 is not set |
457 | # CONFIG_BLK_DEV_SL82C105 is not set | 410 | CONFIG_BLK_DEV_SL82C105=y |
458 | CONFIG_BLK_DEV_IDEDMA_PCI=y | 411 | CONFIG_BLK_DEV_IDEDMA_PCI=y |
459 | # CONFIG_BLK_DEV_IDEDMA_FORCED is not set | 412 | # CONFIG_BLK_DEV_IDEDMA_FORCED is not set |
460 | CONFIG_IDEDMA_PCI_AUTO=y | 413 | CONFIG_IDEDMA_PCI_AUTO=y |
@@ -572,13 +525,7 @@ CONFIG_SCSI_IPR_TRACE=y | |||
572 | CONFIG_SCSI_IPR_DUMP=y | 525 | CONFIG_SCSI_IPR_DUMP=y |
573 | # CONFIG_SCSI_QLOGIC_FC is not set | 526 | # CONFIG_SCSI_QLOGIC_FC is not set |
574 | # CONFIG_SCSI_QLOGIC_1280 is not set | 527 | # CONFIG_SCSI_QLOGIC_1280 is not set |
575 | CONFIG_SCSI_QLA2XXX=y | 528 | # CONFIG_SCSI_QLA_FC is not set |
576 | CONFIG_SCSI_QLA21XX=m | ||
577 | CONFIG_SCSI_QLA22XX=m | ||
578 | CONFIG_SCSI_QLA2300=m | ||
579 | CONFIG_SCSI_QLA2322=m | ||
580 | CONFIG_SCSI_QLA6312=m | ||
581 | CONFIG_SCSI_QLA24XX=m | ||
582 | CONFIG_SCSI_LPFC=m | 529 | CONFIG_SCSI_LPFC=m |
583 | # CONFIG_SCSI_DC395x is not set | 530 | # CONFIG_SCSI_DC395x is not set |
584 | # CONFIG_SCSI_DC390T is not set | 531 | # CONFIG_SCSI_DC390T is not set |
@@ -642,8 +589,6 @@ CONFIG_IEEE1394_SBP2=m | |||
642 | CONFIG_IEEE1394_ETH1394=m | 589 | CONFIG_IEEE1394_ETH1394=m |
643 | CONFIG_IEEE1394_DV1394=m | 590 | CONFIG_IEEE1394_DV1394=m |
644 | CONFIG_IEEE1394_RAWIO=y | 591 | CONFIG_IEEE1394_RAWIO=y |
645 | CONFIG_IEEE1394_CMP=m | ||
646 | CONFIG_IEEE1394_AMDTP=m | ||
647 | 592 | ||
648 | # | 593 | # |
649 | # I2O device support | 594 | # I2O device support |
@@ -659,6 +604,7 @@ CONFIG_THERM_PM72=y | |||
659 | CONFIG_WINDFARM=y | 604 | CONFIG_WINDFARM=y |
660 | CONFIG_WINDFARM_PM81=y | 605 | CONFIG_WINDFARM_PM81=y |
661 | CONFIG_WINDFARM_PM91=y | 606 | CONFIG_WINDFARM_PM91=y |
607 | CONFIG_WINDFARM_PM112=y | ||
662 | 608 | ||
663 | # | 609 | # |
664 | # Network device support | 610 | # Network device support |
@@ -731,6 +677,7 @@ CONFIG_E1000=y | |||
731 | # CONFIG_R8169 is not set | 677 | # CONFIG_R8169 is not set |
732 | # CONFIG_SIS190 is not set | 678 | # CONFIG_SIS190 is not set |
733 | # CONFIG_SKGE is not set | 679 | # CONFIG_SKGE is not set |
680 | # CONFIG_SKY2 is not set | ||
734 | # CONFIG_SK98LIN is not set | 681 | # CONFIG_SK98LIN is not set |
735 | # CONFIG_VIA_VELOCITY is not set | 682 | # CONFIG_VIA_VELOCITY is not set |
736 | CONFIG_TIGON3=y | 683 | CONFIG_TIGON3=y |
@@ -853,6 +800,7 @@ CONFIG_HW_CONSOLE=y | |||
853 | CONFIG_SERIAL_8250=y | 800 | CONFIG_SERIAL_8250=y |
854 | CONFIG_SERIAL_8250_CONSOLE=y | 801 | CONFIG_SERIAL_8250_CONSOLE=y |
855 | CONFIG_SERIAL_8250_NR_UARTS=4 | 802 | CONFIG_SERIAL_8250_NR_UARTS=4 |
803 | CONFIG_SERIAL_8250_RUNTIME_UARTS=4 | ||
856 | # CONFIG_SERIAL_8250_EXTENDED is not set | 804 | # CONFIG_SERIAL_8250_EXTENDED is not set |
857 | 805 | ||
858 | # | 806 | # |
@@ -880,6 +828,7 @@ CONFIG_HVCS=m | |||
880 | # CONFIG_WATCHDOG is not set | 828 | # CONFIG_WATCHDOG is not set |
881 | # CONFIG_RTC is not set | 829 | # CONFIG_RTC is not set |
882 | CONFIG_GEN_RTC=y | 830 | CONFIG_GEN_RTC=y |
831 | # CONFIG_GEN_RTC_X is not set | ||
883 | # CONFIG_DTLK is not set | 832 | # CONFIG_DTLK is not set |
884 | # CONFIG_R3964 is not set | 833 | # CONFIG_R3964 is not set |
885 | # CONFIG_APPLICOM is not set | 834 | # CONFIG_APPLICOM is not set |
@@ -923,8 +872,7 @@ CONFIG_I2C_AMD8111=y | |||
923 | # CONFIG_I2C_I801 is not set | 872 | # CONFIG_I2C_I801 is not set |
924 | # CONFIG_I2C_I810 is not set | 873 | # CONFIG_I2C_I810 is not set |
925 | # CONFIG_I2C_PIIX4 is not set | 874 | # CONFIG_I2C_PIIX4 is not set |
926 | CONFIG_I2C_KEYWEST=y | 875 | CONFIG_I2C_POWERMAC=y |
927 | CONFIG_I2C_PMAC_SMU=y | ||
928 | # CONFIG_I2C_NFORCE2 is not set | 876 | # CONFIG_I2C_NFORCE2 is not set |
929 | # CONFIG_I2C_PARPORT_LIGHT is not set | 877 | # CONFIG_I2C_PARPORT_LIGHT is not set |
930 | # CONFIG_I2C_PROSAVAGE is not set | 878 | # CONFIG_I2C_PROSAVAGE is not set |
@@ -957,6 +905,12 @@ CONFIG_I2C_PMAC_SMU=y | |||
957 | # CONFIG_I2C_DEBUG_CHIP is not set | 905 | # CONFIG_I2C_DEBUG_CHIP is not set |
958 | 906 | ||
959 | # | 907 | # |
908 | # SPI support | ||
909 | # | ||
910 | # CONFIG_SPI is not set | ||
911 | # CONFIG_SPI_MASTER is not set | ||
912 | |||
913 | # | ||
960 | # Dallas's 1-wire bus | 914 | # Dallas's 1-wire bus |
961 | # | 915 | # |
962 | # CONFIG_W1 is not set | 916 | # CONFIG_W1 is not set |
@@ -1028,7 +982,6 @@ CONFIG_FB_RADEON_I2C=y | |||
1028 | # CONFIG_FB_KYRO is not set | 982 | # CONFIG_FB_KYRO is not set |
1029 | # CONFIG_FB_3DFX is not set | 983 | # CONFIG_FB_3DFX is not set |
1030 | # CONFIG_FB_VOODOO1 is not set | 984 | # CONFIG_FB_VOODOO1 is not set |
1031 | # CONFIG_FB_CYBLA is not set | ||
1032 | # CONFIG_FB_TRIDENT is not set | 985 | # CONFIG_FB_TRIDENT is not set |
1033 | # CONFIG_FB_VIRTUAL is not set | 986 | # CONFIG_FB_VIRTUAL is not set |
1034 | 987 | ||
@@ -1073,9 +1026,10 @@ CONFIG_SND_OSSEMUL=y | |||
1073 | CONFIG_SND_MIXER_OSS=m | 1026 | CONFIG_SND_MIXER_OSS=m |
1074 | CONFIG_SND_PCM_OSS=m | 1027 | CONFIG_SND_PCM_OSS=m |
1075 | CONFIG_SND_SEQUENCER_OSS=y | 1028 | CONFIG_SND_SEQUENCER_OSS=y |
1029 | # CONFIG_SND_DYNAMIC_MINORS is not set | ||
1030 | CONFIG_SND_SUPPORT_OLD_API=y | ||
1076 | # CONFIG_SND_VERBOSE_PRINTK is not set | 1031 | # CONFIG_SND_VERBOSE_PRINTK is not set |
1077 | # CONFIG_SND_DEBUG is not set | 1032 | # CONFIG_SND_DEBUG is not set |
1078 | CONFIG_SND_GENERIC_DRIVER=y | ||
1079 | 1033 | ||
1080 | # | 1034 | # |
1081 | # Generic devices | 1035 | # Generic devices |
@@ -1089,6 +1043,8 @@ CONFIG_SND_GENERIC_DRIVER=y | |||
1089 | # | 1043 | # |
1090 | # PCI devices | 1044 | # PCI devices |
1091 | # | 1045 | # |
1046 | # CONFIG_SND_AD1889 is not set | ||
1047 | # CONFIG_SND_ALS4000 is not set | ||
1092 | # CONFIG_SND_ALI5451 is not set | 1048 | # CONFIG_SND_ALI5451 is not set |
1093 | # CONFIG_SND_ATIIXP is not set | 1049 | # CONFIG_SND_ATIIXP is not set |
1094 | # CONFIG_SND_ATIIXP_MODEM is not set | 1050 | # CONFIG_SND_ATIIXP_MODEM is not set |
@@ -1097,39 +1053,38 @@ CONFIG_SND_GENERIC_DRIVER=y | |||
1097 | # CONFIG_SND_AU8830 is not set | 1053 | # CONFIG_SND_AU8830 is not set |
1098 | # CONFIG_SND_AZT3328 is not set | 1054 | # CONFIG_SND_AZT3328 is not set |
1099 | # CONFIG_SND_BT87X is not set | 1055 | # CONFIG_SND_BT87X is not set |
1100 | # CONFIG_SND_CS46XX is not set | 1056 | # CONFIG_SND_CA0106 is not set |
1057 | # CONFIG_SND_CMIPCI is not set | ||
1101 | # CONFIG_SND_CS4281 is not set | 1058 | # CONFIG_SND_CS4281 is not set |
1059 | # CONFIG_SND_CS46XX is not set | ||
1102 | # CONFIG_SND_EMU10K1 is not set | 1060 | # CONFIG_SND_EMU10K1 is not set |
1103 | # CONFIG_SND_EMU10K1X is not set | 1061 | # CONFIG_SND_EMU10K1X is not set |
1104 | # CONFIG_SND_CA0106 is not set | ||
1105 | # CONFIG_SND_KORG1212 is not set | ||
1106 | # CONFIG_SND_MIXART is not set | ||
1107 | # CONFIG_SND_NM256 is not set | ||
1108 | # CONFIG_SND_RME32 is not set | ||
1109 | # CONFIG_SND_RME96 is not set | ||
1110 | # CONFIG_SND_RME9652 is not set | ||
1111 | # CONFIG_SND_HDSP is not set | ||
1112 | # CONFIG_SND_HDSPM is not set | ||
1113 | # CONFIG_SND_TRIDENT is not set | ||
1114 | # CONFIG_SND_YMFPCI is not set | ||
1115 | # CONFIG_SND_AD1889 is not set | ||
1116 | # CONFIG_SND_ALS4000 is not set | ||
1117 | # CONFIG_SND_CMIPCI is not set | ||
1118 | # CONFIG_SND_ENS1370 is not set | 1062 | # CONFIG_SND_ENS1370 is not set |
1119 | # CONFIG_SND_ENS1371 is not set | 1063 | # CONFIG_SND_ENS1371 is not set |
1120 | # CONFIG_SND_ES1938 is not set | 1064 | # CONFIG_SND_ES1938 is not set |
1121 | # CONFIG_SND_ES1968 is not set | 1065 | # CONFIG_SND_ES1968 is not set |
1122 | # CONFIG_SND_MAESTRO3 is not set | ||
1123 | # CONFIG_SND_FM801 is not set | 1066 | # CONFIG_SND_FM801 is not set |
1067 | # CONFIG_SND_HDA_INTEL is not set | ||
1068 | # CONFIG_SND_HDSP is not set | ||
1069 | # CONFIG_SND_HDSPM is not set | ||
1124 | # CONFIG_SND_ICE1712 is not set | 1070 | # CONFIG_SND_ICE1712 is not set |
1125 | # CONFIG_SND_ICE1724 is not set | 1071 | # CONFIG_SND_ICE1724 is not set |
1126 | # CONFIG_SND_INTEL8X0 is not set | 1072 | # CONFIG_SND_INTEL8X0 is not set |
1127 | # CONFIG_SND_INTEL8X0M is not set | 1073 | # CONFIG_SND_INTEL8X0M is not set |
1074 | # CONFIG_SND_KORG1212 is not set | ||
1075 | # CONFIG_SND_MAESTRO3 is not set | ||
1076 | # CONFIG_SND_MIXART is not set | ||
1077 | # CONFIG_SND_NM256 is not set | ||
1078 | # CONFIG_SND_PCXHR is not set | ||
1079 | # CONFIG_SND_RME32 is not set | ||
1080 | # CONFIG_SND_RME96 is not set | ||
1081 | # CONFIG_SND_RME9652 is not set | ||
1128 | # CONFIG_SND_SONICVIBES is not set | 1082 | # CONFIG_SND_SONICVIBES is not set |
1083 | # CONFIG_SND_TRIDENT is not set | ||
1129 | # CONFIG_SND_VIA82XX is not set | 1084 | # CONFIG_SND_VIA82XX is not set |
1130 | # CONFIG_SND_VIA82XX_MODEM is not set | 1085 | # CONFIG_SND_VIA82XX_MODEM is not set |
1131 | # CONFIG_SND_VX222 is not set | 1086 | # CONFIG_SND_VX222 is not set |
1132 | # CONFIG_SND_HDA_INTEL is not set | 1087 | # CONFIG_SND_YMFPCI is not set |
1133 | 1088 | ||
1134 | # | 1089 | # |
1135 | # ALSA PowerMac devices | 1090 | # ALSA PowerMac devices |
@@ -1201,13 +1156,16 @@ CONFIG_USB_STORAGE=m | |||
1201 | # CONFIG_USB_STORAGE_SDDR09 is not set | 1156 | # CONFIG_USB_STORAGE_SDDR09 is not set |
1202 | # CONFIG_USB_STORAGE_SDDR55 is not set | 1157 | # CONFIG_USB_STORAGE_SDDR55 is not set |
1203 | # CONFIG_USB_STORAGE_JUMPSHOT is not set | 1158 | # CONFIG_USB_STORAGE_JUMPSHOT is not set |
1159 | # CONFIG_USB_STORAGE_ALAUDA is not set | ||
1204 | # CONFIG_USB_STORAGE_ONETOUCH is not set | 1160 | # CONFIG_USB_STORAGE_ONETOUCH is not set |
1161 | # CONFIG_USB_LIBUSUAL is not set | ||
1205 | 1162 | ||
1206 | # | 1163 | # |
1207 | # USB Input Devices | 1164 | # USB Input Devices |
1208 | # | 1165 | # |
1209 | CONFIG_USB_HID=y | 1166 | CONFIG_USB_HID=y |
1210 | CONFIG_USB_HIDINPUT=y | 1167 | CONFIG_USB_HIDINPUT=y |
1168 | # CONFIG_USB_HIDINPUT_POWERBOOK is not set | ||
1211 | # CONFIG_HID_FF is not set | 1169 | # CONFIG_HID_FF is not set |
1212 | CONFIG_USB_HIDDEV=y | 1170 | CONFIG_USB_HIDDEV=y |
1213 | # CONFIG_USB_AIPTEK is not set | 1171 | # CONFIG_USB_AIPTEK is not set |
@@ -1221,6 +1179,7 @@ CONFIG_USB_HIDDEV=y | |||
1221 | # CONFIG_USB_YEALINK is not set | 1179 | # CONFIG_USB_YEALINK is not set |
1222 | # CONFIG_USB_XPAD is not set | 1180 | # CONFIG_USB_XPAD is not set |
1223 | # CONFIG_USB_ATI_REMOTE is not set | 1181 | # CONFIG_USB_ATI_REMOTE is not set |
1182 | # CONFIG_USB_ATI_REMOTE2 is not set | ||
1224 | # CONFIG_USB_KEYSPAN_REMOTE is not set | 1183 | # CONFIG_USB_KEYSPAN_REMOTE is not set |
1225 | # CONFIG_USB_APPLETOUCH is not set | 1184 | # CONFIG_USB_APPLETOUCH is not set |
1226 | 1185 | ||
@@ -1307,6 +1266,10 @@ CONFIG_INFINIBAND_IPOIB=m | |||
1307 | # | 1266 | # |
1308 | 1267 | ||
1309 | # | 1268 | # |
1269 | # EDAC - error detection and reporting (RAS) | ||
1270 | # | ||
1271 | |||
1272 | # | ||
1310 | # File systems | 1273 | # File systems |
1311 | # | 1274 | # |
1312 | CONFIG_EXT2_FS=y | 1275 | CONFIG_EXT2_FS=y |
@@ -1340,6 +1303,7 @@ CONFIG_XFS_EXPORT=y | |||
1340 | CONFIG_XFS_SECURITY=y | 1303 | CONFIG_XFS_SECURITY=y |
1341 | CONFIG_XFS_POSIX_ACL=y | 1304 | CONFIG_XFS_POSIX_ACL=y |
1342 | # CONFIG_XFS_RT is not set | 1305 | # CONFIG_XFS_RT is not set |
1306 | # CONFIG_OCFS2_FS is not set | ||
1343 | # CONFIG_MINIX_FS is not set | 1307 | # CONFIG_MINIX_FS is not set |
1344 | # CONFIG_ROMFS_FS is not set | 1308 | # CONFIG_ROMFS_FS is not set |
1345 | CONFIG_INOTIFY=y | 1309 | CONFIG_INOTIFY=y |
@@ -1379,6 +1343,7 @@ CONFIG_HUGETLBFS=y | |||
1379 | CONFIG_HUGETLB_PAGE=y | 1343 | CONFIG_HUGETLB_PAGE=y |
1380 | CONFIG_RAMFS=y | 1344 | CONFIG_RAMFS=y |
1381 | # CONFIG_RELAYFS_FS is not set | 1345 | # CONFIG_RELAYFS_FS is not set |
1346 | # CONFIG_CONFIGFS_FS is not set | ||
1382 | 1347 | ||
1383 | # | 1348 | # |
1384 | # Miscellaneous filesystems | 1349 | # Miscellaneous filesystems |
@@ -1449,6 +1414,7 @@ CONFIG_MSDOS_PARTITION=y | |||
1449 | # CONFIG_SGI_PARTITION is not set | 1414 | # CONFIG_SGI_PARTITION is not set |
1450 | # CONFIG_ULTRIX_PARTITION is not set | 1415 | # CONFIG_ULTRIX_PARTITION is not set |
1451 | # CONFIG_SUN_PARTITION is not set | 1416 | # CONFIG_SUN_PARTITION is not set |
1417 | # CONFIG_KARMA_PARTITION is not set | ||
1452 | # CONFIG_EFI_PARTITION is not set | 1418 | # CONFIG_EFI_PARTITION is not set |
1453 | 1419 | ||
1454 | # | 1420 | # |
@@ -1504,10 +1470,6 @@ CONFIG_CRC32=y | |||
1504 | CONFIG_LIBCRC32C=m | 1470 | CONFIG_LIBCRC32C=m |
1505 | CONFIG_ZLIB_INFLATE=y | 1471 | CONFIG_ZLIB_INFLATE=y |
1506 | CONFIG_ZLIB_DEFLATE=m | 1472 | CONFIG_ZLIB_DEFLATE=m |
1507 | CONFIG_TEXTSEARCH=y | ||
1508 | CONFIG_TEXTSEARCH_KMP=m | ||
1509 | CONFIG_TEXTSEARCH_BM=m | ||
1510 | CONFIG_TEXTSEARCH_FSM=m | ||
1511 | 1473 | ||
1512 | # | 1474 | # |
1513 | # Instrumentation Support | 1475 | # Instrumentation Support |
@@ -1520,18 +1482,20 @@ CONFIG_OPROFILE=y | |||
1520 | # Kernel hacking | 1482 | # Kernel hacking |
1521 | # | 1483 | # |
1522 | # CONFIG_PRINTK_TIME is not set | 1484 | # CONFIG_PRINTK_TIME is not set |
1523 | CONFIG_DEBUG_KERNEL=y | ||
1524 | CONFIG_MAGIC_SYSRQ=y | 1485 | CONFIG_MAGIC_SYSRQ=y |
1486 | CONFIG_DEBUG_KERNEL=y | ||
1525 | CONFIG_LOG_BUF_SHIFT=17 | 1487 | CONFIG_LOG_BUF_SHIFT=17 |
1526 | CONFIG_DETECT_SOFTLOCKUP=y | 1488 | CONFIG_DETECT_SOFTLOCKUP=y |
1527 | # CONFIG_SCHEDSTATS is not set | 1489 | # CONFIG_SCHEDSTATS is not set |
1528 | # CONFIG_DEBUG_SLAB is not set | 1490 | # CONFIG_DEBUG_SLAB is not set |
1491 | CONFIG_DEBUG_MUTEXES=y | ||
1529 | # CONFIG_DEBUG_SPINLOCK is not set | 1492 | # CONFIG_DEBUG_SPINLOCK is not set |
1530 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | 1493 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set |
1531 | # CONFIG_DEBUG_KOBJECT is not set | 1494 | # CONFIG_DEBUG_KOBJECT is not set |
1532 | # CONFIG_DEBUG_INFO is not set | 1495 | # CONFIG_DEBUG_INFO is not set |
1533 | CONFIG_DEBUG_FS=y | 1496 | CONFIG_DEBUG_FS=y |
1534 | # CONFIG_DEBUG_VM is not set | 1497 | # CONFIG_DEBUG_VM is not set |
1498 | CONFIG_FORCED_INLINING=y | ||
1535 | # CONFIG_RCU_TORTURE_TEST is not set | 1499 | # CONFIG_RCU_TORTURE_TEST is not set |
1536 | CONFIG_DEBUG_STACKOVERFLOW=y | 1500 | CONFIG_DEBUG_STACKOVERFLOW=y |
1537 | CONFIG_DEBUG_STACK_USAGE=y | 1501 | CONFIG_DEBUG_STACK_USAGE=y |
@@ -1540,6 +1504,11 @@ CONFIG_XMON=y | |||
1540 | # CONFIG_XMON_DEFAULT is not set | 1504 | # CONFIG_XMON_DEFAULT is not set |
1541 | CONFIG_IRQSTACKS=y | 1505 | CONFIG_IRQSTACKS=y |
1542 | CONFIG_BOOTX_TEXT=y | 1506 | CONFIG_BOOTX_TEXT=y |
1507 | # CONFIG_PPC_EARLY_DEBUG_LPAR is not set | ||
1508 | # CONFIG_PPC_EARLY_DEBUG_G5 is not set | ||
1509 | # CONFIG_PPC_EARLY_DEBUG_RTAS is not set | ||
1510 | # CONFIG_PPC_EARLY_DEBUG_MAPLE is not set | ||
1511 | # CONFIG_PPC_EARLY_DEBUG_ISERIES is not set | ||
1543 | 1512 | ||
1544 | # | 1513 | # |
1545 | # Security options | 1514 | # Security options |
diff --git a/arch/powerpc/configs/pseries_defconfig b/arch/powerpc/configs/pseries_defconfig index aa9893a1f6e8..daaf038a1faa 100644 --- a/arch/powerpc/configs/pseries_defconfig +++ b/arch/powerpc/configs/pseries_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.15-rc5 | 3 | # Linux kernel version: 2.6.16-rc2 |
4 | # Tue Dec 20 15:59:40 2005 | 4 | # Fri Feb 10 17:33:32 2006 |
5 | # | 5 | # |
6 | CONFIG_PPC64=y | 6 | CONFIG_PPC64=y |
7 | CONFIG_64BIT=y | 7 | CONFIG_64BIT=y |
@@ -16,6 +16,10 @@ CONFIG_COMPAT=y | |||
16 | CONFIG_SYSVIPC_COMPAT=y | 16 | CONFIG_SYSVIPC_COMPAT=y |
17 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | 17 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y |
18 | CONFIG_ARCH_MAY_HAVE_PC_FDC=y | 18 | CONFIG_ARCH_MAY_HAVE_PC_FDC=y |
19 | CONFIG_PPC_OF=y | ||
20 | CONFIG_PPC_UDBG_16550=y | ||
21 | # CONFIG_GENERIC_TBSYNC is not set | ||
22 | # CONFIG_DEFAULT_UIMAGE is not set | ||
19 | 23 | ||
20 | # | 24 | # |
21 | # Processor support | 25 | # Processor support |
@@ -33,7 +37,6 @@ CONFIG_NR_CPUS=128 | |||
33 | # Code maturity level options | 37 | # Code maturity level options |
34 | # | 38 | # |
35 | CONFIG_EXPERIMENTAL=y | 39 | CONFIG_EXPERIMENTAL=y |
36 | CONFIG_CLEAN_COMPILE=y | ||
37 | CONFIG_LOCK_KERNEL=y | 40 | CONFIG_LOCK_KERNEL=y |
38 | CONFIG_INIT_ENV_ARG_LIMIT=32 | 41 | CONFIG_INIT_ENV_ARG_LIMIT=32 |
39 | 42 | ||
@@ -49,8 +52,6 @@ CONFIG_POSIX_MQUEUE=y | |||
49 | CONFIG_SYSCTL=y | 52 | CONFIG_SYSCTL=y |
50 | CONFIG_AUDIT=y | 53 | CONFIG_AUDIT=y |
51 | CONFIG_AUDITSYSCALL=y | 54 | CONFIG_AUDITSYSCALL=y |
52 | CONFIG_HOTPLUG=y | ||
53 | CONFIG_KOBJECT_UEVENT=y | ||
54 | CONFIG_IKCONFIG=y | 55 | CONFIG_IKCONFIG=y |
55 | CONFIG_IKCONFIG_PROC=y | 56 | CONFIG_IKCONFIG_PROC=y |
56 | CONFIG_CPUSETS=y | 57 | CONFIG_CPUSETS=y |
@@ -60,8 +61,10 @@ CONFIG_CC_OPTIMIZE_FOR_SIZE=y | |||
60 | CONFIG_KALLSYMS=y | 61 | CONFIG_KALLSYMS=y |
61 | CONFIG_KALLSYMS_ALL=y | 62 | CONFIG_KALLSYMS_ALL=y |
62 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 63 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
64 | CONFIG_HOTPLUG=y | ||
63 | CONFIG_PRINTK=y | 65 | CONFIG_PRINTK=y |
64 | CONFIG_BUG=y | 66 | CONFIG_BUG=y |
67 | CONFIG_ELF_CORE=y | ||
65 | CONFIG_BASE_FULL=y | 68 | CONFIG_BASE_FULL=y |
66 | CONFIG_FUTEX=y | 69 | CONFIG_FUTEX=y |
67 | CONFIG_EPOLL=y | 70 | CONFIG_EPOLL=y |
@@ -70,8 +73,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0 | |||
70 | CONFIG_CC_ALIGN_LABELS=0 | 73 | CONFIG_CC_ALIGN_LABELS=0 |
71 | CONFIG_CC_ALIGN_LOOPS=0 | 74 | CONFIG_CC_ALIGN_LOOPS=0 |
72 | CONFIG_CC_ALIGN_JUMPS=0 | 75 | CONFIG_CC_ALIGN_JUMPS=0 |
76 | CONFIG_SLAB=y | ||
73 | # CONFIG_TINY_SHMEM is not set | 77 | # CONFIG_TINY_SHMEM is not set |
74 | CONFIG_BASE_SMALL=0 | 78 | CONFIG_BASE_SMALL=0 |
79 | # CONFIG_SLOB is not set | ||
75 | 80 | ||
76 | # | 81 | # |
77 | # Loadable module support | 82 | # Loadable module support |
@@ -113,7 +118,6 @@ CONFIG_PPC_PSERIES=y | |||
113 | # CONFIG_PPC_PMAC is not set | 118 | # CONFIG_PPC_PMAC is not set |
114 | # CONFIG_PPC_MAPLE is not set | 119 | # CONFIG_PPC_MAPLE is not set |
115 | # CONFIG_PPC_CELL is not set | 120 | # CONFIG_PPC_CELL is not set |
116 | CONFIG_PPC_OF=y | ||
117 | CONFIG_XICS=y | 121 | CONFIG_XICS=y |
118 | # CONFIG_U3_DART is not set | 122 | # CONFIG_U3_DART is not set |
119 | CONFIG_MPIC=y | 123 | CONFIG_MPIC=y |
@@ -123,8 +127,8 @@ CONFIG_RTAS_PROC=y | |||
123 | CONFIG_RTAS_FLASH=m | 127 | CONFIG_RTAS_FLASH=m |
124 | # CONFIG_MMIO_NVRAM is not set | 128 | # CONFIG_MMIO_NVRAM is not set |
125 | CONFIG_IBMVIO=y | 129 | CONFIG_IBMVIO=y |
130 | # CONFIG_IBMEBUS is not set | ||
126 | # CONFIG_PPC_MPC106 is not set | 131 | # CONFIG_PPC_MPC106 is not set |
127 | # CONFIG_GENERIC_TBSYNC is not set | ||
128 | # CONFIG_CPU_FREQ is not set | 132 | # CONFIG_CPU_FREQ is not set |
129 | # CONFIG_WANT_EARLY_SERIAL is not set | 133 | # CONFIG_WANT_EARLY_SERIAL is not set |
130 | 134 | ||
@@ -145,6 +149,7 @@ CONFIG_FORCE_MAX_ZONEORDER=13 | |||
145 | CONFIG_IOMMU_VMERGE=y | 149 | CONFIG_IOMMU_VMERGE=y |
146 | CONFIG_HOTPLUG_CPU=y | 150 | CONFIG_HOTPLUG_CPU=y |
147 | CONFIG_KEXEC=y | 151 | CONFIG_KEXEC=y |
152 | # CONFIG_CRASH_DUMP is not set | ||
148 | CONFIG_IRQ_ALL_CPUS=y | 153 | CONFIG_IRQ_ALL_CPUS=y |
149 | CONFIG_PPC_SPLPAR=y | 154 | CONFIG_PPC_SPLPAR=y |
150 | CONFIG_EEH=y | 155 | CONFIG_EEH=y |
@@ -165,6 +170,7 @@ CONFIG_HAVE_MEMORY_PRESENT=y | |||
165 | CONFIG_SPARSEMEM_EXTREME=y | 170 | CONFIG_SPARSEMEM_EXTREME=y |
166 | # CONFIG_MEMORY_HOTPLUG is not set | 171 | # CONFIG_MEMORY_HOTPLUG is not set |
167 | CONFIG_SPLIT_PTLOCK_CPUS=4 | 172 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
173 | CONFIG_MIGRATION=y | ||
168 | CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y | 174 | CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y |
169 | # CONFIG_PPC_64K_PAGES is not set | 175 | # CONFIG_PPC_64K_PAGES is not set |
170 | CONFIG_SCHED_SMT=y | 176 | CONFIG_SCHED_SMT=y |
@@ -209,6 +215,7 @@ CONFIG_NET=y | |||
209 | # | 215 | # |
210 | # Networking options | 216 | # Networking options |
211 | # | 217 | # |
218 | # CONFIG_NETDEBUG is not set | ||
212 | CONFIG_PACKET=y | 219 | CONFIG_PACKET=y |
213 | # CONFIG_PACKET_MMAP is not set | 220 | # CONFIG_PACKET_MMAP is not set |
214 | CONFIG_UNIX=y | 221 | CONFIG_UNIX=y |
@@ -248,6 +255,7 @@ CONFIG_NETFILTER=y | |||
248 | CONFIG_NETFILTER_NETLINK=y | 255 | CONFIG_NETFILTER_NETLINK=y |
249 | CONFIG_NETFILTER_NETLINK_QUEUE=m | 256 | CONFIG_NETFILTER_NETLINK_QUEUE=m |
250 | CONFIG_NETFILTER_NETLINK_LOG=m | 257 | CONFIG_NETFILTER_NETLINK_LOG=m |
258 | # CONFIG_NETFILTER_XTABLES is not set | ||
251 | 259 | ||
252 | # | 260 | # |
253 | # IP: Netfilter Configuration | 261 | # IP: Netfilter Configuration |
@@ -265,65 +273,6 @@ CONFIG_IP_NF_TFTP=m | |||
265 | CONFIG_IP_NF_AMANDA=m | 273 | CONFIG_IP_NF_AMANDA=m |
266 | # CONFIG_IP_NF_PPTP is not set | 274 | # CONFIG_IP_NF_PPTP is not set |
267 | CONFIG_IP_NF_QUEUE=m | 275 | CONFIG_IP_NF_QUEUE=m |
268 | CONFIG_IP_NF_IPTABLES=m | ||
269 | CONFIG_IP_NF_MATCH_LIMIT=m | ||
270 | CONFIG_IP_NF_MATCH_IPRANGE=m | ||
271 | CONFIG_IP_NF_MATCH_MAC=m | ||
272 | CONFIG_IP_NF_MATCH_PKTTYPE=m | ||
273 | CONFIG_IP_NF_MATCH_MARK=m | ||
274 | CONFIG_IP_NF_MATCH_MULTIPORT=m | ||
275 | CONFIG_IP_NF_MATCH_TOS=m | ||
276 | CONFIG_IP_NF_MATCH_RECENT=m | ||
277 | CONFIG_IP_NF_MATCH_ECN=m | ||
278 | CONFIG_IP_NF_MATCH_DSCP=m | ||
279 | CONFIG_IP_NF_MATCH_AH_ESP=m | ||
280 | CONFIG_IP_NF_MATCH_LENGTH=m | ||
281 | CONFIG_IP_NF_MATCH_TTL=m | ||
282 | CONFIG_IP_NF_MATCH_TCPMSS=m | ||
283 | CONFIG_IP_NF_MATCH_HELPER=m | ||
284 | CONFIG_IP_NF_MATCH_STATE=m | ||
285 | CONFIG_IP_NF_MATCH_CONNTRACK=m | ||
286 | CONFIG_IP_NF_MATCH_OWNER=m | ||
287 | CONFIG_IP_NF_MATCH_ADDRTYPE=m | ||
288 | CONFIG_IP_NF_MATCH_REALM=m | ||
289 | CONFIG_IP_NF_MATCH_SCTP=m | ||
290 | # CONFIG_IP_NF_MATCH_DCCP is not set | ||
291 | CONFIG_IP_NF_MATCH_COMMENT=m | ||
292 | CONFIG_IP_NF_MATCH_CONNMARK=m | ||
293 | CONFIG_IP_NF_MATCH_CONNBYTES=m | ||
294 | CONFIG_IP_NF_MATCH_HASHLIMIT=m | ||
295 | CONFIG_IP_NF_MATCH_STRING=m | ||
296 | CONFIG_IP_NF_FILTER=m | ||
297 | CONFIG_IP_NF_TARGET_REJECT=m | ||
298 | CONFIG_IP_NF_TARGET_LOG=m | ||
299 | CONFIG_IP_NF_TARGET_ULOG=m | ||
300 | CONFIG_IP_NF_TARGET_TCPMSS=m | ||
301 | CONFIG_IP_NF_TARGET_NFQUEUE=m | ||
302 | CONFIG_IP_NF_NAT=m | ||
303 | CONFIG_IP_NF_NAT_NEEDED=y | ||
304 | CONFIG_IP_NF_TARGET_MASQUERADE=m | ||
305 | CONFIG_IP_NF_TARGET_REDIRECT=m | ||
306 | CONFIG_IP_NF_TARGET_NETMAP=m | ||
307 | CONFIG_IP_NF_TARGET_SAME=m | ||
308 | CONFIG_IP_NF_NAT_SNMP_BASIC=m | ||
309 | CONFIG_IP_NF_NAT_IRC=m | ||
310 | CONFIG_IP_NF_NAT_FTP=m | ||
311 | CONFIG_IP_NF_NAT_TFTP=m | ||
312 | CONFIG_IP_NF_NAT_AMANDA=m | ||
313 | CONFIG_IP_NF_MANGLE=m | ||
314 | CONFIG_IP_NF_TARGET_TOS=m | ||
315 | CONFIG_IP_NF_TARGET_ECN=m | ||
316 | CONFIG_IP_NF_TARGET_DSCP=m | ||
317 | CONFIG_IP_NF_TARGET_MARK=m | ||
318 | CONFIG_IP_NF_TARGET_CLASSIFY=m | ||
319 | CONFIG_IP_NF_TARGET_TTL=m | ||
320 | CONFIG_IP_NF_TARGET_CONNMARK=m | ||
321 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | ||
322 | CONFIG_IP_NF_RAW=m | ||
323 | CONFIG_IP_NF_TARGET_NOTRACK=m | ||
324 | CONFIG_IP_NF_ARPTABLES=m | ||
325 | CONFIG_IP_NF_ARPFILTER=m | ||
326 | CONFIG_IP_NF_ARP_MANGLE=m | ||
327 | 276 | ||
328 | # | 277 | # |
329 | # DCCP Configuration (EXPERIMENTAL) | 278 | # DCCP Configuration (EXPERIMENTAL) |
@@ -334,6 +283,11 @@ CONFIG_IP_NF_ARP_MANGLE=m | |||
334 | # SCTP Configuration (EXPERIMENTAL) | 283 | # SCTP Configuration (EXPERIMENTAL) |
335 | # | 284 | # |
336 | # CONFIG_IP_SCTP is not set | 285 | # CONFIG_IP_SCTP is not set |
286 | |||
287 | # | ||
288 | # TIPC Configuration (EXPERIMENTAL) | ||
289 | # | ||
290 | # CONFIG_TIPC is not set | ||
337 | # CONFIG_ATM is not set | 291 | # CONFIG_ATM is not set |
338 | # CONFIG_BRIDGE is not set | 292 | # CONFIG_BRIDGE is not set |
339 | # CONFIG_VLAN_8021Q is not set | 293 | # CONFIG_VLAN_8021Q is not set |
@@ -352,7 +306,6 @@ CONFIG_LLC=y | |||
352 | # QoS and/or fair queueing | 306 | # QoS and/or fair queueing |
353 | # | 307 | # |
354 | # CONFIG_NET_SCHED is not set | 308 | # CONFIG_NET_SCHED is not set |
355 | CONFIG_NET_CLS_ROUTE=y | ||
356 | 309 | ||
357 | # | 310 | # |
358 | # Network testing | 311 | # Network testing |
@@ -550,13 +503,7 @@ CONFIG_SCSI_IPR_TRACE=y | |||
550 | CONFIG_SCSI_IPR_DUMP=y | 503 | CONFIG_SCSI_IPR_DUMP=y |
551 | # CONFIG_SCSI_QLOGIC_FC is not set | 504 | # CONFIG_SCSI_QLOGIC_FC is not set |
552 | # CONFIG_SCSI_QLOGIC_1280 is not set | 505 | # CONFIG_SCSI_QLOGIC_1280 is not set |
553 | CONFIG_SCSI_QLA2XXX=y | 506 | # CONFIG_SCSI_QLA_FC is not set |
554 | CONFIG_SCSI_QLA21XX=m | ||
555 | CONFIG_SCSI_QLA22XX=m | ||
556 | CONFIG_SCSI_QLA2300=m | ||
557 | CONFIG_SCSI_QLA2322=m | ||
558 | CONFIG_SCSI_QLA6312=m | ||
559 | CONFIG_SCSI_QLA24XX=m | ||
560 | CONFIG_SCSI_LPFC=m | 507 | CONFIG_SCSI_LPFC=m |
561 | # CONFIG_SCSI_DC395x is not set | 508 | # CONFIG_SCSI_DC395x is not set |
562 | # CONFIG_SCSI_DC390T is not set | 509 | # CONFIG_SCSI_DC390T is not set |
@@ -678,6 +625,7 @@ CONFIG_E1000=y | |||
678 | # CONFIG_R8169 is not set | 625 | # CONFIG_R8169 is not set |
679 | # CONFIG_SIS190 is not set | 626 | # CONFIG_SIS190 is not set |
680 | # CONFIG_SKGE is not set | 627 | # CONFIG_SKGE is not set |
628 | # CONFIG_SKY2 is not set | ||
681 | # CONFIG_SK98LIN is not set | 629 | # CONFIG_SK98LIN is not set |
682 | # CONFIG_VIA_VELOCITY is not set | 630 | # CONFIG_VIA_VELOCITY is not set |
683 | CONFIG_TIGON3=y | 631 | CONFIG_TIGON3=y |
@@ -803,6 +751,7 @@ CONFIG_HW_CONSOLE=y | |||
803 | CONFIG_SERIAL_8250=y | 751 | CONFIG_SERIAL_8250=y |
804 | CONFIG_SERIAL_8250_CONSOLE=y | 752 | CONFIG_SERIAL_8250_CONSOLE=y |
805 | CONFIG_SERIAL_8250_NR_UARTS=4 | 753 | CONFIG_SERIAL_8250_NR_UARTS=4 |
754 | CONFIG_SERIAL_8250_RUNTIME_UARTS=4 | ||
806 | # CONFIG_SERIAL_8250_EXTENDED is not set | 755 | # CONFIG_SERIAL_8250_EXTENDED is not set |
807 | 756 | ||
808 | # | 757 | # |
@@ -909,6 +858,12 @@ CONFIG_I2C_ALGOBIT=y | |||
909 | # CONFIG_I2C_DEBUG_CHIP is not set | 858 | # CONFIG_I2C_DEBUG_CHIP is not set |
910 | 859 | ||
911 | # | 860 | # |
861 | # SPI support | ||
862 | # | ||
863 | # CONFIG_SPI is not set | ||
864 | # CONFIG_SPI_MASTER is not set | ||
865 | |||
866 | # | ||
912 | # Dallas's 1-wire bus | 867 | # Dallas's 1-wire bus |
913 | # | 868 | # |
914 | # CONFIG_W1 is not set | 869 | # CONFIG_W1 is not set |
@@ -976,7 +931,6 @@ CONFIG_FB_RADEON_I2C=y | |||
976 | # CONFIG_FB_KYRO is not set | 931 | # CONFIG_FB_KYRO is not set |
977 | # CONFIG_FB_3DFX is not set | 932 | # CONFIG_FB_3DFX is not set |
978 | # CONFIG_FB_VOODOO1 is not set | 933 | # CONFIG_FB_VOODOO1 is not set |
979 | # CONFIG_FB_CYBLA is not set | ||
980 | # CONFIG_FB_TRIDENT is not set | 934 | # CONFIG_FB_TRIDENT is not set |
981 | # CONFIG_FB_VIRTUAL is not set | 935 | # CONFIG_FB_VIRTUAL is not set |
982 | 936 | ||
@@ -1061,12 +1015,15 @@ CONFIG_USB_STORAGE=y | |||
1061 | # CONFIG_USB_STORAGE_SDDR09 is not set | 1015 | # CONFIG_USB_STORAGE_SDDR09 is not set |
1062 | # CONFIG_USB_STORAGE_SDDR55 is not set | 1016 | # CONFIG_USB_STORAGE_SDDR55 is not set |
1063 | # CONFIG_USB_STORAGE_JUMPSHOT is not set | 1017 | # CONFIG_USB_STORAGE_JUMPSHOT is not set |
1018 | # CONFIG_USB_STORAGE_ALAUDA is not set | ||
1019 | # CONFIG_USB_LIBUSUAL is not set | ||
1064 | 1020 | ||
1065 | # | 1021 | # |
1066 | # USB Input Devices | 1022 | # USB Input Devices |
1067 | # | 1023 | # |
1068 | CONFIG_USB_HID=y | 1024 | CONFIG_USB_HID=y |
1069 | CONFIG_USB_HIDINPUT=y | 1025 | CONFIG_USB_HIDINPUT=y |
1026 | # CONFIG_USB_HIDINPUT_POWERBOOK is not set | ||
1070 | # CONFIG_HID_FF is not set | 1027 | # CONFIG_HID_FF is not set |
1071 | CONFIG_USB_HIDDEV=y | 1028 | CONFIG_USB_HIDDEV=y |
1072 | # CONFIG_USB_AIPTEK is not set | 1029 | # CONFIG_USB_AIPTEK is not set |
@@ -1080,6 +1037,7 @@ CONFIG_USB_HIDDEV=y | |||
1080 | # CONFIG_USB_YEALINK is not set | 1037 | # CONFIG_USB_YEALINK is not set |
1081 | # CONFIG_USB_XPAD is not set | 1038 | # CONFIG_USB_XPAD is not set |
1082 | # CONFIG_USB_ATI_REMOTE is not set | 1039 | # CONFIG_USB_ATI_REMOTE is not set |
1040 | # CONFIG_USB_ATI_REMOTE2 is not set | ||
1083 | # CONFIG_USB_KEYSPAN_REMOTE is not set | 1041 | # CONFIG_USB_KEYSPAN_REMOTE is not set |
1084 | # CONFIG_USB_APPLETOUCH is not set | 1042 | # CONFIG_USB_APPLETOUCH is not set |
1085 | 1043 | ||
@@ -1167,6 +1125,10 @@ CONFIG_INFINIBAND_IPOIB=m | |||
1167 | # | 1125 | # |
1168 | 1126 | ||
1169 | # | 1127 | # |
1128 | # EDAC - error detection and reporting (RAS) | ||
1129 | # | ||
1130 | |||
1131 | # | ||
1170 | # File systems | 1132 | # File systems |
1171 | # | 1133 | # |
1172 | CONFIG_EXT2_FS=y | 1134 | CONFIG_EXT2_FS=y |
@@ -1200,6 +1162,7 @@ CONFIG_XFS_EXPORT=y | |||
1200 | CONFIG_XFS_SECURITY=y | 1162 | CONFIG_XFS_SECURITY=y |
1201 | CONFIG_XFS_POSIX_ACL=y | 1163 | CONFIG_XFS_POSIX_ACL=y |
1202 | # CONFIG_XFS_RT is not set | 1164 | # CONFIG_XFS_RT is not set |
1165 | # CONFIG_OCFS2_FS is not set | ||
1203 | # CONFIG_MINIX_FS is not set | 1166 | # CONFIG_MINIX_FS is not set |
1204 | # CONFIG_ROMFS_FS is not set | 1167 | # CONFIG_ROMFS_FS is not set |
1205 | CONFIG_INOTIFY=y | 1168 | CONFIG_INOTIFY=y |
@@ -1240,6 +1203,7 @@ CONFIG_HUGETLBFS=y | |||
1240 | CONFIG_HUGETLB_PAGE=y | 1203 | CONFIG_HUGETLB_PAGE=y |
1241 | CONFIG_RAMFS=y | 1204 | CONFIG_RAMFS=y |
1242 | # CONFIG_RELAYFS_FS is not set | 1205 | # CONFIG_RELAYFS_FS is not set |
1206 | # CONFIG_CONFIGFS_FS is not set | ||
1243 | 1207 | ||
1244 | # | 1208 | # |
1245 | # Miscellaneous filesystems | 1209 | # Miscellaneous filesystems |
@@ -1351,10 +1315,6 @@ CONFIG_CRC32=y | |||
1351 | CONFIG_LIBCRC32C=m | 1315 | CONFIG_LIBCRC32C=m |
1352 | CONFIG_ZLIB_INFLATE=y | 1316 | CONFIG_ZLIB_INFLATE=y |
1353 | CONFIG_ZLIB_DEFLATE=m | 1317 | CONFIG_ZLIB_DEFLATE=m |
1354 | CONFIG_TEXTSEARCH=y | ||
1355 | CONFIG_TEXTSEARCH_KMP=m | ||
1356 | CONFIG_TEXTSEARCH_BM=m | ||
1357 | CONFIG_TEXTSEARCH_FSM=m | ||
1358 | 1318 | ||
1359 | # | 1319 | # |
1360 | # Instrumentation Support | 1320 | # Instrumentation Support |
@@ -1367,18 +1327,20 @@ CONFIG_OPROFILE=y | |||
1367 | # Kernel hacking | 1327 | # Kernel hacking |
1368 | # | 1328 | # |
1369 | # CONFIG_PRINTK_TIME is not set | 1329 | # CONFIG_PRINTK_TIME is not set |
1370 | CONFIG_DEBUG_KERNEL=y | ||
1371 | CONFIG_MAGIC_SYSRQ=y | 1330 | CONFIG_MAGIC_SYSRQ=y |
1331 | CONFIG_DEBUG_KERNEL=y | ||
1372 | CONFIG_LOG_BUF_SHIFT=17 | 1332 | CONFIG_LOG_BUF_SHIFT=17 |
1373 | CONFIG_DETECT_SOFTLOCKUP=y | 1333 | CONFIG_DETECT_SOFTLOCKUP=y |
1374 | # CONFIG_SCHEDSTATS is not set | 1334 | # CONFIG_SCHEDSTATS is not set |
1375 | # CONFIG_DEBUG_SLAB is not set | 1335 | # CONFIG_DEBUG_SLAB is not set |
1336 | CONFIG_DEBUG_MUTEXES=y | ||
1376 | # CONFIG_DEBUG_SPINLOCK is not set | 1337 | # CONFIG_DEBUG_SPINLOCK is not set |
1377 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | 1338 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set |
1378 | # CONFIG_DEBUG_KOBJECT is not set | 1339 | # CONFIG_DEBUG_KOBJECT is not set |
1379 | # CONFIG_DEBUG_INFO is not set | 1340 | # CONFIG_DEBUG_INFO is not set |
1380 | CONFIG_DEBUG_FS=y | 1341 | CONFIG_DEBUG_FS=y |
1381 | # CONFIG_DEBUG_VM is not set | 1342 | # CONFIG_DEBUG_VM is not set |
1343 | CONFIG_FORCED_INLINING=y | ||
1382 | # CONFIG_RCU_TORTURE_TEST is not set | 1344 | # CONFIG_RCU_TORTURE_TEST is not set |
1383 | CONFIG_DEBUG_STACKOVERFLOW=y | 1345 | CONFIG_DEBUG_STACKOVERFLOW=y |
1384 | CONFIG_DEBUG_STACK_USAGE=y | 1346 | CONFIG_DEBUG_STACK_USAGE=y |
@@ -1387,6 +1349,11 @@ CONFIG_XMON=y | |||
1387 | CONFIG_XMON_DEFAULT=y | 1349 | CONFIG_XMON_DEFAULT=y |
1388 | CONFIG_IRQSTACKS=y | 1350 | CONFIG_IRQSTACKS=y |
1389 | # CONFIG_BOOTX_TEXT is not set | 1351 | # CONFIG_BOOTX_TEXT is not set |
1352 | # CONFIG_PPC_EARLY_DEBUG_LPAR is not set | ||
1353 | # CONFIG_PPC_EARLY_DEBUG_G5 is not set | ||
1354 | # CONFIG_PPC_EARLY_DEBUG_RTAS is not set | ||
1355 | # CONFIG_PPC_EARLY_DEBUG_MAPLE is not set | ||
1356 | # CONFIG_PPC_EARLY_DEBUG_ISERIES is not set | ||
1390 | 1357 | ||
1391 | # | 1358 | # |
1392 | # Security options | 1359 | # Security options |
diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile index c287980b7e65..80e9fe2632b8 100644 --- a/arch/powerpc/kernel/Makefile +++ b/arch/powerpc/kernel/Makefile | |||
@@ -12,10 +12,10 @@ endif | |||
12 | 12 | ||
13 | obj-y := semaphore.o cputable.o ptrace.o syscalls.o \ | 13 | obj-y := semaphore.o cputable.o ptrace.o syscalls.o \ |
14 | irq.o align.o signal_32.o pmc.o vdso.o \ | 14 | irq.o align.o signal_32.o pmc.o vdso.o \ |
15 | init_task.o process.o | 15 | init_task.o process.o systbl.o |
16 | obj-y += vdso32/ | 16 | obj-y += vdso32/ |
17 | obj-$(CONFIG_PPC64) += setup_64.o binfmt_elf32.o sys_ppc32.o \ | 17 | obj-$(CONFIG_PPC64) += setup_64.o binfmt_elf32.o sys_ppc32.o \ |
18 | signal_64.o ptrace32.o systbl.o \ | 18 | signal_64.o ptrace32.o \ |
19 | paca.o cpu_setup_power4.o \ | 19 | paca.o cpu_setup_power4.o \ |
20 | firmware.o sysfs.o idle_64.o | 20 | firmware.o sysfs.o idle_64.o |
21 | obj-$(CONFIG_PPC64) += vdso64/ | 21 | obj-$(CONFIG_PPC64) += vdso64/ |
@@ -46,7 +46,7 @@ extra-$(CONFIG_8xx) := head_8xx.o | |||
46 | extra-y += vmlinux.lds | 46 | extra-y += vmlinux.lds |
47 | 47 | ||
48 | obj-y += time.o prom.o traps.o setup-common.o udbg.o | 48 | obj-y += time.o prom.o traps.o setup-common.o udbg.o |
49 | obj-$(CONFIG_PPC32) += entry_32.o setup_32.o misc_32.o systbl.o | 49 | obj-$(CONFIG_PPC32) += entry_32.o setup_32.o misc_32.o |
50 | obj-$(CONFIG_PPC64) += misc_64.o dma_64.o iommu.o | 50 | obj-$(CONFIG_PPC64) += misc_64.o dma_64.o iommu.o |
51 | obj-$(CONFIG_PPC_MULTIPLATFORM) += prom_init.o | 51 | obj-$(CONFIG_PPC_MULTIPLATFORM) += prom_init.o |
52 | obj-$(CONFIG_MODULES) += ppc_ksyms.o | 52 | obj-$(CONFIG_MODULES) += ppc_ksyms.o |
diff --git a/arch/powerpc/kernel/asm-offsets.c b/arch/powerpc/kernel/asm-offsets.c index 840aad43a98b..c9a660e4c2db 100644 --- a/arch/powerpc/kernel/asm-offsets.c +++ b/arch/powerpc/kernel/asm-offsets.c | |||
@@ -92,7 +92,6 @@ int main(void) | |||
92 | 92 | ||
93 | DEFINE(TI_FLAGS, offsetof(struct thread_info, flags)); | 93 | DEFINE(TI_FLAGS, offsetof(struct thread_info, flags)); |
94 | DEFINE(TI_PREEMPT, offsetof(struct thread_info, preempt_count)); | 94 | DEFINE(TI_PREEMPT, offsetof(struct thread_info, preempt_count)); |
95 | DEFINE(TI_SIGFRAME, offsetof(struct thread_info, nvgprs_frame)); | ||
96 | DEFINE(TI_TASK, offsetof(struct thread_info, task)); | 95 | DEFINE(TI_TASK, offsetof(struct thread_info, task)); |
97 | #ifdef CONFIG_PPC32 | 96 | #ifdef CONFIG_PPC32 |
98 | DEFINE(TI_EXECDOMAIN, offsetof(struct thread_info, exec_domain)); | 97 | DEFINE(TI_EXECDOMAIN, offsetof(struct thread_info, exec_domain)); |
diff --git a/arch/powerpc/kernel/cputable.c b/arch/powerpc/kernel/cputable.c index 10696456a4c6..e4e81374cb9a 100644 --- a/arch/powerpc/kernel/cputable.c +++ b/arch/powerpc/kernel/cputable.c | |||
@@ -53,8 +53,10 @@ extern void __setup_cpu_ppc970(unsigned long offset, struct cpu_spec* spec); | |||
53 | PPC_FEATURE_HAS_MMU) | 53 | PPC_FEATURE_HAS_MMU) |
54 | #define COMMON_USER_PPC64 (COMMON_USER | PPC_FEATURE_64) | 54 | #define COMMON_USER_PPC64 (COMMON_USER | PPC_FEATURE_64) |
55 | #define COMMON_USER_POWER4 (COMMON_USER_PPC64 | PPC_FEATURE_POWER4) | 55 | #define COMMON_USER_POWER4 (COMMON_USER_PPC64 | PPC_FEATURE_POWER4) |
56 | #define COMMON_USER_POWER5 (COMMON_USER_PPC64 | PPC_FEATURE_POWER5) | 56 | #define COMMON_USER_POWER5 (COMMON_USER_PPC64 | PPC_FEATURE_POWER5 |\ |
57 | #define COMMON_USER_POWER5_PLUS (COMMON_USER_PPC64 | PPC_FEATURE_POWER5_PLUS) | 57 | PPC_FEATURE_SMT | PPC_FEATURE_ICACHE_SNOOP) |
58 | #define COMMON_USER_POWER5_PLUS (COMMON_USER_PPC64 | PPC_FEATURE_POWER5_PLUS|\ | ||
59 | PPC_FEATURE_SMT | PPC_FEATURE_ICACHE_SNOOP) | ||
58 | #define COMMON_USER_BOOKE (PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU | \ | 60 | #define COMMON_USER_BOOKE (PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU | \ |
59 | PPC_FEATURE_BOOKE) | 61 | PPC_FEATURE_BOOKE) |
60 | 62 | ||
@@ -267,7 +269,8 @@ struct cpu_spec cpu_specs[] = { | |||
267 | .cpu_name = "Cell Broadband Engine", | 269 | .cpu_name = "Cell Broadband Engine", |
268 | .cpu_features = CPU_FTRS_CELL, | 270 | .cpu_features = CPU_FTRS_CELL, |
269 | .cpu_user_features = COMMON_USER_PPC64 | | 271 | .cpu_user_features = COMMON_USER_PPC64 | |
270 | PPC_FEATURE_CELL | PPC_FEATURE_HAS_ALTIVEC_COMP, | 272 | PPC_FEATURE_CELL | PPC_FEATURE_HAS_ALTIVEC_COMP | |
273 | PPC_FEATURE_SMT, | ||
271 | .icache_bsize = 128, | 274 | .icache_bsize = 128, |
272 | .dcache_bsize = 128, | 275 | .dcache_bsize = 128, |
273 | .cpu_setup = __setup_cpu_be, | 276 | .cpu_setup = __setup_cpu_be, |
diff --git a/arch/powerpc/kernel/crash.c b/arch/powerpc/kernel/crash.c index 8c21d378f5d2..778f22fd85d2 100644 --- a/arch/powerpc/kernel/crash.c +++ b/arch/powerpc/kernel/crash.c | |||
@@ -134,8 +134,10 @@ static void crash_kexec_prepare_cpus(void) | |||
134 | * the crash CPU will send an IPI and wait for other CPUs to | 134 | * the crash CPU will send an IPI and wait for other CPUs to |
135 | * respond. If not, proceed the kexec boot even though we failed to | 135 | * respond. If not, proceed the kexec boot even though we failed to |
136 | * capture other CPU states. | 136 | * capture other CPU states. |
137 | * Delay of at least 10 seconds. | ||
137 | */ | 138 | */ |
138 | msecs = 1000000; | 139 | printk(KERN_ALERT "Sending IPI to other cpus...\n"); |
140 | msecs = 10000; | ||
139 | while ((atomic_read(&waiting_for_crash_ipi) > 0) && (--msecs > 0)) { | 141 | while ((atomic_read(&waiting_for_crash_ipi) > 0) && (--msecs > 0)) { |
140 | barrier(); | 142 | barrier(); |
141 | mdelay(1); | 143 | mdelay(1); |
diff --git a/arch/powerpc/kernel/entry_32.S b/arch/powerpc/kernel/entry_32.S index f20a67261ec7..4827ca1ec89b 100644 --- a/arch/powerpc/kernel/entry_32.S +++ b/arch/powerpc/kernel/entry_32.S | |||
@@ -227,7 +227,7 @@ ret_from_syscall: | |||
227 | MTMSRD(r10) | 227 | MTMSRD(r10) |
228 | lwz r9,TI_FLAGS(r12) | 228 | lwz r9,TI_FLAGS(r12) |
229 | li r8,-_LAST_ERRNO | 229 | li r8,-_LAST_ERRNO |
230 | andi. r0,r9,(_TIF_SYSCALL_T_OR_A|_TIF_SIGPENDING|_TIF_NEED_RESCHED|_TIF_RESTOREALL|_TIF_RESTORE_SIGMASK) | 230 | andi. r0,r9,(_TIF_SYSCALL_T_OR_A|_TIF_SINGLESTEP|_TIF_USER_WORK_MASK|_TIF_PERSYSCALL_MASK) |
231 | bne- syscall_exit_work | 231 | bne- syscall_exit_work |
232 | cmplw 0,r3,r8 | 232 | cmplw 0,r3,r8 |
233 | blt+ syscall_exit_cont | 233 | blt+ syscall_exit_cont |
@@ -287,8 +287,10 @@ syscall_dotrace: | |||
287 | 287 | ||
288 | syscall_exit_work: | 288 | syscall_exit_work: |
289 | andi. r0,r9,_TIF_RESTOREALL | 289 | andi. r0,r9,_TIF_RESTOREALL |
290 | bne- 2f | 290 | beq+ 0f |
291 | cmplw 0,r3,r8 | 291 | REST_NVGPRS(r1) |
292 | b 2f | ||
293 | 0: cmplw 0,r3,r8 | ||
292 | blt+ 1f | 294 | blt+ 1f |
293 | andi. r0,r9,_TIF_NOERROR | 295 | andi. r0,r9,_TIF_NOERROR |
294 | bne- 1f | 296 | bne- 1f |
@@ -302,9 +304,7 @@ syscall_exit_work: | |||
302 | 2: andi. r0,r9,(_TIF_PERSYSCALL_MASK) | 304 | 2: andi. r0,r9,(_TIF_PERSYSCALL_MASK) |
303 | beq 4f | 305 | beq 4f |
304 | 306 | ||
305 | /* Clear per-syscall TIF flags if any are set, but _leave_ | 307 | /* Clear per-syscall TIF flags if any are set. */ |
306 | _TIF_SAVE_NVGPRS set in r9 since we haven't dealt with that | ||
307 | yet. */ | ||
308 | 308 | ||
309 | li r11,_TIF_PERSYSCALL_MASK | 309 | li r11,_TIF_PERSYSCALL_MASK |
310 | addi r12,r12,TI_FLAGS | 310 | addi r12,r12,TI_FLAGS |
@@ -318,8 +318,13 @@ syscall_exit_work: | |||
318 | subi r12,r12,TI_FLAGS | 318 | subi r12,r12,TI_FLAGS |
319 | 319 | ||
320 | 4: /* Anything which requires enabling interrupts? */ | 320 | 4: /* Anything which requires enabling interrupts? */ |
321 | andi. r0,r9,(_TIF_SYSCALL_T_OR_A|_TIF_SINGLESTEP|_TIF_SAVE_NVGPRS) | 321 | andi. r0,r9,(_TIF_SYSCALL_T_OR_A|_TIF_SINGLESTEP) |
322 | beq 7f | 322 | beq ret_from_except |
323 | |||
324 | /* Re-enable interrupts */ | ||
325 | ori r10,r10,MSR_EE | ||
326 | SYNC | ||
327 | MTMSRD(r10) | ||
323 | 328 | ||
324 | /* Save NVGPRS if they're not saved already */ | 329 | /* Save NVGPRS if they're not saved already */ |
325 | lwz r4,_TRAP(r1) | 330 | lwz r4,_TRAP(r1) |
@@ -328,71 +333,11 @@ syscall_exit_work: | |||
328 | SAVE_NVGPRS(r1) | 333 | SAVE_NVGPRS(r1) |
329 | li r4,0xc00 | 334 | li r4,0xc00 |
330 | stw r4,_TRAP(r1) | 335 | stw r4,_TRAP(r1) |
331 | 336 | 5: | |
332 | /* Re-enable interrupts */ | ||
333 | 5: ori r10,r10,MSR_EE | ||
334 | SYNC | ||
335 | MTMSRD(r10) | ||
336 | |||
337 | andi. r0,r9,_TIF_SAVE_NVGPRS | ||
338 | bne save_user_nvgprs | ||
339 | |||
340 | save_user_nvgprs_cont: | ||
341 | andi. r0,r9,(_TIF_SYSCALL_T_OR_A|_TIF_SINGLESTEP) | ||
342 | beq 7f | ||
343 | |||
344 | addi r3,r1,STACK_FRAME_OVERHEAD | 337 | addi r3,r1,STACK_FRAME_OVERHEAD |
345 | bl do_syscall_trace_leave | 338 | bl do_syscall_trace_leave |
346 | REST_NVGPRS(r1) | 339 | b ret_from_except_full |
347 | |||
348 | 6: lwz r3,GPR3(r1) | ||
349 | LOAD_MSR_KERNEL(r10,MSR_KERNEL) /* doesn't include MSR_EE */ | ||
350 | SYNC | ||
351 | MTMSRD(r10) /* disable interrupts again */ | ||
352 | rlwinm r12,r1,0,0,(31-THREAD_SHIFT) /* current_thread_info() */ | ||
353 | lwz r9,TI_FLAGS(r12) | ||
354 | 7: | ||
355 | andi. r0,r9,_TIF_NEED_RESCHED | ||
356 | bne 8f | ||
357 | lwz r5,_MSR(r1) | ||
358 | andi. r5,r5,MSR_PR | ||
359 | beq ret_from_except | ||
360 | andi. r0,r9,_TIF_SIGPENDING|_TIF_RESTORE_SIGMASK | ||
361 | beq ret_from_except | ||
362 | b do_user_signal | ||
363 | 8: | ||
364 | ori r10,r10,MSR_EE | ||
365 | SYNC | ||
366 | MTMSRD(r10) /* re-enable interrupts */ | ||
367 | bl schedule | ||
368 | b 6b | ||
369 | |||
370 | save_user_nvgprs: | ||
371 | lwz r8,TI_SIGFRAME(r12) | ||
372 | |||
373 | .macro savewords start, end | ||
374 | 1: stw \start,4*(\start)(r8) | ||
375 | .section __ex_table,"a" | ||
376 | .align 2 | ||
377 | .long 1b,save_user_nvgprs_fault | ||
378 | .previous | ||
379 | .if \end - \start | ||
380 | savewords "(\start+1)",\end | ||
381 | .endif | ||
382 | .endm | ||
383 | savewords 14,31 | ||
384 | b save_user_nvgprs_cont | ||
385 | |||
386 | |||
387 | save_user_nvgprs_fault: | ||
388 | li r3,11 /* SIGSEGV */ | ||
389 | lwz r4,TI_TASK(r12) | ||
390 | bl force_sigsegv | ||
391 | 340 | ||
392 | rlwinm r12,r1,0,0,(31-THREAD_SHIFT) /* current_thread_info() */ | ||
393 | lwz r9,TI_FLAGS(r12) | ||
394 | b save_user_nvgprs_cont | ||
395 | |||
396 | #ifdef SHOW_SYSCALLS | 341 | #ifdef SHOW_SYSCALLS |
397 | do_show_syscall: | 342 | do_show_syscall: |
398 | #ifdef SHOW_SYSCALLS_TASK | 343 | #ifdef SHOW_SYSCALLS_TASK |
@@ -490,6 +435,14 @@ ppc_clone: | |||
490 | stw r0,_TRAP(r1) /* register set saved */ | 435 | stw r0,_TRAP(r1) /* register set saved */ |
491 | b sys_clone | 436 | b sys_clone |
492 | 437 | ||
438 | .globl ppc_swapcontext | ||
439 | ppc_swapcontext: | ||
440 | SAVE_NVGPRS(r1) | ||
441 | lwz r0,_TRAP(r1) | ||
442 | rlwinm r0,r0,0,0,30 /* clear LSB to indicate full */ | ||
443 | stw r0,_TRAP(r1) /* register set saved */ | ||
444 | b sys_swapcontext | ||
445 | |||
493 | /* | 446 | /* |
494 | * Top-level page fault handling. | 447 | * Top-level page fault handling. |
495 | * This is in assembler because if do_page_fault tells us that | 448 | * This is in assembler because if do_page_fault tells us that |
@@ -683,7 +636,7 @@ user_exc_return: /* r10 contains MSR_KERNEL here */ | |||
683 | /* Check current_thread_info()->flags */ | 636 | /* Check current_thread_info()->flags */ |
684 | rlwinm r9,r1,0,0,(31-THREAD_SHIFT) | 637 | rlwinm r9,r1,0,0,(31-THREAD_SHIFT) |
685 | lwz r9,TI_FLAGS(r9) | 638 | lwz r9,TI_FLAGS(r9) |
686 | andi. r0,r9,(_TIF_SIGPENDING|_TIF_NEED_RESCHED|_TIF_RESTOREALL|_TIF_RESTORE_SIGMASK) | 639 | andi. r0,r9,(_TIF_SIGPENDING|_TIF_RESTORE_SIGMASK|_TIF_NEED_RESCHED) |
687 | bne do_work | 640 | bne do_work |
688 | 641 | ||
689 | restore_user: | 642 | restore_user: |
diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S index 388f861b8ed1..24be0cf86d7f 100644 --- a/arch/powerpc/kernel/entry_64.S +++ b/arch/powerpc/kernel/entry_64.S | |||
@@ -160,7 +160,7 @@ syscall_exit: | |||
160 | mtmsrd r10,1 | 160 | mtmsrd r10,1 |
161 | ld r9,TI_FLAGS(r12) | 161 | ld r9,TI_FLAGS(r12) |
162 | li r11,-_LAST_ERRNO | 162 | li r11,-_LAST_ERRNO |
163 | andi. r0,r9,(_TIF_SYSCALL_T_OR_A|_TIF_SINGLESTEP|_TIF_SIGPENDING|_TIF_NEED_RESCHED|_TIF_RESTOREALL|_TIF_SAVE_NVGPRS|_TIF_NOERROR|_TIF_RESTORE_SIGMASK) | 163 | andi. r0,r9,(_TIF_SYSCALL_T_OR_A|_TIF_SINGLESTEP|_TIF_USER_WORK_MASK|_TIF_PERSYSCALL_MASK) |
164 | bne- syscall_exit_work | 164 | bne- syscall_exit_work |
165 | cmpld r3,r11 | 165 | cmpld r3,r11 |
166 | ld r5,_CCR(r1) | 166 | ld r5,_CCR(r1) |
@@ -216,8 +216,10 @@ syscall_exit_work: | |||
216 | If TIF_NOERROR is set, just save r3 as it is. */ | 216 | If TIF_NOERROR is set, just save r3 as it is. */ |
217 | 217 | ||
218 | andi. r0,r9,_TIF_RESTOREALL | 218 | andi. r0,r9,_TIF_RESTOREALL |
219 | bne- 2f | 219 | beq+ 0f |
220 | cmpld r3,r11 /* r10 is -LAST_ERRNO */ | 220 | REST_NVGPRS(r1) |
221 | b 2f | ||
222 | 0: cmpld r3,r11 /* r10 is -LAST_ERRNO */ | ||
221 | blt+ 1f | 223 | blt+ 1f |
222 | andi. r0,r9,_TIF_NOERROR | 224 | andi. r0,r9,_TIF_NOERROR |
223 | bne- 1f | 225 | bne- 1f |
@@ -229,9 +231,7 @@ syscall_exit_work: | |||
229 | 2: andi. r0,r9,(_TIF_PERSYSCALL_MASK) | 231 | 2: andi. r0,r9,(_TIF_PERSYSCALL_MASK) |
230 | beq 4f | 232 | beq 4f |
231 | 233 | ||
232 | /* Clear per-syscall TIF flags if any are set, but _leave_ | 234 | /* Clear per-syscall TIF flags if any are set. */ |
233 | _TIF_SAVE_NVGPRS set in r9 since we haven't dealt with that | ||
234 | yet. */ | ||
235 | 235 | ||
236 | li r11,_TIF_PERSYSCALL_MASK | 236 | li r11,_TIF_PERSYSCALL_MASK |
237 | addi r12,r12,TI_FLAGS | 237 | addi r12,r12,TI_FLAGS |
@@ -240,10 +240,9 @@ syscall_exit_work: | |||
240 | stdcx. r10,0,r12 | 240 | stdcx. r10,0,r12 |
241 | bne- 3b | 241 | bne- 3b |
242 | subi r12,r12,TI_FLAGS | 242 | subi r12,r12,TI_FLAGS |
243 | 243 | ||
244 | 4: bl .save_nvgprs | 244 | 4: /* Anything else left to do? */ |
245 | /* Anything else left to do? */ | 245 | andi. r0,r9,(_TIF_SYSCALL_T_OR_A|_TIF_SINGLESTEP) |
246 | andi. r0,r9,(_TIF_SYSCALL_T_OR_A|_TIF_SINGLESTEP|_TIF_SAVE_NVGPRS) | ||
247 | beq .ret_from_except_lite | 246 | beq .ret_from_except_lite |
248 | 247 | ||
249 | /* Re-enable interrupts */ | 248 | /* Re-enable interrupts */ |
@@ -251,26 +250,10 @@ syscall_exit_work: | |||
251 | ori r10,r10,MSR_EE | 250 | ori r10,r10,MSR_EE |
252 | mtmsrd r10,1 | 251 | mtmsrd r10,1 |
253 | 252 | ||
254 | andi. r0,r9,_TIF_SAVE_NVGPRS | 253 | bl .save_nvgprs |
255 | bne save_user_nvgprs | ||
256 | |||
257 | /* If tracing, re-enable interrupts and do it */ | ||
258 | save_user_nvgprs_cont: | ||
259 | andi. r0,r9,(_TIF_SYSCALL_T_OR_A|_TIF_SINGLESTEP) | ||
260 | beq 5f | ||
261 | |||
262 | addi r3,r1,STACK_FRAME_OVERHEAD | 254 | addi r3,r1,STACK_FRAME_OVERHEAD |
263 | bl .do_syscall_trace_leave | 255 | bl .do_syscall_trace_leave |
264 | REST_NVGPRS(r1) | 256 | b .ret_from_except |
265 | clrrdi r12,r1,THREAD_SHIFT | ||
266 | |||
267 | /* Disable interrupts again and handle other work if any */ | ||
268 | 5: mfmsr r10 | ||
269 | rldicl r10,r10,48,1 | ||
270 | rotldi r10,r10,16 | ||
271 | mtmsrd r10,1 | ||
272 | |||
273 | b .ret_from_except_lite | ||
274 | 257 | ||
275 | /* Save non-volatile GPRs, if not already saved. */ | 258 | /* Save non-volatile GPRs, if not already saved. */ |
276 | _GLOBAL(save_nvgprs) | 259 | _GLOBAL(save_nvgprs) |
@@ -282,51 +265,6 @@ _GLOBAL(save_nvgprs) | |||
282 | std r0,_TRAP(r1) | 265 | std r0,_TRAP(r1) |
283 | blr | 266 | blr |
284 | 267 | ||
285 | |||
286 | save_user_nvgprs: | ||
287 | ld r10,TI_SIGFRAME(r12) | ||
288 | andi. r0,r9,_TIF_32BIT | ||
289 | beq- save_user_nvgprs_64 | ||
290 | |||
291 | /* 32-bit save to userspace */ | ||
292 | |||
293 | .macro savewords start, end | ||
294 | 1: stw \start,4*(\start)(r10) | ||
295 | .section __ex_table,"a" | ||
296 | .align 3 | ||
297 | .llong 1b,save_user_nvgprs_fault | ||
298 | .previous | ||
299 | .if \end - \start | ||
300 | savewords "(\start+1)",\end | ||
301 | .endif | ||
302 | .endm | ||
303 | savewords 14,31 | ||
304 | b save_user_nvgprs_cont | ||
305 | |||
306 | save_user_nvgprs_64: | ||
307 | /* 64-bit save to userspace */ | ||
308 | |||
309 | .macro savelongs start, end | ||
310 | 1: std \start,8*(\start)(r10) | ||
311 | .section __ex_table,"a" | ||
312 | .align 3 | ||
313 | .llong 1b,save_user_nvgprs_fault | ||
314 | .previous | ||
315 | .if \end - \start | ||
316 | savelongs "(\start+1)",\end | ||
317 | .endif | ||
318 | .endm | ||
319 | savelongs 14,31 | ||
320 | b save_user_nvgprs_cont | ||
321 | |||
322 | save_user_nvgprs_fault: | ||
323 | li r3,11 /* SIGSEGV */ | ||
324 | ld r4,TI_TASK(r12) | ||
325 | bl .force_sigsegv | ||
326 | |||
327 | clrrdi r12,r1,THREAD_SHIFT | ||
328 | ld r9,TI_FLAGS(r12) | ||
329 | b save_user_nvgprs_cont | ||
330 | 268 | ||
331 | /* | 269 | /* |
332 | * The sigsuspend and rt_sigsuspend system calls can call do_signal | 270 | * The sigsuspend and rt_sigsuspend system calls can call do_signal |
@@ -352,6 +290,16 @@ _GLOBAL(ppc_clone) | |||
352 | bl .sys_clone | 290 | bl .sys_clone |
353 | b syscall_exit | 291 | b syscall_exit |
354 | 292 | ||
293 | _GLOBAL(ppc32_swapcontext) | ||
294 | bl .save_nvgprs | ||
295 | bl .compat_sys_swapcontext | ||
296 | b syscall_exit | ||
297 | |||
298 | _GLOBAL(ppc64_swapcontext) | ||
299 | bl .save_nvgprs | ||
300 | bl .sys_swapcontext | ||
301 | b syscall_exit | ||
302 | |||
355 | _GLOBAL(ret_from_fork) | 303 | _GLOBAL(ret_from_fork) |
356 | bl .schedule_tail | 304 | bl .schedule_tail |
357 | REST_NVGPRS(r1) | 305 | REST_NVGPRS(r1) |
diff --git a/arch/powerpc/kernel/fpu.S b/arch/powerpc/kernel/fpu.S index e4362dfa37fb..340730fb8c91 100644 --- a/arch/powerpc/kernel/fpu.S +++ b/arch/powerpc/kernel/fpu.S | |||
@@ -66,7 +66,7 @@ _GLOBAL(load_up_fpu) | |||
66 | #else | 66 | #else |
67 | ld r4,PACACURRENT(r13) | 67 | ld r4,PACACURRENT(r13) |
68 | addi r5,r4,THREAD /* Get THREAD */ | 68 | addi r5,r4,THREAD /* Get THREAD */ |
69 | ld r4,THREAD_FPEXC_MODE(r5) | 69 | lwz r4,THREAD_FPEXC_MODE(r5) |
70 | ori r12,r12,MSR_FP | 70 | ori r12,r12,MSR_FP |
71 | or r12,r12,r4 | 71 | or r12,r12,r4 |
72 | std r12,_MSR(r1) | 72 | std r12,_MSR(r1) |
diff --git a/arch/powerpc/kernel/head_32.S b/arch/powerpc/kernel/head_32.S index 03b25f9359f8..a0579e859b21 100644 --- a/arch/powerpc/kernel/head_32.S +++ b/arch/powerpc/kernel/head_32.S | |||
@@ -714,6 +714,7 @@ AltiVecUnavailable: | |||
714 | #ifdef CONFIG_ALTIVEC | 714 | #ifdef CONFIG_ALTIVEC |
715 | bne load_up_altivec /* if from user, just load it up */ | 715 | bne load_up_altivec /* if from user, just load it up */ |
716 | #endif /* CONFIG_ALTIVEC */ | 716 | #endif /* CONFIG_ALTIVEC */ |
717 | addi r3,r1,STACK_FRAME_OVERHEAD | ||
717 | EXC_XFER_EE_LITE(0xf20, altivec_unavailable_exception) | 718 | EXC_XFER_EE_LITE(0xf20, altivec_unavailable_exception) |
718 | 719 | ||
719 | PerformanceMonitor: | 720 | PerformanceMonitor: |
diff --git a/arch/powerpc/kernel/head_64.S b/arch/powerpc/kernel/head_64.S index 308268466342..9b65029dd2a3 100644 --- a/arch/powerpc/kernel/head_64.S +++ b/arch/powerpc/kernel/head_64.S | |||
@@ -139,7 +139,7 @@ _GLOBAL(__secondary_hold) | |||
139 | ori r24,r24,MSR_RI | 139 | ori r24,r24,MSR_RI |
140 | mtmsrd r24 /* RI on */ | 140 | mtmsrd r24 /* RI on */ |
141 | 141 | ||
142 | /* Grab our linux cpu number */ | 142 | /* Grab our physical cpu number */ |
143 | mr r24,r3 | 143 | mr r24,r3 |
144 | 144 | ||
145 | /* Tell the master cpu we're here */ | 145 | /* Tell the master cpu we're here */ |
@@ -153,12 +153,7 @@ _GLOBAL(__secondary_hold) | |||
153 | cmpdi 0,r4,1 | 153 | cmpdi 0,r4,1 |
154 | bne 100b | 154 | bne 100b |
155 | 155 | ||
156 | #ifdef CONFIG_HMT | 156 | #if defined(CONFIG_SMP) || defined(CONFIG_KEXEC) |
157 | SET_REG_IMMEDIATE(r4, .hmt_init) | ||
158 | mtctr r4 | ||
159 | bctr | ||
160 | #else | ||
161 | #ifdef CONFIG_SMP | ||
162 | LOAD_REG_IMMEDIATE(r4, .pSeries_secondary_smp_init) | 157 | LOAD_REG_IMMEDIATE(r4, .pSeries_secondary_smp_init) |
163 | mtctr r4 | 158 | mtctr r4 |
164 | mr r3,r24 | 159 | mr r3,r24 |
@@ -166,7 +161,6 @@ _GLOBAL(__secondary_hold) | |||
166 | #else | 161 | #else |
167 | BUG_OPCODE | 162 | BUG_OPCODE |
168 | #endif | 163 | #endif |
169 | #endif | ||
170 | 164 | ||
171 | /* This value is used to mark exception frames on the stack. */ | 165 | /* This value is used to mark exception frames on the stack. */ |
172 | .section ".toc","aw" | 166 | .section ".toc","aw" |
@@ -321,7 +315,6 @@ exception_marker: | |||
321 | label##_pSeries: \ | 315 | label##_pSeries: \ |
322 | HMT_MEDIUM; \ | 316 | HMT_MEDIUM; \ |
323 | mtspr SPRN_SPRG1,r13; /* save r13 */ \ | 317 | mtspr SPRN_SPRG1,r13; /* save r13 */ \ |
324 | RUNLATCH_ON(r13); \ | ||
325 | EXCEPTION_PROLOG_PSERIES(PACA_EXGEN, label##_common) | 318 | EXCEPTION_PROLOG_PSERIES(PACA_EXGEN, label##_common) |
326 | 319 | ||
327 | #define STD_EXCEPTION_ISERIES(n, label, area) \ | 320 | #define STD_EXCEPTION_ISERIES(n, label, area) \ |
@@ -329,7 +322,6 @@ label##_pSeries: \ | |||
329 | label##_iSeries: \ | 322 | label##_iSeries: \ |
330 | HMT_MEDIUM; \ | 323 | HMT_MEDIUM; \ |
331 | mtspr SPRN_SPRG1,r13; /* save r13 */ \ | 324 | mtspr SPRN_SPRG1,r13; /* save r13 */ \ |
332 | RUNLATCH_ON(r13); \ | ||
333 | EXCEPTION_PROLOG_ISERIES_1(area); \ | 325 | EXCEPTION_PROLOG_ISERIES_1(area); \ |
334 | EXCEPTION_PROLOG_ISERIES_2; \ | 326 | EXCEPTION_PROLOG_ISERIES_2; \ |
335 | b label##_common | 327 | b label##_common |
@@ -339,7 +331,6 @@ label##_iSeries: \ | |||
339 | label##_iSeries: \ | 331 | label##_iSeries: \ |
340 | HMT_MEDIUM; \ | 332 | HMT_MEDIUM; \ |
341 | mtspr SPRN_SPRG1,r13; /* save r13 */ \ | 333 | mtspr SPRN_SPRG1,r13; /* save r13 */ \ |
342 | RUNLATCH_ON(r13); \ | ||
343 | EXCEPTION_PROLOG_ISERIES_1(PACA_EXGEN); \ | 334 | EXCEPTION_PROLOG_ISERIES_1(PACA_EXGEN); \ |
344 | lbz r10,PACAPROCENABLED(r13); \ | 335 | lbz r10,PACAPROCENABLED(r13); \ |
345 | cmpwi 0,r10,0; \ | 336 | cmpwi 0,r10,0; \ |
@@ -392,6 +383,7 @@ label##_common: \ | |||
392 | label##_common: \ | 383 | label##_common: \ |
393 | EXCEPTION_PROLOG_COMMON(trap, PACA_EXGEN); \ | 384 | EXCEPTION_PROLOG_COMMON(trap, PACA_EXGEN); \ |
394 | DISABLE_INTS; \ | 385 | DISABLE_INTS; \ |
386 | bl .ppc64_runlatch_on; \ | ||
395 | addi r3,r1,STACK_FRAME_OVERHEAD; \ | 387 | addi r3,r1,STACK_FRAME_OVERHEAD; \ |
396 | bl hdlr; \ | 388 | bl hdlr; \ |
397 | b .ret_from_except_lite | 389 | b .ret_from_except_lite |
@@ -409,7 +401,6 @@ __start_interrupts: | |||
409 | _machine_check_pSeries: | 401 | _machine_check_pSeries: |
410 | HMT_MEDIUM | 402 | HMT_MEDIUM |
411 | mtspr SPRN_SPRG1,r13 /* save r13 */ | 403 | mtspr SPRN_SPRG1,r13 /* save r13 */ |
412 | RUNLATCH_ON(r13) | ||
413 | EXCEPTION_PROLOG_PSERIES(PACA_EXMC, machine_check_common) | 404 | EXCEPTION_PROLOG_PSERIES(PACA_EXMC, machine_check_common) |
414 | 405 | ||
415 | . = 0x300 | 406 | . = 0x300 |
@@ -436,7 +427,6 @@ END_FTR_SECTION_IFCLR(CPU_FTR_SLB) | |||
436 | data_access_slb_pSeries: | 427 | data_access_slb_pSeries: |
437 | HMT_MEDIUM | 428 | HMT_MEDIUM |
438 | mtspr SPRN_SPRG1,r13 | 429 | mtspr SPRN_SPRG1,r13 |
439 | RUNLATCH_ON(r13) | ||
440 | mfspr r13,SPRN_SPRG3 /* get paca address into r13 */ | 430 | mfspr r13,SPRN_SPRG3 /* get paca address into r13 */ |
441 | std r3,PACA_EXSLB+EX_R3(r13) | 431 | std r3,PACA_EXSLB+EX_R3(r13) |
442 | mfspr r3,SPRN_DAR | 432 | mfspr r3,SPRN_DAR |
@@ -462,7 +452,6 @@ data_access_slb_pSeries: | |||
462 | instruction_access_slb_pSeries: | 452 | instruction_access_slb_pSeries: |
463 | HMT_MEDIUM | 453 | HMT_MEDIUM |
464 | mtspr SPRN_SPRG1,r13 | 454 | mtspr SPRN_SPRG1,r13 |
465 | RUNLATCH_ON(r13) | ||
466 | mfspr r13,SPRN_SPRG3 /* get paca address into r13 */ | 455 | mfspr r13,SPRN_SPRG3 /* get paca address into r13 */ |
467 | std r3,PACA_EXSLB+EX_R3(r13) | 456 | std r3,PACA_EXSLB+EX_R3(r13) |
468 | mfspr r3,SPRN_SRR0 /* SRR0 is faulting address */ | 457 | mfspr r3,SPRN_SRR0 /* SRR0 is faulting address */ |
@@ -493,7 +482,6 @@ instruction_access_slb_pSeries: | |||
493 | .globl system_call_pSeries | 482 | .globl system_call_pSeries |
494 | system_call_pSeries: | 483 | system_call_pSeries: |
495 | HMT_MEDIUM | 484 | HMT_MEDIUM |
496 | RUNLATCH_ON(r9) | ||
497 | mr r9,r13 | 485 | mr r9,r13 |
498 | mfmsr r10 | 486 | mfmsr r10 |
499 | mfspr r13,SPRN_SPRG3 | 487 | mfspr r13,SPRN_SPRG3 |
@@ -577,7 +565,6 @@ slb_miss_user_pseries: | |||
577 | system_reset_fwnmi: | 565 | system_reset_fwnmi: |
578 | HMT_MEDIUM | 566 | HMT_MEDIUM |
579 | mtspr SPRN_SPRG1,r13 /* save r13 */ | 567 | mtspr SPRN_SPRG1,r13 /* save r13 */ |
580 | RUNLATCH_ON(r13) | ||
581 | EXCEPTION_PROLOG_PSERIES(PACA_EXGEN, system_reset_common) | 568 | EXCEPTION_PROLOG_PSERIES(PACA_EXGEN, system_reset_common) |
582 | 569 | ||
583 | .globl machine_check_fwnmi | 570 | .globl machine_check_fwnmi |
@@ -585,7 +572,6 @@ system_reset_fwnmi: | |||
585 | machine_check_fwnmi: | 572 | machine_check_fwnmi: |
586 | HMT_MEDIUM | 573 | HMT_MEDIUM |
587 | mtspr SPRN_SPRG1,r13 /* save r13 */ | 574 | mtspr SPRN_SPRG1,r13 /* save r13 */ |
588 | RUNLATCH_ON(r13) | ||
589 | EXCEPTION_PROLOG_PSERIES(PACA_EXMC, machine_check_common) | 575 | EXCEPTION_PROLOG_PSERIES(PACA_EXMC, machine_check_common) |
590 | 576 | ||
591 | #ifdef CONFIG_PPC_ISERIES | 577 | #ifdef CONFIG_PPC_ISERIES |
@@ -749,11 +735,12 @@ iSeries_secondary_smp_loop: | |||
749 | 735 | ||
750 | .globl decrementer_iSeries_masked | 736 | .globl decrementer_iSeries_masked |
751 | decrementer_iSeries_masked: | 737 | decrementer_iSeries_masked: |
738 | /* We may not have a valid TOC pointer in here. */ | ||
752 | li r11,1 | 739 | li r11,1 |
753 | ld r12,PACALPPACAPTR(r13) | 740 | ld r12,PACALPPACAPTR(r13) |
754 | stb r11,LPPACADECRINT(r12) | 741 | stb r11,LPPACADECRINT(r12) |
755 | LOAD_REG_ADDRBASE(r12,tb_ticks_per_jiffy) | 742 | LOAD_REG_IMMEDIATE(r12, tb_ticks_per_jiffy) |
756 | lwz r12,ADDROFF(tb_ticks_per_jiffy)(r12) | 743 | lwz r12,0(r12) |
757 | mtspr SPRN_DEC,r12 | 744 | mtspr SPRN_DEC,r12 |
758 | /* fall through */ | 745 | /* fall through */ |
759 | 746 | ||
@@ -895,7 +882,6 @@ unrecov_fer: | |||
895 | .align 7 | 882 | .align 7 |
896 | .globl data_access_common | 883 | .globl data_access_common |
897 | data_access_common: | 884 | data_access_common: |
898 | RUNLATCH_ON(r10) /* It wont fit in the 0x300 handler */ | ||
899 | mfspr r10,SPRN_DAR | 885 | mfspr r10,SPRN_DAR |
900 | std r10,PACA_EXGEN+EX_DAR(r13) | 886 | std r10,PACA_EXGEN+EX_DAR(r13) |
901 | mfspr r10,SPRN_DSISR | 887 | mfspr r10,SPRN_DSISR |
@@ -1043,6 +1029,7 @@ hardware_interrupt_common: | |||
1043 | EXCEPTION_PROLOG_COMMON(0x500, PACA_EXGEN) | 1029 | EXCEPTION_PROLOG_COMMON(0x500, PACA_EXGEN) |
1044 | hardware_interrupt_entry: | 1030 | hardware_interrupt_entry: |
1045 | DISABLE_INTS | 1031 | DISABLE_INTS |
1032 | bl .ppc64_runlatch_on | ||
1046 | addi r3,r1,STACK_FRAME_OVERHEAD | 1033 | addi r3,r1,STACK_FRAME_OVERHEAD |
1047 | bl .do_IRQ | 1034 | bl .do_IRQ |
1048 | b .ret_from_except_lite | 1035 | b .ret_from_except_lite |
@@ -1550,6 +1537,9 @@ _STATIC(__boot_from_prom) | |||
1550 | mr r28,r6 | 1537 | mr r28,r6 |
1551 | mr r27,r7 | 1538 | mr r27,r7 |
1552 | 1539 | ||
1540 | /* Align the stack to 16-byte boundary for broken yaboot */ | ||
1541 | rldicr r1,r1,0,59 | ||
1542 | |||
1553 | /* Make sure we are running in 64 bits mode */ | 1543 | /* Make sure we are running in 64 bits mode */ |
1554 | bl .enable_64b_mode | 1544 | bl .enable_64b_mode |
1555 | 1545 | ||
@@ -1817,22 +1807,6 @@ _STATIC(start_here_multiplatform) | |||
1817 | ori r6,r6,MSR_RI | 1807 | ori r6,r6,MSR_RI |
1818 | mtmsrd r6 /* RI on */ | 1808 | mtmsrd r6 /* RI on */ |
1819 | 1809 | ||
1820 | #ifdef CONFIG_HMT | ||
1821 | /* Start up the second thread on cpu 0 */ | ||
1822 | mfspr r3,SPRN_PVR | ||
1823 | srwi r3,r3,16 | ||
1824 | cmpwi r3,0x34 /* Pulsar */ | ||
1825 | beq 90f | ||
1826 | cmpwi r3,0x36 /* Icestar */ | ||
1827 | beq 90f | ||
1828 | cmpwi r3,0x37 /* SStar */ | ||
1829 | beq 90f | ||
1830 | b 91f /* HMT not supported */ | ||
1831 | 90: li r3,0 | ||
1832 | bl .hmt_start_secondary | ||
1833 | 91: | ||
1834 | #endif | ||
1835 | |||
1836 | /* The following gets the stack and TOC set up with the regs */ | 1810 | /* The following gets the stack and TOC set up with the regs */ |
1837 | /* pointing to the real addr of the kernel stack. This is */ | 1811 | /* pointing to the real addr of the kernel stack. This is */ |
1838 | /* all done to support the C function call below which sets */ | 1812 | /* all done to support the C function call below which sets */ |
@@ -1946,77 +1920,8 @@ _STATIC(start_here_common) | |||
1946 | 1920 | ||
1947 | bl .start_kernel | 1921 | bl .start_kernel |
1948 | 1922 | ||
1949 | _GLOBAL(hmt_init) | 1923 | /* Not reached */ |
1950 | #ifdef CONFIG_HMT | 1924 | BUG_OPCODE |
1951 | LOAD_REG_IMMEDIATE(r5, hmt_thread_data) | ||
1952 | mfspr r7,SPRN_PVR | ||
1953 | srwi r7,r7,16 | ||
1954 | cmpwi r7,0x34 /* Pulsar */ | ||
1955 | beq 90f | ||
1956 | cmpwi r7,0x36 /* Icestar */ | ||
1957 | beq 91f | ||
1958 | cmpwi r7,0x37 /* SStar */ | ||
1959 | beq 91f | ||
1960 | b 101f | ||
1961 | 90: mfspr r6,SPRN_PIR | ||
1962 | andi. r6,r6,0x1f | ||
1963 | b 92f | ||
1964 | 91: mfspr r6,SPRN_PIR | ||
1965 | andi. r6,r6,0x3ff | ||
1966 | 92: sldi r4,r24,3 | ||
1967 | stwx r6,r5,r4 | ||
1968 | bl .hmt_start_secondary | ||
1969 | b 101f | ||
1970 | |||
1971 | __hmt_secondary_hold: | ||
1972 | LOAD_REG_IMMEDIATE(r5, hmt_thread_data) | ||
1973 | clrldi r5,r5,4 | ||
1974 | li r7,0 | ||
1975 | mfspr r6,SPRN_PIR | ||
1976 | mfspr r8,SPRN_PVR | ||
1977 | srwi r8,r8,16 | ||
1978 | cmpwi r8,0x34 | ||
1979 | bne 93f | ||
1980 | andi. r6,r6,0x1f | ||
1981 | b 103f | ||
1982 | 93: andi. r6,r6,0x3f | ||
1983 | |||
1984 | 103: lwzx r8,r5,r7 | ||
1985 | cmpw r8,r6 | ||
1986 | beq 104f | ||
1987 | addi r7,r7,8 | ||
1988 | b 103b | ||
1989 | |||
1990 | 104: addi r7,r7,4 | ||
1991 | lwzx r9,r5,r7 | ||
1992 | mr r24,r9 | ||
1993 | 101: | ||
1994 | #endif | ||
1995 | mr r3,r24 | ||
1996 | b .pSeries_secondary_smp_init | ||
1997 | |||
1998 | #ifdef CONFIG_HMT | ||
1999 | _GLOBAL(hmt_start_secondary) | ||
2000 | LOAD_REG_IMMEDIATE(r4,__hmt_secondary_hold) | ||
2001 | clrldi r4,r4,4 | ||
2002 | mtspr SPRN_NIADORM, r4 | ||
2003 | mfspr r4, SPRN_MSRDORM | ||
2004 | li r5, -65 | ||
2005 | and r4, r4, r5 | ||
2006 | mtspr SPRN_MSRDORM, r4 | ||
2007 | lis r4,0xffef | ||
2008 | ori r4,r4,0x7403 | ||
2009 | mtspr SPRN_TSC, r4 | ||
2010 | li r4,0x1f4 | ||
2011 | mtspr SPRN_TST, r4 | ||
2012 | mfspr r4, SPRN_HID0 | ||
2013 | ori r4, r4, 0x1 | ||
2014 | mtspr SPRN_HID0, r4 | ||
2015 | mfspr r4, SPRN_CTRLF | ||
2016 | oris r4, r4, 0x40 | ||
2017 | mtspr SPRN_CTRLT, r4 | ||
2018 | blr | ||
2019 | #endif | ||
2020 | 1925 | ||
2021 | /* | 1926 | /* |
2022 | * We put a few things here that have to be page-aligned. | 1927 | * We put a few things here that have to be page-aligned. |
diff --git a/arch/powerpc/kernel/iommu.c b/arch/powerpc/kernel/iommu.c index 4d9b4388918b..946f3219fd29 100644 --- a/arch/powerpc/kernel/iommu.c +++ b/arch/powerpc/kernel/iommu.c | |||
@@ -334,9 +334,6 @@ int iommu_map_sg(struct device *dev, struct iommu_table *tbl, | |||
334 | 334 | ||
335 | spin_unlock_irqrestore(&(tbl->it_lock), flags); | 335 | spin_unlock_irqrestore(&(tbl->it_lock), flags); |
336 | 336 | ||
337 | /* Make sure updates are seen by hardware */ | ||
338 | mb(); | ||
339 | |||
340 | DBG("mapped %d elements:\n", outcount); | 337 | DBG("mapped %d elements:\n", outcount); |
341 | 338 | ||
342 | /* For the sake of iommu_unmap_sg, we clear out the length in the | 339 | /* For the sake of iommu_unmap_sg, we clear out the length in the |
@@ -347,6 +344,10 @@ int iommu_map_sg(struct device *dev, struct iommu_table *tbl, | |||
347 | outs->dma_address = DMA_ERROR_CODE; | 344 | outs->dma_address = DMA_ERROR_CODE; |
348 | outs->dma_length = 0; | 345 | outs->dma_length = 0; |
349 | } | 346 | } |
347 | |||
348 | /* Make sure updates are seen by hardware */ | ||
349 | mb(); | ||
350 | |||
350 | return outcount; | 351 | return outcount; |
351 | 352 | ||
352 | failure: | 353 | failure: |
@@ -358,6 +359,8 @@ int iommu_map_sg(struct device *dev, struct iommu_table *tbl, | |||
358 | npages = (PAGE_ALIGN(s->dma_address + s->dma_length) - vaddr) | 359 | npages = (PAGE_ALIGN(s->dma_address + s->dma_length) - vaddr) |
359 | >> PAGE_SHIFT; | 360 | >> PAGE_SHIFT; |
360 | __iommu_free(tbl, vaddr, npages); | 361 | __iommu_free(tbl, vaddr, npages); |
362 | s->dma_address = DMA_ERROR_CODE; | ||
363 | s->dma_length = 0; | ||
361 | } | 364 | } |
362 | } | 365 | } |
363 | spin_unlock_irqrestore(&(tbl->it_lock), flags); | 366 | spin_unlock_irqrestore(&(tbl->it_lock), flags); |
diff --git a/arch/powerpc/kernel/legacy_serial.c b/arch/powerpc/kernel/legacy_serial.c index f970ace208d3..c7a799a09516 100644 --- a/arch/powerpc/kernel/legacy_serial.c +++ b/arch/powerpc/kernel/legacy_serial.c | |||
@@ -134,7 +134,6 @@ static int __init add_legacy_soc_port(struct device_node *np, | |||
134 | return add_legacy_port(np, -1, UPIO_MEM, addr, addr, NO_IRQ, flags); | 134 | return add_legacy_port(np, -1, UPIO_MEM, addr, addr, NO_IRQ, flags); |
135 | } | 135 | } |
136 | 136 | ||
137 | #ifdef CONFIG_ISA | ||
138 | static int __init add_legacy_isa_port(struct device_node *np, | 137 | static int __init add_legacy_isa_port(struct device_node *np, |
139 | struct device_node *isa_brg) | 138 | struct device_node *isa_brg) |
140 | { | 139 | { |
@@ -168,7 +167,6 @@ static int __init add_legacy_isa_port(struct device_node *np, | |||
168 | return add_legacy_port(np, index, UPIO_PORT, reg[1], taddr, NO_IRQ, UPF_BOOT_AUTOCONF); | 167 | return add_legacy_port(np, index, UPIO_PORT, reg[1], taddr, NO_IRQ, UPF_BOOT_AUTOCONF); |
169 | 168 | ||
170 | } | 169 | } |
171 | #endif | ||
172 | 170 | ||
173 | #ifdef CONFIG_PCI | 171 | #ifdef CONFIG_PCI |
174 | static int __init add_legacy_pci_port(struct device_node *np, | 172 | static int __init add_legacy_pci_port(struct device_node *np, |
@@ -276,7 +274,6 @@ void __init find_legacy_serial_ports(void) | |||
276 | of_node_put(soc); | 274 | of_node_put(soc); |
277 | } | 275 | } |
278 | 276 | ||
279 | #ifdef CONFIG_ISA | ||
280 | /* First fill our array with ISA ports */ | 277 | /* First fill our array with ISA ports */ |
281 | for (np = NULL; (np = of_find_node_by_type(np, "serial"));) { | 278 | for (np = NULL; (np = of_find_node_by_type(np, "serial"));) { |
282 | struct device_node *isa = of_get_parent(np); | 279 | struct device_node *isa = of_get_parent(np); |
@@ -287,7 +284,6 @@ void __init find_legacy_serial_ports(void) | |||
287 | } | 284 | } |
288 | of_node_put(isa); | 285 | of_node_put(isa); |
289 | } | 286 | } |
290 | #endif | ||
291 | 287 | ||
292 | #ifdef CONFIG_PCI | 288 | #ifdef CONFIG_PCI |
293 | /* Next, try to locate PCI ports */ | 289 | /* Next, try to locate PCI ports */ |
diff --git a/arch/powerpc/kernel/lparcfg.c b/arch/powerpc/kernel/lparcfg.c index 1ae96a8ed7e2..e789fef4eb8a 100644 --- a/arch/powerpc/kernel/lparcfg.c +++ b/arch/powerpc/kernel/lparcfg.c | |||
@@ -341,7 +341,7 @@ static int lparcfg_data(struct seq_file *m, void *v) | |||
341 | const char *system_id = ""; | 341 | const char *system_id = ""; |
342 | unsigned int *lp_index_ptr, lp_index = 0; | 342 | unsigned int *lp_index_ptr, lp_index = 0; |
343 | struct device_node *rtas_node; | 343 | struct device_node *rtas_node; |
344 | int *lrdrp; | 344 | int *lrdrp = NULL; |
345 | 345 | ||
346 | rootdn = find_path_device("/"); | 346 | rootdn = find_path_device("/"); |
347 | if (rootdn) { | 347 | if (rootdn) { |
@@ -362,7 +362,9 @@ static int lparcfg_data(struct seq_file *m, void *v) | |||
362 | seq_printf(m, "partition_id=%d\n", (int)lp_index); | 362 | seq_printf(m, "partition_id=%d\n", (int)lp_index); |
363 | 363 | ||
364 | rtas_node = find_path_device("/rtas"); | 364 | rtas_node = find_path_device("/rtas"); |
365 | lrdrp = (int *)get_property(rtas_node, "ibm,lrdr-capacity", NULL); | 365 | if (rtas_node) |
366 | lrdrp = (int *)get_property(rtas_node, "ibm,lrdr-capacity", | ||
367 | NULL); | ||
366 | 368 | ||
367 | if (lrdrp == NULL) { | 369 | if (lrdrp == NULL) { |
368 | partition_potential_processors = vdso_data->processorCount; | 370 | partition_potential_processors = vdso_data->processorCount; |
diff --git a/arch/powerpc/kernel/machine_kexec_64.c b/arch/powerpc/kernel/machine_kexec_64.c index d6431440c54f..ee166c586642 100644 --- a/arch/powerpc/kernel/machine_kexec_64.c +++ b/arch/powerpc/kernel/machine_kexec_64.c | |||
@@ -26,8 +26,6 @@ | |||
26 | #include <asm/prom.h> | 26 | #include <asm/prom.h> |
27 | #include <asm/smp.h> | 27 | #include <asm/smp.h> |
28 | 28 | ||
29 | #define HASH_GROUP_SIZE 0x80 /* size of each hash group, asm/mmu.h */ | ||
30 | |||
31 | int default_machine_kexec_prepare(struct kimage *image) | 29 | int default_machine_kexec_prepare(struct kimage *image) |
32 | { | 30 | { |
33 | int i; | 31 | int i; |
@@ -61,7 +59,7 @@ int default_machine_kexec_prepare(struct kimage *image) | |||
61 | */ | 59 | */ |
62 | if (htab_address) { | 60 | if (htab_address) { |
63 | low = __pa(htab_address); | 61 | low = __pa(htab_address); |
64 | high = low + (htab_hash_mask + 1) * HASH_GROUP_SIZE; | 62 | high = low + htab_size_bytes; |
65 | 63 | ||
66 | for (i = 0; i < image->nr_segments; i++) { | 64 | for (i = 0; i < image->nr_segments; i++) { |
67 | begin = image->segment[i].mem; | 65 | begin = image->segment[i].mem; |
@@ -294,7 +292,7 @@ void default_machine_kexec(struct kimage *image) | |||
294 | } | 292 | } |
295 | 293 | ||
296 | /* Values we need to export to the second kernel via the device tree. */ | 294 | /* Values we need to export to the second kernel via the device tree. */ |
297 | static unsigned long htab_base, htab_size, kernel_end; | 295 | static unsigned long htab_base, kernel_end; |
298 | 296 | ||
299 | static struct property htab_base_prop = { | 297 | static struct property htab_base_prop = { |
300 | .name = "linux,htab-base", | 298 | .name = "linux,htab-base", |
@@ -305,7 +303,7 @@ static struct property htab_base_prop = { | |||
305 | static struct property htab_size_prop = { | 303 | static struct property htab_size_prop = { |
306 | .name = "linux,htab-size", | 304 | .name = "linux,htab-size", |
307 | .length = sizeof(unsigned long), | 305 | .length = sizeof(unsigned long), |
308 | .value = (unsigned char *)&htab_size, | 306 | .value = (unsigned char *)&htab_size_bytes, |
309 | }; | 307 | }; |
310 | 308 | ||
311 | static struct property kernel_end_prop = { | 309 | static struct property kernel_end_prop = { |
@@ -331,8 +329,6 @@ static void __init export_htab_values(void) | |||
331 | 329 | ||
332 | htab_base = __pa(htab_address); | 330 | htab_base = __pa(htab_address); |
333 | prom_add_property(node, &htab_base_prop); | 331 | prom_add_property(node, &htab_base_prop); |
334 | |||
335 | htab_size = 1UL << ppc64_pft_size; | ||
336 | prom_add_property(node, &htab_size_prop); | 332 | prom_add_property(node, &htab_size_prop); |
337 | 333 | ||
338 | out: | 334 | out: |
diff --git a/arch/powerpc/kernel/pci_64.c b/arch/powerpc/kernel/pci_64.c index c367520bc1c3..ba92bab7cc2c 100644 --- a/arch/powerpc/kernel/pci_64.c +++ b/arch/powerpc/kernel/pci_64.c | |||
@@ -589,7 +589,6 @@ void __devinit scan_phb(struct pci_controller *hose) | |||
589 | #endif /* CONFIG_PPC_MULTIPLATFORM */ | 589 | #endif /* CONFIG_PPC_MULTIPLATFORM */ |
590 | if (mode == PCI_PROBE_NORMAL) | 590 | if (mode == PCI_PROBE_NORMAL) |
591 | hose->last_busno = bus->subordinate = pci_scan_child_bus(bus); | 591 | hose->last_busno = bus->subordinate = pci_scan_child_bus(bus); |
592 | pci_bus_add_devices(bus); | ||
593 | } | 592 | } |
594 | 593 | ||
595 | static int __init pcibios_init(void) | 594 | static int __init pcibios_init(void) |
@@ -608,8 +607,10 @@ static int __init pcibios_init(void) | |||
608 | printk("PCI: Probing PCI hardware\n"); | 607 | printk("PCI: Probing PCI hardware\n"); |
609 | 608 | ||
610 | /* Scan all of the recorded PCI controllers. */ | 609 | /* Scan all of the recorded PCI controllers. */ |
611 | list_for_each_entry_safe(hose, tmp, &hose_list, list_node) | 610 | list_for_each_entry_safe(hose, tmp, &hose_list, list_node) { |
612 | scan_phb(hose); | 611 | scan_phb(hose); |
612 | pci_bus_add_devices(hose->bus); | ||
613 | } | ||
613 | 614 | ||
614 | #ifndef CONFIG_PPC_ISERIES | 615 | #ifndef CONFIG_PPC_ISERIES |
615 | if (pci_probe_only) | 616 | if (pci_probe_only) |
diff --git a/arch/powerpc/kernel/ppc_ksyms.c b/arch/powerpc/kernel/ppc_ksyms.c index d9a459c144d8..63ecbec05202 100644 --- a/arch/powerpc/kernel/ppc_ksyms.c +++ b/arch/powerpc/kernel/ppc_ksyms.c | |||
@@ -79,15 +79,8 @@ EXPORT_SYMBOL(sys_sigreturn); | |||
79 | EXPORT_SYMBOL(strcpy); | 79 | EXPORT_SYMBOL(strcpy); |
80 | EXPORT_SYMBOL(strncpy); | 80 | EXPORT_SYMBOL(strncpy); |
81 | EXPORT_SYMBOL(strcat); | 81 | EXPORT_SYMBOL(strcat); |
82 | EXPORT_SYMBOL(strncat); | ||
83 | EXPORT_SYMBOL(strchr); | ||
84 | EXPORT_SYMBOL(strrchr); | ||
85 | EXPORT_SYMBOL(strpbrk); | ||
86 | EXPORT_SYMBOL(strstr); | ||
87 | EXPORT_SYMBOL(strlen); | 82 | EXPORT_SYMBOL(strlen); |
88 | EXPORT_SYMBOL(strnlen); | ||
89 | EXPORT_SYMBOL(strcmp); | 83 | EXPORT_SYMBOL(strcmp); |
90 | EXPORT_SYMBOL(strncmp); | ||
91 | EXPORT_SYMBOL(strcasecmp); | 84 | EXPORT_SYMBOL(strcasecmp); |
92 | 85 | ||
93 | EXPORT_SYMBOL(csum_partial); | 86 | EXPORT_SYMBOL(csum_partial); |
@@ -117,15 +110,6 @@ EXPORT_SYMBOL(_insw_ns); | |||
117 | EXPORT_SYMBOL(_outsw_ns); | 110 | EXPORT_SYMBOL(_outsw_ns); |
118 | EXPORT_SYMBOL(_insl_ns); | 111 | EXPORT_SYMBOL(_insl_ns); |
119 | EXPORT_SYMBOL(_outsl_ns); | 112 | EXPORT_SYMBOL(_outsl_ns); |
120 | EXPORT_SYMBOL(ioremap); | ||
121 | #ifdef CONFIG_44x | ||
122 | EXPORT_SYMBOL(ioremap64); | ||
123 | #endif | ||
124 | EXPORT_SYMBOL(__ioremap); | ||
125 | EXPORT_SYMBOL(iounmap); | ||
126 | #ifdef CONFIG_PPC32 | ||
127 | EXPORT_SYMBOL(ioremap_bot); /* aka VMALLOC_END */ | ||
128 | #endif | ||
129 | 113 | ||
130 | #if defined(CONFIG_PPC32) && (defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_IDE_MODULE)) | 114 | #if defined(CONFIG_PPC32) && (defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_IDE_MODULE)) |
131 | EXPORT_SYMBOL(ppc_ide_md); | 115 | EXPORT_SYMBOL(ppc_ide_md); |
@@ -168,7 +152,6 @@ EXPORT_SYMBOL(__flush_icache_range); | |||
168 | EXPORT_SYMBOL(flush_dcache_range); | 152 | EXPORT_SYMBOL(flush_dcache_range); |
169 | 153 | ||
170 | #ifdef CONFIG_SMP | 154 | #ifdef CONFIG_SMP |
171 | EXPORT_SYMBOL(smp_call_function); | ||
172 | #ifdef CONFIG_PPC32 | 155 | #ifdef CONFIG_PPC32 |
173 | EXPORT_SYMBOL(smp_hw_index); | 156 | EXPORT_SYMBOL(smp_hw_index); |
174 | #endif | 157 | #endif |
@@ -185,9 +168,6 @@ EXPORT_SYMBOL(adb_try_handler_change); | |||
185 | EXPORT_SYMBOL(cuda_request); | 168 | EXPORT_SYMBOL(cuda_request); |
186 | EXPORT_SYMBOL(cuda_poll); | 169 | EXPORT_SYMBOL(cuda_poll); |
187 | #endif /* CONFIG_ADB_CUDA */ | 170 | #endif /* CONFIG_ADB_CUDA */ |
188 | #ifdef CONFIG_PPC_PMAC | ||
189 | EXPORT_SYMBOL(sys_ctrler); | ||
190 | #endif | ||
191 | #ifdef CONFIG_VT | 171 | #ifdef CONFIG_VT |
192 | EXPORT_SYMBOL(kd_mksound); | 172 | EXPORT_SYMBOL(kd_mksound); |
193 | #endif | 173 | #endif |
@@ -205,7 +185,6 @@ EXPORT_SYMBOL(__lshrdi3); | |||
205 | EXPORT_SYMBOL(memcpy); | 185 | EXPORT_SYMBOL(memcpy); |
206 | EXPORT_SYMBOL(memset); | 186 | EXPORT_SYMBOL(memset); |
207 | EXPORT_SYMBOL(memmove); | 187 | EXPORT_SYMBOL(memmove); |
208 | EXPORT_SYMBOL(memscan); | ||
209 | EXPORT_SYMBOL(memcmp); | 188 | EXPORT_SYMBOL(memcmp); |
210 | EXPORT_SYMBOL(memchr); | 189 | EXPORT_SYMBOL(memchr); |
211 | 190 | ||
@@ -214,7 +193,6 @@ EXPORT_SYMBOL(screen_info); | |||
214 | #endif | 193 | #endif |
215 | 194 | ||
216 | #ifdef CONFIG_PPC32 | 195 | #ifdef CONFIG_PPC32 |
217 | EXPORT_SYMBOL(__delay); | ||
218 | EXPORT_SYMBOL(timer_interrupt); | 196 | EXPORT_SYMBOL(timer_interrupt); |
219 | EXPORT_SYMBOL(irq_desc); | 197 | EXPORT_SYMBOL(irq_desc); |
220 | EXPORT_SYMBOL(tb_ticks_per_jiffy); | 198 | EXPORT_SYMBOL(tb_ticks_per_jiffy); |
@@ -222,10 +200,6 @@ EXPORT_SYMBOL(console_drivers); | |||
222 | EXPORT_SYMBOL(cacheable_memcpy); | 200 | EXPORT_SYMBOL(cacheable_memcpy); |
223 | #endif | 201 | #endif |
224 | 202 | ||
225 | EXPORT_SYMBOL(__up); | ||
226 | EXPORT_SYMBOL(__down); | ||
227 | EXPORT_SYMBOL(__down_interruptible); | ||
228 | |||
229 | #ifdef CONFIG_8xx | 203 | #ifdef CONFIG_8xx |
230 | EXPORT_SYMBOL(cpm_install_handler); | 204 | EXPORT_SYMBOL(cpm_install_handler); |
231 | EXPORT_SYMBOL(cpm_free_handler); | 205 | EXPORT_SYMBOL(cpm_free_handler); |
diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c index 57703994a063..c225cf154bfe 100644 --- a/arch/powerpc/kernel/process.c +++ b/arch/powerpc/kernel/process.c | |||
@@ -888,3 +888,35 @@ void dump_stack(void) | |||
888 | show_stack(current, NULL); | 888 | show_stack(current, NULL); |
889 | } | 889 | } |
890 | EXPORT_SYMBOL(dump_stack); | 890 | EXPORT_SYMBOL(dump_stack); |
891 | |||
892 | #ifdef CONFIG_PPC64 | ||
893 | void ppc64_runlatch_on(void) | ||
894 | { | ||
895 | unsigned long ctrl; | ||
896 | |||
897 | if (cpu_has_feature(CPU_FTR_CTRL) && !test_thread_flag(TIF_RUNLATCH)) { | ||
898 | HMT_medium(); | ||
899 | |||
900 | ctrl = mfspr(SPRN_CTRLF); | ||
901 | ctrl |= CTRL_RUNLATCH; | ||
902 | mtspr(SPRN_CTRLT, ctrl); | ||
903 | |||
904 | set_thread_flag(TIF_RUNLATCH); | ||
905 | } | ||
906 | } | ||
907 | |||
908 | void ppc64_runlatch_off(void) | ||
909 | { | ||
910 | unsigned long ctrl; | ||
911 | |||
912 | if (cpu_has_feature(CPU_FTR_CTRL) && test_thread_flag(TIF_RUNLATCH)) { | ||
913 | HMT_medium(); | ||
914 | |||
915 | clear_thread_flag(TIF_RUNLATCH); | ||
916 | |||
917 | ctrl = mfspr(SPRN_CTRLF); | ||
918 | ctrl &= ~CTRL_RUNLATCH; | ||
919 | mtspr(SPRN_CTRLT, ctrl); | ||
920 | } | ||
921 | } | ||
922 | #endif | ||
diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c index d50c8df0183e..6dbd21726770 100644 --- a/arch/powerpc/kernel/prom.c +++ b/arch/powerpc/kernel/prom.c | |||
@@ -491,7 +491,12 @@ void __init finish_device_tree(void) | |||
491 | size = 16; | 491 | size = 16; |
492 | finish_node(allnodes, &size, 1); | 492 | finish_node(allnodes, &size, 1); |
493 | size -= 16; | 493 | size -= 16; |
494 | end = start = (unsigned long) __va(lmb_alloc(size, 128)); | 494 | |
495 | if (0 == size) | ||
496 | end = start = 0; | ||
497 | else | ||
498 | end = start = (unsigned long)__va(lmb_alloc(size, 128)); | ||
499 | |||
495 | finish_node(allnodes, &end, 0); | 500 | finish_node(allnodes, &end, 0); |
496 | BUG_ON(end != start + size); | 501 | BUG_ON(end != start + size); |
497 | 502 | ||
@@ -811,8 +816,6 @@ void __init unflatten_device_tree(void) | |||
811 | { | 816 | { |
812 | unsigned long start, mem, size; | 817 | unsigned long start, mem, size; |
813 | struct device_node **allnextp = &allnodes; | 818 | struct device_node **allnextp = &allnodes; |
814 | char *p = NULL; | ||
815 | int l = 0; | ||
816 | 819 | ||
817 | DBG(" -> unflatten_device_tree()\n"); | 820 | DBG(" -> unflatten_device_tree()\n"); |
818 | 821 | ||
@@ -852,19 +855,6 @@ void __init unflatten_device_tree(void) | |||
852 | if (of_chosen == NULL) | 855 | if (of_chosen == NULL) |
853 | of_chosen = of_find_node_by_path("/chosen@0"); | 856 | of_chosen = of_find_node_by_path("/chosen@0"); |
854 | 857 | ||
855 | /* Retreive command line */ | ||
856 | if (of_chosen != NULL) { | ||
857 | p = (char *)get_property(of_chosen, "bootargs", &l); | ||
858 | if (p != NULL && l > 0) | ||
859 | strlcpy(cmd_line, p, min(l, COMMAND_LINE_SIZE)); | ||
860 | } | ||
861 | #ifdef CONFIG_CMDLINE | ||
862 | if (l == 0 || (l == 1 && (*p) == 0)) | ||
863 | strlcpy(cmd_line, CONFIG_CMDLINE, COMMAND_LINE_SIZE); | ||
864 | #endif /* CONFIG_CMDLINE */ | ||
865 | |||
866 | DBG("Command line is: %s\n", cmd_line); | ||
867 | |||
868 | DBG(" <- unflatten_device_tree()\n"); | 858 | DBG(" <- unflatten_device_tree()\n"); |
869 | } | 859 | } |
870 | 860 | ||
@@ -935,6 +925,8 @@ static int __init early_init_dt_scan_chosen(unsigned long node, | |||
935 | { | 925 | { |
936 | u32 *prop; | 926 | u32 *prop; |
937 | unsigned long *lprop; | 927 | unsigned long *lprop; |
928 | unsigned long l; | ||
929 | char *p; | ||
938 | 930 | ||
939 | DBG("search \"chosen\", depth: %d, uname: %s\n", depth, uname); | 931 | DBG("search \"chosen\", depth: %d, uname: %s\n", depth, uname); |
940 | 932 | ||
@@ -999,6 +991,41 @@ static int __init early_init_dt_scan_chosen(unsigned long node, | |||
999 | crashk_res.end = crashk_res.start + *lprop - 1; | 991 | crashk_res.end = crashk_res.start + *lprop - 1; |
1000 | #endif | 992 | #endif |
1001 | 993 | ||
994 | /* Retreive command line */ | ||
995 | p = of_get_flat_dt_prop(node, "bootargs", &l); | ||
996 | if (p != NULL && l > 0) | ||
997 | strlcpy(cmd_line, p, min((int)l, COMMAND_LINE_SIZE)); | ||
998 | |||
999 | #ifdef CONFIG_CMDLINE | ||
1000 | if (l == 0 || (l == 1 && (*p) == 0)) | ||
1001 | strlcpy(cmd_line, CONFIG_CMDLINE, COMMAND_LINE_SIZE); | ||
1002 | #endif /* CONFIG_CMDLINE */ | ||
1003 | |||
1004 | DBG("Command line is: %s\n", cmd_line); | ||
1005 | |||
1006 | if (strstr(cmd_line, "mem=")) { | ||
1007 | char *p, *q; | ||
1008 | unsigned long maxmem = 0; | ||
1009 | |||
1010 | for (q = cmd_line; (p = strstr(q, "mem=")) != 0; ) { | ||
1011 | q = p + 4; | ||
1012 | if (p > cmd_line && p[-1] != ' ') | ||
1013 | continue; | ||
1014 | maxmem = simple_strtoul(q, &q, 0); | ||
1015 | if (*q == 'k' || *q == 'K') { | ||
1016 | maxmem <<= 10; | ||
1017 | ++q; | ||
1018 | } else if (*q == 'm' || *q == 'M') { | ||
1019 | maxmem <<= 20; | ||
1020 | ++q; | ||
1021 | } else if (*q == 'g' || *q == 'G') { | ||
1022 | maxmem <<= 30; | ||
1023 | ++q; | ||
1024 | } | ||
1025 | } | ||
1026 | memory_limit = maxmem; | ||
1027 | } | ||
1028 | |||
1002 | /* break now */ | 1029 | /* break now */ |
1003 | return 1; | 1030 | return 1; |
1004 | } | 1031 | } |
@@ -1119,7 +1146,7 @@ static void __init early_reserve_mem(void) | |||
1119 | size_32 = *(reserve_map_32++); | 1146 | size_32 = *(reserve_map_32++); |
1120 | if (size_32 == 0) | 1147 | if (size_32 == 0) |
1121 | break; | 1148 | break; |
1122 | DBG("reserving: %lx -> %lx\n", base_32, size_32); | 1149 | DBG("reserving: %x -> %x\n", base_32, size_32); |
1123 | lmb_reserve(base_32, size_32); | 1150 | lmb_reserve(base_32, size_32); |
1124 | } | 1151 | } |
1125 | return; | 1152 | return; |
@@ -1398,8 +1425,8 @@ struct device_node *of_find_node_by_name(struct device_node *from, | |||
1398 | 1425 | ||
1399 | read_lock(&devtree_lock); | 1426 | read_lock(&devtree_lock); |
1400 | np = from ? from->allnext : allnodes; | 1427 | np = from ? from->allnext : allnodes; |
1401 | for (; np != 0; np = np->allnext) | 1428 | for (; np != NULL; np = np->allnext) |
1402 | if (np->name != 0 && strcasecmp(np->name, name) == 0 | 1429 | if (np->name != NULL && strcasecmp(np->name, name) == 0 |
1403 | && of_node_get(np)) | 1430 | && of_node_get(np)) |
1404 | break; | 1431 | break; |
1405 | if (from) | 1432 | if (from) |
@@ -1917,3 +1944,30 @@ int prom_update_property(struct device_node *np, | |||
1917 | 1944 | ||
1918 | return 0; | 1945 | return 0; |
1919 | } | 1946 | } |
1947 | |||
1948 | #ifdef CONFIG_KEXEC | ||
1949 | /* We may have allocated the flat device tree inside the crash kernel region | ||
1950 | * in prom_init. If so we need to move it out into regular memory. */ | ||
1951 | void kdump_move_device_tree(void) | ||
1952 | { | ||
1953 | unsigned long start, end; | ||
1954 | struct boot_param_header *new; | ||
1955 | |||
1956 | start = __pa((unsigned long)initial_boot_params); | ||
1957 | end = start + initial_boot_params->totalsize; | ||
1958 | |||
1959 | if (end < crashk_res.start || start > crashk_res.end) | ||
1960 | return; | ||
1961 | |||
1962 | new = (struct boot_param_header*) | ||
1963 | __va(lmb_alloc(initial_boot_params->totalsize, PAGE_SIZE)); | ||
1964 | |||
1965 | memcpy(new, initial_boot_params, initial_boot_params->totalsize); | ||
1966 | |||
1967 | initial_boot_params = new; | ||
1968 | |||
1969 | DBG("Flat device tree blob moved to %p\n", initial_boot_params); | ||
1970 | |||
1971 | /* XXX should we unreserve the old DT? */ | ||
1972 | } | ||
1973 | #endif /* CONFIG_KEXEC */ | ||
diff --git a/arch/powerpc/kernel/prom_init.c b/arch/powerpc/kernel/prom_init.c index 7881ec96ef11..813c2cd194c2 100644 --- a/arch/powerpc/kernel/prom_init.c +++ b/arch/powerpc/kernel/prom_init.c | |||
@@ -205,14 +205,6 @@ static cell_t __initdata regbuf[1024]; | |||
205 | 205 | ||
206 | #define MAX_CPU_THREADS 2 | 206 | #define MAX_CPU_THREADS 2 |
207 | 207 | ||
208 | /* TO GO */ | ||
209 | #ifdef CONFIG_HMT | ||
210 | struct { | ||
211 | unsigned int pir; | ||
212 | unsigned int threadid; | ||
213 | } hmt_thread_data[NR_CPUS]; | ||
214 | #endif /* CONFIG_HMT */ | ||
215 | |||
216 | /* | 208 | /* |
217 | * Error results ... some OF calls will return "-1" on error, some | 209 | * Error results ... some OF calls will return "-1" on error, some |
218 | * will return 0, some will return either. To simplify, here are | 210 | * will return 0, some will return either. To simplify, here are |
@@ -986,7 +978,7 @@ static void __init prom_init_mem(void) | |||
986 | if (size == 0) | 978 | if (size == 0) |
987 | continue; | 979 | continue; |
988 | prom_debug(" %x %x\n", base, size); | 980 | prom_debug(" %x %x\n", base, size); |
989 | if (base == 0) | 981 | if (base == 0 && (RELOC(of_platform) & PLATFORM_LPAR)) |
990 | RELOC(rmo_top) = size; | 982 | RELOC(rmo_top) = size; |
991 | if ((base + size) > RELOC(ram_top)) | 983 | if ((base + size) > RELOC(ram_top)) |
992 | RELOC(ram_top) = base + size; | 984 | RELOC(ram_top) = base + size; |
@@ -1319,10 +1311,6 @@ static void __init prom_hold_cpus(void) | |||
1319 | */ | 1311 | */ |
1320 | *spinloop = 0; | 1312 | *spinloop = 0; |
1321 | 1313 | ||
1322 | #ifdef CONFIG_HMT | ||
1323 | for (i = 0; i < NR_CPUS; i++) | ||
1324 | RELOC(hmt_thread_data)[i].pir = 0xdeadbeef; | ||
1325 | #endif | ||
1326 | /* look for cpus */ | 1314 | /* look for cpus */ |
1327 | for (node = 0; prom_next_node(&node); ) { | 1315 | for (node = 0; prom_next_node(&node); ) { |
1328 | type[0] = 0; | 1316 | type[0] = 0; |
@@ -1389,32 +1377,6 @@ static void __init prom_hold_cpus(void) | |||
1389 | /* Reserve cpu #s for secondary threads. They start later. */ | 1377 | /* Reserve cpu #s for secondary threads. They start later. */ |
1390 | cpuid += cpu_threads; | 1378 | cpuid += cpu_threads; |
1391 | } | 1379 | } |
1392 | #ifdef CONFIG_HMT | ||
1393 | /* Only enable HMT on processors that provide support. */ | ||
1394 | if (__is_processor(PV_PULSAR) || | ||
1395 | __is_processor(PV_ICESTAR) || | ||
1396 | __is_processor(PV_SSTAR)) { | ||
1397 | prom_printf(" starting secondary threads\n"); | ||
1398 | |||
1399 | for (i = 0; i < NR_CPUS; i += 2) { | ||
1400 | if (!cpu_online(i)) | ||
1401 | continue; | ||
1402 | |||
1403 | if (i == 0) { | ||
1404 | unsigned long pir = mfspr(SPRN_PIR); | ||
1405 | if (__is_processor(PV_PULSAR)) { | ||
1406 | RELOC(hmt_thread_data)[i].pir = | ||
1407 | pir & 0x1f; | ||
1408 | } else { | ||
1409 | RELOC(hmt_thread_data)[i].pir = | ||
1410 | pir & 0x3ff; | ||
1411 | } | ||
1412 | } | ||
1413 | } | ||
1414 | } else { | ||
1415 | prom_printf("Processor is not HMT capable\n"); | ||
1416 | } | ||
1417 | #endif | ||
1418 | 1380 | ||
1419 | if (cpuid > NR_CPUS) | 1381 | if (cpuid > NR_CPUS) |
1420 | prom_printf("WARNING: maximum CPUs (" __stringify(NR_CPUS) | 1382 | prom_printf("WARNING: maximum CPUs (" __stringify(NR_CPUS) |
@@ -2098,6 +2060,10 @@ unsigned long __init prom_init(unsigned long r3, unsigned long r4, | |||
2098 | */ | 2060 | */ |
2099 | prom_init_stdout(); | 2061 | prom_init_stdout(); |
2100 | 2062 | ||
2063 | /* Bail if this is a kdump kernel. */ | ||
2064 | if (PHYSICAL_START > 0) | ||
2065 | prom_panic("Error: You can't boot a kdump kernel from OF!\n"); | ||
2066 | |||
2101 | /* | 2067 | /* |
2102 | * Check for an initrd | 2068 | * Check for an initrd |
2103 | */ | 2069 | */ |
diff --git a/arch/powerpc/kernel/prom_parse.c b/arch/powerpc/kernel/prom_parse.c index a8099c806150..3934c227549b 100644 --- a/arch/powerpc/kernel/prom_parse.c +++ b/arch/powerpc/kernel/prom_parse.c | |||
@@ -465,8 +465,10 @@ u32 *of_get_pci_address(struct device_node *dev, int bar_no, u64 *size, | |||
465 | if (parent == NULL) | 465 | if (parent == NULL) |
466 | return NULL; | 466 | return NULL; |
467 | bus = of_match_bus(parent); | 467 | bus = of_match_bus(parent); |
468 | if (strcmp(bus->name, "pci")) | 468 | if (strcmp(bus->name, "pci")) { |
469 | of_node_put(parent); | ||
469 | return NULL; | 470 | return NULL; |
471 | } | ||
470 | bus->count_cells(dev, &na, &ns); | 472 | bus->count_cells(dev, &na, &ns); |
471 | of_node_put(parent); | 473 | of_node_put(parent); |
472 | if (!OF_CHECK_COUNTS(na, ns)) | 474 | if (!OF_CHECK_COUNTS(na, ns)) |
diff --git a/arch/powerpc/kernel/ptrace.c b/arch/powerpc/kernel/ptrace.c index 400793c71304..bcb83574335b 100644 --- a/arch/powerpc/kernel/ptrace.c +++ b/arch/powerpc/kernel/ptrace.c | |||
@@ -561,10 +561,7 @@ void do_syscall_trace_leave(struct pt_regs *regs) | |||
561 | regs->result); | 561 | regs->result); |
562 | 562 | ||
563 | if ((test_thread_flag(TIF_SYSCALL_TRACE) | 563 | if ((test_thread_flag(TIF_SYSCALL_TRACE) |
564 | #ifdef CONFIG_PPC64 | 564 | || test_thread_flag(TIF_SINGLESTEP)) |
565 | || test_thread_flag(TIF_SINGLESTEP) | ||
566 | #endif | ||
567 | ) | ||
568 | && (current->ptrace & PT_PTRACED)) | 565 | && (current->ptrace & PT_PTRACED)) |
569 | do_syscall_trace(); | 566 | do_syscall_trace(); |
570 | } | 567 | } |
diff --git a/arch/powerpc/kernel/rtas-rtc.c b/arch/powerpc/kernel/rtas-rtc.c index 635d3b9a8811..34d073fb6091 100644 --- a/arch/powerpc/kernel/rtas-rtc.c +++ b/arch/powerpc/kernel/rtas-rtc.c | |||
@@ -52,7 +52,7 @@ void rtas_get_rtc_time(struct rtc_time *rtc_tm) | |||
52 | error = rtas_call(rtas_token("get-time-of-day"), 0, 8, ret); | 52 | error = rtas_call(rtas_token("get-time-of-day"), 0, 8, ret); |
53 | if (error == RTAS_CLOCK_BUSY || rtas_is_extended_busy(error)) { | 53 | if (error == RTAS_CLOCK_BUSY || rtas_is_extended_busy(error)) { |
54 | if (in_interrupt() && printk_ratelimit()) { | 54 | if (in_interrupt() && printk_ratelimit()) { |
55 | memset(&rtc_tm, 0, sizeof(struct rtc_time)); | 55 | memset(rtc_tm, 0, sizeof(struct rtc_time)); |
56 | printk(KERN_WARNING "error: reading clock" | 56 | printk(KERN_WARNING "error: reading clock" |
57 | " would delay interrupt\n"); | 57 | " would delay interrupt\n"); |
58 | return; /* delay not allowed */ | 58 | return; /* delay not allowed */ |
diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c index 7fe4a5c944c9..b5b2add7ad1e 100644 --- a/arch/powerpc/kernel/rtas.c +++ b/arch/powerpc/kernel/rtas.c | |||
@@ -22,6 +22,7 @@ | |||
22 | 22 | ||
23 | #include <asm/prom.h> | 23 | #include <asm/prom.h> |
24 | #include <asm/rtas.h> | 24 | #include <asm/rtas.h> |
25 | #include <asm/hvcall.h> | ||
25 | #include <asm/semaphore.h> | 26 | #include <asm/semaphore.h> |
26 | #include <asm/machdep.h> | 27 | #include <asm/machdep.h> |
27 | #include <asm/page.h> | 28 | #include <asm/page.h> |
@@ -565,6 +566,7 @@ static int ibm_suspend_me_token = RTAS_UNKNOWN_SERVICE; | |||
565 | #ifdef CONFIG_PPC_PSERIES | 566 | #ifdef CONFIG_PPC_PSERIES |
566 | static void rtas_percpu_suspend_me(void *info) | 567 | static void rtas_percpu_suspend_me(void *info) |
567 | { | 568 | { |
569 | int i; | ||
568 | long rc; | 570 | long rc; |
569 | long flags; | 571 | long flags; |
570 | struct rtas_suspend_me_data *data = | 572 | struct rtas_suspend_me_data *data = |
@@ -587,18 +589,16 @@ static void rtas_percpu_suspend_me(void *info) | |||
587 | 589 | ||
588 | if (rc == H_Continue) { | 590 | if (rc == H_Continue) { |
589 | data->waiting = 0; | 591 | data->waiting = 0; |
590 | rtas_call(ibm_suspend_me_token, 0, 1, | 592 | data->args->args[data->args->nargs] = |
591 | data->args->args); | 593 | rtas_call(ibm_suspend_me_token, 0, 1, NULL); |
594 | for_each_cpu(i) | ||
595 | plpar_hcall_norets(H_PROD,i); | ||
592 | } else { | 596 | } else { |
593 | data->waiting = -EBUSY; | 597 | data->waiting = -EBUSY; |
594 | printk(KERN_ERR "Error on H_Join hypervisor call\n"); | 598 | printk(KERN_ERR "Error on H_Join hypervisor call\n"); |
595 | } | 599 | } |
596 | 600 | ||
597 | out: | 601 | out: |
598 | /* before we restore interrupts, make sure we don't | ||
599 | * generate a spurious soft lockup errors | ||
600 | */ | ||
601 | touch_softlockup_watchdog(); | ||
602 | local_irq_restore(flags); | 602 | local_irq_restore(flags); |
603 | return; | 603 | return; |
604 | } | 604 | } |
diff --git a/arch/powerpc/kernel/rtas_flash.c b/arch/powerpc/kernel/rtas_flash.c index 50500093c97f..aaf384c3f04a 100644 --- a/arch/powerpc/kernel/rtas_flash.c +++ b/arch/powerpc/kernel/rtas_flash.c | |||
@@ -672,8 +672,7 @@ static void rtas_flash_firmware(int reboot_type) | |||
672 | static void remove_flash_pde(struct proc_dir_entry *dp) | 672 | static void remove_flash_pde(struct proc_dir_entry *dp) |
673 | { | 673 | { |
674 | if (dp) { | 674 | if (dp) { |
675 | if (dp->data != NULL) | 675 | kfree(dp->data); |
676 | kfree(dp->data); | ||
677 | dp->owner = NULL; | 676 | dp->owner = NULL; |
678 | remove_proc_entry(dp->name, dp->parent); | 677 | remove_proc_entry(dp->name, dp->parent); |
679 | } | 678 | } |
diff --git a/arch/powerpc/kernel/rtas_pci.c b/arch/powerpc/kernel/rtas_pci.c index 5579f6559912..7442775ef2a1 100644 --- a/arch/powerpc/kernel/rtas_pci.c +++ b/arch/powerpc/kernel/rtas_pci.c | |||
@@ -280,8 +280,7 @@ static int phb_set_bus_ranges(struct device_node *dev, | |||
280 | return 0; | 280 | return 0; |
281 | } | 281 | } |
282 | 282 | ||
283 | static int __devinit setup_phb(struct device_node *dev, | 283 | int __devinit setup_phb(struct device_node *dev, struct pci_controller *phb) |
284 | struct pci_controller *phb) | ||
285 | { | 284 | { |
286 | if (is_python(dev)) | 285 | if (is_python(dev)) |
287 | python_countermeasures(dev); | 286 | python_countermeasures(dev); |
@@ -359,27 +358,6 @@ unsigned long __init find_and_init_phbs(void) | |||
359 | return 0; | 358 | return 0; |
360 | } | 359 | } |
361 | 360 | ||
362 | struct pci_controller * __devinit init_phb_dynamic(struct device_node *dn) | ||
363 | { | ||
364 | struct pci_controller *phb; | ||
365 | int primary; | ||
366 | |||
367 | primary = list_empty(&hose_list); | ||
368 | phb = pcibios_alloc_controller(dn); | ||
369 | if (!phb) | ||
370 | return NULL; | ||
371 | setup_phb(dn, phb); | ||
372 | pci_process_bridge_OF_ranges(phb, dn, primary); | ||
373 | |||
374 | pci_setup_phb_io_dynamic(phb, primary); | ||
375 | |||
376 | pci_devs_phb_init_dynamic(phb); | ||
377 | scan_phb(phb); | ||
378 | |||
379 | return phb; | ||
380 | } | ||
381 | EXPORT_SYMBOL(init_phb_dynamic); | ||
382 | |||
383 | /* RPA-specific bits for removing PHBs */ | 361 | /* RPA-specific bits for removing PHBs */ |
384 | int pcibios_remove_root_bus(struct pci_controller *phb) | 362 | int pcibios_remove_root_bus(struct pci_controller *phb) |
385 | { | 363 | { |
diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c index e29b275e09e0..f96c49b03ba0 100644 --- a/arch/powerpc/kernel/setup_64.c +++ b/arch/powerpc/kernel/setup_64.c | |||
@@ -311,8 +311,6 @@ void smp_release_cpus(void) | |||
311 | 311 | ||
312 | DBG(" <- smp_release_cpus()\n"); | 312 | DBG(" <- smp_release_cpus()\n"); |
313 | } | 313 | } |
314 | #else | ||
315 | #define smp_release_cpus() | ||
316 | #endif /* CONFIG_SMP || CONFIG_KEXEC */ | 314 | #endif /* CONFIG_SMP || CONFIG_KEXEC */ |
317 | 315 | ||
318 | /* | 316 | /* |
@@ -398,6 +396,9 @@ void __init setup_system(void) | |||
398 | { | 396 | { |
399 | DBG(" -> setup_system()\n"); | 397 | DBG(" -> setup_system()\n"); |
400 | 398 | ||
399 | #ifdef CONFIG_KEXEC | ||
400 | kdump_move_device_tree(); | ||
401 | #endif | ||
401 | /* | 402 | /* |
402 | * Unflatten the device-tree passed by prom_init or kexec | 403 | * Unflatten the device-tree passed by prom_init or kexec |
403 | */ | 404 | */ |
@@ -470,10 +471,12 @@ void __init setup_system(void) | |||
470 | check_smt_enabled(); | 471 | check_smt_enabled(); |
471 | smp_setup_cpu_maps(); | 472 | smp_setup_cpu_maps(); |
472 | 473 | ||
474 | #ifdef CONFIG_SMP | ||
473 | /* Release secondary cpus out of their spinloops at 0x60 now that | 475 | /* Release secondary cpus out of their spinloops at 0x60 now that |
474 | * we can map physical -> logical CPU ids | 476 | * we can map physical -> logical CPU ids |
475 | */ | 477 | */ |
476 | smp_release_cpus(); | 478 | smp_release_cpus(); |
479 | #endif | ||
477 | 480 | ||
478 | printk("Starting Linux PPC64 %s\n", system_utsname.version); | 481 | printk("Starting Linux PPC64 %s\n", system_utsname.version); |
479 | 482 | ||
diff --git a/arch/powerpc/kernel/signal_32.c b/arch/powerpc/kernel/signal_32.c index 3747ab0dac3f..d7a4e814974d 100644 --- a/arch/powerpc/kernel/signal_32.c +++ b/arch/powerpc/kernel/signal_32.c | |||
@@ -142,11 +142,7 @@ static inline int get_old_sigaction(struct k_sigaction *new_ka, | |||
142 | return 0; | 142 | return 0; |
143 | } | 143 | } |
144 | 144 | ||
145 | static inline compat_uptr_t to_user_ptr(void *kp) | 145 | #define to_user_ptr(p) ptr_to_compat(p) |
146 | { | ||
147 | return (compat_uptr_t)(u64)kp; | ||
148 | } | ||
149 | |||
150 | #define from_user_ptr(p) compat_ptr(p) | 146 | #define from_user_ptr(p) compat_ptr(p) |
151 | 147 | ||
152 | static inline int save_general_regs(struct pt_regs *regs, | 148 | static inline int save_general_regs(struct pt_regs *regs, |
@@ -155,10 +151,7 @@ static inline int save_general_regs(struct pt_regs *regs, | |||
155 | elf_greg_t64 *gregs = (elf_greg_t64 *)regs; | 151 | elf_greg_t64 *gregs = (elf_greg_t64 *)regs; |
156 | int i; | 152 | int i; |
157 | 153 | ||
158 | if (!FULL_REGS(regs)) { | 154 | WARN_ON(!FULL_REGS(regs)); |
159 | set_thread_flag(TIF_SAVE_NVGPRS); | ||
160 | current_thread_info()->nvgprs_frame = frame->mc_gregs; | ||
161 | } | ||
162 | 155 | ||
163 | for (i = 0; i <= PT_RESULT; i ++) { | 156 | for (i = 0; i <= PT_RESULT; i ++) { |
164 | if (i == 14 && !FULL_REGS(regs)) | 157 | if (i == 14 && !FULL_REGS(regs)) |
@@ -213,21 +206,13 @@ static inline int get_old_sigaction(struct k_sigaction *new_ka, | |||
213 | return 0; | 206 | return 0; |
214 | } | 207 | } |
215 | 208 | ||
216 | #define to_user_ptr(p) (p) | 209 | #define to_user_ptr(p) ((unsigned long)(p)) |
217 | #define from_user_ptr(p) (p) | 210 | #define from_user_ptr(p) ((void __user *)(p)) |
218 | 211 | ||
219 | static inline int save_general_regs(struct pt_regs *regs, | 212 | static inline int save_general_regs(struct pt_regs *regs, |
220 | struct mcontext __user *frame) | 213 | struct mcontext __user *frame) |
221 | { | 214 | { |
222 | if (!FULL_REGS(regs)) { | 215 | WARN_ON(!FULL_REGS(regs)); |
223 | /* Zero out the unsaved GPRs to avoid information | ||
224 | leak, and set TIF_SAVE_NVGPRS to ensure that the | ||
225 | registers do actually get saved later. */ | ||
226 | memset(®s->gpr[14], 0, 18 * sizeof(unsigned long)); | ||
227 | current_thread_info()->nvgprs_frame = &frame->mc_gregs; | ||
228 | set_thread_flag(TIF_SAVE_NVGPRS); | ||
229 | } | ||
230 | |||
231 | return __copy_to_user(&frame->mc_gregs, regs, GP_REGS_SIZE); | 216 | return __copy_to_user(&frame->mc_gregs, regs, GP_REGS_SIZE); |
232 | } | 217 | } |
233 | 218 | ||
@@ -254,11 +239,9 @@ int do_signal(sigset_t *oldset, struct pt_regs *regs); | |||
254 | */ | 239 | */ |
255 | long sys_sigsuspend(old_sigset_t mask) | 240 | long sys_sigsuspend(old_sigset_t mask) |
256 | { | 241 | { |
257 | sigset_t saveset; | ||
258 | |||
259 | mask &= _BLOCKABLE; | 242 | mask &= _BLOCKABLE; |
260 | spin_lock_irq(¤t->sighand->siglock); | 243 | spin_lock_irq(¤t->sighand->siglock); |
261 | saveset = current->blocked; | 244 | current->saved_sigmask = current->blocked; |
262 | siginitset(¤t->blocked, mask); | 245 | siginitset(¤t->blocked, mask); |
263 | recalc_sigpending(); | 246 | recalc_sigpending(); |
264 | spin_unlock_irq(¤t->sighand->siglock); | 247 | spin_unlock_irq(¤t->sighand->siglock); |
@@ -528,7 +511,7 @@ long compat_sys_rt_sigaction(int sig, const struct sigaction32 __user *act, | |||
528 | 511 | ||
529 | ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL); | 512 | ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL); |
530 | if (!ret && oact) { | 513 | if (!ret && oact) { |
531 | ret = put_user((long)old_ka.sa.sa_handler, &oact->sa_handler); | 514 | ret = put_user(to_user_ptr(old_ka.sa.sa_handler), &oact->sa_handler); |
532 | ret |= put_sigset_t(&oact->sa_mask, &old_ka.sa.sa_mask); | 515 | ret |= put_sigset_t(&oact->sa_mask, &old_ka.sa.sa_mask); |
533 | ret |= __put_user(old_ka.sa.sa_flags, &oact->sa_flags); | 516 | ret |= __put_user(old_ka.sa.sa_flags, &oact->sa_flags); |
534 | } | 517 | } |
@@ -677,8 +660,8 @@ long compat_sys_rt_sigqueueinfo(u32 pid, u32 sig, compat_siginfo_t __user *uinfo | |||
677 | int compat_sys_sigaltstack(u32 __new, u32 __old, int r5, | 660 | int compat_sys_sigaltstack(u32 __new, u32 __old, int r5, |
678 | int r6, int r7, int r8, struct pt_regs *regs) | 661 | int r6, int r7, int r8, struct pt_regs *regs) |
679 | { | 662 | { |
680 | stack_32_t __user * newstack = (stack_32_t __user *)(long) __new; | 663 | stack_32_t __user * newstack = compat_ptr(__new); |
681 | stack_32_t __user * oldstack = (stack_32_t __user *)(long) __old; | 664 | stack_32_t __user * oldstack = compat_ptr(__old); |
682 | stack_t uss, uoss; | 665 | stack_t uss, uoss; |
683 | int ret; | 666 | int ret; |
684 | mm_segment_t old_fs; | 667 | mm_segment_t old_fs; |
@@ -710,7 +693,7 @@ int compat_sys_sigaltstack(u32 __new, u32 __old, int r5, | |||
710 | set_fs(old_fs); | 693 | set_fs(old_fs); |
711 | /* Copy the stack information to the user output buffer */ | 694 | /* Copy the stack information to the user output buffer */ |
712 | if (!ret && oldstack && | 695 | if (!ret && oldstack && |
713 | (put_user((long)uoss.ss_sp, &oldstack->ss_sp) || | 696 | (put_user(ptr_to_compat(uoss.ss_sp), &oldstack->ss_sp) || |
714 | __put_user(uoss.ss_flags, &oldstack->ss_flags) || | 697 | __put_user(uoss.ss_flags, &oldstack->ss_flags) || |
715 | __put_user(uoss.ss_size, &oldstack->ss_size))) | 698 | __put_user(uoss.ss_size, &oldstack->ss_size))) |
716 | return -EFAULT; | 699 | return -EFAULT; |
@@ -832,8 +815,8 @@ static int do_setcontext(struct ucontext __user *ucp, struct pt_regs *regs, int | |||
832 | } | 815 | } |
833 | 816 | ||
834 | long sys_swapcontext(struct ucontext __user *old_ctx, | 817 | long sys_swapcontext(struct ucontext __user *old_ctx, |
835 | struct ucontext __user *new_ctx, | 818 | struct ucontext __user *new_ctx, |
836 | int ctx_size, int r6, int r7, int r8, struct pt_regs *regs) | 819 | int ctx_size, int r6, int r7, int r8, struct pt_regs *regs) |
837 | { | 820 | { |
838 | unsigned char tmp; | 821 | unsigned char tmp; |
839 | 822 | ||
diff --git a/arch/powerpc/kernel/signal_64.c b/arch/powerpc/kernel/signal_64.c index b3193116e686..4324f8a8ba24 100644 --- a/arch/powerpc/kernel/signal_64.c +++ b/arch/powerpc/kernel/signal_64.c | |||
@@ -60,8 +60,8 @@ struct rt_sigframe { | |||
60 | struct ucontext uc; | 60 | struct ucontext uc; |
61 | unsigned long _unused[2]; | 61 | unsigned long _unused[2]; |
62 | unsigned int tramp[TRAMP_SIZE]; | 62 | unsigned int tramp[TRAMP_SIZE]; |
63 | struct siginfo *pinfo; | 63 | struct siginfo __user *pinfo; |
64 | void *puc; | 64 | void __user *puc; |
65 | struct siginfo info; | 65 | struct siginfo info; |
66 | /* 64 bit ABI allows for 288 bytes below sp before decrementing it. */ | 66 | /* 64 bit ABI allows for 288 bytes below sp before decrementing it. */ |
67 | char abigap[288]; | 67 | char abigap[288]; |
@@ -118,14 +118,7 @@ static long setup_sigcontext(struct sigcontext __user *sc, struct pt_regs *regs, | |||
118 | err |= __put_user(0, &sc->v_regs); | 118 | err |= __put_user(0, &sc->v_regs); |
119 | #endif /* CONFIG_ALTIVEC */ | 119 | #endif /* CONFIG_ALTIVEC */ |
120 | err |= __put_user(&sc->gp_regs, &sc->regs); | 120 | err |= __put_user(&sc->gp_regs, &sc->regs); |
121 | if (!FULL_REGS(regs)) { | 121 | WARN_ON(!FULL_REGS(regs)); |
122 | /* Zero out the unsaved GPRs to avoid information | ||
123 | leak, and set TIF_SAVE_NVGPRS to ensure that the | ||
124 | registers do actually get saved later. */ | ||
125 | memset(®s->gpr[14], 0, 18 * sizeof(unsigned long)); | ||
126 | set_thread_flag(TIF_SAVE_NVGPRS); | ||
127 | current_thread_info()->nvgprs_frame = &sc->gp_regs; | ||
128 | } | ||
129 | err |= __copy_to_user(&sc->gp_regs, regs, GP_REGS_SIZE); | 122 | err |= __copy_to_user(&sc->gp_regs, regs, GP_REGS_SIZE); |
130 | err |= __copy_to_user(&sc->fp_regs, ¤t->thread.fpr, FP_REGS_SIZE); | 123 | err |= __copy_to_user(&sc->fp_regs, ¤t->thread.fpr, FP_REGS_SIZE); |
131 | err |= __put_user(signr, &sc->signal); | 124 | err |= __put_user(signr, &sc->signal); |
diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c index c8458c531b25..13595a64f013 100644 --- a/arch/powerpc/kernel/smp.c +++ b/arch/powerpc/kernel/smp.c | |||
@@ -540,6 +540,9 @@ int __devinit start_secondary(void *unused) | |||
540 | if (smp_ops->take_timebase) | 540 | if (smp_ops->take_timebase) |
541 | smp_ops->take_timebase(); | 541 | smp_ops->take_timebase(); |
542 | 542 | ||
543 | if (system_state > SYSTEM_BOOTING) | ||
544 | per_cpu(last_jiffy, cpu) = get_tb(); | ||
545 | |||
543 | spin_lock(&call_lock); | 546 | spin_lock(&call_lock); |
544 | cpu_set(cpu, cpu_online_map); | 547 | cpu_set(cpu, cpu_online_map); |
545 | spin_unlock(&call_lock); | 548 | spin_unlock(&call_lock); |
diff --git a/arch/powerpc/kernel/sys_ppc32.c b/arch/powerpc/kernel/sys_ppc32.c index 475249dc2350..cd75ab2908fa 100644 --- a/arch/powerpc/kernel/sys_ppc32.c +++ b/arch/powerpc/kernel/sys_ppc32.c | |||
@@ -176,7 +176,6 @@ struct timex32 { | |||
176 | }; | 176 | }; |
177 | 177 | ||
178 | extern int do_adjtimex(struct timex *); | 178 | extern int do_adjtimex(struct timex *); |
179 | extern void ppc_adjtimex(void); | ||
180 | 179 | ||
181 | asmlinkage long compat_sys_adjtimex(struct timex32 __user *utp) | 180 | asmlinkage long compat_sys_adjtimex(struct timex32 __user *utp) |
182 | { | 181 | { |
@@ -209,9 +208,6 @@ asmlinkage long compat_sys_adjtimex(struct timex32 __user *utp) | |||
209 | 208 | ||
210 | ret = do_adjtimex(&txc); | 209 | ret = do_adjtimex(&txc); |
211 | 210 | ||
212 | /* adjust the conversion of TB to time of day to track adjtimex */ | ||
213 | ppc_adjtimex(); | ||
214 | |||
215 | if(put_user(txc.modes, &utp->modes) || | 211 | if(put_user(txc.modes, &utp->modes) || |
216 | __put_user(txc.offset, &utp->offset) || | 212 | __put_user(txc.offset, &utp->offset) || |
217 | __put_user(txc.freq, &utp->freq) || | 213 | __put_user(txc.freq, &utp->freq) || |
diff --git a/arch/powerpc/kernel/systbl.S b/arch/powerpc/kernel/systbl.S index 007b15ee36d2..1ad55f0466fd 100644 --- a/arch/powerpc/kernel/systbl.S +++ b/arch/powerpc/kernel/systbl.S | |||
@@ -36,8 +36,6 @@ | |||
36 | #ifdef CONFIG_PPC64 | 36 | #ifdef CONFIG_PPC64 |
37 | #define sys_sigpending sys_ni_syscall | 37 | #define sys_sigpending sys_ni_syscall |
38 | #define sys_old_getrlimit sys_ni_syscall | 38 | #define sys_old_getrlimit sys_ni_syscall |
39 | #else | ||
40 | #define ppc_rtas sys_ni_syscall | ||
41 | #endif | 39 | #endif |
42 | 40 | ||
43 | _GLOBAL(sys_call_table) | 41 | _GLOBAL(sys_call_table) |
@@ -290,7 +288,7 @@ COMPAT_SYS(clock_settime) | |||
290 | COMPAT_SYS(clock_gettime) | 288 | COMPAT_SYS(clock_gettime) |
291 | COMPAT_SYS(clock_getres) | 289 | COMPAT_SYS(clock_getres) |
292 | COMPAT_SYS(clock_nanosleep) | 290 | COMPAT_SYS(clock_nanosleep) |
293 | COMPAT_SYS(swapcontext) | 291 | SYSX(ppc64_swapcontext,ppc32_swapcontext,ppc_swapcontext) |
294 | COMPAT_SYS(tgkill) | 292 | COMPAT_SYS(tgkill) |
295 | COMPAT_SYS(utimes) | 293 | COMPAT_SYS(utimes) |
296 | COMPAT_SYS(statfs64) | 294 | COMPAT_SYS(statfs64) |
@@ -323,3 +321,4 @@ SYSCALL(spu_run) | |||
323 | SYSCALL(spu_create) | 321 | SYSCALL(spu_create) |
324 | COMPAT_SYS(pselect6) | 322 | COMPAT_SYS(pselect6) |
325 | COMPAT_SYS(ppoll) | 323 | COMPAT_SYS(ppoll) |
324 | SYSCALL(unshare) | ||
diff --git a/arch/powerpc/kernel/time.c b/arch/powerpc/kernel/time.c index c4a294d657b9..86f7e3d154d8 100644 --- a/arch/powerpc/kernel/time.c +++ b/arch/powerpc/kernel/time.c | |||
@@ -50,6 +50,7 @@ | |||
50 | #include <linux/security.h> | 50 | #include <linux/security.h> |
51 | #include <linux/percpu.h> | 51 | #include <linux/percpu.h> |
52 | #include <linux/rtc.h> | 52 | #include <linux/rtc.h> |
53 | #include <linux/jiffies.h> | ||
53 | 54 | ||
54 | #include <asm/io.h> | 55 | #include <asm/io.h> |
55 | #include <asm/processor.h> | 56 | #include <asm/processor.h> |
@@ -99,7 +100,15 @@ EXPORT_SYMBOL(tb_ticks_per_usec); | |||
99 | unsigned long tb_ticks_per_sec; | 100 | unsigned long tb_ticks_per_sec; |
100 | u64 tb_to_xs; | 101 | u64 tb_to_xs; |
101 | unsigned tb_to_us; | 102 | unsigned tb_to_us; |
102 | unsigned long processor_freq; | 103 | |
104 | #define TICKLEN_SCALE (SHIFT_SCALE - 10) | ||
105 | u64 last_tick_len; /* units are ns / 2^TICKLEN_SCALE */ | ||
106 | u64 ticklen_to_xs; /* 0.64 fraction */ | ||
107 | |||
108 | /* If last_tick_len corresponds to about 1/HZ seconds, then | ||
109 | last_tick_len << TICKLEN_SHIFT will be about 2^63. */ | ||
110 | #define TICKLEN_SHIFT (63 - 30 - TICKLEN_SCALE + SHIFT_HZ) | ||
111 | |||
103 | DEFINE_SPINLOCK(rtc_lock); | 112 | DEFINE_SPINLOCK(rtc_lock); |
104 | EXPORT_SYMBOL_GPL(rtc_lock); | 113 | EXPORT_SYMBOL_GPL(rtc_lock); |
105 | 114 | ||
@@ -113,10 +122,6 @@ extern unsigned long wall_jiffies; | |||
113 | extern struct timezone sys_tz; | 122 | extern struct timezone sys_tz; |
114 | static long timezone_offset; | 123 | static long timezone_offset; |
115 | 124 | ||
116 | void ppc_adjtimex(void); | ||
117 | |||
118 | static unsigned adjusting_time = 0; | ||
119 | |||
120 | unsigned long ppc_proc_freq; | 125 | unsigned long ppc_proc_freq; |
121 | unsigned long ppc_tb_freq; | 126 | unsigned long ppc_tb_freq; |
122 | 127 | ||
@@ -178,8 +183,7 @@ static __inline__ void timer_check_rtc(void) | |||
178 | */ | 183 | */ |
179 | if (ppc_md.set_rtc_time && ntp_synced() && | 184 | if (ppc_md.set_rtc_time && ntp_synced() && |
180 | xtime.tv_sec - last_rtc_update >= 659 && | 185 | xtime.tv_sec - last_rtc_update >= 659 && |
181 | abs((xtime.tv_nsec/1000) - (1000000-1000000/HZ)) < 500000/HZ && | 186 | abs((xtime.tv_nsec/1000) - (1000000-1000000/HZ)) < 500000/HZ) { |
182 | jiffies - wall_jiffies == 1) { | ||
183 | struct rtc_time tm; | 187 | struct rtc_time tm; |
184 | to_tm(xtime.tv_sec + 1 + timezone_offset, &tm); | 188 | to_tm(xtime.tv_sec + 1 + timezone_offset, &tm); |
185 | tm.tm_year -= 1900; | 189 | tm.tm_year -= 1900; |
@@ -226,15 +230,14 @@ void do_gettimeofday(struct timeval *tv) | |||
226 | if (__USE_RTC()) { | 230 | if (__USE_RTC()) { |
227 | /* do this the old way */ | 231 | /* do this the old way */ |
228 | unsigned long flags, seq; | 232 | unsigned long flags, seq; |
229 | unsigned int sec, nsec, usec, lost; | 233 | unsigned int sec, nsec, usec; |
230 | 234 | ||
231 | do { | 235 | do { |
232 | seq = read_seqbegin_irqsave(&xtime_lock, flags); | 236 | seq = read_seqbegin_irqsave(&xtime_lock, flags); |
233 | sec = xtime.tv_sec; | 237 | sec = xtime.tv_sec; |
234 | nsec = xtime.tv_nsec + tb_ticks_since(tb_last_stamp); | 238 | nsec = xtime.tv_nsec + tb_ticks_since(tb_last_stamp); |
235 | lost = jiffies - wall_jiffies; | ||
236 | } while (read_seqretry_irqrestore(&xtime_lock, seq, flags)); | 239 | } while (read_seqretry_irqrestore(&xtime_lock, seq, flags)); |
237 | usec = nsec / 1000 + lost * (1000000 / HZ); | 240 | usec = nsec / 1000; |
238 | while (usec >= 1000000) { | 241 | while (usec >= 1000000) { |
239 | usec -= 1000000; | 242 | usec -= 1000000; |
240 | ++sec; | 243 | ++sec; |
@@ -248,23 +251,6 @@ void do_gettimeofday(struct timeval *tv) | |||
248 | 251 | ||
249 | EXPORT_SYMBOL(do_gettimeofday); | 252 | EXPORT_SYMBOL(do_gettimeofday); |
250 | 253 | ||
251 | /* Synchronize xtime with do_gettimeofday */ | ||
252 | |||
253 | static inline void timer_sync_xtime(unsigned long cur_tb) | ||
254 | { | ||
255 | #ifdef CONFIG_PPC64 | ||
256 | /* why do we do this? */ | ||
257 | struct timeval my_tv; | ||
258 | |||
259 | __do_gettimeofday(&my_tv, cur_tb); | ||
260 | |||
261 | if (xtime.tv_sec <= my_tv.tv_sec) { | ||
262 | xtime.tv_sec = my_tv.tv_sec; | ||
263 | xtime.tv_nsec = my_tv.tv_usec * 1000; | ||
264 | } | ||
265 | #endif | ||
266 | } | ||
267 | |||
268 | /* | 254 | /* |
269 | * There are two copies of tb_to_xs and stamp_xsec so that no | 255 | * There are two copies of tb_to_xs and stamp_xsec so that no |
270 | * lock is needed to access and use these values in | 256 | * lock is needed to access and use these values in |
@@ -297,9 +283,9 @@ static inline void update_gtod(u64 new_tb_stamp, u64 new_stamp_xsec, | |||
297 | * the two values of tb_update_count match and are even then the | 283 | * the two values of tb_update_count match and are even then the |
298 | * tb_to_xs and stamp_xsec values are consistent. If not, then it | 284 | * tb_to_xs and stamp_xsec values are consistent. If not, then it |
299 | * loops back and reads them again until this criteria is met. | 285 | * loops back and reads them again until this criteria is met. |
286 | * We expect the caller to have done the first increment of | ||
287 | * vdso_data->tb_update_count already. | ||
300 | */ | 288 | */ |
301 | ++(vdso_data->tb_update_count); | ||
302 | smp_wmb(); | ||
303 | vdso_data->tb_orig_stamp = new_tb_stamp; | 289 | vdso_data->tb_orig_stamp = new_tb_stamp; |
304 | vdso_data->stamp_xsec = new_stamp_xsec; | 290 | vdso_data->stamp_xsec = new_stamp_xsec; |
305 | vdso_data->tb_to_xs = new_tb_to_xs; | 291 | vdso_data->tb_to_xs = new_tb_to_xs; |
@@ -323,15 +309,40 @@ static __inline__ void timer_recalc_offset(u64 cur_tb) | |||
323 | { | 309 | { |
324 | unsigned long offset; | 310 | unsigned long offset; |
325 | u64 new_stamp_xsec; | 311 | u64 new_stamp_xsec; |
312 | u64 tlen, t2x; | ||
313 | u64 tb, xsec_old, xsec_new; | ||
314 | struct gettimeofday_vars *varp; | ||
326 | 315 | ||
327 | if (__USE_RTC()) | 316 | if (__USE_RTC()) |
328 | return; | 317 | return; |
318 | tlen = current_tick_length(); | ||
329 | offset = cur_tb - do_gtod.varp->tb_orig_stamp; | 319 | offset = cur_tb - do_gtod.varp->tb_orig_stamp; |
330 | if ((offset & 0x80000000u) == 0) | 320 | if (tlen == last_tick_len && offset < 0x80000000u) |
331 | return; | 321 | return; |
332 | new_stamp_xsec = do_gtod.varp->stamp_xsec | 322 | if (tlen != last_tick_len) { |
333 | + mulhdu(offset, do_gtod.varp->tb_to_xs); | 323 | t2x = mulhdu(tlen << TICKLEN_SHIFT, ticklen_to_xs); |
334 | update_gtod(cur_tb, new_stamp_xsec, do_gtod.varp->tb_to_xs); | 324 | last_tick_len = tlen; |
325 | } else | ||
326 | t2x = do_gtod.varp->tb_to_xs; | ||
327 | new_stamp_xsec = (u64) xtime.tv_nsec * XSEC_PER_SEC; | ||
328 | do_div(new_stamp_xsec, 1000000000); | ||
329 | new_stamp_xsec += (u64) xtime.tv_sec * XSEC_PER_SEC; | ||
330 | |||
331 | ++vdso_data->tb_update_count; | ||
332 | smp_mb(); | ||
333 | |||
334 | /* | ||
335 | * Make sure time doesn't go backwards for userspace gettimeofday. | ||
336 | */ | ||
337 | tb = get_tb(); | ||
338 | varp = do_gtod.varp; | ||
339 | xsec_old = mulhdu(tb - varp->tb_orig_stamp, varp->tb_to_xs) | ||
340 | + varp->stamp_xsec; | ||
341 | xsec_new = mulhdu(tb - cur_tb, t2x) + new_stamp_xsec; | ||
342 | if (xsec_new < xsec_old) | ||
343 | new_stamp_xsec += xsec_old - xsec_new; | ||
344 | |||
345 | update_gtod(cur_tb, new_stamp_xsec, t2x); | ||
335 | } | 346 | } |
336 | 347 | ||
337 | #ifdef CONFIG_SMP | 348 | #ifdef CONFIG_SMP |
@@ -462,13 +473,10 @@ void timer_interrupt(struct pt_regs * regs) | |||
462 | write_seqlock(&xtime_lock); | 473 | write_seqlock(&xtime_lock); |
463 | tb_last_jiffy += tb_ticks_per_jiffy; | 474 | tb_last_jiffy += tb_ticks_per_jiffy; |
464 | tb_last_stamp = per_cpu(last_jiffy, cpu); | 475 | tb_last_stamp = per_cpu(last_jiffy, cpu); |
465 | timer_recalc_offset(tb_last_jiffy); | ||
466 | do_timer(regs); | 476 | do_timer(regs); |
467 | timer_sync_xtime(tb_last_jiffy); | 477 | timer_recalc_offset(tb_last_jiffy); |
468 | timer_check_rtc(); | 478 | timer_check_rtc(); |
469 | write_sequnlock(&xtime_lock); | 479 | write_sequnlock(&xtime_lock); |
470 | if (adjusting_time && (time_adjust == 0)) | ||
471 | ppc_adjtimex(); | ||
472 | } | 480 | } |
473 | 481 | ||
474 | next_dec = tb_ticks_per_jiffy - ticks; | 482 | next_dec = tb_ticks_per_jiffy - ticks; |
@@ -492,16 +500,18 @@ void timer_interrupt(struct pt_regs * regs) | |||
492 | 500 | ||
493 | void wakeup_decrementer(void) | 501 | void wakeup_decrementer(void) |
494 | { | 502 | { |
495 | int i; | 503 | unsigned long ticks; |
496 | 504 | ||
497 | set_dec(tb_ticks_per_jiffy); | ||
498 | /* | 505 | /* |
499 | * We don't expect this to be called on a machine with a 601, | 506 | * The timebase gets saved on sleep and restored on wakeup, |
500 | * so using get_tbl is fine. | 507 | * so all we need to do is to reset the decrementer. |
501 | */ | 508 | */ |
502 | tb_last_stamp = tb_last_jiffy = get_tb(); | 509 | ticks = tb_ticks_since(__get_cpu_var(last_jiffy)); |
503 | for_each_cpu(i) | 510 | if (ticks < tb_ticks_per_jiffy) |
504 | per_cpu(last_jiffy, i) = tb_last_stamp; | 511 | ticks = tb_ticks_per_jiffy - ticks; |
512 | else | ||
513 | ticks = 1; | ||
514 | set_dec(ticks); | ||
505 | } | 515 | } |
506 | 516 | ||
507 | #ifdef CONFIG_SMP | 517 | #ifdef CONFIG_SMP |
@@ -541,8 +551,8 @@ int do_settimeofday(struct timespec *tv) | |||
541 | time_t wtm_sec, new_sec = tv->tv_sec; | 551 | time_t wtm_sec, new_sec = tv->tv_sec; |
542 | long wtm_nsec, new_nsec = tv->tv_nsec; | 552 | long wtm_nsec, new_nsec = tv->tv_nsec; |
543 | unsigned long flags; | 553 | unsigned long flags; |
544 | long int tb_delta; | 554 | u64 new_xsec; |
545 | u64 new_xsec, tb_delta_xs; | 555 | unsigned long tb_delta; |
546 | 556 | ||
547 | if ((unsigned long)tv->tv_nsec >= NSEC_PER_SEC) | 557 | if ((unsigned long)tv->tv_nsec >= NSEC_PER_SEC) |
548 | return -EINVAL; | 558 | return -EINVAL; |
@@ -563,9 +573,23 @@ int do_settimeofday(struct timespec *tv) | |||
563 | first_settimeofday = 0; | 573 | first_settimeofday = 0; |
564 | } | 574 | } |
565 | #endif | 575 | #endif |
576 | |||
577 | /* Make userspace gettimeofday spin until we're done. */ | ||
578 | ++vdso_data->tb_update_count; | ||
579 | smp_mb(); | ||
580 | |||
581 | /* | ||
582 | * Subtract off the number of nanoseconds since the | ||
583 | * beginning of the last tick. | ||
584 | * Note that since we don't increment jiffies_64 anywhere other | ||
585 | * than in do_timer (since we don't have a lost tick problem), | ||
586 | * wall_jiffies will always be the same as jiffies, | ||
587 | * and therefore the (jiffies - wall_jiffies) computation | ||
588 | * has been removed. | ||
589 | */ | ||
566 | tb_delta = tb_ticks_since(tb_last_stamp); | 590 | tb_delta = tb_ticks_since(tb_last_stamp); |
567 | tb_delta += (jiffies - wall_jiffies) * tb_ticks_per_jiffy; | 591 | tb_delta = mulhdu(tb_delta, do_gtod.varp->tb_to_xs); /* in xsec */ |
568 | tb_delta_xs = mulhdu(tb_delta, do_gtod.varp->tb_to_xs); | 592 | new_nsec -= SCALE_XSEC(tb_delta, 1000000000); |
569 | 593 | ||
570 | wtm_sec = wall_to_monotonic.tv_sec + (xtime.tv_sec - new_sec); | 594 | wtm_sec = wall_to_monotonic.tv_sec + (xtime.tv_sec - new_sec); |
571 | wtm_nsec = wall_to_monotonic.tv_nsec + (xtime.tv_nsec - new_nsec); | 595 | wtm_nsec = wall_to_monotonic.tv_nsec + (xtime.tv_nsec - new_nsec); |
@@ -580,12 +604,12 @@ int do_settimeofday(struct timespec *tv) | |||
580 | 604 | ||
581 | ntp_clear(); | 605 | ntp_clear(); |
582 | 606 | ||
583 | new_xsec = 0; | 607 | new_xsec = xtime.tv_nsec; |
584 | if (new_nsec != 0) { | 608 | if (new_xsec != 0) { |
585 | new_xsec = (u64)new_nsec * XSEC_PER_SEC; | 609 | new_xsec *= XSEC_PER_SEC; |
586 | do_div(new_xsec, NSEC_PER_SEC); | 610 | do_div(new_xsec, NSEC_PER_SEC); |
587 | } | 611 | } |
588 | new_xsec += (u64)new_sec * XSEC_PER_SEC - tb_delta_xs; | 612 | new_xsec += (u64)xtime.tv_sec * XSEC_PER_SEC; |
589 | update_gtod(tb_last_jiffy, new_xsec, do_gtod.varp->tb_to_xs); | 613 | update_gtod(tb_last_jiffy, new_xsec, do_gtod.varp->tb_to_xs); |
590 | 614 | ||
591 | vdso_data->tz_minuteswest = sys_tz.tz_minuteswest; | 615 | vdso_data->tz_minuteswest = sys_tz.tz_minuteswest; |
@@ -612,10 +636,10 @@ void __init generic_calibrate_decr(void) | |||
612 | 636 | ||
613 | ppc_tb_freq = DEFAULT_TB_FREQ; /* hardcoded default */ | 637 | ppc_tb_freq = DEFAULT_TB_FREQ; /* hardcoded default */ |
614 | node_found = 0; | 638 | node_found = 0; |
615 | if (cpu != 0) { | 639 | if (cpu) { |
616 | fp = (unsigned int *)get_property(cpu, "timebase-frequency", | 640 | fp = (unsigned int *)get_property(cpu, "timebase-frequency", |
617 | NULL); | 641 | NULL); |
618 | if (fp != 0) { | 642 | if (fp) { |
619 | node_found = 1; | 643 | node_found = 1; |
620 | ppc_tb_freq = *fp; | 644 | ppc_tb_freq = *fp; |
621 | } | 645 | } |
@@ -626,10 +650,10 @@ void __init generic_calibrate_decr(void) | |||
626 | 650 | ||
627 | ppc_proc_freq = DEFAULT_PROC_FREQ; | 651 | ppc_proc_freq = DEFAULT_PROC_FREQ; |
628 | node_found = 0; | 652 | node_found = 0; |
629 | if (cpu != 0) { | 653 | if (cpu) { |
630 | fp = (unsigned int *)get_property(cpu, "clock-frequency", | 654 | fp = (unsigned int *)get_property(cpu, "clock-frequency", |
631 | NULL); | 655 | NULL); |
632 | if (fp != 0) { | 656 | if (fp) { |
633 | node_found = 1; | 657 | node_found = 1; |
634 | ppc_proc_freq = *fp; | 658 | ppc_proc_freq = *fp; |
635 | } | 659 | } |
@@ -671,7 +695,7 @@ void __init time_init(void) | |||
671 | unsigned long flags; | 695 | unsigned long flags; |
672 | unsigned long tm = 0; | 696 | unsigned long tm = 0; |
673 | struct div_result res; | 697 | struct div_result res; |
674 | u64 scale; | 698 | u64 scale, x; |
675 | unsigned shift; | 699 | unsigned shift; |
676 | 700 | ||
677 | if (ppc_md.time_init != NULL) | 701 | if (ppc_md.time_init != NULL) |
@@ -693,11 +717,42 @@ void __init time_init(void) | |||
693 | } | 717 | } |
694 | 718 | ||
695 | tb_ticks_per_jiffy = ppc_tb_freq / HZ; | 719 | tb_ticks_per_jiffy = ppc_tb_freq / HZ; |
696 | tb_ticks_per_sec = tb_ticks_per_jiffy * HZ; | 720 | tb_ticks_per_sec = ppc_tb_freq; |
697 | tb_ticks_per_usec = ppc_tb_freq / 1000000; | 721 | tb_ticks_per_usec = ppc_tb_freq / 1000000; |
698 | tb_to_us = mulhwu_scale_factor(ppc_tb_freq, 1000000); | 722 | tb_to_us = mulhwu_scale_factor(ppc_tb_freq, 1000000); |
699 | div128_by_32(1024*1024, 0, tb_ticks_per_sec, &res); | 723 | |
700 | tb_to_xs = res.result_low; | 724 | /* |
725 | * Calculate the length of each tick in ns. It will not be | ||
726 | * exactly 1e9/HZ unless ppc_tb_freq is divisible by HZ. | ||
727 | * We compute 1e9 * tb_ticks_per_jiffy / ppc_tb_freq, | ||
728 | * rounded up. | ||
729 | */ | ||
730 | x = (u64) NSEC_PER_SEC * tb_ticks_per_jiffy + ppc_tb_freq - 1; | ||
731 | do_div(x, ppc_tb_freq); | ||
732 | tick_nsec = x; | ||
733 | last_tick_len = x << TICKLEN_SCALE; | ||
734 | |||
735 | /* | ||
736 | * Compute ticklen_to_xs, which is a factor which gets multiplied | ||
737 | * by (last_tick_len << TICKLEN_SHIFT) to get a tb_to_xs value. | ||
738 | * It is computed as: | ||
739 | * ticklen_to_xs = 2^N / (tb_ticks_per_jiffy * 1e9) | ||
740 | * where N = 64 + 20 - TICKLEN_SCALE - TICKLEN_SHIFT | ||
741 | * which turns out to be N = 51 - SHIFT_HZ. | ||
742 | * This gives the result as a 0.64 fixed-point fraction. | ||
743 | * That value is reduced by an offset amounting to 1 xsec per | ||
744 | * 2^31 timebase ticks to avoid problems with time going backwards | ||
745 | * by 1 xsec when we do timer_recalc_offset due to losing the | ||
746 | * fractional xsec. That offset is equal to ppc_tb_freq/2^51 | ||
747 | * since there are 2^20 xsec in a second. | ||
748 | */ | ||
749 | div128_by_32((1ULL << 51) - ppc_tb_freq, 0, | ||
750 | tb_ticks_per_jiffy << SHIFT_HZ, &res); | ||
751 | div128_by_32(res.result_high, res.result_low, NSEC_PER_SEC, &res); | ||
752 | ticklen_to_xs = res.result_low; | ||
753 | |||
754 | /* Compute tb_to_xs from tick_nsec */ | ||
755 | tb_to_xs = mulhdu(last_tick_len << TICKLEN_SHIFT, ticklen_to_xs); | ||
701 | 756 | ||
702 | /* | 757 | /* |
703 | * Compute scale factor for sched_clock. | 758 | * Compute scale factor for sched_clock. |
@@ -724,6 +779,14 @@ void __init time_init(void) | |||
724 | tm = get_boot_time(); | 779 | tm = get_boot_time(); |
725 | 780 | ||
726 | write_seqlock_irqsave(&xtime_lock, flags); | 781 | write_seqlock_irqsave(&xtime_lock, flags); |
782 | |||
783 | /* If platform provided a timezone (pmac), we correct the time */ | ||
784 | if (timezone_offset) { | ||
785 | sys_tz.tz_minuteswest = -timezone_offset / 60; | ||
786 | sys_tz.tz_dsttime = 0; | ||
787 | tm -= timezone_offset; | ||
788 | } | ||
789 | |||
727 | xtime.tv_sec = tm; | 790 | xtime.tv_sec = tm; |
728 | xtime.tv_nsec = 0; | 791 | xtime.tv_nsec = 0; |
729 | do_gtod.varp = &do_gtod.vars[0]; | 792 | do_gtod.varp = &do_gtod.vars[0]; |
@@ -738,18 +801,11 @@ void __init time_init(void) | |||
738 | vdso_data->tb_orig_stamp = tb_last_jiffy; | 801 | vdso_data->tb_orig_stamp = tb_last_jiffy; |
739 | vdso_data->tb_update_count = 0; | 802 | vdso_data->tb_update_count = 0; |
740 | vdso_data->tb_ticks_per_sec = tb_ticks_per_sec; | 803 | vdso_data->tb_ticks_per_sec = tb_ticks_per_sec; |
741 | vdso_data->stamp_xsec = xtime.tv_sec * XSEC_PER_SEC; | 804 | vdso_data->stamp_xsec = (u64) xtime.tv_sec * XSEC_PER_SEC; |
742 | vdso_data->tb_to_xs = tb_to_xs; | 805 | vdso_data->tb_to_xs = tb_to_xs; |
743 | 806 | ||
744 | time_freq = 0; | 807 | time_freq = 0; |
745 | 808 | ||
746 | /* If platform provided a timezone (pmac), we correct the time */ | ||
747 | if (timezone_offset) { | ||
748 | sys_tz.tz_minuteswest = -timezone_offset / 60; | ||
749 | sys_tz.tz_dsttime = 0; | ||
750 | xtime.tv_sec -= timezone_offset; | ||
751 | } | ||
752 | |||
753 | last_rtc_update = xtime.tv_sec; | 809 | last_rtc_update = xtime.tv_sec; |
754 | set_normalized_timespec(&wall_to_monotonic, | 810 | set_normalized_timespec(&wall_to_monotonic, |
755 | -xtime.tv_sec, -xtime.tv_nsec); | 811 | -xtime.tv_sec, -xtime.tv_nsec); |
@@ -759,126 +815,6 @@ void __init time_init(void) | |||
759 | set_dec(tb_ticks_per_jiffy); | 815 | set_dec(tb_ticks_per_jiffy); |
760 | } | 816 | } |
761 | 817 | ||
762 | /* | ||
763 | * After adjtimex is called, adjust the conversion of tb ticks | ||
764 | * to microseconds to keep do_gettimeofday synchronized | ||
765 | * with ntpd. | ||
766 | * | ||
767 | * Use the time_adjust, time_freq and time_offset computed by adjtimex to | ||
768 | * adjust the frequency. | ||
769 | */ | ||
770 | |||
771 | /* #define DEBUG_PPC_ADJTIMEX 1 */ | ||
772 | |||
773 | void ppc_adjtimex(void) | ||
774 | { | ||
775 | #ifdef CONFIG_PPC64 | ||
776 | unsigned long den, new_tb_ticks_per_sec, tb_ticks, old_xsec, | ||
777 | new_tb_to_xs, new_xsec, new_stamp_xsec; | ||
778 | unsigned long tb_ticks_per_sec_delta; | ||
779 | long delta_freq, ltemp; | ||
780 | struct div_result divres; | ||
781 | unsigned long flags; | ||
782 | long singleshot_ppm = 0; | ||
783 | |||
784 | /* | ||
785 | * Compute parts per million frequency adjustment to | ||
786 | * accomplish the time adjustment implied by time_offset to be | ||
787 | * applied over the elapsed time indicated by time_constant. | ||
788 | * Use SHIFT_USEC to get it into the same units as | ||
789 | * time_freq. | ||
790 | */ | ||
791 | if ( time_offset < 0 ) { | ||
792 | ltemp = -time_offset; | ||
793 | ltemp <<= SHIFT_USEC - SHIFT_UPDATE; | ||
794 | ltemp >>= SHIFT_KG + time_constant; | ||
795 | ltemp = -ltemp; | ||
796 | } else { | ||
797 | ltemp = time_offset; | ||
798 | ltemp <<= SHIFT_USEC - SHIFT_UPDATE; | ||
799 | ltemp >>= SHIFT_KG + time_constant; | ||
800 | } | ||
801 | |||
802 | /* If there is a single shot time adjustment in progress */ | ||
803 | if ( time_adjust ) { | ||
804 | #ifdef DEBUG_PPC_ADJTIMEX | ||
805 | printk("ppc_adjtimex: "); | ||
806 | if ( adjusting_time == 0 ) | ||
807 | printk("starting "); | ||
808 | printk("single shot time_adjust = %ld\n", time_adjust); | ||
809 | #endif | ||
810 | |||
811 | adjusting_time = 1; | ||
812 | |||
813 | /* | ||
814 | * Compute parts per million frequency adjustment | ||
815 | * to match time_adjust | ||
816 | */ | ||
817 | singleshot_ppm = tickadj * HZ; | ||
818 | /* | ||
819 | * The adjustment should be tickadj*HZ to match the code in | ||
820 | * linux/kernel/timer.c, but experiments show that this is too | ||
821 | * large. 3/4 of tickadj*HZ seems about right | ||
822 | */ | ||
823 | singleshot_ppm -= singleshot_ppm / 4; | ||
824 | /* Use SHIFT_USEC to get it into the same units as time_freq */ | ||
825 | singleshot_ppm <<= SHIFT_USEC; | ||
826 | if ( time_adjust < 0 ) | ||
827 | singleshot_ppm = -singleshot_ppm; | ||
828 | } | ||
829 | else { | ||
830 | #ifdef DEBUG_PPC_ADJTIMEX | ||
831 | if ( adjusting_time ) | ||
832 | printk("ppc_adjtimex: ending single shot time_adjust\n"); | ||
833 | #endif | ||
834 | adjusting_time = 0; | ||
835 | } | ||
836 | |||
837 | /* Add up all of the frequency adjustments */ | ||
838 | delta_freq = time_freq + ltemp + singleshot_ppm; | ||
839 | |||
840 | /* | ||
841 | * Compute a new value for tb_ticks_per_sec based on | ||
842 | * the frequency adjustment | ||
843 | */ | ||
844 | den = 1000000 * (1 << (SHIFT_USEC - 8)); | ||
845 | if ( delta_freq < 0 ) { | ||
846 | tb_ticks_per_sec_delta = ( tb_ticks_per_sec * ( (-delta_freq) >> (SHIFT_USEC - 8))) / den; | ||
847 | new_tb_ticks_per_sec = tb_ticks_per_sec + tb_ticks_per_sec_delta; | ||
848 | } | ||
849 | else { | ||
850 | tb_ticks_per_sec_delta = ( tb_ticks_per_sec * ( delta_freq >> (SHIFT_USEC - 8))) / den; | ||
851 | new_tb_ticks_per_sec = tb_ticks_per_sec - tb_ticks_per_sec_delta; | ||
852 | } | ||
853 | |||
854 | #ifdef DEBUG_PPC_ADJTIMEX | ||
855 | printk("ppc_adjtimex: ltemp = %ld, time_freq = %ld, singleshot_ppm = %ld\n", ltemp, time_freq, singleshot_ppm); | ||
856 | printk("ppc_adjtimex: tb_ticks_per_sec - base = %ld new = %ld\n", tb_ticks_per_sec, new_tb_ticks_per_sec); | ||
857 | #endif | ||
858 | |||
859 | /* | ||
860 | * Compute a new value of tb_to_xs (used to convert tb to | ||
861 | * microseconds) and a new value of stamp_xsec which is the | ||
862 | * time (in 1/2^20 second units) corresponding to | ||
863 | * tb_orig_stamp. This new value of stamp_xsec compensates | ||
864 | * for the change in frequency (implied by the new tb_to_xs) | ||
865 | * which guarantees that the current time remains the same. | ||
866 | */ | ||
867 | write_seqlock_irqsave( &xtime_lock, flags ); | ||
868 | tb_ticks = get_tb() - do_gtod.varp->tb_orig_stamp; | ||
869 | div128_by_32(1024*1024, 0, new_tb_ticks_per_sec, &divres); | ||
870 | new_tb_to_xs = divres.result_low; | ||
871 | new_xsec = mulhdu(tb_ticks, new_tb_to_xs); | ||
872 | |||
873 | old_xsec = mulhdu(tb_ticks, do_gtod.varp->tb_to_xs); | ||
874 | new_stamp_xsec = do_gtod.varp->stamp_xsec + old_xsec - new_xsec; | ||
875 | |||
876 | update_gtod(do_gtod.varp->tb_orig_stamp, new_stamp_xsec, new_tb_to_xs); | ||
877 | |||
878 | write_sequnlock_irqrestore( &xtime_lock, flags ); | ||
879 | #endif /* CONFIG_PPC64 */ | ||
880 | } | ||
881 | |||
882 | 818 | ||
883 | #define FEBRUARY 2 | 819 | #define FEBRUARY 2 |
884 | #define STARTOFTIME 1970 | 820 | #define STARTOFTIME 1970 |
diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c index 7509aa6474f2..98660aedeeb7 100644 --- a/arch/powerpc/kernel/traps.c +++ b/arch/powerpc/kernel/traps.c | |||
@@ -814,6 +814,8 @@ void __kprobes program_check_exception(struct pt_regs *regs) | |||
814 | return; | 814 | return; |
815 | } | 815 | } |
816 | 816 | ||
817 | local_irq_enable(); | ||
818 | |||
817 | /* Try to emulate it if we should. */ | 819 | /* Try to emulate it if we should. */ |
818 | if (reason & (REASON_ILLEGAL | REASON_PRIVILEGED)) { | 820 | if (reason & (REASON_ILLEGAL | REASON_PRIVILEGED)) { |
819 | switch (emulate_instruction(regs)) { | 821 | switch (emulate_instruction(regs)) { |
diff --git a/arch/powerpc/kernel/udbg_16550.c b/arch/powerpc/kernel/udbg_16550.c index 2da65a9c93f6..5d29dcca523c 100644 --- a/arch/powerpc/kernel/udbg_16550.c +++ b/arch/powerpc/kernel/udbg_16550.c | |||
@@ -144,7 +144,7 @@ unsigned int udbg_probe_uart_speed(void __iomem *comport, unsigned int clock) | |||
144 | } | 144 | } |
145 | 145 | ||
146 | #ifdef CONFIG_PPC_MAPLE | 146 | #ifdef CONFIG_PPC_MAPLE |
147 | void udbg_maple_real_putc(unsigned char c) | 147 | void udbg_maple_real_putc(char c) |
148 | { | 148 | { |
149 | if (udbg_comport) { | 149 | if (udbg_comport) { |
150 | while ((real_readb(&udbg_comport->lsr) & LSR_THRE) == 0) | 150 | while ((real_readb(&udbg_comport->lsr) & LSR_THRE) == 0) |
diff --git a/arch/powerpc/kernel/vdso.c b/arch/powerpc/kernel/vdso.c index f0c47dab0903..04f7df39ffbb 100644 --- a/arch/powerpc/kernel/vdso.c +++ b/arch/powerpc/kernel/vdso.c | |||
@@ -182,8 +182,8 @@ static struct page * vdso_vma_nopage(struct vm_area_struct * vma, | |||
182 | unsigned long offset = address - vma->vm_start; | 182 | unsigned long offset = address - vma->vm_start; |
183 | struct page *pg; | 183 | struct page *pg; |
184 | #ifdef CONFIG_PPC64 | 184 | #ifdef CONFIG_PPC64 |
185 | void *vbase = test_thread_flag(TIF_32BIT) ? | 185 | void *vbase = (vma->vm_mm->task_size > TASK_SIZE_USER32) ? |
186 | vdso32_kbase : vdso64_kbase; | 186 | vdso64_kbase : vdso32_kbase; |
187 | #else | 187 | #else |
188 | void *vbase = vdso32_kbase; | 188 | void *vbase = vdso32_kbase; |
189 | #endif | 189 | #endif |
diff --git a/arch/powerpc/kernel/vdso64/gettimeofday.S b/arch/powerpc/kernel/vdso64/gettimeofday.S index ccaeda5136d1..4ee871f1cadb 100644 --- a/arch/powerpc/kernel/vdso64/gettimeofday.S +++ b/arch/powerpc/kernel/vdso64/gettimeofday.S | |||
@@ -225,9 +225,9 @@ V_FUNCTION_BEGIN(__do_get_xsec) | |||
225 | .cfi_startproc | 225 | .cfi_startproc |
226 | /* check for update count & load values */ | 226 | /* check for update count & load values */ |
227 | 1: ld r8,CFG_TB_UPDATE_COUNT(r3) | 227 | 1: ld r8,CFG_TB_UPDATE_COUNT(r3) |
228 | andi. r0,r4,1 /* pending update ? loop */ | 228 | andi. r0,r8,1 /* pending update ? loop */ |
229 | bne- 1b | 229 | bne- 1b |
230 | xor r0,r4,r4 /* create dependency */ | 230 | xor r0,r8,r8 /* create dependency */ |
231 | add r3,r3,r0 | 231 | add r3,r3,r0 |
232 | 232 | ||
233 | /* Get TB & offset it */ | 233 | /* Get TB & offset it */ |
diff --git a/arch/powerpc/mm/hash_native_64.c b/arch/powerpc/mm/hash_native_64.c index d96bcfe4c6f6..33654d1b1b43 100644 --- a/arch/powerpc/mm/hash_native_64.c +++ b/arch/powerpc/mm/hash_native_64.c | |||
@@ -403,12 +403,17 @@ static void native_hpte_clear(void) | |||
403 | */ | 403 | */ |
404 | hpte_v = hptep->v; | 404 | hpte_v = hptep->v; |
405 | 405 | ||
406 | /* | ||
407 | * Call __tlbie() here rather than tlbie() since we | ||
408 | * already hold the native_tlbie_lock. | ||
409 | */ | ||
406 | if (hpte_v & HPTE_V_VALID) { | 410 | if (hpte_v & HPTE_V_VALID) { |
407 | hptep->v = 0; | 411 | hptep->v = 0; |
408 | tlbie(slot2va(hpte_v, slot), MMU_PAGE_4K, 0); | 412 | __tlbie(slot2va(hpte_v, slot), MMU_PAGE_4K); |
409 | } | 413 | } |
410 | } | 414 | } |
411 | 415 | ||
416 | asm volatile("eieio; tlbsync; ptesync":::"memory"); | ||
412 | spin_unlock(&native_tlbie_lock); | 417 | spin_unlock(&native_tlbie_lock); |
413 | local_irq_restore(flags); | 418 | local_irq_restore(flags); |
414 | } | 419 | } |
diff --git a/arch/powerpc/mm/hash_utils_64.c b/arch/powerpc/mm/hash_utils_64.c index 149351a84b94..e9d589eefc14 100644 --- a/arch/powerpc/mm/hash_utils_64.c +++ b/arch/powerpc/mm/hash_utils_64.c | |||
@@ -88,6 +88,7 @@ static unsigned long _SDR1; | |||
88 | struct mmu_psize_def mmu_psize_defs[MMU_PAGE_COUNT]; | 88 | struct mmu_psize_def mmu_psize_defs[MMU_PAGE_COUNT]; |
89 | 89 | ||
90 | hpte_t *htab_address; | 90 | hpte_t *htab_address; |
91 | unsigned long htab_size_bytes; | ||
91 | unsigned long htab_hash_mask; | 92 | unsigned long htab_hash_mask; |
92 | int mmu_linear_psize = MMU_PAGE_4K; | 93 | int mmu_linear_psize = MMU_PAGE_4K; |
93 | int mmu_virtual_psize = MMU_PAGE_4K; | 94 | int mmu_virtual_psize = MMU_PAGE_4K; |
@@ -168,7 +169,7 @@ int htab_bolt_mapping(unsigned long vstart, unsigned long vend, | |||
168 | #ifdef CONFIG_PPC_ISERIES | 169 | #ifdef CONFIG_PPC_ISERIES |
169 | if (_machine == PLATFORM_ISERIES_LPAR) | 170 | if (_machine == PLATFORM_ISERIES_LPAR) |
170 | ret = iSeries_hpte_insert(hpteg, va, | 171 | ret = iSeries_hpte_insert(hpteg, va, |
171 | virt_to_abs(paddr), | 172 | __pa(vaddr), |
172 | tmp_mode, | 173 | tmp_mode, |
173 | HPTE_V_BOLTED, | 174 | HPTE_V_BOLTED, |
174 | psize); | 175 | psize); |
@@ -399,7 +400,7 @@ void create_section_mapping(unsigned long start, unsigned long end) | |||
399 | 400 | ||
400 | void __init htab_initialize(void) | 401 | void __init htab_initialize(void) |
401 | { | 402 | { |
402 | unsigned long table, htab_size_bytes; | 403 | unsigned long table; |
403 | unsigned long pteg_count; | 404 | unsigned long pteg_count; |
404 | unsigned long mode_rw; | 405 | unsigned long mode_rw; |
405 | unsigned long base = 0, size = 0; | 406 | unsigned long base = 0, size = 0; |
diff --git a/arch/powerpc/mm/lmb.c b/arch/powerpc/mm/lmb.c index 9584608fd768..bbe3eac918e8 100644 --- a/arch/powerpc/mm/lmb.c +++ b/arch/powerpc/mm/lmb.c | |||
@@ -197,6 +197,8 @@ long __init lmb_reserve(unsigned long base, unsigned long size) | |||
197 | { | 197 | { |
198 | struct lmb_region *_rgn = &(lmb.reserved); | 198 | struct lmb_region *_rgn = &(lmb.reserved); |
199 | 199 | ||
200 | BUG_ON(0 == size); | ||
201 | |||
200 | return lmb_add_region(_rgn, base, size); | 202 | return lmb_add_region(_rgn, base, size); |
201 | } | 203 | } |
202 | 204 | ||
@@ -227,6 +229,8 @@ unsigned long __init lmb_alloc_base(unsigned long size, unsigned long align, | |||
227 | long i, j; | 229 | long i, j; |
228 | unsigned long base = 0; | 230 | unsigned long base = 0; |
229 | 231 | ||
232 | BUG_ON(0 == size); | ||
233 | |||
230 | #ifdef CONFIG_PPC32 | 234 | #ifdef CONFIG_PPC32 |
231 | /* On 32-bit, make sure we allocate lowmem */ | 235 | /* On 32-bit, make sure we allocate lowmem */ |
232 | if (max_addr == LMB_ALLOC_ANYWHERE) | 236 | if (max_addr == LMB_ALLOC_ANYWHERE) |
diff --git a/arch/powerpc/mm/mem.c b/arch/powerpc/mm/mem.c index 15aac0d78dfa..550517c2dd42 100644 --- a/arch/powerpc/mm/mem.c +++ b/arch/powerpc/mm/mem.c | |||
@@ -435,17 +435,12 @@ void clear_user_page(void *page, unsigned long vaddr, struct page *pg) | |||
435 | { | 435 | { |
436 | clear_page(page); | 436 | clear_page(page); |
437 | 437 | ||
438 | if (cpu_has_feature(CPU_FTR_COHERENT_ICACHE)) | ||
439 | return; | ||
440 | /* | 438 | /* |
441 | * We shouldnt have to do this, but some versions of glibc | 439 | * We shouldnt have to do this, but some versions of glibc |
442 | * require it (ld.so assumes zero filled pages are icache clean) | 440 | * require it (ld.so assumes zero filled pages are icache clean) |
443 | * - Anton | 441 | * - Anton |
444 | */ | 442 | */ |
445 | 443 | flush_dcache_page(pg); | |
446 | /* avoid an atomic op if possible */ | ||
447 | if (test_bit(PG_arch_1, &pg->flags)) | ||
448 | clear_bit(PG_arch_1, &pg->flags); | ||
449 | } | 444 | } |
450 | EXPORT_SYMBOL(clear_user_page); | 445 | EXPORT_SYMBOL(clear_user_page); |
451 | 446 | ||
@@ -469,12 +464,7 @@ void copy_user_page(void *vto, void *vfrom, unsigned long vaddr, | |||
469 | return; | 464 | return; |
470 | #endif | 465 | #endif |
471 | 466 | ||
472 | if (cpu_has_feature(CPU_FTR_COHERENT_ICACHE)) | 467 | flush_dcache_page(pg); |
473 | return; | ||
474 | |||
475 | /* avoid an atomic op if possible */ | ||
476 | if (test_bit(PG_arch_1, &pg->flags)) | ||
477 | clear_bit(PG_arch_1, &pg->flags); | ||
478 | } | 468 | } |
479 | 469 | ||
480 | void flush_icache_user_range(struct vm_area_struct *vma, struct page *page, | 470 | void flush_icache_user_range(struct vm_area_struct *vma, struct page *page, |
diff --git a/arch/powerpc/mm/pgtable_32.c b/arch/powerpc/mm/pgtable_32.c index f4e5ac122615..d296eb6b4545 100644 --- a/arch/powerpc/mm/pgtable_32.c +++ b/arch/powerpc/mm/pgtable_32.c | |||
@@ -37,6 +37,7 @@ | |||
37 | 37 | ||
38 | unsigned long ioremap_base; | 38 | unsigned long ioremap_base; |
39 | unsigned long ioremap_bot; | 39 | unsigned long ioremap_bot; |
40 | EXPORT_SYMBOL(ioremap_bot); /* aka VMALLOC_END */ | ||
40 | int io_bat_index; | 41 | int io_bat_index; |
41 | 42 | ||
42 | #if defined(CONFIG_6xx) || defined(CONFIG_POWER3) | 43 | #if defined(CONFIG_6xx) || defined(CONFIG_POWER3) |
@@ -153,6 +154,7 @@ ioremap64(unsigned long long addr, unsigned long size) | |||
153 | { | 154 | { |
154 | return __ioremap(addr, size, _PAGE_NO_CACHE); | 155 | return __ioremap(addr, size, _PAGE_NO_CACHE); |
155 | } | 156 | } |
157 | EXPORT_SYMBOL(ioremap64); | ||
156 | 158 | ||
157 | void __iomem * | 159 | void __iomem * |
158 | ioremap(phys_addr_t addr, unsigned long size) | 160 | ioremap(phys_addr_t addr, unsigned long size) |
@@ -162,6 +164,7 @@ ioremap(phys_addr_t addr, unsigned long size) | |||
162 | return ioremap64(addr64, size); | 164 | return ioremap64(addr64, size); |
163 | } | 165 | } |
164 | #endif /* CONFIG_PHYS_64BIT */ | 166 | #endif /* CONFIG_PHYS_64BIT */ |
167 | EXPORT_SYMBOL(ioremap); | ||
165 | 168 | ||
166 | void __iomem * | 169 | void __iomem * |
167 | __ioremap(phys_addr_t addr, unsigned long size, unsigned long flags) | 170 | __ioremap(phys_addr_t addr, unsigned long size, unsigned long flags) |
@@ -247,6 +250,7 @@ __ioremap(phys_addr_t addr, unsigned long size, unsigned long flags) | |||
247 | out: | 250 | out: |
248 | return (void __iomem *) (v + ((unsigned long)addr & ~PAGE_MASK)); | 251 | return (void __iomem *) (v + ((unsigned long)addr & ~PAGE_MASK)); |
249 | } | 252 | } |
253 | EXPORT_SYMBOL(__ioremap); | ||
250 | 254 | ||
251 | void iounmap(volatile void __iomem *addr) | 255 | void iounmap(volatile void __iomem *addr) |
252 | { | 256 | { |
@@ -259,6 +263,7 @@ void iounmap(volatile void __iomem *addr) | |||
259 | if (addr > high_memory && (unsigned long) addr < ioremap_bot) | 263 | if (addr > high_memory && (unsigned long) addr < ioremap_bot) |
260 | vunmap((void *) (PAGE_MASK & (unsigned long)addr)); | 264 | vunmap((void *) (PAGE_MASK & (unsigned long)addr)); |
261 | } | 265 | } |
266 | EXPORT_SYMBOL(iounmap); | ||
262 | 267 | ||
263 | void __iomem *ioport_map(unsigned long port, unsigned int len) | 268 | void __iomem *ioport_map(unsigned long port, unsigned int len) |
264 | { | 269 | { |
diff --git a/arch/powerpc/oprofile/Kconfig b/arch/powerpc/oprofile/Kconfig index eb2dece76a54..d03c0e5ca870 100644 --- a/arch/powerpc/oprofile/Kconfig +++ b/arch/powerpc/oprofile/Kconfig | |||
@@ -1,4 +1,5 @@ | |||
1 | config PROFILING | 1 | config PROFILING |
2 | depends on !PPC_ISERIES | ||
2 | bool "Profiling support (EXPERIMENTAL)" | 3 | bool "Profiling support (EXPERIMENTAL)" |
3 | help | 4 | help |
4 | Say Y here to enable the extended profiling support mechanisms used | 5 | Say Y here to enable the extended profiling support mechanisms used |
diff --git a/arch/powerpc/platforms/cell/Makefile b/arch/powerpc/platforms/cell/Makefile index 16031b565be4..3b998a393e3f 100644 --- a/arch/powerpc/platforms/cell/Makefile +++ b/arch/powerpc/platforms/cell/Makefile | |||
@@ -2,7 +2,7 @@ obj-y += interrupt.o iommu.o setup.o spider-pic.o | |||
2 | obj-y += pervasive.o | 2 | obj-y += pervasive.o |
3 | 3 | ||
4 | obj-$(CONFIG_SMP) += smp.o | 4 | obj-$(CONFIG_SMP) += smp.o |
5 | obj-$(CONFIG_SPU_FS) += spufs/ spu-base.o | 5 | obj-$(CONFIG_SPU_FS) += spu-base.o spufs/ |
6 | 6 | ||
7 | spu-base-y += spu_base.o spu_priv1.o | 7 | spu-base-y += spu_base.o spu_priv1.o |
8 | 8 | ||
diff --git a/arch/powerpc/platforms/chrp/chrp.h b/arch/powerpc/platforms/chrp/chrp.h index 3a2057fa314a..814f54742e0f 100644 --- a/arch/powerpc/platforms/chrp/chrp.h +++ b/arch/powerpc/platforms/chrp/chrp.h | |||
@@ -5,7 +5,6 @@ | |||
5 | extern void chrp_nvram_init(void); | 5 | extern void chrp_nvram_init(void); |
6 | extern void chrp_get_rtc_time(struct rtc_time *); | 6 | extern void chrp_get_rtc_time(struct rtc_time *); |
7 | extern int chrp_set_rtc_time(struct rtc_time *); | 7 | extern int chrp_set_rtc_time(struct rtc_time *); |
8 | extern void chrp_calibrate_decr(void); | ||
9 | extern long chrp_time_init(void); | 8 | extern long chrp_time_init(void); |
10 | 9 | ||
11 | extern void chrp_find_bridges(void); | 10 | extern void chrp_find_bridges(void); |
diff --git a/arch/powerpc/platforms/chrp/pci.c b/arch/powerpc/platforms/chrp/pci.c index 00c52f27ef4f..8ef279ad36ad 100644 --- a/arch/powerpc/platforms/chrp/pci.c +++ b/arch/powerpc/platforms/chrp/pci.c | |||
@@ -204,9 +204,11 @@ static void __init setup_peg2(struct pci_controller *hose, struct device_node *d | |||
204 | struct device_node *root = find_path_device("/"); | 204 | struct device_node *root = find_path_device("/"); |
205 | struct device_node *rtas; | 205 | struct device_node *rtas; |
206 | 206 | ||
207 | of_node_get(root); | ||
207 | rtas = of_find_node_by_name (root, "rtas"); | 208 | rtas = of_find_node_by_name (root, "rtas"); |
208 | if (rtas) { | 209 | if (rtas) { |
209 | hose->ops = &rtas_pci_ops; | 210 | hose->ops = &rtas_pci_ops; |
211 | of_node_put(rtas); | ||
210 | } else { | 212 | } else { |
211 | printk ("RTAS supporting Pegasos OF not found, please upgrade" | 213 | printk ("RTAS supporting Pegasos OF not found, please upgrade" |
212 | " your firmware\n"); | 214 | " your firmware\n"); |
diff --git a/arch/powerpc/platforms/chrp/setup.c b/arch/powerpc/platforms/chrp/setup.c index 2dc87aa5962f..e1fadbf49150 100644 --- a/arch/powerpc/platforms/chrp/setup.c +++ b/arch/powerpc/platforms/chrp/setup.c | |||
@@ -506,7 +506,7 @@ void __init chrp_init(void) | |||
506 | ppc_md.halt = rtas_halt; | 506 | ppc_md.halt = rtas_halt; |
507 | 507 | ||
508 | ppc_md.time_init = chrp_time_init; | 508 | ppc_md.time_init = chrp_time_init; |
509 | ppc_md.calibrate_decr = chrp_calibrate_decr; | 509 | ppc_md.calibrate_decr = generic_calibrate_decr; |
510 | 510 | ||
511 | /* this may get overridden with rtas routines later... */ | 511 | /* this may get overridden with rtas routines later... */ |
512 | ppc_md.set_rtc_time = chrp_set_rtc_time; | 512 | ppc_md.set_rtc_time = chrp_set_rtc_time; |
diff --git a/arch/powerpc/platforms/chrp/time.c b/arch/powerpc/platforms/chrp/time.c index 36a0f97bb7b1..78df2e7ca88a 100644 --- a/arch/powerpc/platforms/chrp/time.c +++ b/arch/powerpc/platforms/chrp/time.c | |||
@@ -167,24 +167,3 @@ void chrp_get_rtc_time(struct rtc_time *tm) | |||
167 | tm->tm_mon = mon; | 167 | tm->tm_mon = mon; |
168 | tm->tm_year = year; | 168 | tm->tm_year = year; |
169 | } | 169 | } |
170 | |||
171 | |||
172 | void __init chrp_calibrate_decr(void) | ||
173 | { | ||
174 | struct device_node *cpu; | ||
175 | unsigned int freq, *fp; | ||
176 | |||
177 | /* | ||
178 | * The cpu node should have a timebase-frequency property | ||
179 | * to tell us the rate at which the decrementer counts. | ||
180 | */ | ||
181 | freq = 16666000; /* hardcoded default */ | ||
182 | cpu = find_type_devices("cpu"); | ||
183 | if (cpu != 0) { | ||
184 | fp = (unsigned int *) | ||
185 | get_property(cpu, "timebase-frequency", NULL); | ||
186 | if (fp != 0) | ||
187 | freq = *fp; | ||
188 | } | ||
189 | ppc_tb_freq = freq; | ||
190 | } | ||
diff --git a/arch/powerpc/platforms/iseries/lpevents.c b/arch/powerpc/platforms/iseries/lpevents.c index 0b885300d1d1..8ca7b9396355 100644 --- a/arch/powerpc/platforms/iseries/lpevents.c +++ b/arch/powerpc/platforms/iseries/lpevents.c | |||
@@ -184,6 +184,8 @@ void setup_hvlpevent_queue(void) | |||
184 | { | 184 | { |
185 | void *eventStack; | 185 | void *eventStack; |
186 | 186 | ||
187 | spin_lock_init(&hvlpevent_queue.lock); | ||
188 | |||
187 | /* Allocate a page for the Event Stack. */ | 189 | /* Allocate a page for the Event Stack. */ |
188 | eventStack = alloc_bootmem_pages(LpEventStackSize); | 190 | eventStack = alloc_bootmem_pages(LpEventStackSize); |
189 | memset(eventStack, 0, LpEventStackSize); | 191 | memset(eventStack, 0, LpEventStackSize); |
diff --git a/arch/powerpc/platforms/iseries/setup.c b/arch/powerpc/platforms/iseries/setup.c index 3f8790146b00..3ecc4a652d82 100644 --- a/arch/powerpc/platforms/iseries/setup.c +++ b/arch/powerpc/platforms/iseries/setup.c | |||
@@ -648,6 +648,7 @@ static void yield_shared_processor(void) | |||
648 | * here and let the timer_interrupt code sort out the actual time. | 648 | * here and let the timer_interrupt code sort out the actual time. |
649 | */ | 649 | */ |
650 | get_lppaca()->int_dword.fields.decr_int = 1; | 650 | get_lppaca()->int_dword.fields.decr_int = 1; |
651 | ppc64_runlatch_on(); | ||
651 | process_iSeries_events(); | 652 | process_iSeries_events(); |
652 | } | 653 | } |
653 | 654 | ||
diff --git a/arch/powerpc/platforms/maple/pci.c b/arch/powerpc/platforms/maple/pci.c index 7d4099a34f92..85d6c93659cc 100644 --- a/arch/powerpc/platforms/maple/pci.c +++ b/arch/powerpc/platforms/maple/pci.c | |||
@@ -435,8 +435,8 @@ void __init maple_pci_init(void) | |||
435 | PCI_DN(np)->busno = 0xf0; | 435 | PCI_DN(np)->busno = 0xf0; |
436 | } | 436 | } |
437 | 437 | ||
438 | /* Tell pci.c to use the common resource allocation mecanism */ | 438 | /* Tell pci.c to not change any resource allocations. */ |
439 | pci_probe_only = 0; | 439 | pci_probe_only = 1; |
440 | 440 | ||
441 | /* Allow all IO */ | 441 | /* Allow all IO */ |
442 | io_page_mask = -1; | 442 | io_page_mask = -1; |
diff --git a/arch/powerpc/platforms/powermac/feature.c b/arch/powerpc/platforms/powermac/feature.c index 558dd0692092..bbe794891a20 100644 --- a/arch/powerpc/platforms/powermac/feature.c +++ b/arch/powerpc/platforms/powermac/feature.c | |||
@@ -1646,10 +1646,10 @@ static void intrepid_shutdown(struct macio_chip *macio, int sleep_mode) | |||
1646 | KL0_SCC_CELL_ENABLE); | 1646 | KL0_SCC_CELL_ENABLE); |
1647 | 1647 | ||
1648 | MACIO_BIC(KEYLARGO_FCR1, | 1648 | MACIO_BIC(KEYLARGO_FCR1, |
1649 | /*KL1_USB2_CELL_ENABLE |*/ | ||
1650 | KL1_I2S0_CELL_ENABLE | KL1_I2S0_CLK_ENABLE_BIT | | 1649 | KL1_I2S0_CELL_ENABLE | KL1_I2S0_CLK_ENABLE_BIT | |
1651 | KL1_I2S0_ENABLE | KL1_I2S1_CELL_ENABLE | | 1650 | KL1_I2S0_ENABLE | KL1_I2S1_CELL_ENABLE | |
1652 | KL1_I2S1_CLK_ENABLE_BIT | KL1_I2S1_ENABLE); | 1651 | KL1_I2S1_CLK_ENABLE_BIT | KL1_I2S1_ENABLE | |
1652 | KL1_EIDE0_ENABLE); | ||
1653 | if (pmac_mb.board_flags & PMAC_MB_MOBILE) | 1653 | if (pmac_mb.board_flags & PMAC_MB_MOBILE) |
1654 | MACIO_BIC(KEYLARGO_FCR1, KL1_UIDE_RESET_N); | 1654 | MACIO_BIC(KEYLARGO_FCR1, KL1_UIDE_RESET_N); |
1655 | 1655 | ||
@@ -2183,7 +2183,7 @@ static struct pmac_mb_def pmac_mb_defs[] = { | |||
2183 | }, | 2183 | }, |
2184 | { "PowerMac10,1", "Mac mini", | 2184 | { "PowerMac10,1", "Mac mini", |
2185 | PMAC_TYPE_UNKNOWN_INTREPID, intrepid_features, | 2185 | PMAC_TYPE_UNKNOWN_INTREPID, intrepid_features, |
2186 | PMAC_MB_MAY_SLEEP | PMAC_MB_HAS_FW_POWER, | 2186 | PMAC_MB_MAY_SLEEP, |
2187 | }, | 2187 | }, |
2188 | { "iMac,1", "iMac (first generation)", | 2188 | { "iMac,1", "iMac (first generation)", |
2189 | PMAC_TYPE_ORIG_IMAC, paddington_features, | 2189 | PMAC_TYPE_ORIG_IMAC, paddington_features, |
@@ -2295,11 +2295,11 @@ static struct pmac_mb_def pmac_mb_defs[] = { | |||
2295 | }, | 2295 | }, |
2296 | { "PowerBook5,8", "PowerBook G4 15\"", | 2296 | { "PowerBook5,8", "PowerBook G4 15\"", |
2297 | PMAC_TYPE_UNKNOWN_INTREPID, intrepid_features, | 2297 | PMAC_TYPE_UNKNOWN_INTREPID, intrepid_features, |
2298 | PMAC_MB_MAY_SLEEP | PMAC_MB_HAS_FW_POWER | PMAC_MB_MOBILE, | 2298 | PMAC_MB_MAY_SLEEP | PMAC_MB_MOBILE, |
2299 | }, | 2299 | }, |
2300 | { "PowerBook5,9", "PowerBook G4 17\"", | 2300 | { "PowerBook5,9", "PowerBook G4 17\"", |
2301 | PMAC_TYPE_UNKNOWN_INTREPID, intrepid_features, | 2301 | PMAC_TYPE_UNKNOWN_INTREPID, intrepid_features, |
2302 | PMAC_MB_MAY_SLEEP | PMAC_MB_HAS_FW_POWER | PMAC_MB_MOBILE, | 2302 | PMAC_MB_MAY_SLEEP | PMAC_MB_MOBILE, |
2303 | }, | 2303 | }, |
2304 | { "PowerBook6,1", "PowerBook G4 12\"", | 2304 | { "PowerBook6,1", "PowerBook G4 12\"", |
2305 | PMAC_TYPE_UNKNOWN_INTREPID, intrepid_features, | 2305 | PMAC_TYPE_UNKNOWN_INTREPID, intrepid_features, |
@@ -2491,9 +2491,7 @@ found: | |||
2491 | pmac_mb.model_id = PMAC_TYPE_COMET; | 2491 | pmac_mb.model_id = PMAC_TYPE_COMET; |
2492 | iounmap(mach_id_ptr); | 2492 | iounmap(mach_id_ptr); |
2493 | } | 2493 | } |
2494 | #endif /* CONFIG_POWER4 */ | ||
2495 | 2494 | ||
2496 | #ifdef CONFIG_6xx | ||
2497 | /* Set default value of powersave_nap on machines that support it. | 2495 | /* Set default value of powersave_nap on machines that support it. |
2498 | * It appears that uninorth rev 3 has a problem with it, we don't | 2496 | * It appears that uninorth rev 3 has a problem with it, we don't |
2499 | * enable it on those. In theory, the flush-on-lock property is | 2497 | * enable it on those. In theory, the flush-on-lock property is |
@@ -2522,10 +2520,11 @@ found: | |||
2522 | * NAP mode | 2520 | * NAP mode |
2523 | */ | 2521 | */ |
2524 | powersave_lowspeed = 1; | 2522 | powersave_lowspeed = 1; |
2525 | #endif /* CONFIG_6xx */ | 2523 | |
2526 | #ifdef CONFIG_POWER4 | 2524 | #else /* CONFIG_POWER4 */ |
2527 | powersave_nap = 1; | 2525 | powersave_nap = 1; |
2528 | #endif | 2526 | #endif /* CONFIG_POWER4 */ |
2527 | |||
2529 | /* Check for "mobile" machine */ | 2528 | /* Check for "mobile" machine */ |
2530 | if (model && (strncmp(model, "PowerBook", 9) == 0 | 2529 | if (model && (strncmp(model, "PowerBook", 9) == 0 |
2531 | || strncmp(model, "iBook", 5) == 0)) | 2530 | || strncmp(model, "iBook", 5) == 0)) |
diff --git a/arch/powerpc/platforms/powermac/low_i2c.c b/arch/powerpc/platforms/powermac/low_i2c.c index 535c802b369f..87eb6bb7f0e7 100644 --- a/arch/powerpc/platforms/powermac/low_i2c.c +++ b/arch/powerpc/platforms/powermac/low_i2c.c | |||
@@ -1052,8 +1052,7 @@ struct pmac_i2c_bus *pmac_i2c_adapter_to_bus(struct i2c_adapter *adapter) | |||
1052 | } | 1052 | } |
1053 | EXPORT_SYMBOL_GPL(pmac_i2c_adapter_to_bus); | 1053 | EXPORT_SYMBOL_GPL(pmac_i2c_adapter_to_bus); |
1054 | 1054 | ||
1055 | extern int pmac_i2c_match_adapter(struct device_node *dev, | 1055 | int pmac_i2c_match_adapter(struct device_node *dev, struct i2c_adapter *adapter) |
1056 | struct i2c_adapter *adapter) | ||
1057 | { | 1056 | { |
1058 | struct pmac_i2c_bus *bus = pmac_i2c_find_bus(dev); | 1057 | struct pmac_i2c_bus *bus = pmac_i2c_find_bus(dev); |
1059 | 1058 | ||
diff --git a/arch/powerpc/platforms/powermac/pci.c b/arch/powerpc/platforms/powermac/pci.c index f671ed253901..de3f30e6b333 100644 --- a/arch/powerpc/platforms/powermac/pci.c +++ b/arch/powerpc/platforms/powermac/pci.c | |||
@@ -136,14 +136,14 @@ static void __init fixup_bus_range(struct device_node *bridge) | |||
136 | |(((unsigned int)(off)) & 0xFCUL) \ | 136 | |(((unsigned int)(off)) & 0xFCUL) \ |
137 | |1UL) | 137 | |1UL) |
138 | 138 | ||
139 | static unsigned long macrisc_cfg_access(struct pci_controller* hose, | 139 | static volatile void __iomem *macrisc_cfg_access(struct pci_controller* hose, |
140 | u8 bus, u8 dev_fn, u8 offset) | 140 | u8 bus, u8 dev_fn, u8 offset) |
141 | { | 141 | { |
142 | unsigned int caddr; | 142 | unsigned int caddr; |
143 | 143 | ||
144 | if (bus == hose->first_busno) { | 144 | if (bus == hose->first_busno) { |
145 | if (dev_fn < (11 << 3)) | 145 | if (dev_fn < (11 << 3)) |
146 | return 0; | 146 | return NULL; |
147 | caddr = MACRISC_CFA0(dev_fn, offset); | 147 | caddr = MACRISC_CFA0(dev_fn, offset); |
148 | } else | 148 | } else |
149 | caddr = MACRISC_CFA1(bus, dev_fn, offset); | 149 | caddr = MACRISC_CFA1(bus, dev_fn, offset); |
@@ -154,14 +154,14 @@ static unsigned long macrisc_cfg_access(struct pci_controller* hose, | |||
154 | } while (in_le32(hose->cfg_addr) != caddr); | 154 | } while (in_le32(hose->cfg_addr) != caddr); |
155 | 155 | ||
156 | offset &= has_uninorth ? 0x07 : 0x03; | 156 | offset &= has_uninorth ? 0x07 : 0x03; |
157 | return ((unsigned long)hose->cfg_data) + offset; | 157 | return hose->cfg_data + offset; |
158 | } | 158 | } |
159 | 159 | ||
160 | static int macrisc_read_config(struct pci_bus *bus, unsigned int devfn, | 160 | static int macrisc_read_config(struct pci_bus *bus, unsigned int devfn, |
161 | int offset, int len, u32 *val) | 161 | int offset, int len, u32 *val) |
162 | { | 162 | { |
163 | struct pci_controller *hose; | 163 | struct pci_controller *hose; |
164 | unsigned long addr; | 164 | volatile void __iomem *addr; |
165 | 165 | ||
166 | hose = pci_bus_to_host(bus); | 166 | hose = pci_bus_to_host(bus); |
167 | if (hose == NULL) | 167 | if (hose == NULL) |
@@ -177,13 +177,13 @@ static int macrisc_read_config(struct pci_bus *bus, unsigned int devfn, | |||
177 | */ | 177 | */ |
178 | switch (len) { | 178 | switch (len) { |
179 | case 1: | 179 | case 1: |
180 | *val = in_8((u8 *)addr); | 180 | *val = in_8(addr); |
181 | break; | 181 | break; |
182 | case 2: | 182 | case 2: |
183 | *val = in_le16((u16 *)addr); | 183 | *val = in_le16(addr); |
184 | break; | 184 | break; |
185 | default: | 185 | default: |
186 | *val = in_le32((u32 *)addr); | 186 | *val = in_le32(addr); |
187 | break; | 187 | break; |
188 | } | 188 | } |
189 | return PCIBIOS_SUCCESSFUL; | 189 | return PCIBIOS_SUCCESSFUL; |
@@ -193,7 +193,7 @@ static int macrisc_write_config(struct pci_bus *bus, unsigned int devfn, | |||
193 | int offset, int len, u32 val) | 193 | int offset, int len, u32 val) |
194 | { | 194 | { |
195 | struct pci_controller *hose; | 195 | struct pci_controller *hose; |
196 | unsigned long addr; | 196 | volatile void __iomem *addr; |
197 | 197 | ||
198 | hose = pci_bus_to_host(bus); | 198 | hose = pci_bus_to_host(bus); |
199 | if (hose == NULL) | 199 | if (hose == NULL) |
@@ -209,16 +209,16 @@ static int macrisc_write_config(struct pci_bus *bus, unsigned int devfn, | |||
209 | */ | 209 | */ |
210 | switch (len) { | 210 | switch (len) { |
211 | case 1: | 211 | case 1: |
212 | out_8((u8 *)addr, val); | 212 | out_8(addr, val); |
213 | (void) in_8((u8 *)addr); | 213 | (void) in_8(addr); |
214 | break; | 214 | break; |
215 | case 2: | 215 | case 2: |
216 | out_le16((u16 *)addr, val); | 216 | out_le16(addr, val); |
217 | (void) in_le16((u16 *)addr); | 217 | (void) in_le16(addr); |
218 | break; | 218 | break; |
219 | default: | 219 | default: |
220 | out_le32((u32 *)addr, val); | 220 | out_le32(addr, val); |
221 | (void) in_le32((u32 *)addr); | 221 | (void) in_le32(addr); |
222 | break; | 222 | break; |
223 | } | 223 | } |
224 | return PCIBIOS_SUCCESSFUL; | 224 | return PCIBIOS_SUCCESSFUL; |
@@ -348,25 +348,23 @@ static int u3_ht_skip_device(struct pci_controller *hose, | |||
348 | + (((unsigned int)bus) << 16) \ | 348 | + (((unsigned int)bus) << 16) \ |
349 | + 0x01000000UL) | 349 | + 0x01000000UL) |
350 | 350 | ||
351 | static unsigned long u3_ht_cfg_access(struct pci_controller* hose, | 351 | static volatile void __iomem *u3_ht_cfg_access(struct pci_controller* hose, |
352 | u8 bus, u8 devfn, u8 offset) | 352 | u8 bus, u8 devfn, u8 offset) |
353 | { | 353 | { |
354 | if (bus == hose->first_busno) { | 354 | if (bus == hose->first_busno) { |
355 | /* For now, we don't self probe U3 HT bridge */ | 355 | /* For now, we don't self probe U3 HT bridge */ |
356 | if (PCI_SLOT(devfn) == 0) | 356 | if (PCI_SLOT(devfn) == 0) |
357 | return 0; | 357 | return NULL; |
358 | return ((unsigned long)hose->cfg_data) + | 358 | return hose->cfg_data + U3_HT_CFA0(devfn, offset); |
359 | U3_HT_CFA0(devfn, offset); | ||
360 | } else | 359 | } else |
361 | return ((unsigned long)hose->cfg_data) + | 360 | return hose->cfg_data + U3_HT_CFA1(bus, devfn, offset); |
362 | U3_HT_CFA1(bus, devfn, offset); | ||
363 | } | 361 | } |
364 | 362 | ||
365 | static int u3_ht_read_config(struct pci_bus *bus, unsigned int devfn, | 363 | static int u3_ht_read_config(struct pci_bus *bus, unsigned int devfn, |
366 | int offset, int len, u32 *val) | 364 | int offset, int len, u32 *val) |
367 | { | 365 | { |
368 | struct pci_controller *hose; | 366 | struct pci_controller *hose; |
369 | unsigned long addr; | 367 | volatile void __iomem *addr; |
370 | 368 | ||
371 | hose = pci_bus_to_host(bus); | 369 | hose = pci_bus_to_host(bus); |
372 | if (hose == NULL) | 370 | if (hose == NULL) |
@@ -400,13 +398,13 @@ static int u3_ht_read_config(struct pci_bus *bus, unsigned int devfn, | |||
400 | */ | 398 | */ |
401 | switch (len) { | 399 | switch (len) { |
402 | case 1: | 400 | case 1: |
403 | *val = in_8((u8 *)addr); | 401 | *val = in_8(addr); |
404 | break; | 402 | break; |
405 | case 2: | 403 | case 2: |
406 | *val = in_le16((u16 *)addr); | 404 | *val = in_le16(addr); |
407 | break; | 405 | break; |
408 | default: | 406 | default: |
409 | *val = in_le32((u32 *)addr); | 407 | *val = in_le32(addr); |
410 | break; | 408 | break; |
411 | } | 409 | } |
412 | return PCIBIOS_SUCCESSFUL; | 410 | return PCIBIOS_SUCCESSFUL; |
@@ -416,7 +414,7 @@ static int u3_ht_write_config(struct pci_bus *bus, unsigned int devfn, | |||
416 | int offset, int len, u32 val) | 414 | int offset, int len, u32 val) |
417 | { | 415 | { |
418 | struct pci_controller *hose; | 416 | struct pci_controller *hose; |
419 | unsigned long addr; | 417 | volatile void __iomem *addr; |
420 | 418 | ||
421 | hose = pci_bus_to_host(bus); | 419 | hose = pci_bus_to_host(bus); |
422 | if (hose == NULL) | 420 | if (hose == NULL) |
@@ -442,16 +440,16 @@ static int u3_ht_write_config(struct pci_bus *bus, unsigned int devfn, | |||
442 | */ | 440 | */ |
443 | switch (len) { | 441 | switch (len) { |
444 | case 1: | 442 | case 1: |
445 | out_8((u8 *)addr, val); | 443 | out_8(addr, val); |
446 | (void) in_8((u8 *)addr); | 444 | (void) in_8(addr); |
447 | break; | 445 | break; |
448 | case 2: | 446 | case 2: |
449 | out_le16((u16 *)addr, val); | 447 | out_le16(addr, val); |
450 | (void) in_le16((u16 *)addr); | 448 | (void) in_le16(addr); |
451 | break; | 449 | break; |
452 | default: | 450 | default: |
453 | out_le32((u32 *)addr, val); | 451 | out_le32((u32 __iomem *)addr, val); |
454 | (void) in_le32((u32 *)addr); | 452 | (void) in_le32(addr); |
455 | break; | 453 | break; |
456 | } | 454 | } |
457 | return PCIBIOS_SUCCESSFUL; | 455 | return PCIBIOS_SUCCESSFUL; |
@@ -476,7 +474,7 @@ static struct pci_ops u3_ht_pci_ops = | |||
476 | |(((unsigned int)(off)) & 0xfcU) \ | 474 | |(((unsigned int)(off)) & 0xfcU) \ |
477 | |1UL) | 475 | |1UL) |
478 | 476 | ||
479 | static unsigned long u4_pcie_cfg_access(struct pci_controller* hose, | 477 | static volatile void __iomem *u4_pcie_cfg_access(struct pci_controller* hose, |
480 | u8 bus, u8 dev_fn, int offset) | 478 | u8 bus, u8 dev_fn, int offset) |
481 | { | 479 | { |
482 | unsigned int caddr; | 480 | unsigned int caddr; |
@@ -492,14 +490,14 @@ static unsigned long u4_pcie_cfg_access(struct pci_controller* hose, | |||
492 | } while (in_le32(hose->cfg_addr) != caddr); | 490 | } while (in_le32(hose->cfg_addr) != caddr); |
493 | 491 | ||
494 | offset &= 0x03; | 492 | offset &= 0x03; |
495 | return ((unsigned long)hose->cfg_data) + offset; | 493 | return hose->cfg_data + offset; |
496 | } | 494 | } |
497 | 495 | ||
498 | static int u4_pcie_read_config(struct pci_bus *bus, unsigned int devfn, | 496 | static int u4_pcie_read_config(struct pci_bus *bus, unsigned int devfn, |
499 | int offset, int len, u32 *val) | 497 | int offset, int len, u32 *val) |
500 | { | 498 | { |
501 | struct pci_controller *hose; | 499 | struct pci_controller *hose; |
502 | unsigned long addr; | 500 | volatile void __iomem *addr; |
503 | 501 | ||
504 | hose = pci_bus_to_host(bus); | 502 | hose = pci_bus_to_host(bus); |
505 | if (hose == NULL) | 503 | if (hose == NULL) |
@@ -515,13 +513,13 @@ static int u4_pcie_read_config(struct pci_bus *bus, unsigned int devfn, | |||
515 | */ | 513 | */ |
516 | switch (len) { | 514 | switch (len) { |
517 | case 1: | 515 | case 1: |
518 | *val = in_8((u8 *)addr); | 516 | *val = in_8(addr); |
519 | break; | 517 | break; |
520 | case 2: | 518 | case 2: |
521 | *val = in_le16((u16 *)addr); | 519 | *val = in_le16(addr); |
522 | break; | 520 | break; |
523 | default: | 521 | default: |
524 | *val = in_le32((u32 *)addr); | 522 | *val = in_le32(addr); |
525 | break; | 523 | break; |
526 | } | 524 | } |
527 | return PCIBIOS_SUCCESSFUL; | 525 | return PCIBIOS_SUCCESSFUL; |
@@ -531,7 +529,7 @@ static int u4_pcie_write_config(struct pci_bus *bus, unsigned int devfn, | |||
531 | int offset, int len, u32 val) | 529 | int offset, int len, u32 val) |
532 | { | 530 | { |
533 | struct pci_controller *hose; | 531 | struct pci_controller *hose; |
534 | unsigned long addr; | 532 | volatile void __iomem *addr; |
535 | 533 | ||
536 | hose = pci_bus_to_host(bus); | 534 | hose = pci_bus_to_host(bus); |
537 | if (hose == NULL) | 535 | if (hose == NULL) |
@@ -547,16 +545,16 @@ static int u4_pcie_write_config(struct pci_bus *bus, unsigned int devfn, | |||
547 | */ | 545 | */ |
548 | switch (len) { | 546 | switch (len) { |
549 | case 1: | 547 | case 1: |
550 | out_8((u8 *)addr, val); | 548 | out_8(addr, val); |
551 | (void) in_8((u8 *)addr); | 549 | (void) in_8(addr); |
552 | break; | 550 | break; |
553 | case 2: | 551 | case 2: |
554 | out_le16((u16 *)addr, val); | 552 | out_le16(addr, val); |
555 | (void) in_le16((u16 *)addr); | 553 | (void) in_le16(addr); |
556 | break; | 554 | break; |
557 | default: | 555 | default: |
558 | out_le32((u32 *)addr, val); | 556 | out_le32(addr, val); |
559 | (void) in_le32((u32 *)addr); | 557 | (void) in_le32(addr); |
560 | break; | 558 | break; |
561 | } | 559 | } |
562 | return PCIBIOS_SUCCESSFUL; | 560 | return PCIBIOS_SUCCESSFUL; |
@@ -773,8 +771,7 @@ static void __init setup_u3_ht(struct pci_controller* hose) | |||
773 | * the reg address cell, we shall fix that by killing struct | 771 | * the reg address cell, we shall fix that by killing struct |
774 | * reg_property and using some accessor functions instead | 772 | * reg_property and using some accessor functions instead |
775 | */ | 773 | */ |
776 | hose->cfg_data = (volatile unsigned char *)ioremap(0xf2000000, | 774 | hose->cfg_data = ioremap(0xf2000000, 0x02000000); |
777 | 0x02000000); | ||
778 | 775 | ||
779 | /* | 776 | /* |
780 | * /ht node doesn't expose a "ranges" property, so we "remove" | 777 | * /ht node doesn't expose a "ranges" property, so we "remove" |
diff --git a/arch/powerpc/platforms/powermac/pfunc_base.c b/arch/powerpc/platforms/powermac/pfunc_base.c index 4ffd2a9832a0..9b7150f10414 100644 --- a/arch/powerpc/platforms/powermac/pfunc_base.c +++ b/arch/powerpc/platforms/powermac/pfunc_base.c | |||
@@ -9,7 +9,12 @@ | |||
9 | #include <asm/pmac_feature.h> | 9 | #include <asm/pmac_feature.h> |
10 | #include <asm/pmac_pfunc.h> | 10 | #include <asm/pmac_pfunc.h> |
11 | 11 | ||
12 | #undef DEBUG | ||
13 | #ifdef DEBUG | ||
12 | #define DBG(fmt...) printk(fmt) | 14 | #define DBG(fmt...) printk(fmt) |
15 | #else | ||
16 | #define DBG(fmt...) | ||
17 | #endif | ||
13 | 18 | ||
14 | static irqreturn_t macio_gpio_irq(int irq, void *data, struct pt_regs *regs) | 19 | static irqreturn_t macio_gpio_irq(int irq, void *data, struct pt_regs *regs) |
15 | { | 20 | { |
diff --git a/arch/powerpc/platforms/powermac/pfunc_core.c b/arch/powerpc/platforms/powermac/pfunc_core.c index c32c623001dc..4baa75b1d36f 100644 --- a/arch/powerpc/platforms/powermac/pfunc_core.c +++ b/arch/powerpc/platforms/powermac/pfunc_core.c | |||
@@ -20,7 +20,13 @@ | |||
20 | #define LOG_PARSE(fmt...) | 20 | #define LOG_PARSE(fmt...) |
21 | #define LOG_ERROR(fmt...) printk(fmt) | 21 | #define LOG_ERROR(fmt...) printk(fmt) |
22 | #define LOG_BLOB(t,b,c) | 22 | #define LOG_BLOB(t,b,c) |
23 | |||
24 | #undef DEBUG | ||
25 | #ifdef DEBUG | ||
23 | #define DBG(fmt...) printk(fmt) | 26 | #define DBG(fmt...) printk(fmt) |
27 | #else | ||
28 | #define DBG(fmt...) | ||
29 | #endif | ||
24 | 30 | ||
25 | /* Command numbers */ | 31 | /* Command numbers */ |
26 | #define PMF_CMD_LIST 0 | 32 | #define PMF_CMD_LIST 0 |
@@ -862,21 +868,28 @@ int pmf_register_irq_client(struct device_node *target, | |||
862 | spin_unlock_irqrestore(&pmf_lock, flags); | 868 | spin_unlock_irqrestore(&pmf_lock, flags); |
863 | return -ENODEV; | 869 | return -ENODEV; |
864 | } | 870 | } |
871 | if (list_empty(&func->irq_clients)) | ||
872 | func->dev->handlers->irq_enable(func); | ||
865 | list_add(&client->link, &func->irq_clients); | 873 | list_add(&client->link, &func->irq_clients); |
874 | client->func = func; | ||
866 | spin_unlock_irqrestore(&pmf_lock, flags); | 875 | spin_unlock_irqrestore(&pmf_lock, flags); |
867 | 876 | ||
868 | return 0; | 877 | return 0; |
869 | } | 878 | } |
870 | EXPORT_SYMBOL_GPL(pmf_register_irq_client); | 879 | EXPORT_SYMBOL_GPL(pmf_register_irq_client); |
871 | 880 | ||
872 | void pmf_unregister_irq_client(struct device_node *np, | 881 | void pmf_unregister_irq_client(struct pmf_irq_client *client) |
873 | const char *name, | ||
874 | struct pmf_irq_client *client) | ||
875 | { | 882 | { |
883 | struct pmf_function *func = client->func; | ||
876 | unsigned long flags; | 884 | unsigned long flags; |
877 | 885 | ||
886 | BUG_ON(func == NULL); | ||
887 | |||
878 | spin_lock_irqsave(&pmf_lock, flags); | 888 | spin_lock_irqsave(&pmf_lock, flags); |
889 | client->func = NULL; | ||
879 | list_del(&client->link); | 890 | list_del(&client->link); |
891 | if (list_empty(&func->irq_clients)) | ||
892 | func->dev->handlers->irq_disable(func); | ||
880 | spin_unlock_irqrestore(&pmf_lock, flags); | 893 | spin_unlock_irqrestore(&pmf_lock, flags); |
881 | } | 894 | } |
882 | EXPORT_SYMBOL_GPL(pmf_unregister_irq_client); | 895 | EXPORT_SYMBOL_GPL(pmf_unregister_irq_client); |
diff --git a/arch/powerpc/platforms/powermac/setup.c b/arch/powerpc/platforms/powermac/setup.c index 89c4c3636161..29c2946f1c77 100644 --- a/arch/powerpc/platforms/powermac/setup.c +++ b/arch/powerpc/platforms/powermac/setup.c | |||
@@ -82,8 +82,6 @@ | |||
82 | 82 | ||
83 | #undef SHOW_GATWICK_IRQS | 83 | #undef SHOW_GATWICK_IRQS |
84 | 84 | ||
85 | unsigned char drive_info; | ||
86 | |||
87 | int ppc_override_l2cr = 0; | 85 | int ppc_override_l2cr = 0; |
88 | int ppc_override_l2cr_value; | 86 | int ppc_override_l2cr_value; |
89 | int has_l2cache = 0; | 87 | int has_l2cache = 0; |
@@ -623,10 +621,6 @@ static void __init pmac_init_early(void) | |||
623 | /* Probe motherboard chipset */ | 621 | /* Probe motherboard chipset */ |
624 | pmac_feature_init(); | 622 | pmac_feature_init(); |
625 | 623 | ||
626 | /* We can NAP */ | ||
627 | powersave_nap = 1; | ||
628 | printk(KERN_INFO "Using native/NAP idle loop\n"); | ||
629 | |||
630 | /* Initialize debug stuff */ | 624 | /* Initialize debug stuff */ |
631 | udbg_scc_init(!!strstr(cmd_line, "sccdbg")); | 625 | udbg_scc_init(!!strstr(cmd_line, "sccdbg")); |
632 | udbg_adb_init(!!strstr(cmd_line, "btextdbg")); | 626 | udbg_adb_init(!!strstr(cmd_line, "btextdbg")); |
diff --git a/arch/powerpc/platforms/powermac/smp.c b/arch/powerpc/platforms/powermac/smp.c index 0df2cdcd805c..6d64a9bf3474 100644 --- a/arch/powerpc/platforms/powermac/smp.c +++ b/arch/powerpc/platforms/powermac/smp.c | |||
@@ -435,7 +435,7 @@ struct smp_ops_t psurge_smp_ops = { | |||
435 | */ | 435 | */ |
436 | 436 | ||
437 | static void (*pmac_tb_freeze)(int freeze); | 437 | static void (*pmac_tb_freeze)(int freeze); |
438 | static unsigned long timebase; | 438 | static u64 timebase; |
439 | static int tb_req; | 439 | static int tb_req; |
440 | 440 | ||
441 | static void smp_core99_give_timebase(void) | 441 | static void smp_core99_give_timebase(void) |
diff --git a/arch/powerpc/platforms/pseries/Kconfig b/arch/powerpc/platforms/pseries/Kconfig index e3fc3407bb1f..a57032cf6f1b 100644 --- a/arch/powerpc/platforms/pseries/Kconfig +++ b/arch/powerpc/platforms/pseries/Kconfig | |||
@@ -9,13 +9,6 @@ config PPC_SPLPAR | |||
9 | processors, that is, which share physical processors between | 9 | processors, that is, which share physical processors between |
10 | two or more partitions. | 10 | two or more partitions. |
11 | 11 | ||
12 | config HMT | ||
13 | bool "Hardware multithreading" | ||
14 | depends on SMP && PPC_PSERIES && BROKEN | ||
15 | help | ||
16 | This option enables hardware multithreading on RS64 cpus. | ||
17 | pSeries systems p620 and p660 have such a cpu type. | ||
18 | |||
19 | config EEH | 12 | config EEH |
20 | bool "PCI Extended Error Handling (EEH)" if EMBEDDED | 13 | bool "PCI Extended Error Handling (EEH)" if EMBEDDED |
21 | depends on PPC_PSERIES | 14 | depends on PPC_PSERIES |
@@ -26,7 +19,7 @@ config SCANLOG | |||
26 | depends on RTAS_PROC && PPC_PSERIES | 19 | depends on RTAS_PROC && PPC_PSERIES |
27 | 20 | ||
28 | config LPARCFG | 21 | config LPARCFG |
29 | tristate "LPAR Configuration Data" | 22 | bool "LPAR Configuration Data" |
30 | depends on PPC_PSERIES || PPC_ISERIES | 23 | depends on PPC_PSERIES || PPC_ISERIES |
31 | help | 24 | help |
32 | Provide system capacity information via human readable | 25 | Provide system capacity information via human readable |
diff --git a/arch/powerpc/platforms/pseries/eeh.c b/arch/powerpc/platforms/pseries/eeh.c index 83578313ee7e..2ab9dcdfb415 100644 --- a/arch/powerpc/platforms/pseries/eeh.c +++ b/arch/powerpc/platforms/pseries/eeh.c | |||
@@ -893,6 +893,20 @@ void eeh_add_device_tree_early(struct device_node *dn) | |||
893 | } | 893 | } |
894 | EXPORT_SYMBOL_GPL(eeh_add_device_tree_early); | 894 | EXPORT_SYMBOL_GPL(eeh_add_device_tree_early); |
895 | 895 | ||
896 | void eeh_add_device_tree_late(struct pci_bus *bus) | ||
897 | { | ||
898 | struct pci_dev *dev; | ||
899 | |||
900 | list_for_each_entry(dev, &bus->devices, bus_list) { | ||
901 | eeh_add_device_late(dev); | ||
902 | if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE) { | ||
903 | struct pci_bus *subbus = dev->subordinate; | ||
904 | if (subbus) | ||
905 | eeh_add_device_tree_late(subbus); | ||
906 | } | ||
907 | } | ||
908 | } | ||
909 | |||
896 | /** | 910 | /** |
897 | * eeh_add_device_late - perform EEH initialization for the indicated pci device | 911 | * eeh_add_device_late - perform EEH initialization for the indicated pci device |
898 | * @dev: pci device for which to set up EEH | 912 | * @dev: pci device for which to set up EEH |
diff --git a/arch/powerpc/platforms/pseries/eeh_driver.c b/arch/powerpc/platforms/pseries/eeh_driver.c index 6373372932ba..b811d5ff92fe 100644 --- a/arch/powerpc/platforms/pseries/eeh_driver.c +++ b/arch/powerpc/platforms/pseries/eeh_driver.c | |||
@@ -37,7 +37,7 @@ | |||
37 | 37 | ||
38 | static inline const char * pcid_name (struct pci_dev *pdev) | 38 | static inline const char * pcid_name (struct pci_dev *pdev) |
39 | { | 39 | { |
40 | if (pdev->dev.driver) | 40 | if (pdev && pdev->dev.driver) |
41 | return pdev->dev.driver->name; | 41 | return pdev->dev.driver->name; |
42 | return ""; | 42 | return ""; |
43 | } | 43 | } |
@@ -333,7 +333,7 @@ void handle_eeh_events (struct eeh_event *event) | |||
333 | rc = eeh_reset_device(frozen_pdn, NULL); | 333 | rc = eeh_reset_device(frozen_pdn, NULL); |
334 | if (rc) | 334 | if (rc) |
335 | goto hard_fail; | 335 | goto hard_fail; |
336 | pci_walk_bus(frozen_bus, eeh_report_reset, 0); | 336 | pci_walk_bus(frozen_bus, eeh_report_reset, NULL); |
337 | } | 337 | } |
338 | 338 | ||
339 | /* If all devices reported they can proceed, the re-enable PIO */ | 339 | /* If all devices reported they can proceed, the re-enable PIO */ |
@@ -342,11 +342,11 @@ void handle_eeh_events (struct eeh_event *event) | |||
342 | rc = eeh_reset_device(frozen_pdn, NULL); | 342 | rc = eeh_reset_device(frozen_pdn, NULL); |
343 | if (rc) | 343 | if (rc) |
344 | goto hard_fail; | 344 | goto hard_fail; |
345 | pci_walk_bus(frozen_bus, eeh_report_reset, 0); | 345 | pci_walk_bus(frozen_bus, eeh_report_reset, NULL); |
346 | } | 346 | } |
347 | 347 | ||
348 | /* Tell all device drivers that they can resume operations */ | 348 | /* Tell all device drivers that they can resume operations */ |
349 | pci_walk_bus(frozen_bus, eeh_report_resume, 0); | 349 | pci_walk_bus(frozen_bus, eeh_report_resume, NULL); |
350 | 350 | ||
351 | return; | 351 | return; |
352 | 352 | ||
@@ -367,7 +367,7 @@ hard_fail: | |||
367 | eeh_slot_error_detail(frozen_pdn, 2 /* Permanent Error */); | 367 | eeh_slot_error_detail(frozen_pdn, 2 /* Permanent Error */); |
368 | 368 | ||
369 | /* Notify all devices that they're about to go down. */ | 369 | /* Notify all devices that they're about to go down. */ |
370 | pci_walk_bus(frozen_bus, eeh_report_failure, 0); | 370 | pci_walk_bus(frozen_bus, eeh_report_failure, NULL); |
371 | 371 | ||
372 | /* Shut down the device drivers for good. */ | 372 | /* Shut down the device drivers for good. */ |
373 | pcibios_remove_pci_devices(frozen_bus); | 373 | pcibios_remove_pci_devices(frozen_bus); |
diff --git a/arch/powerpc/platforms/pseries/pci_dlpar.c b/arch/powerpc/platforms/pseries/pci_dlpar.c index 21934784f936..44abdeb9ca03 100644 --- a/arch/powerpc/platforms/pseries/pci_dlpar.c +++ b/arch/powerpc/platforms/pseries/pci_dlpar.c | |||
@@ -27,6 +27,7 @@ | |||
27 | 27 | ||
28 | #include <linux/pci.h> | 28 | #include <linux/pci.h> |
29 | #include <asm/pci-bridge.h> | 29 | #include <asm/pci-bridge.h> |
30 | #include <asm/ppc-pci.h> | ||
30 | 31 | ||
31 | static struct pci_bus * | 32 | static struct pci_bus * |
32 | find_bus_among_children(struct pci_bus *bus, | 33 | find_bus_among_children(struct pci_bus *bus, |
@@ -58,6 +59,7 @@ pcibios_find_pci_bus(struct device_node *dn) | |||
58 | 59 | ||
59 | return find_bus_among_children(pdn->phb->bus, dn); | 60 | return find_bus_among_children(pdn->phb->bus, dn); |
60 | } | 61 | } |
62 | EXPORT_SYMBOL_GPL(pcibios_find_pci_bus); | ||
61 | 63 | ||
62 | /** | 64 | /** |
63 | * pcibios_remove_pci_devices - remove all devices under this bus | 65 | * pcibios_remove_pci_devices - remove all devices under this bus |
@@ -105,14 +107,16 @@ pcibios_fixup_new_pci_devices(struct pci_bus *bus, int fix_bus) | |||
105 | } | 107 | } |
106 | } | 108 | } |
107 | } | 109 | } |
110 | |||
111 | eeh_add_device_tree_late(bus); | ||
108 | } | 112 | } |
113 | EXPORT_SYMBOL_GPL(pcibios_fixup_new_pci_devices); | ||
109 | 114 | ||
110 | static int | 115 | static int |
111 | pcibios_pci_config_bridge(struct pci_dev *dev) | 116 | pcibios_pci_config_bridge(struct pci_dev *dev) |
112 | { | 117 | { |
113 | u8 sec_busno; | 118 | u8 sec_busno; |
114 | struct pci_bus *child_bus; | 119 | struct pci_bus *child_bus; |
115 | struct pci_dev *child_dev; | ||
116 | 120 | ||
117 | /* Get busno of downstream bus */ | 121 | /* Get busno of downstream bus */ |
118 | pci_read_config_byte(dev, PCI_SECONDARY_BUS, &sec_busno); | 122 | pci_read_config_byte(dev, PCI_SECONDARY_BUS, &sec_busno); |
@@ -127,10 +131,6 @@ pcibios_pci_config_bridge(struct pci_dev *dev) | |||
127 | 131 | ||
128 | pci_scan_child_bus(child_bus); | 132 | pci_scan_child_bus(child_bus); |
129 | 133 | ||
130 | list_for_each_entry(child_dev, &child_bus->devices, bus_list) { | ||
131 | eeh_add_device_late(child_dev); | ||
132 | } | ||
133 | |||
134 | /* Fixup new pci devices without touching bus struct */ | 134 | /* Fixup new pci devices without touching bus struct */ |
135 | pcibios_fixup_new_pci_devices(child_bus, 0); | 135 | pcibios_fixup_new_pci_devices(child_bus, 0); |
136 | 136 | ||
@@ -158,17 +158,52 @@ pcibios_add_pci_devices(struct pci_bus * bus) | |||
158 | 158 | ||
159 | eeh_add_device_tree_early(dn); | 159 | eeh_add_device_tree_early(dn); |
160 | 160 | ||
161 | /* pci_scan_slot should find all children */ | 161 | if (_machine == PLATFORM_PSERIES_LPAR) { |
162 | slotno = PCI_SLOT(PCI_DN(dn->child)->devfn); | 162 | /* use ofdt-based probe */ |
163 | num = pci_scan_slot(bus, PCI_DEVFN(slotno, 0)); | 163 | of_scan_bus(dn, bus); |
164 | if (num) { | 164 | if (!list_empty(&bus->devices)) { |
165 | pcibios_fixup_new_pci_devices(bus, 1); | 165 | pcibios_fixup_new_pci_devices(bus, 0); |
166 | pci_bus_add_devices(bus); | 166 | pci_bus_add_devices(bus); |
167 | } | 167 | } |
168 | } else { | ||
169 | /* use legacy probe */ | ||
170 | slotno = PCI_SLOT(PCI_DN(dn->child)->devfn); | ||
171 | num = pci_scan_slot(bus, PCI_DEVFN(slotno, 0)); | ||
172 | if (num) { | ||
173 | pcibios_fixup_new_pci_devices(bus, 1); | ||
174 | pci_bus_add_devices(bus); | ||
175 | } | ||
168 | 176 | ||
169 | list_for_each_entry(dev, &bus->devices, bus_list) { | 177 | list_for_each_entry(dev, &bus->devices, bus_list) |
170 | eeh_add_device_late (dev); | 178 | if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE) |
171 | if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE) | 179 | pcibios_pci_config_bridge(dev); |
172 | pcibios_pci_config_bridge(dev); | ||
173 | } | 180 | } |
174 | } | 181 | } |
182 | EXPORT_SYMBOL_GPL(pcibios_add_pci_devices); | ||
183 | |||
184 | struct pci_controller * __devinit init_phb_dynamic(struct device_node *dn) | ||
185 | { | ||
186 | struct pci_controller *phb; | ||
187 | int primary; | ||
188 | |||
189 | primary = list_empty(&hose_list); | ||
190 | phb = pcibios_alloc_controller(dn); | ||
191 | if (!phb) | ||
192 | return NULL; | ||
193 | setup_phb(dn, phb); | ||
194 | pci_process_bridge_OF_ranges(phb, dn, 0); | ||
195 | |||
196 | pci_setup_phb_io_dynamic(phb, primary); | ||
197 | |||
198 | pci_devs_phb_init_dynamic(phb); | ||
199 | |||
200 | if (dn->child) | ||
201 | eeh_add_device_tree_early(dn); | ||
202 | |||
203 | scan_phb(phb); | ||
204 | pcibios_fixup_new_pci_devices(phb->bus, 0); | ||
205 | pci_bus_add_devices(phb->bus); | ||
206 | |||
207 | return phb; | ||
208 | } | ||
209 | EXPORT_SYMBOL_GPL(init_phb_dynamic); | ||
diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c index da6cebaf72cd..9edeca83f434 100644 --- a/arch/powerpc/platforms/pseries/setup.c +++ b/arch/powerpc/platforms/pseries/setup.c | |||
@@ -585,7 +585,7 @@ static int pSeries_pci_probe_mode(struct pci_bus *bus) | |||
585 | static void pseries_kexec_cpu_down(int crash_shutdown, int secondary) | 585 | static void pseries_kexec_cpu_down(int crash_shutdown, int secondary) |
586 | { | 586 | { |
587 | /* Don't risk a hypervisor call if we're crashing */ | 587 | /* Don't risk a hypervisor call if we're crashing */ |
588 | if (!crash_shutdown) { | 588 | if (firmware_has_feature(FW_FEATURE_SPLPAR) && !crash_shutdown) { |
589 | unsigned long vpa = __pa(get_lppaca()); | 589 | unsigned long vpa = __pa(get_lppaca()); |
590 | 590 | ||
591 | if (unregister_vpa(hard_smp_processor_id(), vpa)) { | 591 | if (unregister_vpa(hard_smp_processor_id(), vpa)) { |
diff --git a/arch/powerpc/platforms/pseries/smp.c b/arch/powerpc/platforms/pseries/smp.c index 8e6b1ed1396e..8d710af50756 100644 --- a/arch/powerpc/platforms/pseries/smp.c +++ b/arch/powerpc/platforms/pseries/smp.c | |||
@@ -292,7 +292,7 @@ static inline int __devinit smp_startup_cpu(unsigned int lcpu) | |||
292 | if (start_cpu == RTAS_UNKNOWN_SERVICE) | 292 | if (start_cpu == RTAS_UNKNOWN_SERVICE) |
293 | return 1; | 293 | return 1; |
294 | 294 | ||
295 | status = rtas_call(start_cpu, 3, 1, NULL, pcpu, start_here, lcpu); | 295 | status = rtas_call(start_cpu, 3, 1, NULL, pcpu, start_here, pcpu); |
296 | if (status != 0) { | 296 | if (status != 0) { |
297 | printk(KERN_ERR "start-cpu failed: %i\n", status); | 297 | printk(KERN_ERR "start-cpu failed: %i\n", status); |
298 | return 0; | 298 | return 0; |
diff --git a/arch/powerpc/sysdev/dart_iommu.c b/arch/powerpc/sysdev/dart_iommu.c index 977de9db8754..6298264efe36 100644 --- a/arch/powerpc/sysdev/dart_iommu.c +++ b/arch/powerpc/sysdev/dart_iommu.c | |||
@@ -59,7 +59,7 @@ static unsigned long dart_tablesize; | |||
59 | static u32 *dart_vbase; | 59 | static u32 *dart_vbase; |
60 | 60 | ||
61 | /* Mapped base address for the dart */ | 61 | /* Mapped base address for the dart */ |
62 | static unsigned int *__iomem dart; | 62 | static unsigned int __iomem *dart; |
63 | 63 | ||
64 | /* Dummy val that entries are set to when unused */ | 64 | /* Dummy val that entries are set to when unused */ |
65 | static unsigned int dart_emptyval; | 65 | static unsigned int dart_emptyval; |
diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c index 4f26304d0263..7dcdfcb3c984 100644 --- a/arch/powerpc/sysdev/mpic.c +++ b/arch/powerpc/sysdev/mpic.c | |||
@@ -234,7 +234,7 @@ static void mpic_shutdown_ht_interrupt(struct mpic *mpic, unsigned int source, | |||
234 | spin_lock_irqsave(&mpic->fixup_lock, flags); | 234 | spin_lock_irqsave(&mpic->fixup_lock, flags); |
235 | writeb(0x10 + 2 * fixup->index, fixup->base + 2); | 235 | writeb(0x10 + 2 * fixup->index, fixup->base + 2); |
236 | tmp = readl(fixup->base + 4); | 236 | tmp = readl(fixup->base + 4); |
237 | tmp &= ~1U; | 237 | tmp |= 1; |
238 | writel(tmp, fixup->base + 4); | 238 | writel(tmp, fixup->base + 4); |
239 | spin_unlock_irqrestore(&mpic->fixup_lock, flags); | 239 | spin_unlock_irqrestore(&mpic->fixup_lock, flags); |
240 | } | 240 | } |
@@ -446,14 +446,15 @@ static unsigned int mpic_startup_irq(unsigned int irq) | |||
446 | #ifdef CONFIG_MPIC_BROKEN_U3 | 446 | #ifdef CONFIG_MPIC_BROKEN_U3 |
447 | struct mpic *mpic = mpic_from_irq(irq); | 447 | struct mpic *mpic = mpic_from_irq(irq); |
448 | unsigned int src = irq - mpic->irq_offset; | 448 | unsigned int src = irq - mpic->irq_offset; |
449 | #endif /* CONFIG_MPIC_BROKEN_U3 */ | ||
450 | |||
451 | mpic_enable_irq(irq); | ||
449 | 452 | ||
453 | #ifdef CONFIG_MPIC_BROKEN_U3 | ||
450 | if (mpic_is_ht_interrupt(mpic, src)) | 454 | if (mpic_is_ht_interrupt(mpic, src)) |
451 | mpic_startup_ht_interrupt(mpic, src, irq_desc[irq].status); | 455 | mpic_startup_ht_interrupt(mpic, src, irq_desc[irq].status); |
452 | |||
453 | #endif /* CONFIG_MPIC_BROKEN_U3 */ | 456 | #endif /* CONFIG_MPIC_BROKEN_U3 */ |
454 | 457 | ||
455 | mpic_enable_irq(irq); | ||
456 | |||
457 | return 0; | 458 | return 0; |
458 | } | 459 | } |
459 | 460 | ||
diff --git a/arch/ppc/kernel/asm-offsets.c b/arch/ppc/kernel/asm-offsets.c index 7964bf660e92..77e4dc780f8c 100644 --- a/arch/ppc/kernel/asm-offsets.c +++ b/arch/ppc/kernel/asm-offsets.c | |||
@@ -131,7 +131,6 @@ main(void) | |||
131 | DEFINE(CPU_SPEC_FEATURES, offsetof(struct cpu_spec, cpu_features)); | 131 | DEFINE(CPU_SPEC_FEATURES, offsetof(struct cpu_spec, cpu_features)); |
132 | DEFINE(CPU_SPEC_SETUP, offsetof(struct cpu_spec, cpu_setup)); | 132 | DEFINE(CPU_SPEC_SETUP, offsetof(struct cpu_spec, cpu_setup)); |
133 | 133 | ||
134 | DEFINE(TI_SIGFRAME, offsetof(struct thread_info, nvgprs_frame)); | ||
135 | DEFINE(TI_TASK, offsetof(struct thread_info, task)); | 134 | DEFINE(TI_TASK, offsetof(struct thread_info, task)); |
136 | DEFINE(TI_EXECDOMAIN, offsetof(struct thread_info, exec_domain)); | 135 | DEFINE(TI_EXECDOMAIN, offsetof(struct thread_info, exec_domain)); |
137 | DEFINE(TI_FLAGS, offsetof(struct thread_info, flags)); | 136 | DEFINE(TI_FLAGS, offsetof(struct thread_info, flags)); |
diff --git a/arch/ppc/kernel/entry.S b/arch/ppc/kernel/entry.S index a48b950722a1..3a2815978488 100644 --- a/arch/ppc/kernel/entry.S +++ b/arch/ppc/kernel/entry.S | |||
@@ -227,7 +227,7 @@ ret_from_syscall: | |||
227 | MTMSRD(r10) | 227 | MTMSRD(r10) |
228 | lwz r9,TI_FLAGS(r12) | 228 | lwz r9,TI_FLAGS(r12) |
229 | li r8,-_LAST_ERRNO | 229 | li r8,-_LAST_ERRNO |
230 | andi. r0,r9,(_TIF_SYSCALL_T_OR_A|_TIF_SIGPENDING|_TIF_NEED_RESCHED|_TIF_RESTOREALL) | 230 | andi. r0,r9,(_TIF_SYSCALL_T_OR_A|_TIF_SINGLESTEP|_TIF_USER_WORK_MASK|_TIF_PERSYSCALL_MASK) |
231 | bne- syscall_exit_work | 231 | bne- syscall_exit_work |
232 | cmplw 0,r3,r8 | 232 | cmplw 0,r3,r8 |
233 | blt+ syscall_exit_cont | 233 | blt+ syscall_exit_cont |
@@ -287,8 +287,10 @@ syscall_dotrace: | |||
287 | 287 | ||
288 | syscall_exit_work: | 288 | syscall_exit_work: |
289 | andi. r0,r9,_TIF_RESTOREALL | 289 | andi. r0,r9,_TIF_RESTOREALL |
290 | bne- 2f | 290 | beq+ 0f |
291 | cmplw 0,r3,r8 | 291 | REST_NVGPRS(r1) |
292 | b 2f | ||
293 | 0: cmplw 0,r3,r8 | ||
292 | blt+ 1f | 294 | blt+ 1f |
293 | andi. r0,r9,_TIF_NOERROR | 295 | andi. r0,r9,_TIF_NOERROR |
294 | bne- 1f | 296 | bne- 1f |
@@ -302,9 +304,7 @@ syscall_exit_work: | |||
302 | 2: andi. r0,r9,(_TIF_PERSYSCALL_MASK) | 304 | 2: andi. r0,r9,(_TIF_PERSYSCALL_MASK) |
303 | beq 4f | 305 | beq 4f |
304 | 306 | ||
305 | /* Clear per-syscall TIF flags if any are set, but _leave_ | 307 | /* Clear per-syscall TIF flags if any are set. */ |
306 | _TIF_SAVE_NVGPRS set in r9 since we haven't dealt with that | ||
307 | yet. */ | ||
308 | 308 | ||
309 | li r11,_TIF_PERSYSCALL_MASK | 309 | li r11,_TIF_PERSYSCALL_MASK |
310 | addi r12,r12,TI_FLAGS | 310 | addi r12,r12,TI_FLAGS |
@@ -318,8 +318,13 @@ syscall_exit_work: | |||
318 | subi r12,r12,TI_FLAGS | 318 | subi r12,r12,TI_FLAGS |
319 | 319 | ||
320 | 4: /* Anything which requires enabling interrupts? */ | 320 | 4: /* Anything which requires enabling interrupts? */ |
321 | andi. r0,r9,(_TIF_SYSCALL_T_OR_A|_TIF_SINGLESTEP|_TIF_SAVE_NVGPRS) | 321 | andi. r0,r9,(_TIF_SYSCALL_T_OR_A|_TIF_SINGLESTEP) |
322 | beq 7f | 322 | beq ret_from_except |
323 | |||
324 | /* Re-enable interrupts */ | ||
325 | ori r10,r10,MSR_EE | ||
326 | SYNC | ||
327 | MTMSRD(r10) | ||
323 | 328 | ||
324 | /* Save NVGPRS if they're not saved already */ | 329 | /* Save NVGPRS if they're not saved already */ |
325 | lwz r4,TRAP(r1) | 330 | lwz r4,TRAP(r1) |
@@ -328,71 +333,11 @@ syscall_exit_work: | |||
328 | SAVE_NVGPRS(r1) | 333 | SAVE_NVGPRS(r1) |
329 | li r4,0xc00 | 334 | li r4,0xc00 |
330 | stw r4,TRAP(r1) | 335 | stw r4,TRAP(r1) |
331 | 336 | 5: | |
332 | /* Re-enable interrupts */ | ||
333 | 5: ori r10,r10,MSR_EE | ||
334 | SYNC | ||
335 | MTMSRD(r10) | ||
336 | |||
337 | andi. r0,r9,_TIF_SAVE_NVGPRS | ||
338 | bne save_user_nvgprs | ||
339 | |||
340 | save_user_nvgprs_cont: | ||
341 | andi. r0,r9,(_TIF_SYSCALL_T_OR_A|_TIF_SINGLESTEP) | ||
342 | beq 7f | ||
343 | |||
344 | addi r3,r1,STACK_FRAME_OVERHEAD | 337 | addi r3,r1,STACK_FRAME_OVERHEAD |
345 | bl do_syscall_trace_leave | 338 | bl do_syscall_trace_leave |
346 | REST_NVGPRS(r1) | 339 | b ret_from_except_full |
347 | |||
348 | 6: lwz r3,GPR3(r1) | ||
349 | LOAD_MSR_KERNEL(r10,MSR_KERNEL) /* doesn't include MSR_EE */ | ||
350 | SYNC | ||
351 | MTMSRD(r10) /* disable interrupts again */ | ||
352 | rlwinm r12,r1,0,0,18 /* current_thread_info() */ | ||
353 | lwz r9,TI_FLAGS(r12) | ||
354 | 7: | ||
355 | andi. r0,r9,_TIF_NEED_RESCHED | ||
356 | bne 8f | ||
357 | lwz r5,_MSR(r1) | ||
358 | andi. r5,r5,MSR_PR | ||
359 | beq ret_from_except | ||
360 | andi. r0,r9,_TIF_SIGPENDING | ||
361 | beq ret_from_except | ||
362 | b do_user_signal | ||
363 | 8: | ||
364 | ori r10,r10,MSR_EE | ||
365 | SYNC | ||
366 | MTMSRD(r10) /* re-enable interrupts */ | ||
367 | bl schedule | ||
368 | b 6b | ||
369 | |||
370 | save_user_nvgprs: | ||
371 | lwz r8,TI_SIGFRAME(r12) | ||
372 | |||
373 | .macro savewords start, end | ||
374 | 1: stw \start,4*(\start)(r8) | ||
375 | .section __ex_table,"a" | ||
376 | .align 2 | ||
377 | .long 1b,save_user_nvgprs_fault | ||
378 | .previous | ||
379 | .if \end - \start | ||
380 | savewords "(\start+1)",\end | ||
381 | .endif | ||
382 | .endm | ||
383 | savewords 14,31 | ||
384 | b save_user_nvgprs_cont | ||
385 | |||
386 | |||
387 | save_user_nvgprs_fault: | ||
388 | li r3,11 /* SIGSEGV */ | ||
389 | lwz r4,TI_TASK(r12) | ||
390 | bl force_sigsegv | ||
391 | 340 | ||
392 | rlwinm r12,r1,0,0,18 /* current_thread_info() */ | ||
393 | lwz r9,TI_FLAGS(r12) | ||
394 | b save_user_nvgprs_cont | ||
395 | |||
396 | #ifdef SHOW_SYSCALLS | 341 | #ifdef SHOW_SYSCALLS |
397 | do_show_syscall: | 342 | do_show_syscall: |
398 | #ifdef SHOW_SYSCALLS_TASK | 343 | #ifdef SHOW_SYSCALLS_TASK |
@@ -490,6 +435,14 @@ ppc_clone: | |||
490 | stw r0,TRAP(r1) /* register set saved */ | 435 | stw r0,TRAP(r1) /* register set saved */ |
491 | b sys_clone | 436 | b sys_clone |
492 | 437 | ||
438 | .globl ppc_swapcontext | ||
439 | ppc_swapcontext: | ||
440 | SAVE_NVGPRS(r1) | ||
441 | lwz r0,TRAP(r1) | ||
442 | rlwinm r0,r0,0,0,30 /* clear LSB to indicate full */ | ||
443 | stw r0,TRAP(r1) /* register set saved */ | ||
444 | b sys_swapcontext | ||
445 | |||
493 | /* | 446 | /* |
494 | * Top-level page fault handling. | 447 | * Top-level page fault handling. |
495 | * This is in assembler because if do_page_fault tells us that | 448 | * This is in assembler because if do_page_fault tells us that |
@@ -683,7 +636,7 @@ user_exc_return: /* r10 contains MSR_KERNEL here */ | |||
683 | /* Check current_thread_info()->flags */ | 636 | /* Check current_thread_info()->flags */ |
684 | rlwinm r9,r1,0,0,18 | 637 | rlwinm r9,r1,0,0,18 |
685 | lwz r9,TI_FLAGS(r9) | 638 | lwz r9,TI_FLAGS(r9) |
686 | andi. r0,r9,(_TIF_SIGPENDING|_TIF_NEED_RESCHED|_TIF_RESTOREALL) | 639 | andi. r0,r9,(_TIF_SIGPENDING|_TIF_RESTORE_SIGMASK|_TIF_NEED_RESCHED) |
687 | bne do_work | 640 | bne do_work |
688 | 641 | ||
689 | restore_user: | 642 | restore_user: |
diff --git a/arch/ppc/kernel/head.S b/arch/ppc/kernel/head.S index c5a890dca9cf..53ea845fb911 100644 --- a/arch/ppc/kernel/head.S +++ b/arch/ppc/kernel/head.S | |||
@@ -751,6 +751,7 @@ AltiVecUnavailable: | |||
751 | #ifdef CONFIG_ALTIVEC | 751 | #ifdef CONFIG_ALTIVEC |
752 | bne load_up_altivec /* if from user, just load it up */ | 752 | bne load_up_altivec /* if from user, just load it up */ |
753 | #endif /* CONFIG_ALTIVEC */ | 753 | #endif /* CONFIG_ALTIVEC */ |
754 | addi r3,r1,STACK_FRAME_OVERHEAD | ||
754 | EXC_XFER_EE_LITE(0xf20, altivec_unavailable_exception) | 755 | EXC_XFER_EE_LITE(0xf20, altivec_unavailable_exception) |
755 | 756 | ||
756 | #ifdef CONFIG_PPC64BRIDGE | 757 | #ifdef CONFIG_PPC64BRIDGE |
diff --git a/arch/ppc/kernel/head_8xx.S b/arch/ppc/kernel/head_8xx.S index 3e6ca7f5843f..c1e89ad0684d 100644 --- a/arch/ppc/kernel/head_8xx.S +++ b/arch/ppc/kernel/head_8xx.S | |||
@@ -810,13 +810,16 @@ initial_mmu: | |||
810 | mtspr SPRN_MD_TWC, r9 | 810 | mtspr SPRN_MD_TWC, r9 |
811 | li r11, MI_BOOTINIT /* Create RPN for address 0 */ | 811 | li r11, MI_BOOTINIT /* Create RPN for address 0 */ |
812 | addis r11, r11, 0x0080 /* Add 8M */ | 812 | addis r11, r11, 0x0080 /* Add 8M */ |
813 | mtspr SPRN_MD_RPN, r8 | 813 | mtspr SPRN_MD_RPN, r11 |
814 | |||
815 | addi r10, r10, 0x0100 | ||
816 | mtspr SPRN_MD_CTR, r10 | ||
814 | 817 | ||
815 | addis r8, r8, 0x0080 /* Add 8M */ | 818 | addis r8, r8, 0x0080 /* Add 8M */ |
816 | mtspr SPRN_MD_EPN, r8 | 819 | mtspr SPRN_MD_EPN, r8 |
817 | mtspr SPRN_MD_TWC, r9 | 820 | mtspr SPRN_MD_TWC, r9 |
818 | addis r11, r11, 0x0080 /* Add 8M */ | 821 | addis r11, r11, 0x0080 /* Add 8M */ |
819 | mtspr SPRN_MD_RPN, r8 | 822 | mtspr SPRN_MD_RPN, r11 |
820 | #endif | 823 | #endif |
821 | 824 | ||
822 | /* Since the cache is enabled according to the information we | 825 | /* Since the cache is enabled according to the information we |
diff --git a/arch/ppc/kernel/misc.S b/arch/ppc/kernel/misc.S index c3427eed8345..5a936566fd61 100644 --- a/arch/ppc/kernel/misc.S +++ b/arch/ppc/kernel/misc.S | |||
@@ -1048,286 +1048,3 @@ _GLOBAL(name) \ | |||
1048 | blr | 1048 | blr |
1049 | 1049 | ||
1050 | SYSCALL(execve) | 1050 | SYSCALL(execve) |
1051 | |||
1052 | /* Why isn't this a) automatic, b) written in 'C'? */ | ||
1053 | .data | ||
1054 | .align 4 | ||
1055 | _GLOBAL(sys_call_table) | ||
1056 | .long sys_restart_syscall /* 0 */ | ||
1057 | .long sys_exit | ||
1058 | .long ppc_fork | ||
1059 | .long sys_read | ||
1060 | .long sys_write | ||
1061 | .long sys_open /* 5 */ | ||
1062 | .long sys_close | ||
1063 | .long sys_waitpid | ||
1064 | .long sys_creat | ||
1065 | .long sys_link | ||
1066 | .long sys_unlink /* 10 */ | ||
1067 | .long sys_execve | ||
1068 | .long sys_chdir | ||
1069 | .long sys_time | ||
1070 | .long sys_mknod | ||
1071 | .long sys_chmod /* 15 */ | ||
1072 | .long sys_lchown | ||
1073 | .long sys_ni_syscall /* old break syscall holder */ | ||
1074 | .long sys_stat | ||
1075 | .long sys_lseek | ||
1076 | .long sys_getpid /* 20 */ | ||
1077 | .long sys_mount | ||
1078 | .long sys_oldumount | ||
1079 | .long sys_setuid | ||
1080 | .long sys_getuid | ||
1081 | .long sys_stime /* 25 */ | ||
1082 | .long sys_ptrace | ||
1083 | .long sys_alarm | ||
1084 | .long sys_fstat | ||
1085 | .long sys_pause | ||
1086 | .long sys_utime /* 30 */ | ||
1087 | .long sys_ni_syscall /* old stty syscall holder */ | ||
1088 | .long sys_ni_syscall /* old gtty syscall holder */ | ||
1089 | .long sys_access | ||
1090 | .long sys_nice | ||
1091 | .long sys_ni_syscall /* 35 */ /* old ftime syscall holder */ | ||
1092 | .long sys_sync | ||
1093 | .long sys_kill | ||
1094 | .long sys_rename | ||
1095 | .long sys_mkdir | ||
1096 | .long sys_rmdir /* 40 */ | ||
1097 | .long sys_dup | ||
1098 | .long sys_pipe | ||
1099 | .long sys_times | ||
1100 | .long sys_ni_syscall /* old prof syscall holder */ | ||
1101 | .long sys_brk /* 45 */ | ||
1102 | .long sys_setgid | ||
1103 | .long sys_getgid | ||
1104 | .long sys_signal | ||
1105 | .long sys_geteuid | ||
1106 | .long sys_getegid /* 50 */ | ||
1107 | .long sys_acct | ||
1108 | .long sys_umount /* recycled never used phys() */ | ||
1109 | .long sys_ni_syscall /* old lock syscall holder */ | ||
1110 | .long sys_ioctl | ||
1111 | .long sys_fcntl /* 55 */ | ||
1112 | .long sys_ni_syscall /* old mpx syscall holder */ | ||
1113 | .long sys_setpgid | ||
1114 | .long sys_ni_syscall /* old ulimit syscall holder */ | ||
1115 | .long sys_olduname | ||
1116 | .long sys_umask /* 60 */ | ||
1117 | .long sys_chroot | ||
1118 | .long sys_ustat | ||
1119 | .long sys_dup2 | ||
1120 | .long sys_getppid | ||
1121 | .long sys_getpgrp /* 65 */ | ||
1122 | .long sys_setsid | ||
1123 | .long sys_sigaction | ||
1124 | .long sys_sgetmask | ||
1125 | .long sys_ssetmask | ||
1126 | .long sys_setreuid /* 70 */ | ||
1127 | .long sys_setregid | ||
1128 | .long sys_sigsuspend | ||
1129 | .long sys_sigpending | ||
1130 | .long sys_sethostname | ||
1131 | .long sys_setrlimit /* 75 */ | ||
1132 | .long sys_old_getrlimit | ||
1133 | .long sys_getrusage | ||
1134 | .long sys_gettimeofday | ||
1135 | .long sys_settimeofday | ||
1136 | .long sys_getgroups /* 80 */ | ||
1137 | .long sys_setgroups | ||
1138 | .long ppc_select | ||
1139 | .long sys_symlink | ||
1140 | .long sys_lstat | ||
1141 | .long sys_readlink /* 85 */ | ||
1142 | .long sys_uselib | ||
1143 | .long sys_swapon | ||
1144 | .long sys_reboot | ||
1145 | .long old_readdir | ||
1146 | .long sys_mmap /* 90 */ | ||
1147 | .long sys_munmap | ||
1148 | .long sys_truncate | ||
1149 | .long sys_ftruncate | ||
1150 | .long sys_fchmod | ||
1151 | .long sys_fchown /* 95 */ | ||
1152 | .long sys_getpriority | ||
1153 | .long sys_setpriority | ||
1154 | .long sys_ni_syscall /* old profil syscall holder */ | ||
1155 | .long sys_statfs | ||
1156 | .long sys_fstatfs /* 100 */ | ||
1157 | .long sys_ni_syscall | ||
1158 | .long sys_socketcall | ||
1159 | .long sys_syslog | ||
1160 | .long sys_setitimer | ||
1161 | .long sys_getitimer /* 105 */ | ||
1162 | .long sys_newstat | ||
1163 | .long sys_newlstat | ||
1164 | .long sys_newfstat | ||
1165 | .long sys_uname | ||
1166 | .long sys_ni_syscall /* 110 */ | ||
1167 | .long sys_vhangup | ||
1168 | .long sys_ni_syscall /* old 'idle' syscall */ | ||
1169 | .long sys_ni_syscall | ||
1170 | .long sys_wait4 | ||
1171 | .long sys_swapoff /* 115 */ | ||
1172 | .long sys_sysinfo | ||
1173 | .long sys_ipc | ||
1174 | .long sys_fsync | ||
1175 | .long sys_sigreturn | ||
1176 | .long ppc_clone /* 120 */ | ||
1177 | .long sys_setdomainname | ||
1178 | .long sys_newuname | ||
1179 | .long sys_ni_syscall | ||
1180 | .long sys_adjtimex | ||
1181 | .long sys_mprotect /* 125 */ | ||
1182 | .long sys_sigprocmask | ||
1183 | .long sys_ni_syscall /* old sys_create_module */ | ||
1184 | .long sys_init_module | ||
1185 | .long sys_delete_module | ||
1186 | .long sys_ni_syscall /* old sys_get_kernel_syms */ /* 130 */ | ||
1187 | .long sys_quotactl | ||
1188 | .long sys_getpgid | ||
1189 | .long sys_fchdir | ||
1190 | .long sys_bdflush | ||
1191 | .long sys_sysfs /* 135 */ | ||
1192 | .long sys_personality | ||
1193 | .long sys_ni_syscall /* for afs_syscall */ | ||
1194 | .long sys_setfsuid | ||
1195 | .long sys_setfsgid | ||
1196 | .long sys_llseek /* 140 */ | ||
1197 | .long sys_getdents | ||
1198 | .long ppc_select | ||
1199 | .long sys_flock | ||
1200 | .long sys_msync | ||
1201 | .long sys_readv /* 145 */ | ||
1202 | .long sys_writev | ||
1203 | .long sys_getsid | ||
1204 | .long sys_fdatasync | ||
1205 | .long sys_sysctl | ||
1206 | .long sys_mlock /* 150 */ | ||
1207 | .long sys_munlock | ||
1208 | .long sys_mlockall | ||
1209 | .long sys_munlockall | ||
1210 | .long sys_sched_setparam | ||
1211 | .long sys_sched_getparam /* 155 */ | ||
1212 | .long sys_sched_setscheduler | ||
1213 | .long sys_sched_getscheduler | ||
1214 | .long sys_sched_yield | ||
1215 | .long sys_sched_get_priority_max | ||
1216 | .long sys_sched_get_priority_min /* 160 */ | ||
1217 | .long sys_sched_rr_get_interval | ||
1218 | .long sys_nanosleep | ||
1219 | .long sys_mremap | ||
1220 | .long sys_setresuid | ||
1221 | .long sys_getresuid /* 165 */ | ||
1222 | .long sys_ni_syscall /* old sys_query_module */ | ||
1223 | .long sys_poll | ||
1224 | .long sys_nfsservctl | ||
1225 | .long sys_setresgid | ||
1226 | .long sys_getresgid /* 170 */ | ||
1227 | .long sys_prctl | ||
1228 | .long sys_rt_sigreturn | ||
1229 | .long sys_rt_sigaction | ||
1230 | .long sys_rt_sigprocmask | ||
1231 | .long sys_rt_sigpending /* 175 */ | ||
1232 | .long sys_rt_sigtimedwait | ||
1233 | .long sys_rt_sigqueueinfo | ||
1234 | .long sys_rt_sigsuspend | ||
1235 | .long sys_pread64 | ||
1236 | .long sys_pwrite64 /* 180 */ | ||
1237 | .long sys_chown | ||
1238 | .long sys_getcwd | ||
1239 | .long sys_capget | ||
1240 | .long sys_capset | ||
1241 | .long sys_sigaltstack /* 185 */ | ||
1242 | .long sys_sendfile | ||
1243 | .long sys_ni_syscall /* streams1 */ | ||
1244 | .long sys_ni_syscall /* streams2 */ | ||
1245 | .long ppc_vfork | ||
1246 | .long sys_getrlimit /* 190 */ | ||
1247 | .long sys_readahead | ||
1248 | .long sys_mmap2 | ||
1249 | .long sys_truncate64 | ||
1250 | .long sys_ftruncate64 | ||
1251 | .long sys_stat64 /* 195 */ | ||
1252 | .long sys_lstat64 | ||
1253 | .long sys_fstat64 | ||
1254 | .long sys_pciconfig_read | ||
1255 | .long sys_pciconfig_write | ||
1256 | .long sys_pciconfig_iobase /* 200 */ | ||
1257 | .long sys_ni_syscall /* 201 - reserved - MacOnLinux - new */ | ||
1258 | .long sys_getdents64 | ||
1259 | .long sys_pivot_root | ||
1260 | .long sys_fcntl64 | ||
1261 | .long sys_madvise /* 205 */ | ||
1262 | .long sys_mincore | ||
1263 | .long sys_gettid | ||
1264 | .long sys_tkill | ||
1265 | .long sys_setxattr | ||
1266 | .long sys_lsetxattr /* 210 */ | ||
1267 | .long sys_fsetxattr | ||
1268 | .long sys_getxattr | ||
1269 | .long sys_lgetxattr | ||
1270 | .long sys_fgetxattr | ||
1271 | .long sys_listxattr /* 215 */ | ||
1272 | .long sys_llistxattr | ||
1273 | .long sys_flistxattr | ||
1274 | .long sys_removexattr | ||
1275 | .long sys_lremovexattr | ||
1276 | .long sys_fremovexattr /* 220 */ | ||
1277 | .long sys_futex | ||
1278 | .long sys_sched_setaffinity | ||
1279 | .long sys_sched_getaffinity | ||
1280 | .long sys_ni_syscall | ||
1281 | .long sys_ni_syscall /* 225 - reserved for Tux */ | ||
1282 | .long sys_sendfile64 | ||
1283 | .long sys_io_setup | ||
1284 | .long sys_io_destroy | ||
1285 | .long sys_io_getevents | ||
1286 | .long sys_io_submit /* 230 */ | ||
1287 | .long sys_io_cancel | ||
1288 | .long sys_set_tid_address | ||
1289 | .long sys_fadvise64 | ||
1290 | .long sys_exit_group | ||
1291 | .long sys_lookup_dcookie /* 235 */ | ||
1292 | .long sys_epoll_create | ||
1293 | .long sys_epoll_ctl | ||
1294 | .long sys_epoll_wait | ||
1295 | .long sys_remap_file_pages | ||
1296 | .long sys_timer_create /* 240 */ | ||
1297 | .long sys_timer_settime | ||
1298 | .long sys_timer_gettime | ||
1299 | .long sys_timer_getoverrun | ||
1300 | .long sys_timer_delete | ||
1301 | .long sys_clock_settime /* 245 */ | ||
1302 | .long sys_clock_gettime | ||
1303 | .long sys_clock_getres | ||
1304 | .long sys_clock_nanosleep | ||
1305 | .long sys_swapcontext | ||
1306 | .long sys_tgkill /* 250 */ | ||
1307 | .long sys_utimes | ||
1308 | .long sys_statfs64 | ||
1309 | .long sys_fstatfs64 | ||
1310 | .long ppc_fadvise64_64 | ||
1311 | .long sys_ni_syscall /* 255 - rtas (used on ppc64) */ | ||
1312 | .long sys_debug_setcontext | ||
1313 | .long sys_ni_syscall /* 257 reserved for vserver */ | ||
1314 | .long sys_ni_syscall /* 258 reserved for new sys_remap_file_pages */ | ||
1315 | .long sys_ni_syscall /* 259 reserved for new sys_mbind */ | ||
1316 | .long sys_ni_syscall /* 260 reserved for new sys_get_mempolicy */ | ||
1317 | .long sys_ni_syscall /* 261 reserved for new sys_set_mempolicy */ | ||
1318 | .long sys_mq_open | ||
1319 | .long sys_mq_unlink | ||
1320 | .long sys_mq_timedsend | ||
1321 | .long sys_mq_timedreceive /* 265 */ | ||
1322 | .long sys_mq_notify | ||
1323 | .long sys_mq_getsetattr | ||
1324 | .long sys_kexec_load | ||
1325 | .long sys_add_key | ||
1326 | .long sys_request_key /* 270 */ | ||
1327 | .long sys_keyctl | ||
1328 | .long sys_waitid | ||
1329 | .long sys_ioprio_set | ||
1330 | .long sys_ioprio_get | ||
1331 | .long sys_inotify_init /* 275 */ | ||
1332 | .long sys_inotify_add_watch | ||
1333 | .long sys_inotify_rm_watch | ||
diff --git a/arch/ppc/kernel/ppc_ksyms.c b/arch/ppc/kernel/ppc_ksyms.c index 3a6e4bcb3c53..82adb4601348 100644 --- a/arch/ppc/kernel/ppc_ksyms.c +++ b/arch/ppc/kernel/ppc_ksyms.c | |||
@@ -93,15 +93,8 @@ EXPORT_SYMBOL(test_and_change_bit); | |||
93 | EXPORT_SYMBOL(strcpy); | 93 | EXPORT_SYMBOL(strcpy); |
94 | EXPORT_SYMBOL(strncpy); | 94 | EXPORT_SYMBOL(strncpy); |
95 | EXPORT_SYMBOL(strcat); | 95 | EXPORT_SYMBOL(strcat); |
96 | EXPORT_SYMBOL(strncat); | ||
97 | EXPORT_SYMBOL(strchr); | ||
98 | EXPORT_SYMBOL(strrchr); | ||
99 | EXPORT_SYMBOL(strpbrk); | ||
100 | EXPORT_SYMBOL(strstr); | ||
101 | EXPORT_SYMBOL(strlen); | 96 | EXPORT_SYMBOL(strlen); |
102 | EXPORT_SYMBOL(strnlen); | ||
103 | EXPORT_SYMBOL(strcmp); | 97 | EXPORT_SYMBOL(strcmp); |
104 | EXPORT_SYMBOL(strncmp); | ||
105 | EXPORT_SYMBOL(strcasecmp); | 98 | EXPORT_SYMBOL(strcasecmp); |
106 | EXPORT_SYMBOL(__div64_32); | 99 | EXPORT_SYMBOL(__div64_32); |
107 | 100 | ||
@@ -186,11 +179,15 @@ EXPORT_SYMBOL(flush_tlb_kernel_range); | |||
186 | EXPORT_SYMBOL(flush_tlb_page); | 179 | EXPORT_SYMBOL(flush_tlb_page); |
187 | EXPORT_SYMBOL(_tlbie); | 180 | EXPORT_SYMBOL(_tlbie); |
188 | #ifdef CONFIG_ALTIVEC | 181 | #ifdef CONFIG_ALTIVEC |
182 | #ifndef CONFIG_SMP | ||
189 | EXPORT_SYMBOL(last_task_used_altivec); | 183 | EXPORT_SYMBOL(last_task_used_altivec); |
184 | #endif | ||
190 | EXPORT_SYMBOL(giveup_altivec); | 185 | EXPORT_SYMBOL(giveup_altivec); |
191 | #endif /* CONFIG_ALTIVEC */ | 186 | #endif /* CONFIG_ALTIVEC */ |
192 | #ifdef CONFIG_SPE | 187 | #ifdef CONFIG_SPE |
188 | #ifndef CONFIG_SMP | ||
193 | EXPORT_SYMBOL(last_task_used_spe); | 189 | EXPORT_SYMBOL(last_task_used_spe); |
190 | #endif | ||
194 | EXPORT_SYMBOL(giveup_spe); | 191 | EXPORT_SYMBOL(giveup_spe); |
195 | #endif /* CONFIG_SPE */ | 192 | #endif /* CONFIG_SPE */ |
196 | #ifdef CONFIG_SMP | 193 | #ifdef CONFIG_SMP |
@@ -249,7 +246,6 @@ EXPORT_SYMBOL(memcpy); | |||
249 | EXPORT_SYMBOL(cacheable_memcpy); | 246 | EXPORT_SYMBOL(cacheable_memcpy); |
250 | EXPORT_SYMBOL(memset); | 247 | EXPORT_SYMBOL(memset); |
251 | EXPORT_SYMBOL(memmove); | 248 | EXPORT_SYMBOL(memmove); |
252 | EXPORT_SYMBOL(memscan); | ||
253 | EXPORT_SYMBOL(memcmp); | 249 | EXPORT_SYMBOL(memcmp); |
254 | EXPORT_SYMBOL(memchr); | 250 | EXPORT_SYMBOL(memchr); |
255 | 251 | ||
diff --git a/arch/ppc/platforms/4xx/bamboo.c b/arch/ppc/platforms/4xx/bamboo.c index 159b228eca1e..0ec53f049338 100644 --- a/arch/ppc/platforms/4xx/bamboo.c +++ b/arch/ppc/platforms/4xx/bamboo.c | |||
@@ -332,8 +332,8 @@ bamboo_early_serial_map(void) | |||
332 | port.irq = 0; | 332 | port.irq = 0; |
333 | port.uartclk = clocks.uart0; | 333 | port.uartclk = clocks.uart0; |
334 | port.regshift = 0; | 334 | port.regshift = 0; |
335 | port.iotype = SERIAL_IO_MEM; | 335 | port.iotype = UPIO_MEM; |
336 | port.flags = ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST; | 336 | port.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST; |
337 | port.line = 0; | 337 | port.line = 0; |
338 | 338 | ||
339 | if (early_serial_setup(&port) != 0) { | 339 | if (early_serial_setup(&port) != 0) { |
diff --git a/arch/ppc/platforms/4xx/bubinga.c b/arch/ppc/platforms/4xx/bubinga.c index 8110f55668c5..ce48a4f08cbb 100644 --- a/arch/ppc/platforms/4xx/bubinga.c +++ b/arch/ppc/platforms/4xx/bubinga.c | |||
@@ -97,8 +97,8 @@ bubinga_early_serial_map(void) | |||
97 | port.irq = ACTING_UART0_INT; | 97 | port.irq = ACTING_UART0_INT; |
98 | port.uartclk = uart_clock; | 98 | port.uartclk = uart_clock; |
99 | port.regshift = 0; | 99 | port.regshift = 0; |
100 | port.iotype = SERIAL_IO_MEM; | 100 | port.iotype = UPIO_MEM; |
101 | port.flags = ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST; | 101 | port.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST; |
102 | port.line = 0; | 102 | port.line = 0; |
103 | 103 | ||
104 | if (early_serial_setup(&port) != 0) { | 104 | if (early_serial_setup(&port) != 0) { |
diff --git a/arch/ppc/platforms/4xx/ebony.c b/arch/ppc/platforms/4xx/ebony.c index 64ebae19cdbb..9a828b623417 100644 --- a/arch/ppc/platforms/4xx/ebony.c +++ b/arch/ppc/platforms/4xx/ebony.c | |||
@@ -225,8 +225,8 @@ ebony_early_serial_map(void) | |||
225 | port.irq = 0; | 225 | port.irq = 0; |
226 | port.uartclk = clocks.uart0; | 226 | port.uartclk = clocks.uart0; |
227 | port.regshift = 0; | 227 | port.regshift = 0; |
228 | port.iotype = SERIAL_IO_MEM; | 228 | port.iotype = UPIO_MEM; |
229 | port.flags = ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST; | 229 | port.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST; |
230 | port.line = 0; | 230 | port.line = 0; |
231 | 231 | ||
232 | if (early_serial_setup(&port) != 0) { | 232 | if (early_serial_setup(&port) != 0) { |
diff --git a/arch/ppc/platforms/4xx/luan.c b/arch/ppc/platforms/4xx/luan.c index d810b736d9bf..21d29132aebd 100644 --- a/arch/ppc/platforms/4xx/luan.c +++ b/arch/ppc/platforms/4xx/luan.c | |||
@@ -279,8 +279,8 @@ luan_early_serial_map(void) | |||
279 | port.irq = UART0_INT; | 279 | port.irq = UART0_INT; |
280 | port.uartclk = clocks.uart0; | 280 | port.uartclk = clocks.uart0; |
281 | port.regshift = 0; | 281 | port.regshift = 0; |
282 | port.iotype = SERIAL_IO_MEM; | 282 | port.iotype = UPIO_MEM; |
283 | port.flags = ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST; | 283 | port.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST; |
284 | port.line = 0; | 284 | port.line = 0; |
285 | 285 | ||
286 | if (early_serial_setup(&port) != 0) { | 286 | if (early_serial_setup(&port) != 0) { |
diff --git a/arch/ppc/platforms/4xx/ocotea.c b/arch/ppc/platforms/4xx/ocotea.c index 73b2c98158f6..4f355b6acab2 100644 --- a/arch/ppc/platforms/4xx/ocotea.c +++ b/arch/ppc/platforms/4xx/ocotea.c | |||
@@ -248,8 +248,8 @@ ocotea_early_serial_map(void) | |||
248 | port.irq = UART0_INT; | 248 | port.irq = UART0_INT; |
249 | port.uartclk = clocks.uart0; | 249 | port.uartclk = clocks.uart0; |
250 | port.regshift = 0; | 250 | port.regshift = 0; |
251 | port.iotype = SERIAL_IO_MEM; | 251 | port.iotype = UPIO_MEM; |
252 | port.flags = ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST; | 252 | port.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST; |
253 | port.line = 0; | 253 | port.line = 0; |
254 | 254 | ||
255 | if (early_serial_setup(&port) != 0) { | 255 | if (early_serial_setup(&port) != 0) { |
diff --git a/arch/ppc/platforms/4xx/xilinx_ml300.c b/arch/ppc/platforms/4xx/xilinx_ml300.c index 0b1b77d986bf..e90d97f64f76 100644 --- a/arch/ppc/platforms/4xx/xilinx_ml300.c +++ b/arch/ppc/platforms/4xx/xilinx_ml300.c | |||
@@ -95,8 +95,8 @@ ml300_early_serial_map(void) | |||
95 | port.irq = old_ports[i].irq; | 95 | port.irq = old_ports[i].irq; |
96 | port.uartclk = old_ports[i].baud_base * 16; | 96 | port.uartclk = old_ports[i].baud_base * 16; |
97 | port.regshift = old_ports[i].iomem_reg_shift; | 97 | port.regshift = old_ports[i].iomem_reg_shift; |
98 | port.iotype = SERIAL_IO_MEM; | 98 | port.iotype = UPIO_MEM; |
99 | port.flags = ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST; | 99 | port.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST; |
100 | port.line = i; | 100 | port.line = i; |
101 | 101 | ||
102 | if (early_serial_setup(&port) != 0) { | 102 | if (early_serial_setup(&port) != 0) { |
diff --git a/arch/ppc/platforms/4xx/yucca.c b/arch/ppc/platforms/4xx/yucca.c index e60f4bd437ec..b065b8babcd3 100644 --- a/arch/ppc/platforms/4xx/yucca.c +++ b/arch/ppc/platforms/4xx/yucca.c | |||
@@ -305,8 +305,8 @@ yucca_early_serial_map(void) | |||
305 | port.irq = UART0_INT; | 305 | port.irq = UART0_INT; |
306 | port.uartclk = clocks.uart0; | 306 | port.uartclk = clocks.uart0; |
307 | port.regshift = 0; | 307 | port.regshift = 0; |
308 | port.iotype = SERIAL_IO_MEM; | 308 | port.iotype = UPIO_MEM; |
309 | port.flags = ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST; | 309 | port.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST; |
310 | port.line = 0; | 310 | port.line = 0; |
311 | 311 | ||
312 | if (early_serial_setup(&port) != 0) { | 312 | if (early_serial_setup(&port) != 0) { |
diff --git a/arch/ppc/platforms/83xx/mpc834x_sys.c b/arch/ppc/platforms/83xx/mpc834x_sys.c index 012e1e652c03..1a659bbc1860 100644 --- a/arch/ppc/platforms/83xx/mpc834x_sys.c +++ b/arch/ppc/platforms/83xx/mpc834x_sys.c | |||
@@ -301,14 +301,14 @@ platform_init(unsigned long r3, unsigned long r4, unsigned long r5, | |||
301 | struct uart_port p; | 301 | struct uart_port p; |
302 | 302 | ||
303 | memset(&p, 0, sizeof (p)); | 303 | memset(&p, 0, sizeof (p)); |
304 | p.iotype = SERIAL_IO_MEM; | 304 | p.iotype = UPIO_MEM; |
305 | p.membase = (unsigned char __iomem *)(VIRT_IMMRBAR + 0x4500); | 305 | p.membase = (unsigned char __iomem *)(VIRT_IMMRBAR + 0x4500); |
306 | p.uartclk = binfo->bi_busfreq; | 306 | p.uartclk = binfo->bi_busfreq; |
307 | 307 | ||
308 | gen550_init(0, &p); | 308 | gen550_init(0, &p); |
309 | 309 | ||
310 | memset(&p, 0, sizeof (p)); | 310 | memset(&p, 0, sizeof (p)); |
311 | p.iotype = SERIAL_IO_MEM; | 311 | p.iotype = UPIO_MEM; |
312 | p.membase = (unsigned char __iomem *)(VIRT_IMMRBAR + 0x4600); | 312 | p.membase = (unsigned char __iomem *)(VIRT_IMMRBAR + 0x4600); |
313 | p.uartclk = binfo->bi_busfreq; | 313 | p.uartclk = binfo->bi_busfreq; |
314 | 314 | ||
diff --git a/arch/ppc/platforms/85xx/mpc8540_ads.c b/arch/ppc/platforms/85xx/mpc8540_ads.c index 2eceb1e6f4eb..408d64f18e1a 100644 --- a/arch/ppc/platforms/85xx/mpc8540_ads.c +++ b/arch/ppc/platforms/85xx/mpc8540_ads.c | |||
@@ -162,14 +162,14 @@ platform_init(unsigned long r3, unsigned long r4, unsigned long r5, | |||
162 | binfo->bi_immr_base, MPC85xx_CCSRBAR_SIZE, _PAGE_IO, 0); | 162 | binfo->bi_immr_base, MPC85xx_CCSRBAR_SIZE, _PAGE_IO, 0); |
163 | 163 | ||
164 | memset(&p, 0, sizeof (p)); | 164 | memset(&p, 0, sizeof (p)); |
165 | p.iotype = SERIAL_IO_MEM; | 165 | p.iotype = UPIO_MEM; |
166 | p.membase = (void *) binfo->bi_immr_base + MPC85xx_UART0_OFFSET; | 166 | p.membase = (void *) binfo->bi_immr_base + MPC85xx_UART0_OFFSET; |
167 | p.uartclk = binfo->bi_busfreq; | 167 | p.uartclk = binfo->bi_busfreq; |
168 | 168 | ||
169 | gen550_init(0, &p); | 169 | gen550_init(0, &p); |
170 | 170 | ||
171 | memset(&p, 0, sizeof (p)); | 171 | memset(&p, 0, sizeof (p)); |
172 | p.iotype = SERIAL_IO_MEM; | 172 | p.iotype = UPIO_MEM; |
173 | p.membase = (void *) binfo->bi_immr_base + MPC85xx_UART1_OFFSET; | 173 | p.membase = (void *) binfo->bi_immr_base + MPC85xx_UART1_OFFSET; |
174 | p.uartclk = binfo->bi_busfreq; | 174 | p.uartclk = binfo->bi_busfreq; |
175 | 175 | ||
diff --git a/arch/ppc/platforms/85xx/mpc85xx_cds_common.c b/arch/ppc/platforms/85xx/mpc85xx_cds_common.c index b332ebae6bd3..1801ab392e22 100644 --- a/arch/ppc/platforms/85xx/mpc85xx_cds_common.c +++ b/arch/ppc/platforms/85xx/mpc85xx_cds_common.c | |||
@@ -534,14 +534,14 @@ platform_init(unsigned long r3, unsigned long r4, unsigned long r5, | |||
534 | binfo->bi_immr_base, MPC85xx_CCSRBAR_SIZE, _PAGE_IO, 0); | 534 | binfo->bi_immr_base, MPC85xx_CCSRBAR_SIZE, _PAGE_IO, 0); |
535 | 535 | ||
536 | memset(&p, 0, sizeof (p)); | 536 | memset(&p, 0, sizeof (p)); |
537 | p.iotype = SERIAL_IO_MEM; | 537 | p.iotype = UPIO_MEM; |
538 | p.membase = (void *) binfo->bi_immr_base + MPC85xx_UART0_OFFSET; | 538 | p.membase = (void *) binfo->bi_immr_base + MPC85xx_UART0_OFFSET; |
539 | p.uartclk = binfo->bi_busfreq; | 539 | p.uartclk = binfo->bi_busfreq; |
540 | 540 | ||
541 | gen550_init(0, &p); | 541 | gen550_init(0, &p); |
542 | 542 | ||
543 | memset(&p, 0, sizeof (p)); | 543 | memset(&p, 0, sizeof (p)); |
544 | p.iotype = SERIAL_IO_MEM; | 544 | p.iotype = UPIO_MEM; |
545 | p.membase = (void *) binfo->bi_immr_base + MPC85xx_UART1_OFFSET; | 545 | p.membase = (void *) binfo->bi_immr_base + MPC85xx_UART1_OFFSET; |
546 | p.uartclk = binfo->bi_busfreq; | 546 | p.uartclk = binfo->bi_busfreq; |
547 | 547 | ||
diff --git a/arch/ppc/platforms/85xx/sbc8560.c b/arch/ppc/platforms/85xx/sbc8560.c index e777ba824aa9..8a72221f816c 100644 --- a/arch/ppc/platforms/85xx/sbc8560.c +++ b/arch/ppc/platforms/85xx/sbc8560.c | |||
@@ -64,7 +64,7 @@ sbc8560_early_serial_map(void) | |||
64 | uart_req.irq = MPC85xx_IRQ_EXT9; | 64 | uart_req.irq = MPC85xx_IRQ_EXT9; |
65 | uart_req.flags = STD_COM_FLAGS; | 65 | uart_req.flags = STD_COM_FLAGS; |
66 | uart_req.uartclk = BASE_BAUD * 16; | 66 | uart_req.uartclk = BASE_BAUD * 16; |
67 | uart_req.iotype = SERIAL_IO_MEM; | 67 | uart_req.iotype = UPIO_MEM; |
68 | uart_req.mapbase = UARTA_ADDR; | 68 | uart_req.mapbase = UARTA_ADDR; |
69 | uart_req.membase = ioremap(uart_req.mapbase, MPC85xx_UART0_SIZE); | 69 | uart_req.membase = ioremap(uart_req.mapbase, MPC85xx_UART0_SIZE); |
70 | uart_req.type = PORT_16650; | 70 | uart_req.type = PORT_16650; |
diff --git a/arch/ppc/platforms/85xx/tqm85xx.c b/arch/ppc/platforms/85xx/tqm85xx.c index b436f4d0a3fa..a5e38ba62732 100644 --- a/arch/ppc/platforms/85xx/tqm85xx.c +++ b/arch/ppc/platforms/85xx/tqm85xx.c | |||
@@ -346,14 +346,14 @@ platform_init(unsigned long r3, unsigned long r4, unsigned long r5, | |||
346 | binfo->bi_immr_base, MPC85xx_CCSRBAR_SIZE, _PAGE_IO, 0); | 346 | binfo->bi_immr_base, MPC85xx_CCSRBAR_SIZE, _PAGE_IO, 0); |
347 | 347 | ||
348 | memset(&p, 0, sizeof (p)); | 348 | memset(&p, 0, sizeof (p)); |
349 | p.iotype = SERIAL_IO_MEM; | 349 | p.iotype = UPIO_MEM; |
350 | p.membase = (void *) binfo->bi_immr_base + MPC85xx_UART0_OFFSET; | 350 | p.membase = (void *) binfo->bi_immr_base + MPC85xx_UART0_OFFSET; |
351 | p.uartclk = binfo->bi_busfreq; | 351 | p.uartclk = binfo->bi_busfreq; |
352 | 352 | ||
353 | gen550_init(0, &p); | 353 | gen550_init(0, &p); |
354 | 354 | ||
355 | memset(&p, 0, sizeof (p)); | 355 | memset(&p, 0, sizeof (p)); |
356 | p.iotype = SERIAL_IO_MEM; | 356 | p.iotype = UPIO_MEM; |
357 | p.membase = (void *) binfo->bi_immr_base + MPC85xx_UART1_OFFSET; | 357 | p.membase = (void *) binfo->bi_immr_base + MPC85xx_UART1_OFFSET; |
358 | p.uartclk = binfo->bi_busfreq; | 358 | p.uartclk = binfo->bi_busfreq; |
359 | 359 | ||
diff --git a/arch/ppc/platforms/chestnut.c b/arch/ppc/platforms/chestnut.c index 48a4a510d598..aefcc0e7be57 100644 --- a/arch/ppc/platforms/chestnut.c +++ b/arch/ppc/platforms/chestnut.c | |||
@@ -116,7 +116,7 @@ chestnut_early_serial_map(void) | |||
116 | port.uartclk = BASE_BAUD * 16; | 116 | port.uartclk = BASE_BAUD * 16; |
117 | port.irq = UART0_INT; | 117 | port.irq = UART0_INT; |
118 | port.flags = STD_COM_FLAGS | UPF_IOREMAP; | 118 | port.flags = STD_COM_FLAGS | UPF_IOREMAP; |
119 | port.iotype = SERIAL_IO_MEM; | 119 | port.iotype = UPIO_MEM; |
120 | port.mapbase = CHESTNUT_UART0_IO_BASE; | 120 | port.mapbase = CHESTNUT_UART0_IO_BASE; |
121 | port.regshift = 0; | 121 | port.regshift = 0; |
122 | 122 | ||
diff --git a/arch/ppc/platforms/ev64260.c b/arch/ppc/platforms/ev64260.c index 32358b3fb236..ffde8f6f6302 100644 --- a/arch/ppc/platforms/ev64260.c +++ b/arch/ppc/platforms/ev64260.c | |||
@@ -330,7 +330,7 @@ ev64260_early_serial_map(void) | |||
330 | port.irq = EV64260_UART_0_IRQ; | 330 | port.irq = EV64260_UART_0_IRQ; |
331 | port.uartclk = BASE_BAUD * 16; | 331 | port.uartclk = BASE_BAUD * 16; |
332 | port.regshift = 2; | 332 | port.regshift = 2; |
333 | port.iotype = SERIAL_IO_MEM; | 333 | port.iotype = UPIO_MEM; |
334 | port.flags = STD_COM_FLAGS; | 334 | port.flags = STD_COM_FLAGS; |
335 | 335 | ||
336 | #if defined(CONFIG_SERIAL_TEXT_DEBUG) || defined(CONFIG_KGDB) | 336 | #if defined(CONFIG_SERIAL_TEXT_DEBUG) || defined(CONFIG_KGDB) |
diff --git a/arch/ppc/platforms/radstone_ppc7d.c b/arch/ppc/platforms/radstone_ppc7d.c index 708b8739ecdd..872c0a3ba3c7 100644 --- a/arch/ppc/platforms/radstone_ppc7d.c +++ b/arch/ppc/platforms/radstone_ppc7d.c | |||
@@ -100,7 +100,7 @@ static void __init ppc7d_early_serial_map(void) | |||
100 | serial_req.uartclk = UART_CLK; | 100 | serial_req.uartclk = UART_CLK; |
101 | serial_req.irq = 4; | 101 | serial_req.irq = 4; |
102 | serial_req.flags = STD_COM_FLAGS; | 102 | serial_req.flags = STD_COM_FLAGS; |
103 | serial_req.iotype = SERIAL_IO_MEM; | 103 | serial_req.iotype = UPIO_MEM; |
104 | serial_req.membase = (u_char *) PPC7D_SERIAL_0; | 104 | serial_req.membase = (u_char *) PPC7D_SERIAL_0; |
105 | 105 | ||
106 | gen550_init(0, &serial_req); | 106 | gen550_init(0, &serial_req); |
diff --git a/arch/ppc/platforms/spruce.c b/arch/ppc/platforms/spruce.c index 5ad70d357cb9..69e1de7971f2 100644 --- a/arch/ppc/platforms/spruce.c +++ b/arch/ppc/platforms/spruce.c | |||
@@ -176,8 +176,8 @@ spruce_early_serial_map(void) | |||
176 | memset(&serial_req, 0, sizeof(serial_req)); | 176 | memset(&serial_req, 0, sizeof(serial_req)); |
177 | serial_req.uartclk = uart_clk; | 177 | serial_req.uartclk = uart_clk; |
178 | serial_req.irq = UART0_INT; | 178 | serial_req.irq = UART0_INT; |
179 | serial_req.flags = ASYNC_BOOT_AUTOCONF; | 179 | serial_req.flags = UPF_BOOT_AUTOCONF; |
180 | serial_req.iotype = SERIAL_IO_MEM; | 180 | serial_req.iotype = UPIO_MEM; |
181 | serial_req.membase = (u_char *)UART0_IO_BASE; | 181 | serial_req.membase = (u_char *)UART0_IO_BASE; |
182 | serial_req.regshift = 0; | 182 | serial_req.regshift = 0; |
183 | 183 | ||
diff --git a/arch/ppc/syslib/mv64x60.c b/arch/ppc/syslib/mv64x60.c index 94ea346b7b4b..1f01b7e2376b 100644 --- a/arch/ppc/syslib/mv64x60.c +++ b/arch/ppc/syslib/mv64x60.c | |||
@@ -313,7 +313,7 @@ static struct platform_device mpsc1_device = { | |||
313 | }; | 313 | }; |
314 | #endif | 314 | #endif |
315 | 315 | ||
316 | #ifdef CONFIG_MV643XX_ETH | 316 | #if defined(CONFIG_MV643XX_ETH) || defined(CONFIG_MV643XX_ETH_MODULE) |
317 | static struct resource mv64x60_eth_shared_resources[] = { | 317 | static struct resource mv64x60_eth_shared_resources[] = { |
318 | [0] = { | 318 | [0] = { |
319 | .name = "ethernet shared base", | 319 | .name = "ethernet shared base", |
@@ -456,7 +456,7 @@ static struct platform_device *mv64x60_pd_devs[] __initdata = { | |||
456 | &mpsc0_device, | 456 | &mpsc0_device, |
457 | &mpsc1_device, | 457 | &mpsc1_device, |
458 | #endif | 458 | #endif |
459 | #ifdef CONFIG_MV643XX_ETH | 459 | #if defined(CONFIG_MV643XX_ETH) || defined(CONFIG_MV643XX_ETH_MODULE) |
460 | &mv64x60_eth_shared_device, | 460 | &mv64x60_eth_shared_device, |
461 | #endif | 461 | #endif |
462 | #ifdef CONFIG_MV643XX_ETH_0 | 462 | #ifdef CONFIG_MV643XX_ETH_0 |
diff --git a/arch/ppc/syslib/ocp.c b/arch/ppc/syslib/ocp.c index ab34b1d6072f..2fe28ded2c60 100644 --- a/arch/ppc/syslib/ocp.c +++ b/arch/ppc/syslib/ocp.c | |||
@@ -189,8 +189,8 @@ ocp_device_resume(struct device *dev) | |||
189 | struct bus_type ocp_bus_type = { | 189 | struct bus_type ocp_bus_type = { |
190 | .name = "ocp", | 190 | .name = "ocp", |
191 | .match = ocp_device_match, | 191 | .match = ocp_device_match, |
192 | .probe = ocp_driver_probe, | 192 | .probe = ocp_device_probe, |
193 | .remove = ocp_driver_remove, | 193 | .remove = ocp_device_remove, |
194 | .suspend = ocp_device_suspend, | 194 | .suspend = ocp_device_suspend, |
195 | .resume = ocp_device_resume, | 195 | .resume = ocp_device_resume, |
196 | }; | 196 | }; |
diff --git a/arch/ppc/syslib/ppc83xx_setup.c b/arch/ppc/syslib/ppc83xx_setup.c index 1b5fe9e398d4..7bada82527a8 100644 --- a/arch/ppc/syslib/ppc83xx_setup.c +++ b/arch/ppc/syslib/ppc83xx_setup.c | |||
@@ -108,7 +108,7 @@ mpc83xx_early_serial_map(void) | |||
108 | 108 | ||
109 | #if defined(CONFIG_SERIAL_TEXT_DEBUG) || defined(CONFIG_KGDB) | 109 | #if defined(CONFIG_SERIAL_TEXT_DEBUG) || defined(CONFIG_KGDB) |
110 | memset(&serial_req, 0, sizeof (serial_req)); | 110 | memset(&serial_req, 0, sizeof (serial_req)); |
111 | serial_req.iotype = SERIAL_IO_MEM; | 111 | serial_req.iotype = UPIO_MEM; |
112 | serial_req.mapbase = pdata[0].mapbase; | 112 | serial_req.mapbase = pdata[0].mapbase; |
113 | serial_req.membase = pdata[0].membase; | 113 | serial_req.membase = pdata[0].membase; |
114 | serial_req.regshift = 0; | 114 | serial_req.regshift = 0; |
diff --git a/arch/ppc/syslib/ppc85xx_setup.c b/arch/ppc/syslib/ppc85xx_setup.c index 1a47ff4b831d..e4dda43fdaa7 100644 --- a/arch/ppc/syslib/ppc85xx_setup.c +++ b/arch/ppc/syslib/ppc85xx_setup.c | |||
@@ -90,7 +90,7 @@ mpc85xx_early_serial_map(void) | |||
90 | 90 | ||
91 | #if defined(CONFIG_SERIAL_TEXT_DEBUG) || defined(CONFIG_KGDB) | 91 | #if defined(CONFIG_SERIAL_TEXT_DEBUG) || defined(CONFIG_KGDB) |
92 | memset(&serial_req, 0, sizeof (serial_req)); | 92 | memset(&serial_req, 0, sizeof (serial_req)); |
93 | serial_req.iotype = SERIAL_IO_MEM; | 93 | serial_req.iotype = UPIO_MEM; |
94 | serial_req.mapbase = pdata[0].mapbase; | 94 | serial_req.mapbase = pdata[0].mapbase; |
95 | serial_req.membase = pdata[0].membase; | 95 | serial_req.membase = pdata[0].membase; |
96 | serial_req.regshift = 0; | 96 | serial_req.regshift = 0; |
diff --git a/arch/ppc/xmon/adb.c b/arch/ppc/xmon/adb.c deleted file mode 100644 index e91384dcccac..000000000000 --- a/arch/ppc/xmon/adb.c +++ /dev/null | |||
@@ -1,212 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996 Paul Mackerras. | ||
3 | */ | ||
4 | #include "nonstdio.h" | ||
5 | #include "privinst.h" | ||
6 | |||
7 | #define scanhex xmon_scanhex | ||
8 | #define skipbl xmon_skipbl | ||
9 | |||
10 | #define ADB_B (*(volatile unsigned char *)0xf3016000) | ||
11 | #define ADB_SR (*(volatile unsigned char *)0xf3017400) | ||
12 | #define ADB_ACR (*(volatile unsigned char *)0xf3017600) | ||
13 | #define ADB_IFR (*(volatile unsigned char *)0xf3017a00) | ||
14 | |||
15 | static inline void eieio(void) { asm volatile ("eieio" : :); } | ||
16 | |||
17 | #define N_ADB_LOG 1000 | ||
18 | struct adb_log { | ||
19 | unsigned char b; | ||
20 | unsigned char ifr; | ||
21 | unsigned char acr; | ||
22 | unsigned int time; | ||
23 | } adb_log[N_ADB_LOG]; | ||
24 | int n_adb_log; | ||
25 | |||
26 | void | ||
27 | init_adb_log(void) | ||
28 | { | ||
29 | adb_log[0].b = ADB_B; | ||
30 | adb_log[0].ifr = ADB_IFR; | ||
31 | adb_log[0].acr = ADB_ACR; | ||
32 | adb_log[0].time = get_dec(); | ||
33 | n_adb_log = 0; | ||
34 | } | ||
35 | |||
36 | void | ||
37 | dump_adb_log(void) | ||
38 | { | ||
39 | unsigned t, t0; | ||
40 | struct adb_log *ap; | ||
41 | int i; | ||
42 | |||
43 | ap = adb_log; | ||
44 | t0 = ap->time; | ||
45 | for (i = 0; i <= n_adb_log; ++i, ++ap) { | ||
46 | t = t0 - ap->time; | ||
47 | printf("b=%x ifr=%x acr=%x at %d.%.7d\n", ap->b, ap->ifr, ap->acr, | ||
48 | t / 1000000000, (t % 1000000000) / 100); | ||
49 | } | ||
50 | } | ||
51 | |||
52 | void | ||
53 | adb_chklog(void) | ||
54 | { | ||
55 | struct adb_log *ap = &adb_log[n_adb_log + 1]; | ||
56 | |||
57 | ap->b = ADB_B; | ||
58 | ap->ifr = ADB_IFR; | ||
59 | ap->acr = ADB_ACR; | ||
60 | if (ap->b != ap[-1].b || (ap->ifr & 4) != (ap[-1].ifr & 4) | ||
61 | || ap->acr != ap[-1].acr) { | ||
62 | ap->time = get_dec(); | ||
63 | ++n_adb_log; | ||
64 | } | ||
65 | } | ||
66 | |||
67 | int | ||
68 | adb_bitwait(int bmask, int bval, int fmask, int fval) | ||
69 | { | ||
70 | int i; | ||
71 | struct adb_log *ap; | ||
72 | |||
73 | for (i = 10000; i > 0; --i) { | ||
74 | adb_chklog(); | ||
75 | ap = &adb_log[n_adb_log]; | ||
76 | if ((ap->b & bmask) == bval && (ap->ifr & fmask) == fval) | ||
77 | return 0; | ||
78 | } | ||
79 | return -1; | ||
80 | } | ||
81 | |||
82 | int | ||
83 | adb_wait(void) | ||
84 | { | ||
85 | if (adb_bitwait(0, 0, 4, 4) < 0) { | ||
86 | printf("adb: ready wait timeout\n"); | ||
87 | return -1; | ||
88 | } | ||
89 | return 0; | ||
90 | } | ||
91 | |||
92 | void | ||
93 | adb_readin(void) | ||
94 | { | ||
95 | int i, j; | ||
96 | unsigned char d[64]; | ||
97 | |||
98 | if (ADB_B & 8) { | ||
99 | printf("ADB_B: %x\n", ADB_B); | ||
100 | return; | ||
101 | } | ||
102 | i = 0; | ||
103 | adb_wait(); | ||
104 | j = ADB_SR; | ||
105 | eieio(); | ||
106 | ADB_B &= ~0x20; | ||
107 | eieio(); | ||
108 | for (;;) { | ||
109 | if (adb_wait() < 0) | ||
110 | break; | ||
111 | d[i++] = ADB_SR; | ||
112 | eieio(); | ||
113 | if (ADB_B & 8) | ||
114 | break; | ||
115 | ADB_B ^= 0x10; | ||
116 | eieio(); | ||
117 | } | ||
118 | ADB_B |= 0x30; | ||
119 | if (adb_wait() == 0) | ||
120 | j = ADB_SR; | ||
121 | for (j = 0; j < i; ++j) | ||
122 | printf("%.2x ", d[j]); | ||
123 | printf("\n"); | ||
124 | } | ||
125 | |||
126 | int | ||
127 | adb_write(unsigned char *d, int i) | ||
128 | { | ||
129 | int j; | ||
130 | unsigned x; | ||
131 | |||
132 | if ((ADB_B & 8) == 0) { | ||
133 | printf("r: "); | ||
134 | adb_readin(); | ||
135 | } | ||
136 | for (;;) { | ||
137 | ADB_ACR = 0x1c; | ||
138 | eieio(); | ||
139 | ADB_SR = d[0]; | ||
140 | eieio(); | ||
141 | ADB_B &= ~0x20; | ||
142 | eieio(); | ||
143 | if (ADB_B & 8) | ||
144 | break; | ||
145 | ADB_ACR = 0xc; | ||
146 | eieio(); | ||
147 | ADB_B |= 0x20; | ||
148 | eieio(); | ||
149 | adb_readin(); | ||
150 | } | ||
151 | adb_wait(); | ||
152 | for (j = 1; j < i; ++j) { | ||
153 | ADB_SR = d[j]; | ||
154 | eieio(); | ||
155 | ADB_B ^= 0x10; | ||
156 | eieio(); | ||
157 | if (adb_wait() < 0) | ||
158 | break; | ||
159 | } | ||
160 | ADB_ACR = 0xc; | ||
161 | eieio(); | ||
162 | x = ADB_SR; | ||
163 | eieio(); | ||
164 | ADB_B |= 0x30; | ||
165 | return j; | ||
166 | } | ||
167 | |||
168 | void | ||
169 | adbcmds(void) | ||
170 | { | ||
171 | char cmd; | ||
172 | unsigned rtcu, rtcl, dec, pdec, x; | ||
173 | int i, j; | ||
174 | unsigned char d[64]; | ||
175 | |||
176 | cmd = skipbl(); | ||
177 | switch (cmd) { | ||
178 | case 't': | ||
179 | for (;;) { | ||
180 | rtcl = get_rtcl(); | ||
181 | rtcu = get_rtcu(); | ||
182 | dec = get_dec(); | ||
183 | printf("rtc u=%u l=%u dec=%x (%d = %d.%.7d)\n", | ||
184 | rtcu, rtcl, dec, pdec - dec, (pdec - dec) / 1000000000, | ||
185 | ((pdec - dec) % 1000000000) / 100); | ||
186 | pdec = dec; | ||
187 | if (cmd == 'x') | ||
188 | break; | ||
189 | while (xmon_read(stdin, &cmd, 1) != 1) | ||
190 | ; | ||
191 | } | ||
192 | break; | ||
193 | case 'r': | ||
194 | init_adb_log(); | ||
195 | while (adb_bitwait(8, 0, 0, 0) == 0) | ||
196 | adb_readin(); | ||
197 | break; | ||
198 | case 'w': | ||
199 | i = 0; | ||
200 | while (scanhex(&x)) | ||
201 | d[i++] = x; | ||
202 | init_adb_log(); | ||
203 | j = adb_write(d, i); | ||
204 | printf("sent %d bytes\n", j); | ||
205 | while (adb_bitwait(8, 0, 0, 0) == 0) | ||
206 | adb_readin(); | ||
207 | break; | ||
208 | case 'l': | ||
209 | dump_adb_log(); | ||
210 | break; | ||
211 | } | ||
212 | } | ||
diff --git a/arch/ppc/xmon/start.c b/arch/ppc/xmon/start.c index 4344cbe9b5c5..ff86b2d814cb 100644 --- a/arch/ppc/xmon/start.c +++ b/arch/ppc/xmon/start.c | |||
@@ -6,16 +6,11 @@ | |||
6 | #include <asm/machdep.h> | 6 | #include <asm/machdep.h> |
7 | #include <asm/io.h> | 7 | #include <asm/io.h> |
8 | #include <asm/page.h> | 8 | #include <asm/page.h> |
9 | #include <linux/adb.h> | ||
10 | #include <linux/pmu.h> | ||
11 | #include <linux/cuda.h> | ||
12 | #include <linux/kernel.h> | 9 | #include <linux/kernel.h> |
13 | #include <linux/errno.h> | 10 | #include <linux/errno.h> |
14 | #include <linux/sysrq.h> | 11 | #include <linux/sysrq.h> |
15 | #include <linux/bitops.h> | 12 | #include <linux/bitops.h> |
16 | #include <asm/xmon.h> | 13 | #include <asm/xmon.h> |
17 | #include <asm/prom.h> | ||
18 | #include <asm/bootx.h> | ||
19 | #include <asm/machdep.h> | 14 | #include <asm/machdep.h> |
20 | #include <asm/errno.h> | 15 | #include <asm/errno.h> |
21 | #include <asm/processor.h> | 16 | #include <asm/processor.h> |
@@ -26,9 +21,7 @@ static volatile unsigned char *sccc, *sccd; | |||
26 | unsigned int TXRDY, RXRDY, DLAB; | 21 | unsigned int TXRDY, RXRDY, DLAB; |
27 | static int xmon_expect(const char *str, unsigned int timeout); | 22 | static int xmon_expect(const char *str, unsigned int timeout); |
28 | 23 | ||
29 | static int use_screen; | ||
30 | static int via_modem; | 24 | static int via_modem; |
31 | static int xmon_use_sccb; | ||
32 | 25 | ||
33 | #define TB_SPEED 25000000 | 26 | #define TB_SPEED 25000000 |
34 | 27 | ||
@@ -46,47 +39,6 @@ void buf_access(void) | |||
46 | sccd[3] &= ~DLAB; /* reset DLAB */ | 39 | sccd[3] &= ~DLAB; /* reset DLAB */ |
47 | } | 40 | } |
48 | 41 | ||
49 | extern int adb_init(void); | ||
50 | |||
51 | #ifdef CONFIG_PPC_CHRP | ||
52 | /* | ||
53 | * This looks in the "ranges" property for the primary PCI host bridge | ||
54 | * to find the physical address of the start of PCI/ISA I/O space. | ||
55 | * It is basically a cut-down version of pci_process_bridge_OF_ranges. | ||
56 | */ | ||
57 | static unsigned long chrp_find_phys_io_base(void) | ||
58 | { | ||
59 | struct device_node *node; | ||
60 | unsigned int *ranges; | ||
61 | unsigned long base = CHRP_ISA_IO_BASE; | ||
62 | int rlen = 0; | ||
63 | int np; | ||
64 | |||
65 | node = find_devices("isa"); | ||
66 | if (node != NULL) { | ||
67 | node = node->parent; | ||
68 | if (node == NULL || node->type == NULL | ||
69 | || strcmp(node->type, "pci") != 0) | ||
70 | node = NULL; | ||
71 | } | ||
72 | if (node == NULL) | ||
73 | node = find_devices("pci"); | ||
74 | if (node == NULL) | ||
75 | return base; | ||
76 | |||
77 | ranges = (unsigned int *) get_property(node, "ranges", &rlen); | ||
78 | np = prom_n_addr_cells(node) + 5; | ||
79 | while ((rlen -= np * sizeof(unsigned int)) >= 0) { | ||
80 | if ((ranges[0] >> 24) == 1 && ranges[2] == 0) { | ||
81 | /* I/O space starting at 0, grab the phys base */ | ||
82 | base = ranges[np - 3]; | ||
83 | break; | ||
84 | } | ||
85 | ranges += np; | ||
86 | } | ||
87 | return base; | ||
88 | } | ||
89 | #endif /* CONFIG_PPC_CHRP */ | ||
90 | 42 | ||
91 | #ifdef CONFIG_MAGIC_SYSRQ | 43 | #ifdef CONFIG_MAGIC_SYSRQ |
92 | static void sysrq_handle_xmon(int key, struct pt_regs *regs, | 44 | static void sysrq_handle_xmon(int key, struct pt_regs *regs, |
@@ -109,22 +61,6 @@ xmon_map_scc(void) | |||
109 | #ifdef CONFIG_PPC_MULTIPLATFORM | 61 | #ifdef CONFIG_PPC_MULTIPLATFORM |
110 | volatile unsigned char *base; | 62 | volatile unsigned char *base; |
111 | 63 | ||
112 | #ifdef CONFIG_PPC_CHRP | ||
113 | base = (volatile unsigned char *) isa_io_base; | ||
114 | if (_machine == _MACH_chrp) | ||
115 | base = (volatile unsigned char *) | ||
116 | ioremap(chrp_find_phys_io_base(), 0x1000); | ||
117 | |||
118 | sccc = base + 0x3fd; | ||
119 | sccd = base + 0x3f8; | ||
120 | if (xmon_use_sccb) { | ||
121 | sccc -= 0x100; | ||
122 | sccd -= 0x100; | ||
123 | } | ||
124 | TXRDY = 0x20; | ||
125 | RXRDY = 1; | ||
126 | DLAB = 0x80; | ||
127 | #endif /* CONFIG_PPC_CHRP */ | ||
128 | #elif defined(CONFIG_GEMINI) | 64 | #elif defined(CONFIG_GEMINI) |
129 | /* should already be mapped by the kernel boot */ | 65 | /* should already be mapped by the kernel boot */ |
130 | sccc = (volatile unsigned char *) 0xffeffb0d; | 66 | sccc = (volatile unsigned char *) 0xffeffb0d; |
@@ -143,22 +79,9 @@ xmon_map_scc(void) | |||
143 | register_sysrq_key('x', &sysrq_xmon_op); | 79 | register_sysrq_key('x', &sysrq_xmon_op); |
144 | } | 80 | } |
145 | 81 | ||
146 | static int scc_initialized = 0; | 82 | static int scc_initialized; |
147 | 83 | ||
148 | void xmon_init_scc(void); | 84 | void xmon_init_scc(void); |
149 | extern void cuda_poll(void); | ||
150 | |||
151 | static inline void do_poll_adb(void) | ||
152 | { | ||
153 | #ifdef CONFIG_ADB_PMU | ||
154 | if (sys_ctrler == SYS_CTRLER_PMU) | ||
155 | pmu_poll_adb(); | ||
156 | #endif /* CONFIG_ADB_PMU */ | ||
157 | #ifdef CONFIG_ADB_CUDA | ||
158 | if (sys_ctrler == SYS_CTRLER_CUDA) | ||
159 | cuda_poll(); | ||
160 | #endif /* CONFIG_ADB_CUDA */ | ||
161 | } | ||
162 | 85 | ||
163 | int | 86 | int |
164 | xmon_write(void *handle, void *ptr, int nb) | 87 | xmon_write(void *handle, void *ptr, int nb) |
@@ -176,20 +99,12 @@ xmon_write(void *handle, void *ptr, int nb) | |||
176 | break; | 99 | break; |
177 | #endif | 100 | #endif |
178 | 101 | ||
179 | #ifdef CONFIG_BOOTX_TEXT | ||
180 | if (use_screen) { | ||
181 | /* write it on the screen */ | ||
182 | for (i = 0; i < nb; ++i) | ||
183 | btext_drawchar(*p++); | ||
184 | goto out; | ||
185 | } | ||
186 | #endif | ||
187 | if (!scc_initialized) | 102 | if (!scc_initialized) |
188 | xmon_init_scc(); | 103 | xmon_init_scc(); |
189 | ct = 0; | 104 | ct = 0; |
190 | for (i = 0; i < nb; ++i) { | 105 | for (i = 0; i < nb; ++i) { |
191 | while ((*sccc & TXRDY) == 0) | 106 | while ((*sccc & TXRDY) == 0) |
192 | do_poll_adb(); | 107 | ; |
193 | c = p[i]; | 108 | c = p[i]; |
194 | if (c == '\n' && !ct) { | 109 | if (c == '\n' && !ct) { |
195 | c = '\r'; | 110 | c = '\r'; |
@@ -203,7 +118,6 @@ xmon_write(void *handle, void *ptr, int nb) | |||
203 | eieio(); | 118 | eieio(); |
204 | } | 119 | } |
205 | 120 | ||
206 | out: | ||
207 | #ifdef CONFIG_SMP | 121 | #ifdef CONFIG_SMP |
208 | if (!locked) | 122 | if (!locked) |
209 | clear_bit(0, &xmon_write_lock); | 123 | clear_bit(0, &xmon_write_lock); |
@@ -212,65 +126,7 @@ xmon_write(void *handle, void *ptr, int nb) | |||
212 | } | 126 | } |
213 | 127 | ||
214 | int xmon_wants_key; | 128 | int xmon_wants_key; |
215 | int xmon_adb_keycode; | ||
216 | |||
217 | #ifdef CONFIG_BOOTX_TEXT | ||
218 | static int xmon_adb_shiftstate; | ||
219 | |||
220 | static unsigned char xmon_keytab[128] = | ||
221 | "asdfhgzxcv\000bqwer" /* 0x00 - 0x0f */ | ||
222 | "yt123465=97-80]o" /* 0x10 - 0x1f */ | ||
223 | "u[ip\rlj'k;\\,/nm." /* 0x20 - 0x2f */ | ||
224 | "\t `\177\0\033\0\0\0\0\0\0\0\0\0\0" /* 0x30 - 0x3f */ | ||
225 | "\0.\0*\0+\0\0\0\0\0/\r\0-\0" /* 0x40 - 0x4f */ | ||
226 | "\0\0000123456789\0\0\0"; /* 0x50 - 0x5f */ | ||
227 | |||
228 | static unsigned char xmon_shift_keytab[128] = | ||
229 | "ASDFHGZXCV\000BQWER" /* 0x00 - 0x0f */ | ||
230 | "YT!@#$^%+(&_*)}O" /* 0x10 - 0x1f */ | ||
231 | "U{IP\rLJ\"K:|<?NM>" /* 0x20 - 0x2f */ | ||
232 | "\t ~\177\0\033\0\0\0\0\0\0\0\0\0\0" /* 0x30 - 0x3f */ | ||
233 | "\0.\0*\0+\0\0\0\0\0/\r\0-\0" /* 0x40 - 0x4f */ | ||
234 | "\0\0000123456789\0\0\0"; /* 0x50 - 0x5f */ | ||
235 | |||
236 | static int | ||
237 | xmon_get_adb_key(void) | ||
238 | { | ||
239 | int k, t, on; | ||
240 | 129 | ||
241 | xmon_wants_key = 1; | ||
242 | for (;;) { | ||
243 | xmon_adb_keycode = -1; | ||
244 | t = 0; | ||
245 | on = 0; | ||
246 | do { | ||
247 | if (--t < 0) { | ||
248 | on = 1 - on; | ||
249 | btext_drawchar(on? 0xdb: 0x20); | ||
250 | btext_drawchar('\b'); | ||
251 | t = 200000; | ||
252 | } | ||
253 | do_poll_adb(); | ||
254 | } while (xmon_adb_keycode == -1); | ||
255 | k = xmon_adb_keycode; | ||
256 | if (on) | ||
257 | btext_drawstring(" \b"); | ||
258 | |||
259 | /* test for shift keys */ | ||
260 | if ((k & 0x7f) == 0x38 || (k & 0x7f) == 0x7b) { | ||
261 | xmon_adb_shiftstate = (k & 0x80) == 0; | ||
262 | continue; | ||
263 | } | ||
264 | if (k >= 0x80) | ||
265 | continue; /* ignore up transitions */ | ||
266 | k = (xmon_adb_shiftstate? xmon_shift_keytab: xmon_keytab)[k]; | ||
267 | if (k != 0) | ||
268 | break; | ||
269 | } | ||
270 | xmon_wants_key = 0; | ||
271 | return k; | ||
272 | } | ||
273 | #endif /* CONFIG_BOOTX_TEXT */ | ||
274 | 130 | ||
275 | int | 131 | int |
276 | xmon_read(void *handle, void *ptr, int nb) | 132 | xmon_read(void *handle, void *ptr, int nb) |
@@ -278,18 +134,11 @@ xmon_read(void *handle, void *ptr, int nb) | |||
278 | char *p = ptr; | 134 | char *p = ptr; |
279 | int i; | 135 | int i; |
280 | 136 | ||
281 | #ifdef CONFIG_BOOTX_TEXT | ||
282 | if (use_screen) { | ||
283 | for (i = 0; i < nb; ++i) | ||
284 | *p++ = xmon_get_adb_key(); | ||
285 | return i; | ||
286 | } | ||
287 | #endif | ||
288 | if (!scc_initialized) | 137 | if (!scc_initialized) |
289 | xmon_init_scc(); | 138 | xmon_init_scc(); |
290 | for (i = 0; i < nb; ++i) { | 139 | for (i = 0; i < nb; ++i) { |
291 | while ((*sccc & RXRDY) == 0) | 140 | while ((*sccc & RXRDY) == 0) |
292 | do_poll_adb(); | 141 | ; |
293 | buf_access(); | 142 | buf_access(); |
294 | *p++ = *sccd; | 143 | *p++ = *sccd; |
295 | } | 144 | } |
@@ -300,7 +149,7 @@ int | |||
300 | xmon_read_poll(void) | 149 | xmon_read_poll(void) |
301 | { | 150 | { |
302 | if ((*sccc & RXRDY) == 0) { | 151 | if ((*sccc & RXRDY) == 0) { |
303 | do_poll_adb(); | 152 | ; |
304 | return -1; | 153 | return -1; |
305 | } | 154 | } |
306 | buf_access(); | 155 | buf_access(); |
@@ -310,15 +159,6 @@ xmon_read_poll(void) | |||
310 | void | 159 | void |
311 | xmon_init_scc(void) | 160 | xmon_init_scc(void) |
312 | { | 161 | { |
313 | if ( _machine == _MACH_chrp ) | ||
314 | { | ||
315 | sccd[3] = 0x83; eieio(); /* LCR = 8N1 + DLAB */ | ||
316 | sccd[0] = 12; eieio(); /* DLL = 9600 baud */ | ||
317 | sccd[1] = 0; eieio(); | ||
318 | sccd[2] = 0; eieio(); /* FCR = 0 */ | ||
319 | sccd[3] = 3; eieio(); /* LCR = 8N1 */ | ||
320 | sccd[1] = 0; eieio(); /* IER = 0 */ | ||
321 | } | ||
322 | scc_initialized = 1; | 162 | scc_initialized = 1; |
323 | if (via_modem) { | 163 | if (via_modem) { |
324 | for (;;) { | 164 | for (;;) { |
@@ -334,22 +174,6 @@ xmon_init_scc(void) | |||
334 | } | 174 | } |
335 | } | 175 | } |
336 | 176 | ||
337 | #if 0 | ||
338 | extern int (*prom_entry)(void *); | ||
339 | |||
340 | int | ||
341 | xmon_exit(void) | ||
342 | { | ||
343 | struct prom_args { | ||
344 | char *service; | ||
345 | } args; | ||
346 | |||
347 | for (;;) { | ||
348 | args.service = "exit"; | ||
349 | (*prom_entry)(&args); | ||
350 | } | ||
351 | } | ||
352 | #endif | ||
353 | 177 | ||
354 | void *xmon_stdin; | 178 | void *xmon_stdin; |
355 | void *xmon_stdout; | 179 | void *xmon_stdout; |
diff --git a/arch/ppc/xmon/xmon.c b/arch/ppc/xmon/xmon.c index bdaf6597b4c2..06fa44b5c647 100644 --- a/arch/ppc/xmon/xmon.c +++ b/arch/ppc/xmon/xmon.c | |||
@@ -12,8 +12,6 @@ | |||
12 | #include <linux/kallsyms.h> | 12 | #include <linux/kallsyms.h> |
13 | #include <asm/ptrace.h> | 13 | #include <asm/ptrace.h> |
14 | #include <asm/string.h> | 14 | #include <asm/string.h> |
15 | #include <asm/prom.h> | ||
16 | #include <asm/bootx.h> | ||
17 | #include <asm/machdep.h> | 15 | #include <asm/machdep.h> |
18 | #include <asm/xmon.h> | 16 | #include <asm/xmon.h> |
19 | #include "nonstdio.h" | 17 | #include "nonstdio.h" |
@@ -101,9 +99,6 @@ void cacheflush(void); | |||
101 | static void cpu_cmd(void); | 99 | static void cpu_cmd(void); |
102 | #endif /* CONFIG_SMP */ | 100 | #endif /* CONFIG_SMP */ |
103 | static void csum(void); | 101 | static void csum(void); |
104 | #ifdef CONFIG_BOOTX_TEXT | ||
105 | static void vidcmds(void); | ||
106 | #endif | ||
107 | static void bootcmds(void); | 102 | static void bootcmds(void); |
108 | static void proccall(void); | 103 | static void proccall(void); |
109 | static void printtime(void); | 104 | static void printtime(void); |
@@ -522,11 +517,6 @@ cmds(struct pt_regs *excp) | |||
522 | cpu_cmd(); | 517 | cpu_cmd(); |
523 | break; | 518 | break; |
524 | #endif /* CONFIG_SMP */ | 519 | #endif /* CONFIG_SMP */ |
525 | #ifdef CONFIG_BOOTX_TEXT | ||
526 | case 'v': | ||
527 | vidcmds(); | ||
528 | break; | ||
529 | #endif | ||
530 | case 'z': | 520 | case 'z': |
531 | bootcmds(); | 521 | bootcmds(); |
532 | break; | 522 | break; |
@@ -618,43 +608,6 @@ static void cpu_cmd(void) | |||
618 | } | 608 | } |
619 | #endif /* CONFIG_SMP */ | 609 | #endif /* CONFIG_SMP */ |
620 | 610 | ||
621 | #ifdef CONFIG_BOOTX_TEXT | ||
622 | extern boot_infos_t disp_bi; | ||
623 | |||
624 | static void vidcmds(void) | ||
625 | { | ||
626 | int c = inchar(); | ||
627 | unsigned int val, w; | ||
628 | extern int boot_text_mapped; | ||
629 | |||
630 | if (!boot_text_mapped) | ||
631 | return; | ||
632 | if (c != '\n' && scanhex(&val)) { | ||
633 | switch (c) { | ||
634 | case 'd': | ||
635 | w = disp_bi.dispDeviceRowBytes | ||
636 | / (disp_bi.dispDeviceDepth >> 3); | ||
637 | disp_bi.dispDeviceDepth = val; | ||
638 | disp_bi.dispDeviceRowBytes = w * (val >> 3); | ||
639 | return; | ||
640 | case 'p': | ||
641 | disp_bi.dispDeviceRowBytes = val; | ||
642 | return; | ||
643 | case 'w': | ||
644 | disp_bi.dispDeviceRect[2] = val; | ||
645 | return; | ||
646 | case 'h': | ||
647 | disp_bi.dispDeviceRect[3] = val; | ||
648 | return; | ||
649 | } | ||
650 | } | ||
651 | printf("W = %d (0x%x) H = %d (0x%x) D = %d (0x%x) P = %d (0x%x)\n", | ||
652 | disp_bi.dispDeviceRect[2], disp_bi.dispDeviceRect[2], | ||
653 | disp_bi.dispDeviceRect[3], disp_bi.dispDeviceRect[3], | ||
654 | disp_bi.dispDeviceDepth, disp_bi.dispDeviceDepth, | ||
655 | disp_bi.dispDeviceRowBytes, disp_bi.dispDeviceRowBytes); | ||
656 | } | ||
657 | #endif /* CONFIG_BOOTX_TEXT */ | ||
658 | 611 | ||
659 | static unsigned short fcstab[256] = { | 612 | static unsigned short fcstab[256] = { |
660 | 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf, | 613 | 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf, |
@@ -1020,7 +973,6 @@ dump_hash_table(void) | |||
1020 | } | 973 | } |
1021 | #else | 974 | #else |
1022 | 975 | ||
1023 | #ifndef CONFIG_PPC64BRIDGE | ||
1024 | static void | 976 | static void |
1025 | dump_hash_table_seg(unsigned seg, unsigned start, unsigned end) | 977 | dump_hash_table_seg(unsigned seg, unsigned start, unsigned end) |
1026 | { | 978 | { |
@@ -1079,66 +1031,6 @@ dump_hash_table_seg(unsigned seg, unsigned start, unsigned end) | |||
1079 | printf(" ... %x\n", last_va); | 1031 | printf(" ... %x\n", last_va); |
1080 | } | 1032 | } |
1081 | 1033 | ||
1082 | #else /* CONFIG_PPC64BRIDGE */ | ||
1083 | static void | ||
1084 | dump_hash_table_seg(unsigned seg, unsigned start, unsigned end) | ||
1085 | { | ||
1086 | extern void *Hash; | ||
1087 | extern unsigned long Hash_size; | ||
1088 | unsigned *htab = Hash; | ||
1089 | unsigned hsize = Hash_size; | ||
1090 | unsigned v, hmask, va, last_va; | ||
1091 | int found, last_found, i; | ||
1092 | unsigned *hg, w1, last_w2, last_va0; | ||
1093 | |||
1094 | last_found = 0; | ||
1095 | hmask = hsize / 128 - 1; | ||
1096 | va = start; | ||
1097 | start = (start >> 12) & 0xffff; | ||
1098 | end = (end >> 12) & 0xffff; | ||
1099 | for (v = start; v < end; ++v) { | ||
1100 | found = 0; | ||
1101 | hg = htab + (((v ^ seg) & hmask) * 32); | ||
1102 | w1 = 1 | (seg << 12) | ((v & 0xf800) >> 4); | ||
1103 | for (i = 0; i < 8; ++i, hg += 4) { | ||
1104 | if (hg[1] == w1) { | ||
1105 | found = 1; | ||
1106 | break; | ||
1107 | } | ||
1108 | } | ||
1109 | if (!found) { | ||
1110 | w1 ^= 2; | ||
1111 | hg = htab + ((~(v ^ seg) & hmask) * 32); | ||
1112 | for (i = 0; i < 8; ++i, hg += 4) { | ||
1113 | if (hg[1] == w1) { | ||
1114 | found = 1; | ||
1115 | break; | ||
1116 | } | ||
1117 | } | ||
1118 | } | ||
1119 | if (!(last_found && found && (hg[3] & ~0x180) == last_w2 + 4096)) { | ||
1120 | if (last_found) { | ||
1121 | if (last_va != last_va0) | ||
1122 | printf(" ... %x", last_va); | ||
1123 | printf("\n"); | ||
1124 | } | ||
1125 | if (found) { | ||
1126 | printf("%x to %x", va, hg[3]); | ||
1127 | last_va0 = va; | ||
1128 | } | ||
1129 | last_found = found; | ||
1130 | } | ||
1131 | if (found) { | ||
1132 | last_w2 = hg[3] & ~0x180; | ||
1133 | last_va = va; | ||
1134 | } | ||
1135 | va += 4096; | ||
1136 | } | ||
1137 | if (last_found) | ||
1138 | printf(" ... %x\n", last_va); | ||
1139 | } | ||
1140 | #endif /* CONFIG_PPC64BRIDGE */ | ||
1141 | |||
1142 | static unsigned hash_ctx; | 1034 | static unsigned hash_ctx; |
1143 | static unsigned hash_start; | 1035 | static unsigned hash_start; |
1144 | static unsigned hash_end; | 1036 | static unsigned hash_end; |
diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig index b66602ad7b33..b7ca5bf9acfc 100644 --- a/arch/s390/Kconfig +++ b/arch/s390/Kconfig | |||
@@ -80,6 +80,10 @@ config HOTPLUG_CPU | |||
80 | can be controlled through /sys/devices/system/cpu/cpu#. | 80 | can be controlled through /sys/devices/system/cpu/cpu#. |
81 | Say N if you want to disable CPU hotplug. | 81 | Say N if you want to disable CPU hotplug. |
82 | 82 | ||
83 | config DEFAULT_MIGRATION_COST | ||
84 | int | ||
85 | default "1000000" | ||
86 | |||
83 | config MATHEMU | 87 | config MATHEMU |
84 | bool "IEEE FPU emulation" | 88 | bool "IEEE FPU emulation" |
85 | depends on MARCH_G5 | 89 | depends on MARCH_G5 |
diff --git a/arch/s390/defconfig b/arch/s390/defconfig index 7d23edc6facb..f8d0cd540a06 100644 --- a/arch/s390/defconfig +++ b/arch/s390/defconfig | |||
@@ -1,19 +1,17 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.15-rc2 | 3 | # Linux kernel version: 2.6.16-rc2 |
4 | # Mon Nov 21 13:51:30 2005 | 4 | # Wed Feb 8 10:44:39 2006 |
5 | # | 5 | # |
6 | CONFIG_MMU=y | 6 | CONFIG_MMU=y |
7 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | 7 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y |
8 | CONFIG_GENERIC_CALIBRATE_DELAY=y | 8 | CONFIG_GENERIC_CALIBRATE_DELAY=y |
9 | CONFIG_S390=y | 9 | CONFIG_S390=y |
10 | CONFIG_UID16=y | ||
11 | 10 | ||
12 | # | 11 | # |
13 | # Code maturity level options | 12 | # Code maturity level options |
14 | # | 13 | # |
15 | CONFIG_EXPERIMENTAL=y | 14 | CONFIG_EXPERIMENTAL=y |
16 | CONFIG_CLEAN_COMPILE=y | ||
17 | CONFIG_LOCK_KERNEL=y | 15 | CONFIG_LOCK_KERNEL=y |
18 | CONFIG_INIT_ENV_ARG_LIMIT=32 | 16 | CONFIG_INIT_ENV_ARG_LIMIT=32 |
19 | 17 | ||
@@ -29,18 +27,20 @@ CONFIG_POSIX_MQUEUE=y | |||
29 | CONFIG_SYSCTL=y | 27 | CONFIG_SYSCTL=y |
30 | CONFIG_AUDIT=y | 28 | CONFIG_AUDIT=y |
31 | # CONFIG_AUDITSYSCALL is not set | 29 | # CONFIG_AUDITSYSCALL is not set |
32 | CONFIG_HOTPLUG=y | ||
33 | CONFIG_KOBJECT_UEVENT=y | ||
34 | CONFIG_IKCONFIG=y | 30 | CONFIG_IKCONFIG=y |
35 | CONFIG_IKCONFIG_PROC=y | 31 | CONFIG_IKCONFIG_PROC=y |
36 | # CONFIG_CPUSETS is not set | 32 | # CONFIG_CPUSETS is not set |
37 | CONFIG_INITRAMFS_SOURCE="" | 33 | CONFIG_INITRAMFS_SOURCE="" |
34 | CONFIG_UID16=y | ||
35 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | ||
38 | # CONFIG_EMBEDDED is not set | 36 | # CONFIG_EMBEDDED is not set |
39 | CONFIG_KALLSYMS=y | 37 | CONFIG_KALLSYMS=y |
40 | # CONFIG_KALLSYMS_ALL is not set | 38 | # CONFIG_KALLSYMS_ALL is not set |
41 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 39 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
40 | CONFIG_HOTPLUG=y | ||
42 | CONFIG_PRINTK=y | 41 | CONFIG_PRINTK=y |
43 | CONFIG_BUG=y | 42 | CONFIG_BUG=y |
43 | CONFIG_ELF_CORE=y | ||
44 | CONFIG_BASE_FULL=y | 44 | CONFIG_BASE_FULL=y |
45 | CONFIG_FUTEX=y | 45 | CONFIG_FUTEX=y |
46 | CONFIG_EPOLL=y | 46 | CONFIG_EPOLL=y |
@@ -49,8 +49,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0 | |||
49 | CONFIG_CC_ALIGN_LABELS=0 | 49 | CONFIG_CC_ALIGN_LABELS=0 |
50 | CONFIG_CC_ALIGN_LOOPS=0 | 50 | CONFIG_CC_ALIGN_LOOPS=0 |
51 | CONFIG_CC_ALIGN_JUMPS=0 | 51 | CONFIG_CC_ALIGN_JUMPS=0 |
52 | CONFIG_SLAB=y | ||
52 | # CONFIG_TINY_SHMEM is not set | 53 | # CONFIG_TINY_SHMEM is not set |
53 | CONFIG_BASE_SMALL=0 | 54 | CONFIG_BASE_SMALL=0 |
55 | # CONFIG_SLOB is not set | ||
54 | 56 | ||
55 | # | 57 | # |
56 | # Loadable module support | 58 | # Loadable module support |
@@ -76,11 +78,11 @@ CONFIG_IOSCHED_NOOP=y | |||
76 | CONFIG_IOSCHED_AS=y | 78 | CONFIG_IOSCHED_AS=y |
77 | CONFIG_IOSCHED_DEADLINE=y | 79 | CONFIG_IOSCHED_DEADLINE=y |
78 | CONFIG_IOSCHED_CFQ=y | 80 | CONFIG_IOSCHED_CFQ=y |
79 | CONFIG_DEFAULT_AS=y | 81 | # CONFIG_DEFAULT_AS is not set |
80 | # CONFIG_DEFAULT_DEADLINE is not set | 82 | CONFIG_DEFAULT_DEADLINE=y |
81 | # CONFIG_DEFAULT_CFQ is not set | 83 | # CONFIG_DEFAULT_CFQ is not set |
82 | # CONFIG_DEFAULT_NOOP is not set | 84 | # CONFIG_DEFAULT_NOOP is not set |
83 | CONFIG_DEFAULT_IOSCHED="anticipatory" | 85 | CONFIG_DEFAULT_IOSCHED="deadline" |
84 | 86 | ||
85 | # | 87 | # |
86 | # Base setup | 88 | # Base setup |
@@ -151,6 +153,7 @@ CONFIG_NET=y | |||
151 | # | 153 | # |
152 | # Networking options | 154 | # Networking options |
153 | # | 155 | # |
156 | # CONFIG_NETDEBUG is not set | ||
154 | CONFIG_PACKET=y | 157 | CONFIG_PACKET=y |
155 | # CONFIG_PACKET_MMAP is not set | 158 | # CONFIG_PACKET_MMAP is not set |
156 | CONFIG_UNIX=y | 159 | CONFIG_UNIX=y |
@@ -193,6 +196,11 @@ CONFIG_IPV6=y | |||
193 | # SCTP Configuration (EXPERIMENTAL) | 196 | # SCTP Configuration (EXPERIMENTAL) |
194 | # | 197 | # |
195 | # CONFIG_IP_SCTP is not set | 198 | # CONFIG_IP_SCTP is not set |
199 | |||
200 | # | ||
201 | # TIPC Configuration (EXPERIMENTAL) | ||
202 | # | ||
203 | # CONFIG_TIPC is not set | ||
196 | # CONFIG_ATM is not set | 204 | # CONFIG_ATM is not set |
197 | # CONFIG_BRIDGE is not set | 205 | # CONFIG_BRIDGE is not set |
198 | # CONFIG_VLAN_8021Q is not set | 206 | # CONFIG_VLAN_8021Q is not set |
@@ -362,6 +370,7 @@ CONFIG_DM_MULTIPATH=y | |||
362 | # | 370 | # |
363 | CONFIG_UNIX98_PTYS=y | 371 | CONFIG_UNIX98_PTYS=y |
364 | CONFIG_UNIX98_PTY_COUNT=2048 | 372 | CONFIG_UNIX98_PTY_COUNT=2048 |
373 | # CONFIG_HANGCHECK_TIMER is not set | ||
365 | 374 | ||
366 | # | 375 | # |
367 | # Watchdog Cards | 376 | # Watchdog Cards |
@@ -488,6 +497,7 @@ CONFIG_FS_MBCACHE=y | |||
488 | # CONFIG_JFS_FS is not set | 497 | # CONFIG_JFS_FS is not set |
489 | # CONFIG_FS_POSIX_ACL is not set | 498 | # CONFIG_FS_POSIX_ACL is not set |
490 | # CONFIG_XFS_FS is not set | 499 | # CONFIG_XFS_FS is not set |
500 | # CONFIG_OCFS2_FS is not set | ||
491 | # CONFIG_MINIX_FS is not set | 501 | # CONFIG_MINIX_FS is not set |
492 | # CONFIG_ROMFS_FS is not set | 502 | # CONFIG_ROMFS_FS is not set |
493 | CONFIG_INOTIFY=y | 503 | CONFIG_INOTIFY=y |
@@ -520,6 +530,7 @@ CONFIG_TMPFS=y | |||
520 | # CONFIG_HUGETLB_PAGE is not set | 530 | # CONFIG_HUGETLB_PAGE is not set |
521 | CONFIG_RAMFS=y | 531 | CONFIG_RAMFS=y |
522 | # CONFIG_RELAYFS_FS is not set | 532 | # CONFIG_RELAYFS_FS is not set |
533 | # CONFIG_CONFIGFS_FS is not set | ||
523 | 534 | ||
524 | # | 535 | # |
525 | # Miscellaneous filesystems | 536 | # Miscellaneous filesystems |
@@ -584,6 +595,7 @@ CONFIG_MSDOS_PARTITION=y | |||
584 | # CONFIG_SGI_PARTITION is not set | 595 | # CONFIG_SGI_PARTITION is not set |
585 | # CONFIG_ULTRIX_PARTITION is not set | 596 | # CONFIG_ULTRIX_PARTITION is not set |
586 | # CONFIG_SUN_PARTITION is not set | 597 | # CONFIG_SUN_PARTITION is not set |
598 | # CONFIG_KARMA_PARTITION is not set | ||
587 | # CONFIG_EFI_PARTITION is not set | 599 | # CONFIG_EFI_PARTITION is not set |
588 | 600 | ||
589 | # | 601 | # |
@@ -592,27 +604,30 @@ CONFIG_MSDOS_PARTITION=y | |||
592 | # CONFIG_NLS is not set | 604 | # CONFIG_NLS is not set |
593 | 605 | ||
594 | # | 606 | # |
595 | # Profiling support | 607 | # Instrumentation Support |
596 | # | 608 | # |
597 | # CONFIG_PROFILING is not set | 609 | # CONFIG_PROFILING is not set |
610 | # CONFIG_STATISTICS is not set | ||
598 | 611 | ||
599 | # | 612 | # |
600 | # Kernel hacking | 613 | # Kernel hacking |
601 | # | 614 | # |
602 | # CONFIG_PRINTK_TIME is not set | 615 | # CONFIG_PRINTK_TIME is not set |
603 | CONFIG_DEBUG_KERNEL=y | ||
604 | CONFIG_MAGIC_SYSRQ=y | 616 | CONFIG_MAGIC_SYSRQ=y |
617 | CONFIG_DEBUG_KERNEL=y | ||
605 | CONFIG_LOG_BUF_SHIFT=17 | 618 | CONFIG_LOG_BUF_SHIFT=17 |
606 | CONFIG_DETECT_SOFTLOCKUP=y | 619 | # CONFIG_DETECT_SOFTLOCKUP is not set |
607 | # CONFIG_SCHEDSTATS is not set | 620 | # CONFIG_SCHEDSTATS is not set |
608 | # CONFIG_DEBUG_SLAB is not set | 621 | # CONFIG_DEBUG_SLAB is not set |
609 | CONFIG_DEBUG_PREEMPT=y | 622 | # CONFIG_DEBUG_PREEMPT is not set |
623 | CONFIG_DEBUG_MUTEXES=y | ||
610 | # CONFIG_DEBUG_SPINLOCK is not set | 624 | # CONFIG_DEBUG_SPINLOCK is not set |
611 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | 625 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set |
612 | # CONFIG_DEBUG_KOBJECT is not set | 626 | # CONFIG_DEBUG_KOBJECT is not set |
613 | # CONFIG_DEBUG_INFO is not set | 627 | # CONFIG_DEBUG_INFO is not set |
614 | CONFIG_DEBUG_FS=y | 628 | CONFIG_DEBUG_FS=y |
615 | # CONFIG_DEBUG_VM is not set | 629 | # CONFIG_DEBUG_VM is not set |
630 | CONFIG_FORCED_INLINING=y | ||
616 | # CONFIG_RCU_TORTURE_TEST is not set | 631 | # CONFIG_RCU_TORTURE_TEST is not set |
617 | 632 | ||
618 | # | 633 | # |
diff --git a/arch/s390/kernel/compat_linux.c b/arch/s390/kernel/compat_linux.c index bf9a7a361b34..cc058dc3bc8b 100644 --- a/arch/s390/kernel/compat_linux.c +++ b/arch/s390/kernel/compat_linux.c | |||
@@ -100,12 +100,12 @@ | |||
100 | #define SET_STAT_UID(stat, uid) (stat).st_uid = high2lowuid(uid) | 100 | #define SET_STAT_UID(stat, uid) (stat).st_uid = high2lowuid(uid) |
101 | #define SET_STAT_GID(stat, gid) (stat).st_gid = high2lowgid(gid) | 101 | #define SET_STAT_GID(stat, gid) (stat).st_gid = high2lowgid(gid) |
102 | 102 | ||
103 | asmlinkage long sys32_chown16(const char * filename, u16 user, u16 group) | 103 | asmlinkage long sys32_chown16(const char __user * filename, u16 user, u16 group) |
104 | { | 104 | { |
105 | return sys_chown(filename, low2highuid(user), low2highgid(group)); | 105 | return sys_chown(filename, low2highuid(user), low2highgid(group)); |
106 | } | 106 | } |
107 | 107 | ||
108 | asmlinkage long sys32_lchown16(const char * filename, u16 user, u16 group) | 108 | asmlinkage long sys32_lchown16(const char __user * filename, u16 user, u16 group) |
109 | { | 109 | { |
110 | return sys_lchown(filename, low2highuid(user), low2highgid(group)); | 110 | return sys_lchown(filename, low2highuid(user), low2highgid(group)); |
111 | } | 111 | } |
@@ -141,7 +141,7 @@ asmlinkage long sys32_setresuid16(u16 ruid, u16 euid, u16 suid) | |||
141 | low2highuid(suid)); | 141 | low2highuid(suid)); |
142 | } | 142 | } |
143 | 143 | ||
144 | asmlinkage long sys32_getresuid16(u16 *ruid, u16 *euid, u16 *suid) | 144 | asmlinkage long sys32_getresuid16(u16 __user *ruid, u16 __user *euid, u16 __user *suid) |
145 | { | 145 | { |
146 | int retval; | 146 | int retval; |
147 | 147 | ||
@@ -158,7 +158,7 @@ asmlinkage long sys32_setresgid16(u16 rgid, u16 egid, u16 sgid) | |||
158 | low2highgid(sgid)); | 158 | low2highgid(sgid)); |
159 | } | 159 | } |
160 | 160 | ||
161 | asmlinkage long sys32_getresgid16(u16 *rgid, u16 *egid, u16 *sgid) | 161 | asmlinkage long sys32_getresgid16(u16 __user *rgid, u16 __user *egid, u16 __user *sgid) |
162 | { | 162 | { |
163 | int retval; | 163 | int retval; |
164 | 164 | ||
@@ -179,7 +179,7 @@ asmlinkage long sys32_setfsgid16(u16 gid) | |||
179 | return sys_setfsgid((gid_t)gid); | 179 | return sys_setfsgid((gid_t)gid); |
180 | } | 180 | } |
181 | 181 | ||
182 | static int groups16_to_user(u16 *grouplist, struct group_info *group_info) | 182 | static int groups16_to_user(u16 __user *grouplist, struct group_info *group_info) |
183 | { | 183 | { |
184 | int i; | 184 | int i; |
185 | u16 group; | 185 | u16 group; |
@@ -193,7 +193,7 @@ static int groups16_to_user(u16 *grouplist, struct group_info *group_info) | |||
193 | return 0; | 193 | return 0; |
194 | } | 194 | } |
195 | 195 | ||
196 | static int groups16_from_user(struct group_info *group_info, u16 *grouplist) | 196 | static int groups16_from_user(struct group_info *group_info, u16 __user *grouplist) |
197 | { | 197 | { |
198 | int i; | 198 | int i; |
199 | u16 group; | 199 | u16 group; |
@@ -207,7 +207,7 @@ static int groups16_from_user(struct group_info *group_info, u16 *grouplist) | |||
207 | return 0; | 207 | return 0; |
208 | } | 208 | } |
209 | 209 | ||
210 | asmlinkage long sys32_getgroups16(int gidsetsize, u16 *grouplist) | 210 | asmlinkage long sys32_getgroups16(int gidsetsize, u16 __user *grouplist) |
211 | { | 211 | { |
212 | int i; | 212 | int i; |
213 | 213 | ||
@@ -231,7 +231,7 @@ out: | |||
231 | return i; | 231 | return i; |
232 | } | 232 | } |
233 | 233 | ||
234 | asmlinkage long sys32_setgroups16(int gidsetsize, u16 *grouplist) | 234 | asmlinkage long sys32_setgroups16(int gidsetsize, u16 __user *grouplist) |
235 | { | 235 | { |
236 | struct group_info *group_info; | 236 | struct group_info *group_info; |
237 | int retval; | 237 | int retval; |
@@ -278,14 +278,14 @@ asmlinkage long sys32_getegid16(void) | |||
278 | 278 | ||
279 | /* 32-bit timeval and related flotsam. */ | 279 | /* 32-bit timeval and related flotsam. */ |
280 | 280 | ||
281 | static inline long get_tv32(struct timeval *o, struct compat_timeval *i) | 281 | static inline long get_tv32(struct timeval *o, struct compat_timeval __user *i) |
282 | { | 282 | { |
283 | return (!access_ok(VERIFY_READ, o, sizeof(*o)) || | 283 | return (!access_ok(VERIFY_READ, o, sizeof(*o)) || |
284 | (__get_user(o->tv_sec, &i->tv_sec) || | 284 | (__get_user(o->tv_sec, &i->tv_sec) || |
285 | __get_user(o->tv_usec, &i->tv_usec))); | 285 | __get_user(o->tv_usec, &i->tv_usec))); |
286 | } | 286 | } |
287 | 287 | ||
288 | static inline long put_tv32(struct compat_timeval *o, struct timeval *i) | 288 | static inline long put_tv32(struct compat_timeval __user *o, struct timeval *i) |
289 | { | 289 | { |
290 | return (!access_ok(VERIFY_WRITE, o, sizeof(*o)) || | 290 | return (!access_ok(VERIFY_WRITE, o, sizeof(*o)) || |
291 | (__put_user(i->tv_sec, &o->tv_sec) || | 291 | (__put_user(i->tv_sec, &o->tv_sec) || |
@@ -341,7 +341,7 @@ asmlinkage long sys32_ipc(u32 call, int first, int second, int third, u32 ptr) | |||
341 | return -ENOSYS; | 341 | return -ENOSYS; |
342 | } | 342 | } |
343 | 343 | ||
344 | asmlinkage long sys32_truncate64(const char * path, unsigned long high, unsigned long low) | 344 | asmlinkage long sys32_truncate64(const char __user * path, unsigned long high, unsigned long low) |
345 | { | 345 | { |
346 | if ((int)high < 0) | 346 | if ((int)high < 0) |
347 | return -EINVAL; | 347 | return -EINVAL; |
@@ -357,7 +357,7 @@ asmlinkage long sys32_ftruncate64(unsigned int fd, unsigned long high, unsigned | |||
357 | return sys_ftruncate(fd, (high << 32) | low); | 357 | return sys_ftruncate(fd, (high << 32) | low); |
358 | } | 358 | } |
359 | 359 | ||
360 | int cp_compat_stat(struct kstat *stat, struct compat_stat *statbuf) | 360 | int cp_compat_stat(struct kstat *stat, struct compat_stat __user *statbuf) |
361 | { | 361 | { |
362 | int err; | 362 | int err; |
363 | 363 | ||
@@ -591,7 +591,7 @@ sys32_delete_module(const char __user *name_user, unsigned int flags) | |||
591 | 591 | ||
592 | extern struct timezone sys_tz; | 592 | extern struct timezone sys_tz; |
593 | 593 | ||
594 | asmlinkage long sys32_gettimeofday(struct compat_timeval *tv, struct timezone *tz) | 594 | asmlinkage long sys32_gettimeofday(struct compat_timeval __user *tv, struct timezone __user *tz) |
595 | { | 595 | { |
596 | if (tv) { | 596 | if (tv) { |
597 | struct timeval ktv; | 597 | struct timeval ktv; |
@@ -606,7 +606,7 @@ asmlinkage long sys32_gettimeofday(struct compat_timeval *tv, struct timezone *t | |||
606 | return 0; | 606 | return 0; |
607 | } | 607 | } |
608 | 608 | ||
609 | static inline long get_ts32(struct timespec *o, struct compat_timeval *i) | 609 | static inline long get_ts32(struct timespec *o, struct compat_timeval __user *i) |
610 | { | 610 | { |
611 | long usec; | 611 | long usec; |
612 | 612 | ||
@@ -620,7 +620,7 @@ static inline long get_ts32(struct timespec *o, struct compat_timeval *i) | |||
620 | return 0; | 620 | return 0; |
621 | } | 621 | } |
622 | 622 | ||
623 | asmlinkage long sys32_settimeofday(struct compat_timeval *tv, struct timezone *tz) | 623 | asmlinkage long sys32_settimeofday(struct compat_timeval __user *tv, struct timezone __user *tz) |
624 | { | 624 | { |
625 | struct timespec kts; | 625 | struct timespec kts; |
626 | struct timezone ktz; | 626 | struct timezone ktz; |
@@ -645,7 +645,7 @@ asmlinkage long sys32_pause(void) | |||
645 | return -ERESTARTNOHAND; | 645 | return -ERESTARTNOHAND; |
646 | } | 646 | } |
647 | 647 | ||
648 | asmlinkage long sys32_pread64(unsigned int fd, char *ubuf, | 648 | asmlinkage long sys32_pread64(unsigned int fd, char __user *ubuf, |
649 | size_t count, u32 poshi, u32 poslo) | 649 | size_t count, u32 poshi, u32 poslo) |
650 | { | 650 | { |
651 | if ((compat_ssize_t) count < 0) | 651 | if ((compat_ssize_t) count < 0) |
@@ -653,7 +653,7 @@ asmlinkage long sys32_pread64(unsigned int fd, char *ubuf, | |||
653 | return sys_pread64(fd, ubuf, count, ((loff_t)AA(poshi) << 32) | AA(poslo)); | 653 | return sys_pread64(fd, ubuf, count, ((loff_t)AA(poshi) << 32) | AA(poslo)); |
654 | } | 654 | } |
655 | 655 | ||
656 | asmlinkage long sys32_pwrite64(unsigned int fd, const char *ubuf, | 656 | asmlinkage long sys32_pwrite64(unsigned int fd, const char __user *ubuf, |
657 | size_t count, u32 poshi, u32 poslo) | 657 | size_t count, u32 poshi, u32 poslo) |
658 | { | 658 | { |
659 | if ((compat_ssize_t) count < 0) | 659 | if ((compat_ssize_t) count < 0) |
@@ -666,7 +666,7 @@ asmlinkage compat_ssize_t sys32_readahead(int fd, u32 offhi, u32 offlo, s32 coun | |||
666 | return sys_readahead(fd, ((loff_t)AA(offhi) << 32) | AA(offlo), count); | 666 | return sys_readahead(fd, ((loff_t)AA(offhi) << 32) | AA(offlo), count); |
667 | } | 667 | } |
668 | 668 | ||
669 | asmlinkage long sys32_sendfile(int out_fd, int in_fd, compat_off_t *offset, size_t count) | 669 | asmlinkage long sys32_sendfile(int out_fd, int in_fd, compat_off_t __user *offset, size_t count) |
670 | { | 670 | { |
671 | mm_segment_t old_fs = get_fs(); | 671 | mm_segment_t old_fs = get_fs(); |
672 | int ret; | 672 | int ret; |
@@ -686,7 +686,7 @@ asmlinkage long sys32_sendfile(int out_fd, int in_fd, compat_off_t *offset, size | |||
686 | } | 686 | } |
687 | 687 | ||
688 | asmlinkage long sys32_sendfile64(int out_fd, int in_fd, | 688 | asmlinkage long sys32_sendfile64(int out_fd, int in_fd, |
689 | compat_loff_t *offset, s32 count) | 689 | compat_loff_t __user *offset, s32 count) |
690 | { | 690 | { |
691 | mm_segment_t old_fs = get_fs(); | 691 | mm_segment_t old_fs = get_fs(); |
692 | int ret; | 692 | int ret; |
@@ -722,7 +722,7 @@ struct timex32 { | |||
722 | 722 | ||
723 | extern int do_adjtimex(struct timex *); | 723 | extern int do_adjtimex(struct timex *); |
724 | 724 | ||
725 | asmlinkage long sys32_adjtimex(struct timex32 *utp) | 725 | asmlinkage long sys32_adjtimex(struct timex32 __user *utp) |
726 | { | 726 | { |
727 | struct timex txc; | 727 | struct timex txc; |
728 | int ret; | 728 | int ret; |
@@ -789,12 +789,13 @@ struct __sysctl_args32 { | |||
789 | u32 __unused[4]; | 789 | u32 __unused[4]; |
790 | }; | 790 | }; |
791 | 791 | ||
792 | asmlinkage long sys32_sysctl(struct __sysctl_args32 *args) | 792 | asmlinkage long sys32_sysctl(struct __sysctl_args32 __user *args) |
793 | { | 793 | { |
794 | struct __sysctl_args32 tmp; | 794 | struct __sysctl_args32 tmp; |
795 | int error; | 795 | int error; |
796 | size_t oldlen, *oldlenp = NULL; | 796 | size_t oldlen; |
797 | unsigned long addr = (((long)&args->__unused[0]) + 7) & ~7; | 797 | size_t __user *oldlenp = NULL; |
798 | unsigned long addr = (((unsigned long)&args->__unused[0]) + 7) & ~7; | ||
798 | 799 | ||
799 | if (copy_from_user(&tmp, args, sizeof(tmp))) | 800 | if (copy_from_user(&tmp, args, sizeof(tmp))) |
800 | return -EFAULT; | 801 | return -EFAULT; |
@@ -806,20 +807,20 @@ asmlinkage long sys32_sysctl(struct __sysctl_args32 *args) | |||
806 | basically copy the whole sysctl.c here, and | 807 | basically copy the whole sysctl.c here, and |
807 | glibc's __sysctl uses rw memory for the structure | 808 | glibc's __sysctl uses rw memory for the structure |
808 | anyway. */ | 809 | anyway. */ |
809 | if (get_user(oldlen, (u32 *)A(tmp.oldlenp)) || | 810 | if (get_user(oldlen, (u32 __user *)compat_ptr(tmp.oldlenp)) || |
810 | put_user(oldlen, (size_t *)addr)) | 811 | put_user(oldlen, (size_t __user *)addr)) |
811 | return -EFAULT; | 812 | return -EFAULT; |
812 | oldlenp = (size_t *)addr; | 813 | oldlenp = (size_t __user *)addr; |
813 | } | 814 | } |
814 | 815 | ||
815 | lock_kernel(); | 816 | lock_kernel(); |
816 | error = do_sysctl((int *)A(tmp.name), tmp.nlen, (void *)A(tmp.oldval), | 817 | error = do_sysctl(compat_ptr(tmp.name), tmp.nlen, compat_ptr(tmp.oldval), |
817 | oldlenp, (void *)A(tmp.newval), tmp.newlen); | 818 | oldlenp, compat_ptr(tmp.newval), tmp.newlen); |
818 | unlock_kernel(); | 819 | unlock_kernel(); |
819 | if (oldlenp) { | 820 | if (oldlenp) { |
820 | if (!error) { | 821 | if (!error) { |
821 | if (get_user(oldlen, (size_t *)addr) || | 822 | if (get_user(oldlen, (size_t __user *)addr) || |
822 | put_user(oldlen, (u32 *)A(tmp.oldlenp))) | 823 | put_user(oldlen, (u32 __user *)compat_ptr(tmp.oldlenp))) |
823 | error = -EFAULT; | 824 | error = -EFAULT; |
824 | } | 825 | } |
825 | copy_to_user(args->__unused, tmp.__unused, sizeof(tmp.__unused)); | 826 | copy_to_user(args->__unused, tmp.__unused, sizeof(tmp.__unused)); |
@@ -853,7 +854,7 @@ struct stat64_emu31 { | |||
853 | unsigned long st_ino; | 854 | unsigned long st_ino; |
854 | }; | 855 | }; |
855 | 856 | ||
856 | static int cp_stat64(struct stat64_emu31 *ubuf, struct kstat *stat) | 857 | static int cp_stat64(struct stat64_emu31 __user *ubuf, struct kstat *stat) |
857 | { | 858 | { |
858 | struct stat64_emu31 tmp; | 859 | struct stat64_emu31 tmp; |
859 | 860 | ||
@@ -877,7 +878,7 @@ static int cp_stat64(struct stat64_emu31 *ubuf, struct kstat *stat) | |||
877 | return copy_to_user(ubuf,&tmp,sizeof(tmp)) ? -EFAULT : 0; | 878 | return copy_to_user(ubuf,&tmp,sizeof(tmp)) ? -EFAULT : 0; |
878 | } | 879 | } |
879 | 880 | ||
880 | asmlinkage long sys32_stat64(char * filename, struct stat64_emu31 * statbuf) | 881 | asmlinkage long sys32_stat64(char __user * filename, struct stat64_emu31 __user * statbuf) |
881 | { | 882 | { |
882 | struct kstat stat; | 883 | struct kstat stat; |
883 | int ret = vfs_stat(filename, &stat); | 884 | int ret = vfs_stat(filename, &stat); |
@@ -886,7 +887,7 @@ asmlinkage long sys32_stat64(char * filename, struct stat64_emu31 * statbuf) | |||
886 | return ret; | 887 | return ret; |
887 | } | 888 | } |
888 | 889 | ||
889 | asmlinkage long sys32_lstat64(char * filename, struct stat64_emu31 * statbuf) | 890 | asmlinkage long sys32_lstat64(char __user * filename, struct stat64_emu31 __user * statbuf) |
890 | { | 891 | { |
891 | struct kstat stat; | 892 | struct kstat stat; |
892 | int ret = vfs_lstat(filename, &stat); | 893 | int ret = vfs_lstat(filename, &stat); |
@@ -895,7 +896,7 @@ asmlinkage long sys32_lstat64(char * filename, struct stat64_emu31 * statbuf) | |||
895 | return ret; | 896 | return ret; |
896 | } | 897 | } |
897 | 898 | ||
898 | asmlinkage long sys32_fstat64(unsigned long fd, struct stat64_emu31 * statbuf) | 899 | asmlinkage long sys32_fstat64(unsigned long fd, struct stat64_emu31 __user * statbuf) |
899 | { | 900 | { |
900 | struct kstat stat; | 901 | struct kstat stat; |
901 | int ret = vfs_fstat(fd, &stat); | 902 | int ret = vfs_fstat(fd, &stat); |
@@ -904,6 +905,26 @@ asmlinkage long sys32_fstat64(unsigned long fd, struct stat64_emu31 * statbuf) | |||
904 | return ret; | 905 | return ret; |
905 | } | 906 | } |
906 | 907 | ||
908 | asmlinkage long sys32_fstatat64(unsigned int dfd, char __user *filename, | ||
909 | struct stat64_emu31 __user* statbuf, int flag) | ||
910 | { | ||
911 | struct kstat stat; | ||
912 | int error = -EINVAL; | ||
913 | |||
914 | if ((flag & ~AT_SYMLINK_NOFOLLOW) != 0) | ||
915 | goto out; | ||
916 | |||
917 | if (flag & AT_SYMLINK_NOFOLLOW) | ||
918 | error = vfs_lstat_fd(dfd, filename, &stat); | ||
919 | else | ||
920 | error = vfs_stat_fd(dfd, filename, &stat); | ||
921 | |||
922 | if (!error) | ||
923 | error = cp_stat64(statbuf, &stat); | ||
924 | out: | ||
925 | return error; | ||
926 | } | ||
927 | |||
907 | /* | 928 | /* |
908 | * Linux/i386 didn't use to be able to handle more than | 929 | * Linux/i386 didn't use to be able to handle more than |
909 | * 4 system call parameters, so these system calls used a memory | 930 | * 4 system call parameters, so these system calls used a memory |
@@ -952,7 +973,7 @@ out: | |||
952 | 973 | ||
953 | 974 | ||
954 | asmlinkage unsigned long | 975 | asmlinkage unsigned long |
955 | old32_mmap(struct mmap_arg_struct_emu31 *arg) | 976 | old32_mmap(struct mmap_arg_struct_emu31 __user *arg) |
956 | { | 977 | { |
957 | struct mmap_arg_struct_emu31 a; | 978 | struct mmap_arg_struct_emu31 a; |
958 | int error = -EFAULT; | 979 | int error = -EFAULT; |
@@ -970,7 +991,7 @@ out: | |||
970 | } | 991 | } |
971 | 992 | ||
972 | asmlinkage long | 993 | asmlinkage long |
973 | sys32_mmap2(struct mmap_arg_struct_emu31 *arg) | 994 | sys32_mmap2(struct mmap_arg_struct_emu31 __user *arg) |
974 | { | 995 | { |
975 | struct mmap_arg_struct_emu31 a; | 996 | struct mmap_arg_struct_emu31 a; |
976 | int error = -EFAULT; | 997 | int error = -EFAULT; |
@@ -982,7 +1003,7 @@ out: | |||
982 | return error; | 1003 | return error; |
983 | } | 1004 | } |
984 | 1005 | ||
985 | asmlinkage long sys32_read(unsigned int fd, char * buf, size_t count) | 1006 | asmlinkage long sys32_read(unsigned int fd, char __user * buf, size_t count) |
986 | { | 1007 | { |
987 | if ((compat_ssize_t) count < 0) | 1008 | if ((compat_ssize_t) count < 0) |
988 | return -EINVAL; | 1009 | return -EINVAL; |
@@ -990,7 +1011,7 @@ asmlinkage long sys32_read(unsigned int fd, char * buf, size_t count) | |||
990 | return sys_read(fd, buf, count); | 1011 | return sys_read(fd, buf, count); |
991 | } | 1012 | } |
992 | 1013 | ||
993 | asmlinkage long sys32_write(unsigned int fd, char * buf, size_t count) | 1014 | asmlinkage long sys32_write(unsigned int fd, char __user * buf, size_t count) |
994 | { | 1015 | { |
995 | if ((compat_ssize_t) count < 0) | 1016 | if ((compat_ssize_t) count < 0) |
996 | return -EINVAL; | 1017 | return -EINVAL; |
@@ -1002,12 +1023,12 @@ asmlinkage long sys32_clone(struct pt_regs regs) | |||
1002 | { | 1023 | { |
1003 | unsigned long clone_flags; | 1024 | unsigned long clone_flags; |
1004 | unsigned long newsp; | 1025 | unsigned long newsp; |
1005 | int *parent_tidptr, *child_tidptr; | 1026 | int __user *parent_tidptr, *child_tidptr; |
1006 | 1027 | ||
1007 | clone_flags = regs.gprs[3] & 0xffffffffUL; | 1028 | clone_flags = regs.gprs[3] & 0xffffffffUL; |
1008 | newsp = regs.orig_gpr2 & 0x7fffffffUL; | 1029 | newsp = regs.orig_gpr2 & 0x7fffffffUL; |
1009 | parent_tidptr = (int *) (regs.gprs[4] & 0x7fffffffUL); | 1030 | parent_tidptr = compat_ptr(regs.gprs[4]); |
1010 | child_tidptr = (int *) (regs.gprs[5] & 0x7fffffffUL); | 1031 | child_tidptr = compat_ptr(regs.gprs[5]); |
1011 | if (!newsp) | 1032 | if (!newsp) |
1012 | newsp = regs.gprs[15]; | 1033 | newsp = regs.gprs[15]; |
1013 | return do_fork(clone_flags, newsp, ®s, 0, | 1034 | return do_fork(clone_flags, newsp, ®s, 0, |
diff --git a/arch/s390/kernel/compat_signal.c b/arch/s390/kernel/compat_signal.c index fa2b3bc22f20..5291b5f8788d 100644 --- a/arch/s390/kernel/compat_signal.c +++ b/arch/s390/kernel/compat_signal.c | |||
@@ -1,8 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * arch/s390/kernel/signal32.c | 2 | * arch/s390/kernel/compat_signal.c |
3 | * | 3 | * |
4 | * S390 version | 4 | * Copyright (C) IBM Corp. 2000,2006 |
5 | * Copyright (C) 2000 IBM Deutschland Entwicklung GmbH, IBM Corporation | ||
6 | * Author(s): Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com) | 5 | * Author(s): Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com) |
7 | * Gerhard Tonn (ton@de.ibm.com) | 6 | * Gerhard Tonn (ton@de.ibm.com) |
8 | * | 7 | * |
@@ -52,8 +51,6 @@ typedef struct | |||
52 | struct ucontext32 uc; | 51 | struct ucontext32 uc; |
53 | } rt_sigframe32; | 52 | } rt_sigframe32; |
54 | 53 | ||
55 | asmlinkage int FASTCALL(do_signal(struct pt_regs *regs, sigset_t *oldset)); | ||
56 | |||
57 | int copy_siginfo_to_user32(compat_siginfo_t __user *to, siginfo_t *from) | 54 | int copy_siginfo_to_user32(compat_siginfo_t __user *to, siginfo_t *from) |
58 | { | 55 | { |
59 | int err; | 56 | int err; |
@@ -161,66 +158,6 @@ int copy_siginfo_from_user32(siginfo_t *to, compat_siginfo_t __user *from) | |||
161 | return err; | 158 | return err; |
162 | } | 159 | } |
163 | 160 | ||
164 | /* | ||
165 | * Atomically swap in the new signal mask, and wait for a signal. | ||
166 | */ | ||
167 | asmlinkage int | ||
168 | sys32_sigsuspend(struct pt_regs * regs,int history0, int history1, old_sigset_t mask) | ||
169 | { | ||
170 | sigset_t saveset; | ||
171 | |||
172 | mask &= _BLOCKABLE; | ||
173 | spin_lock_irq(¤t->sighand->siglock); | ||
174 | saveset = current->blocked; | ||
175 | siginitset(¤t->blocked, mask); | ||
176 | recalc_sigpending(); | ||
177 | spin_unlock_irq(¤t->sighand->siglock); | ||
178 | regs->gprs[2] = -EINTR; | ||
179 | |||
180 | while (1) { | ||
181 | set_current_state(TASK_INTERRUPTIBLE); | ||
182 | schedule(); | ||
183 | if (do_signal(regs, &saveset)) | ||
184 | return -EINTR; | ||
185 | } | ||
186 | } | ||
187 | |||
188 | asmlinkage int | ||
189 | sys32_rt_sigsuspend(struct pt_regs * regs, compat_sigset_t __user *unewset, | ||
190 | size_t sigsetsize) | ||
191 | { | ||
192 | sigset_t saveset, newset; | ||
193 | compat_sigset_t set32; | ||
194 | |||
195 | /* XXX: Don't preclude handling different sized sigset_t's. */ | ||
196 | if (sigsetsize != sizeof(sigset_t)) | ||
197 | return -EINVAL; | ||
198 | |||
199 | if (copy_from_user(&set32, unewset, sizeof(set32))) | ||
200 | return -EFAULT; | ||
201 | switch (_NSIG_WORDS) { | ||
202 | case 4: newset.sig[3] = set32.sig[6] + (((long)set32.sig[7]) << 32); | ||
203 | case 3: newset.sig[2] = set32.sig[4] + (((long)set32.sig[5]) << 32); | ||
204 | case 2: newset.sig[1] = set32.sig[2] + (((long)set32.sig[3]) << 32); | ||
205 | case 1: newset.sig[0] = set32.sig[0] + (((long)set32.sig[1]) << 32); | ||
206 | } | ||
207 | sigdelsetmask(&newset, ~_BLOCKABLE); | ||
208 | |||
209 | spin_lock_irq(¤t->sighand->siglock); | ||
210 | saveset = current->blocked; | ||
211 | current->blocked = newset; | ||
212 | recalc_sigpending(); | ||
213 | spin_unlock_irq(¤t->sighand->siglock); | ||
214 | regs->gprs[2] = -EINTR; | ||
215 | |||
216 | while (1) { | ||
217 | set_current_state(TASK_INTERRUPTIBLE); | ||
218 | schedule(); | ||
219 | if (do_signal(regs, &saveset)) | ||
220 | return -EINTR; | ||
221 | } | ||
222 | } | ||
223 | |||
224 | asmlinkage long | 161 | asmlinkage long |
225 | sys32_sigaction(int sig, const struct old_sigaction32 __user *act, | 162 | sys32_sigaction(int sig, const struct old_sigaction32 __user *act, |
226 | struct old_sigaction32 __user *oact) | 163 | struct old_sigaction32 __user *oact) |
@@ -258,9 +195,6 @@ sys32_sigaction(int sig, const struct old_sigaction32 __user *act, | |||
258 | return ret; | 195 | return ret; |
259 | } | 196 | } |
260 | 197 | ||
261 | int | ||
262 | do_sigaction(int sig, const struct k_sigaction *act, struct k_sigaction *oact); | ||
263 | |||
264 | asmlinkage long | 198 | asmlinkage long |
265 | sys32_rt_sigaction(int sig, const struct sigaction32 __user *act, | 199 | sys32_rt_sigaction(int sig, const struct sigaction32 __user *act, |
266 | struct sigaction32 __user *oact, size_t sigsetsize) | 200 | struct sigaction32 __user *oact, size_t sigsetsize) |
@@ -520,7 +454,7 @@ static inline int map_signal(int sig) | |||
520 | return sig; | 454 | return sig; |
521 | } | 455 | } |
522 | 456 | ||
523 | static void setup_frame32(int sig, struct k_sigaction *ka, | 457 | static int setup_frame32(int sig, struct k_sigaction *ka, |
524 | sigset_t *set, struct pt_regs * regs) | 458 | sigset_t *set, struct pt_regs * regs) |
525 | { | 459 | { |
526 | sigframe32 __user *frame = get_sigframe(ka, regs, sizeof(sigframe32)); | 460 | sigframe32 __user *frame = get_sigframe(ka, regs, sizeof(sigframe32)); |
@@ -565,13 +499,14 @@ static void setup_frame32(int sig, struct k_sigaction *ka, | |||
565 | /* Place signal number on stack to allow backtrace from handler. */ | 499 | /* Place signal number on stack to allow backtrace from handler. */ |
566 | if (__put_user(regs->gprs[2], (int __user *) &frame->signo)) | 500 | if (__put_user(regs->gprs[2], (int __user *) &frame->signo)) |
567 | goto give_sigsegv; | 501 | goto give_sigsegv; |
568 | return; | 502 | return 0; |
569 | 503 | ||
570 | give_sigsegv: | 504 | give_sigsegv: |
571 | force_sigsegv(sig, current); | 505 | force_sigsegv(sig, current); |
506 | return -EFAULT; | ||
572 | } | 507 | } |
573 | 508 | ||
574 | static void setup_rt_frame32(int sig, struct k_sigaction *ka, siginfo_t *info, | 509 | static int setup_rt_frame32(int sig, struct k_sigaction *ka, siginfo_t *info, |
575 | sigset_t *set, struct pt_regs * regs) | 510 | sigset_t *set, struct pt_regs * regs) |
576 | { | 511 | { |
577 | int err = 0; | 512 | int err = 0; |
@@ -615,31 +550,37 @@ static void setup_rt_frame32(int sig, struct k_sigaction *ka, siginfo_t *info, | |||
615 | regs->gprs[2] = map_signal(sig); | 550 | regs->gprs[2] = map_signal(sig); |
616 | regs->gprs[3] = (__u64) &frame->info; | 551 | regs->gprs[3] = (__u64) &frame->info; |
617 | regs->gprs[4] = (__u64) &frame->uc; | 552 | regs->gprs[4] = (__u64) &frame->uc; |
618 | return; | 553 | return 0; |
619 | 554 | ||
620 | give_sigsegv: | 555 | give_sigsegv: |
621 | force_sigsegv(sig, current); | 556 | force_sigsegv(sig, current); |
557 | return -EFAULT; | ||
622 | } | 558 | } |
623 | 559 | ||
624 | /* | 560 | /* |
625 | * OK, we're invoking a handler | 561 | * OK, we're invoking a handler |
626 | */ | 562 | */ |
627 | 563 | ||
628 | void | 564 | int |
629 | handle_signal32(unsigned long sig, struct k_sigaction *ka, | 565 | handle_signal32(unsigned long sig, struct k_sigaction *ka, |
630 | siginfo_t *info, sigset_t *oldset, struct pt_regs * regs) | 566 | siginfo_t *info, sigset_t *oldset, struct pt_regs * regs) |
631 | { | 567 | { |
568 | int ret; | ||
569 | |||
632 | /* Set up the stack frame */ | 570 | /* Set up the stack frame */ |
633 | if (ka->sa.sa_flags & SA_SIGINFO) | 571 | if (ka->sa.sa_flags & SA_SIGINFO) |
634 | setup_rt_frame32(sig, ka, info, oldset, regs); | 572 | ret = setup_rt_frame32(sig, ka, info, oldset, regs); |
635 | else | 573 | else |
636 | setup_frame32(sig, ka, oldset, regs); | 574 | ret = setup_frame32(sig, ka, oldset, regs); |
637 | 575 | ||
638 | spin_lock_irq(¤t->sighand->siglock); | 576 | if (ret == 0) { |
639 | sigorsets(¤t->blocked,¤t->blocked,&ka->sa.sa_mask); | 577 | spin_lock_irq(¤t->sighand->siglock); |
640 | if (!(ka->sa.sa_flags & SA_NODEFER)) | 578 | sigorsets(¤t->blocked,¤t->blocked,&ka->sa.sa_mask); |
641 | sigaddset(¤t->blocked,sig); | 579 | if (!(ka->sa.sa_flags & SA_NODEFER)) |
642 | recalc_sigpending(); | 580 | sigaddset(¤t->blocked,sig); |
643 | spin_unlock_irq(¤t->sighand->siglock); | 581 | recalc_sigpending(); |
582 | spin_unlock_irq(¤t->sighand->siglock); | ||
583 | } | ||
584 | return ret; | ||
644 | } | 585 | } |
645 | 586 | ||
diff --git a/arch/s390/kernel/compat_wrapper.S b/arch/s390/kernel/compat_wrapper.S index cfde1905d07d..50e80138e7ad 100644 --- a/arch/s390/kernel/compat_wrapper.S +++ b/arch/s390/kernel/compat_wrapper.S | |||
@@ -1,9 +1,8 @@ | |||
1 | /* | 1 | /* |
2 | * arch/s390/kernel/sys_wrapper31.S | 2 | * arch/s390/kernel/compat_wrapper.S |
3 | * wrapper for 31 bit compatible system calls. | 3 | * wrapper for 31 bit compatible system calls. |
4 | * | 4 | * |
5 | * S390 version | 5 | * Copyright (C) IBM Corp. 2000,2006 |
6 | * Copyright (C) 2000 IBM Deutschland Entwicklung GmbH, IBM Corporation | ||
7 | * Author(s): Gerhard Tonn (ton@de.ibm.com), | 6 | * Author(s): Gerhard Tonn (ton@de.ibm.com), |
8 | * Thomas Spatzier (tspat@de.ibm.com) | 7 | * Thomas Spatzier (tspat@de.ibm.com) |
9 | */ | 8 | */ |
@@ -288,7 +287,12 @@ sys32_setregid16_wrapper: | |||
288 | llgfr %r3,%r3 # __kernel_old_gid_emu31_t | 287 | llgfr %r3,%r3 # __kernel_old_gid_emu31_t |
289 | jg sys32_setregid16 # branch to system call | 288 | jg sys32_setregid16 # branch to system call |
290 | 289 | ||
291 | #sys32_sigsuspend_wrapper # done in sigsuspend_glue | 290 | .globl sys_sigsuspend_wrapper |
291 | sys_sigsuspend_wrapper: | ||
292 | lgfr %r2,%r2 # int | ||
293 | lgfr %r3,%r3 # int | ||
294 | llgfr %r4,%r4 # old_sigset_t | ||
295 | jg sys_sigsuspend | ||
292 | 296 | ||
293 | .globl compat_sys_sigpending_wrapper | 297 | .globl compat_sys_sigpending_wrapper |
294 | compat_sys_sigpending_wrapper: | 298 | compat_sys_sigpending_wrapper: |
@@ -855,7 +859,11 @@ sys32_rt_sigqueueinfo_wrapper: | |||
855 | llgtr %r4,%r4 # siginfo_emu31_t * | 859 | llgtr %r4,%r4 # siginfo_emu31_t * |
856 | jg sys32_rt_sigqueueinfo # branch to system call | 860 | jg sys32_rt_sigqueueinfo # branch to system call |
857 | 861 | ||
858 | #sys32_rt_sigsuspend_wrapper # done in rt_sigsuspend_glue | 862 | .globl compat_sys_rt_sigsuspend_wrapper |
863 | compat_sys_rt_sigsuspend_wrapper: | ||
864 | llgtr %r2,%r2 # compat_sigset_t * | ||
865 | llgfr %r3,%r3 # compat_size_t | ||
866 | jg compat_sys_rt_sigsuspend | ||
859 | 867 | ||
860 | .globl sys32_pread64_wrapper | 868 | .globl sys32_pread64_wrapper |
861 | sys32_pread64_wrapper: | 869 | sys32_pread64_wrapper: |
@@ -1475,3 +1483,128 @@ sys_inotify_rm_watch_wrapper: | |||
1475 | lgfr %r2,%r2 # int | 1483 | lgfr %r2,%r2 # int |
1476 | llgfr %r3,%r3 # u32 | 1484 | llgfr %r3,%r3 # u32 |
1477 | jg sys_inotify_rm_watch | 1485 | jg sys_inotify_rm_watch |
1486 | |||
1487 | .globl compat_sys_openat_wrapper | ||
1488 | compat_sys_openat_wrapper: | ||
1489 | llgfr %r2,%r2 # unsigned int | ||
1490 | llgtr %r3,%r3 # const char * | ||
1491 | lgfr %r4,%r4 # int | ||
1492 | lgfr %r5,%r5 # int | ||
1493 | jg compat_sys_openat | ||
1494 | |||
1495 | .globl sys_mkdirat_wrapper | ||
1496 | sys_mkdirat_wrapper: | ||
1497 | lgfr %r2,%r2 # int | ||
1498 | llgtr %r3,%r3 # const char * | ||
1499 | lgfr %r4,%r4 # int | ||
1500 | jg sys_mkdirat | ||
1501 | |||
1502 | .globl sys_mknodat_wrapper | ||
1503 | sys_mknodat_wrapper: | ||
1504 | lgfr %r2,%r2 # int | ||
1505 | llgtr %r3,%r3 # const char * | ||
1506 | lgfr %r4,%r4 # int | ||
1507 | llgfr %r5,%r5 # unsigned int | ||
1508 | jg sys_mknodat | ||
1509 | |||
1510 | .globl sys_fchownat_wrapper | ||
1511 | sys_fchownat_wrapper: | ||
1512 | lgfr %r2,%r2 # int | ||
1513 | llgtr %r3,%r3 # const char * | ||
1514 | llgfr %r4,%r4 # uid_t | ||
1515 | llgfr %r5,%r5 # gid_t | ||
1516 | lgfr %r6,%r6 # int | ||
1517 | jg sys_fchownat | ||
1518 | |||
1519 | .globl compat_sys_futimesat_wrapper | ||
1520 | compat_sys_futimesat_wrapper: | ||
1521 | llgfr %r2,%r2 # unsigned int | ||
1522 | llgtr %r3,%r3 # char * | ||
1523 | llgtr %r4,%r4 # struct timeval * | ||
1524 | jg compat_sys_futimesat | ||
1525 | |||
1526 | .globl sys32_fstatat64_wrapper | ||
1527 | sys32_fstatat64_wrapper: | ||
1528 | llgfr %r2,%r2 # unsigned int | ||
1529 | llgtr %r3,%r3 # char * | ||
1530 | llgtr %r4,%r4 # struct stat64 * | ||
1531 | lgfr %r5,%r5 # int | ||
1532 | jg sys32_fstatat64 | ||
1533 | |||
1534 | .globl sys_unlinkat_wrapper | ||
1535 | sys_unlinkat_wrapper: | ||
1536 | lgfr %r2,%r2 # int | ||
1537 | llgtr %r3,%r3 # const char * | ||
1538 | lgfr %r4,%r4 # int | ||
1539 | jg sys_unlinkat | ||
1540 | |||
1541 | .globl sys_renameat_wrapper | ||
1542 | sys_renameat_wrapper: | ||
1543 | lgfr %r2,%r2 # int | ||
1544 | llgtr %r3,%r3 # const char * | ||
1545 | lgfr %r4,%r4 # int | ||
1546 | llgtr %r5,%r5 # const char * | ||
1547 | jg sys_renameat | ||
1548 | |||
1549 | .globl sys_linkat_wrapper | ||
1550 | sys_linkat_wrapper: | ||
1551 | lgfr %r2,%r2 # int | ||
1552 | llgtr %r3,%r3 # const char * | ||
1553 | lgfr %r4,%r4 # int | ||
1554 | llgtr %r5,%r5 # const char * | ||
1555 | lgfr %r6,%r6 # int | ||
1556 | jg sys_linkat | ||
1557 | |||
1558 | .globl sys_symlinkat_wrapper | ||
1559 | sys_symlinkat_wrapper: | ||
1560 | llgtr %r2,%r2 # const char * | ||
1561 | lgfr %r3,%r3 # int | ||
1562 | llgtr %r4,%r4 # const char * | ||
1563 | jg sys_symlinkat | ||
1564 | |||
1565 | .globl sys_readlinkat_wrapper | ||
1566 | sys_readlinkat_wrapper: | ||
1567 | lgfr %r2,%r2 # int | ||
1568 | llgtr %r3,%r3 # const char * | ||
1569 | llgtr %r4,%r4 # char * | ||
1570 | lgfr %r5,%r5 # int | ||
1571 | jg sys_readlinkat | ||
1572 | |||
1573 | .globl sys_fchmodat_wrapper | ||
1574 | sys_fchmodat_wrapper: | ||
1575 | lgfr %r2,%r2 # int | ||
1576 | llgtr %r3,%r3 # const char * | ||
1577 | llgfr %r4,%r4 # mode_t | ||
1578 | jg sys_fchmodat | ||
1579 | |||
1580 | .globl sys_faccessat_wrapper | ||
1581 | sys_faccessat_wrapper: | ||
1582 | lgfr %r2,%r2 # int | ||
1583 | llgtr %r3,%r3 # const char * | ||
1584 | lgfr %r4,%r4 # int | ||
1585 | jg sys_faccessat | ||
1586 | |||
1587 | .globl compat_sys_pselect6_wrapper | ||
1588 | compat_sys_pselect6_wrapper: | ||
1589 | lgfr %r2,%r2 # int | ||
1590 | llgtr %r3,%r3 # fd_set * | ||
1591 | llgtr %r4,%r4 # fd_set * | ||
1592 | llgtr %r5,%r5 # fd_set * | ||
1593 | llgtr %r6,%r6 # struct timespec * | ||
1594 | llgt %r0,164(%r15) # void * | ||
1595 | stg %r0,160(%r15) | ||
1596 | jg compat_sys_pselect6 | ||
1597 | |||
1598 | .globl compat_sys_ppoll_wrapper | ||
1599 | compat_sys_ppoll_wrapper: | ||
1600 | llgtr %r2,%r2 # struct pollfd * | ||
1601 | llgfr %r3,%r3 # unsigned int | ||
1602 | llgtr %r4,%r4 # struct timespec * | ||
1603 | llgtr %r5,%r5 # const sigset_t * | ||
1604 | llgfr %r6,%r6 # size_t | ||
1605 | jg compat_sys_ppoll | ||
1606 | |||
1607 | .globl sys_unshare_wrapper | ||
1608 | sys_unshare_wrapper: | ||
1609 | llgfr %r2,%r2 # unsigned long | ||
1610 | jg sys_unshare | ||
diff --git a/arch/s390/kernel/entry.S b/arch/s390/kernel/entry.S index 27b07730b7b8..b2448487854c 100644 --- a/arch/s390/kernel/entry.S +++ b/arch/s390/kernel/entry.S | |||
@@ -2,8 +2,7 @@ | |||
2 | * arch/s390/kernel/entry.S | 2 | * arch/s390/kernel/entry.S |
3 | * S390 low-level entry points. | 3 | * S390 low-level entry points. |
4 | * | 4 | * |
5 | * S390 version | 5 | * Copyright (C) IBM Corp. 1999,2006 |
6 | * Copyright (C) 1999,2000 IBM Deutschland Entwicklung GmbH, IBM Corporation | ||
7 | * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com), | 6 | * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com), |
8 | * Hartmut Penner (hp@de.ibm.com), | 7 | * Hartmut Penner (hp@de.ibm.com), |
9 | * Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com), | 8 | * Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com), |
@@ -50,9 +49,10 @@ SP_ILC = STACK_FRAME_OVERHEAD + __PT_ILC | |||
50 | SP_TRAP = STACK_FRAME_OVERHEAD + __PT_TRAP | 49 | SP_TRAP = STACK_FRAME_OVERHEAD + __PT_TRAP |
51 | SP_SIZE = STACK_FRAME_OVERHEAD + __PT_SIZE | 50 | SP_SIZE = STACK_FRAME_OVERHEAD + __PT_SIZE |
52 | 51 | ||
53 | _TIF_WORK_SVC = (_TIF_SIGPENDING | _TIF_NEED_RESCHED | _TIF_MCCK_PENDING | \ | 52 | _TIF_WORK_SVC = (_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK | _TIF_NEED_RESCHED | \ |
54 | _TIF_RESTART_SVC | _TIF_SINGLE_STEP ) | 53 | _TIF_MCCK_PENDING | _TIF_RESTART_SVC | _TIF_SINGLE_STEP ) |
55 | _TIF_WORK_INT = (_TIF_SIGPENDING | _TIF_NEED_RESCHED | _TIF_MCCK_PENDING) | 54 | _TIF_WORK_INT = (_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK | _TIF_NEED_RESCHED | \ |
55 | _TIF_MCCK_PENDING) | ||
56 | 56 | ||
57 | STACK_SHIFT = PAGE_SHIFT + THREAD_ORDER | 57 | STACK_SHIFT = PAGE_SHIFT + THREAD_ORDER |
58 | STACK_SIZE = 1 << STACK_SHIFT | 58 | STACK_SIZE = 1 << STACK_SHIFT |
@@ -251,8 +251,8 @@ sysc_work: | |||
251 | bo BASED(sysc_mcck_pending) | 251 | bo BASED(sysc_mcck_pending) |
252 | tm __TI_flags+3(%r9),_TIF_NEED_RESCHED | 252 | tm __TI_flags+3(%r9),_TIF_NEED_RESCHED |
253 | bo BASED(sysc_reschedule) | 253 | bo BASED(sysc_reschedule) |
254 | tm __TI_flags+3(%r9),_TIF_SIGPENDING | 254 | tm __TI_flags+3(%r9),(_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK) |
255 | bo BASED(sysc_sigpending) | 255 | bnz BASED(sysc_sigpending) |
256 | tm __TI_flags+3(%r9),_TIF_RESTART_SVC | 256 | tm __TI_flags+3(%r9),_TIF_RESTART_SVC |
257 | bo BASED(sysc_restart) | 257 | bo BASED(sysc_restart) |
258 | tm __TI_flags+3(%r9),_TIF_SINGLE_STEP | 258 | tm __TI_flags+3(%r9),_TIF_SINGLE_STEP |
@@ -276,12 +276,11 @@ sysc_mcck_pending: | |||
276 | br %r1 # TIF bit will be cleared by handler | 276 | br %r1 # TIF bit will be cleared by handler |
277 | 277 | ||
278 | # | 278 | # |
279 | # _TIF_SIGPENDING is set, call do_signal | 279 | # _TIF_SIGPENDING or _TIF_RESTORE_SIGMASK is set, call do_signal |
280 | # | 280 | # |
281 | sysc_sigpending: | 281 | sysc_sigpending: |
282 | ni __TI_flags+3(%r9),255-_TIF_SINGLE_STEP # clear TIF_SINGLE_STEP | 282 | ni __TI_flags+3(%r9),255-_TIF_SINGLE_STEP # clear TIF_SINGLE_STEP |
283 | la %r2,SP_PTREGS(%r15) # load pt_regs | 283 | la %r2,SP_PTREGS(%r15) # load pt_regs |
284 | sr %r3,%r3 # clear *oldset | ||
285 | l %r1,BASED(.Ldo_signal) | 284 | l %r1,BASED(.Ldo_signal) |
286 | basr %r14,%r1 # call do_signal | 285 | basr %r14,%r1 # call do_signal |
287 | tm __TI_flags+3(%r9),_TIF_RESTART_SVC | 286 | tm __TI_flags+3(%r9),_TIF_RESTART_SVC |
@@ -397,30 +396,6 @@ sys_rt_sigreturn_glue: | |||
397 | l %r1,BASED(.Lrt_sigreturn) | 396 | l %r1,BASED(.Lrt_sigreturn) |
398 | br %r1 # branch to sys_sigreturn | 397 | br %r1 # branch to sys_sigreturn |
399 | 398 | ||
400 | # | ||
401 | # sigsuspend and rt_sigsuspend need pt_regs as an additional | ||
402 | # parameter and they have to skip the store of %r2 into the | ||
403 | # user register %r2 because the return value was set in | ||
404 | # sigsuspend and rt_sigsuspend already and must not be overwritten! | ||
405 | # | ||
406 | |||
407 | sys_sigsuspend_glue: | ||
408 | lr %r5,%r4 # move mask back | ||
409 | lr %r4,%r3 # move history1 parameter | ||
410 | lr %r3,%r2 # move history0 parameter | ||
411 | la %r2,SP_PTREGS(%r15) # load pt_regs as first parameter | ||
412 | l %r1,BASED(.Lsigsuspend) | ||
413 | la %r14,4(%r14) # skip store of return value | ||
414 | br %r1 # branch to sys_sigsuspend | ||
415 | |||
416 | sys_rt_sigsuspend_glue: | ||
417 | lr %r4,%r3 # move sigsetsize parameter | ||
418 | lr %r3,%r2 # move unewset parameter | ||
419 | la %r2,SP_PTREGS(%r15) # load pt_regs as first parameter | ||
420 | l %r1,BASED(.Lrt_sigsuspend) | ||
421 | la %r14,4(%r14) # skip store of return value | ||
422 | br %r1 # branch to sys_rt_sigsuspend | ||
423 | |||
424 | sys_sigaltstack_glue: | 399 | sys_sigaltstack_glue: |
425 | la %r4,SP_PTREGS(%r15) # load pt_regs as parameter | 400 | la %r4,SP_PTREGS(%r15) # load pt_regs as parameter |
426 | l %r1,BASED(.Lsigaltstack) | 401 | l %r1,BASED(.Lsigaltstack) |
@@ -604,15 +579,16 @@ io_work: | |||
604 | lr %r15,%r1 | 579 | lr %r15,%r1 |
605 | # | 580 | # |
606 | # One of the work bits is on. Find out which one. | 581 | # One of the work bits is on. Find out which one. |
607 | # Checked are: _TIF_SIGPENDING, _TIF_NEED_RESCHED and _TIF_MCCK_PENDING | 582 | # Checked are: _TIF_SIGPENDING, _TIF_RESTORE_SIGMASK, _TIF_NEED_RESCHED |
583 | # and _TIF_MCCK_PENDING | ||
608 | # | 584 | # |
609 | io_work_loop: | 585 | io_work_loop: |
610 | tm __TI_flags+3(%r9),_TIF_MCCK_PENDING | 586 | tm __TI_flags+3(%r9),_TIF_MCCK_PENDING |
611 | bo BASED(io_mcck_pending) | 587 | bo BASED(io_mcck_pending) |
612 | tm __TI_flags+3(%r9),_TIF_NEED_RESCHED | 588 | tm __TI_flags+3(%r9),_TIF_NEED_RESCHED |
613 | bo BASED(io_reschedule) | 589 | bo BASED(io_reschedule) |
614 | tm __TI_flags+3(%r9),_TIF_SIGPENDING | 590 | tm __TI_flags+3(%r9),(_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK) |
615 | bo BASED(io_sigpending) | 591 | bnz BASED(io_sigpending) |
616 | b BASED(io_leave) | 592 | b BASED(io_leave) |
617 | 593 | ||
618 | # | 594 | # |
@@ -636,12 +612,11 @@ io_reschedule: | |||
636 | b BASED(io_work_loop) | 612 | b BASED(io_work_loop) |
637 | 613 | ||
638 | # | 614 | # |
639 | # _TIF_SIGPENDING is set, call do_signal | 615 | # _TIF_SIGPENDING or _TIF_RESTORE_SIGMASK is set, call do_signal |
640 | # | 616 | # |
641 | io_sigpending: | 617 | io_sigpending: |
642 | stosm __SF_EMPTY(%r15),0x03 # reenable interrupts | 618 | stosm __SF_EMPTY(%r15),0x03 # reenable interrupts |
643 | la %r2,SP_PTREGS(%r15) # load pt_regs | 619 | la %r2,SP_PTREGS(%r15) # load pt_regs |
644 | sr %r3,%r3 # clear *oldset | ||
645 | l %r1,BASED(.Ldo_signal) | 620 | l %r1,BASED(.Ldo_signal) |
646 | basr %r14,%r1 # call do_signal | 621 | basr %r14,%r1 # call do_signal |
647 | stnsm __SF_EMPTY(%r15),0xfc # disable I/O and ext. interrupts | 622 | stnsm __SF_EMPTY(%r15),0xfc # disable I/O and ext. interrupts |
diff --git a/arch/s390/kernel/entry64.S b/arch/s390/kernel/entry64.S index 369ab4413ec7..2ac095bc0e25 100644 --- a/arch/s390/kernel/entry64.S +++ b/arch/s390/kernel/entry64.S | |||
@@ -1,9 +1,8 @@ | |||
1 | /* | 1 | /* |
2 | * arch/s390/kernel/entry.S | 2 | * arch/s390/kernel/entry64.S |
3 | * S390 low-level entry points. | 3 | * S390 low-level entry points. |
4 | * | 4 | * |
5 | * S390 version | 5 | * Copyright (C) IBM Corp. 1999,2006 |
6 | * Copyright (C) 1999,2000 IBM Deutschland Entwicklung GmbH, IBM Corporation | ||
7 | * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com), | 6 | * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com), |
8 | * Hartmut Penner (hp@de.ibm.com), | 7 | * Hartmut Penner (hp@de.ibm.com), |
9 | * Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com), | 8 | * Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com), |
@@ -53,9 +52,10 @@ SP_SIZE = STACK_FRAME_OVERHEAD + __PT_SIZE | |||
53 | STACK_SHIFT = PAGE_SHIFT + THREAD_ORDER | 52 | STACK_SHIFT = PAGE_SHIFT + THREAD_ORDER |
54 | STACK_SIZE = 1 << STACK_SHIFT | 53 | STACK_SIZE = 1 << STACK_SHIFT |
55 | 54 | ||
56 | _TIF_WORK_SVC = (_TIF_SIGPENDING | _TIF_NEED_RESCHED | _TIF_MCCK_PENDING | \ | 55 | _TIF_WORK_SVC = (_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK | _TIF_NEED_RESCHED | \ |
57 | _TIF_RESTART_SVC | _TIF_SINGLE_STEP ) | 56 | _TIF_MCCK_PENDING | _TIF_RESTART_SVC | _TIF_SINGLE_STEP ) |
58 | _TIF_WORK_INT = (_TIF_SIGPENDING | _TIF_NEED_RESCHED | _TIF_MCCK_PENDING) | 57 | _TIF_WORK_INT = (_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK | _TIF_NEED_RESCHED | \ |
58 | _TIF_MCCK_PENDING) | ||
59 | 59 | ||
60 | #define BASED(name) name-system_call(%r13) | 60 | #define BASED(name) name-system_call(%r13) |
61 | 61 | ||
@@ -249,8 +249,8 @@ sysc_work: | |||
249 | jo sysc_mcck_pending | 249 | jo sysc_mcck_pending |
250 | tm __TI_flags+7(%r9),_TIF_NEED_RESCHED | 250 | tm __TI_flags+7(%r9),_TIF_NEED_RESCHED |
251 | jo sysc_reschedule | 251 | jo sysc_reschedule |
252 | tm __TI_flags+7(%r9),_TIF_SIGPENDING | 252 | tm __TI_flags+7(%r9),(_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK) |
253 | jo sysc_sigpending | 253 | jnz sysc_sigpending |
254 | tm __TI_flags+7(%r9),_TIF_RESTART_SVC | 254 | tm __TI_flags+7(%r9),_TIF_RESTART_SVC |
255 | jo sysc_restart | 255 | jo sysc_restart |
256 | tm __TI_flags+7(%r9),_TIF_SINGLE_STEP | 256 | tm __TI_flags+7(%r9),_TIF_SINGLE_STEP |
@@ -272,12 +272,11 @@ sysc_mcck_pending: | |||
272 | jg s390_handle_mcck # TIF bit will be cleared by handler | 272 | jg s390_handle_mcck # TIF bit will be cleared by handler |
273 | 273 | ||
274 | # | 274 | # |
275 | # _TIF_SIGPENDING is set, call do_signal | 275 | # _TIF_SIGPENDING or _TIF_RESTORE_SIGMASK is set, call do_signal |
276 | # | 276 | # |
277 | sysc_sigpending: | 277 | sysc_sigpending: |
278 | ni __TI_flags+7(%r9),255-_TIF_SINGLE_STEP # clear TIF_SINGLE_STEP | 278 | ni __TI_flags+7(%r9),255-_TIF_SINGLE_STEP # clear TIF_SINGLE_STEP |
279 | la %r2,SP_PTREGS(%r15) # load pt_regs | 279 | la %r2,SP_PTREGS(%r15) # load pt_regs |
280 | sgr %r3,%r3 # clear *oldset | ||
281 | brasl %r14,do_signal # call do_signal | 280 | brasl %r14,do_signal # call do_signal |
282 | tm __TI_flags+7(%r9),_TIF_RESTART_SVC | 281 | tm __TI_flags+7(%r9),_TIF_RESTART_SVC |
283 | jo sysc_restart | 282 | jo sysc_restart |
@@ -414,52 +413,6 @@ sys32_rt_sigreturn_glue: | |||
414 | jg sys32_rt_sigreturn # branch to sys32_sigreturn | 413 | jg sys32_rt_sigreturn # branch to sys32_sigreturn |
415 | #endif | 414 | #endif |
416 | 415 | ||
417 | # | ||
418 | # sigsuspend and rt_sigsuspend need pt_regs as an additional | ||
419 | # parameter and they have to skip the store of %r2 into the | ||
420 | # user register %r2 because the return value was set in | ||
421 | # sigsuspend and rt_sigsuspend already and must not be overwritten! | ||
422 | # | ||
423 | |||
424 | sys_sigsuspend_glue: | ||
425 | lgr %r5,%r4 # move mask back | ||
426 | lgr %r4,%r3 # move history1 parameter | ||
427 | lgr %r3,%r2 # move history0 parameter | ||
428 | la %r2,SP_PTREGS(%r15) # load pt_regs as first parameter | ||
429 | la %r14,6(%r14) # skip store of return value | ||
430 | jg sys_sigsuspend # branch to sys_sigsuspend | ||
431 | |||
432 | #ifdef CONFIG_COMPAT | ||
433 | sys32_sigsuspend_glue: | ||
434 | llgfr %r4,%r4 # unsigned long | ||
435 | lgr %r5,%r4 # move mask back | ||
436 | lgfr %r3,%r3 # int | ||
437 | lgr %r4,%r3 # move history1 parameter | ||
438 | lgfr %r2,%r2 # int | ||
439 | lgr %r3,%r2 # move history0 parameter | ||
440 | la %r2,SP_PTREGS(%r15) # load pt_regs as first parameter | ||
441 | la %r14,6(%r14) # skip store of return value | ||
442 | jg sys32_sigsuspend # branch to sys32_sigsuspend | ||
443 | #endif | ||
444 | |||
445 | sys_rt_sigsuspend_glue: | ||
446 | lgr %r4,%r3 # move sigsetsize parameter | ||
447 | lgr %r3,%r2 # move unewset parameter | ||
448 | la %r2,SP_PTREGS(%r15) # load pt_regs as first parameter | ||
449 | la %r14,6(%r14) # skip store of return value | ||
450 | jg sys_rt_sigsuspend # branch to sys_rt_sigsuspend | ||
451 | |||
452 | #ifdef CONFIG_COMPAT | ||
453 | sys32_rt_sigsuspend_glue: | ||
454 | llgfr %r3,%r3 # size_t | ||
455 | lgr %r4,%r3 # move sigsetsize parameter | ||
456 | llgtr %r2,%r2 # sigset_emu31_t * | ||
457 | lgr %r3,%r2 # move unewset parameter | ||
458 | la %r2,SP_PTREGS(%r15) # load pt_regs as first parameter | ||
459 | la %r14,6(%r14) # skip store of return value | ||
460 | jg sys32_rt_sigsuspend # branch to sys32_rt_sigsuspend | ||
461 | #endif | ||
462 | |||
463 | sys_sigaltstack_glue: | 416 | sys_sigaltstack_glue: |
464 | la %r4,SP_PTREGS(%r15) # load pt_regs as parameter | 417 | la %r4,SP_PTREGS(%r15) # load pt_regs as parameter |
465 | jg sys_sigaltstack # branch to sys_sigreturn | 418 | jg sys_sigaltstack # branch to sys_sigreturn |
@@ -646,15 +599,16 @@ io_work: | |||
646 | lgr %r15,%r1 | 599 | lgr %r15,%r1 |
647 | # | 600 | # |
648 | # One of the work bits is on. Find out which one. | 601 | # One of the work bits is on. Find out which one. |
649 | # Checked are: _TIF_SIGPENDING, _TIF_NEED_RESCHED and _TIF_MCCK_PENDING | 602 | # Checked are: _TIF_SIGPENDING, _TIF_RESTORE_SIGPENDING, _TIF_NEED_RESCHED |
603 | # and _TIF_MCCK_PENDING | ||
650 | # | 604 | # |
651 | io_work_loop: | 605 | io_work_loop: |
652 | tm __TI_flags+7(%r9),_TIF_MCCK_PENDING | 606 | tm __TI_flags+7(%r9),_TIF_MCCK_PENDING |
653 | jo io_mcck_pending | 607 | jo io_mcck_pending |
654 | tm __TI_flags+7(%r9),_TIF_NEED_RESCHED | 608 | tm __TI_flags+7(%r9),_TIF_NEED_RESCHED |
655 | jo io_reschedule | 609 | jo io_reschedule |
656 | tm __TI_flags+7(%r9),_TIF_SIGPENDING | 610 | tm __TI_flags+7(%r9),(_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK) |
657 | jo io_sigpending | 611 | jnz io_sigpending |
658 | j io_leave | 612 | j io_leave |
659 | 613 | ||
660 | # | 614 | # |
@@ -676,12 +630,11 @@ io_reschedule: | |||
676 | j io_work_loop | 630 | j io_work_loop |
677 | 631 | ||
678 | # | 632 | # |
679 | # _TIF_SIGPENDING is set, call do_signal | 633 | # _TIF_SIGPENDING or _TIF_RESTORE_SIGMASK is set, call do_signal |
680 | # | 634 | # |
681 | io_sigpending: | 635 | io_sigpending: |
682 | stosm __SF_EMPTY(%r15),0x03 # reenable interrupts | 636 | stosm __SF_EMPTY(%r15),0x03 # reenable interrupts |
683 | la %r2,SP_PTREGS(%r15) # load pt_regs | 637 | la %r2,SP_PTREGS(%r15) # load pt_regs |
684 | slgr %r3,%r3 # clear *oldset | ||
685 | brasl %r14,do_signal # call do_signal | 638 | brasl %r14,do_signal # call do_signal |
686 | stnsm __SF_EMPTY(%r15),0xfc # disable I/O and ext. interrupts | 639 | stnsm __SF_EMPTY(%r15),0xfc # disable I/O and ext. interrupts |
687 | j io_work_loop | 640 | j io_work_loop |
diff --git a/arch/s390/kernel/machine_kexec.c b/arch/s390/kernel/machine_kexec.c index f0ed5c642c74..bad81b5832db 100644 --- a/arch/s390/kernel/machine_kexec.c +++ b/arch/s390/kernel/machine_kexec.c | |||
@@ -12,15 +12,16 @@ | |||
12 | * on the S390 architecture. | 12 | * on the S390 architecture. |
13 | */ | 13 | */ |
14 | 14 | ||
15 | #include <asm/cio.h> | ||
16 | #include <asm/setup.h> | ||
17 | #include <linux/device.h> | 15 | #include <linux/device.h> |
18 | #include <linux/mm.h> | 16 | #include <linux/mm.h> |
19 | #include <linux/kexec.h> | 17 | #include <linux/kexec.h> |
20 | #include <linux/delay.h> | 18 | #include <linux/delay.h> |
19 | #include <asm/cio.h> | ||
20 | #include <asm/setup.h> | ||
21 | #include <asm/pgtable.h> | 21 | #include <asm/pgtable.h> |
22 | #include <asm/pgalloc.h> | 22 | #include <asm/pgalloc.h> |
23 | #include <asm/system.h> | 23 | #include <asm/system.h> |
24 | #include <asm/smp.h> | ||
24 | 25 | ||
25 | static void kexec_halt_all_cpus(void *); | 26 | static void kexec_halt_all_cpus(void *); |
26 | 27 | ||
diff --git a/arch/s390/kernel/process.c b/arch/s390/kernel/process.c index 008c74526fd3..da6fbae8df91 100644 --- a/arch/s390/kernel/process.c +++ b/arch/s390/kernel/process.c | |||
@@ -128,8 +128,10 @@ void default_idle(void) | |||
128 | __ctl_set_bit(8, 15); | 128 | __ctl_set_bit(8, 15); |
129 | 129 | ||
130 | #ifdef CONFIG_HOTPLUG_CPU | 130 | #ifdef CONFIG_HOTPLUG_CPU |
131 | if (cpu_is_offline(cpu)) | 131 | if (cpu_is_offline(cpu)) { |
132 | preempt_enable_no_resched(); | ||
132 | cpu_die(); | 133 | cpu_die(); |
134 | } | ||
133 | #endif | 135 | #endif |
134 | 136 | ||
135 | local_mcck_disable(); | 137 | local_mcck_disable(); |
diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c index de8784267473..24f62f16c0e5 100644 --- a/arch/s390/kernel/setup.c +++ b/arch/s390/kernel/setup.c | |||
@@ -600,6 +600,7 @@ setup_arch(char **cmdline_p) | |||
600 | init_mm.brk = (unsigned long) &_end; | 600 | init_mm.brk = (unsigned long) &_end; |
601 | 601 | ||
602 | parse_cmdline_early(cmdline_p); | 602 | parse_cmdline_early(cmdline_p); |
603 | parse_early_param(); | ||
603 | 604 | ||
604 | setup_memory(); | 605 | setup_memory(); |
605 | setup_resources(); | 606 | setup_resources(); |
@@ -607,6 +608,7 @@ setup_arch(char **cmdline_p) | |||
607 | 608 | ||
608 | cpu_init(); | 609 | cpu_init(); |
609 | __cpu_logical_map[0] = S390_lowcore.cpu_data.cpu_addr; | 610 | __cpu_logical_map[0] = S390_lowcore.cpu_data.cpu_addr; |
611 | smp_setup_cpu_possible_map(); | ||
610 | 612 | ||
611 | /* | 613 | /* |
612 | * Create kernel page tables and switch to virtual addressing. | 614 | * Create kernel page tables and switch to virtual addressing. |
diff --git a/arch/s390/kernel/signal.c b/arch/s390/kernel/signal.c index 6ae4a77270b5..ae1927e48cfb 100644 --- a/arch/s390/kernel/signal.c +++ b/arch/s390/kernel/signal.c | |||
@@ -1,8 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * arch/s390/kernel/signal.c | 2 | * arch/s390/kernel/signal.c |
3 | * | 3 | * |
4 | * S390 version | 4 | * Copyright (C) IBM Corp. 1999,2006 |
5 | * Copyright (C) 1999,2000 IBM Deutschland Entwicklung GmbH, IBM Corporation | ||
6 | * Author(s): Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com) | 5 | * Author(s): Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com) |
7 | * | 6 | * |
8 | * Based on Intel version | 7 | * Based on Intel version |
@@ -51,60 +50,24 @@ typedef struct | |||
51 | struct ucontext uc; | 50 | struct ucontext uc; |
52 | } rt_sigframe; | 51 | } rt_sigframe; |
53 | 52 | ||
54 | int do_signal(struct pt_regs *regs, sigset_t *oldset); | ||
55 | |||
56 | /* | 53 | /* |
57 | * Atomically swap in the new signal mask, and wait for a signal. | 54 | * Atomically swap in the new signal mask, and wait for a signal. |
58 | */ | 55 | */ |
59 | asmlinkage int | 56 | asmlinkage int |
60 | sys_sigsuspend(struct pt_regs * regs, int history0, int history1, | 57 | sys_sigsuspend(int history0, int history1, old_sigset_t mask) |
61 | old_sigset_t mask) | ||
62 | { | 58 | { |
63 | sigset_t saveset; | ||
64 | |||
65 | mask &= _BLOCKABLE; | 59 | mask &= _BLOCKABLE; |
66 | spin_lock_irq(¤t->sighand->siglock); | 60 | spin_lock_irq(¤t->sighand->siglock); |
67 | saveset = current->blocked; | 61 | current->saved_sigmask = current->blocked; |
68 | siginitset(¤t->blocked, mask); | 62 | siginitset(¤t->blocked, mask); |
69 | recalc_sigpending(); | 63 | recalc_sigpending(); |
70 | spin_unlock_irq(¤t->sighand->siglock); | 64 | spin_unlock_irq(¤t->sighand->siglock); |
71 | regs->gprs[2] = -EINTR; | ||
72 | |||
73 | while (1) { | ||
74 | set_current_state(TASK_INTERRUPTIBLE); | ||
75 | schedule(); | ||
76 | if (do_signal(regs, &saveset)) | ||
77 | return -EINTR; | ||
78 | } | ||
79 | } | ||
80 | |||
81 | asmlinkage long | ||
82 | sys_rt_sigsuspend(struct pt_regs *regs, sigset_t __user *unewset, | ||
83 | size_t sigsetsize) | ||
84 | { | ||
85 | sigset_t saveset, newset; | ||
86 | 65 | ||
87 | /* XXX: Don't preclude handling different sized sigset_t's. */ | 66 | current->state = TASK_INTERRUPTIBLE; |
88 | if (sigsetsize != sizeof(sigset_t)) | 67 | schedule(); |
89 | return -EINVAL; | 68 | set_thread_flag(TIF_RESTORE_SIGMASK); |
90 | 69 | ||
91 | if (copy_from_user(&newset, unewset, sizeof(newset))) | 70 | return -ERESTARTNOHAND; |
92 | return -EFAULT; | ||
93 | sigdelsetmask(&newset, ~_BLOCKABLE); | ||
94 | |||
95 | spin_lock_irq(¤t->sighand->siglock); | ||
96 | saveset = current->blocked; | ||
97 | current->blocked = newset; | ||
98 | recalc_sigpending(); | ||
99 | spin_unlock_irq(¤t->sighand->siglock); | ||
100 | regs->gprs[2] = -EINTR; | ||
101 | |||
102 | while (1) { | ||
103 | set_current_state(TASK_INTERRUPTIBLE); | ||
104 | schedule(); | ||
105 | if (do_signal(regs, &saveset)) | ||
106 | return -EINTR; | ||
107 | } | ||
108 | } | 71 | } |
109 | 72 | ||
110 | asmlinkage long | 73 | asmlinkage long |
@@ -306,8 +269,8 @@ static inline int map_signal(int sig) | |||
306 | return sig; | 269 | return sig; |
307 | } | 270 | } |
308 | 271 | ||
309 | static void setup_frame(int sig, struct k_sigaction *ka, | 272 | static int setup_frame(int sig, struct k_sigaction *ka, |
310 | sigset_t *set, struct pt_regs * regs) | 273 | sigset_t *set, struct pt_regs * regs) |
311 | { | 274 | { |
312 | sigframe __user *frame; | 275 | sigframe __user *frame; |
313 | 276 | ||
@@ -355,13 +318,14 @@ static void setup_frame(int sig, struct k_sigaction *ka, | |||
355 | /* Place signal number on stack to allow backtrace from handler. */ | 318 | /* Place signal number on stack to allow backtrace from handler. */ |
356 | if (__put_user(regs->gprs[2], (int __user *) &frame->signo)) | 319 | if (__put_user(regs->gprs[2], (int __user *) &frame->signo)) |
357 | goto give_sigsegv; | 320 | goto give_sigsegv; |
358 | return; | 321 | return 0; |
359 | 322 | ||
360 | give_sigsegv: | 323 | give_sigsegv: |
361 | force_sigsegv(sig, current); | 324 | force_sigsegv(sig, current); |
325 | return -EFAULT; | ||
362 | } | 326 | } |
363 | 327 | ||
364 | static void setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, | 328 | static int setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, |
365 | sigset_t *set, struct pt_regs * regs) | 329 | sigset_t *set, struct pt_regs * regs) |
366 | { | 330 | { |
367 | int err = 0; | 331 | int err = 0; |
@@ -409,32 +373,39 @@ static void setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, | |||
409 | regs->gprs[2] = map_signal(sig); | 373 | regs->gprs[2] = map_signal(sig); |
410 | regs->gprs[3] = (unsigned long) &frame->info; | 374 | regs->gprs[3] = (unsigned long) &frame->info; |
411 | regs->gprs[4] = (unsigned long) &frame->uc; | 375 | regs->gprs[4] = (unsigned long) &frame->uc; |
412 | return; | 376 | return 0; |
413 | 377 | ||
414 | give_sigsegv: | 378 | give_sigsegv: |
415 | force_sigsegv(sig, current); | 379 | force_sigsegv(sig, current); |
380 | return -EFAULT; | ||
416 | } | 381 | } |
417 | 382 | ||
418 | /* | 383 | /* |
419 | * OK, we're invoking a handler | 384 | * OK, we're invoking a handler |
420 | */ | 385 | */ |
421 | 386 | ||
422 | static void | 387 | static int |
423 | handle_signal(unsigned long sig, struct k_sigaction *ka, | 388 | handle_signal(unsigned long sig, struct k_sigaction *ka, |
424 | siginfo_t *info, sigset_t *oldset, struct pt_regs * regs) | 389 | siginfo_t *info, sigset_t *oldset, struct pt_regs * regs) |
425 | { | 390 | { |
391 | int ret; | ||
392 | |||
426 | /* Set up the stack frame */ | 393 | /* Set up the stack frame */ |
427 | if (ka->sa.sa_flags & SA_SIGINFO) | 394 | if (ka->sa.sa_flags & SA_SIGINFO) |
428 | setup_rt_frame(sig, ka, info, oldset, regs); | 395 | ret = setup_rt_frame(sig, ka, info, oldset, regs); |
429 | else | 396 | else |
430 | setup_frame(sig, ka, oldset, regs); | 397 | ret = setup_frame(sig, ka, oldset, regs); |
398 | |||
399 | if (ret == 0) { | ||
400 | spin_lock_irq(¤t->sighand->siglock); | ||
401 | sigorsets(¤t->blocked,¤t->blocked,&ka->sa.sa_mask); | ||
402 | if (!(ka->sa.sa_flags & SA_NODEFER)) | ||
403 | sigaddset(¤t->blocked,sig); | ||
404 | recalc_sigpending(); | ||
405 | spin_unlock_irq(¤t->sighand->siglock); | ||
406 | } | ||
431 | 407 | ||
432 | spin_lock_irq(¤t->sighand->siglock); | 408 | return ret; |
433 | sigorsets(¤t->blocked,¤t->blocked,&ka->sa.sa_mask); | ||
434 | if (!(ka->sa.sa_flags & SA_NODEFER)) | ||
435 | sigaddset(¤t->blocked,sig); | ||
436 | recalc_sigpending(); | ||
437 | spin_unlock_irq(¤t->sighand->siglock); | ||
438 | } | 409 | } |
439 | 410 | ||
440 | /* | 411 | /* |
@@ -446,12 +417,13 @@ handle_signal(unsigned long sig, struct k_sigaction *ka, | |||
446 | * the kernel can handle, and then we build all the user-level signal handling | 417 | * the kernel can handle, and then we build all the user-level signal handling |
447 | * stack-frames in one go after that. | 418 | * stack-frames in one go after that. |
448 | */ | 419 | */ |
449 | int do_signal(struct pt_regs *regs, sigset_t *oldset) | 420 | void do_signal(struct pt_regs *regs) |
450 | { | 421 | { |
451 | unsigned long retval = 0, continue_addr = 0, restart_addr = 0; | 422 | unsigned long retval = 0, continue_addr = 0, restart_addr = 0; |
452 | siginfo_t info; | 423 | siginfo_t info; |
453 | int signr; | 424 | int signr; |
454 | struct k_sigaction ka; | 425 | struct k_sigaction ka; |
426 | sigset_t *oldset; | ||
455 | 427 | ||
456 | /* | 428 | /* |
457 | * We want the common case to go fast, which | 429 | * We want the common case to go fast, which |
@@ -460,9 +432,11 @@ int do_signal(struct pt_regs *regs, sigset_t *oldset) | |||
460 | * if so. | 432 | * if so. |
461 | */ | 433 | */ |
462 | if (!user_mode(regs)) | 434 | if (!user_mode(regs)) |
463 | return 1; | 435 | return; |
464 | 436 | ||
465 | if (!oldset) | 437 | if (test_thread_flag(TIF_RESTORE_SIGMASK)) |
438 | oldset = ¤t->saved_sigmask; | ||
439 | else | ||
466 | oldset = ¤t->blocked; | 440 | oldset = ¤t->blocked; |
467 | 441 | ||
468 | /* Are we from a system call? */ | 442 | /* Are we from a system call? */ |
@@ -473,12 +447,14 @@ int do_signal(struct pt_regs *regs, sigset_t *oldset) | |||
473 | 447 | ||
474 | /* Prepare for system call restart. We do this here so that a | 448 | /* Prepare for system call restart. We do this here so that a |
475 | debugger will see the already changed PSW. */ | 449 | debugger will see the already changed PSW. */ |
476 | if (retval == -ERESTARTNOHAND || | 450 | switch (retval) { |
477 | retval == -ERESTARTSYS || | 451 | case -ERESTARTNOHAND: |
478 | retval == -ERESTARTNOINTR) { | 452 | case -ERESTARTSYS: |
453 | case -ERESTARTNOINTR: | ||
479 | regs->gprs[2] = regs->orig_gpr2; | 454 | regs->gprs[2] = regs->orig_gpr2; |
480 | regs->psw.addr = restart_addr; | 455 | regs->psw.addr = restart_addr; |
481 | } else if (retval == -ERESTART_RESTARTBLOCK) { | 456 | break; |
457 | case -ERESTART_RESTARTBLOCK: | ||
482 | regs->gprs[2] = -EINTR; | 458 | regs->gprs[2] = -EINTR; |
483 | } | 459 | } |
484 | } | 460 | } |
@@ -503,17 +479,38 @@ int do_signal(struct pt_regs *regs, sigset_t *oldset) | |||
503 | /* Whee! Actually deliver the signal. */ | 479 | /* Whee! Actually deliver the signal. */ |
504 | #ifdef CONFIG_COMPAT | 480 | #ifdef CONFIG_COMPAT |
505 | if (test_thread_flag(TIF_31BIT)) { | 481 | if (test_thread_flag(TIF_31BIT)) { |
506 | extern void handle_signal32(unsigned long sig, | 482 | extern int handle_signal32(unsigned long sig, |
507 | struct k_sigaction *ka, | 483 | struct k_sigaction *ka, |
508 | siginfo_t *info, | 484 | siginfo_t *info, |
509 | sigset_t *oldset, | 485 | sigset_t *oldset, |
510 | struct pt_regs *regs); | 486 | struct pt_regs *regs); |
511 | handle_signal32(signr, &ka, &info, oldset, regs); | 487 | if (handle_signal32( |
512 | return 1; | 488 | signr, &ka, &info, oldset, regs) == 0) { |
489 | if (test_thread_flag(TIF_RESTORE_SIGMASK)) | ||
490 | clear_thread_flag(TIF_RESTORE_SIGMASK); | ||
491 | } | ||
492 | return; | ||
513 | } | 493 | } |
514 | #endif | 494 | #endif |
515 | handle_signal(signr, &ka, &info, oldset, regs); | 495 | if (handle_signal(signr, &ka, &info, oldset, regs) == 0) { |
516 | return 1; | 496 | /* |
497 | * A signal was successfully delivered; the saved | ||
498 | * sigmask will have been stored in the signal frame, | ||
499 | * and will be restored by sigreturn, so we can simply | ||
500 | * clear the TIF_RESTORE_SIGMASK flag. | ||
501 | */ | ||
502 | if (test_thread_flag(TIF_RESTORE_SIGMASK)) | ||
503 | clear_thread_flag(TIF_RESTORE_SIGMASK); | ||
504 | } | ||
505 | return; | ||
506 | } | ||
507 | |||
508 | /* | ||
509 | * If there's no signal to deliver, we just put the saved sigmask back. | ||
510 | */ | ||
511 | if (test_thread_flag(TIF_RESTORE_SIGMASK)) { | ||
512 | clear_thread_flag(TIF_RESTORE_SIGMASK); | ||
513 | sigprocmask(SIG_SETMASK, ¤t->saved_sigmask, NULL); | ||
517 | } | 514 | } |
518 | 515 | ||
519 | /* Restart a different system call. */ | 516 | /* Restart a different system call. */ |
@@ -522,5 +519,4 @@ int do_signal(struct pt_regs *regs, sigset_t *oldset) | |||
522 | regs->gprs[2] = __NR_restart_syscall; | 519 | regs->gprs[2] = __NR_restart_syscall; |
523 | set_thread_flag(TIF_RESTART_SVC); | 520 | set_thread_flag(TIF_RESTART_SVC); |
524 | } | 521 | } |
525 | return 0; | ||
526 | } | 522 | } |
diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c index cbfcfd02a43a..7dbe00c76c6b 100644 --- a/arch/s390/kernel/smp.c +++ b/arch/s390/kernel/smp.c | |||
@@ -1,8 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * arch/s390/kernel/smp.c | 2 | * arch/s390/kernel/smp.c |
3 | * | 3 | * |
4 | * S390 version | 4 | * Copyright (C) IBM Corp. 1999,2006 |
5 | * Copyright (C) 1999,2000 IBM Deutschland Entwicklung GmbH, IBM Corporation | ||
6 | * Author(s): Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com), | 5 | * Author(s): Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com), |
7 | * Martin Schwidefsky (schwidefsky@de.ibm.com) | 6 | * Martin Schwidefsky (schwidefsky@de.ibm.com) |
8 | * Heiko Carstens (heiko.carstens@de.ibm.com) | 7 | * Heiko Carstens (heiko.carstens@de.ibm.com) |
@@ -41,8 +40,6 @@ | |||
41 | #include <asm/cpcmd.h> | 40 | #include <asm/cpcmd.h> |
42 | #include <asm/tlbflush.h> | 41 | #include <asm/tlbflush.h> |
43 | 42 | ||
44 | /* prototypes */ | ||
45 | |||
46 | extern volatile int __cpu_logical_map[]; | 43 | extern volatile int __cpu_logical_map[]; |
47 | 44 | ||
48 | /* | 45 | /* |
@@ -51,13 +48,11 @@ extern volatile int __cpu_logical_map[]; | |||
51 | 48 | ||
52 | struct _lowcore *lowcore_ptr[NR_CPUS]; | 49 | struct _lowcore *lowcore_ptr[NR_CPUS]; |
53 | 50 | ||
54 | cpumask_t cpu_online_map; | 51 | cpumask_t cpu_online_map = CPU_MASK_NONE; |
55 | cpumask_t cpu_possible_map; | 52 | cpumask_t cpu_possible_map = CPU_MASK_NONE; |
56 | 53 | ||
57 | static struct task_struct *current_set[NR_CPUS]; | 54 | static struct task_struct *current_set[NR_CPUS]; |
58 | 55 | ||
59 | EXPORT_SYMBOL(cpu_online_map); | ||
60 | |||
61 | /* | 56 | /* |
62 | * Reboot, halt and power_off routines for SMP. | 57 | * Reboot, halt and power_off routines for SMP. |
63 | */ | 58 | */ |
@@ -490,10 +485,10 @@ void smp_ctl_clear_bit(int cr, int bit) { | |||
490 | * Lets check how many CPUs we have. | 485 | * Lets check how many CPUs we have. |
491 | */ | 486 | */ |
492 | 487 | ||
493 | void | 488 | static unsigned int |
494 | __init smp_check_cpus(unsigned int max_cpus) | 489 | __init smp_count_cpus(void) |
495 | { | 490 | { |
496 | int cpu, num_cpus; | 491 | unsigned int cpu, num_cpus; |
497 | __u16 boot_cpu_addr; | 492 | __u16 boot_cpu_addr; |
498 | 493 | ||
499 | /* | 494 | /* |
@@ -503,22 +498,20 @@ __init smp_check_cpus(unsigned int max_cpus) | |||
503 | boot_cpu_addr = S390_lowcore.cpu_data.cpu_addr; | 498 | boot_cpu_addr = S390_lowcore.cpu_data.cpu_addr; |
504 | current_thread_info()->cpu = 0; | 499 | current_thread_info()->cpu = 0; |
505 | num_cpus = 1; | 500 | num_cpus = 1; |
506 | for (cpu = 0; cpu <= 65535 && num_cpus < max_cpus; cpu++) { | 501 | for (cpu = 0; cpu <= 65535; cpu++) { |
507 | if ((__u16) cpu == boot_cpu_addr) | 502 | if ((__u16) cpu == boot_cpu_addr) |
508 | continue; | 503 | continue; |
509 | __cpu_logical_map[num_cpus] = (__u16) cpu; | 504 | __cpu_logical_map[1] = (__u16) cpu; |
510 | if (signal_processor(num_cpus, sigp_sense) == | 505 | if (signal_processor(1, sigp_sense) == |
511 | sigp_not_operational) | 506 | sigp_not_operational) |
512 | continue; | 507 | continue; |
513 | cpu_set(num_cpus, cpu_present_map); | ||
514 | num_cpus++; | 508 | num_cpus++; |
515 | } | 509 | } |
516 | 510 | ||
517 | for (cpu = 1; cpu < max_cpus; cpu++) | ||
518 | cpu_set(cpu, cpu_possible_map); | ||
519 | |||
520 | printk("Detected %d CPU's\n",(int) num_cpus); | 511 | printk("Detected %d CPU's\n",(int) num_cpus); |
521 | printk("Boot cpu address %2X\n", boot_cpu_addr); | 512 | printk("Boot cpu address %2X\n", boot_cpu_addr); |
513 | |||
514 | return num_cpus; | ||
522 | } | 515 | } |
523 | 516 | ||
524 | /* | 517 | /* |
@@ -679,6 +672,44 @@ __cpu_up(unsigned int cpu) | |||
679 | return 0; | 672 | return 0; |
680 | } | 673 | } |
681 | 674 | ||
675 | static unsigned int __initdata additional_cpus; | ||
676 | static unsigned int __initdata possible_cpus; | ||
677 | |||
678 | void __init smp_setup_cpu_possible_map(void) | ||
679 | { | ||
680 | unsigned int phy_cpus, pos_cpus, cpu; | ||
681 | |||
682 | phy_cpus = smp_count_cpus(); | ||
683 | pos_cpus = min(phy_cpus + additional_cpus, (unsigned int) NR_CPUS); | ||
684 | |||
685 | if (possible_cpus) | ||
686 | pos_cpus = min(possible_cpus, (unsigned int) NR_CPUS); | ||
687 | |||
688 | for (cpu = 0; cpu < pos_cpus; cpu++) | ||
689 | cpu_set(cpu, cpu_possible_map); | ||
690 | |||
691 | phy_cpus = min(phy_cpus, pos_cpus); | ||
692 | |||
693 | for (cpu = 0; cpu < phy_cpus; cpu++) | ||
694 | cpu_set(cpu, cpu_present_map); | ||
695 | } | ||
696 | |||
697 | #ifdef CONFIG_HOTPLUG_CPU | ||
698 | |||
699 | static int __init setup_additional_cpus(char *s) | ||
700 | { | ||
701 | additional_cpus = simple_strtoul(s, NULL, 0); | ||
702 | return 0; | ||
703 | } | ||
704 | early_param("additional_cpus", setup_additional_cpus); | ||
705 | |||
706 | static int __init setup_possible_cpus(char *s) | ||
707 | { | ||
708 | possible_cpus = simple_strtoul(s, NULL, 0); | ||
709 | return 0; | ||
710 | } | ||
711 | early_param("possible_cpus", setup_possible_cpus); | ||
712 | |||
682 | int | 713 | int |
683 | __cpu_disable(void) | 714 | __cpu_disable(void) |
684 | { | 715 | { |
@@ -747,6 +778,8 @@ cpu_die(void) | |||
747 | for(;;); | 778 | for(;;); |
748 | } | 779 | } |
749 | 780 | ||
781 | #endif /* CONFIG_HOTPLUG_CPU */ | ||
782 | |||
750 | /* | 783 | /* |
751 | * Cycle through the processors and setup structures. | 784 | * Cycle through the processors and setup structures. |
752 | */ | 785 | */ |
@@ -760,7 +793,6 @@ void __init smp_prepare_cpus(unsigned int max_cpus) | |||
760 | /* request the 0x1201 emergency signal external interrupt */ | 793 | /* request the 0x1201 emergency signal external interrupt */ |
761 | if (register_external_interrupt(0x1201, do_ext_call_interrupt) != 0) | 794 | if (register_external_interrupt(0x1201, do_ext_call_interrupt) != 0) |
762 | panic("Couldn't request external interrupt 0x1201"); | 795 | panic("Couldn't request external interrupt 0x1201"); |
763 | smp_check_cpus(max_cpus); | ||
764 | memset(lowcore_ptr,0,sizeof(lowcore_ptr)); | 796 | memset(lowcore_ptr,0,sizeof(lowcore_ptr)); |
765 | /* | 797 | /* |
766 | * Initialize prefix pages and stacks for all possible cpus | 798 | * Initialize prefix pages and stacks for all possible cpus |
@@ -809,8 +841,6 @@ void __devinit smp_prepare_boot_cpu(void) | |||
809 | BUG_ON(smp_processor_id() != 0); | 841 | BUG_ON(smp_processor_id() != 0); |
810 | 842 | ||
811 | cpu_set(0, cpu_online_map); | 843 | cpu_set(0, cpu_online_map); |
812 | cpu_set(0, cpu_present_map); | ||
813 | cpu_set(0, cpu_possible_map); | ||
814 | S390_lowcore.percpu_offset = __per_cpu_offset[0]; | 844 | S390_lowcore.percpu_offset = __per_cpu_offset[0]; |
815 | current_set[0] = current; | 845 | current_set[0] = current; |
816 | } | 846 | } |
@@ -849,6 +879,7 @@ static int __init topology_init(void) | |||
849 | 879 | ||
850 | subsys_initcall(topology_init); | 880 | subsys_initcall(topology_init); |
851 | 881 | ||
882 | EXPORT_SYMBOL(cpu_online_map); | ||
852 | EXPORT_SYMBOL(cpu_possible_map); | 883 | EXPORT_SYMBOL(cpu_possible_map); |
853 | EXPORT_SYMBOL(lowcore_ptr); | 884 | EXPORT_SYMBOL(lowcore_ptr); |
854 | EXPORT_SYMBOL(smp_ctl_set_bit); | 885 | EXPORT_SYMBOL(smp_ctl_set_bit); |
diff --git a/arch/s390/kernel/sys_s390.c b/arch/s390/kernel/sys_s390.c index 6a63553493c5..e351780bb660 100644 --- a/arch/s390/kernel/sys_s390.c +++ b/arch/s390/kernel/sys_s390.c | |||
@@ -122,8 +122,8 @@ out: | |||
122 | #ifndef CONFIG_64BIT | 122 | #ifndef CONFIG_64BIT |
123 | struct sel_arg_struct { | 123 | struct sel_arg_struct { |
124 | unsigned long n; | 124 | unsigned long n; |
125 | fd_set *inp, *outp, *exp; | 125 | fd_set __user *inp, *outp, *exp; |
126 | struct timeval *tvp; | 126 | struct timeval __user *tvp; |
127 | }; | 127 | }; |
128 | 128 | ||
129 | asmlinkage long old_select(struct sel_arg_struct __user *arg) | 129 | asmlinkage long old_select(struct sel_arg_struct __user *arg) |
diff --git a/arch/s390/kernel/syscalls.S b/arch/s390/kernel/syscalls.S index 426d7cafdab3..7c88d85c3597 100644 --- a/arch/s390/kernel/syscalls.S +++ b/arch/s390/kernel/syscalls.S | |||
@@ -80,7 +80,7 @@ NI_SYSCALL /* old sgetmask syscall*/ | |||
80 | NI_SYSCALL /* old ssetmask syscall*/ | 80 | NI_SYSCALL /* old ssetmask syscall*/ |
81 | SYSCALL(sys_setreuid16,sys_ni_syscall,sys32_setreuid16_wrapper) /* old setreuid16 syscall */ | 81 | SYSCALL(sys_setreuid16,sys_ni_syscall,sys32_setreuid16_wrapper) /* old setreuid16 syscall */ |
82 | SYSCALL(sys_setregid16,sys_ni_syscall,sys32_setregid16_wrapper) /* old setregid16 syscall */ | 82 | SYSCALL(sys_setregid16,sys_ni_syscall,sys32_setregid16_wrapper) /* old setregid16 syscall */ |
83 | SYSCALL(sys_sigsuspend_glue,sys_sigsuspend_glue,sys32_sigsuspend_glue) | 83 | SYSCALL(sys_sigsuspend,sys_sigsuspend,sys_sigsuspend_wrapper) |
84 | SYSCALL(sys_sigpending,sys_sigpending,compat_sys_sigpending_wrapper) | 84 | SYSCALL(sys_sigpending,sys_sigpending,compat_sys_sigpending_wrapper) |
85 | SYSCALL(sys_sethostname,sys_sethostname,sys32_sethostname_wrapper) | 85 | SYSCALL(sys_sethostname,sys_sethostname,sys32_sethostname_wrapper) |
86 | SYSCALL(sys_setrlimit,sys_setrlimit,compat_sys_setrlimit_wrapper) /* 75 */ | 86 | SYSCALL(sys_setrlimit,sys_setrlimit,compat_sys_setrlimit_wrapper) /* 75 */ |
@@ -187,7 +187,7 @@ SYSCALL(sys_rt_sigprocmask,sys_rt_sigprocmask,sys32_rt_sigprocmask_wrapper) /* 1 | |||
187 | SYSCALL(sys_rt_sigpending,sys_rt_sigpending,sys32_rt_sigpending_wrapper) | 187 | SYSCALL(sys_rt_sigpending,sys_rt_sigpending,sys32_rt_sigpending_wrapper) |
188 | SYSCALL(sys_rt_sigtimedwait,sys_rt_sigtimedwait,compat_sys_rt_sigtimedwait_wrapper) | 188 | SYSCALL(sys_rt_sigtimedwait,sys_rt_sigtimedwait,compat_sys_rt_sigtimedwait_wrapper) |
189 | SYSCALL(sys_rt_sigqueueinfo,sys_rt_sigqueueinfo,sys32_rt_sigqueueinfo_wrapper) | 189 | SYSCALL(sys_rt_sigqueueinfo,sys_rt_sigqueueinfo,sys32_rt_sigqueueinfo_wrapper) |
190 | SYSCALL(sys_rt_sigsuspend_glue,sys_rt_sigsuspend_glue,sys32_rt_sigsuspend_glue) | 190 | SYSCALL(sys_rt_sigsuspend,sys_rt_sigsuspend,compat_sys_rt_sigsuspend_wrapper) |
191 | SYSCALL(sys_pread64,sys_pread64,sys32_pread64_wrapper) /* 180 */ | 191 | SYSCALL(sys_pread64,sys_pread64,sys32_pread64_wrapper) /* 180 */ |
192 | SYSCALL(sys_pwrite64,sys_pwrite64,sys32_pwrite64_wrapper) | 192 | SYSCALL(sys_pwrite64,sys_pwrite64,sys32_pwrite64_wrapper) |
193 | SYSCALL(sys_chown16,sys_ni_syscall,sys32_chown16_wrapper) /* old chown16 syscall */ | 193 | SYSCALL(sys_chown16,sys_ni_syscall,sys32_chown16_wrapper) /* old chown16 syscall */ |
@@ -293,5 +293,22 @@ SYSCALL(sys_waitid,sys_waitid,compat_sys_waitid_wrapper) | |||
293 | SYSCALL(sys_ioprio_set,sys_ioprio_set,sys_ioprio_set_wrapper) | 293 | SYSCALL(sys_ioprio_set,sys_ioprio_set,sys_ioprio_set_wrapper) |
294 | SYSCALL(sys_ioprio_get,sys_ioprio_get,sys_ioprio_get_wrapper) | 294 | SYSCALL(sys_ioprio_get,sys_ioprio_get,sys_ioprio_get_wrapper) |
295 | SYSCALL(sys_inotify_init,sys_inotify_init,sys_inotify_init) | 295 | SYSCALL(sys_inotify_init,sys_inotify_init,sys_inotify_init) |
296 | SYSCALL(sys_inotify_add_watch,sys_inotify_add_watch,sys_inotify_add_watch_wrapper) | 296 | SYSCALL(sys_inotify_add_watch,sys_inotify_add_watch,sys_inotify_add_watch_wrapper) /* 285 */ |
297 | SYSCALL(sys_inotify_rm_watch,sys_inotify_rm_watch,sys_inotify_rm_watch_wrapper) | 297 | SYSCALL(sys_inotify_rm_watch,sys_inotify_rm_watch,sys_inotify_rm_watch_wrapper) |
298 | NI_SYSCALL /* 287 sys_migrate_pages */ | ||
299 | SYSCALL(sys_openat,sys_openat,compat_sys_openat_wrapper) | ||
300 | SYSCALL(sys_mkdirat,sys_mkdirat,sys_mkdirat_wrapper) | ||
301 | SYSCALL(sys_mknodat,sys_mknodat,sys_mknodat_wrapper) /* 290 */ | ||
302 | SYSCALL(sys_fchownat,sys_fchownat,sys_fchownat_wrapper) | ||
303 | SYSCALL(sys_futimesat,sys_futimesat,compat_sys_futimesat_wrapper) | ||
304 | SYSCALL(sys_fstatat64,sys_newfstatat,sys32_fstatat64_wrapper) | ||
305 | SYSCALL(sys_unlinkat,sys_unlinkat,sys_unlinkat_wrapper) | ||
306 | SYSCALL(sys_renameat,sys_renameat,sys_renameat_wrapper) /* 295 */ | ||
307 | SYSCALL(sys_linkat,sys_linkat,sys_linkat_wrapper) | ||
308 | SYSCALL(sys_symlinkat,sys_symlinkat,sys_symlinkat_wrapper) | ||
309 | SYSCALL(sys_readlinkat,sys_readlinkat,sys_readlinkat_wrapper) | ||
310 | SYSCALL(sys_fchmodat,sys_fchmodat,sys_fchmodat_wrapper) | ||
311 | SYSCALL(sys_faccessat,sys_faccessat,sys_faccessat_wrapper) /* 300 */ | ||
312 | SYSCALL(sys_pselect6,sys_pselect6,compat_sys_pselect6_wrapper) | ||
313 | SYSCALL(sys_ppoll,sys_ppoll,compat_sys_ppoll_wrapper) | ||
314 | SYSCALL(sys_unshare,sys_unshare,sys_unshare_wrapper) | ||
diff --git a/arch/s390/kernel/time.c b/arch/s390/kernel/time.c index 7c0fe152a111..fea043b69b91 100644 --- a/arch/s390/kernel/time.c +++ b/arch/s390/kernel/time.c | |||
@@ -61,9 +61,18 @@ extern unsigned long wall_jiffies; | |||
61 | */ | 61 | */ |
62 | unsigned long long sched_clock(void) | 62 | unsigned long long sched_clock(void) |
63 | { | 63 | { |
64 | return ((get_clock() - jiffies_timer_cc) * 1000) >> 12; | 64 | return ((get_clock() - jiffies_timer_cc) * 125) >> 9; |
65 | } | 65 | } |
66 | 66 | ||
67 | /* | ||
68 | * Monotonic_clock - returns # of nanoseconds passed since time_init() | ||
69 | */ | ||
70 | unsigned long long monotonic_clock(void) | ||
71 | { | ||
72 | return sched_clock(); | ||
73 | } | ||
74 | EXPORT_SYMBOL(monotonic_clock); | ||
75 | |||
67 | void tod_to_timeval(__u64 todval, struct timespec *xtime) | 76 | void tod_to_timeval(__u64 todval, struct timespec *xtime) |
68 | { | 77 | { |
69 | unsigned long long sec; | 78 | unsigned long long sec; |
diff --git a/arch/s390/kernel/traps.c b/arch/s390/kernel/traps.c index 5d21e9e6e7b4..a46793beeddd 100644 --- a/arch/s390/kernel/traps.c +++ b/arch/s390/kernel/traps.c | |||
@@ -486,7 +486,7 @@ asmlinkage void illegal_op(struct pt_regs * regs, long interruption_code) | |||
486 | info.si_signo = signal; | 486 | info.si_signo = signal; |
487 | info.si_errno = 0; | 487 | info.si_errno = 0; |
488 | info.si_code = ILL_ILLOPC; | 488 | info.si_code = ILL_ILLOPC; |
489 | info.si_addr = (void *) location; | 489 | info.si_addr = (void __user *) location; |
490 | do_trap(interruption_code, signal, | 490 | do_trap(interruption_code, signal, |
491 | "illegal operation", regs, &info); | 491 | "illegal operation", regs, &info); |
492 | } | 492 | } |
diff --git a/arch/s390/lib/Makefile b/arch/s390/lib/Makefile index f20b51ff1d86..e05d087a6eae 100644 --- a/arch/s390/lib/Makefile +++ b/arch/s390/lib/Makefile | |||
@@ -6,4 +6,4 @@ EXTRA_AFLAGS := -traditional | |||
6 | 6 | ||
7 | lib-y += delay.o string.o | 7 | lib-y += delay.o string.o |
8 | lib-y += $(if $(CONFIG_64BIT),uaccess64.o,uaccess.o) | 8 | lib-y += $(if $(CONFIG_64BIT),uaccess64.o,uaccess.o) |
9 | lib-$(CONFIG_SMP) += spinlock.o \ No newline at end of file | 9 | lib-$(CONFIG_SMP) += spinlock.o |
diff --git a/arch/s390/lib/delay.c b/arch/s390/lib/delay.c index e96c35bddac7..71f0a2fb3078 100644 --- a/arch/s390/lib/delay.c +++ b/arch/s390/lib/delay.c | |||
@@ -30,7 +30,7 @@ void __delay(unsigned long loops) | |||
30 | */ | 30 | */ |
31 | __asm__ __volatile__( | 31 | __asm__ __volatile__( |
32 | "0: brct %0,0b" | 32 | "0: brct %0,0b" |
33 | : /* no outputs */ : "r" (loops/2) ); | 33 | : /* no outputs */ : "r" ((loops/2) + 1)); |
34 | } | 34 | } |
35 | 35 | ||
36 | /* | 36 | /* |
diff --git a/arch/s390/lib/spinlock.c b/arch/s390/lib/spinlock.c index 60f80a4eed4e..b9b7958a226a 100644 --- a/arch/s390/lib/spinlock.c +++ b/arch/s390/lib/spinlock.c | |||
@@ -2,8 +2,7 @@ | |||
2 | * arch/s390/lib/spinlock.c | 2 | * arch/s390/lib/spinlock.c |
3 | * Out of line spinlock code. | 3 | * Out of line spinlock code. |
4 | * | 4 | * |
5 | * S390 version | 5 | * Copyright (C) IBM Corp. 2004, 2006 |
6 | * Copyright (C) 2004 IBM Deutschland Entwicklung GmbH, IBM Corporation | ||
7 | * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com) | 6 | * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com) |
8 | */ | 7 | */ |
9 | 8 | ||
@@ -44,6 +43,8 @@ _raw_spin_lock_wait(raw_spinlock_t *lp, unsigned int pc) | |||
44 | _diag44(); | 43 | _diag44(); |
45 | count = spin_retry; | 44 | count = spin_retry; |
46 | } | 45 | } |
46 | if (__raw_spin_is_locked(lp)) | ||
47 | continue; | ||
47 | if (_raw_compare_and_swap(&lp->lock, 0, pc) == 0) | 48 | if (_raw_compare_and_swap(&lp->lock, 0, pc) == 0) |
48 | return; | 49 | return; |
49 | } | 50 | } |
@@ -56,6 +57,8 @@ _raw_spin_trylock_retry(raw_spinlock_t *lp, unsigned int pc) | |||
56 | int count = spin_retry; | 57 | int count = spin_retry; |
57 | 58 | ||
58 | while (count-- > 0) { | 59 | while (count-- > 0) { |
60 | if (__raw_spin_is_locked(lp)) | ||
61 | continue; | ||
59 | if (_raw_compare_and_swap(&lp->lock, 0, pc) == 0) | 62 | if (_raw_compare_and_swap(&lp->lock, 0, pc) == 0) |
60 | return 1; | 63 | return 1; |
61 | } | 64 | } |
@@ -74,6 +77,8 @@ _raw_read_lock_wait(raw_rwlock_t *rw) | |||
74 | _diag44(); | 77 | _diag44(); |
75 | count = spin_retry; | 78 | count = spin_retry; |
76 | } | 79 | } |
80 | if (!__raw_read_can_lock(rw)) | ||
81 | continue; | ||
77 | old = rw->lock & 0x7fffffffU; | 82 | old = rw->lock & 0x7fffffffU; |
78 | if (_raw_compare_and_swap(&rw->lock, old, old + 1) == old) | 83 | if (_raw_compare_and_swap(&rw->lock, old, old + 1) == old) |
79 | return; | 84 | return; |
@@ -88,6 +93,8 @@ _raw_read_trylock_retry(raw_rwlock_t *rw) | |||
88 | int count = spin_retry; | 93 | int count = spin_retry; |
89 | 94 | ||
90 | while (count-- > 0) { | 95 | while (count-- > 0) { |
96 | if (!__raw_read_can_lock(rw)) | ||
97 | continue; | ||
91 | old = rw->lock & 0x7fffffffU; | 98 | old = rw->lock & 0x7fffffffU; |
92 | if (_raw_compare_and_swap(&rw->lock, old, old + 1) == old) | 99 | if (_raw_compare_and_swap(&rw->lock, old, old + 1) == old) |
93 | return 1; | 100 | return 1; |
@@ -106,6 +113,8 @@ _raw_write_lock_wait(raw_rwlock_t *rw) | |||
106 | _diag44(); | 113 | _diag44(); |
107 | count = spin_retry; | 114 | count = spin_retry; |
108 | } | 115 | } |
116 | if (!__raw_write_can_lock(rw)) | ||
117 | continue; | ||
109 | if (_raw_compare_and_swap(&rw->lock, 0, 0x80000000) == 0) | 118 | if (_raw_compare_and_swap(&rw->lock, 0, 0x80000000) == 0) |
110 | return; | 119 | return; |
111 | } | 120 | } |
@@ -118,6 +127,8 @@ _raw_write_trylock_retry(raw_rwlock_t *rw) | |||
118 | int count = spin_retry; | 127 | int count = spin_retry; |
119 | 128 | ||
120 | while (count-- > 0) { | 129 | while (count-- > 0) { |
130 | if (!__raw_write_can_lock(rw)) | ||
131 | continue; | ||
121 | if (_raw_compare_and_swap(&rw->lock, 0, 0x80000000) == 0) | 132 | if (_raw_compare_and_swap(&rw->lock, 0, 0x80000000) == 0) |
122 | return 1; | 133 | return 1; |
123 | } | 134 | } |
diff --git a/arch/s390/lib/uaccess.S b/arch/s390/lib/uaccess.S index 88fc94fe6488..5d59e2625048 100644 --- a/arch/s390/lib/uaccess.S +++ b/arch/s390/lib/uaccess.S | |||
@@ -198,12 +198,12 @@ __strnlen_user_asm: | |||
198 | 0: srst %r2,%r1 | 198 | 0: srst %r2,%r1 |
199 | jo 0b | 199 | jo 0b |
200 | sacf 0 | 200 | sacf 0 |
201 | jh 1f # \0 found in string ? | ||
202 | ahi %r2,1 # strnlen_user result includes the \0 | 201 | ahi %r2,1 # strnlen_user result includes the \0 |
203 | 1: slr %r2,%r3 | 202 | # or return count+1 if \0 not found |
203 | slr %r2,%r3 | ||
204 | br %r14 | 204 | br %r14 |
205 | 2: sacf 0 | 205 | 2: sacf 0 |
206 | lhi %r2,-EFAULT | 206 | slr %r2,%r2 # return 0 on exception |
207 | br %r14 | 207 | br %r14 |
208 | .section __ex_table,"a" | 208 | .section __ex_table,"a" |
209 | .long 0b,2b | 209 | .long 0b,2b |
diff --git a/arch/s390/lib/uaccess64.S b/arch/s390/lib/uaccess64.S index 50219786fc7a..19b41a33c230 100644 --- a/arch/s390/lib/uaccess64.S +++ b/arch/s390/lib/uaccess64.S | |||
@@ -194,12 +194,12 @@ __strnlen_user_asm: | |||
194 | 0: srst %r2,%r1 | 194 | 0: srst %r2,%r1 |
195 | jo 0b | 195 | jo 0b |
196 | sacf 0 | 196 | sacf 0 |
197 | jh 1f # \0 found in string ? | ||
198 | aghi %r2,1 # strnlen_user result includes the \0 | 197 | aghi %r2,1 # strnlen_user result includes the \0 |
199 | 1: slgr %r2,%r3 | 198 | # or return count+1 if \0 not found |
199 | slgr %r2,%r3 | ||
200 | br %r14 | 200 | br %r14 |
201 | 2: sacf 0 | 201 | 2: sacf 0 |
202 | lghi %r2,-EFAULT | 202 | slgr %r2,%r2 # return 0 on exception |
203 | br %r14 | 203 | br %r14 |
204 | .section __ex_table,"a" | 204 | .section __ex_table,"a" |
205 | .quad 0b,2b | 205 | .quad 0b,2b |
diff --git a/arch/s390/mm/cmm.c b/arch/s390/mm/cmm.c index 2d5cb1385753..b075ab499d05 100644 --- a/arch/s390/mm/cmm.c +++ b/arch/s390/mm/cmm.c | |||
@@ -42,8 +42,8 @@ static volatile long cmm_timed_pages_target = 0; | |||
42 | static long cmm_timeout_pages = 0; | 42 | static long cmm_timeout_pages = 0; |
43 | static long cmm_timeout_seconds = 0; | 43 | static long cmm_timeout_seconds = 0; |
44 | 44 | ||
45 | static struct cmm_page_array *cmm_page_list = 0; | 45 | static struct cmm_page_array *cmm_page_list = NULL; |
46 | static struct cmm_page_array *cmm_timed_page_list = 0; | 46 | static struct cmm_page_array *cmm_timed_page_list = NULL; |
47 | 47 | ||
48 | static unsigned long cmm_thread_active = 0; | 48 | static unsigned long cmm_thread_active = 0; |
49 | static struct work_struct cmm_thread_starter; | 49 | static struct work_struct cmm_thread_starter; |
@@ -259,7 +259,7 @@ static struct ctl_table cmm_table[]; | |||
259 | 259 | ||
260 | static int | 260 | static int |
261 | cmm_pages_handler(ctl_table *ctl, int write, struct file *filp, | 261 | cmm_pages_handler(ctl_table *ctl, int write, struct file *filp, |
262 | void *buffer, size_t *lenp, loff_t *ppos) | 262 | void __user *buffer, size_t *lenp, loff_t *ppos) |
263 | { | 263 | { |
264 | char buf[16], *p; | 264 | char buf[16], *p; |
265 | long pages; | 265 | long pages; |
@@ -300,7 +300,7 @@ cmm_pages_handler(ctl_table *ctl, int write, struct file *filp, | |||
300 | 300 | ||
301 | static int | 301 | static int |
302 | cmm_timeout_handler(ctl_table *ctl, int write, struct file *filp, | 302 | cmm_timeout_handler(ctl_table *ctl, int write, struct file *filp, |
303 | void *buffer, size_t *lenp, loff_t *ppos) | 303 | void __user *buffer, size_t *lenp, loff_t *ppos) |
304 | { | 304 | { |
305 | char buf[64], *p; | 305 | char buf[64], *p; |
306 | long pages, seconds; | 306 | long pages, seconds; |
@@ -419,7 +419,7 @@ cmm_init (void) | |||
419 | #ifdef CONFIG_CMM_IUCV | 419 | #ifdef CONFIG_CMM_IUCV |
420 | smsg_register_callback(SMSG_PREFIX, cmm_smsg_target); | 420 | smsg_register_callback(SMSG_PREFIX, cmm_smsg_target); |
421 | #endif | 421 | #endif |
422 | INIT_WORK(&cmm_thread_starter, (void *) cmm_start_thread, 0); | 422 | INIT_WORK(&cmm_thread_starter, (void *) cmm_start_thread, NULL); |
423 | init_waitqueue_head(&cmm_thread_wait); | 423 | init_waitqueue_head(&cmm_thread_wait); |
424 | init_timer(&cmm_timer); | 424 | init_timer(&cmm_timer); |
425 | return 0; | 425 | return 0; |
diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig index 01bc7d589afe..e9b275d90737 100644 --- a/arch/sh/Kconfig +++ b/arch/sh/Kconfig | |||
@@ -392,18 +392,12 @@ config SH_TMU | |||
392 | 392 | ||
393 | endmenu | 393 | endmenu |
394 | 394 | ||
395 | source "arch/sh/boards/renesas/hs7751rvoip/Kconfig" | 395 | #source "arch/sh/boards/renesas/hs7751rvoip/Kconfig" |
396 | 396 | ||
397 | source "arch/sh/boards/renesas/rts7751r2d/Kconfig" | 397 | #source "arch/sh/boards/renesas/rts7751r2d/Kconfig" |
398 | |||
399 | config SH_PCLK_FREQ_BOOL | ||
400 | bool "Set default pclk frequency" | ||
401 | default y if !SH_RTC | ||
402 | default n | ||
403 | 398 | ||
404 | config SH_PCLK_FREQ | 399 | config SH_PCLK_FREQ |
405 | int "Peripheral clock frequency (in Hz)" | 400 | int "Peripheral clock frequency (in Hz)" |
406 | depends on SH_PCLK_FREQ_BOOL | ||
407 | default "50000000" if CPU_SUBTYPE_SH7750 || CPU_SUBTYPE_SH7780 | 401 | default "50000000" if CPU_SUBTYPE_SH7750 || CPU_SUBTYPE_SH7780 |
408 | default "60000000" if CPU_SUBTYPE_SH7751 | 402 | default "60000000" if CPU_SUBTYPE_SH7751 |
409 | default "33333333" if CPU_SUBTYPE_SH7300 || CPU_SUBTYPE_SH7770 || CPU_SUBTYPE_SH7760 | 403 | default "33333333" if CPU_SUBTYPE_SH7300 || CPU_SUBTYPE_SH7770 || CPU_SUBTYPE_SH7760 |
@@ -452,7 +446,7 @@ endmenu | |||
452 | 446 | ||
453 | config ISA_DMA_API | 447 | config ISA_DMA_API |
454 | bool | 448 | bool |
455 | depends on MPC1211 | 449 | depends on SH_MPC1211 |
456 | default y | 450 | default y |
457 | 451 | ||
458 | menu "Kernel features" | 452 | menu "Kernel features" |
diff --git a/arch/sh/boards/renesas/rts7751r2d/io.c b/arch/sh/boards/renesas/rts7751r2d/io.c index c46f9154cfd5..123abbbc91e0 100644 --- a/arch/sh/boards/renesas/rts7751r2d/io.c +++ b/arch/sh/boards/renesas/rts7751r2d/io.c | |||
@@ -216,24 +216,26 @@ void rts7751r2d_insb(unsigned long port, void *addr, unsigned long count) | |||
216 | { | 216 | { |
217 | volatile __u8 *bp; | 217 | volatile __u8 *bp; |
218 | volatile __u16 *p; | 218 | volatile __u16 *p; |
219 | unsigned char *s = addr; | ||
219 | 220 | ||
220 | if (CHECK_AX88796L_PORT(port)) { | 221 | if (CHECK_AX88796L_PORT(port)) { |
221 | p = (volatile unsigned short *)port88796l(port, 0); | 222 | p = (volatile unsigned short *)port88796l(port, 0); |
222 | while (count--) *((unsigned char *) addr)++ = *p & 0xff; | 223 | while (count--) *s++ = *p & 0xff; |
223 | } else if (PXSEG(port)) | 224 | } else if (PXSEG(port)) |
224 | while (count--) *((unsigned char *) addr)++ = *(volatile unsigned char *)port; | 225 | while (count--) *s++ = *(volatile unsigned char *)port; |
225 | else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) { | 226 | else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) { |
226 | bp = (__u8 *)PCI_IOMAP(port); | 227 | bp = (__u8 *)PCI_IOMAP(port); |
227 | while (count--) *((volatile unsigned char *) addr)++ = *bp; | 228 | while (count--) *s++ = *bp; |
228 | } else { | 229 | } else { |
229 | p = (volatile unsigned short *)port2adr(port); | 230 | p = (volatile unsigned short *)port2adr(port); |
230 | while (count--) *((unsigned char *) addr)++ = *p & 0xff; | 231 | while (count--) *s++ = *p & 0xff; |
231 | } | 232 | } |
232 | } | 233 | } |
233 | 234 | ||
234 | void rts7751r2d_insw(unsigned long port, void *addr, unsigned long count) | 235 | void rts7751r2d_insw(unsigned long port, void *addr, unsigned long count) |
235 | { | 236 | { |
236 | volatile __u16 *p; | 237 | volatile __u16 *p; |
238 | __u16 *s = addr; | ||
237 | 239 | ||
238 | if (CHECK_AX88796L_PORT(port)) | 240 | if (CHECK_AX88796L_PORT(port)) |
239 | p = (volatile unsigned short *)port88796l(port, 1); | 241 | p = (volatile unsigned short *)port88796l(port, 1); |
@@ -243,7 +245,7 @@ void rts7751r2d_insw(unsigned long port, void *addr, unsigned long count) | |||
243 | p = (volatile unsigned short *)PCI_IOMAP(port); | 245 | p = (volatile unsigned short *)PCI_IOMAP(port); |
244 | else | 246 | else |
245 | p = (volatile unsigned short *)port2adr(port); | 247 | p = (volatile unsigned short *)port2adr(port); |
246 | while (count--) *((__u16 *) addr)++ = *p; | 248 | while (count--) *s++ = *p; |
247 | } | 249 | } |
248 | 250 | ||
249 | void rts7751r2d_insl(unsigned long port, void *addr, unsigned long count) | 251 | void rts7751r2d_insl(unsigned long port, void *addr, unsigned long count) |
@@ -252,8 +254,9 @@ void rts7751r2d_insl(unsigned long port, void *addr, unsigned long count) | |||
252 | maybebadio(insl, port); | 254 | maybebadio(insl, port); |
253 | else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) { | 255 | else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) { |
254 | volatile __u32 *p = (__u32 *)PCI_IOMAP(port); | 256 | volatile __u32 *p = (__u32 *)PCI_IOMAP(port); |
257 | __u32 *s = addr; | ||
255 | 258 | ||
256 | while (count--) *((__u32 *) addr)++ = *p; | 259 | while (count--) *s++ = *p; |
257 | } else | 260 | } else |
258 | maybebadio(insl, port); | 261 | maybebadio(insl, port); |
259 | } | 262 | } |
@@ -262,24 +265,26 @@ void rts7751r2d_outsb(unsigned long port, const void *addr, unsigned long count) | |||
262 | { | 265 | { |
263 | volatile __u8 *bp; | 266 | volatile __u8 *bp; |
264 | volatile __u16 *p; | 267 | volatile __u16 *p; |
268 | const __u8 *s = addr; | ||
265 | 269 | ||
266 | if (CHECK_AX88796L_PORT(port)) { | 270 | if (CHECK_AX88796L_PORT(port)) { |
267 | p = (volatile unsigned short *)port88796l(port, 0); | 271 | p = (volatile unsigned short *)port88796l(port, 0); |
268 | while (count--) *p = *((unsigned char *) addr)++; | 272 | while (count--) *p = *s++; |
269 | } else if (PXSEG(port)) | 273 | } else if (PXSEG(port)) |
270 | while (count--) *(volatile unsigned char *)port = *((unsigned char *) addr)++; | 274 | while (count--) *(volatile unsigned char *)port = *s++; |
271 | else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) { | 275 | else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) { |
272 | bp = (__u8 *)PCI_IOMAP(port); | 276 | bp = (__u8 *)PCI_IOMAP(port); |
273 | while (count--) *bp = *((volatile unsigned char *) addr)++; | 277 | while (count--) *bp = *s++; |
274 | } else { | 278 | } else { |
275 | p = (volatile unsigned short *)port2adr(port); | 279 | p = (volatile unsigned short *)port2adr(port); |
276 | while (count--) *p = *((unsigned char *) addr)++; | 280 | while (count--) *p = *s++; |
277 | } | 281 | } |
278 | } | 282 | } |
279 | 283 | ||
280 | void rts7751r2d_outsw(unsigned long port, const void *addr, unsigned long count) | 284 | void rts7751r2d_outsw(unsigned long port, const void *addr, unsigned long count) |
281 | { | 285 | { |
282 | volatile __u16 *p; | 286 | volatile __u16 *p; |
287 | const __u16 *s = addr; | ||
283 | 288 | ||
284 | if (CHECK_AX88796L_PORT(port)) | 289 | if (CHECK_AX88796L_PORT(port)) |
285 | p = (volatile unsigned short *)port88796l(port, 1); | 290 | p = (volatile unsigned short *)port88796l(port, 1); |
@@ -289,7 +294,7 @@ void rts7751r2d_outsw(unsigned long port, const void *addr, unsigned long count) | |||
289 | p = (volatile unsigned short *)PCI_IOMAP(port); | 294 | p = (volatile unsigned short *)PCI_IOMAP(port); |
290 | else | 295 | else |
291 | p = (volatile unsigned short *)port2adr(port); | 296 | p = (volatile unsigned short *)port2adr(port); |
292 | while (count--) *p = *((__u16 *) addr)++; | 297 | while (count--) *p = *s++; |
293 | } | 298 | } |
294 | 299 | ||
295 | void rts7751r2d_outsl(unsigned long port, const void *addr, unsigned long count) | 300 | void rts7751r2d_outsl(unsigned long port, const void *addr, unsigned long count) |
@@ -298,8 +303,9 @@ void rts7751r2d_outsl(unsigned long port, const void *addr, unsigned long count) | |||
298 | maybebadio(outsl, port); | 303 | maybebadio(outsl, port); |
299 | else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) { | 304 | else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) { |
300 | volatile __u32 *p = (__u32 *)PCI_IOMAP(port); | 305 | volatile __u32 *p = (__u32 *)PCI_IOMAP(port); |
306 | const __u32 *s = addr; | ||
301 | 307 | ||
302 | while (count--) *p = *((__u32 *) addr)++; | 308 | while (count--) *p = *s++; |
303 | } else | 309 | } else |
304 | maybebadio(outsl, port); | 310 | maybebadio(outsl, port); |
305 | } | 311 | } |
diff --git a/arch/sh/boards/superh/microdev/io.c b/arch/sh/boards/superh/microdev/io.c index fe83b2c03076..1ed7f880b8c7 100644 --- a/arch/sh/boards/superh/microdev/io.c +++ b/arch/sh/boards/superh/microdev/io.c | |||
@@ -16,7 +16,7 @@ | |||
16 | #include <linux/pci.h> | 16 | #include <linux/pci.h> |
17 | #include <linux/wait.h> | 17 | #include <linux/wait.h> |
18 | #include <asm/io.h> | 18 | #include <asm/io.h> |
19 | #include <asm/mach/io.h> | 19 | #include <asm/microdev.h> |
20 | 20 | ||
21 | /* | 21 | /* |
22 | * we need to have a 'safe' address to re-direct all I/O requests | 22 | * we need to have a 'safe' address to re-direct all I/O requests |
@@ -52,8 +52,90 @@ | |||
52 | #define IO_ISP1161_PHYS 0xa7700000ul /* Physical address of Philips ISP1161x USB chip */ | 52 | #define IO_ISP1161_PHYS 0xa7700000ul /* Physical address of Philips ISP1161x USB chip */ |
53 | #define IO_SUPERIO_PHYS 0xa7800000ul /* Physical address of SMSC FDC37C93xAPM SuperIO chip */ | 53 | #define IO_SUPERIO_PHYS 0xa7800000ul /* Physical address of SMSC FDC37C93xAPM SuperIO chip */ |
54 | 54 | ||
55 | #define PORT2ADDR(x) (microdev_isa_port2addr(x)) | 55 | /* |
56 | * map I/O ports to memory-mapped addresses | ||
57 | */ | ||
58 | static unsigned long microdev_isa_port2addr(unsigned long offset) | ||
59 | { | ||
60 | unsigned long result; | ||
61 | |||
62 | if ((offset >= IO_LAN91C111_BASE) && | ||
63 | (offset < IO_LAN91C111_BASE + IO_LAN91C111_EXTENT)) { | ||
64 | /* | ||
65 | * SMSC LAN91C111 Ethernet chip | ||
66 | */ | ||
67 | result = IO_LAN91C111_PHYS + offset - IO_LAN91C111_BASE; | ||
68 | } else if ((offset >= IO_SUPERIO_BASE) && | ||
69 | (offset < IO_SUPERIO_BASE + IO_SUPERIO_EXTENT)) { | ||
70 | /* | ||
71 | * SMSC FDC37C93xAPM SuperIO chip | ||
72 | * | ||
73 | * Configuration Registers | ||
74 | */ | ||
75 | result = IO_SUPERIO_PHYS + (offset << 1); | ||
76 | #if 0 | ||
77 | } else if (offset == KBD_DATA_REG || offset == KBD_CNTL_REG || | ||
78 | offset == KBD_STATUS_REG) { | ||
79 | /* | ||
80 | * SMSC FDC37C93xAPM SuperIO chip | ||
81 | * | ||
82 | * PS/2 Keyboard + Mouse (ports 0x60 and 0x64). | ||
83 | */ | ||
84 | result = IO_SUPERIO_PHYS + (offset << 1); | ||
85 | #endif | ||
86 | } else if (((offset >= IO_IDE1_BASE) && | ||
87 | (offset < IO_IDE1_BASE + IO_IDE_EXTENT)) || | ||
88 | (offset == IO_IDE1_MISC)) { | ||
89 | /* | ||
90 | * SMSC FDC37C93xAPM SuperIO chip | ||
91 | * | ||
92 | * IDE #1 | ||
93 | */ | ||
94 | result = IO_SUPERIO_PHYS + (offset << 1); | ||
95 | } else if (((offset >= IO_IDE2_BASE) && | ||
96 | (offset < IO_IDE2_BASE + IO_IDE_EXTENT)) || | ||
97 | (offset == IO_IDE2_MISC)) { | ||
98 | /* | ||
99 | * SMSC FDC37C93xAPM SuperIO chip | ||
100 | * | ||
101 | * IDE #2 | ||
102 | */ | ||
103 | result = IO_SUPERIO_PHYS + (offset << 1); | ||
104 | } else if ((offset >= IO_SERIAL1_BASE) && | ||
105 | (offset < IO_SERIAL1_BASE + IO_SERIAL_EXTENT)) { | ||
106 | /* | ||
107 | * SMSC FDC37C93xAPM SuperIO chip | ||
108 | * | ||
109 | * Serial #1 | ||
110 | */ | ||
111 | result = IO_SUPERIO_PHYS + (offset << 1); | ||
112 | } else if ((offset >= IO_SERIAL2_BASE) && | ||
113 | (offset < IO_SERIAL2_BASE + IO_SERIAL_EXTENT)) { | ||
114 | /* | ||
115 | * SMSC FDC37C93xAPM SuperIO chip | ||
116 | * | ||
117 | * Serial #2 | ||
118 | */ | ||
119 | result = IO_SUPERIO_PHYS + (offset << 1); | ||
120 | } else if ((offset >= IO_ISP1161_BASE) && | ||
121 | (offset < IO_ISP1161_BASE + IO_ISP1161_EXTENT)) { | ||
122 | /* | ||
123 | * Philips USB ISP1161x chip | ||
124 | */ | ||
125 | result = IO_ISP1161_PHYS + offset - IO_ISP1161_BASE; | ||
126 | } else { | ||
127 | /* | ||
128 | * safe default. | ||
129 | */ | ||
130 | printk("Warning: unexpected port in %s( offset = 0x%lx )\n", | ||
131 | __FUNCTION__, offset); | ||
132 | result = PVR; | ||
133 | } | ||
134 | |||
135 | return result; | ||
136 | } | ||
56 | 137 | ||
138 | #define PORT2ADDR(x) (microdev_isa_port2addr(x)) | ||
57 | 139 | ||
58 | static inline void delay(void) | 140 | static inline void delay(void) |
59 | { | 141 | { |
@@ -94,6 +176,17 @@ unsigned int microdev_inl(unsigned long port) | |||
94 | return *(volatile unsigned int*)PORT2ADDR(port); | 176 | return *(volatile unsigned int*)PORT2ADDR(port); |
95 | } | 177 | } |
96 | 178 | ||
179 | void microdev_outw(unsigned short b, unsigned long port) | ||
180 | { | ||
181 | #ifdef CONFIG_PCI | ||
182 | if (port >= PCIBIOS_MIN_IO) { | ||
183 | microdev_pci_outw(b, port); | ||
184 | return; | ||
185 | } | ||
186 | #endif | ||
187 | *(volatile unsigned short*)PORT2ADDR(port) = b; | ||
188 | } | ||
189 | |||
97 | void microdev_outb(unsigned char b, unsigned long port) | 190 | void microdev_outb(unsigned char b, unsigned long port) |
98 | { | 191 | { |
99 | #ifdef CONFIG_PCI | 192 | #ifdef CONFIG_PCI |
@@ -158,17 +251,6 @@ void microdev_outb(unsigned char b, unsigned long port) | |||
158 | } | 251 | } |
159 | } | 252 | } |
160 | 253 | ||
161 | void microdev_outw(unsigned short b, unsigned long port) | ||
162 | { | ||
163 | #ifdef CONFIG_PCI | ||
164 | if (port >= PCIBIOS_MIN_IO) { | ||
165 | microdev_pci_outw(b, port); | ||
166 | return; | ||
167 | } | ||
168 | #endif | ||
169 | *(volatile unsigned short*)PORT2ADDR(port) = b; | ||
170 | } | ||
171 | |||
172 | void microdev_outl(unsigned int b, unsigned long port) | 254 | void microdev_outl(unsigned int b, unsigned long port) |
173 | { | 255 | { |
174 | #ifdef CONFIG_PCI | 256 | #ifdef CONFIG_PCI |
@@ -284,87 +366,3 @@ void microdev_outsl(unsigned long port, const void *buffer, unsigned long count) | |||
284 | while (count--) | 366 | while (count--) |
285 | *port_addr = *buf++; | 367 | *port_addr = *buf++; |
286 | } | 368 | } |
287 | |||
288 | /* | ||
289 | * map I/O ports to memory-mapped addresses | ||
290 | */ | ||
291 | unsigned long microdev_isa_port2addr(unsigned long offset) | ||
292 | { | ||
293 | unsigned long result; | ||
294 | |||
295 | if ((offset >= IO_LAN91C111_BASE) && | ||
296 | (offset < IO_LAN91C111_BASE + IO_LAN91C111_EXTENT)) { | ||
297 | /* | ||
298 | * SMSC LAN91C111 Ethernet chip | ||
299 | */ | ||
300 | result = IO_LAN91C111_PHYS + offset - IO_LAN91C111_BASE; | ||
301 | } else if ((offset >= IO_SUPERIO_BASE) && | ||
302 | (offset < IO_SUPERIO_BASE + IO_SUPERIO_EXTENT)) { | ||
303 | /* | ||
304 | * SMSC FDC37C93xAPM SuperIO chip | ||
305 | * | ||
306 | * Configuration Registers | ||
307 | */ | ||
308 | result = IO_SUPERIO_PHYS + (offset << 1); | ||
309 | #if 0 | ||
310 | } else if (offset == KBD_DATA_REG || offset == KBD_CNTL_REG || | ||
311 | offset == KBD_STATUS_REG) { | ||
312 | /* | ||
313 | * SMSC FDC37C93xAPM SuperIO chip | ||
314 | * | ||
315 | * PS/2 Keyboard + Mouse (ports 0x60 and 0x64). | ||
316 | */ | ||
317 | result = IO_SUPERIO_PHYS + (offset << 1); | ||
318 | #endif | ||
319 | } else if (((offset >= IO_IDE1_BASE) && | ||
320 | (offset < IO_IDE1_BASE + IO_IDE_EXTENT)) || | ||
321 | (offset == IO_IDE1_MISC)) { | ||
322 | /* | ||
323 | * SMSC FDC37C93xAPM SuperIO chip | ||
324 | * | ||
325 | * IDE #1 | ||
326 | */ | ||
327 | result = IO_SUPERIO_PHYS + (offset << 1); | ||
328 | } else if (((offset >= IO_IDE2_BASE) && | ||
329 | (offset < IO_IDE2_BASE + IO_IDE_EXTENT)) || | ||
330 | (offset == IO_IDE2_MISC)) { | ||
331 | /* | ||
332 | * SMSC FDC37C93xAPM SuperIO chip | ||
333 | * | ||
334 | * IDE #2 | ||
335 | */ | ||
336 | result = IO_SUPERIO_PHYS + (offset << 1); | ||
337 | } else if ((offset >= IO_SERIAL1_BASE) && | ||
338 | (offset < IO_SERIAL1_BASE + IO_SERIAL_EXTENT)) { | ||
339 | /* | ||
340 | * SMSC FDC37C93xAPM SuperIO chip | ||
341 | * | ||
342 | * Serial #1 | ||
343 | */ | ||
344 | result = IO_SUPERIO_PHYS + (offset << 1); | ||
345 | } else if ((offset >= IO_SERIAL2_BASE) && | ||
346 | (offset < IO_SERIAL2_BASE + IO_SERIAL_EXTENT)) { | ||
347 | /* | ||
348 | * SMSC FDC37C93xAPM SuperIO chip | ||
349 | * | ||
350 | * Serial #2 | ||
351 | */ | ||
352 | result = IO_SUPERIO_PHYS + (offset << 1); | ||
353 | } else if ((offset >= IO_ISP1161_BASE) && | ||
354 | (offset < IO_ISP1161_BASE + IO_ISP1161_EXTENT)) { | ||
355 | /* | ||
356 | * Philips USB ISP1161x chip | ||
357 | */ | ||
358 | result = IO_ISP1161_PHYS + offset - IO_ISP1161_BASE; | ||
359 | } else { | ||
360 | /* | ||
361 | * safe default. | ||
362 | */ | ||
363 | printk("Warning: unexpected port in %s( offset = 0x%lx )\n", | ||
364 | __FUNCTION__, offset); | ||
365 | result = PVR; | ||
366 | } | ||
367 | |||
368 | return result; | ||
369 | } | ||
370 | |||
diff --git a/arch/sh/boards/superh/microdev/irq.c b/arch/sh/boards/superh/microdev/irq.c index 1395c1e65da4..efcbd86b7cd2 100644 --- a/arch/sh/boards/superh/microdev/irq.c +++ b/arch/sh/boards/superh/microdev/irq.c | |||
@@ -15,7 +15,7 @@ | |||
15 | 15 | ||
16 | #include <asm/system.h> | 16 | #include <asm/system.h> |
17 | #include <asm/io.h> | 17 | #include <asm/io.h> |
18 | #include <asm/mach/irq.h> | 18 | #include <asm/microdev.h> |
19 | 19 | ||
20 | #define NUM_EXTERNAL_IRQS 16 /* IRL0 .. IRL15 */ | 20 | #define NUM_EXTERNAL_IRQS 16 /* IRL0 .. IRL15 */ |
21 | 21 | ||
diff --git a/arch/sh/boards/superh/microdev/setup.c b/arch/sh/boards/superh/microdev/setup.c index 1c1d65fb12df..892b14d31405 100644 --- a/arch/sh/boards/superh/microdev/setup.c +++ b/arch/sh/boards/superh/microdev/setup.c | |||
@@ -3,7 +3,7 @@ | |||
3 | * | 3 | * |
4 | * Copyright (C) 2003 Sean McGoogan (Sean.McGoogan@superh.com) | 4 | * Copyright (C) 2003 Sean McGoogan (Sean.McGoogan@superh.com) |
5 | * Copyright (C) 2003, 2004 SuperH, Inc. | 5 | * Copyright (C) 2003, 2004 SuperH, Inc. |
6 | * Copyright (C) 2004 Paul Mundt | 6 | * Copyright (C) 2004, 2005 Paul Mundt |
7 | * | 7 | * |
8 | * SuperH SH4-202 MicroDev board support. | 8 | * SuperH SH4-202 MicroDev board support. |
9 | * | 9 | * |
@@ -15,11 +15,10 @@ | |||
15 | #include <linux/init.h> | 15 | #include <linux/init.h> |
16 | #include <linux/platform_device.h> | 16 | #include <linux/platform_device.h> |
17 | #include <linux/ioport.h> | 17 | #include <linux/ioport.h> |
18 | #include <video/s1d13xxxfb.h> | ||
19 | #include <asm/microdev.h> | ||
18 | #include <asm/io.h> | 20 | #include <asm/io.h> |
19 | #include <asm/mach/irq.h> | ||
20 | #include <asm/mach/io.h> | ||
21 | #include <asm/machvec.h> | 21 | #include <asm/machvec.h> |
22 | #include <asm/machvec_init.h> | ||
23 | 22 | ||
24 | extern void microdev_heartbeat(void); | 23 | extern void microdev_heartbeat(void); |
25 | 24 | ||
@@ -51,8 +50,6 @@ struct sh_machine_vector mv_sh4202_microdev __initmv = { | |||
51 | .mv_outsw = microdev_outsw, | 50 | .mv_outsw = microdev_outsw, |
52 | .mv_outsl = microdev_outsl, | 51 | .mv_outsl = microdev_outsl, |
53 | 52 | ||
54 | .mv_isa_port2addr = microdev_isa_port2addr, | ||
55 | |||
56 | .mv_init_irq = init_microdev_irq, | 53 | .mv_init_irq = init_microdev_irq, |
57 | 54 | ||
58 | #ifdef CONFIG_HEARTBEAT | 55 | #ifdef CONFIG_HEARTBEAT |
@@ -142,16 +139,161 @@ static struct platform_device smc91x_device = { | |||
142 | .resource = smc91x_resources, | 139 | .resource = smc91x_resources, |
143 | }; | 140 | }; |
144 | 141 | ||
145 | static int __init smc91x_setup(void) | 142 | #ifdef CONFIG_FB_S1D13XXX |
143 | static struct s1d13xxxfb_regval s1d13806_initregs[] = { | ||
144 | { S1DREG_MISC, 0x00 }, | ||
145 | { S1DREG_COM_DISP_MODE, 0x00 }, | ||
146 | { S1DREG_GPIO_CNF0, 0x00 }, | ||
147 | { S1DREG_GPIO_CNF1, 0x00 }, | ||
148 | { S1DREG_GPIO_CTL0, 0x00 }, | ||
149 | { S1DREG_GPIO_CTL1, 0x00 }, | ||
150 | { S1DREG_CLK_CNF, 0x02 }, | ||
151 | { S1DREG_LCD_CLK_CNF, 0x01 }, | ||
152 | { S1DREG_CRT_CLK_CNF, 0x03 }, | ||
153 | { S1DREG_MPLUG_CLK_CNF, 0x03 }, | ||
154 | { S1DREG_CPU2MEM_WST_SEL, 0x02 }, | ||
155 | { S1DREG_SDRAM_REF_RATE, 0x03 }, | ||
156 | { S1DREG_SDRAM_TC0, 0x00 }, | ||
157 | { S1DREG_SDRAM_TC1, 0x01 }, | ||
158 | { S1DREG_MEM_CNF, 0x80 }, | ||
159 | { S1DREG_PANEL_TYPE, 0x25 }, | ||
160 | { S1DREG_MOD_RATE, 0x00 }, | ||
161 | { S1DREG_LCD_DISP_HWIDTH, 0x63 }, | ||
162 | { S1DREG_LCD_NDISP_HPER, 0x1e }, | ||
163 | { S1DREG_TFT_FPLINE_START, 0x06 }, | ||
164 | { S1DREG_TFT_FPLINE_PWIDTH, 0x03 }, | ||
165 | { S1DREG_LCD_DISP_VHEIGHT0, 0x57 }, | ||
166 | { S1DREG_LCD_DISP_VHEIGHT1, 0x02 }, | ||
167 | { S1DREG_LCD_NDISP_VPER, 0x00 }, | ||
168 | { S1DREG_TFT_FPFRAME_START, 0x0a }, | ||
169 | { S1DREG_TFT_FPFRAME_PWIDTH, 0x81 }, | ||
170 | { S1DREG_LCD_DISP_MODE, 0x03 }, | ||
171 | { S1DREG_LCD_MISC, 0x00 }, | ||
172 | { S1DREG_LCD_DISP_START0, 0x00 }, | ||
173 | { S1DREG_LCD_DISP_START1, 0x00 }, | ||
174 | { S1DREG_LCD_DISP_START2, 0x00 }, | ||
175 | { S1DREG_LCD_MEM_OFF0, 0x90 }, | ||
176 | { S1DREG_LCD_MEM_OFF1, 0x01 }, | ||
177 | { S1DREG_LCD_PIX_PAN, 0x00 }, | ||
178 | { S1DREG_LCD_DISP_FIFO_HTC, 0x00 }, | ||
179 | { S1DREG_LCD_DISP_FIFO_LTC, 0x00 }, | ||
180 | { S1DREG_CRT_DISP_HWIDTH, 0x63 }, | ||
181 | { S1DREG_CRT_NDISP_HPER, 0x1f }, | ||
182 | { S1DREG_CRT_HRTC_START, 0x04 }, | ||
183 | { S1DREG_CRT_HRTC_PWIDTH, 0x8f }, | ||
184 | { S1DREG_CRT_DISP_VHEIGHT0, 0x57 }, | ||
185 | { S1DREG_CRT_DISP_VHEIGHT1, 0x02 }, | ||
186 | { S1DREG_CRT_NDISP_VPER, 0x1b }, | ||
187 | { S1DREG_CRT_VRTC_START, 0x00 }, | ||
188 | { S1DREG_CRT_VRTC_PWIDTH, 0x83 }, | ||
189 | { S1DREG_TV_OUT_CTL, 0x10 }, | ||
190 | { S1DREG_CRT_DISP_MODE, 0x05 }, | ||
191 | { S1DREG_CRT_DISP_START0, 0x00 }, | ||
192 | { S1DREG_CRT_DISP_START1, 0x00 }, | ||
193 | { S1DREG_CRT_DISP_START2, 0x00 }, | ||
194 | { S1DREG_CRT_MEM_OFF0, 0x20 }, | ||
195 | { S1DREG_CRT_MEM_OFF1, 0x03 }, | ||
196 | { S1DREG_CRT_PIX_PAN, 0x00 }, | ||
197 | { S1DREG_CRT_DISP_FIFO_HTC, 0x00 }, | ||
198 | { S1DREG_CRT_DISP_FIFO_LTC, 0x00 }, | ||
199 | { S1DREG_LCD_CUR_CTL, 0x00 }, | ||
200 | { S1DREG_LCD_CUR_START, 0x01 }, | ||
201 | { S1DREG_LCD_CUR_XPOS0, 0x00 }, | ||
202 | { S1DREG_LCD_CUR_XPOS1, 0x00 }, | ||
203 | { S1DREG_LCD_CUR_YPOS0, 0x00 }, | ||
204 | { S1DREG_LCD_CUR_YPOS1, 0x00 }, | ||
205 | { S1DREG_LCD_CUR_BCTL0, 0x00 }, | ||
206 | { S1DREG_LCD_CUR_GCTL0, 0x00 }, | ||
207 | { S1DREG_LCD_CUR_RCTL0, 0x00 }, | ||
208 | { S1DREG_LCD_CUR_BCTL1, 0x1f }, | ||
209 | { S1DREG_LCD_CUR_GCTL1, 0x3f }, | ||
210 | { S1DREG_LCD_CUR_RCTL1, 0x1f }, | ||
211 | { S1DREG_LCD_CUR_FIFO_HTC, 0x00 }, | ||
212 | { S1DREG_CRT_CUR_CTL, 0x00 }, | ||
213 | { S1DREG_CRT_CUR_START, 0x01 }, | ||
214 | { S1DREG_CRT_CUR_XPOS0, 0x00 }, | ||
215 | { S1DREG_CRT_CUR_XPOS1, 0x00 }, | ||
216 | { S1DREG_CRT_CUR_YPOS0, 0x00 }, | ||
217 | { S1DREG_CRT_CUR_YPOS1, 0x00 }, | ||
218 | { S1DREG_CRT_CUR_BCTL0, 0x00 }, | ||
219 | { S1DREG_CRT_CUR_GCTL0, 0x00 }, | ||
220 | { S1DREG_CRT_CUR_RCTL0, 0x00 }, | ||
221 | { S1DREG_CRT_CUR_BCTL1, 0x1f }, | ||
222 | { S1DREG_CRT_CUR_GCTL1, 0x3f }, | ||
223 | { S1DREG_CRT_CUR_RCTL1, 0x1f }, | ||
224 | { S1DREG_CRT_CUR_FIFO_HTC, 0x00 }, | ||
225 | { S1DREG_BBLT_CTL0, 0x00 }, | ||
226 | { S1DREG_BBLT_CTL1, 0x00 }, | ||
227 | { S1DREG_BBLT_CC_EXP, 0x00 }, | ||
228 | { S1DREG_BBLT_OP, 0x00 }, | ||
229 | { S1DREG_BBLT_SRC_START0, 0x00 }, | ||
230 | { S1DREG_BBLT_SRC_START1, 0x00 }, | ||
231 | { S1DREG_BBLT_SRC_START2, 0x00 }, | ||
232 | { S1DREG_BBLT_DST_START0, 0x00 }, | ||
233 | { S1DREG_BBLT_DST_START1, 0x00 }, | ||
234 | { S1DREG_BBLT_DST_START2, 0x00 }, | ||
235 | { S1DREG_BBLT_MEM_OFF0, 0x00 }, | ||
236 | { S1DREG_BBLT_MEM_OFF1, 0x00 }, | ||
237 | { S1DREG_BBLT_WIDTH0, 0x00 }, | ||
238 | { S1DREG_BBLT_WIDTH1, 0x00 }, | ||
239 | { S1DREG_BBLT_HEIGHT0, 0x00 }, | ||
240 | { S1DREG_BBLT_HEIGHT1, 0x00 }, | ||
241 | { S1DREG_BBLT_BGC0, 0x00 }, | ||
242 | { S1DREG_BBLT_BGC1, 0x00 }, | ||
243 | { S1DREG_BBLT_FGC0, 0x00 }, | ||
244 | { S1DREG_BBLT_FGC1, 0x00 }, | ||
245 | { S1DREG_LKUP_MODE, 0x00 }, | ||
246 | { S1DREG_LKUP_ADDR, 0x00 }, | ||
247 | { S1DREG_PS_CNF, 0x10 }, | ||
248 | { S1DREG_PS_STATUS, 0x00 }, | ||
249 | { S1DREG_CPU2MEM_WDOGT, 0x00 }, | ||
250 | { S1DREG_COM_DISP_MODE, 0x02 }, | ||
251 | }; | ||
252 | |||
253 | static struct s1d13xxxfb_pdata s1d13806_platform_data = { | ||
254 | .initregs = s1d13806_initregs, | ||
255 | .initregssize = ARRAY_SIZE(s1d13806_initregs), | ||
256 | }; | ||
257 | |||
258 | static struct resource s1d13806_resources[] = { | ||
259 | [0] = { | ||
260 | .start = 0x07200000, | ||
261 | .end = 0x07200000 + 0x00200000 - 1, | ||
262 | .flags = IORESOURCE_MEM, | ||
263 | }, | ||
264 | [1] = { | ||
265 | .start = 0x07000000, | ||
266 | .end = 0x07000000 + 0x00200000 - 1, | ||
267 | .flags = IORESOURCE_MEM, | ||
268 | }, | ||
269 | }; | ||
270 | |||
271 | static struct platform_device s1d13806_device = { | ||
272 | .name = "s1d13806fb", | ||
273 | .id = -1, | ||
274 | .num_resources = ARRAY_SIZE(s1d13806_resources), | ||
275 | .resource = s1d13806_resources, | ||
276 | |||
277 | .dev = { | ||
278 | .platform_data = &s1d13806_platform_data, | ||
279 | }, | ||
280 | }; | ||
281 | #endif | ||
282 | |||
283 | static struct platform_device *microdev_devices[] __initdata = { | ||
284 | &smc91x_device, | ||
285 | #ifdef CONFIG_FB_S1D13XXX | ||
286 | &s1d13806_device, | ||
287 | #endif | ||
288 | }; | ||
289 | |||
290 | static int __init microdev_devices_setup(void) | ||
146 | { | 291 | { |
147 | return platform_device_register(&smc91x_device); | 292 | return platform_add_devices(microdev_devices, ARRAY_SIZE(microdev_devices)); |
148 | } | 293 | } |
149 | 294 | ||
150 | __initcall(smc91x_setup); | 295 | __initcall(microdev_devices_setup); |
151 | 296 | ||
152 | /* | ||
153 | * Initialize the board | ||
154 | */ | ||
155 | void __init platform_setup(void) | 297 | void __init platform_setup(void) |
156 | { | 298 | { |
157 | int * const fpgaRevisionRegister = (int*)(MICRODEV_FPGA_GP_BASE + 0x8ul); | 299 | int * const fpgaRevisionRegister = (int*)(MICRODEV_FPGA_GP_BASE + 0x8ul); |
diff --git a/arch/sh/boards/unknown/Makefile b/arch/sh/boards/unknown/Makefile index cffc21031e71..7d18f408b0c5 100644 --- a/arch/sh/boards/unknown/Makefile +++ b/arch/sh/boards/unknown/Makefile | |||
@@ -2,5 +2,5 @@ | |||
2 | # Makefile for unknown SH boards | 2 | # Makefile for unknown SH boards |
3 | # | 3 | # |
4 | 4 | ||
5 | obj-y := mach.o io.o setup.o | 5 | obj-y := setup.o |
6 | 6 | ||
diff --git a/arch/sh/boards/unknown/io.c b/arch/sh/boards/unknown/io.c deleted file mode 100644 index 8f3f17267bd9..000000000000 --- a/arch/sh/boards/unknown/io.c +++ /dev/null | |||
@@ -1,46 +0,0 @@ | |||
1 | /* | ||
2 | * linux/arch/sh/kernel/io_unknown.c | ||
3 | * | ||
4 | * Copyright (C) 2000 Stuart Menefy (stuart.menefy@st.com) | ||
5 | * | ||
6 | * May be copied or modified under the terms of the GNU General Public | ||
7 | * License. See linux/COPYING for more information. | ||
8 | * | ||
9 | * I/O routine for unknown hardware. | ||
10 | */ | ||
11 | |||
12 | static unsigned int unknown_handler(void) | ||
13 | { | ||
14 | return 0; | ||
15 | } | ||
16 | |||
17 | #define UNKNOWN_ALIAS(fn) \ | ||
18 | void unknown_##fn(void) __attribute__ ((alias ("unknown_handler"))); | ||
19 | |||
20 | UNKNOWN_ALIAS(inb) | ||
21 | UNKNOWN_ALIAS(inw) | ||
22 | UNKNOWN_ALIAS(inl) | ||
23 | UNKNOWN_ALIAS(outb) | ||
24 | UNKNOWN_ALIAS(outw) | ||
25 | UNKNOWN_ALIAS(outl) | ||
26 | UNKNOWN_ALIAS(inb_p) | ||
27 | UNKNOWN_ALIAS(inw_p) | ||
28 | UNKNOWN_ALIAS(inl_p) | ||
29 | UNKNOWN_ALIAS(outb_p) | ||
30 | UNKNOWN_ALIAS(outw_p) | ||
31 | UNKNOWN_ALIAS(outl_p) | ||
32 | UNKNOWN_ALIAS(insb) | ||
33 | UNKNOWN_ALIAS(insw) | ||
34 | UNKNOWN_ALIAS(insl) | ||
35 | UNKNOWN_ALIAS(outsb) | ||
36 | UNKNOWN_ALIAS(outsw) | ||
37 | UNKNOWN_ALIAS(outsl) | ||
38 | UNKNOWN_ALIAS(readb) | ||
39 | UNKNOWN_ALIAS(readw) | ||
40 | UNKNOWN_ALIAS(readl) | ||
41 | UNKNOWN_ALIAS(writeb) | ||
42 | UNKNOWN_ALIAS(writew) | ||
43 | UNKNOWN_ALIAS(writel) | ||
44 | UNKNOWN_ALIAS(isa_port2addr) | ||
45 | UNKNOWN_ALIAS(ioremap) | ||
46 | UNKNOWN_ALIAS(iounmap) | ||
diff --git a/arch/sh/boards/unknown/mach.c b/arch/sh/boards/unknown/mach.c deleted file mode 100644 index ad0bcc60a640..000000000000 --- a/arch/sh/boards/unknown/mach.c +++ /dev/null | |||
@@ -1,67 +0,0 @@ | |||
1 | /* | ||
2 | * linux/arch/sh/kernel/mach_unknown.c | ||
3 | * | ||
4 | * Copyright (C) 2000 Stuart Menefy (stuart.menefy@st.com) | ||
5 | * | ||
6 | * May be copied or modified under the terms of the GNU General Public | ||
7 | * License. See linux/COPYING for more information. | ||
8 | * | ||
9 | * Machine specific code for an unknown machine (internal peripherials only) | ||
10 | */ | ||
11 | |||
12 | #include <linux/config.h> | ||
13 | #include <linux/init.h> | ||
14 | |||
15 | #include <asm/machvec.h> | ||
16 | #include <asm/machvec_init.h> | ||
17 | |||
18 | #include <asm/io_unknown.h> | ||
19 | |||
20 | #include <asm/rtc.h> | ||
21 | /* | ||
22 | * The Machine Vector | ||
23 | */ | ||
24 | |||
25 | struct sh_machine_vector mv_unknown __initmv = { | ||
26 | #if defined(CONFIG_CPU_SH4) | ||
27 | .mv_nr_irqs = 48, | ||
28 | #elif defined(CONFIG_CPU_SUBTYPE_SH7708) | ||
29 | .mv_nr_irqs = 32, | ||
30 | #elif defined(CONFIG_CPU_SUBTYPE_SH7709) | ||
31 | .mv_nr_irqs = 61, | ||
32 | #endif | ||
33 | |||
34 | .mv_inb = unknown_inb, | ||
35 | .mv_inw = unknown_inw, | ||
36 | .mv_inl = unknown_inl, | ||
37 | .mv_outb = unknown_outb, | ||
38 | .mv_outw = unknown_outw, | ||
39 | .mv_outl = unknown_outl, | ||
40 | |||
41 | .mv_inb_p = unknown_inb_p, | ||
42 | .mv_inw_p = unknown_inw_p, | ||
43 | .mv_inl_p = unknown_inl_p, | ||
44 | .mv_outb_p = unknown_outb_p, | ||
45 | .mv_outw_p = unknown_outw_p, | ||
46 | .mv_outl_p = unknown_outl_p, | ||
47 | |||
48 | .mv_insb = unknown_insb, | ||
49 | .mv_insw = unknown_insw, | ||
50 | .mv_insl = unknown_insl, | ||
51 | .mv_outsb = unknown_outsb, | ||
52 | .mv_outsw = unknown_outsw, | ||
53 | .mv_outsl = unknown_outsl, | ||
54 | |||
55 | .mv_readb = unknown_readb, | ||
56 | .mv_readw = unknown_readw, | ||
57 | .mv_readl = unknown_readl, | ||
58 | .mv_writeb = unknown_writeb, | ||
59 | .mv_writew = unknown_writew, | ||
60 | .mv_writel = unknown_writel, | ||
61 | |||
62 | .mv_ioremap = unknown_ioremap, | ||
63 | .mv_iounmap = unknown_iounmap, | ||
64 | |||
65 | .mv_isa_port2addr = unknown_isa_port2addr, | ||
66 | }; | ||
67 | ALIAS_MV(unknown) | ||
diff --git a/arch/sh/boards/unknown/setup.c b/arch/sh/boards/unknown/setup.c index 7d772a6f8865..02e84f03f45c 100644 --- a/arch/sh/boards/unknown/setup.c +++ b/arch/sh/boards/unknown/setup.c | |||
@@ -7,10 +7,20 @@ | |||
7 | * License. See linux/COPYING for more information. | 7 | * License. See linux/COPYING for more information. |
8 | * | 8 | * |
9 | * Setup code for an unknown machine (internal peripherials only) | 9 | * Setup code for an unknown machine (internal peripherials only) |
10 | * | ||
11 | * This is the simplest of all boards, and serves only as a quick and dirty | ||
12 | * method to start debugging a new board during bring-up until proper board | ||
13 | * setup code is written. | ||
10 | */ | 14 | */ |
11 | |||
12 | #include <linux/config.h> | 15 | #include <linux/config.h> |
13 | #include <linux/init.h> | 16 | #include <linux/init.h> |
17 | #include <asm/machvec.h> | ||
18 | #include <asm/irq.h> | ||
19 | |||
20 | struct sh_machine_vector mv_unknown __initmv = { | ||
21 | .mv_nr_irqs = NR_IRQS, | ||
22 | }; | ||
23 | ALIAS_MV(unknown) | ||
14 | 24 | ||
15 | const char *get_system_type(void) | 25 | const char *get_system_type(void) |
16 | { | 26 | { |
diff --git a/arch/sh/cchips/voyagergx/consistent.c b/arch/sh/cchips/voyagergx/consistent.c index 3d9a02c093a3..07e8b9c5a531 100644 --- a/arch/sh/cchips/voyagergx/consistent.c +++ b/arch/sh/cchips/voyagergx/consistent.c | |||
@@ -15,7 +15,7 @@ | |||
15 | #include <linux/module.h> | 15 | #include <linux/module.h> |
16 | #include <linux/device.h> | 16 | #include <linux/device.h> |
17 | #include <asm/io.h> | 17 | #include <asm/io.h> |
18 | #include <asm/bus-sh.h> | 18 | |
19 | 19 | ||
20 | struct voya_alloc_entry { | 20 | struct voya_alloc_entry { |
21 | struct list_head list; | 21 | struct list_head list; |
@@ -30,12 +30,13 @@ static LIST_HEAD(voya_alloc_list); | |||
30 | #define OHCI_HCCA_SIZE 0x100 | 30 | #define OHCI_HCCA_SIZE 0x100 |
31 | #define OHCI_SRAM_SIZE 0x10000 | 31 | #define OHCI_SRAM_SIZE 0x10000 |
32 | 32 | ||
33 | #define VOYAGER_OHCI_NAME "voyager-ohci" | ||
34 | |||
33 | void *voyagergx_consistent_alloc(struct device *dev, size_t size, | 35 | void *voyagergx_consistent_alloc(struct device *dev, size_t size, |
34 | dma_addr_t *handle, gfp_t flag) | 36 | dma_addr_t *handle, gfp_t flag) |
35 | { | 37 | { |
36 | struct list_head *list = &voya_alloc_list; | 38 | struct list_head *list = &voya_alloc_list; |
37 | struct voya_alloc_entry *entry; | 39 | struct voya_alloc_entry *entry; |
38 | struct sh_dev *shdev = to_sh_dev(dev); | ||
39 | unsigned long start, end; | 40 | unsigned long start, end; |
40 | unsigned long flags; | 41 | unsigned long flags; |
41 | 42 | ||
@@ -46,9 +47,7 @@ void *voyagergx_consistent_alloc(struct device *dev, size_t size, | |||
46 | * | 47 | * |
47 | * Everything else goes through consistent_alloc(). | 48 | * Everything else goes through consistent_alloc(). |
48 | */ | 49 | */ |
49 | if (!dev || dev->bus != &sh_bus_types[SH_BUS_VIRT] || | 50 | if (!dev || strcmp(dev->driver->name, VOYAGER_OHCI_NAME)) |
50 | (dev->bus == &sh_bus_types[SH_BUS_VIRT] && | ||
51 | shdev->dev_id != SH_DEV_ID_USB_OHCI)) | ||
52 | return NULL; | 51 | return NULL; |
53 | 52 | ||
54 | start = OHCI_SRAM_START + OHCI_HCCA_SIZE; | 53 | start = OHCI_SRAM_START + OHCI_HCCA_SIZE; |
@@ -98,12 +97,9 @@ int voyagergx_consistent_free(struct device *dev, size_t size, | |||
98 | void *vaddr, dma_addr_t handle) | 97 | void *vaddr, dma_addr_t handle) |
99 | { | 98 | { |
100 | struct voya_alloc_entry *entry; | 99 | struct voya_alloc_entry *entry; |
101 | struct sh_dev *shdev = to_sh_dev(dev); | ||
102 | unsigned long flags; | 100 | unsigned long flags; |
103 | 101 | ||
104 | if (!dev || dev->bus != &sh_bus_types[SH_BUS_VIRT] || | 102 | if (!dev || strcmp(dev->driver->name, VOYAGER_OHCI_NAME)) |
105 | (dev->bus == &sh_bus_types[SH_BUS_VIRT] && | ||
106 | shdev->dev_id != SH_DEV_ID_USB_OHCI)) | ||
107 | return -EINVAL; | 103 | return -EINVAL; |
108 | 104 | ||
109 | spin_lock_irqsave(&voya_list_lock, flags); | 105 | spin_lock_irqsave(&voya_list_lock, flags); |
@@ -123,4 +119,3 @@ int voyagergx_consistent_free(struct device *dev, size_t size, | |||
123 | 119 | ||
124 | EXPORT_SYMBOL(voyagergx_consistent_alloc); | 120 | EXPORT_SYMBOL(voyagergx_consistent_alloc); |
125 | EXPORT_SYMBOL(voyagergx_consistent_free); | 121 | EXPORT_SYMBOL(voyagergx_consistent_free); |
126 | |||
diff --git a/arch/sh/cchips/voyagergx/irq.c b/arch/sh/cchips/voyagergx/irq.c index 1b6ac523b458..2ee330b3c38f 100644 --- a/arch/sh/cchips/voyagergx/irq.c +++ b/arch/sh/cchips/voyagergx/irq.c | |||
@@ -163,7 +163,12 @@ int voyagergx_irq_demux(int irq) | |||
163 | return irq; | 163 | return irq; |
164 | } | 164 | } |
165 | 165 | ||
166 | static struct irqaction irq0 = { voyagergx_interrupt, SA_INTERRUPT, 0, "VOYAGERGX", NULL, NULL}; | 166 | static struct irqaction irq0 = { |
167 | .name = "voyagergx", | ||
168 | .handler = voyagergx_interrupt, | ||
169 | .flags = SA_INTERRUPT, | ||
170 | .mask = CPU_MASK_NONE, | ||
171 | }; | ||
167 | 172 | ||
168 | void __init setup_voyagergx_irq(void) | 173 | void __init setup_voyagergx_irq(void) |
169 | { | 174 | { |
diff --git a/arch/sh/configs/microdev_defconfig b/arch/sh/configs/microdev_defconfig index a3bd280b53d6..ab3db76d1e51 100644 --- a/arch/sh/configs/microdev_defconfig +++ b/arch/sh/configs/microdev_defconfig | |||
@@ -1,10 +1,9 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.11-sh | 3 | # Linux kernel version: 2.6.16-rc1 |
4 | # Wed Mar 2 15:09:41 2005 | 4 | # Fri Jan 27 19:43:20 2006 |
5 | # | 5 | # |
6 | CONFIG_SUPERH=y | 6 | CONFIG_SUPERH=y |
7 | CONFIG_UID16=y | ||
8 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | 7 | CONFIG_RWSEM_GENERIC_SPINLOCK=y |
9 | CONFIG_GENERIC_HARDIRQS=y | 8 | CONFIG_GENERIC_HARDIRQS=y |
10 | CONFIG_GENERIC_IRQ_PROBE=y | 9 | CONFIG_GENERIC_IRQ_PROBE=y |
@@ -17,11 +16,13 @@ CONFIG_EXPERIMENTAL=y | |||
17 | CONFIG_CLEAN_COMPILE=y | 16 | CONFIG_CLEAN_COMPILE=y |
18 | CONFIG_BROKEN_ON_SMP=y | 17 | CONFIG_BROKEN_ON_SMP=y |
19 | CONFIG_LOCK_KERNEL=y | 18 | CONFIG_LOCK_KERNEL=y |
19 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
20 | 20 | ||
21 | # | 21 | # |
22 | # General setup | 22 | # General setup |
23 | # | 23 | # |
24 | CONFIG_LOCALVERSION="" | 24 | CONFIG_LOCALVERSION="" |
25 | CONFIG_LOCALVERSION_AUTO=y | ||
25 | CONFIG_SWAP=y | 26 | CONFIG_SWAP=y |
26 | # CONFIG_SYSVIPC is not set | 27 | # CONFIG_SYSVIPC is not set |
27 | # CONFIG_POSIX_MQUEUE is not set | 28 | # CONFIG_POSIX_MQUEUE is not set |
@@ -29,22 +30,29 @@ CONFIG_BSD_PROCESS_ACCT=y | |||
29 | # CONFIG_BSD_PROCESS_ACCT_V3 is not set | 30 | # CONFIG_BSD_PROCESS_ACCT_V3 is not set |
30 | CONFIG_SYSCTL=y | 31 | CONFIG_SYSCTL=y |
31 | # CONFIG_AUDIT is not set | 32 | # CONFIG_AUDIT is not set |
32 | CONFIG_LOG_BUF_SHIFT=14 | ||
33 | CONFIG_HOTPLUG=y | ||
34 | CONFIG_KOBJECT_UEVENT=y | ||
35 | # CONFIG_IKCONFIG is not set | 33 | # CONFIG_IKCONFIG is not set |
34 | CONFIG_INITRAMFS_SOURCE="" | ||
35 | CONFIG_UID16=y | ||
36 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | ||
36 | CONFIG_EMBEDDED=y | 37 | CONFIG_EMBEDDED=y |
37 | CONFIG_KALLSYMS=y | 38 | CONFIG_KALLSYMS=y |
38 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 39 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
40 | CONFIG_HOTPLUG=y | ||
41 | CONFIG_PRINTK=y | ||
42 | CONFIG_BUG=y | ||
43 | CONFIG_ELF_CORE=y | ||
44 | CONFIG_BASE_FULL=y | ||
39 | CONFIG_FUTEX=y | 45 | CONFIG_FUTEX=y |
40 | CONFIG_EPOLL=y | 46 | CONFIG_EPOLL=y |
41 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | ||
42 | CONFIG_SHMEM=y | 47 | CONFIG_SHMEM=y |
43 | CONFIG_CC_ALIGN_FUNCTIONS=0 | 48 | CONFIG_CC_ALIGN_FUNCTIONS=0 |
44 | CONFIG_CC_ALIGN_LABELS=0 | 49 | CONFIG_CC_ALIGN_LABELS=0 |
45 | CONFIG_CC_ALIGN_LOOPS=0 | 50 | CONFIG_CC_ALIGN_LOOPS=0 |
46 | CONFIG_CC_ALIGN_JUMPS=0 | 51 | CONFIG_CC_ALIGN_JUMPS=0 |
52 | CONFIG_SLAB=y | ||
47 | # CONFIG_TINY_SHMEM is not set | 53 | # CONFIG_TINY_SHMEM is not set |
54 | CONFIG_BASE_SMALL=0 | ||
55 | # CONFIG_SLOB is not set | ||
48 | 56 | ||
49 | # | 57 | # |
50 | # Loadable module support | 58 | # Loadable module support |
@@ -52,6 +60,24 @@ CONFIG_CC_ALIGN_JUMPS=0 | |||
52 | # CONFIG_MODULES is not set | 60 | # CONFIG_MODULES is not set |
53 | 61 | ||
54 | # | 62 | # |
63 | # Block layer | ||
64 | # | ||
65 | # CONFIG_LBD is not set | ||
66 | |||
67 | # | ||
68 | # IO Schedulers | ||
69 | # | ||
70 | CONFIG_IOSCHED_NOOP=y | ||
71 | CONFIG_IOSCHED_AS=y | ||
72 | CONFIG_IOSCHED_DEADLINE=y | ||
73 | CONFIG_IOSCHED_CFQ=y | ||
74 | CONFIG_DEFAULT_AS=y | ||
75 | # CONFIG_DEFAULT_DEADLINE is not set | ||
76 | # CONFIG_DEFAULT_CFQ is not set | ||
77 | # CONFIG_DEFAULT_NOOP is not set | ||
78 | CONFIG_DEFAULT_IOSCHED="anticipatory" | ||
79 | |||
80 | # | ||
55 | # System type | 81 | # System type |
56 | # | 82 | # |
57 | # CONFIG_SH_SOLUTION_ENGINE is not set | 83 | # CONFIG_SH_SOLUTION_ENGINE is not set |
@@ -61,9 +87,7 @@ CONFIG_CC_ALIGN_JUMPS=0 | |||
61 | # CONFIG_SH_7751_SYSTEMH is not set | 87 | # CONFIG_SH_7751_SYSTEMH is not set |
62 | # CONFIG_SH_STB1_HARP is not set | 88 | # CONFIG_SH_STB1_HARP is not set |
63 | # CONFIG_SH_STB1_OVERDRIVE is not set | 89 | # CONFIG_SH_STB1_OVERDRIVE is not set |
64 | # CONFIG_SH_HP620 is not set | 90 | # CONFIG_SH_HP6XX is not set |
65 | # CONFIG_SH_HP680 is not set | ||
66 | # CONFIG_SH_HP690 is not set | ||
67 | # CONFIG_SH_CQREEK is not set | 91 | # CONFIG_SH_CQREEK is not set |
68 | # CONFIG_SH_DMIDA is not set | 92 | # CONFIG_SH_DMIDA is not set |
69 | # CONFIG_SH_EC3104 is not set | 93 | # CONFIG_SH_EC3104 is not set |
@@ -78,45 +102,94 @@ CONFIG_CC_ALIGN_JUMPS=0 | |||
78 | # CONFIG_SH_SECUREEDGE5410 is not set | 102 | # CONFIG_SH_SECUREEDGE5410 is not set |
79 | # CONFIG_SH_HS7751RVOIP is not set | 103 | # CONFIG_SH_HS7751RVOIP is not set |
80 | # CONFIG_SH_RTS7751R2D is not set | 104 | # CONFIG_SH_RTS7751R2D is not set |
105 | # CONFIG_SH_R7780RP is not set | ||
81 | # CONFIG_SH_EDOSK7705 is not set | 106 | # CONFIG_SH_EDOSK7705 is not set |
82 | CONFIG_SH_SH4202_MICRODEV=y | 107 | CONFIG_SH_SH4202_MICRODEV=y |
108 | # CONFIG_SH_LANDISK is not set | ||
109 | # CONFIG_SH_TITAN is not set | ||
83 | # CONFIG_SH_UNKNOWN is not set | 110 | # CONFIG_SH_UNKNOWN is not set |
84 | # CONFIG_CPU_SH2 is not set | 111 | |
85 | # CONFIG_CPU_SH3 is not set | 112 | # |
113 | # Processor selection | ||
114 | # | ||
86 | CONFIG_CPU_SH4=y | 115 | CONFIG_CPU_SH4=y |
116 | |||
117 | # | ||
118 | # SH-2 Processor Support | ||
119 | # | ||
87 | # CONFIG_CPU_SUBTYPE_SH7604 is not set | 120 | # CONFIG_CPU_SUBTYPE_SH7604 is not set |
121 | |||
122 | # | ||
123 | # SH-3 Processor Support | ||
124 | # | ||
88 | # CONFIG_CPU_SUBTYPE_SH7300 is not set | 125 | # CONFIG_CPU_SUBTYPE_SH7300 is not set |
89 | # CONFIG_CPU_SUBTYPE_SH7705 is not set | 126 | # CONFIG_CPU_SUBTYPE_SH7705 is not set |
90 | # CONFIG_CPU_SUBTYPE_SH7707 is not set | 127 | # CONFIG_CPU_SUBTYPE_SH7707 is not set |
91 | # CONFIG_CPU_SUBTYPE_SH7708 is not set | 128 | # CONFIG_CPU_SUBTYPE_SH7708 is not set |
92 | # CONFIG_CPU_SUBTYPE_SH7709 is not set | 129 | # CONFIG_CPU_SUBTYPE_SH7709 is not set |
130 | |||
131 | # | ||
132 | # SH-4 Processor Support | ||
133 | # | ||
93 | # CONFIG_CPU_SUBTYPE_SH7750 is not set | 134 | # CONFIG_CPU_SUBTYPE_SH7750 is not set |
135 | # CONFIG_CPU_SUBTYPE_SH7091 is not set | ||
136 | # CONFIG_CPU_SUBTYPE_SH7750R is not set | ||
137 | # CONFIG_CPU_SUBTYPE_SH7750S is not set | ||
94 | # CONFIG_CPU_SUBTYPE_SH7751 is not set | 138 | # CONFIG_CPU_SUBTYPE_SH7751 is not set |
139 | # CONFIG_CPU_SUBTYPE_SH7751R is not set | ||
95 | # CONFIG_CPU_SUBTYPE_SH7760 is not set | 140 | # CONFIG_CPU_SUBTYPE_SH7760 is not set |
96 | # CONFIG_CPU_SUBTYPE_SH73180 is not set | 141 | CONFIG_CPU_SUBTYPE_SH4_202=y |
142 | |||
143 | # | ||
144 | # ST40 Processor Support | ||
145 | # | ||
97 | # CONFIG_CPU_SUBTYPE_ST40STB1 is not set | 146 | # CONFIG_CPU_SUBTYPE_ST40STB1 is not set |
98 | # CONFIG_CPU_SUBTYPE_ST40GX1 is not set | 147 | # CONFIG_CPU_SUBTYPE_ST40GX1 is not set |
99 | CONFIG_CPU_SUBTYPE_SH4_202=y | 148 | |
149 | # | ||
150 | # SH-4A Processor Support | ||
151 | # | ||
152 | # CONFIG_CPU_SUBTYPE_SH73180 is not set | ||
153 | # CONFIG_CPU_SUBTYPE_SH7770 is not set | ||
154 | # CONFIG_CPU_SUBTYPE_SH7780 is not set | ||
155 | |||
156 | # | ||
157 | # Memory management options | ||
158 | # | ||
100 | CONFIG_MMU=y | 159 | CONFIG_MMU=y |
101 | CONFIG_CMDLINE_BOOL=y | 160 | CONFIG_SELECT_MEMORY_MODEL=y |
102 | CONFIG_CMDLINE="console=ttySC0,115200" | 161 | CONFIG_FLATMEM_MANUAL=y |
162 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
163 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
164 | CONFIG_FLATMEM=y | ||
165 | CONFIG_FLAT_NODE_MEM_MAP=y | ||
166 | # CONFIG_SPARSEMEM_STATIC is not set | ||
167 | CONFIG_SPLIT_PTLOCK_CPUS=4 | ||
168 | |||
169 | # | ||
170 | # Cache configuration | ||
171 | # | ||
172 | # CONFIG_SH_DIRECT_MAPPED is not set | ||
173 | # CONFIG_SH_WRITETHROUGH is not set | ||
174 | # CONFIG_SH_OCRAM is not set | ||
103 | CONFIG_MEMORY_START=0x08000000 | 175 | CONFIG_MEMORY_START=0x08000000 |
104 | CONFIG_MEMORY_SIZE=0x04000000 | 176 | CONFIG_MEMORY_SIZE=0x04000000 |
105 | CONFIG_MEMORY_SET=y | 177 | |
106 | # CONFIG_MEMORY_OVERRIDE is not set | 178 | # |
179 | # Processor features | ||
180 | # | ||
181 | CONFIG_CPU_LITTLE_ENDIAN=y | ||
107 | CONFIG_SH_RTC=y | 182 | CONFIG_SH_RTC=y |
108 | CONFIG_SH_FPU=y | 183 | CONFIG_SH_FPU=y |
109 | CONFIG_ZERO_PAGE_OFFSET=0x00001000 | ||
110 | CONFIG_BOOT_LINK_OFFSET=0x00800000 | ||
111 | CONFIG_CPU_LITTLE_ENDIAN=y | ||
112 | CONFIG_PREEMPT=y | ||
113 | # CONFIG_UBC_WAKEUP is not set | ||
114 | # CONFIG_SH_WRITETHROUGH is not set | ||
115 | # CONFIG_SH_OCRAM is not set | ||
116 | # CONFIG_SH_STORE_QUEUES is not set | 184 | # CONFIG_SH_STORE_QUEUES is not set |
117 | # CONFIG_SMP is not set | 185 | CONFIG_CPU_HAS_INTEVT=y |
118 | CONFIG_SH_PCLK_CALC=y | 186 | CONFIG_CPU_HAS_SR_RB=y |
119 | CONFIG_SH_PCLK_FREQ=65986048 | 187 | |
188 | # | ||
189 | # Timer support | ||
190 | # | ||
191 | CONFIG_SH_TMU=y | ||
192 | CONFIG_SH_PCLK_FREQ=66000000 | ||
120 | 193 | ||
121 | # | 194 | # |
122 | # CPU Frequency scaling | 195 | # CPU Frequency scaling |
@@ -137,20 +210,31 @@ CONFIG_NR_ONCHIP_DMA_CHANNELS=4 | |||
137 | CONFIG_HEARTBEAT=y | 210 | CONFIG_HEARTBEAT=y |
138 | 211 | ||
139 | # | 212 | # |
140 | # Bus options (PCI, PCMCIA, EISA, MCA, ISA) | 213 | # Kernel features |
141 | # | 214 | # |
142 | CONFIG_ISA=y | 215 | # CONFIG_KEXEC is not set |
143 | # CONFIG_PCI is not set | 216 | CONFIG_PREEMPT=y |
217 | # CONFIG_SMP is not set | ||
144 | 218 | ||
145 | # | 219 | # |
146 | # PCCARD (PCMCIA/CardBus) support | 220 | # Boot options |
147 | # | 221 | # |
148 | # CONFIG_PCCARD is not set | 222 | CONFIG_ZERO_PAGE_OFFSET=0x00001000 |
223 | CONFIG_BOOT_LINK_OFFSET=0x00800000 | ||
224 | # CONFIG_UBC_WAKEUP is not set | ||
225 | CONFIG_CMDLINE_BOOL=y | ||
226 | CONFIG_CMDLINE="console=ttySC0,115200" | ||
149 | 227 | ||
150 | # | 228 | # |
151 | # PC-card bridges | 229 | # Bus options |
152 | # | 230 | # |
153 | CONFIG_PCMCIA_PROBE=y | 231 | # CONFIG_SUPERHYWAY is not set |
232 | # CONFIG_PCI is not set | ||
233 | |||
234 | # | ||
235 | # PCCARD (PCMCIA/CardBus) support | ||
236 | # | ||
237 | # CONFIG_PCCARD is not set | ||
154 | 238 | ||
155 | # | 239 | # |
156 | # PCI Hotplug Support | 240 | # PCI Hotplug Support |
@@ -164,9 +248,79 @@ CONFIG_BINFMT_ELF=y | |||
164 | # CONFIG_BINFMT_MISC is not set | 248 | # CONFIG_BINFMT_MISC is not set |
165 | 249 | ||
166 | # | 250 | # |
167 | # SH initrd options | 251 | # Networking |
252 | # | ||
253 | CONFIG_NET=y | ||
254 | |||
255 | # | ||
256 | # Networking options | ||
257 | # | ||
258 | # CONFIG_PACKET is not set | ||
259 | # CONFIG_UNIX is not set | ||
260 | # CONFIG_NET_KEY is not set | ||
261 | CONFIG_INET=y | ||
262 | # CONFIG_IP_MULTICAST is not set | ||
263 | # CONFIG_IP_ADVANCED_ROUTER is not set | ||
264 | CONFIG_IP_FIB_HASH=y | ||
265 | CONFIG_IP_PNP=y | ||
266 | CONFIG_IP_PNP_DHCP=y | ||
267 | # CONFIG_IP_PNP_BOOTP is not set | ||
268 | # CONFIG_IP_PNP_RARP is not set | ||
269 | # CONFIG_NET_IPIP is not set | ||
270 | # CONFIG_NET_IPGRE is not set | ||
271 | # CONFIG_ARPD is not set | ||
272 | # CONFIG_SYN_COOKIES is not set | ||
273 | # CONFIG_INET_AH is not set | ||
274 | # CONFIG_INET_ESP is not set | ||
275 | # CONFIG_INET_IPCOMP is not set | ||
276 | # CONFIG_INET_TUNNEL is not set | ||
277 | CONFIG_INET_DIAG=y | ||
278 | CONFIG_INET_TCP_DIAG=y | ||
279 | # CONFIG_TCP_CONG_ADVANCED is not set | ||
280 | CONFIG_TCP_CONG_BIC=y | ||
281 | # CONFIG_IPV6 is not set | ||
282 | # CONFIG_NETFILTER is not set | ||
283 | |||
284 | # | ||
285 | # DCCP Configuration (EXPERIMENTAL) | ||
286 | # | ||
287 | # CONFIG_IP_DCCP is not set | ||
288 | |||
289 | # | ||
290 | # SCTP Configuration (EXPERIMENTAL) | ||
168 | # | 291 | # |
169 | # CONFIG_EMBEDDED_RAMDISK is not set | 292 | # CONFIG_IP_SCTP is not set |
293 | |||
294 | # | ||
295 | # TIPC Configuration (EXPERIMENTAL) | ||
296 | # | ||
297 | # CONFIG_TIPC is not set | ||
298 | # CONFIG_ATM is not set | ||
299 | # CONFIG_BRIDGE is not set | ||
300 | # CONFIG_VLAN_8021Q is not set | ||
301 | # CONFIG_DECNET is not set | ||
302 | # CONFIG_LLC2 is not set | ||
303 | # CONFIG_IPX is not set | ||
304 | # CONFIG_ATALK is not set | ||
305 | # CONFIG_X25 is not set | ||
306 | # CONFIG_LAPB is not set | ||
307 | # CONFIG_NET_DIVERT is not set | ||
308 | # CONFIG_ECONET is not set | ||
309 | # CONFIG_WAN_ROUTER is not set | ||
310 | |||
311 | # | ||
312 | # QoS and/or fair queueing | ||
313 | # | ||
314 | # CONFIG_NET_SCHED is not set | ||
315 | |||
316 | # | ||
317 | # Network testing | ||
318 | # | ||
319 | # CONFIG_NET_PKTGEN is not set | ||
320 | # CONFIG_HAMRADIO is not set | ||
321 | # CONFIG_IRDA is not set | ||
322 | # CONFIG_BT is not set | ||
323 | # CONFIG_IEEE80211 is not set | ||
170 | 324 | ||
171 | # | 325 | # |
172 | # Device Drivers | 326 | # Device Drivers |
@@ -180,6 +334,11 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y | |||
180 | # CONFIG_FW_LOADER is not set | 334 | # CONFIG_FW_LOADER is not set |
181 | 335 | ||
182 | # | 336 | # |
337 | # Connector - unified userspace <-> kernelspace linker | ||
338 | # | ||
339 | # CONFIG_CONNECTOR is not set | ||
340 | |||
341 | # | ||
183 | # Memory Technology Devices (MTD) | 342 | # Memory Technology Devices (MTD) |
184 | # | 343 | # |
185 | # CONFIG_MTD is not set | 344 | # CONFIG_MTD is not set |
@@ -192,13 +351,10 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y | |||
192 | # | 351 | # |
193 | # Plug and Play support | 352 | # Plug and Play support |
194 | # | 353 | # |
195 | # CONFIG_PNP is not set | ||
196 | 354 | ||
197 | # | 355 | # |
198 | # Block devices | 356 | # Block devices |
199 | # | 357 | # |
200 | # CONFIG_BLK_DEV_FD is not set | ||
201 | # CONFIG_BLK_DEV_XD is not set | ||
202 | # CONFIG_BLK_DEV_COW_COMMON is not set | 358 | # CONFIG_BLK_DEV_COW_COMMON is not set |
203 | # CONFIG_BLK_DEV_LOOP is not set | 359 | # CONFIG_BLK_DEV_LOOP is not set |
204 | # CONFIG_BLK_DEV_NBD is not set | 360 | # CONFIG_BLK_DEV_NBD is not set |
@@ -206,17 +362,7 @@ CONFIG_BLK_DEV_RAM=y | |||
206 | CONFIG_BLK_DEV_RAM_COUNT=16 | 362 | CONFIG_BLK_DEV_RAM_COUNT=16 |
207 | CONFIG_BLK_DEV_RAM_SIZE=4096 | 363 | CONFIG_BLK_DEV_RAM_SIZE=4096 |
208 | CONFIG_BLK_DEV_INITRD=y | 364 | CONFIG_BLK_DEV_INITRD=y |
209 | CONFIG_INITRAMFS_SOURCE="" | ||
210 | # CONFIG_LBD is not set | ||
211 | # CONFIG_CDROM_PKTCDVD is not set | 365 | # CONFIG_CDROM_PKTCDVD is not set |
212 | |||
213 | # | ||
214 | # IO Schedulers | ||
215 | # | ||
216 | CONFIG_IOSCHED_NOOP=y | ||
217 | CONFIG_IOSCHED_AS=y | ||
218 | CONFIG_IOSCHED_DEADLINE=y | ||
219 | CONFIG_IOSCHED_CFQ=y | ||
220 | # CONFIG_ATA_OVER_ETH is not set | 366 | # CONFIG_ATA_OVER_ETH is not set |
221 | 367 | ||
222 | # | 368 | # |
@@ -241,9 +387,7 @@ CONFIG_BLK_DEV_IDECD=y | |||
241 | # IDE chipset support/bugfixes | 387 | # IDE chipset support/bugfixes |
242 | # | 388 | # |
243 | CONFIG_IDE_GENERIC=y | 389 | CONFIG_IDE_GENERIC=y |
244 | CONFIG_IDE_SH=y | ||
245 | # CONFIG_IDE_ARM is not set | 390 | # CONFIG_IDE_ARM is not set |
246 | # CONFIG_IDE_CHIPSETS is not set | ||
247 | # CONFIG_BLK_DEV_IDEDMA is not set | 391 | # CONFIG_BLK_DEV_IDEDMA is not set |
248 | # CONFIG_IDEDMA_AUTO is not set | 392 | # CONFIG_IDEDMA_AUTO is not set |
249 | # CONFIG_BLK_DEV_HD is not set | 393 | # CONFIG_BLK_DEV_HD is not set |
@@ -251,14 +395,10 @@ CONFIG_IDE_SH=y | |||
251 | # | 395 | # |
252 | # SCSI device support | 396 | # SCSI device support |
253 | # | 397 | # |
398 | # CONFIG_RAID_ATTRS is not set | ||
254 | # CONFIG_SCSI is not set | 399 | # CONFIG_SCSI is not set |
255 | 400 | ||
256 | # | 401 | # |
257 | # Old CD-ROM drivers (not SCSI, not IDE) | ||
258 | # | ||
259 | # CONFIG_CD_NO_IDESCSI is not set | ||
260 | |||
261 | # | ||
262 | # Multi-device support (RAID and LVM) | 402 | # Multi-device support (RAID and LVM) |
263 | # | 403 | # |
264 | # CONFIG_MD is not set | 404 | # CONFIG_MD is not set |
@@ -266,6 +406,7 @@ CONFIG_IDE_SH=y | |||
266 | # | 406 | # |
267 | # Fusion MPT device support | 407 | # Fusion MPT device support |
268 | # | 408 | # |
409 | # CONFIG_FUSION is not set | ||
269 | 410 | ||
270 | # | 411 | # |
271 | # IEEE 1394 (FireWire) support | 412 | # IEEE 1394 (FireWire) support |
@@ -276,69 +417,8 @@ CONFIG_IDE_SH=y | |||
276 | # | 417 | # |
277 | 418 | ||
278 | # | 419 | # |
279 | # Networking support | 420 | # Network device support |
280 | # | ||
281 | CONFIG_NET=y | ||
282 | |||
283 | # | ||
284 | # Networking options | ||
285 | # | ||
286 | # CONFIG_PACKET is not set | ||
287 | # CONFIG_NETLINK_DEV is not set | ||
288 | # CONFIG_UNIX is not set | ||
289 | # CONFIG_NET_KEY is not set | ||
290 | CONFIG_INET=y | ||
291 | # CONFIG_IP_MULTICAST is not set | ||
292 | # CONFIG_IP_ADVANCED_ROUTER is not set | ||
293 | CONFIG_IP_PNP=y | ||
294 | CONFIG_IP_PNP_DHCP=y | ||
295 | # CONFIG_IP_PNP_BOOTP is not set | ||
296 | # CONFIG_IP_PNP_RARP is not set | ||
297 | # CONFIG_NET_IPIP is not set | ||
298 | # CONFIG_NET_IPGRE is not set | ||
299 | # CONFIG_ARPD is not set | ||
300 | # CONFIG_SYN_COOKIES is not set | ||
301 | # CONFIG_INET_AH is not set | ||
302 | # CONFIG_INET_ESP is not set | ||
303 | # CONFIG_INET_IPCOMP is not set | ||
304 | # CONFIG_INET_TUNNEL is not set | ||
305 | CONFIG_IP_TCPDIAG=y | ||
306 | # CONFIG_IP_TCPDIAG_IPV6 is not set | ||
307 | # CONFIG_IPV6 is not set | ||
308 | # CONFIG_NETFILTER is not set | ||
309 | |||
310 | # | ||
311 | # SCTP Configuration (EXPERIMENTAL) | ||
312 | # | ||
313 | # CONFIG_IP_SCTP is not set | ||
314 | # CONFIG_ATM is not set | ||
315 | # CONFIG_BRIDGE is not set | ||
316 | # CONFIG_VLAN_8021Q is not set | ||
317 | # CONFIG_DECNET is not set | ||
318 | # CONFIG_LLC2 is not set | ||
319 | # CONFIG_IPX is not set | ||
320 | # CONFIG_ATALK is not set | ||
321 | # CONFIG_X25 is not set | ||
322 | # CONFIG_LAPB is not set | ||
323 | # CONFIG_NET_DIVERT is not set | ||
324 | # CONFIG_ECONET is not set | ||
325 | # CONFIG_WAN_ROUTER is not set | ||
326 | |||
327 | # | ||
328 | # QoS and/or fair queueing | ||
329 | # | ||
330 | # CONFIG_NET_SCHED is not set | ||
331 | # CONFIG_NET_CLS_ROUTE is not set | ||
332 | |||
333 | # | ||
334 | # Network testing | ||
335 | # | 421 | # |
336 | # CONFIG_NET_PKTGEN is not set | ||
337 | # CONFIG_NETPOLL is not set | ||
338 | # CONFIG_NET_POLL_CONTROLLER is not set | ||
339 | # CONFIG_HAMRADIO is not set | ||
340 | # CONFIG_IRDA is not set | ||
341 | # CONFIG_BT is not set | ||
342 | CONFIG_NETDEVICES=y | 422 | CONFIG_NETDEVICES=y |
343 | # CONFIG_DUMMY is not set | 423 | # CONFIG_DUMMY is not set |
344 | # CONFIG_BONDING is not set | 424 | # CONFIG_BONDING is not set |
@@ -346,9 +426,9 @@ CONFIG_NETDEVICES=y | |||
346 | # CONFIG_TUN is not set | 426 | # CONFIG_TUN is not set |
347 | 427 | ||
348 | # | 428 | # |
349 | # ARCnet devices | 429 | # PHY device support |
350 | # | 430 | # |
351 | # CONFIG_ARCNET is not set | 431 | # CONFIG_PHYLIB is not set |
352 | 432 | ||
353 | # | 433 | # |
354 | # Ethernet (10 or 100Mbit) | 434 | # Ethernet (10 or 100Mbit) |
@@ -356,17 +436,7 @@ CONFIG_NETDEVICES=y | |||
356 | CONFIG_NET_ETHERNET=y | 436 | CONFIG_NET_ETHERNET=y |
357 | CONFIG_MII=y | 437 | CONFIG_MII=y |
358 | # CONFIG_STNIC is not set | 438 | # CONFIG_STNIC is not set |
359 | # CONFIG_NET_VENDOR_3COM is not set | ||
360 | # CONFIG_LANCE is not set | ||
361 | # CONFIG_NET_VENDOR_SMC is not set | ||
362 | CONFIG_SMC91X=y | 439 | CONFIG_SMC91X=y |
363 | # CONFIG_NET_VENDOR_RACAL is not set | ||
364 | # CONFIG_AT1700 is not set | ||
365 | # CONFIG_DEPCA is not set | ||
366 | # CONFIG_HP100 is not set | ||
367 | # CONFIG_NET_ISA is not set | ||
368 | # CONFIG_NET_PCI is not set | ||
369 | # CONFIG_NET_POCKET is not set | ||
370 | 440 | ||
371 | # | 441 | # |
372 | # Ethernet (1000 Mbit) | 442 | # Ethernet (1000 Mbit) |
@@ -379,7 +449,6 @@ CONFIG_SMC91X=y | |||
379 | # | 449 | # |
380 | # Token Ring devices | 450 | # Token Ring devices |
381 | # | 451 | # |
382 | # CONFIG_TR is not set | ||
383 | 452 | ||
384 | # | 453 | # |
385 | # Wireless LAN (non-hamradio) | 454 | # Wireless LAN (non-hamradio) |
@@ -394,6 +463,8 @@ CONFIG_SMC91X=y | |||
394 | # CONFIG_SLIP is not set | 463 | # CONFIG_SLIP is not set |
395 | # CONFIG_SHAPER is not set | 464 | # CONFIG_SHAPER is not set |
396 | # CONFIG_NETCONSOLE is not set | 465 | # CONFIG_NETCONSOLE is not set |
466 | # CONFIG_NETPOLL is not set | ||
467 | # CONFIG_NET_POLL_CONTROLLER is not set | ||
397 | 468 | ||
398 | # | 469 | # |
399 | # ISDN subsystem | 470 | # ISDN subsystem |
@@ -411,20 +482,10 @@ CONFIG_SMC91X=y | |||
411 | # CONFIG_INPUT is not set | 482 | # CONFIG_INPUT is not set |
412 | 483 | ||
413 | # | 484 | # |
414 | # Userland interfaces | 485 | # Hardware I/O ports |
415 | # | ||
416 | |||
417 | # | ||
418 | # Input I/O drivers | ||
419 | # | 486 | # |
420 | # CONFIG_GAMEPORT is not set | ||
421 | CONFIG_SOUND_GAMEPORT=y | ||
422 | # CONFIG_SERIO is not set | 487 | # CONFIG_SERIO is not set |
423 | # CONFIG_SERIO_I8042 is not set | 488 | # CONFIG_GAMEPORT is not set |
424 | |||
425 | # | ||
426 | # Input Device Drivers | ||
427 | # | ||
428 | 489 | ||
429 | # | 490 | # |
430 | # Character devices | 491 | # Character devices |
@@ -464,24 +525,46 @@ CONFIG_RTC=y | |||
464 | # | 525 | # |
465 | # Ftape, the floppy tape device driver | 526 | # Ftape, the floppy tape device driver |
466 | # | 527 | # |
467 | # CONFIG_DRM is not set | ||
468 | # CONFIG_RAW_DRIVER is not set | 528 | # CONFIG_RAW_DRIVER is not set |
469 | 529 | ||
470 | # | 530 | # |
531 | # TPM devices | ||
532 | # | ||
533 | # CONFIG_TCG_TPM is not set | ||
534 | # CONFIG_TELCLOCK is not set | ||
535 | |||
536 | # | ||
471 | # I2C support | 537 | # I2C support |
472 | # | 538 | # |
473 | # CONFIG_I2C is not set | 539 | # CONFIG_I2C is not set |
474 | 540 | ||
475 | # | 541 | # |
542 | # SPI support | ||
543 | # | ||
544 | # CONFIG_SPI is not set | ||
545 | # CONFIG_SPI_MASTER is not set | ||
546 | |||
547 | # | ||
476 | # Dallas's 1-wire bus | 548 | # Dallas's 1-wire bus |
477 | # | 549 | # |
478 | # CONFIG_W1 is not set | 550 | # CONFIG_W1 is not set |
479 | 551 | ||
480 | # | 552 | # |
553 | # Hardware Monitoring support | ||
554 | # | ||
555 | CONFIG_HWMON=y | ||
556 | # CONFIG_HWMON_VID is not set | ||
557 | # CONFIG_HWMON_DEBUG_CHIP is not set | ||
558 | |||
559 | # | ||
481 | # Misc devices | 560 | # Misc devices |
482 | # | 561 | # |
483 | 562 | ||
484 | # | 563 | # |
564 | # Multimedia Capabilities Port drivers | ||
565 | # | ||
566 | |||
567 | # | ||
485 | # Multimedia devices | 568 | # Multimedia devices |
486 | # | 569 | # |
487 | # CONFIG_VIDEO_DEV is not set | 570 | # CONFIG_VIDEO_DEV is not set |
@@ -508,7 +591,7 @@ CONFIG_RTC=y | |||
508 | # CONFIG_USB_ARCH_HAS_OHCI is not set | 591 | # CONFIG_USB_ARCH_HAS_OHCI is not set |
509 | 592 | ||
510 | # | 593 | # |
511 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information | 594 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' |
512 | # | 595 | # |
513 | 596 | ||
514 | # | 597 | # |
@@ -524,13 +607,21 @@ CONFIG_RTC=y | |||
524 | # | 607 | # |
525 | # InfiniBand support | 608 | # InfiniBand support |
526 | # | 609 | # |
527 | # CONFIG_INFINIBAND is not set | 610 | |
611 | # | ||
612 | # SN Devices | ||
613 | # | ||
614 | |||
615 | # | ||
616 | # EDAC - error detection and reporting (RAS) | ||
617 | # | ||
528 | 618 | ||
529 | # | 619 | # |
530 | # File systems | 620 | # File systems |
531 | # | 621 | # |
532 | CONFIG_EXT2_FS=y | 622 | CONFIG_EXT2_FS=y |
533 | # CONFIG_EXT2_FS_XATTR is not set | 623 | # CONFIG_EXT2_FS_XATTR is not set |
624 | # CONFIG_EXT2_FS_XIP is not set | ||
534 | CONFIG_EXT3_FS=y | 625 | CONFIG_EXT3_FS=y |
535 | CONFIG_EXT3_FS_XATTR=y | 626 | CONFIG_EXT3_FS_XATTR=y |
536 | # CONFIG_EXT3_FS_POSIX_ACL is not set | 627 | # CONFIG_EXT3_FS_POSIX_ACL is not set |
@@ -540,17 +631,17 @@ CONFIG_JBD=y | |||
540 | CONFIG_FS_MBCACHE=y | 631 | CONFIG_FS_MBCACHE=y |
541 | # CONFIG_REISERFS_FS is not set | 632 | # CONFIG_REISERFS_FS is not set |
542 | # CONFIG_JFS_FS is not set | 633 | # CONFIG_JFS_FS is not set |
543 | 634 | # CONFIG_FS_POSIX_ACL is not set | |
544 | # | ||
545 | # XFS support | ||
546 | # | ||
547 | # CONFIG_XFS_FS is not set | 635 | # CONFIG_XFS_FS is not set |
636 | # CONFIG_OCFS2_FS is not set | ||
548 | # CONFIG_MINIX_FS is not set | 637 | # CONFIG_MINIX_FS is not set |
549 | # CONFIG_ROMFS_FS is not set | 638 | # CONFIG_ROMFS_FS is not set |
639 | CONFIG_INOTIFY=y | ||
550 | # CONFIG_QUOTA is not set | 640 | # CONFIG_QUOTA is not set |
551 | CONFIG_DNOTIFY=y | 641 | CONFIG_DNOTIFY=y |
552 | # CONFIG_AUTOFS_FS is not set | 642 | # CONFIG_AUTOFS_FS is not set |
553 | # CONFIG_AUTOFS4_FS is not set | 643 | # CONFIG_AUTOFS4_FS is not set |
644 | # CONFIG_FUSE_FS is not set | ||
554 | 645 | ||
555 | # | 646 | # |
556 | # CD-ROM/DVD Filesystems | 647 | # CD-ROM/DVD Filesystems |
@@ -574,16 +665,12 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | |||
574 | CONFIG_PROC_FS=y | 665 | CONFIG_PROC_FS=y |
575 | CONFIG_PROC_KCORE=y | 666 | CONFIG_PROC_KCORE=y |
576 | CONFIG_SYSFS=y | 667 | CONFIG_SYSFS=y |
577 | CONFIG_DEVFS_FS=y | ||
578 | CONFIG_DEVFS_MOUNT=y | ||
579 | # CONFIG_DEVFS_DEBUG is not set | ||
580 | CONFIG_DEVPTS_FS_XATTR=y | ||
581 | # CONFIG_DEVPTS_FS_SECURITY is not set | ||
582 | CONFIG_TMPFS=y | 668 | CONFIG_TMPFS=y |
583 | # CONFIG_TMPFS_XATTR is not set | ||
584 | # CONFIG_HUGETLBFS is not set | 669 | # CONFIG_HUGETLBFS is not set |
585 | # CONFIG_HUGETLB_PAGE is not set | 670 | # CONFIG_HUGETLB_PAGE is not set |
586 | CONFIG_RAMFS=y | 671 | CONFIG_RAMFS=y |
672 | # CONFIG_RELAYFS_FS is not set | ||
673 | # CONFIG_CONFIGFS_FS is not set | ||
587 | 674 | ||
588 | # | 675 | # |
589 | # Miscellaneous filesystems | 676 | # Miscellaneous filesystems |
@@ -607,12 +694,14 @@ CONFIG_RAMFS=y | |||
607 | # | 694 | # |
608 | CONFIG_NFS_FS=y | 695 | CONFIG_NFS_FS=y |
609 | CONFIG_NFS_V3=y | 696 | CONFIG_NFS_V3=y |
697 | # CONFIG_NFS_V3_ACL is not set | ||
610 | CONFIG_NFS_V4=y | 698 | CONFIG_NFS_V4=y |
611 | # CONFIG_NFS_DIRECTIO is not set | 699 | # CONFIG_NFS_DIRECTIO is not set |
612 | # CONFIG_NFSD is not set | 700 | # CONFIG_NFSD is not set |
613 | CONFIG_ROOT_NFS=y | 701 | CONFIG_ROOT_NFS=y |
614 | CONFIG_LOCKD=y | 702 | CONFIG_LOCKD=y |
615 | CONFIG_LOCKD_V4=y | 703 | CONFIG_LOCKD_V4=y |
704 | CONFIG_NFS_COMMON=y | ||
616 | CONFIG_SUNRPC=y | 705 | CONFIG_SUNRPC=y |
617 | CONFIG_SUNRPC_GSS=y | 706 | CONFIG_SUNRPC_GSS=y |
618 | CONFIG_RPCSEC_GSS_KRB5=y | 707 | CONFIG_RPCSEC_GSS_KRB5=y |
@@ -622,6 +711,7 @@ CONFIG_RPCSEC_GSS_KRB5=y | |||
622 | # CONFIG_NCP_FS is not set | 711 | # CONFIG_NCP_FS is not set |
623 | # CONFIG_CODA_FS is not set | 712 | # CONFIG_CODA_FS is not set |
624 | # CONFIG_AFS_FS is not set | 713 | # CONFIG_AFS_FS is not set |
714 | # CONFIG_9P_FS is not set | ||
625 | 715 | ||
626 | # | 716 | # |
627 | # Partition Types | 717 | # Partition Types |
@@ -681,8 +771,10 @@ CONFIG_NLS_DEFAULT="iso8859-1" | |||
681 | # | 771 | # |
682 | # Kernel hacking | 772 | # Kernel hacking |
683 | # | 773 | # |
774 | # CONFIG_PRINTK_TIME is not set | ||
775 | # CONFIG_MAGIC_SYSRQ is not set | ||
684 | # CONFIG_DEBUG_KERNEL is not set | 776 | # CONFIG_DEBUG_KERNEL is not set |
685 | CONFIG_DEBUG_PREEMPT=y | 777 | CONFIG_LOG_BUF_SHIFT=14 |
686 | # CONFIG_FRAME_POINTER is not set | 778 | # CONFIG_FRAME_POINTER is not set |
687 | # CONFIG_SH_STANDARD_BIOS is not set | 779 | # CONFIG_SH_STANDARD_BIOS is not set |
688 | # CONFIG_EARLY_SCIF_CONSOLE is not set | 780 | # CONFIG_EARLY_SCIF_CONSOLE is not set |
@@ -706,6 +798,7 @@ CONFIG_CRYPTO_MD5=y | |||
706 | # CONFIG_CRYPTO_SHA256 is not set | 798 | # CONFIG_CRYPTO_SHA256 is not set |
707 | # CONFIG_CRYPTO_SHA512 is not set | 799 | # CONFIG_CRYPTO_SHA512 is not set |
708 | # CONFIG_CRYPTO_WP512 is not set | 800 | # CONFIG_CRYPTO_WP512 is not set |
801 | # CONFIG_CRYPTO_TGR192 is not set | ||
709 | CONFIG_CRYPTO_DES=y | 802 | CONFIG_CRYPTO_DES=y |
710 | # CONFIG_CRYPTO_BLOWFISH is not set | 803 | # CONFIG_CRYPTO_BLOWFISH is not set |
711 | # CONFIG_CRYPTO_TWOFISH is not set | 804 | # CONFIG_CRYPTO_TWOFISH is not set |
@@ -730,5 +823,6 @@ CONFIG_CRYPTO_DES=y | |||
730 | # Library routines | 823 | # Library routines |
731 | # | 824 | # |
732 | # CONFIG_CRC_CCITT is not set | 825 | # CONFIG_CRC_CCITT is not set |
826 | # CONFIG_CRC16 is not set | ||
733 | CONFIG_CRC32=y | 827 | CONFIG_CRC32=y |
734 | # CONFIG_LIBCRC32C is not set | 828 | # CONFIG_LIBCRC32C is not set |
diff --git a/arch/sh/kernel/Makefile b/arch/sh/kernel/Makefile index 7a86eeb22655..f05cd96f8867 100644 --- a/arch/sh/kernel/Makefile +++ b/arch/sh/kernel/Makefile | |||
@@ -8,7 +8,7 @@ obj-y := process.o signal.o entry.o traps.o irq.o \ | |||
8 | ptrace.o setup.o time.o sys_sh.o semaphore.o \ | 8 | ptrace.o setup.o time.o sys_sh.o semaphore.o \ |
9 | io.o io_generic.o sh_ksyms.o | 9 | io.o io_generic.o sh_ksyms.o |
10 | 10 | ||
11 | obj-y += cpu/ | 11 | obj-y += cpu/ timers/ |
12 | 12 | ||
13 | obj-$(CONFIG_SMP) += smp.o | 13 | obj-$(CONFIG_SMP) += smp.o |
14 | obj-$(CONFIG_CF_ENABLER) += cf-enabler.o | 14 | obj-$(CONFIG_CF_ENABLER) += cf-enabler.o |
diff --git a/arch/sh/kernel/cpu/Makefile b/arch/sh/kernel/cpu/Makefile index 5bfc33bec5d0..59d5b748752f 100644 --- a/arch/sh/kernel/cpu/Makefile +++ b/arch/sh/kernel/cpu/Makefile | |||
@@ -2,7 +2,7 @@ | |||
2 | # Makefile for the Linux/SuperH CPU-specifc backends. | 2 | # Makefile for the Linux/SuperH CPU-specifc backends. |
3 | # | 3 | # |
4 | 4 | ||
5 | obj-y += irq/ init.o bus.o clock.o | 5 | obj-y += irq/ init.o clock.o |
6 | 6 | ||
7 | obj-$(CONFIG_CPU_SH2) += sh2/ | 7 | obj-$(CONFIG_CPU_SH2) += sh2/ |
8 | obj-$(CONFIG_CPU_SH3) += sh3/ | 8 | obj-$(CONFIG_CPU_SH3) += sh3/ |
diff --git a/arch/sh/kernel/cpu/bus.c b/arch/sh/kernel/cpu/bus.c deleted file mode 100644 index fc6c4bd40c65..000000000000 --- a/arch/sh/kernel/cpu/bus.c +++ /dev/null | |||
@@ -1,197 +0,0 @@ | |||
1 | /* | ||
2 | * arch/sh/kernel/cpu/bus.c | ||
3 | * | ||
4 | * Virtual bus for SuperH. | ||
5 | * | ||
6 | * Copyright (C) 2004 Paul Mundt | ||
7 | * | ||
8 | * Shamelessly cloned from arch/arm/mach-omap/bus.c, which was written | ||
9 | * by: | ||
10 | * | ||
11 | * Copyright (C) 2003 - 2004 Nokia Corporation | ||
12 | * Written by Tony Lindgren <tony@atomide.com> | ||
13 | * Portions of code based on sa1111.c. | ||
14 | * | ||
15 | * This program is free software; you can redistribute it and/or modify it | ||
16 | * under the terms of the GNU General Public License as published by the | ||
17 | * Free Software Foundation; either version 2 of the License, or (at your | ||
18 | * option) any later version. | ||
19 | */ | ||
20 | #include <linux/kernel.h> | ||
21 | #include <linux/device.h> | ||
22 | #include <linux/init.h> | ||
23 | #include <linux/module.h> | ||
24 | #include <asm/bus-sh.h> | ||
25 | |||
26 | static int sh_bus_match(struct device *dev, struct device_driver *drv) | ||
27 | { | ||
28 | struct sh_driver *shdrv = to_sh_driver(drv); | ||
29 | struct sh_dev *shdev = to_sh_dev(dev); | ||
30 | |||
31 | return shdev->dev_id == shdrv->dev_id; | ||
32 | } | ||
33 | |||
34 | static int sh_bus_suspend(struct device *dev, pm_message_t state) | ||
35 | { | ||
36 | struct sh_dev *shdev = to_sh_dev(dev); | ||
37 | struct sh_driver *shdrv = to_sh_driver(dev->driver); | ||
38 | |||
39 | if (shdrv && shdrv->suspend) | ||
40 | return shdrv->suspend(shdev, state); | ||
41 | |||
42 | return 0; | ||
43 | } | ||
44 | |||
45 | static int sh_bus_resume(struct device *dev) | ||
46 | { | ||
47 | struct sh_dev *shdev = to_sh_dev(dev); | ||
48 | struct sh_driver *shdrv = to_sh_driver(dev->driver); | ||
49 | |||
50 | if (shdrv && shdrv->resume) | ||
51 | return shdrv->resume(shdev); | ||
52 | |||
53 | return 0; | ||
54 | } | ||
55 | |||
56 | static int sh_device_probe(struct device *dev) | ||
57 | { | ||
58 | struct sh_dev *shdev = to_sh_dev(dev); | ||
59 | struct sh_driver *shdrv = to_sh_driver(dev->driver); | ||
60 | |||
61 | if (shdrv && shdrv->probe) | ||
62 | return shdrv->probe(shdev); | ||
63 | |||
64 | return -ENODEV; | ||
65 | } | ||
66 | |||
67 | static int sh_device_remove(struct device *dev) | ||
68 | { | ||
69 | struct sh_dev *shdev = to_sh_dev(dev); | ||
70 | struct sh_driver *shdrv = to_sh_driver(dev->driver); | ||
71 | |||
72 | if (shdrv && shdrv->remove) | ||
73 | return shdrv->remove(shdev); | ||
74 | |||
75 | return 0; | ||
76 | } | ||
77 | |||
78 | static struct device sh_bus_devices[SH_NR_BUSES] = { | ||
79 | { | ||
80 | .bus_id = SH_BUS_NAME_VIRT, | ||
81 | }, | ||
82 | }; | ||
83 | |||
84 | struct bus_type sh_bus_types[SH_NR_BUSES] = { | ||
85 | { | ||
86 | .name = SH_BUS_NAME_VIRT, | ||
87 | .match = sh_bus_match, | ||
88 | .probe = sh_bus_probe, | ||
89 | .remove = sh_bus_remove, | ||
90 | .suspend = sh_bus_suspend, | ||
91 | .resume = sh_bus_resume, | ||
92 | }, | ||
93 | }; | ||
94 | |||
95 | int sh_device_register(struct sh_dev *dev) | ||
96 | { | ||
97 | if (!dev) | ||
98 | return -EINVAL; | ||
99 | |||
100 | if (dev->bus_id < 0 || dev->bus_id >= SH_NR_BUSES) { | ||
101 | printk(KERN_ERR "%s: bus_id invalid: %s bus: %d\n", | ||
102 | __FUNCTION__, dev->name, dev->bus_id); | ||
103 | return -EINVAL; | ||
104 | } | ||
105 | |||
106 | dev->dev.parent = &sh_bus_devices[dev->bus_id]; | ||
107 | dev->dev.bus = &sh_bus_types[dev->bus_id]; | ||
108 | |||
109 | /* This is needed for USB OHCI to work */ | ||
110 | if (dev->dma_mask) | ||
111 | dev->dev.dma_mask = dev->dma_mask; | ||
112 | if (dev->coherent_dma_mask) | ||
113 | dev->dev.coherent_dma_mask = dev->coherent_dma_mask; | ||
114 | |||
115 | snprintf(dev->dev.bus_id, BUS_ID_SIZE, "%s%u", | ||
116 | dev->name, dev->dev_id); | ||
117 | |||
118 | printk(KERN_INFO "Registering SH device '%s'. Parent at %s\n", | ||
119 | dev->dev.bus_id, dev->dev.parent->bus_id); | ||
120 | |||
121 | return device_register(&dev->dev); | ||
122 | } | ||
123 | |||
124 | void sh_device_unregister(struct sh_dev *dev) | ||
125 | { | ||
126 | device_unregister(&dev->dev); | ||
127 | } | ||
128 | |||
129 | int sh_driver_register(struct sh_driver *drv) | ||
130 | { | ||
131 | if (!drv) | ||
132 | return -EINVAL; | ||
133 | |||
134 | if (drv->bus_id < 0 || drv->bus_id >= SH_NR_BUSES) { | ||
135 | printk(KERN_ERR "%s: bus_id invalid: bus: %d device %d\n", | ||
136 | __FUNCTION__, drv->bus_id, drv->dev_id); | ||
137 | return -EINVAL; | ||
138 | } | ||
139 | |||
140 | drv->drv.bus = &sh_bus_types[drv->bus_id]; | ||
141 | |||
142 | return driver_register(&drv->drv); | ||
143 | } | ||
144 | |||
145 | void sh_driver_unregister(struct sh_driver *drv) | ||
146 | { | ||
147 | driver_unregister(&drv->drv); | ||
148 | } | ||
149 | |||
150 | static int __init sh_bus_init(void) | ||
151 | { | ||
152 | int i, ret = 0; | ||
153 | |||
154 | for (i = 0; i < SH_NR_BUSES; i++) { | ||
155 | ret = device_register(&sh_bus_devices[i]); | ||
156 | if (ret != 0) { | ||
157 | printk(KERN_ERR "Unable to register bus device %s\n", | ||
158 | sh_bus_devices[i].bus_id); | ||
159 | continue; | ||
160 | } | ||
161 | |||
162 | ret = bus_register(&sh_bus_types[i]); | ||
163 | if (ret != 0) { | ||
164 | printk(KERN_ERR "Unable to register bus %s\n", | ||
165 | sh_bus_types[i].name); | ||
166 | device_unregister(&sh_bus_devices[i]); | ||
167 | } | ||
168 | } | ||
169 | |||
170 | printk(KERN_INFO "SH Virtual Bus initialized\n"); | ||
171 | |||
172 | return ret; | ||
173 | } | ||
174 | |||
175 | static void __exit sh_bus_exit(void) | ||
176 | { | ||
177 | int i; | ||
178 | |||
179 | for (i = 0; i < SH_NR_BUSES; i++) { | ||
180 | bus_unregister(&sh_bus_types[i]); | ||
181 | device_unregister(&sh_bus_devices[i]); | ||
182 | } | ||
183 | } | ||
184 | |||
185 | module_init(sh_bus_init); | ||
186 | module_exit(sh_bus_exit); | ||
187 | |||
188 | MODULE_AUTHOR("Paul Mundt <lethal@linux-sh.org>"); | ||
189 | MODULE_DESCRIPTION("SH Virtual Bus"); | ||
190 | MODULE_LICENSE("GPL"); | ||
191 | |||
192 | EXPORT_SYMBOL(sh_bus_types); | ||
193 | EXPORT_SYMBOL(sh_device_register); | ||
194 | EXPORT_SYMBOL(sh_device_unregister); | ||
195 | EXPORT_SYMBOL(sh_driver_register); | ||
196 | EXPORT_SYMBOL(sh_driver_unregister); | ||
197 | |||
diff --git a/arch/sh/kernel/cpu/clock.c b/arch/sh/kernel/cpu/clock.c index 989e7fdd524d..97fa37f42b84 100644 --- a/arch/sh/kernel/cpu/clock.c +++ b/arch/sh/kernel/cpu/clock.c | |||
@@ -38,9 +38,7 @@ static DECLARE_MUTEX(clock_list_sem); | |||
38 | static struct clk master_clk = { | 38 | static struct clk master_clk = { |
39 | .name = "master_clk", | 39 | .name = "master_clk", |
40 | .flags = CLK_ALWAYS_ENABLED | CLK_RATE_PROPAGATES, | 40 | .flags = CLK_ALWAYS_ENABLED | CLK_RATE_PROPAGATES, |
41 | #ifdef CONFIG_SH_PCLK_FREQ_BOOL | ||
42 | .rate = CONFIG_SH_PCLK_FREQ, | 41 | .rate = CONFIG_SH_PCLK_FREQ, |
43 | #endif | ||
44 | }; | 42 | }; |
45 | 43 | ||
46 | static struct clk module_clk = { | 44 | static struct clk module_clk = { |
@@ -227,16 +225,7 @@ int __init clk_init(void) | |||
227 | { | 225 | { |
228 | int i, ret = 0; | 226 | int i, ret = 0; |
229 | 227 | ||
230 | if (unlikely(!master_clk.rate)) | 228 | BUG_ON(unlikely(!master_clk.rate)); |
231 | /* | ||
232 | * NOTE: This will break if the default divisor has been | ||
233 | * changed. | ||
234 | * | ||
235 | * No one should be changing the default on us however, | ||
236 | * expect that a sane value for CONFIG_SH_PCLK_FREQ will | ||
237 | * be defined in the event of a different divisor. | ||
238 | */ | ||
239 | master_clk.rate = get_timer_frequency() * 4; | ||
240 | 229 | ||
241 | for (i = 0; i < ARRAY_SIZE(onchip_clocks); i++) { | 230 | for (i = 0; i < ARRAY_SIZE(onchip_clocks); i++) { |
242 | struct clk *clk = onchip_clocks[i]; | 231 | struct clk *clk = onchip_clocks[i]; |
diff --git a/arch/sh/kernel/cpu/irq/ipr.c b/arch/sh/kernel/cpu/irq/ipr.c index fdbd718ae5c6..e55150ed0856 100644 --- a/arch/sh/kernel/cpu/irq/ipr.c +++ b/arch/sh/kernel/cpu/irq/ipr.c | |||
@@ -108,8 +108,7 @@ static void end_ipr_irq(unsigned int irq) | |||
108 | enable_ipr_irq(irq); | 108 | enable_ipr_irq(irq); |
109 | } | 109 | } |
110 | 110 | ||
111 | void make_ipr_irq(unsigned int irq, unsigned int addr, int pos, | 111 | void make_ipr_irq(unsigned int irq, unsigned int addr, int pos, int priority) |
112 | int priority, int maskpos) | ||
113 | { | 112 | { |
114 | disable_irq_nosync(irq); | 113 | disable_irq_nosync(irq); |
115 | ipr_data[irq].addr = addr; | 114 | ipr_data[irq].addr = addr; |
@@ -123,44 +122,44 @@ void make_ipr_irq(unsigned int irq, unsigned int addr, int pos, | |||
123 | void __init init_IRQ(void) | 122 | void __init init_IRQ(void) |
124 | { | 123 | { |
125 | #ifndef CONFIG_CPU_SUBTYPE_SH7780 | 124 | #ifndef CONFIG_CPU_SUBTYPE_SH7780 |
126 | make_ipr_irq(TIMER_IRQ, TIMER_IPR_ADDR, TIMER_IPR_POS, TIMER_PRIORITY, 0); | 125 | make_ipr_irq(TIMER_IRQ, TIMER_IPR_ADDR, TIMER_IPR_POS, TIMER_PRIORITY); |
127 | make_ipr_irq(TIMER1_IRQ, TIMER1_IPR_ADDR, TIMER1_IPR_POS, TIMER1_PRIORITY, 0); | 126 | make_ipr_irq(TIMER1_IRQ, TIMER1_IPR_ADDR, TIMER1_IPR_POS, TIMER1_PRIORITY); |
128 | #if defined(CONFIG_SH_RTC) | 127 | #if defined(CONFIG_SH_RTC) |
129 | make_ipr_irq(RTC_IRQ, RTC_IPR_ADDR, RTC_IPR_POS, RTC_PRIORITY, 0); | 128 | make_ipr_irq(RTC_IRQ, RTC_IPR_ADDR, RTC_IPR_POS, RTC_PRIORITY); |
130 | #endif | 129 | #endif |
131 | 130 | ||
132 | #ifdef SCI_ERI_IRQ | 131 | #ifdef SCI_ERI_IRQ |
133 | make_ipr_irq(SCI_ERI_IRQ, SCI_IPR_ADDR, SCI_IPR_POS, SCI_PRIORITY, 0); | 132 | make_ipr_irq(SCI_ERI_IRQ, SCI_IPR_ADDR, SCI_IPR_POS, SCI_PRIORITY); |
134 | make_ipr_irq(SCI_RXI_IRQ, SCI_IPR_ADDR, SCI_IPR_POS, SCI_PRIORITY, 0); | 133 | make_ipr_irq(SCI_RXI_IRQ, SCI_IPR_ADDR, SCI_IPR_POS, SCI_PRIORITY); |
135 | make_ipr_irq(SCI_TXI_IRQ, SCI_IPR_ADDR, SCI_IPR_POS, SCI_PRIORITY, 0); | 134 | make_ipr_irq(SCI_TXI_IRQ, SCI_IPR_ADDR, SCI_IPR_POS, SCI_PRIORITY); |
136 | #endif | 135 | #endif |
137 | 136 | ||
138 | #ifdef SCIF1_ERI_IRQ | 137 | #ifdef SCIF1_ERI_IRQ |
139 | make_ipr_irq(SCIF1_ERI_IRQ, SCIF1_IPR_ADDR, SCIF1_IPR_POS, SCIF1_PRIORITY, 0); | 138 | make_ipr_irq(SCIF1_ERI_IRQ, SCIF1_IPR_ADDR, SCIF1_IPR_POS, SCIF1_PRIORITY); |
140 | make_ipr_irq(SCIF1_RXI_IRQ, SCIF1_IPR_ADDR, SCIF1_IPR_POS, SCIF1_PRIORITY, 0); | 139 | make_ipr_irq(SCIF1_RXI_IRQ, SCIF1_IPR_ADDR, SCIF1_IPR_POS, SCIF1_PRIORITY); |
141 | make_ipr_irq(SCIF1_BRI_IRQ, SCIF1_IPR_ADDR, SCIF1_IPR_POS, SCIF1_PRIORITY, 0); | 140 | make_ipr_irq(SCIF1_BRI_IRQ, SCIF1_IPR_ADDR, SCIF1_IPR_POS, SCIF1_PRIORITY); |
142 | make_ipr_irq(SCIF1_TXI_IRQ, SCIF1_IPR_ADDR, SCIF1_IPR_POS, SCIF1_PRIORITY, 0); | 141 | make_ipr_irq(SCIF1_TXI_IRQ, SCIF1_IPR_ADDR, SCIF1_IPR_POS, SCIF1_PRIORITY); |
143 | #endif | 142 | #endif |
144 | 143 | ||
145 | #if defined(CONFIG_CPU_SUBTYPE_SH7300) | 144 | #if defined(CONFIG_CPU_SUBTYPE_SH7300) |
146 | make_ipr_irq(SCIF0_IRQ, SCIF0_IPR_ADDR, SCIF0_IPR_POS, SCIF0_PRIORITY, 0); | 145 | make_ipr_irq(SCIF0_IRQ, SCIF0_IPR_ADDR, SCIF0_IPR_POS, SCIF0_PRIORITY); |
147 | make_ipr_irq(DMTE2_IRQ, DMA1_IPR_ADDR, DMA1_IPR_POS, DMA1_PRIORITY, 0); | 146 | make_ipr_irq(DMTE2_IRQ, DMA1_IPR_ADDR, DMA1_IPR_POS, DMA1_PRIORITY); |
148 | make_ipr_irq(DMTE3_IRQ, DMA1_IPR_ADDR, DMA1_IPR_POS, DMA1_PRIORITY, 0); | 147 | make_ipr_irq(DMTE3_IRQ, DMA1_IPR_ADDR, DMA1_IPR_POS, DMA1_PRIORITY); |
149 | make_ipr_irq(VIO_IRQ, VIO_IPR_ADDR, VIO_IPR_POS, VIO_PRIORITY, 0); | 148 | make_ipr_irq(VIO_IRQ, VIO_IPR_ADDR, VIO_IPR_POS, VIO_PRIORITY); |
150 | #endif | 149 | #endif |
151 | 150 | ||
152 | #ifdef SCIF_ERI_IRQ | 151 | #ifdef SCIF_ERI_IRQ |
153 | make_ipr_irq(SCIF_ERI_IRQ, SCIF_IPR_ADDR, SCIF_IPR_POS, SCIF_PRIORITY, 0); | 152 | make_ipr_irq(SCIF_ERI_IRQ, SCIF_IPR_ADDR, SCIF_IPR_POS, SCIF_PRIORITY); |
154 | make_ipr_irq(SCIF_RXI_IRQ, SCIF_IPR_ADDR, SCIF_IPR_POS, SCIF_PRIORITY, 0); | 153 | make_ipr_irq(SCIF_RXI_IRQ, SCIF_IPR_ADDR, SCIF_IPR_POS, SCIF_PRIORITY); |
155 | make_ipr_irq(SCIF_BRI_IRQ, SCIF_IPR_ADDR, SCIF_IPR_POS, SCIF_PRIORITY, 0); | 154 | make_ipr_irq(SCIF_BRI_IRQ, SCIF_IPR_ADDR, SCIF_IPR_POS, SCIF_PRIORITY); |
156 | make_ipr_irq(SCIF_TXI_IRQ, SCIF_IPR_ADDR, SCIF_IPR_POS, SCIF_PRIORITY, 0); | 155 | make_ipr_irq(SCIF_TXI_IRQ, SCIF_IPR_ADDR, SCIF_IPR_POS, SCIF_PRIORITY); |
157 | #endif | 156 | #endif |
158 | 157 | ||
159 | #ifdef IRDA_ERI_IRQ | 158 | #ifdef IRDA_ERI_IRQ |
160 | make_ipr_irq(IRDA_ERI_IRQ, IRDA_IPR_ADDR, IRDA_IPR_POS, IRDA_PRIORITY, 0); | 159 | make_ipr_irq(IRDA_ERI_IRQ, IRDA_IPR_ADDR, IRDA_IPR_POS, IRDA_PRIORITY); |
161 | make_ipr_irq(IRDA_RXI_IRQ, IRDA_IPR_ADDR, IRDA_IPR_POS, IRDA_PRIORITY, 0); | 160 | make_ipr_irq(IRDA_RXI_IRQ, IRDA_IPR_ADDR, IRDA_IPR_POS, IRDA_PRIORITY); |
162 | make_ipr_irq(IRDA_BRI_IRQ, IRDA_IPR_ADDR, IRDA_IPR_POS, IRDA_PRIORITY, 0); | 161 | make_ipr_irq(IRDA_BRI_IRQ, IRDA_IPR_ADDR, IRDA_IPR_POS, IRDA_PRIORITY); |
163 | make_ipr_irq(IRDA_TXI_IRQ, IRDA_IPR_ADDR, IRDA_IPR_POS, IRDA_PRIORITY, 0); | 162 | make_ipr_irq(IRDA_TXI_IRQ, IRDA_IPR_ADDR, IRDA_IPR_POS, IRDA_PRIORITY); |
164 | #endif | 163 | #endif |
165 | 164 | ||
166 | #if defined(CONFIG_CPU_SUBTYPE_SH7707) || defined(CONFIG_CPU_SUBTYPE_SH7709) || \ | 165 | #if defined(CONFIG_CPU_SUBTYPE_SH7707) || defined(CONFIG_CPU_SUBTYPE_SH7709) || \ |
@@ -175,12 +174,12 @@ void __init init_IRQ(void) | |||
175 | * You should set corresponding bits of PFC to "00" | 174 | * You should set corresponding bits of PFC to "00" |
176 | * to enable these interrupts. | 175 | * to enable these interrupts. |
177 | */ | 176 | */ |
178 | make_ipr_irq(IRQ0_IRQ, IRQ0_IPR_ADDR, IRQ0_IPR_POS, IRQ0_PRIORITY, 0); | 177 | make_ipr_irq(IRQ0_IRQ, IRQ0_IPR_ADDR, IRQ0_IPR_POS, IRQ0_PRIORITY); |
179 | make_ipr_irq(IRQ1_IRQ, IRQ1_IPR_ADDR, IRQ1_IPR_POS, IRQ1_PRIORITY, 0); | 178 | make_ipr_irq(IRQ1_IRQ, IRQ1_IPR_ADDR, IRQ1_IPR_POS, IRQ1_PRIORITY); |
180 | make_ipr_irq(IRQ2_IRQ, IRQ2_IPR_ADDR, IRQ2_IPR_POS, IRQ2_PRIORITY, 0); | 179 | make_ipr_irq(IRQ2_IRQ, IRQ2_IPR_ADDR, IRQ2_IPR_POS, IRQ2_PRIORITY); |
181 | make_ipr_irq(IRQ3_IRQ, IRQ3_IPR_ADDR, IRQ3_IPR_POS, IRQ3_PRIORITY, 0); | 180 | make_ipr_irq(IRQ3_IRQ, IRQ3_IPR_ADDR, IRQ3_IPR_POS, IRQ3_PRIORITY); |
182 | make_ipr_irq(IRQ4_IRQ, IRQ4_IPR_ADDR, IRQ4_IPR_POS, IRQ4_PRIORITY, 0); | 181 | make_ipr_irq(IRQ4_IRQ, IRQ4_IPR_ADDR, IRQ4_IPR_POS, IRQ4_PRIORITY); |
183 | make_ipr_irq(IRQ5_IRQ, IRQ5_IPR_ADDR, IRQ5_IPR_POS, IRQ5_PRIORITY, 0); | 182 | make_ipr_irq(IRQ5_IRQ, IRQ5_IPR_ADDR, IRQ5_IPR_POS, IRQ5_PRIORITY); |
184 | #endif | 183 | #endif |
185 | #endif | 184 | #endif |
186 | 185 | ||
diff --git a/arch/sh/kernel/entry.S b/arch/sh/kernel/entry.S index fb6368159dd0..a440d36ee618 100644 --- a/arch/sh/kernel/entry.S +++ b/arch/sh/kernel/entry.S | |||
@@ -16,6 +16,7 @@ | |||
16 | #include <linux/config.h> | 16 | #include <linux/config.h> |
17 | #include <asm/asm-offsets.h> | 17 | #include <asm/asm-offsets.h> |
18 | #include <asm/thread_info.h> | 18 | #include <asm/thread_info.h> |
19 | #include <asm/cpu/mmu_context.h> | ||
19 | #include <asm/unistd.h> | 20 | #include <asm/unistd.h> |
20 | 21 | ||
21 | #if !defined(CONFIG_NFSD) && !defined(CONFIG_NFSD_MODULE) | 22 | #if !defined(CONFIG_NFSD) && !defined(CONFIG_NFSD_MODULE) |
@@ -75,23 +76,6 @@ | |||
75 | ENOSYS = 38 | 76 | ENOSYS = 38 |
76 | EINVAL = 22 | 77 | EINVAL = 22 |
77 | 78 | ||
78 | #if defined(CONFIG_CPU_SH3) | ||
79 | TRA = 0xffffffd0 | ||
80 | EXPEVT = 0xffffffd4 | ||
81 | #if defined(CONFIG_CPU_SUBTYPE_SH7707) || defined(CONFIG_CPU_SUBTYPE_SH7709) || \ | ||
82 | defined(CONFIG_CPU_SUBTYPE_SH7300) || defined(CONFIG_CPU_SUBTYPE_SH7705) | ||
83 | INTEVT = 0xa4000000 ! INTEVTE2(0xa4000000) | ||
84 | #else | ||
85 | INTEVT = 0xffffffd8 | ||
86 | #endif | ||
87 | MMU_TEA = 0xfffffffc ! TLB Exception Address Register | ||
88 | #elif defined(CONFIG_CPU_SH4) | ||
89 | TRA = 0xff000020 | ||
90 | EXPEVT = 0xff000024 | ||
91 | INTEVT = 0xff000028 | ||
92 | MMU_TEA = 0xff00000c ! TLB Exception Address Register | ||
93 | #endif | ||
94 | |||
95 | #if defined(CONFIG_KGDB_NMI) | 79 | #if defined(CONFIG_KGDB_NMI) |
96 | NMI_VEC = 0x1c0 ! Must catch early for debounce | 80 | NMI_VEC = 0x1c0 ! Must catch early for debounce |
97 | #endif | 81 | #endif |
diff --git a/arch/sh/kernel/process.c b/arch/sh/kernel/process.c index a4dc2b532e10..9fd1723e6219 100644 --- a/arch/sh/kernel/process.c +++ b/arch/sh/kernel/process.c | |||
@@ -15,21 +15,18 @@ | |||
15 | #include <linux/unistd.h> | 15 | #include <linux/unistd.h> |
16 | #include <linux/mm.h> | 16 | #include <linux/mm.h> |
17 | #include <linux/elfcore.h> | 17 | #include <linux/elfcore.h> |
18 | #include <linux/slab.h> | ||
19 | #include <linux/a.out.h> | 18 | #include <linux/a.out.h> |
19 | #include <linux/slab.h> | ||
20 | #include <linux/pm.h> | ||
20 | #include <linux/ptrace.h> | 21 | #include <linux/ptrace.h> |
21 | #include <linux/platform.h> | 22 | #include <linux/platform.h> |
22 | #include <linux/kallsyms.h> | 23 | #include <linux/kallsyms.h> |
24 | #include <linux/kexec.h> | ||
23 | 25 | ||
24 | #include <asm/io.h> | 26 | #include <asm/io.h> |
25 | #include <asm/uaccess.h> | 27 | #include <asm/uaccess.h> |
26 | #include <asm/mmu_context.h> | 28 | #include <asm/mmu_context.h> |
27 | #include <asm/elf.h> | 29 | #include <asm/elf.h> |
28 | #if defined(CONFIG_SH_HS7751RVOIP) | ||
29 | #include <asm/hs7751rvoip/hs7751rvoip.h> | ||
30 | #elif defined(CONFIG_SH_RTS7751R2D) | ||
31 | #include <asm/rts7751r2d/rts7751r2d.h> | ||
32 | #endif | ||
33 | 30 | ||
34 | static int hlt_counter=0; | 31 | static int hlt_counter=0; |
35 | 32 | ||
@@ -37,6 +34,11 @@ int ubc_usercnt = 0; | |||
37 | 34 | ||
38 | #define HARD_IDLE_TIMEOUT (HZ / 3) | 35 | #define HARD_IDLE_TIMEOUT (HZ / 3) |
39 | 36 | ||
37 | void (*pm_idle)(void); | ||
38 | |||
39 | void (*pm_power_off)(void); | ||
40 | EXPORT_SYMBOL(pm_power_off); | ||
41 | |||
40 | void disable_hlt(void) | 42 | void disable_hlt(void) |
41 | { | 43 | { |
42 | hlt_counter++; | 44 | hlt_counter++; |
@@ -51,17 +53,25 @@ void enable_hlt(void) | |||
51 | 53 | ||
52 | EXPORT_SYMBOL(enable_hlt); | 54 | EXPORT_SYMBOL(enable_hlt); |
53 | 55 | ||
56 | void default_idle(void) | ||
57 | { | ||
58 | if (!hlt_counter) | ||
59 | cpu_sleep(); | ||
60 | else | ||
61 | cpu_relax(); | ||
62 | } | ||
63 | |||
54 | void cpu_idle(void) | 64 | void cpu_idle(void) |
55 | { | 65 | { |
56 | /* endless idle loop with no priority at all */ | 66 | /* endless idle loop with no priority at all */ |
57 | while (1) { | 67 | while (1) { |
58 | if (hlt_counter) { | 68 | void (*idle)(void) = pm_idle; |
59 | while (!need_resched()) | 69 | |
60 | cpu_relax(); | 70 | if (!idle) |
61 | } else { | 71 | idle = default_idle; |
62 | while (!need_resched()) | 72 | |
63 | cpu_sleep(); | 73 | while (!need_resched()) |
64 | } | 74 | idle(); |
65 | 75 | ||
66 | preempt_enable_no_resched(); | 76 | preempt_enable_no_resched(); |
67 | schedule(); | 77 | schedule(); |
@@ -88,28 +98,16 @@ void machine_restart(char * __unused) | |||
88 | 98 | ||
89 | void machine_halt(void) | 99 | void machine_halt(void) |
90 | { | 100 | { |
91 | #if defined(CONFIG_SH_HS7751RVOIP) | 101 | local_irq_disable(); |
92 | unsigned short value; | ||
93 | 102 | ||
94 | value = ctrl_inw(PA_OUTPORTR); | ||
95 | ctrl_outw((value & 0xffdf), PA_OUTPORTR); | ||
96 | #elif defined(CONFIG_SH_RTS7751R2D) | ||
97 | ctrl_outw(0x0001, PA_POWOFF); | ||
98 | #endif | ||
99 | while (1) | 103 | while (1) |
100 | cpu_sleep(); | 104 | cpu_sleep(); |
101 | } | 105 | } |
102 | 106 | ||
103 | void machine_power_off(void) | 107 | void machine_power_off(void) |
104 | { | 108 | { |
105 | #if defined(CONFIG_SH_HS7751RVOIP) | 109 | if (pm_power_off) |
106 | unsigned short value; | 110 | pm_power_off(); |
107 | |||
108 | value = ctrl_inw(PA_OUTPORTR); | ||
109 | ctrl_outw((value & 0xffdf), PA_OUTPORTR); | ||
110 | #elif defined(CONFIG_SH_RTS7751R2D) | ||
111 | ctrl_outw(0x0001, PA_POWOFF); | ||
112 | #endif | ||
113 | } | 111 | } |
114 | 112 | ||
115 | void show_regs(struct pt_regs * regs) | 113 | void show_regs(struct pt_regs * regs) |
diff --git a/arch/sh/kernel/setup.c b/arch/sh/kernel/setup.c index 036050b377cd..a067a34e0b64 100644 --- a/arch/sh/kernel/setup.c +++ b/arch/sh/kernel/setup.c | |||
@@ -22,10 +22,10 @@ | |||
22 | #include <linux/cpu.h> | 22 | #include <linux/cpu.h> |
23 | #include <asm/uaccess.h> | 23 | #include <asm/uaccess.h> |
24 | #include <asm/io.h> | 24 | #include <asm/io.h> |
25 | #include <asm/io_generic.h> | ||
26 | #include <asm/sections.h> | 25 | #include <asm/sections.h> |
27 | #include <asm/irq.h> | 26 | #include <asm/irq.h> |
28 | #include <asm/setup.h> | 27 | #include <asm/setup.h> |
28 | #include <asm/clock.h> | ||
29 | 29 | ||
30 | #ifdef CONFIG_SH_KGDB | 30 | #ifdef CONFIG_SH_KGDB |
31 | #include <asm/kgdb.h> | 31 | #include <asm/kgdb.h> |
@@ -41,7 +41,7 @@ extern void * __rd_start, * __rd_end; | |||
41 | * This value will be used at the very early stage of serial setup. | 41 | * This value will be used at the very early stage of serial setup. |
42 | * The bigger value means no problem. | 42 | * The bigger value means no problem. |
43 | */ | 43 | */ |
44 | struct sh_cpuinfo boot_cpu_data = { CPU_SH_NONE, 0, 10000000, }; | 44 | struct sh_cpuinfo boot_cpu_data = { CPU_SH_NONE, 10000000, }; |
45 | struct screen_info screen_info; | 45 | struct screen_info screen_info; |
46 | 46 | ||
47 | #if defined(CONFIG_SH_UNKNOWN) | 47 | #if defined(CONFIG_SH_UNKNOWN) |
@@ -186,7 +186,7 @@ static inline void parse_cmdline (char ** cmdline_p, char mv_name[MV_NAME_SIZE], | |||
186 | 186 | ||
187 | static int __init sh_mv_setup(char **cmdline_p) | 187 | static int __init sh_mv_setup(char **cmdline_p) |
188 | { | 188 | { |
189 | #if defined(CONFIG_SH_UNKNOWN) | 189 | #ifdef CONFIG_SH_UNKNOWN |
190 | extern struct sh_machine_vector mv_unknown; | 190 | extern struct sh_machine_vector mv_unknown; |
191 | #endif | 191 | #endif |
192 | struct sh_machine_vector *mv = NULL; | 192 | struct sh_machine_vector *mv = NULL; |
@@ -196,7 +196,7 @@ static int __init sh_mv_setup(char **cmdline_p) | |||
196 | 196 | ||
197 | parse_cmdline(cmdline_p, mv_name, &mv, &mv_io_base, &mv_mmio_enable); | 197 | parse_cmdline(cmdline_p, mv_name, &mv, &mv_io_base, &mv_mmio_enable); |
198 | 198 | ||
199 | #ifdef CONFIG_SH_GENERIC | 199 | #ifdef CONFIG_SH_UNKNOWN |
200 | if (mv == NULL) { | 200 | if (mv == NULL) { |
201 | mv = &mv_unknown; | 201 | mv = &mv_unknown; |
202 | if (*mv_name != '\0') { | 202 | if (*mv_name != '\0') { |
@@ -206,9 +206,6 @@ static int __init sh_mv_setup(char **cmdline_p) | |||
206 | } | 206 | } |
207 | sh_mv = *mv; | 207 | sh_mv = *mv; |
208 | #endif | 208 | #endif |
209 | #ifdef CONFIG_SH_UNKNOWN | ||
210 | sh_mv = mv_unknown; | ||
211 | #endif | ||
212 | 209 | ||
213 | /* | 210 | /* |
214 | * Manually walk the vec, fill in anything that the board hasn't yet | 211 | * Manually walk the vec, fill in anything that the board hasn't yet |
@@ -231,10 +228,8 @@ static int __init sh_mv_setup(char **cmdline_p) | |||
231 | mv_set(readb); mv_set(readw); mv_set(readl); | 228 | mv_set(readb); mv_set(readw); mv_set(readl); |
232 | mv_set(writeb); mv_set(writew); mv_set(writel); | 229 | mv_set(writeb); mv_set(writew); mv_set(writel); |
233 | 230 | ||
234 | mv_set(ioremap); | 231 | mv_set(ioport_map); |
235 | mv_set(iounmap); | 232 | mv_set(ioport_unmap); |
236 | |||
237 | mv_set(isa_port2addr); | ||
238 | mv_set(irq_demux); | 233 | mv_set(irq_demux); |
239 | 234 | ||
240 | #ifdef CONFIG_SH_UNKNOWN | 235 | #ifdef CONFIG_SH_UNKNOWN |
@@ -273,10 +268,10 @@ void __init setup_arch(char **cmdline_p) | |||
273 | init_mm.end_data = (unsigned long) _edata; | 268 | init_mm.end_data = (unsigned long) _edata; |
274 | init_mm.brk = (unsigned long) _end; | 269 | init_mm.brk = (unsigned long) _end; |
275 | 270 | ||
276 | code_resource.start = virt_to_bus(_text); | 271 | code_resource.start = (unsigned long)virt_to_phys(_text); |
277 | code_resource.end = virt_to_bus(_etext)-1; | 272 | code_resource.end = (unsigned long)virt_to_phys(_etext)-1; |
278 | data_resource.start = virt_to_bus(_etext); | 273 | data_resource.start = (unsigned long)virt_to_phys(_etext); |
279 | data_resource.end = virt_to_bus(_edata)-1; | 274 | data_resource.end = (unsigned long)virt_to_phys(_edata)-1; |
280 | 275 | ||
281 | sh_mv_setup(cmdline_p); | 276 | sh_mv_setup(cmdline_p); |
282 | 277 | ||
@@ -435,6 +430,9 @@ static const char *cpu_name[] = { | |||
435 | [CPU_ST40GX1] = "ST40GX1", | 430 | [CPU_ST40GX1] = "ST40GX1", |
436 | [CPU_SH4_202] = "SH4-202", | 431 | [CPU_SH4_202] = "SH4-202", |
437 | [CPU_SH4_501] = "SH4-501", | 432 | [CPU_SH4_501] = "SH4-501", |
433 | [CPU_SH7770] = "SH7770", | ||
434 | [CPU_SH7780] = "SH7780", | ||
435 | [CPU_SH7781] = "SH7781", | ||
438 | [CPU_SH_NONE] = "Unknown" | 436 | [CPU_SH_NONE] = "Unknown" |
439 | }; | 437 | }; |
440 | 438 | ||
@@ -445,7 +443,7 @@ const char *get_cpu_subtype(void) | |||
445 | 443 | ||
446 | #ifdef CONFIG_PROC_FS | 444 | #ifdef CONFIG_PROC_FS |
447 | static const char *cpu_flags[] = { | 445 | static const char *cpu_flags[] = { |
448 | "none", "fpu", "p2flush", "mmuassoc", "dsp", "perfctr", | 446 | "none", "fpu", "p2flush", "mmuassoc", "dsp", "perfctr", "ptea", NULL |
449 | }; | 447 | }; |
450 | 448 | ||
451 | static void show_cpuflags(struct seq_file *m) | 449 | static void show_cpuflags(struct seq_file *m) |
@@ -459,7 +457,7 @@ static void show_cpuflags(struct seq_file *m) | |||
459 | return; | 457 | return; |
460 | } | 458 | } |
461 | 459 | ||
462 | for (i = 0; i < cpu_data->flags; i++) | 460 | for (i = 0; cpu_flags[i]; i++) |
463 | if ((cpu_data->flags & (1 << i))) | 461 | if ((cpu_data->flags & (1 << i))) |
464 | seq_printf(m, " %s", cpu_flags[i+1]); | 462 | seq_printf(m, " %s", cpu_flags[i+1]); |
465 | 463 | ||
@@ -472,7 +470,8 @@ static void show_cacheinfo(struct seq_file *m, const char *type, struct cache_in | |||
472 | 470 | ||
473 | cache_size = info.ways * info.sets * info.linesz; | 471 | cache_size = info.ways * info.sets * info.linesz; |
474 | 472 | ||
475 | seq_printf(m, "%s size\t: %dKiB\n", type, cache_size >> 10); | 473 | seq_printf(m, "%s size\t: %2dKiB (%d-way)\n", |
474 | type, cache_size >> 10, info.ways); | ||
476 | } | 475 | } |
477 | 476 | ||
478 | /* | 477 | /* |
@@ -511,21 +510,9 @@ static int show_cpuinfo(struct seq_file *m, void *v) | |||
511 | boot_cpu_data.loops_per_jiffy/(500000/HZ), | 510 | boot_cpu_data.loops_per_jiffy/(500000/HZ), |
512 | (boot_cpu_data.loops_per_jiffy/(5000/HZ)) % 100); | 511 | (boot_cpu_data.loops_per_jiffy/(5000/HZ)) % 100); |
513 | 512 | ||
514 | #define PRINT_CLOCK(name, value) \ | 513 | return show_clocks(m); |
515 | seq_printf(m, name " clock\t: %d.%02dMHz\n", \ | ||
516 | ((value) / 1000000), ((value) % 1000000)/10000) | ||
517 | |||
518 | PRINT_CLOCK("cpu", boot_cpu_data.cpu_clock); | ||
519 | PRINT_CLOCK("bus", boot_cpu_data.bus_clock); | ||
520 | #ifdef CONFIG_CPU_SUBTYPE_ST40STB1 | ||
521 | PRINT_CLOCK("memory", boot_cpu_data.memory_clock); | ||
522 | #endif | ||
523 | PRINT_CLOCK("module", boot_cpu_data.module_clock); | ||
524 | |||
525 | return 0; | ||
526 | } | 514 | } |
527 | 515 | ||
528 | |||
529 | static void *c_start(struct seq_file *m, loff_t *pos) | 516 | static void *c_start(struct seq_file *m, loff_t *pos) |
530 | { | 517 | { |
531 | return *pos < NR_CPUS ? cpu_data + *pos : NULL; | 518 | return *pos < NR_CPUS ? cpu_data + *pos : NULL; |
@@ -596,7 +583,7 @@ static int __init kgdb_parse_options(char *options) | |||
596 | options += map->namelen + 1; | 583 | options += map->namelen + 1; |
597 | 584 | ||
598 | options = (*options == ',') ? options+1 : options; | 585 | options = (*options == ',') ? options+1 : options; |
599 | 586 | ||
600 | /* Read optional parameters (baud/parity/bits) */ | 587 | /* Read optional parameters (baud/parity/bits) */ |
601 | baud = simple_strtoul(options, &options, 10); | 588 | baud = simple_strtoul(options, &options, 10); |
602 | if (baud != 0) { | 589 | if (baud != 0) { |
diff --git a/arch/sh64/kernel/sh_ksyms.c b/arch/sh64/kernel/sh_ksyms.c index 472b450e61be..de29c45f23a7 100644 --- a/arch/sh64/kernel/sh_ksyms.c +++ b/arch/sh64/kernel/sh_ksyms.c | |||
@@ -31,14 +31,6 @@ | |||
31 | 31 | ||
32 | extern int dump_fpu(struct pt_regs *, elf_fpregset_t *); | 32 | extern int dump_fpu(struct pt_regs *, elf_fpregset_t *); |
33 | 33 | ||
34 | #if 0 | ||
35 | /* Not yet - there's no declaration of drive_info anywhere. */ | ||
36 | #if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_HD) || defined(CONFIG_BLK_DEV_IDE_MODULE) || defined(CONFIG_BLK_DEV_HD_MODULE) | ||
37 | extern struct drive_info_struct drive_info; | ||
38 | EXPORT_SYMBOL(drive_info); | ||
39 | #endif | ||
40 | #endif | ||
41 | |||
42 | /* platform dependent support */ | 34 | /* platform dependent support */ |
43 | EXPORT_SYMBOL(dump_fpu); | 35 | EXPORT_SYMBOL(dump_fpu); |
44 | EXPORT_SYMBOL(iounmap); | 36 | EXPORT_SYMBOL(iounmap); |
diff --git a/arch/sh64/kernel/time.c b/arch/sh64/kernel/time.c index 1195af37ee5a..0773c9f389f3 100644 --- a/arch/sh64/kernel/time.c +++ b/arch/sh64/kernel/time.c | |||
@@ -29,6 +29,7 @@ | |||
29 | #include <linux/init.h> | 29 | #include <linux/init.h> |
30 | #include <linux/profile.h> | 30 | #include <linux/profile.h> |
31 | #include <linux/smp.h> | 31 | #include <linux/smp.h> |
32 | #include <linux/module.h> | ||
32 | 33 | ||
33 | #include <asm/registers.h> /* required by inline __asm__ stmt. */ | 34 | #include <asm/registers.h> /* required by inline __asm__ stmt. */ |
34 | 35 | ||
diff --git a/arch/sparc/kernel/entry.S b/arch/sparc/kernel/entry.S index c51d08d218ef..887f6a160c58 100644 --- a/arch/sparc/kernel/entry.S +++ b/arch/sparc/kernel/entry.S | |||
@@ -38,7 +38,7 @@ | |||
38 | 38 | ||
39 | #define curptr g6 | 39 | #define curptr g6 |
40 | 40 | ||
41 | #define NR_SYSCALLS 284 /* Each OS is different... */ | 41 | #define NR_SYSCALLS 300 /* Each OS is different... */ |
42 | 42 | ||
43 | /* These are just handy. */ | 43 | /* These are just handy. */ |
44 | #define _SV save %sp, -STACKFRAME_SZ, %sp | 44 | #define _SV save %sp, -STACKFRAME_SZ, %sp |
diff --git a/arch/sparc/kernel/process.c b/arch/sparc/kernel/process.c index fbb05a452e51..118cac84a0f5 100644 --- a/arch/sparc/kernel/process.c +++ b/arch/sparc/kernel/process.c | |||
@@ -54,7 +54,7 @@ void (*pm_idle)(void); | |||
54 | * This is done via auxio, but could be used as a fallback | 54 | * This is done via auxio, but could be used as a fallback |
55 | * handler when auxio is not present-- unused for now... | 55 | * handler when auxio is not present-- unused for now... |
56 | */ | 56 | */ |
57 | void (*pm_power_off)(void); | 57 | void (*pm_power_off)(void) = machine_power_off; |
58 | 58 | ||
59 | /* | 59 | /* |
60 | * sysctl - toggle power-off restriction for serial console | 60 | * sysctl - toggle power-off restriction for serial console |
diff --git a/arch/sparc/kernel/systbls.S b/arch/sparc/kernel/systbls.S index 6877ae4cd1d9..768de64b371f 100644 --- a/arch/sparc/kernel/systbls.S +++ b/arch/sparc/kernel/systbls.S | |||
@@ -76,9 +76,9 @@ sys_call_table: | |||
76 | /*270*/ .long sys_io_submit, sys_io_cancel, sys_io_getevents, sys_mq_open, sys_mq_unlink | 76 | /*270*/ .long sys_io_submit, sys_io_cancel, sys_io_getevents, sys_mq_open, sys_mq_unlink |
77 | /*275*/ .long sys_mq_timedsend, sys_mq_timedreceive, sys_mq_notify, sys_mq_getsetattr, sys_waitid | 77 | /*275*/ .long sys_mq_timedsend, sys_mq_timedreceive, sys_mq_notify, sys_mq_getsetattr, sys_waitid |
78 | /*280*/ .long sys_ni_syscall, sys_add_key, sys_request_key, sys_keyctl, sys_openat | 78 | /*280*/ .long sys_ni_syscall, sys_add_key, sys_request_key, sys_keyctl, sys_openat |
79 | /*285*/ .long sys_mkdirat, sys_mknodat, sys_fchownat, sys_futimesat, sys_newfstatat | 79 | /*285*/ .long sys_mkdirat, sys_mknodat, sys_fchownat, sys_futimesat, sys_fstatat64 |
80 | /*290*/ .long sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat | 80 | /*290*/ .long sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat |
81 | /*295*/ .long sys_fchmodat, sys_faccessat, sys_pselect6, sys_ppoll | 81 | /*295*/ .long sys_fchmodat, sys_faccessat, sys_pselect6, sys_ppoll, sys_unshare |
82 | 82 | ||
83 | #ifdef CONFIG_SUNOS_EMUL | 83 | #ifdef CONFIG_SUNOS_EMUL |
84 | /* Now the SunOS syscall table. */ | 84 | /* Now the SunOS syscall table. */ |
@@ -190,5 +190,6 @@ sunos_sys_table: | |||
190 | /*290*/ .long sunos_nosys, sunos_nosys, sunos_nosys | 190 | /*290*/ .long sunos_nosys, sunos_nosys, sunos_nosys |
191 | .long sunos_nosys, sunos_nosys, sunos_nosys | 191 | .long sunos_nosys, sunos_nosys, sunos_nosys |
192 | .long sunos_nosys, sunos_nosys, sunos_nosys | 192 | .long sunos_nosys, sunos_nosys, sunos_nosys |
193 | .long sunos_nosys | ||
193 | 194 | ||
194 | #endif | 195 | #endif |
diff --git a/arch/sparc/math-emu/math.c b/arch/sparc/math-emu/math.c index be2c80932e26..8613b3eb877c 100644 --- a/arch/sparc/math-emu/math.c +++ b/arch/sparc/math-emu/math.c | |||
@@ -323,11 +323,6 @@ static int do_one_mathemu(u32 insn, unsigned long *pfsr, unsigned long *fregs) | |||
323 | case FMOVS: | 323 | case FMOVS: |
324 | case FABSS: | 324 | case FABSS: |
325 | case FNEGS: TYPE(2,1,0,1,0,0,0); break; | 325 | case FNEGS: TYPE(2,1,0,1,0,0,0); break; |
326 | default: | ||
327 | #ifdef DEBUG_MATHEMU | ||
328 | printk("unknown FPop1: %03lx\n",(insn>>5)&0x1ff); | ||
329 | #endif | ||
330 | break; | ||
331 | } | 326 | } |
332 | } else if ((insn & 0xc1f80000) == 0x81a80000) /* FPOP2 */ { | 327 | } else if ((insn & 0xc1f80000) == 0x81a80000) /* FPOP2 */ { |
333 | switch ((insn >> 5) & 0x1ff) { | 328 | switch ((insn >> 5) & 0x1ff) { |
@@ -337,11 +332,6 @@ static int do_one_mathemu(u32 insn, unsigned long *pfsr, unsigned long *fregs) | |||
337 | case FCMPED: TYPE(3,0,0,2,1,2,1); break; | 332 | case FCMPED: TYPE(3,0,0,2,1,2,1); break; |
338 | case FCMPQ: TYPE(3,0,0,3,1,3,1); break; | 333 | case FCMPQ: TYPE(3,0,0,3,1,3,1); break; |
339 | case FCMPEQ: TYPE(3,0,0,3,1,3,1); break; | 334 | case FCMPEQ: TYPE(3,0,0,3,1,3,1); break; |
340 | default: | ||
341 | #ifdef DEBUG_MATHEMU | ||
342 | printk("unknown FPop2: %03lx\n",(insn>>5)&0x1ff); | ||
343 | #endif | ||
344 | break; | ||
345 | } | 335 | } |
346 | } | 336 | } |
347 | 337 | ||
diff --git a/arch/sparc64/Kconfig b/arch/sparc64/Kconfig index ab733be9af08..4c0a50a76554 100644 --- a/arch/sparc64/Kconfig +++ b/arch/sparc64/Kconfig | |||
@@ -383,6 +383,7 @@ source "arch/sparc64/oprofile/Kconfig" | |||
383 | 383 | ||
384 | config KPROBES | 384 | config KPROBES |
385 | bool "Kprobes (EXPERIMENTAL)" | 385 | bool "Kprobes (EXPERIMENTAL)" |
386 | depends on EXPERIMENTAL && MODULES | ||
386 | help | 387 | help |
387 | Kprobes allows you to trap at almost any kernel address and | 388 | Kprobes allows you to trap at almost any kernel address and |
388 | execute a callback function. register_kprobe() establishes | 389 | execute a callback function. register_kprobe() establishes |
diff --git a/arch/sparc64/boot/.gitignore b/arch/sparc64/boot/.gitignore new file mode 100644 index 000000000000..36356f9d498e --- /dev/null +++ b/arch/sparc64/boot/.gitignore | |||
@@ -0,0 +1,4 @@ | |||
1 | image | ||
2 | tftpboot.img | ||
3 | vmlinux.aout | ||
4 | piggyback | ||
diff --git a/arch/sparc64/defconfig b/arch/sparc64/defconfig index 9ceddad0fb49..069d49777b2a 100644 --- a/arch/sparc64/defconfig +++ b/arch/sparc64/defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.16-rc1 | 3 | # Linux kernel version: 2.6.16-rc2 |
4 | # Wed Jan 18 13:41:02 2006 | 4 | # Tue Feb 7 17:47:18 2006 |
5 | # | 5 | # |
6 | CONFIG_SPARC=y | 6 | CONFIG_SPARC=y |
7 | CONFIG_SPARC64=y | 7 | CONFIG_SPARC64=y |
@@ -23,7 +23,6 @@ CONFIG_HZ=250 | |||
23 | # Code maturity level options | 23 | # Code maturity level options |
24 | # | 24 | # |
25 | CONFIG_EXPERIMENTAL=y | 25 | CONFIG_EXPERIMENTAL=y |
26 | CONFIG_CLEAN_COMPILE=y | ||
27 | CONFIG_BROKEN_ON_SMP=y | 26 | CONFIG_BROKEN_ON_SMP=y |
28 | CONFIG_INIT_ENV_ARG_LIMIT=32 | 27 | CONFIG_INIT_ENV_ARG_LIMIT=32 |
29 | 28 | ||
@@ -31,7 +30,7 @@ CONFIG_INIT_ENV_ARG_LIMIT=32 | |||
31 | # General setup | 30 | # General setup |
32 | # | 31 | # |
33 | CONFIG_LOCALVERSION="" | 32 | CONFIG_LOCALVERSION="" |
34 | CONFIG_LOCALVERSION_AUTO=y | 33 | # CONFIG_LOCALVERSION_AUTO is not set |
35 | CONFIG_SWAP=y | 34 | CONFIG_SWAP=y |
36 | CONFIG_SYSVIPC=y | 35 | CONFIG_SYSVIPC=y |
37 | CONFIG_POSIX_MQUEUE=y | 36 | CONFIG_POSIX_MQUEUE=y |
@@ -155,6 +154,7 @@ CONFIG_NET=y | |||
155 | # | 154 | # |
156 | # Networking options | 155 | # Networking options |
157 | # | 156 | # |
157 | # CONFIG_NETDEBUG is not set | ||
158 | CONFIG_PACKET=y | 158 | CONFIG_PACKET=y |
159 | CONFIG_PACKET_MMAP=y | 159 | CONFIG_PACKET_MMAP=y |
160 | CONFIG_UNIX=y | 160 | CONFIG_UNIX=y |
@@ -224,6 +224,11 @@ CONFIG_IP_DCCP_TFRC_LIB=m | |||
224 | # SCTP Configuration (EXPERIMENTAL) | 224 | # SCTP Configuration (EXPERIMENTAL) |
225 | # | 225 | # |
226 | # CONFIG_IP_SCTP is not set | 226 | # CONFIG_IP_SCTP is not set |
227 | |||
228 | # | ||
229 | # TIPC Configuration (EXPERIMENTAL) | ||
230 | # | ||
231 | # CONFIG_TIPC is not set | ||
227 | # CONFIG_ATM is not set | 232 | # CONFIG_ATM is not set |
228 | # CONFIG_BRIDGE is not set | 233 | # CONFIG_BRIDGE is not set |
229 | CONFIG_VLAN_8021Q=m | 234 | CONFIG_VLAN_8021Q=m |
@@ -233,11 +238,6 @@ CONFIG_VLAN_8021Q=m | |||
233 | # CONFIG_ATALK is not set | 238 | # CONFIG_ATALK is not set |
234 | # CONFIG_X25 is not set | 239 | # CONFIG_X25 is not set |
235 | # CONFIG_LAPB is not set | 240 | # CONFIG_LAPB is not set |
236 | |||
237 | # | ||
238 | # TIPC Configuration (EXPERIMENTAL) | ||
239 | # | ||
240 | # CONFIG_TIPC is not set | ||
241 | # CONFIG_NET_DIVERT is not set | 241 | # CONFIG_NET_DIVERT is not set |
242 | # CONFIG_ECONET is not set | 242 | # CONFIG_ECONET is not set |
243 | # CONFIG_WAN_ROUTER is not set | 243 | # CONFIG_WAN_ROUTER is not set |
@@ -657,6 +657,7 @@ CONFIG_SERIAL_SUNSU_CONSOLE=y | |||
657 | CONFIG_SERIAL_SUNSAB=m | 657 | CONFIG_SERIAL_SUNSAB=m |
658 | CONFIG_SERIAL_CORE=y | 658 | CONFIG_SERIAL_CORE=y |
659 | CONFIG_SERIAL_CORE_CONSOLE=y | 659 | CONFIG_SERIAL_CORE_CONSOLE=y |
660 | # CONFIG_SERIAL_JSM is not set | ||
660 | CONFIG_UNIX98_PTYS=y | 661 | CONFIG_UNIX98_PTYS=y |
661 | # CONFIG_LEGACY_PTYS is not set | 662 | # CONFIG_LEGACY_PTYS is not set |
662 | 663 | ||
@@ -765,6 +766,7 @@ CONFIG_HWMON=y | |||
765 | # CONFIG_SENSORS_ASB100 is not set | 766 | # CONFIG_SENSORS_ASB100 is not set |
766 | # CONFIG_SENSORS_ATXP1 is not set | 767 | # CONFIG_SENSORS_ATXP1 is not set |
767 | # CONFIG_SENSORS_DS1621 is not set | 768 | # CONFIG_SENSORS_DS1621 is not set |
769 | # CONFIG_SENSORS_F71805F is not set | ||
768 | # CONFIG_SENSORS_FSCHER is not set | 770 | # CONFIG_SENSORS_FSCHER is not set |
769 | # CONFIG_SENSORS_FSCPOS is not set | 771 | # CONFIG_SENSORS_FSCPOS is not set |
770 | # CONFIG_SENSORS_GL518SM is not set | 772 | # CONFIG_SENSORS_GL518SM is not set |
@@ -1118,6 +1120,10 @@ CONFIG_USB_HIDDEV=y | |||
1118 | # | 1120 | # |
1119 | 1121 | ||
1120 | # | 1122 | # |
1123 | # EDAC - error detection and reporting (RAS) | ||
1124 | # | ||
1125 | |||
1126 | # | ||
1121 | # Misc Linux/SPARC drivers | 1127 | # Misc Linux/SPARC drivers |
1122 | # | 1128 | # |
1123 | CONFIG_SUN_OPENPROMIO=m | 1129 | CONFIG_SUN_OPENPROMIO=m |
diff --git a/arch/sparc64/kernel/entry.S b/arch/sparc64/kernel/entry.S index e50e56e4ab61..a73553ae7e53 100644 --- a/arch/sparc64/kernel/entry.S +++ b/arch/sparc64/kernel/entry.S | |||
@@ -25,7 +25,7 @@ | |||
25 | 25 | ||
26 | #define curptr g6 | 26 | #define curptr g6 |
27 | 27 | ||
28 | #define NR_SYSCALLS 284 /* Each OS is different... */ | 28 | #define NR_SYSCALLS 300 /* Each OS is different... */ |
29 | 29 | ||
30 | .text | 30 | .text |
31 | .align 32 | 31 | .align 32 |
diff --git a/arch/sparc64/kernel/setup.c b/arch/sparc64/kernel/setup.c index 054461e6946d..158bd31e15b7 100644 --- a/arch/sparc64/kernel/setup.c +++ b/arch/sparc64/kernel/setup.c | |||
@@ -542,6 +542,8 @@ void __init setup_arch(char **cmdline_p) | |||
542 | } | 542 | } |
543 | #endif | 543 | #endif |
544 | 544 | ||
545 | smp_setup_cpu_possible_map(); | ||
546 | |||
545 | paging_init(); | 547 | paging_init(); |
546 | } | 548 | } |
547 | 549 | ||
diff --git a/arch/sparc64/kernel/smp.c b/arch/sparc64/kernel/smp.c index 1fb6323e65a4..1f7ad8a69052 100644 --- a/arch/sparc64/kernel/smp.c +++ b/arch/sparc64/kernel/smp.c | |||
@@ -1079,18 +1079,12 @@ int setup_profiling_timer(unsigned int multiplier) | |||
1079 | return 0; | 1079 | return 0; |
1080 | } | 1080 | } |
1081 | 1081 | ||
1082 | /* Constrain the number of cpus to max_cpus. */ | ||
1082 | void __init smp_prepare_cpus(unsigned int max_cpus) | 1083 | void __init smp_prepare_cpus(unsigned int max_cpus) |
1083 | { | 1084 | { |
1084 | int instance, mid; | ||
1085 | |||
1086 | instance = 0; | ||
1087 | while (!cpu_find_by_instance(instance, NULL, &mid)) { | ||
1088 | if (mid < max_cpus) | ||
1089 | cpu_set(mid, phys_cpu_present_map); | ||
1090 | instance++; | ||
1091 | } | ||
1092 | |||
1093 | if (num_possible_cpus() > max_cpus) { | 1085 | if (num_possible_cpus() > max_cpus) { |
1086 | int instance, mid; | ||
1087 | |||
1094 | instance = 0; | 1088 | instance = 0; |
1095 | while (!cpu_find_by_instance(instance, NULL, &mid)) { | 1089 | while (!cpu_find_by_instance(instance, NULL, &mid)) { |
1096 | if (mid != boot_cpu_id) { | 1090 | if (mid != boot_cpu_id) { |
@@ -1105,6 +1099,22 @@ void __init smp_prepare_cpus(unsigned int max_cpus) | |||
1105 | smp_store_cpu_info(boot_cpu_id); | 1099 | smp_store_cpu_info(boot_cpu_id); |
1106 | } | 1100 | } |
1107 | 1101 | ||
1102 | /* Set this up early so that things like the scheduler can init | ||
1103 | * properly. We use the same cpu mask for both the present and | ||
1104 | * possible cpu map. | ||
1105 | */ | ||
1106 | void __init smp_setup_cpu_possible_map(void) | ||
1107 | { | ||
1108 | int instance, mid; | ||
1109 | |||
1110 | instance = 0; | ||
1111 | while (!cpu_find_by_instance(instance, NULL, &mid)) { | ||
1112 | if (mid < NR_CPUS) | ||
1113 | cpu_set(mid, phys_cpu_present_map); | ||
1114 | instance++; | ||
1115 | } | ||
1116 | } | ||
1117 | |||
1108 | void __devinit smp_prepare_boot_cpu(void) | 1118 | void __devinit smp_prepare_boot_cpu(void) |
1109 | { | 1119 | { |
1110 | if (hard_smp_processor_id() >= NR_CPUS) { | 1120 | if (hard_smp_processor_id() >= NR_CPUS) { |
diff --git a/arch/sparc64/kernel/sys32.S b/arch/sparc64/kernel/sys32.S index 9cd272ac3ac1..c4a1cef4b1e5 100644 --- a/arch/sparc64/kernel/sys32.S +++ b/arch/sparc64/kernel/sys32.S | |||
@@ -84,7 +84,6 @@ SIGN2(sys32_fadvise64_64, compat_sys_fadvise64_64, %o0, %o5) | |||
84 | SIGN2(sys32_bdflush, sys_bdflush, %o0, %o1) | 84 | SIGN2(sys32_bdflush, sys_bdflush, %o0, %o1) |
85 | SIGN1(sys32_mlockall, sys_mlockall, %o0) | 85 | SIGN1(sys32_mlockall, sys_mlockall, %o0) |
86 | SIGN1(sys32_nfsservctl, compat_sys_nfsservctl, %o0) | 86 | SIGN1(sys32_nfsservctl, compat_sys_nfsservctl, %o0) |
87 | SIGN1(sys32_clock_settime, compat_sys_clock_settime, %o1) | ||
88 | SIGN1(sys32_clock_nanosleep, compat_sys_clock_nanosleep, %o1) | 87 | SIGN1(sys32_clock_nanosleep, compat_sys_clock_nanosleep, %o1) |
89 | SIGN1(sys32_timer_settime, compat_sys_timer_settime, %o1) | 88 | SIGN1(sys32_timer_settime, compat_sys_timer_settime, %o1) |
90 | SIGN1(sys32_io_submit, compat_sys_io_submit, %o1) | 89 | SIGN1(sys32_io_submit, compat_sys_io_submit, %o1) |
@@ -319,7 +318,7 @@ do_sys_recvmsg: /* compat_sys_recvmsg(int, struct compat_msghdr *, unsigned int) | |||
319 | nop | 318 | nop |
320 | nop | 319 | nop |
321 | 320 | ||
322 | .section __ex_table | 321 | .section __ex_table,"a" |
323 | .align 4 | 322 | .align 4 |
324 | .word 1b, __retl_efault, 2b, __retl_efault | 323 | .word 1b, __retl_efault, 2b, __retl_efault |
325 | .word 3b, __retl_efault, 4b, __retl_efault | 324 | .word 3b, __retl_efault, 4b, __retl_efault |
diff --git a/arch/sparc64/kernel/sys_sparc32.c b/arch/sparc64/kernel/sys_sparc32.c index 9264ccbaaafa..417727bd87ba 100644 --- a/arch/sparc64/kernel/sys_sparc32.c +++ b/arch/sparc64/kernel/sys_sparc32.c | |||
@@ -428,6 +428,27 @@ asmlinkage long compat_sys_fstat64(unsigned int fd, | |||
428 | return error; | 428 | return error; |
429 | } | 429 | } |
430 | 430 | ||
431 | asmlinkage long compat_sys_fstatat64(unsigned int dfd, char __user *filename, | ||
432 | struct compat_stat64 __user * statbuf, int flag) | ||
433 | { | ||
434 | struct kstat stat; | ||
435 | int error = -EINVAL; | ||
436 | |||
437 | if ((flag & ~AT_SYMLINK_NOFOLLOW) != 0) | ||
438 | goto out; | ||
439 | |||
440 | if (flag & AT_SYMLINK_NOFOLLOW) | ||
441 | error = vfs_lstat_fd(dfd, filename, &stat); | ||
442 | else | ||
443 | error = vfs_stat_fd(dfd, filename, &stat); | ||
444 | |||
445 | if (!error) | ||
446 | error = cp_compat_stat64(&stat, statbuf); | ||
447 | |||
448 | out: | ||
449 | return error; | ||
450 | } | ||
451 | |||
431 | asmlinkage long compat_sys_sysfs(int option, u32 arg1, u32 arg2) | 452 | asmlinkage long compat_sys_sysfs(int option, u32 arg1, u32 arg2) |
432 | { | 453 | { |
433 | return sys_sysfs(option, arg1, arg2); | 454 | return sys_sysfs(option, arg1, arg2); |
diff --git a/arch/sparc64/kernel/systbls.S b/arch/sparc64/kernel/systbls.S index bf0fc5bfbfbe..c3adb7ac167d 100644 --- a/arch/sparc64/kernel/systbls.S +++ b/arch/sparc64/kernel/systbls.S | |||
@@ -71,15 +71,15 @@ sys_call_table32: | |||
71 | /*240*/ .word sys_munlockall, sys32_sched_setparam, sys32_sched_getparam, sys32_sched_setscheduler, sys32_sched_getscheduler | 71 | /*240*/ .word sys_munlockall, sys32_sched_setparam, sys32_sched_getparam, sys32_sched_setscheduler, sys32_sched_getscheduler |
72 | .word sys_sched_yield, sys32_sched_get_priority_max, sys32_sched_get_priority_min, sys32_sched_rr_get_interval, compat_sys_nanosleep | 72 | .word sys_sched_yield, sys32_sched_get_priority_max, sys32_sched_get_priority_min, sys32_sched_rr_get_interval, compat_sys_nanosleep |
73 | /*250*/ .word sys32_mremap, sys32_sysctl, sys32_getsid, sys_fdatasync, sys32_nfsservctl | 73 | /*250*/ .word sys32_mremap, sys32_sysctl, sys32_getsid, sys_fdatasync, sys32_nfsservctl |
74 | .word sys_ni_syscall, sys32_clock_settime, compat_sys_clock_gettime, compat_sys_clock_getres, sys32_clock_nanosleep | 74 | .word sys_ni_syscall, compat_sys_clock_settime, compat_sys_clock_gettime, compat_sys_clock_getres, sys32_clock_nanosleep |
75 | /*260*/ .word compat_sys_sched_getaffinity, compat_sys_sched_setaffinity, sys32_timer_settime, compat_sys_timer_gettime, sys_timer_getoverrun | 75 | /*260*/ .word compat_sys_sched_getaffinity, compat_sys_sched_setaffinity, sys32_timer_settime, compat_sys_timer_gettime, sys_timer_getoverrun |
76 | .word sys_timer_delete, compat_sys_timer_create, sys_ni_syscall, compat_sys_io_setup, sys_io_destroy | 76 | .word sys_timer_delete, compat_sys_timer_create, sys_ni_syscall, compat_sys_io_setup, sys_io_destroy |
77 | /*270*/ .word sys32_io_submit, sys_io_cancel, compat_sys_io_getevents, sys32_mq_open, sys_mq_unlink | 77 | /*270*/ .word sys32_io_submit, sys_io_cancel, compat_sys_io_getevents, sys32_mq_open, sys_mq_unlink |
78 | .word compat_sys_mq_timedsend, compat_sys_mq_timedreceive, compat_sys_mq_notify, compat_sys_mq_getsetattr, compat_sys_waitid | 78 | .word compat_sys_mq_timedsend, compat_sys_mq_timedreceive, compat_sys_mq_notify, compat_sys_mq_getsetattr, compat_sys_waitid |
79 | /*280*/ .word sys_ni_syscall, sys_add_key, sys_request_key, sys_keyctl, compat_sys_openat | 79 | /*280*/ .word sys_ni_syscall, sys_add_key, sys_request_key, sys_keyctl, compat_sys_openat |
80 | .word sys_mkdirat, sys_mknodat, sys_fchownat, compat_sys_futimesat, compat_sys_newfstatat | 80 | .word sys_mkdirat, sys_mknodat, sys_fchownat, compat_sys_futimesat, compat_sys_fstatat64 |
81 | /*285*/ .word sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat | 81 | /*285*/ .word sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat |
82 | .word sys_fchmodat, sys_faccessat, compat_sys_pselect6, compat_sys_ppoll | 82 | .word sys_fchmodat, sys_faccessat, compat_sys_pselect6, compat_sys_ppoll, sys_unshare |
83 | 83 | ||
84 | #endif /* CONFIG_COMPAT */ | 84 | #endif /* CONFIG_COMPAT */ |
85 | 85 | ||
@@ -146,9 +146,9 @@ sys_call_table: | |||
146 | /*270*/ .word sys_io_submit, sys_io_cancel, sys_io_getevents, sys_mq_open, sys_mq_unlink | 146 | /*270*/ .word sys_io_submit, sys_io_cancel, sys_io_getevents, sys_mq_open, sys_mq_unlink |
147 | .word sys_mq_timedsend, sys_mq_timedreceive, sys_mq_notify, sys_mq_getsetattr, sys_waitid | 147 | .word sys_mq_timedsend, sys_mq_timedreceive, sys_mq_notify, sys_mq_getsetattr, sys_waitid |
148 | /*280*/ .word sys_nis_syscall, sys_add_key, sys_request_key, sys_keyctl, sys_openat | 148 | /*280*/ .word sys_nis_syscall, sys_add_key, sys_request_key, sys_keyctl, sys_openat |
149 | .word sys_mkdirat, sys_mknodat, sys_fchownat, sys_futimesat, compat_sys_newfstatat | 149 | .word sys_mkdirat, sys_mknodat, sys_fchownat, sys_futimesat, sys_fstatat64 |
150 | /*285*/ .word sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat | 150 | /*285*/ .word sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat |
151 | .word sys_fchmodat, sys_faccessat, sys_pselect6, sys_ppoll | 151 | .word sys_fchmodat, sys_faccessat, sys_pselect6, sys_ppoll, sys_unshare |
152 | 152 | ||
153 | #if defined(CONFIG_SUNOS_EMUL) || defined(CONFIG_SOLARIS_EMUL) || \ | 153 | #if defined(CONFIG_SUNOS_EMUL) || defined(CONFIG_SOLARIS_EMUL) || \ |
154 | defined(CONFIG_SOLARIS_EMUL_MODULE) | 154 | defined(CONFIG_SOLARIS_EMUL_MODULE) |
@@ -261,4 +261,5 @@ sunos_sys_table: | |||
261 | /*290*/ .word sunos_nosys, sunos_nosys, sunos_nosys | 261 | /*290*/ .word sunos_nosys, sunos_nosys, sunos_nosys |
262 | .word sunos_nosys, sunos_nosys, sunos_nosys | 262 | .word sunos_nosys, sunos_nosys, sunos_nosys |
263 | .word sunos_nosys, sunos_nosys, sunos_nosys | 263 | .word sunos_nosys, sunos_nosys, sunos_nosys |
264 | .word sunos_nosys | ||
264 | #endif | 265 | #endif |
diff --git a/arch/sparc64/kernel/una_asm.S b/arch/sparc64/kernel/una_asm.S index 1f5b5b708ce7..be183fe41443 100644 --- a/arch/sparc64/kernel/una_asm.S +++ b/arch/sparc64/kernel/una_asm.S | |||
@@ -47,7 +47,7 @@ __do_int_store: | |||
47 | mov 0, %o0 | 47 | mov 0, %o0 |
48 | .size __do_int_store, .-__do_int_store | 48 | .size __do_int_store, .-__do_int_store |
49 | 49 | ||
50 | .section __ex_table | 50 | .section __ex_table,"a" |
51 | .word 4b, __retl_efault | 51 | .word 4b, __retl_efault |
52 | .word 5b, __retl_efault | 52 | .word 5b, __retl_efault |
53 | .word 6b, __retl_efault | 53 | .word 6b, __retl_efault |
@@ -129,7 +129,7 @@ do_int_load: | |||
129 | mov 0, %o0 | 129 | mov 0, %o0 |
130 | .size __do_int_load, .-__do_int_load | 130 | .size __do_int_load, .-__do_int_load |
131 | 131 | ||
132 | .section __ex_table | 132 | .section __ex_table,"a" |
133 | .word 4b, __retl_efault | 133 | .word 4b, __retl_efault |
134 | .word 5b, __retl_efault | 134 | .word 5b, __retl_efault |
135 | .word 6b, __retl_efault | 135 | .word 6b, __retl_efault |
diff --git a/arch/sparc64/lib/U1copy_from_user.S b/arch/sparc64/lib/U1copy_from_user.S index 93146a81e2d3..3192b0bf4fab 100644 --- a/arch/sparc64/lib/U1copy_from_user.S +++ b/arch/sparc64/lib/U1copy_from_user.S | |||
@@ -9,7 +9,7 @@ | |||
9 | .align 4; \ | 9 | .align 4; \ |
10 | 99: retl; \ | 10 | 99: retl; \ |
11 | mov 1, %o0; \ | 11 | mov 1, %o0; \ |
12 | .section __ex_table; \ | 12 | .section __ex_table,"a";\ |
13 | .align 4; \ | 13 | .align 4; \ |
14 | .word 98b, 99b; \ | 14 | .word 98b, 99b; \ |
15 | .text; \ | 15 | .text; \ |
diff --git a/arch/sparc64/lib/U1copy_to_user.S b/arch/sparc64/lib/U1copy_to_user.S index 1fccc521e2bd..d1210ffb0b82 100644 --- a/arch/sparc64/lib/U1copy_to_user.S +++ b/arch/sparc64/lib/U1copy_to_user.S | |||
@@ -9,7 +9,7 @@ | |||
9 | .align 4; \ | 9 | .align 4; \ |
10 | 99: retl; \ | 10 | 99: retl; \ |
11 | mov 1, %o0; \ | 11 | mov 1, %o0; \ |
12 | .section __ex_table; \ | 12 | .section __ex_table,"a";\ |
13 | .align 4; \ | 13 | .align 4; \ |
14 | .word 98b, 99b; \ | 14 | .word 98b, 99b; \ |
15 | .text; \ | 15 | .text; \ |
diff --git a/arch/sparc64/lib/U3copy_from_user.S b/arch/sparc64/lib/U3copy_from_user.S index df600b667e48..f5bfc8d9d216 100644 --- a/arch/sparc64/lib/U3copy_from_user.S +++ b/arch/sparc64/lib/U3copy_from_user.S | |||
@@ -9,7 +9,7 @@ | |||
9 | .align 4; \ | 9 | .align 4; \ |
10 | 99: retl; \ | 10 | 99: retl; \ |
11 | mov 1, %o0; \ | 11 | mov 1, %o0; \ |
12 | .section __ex_table; \ | 12 | .section __ex_table,"a";\ |
13 | .align 4; \ | 13 | .align 4; \ |
14 | .word 98b, 99b; \ | 14 | .word 98b, 99b; \ |
15 | .text; \ | 15 | .text; \ |
diff --git a/arch/sparc64/lib/U3copy_to_user.S b/arch/sparc64/lib/U3copy_to_user.S index f337f22ed82e..2334f111bb0c 100644 --- a/arch/sparc64/lib/U3copy_to_user.S +++ b/arch/sparc64/lib/U3copy_to_user.S | |||
@@ -9,7 +9,7 @@ | |||
9 | .align 4; \ | 9 | .align 4; \ |
10 | 99: retl; \ | 10 | 99: retl; \ |
11 | mov 1, %o0; \ | 11 | mov 1, %o0; \ |
12 | .section __ex_table; \ | 12 | .section __ex_table,"a";\ |
13 | .align 4; \ | 13 | .align 4; \ |
14 | .word 98b, 99b; \ | 14 | .word 98b, 99b; \ |
15 | .text; \ | 15 | .text; \ |
diff --git a/arch/sparc64/lib/bzero.S b/arch/sparc64/lib/bzero.S index 21a933ffb7c2..1d2abcfa4e52 100644 --- a/arch/sparc64/lib/bzero.S +++ b/arch/sparc64/lib/bzero.S | |||
@@ -92,7 +92,7 @@ __bzero_done: | |||
92 | .align 4; \ | 92 | .align 4; \ |
93 | 99: retl; \ | 93 | 99: retl; \ |
94 | mov %o1, %o0; \ | 94 | mov %o1, %o0; \ |
95 | .section __ex_table; \ | 95 | .section __ex_table,"a";\ |
96 | .align 4; \ | 96 | .align 4; \ |
97 | .word 98b, 99b; \ | 97 | .word 98b, 99b; \ |
98 | .text; \ | 98 | .text; \ |
diff --git a/arch/sparc64/lib/copy_in_user.S b/arch/sparc64/lib/copy_in_user.S index 816076c0bc06..650af3f21f78 100644 --- a/arch/sparc64/lib/copy_in_user.S +++ b/arch/sparc64/lib/copy_in_user.S | |||
@@ -13,7 +13,7 @@ | |||
13 | .align 4; \ | 13 | .align 4; \ |
14 | 99: retl; \ | 14 | 99: retl; \ |
15 | mov 1, %o0; \ | 15 | mov 1, %o0; \ |
16 | .section __ex_table; \ | 16 | .section __ex_table,"a";\ |
17 | .align 4; \ | 17 | .align 4; \ |
18 | .word 98b, 99b; \ | 18 | .word 98b, 99b; \ |
19 | .text; \ | 19 | .text; \ |
diff --git a/arch/sparc64/lib/csum_copy_from_user.S b/arch/sparc64/lib/csum_copy_from_user.S index 817ebdae39f8..a22eddbe5dba 100644 --- a/arch/sparc64/lib/csum_copy_from_user.S +++ b/arch/sparc64/lib/csum_copy_from_user.S | |||
@@ -9,7 +9,7 @@ | |||
9 | .align 4; \ | 9 | .align 4; \ |
10 | 99: retl; \ | 10 | 99: retl; \ |
11 | mov -1, %o0; \ | 11 | mov -1, %o0; \ |
12 | .section __ex_table; \ | 12 | .section __ex_table,"a";\ |
13 | .align 4; \ | 13 | .align 4; \ |
14 | .word 98b, 99b; \ | 14 | .word 98b, 99b; \ |
15 | .text; \ | 15 | .text; \ |
diff --git a/arch/sparc64/lib/csum_copy_to_user.S b/arch/sparc64/lib/csum_copy_to_user.S index c2f9463ea1e2..d5b12f441f02 100644 --- a/arch/sparc64/lib/csum_copy_to_user.S +++ b/arch/sparc64/lib/csum_copy_to_user.S | |||
@@ -9,7 +9,7 @@ | |||
9 | .align 4; \ | 9 | .align 4; \ |
10 | 99: retl; \ | 10 | 99: retl; \ |
11 | mov -1, %o0; \ | 11 | mov -1, %o0; \ |
12 | .section __ex_table; \ | 12 | .section __ex_table,"a";\ |
13 | .align 4; \ | 13 | .align 4; \ |
14 | .word 98b, 99b; \ | 14 | .word 98b, 99b; \ |
15 | .text; \ | 15 | .text; \ |
diff --git a/arch/sparc64/lib/strlen_user.S b/arch/sparc64/lib/strlen_user.S index 9ed54ba14fc6..114ed111e251 100644 --- a/arch/sparc64/lib/strlen_user.S +++ b/arch/sparc64/lib/strlen_user.S | |||
@@ -85,7 +85,7 @@ __strnlen_user: | |||
85 | retl | 85 | retl |
86 | clr %o0 | 86 | clr %o0 |
87 | 87 | ||
88 | .section __ex_table,#alloc | 88 | .section __ex_table,"a" |
89 | .align 4 | 89 | .align 4 |
90 | 90 | ||
91 | .word 10b, 30b | 91 | .word 10b, 30b |
diff --git a/arch/sparc64/lib/strncpy_from_user.S b/arch/sparc64/lib/strncpy_from_user.S index e1264650ca7a..b2f499f79427 100644 --- a/arch/sparc64/lib/strncpy_from_user.S +++ b/arch/sparc64/lib/strncpy_from_user.S | |||
@@ -125,7 +125,7 @@ __strncpy_from_user: | |||
125 | add %o2, %o3, %o0 | 125 | add %o2, %o3, %o0 |
126 | .size __strncpy_from_user, .-__strncpy_from_user | 126 | .size __strncpy_from_user, .-__strncpy_from_user |
127 | 127 | ||
128 | .section __ex_table,#alloc | 128 | .section __ex_table,"a" |
129 | .align 4 | 129 | .align 4 |
130 | .word 60b, __retl_efault | 130 | .word 60b, __retl_efault |
131 | .word 61b, __retl_efault | 131 | .word 61b, __retl_efault |
diff --git a/arch/sparc64/solaris/entry64.S b/arch/sparc64/solaris/entry64.S index eb314ed23cdb..f170324e8bf2 100644 --- a/arch/sparc64/solaris/entry64.S +++ b/arch/sparc64/solaris/entry64.S | |||
@@ -217,7 +217,7 @@ solaris_unimplemented: | |||
217 | ba,pt %xcc, ret_from_solaris | 217 | ba,pt %xcc, ret_from_solaris |
218 | nop | 218 | nop |
219 | 219 | ||
220 | .section __ex_table,#alloc | 220 | .section __ex_table,"a" |
221 | .align 4 | 221 | .align 4 |
222 | .word exen, exenf | 222 | .word exen, exenf |
223 | 223 | ||
diff --git a/arch/sparc64/solaris/systbl.S b/arch/sparc64/solaris/systbl.S index d25667eeae10..7043ca18caf9 100644 --- a/arch/sparc64/solaris/systbl.S +++ b/arch/sparc64/solaris/systbl.S | |||
@@ -283,32 +283,3 @@ solaris_sys_table: | |||
283 | .word solaris_unimplemented /* 253 */ | 283 | .word solaris_unimplemented /* 253 */ |
284 | .word solaris_unimplemented /* 254 */ | 284 | .word solaris_unimplemented /* 254 */ |
285 | .word solaris_unimplemented /* 255 */ | 285 | .word solaris_unimplemented /* 255 */ |
286 | .word solaris_unimplemented /* 256 */ | ||
287 | .word solaris_unimplemented /* 257 */ | ||
288 | .word solaris_unimplemented /* 258 */ | ||
289 | .word solaris_unimplemented /* 259 */ | ||
290 | .word solaris_unimplemented /* 260 */ | ||
291 | .word solaris_unimplemented /* 261 */ | ||
292 | .word solaris_unimplemented /* 262 */ | ||
293 | .word solaris_unimplemented /* 263 */ | ||
294 | .word solaris_unimplemented /* 264 */ | ||
295 | .word solaris_unimplemented /* 265 */ | ||
296 | .word solaris_unimplemented /* 266 */ | ||
297 | .word solaris_unimplemented /* 267 */ | ||
298 | .word solaris_unimplemented /* 268 */ | ||
299 | .word solaris_unimplemented /* 269 */ | ||
300 | .word solaris_unimplemented /* 270 */ | ||
301 | .word solaris_unimplemented /* 271 */ | ||
302 | .word solaris_unimplemented /* 272 */ | ||
303 | .word solaris_unimplemented /* 273 */ | ||
304 | .word solaris_unimplemented /* 274 */ | ||
305 | .word solaris_unimplemented /* 275 */ | ||
306 | .word solaris_unimplemented /* 276 */ | ||
307 | .word solaris_unimplemented /* 277 */ | ||
308 | .word solaris_unimplemented /* 278 */ | ||
309 | .word solaris_unimplemented /* 279 */ | ||
310 | .word solaris_unimplemented /* 280 */ | ||
311 | .word solaris_unimplemented /* 281 */ | ||
312 | .word solaris_unimplemented /* 282 */ | ||
313 | .word solaris_unimplemented /* 283 */ | ||
314 | |||
diff --git a/arch/um/Makefile b/arch/um/Makefile index 6430a6383853..c58b657f0097 100644 --- a/arch/um/Makefile +++ b/arch/um/Makefile | |||
@@ -47,13 +47,16 @@ ARCH_INCLUDE += -I$(srctree)/$(ARCH_DIR)/include | |||
47 | endif | 47 | endif |
48 | SYS_DIR := $(ARCH_DIR)/include/sysdep-$(SUBARCH) | 48 | SYS_DIR := $(ARCH_DIR)/include/sysdep-$(SUBARCH) |
49 | 49 | ||
50 | # -Dvmap=kernel_vmap affects everything, and prevents anything from | 50 | # -Dvmap=kernel_vmap prevents anything from referencing the libpcap.o symbol so |
51 | # referencing the libpcap.o symbol so named. | 51 | # named - it's a common symbol in libpcap, so we get a binary which crashes. |
52 | # | 52 | # |
53 | # Same things for in6addr_loopback - found in libc. | 53 | # Same things for in6addr_loopback and mktime - found in libc. For these two we |
54 | # only get link-time error, luckily. | ||
55 | # | ||
56 | # These apply to USER_CFLAGS to. | ||
54 | 57 | ||
55 | CFLAGS += $(CFLAGS-y) -D__arch_um__ -DSUBARCH=\"$(SUBARCH)\" \ | 58 | CFLAGS += $(CFLAGS-y) -D__arch_um__ -DSUBARCH=\"$(SUBARCH)\" \ |
56 | $(ARCH_INCLUDE) $(MODE_INCLUDE) -Dvmap=kernel_vmap \ | 59 | $(ARCH_INCLUDE) $(MODE_INCLUDE) -Dvmap=kernel_vmap \ |
57 | -Din6addr_loopback=kernel_in6addr_loopback | 60 | -Din6addr_loopback=kernel_in6addr_loopback |
58 | 61 | ||
59 | AFLAGS += $(ARCH_INCLUDE) | 62 | AFLAGS += $(ARCH_INCLUDE) |
@@ -66,6 +69,7 @@ USER_CFLAGS := $(patsubst -D__KERNEL__,,$(USER_CFLAGS)) $(ARCH_INCLUDE) \ | |||
66 | # kernel_errno to separate them from the libc errno. This allows -fno-common | 69 | # kernel_errno to separate them from the libc errno. This allows -fno-common |
67 | # in CFLAGS. Otherwise, it would cause ld to complain about the two different | 70 | # in CFLAGS. Otherwise, it would cause ld to complain about the two different |
68 | # errnos. | 71 | # errnos. |
72 | # These apply to kernelspace only. | ||
69 | 73 | ||
70 | CFLAGS += -Derrno=kernel_errno -Dsigprocmask=kernel_sigprocmask \ | 74 | CFLAGS += -Derrno=kernel_errno -Dsigprocmask=kernel_sigprocmask \ |
71 | -Dmktime=kernel_mktime | 75 | -Dmktime=kernel_mktime |
@@ -168,10 +172,13 @@ else | |||
168 | $(Q)cd $(TOPDIR)/include/asm-um && ln -sf ../asm-$(SUBARCH) arch | 172 | $(Q)cd $(TOPDIR)/include/asm-um && ln -sf ../asm-$(SUBARCH) arch |
169 | endif | 173 | endif |
170 | 174 | ||
171 | $(ARCH_DIR)/include/sysdep: | 175 | $(objtree)/$(ARCH_DIR)/include: |
176 | @echo ' MKDIR $@' | ||
177 | $(Q)mkdir -p $@ | ||
178 | |||
179 | $(ARCH_DIR)/include/sysdep: $(objtree)/$(ARCH_DIR)/include | ||
172 | @echo ' SYMLINK $@' | 180 | @echo ' SYMLINK $@' |
173 | ifneq ($(KBUILD_SRC),) | 181 | ifneq ($(KBUILD_SRC),) |
174 | $(Q)mkdir -p $(ARCH_DIR)/include | ||
175 | $(Q)ln -fsn $(srctree)/$(ARCH_DIR)/include/sysdep-$(SUBARCH) $(ARCH_DIR)/include/sysdep | 182 | $(Q)ln -fsn $(srctree)/$(ARCH_DIR)/include/sysdep-$(SUBARCH) $(ARCH_DIR)/include/sysdep |
176 | else | 183 | else |
177 | $(Q)cd $(ARCH_DIR)/include && ln -sf sysdep-$(SUBARCH) sysdep | 184 | $(Q)cd $(ARCH_DIR)/include && ln -sf sysdep-$(SUBARCH) sysdep |
@@ -214,7 +221,7 @@ $(ARCH_DIR)/include/user_constants.h: $(ARCH_DIR)/user-offsets.s | |||
214 | 221 | ||
215 | CLEAN_FILES += $(ARCH_DIR)/user-offsets.s | 222 | CLEAN_FILES += $(ARCH_DIR)/user-offsets.s |
216 | 223 | ||
217 | $(ARCH_DIR)/include/kern_constants.h: | 224 | $(ARCH_DIR)/include/kern_constants.h: $(objtree)/$(ARCH_DIR)/include |
218 | @echo ' SYMLINK $@' | 225 | @echo ' SYMLINK $@' |
219 | $(Q) ln -sf ../../../include/asm-um/asm-offsets.h $@ | 226 | $(Q) ln -sf ../../../include/asm-um/asm-offsets.h $@ |
220 | 227 | ||
diff --git a/arch/um/drivers/chan_kern.c b/arch/um/drivers/chan_kern.c index ab0d0b170816..7218c754505b 100644 --- a/arch/um/drivers/chan_kern.c +++ b/arch/um/drivers/chan_kern.c | |||
@@ -403,7 +403,7 @@ int chan_window_size(struct list_head *chans, unsigned short *rows_out, | |||
403 | return 0; | 403 | return 0; |
404 | } | 404 | } |
405 | 405 | ||
406 | void free_one_chan(struct chan *chan, int delay_free_irq) | 406 | static void free_one_chan(struct chan *chan, int delay_free_irq) |
407 | { | 407 | { |
408 | list_del(&chan->list); | 408 | list_del(&chan->list); |
409 | 409 | ||
@@ -416,7 +416,7 @@ void free_one_chan(struct chan *chan, int delay_free_irq) | |||
416 | kfree(chan); | 416 | kfree(chan); |
417 | } | 417 | } |
418 | 418 | ||
419 | void free_chan(struct list_head *chans, int delay_free_irq) | 419 | static void free_chan(struct list_head *chans, int delay_free_irq) |
420 | { | 420 | { |
421 | struct list_head *ele, *next; | 421 | struct list_head *ele, *next; |
422 | struct chan *chan; | 422 | struct chan *chan; |
@@ -497,7 +497,7 @@ struct chan_type { | |||
497 | struct chan_ops *ops; | 497 | struct chan_ops *ops; |
498 | }; | 498 | }; |
499 | 499 | ||
500 | struct chan_type chan_table[] = { | 500 | static struct chan_type chan_table[] = { |
501 | { "fd", &fd_ops }, | 501 | { "fd", &fd_ops }, |
502 | 502 | ||
503 | #ifdef CONFIG_NULL_CHAN | 503 | #ifdef CONFIG_NULL_CHAN |
diff --git a/arch/um/drivers/chan_user.c b/arch/um/drivers/chan_user.c index 5d50d4a44abf..2f880cb167a5 100644 --- a/arch/um/drivers/chan_user.c +++ b/arch/um/drivers/chan_user.c | |||
@@ -9,6 +9,7 @@ | |||
9 | #include <termios.h> | 9 | #include <termios.h> |
10 | #include <string.h> | 10 | #include <string.h> |
11 | #include <signal.h> | 11 | #include <signal.h> |
12 | #include <sched.h> | ||
12 | #include <sys/stat.h> | 13 | #include <sys/stat.h> |
13 | #include <sys/ioctl.h> | 14 | #include <sys/ioctl.h> |
14 | #include <sys/socket.h> | 15 | #include <sys/socket.h> |
@@ -73,7 +74,6 @@ static void winch_handler(int sig) | |||
73 | struct winch_data { | 74 | struct winch_data { |
74 | int pty_fd; | 75 | int pty_fd; |
75 | int pipe_fd; | 76 | int pipe_fd; |
76 | int close_me; | ||
77 | }; | 77 | }; |
78 | 78 | ||
79 | static int winch_thread(void *arg) | 79 | static int winch_thread(void *arg) |
@@ -84,7 +84,6 @@ static int winch_thread(void *arg) | |||
84 | int count, err; | 84 | int count, err; |
85 | char c = 1; | 85 | char c = 1; |
86 | 86 | ||
87 | os_close_file(data->close_me); | ||
88 | pty_fd = data->pty_fd; | 87 | pty_fd = data->pty_fd; |
89 | pipe_fd = data->pipe_fd; | 88 | pipe_fd = data->pipe_fd; |
90 | count = os_write_file(pipe_fd, &c, sizeof(c)); | 89 | count = os_write_file(pipe_fd, &c, sizeof(c)); |
@@ -153,15 +152,16 @@ static int winch_tramp(int fd, struct tty_struct *tty, int *fd_out) | |||
153 | } | 152 | } |
154 | 153 | ||
155 | data = ((struct winch_data) { .pty_fd = fd, | 154 | data = ((struct winch_data) { .pty_fd = fd, |
156 | .pipe_fd = fds[1], | 155 | .pipe_fd = fds[1] } ); |
157 | .close_me = fds[0] } ); | 156 | /* CLONE_FILES so this thread doesn't hold open files which are open |
158 | err = run_helper_thread(winch_thread, &data, 0, &stack, 0); | 157 | * now, but later closed. This is a problem with /dev/net/tun. |
158 | */ | ||
159 | err = run_helper_thread(winch_thread, &data, CLONE_FILES, &stack, 0); | ||
159 | if(err < 0){ | 160 | if(err < 0){ |
160 | printk("fork of winch_thread failed - errno = %d\n", errno); | 161 | printk("fork of winch_thread failed - errno = %d\n", errno); |
161 | goto out_close; | 162 | goto out_close; |
162 | } | 163 | } |
163 | 164 | ||
164 | os_close_file(fds[1]); | ||
165 | *fd_out = fds[0]; | 165 | *fd_out = fds[0]; |
166 | n = os_read_file(fds[0], &c, sizeof(c)); | 166 | n = os_read_file(fds[0], &c, sizeof(c)); |
167 | if(n != sizeof(c)){ | 167 | if(n != sizeof(c)){ |
@@ -169,13 +169,12 @@ static int winch_tramp(int fd, struct tty_struct *tty, int *fd_out) | |||
169 | printk("read failed, err = %d\n", -n); | 169 | printk("read failed, err = %d\n", -n); |
170 | printk("fd %d will not support SIGWINCH\n", fd); | 170 | printk("fd %d will not support SIGWINCH\n", fd); |
171 | err = -EINVAL; | 171 | err = -EINVAL; |
172 | goto out_close1; | 172 | goto out_close; |
173 | } | 173 | } |
174 | return err ; | 174 | return err ; |
175 | 175 | ||
176 | out_close: | 176 | out_close: |
177 | os_close_file(fds[1]); | 177 | os_close_file(fds[1]); |
178 | out_close1: | ||
179 | os_close_file(fds[0]); | 178 | os_close_file(fds[0]); |
180 | out: | 179 | out: |
181 | return err; | 180 | return err; |
diff --git a/arch/um/drivers/cow.h b/arch/um/drivers/cow.h index dc36b222100b..04e3958266e0 100644 --- a/arch/um/drivers/cow.h +++ b/arch/um/drivers/cow.h | |||
@@ -46,7 +46,7 @@ extern int file_reader(__u64 offset, char *buf, int len, void *arg); | |||
46 | extern int read_cow_header(int (*reader)(__u64, char *, int, void *), | 46 | extern int read_cow_header(int (*reader)(__u64, char *, int, void *), |
47 | void *arg, __u32 *version_out, | 47 | void *arg, __u32 *version_out, |
48 | char **backing_file_out, time_t *mtime_out, | 48 | char **backing_file_out, time_t *mtime_out, |
49 | unsigned long long *size_out, int *sectorsize_out, | 49 | __u64 *size_out, int *sectorsize_out, |
50 | __u32 *align_out, int *bitmap_offset_out); | 50 | __u32 *align_out, int *bitmap_offset_out); |
51 | 51 | ||
52 | extern int write_cow_header(char *cow_file, int fd, char *backing_file, | 52 | extern int write_cow_header(char *cow_file, int fd, char *backing_file, |
diff --git a/arch/um/drivers/cow_sys.h b/arch/um/drivers/cow_sys.h index c83fc5d68936..94de4ead4f7a 100644 --- a/arch/um/drivers/cow_sys.h +++ b/arch/um/drivers/cow_sys.h | |||
@@ -23,17 +23,17 @@ static inline char *cow_strdup(char *str) | |||
23 | return(uml_strdup(str)); | 23 | return(uml_strdup(str)); |
24 | } | 24 | } |
25 | 25 | ||
26 | static inline int cow_seek_file(int fd, unsigned long long offset) | 26 | static inline int cow_seek_file(int fd, __u64 offset) |
27 | { | 27 | { |
28 | return(os_seek_file(fd, offset)); | 28 | return(os_seek_file(fd, offset)); |
29 | } | 29 | } |
30 | 30 | ||
31 | static inline int cow_file_size(char *file, unsigned long long *size_out) | 31 | static inline int cow_file_size(char *file, __u64 *size_out) |
32 | { | 32 | { |
33 | return(os_file_size(file, size_out)); | 33 | return(os_file_size(file, size_out)); |
34 | } | 34 | } |
35 | 35 | ||
36 | static inline int cow_write_file(int fd, char *buf, int size) | 36 | static inline int cow_write_file(int fd, void *buf, int size) |
37 | { | 37 | { |
38 | return(os_write_file(fd, buf, size)); | 38 | return(os_write_file(fd, buf, size)); |
39 | } | 39 | } |
diff --git a/arch/um/drivers/cow_user.c b/arch/um/drivers/cow_user.c index fbe2217db5dd..61951b721268 100644 --- a/arch/um/drivers/cow_user.c +++ b/arch/um/drivers/cow_user.c | |||
@@ -176,7 +176,7 @@ int write_cow_header(char *cow_file, int fd, char *backing_file, | |||
176 | err = -ENOMEM; | 176 | err = -ENOMEM; |
177 | header = cow_malloc(sizeof(*header)); | 177 | header = cow_malloc(sizeof(*header)); |
178 | if(header == NULL){ | 178 | if(header == NULL){ |
179 | cow_printf("Failed to allocate COW V3 header\n"); | 179 | cow_printf("write_cow_header - failed to allocate COW V3 header\n"); |
180 | goto out; | 180 | goto out; |
181 | } | 181 | } |
182 | header->magic = htonl(COW_MAGIC); | 182 | header->magic = htonl(COW_MAGIC); |
@@ -196,15 +196,17 @@ int write_cow_header(char *cow_file, int fd, char *backing_file, | |||
196 | 196 | ||
197 | err = os_file_modtime(header->backing_file, &modtime); | 197 | err = os_file_modtime(header->backing_file, &modtime); |
198 | if(err < 0){ | 198 | if(err < 0){ |
199 | cow_printf("Backing file '%s' mtime request failed, " | 199 | cow_printf("write_cow_header - backing file '%s' mtime " |
200 | "err = %d\n", header->backing_file, -err); | 200 | "request failed, err = %d\n", header->backing_file, |
201 | -err); | ||
201 | goto out_free; | 202 | goto out_free; |
202 | } | 203 | } |
203 | 204 | ||
204 | err = cow_file_size(header->backing_file, size); | 205 | err = cow_file_size(header->backing_file, size); |
205 | if(err < 0){ | 206 | if(err < 0){ |
206 | cow_printf("Couldn't get size of backing file '%s', " | 207 | cow_printf("write_cow_header - couldn't get size of " |
207 | "err = %d\n", header->backing_file, -err); | 208 | "backing file '%s', err = %d\n", |
209 | header->backing_file, -err); | ||
208 | goto out_free; | 210 | goto out_free; |
209 | } | 211 | } |
210 | 212 | ||
@@ -214,10 +216,11 @@ int write_cow_header(char *cow_file, int fd, char *backing_file, | |||
214 | header->alignment = htonl(alignment); | 216 | header->alignment = htonl(alignment); |
215 | header->cow_format = COW_BITMAP; | 217 | header->cow_format = COW_BITMAP; |
216 | 218 | ||
217 | err = os_write_file(fd, header, sizeof(*header)); | 219 | err = cow_write_file(fd, header, sizeof(*header)); |
218 | if(err != sizeof(*header)){ | 220 | if(err != sizeof(*header)){ |
219 | cow_printf("Write of header to new COW file '%s' failed, " | 221 | cow_printf("write_cow_header - write of header to " |
220 | "err = %d\n", cow_file, -err); | 222 | "new COW file '%s' failed, err = %d\n", cow_file, |
223 | -err); | ||
221 | goto out_free; | 224 | goto out_free; |
222 | } | 225 | } |
223 | err = 0; | 226 | err = 0; |
@@ -299,7 +302,7 @@ int read_cow_header(int (*reader)(__u64, char *, int, void *), void *arg, | |||
299 | } | 302 | } |
300 | else if(version == 3){ | 303 | else if(version == 3){ |
301 | if(n < sizeof(header->v3)){ | 304 | if(n < sizeof(header->v3)){ |
302 | cow_printf("read_cow_header - failed to read V2 " | 305 | cow_printf("read_cow_header - failed to read V3 " |
303 | "header\n"); | 306 | "header\n"); |
304 | goto out; | 307 | goto out; |
305 | } | 308 | } |
@@ -359,7 +362,8 @@ int init_cow_file(int fd, char *cow_file, char *backing_file, int sectorsize, | |||
359 | if(err != sizeof(zero)){ | 362 | if(err != sizeof(zero)){ |
360 | cow_printf("Write of bitmap to new COW file '%s' failed, " | 363 | cow_printf("Write of bitmap to new COW file '%s' failed, " |
361 | "err = %d\n", cow_file, -err); | 364 | "err = %d\n", cow_file, -err); |
362 | err = -EINVAL; | 365 | if (err >= 0) |
366 | err = -EINVAL; | ||
363 | goto out; | 367 | goto out; |
364 | } | 368 | } |
365 | 369 | ||
diff --git a/arch/um/drivers/daemon_kern.c b/arch/um/drivers/daemon_kern.c index 507e3cbac9d3..a61b7b46bc02 100644 --- a/arch/um/drivers/daemon_kern.c +++ b/arch/um/drivers/daemon_kern.c | |||
@@ -18,7 +18,7 @@ struct daemon_init { | |||
18 | char *ctl_sock; | 18 | char *ctl_sock; |
19 | }; | 19 | }; |
20 | 20 | ||
21 | void daemon_init(struct net_device *dev, void *data) | 21 | static void daemon_init(struct net_device *dev, void *data) |
22 | { | 22 | { |
23 | struct uml_net_private *pri; | 23 | struct uml_net_private *pri; |
24 | struct daemon_data *dpri; | 24 | struct daemon_data *dpri; |
@@ -64,7 +64,7 @@ static struct net_kern_info daemon_kern_info = { | |||
64 | .write = daemon_write, | 64 | .write = daemon_write, |
65 | }; | 65 | }; |
66 | 66 | ||
67 | int daemon_setup(char *str, char **mac_out, void *data) | 67 | static int daemon_setup(char *str, char **mac_out, void *data) |
68 | { | 68 | { |
69 | struct daemon_init *init = data; | 69 | struct daemon_init *init = data; |
70 | char *remain; | 70 | char *remain; |
diff --git a/arch/um/drivers/line.c b/arch/um/drivers/line.c index 46ceb25a9959..6c2d4ccaf20f 100644 --- a/arch/um/drivers/line.c +++ b/arch/um/drivers/line.c | |||
@@ -714,7 +714,7 @@ struct winch { | |||
714 | struct tty_struct *tty; | 714 | struct tty_struct *tty; |
715 | }; | 715 | }; |
716 | 716 | ||
717 | irqreturn_t winch_interrupt(int irq, void *data, struct pt_regs *unused) | 717 | static irqreturn_t winch_interrupt(int irq, void *data, struct pt_regs *unused) |
718 | { | 718 | { |
719 | struct winch *winch = data; | 719 | struct winch *winch = data; |
720 | struct tty_struct *tty; | 720 | struct tty_struct *tty; |
diff --git a/arch/um/drivers/mcast_kern.c b/arch/um/drivers/mcast_kern.c index 217438cdef33..c9b078fba03e 100644 --- a/arch/um/drivers/mcast_kern.c +++ b/arch/um/drivers/mcast_kern.c | |||
@@ -26,7 +26,7 @@ struct mcast_init { | |||
26 | int ttl; | 26 | int ttl; |
27 | }; | 27 | }; |
28 | 28 | ||
29 | void mcast_init(struct net_device *dev, void *data) | 29 | static void mcast_init(struct net_device *dev, void *data) |
30 | { | 30 | { |
31 | struct uml_net_private *pri; | 31 | struct uml_net_private *pri; |
32 | struct mcast_data *dpri; | 32 | struct mcast_data *dpri; |
@@ -40,7 +40,7 @@ void mcast_init(struct net_device *dev, void *data) | |||
40 | dpri->dev = dev; | 40 | dpri->dev = dev; |
41 | 41 | ||
42 | printk("mcast backend "); | 42 | printk("mcast backend "); |
43 | printk("multicast adddress: %s:%u, TTL:%u ", | 43 | printk("multicast address: %s:%u, TTL:%u ", |
44 | dpri->addr, dpri->port, dpri->ttl); | 44 | dpri->addr, dpri->port, dpri->ttl); |
45 | 45 | ||
46 | printk("\n"); | 46 | printk("\n"); |
diff --git a/arch/um/drivers/mconsole_kern.c b/arch/um/drivers/mconsole_kern.c index e3d576567172..54388d10bcf9 100644 --- a/arch/um/drivers/mconsole_kern.c +++ b/arch/um/drivers/mconsole_kern.c | |||
@@ -273,7 +273,7 @@ void mconsole_proc(struct mc_request *req) | |||
273 | config <dev> - Query the configuration of a device \n\ | 273 | config <dev> - Query the configuration of a device \n\ |
274 | remove <dev> - Remove a device from UML \n\ | 274 | remove <dev> - Remove a device from UML \n\ |
275 | sysrq <letter> - Performs the SysRq action controlled by the letter \n\ | 275 | sysrq <letter> - Performs the SysRq action controlled by the letter \n\ |
276 | cad - invoke the Ctl-Alt-Del handler \n\ | 276 | cad - invoke the Ctrl-Alt-Del handler \n\ |
277 | stop - pause the UML; it will do nothing until it receives a 'go' \n\ | 277 | stop - pause the UML; it will do nothing until it receives a 'go' \n\ |
278 | go - continue the UML after a 'stop' \n\ | 278 | go - continue the UML after a 'stop' \n\ |
279 | log <string> - make UML enter <string> into the kernel log\n\ | 279 | log <string> - make UML enter <string> into the kernel log\n\ |
@@ -327,7 +327,7 @@ void mconsole_stop(struct mc_request *req) | |||
327 | 327 | ||
328 | /* This list is populated by __initcall routines. */ | 328 | /* This list is populated by __initcall routines. */ |
329 | 329 | ||
330 | LIST_HEAD(mconsole_devices); | 330 | static LIST_HEAD(mconsole_devices); |
331 | 331 | ||
332 | void mconsole_register_dev(struct mc_device *new) | 332 | void mconsole_register_dev(struct mc_device *new) |
333 | { | 333 | { |
@@ -561,6 +561,8 @@ void mconsole_sysrq(struct mc_request *req) | |||
561 | } | 561 | } |
562 | #endif | 562 | #endif |
563 | 563 | ||
564 | #ifdef CONFIG_MODE_SKAS | ||
565 | |||
564 | static void stack_proc(void *arg) | 566 | static void stack_proc(void *arg) |
565 | { | 567 | { |
566 | struct task_struct *from = current, *to = arg; | 568 | struct task_struct *from = current, *to = arg; |
@@ -574,7 +576,7 @@ static void stack_proc(void *arg) | |||
574 | * Dumps a stacks registers to the linux console. | 576 | * Dumps a stacks registers to the linux console. |
575 | * Usage stack <pid>. | 577 | * Usage stack <pid>. |
576 | */ | 578 | */ |
577 | void do_stack(struct mc_request *req) | 579 | static void do_stack_trace(struct mc_request *req) |
578 | { | 580 | { |
579 | char *ptr = req->request.data; | 581 | char *ptr = req->request.data; |
580 | int pid_requested= -1; | 582 | int pid_requested= -1; |
@@ -605,6 +607,7 @@ void do_stack(struct mc_request *req) | |||
605 | } | 607 | } |
606 | with_console(req, stack_proc, to); | 608 | with_console(req, stack_proc, to); |
607 | } | 609 | } |
610 | #endif /* CONFIG_MODE_SKAS */ | ||
608 | 611 | ||
609 | void mconsole_stack(struct mc_request *req) | 612 | void mconsole_stack(struct mc_request *req) |
610 | { | 613 | { |
@@ -613,7 +616,7 @@ void mconsole_stack(struct mc_request *req) | |||
613 | */ | 616 | */ |
614 | CHOOSE_MODE(mconsole_reply(req, "Sorry, this doesn't work in TT mode", | 617 | CHOOSE_MODE(mconsole_reply(req, "Sorry, this doesn't work in TT mode", |
615 | 1, 0), | 618 | 1, 0), |
616 | do_stack(req)); | 619 | do_stack_trace(req)); |
617 | } | 620 | } |
618 | 621 | ||
619 | /* Changed by mconsole_setup, which is __setup, and called before SMP is | 622 | /* Changed by mconsole_setup, which is __setup, and called before SMP is |
diff --git a/arch/um/drivers/net_kern.c b/arch/um/drivers/net_kern.c index 8ebb2241ad42..8c7279bb353b 100644 --- a/arch/um/drivers/net_kern.c +++ b/arch/um/drivers/net_kern.c | |||
@@ -131,9 +131,8 @@ static int uml_net_open(struct net_device *dev) | |||
131 | SA_INTERRUPT | SA_SHIRQ, dev->name, dev); | 131 | SA_INTERRUPT | SA_SHIRQ, dev->name, dev); |
132 | if(err != 0){ | 132 | if(err != 0){ |
133 | printk(KERN_ERR "uml_net_open: failed to get irq(%d)\n", err); | 133 | printk(KERN_ERR "uml_net_open: failed to get irq(%d)\n", err); |
134 | if(lp->close != NULL) (*lp->close)(lp->fd, &lp->user); | ||
135 | lp->fd = -1; | ||
136 | err = -ENETUNREACH; | 134 | err = -ENETUNREACH; |
135 | goto out_close; | ||
137 | } | 136 | } |
138 | 137 | ||
139 | lp->tl.data = (unsigned long) &lp->user; | 138 | lp->tl.data = (unsigned long) &lp->user; |
@@ -145,9 +144,19 @@ static int uml_net_open(struct net_device *dev) | |||
145 | */ | 144 | */ |
146 | while((err = uml_net_rx(dev)) > 0) ; | 145 | while((err = uml_net_rx(dev)) > 0) ; |
147 | 146 | ||
148 | out: | ||
149 | spin_unlock(&lp->lock); | 147 | spin_unlock(&lp->lock); |
150 | return(err); | 148 | |
149 | spin_lock(&opened_lock); | ||
150 | list_add(&lp->list, &opened); | ||
151 | spin_unlock(&opened_lock); | ||
152 | |||
153 | return 0; | ||
154 | out_close: | ||
155 | if(lp->close != NULL) (*lp->close)(lp->fd, &lp->user); | ||
156 | lp->fd = -1; | ||
157 | out: | ||
158 | spin_unlock(&lp->lock); | ||
159 | return err; | ||
151 | } | 160 | } |
152 | 161 | ||
153 | static int uml_net_close(struct net_device *dev) | 162 | static int uml_net_close(struct net_device *dev) |
@@ -161,9 +170,13 @@ static int uml_net_close(struct net_device *dev) | |||
161 | if(lp->close != NULL) | 170 | if(lp->close != NULL) |
162 | (*lp->close)(lp->fd, &lp->user); | 171 | (*lp->close)(lp->fd, &lp->user); |
163 | lp->fd = -1; | 172 | lp->fd = -1; |
164 | list_del(&lp->list); | ||
165 | 173 | ||
166 | spin_unlock(&lp->lock); | 174 | spin_unlock(&lp->lock); |
175 | |||
176 | spin_lock(&opened_lock); | ||
177 | list_del(&lp->list); | ||
178 | spin_unlock(&opened_lock); | ||
179 | |||
167 | return 0; | 180 | return 0; |
168 | } | 181 | } |
169 | 182 | ||
@@ -410,11 +423,7 @@ static int eth_configure(int n, void *init, char *mac, | |||
410 | if (device->have_mac) | 423 | if (device->have_mac) |
411 | set_ether_mac(dev, device->mac); | 424 | set_ether_mac(dev, device->mac); |
412 | 425 | ||
413 | spin_lock(&opened_lock); | 426 | return 0; |
414 | list_add(&lp->list, &opened); | ||
415 | spin_unlock(&opened_lock); | ||
416 | |||
417 | return(0); | ||
418 | } | 427 | } |
419 | 428 | ||
420 | static struct uml_net *find_device(int n) | 429 | static struct uml_net *find_device(int n) |
diff --git a/arch/um/drivers/net_user.c b/arch/um/drivers/net_user.c index 098fa65981ab..0e2f06187ea7 100644 --- a/arch/um/drivers/net_user.c +++ b/arch/um/drivers/net_user.c | |||
@@ -47,10 +47,12 @@ void tap_check_ips(char *gate_addr, unsigned char *eth_addr) | |||
47 | } | 47 | } |
48 | } | 48 | } |
49 | 49 | ||
50 | /* Do reliable error handling as this fails frequently enough. */ | ||
50 | void read_output(int fd, char *output, int len) | 51 | void read_output(int fd, char *output, int len) |
51 | { | 52 | { |
52 | int remain, n, actual; | 53 | int remain, ret, expected; |
53 | char c; | 54 | char c; |
55 | char *str; | ||
54 | 56 | ||
55 | if(output == NULL){ | 57 | if(output == NULL){ |
56 | output = &c; | 58 | output = &c; |
@@ -58,23 +60,31 @@ void read_output(int fd, char *output, int len) | |||
58 | } | 60 | } |
59 | 61 | ||
60 | *output = '\0'; | 62 | *output = '\0'; |
61 | n = os_read_file(fd, &remain, sizeof(remain)); | 63 | ret = os_read_file(fd, &remain, sizeof(remain)); |
62 | if(n != sizeof(remain)){ | 64 | |
63 | printk("read_output - read of length failed, err = %d\n", -n); | 65 | if (ret != sizeof(remain)) { |
64 | return; | 66 | expected = sizeof(remain); |
67 | str = "length"; | ||
68 | goto err; | ||
65 | } | 69 | } |
66 | 70 | ||
67 | while(remain != 0){ | 71 | while(remain != 0){ |
68 | n = (remain < len) ? remain : len; | 72 | expected = (remain < len) ? remain : len; |
69 | actual = os_read_file(fd, output, n); | 73 | ret = os_read_file(fd, output, expected); |
70 | if(actual != n){ | 74 | if (ret != expected) { |
71 | printk("read_output - read of data failed, " | 75 | str = "data"; |
72 | "err = %d\n", -actual); | 76 | goto err; |
73 | return; | ||
74 | } | 77 | } |
75 | remain -= actual; | 78 | remain -= ret; |
76 | } | 79 | } |
80 | |||
77 | return; | 81 | return; |
82 | |||
83 | err: | ||
84 | if (ret < 0) | ||
85 | printk("read_output - read of %s failed, errno = %d\n", str, -ret); | ||
86 | else | ||
87 | printk("read_output - read of %s failed, read only %d of %d bytes\n", str, ret, expected); | ||
78 | } | 88 | } |
79 | 89 | ||
80 | int net_read(int fd, void *buf, int len) | 90 | int net_read(int fd, void *buf, int len) |
diff --git a/arch/um/drivers/slip_common.h b/arch/um/drivers/slip_common.h index 2ae76d8f1be1..d574e0a9dc13 100644 --- a/arch/um/drivers/slip_common.h +++ b/arch/um/drivers/slip_common.h | |||
@@ -88,12 +88,13 @@ struct slip_proto { | |||
88 | int esc; | 88 | int esc; |
89 | }; | 89 | }; |
90 | 90 | ||
91 | #define SLIP_PROTO_INIT { \ | 91 | static inline void slip_proto_init(struct slip_proto * slip) |
92 | .ibuf = { '\0' }, \ | 92 | { |
93 | .obuf = { '\0' }, \ | 93 | memset(slip->ibuf, 0, sizeof(slip->ibuf)); |
94 | .more = 0, \ | 94 | memset(slip->obuf, 0, sizeof(slip->obuf)); |
95 | .pos = 0, \ | 95 | slip->more = 0; |
96 | .esc = 0 \ | 96 | slip->pos = 0; |
97 | slip->esc = 0; | ||
97 | } | 98 | } |
98 | 99 | ||
99 | extern int slip_proto_read(int fd, void *buf, int len, | 100 | extern int slip_proto_read(int fd, void *buf, int len, |
diff --git a/arch/um/drivers/slip_kern.c b/arch/um/drivers/slip_kern.c index 9a6f5c85f902..a62f5ef445cf 100644 --- a/arch/um/drivers/slip_kern.c +++ b/arch/um/drivers/slip_kern.c | |||
@@ -21,13 +21,14 @@ void slip_init(struct net_device *dev, void *data) | |||
21 | 21 | ||
22 | private = dev->priv; | 22 | private = dev->priv; |
23 | spri = (struct slip_data *) private->user; | 23 | spri = (struct slip_data *) private->user; |
24 | *spri = ((struct slip_data) | 24 | |
25 | { .name = { '\0' }, | 25 | memset(spri->name, 0, sizeof(spri->name)); |
26 | .addr = NULL, | 26 | spri->addr = NULL; |
27 | .gate_addr = init->gate_addr, | 27 | spri->gate_addr = init->gate_addr; |
28 | .slave = -1, | 28 | spri->slave = -1; |
29 | .slip = SLIP_PROTO_INIT, | 29 | spri->dev = dev; |
30 | .dev = dev }); | 30 | |
31 | slip_proto_init(&spri->slip); | ||
31 | 32 | ||
32 | dev->init = NULL; | 33 | dev->init = NULL; |
33 | dev->header_cache_update = NULL; | 34 | dev->header_cache_update = NULL; |
diff --git a/arch/um/drivers/slirp_kern.c b/arch/um/drivers/slirp_kern.c index 9864d27afdbe..33d7982be5d3 100644 --- a/arch/um/drivers/slirp_kern.c +++ b/arch/um/drivers/slirp_kern.c | |||
@@ -21,12 +21,13 @@ void slirp_init(struct net_device *dev, void *data) | |||
21 | 21 | ||
22 | private = dev->priv; | 22 | private = dev->priv; |
23 | spri = (struct slirp_data *) private->user; | 23 | spri = (struct slirp_data *) private->user; |
24 | *spri = ((struct slirp_data) | 24 | |
25 | { .argw = init->argw, | 25 | spri->argw = init->argw; |
26 | .pid = -1, | 26 | spri->pid = -1; |
27 | .slave = -1, | 27 | spri->slave = -1; |
28 | .slip = SLIP_PROTO_INIT, | 28 | spri->dev = dev; |
29 | .dev = dev }); | 29 | |
30 | slip_proto_init(&spri->slip); | ||
30 | 31 | ||
31 | dev->init = NULL; | 32 | dev->init = NULL; |
32 | dev->hard_header_len = 0; | 33 | dev->hard_header_len = 0; |
diff --git a/arch/um/drivers/ssl.c b/arch/um/drivers/ssl.c index a32ef55cb244..a4d6415bc8c4 100644 --- a/arch/um/drivers/ssl.c +++ b/arch/um/drivers/ssl.c | |||
@@ -33,7 +33,7 @@ static struct tty_driver *ssl_driver; | |||
33 | 33 | ||
34 | #define NR_PORTS 64 | 34 | #define NR_PORTS 64 |
35 | 35 | ||
36 | void ssl_announce(char *dev_name, int dev) | 36 | static void ssl_announce(char *dev_name, int dev) |
37 | { | 37 | { |
38 | printk(KERN_INFO "Serial line %d assigned device '%s'\n", dev, | 38 | printk(KERN_INFO "Serial line %d assigned device '%s'\n", dev, |
39 | dev_name); | 39 | dev_name); |
@@ -98,7 +98,7 @@ static int ssl_remove(int n) | |||
98 | return line_remove(serial_lines, ARRAY_SIZE(serial_lines), n); | 98 | return line_remove(serial_lines, ARRAY_SIZE(serial_lines), n); |
99 | } | 99 | } |
100 | 100 | ||
101 | int ssl_open(struct tty_struct *tty, struct file *filp) | 101 | static int ssl_open(struct tty_struct *tty, struct file *filp) |
102 | { | 102 | { |
103 | return line_open(serial_lines, tty); | 103 | return line_open(serial_lines, tty); |
104 | } | 104 | } |
@@ -182,7 +182,7 @@ static struct console ssl_cons = { | |||
182 | .index = -1, | 182 | .index = -1, |
183 | }; | 183 | }; |
184 | 184 | ||
185 | int ssl_init(void) | 185 | static int ssl_init(void) |
186 | { | 186 | { |
187 | char *new_title; | 187 | char *new_title; |
188 | 188 | ||
diff --git a/arch/um/drivers/ubd_kern.c b/arch/um/drivers/ubd_kern.c index 101efd26d467..fa617e0719ab 100644 --- a/arch/um/drivers/ubd_kern.c +++ b/arch/um/drivers/ubd_kern.c | |||
@@ -1135,7 +1135,7 @@ static int path_requires_switch(char *from_cmdline, char *from_cow, char *cow) | |||
1135 | static int backing_file_mismatch(char *file, __u64 size, time_t mtime) | 1135 | static int backing_file_mismatch(char *file, __u64 size, time_t mtime) |
1136 | { | 1136 | { |
1137 | unsigned long modtime; | 1137 | unsigned long modtime; |
1138 | long long actual; | 1138 | unsigned long long actual; |
1139 | int err; | 1139 | int err; |
1140 | 1140 | ||
1141 | err = os_file_modtime(file, &modtime); | 1141 | err = os_file_modtime(file, &modtime); |
diff --git a/arch/um/include/init.h b/arch/um/include/init.h index cbd79a8d213d..d4de7c0120ce 100644 --- a/arch/um/include/init.h +++ b/arch/um/include/init.h | |||
@@ -122,7 +122,7 @@ extern struct uml_param __uml_setup_start, __uml_setup_end; | |||
122 | 122 | ||
123 | #define __exitcall(fn) static exitcall_t __exitcall_##fn __exit_call = fn | 123 | #define __exitcall(fn) static exitcall_t __exitcall_##fn __exit_call = fn |
124 | 124 | ||
125 | #define __init_call __attribute__ ((unused,__section__ (".initcall.init"))) | 125 | #define __init_call __attribute_used__ __attribute__ ((__section__ (".initcall.init"))) |
126 | 126 | ||
127 | #endif | 127 | #endif |
128 | 128 | ||
diff --git a/arch/um/include/kern_util.h b/arch/um/include/kern_util.h index c649108a9e9f..07176d92e1c9 100644 --- a/arch/um/include/kern_util.h +++ b/arch/um/include/kern_util.h | |||
@@ -31,8 +31,6 @@ extern int timer_irq_inited; | |||
31 | extern int jail; | 31 | extern int jail; |
32 | extern int nsyscalls; | 32 | extern int nsyscalls; |
33 | 33 | ||
34 | extern struct task_struct *idle_threads[NR_CPUS]; | ||
35 | |||
36 | #define UML_ROUND_DOWN(addr) ((void *)(((unsigned long) addr) & PAGE_MASK)) | 34 | #define UML_ROUND_DOWN(addr) ((void *)(((unsigned long) addr) & PAGE_MASK)) |
37 | #define UML_ROUND_UP(addr) \ | 35 | #define UML_ROUND_UP(addr) \ |
38 | UML_ROUND_DOWN(((unsigned long) addr) + PAGE_SIZE - 1) | 36 | UML_ROUND_DOWN(((unsigned long) addr) + PAGE_SIZE - 1) |
diff --git a/arch/um/include/os.h b/arch/um/include/os.h index eb1710b81255..2a1c64d8d0bf 100644 --- a/arch/um/include/os.h +++ b/arch/um/include/os.h | |||
@@ -179,8 +179,11 @@ extern void os_stop_process(int pid); | |||
179 | extern void os_kill_process(int pid, int reap_child); | 179 | extern void os_kill_process(int pid, int reap_child); |
180 | extern void os_kill_ptraced_process(int pid, int reap_child); | 180 | extern void os_kill_ptraced_process(int pid, int reap_child); |
181 | extern void os_usr1_process(int pid); | 181 | extern void os_usr1_process(int pid); |
182 | extern long os_ptrace_ldt(long pid, long addr, long data); | ||
183 | |||
182 | extern int os_getpid(void); | 184 | extern int os_getpid(void); |
183 | extern int os_getpgrp(void); | 185 | extern int os_getpgrp(void); |
186 | |||
184 | extern void init_new_thread_stack(void *sig_stack, void (*usr1_handler)(int)); | 187 | extern void init_new_thread_stack(void *sig_stack, void (*usr1_handler)(int)); |
185 | extern void init_new_thread_signals(int altstack); | 188 | extern void init_new_thread_signals(int altstack); |
186 | extern int run_kernel_thread(int (*fn)(void *), void *arg, void **jmp_ptr); | 189 | extern int run_kernel_thread(int (*fn)(void *), void *arg, void **jmp_ptr); |
diff --git a/arch/um/include/registers.h b/arch/um/include/registers.h index 4892e5fcef07..83b688ca198f 100644 --- a/arch/um/include/registers.h +++ b/arch/um/include/registers.h | |||
@@ -14,7 +14,7 @@ extern int restore_fp_registers(int pid, unsigned long *fp_regs); | |||
14 | extern void save_registers(int pid, union uml_pt_regs *regs); | 14 | extern void save_registers(int pid, union uml_pt_regs *regs); |
15 | extern void restore_registers(int pid, union uml_pt_regs *regs); | 15 | extern void restore_registers(int pid, union uml_pt_regs *regs); |
16 | extern void init_registers(int pid); | 16 | extern void init_registers(int pid); |
17 | extern void get_safe_registers(unsigned long * regs); | 17 | extern void get_safe_registers(unsigned long * regs, unsigned long * fp_regs); |
18 | extern void get_thread_regs(union uml_pt_regs *uml_regs, void *buffer); | 18 | extern void get_thread_regs(union uml_pt_regs *uml_regs, void *buffer); |
19 | 19 | ||
20 | #endif | 20 | #endif |
diff --git a/arch/um/kernel/exec_kern.c b/arch/um/kernel/exec_kern.c index 569fe8b9b053..c264e1c05ab3 100644 --- a/arch/um/kernel/exec_kern.c +++ b/arch/um/kernel/exec_kern.c | |||
@@ -33,7 +33,7 @@ void start_thread(struct pt_regs *regs, unsigned long eip, unsigned long esp) | |||
33 | extern void log_exec(char **argv, void *tty); | 33 | extern void log_exec(char **argv, void *tty); |
34 | 34 | ||
35 | static long execve1(char *file, char __user * __user *argv, | 35 | static long execve1(char *file, char __user * __user *argv, |
36 | char *__user __user *env) | 36 | char __user *__user *env) |
37 | { | 37 | { |
38 | long error; | 38 | long error; |
39 | 39 | ||
diff --git a/arch/um/kernel/physmem.c b/arch/um/kernel/physmem.c index f3b583a878a6..544665e04513 100644 --- a/arch/um/kernel/physmem.c +++ b/arch/um/kernel/physmem.c | |||
@@ -265,7 +265,7 @@ int init_maps(unsigned long physmem, unsigned long iomem, unsigned long highmem) | |||
265 | highmem_len = highmem_pages * sizeof(struct page); | 265 | highmem_len = highmem_pages * sizeof(struct page); |
266 | 266 | ||
267 | total_pages = phys_pages + iomem_pages + highmem_pages; | 267 | total_pages = phys_pages + iomem_pages + highmem_pages; |
268 | total_len = phys_len + iomem_pages + highmem_len; | 268 | total_len = phys_len + iomem_len + highmem_len; |
269 | 269 | ||
270 | if(kmalloc_ok){ | 270 | if(kmalloc_ok){ |
271 | map = kmalloc(total_len, GFP_KERNEL); | 271 | map = kmalloc(total_len, GFP_KERNEL); |
diff --git a/arch/um/kernel/reboot.c b/arch/um/kernel/reboot.c index 6f1a3a288117..3ef73bf2e781 100644 --- a/arch/um/kernel/reboot.c +++ b/arch/um/kernel/reboot.c | |||
@@ -5,6 +5,7 @@ | |||
5 | 5 | ||
6 | #include "linux/module.h" | 6 | #include "linux/module.h" |
7 | #include "linux/sched.h" | 7 | #include "linux/sched.h" |
8 | #include "asm/smp.h" | ||
8 | #include "user_util.h" | 9 | #include "user_util.h" |
9 | #include "kern_util.h" | 10 | #include "kern_util.h" |
10 | #include "kern.h" | 11 | #include "kern.h" |
diff --git a/arch/um/kernel/skas/process.c b/arch/um/kernel/skas/process.c deleted file mode 100644 index eea1c9c4bb0f..000000000000 --- a/arch/um/kernel/skas/process.c +++ /dev/null | |||
@@ -1,569 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2002- 2004 Jeff Dike (jdike@addtoit.com) | ||
3 | * Licensed under the GPL | ||
4 | */ | ||
5 | |||
6 | #include <stdlib.h> | ||
7 | #include <string.h> | ||
8 | #include <unistd.h> | ||
9 | #include <errno.h> | ||
10 | #include <signal.h> | ||
11 | #include <setjmp.h> | ||
12 | #include <sched.h> | ||
13 | #include <sys/wait.h> | ||
14 | #include <sys/mman.h> | ||
15 | #include <sys/user.h> | ||
16 | #include <sys/time.h> | ||
17 | #include <asm/unistd.h> | ||
18 | #include <asm/types.h> | ||
19 | #include "user.h" | ||
20 | #include "ptrace_user.h" | ||
21 | #include "sysdep/ptrace.h" | ||
22 | #include "user_util.h" | ||
23 | #include "kern_util.h" | ||
24 | #include "skas.h" | ||
25 | #include "stub-data.h" | ||
26 | #include "mm_id.h" | ||
27 | #include "sysdep/sigcontext.h" | ||
28 | #include "sysdep/stub.h" | ||
29 | #include "os.h" | ||
30 | #include "proc_mm.h" | ||
31 | #include "skas_ptrace.h" | ||
32 | #include "chan_user.h" | ||
33 | #include "registers.h" | ||
34 | #include "mem.h" | ||
35 | #include "uml-config.h" | ||
36 | #include "process.h" | ||
37 | |||
38 | int is_skas_winch(int pid, int fd, void *data) | ||
39 | { | ||
40 | if(pid != os_getpgrp()) | ||
41 | return(0); | ||
42 | |||
43 | register_winch_irq(-1, fd, -1, data); | ||
44 | return(1); | ||
45 | } | ||
46 | |||
47 | void wait_stub_done(int pid, int sig, char * fname) | ||
48 | { | ||
49 | int n, status, err; | ||
50 | |||
51 | do { | ||
52 | if ( sig != -1 ) { | ||
53 | err = ptrace(PTRACE_CONT, pid, 0, sig); | ||
54 | if(err) | ||
55 | panic("%s : continue failed, errno = %d\n", | ||
56 | fname, errno); | ||
57 | } | ||
58 | sig = 0; | ||
59 | |||
60 | CATCH_EINTR(n = waitpid(pid, &status, WUNTRACED)); | ||
61 | } while((n >= 0) && WIFSTOPPED(status) && | ||
62 | ((WSTOPSIG(status) == SIGVTALRM) || | ||
63 | /* running UML inside a detached screen can cause | ||
64 | * SIGWINCHes | ||
65 | */ | ||
66 | (WSTOPSIG(status) == SIGWINCH))); | ||
67 | |||
68 | if((n < 0) || !WIFSTOPPED(status) || | ||
69 | (WSTOPSIG(status) != SIGUSR1 && WSTOPSIG(status) != SIGTRAP)){ | ||
70 | unsigned long regs[HOST_FRAME_SIZE]; | ||
71 | if(ptrace(PTRACE_GETREGS, pid, 0, regs) < 0) | ||
72 | printk("Failed to get registers from stub, " | ||
73 | "errno = %d\n", errno); | ||
74 | else { | ||
75 | int i; | ||
76 | |||
77 | printk("Stub registers -\n"); | ||
78 | for(i = 0; i < HOST_FRAME_SIZE; i++) | ||
79 | printk("\t%d - %lx\n", i, regs[i]); | ||
80 | } | ||
81 | panic("%s : failed to wait for SIGUSR1/SIGTRAP, " | ||
82 | "pid = %d, n = %d, errno = %d, status = 0x%x\n", | ||
83 | fname, pid, n, errno, status); | ||
84 | } | ||
85 | } | ||
86 | |||
87 | void get_skas_faultinfo(int pid, struct faultinfo * fi) | ||
88 | { | ||
89 | int err; | ||
90 | |||
91 | if(ptrace_faultinfo){ | ||
92 | err = ptrace(PTRACE_FAULTINFO, pid, 0, fi); | ||
93 | if(err) | ||
94 | panic("get_skas_faultinfo - PTRACE_FAULTINFO failed, " | ||
95 | "errno = %d\n", errno); | ||
96 | |||
97 | /* Special handling for i386, which has different structs */ | ||
98 | if (sizeof(struct ptrace_faultinfo) < sizeof(struct faultinfo)) | ||
99 | memset((char *)fi + sizeof(struct ptrace_faultinfo), 0, | ||
100 | sizeof(struct faultinfo) - | ||
101 | sizeof(struct ptrace_faultinfo)); | ||
102 | } | ||
103 | else { | ||
104 | wait_stub_done(pid, SIGSEGV, "get_skas_faultinfo"); | ||
105 | |||
106 | /* faultinfo is prepared by the stub-segv-handler at start of | ||
107 | * the stub stack page. We just have to copy it. | ||
108 | */ | ||
109 | memcpy(fi, (void *)current_stub_stack(), sizeof(*fi)); | ||
110 | } | ||
111 | } | ||
112 | |||
113 | static void handle_segv(int pid, union uml_pt_regs * regs) | ||
114 | { | ||
115 | get_skas_faultinfo(pid, ®s->skas.faultinfo); | ||
116 | segv(regs->skas.faultinfo, 0, 1, NULL); | ||
117 | } | ||
118 | |||
119 | /*To use the same value of using_sysemu as the caller, ask it that value (in local_using_sysemu)*/ | ||
120 | static void handle_trap(int pid, union uml_pt_regs *regs, int local_using_sysemu) | ||
121 | { | ||
122 | int err, status; | ||
123 | |||
124 | /* Mark this as a syscall */ | ||
125 | UPT_SYSCALL_NR(regs) = PT_SYSCALL_NR(regs->skas.regs); | ||
126 | |||
127 | if (!local_using_sysemu) | ||
128 | { | ||
129 | err = ptrace(PTRACE_POKEUSR, pid, PT_SYSCALL_NR_OFFSET, __NR_getpid); | ||
130 | if(err < 0) | ||
131 | panic("handle_trap - nullifying syscall failed errno = %d\n", | ||
132 | errno); | ||
133 | |||
134 | err = ptrace(PTRACE_SYSCALL, pid, 0, 0); | ||
135 | if(err < 0) | ||
136 | panic("handle_trap - continuing to end of syscall failed, " | ||
137 | "errno = %d\n", errno); | ||
138 | |||
139 | CATCH_EINTR(err = waitpid(pid, &status, WUNTRACED)); | ||
140 | if((err < 0) || !WIFSTOPPED(status) || | ||
141 | (WSTOPSIG(status) != SIGTRAP + 0x80)) | ||
142 | panic("handle_trap - failed to wait at end of syscall, " | ||
143 | "errno = %d, status = %d\n", errno, status); | ||
144 | } | ||
145 | |||
146 | handle_syscall(regs); | ||
147 | } | ||
148 | |||
149 | extern int __syscall_stub_start; | ||
150 | int stub_code_fd = -1; | ||
151 | __u64 stub_code_offset; | ||
152 | |||
153 | static int userspace_tramp(void *stack) | ||
154 | { | ||
155 | void *addr; | ||
156 | |||
157 | ptrace(PTRACE_TRACEME, 0, 0, 0); | ||
158 | |||
159 | init_new_thread_signals(1); | ||
160 | enable_timer(); | ||
161 | |||
162 | if(!proc_mm){ | ||
163 | /* This has a pte, but it can't be mapped in with the usual | ||
164 | * tlb_flush mechanism because this is part of that mechanism | ||
165 | */ | ||
166 | addr = mmap64((void *) UML_CONFIG_STUB_CODE, page_size(), | ||
167 | PROT_EXEC, MAP_FIXED | MAP_PRIVATE, | ||
168 | stub_code_fd, stub_code_offset); | ||
169 | if(addr == MAP_FAILED){ | ||
170 | printk("mapping stub code failed, errno = %d\n", | ||
171 | errno); | ||
172 | exit(1); | ||
173 | } | ||
174 | |||
175 | if(stack != NULL){ | ||
176 | int fd; | ||
177 | __u64 offset; | ||
178 | |||
179 | fd = phys_mapping(to_phys(stack), &offset); | ||
180 | addr = mmap((void *) UML_CONFIG_STUB_DATA, page_size(), | ||
181 | PROT_READ | PROT_WRITE, | ||
182 | MAP_FIXED | MAP_SHARED, fd, offset); | ||
183 | if(addr == MAP_FAILED){ | ||
184 | printk("mapping stub stack failed, " | ||
185 | "errno = %d\n", errno); | ||
186 | exit(1); | ||
187 | } | ||
188 | } | ||
189 | } | ||
190 | if(!ptrace_faultinfo){ | ||
191 | unsigned long v = UML_CONFIG_STUB_CODE + | ||
192 | (unsigned long) stub_segv_handler - | ||
193 | (unsigned long) &__syscall_stub_start; | ||
194 | |||
195 | set_sigstack((void *) UML_CONFIG_STUB_DATA, page_size()); | ||
196 | set_handler(SIGSEGV, (void *) v, SA_ONSTACK, | ||
197 | SIGIO, SIGWINCH, SIGALRM, SIGVTALRM, | ||
198 | SIGUSR1, -1); | ||
199 | } | ||
200 | |||
201 | os_stop_process(os_getpid()); | ||
202 | return(0); | ||
203 | } | ||
204 | |||
205 | /* Each element set once, and only accessed by a single processor anyway */ | ||
206 | #undef NR_CPUS | ||
207 | #define NR_CPUS 1 | ||
208 | int userspace_pid[NR_CPUS]; | ||
209 | |||
210 | int start_userspace(unsigned long stub_stack) | ||
211 | { | ||
212 | void *stack; | ||
213 | unsigned long sp; | ||
214 | int pid, status, n, flags; | ||
215 | |||
216 | if ( stub_code_fd == -1 ) | ||
217 | stub_code_fd = phys_mapping(to_phys(&__syscall_stub_start), | ||
218 | &stub_code_offset); | ||
219 | |||
220 | stack = mmap(NULL, PAGE_SIZE, PROT_READ | PROT_WRITE | PROT_EXEC, | ||
221 | MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); | ||
222 | if(stack == MAP_FAILED) | ||
223 | panic("start_userspace : mmap failed, errno = %d", errno); | ||
224 | sp = (unsigned long) stack + PAGE_SIZE - sizeof(void *); | ||
225 | |||
226 | flags = CLONE_FILES | SIGCHLD; | ||
227 | if(proc_mm) flags |= CLONE_VM; | ||
228 | pid = clone(userspace_tramp, (void *) sp, flags, (void *) stub_stack); | ||
229 | if(pid < 0) | ||
230 | panic("start_userspace : clone failed, errno = %d", errno); | ||
231 | |||
232 | do { | ||
233 | CATCH_EINTR(n = waitpid(pid, &status, WUNTRACED)); | ||
234 | if(n < 0) | ||
235 | panic("start_userspace : wait failed, errno = %d", | ||
236 | errno); | ||
237 | } while(WIFSTOPPED(status) && (WSTOPSIG(status) == SIGVTALRM)); | ||
238 | |||
239 | if(!WIFSTOPPED(status) || (WSTOPSIG(status) != SIGSTOP)) | ||
240 | panic("start_userspace : expected SIGSTOP, got status = %d", | ||
241 | status); | ||
242 | |||
243 | if (ptrace(PTRACE_OLDSETOPTIONS, pid, NULL, (void *)PTRACE_O_TRACESYSGOOD) < 0) | ||
244 | panic("start_userspace : PTRACE_SETOPTIONS failed, errno=%d\n", | ||
245 | errno); | ||
246 | |||
247 | if(munmap(stack, PAGE_SIZE) < 0) | ||
248 | panic("start_userspace : munmap failed, errno = %d\n", errno); | ||
249 | |||
250 | return(pid); | ||
251 | } | ||
252 | |||
253 | void userspace(union uml_pt_regs *regs) | ||
254 | { | ||
255 | int err, status, op, pid = userspace_pid[0]; | ||
256 | int local_using_sysemu; /*To prevent races if using_sysemu changes under us.*/ | ||
257 | |||
258 | while(1){ | ||
259 | restore_registers(pid, regs); | ||
260 | |||
261 | /* Now we set local_using_sysemu to be used for one loop */ | ||
262 | local_using_sysemu = get_using_sysemu(); | ||
263 | |||
264 | op = SELECT_PTRACE_OPERATION(local_using_sysemu, singlestepping(NULL)); | ||
265 | |||
266 | err = ptrace(op, pid, 0, 0); | ||
267 | if(err) | ||
268 | panic("userspace - could not resume userspace process, " | ||
269 | "pid=%d, ptrace operation = %d, errno = %d\n", | ||
270 | op, errno); | ||
271 | |||
272 | CATCH_EINTR(err = waitpid(pid, &status, WUNTRACED)); | ||
273 | if(err < 0) | ||
274 | panic("userspace - waitpid failed, errno = %d\n", | ||
275 | errno); | ||
276 | |||
277 | regs->skas.is_user = 1; | ||
278 | save_registers(pid, regs); | ||
279 | UPT_SYSCALL_NR(regs) = -1; /* Assume: It's not a syscall */ | ||
280 | |||
281 | if(WIFSTOPPED(status)){ | ||
282 | switch(WSTOPSIG(status)){ | ||
283 | case SIGSEGV: | ||
284 | if(PTRACE_FULL_FAULTINFO || !ptrace_faultinfo) | ||
285 | user_signal(SIGSEGV, regs, pid); | ||
286 | else handle_segv(pid, regs); | ||
287 | break; | ||
288 | case SIGTRAP + 0x80: | ||
289 | handle_trap(pid, regs, local_using_sysemu); | ||
290 | break; | ||
291 | case SIGTRAP: | ||
292 | relay_signal(SIGTRAP, regs); | ||
293 | break; | ||
294 | case SIGIO: | ||
295 | case SIGVTALRM: | ||
296 | case SIGILL: | ||
297 | case SIGBUS: | ||
298 | case SIGFPE: | ||
299 | case SIGWINCH: | ||
300 | user_signal(WSTOPSIG(status), regs, pid); | ||
301 | break; | ||
302 | default: | ||
303 | printk("userspace - child stopped with signal " | ||
304 | "%d\n", WSTOPSIG(status)); | ||
305 | } | ||
306 | pid = userspace_pid[0]; | ||
307 | interrupt_end(); | ||
308 | |||
309 | /* Avoid -ERESTARTSYS handling in host */ | ||
310 | PT_SYSCALL_NR(regs->skas.regs) = -1; | ||
311 | } | ||
312 | } | ||
313 | } | ||
314 | #define INIT_JMP_NEW_THREAD 0 | ||
315 | #define INIT_JMP_REMOVE_SIGSTACK 1 | ||
316 | #define INIT_JMP_CALLBACK 2 | ||
317 | #define INIT_JMP_HALT 3 | ||
318 | #define INIT_JMP_REBOOT 4 | ||
319 | |||
320 | |||
321 | int copy_context_skas0(unsigned long new_stack, int pid) | ||
322 | { | ||
323 | int err; | ||
324 | unsigned long regs[MAX_REG_NR]; | ||
325 | unsigned long current_stack = current_stub_stack(); | ||
326 | struct stub_data *data = (struct stub_data *) current_stack; | ||
327 | struct stub_data *child_data = (struct stub_data *) new_stack; | ||
328 | __u64 new_offset; | ||
329 | int new_fd = phys_mapping(to_phys((void *)new_stack), &new_offset); | ||
330 | |||
331 | /* prepare offset and fd of child's stack as argument for parent's | ||
332 | * and child's mmap2 calls | ||
333 | */ | ||
334 | *data = ((struct stub_data) { .offset = MMAP_OFFSET(new_offset), | ||
335 | .fd = new_fd, | ||
336 | .timer = ((struct itimerval) | ||
337 | { { 0, 1000000 / hz() }, | ||
338 | { 0, 1000000 / hz() }})}); | ||
339 | get_safe_registers(regs); | ||
340 | |||
341 | /* Set parent's instruction pointer to start of clone-stub */ | ||
342 | regs[REGS_IP_INDEX] = UML_CONFIG_STUB_CODE + | ||
343 | (unsigned long) stub_clone_handler - | ||
344 | (unsigned long) &__syscall_stub_start; | ||
345 | regs[REGS_SP_INDEX] = UML_CONFIG_STUB_DATA + PAGE_SIZE - | ||
346 | sizeof(void *); | ||
347 | err = ptrace_setregs(pid, regs); | ||
348 | if(err < 0) | ||
349 | panic("copy_context_skas0 : PTRACE_SETREGS failed, " | ||
350 | "pid = %d, errno = %d\n", pid, errno); | ||
351 | |||
352 | /* set a well known return code for detection of child write failure */ | ||
353 | child_data->err = 12345678; | ||
354 | |||
355 | /* Wait, until parent has finished its work: read child's pid from | ||
356 | * parent's stack, and check, if bad result. | ||
357 | */ | ||
358 | wait_stub_done(pid, 0, "copy_context_skas0"); | ||
359 | |||
360 | pid = data->err; | ||
361 | if(pid < 0) | ||
362 | panic("copy_context_skas0 - stub-parent reports error %d\n", | ||
363 | pid); | ||
364 | |||
365 | /* Wait, until child has finished too: read child's result from | ||
366 | * child's stack and check it. | ||
367 | */ | ||
368 | wait_stub_done(pid, -1, "copy_context_skas0"); | ||
369 | if (child_data->err != UML_CONFIG_STUB_DATA) | ||
370 | panic("copy_context_skas0 - stub-child reports error %d\n", | ||
371 | child_data->err); | ||
372 | |||
373 | if (ptrace(PTRACE_OLDSETOPTIONS, pid, NULL, | ||
374 | (void *)PTRACE_O_TRACESYSGOOD) < 0) | ||
375 | panic("copy_context_skas0 : PTRACE_SETOPTIONS failed, " | ||
376 | "errno = %d\n", errno); | ||
377 | |||
378 | return pid; | ||
379 | } | ||
380 | |||
381 | /* | ||
382 | * This is used only, if stub pages are needed, while proc_mm is | ||
383 | * availabl. Opening /proc/mm creates a new mm_context, which lacks | ||
384 | * the stub-pages. Thus, we map them using /proc/mm-fd | ||
385 | */ | ||
386 | void map_stub_pages(int fd, unsigned long code, | ||
387 | unsigned long data, unsigned long stack) | ||
388 | { | ||
389 | struct proc_mm_op mmop; | ||
390 | int n; | ||
391 | |||
392 | mmop = ((struct proc_mm_op) { .op = MM_MMAP, | ||
393 | .u = | ||
394 | { .mmap = | ||
395 | { .addr = code, | ||
396 | .len = PAGE_SIZE, | ||
397 | .prot = PROT_EXEC, | ||
398 | .flags = MAP_FIXED | MAP_PRIVATE, | ||
399 | .fd = stub_code_fd, | ||
400 | .offset = stub_code_offset | ||
401 | } } }); | ||
402 | n = os_write_file(fd, &mmop, sizeof(mmop)); | ||
403 | if(n != sizeof(mmop)) | ||
404 | panic("map_stub_pages : /proc/mm map for code failed, " | ||
405 | "err = %d\n", -n); | ||
406 | |||
407 | if ( stack ) { | ||
408 | __u64 map_offset; | ||
409 | int map_fd = phys_mapping(to_phys((void *)stack), &map_offset); | ||
410 | mmop = ((struct proc_mm_op) | ||
411 | { .op = MM_MMAP, | ||
412 | .u = | ||
413 | { .mmap = | ||
414 | { .addr = data, | ||
415 | .len = PAGE_SIZE, | ||
416 | .prot = PROT_READ | PROT_WRITE, | ||
417 | .flags = MAP_FIXED | MAP_SHARED, | ||
418 | .fd = map_fd, | ||
419 | .offset = map_offset | ||
420 | } } }); | ||
421 | n = os_write_file(fd, &mmop, sizeof(mmop)); | ||
422 | if(n != sizeof(mmop)) | ||
423 | panic("map_stub_pages : /proc/mm map for data failed, " | ||
424 | "err = %d\n", -n); | ||
425 | } | ||
426 | } | ||
427 | |||
428 | void new_thread(void *stack, void **switch_buf_ptr, void **fork_buf_ptr, | ||
429 | void (*handler)(int)) | ||
430 | { | ||
431 | unsigned long flags; | ||
432 | sigjmp_buf switch_buf, fork_buf; | ||
433 | |||
434 | *switch_buf_ptr = &switch_buf; | ||
435 | *fork_buf_ptr = &fork_buf; | ||
436 | |||
437 | /* Somewhat subtle - siglongjmp restores the signal mask before doing | ||
438 | * the longjmp. This means that when jumping from one stack to another | ||
439 | * when the target stack has interrupts enabled, an interrupt may occur | ||
440 | * on the source stack. This is bad when starting up a process because | ||
441 | * it's not supposed to get timer ticks until it has been scheduled. | ||
442 | * So, we disable interrupts around the sigsetjmp to ensure that | ||
443 | * they can't happen until we get back here where they are safe. | ||
444 | */ | ||
445 | flags = get_signals(); | ||
446 | block_signals(); | ||
447 | if(sigsetjmp(fork_buf, 1) == 0) | ||
448 | new_thread_proc(stack, handler); | ||
449 | |||
450 | remove_sigstack(); | ||
451 | |||
452 | set_signals(flags); | ||
453 | } | ||
454 | |||
455 | void thread_wait(void *sw, void *fb) | ||
456 | { | ||
457 | sigjmp_buf buf, **switch_buf = sw, *fork_buf; | ||
458 | |||
459 | *switch_buf = &buf; | ||
460 | fork_buf = fb; | ||
461 | if(sigsetjmp(buf, 1) == 0) | ||
462 | siglongjmp(*fork_buf, INIT_JMP_REMOVE_SIGSTACK); | ||
463 | } | ||
464 | |||
465 | void switch_threads(void *me, void *next) | ||
466 | { | ||
467 | sigjmp_buf my_buf, **me_ptr = me, *next_buf = next; | ||
468 | |||
469 | *me_ptr = &my_buf; | ||
470 | if(sigsetjmp(my_buf, 1) == 0) | ||
471 | siglongjmp(*next_buf, 1); | ||
472 | } | ||
473 | |||
474 | static sigjmp_buf initial_jmpbuf; | ||
475 | |||
476 | /* XXX Make these percpu */ | ||
477 | static void (*cb_proc)(void *arg); | ||
478 | static void *cb_arg; | ||
479 | static sigjmp_buf *cb_back; | ||
480 | |||
481 | int start_idle_thread(void *stack, void *switch_buf_ptr, void **fork_buf_ptr) | ||
482 | { | ||
483 | sigjmp_buf **switch_buf = switch_buf_ptr; | ||
484 | int n; | ||
485 | |||
486 | set_handler(SIGWINCH, (__sighandler_t) sig_handler, | ||
487 | SA_ONSTACK | SA_RESTART, SIGUSR1, SIGIO, SIGALRM, | ||
488 | SIGVTALRM, -1); | ||
489 | |||
490 | *fork_buf_ptr = &initial_jmpbuf; | ||
491 | n = sigsetjmp(initial_jmpbuf, 1); | ||
492 | switch(n){ | ||
493 | case INIT_JMP_NEW_THREAD: | ||
494 | new_thread_proc((void *) stack, new_thread_handler); | ||
495 | break; | ||
496 | case INIT_JMP_REMOVE_SIGSTACK: | ||
497 | remove_sigstack(); | ||
498 | break; | ||
499 | case INIT_JMP_CALLBACK: | ||
500 | (*cb_proc)(cb_arg); | ||
501 | siglongjmp(*cb_back, 1); | ||
502 | break; | ||
503 | case INIT_JMP_HALT: | ||
504 | kmalloc_ok = 0; | ||
505 | return(0); | ||
506 | case INIT_JMP_REBOOT: | ||
507 | kmalloc_ok = 0; | ||
508 | return(1); | ||
509 | default: | ||
510 | panic("Bad sigsetjmp return in start_idle_thread - %d\n", n); | ||
511 | } | ||
512 | siglongjmp(**switch_buf, 1); | ||
513 | } | ||
514 | |||
515 | void initial_thread_cb_skas(void (*proc)(void *), void *arg) | ||
516 | { | ||
517 | sigjmp_buf here; | ||
518 | |||
519 | cb_proc = proc; | ||
520 | cb_arg = arg; | ||
521 | cb_back = &here; | ||
522 | |||
523 | block_signals(); | ||
524 | if(sigsetjmp(here, 1) == 0) | ||
525 | siglongjmp(initial_jmpbuf, INIT_JMP_CALLBACK); | ||
526 | unblock_signals(); | ||
527 | |||
528 | cb_proc = NULL; | ||
529 | cb_arg = NULL; | ||
530 | cb_back = NULL; | ||
531 | } | ||
532 | |||
533 | void halt_skas(void) | ||
534 | { | ||
535 | block_signals(); | ||
536 | siglongjmp(initial_jmpbuf, INIT_JMP_HALT); | ||
537 | } | ||
538 | |||
539 | void reboot_skas(void) | ||
540 | { | ||
541 | block_signals(); | ||
542 | siglongjmp(initial_jmpbuf, INIT_JMP_REBOOT); | ||
543 | } | ||
544 | |||
545 | void switch_mm_skas(struct mm_id *mm_idp) | ||
546 | { | ||
547 | int err; | ||
548 | |||
549 | #warning need cpu pid in switch_mm_skas | ||
550 | if(proc_mm){ | ||
551 | err = ptrace(PTRACE_SWITCH_MM, userspace_pid[0], 0, | ||
552 | mm_idp->u.mm_fd); | ||
553 | if(err) | ||
554 | panic("switch_mm_skas - PTRACE_SWITCH_MM failed, " | ||
555 | "errno = %d\n", errno); | ||
556 | } | ||
557 | else userspace_pid[0] = mm_idp->u.pid; | ||
558 | } | ||
559 | |||
560 | /* | ||
561 | * Overrides for Emacs so that we follow Linus's tabbing style. | ||
562 | * Emacs will notice this stuff at the end of the file and automatically | ||
563 | * adjust the settings for this buffer only. This must remain at the end | ||
564 | * of the file. | ||
565 | * --------------------------------------------------------------------------- | ||
566 | * Local variables: | ||
567 | * c-file-style: "linux" | ||
568 | * End: | ||
569 | */ | ||
diff --git a/arch/um/kernel/tt/syscall_kern.c b/arch/um/kernel/tt/syscall_kern.c index 3d29c90514cc..3fda9a03c59a 100644 --- a/arch/um/kernel/tt/syscall_kern.c +++ b/arch/um/kernel/tt/syscall_kern.c | |||
@@ -23,16 +23,20 @@ void syscall_handler_tt(int sig, struct pt_regs *regs) | |||
23 | int syscall; | 23 | int syscall; |
24 | #ifdef CONFIG_SYSCALL_DEBUG | 24 | #ifdef CONFIG_SYSCALL_DEBUG |
25 | int index; | 25 | int index; |
26 | index = record_syscall_start(syscall); | ||
27 | #endif | 26 | #endif |
28 | sc = UPT_SC(®s->regs); | 27 | sc = UPT_SC(®s->regs); |
29 | SC_START_SYSCALL(sc); | 28 | SC_START_SYSCALL(sc); |
30 | 29 | ||
30 | syscall = UPT_SYSCALL_NR(®s->regs); | ||
31 | |||
32 | #ifdef CONFIG_SYSCALL_DEBUG | ||
33 | index = record_syscall_start(syscall); | ||
34 | #endif | ||
35 | |||
31 | syscall_trace(®s->regs, 0); | 36 | syscall_trace(®s->regs, 0); |
32 | 37 | ||
33 | current->thread.nsyscalls++; | 38 | current->thread.nsyscalls++; |
34 | nsyscalls++; | 39 | nsyscalls++; |
35 | syscall = UPT_SYSCALL_NR(®s->regs); | ||
36 | 40 | ||
37 | if((syscall >= NR_syscalls) || (syscall < 0)) | 41 | if((syscall >= NR_syscalls) || (syscall < 0)) |
38 | result = -ENOSYS; | 42 | result = -ENOSYS; |
diff --git a/arch/um/kernel/um_arch.c b/arch/um/kernel/um_arch.c index e2d3ca445ef5..27cdf9164422 100644 --- a/arch/um/kernel/um_arch.c +++ b/arch/um/kernel/um_arch.c | |||
@@ -193,6 +193,24 @@ __uml_setup("root=", uml_root_setup, | |||
193 | " root=/dev/ubd5\n\n" | 193 | " root=/dev/ubd5\n\n" |
194 | ); | 194 | ); |
195 | 195 | ||
196 | #ifndef CONFIG_MODE_TT | ||
197 | |||
198 | static int __init no_skas_debug_setup(char *line, int *add) | ||
199 | { | ||
200 | printf("'debug' is not necessary to gdb UML in skas mode - run \n"); | ||
201 | printf("'gdb linux' and disable CONFIG_CMDLINE_ON_HOST if gdb \n"); | ||
202 | printf("doesn't work as expected\n"); | ||
203 | |||
204 | return 0; | ||
205 | } | ||
206 | |||
207 | __uml_setup("debug", no_skas_debug_setup, | ||
208 | "debug\n" | ||
209 | " this flag is not needed to run gdb on UML in skas mode\n\n" | ||
210 | ); | ||
211 | |||
212 | #endif | ||
213 | |||
196 | #ifdef CONFIG_SMP | 214 | #ifdef CONFIG_SMP |
197 | static int __init uml_ncpus_setup(char *line, int *add) | 215 | static int __init uml_ncpus_setup(char *line, int *add) |
198 | { | 216 | { |
diff --git a/arch/um/os-Linux/drivers/tuntap_user.c b/arch/um/os-Linux/drivers/tuntap_user.c index 52945338b64d..87c3aa0252db 100644 --- a/arch/um/os-Linux/drivers/tuntap_user.c +++ b/arch/um/os-Linux/drivers/tuntap_user.c | |||
@@ -122,6 +122,7 @@ static int tuntap_open_tramp(char *gate, int *fd_out, int me, int remote, | |||
122 | return(-EINVAL); | 122 | return(-EINVAL); |
123 | } | 123 | } |
124 | *fd_out = ((int *) CMSG_DATA(cmsg))[0]; | 124 | *fd_out = ((int *) CMSG_DATA(cmsg))[0]; |
125 | os_set_exec_close(*fd_out, 1); | ||
125 | return(0); | 126 | return(0); |
126 | } | 127 | } |
127 | 128 | ||
@@ -137,7 +138,8 @@ static int tuntap_open(void *data) | |||
137 | return(err); | 138 | return(err); |
138 | 139 | ||
139 | if(pri->fixed_config){ | 140 | if(pri->fixed_config){ |
140 | pri->fd = os_open_file("/dev/net/tun", of_rdwr(OPENFLAGS()), 0); | 141 | pri->fd = os_open_file("/dev/net/tun", |
142 | of_cloexec(of_rdwr(OPENFLAGS())), 0); | ||
141 | if(pri->fd < 0){ | 143 | if(pri->fd < 0){ |
142 | printk("Failed to open /dev/net/tun, err = %d\n", | 144 | printk("Failed to open /dev/net/tun, err = %d\n", |
143 | -pri->fd); | 145 | -pri->fd); |
diff --git a/arch/um/os-Linux/file.c b/arch/um/os-Linux/file.c index f55773c819e6..3bd10deea280 100644 --- a/arch/um/os-Linux/file.c +++ b/arch/um/os-Linux/file.c | |||
@@ -272,14 +272,23 @@ int os_connect_socket(char *name) | |||
272 | snprintf(sock.sun_path, sizeof(sock.sun_path), "%s", name); | 272 | snprintf(sock.sun_path, sizeof(sock.sun_path), "%s", name); |
273 | 273 | ||
274 | fd = socket(AF_UNIX, SOCK_STREAM, 0); | 274 | fd = socket(AF_UNIX, SOCK_STREAM, 0); |
275 | if(fd < 0) | 275 | if(fd < 0) { |
276 | return(fd); | 276 | err = -errno; |
277 | goto out; | ||
278 | } | ||
277 | 279 | ||
278 | err = connect(fd, (struct sockaddr *) &sock, sizeof(sock)); | 280 | err = connect(fd, (struct sockaddr *) &sock, sizeof(sock)); |
279 | if(err) | 281 | if(err) { |
280 | return(-errno); | 282 | err = -errno; |
283 | goto out_close; | ||
284 | } | ||
281 | 285 | ||
282 | return(fd); | 286 | return fd; |
287 | |||
288 | out_close: | ||
289 | close(fd); | ||
290 | out: | ||
291 | return err; | ||
283 | } | 292 | } |
284 | 293 | ||
285 | void os_close_file(int fd) | 294 | void os_close_file(int fd) |
diff --git a/arch/um/os-Linux/process.c b/arch/um/os-Linux/process.c index 7f5e2dac2a35..d261888f39c4 100644 --- a/arch/um/os-Linux/process.c +++ b/arch/um/os-Linux/process.c | |||
@@ -19,6 +19,7 @@ | |||
19 | #include "irq_user.h" | 19 | #include "irq_user.h" |
20 | #include "kern_util.h" | 20 | #include "kern_util.h" |
21 | #include "longjmp.h" | 21 | #include "longjmp.h" |
22 | #include "skas_ptrace.h" | ||
22 | 23 | ||
23 | #define ARBITRARY_ADDR -1 | 24 | #define ARBITRARY_ADDR -1 |
24 | #define FAILURE_PID -1 | 25 | #define FAILURE_PID -1 |
@@ -100,6 +101,21 @@ void os_kill_process(int pid, int reap_child) | |||
100 | 101 | ||
101 | } | 102 | } |
102 | 103 | ||
104 | /* This is here uniquely to have access to the userspace errno, i.e. the one | ||
105 | * used by ptrace in case of error. | ||
106 | */ | ||
107 | |||
108 | long os_ptrace_ldt(long pid, long addr, long data) | ||
109 | { | ||
110 | int ret; | ||
111 | |||
112 | ret = ptrace(PTRACE_LDT, pid, addr, data); | ||
113 | |||
114 | if (ret < 0) | ||
115 | return -errno; | ||
116 | return ret; | ||
117 | } | ||
118 | |||
103 | /* Kill off a ptraced child by all means available. kill it normally first, | 119 | /* Kill off a ptraced child by all means available. kill it normally first, |
104 | * then PTRACE_KILL it, then PTRACE_CONT it in case it's in a run state from | 120 | * then PTRACE_KILL it, then PTRACE_CONT it in case it's in a run state from |
105 | * which it can't exit directly. | 121 | * which it can't exit directly. |
diff --git a/arch/um/os-Linux/skas/mem.c b/arch/um/os-Linux/skas/mem.c index 9890e9090f58..fbb080c2fc26 100644 --- a/arch/um/os-Linux/skas/mem.c +++ b/arch/um/os-Linux/skas/mem.c | |||
@@ -60,7 +60,7 @@ static inline long do_syscall_stub(struct mm_id * mm_idp, void **addr) | |||
60 | 60 | ||
61 | multi_count++; | 61 | multi_count++; |
62 | 62 | ||
63 | get_safe_registers(regs); | 63 | get_safe_registers(regs, NULL); |
64 | regs[REGS_IP_INDEX] = UML_CONFIG_STUB_CODE + | 64 | regs[REGS_IP_INDEX] = UML_CONFIG_STUB_CODE + |
65 | ((unsigned long) &batch_syscall_stub - | 65 | ((unsigned long) &batch_syscall_stub - |
66 | (unsigned long) &__syscall_stub_start); | 66 | (unsigned long) &__syscall_stub_start); |
diff --git a/arch/um/os-Linux/skas/process.c b/arch/um/os-Linux/skas/process.c index 120a21c5883f..bbf34cb91ce1 100644 --- a/arch/um/os-Linux/skas/process.c +++ b/arch/um/os-Linux/skas/process.c | |||
@@ -310,16 +310,12 @@ void userspace(union uml_pt_regs *regs) | |||
310 | } | 310 | } |
311 | } | 311 | } |
312 | } | 312 | } |
313 | #define INIT_JMP_NEW_THREAD 0 | ||
314 | #define INIT_JMP_REMOVE_SIGSTACK 1 | ||
315 | #define INIT_JMP_CALLBACK 2 | ||
316 | #define INIT_JMP_HALT 3 | ||
317 | #define INIT_JMP_REBOOT 4 | ||
318 | 313 | ||
319 | int copy_context_skas0(unsigned long new_stack, int pid) | 314 | int copy_context_skas0(unsigned long new_stack, int pid) |
320 | { | 315 | { |
321 | int err; | 316 | int err; |
322 | unsigned long regs[MAX_REG_NR]; | 317 | unsigned long regs[HOST_FRAME_SIZE]; |
318 | unsigned long fp_regs[HOST_FP_SIZE]; | ||
323 | unsigned long current_stack = current_stub_stack(); | 319 | unsigned long current_stack = current_stub_stack(); |
324 | struct stub_data *data = (struct stub_data *) current_stack; | 320 | struct stub_data *data = (struct stub_data *) current_stack; |
325 | struct stub_data *child_data = (struct stub_data *) new_stack; | 321 | struct stub_data *child_data = (struct stub_data *) new_stack; |
@@ -334,7 +330,7 @@ int copy_context_skas0(unsigned long new_stack, int pid) | |||
334 | .timer = ((struct itimerval) | 330 | .timer = ((struct itimerval) |
335 | { { 0, 1000000 / hz() }, | 331 | { { 0, 1000000 / hz() }, |
336 | { 0, 1000000 / hz() }})}); | 332 | { 0, 1000000 / hz() }})}); |
337 | get_safe_registers(regs); | 333 | get_safe_registers(regs, fp_regs); |
338 | 334 | ||
339 | /* Set parent's instruction pointer to start of clone-stub */ | 335 | /* Set parent's instruction pointer to start of clone-stub */ |
340 | regs[REGS_IP_INDEX] = UML_CONFIG_STUB_CODE + | 336 | regs[REGS_IP_INDEX] = UML_CONFIG_STUB_CODE + |
@@ -350,6 +346,11 @@ int copy_context_skas0(unsigned long new_stack, int pid) | |||
350 | panic("copy_context_skas0 : PTRACE_SETREGS failed, " | 346 | panic("copy_context_skas0 : PTRACE_SETREGS failed, " |
351 | "pid = %d, errno = %d\n", pid, errno); | 347 | "pid = %d, errno = %d\n", pid, errno); |
352 | 348 | ||
349 | err = ptrace_setfpregs(pid, fp_regs); | ||
350 | if(err < 0) | ||
351 | panic("copy_context_skas0 : PTRACE_SETFPREGS failed, " | ||
352 | "pid = %d, errno = %d\n", pid, errno); | ||
353 | |||
353 | /* set a well known return code for detection of child write failure */ | 354 | /* set a well known return code for detection of child write failure */ |
354 | child_data->err = 12345678; | 355 | child_data->err = 12345678; |
355 | 356 | ||
@@ -457,6 +458,12 @@ void new_thread(void *stack, void **switch_buf_ptr, void **fork_buf_ptr, | |||
457 | set_signals(flags); | 458 | set_signals(flags); |
458 | } | 459 | } |
459 | 460 | ||
461 | #define INIT_JMP_NEW_THREAD 0 | ||
462 | #define INIT_JMP_REMOVE_SIGSTACK 1 | ||
463 | #define INIT_JMP_CALLBACK 2 | ||
464 | #define INIT_JMP_HALT 3 | ||
465 | #define INIT_JMP_REBOOT 4 | ||
466 | |||
460 | void thread_wait(void *sw, void *fb) | 467 | void thread_wait(void *sw, void *fb) |
461 | { | 468 | { |
462 | sigjmp_buf buf, **switch_buf = sw, *fork_buf; | 469 | sigjmp_buf buf, **switch_buf = sw, *fork_buf; |
diff --git a/arch/um/os-Linux/start_up.c b/arch/um/os-Linux/start_up.c index 6c5b17ed59e1..829d6b0d8b02 100644 --- a/arch/um/os-Linux/start_up.c +++ b/arch/um/os-Linux/start_up.c | |||
@@ -49,6 +49,7 @@ static int ptrace_child(void *arg) | |||
49 | int pid = os_getpid(), ppid = getppid(); | 49 | int pid = os_getpid(), ppid = getppid(); |
50 | int sc_result; | 50 | int sc_result; |
51 | 51 | ||
52 | change_sig(SIGWINCH, 0); | ||
52 | if(ptrace(PTRACE_TRACEME, 0, 0, 0) < 0){ | 53 | if(ptrace(PTRACE_TRACEME, 0, 0, 0) < 0){ |
53 | perror("ptrace"); | 54 | perror("ptrace"); |
54 | os_kill_process(pid, 0); | 55 | os_kill_process(pid, 0); |
diff --git a/arch/um/os-Linux/sys-i386/registers.c b/arch/um/os-Linux/sys-i386/registers.c index aee4812333c6..7a6f6b99ceff 100644 --- a/arch/um/os-Linux/sys-i386/registers.c +++ b/arch/um/os-Linux/sys-i386/registers.c | |||
@@ -122,9 +122,12 @@ void init_registers(int pid) | |||
122 | err); | 122 | err); |
123 | } | 123 | } |
124 | 124 | ||
125 | void get_safe_registers(unsigned long *regs) | 125 | void get_safe_registers(unsigned long *regs, unsigned long *fp_regs) |
126 | { | 126 | { |
127 | memcpy(regs, exec_regs, HOST_FRAME_SIZE * sizeof(unsigned long)); | 127 | memcpy(regs, exec_regs, HOST_FRAME_SIZE * sizeof(unsigned long)); |
128 | if(fp_regs != NULL) | ||
129 | memcpy(fp_regs, exec_fp_regs, | ||
130 | HOST_FP_SIZE * sizeof(unsigned long)); | ||
128 | } | 131 | } |
129 | 132 | ||
130 | void get_thread_regs(union uml_pt_regs *uml_regs, void *buffer) | 133 | void get_thread_regs(union uml_pt_regs *uml_regs, void *buffer) |
diff --git a/arch/um/os-Linux/sys-x86_64/registers.c b/arch/um/os-Linux/sys-x86_64/registers.c index 4b638dfb52b0..001941fa1a1e 100644 --- a/arch/um/os-Linux/sys-x86_64/registers.c +++ b/arch/um/os-Linux/sys-x86_64/registers.c | |||
@@ -70,9 +70,12 @@ void init_registers(int pid) | |||
70 | err); | 70 | err); |
71 | } | 71 | } |
72 | 72 | ||
73 | void get_safe_registers(unsigned long *regs) | 73 | void get_safe_registers(unsigned long *regs, unsigned long *fp_regs) |
74 | { | 74 | { |
75 | memcpy(regs, exec_regs, HOST_FRAME_SIZE * sizeof(unsigned long)); | 75 | memcpy(regs, exec_regs, HOST_FRAME_SIZE * sizeof(unsigned long)); |
76 | if(fp_regs != NULL) | ||
77 | memcpy(fp_regs, exec_fp_regs, | ||
78 | HOST_FP_SIZE * sizeof(unsigned long)); | ||
76 | } | 79 | } |
77 | 80 | ||
78 | void get_thread_regs(union uml_pt_regs *uml_regs, void *buffer) | 81 | void get_thread_regs(union uml_pt_regs *uml_regs, void *buffer) |
diff --git a/arch/um/sys-i386/ldt.c b/arch/um/sys-i386/ldt.c index 0cdfd4481d5e..fe0877b3509c 100644 --- a/arch/um/sys-i386/ldt.c +++ b/arch/um/sys-i386/ldt.c | |||
@@ -16,7 +16,6 @@ | |||
16 | #include "choose-mode.h" | 16 | #include "choose-mode.h" |
17 | #include "kern.h" | 17 | #include "kern.h" |
18 | #include "mode_kern.h" | 18 | #include "mode_kern.h" |
19 | #include "proc_mm.h" | ||
20 | #include "os.h" | 19 | #include "os.h" |
21 | 20 | ||
22 | extern int modify_ldt(int func, void *ptr, unsigned long bytecount); | 21 | extern int modify_ldt(int func, void *ptr, unsigned long bytecount); |
@@ -90,6 +89,7 @@ out: | |||
90 | #include "skas.h" | 89 | #include "skas.h" |
91 | #include "skas_ptrace.h" | 90 | #include "skas_ptrace.h" |
92 | #include "asm/mmu_context.h" | 91 | #include "asm/mmu_context.h" |
92 | #include "proc_mm.h" | ||
93 | 93 | ||
94 | long write_ldt_entry(struct mm_id * mm_idp, int func, struct user_desc * desc, | 94 | long write_ldt_entry(struct mm_id * mm_idp, int func, struct user_desc * desc, |
95 | void **addr, int done) | 95 | void **addr, int done) |
@@ -107,7 +107,7 @@ long write_ldt_entry(struct mm_id * mm_idp, int func, struct user_desc * desc, | |||
107 | * So we need to switch child's mm into our userspace, then | 107 | * So we need to switch child's mm into our userspace, then |
108 | * later switch back. | 108 | * later switch back. |
109 | * | 109 | * |
110 | * Note: I'm unshure: should interrupts be disabled here? | 110 | * Note: I'm unsure: should interrupts be disabled here? |
111 | */ | 111 | */ |
112 | if(!current->active_mm || current->active_mm == &init_mm || | 112 | if(!current->active_mm || current->active_mm == &init_mm || |
113 | mm_idp != ¤t->active_mm->context.skas.id) | 113 | mm_idp != ¤t->active_mm->context.skas.id) |
@@ -129,9 +129,7 @@ long write_ldt_entry(struct mm_id * mm_idp, int func, struct user_desc * desc, | |||
129 | pid = userspace_pid[cpu]; | 129 | pid = userspace_pid[cpu]; |
130 | } | 130 | } |
131 | 131 | ||
132 | res = ptrace(PTRACE_LDT, pid, 0, (unsigned long) &ldt_op); | 132 | res = os_ptrace_ldt(pid, 0, (unsigned long) &ldt_op); |
133 | if(res) | ||
134 | res = errno; | ||
135 | 133 | ||
136 | if(proc_mm) | 134 | if(proc_mm) |
137 | put_cpu(); | 135 | put_cpu(); |
@@ -181,8 +179,7 @@ static long read_ldt_from_host(void __user * ptr, unsigned long bytecount) | |||
181 | */ | 179 | */ |
182 | 180 | ||
183 | cpu = get_cpu(); | 181 | cpu = get_cpu(); |
184 | res = ptrace(PTRACE_LDT, userspace_pid[cpu], 0, | 182 | res = os_ptrace_ldt(userspace_pid[cpu], 0, (unsigned long) &ptrace_ldt); |
185 | (unsigned long) &ptrace_ldt); | ||
186 | put_cpu(); | 183 | put_cpu(); |
187 | if(res < 0) | 184 | if(res < 0) |
188 | goto out; | 185 | goto out; |
diff --git a/arch/um/sys-x86_64/ptrace_user.c b/arch/um/sys-x86_64/ptrace_user.c index 12e404c6fa46..b5f9c33e311e 100644 --- a/arch/um/sys-x86_64/ptrace_user.c +++ b/arch/um/sys-x86_64/ptrace_user.c | |||
@@ -24,6 +24,13 @@ int ptrace_setregs(long pid, unsigned long *regs) | |||
24 | return(0); | 24 | return(0); |
25 | } | 25 | } |
26 | 26 | ||
27 | int ptrace_setfpregs(long pid, unsigned long *regs) | ||
28 | { | ||
29 | if (ptrace(PTRACE_SETFPREGS, pid, 0, regs) < 0) | ||
30 | return -errno; | ||
31 | return 0; | ||
32 | } | ||
33 | |||
27 | void ptrace_pokeuser(unsigned long addr, unsigned long data) | 34 | void ptrace_pokeuser(unsigned long addr, unsigned long data) |
28 | { | 35 | { |
29 | panic("ptrace_pokeuser"); | 36 | panic("ptrace_pokeuser"); |
diff --git a/arch/um/sys-x86_64/user-offsets.c b/arch/um/sys-x86_64/user-offsets.c index 5a585bfbb8c2..7bd54a921cf7 100644 --- a/arch/um/sys-x86_64/user-offsets.c +++ b/arch/um/sys-x86_64/user-offsets.c | |||
@@ -57,7 +57,7 @@ void foo(void) | |||
57 | #endif | 57 | #endif |
58 | 58 | ||
59 | DEFINE_LONGS(HOST_FRAME_SIZE, FRAME_SIZE); | 59 | DEFINE_LONGS(HOST_FRAME_SIZE, FRAME_SIZE); |
60 | DEFINE(HOST_FP_SIZE, 0); | 60 | DEFINE(HOST_FP_SIZE, sizeof(struct _fpstate) / sizeof(unsigned long)); |
61 | DEFINE(HOST_XFP_SIZE, 0); | 61 | DEFINE(HOST_XFP_SIZE, 0); |
62 | DEFINE_LONGS(HOST_RBX, RBX); | 62 | DEFINE_LONGS(HOST_RBX, RBX); |
63 | DEFINE_LONGS(HOST_RCX, RCX); | 63 | DEFINE_LONGS(HOST_RCX, RCX); |
diff --git a/arch/v850/Kconfig b/arch/v850/Kconfig index 04494638b963..e7fc3e500342 100644 --- a/arch/v850/Kconfig +++ b/arch/v850/Kconfig | |||
@@ -28,6 +28,10 @@ config GENERIC_IRQ_PROBE | |||
28 | bool | 28 | bool |
29 | default y | 29 | default y |
30 | 30 | ||
31 | config TIME_LOW_RES | ||
32 | bool | ||
33 | default y | ||
34 | |||
31 | # Turn off some random 386 crap that can affect device config | 35 | # Turn off some random 386 crap that can affect device config |
32 | config ISA | 36 | config ISA |
33 | bool | 37 | bool |
diff --git a/arch/v850/kernel/process.c b/arch/v850/kernel/process.c index eb909937958b..621111ddf907 100644 --- a/arch/v850/kernel/process.c +++ b/arch/v850/kernel/process.c | |||
@@ -30,6 +30,9 @@ | |||
30 | #include <asm/system.h> | 30 | #include <asm/system.h> |
31 | #include <asm/pgtable.h> | 31 | #include <asm/pgtable.h> |
32 | 32 | ||
33 | void (*pm_power_off)(void) = NULL; | ||
34 | EXPORT_SYMBOL(pm_power_off); | ||
35 | |||
33 | extern void ret_from_fork (void); | 36 | extern void ret_from_fork (void); |
34 | 37 | ||
35 | 38 | ||
diff --git a/arch/v850/kernel/simcons.c b/arch/v850/kernel/simcons.c index 7f0efaa025c9..3975aa02cef8 100644 --- a/arch/v850/kernel/simcons.c +++ b/arch/v850/kernel/simcons.c | |||
@@ -117,6 +117,7 @@ late_initcall(simcons_tty_init); | |||
117 | tty driver. */ | 117 | tty driver. */ |
118 | void simcons_poll_tty (struct tty_struct *tty) | 118 | void simcons_poll_tty (struct tty_struct *tty) |
119 | { | 119 | { |
120 | char buf[32]; /* Not the nicest way to do it but I need it correct first */ | ||
120 | int flip = 0, send_break = 0; | 121 | int flip = 0, send_break = 0; |
121 | struct pollfd pfd; | 122 | struct pollfd pfd; |
122 | pfd.fd = 0; | 123 | pfd.fd = 0; |
@@ -124,21 +125,15 @@ void simcons_poll_tty (struct tty_struct *tty) | |||
124 | 125 | ||
125 | if (V850_SIM_SYSCALL (poll, &pfd, 1, 0) > 0) { | 126 | if (V850_SIM_SYSCALL (poll, &pfd, 1, 0) > 0) { |
126 | if (pfd.revents & POLLIN) { | 127 | if (pfd.revents & POLLIN) { |
127 | int left = TTY_FLIPBUF_SIZE - tty->flip.count; | 128 | /* Real block hardware knows the transfer size before |
128 | 129 | transfer so the new tty buffering doesn't try to handle | |
129 | if (left > 0) { | 130 | this rather weird simulator specific case well */ |
130 | unsigned char *buf = tty->flip.char_buf_ptr; | 131 | int rd = V850_SIM_SYSCALL (read, 0, buf, 32); |
131 | int rd = V850_SIM_SYSCALL (read, 0, buf, left); | 132 | if (rd > 0) { |
132 | 133 | tty_insert_flip_string(tty, buf, rd); | |
133 | if (rd > 0) { | 134 | flip = 1; |
134 | tty->flip.count += rd; | 135 | } else |
135 | tty->flip.char_buf_ptr += rd; | 136 | send_break = 1; |
136 | memset (tty->flip.flag_buf_ptr, 0, rd); | ||
137 | tty->flip.flag_buf_ptr += rd; | ||
138 | flip = 1; | ||
139 | } else | ||
140 | send_break = 1; | ||
141 | } | ||
142 | } else if (pfd.revents & POLLERR) | 137 | } else if (pfd.revents & POLLERR) |
143 | send_break = 1; | 138 | send_break = 1; |
144 | } | 139 | } |
diff --git a/arch/x86_64/Kconfig b/arch/x86_64/Kconfig index 2f9deca31cc9..e18eb79bf855 100644 --- a/arch/x86_64/Kconfig +++ b/arch/x86_64/Kconfig | |||
@@ -354,21 +354,6 @@ config HPET_TIMER | |||
354 | as it is off-chip. You can find the HPET spec at | 354 | as it is off-chip. You can find the HPET spec at |
355 | <http://www.intel.com/hardwaredesign/hpetspec.htm>. | 355 | <http://www.intel.com/hardwaredesign/hpetspec.htm>. |
356 | 356 | ||
357 | config X86_PM_TIMER | ||
358 | bool "PM timer" if EMBEDDED | ||
359 | depends on ACPI | ||
360 | default y | ||
361 | help | ||
362 | Support the ACPI PM timer for time keeping. This is slow, | ||
363 | but is useful on some chipsets without HPET on systems with more | ||
364 | than one CPU. On a single processor or single socket multi core | ||
365 | system it is normally not required. | ||
366 | When the PM timer is active 64bit vsyscalls are disabled | ||
367 | and should not be enabled (/proc/sys/kernel/vsyscall64 should | ||
368 | not be changed). | ||
369 | The kernel selects the PM timer only as a last resort, so it is | ||
370 | useful to enable just in case. | ||
371 | |||
372 | config HPET_EMULATE_RTC | 357 | config HPET_EMULATE_RTC |
373 | bool "Provide RTC interrupt" | 358 | bool "Provide RTC interrupt" |
374 | depends on HPET_TIMER && RTC=y | 359 | depends on HPET_TIMER && RTC=y |
@@ -592,6 +577,7 @@ source "arch/x86_64/oprofile/Kconfig" | |||
592 | 577 | ||
593 | config KPROBES | 578 | config KPROBES |
594 | bool "Kprobes (EXPERIMENTAL)" | 579 | bool "Kprobes (EXPERIMENTAL)" |
580 | depends on EXPERIMENTAL && MODULES | ||
595 | help | 581 | help |
596 | Kprobes allows you to trap at almost any kernel address and | 582 | Kprobes allows you to trap at almost any kernel address and |
597 | execute a callback function. register_kprobe() establishes | 583 | execute a callback function. register_kprobe() establishes |
diff --git a/arch/x86_64/Kconfig.debug b/arch/x86_64/Kconfig.debug index fcb06a50fdd2..ea31b4c62105 100644 --- a/arch/x86_64/Kconfig.debug +++ b/arch/x86_64/Kconfig.debug | |||
@@ -2,13 +2,6 @@ menu "Kernel hacking" | |||
2 | 2 | ||
3 | source "lib/Kconfig.debug" | 3 | source "lib/Kconfig.debug" |
4 | 4 | ||
5 | config INIT_DEBUG | ||
6 | bool "Debug __init statements" | ||
7 | depends on DEBUG_KERNEL | ||
8 | help | ||
9 | Fill __init and __initdata at the end of boot. This helps debugging | ||
10 | illegal uses of __init and __initdata after initialization. | ||
11 | |||
12 | config DEBUG_RODATA | 5 | config DEBUG_RODATA |
13 | bool "Write protect kernel read-only data structures" | 6 | bool "Write protect kernel read-only data structures" |
14 | depends on DEBUG_KERNEL | 7 | depends on DEBUG_KERNEL |
diff --git a/arch/x86_64/defconfig b/arch/x86_64/defconfig index 09a3eb743315..ce4de61ed85d 100644 --- a/arch/x86_64/defconfig +++ b/arch/x86_64/defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.15-git12 | 3 | # Linux kernel version: 2.6.16-rc3-git9 |
4 | # Mon Jan 16 13:09:08 2006 | 4 | # Sat Feb 18 00:27:03 2006 |
5 | # | 5 | # |
6 | CONFIG_X86_64=y | 6 | CONFIG_X86_64=y |
7 | CONFIG_64BIT=y | 7 | CONFIG_64BIT=y |
@@ -21,7 +21,6 @@ CONFIG_DMI=y | |||
21 | # Code maturity level options | 21 | # Code maturity level options |
22 | # | 22 | # |
23 | CONFIG_EXPERIMENTAL=y | 23 | CONFIG_EXPERIMENTAL=y |
24 | CONFIG_CLEAN_COMPILE=y | ||
25 | CONFIG_LOCK_KERNEL=y | 24 | CONFIG_LOCK_KERNEL=y |
26 | CONFIG_INIT_ENV_ARG_LIMIT=32 | 25 | CONFIG_INIT_ENV_ARG_LIMIT=32 |
27 | 26 | ||
@@ -267,6 +266,7 @@ CONFIG_NET=y | |||
267 | # | 266 | # |
268 | # Networking options | 267 | # Networking options |
269 | # | 268 | # |
269 | # CONFIG_NETDEBUG is not set | ||
270 | CONFIG_PACKET=y | 270 | CONFIG_PACKET=y |
271 | # CONFIG_PACKET_MMAP is not set | 271 | # CONFIG_PACKET_MMAP is not set |
272 | CONFIG_UNIX=y | 272 | CONFIG_UNIX=y |
@@ -310,6 +310,11 @@ CONFIG_IPV6=y | |||
310 | # SCTP Configuration (EXPERIMENTAL) | 310 | # SCTP Configuration (EXPERIMENTAL) |
311 | # | 311 | # |
312 | # CONFIG_IP_SCTP is not set | 312 | # CONFIG_IP_SCTP is not set |
313 | |||
314 | # | ||
315 | # TIPC Configuration (EXPERIMENTAL) | ||
316 | # | ||
317 | # CONFIG_TIPC is not set | ||
313 | # CONFIG_ATM is not set | 318 | # CONFIG_ATM is not set |
314 | # CONFIG_BRIDGE is not set | 319 | # CONFIG_BRIDGE is not set |
315 | # CONFIG_VLAN_8021Q is not set | 320 | # CONFIG_VLAN_8021Q is not set |
@@ -319,11 +324,6 @@ CONFIG_IPV6=y | |||
319 | # CONFIG_ATALK is not set | 324 | # CONFIG_ATALK is not set |
320 | # CONFIG_X25 is not set | 325 | # CONFIG_X25 is not set |
321 | # CONFIG_LAPB is not set | 326 | # CONFIG_LAPB is not set |
322 | |||
323 | # | ||
324 | # TIPC Configuration (EXPERIMENTAL) | ||
325 | # | ||
326 | # CONFIG_TIPC is not set | ||
327 | # CONFIG_NET_DIVERT is not set | 327 | # CONFIG_NET_DIVERT is not set |
328 | # CONFIG_ECONET is not set | 328 | # CONFIG_ECONET is not set |
329 | # CONFIG_WAN_ROUTER is not set | 329 | # CONFIG_WAN_ROUTER is not set |
@@ -446,7 +446,6 @@ CONFIG_BLK_DEV_PIIX=y | |||
446 | # CONFIG_BLK_DEV_NS87415 is not set | 446 | # CONFIG_BLK_DEV_NS87415 is not set |
447 | # CONFIG_BLK_DEV_PDC202XX_OLD is not set | 447 | # CONFIG_BLK_DEV_PDC202XX_OLD is not set |
448 | CONFIG_BLK_DEV_PDC202XX_NEW=y | 448 | CONFIG_BLK_DEV_PDC202XX_NEW=y |
449 | # CONFIG_PDC202XX_FORCE is not set | ||
450 | # CONFIG_BLK_DEV_SVWKS is not set | 449 | # CONFIG_BLK_DEV_SVWKS is not set |
451 | # CONFIG_BLK_DEV_SIIMAGE is not set | 450 | # CONFIG_BLK_DEV_SIIMAGE is not set |
452 | # CONFIG_BLK_DEV_SIS5513 is not set | 451 | # CONFIG_BLK_DEV_SIS5513 is not set |
@@ -573,7 +572,33 @@ CONFIG_FUSION_MAX_SGE=128 | |||
573 | # | 572 | # |
574 | # IEEE 1394 (FireWire) support | 573 | # IEEE 1394 (FireWire) support |
575 | # | 574 | # |
576 | # CONFIG_IEEE1394 is not set | 575 | CONFIG_IEEE1394=y |
576 | |||
577 | # | ||
578 | # Subsystem Options | ||
579 | # | ||
580 | # CONFIG_IEEE1394_VERBOSEDEBUG is not set | ||
581 | # CONFIG_IEEE1394_OUI_DB is not set | ||
582 | # CONFIG_IEEE1394_EXTRA_CONFIG_ROMS is not set | ||
583 | # CONFIG_IEEE1394_EXPORT_FULL_API is not set | ||
584 | |||
585 | # | ||
586 | # Device Drivers | ||
587 | # | ||
588 | |||
589 | # | ||
590 | # Texas Instruments PCILynx requires I2C | ||
591 | # | ||
592 | CONFIG_IEEE1394_OHCI1394=y | ||
593 | |||
594 | # | ||
595 | # Protocol Drivers | ||
596 | # | ||
597 | # CONFIG_IEEE1394_VIDEO1394 is not set | ||
598 | # CONFIG_IEEE1394_SBP2 is not set | ||
599 | # CONFIG_IEEE1394_ETH1394 is not set | ||
600 | # CONFIG_IEEE1394_DV1394 is not set | ||
601 | CONFIG_IEEE1394_RAWIO=y | ||
577 | 602 | ||
578 | # | 603 | # |
579 | # I2O device support | 604 | # I2O device support |
@@ -772,6 +797,7 @@ CONFIG_SERIAL_8250_RUNTIME_UARTS=4 | |||
772 | # | 797 | # |
773 | CONFIG_SERIAL_CORE=y | 798 | CONFIG_SERIAL_CORE=y |
774 | CONFIG_SERIAL_CORE_CONSOLE=y | 799 | CONFIG_SERIAL_CORE_CONSOLE=y |
800 | # CONFIG_SERIAL_JSM is not set | ||
775 | CONFIG_UNIX98_PTYS=y | 801 | CONFIG_UNIX98_PTYS=y |
776 | CONFIG_LEGACY_PTYS=y | 802 | CONFIG_LEGACY_PTYS=y |
777 | CONFIG_LEGACY_PTY_COUNT=256 | 803 | CONFIG_LEGACY_PTY_COUNT=256 |
@@ -871,6 +897,7 @@ CONFIG_HPET_MMAP=y | |||
871 | # | 897 | # |
872 | CONFIG_HWMON=y | 898 | CONFIG_HWMON=y |
873 | # CONFIG_HWMON_VID is not set | 899 | # CONFIG_HWMON_VID is not set |
900 | # CONFIG_SENSORS_F71805F is not set | ||
874 | # CONFIG_SENSORS_HDAPS is not set | 901 | # CONFIG_SENSORS_HDAPS is not set |
875 | # CONFIG_HWMON_DEBUG_CHIP is not set | 902 | # CONFIG_HWMON_DEBUG_CHIP is not set |
876 | 903 | ||
@@ -1098,6 +1125,11 @@ CONFIG_USB_MON=y | |||
1098 | # | 1125 | # |
1099 | 1126 | ||
1100 | # | 1127 | # |
1128 | # EDAC - error detection and reporting (RAS) | ||
1129 | # | ||
1130 | # CONFIG_EDAC is not set | ||
1131 | |||
1132 | # | ||
1101 | # Firmware Drivers | 1133 | # Firmware Drivers |
1102 | # | 1134 | # |
1103 | # CONFIG_EDD is not set | 1135 | # CONFIG_EDD is not set |
@@ -1291,7 +1323,6 @@ CONFIG_DEBUG_FS=y | |||
1291 | # CONFIG_FRAME_POINTER is not set | 1323 | # CONFIG_FRAME_POINTER is not set |
1292 | # CONFIG_FORCED_INLINING is not set | 1324 | # CONFIG_FORCED_INLINING is not set |
1293 | # CONFIG_RCU_TORTURE_TEST is not set | 1325 | # CONFIG_RCU_TORTURE_TEST is not set |
1294 | CONFIG_INIT_DEBUG=y | ||
1295 | # CONFIG_DEBUG_RODATA is not set | 1326 | # CONFIG_DEBUG_RODATA is not set |
1296 | # CONFIG_IOMMU_DEBUG is not set | 1327 | # CONFIG_IOMMU_DEBUG is not set |
1297 | 1328 | ||
diff --git a/arch/x86_64/ia32/ia32entry.S b/arch/x86_64/ia32/ia32entry.S index f05c2a802489..00dee176c08e 100644 --- a/arch/x86_64/ia32/ia32entry.S +++ b/arch/x86_64/ia32/ia32entry.S | |||
@@ -676,8 +676,8 @@ ia32_sys_call_table: | |||
676 | .quad sys_mkdirat | 676 | .quad sys_mkdirat |
677 | .quad sys_mknodat | 677 | .quad sys_mknodat |
678 | .quad sys_fchownat | 678 | .quad sys_fchownat |
679 | .quad sys_futimesat | 679 | .quad compat_sys_futimesat |
680 | .quad compat_sys_newfstatat /* 300 */ | 680 | .quad sys32_fstatat /* 300 */ |
681 | .quad sys_unlinkat | 681 | .quad sys_unlinkat |
682 | .quad sys_renameat | 682 | .quad sys_renameat |
683 | .quad sys_linkat | 683 | .quad sys_linkat |
@@ -685,6 +685,9 @@ ia32_sys_call_table: | |||
685 | .quad sys_readlinkat /* 305 */ | 685 | .quad sys_readlinkat /* 305 */ |
686 | .quad sys_fchmodat | 686 | .quad sys_fchmodat |
687 | .quad sys_faccessat | 687 | .quad sys_faccessat |
688 | .quad sys_ni_syscall /* pselect6 for now */ | ||
689 | .quad sys_ni_syscall /* ppoll for now */ | ||
690 | .quad sys_unshare /* 310 */ | ||
688 | ia32_syscall_end: | 691 | ia32_syscall_end: |
689 | .rept IA32_NR_syscalls-(ia32_syscall_end-ia32_sys_call_table)/8 | 692 | .rept IA32_NR_syscalls-(ia32_syscall_end-ia32_sys_call_table)/8 |
690 | .quad ni_syscall | 693 | .quad ni_syscall |
diff --git a/arch/x86_64/ia32/sys_ia32.c b/arch/x86_64/ia32/sys_ia32.c index 54481af5344a..2bc55af95419 100644 --- a/arch/x86_64/ia32/sys_ia32.c +++ b/arch/x86_64/ia32/sys_ia32.c | |||
@@ -180,6 +180,28 @@ sys32_fstat64(unsigned int fd, struct stat64 __user *statbuf) | |||
180 | return ret; | 180 | return ret; |
181 | } | 181 | } |
182 | 182 | ||
183 | asmlinkage long | ||
184 | sys32_fstatat(unsigned int dfd, char __user *filename, | ||
185 | struct stat64 __user* statbuf, int flag) | ||
186 | { | ||
187 | struct kstat stat; | ||
188 | int error = -EINVAL; | ||
189 | |||
190 | if ((flag & ~AT_SYMLINK_NOFOLLOW) != 0) | ||
191 | goto out; | ||
192 | |||
193 | if (flag & AT_SYMLINK_NOFOLLOW) | ||
194 | error = vfs_lstat_fd(dfd, filename, &stat); | ||
195 | else | ||
196 | error = vfs_stat_fd(dfd, filename, &stat); | ||
197 | |||
198 | if (!error) | ||
199 | error = cp_stat64(statbuf, &stat); | ||
200 | |||
201 | out: | ||
202 | return error; | ||
203 | } | ||
204 | |||
183 | /* | 205 | /* |
184 | * Linux/i386 didn't use to be able to handle more than | 206 | * Linux/i386 didn't use to be able to handle more than |
185 | * 4 system call parameters, so these system calls used a memory | 207 | * 4 system call parameters, so these system calls used a memory |
diff --git a/arch/x86_64/kernel/Makefile b/arch/x86_64/kernel/Makefile index 72fe60c20d39..a098a11e7755 100644 --- a/arch/x86_64/kernel/Makefile +++ b/arch/x86_64/kernel/Makefile | |||
@@ -43,7 +43,7 @@ CFLAGS_vsyscall.o := $(PROFILING) -g0 | |||
43 | 43 | ||
44 | bootflag-y += ../../i386/kernel/bootflag.o | 44 | bootflag-y += ../../i386/kernel/bootflag.o |
45 | cpuid-$(subst m,y,$(CONFIG_X86_CPUID)) += ../../i386/kernel/cpuid.o | 45 | cpuid-$(subst m,y,$(CONFIG_X86_CPUID)) += ../../i386/kernel/cpuid.o |
46 | topology-y += ../../i386/mach-default/topology.o | 46 | topology-y += ../../i386/kernel/topology.o |
47 | microcode-$(subst m,y,$(CONFIG_MICROCODE)) += ../../i386/kernel/microcode.o | 47 | microcode-$(subst m,y,$(CONFIG_MICROCODE)) += ../../i386/kernel/microcode.o |
48 | intel_cacheinfo-y += ../../i386/kernel/cpu/intel_cacheinfo.o | 48 | intel_cacheinfo-y += ../../i386/kernel/cpu/intel_cacheinfo.o |
49 | quirks-y += ../../i386/kernel/quirks.o | 49 | quirks-y += ../../i386/kernel/quirks.o |
diff --git a/arch/x86_64/kernel/acpi/Makefile b/arch/x86_64/kernel/acpi/Makefile index 7da9ace890bd..4fe97071f297 100644 --- a/arch/x86_64/kernel/acpi/Makefile +++ b/arch/x86_64/kernel/acpi/Makefile | |||
@@ -1,3 +1,8 @@ | |||
1 | obj-y := boot.o | 1 | obj-y := boot.o |
2 | boot-y := ../../../i386/kernel/acpi/boot.o | 2 | boot-y := ../../../i386/kernel/acpi/boot.o |
3 | obj-$(CONFIG_ACPI_SLEEP) += sleep.o wakeup.o | 3 | obj-$(CONFIG_ACPI_SLEEP) += sleep.o wakeup.o |
4 | |||
5 | ifneq ($(CONFIG_ACPI_PROCESSOR),) | ||
6 | obj-y += processor.o | ||
7 | endif | ||
8 | |||
diff --git a/arch/x86_64/kernel/acpi/processor.c b/arch/x86_64/kernel/acpi/processor.c new file mode 100644 index 000000000000..3bdc2baa5bb1 --- /dev/null +++ b/arch/x86_64/kernel/acpi/processor.c | |||
@@ -0,0 +1,72 @@ | |||
1 | /* | ||
2 | * arch/x86_64/kernel/acpi/processor.c | ||
3 | * | ||
4 | * Copyright (C) 2005 Intel Corporation | ||
5 | * Venkatesh Pallipadi <venkatesh.pallipadi@intel.com> | ||
6 | * - Added _PDC for platforms with Intel CPUs | ||
7 | */ | ||
8 | |||
9 | #include <linux/kernel.h> | ||
10 | #include <linux/module.h> | ||
11 | #include <linux/init.h> | ||
12 | #include <linux/acpi.h> | ||
13 | |||
14 | #include <acpi/processor.h> | ||
15 | #include <asm/acpi.h> | ||
16 | |||
17 | static void init_intel_pdc(struct acpi_processor *pr, struct cpuinfo_x86 *c) | ||
18 | { | ||
19 | struct acpi_object_list *obj_list; | ||
20 | union acpi_object *obj; | ||
21 | u32 *buf; | ||
22 | |||
23 | /* allocate and initialize pdc. It will be used later. */ | ||
24 | obj_list = kmalloc(sizeof(struct acpi_object_list), GFP_KERNEL); | ||
25 | if (!obj_list) { | ||
26 | printk(KERN_ERR "Memory allocation error\n"); | ||
27 | return; | ||
28 | } | ||
29 | |||
30 | obj = kmalloc(sizeof(union acpi_object), GFP_KERNEL); | ||
31 | if (!obj) { | ||
32 | printk(KERN_ERR "Memory allocation error\n"); | ||
33 | kfree(obj_list); | ||
34 | return; | ||
35 | } | ||
36 | |||
37 | buf = kmalloc(12, GFP_KERNEL); | ||
38 | if (!buf) { | ||
39 | printk(KERN_ERR "Memory allocation error\n"); | ||
40 | kfree(obj); | ||
41 | kfree(obj_list); | ||
42 | return; | ||
43 | } | ||
44 | |||
45 | buf[0] = ACPI_PDC_REVISION_ID; | ||
46 | buf[1] = 1; | ||
47 | buf[2] = ACPI_PDC_EST_CAPABILITY_SMP; | ||
48 | |||
49 | obj->type = ACPI_TYPE_BUFFER; | ||
50 | obj->buffer.length = 12; | ||
51 | obj->buffer.pointer = (u8 *) buf; | ||
52 | obj_list->count = 1; | ||
53 | obj_list->pointer = obj; | ||
54 | pr->pdc = obj_list; | ||
55 | |||
56 | return; | ||
57 | } | ||
58 | |||
59 | /* Initialize _PDC data based on the CPU vendor */ | ||
60 | void arch_acpi_processor_init_pdc(struct acpi_processor *pr) | ||
61 | { | ||
62 | unsigned int cpu = pr->id; | ||
63 | struct cpuinfo_x86 *c = cpu_data + cpu; | ||
64 | |||
65 | pr->pdc = NULL; | ||
66 | if (c->x86_vendor == X86_VENDOR_INTEL && cpu_has(c, X86_FEATURE_EST)) | ||
67 | init_intel_pdc(pr, c); | ||
68 | |||
69 | return; | ||
70 | } | ||
71 | |||
72 | EXPORT_SYMBOL(arch_acpi_processor_init_pdc); | ||
diff --git a/arch/x86_64/kernel/aperture.c b/arch/x86_64/kernel/aperture.c index e4e2b7d01f89..a0f955b9995f 100644 --- a/arch/x86_64/kernel/aperture.c +++ b/arch/x86_64/kernel/aperture.c | |||
@@ -248,7 +248,7 @@ void __init iommu_hole_init(void) | |||
248 | /* Got the aperture from the AGP bridge */ | 248 | /* Got the aperture from the AGP bridge */ |
249 | } else if (swiotlb && !valid_agp) { | 249 | } else if (swiotlb && !valid_agp) { |
250 | /* Do nothing */ | 250 | /* Do nothing */ |
251 | } else if ((!no_iommu && end_pfn >= MAX_DMA32_PFN) || | 251 | } else if ((!no_iommu && end_pfn > MAX_DMA32_PFN) || |
252 | force_iommu || | 252 | force_iommu || |
253 | valid_agp || | 253 | valid_agp || |
254 | fallback_aper_force) { | 254 | fallback_aper_force) { |
diff --git a/arch/x86_64/kernel/apic.c b/arch/x86_64/kernel/apic.c index 5d3c5b07b8db..e5b14c57eaa0 100644 --- a/arch/x86_64/kernel/apic.c +++ b/arch/x86_64/kernel/apic.c | |||
@@ -35,8 +35,12 @@ | |||
35 | #include <asm/mach_apic.h> | 35 | #include <asm/mach_apic.h> |
36 | #include <asm/nmi.h> | 36 | #include <asm/nmi.h> |
37 | #include <asm/idle.h> | 37 | #include <asm/idle.h> |
38 | #include <asm/proto.h> | ||
39 | #include <asm/timex.h> | ||
38 | 40 | ||
39 | int apic_verbosity; | 41 | int apic_verbosity; |
42 | int apic_runs_main_timer; | ||
43 | int apic_calibrate_pmtmr __initdata; | ||
40 | 44 | ||
41 | int disable_apic_timer __initdata; | 45 | int disable_apic_timer __initdata; |
42 | 46 | ||
@@ -68,6 +72,26 @@ int get_maxlvt(void) | |||
68 | return maxlvt; | 72 | return maxlvt; |
69 | } | 73 | } |
70 | 74 | ||
75 | /* | ||
76 | * 'what should we do if we get a hw irq event on an illegal vector'. | ||
77 | * each architecture has to answer this themselves. | ||
78 | */ | ||
79 | void ack_bad_irq(unsigned int irq) | ||
80 | { | ||
81 | printk("unexpected IRQ trap at vector %02x\n", irq); | ||
82 | /* | ||
83 | * Currently unexpected vectors happen only on SMP and APIC. | ||
84 | * We _must_ ack these because every local APIC has only N | ||
85 | * irq slots per priority level, and a 'hanging, unacked' IRQ | ||
86 | * holds up an irq slot - in excessive cases (when multiple | ||
87 | * unexpected vectors occur) that might lock up the APIC | ||
88 | * completely. | ||
89 | * But don't ack when the APIC is disabled. -AK | ||
90 | */ | ||
91 | if (!disable_apic) | ||
92 | ack_APIC_irq(); | ||
93 | } | ||
94 | |||
71 | void clear_local_APIC(void) | 95 | void clear_local_APIC(void) |
72 | { | 96 | { |
73 | int maxlvt; | 97 | int maxlvt; |
@@ -684,7 +708,7 @@ static void setup_APIC_timer(unsigned int clocks) | |||
684 | local_irq_save(flags); | 708 | local_irq_save(flags); |
685 | 709 | ||
686 | /* wait for irq slice */ | 710 | /* wait for irq slice */ |
687 | if (vxtime.hpet_address) { | 711 | if (vxtime.hpet_address && hpet_use_timer) { |
688 | int trigger = hpet_readl(HPET_T0_CMP); | 712 | int trigger = hpet_readl(HPET_T0_CMP); |
689 | while (hpet_readl(HPET_COUNTER) >= trigger) | 713 | while (hpet_readl(HPET_COUNTER) >= trigger) |
690 | /* do nothing */ ; | 714 | /* do nothing */ ; |
@@ -702,9 +726,17 @@ static void setup_APIC_timer(unsigned int clocks) | |||
702 | c2 |= inb_p(0x40) << 8; | 726 | c2 |= inb_p(0x40) << 8; |
703 | } while (c2 - c1 < 300); | 727 | } while (c2 - c1 < 300); |
704 | } | 728 | } |
705 | |||
706 | __setup_APIC_LVTT(clocks); | 729 | __setup_APIC_LVTT(clocks); |
707 | 730 | /* Turn off PIT interrupt if we use APIC timer as main timer. | |
731 | Only works with the PM timer right now | ||
732 | TBD fix it for HPET too. */ | ||
733 | if (vxtime.mode == VXTIME_PMTMR && | ||
734 | smp_processor_id() == boot_cpu_id && | ||
735 | apic_runs_main_timer == 1 && | ||
736 | !cpu_isset(boot_cpu_id, timer_interrupt_broadcast_ipi_mask)) { | ||
737 | stop_timer_interrupt(); | ||
738 | apic_runs_main_timer++; | ||
739 | } | ||
708 | local_irq_restore(flags); | 740 | local_irq_restore(flags); |
709 | } | 741 | } |
710 | 742 | ||
@@ -735,14 +767,27 @@ static int __init calibrate_APIC_clock(void) | |||
735 | __setup_APIC_LVTT(1000000000); | 767 | __setup_APIC_LVTT(1000000000); |
736 | 768 | ||
737 | apic_start = apic_read(APIC_TMCCT); | 769 | apic_start = apic_read(APIC_TMCCT); |
738 | rdtscl(tsc_start); | 770 | #ifdef CONFIG_X86_PM_TIMER |
739 | 771 | if (apic_calibrate_pmtmr && pmtmr_ioport) { | |
740 | do { | 772 | pmtimer_wait(5000); /* 5ms wait */ |
741 | apic = apic_read(APIC_TMCCT); | 773 | apic = apic_read(APIC_TMCCT); |
742 | rdtscl(tsc); | 774 | result = (apic_start - apic) * 1000L / 5; |
743 | } while ((tsc - tsc_start) < TICK_COUNT && (apic - apic_start) < TICK_COUNT); | 775 | } else |
776 | #endif | ||
777 | { | ||
778 | rdtscl(tsc_start); | ||
779 | |||
780 | do { | ||
781 | apic = apic_read(APIC_TMCCT); | ||
782 | rdtscl(tsc); | ||
783 | } while ((tsc - tsc_start) < TICK_COUNT && | ||
784 | (apic - apic_start) < TICK_COUNT); | ||
785 | |||
786 | result = (apic_start - apic) * 1000L * cpu_khz / | ||
787 | (tsc - tsc_start); | ||
788 | } | ||
789 | printk("result %d\n", result); | ||
744 | 790 | ||
745 | result = (apic_start - apic) * 1000L * cpu_khz / (tsc - tsc_start); | ||
746 | 791 | ||
747 | printk(KERN_INFO "Detected %d.%03d MHz APIC timer.\n", | 792 | printk(KERN_INFO "Detected %d.%03d MHz APIC timer.\n", |
748 | result / 1000 / 1000, result / 1000 % 1000); | 793 | result / 1000 / 1000, result / 1000 % 1000); |
@@ -872,6 +917,8 @@ void smp_local_timer_interrupt(struct pt_regs *regs) | |||
872 | #ifdef CONFIG_SMP | 917 | #ifdef CONFIG_SMP |
873 | update_process_times(user_mode(regs)); | 918 | update_process_times(user_mode(regs)); |
874 | #endif | 919 | #endif |
920 | if (apic_runs_main_timer > 1 && smp_processor_id() == boot_cpu_id) | ||
921 | main_timer_handler(regs); | ||
875 | /* | 922 | /* |
876 | * We take the 'long' return path, and there every subsystem | 923 | * We take the 'long' return path, and there every subsystem |
877 | * grabs the appropriate locks (kernel lock/ irq lock). | 924 | * grabs the appropriate locks (kernel lock/ irq lock). |
@@ -924,7 +971,7 @@ void smp_apic_timer_interrupt(struct pt_regs *regs) | |||
924 | * multi-chassis. Use available data to take a good guess. | 971 | * multi-chassis. Use available data to take a good guess. |
925 | * If in doubt, go HPET. | 972 | * If in doubt, go HPET. |
926 | */ | 973 | */ |
927 | __init int oem_force_hpet_timer(void) | 974 | __cpuinit int oem_force_hpet_timer(void) |
928 | { | 975 | { |
929 | int i, clusters, zeros; | 976 | int i, clusters, zeros; |
930 | unsigned id; | 977 | unsigned id; |
@@ -1081,10 +1128,35 @@ static __init int setup_nolapic(char *str) | |||
1081 | 1128 | ||
1082 | static __init int setup_noapictimer(char *str) | 1129 | static __init int setup_noapictimer(char *str) |
1083 | { | 1130 | { |
1131 | if (str[0] != ' ' && str[0] != 0) | ||
1132 | return -1; | ||
1084 | disable_apic_timer = 1; | 1133 | disable_apic_timer = 1; |
1085 | return 0; | 1134 | return 0; |
1086 | } | 1135 | } |
1087 | 1136 | ||
1137 | static __init int setup_apicmaintimer(char *str) | ||
1138 | { | ||
1139 | apic_runs_main_timer = 1; | ||
1140 | nohpet = 1; | ||
1141 | return 0; | ||
1142 | } | ||
1143 | __setup("apicmaintimer", setup_apicmaintimer); | ||
1144 | |||
1145 | static __init int setup_noapicmaintimer(char *str) | ||
1146 | { | ||
1147 | apic_runs_main_timer = -1; | ||
1148 | return 0; | ||
1149 | } | ||
1150 | __setup("noapicmaintimer", setup_noapicmaintimer); | ||
1151 | |||
1152 | static __init int setup_apicpmtimer(char *s) | ||
1153 | { | ||
1154 | apic_calibrate_pmtmr = 1; | ||
1155 | notsc_setup(NULL); | ||
1156 | return setup_apicmaintimer(NULL); | ||
1157 | } | ||
1158 | __setup("apicpmtimer", setup_apicpmtimer); | ||
1159 | |||
1088 | /* dummy parsing: see setup.c */ | 1160 | /* dummy parsing: see setup.c */ |
1089 | 1161 | ||
1090 | __setup("disableapic", setup_disableapic); | 1162 | __setup("disableapic", setup_disableapic); |
diff --git a/arch/x86_64/kernel/entry.S b/arch/x86_64/kernel/entry.S index dbdba56e8faa..7c10e9009d61 100644 --- a/arch/x86_64/kernel/entry.S +++ b/arch/x86_64/kernel/entry.S | |||
@@ -499,7 +499,9 @@ ENTRY(stub_rt_sigreturn) | |||
499 | movq %gs:pda_irqstackptr,%rax | 499 | movq %gs:pda_irqstackptr,%rax |
500 | cmoveq %rax,%rsp /*todo This needs CFI annotation! */ | 500 | cmoveq %rax,%rsp /*todo This needs CFI annotation! */ |
501 | pushq %rdi # save old stack | 501 | pushq %rdi # save old stack |
502 | #ifndef CONFIG_DEBUG_INFO | ||
502 | CFI_ADJUST_CFA_OFFSET 8 | 503 | CFI_ADJUST_CFA_OFFSET 8 |
504 | #endif | ||
503 | call \func | 505 | call \func |
504 | .endm | 506 | .endm |
505 | 507 | ||
@@ -509,7 +511,9 @@ ENTRY(common_interrupt) | |||
509 | /* 0(%rsp): oldrsp-ARGOFFSET */ | 511 | /* 0(%rsp): oldrsp-ARGOFFSET */ |
510 | ret_from_intr: | 512 | ret_from_intr: |
511 | popq %rdi | 513 | popq %rdi |
514 | #ifndef CONFIG_DEBUG_INFO | ||
512 | CFI_ADJUST_CFA_OFFSET -8 | 515 | CFI_ADJUST_CFA_OFFSET -8 |
516 | #endif | ||
513 | cli | 517 | cli |
514 | decl %gs:pda_irqcount | 518 | decl %gs:pda_irqcount |
515 | #ifdef CONFIG_DEBUG_INFO | 519 | #ifdef CONFIG_DEBUG_INFO |
@@ -550,6 +554,7 @@ iret_label: | |||
550 | /* running with kernel gs */ | 554 | /* running with kernel gs */ |
551 | bad_iret: | 555 | bad_iret: |
552 | movq $-9999,%rdi /* better code? */ | 556 | movq $-9999,%rdi /* better code? */ |
557 | sti | ||
553 | jmp do_exit | 558 | jmp do_exit |
554 | .previous | 559 | .previous |
555 | 560 | ||
@@ -922,7 +927,7 @@ KPROBE_ENTRY(debug) | |||
922 | .previous .text | 927 | .previous .text |
923 | 928 | ||
924 | /* runs on exception stack */ | 929 | /* runs on exception stack */ |
925 | ENTRY(nmi) | 930 | KPROBE_ENTRY(nmi) |
926 | INTR_FRAME | 931 | INTR_FRAME |
927 | pushq $-1 | 932 | pushq $-1 |
928 | CFI_ADJUST_CFA_OFFSET 8 | 933 | CFI_ADJUST_CFA_OFFSET 8 |
@@ -969,6 +974,7 @@ paranoid_schedule: | |||
969 | cli | 974 | cli |
970 | jmp paranoid_userspace | 975 | jmp paranoid_userspace |
971 | CFI_ENDPROC | 976 | CFI_ENDPROC |
977 | .previous .text | ||
972 | 978 | ||
973 | KPROBE_ENTRY(int3) | 979 | KPROBE_ENTRY(int3) |
974 | INTR_FRAME | 980 | INTR_FRAME |
diff --git a/arch/x86_64/kernel/head.S b/arch/x86_64/kernel/head.S index 692c737feddb..02fc7fa0ea28 100644 --- a/arch/x86_64/kernel/head.S +++ b/arch/x86_64/kernel/head.S | |||
@@ -213,6 +213,11 @@ ENTRY(early_idt_handler) | |||
213 | cmpl $2,early_recursion_flag(%rip) | 213 | cmpl $2,early_recursion_flag(%rip) |
214 | jz 1f | 214 | jz 1f |
215 | call dump_stack | 215 | call dump_stack |
216 | #ifdef CONFIG_KALLSYMS | ||
217 | leaq early_idt_ripmsg(%rip),%rdi | ||
218 | movq 8(%rsp),%rsi # get rip again | ||
219 | call __print_symbol | ||
220 | #endif | ||
216 | 1: hlt | 221 | 1: hlt |
217 | jmp 1b | 222 | jmp 1b |
218 | early_recursion_flag: | 223 | early_recursion_flag: |
@@ -220,6 +225,8 @@ early_recursion_flag: | |||
220 | 225 | ||
221 | early_idt_msg: | 226 | early_idt_msg: |
222 | .asciz "PANIC: early exception rip %lx error %lx cr2 %lx\n" | 227 | .asciz "PANIC: early exception rip %lx error %lx cr2 %lx\n" |
228 | early_idt_ripmsg: | ||
229 | .asciz "RIP %s\n" | ||
223 | 230 | ||
224 | .code32 | 231 | .code32 |
225 | ENTRY(no_long_mode) | 232 | ENTRY(no_long_mode) |
diff --git a/arch/x86_64/kernel/io_apic.c b/arch/x86_64/kernel/io_apic.c index e8cf44ef8778..ffed464e6b12 100644 --- a/arch/x86_64/kernel/io_apic.c +++ b/arch/x86_64/kernel/io_apic.c | |||
@@ -30,6 +30,9 @@ | |||
30 | #include <linux/mc146818rtc.h> | 30 | #include <linux/mc146818rtc.h> |
31 | #include <linux/acpi.h> | 31 | #include <linux/acpi.h> |
32 | #include <linux/sysdev.h> | 32 | #include <linux/sysdev.h> |
33 | #ifdef CONFIG_ACPI | ||
34 | #include <acpi/acpi_bus.h> | ||
35 | #endif | ||
33 | 36 | ||
34 | #include <asm/io.h> | 37 | #include <asm/io.h> |
35 | #include <asm/smp.h> | 38 | #include <asm/smp.h> |
@@ -47,6 +50,8 @@ static int no_timer_check; | |||
47 | 50 | ||
48 | int disable_timer_pin_1 __initdata; | 51 | int disable_timer_pin_1 __initdata; |
49 | 52 | ||
53 | int timer_over_8254 __initdata = 1; | ||
54 | |||
50 | /* Where if anywhere is the i8259 connect in external int mode */ | 55 | /* Where if anywhere is the i8259 connect in external int mode */ |
51 | static struct { int pin, apic; } ioapic_i8259 = { -1, -1 }; | 56 | static struct { int pin, apic; } ioapic_i8259 = { -1, -1 }; |
52 | 57 | ||
@@ -248,6 +253,20 @@ static int __init enable_ioapic_setup(char *str) | |||
248 | __setup("noapic", disable_ioapic_setup); | 253 | __setup("noapic", disable_ioapic_setup); |
249 | __setup("apic", enable_ioapic_setup); | 254 | __setup("apic", enable_ioapic_setup); |
250 | 255 | ||
256 | static int __init setup_disable_8254_timer(char *s) | ||
257 | { | ||
258 | timer_over_8254 = -1; | ||
259 | return 1; | ||
260 | } | ||
261 | static int __init setup_enable_8254_timer(char *s) | ||
262 | { | ||
263 | timer_over_8254 = 2; | ||
264 | return 1; | ||
265 | } | ||
266 | |||
267 | __setup("disable_8254_timer", setup_disable_8254_timer); | ||
268 | __setup("enable_8254_timer", setup_enable_8254_timer); | ||
269 | |||
251 | #include <asm/pci-direct.h> | 270 | #include <asm/pci-direct.h> |
252 | #include <linux/pci_ids.h> | 271 | #include <linux/pci_ids.h> |
253 | #include <linux/pci.h> | 272 | #include <linux/pci.h> |
@@ -260,6 +279,8 @@ __setup("apic", enable_ioapic_setup); | |||
260 | 279 | ||
261 | And another hack to disable the IOMMU on VIA chipsets. | 280 | And another hack to disable the IOMMU on VIA chipsets. |
262 | 281 | ||
282 | ... and others. Really should move this somewhere else. | ||
283 | |||
263 | Kludge-O-Rama. */ | 284 | Kludge-O-Rama. */ |
264 | void __init check_ioapic(void) | 285 | void __init check_ioapic(void) |
265 | { | 286 | { |
@@ -304,8 +325,20 @@ void __init check_ioapic(void) | |||
304 | #endif | 325 | #endif |
305 | /* RED-PEN skip them on mptables too? */ | 326 | /* RED-PEN skip them on mptables too? */ |
306 | return; | 327 | return; |
328 | |||
329 | /* This should be actually default, but | ||
330 | for 2.6.16 let's do it for ATI only where | ||
331 | it's really needed. */ | ||
332 | case PCI_VENDOR_ID_ATI: | ||
333 | if (timer_over_8254 == 1) { | ||
334 | timer_over_8254 = 0; | ||
335 | printk(KERN_INFO | ||
336 | "ATI board detected. Disabling timer routing over 8254.\n"); | ||
337 | } | ||
338 | return; | ||
307 | } | 339 | } |
308 | 340 | ||
341 | |||
309 | /* No multi-function device? */ | 342 | /* No multi-function device? */ |
310 | type = read_pci_config_byte(num,slot,func, | 343 | type = read_pci_config_byte(num,slot,func, |
311 | PCI_HEADER_TYPE); | 344 | PCI_HEADER_TYPE); |
@@ -1749,6 +1782,8 @@ static inline void unlock_ExtINT_logic(void) | |||
1749 | * a wide range of boards and BIOS bugs. Fortunately only the timer IRQ | 1782 | * a wide range of boards and BIOS bugs. Fortunately only the timer IRQ |
1750 | * is so screwy. Thanks to Brian Perkins for testing/hacking this beast | 1783 | * is so screwy. Thanks to Brian Perkins for testing/hacking this beast |
1751 | * fanatically on his truly buggy board. | 1784 | * fanatically on his truly buggy board. |
1785 | * | ||
1786 | * FIXME: really need to revamp this for modern platforms only. | ||
1752 | */ | 1787 | */ |
1753 | static inline void check_timer(void) | 1788 | static inline void check_timer(void) |
1754 | { | 1789 | { |
@@ -1771,7 +1806,8 @@ static inline void check_timer(void) | |||
1771 | */ | 1806 | */ |
1772 | apic_write(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_EXTINT); | 1807 | apic_write(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_EXTINT); |
1773 | init_8259A(1); | 1808 | init_8259A(1); |
1774 | enable_8259A_irq(0); | 1809 | if (timer_over_8254 > 0) |
1810 | enable_8259A_irq(0); | ||
1775 | 1811 | ||
1776 | pin1 = find_isa_irq_pin(0, mp_INT); | 1812 | pin1 = find_isa_irq_pin(0, mp_INT); |
1777 | apic1 = find_isa_irq_apic(0, mp_INT); | 1813 | apic1 = find_isa_irq_apic(0, mp_INT); |
@@ -1826,7 +1862,7 @@ static inline void check_timer(void) | |||
1826 | } | 1862 | } |
1827 | printk(" failed.\n"); | 1863 | printk(" failed.\n"); |
1828 | 1864 | ||
1829 | if (nmi_watchdog) { | 1865 | if (nmi_watchdog == NMI_IO_APIC) { |
1830 | printk(KERN_WARNING "timer doesn't work through the IO-APIC - disabling NMI Watchdog!\n"); | 1866 | printk(KERN_WARNING "timer doesn't work through the IO-APIC - disabling NMI Watchdog!\n"); |
1831 | nmi_watchdog = 0; | 1867 | nmi_watchdog = 0; |
1832 | } | 1868 | } |
@@ -2027,7 +2063,7 @@ int __init io_apic_get_redir_entries (int ioapic) | |||
2027 | } | 2063 | } |
2028 | 2064 | ||
2029 | 2065 | ||
2030 | int io_apic_set_pci_routing (int ioapic, int pin, int irq, int edge_level, int active_high_low) | 2066 | int io_apic_set_pci_routing (int ioapic, int pin, int irq, int triggering, int polarity) |
2031 | { | 2067 | { |
2032 | struct IO_APIC_route_entry entry; | 2068 | struct IO_APIC_route_entry entry; |
2033 | unsigned long flags; | 2069 | unsigned long flags; |
@@ -2049,8 +2085,8 @@ int io_apic_set_pci_routing (int ioapic, int pin, int irq, int edge_level, int a | |||
2049 | entry.delivery_mode = INT_DELIVERY_MODE; | 2085 | entry.delivery_mode = INT_DELIVERY_MODE; |
2050 | entry.dest_mode = INT_DEST_MODE; | 2086 | entry.dest_mode = INT_DEST_MODE; |
2051 | entry.dest.logical.logical_dest = cpu_mask_to_apicid(TARGET_CPUS); | 2087 | entry.dest.logical.logical_dest = cpu_mask_to_apicid(TARGET_CPUS); |
2052 | entry.trigger = edge_level; | 2088 | entry.trigger = triggering; |
2053 | entry.polarity = active_high_low; | 2089 | entry.polarity = polarity; |
2054 | entry.mask = 1; /* Disabled (masked) */ | 2090 | entry.mask = 1; /* Disabled (masked) */ |
2055 | 2091 | ||
2056 | irq = gsi_irq_sharing(irq); | 2092 | irq = gsi_irq_sharing(irq); |
@@ -2065,9 +2101,9 @@ int io_apic_set_pci_routing (int ioapic, int pin, int irq, int edge_level, int a | |||
2065 | apic_printk(APIC_VERBOSE,KERN_DEBUG "IOAPIC[%d]: Set PCI routing entry (%d-%d -> 0x%x -> " | 2101 | apic_printk(APIC_VERBOSE,KERN_DEBUG "IOAPIC[%d]: Set PCI routing entry (%d-%d -> 0x%x -> " |
2066 | "IRQ %d Mode:%i Active:%i)\n", ioapic, | 2102 | "IRQ %d Mode:%i Active:%i)\n", ioapic, |
2067 | mp_ioapics[ioapic].mpc_apicid, pin, entry.vector, irq, | 2103 | mp_ioapics[ioapic].mpc_apicid, pin, entry.vector, irq, |
2068 | edge_level, active_high_low); | 2104 | triggering, polarity); |
2069 | 2105 | ||
2070 | ioapic_register_intr(irq, entry.vector, edge_level); | 2106 | ioapic_register_intr(irq, entry.vector, triggering); |
2071 | 2107 | ||
2072 | if (!ioapic && (irq < 16)) | 2108 | if (!ioapic && (irq < 16)) |
2073 | disable_8259A_irq(irq); | 2109 | disable_8259A_irq(irq); |
diff --git a/arch/x86_64/kernel/machine_kexec.c b/arch/x86_64/kernel/machine_kexec.c index 89fab51e20f4..25ac8a3faae6 100644 --- a/arch/x86_64/kernel/machine_kexec.c +++ b/arch/x86_64/kernel/machine_kexec.c | |||
@@ -140,7 +140,7 @@ static void load_segments(void) | |||
140 | "\tmovl %0,%%ss\n" | 140 | "\tmovl %0,%%ss\n" |
141 | "\tmovl %0,%%fs\n" | 141 | "\tmovl %0,%%fs\n" |
142 | "\tmovl %0,%%gs\n" | 142 | "\tmovl %0,%%gs\n" |
143 | : : "a" (__KERNEL_DS) | 143 | : : "a" (__KERNEL_DS) : "memory" |
144 | ); | 144 | ); |
145 | } | 145 | } |
146 | 146 | ||
diff --git a/arch/x86_64/kernel/mce.c b/arch/x86_64/kernel/mce.c index 13a2eada6c95..b8b9529fa89e 100644 --- a/arch/x86_64/kernel/mce.c +++ b/arch/x86_64/kernel/mce.c | |||
@@ -380,7 +380,7 @@ static void __cpuinit mce_cpu_features(struct cpuinfo_x86 *c) | |||
380 | */ | 380 | */ |
381 | void __cpuinit mcheck_init(struct cpuinfo_x86 *c) | 381 | void __cpuinit mcheck_init(struct cpuinfo_x86 *c) |
382 | { | 382 | { |
383 | static cpumask_t mce_cpus __initdata = CPU_MASK_NONE; | 383 | static cpumask_t mce_cpus = CPU_MASK_NONE; |
384 | 384 | ||
385 | mce_cpu_quirks(c); | 385 | mce_cpu_quirks(c); |
386 | 386 | ||
diff --git a/arch/x86_64/kernel/mpparse.c b/arch/x86_64/kernel/mpparse.c index 1105250bf02c..9013a90b5c2e 100644 --- a/arch/x86_64/kernel/mpparse.c +++ b/arch/x86_64/kernel/mpparse.c | |||
@@ -288,9 +288,9 @@ static int __init smp_read_mpc(struct mp_config_table *mpc) | |||
288 | 288 | ||
289 | memcpy(str,mpc->mpc_productid,12); | 289 | memcpy(str,mpc->mpc_productid,12); |
290 | str[12]=0; | 290 | str[12]=0; |
291 | printk(KERN_INFO "Product ID: %s ",str); | 291 | printk("Product ID: %s ",str); |
292 | 292 | ||
293 | printk(KERN_INFO "APIC at: 0x%X\n",mpc->mpc_lapic); | 293 | printk("APIC at: 0x%X\n",mpc->mpc_lapic); |
294 | 294 | ||
295 | /* save the local APIC address, it might be non-default */ | 295 | /* save the local APIC address, it might be non-default */ |
296 | if (!acpi_lapic) | 296 | if (!acpi_lapic) |
@@ -915,7 +915,7 @@ void __init mp_config_acpi_legacy_irqs (void) | |||
915 | 915 | ||
916 | #define MAX_GSI_NUM 4096 | 916 | #define MAX_GSI_NUM 4096 |
917 | 917 | ||
918 | int mp_register_gsi(u32 gsi, int edge_level, int active_high_low) | 918 | int mp_register_gsi(u32 gsi, int triggering, int polarity) |
919 | { | 919 | { |
920 | int ioapic = -1; | 920 | int ioapic = -1; |
921 | int ioapic_pin = 0; | 921 | int ioapic_pin = 0; |
@@ -964,7 +964,7 @@ int mp_register_gsi(u32 gsi, int edge_level, int active_high_low) | |||
964 | 964 | ||
965 | mp_ioapic_routing[ioapic].pin_programmed[idx] |= (1<<bit); | 965 | mp_ioapic_routing[ioapic].pin_programmed[idx] |= (1<<bit); |
966 | 966 | ||
967 | if (edge_level) { | 967 | if (triggering == ACPI_LEVEL_SENSITIVE) { |
968 | /* | 968 | /* |
969 | * For PCI devices assign IRQs in order, avoiding gaps | 969 | * For PCI devices assign IRQs in order, avoiding gaps |
970 | * due to unused I/O APIC pins. | 970 | * due to unused I/O APIC pins. |
@@ -986,8 +986,8 @@ int mp_register_gsi(u32 gsi, int edge_level, int active_high_low) | |||
986 | } | 986 | } |
987 | 987 | ||
988 | io_apic_set_pci_routing(ioapic, ioapic_pin, gsi, | 988 | io_apic_set_pci_routing(ioapic, ioapic_pin, gsi, |
989 | edge_level == ACPI_EDGE_SENSITIVE ? 0 : 1, | 989 | triggering == ACPI_EDGE_SENSITIVE ? 0 : 1, |
990 | active_high_low == ACPI_ACTIVE_HIGH ? 0 : 1); | 990 | polarity == ACPI_ACTIVE_HIGH ? 0 : 1); |
991 | return gsi; | 991 | return gsi; |
992 | } | 992 | } |
993 | 993 | ||
diff --git a/arch/x86_64/kernel/nmi.c b/arch/x86_64/kernel/nmi.c index 5fae6f0cd994..5bf17e41cd2d 100644 --- a/arch/x86_64/kernel/nmi.c +++ b/arch/x86_64/kernel/nmi.c | |||
@@ -24,6 +24,7 @@ | |||
24 | #include <linux/sysdev.h> | 24 | #include <linux/sysdev.h> |
25 | #include <linux/nmi.h> | 25 | #include <linux/nmi.h> |
26 | #include <linux/sysctl.h> | 26 | #include <linux/sysctl.h> |
27 | #include <linux/kprobes.h> | ||
27 | 28 | ||
28 | #include <asm/smp.h> | 29 | #include <asm/smp.h> |
29 | #include <asm/mtrr.h> | 30 | #include <asm/mtrr.h> |
@@ -235,6 +236,7 @@ static void enable_lapic_nmi_watchdog(void) | |||
235 | { | 236 | { |
236 | if (nmi_active < 0) { | 237 | if (nmi_active < 0) { |
237 | nmi_watchdog = NMI_LOCAL_APIC; | 238 | nmi_watchdog = NMI_LOCAL_APIC; |
239 | touch_nmi_watchdog(); | ||
238 | setup_apic_nmi_watchdog(); | 240 | setup_apic_nmi_watchdog(); |
239 | } | 241 | } |
240 | } | 242 | } |
@@ -455,20 +457,22 @@ static DEFINE_PER_CPU(int, nmi_touch); | |||
455 | 457 | ||
456 | void touch_nmi_watchdog (void) | 458 | void touch_nmi_watchdog (void) |
457 | { | 459 | { |
458 | int i; | 460 | if (nmi_watchdog > 0) { |
461 | unsigned cpu; | ||
459 | 462 | ||
460 | /* | 463 | /* |
461 | * Tell other CPUs to reset their alert counters. We cannot | 464 | * Tell other CPUs to reset their alert counters. We cannot |
462 | * do it ourselves because the alert count increase is not | 465 | * do it ourselves because the alert count increase is not |
463 | * atomic. | 466 | * atomic. |
464 | */ | 467 | */ |
465 | for (i = 0; i < NR_CPUS; i++) | 468 | for_each_present_cpu (cpu) |
466 | per_cpu(nmi_touch, i) = 1; | 469 | per_cpu(nmi_touch, cpu) = 1; |
470 | } | ||
467 | 471 | ||
468 | touch_softlockup_watchdog(); | 472 | touch_softlockup_watchdog(); |
469 | } | 473 | } |
470 | 474 | ||
471 | void nmi_watchdog_tick (struct pt_regs * regs, unsigned reason) | 475 | void __kprobes nmi_watchdog_tick(struct pt_regs * regs, unsigned reason) |
472 | { | 476 | { |
473 | int sum; | 477 | int sum; |
474 | int touched = 0; | 478 | int touched = 0; |
@@ -512,14 +516,14 @@ void nmi_watchdog_tick (struct pt_regs * regs, unsigned reason) | |||
512 | } | 516 | } |
513 | } | 517 | } |
514 | 518 | ||
515 | static int dummy_nmi_callback(struct pt_regs * regs, int cpu) | 519 | static __kprobes int dummy_nmi_callback(struct pt_regs * regs, int cpu) |
516 | { | 520 | { |
517 | return 0; | 521 | return 0; |
518 | } | 522 | } |
519 | 523 | ||
520 | static nmi_callback_t nmi_callback = dummy_nmi_callback; | 524 | static nmi_callback_t nmi_callback = dummy_nmi_callback; |
521 | 525 | ||
522 | asmlinkage void do_nmi(struct pt_regs * regs, long error_code) | 526 | asmlinkage __kprobes void do_nmi(struct pt_regs * regs, long error_code) |
523 | { | 527 | { |
524 | int cpu = safe_smp_processor_id(); | 528 | int cpu = safe_smp_processor_id(); |
525 | 529 | ||
diff --git a/arch/x86_64/kernel/pci-dma.c b/arch/x86_64/kernel/pci-dma.c index 2f5d8328e2b9..4ed391edd47a 100644 --- a/arch/x86_64/kernel/pci-dma.c +++ b/arch/x86_64/kernel/pci-dma.c | |||
@@ -107,6 +107,9 @@ dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, | |||
107 | goto again; | 107 | goto again; |
108 | } | 108 | } |
109 | 109 | ||
110 | /* Let low level make its own zone decisions */ | ||
111 | gfp &= ~(GFP_DMA32|GFP_DMA); | ||
112 | |||
110 | if (dma_ops->alloc_coherent) | 113 | if (dma_ops->alloc_coherent) |
111 | return dma_ops->alloc_coherent(dev, size, | 114 | return dma_ops->alloc_coherent(dev, size, |
112 | dma_handle, gfp); | 115 | dma_handle, gfp); |
diff --git a/arch/x86_64/kernel/pci-gart.c b/arch/x86_64/kernel/pci-gart.c index c37fc7726ba6..0c3f052ba6ce 100644 --- a/arch/x86_64/kernel/pci-gart.c +++ b/arch/x86_64/kernel/pci-gart.c | |||
@@ -228,11 +228,6 @@ static inline int need_iommu(struct device *dev, unsigned long addr, size_t size | |||
228 | int mmu = high; | 228 | int mmu = high; |
229 | if (force_iommu) | 229 | if (force_iommu) |
230 | mmu = 1; | 230 | mmu = 1; |
231 | if (no_iommu) { | ||
232 | if (high) | ||
233 | panic("PCI-DMA: high address but no IOMMU.\n"); | ||
234 | mmu = 0; | ||
235 | } | ||
236 | return mmu; | 231 | return mmu; |
237 | } | 232 | } |
238 | 233 | ||
@@ -241,11 +236,6 @@ static inline int nonforced_iommu(struct device *dev, unsigned long addr, size_t | |||
241 | u64 mask = *dev->dma_mask; | 236 | u64 mask = *dev->dma_mask; |
242 | int high = addr + size >= mask; | 237 | int high = addr + size >= mask; |
243 | int mmu = high; | 238 | int mmu = high; |
244 | if (no_iommu) { | ||
245 | if (high) | ||
246 | panic("PCI-DMA: high address but no IOMMU.\n"); | ||
247 | mmu = 0; | ||
248 | } | ||
249 | return mmu; | 239 | return mmu; |
250 | } | 240 | } |
251 | 241 | ||
@@ -379,7 +369,7 @@ static int __dma_map_cont(struct scatterlist *sg, int start, int stopat, | |||
379 | SET_LEAK(iommu_page); | 369 | SET_LEAK(iommu_page); |
380 | addr += PAGE_SIZE; | 370 | addr += PAGE_SIZE; |
381 | iommu_page++; | 371 | iommu_page++; |
382 | } | 372 | } |
383 | } | 373 | } |
384 | BUG_ON(iommu_page - iommu_start != pages); | 374 | BUG_ON(iommu_page - iommu_start != pages); |
385 | return 0; | 375 | return 0; |
@@ -457,9 +447,12 @@ int gart_map_sg(struct device *dev, struct scatterlist *sg, int nents, int dir) | |||
457 | error: | 447 | error: |
458 | flush_gart(NULL); | 448 | flush_gart(NULL); |
459 | gart_unmap_sg(dev, sg, nents, dir); | 449 | gart_unmap_sg(dev, sg, nents, dir); |
460 | /* When it was forced try again unforced */ | 450 | /* When it was forced or merged try again in a dumb way */ |
461 | if (force_iommu) | 451 | if (force_iommu || iommu_merge) { |
462 | return dma_map_sg_nonforce(dev, sg, nents, dir); | 452 | out = dma_map_sg_nonforce(dev, sg, nents, dir); |
453 | if (out > 0) | ||
454 | return out; | ||
455 | } | ||
463 | if (panic_on_overflow) | 456 | if (panic_on_overflow) |
464 | panic("dma_map_sg: overflow on %lu pages\n", pages); | 457 | panic("dma_map_sg: overflow on %lu pages\n", pages); |
465 | iommu_full(dev, pages << PAGE_SHIFT, dir); | 458 | iommu_full(dev, pages << PAGE_SHIFT, dir); |
@@ -631,20 +624,25 @@ static int __init pci_iommu_init(void) | |||
631 | (agp_copy_info(agp_bridge, &info) < 0); | 624 | (agp_copy_info(agp_bridge, &info) < 0); |
632 | #endif | 625 | #endif |
633 | 626 | ||
634 | if (swiotlb) { | 627 | if (swiotlb) |
635 | no_iommu = 1; | ||
636 | return -1; | 628 | return -1; |
637 | } | 629 | |
638 | |||
639 | if (no_iommu || | 630 | if (no_iommu || |
640 | (!force_iommu && end_pfn <= MAX_DMA32_PFN) || | 631 | (!force_iommu && end_pfn <= MAX_DMA32_PFN) || |
641 | !iommu_aperture || | 632 | !iommu_aperture || |
642 | (no_agp && init_k8_gatt(&info) < 0)) { | 633 | (no_agp && init_k8_gatt(&info) < 0)) { |
643 | no_iommu = 1; | 634 | printk(KERN_INFO "PCI-DMA: Disabling IOMMU.\n"); |
644 | no_iommu_init(); | 635 | if (end_pfn > MAX_DMA32_PFN) { |
636 | printk(KERN_ERR "WARNING more than 4GB of memory " | ||
637 | "but IOMMU not compiled in.\n" | ||
638 | KERN_ERR "WARNING 32bit PCI may malfunction.\n" | ||
639 | KERN_ERR "You might want to enable " | ||
640 | "CONFIG_GART_IOMMU\n"); | ||
641 | } | ||
645 | return -1; | 642 | return -1; |
646 | } | 643 | } |
647 | 644 | ||
645 | printk(KERN_INFO "PCI-DMA: using GART IOMMU.\n"); | ||
648 | aper_size = info.aper_size * 1024 * 1024; | 646 | aper_size = info.aper_size * 1024 * 1024; |
649 | iommu_size = check_iommu_size(info.aper_base, aper_size); | 647 | iommu_size = check_iommu_size(info.aper_base, aper_size); |
650 | iommu_pages = iommu_size >> PAGE_SHIFT; | 648 | iommu_pages = iommu_size >> PAGE_SHIFT; |
@@ -718,7 +716,6 @@ static int __init pci_iommu_init(void) | |||
718 | 716 | ||
719 | flush_gart(NULL); | 717 | flush_gart(NULL); |
720 | 718 | ||
721 | printk(KERN_INFO "PCI-DMA: using GART IOMMU.\n"); | ||
722 | dma_ops = &gart_dma_ops; | 719 | dma_ops = &gart_dma_ops; |
723 | 720 | ||
724 | return 0; | 721 | return 0; |
diff --git a/arch/x86_64/kernel/pci-nommu.c b/arch/x86_64/kernel/pci-nommu.c index e41564975195..44adcc2d5e5b 100644 --- a/arch/x86_64/kernel/pci-nommu.c +++ b/arch/x86_64/kernel/pci-nommu.c | |||
@@ -88,12 +88,5 @@ void __init no_iommu_init(void) | |||
88 | { | 88 | { |
89 | if (dma_ops) | 89 | if (dma_ops) |
90 | return; | 90 | return; |
91 | printk(KERN_INFO "PCI-DMA: Disabling IOMMU.\n"); | ||
92 | dma_ops = &nommu_dma_ops; | 91 | dma_ops = &nommu_dma_ops; |
93 | if (end_pfn > MAX_DMA32_PFN) { | ||
94 | printk(KERN_ERR | ||
95 | "WARNING more than 4GB of memory but IOMMU not compiled in.\n" | ||
96 | KERN_ERR "WARNING 32bit PCI may malfunction.\n" | ||
97 | KERN_ERR "You might want to enable CONFIG_GART_IOMMU\n"); | ||
98 | } | ||
99 | } | 92 | } |
diff --git a/arch/x86_64/kernel/pci-swiotlb.c b/arch/x86_64/kernel/pci-swiotlb.c index 3569a25ad7fb..990ed67896f2 100644 --- a/arch/x86_64/kernel/pci-swiotlb.c +++ b/arch/x86_64/kernel/pci-swiotlb.c | |||
@@ -35,8 +35,8 @@ void pci_swiotlb_init(void) | |||
35 | (end_pfn > MAX_DMA32_PFN || force_iommu)) | 35 | (end_pfn > MAX_DMA32_PFN || force_iommu)) |
36 | swiotlb = 1; | 36 | swiotlb = 1; |
37 | if (swiotlb) { | 37 | if (swiotlb) { |
38 | swiotlb_init(); | ||
39 | printk(KERN_INFO "PCI-DMA: Using software bounce buffering for IO (SWIOTLB)\n"); | 38 | printk(KERN_INFO "PCI-DMA: Using software bounce buffering for IO (SWIOTLB)\n"); |
39 | swiotlb_init(); | ||
40 | dma_ops = &swiotlb_dma_ops; | 40 | dma_ops = &swiotlb_dma_ops; |
41 | } | 41 | } |
42 | } | 42 | } |
diff --git a/arch/x86_64/kernel/pmtimer.c b/arch/x86_64/kernel/pmtimer.c index feb5f108dd26..5c51d10408a6 100644 --- a/arch/x86_64/kernel/pmtimer.c +++ b/arch/x86_64/kernel/pmtimer.c | |||
@@ -80,6 +80,31 @@ int pmtimer_mark_offset(void) | |||
80 | return lost - 1; | 80 | return lost - 1; |
81 | } | 81 | } |
82 | 82 | ||
83 | static unsigned pmtimer_wait_tick(void) | ||
84 | { | ||
85 | u32 a, b; | ||
86 | for (a = b = inl(pmtmr_ioport) & ACPI_PM_MASK; | ||
87 | a == b; | ||
88 | b = inl(pmtmr_ioport) & ACPI_PM_MASK) | ||
89 | ; | ||
90 | return b; | ||
91 | } | ||
92 | |||
93 | /* note: wait time is rounded up to one tick */ | ||
94 | void pmtimer_wait(unsigned us) | ||
95 | { | ||
96 | u32 a, b; | ||
97 | a = pmtimer_wait_tick(); | ||
98 | do { | ||
99 | b = inl(pmtmr_ioport); | ||
100 | } while (cyc2us(b - a) < us); | ||
101 | } | ||
102 | |||
103 | void pmtimer_resume(void) | ||
104 | { | ||
105 | last_pmtmr_tick = inl(pmtmr_ioport); | ||
106 | } | ||
107 | |||
83 | unsigned int do_gettimeoffset_pm(void) | 108 | unsigned int do_gettimeoffset_pm(void) |
84 | { | 109 | { |
85 | u32 now, offset, delta = 0; | 110 | u32 now, offset, delta = 0; |
diff --git a/arch/x86_64/kernel/process.c b/arch/x86_64/kernel/process.c index 8ded407e4a94..22a05dec81a2 100644 --- a/arch/x86_64/kernel/process.c +++ b/arch/x86_64/kernel/process.c | |||
@@ -516,8 +516,10 @@ out: | |||
516 | * This could still be optimized: | 516 | * This could still be optimized: |
517 | * - fold all the options into a flag word and test it with a single test. | 517 | * - fold all the options into a flag word and test it with a single test. |
518 | * - could test fs/gs bitsliced | 518 | * - could test fs/gs bitsliced |
519 | * | ||
520 | * Kprobes not supported here. Set the probe on schedule instead. | ||
519 | */ | 521 | */ |
520 | struct task_struct * | 522 | __kprobes struct task_struct * |
521 | __switch_to(struct task_struct *prev_p, struct task_struct *next_p) | 523 | __switch_to(struct task_struct *prev_p, struct task_struct *next_p) |
522 | { | 524 | { |
523 | struct thread_struct *prev = &prev_p->thread, | 525 | struct thread_struct *prev = &prev_p->thread, |
diff --git a/arch/x86_64/kernel/setup.c b/arch/x86_64/kernel/setup.c index 28895c03cb11..aa55e3cec665 100644 --- a/arch/x86_64/kernel/setup.c +++ b/arch/x86_64/kernel/setup.c | |||
@@ -94,7 +94,6 @@ unsigned long saved_video_mode; | |||
94 | /* | 94 | /* |
95 | * Setup options | 95 | * Setup options |
96 | */ | 96 | */ |
97 | struct drive_info_struct { char dummy[32]; } drive_info; | ||
98 | struct screen_info screen_info; | 97 | struct screen_info screen_info; |
99 | struct sys_desc_table_struct { | 98 | struct sys_desc_table_struct { |
100 | unsigned short length; | 99 | unsigned short length; |
@@ -424,6 +423,12 @@ static __init void parse_cmdline_early (char ** cmdline_p) | |||
424 | else if(!memcmp(from, "elfcorehdr=", 11)) | 423 | else if(!memcmp(from, "elfcorehdr=", 11)) |
425 | elfcorehdr_addr = memparse(from+11, &from); | 424 | elfcorehdr_addr = memparse(from+11, &from); |
426 | #endif | 425 | #endif |
426 | |||
427 | #ifdef CONFIG_HOTPLUG_CPU | ||
428 | else if (!memcmp(from, "additional_cpus=", 16)) | ||
429 | setup_additional_cpus(from+16); | ||
430 | #endif | ||
431 | |||
427 | next_char: | 432 | next_char: |
428 | c = *(from++); | 433 | c = *(from++); |
429 | if (!c) | 434 | if (!c) |
@@ -572,7 +577,6 @@ void __init setup_arch(char **cmdline_p) | |||
572 | unsigned long kernel_end; | 577 | unsigned long kernel_end; |
573 | 578 | ||
574 | ROOT_DEV = old_decode_dev(ORIG_ROOT_DEV); | 579 | ROOT_DEV = old_decode_dev(ORIG_ROOT_DEV); |
575 | drive_info = DRIVE_INFO; | ||
576 | screen_info = SCREEN_INFO; | 580 | screen_info = SCREEN_INFO; |
577 | edid_info = EDID_INFO; | 581 | edid_info = EDID_INFO; |
578 | saved_video_mode = SAVED_VIDEO_MODE; | 582 | saved_video_mode = SAVED_VIDEO_MODE; |
@@ -741,7 +745,7 @@ void __init setup_arch(char **cmdline_p) | |||
741 | e820_setup_gap(); | 745 | e820_setup_gap(); |
742 | 746 | ||
743 | #ifdef CONFIG_GART_IOMMU | 747 | #ifdef CONFIG_GART_IOMMU |
744 | iommu_hole_init(); | 748 | iommu_hole_init(); |
745 | #endif | 749 | #endif |
746 | 750 | ||
747 | #ifdef CONFIG_VT | 751 | #ifdef CONFIG_VT |
@@ -877,6 +881,7 @@ static void __init amd_detect_cmp(struct cpuinfo_x86 *c) | |||
877 | static int __init init_amd(struct cpuinfo_x86 *c) | 881 | static int __init init_amd(struct cpuinfo_x86 *c) |
878 | { | 882 | { |
879 | int r; | 883 | int r; |
884 | unsigned level; | ||
880 | 885 | ||
881 | #ifdef CONFIG_SMP | 886 | #ifdef CONFIG_SMP |
882 | unsigned long value; | 887 | unsigned long value; |
@@ -899,6 +904,11 @@ static int __init init_amd(struct cpuinfo_x86 *c) | |||
899 | 3DNow is IDd by bit 31 in extended CPUID (1*32+31) anyway */ | 904 | 3DNow is IDd by bit 31 in extended CPUID (1*32+31) anyway */ |
900 | clear_bit(0*32+31, &c->x86_capability); | 905 | clear_bit(0*32+31, &c->x86_capability); |
901 | 906 | ||
907 | /* On C+ stepping K8 rep microcode works well for copy/memset */ | ||
908 | level = cpuid_eax(1); | ||
909 | if (c->x86 == 15 && ((level >= 0x0f48 && level < 0x0f50) || level >= 0x0f58)) | ||
910 | set_bit(X86_FEATURE_REP_GOOD, &c->x86_capability); | ||
911 | |||
902 | r = get_model_name(c); | 912 | r = get_model_name(c); |
903 | if (!r) { | 913 | if (!r) { |
904 | switch (c->x86) { | 914 | switch (c->x86) { |
diff --git a/arch/x86_64/kernel/smpboot.c b/arch/x86_64/kernel/smpboot.c index a28756ef7cef..66e98659d077 100644 --- a/arch/x86_64/kernel/smpboot.c +++ b/arch/x86_64/kernel/smpboot.c | |||
@@ -59,6 +59,7 @@ | |||
59 | #include <asm/nmi.h> | 59 | #include <asm/nmi.h> |
60 | #include <asm/irq.h> | 60 | #include <asm/irq.h> |
61 | #include <asm/hw_irq.h> | 61 | #include <asm/hw_irq.h> |
62 | #include <asm/numa.h> | ||
62 | 63 | ||
63 | /* Number of siblings per CPU package */ | 64 | /* Number of siblings per CPU package */ |
64 | int smp_num_siblings = 1; | 65 | int smp_num_siblings = 1; |
@@ -890,6 +891,7 @@ do_rest: | |||
890 | if (boot_error) { | 891 | if (boot_error) { |
891 | cpu_clear(cpu, cpu_callout_map); /* was set here (do_boot_cpu()) */ | 892 | cpu_clear(cpu, cpu_callout_map); /* was set here (do_boot_cpu()) */ |
892 | clear_bit(cpu, &cpu_initialized); /* was set by cpu_init() */ | 893 | clear_bit(cpu, &cpu_initialized); /* was set by cpu_init() */ |
894 | clear_node_cpumask(cpu); /* was set by numa_add_cpu */ | ||
893 | cpu_clear(cpu, cpu_present_map); | 895 | cpu_clear(cpu, cpu_present_map); |
894 | cpu_clear(cpu, cpu_possible_map); | 896 | cpu_clear(cpu, cpu_possible_map); |
895 | x86_cpu_to_apicid[cpu] = BAD_APICID; | 897 | x86_cpu_to_apicid[cpu] = BAD_APICID; |
@@ -1150,8 +1152,6 @@ void __init smp_cpus_done(unsigned int max_cpus) | |||
1150 | setup_ioapic_dest(); | 1152 | setup_ioapic_dest(); |
1151 | #endif | 1153 | #endif |
1152 | 1154 | ||
1153 | time_init_gtod(); | ||
1154 | |||
1155 | check_nmi_watchdog(); | 1155 | check_nmi_watchdog(); |
1156 | } | 1156 | } |
1157 | 1157 | ||
@@ -1187,6 +1187,7 @@ void remove_cpu_from_maps(void) | |||
1187 | cpu_clear(cpu, cpu_callout_map); | 1187 | cpu_clear(cpu, cpu_callout_map); |
1188 | cpu_clear(cpu, cpu_callin_map); | 1188 | cpu_clear(cpu, cpu_callin_map); |
1189 | clear_bit(cpu, &cpu_initialized); /* was set by cpu_init() */ | 1189 | clear_bit(cpu, &cpu_initialized); /* was set by cpu_init() */ |
1190 | clear_node_cpumask(cpu); | ||
1190 | } | 1191 | } |
1191 | 1192 | ||
1192 | int __cpu_disable(void) | 1193 | int __cpu_disable(void) |
@@ -1241,7 +1242,7 @@ void __cpu_die(unsigned int cpu) | |||
1241 | printk(KERN_ERR "CPU %u didn't die...\n", cpu); | 1242 | printk(KERN_ERR "CPU %u didn't die...\n", cpu); |
1242 | } | 1243 | } |
1243 | 1244 | ||
1244 | static __init int setup_additional_cpus(char *s) | 1245 | __init int setup_additional_cpus(char *s) |
1245 | { | 1246 | { |
1246 | return get_option(&s, &additional_cpus); | 1247 | return get_option(&s, &additional_cpus); |
1247 | } | 1248 | } |
diff --git a/arch/x86_64/kernel/time.c b/arch/x86_64/kernel/time.c index f8c47c688443..3080f84bf7b7 100644 --- a/arch/x86_64/kernel/time.c +++ b/arch/x86_64/kernel/time.c | |||
@@ -48,10 +48,12 @@ static void cpufreq_delayed_get(void); | |||
48 | extern void i8254_timer_resume(void); | 48 | extern void i8254_timer_resume(void); |
49 | extern int using_apic_timer; | 49 | extern int using_apic_timer; |
50 | 50 | ||
51 | static char *time_init_gtod(void); | ||
52 | |||
51 | DEFINE_SPINLOCK(rtc_lock); | 53 | DEFINE_SPINLOCK(rtc_lock); |
52 | DEFINE_SPINLOCK(i8253_lock); | 54 | DEFINE_SPINLOCK(i8253_lock); |
53 | 55 | ||
54 | static int nohpet __initdata = 0; | 56 | int nohpet __initdata = 0; |
55 | static int notsc __initdata = 0; | 57 | static int notsc __initdata = 0; |
56 | 58 | ||
57 | #undef HPET_HACK_ENABLE_DANGEROUS | 59 | #undef HPET_HACK_ENABLE_DANGEROUS |
@@ -59,7 +61,7 @@ static int notsc __initdata = 0; | |||
59 | unsigned int cpu_khz; /* TSC clocks / usec, not used here */ | 61 | unsigned int cpu_khz; /* TSC clocks / usec, not used here */ |
60 | static unsigned long hpet_period; /* fsecs / HPET clock */ | 62 | static unsigned long hpet_period; /* fsecs / HPET clock */ |
61 | unsigned long hpet_tick; /* HPET clocks / interrupt */ | 63 | unsigned long hpet_tick; /* HPET clocks / interrupt */ |
62 | static int hpet_use_timer; /* Use counter of hpet for time keeping, otherwise PIT */ | 64 | int hpet_use_timer; /* Use counter of hpet for time keeping, otherwise PIT */ |
63 | unsigned long vxtime_hz = PIT_TICK_RATE; | 65 | unsigned long vxtime_hz = PIT_TICK_RATE; |
64 | int report_lost_ticks; /* command line option */ | 66 | int report_lost_ticks; /* command line option */ |
65 | unsigned long long monotonic_base; | 67 | unsigned long long monotonic_base; |
@@ -326,7 +328,10 @@ static noinline void handle_lost_ticks(int lost, struct pt_regs *regs) | |||
326 | print_symbol("rip %s\n", regs->rip); | 328 | print_symbol("rip %s\n", regs->rip); |
327 | if (vxtime.mode == VXTIME_TSC && vxtime.hpet_address) { | 329 | if (vxtime.mode == VXTIME_TSC && vxtime.hpet_address) { |
328 | printk(KERN_WARNING "Falling back to HPET\n"); | 330 | printk(KERN_WARNING "Falling back to HPET\n"); |
329 | vxtime.last = hpet_readl(HPET_T0_CMP) - hpet_tick; | 331 | if (hpet_use_timer) |
332 | vxtime.last = hpet_readl(HPET_T0_CMP) - hpet_tick; | ||
333 | else | ||
334 | vxtime.last = hpet_readl(HPET_COUNTER); | ||
330 | vxtime.mode = VXTIME_HPET; | 335 | vxtime.mode = VXTIME_HPET; |
331 | do_gettimeoffset = do_gettimeoffset_hpet; | 336 | do_gettimeoffset = do_gettimeoffset_hpet; |
332 | } | 337 | } |
@@ -345,7 +350,7 @@ static noinline void handle_lost_ticks(int lost, struct pt_regs *regs) | |||
345 | #endif | 350 | #endif |
346 | } | 351 | } |
347 | 352 | ||
348 | static irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 353 | void main_timer_handler(struct pt_regs *regs) |
349 | { | 354 | { |
350 | static unsigned long rtc_update = 0; | 355 | static unsigned long rtc_update = 0; |
351 | unsigned long tsc; | 356 | unsigned long tsc; |
@@ -458,12 +463,17 @@ static irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | |||
458 | } | 463 | } |
459 | 464 | ||
460 | write_sequnlock(&xtime_lock); | 465 | write_sequnlock(&xtime_lock); |
466 | } | ||
461 | 467 | ||
468 | static irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | ||
469 | { | ||
470 | if (apic_runs_main_timer > 1) | ||
471 | return IRQ_HANDLED; | ||
472 | main_timer_handler(regs); | ||
462 | #ifdef CONFIG_X86_LOCAL_APIC | 473 | #ifdef CONFIG_X86_LOCAL_APIC |
463 | if (using_apic_timer) | 474 | if (using_apic_timer) |
464 | smp_send_timer_broadcast_ipi(); | 475 | smp_send_timer_broadcast_ipi(); |
465 | #endif | 476 | #endif |
466 | |||
467 | return IRQ_HANDLED; | 477 | return IRQ_HANDLED; |
468 | } | 478 | } |
469 | 479 | ||
@@ -743,7 +753,7 @@ static __init int late_hpet_init(void) | |||
743 | * Timer0 and Timer1 is used by platform. | 753 | * Timer0 and Timer1 is used by platform. |
744 | */ | 754 | */ |
745 | hd.hd_phys_address = vxtime.hpet_address; | 755 | hd.hd_phys_address = vxtime.hpet_address; |
746 | hd.hd_address = (void *)fix_to_virt(FIX_HPET_BASE); | 756 | hd.hd_address = (void __iomem *)fix_to_virt(FIX_HPET_BASE); |
747 | hd.hd_nirqs = ntimer; | 757 | hd.hd_nirqs = ntimer; |
748 | hd.hd_flags = HPET_DATA_PLATFORM; | 758 | hd.hd_flags = HPET_DATA_PLATFORM; |
749 | hpet_reserve_timer(&hd, 0); | 759 | hpet_reserve_timer(&hd, 0); |
@@ -843,17 +853,43 @@ static int hpet_reenable(void) | |||
843 | return hpet_timer_stop_set_go(hpet_tick); | 853 | return hpet_timer_stop_set_go(hpet_tick); |
844 | } | 854 | } |
845 | 855 | ||
846 | void __init pit_init(void) | 856 | #define PIT_MODE 0x43 |
857 | #define PIT_CH0 0x40 | ||
858 | |||
859 | static void __init __pit_init(int val, u8 mode) | ||
847 | { | 860 | { |
848 | unsigned long flags; | 861 | unsigned long flags; |
849 | 862 | ||
850 | spin_lock_irqsave(&i8253_lock, flags); | 863 | spin_lock_irqsave(&i8253_lock, flags); |
851 | outb_p(0x34, 0x43); /* binary, mode 2, LSB/MSB, ch 0 */ | 864 | outb_p(mode, PIT_MODE); |
852 | outb_p(LATCH & 0xff, 0x40); /* LSB */ | 865 | outb_p(val & 0xff, PIT_CH0); /* LSB */ |
853 | outb_p(LATCH >> 8, 0x40); /* MSB */ | 866 | outb_p(val >> 8, PIT_CH0); /* MSB */ |
854 | spin_unlock_irqrestore(&i8253_lock, flags); | 867 | spin_unlock_irqrestore(&i8253_lock, flags); |
855 | } | 868 | } |
856 | 869 | ||
870 | void __init pit_init(void) | ||
871 | { | ||
872 | __pit_init(LATCH, 0x34); /* binary, mode 2, LSB/MSB, ch 0 */ | ||
873 | } | ||
874 | |||
875 | void __init pit_stop_interrupt(void) | ||
876 | { | ||
877 | __pit_init(0, 0x30); /* mode 0 */ | ||
878 | } | ||
879 | |||
880 | void __init stop_timer_interrupt(void) | ||
881 | { | ||
882 | char *name; | ||
883 | if (vxtime.hpet_address) { | ||
884 | name = "HPET"; | ||
885 | hpet_timer_stop_set_go(0); | ||
886 | } else { | ||
887 | name = "PIT"; | ||
888 | pit_stop_interrupt(); | ||
889 | } | ||
890 | printk(KERN_INFO "timer: %s interrupt stopped.\n", name); | ||
891 | } | ||
892 | |||
857 | int __init time_setup(char *str) | 893 | int __init time_setup(char *str) |
858 | { | 894 | { |
859 | report_lost_ticks = 1; | 895 | report_lost_ticks = 1; |
@@ -867,6 +903,7 @@ static struct irqaction irq0 = { | |||
867 | void __init time_init(void) | 903 | void __init time_init(void) |
868 | { | 904 | { |
869 | char *timename; | 905 | char *timename; |
906 | char *gtod; | ||
870 | 907 | ||
871 | #ifdef HPET_HACK_ENABLE_DANGEROUS | 908 | #ifdef HPET_HACK_ENABLE_DANGEROUS |
872 | if (!vxtime.hpet_address) { | 909 | if (!vxtime.hpet_address) { |
@@ -911,28 +948,26 @@ void __init time_init(void) | |||
911 | timename = "PIT"; | 948 | timename = "PIT"; |
912 | } | 949 | } |
913 | 950 | ||
914 | printk(KERN_INFO "time.c: Using %ld.%06ld MHz %s timer.\n", | 951 | vxtime.mode = VXTIME_TSC; |
915 | vxtime_hz / 1000000, vxtime_hz % 1000000, timename); | 952 | gtod = time_init_gtod(); |
953 | |||
954 | printk(KERN_INFO "time.c: Using %ld.%06ld MHz WALL %s GTOD %s timer.\n", | ||
955 | vxtime_hz / 1000000, vxtime_hz % 1000000, timename, gtod); | ||
916 | printk(KERN_INFO "time.c: Detected %d.%03d MHz processor.\n", | 956 | printk(KERN_INFO "time.c: Detected %d.%03d MHz processor.\n", |
917 | cpu_khz / 1000, cpu_khz % 1000); | 957 | cpu_khz / 1000, cpu_khz % 1000); |
918 | vxtime.mode = VXTIME_TSC; | ||
919 | vxtime.quot = (1000000L << 32) / vxtime_hz; | 958 | vxtime.quot = (1000000L << 32) / vxtime_hz; |
920 | vxtime.tsc_quot = (1000L << 32) / cpu_khz; | 959 | vxtime.tsc_quot = (1000L << 32) / cpu_khz; |
921 | vxtime.last_tsc = get_cycles_sync(); | 960 | vxtime.last_tsc = get_cycles_sync(); |
922 | setup_irq(0, &irq0); | 961 | setup_irq(0, &irq0); |
923 | 962 | ||
924 | set_cyc2ns_scale(cpu_khz); | 963 | set_cyc2ns_scale(cpu_khz); |
925 | |||
926 | #ifndef CONFIG_SMP | ||
927 | time_init_gtod(); | ||
928 | #endif | ||
929 | } | 964 | } |
930 | 965 | ||
931 | /* | 966 | /* |
932 | * Make an educated guess if the TSC is trustworthy and synchronized | 967 | * Make an educated guess if the TSC is trustworthy and synchronized |
933 | * over all CPUs. | 968 | * over all CPUs. |
934 | */ | 969 | */ |
935 | __init int unsynchronized_tsc(void) | 970 | __cpuinit int unsynchronized_tsc(void) |
936 | { | 971 | { |
937 | #ifdef CONFIG_SMP | 972 | #ifdef CONFIG_SMP |
938 | if (oem_force_hpet_timer()) | 973 | if (oem_force_hpet_timer()) |
@@ -947,9 +982,9 @@ __init int unsynchronized_tsc(void) | |||
947 | } | 982 | } |
948 | 983 | ||
949 | /* | 984 | /* |
950 | * Decide after all CPUs are booted what mode gettimeofday should use. | 985 | * Decide what mode gettimeofday should use. |
951 | */ | 986 | */ |
952 | void __init time_init_gtod(void) | 987 | __init static char *time_init_gtod(void) |
953 | { | 988 | { |
954 | char *timetype; | 989 | char *timetype; |
955 | 990 | ||
@@ -957,7 +992,10 @@ void __init time_init_gtod(void) | |||
957 | notsc = 1; | 992 | notsc = 1; |
958 | if (vxtime.hpet_address && notsc) { | 993 | if (vxtime.hpet_address && notsc) { |
959 | timetype = hpet_use_timer ? "HPET" : "PIT/HPET"; | 994 | timetype = hpet_use_timer ? "HPET" : "PIT/HPET"; |
960 | vxtime.last = hpet_readl(HPET_T0_CMP) - hpet_tick; | 995 | if (hpet_use_timer) |
996 | vxtime.last = hpet_readl(HPET_T0_CMP) - hpet_tick; | ||
997 | else | ||
998 | vxtime.last = hpet_readl(HPET_COUNTER); | ||
961 | vxtime.mode = VXTIME_HPET; | 999 | vxtime.mode = VXTIME_HPET; |
962 | do_gettimeoffset = do_gettimeoffset_hpet; | 1000 | do_gettimeoffset = do_gettimeoffset_hpet; |
963 | #ifdef CONFIG_X86_PM_TIMER | 1001 | #ifdef CONFIG_X86_PM_TIMER |
@@ -974,8 +1012,7 @@ void __init time_init_gtod(void) | |||
974 | timetype = hpet_use_timer ? "HPET/TSC" : "PIT/TSC"; | 1012 | timetype = hpet_use_timer ? "HPET/TSC" : "PIT/TSC"; |
975 | vxtime.mode = VXTIME_TSC; | 1013 | vxtime.mode = VXTIME_TSC; |
976 | } | 1014 | } |
977 | 1015 | return timetype; | |
978 | printk(KERN_INFO "time.c: Using %s based timekeeping.\n", timetype); | ||
979 | } | 1016 | } |
980 | 1017 | ||
981 | __setup("report_lost_ticks", time_setup); | 1018 | __setup("report_lost_ticks", time_setup); |
@@ -1016,9 +1053,21 @@ static int timer_resume(struct sys_device *dev) | |||
1016 | write_seqlock_irqsave(&xtime_lock,flags); | 1053 | write_seqlock_irqsave(&xtime_lock,flags); |
1017 | xtime.tv_sec = sec; | 1054 | xtime.tv_sec = sec; |
1018 | xtime.tv_nsec = 0; | 1055 | xtime.tv_nsec = 0; |
1056 | if (vxtime.mode == VXTIME_HPET) { | ||
1057 | if (hpet_use_timer) | ||
1058 | vxtime.last = hpet_readl(HPET_T0_CMP) - hpet_tick; | ||
1059 | else | ||
1060 | vxtime.last = hpet_readl(HPET_COUNTER); | ||
1061 | #ifdef CONFIG_X86_PM_TIMER | ||
1062 | } else if (vxtime.mode == VXTIME_PMTMR) { | ||
1063 | pmtimer_resume(); | ||
1064 | #endif | ||
1065 | } else | ||
1066 | vxtime.last_tsc = get_cycles_sync(); | ||
1019 | write_sequnlock_irqrestore(&xtime_lock,flags); | 1067 | write_sequnlock_irqrestore(&xtime_lock,flags); |
1020 | jiffies += sleep_length; | 1068 | jiffies += sleep_length; |
1021 | wall_jiffies += sleep_length; | 1069 | wall_jiffies += sleep_length; |
1070 | monotonic_base += sleep_length * (NSEC_PER_SEC/HZ); | ||
1022 | touch_softlockup_watchdog(); | 1071 | touch_softlockup_watchdog(); |
1023 | return 0; | 1072 | return 0; |
1024 | } | 1073 | } |
@@ -1278,8 +1327,7 @@ static int __init nohpet_setup(char *s) | |||
1278 | 1327 | ||
1279 | __setup("nohpet", nohpet_setup); | 1328 | __setup("nohpet", nohpet_setup); |
1280 | 1329 | ||
1281 | 1330 | int __init notsc_setup(char *s) | |
1282 | static int __init notsc_setup(char *s) | ||
1283 | { | 1331 | { |
1284 | notsc = 1; | 1332 | notsc = 1; |
1285 | return 0; | 1333 | return 0; |
diff --git a/arch/x86_64/kernel/traps.c b/arch/x86_64/kernel/traps.c index 8bb0aeda78b9..28d50dc540e8 100644 --- a/arch/x86_64/kernel/traps.c +++ b/arch/x86_64/kernel/traps.c | |||
@@ -90,6 +90,20 @@ static inline void conditional_sti(struct pt_regs *regs) | |||
90 | local_irq_enable(); | 90 | local_irq_enable(); |
91 | } | 91 | } |
92 | 92 | ||
93 | static inline void preempt_conditional_sti(struct pt_regs *regs) | ||
94 | { | ||
95 | preempt_disable(); | ||
96 | if (regs->eflags & X86_EFLAGS_IF) | ||
97 | local_irq_enable(); | ||
98 | } | ||
99 | |||
100 | static inline void preempt_conditional_cli(struct pt_regs *regs) | ||
101 | { | ||
102 | if (regs->eflags & X86_EFLAGS_IF) | ||
103 | local_irq_disable(); | ||
104 | preempt_enable_no_resched(); | ||
105 | } | ||
106 | |||
93 | static int kstack_depth_to_print = 10; | 107 | static int kstack_depth_to_print = 10; |
94 | 108 | ||
95 | #ifdef CONFIG_KALLSYMS | 109 | #ifdef CONFIG_KALLSYMS |
@@ -372,7 +386,7 @@ void out_of_line_bug(void) | |||
372 | static DEFINE_SPINLOCK(die_lock); | 386 | static DEFINE_SPINLOCK(die_lock); |
373 | static int die_owner = -1; | 387 | static int die_owner = -1; |
374 | 388 | ||
375 | unsigned long oops_begin(void) | 389 | unsigned __kprobes long oops_begin(void) |
376 | { | 390 | { |
377 | int cpu = safe_smp_processor_id(); | 391 | int cpu = safe_smp_processor_id(); |
378 | unsigned long flags; | 392 | unsigned long flags; |
@@ -391,7 +405,7 @@ unsigned long oops_begin(void) | |||
391 | return flags; | 405 | return flags; |
392 | } | 406 | } |
393 | 407 | ||
394 | void oops_end(unsigned long flags) | 408 | void __kprobes oops_end(unsigned long flags) |
395 | { | 409 | { |
396 | die_owner = -1; | 410 | die_owner = -1; |
397 | bust_spinlocks(0); | 411 | bust_spinlocks(0); |
@@ -400,7 +414,7 @@ void oops_end(unsigned long flags) | |||
400 | panic("Oops"); | 414 | panic("Oops"); |
401 | } | 415 | } |
402 | 416 | ||
403 | void __die(const char * str, struct pt_regs * regs, long err) | 417 | void __kprobes __die(const char * str, struct pt_regs * regs, long err) |
404 | { | 418 | { |
405 | static int die_counter; | 419 | static int die_counter; |
406 | printk(KERN_EMERG "%s: %04lx [%u] ", str, err & 0xffff,++die_counter); | 420 | printk(KERN_EMERG "%s: %04lx [%u] ", str, err & 0xffff,++die_counter); |
@@ -432,7 +446,7 @@ void die(const char * str, struct pt_regs * regs, long err) | |||
432 | do_exit(SIGSEGV); | 446 | do_exit(SIGSEGV); |
433 | } | 447 | } |
434 | 448 | ||
435 | void die_nmi(char *str, struct pt_regs *regs) | 449 | void __kprobes die_nmi(char *str, struct pt_regs *regs) |
436 | { | 450 | { |
437 | unsigned long flags = oops_begin(); | 451 | unsigned long flags = oops_begin(); |
438 | 452 | ||
@@ -575,7 +589,8 @@ asmlinkage void __kprobes do_general_protection(struct pt_regs * regs, | |||
575 | } | 589 | } |
576 | } | 590 | } |
577 | 591 | ||
578 | static void mem_parity_error(unsigned char reason, struct pt_regs * regs) | 592 | static __kprobes void |
593 | mem_parity_error(unsigned char reason, struct pt_regs * regs) | ||
579 | { | 594 | { |
580 | printk("Uhhuh. NMI received. Dazed and confused, but trying to continue\n"); | 595 | printk("Uhhuh. NMI received. Dazed and confused, but trying to continue\n"); |
581 | printk("You probably have a hardware problem with your RAM chips\n"); | 596 | printk("You probably have a hardware problem with your RAM chips\n"); |
@@ -585,7 +600,8 @@ static void mem_parity_error(unsigned char reason, struct pt_regs * regs) | |||
585 | outb(reason, 0x61); | 600 | outb(reason, 0x61); |
586 | } | 601 | } |
587 | 602 | ||
588 | static void io_check_error(unsigned char reason, struct pt_regs * regs) | 603 | static __kprobes void |
604 | io_check_error(unsigned char reason, struct pt_regs * regs) | ||
589 | { | 605 | { |
590 | printk("NMI: IOCK error (debug interrupt?)\n"); | 606 | printk("NMI: IOCK error (debug interrupt?)\n"); |
591 | show_registers(regs); | 607 | show_registers(regs); |
@@ -598,7 +614,8 @@ static void io_check_error(unsigned char reason, struct pt_regs * regs) | |||
598 | outb(reason, 0x61); | 614 | outb(reason, 0x61); |
599 | } | 615 | } |
600 | 616 | ||
601 | static void unknown_nmi_error(unsigned char reason, struct pt_regs * regs) | 617 | static __kprobes void |
618 | unknown_nmi_error(unsigned char reason, struct pt_regs * regs) | ||
602 | { printk("Uhhuh. NMI received for unknown reason %02x.\n", reason); | 619 | { printk("Uhhuh. NMI received for unknown reason %02x.\n", reason); |
603 | printk("Dazed and confused, but trying to continue\n"); | 620 | printk("Dazed and confused, but trying to continue\n"); |
604 | printk("Do you have a strange power saving mode enabled?\n"); | 621 | printk("Do you have a strange power saving mode enabled?\n"); |
@@ -606,7 +623,7 @@ static void unknown_nmi_error(unsigned char reason, struct pt_regs * regs) | |||
606 | 623 | ||
607 | /* Runs on IST stack. This code must keep interrupts off all the time. | 624 | /* Runs on IST stack. This code must keep interrupts off all the time. |
608 | Nested NMIs are prevented by the CPU. */ | 625 | Nested NMIs are prevented by the CPU. */ |
609 | asmlinkage void default_do_nmi(struct pt_regs *regs) | 626 | asmlinkage __kprobes void default_do_nmi(struct pt_regs *regs) |
610 | { | 627 | { |
611 | unsigned char reason = 0; | 628 | unsigned char reason = 0; |
612 | int cpu; | 629 | int cpu; |
@@ -658,7 +675,7 @@ asmlinkage void __kprobes do_int3(struct pt_regs * regs, long error_code) | |||
658 | /* Help handler running on IST stack to switch back to user stack | 675 | /* Help handler running on IST stack to switch back to user stack |
659 | for scheduling or signal handling. The actual stack switch is done in | 676 | for scheduling or signal handling. The actual stack switch is done in |
660 | entry.S */ | 677 | entry.S */ |
661 | asmlinkage struct pt_regs *sync_regs(struct pt_regs *eregs) | 678 | asmlinkage __kprobes struct pt_regs *sync_regs(struct pt_regs *eregs) |
662 | { | 679 | { |
663 | struct pt_regs *regs = eregs; | 680 | struct pt_regs *regs = eregs; |
664 | /* Did already sync */ | 681 | /* Did already sync */ |
@@ -690,7 +707,7 @@ asmlinkage void __kprobes do_debug(struct pt_regs * regs, | |||
690 | SIGTRAP) == NOTIFY_STOP) | 707 | SIGTRAP) == NOTIFY_STOP) |
691 | return; | 708 | return; |
692 | 709 | ||
693 | conditional_sti(regs); | 710 | preempt_conditional_sti(regs); |
694 | 711 | ||
695 | /* Mask out spurious debug traps due to lazy DR7 setting */ | 712 | /* Mask out spurious debug traps due to lazy DR7 setting */ |
696 | if (condition & (DR_TRAP0|DR_TRAP1|DR_TRAP2|DR_TRAP3)) { | 713 | if (condition & (DR_TRAP0|DR_TRAP1|DR_TRAP2|DR_TRAP3)) { |
@@ -735,11 +752,13 @@ asmlinkage void __kprobes do_debug(struct pt_regs * regs, | |||
735 | 752 | ||
736 | clear_dr7: | 753 | clear_dr7: |
737 | set_debugreg(0UL, 7); | 754 | set_debugreg(0UL, 7); |
755 | preempt_conditional_cli(regs); | ||
738 | return; | 756 | return; |
739 | 757 | ||
740 | clear_TF_reenable: | 758 | clear_TF_reenable: |
741 | set_tsk_thread_flag(tsk, TIF_SINGLESTEP); | 759 | set_tsk_thread_flag(tsk, TIF_SINGLESTEP); |
742 | regs->eflags &= ~TF_MASK; | 760 | regs->eflags &= ~TF_MASK; |
761 | preempt_conditional_cli(regs); | ||
743 | } | 762 | } |
744 | 763 | ||
745 | static int kernel_math_error(struct pt_regs *regs, const char *str, int trapnr) | 764 | static int kernel_math_error(struct pt_regs *regs, const char *str, int trapnr) |
diff --git a/arch/x86_64/kernel/vmlinux.lds.S b/arch/x86_64/kernel/vmlinux.lds.S index b0eed1faf740..74db0062d4a2 100644 --- a/arch/x86_64/kernel/vmlinux.lds.S +++ b/arch/x86_64/kernel/vmlinux.lds.S | |||
@@ -172,13 +172,15 @@ SECTIONS | |||
172 | . = ALIGN(4096); | 172 | . = ALIGN(4096); |
173 | __initramfs_start = .; | 173 | __initramfs_start = .; |
174 | .init.ramfs : AT(ADDR(.init.ramfs) - LOAD_OFFSET) { *(.init.ramfs) } | 174 | .init.ramfs : AT(ADDR(.init.ramfs) - LOAD_OFFSET) { *(.init.ramfs) } |
175 | __initramfs_end = .; | 175 | __initramfs_end = .; |
176 | . = ALIGN(32); | 176 | /* temporary here to work around NR_CPUS. If you see this comment in 2.6.17+ |
177 | complain */ | ||
178 | . = ALIGN(4096); | ||
179 | __init_end = .; | ||
180 | . = ALIGN(CONFIG_X86_L1_CACHE_BYTES); | ||
177 | __per_cpu_start = .; | 181 | __per_cpu_start = .; |
178 | .data.percpu : AT(ADDR(.data.percpu) - LOAD_OFFSET) { *(.data.percpu) } | 182 | .data.percpu : AT(ADDR(.data.percpu) - LOAD_OFFSET) { *(.data.percpu) } |
179 | __per_cpu_end = .; | 183 | __per_cpu_end = .; |
180 | . = ALIGN(4096); | ||
181 | __init_end = .; | ||
182 | 184 | ||
183 | . = ALIGN(4096); | 185 | . = ALIGN(4096); |
184 | __nosave_begin = .; | 186 | __nosave_begin = .; |
diff --git a/arch/x86_64/kernel/x8664_ksyms.c b/arch/x86_64/kernel/x8664_ksyms.c index b614d54d2ae4..3496abc8d372 100644 --- a/arch/x86_64/kernel/x8664_ksyms.c +++ b/arch/x86_64/kernel/x8664_ksyms.c | |||
@@ -39,11 +39,6 @@ extern void __write_lock_failed(rwlock_t *rw); | |||
39 | extern void __read_lock_failed(rwlock_t *rw); | 39 | extern void __read_lock_failed(rwlock_t *rw); |
40 | #endif | 40 | #endif |
41 | 41 | ||
42 | #if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_HD) || defined(CONFIG_BLK_DEV_IDE_MODULE) || defined(CONFIG_BLK_DEV_HD_MODULE) | ||
43 | extern struct drive_info_struct drive_info; | ||
44 | EXPORT_SYMBOL(drive_info); | ||
45 | #endif | ||
46 | |||
47 | /* platform dependent support */ | 42 | /* platform dependent support */ |
48 | EXPORT_SYMBOL(boot_cpu_data); | 43 | EXPORT_SYMBOL(boot_cpu_data); |
49 | //EXPORT_SYMBOL(dump_fpu); | 44 | //EXPORT_SYMBOL(dump_fpu); |
diff --git a/arch/x86_64/lib/Makefile b/arch/x86_64/lib/Makefile index bba5db6cebd6..ccef6ae747a3 100644 --- a/arch/x86_64/lib/Makefile +++ b/arch/x86_64/lib/Makefile | |||
@@ -4,7 +4,7 @@ | |||
4 | 4 | ||
5 | CFLAGS_csum-partial.o := -funroll-loops | 5 | CFLAGS_csum-partial.o := -funroll-loops |
6 | 6 | ||
7 | obj-y := io.o | 7 | obj-y := io.o iomap_copy.o |
8 | 8 | ||
9 | lib-y := csum-partial.o csum-copy.o csum-wrappers.o delay.o \ | 9 | lib-y := csum-partial.o csum-copy.o csum-wrappers.o delay.o \ |
10 | usercopy.o getuser.o putuser.o \ | 10 | usercopy.o getuser.o putuser.o \ |
diff --git a/arch/x86_64/lib/clear_page.S b/arch/x86_64/lib/clear_page.S index 43d9fa136180..1f81b79b796c 100644 --- a/arch/x86_64/lib/clear_page.S +++ b/arch/x86_64/lib/clear_page.S | |||
@@ -5,8 +5,46 @@ | |||
5 | .globl clear_page | 5 | .globl clear_page |
6 | .p2align 4 | 6 | .p2align 4 |
7 | clear_page: | 7 | clear_page: |
8 | xorl %eax,%eax | ||
9 | movl $4096/64,%ecx | ||
10 | .p2align 4 | ||
11 | .Lloop: | ||
12 | decl %ecx | ||
13 | #define PUT(x) movq %rax,x*8(%rdi) | ||
14 | movq %rax,(%rdi) | ||
15 | PUT(1) | ||
16 | PUT(2) | ||
17 | PUT(3) | ||
18 | PUT(4) | ||
19 | PUT(5) | ||
20 | PUT(6) | ||
21 | PUT(7) | ||
22 | leaq 64(%rdi),%rdi | ||
23 | jnz .Lloop | ||
24 | nop | ||
25 | ret | ||
26 | clear_page_end: | ||
27 | |||
28 | /* Some CPUs run faster using the string instructions. | ||
29 | It is also a lot simpler. Use this when possible */ | ||
30 | |||
31 | #include <asm/cpufeature.h> | ||
32 | |||
33 | .section .altinstructions,"a" | ||
34 | .align 8 | ||
35 | .quad clear_page | ||
36 | .quad clear_page_c | ||
37 | .byte X86_FEATURE_REP_GOOD | ||
38 | .byte clear_page_end-clear_page | ||
39 | .byte clear_page_c_end-clear_page_c | ||
40 | .previous | ||
41 | |||
42 | .section .altinstr_replacement,"ax" | ||
43 | clear_page_c: | ||
8 | movl $4096/8,%ecx | 44 | movl $4096/8,%ecx |
9 | xorl %eax,%eax | 45 | xorl %eax,%eax |
10 | rep | 46 | rep |
11 | stosq | 47 | stosq |
12 | ret | 48 | ret |
49 | clear_page_c_end: | ||
50 | .previous | ||
diff --git a/arch/x86_64/lib/copy_page.S b/arch/x86_64/lib/copy_page.S index 621a19769406..8fa19d96a7ee 100644 --- a/arch/x86_64/lib/copy_page.S +++ b/arch/x86_64/lib/copy_page.S | |||
@@ -8,7 +8,94 @@ | |||
8 | .globl copy_page | 8 | .globl copy_page |
9 | .p2align 4 | 9 | .p2align 4 |
10 | copy_page: | 10 | copy_page: |
11 | subq $3*8,%rsp | ||
12 | movq %rbx,(%rsp) | ||
13 | movq %r12,1*8(%rsp) | ||
14 | movq %r13,2*8(%rsp) | ||
15 | |||
16 | movl $(4096/64)-5,%ecx | ||
17 | .p2align 4 | ||
18 | .Loop64: | ||
19 | dec %rcx | ||
20 | |||
21 | movq (%rsi), %rax | ||
22 | movq 8 (%rsi), %rbx | ||
23 | movq 16 (%rsi), %rdx | ||
24 | movq 24 (%rsi), %r8 | ||
25 | movq 32 (%rsi), %r9 | ||
26 | movq 40 (%rsi), %r10 | ||
27 | movq 48 (%rsi), %r11 | ||
28 | movq 56 (%rsi), %r12 | ||
29 | |||
30 | prefetcht0 5*64(%rsi) | ||
31 | |||
32 | movq %rax, (%rdi) | ||
33 | movq %rbx, 8 (%rdi) | ||
34 | movq %rdx, 16 (%rdi) | ||
35 | movq %r8, 24 (%rdi) | ||
36 | movq %r9, 32 (%rdi) | ||
37 | movq %r10, 40 (%rdi) | ||
38 | movq %r11, 48 (%rdi) | ||
39 | movq %r12, 56 (%rdi) | ||
40 | |||
41 | leaq 64 (%rsi), %rsi | ||
42 | leaq 64 (%rdi), %rdi | ||
43 | |||
44 | jnz .Loop64 | ||
45 | |||
46 | movl $5,%ecx | ||
47 | .p2align 4 | ||
48 | .Loop2: | ||
49 | decl %ecx | ||
50 | |||
51 | movq (%rsi), %rax | ||
52 | movq 8 (%rsi), %rbx | ||
53 | movq 16 (%rsi), %rdx | ||
54 | movq 24 (%rsi), %r8 | ||
55 | movq 32 (%rsi), %r9 | ||
56 | movq 40 (%rsi), %r10 | ||
57 | movq 48 (%rsi), %r11 | ||
58 | movq 56 (%rsi), %r12 | ||
59 | |||
60 | movq %rax, (%rdi) | ||
61 | movq %rbx, 8 (%rdi) | ||
62 | movq %rdx, 16 (%rdi) | ||
63 | movq %r8, 24 (%rdi) | ||
64 | movq %r9, 32 (%rdi) | ||
65 | movq %r10, 40 (%rdi) | ||
66 | movq %r11, 48 (%rdi) | ||
67 | movq %r12, 56 (%rdi) | ||
68 | |||
69 | leaq 64(%rdi),%rdi | ||
70 | leaq 64(%rsi),%rsi | ||
71 | |||
72 | jnz .Loop2 | ||
73 | |||
74 | movq (%rsp),%rbx | ||
75 | movq 1*8(%rsp),%r12 | ||
76 | movq 2*8(%rsp),%r13 | ||
77 | addq $3*8,%rsp | ||
78 | ret | ||
79 | |||
80 | /* Some CPUs run faster using the string copy instructions. | ||
81 | It is also a lot simpler. Use this when possible */ | ||
82 | |||
83 | #include <asm/cpufeature.h> | ||
84 | |||
85 | .section .altinstructions,"a" | ||
86 | .align 8 | ||
87 | .quad copy_page | ||
88 | .quad copy_page_c | ||
89 | .byte X86_FEATURE_REP_GOOD | ||
90 | .byte copy_page_c_end-copy_page_c | ||
91 | .byte copy_page_c_end-copy_page_c | ||
92 | .previous | ||
93 | |||
94 | .section .altinstr_replacement,"ax" | ||
95 | copy_page_c: | ||
11 | movl $4096/8,%ecx | 96 | movl $4096/8,%ecx |
12 | rep | 97 | rep |
13 | movsq | 98 | movsq |
14 | ret | 99 | ret |
100 | copy_page_c_end: | ||
101 | .previous | ||
diff --git a/arch/x86_64/lib/copy_user.S b/arch/x86_64/lib/copy_user.S index 79422b6559c3..f64569b83b54 100644 --- a/arch/x86_64/lib/copy_user.S +++ b/arch/x86_64/lib/copy_user.S | |||
@@ -4,9 +4,12 @@ | |||
4 | * Functions to copy from and to user space. | 4 | * Functions to copy from and to user space. |
5 | */ | 5 | */ |
6 | 6 | ||
7 | #define FIX_ALIGNMENT 1 | ||
8 | |||
7 | #include <asm/current.h> | 9 | #include <asm/current.h> |
8 | #include <asm/asm-offsets.h> | 10 | #include <asm/asm-offsets.h> |
9 | #include <asm/thread_info.h> | 11 | #include <asm/thread_info.h> |
12 | #include <asm/cpufeature.h> | ||
10 | 13 | ||
11 | /* Standard copy_to_user with segment limit checking */ | 14 | /* Standard copy_to_user with segment limit checking */ |
12 | .globl copy_to_user | 15 | .globl copy_to_user |
@@ -18,7 +21,23 @@ copy_to_user: | |||
18 | jc bad_to_user | 21 | jc bad_to_user |
19 | cmpq threadinfo_addr_limit(%rax),%rcx | 22 | cmpq threadinfo_addr_limit(%rax),%rcx |
20 | jae bad_to_user | 23 | jae bad_to_user |
21 | jmp copy_user_generic | 24 | 2: |
25 | .byte 0xe9 /* 32bit jump */ | ||
26 | .long .Lcug-1f | ||
27 | 1: | ||
28 | |||
29 | .section .altinstr_replacement,"ax" | ||
30 | 3: .byte 0xe9 /* replacement jmp with 8 bit immediate */ | ||
31 | .long copy_user_generic_c-1b /* offset */ | ||
32 | .previous | ||
33 | .section .altinstructions,"a" | ||
34 | .align 8 | ||
35 | .quad 2b | ||
36 | .quad 3b | ||
37 | .byte X86_FEATURE_REP_GOOD | ||
38 | .byte 5 | ||
39 | .byte 5 | ||
40 | .previous | ||
22 | 41 | ||
23 | /* Standard copy_from_user with segment limit checking */ | 42 | /* Standard copy_from_user with segment limit checking */ |
24 | .globl copy_from_user | 43 | .globl copy_from_user |
@@ -53,44 +72,230 @@ bad_to_user: | |||
53 | * rsi source | 72 | * rsi source |
54 | * rdx count | 73 | * rdx count |
55 | * | 74 | * |
56 | * Only 4GB of copy is supported. This shouldn't be a problem | ||
57 | * because the kernel normally only writes from/to page sized chunks | ||
58 | * even if user space passed a longer buffer. | ||
59 | * And more would be dangerous because both Intel and AMD have | ||
60 | * errata with rep movsq > 4GB. If someone feels the need to fix | ||
61 | * this please consider this. | ||
62 | * | ||
63 | * Output: | 75 | * Output: |
64 | * eax uncopied bytes or 0 if successful. | 76 | * eax uncopied bytes or 0 if successful. |
65 | */ | 77 | */ |
66 | |||
67 | .globl copy_user_generic | 78 | .globl copy_user_generic |
79 | .p2align 4 | ||
68 | copy_user_generic: | 80 | copy_user_generic: |
81 | .byte 0x66,0x66,0x90 /* 5 byte nop for replacement jump */ | ||
82 | .byte 0x66,0x90 | ||
83 | 1: | ||
84 | .section .altinstr_replacement,"ax" | ||
85 | 2: .byte 0xe9 /* near jump with 32bit immediate */ | ||
86 | .long copy_user_generic_c-1b /* offset */ | ||
87 | .previous | ||
88 | .section .altinstructions,"a" | ||
89 | .align 8 | ||
90 | .quad copy_user_generic | ||
91 | .quad 2b | ||
92 | .byte X86_FEATURE_REP_GOOD | ||
93 | .byte 5 | ||
94 | .byte 5 | ||
95 | .previous | ||
96 | .Lcug: | ||
97 | pushq %rbx | ||
98 | xorl %eax,%eax /*zero for the exception handler */ | ||
99 | |||
100 | #ifdef FIX_ALIGNMENT | ||
101 | /* check for bad alignment of destination */ | ||
102 | movl %edi,%ecx | ||
103 | andl $7,%ecx | ||
104 | jnz .Lbad_alignment | ||
105 | .Lafter_bad_alignment: | ||
106 | #endif | ||
107 | |||
108 | movq %rdx,%rcx | ||
109 | |||
110 | movl $64,%ebx | ||
111 | shrq $6,%rdx | ||
112 | decq %rdx | ||
113 | js .Lhandle_tail | ||
114 | |||
115 | .p2align 4 | ||
116 | .Lloop: | ||
117 | .Ls1: movq (%rsi),%r11 | ||
118 | .Ls2: movq 1*8(%rsi),%r8 | ||
119 | .Ls3: movq 2*8(%rsi),%r9 | ||
120 | .Ls4: movq 3*8(%rsi),%r10 | ||
121 | .Ld1: movq %r11,(%rdi) | ||
122 | .Ld2: movq %r8,1*8(%rdi) | ||
123 | .Ld3: movq %r9,2*8(%rdi) | ||
124 | .Ld4: movq %r10,3*8(%rdi) | ||
125 | |||
126 | .Ls5: movq 4*8(%rsi),%r11 | ||
127 | .Ls6: movq 5*8(%rsi),%r8 | ||
128 | .Ls7: movq 6*8(%rsi),%r9 | ||
129 | .Ls8: movq 7*8(%rsi),%r10 | ||
130 | .Ld5: movq %r11,4*8(%rdi) | ||
131 | .Ld6: movq %r8,5*8(%rdi) | ||
132 | .Ld7: movq %r9,6*8(%rdi) | ||
133 | .Ld8: movq %r10,7*8(%rdi) | ||
134 | |||
135 | decq %rdx | ||
136 | |||
137 | leaq 64(%rsi),%rsi | ||
138 | leaq 64(%rdi),%rdi | ||
139 | |||
140 | jns .Lloop | ||
141 | |||
142 | .p2align 4 | ||
143 | .Lhandle_tail: | ||
144 | movl %ecx,%edx | ||
145 | andl $63,%ecx | ||
146 | shrl $3,%ecx | ||
147 | jz .Lhandle_7 | ||
148 | movl $8,%ebx | ||
149 | .p2align 4 | ||
150 | .Lloop_8: | ||
151 | .Ls9: movq (%rsi),%r8 | ||
152 | .Ld9: movq %r8,(%rdi) | ||
153 | decl %ecx | ||
154 | leaq 8(%rdi),%rdi | ||
155 | leaq 8(%rsi),%rsi | ||
156 | jnz .Lloop_8 | ||
157 | |||
158 | .Lhandle_7: | ||
159 | movl %edx,%ecx | ||
160 | andl $7,%ecx | ||
161 | jz .Lende | ||
162 | .p2align 4 | ||
163 | .Lloop_1: | ||
164 | .Ls10: movb (%rsi),%bl | ||
165 | .Ld10: movb %bl,(%rdi) | ||
166 | incq %rdi | ||
167 | incq %rsi | ||
168 | decl %ecx | ||
169 | jnz .Lloop_1 | ||
170 | |||
171 | .Lende: | ||
172 | popq %rbx | ||
173 | ret | ||
174 | |||
175 | #ifdef FIX_ALIGNMENT | ||
176 | /* align destination */ | ||
177 | .p2align 4 | ||
178 | .Lbad_alignment: | ||
179 | movl $8,%r9d | ||
180 | subl %ecx,%r9d | ||
181 | movl %r9d,%ecx | ||
182 | cmpq %r9,%rdx | ||
183 | jz .Lhandle_7 | ||
184 | js .Lhandle_7 | ||
185 | .Lalign_1: | ||
186 | .Ls11: movb (%rsi),%bl | ||
187 | .Ld11: movb %bl,(%rdi) | ||
188 | incq %rsi | ||
189 | incq %rdi | ||
190 | decl %ecx | ||
191 | jnz .Lalign_1 | ||
192 | subq %r9,%rdx | ||
193 | jmp .Lafter_bad_alignment | ||
194 | #endif | ||
195 | |||
196 | /* table sorted by exception address */ | ||
197 | .section __ex_table,"a" | ||
198 | .align 8 | ||
199 | .quad .Ls1,.Ls1e | ||
200 | .quad .Ls2,.Ls2e | ||
201 | .quad .Ls3,.Ls3e | ||
202 | .quad .Ls4,.Ls4e | ||
203 | .quad .Ld1,.Ls1e | ||
204 | .quad .Ld2,.Ls2e | ||
205 | .quad .Ld3,.Ls3e | ||
206 | .quad .Ld4,.Ls4e | ||
207 | .quad .Ls5,.Ls5e | ||
208 | .quad .Ls6,.Ls6e | ||
209 | .quad .Ls7,.Ls7e | ||
210 | .quad .Ls8,.Ls8e | ||
211 | .quad .Ld5,.Ls5e | ||
212 | .quad .Ld6,.Ls6e | ||
213 | .quad .Ld7,.Ls7e | ||
214 | .quad .Ld8,.Ls8e | ||
215 | .quad .Ls9,.Le_quad | ||
216 | .quad .Ld9,.Le_quad | ||
217 | .quad .Ls10,.Le_byte | ||
218 | .quad .Ld10,.Le_byte | ||
219 | #ifdef FIX_ALIGNMENT | ||
220 | .quad .Ls11,.Lzero_rest | ||
221 | .quad .Ld11,.Lzero_rest | ||
222 | #endif | ||
223 | .quad .Le5,.Le_zero | ||
224 | .previous | ||
225 | |||
226 | /* compute 64-offset for main loop. 8 bytes accuracy with error on the | ||
227 | pessimistic side. this is gross. it would be better to fix the | ||
228 | interface. */ | ||
229 | /* eax: zero, ebx: 64 */ | ||
230 | .Ls1e: addl $8,%eax | ||
231 | .Ls2e: addl $8,%eax | ||
232 | .Ls3e: addl $8,%eax | ||
233 | .Ls4e: addl $8,%eax | ||
234 | .Ls5e: addl $8,%eax | ||
235 | .Ls6e: addl $8,%eax | ||
236 | .Ls7e: addl $8,%eax | ||
237 | .Ls8e: addl $8,%eax | ||
238 | addq %rbx,%rdi /* +64 */ | ||
239 | subq %rax,%rdi /* correct destination with computed offset */ | ||
240 | |||
241 | shlq $6,%rdx /* loop counter * 64 (stride length) */ | ||
242 | addq %rax,%rdx /* add offset to loopcnt */ | ||
243 | andl $63,%ecx /* remaining bytes */ | ||
244 | addq %rcx,%rdx /* add them */ | ||
245 | jmp .Lzero_rest | ||
246 | |||
247 | /* exception on quad word loop in tail handling */ | ||
248 | /* ecx: loopcnt/8, %edx: length, rdi: correct */ | ||
249 | .Le_quad: | ||
250 | shll $3,%ecx | ||
251 | andl $7,%edx | ||
252 | addl %ecx,%edx | ||
253 | /* edx: bytes to zero, rdi: dest, eax:zero */ | ||
254 | .Lzero_rest: | ||
255 | movq %rdx,%rcx | ||
256 | .Le_byte: | ||
257 | xorl %eax,%eax | ||
258 | .Le5: rep | ||
259 | stosb | ||
260 | /* when there is another exception while zeroing the rest just return */ | ||
261 | .Le_zero: | ||
262 | movq %rdx,%rax | ||
263 | jmp .Lende | ||
264 | |||
265 | /* Some CPUs run faster using the string copy instructions. | ||
266 | This is also a lot simpler. Use them when possible. | ||
267 | Patch in jmps to this code instead of copying it fully | ||
268 | to avoid unwanted aliasing in the exception tables. */ | ||
269 | |||
270 | /* rdi destination | ||
271 | * rsi source | ||
272 | * rdx count | ||
273 | * | ||
274 | * Output: | ||
275 | * eax uncopied bytes or 0 if successfull. | ||
276 | * | ||
277 | * Only 4GB of copy is supported. This shouldn't be a problem | ||
278 | * because the kernel normally only writes from/to page sized chunks | ||
279 | * even if user space passed a longer buffer. | ||
280 | * And more would be dangerous because both Intel and AMD have | ||
281 | * errata with rep movsq > 4GB. If someone feels the need to fix | ||
282 | * this please consider this. | ||
283 | */ | ||
284 | copy_user_generic_c: | ||
69 | movl %edx,%ecx | 285 | movl %edx,%ecx |
70 | shrl $3,%ecx | 286 | shrl $3,%ecx |
71 | andl $7,%edx | 287 | andl $7,%edx |
72 | jz 5f | ||
73 | 1: rep | 288 | 1: rep |
74 | movsq | 289 | movsq |
75 | movl %edx,%ecx | 290 | movl %edx,%ecx |
76 | xor %eax,%eax | ||
77 | 2: rep | 291 | 2: rep |
78 | movsb | 292 | movsb |
293 | 4: movl %ecx,%eax | ||
79 | ret | 294 | ret |
80 | /* align here? */ | ||
81 | 5: xorl %eax,%eax | ||
82 | 6: rep movsq | ||
83 | ret | ||
84 | |||
85 | .section .fixup,"ax" | ||
86 | 3: lea (%rdx,%rcx,8),%rax | 295 | 3: lea (%rdx,%rcx,8),%rax |
87 | ret | 296 | ret |
88 | 4: movl %ecx,%eax | ||
89 | ret | ||
90 | .previous | ||
91 | 297 | ||
92 | .section __ex_table,"a" | 298 | .section __ex_table,"a" |
93 | .quad 1b,3b | 299 | .quad 1b,3b |
94 | .quad 2b,4b | 300 | .quad 2b,4b |
95 | .quad 6b,4b | ||
96 | .previous | 301 | .previous |
diff --git a/arch/x86_64/lib/iomap_copy.S b/arch/x86_64/lib/iomap_copy.S new file mode 100644 index 000000000000..8bbade5fea05 --- /dev/null +++ b/arch/x86_64/lib/iomap_copy.S | |||
@@ -0,0 +1,26 @@ | |||
1 | /* | ||
2 | * Copyright 2006 PathScale, Inc. All Rights Reserved. | ||
3 | * | ||
4 | * This file is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of version 2 of the GNU General Public License | ||
6 | * as published by the Free Software Foundation. | ||
7 | * | ||
8 | * This program is distributed in the hope that it will be useful, | ||
9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
11 | * GNU General Public License for more details. | ||
12 | * | ||
13 | * You should have received a copy of the GNU General Public License | ||
14 | * along with this program; if not, write to the Free Software Foundation, | ||
15 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. | ||
16 | */ | ||
17 | |||
18 | /* | ||
19 | * override generic version in lib/iomap_copy.c | ||
20 | */ | ||
21 | .globl __iowrite32_copy | ||
22 | .p2align 4 | ||
23 | __iowrite32_copy: | ||
24 | movl %edx,%ecx | ||
25 | rep movsd | ||
26 | ret | ||
diff --git a/arch/x86_64/lib/memcpy.S b/arch/x86_64/lib/memcpy.S index 92dd80544602..5554948b5554 100644 --- a/arch/x86_64/lib/memcpy.S +++ b/arch/x86_64/lib/memcpy.S | |||
@@ -11,8 +11,6 @@ | |||
11 | * | 11 | * |
12 | * Output: | 12 | * Output: |
13 | * rax original destination | 13 | * rax original destination |
14 | * | ||
15 | * TODO: check best memcpy for PSC | ||
16 | */ | 14 | */ |
17 | 15 | ||
18 | .globl __memcpy | 16 | .globl __memcpy |
@@ -20,6 +18,95 @@ | |||
20 | .p2align 4 | 18 | .p2align 4 |
21 | __memcpy: | 19 | __memcpy: |
22 | memcpy: | 20 | memcpy: |
21 | pushq %rbx | ||
22 | movq %rdi,%rax | ||
23 | |||
24 | movl %edx,%ecx | ||
25 | shrl $6,%ecx | ||
26 | jz .Lhandle_tail | ||
27 | |||
28 | .p2align 4 | ||
29 | .Lloop_64: | ||
30 | decl %ecx | ||
31 | |||
32 | movq (%rsi),%r11 | ||
33 | movq 8(%rsi),%r8 | ||
34 | |||
35 | movq %r11,(%rdi) | ||
36 | movq %r8,1*8(%rdi) | ||
37 | |||
38 | movq 2*8(%rsi),%r9 | ||
39 | movq 3*8(%rsi),%r10 | ||
40 | |||
41 | movq %r9,2*8(%rdi) | ||
42 | movq %r10,3*8(%rdi) | ||
43 | |||
44 | movq 4*8(%rsi),%r11 | ||
45 | movq 5*8(%rsi),%r8 | ||
46 | |||
47 | movq %r11,4*8(%rdi) | ||
48 | movq %r8,5*8(%rdi) | ||
49 | |||
50 | movq 6*8(%rsi),%r9 | ||
51 | movq 7*8(%rsi),%r10 | ||
52 | |||
53 | movq %r9,6*8(%rdi) | ||
54 | movq %r10,7*8(%rdi) | ||
55 | |||
56 | leaq 64(%rsi),%rsi | ||
57 | leaq 64(%rdi),%rdi | ||
58 | jnz .Lloop_64 | ||
59 | |||
60 | .Lhandle_tail: | ||
61 | movl %edx,%ecx | ||
62 | andl $63,%ecx | ||
63 | shrl $3,%ecx | ||
64 | jz .Lhandle_7 | ||
65 | .p2align 4 | ||
66 | .Lloop_8: | ||
67 | decl %ecx | ||
68 | movq (%rsi),%r8 | ||
69 | movq %r8,(%rdi) | ||
70 | leaq 8(%rdi),%rdi | ||
71 | leaq 8(%rsi),%rsi | ||
72 | jnz .Lloop_8 | ||
73 | |||
74 | .Lhandle_7: | ||
75 | movl %edx,%ecx | ||
76 | andl $7,%ecx | ||
77 | jz .Lende | ||
78 | .p2align 4 | ||
79 | .Lloop_1: | ||
80 | movb (%rsi),%r8b | ||
81 | movb %r8b,(%rdi) | ||
82 | incq %rdi | ||
83 | incq %rsi | ||
84 | decl %ecx | ||
85 | jnz .Lloop_1 | ||
86 | |||
87 | .Lende: | ||
88 | popq %rbx | ||
89 | ret | ||
90 | .Lfinal: | ||
91 | |||
92 | /* Some CPUs run faster using the string copy instructions. | ||
93 | It is also a lot simpler. Use this when possible */ | ||
94 | |||
95 | .section .altinstructions,"a" | ||
96 | .align 8 | ||
97 | .quad memcpy | ||
98 | .quad memcpy_c | ||
99 | .byte X86_FEATURE_REP_GOOD | ||
100 | .byte .Lfinal-memcpy | ||
101 | .byte memcpy_c_end-memcpy_c | ||
102 | .previous | ||
103 | |||
104 | .section .altinstr_replacement,"ax" | ||
105 | /* rdi destination | ||
106 | * rsi source | ||
107 | * rdx count | ||
108 | */ | ||
109 | memcpy_c: | ||
23 | movq %rdi,%rax | 110 | movq %rdi,%rax |
24 | movl %edx,%ecx | 111 | movl %edx,%ecx |
25 | shrl $3,%ecx | 112 | shrl $3,%ecx |
@@ -30,3 +117,5 @@ memcpy: | |||
30 | rep | 117 | rep |
31 | movsb | 118 | movsb |
32 | ret | 119 | ret |
120 | memcpy_c_end: | ||
121 | .previous | ||
diff --git a/arch/x86_64/lib/memset.S b/arch/x86_64/lib/memset.S index 2aa48f24ed1e..ad397f2c7de8 100644 --- a/arch/x86_64/lib/memset.S +++ b/arch/x86_64/lib/memset.S | |||
@@ -13,6 +13,98 @@ | |||
13 | .p2align 4 | 13 | .p2align 4 |
14 | memset: | 14 | memset: |
15 | __memset: | 15 | __memset: |
16 | movq %rdi,%r10 | ||
17 | movq %rdx,%r11 | ||
18 | |||
19 | /* expand byte value */ | ||
20 | movzbl %sil,%ecx | ||
21 | movabs $0x0101010101010101,%rax | ||
22 | mul %rcx /* with rax, clobbers rdx */ | ||
23 | |||
24 | /* align dst */ | ||
25 | movl %edi,%r9d | ||
26 | andl $7,%r9d | ||
27 | jnz .Lbad_alignment | ||
28 | .Lafter_bad_alignment: | ||
29 | |||
30 | movl %r11d,%ecx | ||
31 | shrl $6,%ecx | ||
32 | jz .Lhandle_tail | ||
33 | |||
34 | .p2align 4 | ||
35 | .Lloop_64: | ||
36 | decl %ecx | ||
37 | movq %rax,(%rdi) | ||
38 | movq %rax,8(%rdi) | ||
39 | movq %rax,16(%rdi) | ||
40 | movq %rax,24(%rdi) | ||
41 | movq %rax,32(%rdi) | ||
42 | movq %rax,40(%rdi) | ||
43 | movq %rax,48(%rdi) | ||
44 | movq %rax,56(%rdi) | ||
45 | leaq 64(%rdi),%rdi | ||
46 | jnz .Lloop_64 | ||
47 | |||
48 | /* Handle tail in loops. The loops should be faster than hard | ||
49 | to predict jump tables. */ | ||
50 | .p2align 4 | ||
51 | .Lhandle_tail: | ||
52 | movl %r11d,%ecx | ||
53 | andl $63&(~7),%ecx | ||
54 | jz .Lhandle_7 | ||
55 | shrl $3,%ecx | ||
56 | .p2align 4 | ||
57 | .Lloop_8: | ||
58 | decl %ecx | ||
59 | movq %rax,(%rdi) | ||
60 | leaq 8(%rdi),%rdi | ||
61 | jnz .Lloop_8 | ||
62 | |||
63 | .Lhandle_7: | ||
64 | movl %r11d,%ecx | ||
65 | andl $7,%ecx | ||
66 | jz .Lende | ||
67 | .p2align 4 | ||
68 | .Lloop_1: | ||
69 | decl %ecx | ||
70 | movb %al,(%rdi) | ||
71 | leaq 1(%rdi),%rdi | ||
72 | jnz .Lloop_1 | ||
73 | |||
74 | .Lende: | ||
75 | movq %r10,%rax | ||
76 | ret | ||
77 | |||
78 | .Lbad_alignment: | ||
79 | cmpq $7,%r11 | ||
80 | jbe .Lhandle_7 | ||
81 | movq %rax,(%rdi) /* unaligned store */ | ||
82 | movq $8,%r8 | ||
83 | subq %r9,%r8 | ||
84 | addq %r8,%rdi | ||
85 | subq %r8,%r11 | ||
86 | jmp .Lafter_bad_alignment | ||
87 | |||
88 | /* Some CPUs run faster using the string instructions. | ||
89 | It is also a lot simpler. Use this when possible */ | ||
90 | |||
91 | #include <asm/cpufeature.h> | ||
92 | |||
93 | .section .altinstructions,"a" | ||
94 | .align 8 | ||
95 | .quad memset | ||
96 | .quad memset_c | ||
97 | .byte X86_FEATURE_REP_GOOD | ||
98 | .byte memset_c_end-memset_c | ||
99 | .byte memset_c_end-memset_c | ||
100 | .previous | ||
101 | |||
102 | .section .altinstr_replacement,"ax" | ||
103 | /* rdi destination | ||
104 | * rsi value | ||
105 | * rdx count | ||
106 | */ | ||
107 | memset_c: | ||
16 | movq %rdi,%r9 | 108 | movq %rdi,%r9 |
17 | movl %edx,%r8d | 109 | movl %edx,%r8d |
18 | andl $7,%r8d | 110 | andl $7,%r8d |
@@ -29,3 +121,5 @@ __memset: | |||
29 | stosb | 121 | stosb |
30 | movq %r9,%rax | 122 | movq %r9,%rax |
31 | ret | 123 | ret |
124 | memset_c_end: | ||
125 | .previous | ||
diff --git a/arch/x86_64/mm/fault.c b/arch/x86_64/mm/fault.c index 26eac194064b..2e7c3c8ffe03 100644 --- a/arch/x86_64/mm/fault.c +++ b/arch/x86_64/mm/fault.c | |||
@@ -33,7 +33,6 @@ | |||
33 | #include <asm/proto.h> | 33 | #include <asm/proto.h> |
34 | #include <asm/kdebug.h> | 34 | #include <asm/kdebug.h> |
35 | #include <asm-generic/sections.h> | 35 | #include <asm-generic/sections.h> |
36 | #include <asm/kdebug.h> | ||
37 | 36 | ||
38 | /* Page fault error code bits */ | 37 | /* Page fault error code bits */ |
39 | #define PF_PROT (1<<0) /* or no page found */ | 38 | #define PF_PROT (1<<0) /* or no page found */ |
@@ -157,8 +156,8 @@ void dump_pagetable(unsigned long address) | |||
157 | 156 | ||
158 | pgd = __va((unsigned long)pgd & PHYSICAL_PAGE_MASK); | 157 | pgd = __va((unsigned long)pgd & PHYSICAL_PAGE_MASK); |
159 | pgd += pgd_index(address); | 158 | pgd += pgd_index(address); |
160 | printk("PGD %lx ", pgd_val(*pgd)); | ||
161 | if (bad_address(pgd)) goto bad; | 159 | if (bad_address(pgd)) goto bad; |
160 | printk("PGD %lx ", pgd_val(*pgd)); | ||
162 | if (!pgd_present(*pgd)) goto ret; | 161 | if (!pgd_present(*pgd)) goto ret; |
163 | 162 | ||
164 | pud = __pud_offset_k((pud_t *)pgd_page(*pgd), address); | 163 | pud = __pud_offset_k((pud_t *)pgd_page(*pgd), address); |
diff --git a/arch/x86_64/mm/k8topology.c b/arch/x86_64/mm/k8topology.c index a5663e0bb01c..dd60e71fdba6 100644 --- a/arch/x86_64/mm/k8topology.c +++ b/arch/x86_64/mm/k8topology.c | |||
@@ -155,7 +155,7 @@ int __init k8_scan_nodes(unsigned long start, unsigned long end) | |||
155 | if (!found) | 155 | if (!found) |
156 | return -1; | 156 | return -1; |
157 | 157 | ||
158 | memnode_shift = compute_hash_shift(nodes, numnodes); | 158 | memnode_shift = compute_hash_shift(nodes, 8); |
159 | if (memnode_shift < 0) { | 159 | if (memnode_shift < 0) { |
160 | printk(KERN_ERR "No NUMA node hash function found. Contact maintainer\n"); | 160 | printk(KERN_ERR "No NUMA node hash function found. Contact maintainer\n"); |
161 | return -1; | 161 | return -1; |
diff --git a/arch/x86_64/mm/numa.c b/arch/x86_64/mm/numa.c index 6ef9f9a76235..22e51beee8d3 100644 --- a/arch/x86_64/mm/numa.c +++ b/arch/x86_64/mm/numa.c | |||
@@ -351,7 +351,7 @@ void __init init_cpu_to_node(void) | |||
351 | continue; | 351 | continue; |
352 | if (apicid_to_node[apicid] == NUMA_NO_NODE) | 352 | if (apicid_to_node[apicid] == NUMA_NO_NODE) |
353 | continue; | 353 | continue; |
354 | cpu_to_node[i] = apicid_to_node[apicid]; | 354 | numa_set_node(i,apicid_to_node[apicid]); |
355 | } | 355 | } |
356 | } | 356 | } |
357 | 357 | ||
diff --git a/arch/x86_64/mm/srat.c b/arch/x86_64/mm/srat.c index 8b7f85608fa8..482c25767369 100644 --- a/arch/x86_64/mm/srat.c +++ b/arch/x86_64/mm/srat.c | |||
@@ -26,6 +26,10 @@ static nodemask_t nodes_found __initdata; | |||
26 | static struct node nodes[MAX_NUMNODES] __initdata; | 26 | static struct node nodes[MAX_NUMNODES] __initdata; |
27 | static u8 pxm2node[256] = { [0 ... 255] = 0xff }; | 27 | static u8 pxm2node[256] = { [0 ... 255] = 0xff }; |
28 | 28 | ||
29 | /* Too small nodes confuse the VM badly. Usually they result | ||
30 | from BIOS bugs. */ | ||
31 | #define NODE_MIN_SIZE (4*1024*1024) | ||
32 | |||
29 | static int node_to_pxm(int n); | 33 | static int node_to_pxm(int n); |
30 | 34 | ||
31 | int pxm_to_node(int pxm) | 35 | int pxm_to_node(int pxm) |
@@ -131,7 +135,12 @@ void __init | |||
131 | acpi_numa_processor_affinity_init(struct acpi_table_processor_affinity *pa) | 135 | acpi_numa_processor_affinity_init(struct acpi_table_processor_affinity *pa) |
132 | { | 136 | { |
133 | int pxm, node; | 137 | int pxm, node; |
134 | if (srat_disabled() || pa->flags.enabled == 0) | 138 | if (srat_disabled()) |
139 | return; | ||
140 | if (pa->header.length != sizeof(struct acpi_table_processor_affinity)) { bad_srat(); | ||
141 | return; | ||
142 | } | ||
143 | if (pa->flags.enabled == 0) | ||
135 | return; | 144 | return; |
136 | pxm = pa->proximity_domain; | 145 | pxm = pa->proximity_domain; |
137 | node = setup_node(pxm); | 146 | node = setup_node(pxm); |
@@ -155,8 +164,16 @@ acpi_numa_memory_affinity_init(struct acpi_table_memory_affinity *ma) | |||
155 | int node, pxm; | 164 | int node, pxm; |
156 | int i; | 165 | int i; |
157 | 166 | ||
158 | if (srat_disabled() || ma->flags.enabled == 0) | 167 | if (srat_disabled()) |
168 | return; | ||
169 | if (ma->header.length != sizeof(struct acpi_table_memory_affinity)) { | ||
170 | bad_srat(); | ||
159 | return; | 171 | return; |
172 | } | ||
173 | if (ma->flags.enabled == 0) | ||
174 | return; | ||
175 | start = ma->base_addr_lo | ((u64)ma->base_addr_hi << 32); | ||
176 | end = start + (ma->length_lo | ((u64)ma->length_hi << 32)); | ||
160 | pxm = ma->proximity_domain; | 177 | pxm = ma->proximity_domain; |
161 | node = setup_node(pxm); | 178 | node = setup_node(pxm); |
162 | if (node < 0) { | 179 | if (node < 0) { |
@@ -164,8 +181,6 @@ acpi_numa_memory_affinity_init(struct acpi_table_memory_affinity *ma) | |||
164 | bad_srat(); | 181 | bad_srat(); |
165 | return; | 182 | return; |
166 | } | 183 | } |
167 | start = ma->base_addr_lo | ((u64)ma->base_addr_hi << 32); | ||
168 | end = start + (ma->length_lo | ((u64)ma->length_hi << 32)); | ||
169 | /* It is fine to add this area to the nodes data it will be used later*/ | 184 | /* It is fine to add this area to the nodes data it will be used later*/ |
170 | if (ma->flags.hot_pluggable == 1) | 185 | if (ma->flags.hot_pluggable == 1) |
171 | printk(KERN_INFO "SRAT: hot plug zone found %lx - %lx \n", | 186 | printk(KERN_INFO "SRAT: hot plug zone found %lx - %lx \n", |
@@ -213,7 +228,8 @@ static int nodes_cover_memory(void) | |||
213 | } | 228 | } |
214 | 229 | ||
215 | e820ram = end_pfn - e820_hole_size(0, end_pfn); | 230 | e820ram = end_pfn - e820_hole_size(0, end_pfn); |
216 | if (pxmram < e820ram) { | 231 | /* We seem to lose 3 pages somewhere. Allow a bit of slack. */ |
232 | if ((long)(e820ram - pxmram) >= 1*1024*1024) { | ||
217 | printk(KERN_ERR | 233 | printk(KERN_ERR |
218 | "SRAT: PXMs only cover %luMB of your %luMB e820 RAM. Not used.\n", | 234 | "SRAT: PXMs only cover %luMB of your %luMB e820 RAM. Not used.\n", |
219 | (pxmram << PAGE_SHIFT) >> 20, | 235 | (pxmram << PAGE_SHIFT) >> 20, |
@@ -223,6 +239,16 @@ static int nodes_cover_memory(void) | |||
223 | return 1; | 239 | return 1; |
224 | } | 240 | } |
225 | 241 | ||
242 | static void unparse_node(int node) | ||
243 | { | ||
244 | int i; | ||
245 | node_clear(node, nodes_parsed); | ||
246 | for (i = 0; i < MAX_LOCAL_APIC; i++) { | ||
247 | if (apicid_to_node[i] == node) | ||
248 | apicid_to_node[i] = NUMA_NO_NODE; | ||
249 | } | ||
250 | } | ||
251 | |||
226 | void __init acpi_numa_arch_fixup(void) {} | 252 | void __init acpi_numa_arch_fixup(void) {} |
227 | 253 | ||
228 | /* Use the information discovered above to actually set up the nodes. */ | 254 | /* Use the information discovered above to actually set up the nodes. */ |
@@ -230,22 +256,22 @@ int __init acpi_scan_nodes(unsigned long start, unsigned long end) | |||
230 | { | 256 | { |
231 | int i; | 257 | int i; |
232 | 258 | ||
233 | if (acpi_numa <= 0) | ||
234 | return -1; | ||
235 | |||
236 | /* First clean up the node list */ | 259 | /* First clean up the node list */ |
237 | for_each_node_mask(i, nodes_parsed) { | 260 | for (i = 0; i < MAX_NUMNODES; i++) { |
238 | cutoff_node(i, start, end); | 261 | cutoff_node(i, start, end); |
239 | if (nodes[i].start == nodes[i].end) | 262 | if ((nodes[i].end - nodes[i].start) < NODE_MIN_SIZE) |
240 | node_clear(i, nodes_parsed); | 263 | unparse_node(i); |
241 | } | 264 | } |
242 | 265 | ||
266 | if (acpi_numa <= 0) | ||
267 | return -1; | ||
268 | |||
243 | if (!nodes_cover_memory()) { | 269 | if (!nodes_cover_memory()) { |
244 | bad_srat(); | 270 | bad_srat(); |
245 | return -1; | 271 | return -1; |
246 | } | 272 | } |
247 | 273 | ||
248 | memnode_shift = compute_hash_shift(nodes, nodes_weight(nodes_parsed)); | 274 | memnode_shift = compute_hash_shift(nodes, MAX_NUMNODES); |
249 | if (memnode_shift < 0) { | 275 | if (memnode_shift < 0) { |
250 | printk(KERN_ERR | 276 | printk(KERN_ERR |
251 | "SRAT: No NUMA node hash function found. Contact maintainer\n"); | 277 | "SRAT: No NUMA node hash function found. Contact maintainer\n"); |
diff --git a/arch/x86_64/pci/mmconfig.c b/arch/x86_64/pci/mmconfig.c index f16c0d57c552..18f371fe37f8 100644 --- a/arch/x86_64/pci/mmconfig.c +++ b/arch/x86_64/pci/mmconfig.c | |||
@@ -29,11 +29,8 @@ static char __iomem *get_virt(unsigned int seg, unsigned bus) | |||
29 | 29 | ||
30 | while (1) { | 30 | while (1) { |
31 | ++cfg_num; | 31 | ++cfg_num; |
32 | if (cfg_num >= pci_mmcfg_config_num) { | 32 | if (cfg_num >= pci_mmcfg_config_num) |
33 | /* Not found - fall back to type 1. This happens | 33 | break; |
34 | e.g. on the internal devices of a K8 northbridge. */ | ||
35 | return NULL; | ||
36 | } | ||
37 | cfg = pci_mmcfg_virt[cfg_num].cfg; | 34 | cfg = pci_mmcfg_virt[cfg_num].cfg; |
38 | if (cfg->pci_segment_group_number != seg) | 35 | if (cfg->pci_segment_group_number != seg) |
39 | continue; | 36 | continue; |
@@ -41,6 +38,18 @@ static char __iomem *get_virt(unsigned int seg, unsigned bus) | |||
41 | (cfg->end_bus_number >= bus)) | 38 | (cfg->end_bus_number >= bus)) |
42 | return pci_mmcfg_virt[cfg_num].virt; | 39 | return pci_mmcfg_virt[cfg_num].virt; |
43 | } | 40 | } |
41 | |||
42 | /* Handle more broken MCFG tables on Asus etc. | ||
43 | They only contain a single entry for bus 0-0. Assume | ||
44 | this applies to all busses. */ | ||
45 | cfg = &pci_mmcfg_config[0]; | ||
46 | if (pci_mmcfg_config_num == 1 && | ||
47 | cfg->pci_segment_group_number == 0 && | ||
48 | (cfg->start_bus_number | cfg->end_bus_number) == 0) | ||
49 | return pci_mmcfg_virt[0].virt; | ||
50 | |||
51 | /* Fall back to type 0 */ | ||
52 | return NULL; | ||
44 | } | 53 | } |
45 | 54 | ||
46 | static char __iomem *pci_dev_base(unsigned int seg, unsigned int bus, unsigned int devfn) | 55 | static char __iomem *pci_dev_base(unsigned int seg, unsigned int bus, unsigned int devfn) |
diff --git a/arch/xtensa/Kconfig b/arch/xtensa/Kconfig index 7ee4a14ec3b1..e90ef5db8913 100644 --- a/arch/xtensa/Kconfig +++ b/arch/xtensa/Kconfig | |||
@@ -26,6 +26,10 @@ config GENERIC_HARDIRQS | |||
26 | bool | 26 | bool |
27 | default y | 27 | default y |
28 | 28 | ||
29 | config RWSEM_GENERIC_SPINLOCK | ||
30 | bool | ||
31 | default y | ||
32 | |||
29 | source "init/Kconfig" | 33 | source "init/Kconfig" |
30 | 34 | ||
31 | menu "Processor type and features" | 35 | menu "Processor type and features" |
diff --git a/arch/xtensa/kernel/process.c b/arch/xtensa/kernel/process.c index f1f596644bfc..64a649eb883f 100644 --- a/arch/xtensa/kernel/process.c +++ b/arch/xtensa/kernel/process.c | |||
@@ -64,6 +64,9 @@ EXPORT_SYMBOL(init_task); | |||
64 | 64 | ||
65 | struct task_struct *current_set[NR_CPUS] = {&init_task, }; | 65 | struct task_struct *current_set[NR_CPUS] = {&init_task, }; |
66 | 66 | ||
67 | void (*pm_power_off)(void) = NULL; | ||
68 | EXPORT_SYMBOL(pm_power_off); | ||
69 | |||
67 | 70 | ||
68 | #if XCHAL_CP_NUM > 0 | 71 | #if XCHAL_CP_NUM > 0 |
69 | 72 | ||
diff --git a/arch/xtensa/platform-iss/console.c b/arch/xtensa/platform-iss/console.c index 4fbddf92a921..94fdfe474ac1 100644 --- a/arch/xtensa/platform-iss/console.c +++ b/arch/xtensa/platform-iss/console.c | |||
@@ -128,9 +128,7 @@ static void rs_poll(unsigned long priv) | |||
128 | 128 | ||
129 | while (__simc(SYS_select_one, 0, XTISS_SELECT_ONE_READ, (int)&tv,0,0)){ | 129 | while (__simc(SYS_select_one, 0, XTISS_SELECT_ONE_READ, (int)&tv,0,0)){ |
130 | __simc (SYS_read, 0, (unsigned long)&c, 1, 0, 0); | 130 | __simc (SYS_read, 0, (unsigned long)&c, 1, 0, 0); |
131 | tty->flip.count++; | 131 | tty_insert_flip_char(tty, c, TTY_NORMAL); |
132 | *tty->flip.char_buf_ptr++ = c; | ||
133 | *tty->flip.flag_buf_ptr++ = TTY_NORMAL; | ||
134 | i++; | 132 | i++; |
135 | } | 133 | } |
136 | 134 | ||