diff options
Diffstat (limited to 'arch')
53 files changed, 543 insertions, 244 deletions
diff --git a/arch/arm/mach-integrator/impd1.c b/arch/arm/mach-integrator/impd1.c index 0a7b3267c8d8..3c8383dbe9e6 100644 --- a/arch/arm/mach-integrator/impd1.c +++ b/arch/arm/mach-integrator/impd1.c | |||
@@ -405,7 +405,7 @@ static int impd1_probe(struct lm_device *dev) | |||
405 | 405 | ||
406 | ret = amba_device_register(d, &dev->resource); | 406 | ret = amba_device_register(d, &dev->resource); |
407 | if (ret) { | 407 | if (ret) { |
408 | dev_err(&d->dev, "unable to register device: %d\n"); | 408 | dev_err(&d->dev, "unable to register device: %d\n", ret); |
409 | kfree(d); | 409 | kfree(d); |
410 | } | 410 | } |
411 | } | 411 | } |
diff --git a/arch/arm/mach-ixp4xx/fsg-setup.c b/arch/arm/mach-ixp4xx/fsg-setup.c index 0db3a909ae61..501dfdcc39fe 100644 --- a/arch/arm/mach-ixp4xx/fsg-setup.c +++ b/arch/arm/mach-ixp4xx/fsg-setup.c | |||
@@ -64,7 +64,7 @@ static struct platform_device fsg_i2c_gpio = { | |||
64 | 64 | ||
65 | static struct i2c_board_info __initdata fsg_i2c_board_info [] = { | 65 | static struct i2c_board_info __initdata fsg_i2c_board_info [] = { |
66 | { | 66 | { |
67 | I2C_BOARD_INFO("rtc-isl1208", 0x6f), | 67 | I2C_BOARD_INFO("isl1208", 0x6f), |
68 | }, | 68 | }, |
69 | }; | 69 | }; |
70 | 70 | ||
@@ -179,7 +179,6 @@ static void __init fsg_init(void) | |||
179 | { | 179 | { |
180 | DECLARE_MAC_BUF(mac_buf); | 180 | DECLARE_MAC_BUF(mac_buf); |
181 | uint8_t __iomem *f; | 181 | uint8_t __iomem *f; |
182 | int i; | ||
183 | 182 | ||
184 | ixp4xx_sys_init(); | 183 | ixp4xx_sys_init(); |
185 | 184 | ||
@@ -228,6 +227,7 @@ static void __init fsg_init(void) | |||
228 | f = ioremap(IXP4XX_EXP_BUS_BASE(0), 0x400000); | 227 | f = ioremap(IXP4XX_EXP_BUS_BASE(0), 0x400000); |
229 | if (f) { | 228 | if (f) { |
230 | #ifdef __ARMEB__ | 229 | #ifdef __ARMEB__ |
230 | int i; | ||
231 | for (i = 0; i < 6; i++) { | 231 | for (i = 0; i < 6; i++) { |
232 | fsg_plat_eth[0].hwaddr[i] = readb(f + 0x3C0422 + i); | 232 | fsg_plat_eth[0].hwaddr[i] = readb(f + 0x3C0422 + i); |
233 | fsg_plat_eth[1].hwaddr[i] = readb(f + 0x3C043B + i); | 233 | fsg_plat_eth[1].hwaddr[i] = readb(f + 0x3C043B + i); |
diff --git a/arch/arm/mach-pxa/clock.c b/arch/arm/mach-pxa/clock.c index c01eea88f787..ca8e20538157 100644 --- a/arch/arm/mach-pxa/clock.c +++ b/arch/arm/mach-pxa/clock.c | |||
@@ -125,3 +125,28 @@ void clks_register(struct clk *clks, size_t num) | |||
125 | list_add(&clks[i].node, &clocks); | 125 | list_add(&clks[i].node, &clocks); |
126 | mutex_unlock(&clocks_mutex); | 126 | mutex_unlock(&clocks_mutex); |
127 | } | 127 | } |
128 | |||
129 | int clk_add_alias(char *alias, struct device *alias_dev, char *id, | ||
130 | struct device *dev) | ||
131 | { | ||
132 | struct clk *r = clk_lookup(dev, id); | ||
133 | struct clk *new; | ||
134 | |||
135 | if (!r) | ||
136 | return -ENODEV; | ||
137 | |||
138 | new = kzalloc(sizeof(struct clk), GFP_KERNEL); | ||
139 | |||
140 | if (!new) | ||
141 | return -ENOMEM; | ||
142 | |||
143 | new->name = alias; | ||
144 | new->dev = alias_dev; | ||
145 | new->other = r; | ||
146 | |||
147 | mutex_lock(&clocks_mutex); | ||
148 | list_add(&new->node, &clocks); | ||
149 | mutex_unlock(&clocks_mutex); | ||
150 | |||
151 | return 0; | ||
152 | } | ||
diff --git a/arch/arm/mach-pxa/clock.h b/arch/arm/mach-pxa/clock.h index 1ec8f9178aaf..73be795fe3bf 100644 --- a/arch/arm/mach-pxa/clock.h +++ b/arch/arm/mach-pxa/clock.h | |||
@@ -1,3 +1,5 @@ | |||
1 | #include <linux/list.h> | ||
2 | |||
1 | struct clk; | 3 | struct clk; |
2 | 4 | ||
3 | struct clkops { | 5 | struct clkops { |
@@ -86,3 +88,6 @@ extern void clk_pxa3xx_cken_disable(struct clk *); | |||
86 | #endif | 88 | #endif |
87 | 89 | ||
88 | void clks_register(struct clk *clks, size_t num); | 90 | void clks_register(struct clk *clks, size_t num); |
91 | int clk_add_alias(char *alias, struct device *alias_dev, char *id, | ||
92 | struct device *dev); | ||
93 | |||
diff --git a/arch/arm/mach-pxa/corgi.c b/arch/arm/mach-pxa/corgi.c index 123a950db466..e703a8d209e2 100644 --- a/arch/arm/mach-pxa/corgi.c +++ b/arch/arm/mach-pxa/corgi.c | |||
@@ -38,6 +38,7 @@ | |||
38 | #include <mach/pxa-regs.h> | 38 | #include <mach/pxa-regs.h> |
39 | #include <mach/pxa2xx-regs.h> | 39 | #include <mach/pxa2xx-regs.h> |
40 | #include <mach/pxa2xx-gpio.h> | 40 | #include <mach/pxa2xx-gpio.h> |
41 | #include <mach/i2c.h> | ||
41 | #include <mach/irda.h> | 42 | #include <mach/irda.h> |
42 | #include <mach/mmc.h> | 43 | #include <mach/mmc.h> |
43 | #include <mach/udc.h> | 44 | #include <mach/udc.h> |
@@ -532,6 +533,7 @@ static void __init corgi_init(void) | |||
532 | pxa_set_udc_info(&udc_info); | 533 | pxa_set_udc_info(&udc_info); |
533 | pxa_set_mci_info(&corgi_mci_platform_data); | 534 | pxa_set_mci_info(&corgi_mci_platform_data); |
534 | pxa_set_ficp_info(&corgi_ficp_platform_data); | 535 | pxa_set_ficp_info(&corgi_ficp_platform_data); |
536 | pxa_set_i2c_info(NULL); | ||
535 | 537 | ||
536 | platform_scoop_config = &corgi_pcmcia_config; | 538 | platform_scoop_config = &corgi_pcmcia_config; |
537 | 539 | ||
diff --git a/arch/arm/mach-pxa/eseries.c b/arch/arm/mach-pxa/eseries.c index 03942450885b..001a252bd514 100644 --- a/arch/arm/mach-pxa/eseries.c +++ b/arch/arm/mach-pxa/eseries.c | |||
@@ -10,18 +10,78 @@ | |||
10 | * | 10 | * |
11 | */ | 11 | */ |
12 | 12 | ||
13 | #include <linux/kernel.h> | ||
13 | #include <linux/init.h> | 14 | #include <linux/init.h> |
14 | 15 | ||
15 | #include <asm/setup.h> | 16 | #include <asm/setup.h> |
16 | #include <asm/mach/arch.h> | 17 | #include <asm/mach/arch.h> |
17 | #include <mach/hardware.h> | ||
18 | #include <asm/mach-types.h> | 18 | #include <asm/mach-types.h> |
19 | 19 | ||
20 | #include <mach/mfp-pxa25x.h> | ||
21 | #include <mach/hardware.h> | ||
22 | |||
20 | #include "generic.h" | 23 | #include "generic.h" |
21 | 24 | ||
25 | static unsigned long e740_pin_config[] __initdata = { | ||
26 | /* Chip selects */ | ||
27 | GPIO15_nCS_1, /* CS1 - Flash */ | ||
28 | GPIO79_nCS_3, /* CS3 - IMAGEON */ | ||
29 | GPIO80_nCS_4, /* CS4 - TMIO */ | ||
30 | |||
31 | /* Clocks */ | ||
32 | GPIO12_32KHz, | ||
33 | |||
34 | /* BTUART */ | ||
35 | GPIO42_BTUART_RXD, | ||
36 | GPIO43_BTUART_TXD, | ||
37 | GPIO44_BTUART_CTS, | ||
38 | GPIO45_GPIO, /* Used by TMIO for #SUSPEND */ | ||
39 | |||
40 | /* PC Card */ | ||
41 | GPIO8_GPIO, /* CD0 */ | ||
42 | GPIO44_GPIO, /* CD1 */ | ||
43 | GPIO11_GPIO, /* IRQ0 */ | ||
44 | GPIO6_GPIO, /* IRQ1 */ | ||
45 | GPIO27_GPIO, /* RST0 */ | ||
46 | GPIO24_GPIO, /* RST1 */ | ||
47 | GPIO20_GPIO, /* PWR0 */ | ||
48 | GPIO23_GPIO, /* PWR1 */ | ||
49 | GPIO48_nPOE, | ||
50 | GPIO49_nPWE, | ||
51 | GPIO50_nPIOR, | ||
52 | GPIO51_nPIOW, | ||
53 | GPIO52_nPCE_1, | ||
54 | GPIO53_nPCE_2, | ||
55 | GPIO54_nPSKTSEL, | ||
56 | GPIO55_nPREG, | ||
57 | GPIO56_nPWAIT, | ||
58 | GPIO57_nIOIS16, | ||
59 | |||
60 | /* wakeup */ | ||
61 | GPIO0_GPIO | WAKEUP_ON_EDGE_RISE, | ||
62 | }; | ||
63 | |||
64 | static unsigned long e400_pin_config[] __initdata = { | ||
65 | /* Chip selects */ | ||
66 | GPIO15_nCS_1, /* CS1 - Flash */ | ||
67 | GPIO80_nCS_4, /* CS4 - TMIO */ | ||
68 | |||
69 | /* Clocks */ | ||
70 | GPIO12_32KHz, | ||
71 | |||
72 | /* BTUART */ | ||
73 | GPIO42_BTUART_RXD, | ||
74 | GPIO43_BTUART_TXD, | ||
75 | GPIO44_BTUART_CTS, | ||
76 | GPIO45_GPIO, /* Used by TMIO for #SUSPEND */ | ||
77 | |||
78 | /* wakeup */ | ||
79 | GPIO0_GPIO | WAKEUP_ON_EDGE_RISE, | ||
80 | }; | ||
81 | |||
22 | /* Only e800 has 128MB RAM */ | 82 | /* Only e800 has 128MB RAM */ |
23 | static void __init eseries_fixup(struct machine_desc *desc, | 83 | static void __init eseries_fixup(struct machine_desc *desc, |
24 | struct tag *tags, char **cmdline, struct meminfo *mi) | 84 | struct tag *tags, char **cmdline, struct meminfo *mi) |
25 | { | 85 | { |
26 | mi->nr_banks=1; | 86 | mi->nr_banks=1; |
27 | mi->bank[0].start = 0xa0000000; | 87 | mi->bank[0].start = 0xa0000000; |
@@ -32,83 +92,95 @@ static void __init eseries_fixup(struct machine_desc *desc, | |||
32 | mi->bank[0].size = (64*1024*1024); | 92 | mi->bank[0].size = (64*1024*1024); |
33 | } | 93 | } |
34 | 94 | ||
95 | static void __init e740_init(void) | ||
96 | { | ||
97 | pxa2xx_mfp_config(ARRAY_AND_SIZE(e740_pin_config)); | ||
98 | } | ||
99 | |||
100 | static void __init e400_init(void) | ||
101 | { | ||
102 | pxa2xx_mfp_config(ARRAY_AND_SIZE(e400_pin_config)); | ||
103 | } | ||
104 | |||
35 | /* e-series machine definitions */ | 105 | /* e-series machine definitions */ |
36 | 106 | ||
37 | #ifdef CONFIG_MACH_E330 | 107 | #ifdef CONFIG_MACH_E330 |
38 | MACHINE_START(E330, "Toshiba e330") | 108 | MACHINE_START(E330, "Toshiba e330") |
39 | /* Maintainer: Ian Molton (spyro@f2s.com) */ | 109 | /* Maintainer: Ian Molton (spyro@f2s.com) */ |
40 | .phys_io = 0x40000000, | 110 | .phys_io = 0x40000000, |
41 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, | 111 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, |
42 | .boot_params = 0xa0000100, | 112 | .boot_params = 0xa0000100, |
43 | .map_io = pxa_map_io, | 113 | .map_io = pxa_map_io, |
44 | .init_irq = pxa25x_init_irq, | 114 | .init_irq = pxa25x_init_irq, |
45 | .fixup = eseries_fixup, | 115 | .fixup = eseries_fixup, |
46 | .timer = &pxa_timer, | 116 | .timer = &pxa_timer, |
47 | MACHINE_END | 117 | MACHINE_END |
48 | #endif | 118 | #endif |
49 | 119 | ||
50 | #ifdef CONFIG_MACH_E350 | 120 | #ifdef CONFIG_MACH_E350 |
51 | MACHINE_START(E350, "Toshiba e350") | 121 | MACHINE_START(E350, "Toshiba e350") |
52 | /* Maintainer: Ian Molton (spyro@f2s.com) */ | 122 | /* Maintainer: Ian Molton (spyro@f2s.com) */ |
53 | .phys_io = 0x40000000, | 123 | .phys_io = 0x40000000, |
54 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, | 124 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, |
55 | .boot_params = 0xa0000100, | 125 | .boot_params = 0xa0000100, |
56 | .map_io = pxa_map_io, | 126 | .map_io = pxa_map_io, |
57 | .init_irq = pxa25x_init_irq, | 127 | .init_irq = pxa25x_init_irq, |
58 | .fixup = eseries_fixup, | 128 | .fixup = eseries_fixup, |
59 | .timer = &pxa_timer, | 129 | .timer = &pxa_timer, |
60 | MACHINE_END | 130 | MACHINE_END |
61 | #endif | 131 | #endif |
62 | 132 | ||
63 | #ifdef CONFIG_MACH_E740 | 133 | #ifdef CONFIG_MACH_E740 |
64 | MACHINE_START(E740, "Toshiba e740") | 134 | MACHINE_START(E740, "Toshiba e740") |
65 | /* Maintainer: Ian Molton (spyro@f2s.com) */ | 135 | /* Maintainer: Ian Molton (spyro@f2s.com) */ |
66 | .phys_io = 0x40000000, | 136 | .phys_io = 0x40000000, |
67 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, | 137 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, |
68 | .boot_params = 0xa0000100, | 138 | .boot_params = 0xa0000100, |
69 | .map_io = pxa_map_io, | 139 | .map_io = pxa_map_io, |
70 | .init_irq = pxa25x_init_irq, | 140 | .init_irq = pxa25x_init_irq, |
71 | .fixup = eseries_fixup, | 141 | .fixup = eseries_fixup, |
72 | .timer = &pxa_timer, | 142 | .init_machine = e740_init, |
143 | .timer = &pxa_timer, | ||
73 | MACHINE_END | 144 | MACHINE_END |
74 | #endif | 145 | #endif |
75 | 146 | ||
76 | #ifdef CONFIG_MACH_E750 | 147 | #ifdef CONFIG_MACH_E750 |
77 | MACHINE_START(E750, "Toshiba e750") | 148 | MACHINE_START(E750, "Toshiba e750") |
78 | /* Maintainer: Ian Molton (spyro@f2s.com) */ | 149 | /* Maintainer: Ian Molton (spyro@f2s.com) */ |
79 | .phys_io = 0x40000000, | 150 | .phys_io = 0x40000000, |
80 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, | 151 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, |
81 | .boot_params = 0xa0000100, | 152 | .boot_params = 0xa0000100, |
82 | .map_io = pxa_map_io, | 153 | .map_io = pxa_map_io, |
83 | .init_irq = pxa25x_init_irq, | 154 | .init_irq = pxa25x_init_irq, |
84 | .fixup = eseries_fixup, | 155 | .fixup = eseries_fixup, |
85 | .timer = &pxa_timer, | 156 | .timer = &pxa_timer, |
86 | MACHINE_END | 157 | MACHINE_END |
87 | #endif | 158 | #endif |
88 | 159 | ||
89 | #ifdef CONFIG_MACH_E400 | 160 | #ifdef CONFIG_MACH_E400 |
90 | MACHINE_START(E400, "Toshiba e400") | 161 | MACHINE_START(E400, "Toshiba e400") |
91 | /* Maintainer: Ian Molton (spyro@f2s.com) */ | 162 | /* Maintainer: Ian Molton (spyro@f2s.com) */ |
92 | .phys_io = 0x40000000, | 163 | .phys_io = 0x40000000, |
93 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, | 164 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, |
94 | .boot_params = 0xa0000100, | 165 | .boot_params = 0xa0000100, |
95 | .map_io = pxa_map_io, | 166 | .map_io = pxa_map_io, |
96 | .init_irq = pxa25x_init_irq, | 167 | .init_irq = pxa25x_init_irq, |
97 | .fixup = eseries_fixup, | 168 | .fixup = eseries_fixup, |
98 | .timer = &pxa_timer, | 169 | .init_machine = e400_init, |
170 | .timer = &pxa_timer, | ||
99 | MACHINE_END | 171 | MACHINE_END |
100 | #endif | 172 | #endif |
101 | 173 | ||
102 | #ifdef CONFIG_MACH_E800 | 174 | #ifdef CONFIG_MACH_E800 |
103 | MACHINE_START(E800, "Toshiba e800") | 175 | MACHINE_START(E800, "Toshiba e800") |
104 | /* Maintainer: Ian Molton (spyro@f2s.com) */ | 176 | /* Maintainer: Ian Molton (spyro@f2s.com) */ |
105 | .phys_io = 0x40000000, | 177 | .phys_io = 0x40000000, |
106 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, | 178 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, |
107 | .boot_params = 0xa0000100, | 179 | .boot_params = 0xa0000100, |
108 | .map_io = pxa_map_io, | 180 | .map_io = pxa_map_io, |
109 | .init_irq = pxa25x_init_irq, | 181 | .init_irq = pxa25x_init_irq, |
110 | .fixup = eseries_fixup, | 182 | .fixup = eseries_fixup, |
111 | .timer = &pxa_timer, | 183 | .timer = &pxa_timer, |
112 | MACHINE_END | 184 | MACHINE_END |
113 | #endif | 185 | #endif |
114 | 186 | ||
diff --git a/arch/arm/mach-pxa/include/mach/irqs.h b/arch/arm/mach-pxa/include/mach/irqs.h index 32772bc6925c..108b5db9b2af 100644 --- a/arch/arm/mach-pxa/include/mach/irqs.h +++ b/arch/arm/mach-pxa/include/mach/irqs.h | |||
@@ -183,6 +183,7 @@ | |||
183 | defined(CONFIG_MACH_TOSA) || \ | 183 | defined(CONFIG_MACH_TOSA) || \ |
184 | defined(CONFIG_MACH_MAINSTONE) || \ | 184 | defined(CONFIG_MACH_MAINSTONE) || \ |
185 | defined(CONFIG_MACH_PCM027) || \ | 185 | defined(CONFIG_MACH_PCM027) || \ |
186 | defined(CONFIG_ARCH_PXA_ESERIES) || \ | ||
186 | defined(CONFIG_MACH_MAGICIAN) | 187 | defined(CONFIG_MACH_MAGICIAN) |
187 | #define NR_IRQS (IRQ_BOARD_END) | 188 | #define NR_IRQS (IRQ_BOARD_END) |
188 | #elif defined(CONFIG_MACH_ZYLONITE) | 189 | #elif defined(CONFIG_MACH_ZYLONITE) |
diff --git a/arch/arm/mach-pxa/lubbock.c b/arch/arm/mach-pxa/lubbock.c index bb9e09208b9f..4ffdff2d9ff1 100644 --- a/arch/arm/mach-pxa/lubbock.c +++ b/arch/arm/mach-pxa/lubbock.c | |||
@@ -52,6 +52,7 @@ | |||
52 | #include <mach/mmc.h> | 52 | #include <mach/mmc.h> |
53 | 53 | ||
54 | #include "generic.h" | 54 | #include "generic.h" |
55 | #include "clock.h" | ||
55 | #include "devices.h" | 56 | #include "devices.h" |
56 | 57 | ||
57 | static unsigned long lubbock_pin_config[] __initdata = { | 58 | static unsigned long lubbock_pin_config[] __initdata = { |
@@ -485,6 +486,7 @@ static void __init lubbock_init(void) | |||
485 | 486 | ||
486 | pxa2xx_mfp_config(ARRAY_AND_SIZE(lubbock_pin_config)); | 487 | pxa2xx_mfp_config(ARRAY_AND_SIZE(lubbock_pin_config)); |
487 | 488 | ||
489 | clk_add_alias("SA1111_CLK", NULL, "GPIO11_CLK", NULL); | ||
488 | pxa_set_udc_info(&udc_info); | 490 | pxa_set_udc_info(&udc_info); |
489 | set_pxa_fb_info(&sharp_lm8v31); | 491 | set_pxa_fb_info(&sharp_lm8v31); |
490 | pxa_set_mci_info(&lubbock_mci_platform_data); | 492 | pxa_set_mci_info(&lubbock_mci_platform_data); |
diff --git a/arch/arm/mach-pxa/poodle.c b/arch/arm/mach-pxa/poodle.c index 055ec63d768c..3f5f484549b3 100644 --- a/arch/arm/mach-pxa/poodle.c +++ b/arch/arm/mach-pxa/poodle.c | |||
@@ -36,6 +36,7 @@ | |||
36 | #include <mach/pxa2xx-gpio.h> | 36 | #include <mach/pxa2xx-gpio.h> |
37 | #include <mach/mmc.h> | 37 | #include <mach/mmc.h> |
38 | #include <mach/udc.h> | 38 | #include <mach/udc.h> |
39 | #include <mach/i2c.h> | ||
39 | #include <mach/irda.h> | 40 | #include <mach/irda.h> |
40 | #include <mach/poodle.h> | 41 | #include <mach/poodle.h> |
41 | #include <mach/pxafb.h> | 42 | #include <mach/pxafb.h> |
@@ -387,6 +388,7 @@ static void __init poodle_init(void) | |||
387 | pxa_set_udc_info(&udc_info); | 388 | pxa_set_udc_info(&udc_info); |
388 | pxa_set_mci_info(&poodle_mci_platform_data); | 389 | pxa_set_mci_info(&poodle_mci_platform_data); |
389 | pxa_set_ficp_info(&poodle_ficp_platform_data); | 390 | pxa_set_ficp_info(&poodle_ficp_platform_data); |
391 | pxa_set_i2c_info(NULL); | ||
390 | 392 | ||
391 | platform_scoop_config = &poodle_pcmcia_config; | 393 | platform_scoop_config = &poodle_pcmcia_config; |
392 | 394 | ||
diff --git a/arch/arm/mach-pxa/pxa25x.c b/arch/arm/mach-pxa/pxa25x.c index 9e5d8a8c6424..305452b56e91 100644 --- a/arch/arm/mach-pxa/pxa25x.c +++ b/arch/arm/mach-pxa/pxa25x.c | |||
@@ -166,8 +166,7 @@ static struct clk pxa25x_hwuart_clk = | |||
166 | ; | 166 | ; |
167 | 167 | ||
168 | /* | 168 | /* |
169 | * PXA 2xx clock declarations. Order is important (see aliases below) | 169 | * PXA 2xx clock declarations. |
170 | * Please be careful not to disrupt the ordering. | ||
171 | */ | 170 | */ |
172 | static struct clk pxa25x_clks[] = { | 171 | static struct clk pxa25x_clks[] = { |
173 | INIT_CK("LCDCLK", LCD, &clk_pxa25x_lcd_ops, &pxa_device_fb.dev), | 172 | INIT_CK("LCDCLK", LCD, &clk_pxa25x_lcd_ops, &pxa_device_fb.dev), |
@@ -194,11 +193,6 @@ static struct clk pxa25x_clks[] = { | |||
194 | INIT_CKEN("FICPCLK", FICP, 47923000, 0, NULL), | 193 | INIT_CKEN("FICPCLK", FICP, 47923000, 0, NULL), |
195 | }; | 194 | }; |
196 | 195 | ||
197 | static struct clk pxa2xx_clk_aliases[] = { | ||
198 | INIT_CKOTHER("GPIO7_CLK", &pxa25x_clks[4], NULL), | ||
199 | INIT_CKOTHER("SA1111_CLK", &pxa25x_clks[5], NULL), | ||
200 | }; | ||
201 | |||
202 | #ifdef CONFIG_PM | 196 | #ifdef CONFIG_PM |
203 | 197 | ||
204 | #define SAVE(x) sleep_save[SLEEP_SAVE_##x] = x | 198 | #define SAVE(x) sleep_save[SLEEP_SAVE_##x] = x |
@@ -375,8 +369,6 @@ static int __init pxa25x_init(void) | |||
375 | if (cpu_is_pxa255()) | 369 | if (cpu_is_pxa255()) |
376 | ret = platform_device_register(&pxa_device_hwuart); | 370 | ret = platform_device_register(&pxa_device_hwuart); |
377 | 371 | ||
378 | clks_register(pxa2xx_clk_aliases, ARRAY_SIZE(pxa2xx_clk_aliases)); | ||
379 | |||
380 | return ret; | 372 | return ret; |
381 | } | 373 | } |
382 | 374 | ||
diff --git a/arch/arm/mach-pxa/pxa300.c b/arch/arm/mach-pxa/pxa300.c index 494fc1f032db..9adc7fc4618a 100644 --- a/arch/arm/mach-pxa/pxa300.c +++ b/arch/arm/mach-pxa/pxa300.c | |||
@@ -90,7 +90,9 @@ static struct clk common_clks[] = { | |||
90 | }; | 90 | }; |
91 | 91 | ||
92 | static struct clk pxa310_clks[] = { | 92 | static struct clk pxa310_clks[] = { |
93 | #ifdef CONFIG_CPU_PXA310 | ||
93 | PXA3xx_CKEN("MMCCLK", MMC3, 19500000, 0, &pxa3xx_device_mci3.dev), | 94 | PXA3xx_CKEN("MMCCLK", MMC3, 19500000, 0, &pxa3xx_device_mci3.dev), |
95 | #endif | ||
94 | }; | 96 | }; |
95 | 97 | ||
96 | static int __init pxa300_init(void) | 98 | static int __init pxa300_init(void) |
diff --git a/arch/arm/mach-pxa/spitz.c b/arch/arm/mach-pxa/spitz.c index cd39005c98ff..b569f3b4cf3a 100644 --- a/arch/arm/mach-pxa/spitz.c +++ b/arch/arm/mach-pxa/spitz.c | |||
@@ -40,6 +40,7 @@ | |||
40 | #include <mach/pxa2xx-gpio.h> | 40 | #include <mach/pxa2xx-gpio.h> |
41 | #include <mach/pxa27x-udc.h> | 41 | #include <mach/pxa27x-udc.h> |
42 | #include <mach/reset.h> | 42 | #include <mach/reset.h> |
43 | #include <mach/i2c.h> | ||
43 | #include <mach/irda.h> | 44 | #include <mach/irda.h> |
44 | #include <mach/mmc.h> | 45 | #include <mach/mmc.h> |
45 | #include <mach/ohci.h> | 46 | #include <mach/ohci.h> |
@@ -574,6 +575,7 @@ static void __init common_init(void) | |||
574 | pxa_set_ficp_info(&spitz_ficp_platform_data); | 575 | pxa_set_ficp_info(&spitz_ficp_platform_data); |
575 | set_pxa_fb_parent(&spitzssp_device.dev); | 576 | set_pxa_fb_parent(&spitzssp_device.dev); |
576 | set_pxa_fb_info(&spitz_pxafb_info); | 577 | set_pxa_fb_info(&spitz_pxafb_info); |
578 | pxa_set_i2c_info(NULL); | ||
577 | } | 579 | } |
578 | 580 | ||
579 | #if defined(CONFIG_MACH_SPITZ) || defined(CONFIG_MACH_BORZOI) | 581 | #if defined(CONFIG_MACH_SPITZ) || defined(CONFIG_MACH_BORZOI) |
diff --git a/arch/arm/mach-s3c2410/include/mach/regs-s3c2443-clock.h b/arch/arm/mach-s3c2410/include/mach/regs-s3c2443-clock.h index 7dd458363a51..6026d091a2fe 100644 --- a/arch/arm/mach-s3c2410/include/mach/regs-s3c2443-clock.h +++ b/arch/arm/mach-s3c2410/include/mach/regs-s3c2443-clock.h | |||
@@ -48,11 +48,11 @@ | |||
48 | #define S3C2443_CLKSRC_I2S_EPLLREF3 (3<<14) | 48 | #define S3C2443_CLKSRC_I2S_EPLLREF3 (3<<14) |
49 | #define S3C2443_CLKSRC_I2S_MASK (3<<14) | 49 | #define S3C2443_CLKSRC_I2S_MASK (3<<14) |
50 | 50 | ||
51 | #define S3C2443_CLKSRC_EPLLREF_XTAL (2<<8) | 51 | #define S3C2443_CLKSRC_EPLLREF_XTAL (2<<7) |
52 | #define S3C2443_CLKSRC_EPLLREF_EXTCLK (3<<8) | 52 | #define S3C2443_CLKSRC_EPLLREF_EXTCLK (3<<7) |
53 | #define S3C2443_CLKSRC_EPLLREF_MPLLREF (0<<8) | 53 | #define S3C2443_CLKSRC_EPLLREF_MPLLREF (0<<7) |
54 | #define S3C2443_CLKSRC_EPLLREF_MPLLREF2 (1<<8) | 54 | #define S3C2443_CLKSRC_EPLLREF_MPLLREF2 (1<<7) |
55 | #define S3C2443_CLKSRC_EPLLREF_MASK (3<<8) | 55 | #define S3C2443_CLKSRC_EPLLREF_MASK (3<<7) |
56 | 56 | ||
57 | #define S3C2443_CLKSRC_ESYSCLK_EPLL (1<<6) | 57 | #define S3C2443_CLKSRC_ESYSCLK_EPLL (1<<6) |
58 | #define S3C2443_CLKSRC_MSYSCLK_MPLL (1<<4) | 58 | #define S3C2443_CLKSRC_MSYSCLK_MPLL (1<<4) |
diff --git a/arch/arm/mach-s3c2410/nor-simtec.c b/arch/arm/mach-s3c2410/nor-simtec.c index b2ae237042a5..598d130633dc 100644 --- a/arch/arm/mach-s3c2410/nor-simtec.c +++ b/arch/arm/mach-s3c2410/nor-simtec.c | |||
@@ -30,6 +30,7 @@ | |||
30 | #include <mach/bast-map.h> | 30 | #include <mach/bast-map.h> |
31 | #include <mach/bast-cpld.h> | 31 | #include <mach/bast-cpld.h> |
32 | 32 | ||
33 | #include "nor-simtec.h" | ||
33 | 34 | ||
34 | static void simtec_nor_vpp(struct map_info *map, int vpp) | 35 | static void simtec_nor_vpp(struct map_info *map, int vpp) |
35 | { | 36 | { |
@@ -50,7 +51,7 @@ static void simtec_nor_vpp(struct map_info *map, int vpp) | |||
50 | local_irq_restore(flags); | 51 | local_irq_restore(flags); |
51 | } | 52 | } |
52 | 53 | ||
53 | struct physmap_flash_data simtec_nor_pdata = { | 54 | static struct physmap_flash_data simtec_nor_pdata = { |
54 | .width = 2, | 55 | .width = 2, |
55 | .set_vpp = simtec_nor_vpp, | 56 | .set_vpp = simtec_nor_vpp, |
56 | .nr_parts = 0, | 57 | .nr_parts = 0, |
diff --git a/arch/arm/mach-s3c2412/mach-jive.c b/arch/arm/mach-s3c2412/mach-jive.c index 4c061d29463c..ad980a1690c2 100644 --- a/arch/arm/mach-s3c2412/mach-jive.c +++ b/arch/arm/mach-s3c2412/mach-jive.c | |||
@@ -395,7 +395,7 @@ static void jive_lcd_spi_chipselect(struct s3c2410_spigpio_info *spi, int cs) | |||
395 | } | 395 | } |
396 | 396 | ||
397 | static struct s3c2410_spigpio_info jive_lcd_spi = { | 397 | static struct s3c2410_spigpio_info jive_lcd_spi = { |
398 | .bus_num = 0, | 398 | .bus_num = 1, |
399 | .pin_clk = S3C2410_GPG8, | 399 | .pin_clk = S3C2410_GPG8, |
400 | .pin_mosi = S3C2410_GPB8, | 400 | .pin_mosi = S3C2410_GPB8, |
401 | .chip_select = jive_lcd_spi_chipselect, | 401 | .chip_select = jive_lcd_spi_chipselect, |
diff --git a/arch/arm/plat-omap/clock.c b/arch/arm/plat-omap/clock.c index 23a070599993..197974defbe4 100644 --- a/arch/arm/plat-omap/clock.c +++ b/arch/arm/plat-omap/clock.c | |||
@@ -10,7 +10,6 @@ | |||
10 | * it under the terms of the GNU General Public License version 2 as | 10 | * it under the terms of the GNU General Public License version 2 as |
11 | * published by the Free Software Foundation. | 11 | * published by the Free Software Foundation. |
12 | */ | 12 | */ |
13 | #include <linux/version.h> | ||
14 | #include <linux/kernel.h> | 13 | #include <linux/kernel.h> |
15 | #include <linux/init.h> | 14 | #include <linux/init.h> |
16 | #include <linux/module.h> | 15 | #include <linux/module.h> |
diff --git a/arch/arm/plat-s3c24xx/gpiolib.c b/arch/arm/plat-s3c24xx/gpiolib.c index 849f8469714a..3caec6bad3eb 100644 --- a/arch/arm/plat-s3c24xx/gpiolib.c +++ b/arch/arm/plat-s3c24xx/gpiolib.c | |||
@@ -39,7 +39,7 @@ static inline struct s3c24xx_gpio_chip *to_s3c_chip(struct gpio_chip *gpc) | |||
39 | * drivers themsevles. | 39 | * drivers themsevles. |
40 | */ | 40 | */ |
41 | 41 | ||
42 | int s3c24xx_gpiolib_input(struct gpio_chip *chip, unsigned offset) | 42 | static int s3c24xx_gpiolib_input(struct gpio_chip *chip, unsigned offset) |
43 | { | 43 | { |
44 | struct s3c24xx_gpio_chip *ourchip = to_s3c_chip(chip); | 44 | struct s3c24xx_gpio_chip *ourchip = to_s3c_chip(chip); |
45 | void __iomem *base = ourchip->base; | 45 | void __iomem *base = ourchip->base; |
@@ -58,7 +58,7 @@ int s3c24xx_gpiolib_input(struct gpio_chip *chip, unsigned offset) | |||
58 | return 0; | 58 | return 0; |
59 | } | 59 | } |
60 | 60 | ||
61 | int s3c24xx_gpiolib_output(struct gpio_chip *chip, | 61 | static int s3c24xx_gpiolib_output(struct gpio_chip *chip, |
62 | unsigned offset, int value) | 62 | unsigned offset, int value) |
63 | { | 63 | { |
64 | struct s3c24xx_gpio_chip *ourchip = to_s3c_chip(chip); | 64 | struct s3c24xx_gpio_chip *ourchip = to_s3c_chip(chip); |
@@ -86,7 +86,8 @@ int s3c24xx_gpiolib_output(struct gpio_chip *chip, | |||
86 | return 0; | 86 | return 0; |
87 | } | 87 | } |
88 | 88 | ||
89 | void s3c24xx_gpiolib_set(struct gpio_chip *chip, unsigned offset, int value) | 89 | static void s3c24xx_gpiolib_set(struct gpio_chip *chip, |
90 | unsigned offset, int value) | ||
90 | { | 91 | { |
91 | struct s3c24xx_gpio_chip *ourchip = to_s3c_chip(chip); | 92 | struct s3c24xx_gpio_chip *ourchip = to_s3c_chip(chip); |
92 | void __iomem *base = ourchip->base; | 93 | void __iomem *base = ourchip->base; |
@@ -104,7 +105,7 @@ void s3c24xx_gpiolib_set(struct gpio_chip *chip, unsigned offset, int value) | |||
104 | local_irq_restore(flags); | 105 | local_irq_restore(flags); |
105 | } | 106 | } |
106 | 107 | ||
107 | int s3c24xx_gpiolib_get(struct gpio_chip *chip, unsigned offset) | 108 | static int s3c24xx_gpiolib_get(struct gpio_chip *chip, unsigned offset) |
108 | { | 109 | { |
109 | struct s3c24xx_gpio_chip *ourchip = to_s3c_chip(chip); | 110 | struct s3c24xx_gpio_chip *ourchip = to_s3c_chip(chip); |
110 | unsigned long val; | 111 | unsigned long val; |
@@ -150,8 +151,7 @@ static int s3c24xx_gpiolib_banka_output(struct gpio_chip *chip, | |||
150 | return 0; | 151 | return 0; |
151 | } | 152 | } |
152 | 153 | ||
153 | 154 | static struct s3c24xx_gpio_chip gpios[] = { | |
154 | struct s3c24xx_gpio_chip gpios[] = { | ||
155 | [0] = { | 155 | [0] = { |
156 | .base = S3C24XX_GPIO_BASE(S3C2410_GPA0), | 156 | .base = S3C24XX_GPIO_BASE(S3C2410_GPA0), |
157 | .chip = { | 157 | .chip = { |
diff --git a/arch/arm/plat-s3c24xx/pwm-clock.c b/arch/arm/plat-s3c24xx/pwm-clock.c index ccfdc9d7ae4b..306cc9c6f9ef 100644 --- a/arch/arm/plat-s3c24xx/pwm-clock.c +++ b/arch/arm/plat-s3c24xx/pwm-clock.c | |||
@@ -89,7 +89,7 @@ static unsigned long clk_pwm_scaler_getrate(struct clk *clk) | |||
89 | 89 | ||
90 | /* TODO - add set rate calls. */ | 90 | /* TODO - add set rate calls. */ |
91 | 91 | ||
92 | struct clk clk_timer_scaler[] = { | 92 | static struct clk clk_timer_scaler[] = { |
93 | [0] = { | 93 | [0] = { |
94 | .name = "pwm-scaler0", | 94 | .name = "pwm-scaler0", |
95 | .id = -1, | 95 | .id = -1, |
@@ -102,7 +102,7 @@ struct clk clk_timer_scaler[] = { | |||
102 | }, | 102 | }, |
103 | }; | 103 | }; |
104 | 104 | ||
105 | struct clk clk_timer_tclk[] = { | 105 | static struct clk clk_timer_tclk[] = { |
106 | [0] = { | 106 | [0] = { |
107 | .name = "pwm-tclk0", | 107 | .name = "pwm-tclk0", |
108 | .id = -1, | 108 | .id = -1, |
@@ -232,7 +232,7 @@ static int clk_pwm_tdiv_set_rate(struct clk *clk, unsigned long rate) | |||
232 | return 0; | 232 | return 0; |
233 | } | 233 | } |
234 | 234 | ||
235 | struct pwm_tdiv_clk clk_timer_tdiv[] = { | 235 | static struct pwm_tdiv_clk clk_timer_tdiv[] = { |
236 | [0] = { | 236 | [0] = { |
237 | .clk = { | 237 | .clk = { |
238 | .name = "pwm-tdiv", | 238 | .name = "pwm-tdiv", |
diff --git a/arch/arm/plat-s3c24xx/pwm.c b/arch/arm/plat-s3c24xx/pwm.c index 18c4bdc49a05..7a92c938542a 100644 --- a/arch/arm/plat-s3c24xx/pwm.c +++ b/arch/arm/plat-s3c24xx/pwm.c | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <linux/io.h> | 19 | #include <linux/io.h> |
20 | #include <linux/pwm.h> | 20 | #include <linux/pwm.h> |
21 | 21 | ||
22 | #include <asm/plat-s3c24xx/devs.h> | ||
22 | #include <asm/plat-s3c/regs-timer.h> | 23 | #include <asm/plat-s3c/regs-timer.h> |
23 | 24 | ||
24 | struct pwm_device { | 25 | struct pwm_device { |
@@ -38,7 +39,7 @@ struct pwm_device { | |||
38 | unsigned char pwm_id; | 39 | unsigned char pwm_id; |
39 | }; | 40 | }; |
40 | 41 | ||
41 | #define pwm_dbg(_pwm, msg...) dev_info(&(_pwm)->pdev->dev, msg) | 42 | #define pwm_dbg(_pwm, msg...) dev_dbg(&(_pwm)->pdev->dev, msg) |
42 | 43 | ||
43 | static struct clk *clk_scaler[2]; | 44 | static struct clk *clk_scaler[2]; |
44 | 45 | ||
@@ -168,7 +169,7 @@ void pwm_disable(struct pwm_device *pwm) | |||
168 | 169 | ||
169 | EXPORT_SYMBOL(pwm_disable); | 170 | EXPORT_SYMBOL(pwm_disable); |
170 | 171 | ||
171 | unsigned long pwm_calc_tin(struct pwm_device *pwm, unsigned long freq) | 172 | static unsigned long pwm_calc_tin(struct pwm_device *pwm, unsigned long freq) |
172 | { | 173 | { |
173 | unsigned long tin_parent_rate; | 174 | unsigned long tin_parent_rate; |
174 | unsigned int div; | 175 | unsigned int div; |
diff --git a/arch/cris/arch-v32/kernel/fasttimer.c b/arch/cris/arch-v32/kernel/fasttimer.c index 2de9d5849ef0..111caa1a2efb 100644 --- a/arch/cris/arch-v32/kernel/fasttimer.c +++ b/arch/cris/arch-v32/kernel/fasttimer.c | |||
@@ -19,8 +19,6 @@ | |||
19 | #include <asm/irq.h> | 19 | #include <asm/irq.h> |
20 | #include <asm/system.h> | 20 | #include <asm/system.h> |
21 | 21 | ||
22 | #include <linux/version.h> | ||
23 | |||
24 | #include <hwregs/reg_map.h> | 22 | #include <hwregs/reg_map.h> |
25 | #include <hwregs/reg_rdwr.h> | 23 | #include <hwregs/reg_rdwr.h> |
26 | #include <hwregs/timer_defs.h> | 24 | #include <hwregs/timer_defs.h> |
diff --git a/arch/mn10300/kernel/mn10300-serial.c b/arch/mn10300/kernel/mn10300-serial.c index 8b054e7a8ae8..aa07d0cd1905 100644 --- a/arch/mn10300/kernel/mn10300-serial.c +++ b/arch/mn10300/kernel/mn10300-serial.c | |||
@@ -17,7 +17,6 @@ static const char serial_revdate[] = "2007-11-06"; | |||
17 | #define SUPPORT_SYSRQ | 17 | #define SUPPORT_SYSRQ |
18 | #endif | 18 | #endif |
19 | 19 | ||
20 | #include <linux/version.h> | ||
21 | #include <linux/module.h> | 20 | #include <linux/module.h> |
22 | #include <linux/serial.h> | 21 | #include <linux/serial.h> |
23 | #include <linux/circ_buf.h> | 22 | #include <linux/circ_buf.h> |
diff --git a/arch/powerpc/sysdev/bestcomm/gen_bd.c b/arch/powerpc/sysdev/bestcomm/gen_bd.c index a3a134c35b0a..e0a53e3147b2 100644 --- a/arch/powerpc/sysdev/bestcomm/gen_bd.c +++ b/arch/powerpc/sysdev/bestcomm/gen_bd.c | |||
@@ -11,7 +11,6 @@ | |||
11 | * | 11 | * |
12 | */ | 12 | */ |
13 | 13 | ||
14 | #include <linux/version.h> | ||
15 | #include <linux/module.h> | 14 | #include <linux/module.h> |
16 | #include <linux/kernel.h> | 15 | #include <linux/kernel.h> |
17 | #include <linux/string.h> | 16 | #include <linux/string.h> |
diff --git a/arch/s390/defconfig b/arch/s390/defconfig index c5cdb975d590..9b0bc2c9fba0 100644 --- a/arch/s390/defconfig +++ b/arch/s390/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.26-rc4 | 3 | # Linux kernel version: 2.6.27-rc4 |
4 | # Fri May 30 09:49:33 2008 | 4 | # Thu Aug 21 19:43:29 2008 |
5 | # | 5 | # |
6 | CONFIG_SCHED_MC=y | 6 | CONFIG_SCHED_MC=y |
7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
@@ -68,7 +68,6 @@ CONFIG_INITRAMFS_SOURCE="" | |||
68 | CONFIG_SYSCTL=y | 68 | CONFIG_SYSCTL=y |
69 | # CONFIG_EMBEDDED is not set | 69 | # CONFIG_EMBEDDED is not set |
70 | CONFIG_SYSCTL_SYSCALL=y | 70 | CONFIG_SYSCTL_SYSCALL=y |
71 | CONFIG_SYSCTL_SYSCALL_CHECK=y | ||
72 | CONFIG_KALLSYMS=y | 71 | CONFIG_KALLSYMS=y |
73 | # CONFIG_KALLSYMS_ALL is not set | 72 | # CONFIG_KALLSYMS_ALL is not set |
74 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 73 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
@@ -93,11 +92,17 @@ CONFIG_SLAB=y | |||
93 | # CONFIG_MARKERS is not set | 92 | # CONFIG_MARKERS is not set |
94 | CONFIG_HAVE_OPROFILE=y | 93 | CONFIG_HAVE_OPROFILE=y |
95 | CONFIG_KPROBES=y | 94 | CONFIG_KPROBES=y |
95 | # CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is not set | ||
96 | CONFIG_KRETPROBES=y | 96 | CONFIG_KRETPROBES=y |
97 | # CONFIG_HAVE_IOREMAP_PROT is not set | ||
97 | CONFIG_HAVE_KPROBES=y | 98 | CONFIG_HAVE_KPROBES=y |
98 | CONFIG_HAVE_KRETPROBES=y | 99 | CONFIG_HAVE_KRETPROBES=y |
100 | # CONFIG_HAVE_ARCH_TRACEHOOK is not set | ||
99 | # CONFIG_HAVE_DMA_ATTRS is not set | 101 | # CONFIG_HAVE_DMA_ATTRS is not set |
102 | # CONFIG_USE_GENERIC_SMP_HELPERS is not set | ||
103 | # CONFIG_HAVE_CLK is not set | ||
100 | CONFIG_PROC_PAGE_MONITOR=y | 104 | CONFIG_PROC_PAGE_MONITOR=y |
105 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | ||
101 | CONFIG_SLABINFO=y | 106 | CONFIG_SLABINFO=y |
102 | CONFIG_RT_MUTEXES=y | 107 | CONFIG_RT_MUTEXES=y |
103 | # CONFIG_TINY_SHMEM is not set | 108 | # CONFIG_TINY_SHMEM is not set |
@@ -113,6 +118,7 @@ CONFIG_STOP_MACHINE=y | |||
113 | CONFIG_BLOCK=y | 118 | CONFIG_BLOCK=y |
114 | # CONFIG_BLK_DEV_IO_TRACE is not set | 119 | # CONFIG_BLK_DEV_IO_TRACE is not set |
115 | CONFIG_BLK_DEV_BSG=y | 120 | CONFIG_BLK_DEV_BSG=y |
121 | # CONFIG_BLK_DEV_INTEGRITY is not set | ||
116 | CONFIG_BLOCK_COMPAT=y | 122 | CONFIG_BLOCK_COMPAT=y |
117 | 123 | ||
118 | # | 124 | # |
@@ -175,6 +181,8 @@ CONFIG_PREEMPT=y | |||
175 | CONFIG_ARCH_SPARSEMEM_ENABLE=y | 181 | CONFIG_ARCH_SPARSEMEM_ENABLE=y |
176 | CONFIG_ARCH_SPARSEMEM_DEFAULT=y | 182 | CONFIG_ARCH_SPARSEMEM_DEFAULT=y |
177 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | 183 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y |
184 | CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y | ||
185 | CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y | ||
178 | CONFIG_SELECT_MEMORY_MODEL=y | 186 | CONFIG_SELECT_MEMORY_MODEL=y |
179 | # CONFIG_FLATMEM_MANUAL is not set | 187 | # CONFIG_FLATMEM_MANUAL is not set |
180 | # CONFIG_DISCONTIGMEM_MANUAL is not set | 188 | # CONFIG_DISCONTIGMEM_MANUAL is not set |
@@ -185,8 +193,12 @@ CONFIG_HAVE_MEMORY_PRESENT=y | |||
185 | CONFIG_SPARSEMEM_EXTREME=y | 193 | CONFIG_SPARSEMEM_EXTREME=y |
186 | CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y | 194 | CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y |
187 | CONFIG_SPARSEMEM_VMEMMAP=y | 195 | CONFIG_SPARSEMEM_VMEMMAP=y |
196 | CONFIG_MEMORY_HOTPLUG=y | ||
197 | CONFIG_MEMORY_HOTPLUG_SPARSE=y | ||
198 | CONFIG_MEMORY_HOTREMOVE=y | ||
188 | CONFIG_PAGEFLAGS_EXTENDED=y | 199 | CONFIG_PAGEFLAGS_EXTENDED=y |
189 | CONFIG_SPLIT_PTLOCK_CPUS=4 | 200 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
201 | CONFIG_MIGRATION=y | ||
190 | CONFIG_RESOURCES_64BIT=y | 202 | CONFIG_RESOURCES_64BIT=y |
191 | CONFIG_ZONE_DMA_FLAG=1 | 203 | CONFIG_ZONE_DMA_FLAG=1 |
192 | CONFIG_BOUNCE=y | 204 | CONFIG_BOUNCE=y |
@@ -198,6 +210,7 @@ CONFIG_VIRT_TO_BUS=y | |||
198 | CONFIG_MACHCHK_WARNING=y | 210 | CONFIG_MACHCHK_WARNING=y |
199 | CONFIG_QDIO=y | 211 | CONFIG_QDIO=y |
200 | # CONFIG_QDIO_DEBUG is not set | 212 | # CONFIG_QDIO_DEBUG is not set |
213 | CONFIG_CHSC_SCH=m | ||
201 | 214 | ||
202 | # | 215 | # |
203 | # Misc | 216 | # Misc |
@@ -206,6 +219,7 @@ CONFIG_IPL=y | |||
206 | # CONFIG_IPL_TAPE is not set | 219 | # CONFIG_IPL_TAPE is not set |
207 | CONFIG_IPL_VM=y | 220 | CONFIG_IPL_VM=y |
208 | CONFIG_BINFMT_ELF=y | 221 | CONFIG_BINFMT_ELF=y |
222 | CONFIG_COMPAT_BINFMT_ELF=y | ||
209 | CONFIG_BINFMT_MISC=m | 223 | CONFIG_BINFMT_MISC=m |
210 | CONFIG_FORCE_MAX_ZONEORDER=9 | 224 | CONFIG_FORCE_MAX_ZONEORDER=9 |
211 | # CONFIG_PROCESS_DEBUG is not set | 225 | # CONFIG_PROCESS_DEBUG is not set |
@@ -226,10 +240,6 @@ CONFIG_S390_HYPFS_FS=y | |||
226 | CONFIG_KEXEC=y | 240 | CONFIG_KEXEC=y |
227 | # CONFIG_ZFCPDUMP is not set | 241 | # CONFIG_ZFCPDUMP is not set |
228 | CONFIG_S390_GUEST=y | 242 | CONFIG_S390_GUEST=y |
229 | |||
230 | # | ||
231 | # Networking | ||
232 | # | ||
233 | CONFIG_NET=y | 243 | CONFIG_NET=y |
234 | 244 | ||
235 | # | 245 | # |
@@ -364,7 +374,6 @@ CONFIG_NET_SCH_CBQ=m | |||
364 | # CONFIG_NET_SCH_HTB is not set | 374 | # CONFIG_NET_SCH_HTB is not set |
365 | # CONFIG_NET_SCH_HFSC is not set | 375 | # CONFIG_NET_SCH_HFSC is not set |
366 | CONFIG_NET_SCH_PRIO=m | 376 | CONFIG_NET_SCH_PRIO=m |
367 | CONFIG_NET_SCH_RR=m | ||
368 | CONFIG_NET_SCH_RED=m | 377 | CONFIG_NET_SCH_RED=m |
369 | CONFIG_NET_SCH_SFQ=m | 378 | CONFIG_NET_SCH_SFQ=m |
370 | CONFIG_NET_SCH_TEQL=m | 379 | CONFIG_NET_SCH_TEQL=m |
@@ -430,7 +439,9 @@ CONFIG_CCW=y | |||
430 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | 439 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" |
431 | CONFIG_STANDALONE=y | 440 | CONFIG_STANDALONE=y |
432 | CONFIG_PREVENT_FIRMWARE_BUILD=y | 441 | CONFIG_PREVENT_FIRMWARE_BUILD=y |
433 | # CONFIG_FW_LOADER is not set | 442 | CONFIG_FW_LOADER=y |
443 | # CONFIG_FIRMWARE_IN_KERNEL is not set | ||
444 | CONFIG_EXTRA_FIRMWARE="" | ||
434 | # CONFIG_DEBUG_DRIVER is not set | 445 | # CONFIG_DEBUG_DRIVER is not set |
435 | # CONFIG_DEBUG_DEVRES is not set | 446 | # CONFIG_DEBUG_DEVRES is not set |
436 | CONFIG_SYS_HYPERVISOR=y | 447 | CONFIG_SYS_HYPERVISOR=y |
@@ -507,6 +518,11 @@ CONFIG_SCSI_LOWLEVEL=y | |||
507 | # CONFIG_ISCSI_TCP is not set | 518 | # CONFIG_ISCSI_TCP is not set |
508 | # CONFIG_SCSI_DEBUG is not set | 519 | # CONFIG_SCSI_DEBUG is not set |
509 | CONFIG_ZFCP=y | 520 | CONFIG_ZFCP=y |
521 | CONFIG_SCSI_DH=m | ||
522 | CONFIG_SCSI_DH_RDAC=m | ||
523 | CONFIG_SCSI_DH_HP_SW=m | ||
524 | CONFIG_SCSI_DH_EMC=m | ||
525 | CONFIG_SCSI_DH_ALUA=m | ||
510 | CONFIG_MD=y | 526 | CONFIG_MD=y |
511 | CONFIG_BLK_DEV_MD=y | 527 | CONFIG_BLK_DEV_MD=y |
512 | CONFIG_MD_LINEAR=m | 528 | CONFIG_MD_LINEAR=m |
@@ -522,14 +538,10 @@ CONFIG_DM_CRYPT=y | |||
522 | CONFIG_DM_SNAPSHOT=y | 538 | CONFIG_DM_SNAPSHOT=y |
523 | CONFIG_DM_MIRROR=y | 539 | CONFIG_DM_MIRROR=y |
524 | CONFIG_DM_ZERO=y | 540 | CONFIG_DM_ZERO=y |
525 | CONFIG_DM_MULTIPATH=y | 541 | CONFIG_DM_MULTIPATH=m |
526 | # CONFIG_DM_MULTIPATH_EMC is not set | ||
527 | # CONFIG_DM_MULTIPATH_RDAC is not set | ||
528 | # CONFIG_DM_MULTIPATH_HP is not set | ||
529 | # CONFIG_DM_DELAY is not set | 542 | # CONFIG_DM_DELAY is not set |
530 | # CONFIG_DM_UEVENT is not set | 543 | # CONFIG_DM_UEVENT is not set |
531 | CONFIG_NETDEVICES=y | 544 | CONFIG_NETDEVICES=y |
532 | # CONFIG_NETDEVICES_MULTIQUEUE is not set | ||
533 | # CONFIG_IFB is not set | 545 | # CONFIG_IFB is not set |
534 | CONFIG_DUMMY=m | 546 | CONFIG_DUMMY=m |
535 | CONFIG_BONDING=m | 547 | CONFIG_BONDING=m |
@@ -544,7 +556,6 @@ CONFIG_NET_ETHERNET=y | |||
544 | # CONFIG_IBM_NEW_EMAC_TAH is not set | 556 | # CONFIG_IBM_NEW_EMAC_TAH is not set |
545 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set | 557 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set |
546 | CONFIG_NETDEV_1000=y | 558 | CONFIG_NETDEV_1000=y |
547 | # CONFIG_E1000E_ENABLED is not set | ||
548 | CONFIG_NETDEV_10000=y | 559 | CONFIG_NETDEV_10000=y |
549 | # CONFIG_TR is not set | 560 | # CONFIG_TR is not set |
550 | # CONFIG_WAN is not set | 561 | # CONFIG_WAN is not set |
@@ -576,7 +587,10 @@ CONFIG_DEVKMEM=y | |||
576 | CONFIG_UNIX98_PTYS=y | 587 | CONFIG_UNIX98_PTYS=y |
577 | CONFIG_LEGACY_PTYS=y | 588 | CONFIG_LEGACY_PTYS=y |
578 | CONFIG_LEGACY_PTY_COUNT=256 | 589 | CONFIG_LEGACY_PTY_COUNT=256 |
590 | CONFIG_HVC_DRIVER=y | ||
591 | CONFIG_VIRTIO_CONSOLE=y | ||
579 | CONFIG_HW_RANDOM=m | 592 | CONFIG_HW_RANDOM=m |
593 | CONFIG_HW_RANDOM_VIRTIO=m | ||
580 | # CONFIG_R3964 is not set | 594 | # CONFIG_R3964 is not set |
581 | CONFIG_RAW_DRIVER=m | 595 | CONFIG_RAW_DRIVER=m |
582 | CONFIG_MAX_RAW_DEVS=256 | 596 | CONFIG_MAX_RAW_DEVS=256 |
@@ -616,6 +630,7 @@ CONFIG_MONWRITER=m | |||
616 | CONFIG_S390_VMUR=m | 630 | CONFIG_S390_VMUR=m |
617 | # CONFIG_POWER_SUPPLY is not set | 631 | # CONFIG_POWER_SUPPLY is not set |
618 | # CONFIG_THERMAL is not set | 632 | # CONFIG_THERMAL is not set |
633 | # CONFIG_THERMAL_HWMON is not set | ||
619 | # CONFIG_WATCHDOG is not set | 634 | # CONFIG_WATCHDOG is not set |
620 | 635 | ||
621 | # | 636 | # |
@@ -693,6 +708,7 @@ CONFIG_CONFIGFS_FS=m | |||
693 | # CONFIG_CRAMFS is not set | 708 | # CONFIG_CRAMFS is not set |
694 | # CONFIG_VXFS_FS is not set | 709 | # CONFIG_VXFS_FS is not set |
695 | # CONFIG_MINIX_FS is not set | 710 | # CONFIG_MINIX_FS is not set |
711 | # CONFIG_OMFS_FS is not set | ||
696 | # CONFIG_HPFS_FS is not set | 712 | # CONFIG_HPFS_FS is not set |
697 | # CONFIG_QNX4FS_FS is not set | 713 | # CONFIG_QNX4FS_FS is not set |
698 | # CONFIG_ROMFS_FS is not set | 714 | # CONFIG_ROMFS_FS is not set |
@@ -712,7 +728,6 @@ CONFIG_LOCKD_V4=y | |||
712 | CONFIG_EXPORTFS=y | 728 | CONFIG_EXPORTFS=y |
713 | CONFIG_NFS_COMMON=y | 729 | CONFIG_NFS_COMMON=y |
714 | CONFIG_SUNRPC=y | 730 | CONFIG_SUNRPC=y |
715 | # CONFIG_SUNRPC_BIND34 is not set | ||
716 | # CONFIG_RPCSEC_GSS_KRB5 is not set | 731 | # CONFIG_RPCSEC_GSS_KRB5 is not set |
717 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | 732 | # CONFIG_RPCSEC_GSS_SPKM3 is not set |
718 | # CONFIG_SMB_FS is not set | 733 | # CONFIG_SMB_FS is not set |
@@ -780,6 +795,7 @@ CONFIG_DEBUG_BUGVERBOSE=y | |||
780 | # CONFIG_DEBUG_INFO is not set | 795 | # CONFIG_DEBUG_INFO is not set |
781 | # CONFIG_DEBUG_VM is not set | 796 | # CONFIG_DEBUG_VM is not set |
782 | # CONFIG_DEBUG_WRITECOUNT is not set | 797 | # CONFIG_DEBUG_WRITECOUNT is not set |
798 | CONFIG_DEBUG_MEMORY_INIT=y | ||
783 | # CONFIG_DEBUG_LIST is not set | 799 | # CONFIG_DEBUG_LIST is not set |
784 | # CONFIG_DEBUG_SG is not set | 800 | # CONFIG_DEBUG_SG is not set |
785 | # CONFIG_FRAME_POINTER is not set | 801 | # CONFIG_FRAME_POINTER is not set |
@@ -789,6 +805,7 @@ CONFIG_DEBUG_BUGVERBOSE=y | |||
789 | # CONFIG_LKDTM is not set | 805 | # CONFIG_LKDTM is not set |
790 | # CONFIG_FAULT_INJECTION is not set | 806 | # CONFIG_FAULT_INJECTION is not set |
791 | # CONFIG_LATENCYTOP is not set | 807 | # CONFIG_LATENCYTOP is not set |
808 | CONFIG_SYSCTL_SYSCALL_CHECK=y | ||
792 | CONFIG_SAMPLES=y | 809 | CONFIG_SAMPLES=y |
793 | # CONFIG_SAMPLE_KOBJECT is not set | 810 | # CONFIG_SAMPLE_KOBJECT is not set |
794 | # CONFIG_SAMPLE_KPROBES is not set | 811 | # CONFIG_SAMPLE_KPROBES is not set |
@@ -847,6 +864,10 @@ CONFIG_CRYPTO_HMAC=m | |||
847 | # CONFIG_CRYPTO_MD4 is not set | 864 | # CONFIG_CRYPTO_MD4 is not set |
848 | CONFIG_CRYPTO_MD5=m | 865 | CONFIG_CRYPTO_MD5=m |
849 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | 866 | # CONFIG_CRYPTO_MICHAEL_MIC is not set |
867 | CONFIG_CRYPTO_RMD128=m | ||
868 | CONFIG_CRYPTO_RMD160=m | ||
869 | CONFIG_CRYPTO_RMD256=m | ||
870 | CONFIG_CRYPTO_RMD320=m | ||
850 | CONFIG_CRYPTO_SHA1=m | 871 | CONFIG_CRYPTO_SHA1=m |
851 | # CONFIG_CRYPTO_SHA256 is not set | 872 | # CONFIG_CRYPTO_SHA256 is not set |
852 | # CONFIG_CRYPTO_SHA512 is not set | 873 | # CONFIG_CRYPTO_SHA512 is not set |
@@ -895,6 +916,7 @@ CONFIG_BITREVERSE=m | |||
895 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set | 916 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set |
896 | # CONFIG_CRC_CCITT is not set | 917 | # CONFIG_CRC_CCITT is not set |
897 | # CONFIG_CRC16 is not set | 918 | # CONFIG_CRC16 is not set |
919 | CONFIG_CRC_T10DIF=y | ||
898 | # CONFIG_CRC_ITU_T is not set | 920 | # CONFIG_CRC_ITU_T is not set |
899 | CONFIG_CRC32=m | 921 | CONFIG_CRC32=m |
900 | CONFIG_CRC7=m | 922 | CONFIG_CRC7=m |
diff --git a/arch/s390/include/asm/bitops.h b/arch/s390/include/asm/bitops.h index b4eb24ab5af9..8e9243ae0c19 100644 --- a/arch/s390/include/asm/bitops.h +++ b/arch/s390/include/asm/bitops.h | |||
@@ -709,7 +709,7 @@ static inline int find_next_zero_bit (const unsigned long * addr, | |||
709 | * __ffz_word returns __BITOPS_WORDSIZE | 709 | * __ffz_word returns __BITOPS_WORDSIZE |
710 | * if no zero bit is present in the word. | 710 | * if no zero bit is present in the word. |
711 | */ | 711 | */ |
712 | set = __ffz_word(0, *p >> bit) + bit; | 712 | set = __ffz_word(bit, *p >> bit); |
713 | if (set >= size) | 713 | if (set >= size) |
714 | return size + offset; | 714 | return size + offset; |
715 | if (set < __BITOPS_WORDSIZE) | 715 | if (set < __BITOPS_WORDSIZE) |
@@ -824,7 +824,7 @@ static inline int ext2_find_next_zero_bit(void *vaddr, unsigned long size, | |||
824 | * s390 version of ffz returns __BITOPS_WORDSIZE | 824 | * s390 version of ffz returns __BITOPS_WORDSIZE |
825 | * if no zero bit is present in the word. | 825 | * if no zero bit is present in the word. |
826 | */ | 826 | */ |
827 | set = ffz(__load_ulong_le(p, 0) >> bit) + bit; | 827 | set = __ffz_word(bit, __load_ulong_le(p, 0) >> bit); |
828 | if (set >= size) | 828 | if (set >= size) |
829 | return size + offset; | 829 | return size + offset; |
830 | if (set < __BITOPS_WORDSIZE) | 830 | if (set < __BITOPS_WORDSIZE) |
@@ -865,7 +865,7 @@ static inline int ext2_find_next_bit(void *vaddr, unsigned long size, | |||
865 | * s390 version of ffz returns __BITOPS_WORDSIZE | 865 | * s390 version of ffz returns __BITOPS_WORDSIZE |
866 | * if no zero bit is present in the word. | 866 | * if no zero bit is present in the word. |
867 | */ | 867 | */ |
868 | set = ffs(__load_ulong_le(p, 0) >> bit) + bit; | 868 | set = __ffs_word(0, __load_ulong_le(p, 0) & (~0UL << bit)); |
869 | if (set >= size) | 869 | if (set >= size) |
870 | return size + offset; | 870 | return size + offset; |
871 | if (set < __BITOPS_WORDSIZE) | 871 | if (set < __BITOPS_WORDSIZE) |
diff --git a/arch/s390/kernel/process.c b/arch/s390/kernel/process.c index 9839767d0842..3e2c05cb6a87 100644 --- a/arch/s390/kernel/process.c +++ b/arch/s390/kernel/process.c | |||
@@ -75,7 +75,9 @@ unsigned long thread_saved_pc(struct task_struct *tsk) | |||
75 | return sf->gprs[8]; | 75 | return sf->gprs[8]; |
76 | } | 76 | } |
77 | 77 | ||
78 | DEFINE_PER_CPU(struct s390_idle_data, s390_idle); | 78 | DEFINE_PER_CPU(struct s390_idle_data, s390_idle) = { |
79 | .lock = __SPIN_LOCK_UNLOCKED(s390_idle.lock) | ||
80 | }; | ||
79 | 81 | ||
80 | static int s390_idle_enter(void) | 82 | static int s390_idle_enter(void) |
81 | { | 83 | { |
diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c index b795b3e24afd..00b9b4dec5eb 100644 --- a/arch/s390/kernel/smp.c +++ b/arch/s390/kernel/smp.c | |||
@@ -610,7 +610,6 @@ static void __init smp_create_idle(unsigned int cpu) | |||
610 | if (IS_ERR(p)) | 610 | if (IS_ERR(p)) |
611 | panic("failed fork for CPU %u: %li", cpu, PTR_ERR(p)); | 611 | panic("failed fork for CPU %u: %li", cpu, PTR_ERR(p)); |
612 | current_set[cpu] = p; | 612 | current_set[cpu] = p; |
613 | spin_lock_init(&(&per_cpu(s390_idle, cpu))->lock); | ||
614 | } | 613 | } |
615 | 614 | ||
616 | static int __cpuinit smp_alloc_lowcore(int cpu) | 615 | static int __cpuinit smp_alloc_lowcore(int cpu) |
@@ -845,7 +844,6 @@ void __init smp_prepare_boot_cpu(void) | |||
845 | current_set[0] = current; | 844 | current_set[0] = current; |
846 | smp_cpu_state[0] = CPU_STATE_CONFIGURED; | 845 | smp_cpu_state[0] = CPU_STATE_CONFIGURED; |
847 | smp_cpu_polarization[0] = POLARIZATION_UNKNWN; | 846 | smp_cpu_polarization[0] = POLARIZATION_UNKNWN; |
848 | spin_lock_init(&(&__get_cpu_var(s390_idle))->lock); | ||
849 | } | 847 | } |
850 | 848 | ||
851 | void __init smp_cpus_done(unsigned int max_cpus) | 849 | void __init smp_cpus_done(unsigned int max_cpus) |
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 68d91c8233f4..ed92864d1325 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig | |||
@@ -577,35 +577,29 @@ config SWIOTLB | |||
577 | 577 | ||
578 | config IOMMU_HELPER | 578 | config IOMMU_HELPER |
579 | def_bool (CALGARY_IOMMU || GART_IOMMU || SWIOTLB || AMD_IOMMU) | 579 | def_bool (CALGARY_IOMMU || GART_IOMMU || SWIOTLB || AMD_IOMMU) |
580 | |||
580 | config MAXSMP | 581 | config MAXSMP |
581 | bool "Configure Maximum number of SMP Processors and NUMA Nodes" | 582 | bool "Configure Maximum number of SMP Processors and NUMA Nodes" |
582 | depends on X86_64 && SMP | 583 | depends on X86_64 && SMP && BROKEN |
583 | default n | 584 | default n |
584 | help | 585 | help |
585 | Configure maximum number of CPUS and NUMA Nodes for this architecture. | 586 | Configure maximum number of CPUS and NUMA Nodes for this architecture. |
586 | If unsure, say N. | 587 | If unsure, say N. |
587 | 588 | ||
588 | if MAXSMP | ||
589 | config NR_CPUS | ||
590 | int | ||
591 | default "4096" | ||
592 | endif | ||
593 | |||
594 | if !MAXSMP | ||
595 | config NR_CPUS | 589 | config NR_CPUS |
596 | int "Maximum number of CPUs (2-4096)" | 590 | int "Maximum number of CPUs (2-512)" if !MAXSMP |
597 | range 2 4096 | 591 | range 2 512 |
598 | depends on SMP | 592 | depends on SMP |
593 | default "4096" if MAXSMP | ||
599 | default "32" if X86_NUMAQ || X86_SUMMIT || X86_BIGSMP || X86_ES7000 | 594 | default "32" if X86_NUMAQ || X86_SUMMIT || X86_BIGSMP || X86_ES7000 |
600 | default "8" | 595 | default "8" |
601 | help | 596 | help |
602 | This allows you to specify the maximum number of CPUs which this | 597 | This allows you to specify the maximum number of CPUs which this |
603 | kernel will support. The maximum supported value is 4096 and the | 598 | kernel will support. The maximum supported value is 512 and the |
604 | minimum value which makes sense is 2. | 599 | minimum value which makes sense is 2. |
605 | 600 | ||
606 | This is purely to save memory - each supported CPU adds | 601 | This is purely to save memory - each supported CPU adds |
607 | approximately eight kilobytes to the kernel image. | 602 | approximately eight kilobytes to the kernel image. |
608 | endif | ||
609 | 603 | ||
610 | config SCHED_SMT | 604 | config SCHED_SMT |
611 | bool "SMT (Hyperthreading) scheduler support" | 605 | bool "SMT (Hyperthreading) scheduler support" |
@@ -996,17 +990,10 @@ config NUMA_EMU | |||
996 | into virtual nodes when booted with "numa=fake=N", where N is the | 990 | into virtual nodes when booted with "numa=fake=N", where N is the |
997 | number of nodes. This is only useful for debugging. | 991 | number of nodes. This is only useful for debugging. |
998 | 992 | ||
999 | if MAXSMP | ||
1000 | |||
1001 | config NODES_SHIFT | 993 | config NODES_SHIFT |
1002 | int | 994 | int "Maximum NUMA Nodes (as a power of 2)" if !MAXSMP |
1003 | default "9" | ||
1004 | endif | ||
1005 | |||
1006 | if !MAXSMP | ||
1007 | config NODES_SHIFT | ||
1008 | int "Maximum NUMA Nodes (as a power of 2)" | ||
1009 | range 1 9 if X86_64 | 995 | range 1 9 if X86_64 |
996 | default "9" if MAXSMP | ||
1010 | default "6" if X86_64 | 997 | default "6" if X86_64 |
1011 | default "4" if X86_NUMAQ | 998 | default "4" if X86_NUMAQ |
1012 | default "3" | 999 | default "3" |
@@ -1014,7 +1001,6 @@ config NODES_SHIFT | |||
1014 | help | 1001 | help |
1015 | Specify the maximum number of NUMA Nodes available on the target | 1002 | Specify the maximum number of NUMA Nodes available on the target |
1016 | system. Increases memory reserved to accomodate various tables. | 1003 | system. Increases memory reserved to accomodate various tables. |
1017 | endif | ||
1018 | 1004 | ||
1019 | config HAVE_ARCH_BOOTMEM_NODE | 1005 | config HAVE_ARCH_BOOTMEM_NODE |
1020 | def_bool y | 1006 | def_bool y |
diff --git a/arch/x86/kernel/amd_iommu.c b/arch/x86/kernel/amd_iommu.c index de39e1f2ede5..69b4d060b21c 100644 --- a/arch/x86/kernel/amd_iommu.c +++ b/arch/x86/kernel/amd_iommu.c | |||
@@ -65,7 +65,7 @@ static int __iommu_queue_command(struct amd_iommu *iommu, struct iommu_cmd *cmd) | |||
65 | u8 *target; | 65 | u8 *target; |
66 | 66 | ||
67 | tail = readl(iommu->mmio_base + MMIO_CMD_TAIL_OFFSET); | 67 | tail = readl(iommu->mmio_base + MMIO_CMD_TAIL_OFFSET); |
68 | target = (iommu->cmd_buf + tail); | 68 | target = iommu->cmd_buf + tail; |
69 | memcpy_toio(target, cmd, sizeof(*cmd)); | 69 | memcpy_toio(target, cmd, sizeof(*cmd)); |
70 | tail = (tail + sizeof(*cmd)) % iommu->cmd_buf_size; | 70 | tail = (tail + sizeof(*cmd)) % iommu->cmd_buf_size; |
71 | head = readl(iommu->mmio_base + MMIO_CMD_HEAD_OFFSET); | 71 | head = readl(iommu->mmio_base + MMIO_CMD_HEAD_OFFSET); |
diff --git a/arch/x86/kernel/cpu/addon_cpuid_features.c b/arch/x86/kernel/cpu/addon_cpuid_features.c index 84a8220a6072..a6ef672adbba 100644 --- a/arch/x86/kernel/cpu/addon_cpuid_features.c +++ b/arch/x86/kernel/cpu/addon_cpuid_features.c | |||
@@ -56,9 +56,22 @@ void __cpuinit validate_pat_support(struct cpuinfo_x86 *c) | |||
56 | 56 | ||
57 | switch (c->x86_vendor) { | 57 | switch (c->x86_vendor) { |
58 | case X86_VENDOR_INTEL: | 58 | case X86_VENDOR_INTEL: |
59 | if (c->x86 == 0xF || (c->x86 == 6 && c->x86_model >= 15)) | 59 | /* |
60 | * There is a known erratum on Pentium III and Core Solo | ||
61 | * and Core Duo CPUs. | ||
62 | * " Page with PAT set to WC while associated MTRR is UC | ||
63 | * may consolidate to UC " | ||
64 | * Because of this erratum, it is better to stick with | ||
65 | * setting WC in MTRR rather than using PAT on these CPUs. | ||
66 | * | ||
67 | * Enable PAT WC only on P4, Core 2 or later CPUs. | ||
68 | */ | ||
69 | if (c->x86 > 0x6 || (c->x86 == 6 && c->x86_model >= 15)) | ||
60 | return; | 70 | return; |
61 | break; | 71 | |
72 | pat_disable("PAT WC disabled due to known CPU erratum."); | ||
73 | return; | ||
74 | |||
62 | case X86_VENDOR_AMD: | 75 | case X86_VENDOR_AMD: |
63 | case X86_VENDOR_CENTAUR: | 76 | case X86_VENDOR_CENTAUR: |
64 | case X86_VENDOR_TRANSMETA: | 77 | case X86_VENDOR_TRANSMETA: |
diff --git a/arch/x86/kernel/cpu/cyrix.c b/arch/x86/kernel/cpu/cyrix.c index 3fd7a67bb06a..e710a21bb6e8 100644 --- a/arch/x86/kernel/cpu/cyrix.c +++ b/arch/x86/kernel/cpu/cyrix.c | |||
@@ -134,23 +134,6 @@ static void __cpuinit set_cx86_memwb(void) | |||
134 | setCx86(CX86_CCR2, getCx86(CX86_CCR2) | 0x14); | 134 | setCx86(CX86_CCR2, getCx86(CX86_CCR2) | 0x14); |
135 | } | 135 | } |
136 | 136 | ||
137 | static void __cpuinit set_cx86_inc(void) | ||
138 | { | ||
139 | unsigned char ccr3; | ||
140 | |||
141 | printk(KERN_INFO "Enable Incrementor on Cyrix/NSC processor.\n"); | ||
142 | |||
143 | ccr3 = getCx86(CX86_CCR3); | ||
144 | setCx86(CX86_CCR3, (ccr3 & 0x0f) | 0x10); /* enable MAPEN */ | ||
145 | /* PCR1 -- Performance Control */ | ||
146 | /* Incrementor on, whatever that is */ | ||
147 | setCx86(CX86_PCR1, getCx86(CX86_PCR1) | 0x02); | ||
148 | /* PCR0 -- Performance Control */ | ||
149 | /* Incrementor Margin 10 */ | ||
150 | setCx86(CX86_PCR0, getCx86(CX86_PCR0) | 0x04); | ||
151 | setCx86(CX86_CCR3, ccr3); /* disable MAPEN */ | ||
152 | } | ||
153 | |||
154 | /* | 137 | /* |
155 | * Configure later MediaGX and/or Geode processor. | 138 | * Configure later MediaGX and/or Geode processor. |
156 | */ | 139 | */ |
@@ -174,7 +157,6 @@ static void __cpuinit geode_configure(void) | |||
174 | 157 | ||
175 | set_cx86_memwb(); | 158 | set_cx86_memwb(); |
176 | set_cx86_reorder(); | 159 | set_cx86_reorder(); |
177 | set_cx86_inc(); | ||
178 | 160 | ||
179 | local_irq_restore(flags); | 161 | local_irq_restore(flags); |
180 | } | 162 | } |
diff --git a/arch/x86/kernel/cpu/mcheck/mce_64.c b/arch/x86/kernel/cpu/mcheck/mce_64.c index 65a339678ece..726a5fcdf341 100644 --- a/arch/x86/kernel/cpu/mcheck/mce_64.c +++ b/arch/x86/kernel/cpu/mcheck/mce_64.c | |||
@@ -759,6 +759,7 @@ static struct sysdev_class mce_sysclass = { | |||
759 | }; | 759 | }; |
760 | 760 | ||
761 | DEFINE_PER_CPU(struct sys_device, device_mce); | 761 | DEFINE_PER_CPU(struct sys_device, device_mce); |
762 | void (*threshold_cpu_callback)(unsigned long action, unsigned int cpu) __cpuinitdata; | ||
762 | 763 | ||
763 | /* Why are there no generic functions for this? */ | 764 | /* Why are there no generic functions for this? */ |
764 | #define ACCESSOR(name, var, start) \ | 765 | #define ACCESSOR(name, var, start) \ |
@@ -883,9 +884,13 @@ static int __cpuinit mce_cpu_callback(struct notifier_block *nfb, | |||
883 | case CPU_ONLINE: | 884 | case CPU_ONLINE: |
884 | case CPU_ONLINE_FROZEN: | 885 | case CPU_ONLINE_FROZEN: |
885 | mce_create_device(cpu); | 886 | mce_create_device(cpu); |
887 | if (threshold_cpu_callback) | ||
888 | threshold_cpu_callback(action, cpu); | ||
886 | break; | 889 | break; |
887 | case CPU_DEAD: | 890 | case CPU_DEAD: |
888 | case CPU_DEAD_FROZEN: | 891 | case CPU_DEAD_FROZEN: |
892 | if (threshold_cpu_callback) | ||
893 | threshold_cpu_callback(action, cpu); | ||
889 | mce_remove_device(cpu); | 894 | mce_remove_device(cpu); |
890 | break; | 895 | break; |
891 | } | 896 | } |
diff --git a/arch/x86/kernel/cpu/mcheck/mce_amd_64.c b/arch/x86/kernel/cpu/mcheck/mce_amd_64.c index 88736cadbaa6..5eb390a4b2e9 100644 --- a/arch/x86/kernel/cpu/mcheck/mce_amd_64.c +++ b/arch/x86/kernel/cpu/mcheck/mce_amd_64.c | |||
@@ -628,6 +628,7 @@ static void threshold_remove_bank(unsigned int cpu, int bank) | |||
628 | deallocate_threshold_block(cpu, bank); | 628 | deallocate_threshold_block(cpu, bank); |
629 | 629 | ||
630 | free_out: | 630 | free_out: |
631 | kobject_del(b->kobj); | ||
631 | kobject_put(b->kobj); | 632 | kobject_put(b->kobj); |
632 | kfree(b); | 633 | kfree(b); |
633 | per_cpu(threshold_banks, cpu)[bank] = NULL; | 634 | per_cpu(threshold_banks, cpu)[bank] = NULL; |
@@ -645,14 +646,11 @@ static void threshold_remove_device(unsigned int cpu) | |||
645 | } | 646 | } |
646 | 647 | ||
647 | /* get notified when a cpu comes on/off */ | 648 | /* get notified when a cpu comes on/off */ |
648 | static int __cpuinit threshold_cpu_callback(struct notifier_block *nfb, | 649 | static void __cpuinit amd_64_threshold_cpu_callback(unsigned long action, |
649 | unsigned long action, void *hcpu) | 650 | unsigned int cpu) |
650 | { | 651 | { |
651 | /* cpu was unsigned int to begin with */ | ||
652 | unsigned int cpu = (unsigned long)hcpu; | ||
653 | |||
654 | if (cpu >= NR_CPUS) | 652 | if (cpu >= NR_CPUS) |
655 | goto out; | 653 | return; |
656 | 654 | ||
657 | switch (action) { | 655 | switch (action) { |
658 | case CPU_ONLINE: | 656 | case CPU_ONLINE: |
@@ -666,14 +664,8 @@ static int __cpuinit threshold_cpu_callback(struct notifier_block *nfb, | |||
666 | default: | 664 | default: |
667 | break; | 665 | break; |
668 | } | 666 | } |
669 | out: | ||
670 | return NOTIFY_OK; | ||
671 | } | 667 | } |
672 | 668 | ||
673 | static struct notifier_block threshold_cpu_notifier __cpuinitdata = { | ||
674 | .notifier_call = threshold_cpu_callback, | ||
675 | }; | ||
676 | |||
677 | static __init int threshold_init_device(void) | 669 | static __init int threshold_init_device(void) |
678 | { | 670 | { |
679 | unsigned lcpu = 0; | 671 | unsigned lcpu = 0; |
@@ -684,7 +676,7 @@ static __init int threshold_init_device(void) | |||
684 | if (err) | 676 | if (err) |
685 | return err; | 677 | return err; |
686 | } | 678 | } |
687 | register_hotcpu_notifier(&threshold_cpu_notifier); | 679 | threshold_cpu_callback = amd_64_threshold_cpu_callback; |
688 | return 0; | 680 | return 0; |
689 | } | 681 | } |
690 | 682 | ||
diff --git a/arch/x86/kernel/cpu/mtrr/generic.c b/arch/x86/kernel/cpu/mtrr/generic.c index 509bd3d9eacd..cb7d3b6a80eb 100644 --- a/arch/x86/kernel/cpu/mtrr/generic.c +++ b/arch/x86/kernel/cpu/mtrr/generic.c | |||
@@ -379,6 +379,7 @@ static void generic_get_mtrr(unsigned int reg, unsigned long *base, | |||
379 | unsigned long *size, mtrr_type *type) | 379 | unsigned long *size, mtrr_type *type) |
380 | { | 380 | { |
381 | unsigned int mask_lo, mask_hi, base_lo, base_hi; | 381 | unsigned int mask_lo, mask_hi, base_lo, base_hi; |
382 | unsigned int tmp, hi; | ||
382 | 383 | ||
383 | rdmsr(MTRRphysMask_MSR(reg), mask_lo, mask_hi); | 384 | rdmsr(MTRRphysMask_MSR(reg), mask_lo, mask_hi); |
384 | if ((mask_lo & 0x800) == 0) { | 385 | if ((mask_lo & 0x800) == 0) { |
@@ -392,8 +393,23 @@ static void generic_get_mtrr(unsigned int reg, unsigned long *base, | |||
392 | rdmsr(MTRRphysBase_MSR(reg), base_lo, base_hi); | 393 | rdmsr(MTRRphysBase_MSR(reg), base_lo, base_hi); |
393 | 394 | ||
394 | /* Work out the shifted address mask. */ | 395 | /* Work out the shifted address mask. */ |
395 | mask_lo = size_or_mask | mask_hi << (32 - PAGE_SHIFT) | 396 | tmp = mask_hi << (32 - PAGE_SHIFT) | mask_lo >> PAGE_SHIFT; |
396 | | mask_lo >> PAGE_SHIFT; | 397 | mask_lo = size_or_mask | tmp; |
398 | /* Expand tmp with high bits to all 1s*/ | ||
399 | hi = fls(tmp); | ||
400 | if (hi > 0) { | ||
401 | tmp |= ~((1<<(hi - 1)) - 1); | ||
402 | |||
403 | if (tmp != mask_lo) { | ||
404 | static int once = 1; | ||
405 | |||
406 | if (once) { | ||
407 | printk(KERN_INFO "mtrr: your BIOS has set up an incorrect mask, fixing it up.\n"); | ||
408 | once = 0; | ||
409 | } | ||
410 | mask_lo = tmp; | ||
411 | } | ||
412 | } | ||
397 | 413 | ||
398 | /* This works correctly if size is a power of two, i.e. a | 414 | /* This works correctly if size is a power of two, i.e. a |
399 | contiguous range. */ | 415 | contiguous range. */ |
diff --git a/arch/x86/kernel/cpu/mtrr/main.c b/arch/x86/kernel/cpu/mtrr/main.c index 6f23969c8faf..b117d7f8a564 100644 --- a/arch/x86/kernel/cpu/mtrr/main.c +++ b/arch/x86/kernel/cpu/mtrr/main.c | |||
@@ -1496,11 +1496,8 @@ int __init mtrr_trim_uncached_memory(unsigned long end_pfn) | |||
1496 | 1496 | ||
1497 | /* kvm/qemu doesn't have mtrr set right, don't trim them all */ | 1497 | /* kvm/qemu doesn't have mtrr set right, don't trim them all */ |
1498 | if (!highest_pfn) { | 1498 | if (!highest_pfn) { |
1499 | if (!kvm_para_available()) { | 1499 | WARN(!kvm_para_available(), KERN_WARNING |
1500 | printk(KERN_WARNING | ||
1501 | "WARNING: strange, CPU MTRRs all blank?\n"); | 1500 | "WARNING: strange, CPU MTRRs all blank?\n"); |
1502 | WARN_ON(1); | ||
1503 | } | ||
1504 | return 0; | 1501 | return 0; |
1505 | } | 1502 | } |
1506 | 1503 | ||
diff --git a/arch/x86/kernel/genx2apic_uv_x.c b/arch/x86/kernel/genx2apic_uv_x.c index 2d7e307c7779..bfa837cb16be 100644 --- a/arch/x86/kernel/genx2apic_uv_x.c +++ b/arch/x86/kernel/genx2apic_uv_x.c | |||
@@ -293,7 +293,9 @@ static __init void uv_rtc_init(void) | |||
293 | sn_rtc_cycles_per_second = ticks_per_sec; | 293 | sn_rtc_cycles_per_second = ticks_per_sec; |
294 | } | 294 | } |
295 | 295 | ||
296 | static __init void uv_system_init(void) | 296 | static bool uv_system_inited; |
297 | |||
298 | void __init uv_system_init(void) | ||
297 | { | 299 | { |
298 | union uvh_si_addr_map_config_u m_n_config; | 300 | union uvh_si_addr_map_config_u m_n_config; |
299 | union uvh_node_id_u node_id; | 301 | union uvh_node_id_u node_id; |
@@ -383,6 +385,7 @@ static __init void uv_system_init(void) | |||
383 | map_mmr_high(max_pnode); | 385 | map_mmr_high(max_pnode); |
384 | map_config_high(max_pnode); | 386 | map_config_high(max_pnode); |
385 | map_mmioh_high(max_pnode); | 387 | map_mmioh_high(max_pnode); |
388 | uv_system_inited = true; | ||
386 | } | 389 | } |
387 | 390 | ||
388 | /* | 391 | /* |
@@ -391,8 +394,7 @@ static __init void uv_system_init(void) | |||
391 | */ | 394 | */ |
392 | void __cpuinit uv_cpu_init(void) | 395 | void __cpuinit uv_cpu_init(void) |
393 | { | 396 | { |
394 | if (!uv_node_to_blade) | 397 | BUG_ON(!uv_system_inited); |
395 | uv_system_init(); | ||
396 | 398 | ||
397 | uv_blade_info[uv_numa_blade_id()].nr_online_cpus++; | 399 | uv_blade_info[uv_numa_blade_id()].nr_online_cpus++; |
398 | 400 | ||
diff --git a/arch/x86/kernel/numaq_32.c b/arch/x86/kernel/numaq_32.c index b8c45610b20a..eecc8c18f010 100644 --- a/arch/x86/kernel/numaq_32.c +++ b/arch/x86/kernel/numaq_32.c | |||
@@ -73,7 +73,7 @@ static void __init smp_dump_qct(void) | |||
73 | } | 73 | } |
74 | 74 | ||
75 | 75 | ||
76 | void __init numaq_tsc_disable(void) | 76 | void __cpuinit numaq_tsc_disable(void) |
77 | { | 77 | { |
78 | if (!found_numaq) | 78 | if (!found_numaq) |
79 | return; | 79 | return; |
diff --git a/arch/x86/kernel/paravirt.c b/arch/x86/kernel/paravirt.c index 94da4d52d798..300da17e61cb 100644 --- a/arch/x86/kernel/paravirt.c +++ b/arch/x86/kernel/paravirt.c | |||
@@ -471,7 +471,7 @@ struct pv_lock_ops pv_lock_ops = { | |||
471 | .spin_unlock = __ticket_spin_unlock, | 471 | .spin_unlock = __ticket_spin_unlock, |
472 | #endif | 472 | #endif |
473 | }; | 473 | }; |
474 | EXPORT_SYMBOL_GPL(pv_lock_ops); | 474 | EXPORT_SYMBOL(pv_lock_ops); |
475 | 475 | ||
476 | EXPORT_SYMBOL_GPL(pv_time_ops); | 476 | EXPORT_SYMBOL_GPL(pv_time_ops); |
477 | EXPORT_SYMBOL (pv_cpu_ops); | 477 | EXPORT_SYMBOL (pv_cpu_ops); |
diff --git a/arch/x86/kernel/pci-calgary_64.c b/arch/x86/kernel/pci-calgary_64.c index 218d783ed7a8..dcdac6c826e9 100644 --- a/arch/x86/kernel/pci-calgary_64.c +++ b/arch/x86/kernel/pci-calgary_64.c | |||
@@ -343,9 +343,8 @@ static void iommu_free(struct iommu_table *tbl, dma_addr_t dma_addr, | |||
343 | /* were we called with bad_dma_address? */ | 343 | /* were we called with bad_dma_address? */ |
344 | badend = bad_dma_address + (EMERGENCY_PAGES * PAGE_SIZE); | 344 | badend = bad_dma_address + (EMERGENCY_PAGES * PAGE_SIZE); |
345 | if (unlikely((dma_addr >= bad_dma_address) && (dma_addr < badend))) { | 345 | if (unlikely((dma_addr >= bad_dma_address) && (dma_addr < badend))) { |
346 | printk(KERN_ERR "Calgary: driver tried unmapping bad DMA " | 346 | WARN(1, KERN_ERR "Calgary: driver tried unmapping bad DMA " |
347 | "address 0x%Lx\n", dma_addr); | 347 | "address 0x%Lx\n", dma_addr); |
348 | WARN_ON(1); | ||
349 | return; | 348 | return; |
350 | } | 349 | } |
351 | 350 | ||
@@ -1269,13 +1268,15 @@ static inline int __init determine_tce_table_size(u64 ram) | |||
1269 | static int __init build_detail_arrays(void) | 1268 | static int __init build_detail_arrays(void) |
1270 | { | 1269 | { |
1271 | unsigned long ptr; | 1270 | unsigned long ptr; |
1272 | int i, scal_detail_size, rio_detail_size; | 1271 | unsigned numnodes, i; |
1272 | int scal_detail_size, rio_detail_size; | ||
1273 | 1273 | ||
1274 | if (rio_table_hdr->num_scal_dev > MAX_NUMNODES){ | 1274 | numnodes = rio_table_hdr->num_scal_dev; |
1275 | if (numnodes > MAX_NUMNODES){ | ||
1275 | printk(KERN_WARNING | 1276 | printk(KERN_WARNING |
1276 | "Calgary: MAX_NUMNODES too low! Defined as %d, " | 1277 | "Calgary: MAX_NUMNODES too low! Defined as %d, " |
1277 | "but system has %d nodes.\n", | 1278 | "but system has %d nodes.\n", |
1278 | MAX_NUMNODES, rio_table_hdr->num_scal_dev); | 1279 | MAX_NUMNODES, numnodes); |
1279 | return -ENODEV; | 1280 | return -ENODEV; |
1280 | } | 1281 | } |
1281 | 1282 | ||
@@ -1296,8 +1297,7 @@ static int __init build_detail_arrays(void) | |||
1296 | } | 1297 | } |
1297 | 1298 | ||
1298 | ptr = ((unsigned long)rio_table_hdr) + 3; | 1299 | ptr = ((unsigned long)rio_table_hdr) + 3; |
1299 | for (i = 0; i < rio_table_hdr->num_scal_dev; | 1300 | for (i = 0; i < numnodes; i++, ptr += scal_detail_size) |
1300 | i++, ptr += scal_detail_size) | ||
1301 | scal_devs[i] = (struct scal_detail *)ptr; | 1301 | scal_devs[i] = (struct scal_detail *)ptr; |
1302 | 1302 | ||
1303 | for (i = 0; i < rio_table_hdr->num_rio_dev; | 1303 | for (i = 0; i < rio_table_hdr->num_rio_dev; |
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c index a4656adab53b..362d4e7f2d38 100644 --- a/arch/x86/kernel/setup.c +++ b/arch/x86/kernel/setup.c | |||
@@ -604,14 +604,6 @@ void __init setup_arch(char **cmdline_p) | |||
604 | early_cpu_init(); | 604 | early_cpu_init(); |
605 | early_ioremap_init(); | 605 | early_ioremap_init(); |
606 | 606 | ||
607 | #if defined(CONFIG_VMI) && defined(CONFIG_X86_32) | ||
608 | /* | ||
609 | * Must be before kernel pagetables are setup | ||
610 | * or fixmap area is touched. | ||
611 | */ | ||
612 | vmi_init(); | ||
613 | #endif | ||
614 | |||
615 | ROOT_DEV = old_decode_dev(boot_params.hdr.root_dev); | 607 | ROOT_DEV = old_decode_dev(boot_params.hdr.root_dev); |
616 | screen_info = boot_params.screen_info; | 608 | screen_info = boot_params.screen_info; |
617 | edid_info = boot_params.edid_info; | 609 | edid_info = boot_params.edid_info; |
@@ -678,6 +670,14 @@ void __init setup_arch(char **cmdline_p) | |||
678 | 670 | ||
679 | parse_early_param(); | 671 | parse_early_param(); |
680 | 672 | ||
673 | #if defined(CONFIG_VMI) && defined(CONFIG_X86_32) | ||
674 | /* | ||
675 | * Must be before kernel pagetables are setup | ||
676 | * or fixmap area is touched. | ||
677 | */ | ||
678 | vmi_init(); | ||
679 | #endif | ||
680 | |||
681 | /* after early param, so could get panic from serial */ | 681 | /* after early param, so could get panic from serial */ |
682 | reserve_early_setup_data(); | 682 | reserve_early_setup_data(); |
683 | 683 | ||
diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c index e139e617f422..7985c5b3f916 100644 --- a/arch/x86/kernel/smpboot.c +++ b/arch/x86/kernel/smpboot.c | |||
@@ -1221,6 +1221,9 @@ void __init native_smp_prepare_cpus(unsigned int max_cpus) | |||
1221 | printk(KERN_INFO "CPU%d: ", 0); | 1221 | printk(KERN_INFO "CPU%d: ", 0); |
1222 | print_cpu_info(&cpu_data(0)); | 1222 | print_cpu_info(&cpu_data(0)); |
1223 | setup_boot_clock(); | 1223 | setup_boot_clock(); |
1224 | |||
1225 | if (is_uv_system()) | ||
1226 | uv_system_init(); | ||
1224 | out: | 1227 | out: |
1225 | preempt_enable(); | 1228 | preempt_enable(); |
1226 | } | 1229 | } |
diff --git a/arch/x86/kernel/tlb_uv.c b/arch/x86/kernel/tlb_uv.c index d0fbb7712ab0..8b8c0d6640fa 100644 --- a/arch/x86/kernel/tlb_uv.c +++ b/arch/x86/kernel/tlb_uv.c | |||
@@ -17,6 +17,7 @@ | |||
17 | #include <asm/genapic.h> | 17 | #include <asm/genapic.h> |
18 | #include <asm/idle.h> | 18 | #include <asm/idle.h> |
19 | #include <asm/tsc.h> | 19 | #include <asm/tsc.h> |
20 | #include <asm/irq_vectors.h> | ||
20 | 21 | ||
21 | #include <mach_apic.h> | 22 | #include <mach_apic.h> |
22 | 23 | ||
@@ -783,7 +784,7 @@ static int __init uv_bau_init(void) | |||
783 | uv_init_blade(blade, node, cur_cpu); | 784 | uv_init_blade(blade, node, cur_cpu); |
784 | cur_cpu += uv_blade_nr_possible_cpus(blade); | 785 | cur_cpu += uv_blade_nr_possible_cpus(blade); |
785 | } | 786 | } |
786 | set_intr_gate(UV_BAU_MESSAGE, uv_bau_message_intr1); | 787 | alloc_intr_gate(UV_BAU_MESSAGE, uv_bau_message_intr1); |
787 | uv_enable_timeouts(); | 788 | uv_enable_timeouts(); |
788 | 789 | ||
789 | return 0; | 790 | return 0; |
diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c index 46af71676738..8e786b0d665a 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c | |||
@@ -314,7 +314,7 @@ static int time_cpufreq_notifier(struct notifier_block *nb, unsigned long val, | |||
314 | mark_tsc_unstable("cpufreq changes"); | 314 | mark_tsc_unstable("cpufreq changes"); |
315 | } | 315 | } |
316 | 316 | ||
317 | set_cyc2ns_scale(tsc_khz_ref, freq->cpu); | 317 | set_cyc2ns_scale(tsc_khz, freq->cpu); |
318 | 318 | ||
319 | return 0; | 319 | return 0; |
320 | } | 320 | } |
@@ -325,6 +325,10 @@ static struct notifier_block time_cpufreq_notifier_block = { | |||
325 | 325 | ||
326 | static int __init cpufreq_tsc(void) | 326 | static int __init cpufreq_tsc(void) |
327 | { | 327 | { |
328 | if (!cpu_has_tsc) | ||
329 | return 0; | ||
330 | if (boot_cpu_has(X86_FEATURE_CONSTANT_TSC)) | ||
331 | return 0; | ||
328 | cpufreq_register_notifier(&time_cpufreq_notifier_block, | 332 | cpufreq_register_notifier(&time_cpufreq_notifier_block, |
329 | CPUFREQ_TRANSITION_NOTIFIER); | 333 | CPUFREQ_TRANSITION_NOTIFIER); |
330 | return 0; | 334 | return 0; |
diff --git a/arch/x86/kernel/tsc_sync.c b/arch/x86/kernel/tsc_sync.c index 0577825cf89b..9ffb01c31c40 100644 --- a/arch/x86/kernel/tsc_sync.c +++ b/arch/x86/kernel/tsc_sync.c | |||
@@ -88,11 +88,9 @@ static __cpuinit void check_tsc_warp(void) | |||
88 | __raw_spin_unlock(&sync_lock); | 88 | __raw_spin_unlock(&sync_lock); |
89 | } | 89 | } |
90 | } | 90 | } |
91 | if (!(now-start)) { | 91 | WARN(!(now-start), |
92 | printk("Warning: zero tsc calibration delta: %Ld [max: %Ld]\n", | 92 | "Warning: zero tsc calibration delta: %Ld [max: %Ld]\n", |
93 | now-start, end-start); | 93 | now-start, end-start); |
94 | WARN_ON(1); | ||
95 | } | ||
96 | } | 94 | } |
97 | 95 | ||
98 | /* | 96 | /* |
diff --git a/arch/x86/kvm/paging_tmpl.h b/arch/x86/kvm/paging_tmpl.h index f72ac1fa35f0..4a814bff21f2 100644 --- a/arch/x86/kvm/paging_tmpl.h +++ b/arch/x86/kvm/paging_tmpl.h | |||
@@ -345,7 +345,7 @@ static u64 *FNAME(fetch)(struct kvm_vcpu *vcpu, gva_t addr, | |||
345 | shadow_addr = __pa(shadow_page->spt); | 345 | shadow_addr = __pa(shadow_page->spt); |
346 | shadow_pte = shadow_addr | PT_PRESENT_MASK | PT_ACCESSED_MASK | 346 | shadow_pte = shadow_addr | PT_PRESENT_MASK | PT_ACCESSED_MASK |
347 | | PT_WRITABLE_MASK | PT_USER_MASK; | 347 | | PT_WRITABLE_MASK | PT_USER_MASK; |
348 | *shadow_ent = shadow_pte; | 348 | set_shadow_pte(shadow_ent, shadow_pte); |
349 | } | 349 | } |
350 | 350 | ||
351 | mmu_set_spte(vcpu, shadow_ent, access, walker->pte_access & access, | 351 | mmu_set_spte(vcpu, shadow_ent, access, walker->pte_access & access, |
diff --git a/arch/x86/mach-rdc321x/platform.c b/arch/x86/mach-rdc321x/platform.c index a037041817c7..4f4e50c3ad3b 100644 --- a/arch/x86/mach-rdc321x/platform.c +++ b/arch/x86/mach-rdc321x/platform.c | |||
@@ -25,7 +25,6 @@ | |||
25 | #include <linux/list.h> | 25 | #include <linux/list.h> |
26 | #include <linux/device.h> | 26 | #include <linux/device.h> |
27 | #include <linux/platform_device.h> | 27 | #include <linux/platform_device.h> |
28 | #include <linux/version.h> | ||
29 | #include <linux/leds.h> | 28 | #include <linux/leds.h> |
30 | 29 | ||
31 | #include <asm/gpio.h> | 30 | #include <asm/gpio.h> |
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c index a87ea0e4b3dc..d3746efb060d 100644 --- a/arch/x86/mm/init_64.c +++ b/arch/x86/mm/init_64.c | |||
@@ -241,7 +241,7 @@ static unsigned long __initdata table_start; | |||
241 | static unsigned long __meminitdata table_end; | 241 | static unsigned long __meminitdata table_end; |
242 | static unsigned long __meminitdata table_top; | 242 | static unsigned long __meminitdata table_top; |
243 | 243 | ||
244 | static __meminit void *alloc_low_page(unsigned long *phys) | 244 | static __ref void *alloc_low_page(unsigned long *phys) |
245 | { | 245 | { |
246 | unsigned long pfn = table_end++; | 246 | unsigned long pfn = table_end++; |
247 | void *adr; | 247 | void *adr; |
@@ -262,7 +262,7 @@ static __meminit void *alloc_low_page(unsigned long *phys) | |||
262 | return adr; | 262 | return adr; |
263 | } | 263 | } |
264 | 264 | ||
265 | static __meminit void unmap_low_page(void *adr) | 265 | static __ref void unmap_low_page(void *adr) |
266 | { | 266 | { |
267 | if (after_bootmem) | 267 | if (after_bootmem) |
268 | return; | 268 | return; |
@@ -336,9 +336,12 @@ phys_pmd_init(pmd_t *pmd_page, unsigned long address, unsigned long end, | |||
336 | } | 336 | } |
337 | 337 | ||
338 | if (pmd_val(*pmd)) { | 338 | if (pmd_val(*pmd)) { |
339 | if (!pmd_large(*pmd)) | 339 | if (!pmd_large(*pmd)) { |
340 | spin_lock(&init_mm.page_table_lock); | ||
340 | last_map_addr = phys_pte_update(pmd, address, | 341 | last_map_addr = phys_pte_update(pmd, address, |
341 | end); | 342 | end); |
343 | spin_unlock(&init_mm.page_table_lock); | ||
344 | } | ||
342 | /* Count entries we're using from level2_ident_pgt */ | 345 | /* Count entries we're using from level2_ident_pgt */ |
343 | if (start == 0) | 346 | if (start == 0) |
344 | pages++; | 347 | pages++; |
@@ -347,8 +350,10 @@ phys_pmd_init(pmd_t *pmd_page, unsigned long address, unsigned long end, | |||
347 | 350 | ||
348 | if (page_size_mask & (1<<PG_LEVEL_2M)) { | 351 | if (page_size_mask & (1<<PG_LEVEL_2M)) { |
349 | pages++; | 352 | pages++; |
353 | spin_lock(&init_mm.page_table_lock); | ||
350 | set_pte((pte_t *)pmd, | 354 | set_pte((pte_t *)pmd, |
351 | pfn_pte(address >> PAGE_SHIFT, PAGE_KERNEL_LARGE)); | 355 | pfn_pte(address >> PAGE_SHIFT, PAGE_KERNEL_LARGE)); |
356 | spin_unlock(&init_mm.page_table_lock); | ||
352 | last_map_addr = (address & PMD_MASK) + PMD_SIZE; | 357 | last_map_addr = (address & PMD_MASK) + PMD_SIZE; |
353 | continue; | 358 | continue; |
354 | } | 359 | } |
@@ -357,7 +362,9 @@ phys_pmd_init(pmd_t *pmd_page, unsigned long address, unsigned long end, | |||
357 | last_map_addr = phys_pte_init(pte, address, end); | 362 | last_map_addr = phys_pte_init(pte, address, end); |
358 | unmap_low_page(pte); | 363 | unmap_low_page(pte); |
359 | 364 | ||
365 | spin_lock(&init_mm.page_table_lock); | ||
360 | pmd_populate_kernel(&init_mm, pmd, __va(pte_phys)); | 366 | pmd_populate_kernel(&init_mm, pmd, __va(pte_phys)); |
367 | spin_unlock(&init_mm.page_table_lock); | ||
361 | } | 368 | } |
362 | update_page_count(PG_LEVEL_2M, pages); | 369 | update_page_count(PG_LEVEL_2M, pages); |
363 | return last_map_addr; | 370 | return last_map_addr; |
@@ -370,9 +377,7 @@ phys_pmd_update(pud_t *pud, unsigned long address, unsigned long end, | |||
370 | pmd_t *pmd = pmd_offset(pud, 0); | 377 | pmd_t *pmd = pmd_offset(pud, 0); |
371 | unsigned long last_map_addr; | 378 | unsigned long last_map_addr; |
372 | 379 | ||
373 | spin_lock(&init_mm.page_table_lock); | ||
374 | last_map_addr = phys_pmd_init(pmd, address, end, page_size_mask); | 380 | last_map_addr = phys_pmd_init(pmd, address, end, page_size_mask); |
375 | spin_unlock(&init_mm.page_table_lock); | ||
376 | __flush_tlb_all(); | 381 | __flush_tlb_all(); |
377 | return last_map_addr; | 382 | return last_map_addr; |
378 | } | 383 | } |
@@ -408,20 +413,21 @@ phys_pud_init(pud_t *pud_page, unsigned long addr, unsigned long end, | |||
408 | 413 | ||
409 | if (page_size_mask & (1<<PG_LEVEL_1G)) { | 414 | if (page_size_mask & (1<<PG_LEVEL_1G)) { |
410 | pages++; | 415 | pages++; |
416 | spin_lock(&init_mm.page_table_lock); | ||
411 | set_pte((pte_t *)pud, | 417 | set_pte((pte_t *)pud, |
412 | pfn_pte(addr >> PAGE_SHIFT, PAGE_KERNEL_LARGE)); | 418 | pfn_pte(addr >> PAGE_SHIFT, PAGE_KERNEL_LARGE)); |
419 | spin_unlock(&init_mm.page_table_lock); | ||
413 | last_map_addr = (addr & PUD_MASK) + PUD_SIZE; | 420 | last_map_addr = (addr & PUD_MASK) + PUD_SIZE; |
414 | continue; | 421 | continue; |
415 | } | 422 | } |
416 | 423 | ||
417 | pmd = alloc_low_page(&pmd_phys); | 424 | pmd = alloc_low_page(&pmd_phys); |
418 | |||
419 | spin_lock(&init_mm.page_table_lock); | ||
420 | last_map_addr = phys_pmd_init(pmd, addr, end, page_size_mask); | 425 | last_map_addr = phys_pmd_init(pmd, addr, end, page_size_mask); |
421 | unmap_low_page(pmd); | 426 | unmap_low_page(pmd); |
427 | |||
428 | spin_lock(&init_mm.page_table_lock); | ||
422 | pud_populate(&init_mm, pud, __va(pmd_phys)); | 429 | pud_populate(&init_mm, pud, __va(pmd_phys)); |
423 | spin_unlock(&init_mm.page_table_lock); | 430 | spin_unlock(&init_mm.page_table_lock); |
424 | |||
425 | } | 431 | } |
426 | __flush_tlb_all(); | 432 | __flush_tlb_all(); |
427 | update_page_count(PG_LEVEL_1G, pages); | 433 | update_page_count(PG_LEVEL_1G, pages); |
@@ -513,16 +519,14 @@ static unsigned long __init kernel_physical_mapping_init(unsigned long start, | |||
513 | continue; | 519 | continue; |
514 | } | 520 | } |
515 | 521 | ||
516 | if (after_bootmem) | 522 | pud = alloc_low_page(&pud_phys); |
517 | pud = pud_offset(pgd, start & PGDIR_MASK); | ||
518 | else | ||
519 | pud = alloc_low_page(&pud_phys); | ||
520 | |||
521 | last_map_addr = phys_pud_init(pud, __pa(start), __pa(next), | 523 | last_map_addr = phys_pud_init(pud, __pa(start), __pa(next), |
522 | page_size_mask); | 524 | page_size_mask); |
523 | unmap_low_page(pud); | 525 | unmap_low_page(pud); |
524 | pgd_populate(&init_mm, pgd_offset_k(start), | 526 | |
525 | __va(pud_phys)); | 527 | spin_lock(&init_mm.page_table_lock); |
528 | pgd_populate(&init_mm, pgd, __va(pud_phys)); | ||
529 | spin_unlock(&init_mm.page_table_lock); | ||
526 | } | 530 | } |
527 | 531 | ||
528 | return last_map_addr; | 532 | return last_map_addr; |
diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c index 6ba6f889c79d..d4b6e6a29ae3 100644 --- a/arch/x86/mm/ioremap.c +++ b/arch/x86/mm/ioremap.c | |||
@@ -553,13 +553,11 @@ static int __init check_early_ioremap_leak(void) | |||
553 | { | 553 | { |
554 | if (!early_ioremap_nested) | 554 | if (!early_ioremap_nested) |
555 | return 0; | 555 | return 0; |
556 | 556 | WARN(1, KERN_WARNING | |
557 | printk(KERN_WARNING | ||
558 | "Debug warning: early ioremap leak of %d areas detected.\n", | 557 | "Debug warning: early ioremap leak of %d areas detected.\n", |
559 | early_ioremap_nested); | 558 | early_ioremap_nested); |
560 | printk(KERN_WARNING | 559 | printk(KERN_WARNING |
561 | "please boot with early_ioremap_debug and report the dmesg.\n"); | 560 | "please boot with early_ioremap_debug and report the dmesg.\n"); |
562 | WARN_ON(1); | ||
563 | 561 | ||
564 | return 1; | 562 | return 1; |
565 | } | 563 | } |
diff --git a/arch/x86/mm/mmio-mod.c b/arch/x86/mm/mmio-mod.c index e7397e108beb..635b50e85581 100644 --- a/arch/x86/mm/mmio-mod.c +++ b/arch/x86/mm/mmio-mod.c | |||
@@ -430,7 +430,9 @@ static void enter_uniprocessor(void) | |||
430 | "may miss events.\n"); | 430 | "may miss events.\n"); |
431 | } | 431 | } |
432 | 432 | ||
433 | static void leave_uniprocessor(void) | 433 | /* __ref because leave_uniprocessor calls cpu_up which is __cpuinit, |
434 | but this whole function is ifdefed CONFIG_HOTPLUG_CPU */ | ||
435 | static void __ref leave_uniprocessor(void) | ||
434 | { | 436 | { |
435 | int cpu; | 437 | int cpu; |
436 | int err; | 438 | int err; |
diff --git a/arch/x86/mm/pageattr.c b/arch/x86/mm/pageattr.c index f5f5154ea11e..43e2f8483e4f 100644 --- a/arch/x86/mm/pageattr.c +++ b/arch/x86/mm/pageattr.c | |||
@@ -849,7 +849,7 @@ int set_memory_uc(unsigned long addr, int numpages) | |||
849 | /* | 849 | /* |
850 | * for now UC MINUS. see comments in ioremap_nocache() | 850 | * for now UC MINUS. see comments in ioremap_nocache() |
851 | */ | 851 | */ |
852 | if (reserve_memtype(addr, addr + numpages * PAGE_SIZE, | 852 | if (reserve_memtype(__pa(addr), __pa(addr) + numpages * PAGE_SIZE, |
853 | _PAGE_CACHE_UC_MINUS, NULL)) | 853 | _PAGE_CACHE_UC_MINUS, NULL)) |
854 | return -EINVAL; | 854 | return -EINVAL; |
855 | 855 | ||
@@ -868,7 +868,7 @@ int set_memory_wc(unsigned long addr, int numpages) | |||
868 | if (!pat_enabled) | 868 | if (!pat_enabled) |
869 | return set_memory_uc(addr, numpages); | 869 | return set_memory_uc(addr, numpages); |
870 | 870 | ||
871 | if (reserve_memtype(addr, addr + numpages * PAGE_SIZE, | 871 | if (reserve_memtype(__pa(addr), __pa(addr) + numpages * PAGE_SIZE, |
872 | _PAGE_CACHE_WC, NULL)) | 872 | _PAGE_CACHE_WC, NULL)) |
873 | return -EINVAL; | 873 | return -EINVAL; |
874 | 874 | ||
@@ -884,7 +884,7 @@ int _set_memory_wb(unsigned long addr, int numpages) | |||
884 | 884 | ||
885 | int set_memory_wb(unsigned long addr, int numpages) | 885 | int set_memory_wb(unsigned long addr, int numpages) |
886 | { | 886 | { |
887 | free_memtype(addr, addr + numpages * PAGE_SIZE); | 887 | free_memtype(__pa(addr), __pa(addr) + numpages * PAGE_SIZE); |
888 | 888 | ||
889 | return _set_memory_wb(addr, numpages); | 889 | return _set_memory_wb(addr, numpages); |
890 | } | 890 | } |
diff --git a/arch/x86/mm/pat.c b/arch/x86/mm/pat.c index 2fe30916d4b6..2a50e0fa64a5 100644 --- a/arch/x86/mm/pat.c +++ b/arch/x86/mm/pat.c | |||
@@ -207,6 +207,9 @@ static int chk_conflict(struct memtype *new, struct memtype *entry, | |||
207 | return -EBUSY; | 207 | return -EBUSY; |
208 | } | 208 | } |
209 | 209 | ||
210 | static struct memtype *cached_entry; | ||
211 | static u64 cached_start; | ||
212 | |||
210 | /* | 213 | /* |
211 | * req_type typically has one of the: | 214 | * req_type typically has one of the: |
212 | * - _PAGE_CACHE_WB | 215 | * - _PAGE_CACHE_WB |
@@ -280,11 +283,17 @@ int reserve_memtype(u64 start, u64 end, unsigned long req_type, | |||
280 | 283 | ||
281 | spin_lock(&memtype_lock); | 284 | spin_lock(&memtype_lock); |
282 | 285 | ||
286 | if (cached_entry && start >= cached_start) | ||
287 | entry = cached_entry; | ||
288 | else | ||
289 | entry = list_entry(&memtype_list, struct memtype, nd); | ||
290 | |||
283 | /* Search for existing mapping that overlaps the current range */ | 291 | /* Search for existing mapping that overlaps the current range */ |
284 | where = NULL; | 292 | where = NULL; |
285 | list_for_each_entry(entry, &memtype_list, nd) { | 293 | list_for_each_entry_continue(entry, &memtype_list, nd) { |
286 | if (end <= entry->start) { | 294 | if (end <= entry->start) { |
287 | where = entry->nd.prev; | 295 | where = entry->nd.prev; |
296 | cached_entry = list_entry(where, struct memtype, nd); | ||
288 | break; | 297 | break; |
289 | } else if (start <= entry->start) { /* end > entry->start */ | 298 | } else if (start <= entry->start) { /* end > entry->start */ |
290 | err = chk_conflict(new, entry, new_type); | 299 | err = chk_conflict(new, entry, new_type); |
@@ -292,6 +301,8 @@ int reserve_memtype(u64 start, u64 end, unsigned long req_type, | |||
292 | dprintk("Overlap at 0x%Lx-0x%Lx\n", | 301 | dprintk("Overlap at 0x%Lx-0x%Lx\n", |
293 | entry->start, entry->end); | 302 | entry->start, entry->end); |
294 | where = entry->nd.prev; | 303 | where = entry->nd.prev; |
304 | cached_entry = list_entry(where, | ||
305 | struct memtype, nd); | ||
295 | } | 306 | } |
296 | break; | 307 | break; |
297 | } else if (start < entry->end) { /* start > entry->start */ | 308 | } else if (start < entry->end) { /* start > entry->start */ |
@@ -299,7 +310,20 @@ int reserve_memtype(u64 start, u64 end, unsigned long req_type, | |||
299 | if (!err) { | 310 | if (!err) { |
300 | dprintk("Overlap at 0x%Lx-0x%Lx\n", | 311 | dprintk("Overlap at 0x%Lx-0x%Lx\n", |
301 | entry->start, entry->end); | 312 | entry->start, entry->end); |
302 | where = &entry->nd; | 313 | cached_entry = list_entry(entry->nd.prev, |
314 | struct memtype, nd); | ||
315 | |||
316 | /* | ||
317 | * Move to right position in the linked | ||
318 | * list to add this new entry | ||
319 | */ | ||
320 | list_for_each_entry_continue(entry, | ||
321 | &memtype_list, nd) { | ||
322 | if (start <= entry->start) { | ||
323 | where = entry->nd.prev; | ||
324 | break; | ||
325 | } | ||
326 | } | ||
303 | } | 327 | } |
304 | break; | 328 | break; |
305 | } | 329 | } |
@@ -314,6 +338,8 @@ int reserve_memtype(u64 start, u64 end, unsigned long req_type, | |||
314 | return err; | 338 | return err; |
315 | } | 339 | } |
316 | 340 | ||
341 | cached_start = start; | ||
342 | |||
317 | if (where) | 343 | if (where) |
318 | list_add(&new->nd, where); | 344 | list_add(&new->nd, where); |
319 | else | 345 | else |
@@ -343,6 +369,9 @@ int free_memtype(u64 start, u64 end) | |||
343 | spin_lock(&memtype_lock); | 369 | spin_lock(&memtype_lock); |
344 | list_for_each_entry(entry, &memtype_list, nd) { | 370 | list_for_each_entry(entry, &memtype_list, nd) { |
345 | if (entry->start == start && entry->end == end) { | 371 | if (entry->start == start && entry->end == end) { |
372 | if (cached_entry == entry || cached_start == start) | ||
373 | cached_entry = NULL; | ||
374 | |||
346 | list_del(&entry->nd); | 375 | list_del(&entry->nd); |
347 | kfree(entry); | 376 | kfree(entry); |
348 | err = 0; | 377 | err = 0; |
@@ -361,14 +390,6 @@ int free_memtype(u64 start, u64 end) | |||
361 | } | 390 | } |
362 | 391 | ||
363 | 392 | ||
364 | /* | ||
365 | * /dev/mem mmap interface. The memtype used for mapping varies: | ||
366 | * - Use UC for mappings with O_SYNC flag | ||
367 | * - Without O_SYNC flag, if there is any conflict in reserve_memtype, | ||
368 | * inherit the memtype from existing mapping. | ||
369 | * - Else use UC_MINUS memtype (for backward compatibility with existing | ||
370 | * X drivers. | ||
371 | */ | ||
372 | pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn, | 393 | pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn, |
373 | unsigned long size, pgprot_t vma_prot) | 394 | unsigned long size, pgprot_t vma_prot) |
374 | { | 395 | { |
@@ -406,14 +427,14 @@ int phys_mem_access_prot_allowed(struct file *file, unsigned long pfn, | |||
406 | unsigned long size, pgprot_t *vma_prot) | 427 | unsigned long size, pgprot_t *vma_prot) |
407 | { | 428 | { |
408 | u64 offset = ((u64) pfn) << PAGE_SHIFT; | 429 | u64 offset = ((u64) pfn) << PAGE_SHIFT; |
409 | unsigned long flags = _PAGE_CACHE_UC_MINUS; | 430 | unsigned long flags = -1; |
410 | int retval; | 431 | int retval; |
411 | 432 | ||
412 | if (!range_is_allowed(pfn, size)) | 433 | if (!range_is_allowed(pfn, size)) |
413 | return 0; | 434 | return 0; |
414 | 435 | ||
415 | if (file->f_flags & O_SYNC) { | 436 | if (file->f_flags & O_SYNC) { |
416 | flags = _PAGE_CACHE_UC; | 437 | flags = _PAGE_CACHE_UC_MINUS; |
417 | } | 438 | } |
418 | 439 | ||
419 | #ifdef CONFIG_X86_32 | 440 | #ifdef CONFIG_X86_32 |
@@ -436,13 +457,14 @@ int phys_mem_access_prot_allowed(struct file *file, unsigned long pfn, | |||
436 | #endif | 457 | #endif |
437 | 458 | ||
438 | /* | 459 | /* |
439 | * With O_SYNC, we can only take UC mapping. Fail if we cannot. | 460 | * With O_SYNC, we can only take UC_MINUS mapping. Fail if we cannot. |
461 | * | ||
440 | * Without O_SYNC, we want to get | 462 | * Without O_SYNC, we want to get |
441 | * - WB for WB-able memory and no other conflicting mappings | 463 | * - WB for WB-able memory and no other conflicting mappings |
442 | * - UC_MINUS for non-WB-able memory with no other conflicting mappings | 464 | * - UC_MINUS for non-WB-able memory with no other conflicting mappings |
443 | * - Inherit from confliting mappings otherwise | 465 | * - Inherit from confliting mappings otherwise |
444 | */ | 466 | */ |
445 | if (flags != _PAGE_CACHE_UC_MINUS) { | 467 | if (flags != -1) { |
446 | retval = reserve_memtype(offset, offset + size, flags, NULL); | 468 | retval = reserve_memtype(offset, offset + size, flags, NULL); |
447 | } else { | 469 | } else { |
448 | retval = reserve_memtype(offset, offset + size, -1, &flags); | 470 | retval = reserve_memtype(offset, offset + size, -1, &flags); |
diff --git a/arch/x86/oprofile/nmi_int.c b/arch/x86/oprofile/nmi_int.c index 3f90289410e6..0227694f7dab 100644 --- a/arch/x86/oprofile/nmi_int.c +++ b/arch/x86/oprofile/nmi_int.c | |||
@@ -15,6 +15,7 @@ | |||
15 | #include <linux/slab.h> | 15 | #include <linux/slab.h> |
16 | #include <linux/moduleparam.h> | 16 | #include <linux/moduleparam.h> |
17 | #include <linux/kdebug.h> | 17 | #include <linux/kdebug.h> |
18 | #include <linux/cpu.h> | ||
18 | #include <asm/nmi.h> | 19 | #include <asm/nmi.h> |
19 | #include <asm/msr.h> | 20 | #include <asm/msr.h> |
20 | #include <asm/apic.h> | 21 | #include <asm/apic.h> |
@@ -28,23 +29,48 @@ static DEFINE_PER_CPU(unsigned long, saved_lvtpc); | |||
28 | 29 | ||
29 | static int nmi_start(void); | 30 | static int nmi_start(void); |
30 | static void nmi_stop(void); | 31 | static void nmi_stop(void); |
32 | static void nmi_cpu_start(void *dummy); | ||
33 | static void nmi_cpu_stop(void *dummy); | ||
31 | 34 | ||
32 | /* 0 == registered but off, 1 == registered and on */ | 35 | /* 0 == registered but off, 1 == registered and on */ |
33 | static int nmi_enabled = 0; | 36 | static int nmi_enabled = 0; |
34 | 37 | ||
38 | #ifdef CONFIG_SMP | ||
39 | static int oprofile_cpu_notifier(struct notifier_block *b, unsigned long action, | ||
40 | void *data) | ||
41 | { | ||
42 | int cpu = (unsigned long)data; | ||
43 | switch (action) { | ||
44 | case CPU_DOWN_FAILED: | ||
45 | case CPU_ONLINE: | ||
46 | smp_call_function_single(cpu, nmi_cpu_start, NULL, 0); | ||
47 | break; | ||
48 | case CPU_DOWN_PREPARE: | ||
49 | smp_call_function_single(cpu, nmi_cpu_stop, NULL, 1); | ||
50 | break; | ||
51 | } | ||
52 | return NOTIFY_DONE; | ||
53 | } | ||
54 | |||
55 | static struct notifier_block oprofile_cpu_nb = { | ||
56 | .notifier_call = oprofile_cpu_notifier | ||
57 | }; | ||
58 | #endif | ||
59 | |||
35 | #ifdef CONFIG_PM | 60 | #ifdef CONFIG_PM |
36 | 61 | ||
37 | static int nmi_suspend(struct sys_device *dev, pm_message_t state) | 62 | static int nmi_suspend(struct sys_device *dev, pm_message_t state) |
38 | { | 63 | { |
64 | /* Only one CPU left, just stop that one */ | ||
39 | if (nmi_enabled == 1) | 65 | if (nmi_enabled == 1) |
40 | nmi_stop(); | 66 | nmi_cpu_stop(NULL); |
41 | return 0; | 67 | return 0; |
42 | } | 68 | } |
43 | 69 | ||
44 | static int nmi_resume(struct sys_device *dev) | 70 | static int nmi_resume(struct sys_device *dev) |
45 | { | 71 | { |
46 | if (nmi_enabled == 1) | 72 | if (nmi_enabled == 1) |
47 | nmi_start(); | 73 | nmi_cpu_start(NULL); |
48 | return 0; | 74 | return 0; |
49 | } | 75 | } |
50 | 76 | ||
@@ -463,6 +489,9 @@ int __init op_nmi_init(struct oprofile_operations *ops) | |||
463 | } | 489 | } |
464 | 490 | ||
465 | init_sysfs(); | 491 | init_sysfs(); |
492 | #ifdef CONFIG_SMP | ||
493 | register_cpu_notifier(&oprofile_cpu_nb); | ||
494 | #endif | ||
466 | using_nmi = 1; | 495 | using_nmi = 1; |
467 | ops->create_files = nmi_create_files; | 496 | ops->create_files = nmi_create_files; |
468 | ops->setup = nmi_setup; | 497 | ops->setup = nmi_setup; |
@@ -476,6 +505,10 @@ int __init op_nmi_init(struct oprofile_operations *ops) | |||
476 | 505 | ||
477 | void op_nmi_exit(void) | 506 | void op_nmi_exit(void) |
478 | { | 507 | { |
479 | if (using_nmi) | 508 | if (using_nmi) { |
480 | exit_sysfs(); | 509 | exit_sysfs(); |
510 | #ifdef CONFIG_SMP | ||
511 | unregister_cpu_notifier(&oprofile_cpu_nb); | ||
512 | #endif | ||
513 | } | ||
481 | } | 514 | } |
diff --git a/arch/x86/pci/amd_bus.c b/arch/x86/pci/amd_bus.c index dbf532369711..6a0fca78c362 100644 --- a/arch/x86/pci/amd_bus.c +++ b/arch/x86/pci/amd_bus.c | |||
@@ -1,6 +1,7 @@ | |||
1 | #include <linux/init.h> | 1 | #include <linux/init.h> |
2 | #include <linux/pci.h> | 2 | #include <linux/pci.h> |
3 | #include <linux/topology.h> | 3 | #include <linux/topology.h> |
4 | #include <linux/cpu.h> | ||
4 | #include "pci.h" | 5 | #include "pci.h" |
5 | 6 | ||
6 | #ifdef CONFIG_X86_64 | 7 | #ifdef CONFIG_X86_64 |
@@ -555,15 +556,17 @@ static int __init early_fill_mp_bus_info(void) | |||
555 | return 0; | 556 | return 0; |
556 | } | 557 | } |
557 | 558 | ||
558 | postcore_initcall(early_fill_mp_bus_info); | 559 | #else /* !CONFIG_X86_64 */ |
559 | 560 | ||
560 | #endif | 561 | static int __init early_fill_mp_bus_info(void) { return 0; } |
562 | |||
563 | #endif /* !CONFIG_X86_64 */ | ||
561 | 564 | ||
562 | /* common 32/64 bit code */ | 565 | /* common 32/64 bit code */ |
563 | 566 | ||
564 | #define ENABLE_CF8_EXT_CFG (1ULL << 46) | 567 | #define ENABLE_CF8_EXT_CFG (1ULL << 46) |
565 | 568 | ||
566 | static void enable_pci_io_ecs_per_cpu(void *unused) | 569 | static void enable_pci_io_ecs(void *unused) |
567 | { | 570 | { |
568 | u64 reg; | 571 | u64 reg; |
569 | rdmsrl(MSR_AMD64_NB_CFG, reg); | 572 | rdmsrl(MSR_AMD64_NB_CFG, reg); |
@@ -573,14 +576,51 @@ static void enable_pci_io_ecs_per_cpu(void *unused) | |||
573 | } | 576 | } |
574 | } | 577 | } |
575 | 578 | ||
576 | static int __init enable_pci_io_ecs(void) | 579 | static int __cpuinit amd_cpu_notify(struct notifier_block *self, |
580 | unsigned long action, void *hcpu) | ||
577 | { | 581 | { |
582 | int cpu = (long)hcpu; | ||
583 | switch(action) { | ||
584 | case CPU_ONLINE: | ||
585 | case CPU_ONLINE_FROZEN: | ||
586 | smp_call_function_single(cpu, enable_pci_io_ecs, NULL, 0); | ||
587 | break; | ||
588 | default: | ||
589 | break; | ||
590 | } | ||
591 | return NOTIFY_OK; | ||
592 | } | ||
593 | |||
594 | static struct notifier_block __cpuinitdata amd_cpu_notifier = { | ||
595 | .notifier_call = amd_cpu_notify, | ||
596 | }; | ||
597 | |||
598 | static int __init pci_io_ecs_init(void) | ||
599 | { | ||
600 | int cpu; | ||
601 | |||
578 | /* assume all cpus from fam10h have IO ECS */ | 602 | /* assume all cpus from fam10h have IO ECS */ |
579 | if (boot_cpu_data.x86 < 0x10) | 603 | if (boot_cpu_data.x86 < 0x10) |
580 | return 0; | 604 | return 0; |
581 | on_each_cpu(enable_pci_io_ecs_per_cpu, NULL, 1); | 605 | |
606 | register_cpu_notifier(&amd_cpu_notifier); | ||
607 | for_each_online_cpu(cpu) | ||
608 | amd_cpu_notify(&amd_cpu_notifier, (unsigned long)CPU_ONLINE, | ||
609 | (void *)(long)cpu); | ||
582 | pci_probe |= PCI_HAS_IO_ECS; | 610 | pci_probe |= PCI_HAS_IO_ECS; |
611 | |||
612 | return 0; | ||
613 | } | ||
614 | |||
615 | static int __init amd_postcore_init(void) | ||
616 | { | ||
617 | if (boot_cpu_data.x86_vendor != X86_VENDOR_AMD) | ||
618 | return 0; | ||
619 | |||
620 | early_fill_mp_bus_info(); | ||
621 | pci_io_ecs_init(); | ||
622 | |||
583 | return 0; | 623 | return 0; |
584 | } | 624 | } |
585 | 625 | ||
586 | postcore_initcall(enable_pci_io_ecs); | 626 | postcore_initcall(amd_postcore_init); |
diff --git a/arch/x86/pci/i386.c b/arch/x86/pci/i386.c index 5807d1bc73f7..d765da913842 100644 --- a/arch/x86/pci/i386.c +++ b/arch/x86/pci/i386.c | |||
@@ -31,8 +31,11 @@ | |||
31 | #include <linux/ioport.h> | 31 | #include <linux/ioport.h> |
32 | #include <linux/errno.h> | 32 | #include <linux/errno.h> |
33 | #include <linux/bootmem.h> | 33 | #include <linux/bootmem.h> |
34 | #include <linux/acpi.h> | ||
34 | 35 | ||
35 | #include <asm/pat.h> | 36 | #include <asm/pat.h> |
37 | #include <asm/hpet.h> | ||
38 | #include <asm/io_apic.h> | ||
36 | 39 | ||
37 | #include "pci.h" | 40 | #include "pci.h" |
38 | 41 | ||
@@ -77,6 +80,77 @@ pcibios_align_resource(void *data, struct resource *res, | |||
77 | } | 80 | } |
78 | EXPORT_SYMBOL(pcibios_align_resource); | 81 | EXPORT_SYMBOL(pcibios_align_resource); |
79 | 82 | ||
83 | static int check_res_with_valid(struct pci_dev *dev, struct resource *res) | ||
84 | { | ||
85 | unsigned long base; | ||
86 | unsigned long size; | ||
87 | int i; | ||
88 | |||
89 | base = res->start; | ||
90 | size = (res->start == 0 && res->end == res->start) ? 0 : | ||
91 | (res->end - res->start + 1); | ||
92 | |||
93 | if (!base || !size) | ||
94 | return 0; | ||
95 | |||
96 | #ifdef CONFIG_HPET_TIMER | ||
97 | /* for hpet */ | ||
98 | if (base == hpet_address && (res->flags & IORESOURCE_MEM)) { | ||
99 | dev_info(&dev->dev, "BAR has HPET at %08lx-%08lx\n", | ||
100 | base, base + size - 1); | ||
101 | return 1; | ||
102 | } | ||
103 | #endif | ||
104 | |||
105 | #ifdef CONFIG_X86_IO_APIC | ||
106 | for (i = 0; i < nr_ioapics; i++) { | ||
107 | unsigned long ioapic_phys = mp_ioapics[i].mp_apicaddr; | ||
108 | |||
109 | if (base == ioapic_phys && (res->flags & IORESOURCE_MEM)) { | ||
110 | dev_info(&dev->dev, "BAR has ioapic at %08lx-%08lx\n", | ||
111 | base, base + size - 1); | ||
112 | return 1; | ||
113 | } | ||
114 | } | ||
115 | #endif | ||
116 | |||
117 | #ifdef CONFIG_PCI_MMCONFIG | ||
118 | for (i = 0; i < pci_mmcfg_config_num; i++) { | ||
119 | unsigned long addr; | ||
120 | |||
121 | addr = pci_mmcfg_config[i].address; | ||
122 | if (base == addr && (res->flags & IORESOURCE_MEM)) { | ||
123 | dev_info(&dev->dev, "BAR has MMCONFIG at %08lx-%08lx\n", | ||
124 | base, base + size - 1); | ||
125 | return 1; | ||
126 | } | ||
127 | } | ||
128 | #endif | ||
129 | |||
130 | return 0; | ||
131 | } | ||
132 | |||
133 | static int check_platform(struct pci_dev *dev, struct resource *res) | ||
134 | { | ||
135 | struct resource *root = NULL; | ||
136 | |||
137 | /* | ||
138 | * forcibly insert it into the | ||
139 | * resource tree | ||
140 | */ | ||
141 | if (res->flags & IORESOURCE_MEM) | ||
142 | root = &iomem_resource; | ||
143 | else if (res->flags & IORESOURCE_IO) | ||
144 | root = &ioport_resource; | ||
145 | |||
146 | if (root && check_res_with_valid(dev, res)) { | ||
147 | insert_resource(root, res); | ||
148 | |||
149 | return 1; | ||
150 | } | ||
151 | |||
152 | return 0; | ||
153 | } | ||
80 | /* | 154 | /* |
81 | * Handle resources of PCI devices. If the world were perfect, we could | 155 | * Handle resources of PCI devices. If the world were perfect, we could |
82 | * just allocate all the resource regions and do nothing more. It isn't. | 156 | * just allocate all the resource regions and do nothing more. It isn't. |
@@ -128,6 +202,8 @@ static void __init pcibios_allocate_bus_resources(struct list_head *bus_list) | |||
128 | pr = pci_find_parent_resource(dev, r); | 202 | pr = pci_find_parent_resource(dev, r); |
129 | if (!r->start || !pr || | 203 | if (!r->start || !pr || |
130 | request_resource(pr, r) < 0) { | 204 | request_resource(pr, r) < 0) { |
205 | if (check_platform(dev, r)) | ||
206 | continue; | ||
131 | dev_err(&dev->dev, "BAR %d: can't " | 207 | dev_err(&dev->dev, "BAR %d: can't " |
132 | "allocate resource\n", idx); | 208 | "allocate resource\n", idx); |
133 | /* | 209 | /* |
@@ -171,6 +247,8 @@ static void __init pcibios_allocate_resources(int pass) | |||
171 | r->flags, disabled, pass); | 247 | r->flags, disabled, pass); |
172 | pr = pci_find_parent_resource(dev, r); | 248 | pr = pci_find_parent_resource(dev, r); |
173 | if (!pr || request_resource(pr, r) < 0) { | 249 | if (!pr || request_resource(pr, r) < 0) { |
250 | if (check_platform(dev, r)) | ||
251 | continue; | ||
174 | dev_err(&dev->dev, "BAR %d: can't " | 252 | dev_err(&dev->dev, "BAR %d: can't " |
175 | "allocate resource\n", idx); | 253 | "allocate resource\n", idx); |
176 | /* We'll assign a new address later */ | 254 | /* We'll assign a new address later */ |