diff options
Diffstat (limited to 'arch')
54 files changed, 441 insertions, 304 deletions
diff --git a/arch/arm/common/gic.c b/arch/arm/common/gic.c index f3c1ebfdd0aa..f3e020f2227f 100644 --- a/arch/arm/common/gic.c +++ b/arch/arm/common/gic.c | |||
@@ -95,7 +95,8 @@ static void gic_set_cpu(unsigned int irq, cpumask_t mask_val) | |||
95 | } | 95 | } |
96 | #endif | 96 | #endif |
97 | 97 | ||
98 | static struct irqchip gic_chip = { | 98 | static struct irq_chip gic_chip = { |
99 | .name = "GIC", | ||
99 | .ack = gic_ack_irq, | 100 | .ack = gic_ack_irq, |
100 | .mask = gic_mask_irq, | 101 | .mask = gic_mask_irq, |
101 | .unmask = gic_unmask_irq, | 102 | .unmask = gic_unmask_irq, |
diff --git a/arch/arm/common/locomo.c b/arch/arm/common/locomo.c index 04de83f4f008..4e0dcaef6eb2 100644 --- a/arch/arm/common/locomo.c +++ b/arch/arm/common/locomo.c | |||
@@ -204,7 +204,8 @@ static void locomo_unmask_irq(unsigned int irq) | |||
204 | locomo_writel(r, mapbase + LOCOMO_ICR); | 204 | locomo_writel(r, mapbase + LOCOMO_ICR); |
205 | } | 205 | } |
206 | 206 | ||
207 | static struct irqchip locomo_chip = { | 207 | static struct irq_chip locomo_chip = { |
208 | .name = "LOCOMO", | ||
208 | .ack = locomo_ack_irq, | 209 | .ack = locomo_ack_irq, |
209 | .mask = locomo_mask_irq, | 210 | .mask = locomo_mask_irq, |
210 | .unmask = locomo_unmask_irq, | 211 | .unmask = locomo_unmask_irq, |
@@ -249,7 +250,8 @@ static void locomo_key_unmask_irq(unsigned int irq) | |||
249 | locomo_writel(r, mapbase + LOCOMO_KEYBOARD + LOCOMO_KIC); | 250 | locomo_writel(r, mapbase + LOCOMO_KEYBOARD + LOCOMO_KIC); |
250 | } | 251 | } |
251 | 252 | ||
252 | static struct irqchip locomo_key_chip = { | 253 | static struct irq_chip locomo_key_chip = { |
254 | .name = "LOCOMO-key", | ||
253 | .ack = locomo_key_ack_irq, | 255 | .ack = locomo_key_ack_irq, |
254 | .mask = locomo_key_mask_irq, | 256 | .mask = locomo_key_mask_irq, |
255 | .unmask = locomo_key_unmask_irq, | 257 | .unmask = locomo_key_unmask_irq, |
@@ -312,7 +314,8 @@ static void locomo_gpio_unmask_irq(unsigned int irq) | |||
312 | locomo_writel(r, mapbase + LOCOMO_GIE); | 314 | locomo_writel(r, mapbase + LOCOMO_GIE); |
313 | } | 315 | } |
314 | 316 | ||
315 | static struct irqchip locomo_gpio_chip = { | 317 | static struct irq_chip locomo_gpio_chip = { |
318 | .name = "LOCOMO-gpio", | ||
316 | .ack = locomo_gpio_ack_irq, | 319 | .ack = locomo_gpio_ack_irq, |
317 | .mask = locomo_gpio_mask_irq, | 320 | .mask = locomo_gpio_mask_irq, |
318 | .unmask = locomo_gpio_unmask_irq, | 321 | .unmask = locomo_gpio_unmask_irq, |
@@ -357,7 +360,8 @@ static void locomo_lt_unmask_irq(unsigned int irq) | |||
357 | locomo_writel(r, mapbase + LOCOMO_LTINT); | 360 | locomo_writel(r, mapbase + LOCOMO_LTINT); |
358 | } | 361 | } |
359 | 362 | ||
360 | static struct irqchip locomo_lt_chip = { | 363 | static struct irq_chip locomo_lt_chip = { |
364 | .name = "LOCOMO-lt", | ||
361 | .ack = locomo_lt_ack_irq, | 365 | .ack = locomo_lt_ack_irq, |
362 | .mask = locomo_lt_mask_irq, | 366 | .mask = locomo_lt_mask_irq, |
363 | .unmask = locomo_lt_unmask_irq, | 367 | .unmask = locomo_lt_unmask_irq, |
@@ -418,7 +422,8 @@ static void locomo_spi_unmask_irq(unsigned int irq) | |||
418 | locomo_writel(r, mapbase + LOCOMO_SPIIE); | 422 | locomo_writel(r, mapbase + LOCOMO_SPIIE); |
419 | } | 423 | } |
420 | 424 | ||
421 | static struct irqchip locomo_spi_chip = { | 425 | static struct irq_chip locomo_spi_chip = { |
426 | .name = "LOCOMO-spi", | ||
422 | .ack = locomo_spi_ack_irq, | 427 | .ack = locomo_spi_ack_irq, |
423 | .mask = locomo_spi_mask_irq, | 428 | .mask = locomo_spi_mask_irq, |
424 | .unmask = locomo_spi_unmask_irq, | 429 | .unmask = locomo_spi_unmask_irq, |
diff --git a/arch/arm/common/sa1111.c b/arch/arm/common/sa1111.c index 1cdb26a47e1f..a331c12cead9 100644 --- a/arch/arm/common/sa1111.c +++ b/arch/arm/common/sa1111.c | |||
@@ -272,7 +272,8 @@ static int sa1111_wake_lowirq(unsigned int irq, unsigned int on) | |||
272 | return 0; | 272 | return 0; |
273 | } | 273 | } |
274 | 274 | ||
275 | static struct irqchip sa1111_low_chip = { | 275 | static struct irq_chip sa1111_low_chip = { |
276 | .name = "SA1111-l", | ||
276 | .ack = sa1111_ack_irq, | 277 | .ack = sa1111_ack_irq, |
277 | .mask = sa1111_mask_lowirq, | 278 | .mask = sa1111_mask_lowirq, |
278 | .unmask = sa1111_unmask_lowirq, | 279 | .unmask = sa1111_unmask_lowirq, |
@@ -368,7 +369,8 @@ static int sa1111_wake_highirq(unsigned int irq, unsigned int on) | |||
368 | return 0; | 369 | return 0; |
369 | } | 370 | } |
370 | 371 | ||
371 | static struct irqchip sa1111_high_chip = { | 372 | static struct irq_chip sa1111_high_chip = { |
373 | .name = "SA1111-h", | ||
372 | .ack = sa1111_ack_irq, | 374 | .ack = sa1111_ack_irq, |
373 | .mask = sa1111_mask_highirq, | 375 | .mask = sa1111_mask_highirq, |
374 | .unmask = sa1111_unmask_highirq, | 376 | .unmask = sa1111_unmask_highirq, |
diff --git a/arch/arm/common/vic.c b/arch/arm/common/vic.c index a19bc4a6196d..43d278134521 100644 --- a/arch/arm/common/vic.c +++ b/arch/arm/common/vic.c | |||
@@ -39,7 +39,8 @@ static void vic_unmask_irq(unsigned int irq) | |||
39 | writel(1 << irq, base + VIC_INT_ENABLE); | 39 | writel(1 << irq, base + VIC_INT_ENABLE); |
40 | } | 40 | } |
41 | 41 | ||
42 | static struct irqchip vic_chip = { | 42 | static struct irq_chip vic_chip = { |
43 | .name = "VIC", | ||
43 | .ack = vic_mask_irq, | 44 | .ack = vic_mask_irq, |
44 | .mask = vic_mask_irq, | 45 | .mask = vic_mask_irq, |
45 | .unmask = vic_unmask_irq, | 46 | .unmask = vic_unmask_irq, |
diff --git a/arch/arm/kernel/ecard.c b/arch/arm/kernel/ecard.c index b9a74a741d00..eca248d9eba4 100644 --- a/arch/arm/kernel/ecard.c +++ b/arch/arm/kernel/ecard.c | |||
@@ -470,7 +470,8 @@ static void ecard_irq_mask(unsigned int irqnr) | |||
470 | } | 470 | } |
471 | } | 471 | } |
472 | 472 | ||
473 | static struct irqchip ecard_chip = { | 473 | static struct irq_chip ecard_chip = { |
474 | .name = "ECARD", | ||
474 | .ack = ecard_irq_mask, | 475 | .ack = ecard_irq_mask, |
475 | .mask = ecard_irq_mask, | 476 | .mask = ecard_irq_mask, |
476 | .unmask = ecard_irq_unmask, | 477 | .unmask = ecard_irq_unmask, |
diff --git a/arch/arm/kernel/irq.c b/arch/arm/kernel/irq.c index 626feeec0ade..2e1bf830fe11 100644 --- a/arch/arm/kernel/irq.c +++ b/arch/arm/kernel/irq.c | |||
@@ -77,6 +77,7 @@ int show_interrupts(struct seq_file *p, void *v) | |||
77 | seq_printf(p, "%3d: ", i); | 77 | seq_printf(p, "%3d: ", i); |
78 | for_each_present_cpu(cpu) | 78 | for_each_present_cpu(cpu) |
79 | seq_printf(p, "%10u ", kstat_cpu(cpu).irqs[i]); | 79 | seq_printf(p, "%10u ", kstat_cpu(cpu).irqs[i]); |
80 | seq_printf(p, " %10s", irq_desc[i].chip->name ? : "-"); | ||
80 | seq_printf(p, " %s", action->name); | 81 | seq_printf(p, " %s", action->name); |
81 | for (action = action->next; action; action = action->next) | 82 | for (action = action->next; action; action = action->next) |
82 | seq_printf(p, ", %s", action->name); | 83 | seq_printf(p, ", %s", action->name); |
diff --git a/arch/arm/mach-at91rm9200/gpio.c b/arch/arm/mach-at91rm9200/gpio.c index 5783c282ae7b..cec199fd6721 100644 --- a/arch/arm/mach-at91rm9200/gpio.c +++ b/arch/arm/mach-at91rm9200/gpio.c | |||
@@ -327,7 +327,8 @@ static int gpio_irq_type(unsigned pin, unsigned type) | |||
327 | return (type == IRQT_BOTHEDGE) ? 0 : -EINVAL; | 327 | return (type == IRQT_BOTHEDGE) ? 0 : -EINVAL; |
328 | } | 328 | } |
329 | 329 | ||
330 | static struct irqchip gpio_irqchip = { | 330 | static struct irq_chip gpio_irqchip = { |
331 | .name = "GPIO", | ||
331 | .mask = gpio_irq_mask, | 332 | .mask = gpio_irq_mask, |
332 | .unmask = gpio_irq_unmask, | 333 | .unmask = gpio_irq_unmask, |
333 | .set_type = gpio_irq_type, | 334 | .set_type = gpio_irq_type, |
diff --git a/arch/arm/mach-at91rm9200/irq.c b/arch/arm/mach-at91rm9200/irq.c index 9b0911320417..c3a5e777f9f8 100644 --- a/arch/arm/mach-at91rm9200/irq.c +++ b/arch/arm/mach-at91rm9200/irq.c | |||
@@ -114,7 +114,8 @@ void at91_irq_resume(void) | |||
114 | #define at91_aic_set_wake NULL | 114 | #define at91_aic_set_wake NULL |
115 | #endif | 115 | #endif |
116 | 116 | ||
117 | static struct irqchip at91_aic_chip = { | 117 | static struct irq_chip at91_aic_chip = { |
118 | .name = "AIC", | ||
118 | .ack = at91_aic_mask_irq, | 119 | .ack = at91_aic_mask_irq, |
119 | .mask = at91_aic_mask_irq, | 120 | .mask = at91_aic_mask_irq, |
120 | .unmask = at91_aic_unmask_irq, | 121 | .unmask = at91_aic_unmask_irq, |
diff --git a/arch/arm/mach-imx/irq.c b/arch/arm/mach-imx/irq.c index a5de5f1da9f2..2688bd82c2a2 100644 --- a/arch/arm/mach-imx/irq.c +++ b/arch/arm/mach-imx/irq.c | |||
@@ -204,13 +204,15 @@ imx_gpiod_demux_handler(unsigned int irq_unused, struct irqdesc *desc, | |||
204 | imx_gpio_handler(mask, irq, desc, regs); | 204 | imx_gpio_handler(mask, irq, desc, regs); |
205 | } | 205 | } |
206 | 206 | ||
207 | static struct irqchip imx_internal_chip = { | 207 | static struct irq_chip imx_internal_chip = { |
208 | .name = "MPU", | ||
208 | .ack = imx_mask_irq, | 209 | .ack = imx_mask_irq, |
209 | .mask = imx_mask_irq, | 210 | .mask = imx_mask_irq, |
210 | .unmask = imx_unmask_irq, | 211 | .unmask = imx_unmask_irq, |
211 | }; | 212 | }; |
212 | 213 | ||
213 | static struct irqchip imx_gpio_chip = { | 214 | static struct irq_chip imx_gpio_chip = { |
215 | .name = "GPIO", | ||
214 | .ack = imx_gpio_ack_irq, | 216 | .ack = imx_gpio_ack_irq, |
215 | .mask = imx_gpio_mask_irq, | 217 | .mask = imx_gpio_mask_irq, |
216 | .unmask = imx_gpio_unmask_irq, | 218 | .unmask = imx_gpio_unmask_irq, |
diff --git a/arch/arm/mach-integrator/integrator_ap.c b/arch/arm/mach-integrator/integrator_ap.c index 6d65c96ebfd2..191c57a3b997 100644 --- a/arch/arm/mach-integrator/integrator_ap.c +++ b/arch/arm/mach-integrator/integrator_ap.c | |||
@@ -161,7 +161,8 @@ static void sc_unmask_irq(unsigned int irq) | |||
161 | writel(1 << irq, VA_IC_BASE + IRQ_ENABLE_SET); | 161 | writel(1 << irq, VA_IC_BASE + IRQ_ENABLE_SET); |
162 | } | 162 | } |
163 | 163 | ||
164 | static struct irqchip sc_chip = { | 164 | static struct irq_chip sc_chip = { |
165 | .name = "SC", | ||
165 | .ack = sc_mask_irq, | 166 | .ack = sc_mask_irq, |
166 | .mask = sc_mask_irq, | 167 | .mask = sc_mask_irq, |
167 | .unmask = sc_unmask_irq, | 168 | .unmask = sc_unmask_irq, |
diff --git a/arch/arm/mach-integrator/integrator_cp.c b/arch/arm/mach-integrator/integrator_cp.c index 9f55f5ae1044..678b6ba2b463 100644 --- a/arch/arm/mach-integrator/integrator_cp.c +++ b/arch/arm/mach-integrator/integrator_cp.c | |||
@@ -156,7 +156,8 @@ static void cic_unmask_irq(unsigned int irq) | |||
156 | cic_writel(1 << irq, INTCP_VA_CIC_BASE + IRQ_ENABLE_SET); | 156 | cic_writel(1 << irq, INTCP_VA_CIC_BASE + IRQ_ENABLE_SET); |
157 | } | 157 | } |
158 | 158 | ||
159 | static struct irqchip cic_chip = { | 159 | static struct irq_chip cic_chip = { |
160 | .name = "CIC", | ||
160 | .ack = cic_mask_irq, | 161 | .ack = cic_mask_irq, |
161 | .mask = cic_mask_irq, | 162 | .mask = cic_mask_irq, |
162 | .unmask = cic_unmask_irq, | 163 | .unmask = cic_unmask_irq, |
@@ -174,7 +175,8 @@ static void pic_unmask_irq(unsigned int irq) | |||
174 | pic_writel(1 << irq, INTCP_VA_PIC_BASE + IRQ_ENABLE_SET); | 175 | pic_writel(1 << irq, INTCP_VA_PIC_BASE + IRQ_ENABLE_SET); |
175 | } | 176 | } |
176 | 177 | ||
177 | static struct irqchip pic_chip = { | 178 | static struct irq_chip pic_chip = { |
179 | .name = "PIC", | ||
178 | .ack = pic_mask_irq, | 180 | .ack = pic_mask_irq, |
179 | .mask = pic_mask_irq, | 181 | .mask = pic_mask_irq, |
180 | .unmask = pic_unmask_irq, | 182 | .unmask = pic_unmask_irq, |
@@ -192,7 +194,8 @@ static void sic_unmask_irq(unsigned int irq) | |||
192 | sic_writel(1 << irq, INTCP_VA_SIC_BASE + IRQ_ENABLE_SET); | 194 | sic_writel(1 << irq, INTCP_VA_SIC_BASE + IRQ_ENABLE_SET); |
193 | } | 195 | } |
194 | 196 | ||
195 | static struct irqchip sic_chip = { | 197 | static struct irq_chip sic_chip = { |
198 | .name = "SIC", | ||
196 | .ack = sic_mask_irq, | 199 | .ack = sic_mask_irq, |
197 | .mask = sic_mask_irq, | 200 | .mask = sic_mask_irq, |
198 | .unmask = sic_unmask_irq, | 201 | .unmask = sic_unmask_irq, |
diff --git a/arch/arm/mach-iop3xx/iop321-irq.c b/arch/arm/mach-iop3xx/iop321-irq.c index d42aae6aef03..88ac333472c8 100644 --- a/arch/arm/mach-iop3xx/iop321-irq.c +++ b/arch/arm/mach-iop3xx/iop321-irq.c | |||
@@ -52,7 +52,8 @@ iop321_irq_unmask (unsigned int irq) | |||
52 | intctl_write(iop321_mask); | 52 | intctl_write(iop321_mask); |
53 | } | 53 | } |
54 | 54 | ||
55 | struct irqchip ext_chip = { | 55 | struct irq_chip ext_chip = { |
56 | .name = "IOP", | ||
56 | .ack = iop321_irq_mask, | 57 | .ack = iop321_irq_mask, |
57 | .mask = iop321_irq_mask, | 58 | .mask = iop321_irq_mask, |
58 | .unmask = iop321_irq_unmask, | 59 | .unmask = iop321_irq_unmask, |
diff --git a/arch/arm/mach-iop3xx/iop331-irq.c b/arch/arm/mach-iop3xx/iop331-irq.c index f4d4321737a4..cab11722ced2 100644 --- a/arch/arm/mach-iop3xx/iop331-irq.c +++ b/arch/arm/mach-iop3xx/iop331-irq.c | |||
@@ -77,13 +77,15 @@ iop331_irq_unmask2(unsigned int irq) | |||
77 | intctl_write1(iop331_mask1); | 77 | intctl_write1(iop331_mask1); |
78 | } | 78 | } |
79 | 79 | ||
80 | struct irqchip iop331_irqchip1 = { | 80 | struct irq_chip iop331_irqchip1 = { |
81 | .name = "IOP-1", | ||
81 | .ack = iop331_irq_mask1, | 82 | .ack = iop331_irq_mask1, |
82 | .mask = iop331_irq_mask1, | 83 | .mask = iop331_irq_mask1, |
83 | .unmask = iop331_irq_unmask1, | 84 | .unmask = iop331_irq_unmask1, |
84 | }; | 85 | }; |
85 | 86 | ||
86 | struct irqchip iop331_irqchip2 = { | 87 | struct irq_chip iop331_irqchip2 = { |
88 | .name = "IOP-2", | ||
87 | .ack = iop331_irq_mask2, | 89 | .ack = iop331_irq_mask2, |
88 | .mask = iop331_irq_mask2, | 90 | .mask = iop331_irq_mask2, |
89 | .unmask = iop331_irq_unmask2, | 91 | .unmask = iop331_irq_unmask2, |
diff --git a/arch/arm/mach-lh7a40x/arch-kev7a400.c b/arch/arm/mach-lh7a40x/arch-kev7a400.c index 2cccc27c62e4..4f2ab48800a5 100644 --- a/arch/arm/mach-lh7a40x/arch-kev7a400.c +++ b/arch/arm/mach-lh7a40x/arch-kev7a400.c | |||
@@ -63,7 +63,8 @@ static void kev7a400_unmask_cpld_irq (u32 irq) | |||
63 | CPLD_WR_PB_INT_MASK = CPLD_IRQ_mask; | 63 | CPLD_WR_PB_INT_MASK = CPLD_IRQ_mask; |
64 | } | 64 | } |
65 | 65 | ||
66 | static struct irqchip kev7a400_cpld_chip = { | 66 | static struct irq_chip kev7a400_cpld_chip = { |
67 | .name = "CPLD", | ||
67 | .ack = kev7a400_ack_cpld_irq, | 68 | .ack = kev7a400_ack_cpld_irq, |
68 | .mask = kev7a400_mask_cpld_irq, | 69 | .mask = kev7a400_mask_cpld_irq, |
69 | .unmask = kev7a400_unmask_cpld_irq, | 70 | .unmask = kev7a400_unmask_cpld_irq, |
diff --git a/arch/arm/mach-lh7a40x/arch-lpd7a40x.c b/arch/arm/mach-lh7a40x/arch-lpd7a40x.c index 35c3606a2079..a6910114b24c 100644 --- a/arch/arm/mach-lh7a40x/arch-lpd7a40x.c +++ b/arch/arm/mach-lh7a40x/arch-lpd7a40x.c | |||
@@ -200,7 +200,8 @@ static void lh7a40x_unmask_cpld_irq (u32 irq) | |||
200 | } | 200 | } |
201 | } | 201 | } |
202 | 202 | ||
203 | static struct irqchip lpd7a40x_cpld_chip = { | 203 | static struct irq_chip lpd7a40x_cpld_chip = { |
204 | .name = "CPLD", | ||
204 | .ack = lh7a40x_ack_cpld_irq, | 205 | .ack = lh7a40x_ack_cpld_irq, |
205 | .mask = lh7a40x_mask_cpld_irq, | 206 | .mask = lh7a40x_mask_cpld_irq, |
206 | .unmask = lh7a40x_unmask_cpld_irq, | 207 | .unmask = lh7a40x_unmask_cpld_irq, |
diff --git a/arch/arm/mach-lh7a40x/irq-kev7a400.c b/arch/arm/mach-lh7a40x/irq-kev7a400.c index 8535764d89ca..f9b3fe9174a5 100644 --- a/arch/arm/mach-lh7a40x/irq-kev7a400.c +++ b/arch/arm/mach-lh7a40x/irq-kev7a400.c | |||
@@ -43,7 +43,8 @@ lh7a400_unmask_cpld_irq (u32 irq) | |||
43 | } | 43 | } |
44 | 44 | ||
45 | static struct | 45 | static struct |
46 | irqchip lh7a400_cpld_chip = { | 46 | irq_chip lh7a400_cpld_chip = { |
47 | .name = "CPLD", | ||
47 | .ack = lh7a400_ack_cpld_irq, | 48 | .ack = lh7a400_ack_cpld_irq, |
48 | .mask = lh7a400_mask_cpld_irq, | 49 | .mask = lh7a400_mask_cpld_irq, |
49 | .unmask = lh7a400_unmask_cpld_irq, | 50 | .unmask = lh7a400_unmask_cpld_irq, |
diff --git a/arch/arm/mach-lh7a40x/irq-lh7a400.c b/arch/arm/mach-lh7a40x/irq-lh7a400.c index f9fdefef6d6f..091b2dc58d25 100644 --- a/arch/arm/mach-lh7a40x/irq-lh7a400.c +++ b/arch/arm/mach-lh7a40x/irq-lh7a400.c | |||
@@ -38,13 +38,15 @@ static void lh7a400_ack_gpio_irq (u32 irq) | |||
38 | INTC_INTENC = (1 << irq); | 38 | INTC_INTENC = (1 << irq); |
39 | } | 39 | } |
40 | 40 | ||
41 | static struct irqchip lh7a400_internal_chip = { | 41 | static struct irq_chip lh7a400_internal_chip = { |
42 | .name = "MPU", | ||
42 | .ack = lh7a400_mask_irq, /* Level triggering -> mask is ack */ | 43 | .ack = lh7a400_mask_irq, /* Level triggering -> mask is ack */ |
43 | .mask = lh7a400_mask_irq, | 44 | .mask = lh7a400_mask_irq, |
44 | .unmask = lh7a400_unmask_irq, | 45 | .unmask = lh7a400_unmask_irq, |
45 | }; | 46 | }; |
46 | 47 | ||
47 | static struct irqchip lh7a400_gpio_chip = { | 48 | static struct irq_chip lh7a400_gpio_chip = { |
49 | .name = "GPIO", | ||
48 | .ack = lh7a400_ack_gpio_irq, | 50 | .ack = lh7a400_ack_gpio_irq, |
49 | .mask = lh7a400_mask_irq, | 51 | .mask = lh7a400_mask_irq, |
50 | .unmask = lh7a400_unmask_irq, | 52 | .unmask = lh7a400_unmask_irq, |
diff --git a/arch/arm/mach-lh7a40x/irq-lh7a404.c b/arch/arm/mach-lh7a40x/irq-lh7a404.c index 2685a81454d2..7059b983724f 100644 --- a/arch/arm/mach-lh7a40x/irq-lh7a404.c +++ b/arch/arm/mach-lh7a40x/irq-lh7a404.c | |||
@@ -76,25 +76,29 @@ static void lh7a404_vic2_ack_gpio_irq (u32 irq) | |||
76 | VIC2_INTENCLR = (1 << irq); | 76 | VIC2_INTENCLR = (1 << irq); |
77 | } | 77 | } |
78 | 78 | ||
79 | static struct irqchip lh7a404_vic1_chip = { | 79 | static struct irq_chip lh7a404_vic1_chip = { |
80 | .name = "VIC1", | ||
80 | .ack = lh7a404_vic1_mask_irq, /* Because level-triggered */ | 81 | .ack = lh7a404_vic1_mask_irq, /* Because level-triggered */ |
81 | .mask = lh7a404_vic1_mask_irq, | 82 | .mask = lh7a404_vic1_mask_irq, |
82 | .unmask = lh7a404_vic1_unmask_irq, | 83 | .unmask = lh7a404_vic1_unmask_irq, |
83 | }; | 84 | }; |
84 | 85 | ||
85 | static struct irqchip lh7a404_vic2_chip = { | 86 | static struct irq_chip lh7a404_vic2_chip = { |
87 | .name = "VIC2", | ||
86 | .ack = lh7a404_vic2_mask_irq, /* Because level-triggered */ | 88 | .ack = lh7a404_vic2_mask_irq, /* Because level-triggered */ |
87 | .mask = lh7a404_vic2_mask_irq, | 89 | .mask = lh7a404_vic2_mask_irq, |
88 | .unmask = lh7a404_vic2_unmask_irq, | 90 | .unmask = lh7a404_vic2_unmask_irq, |
89 | }; | 91 | }; |
90 | 92 | ||
91 | static struct irqchip lh7a404_gpio_vic1_chip = { | 93 | static struct irq_chip lh7a404_gpio_vic1_chip = { |
94 | .name = "GPIO-VIC1", | ||
92 | .ack = lh7a404_vic1_ack_gpio_irq, | 95 | .ack = lh7a404_vic1_ack_gpio_irq, |
93 | .mask = lh7a404_vic1_mask_irq, | 96 | .mask = lh7a404_vic1_mask_irq, |
94 | .unmask = lh7a404_vic1_unmask_irq, | 97 | .unmask = lh7a404_vic1_unmask_irq, |
95 | }; | 98 | }; |
96 | 99 | ||
97 | static struct irqchip lh7a404_gpio_vic2_chip = { | 100 | static struct irq_chip lh7a404_gpio_vic2_chip = { |
101 | .name = "GPIO-VIC2", | ||
98 | .ack = lh7a404_vic2_ack_gpio_irq, | 102 | .ack = lh7a404_vic2_ack_gpio_irq, |
99 | .mask = lh7a404_vic2_mask_irq, | 103 | .mask = lh7a404_vic2_mask_irq, |
100 | .unmask = lh7a404_vic2_unmask_irq, | 104 | .unmask = lh7a404_vic2_unmask_irq, |
diff --git a/arch/arm/mach-lh7a40x/irq-lpd7a40x.c b/arch/arm/mach-lh7a40x/irq-lpd7a40x.c index dcb4e17b9419..d6055dde6468 100644 --- a/arch/arm/mach-lh7a40x/irq-lpd7a40x.c +++ b/arch/arm/mach-lh7a40x/irq-lpd7a40x.c | |||
@@ -50,7 +50,8 @@ static void lh7a40x_unmask_cpld_irq (u32 irq) | |||
50 | } | 50 | } |
51 | } | 51 | } |
52 | 52 | ||
53 | static struct irqchip lh7a40x_cpld_chip = { | 53 | static struct irq_chip lh7a40x_cpld_chip = { |
54 | .name = "CPLD", | ||
54 | .ack = lh7a40x_ack_cpld_irq, | 55 | .ack = lh7a40x_ack_cpld_irq, |
55 | .mask = lh7a40x_mask_cpld_irq, | 56 | .mask = lh7a40x_mask_cpld_irq, |
56 | .unmask = lh7a40x_unmask_cpld_irq, | 57 | .unmask = lh7a40x_unmask_cpld_irq, |
diff --git a/arch/arm/mach-omap1/fpga.c b/arch/arm/mach-omap1/fpga.c index 34eb79ee6e61..efe9bfc6e55f 100644 --- a/arch/arm/mach-omap1/fpga.c +++ b/arch/arm/mach-omap1/fpga.c | |||
@@ -106,14 +106,16 @@ void innovator_fpga_IRQ_demux(unsigned int irq, struct irqdesc *desc, | |||
106 | } | 106 | } |
107 | } | 107 | } |
108 | 108 | ||
109 | static struct irqchip omap_fpga_irq_ack = { | 109 | static struct irq_chip omap_fpga_irq_ack = { |
110 | .name = "FPGA-ack", | ||
110 | .ack = fpga_mask_ack_irq, | 111 | .ack = fpga_mask_ack_irq, |
111 | .mask = fpga_mask_irq, | 112 | .mask = fpga_mask_irq, |
112 | .unmask = fpga_unmask_irq, | 113 | .unmask = fpga_unmask_irq, |
113 | }; | 114 | }; |
114 | 115 | ||
115 | 116 | ||
116 | static struct irqchip omap_fpga_irq = { | 117 | static struct irq_chip omap_fpga_irq = { |
118 | .name = "FPGA", | ||
117 | .ack = fpga_ack_irq, | 119 | .ack = fpga_ack_irq, |
118 | .mask = fpga_mask_irq, | 120 | .mask = fpga_mask_irq, |
119 | .unmask = fpga_unmask_irq, | 121 | .unmask = fpga_unmask_irq, |
diff --git a/arch/arm/mach-omap1/irq.c b/arch/arm/mach-omap1/irq.c index 9e039845b50e..3ea140bb9eba 100644 --- a/arch/arm/mach-omap1/irq.c +++ b/arch/arm/mach-omap1/irq.c | |||
@@ -168,7 +168,8 @@ static struct omap_irq_bank omap1610_irq_banks[] = { | |||
168 | }; | 168 | }; |
169 | #endif | 169 | #endif |
170 | 170 | ||
171 | static struct irqchip omap_irq_chip = { | 171 | static struct irq_chip omap_irq_chip = { |
172 | .name = "MPU", | ||
172 | .ack = omap_mask_ack_irq, | 173 | .ack = omap_mask_ack_irq, |
173 | .mask = omap_mask_irq, | 174 | .mask = omap_mask_irq, |
174 | .unmask = omap_unmask_irq, | 175 | .unmask = omap_unmask_irq, |
diff --git a/arch/arm/mach-omap2/irq.c b/arch/arm/mach-omap2/irq.c index 3eed6a737bf8..dfc3b35cc1ff 100644 --- a/arch/arm/mach-omap2/irq.c +++ b/arch/arm/mach-omap2/irq.c | |||
@@ -94,7 +94,8 @@ static void omap_mask_ack_irq(unsigned int irq) | |||
94 | omap_ack_irq(irq); | 94 | omap_ack_irq(irq); |
95 | } | 95 | } |
96 | 96 | ||
97 | static struct irqchip omap_irq_chip = { | 97 | static struct irq_chip omap_irq_chip = { |
98 | .name = "INTC", | ||
98 | .ack = omap_mask_ack_irq, | 99 | .ack = omap_mask_ack_irq, |
99 | .mask = omap_mask_irq, | 100 | .mask = omap_mask_irq, |
100 | .unmask = omap_unmask_irq, | 101 | .unmask = omap_unmask_irq, |
diff --git a/arch/arm/mach-pxa/irq.c b/arch/arm/mach-pxa/irq.c index d9635ff4b10c..12141e2a50cc 100644 --- a/arch/arm/mach-pxa/irq.c +++ b/arch/arm/mach-pxa/irq.c | |||
@@ -39,7 +39,8 @@ static void pxa_unmask_low_irq(unsigned int irq) | |||
39 | ICMR |= (1 << (irq + PXA_IRQ_SKIP)); | 39 | ICMR |= (1 << (irq + PXA_IRQ_SKIP)); |
40 | } | 40 | } |
41 | 41 | ||
42 | static struct irqchip pxa_internal_chip_low = { | 42 | static struct irq_chip pxa_internal_chip_low = { |
43 | .name = "SC", | ||
43 | .ack = pxa_mask_low_irq, | 44 | .ack = pxa_mask_low_irq, |
44 | .mask = pxa_mask_low_irq, | 45 | .mask = pxa_mask_low_irq, |
45 | .unmask = pxa_unmask_low_irq, | 46 | .unmask = pxa_unmask_low_irq, |
@@ -61,7 +62,8 @@ static void pxa_unmask_high_irq(unsigned int irq) | |||
61 | ICMR2 |= (1 << (irq - 32 + PXA_IRQ_SKIP)); | 62 | ICMR2 |= (1 << (irq - 32 + PXA_IRQ_SKIP)); |
62 | } | 63 | } |
63 | 64 | ||
64 | static struct irqchip pxa_internal_chip_high = { | 65 | static struct irq_chip pxa_internal_chip_high = { |
66 | .name = "SC-hi", | ||
65 | .ack = pxa_mask_high_irq, | 67 | .ack = pxa_mask_high_irq, |
66 | .mask = pxa_mask_high_irq, | 68 | .mask = pxa_mask_high_irq, |
67 | .unmask = pxa_unmask_high_irq, | 69 | .unmask = pxa_unmask_high_irq, |
@@ -129,7 +131,8 @@ static void pxa_ack_low_gpio(unsigned int irq) | |||
129 | GEDR0 = (1 << (irq - IRQ_GPIO0)); | 131 | GEDR0 = (1 << (irq - IRQ_GPIO0)); |
130 | } | 132 | } |
131 | 133 | ||
132 | static struct irqchip pxa_low_gpio_chip = { | 134 | static struct irq_chip pxa_low_gpio_chip = { |
135 | .name = "GPIO-l", | ||
133 | .ack = pxa_ack_low_gpio, | 136 | .ack = pxa_ack_low_gpio, |
134 | .mask = pxa_mask_low_irq, | 137 | .mask = pxa_mask_low_irq, |
135 | .unmask = pxa_unmask_low_irq, | 138 | .unmask = pxa_unmask_low_irq, |
@@ -237,7 +240,8 @@ static void pxa_unmask_muxed_gpio(unsigned int irq) | |||
237 | GFER(gpio) = GPIO_IRQ_falling_edge[idx] & GPIO_IRQ_mask[idx]; | 240 | GFER(gpio) = GPIO_IRQ_falling_edge[idx] & GPIO_IRQ_mask[idx]; |
238 | } | 241 | } |
239 | 242 | ||
240 | static struct irqchip pxa_muxed_gpio_chip = { | 243 | static struct irq_chip pxa_muxed_gpio_chip = { |
244 | .name = "GPIO", | ||
241 | .ack = pxa_ack_muxed_gpio, | 245 | .ack = pxa_ack_muxed_gpio, |
242 | .mask = pxa_mask_muxed_gpio, | 246 | .mask = pxa_mask_muxed_gpio, |
243 | .unmask = pxa_unmask_muxed_gpio, | 247 | .unmask = pxa_unmask_muxed_gpio, |
diff --git a/arch/arm/mach-pxa/lpd270.c b/arch/arm/mach-pxa/lpd270.c index 1a5f5c21481e..12479ae26db2 100644 --- a/arch/arm/mach-pxa/lpd270.c +++ b/arch/arm/mach-pxa/lpd270.c | |||
@@ -68,7 +68,8 @@ static void lpd270_unmask_irq(unsigned int irq) | |||
68 | __raw_writew(lpd270_irq_enabled, LPD270_INT_MASK); | 68 | __raw_writew(lpd270_irq_enabled, LPD270_INT_MASK); |
69 | } | 69 | } |
70 | 70 | ||
71 | static struct irqchip lpd270_irq_chip = { | 71 | static struct irq_chip lpd270_irq_chip = { |
72 | .name = "CPLD", | ||
72 | .ack = lpd270_mask_irq, | 73 | .ack = lpd270_mask_irq, |
73 | .mask = lpd270_mask_irq, | 74 | .mask = lpd270_mask_irq, |
74 | .unmask = lpd270_unmask_irq, | 75 | .unmask = lpd270_unmask_irq, |
diff --git a/arch/arm/mach-pxa/lubbock.c b/arch/arm/mach-pxa/lubbock.c index 6a9a669d60de..83ff5cee64d9 100644 --- a/arch/arm/mach-pxa/lubbock.c +++ b/arch/arm/mach-pxa/lubbock.c | |||
@@ -78,7 +78,8 @@ static void lubbock_unmask_irq(unsigned int irq) | |||
78 | LUB_IRQ_MASK_EN = (lubbock_irq_enabled |= (1 << lubbock_irq)); | 78 | LUB_IRQ_MASK_EN = (lubbock_irq_enabled |= (1 << lubbock_irq)); |
79 | } | 79 | } |
80 | 80 | ||
81 | static struct irqchip lubbock_irq_chip = { | 81 | static struct irq_chip lubbock_irq_chip = { |
82 | .name = "FPGA", | ||
82 | .ack = lubbock_mask_irq, | 83 | .ack = lubbock_mask_irq, |
83 | .mask = lubbock_mask_irq, | 84 | .mask = lubbock_mask_irq, |
84 | .unmask = lubbock_unmask_irq, | 85 | .unmask = lubbock_unmask_irq, |
diff --git a/arch/arm/mach-pxa/mainstone.c b/arch/arm/mach-pxa/mainstone.c index 21ddf3de2f6e..a7e9b96f258a 100644 --- a/arch/arm/mach-pxa/mainstone.c +++ b/arch/arm/mach-pxa/mainstone.c | |||
@@ -64,7 +64,8 @@ static void mainstone_unmask_irq(unsigned int irq) | |||
64 | MST_INTMSKENA = (mainstone_irq_enabled |= (1 << mainstone_irq)); | 64 | MST_INTMSKENA = (mainstone_irq_enabled |= (1 << mainstone_irq)); |
65 | } | 65 | } |
66 | 66 | ||
67 | static struct irqchip mainstone_irq_chip = { | 67 | static struct irq_chip mainstone_irq_chip = { |
68 | .name = "FPGA", | ||
68 | .ack = mainstone_mask_irq, | 69 | .ack = mainstone_mask_irq, |
69 | .mask = mainstone_mask_irq, | 70 | .mask = mainstone_mask_irq, |
70 | .unmask = mainstone_unmask_irq, | 71 | .unmask = mainstone_unmask_irq, |
diff --git a/arch/arm/mach-sa1100/irq.c b/arch/arm/mach-sa1100/irq.c index 2891b8ca86dd..b55b90a2e8fe 100644 --- a/arch/arm/mach-sa1100/irq.c +++ b/arch/arm/mach-sa1100/irq.c | |||
@@ -95,7 +95,8 @@ static int sa1100_low_gpio_wake(unsigned int irq, unsigned int on) | |||
95 | return 0; | 95 | return 0; |
96 | } | 96 | } |
97 | 97 | ||
98 | static struct irqchip sa1100_low_gpio_chip = { | 98 | static struct irq_chip sa1100_low_gpio_chip = { |
99 | .name = "GPIO-l", | ||
99 | .ack = sa1100_low_gpio_ack, | 100 | .ack = sa1100_low_gpio_ack, |
100 | .mask = sa1100_low_gpio_mask, | 101 | .mask = sa1100_low_gpio_mask, |
101 | .unmask = sa1100_low_gpio_unmask, | 102 | .unmask = sa1100_low_gpio_unmask, |
@@ -178,7 +179,8 @@ static int sa1100_high_gpio_wake(unsigned int irq, unsigned int on) | |||
178 | return 0; | 179 | return 0; |
179 | } | 180 | } |
180 | 181 | ||
181 | static struct irqchip sa1100_high_gpio_chip = { | 182 | static struct irq_chip sa1100_high_gpio_chip = { |
183 | .name = "GPIO-h", | ||
182 | .ack = sa1100_high_gpio_ack, | 184 | .ack = sa1100_high_gpio_ack, |
183 | .mask = sa1100_high_gpio_mask, | 185 | .mask = sa1100_high_gpio_mask, |
184 | .unmask = sa1100_high_gpio_unmask, | 186 | .unmask = sa1100_high_gpio_unmask, |
@@ -215,7 +217,8 @@ static int sa1100_set_wake(unsigned int irq, unsigned int on) | |||
215 | return -EINVAL; | 217 | return -EINVAL; |
216 | } | 218 | } |
217 | 219 | ||
218 | static struct irqchip sa1100_normal_chip = { | 220 | static struct irq_chip sa1100_normal_chip = { |
221 | .name = "SC", | ||
219 | .ack = sa1100_mask_irq, | 222 | .ack = sa1100_mask_irq, |
220 | .mask = sa1100_mask_irq, | 223 | .mask = sa1100_mask_irq, |
221 | .unmask = sa1100_unmask_irq, | 224 | .unmask = sa1100_unmask_irq, |
diff --git a/arch/arm/mach-shark/irq.c b/arch/arm/mach-shark/irq.c index 6cb67bd3dfd3..b227052296cf 100644 --- a/arch/arm/mach-shark/irq.c +++ b/arch/arm/mach-shark/irq.c | |||
@@ -69,7 +69,8 @@ static irqreturn_t bogus_int(int irq, void *dev_id, struct pt_regs *regs) | |||
69 | 69 | ||
70 | static struct irqaction cascade; | 70 | static struct irqaction cascade; |
71 | 71 | ||
72 | static struct irqchip fb_chip = { | 72 | static struct irq_chip fb_chip = { |
73 | .name = "XT-PIC", | ||
73 | .ack = shark_ack_8259A_irq, | 74 | .ack = shark_ack_8259A_irq, |
74 | .mask = shark_disable_8259A_irq, | 75 | .mask = shark_disable_8259A_irq, |
75 | .unmask = shark_enable_8259A_irq, | 76 | .unmask = shark_enable_8259A_irq, |
diff --git a/arch/arm/mach-versatile/core.c b/arch/arm/mach-versatile/core.c index 864377176015..c4e3f8c68479 100644 --- a/arch/arm/mach-versatile/core.c +++ b/arch/arm/mach-versatile/core.c | |||
@@ -69,7 +69,8 @@ static void sic_unmask_irq(unsigned int irq) | |||
69 | writel(1 << irq, VA_SIC_BASE + SIC_IRQ_ENABLE_SET); | 69 | writel(1 << irq, VA_SIC_BASE + SIC_IRQ_ENABLE_SET); |
70 | } | 70 | } |
71 | 71 | ||
72 | static struct irqchip sic_chip = { | 72 | static struct irq_chip sic_chip = { |
73 | .name = "SIC", | ||
73 | .ack = sic_mask_irq, | 74 | .ack = sic_mask_irq, |
74 | .mask = sic_mask_irq, | 75 | .mask = sic_mask_irq, |
75 | .unmask = sic_unmask_irq, | 76 | .unmask = sic_unmask_irq, |
diff --git a/arch/arm/plat-omap/gpio.c b/arch/arm/plat-omap/gpio.c index fec7970e564d..cd7f973fb286 100644 --- a/arch/arm/plat-omap/gpio.c +++ b/arch/arm/plat-omap/gpio.c | |||
@@ -944,7 +944,8 @@ static void mpuio_unmask_irq(unsigned int irq) | |||
944 | _set_gpio_irqenable(bank, gpio, 1); | 944 | _set_gpio_irqenable(bank, gpio, 1); |
945 | } | 945 | } |
946 | 946 | ||
947 | static struct irqchip gpio_irq_chip = { | 947 | static struct irq_chip gpio_irq_chip = { |
948 | .name = "GPIO", | ||
948 | .ack = gpio_ack_irq, | 949 | .ack = gpio_ack_irq, |
949 | .mask = gpio_mask_irq, | 950 | .mask = gpio_mask_irq, |
950 | .unmask = gpio_unmask_irq, | 951 | .unmask = gpio_unmask_irq, |
@@ -952,10 +953,11 @@ static struct irqchip gpio_irq_chip = { | |||
952 | .set_wake = gpio_wake_enable, | 953 | .set_wake = gpio_wake_enable, |
953 | }; | 954 | }; |
954 | 955 | ||
955 | static struct irqchip mpuio_irq_chip = { | 956 | static struct irq_chip mpuio_irq_chip = { |
957 | .name = "MPUIO", | ||
956 | .ack = mpuio_ack_irq, | 958 | .ack = mpuio_ack_irq, |
957 | .mask = mpuio_mask_irq, | 959 | .mask = mpuio_mask_irq, |
958 | .unmask = mpuio_unmask_irq | 960 | .unmask = mpuio_unmask_irq |
959 | }; | 961 | }; |
960 | 962 | ||
961 | static int initialized; | 963 | static int initialized; |
diff --git a/arch/i386/kernel/cpu/cpufreq/Kconfig b/arch/i386/kernel/cpu/cpufreq/Kconfig index e44a4c6a4fe5..ccc1edff5c97 100644 --- a/arch/i386/kernel/cpu/cpufreq/Kconfig +++ b/arch/i386/kernel/cpu/cpufreq/Kconfig | |||
@@ -96,6 +96,7 @@ config X86_POWERNOW_K8_ACPI | |||
96 | 96 | ||
97 | config X86_GX_SUSPMOD | 97 | config X86_GX_SUSPMOD |
98 | tristate "Cyrix MediaGX/NatSemi Geode Suspend Modulation" | 98 | tristate "Cyrix MediaGX/NatSemi Geode Suspend Modulation" |
99 | depends on PCI | ||
99 | help | 100 | help |
100 | This add the CPUFreq driver for NatSemi Geode processors which | 101 | This add the CPUFreq driver for NatSemi Geode processors which |
101 | support suspend modulation. | 102 | support suspend modulation. |
@@ -202,7 +203,7 @@ config X86_LONGRUN | |||
202 | config X86_LONGHAUL | 203 | config X86_LONGHAUL |
203 | tristate "VIA Cyrix III Longhaul" | 204 | tristate "VIA Cyrix III Longhaul" |
204 | select CPU_FREQ_TABLE | 205 | select CPU_FREQ_TABLE |
205 | depends on BROKEN | 206 | depends on ACPI_PROCESSOR |
206 | help | 207 | help |
207 | This adds the CPUFreq driver for VIA Samuel/CyrixIII, | 208 | This adds the CPUFreq driver for VIA Samuel/CyrixIII, |
208 | VIA Cyrix Samuel/C3, VIA Cyrix Ezra and VIA Cyrix Ezra-T | 209 | VIA Cyrix Samuel/C3, VIA Cyrix Ezra and VIA Cyrix Ezra-T |
diff --git a/arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c b/arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c index 567b39bea07e..efb41e81351c 100644 --- a/arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c +++ b/arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c | |||
@@ -384,8 +384,7 @@ static int acpi_cpufreq_early_init_acpi(void) | |||
384 | } | 384 | } |
385 | 385 | ||
386 | /* Do initialization in ACPI core */ | 386 | /* Do initialization in ACPI core */ |
387 | acpi_processor_preregister_performance(acpi_perf_data); | 387 | return acpi_processor_preregister_performance(acpi_perf_data); |
388 | return 0; | ||
389 | } | 388 | } |
390 | 389 | ||
391 | static int | 390 | static int |
diff --git a/arch/i386/kernel/cpu/cpufreq/longhaul.c b/arch/i386/kernel/cpu/cpufreq/longhaul.c index 146f607e9c44..4f2c3aeef724 100644 --- a/arch/i386/kernel/cpu/cpufreq/longhaul.c +++ b/arch/i386/kernel/cpu/cpufreq/longhaul.c | |||
@@ -29,11 +29,13 @@ | |||
29 | #include <linux/cpufreq.h> | 29 | #include <linux/cpufreq.h> |
30 | #include <linux/slab.h> | 30 | #include <linux/slab.h> |
31 | #include <linux/string.h> | 31 | #include <linux/string.h> |
32 | #include <linux/pci.h> | ||
33 | 32 | ||
34 | #include <asm/msr.h> | 33 | #include <asm/msr.h> |
35 | #include <asm/timex.h> | 34 | #include <asm/timex.h> |
36 | #include <asm/io.h> | 35 | #include <asm/io.h> |
36 | #include <asm/acpi.h> | ||
37 | #include <linux/acpi.h> | ||
38 | #include <acpi/processor.h> | ||
37 | 39 | ||
38 | #include "longhaul.h" | 40 | #include "longhaul.h" |
39 | 41 | ||
@@ -56,6 +58,8 @@ static int minvid, maxvid; | |||
56 | static unsigned int minmult, maxmult; | 58 | static unsigned int minmult, maxmult; |
57 | static int can_scale_voltage; | 59 | static int can_scale_voltage; |
58 | static int vrmrev; | 60 | static int vrmrev; |
61 | static struct acpi_processor *pr = NULL; | ||
62 | static struct acpi_processor_cx *cx = NULL; | ||
59 | 63 | ||
60 | /* Module parameters */ | 64 | /* Module parameters */ |
61 | static int dont_scale_voltage; | 65 | static int dont_scale_voltage; |
@@ -118,84 +122,65 @@ static int longhaul_get_cpu_mult(void) | |||
118 | return eblcr_table[invalue]; | 122 | return eblcr_table[invalue]; |
119 | } | 123 | } |
120 | 124 | ||
125 | /* For processor with BCR2 MSR */ | ||
121 | 126 | ||
122 | static void do_powersaver(union msr_longhaul *longhaul, | 127 | static void do_longhaul1(int cx_address, unsigned int clock_ratio_index) |
123 | unsigned int clock_ratio_index) | ||
124 | { | 128 | { |
125 | struct pci_dev *dev; | 129 | union msr_bcr2 bcr2; |
126 | unsigned long flags; | 130 | u32 t; |
127 | unsigned int tmp_mask; | ||
128 | int version; | ||
129 | int i; | ||
130 | u16 pci_cmd; | ||
131 | u16 cmd_state[64]; | ||
132 | 131 | ||
133 | switch (cpu_model) { | 132 | rdmsrl(MSR_VIA_BCR2, bcr2.val); |
134 | case CPU_EZRA_T: | 133 | /* Enable software clock multiplier */ |
135 | version = 3; | 134 | bcr2.bits.ESOFTBF = 1; |
136 | break; | 135 | bcr2.bits.CLOCKMUL = clock_ratio_index; |
137 | case CPU_NEHEMIAH: | ||
138 | version = 0xf; | ||
139 | break; | ||
140 | default: | ||
141 | return; | ||
142 | } | ||
143 | 136 | ||
144 | rdmsrl(MSR_VIA_LONGHAUL, longhaul->val); | 137 | /* Sync to timer tick */ |
145 | longhaul->bits.SoftBusRatio = clock_ratio_index & 0xf; | 138 | safe_halt(); |
146 | longhaul->bits.SoftBusRatio4 = (clock_ratio_index & 0x10) >> 4; | 139 | ACPI_FLUSH_CPU_CACHE(); |
147 | longhaul->bits.EnableSoftBusRatio = 1; | 140 | /* Change frequency on next halt or sleep */ |
148 | longhaul->bits.RevisionKey = 0; | 141 | wrmsrl(MSR_VIA_BCR2, bcr2.val); |
142 | /* Invoke C3 */ | ||
143 | inb(cx_address); | ||
144 | /* Dummy op - must do something useless after P_LVL3 read */ | ||
145 | t = inl(acpi_fadt.xpm_tmr_blk.address); | ||
146 | |||
147 | /* Disable software clock multiplier */ | ||
148 | local_irq_disable(); | ||
149 | rdmsrl(MSR_VIA_BCR2, bcr2.val); | ||
150 | bcr2.bits.ESOFTBF = 0; | ||
151 | wrmsrl(MSR_VIA_BCR2, bcr2.val); | ||
152 | } | ||
149 | 153 | ||
150 | preempt_disable(); | 154 | /* For processor with Longhaul MSR */ |
151 | local_irq_save(flags); | ||
152 | 155 | ||
153 | /* | 156 | static void do_powersaver(int cx_address, unsigned int clock_ratio_index) |
154 | * get current pci bus master state for all devices | 157 | { |
155 | * and clear bus master bit | 158 | union msr_longhaul longhaul; |
156 | */ | 159 | u32 t; |
157 | dev = NULL; | ||
158 | i = 0; | ||
159 | do { | ||
160 | dev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, dev); | ||
161 | if (dev != NULL) { | ||
162 | pci_read_config_word(dev, PCI_COMMAND, &pci_cmd); | ||
163 | cmd_state[i++] = pci_cmd; | ||
164 | pci_cmd &= ~PCI_COMMAND_MASTER; | ||
165 | pci_write_config_word(dev, PCI_COMMAND, pci_cmd); | ||
166 | } | ||
167 | } while (dev != NULL); | ||
168 | 160 | ||
169 | tmp_mask=inb(0x21); /* works on C3. save mask. */ | 161 | rdmsrl(MSR_VIA_LONGHAUL, longhaul.val); |
170 | outb(0xFE,0x21); /* TMR0 only */ | 162 | longhaul.bits.RevisionKey = longhaul.bits.RevisionID; |
171 | outb(0xFF,0x80); /* delay */ | 163 | longhaul.bits.SoftBusRatio = clock_ratio_index & 0xf; |
164 | longhaul.bits.SoftBusRatio4 = (clock_ratio_index & 0x10) >> 4; | ||
165 | longhaul.bits.EnableSoftBusRatio = 1; | ||
172 | 166 | ||
167 | /* Sync to timer tick */ | ||
173 | safe_halt(); | 168 | safe_halt(); |
174 | wrmsrl(MSR_VIA_LONGHAUL, longhaul->val); | 169 | ACPI_FLUSH_CPU_CACHE(); |
175 | halt(); | 170 | /* Change frequency on next halt or sleep */ |
176 | 171 | wrmsrl(MSR_VIA_LONGHAUL, longhaul.val); | |
172 | /* Invoke C3 */ | ||
173 | inb(cx_address); | ||
174 | /* Dummy op - must do something useless after P_LVL3 read */ | ||
175 | t = inl(acpi_fadt.xpm_tmr_blk.address); | ||
176 | |||
177 | /* Disable bus ratio bit */ | ||
177 | local_irq_disable(); | 178 | local_irq_disable(); |
178 | 179 | longhaul.bits.RevisionKey = longhaul.bits.RevisionID; | |
179 | outb(tmp_mask,0x21); /* restore mask */ | 180 | longhaul.bits.EnableSoftBusRatio = 0; |
180 | 181 | longhaul.bits.EnableSoftBSEL = 0; | |
181 | /* restore pci bus master state for all devices */ | 182 | longhaul.bits.EnableSoftVID = 0; |
182 | dev = NULL; | 183 | wrmsrl(MSR_VIA_LONGHAUL, longhaul.val); |
183 | i = 0; | ||
184 | do { | ||
185 | dev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, dev); | ||
186 | if (dev != NULL) { | ||
187 | pci_cmd = cmd_state[i++]; | ||
188 | pci_write_config_byte(dev, PCI_COMMAND, pci_cmd); | ||
189 | } | ||
190 | } while (dev != NULL); | ||
191 | local_irq_restore(flags); | ||
192 | preempt_enable(); | ||
193 | |||
194 | /* disable bus ratio bit */ | ||
195 | rdmsrl(MSR_VIA_LONGHAUL, longhaul->val); | ||
196 | longhaul->bits.EnableSoftBusRatio = 0; | ||
197 | longhaul->bits.RevisionKey = version; | ||
198 | wrmsrl(MSR_VIA_LONGHAUL, longhaul->val); | ||
199 | } | 184 | } |
200 | 185 | ||
201 | /** | 186 | /** |
@@ -209,9 +194,9 @@ static void longhaul_setstate(unsigned int clock_ratio_index) | |||
209 | { | 194 | { |
210 | int speed, mult; | 195 | int speed, mult; |
211 | struct cpufreq_freqs freqs; | 196 | struct cpufreq_freqs freqs; |
212 | union msr_longhaul longhaul; | ||
213 | union msr_bcr2 bcr2; | ||
214 | static unsigned int old_ratio=-1; | 197 | static unsigned int old_ratio=-1; |
198 | unsigned long flags; | ||
199 | unsigned int pic1_mask, pic2_mask; | ||
215 | 200 | ||
216 | if (old_ratio == clock_ratio_index) | 201 | if (old_ratio == clock_ratio_index) |
217 | return; | 202 | return; |
@@ -234,6 +219,20 @@ static void longhaul_setstate(unsigned int clock_ratio_index) | |||
234 | dprintk ("Setting to FSB:%dMHz Mult:%d.%dx (%s)\n", | 219 | dprintk ("Setting to FSB:%dMHz Mult:%d.%dx (%s)\n", |
235 | fsb, mult/10, mult%10, print_speed(speed/1000)); | 220 | fsb, mult/10, mult%10, print_speed(speed/1000)); |
236 | 221 | ||
222 | preempt_disable(); | ||
223 | local_irq_save(flags); | ||
224 | |||
225 | pic2_mask = inb(0xA1); | ||
226 | pic1_mask = inb(0x21); /* works on C3. save mask. */ | ||
227 | outb(0xFF,0xA1); /* Overkill */ | ||
228 | outb(0xFE,0x21); /* TMR0 only */ | ||
229 | |||
230 | /* Disable bus master arbitration */ | ||
231 | if (pr->flags.bm_check) { | ||
232 | acpi_set_register(ACPI_BITREG_ARB_DISABLE, 1, | ||
233 | ACPI_MTX_DO_NOT_LOCK); | ||
234 | } | ||
235 | |||
237 | switch (longhaul_version) { | 236 | switch (longhaul_version) { |
238 | 237 | ||
239 | /* | 238 | /* |
@@ -245,20 +244,7 @@ static void longhaul_setstate(unsigned int clock_ratio_index) | |||
245 | */ | 244 | */ |
246 | case TYPE_LONGHAUL_V1: | 245 | case TYPE_LONGHAUL_V1: |
247 | case TYPE_LONGHAUL_V2: | 246 | case TYPE_LONGHAUL_V2: |
248 | rdmsrl (MSR_VIA_BCR2, bcr2.val); | 247 | do_longhaul1(cx->address, clock_ratio_index); |
249 | /* Enable software clock multiplier */ | ||
250 | bcr2.bits.ESOFTBF = 1; | ||
251 | bcr2.bits.CLOCKMUL = clock_ratio_index; | ||
252 | local_irq_disable(); | ||
253 | wrmsrl (MSR_VIA_BCR2, bcr2.val); | ||
254 | safe_halt(); | ||
255 | |||
256 | /* Disable software clock multiplier */ | ||
257 | rdmsrl (MSR_VIA_BCR2, bcr2.val); | ||
258 | bcr2.bits.ESOFTBF = 0; | ||
259 | local_irq_disable(); | ||
260 | wrmsrl (MSR_VIA_BCR2, bcr2.val); | ||
261 | local_irq_enable(); | ||
262 | break; | 248 | break; |
263 | 249 | ||
264 | /* | 250 | /* |
@@ -273,10 +259,22 @@ static void longhaul_setstate(unsigned int clock_ratio_index) | |||
273 | * to work in practice. | 259 | * to work in practice. |
274 | */ | 260 | */ |
275 | case TYPE_POWERSAVER: | 261 | case TYPE_POWERSAVER: |
276 | do_powersaver(&longhaul, clock_ratio_index); | 262 | do_powersaver(cx->address, clock_ratio_index); |
277 | break; | 263 | break; |
278 | } | 264 | } |
279 | 265 | ||
266 | /* Enable bus master arbitration */ | ||
267 | if (pr->flags.bm_check) { | ||
268 | acpi_set_register(ACPI_BITREG_ARB_DISABLE, 0, | ||
269 | ACPI_MTX_DO_NOT_LOCK); | ||
270 | } | ||
271 | |||
272 | outb(pic2_mask,0xA1); /* restore mask */ | ||
273 | outb(pic1_mask,0x21); | ||
274 | |||
275 | local_irq_restore(flags); | ||
276 | preempt_enable(); | ||
277 | |||
280 | cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE); | 278 | cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE); |
281 | } | 279 | } |
282 | 280 | ||
@@ -324,9 +322,11 @@ static int guess_fsb(void) | |||
324 | static int __init longhaul_get_ranges(void) | 322 | static int __init longhaul_get_ranges(void) |
325 | { | 323 | { |
326 | unsigned long invalue; | 324 | unsigned long invalue; |
327 | unsigned int multipliers[32]= { | 325 | unsigned int ezra_t_multipliers[32]= { |
328 | 50,30,40,100,55,35,45,95,90,70,80,60,120,75,85,65, | 326 | 90, 30, 40, 100, 55, 35, 45, 95, |
329 | -1,110,120,-1,135,115,125,105,130,150,160,140,-1,155,-1,145 }; | 327 | 50, 70, 80, 60, 120, 75, 85, 65, |
328 | -1, 110, 120, -1, 135, 115, 125, 105, | ||
329 | 130, 150, 160, 140, -1, 155, -1, 145 }; | ||
330 | unsigned int j, k = 0; | 330 | unsigned int j, k = 0; |
331 | union msr_longhaul longhaul; | 331 | union msr_longhaul longhaul; |
332 | unsigned long lo, hi; | 332 | unsigned long lo, hi; |
@@ -355,13 +355,13 @@ static int __init longhaul_get_ranges(void) | |||
355 | invalue = longhaul.bits.MaxMHzBR; | 355 | invalue = longhaul.bits.MaxMHzBR; |
356 | if (longhaul.bits.MaxMHzBR4) | 356 | if (longhaul.bits.MaxMHzBR4) |
357 | invalue += 16; | 357 | invalue += 16; |
358 | maxmult=multipliers[invalue]; | 358 | maxmult=ezra_t_multipliers[invalue]; |
359 | 359 | ||
360 | invalue = longhaul.bits.MinMHzBR; | 360 | invalue = longhaul.bits.MinMHzBR; |
361 | if (longhaul.bits.MinMHzBR4 == 1) | 361 | if (longhaul.bits.MinMHzBR4 == 1) |
362 | minmult = 30; | 362 | minmult = 30; |
363 | else | 363 | else |
364 | minmult = multipliers[invalue]; | 364 | minmult = ezra_t_multipliers[invalue]; |
365 | fsb = eblcr_fsb_table_v2[longhaul.bits.MaxMHzFSB]; | 365 | fsb = eblcr_fsb_table_v2[longhaul.bits.MaxMHzFSB]; |
366 | break; | 366 | break; |
367 | } | 367 | } |
@@ -527,6 +527,18 @@ static unsigned int longhaul_get(unsigned int cpu) | |||
527 | return calc_speed(longhaul_get_cpu_mult()); | 527 | return calc_speed(longhaul_get_cpu_mult()); |
528 | } | 528 | } |
529 | 529 | ||
530 | static acpi_status longhaul_walk_callback(acpi_handle obj_handle, | ||
531 | u32 nesting_level, | ||
532 | void *context, void **return_value) | ||
533 | { | ||
534 | struct acpi_device *d; | ||
535 | |||
536 | if ( acpi_bus_get_device(obj_handle, &d) ) { | ||
537 | return 0; | ||
538 | } | ||
539 | *return_value = (void *)acpi_driver_data(d); | ||
540 | return 1; | ||
541 | } | ||
530 | 542 | ||
531 | static int __init longhaul_cpu_init(struct cpufreq_policy *policy) | 543 | static int __init longhaul_cpu_init(struct cpufreq_policy *policy) |
532 | { | 544 | { |
@@ -534,6 +546,15 @@ static int __init longhaul_cpu_init(struct cpufreq_policy *policy) | |||
534 | char *cpuname=NULL; | 546 | char *cpuname=NULL; |
535 | int ret; | 547 | int ret; |
536 | 548 | ||
549 | /* Check ACPI support for C3 state */ | ||
550 | acpi_walk_namespace(ACPI_TYPE_PROCESSOR, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, | ||
551 | &longhaul_walk_callback, NULL, (void *)&pr); | ||
552 | if (pr == NULL) goto err_acpi; | ||
553 | |||
554 | cx = &pr->power.states[ACPI_STATE_C3]; | ||
555 | if (cx->address == 0 || cx->latency > 1000) goto err_acpi; | ||
556 | |||
557 | /* Now check what we have on this motherboard */ | ||
537 | switch (c->x86_model) { | 558 | switch (c->x86_model) { |
538 | case 6: | 559 | case 6: |
539 | cpu_model = CPU_SAMUEL; | 560 | cpu_model = CPU_SAMUEL; |
@@ -634,6 +655,10 @@ static int __init longhaul_cpu_init(struct cpufreq_policy *policy) | |||
634 | cpufreq_frequency_table_get_attr(longhaul_table, policy->cpu); | 655 | cpufreq_frequency_table_get_attr(longhaul_table, policy->cpu); |
635 | 656 | ||
636 | return 0; | 657 | return 0; |
658 | |||
659 | err_acpi: | ||
660 | printk(KERN_ERR PFX "No ACPI support for CPU frequency changes.\n"); | ||
661 | return -ENODEV; | ||
637 | } | 662 | } |
638 | 663 | ||
639 | static int __devexit longhaul_cpu_exit(struct cpufreq_policy *policy) | 664 | static int __devexit longhaul_cpu_exit(struct cpufreq_policy *policy) |
@@ -666,6 +691,18 @@ static int __init longhaul_init(void) | |||
666 | if (c->x86_vendor != X86_VENDOR_CENTAUR || c->x86 != 6) | 691 | if (c->x86_vendor != X86_VENDOR_CENTAUR || c->x86 != 6) |
667 | return -ENODEV; | 692 | return -ENODEV; |
668 | 693 | ||
694 | #ifdef CONFIG_SMP | ||
695 | if (num_online_cpus() > 1) { | ||
696 | return -ENODEV; | ||
697 | printk(KERN_ERR PFX "More than 1 CPU detected, longhaul disabled.\n"); | ||
698 | } | ||
699 | #endif | ||
700 | #ifdef CONFIG_X86_IO_APIC | ||
701 | if (cpu_has_apic) { | ||
702 | printk(KERN_ERR PFX "APIC detected. Longhaul is currently broken in this configuration.\n"); | ||
703 | return -ENODEV; | ||
704 | } | ||
705 | #endif | ||
669 | switch (c->x86_model) { | 706 | switch (c->x86_model) { |
670 | case 6 ... 9: | 707 | case 6 ... 9: |
671 | return cpufreq_register_driver(&longhaul_driver); | 708 | return cpufreq_register_driver(&longhaul_driver); |
@@ -699,6 +736,6 @@ MODULE_AUTHOR ("Dave Jones <davej@codemonkey.org.uk>"); | |||
699 | MODULE_DESCRIPTION ("Longhaul driver for VIA Cyrix processors."); | 736 | MODULE_DESCRIPTION ("Longhaul driver for VIA Cyrix processors."); |
700 | MODULE_LICENSE ("GPL"); | 737 | MODULE_LICENSE ("GPL"); |
701 | 738 | ||
702 | module_init(longhaul_init); | 739 | late_initcall(longhaul_init); |
703 | module_exit(longhaul_exit); | 740 | module_exit(longhaul_exit); |
704 | 741 | ||
diff --git a/arch/ia64/hp/sim/simscsi.c b/arch/ia64/hp/sim/simscsi.c index a3fe97531134..8a4f0d0d17a3 100644 --- a/arch/ia64/hp/sim/simscsi.c +++ b/arch/ia64/hp/sim/simscsi.c | |||
@@ -151,7 +151,7 @@ static void | |||
151 | simscsi_sg_readwrite (struct scsi_cmnd *sc, int mode, unsigned long offset) | 151 | simscsi_sg_readwrite (struct scsi_cmnd *sc, int mode, unsigned long offset) |
152 | { | 152 | { |
153 | int list_len = sc->use_sg; | 153 | int list_len = sc->use_sg; |
154 | struct scatterlist *sl = (struct scatterlist *)sc->buffer; | 154 | struct scatterlist *sl = (struct scatterlist *)sc->request_buffer; |
155 | struct disk_stat stat; | 155 | struct disk_stat stat; |
156 | struct disk_req req; | 156 | struct disk_req req; |
157 | 157 | ||
@@ -244,7 +244,7 @@ static void simscsi_fillresult(struct scsi_cmnd *sc, char *buf, unsigned len) | |||
244 | 244 | ||
245 | if (scatterlen == 0) | 245 | if (scatterlen == 0) |
246 | memcpy(sc->request_buffer, buf, len); | 246 | memcpy(sc->request_buffer, buf, len); |
247 | else for (slp = (struct scatterlist *)sc->buffer; scatterlen-- > 0 && len > 0; slp++) { | 247 | else for (slp = (struct scatterlist *)sc->request_buffer; scatterlen-- > 0 && len > 0; slp++) { |
248 | unsigned thislen = min(len, slp->length); | 248 | unsigned thislen = min(len, slp->length); |
249 | 249 | ||
250 | memcpy(page_address(slp->page) + slp->offset, buf, thislen); | 250 | memcpy(page_address(slp->page) + slp->offset, buf, thislen); |
diff --git a/arch/ia64/kernel/efi.c b/arch/ia64/kernel/efi.c index e4bfa9dafbce..bb8770a177b5 100644 --- a/arch/ia64/kernel/efi.c +++ b/arch/ia64/kernel/efi.c | |||
@@ -632,7 +632,7 @@ kern_memory_descriptor (unsigned long phys_addr) | |||
632 | if (phys_addr - md->start < (md->num_pages << EFI_PAGE_SHIFT)) | 632 | if (phys_addr - md->start < (md->num_pages << EFI_PAGE_SHIFT)) |
633 | return md; | 633 | return md; |
634 | } | 634 | } |
635 | return 0; | 635 | return NULL; |
636 | } | 636 | } |
637 | 637 | ||
638 | static efi_memory_desc_t * | 638 | static efi_memory_desc_t * |
@@ -652,7 +652,7 @@ efi_memory_descriptor (unsigned long phys_addr) | |||
652 | if (phys_addr - md->phys_addr < (md->num_pages << EFI_PAGE_SHIFT)) | 652 | if (phys_addr - md->phys_addr < (md->num_pages << EFI_PAGE_SHIFT)) |
653 | return md; | 653 | return md; |
654 | } | 654 | } |
655 | return 0; | 655 | return NULL; |
656 | } | 656 | } |
657 | 657 | ||
658 | u32 | 658 | u32 |
@@ -923,7 +923,7 @@ find_memmap_space (void) | |||
923 | void | 923 | void |
924 | efi_memmap_init(unsigned long *s, unsigned long *e) | 924 | efi_memmap_init(unsigned long *s, unsigned long *e) |
925 | { | 925 | { |
926 | struct kern_memdesc *k, *prev = 0; | 926 | struct kern_memdesc *k, *prev = NULL; |
927 | u64 contig_low=0, contig_high=0; | 927 | u64 contig_low=0, contig_high=0; |
928 | u64 as, ae, lim; | 928 | u64 as, ae, lim; |
929 | void *efi_map_start, *efi_map_end, *p, *q; | 929 | void *efi_map_start, *efi_map_end, *p, *q; |
diff --git a/arch/ia64/kernel/head.S b/arch/ia64/kernel/head.S index 561b8f1d3bc7..29236f0c62b5 100644 --- a/arch/ia64/kernel/head.S +++ b/arch/ia64/kernel/head.S | |||
@@ -853,7 +853,6 @@ END(__ia64_init_fpu) | |||
853 | */ | 853 | */ |
854 | GLOBAL_ENTRY(ia64_switch_mode_phys) | 854 | GLOBAL_ENTRY(ia64_switch_mode_phys) |
855 | { | 855 | { |
856 | alloc r2=ar.pfs,0,0,0,0 | ||
857 | rsm psr.i | psr.ic // disable interrupts and interrupt collection | 856 | rsm psr.i | psr.ic // disable interrupts and interrupt collection |
858 | mov r15=ip | 857 | mov r15=ip |
859 | } | 858 | } |
@@ -902,7 +901,6 @@ END(ia64_switch_mode_phys) | |||
902 | */ | 901 | */ |
903 | GLOBAL_ENTRY(ia64_switch_mode_virt) | 902 | GLOBAL_ENTRY(ia64_switch_mode_virt) |
904 | { | 903 | { |
905 | alloc r2=ar.pfs,0,0,0,0 | ||
906 | rsm psr.i | psr.ic // disable interrupts and interrupt collection | 904 | rsm psr.i | psr.ic // disable interrupts and interrupt collection |
907 | mov r15=ip | 905 | mov r15=ip |
908 | } | 906 | } |
diff --git a/arch/ia64/kernel/ia64_ksyms.c b/arch/ia64/kernel/ia64_ksyms.c index b7cf651ceb14..3ead20fb6f4b 100644 --- a/arch/ia64/kernel/ia64_ksyms.c +++ b/arch/ia64/kernel/ia64_ksyms.c | |||
@@ -62,7 +62,7 @@ EXPORT_SYMBOL(__udivdi3); | |||
62 | EXPORT_SYMBOL(__moddi3); | 62 | EXPORT_SYMBOL(__moddi3); |
63 | EXPORT_SYMBOL(__umoddi3); | 63 | EXPORT_SYMBOL(__umoddi3); |
64 | 64 | ||
65 | #if defined(CONFIG_MD_RAID5) || defined(CONFIG_MD_RAID5_MODULE) | 65 | #if defined(CONFIG_MD_RAID456) || defined(CONFIG_MD_RAID456_MODULE) |
66 | extern void xor_ia64_2(void); | 66 | extern void xor_ia64_2(void); |
67 | extern void xor_ia64_3(void); | 67 | extern void xor_ia64_3(void); |
68 | extern void xor_ia64_4(void); | 68 | extern void xor_ia64_4(void); |
diff --git a/arch/ia64/kernel/pal.S b/arch/ia64/kernel/pal.S index 5018c7f2e7a8..ebaf1e685f5e 100644 --- a/arch/ia64/kernel/pal.S +++ b/arch/ia64/kernel/pal.S | |||
@@ -217,12 +217,7 @@ GLOBAL_ENTRY(ia64_pal_call_phys_stacked) | |||
217 | .body | 217 | .body |
218 | ;; | 218 | ;; |
219 | ld8 loc2 = [loc2] // loc2 <- entry point | 219 | ld8 loc2 = [loc2] // loc2 <- entry point |
220 | mov out0 = in0 // first argument | 220 | mov loc3 = psr // save psr |
221 | mov out1 = in1 // copy arg2 | ||
222 | mov out2 = in2 // copy arg3 | ||
223 | mov out3 = in3 // copy arg3 | ||
224 | ;; | ||
225 | mov loc3 = psr // save psr | ||
226 | ;; | 221 | ;; |
227 | mov loc4=ar.rsc // save RSE configuration | 222 | mov loc4=ar.rsc // save RSE configuration |
228 | dep.z loc2=loc2,0,61 // convert pal entry point to physical | 223 | dep.z loc2=loc2,0,61 // convert pal entry point to physical |
@@ -236,18 +231,23 @@ GLOBAL_ENTRY(ia64_pal_call_phys_stacked) | |||
236 | ;; | 231 | ;; |
237 | andcm r16=loc3,r16 // removes bits to clear from psr | 232 | andcm r16=loc3,r16 // removes bits to clear from psr |
238 | br.call.sptk.many rp=ia64_switch_mode_phys | 233 | br.call.sptk.many rp=ia64_switch_mode_phys |
239 | .ret6: | 234 | |
235 | mov out0 = in0 // first argument | ||
236 | mov out1 = in1 // copy arg2 | ||
237 | mov out2 = in2 // copy arg3 | ||
238 | mov out3 = in3 // copy arg3 | ||
240 | mov loc5 = r19 | 239 | mov loc5 = r19 |
241 | mov loc6 = r20 | 240 | mov loc6 = r20 |
241 | |||
242 | br.call.sptk.many rp=b7 // now make the call | 242 | br.call.sptk.many rp=b7 // now make the call |
243 | .ret7: | 243 | |
244 | mov ar.rsc=0 // put RSE in enforced lazy, LE mode | 244 | mov ar.rsc=0 // put RSE in enforced lazy, LE mode |
245 | mov r16=loc3 // r16= original psr | 245 | mov r16=loc3 // r16= original psr |
246 | mov r19=loc5 | 246 | mov r19=loc5 |
247 | mov r20=loc6 | 247 | mov r20=loc6 |
248 | br.call.sptk.many rp=ia64_switch_mode_virt // return to virtual mode | 248 | br.call.sptk.many rp=ia64_switch_mode_virt // return to virtual mode |
249 | 249 | ||
250 | .ret8: mov psr.l = loc3 // restore init PSR | 250 | mov psr.l = loc3 // restore init PSR |
251 | mov ar.pfs = loc1 | 251 | mov ar.pfs = loc1 |
252 | mov rp = loc0 | 252 | mov rp = loc0 |
253 | ;; | 253 | ;; |
diff --git a/arch/ia64/kernel/palinfo.c b/arch/ia64/kernel/palinfo.c index ab5b52413e91..0b546e2b36ac 100644 --- a/arch/ia64/kernel/palinfo.c +++ b/arch/ia64/kernel/palinfo.c | |||
@@ -566,29 +566,23 @@ version_info(char *page) | |||
566 | pal_version_u_t min_ver, cur_ver; | 566 | pal_version_u_t min_ver, cur_ver; |
567 | char *p = page; | 567 | char *p = page; |
568 | 568 | ||
569 | /* The PAL_VERSION call is advertised as being able to support | 569 | if (ia64_pal_version(&min_ver, &cur_ver) != 0) |
570 | * both physical and virtual mode calls. This seems to be a documentation | 570 | return 0; |
571 | * bug rather than firmware bug. In fact, it does only support physical mode. | ||
572 | * So now the code reflects this fact and the pal_version() has been updated | ||
573 | * accordingly. | ||
574 | */ | ||
575 | if (ia64_pal_version(&min_ver, &cur_ver) != 0) return 0; | ||
576 | 571 | ||
577 | p += sprintf(p, | 572 | p += sprintf(p, |
578 | "PAL_vendor : 0x%02x (min=0x%02x)\n" | 573 | "PAL_vendor : 0x%02x (min=0x%02x)\n" |
579 | "PAL_A : %x.%x.%x (min=%x.%x.%x)\n" | 574 | "PAL_A : %02x.%02x (min=%02x.%02x)\n" |
580 | "PAL_B : %x.%x.%x (min=%x.%x.%x)\n", | 575 | "PAL_B : %02x.%02x (min=%02x.%02x)\n", |
581 | cur_ver.pal_version_s.pv_pal_vendor, min_ver.pal_version_s.pv_pal_vendor, | 576 | cur_ver.pal_version_s.pv_pal_vendor, |
582 | 577 | min_ver.pal_version_s.pv_pal_vendor, | |
583 | cur_ver.pal_version_s.pv_pal_a_model>>4, | 578 | cur_ver.pal_version_s.pv_pal_a_model, |
584 | cur_ver.pal_version_s.pv_pal_a_model&0xf, cur_ver.pal_version_s.pv_pal_a_rev, | 579 | cur_ver.pal_version_s.pv_pal_a_rev, |
585 | min_ver.pal_version_s.pv_pal_a_model>>4, | 580 | min_ver.pal_version_s.pv_pal_a_model, |
586 | min_ver.pal_version_s.pv_pal_a_model&0xf, min_ver.pal_version_s.pv_pal_a_rev, | 581 | min_ver.pal_version_s.pv_pal_a_rev, |
587 | 582 | cur_ver.pal_version_s.pv_pal_b_model, | |
588 | cur_ver.pal_version_s.pv_pal_b_model>>4, | 583 | cur_ver.pal_version_s.pv_pal_b_rev, |
589 | cur_ver.pal_version_s.pv_pal_b_model&0xf, cur_ver.pal_version_s.pv_pal_b_rev, | 584 | min_ver.pal_version_s.pv_pal_b_model, |
590 | min_ver.pal_version_s.pv_pal_b_model>>4, | 585 | min_ver.pal_version_s.pv_pal_b_rev); |
591 | min_ver.pal_version_s.pv_pal_b_model&0xf, min_ver.pal_version_s.pv_pal_b_rev); | ||
592 | return p - page; | 586 | return p - page; |
593 | } | 587 | } |
594 | 588 | ||
diff --git a/arch/ia64/kernel/uncached.c b/arch/ia64/kernel/uncached.c index 5f03b9e524dd..4c73a6763669 100644 --- a/arch/ia64/kernel/uncached.c +++ b/arch/ia64/kernel/uncached.c | |||
@@ -32,32 +32,38 @@ | |||
32 | 32 | ||
33 | extern void __init efi_memmap_walk_uc(efi_freemem_callback_t, void *); | 33 | extern void __init efi_memmap_walk_uc(efi_freemem_callback_t, void *); |
34 | 34 | ||
35 | #define MAX_UNCACHED_GRANULES 5 | 35 | struct uncached_pool { |
36 | static int allocated_granules; | 36 | struct gen_pool *pool; |
37 | struct mutex add_chunk_mutex; /* serialize adding a converted chunk */ | ||
38 | int nchunks_added; /* #of converted chunks added to pool */ | ||
39 | atomic_t status; /* smp called function's return status*/ | ||
40 | }; | ||
41 | |||
42 | #define MAX_CONVERTED_CHUNKS_PER_NODE 2 | ||
37 | 43 | ||
38 | struct gen_pool *uncached_pool[MAX_NUMNODES]; | 44 | struct uncached_pool uncached_pools[MAX_NUMNODES]; |
39 | 45 | ||
40 | 46 | ||
41 | static void uncached_ipi_visibility(void *data) | 47 | static void uncached_ipi_visibility(void *data) |
42 | { | 48 | { |
43 | int status; | 49 | int status; |
50 | struct uncached_pool *uc_pool = (struct uncached_pool *)data; | ||
44 | 51 | ||
45 | status = ia64_pal_prefetch_visibility(PAL_VISIBILITY_PHYSICAL); | 52 | status = ia64_pal_prefetch_visibility(PAL_VISIBILITY_PHYSICAL); |
46 | if ((status != PAL_VISIBILITY_OK) && | 53 | if ((status != PAL_VISIBILITY_OK) && |
47 | (status != PAL_VISIBILITY_OK_REMOTE_NEEDED)) | 54 | (status != PAL_VISIBILITY_OK_REMOTE_NEEDED)) |
48 | printk(KERN_DEBUG "pal_prefetch_visibility() returns %i on " | 55 | atomic_inc(&uc_pool->status); |
49 | "CPU %i\n", status, raw_smp_processor_id()); | ||
50 | } | 56 | } |
51 | 57 | ||
52 | 58 | ||
53 | static void uncached_ipi_mc_drain(void *data) | 59 | static void uncached_ipi_mc_drain(void *data) |
54 | { | 60 | { |
55 | int status; | 61 | int status; |
62 | struct uncached_pool *uc_pool = (struct uncached_pool *)data; | ||
56 | 63 | ||
57 | status = ia64_pal_mc_drain(); | 64 | status = ia64_pal_mc_drain(); |
58 | if (status) | 65 | if (status != PAL_STATUS_SUCCESS) |
59 | printk(KERN_WARNING "ia64_pal_mc_drain() failed with %i on " | 66 | atomic_inc(&uc_pool->status); |
60 | "CPU %i\n", status, raw_smp_processor_id()); | ||
61 | } | 67 | } |
62 | 68 | ||
63 | 69 | ||
@@ -70,21 +76,34 @@ static void uncached_ipi_mc_drain(void *data) | |||
70 | * This is accomplished by first allocating a granule of cached memory pages | 76 | * This is accomplished by first allocating a granule of cached memory pages |
71 | * and then converting them to uncached memory pages. | 77 | * and then converting them to uncached memory pages. |
72 | */ | 78 | */ |
73 | static int uncached_add_chunk(struct gen_pool *pool, int nid) | 79 | static int uncached_add_chunk(struct uncached_pool *uc_pool, int nid) |
74 | { | 80 | { |
75 | struct page *page; | 81 | struct page *page; |
76 | int status, i; | 82 | int status, i, nchunks_added = uc_pool->nchunks_added; |
77 | unsigned long c_addr, uc_addr; | 83 | unsigned long c_addr, uc_addr; |
78 | 84 | ||
79 | if (allocated_granules >= MAX_UNCACHED_GRANULES) | 85 | if (mutex_lock_interruptible(&uc_pool->add_chunk_mutex) != 0) |
86 | return -1; /* interrupted by a signal */ | ||
87 | |||
88 | if (uc_pool->nchunks_added > nchunks_added) { | ||
89 | /* someone added a new chunk while we were waiting */ | ||
90 | mutex_unlock(&uc_pool->add_chunk_mutex); | ||
91 | return 0; | ||
92 | } | ||
93 | |||
94 | if (uc_pool->nchunks_added >= MAX_CONVERTED_CHUNKS_PER_NODE) { | ||
95 | mutex_unlock(&uc_pool->add_chunk_mutex); | ||
80 | return -1; | 96 | return -1; |
97 | } | ||
81 | 98 | ||
82 | /* attempt to allocate a granule's worth of cached memory pages */ | 99 | /* attempt to allocate a granule's worth of cached memory pages */ |
83 | 100 | ||
84 | page = alloc_pages_node(nid, GFP_KERNEL | __GFP_ZERO, | 101 | page = alloc_pages_node(nid, GFP_KERNEL | __GFP_ZERO, |
85 | IA64_GRANULE_SHIFT-PAGE_SHIFT); | 102 | IA64_GRANULE_SHIFT-PAGE_SHIFT); |
86 | if (!page) | 103 | if (!page) { |
104 | mutex_unlock(&uc_pool->add_chunk_mutex); | ||
87 | return -1; | 105 | return -1; |
106 | } | ||
88 | 107 | ||
89 | /* convert the memory pages from cached to uncached */ | 108 | /* convert the memory pages from cached to uncached */ |
90 | 109 | ||
@@ -102,11 +121,14 @@ static int uncached_add_chunk(struct gen_pool *pool, int nid) | |||
102 | flush_tlb_kernel_range(uc_addr, uc_adddr + IA64_GRANULE_SIZE); | 121 | flush_tlb_kernel_range(uc_addr, uc_adddr + IA64_GRANULE_SIZE); |
103 | 122 | ||
104 | status = ia64_pal_prefetch_visibility(PAL_VISIBILITY_PHYSICAL); | 123 | status = ia64_pal_prefetch_visibility(PAL_VISIBILITY_PHYSICAL); |
105 | if (!status) { | 124 | if (status == PAL_VISIBILITY_OK_REMOTE_NEEDED) { |
106 | status = smp_call_function(uncached_ipi_visibility, NULL, 0, 1); | 125 | atomic_set(&uc_pool->status, 0); |
107 | if (status) | 126 | status = smp_call_function(uncached_ipi_visibility, uc_pool, |
127 | 0, 1); | ||
128 | if (status || atomic_read(&uc_pool->status)) | ||
108 | goto failed; | 129 | goto failed; |
109 | } | 130 | } else if (status != PAL_VISIBILITY_OK) |
131 | goto failed; | ||
110 | 132 | ||
111 | preempt_disable(); | 133 | preempt_disable(); |
112 | 134 | ||
@@ -120,20 +142,24 @@ static int uncached_add_chunk(struct gen_pool *pool, int nid) | |||
120 | 142 | ||
121 | preempt_enable(); | 143 | preempt_enable(); |
122 | 144 | ||
123 | ia64_pal_mc_drain(); | 145 | status = ia64_pal_mc_drain(); |
124 | status = smp_call_function(uncached_ipi_mc_drain, NULL, 0, 1); | 146 | if (status != PAL_STATUS_SUCCESS) |
125 | if (status) | 147 | goto failed; |
148 | atomic_set(&uc_pool->status, 0); | ||
149 | status = smp_call_function(uncached_ipi_mc_drain, uc_pool, 0, 1); | ||
150 | if (status || atomic_read(&uc_pool->status)) | ||
126 | goto failed; | 151 | goto failed; |
127 | 152 | ||
128 | /* | 153 | /* |
129 | * The chunk of memory pages has been converted to uncached so now we | 154 | * The chunk of memory pages has been converted to uncached so now we |
130 | * can add it to the pool. | 155 | * can add it to the pool. |
131 | */ | 156 | */ |
132 | status = gen_pool_add(pool, uc_addr, IA64_GRANULE_SIZE, nid); | 157 | status = gen_pool_add(uc_pool->pool, uc_addr, IA64_GRANULE_SIZE, nid); |
133 | if (status) | 158 | if (status) |
134 | goto failed; | 159 | goto failed; |
135 | 160 | ||
136 | allocated_granules++; | 161 | uc_pool->nchunks_added++; |
162 | mutex_unlock(&uc_pool->add_chunk_mutex); | ||
137 | return 0; | 163 | return 0; |
138 | 164 | ||
139 | /* failed to convert or add the chunk so give it back to the kernel */ | 165 | /* failed to convert or add the chunk so give it back to the kernel */ |
@@ -142,6 +168,7 @@ failed: | |||
142 | ClearPageUncached(&page[i]); | 168 | ClearPageUncached(&page[i]); |
143 | 169 | ||
144 | free_pages(c_addr, IA64_GRANULE_SHIFT-PAGE_SHIFT); | 170 | free_pages(c_addr, IA64_GRANULE_SHIFT-PAGE_SHIFT); |
171 | mutex_unlock(&uc_pool->add_chunk_mutex); | ||
145 | return -1; | 172 | return -1; |
146 | } | 173 | } |
147 | 174 | ||
@@ -158,7 +185,7 @@ failed: | |||
158 | unsigned long uncached_alloc_page(int starting_nid) | 185 | unsigned long uncached_alloc_page(int starting_nid) |
159 | { | 186 | { |
160 | unsigned long uc_addr; | 187 | unsigned long uc_addr; |
161 | struct gen_pool *pool; | 188 | struct uncached_pool *uc_pool; |
162 | int nid; | 189 | int nid; |
163 | 190 | ||
164 | if (unlikely(starting_nid >= MAX_NUMNODES)) | 191 | if (unlikely(starting_nid >= MAX_NUMNODES)) |
@@ -171,14 +198,14 @@ unsigned long uncached_alloc_page(int starting_nid) | |||
171 | do { | 198 | do { |
172 | if (!node_online(nid)) | 199 | if (!node_online(nid)) |
173 | continue; | 200 | continue; |
174 | pool = uncached_pool[nid]; | 201 | uc_pool = &uncached_pools[nid]; |
175 | if (pool == NULL) | 202 | if (uc_pool->pool == NULL) |
176 | continue; | 203 | continue; |
177 | do { | 204 | do { |
178 | uc_addr = gen_pool_alloc(pool, PAGE_SIZE); | 205 | uc_addr = gen_pool_alloc(uc_pool->pool, PAGE_SIZE); |
179 | if (uc_addr != 0) | 206 | if (uc_addr != 0) |
180 | return uc_addr; | 207 | return uc_addr; |
181 | } while (uncached_add_chunk(pool, nid) == 0); | 208 | } while (uncached_add_chunk(uc_pool, nid) == 0); |
182 | 209 | ||
183 | } while ((nid = (nid + 1) % MAX_NUMNODES) != starting_nid); | 210 | } while ((nid = (nid + 1) % MAX_NUMNODES) != starting_nid); |
184 | 211 | ||
@@ -197,7 +224,7 @@ EXPORT_SYMBOL(uncached_alloc_page); | |||
197 | void uncached_free_page(unsigned long uc_addr) | 224 | void uncached_free_page(unsigned long uc_addr) |
198 | { | 225 | { |
199 | int nid = paddr_to_nid(uc_addr - __IA64_UNCACHED_OFFSET); | 226 | int nid = paddr_to_nid(uc_addr - __IA64_UNCACHED_OFFSET); |
200 | struct gen_pool *pool = uncached_pool[nid]; | 227 | struct gen_pool *pool = uncached_pools[nid].pool; |
201 | 228 | ||
202 | if (unlikely(pool == NULL)) | 229 | if (unlikely(pool == NULL)) |
203 | return; | 230 | return; |
@@ -224,7 +251,7 @@ static int __init uncached_build_memmap(unsigned long uc_start, | |||
224 | unsigned long uc_end, void *arg) | 251 | unsigned long uc_end, void *arg) |
225 | { | 252 | { |
226 | int nid = paddr_to_nid(uc_start - __IA64_UNCACHED_OFFSET); | 253 | int nid = paddr_to_nid(uc_start - __IA64_UNCACHED_OFFSET); |
227 | struct gen_pool *pool = uncached_pool[nid]; | 254 | struct gen_pool *pool = uncached_pools[nid].pool; |
228 | size_t size = uc_end - uc_start; | 255 | size_t size = uc_end - uc_start; |
229 | 256 | ||
230 | touch_softlockup_watchdog(); | 257 | touch_softlockup_watchdog(); |
@@ -242,7 +269,8 @@ static int __init uncached_init(void) | |||
242 | int nid; | 269 | int nid; |
243 | 270 | ||
244 | for_each_online_node(nid) { | 271 | for_each_online_node(nid) { |
245 | uncached_pool[nid] = gen_pool_create(PAGE_SHIFT, nid); | 272 | uncached_pools[nid].pool = gen_pool_create(PAGE_SHIFT, nid); |
273 | mutex_init(&uncached_pools[nid].add_chunk_mutex); | ||
246 | } | 274 | } |
247 | 275 | ||
248 | efi_memmap_walk_uc(uncached_build_memmap, NULL); | 276 | efi_memmap_walk_uc(uncached_build_memmap, NULL); |
diff --git a/arch/ia64/lib/Makefile b/arch/ia64/lib/Makefile index d8536a2c22a9..38fa6e49e791 100644 --- a/arch/ia64/lib/Makefile +++ b/arch/ia64/lib/Makefile | |||
@@ -14,7 +14,7 @@ lib-y := __divsi3.o __udivsi3.o __modsi3.o __umodsi3.o \ | |||
14 | lib-$(CONFIG_ITANIUM) += copy_page.o copy_user.o memcpy.o | 14 | lib-$(CONFIG_ITANIUM) += copy_page.o copy_user.o memcpy.o |
15 | lib-$(CONFIG_MCKINLEY) += copy_page_mck.o memcpy_mck.o | 15 | lib-$(CONFIG_MCKINLEY) += copy_page_mck.o memcpy_mck.o |
16 | lib-$(CONFIG_PERFMON) += carta_random.o | 16 | lib-$(CONFIG_PERFMON) += carta_random.o |
17 | lib-$(CONFIG_MD_RAID5) += xor.o | 17 | lib-$(CONFIG_MD_RAID456) += xor.o |
18 | 18 | ||
19 | AFLAGS___divdi3.o = | 19 | AFLAGS___divdi3.o = |
20 | AFLAGS___udivdi3.o = -DUNSIGNED | 20 | AFLAGS___udivdi3.o = -DUNSIGNED |
diff --git a/arch/ia64/mm/contig.c b/arch/ia64/mm/contig.c index 2a88cdd6d924..e004143ba86b 100644 --- a/arch/ia64/mm/contig.c +++ b/arch/ia64/mm/contig.c | |||
@@ -27,6 +27,7 @@ | |||
27 | 27 | ||
28 | #ifdef CONFIG_VIRTUAL_MEM_MAP | 28 | #ifdef CONFIG_VIRTUAL_MEM_MAP |
29 | static unsigned long num_dma_physpages; | 29 | static unsigned long num_dma_physpages; |
30 | static unsigned long max_gap; | ||
30 | #endif | 31 | #endif |
31 | 32 | ||
32 | /** | 33 | /** |
@@ -45,9 +46,15 @@ show_mem (void) | |||
45 | 46 | ||
46 | printk("Free swap: %6ldkB\n", nr_swap_pages<<(PAGE_SHIFT-10)); | 47 | printk("Free swap: %6ldkB\n", nr_swap_pages<<(PAGE_SHIFT-10)); |
47 | i = max_mapnr; | 48 | i = max_mapnr; |
48 | while (i-- > 0) { | 49 | for (i = 0; i < max_mapnr; i++) { |
49 | if (!pfn_valid(i)) | 50 | if (!pfn_valid(i)) { |
51 | #ifdef CONFIG_VIRTUAL_MEM_MAP | ||
52 | if (max_gap < LARGE_GAP) | ||
53 | continue; | ||
54 | i = vmemmap_find_next_valid_pfn(0, i) - 1; | ||
55 | #endif | ||
50 | continue; | 56 | continue; |
57 | } | ||
51 | total++; | 58 | total++; |
52 | if (PageReserved(mem_map+i)) | 59 | if (PageReserved(mem_map+i)) |
53 | reserved++; | 60 | reserved++; |
@@ -234,7 +241,6 @@ paging_init (void) | |||
234 | unsigned long zones_size[MAX_NR_ZONES]; | 241 | unsigned long zones_size[MAX_NR_ZONES]; |
235 | #ifdef CONFIG_VIRTUAL_MEM_MAP | 242 | #ifdef CONFIG_VIRTUAL_MEM_MAP |
236 | unsigned long zholes_size[MAX_NR_ZONES]; | 243 | unsigned long zholes_size[MAX_NR_ZONES]; |
237 | unsigned long max_gap; | ||
238 | #endif | 244 | #endif |
239 | 245 | ||
240 | /* initialize mem_map[] */ | 246 | /* initialize mem_map[] */ |
@@ -266,7 +272,6 @@ paging_init (void) | |||
266 | } | 272 | } |
267 | } | 273 | } |
268 | 274 | ||
269 | max_gap = 0; | ||
270 | efi_memmap_walk(find_largest_hole, (u64 *)&max_gap); | 275 | efi_memmap_walk(find_largest_hole, (u64 *)&max_gap); |
271 | if (max_gap < LARGE_GAP) { | 276 | if (max_gap < LARGE_GAP) { |
272 | vmem_map = (struct page *) 0; | 277 | vmem_map = (struct page *) 0; |
@@ -277,7 +282,8 @@ paging_init (void) | |||
277 | 282 | ||
278 | /* allocate virtual_mem_map */ | 283 | /* allocate virtual_mem_map */ |
279 | 284 | ||
280 | map_size = PAGE_ALIGN(max_low_pfn * sizeof(struct page)); | 285 | map_size = PAGE_ALIGN(ALIGN(max_low_pfn, MAX_ORDER_NR_PAGES) * |
286 | sizeof(struct page)); | ||
281 | vmalloc_end -= map_size; | 287 | vmalloc_end -= map_size; |
282 | vmem_map = (struct page *) vmalloc_end; | 288 | vmem_map = (struct page *) vmalloc_end; |
283 | efi_memmap_walk(create_mem_map_page_table, NULL); | 289 | efi_memmap_walk(create_mem_map_page_table, NULL); |
diff --git a/arch/ia64/mm/discontig.c b/arch/ia64/mm/discontig.c index 99bd9e30db96..d260bffa01ab 100644 --- a/arch/ia64/mm/discontig.c +++ b/arch/ia64/mm/discontig.c | |||
@@ -534,68 +534,6 @@ void __cpuinit *per_cpu_init(void) | |||
534 | } | 534 | } |
535 | #endif /* CONFIG_SMP */ | 535 | #endif /* CONFIG_SMP */ |
536 | 536 | ||
537 | #ifdef CONFIG_VIRTUAL_MEM_MAP | ||
538 | static inline int find_next_valid_pfn_for_pgdat(pg_data_t *pgdat, int i) | ||
539 | { | ||
540 | unsigned long end_address, hole_next_pfn; | ||
541 | unsigned long stop_address; | ||
542 | |||
543 | end_address = (unsigned long) &vmem_map[pgdat->node_start_pfn + i]; | ||
544 | end_address = PAGE_ALIGN(end_address); | ||
545 | |||
546 | stop_address = (unsigned long) &vmem_map[ | ||
547 | pgdat->node_start_pfn + pgdat->node_spanned_pages]; | ||
548 | |||
549 | do { | ||
550 | pgd_t *pgd; | ||
551 | pud_t *pud; | ||
552 | pmd_t *pmd; | ||
553 | pte_t *pte; | ||
554 | |||
555 | pgd = pgd_offset_k(end_address); | ||
556 | if (pgd_none(*pgd)) { | ||
557 | end_address += PGDIR_SIZE; | ||
558 | continue; | ||
559 | } | ||
560 | |||
561 | pud = pud_offset(pgd, end_address); | ||
562 | if (pud_none(*pud)) { | ||
563 | end_address += PUD_SIZE; | ||
564 | continue; | ||
565 | } | ||
566 | |||
567 | pmd = pmd_offset(pud, end_address); | ||
568 | if (pmd_none(*pmd)) { | ||
569 | end_address += PMD_SIZE; | ||
570 | continue; | ||
571 | } | ||
572 | |||
573 | pte = pte_offset_kernel(pmd, end_address); | ||
574 | retry_pte: | ||
575 | if (pte_none(*pte)) { | ||
576 | end_address += PAGE_SIZE; | ||
577 | pte++; | ||
578 | if ((end_address < stop_address) && | ||
579 | (end_address != ALIGN(end_address, 1UL << PMD_SHIFT))) | ||
580 | goto retry_pte; | ||
581 | continue; | ||
582 | } | ||
583 | /* Found next valid vmem_map page */ | ||
584 | break; | ||
585 | } while (end_address < stop_address); | ||
586 | |||
587 | end_address = min(end_address, stop_address); | ||
588 | end_address = end_address - (unsigned long) vmem_map + sizeof(struct page) - 1; | ||
589 | hole_next_pfn = end_address / sizeof(struct page); | ||
590 | return hole_next_pfn - pgdat->node_start_pfn; | ||
591 | } | ||
592 | #else | ||
593 | static inline int find_next_valid_pfn_for_pgdat(pg_data_t *pgdat, int i) | ||
594 | { | ||
595 | return i + 1; | ||
596 | } | ||
597 | #endif | ||
598 | |||
599 | /** | 537 | /** |
600 | * show_mem - give short summary of memory stats | 538 | * show_mem - give short summary of memory stats |
601 | * | 539 | * |
@@ -625,7 +563,8 @@ void show_mem(void) | |||
625 | if (pfn_valid(pgdat->node_start_pfn + i)) | 563 | if (pfn_valid(pgdat->node_start_pfn + i)) |
626 | page = pfn_to_page(pgdat->node_start_pfn + i); | 564 | page = pfn_to_page(pgdat->node_start_pfn + i); |
627 | else { | 565 | else { |
628 | i = find_next_valid_pfn_for_pgdat(pgdat, i) - 1; | 566 | i = vmemmap_find_next_valid_pfn(pgdat->node_id, |
567 | i) - 1; | ||
629 | continue; | 568 | continue; |
630 | } | 569 | } |
631 | if (PageReserved(page)) | 570 | if (PageReserved(page)) |
@@ -751,7 +690,8 @@ void __init paging_init(void) | |||
751 | efi_memmap_walk(filter_rsvd_memory, count_node_pages); | 690 | efi_memmap_walk(filter_rsvd_memory, count_node_pages); |
752 | 691 | ||
753 | #ifdef CONFIG_VIRTUAL_MEM_MAP | 692 | #ifdef CONFIG_VIRTUAL_MEM_MAP |
754 | vmalloc_end -= PAGE_ALIGN(max_low_pfn * sizeof(struct page)); | 693 | vmalloc_end -= PAGE_ALIGN(ALIGN(max_low_pfn, MAX_ORDER_NR_PAGES) * |
694 | sizeof(struct page)); | ||
755 | vmem_map = (struct page *) vmalloc_end; | 695 | vmem_map = (struct page *) vmalloc_end; |
756 | efi_memmap_walk(create_mem_map_page_table, NULL); | 696 | efi_memmap_walk(create_mem_map_page_table, NULL); |
757 | printk("Virtual mem_map starts at 0x%p\n", vmem_map); | 697 | printk("Virtual mem_map starts at 0x%p\n", vmem_map); |
diff --git a/arch/ia64/mm/init.c b/arch/ia64/mm/init.c index 2f50c064513c..30617ccb4f7e 100644 --- a/arch/ia64/mm/init.c +++ b/arch/ia64/mm/init.c | |||
@@ -415,6 +415,61 @@ ia64_mmu_init (void *my_cpu_data) | |||
415 | } | 415 | } |
416 | 416 | ||
417 | #ifdef CONFIG_VIRTUAL_MEM_MAP | 417 | #ifdef CONFIG_VIRTUAL_MEM_MAP |
418 | int vmemmap_find_next_valid_pfn(int node, int i) | ||
419 | { | ||
420 | unsigned long end_address, hole_next_pfn; | ||
421 | unsigned long stop_address; | ||
422 | pg_data_t *pgdat = NODE_DATA(node); | ||
423 | |||
424 | end_address = (unsigned long) &vmem_map[pgdat->node_start_pfn + i]; | ||
425 | end_address = PAGE_ALIGN(end_address); | ||
426 | |||
427 | stop_address = (unsigned long) &vmem_map[ | ||
428 | pgdat->node_start_pfn + pgdat->node_spanned_pages]; | ||
429 | |||
430 | do { | ||
431 | pgd_t *pgd; | ||
432 | pud_t *pud; | ||
433 | pmd_t *pmd; | ||
434 | pte_t *pte; | ||
435 | |||
436 | pgd = pgd_offset_k(end_address); | ||
437 | if (pgd_none(*pgd)) { | ||
438 | end_address += PGDIR_SIZE; | ||
439 | continue; | ||
440 | } | ||
441 | |||
442 | pud = pud_offset(pgd, end_address); | ||
443 | if (pud_none(*pud)) { | ||
444 | end_address += PUD_SIZE; | ||
445 | continue; | ||
446 | } | ||
447 | |||
448 | pmd = pmd_offset(pud, end_address); | ||
449 | if (pmd_none(*pmd)) { | ||
450 | end_address += PMD_SIZE; | ||
451 | continue; | ||
452 | } | ||
453 | |||
454 | pte = pte_offset_kernel(pmd, end_address); | ||
455 | retry_pte: | ||
456 | if (pte_none(*pte)) { | ||
457 | end_address += PAGE_SIZE; | ||
458 | pte++; | ||
459 | if ((end_address < stop_address) && | ||
460 | (end_address != ALIGN(end_address, 1UL << PMD_SHIFT))) | ||
461 | goto retry_pte; | ||
462 | continue; | ||
463 | } | ||
464 | /* Found next valid vmem_map page */ | ||
465 | break; | ||
466 | } while (end_address < stop_address); | ||
467 | |||
468 | end_address = min(end_address, stop_address); | ||
469 | end_address = end_address - (unsigned long) vmem_map + sizeof(struct page) - 1; | ||
470 | hole_next_pfn = end_address / sizeof(struct page); | ||
471 | return hole_next_pfn - pgdat->node_start_pfn; | ||
472 | } | ||
418 | 473 | ||
419 | int __init | 474 | int __init |
420 | create_mem_map_page_table (u64 start, u64 end, void *arg) | 475 | create_mem_map_page_table (u64 start, u64 end, void *arg) |
diff --git a/arch/ia64/mm/ioremap.c b/arch/ia64/mm/ioremap.c index 07bd02b6c372..4280c074d64e 100644 --- a/arch/ia64/mm/ioremap.c +++ b/arch/ia64/mm/ioremap.c | |||
@@ -32,7 +32,7 @@ ioremap (unsigned long offset, unsigned long size) | |||
32 | */ | 32 | */ |
33 | attr = kern_mem_attribute(offset, size); | 33 | attr = kern_mem_attribute(offset, size); |
34 | if (attr & EFI_MEMORY_WB) | 34 | if (attr & EFI_MEMORY_WB) |
35 | return phys_to_virt(offset); | 35 | return (void __iomem *) phys_to_virt(offset); |
36 | else if (attr & EFI_MEMORY_UC) | 36 | else if (attr & EFI_MEMORY_UC) |
37 | return __ioremap(offset, size); | 37 | return __ioremap(offset, size); |
38 | 38 | ||
@@ -43,7 +43,7 @@ ioremap (unsigned long offset, unsigned long size) | |||
43 | gran_base = GRANULEROUNDDOWN(offset); | 43 | gran_base = GRANULEROUNDDOWN(offset); |
44 | gran_size = GRANULEROUNDUP(offset + size) - gran_base; | 44 | gran_size = GRANULEROUNDUP(offset + size) - gran_base; |
45 | if (efi_mem_attribute(gran_base, gran_size) & EFI_MEMORY_WB) | 45 | if (efi_mem_attribute(gran_base, gran_size) & EFI_MEMORY_WB) |
46 | return phys_to_virt(offset); | 46 | return (void __iomem *) phys_to_virt(offset); |
47 | 47 | ||
48 | return __ioremap(offset, size); | 48 | return __ioremap(offset, size); |
49 | } | 49 | } |
@@ -53,7 +53,7 @@ void __iomem * | |||
53 | ioremap_nocache (unsigned long offset, unsigned long size) | 53 | ioremap_nocache (unsigned long offset, unsigned long size) |
54 | { | 54 | { |
55 | if (kern_mem_attribute(offset, size) & EFI_MEMORY_WB) | 55 | if (kern_mem_attribute(offset, size) & EFI_MEMORY_WB) |
56 | return 0; | 56 | return NULL; |
57 | 57 | ||
58 | return __ioremap(offset, size); | 58 | return __ioremap(offset, size); |
59 | } | 59 | } |
diff --git a/arch/ia64/sn/kernel/xpc_main.c b/arch/ia64/sn/kernel/xpc_main.c index 99b123a6421a..5e8e59efb347 100644 --- a/arch/ia64/sn/kernel/xpc_main.c +++ b/arch/ia64/sn/kernel/xpc_main.c | |||
@@ -480,7 +480,7 @@ xpc_activating(void *__partid) | |||
480 | partid_t partid = (u64) __partid; | 480 | partid_t partid = (u64) __partid; |
481 | struct xpc_partition *part = &xpc_partitions[partid]; | 481 | struct xpc_partition *part = &xpc_partitions[partid]; |
482 | unsigned long irq_flags; | 482 | unsigned long irq_flags; |
483 | struct sched_param param = { sched_priority: MAX_RT_PRIO - 1 }; | 483 | struct sched_param param = { .sched_priority = MAX_RT_PRIO - 1 }; |
484 | int ret; | 484 | int ret; |
485 | 485 | ||
486 | 486 | ||
diff --git a/arch/ia64/sn/pci/tioce_provider.c b/arch/ia64/sn/pci/tioce_provider.c index 17cd34284886..af7171adcd2c 100644 --- a/arch/ia64/sn/pci/tioce_provider.c +++ b/arch/ia64/sn/pci/tioce_provider.c | |||
@@ -74,7 +74,7 @@ tioce_mmr_war_pre(struct tioce_kernel *kern, void *mmr_addr) | |||
74 | else | 74 | else |
75 | mmr_war_offset = 0x158; | 75 | mmr_war_offset = 0x158; |
76 | 76 | ||
77 | readq_relaxed((void *)(mmr_base + mmr_war_offset)); | 77 | readq_relaxed((void __iomem *)(mmr_base + mmr_war_offset)); |
78 | } | 78 | } |
79 | } | 79 | } |
80 | 80 | ||
@@ -92,8 +92,8 @@ tioce_mmr_war_post(struct tioce_kernel *kern, void *mmr_addr) | |||
92 | 92 | ||
93 | if (mmr_offset < 0x45000) { | 93 | if (mmr_offset < 0x45000) { |
94 | if (mmr_offset == 0x100) | 94 | if (mmr_offset == 0x100) |
95 | readq_relaxed((void *)(mmr_base + 0x38)); | 95 | readq_relaxed((void __iomem *)(mmr_base + 0x38)); |
96 | readq_relaxed((void *)(mmr_base + 0xb050)); | 96 | readq_relaxed((void __iomem *)(mmr_base + 0xb050)); |
97 | } | 97 | } |
98 | } | 98 | } |
99 | 99 | ||
diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c index 14353b8789dd..bfd66d3a035c 100644 --- a/arch/powerpc/kernel/rtas.c +++ b/arch/powerpc/kernel/rtas.c | |||
@@ -571,6 +571,27 @@ int rtas_set_indicator(int indicator, int index, int new_value) | |||
571 | } | 571 | } |
572 | EXPORT_SYMBOL(rtas_set_indicator); | 572 | EXPORT_SYMBOL(rtas_set_indicator); |
573 | 573 | ||
574 | /* | ||
575 | * Ignoring RTAS extended delay | ||
576 | */ | ||
577 | int rtas_set_indicator_fast(int indicator, int index, int new_value) | ||
578 | { | ||
579 | int rc; | ||
580 | int token = rtas_token("set-indicator"); | ||
581 | |||
582 | if (token == RTAS_UNKNOWN_SERVICE) | ||
583 | return -ENOENT; | ||
584 | |||
585 | rc = rtas_call(token, 3, 1, NULL, indicator, index, new_value); | ||
586 | |||
587 | WARN_ON(rc == -2 || (rc >= 9900 && rc <= 9905)); | ||
588 | |||
589 | if (rc < 0) | ||
590 | return rtas_error_rc(rc); | ||
591 | |||
592 | return rc; | ||
593 | } | ||
594 | |||
574 | void rtas_restart(char *cmd) | 595 | void rtas_restart(char *cmd) |
575 | { | 596 | { |
576 | if (rtas_flash_term_hook) | 597 | if (rtas_flash_term_hook) |
diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c index 6ebeecfd6bcb..1587efc51057 100644 --- a/arch/powerpc/platforms/pseries/setup.c +++ b/arch/powerpc/platforms/pseries/setup.c | |||
@@ -213,8 +213,6 @@ static void pseries_lpar_enable_pmcs(void) | |||
213 | { | 213 | { |
214 | unsigned long set, reset; | 214 | unsigned long set, reset; |
215 | 215 | ||
216 | power4_enable_pmcs(); | ||
217 | |||
218 | set = 1UL << 63; | 216 | set = 1UL << 63; |
219 | reset = 0; | 217 | reset = 0; |
220 | plpar_hcall_norets(H_PERFMON, set, reset); | 218 | plpar_hcall_norets(H_PERFMON, set, reset); |
diff --git a/arch/powerpc/platforms/pseries/xics.c b/arch/powerpc/platforms/pseries/xics.c index c88ec63129f3..253972e5479f 100644 --- a/arch/powerpc/platforms/pseries/xics.c +++ b/arch/powerpc/platforms/pseries/xics.c | |||
@@ -447,7 +447,7 @@ void xics_setup_cpu(void) | |||
447 | * | 447 | * |
448 | * XXX: undo of teardown on kexec needs this too, as may hotplug | 448 | * XXX: undo of teardown on kexec needs this too, as may hotplug |
449 | */ | 449 | */ |
450 | rtas_set_indicator(GLOBAL_INTERRUPT_QUEUE, | 450 | rtas_set_indicator_fast(GLOBAL_INTERRUPT_QUEUE, |
451 | (1UL << interrupt_server_size) - 1 - default_distrib_server, 1); | 451 | (1UL << interrupt_server_size) - 1 - default_distrib_server, 1); |
452 | } | 452 | } |
453 | 453 | ||
@@ -776,7 +776,7 @@ void xics_teardown_cpu(int secondary) | |||
776 | * so leave the master cpu in the group. | 776 | * so leave the master cpu in the group. |
777 | */ | 777 | */ |
778 | if (secondary) | 778 | if (secondary) |
779 | rtas_set_indicator(GLOBAL_INTERRUPT_QUEUE, | 779 | rtas_set_indicator_fast(GLOBAL_INTERRUPT_QUEUE, |
780 | (1UL << interrupt_server_size) - 1 - | 780 | (1UL << interrupt_server_size) - 1 - |
781 | default_distrib_server, 0); | 781 | default_distrib_server, 0); |
782 | } | 782 | } |
@@ -793,7 +793,7 @@ void xics_migrate_irqs_away(void) | |||
793 | xics_set_cpu_priority(cpu, 0); | 793 | xics_set_cpu_priority(cpu, 0); |
794 | 794 | ||
795 | /* remove ourselves from the global interrupt queue */ | 795 | /* remove ourselves from the global interrupt queue */ |
796 | status = rtas_set_indicator(GLOBAL_INTERRUPT_QUEUE, | 796 | status = rtas_set_indicator_fast(GLOBAL_INTERRUPT_QUEUE, |
797 | (1UL << interrupt_server_size) - 1 - default_distrib_server, 0); | 797 | (1UL << interrupt_server_size) - 1 - default_distrib_server, 0); |
798 | WARN_ON(status < 0); | 798 | WARN_ON(status < 0); |
799 | 799 | ||
diff --git a/arch/sh/kernel/cpu/sh4/sq.c b/arch/sh/kernel/cpu/sh4/sq.c index 781dbb11c038..b09805f3ee23 100644 --- a/arch/sh/kernel/cpu/sh4/sq.c +++ b/arch/sh/kernel/cpu/sh4/sq.c | |||
@@ -421,18 +421,22 @@ static struct miscdevice sq_dev = { | |||
421 | 421 | ||
422 | static int __init sq_api_init(void) | 422 | static int __init sq_api_init(void) |
423 | { | 423 | { |
424 | int ret; | ||
424 | printk(KERN_NOTICE "sq: Registering store queue API.\n"); | 425 | printk(KERN_NOTICE "sq: Registering store queue API.\n"); |
425 | 426 | ||
426 | #ifdef CONFIG_PROC_FS | ||
427 | create_proc_read_entry("sq_mapping", 0, 0, sq_mapping_read_proc, 0); | 427 | create_proc_read_entry("sq_mapping", 0, 0, sq_mapping_read_proc, 0); |
428 | #endif | ||
429 | 428 | ||
430 | return misc_register(&sq_dev); | 429 | ret = misc_register(&sq_dev); |
430 | if (ret) | ||
431 | remove_proc_entry("sq_mapping", NULL); | ||
432 | |||
433 | return ret; | ||
431 | } | 434 | } |
432 | 435 | ||
433 | static void __exit sq_api_exit(void) | 436 | static void __exit sq_api_exit(void) |
434 | { | 437 | { |
435 | misc_deregister(&sq_dev); | 438 | misc_deregister(&sq_dev); |
439 | remove_proc_entry("sq_mapping", NULL); | ||
436 | } | 440 | } |
437 | 441 | ||
438 | module_init(sq_api_init); | 442 | module_init(sq_api_init); |
diff --git a/arch/x86_64/kernel/entry.S b/arch/x86_64/kernel/entry.S index d464dded68c0..6f810424df44 100644 --- a/arch/x86_64/kernel/entry.S +++ b/arch/x86_64/kernel/entry.S | |||
@@ -513,6 +513,7 @@ END(stub_rt_sigreturn) | |||
513 | swapgs | 513 | swapgs |
514 | 1: incl %gs:pda_irqcount # RED-PEN should check preempt count | 514 | 1: incl %gs:pda_irqcount # RED-PEN should check preempt count |
515 | cmoveq %gs:pda_irqstackptr,%rsp | 515 | cmoveq %gs:pda_irqstackptr,%rsp |
516 | push %rbp # backlink for old unwinder | ||
516 | /* | 517 | /* |
517 | * We entered an interrupt context - irqs are off: | 518 | * We entered an interrupt context - irqs are off: |
518 | */ | 519 | */ |
@@ -1139,18 +1140,21 @@ ENTRY(machine_check) | |||
1139 | END(machine_check) | 1140 | END(machine_check) |
1140 | #endif | 1141 | #endif |
1141 | 1142 | ||
1143 | /* Call softirq on interrupt stack. Interrupts are off. */ | ||
1142 | ENTRY(call_softirq) | 1144 | ENTRY(call_softirq) |
1143 | CFI_STARTPROC | 1145 | CFI_STARTPROC |
1144 | movq %gs:pda_irqstackptr,%rax | 1146 | push %rbp |
1145 | movq %rsp,%rdx | 1147 | CFI_ADJUST_CFA_OFFSET 8 |
1146 | CFI_DEF_CFA_REGISTER rdx | 1148 | CFI_REL_OFFSET rbp,0 |
1149 | mov %rsp,%rbp | ||
1150 | CFI_DEF_CFA_REGISTER rbp | ||
1147 | incl %gs:pda_irqcount | 1151 | incl %gs:pda_irqcount |
1148 | cmove %rax,%rsp | 1152 | cmove %gs:pda_irqstackptr,%rsp |
1149 | pushq %rdx | 1153 | push %rbp # backlink for old unwinder |
1150 | /*todo CFI_DEF_CFA_EXPRESSION ...*/ | ||
1151 | call __do_softirq | 1154 | call __do_softirq |
1152 | popq %rsp | 1155 | leaveq |
1153 | CFI_DEF_CFA_REGISTER rsp | 1156 | CFI_DEF_CFA_REGISTER rsp |
1157 | CFI_ADJUST_CFA_OFFSET -8 | ||
1154 | decl %gs:pda_irqcount | 1158 | decl %gs:pda_irqcount |
1155 | ret | 1159 | ret |
1156 | CFI_ENDPROC | 1160 | CFI_ENDPROC |
diff --git a/arch/x86_64/kernel/pci-nommu.c b/arch/x86_64/kernel/pci-nommu.c index c4c3cc36ac5b..aad7609d8e92 100644 --- a/arch/x86_64/kernel/pci-nommu.c +++ b/arch/x86_64/kernel/pci-nommu.c | |||
@@ -92,5 +92,7 @@ void __init no_iommu_init(void) | |||
92 | { | 92 | { |
93 | if (dma_ops) | 93 | if (dma_ops) |
94 | return; | 94 | return; |
95 | |||
96 | force_iommu = 0; /* no HW IOMMU */ | ||
95 | dma_ops = &nommu_dma_ops; | 97 | dma_ops = &nommu_dma_ops; |
96 | } | 98 | } |
diff --git a/arch/x86_64/kernel/smp.c b/arch/x86_64/kernel/smp.c index 5a1c0a3bf872..06af6ca60129 100644 --- a/arch/x86_64/kernel/smp.c +++ b/arch/x86_64/kernel/smp.c | |||
@@ -203,7 +203,7 @@ int __cpuinit init_smp_flush(void) | |||
203 | { | 203 | { |
204 | int i; | 204 | int i; |
205 | for_each_cpu_mask(i, cpu_possible_map) { | 205 | for_each_cpu_mask(i, cpu_possible_map) { |
206 | spin_lock_init(&per_cpu(flush_state.tlbstate_lock, i)); | 206 | spin_lock_init(&per_cpu(flush_state, i).tlbstate_lock); |
207 | } | 207 | } |
208 | return 0; | 208 | return 0; |
209 | } | 209 | } |