aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/common/Kconfig1
-rw-r--r--arch/arm/mach-at91/gpio.c3
-rw-r--r--arch/arm/mach-imx/cpufreq.c15
-rw-r--r--arch/arm/mach-imx/generic.c9
-rw-r--r--arch/arm/mach-ns9xxx/mach-cc9p9360dev.c2
-rw-r--r--arch/arm/mach-omap1/board-h2.c1
-rw-r--r--arch/arm/mach-omap2/clock.c1
-rw-r--r--arch/arm/mach-omap2/clock.h3
-rw-r--r--arch/arm/mach-pxa/tosa.c3
-rw-r--r--arch/arm/mach-sa1100/generic.c4
-rw-r--r--arch/avr32/mach-at32ap/pio.c4
-rw-r--r--arch/i386/Kconfig2
-rw-r--r--arch/i386/defconfig43
-rw-r--r--arch/i386/kernel/apic.c78
-rw-r--r--arch/i386/kernel/i386_ksyms.c2
-rw-r--r--arch/i386/kernel/nmi.c8
-rw-r--r--arch/i386/kernel/tsc.c2
-rw-r--r--arch/i386/kernel/vmi.c17
-rw-r--r--arch/ia64/sn/kernel/io_init.c12
-rw-r--r--arch/mips/Kconfig9
-rw-r--r--arch/mips/configs/atlas_defconfig1
-rw-r--r--arch/mips/configs/bigsur_defconfig1
-rw-r--r--arch/mips/configs/capcella_defconfig1
-rw-r--r--arch/mips/configs/cobalt_defconfig1
-rw-r--r--arch/mips/configs/db1000_defconfig1
-rw-r--r--arch/mips/configs/db1100_defconfig1
-rw-r--r--arch/mips/configs/db1200_defconfig1
-rw-r--r--arch/mips/configs/db1500_defconfig1
-rw-r--r--arch/mips/configs/db1550_defconfig1
-rw-r--r--arch/mips/configs/ddb5477_defconfig1
-rw-r--r--arch/mips/configs/decstation_defconfig1
-rw-r--r--arch/mips/configs/e55_defconfig1
-rw-r--r--arch/mips/configs/emma2rh_defconfig1
-rw-r--r--arch/mips/configs/ev64120_defconfig1
-rw-r--r--arch/mips/configs/excite_defconfig1
-rw-r--r--arch/mips/configs/ip22_defconfig1
-rw-r--r--arch/mips/configs/ip27_defconfig1
-rw-r--r--arch/mips/configs/ip32_defconfig1
-rw-r--r--arch/mips/configs/jaguar-atx_defconfig1
-rw-r--r--arch/mips/configs/jazz_defconfig1
-rw-r--r--arch/mips/configs/jmr3927_defconfig1
-rw-r--r--arch/mips/configs/lasat200_defconfig1
-rw-r--r--arch/mips/configs/malta_defconfig1
-rw-r--r--arch/mips/configs/mipssim_defconfig1
-rw-r--r--arch/mips/configs/mpc30x_defconfig1
-rw-r--r--arch/mips/configs/ocelot_3_defconfig1
-rw-r--r--arch/mips/configs/ocelot_c_defconfig1
-rw-r--r--arch/mips/configs/ocelot_defconfig1
-rw-r--r--arch/mips/configs/ocelot_g_defconfig1
-rw-r--r--arch/mips/configs/pb1100_defconfig1
-rw-r--r--arch/mips/configs/pb1500_defconfig1
-rw-r--r--arch/mips/configs/pb1550_defconfig1
-rw-r--r--arch/mips/configs/pnx8550-jbs_defconfig1
-rw-r--r--arch/mips/configs/pnx8550-stb810_defconfig1
-rw-r--r--arch/mips/configs/pnx8550-v2pci_defconfig1
-rw-r--r--arch/mips/configs/qemu_defconfig1
-rw-r--r--arch/mips/configs/rbhma4500_defconfig1
-rw-r--r--arch/mips/configs/rm200_defconfig1
-rw-r--r--arch/mips/configs/sb1250-swarm_defconfig1
-rw-r--r--arch/mips/configs/sead_defconfig1
-rw-r--r--arch/mips/configs/tb0226_defconfig1
-rw-r--r--arch/mips/configs/tb0229_defconfig1
-rw-r--r--arch/mips/configs/tb0287_defconfig1
-rw-r--r--arch/mips/configs/workpad_defconfig1
-rw-r--r--arch/mips/configs/wrppmc_defconfig1
-rw-r--r--arch/mips/configs/yosemite_defconfig1
-rw-r--r--arch/mips/defconfig1
-rw-r--r--arch/mips/kernel/kspd.c22
-rw-r--r--arch/mips/kernel/linux32.c12
-rw-r--r--arch/mips/kernel/r2300_switch.S10
-rw-r--r--arch/mips/kernel/r4k_fpu.S16
-rw-r--r--arch/mips/kernel/r4k_switch.S10
-rw-r--r--arch/mips/kernel/rtlx.c104
-rw-r--r--arch/mips/kernel/signal-common.h3
-rw-r--r--arch/mips/kernel/signal.c75
-rw-r--r--arch/mips/kernel/signal32.c56
-rw-r--r--arch/mips/kernel/signal_n32.c6
-rw-r--r--arch/mips/kernel/traps.c84
-rw-r--r--arch/mips/math-emu/kernel_linkage.c8
-rw-r--r--arch/mips/oprofile/op_model_mipsxx.c22
-rw-r--r--arch/mips/philips/pnx8550/common/int.c14
-rw-r--r--arch/powerpc/configs/cell_defconfig151
-rw-r--r--arch/powerpc/kernel/udbg_16550.c2
-rw-r--r--arch/powerpc/mm/hash_utils_64.c6
-rw-r--r--arch/powerpc/mm/hugetlbpage.c4
-rw-r--r--arch/powerpc/platforms/cell/spu_base.c81
-rw-r--r--arch/powerpc/platforms/cell/spufs/file.c24
-rw-r--r--arch/powerpc/platforms/cell/spufs/run.c4
-rw-r--r--arch/powerpc/platforms/cell/spufs/sched.c20
-rw-r--r--arch/powerpc/platforms/cell/spufs/spufs.h6
-rw-r--r--arch/powerpc/platforms/cell/spufs/switch.c62
-rw-r--r--arch/powerpc/platforms/pasemi/iommu.c2
-rw-r--r--arch/powerpc/platforms/ps3/mm.c2
-rw-r--r--arch/powerpc/platforms/ps3/system-bus.c2
-rw-r--r--arch/s390/appldata/appldata_mem.c5
-rw-r--r--arch/sparc/kernel/process.c16
-rw-r--r--arch/sparc/kernel/systbls.S6
-rw-r--r--arch/sparc/kernel/traps.c6
-rw-r--r--arch/sparc/mm/init.c2
-rw-r--r--arch/sparc64/Kconfig14
-rw-r--r--arch/sparc64/defconfig10
-rw-r--r--arch/sparc64/kernel/ktlb.S8
-rw-r--r--arch/sparc64/kernel/process.c9
-rw-r--r--arch/sparc64/kernel/systbls.S9
-rw-r--r--arch/sparc64/mm/hugetlbpage.c3
-rw-r--r--arch/sparc64/mm/init.c30
-rw-r--r--arch/um/Kconfig2
-rw-r--r--arch/um/scripts/Makefile.rules4
-rw-r--r--arch/x86_64/defconfig53
-rw-r--r--arch/x86_64/ia32/ia32entry.S2
-rw-r--r--arch/x86_64/kernel/cpufreq/Kconfig1
-rw-r--r--arch/x86_64/kernel/e820.c2
-rw-r--r--arch/x86_64/kernel/early-quirks.c8
-rw-r--r--arch/x86_64/kernel/mpparse.c4
-rw-r--r--arch/x86_64/kernel/nmi.c5
-rw-r--r--arch/x86_64/kernel/pci-gart.c2
-rw-r--r--arch/x86_64/kernel/process.c13
-rw-r--r--arch/x86_64/kernel/vsyscall.c2
-rw-r--r--arch/x86_64/kernel/x8664_ksyms.c1
119 files changed, 751 insertions, 540 deletions
diff --git a/arch/arm/common/Kconfig b/arch/arm/common/Kconfig
index 5e34ca6d38b6..3e073467caca 100644
--- a/arch/arm/common/Kconfig
+++ b/arch/arm/common/Kconfig
@@ -28,6 +28,7 @@ config SHARP_PARAM
28 28
29config SHARPSL_PM 29config SHARPSL_PM
30 bool 30 bool
31 select APM_EMULATION
31 32
32config SHARP_SCOOP 33config SHARP_SCOOP
33 bool 34 bool
diff --git a/arch/arm/mach-at91/gpio.c b/arch/arm/mach-at91/gpio.c
index 44211a0af19a..ba4a1bb3ee40 100644
--- a/arch/arm/mach-at91/gpio.c
+++ b/arch/arm/mach-at91/gpio.c
@@ -215,13 +215,14 @@ int gpio_direction_input(unsigned pin)
215} 215}
216EXPORT_SYMBOL(gpio_direction_input); 216EXPORT_SYMBOL(gpio_direction_input);
217 217
218int gpio_direction_output(unsigned pin) 218int gpio_direction_output(unsigned pin, int value)
219{ 219{
220 void __iomem *pio = pin_to_controller(pin); 220 void __iomem *pio = pin_to_controller(pin);
221 unsigned mask = pin_to_mask(pin); 221 unsigned mask = pin_to_mask(pin);
222 222
223 if (!pio || !(__raw_readl(pio + PIO_PSR) & mask)) 223 if (!pio || !(__raw_readl(pio + PIO_PSR) & mask))
224 return -EINVAL; 224 return -EINVAL;
225 __raw_writel(mask, pio + (value ? PIO_SODR : PIO_CODR));
225 __raw_writel(mask, pio + PIO_OER); 226 __raw_writel(mask, pio + PIO_OER);
226 return 0; 227 return 0;
227} 228}
diff --git a/arch/arm/mach-imx/cpufreq.c b/arch/arm/mach-imx/cpufreq.c
index 4f66e90db74f..7e70e0b0b989 100644
--- a/arch/arm/mach-imx/cpufreq.c
+++ b/arch/arm/mach-imx/cpufreq.c
@@ -50,6 +50,7 @@
50#define CR_920T_ASYNC_MODE 0xC0000000 50#define CR_920T_ASYNC_MODE 0xC0000000
51 51
52static u32 mpctl0_at_boot; 52static u32 mpctl0_at_boot;
53static u32 bclk_div_at_boot;
53 54
54static void imx_set_async_mode(void) 55static void imx_set_async_mode(void)
55{ 56{
@@ -82,13 +83,13 @@ static void imx_set_mpctl0(u32 mpctl0)
82 * imx_compute_mpctl - compute new PLL parameters 83 * imx_compute_mpctl - compute new PLL parameters
83 * @new_mpctl: pointer to location assigned by new PLL control register value 84 * @new_mpctl: pointer to location assigned by new PLL control register value
84 * @cur_mpctl: current PLL control register parameters 85 * @cur_mpctl: current PLL control register parameters
86 * @f_ref: reference source frequency Hz
85 * @freq: required frequency in Hz 87 * @freq: required frequency in Hz
86 * @relation: is one of %CPUFREQ_RELATION_L (supremum) 88 * @relation: is one of %CPUFREQ_RELATION_L (supremum)
87 * and %CPUFREQ_RELATION_H (infimum) 89 * and %CPUFREQ_RELATION_H (infimum)
88 */ 90 */
89long imx_compute_mpctl(u32 *new_mpctl, u32 cur_mpctl, unsigned long freq, int relation) 91long imx_compute_mpctl(u32 *new_mpctl, u32 cur_mpctl, u32 f_ref, unsigned long freq, int relation)
90{ 92{
91 u32 f_ref = (CSCR & CSCR_SYSTEM_SEL) ? 16000000 : (CLK32 * 512);
92 u32 mfi; 93 u32 mfi;
93 u32 mfn; 94 u32 mfn;
94 u32 mfd; 95 u32 mfd;
@@ -182,7 +183,7 @@ static int imx_set_target(struct cpufreq_policy *policy,
182 unsigned long flags; 183 unsigned long flags;
183 long freq; 184 long freq;
184 long sysclk; 185 long sysclk;
185 unsigned int bclk_div = 1; 186 unsigned int bclk_div = bclk_div_at_boot;
186 187
187 /* 188 /*
188 * Some governors do not respects CPU and policy lower limits 189 * Some governors do not respects CPU and policy lower limits
@@ -202,8 +203,8 @@ static int imx_set_target(struct cpufreq_policy *policy,
202 203
203 sysclk = imx_get_system_clk(); 204 sysclk = imx_get_system_clk();
204 205
205 if (freq > sysclk + 1000000) { 206 if (freq > sysclk / bclk_div_at_boot + 1000000) {
206 freq = imx_compute_mpctl(&mpctl0, mpctl0_at_boot, freq, relation); 207 freq = imx_compute_mpctl(&mpctl0, mpctl0_at_boot, CLK32 * 512, freq, relation);
207 if (freq < 0) { 208 if (freq < 0) {
208 printk(KERN_WARNING "imx: target frequency %ld Hz cannot be set\n", freq); 209 printk(KERN_WARNING "imx: target frequency %ld Hz cannot be set\n", freq);
209 return -EINVAL; 210 return -EINVAL;
@@ -217,6 +218,8 @@ static int imx_set_target(struct cpufreq_policy *policy,
217 218
218 if(bclk_div > 16) 219 if(bclk_div > 16)
219 bclk_div = 16; 220 bclk_div = 16;
221 if(bclk_div < bclk_div_at_boot)
222 bclk_div = bclk_div_at_boot;
220 } 223 }
221 freq = (sysclk + bclk_div / 2) / bclk_div; 224 freq = (sysclk + bclk_div / 2) / bclk_div;
222 } 225 }
@@ -285,7 +288,7 @@ static struct cpufreq_driver imx_driver = {
285 288
286static int __init imx_cpufreq_init(void) 289static int __init imx_cpufreq_init(void)
287{ 290{
288 291 bclk_div_at_boot = __mfld2val(CSCR_BCLK_DIV, CSCR) + 1;
289 mpctl0_at_boot = 0; 292 mpctl0_at_boot = 0;
290 293
291 if((CSCR & CSCR_MPEN) && 294 if((CSCR & CSCR_MPEN) &&
diff --git a/arch/arm/mach-imx/generic.c b/arch/arm/mach-imx/generic.c
index b5aa49d00ca3..7a7fa51ec62c 100644
--- a/arch/arm/mach-imx/generic.c
+++ b/arch/arm/mach-imx/generic.c
@@ -102,7 +102,7 @@ EXPORT_SYMBOL(imx_gpio_mode);
102 * f = 2 * f_ref * -------------------- 102 * f = 2 * f_ref * --------------------
103 * pd + 1 103 * pd + 1
104 */ 104 */
105static unsigned int imx_decode_pll(unsigned int pll) 105static unsigned int imx_decode_pll(unsigned int pll, u32 f_ref)
106{ 106{
107 unsigned long long ll; 107 unsigned long long ll;
108 unsigned long quot; 108 unsigned long quot;
@@ -111,7 +111,6 @@ static unsigned int imx_decode_pll(unsigned int pll)
111 u32 mfn = pll & 0x3ff; 111 u32 mfn = pll & 0x3ff;
112 u32 mfd = (pll >> 16) & 0x3ff; 112 u32 mfd = (pll >> 16) & 0x3ff;
113 u32 pd = (pll >> 26) & 0xf; 113 u32 pd = (pll >> 26) & 0xf;
114 u32 f_ref = (CSCR & CSCR_SYSTEM_SEL) ? 16000000 : (CLK32 * 512);
115 114
116 mfi = mfi <= 5 ? 5 : mfi; 115 mfi = mfi <= 5 ? 5 : mfi;
117 116
@@ -124,13 +123,15 @@ static unsigned int imx_decode_pll(unsigned int pll)
124 123
125unsigned int imx_get_system_clk(void) 124unsigned int imx_get_system_clk(void)
126{ 125{
127 return imx_decode_pll(SPCTL0); 126 u32 f_ref = (CSCR & CSCR_SYSTEM_SEL) ? 16000000 : (CLK32 * 512);
127
128 return imx_decode_pll(SPCTL0, f_ref);
128} 129}
129EXPORT_SYMBOL(imx_get_system_clk); 130EXPORT_SYMBOL(imx_get_system_clk);
130 131
131unsigned int imx_get_mcu_clk(void) 132unsigned int imx_get_mcu_clk(void)
132{ 133{
133 return imx_decode_pll(MPCTL0); 134 return imx_decode_pll(MPCTL0, CLK32 * 512);
134} 135}
135EXPORT_SYMBOL(imx_get_mcu_clk); 136EXPORT_SYMBOL(imx_get_mcu_clk);
136 137
diff --git a/arch/arm/mach-ns9xxx/mach-cc9p9360dev.c b/arch/arm/mach-ns9xxx/mach-cc9p9360dev.c
index a193dd931512..760c9d0db7c3 100644
--- a/arch/arm/mach-ns9xxx/mach-cc9p9360dev.c
+++ b/arch/arm/mach-ns9xxx/mach-cc9p9360dev.c
@@ -32,7 +32,7 @@ static void __init mach_cc9p9360dev_init_machine(void)
32 board_a9m9750dev_init_machine(); 32 board_a9m9750dev_init_machine();
33} 33}
34 34
35MACHINE_START(CC9P9360DEV, "Connect Core 9P 9360 on an A9M9750 Devboard") 35MACHINE_START(CC9P9360DEV, "Digi ConnectCore 9P 9360 on an A9M9750 Devboard")
36 .map_io = mach_cc9p9360dev_map_io, 36 .map_io = mach_cc9p9360dev_map_io,
37 .init_irq = mach_cc9p9360dev_init_irq, 37 .init_irq = mach_cc9p9360dev_init_irq,
38 .init_machine = mach_cc9p9360dev_init_machine, 38 .init_machine = mach_cc9p9360dev_init_machine,
diff --git a/arch/arm/mach-omap1/board-h2.c b/arch/arm/mach-omap1/board-h2.c
index 6e113078f7ab..ad519390dd58 100644
--- a/arch/arm/mach-omap1/board-h2.c
+++ b/arch/arm/mach-omap1/board-h2.c
@@ -27,6 +27,7 @@
27#include <linux/mtd/nand.h> 27#include <linux/mtd/nand.h>
28#include <linux/mtd/partitions.h> 28#include <linux/mtd/partitions.h>
29#include <linux/input.h> 29#include <linux/input.h>
30#include <linux/workqueue.h>
30 31
31#include <asm/hardware.h> 32#include <asm/hardware.h>
32#include <asm/mach-types.h> 33#include <asm/mach-types.h>
diff --git a/arch/arm/mach-omap2/clock.c b/arch/arm/mach-omap2/clock.c
index 0de201c3d50b..5170481afeab 100644
--- a/arch/arm/mach-omap2/clock.c
+++ b/arch/arm/mach-omap2/clock.c
@@ -27,6 +27,7 @@
27 27
28#include <asm/arch/clock.h> 28#include <asm/arch/clock.h>
29#include <asm/arch/sram.h> 29#include <asm/arch/sram.h>
30#include <asm/div64.h>
30 31
31#include "prcm-regs.h" 32#include "prcm-regs.h"
32#include "memory.h" 33#include "memory.h"
diff --git a/arch/arm/mach-omap2/clock.h b/arch/arm/mach-omap2/clock.h
index 8816f5a33a28..162978fd5359 100644
--- a/arch/arm/mach-omap2/clock.h
+++ b/arch/arm/mach-omap2/clock.h
@@ -1013,7 +1013,8 @@ static struct clk dss2_fck = { /* Alt clk used in power management */
1013 .name = "dss2_fck", 1013 .name = "dss2_fck",
1014 .parent = &sys_ck, /* fixed at sys_ck or 48MHz */ 1014 .parent = &sys_ck, /* fixed at sys_ck or 48MHz */
1015 .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X | 1015 .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X |
1016 RATE_CKCTL | CM_CORE_SEL1 | RATE_FIXED, 1016 RATE_CKCTL | CM_CORE_SEL1 | RATE_FIXED |
1017 DELAYED_APP,
1017 .enable_reg = (void __iomem *)&CM_FCLKEN1_CORE, 1018 .enable_reg = (void __iomem *)&CM_FCLKEN1_CORE,
1018 .enable_bit = 1, 1019 .enable_bit = 1,
1019 .src_offset = 13, 1020 .src_offset = 13,
diff --git a/arch/arm/mach-pxa/tosa.c b/arch/arm/mach-pxa/tosa.c
index 7915a5a22865..72738771fb57 100644
--- a/arch/arm/mach-pxa/tosa.c
+++ b/arch/arm/mach-pxa/tosa.c
@@ -28,6 +28,7 @@
28#include <asm/hardware.h> 28#include <asm/hardware.h>
29#include <asm/irq.h> 29#include <asm/irq.h>
30#include <asm/system.h> 30#include <asm/system.h>
31#include <asm/arch/pxa-regs.h>
31#include <asm/arch/irda.h> 32#include <asm/arch/irda.h>
32#include <asm/arch/mmc.h> 33#include <asm/arch/mmc.h>
33#include <asm/arch/udc.h> 34#include <asm/arch/udc.h>
@@ -35,8 +36,6 @@
35#include <asm/mach/arch.h> 36#include <asm/mach/arch.h>
36#include <asm/mach/map.h> 37#include <asm/mach/map.h>
37#include <asm/mach/irq.h> 38#include <asm/mach/irq.h>
38
39#include <asm/arch/pxa-regs.h>
40#include <asm/arch/tosa.h> 39#include <asm/arch/tosa.h>
41 40
42#include <asm/hardware/scoop.h> 41#include <asm/hardware/scoop.h>
diff --git a/arch/arm/mach-sa1100/generic.c b/arch/arm/mach-sa1100/generic.c
index 192a5a26cf2b..9e13c8358ea7 100644
--- a/arch/arm/mach-sa1100/generic.c
+++ b/arch/arm/mach-sa1100/generic.c
@@ -27,6 +27,7 @@
27#include <asm/mach/map.h> 27#include <asm/mach/map.h>
28#include <asm/mach/flash.h> 28#include <asm/mach/flash.h>
29#include <asm/irq.h> 29#include <asm/irq.h>
30#include <asm/gpio.h>
30 31
31#include "generic.h" 32#include "generic.h"
32 33
@@ -153,7 +154,7 @@ int gpio_direction_input(unsigned gpio)
153 154
154EXPORT_SYMBOL(gpio_direction_input); 155EXPORT_SYMBOL(gpio_direction_input);
155 156
156int gpio_direction_output(unsigned gpio) 157int gpio_direction_output(unsigned gpio, int value)
157{ 158{
158 unsigned long flags; 159 unsigned long flags;
159 160
@@ -161,6 +162,7 @@ int gpio_direction_output(unsigned gpio)
161 return -EINVAL; 162 return -EINVAL;
162 163
163 local_irq_save(flags); 164 local_irq_save(flags);
165 gpio_set_value(gpio, value);
164 GPDR |= GPIO_GPIO(gpio); 166 GPDR |= GPIO_GPIO(gpio);
165 local_irq_restore(flags); 167 local_irq_restore(flags);
166 return 0; 168 return 0;
diff --git a/arch/avr32/mach-at32ap/pio.c b/arch/avr32/mach-at32ap/pio.c
index 9ba5654cde11..1eb99b814f5b 100644
--- a/arch/avr32/mach-at32ap/pio.c
+++ b/arch/avr32/mach-at32ap/pio.c
@@ -214,7 +214,7 @@ int gpio_direction_input(unsigned int gpio)
214} 214}
215EXPORT_SYMBOL(gpio_direction_input); 215EXPORT_SYMBOL(gpio_direction_input);
216 216
217int gpio_direction_output(unsigned int gpio) 217int gpio_direction_output(unsigned int gpio, int value)
218{ 218{
219 struct pio_device *pio; 219 struct pio_device *pio;
220 unsigned int pin; 220 unsigned int pin;
@@ -223,6 +223,8 @@ int gpio_direction_output(unsigned int gpio)
223 if (!pio) 223 if (!pio)
224 return -ENODEV; 224 return -ENODEV;
225 225
226 gpio_set_value(gpio, value);
227
226 pin = gpio & 0x1f; 228 pin = gpio & 0x1f;
227 pio_writel(pio, OER, 1 << pin); 229 pio_writel(pio, OER, 1 << pin);
228 230
diff --git a/arch/i386/Kconfig b/arch/i386/Kconfig
index 27e8453274e6..53d62373a524 100644
--- a/arch/i386/Kconfig
+++ b/arch/i386/Kconfig
@@ -220,7 +220,7 @@ config PARAVIRT
220 220
221config VMI 221config VMI
222 bool "VMI Paravirt-ops support" 222 bool "VMI Paravirt-ops support"
223 depends on PARAVIRT 223 depends on PARAVIRT && !COMPAT_VDSO
224 help 224 help
225 VMI provides a paravirtualized interface to the VMware ESX server 225 VMI provides a paravirtualized interface to the VMware ESX server
226 (it could be used by other hypervisors in theory too, but is not 226 (it could be used by other hypervisors in theory too, but is not
diff --git a/arch/i386/defconfig b/arch/i386/defconfig
index 5ae1e0bc8fd7..f4efd66e1ee5 100644
--- a/arch/i386/defconfig
+++ b/arch/i386/defconfig
@@ -1,10 +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.20-git8 3# Linux kernel version: 2.6.21-rc3
4# Tue Feb 13 11:25:18 2007 4# Wed Mar 7 15:29:47 2007
5# 5#
6CONFIG_X86_32=y 6CONFIG_X86_32=y
7CONFIG_GENERIC_TIME=y 7CONFIG_GENERIC_TIME=y
8CONFIG_CLOCKSOURCE_WATCHDOG=y
9CONFIG_GENERIC_CLOCKEVENTS=y
10CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
8CONFIG_LOCKDEP_SUPPORT=y 11CONFIG_LOCKDEP_SUPPORT=y
9CONFIG_STACKTRACE_SUPPORT=y 12CONFIG_STACKTRACE_SUPPORT=y
10CONFIG_SEMAPHORE_SLEEPERS=y 13CONFIG_SEMAPHORE_SLEEPERS=y
@@ -34,6 +37,7 @@ CONFIG_LOCALVERSION_AUTO=y
34CONFIG_SWAP=y 37CONFIG_SWAP=y
35CONFIG_SYSVIPC=y 38CONFIG_SYSVIPC=y
36# CONFIG_IPC_NS is not set 39# CONFIG_IPC_NS is not set
40CONFIG_SYSVIPC_SYSCTL=y
37CONFIG_POSIX_MQUEUE=y 41CONFIG_POSIX_MQUEUE=y
38# CONFIG_BSD_PROCESS_ACCT is not set 42# CONFIG_BSD_PROCESS_ACCT is not set
39# CONFIG_TASKSTATS is not set 43# CONFIG_TASKSTATS is not set
@@ -44,6 +48,7 @@ CONFIG_IKCONFIG_PROC=y
44# CONFIG_CPUSETS is not set 48# CONFIG_CPUSETS is not set
45CONFIG_SYSFS_DEPRECATED=y 49CONFIG_SYSFS_DEPRECATED=y
46# CONFIG_RELAY is not set 50# CONFIG_RELAY is not set
51CONFIG_BLK_DEV_INITRD=y
47CONFIG_INITRAMFS_SOURCE="" 52CONFIG_INITRAMFS_SOURCE=""
48CONFIG_CC_OPTIMIZE_FOR_SIZE=y 53CONFIG_CC_OPTIMIZE_FOR_SIZE=y
49CONFIG_SYSCTL=y 54CONFIG_SYSCTL=y
@@ -103,6 +108,9 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
103# 108#
104# Processor type and features 109# Processor type and features
105# 110#
111# CONFIG_TICK_ONESHOT is not set
112# CONFIG_NO_HZ is not set
113# CONFIG_HIGH_RES_TIMERS is not set
106CONFIG_SMP=y 114CONFIG_SMP=y
107# CONFIG_X86_PC is not set 115# CONFIG_X86_PC is not set
108# CONFIG_X86_ELAN is not set 116# CONFIG_X86_ELAN is not set
@@ -235,10 +243,8 @@ CONFIG_ACPI_PROCFS=y
235CONFIG_ACPI_AC=y 243CONFIG_ACPI_AC=y
236CONFIG_ACPI_BATTERY=y 244CONFIG_ACPI_BATTERY=y
237CONFIG_ACPI_BUTTON=y 245CONFIG_ACPI_BUTTON=y
238# CONFIG_ACPI_HOTKEY is not set
239CONFIG_ACPI_FAN=y 246CONFIG_ACPI_FAN=y
240# CONFIG_ACPI_DOCK is not set 247# CONFIG_ACPI_DOCK is not set
241# CONFIG_ACPI_BAY is not set
242CONFIG_ACPI_PROCESSOR=y 248CONFIG_ACPI_PROCESSOR=y
243CONFIG_ACPI_THERMAL=y 249CONFIG_ACPI_THERMAL=y
244# CONFIG_ACPI_ASUS is not set 250# CONFIG_ACPI_ASUS is not set
@@ -289,6 +295,7 @@ CONFIG_X86_POWERNOW_K8_ACPI=y
289# CONFIG_X86_CPUFREQ_NFORCE2 is not set 295# CONFIG_X86_CPUFREQ_NFORCE2 is not set
290# CONFIG_X86_LONGRUN is not set 296# CONFIG_X86_LONGRUN is not set
291# CONFIG_X86_LONGHAUL is not set 297# CONFIG_X86_LONGHAUL is not set
298# CONFIG_X86_E_POWERSAVER is not set
292 299
293# 300#
294# shared options 301# shared options
@@ -368,7 +375,7 @@ CONFIG_IP_PNP_DHCP=y
368# CONFIG_INET_ESP is not set 375# CONFIG_INET_ESP is not set
369# CONFIG_INET_IPCOMP is not set 376# CONFIG_INET_IPCOMP is not set
370# CONFIG_INET_XFRM_TUNNEL is not set 377# CONFIG_INET_XFRM_TUNNEL is not set
371# CONFIG_INET_TUNNEL is not set 378CONFIG_INET_TUNNEL=y
372CONFIG_INET_XFRM_MODE_TRANSPORT=y 379CONFIG_INET_XFRM_MODE_TRANSPORT=y
373CONFIG_INET_XFRM_MODE_TUNNEL=y 380CONFIG_INET_XFRM_MODE_TUNNEL=y
374# CONFIG_INET_XFRM_MODE_BEET is not set 381# CONFIG_INET_XFRM_MODE_BEET is not set
@@ -470,7 +477,13 @@ CONFIG_FW_LOADER=y
470# 477#
471# Plug and Play support 478# Plug and Play support
472# 479#
473# CONFIG_PNP is not set 480CONFIG_PNP=y
481# CONFIG_PNP_DEBUG is not set
482
483#
484# Protocols
485#
486CONFIG_PNPACPI=y
474 487
475# 488#
476# Block devices 489# Block devices
@@ -490,7 +503,6 @@ CONFIG_BLK_DEV_RAM=y
490CONFIG_BLK_DEV_RAM_COUNT=16 503CONFIG_BLK_DEV_RAM_COUNT=16
491CONFIG_BLK_DEV_RAM_SIZE=4096 504CONFIG_BLK_DEV_RAM_SIZE=4096
492CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 505CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
493CONFIG_BLK_DEV_INITRD=y
494# CONFIG_CDROM_PKTCDVD is not set 506# CONFIG_CDROM_PKTCDVD is not set
495# CONFIG_ATA_OVER_ETH is not set 507# CONFIG_ATA_OVER_ETH is not set
496 508
@@ -500,6 +512,7 @@ CONFIG_BLK_DEV_INITRD=y
500# CONFIG_IBM_ASM is not set 512# CONFIG_IBM_ASM is not set
501# CONFIG_SGI_IOC4 is not set 513# CONFIG_SGI_IOC4 is not set
502# CONFIG_TIFM_CORE is not set 514# CONFIG_TIFM_CORE is not set
515# CONFIG_SONY_LAPTOP is not set
503 516
504# 517#
505# ATA/ATAPI/MFM/RLL support 518# ATA/ATAPI/MFM/RLL support
@@ -526,6 +539,7 @@ CONFIG_BLK_DEV_IDEACPI=y
526# 539#
527CONFIG_IDE_GENERIC=y 540CONFIG_IDE_GENERIC=y
528# CONFIG_BLK_DEV_CMD640 is not set 541# CONFIG_BLK_DEV_CMD640 is not set
542# CONFIG_BLK_DEV_IDEPNP is not set
529CONFIG_BLK_DEV_IDEPCI=y 543CONFIG_BLK_DEV_IDEPCI=y
530# CONFIG_IDEPCI_SHARE_IRQ is not set 544# CONFIG_IDEPCI_SHARE_IRQ is not set
531# CONFIG_BLK_DEV_OFFBOARD is not set 545# CONFIG_BLK_DEV_OFFBOARD is not set
@@ -679,6 +693,7 @@ CONFIG_SATA_VIA=y
679# CONFIG_SATA_VITESSE is not set 693# CONFIG_SATA_VITESSE is not set
680# CONFIG_SATA_INIC162X is not set 694# CONFIG_SATA_INIC162X is not set
681CONFIG_SATA_INTEL_COMBINED=y 695CONFIG_SATA_INTEL_COMBINED=y
696CONFIG_SATA_ACPI=y
682# CONFIG_PATA_ALI is not set 697# CONFIG_PATA_ALI is not set
683# CONFIG_PATA_AMD is not set 698# CONFIG_PATA_AMD is not set
684# CONFIG_PATA_ARTOP is not set 699# CONFIG_PATA_ARTOP is not set
@@ -786,6 +801,7 @@ CONFIG_NETDEVICES=y
786# CONFIG_BONDING is not set 801# CONFIG_BONDING is not set
787# CONFIG_EQUALIZER is not set 802# CONFIG_EQUALIZER is not set
788# CONFIG_TUN is not set 803# CONFIG_TUN is not set
804# CONFIG_NET_SB1000 is not set
789 805
790# 806#
791# ARCnet devices 807# ARCnet devices
@@ -979,6 +995,7 @@ CONFIG_HW_CONSOLE=y
979CONFIG_SERIAL_8250=y 995CONFIG_SERIAL_8250=y
980CONFIG_SERIAL_8250_CONSOLE=y 996CONFIG_SERIAL_8250_CONSOLE=y
981CONFIG_SERIAL_8250_PCI=y 997CONFIG_SERIAL_8250_PCI=y
998CONFIG_SERIAL_8250_PNP=y
982CONFIG_SERIAL_8250_NR_UARTS=4 999CONFIG_SERIAL_8250_NR_UARTS=4
983CONFIG_SERIAL_8250_RUNTIME_UARTS=4 1000CONFIG_SERIAL_8250_RUNTIME_UARTS=4
984# CONFIG_SERIAL_8250_EXTENDED is not set 1001# CONFIG_SERIAL_8250_EXTENDED is not set
@@ -1065,6 +1082,11 @@ CONFIG_HANGCHECK_TIMER=y
1065# CONFIG_HWMON_VID is not set 1082# CONFIG_HWMON_VID is not set
1066 1083
1067# 1084#
1085# Multifunction device drivers
1086#
1087# CONFIG_MFD_SM501 is not set
1088
1089#
1068# Multimedia devices 1090# Multimedia devices
1069# 1091#
1070# CONFIG_VIDEO_DEV is not set 1092# CONFIG_VIDEO_DEV is not set
@@ -1078,7 +1100,7 @@ CONFIG_HANGCHECK_TIMER=y
1078# 1100#
1079# Graphics support 1101# Graphics support
1080# 1102#
1081CONFIG_FIRMWARE_EDID=y 1103# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
1082# CONFIG_FB is not set 1104# CONFIG_FB is not set
1083 1105
1084# 1106#
@@ -1089,7 +1111,6 @@ CONFIG_VGACON_SOFT_SCROLLBACK=y
1089CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=128 1111CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=128
1090CONFIG_VIDEO_SELECT=y 1112CONFIG_VIDEO_SELECT=y
1091CONFIG_DUMMY_CONSOLE=y 1113CONFIG_DUMMY_CONSOLE=y
1092# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
1093 1114
1094# 1115#
1095# Sound 1116# Sound
@@ -1238,6 +1259,7 @@ CONFIG_USB_MON=y
1238# CONFIG_USB_RIO500 is not set 1259# CONFIG_USB_RIO500 is not set
1239# CONFIG_USB_LEGOTOWER is not set 1260# CONFIG_USB_LEGOTOWER is not set
1240# CONFIG_USB_LCD is not set 1261# CONFIG_USB_LCD is not set
1262# CONFIG_USB_BERRY_CHARGE is not set
1241# CONFIG_USB_LED is not set 1263# CONFIG_USB_LED is not set
1242# CONFIG_USB_CYPRESS_CY7C63 is not set 1264# CONFIG_USB_CYPRESS_CY7C63 is not set
1243# CONFIG_USB_CYTHERM is not set 1265# CONFIG_USB_CYTHERM is not set
@@ -1248,6 +1270,7 @@ CONFIG_USB_MON=y
1248# CONFIG_USB_SISUSBVGA is not set 1270# CONFIG_USB_SISUSBVGA is not set
1249# CONFIG_USB_LD is not set 1271# CONFIG_USB_LD is not set
1250# CONFIG_USB_TRANCEVIBRATOR is not set 1272# CONFIG_USB_TRANCEVIBRATOR is not set
1273# CONFIG_USB_IOWARRIOR is not set
1251# CONFIG_USB_TEST is not set 1274# CONFIG_USB_TEST is not set
1252 1275
1253# 1276#
@@ -1506,6 +1529,7 @@ CONFIG_DEBUG_KERNEL=y
1506CONFIG_LOG_BUF_SHIFT=18 1529CONFIG_LOG_BUF_SHIFT=18
1507CONFIG_DETECT_SOFTLOCKUP=y 1530CONFIG_DETECT_SOFTLOCKUP=y
1508# CONFIG_SCHEDSTATS is not set 1531# CONFIG_SCHEDSTATS is not set
1532# CONFIG_TIMER_STATS is not set
1509# CONFIG_DEBUG_SLAB is not set 1533# CONFIG_DEBUG_SLAB is not set
1510# CONFIG_DEBUG_RT_MUTEXES is not set 1534# CONFIG_DEBUG_RT_MUTEXES is not set
1511# CONFIG_RT_MUTEX_TESTER is not set 1535# CONFIG_RT_MUTEX_TESTER is not set
@@ -1525,6 +1549,7 @@ CONFIG_DEBUG_BUGVERBOSE=y
1525# CONFIG_FORCED_INLINING is not set 1549# CONFIG_FORCED_INLINING is not set
1526# CONFIG_RCU_TORTURE_TEST is not set 1550# CONFIG_RCU_TORTURE_TEST is not set
1527# CONFIG_LKDTM is not set 1551# CONFIG_LKDTM is not set
1552# CONFIG_FAULT_INJECTION is not set
1528CONFIG_EARLY_PRINTK=y 1553CONFIG_EARLY_PRINTK=y
1529CONFIG_DEBUG_STACKOVERFLOW=y 1554CONFIG_DEBUG_STACKOVERFLOW=y
1530# CONFIG_DEBUG_STACK_USAGE is not set 1555# CONFIG_DEBUG_STACK_USAGE is not set
diff --git a/arch/i386/kernel/apic.c b/arch/i386/kernel/apic.c
index 2383bcf18c5d..5cff7970911e 100644
--- a/arch/i386/kernel/apic.c
+++ b/arch/i386/kernel/apic.c
@@ -338,6 +338,7 @@ void __init setup_boot_APIC_clock(void)
338 void (*real_handler)(struct clock_event_device *dev); 338 void (*real_handler)(struct clock_event_device *dev);
339 unsigned long deltaj; 339 unsigned long deltaj;
340 long delta, deltapm; 340 long delta, deltapm;
341 int pm_referenced = 0;
341 342
342 apic_printk(APIC_VERBOSE, "Using local APIC timer interrupts.\n" 343 apic_printk(APIC_VERBOSE, "Using local APIC timer interrupts.\n"
343 "calibrating APIC timer ...\n"); 344 "calibrating APIC timer ...\n");
@@ -357,7 +358,8 @@ void __init setup_boot_APIC_clock(void)
357 /* Let the interrupts run */ 358 /* Let the interrupts run */
358 local_irq_enable(); 359 local_irq_enable();
359 360
360 while(lapic_cal_loops <= LAPIC_CAL_LOOPS); 361 while (lapic_cal_loops <= LAPIC_CAL_LOOPS)
362 cpu_relax();
361 363
362 local_irq_disable(); 364 local_irq_disable();
363 365
@@ -394,6 +396,7 @@ void __init setup_boot_APIC_clock(void)
394 "%lu (%ld)\n", (unsigned long) res, delta); 396 "%lu (%ld)\n", (unsigned long) res, delta);
395 delta = (long) res; 397 delta = (long) res;
396 } 398 }
399 pm_referenced = 1;
397 } 400 }
398 401
399 /* Calculate the scaled math multiplication factor */ 402 /* Calculate the scaled math multiplication factor */
@@ -423,68 +426,41 @@ void __init setup_boot_APIC_clock(void)
423 calibration_result / (1000000 / HZ), 426 calibration_result / (1000000 / HZ),
424 calibration_result % (1000000 / HZ)); 427 calibration_result % (1000000 / HZ));
425 428
426
427 apic_printk(APIC_VERBOSE, "... verify APIC timer\n");
428
429 /*
430 * Setup the apic timer manually
431 */
432 local_apic_timer_verify_ok = 1; 429 local_apic_timer_verify_ok = 1;
433 levt->event_handler = lapic_cal_handler;
434 lapic_timer_setup(CLOCK_EVT_MODE_PERIODIC, levt);
435 lapic_cal_loops = -1;
436 430
437 /* Let the interrupts run */ 431 /* We trust the pm timer based calibration */
438 local_irq_enable(); 432 if (!pm_referenced) {
433 apic_printk(APIC_VERBOSE, "... verify APIC timer\n");
439 434
440 while(lapic_cal_loops <= LAPIC_CAL_LOOPS); 435 /*
436 * Setup the apic timer manually
437 */
438 levt->event_handler = lapic_cal_handler;
439 lapic_timer_setup(CLOCK_EVT_MODE_PERIODIC, levt);
440 lapic_cal_loops = -1;
441 441
442 local_irq_disable(); 442 /* Let the interrupts run */
443 local_irq_enable();
443 444
444 /* Stop the lapic timer */ 445 while(lapic_cal_loops <= LAPIC_CAL_LOOPS)
445 lapic_timer_setup(CLOCK_EVT_MODE_SHUTDOWN, levt); 446 cpu_relax();
446 447
447 local_irq_enable(); 448 local_irq_disable();
448 449
449 /* Jiffies delta */ 450 /* Stop the lapic timer */
450 deltaj = lapic_cal_j2 - lapic_cal_j1; 451 lapic_timer_setup(CLOCK_EVT_MODE_SHUTDOWN, levt);
451 apic_printk(APIC_VERBOSE, "... jiffies delta = %lu\n", deltaj);
452 452
453 /* Check, if the PM timer is available */ 453 local_irq_enable();
454 deltapm = lapic_cal_pm2 - lapic_cal_pm1;
455 apic_printk(APIC_VERBOSE, "... PM timer delta = %ld\n", deltapm);
456 454
457 local_apic_timer_verify_ok = 0; 455 /* Jiffies delta */
456 deltaj = lapic_cal_j2 - lapic_cal_j1;
457 apic_printk(APIC_VERBOSE, "... jiffies delta = %lu\n", deltaj);
458 458
459 if (deltapm) {
460 if (deltapm > (pm_100ms - pm_thresh) &&
461 deltapm < (pm_100ms + pm_thresh)) {
462 apic_printk(APIC_VERBOSE, "... PM timer result ok\n");
463 /* Check, if the jiffies result is consistent */
464 if (deltaj < LAPIC_CAL_LOOPS-2 ||
465 deltaj > LAPIC_CAL_LOOPS+2) {
466 /*
467 * Not sure, what we can do about this one.
468 * When high resultion timers are active
469 * and the lapic timer does not stop in C3
470 * we are fine. Otherwise more trouble might
471 * be waiting. -- tglx
472 */
473 printk(KERN_WARNING "Global event device %s "
474 "has wrong frequency "
475 "(%lu ticks instead of %d)\n",
476 global_clock_event->name, deltaj,
477 LAPIC_CAL_LOOPS);
478 }
479 local_apic_timer_verify_ok = 1;
480 }
481 } else {
482 /* Check, if the jiffies result is consistent */ 459 /* Check, if the jiffies result is consistent */
483 if (deltaj >= LAPIC_CAL_LOOPS-2 && 460 if (deltaj >= LAPIC_CAL_LOOPS-2 && deltaj <= LAPIC_CAL_LOOPS+2)
484 deltaj <= LAPIC_CAL_LOOPS+2) {
485 apic_printk(APIC_VERBOSE, "... jiffies result ok\n"); 461 apic_printk(APIC_VERBOSE, "... jiffies result ok\n");
486 local_apic_timer_verify_ok = 1; 462 else
487 } 463 local_apic_timer_verify_ok = 0;
488 } 464 }
489 465
490 if (!local_apic_timer_verify_ok) { 466 if (!local_apic_timer_verify_ok) {
diff --git a/arch/i386/kernel/i386_ksyms.c b/arch/i386/kernel/i386_ksyms.c
index e3d4b73bfdb0..4afe26e86260 100644
--- a/arch/i386/kernel/i386_ksyms.c
+++ b/arch/i386/kernel/i386_ksyms.c
@@ -28,3 +28,5 @@ EXPORT_SYMBOL(__read_lock_failed);
28#endif 28#endif
29 29
30EXPORT_SYMBOL(csum_partial); 30EXPORT_SYMBOL(csum_partial);
31
32EXPORT_SYMBOL(_proxy_pda);
diff --git a/arch/i386/kernel/nmi.c b/arch/i386/kernel/nmi.c
index 821df34d2b3a..14702427b104 100644
--- a/arch/i386/kernel/nmi.c
+++ b/arch/i386/kernel/nmi.c
@@ -245,14 +245,6 @@ static int __init check_nmi_watchdog(void)
245 unsigned int *prev_nmi_count; 245 unsigned int *prev_nmi_count;
246 int cpu; 246 int cpu;
247 247
248 /* Enable NMI watchdog for newer systems.
249 Probably safe on most older systems too, but let's be careful.
250 IBM ThinkPads use INT10 inside SMM and that allows early NMI inside SMM
251 which hangs the system. Disable watchdog for all thinkpads */
252 if (nmi_watchdog == NMI_DEFAULT && dmi_get_year(DMI_BIOS_DATE) >= 2004 &&
253 !dmi_name_in_vendors("ThinkPad"))
254 nmi_watchdog = NMI_LOCAL_APIC;
255
256 if ((nmi_watchdog == NMI_NONE) || (nmi_watchdog == NMI_DEFAULT)) 248 if ((nmi_watchdog == NMI_NONE) || (nmi_watchdog == NMI_DEFAULT))
257 return 0; 249 return 0;
258 250
diff --git a/arch/i386/kernel/tsc.c b/arch/i386/kernel/tsc.c
index 602660df455c..0e65f7ab63a2 100644
--- a/arch/i386/kernel/tsc.c
+++ b/arch/i386/kernel/tsc.c
@@ -105,7 +105,7 @@ unsigned long long sched_clock(void)
105 /* 105 /*
106 * Fall back to jiffies if there's no TSC available: 106 * Fall back to jiffies if there's no TSC available:
107 */ 107 */
108 if (unlikely(tsc_disable)) 108 if (tsc_unstable || unlikely(tsc_disable))
109 /* No locking but a rare wrong value is not a big deal: */ 109 /* No locking but a rare wrong value is not a big deal: */
110 return (jiffies_64 - INITIAL_JIFFIES) * (1000000000 / HZ); 110 return (jiffies_64 - INITIAL_JIFFIES) * (1000000000 / HZ);
111 111
diff --git a/arch/i386/kernel/vmi.c b/arch/i386/kernel/vmi.c
index fbf45fa08320..fb07a1aad225 100644
--- a/arch/i386/kernel/vmi.c
+++ b/arch/i386/kernel/vmi.c
@@ -23,7 +23,6 @@
23 */ 23 */
24 24
25#include <linux/module.h> 25#include <linux/module.h>
26#include <linux/license.h>
27#include <linux/cpu.h> 26#include <linux/cpu.h>
28#include <linux/bootmem.h> 27#include <linux/bootmem.h>
29#include <linux/mm.h> 28#include <linux/mm.h>
@@ -48,7 +47,6 @@ typedef u64 __attribute__((regparm(2))) (VROMLONGFUNC)(int);
48 (((VROMLONGFUNC *)(rom->func)) (arg)) 47 (((VROMLONGFUNC *)(rom->func)) (arg))
49 48
50static struct vrom_header *vmi_rom; 49static struct vrom_header *vmi_rom;
51static int license_gplok;
52static int disable_pge; 50static int disable_pge;
53static int disable_pse; 51static int disable_pse;
54static int disable_sep; 52static int disable_sep;
@@ -629,13 +627,14 @@ static inline int __init check_vmi_rom(struct vrom_header *rom)
629 rom->api_version_maj, rom->api_version_min, 627 rom->api_version_maj, rom->api_version_min,
630 pci->rom_version_maj, pci->rom_version_min); 628 pci->rom_version_maj, pci->rom_version_min);
631 629
632 license_gplok = license_is_gpl_compatible(license); 630 /* Don't allow BSD/MIT here for now because we don't want to end up
633 if (!license_gplok) { 631 with any binary only shim layers */
634 printk(KERN_WARNING "VMI: ROM license '%s' taints kernel... " 632 if (strcmp(license, "GPL") && strcmp(license, "GPL v2")) {
635 "inlining disabled\n", 633 printk(KERN_WARNING "VMI: Non GPL license `%s' found for ROM. Not used.\n",
636 license); 634 license);
637 add_taint(TAINT_PROPRIETARY_MODULE); 635 return 0;
638 } 636 }
637
639 return 1; 638 return 1;
640} 639}
641 640
diff --git a/arch/ia64/sn/kernel/io_init.c b/arch/ia64/sn/kernel/io_init.c
index 600be3ebae05..6b10e5d28488 100644
--- a/arch/ia64/sn/kernel/io_init.c
+++ b/arch/ia64/sn/kernel/io_init.c
@@ -247,10 +247,18 @@ sn_io_slot_fixup(struct pci_dev *dev)
247 addr = ((addr << 4) >> 4) | __IA64_UNCACHED_OFFSET; 247 addr = ((addr << 4) >> 4) | __IA64_UNCACHED_OFFSET;
248 dev->resource[idx].start = addr; 248 dev->resource[idx].start = addr;
249 dev->resource[idx].end = addr + size; 249 dev->resource[idx].end = addr + size;
250
251 /*
252 * if it's already in the device structure, remove it before
253 * inserting
254 */
255 if (dev->resource[idx].parent && dev->resource[idx].parent->child)
256 release_resource(&dev->resource[idx]);
257
250 if (dev->resource[idx].flags & IORESOURCE_IO) 258 if (dev->resource[idx].flags & IORESOURCE_IO)
251 dev->resource[idx].parent = &ioport_resource; 259 insert_resource(&ioport_resource, &dev->resource[idx]);
252 else 260 else
253 dev->resource[idx].parent = &iomem_resource; 261 insert_resource(&iomem_resource, &dev->resource[idx]);
254 /* If ROM, mark as shadowed in PROM */ 262 /* If ROM, mark as shadowed in PROM */
255 if (idx == PCI_ROM_RESOURCE) 263 if (idx == PCI_ROM_RESOURCE)
256 dev->resource[idx].flags |= IORESOURCE_ROM_BIOS_COPY; 264 dev->resource[idx].flags |= IORESOURCE_ROM_BIOS_COPY;
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
index a1cd84f9b3bc..5f29018a6533 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
@@ -250,7 +250,7 @@ config LASAT
250 select R5000_CPU_SCACHE 250 select R5000_CPU_SCACHE
251 select SYS_HAS_CPU_R5000 251 select SYS_HAS_CPU_R5000
252 select SYS_SUPPORTS_32BIT_KERNEL 252 select SYS_SUPPORTS_32BIT_KERNEL
253 select SYS_SUPPORTS_64BIT_KERNEL if EXPERIMENTAL 253 select SYS_SUPPORTS_64BIT_KERNEL if BROKEN
254 select SYS_SUPPORTS_LITTLE_ENDIAN 254 select SYS_SUPPORTS_LITTLE_ENDIAN
255 select GENERIC_HARDIRQS_NO__DO_IRQ 255 select GENERIC_HARDIRQS_NO__DO_IRQ
256 256
@@ -470,11 +470,6 @@ config MIPS_XXS1500
470 select SOC_AU1500 470 select SOC_AU1500
471 select SYS_SUPPORTS_LITTLE_ENDIAN 471 select SYS_SUPPORTS_LITTLE_ENDIAN
472 472
473config PNX8550_V2PCI
474 bool "Philips PNX8550 based Viper2-PCI board"
475 select PNX8550
476 select SYS_SUPPORTS_LITTLE_ENDIAN
477
478config PNX8550_JBS 473config PNX8550_JBS
479 bool "Philips PNX8550 based JBS board" 474 bool "Philips PNX8550 based JBS board"
480 select PNX8550 475 select PNX8550
@@ -1564,6 +1559,7 @@ config MIPS_MT_SMP
1564 select CPU_MIPSR2_IRQ_VI 1559 select CPU_MIPSR2_IRQ_VI
1565 select CPU_MIPSR2_SRS 1560 select CPU_MIPSR2_SRS
1566 select MIPS_MT 1561 select MIPS_MT
1562 select NR_CPUS_DEFAULT_2
1567 select SMP 1563 select SMP
1568 select SYS_SUPPORTS_SMP 1564 select SYS_SUPPORTS_SMP
1569 help 1565 help
@@ -1578,7 +1574,6 @@ config MIPS_MT_SMTC
1578 select CPU_MIPSR2_IRQ_VI 1574 select CPU_MIPSR2_IRQ_VI
1579 select CPU_MIPSR2_SRS 1575 select CPU_MIPSR2_SRS
1580 select MIPS_MT 1576 select MIPS_MT
1581 select NR_CPUS_DEFAULT_2
1582 select NR_CPUS_DEFAULT_8 1577 select NR_CPUS_DEFAULT_8
1583 select SMP 1578 select SMP
1584 select SYS_SUPPORTS_SMP 1579 select SYS_SUPPORTS_SMP
diff --git a/arch/mips/configs/atlas_defconfig b/arch/mips/configs/atlas_defconfig
index 458894933a4c..39e251300c64 100644
--- a/arch/mips/configs/atlas_defconfig
+++ b/arch/mips/configs/atlas_defconfig
@@ -39,7 +39,6 @@ CONFIG_MIPS_ATLAS=y
39# CONFIG_MOMENCO_OCELOT_C is not set 39# CONFIG_MOMENCO_OCELOT_C is not set
40# CONFIG_MOMENCO_OCELOT_G is not set 40# CONFIG_MOMENCO_OCELOT_G is not set
41# CONFIG_MIPS_XXS1500 is not set 41# CONFIG_MIPS_XXS1500 is not set
42# CONFIG_PNX8550_V2PCI is not set
43# CONFIG_PNX8550_JBS is not set 42# CONFIG_PNX8550_JBS is not set
44# CONFIG_PNX8550_STB810 is not set 43# CONFIG_PNX8550_STB810 is not set
45# CONFIG_DDB5477 is not set 44# CONFIG_DDB5477 is not set
diff --git a/arch/mips/configs/bigsur_defconfig b/arch/mips/configs/bigsur_defconfig
index aa05e294ea62..4713a13211ce 100644
--- a/arch/mips/configs/bigsur_defconfig
+++ b/arch/mips/configs/bigsur_defconfig
@@ -39,7 +39,6 @@ CONFIG_ZONE_DMA=y
39# CONFIG_MOMENCO_OCELOT_C is not set 39# CONFIG_MOMENCO_OCELOT_C is not set
40# CONFIG_MOMENCO_OCELOT_G is not set 40# CONFIG_MOMENCO_OCELOT_G is not set
41# CONFIG_MIPS_XXS1500 is not set 41# CONFIG_MIPS_XXS1500 is not set
42# CONFIG_PNX8550_V2PCI is not set
43# CONFIG_PNX8550_JBS is not set 42# CONFIG_PNX8550_JBS is not set
44# CONFIG_PNX8550_STB810 is not set 43# CONFIG_PNX8550_STB810 is not set
45# CONFIG_DDB5477 is not set 44# CONFIG_DDB5477 is not set
diff --git a/arch/mips/configs/capcella_defconfig b/arch/mips/configs/capcella_defconfig
index b2594fa556f3..5e7ae56b1f3c 100644
--- a/arch/mips/configs/capcella_defconfig
+++ b/arch/mips/configs/capcella_defconfig
@@ -39,7 +39,6 @@ CONFIG_ZONE_DMA=y
39# CONFIG_MOMENCO_OCELOT_C is not set 39# CONFIG_MOMENCO_OCELOT_C is not set
40# CONFIG_MOMENCO_OCELOT_G is not set 40# CONFIG_MOMENCO_OCELOT_G is not set
41# CONFIG_MIPS_XXS1500 is not set 41# CONFIG_MIPS_XXS1500 is not set
42# CONFIG_PNX8550_V2PCI is not set
43# CONFIG_PNX8550_JBS is not set 42# CONFIG_PNX8550_JBS is not set
44# CONFIG_PNX8550_STB810 is not set 43# CONFIG_PNX8550_STB810 is not set
45# CONFIG_DDB5477 is not set 44# CONFIG_DDB5477 is not set
diff --git a/arch/mips/configs/cobalt_defconfig b/arch/mips/configs/cobalt_defconfig
index 9090a7aba6c1..ba593b510b76 100644
--- a/arch/mips/configs/cobalt_defconfig
+++ b/arch/mips/configs/cobalt_defconfig
@@ -39,7 +39,6 @@ CONFIG_MIPS_COBALT=y
39# CONFIG_MOMENCO_OCELOT_C is not set 39# CONFIG_MOMENCO_OCELOT_C is not set
40# CONFIG_MOMENCO_OCELOT_G is not set 40# CONFIG_MOMENCO_OCELOT_G is not set
41# CONFIG_MIPS_XXS1500 is not set 41# CONFIG_MIPS_XXS1500 is not set
42# CONFIG_PNX8550_V2PCI is not set
43# CONFIG_PNX8550_JBS is not set 42# CONFIG_PNX8550_JBS is not set
44# CONFIG_PNX8550_STB810 is not set 43# CONFIG_PNX8550_STB810 is not set
45# CONFIG_DDB5477 is not set 44# CONFIG_DDB5477 is not set
diff --git a/arch/mips/configs/db1000_defconfig b/arch/mips/configs/db1000_defconfig
index 4cb8cf4255a2..0db6a8b37301 100644
--- a/arch/mips/configs/db1000_defconfig
+++ b/arch/mips/configs/db1000_defconfig
@@ -39,7 +39,6 @@ CONFIG_MIPS_DB1000=y
39# CONFIG_MOMENCO_OCELOT_C is not set 39# CONFIG_MOMENCO_OCELOT_C is not set
40# CONFIG_MOMENCO_OCELOT_G is not set 40# CONFIG_MOMENCO_OCELOT_G is not set
41# CONFIG_MIPS_XXS1500 is not set 41# CONFIG_MIPS_XXS1500 is not set
42# CONFIG_PNX8550_V2PCI is not set
43# CONFIG_PNX8550_JBS is not set 42# CONFIG_PNX8550_JBS is not set
44# CONFIG_PNX8550_STB810 is not set 43# CONFIG_PNX8550_STB810 is not set
45# CONFIG_DDB5477 is not set 44# CONFIG_DDB5477 is not set
diff --git a/arch/mips/configs/db1100_defconfig b/arch/mips/configs/db1100_defconfig
index d86dedf27fc4..162add97c5ef 100644
--- a/arch/mips/configs/db1100_defconfig
+++ b/arch/mips/configs/db1100_defconfig
@@ -39,7 +39,6 @@ CONFIG_MIPS_DB1100=y
39# CONFIG_MOMENCO_OCELOT_C is not set 39# CONFIG_MOMENCO_OCELOT_C is not set
40# CONFIG_MOMENCO_OCELOT_G is not set 40# CONFIG_MOMENCO_OCELOT_G is not set
41# CONFIG_MIPS_XXS1500 is not set 41# CONFIG_MIPS_XXS1500 is not set
42# CONFIG_PNX8550_V2PCI is not set
43# CONFIG_PNX8550_JBS is not set 42# CONFIG_PNX8550_JBS is not set
44# CONFIG_PNX8550_STB810 is not set 43# CONFIG_PNX8550_STB810 is not set
45# CONFIG_DDB5477 is not set 44# CONFIG_DDB5477 is not set
diff --git a/arch/mips/configs/db1200_defconfig b/arch/mips/configs/db1200_defconfig
index c24b6008345e..82801ec43e6a 100644
--- a/arch/mips/configs/db1200_defconfig
+++ b/arch/mips/configs/db1200_defconfig
@@ -39,7 +39,6 @@ CONFIG_MIPS_DB1200=y
39# CONFIG_MOMENCO_OCELOT_C is not set 39# CONFIG_MOMENCO_OCELOT_C is not set
40# CONFIG_MOMENCO_OCELOT_G is not set 40# CONFIG_MOMENCO_OCELOT_G is not set
41# CONFIG_MIPS_XXS1500 is not set 41# CONFIG_MIPS_XXS1500 is not set
42# CONFIG_PNX8550_V2PCI is not set
43# CONFIG_PNX8550_JBS is not set 42# CONFIG_PNX8550_JBS is not set
44# CONFIG_PNX8550_STB810 is not set 43# CONFIG_PNX8550_STB810 is not set
45# CONFIG_DDB5477 is not set 44# CONFIG_DDB5477 is not set
diff --git a/arch/mips/configs/db1500_defconfig b/arch/mips/configs/db1500_defconfig
index baad2c5223ba..545f23094e13 100644
--- a/arch/mips/configs/db1500_defconfig
+++ b/arch/mips/configs/db1500_defconfig
@@ -39,7 +39,6 @@ CONFIG_MIPS_DB1500=y
39# CONFIG_MOMENCO_OCELOT_C is not set 39# CONFIG_MOMENCO_OCELOT_C is not set
40# CONFIG_MOMENCO_OCELOT_G is not set 40# CONFIG_MOMENCO_OCELOT_G is not set
41# CONFIG_MIPS_XXS1500 is not set 41# CONFIG_MIPS_XXS1500 is not set
42# CONFIG_PNX8550_V2PCI is not set
43# CONFIG_PNX8550_JBS is not set 42# CONFIG_PNX8550_JBS is not set
44# CONFIG_PNX8550_STB810 is not set 43# CONFIG_PNX8550_STB810 is not set
45# CONFIG_DDB5477 is not set 44# CONFIG_DDB5477 is not set
diff --git a/arch/mips/configs/db1550_defconfig b/arch/mips/configs/db1550_defconfig
index c29fdab0423a..5bd3b4328e57 100644
--- a/arch/mips/configs/db1550_defconfig
+++ b/arch/mips/configs/db1550_defconfig
@@ -39,7 +39,6 @@ CONFIG_MIPS_DB1550=y
39# CONFIG_MOMENCO_OCELOT_C is not set 39# CONFIG_MOMENCO_OCELOT_C is not set
40# CONFIG_MOMENCO_OCELOT_G is not set 40# CONFIG_MOMENCO_OCELOT_G is not set
41# CONFIG_MIPS_XXS1500 is not set 41# CONFIG_MIPS_XXS1500 is not set
42# CONFIG_PNX8550_V2PCI is not set
43# CONFIG_PNX8550_JBS is not set 42# CONFIG_PNX8550_JBS is not set
44# CONFIG_PNX8550_STB810 is not set 43# CONFIG_PNX8550_STB810 is not set
45# CONFIG_DDB5477 is not set 44# CONFIG_DDB5477 is not set
diff --git a/arch/mips/configs/ddb5477_defconfig b/arch/mips/configs/ddb5477_defconfig
index f4b316d2cd70..5b502a2013fb 100644
--- a/arch/mips/configs/ddb5477_defconfig
+++ b/arch/mips/configs/ddb5477_defconfig
@@ -39,7 +39,6 @@ CONFIG_ZONE_DMA=y
39# CONFIG_MOMENCO_OCELOT_C is not set 39# CONFIG_MOMENCO_OCELOT_C is not set
40# CONFIG_MOMENCO_OCELOT_G is not set 40# CONFIG_MOMENCO_OCELOT_G is not set
41# CONFIG_MIPS_XXS1500 is not set 41# CONFIG_MIPS_XXS1500 is not set
42# CONFIG_PNX8550_V2PCI is not set
43# CONFIG_PNX8550_JBS is not set 42# CONFIG_PNX8550_JBS is not set
44# CONFIG_PNX8550_STB810 is not set 43# CONFIG_PNX8550_STB810 is not set
45CONFIG_DDB5477=y 44CONFIG_DDB5477=y
diff --git a/arch/mips/configs/decstation_defconfig b/arch/mips/configs/decstation_defconfig
index 9c38e5c77761..4bbdab078ff1 100644
--- a/arch/mips/configs/decstation_defconfig
+++ b/arch/mips/configs/decstation_defconfig
@@ -39,7 +39,6 @@ CONFIG_MACH_DECSTATION=y
39# CONFIG_MOMENCO_OCELOT_C is not set 39# CONFIG_MOMENCO_OCELOT_C is not set
40# CONFIG_MOMENCO_OCELOT_G is not set 40# CONFIG_MOMENCO_OCELOT_G is not set
41# CONFIG_MIPS_XXS1500 is not set 41# CONFIG_MIPS_XXS1500 is not set
42# CONFIG_PNX8550_V2PCI is not set
43# CONFIG_PNX8550_JBS is not set 42# CONFIG_PNX8550_JBS is not set
44# CONFIG_PNX8550_STB810 is not set 43# CONFIG_PNX8550_STB810 is not set
45# CONFIG_DDB5477 is not set 44# CONFIG_DDB5477 is not set
diff --git a/arch/mips/configs/e55_defconfig b/arch/mips/configs/e55_defconfig
index 922af379aa41..b5714a6a5398 100644
--- a/arch/mips/configs/e55_defconfig
+++ b/arch/mips/configs/e55_defconfig
@@ -39,7 +39,6 @@ CONFIG_ZONE_DMA=y
39# CONFIG_MOMENCO_OCELOT_C is not set 39# CONFIG_MOMENCO_OCELOT_C is not set
40# CONFIG_MOMENCO_OCELOT_G is not set 40# CONFIG_MOMENCO_OCELOT_G is not set
41# CONFIG_MIPS_XXS1500 is not set 41# CONFIG_MIPS_XXS1500 is not set
42# CONFIG_PNX8550_V2PCI is not set
43# CONFIG_PNX8550_JBS is not set 42# CONFIG_PNX8550_JBS is not set
44# CONFIG_PNX8550_STB810 is not set 43# CONFIG_PNX8550_STB810 is not set
45# CONFIG_DDB5477 is not set 44# CONFIG_DDB5477 is not set
diff --git a/arch/mips/configs/emma2rh_defconfig b/arch/mips/configs/emma2rh_defconfig
index c0db8f14713d..3044579f171a 100644
--- a/arch/mips/configs/emma2rh_defconfig
+++ b/arch/mips/configs/emma2rh_defconfig
@@ -39,7 +39,6 @@ CONFIG_ZONE_DMA=y
39# CONFIG_MOMENCO_OCELOT_C is not set 39# CONFIG_MOMENCO_OCELOT_C is not set
40# CONFIG_MOMENCO_OCELOT_G is not set 40# CONFIG_MOMENCO_OCELOT_G is not set
41# CONFIG_MIPS_XXS1500 is not set 41# CONFIG_MIPS_XXS1500 is not set
42# CONFIG_PNX8550_V2PCI is not set
43# CONFIG_PNX8550_JBS is not set 42# CONFIG_PNX8550_JBS is not set
44# CONFIG_PNX8550_STB810 is not set 43# CONFIG_PNX8550_STB810 is not set
45# CONFIG_DDB5477 is not set 44# CONFIG_DDB5477 is not set
diff --git a/arch/mips/configs/ev64120_defconfig b/arch/mips/configs/ev64120_defconfig
index ce088b36291d..c10e4e063226 100644
--- a/arch/mips/configs/ev64120_defconfig
+++ b/arch/mips/configs/ev64120_defconfig
@@ -39,7 +39,6 @@ CONFIG_MIPS_EV64120=y
39# CONFIG_MOMENCO_OCELOT_C is not set 39# CONFIG_MOMENCO_OCELOT_C is not set
40# CONFIG_MOMENCO_OCELOT_G is not set 40# CONFIG_MOMENCO_OCELOT_G is not set
41# CONFIG_MIPS_XXS1500 is not set 41# CONFIG_MIPS_XXS1500 is not set
42# CONFIG_PNX8550_V2PCI is not set
43# CONFIG_PNX8550_JBS is not set 42# CONFIG_PNX8550_JBS is not set
44# CONFIG_PNX8550_STB810 is not set 43# CONFIG_PNX8550_STB810 is not set
45# CONFIG_DDB5477 is not set 44# CONFIG_DDB5477 is not set
diff --git a/arch/mips/configs/excite_defconfig b/arch/mips/configs/excite_defconfig
index 82f204d080b7..460d7a26a8ba 100644
--- a/arch/mips/configs/excite_defconfig
+++ b/arch/mips/configs/excite_defconfig
@@ -40,7 +40,6 @@ CONFIG_BASLER_EXCITE=y
40# CONFIG_MOMENCO_OCELOT_C is not set 40# CONFIG_MOMENCO_OCELOT_C is not set
41# CONFIG_MOMENCO_OCELOT_G is not set 41# CONFIG_MOMENCO_OCELOT_G is not set
42# CONFIG_MIPS_XXS1500 is not set 42# CONFIG_MIPS_XXS1500 is not set
43# CONFIG_PNX8550_V2PCI is not set
44# CONFIG_PNX8550_JBS is not set 43# CONFIG_PNX8550_JBS is not set
45# CONFIG_PNX8550_STB810 is not set 44# CONFIG_PNX8550_STB810 is not set
46# CONFIG_DDB5477 is not set 45# CONFIG_DDB5477 is not set
diff --git a/arch/mips/configs/ip22_defconfig b/arch/mips/configs/ip22_defconfig
index cb81f13bd45a..7ec618f3c8b9 100644
--- a/arch/mips/configs/ip22_defconfig
+++ b/arch/mips/configs/ip22_defconfig
@@ -39,7 +39,6 @@ CONFIG_ZONE_DMA=y
39# CONFIG_MOMENCO_OCELOT_C is not set 39# CONFIG_MOMENCO_OCELOT_C is not set
40# CONFIG_MOMENCO_OCELOT_G is not set 40# CONFIG_MOMENCO_OCELOT_G is not set
41# CONFIG_MIPS_XXS1500 is not set 41# CONFIG_MIPS_XXS1500 is not set
42# CONFIG_PNX8550_V2PCI is not set
43# CONFIG_PNX8550_JBS is not set 42# CONFIG_PNX8550_JBS is not set
44# CONFIG_PNX8550_STB810 is not set 43# CONFIG_PNX8550_STB810 is not set
45# CONFIG_DDB5477 is not set 44# CONFIG_DDB5477 is not set
diff --git a/arch/mips/configs/ip27_defconfig b/arch/mips/configs/ip27_defconfig
index 46f6ac4083b9..9ddc3eff4793 100644
--- a/arch/mips/configs/ip27_defconfig
+++ b/arch/mips/configs/ip27_defconfig
@@ -39,7 +39,6 @@ CONFIG_ZONE_DMA=y
39# CONFIG_MOMENCO_OCELOT_C is not set 39# CONFIG_MOMENCO_OCELOT_C is not set
40# CONFIG_MOMENCO_OCELOT_G is not set 40# CONFIG_MOMENCO_OCELOT_G is not set
41# CONFIG_MIPS_XXS1500 is not set 41# CONFIG_MIPS_XXS1500 is not set
42# CONFIG_PNX8550_V2PCI is not set
43# CONFIG_PNX8550_JBS is not set 42# CONFIG_PNX8550_JBS is not set
44# CONFIG_PNX8550_STB810 is not set 43# CONFIG_PNX8550_STB810 is not set
45# CONFIG_DDB5477 is not set 44# CONFIG_DDB5477 is not set
diff --git a/arch/mips/configs/ip32_defconfig b/arch/mips/configs/ip32_defconfig
index d9e5000d5329..8fc18809d5ff 100644
--- a/arch/mips/configs/ip32_defconfig
+++ b/arch/mips/configs/ip32_defconfig
@@ -39,7 +39,6 @@ CONFIG_ZONE_DMA=y
39# CONFIG_MOMENCO_OCELOT_C is not set 39# CONFIG_MOMENCO_OCELOT_C is not set
40# CONFIG_MOMENCO_OCELOT_G is not set 40# CONFIG_MOMENCO_OCELOT_G is not set
41# CONFIG_MIPS_XXS1500 is not set 41# CONFIG_MIPS_XXS1500 is not set
42# CONFIG_PNX8550_V2PCI is not set
43# CONFIG_PNX8550_JBS is not set 42# CONFIG_PNX8550_JBS is not set
44# CONFIG_PNX8550_STB810 is not set 43# CONFIG_PNX8550_STB810 is not set
45# CONFIG_DDB5477 is not set 44# CONFIG_DDB5477 is not set
diff --git a/arch/mips/configs/jaguar-atx_defconfig b/arch/mips/configs/jaguar-atx_defconfig
index 57ef0c45a62b..083104daa2ca 100644
--- a/arch/mips/configs/jaguar-atx_defconfig
+++ b/arch/mips/configs/jaguar-atx_defconfig
@@ -39,7 +39,6 @@ CONFIG_MOMENCO_JAGUAR_ATX=y
39# CONFIG_MOMENCO_OCELOT_C is not set 39# CONFIG_MOMENCO_OCELOT_C is not set
40# CONFIG_MOMENCO_OCELOT_G is not set 40# CONFIG_MOMENCO_OCELOT_G is not set
41# CONFIG_MIPS_XXS1500 is not set 41# CONFIG_MIPS_XXS1500 is not set
42# CONFIG_PNX8550_V2PCI is not set
43# CONFIG_PNX8550_JBS is not set 42# CONFIG_PNX8550_JBS is not set
44# CONFIG_PNX8550_STB810 is not set 43# CONFIG_PNX8550_STB810 is not set
45# CONFIG_DDB5477 is not set 44# CONFIG_DDB5477 is not set
diff --git a/arch/mips/configs/jazz_defconfig b/arch/mips/configs/jazz_defconfig
index 21d979f8326c..9331cb0a19b1 100644
--- a/arch/mips/configs/jazz_defconfig
+++ b/arch/mips/configs/jazz_defconfig
@@ -39,7 +39,6 @@ CONFIG_MACH_JAZZ=y
39# CONFIG_MOMENCO_OCELOT_C is not set 39# CONFIG_MOMENCO_OCELOT_C is not set
40# CONFIG_MOMENCO_OCELOT_G is not set 40# CONFIG_MOMENCO_OCELOT_G is not set
41# CONFIG_MIPS_XXS1500 is not set 41# CONFIG_MIPS_XXS1500 is not set
42# CONFIG_PNX8550_V2PCI is not set
43# CONFIG_PNX8550_JBS is not set 42# CONFIG_PNX8550_JBS is not set
44# CONFIG_PNX8550_STB810 is not set 43# CONFIG_PNX8550_STB810 is not set
45# CONFIG_DDB5477 is not set 44# CONFIG_DDB5477 is not set
diff --git a/arch/mips/configs/jmr3927_defconfig b/arch/mips/configs/jmr3927_defconfig
index 98b9fbc042f4..21a094752dab 100644
--- a/arch/mips/configs/jmr3927_defconfig
+++ b/arch/mips/configs/jmr3927_defconfig
@@ -39,7 +39,6 @@ CONFIG_ZONE_DMA=y
39# CONFIG_MOMENCO_OCELOT_C is not set 39# CONFIG_MOMENCO_OCELOT_C is not set
40# CONFIG_MOMENCO_OCELOT_G is not set 40# CONFIG_MOMENCO_OCELOT_G is not set
41# CONFIG_MIPS_XXS1500 is not set 41# CONFIG_MIPS_XXS1500 is not set
42# CONFIG_PNX8550_V2PCI is not set
43# CONFIG_PNX8550_JBS is not set 42# CONFIG_PNX8550_JBS is not set
44# CONFIG_PNX8550_STB810 is not set 43# CONFIG_PNX8550_STB810 is not set
45# CONFIG_DDB5477 is not set 44# CONFIG_DDB5477 is not set
diff --git a/arch/mips/configs/lasat200_defconfig b/arch/mips/configs/lasat200_defconfig
index b3f767ff1c5a..fd4272c1458a 100644
--- a/arch/mips/configs/lasat200_defconfig
+++ b/arch/mips/configs/lasat200_defconfig
@@ -39,7 +39,6 @@ CONFIG_LASAT=y
39# CONFIG_MOMENCO_OCELOT_C is not set 39# CONFIG_MOMENCO_OCELOT_C is not set
40# CONFIG_MOMENCO_OCELOT_G is not set 40# CONFIG_MOMENCO_OCELOT_G is not set
41# CONFIG_MIPS_XXS1500 is not set 41# CONFIG_MIPS_XXS1500 is not set
42# CONFIG_PNX8550_V2PCI is not set
43# CONFIG_PNX8550_JBS is not set 42# CONFIG_PNX8550_JBS is not set
44# CONFIG_PNX8550_STB810 is not set 43# CONFIG_PNX8550_STB810 is not set
45# CONFIG_DDB5477 is not set 44# CONFIG_DDB5477 is not set
diff --git a/arch/mips/configs/malta_defconfig b/arch/mips/configs/malta_defconfig
index a5f379d626d6..1f64d7632a03 100644
--- a/arch/mips/configs/malta_defconfig
+++ b/arch/mips/configs/malta_defconfig
@@ -39,7 +39,6 @@ CONFIG_MIPS_MALTA=y
39# CONFIG_MOMENCO_OCELOT_C is not set 39# CONFIG_MOMENCO_OCELOT_C is not set
40# CONFIG_MOMENCO_OCELOT_G is not set 40# CONFIG_MOMENCO_OCELOT_G is not set
41# CONFIG_MIPS_XXS1500 is not set 41# CONFIG_MIPS_XXS1500 is not set
42# CONFIG_PNX8550_V2PCI is not set
43# CONFIG_PNX8550_JBS is not set 42# CONFIG_PNX8550_JBS is not set
44# CONFIG_PNX8550_STB810 is not set 43# CONFIG_PNX8550_STB810 is not set
45# CONFIG_DDB5477 is not set 44# CONFIG_DDB5477 is not set
diff --git a/arch/mips/configs/mipssim_defconfig b/arch/mips/configs/mipssim_defconfig
index 5ff53e184912..a2db5c201216 100644
--- a/arch/mips/configs/mipssim_defconfig
+++ b/arch/mips/configs/mipssim_defconfig
@@ -39,7 +39,6 @@ CONFIG_MIPS_SIM=y
39# CONFIG_MOMENCO_OCELOT_C is not set 39# CONFIG_MOMENCO_OCELOT_C is not set
40# CONFIG_MOMENCO_OCELOT_G is not set 40# CONFIG_MOMENCO_OCELOT_G is not set
41# CONFIG_MIPS_XXS1500 is not set 41# CONFIG_MIPS_XXS1500 is not set
42# CONFIG_PNX8550_V2PCI is not set
43# CONFIG_PNX8550_JBS is not set 42# CONFIG_PNX8550_JBS is not set
44# CONFIG_PNX8550_STB810 is not set 43# CONFIG_PNX8550_STB810 is not set
45# CONFIG_DDB5477 is not set 44# CONFIG_DDB5477 is not set
diff --git a/arch/mips/configs/mpc30x_defconfig b/arch/mips/configs/mpc30x_defconfig
index 750e6445c613..ad5c0bf87b2b 100644
--- a/arch/mips/configs/mpc30x_defconfig
+++ b/arch/mips/configs/mpc30x_defconfig
@@ -39,7 +39,6 @@ CONFIG_ZONE_DMA=y
39# CONFIG_MOMENCO_OCELOT_C is not set 39# CONFIG_MOMENCO_OCELOT_C is not set
40# CONFIG_MOMENCO_OCELOT_G is not set 40# CONFIG_MOMENCO_OCELOT_G is not set
41# CONFIG_MIPS_XXS1500 is not set 41# CONFIG_MIPS_XXS1500 is not set
42# CONFIG_PNX8550_V2PCI is not set
43# CONFIG_PNX8550_JBS is not set 42# CONFIG_PNX8550_JBS is not set
44# CONFIG_PNX8550_STB810 is not set 43# CONFIG_PNX8550_STB810 is not set
45# CONFIG_DDB5477 is not set 44# CONFIG_DDB5477 is not set
diff --git a/arch/mips/configs/ocelot_3_defconfig b/arch/mips/configs/ocelot_3_defconfig
index 2febd0a7fba2..28547313ce13 100644
--- a/arch/mips/configs/ocelot_3_defconfig
+++ b/arch/mips/configs/ocelot_3_defconfig
@@ -39,7 +39,6 @@ CONFIG_MOMENCO_OCELOT_3=y
39# CONFIG_MOMENCO_OCELOT_C is not set 39# CONFIG_MOMENCO_OCELOT_C is not set
40# CONFIG_MOMENCO_OCELOT_G is not set 40# CONFIG_MOMENCO_OCELOT_G is not set
41# CONFIG_MIPS_XXS1500 is not set 41# CONFIG_MIPS_XXS1500 is not set
42# CONFIG_PNX8550_V2PCI is not set
43# CONFIG_PNX8550_JBS is not set 42# CONFIG_PNX8550_JBS is not set
44# CONFIG_PNX8550_STB810 is not set 43# CONFIG_PNX8550_STB810 is not set
45# CONFIG_DDB5477 is not set 44# CONFIG_DDB5477 is not set
diff --git a/arch/mips/configs/ocelot_c_defconfig b/arch/mips/configs/ocelot_c_defconfig
index b8f457300bbf..82ff6fc0cd41 100644
--- a/arch/mips/configs/ocelot_c_defconfig
+++ b/arch/mips/configs/ocelot_c_defconfig
@@ -39,7 +39,6 @@ CONFIG_ZONE_DMA=y
39CONFIG_MOMENCO_OCELOT_C=y 39CONFIG_MOMENCO_OCELOT_C=y
40# CONFIG_MOMENCO_OCELOT_G is not set 40# CONFIG_MOMENCO_OCELOT_G is not set
41# CONFIG_MIPS_XXS1500 is not set 41# CONFIG_MIPS_XXS1500 is not set
42# CONFIG_PNX8550_V2PCI is not set
43# CONFIG_PNX8550_JBS is not set 42# CONFIG_PNX8550_JBS is not set
44# CONFIG_PNX8550_STB810 is not set 43# CONFIG_PNX8550_STB810 is not set
45# CONFIG_DDB5477 is not set 44# CONFIG_DDB5477 is not set
diff --git a/arch/mips/configs/ocelot_defconfig b/arch/mips/configs/ocelot_defconfig
index 8ade072271cd..15a027e00eec 100644
--- a/arch/mips/configs/ocelot_defconfig
+++ b/arch/mips/configs/ocelot_defconfig
@@ -39,7 +39,6 @@ CONFIG_MOMENCO_OCELOT=y
39# CONFIG_MOMENCO_OCELOT_C is not set 39# CONFIG_MOMENCO_OCELOT_C is not set
40# CONFIG_MOMENCO_OCELOT_G is not set 40# CONFIG_MOMENCO_OCELOT_G is not set
41# CONFIG_MIPS_XXS1500 is not set 41# CONFIG_MIPS_XXS1500 is not set
42# CONFIG_PNX8550_V2PCI is not set
43# CONFIG_PNX8550_JBS is not set 42# CONFIG_PNX8550_JBS is not set
44# CONFIG_PNX8550_STB810 is not set 43# CONFIG_PNX8550_STB810 is not set
45# CONFIG_DDB5477 is not set 44# CONFIG_DDB5477 is not set
diff --git a/arch/mips/configs/ocelot_g_defconfig b/arch/mips/configs/ocelot_g_defconfig
index d20a2216c11d..7078e6b3ea11 100644
--- a/arch/mips/configs/ocelot_g_defconfig
+++ b/arch/mips/configs/ocelot_g_defconfig
@@ -39,7 +39,6 @@ CONFIG_ZONE_DMA=y
39# CONFIG_MOMENCO_OCELOT_C is not set 39# CONFIG_MOMENCO_OCELOT_C is not set
40CONFIG_MOMENCO_OCELOT_G=y 40CONFIG_MOMENCO_OCELOT_G=y
41# CONFIG_MIPS_XXS1500 is not set 41# CONFIG_MIPS_XXS1500 is not set
42# CONFIG_PNX8550_V2PCI is not set
43# CONFIG_PNX8550_JBS is not set 42# CONFIG_PNX8550_JBS is not set
44# CONFIG_PNX8550_STB810 is not set 43# CONFIG_PNX8550_STB810 is not set
45# CONFIG_DDB5477 is not set 44# CONFIG_DDB5477 is not set
diff --git a/arch/mips/configs/pb1100_defconfig b/arch/mips/configs/pb1100_defconfig
index 33fcc8133bc0..69678d99ae61 100644
--- a/arch/mips/configs/pb1100_defconfig
+++ b/arch/mips/configs/pb1100_defconfig
@@ -39,7 +39,6 @@ CONFIG_MIPS_PB1100=y
39# CONFIG_MOMENCO_OCELOT_C is not set 39# CONFIG_MOMENCO_OCELOT_C is not set
40# CONFIG_MOMENCO_OCELOT_G is not set 40# CONFIG_MOMENCO_OCELOT_G is not set
41# CONFIG_MIPS_XXS1500 is not set 41# CONFIG_MIPS_XXS1500 is not set
42# CONFIG_PNX8550_V2PCI is not set
43# CONFIG_PNX8550_JBS is not set 42# CONFIG_PNX8550_JBS is not set
44# CONFIG_PNX8550_STB810 is not set 43# CONFIG_PNX8550_STB810 is not set
45# CONFIG_DDB5477 is not set 44# CONFIG_DDB5477 is not set
diff --git a/arch/mips/configs/pb1500_defconfig b/arch/mips/configs/pb1500_defconfig
index e07c55dc8dc1..070672799dac 100644
--- a/arch/mips/configs/pb1500_defconfig
+++ b/arch/mips/configs/pb1500_defconfig
@@ -39,7 +39,6 @@ CONFIG_MIPS_PB1500=y
39# CONFIG_MOMENCO_OCELOT_C is not set 39# CONFIG_MOMENCO_OCELOT_C is not set
40# CONFIG_MOMENCO_OCELOT_G is not set 40# CONFIG_MOMENCO_OCELOT_G is not set
41# CONFIG_MIPS_XXS1500 is not set 41# CONFIG_MIPS_XXS1500 is not set
42# CONFIG_PNX8550_V2PCI is not set
43# CONFIG_PNX8550_JBS is not set 42# CONFIG_PNX8550_JBS is not set
44# CONFIG_PNX8550_STB810 is not set 43# CONFIG_PNX8550_STB810 is not set
45# CONFIG_DDB5477 is not set 44# CONFIG_DDB5477 is not set
diff --git a/arch/mips/configs/pb1550_defconfig b/arch/mips/configs/pb1550_defconfig
index df210dd22476..354e49b7a5f1 100644
--- a/arch/mips/configs/pb1550_defconfig
+++ b/arch/mips/configs/pb1550_defconfig
@@ -39,7 +39,6 @@ CONFIG_MIPS_PB1550=y
39# CONFIG_MOMENCO_OCELOT_C is not set 39# CONFIG_MOMENCO_OCELOT_C is not set
40# CONFIG_MOMENCO_OCELOT_G is not set 40# CONFIG_MOMENCO_OCELOT_G is not set
41# CONFIG_MIPS_XXS1500 is not set 41# CONFIG_MIPS_XXS1500 is not set
42# CONFIG_PNX8550_V2PCI is not set
43# CONFIG_PNX8550_JBS is not set 42# CONFIG_PNX8550_JBS is not set
44# CONFIG_PNX8550_STB810 is not set 43# CONFIG_PNX8550_STB810 is not set
45# CONFIG_DDB5477 is not set 44# CONFIG_DDB5477 is not set
diff --git a/arch/mips/configs/pnx8550-jbs_defconfig b/arch/mips/configs/pnx8550-jbs_defconfig
index 106a1641c0b5..fae16c5ec521 100644
--- a/arch/mips/configs/pnx8550-jbs_defconfig
+++ b/arch/mips/configs/pnx8550-jbs_defconfig
@@ -39,7 +39,6 @@ CONFIG_ZONE_DMA=y
39# CONFIG_MOMENCO_OCELOT_C is not set 39# CONFIG_MOMENCO_OCELOT_C is not set
40# CONFIG_MOMENCO_OCELOT_G is not set 40# CONFIG_MOMENCO_OCELOT_G is not set
41# CONFIG_MIPS_XXS1500 is not set 41# CONFIG_MIPS_XXS1500 is not set
42# CONFIG_PNX8550_V2PCI is not set
43CONFIG_PNX8550_JBS=y 42CONFIG_PNX8550_JBS=y
44# CONFIG_PNX8550_STB810 is not set 43# CONFIG_PNX8550_STB810 is not set
45# CONFIG_DDB5477 is not set 44# CONFIG_DDB5477 is not set
diff --git a/arch/mips/configs/pnx8550-stb810_defconfig b/arch/mips/configs/pnx8550-stb810_defconfig
index 8caa2cd1aa7c..cd821e52181d 100644
--- a/arch/mips/configs/pnx8550-stb810_defconfig
+++ b/arch/mips/configs/pnx8550-stb810_defconfig
@@ -39,7 +39,6 @@ CONFIG_ZONE_DMA=y
39# CONFIG_MOMENCO_OCELOT_C is not set 39# CONFIG_MOMENCO_OCELOT_C is not set
40# CONFIG_MOMENCO_OCELOT_G is not set 40# CONFIG_MOMENCO_OCELOT_G is not set
41# CONFIG_MIPS_XXS1500 is not set 41# CONFIG_MIPS_XXS1500 is not set
42# CONFIG_PNX8550_V2PCI is not set
43# CONFIG_PNX8550_JBS is not set 42# CONFIG_PNX8550_JBS is not set
44CONFIG_PNX8550_STB810=y 43CONFIG_PNX8550_STB810=y
45# CONFIG_DDB5477 is not set 44# CONFIG_DDB5477 is not set
diff --git a/arch/mips/configs/pnx8550-v2pci_defconfig b/arch/mips/configs/pnx8550-v2pci_defconfig
index 43f1becec2a4..3d6c2d743502 100644
--- a/arch/mips/configs/pnx8550-v2pci_defconfig
+++ b/arch/mips/configs/pnx8550-v2pci_defconfig
@@ -39,7 +39,6 @@ CONFIG_ZONE_DMA=y
39# CONFIG_MOMENCO_OCELOT_C is not set 39# CONFIG_MOMENCO_OCELOT_C is not set
40# CONFIG_MOMENCO_OCELOT_G is not set 40# CONFIG_MOMENCO_OCELOT_G is not set
41# CONFIG_MIPS_XXS1500 is not set 41# CONFIG_MIPS_XXS1500 is not set
42CONFIG_PNX8550_V2PCI=y
43# CONFIG_PNX8550_JBS is not set 42# CONFIG_PNX8550_JBS is not set
44# CONFIG_PNX8550_STB810 is not set 43# CONFIG_PNX8550_STB810 is not set
45# CONFIG_DDB5477 is not set 44# CONFIG_DDB5477 is not set
diff --git a/arch/mips/configs/qemu_defconfig b/arch/mips/configs/qemu_defconfig
index f68396d19f9a..8e8d03157954 100644
--- a/arch/mips/configs/qemu_defconfig
+++ b/arch/mips/configs/qemu_defconfig
@@ -39,7 +39,6 @@ CONFIG_ZONE_DMA=y
39# CONFIG_MOMENCO_OCELOT_C is not set 39# CONFIG_MOMENCO_OCELOT_C is not set
40# CONFIG_MOMENCO_OCELOT_G is not set 40# CONFIG_MOMENCO_OCELOT_G is not set
41# CONFIG_MIPS_XXS1500 is not set 41# CONFIG_MIPS_XXS1500 is not set
42# CONFIG_PNX8550_V2PCI is not set
43# CONFIG_PNX8550_JBS is not set 42# CONFIG_PNX8550_JBS is not set
44# CONFIG_PNX8550_STB810 is not set 43# CONFIG_PNX8550_STB810 is not set
45# CONFIG_DDB5477 is not set 44# CONFIG_DDB5477 is not set
diff --git a/arch/mips/configs/rbhma4500_defconfig b/arch/mips/configs/rbhma4500_defconfig
index a6a824fcc874..29e0df9f4be0 100644
--- a/arch/mips/configs/rbhma4500_defconfig
+++ b/arch/mips/configs/rbhma4500_defconfig
@@ -39,7 +39,6 @@ CONFIG_ZONE_DMA=y
39# CONFIG_MOMENCO_OCELOT_C is not set 39# CONFIG_MOMENCO_OCELOT_C is not set
40# CONFIG_MOMENCO_OCELOT_G is not set 40# CONFIG_MOMENCO_OCELOT_G is not set
41# CONFIG_MIPS_XXS1500 is not set 41# CONFIG_MIPS_XXS1500 is not set
42# CONFIG_PNX8550_V2PCI is not set
43# CONFIG_PNX8550_JBS is not set 42# CONFIG_PNX8550_JBS is not set
44# CONFIG_PNX8550_STB810 is not set 43# CONFIG_PNX8550_STB810 is not set
45# CONFIG_DDB5477 is not set 44# CONFIG_DDB5477 is not set
diff --git a/arch/mips/configs/rm200_defconfig b/arch/mips/configs/rm200_defconfig
index bee3702d501d..5593cde9f74c 100644
--- a/arch/mips/configs/rm200_defconfig
+++ b/arch/mips/configs/rm200_defconfig
@@ -39,7 +39,6 @@ CONFIG_ZONE_DMA=y
39# CONFIG_MOMENCO_OCELOT_C is not set 39# CONFIG_MOMENCO_OCELOT_C is not set
40# CONFIG_MOMENCO_OCELOT_G is not set 40# CONFIG_MOMENCO_OCELOT_G is not set
41# CONFIG_MIPS_XXS1500 is not set 41# CONFIG_MIPS_XXS1500 is not set
42# CONFIG_PNX8550_V2PCI is not set
43# CONFIG_PNX8550_JBS is not set 42# CONFIG_PNX8550_JBS is not set
44# CONFIG_PNX8550_STB810 is not set 43# CONFIG_PNX8550_STB810 is not set
45# CONFIG_DDB5477 is not set 44# CONFIG_DDB5477 is not set
diff --git a/arch/mips/configs/sb1250-swarm_defconfig b/arch/mips/configs/sb1250-swarm_defconfig
index 3c891ed10141..6c4f09a381e2 100644
--- a/arch/mips/configs/sb1250-swarm_defconfig
+++ b/arch/mips/configs/sb1250-swarm_defconfig
@@ -39,7 +39,6 @@ CONFIG_ZONE_DMA=y
39# CONFIG_MOMENCO_OCELOT_C is not set 39# CONFIG_MOMENCO_OCELOT_C is not set
40# CONFIG_MOMENCO_OCELOT_G is not set 40# CONFIG_MOMENCO_OCELOT_G is not set
41# CONFIG_MIPS_XXS1500 is not set 41# CONFIG_MIPS_XXS1500 is not set
42# CONFIG_PNX8550_V2PCI is not set
43# CONFIG_PNX8550_JBS is not set 42# CONFIG_PNX8550_JBS is not set
44# CONFIG_PNX8550_STB810 is not set 43# CONFIG_PNX8550_STB810 is not set
45# CONFIG_DDB5477 is not set 44# CONFIG_DDB5477 is not set
diff --git a/arch/mips/configs/sead_defconfig b/arch/mips/configs/sead_defconfig
index e31d964a053b..988b9cdef01f 100644
--- a/arch/mips/configs/sead_defconfig
+++ b/arch/mips/configs/sead_defconfig
@@ -39,7 +39,6 @@ CONFIG_MIPS_SEAD=y
39# CONFIG_MOMENCO_OCELOT_C is not set 39# CONFIG_MOMENCO_OCELOT_C is not set
40# CONFIG_MOMENCO_OCELOT_G is not set 40# CONFIG_MOMENCO_OCELOT_G is not set
41# CONFIG_MIPS_XXS1500 is not set 41# CONFIG_MIPS_XXS1500 is not set
42# CONFIG_PNX8550_V2PCI is not set
43# CONFIG_PNX8550_JBS is not set 42# CONFIG_PNX8550_JBS is not set
44# CONFIG_PNX8550_STB810 is not set 43# CONFIG_PNX8550_STB810 is not set
45# CONFIG_DDB5477 is not set 44# CONFIG_DDB5477 is not set
diff --git a/arch/mips/configs/tb0226_defconfig b/arch/mips/configs/tb0226_defconfig
index 5771c1aee76a..b5be8b74d896 100644
--- a/arch/mips/configs/tb0226_defconfig
+++ b/arch/mips/configs/tb0226_defconfig
@@ -39,7 +39,6 @@ CONFIG_ZONE_DMA=y
39# CONFIG_MOMENCO_OCELOT_C is not set 39# CONFIG_MOMENCO_OCELOT_C is not set
40# CONFIG_MOMENCO_OCELOT_G is not set 40# CONFIG_MOMENCO_OCELOT_G is not set
41# CONFIG_MIPS_XXS1500 is not set 41# CONFIG_MIPS_XXS1500 is not set
42# CONFIG_PNX8550_V2PCI is not set
43# CONFIG_PNX8550_JBS is not set 42# CONFIG_PNX8550_JBS is not set
44# CONFIG_PNX8550_STB810 is not set 43# CONFIG_PNX8550_STB810 is not set
45# CONFIG_DDB5477 is not set 44# CONFIG_DDB5477 is not set
diff --git a/arch/mips/configs/tb0229_defconfig b/arch/mips/configs/tb0229_defconfig
index a8eb4b182d34..1756d2bdf6b8 100644
--- a/arch/mips/configs/tb0229_defconfig
+++ b/arch/mips/configs/tb0229_defconfig
@@ -39,7 +39,6 @@ CONFIG_ZONE_DMA=y
39# CONFIG_MOMENCO_OCELOT_C is not set 39# CONFIG_MOMENCO_OCELOT_C is not set
40# CONFIG_MOMENCO_OCELOT_G is not set 40# CONFIG_MOMENCO_OCELOT_G is not set
41# CONFIG_MIPS_XXS1500 is not set 41# CONFIG_MIPS_XXS1500 is not set
42# CONFIG_PNX8550_V2PCI is not set
43# CONFIG_PNX8550_JBS is not set 42# CONFIG_PNX8550_JBS is not set
44# CONFIG_PNX8550_STB810 is not set 43# CONFIG_PNX8550_STB810 is not set
45# CONFIG_DDB5477 is not set 44# CONFIG_DDB5477 is not set
diff --git a/arch/mips/configs/tb0287_defconfig b/arch/mips/configs/tb0287_defconfig
index c58afa2eac6b..8bb6be4342b6 100644
--- a/arch/mips/configs/tb0287_defconfig
+++ b/arch/mips/configs/tb0287_defconfig
@@ -39,7 +39,6 @@ CONFIG_ZONE_DMA=y
39# CONFIG_MOMENCO_OCELOT_C is not set 39# CONFIG_MOMENCO_OCELOT_C is not set
40# CONFIG_MOMENCO_OCELOT_G is not set 40# CONFIG_MOMENCO_OCELOT_G is not set
41# CONFIG_MIPS_XXS1500 is not set 41# CONFIG_MIPS_XXS1500 is not set
42# CONFIG_PNX8550_V2PCI is not set
43# CONFIG_PNX8550_JBS is not set 42# CONFIG_PNX8550_JBS is not set
44# CONFIG_PNX8550_STB810 is not set 43# CONFIG_PNX8550_STB810 is not set
45# CONFIG_DDB5477 is not set 44# CONFIG_DDB5477 is not set
diff --git a/arch/mips/configs/workpad_defconfig b/arch/mips/configs/workpad_defconfig
index 2abbd6827720..8f019ffcc71b 100644
--- a/arch/mips/configs/workpad_defconfig
+++ b/arch/mips/configs/workpad_defconfig
@@ -39,7 +39,6 @@ CONFIG_ZONE_DMA=y
39# CONFIG_MOMENCO_OCELOT_C is not set 39# CONFIG_MOMENCO_OCELOT_C is not set
40# CONFIG_MOMENCO_OCELOT_G is not set 40# CONFIG_MOMENCO_OCELOT_G is not set
41# CONFIG_MIPS_XXS1500 is not set 41# CONFIG_MIPS_XXS1500 is not set
42# CONFIG_PNX8550_V2PCI is not set
43# CONFIG_PNX8550_JBS is not set 42# CONFIG_PNX8550_JBS is not set
44# CONFIG_PNX8550_STB810 is not set 43# CONFIG_PNX8550_STB810 is not set
45# CONFIG_DDB5477 is not set 44# CONFIG_DDB5477 is not set
diff --git a/arch/mips/configs/wrppmc_defconfig b/arch/mips/configs/wrppmc_defconfig
index 44b6b7c1fdb6..52b48c0715d3 100644
--- a/arch/mips/configs/wrppmc_defconfig
+++ b/arch/mips/configs/wrppmc_defconfig
@@ -39,7 +39,6 @@ CONFIG_WR_PPMC=y
39# CONFIG_MOMENCO_OCELOT_C is not set 39# CONFIG_MOMENCO_OCELOT_C is not set
40# CONFIG_MOMENCO_OCELOT_G is not set 40# CONFIG_MOMENCO_OCELOT_G is not set
41# CONFIG_MIPS_XXS1500 is not set 41# CONFIG_MIPS_XXS1500 is not set
42# CONFIG_PNX8550_V2PCI is not set
43# CONFIG_PNX8550_JBS is not set 42# CONFIG_PNX8550_JBS is not set
44# CONFIG_PNX8550_STB810 is not set 43# CONFIG_PNX8550_STB810 is not set
45# CONFIG_DDB5477 is not set 44# CONFIG_DDB5477 is not set
diff --git a/arch/mips/configs/yosemite_defconfig b/arch/mips/configs/yosemite_defconfig
index f24e1c6fc484..6824606309e5 100644
--- a/arch/mips/configs/yosemite_defconfig
+++ b/arch/mips/configs/yosemite_defconfig
@@ -39,7 +39,6 @@ CONFIG_ZONE_DMA=y
39# CONFIG_MOMENCO_OCELOT_C is not set 39# CONFIG_MOMENCO_OCELOT_C is not set
40# CONFIG_MOMENCO_OCELOT_G is not set 40# CONFIG_MOMENCO_OCELOT_G is not set
41# CONFIG_MIPS_XXS1500 is not set 41# CONFIG_MIPS_XXS1500 is not set
42# CONFIG_PNX8550_V2PCI is not set
43# CONFIG_PNX8550_JBS is not set 42# CONFIG_PNX8550_JBS is not set
44# CONFIG_PNX8550_STB810 is not set 43# CONFIG_PNX8550_STB810 is not set
45# CONFIG_DDB5477 is not set 44# CONFIG_DDB5477 is not set
diff --git a/arch/mips/defconfig b/arch/mips/defconfig
index 8cb8f5919194..41211f8b7738 100644
--- a/arch/mips/defconfig
+++ b/arch/mips/defconfig
@@ -39,7 +39,6 @@ CONFIG_ZONE_DMA=y
39# CONFIG_MOMENCO_OCELOT_C is not set 39# CONFIG_MOMENCO_OCELOT_C is not set
40# CONFIG_MOMENCO_OCELOT_G is not set 40# CONFIG_MOMENCO_OCELOT_G is not set
41# CONFIG_MIPS_XXS1500 is not set 41# CONFIG_MIPS_XXS1500 is not set
42# CONFIG_PNX8550_V2PCI is not set
43# CONFIG_PNX8550_JBS is not set 42# CONFIG_PNX8550_JBS is not set
44# CONFIG_PNX8550_STB810 is not set 43# CONFIG_PNX8550_STB810 is not set
45# CONFIG_DDB5477 is not set 44# CONFIG_DDB5477 is not set
diff --git a/arch/mips/kernel/kspd.c b/arch/mips/kernel/kspd.c
index 5929f883e46b..29eadd404fa5 100644
--- a/arch/mips/kernel/kspd.c
+++ b/arch/mips/kernel/kspd.c
@@ -70,6 +70,7 @@ static int sp_stopping = 0;
70#define MTSP_SYSCALL_GETTIME (MTSP_SYSCALL_BASE + 7) 70#define MTSP_SYSCALL_GETTIME (MTSP_SYSCALL_BASE + 7)
71#define MTSP_SYSCALL_PIPEFREQ (MTSP_SYSCALL_BASE + 8) 71#define MTSP_SYSCALL_PIPEFREQ (MTSP_SYSCALL_BASE + 8)
72#define MTSP_SYSCALL_GETTOD (MTSP_SYSCALL_BASE + 9) 72#define MTSP_SYSCALL_GETTOD (MTSP_SYSCALL_BASE + 9)
73#define MTSP_SYSCALL_IOCTL (MTSP_SYSCALL_BASE + 10)
73 74
74#define MTSP_O_RDONLY 0x0000 75#define MTSP_O_RDONLY 0x0000
75#define MTSP_O_WRONLY 0x0001 76#define MTSP_O_WRONLY 0x0001
@@ -110,7 +111,8 @@ struct apsp_table syscall_command_table[] = {
110 { MTSP_SYSCALL_CLOSE, __NR_close }, 111 { MTSP_SYSCALL_CLOSE, __NR_close },
111 { MTSP_SYSCALL_READ, __NR_read }, 112 { MTSP_SYSCALL_READ, __NR_read },
112 { MTSP_SYSCALL_WRITE, __NR_write }, 113 { MTSP_SYSCALL_WRITE, __NR_write },
113 { MTSP_SYSCALL_LSEEK32, __NR_lseek } 114 { MTSP_SYSCALL_LSEEK32, __NR_lseek },
115 { MTSP_SYSCALL_IOCTL, __NR_ioctl }
114}; 116};
115 117
116static int sp_syscall(int num, int arg0, int arg1, int arg2, int arg3) 118static int sp_syscall(int num, int arg0, int arg1, int arg2, int arg3)
@@ -189,6 +191,8 @@ void sp_work_handle_request(void)
189 struct mtsp_syscall_generic generic; 191 struct mtsp_syscall_generic generic;
190 struct mtsp_syscall_ret ret; 192 struct mtsp_syscall_ret ret;
191 struct kspd_notifications *n; 193 struct kspd_notifications *n;
194 unsigned long written;
195 mm_segment_t old_fs;
192 struct timeval tv; 196 struct timeval tv;
193 struct timezone tz; 197 struct timezone tz;
194 int cmd; 198 int cmd;
@@ -199,7 +203,11 @@ void sp_work_handle_request(void)
199 203
200 ret.retval = -1; 204 ret.retval = -1;
201 205
202 if (!rtlx_read(RTLX_CHANNEL_SYSIO, &sc, sizeof(struct mtsp_syscall), 0)) { 206 old_fs = get_fs();
207 set_fs(KERNEL_DS);
208
209 if (!rtlx_read(RTLX_CHANNEL_SYSIO, &sc, sizeof(struct mtsp_syscall))) {
210 set_fs(old_fs);
203 printk(KERN_ERR "Expected request but nothing to read\n"); 211 printk(KERN_ERR "Expected request but nothing to read\n");
204 return; 212 return;
205 } 213 }
@@ -207,7 +215,8 @@ void sp_work_handle_request(void)
207 size = sc.size; 215 size = sc.size;
208 216
209 if (size) { 217 if (size) {
210 if (!rtlx_read(RTLX_CHANNEL_SYSIO, &generic, size, 0)) { 218 if (!rtlx_read(RTLX_CHANNEL_SYSIO, &generic, size)) {
219 set_fs(old_fs);
211 printk(KERN_ERR "Expected request but nothing to read\n"); 220 printk(KERN_ERR "Expected request but nothing to read\n");
212 return; 221 return;
213 } 222 }
@@ -280,8 +289,11 @@ void sp_work_handle_request(void)
280 if (vpe_getuid(SP_VPE)) 289 if (vpe_getuid(SP_VPE))
281 sp_setfsuidgid( 0, 0); 290 sp_setfsuidgid( 0, 0);
282 291
283 if ((rtlx_write(RTLX_CHANNEL_SYSIO, &ret, sizeof(struct mtsp_syscall_ret), 0)) 292 old_fs = get_fs();
284 < sizeof(struct mtsp_syscall_ret)) 293 set_fs(KERNEL_DS);
294 written = rtlx_write(RTLX_CHANNEL_SYSIO, &ret, sizeof(ret));
295 set_fs(old_fs);
296 if (written < sizeof(ret))
285 printk("KSPD: sp_work_handle_request failed to send to SP\n"); 297 printk("KSPD: sp_work_handle_request failed to send to SP\n");
286} 298}
287 299
diff --git a/arch/mips/kernel/linux32.c b/arch/mips/kernel/linux32.c
index 1df544c1f966..37849edd0645 100644
--- a/arch/mips/kernel/linux32.c
+++ b/arch/mips/kernel/linux32.c
@@ -311,6 +311,8 @@ asmlinkage int sys32_sched_rr_get_interval(compat_pid_t pid,
311 return ret; 311 return ret;
312} 312}
313 313
314#ifdef CONFIG_SYSVIPC
315
314asmlinkage long 316asmlinkage long
315sys32_ipc (u32 call, int first, int second, int third, u32 ptr, u32 fifth) 317sys32_ipc (u32 call, int first, int second, int third, u32 ptr, u32 fifth)
316{ 318{
@@ -368,6 +370,16 @@ sys32_ipc (u32 call, int first, int second, int third, u32 ptr, u32 fifth)
368 return err; 370 return err;
369} 371}
370 372
373#else
374
375asmlinkage long
376sys32_ipc (u32 call, int first, int second, int third, u32 ptr, u32 fifth)
377{
378 return -ENOSYS;
379}
380
381#endif /* CONFIG_SYSVIPC */
382
371#ifdef CONFIG_MIPS32_N32 383#ifdef CONFIG_MIPS32_N32
372asmlinkage long sysn32_semctl(int semid, int semnum, int cmd, u32 arg) 384asmlinkage long sysn32_semctl(int semid, int semnum, int cmd, u32 arg)
373{ 385{
diff --git a/arch/mips/kernel/r2300_switch.S b/arch/mips/kernel/r2300_switch.S
index 656bde2e11b1..28c2e2e6af73 100644
--- a/arch/mips/kernel/r2300_switch.S
+++ b/arch/mips/kernel/r2300_switch.S
@@ -49,8 +49,7 @@ LEAF(resume)
49#ifndef CONFIG_CPU_HAS_LLSC 49#ifndef CONFIG_CPU_HAS_LLSC
50 sw zero, ll_bit 50 sw zero, ll_bit
51#endif 51#endif
52 mfc0 t1, CP0_STATUS 52 mfc0 t2, CP0_STATUS
53 sw t1, THREAD_STATUS(a0)
54 cpu_save_nonscratch a0 53 cpu_save_nonscratch a0
55 sw ra, THREAD_REG31(a0) 54 sw ra, THREAD_REG31(a0)
56 55
@@ -60,8 +59,8 @@ LEAF(resume)
60 lw t3, TASK_THREAD_INFO(a0) 59 lw t3, TASK_THREAD_INFO(a0)
61 lw t0, TI_FLAGS(t3) 60 lw t0, TI_FLAGS(t3)
62 li t1, _TIF_USEDFPU 61 li t1, _TIF_USEDFPU
63 and t2, t0, t1 62 and t1, t0
64 beqz t2, 1f 63 beqz t1, 1f
65 nor t1, zero, t1 64 nor t1, zero, t1
66 65
67 and t0, t0, t1 66 and t0, t0, t1
@@ -74,10 +73,13 @@ LEAF(resume)
74 li t1, ~ST0_CU1 73 li t1, ~ST0_CU1
75 and t0, t0, t1 74 and t0, t0, t1
76 sw t0, ST_OFF(t3) 75 sw t0, ST_OFF(t3)
76 /* clear thread_struct CU1 bit */
77 and t2, t1
77 78
78 fpu_save_single a0, t0 # clobbers t0 79 fpu_save_single a0, t0 # clobbers t0
79 80
801: 811:
82 sw t2, THREAD_STATUS(a0)
81 /* 83 /*
82 * The order of restoring the registers takes care of the race 84 * The order of restoring the registers takes care of the race
83 * updating $28, $29 and kernelsp without disabling ints. 85 * updating $28, $29 and kernelsp without disabling ints.
diff --git a/arch/mips/kernel/r4k_fpu.S b/arch/mips/kernel/r4k_fpu.S
index 59c1577ecbb3..dbd42adc52ed 100644
--- a/arch/mips/kernel/r4k_fpu.S
+++ b/arch/mips/kernel/r4k_fpu.S
@@ -114,14 +114,6 @@ LEAF(_save_fp_context32)
114 */ 114 */
115LEAF(_restore_fp_context) 115LEAF(_restore_fp_context)
116 EX lw t0, SC_FPC_CSR(a0) 116 EX lw t0, SC_FPC_CSR(a0)
117
118 /* Fail if the CSR has exceptions pending */
119 srl t1, t0, 5
120 and t1, t0
121 andi t1, 0x1f << 7
122 bnez t1, fault
123 nop
124
125#ifdef CONFIG_64BIT 117#ifdef CONFIG_64BIT
126 EX ldc1 $f1, SC_FPREGS+8(a0) 118 EX ldc1 $f1, SC_FPREGS+8(a0)
127 EX ldc1 $f3, SC_FPREGS+24(a0) 119 EX ldc1 $f3, SC_FPREGS+24(a0)
@@ -165,14 +157,6 @@ LEAF(_restore_fp_context)
165LEAF(_restore_fp_context32) 157LEAF(_restore_fp_context32)
166 /* Restore an o32 sigcontext. */ 158 /* Restore an o32 sigcontext. */
167 EX lw t0, SC32_FPC_CSR(a0) 159 EX lw t0, SC32_FPC_CSR(a0)
168
169 /* Fail if the CSR has exceptions pending */
170 srl t1, t0, 5
171 and t1, t0
172 andi t1, 0x1f << 7
173 bnez t1, fault
174 nop
175
176 EX ldc1 $f0, SC32_FPREGS+0(a0) 160 EX ldc1 $f0, SC32_FPREGS+0(a0)
177 EX ldc1 $f2, SC32_FPREGS+16(a0) 161 EX ldc1 $f2, SC32_FPREGS+16(a0)
178 EX ldc1 $f4, SC32_FPREGS+32(a0) 162 EX ldc1 $f4, SC32_FPREGS+32(a0)
diff --git a/arch/mips/kernel/r4k_switch.S b/arch/mips/kernel/r4k_switch.S
index cc566cf12246..c7698fd9955c 100644
--- a/arch/mips/kernel/r4k_switch.S
+++ b/arch/mips/kernel/r4k_switch.S
@@ -48,8 +48,7 @@
48#ifndef CONFIG_CPU_HAS_LLSC 48#ifndef CONFIG_CPU_HAS_LLSC
49 sw zero, ll_bit 49 sw zero, ll_bit
50#endif 50#endif
51 mfc0 t1, CP0_STATUS 51 mfc0 t2, CP0_STATUS
52 LONG_S t1, THREAD_STATUS(a0)
53 cpu_save_nonscratch a0 52 cpu_save_nonscratch a0
54 LONG_S ra, THREAD_REG31(a0) 53 LONG_S ra, THREAD_REG31(a0)
55 54
@@ -59,8 +58,8 @@
59 PTR_L t3, TASK_THREAD_INFO(a0) 58 PTR_L t3, TASK_THREAD_INFO(a0)
60 LONG_L t0, TI_FLAGS(t3) 59 LONG_L t0, TI_FLAGS(t3)
61 li t1, _TIF_USEDFPU 60 li t1, _TIF_USEDFPU
62 and t2, t0, t1 61 and t1, t0
63 beqz t2, 1f 62 beqz t1, 1f
64 nor t1, zero, t1 63 nor t1, zero, t1
65 64
66 and t0, t0, t1 65 and t0, t0, t1
@@ -73,10 +72,13 @@
73 li t1, ~ST0_CU1 72 li t1, ~ST0_CU1
74 and t0, t0, t1 73 and t0, t0, t1
75 LONG_S t0, ST_OFF(t3) 74 LONG_S t0, ST_OFF(t3)
75 /* clear thread_struct CU1 bit */
76 and t2, t1
76 77
77 fpu_save_double a0 t0 t1 # c0_status passed in t0 78 fpu_save_double a0 t0 t1 # c0_status passed in t0
78 # clobbers t1 79 # clobbers t1
791: 801:
81 LONG_S t2, THREAD_STATUS(a0)
80 82
81 /* 83 /*
82 * The order of restoring the registers takes care of the race 84 * The order of restoring the registers takes care of the race
diff --git a/arch/mips/kernel/rtlx.c b/arch/mips/kernel/rtlx.c
index e14ae09eda2b..e6e3047151a6 100644
--- a/arch/mips/kernel/rtlx.c
+++ b/arch/mips/kernel/rtlx.c
@@ -54,6 +54,7 @@ static struct chan_waitqueues {
54 wait_queue_head_t rt_queue; 54 wait_queue_head_t rt_queue;
55 wait_queue_head_t lx_queue; 55 wait_queue_head_t lx_queue;
56 atomic_t in_open; 56 atomic_t in_open;
57 struct mutex mutex;
57} channel_wqs[RTLX_CHANNELS]; 58} channel_wqs[RTLX_CHANNELS];
58 59
59static struct irqaction irq; 60static struct irqaction irq;
@@ -146,7 +147,7 @@ static void stopping(int vpe)
146 147
147int rtlx_open(int index, int can_sleep) 148int rtlx_open(int index, int can_sleep)
148{ 149{
149 volatile struct rtlx_info **p; 150 struct rtlx_info **p;
150 struct rtlx_channel *chan; 151 struct rtlx_channel *chan;
151 enum rtlx_state state; 152 enum rtlx_state state;
152 int ret = 0; 153 int ret = 0;
@@ -179,13 +180,24 @@ int rtlx_open(int index, int can_sleep)
179 } 180 }
180 } 181 }
181 182
183 smp_rmb();
182 if (*p == NULL) { 184 if (*p == NULL) {
183 if (can_sleep) { 185 if (can_sleep) {
184 __wait_event_interruptible(channel_wqs[index].lx_queue, 186 DEFINE_WAIT(wait);
185 *p != NULL, 187
186 ret); 188 for (;;) {
187 if (ret) 189 prepare_to_wait(&channel_wqs[index].lx_queue, &wait, TASK_INTERRUPTIBLE);
190 smp_rmb();
191 if (*p != NULL)
192 break;
193 if (!signal_pending(current)) {
194 schedule();
195 continue;
196 }
197 ret = -ERESTARTSYS;
188 goto out_fail; 198 goto out_fail;
199 }
200 finish_wait(&channel_wqs[index].lx_queue, &wait);
189 } else { 201 } else {
190 printk(" *vpe_get_shared is NULL. " 202 printk(" *vpe_get_shared is NULL. "
191 "Has an SP program been loaded?\n"); 203 "Has an SP program been loaded?\n");
@@ -277,56 +289,52 @@ unsigned int rtlx_write_poll(int index)
277 return write_spacefree(chan->rt_read, chan->rt_write, chan->buffer_size); 289 return write_spacefree(chan->rt_read, chan->rt_write, chan->buffer_size);
278} 290}
279 291
280static inline void copy_to(void *dst, void *src, size_t count, int user) 292ssize_t rtlx_read(int index, void __user *buff, size_t count, int user)
281{
282 if (user)
283 copy_to_user(dst, src, count);
284 else
285 memcpy(dst, src, count);
286}
287
288static inline void copy_from(void *dst, void *src, size_t count, int user)
289{ 293{
290 if (user) 294 size_t lx_write, fl = 0L;
291 copy_from_user(dst, src, count);
292 else
293 memcpy(dst, src, count);
294}
295
296ssize_t rtlx_read(int index, void *buff, size_t count, int user)
297{
298 size_t fl = 0L;
299 struct rtlx_channel *lx; 295 struct rtlx_channel *lx;
296 unsigned long failed;
300 297
301 if (rtlx == NULL) 298 if (rtlx == NULL)
302 return -ENOSYS; 299 return -ENOSYS;
303 300
304 lx = &rtlx->channel[index]; 301 lx = &rtlx->channel[index];
305 302
303 mutex_lock(&channel_wqs[index].mutex);
304 smp_rmb();
305 lx_write = lx->lx_write;
306
306 /* find out how much in total */ 307 /* find out how much in total */
307 count = min(count, 308 count = min(count,
308 (size_t)(lx->lx_write + lx->buffer_size - lx->lx_read) 309 (size_t)(lx_write + lx->buffer_size - lx->lx_read)
309 % lx->buffer_size); 310 % lx->buffer_size);
310 311
311 /* then how much from the read pointer onwards */ 312 /* then how much from the read pointer onwards */
312 fl = min( count, (size_t)lx->buffer_size - lx->lx_read); 313 fl = min(count, (size_t)lx->buffer_size - lx->lx_read);
313 314
314 copy_to(buff, &lx->lx_buffer[lx->lx_read], fl, user); 315 failed = copy_to_user(buff, lx->lx_buffer + lx->lx_read, fl);
316 if (failed)
317 goto out;
315 318
316 /* and if there is anything left at the beginning of the buffer */ 319 /* and if there is anything left at the beginning of the buffer */
317 if ( count - fl ) 320 if (count - fl)
318 copy_to (buff + fl, lx->lx_buffer, count - fl, user); 321 failed = copy_to_user(buff + fl, lx->lx_buffer, count - fl);
319 322
320 /* update the index */ 323out:
321 lx->lx_read += count; 324 count -= failed;
322 lx->lx_read %= lx->buffer_size; 325
326 smp_wmb();
327 lx->lx_read = (lx->lx_read + count) % lx->buffer_size;
328 smp_wmb();
329 mutex_unlock(&channel_wqs[index].mutex);
323 330
324 return count; 331 return count;
325} 332}
326 333
327ssize_t rtlx_write(int index, void *buffer, size_t count, int user) 334ssize_t rtlx_write(int index, const void __user *buffer, size_t count, int user)
328{ 335{
329 struct rtlx_channel *rt; 336 struct rtlx_channel *rt;
337 size_t rt_read;
330 size_t fl; 338 size_t fl;
331 339
332 if (rtlx == NULL) 340 if (rtlx == NULL)
@@ -334,24 +342,35 @@ ssize_t rtlx_write(int index, void *buffer, size_t count, int user)
334 342
335 rt = &rtlx->channel[index]; 343 rt = &rtlx->channel[index];
336 344
345 mutex_lock(&channel_wqs[index].mutex);
346 smp_rmb();
347 rt_read = rt->rt_read;
348
337 /* total number of bytes to copy */ 349 /* total number of bytes to copy */
338 count = min(count, 350 count = min(count,
339 (size_t)write_spacefree(rt->rt_read, rt->rt_write, 351 (size_t)write_spacefree(rt_read, rt->rt_write, rt->buffer_size));
340 rt->buffer_size));
341 352
342 /* first bit from write pointer to the end of the buffer, or count */ 353 /* first bit from write pointer to the end of the buffer, or count */
343 fl = min(count, (size_t) rt->buffer_size - rt->rt_write); 354 fl = min(count, (size_t) rt->buffer_size - rt->rt_write);
344 355
345 copy_from (&rt->rt_buffer[rt->rt_write], buffer, fl, user); 356 failed = copy_from_user(rt->rt_buffer + rt->rt_write, buffer, fl);
357 if (failed)
358 goto out;
346 359
347 /* if there's any left copy to the beginning of the buffer */ 360 /* if there's any left copy to the beginning of the buffer */
348 if( count - fl ) 361 if (count - fl) {
349 copy_from (rt->rt_buffer, buffer + fl, count - fl, user); 362 failed = copy_from_user(rt->rt_buffer, buffer + fl, count - fl);
363 }
364
365out:
366 count -= cailed;
350 367
351 rt->rt_write += count; 368 smp_wmb();
352 rt->rt_write %= rt->buffer_size; 369 rt->rt_write = (rt->rt_write + count) % rt->buffer_size;
370 smp_wmb();
371 mutex_unlock(&channel_wqs[index].mutex);
353 372
354 return(count); 373 return count;
355} 374}
356 375
357 376
@@ -403,7 +422,7 @@ static ssize_t file_read(struct file *file, char __user * buffer, size_t count,
403 return 0; // -EAGAIN makes cat whinge 422 return 0; // -EAGAIN makes cat whinge
404 } 423 }
405 424
406 return rtlx_read(minor, buffer, count, 1); 425 return rtlx_read(minor, buffer, count);
407} 426}
408 427
409static ssize_t file_write(struct file *file, const char __user * buffer, 428static ssize_t file_write(struct file *file, const char __user * buffer,
@@ -429,7 +448,7 @@ static ssize_t file_write(struct file *file, const char __user * buffer,
429 return ret; 448 return ret;
430 } 449 }
431 450
432 return rtlx_write(minor, (void *)buffer, count, 1); 451 return rtlx_write(minor, buffer, count);
433} 452}
434 453
435static const struct file_operations rtlx_fops = { 454static const struct file_operations rtlx_fops = {
@@ -468,6 +487,7 @@ static int rtlx_module_init(void)
468 init_waitqueue_head(&channel_wqs[i].rt_queue); 487 init_waitqueue_head(&channel_wqs[i].rt_queue);
469 init_waitqueue_head(&channel_wqs[i].lx_queue); 488 init_waitqueue_head(&channel_wqs[i].lx_queue);
470 atomic_set(&channel_wqs[i].in_open, 0); 489 atomic_set(&channel_wqs[i].in_open, 0);
490 mutex_init(&channel_wqs[i].mutex);
471 491
472 dev = device_create(mt_class, NULL, MKDEV(major, i), 492 dev = device_create(mt_class, NULL, MKDEV(major, i),
473 "%s%d", module_name, i); 493 "%s%d", module_name, i);
diff --git a/arch/mips/kernel/signal-common.h b/arch/mips/kernel/signal-common.h
index fdbdbdc65b54..297dfcb97524 100644
--- a/arch/mips/kernel/signal-common.h
+++ b/arch/mips/kernel/signal-common.h
@@ -31,4 +31,7 @@ extern void __user *get_sigframe(struct k_sigaction *ka, struct pt_regs *regs,
31 */ 31 */
32extern int install_sigtramp(unsigned int __user *tramp, unsigned int syscall); 32extern int install_sigtramp(unsigned int __user *tramp, unsigned int syscall);
33 33
34/* Check and clear pending FPU exceptions in saved CSR */
35extern int fpcsr_pending(unsigned int __user *fpcsr);
36
34#endif /* __SIGNAL_COMMON_H */ 37#endif /* __SIGNAL_COMMON_H */
diff --git a/arch/mips/kernel/signal.c b/arch/mips/kernel/signal.c
index f091786187a6..8c3c5a5789b0 100644
--- a/arch/mips/kernel/signal.c
+++ b/arch/mips/kernel/signal.c
@@ -82,6 +82,7 @@ int setup_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc)
82{ 82{
83 int err = 0; 83 int err = 0;
84 int i; 84 int i;
85 unsigned int used_math;
85 86
86 err |= __put_user(regs->cp0_epc, &sc->sc_pc); 87 err |= __put_user(regs->cp0_epc, &sc->sc_pc);
87 88
@@ -104,26 +105,53 @@ int setup_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc)
104 err |= __put_user(rddsp(DSP_MASK), &sc->sc_dsp); 105 err |= __put_user(rddsp(DSP_MASK), &sc->sc_dsp);
105 } 106 }
106 107
107 err |= __put_user(!!used_math(), &sc->sc_used_math); 108 used_math = !!used_math();
109 err |= __put_user(used_math, &sc->sc_used_math);
108 110
109 if (used_math()) { 111 if (used_math) {
110 /* 112 /*
111 * Save FPU state to signal context. Signal handler 113 * Save FPU state to signal context. Signal handler
112 * will "inherit" current FPU state. 114 * will "inherit" current FPU state.
113 */ 115 */
114 preempt_disable(); 116 own_fpu(1);
115 117 enable_fp_in_kernel();
116 if (!is_fpu_owner()) {
117 own_fpu();
118 restore_fp(current);
119 }
120 err |= save_fp_context(sc); 118 err |= save_fp_context(sc);
121 119 disable_fp_in_kernel();
122 preempt_enable();
123 } 120 }
124 return err; 121 return err;
125} 122}
126 123
124int fpcsr_pending(unsigned int __user *fpcsr)
125{
126 int err, sig = 0;
127 unsigned int csr, enabled;
128
129 err = __get_user(csr, fpcsr);
130 enabled = FPU_CSR_UNI_X | ((csr & FPU_CSR_ALL_E) << 5);
131 /*
132 * If the signal handler set some FPU exceptions, clear it and
133 * send SIGFPE.
134 */
135 if (csr & enabled) {
136 csr &= ~enabled;
137 err |= __put_user(csr, fpcsr);
138 sig = SIGFPE;
139 }
140 return err ?: sig;
141}
142
143static int
144check_and_restore_fp_context(struct sigcontext __user *sc)
145{
146 int err, sig;
147
148 err = sig = fpcsr_pending(&sc->sc_fpc_csr);
149 if (err > 0)
150 err = 0;
151 err |= restore_fp_context(sc);
152 return err ?: sig;
153}
154
127int restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc) 155int restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc)
128{ 156{
129 unsigned int used_math; 157 unsigned int used_math;
@@ -157,19 +185,18 @@ int restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc)
157 err |= __get_user(used_math, &sc->sc_used_math); 185 err |= __get_user(used_math, &sc->sc_used_math);
158 conditional_used_math(used_math); 186 conditional_used_math(used_math);
159 187
160 preempt_disable(); 188 if (used_math) {
161
162 if (used_math()) {
163 /* restore fpu context if we have used it before */ 189 /* restore fpu context if we have used it before */
164 own_fpu(); 190 own_fpu(0);
165 err |= restore_fp_context(sc); 191 enable_fp_in_kernel();
192 if (!err)
193 err = check_and_restore_fp_context(sc);
194 disable_fp_in_kernel();
166 } else { 195 } else {
167 /* signal handler may have used FPU. Give it up. */ 196 /* signal handler may have used FPU. Give it up. */
168 lose_fpu(); 197 lose_fpu(0);
169 } 198 }
170 199
171 preempt_enable();
172
173 return err; 200 return err;
174} 201}
175 202
@@ -332,6 +359,7 @@ asmlinkage void sys_sigreturn(nabi_no_regargs struct pt_regs regs)
332{ 359{
333 struct sigframe __user *frame; 360 struct sigframe __user *frame;
334 sigset_t blocked; 361 sigset_t blocked;
362 int sig;
335 363
336 frame = (struct sigframe __user *) regs.regs[29]; 364 frame = (struct sigframe __user *) regs.regs[29];
337 if (!access_ok(VERIFY_READ, frame, sizeof(*frame))) 365 if (!access_ok(VERIFY_READ, frame, sizeof(*frame)))
@@ -345,8 +373,11 @@ asmlinkage void sys_sigreturn(nabi_no_regargs struct pt_regs regs)
345 recalc_sigpending(); 373 recalc_sigpending();
346 spin_unlock_irq(&current->sighand->siglock); 374 spin_unlock_irq(&current->sighand->siglock);
347 375
348 if (restore_sigcontext(&regs, &frame->sf_sc)) 376 sig = restore_sigcontext(&regs, &frame->sf_sc);
377 if (sig < 0)
349 goto badframe; 378 goto badframe;
379 else if (sig)
380 force_sig(sig, current);
350 381
351 /* 382 /*
352 * Don't let your children do this ... 383 * Don't let your children do this ...
@@ -368,6 +399,7 @@ asmlinkage void sys_rt_sigreturn(nabi_no_regargs struct pt_regs regs)
368 struct rt_sigframe __user *frame; 399 struct rt_sigframe __user *frame;
369 sigset_t set; 400 sigset_t set;
370 stack_t st; 401 stack_t st;
402 int sig;
371 403
372 frame = (struct rt_sigframe __user *) regs.regs[29]; 404 frame = (struct rt_sigframe __user *) regs.regs[29];
373 if (!access_ok(VERIFY_READ, frame, sizeof(*frame))) 405 if (!access_ok(VERIFY_READ, frame, sizeof(*frame)))
@@ -381,8 +413,11 @@ asmlinkage void sys_rt_sigreturn(nabi_no_regargs struct pt_regs regs)
381 recalc_sigpending(); 413 recalc_sigpending();
382 spin_unlock_irq(&current->sighand->siglock); 414 spin_unlock_irq(&current->sighand->siglock);
383 415
384 if (restore_sigcontext(&regs, &frame->rs_uc.uc_mcontext)) 416 sig = restore_sigcontext(&regs, &frame->rs_uc.uc_mcontext);
417 if (sig < 0)
385 goto badframe; 418 goto badframe;
419 else if (sig)
420 force_sig(sig, current);
386 421
387 if (__copy_from_user(&st, &frame->rs_uc.uc_stack, sizeof(st))) 422 if (__copy_from_user(&st, &frame->rs_uc.uc_stack, sizeof(st)))
388 goto badframe; 423 goto badframe;
diff --git a/arch/mips/kernel/signal32.c b/arch/mips/kernel/signal32.c
index 19bbef001959..151fd2f0893a 100644
--- a/arch/mips/kernel/signal32.c
+++ b/arch/mips/kernel/signal32.c
@@ -181,6 +181,7 @@ static int setup_sigcontext32(struct pt_regs *regs,
181{ 181{
182 int err = 0; 182 int err = 0;
183 int i; 183 int i;
184 u32 used_math;
184 185
185 err |= __put_user(regs->cp0_epc, &sc->sc_pc); 186 err |= __put_user(regs->cp0_epc, &sc->sc_pc);
186 187
@@ -200,26 +201,34 @@ static int setup_sigcontext32(struct pt_regs *regs,
200 err |= __put_user(mflo3(), &sc->sc_lo3); 201 err |= __put_user(mflo3(), &sc->sc_lo3);
201 } 202 }
202 203
203 err |= __put_user(!!used_math(), &sc->sc_used_math); 204 used_math = !!used_math();
205 err |= __put_user(used_math, &sc->sc_used_math);
204 206
205 if (used_math()) { 207 if (used_math) {
206 /* 208 /*
207 * Save FPU state to signal context. Signal handler 209 * Save FPU state to signal context. Signal handler
208 * will "inherit" current FPU state. 210 * will "inherit" current FPU state.
209 */ 211 */
210 preempt_disable(); 212 own_fpu(1);
211 213 enable_fp_in_kernel();
212 if (!is_fpu_owner()) {
213 own_fpu();
214 restore_fp(current);
215 }
216 err |= save_fp_context32(sc); 214 err |= save_fp_context32(sc);
217 215 disable_fp_in_kernel();
218 preempt_enable();
219 } 216 }
220 return err; 217 return err;
221} 218}
222 219
220static int
221check_and_restore_fp_context32(struct sigcontext32 __user *sc)
222{
223 int err, sig;
224
225 err = sig = fpcsr_pending(&sc->sc_fpc_csr);
226 if (err > 0)
227 err = 0;
228 err |= restore_fp_context32(sc);
229 return err ?: sig;
230}
231
223static int restore_sigcontext32(struct pt_regs *regs, 232static int restore_sigcontext32(struct pt_regs *regs,
224 struct sigcontext32 __user *sc) 233 struct sigcontext32 __user *sc)
225{ 234{
@@ -250,19 +259,18 @@ static int restore_sigcontext32(struct pt_regs *regs,
250 err |= __get_user(used_math, &sc->sc_used_math); 259 err |= __get_user(used_math, &sc->sc_used_math);
251 conditional_used_math(used_math); 260 conditional_used_math(used_math);
252 261
253 preempt_disable(); 262 if (used_math) {
254
255 if (used_math()) {
256 /* restore fpu context if we have used it before */ 263 /* restore fpu context if we have used it before */
257 own_fpu(); 264 own_fpu(0);
258 err |= restore_fp_context32(sc); 265 enable_fp_in_kernel();
266 if (!err)
267 err = check_and_restore_fp_context32(sc);
268 disable_fp_in_kernel();
259 } else { 269 } else {
260 /* signal handler may have used FPU. Give it up. */ 270 /* signal handler may have used FPU. Give it up. */
261 lose_fpu(); 271 lose_fpu(0);
262 } 272 }
263 273
264 preempt_enable();
265
266 return err; 274 return err;
267} 275}
268 276
@@ -508,6 +516,7 @@ asmlinkage void sys32_sigreturn(nabi_no_regargs struct pt_regs regs)
508{ 516{
509 struct sigframe32 __user *frame; 517 struct sigframe32 __user *frame;
510 sigset_t blocked; 518 sigset_t blocked;
519 int sig;
511 520
512 frame = (struct sigframe32 __user *) regs.regs[29]; 521 frame = (struct sigframe32 __user *) regs.regs[29];
513 if (!access_ok(VERIFY_READ, frame, sizeof(*frame))) 522 if (!access_ok(VERIFY_READ, frame, sizeof(*frame)))
@@ -521,8 +530,11 @@ asmlinkage void sys32_sigreturn(nabi_no_regargs struct pt_regs regs)
521 recalc_sigpending(); 530 recalc_sigpending();
522 spin_unlock_irq(&current->sighand->siglock); 531 spin_unlock_irq(&current->sighand->siglock);
523 532
524 if (restore_sigcontext32(&regs, &frame->sf_sc)) 533 sig = restore_sigcontext32(&regs, &frame->sf_sc);
534 if (sig < 0)
525 goto badframe; 535 goto badframe;
536 else if (sig)
537 force_sig(sig, current);
526 538
527 /* 539 /*
528 * Don't let your children do this ... 540 * Don't let your children do this ...
@@ -545,6 +557,7 @@ asmlinkage void sys32_rt_sigreturn(nabi_no_regargs struct pt_regs regs)
545 sigset_t set; 557 sigset_t set;
546 stack_t st; 558 stack_t st;
547 s32 sp; 559 s32 sp;
560 int sig;
548 561
549 frame = (struct rt_sigframe32 __user *) regs.regs[29]; 562 frame = (struct rt_sigframe32 __user *) regs.regs[29];
550 if (!access_ok(VERIFY_READ, frame, sizeof(*frame))) 563 if (!access_ok(VERIFY_READ, frame, sizeof(*frame)))
@@ -558,8 +571,11 @@ asmlinkage void sys32_rt_sigreturn(nabi_no_regargs struct pt_regs regs)
558 recalc_sigpending(); 571 recalc_sigpending();
559 spin_unlock_irq(&current->sighand->siglock); 572 spin_unlock_irq(&current->sighand->siglock);
560 573
561 if (restore_sigcontext32(&regs, &frame->rs_uc.uc_mcontext)) 574 sig = restore_sigcontext32(&regs, &frame->rs_uc.uc_mcontext);
575 if (sig < 0)
562 goto badframe; 576 goto badframe;
577 else if (sig)
578 force_sig(sig, current);
563 579
564 /* The ucontext contains a stack32_t, so we must convert! */ 580 /* The ucontext contains a stack32_t, so we must convert! */
565 if (__get_user(sp, &frame->rs_uc.uc_stack.ss_sp)) 581 if (__get_user(sp, &frame->rs_uc.uc_stack.ss_sp))
diff --git a/arch/mips/kernel/signal_n32.c b/arch/mips/kernel/signal_n32.c
index ecf1f7ecaad9..a9202fa95987 100644
--- a/arch/mips/kernel/signal_n32.c
+++ b/arch/mips/kernel/signal_n32.c
@@ -127,6 +127,7 @@ asmlinkage void sysn32_rt_sigreturn(nabi_no_regargs struct pt_regs regs)
127 sigset_t set; 127 sigset_t set;
128 stack_t st; 128 stack_t st;
129 s32 sp; 129 s32 sp;
130 int sig;
130 131
131 frame = (struct rt_sigframe_n32 __user *) regs.regs[29]; 132 frame = (struct rt_sigframe_n32 __user *) regs.regs[29];
132 if (!access_ok(VERIFY_READ, frame, sizeof(*frame))) 133 if (!access_ok(VERIFY_READ, frame, sizeof(*frame)))
@@ -140,8 +141,11 @@ asmlinkage void sysn32_rt_sigreturn(nabi_no_regargs struct pt_regs regs)
140 recalc_sigpending(); 141 recalc_sigpending();
141 spin_unlock_irq(&current->sighand->siglock); 142 spin_unlock_irq(&current->sighand->siglock);
142 143
143 if (restore_sigcontext(&regs, &frame->rs_uc.uc_mcontext)) 144 sig = restore_sigcontext(&regs, &frame->rs_uc.uc_mcontext);
145 if (sig < 0)
144 goto badframe; 146 goto badframe;
147 else if (sig)
148 force_sig(sig, current);
145 149
146 /* The ucontext contains a stack32_t, so we must convert! */ 150 /* The ucontext contains a stack32_t, so we must convert! */
147 if (__get_user(sp, &frame->rs_uc.uc_stack.ss_sp)) 151 if (__get_user(sp, &frame->rs_uc.uc_stack.ss_sp))
diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c
index 18f56a9dbcfa..7d76a85422b2 100644
--- a/arch/mips/kernel/traps.c
+++ b/arch/mips/kernel/traps.c
@@ -610,16 +610,6 @@ asmlinkage void do_fpe(struct pt_regs *regs, unsigned long fcr31)
610 if (fcr31 & FPU_CSR_UNI_X) { 610 if (fcr31 & FPU_CSR_UNI_X) {
611 int sig; 611 int sig;
612 612
613 preempt_disable();
614
615#ifdef CONFIG_PREEMPT
616 if (!is_fpu_owner()) {
617 /* We might lose fpu before disabling preempt... */
618 own_fpu();
619 BUG_ON(!used_math());
620 restore_fp(current);
621 }
622#endif
623 /* 613 /*
624 * Unimplemented operation exception. If we've got the full 614 * Unimplemented operation exception. If we've got the full
625 * software emulator on-board, let's use it... 615 * software emulator on-board, let's use it...
@@ -630,18 +620,12 @@ asmlinkage void do_fpe(struct pt_regs *regs, unsigned long fcr31)
630 * register operands before invoking the emulator, which seems 620 * register operands before invoking the emulator, which seems
631 * a bit extreme for what should be an infrequent event. 621 * a bit extreme for what should be an infrequent event.
632 */ 622 */
633 save_fp(current);
634 /* Ensure 'resume' not overwrite saved fp context again. */ 623 /* Ensure 'resume' not overwrite saved fp context again. */
635 lose_fpu(); 624 lose_fpu(1);
636
637 preempt_enable();
638 625
639 /* Run the emulator */ 626 /* Run the emulator */
640 sig = fpu_emulator_cop1Handler (regs, &current->thread.fpu, 1); 627 sig = fpu_emulator_cop1Handler (regs, &current->thread.fpu, 1);
641 628
642 preempt_disable();
643
644 own_fpu(); /* Using the FPU again. */
645 /* 629 /*
646 * We can't allow the emulated instruction to leave any of 630 * We can't allow the emulated instruction to leave any of
647 * the cause bit set in $fcr31. 631 * the cause bit set in $fcr31.
@@ -649,9 +633,7 @@ asmlinkage void do_fpe(struct pt_regs *regs, unsigned long fcr31)
649 current->thread.fpu.fcr31 &= ~FPU_CSR_ALL_X; 633 current->thread.fpu.fcr31 &= ~FPU_CSR_ALL_X;
650 634
651 /* Restore the hardware register state */ 635 /* Restore the hardware register state */
652 restore_fp(current); 636 own_fpu(1); /* Using the FPU again. */
653
654 preempt_enable();
655 637
656 /* If something went wrong, signal */ 638 /* If something went wrong, signal */
657 if (sig) 639 if (sig)
@@ -775,12 +757,11 @@ asmlinkage void do_cpu(struct pt_regs *regs)
775{ 757{
776 unsigned int cpid; 758 unsigned int cpid;
777 759
778 die_if_kernel("do_cpu invoked from kernel context!", regs);
779
780 cpid = (regs->cp0_cause >> CAUSEB_CE) & 3; 760 cpid = (regs->cp0_cause >> CAUSEB_CE) & 3;
781 761
782 switch (cpid) { 762 switch (cpid) {
783 case 0: 763 case 0:
764 die_if_kernel("do_cpu invoked from kernel context!", regs);
784 if (!cpu_has_llsc) 765 if (!cpu_has_llsc)
785 if (!simulate_llsc(regs)) 766 if (!simulate_llsc(regs))
786 return; 767 return;
@@ -791,21 +772,30 @@ asmlinkage void do_cpu(struct pt_regs *regs)
791 break; 772 break;
792 773
793 case 1: 774 case 1:
794 preempt_disable(); 775 if (!test_thread_flag(TIF_ALLOW_FP_IN_KERNEL))
795 776 die_if_kernel("do_cpu invoked from kernel context!",
796 own_fpu(); 777 regs);
797 if (used_math()) { /* Using the FPU again. */ 778 if (used_math()) /* Using the FPU again. */
798 restore_fp(current); 779 own_fpu(1);
799 } else { /* First time FPU user. */ 780 else { /* First time FPU user. */
800 init_fpu(); 781 init_fpu();
801 set_used_math(); 782 set_used_math();
802 } 783 }
803 784
804 if (cpu_has_fpu) { 785 if (raw_cpu_has_fpu) {
805 preempt_enable(); 786 if (test_thread_flag(TIF_ALLOW_FP_IN_KERNEL)) {
787 local_irq_disable();
788 if (cpu_has_fpu)
789 regs->cp0_status |= ST0_CU1;
790 /*
791 * We must return without enabling
792 * interrupts to ensure keep FPU
793 * ownership until resume.
794 */
795 return;
796 }
806 } else { 797 } else {
807 int sig; 798 int sig;
808 preempt_enable();
809 sig = fpu_emulator_cop1Handler(regs, 799 sig = fpu_emulator_cop1Handler(regs,
810 &current->thread.fpu, 0); 800 &current->thread.fpu, 0);
811 if (sig) 801 if (sig)
@@ -1259,26 +1249,26 @@ static inline void mips_srs_init(void)
1259/* 1249/*
1260 * This is used by native signal handling 1250 * This is used by native signal handling
1261 */ 1251 */
1262asmlinkage int (*save_fp_context)(struct sigcontext *sc); 1252asmlinkage int (*save_fp_context)(struct sigcontext __user *sc);
1263asmlinkage int (*restore_fp_context)(struct sigcontext *sc); 1253asmlinkage int (*restore_fp_context)(struct sigcontext __user *sc);
1264 1254
1265extern asmlinkage int _save_fp_context(struct sigcontext *sc); 1255extern asmlinkage int _save_fp_context(struct sigcontext __user *sc);
1266extern asmlinkage int _restore_fp_context(struct sigcontext *sc); 1256extern asmlinkage int _restore_fp_context(struct sigcontext __user *sc);
1267 1257
1268extern asmlinkage int fpu_emulator_save_context(struct sigcontext *sc); 1258extern asmlinkage int fpu_emulator_save_context(struct sigcontext __user *sc);
1269extern asmlinkage int fpu_emulator_restore_context(struct sigcontext *sc); 1259extern asmlinkage int fpu_emulator_restore_context(struct sigcontext __user *sc);
1270 1260
1271#ifdef CONFIG_SMP 1261#ifdef CONFIG_SMP
1272static int smp_save_fp_context(struct sigcontext *sc) 1262static int smp_save_fp_context(struct sigcontext __user *sc)
1273{ 1263{
1274 return cpu_has_fpu 1264 return raw_cpu_has_fpu
1275 ? _save_fp_context(sc) 1265 ? _save_fp_context(sc)
1276 : fpu_emulator_save_context(sc); 1266 : fpu_emulator_save_context(sc);
1277} 1267}
1278 1268
1279static int smp_restore_fp_context(struct sigcontext *sc) 1269static int smp_restore_fp_context(struct sigcontext __user *sc)
1280{ 1270{
1281 return cpu_has_fpu 1271 return raw_cpu_has_fpu
1282 ? _restore_fp_context(sc) 1272 ? _restore_fp_context(sc)
1283 : fpu_emulator_restore_context(sc); 1273 : fpu_emulator_restore_context(sc);
1284} 1274}
@@ -1306,14 +1296,14 @@ static inline void signal_init(void)
1306/* 1296/*
1307 * This is used by 32-bit signal stuff on the 64-bit kernel 1297 * This is used by 32-bit signal stuff on the 64-bit kernel
1308 */ 1298 */
1309asmlinkage int (*save_fp_context32)(struct sigcontext32 *sc); 1299asmlinkage int (*save_fp_context32)(struct sigcontext32 __user *sc);
1310asmlinkage int (*restore_fp_context32)(struct sigcontext32 *sc); 1300asmlinkage int (*restore_fp_context32)(struct sigcontext32 __user *sc);
1311 1301
1312extern asmlinkage int _save_fp_context32(struct sigcontext32 *sc); 1302extern asmlinkage int _save_fp_context32(struct sigcontext32 __user *sc);
1313extern asmlinkage int _restore_fp_context32(struct sigcontext32 *sc); 1303extern asmlinkage int _restore_fp_context32(struct sigcontext32 __user *sc);
1314 1304
1315extern asmlinkage int fpu_emulator_save_context32(struct sigcontext32 *sc); 1305extern asmlinkage int fpu_emulator_save_context32(struct sigcontext32 __user *sc);
1316extern asmlinkage int fpu_emulator_restore_context32(struct sigcontext32 *sc); 1306extern asmlinkage int fpu_emulator_restore_context32(struct sigcontext32 __user *sc);
1317 1307
1318static inline void signal32_init(void) 1308static inline void signal32_init(void)
1319{ 1309{
diff --git a/arch/mips/math-emu/kernel_linkage.c b/arch/mips/math-emu/kernel_linkage.c
index 5b3390f64917..ed49ef01ac53 100644
--- a/arch/mips/math-emu/kernel_linkage.c
+++ b/arch/mips/math-emu/kernel_linkage.c
@@ -51,7 +51,7 @@ void fpu_emulator_init_fpu(void)
51 * with appropriate macros from uaccess.h 51 * with appropriate macros from uaccess.h
52 */ 52 */
53 53
54int fpu_emulator_save_context(struct sigcontext *sc) 54int fpu_emulator_save_context(struct sigcontext __user *sc)
55{ 55{
56 int i; 56 int i;
57 int err = 0; 57 int err = 0;
@@ -65,7 +65,7 @@ int fpu_emulator_save_context(struct sigcontext *sc)
65 return err; 65 return err;
66} 66}
67 67
68int fpu_emulator_restore_context(struct sigcontext *sc) 68int fpu_emulator_restore_context(struct sigcontext __user *sc)
69{ 69{
70 int i; 70 int i;
71 int err = 0; 71 int err = 0;
@@ -84,7 +84,7 @@ int fpu_emulator_restore_context(struct sigcontext *sc)
84 * This is the o32 version 84 * This is the o32 version
85 */ 85 */
86 86
87int fpu_emulator_save_context32(struct sigcontext32 *sc) 87int fpu_emulator_save_context32(struct sigcontext32 __user *sc)
88{ 88{
89 int i; 89 int i;
90 int err = 0; 90 int err = 0;
@@ -98,7 +98,7 @@ int fpu_emulator_save_context32(struct sigcontext32 *sc)
98 return err; 98 return err;
99} 99}
100 100
101int fpu_emulator_restore_context32(struct sigcontext32 *sc) 101int fpu_emulator_restore_context32(struct sigcontext32 __user *sc)
102{ 102{
103 int i; 103 int i;
104 int err = 0; 104 int err = 0;
diff --git a/arch/mips/oprofile/op_model_mipsxx.c b/arch/mips/oprofile/op_model_mipsxx.c
index 9d08608aaa51..69a8bcfe72b2 100644
--- a/arch/mips/oprofile/op_model_mipsxx.c
+++ b/arch/mips/oprofile/op_model_mipsxx.c
@@ -74,13 +74,13 @@ static inline void w_c0_ ## r ## n(unsigned int value) \
74 74
75__define_perf_accessors(perfcntr, 0, 2) 75__define_perf_accessors(perfcntr, 0, 2)
76__define_perf_accessors(perfcntr, 1, 3) 76__define_perf_accessors(perfcntr, 1, 3)
77__define_perf_accessors(perfcntr, 2, 2) 77__define_perf_accessors(perfcntr, 2, 0)
78__define_perf_accessors(perfcntr, 3, 2) 78__define_perf_accessors(perfcntr, 3, 1)
79 79
80__define_perf_accessors(perfctrl, 0, 2) 80__define_perf_accessors(perfctrl, 0, 2)
81__define_perf_accessors(perfctrl, 1, 3) 81__define_perf_accessors(perfctrl, 1, 3)
82__define_perf_accessors(perfctrl, 2, 2) 82__define_perf_accessors(perfctrl, 2, 0)
83__define_perf_accessors(perfctrl, 3, 2) 83__define_perf_accessors(perfctrl, 3, 1)
84 84
85struct op_mips_model op_model_mipsxx_ops; 85struct op_mips_model op_model_mipsxx_ops;
86 86
@@ -97,7 +97,6 @@ static void mipsxx_reg_setup(struct op_counter_config *ctr)
97 int i; 97 int i;
98 98
99 /* Compute the performance counter control word. */ 99 /* Compute the performance counter control word. */
100 /* For now count kernel and user mode */
101 for (i = 0; i < counters; i++) { 100 for (i = 0; i < counters; i++) {
102 reg.control[i] = 0; 101 reg.control[i] = 0;
103 reg.counter[i] = 0; 102 reg.counter[i] = 0;
@@ -234,9 +233,6 @@ static inline int n_counters(void)
234 counters = __n_counters(); 233 counters = __n_counters();
235 } 234 }
236 235
237#ifdef CONFIG_MIPS_MT_SMP
238 counters >> 1;
239#endif
240 return counters; 236 return counters;
241} 237}
242 238
@@ -270,6 +266,10 @@ static int __init mipsxx_init(void)
270 266
271 reset_counters(counters); 267 reset_counters(counters);
272 268
269#ifdef CONFIG_MIPS_MT_SMP
270 counters >>= 1;
271#endif
272
273 op_model_mipsxx_ops.num_counters = counters; 273 op_model_mipsxx_ops.num_counters = counters;
274 switch (current_cpu_data.cputype) { 274 switch (current_cpu_data.cputype) {
275 case CPU_20KC: 275 case CPU_20KC:
@@ -326,7 +326,11 @@ static int __init mipsxx_init(void)
326 326
327static void mipsxx_exit(void) 327static void mipsxx_exit(void)
328{ 328{
329 reset_counters(op_model_mipsxx_ops.num_counters); 329 int counters = op_model_mipsxx_ops.num_counters;
330#ifdef CONFIG_MIPS_MT_SMP
331 counters <<= 1;
332#endif
333 reset_counters(counters);
330 334
331 perf_irq = null_perf_irq; 335 perf_irq = null_perf_irq;
332} 336}
diff --git a/arch/mips/philips/pnx8550/common/int.c b/arch/mips/philips/pnx8550/common/int.c
index d48665ebd33c..b1c4805a0b92 100644
--- a/arch/mips/philips/pnx8550/common/int.c
+++ b/arch/mips/philips/pnx8550/common/int.c
@@ -204,19 +204,7 @@ void __init arch_init_irq(void)
204 * Note, PCI INTA is active low on the bus, but inverted 204 * Note, PCI INTA is active low on the bus, but inverted
205 * in the GIC, so to us it's active high. 205 * in the GIC, so to us it's active high.
206 */ 206 */
207#ifdef CONFIG_PNX8550_V2PCI 207 PNX8550_GIC_REQ(i - PNX8550_INT_GIC_MIN) = 0x1E000000;
208 if (gic_int_line == (PNX8550_INT_GPIO0 - PNX8550_INT_GIC_MIN)) {
209 /* PCI INT through gpio 8, which is setup in
210 * pnx8550_setup.c and routed to GPIO
211 * Interrupt Level 0 (GPIO Connection 58).
212 * Set it active low. */
213
214 PNX8550_GIC_REQ(gic_int_line) = 0x1E020000;
215 } else
216#endif
217 {
218 PNX8550_GIC_REQ(i - PNX8550_INT_GIC_MIN) = 0x1E000000;
219 }
220 208
221 /* mask/priority is still 0 so we will not get any 209 /* mask/priority is still 0 so we will not get any
222 * interrupts until it is unmasked */ 210 * interrupts until it is unmasked */
diff --git a/arch/powerpc/configs/cell_defconfig b/arch/powerpc/configs/cell_defconfig
index 24367319ce24..cf7e316ad4f6 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.20-rc5 3# Linux kernel version: 2.6.21-rc3
4# Mon Jan 22 22:12:56 2007 4# Fri Mar 9 23:34:53 2007
5# 5#
6CONFIG_PPC64=y 6CONFIG_PPC64=y
7CONFIG_64BIT=y 7CONFIG_64BIT=y
@@ -61,6 +61,7 @@ CONFIG_LOCALVERSION_AUTO=y
61CONFIG_SWAP=y 61CONFIG_SWAP=y
62CONFIG_SYSVIPC=y 62CONFIG_SYSVIPC=y
63# CONFIG_IPC_NS is not set 63# CONFIG_IPC_NS is not set
64CONFIG_SYSVIPC_SYSCTL=y
64# CONFIG_POSIX_MQUEUE is not set 65# CONFIG_POSIX_MQUEUE is not set
65# CONFIG_BSD_PROCESS_ACCT is not set 66# CONFIG_BSD_PROCESS_ACCT is not set
66# CONFIG_TASKSTATS is not set 67# CONFIG_TASKSTATS is not set
@@ -71,6 +72,7 @@ CONFIG_IKCONFIG_PROC=y
71CONFIG_CPUSETS=y 72CONFIG_CPUSETS=y
72CONFIG_SYSFS_DEPRECATED=y 73CONFIG_SYSFS_DEPRECATED=y
73# CONFIG_RELAY is not set 74# CONFIG_RELAY is not set
75CONFIG_BLK_DEV_INITRD=y
74CONFIG_INITRAMFS_SOURCE="" 76CONFIG_INITRAMFS_SOURCE=""
75CONFIG_CC_OPTIMIZE_FOR_SIZE=y 77CONFIG_CC_OPTIMIZE_FOR_SIZE=y
76CONFIG_SYSCTL=y 78CONFIG_SYSCTL=y
@@ -133,6 +135,7 @@ CONFIG_PPC_MULTIPLATFORM=y
133# CONFIG_PPC_PSERIES is not set 135# CONFIG_PPC_PSERIES is not set
134# CONFIG_PPC_ISERIES is not set 136# CONFIG_PPC_ISERIES is not set
135# CONFIG_PPC_MPC52xx is not set 137# CONFIG_PPC_MPC52xx is not set
138# CONFIG_PPC_MPC5200 is not set
136# CONFIG_PPC_PMAC is not set 139# CONFIG_PPC_PMAC is not set
137# CONFIG_PPC_MAPLE is not set 140# CONFIG_PPC_MAPLE is not set
138# CONFIG_PPC_PASEMI is not set 141# CONFIG_PPC_PASEMI is not set
@@ -140,8 +143,10 @@ CONFIG_PPC_CELL=y
140CONFIG_PPC_CELL_NATIVE=y 143CONFIG_PPC_CELL_NATIVE=y
141CONFIG_PPC_IBM_CELL_BLADE=y 144CONFIG_PPC_IBM_CELL_BLADE=y
142CONFIG_PPC_PS3=y 145CONFIG_PPC_PS3=y
146CONFIG_PPC_CELLEB=y
143CONFIG_PPC_NATIVE=y 147CONFIG_PPC_NATIVE=y
144CONFIG_UDBG_RTAS_CONSOLE=y 148CONFIG_UDBG_RTAS_CONSOLE=y
149CONFIG_PPC_UDBG_BEAT=y
145# CONFIG_U3_DART is not set 150# CONFIG_U3_DART is not set
146CONFIG_PPC_RTAS=y 151CONFIG_PPC_RTAS=y
147# CONFIG_RTAS_ERROR_LOGGING is not set 152# CONFIG_RTAS_ERROR_LOGGING is not set
@@ -181,10 +186,13 @@ CONFIG_CBE_CPUFREQ=m
181# 186#
182# PS3 Platform Options 187# PS3 Platform Options
183# 188#
189# CONFIG_PS3_ADVANCED is not set
184CONFIG_PS3_HTAB_SIZE=20 190CONFIG_PS3_HTAB_SIZE=20
185# CONFIG_PS3_DYNAMIC_DMA is not set 191# CONFIG_PS3_DYNAMIC_DMA is not set
186CONFIG_PS3_USE_LPAR_ADDR=y 192CONFIG_PS3_USE_LPAR_ADDR=y
187CONFIG_PS3_VUART=y 193CONFIG_PS3_VUART=y
194CONFIG_PS3_PS3AV=y
195CONFIG_PS3_SYS_MANAGER=y
188 196
189# 197#
190# Kernel options 198# Kernel options
@@ -226,6 +234,7 @@ CONFIG_MEMORY_HOTPLUG_SPARSE=y
226CONFIG_SPLIT_PTLOCK_CPUS=4 234CONFIG_SPLIT_PTLOCK_CPUS=4
227CONFIG_MIGRATION=y 235CONFIG_MIGRATION=y
228CONFIG_RESOURCES_64BIT=y 236CONFIG_RESOURCES_64BIT=y
237CONFIG_ZONE_DMA_FLAG=1
229CONFIG_ARCH_MEMORY_PROBE=y 238CONFIG_ARCH_MEMORY_PROBE=y
230CONFIG_NODES_SPAN_OTHER_NODES=y 239CONFIG_NODES_SPAN_OTHER_NODES=y
231CONFIG_PPC_64K_PAGES=y 240CONFIG_PPC_64K_PAGES=y
@@ -239,6 +248,7 @@ CONFIG_ISA_DMA_API=y
239# 248#
240# Bus options 249# Bus options
241# 250#
251CONFIG_ZONE_DMA=y
242CONFIG_GENERIC_ISA_DMA=y 252CONFIG_GENERIC_ISA_DMA=y
243# CONFIG_MPIC_WEIRD is not set 253# CONFIG_MPIC_WEIRD is not set
244# CONFIG_PPC_I8259 is not set 254# CONFIG_PPC_I8259 is not set
@@ -274,6 +284,7 @@ CONFIG_UNIX=y
274CONFIG_XFRM=y 284CONFIG_XFRM=y
275# CONFIG_XFRM_USER is not set 285# CONFIG_XFRM_USER is not set
276# CONFIG_XFRM_SUB_POLICY is not set 286# CONFIG_XFRM_SUB_POLICY is not set
287# CONFIG_XFRM_MIGRATE is not set
277# CONFIG_NET_KEY is not set 288# CONFIG_NET_KEY is not set
278CONFIG_INET=y 289CONFIG_INET=y
279CONFIG_IP_MULTICAST=y 290CONFIG_IP_MULTICAST=y
@@ -340,6 +351,7 @@ CONFIG_NETFILTER_XT_TARGET_DSCP=m
340CONFIG_NETFILTER_XT_TARGET_MARK=m 351CONFIG_NETFILTER_XT_TARGET_MARK=m
341CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m 352CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
342CONFIG_NETFILTER_XT_TARGET_NFLOG=m 353CONFIG_NETFILTER_XT_TARGET_NFLOG=m
354CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
343CONFIG_NETFILTER_XT_MATCH_COMMENT=m 355CONFIG_NETFILTER_XT_MATCH_COMMENT=m
344CONFIG_NETFILTER_XT_MATCH_DCCP=m 356CONFIG_NETFILTER_XT_MATCH_DCCP=m
345CONFIG_NETFILTER_XT_MATCH_DSCP=m 357CONFIG_NETFILTER_XT_MATCH_DSCP=m
@@ -376,7 +388,6 @@ CONFIG_IP_NF_FILTER=m
376CONFIG_IP_NF_TARGET_REJECT=m 388CONFIG_IP_NF_TARGET_REJECT=m
377CONFIG_IP_NF_TARGET_LOG=m 389CONFIG_IP_NF_TARGET_LOG=m
378CONFIG_IP_NF_TARGET_ULOG=m 390CONFIG_IP_NF_TARGET_ULOG=m
379CONFIG_IP_NF_TARGET_TCPMSS=m
380CONFIG_IP_NF_MANGLE=m 391CONFIG_IP_NF_MANGLE=m
381CONFIG_IP_NF_TARGET_TOS=m 392CONFIG_IP_NF_TARGET_TOS=m
382CONFIG_IP_NF_TARGET_ECN=m 393CONFIG_IP_NF_TARGET_ECN=m
@@ -444,6 +455,7 @@ CONFIG_STANDALONE=y
444CONFIG_PREVENT_FIRMWARE_BUILD=y 455CONFIG_PREVENT_FIRMWARE_BUILD=y
445CONFIG_FW_LOADER=y 456CONFIG_FW_LOADER=y
446# CONFIG_DEBUG_DRIVER is not set 457# CONFIG_DEBUG_DRIVER is not set
458# CONFIG_DEBUG_DEVRES is not set
447# CONFIG_SYS_HYPERVISOR is not set 459# CONFIG_SYS_HYPERVISOR is not set
448 460
449# 461#
@@ -464,6 +476,7 @@ CONFIG_FW_LOADER=y
464# 476#
465# Plug and Play support 477# Plug and Play support
466# 478#
479# CONFIG_PNPACPI is not set
467 480
468# 481#
469# Block devices 482# Block devices
@@ -483,7 +496,6 @@ CONFIG_BLK_DEV_RAM=y
483CONFIG_BLK_DEV_RAM_COUNT=16 496CONFIG_BLK_DEV_RAM_COUNT=16
484CONFIG_BLK_DEV_RAM_SIZE=131072 497CONFIG_BLK_DEV_RAM_SIZE=131072
485CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 498CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
486CONFIG_BLK_DEV_INITRD=y
487# CONFIG_CDROM_PKTCDVD is not set 499# CONFIG_CDROM_PKTCDVD is not set
488# CONFIG_ATA_OVER_ETH is not set 500# CONFIG_ATA_OVER_ETH is not set
489 501
@@ -537,6 +549,7 @@ CONFIG_BLK_DEV_AEC62XX=y
537# CONFIG_BLK_DEV_JMICRON is not set 549# CONFIG_BLK_DEV_JMICRON is not set
538# CONFIG_BLK_DEV_SC1200 is not set 550# CONFIG_BLK_DEV_SC1200 is not set
539# CONFIG_BLK_DEV_PIIX is not set 551# CONFIG_BLK_DEV_PIIX is not set
552# CONFIG_BLK_DEV_IT8213 is not set
540# CONFIG_BLK_DEV_IT821X is not set 553# CONFIG_BLK_DEV_IT821X is not set
541# CONFIG_BLK_DEV_NS87415 is not set 554# CONFIG_BLK_DEV_NS87415 is not set
542# CONFIG_BLK_DEV_PDC202XX_OLD is not set 555# CONFIG_BLK_DEV_PDC202XX_OLD is not set
@@ -547,6 +560,8 @@ CONFIG_BLK_DEV_SIIMAGE=y
547# CONFIG_BLK_DEV_SLC90E66 is not set 560# CONFIG_BLK_DEV_SLC90E66 is not set
548# CONFIG_BLK_DEV_TRM290 is not set 561# CONFIG_BLK_DEV_TRM290 is not set
549# CONFIG_BLK_DEV_VIA82CXXX is not set 562# CONFIG_BLK_DEV_VIA82CXXX is not set
563# CONFIG_BLK_DEV_TC86C001 is not set
564CONFIG_BLK_DEV_IDE_CELLEB=y
550# CONFIG_IDE_ARM is not set 565# CONFIG_IDE_ARM is not set
551CONFIG_BLK_DEV_IDEDMA=y 566CONFIG_BLK_DEV_IDEDMA=y
552# CONFIG_IDEDMA_IVB is not set 567# CONFIG_IDEDMA_IVB is not set
@@ -557,7 +572,7 @@ CONFIG_IDEDMA_AUTO=y
557# SCSI device support 572# SCSI device support
558# 573#
559# CONFIG_RAID_ATTRS is not set 574# CONFIG_RAID_ATTRS is not set
560CONFIG_SCSI=m 575CONFIG_SCSI=y
561# CONFIG_SCSI_TGT is not set 576# CONFIG_SCSI_TGT is not set
562# CONFIG_SCSI_NETLINK is not set 577# CONFIG_SCSI_NETLINK is not set
563CONFIG_SCSI_PROC_FS=y 578CONFIG_SCSI_PROC_FS=y
@@ -565,12 +580,12 @@ CONFIG_SCSI_PROC_FS=y
565# 580#
566# SCSI support type (disk, tape, CD-ROM) 581# SCSI support type (disk, tape, CD-ROM)
567# 582#
568CONFIG_BLK_DEV_SD=m 583CONFIG_BLK_DEV_SD=y
569# CONFIG_CHR_DEV_ST is not set 584# CONFIG_CHR_DEV_ST is not set
570# CONFIG_CHR_DEV_OSST is not set 585# CONFIG_CHR_DEV_OSST is not set
571CONFIG_BLK_DEV_SR=m 586CONFIG_BLK_DEV_SR=m
572# CONFIG_BLK_DEV_SR_VENDOR is not set 587# CONFIG_BLK_DEV_SR_VENDOR is not set
573CONFIG_CHR_DEV_SG=m 588CONFIG_CHR_DEV_SG=y
574# CONFIG_CHR_DEV_SCH is not set 589# CONFIG_CHR_DEV_SCH is not set
575 590
576# 591#
@@ -587,7 +602,7 @@ CONFIG_CHR_DEV_SG=m
587# CONFIG_SCSI_SPI_ATTRS is not set 602# CONFIG_SCSI_SPI_ATTRS is not set
588# CONFIG_SCSI_FC_ATTRS is not set 603# CONFIG_SCSI_FC_ATTRS is not set
589# CONFIG_SCSI_ISCSI_ATTRS is not set 604# CONFIG_SCSI_ISCSI_ATTRS is not set
590# CONFIG_SCSI_SAS_ATTRS is not set 605CONFIG_SCSI_SAS_ATTRS=y
591# CONFIG_SCSI_SAS_LIBSAS is not set 606# CONFIG_SCSI_SAS_LIBSAS is not set
592 607
593# 608#
@@ -617,6 +632,7 @@ CONFIG_CHR_DEV_SG=m
617# CONFIG_SCSI_INIA100 is not set 632# CONFIG_SCSI_INIA100 is not set
618# CONFIG_SCSI_STEX is not set 633# CONFIG_SCSI_STEX is not set
619# CONFIG_SCSI_SYM53C8XX_2 is not set 634# CONFIG_SCSI_SYM53C8XX_2 is not set
635# CONFIG_SCSI_IPR is not set
620# CONFIG_SCSI_QLOGIC_1280 is not set 636# CONFIG_SCSI_QLOGIC_1280 is not set
621# CONFIG_SCSI_QLA_FC is not set 637# CONFIG_SCSI_QLA_FC is not set
622# CONFIG_SCSI_QLA_ISCSI is not set 638# CONFIG_SCSI_QLA_ISCSI is not set
@@ -629,7 +645,60 @@ CONFIG_CHR_DEV_SG=m
629# 645#
630# Serial ATA (prod) and Parallel ATA (experimental) drivers 646# Serial ATA (prod) and Parallel ATA (experimental) drivers
631# 647#
632# CONFIG_ATA is not set 648CONFIG_ATA=y
649# CONFIG_ATA_NONSTANDARD is not set
650# CONFIG_SATA_AHCI is not set
651# CONFIG_SATA_SVW is not set
652# CONFIG_ATA_PIIX is not set
653# CONFIG_SATA_MV is not set
654# CONFIG_SATA_NV is not set
655# CONFIG_PDC_ADMA is not set
656# CONFIG_SATA_QSTOR is not set
657CONFIG_SATA_PROMISE=y
658# CONFIG_SATA_SX4 is not set
659# CONFIG_SATA_SIL is not set
660# CONFIG_SATA_SIL24 is not set
661# CONFIG_SATA_SIS is not set
662# CONFIG_SATA_ULI is not set
663# CONFIG_SATA_VIA is not set
664# CONFIG_SATA_VITESSE is not set
665# CONFIG_SATA_INIC162X is not set
666# CONFIG_PATA_ALI is not set
667# CONFIG_PATA_AMD is not set
668# CONFIG_PATA_ARTOP is not set
669# CONFIG_PATA_ATIIXP is not set
670# CONFIG_PATA_CMD64X is not set
671# CONFIG_PATA_CS5520 is not set
672# CONFIG_PATA_CS5530 is not set
673# CONFIG_PATA_CYPRESS is not set
674# CONFIG_PATA_EFAR is not set
675# CONFIG_ATA_GENERIC is not set
676# CONFIG_PATA_HPT366 is not set
677# CONFIG_PATA_HPT37X is not set
678# CONFIG_PATA_HPT3X2N is not set
679# CONFIG_PATA_HPT3X3 is not set
680# CONFIG_PATA_IT821X is not set
681# CONFIG_PATA_IT8213 is not set
682# CONFIG_PATA_JMICRON is not set
683# CONFIG_PATA_TRIFLEX is not set
684# CONFIG_PATA_MARVELL is not set
685# CONFIG_PATA_MPIIX is not set
686# CONFIG_PATA_OLDPIIX is not set
687# CONFIG_PATA_NETCELL is not set
688# CONFIG_PATA_NS87410 is not set
689# CONFIG_PATA_OPTI is not set
690# CONFIG_PATA_OPTIDMA is not set
691# CONFIG_PATA_PDC_OLD is not set
692# CONFIG_PATA_RADISYS is not set
693# CONFIG_PATA_RZ1000 is not set
694# CONFIG_PATA_SC1200 is not set
695# CONFIG_PATA_SERVERWORKS is not set
696CONFIG_PATA_PDC2027X=m
697# CONFIG_PATA_SIL680 is not set
698# CONFIG_PATA_SIS is not set
699# CONFIG_PATA_VIA is not set
700# CONFIG_PATA_WINBOND is not set
701# CONFIG_PATA_SCC is not set
633 702
634# 703#
635# Multi-device support (RAID and LVM) 704# Multi-device support (RAID and LVM)
@@ -655,10 +724,12 @@ CONFIG_DM_MULTIPATH=m
655# 724#
656# Fusion MPT device support 725# Fusion MPT device support
657# 726#
658# CONFIG_FUSION is not set 727CONFIG_FUSION=y
659# CONFIG_FUSION_SPI is not set 728# CONFIG_FUSION_SPI is not set
660# CONFIG_FUSION_FC is not set 729# CONFIG_FUSION_FC is not set
661# CONFIG_FUSION_SAS is not set 730CONFIG_FUSION_SAS=y
731CONFIG_FUSION_MAX_SGE=128
732# CONFIG_FUSION_CTL is not set
662 733
663# 734#
664# IEEE 1394 (FireWire) support 735# IEEE 1394 (FireWire) support
@@ -732,15 +803,18 @@ CONFIG_TIGON3=y
732# CONFIG_BNX2 is not set 803# CONFIG_BNX2 is not set
733CONFIG_SPIDER_NET=y 804CONFIG_SPIDER_NET=y
734# CONFIG_QLA3XXX is not set 805# CONFIG_QLA3XXX is not set
806# CONFIG_ATL1 is not set
735 807
736# 808#
737# Ethernet (10000 Mbit) 809# Ethernet (10000 Mbit)
738# 810#
739# CONFIG_CHELSIO_T1 is not set 811# CONFIG_CHELSIO_T1 is not set
812# CONFIG_CHELSIO_T3 is not set
740# CONFIG_IXGB is not set 813# CONFIG_IXGB is not set
741# CONFIG_S2IO is not set 814# CONFIG_S2IO is not set
742# CONFIG_MYRI10GE is not set 815# CONFIG_MYRI10GE is not set
743# CONFIG_NETXEN_NIC is not set 816# CONFIG_NETXEN_NIC is not set
817# CONFIG_PASEMI_MAC is not set
744 818
745# 819#
746# Token Ring devices 820# Token Ring devices
@@ -853,16 +927,27 @@ CONFIG_SERIAL_8250_RUNTIME_UARTS=4
853# 927#
854CONFIG_SERIAL_CORE=y 928CONFIG_SERIAL_CORE=y
855CONFIG_SERIAL_CORE_CONSOLE=y 929CONFIG_SERIAL_CORE_CONSOLE=y
930CONFIG_SERIAL_TXX9=y
931CONFIG_HAS_TXX9_SERIAL=y
932CONFIG_SERIAL_TXX9_NR_UARTS=2
933CONFIG_SERIAL_TXX9_CONSOLE=y
856# CONFIG_SERIAL_JSM is not set 934# CONFIG_SERIAL_JSM is not set
935CONFIG_SERIAL_OF_PLATFORM=y
857CONFIG_UNIX98_PTYS=y 936CONFIG_UNIX98_PTYS=y
858# CONFIG_LEGACY_PTYS is not set 937# CONFIG_LEGACY_PTYS is not set
859CONFIG_HVC_DRIVER=y 938CONFIG_HVC_DRIVER=y
860CONFIG_HVC_RTAS=y 939CONFIG_HVC_RTAS=y
940# CONFIG_HVC_BEAT is not set
861 941
862# 942#
863# IPMI 943# IPMI
864# 944#
865# CONFIG_IPMI_HANDLER is not set 945CONFIG_IPMI_HANDLER=m
946# CONFIG_IPMI_PANIC_EVENT is not set
947CONFIG_IPMI_DEVICE_INTERFACE=m
948CONFIG_IPMI_SI=m
949CONFIG_IPMI_WATCHDOG=m
950CONFIG_IPMI_POWEROFF=m
866 951
867# 952#
868# Watchdog Cards 953# Watchdog Cards
@@ -874,7 +959,7 @@ CONFIG_WATCHDOG=y
874# Watchdog Device Drivers 959# Watchdog Device Drivers
875# 960#
876# CONFIG_SOFT_WATCHDOG is not set 961# CONFIG_SOFT_WATCHDOG is not set
877CONFIG_WATCHDOG_RTAS=y 962# CONFIG_WATCHDOG_RTAS is not set
878 963
879# 964#
880# PCI-based Watchdog Cards 965# PCI-based Watchdog Cards
@@ -929,6 +1014,7 @@ CONFIG_I2C_ALGOBIT=y
929# CONFIG_I2C_NFORCE2 is not set 1014# CONFIG_I2C_NFORCE2 is not set
930# CONFIG_I2C_OCORES is not set 1015# CONFIG_I2C_OCORES is not set
931# CONFIG_I2C_PARPORT_LIGHT is not set 1016# CONFIG_I2C_PARPORT_LIGHT is not set
1017# CONFIG_I2C_PASEMI is not set
932# CONFIG_I2C_PROSAVAGE is not set 1018# CONFIG_I2C_PROSAVAGE is not set
933# CONFIG_I2C_SAVAGE4 is not set 1019# CONFIG_I2C_SAVAGE4 is not set
934# CONFIG_I2C_SIS5595 is not set 1020# CONFIG_I2C_SIS5595 is not set
@@ -973,6 +1059,11 @@ CONFIG_I2C_ALGOBIT=y
973# CONFIG_HWMON_VID is not set 1059# CONFIG_HWMON_VID is not set
974 1060
975# 1061#
1062# Multifunction device drivers
1063#
1064# CONFIG_MFD_SM501 is not set
1065
1066#
976# Multimedia devices 1067# Multimedia devices
977# 1068#
978# CONFIG_VIDEO_DEV is not set 1069# CONFIG_VIDEO_DEV is not set
@@ -986,7 +1077,7 @@ CONFIG_I2C_ALGOBIT=y
986# 1077#
987# Graphics support 1078# Graphics support
988# 1079#
989CONFIG_FIRMWARE_EDID=y 1080# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
990# CONFIG_FB is not set 1081# CONFIG_FB is not set
991# CONFIG_FB_IBM_GXT4500 is not set 1082# CONFIG_FB_IBM_GXT4500 is not set
992 1083
@@ -995,7 +1086,6 @@ CONFIG_FIRMWARE_EDID=y
995# 1086#
996# CONFIG_VGA_CONSOLE is not set 1087# CONFIG_VGA_CONSOLE is not set
997CONFIG_DUMMY_CONSOLE=y 1088CONFIG_DUMMY_CONSOLE=y
998# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
999 1089
1000# 1090#
1001# Sound 1091# Sound
@@ -1006,6 +1096,7 @@ CONFIG_DUMMY_CONSOLE=y
1006# HID Devices 1096# HID Devices
1007# 1097#
1008CONFIG_HID=m 1098CONFIG_HID=m
1099# CONFIG_HID_DEBUG is not set
1009 1100
1010# 1101#
1011# USB support 1102# USB support
@@ -1020,9 +1111,7 @@ CONFIG_USB=m
1020# Miscellaneous USB options 1111# Miscellaneous USB options
1021# 1112#
1022CONFIG_USB_DEVICEFS=y 1113CONFIG_USB_DEVICEFS=y
1023# CONFIG_USB_BANDWIDTH is not set
1024# CONFIG_USB_DYNAMIC_MINORS is not set 1114# CONFIG_USB_DYNAMIC_MINORS is not set
1025# CONFIG_USB_MULTITHREAD_PROBE is not set
1026# CONFIG_USB_OTG is not set 1115# CONFIG_USB_OTG is not set
1027 1116
1028# 1117#
@@ -1032,9 +1121,15 @@ CONFIG_USB_EHCI_HCD=m
1032# CONFIG_USB_EHCI_SPLIT_ISO is not set 1121# CONFIG_USB_EHCI_SPLIT_ISO is not set
1033# CONFIG_USB_EHCI_ROOT_HUB_TT is not set 1122# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
1034# CONFIG_USB_EHCI_TT_NEWSCHED is not set 1123# CONFIG_USB_EHCI_TT_NEWSCHED is not set
1124CONFIG_USB_EHCI_BIG_ENDIAN_MMIO=y
1035# CONFIG_USB_ISP116X_HCD is not set 1125# CONFIG_USB_ISP116X_HCD is not set
1036CONFIG_USB_OHCI_HCD=m 1126CONFIG_USB_OHCI_HCD=m
1037# CONFIG_USB_OHCI_BIG_ENDIAN is not set 1127CONFIG_USB_OHCI_HCD_PPC_OF=y
1128CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
1129# CONFIG_USB_OHCI_HCD_PPC_OF_LE is not set
1130CONFIG_USB_OHCI_HCD_PCI=y
1131CONFIG_USB_OHCI_BIG_ENDIAN_DESC=y
1132CONFIG_USB_OHCI_BIG_ENDIAN_MMIO=y
1038CONFIG_USB_OHCI_LITTLE_ENDIAN=y 1133CONFIG_USB_OHCI_LITTLE_ENDIAN=y
1039# CONFIG_USB_UHCI_HCD is not set 1134# CONFIG_USB_UHCI_HCD is not set
1040# CONFIG_USB_SL811_HCD is not set 1135# CONFIG_USB_SL811_HCD is not set
@@ -1088,6 +1183,7 @@ CONFIG_USB_STORAGE=m
1088# CONFIG_USB_ATI_REMOTE2 is not set 1183# CONFIG_USB_ATI_REMOTE2 is not set
1089# CONFIG_USB_KEYSPAN_REMOTE is not set 1184# CONFIG_USB_KEYSPAN_REMOTE is not set
1090# CONFIG_USB_APPLETOUCH is not set 1185# CONFIG_USB_APPLETOUCH is not set
1186# CONFIG_USB_GTCO is not set
1091 1187
1092# 1188#
1093# USB Imaging devices 1189# USB Imaging devices
@@ -1125,6 +1221,7 @@ CONFIG_USB_MON=y
1125# CONFIG_USB_RIO500 is not set 1221# CONFIG_USB_RIO500 is not set
1126# CONFIG_USB_LEGOTOWER is not set 1222# CONFIG_USB_LEGOTOWER is not set
1127# CONFIG_USB_LCD is not set 1223# CONFIG_USB_LCD is not set
1224# CONFIG_USB_BERRY_CHARGE is not set
1128# CONFIG_USB_LED is not set 1225# CONFIG_USB_LED is not set
1129# CONFIG_USB_CYPRESS_CY7C63 is not set 1226# CONFIG_USB_CYPRESS_CY7C63 is not set
1130# CONFIG_USB_CYTHERM is not set 1227# CONFIG_USB_CYTHERM is not set
@@ -1135,6 +1232,7 @@ CONFIG_USB_MON=y
1135# CONFIG_USB_SISUSBVGA is not set 1232# CONFIG_USB_SISUSBVGA is not set
1136# CONFIG_USB_LD is not set 1233# CONFIG_USB_LD is not set
1137# CONFIG_USB_TRANCEVIBRATOR is not set 1234# CONFIG_USB_TRANCEVIBRATOR is not set
1235# CONFIG_USB_IOWARRIOR is not set
1138# CONFIG_USB_TEST is not set 1236# CONFIG_USB_TEST is not set
1139 1237
1140# 1238#
@@ -1175,6 +1273,7 @@ CONFIG_INFINIBAND_MTHCA=m
1175CONFIG_INFINIBAND_MTHCA_DEBUG=y 1273CONFIG_INFINIBAND_MTHCA_DEBUG=y
1176# CONFIG_INFINIBAND_AMSO1100 is not set 1274# CONFIG_INFINIBAND_AMSO1100 is not set
1177CONFIG_INFINIBAND_IPOIB=m 1275CONFIG_INFINIBAND_IPOIB=m
1276# CONFIG_INFINIBAND_IPOIB_CM is not set
1178CONFIG_INFINIBAND_IPOIB_DEBUG=y 1277CONFIG_INFINIBAND_IPOIB_DEBUG=y
1179CONFIG_INFINIBAND_IPOIB_DEBUG_DATA=y 1278CONFIG_INFINIBAND_IPOIB_DEBUG_DATA=y
1180# CONFIG_INFINIBAND_SRP is not set 1279# CONFIG_INFINIBAND_SRP is not set
@@ -1203,6 +1302,10 @@ CONFIG_INFINIBAND_IPOIB_DEBUG_DATA=y
1203# 1302#
1204 1303
1205# 1304#
1305# Auxiliary Display support
1306#
1307
1308#
1206# Virtualization 1309# Virtualization
1207# 1310#
1208 1311
@@ -1395,7 +1498,8 @@ CONFIG_TEXTSEARCH_KMP=m
1395CONFIG_TEXTSEARCH_BM=m 1498CONFIG_TEXTSEARCH_BM=m
1396CONFIG_TEXTSEARCH_FSM=m 1499CONFIG_TEXTSEARCH_FSM=m
1397CONFIG_PLIST=y 1500CONFIG_PLIST=y
1398CONFIG_IOMAP_COPY=y 1501CONFIG_HAS_IOMEM=y
1502CONFIG_HAS_IOPORT=y
1399 1503
1400# 1504#
1401# Instrumentation Support 1505# Instrumentation Support
@@ -1414,15 +1518,16 @@ CONFIG_MAGIC_SYSRQ=y
1414CONFIG_DEBUG_FS=y 1518CONFIG_DEBUG_FS=y
1415# CONFIG_HEADERS_CHECK is not set 1519# CONFIG_HEADERS_CHECK is not set
1416CONFIG_DEBUG_KERNEL=y 1520CONFIG_DEBUG_KERNEL=y
1521# CONFIG_DEBUG_SHIRQ is not set
1417CONFIG_LOG_BUF_SHIFT=15 1522CONFIG_LOG_BUF_SHIFT=15
1418CONFIG_DETECT_SOFTLOCKUP=y 1523# CONFIG_DETECT_SOFTLOCKUP is not set
1419# CONFIG_SCHEDSTATS is not set 1524# CONFIG_SCHEDSTATS is not set
1525# CONFIG_TIMER_STATS is not set
1420# CONFIG_DEBUG_SLAB is not set 1526# CONFIG_DEBUG_SLAB is not set
1421# CONFIG_DEBUG_RT_MUTEXES is not set 1527# CONFIG_DEBUG_RT_MUTEXES is not set
1422# CONFIG_RT_MUTEX_TESTER is not set 1528# CONFIG_RT_MUTEX_TESTER is not set
1423# CONFIG_DEBUG_SPINLOCK is not set 1529# CONFIG_DEBUG_SPINLOCK is not set
1424CONFIG_DEBUG_MUTEXES=y 1530CONFIG_DEBUG_MUTEXES=y
1425# CONFIG_DEBUG_RWSEMS is not set
1426CONFIG_DEBUG_SPINLOCK_SLEEP=y 1531CONFIG_DEBUG_SPINLOCK_SLEEP=y
1427# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set 1532# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
1428# CONFIG_DEBUG_KOBJECT is not set 1533# CONFIG_DEBUG_KOBJECT is not set
@@ -1432,6 +1537,7 @@ CONFIG_DEBUG_BUGVERBOSE=y
1432# CONFIG_DEBUG_LIST is not set 1537# CONFIG_DEBUG_LIST is not set
1433# CONFIG_FORCED_INLINING is not set 1538# CONFIG_FORCED_INLINING is not set
1434# CONFIG_RCU_TORTURE_TEST is not set 1539# CONFIG_RCU_TORTURE_TEST is not set
1540# CONFIG_FAULT_INJECTION is not set
1435# CONFIG_DEBUG_STACKOVERFLOW is not set 1541# CONFIG_DEBUG_STACKOVERFLOW is not set
1436# CONFIG_DEBUG_STACK_USAGE is not set 1542# CONFIG_DEBUG_STACK_USAGE is not set
1437CONFIG_DEBUGGER=y 1543CONFIG_DEBUGGER=y
@@ -1469,8 +1575,10 @@ CONFIG_CRYPTO_SHA1=m
1469# CONFIG_CRYPTO_GF128MUL is not set 1575# CONFIG_CRYPTO_GF128MUL is not set
1470CONFIG_CRYPTO_ECB=m 1576CONFIG_CRYPTO_ECB=m
1471CONFIG_CRYPTO_CBC=m 1577CONFIG_CRYPTO_CBC=m
1578CONFIG_CRYPTO_PCBC=m
1472# CONFIG_CRYPTO_LRW is not set 1579# CONFIG_CRYPTO_LRW is not set
1473CONFIG_CRYPTO_DES=m 1580CONFIG_CRYPTO_DES=m
1581# CONFIG_CRYPTO_FCRYPT is not set
1474# CONFIG_CRYPTO_BLOWFISH is not set 1582# CONFIG_CRYPTO_BLOWFISH is not set
1475# CONFIG_CRYPTO_TWOFISH is not set 1583# CONFIG_CRYPTO_TWOFISH is not set
1476# CONFIG_CRYPTO_SERPENT is not set 1584# CONFIG_CRYPTO_SERPENT is not set
@@ -1484,6 +1592,7 @@ CONFIG_CRYPTO_DES=m
1484CONFIG_CRYPTO_DEFLATE=m 1592CONFIG_CRYPTO_DEFLATE=m
1485# CONFIG_CRYPTO_MICHAEL_MIC is not set 1593# CONFIG_CRYPTO_MICHAEL_MIC is not set
1486# CONFIG_CRYPTO_CRC32C is not set 1594# CONFIG_CRYPTO_CRC32C is not set
1595# CONFIG_CRYPTO_CAMELLIA is not set
1487# CONFIG_CRYPTO_TEST is not set 1596# CONFIG_CRYPTO_TEST is not set
1488 1597
1489# 1598#
diff --git a/arch/powerpc/kernel/udbg_16550.c b/arch/powerpc/kernel/udbg_16550.c
index e738f93b42fe..a963f657222b 100644
--- a/arch/powerpc/kernel/udbg_16550.c
+++ b/arch/powerpc/kernel/udbg_16550.c
@@ -184,7 +184,7 @@ void udbg_pas_real_putc(char c)
184 184
185void udbg_init_pas_realmode(void) 185void udbg_init_pas_realmode(void)
186{ 186{
187 udbg_comport = (volatile struct NS16550 __iomem *)0xfcff03f8; 187 udbg_comport = (volatile struct NS16550 __iomem *)0xfcff03f8UL;
188 188
189 udbg_putc = udbg_pas_real_putc; 189 udbg_putc = udbg_pas_real_putc;
190 udbg_getc = NULL; 190 udbg_getc = NULL;
diff --git a/arch/powerpc/mm/hash_utils_64.c b/arch/powerpc/mm/hash_utils_64.c
index c0d2a694fa30..3c7fe2c65b5a 100644
--- a/arch/powerpc/mm/hash_utils_64.c
+++ b/arch/powerpc/mm/hash_utils_64.c
@@ -685,6 +685,9 @@ int hash_page(unsigned long ea, unsigned long access, unsigned long trap)
685 "non-cacheable mapping\n"); 685 "non-cacheable mapping\n");
686 psize = mmu_vmalloc_psize = MMU_PAGE_4K; 686 psize = mmu_vmalloc_psize = MMU_PAGE_4K;
687 } 687 }
688#ifdef CONFIG_SPE_BASE
689 spu_flush_all_slbs(mm);
690#endif
688 } 691 }
689 if (user_region) { 692 if (user_region) {
690 if (psize != get_paca()->context.user_psize) { 693 if (psize != get_paca()->context.user_psize) {
@@ -759,6 +762,9 @@ void hash_preload(struct mm_struct *mm, unsigned long ea,
759 mmu_psize_defs[MMU_PAGE_4K].sllp; 762 mmu_psize_defs[MMU_PAGE_4K].sllp;
760 get_paca()->context = mm->context; 763 get_paca()->context = mm->context;
761 slb_flush_and_rebolt(); 764 slb_flush_and_rebolt();
765#ifdef CONFIG_SPE_BASE
766 spu_flush_all_slbs(mm);
767#endif
762 } 768 }
763 } 769 }
764 if (mm->context.user_psize == MMU_PAGE_64K) 770 if (mm->context.user_psize == MMU_PAGE_64K)
diff --git a/arch/powerpc/mm/hugetlbpage.c b/arch/powerpc/mm/hugetlbpage.c
index 8c77c791f87e..f6ffaaa7a5bf 100644
--- a/arch/powerpc/mm/hugetlbpage.c
+++ b/arch/powerpc/mm/hugetlbpage.c
@@ -24,6 +24,7 @@
24#include <asm/machdep.h> 24#include <asm/machdep.h>
25#include <asm/cputable.h> 25#include <asm/cputable.h>
26#include <asm/tlb.h> 26#include <asm/tlb.h>
27#include <asm/spu.h>
27 28
28#include <linux/sysctl.h> 29#include <linux/sysctl.h>
29 30
@@ -513,6 +514,9 @@ int prepare_hugepage_range(unsigned long addr, unsigned long len, pgoff_t pgoff)
513 if ((addr + len) > 0x100000000UL) 514 if ((addr + len) > 0x100000000UL)
514 err = open_high_hpage_areas(current->mm, 515 err = open_high_hpage_areas(current->mm,
515 HTLB_AREA_MASK(addr, len)); 516 HTLB_AREA_MASK(addr, len));
517#ifdef CONFIG_SPE_BASE
518 spu_flush_all_slbs(current->mm);
519#endif
516 if (err) { 520 if (err) {
517 printk(KERN_DEBUG "prepare_hugepage_range(%lx, %lx)" 521 printk(KERN_DEBUG "prepare_hugepage_range(%lx, %lx)"
518 " failed (lowmask: 0x%04hx, highmask: 0x%04hx)\n", 522 " failed (lowmask: 0x%04hx, highmask: 0x%04hx)\n",
diff --git a/arch/powerpc/platforms/cell/spu_base.c b/arch/powerpc/platforms/cell/spu_base.c
index c43999a10deb..eba7a2641dce 100644
--- a/arch/powerpc/platforms/cell/spu_base.c
+++ b/arch/powerpc/platforms/cell/spu_base.c
@@ -38,8 +38,61 @@
38const struct spu_management_ops *spu_management_ops; 38const struct spu_management_ops *spu_management_ops;
39const struct spu_priv1_ops *spu_priv1_ops; 39const struct spu_priv1_ops *spu_priv1_ops;
40 40
41static struct list_head spu_list[MAX_NUMNODES];
42static LIST_HEAD(spu_full_list);
43static DEFINE_MUTEX(spu_mutex);
44static spinlock_t spu_list_lock = SPIN_LOCK_UNLOCKED;
45
41EXPORT_SYMBOL_GPL(spu_priv1_ops); 46EXPORT_SYMBOL_GPL(spu_priv1_ops);
42 47
48void spu_invalidate_slbs(struct spu *spu)
49{
50 struct spu_priv2 __iomem *priv2 = spu->priv2;
51
52 if (spu_mfc_sr1_get(spu) & MFC_STATE1_RELOCATE_MASK)
53 out_be64(&priv2->slb_invalidate_all_W, 0UL);
54}
55EXPORT_SYMBOL_GPL(spu_invalidate_slbs);
56
57/* This is called by the MM core when a segment size is changed, to
58 * request a flush of all the SPEs using a given mm
59 */
60void spu_flush_all_slbs(struct mm_struct *mm)
61{
62 struct spu *spu;
63 unsigned long flags;
64
65 spin_lock_irqsave(&spu_list_lock, flags);
66 list_for_each_entry(spu, &spu_full_list, full_list) {
67 if (spu->mm == mm)
68 spu_invalidate_slbs(spu);
69 }
70 spin_unlock_irqrestore(&spu_list_lock, flags);
71}
72
73/* The hack below stinks... try to do something better one of
74 * these days... Does it even work properly with NR_CPUS == 1 ?
75 */
76static inline void mm_needs_global_tlbie(struct mm_struct *mm)
77{
78 int nr = (NR_CPUS > 1) ? NR_CPUS : NR_CPUS + 1;
79
80 /* Global TLBIE broadcast required with SPEs. */
81 __cpus_setall(&mm->cpu_vm_mask, nr);
82}
83
84void spu_associate_mm(struct spu *spu, struct mm_struct *mm)
85{
86 unsigned long flags;
87
88 spin_lock_irqsave(&spu_list_lock, flags);
89 spu->mm = mm;
90 spin_unlock_irqrestore(&spu_list_lock, flags);
91 if (mm)
92 mm_needs_global_tlbie(mm);
93}
94EXPORT_SYMBOL_GPL(spu_associate_mm);
95
43static int __spu_trap_invalid_dma(struct spu *spu) 96static int __spu_trap_invalid_dma(struct spu *spu)
44{ 97{
45 pr_debug("%s\n", __FUNCTION__); 98 pr_debug("%s\n", __FUNCTION__);
@@ -74,6 +127,7 @@ static int __spu_trap_data_seg(struct spu *spu, unsigned long ea)
74 struct spu_priv2 __iomem *priv2 = spu->priv2; 127 struct spu_priv2 __iomem *priv2 = spu->priv2;
75 struct mm_struct *mm = spu->mm; 128 struct mm_struct *mm = spu->mm;
76 u64 esid, vsid, llp; 129 u64 esid, vsid, llp;
130 int psize;
77 131
78 pr_debug("%s\n", __FUNCTION__); 132 pr_debug("%s\n", __FUNCTION__);
79 133
@@ -90,22 +144,25 @@ static int __spu_trap_data_seg(struct spu *spu, unsigned long ea)
90 case USER_REGION_ID: 144 case USER_REGION_ID:
91#ifdef CONFIG_HUGETLB_PAGE 145#ifdef CONFIG_HUGETLB_PAGE
92 if (in_hugepage_area(mm->context, ea)) 146 if (in_hugepage_area(mm->context, ea))
93 llp = mmu_psize_defs[mmu_huge_psize].sllp; 147 psize = mmu_huge_psize;
94 else 148 else
95#endif 149#endif
96 llp = mmu_psize_defs[mmu_virtual_psize].sllp; 150 psize = mm->context.user_psize;
97 vsid = (get_vsid(mm->context.id, ea) << SLB_VSID_SHIFT) | 151 vsid = (get_vsid(mm->context.id, ea) << SLB_VSID_SHIFT) |
98 SLB_VSID_USER | llp; 152 SLB_VSID_USER;
99 break; 153 break;
100 case VMALLOC_REGION_ID: 154 case VMALLOC_REGION_ID:
101 llp = mmu_psize_defs[mmu_virtual_psize].sllp; 155 if (ea < VMALLOC_END)
156 psize = mmu_vmalloc_psize;
157 else
158 psize = mmu_io_psize;
102 vsid = (get_kernel_vsid(ea) << SLB_VSID_SHIFT) | 159 vsid = (get_kernel_vsid(ea) << SLB_VSID_SHIFT) |
103 SLB_VSID_KERNEL | llp; 160 SLB_VSID_KERNEL;
104 break; 161 break;
105 case KERNEL_REGION_ID: 162 case KERNEL_REGION_ID:
106 llp = mmu_psize_defs[mmu_linear_psize].sllp; 163 psize = mmu_linear_psize;
107 vsid = (get_kernel_vsid(ea) << SLB_VSID_SHIFT) | 164 vsid = (get_kernel_vsid(ea) << SLB_VSID_SHIFT) |
108 SLB_VSID_KERNEL | llp; 165 SLB_VSID_KERNEL;
109 break; 166 break;
110 default: 167 default:
111 /* Future: support kernel segments so that drivers 168 /* Future: support kernel segments so that drivers
@@ -114,9 +171,10 @@ static int __spu_trap_data_seg(struct spu *spu, unsigned long ea)
114 pr_debug("invalid region access at %016lx\n", ea); 171 pr_debug("invalid region access at %016lx\n", ea);
115 return 1; 172 return 1;
116 } 173 }
174 llp = mmu_psize_defs[psize].sllp;
117 175
118 out_be64(&priv2->slb_index_W, spu->slb_replace); 176 out_be64(&priv2->slb_index_W, spu->slb_replace);
119 out_be64(&priv2->slb_vsid_RW, vsid); 177 out_be64(&priv2->slb_vsid_RW, vsid | llp);
120 out_be64(&priv2->slb_esid_RW, esid); 178 out_be64(&priv2->slb_esid_RW, esid);
121 179
122 spu->slb_replace++; 180 spu->slb_replace++;
@@ -330,10 +388,6 @@ static void spu_free_irqs(struct spu *spu)
330 free_irq(spu->irqs[2], spu); 388 free_irq(spu->irqs[2], spu);
331} 389}
332 390
333static struct list_head spu_list[MAX_NUMNODES];
334static LIST_HEAD(spu_full_list);
335static DEFINE_MUTEX(spu_mutex);
336
337static void spu_init_channels(struct spu *spu) 391static void spu_init_channels(struct spu *spu)
338{ 392{
339 static const struct { 393 static const struct {
@@ -593,6 +647,7 @@ static int __init create_spu(void *data)
593 struct spu *spu; 647 struct spu *spu;
594 int ret; 648 int ret;
595 static int number; 649 static int number;
650 unsigned long flags;
596 651
597 ret = -ENOMEM; 652 ret = -ENOMEM;
598 spu = kzalloc(sizeof (*spu), GFP_KERNEL); 653 spu = kzalloc(sizeof (*spu), GFP_KERNEL);
@@ -620,8 +675,10 @@ static int __init create_spu(void *data)
620 goto out_free_irqs; 675 goto out_free_irqs;
621 676
622 mutex_lock(&spu_mutex); 677 mutex_lock(&spu_mutex);
678 spin_lock_irqsave(&spu_list_lock, flags);
623 list_add(&spu->list, &spu_list[spu->node]); 679 list_add(&spu->list, &spu_list[spu->node]);
624 list_add(&spu->full_list, &spu_full_list); 680 list_add(&spu->full_list, &spu_full_list);
681 spin_unlock_irqrestore(&spu_list_lock, flags);
625 mutex_unlock(&spu_mutex); 682 mutex_unlock(&spu_mutex);
626 683
627 goto out; 684 goto out;
diff --git a/arch/powerpc/platforms/cell/spufs/file.c b/arch/powerpc/platforms/cell/spufs/file.c
index b00653d69c01..505266a568d4 100644
--- a/arch/powerpc/platforms/cell/spufs/file.c
+++ b/arch/powerpc/platforms/cell/spufs/file.c
@@ -63,8 +63,8 @@ static ssize_t
63spufs_mem_read(struct file *file, char __user *buffer, 63spufs_mem_read(struct file *file, char __user *buffer,
64 size_t size, loff_t *pos) 64 size_t size, loff_t *pos)
65{ 65{
66 int ret;
67 struct spu_context *ctx = file->private_data; 66 struct spu_context *ctx = file->private_data;
67 ssize_t ret;
68 68
69 spu_acquire(ctx); 69 spu_acquire(ctx);
70 ret = __spufs_mem_read(ctx, buffer, size, pos); 70 ret = __spufs_mem_read(ctx, buffer, size, pos);
@@ -74,25 +74,29 @@ spufs_mem_read(struct file *file, char __user *buffer,
74 74
75static ssize_t 75static ssize_t
76spufs_mem_write(struct file *file, const char __user *buffer, 76spufs_mem_write(struct file *file, const char __user *buffer,
77 size_t size, loff_t *pos) 77 size_t size, loff_t *ppos)
78{ 78{
79 struct spu_context *ctx = file->private_data; 79 struct spu_context *ctx = file->private_data;
80 char *local_store; 80 char *local_store;
81 loff_t pos = *ppos;
81 int ret; 82 int ret;
82 83
83 size = min_t(ssize_t, LS_SIZE - *pos, size); 84 if (pos < 0)
84 if (size <= 0) 85 return -EINVAL;
86 if (pos > LS_SIZE)
85 return -EFBIG; 87 return -EFBIG;
86 *pos += size; 88 if (size > LS_SIZE - pos)
89 size = LS_SIZE - pos;
87 90
88 spu_acquire(ctx); 91 spu_acquire(ctx);
89
90 local_store = ctx->ops->get_ls(ctx); 92 local_store = ctx->ops->get_ls(ctx);
91 ret = copy_from_user(local_store + *pos - size, 93 ret = copy_from_user(local_store + pos, buffer, size);
92 buffer, size) ? -EFAULT : size;
93
94 spu_release(ctx); 94 spu_release(ctx);
95 return ret; 95
96 if (ret)
97 return -EFAULT;
98 *ppos = pos + size;
99 return size;
96} 100}
97 101
98static unsigned long spufs_mem_mmap_nopfn(struct vm_area_struct *vma, 102static unsigned long spufs_mem_mmap_nopfn(struct vm_area_struct *vma,
diff --git a/arch/powerpc/platforms/cell/spufs/run.c b/arch/powerpc/platforms/cell/spufs/run.c
index 353a8fa07ab8..f95a611ca362 100644
--- a/arch/powerpc/platforms/cell/spufs/run.c
+++ b/arch/powerpc/platforms/cell/spufs/run.c
@@ -143,7 +143,7 @@ static inline int spu_run_init(struct spu_context *ctx, u32 * npc)
143 int ret; 143 int ret;
144 unsigned long runcntl = SPU_RUNCNTL_RUNNABLE; 144 unsigned long runcntl = SPU_RUNCNTL_RUNNABLE;
145 145
146 ret = spu_acquire_runnable(ctx, SPU_ACTIVATE_NOWAKE); 146 ret = spu_acquire_runnable(ctx, 0);
147 if (ret) 147 if (ret)
148 return ret; 148 return ret;
149 149
@@ -155,7 +155,7 @@ static inline int spu_run_init(struct spu_context *ctx, u32 * npc)
155 spu_release(ctx); 155 spu_release(ctx);
156 ret = spu_setup_isolated(ctx); 156 ret = spu_setup_isolated(ctx);
157 if (!ret) 157 if (!ret)
158 ret = spu_acquire_runnable(ctx, SPU_ACTIVATE_NOWAKE); 158 ret = spu_acquire_runnable(ctx, 0);
159 } 159 }
160 160
161 /* if userspace has set the runcntrl register (eg, to issue an 161 /* if userspace has set the runcntrl register (eg, to issue an
diff --git a/arch/powerpc/platforms/cell/spufs/sched.c b/arch/powerpc/platforms/cell/spufs/sched.c
index 2f25e68b4bac..39823cec0844 100644
--- a/arch/powerpc/platforms/cell/spufs/sched.c
+++ b/arch/powerpc/platforms/cell/spufs/sched.c
@@ -127,14 +127,6 @@ static void spu_remove_from_active_list(struct spu *spu)
127 mutex_unlock(&spu_prio->active_mutex[node]); 127 mutex_unlock(&spu_prio->active_mutex[node]);
128} 128}
129 129
130static inline void mm_needs_global_tlbie(struct mm_struct *mm)
131{
132 int nr = (NR_CPUS > 1) ? NR_CPUS : NR_CPUS + 1;
133
134 /* Global TLBIE broadcast required with SPEs. */
135 __cpus_setall(&mm->cpu_vm_mask, nr);
136}
137
138static BLOCKING_NOTIFIER_HEAD(spu_switch_notifier); 130static BLOCKING_NOTIFIER_HEAD(spu_switch_notifier);
139 131
140static void spu_switch_notify(struct spu *spu, struct spu_context *ctx) 132static void spu_switch_notify(struct spu *spu, struct spu_context *ctx)
@@ -167,8 +159,7 @@ static void spu_bind_context(struct spu *spu, struct spu_context *ctx)
167 ctx->spu = spu; 159 ctx->spu = spu;
168 ctx->ops = &spu_hw_ops; 160 ctx->ops = &spu_hw_ops;
169 spu->pid = current->pid; 161 spu->pid = current->pid;
170 spu->mm = ctx->owner; 162 spu_associate_mm(spu, ctx->owner);
171 mm_needs_global_tlbie(spu->mm);
172 spu->ibox_callback = spufs_ibox_callback; 163 spu->ibox_callback = spufs_ibox_callback;
173 spu->wbox_callback = spufs_wbox_callback; 164 spu->wbox_callback = spufs_wbox_callback;
174 spu->stop_callback = spufs_stop_callback; 165 spu->stop_callback = spufs_stop_callback;
@@ -205,7 +196,7 @@ static void spu_unbind_context(struct spu *spu, struct spu_context *ctx)
205 spu->stop_callback = NULL; 196 spu->stop_callback = NULL;
206 spu->mfc_callback = NULL; 197 spu->mfc_callback = NULL;
207 spu->dma_callback = NULL; 198 spu->dma_callback = NULL;
208 spu->mm = NULL; 199 spu_associate_mm(spu, NULL);
209 spu->pid = 0; 200 spu->pid = 0;
210 ctx->ops = &spu_backing_ops; 201 ctx->ops = &spu_backing_ops;
211 ctx->spu = NULL; 202 ctx->spu = NULL;
@@ -263,7 +254,6 @@ static void spu_prio_wait(struct spu_context *ctx)
263{ 254{
264 DEFINE_WAIT(wait); 255 DEFINE_WAIT(wait);
265 256
266 set_bit(SPU_SCHED_WAKE, &ctx->sched_flags);
267 prepare_to_wait_exclusive(&ctx->stop_wq, &wait, TASK_INTERRUPTIBLE); 257 prepare_to_wait_exclusive(&ctx->stop_wq, &wait, TASK_INTERRUPTIBLE);
268 if (!signal_pending(current)) { 258 if (!signal_pending(current)) {
269 mutex_unlock(&ctx->state_mutex); 259 mutex_unlock(&ctx->state_mutex);
@@ -272,7 +262,6 @@ static void spu_prio_wait(struct spu_context *ctx)
272 } 262 }
273 __set_current_state(TASK_RUNNING); 263 __set_current_state(TASK_RUNNING);
274 remove_wait_queue(&ctx->stop_wq, &wait); 264 remove_wait_queue(&ctx->stop_wq, &wait);
275 clear_bit(SPU_SCHED_WAKE, &ctx->sched_flags);
276} 265}
277 266
278/** 267/**
@@ -292,7 +281,7 @@ static void spu_reschedule(struct spu *spu)
292 best = sched_find_first_bit(spu_prio->bitmap); 281 best = sched_find_first_bit(spu_prio->bitmap);
293 if (best < MAX_PRIO) { 282 if (best < MAX_PRIO) {
294 struct spu_context *ctx = spu_grab_context(best); 283 struct spu_context *ctx = spu_grab_context(best);
295 if (ctx && test_bit(SPU_SCHED_WAKE, &ctx->sched_flags)) 284 if (ctx)
296 wake_up(&ctx->stop_wq); 285 wake_up(&ctx->stop_wq);
297 } 286 }
298 spin_unlock(&spu_prio->runq_lock); 287 spin_unlock(&spu_prio->runq_lock);
@@ -414,8 +403,7 @@ int spu_activate(struct spu_context *ctx, unsigned long flags)
414 } 403 }
415 404
416 spu_add_to_rq(ctx); 405 spu_add_to_rq(ctx);
417 if (!(flags & SPU_ACTIVATE_NOWAKE)) 406 spu_prio_wait(ctx);
418 spu_prio_wait(ctx);
419 spu_del_from_rq(ctx); 407 spu_del_from_rq(ctx);
420 } while (!signal_pending(current)); 408 } while (!signal_pending(current));
421 409
diff --git a/arch/powerpc/platforms/cell/spufs/spufs.h b/arch/powerpc/platforms/cell/spufs/spufs.h
index 0c437891dfd5..5c4e47d69d79 100644
--- a/arch/powerpc/platforms/cell/spufs/spufs.h
+++ b/arch/powerpc/platforms/cell/spufs/spufs.h
@@ -41,7 +41,7 @@ struct spu_gang;
41 41
42/* ctx->sched_flags */ 42/* ctx->sched_flags */
43enum { 43enum {
44 SPU_SCHED_WAKE = 0, 44 SPU_SCHED_WAKE = 0, /* currently unused */
45}; 45};
46 46
47struct spu_context { 47struct spu_context {
@@ -191,9 +191,7 @@ void spu_forget(struct spu_context *ctx);
191int spu_acquire_runnable(struct spu_context *ctx, unsigned long flags); 191int spu_acquire_runnable(struct spu_context *ctx, unsigned long flags);
192void spu_acquire_saved(struct spu_context *ctx); 192void spu_acquire_saved(struct spu_context *ctx);
193int spu_acquire_exclusive(struct spu_context *ctx); 193int spu_acquire_exclusive(struct spu_context *ctx);
194enum { 194
195 SPU_ACTIVATE_NOWAKE = 1,
196};
197int spu_activate(struct spu_context *ctx, unsigned long flags); 195int spu_activate(struct spu_context *ctx, unsigned long flags);
198void spu_deactivate(struct spu_context *ctx); 196void spu_deactivate(struct spu_context *ctx);
199void spu_yield(struct spu_context *ctx); 197void spu_yield(struct spu_context *ctx);
diff --git a/arch/powerpc/platforms/cell/spufs/switch.c b/arch/powerpc/platforms/cell/spufs/switch.c
index c08981ff7fc6..fd91c73de34e 100644
--- a/arch/powerpc/platforms/cell/spufs/switch.c
+++ b/arch/powerpc/platforms/cell/spufs/switch.c
@@ -468,26 +468,6 @@ static inline void wait_purge_complete(struct spu_state *csa, struct spu *spu)
468 MFC_CNTL_PURGE_DMA_COMPLETE); 468 MFC_CNTL_PURGE_DMA_COMPLETE);
469} 469}
470 470
471static inline void save_mfc_slbs(struct spu_state *csa, struct spu *spu)
472{
473 struct spu_priv2 __iomem *priv2 = spu->priv2;
474 int i;
475
476 /* Save, Step 29:
477 * If MFC_SR1[R]='1', save SLBs in CSA.
478 */
479 if (spu_mfc_sr1_get(spu) & MFC_STATE1_RELOCATE_MASK) {
480 csa->priv2.slb_index_W = in_be64(&priv2->slb_index_W);
481 for (i = 0; i < 8; i++) {
482 out_be64(&priv2->slb_index_W, i);
483 eieio();
484 csa->slb_esid_RW[i] = in_be64(&priv2->slb_esid_RW);
485 csa->slb_vsid_RW[i] = in_be64(&priv2->slb_vsid_RW);
486 eieio();
487 }
488 }
489}
490
491static inline void setup_mfc_sr1(struct spu_state *csa, struct spu *spu) 471static inline void setup_mfc_sr1(struct spu_state *csa, struct spu *spu)
492{ 472{
493 /* Save, Step 30: 473 /* Save, Step 30:
@@ -708,20 +688,6 @@ static inline void resume_mfc_queue(struct spu_state *csa, struct spu *spu)
708 out_be64(&priv2->mfc_control_RW, MFC_CNTL_RESUME_DMA_QUEUE); 688 out_be64(&priv2->mfc_control_RW, MFC_CNTL_RESUME_DMA_QUEUE);
709} 689}
710 690
711static inline void invalidate_slbs(struct spu_state *csa, struct spu *spu)
712{
713 struct spu_priv2 __iomem *priv2 = spu->priv2;
714
715 /* Save, Step 45:
716 * Restore, Step 19:
717 * If MFC_SR1[R]=1, write 0 to SLB_Invalidate_All.
718 */
719 if (spu_mfc_sr1_get(spu) & MFC_STATE1_RELOCATE_MASK) {
720 out_be64(&priv2->slb_invalidate_all_W, 0UL);
721 eieio();
722 }
723}
724
725static inline void get_kernel_slb(u64 ea, u64 slb[2]) 691static inline void get_kernel_slb(u64 ea, u64 slb[2])
726{ 692{
727 u64 llp; 693 u64 llp;
@@ -765,7 +731,7 @@ static inline void setup_mfc_slbs(struct spu_state *csa, struct spu *spu)
765 * MFC_SR1[R]=1 (in other words, assume that 731 * MFC_SR1[R]=1 (in other words, assume that
766 * translation is desired by OS environment). 732 * translation is desired by OS environment).
767 */ 733 */
768 invalidate_slbs(csa, spu); 734 spu_invalidate_slbs(spu);
769 get_kernel_slb((unsigned long)&spu_save_code[0], code_slb); 735 get_kernel_slb((unsigned long)&spu_save_code[0], code_slb);
770 get_kernel_slb((unsigned long)csa->lscsa, lscsa_slb); 736 get_kernel_slb((unsigned long)csa->lscsa, lscsa_slb);
771 load_mfc_slb(spu, code_slb, 0); 737 load_mfc_slb(spu, code_slb, 0);
@@ -1718,27 +1684,6 @@ static inline void check_ppuint_mb_stat(struct spu_state *csa, struct spu *spu)
1718 } 1684 }
1719} 1685}
1720 1686
1721static inline void restore_mfc_slbs(struct spu_state *csa, struct spu *spu)
1722{
1723 struct spu_priv2 __iomem *priv2 = spu->priv2;
1724 int i;
1725
1726 /* Restore, Step 68:
1727 * If MFC_SR1[R]='1', restore SLBs from CSA.
1728 */
1729 if (csa->priv1.mfc_sr1_RW & MFC_STATE1_RELOCATE_MASK) {
1730 for (i = 0; i < 8; i++) {
1731 out_be64(&priv2->slb_index_W, i);
1732 eieio();
1733 out_be64(&priv2->slb_esid_RW, csa->slb_esid_RW[i]);
1734 out_be64(&priv2->slb_vsid_RW, csa->slb_vsid_RW[i]);
1735 eieio();
1736 }
1737 out_be64(&priv2->slb_index_W, csa->priv2.slb_index_W);
1738 eieio();
1739 }
1740}
1741
1742static inline void restore_mfc_sr1(struct spu_state *csa, struct spu *spu) 1687static inline void restore_mfc_sr1(struct spu_state *csa, struct spu *spu)
1743{ 1688{
1744 /* Restore, Step 69: 1689 /* Restore, Step 69:
@@ -1875,7 +1820,6 @@ static void save_csa(struct spu_state *prev, struct spu *spu)
1875 set_mfc_tclass_id(prev, spu); /* Step 26. */ 1820 set_mfc_tclass_id(prev, spu); /* Step 26. */
1876 purge_mfc_queue(prev, spu); /* Step 27. */ 1821 purge_mfc_queue(prev, spu); /* Step 27. */
1877 wait_purge_complete(prev, spu); /* Step 28. */ 1822 wait_purge_complete(prev, spu); /* Step 28. */
1878 save_mfc_slbs(prev, spu); /* Step 29. */
1879 setup_mfc_sr1(prev, spu); /* Step 30. */ 1823 setup_mfc_sr1(prev, spu); /* Step 30. */
1880 save_spu_npc(prev, spu); /* Step 31. */ 1824 save_spu_npc(prev, spu); /* Step 31. */
1881 save_spu_privcntl(prev, spu); /* Step 32. */ 1825 save_spu_privcntl(prev, spu); /* Step 32. */
@@ -1987,7 +1931,7 @@ static void harvest(struct spu_state *prev, struct spu *spu)
1987 reset_spu_privcntl(prev, spu); /* Step 16. */ 1931 reset_spu_privcntl(prev, spu); /* Step 16. */
1988 reset_spu_lslr(prev, spu); /* Step 17. */ 1932 reset_spu_lslr(prev, spu); /* Step 17. */
1989 setup_mfc_sr1(prev, spu); /* Step 18. */ 1933 setup_mfc_sr1(prev, spu); /* Step 18. */
1990 invalidate_slbs(prev, spu); /* Step 19. */ 1934 spu_invalidate_slbs(spu); /* Step 19. */
1991 reset_ch_part1(prev, spu); /* Step 20. */ 1935 reset_ch_part1(prev, spu); /* Step 20. */
1992 reset_ch_part2(prev, spu); /* Step 21. */ 1936 reset_ch_part2(prev, spu); /* Step 21. */
1993 enable_interrupts(prev, spu); /* Step 22. */ 1937 enable_interrupts(prev, spu); /* Step 22. */
@@ -2055,7 +1999,7 @@ static void restore_csa(struct spu_state *next, struct spu *spu)
2055 restore_spu_mb(next, spu); /* Step 65. */ 1999 restore_spu_mb(next, spu); /* Step 65. */
2056 check_ppu_mb_stat(next, spu); /* Step 66. */ 2000 check_ppu_mb_stat(next, spu); /* Step 66. */
2057 check_ppuint_mb_stat(next, spu); /* Step 67. */ 2001 check_ppuint_mb_stat(next, spu); /* Step 67. */
2058 restore_mfc_slbs(next, spu); /* Step 68. */ 2002 spu_invalidate_slbs(spu); /* Modified Step 68. */
2059 restore_mfc_sr1(next, spu); /* Step 69. */ 2003 restore_mfc_sr1(next, spu); /* Step 69. */
2060 restore_other_spu_access(next, spu); /* Step 70. */ 2004 restore_other_spu_access(next, spu); /* Step 70. */
2061 restore_spu_runcntl(next, spu); /* Step 71. */ 2005 restore_spu_runcntl(next, spu); /* Step 71. */
diff --git a/arch/powerpc/platforms/pasemi/iommu.c b/arch/powerpc/platforms/pasemi/iommu.c
index 459a53b7d24d..71dbf1a56e13 100644
--- a/arch/powerpc/platforms/pasemi/iommu.c
+++ b/arch/powerpc/platforms/pasemi/iommu.c
@@ -77,7 +77,7 @@
77#define IOBMAP_L2E_V 0x80000000 77#define IOBMAP_L2E_V 0x80000000
78#define IOBMAP_L2E_V_CACHED 0xc0000000 78#define IOBMAP_L2E_V_CACHED 0xc0000000
79 79
80static u32 *iob; 80static u32 __iomem *iob;
81static u32 iob_l1_emptyval; 81static u32 iob_l1_emptyval;
82static u32 iob_l2_emptyval; 82static u32 iob_l2_emptyval;
83static u32 *iob_l2_base; 83static u32 *iob_l2_base;
diff --git a/arch/powerpc/platforms/ps3/mm.c b/arch/powerpc/platforms/ps3/mm.c
index 42354de3f557..2014d2b44449 100644
--- a/arch/powerpc/platforms/ps3/mm.c
+++ b/arch/powerpc/platforms/ps3/mm.c
@@ -294,7 +294,7 @@ static int __init ps3_mm_add_memory(void)
294 unsigned long nr_pages; 294 unsigned long nr_pages;
295 295
296 if (!firmware_has_feature(FW_FEATURE_PS3_LV1)) 296 if (!firmware_has_feature(FW_FEATURE_PS3_LV1))
297 return 0; 297 return -ENODEV;
298 298
299 BUG_ON(!mem_init_done); 299 BUG_ON(!mem_init_done);
300 300
diff --git a/arch/powerpc/platforms/ps3/system-bus.c b/arch/powerpc/platforms/ps3/system-bus.c
index a9f7e4a39a2a..3c48cce98a5c 100644
--- a/arch/powerpc/platforms/ps3/system-bus.c
+++ b/arch/powerpc/platforms/ps3/system-bus.c
@@ -172,7 +172,7 @@ int __init ps3_system_bus_init(void)
172 int result; 172 int result;
173 173
174 if (!firmware_has_feature(FW_FEATURE_PS3_LV1)) 174 if (!firmware_has_feature(FW_FEATURE_PS3_LV1))
175 return 0; 175 return -ENODEV;
176 176
177 result = bus_register(&ps3_system_bus_type); 177 result = bus_register(&ps3_system_bus_type);
178 BUG_ON(result); 178 BUG_ON(result);
diff --git a/arch/s390/appldata/appldata_mem.c b/arch/s390/appldata/appldata_mem.c
index 4ca615788702..697eb30a68a3 100644
--- a/arch/s390/appldata/appldata_mem.c
+++ b/arch/s390/appldata/appldata_mem.c
@@ -117,7 +117,10 @@ static void appldata_get_mem_data(void *data)
117 mem_data->pgpgout = ev[PGPGOUT] >> 1; 117 mem_data->pgpgout = ev[PGPGOUT] >> 1;
118 mem_data->pswpin = ev[PSWPIN]; 118 mem_data->pswpin = ev[PSWPIN];
119 mem_data->pswpout = ev[PSWPOUT]; 119 mem_data->pswpout = ev[PSWPOUT];
120 mem_data->pgalloc = ev[PGALLOC_NORMAL] + ev[PGALLOC_DMA]; 120 mem_data->pgalloc = ev[PGALLOC_NORMAL];
121#ifdef CONFIG_ZONE_DMA
122 mem_data->pgalloc += ev[PGALLOC_DMA];
123#endif
121 mem_data->pgfault = ev[PGFAULT]; 124 mem_data->pgfault = ev[PGFAULT];
122 mem_data->pgmajfault = ev[PGMAJFAULT]; 125 mem_data->pgmajfault = ev[PGMAJFAULT];
123 126
diff --git a/arch/sparc/kernel/process.c b/arch/sparc/kernel/process.c
index 113bd48a89bd..fc874e63a499 100644
--- a/arch/sparc/kernel/process.c
+++ b/arch/sparc/kernel/process.c
@@ -348,7 +348,7 @@ void exit_thread(void)
348#ifndef CONFIG_SMP 348#ifndef CONFIG_SMP
349 if(last_task_used_math == current) { 349 if(last_task_used_math == current) {
350#else 350#else
351 if(current_thread_info()->flags & _TIF_USEDFPU) { 351 if (test_thread_flag(TIF_USEDFPU)) {
352#endif 352#endif
353 /* Keep process from leaving FPU in a bogon state. */ 353 /* Keep process from leaving FPU in a bogon state. */
354 put_psr(get_psr() | PSR_EF); 354 put_psr(get_psr() | PSR_EF);
@@ -357,7 +357,7 @@ void exit_thread(void)
357#ifndef CONFIG_SMP 357#ifndef CONFIG_SMP
358 last_task_used_math = NULL; 358 last_task_used_math = NULL;
359#else 359#else
360 current_thread_info()->flags &= ~_TIF_USEDFPU; 360 clear_thread_flag(TIF_USEDFPU);
361#endif 361#endif
362 } 362 }
363} 363}
@@ -371,7 +371,7 @@ void flush_thread(void)
371#ifndef CONFIG_SMP 371#ifndef CONFIG_SMP
372 if(last_task_used_math == current) { 372 if(last_task_used_math == current) {
373#else 373#else
374 if(current_thread_info()->flags & _TIF_USEDFPU) { 374 if (test_thread_flag(TIF_USEDFPU)) {
375#endif 375#endif
376 /* Clean the fpu. */ 376 /* Clean the fpu. */
377 put_psr(get_psr() | PSR_EF); 377 put_psr(get_psr() | PSR_EF);
@@ -380,7 +380,7 @@ void flush_thread(void)
380#ifndef CONFIG_SMP 380#ifndef CONFIG_SMP
381 last_task_used_math = NULL; 381 last_task_used_math = NULL;
382#else 382#else
383 current_thread_info()->flags &= ~_TIF_USEDFPU; 383 clear_thread_flag(TIF_USEDFPU);
384#endif 384#endif
385 } 385 }
386 386
@@ -466,13 +466,13 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long sp,
466#ifndef CONFIG_SMP 466#ifndef CONFIG_SMP
467 if(last_task_used_math == current) { 467 if(last_task_used_math == current) {
468#else 468#else
469 if(current_thread_info()->flags & _TIF_USEDFPU) { 469 if (test_thread_flag(TIF_USEDFPU)) {
470#endif 470#endif
471 put_psr(get_psr() | PSR_EF); 471 put_psr(get_psr() | PSR_EF);
472 fpsave(&p->thread.float_regs[0], &p->thread.fsr, 472 fpsave(&p->thread.float_regs[0], &p->thread.fsr,
473 &p->thread.fpqueue[0], &p->thread.fpqdepth); 473 &p->thread.fpqueue[0], &p->thread.fpqdepth);
474#ifdef CONFIG_SMP 474#ifdef CONFIG_SMP
475 current_thread_info()->flags &= ~_TIF_USEDFPU; 475 clear_thread_flag(TIF_USEDFPU);
476#endif 476#endif
477 } 477 }
478 478
@@ -609,13 +609,13 @@ int dump_fpu (struct pt_regs * regs, elf_fpregset_t * fpregs)
609 return 1; 609 return 1;
610 } 610 }
611#ifdef CONFIG_SMP 611#ifdef CONFIG_SMP
612 if (current_thread_info()->flags & _TIF_USEDFPU) { 612 if (test_thread_flag(TIF_USEDFPU)) {
613 put_psr(get_psr() | PSR_EF); 613 put_psr(get_psr() | PSR_EF);
614 fpsave(&current->thread.float_regs[0], &current->thread.fsr, 614 fpsave(&current->thread.float_regs[0], &current->thread.fsr,
615 &current->thread.fpqueue[0], &current->thread.fpqdepth); 615 &current->thread.fpqueue[0], &current->thread.fpqdepth);
616 if (regs != NULL) { 616 if (regs != NULL) {
617 regs->psr &= ~(PSR_EF); 617 regs->psr &= ~(PSR_EF);
618 current_thread_info()->flags &= ~(_TIF_USEDFPU); 618 clear_thread_flag(TIF_USEDFPU);
619 } 619 }
620 } 620 }
621#else 621#else
diff --git a/arch/sparc/kernel/systbls.S b/arch/sparc/kernel/systbls.S
index ea75ca569052..3a69778c8366 100644
--- a/arch/sparc/kernel/systbls.S
+++ b/arch/sparc/kernel/systbls.S
@@ -78,7 +78,8 @@ sys_call_table:
78/*285*/ .long sys_mkdirat, sys_mknodat, sys_fchownat, sys_futimesat, sys_fstatat64 78/*285*/ .long sys_mkdirat, sys_mknodat, sys_fchownat, sys_futimesat, sys_fstatat64
79/*290*/ .long sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat 79/*290*/ .long sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat
80/*295*/ .long sys_fchmodat, sys_faccessat, sys_pselect6, sys_ppoll, sys_unshare 80/*295*/ .long sys_fchmodat, sys_faccessat, sys_pselect6, sys_ppoll, sys_unshare
81/*300*/ .long sys_set_robust_list, sys_get_robust_list, sys_migrate_pages 81/*300*/ .long sys_set_robust_list, sys_get_robust_list, sys_migrate_pages, sys_mbind, sys_get_mempolicy
82/*305*/ .long sys_set_mempolicy, sys_kexec_load, sys_move_pages, sys_getcpu, sys_epoll_pwait
82 83
83#ifdef CONFIG_SUNOS_EMUL 84#ifdef CONFIG_SUNOS_EMUL
84 /* Now the SunOS syscall table. */ 85 /* Now the SunOS syscall table. */
@@ -192,5 +193,8 @@ sunos_sys_table:
192 .long sunos_nosys, sunos_nosys, sunos_nosys 193 .long sunos_nosys, sunos_nosys, sunos_nosys
193 .long sunos_nosys 194 .long sunos_nosys
194/*300*/ .long sunos_nosys, sunos_nosys, sunos_nosys 195/*300*/ .long sunos_nosys, sunos_nosys, sunos_nosys
196 .long sunos_nosys, sunos_nosys, sunos_nosys
197 .long sunos_nosys, sunos_nosys, sunos_nosys
198 .long sunos_nosys
195 199
196#endif 200#endif
diff --git a/arch/sparc/kernel/traps.c b/arch/sparc/kernel/traps.c
index 6a70d215fd04..527687afc1c4 100644
--- a/arch/sparc/kernel/traps.c
+++ b/arch/sparc/kernel/traps.c
@@ -259,7 +259,7 @@ void do_fpd_trap(struct pt_regs *regs, unsigned long pc, unsigned long npc,
259 } else { 259 } else {
260 fpload(&current->thread.float_regs[0], &current->thread.fsr); 260 fpload(&current->thread.float_regs[0], &current->thread.fsr);
261 } 261 }
262 current_thread_info()->flags |= _TIF_USEDFPU; 262 set_thread_flag(TIF_USEDFPU);
263#endif 263#endif
264} 264}
265 265
@@ -290,7 +290,7 @@ void do_fpe_trap(struct pt_regs *regs, unsigned long pc, unsigned long npc,
290#ifndef CONFIG_SMP 290#ifndef CONFIG_SMP
291 if(!fpt) { 291 if(!fpt) {
292#else 292#else
293 if(!(task_thread_info(fpt)->flags & _TIF_USEDFPU)) { 293 if (!test_tsk_thread_flag(fpt, TIF_USEDFPU)) {
294#endif 294#endif
295 fpsave(&fake_regs[0], &fake_fsr, &fake_queue[0], &fake_depth); 295 fpsave(&fake_regs[0], &fake_fsr, &fake_queue[0], &fake_depth);
296 regs->psr &= ~PSR_EF; 296 regs->psr &= ~PSR_EF;
@@ -333,7 +333,7 @@ void do_fpe_trap(struct pt_regs *regs, unsigned long pc, unsigned long npc,
333 /* nope, better SIGFPE the offending process... */ 333 /* nope, better SIGFPE the offending process... */
334 334
335#ifdef CONFIG_SMP 335#ifdef CONFIG_SMP
336 task_thread_info(fpt)->flags &= ~_TIF_USEDFPU; 336 clear_tsk_thread_flag(fpt, TIF_USEDFPU);
337#endif 337#endif
338 if(psr & PSR_PS) { 338 if(psr & PSR_PS) {
339 /* The first fsr store/load we tried trapped, 339 /* The first fsr store/load we tried trapped,
diff --git a/arch/sparc/mm/init.c b/arch/sparc/mm/init.c
index c85ddf312747..a532922e2e35 100644
--- a/arch/sparc/mm/init.c
+++ b/arch/sparc/mm/init.c
@@ -75,7 +75,7 @@ void show_mem(void)
75 printk("Free swap: %6ldkB\n", 75 printk("Free swap: %6ldkB\n",
76 nr_swap_pages << (PAGE_SHIFT-10)); 76 nr_swap_pages << (PAGE_SHIFT-10));
77 printk("%ld pages of RAM\n", totalram_pages); 77 printk("%ld pages of RAM\n", totalram_pages);
78 printk("%d free pages\n", nr_free_pages()); 78 printk("%ld free pages\n", nr_free_pages());
79#if 0 /* undefined pgtable_cache_size, pgd_cache_size */ 79#if 0 /* undefined pgtable_cache_size, pgd_cache_size */
80 printk("%ld pages in page table cache\n",pgtable_cache_size); 80 printk("%ld pages in page table cache\n",pgtable_cache_size);
81#ifndef CONFIG_SMP 81#ifndef CONFIG_SMP
diff --git a/arch/sparc64/Kconfig b/arch/sparc64/Kconfig
index f75a686ba644..1a6348b565fb 100644
--- a/arch/sparc64/Kconfig
+++ b/arch/sparc64/Kconfig
@@ -136,18 +136,6 @@ config SMP
136 136
137 If you don't know what to do here, say N. 137 If you don't know what to do here, say N.
138 138
139config PREEMPT
140 bool "Preemptible Kernel"
141 help
142 This option reduces the latency of the kernel when reacting to
143 real-time or interactive events by allowing a low priority process to
144 be preempted even if it is in kernel mode executing a system call.
145 This allows applications to run more reliably even when the system is
146 under load.
147
148 Say Y here if you are building a kernel for a desktop, embedded
149 or real-time system. Say N if you are unsure.
150
151config NR_CPUS 139config NR_CPUS
152 int "Maximum number of CPUs (2-64)" 140 int "Maximum number of CPUs (2-64)"
153 range 2 64 141 range 2 64
@@ -399,6 +387,8 @@ config SCHED_SMT
399 when dealing with UltraSPARC cpus at a cost of slightly increased 387 when dealing with UltraSPARC cpus at a cost of slightly increased
400 overhead in some places. If unsure say N here. 388 overhead in some places. If unsure say N here.
401 389
390source "kernel/Kconfig.preempt"
391
402config CMDLINE_BOOL 392config CMDLINE_BOOL
403 bool "Default bootloader kernel arguments" 393 bool "Default bootloader kernel arguments"
404 394
diff --git a/arch/sparc64/defconfig b/arch/sparc64/defconfig
index 860b8b60526c..120c9c33b7a6 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.21-rc2 3# Linux kernel version: 2.6.21-rc4
4# Wed Feb 28 09:50:51 2007 4# Sat Mar 17 14:18:44 2007
5# 5#
6CONFIG_SPARC=y 6CONFIG_SPARC=y
7CONFIG_SPARC64=y 7CONFIG_SPARC64=y
@@ -50,6 +50,7 @@ CONFIG_POSIX_MQUEUE=y
50# CONFIG_IKCONFIG is not set 50# CONFIG_IKCONFIG is not set
51CONFIG_SYSFS_DEPRECATED=y 51CONFIG_SYSFS_DEPRECATED=y
52CONFIG_RELAY=y 52CONFIG_RELAY=y
53# CONFIG_BLK_DEV_INITRD is not set
53CONFIG_CC_OPTIMIZE_FOR_SIZE=y 54CONFIG_CC_OPTIMIZE_FOR_SIZE=y
54CONFIG_SYSCTL=y 55CONFIG_SYSCTL=y
55# CONFIG_EMBEDDED is not set 56# CONFIG_EMBEDDED is not set
@@ -108,7 +109,6 @@ CONFIG_GENERIC_HARDIRQS=y
108# General machine setup 109# General machine setup
109# 110#
110# CONFIG_SMP is not set 111# CONFIG_SMP is not set
111# CONFIG_PREEMPT is not set
112CONFIG_CPU_FREQ=y 112CONFIG_CPU_FREQ=y
113CONFIG_CPU_FREQ_TABLE=m 113CONFIG_CPU_FREQ_TABLE=m
114# CONFIG_CPU_FREQ_DEBUG is not set 114# CONFIG_CPU_FREQ_DEBUG is not set
@@ -165,6 +165,9 @@ CONFIG_BINFMT_ELF32=y
165CONFIG_BINFMT_ELF=y 165CONFIG_BINFMT_ELF=y
166CONFIG_BINFMT_MISC=m 166CONFIG_BINFMT_MISC=m
167CONFIG_SOLARIS_EMUL=y 167CONFIG_SOLARIS_EMUL=y
168# CONFIG_PREEMPT_NONE is not set
169CONFIG_PREEMPT_VOLUNTARY=y
170# CONFIG_PREEMPT is not set
168# CONFIG_CMDLINE_BOOL is not set 171# CONFIG_CMDLINE_BOOL is not set
169 172
170# 173#
@@ -340,7 +343,6 @@ CONFIG_BLK_DEV_NBD=m
340# CONFIG_BLK_DEV_SX8 is not set 343# CONFIG_BLK_DEV_SX8 is not set
341# CONFIG_BLK_DEV_UB is not set 344# CONFIG_BLK_DEV_UB is not set
342# CONFIG_BLK_DEV_RAM is not set 345# CONFIG_BLK_DEV_RAM is not set
343# CONFIG_BLK_DEV_INITRD is not set
344CONFIG_CDROM_PKTCDVD=m 346CONFIG_CDROM_PKTCDVD=m
345CONFIG_CDROM_PKTCDVD_BUFFERS=8 347CONFIG_CDROM_PKTCDVD_BUFFERS=8
346CONFIG_CDROM_PKTCDVD_WCACHE=y 348CONFIG_CDROM_PKTCDVD_WCACHE=y
diff --git a/arch/sparc64/kernel/ktlb.S b/arch/sparc64/kernel/ktlb.S
index e492db845ea3..d4024ac0d619 100644
--- a/arch/sparc64/kernel/ktlb.S
+++ b/arch/sparc64/kernel/ktlb.S
@@ -138,9 +138,15 @@ kvmap_dtlb_4v:
138 brgez,pn %g4, kvmap_dtlb_nonlinear 138 brgez,pn %g4, kvmap_dtlb_nonlinear
139 nop 139 nop
140 140
141#ifdef CONFIG_DEBUG_PAGEALLOC
142 /* Index through the base page size TSB even for linear
143 * mappings when using page allocation debugging.
144 */
145 KERN_TSB_LOOKUP_TL1(%g4, %g6, %g5, %g1, %g2, %g3, kvmap_dtlb_load)
146#else
141 /* Correct TAG_TARGET is already in %g6, check 4mb TSB. */ 147 /* Correct TAG_TARGET is already in %g6, check 4mb TSB. */
142 KERN_TSB4M_LOOKUP_TL1(%g6, %g5, %g1, %g2, %g3, kvmap_dtlb_load) 148 KERN_TSB4M_LOOKUP_TL1(%g6, %g5, %g1, %g2, %g3, kvmap_dtlb_load)
143 149#endif
144 /* TSB entry address left in %g1, lookup linear PTE. 150 /* TSB entry address left in %g1, lookup linear PTE.
145 * Must preserve %g1 and %g6 (TAG). 151 * Must preserve %g1 and %g6 (TAG).
146 */ 152 */
diff --git a/arch/sparc64/kernel/process.c b/arch/sparc64/kernel/process.c
index 7d75cd4eb297..b291060c25a6 100644
--- a/arch/sparc64/kernel/process.c
+++ b/arch/sparc64/kernel/process.c
@@ -413,8 +413,13 @@ void flush_thread(void)
413 struct thread_info *t = current_thread_info(); 413 struct thread_info *t = current_thread_info();
414 struct mm_struct *mm; 414 struct mm_struct *mm;
415 415
416 if (t->flags & _TIF_ABI_PENDING) 416 if (test_ti_thread_flag(t, TIF_ABI_PENDING)) {
417 t->flags ^= (_TIF_ABI_PENDING | _TIF_32BIT); 417 clear_ti_thread_flag(t, TIF_ABI_PENDING);
418 if (test_ti_thread_flag(t, TIF_32BIT))
419 clear_ti_thread_flag(t, TIF_32BIT);
420 else
421 set_ti_thread_flag(t, TIF_32BIT);
422 }
418 423
419 mm = t->task->mm; 424 mm = t->task->mm;
420 if (mm) 425 if (mm)
diff --git a/arch/sparc64/kernel/systbls.S b/arch/sparc64/kernel/systbls.S
index 948b7d2d5874..aaeb5e06735c 100644
--- a/arch/sparc64/kernel/systbls.S
+++ b/arch/sparc64/kernel/systbls.S
@@ -79,7 +79,8 @@ sys_call_table32:
79 .word sys_mkdirat, sys_mknodat, sys_fchownat, compat_sys_futimesat, compat_sys_fstatat64 79 .word sys_mkdirat, sys_mknodat, sys_fchownat, compat_sys_futimesat, compat_sys_fstatat64
80/*290*/ .word sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat 80/*290*/ .word sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat
81 .word sys_fchmodat, sys_faccessat, compat_sys_pselect6, compat_sys_ppoll, sys_unshare 81 .word sys_fchmodat, sys_faccessat, compat_sys_pselect6, compat_sys_ppoll, sys_unshare
82/*300*/ .word compat_sys_set_robust_list, compat_sys_get_robust_list, compat_sys_migrate_pages 82/*300*/ .word compat_sys_set_robust_list, compat_sys_get_robust_list, compat_sys_migrate_pages, compat_sys_mbind, compat_sys_get_mempolicy
83 .word compat_sys_set_mempolicy, compat_sys_kexec_load, compat_sys_move_pages, sys_getcpu, compat_sys_epoll_pwait
83 84
84#endif /* CONFIG_COMPAT */ 85#endif /* CONFIG_COMPAT */
85 86
@@ -149,7 +150,8 @@ sys_call_table:
149 .word sys_mkdirat, sys_mknodat, sys_fchownat, sys_futimesat, sys_fstatat64 150 .word sys_mkdirat, sys_mknodat, sys_fchownat, sys_futimesat, sys_fstatat64
150/*290*/ .word sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat 151/*290*/ .word sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat
151 .word sys_fchmodat, sys_faccessat, sys_pselect6, sys_ppoll, sys_unshare 152 .word sys_fchmodat, sys_faccessat, sys_pselect6, sys_ppoll, sys_unshare
152/*300*/ .word sys_set_robust_list, sys_get_robust_list, sys_migrate_pages 153/*300*/ .word sys_set_robust_list, sys_get_robust_list, sys_migrate_pages, sys_mbind, sys_get_mempolicy
154 .word sys_set_mempolicy, sys_kexec_load, sys_move_pages, sys_getcpu, sys_epoll_pwait
153 155
154#if defined(CONFIG_SUNOS_EMUL) || defined(CONFIG_SOLARIS_EMUL) || \ 156#if defined(CONFIG_SUNOS_EMUL) || defined(CONFIG_SOLARIS_EMUL) || \
155 defined(CONFIG_SOLARIS_EMUL_MODULE) 157 defined(CONFIG_SOLARIS_EMUL_MODULE)
@@ -264,5 +266,8 @@ sunos_sys_table:
264 .word sunos_nosys, sunos_nosys, sunos_nosys 266 .word sunos_nosys, sunos_nosys, sunos_nosys
265 .word sunos_nosys 267 .word sunos_nosys
266/*300*/ .word sunos_nosys, sunos_nosys, sunos_nosys 268/*300*/ .word sunos_nosys, sunos_nosys, sunos_nosys
269 .word sunos_nosys, sunos_nosys, sunos_nosys
270 .word sunos_nosys, sunos_nosys, sunos_nosys
271 .word sunos_nosys
267 272
268#endif 273#endif
diff --git a/arch/sparc64/mm/hugetlbpage.c b/arch/sparc64/mm/hugetlbpage.c
index 33fd0b265e70..00677b5e1d7d 100644
--- a/arch/sparc64/mm/hugetlbpage.c
+++ b/arch/sparc64/mm/hugetlbpage.c
@@ -248,6 +248,7 @@ void set_huge_pte_at(struct mm_struct *mm, unsigned long addr,
248 if (!pte_present(*ptep) && pte_present(entry)) 248 if (!pte_present(*ptep) && pte_present(entry))
249 mm->context.huge_pte_count++; 249 mm->context.huge_pte_count++;
250 250
251 addr &= HPAGE_MASK;
251 for (i = 0; i < (1 << HUGETLB_PAGE_ORDER); i++) { 252 for (i = 0; i < (1 << HUGETLB_PAGE_ORDER); i++) {
252 set_pte_at(mm, addr, ptep, entry); 253 set_pte_at(mm, addr, ptep, entry);
253 ptep++; 254 ptep++;
@@ -266,6 +267,8 @@ pte_t huge_ptep_get_and_clear(struct mm_struct *mm, unsigned long addr,
266 if (pte_present(entry)) 267 if (pte_present(entry))
267 mm->context.huge_pte_count--; 268 mm->context.huge_pte_count--;
268 269
270 addr &= HPAGE_MASK;
271
269 for (i = 0; i < (1 << HUGETLB_PAGE_ORDER); i++) { 272 for (i = 0; i < (1 << HUGETLB_PAGE_ORDER); i++) {
270 pte_clear(mm, addr, ptep); 273 pte_clear(mm, addr, ptep);
271 addr += PAGE_SIZE; 274 addr += PAGE_SIZE;
diff --git a/arch/sparc64/mm/init.c b/arch/sparc64/mm/init.c
index b1a1ee0cc6bd..f146071a4b2a 100644
--- a/arch/sparc64/mm/init.c
+++ b/arch/sparc64/mm/init.c
@@ -59,8 +59,10 @@ unsigned long kern_linear_pte_xor[2] __read_mostly;
59 */ 59 */
60unsigned long kpte_linear_bitmap[KPTE_BITMAP_BYTES / sizeof(unsigned long)]; 60unsigned long kpte_linear_bitmap[KPTE_BITMAP_BYTES / sizeof(unsigned long)];
61 61
62#ifndef CONFIG_DEBUG_PAGEALLOC
62/* A special kernel TSB for 4MB and 256MB linear mappings. */ 63/* A special kernel TSB for 4MB and 256MB linear mappings. */
63struct tsb swapper_4m_tsb[KERNEL_TSB4M_NENTRIES]; 64struct tsb swapper_4m_tsb[KERNEL_TSB4M_NENTRIES];
65#endif
64 66
65#define MAX_BANKS 32 67#define MAX_BANKS 32
66 68
@@ -1301,7 +1303,12 @@ static void __init tsb_phys_patch(void)
1301} 1303}
1302 1304
1303/* Don't mark as init, we give this to the Hypervisor. */ 1305/* Don't mark as init, we give this to the Hypervisor. */
1304static struct hv_tsb_descr ktsb_descr[2]; 1306#ifndef CONFIG_DEBUG_PAGEALLOC
1307#define NUM_KTSB_DESCR 2
1308#else
1309#define NUM_KTSB_DESCR 1
1310#endif
1311static struct hv_tsb_descr ktsb_descr[NUM_KTSB_DESCR];
1305extern struct tsb swapper_tsb[KERNEL_TSB_NENTRIES]; 1312extern struct tsb swapper_tsb[KERNEL_TSB_NENTRIES];
1306 1313
1307static void __init sun4v_ktsb_init(void) 1314static void __init sun4v_ktsb_init(void)
@@ -1340,6 +1347,7 @@ static void __init sun4v_ktsb_init(void)
1340 ktsb_descr[0].tsb_base = ktsb_pa; 1347 ktsb_descr[0].tsb_base = ktsb_pa;
1341 ktsb_descr[0].resv = 0; 1348 ktsb_descr[0].resv = 0;
1342 1349
1350#ifndef CONFIG_DEBUG_PAGEALLOC
1343 /* Second KTSB for 4MB/256MB mappings. */ 1351 /* Second KTSB for 4MB/256MB mappings. */
1344 ktsb_pa = (kern_base + 1352 ktsb_pa = (kern_base +
1345 ((unsigned long)&swapper_4m_tsb[0] - KERNBASE)); 1353 ((unsigned long)&swapper_4m_tsb[0] - KERNBASE));
@@ -1352,6 +1360,7 @@ static void __init sun4v_ktsb_init(void)
1352 ktsb_descr[1].ctx_idx = 0; 1360 ktsb_descr[1].ctx_idx = 0;
1353 ktsb_descr[1].tsb_base = ktsb_pa; 1361 ktsb_descr[1].tsb_base = ktsb_pa;
1354 ktsb_descr[1].resv = 0; 1362 ktsb_descr[1].resv = 0;
1363#endif
1355} 1364}
1356 1365
1357void __cpuinit sun4v_ktsb_register(void) 1366void __cpuinit sun4v_ktsb_register(void)
@@ -1364,7 +1373,7 @@ void __cpuinit sun4v_ktsb_register(void)
1364 pa = kern_base + ((unsigned long)&ktsb_descr[0] - KERNBASE); 1373 pa = kern_base + ((unsigned long)&ktsb_descr[0] - KERNBASE);
1365 1374
1366 func = HV_FAST_MMU_TSB_CTX0; 1375 func = HV_FAST_MMU_TSB_CTX0;
1367 arg0 = 2; 1376 arg0 = NUM_KTSB_DESCR;
1368 arg1 = pa; 1377 arg1 = pa;
1369 __asm__ __volatile__("ta %6" 1378 __asm__ __volatile__("ta %6"
1370 : "=&r" (func), "=&r" (arg0), "=&r" (arg1) 1379 : "=&r" (func), "=&r" (arg0), "=&r" (arg1)
@@ -1393,7 +1402,9 @@ void __init paging_init(void)
1393 1402
1394 /* Invalidate both kernel TSBs. */ 1403 /* Invalidate both kernel TSBs. */
1395 memset(swapper_tsb, 0x40, sizeof(swapper_tsb)); 1404 memset(swapper_tsb, 0x40, sizeof(swapper_tsb));
1405#ifndef CONFIG_DEBUG_PAGEALLOC
1396 memset(swapper_4m_tsb, 0x40, sizeof(swapper_4m_tsb)); 1406 memset(swapper_4m_tsb, 0x40, sizeof(swapper_4m_tsb));
1407#endif
1397 1408
1398 if (tlb_type == hypervisor) 1409 if (tlb_type == hypervisor)
1399 sun4v_pgprot_init(); 1410 sun4v_pgprot_init();
@@ -1725,8 +1736,13 @@ static void __init sun4u_pgprot_init(void)
1725 pg_iobits = (_PAGE_VALID | _PAGE_PRESENT_4U | __DIRTY_BITS_4U | 1736 pg_iobits = (_PAGE_VALID | _PAGE_PRESENT_4U | __DIRTY_BITS_4U |
1726 __ACCESS_BITS_4U | _PAGE_E_4U); 1737 __ACCESS_BITS_4U | _PAGE_E_4U);
1727 1738
1739#ifdef CONFIG_DEBUG_PAGEALLOC
1740 kern_linear_pte_xor[0] = (_PAGE_VALID | _PAGE_SZBITS_4U) ^
1741 0xfffff80000000000;
1742#else
1728 kern_linear_pte_xor[0] = (_PAGE_VALID | _PAGE_SZ4MB_4U) ^ 1743 kern_linear_pte_xor[0] = (_PAGE_VALID | _PAGE_SZ4MB_4U) ^
1729 0xfffff80000000000; 1744 0xfffff80000000000;
1745#endif
1730 kern_linear_pte_xor[0] |= (_PAGE_CP_4U | _PAGE_CV_4U | 1746 kern_linear_pte_xor[0] |= (_PAGE_CP_4U | _PAGE_CV_4U |
1731 _PAGE_P_4U | _PAGE_W_4U); 1747 _PAGE_P_4U | _PAGE_W_4U);
1732 1748
@@ -1769,13 +1785,23 @@ static void __init sun4v_pgprot_init(void)
1769 _PAGE_E = _PAGE_E_4V; 1785 _PAGE_E = _PAGE_E_4V;
1770 _PAGE_CACHE = _PAGE_CACHE_4V; 1786 _PAGE_CACHE = _PAGE_CACHE_4V;
1771 1787
1788#ifdef CONFIG_DEBUG_PAGEALLOC
1789 kern_linear_pte_xor[0] = (_PAGE_VALID | _PAGE_SZBITS_4V) ^
1790 0xfffff80000000000;
1791#else
1772 kern_linear_pte_xor[0] = (_PAGE_VALID | _PAGE_SZ4MB_4V) ^ 1792 kern_linear_pte_xor[0] = (_PAGE_VALID | _PAGE_SZ4MB_4V) ^
1773 0xfffff80000000000; 1793 0xfffff80000000000;
1794#endif
1774 kern_linear_pte_xor[0] |= (_PAGE_CP_4V | _PAGE_CV_4V | 1795 kern_linear_pte_xor[0] |= (_PAGE_CP_4V | _PAGE_CV_4V |
1775 _PAGE_P_4V | _PAGE_W_4V); 1796 _PAGE_P_4V | _PAGE_W_4V);
1776 1797
1798#ifdef CONFIG_DEBUG_PAGEALLOC
1799 kern_linear_pte_xor[1] = (_PAGE_VALID | _PAGE_SZBITS_4V) ^
1800 0xfffff80000000000;
1801#else
1777 kern_linear_pte_xor[1] = (_PAGE_VALID | _PAGE_SZ256MB_4V) ^ 1802 kern_linear_pte_xor[1] = (_PAGE_VALID | _PAGE_SZ256MB_4V) ^
1778 0xfffff80000000000; 1803 0xfffff80000000000;
1804#endif
1779 kern_linear_pte_xor[1] |= (_PAGE_CP_4V | _PAGE_CV_4V | 1805 kern_linear_pte_xor[1] |= (_PAGE_CP_4V | _PAGE_CV_4V |
1780 _PAGE_P_4V | _PAGE_W_4V); 1806 _PAGE_P_4V | _PAGE_W_4V);
1781 1807
diff --git a/arch/um/Kconfig b/arch/um/Kconfig
index b3a21ba77cd2..354cc6b70530 100644
--- a/arch/um/Kconfig
+++ b/arch/um/Kconfig
@@ -44,7 +44,7 @@ config LOCKDEP_SUPPORT
44 44
45config STACKTRACE_SUPPORT 45config STACKTRACE_SUPPORT
46 bool 46 bool
47 default y 47 default n
48 48
49config GENERIC_CALIBRATE_DELAY 49config GENERIC_CALIBRATE_DELAY
50 bool 50 bool
diff --git a/arch/um/scripts/Makefile.rules b/arch/um/scripts/Makefile.rules
index 813077fb1e5b..a9a4b85ca516 100644
--- a/arch/um/scripts/Makefile.rules
+++ b/arch/um/scripts/Makefile.rules
@@ -10,7 +10,7 @@ USER_OBJS := $(foreach file,$(USER_OBJS),$(obj)/$(file))
10$(USER_OBJS:.o=.%): \ 10$(USER_OBJS:.o=.%): \
11 c_flags = -Wp,-MD,$(depfile) $(USER_CFLAGS) $(CFLAGS_$(basetarget).o) 11 c_flags = -Wp,-MD,$(depfile) $(USER_CFLAGS) $(CFLAGS_$(basetarget).o)
12$(USER_OBJS) : CHECKFLAGS := -D__linux__ -Dlinux -D__STDC__ \ 12$(USER_OBJS) : CHECKFLAGS := -D__linux__ -Dlinux -D__STDC__ \
13 -Dunix -D__unix__ -D__$(SUBARCH)__ 13 -Dunix -D__unix__ -D__$(SUBARCH)__ $(CF)
14 14
15# These are like USER_OBJS but filter USER_CFLAGS through unprofile instead of 15# These are like USER_OBJS but filter USER_CFLAGS through unprofile instead of
16# using it directly. 16# using it directly.
@@ -19,7 +19,7 @@ UNPROFILE_OBJS := $(foreach file,$(UNPROFILE_OBJS),$(obj)/$(file))
19$(UNPROFILE_OBJS:.o=.%): \ 19$(UNPROFILE_OBJS:.o=.%): \
20 c_flags = -Wp,-MD,$(depfile) $(call unprofile,$(USER_CFLAGS)) $(CFLAGS_$(basetarget).o) 20 c_flags = -Wp,-MD,$(depfile) $(call unprofile,$(USER_CFLAGS)) $(CFLAGS_$(basetarget).o)
21$(UNPROFILE_OBJS) : CHECKFLAGS := -D__linux__ -Dlinux -D__STDC__ \ 21$(UNPROFILE_OBJS) : CHECKFLAGS := -D__linux__ -Dlinux -D__STDC__ \
22 -Dunix -D__unix__ -D__$(SUBARCH)__ 22 -Dunix -D__unix__ -D__$(SUBARCH)__ $(CF)
23 23
24# The stubs and unmap.o can't try to call mcount or update basic block data 24# The stubs and unmap.o can't try to call mcount or update basic block data
25define unprofile 25define unprofile
diff --git a/arch/x86_64/defconfig b/arch/x86_64/defconfig
index 293a4a4c609e..7a1e251e333d 100644
--- a/arch/x86_64/defconfig
+++ b/arch/x86_64/defconfig
@@ -1,11 +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.20-git8 3# Linux kernel version: 2.6.21-rc3
4# Tue Feb 13 11:25:16 2007 4# Wed Mar 7 15:29:47 2007
5# 5#
6CONFIG_X86_64=y 6CONFIG_X86_64=y
7CONFIG_64BIT=y 7CONFIG_64BIT=y
8CONFIG_X86=y 8CONFIG_X86=y
9CONFIG_GENERIC_TIME=y
10CONFIG_GENERIC_TIME_VSYSCALL=y
9CONFIG_ZONE_DMA32=y 11CONFIG_ZONE_DMA32=y
10CONFIG_LOCKDEP_SUPPORT=y 12CONFIG_LOCKDEP_SUPPORT=y
11CONFIG_STACKTRACE_SUPPORT=y 13CONFIG_STACKTRACE_SUPPORT=y
@@ -43,6 +45,7 @@ CONFIG_LOCALVERSION_AUTO=y
43CONFIG_SWAP=y 45CONFIG_SWAP=y
44CONFIG_SYSVIPC=y 46CONFIG_SYSVIPC=y
45# CONFIG_IPC_NS is not set 47# CONFIG_IPC_NS is not set
48CONFIG_SYSVIPC_SYSCTL=y
46CONFIG_POSIX_MQUEUE=y 49CONFIG_POSIX_MQUEUE=y
47# CONFIG_BSD_PROCESS_ACCT is not set 50# CONFIG_BSD_PROCESS_ACCT is not set
48# CONFIG_TASKSTATS is not set 51# CONFIG_TASKSTATS is not set
@@ -53,6 +56,7 @@ CONFIG_IKCONFIG_PROC=y
53# CONFIG_CPUSETS is not set 56# CONFIG_CPUSETS is not set
54CONFIG_SYSFS_DEPRECATED=y 57CONFIG_SYSFS_DEPRECATED=y
55# CONFIG_RELAY is not set 58# CONFIG_RELAY is not set
59CONFIG_BLK_DEV_INITRD=y
56CONFIG_INITRAMFS_SOURCE="" 60CONFIG_INITRAMFS_SOURCE=""
57CONFIG_CC_OPTIMIZE_FOR_SIZE=y 61CONFIG_CC_OPTIMIZE_FOR_SIZE=y
58CONFIG_SYSCTL=y 62CONFIG_SYSCTL=y
@@ -114,11 +118,11 @@ CONFIG_X86_PC=y
114# CONFIG_X86_VSMP is not set 118# CONFIG_X86_VSMP is not set
115# CONFIG_MK8 is not set 119# CONFIG_MK8 is not set
116# CONFIG_MPSC is not set 120# CONFIG_MPSC is not set
117CONFIG_MCORE2=y 121# CONFIG_MCORE2 is not set
118# CONFIG_GENERIC_CPU is not set 122CONFIG_GENERIC_CPU=y
119CONFIG_X86_L1_CACHE_BYTES=64 123CONFIG_X86_L1_CACHE_BYTES=128
120CONFIG_X86_L1_CACHE_SHIFT=6 124CONFIG_X86_L1_CACHE_SHIFT=7
121CONFIG_X86_INTERNODE_CACHE_BYTES=64 125CONFIG_X86_INTERNODE_CACHE_BYTES=128
122CONFIG_X86_TSC=y 126CONFIG_X86_TSC=y
123CONFIG_X86_GOOD_APIC=y 127CONFIG_X86_GOOD_APIC=y
124# CONFIG_MICROCODE is not set 128# CONFIG_MICROCODE is not set
@@ -207,10 +211,8 @@ CONFIG_ACPI_PROCFS=y
207CONFIG_ACPI_AC=y 211CONFIG_ACPI_AC=y
208CONFIG_ACPI_BATTERY=y 212CONFIG_ACPI_BATTERY=y
209CONFIG_ACPI_BUTTON=y 213CONFIG_ACPI_BUTTON=y
210# CONFIG_ACPI_HOTKEY is not set
211CONFIG_ACPI_FAN=y 214CONFIG_ACPI_FAN=y
212# CONFIG_ACPI_DOCK is not set 215# CONFIG_ACPI_DOCK is not set
213# CONFIG_ACPI_BAY is not set
214CONFIG_ACPI_PROCESSOR=y 216CONFIG_ACPI_PROCESSOR=y
215CONFIG_ACPI_HOTPLUG_CPU=y 217CONFIG_ACPI_HOTPLUG_CPU=y
216CONFIG_ACPI_THERMAL=y 218CONFIG_ACPI_THERMAL=y
@@ -319,7 +321,7 @@ CONFIG_IP_PNP_DHCP=y
319# CONFIG_INET_ESP is not set 321# CONFIG_INET_ESP is not set
320# CONFIG_INET_IPCOMP is not set 322# CONFIG_INET_IPCOMP is not set
321# CONFIG_INET_XFRM_TUNNEL is not set 323# CONFIG_INET_XFRM_TUNNEL is not set
322# CONFIG_INET_TUNNEL is not set 324CONFIG_INET_TUNNEL=y
323# CONFIG_INET_XFRM_MODE_TRANSPORT is not set 325# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
324# CONFIG_INET_XFRM_MODE_TUNNEL is not set 326# CONFIG_INET_XFRM_MODE_TUNNEL is not set
325# CONFIG_INET_XFRM_MODE_BEET is not set 327# CONFIG_INET_XFRM_MODE_BEET is not set
@@ -421,7 +423,13 @@ CONFIG_FW_LOADER=y
421# 423#
422# Plug and Play support 424# Plug and Play support
423# 425#
424# CONFIG_PNP is not set 426CONFIG_PNP=y
427# CONFIG_PNP_DEBUG is not set
428
429#
430# Protocols
431#
432CONFIG_PNPACPI=y
425 433
426# 434#
427# Block devices 435# Block devices
@@ -441,7 +449,6 @@ CONFIG_BLK_DEV_RAM=y
441CONFIG_BLK_DEV_RAM_COUNT=16 449CONFIG_BLK_DEV_RAM_COUNT=16
442CONFIG_BLK_DEV_RAM_SIZE=4096 450CONFIG_BLK_DEV_RAM_SIZE=4096
443CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 451CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
444CONFIG_BLK_DEV_INITRD=y
445# CONFIG_CDROM_PKTCDVD is not set 452# CONFIG_CDROM_PKTCDVD is not set
446# CONFIG_ATA_OVER_ETH is not set 453# CONFIG_ATA_OVER_ETH is not set
447 454
@@ -451,6 +458,7 @@ CONFIG_BLK_DEV_INITRD=y
451# CONFIG_IBM_ASM is not set 458# CONFIG_IBM_ASM is not set
452# CONFIG_SGI_IOC4 is not set 459# CONFIG_SGI_IOC4 is not set
453# CONFIG_TIFM_CORE is not set 460# CONFIG_TIFM_CORE is not set
461# CONFIG_SONY_LAPTOP is not set
454 462
455# 463#
456# ATA/ATAPI/MFM/RLL support 464# ATA/ATAPI/MFM/RLL support
@@ -477,6 +485,7 @@ CONFIG_BLK_DEV_IDEACPI=y
477# 485#
478CONFIG_IDE_GENERIC=y 486CONFIG_IDE_GENERIC=y
479# CONFIG_BLK_DEV_CMD640 is not set 487# CONFIG_BLK_DEV_CMD640 is not set
488# CONFIG_BLK_DEV_IDEPNP is not set
480CONFIG_BLK_DEV_IDEPCI=y 489CONFIG_BLK_DEV_IDEPCI=y
481# CONFIG_IDEPCI_SHARE_IRQ is not set 490# CONFIG_IDEPCI_SHARE_IRQ is not set
482# CONFIG_BLK_DEV_OFFBOARD is not set 491# CONFIG_BLK_DEV_OFFBOARD is not set
@@ -623,6 +632,7 @@ CONFIG_SATA_VIA=y
623# CONFIG_SATA_VITESSE is not set 632# CONFIG_SATA_VITESSE is not set
624# CONFIG_SATA_INIC162X is not set 633# CONFIG_SATA_INIC162X is not set
625CONFIG_SATA_INTEL_COMBINED=y 634CONFIG_SATA_INTEL_COMBINED=y
635CONFIG_SATA_ACPI=y
626# CONFIG_PATA_ALI is not set 636# CONFIG_PATA_ALI is not set
627# CONFIG_PATA_AMD is not set 637# CONFIG_PATA_AMD is not set
628# CONFIG_PATA_ARTOP is not set 638# CONFIG_PATA_ARTOP is not set
@@ -726,6 +736,7 @@ CONFIG_NETDEVICES=y
726# CONFIG_BONDING is not set 736# CONFIG_BONDING is not set
727# CONFIG_EQUALIZER is not set 737# CONFIG_EQUALIZER is not set
728CONFIG_TUN=y 738CONFIG_TUN=y
739# CONFIG_NET_SB1000 is not set
729 740
730# 741#
731# ARCnet devices 742# ARCnet devices
@@ -920,6 +931,7 @@ CONFIG_HW_CONSOLE=y
920CONFIG_SERIAL_8250=y 931CONFIG_SERIAL_8250=y
921CONFIG_SERIAL_8250_CONSOLE=y 932CONFIG_SERIAL_8250_CONSOLE=y
922CONFIG_SERIAL_8250_PCI=y 933CONFIG_SERIAL_8250_PCI=y
934CONFIG_SERIAL_8250_PNP=y
923CONFIG_SERIAL_8250_NR_UARTS=4 935CONFIG_SERIAL_8250_NR_UARTS=4
924CONFIG_SERIAL_8250_RUNTIME_UARTS=4 936CONFIG_SERIAL_8250_RUNTIME_UARTS=4
925# CONFIG_SERIAL_8250_EXTENDED is not set 937# CONFIG_SERIAL_8250_EXTENDED is not set
@@ -1001,6 +1013,7 @@ CONFIG_I2C_ISA=m
1001# CONFIG_I2C_NFORCE2 is not set 1013# CONFIG_I2C_NFORCE2 is not set
1002# CONFIG_I2C_OCORES is not set 1014# CONFIG_I2C_OCORES is not set
1003# CONFIG_I2C_PARPORT_LIGHT is not set 1015# CONFIG_I2C_PARPORT_LIGHT is not set
1016# CONFIG_I2C_PASEMI is not set
1004# CONFIG_I2C_PROSAVAGE is not set 1017# CONFIG_I2C_PROSAVAGE is not set
1005# CONFIG_I2C_SAVAGE4 is not set 1018# CONFIG_I2C_SAVAGE4 is not set
1006# CONFIG_I2C_SIS5595 is not set 1019# CONFIG_I2C_SIS5595 is not set
@@ -1047,6 +1060,7 @@ CONFIG_HWMON=y
1047# CONFIG_SENSORS_ADM1021 is not set 1060# CONFIG_SENSORS_ADM1021 is not set
1048# CONFIG_SENSORS_ADM1025 is not set 1061# CONFIG_SENSORS_ADM1025 is not set
1049# CONFIG_SENSORS_ADM1026 is not set 1062# CONFIG_SENSORS_ADM1026 is not set
1063# CONFIG_SENSORS_ADM1029 is not set
1050# CONFIG_SENSORS_ADM1031 is not set 1064# CONFIG_SENSORS_ADM1031 is not set
1051# CONFIG_SENSORS_ADM9240 is not set 1065# CONFIG_SENSORS_ADM9240 is not set
1052# CONFIG_SENSORS_K8TEMP is not set 1066# CONFIG_SENSORS_K8TEMP is not set
@@ -1090,6 +1104,11 @@ CONFIG_SENSORS_SMSC47B397=m
1090# CONFIG_HWMON_DEBUG_CHIP is not set 1104# CONFIG_HWMON_DEBUG_CHIP is not set
1091 1105
1092# 1106#
1107# Multifunction device drivers
1108#
1109# CONFIG_MFD_SM501 is not set
1110
1111#
1093# Multimedia devices 1112# Multimedia devices
1094# 1113#
1095# CONFIG_VIDEO_DEV is not set 1114# CONFIG_VIDEO_DEV is not set
@@ -1103,7 +1122,7 @@ CONFIG_SENSORS_SMSC47B397=m
1103# 1122#
1104# Graphics support 1123# Graphics support
1105# 1124#
1106# CONFIG_FIRMWARE_EDID is not set 1125# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
1107# CONFIG_FB is not set 1126# CONFIG_FB is not set
1108 1127
1109# 1128#
@@ -1114,7 +1133,6 @@ CONFIG_VGACON_SOFT_SCROLLBACK=y
1114CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=256 1133CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=256
1115CONFIG_VIDEO_SELECT=y 1134CONFIG_VIDEO_SELECT=y
1116CONFIG_DUMMY_CONSOLE=y 1135CONFIG_DUMMY_CONSOLE=y
1117# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
1118 1136
1119# 1137#
1120# Sound 1138# Sound
@@ -1130,9 +1148,8 @@ CONFIG_SOUND=y
1130# Open Sound System 1148# Open Sound System
1131# 1149#
1132CONFIG_SOUND_PRIME=y 1150CONFIG_SOUND_PRIME=y
1133CONFIG_OBSOLETE_OSS=y 1151# CONFIG_OBSOLETE_OSS is not set
1134# CONFIG_SOUND_BT878 is not set 1152# CONFIG_SOUND_BT878 is not set
1135# CONFIG_SOUND_ES1371 is not set
1136CONFIG_SOUND_ICH=y 1153CONFIG_SOUND_ICH=y
1137# CONFIG_SOUND_TRIDENT is not set 1154# CONFIG_SOUND_TRIDENT is not set
1138# CONFIG_SOUND_MSNDCLAS is not set 1155# CONFIG_SOUND_MSNDCLAS is not set
@@ -1263,6 +1280,7 @@ CONFIG_USB_MON=y
1263# CONFIG_USB_RIO500 is not set 1280# CONFIG_USB_RIO500 is not set
1264# CONFIG_USB_LEGOTOWER is not set 1281# CONFIG_USB_LEGOTOWER is not set
1265# CONFIG_USB_LCD is not set 1282# CONFIG_USB_LCD is not set
1283# CONFIG_USB_BERRY_CHARGE is not set
1266# CONFIG_USB_LED is not set 1284# CONFIG_USB_LED is not set
1267# CONFIG_USB_CYPRESS_CY7C63 is not set 1285# CONFIG_USB_CYPRESS_CY7C63 is not set
1268# CONFIG_USB_CYTHERM is not set 1286# CONFIG_USB_CYTHERM is not set
@@ -1273,6 +1291,7 @@ CONFIG_USB_MON=y
1273# CONFIG_USB_SISUSBVGA is not set 1291# CONFIG_USB_SISUSBVGA is not set
1274# CONFIG_USB_LD is not set 1292# CONFIG_USB_LD is not set
1275# CONFIG_USB_TRANCEVIBRATOR is not set 1293# CONFIG_USB_TRANCEVIBRATOR is not set
1294# CONFIG_USB_IOWARRIOR is not set
1276# CONFIG_USB_TEST is not set 1295# CONFIG_USB_TEST is not set
1277 1296
1278# 1297#
@@ -1538,6 +1557,7 @@ CONFIG_DEBUG_KERNEL=y
1538CONFIG_LOG_BUF_SHIFT=18 1557CONFIG_LOG_BUF_SHIFT=18
1539CONFIG_DETECT_SOFTLOCKUP=y 1558CONFIG_DETECT_SOFTLOCKUP=y
1540# CONFIG_SCHEDSTATS is not set 1559# CONFIG_SCHEDSTATS is not set
1560# CONFIG_TIMER_STATS is not set
1541# CONFIG_DEBUG_SLAB is not set 1561# CONFIG_DEBUG_SLAB is not set
1542# CONFIG_DEBUG_RT_MUTEXES is not set 1562# CONFIG_DEBUG_RT_MUTEXES is not set
1543# CONFIG_RT_MUTEX_TESTER is not set 1563# CONFIG_RT_MUTEX_TESTER is not set
@@ -1556,6 +1576,7 @@ CONFIG_DEBUG_BUGVERBOSE=y
1556# CONFIG_FORCED_INLINING is not set 1576# CONFIG_FORCED_INLINING is not set
1557# CONFIG_RCU_TORTURE_TEST is not set 1577# CONFIG_RCU_TORTURE_TEST is not set
1558# CONFIG_LKDTM is not set 1578# CONFIG_LKDTM is not set
1579# CONFIG_FAULT_INJECTION is not set
1559# CONFIG_DEBUG_RODATA is not set 1580# CONFIG_DEBUG_RODATA is not set
1560# CONFIG_IOMMU_DEBUG is not set 1581# CONFIG_IOMMU_DEBUG is not set
1561CONFIG_DEBUG_STACKOVERFLOW=y 1582CONFIG_DEBUG_STACKOVERFLOW=y
diff --git a/arch/x86_64/ia32/ia32entry.S b/arch/x86_64/ia32/ia32entry.S
index eda7a0d4dc15..796df6992f62 100644
--- a/arch/x86_64/ia32/ia32entry.S
+++ b/arch/x86_64/ia32/ia32entry.S
@@ -560,7 +560,7 @@ ia32_sys_call_table:
560 .quad sys_sched_yield 560 .quad sys_sched_yield
561 .quad sys_sched_get_priority_max 561 .quad sys_sched_get_priority_max
562 .quad sys_sched_get_priority_min /* 160 */ 562 .quad sys_sched_get_priority_min /* 160 */
563 .quad sys_sched_rr_get_interval 563 .quad sys32_sched_rr_get_interval
564 .quad compat_sys_nanosleep 564 .quad compat_sys_nanosleep
565 .quad sys_mremap 565 .quad sys_mremap
566 .quad sys_setresuid16 566 .quad sys_setresuid16
diff --git a/arch/x86_64/kernel/cpufreq/Kconfig b/arch/x86_64/kernel/cpufreq/Kconfig
index ced15d06f0f3..40acb67fb882 100644
--- a/arch/x86_64/kernel/cpufreq/Kconfig
+++ b/arch/x86_64/kernel/cpufreq/Kconfig
@@ -75,6 +75,7 @@ config X86_ACPI_CPUFREQ_PROC_INTF
75config X86_P4_CLOCKMOD 75config X86_P4_CLOCKMOD
76 tristate "Intel Pentium 4 clock modulation" 76 tristate "Intel Pentium 4 clock modulation"
77 depends on EMBEDDED 77 depends on EMBEDDED
78 select CPU_FREQ_TABLE
78 help 79 help
79 This adds the clock modulation driver for Intel Pentium 4 / XEON 80 This adds the clock modulation driver for Intel Pentium 4 / XEON
80 processors. When enabled it will lower CPU temperature by skipping 81 processors. When enabled it will lower CPU temperature by skipping
diff --git a/arch/x86_64/kernel/e820.c b/arch/x86_64/kernel/e820.c
index 4651fd22b213..a490fabfcf47 100644
--- a/arch/x86_64/kernel/e820.c
+++ b/arch/x86_64/kernel/e820.c
@@ -662,7 +662,7 @@ static int __init parse_memmap_opt(char *p)
662} 662}
663early_param("memmap", parse_memmap_opt); 663early_param("memmap", parse_memmap_opt);
664 664
665void finish_e820_parsing(void) 665void __init finish_e820_parsing(void)
666{ 666{
667 if (userdef) { 667 if (userdef) {
668 printk(KERN_INFO "user-defined physical RAM map:\n"); 668 printk(KERN_INFO "user-defined physical RAM map:\n");
diff --git a/arch/x86_64/kernel/early-quirks.c b/arch/x86_64/kernel/early-quirks.c
index dec587b293bf..148c6bcf5bb4 100644
--- a/arch/x86_64/kernel/early-quirks.c
+++ b/arch/x86_64/kernel/early-quirks.c
@@ -16,7 +16,7 @@
16#include <asm/proto.h> 16#include <asm/proto.h>
17#include <asm/dma.h> 17#include <asm/dma.h>
18 18
19static void via_bugs(void) 19static void __init via_bugs(void)
20{ 20{
21#ifdef CONFIG_IOMMU 21#ifdef CONFIG_IOMMU
22 if ((end_pfn > MAX_DMA32_PFN || force_iommu) && 22 if ((end_pfn > MAX_DMA32_PFN || force_iommu) &&
@@ -36,7 +36,7 @@ static int __init nvidia_hpet_check(struct acpi_table_header *header)
36} 36}
37#endif 37#endif
38 38
39static void nvidia_bugs(void) 39static void __init nvidia_bugs(void)
40{ 40{
41#ifdef CONFIG_ACPI 41#ifdef CONFIG_ACPI
42 /* 42 /*
@@ -62,7 +62,7 @@ static void nvidia_bugs(void)
62 62
63} 63}
64 64
65static void ati_bugs(void) 65static void __init ati_bugs(void)
66{ 66{
67 if (timer_over_8254 == 1) { 67 if (timer_over_8254 == 1) {
68 timer_over_8254 = 0; 68 timer_over_8254 = 0;
@@ -88,7 +88,7 @@ struct chipset {
88 void (*f)(void); 88 void (*f)(void);
89}; 89};
90 90
91static struct chipset early_qrk[] = { 91static struct __initdata chipset early_qrk[] = {
92 { PCI_VENDOR_ID_NVIDIA, nvidia_bugs }, 92 { PCI_VENDOR_ID_NVIDIA, nvidia_bugs },
93 { PCI_VENDOR_ID_VIA, via_bugs }, 93 { PCI_VENDOR_ID_VIA, via_bugs },
94 { PCI_VENDOR_ID_ATI, ati_bugs }, 94 { PCI_VENDOR_ID_ATI, ati_bugs },
diff --git a/arch/x86_64/kernel/mpparse.c b/arch/x86_64/kernel/mpparse.c
index 50dd8bef850e..455aa0b932f0 100644
--- a/arch/x86_64/kernel/mpparse.c
+++ b/arch/x86_64/kernel/mpparse.c
@@ -60,9 +60,9 @@ unsigned long mp_lapic_addr = 0;
60/* Processor that is doing the boot up */ 60/* Processor that is doing the boot up */
61unsigned int boot_cpu_id = -1U; 61unsigned int boot_cpu_id = -1U;
62/* Internal processor count */ 62/* Internal processor count */
63unsigned int num_processors __initdata = 0; 63unsigned int num_processors __cpuinitdata = 0;
64 64
65unsigned disabled_cpus __initdata; 65unsigned disabled_cpus __cpuinitdata;
66 66
67/* Bitmask of physically existing CPUs */ 67/* Bitmask of physically existing CPUs */
68physid_mask_t phys_cpu_present_map = PHYSID_MASK_NONE; 68physid_mask_t phys_cpu_present_map = PHYSID_MASK_NONE;
diff --git a/arch/x86_64/kernel/nmi.c b/arch/x86_64/kernel/nmi.c
index 486f4c61a948..82d9d85d5270 100644
--- a/arch/x86_64/kernel/nmi.c
+++ b/arch/x86_64/kernel/nmi.c
@@ -187,10 +187,7 @@ void nmi_watchdog_default(void)
187{ 187{
188 if (nmi_watchdog != NMI_DEFAULT) 188 if (nmi_watchdog != NMI_DEFAULT)
189 return; 189 return;
190 if (nmi_known_cpu()) 190 nmi_watchdog = NMI_NONE;
191 nmi_watchdog = NMI_LOCAL_APIC;
192 else
193 nmi_watchdog = NMI_IO_APIC;
194} 191}
195 192
196static int endflag __initdata = 0; 193static int endflag __initdata = 0;
diff --git a/arch/x86_64/kernel/pci-gart.c b/arch/x86_64/kernel/pci-gart.c
index 030eb3753358..2bac8c60ad61 100644
--- a/arch/x86_64/kernel/pci-gart.c
+++ b/arch/x86_64/kernel/pci-gart.c
@@ -675,7 +675,7 @@ void __init gart_iommu_init(void)
675 dma_ops = &gart_dma_ops; 675 dma_ops = &gart_dma_ops;
676} 676}
677 677
678void gart_parse_options(char *p) 678void __init gart_parse_options(char *p)
679{ 679{
680 int arg; 680 int arg;
681 681
diff --git a/arch/x86_64/kernel/process.c b/arch/x86_64/kernel/process.c
index cbbc6adc1a92..d8d5ccc245c8 100644
--- a/arch/x86_64/kernel/process.c
+++ b/arch/x86_64/kernel/process.c
@@ -382,14 +382,17 @@ void exit_thread(void)
382void flush_thread(void) 382void flush_thread(void)
383{ 383{
384 struct task_struct *tsk = current; 384 struct task_struct *tsk = current;
385 struct thread_info *t = current_thread_info();
386 385
387 if (t->flags & _TIF_ABI_PENDING) { 386 if (test_tsk_thread_flag(tsk, TIF_ABI_PENDING)) {
388 t->flags ^= (_TIF_ABI_PENDING | _TIF_IA32); 387 clear_tsk_thread_flag(tsk, TIF_ABI_PENDING);
389 if (t->flags & _TIF_IA32) 388 if (test_tsk_thread_flag(tsk, TIF_IA32)) {
389 clear_tsk_thread_flag(tsk, TIF_IA32);
390 } else {
391 set_tsk_thread_flag(tsk, TIF_IA32);
390 current_thread_info()->status |= TS_COMPAT; 392 current_thread_info()->status |= TS_COMPAT;
393 }
391 } 394 }
392 t->flags &= ~_TIF_DEBUG; 395 clear_tsk_thread_flag(tsk, TIF_DEBUG);
393 396
394 tsk->thread.debugreg0 = 0; 397 tsk->thread.debugreg0 = 0;
395 tsk->thread.debugreg1 = 0; 398 tsk->thread.debugreg1 = 0;
diff --git a/arch/x86_64/kernel/vsyscall.c b/arch/x86_64/kernel/vsyscall.c
index 180ff919eaf9..b43c698cf7d3 100644
--- a/arch/x86_64/kernel/vsyscall.c
+++ b/arch/x86_64/kernel/vsyscall.c
@@ -112,7 +112,7 @@ static __always_inline void do_vgettimeofday(struct timeval * tv)
112 112
113 vread = __vsyscall_gtod_data.clock.vread; 113 vread = __vsyscall_gtod_data.clock.vread;
114 if (unlikely(!__vsyscall_gtod_data.sysctl_enabled || !vread)) { 114 if (unlikely(!__vsyscall_gtod_data.sysctl_enabled || !vread)) {
115 gettimeofday(tv,0); 115 gettimeofday(tv,NULL);
116 return; 116 return;
117 } 117 }
118 now = vread(); 118 now = vread();
diff --git a/arch/x86_64/kernel/x8664_ksyms.c b/arch/x86_64/kernel/x8664_ksyms.c
index 0dffae69f4ad..77c25b307635 100644
--- a/arch/x86_64/kernel/x8664_ksyms.c
+++ b/arch/x86_64/kernel/x8664_ksyms.c
@@ -59,3 +59,4 @@ EXPORT_SYMBOL(empty_zero_page);
59EXPORT_SYMBOL(init_level4_pgt); 59EXPORT_SYMBOL(init_level4_pgt);
60EXPORT_SYMBOL(load_gs_index); 60EXPORT_SYMBOL(load_gs_index);
61 61
62EXPORT_SYMBOL(_proxy_pda);