Magellan Linux

Annotation of /trunk/kernel-alx/patches-3.8/0100-3.8.1-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2117 - (hide annotations) (download)
Mon Mar 18 12:50:44 2013 UTC (11 years, 1 month ago) by niro
File size: 220352 byte(s)
-3.8.2-alx-r1
1 niro 2117 diff --git a/arch/arm/boot/dts/at91sam9n12.dtsi b/arch/arm/boot/dts/at91sam9n12.dtsi
2     index 80e29c6..4801717 100644
3     --- a/arch/arm/boot/dts/at91sam9n12.dtsi
4     +++ b/arch/arm/boot/dts/at91sam9n12.dtsi
5     @@ -324,8 +324,6 @@
6     compatible = "atmel,at91sam9260-usart";
7     reg = <0xf801c000 0x4000>;
8     interrupts = <5 4 5>;
9     - atmel,use-dma-rx;
10     - atmel,use-dma-tx;
11     pinctrl-names = "default";
12     pinctrl-0 = <&pinctrl_usart0>;
13     status = "disabled";
14     @@ -335,8 +333,6 @@
15     compatible = "atmel,at91sam9260-usart";
16     reg = <0xf8020000 0x4000>;
17     interrupts = <6 4 5>;
18     - atmel,use-dma-rx;
19     - atmel,use-dma-tx;
20     pinctrl-names = "default";
21     pinctrl-0 = <&pinctrl_usart1>;
22     status = "disabled";
23     @@ -346,8 +342,6 @@
24     compatible = "atmel,at91sam9260-usart";
25     reg = <0xf8024000 0x4000>;
26     interrupts = <7 4 5>;
27     - atmel,use-dma-rx;
28     - atmel,use-dma-tx;
29     pinctrl-names = "default";
30     pinctrl-0 = <&pinctrl_usart2>;
31     status = "disabled";
32     @@ -357,8 +351,6 @@
33     compatible = "atmel,at91sam9260-usart";
34     reg = <0xf8028000 0x4000>;
35     interrupts = <8 4 5>;
36     - atmel,use-dma-rx;
37     - atmel,use-dma-tx;
38     pinctrl-names = "default";
39     pinctrl-0 = <&pinctrl_usart3>;
40     status = "disabled";
41     diff --git a/arch/arm/boot/dts/at91sam9x5.dtsi b/arch/arm/boot/dts/at91sam9x5.dtsi
42     index 8ecca69..c461e11 100644
43     --- a/arch/arm/boot/dts/at91sam9x5.dtsi
44     +++ b/arch/arm/boot/dts/at91sam9x5.dtsi
45     @@ -402,8 +402,6 @@
46     compatible = "atmel,at91sam9260-usart";
47     reg = <0xf801c000 0x200>;
48     interrupts = <5 4 5>;
49     - atmel,use-dma-rx;
50     - atmel,use-dma-tx;
51     pinctrl-names = "default";
52     pinctrl-0 = <&pinctrl_usart0>;
53     status = "disabled";
54     @@ -413,8 +411,6 @@
55     compatible = "atmel,at91sam9260-usart";
56     reg = <0xf8020000 0x200>;
57     interrupts = <6 4 5>;
58     - atmel,use-dma-rx;
59     - atmel,use-dma-tx;
60     pinctrl-names = "default";
61     pinctrl-0 = <&pinctrl_usart1>;
62     status = "disabled";
63     @@ -424,8 +420,6 @@
64     compatible = "atmel,at91sam9260-usart";
65     reg = <0xf8024000 0x200>;
66     interrupts = <7 4 5>;
67     - atmel,use-dma-rx;
68     - atmel,use-dma-tx;
69     pinctrl-names = "default";
70     pinctrl-0 = <&pinctrl_usart2>;
71     status = "disabled";
72     diff --git a/arch/arm/kernel/sched_clock.c b/arch/arm/kernel/sched_clock.c
73     index fc6692e..bd6f56b 100644
74     --- a/arch/arm/kernel/sched_clock.c
75     +++ b/arch/arm/kernel/sched_clock.c
76     @@ -93,11 +93,11 @@ static void notrace update_sched_clock(void)
77     * detectable in cyc_to_fixed_sched_clock().
78     */
79     raw_local_irq_save(flags);
80     - cd.epoch_cyc = cyc;
81     + cd.epoch_cyc_copy = cyc;
82     smp_wmb();
83     cd.epoch_ns = ns;
84     smp_wmb();
85     - cd.epoch_cyc_copy = cyc;
86     + cd.epoch_cyc = cyc;
87     raw_local_irq_restore(flags);
88     }
89    
90     diff --git a/arch/arm/mach-imx/clk-imx25.c b/arch/arm/mach-imx/clk-imx25.c
91     index 2c570cd..69858c7 100644
92     --- a/arch/arm/mach-imx/clk-imx25.c
93     +++ b/arch/arm/mach-imx/clk-imx25.c
94     @@ -224,6 +224,9 @@ static int __init __mx25_clocks_init(unsigned long osc_rate)
95    
96     clk_prepare_enable(clk[emi_ahb]);
97    
98     + /* Clock source for gpt must be derived from AHB */
99     + clk_set_parent(clk[per5_sel], clk[ahb]);
100     +
101     clk_register_clkdev(clk[ipg], "ipg", "imx-gpt.0");
102     clk_register_clkdev(clk[gpt_ipg_per], "per", "imx-gpt.0");
103    
104     diff --git a/arch/arm/mach-integrator/integrator_ap.c b/arch/arm/mach-integrator/integrator_ap.c
105     index 11e2a41..26762bf 100644
106     --- a/arch/arm/mach-integrator/integrator_ap.c
107     +++ b/arch/arm/mach-integrator/integrator_ap.c
108     @@ -613,7 +613,6 @@ static struct map_desc ap_io_desc_atag[] __initdata = {
109     static void __init ap_map_io_atag(void)
110     {
111     iotable_init(ap_io_desc_atag, ARRAY_SIZE(ap_io_desc_atag));
112     - ap_syscon_base = __io_address(INTEGRATOR_SC_BASE);
113     ap_map_io();
114     }
115    
116     @@ -685,6 +684,7 @@ static void __init ap_init(void)
117    
118     platform_device_register(&cfi_flash_device);
119    
120     + ap_syscon_base = __io_address(INTEGRATOR_SC_BASE);
121     sc_dec = readl(ap_syscon_base + INTEGRATOR_SC_DEC_OFFSET);
122     for (i = 0; i < 4; i++) {
123     struct lm_device *lmdev;
124     diff --git a/arch/arm/mach-pxa/include/mach/smemc.h b/arch/arm/mach-pxa/include/mach/smemc.h
125     index b7de471..b802f28 100644
126     --- a/arch/arm/mach-pxa/include/mach/smemc.h
127     +++ b/arch/arm/mach-pxa/include/mach/smemc.h
128     @@ -37,6 +37,7 @@
129     #define CSADRCFG1 (SMEMC_VIRT + 0x84) /* Address Configuration Register for CS1 */
130     #define CSADRCFG2 (SMEMC_VIRT + 0x88) /* Address Configuration Register for CS2 */
131     #define CSADRCFG3 (SMEMC_VIRT + 0x8C) /* Address Configuration Register for CS3 */
132     +#define CSMSADRCFG (SMEMC_VIRT + 0xA0) /* Chip Select Configuration Register */
133    
134     /*
135     * More handy macros for PCMCIA
136     diff --git a/arch/arm/mach-pxa/smemc.c b/arch/arm/mach-pxa/smemc.c
137     index 7992305..f38aa89 100644
138     --- a/arch/arm/mach-pxa/smemc.c
139     +++ b/arch/arm/mach-pxa/smemc.c
140     @@ -40,6 +40,8 @@ static void pxa3xx_smemc_resume(void)
141     __raw_writel(csadrcfg[1], CSADRCFG1);
142     __raw_writel(csadrcfg[2], CSADRCFG2);
143     __raw_writel(csadrcfg[3], CSADRCFG3);
144     + /* CSMSADRCFG wakes up in its default state (0), so we need to set it */
145     + __raw_writel(0x2, CSMSADRCFG);
146     }
147    
148     static struct syscore_ops smemc_syscore_ops = {
149     @@ -49,8 +51,19 @@ static struct syscore_ops smemc_syscore_ops = {
150    
151     static int __init smemc_init(void)
152     {
153     - if (cpu_is_pxa3xx())
154     + if (cpu_is_pxa3xx()) {
155     + /*
156     + * The only documentation we have on the
157     + * Chip Select Configuration Register (CSMSADRCFG) is that
158     + * it must be programmed to 0x2.
159     + * Moreover, in the bit definitions, the second bit
160     + * (CSMSADRCFG[1]) is called "SETALWAYS".
161     + * Other bits are reserved in this register.
162     + */
163     + __raw_writel(0x2, CSMSADRCFG);
164     +
165     register_syscore_ops(&smemc_syscore_ops);
166     + }
167    
168     return 0;
169     }
170     diff --git a/arch/arm/mach-s3c24xx/include/mach/debug-macro.S b/arch/arm/mach-s3c24xx/include/mach/debug-macro.S
171     index 4135de8..13ed33c 100644
172     --- a/arch/arm/mach-s3c24xx/include/mach/debug-macro.S
173     +++ b/arch/arm/mach-s3c24xx/include/mach/debug-macro.S
174     @@ -40,17 +40,17 @@
175     addeq \rd, \rx, #(S3C24XX_PA_GPIO - S3C24XX_PA_UART)
176     addne \rd, \rx, #(S3C24XX_VA_GPIO - S3C24XX_VA_UART)
177     bic \rd, \rd, #0xff000
178     - ldr \rd, [ \rd, # S3C2410_GSTATUS1 - S3C2410_GPIOREG(0) ]
179     + ldr \rd, [\rd, # S3C2410_GSTATUS1 - S3C2410_GPIOREG(0)]
180     and \rd, \rd, #0x00ff0000
181     teq \rd, #0x00440000 @ is it 2440?
182     1004:
183     - ldr \rd, [ \rx, # S3C2410_UFSTAT ]
184     + ldr \rd, [\rx, # S3C2410_UFSTAT]
185     moveq \rd, \rd, lsr #SHIFT_2440TXF
186     tst \rd, #S3C2410_UFSTAT_TXFULL
187     .endm
188    
189     .macro fifo_full_s3c2410 rd, rx
190     - ldr \rd, [ \rx, # S3C2410_UFSTAT ]
191     + ldr \rd, [\rx, # S3C2410_UFSTAT]
192     tst \rd, #S3C2410_UFSTAT_TXFULL
193     .endm
194    
195     @@ -68,18 +68,18 @@
196     addeq \rd, \rx, #(S3C24XX_PA_GPIO - S3C24XX_PA_UART)
197     addne \rd, \rx, #(S3C24XX_VA_GPIO - S3C24XX_VA_UART)
198     bic \rd, \rd, #0xff000
199     - ldr \rd, [ \rd, # S3C2410_GSTATUS1 - S3C2410_GPIOREG(0) ]
200     + ldr \rd, [\rd, # S3C2410_GSTATUS1 - S3C2410_GPIOREG(0)]
201     and \rd, \rd, #0x00ff0000
202     teq \rd, #0x00440000 @ is it 2440?
203    
204     10000:
205     - ldr \rd, [ \rx, # S3C2410_UFSTAT ]
206     + ldr \rd, [\rx, # S3C2410_UFSTAT]
207     andne \rd, \rd, #S3C2410_UFSTAT_TXMASK
208     andeq \rd, \rd, #S3C2440_UFSTAT_TXMASK
209     .endm
210    
211     .macro fifo_level_s3c2410 rd, rx
212     - ldr \rd, [ \rx, # S3C2410_UFSTAT ]
213     + ldr \rd, [\rx, # S3C2410_UFSTAT]
214     and \rd, \rd, #S3C2410_UFSTAT_TXMASK
215     .endm
216    
217     diff --git a/arch/arm/mach-s3c24xx/include/mach/entry-macro.S b/arch/arm/mach-s3c24xx/include/mach/entry-macro.S
218     index 7615a14..6a21bee 100644
219     --- a/arch/arm/mach-s3c24xx/include/mach/entry-macro.S
220     +++ b/arch/arm/mach-s3c24xx/include/mach/entry-macro.S
221     @@ -31,10 +31,10 @@
222    
223     @@ try the interrupt offset register, since it is there
224    
225     - ldr \irqstat, [ \base, #INTPND ]
226     + ldr \irqstat, [\base, #INTPND ]
227     teq \irqstat, #0
228     beq 1002f
229     - ldr \irqnr, [ \base, #INTOFFSET ]
230     + ldr \irqnr, [\base, #INTOFFSET ]
231     mov \tmp, #1
232     tst \irqstat, \tmp, lsl \irqnr
233     bne 1001f
234     diff --git a/arch/arm/mach-s3c24xx/pm-h1940.S b/arch/arm/mach-s3c24xx/pm-h1940.S
235     index c93bf2d..6183a68 100644
236     --- a/arch/arm/mach-s3c24xx/pm-h1940.S
237     +++ b/arch/arm/mach-s3c24xx/pm-h1940.S
238     @@ -30,4 +30,4 @@
239    
240     h1940_pm_return:
241     mov r0, #S3C2410_PA_GPIO
242     - ldr pc, [ r0, #S3C2410_GSTATUS3 - S3C24XX_VA_GPIO ]
243     + ldr pc, [r0, #S3C2410_GSTATUS3 - S3C24XX_VA_GPIO]
244     diff --git a/arch/arm/mach-s3c24xx/sleep-s3c2410.S b/arch/arm/mach-s3c24xx/sleep-s3c2410.S
245     index dd5b638..65200ae 100644
246     --- a/arch/arm/mach-s3c24xx/sleep-s3c2410.S
247     +++ b/arch/arm/mach-s3c24xx/sleep-s3c2410.S
248     @@ -45,9 +45,9 @@ ENTRY(s3c2410_cpu_suspend)
249     ldr r4, =S3C2410_REFRESH
250     ldr r5, =S3C24XX_MISCCR
251     ldr r6, =S3C2410_CLKCON
252     - ldr r7, [ r4 ] @ get REFRESH (and ensure in TLB)
253     - ldr r8, [ r5 ] @ get MISCCR (and ensure in TLB)
254     - ldr r9, [ r6 ] @ get CLKCON (and ensure in TLB)
255     + ldr r7, [r4] @ get REFRESH (and ensure in TLB)
256     + ldr r8, [r5] @ get MISCCR (and ensure in TLB)
257     + ldr r9, [r6] @ get CLKCON (and ensure in TLB)
258    
259     orr r7, r7, #S3C2410_REFRESH_SELF @ SDRAM sleep command
260     orr r8, r8, #S3C2410_MISCCR_SDSLEEP @ SDRAM power-down signals
261     @@ -61,8 +61,8 @@ ENTRY(s3c2410_cpu_suspend)
262     @@ align next bit of code to cache line
263     .align 5
264     s3c2410_do_sleep:
265     - streq r7, [ r4 ] @ SDRAM sleep command
266     - streq r8, [ r5 ] @ SDRAM power-down config
267     - streq r9, [ r6 ] @ CPU sleep
268     + streq r7, [r4] @ SDRAM sleep command
269     + streq r8, [r5] @ SDRAM power-down config
270     + streq r9, [r6] @ CPU sleep
271     1: beq 1b
272     mov pc, r14
273     diff --git a/arch/arm/mach-s3c24xx/sleep-s3c2412.S b/arch/arm/mach-s3c24xx/sleep-s3c2412.S
274     index c82418e..5adaceb 100644
275     --- a/arch/arm/mach-s3c24xx/sleep-s3c2412.S
276     +++ b/arch/arm/mach-s3c24xx/sleep-s3c2412.S
277     @@ -57,12 +57,12 @@ s3c2412_sleep_enter1:
278     * retry, as simply returning causes the system to lock.
279     */
280    
281     - ldrne r9, [ r1 ]
282     - strne r9, [ r1 ]
283     - ldrne r9, [ r2 ]
284     - strne r9, [ r2 ]
285     - ldrne r9, [ r3 ]
286     - strne r9, [ r3 ]
287     + ldrne r9, [r1]
288     + strne r9, [r1]
289     + ldrne r9, [r2]
290     + strne r9, [r2]
291     + ldrne r9, [r3]
292     + strne r9, [r3]
293     bne s3c2412_sleep_enter1
294    
295     mov pc, r14
296     diff --git a/arch/arm/mach-versatile/core.c b/arch/arm/mach-versatile/core.c
297     index 5d59294..a78827b 100644
298     --- a/arch/arm/mach-versatile/core.c
299     +++ b/arch/arm/mach-versatile/core.c
300     @@ -36,6 +36,7 @@
301     #include <linux/gfp.h>
302     #include <linux/clkdev.h>
303     #include <linux/mtd/physmap.h>
304     +#include <linux/bitops.h>
305    
306     #include <asm/irq.h>
307     #include <asm/hardware/arm_timer.h>
308     @@ -65,16 +66,28 @@
309     #define VA_VIC_BASE __io_address(VERSATILE_VIC_BASE)
310     #define VA_SIC_BASE __io_address(VERSATILE_SIC_BASE)
311    
312     +/* These PIC IRQs are valid in each configuration */
313     +#define PIC_VALID_ALL BIT(SIC_INT_KMI0) | BIT(SIC_INT_KMI1) | \
314     + BIT(SIC_INT_SCI3) | BIT(SIC_INT_UART3) | \
315     + BIT(SIC_INT_CLCD) | BIT(SIC_INT_TOUCH) | \
316     + BIT(SIC_INT_KEYPAD) | BIT(SIC_INT_DoC) | \
317     + BIT(SIC_INT_USB) | BIT(SIC_INT_PCI0) | \
318     + BIT(SIC_INT_PCI1) | BIT(SIC_INT_PCI2) | \
319     + BIT(SIC_INT_PCI3)
320     #if 1
321     #define IRQ_MMCI0A IRQ_VICSOURCE22
322     #define IRQ_AACI IRQ_VICSOURCE24
323     #define IRQ_ETH IRQ_VICSOURCE25
324     #define PIC_MASK 0xFFD00000
325     +#define PIC_VALID PIC_VALID_ALL
326     #else
327     #define IRQ_MMCI0A IRQ_SIC_MMCI0A
328     #define IRQ_AACI IRQ_SIC_AACI
329     #define IRQ_ETH IRQ_SIC_ETH
330     #define PIC_MASK 0
331     +#define PIC_VALID PIC_VALID_ALL | BIT(SIC_INT_MMCI0A) | \
332     + BIT(SIC_INT_MMCI1A) | BIT(SIC_INT_AACI) | \
333     + BIT(SIC_INT_ETH)
334     #endif
335    
336     /* Lookup table for finding a DT node that represents the vic instance */
337     @@ -102,7 +115,7 @@ void __init versatile_init_irq(void)
338     VERSATILE_SIC_BASE);
339    
340     fpga_irq_init(VA_SIC_BASE, "SIC", IRQ_SIC_START,
341     - IRQ_VICSOURCE31, ~PIC_MASK, np);
342     + IRQ_VICSOURCE31, PIC_VALID, np);
343    
344     /*
345     * Interrupts on secondary controller from 0 to 8 are routed to
346     diff --git a/arch/arm/mach-versatile/pci.c b/arch/arm/mach-versatile/pci.c
347     index 2f84f40..e92e5e0 100644
348     --- a/arch/arm/mach-versatile/pci.c
349     +++ b/arch/arm/mach-versatile/pci.c
350     @@ -23,6 +23,7 @@
351     #include <linux/io.h>
352    
353     #include <mach/hardware.h>
354     +#include <mach/irqs.h>
355     #include <asm/irq.h>
356     #include <asm/mach/pci.h>
357    
358     @@ -327,12 +328,12 @@ static int __init versatile_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
359     int irq;
360    
361     /* slot, pin, irq
362     - * 24 1 27
363     - * 25 1 28
364     - * 26 1 29
365     - * 27 1 30
366     + * 24 1 IRQ_SIC_PCI0
367     + * 25 1 IRQ_SIC_PCI1
368     + * 26 1 IRQ_SIC_PCI2
369     + * 27 1 IRQ_SIC_PCI3
370     */
371     - irq = 27 + ((slot - 24 + pin - 1) & 3);
372     + irq = IRQ_SIC_PCI0 + ((slot - 24 + pin - 1) & 3);
373    
374     return irq;
375     }
376     diff --git a/arch/arm/plat-samsung/include/plat/debug-macro.S b/arch/arm/plat-samsung/include/plat/debug-macro.S
377     index 207e275..f3a9cff 100644
378     --- a/arch/arm/plat-samsung/include/plat/debug-macro.S
379     +++ b/arch/arm/plat-samsung/include/plat/debug-macro.S
380     @@ -14,12 +14,12 @@
381     /* The S5PV210/S5PC110 implementations are as belows. */
382    
383     .macro fifo_level_s5pv210 rd, rx
384     - ldr \rd, [ \rx, # S3C2410_UFSTAT ]
385     + ldr \rd, [\rx, # S3C2410_UFSTAT]
386     and \rd, \rd, #S5PV210_UFSTAT_TXMASK
387     .endm
388    
389     .macro fifo_full_s5pv210 rd, rx
390     - ldr \rd, [ \rx, # S3C2410_UFSTAT ]
391     + ldr \rd, [\rx, # S3C2410_UFSTAT]
392     tst \rd, #S5PV210_UFSTAT_TXFULL
393     .endm
394    
395     @@ -27,7 +27,7 @@
396     * most widely re-used */
397    
398     .macro fifo_level_s3c2440 rd, rx
399     - ldr \rd, [ \rx, # S3C2410_UFSTAT ]
400     + ldr \rd, [\rx, # S3C2410_UFSTAT]
401     and \rd, \rd, #S3C2440_UFSTAT_TXMASK
402     .endm
403    
404     @@ -36,7 +36,7 @@
405     #endif
406    
407     .macro fifo_full_s3c2440 rd, rx
408     - ldr \rd, [ \rx, # S3C2410_UFSTAT ]
409     + ldr \rd, [\rx, # S3C2410_UFSTAT]
410     tst \rd, #S3C2440_UFSTAT_TXFULL
411     .endm
412    
413     @@ -45,11 +45,11 @@
414     #endif
415    
416     .macro senduart,rd,rx
417     - strb \rd, [\rx, # S3C2410_UTXH ]
418     + strb \rd, [\rx, # S3C2410_UTXH]
419     .endm
420    
421     .macro busyuart, rd, rx
422     - ldr \rd, [ \rx, # S3C2410_UFCON ]
423     + ldr \rd, [\rx, # S3C2410_UFCON]
424     tst \rd, #S3C2410_UFCON_FIFOMODE @ fifo enabled?
425     beq 1001f @
426     @ FIFO enabled...
427     @@ -60,7 +60,7 @@
428    
429     1001:
430     @ busy waiting for non fifo
431     - ldr \rd, [ \rx, # S3C2410_UTRSTAT ]
432     + ldr \rd, [\rx, # S3C2410_UTRSTAT]
433     tst \rd, #S3C2410_UTRSTAT_TXFE
434     beq 1001b
435    
436     @@ -68,7 +68,7 @@
437     .endm
438    
439     .macro waituart,rd,rx
440     - ldr \rd, [ \rx, # S3C2410_UFCON ]
441     + ldr \rd, [\rx, # S3C2410_UFCON]
442     tst \rd, #S3C2410_UFCON_FIFOMODE @ fifo enabled?
443     beq 1001f @
444     @ FIFO enabled...
445     @@ -79,7 +79,7 @@
446     b 1002f
447     1001:
448     @ idle waiting for non fifo
449     - ldr \rd, [ \rx, # S3C2410_UTRSTAT ]
450     + ldr \rd, [\rx, # S3C2410_UTRSTAT]
451     tst \rd, #S3C2410_UTRSTAT_TXFE
452     beq 1001b
453    
454     diff --git a/arch/arm64/kernel/signal32.c b/arch/arm64/kernel/signal32.c
455     index a4db3d2..41db148 100644
456     --- a/arch/arm64/kernel/signal32.c
457     +++ b/arch/arm64/kernel/signal32.c
458     @@ -76,7 +76,7 @@ struct compat_sigcontext {
459    
460     struct compat_ucontext {
461     compat_ulong_t uc_flags;
462     - struct compat_ucontext *uc_link;
463     + compat_uptr_t uc_link;
464     compat_stack_t uc_stack;
465     struct compat_sigcontext uc_mcontext;
466     compat_sigset_t uc_sigmask;
467     @@ -703,7 +703,7 @@ int compat_setup_rt_frame(int usig, struct k_sigaction *ka, siginfo_t *info,
468     err |= copy_siginfo_to_user32(&frame->info, info);
469    
470     __put_user_error(0, &frame->sig.uc.uc_flags, err);
471     - __put_user_error(NULL, &frame->sig.uc.uc_link, err);
472     + __put_user_error(0, &frame->sig.uc.uc_link, err);
473    
474     memset(&stack, 0, sizeof(stack));
475     stack.ss_sp = (compat_uptr_t)current->sas_ss_sp;
476     diff --git a/arch/parisc/include/asm/pgtable.h b/arch/parisc/include/asm/pgtable.h
477     index ee99f23..7df49fa 100644
478     --- a/arch/parisc/include/asm/pgtable.h
479     +++ b/arch/parisc/include/asm/pgtable.h
480     @@ -12,11 +12,10 @@
481    
482     #include <linux/bitops.h>
483     #include <linux/spinlock.h>
484     +#include <linux/mm_types.h>
485     #include <asm/processor.h>
486     #include <asm/cache.h>
487    
488     -struct vm_area_struct;
489     -
490     /*
491     * kern_addr_valid(ADDR) tests if ADDR is pointing to valid kernel
492     * memory. For the return value to be meaningful, ADDR must be >=
493     @@ -40,7 +39,14 @@ struct vm_area_struct;
494     do{ \
495     *(pteptr) = (pteval); \
496     } while(0)
497     -#define set_pte_at(mm,addr,ptep,pteval) set_pte(ptep,pteval)
498     +
499     +extern void purge_tlb_entries(struct mm_struct *, unsigned long);
500     +
501     +#define set_pte_at(mm, addr, ptep, pteval) \
502     + do { \
503     + set_pte(ptep, pteval); \
504     + purge_tlb_entries(mm, addr); \
505     + } while (0)
506    
507     #endif /* !__ASSEMBLY__ */
508    
509     @@ -466,6 +472,7 @@ static inline void ptep_set_wrprotect(struct mm_struct *mm, unsigned long addr,
510     old = pte_val(*ptep);
511     new = pte_val(pte_wrprotect(__pte (old)));
512     } while (cmpxchg((unsigned long *) ptep, old, new) != old);
513     + purge_tlb_entries(mm, addr);
514     #else
515     pte_t old_pte = *ptep;
516     set_pte_at(mm, addr, ptep, pte_wrprotect(old_pte));
517     diff --git a/arch/parisc/kernel/cache.c b/arch/parisc/kernel/cache.c
518     index 48e16dc..b89a85a 100644
519     --- a/arch/parisc/kernel/cache.c
520     +++ b/arch/parisc/kernel/cache.c
521     @@ -419,6 +419,24 @@ void kunmap_parisc(void *addr)
522     EXPORT_SYMBOL(kunmap_parisc);
523     #endif
524    
525     +void purge_tlb_entries(struct mm_struct *mm, unsigned long addr)
526     +{
527     + unsigned long flags;
528     +
529     + /* Note: purge_tlb_entries can be called at startup with
530     + no context. */
531     +
532     + /* Disable preemption while we play with %sr1. */
533     + preempt_disable();
534     + mtsp(mm->context, 1);
535     + purge_tlb_start(flags);
536     + pdtlb(addr);
537     + pitlb(addr);
538     + purge_tlb_end(flags);
539     + preempt_enable();
540     +}
541     +EXPORT_SYMBOL(purge_tlb_entries);
542     +
543     void __flush_tlb_range(unsigned long sid, unsigned long start,
544     unsigned long end)
545     {
546     diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
547     index 17903f1..dabe429 100644
548     --- a/arch/powerpc/Kconfig
549     +++ b/arch/powerpc/Kconfig
550     @@ -275,6 +275,10 @@ config PPC_ADV_DEBUG_DAC_RANGE
551     depends on PPC_ADV_DEBUG_REGS && 44x
552     default y
553    
554     +config PPC_EMULATE_SSTEP
555     + bool
556     + default y if KPROBES || UPROBES || XMON || HAVE_HW_BREAKPOINT
557     +
558     source "init/Kconfig"
559    
560     source "kernel/Kconfig.freezer"
561     diff --git a/arch/powerpc/include/asm/eeh.h b/arch/powerpc/include/asm/eeh.h
562     index a8fb03e..a80e32b 100644
563     --- a/arch/powerpc/include/asm/eeh.h
564     +++ b/arch/powerpc/include/asm/eeh.h
565     @@ -201,6 +201,7 @@ int eeh_dev_check_failure(struct eeh_dev *edev);
566     void __init eeh_addr_cache_build(void);
567     void eeh_add_device_tree_early(struct device_node *);
568     void eeh_add_device_tree_late(struct pci_bus *);
569     +void eeh_add_sysfs_files(struct pci_bus *);
570     void eeh_remove_bus_device(struct pci_dev *, int);
571    
572     /**
573     @@ -240,6 +241,8 @@ static inline void eeh_add_device_tree_early(struct device_node *dn) { }
574    
575     static inline void eeh_add_device_tree_late(struct pci_bus *bus) { }
576    
577     +static inline void eeh_add_sysfs_files(struct pci_bus *bus) { }
578     +
579     static inline void eeh_remove_bus_device(struct pci_dev *dev, int purge_pe) { }
580    
581     static inline void eeh_lock(void) { }
582     diff --git a/arch/powerpc/kernel/machine_kexec_64.c b/arch/powerpc/kernel/machine_kexec_64.c
583     index 7206701..466a290 100644
584     --- a/arch/powerpc/kernel/machine_kexec_64.c
585     +++ b/arch/powerpc/kernel/machine_kexec_64.c
586     @@ -162,6 +162,8 @@ static int kexec_all_irq_disabled = 0;
587     static void kexec_smp_down(void *arg)
588     {
589     local_irq_disable();
590     + hard_irq_disable();
591     +
592     mb(); /* make sure our irqs are disabled before we say they are */
593     get_paca()->kexec_state = KEXEC_STATE_IRQS_OFF;
594     while(kexec_all_irq_disabled == 0)
595     @@ -244,6 +246,8 @@ static void kexec_prepare_cpus(void)
596     wake_offline_cpus();
597     smp_call_function(kexec_smp_down, NULL, /* wait */0);
598     local_irq_disable();
599     + hard_irq_disable();
600     +
601     mb(); /* make sure IRQs are disabled before we say they are */
602     get_paca()->kexec_state = KEXEC_STATE_IRQS_OFF;
603    
604     @@ -281,6 +285,7 @@ static void kexec_prepare_cpus(void)
605     if (ppc_md.kexec_cpu_down)
606     ppc_md.kexec_cpu_down(0, 0);
607     local_irq_disable();
608     + hard_irq_disable();
609     }
610    
611     #endif /* SMP */
612     diff --git a/arch/powerpc/kernel/of_platform.c b/arch/powerpc/kernel/of_platform.c
613     index 07c1269..e51c89f 100644
614     --- a/arch/powerpc/kernel/of_platform.c
615     +++ b/arch/powerpc/kernel/of_platform.c
616     @@ -95,6 +95,9 @@ static int of_pci_phb_probe(struct platform_device *dev)
617     /* Add probed PCI devices to the device model */
618     pci_bus_add_devices(phb->bus);
619    
620     + /* sysfs files should only be added after devices are added */
621     + eeh_add_sysfs_files(phb->bus);
622     +
623     return 0;
624     }
625    
626     diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c
627     index 7c37379..fa12ae4 100644
628     --- a/arch/powerpc/kernel/pci-common.c
629     +++ b/arch/powerpc/kernel/pci-common.c
630     @@ -1477,11 +1477,14 @@ void pcibios_finish_adding_to_bus(struct pci_bus *bus)
631     pcibios_allocate_bus_resources(bus);
632     pcibios_claim_one_bus(bus);
633    
634     + /* Fixup EEH */
635     + eeh_add_device_tree_late(bus);
636     +
637     /* Add new devices to global lists. Register in proc, sysfs. */
638     pci_bus_add_devices(bus);
639    
640     - /* Fixup EEH */
641     - eeh_add_device_tree_late(bus);
642     + /* sysfs files should only be added after devices are added */
643     + eeh_add_sysfs_files(bus);
644     }
645     EXPORT_SYMBOL_GPL(pcibios_finish_adding_to_bus);
646    
647     diff --git a/arch/powerpc/lib/Makefile b/arch/powerpc/lib/Makefile
648     index 746e0c8..35baad9 100644
649     --- a/arch/powerpc/lib/Makefile
650     +++ b/arch/powerpc/lib/Makefile
651     @@ -19,9 +19,7 @@ obj-$(CONFIG_PPC64) += copypage_64.o copyuser_64.o \
652     checksum_wrappers_64.o hweight_64.o \
653     copyuser_power7.o string_64.o copypage_power7.o \
654     memcpy_power7.o
655     -obj-$(CONFIG_XMON) += sstep.o ldstfp.o
656     -obj-$(CONFIG_KPROBES) += sstep.o ldstfp.o
657     -obj-$(CONFIG_HAVE_HW_BREAKPOINT) += sstep.o ldstfp.o
658     +obj-$(CONFIG_PPC_EMULATE_SSTEP) += sstep.o ldstfp.o
659    
660     ifeq ($(CONFIG_PPC64),y)
661     obj-$(CONFIG_SMP) += locks.o
662     diff --git a/arch/powerpc/platforms/pseries/eeh.c b/arch/powerpc/platforms/pseries/eeh.c
663     index 9a04322..6b73d6c 100644
664     --- a/arch/powerpc/platforms/pseries/eeh.c
665     +++ b/arch/powerpc/platforms/pseries/eeh.c
666     @@ -788,7 +788,6 @@ static void eeh_add_device_late(struct pci_dev *dev)
667     dev->dev.archdata.edev = edev;
668    
669     eeh_addr_cache_insert_dev(dev);
670     - eeh_sysfs_add_device(dev);
671     }
672    
673     /**
674     @@ -815,6 +814,29 @@ void eeh_add_device_tree_late(struct pci_bus *bus)
675     EXPORT_SYMBOL_GPL(eeh_add_device_tree_late);
676    
677     /**
678     + * eeh_add_sysfs_files - Add EEH sysfs files for the indicated PCI bus
679     + * @bus: PCI bus
680     + *
681     + * This routine must be used to add EEH sysfs files for PCI
682     + * devices which are attached to the indicated PCI bus. The PCI bus
683     + * is added after system boot through hotplug or dlpar.
684     + */
685     +void eeh_add_sysfs_files(struct pci_bus *bus)
686     +{
687     + struct pci_dev *dev;
688     +
689     + list_for_each_entry(dev, &bus->devices, bus_list) {
690     + eeh_sysfs_add_device(dev);
691     + if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE) {
692     + struct pci_bus *subbus = dev->subordinate;
693     + if (subbus)
694     + eeh_add_sysfs_files(subbus);
695     + }
696     + }
697     +}
698     +EXPORT_SYMBOL_GPL(eeh_add_sysfs_files);
699     +
700     +/**
701     * eeh_remove_device - Undo EEH setup for the indicated pci device
702     * @dev: pci device to be removed
703     * @purge_pe: remove the PE or not
704     diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
705     index f090e81..8bafa4f 100644
706     --- a/arch/s390/kvm/kvm-s390.c
707     +++ b/arch/s390/kvm/kvm-s390.c
708     @@ -766,6 +766,14 @@ int kvm_s390_vcpu_store_status(struct kvm_vcpu *vcpu, unsigned long addr)
709     } else
710     prefix = 0;
711    
712     + /*
713     + * The guest FPRS and ACRS are in the host FPRS/ACRS due to the lazy
714     + * copying in vcpu load/put. Lets update our copies before we save
715     + * it into the save area
716     + */
717     + save_fp_regs(&vcpu->arch.guest_fpregs);
718     + save_access_regs(vcpu->run->s.regs.acrs);
719     +
720     if (__guestcopy(vcpu, addr + offsetof(struct save_area, fp_regs),
721     vcpu->arch.guest_fpregs.fprs, 128, prefix))
722     return -EFAULT;
723     diff --git a/arch/sparc/include/asm/hugetlb.h b/arch/sparc/include/asm/hugetlb.h
724     index 9661e9b..7eb57d2 100644
725     --- a/arch/sparc/include/asm/hugetlb.h
726     +++ b/arch/sparc/include/asm/hugetlb.h
727     @@ -12,7 +12,6 @@ pte_t huge_ptep_get_and_clear(struct mm_struct *mm, unsigned long addr,
728    
729     static inline void hugetlb_prefault_arch_hook(struct mm_struct *mm)
730     {
731     - hugetlb_setup(mm);
732     }
733    
734     static inline int is_hugepage_only_range(struct mm_struct *mm,
735     diff --git a/arch/sparc/include/asm/page_64.h b/arch/sparc/include/asm/page_64.h
736     index 4b39f74..e155388 100644
737     --- a/arch/sparc/include/asm/page_64.h
738     +++ b/arch/sparc/include/asm/page_64.h
739     @@ -27,8 +27,8 @@
740     #ifndef __ASSEMBLY__
741    
742     #if defined(CONFIG_HUGETLB_PAGE) || defined(CONFIG_TRANSPARENT_HUGEPAGE)
743     -struct mm_struct;
744     -extern void hugetlb_setup(struct mm_struct *mm);
745     +struct pt_regs;
746     +extern void hugetlb_setup(struct pt_regs *regs);
747     #endif
748    
749     #define WANT_PAGE_VIRTUAL
750     diff --git a/arch/sparc/include/asm/tsb.h b/arch/sparc/include/asm/tsb.h
751     index b4c258d..e696432 100644
752     --- a/arch/sparc/include/asm/tsb.h
753     +++ b/arch/sparc/include/asm/tsb.h
754     @@ -157,17 +157,26 @@ extern struct tsb_phys_patch_entry __tsb_phys_patch, __tsb_phys_patch_end;
755     andn REG2, 0x7, REG2; \
756     add REG1, REG2, REG1;
757    
758     - /* This macro exists only to make the PMD translator below easier
759     - * to read. It hides the ELF section switch for the sun4v code
760     - * patching.
761     + /* These macros exists only to make the PMD translator below
762     + * easier to read. It hides the ELF section switch for the
763     + * sun4v code patching.
764     */
765     -#define OR_PTE_BIT(REG, NAME) \
766     +#define OR_PTE_BIT_1INSN(REG, NAME) \
767     661: or REG, _PAGE_##NAME##_4U, REG; \
768     .section .sun4v_1insn_patch, "ax"; \
769     .word 661b; \
770     or REG, _PAGE_##NAME##_4V, REG; \
771     .previous;
772    
773     +#define OR_PTE_BIT_2INSN(REG, TMP, NAME) \
774     +661: sethi %hi(_PAGE_##NAME##_4U), TMP; \
775     + or REG, TMP, REG; \
776     + .section .sun4v_2insn_patch, "ax"; \
777     + .word 661b; \
778     + mov -1, TMP; \
779     + or REG, _PAGE_##NAME##_4V, REG; \
780     + .previous;
781     +
782     /* Load into REG the PTE value for VALID, CACHE, and SZHUGE. */
783     #define BUILD_PTE_VALID_SZHUGE_CACHE(REG) \
784     661: sethi %uhi(_PAGE_VALID|_PAGE_SZHUGE_4U), REG; \
785     @@ -214,12 +223,13 @@ extern struct tsb_phys_patch_entry __tsb_phys_patch, __tsb_phys_patch_end;
786     andn REG1, PMD_HUGE_PROTBITS, REG2; \
787     sllx REG2, PMD_PADDR_SHIFT, REG2; \
788     /* REG2 now holds PFN << PAGE_SHIFT */ \
789     - andcc REG1, PMD_HUGE_EXEC, %g0; \
790     - bne,a,pt %xcc, 1f; \
791     - OR_PTE_BIT(REG2, EXEC); \
792     -1: andcc REG1, PMD_HUGE_WRITE, %g0; \
793     + andcc REG1, PMD_HUGE_WRITE, %g0; \
794     bne,a,pt %xcc, 1f; \
795     - OR_PTE_BIT(REG2, W); \
796     + OR_PTE_BIT_1INSN(REG2, W); \
797     +1: andcc REG1, PMD_HUGE_EXEC, %g0; \
798     + be,pt %xcc, 1f; \
799     + nop; \
800     + OR_PTE_BIT_2INSN(REG2, REG1, EXEC); \
801     /* REG1 can now be clobbered, build final PTE */ \
802     1: BUILD_PTE_VALID_SZHUGE_CACHE(REG1); \
803     ba,pt %xcc, PTE_LABEL; \
804     diff --git a/arch/sparc/kernel/tsb.S b/arch/sparc/kernel/tsb.S
805     index d4bdc7a..a313e4a 100644
806     --- a/arch/sparc/kernel/tsb.S
807     +++ b/arch/sparc/kernel/tsb.S
808     @@ -136,12 +136,43 @@ tsb_miss_page_table_walk_sun4v_fastpath:
809     nop
810    
811     /* It is a huge page, use huge page TSB entry address we
812     - * calculated above.
813     + * calculated above. If the huge page TSB has not been
814     + * allocated, setup a trap stack and call hugetlb_setup()
815     + * to do so, then return from the trap to replay the TLB
816     + * miss.
817     + *
818     + * This is necessary to handle the case of transparent huge
819     + * pages where we don't really have a non-atomic context
820     + * in which to allocate the hugepage TSB hash table. When
821     + * the 'mm' faults in the hugepage for the first time, we
822     + * thus handle it here. This also makes sure that we can
823     + * allocate the TSB hash table on the correct NUMA node.
824     */
825     TRAP_LOAD_TRAP_BLOCK(%g7, %g2)
826     - ldx [%g7 + TRAP_PER_CPU_TSB_HUGE_TEMP], %g2
827     - cmp %g2, -1
828     - movne %xcc, %g2, %g1
829     + ldx [%g7 + TRAP_PER_CPU_TSB_HUGE_TEMP], %g1
830     + cmp %g1, -1
831     + bne,pt %xcc, 60f
832     + nop
833     +
834     +661: rdpr %pstate, %g5
835     + wrpr %g5, PSTATE_AG | PSTATE_MG, %pstate
836     + .section .sun4v_2insn_patch, "ax"
837     + .word 661b
838     + SET_GL(1)
839     + nop
840     + .previous
841     +
842     + rdpr %tl, %g3
843     + cmp %g3, 1
844     + bne,pn %xcc, winfix_trampoline
845     + nop
846     + ba,pt %xcc, etrap
847     + rd %pc, %g7
848     + call hugetlb_setup
849     + add %sp, PTREGS_OFF, %o0
850     + ba,pt %xcc, rtrap
851     + nop
852     +
853     60:
854     #endif
855    
856     diff --git a/arch/sparc/mm/fault_64.c b/arch/sparc/mm/fault_64.c
857     index 097aee7..5062ff3 100644
858     --- a/arch/sparc/mm/fault_64.c
859     +++ b/arch/sparc/mm/fault_64.c
860     @@ -472,8 +472,13 @@ good_area:
861     #if defined(CONFIG_HUGETLB_PAGE) || defined(CONFIG_TRANSPARENT_HUGEPAGE)
862     mm_rss = mm->context.huge_pte_count;
863     if (unlikely(mm_rss >
864     - mm->context.tsb_block[MM_TSB_HUGE].tsb_rss_limit))
865     - tsb_grow(mm, MM_TSB_HUGE, mm_rss);
866     + mm->context.tsb_block[MM_TSB_HUGE].tsb_rss_limit)) {
867     + if (mm->context.tsb_block[MM_TSB_HUGE].tsb)
868     + tsb_grow(mm, MM_TSB_HUGE, mm_rss);
869     + else
870     + hugetlb_setup(regs);
871     +
872     + }
873     #endif
874     return;
875    
876     diff --git a/arch/sparc/mm/init_64.c b/arch/sparc/mm/init_64.c
877     index c3b7242..82bbf04 100644
878     --- a/arch/sparc/mm/init_64.c
879     +++ b/arch/sparc/mm/init_64.c
880     @@ -314,16 +314,31 @@ static void __update_mmu_tsb_insert(struct mm_struct *mm, unsigned long tsb_inde
881     struct tsb *tsb = mm->context.tsb_block[tsb_index].tsb;
882     unsigned long tag;
883    
884     + if (unlikely(!tsb))
885     + return;
886     +
887     tsb += ((address >> tsb_hash_shift) &
888     (mm->context.tsb_block[tsb_index].tsb_nentries - 1UL));
889     tag = (address >> 22UL);
890     tsb_insert(tsb, tag, tte);
891     }
892    
893     +#if defined(CONFIG_HUGETLB_PAGE) || defined(CONFIG_TRANSPARENT_HUGEPAGE)
894     +static inline bool is_hugetlb_pte(pte_t pte)
895     +{
896     + if ((tlb_type == hypervisor &&
897     + (pte_val(pte) & _PAGE_SZALL_4V) == _PAGE_SZHUGE_4V) ||
898     + (tlb_type != hypervisor &&
899     + (pte_val(pte) & _PAGE_SZALL_4U) == _PAGE_SZHUGE_4U))
900     + return true;
901     + return false;
902     +}
903     +#endif
904     +
905     void update_mmu_cache(struct vm_area_struct *vma, unsigned long address, pte_t *ptep)
906     {
907     - unsigned long tsb_index, tsb_hash_shift, flags;
908     struct mm_struct *mm;
909     + unsigned long flags;
910     pte_t pte = *ptep;
911    
912     if (tlb_type != hypervisor) {
913     @@ -335,25 +350,16 @@ void update_mmu_cache(struct vm_area_struct *vma, unsigned long address, pte_t *
914    
915     mm = vma->vm_mm;
916    
917     - tsb_index = MM_TSB_BASE;
918     - tsb_hash_shift = PAGE_SHIFT;
919     -
920     spin_lock_irqsave(&mm->context.lock, flags);
921    
922     #if defined(CONFIG_HUGETLB_PAGE) || defined(CONFIG_TRANSPARENT_HUGEPAGE)
923     - if (mm->context.tsb_block[MM_TSB_HUGE].tsb != NULL) {
924     - if ((tlb_type == hypervisor &&
925     - (pte_val(pte) & _PAGE_SZALL_4V) == _PAGE_SZHUGE_4V) ||
926     - (tlb_type != hypervisor &&
927     - (pte_val(pte) & _PAGE_SZALL_4U) == _PAGE_SZHUGE_4U)) {
928     - tsb_index = MM_TSB_HUGE;
929     - tsb_hash_shift = HPAGE_SHIFT;
930     - }
931     - }
932     + if (mm->context.huge_pte_count && is_hugetlb_pte(pte))
933     + __update_mmu_tsb_insert(mm, MM_TSB_HUGE, HPAGE_SHIFT,
934     + address, pte_val(pte));
935     + else
936     #endif
937     -
938     - __update_mmu_tsb_insert(mm, tsb_index, tsb_hash_shift,
939     - address, pte_val(pte));
940     + __update_mmu_tsb_insert(mm, MM_TSB_BASE, PAGE_SHIFT,
941     + address, pte_val(pte));
942    
943     spin_unlock_irqrestore(&mm->context.lock, flags);
944     }
945     @@ -2712,14 +2718,28 @@ static void context_reload(void *__data)
946     load_secondary_context(mm);
947     }
948    
949     -void hugetlb_setup(struct mm_struct *mm)
950     +void hugetlb_setup(struct pt_regs *regs)
951     {
952     - struct tsb_config *tp = &mm->context.tsb_block[MM_TSB_HUGE];
953     + struct mm_struct *mm = current->mm;
954     + struct tsb_config *tp;
955    
956     - if (likely(tp->tsb != NULL))
957     - return;
958     + if (in_atomic() || !mm) {
959     + const struct exception_table_entry *entry;
960     +
961     + entry = search_exception_tables(regs->tpc);
962     + if (entry) {
963     + regs->tpc = entry->fixup;
964     + regs->tnpc = regs->tpc + 4;
965     + return;
966     + }
967     + pr_alert("Unexpected HugeTLB setup in atomic context.\n");
968     + die_if_kernel("HugeTSB in atomic", regs);
969     + }
970     +
971     + tp = &mm->context.tsb_block[MM_TSB_HUGE];
972     + if (likely(tp->tsb == NULL))
973     + tsb_grow(mm, MM_TSB_HUGE, 0);
974    
975     - tsb_grow(mm, MM_TSB_HUGE, 0);
976     tsb_context_switch(mm);
977     smp_tsb_sync(mm);
978    
979     diff --git a/arch/sparc/mm/tlb.c b/arch/sparc/mm/tlb.c
980     index 3e8fec3..ba6ae7f 100644
981     --- a/arch/sparc/mm/tlb.c
982     +++ b/arch/sparc/mm/tlb.c
983     @@ -135,8 +135,15 @@ void set_pmd_at(struct mm_struct *mm, unsigned long addr,
984     mm->context.huge_pte_count++;
985     else
986     mm->context.huge_pte_count--;
987     - if (mm->context.huge_pte_count == 1)
988     - hugetlb_setup(mm);
989     +
990     + /* Do not try to allocate the TSB hash table if we
991     + * don't have one already. We have various locks held
992     + * and thus we'll end up doing a GFP_KERNEL allocation
993     + * in an atomic context.
994     + *
995     + * Instead, we let the first TLB miss on a hugepage
996     + * take care of this.
997     + */
998     }
999    
1000     if (!pmd_none(orig)) {
1001     diff --git a/arch/sparc/mm/tsb.c b/arch/sparc/mm/tsb.c
1002     index 7f64743..428982b 100644
1003     --- a/arch/sparc/mm/tsb.c
1004     +++ b/arch/sparc/mm/tsb.c
1005     @@ -314,7 +314,7 @@ void tsb_grow(struct mm_struct *mm, unsigned long tsb_index, unsigned long rss)
1006     retry_tsb_alloc:
1007     gfp_flags = GFP_KERNEL;
1008     if (new_size > (PAGE_SIZE * 2))
1009     - gfp_flags = __GFP_NOWARN | __GFP_NORETRY;
1010     + gfp_flags |= __GFP_NOWARN | __GFP_NORETRY;
1011    
1012     new_tsb = kmem_cache_alloc_node(tsb_caches[new_cache_index],
1013     gfp_flags, numa_node_id());
1014     diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
1015     index 225543b..0694d09 100644
1016     --- a/arch/x86/Kconfig
1017     +++ b/arch/x86/Kconfig
1018     @@ -1253,10 +1253,6 @@ config NODES_SHIFT
1019     Specify the maximum number of NUMA Nodes available on the target
1020     system. Increases memory reserved to accommodate various tables.
1021    
1022     -config HAVE_ARCH_ALLOC_REMAP
1023     - def_bool y
1024     - depends on X86_32 && NUMA
1025     -
1026     config ARCH_HAVE_MEMORY_PRESENT
1027     def_bool y
1028     depends on X86_32 && DISCONTIGMEM
1029     diff --git a/arch/x86/include/asm/mmzone_32.h b/arch/x86/include/asm/mmzone_32.h
1030     index eb05fb3..8a9b3e2 100644
1031     --- a/arch/x86/include/asm/mmzone_32.h
1032     +++ b/arch/x86/include/asm/mmzone_32.h
1033     @@ -14,12 +14,6 @@ extern struct pglist_data *node_data[];
1034    
1035     #include <asm/numaq.h>
1036    
1037     -extern void resume_map_numa_kva(pgd_t *pgd);
1038     -
1039     -#else /* !CONFIG_NUMA */
1040     -
1041     -static inline void resume_map_numa_kva(pgd_t *pgd) {}
1042     -
1043     #endif /* CONFIG_NUMA */
1044    
1045     #ifdef CONFIG_DISCONTIGMEM
1046     diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c
1047     index 0a630dd..646d192 100644
1048     --- a/arch/x86/kernel/cpu/mshyperv.c
1049     +++ b/arch/x86/kernel/cpu/mshyperv.c
1050     @@ -68,7 +68,8 @@ static void __init ms_hyperv_init_platform(void)
1051     printk(KERN_INFO "HyperV: features 0x%x, hints 0x%x\n",
1052     ms_hyperv.features, ms_hyperv.hints);
1053    
1054     - clocksource_register_hz(&hyperv_cs, NSEC_PER_SEC/100);
1055     + if (ms_hyperv.features & HV_X64_MSR_TIME_REF_COUNT_AVAILABLE)
1056     + clocksource_register_hz(&hyperv_cs, NSEC_PER_SEC/100);
1057     }
1058    
1059     const __refconst struct hypervisor_x86 x86_hyper_ms_hyperv = {
1060     diff --git a/arch/x86/mm/numa.c b/arch/x86/mm/numa.c
1061     index 2d125be..8504f36 100644
1062     --- a/arch/x86/mm/numa.c
1063     +++ b/arch/x86/mm/numa.c
1064     @@ -193,7 +193,6 @@ int __init numa_add_memblk(int nid, u64 start, u64 end)
1065     static void __init setup_node_data(int nid, u64 start, u64 end)
1066     {
1067     const size_t nd_size = roundup(sizeof(pg_data_t), PAGE_SIZE);
1068     - bool remapped = false;
1069     u64 nd_pa;
1070     void *nd;
1071     int tnid;
1072     @@ -205,37 +204,28 @@ static void __init setup_node_data(int nid, u64 start, u64 end)
1073     if (end && (end - start) < NODE_MIN_SIZE)
1074     return;
1075    
1076     - /* initialize remap allocator before aligning to ZONE_ALIGN */
1077     - init_alloc_remap(nid, start, end);
1078     -
1079     start = roundup(start, ZONE_ALIGN);
1080    
1081     printk(KERN_INFO "Initmem setup node %d [mem %#010Lx-%#010Lx]\n",
1082     nid, start, end - 1);
1083    
1084     /*
1085     - * Allocate node data. Try remap allocator first, node-local
1086     - * memory and then any node. Never allocate in DMA zone.
1087     + * Allocate node data. Try node-local memory and then any node.
1088     + * Never allocate in DMA zone.
1089     */
1090     - nd = alloc_remap(nid, nd_size);
1091     - if (nd) {
1092     - nd_pa = __pa(nd);
1093     - remapped = true;
1094     - } else {
1095     - nd_pa = memblock_alloc_nid(nd_size, SMP_CACHE_BYTES, nid);
1096     - if (!nd_pa) {
1097     - pr_err("Cannot find %zu bytes in node %d\n",
1098     - nd_size, nid);
1099     - return;
1100     - }
1101     - nd = __va(nd_pa);
1102     + nd_pa = memblock_alloc_nid(nd_size, SMP_CACHE_BYTES, nid);
1103     + if (!nd_pa) {
1104     + pr_err("Cannot find %zu bytes in node %d\n",
1105     + nd_size, nid);
1106     + return;
1107     }
1108     + nd = __va(nd_pa);
1109    
1110     /* report and initialize */
1111     - printk(KERN_INFO " NODE_DATA [mem %#010Lx-%#010Lx]%s\n",
1112     - nd_pa, nd_pa + nd_size - 1, remapped ? " (remapped)" : "");
1113     + printk(KERN_INFO " NODE_DATA [mem %#010Lx-%#010Lx]\n",
1114     + nd_pa, nd_pa + nd_size - 1);
1115     tnid = early_pfn_to_nid(nd_pa >> PAGE_SHIFT);
1116     - if (!remapped && tnid != nid)
1117     + if (tnid != nid)
1118     printk(KERN_INFO " NODE_DATA(%d) on node %d\n", nid, tnid);
1119    
1120     node_data[nid] = nd;
1121     diff --git a/arch/x86/mm/numa_32.c b/arch/x86/mm/numa_32.c
1122     index 534255a..73a6d73 100644
1123     --- a/arch/x86/mm/numa_32.c
1124     +++ b/arch/x86/mm/numa_32.c
1125     @@ -73,167 +73,6 @@ unsigned long node_memmap_size_bytes(int nid, unsigned long start_pfn,
1126    
1127     extern unsigned long highend_pfn, highstart_pfn;
1128    
1129     -#define LARGE_PAGE_BYTES (PTRS_PER_PTE * PAGE_SIZE)
1130     -
1131     -static void *node_remap_start_vaddr[MAX_NUMNODES];
1132     -void set_pmd_pfn(unsigned long vaddr, unsigned long pfn, pgprot_t flags);
1133     -
1134     -/*
1135     - * Remap memory allocator
1136     - */
1137     -static unsigned long node_remap_start_pfn[MAX_NUMNODES];
1138     -static void *node_remap_end_vaddr[MAX_NUMNODES];
1139     -static void *node_remap_alloc_vaddr[MAX_NUMNODES];
1140     -
1141     -/**
1142     - * alloc_remap - Allocate remapped memory
1143     - * @nid: NUMA node to allocate memory from
1144     - * @size: The size of allocation
1145     - *
1146     - * Allocate @size bytes from the remap area of NUMA node @nid. The
1147     - * size of the remap area is predetermined by init_alloc_remap() and
1148     - * only the callers considered there should call this function. For
1149     - * more info, please read the comment on top of init_alloc_remap().
1150     - *
1151     - * The caller must be ready to handle allocation failure from this
1152     - * function and fall back to regular memory allocator in such cases.
1153     - *
1154     - * CONTEXT:
1155     - * Single CPU early boot context.
1156     - *
1157     - * RETURNS:
1158     - * Pointer to the allocated memory on success, %NULL on failure.
1159     - */
1160     -void *alloc_remap(int nid, unsigned long size)
1161     -{
1162     - void *allocation = node_remap_alloc_vaddr[nid];
1163     -
1164     - size = ALIGN(size, L1_CACHE_BYTES);
1165     -
1166     - if (!allocation || (allocation + size) > node_remap_end_vaddr[nid])
1167     - return NULL;
1168     -
1169     - node_remap_alloc_vaddr[nid] += size;
1170     - memset(allocation, 0, size);
1171     -
1172     - return allocation;
1173     -}
1174     -
1175     -#ifdef CONFIG_HIBERNATION
1176     -/**
1177     - * resume_map_numa_kva - add KVA mapping to the temporary page tables created
1178     - * during resume from hibernation
1179     - * @pgd_base - temporary resume page directory
1180     - */
1181     -void resume_map_numa_kva(pgd_t *pgd_base)
1182     -{
1183     - int node;
1184     -
1185     - for_each_online_node(node) {
1186     - unsigned long start_va, start_pfn, nr_pages, pfn;
1187     -
1188     - start_va = (unsigned long)node_remap_start_vaddr[node];
1189     - start_pfn = node_remap_start_pfn[node];
1190     - nr_pages = (node_remap_end_vaddr[node] -
1191     - node_remap_start_vaddr[node]) >> PAGE_SHIFT;
1192     -
1193     - printk(KERN_DEBUG "%s: node %d\n", __func__, node);
1194     -
1195     - for (pfn = 0; pfn < nr_pages; pfn += PTRS_PER_PTE) {
1196     - unsigned long vaddr = start_va + (pfn << PAGE_SHIFT);
1197     - pgd_t *pgd = pgd_base + pgd_index(vaddr);
1198     - pud_t *pud = pud_offset(pgd, vaddr);
1199     - pmd_t *pmd = pmd_offset(pud, vaddr);
1200     -
1201     - set_pmd(pmd, pfn_pmd(start_pfn + pfn,
1202     - PAGE_KERNEL_LARGE_EXEC));
1203     -
1204     - printk(KERN_DEBUG "%s: %08lx -> pfn %08lx\n",
1205     - __func__, vaddr, start_pfn + pfn);
1206     - }
1207     - }
1208     -}
1209     -#endif
1210     -
1211     -/**
1212     - * init_alloc_remap - Initialize remap allocator for a NUMA node
1213     - * @nid: NUMA node to initizlie remap allocator for
1214     - *
1215     - * NUMA nodes may end up without any lowmem. As allocating pgdat and
1216     - * memmap on a different node with lowmem is inefficient, a special
1217     - * remap allocator is implemented which can be used by alloc_remap().
1218     - *
1219     - * For each node, the amount of memory which will be necessary for
1220     - * pgdat and memmap is calculated and two memory areas of the size are
1221     - * allocated - one in the node and the other in lowmem; then, the area
1222     - * in the node is remapped to the lowmem area.
1223     - *
1224     - * As pgdat and memmap must be allocated in lowmem anyway, this
1225     - * doesn't waste lowmem address space; however, the actual lowmem
1226     - * which gets remapped over is wasted. The amount shouldn't be
1227     - * problematic on machines this feature will be used.
1228     - *
1229     - * Initialization failure isn't fatal. alloc_remap() is used
1230     - * opportunistically and the callers will fall back to other memory
1231     - * allocation mechanisms on failure.
1232     - */
1233     -void __init init_alloc_remap(int nid, u64 start, u64 end)
1234     -{
1235     - unsigned long start_pfn = start >> PAGE_SHIFT;
1236     - unsigned long end_pfn = end >> PAGE_SHIFT;
1237     - unsigned long size, pfn;
1238     - u64 node_pa, remap_pa;
1239     - void *remap_va;
1240     -
1241     - /*
1242     - * The acpi/srat node info can show hot-add memroy zones where
1243     - * memory could be added but not currently present.
1244     - */
1245     - printk(KERN_DEBUG "node %d pfn: [%lx - %lx]\n",
1246     - nid, start_pfn, end_pfn);
1247     -
1248     - /* calculate the necessary space aligned to large page size */
1249     - size = node_memmap_size_bytes(nid, start_pfn, end_pfn);
1250     - size += ALIGN(sizeof(pg_data_t), PAGE_SIZE);
1251     - size = ALIGN(size, LARGE_PAGE_BYTES);
1252     -
1253     - /* allocate node memory and the lowmem remap area */
1254     - node_pa = memblock_find_in_range(start, end, size, LARGE_PAGE_BYTES);
1255     - if (!node_pa) {
1256     - pr_warning("remap_alloc: failed to allocate %lu bytes for node %d\n",
1257     - size, nid);
1258     - return;
1259     - }
1260     - memblock_reserve(node_pa, size);
1261     -
1262     - remap_pa = memblock_find_in_range(min_low_pfn << PAGE_SHIFT,
1263     - max_low_pfn << PAGE_SHIFT,
1264     - size, LARGE_PAGE_BYTES);
1265     - if (!remap_pa) {
1266     - pr_warning("remap_alloc: failed to allocate %lu bytes remap area for node %d\n",
1267     - size, nid);
1268     - memblock_free(node_pa, size);
1269     - return;
1270     - }
1271     - memblock_reserve(remap_pa, size);
1272     - remap_va = phys_to_virt(remap_pa);
1273     -
1274     - /* perform actual remap */
1275     - for (pfn = 0; pfn < size >> PAGE_SHIFT; pfn += PTRS_PER_PTE)
1276     - set_pmd_pfn((unsigned long)remap_va + (pfn << PAGE_SHIFT),
1277     - (node_pa >> PAGE_SHIFT) + pfn,
1278     - PAGE_KERNEL_LARGE);
1279     -
1280     - /* initialize remap allocator parameters */
1281     - node_remap_start_pfn[nid] = node_pa >> PAGE_SHIFT;
1282     - node_remap_start_vaddr[nid] = remap_va;
1283     - node_remap_end_vaddr[nid] = remap_va + size;
1284     - node_remap_alloc_vaddr[nid] = remap_va;
1285     -
1286     - printk(KERN_DEBUG "remap_alloc: node %d [%08llx-%08llx) -> [%p-%p)\n",
1287     - nid, node_pa, node_pa + size, remap_va, remap_va + size);
1288     -}
1289     -
1290     void __init initmem_init(void)
1291     {
1292     x86_numa_init();
1293     diff --git a/arch/x86/mm/numa_internal.h b/arch/x86/mm/numa_internal.h
1294     index 7178c3a..ad86ec9 100644
1295     --- a/arch/x86/mm/numa_internal.h
1296     +++ b/arch/x86/mm/numa_internal.h
1297     @@ -21,12 +21,6 @@ void __init numa_reset_distance(void);
1298    
1299     void __init x86_numa_init(void);
1300    
1301     -#ifdef CONFIG_X86_64
1302     -static inline void init_alloc_remap(int nid, u64 start, u64 end) { }
1303     -#else
1304     -void __init init_alloc_remap(int nid, u64 start, u64 end);
1305     -#endif
1306     -
1307     #ifdef CONFIG_NUMA_EMU
1308     void __init numa_emulation(struct numa_meminfo *numa_meminfo,
1309     int numa_dist_cnt);
1310     diff --git a/arch/x86/power/hibernate_32.c b/arch/x86/power/hibernate_32.c
1311     index 74202c1..7d28c88 100644
1312     --- a/arch/x86/power/hibernate_32.c
1313     +++ b/arch/x86/power/hibernate_32.c
1314     @@ -129,8 +129,6 @@ static int resume_physical_mapping_init(pgd_t *pgd_base)
1315     }
1316     }
1317    
1318     - resume_map_numa_kva(pgd_base);
1319     -
1320     return 0;
1321     }
1322    
1323     diff --git a/arch/x86/xen/spinlock.c b/arch/x86/xen/spinlock.c
1324     index 83e866d..f7a080e 100644
1325     --- a/arch/x86/xen/spinlock.c
1326     +++ b/arch/x86/xen/spinlock.c
1327     @@ -328,7 +328,6 @@ static noinline void xen_spin_unlock_slow(struct xen_spinlock *xl)
1328     if (per_cpu(lock_spinners, cpu) == xl) {
1329     ADD_STATS(released_slow_kicked, 1);
1330     xen_send_IPI_one(cpu, XEN_SPIN_UNLOCK_VECTOR);
1331     - break;
1332     }
1333     }
1334     }
1335     diff --git a/drivers/base/bus.c b/drivers/base/bus.c
1336     index 24eb078..6856303 100644
1337     --- a/drivers/base/bus.c
1338     +++ b/drivers/base/bus.c
1339     @@ -290,7 +290,7 @@ int bus_for_each_dev(struct bus_type *bus, struct device *start,
1340     struct device *dev;
1341     int error = 0;
1342    
1343     - if (!bus)
1344     + if (!bus || !bus->p)
1345     return -EINVAL;
1346    
1347     klist_iter_init_node(&bus->p->klist_devices, &i,
1348     @@ -324,7 +324,7 @@ struct device *bus_find_device(struct bus_type *bus,
1349     struct klist_iter i;
1350     struct device *dev;
1351    
1352     - if (!bus)
1353     + if (!bus || !bus->p)
1354     return NULL;
1355    
1356     klist_iter_init_node(&bus->p->klist_devices, &i,
1357     diff --git a/drivers/base/dd.c b/drivers/base/dd.c
1358     index e3bbed8..61d3e1b 100644
1359     --- a/drivers/base/dd.c
1360     +++ b/drivers/base/dd.c
1361     @@ -172,6 +172,8 @@ static int deferred_probe_initcall(void)
1362    
1363     driver_deferred_probe_enable = true;
1364     driver_deferred_probe_trigger();
1365     + /* Sort as many dependencies as possible before exiting initcalls */
1366     + flush_workqueue(deferred_wq);
1367     return 0;
1368     }
1369     late_initcall(deferred_probe_initcall);
1370     diff --git a/drivers/dca/dca-core.c b/drivers/dca/dca-core.c
1371     index bc6f5fa..819dfda 100644
1372     --- a/drivers/dca/dca-core.c
1373     +++ b/drivers/dca/dca-core.c
1374     @@ -420,6 +420,11 @@ void unregister_dca_provider(struct dca_provider *dca, struct device *dev)
1375    
1376     raw_spin_lock_irqsave(&dca_lock, flags);
1377    
1378     + if (list_empty(&dca_domains)) {
1379     + raw_spin_unlock_irqrestore(&dca_lock, flags);
1380     + return;
1381     + }
1382     +
1383     list_del(&dca->node);
1384    
1385     pci_rc = dca_pci_rc_from_dev(dev);
1386     diff --git a/drivers/dma/sh/shdma.c b/drivers/dma/sh/shdma.c
1387     index 3315e4b..b70709b 100644
1388     --- a/drivers/dma/sh/shdma.c
1389     +++ b/drivers/dma/sh/shdma.c
1390     @@ -326,7 +326,7 @@ static int sh_dmae_set_slave(struct shdma_chan *schan,
1391     shdma_chan);
1392     const struct sh_dmae_slave_config *cfg = dmae_find_slave(sh_chan, slave_id);
1393     if (!cfg)
1394     - return -ENODEV;
1395     + return -ENXIO;
1396    
1397     if (!try)
1398     sh_chan->config = cfg;
1399     diff --git a/drivers/gpio/gpio-em.c b/drivers/gpio/gpio-em.c
1400     index bdc8302..deca78f 100644
1401     --- a/drivers/gpio/gpio-em.c
1402     +++ b/drivers/gpio/gpio-em.c
1403     @@ -299,8 +299,9 @@ static int em_gio_probe(struct platform_device *pdev)
1404     irq_chip->irq_set_type = em_gio_irq_set_type;
1405     irq_chip->flags = IRQCHIP_SKIP_SET_WAKE;
1406    
1407     - p->irq_domain = irq_domain_add_linear(pdev->dev.of_node,
1408     + p->irq_domain = irq_domain_add_simple(pdev->dev.of_node,
1409     pdata->number_of_pins,
1410     + pdata->irq_base,
1411     &em_gio_irq_domain_ops, p);
1412     if (!p->irq_domain) {
1413     ret = -ENXIO;
1414     diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
1415     index f2d667b..bcb2c0a 100644
1416     --- a/drivers/gpu/drm/drm_crtc.c
1417     +++ b/drivers/gpu/drm/drm_crtc.c
1418     @@ -2089,7 +2089,7 @@ uint32_t drm_mode_legacy_fb_format(uint32_t bpp, uint32_t depth)
1419    
1420     switch (bpp) {
1421     case 8:
1422     - fmt = DRM_FORMAT_RGB332;
1423     + fmt = DRM_FORMAT_C8;
1424     break;
1425     case 16:
1426     if (depth == 15)
1427     @@ -3702,6 +3702,7 @@ void drm_fb_get_bpp_depth(uint32_t format, unsigned int *depth,
1428     int *bpp)
1429     {
1430     switch (format) {
1431     + case DRM_FORMAT_C8:
1432     case DRM_FORMAT_RGB332:
1433     case DRM_FORMAT_BGR233:
1434     *depth = 8;
1435     diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
1436     index 5a3770f..aaded22 100644
1437     --- a/drivers/gpu/drm/drm_edid.c
1438     +++ b/drivers/gpu/drm/drm_edid.c
1439     @@ -87,9 +87,6 @@ static struct edid_quirk {
1440     int product_id;
1441     u32 quirks;
1442     } edid_quirk_list[] = {
1443     - /* ASUS VW222S */
1444     - { "ACI", 0x22a2, EDID_QUIRK_FORCE_REDUCED_BLANKING },
1445     -
1446     /* Acer AL1706 */
1447     { "ACR", 44358, EDID_QUIRK_PREFER_LARGE_60 },
1448     /* Acer F51 */
1449     @@ -357,10 +354,14 @@ drm_do_get_edid(struct drm_connector *connector, struct i2c_adapter *adapter)
1450     break;
1451     }
1452     }
1453     - if (i == 4)
1454     +
1455     + if (i == 4 && print_bad_edid) {
1456     dev_warn(connector->dev->dev,
1457     "%s: Ignoring invalid EDID block %d.\n",
1458     drm_get_connector_name(connector), j);
1459     +
1460     + connector->bad_edid_counter++;
1461     + }
1462     }
1463    
1464     if (valid_extensions != block[0x7e]) {
1465     @@ -2020,7 +2021,8 @@ int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid)
1466     num_modes += add_cvt_modes(connector, edid);
1467     num_modes += add_standard_modes(connector, edid);
1468     num_modes += add_established_modes(connector, edid);
1469     - num_modes += add_inferred_modes(connector, edid);
1470     + if (edid->features & DRM_EDID_FEATURE_DEFAULT_GTF)
1471     + num_modes += add_inferred_modes(connector, edid);
1472     num_modes += add_cea_modes(connector, edid);
1473    
1474     if (quirks & (EDID_QUIRK_PREFER_LARGE_60 | EDID_QUIRK_PREFER_LARGE_75))
1475     diff --git a/drivers/gpu/drm/drm_usb.c b/drivers/gpu/drm/drm_usb.c
1476     index 3cec306..34a156f 100644
1477     --- a/drivers/gpu/drm/drm_usb.c
1478     +++ b/drivers/gpu/drm/drm_usb.c
1479     @@ -18,7 +18,7 @@ int drm_get_usb_dev(struct usb_interface *interface,
1480    
1481     usbdev = interface_to_usbdev(interface);
1482     dev->usbdev = usbdev;
1483     - dev->dev = &usbdev->dev;
1484     + dev->dev = &interface->dev;
1485    
1486     mutex_lock(&drm_global_mutex);
1487    
1488     diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
1489     index 9d4a2c2..8a7c48b 100644
1490     --- a/drivers/gpu/drm/i915/i915_debugfs.c
1491     +++ b/drivers/gpu/drm/i915/i915_debugfs.c
1492     @@ -691,7 +691,7 @@ static int i915_error_state(struct seq_file *m, void *unused)
1493    
1494     seq_printf(m, "Time: %ld s %ld us\n", error->time.tv_sec,
1495     error->time.tv_usec);
1496     - seq_printf(m, "Kernel: " UTS_RELEASE);
1497     + seq_printf(m, "Kernel: " UTS_RELEASE "\n");
1498     seq_printf(m, "PCI ID: 0x%04x\n", dev->pci_device);
1499     seq_printf(m, "EIR: 0x%08x\n", error->eir);
1500     seq_printf(m, "IER: 0x%08x\n", error->ier);
1501     @@ -888,7 +888,7 @@ static int i915_cur_delayinfo(struct seq_file *m, void *unused)
1502     u32 gt_perf_status = I915_READ(GEN6_GT_PERF_STATUS);
1503     u32 rp_state_limits = I915_READ(GEN6_RP_STATE_LIMITS);
1504     u32 rp_state_cap = I915_READ(GEN6_RP_STATE_CAP);
1505     - u32 rpstat;
1506     + u32 rpstat, cagf;
1507     u32 rpupei, rpcurup, rpprevup;
1508     u32 rpdownei, rpcurdown, rpprevdown;
1509     int max_freq;
1510     @@ -907,6 +907,11 @@ static int i915_cur_delayinfo(struct seq_file *m, void *unused)
1511     rpdownei = I915_READ(GEN6_RP_CUR_DOWN_EI);
1512     rpcurdown = I915_READ(GEN6_RP_CUR_DOWN);
1513     rpprevdown = I915_READ(GEN6_RP_PREV_DOWN);
1514     + if (IS_HASWELL(dev))
1515     + cagf = (rpstat & HSW_CAGF_MASK) >> HSW_CAGF_SHIFT;
1516     + else
1517     + cagf = (rpstat & GEN6_CAGF_MASK) >> GEN6_CAGF_SHIFT;
1518     + cagf *= GT_FREQUENCY_MULTIPLIER;
1519    
1520     gen6_gt_force_wake_put(dev_priv);
1521     mutex_unlock(&dev->struct_mutex);
1522     @@ -919,8 +924,7 @@ static int i915_cur_delayinfo(struct seq_file *m, void *unused)
1523     gt_perf_status & 0xff);
1524     seq_printf(m, "Render p-state limit: %d\n",
1525     rp_state_limits & 0xff);
1526     - seq_printf(m, "CAGF: %dMHz\n", ((rpstat & GEN6_CAGF_MASK) >>
1527     - GEN6_CAGF_SHIFT) * GT_FREQUENCY_MULTIPLIER);
1528     + seq_printf(m, "CAGF: %dMHz\n", cagf);
1529     seq_printf(m, "RP CUR UP EI: %dus\n", rpupei &
1530     GEN6_CURICONT_MASK);
1531     seq_printf(m, "RP CUR UP: %dus\n", rpcurup &
1532     diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
1533     index 12ab3bd..7339a4b 100644
1534     --- a/drivers/gpu/drm/i915/i915_drv.h
1535     +++ b/drivers/gpu/drm/i915/i915_drv.h
1536     @@ -919,7 +919,7 @@ typedef struct drm_i915_private {
1537     bool hw_contexts_disabled;
1538     uint32_t hw_context_size;
1539    
1540     - bool fdi_rx_polarity_reversed;
1541     + u32 fdi_rx_config;
1542    
1543     struct i915_suspend_saved_registers regfile;
1544    
1545     diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
1546     index 8febea6..de45b60 100644
1547     --- a/drivers/gpu/drm/i915/i915_gem.c
1548     +++ b/drivers/gpu/drm/i915/i915_gem.c
1549     @@ -1918,9 +1918,6 @@ i915_gem_object_move_to_inactive(struct drm_i915_gem_object *obj)
1550     BUG_ON(obj->base.write_domain & ~I915_GEM_GPU_DOMAINS);
1551     BUG_ON(!obj->active);
1552    
1553     - if (obj->pin_count) /* are we a framebuffer? */
1554     - intel_mark_fb_idle(obj);
1555     -
1556     list_move_tail(&obj->mm_list, &dev_priv->mm.inactive_list);
1557    
1558     list_del_init(&obj->ring_list);
1559     @@ -3848,7 +3845,7 @@ void i915_gem_l3_remap(struct drm_device *dev)
1560     u32 misccpctl;
1561     int i;
1562    
1563     - if (!IS_IVYBRIDGE(dev))
1564     + if (!HAS_L3_GPU_CACHE(dev))
1565     return;
1566    
1567     if (!dev_priv->l3_parity.remap_info)
1568     diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
1569     index 59afb7e..2bfd05a 100644
1570     --- a/drivers/gpu/drm/i915/i915_reg.h
1571     +++ b/drivers/gpu/drm/i915/i915_reg.h
1572     @@ -3927,7 +3927,7 @@
1573     #define FDI_10BPC (1<<16)
1574     #define FDI_6BPC (2<<16)
1575     #define FDI_12BPC (3<<16)
1576     -#define FDI_LINK_REVERSE_OVERWRITE (1<<15)
1577     +#define FDI_RX_LINK_REVERSAL_OVERRIDE (1<<15)
1578     #define FDI_DMI_LINK_REVERSE_MASK (1<<14)
1579     #define FDI_RX_PLL_ENABLE (1<<13)
1580     #define FDI_FS_ERR_CORRECT_ENABLE (1<<11)
1581     @@ -4211,7 +4211,9 @@
1582     #define GEN6_RP_INTERRUPT_LIMITS 0xA014
1583     #define GEN6_RPSTAT1 0xA01C
1584     #define GEN6_CAGF_SHIFT 8
1585     +#define HSW_CAGF_SHIFT 7
1586     #define GEN6_CAGF_MASK (0x7f << GEN6_CAGF_SHIFT)
1587     +#define HSW_CAGF_MASK (0x7f << HSW_CAGF_SHIFT)
1588     #define GEN6_RP_CONTROL 0xA024
1589     #define GEN6_RP_MEDIA_TURBO (1<<11)
1590     #define GEN6_RP_MEDIA_MODE_MASK (3<<9)
1591     @@ -4280,8 +4282,8 @@
1592     #define GEN6_PCODE_READ_MIN_FREQ_TABLE 0x9
1593     #define GEN6_PCODE_WRITE_RC6VIDS 0x4
1594     #define GEN6_PCODE_READ_RC6VIDS 0x5
1595     -#define GEN6_ENCODE_RC6_VID(mv) (((mv) / 5) - 245) < 0 ?: 0
1596     -#define GEN6_DECODE_RC6_VID(vids) (((vids) * 5) > 0 ? ((vids) * 5) + 245 : 0)
1597     +#define GEN6_ENCODE_RC6_VID(mv) (((mv) - 245) / 5)
1598     +#define GEN6_DECODE_RC6_VID(vids) (((vids) * 5) + 245)
1599     #define GEN6_PCODE_DATA 0x138128
1600     #define GEN6_PCODE_FREQ_IA_RATIO_SHIFT 8
1601    
1602     @@ -4524,6 +4526,7 @@
1603     #define DDI_BUF_EMP_800MV_0DB_HSW (7<<24) /* Sel7 */
1604     #define DDI_BUF_EMP_800MV_3_5DB_HSW (8<<24) /* Sel8 */
1605     #define DDI_BUF_EMP_MASK (0xf<<24)
1606     +#define DDI_BUF_PORT_REVERSAL (1<<16)
1607     #define DDI_BUF_IS_IDLE (1<<7)
1608     #define DDI_A_4_LANES (1<<4)
1609     #define DDI_PORT_WIDTH_X1 (0<<1)
1610     diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c
1611     index 9293878..06b1786 100644
1612     --- a/drivers/gpu/drm/i915/intel_crt.c
1613     +++ b/drivers/gpu/drm/i915/intel_crt.c
1614     @@ -800,10 +800,14 @@ void intel_crt_init(struct drm_device *dev)
1615     dev_priv->hotplug_supported_mask |= CRT_HOTPLUG_INT_STATUS;
1616    
1617     /*
1618     - * TODO: find a proper way to discover whether we need to set the
1619     - * polarity reversal bit or not, instead of relying on the BIOS.
1620     + * TODO: find a proper way to discover whether we need to set the the
1621     + * polarity and link reversal bits or not, instead of relying on the
1622     + * BIOS.
1623     */
1624     - if (HAS_PCH_LPT(dev))
1625     - dev_priv->fdi_rx_polarity_reversed =
1626     - !!(I915_READ(_FDI_RXA_CTL) & FDI_RX_POLARITY_REVERSED_LPT);
1627     + if (HAS_PCH_LPT(dev)) {
1628     + u32 fdi_config = FDI_RX_POLARITY_REVERSED_LPT |
1629     + FDI_RX_LINK_REVERSAL_OVERRIDE;
1630     +
1631     + dev_priv->fdi_rx_config = I915_READ(_FDI_RXA_CTL) & fdi_config;
1632     + }
1633     }
1634     diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
1635     index 4bad0f7..59b778d 100644
1636     --- a/drivers/gpu/drm/i915/intel_ddi.c
1637     +++ b/drivers/gpu/drm/i915/intel_ddi.c
1638     @@ -178,10 +178,8 @@ void hsw_fdi_link_train(struct drm_crtc *crtc)
1639     FDI_RX_TP1_TO_TP2_48 | FDI_RX_FDI_DELAY_90);
1640    
1641     /* Enable the PCH Receiver FDI PLL */
1642     - rx_ctl_val = FDI_RX_PLL_ENABLE | FDI_RX_ENHANCE_FRAME_ENABLE |
1643     - ((intel_crtc->fdi_lanes - 1) << 19);
1644     - if (dev_priv->fdi_rx_polarity_reversed)
1645     - rx_ctl_val |= FDI_RX_POLARITY_REVERSED_LPT;
1646     + rx_ctl_val = dev_priv->fdi_rx_config | FDI_RX_ENHANCE_FRAME_ENABLE |
1647     + FDI_RX_PLL_ENABLE | ((intel_crtc->fdi_lanes - 1) << 19);
1648     I915_WRITE(_FDI_RXA_CTL, rx_ctl_val);
1649     POSTING_READ(_FDI_RXA_CTL);
1650     udelay(220);
1651     @@ -203,7 +201,10 @@ void hsw_fdi_link_train(struct drm_crtc *crtc)
1652     DP_TP_CTL_LINK_TRAIN_PAT1 |
1653     DP_TP_CTL_ENABLE);
1654    
1655     - /* Configure and enable DDI_BUF_CTL for DDI E with next voltage */
1656     + /* Configure and enable DDI_BUF_CTL for DDI E with next voltage.
1657     + * DDI E does not support port reversal, the functionality is
1658     + * achieved on the PCH side in FDI_RX_CTL, so no need to set the
1659     + * port reversal bit */
1660     I915_WRITE(DDI_BUF_CTL(PORT_E),
1661     DDI_BUF_CTL_ENABLE |
1662     ((intel_crtc->fdi_lanes - 1) << 1) |
1663     @@ -677,8 +678,11 @@ static void intel_ddi_mode_set(struct drm_encoder *encoder,
1664    
1665     if (type == INTEL_OUTPUT_DISPLAYPORT || type == INTEL_OUTPUT_EDP) {
1666     struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
1667     + struct intel_digital_port *intel_dig_port =
1668     + enc_to_dig_port(encoder);
1669    
1670     - intel_dp->DP = DDI_BUF_CTL_ENABLE | DDI_BUF_EMP_400MV_0DB_HSW;
1671     + intel_dp->DP = intel_dig_port->port_reversal |
1672     + DDI_BUF_CTL_ENABLE | DDI_BUF_EMP_400MV_0DB_HSW;
1673     switch (intel_dp->lane_count) {
1674     case 1:
1675     intel_dp->DP |= DDI_PORT_WIDTH_X1;
1676     @@ -1291,11 +1295,15 @@ static void intel_enable_ddi(struct intel_encoder *intel_encoder)
1677     int type = intel_encoder->type;
1678    
1679     if (type == INTEL_OUTPUT_HDMI) {
1680     + struct intel_digital_port *intel_dig_port =
1681     + enc_to_dig_port(encoder);
1682     +
1683     /* In HDMI/DVI mode, the port width, and swing/emphasis values
1684     * are ignored so nothing special needs to be done besides
1685     * enabling the port.
1686     */
1687     - I915_WRITE(DDI_BUF_CTL(port), DDI_BUF_CTL_ENABLE);
1688     + I915_WRITE(DDI_BUF_CTL(port),
1689     + intel_dig_port->port_reversal | DDI_BUF_CTL_ENABLE);
1690     } else if (type == INTEL_OUTPUT_EDP) {
1691     struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
1692    
1693     @@ -1457,6 +1465,7 @@ static const struct drm_encoder_helper_funcs intel_ddi_helper_funcs = {
1694    
1695     void intel_ddi_init(struct drm_device *dev, enum port port)
1696     {
1697     + struct drm_i915_private *dev_priv = dev->dev_private;
1698     struct intel_digital_port *intel_dig_port;
1699     struct intel_encoder *intel_encoder;
1700     struct drm_encoder *encoder;
1701     @@ -1497,6 +1506,8 @@ void intel_ddi_init(struct drm_device *dev, enum port port)
1702     intel_encoder->get_hw_state = intel_ddi_get_hw_state;
1703    
1704     intel_dig_port->port = port;
1705     + intel_dig_port->port_reversal = I915_READ(DDI_BUF_CTL(port)) &
1706     + DDI_BUF_PORT_REVERSAL;
1707     if (hdmi_connector)
1708     intel_dig_port->hdmi.sdvox_reg = DDI_BUF_CTL(port);
1709     else
1710     diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
1711     index da1ad9c..80aa1fc 100644
1712     --- a/drivers/gpu/drm/i915/intel_display.c
1713     +++ b/drivers/gpu/drm/i915/intel_display.c
1714     @@ -154,8 +154,8 @@ static const intel_limit_t intel_limits_i9xx_sdvo = {
1715     .vco = { .min = 1400000, .max = 2800000 },
1716     .n = { .min = 1, .max = 6 },
1717     .m = { .min = 70, .max = 120 },
1718     - .m1 = { .min = 10, .max = 22 },
1719     - .m2 = { .min = 5, .max = 9 },
1720     + .m1 = { .min = 8, .max = 18 },
1721     + .m2 = { .min = 3, .max = 7 },
1722     .p = { .min = 5, .max = 80 },
1723     .p1 = { .min = 1, .max = 8 },
1724     .p2 = { .dot_limit = 200000,
1725     @@ -2017,18 +2017,29 @@ void intel_unpin_fb_obj(struct drm_i915_gem_object *obj)
1726    
1727     /* Computes the linear offset to the base tile and adjusts x, y. bytes per pixel
1728     * is assumed to be a power-of-two. */
1729     -unsigned long intel_gen4_compute_offset_xtiled(int *x, int *y,
1730     - unsigned int bpp,
1731     - unsigned int pitch)
1732     +unsigned long intel_gen4_compute_page_offset(int *x, int *y,
1733     + unsigned int tiling_mode,
1734     + unsigned int cpp,
1735     + unsigned int pitch)
1736     {
1737     - int tile_rows, tiles;
1738     + if (tiling_mode != I915_TILING_NONE) {
1739     + unsigned int tile_rows, tiles;
1740     +
1741     + tile_rows = *y / 8;
1742     + *y %= 8;
1743    
1744     - tile_rows = *y / 8;
1745     - *y %= 8;
1746     - tiles = *x / (512/bpp);
1747     - *x %= 512/bpp;
1748     + tiles = *x / (512/cpp);
1749     + *x %= 512/cpp;
1750     +
1751     + return tile_rows * pitch * 8 + tiles * 4096;
1752     + } else {
1753     + unsigned int offset;
1754    
1755     - return tile_rows * pitch * 8 + tiles * 4096;
1756     + offset = *y * pitch + *x * cpp;
1757     + *y = 0;
1758     + *x = (offset & 4095) / cpp;
1759     + return offset & -4096;
1760     + }
1761     }
1762    
1763     static int i9xx_update_plane(struct drm_crtc *crtc, struct drm_framebuffer *fb,
1764     @@ -2105,9 +2116,9 @@ static int i9xx_update_plane(struct drm_crtc *crtc, struct drm_framebuffer *fb,
1765    
1766     if (INTEL_INFO(dev)->gen >= 4) {
1767     intel_crtc->dspaddr_offset =
1768     - intel_gen4_compute_offset_xtiled(&x, &y,
1769     - fb->bits_per_pixel / 8,
1770     - fb->pitches[0]);
1771     + intel_gen4_compute_page_offset(&x, &y, obj->tiling_mode,
1772     + fb->bits_per_pixel / 8,
1773     + fb->pitches[0]);
1774     linear_offset -= intel_crtc->dspaddr_offset;
1775     } else {
1776     intel_crtc->dspaddr_offset = linear_offset;
1777     @@ -2198,9 +2209,9 @@ static int ironlake_update_plane(struct drm_crtc *crtc,
1778    
1779     linear_offset = y * fb->pitches[0] + x * (fb->bits_per_pixel / 8);
1780     intel_crtc->dspaddr_offset =
1781     - intel_gen4_compute_offset_xtiled(&x, &y,
1782     - fb->bits_per_pixel / 8,
1783     - fb->pitches[0]);
1784     + intel_gen4_compute_page_offset(&x, &y, obj->tiling_mode,
1785     + fb->bits_per_pixel / 8,
1786     + fb->pitches[0]);
1787     linear_offset -= intel_crtc->dspaddr_offset;
1788    
1789     DRM_DEBUG_KMS("Writing base %08X %08lX %d %d %d\n",
1790     @@ -3686,6 +3697,7 @@ static void i9xx_crtc_disable(struct drm_crtc *crtc)
1791     struct intel_encoder *encoder;
1792     int pipe = intel_crtc->pipe;
1793     int plane = intel_crtc->plane;
1794     + u32 pctl;
1795    
1796    
1797     if (!intel_crtc->active)
1798     @@ -3705,6 +3717,13 @@ static void i9xx_crtc_disable(struct drm_crtc *crtc)
1799    
1800     intel_disable_plane(dev_priv, plane, pipe);
1801     intel_disable_pipe(dev_priv, pipe);
1802     +
1803     + /* Disable pannel fitter if it is on this pipe. */
1804     + pctl = I915_READ(PFIT_CONTROL);
1805     + if ((pctl & PFIT_ENABLE) &&
1806     + ((pctl & PFIT_PIPE_MASK) >> PFIT_PIPE_SHIFT) == pipe)
1807     + I915_WRITE(PFIT_CONTROL, 0);
1808     +
1809     intel_disable_pll(dev_priv, pipe);
1810    
1811     intel_crtc->active = false;
1812     @@ -6993,11 +7012,6 @@ void intel_mark_busy(struct drm_device *dev)
1813    
1814     void intel_mark_idle(struct drm_device *dev)
1815     {
1816     -}
1817     -
1818     -void intel_mark_fb_busy(struct drm_i915_gem_object *obj)
1819     -{
1820     - struct drm_device *dev = obj->base.dev;
1821     struct drm_crtc *crtc;
1822    
1823     if (!i915_powersave)
1824     @@ -7007,12 +7021,11 @@ void intel_mark_fb_busy(struct drm_i915_gem_object *obj)
1825     if (!crtc->fb)
1826     continue;
1827    
1828     - if (to_intel_framebuffer(crtc->fb)->obj == obj)
1829     - intel_increase_pllclock(crtc);
1830     + intel_decrease_pllclock(crtc);
1831     }
1832     }
1833    
1834     -void intel_mark_fb_idle(struct drm_i915_gem_object *obj)
1835     +void intel_mark_fb_busy(struct drm_i915_gem_object *obj)
1836     {
1837     struct drm_device *dev = obj->base.dev;
1838     struct drm_crtc *crtc;
1839     @@ -7025,7 +7038,7 @@ void intel_mark_fb_idle(struct drm_i915_gem_object *obj)
1840     continue;
1841    
1842     if (to_intel_framebuffer(crtc->fb)->obj == obj)
1843     - intel_decrease_pllclock(crtc);
1844     + intel_increase_pllclock(crtc);
1845     }
1846     }
1847    
1848     @@ -8888,6 +8901,9 @@ static struct intel_quirk intel_quirks[] = {
1849    
1850     /* Acer Aspire 5734Z must invert backlight brightness */
1851     { 0x2a42, 0x1025, 0x0459, quirk_invert_brightness },
1852     +
1853     + /* Acer Aspire 4736Z */
1854     + { 0x2a42, 0x1025, 0x0260, quirk_invert_brightness },
1855     };
1856    
1857     static void intel_init_quirks(struct drm_device *dev)
1858     diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
1859     index 8a1bd4a..1c1840f 100644
1860     --- a/drivers/gpu/drm/i915/intel_drv.h
1861     +++ b/drivers/gpu/drm/i915/intel_drv.h
1862     @@ -377,6 +377,7 @@ struct intel_dp {
1863     struct intel_digital_port {
1864     struct intel_encoder base;
1865     enum port port;
1866     + u32 port_reversal;
1867     struct intel_dp dp;
1868     struct intel_hdmi hdmi;
1869     };
1870     @@ -439,9 +440,8 @@ extern bool intel_sdvo_init(struct drm_device *dev, uint32_t sdvo_reg,
1871     extern void intel_dvo_init(struct drm_device *dev);
1872     extern void intel_tv_init(struct drm_device *dev);
1873     extern void intel_mark_busy(struct drm_device *dev);
1874     -extern void intel_mark_idle(struct drm_device *dev);
1875     extern void intel_mark_fb_busy(struct drm_i915_gem_object *obj);
1876     -extern void intel_mark_fb_idle(struct drm_i915_gem_object *obj);
1877     +extern void intel_mark_idle(struct drm_device *dev);
1878     extern bool intel_lvds_init(struct drm_device *dev);
1879     extern void intel_dp_init(struct drm_device *dev, int output_reg,
1880     enum port port);
1881     @@ -627,9 +627,10 @@ extern void intel_update_sprite_watermarks(struct drm_device *dev, int pipe,
1882     extern void intel_update_linetime_watermarks(struct drm_device *dev, int pipe,
1883     struct drm_display_mode *mode);
1884    
1885     -extern unsigned long intel_gen4_compute_offset_xtiled(int *x, int *y,
1886     - unsigned int bpp,
1887     - unsigned int pitch);
1888     +extern unsigned long intel_gen4_compute_page_offset(int *x, int *y,
1889     + unsigned int tiling_mode,
1890     + unsigned int bpp,
1891     + unsigned int pitch);
1892    
1893     extern int intel_sprite_set_colorkey(struct drm_device *dev, void *data,
1894     struct drm_file *file_priv);
1895     diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c
1896     index bee8cb6..a3730e0 100644
1897     --- a/drivers/gpu/drm/i915/intel_panel.c
1898     +++ b/drivers/gpu/drm/i915/intel_panel.c
1899     @@ -321,6 +321,9 @@ void intel_panel_enable_backlight(struct drm_device *dev,
1900     if (dev_priv->backlight_level == 0)
1901     dev_priv->backlight_level = intel_panel_get_max_backlight(dev);
1902    
1903     + dev_priv->backlight_enabled = true;
1904     + intel_panel_actually_set_backlight(dev, dev_priv->backlight_level);
1905     +
1906     if (INTEL_INFO(dev)->gen >= 4) {
1907     uint32_t reg, tmp;
1908    
1909     @@ -356,12 +359,12 @@ void intel_panel_enable_backlight(struct drm_device *dev,
1910     }
1911    
1912     set_level:
1913     - /* Call below after setting BLC_PWM_CPU_CTL2 and BLC_PWM_PCH_CTL1.
1914     - * BLC_PWM_CPU_CTL may be cleared to zero automatically when these
1915     - * registers are set.
1916     + /* Check the current backlight level and try to set again if it's zero.
1917     + * On some machines, BLC_PWM_CPU_CTL is cleared to zero automatically
1918     + * when BLC_PWM_CPU_CTL2 and BLC_PWM_PCH_CTL1 are written.
1919     */
1920     - dev_priv->backlight_enabled = true;
1921     - intel_panel_actually_set_backlight(dev, dev_priv->backlight_level);
1922     + if (!intel_panel_get_backlight(dev))
1923     + intel_panel_actually_set_backlight(dev, dev_priv->backlight_level);
1924     }
1925    
1926     static void intel_panel_init_backlight(struct drm_device *dev)
1927     diff --git a/drivers/gpu/drm/i915/intel_sprite.c b/drivers/gpu/drm/i915/intel_sprite.c
1928     index d7b060e..9a8d667 100644
1929     --- a/drivers/gpu/drm/i915/intel_sprite.c
1930     +++ b/drivers/gpu/drm/i915/intel_sprite.c
1931     @@ -122,8 +122,8 @@ ivb_update_plane(struct drm_plane *plane, struct drm_framebuffer *fb,
1932    
1933     linear_offset = y * fb->pitches[0] + x * pixel_size;
1934     sprsurf_offset =
1935     - intel_gen4_compute_offset_xtiled(&x, &y,
1936     - pixel_size, fb->pitches[0]);
1937     + intel_gen4_compute_page_offset(&x, &y, obj->tiling_mode,
1938     + pixel_size, fb->pitches[0]);
1939     linear_offset -= sprsurf_offset;
1940    
1941     /* HSW consolidates SPRTILEOFF and SPRLINOFF into a single SPROFFSET
1942     @@ -287,8 +287,8 @@ ilk_update_plane(struct drm_plane *plane, struct drm_framebuffer *fb,
1943    
1944     linear_offset = y * fb->pitches[0] + x * pixel_size;
1945     dvssurf_offset =
1946     - intel_gen4_compute_offset_xtiled(&x, &y,
1947     - pixel_size, fb->pitches[0]);
1948     + intel_gen4_compute_page_offset(&x, &y, obj->tiling_mode,
1949     + pixel_size, fb->pitches[0]);
1950     linear_offset -= dvssurf_offset;
1951    
1952     if (obj->tiling_mode != I915_TILING_NONE)
1953     diff --git a/drivers/gpu/drm/nouveau/core/include/subdev/bios/dcb.h b/drivers/gpu/drm/nouveau/core/include/subdev/bios/dcb.h
1954     index b79025d..123270e9 100644
1955     --- a/drivers/gpu/drm/nouveau/core/include/subdev/bios/dcb.h
1956     +++ b/drivers/gpu/drm/nouveau/core/include/subdev/bios/dcb.h
1957     @@ -16,6 +16,8 @@ enum dcb_output_type {
1958    
1959     struct dcb_output {
1960     int index; /* may not be raw dcb index if merging has happened */
1961     + u16 hasht;
1962     + u16 hashm;
1963     enum dcb_output_type type;
1964     uint8_t i2c_index;
1965     uint8_t heads;
1966     @@ -25,6 +27,7 @@ struct dcb_output {
1967     uint8_t or;
1968     uint8_t link;
1969     bool duallink_possible;
1970     + uint8_t extdev;
1971     union {
1972     struct sor_conf {
1973     int link;
1974     diff --git a/drivers/gpu/drm/nouveau/core/subdev/bios/dcb.c b/drivers/gpu/drm/nouveau/core/subdev/bios/dcb.c
1975     index 0fd87df..2d9b9d7 100644
1976     --- a/drivers/gpu/drm/nouveau/core/subdev/bios/dcb.c
1977     +++ b/drivers/gpu/drm/nouveau/core/subdev/bios/dcb.c
1978     @@ -107,6 +107,18 @@ dcb_outp(struct nouveau_bios *bios, u8 idx, u8 *ver, u8 *len)
1979     return 0x0000;
1980     }
1981    
1982     +static inline u16
1983     +dcb_outp_hasht(struct dcb_output *outp)
1984     +{
1985     + return (outp->extdev << 8) | (outp->location << 4) | outp->type;
1986     +}
1987     +
1988     +static inline u16
1989     +dcb_outp_hashm(struct dcb_output *outp)
1990     +{
1991     + return (outp->heads << 8) | (outp->link << 6) | outp->or;
1992     +}
1993     +
1994     u16
1995     dcb_outp_parse(struct nouveau_bios *bios, u8 idx, u8 *ver, u8 *len,
1996     struct dcb_output *outp)
1997     @@ -135,34 +147,28 @@ dcb_outp_parse(struct nouveau_bios *bios, u8 idx, u8 *ver, u8 *len,
1998     case DCB_OUTPUT_DP:
1999     outp->link = (conf & 0x00000030) >> 4;
2000     outp->sorconf.link = outp->link; /*XXX*/
2001     + outp->extdev = 0x00;
2002     + if (outp->location != 0)
2003     + outp->extdev = (conf & 0x0000ff00) >> 8;
2004     break;
2005     default:
2006     break;
2007     }
2008     }
2009     +
2010     + outp->hasht = dcb_outp_hasht(outp);
2011     + outp->hashm = dcb_outp_hashm(outp);
2012     }
2013     return dcb;
2014     }
2015    
2016     -static inline u16
2017     -dcb_outp_hasht(struct dcb_output *outp)
2018     -{
2019     - return outp->type;
2020     -}
2021     -
2022     -static inline u16
2023     -dcb_outp_hashm(struct dcb_output *outp)
2024     -{
2025     - return (outp->heads << 8) | (outp->link << 6) | outp->or;
2026     -}
2027     -
2028     u16
2029     dcb_outp_match(struct nouveau_bios *bios, u16 type, u16 mask,
2030     u8 *ver, u8 *len, struct dcb_output *outp)
2031     {
2032     u16 dcb, idx = 0;
2033     while ((dcb = dcb_outp_parse(bios, idx++, ver, len, outp))) {
2034     - if (dcb_outp_hasht(outp) == type) {
2035     + if ((dcb_outp_hasht(outp) & 0x00ff) == (type & 0x00ff)) {
2036     if ((dcb_outp_hashm(outp) & mask) == mask)
2037     break;
2038     }
2039     diff --git a/drivers/gpu/drm/nouveau/core/subdev/devinit/nv50.c b/drivers/gpu/drm/nouveau/core/subdev/devinit/nv50.c
2040     index ae7249b..4a85778 100644
2041     --- a/drivers/gpu/drm/nouveau/core/subdev/devinit/nv50.c
2042     +++ b/drivers/gpu/drm/nouveau/core/subdev/devinit/nv50.c
2043     @@ -78,12 +78,13 @@ nv50_devinit_init(struct nouveau_object *object)
2044     if (ret)
2045     return ret;
2046    
2047     - /* if we ran the init tables, execute first script pointer for each
2048     - * display table output entry that has a matching dcb entry.
2049     + /* if we ran the init tables, we have to execute the first script
2050     + * pointer of each dcb entry's display encoder table in order
2051     + * to properly initialise each encoder.
2052     */
2053     - while (priv->base.post && ver) {
2054     - u16 data = nvbios_outp_parse(bios, i++, &ver, &hdr, &cnt, &len, &info);
2055     - if (data && dcb_outp_match(bios, info.type, info.mask, &ver, &len, &outp)) {
2056     + while (priv->base.post && dcb_outp_parse(bios, i, &ver, &hdr, &outp)) {
2057     + if (nvbios_outp_match(bios, outp.hasht, outp.hashm,
2058     + &ver, &hdr, &cnt, &len, &info)) {
2059     struct nvbios_init init = {
2060     .subdev = nv_subdev(priv),
2061     .bios = bios,
2062     @@ -95,7 +96,8 @@ nv50_devinit_init(struct nouveau_object *object)
2063    
2064     nvbios_exec(&init);
2065     }
2066     - };
2067     + i++;
2068     + }
2069    
2070     return 0;
2071     }
2072     diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c
2073     index 9175615..21a892c 100644
2074     --- a/drivers/gpu/drm/radeon/atombios_crtc.c
2075     +++ b/drivers/gpu/drm/radeon/atombios_crtc.c
2076     @@ -252,8 +252,6 @@ void atombios_crtc_dpms(struct drm_crtc *crtc, int mode)
2077     radeon_crtc->enabled = true;
2078     /* adjust pm to dpms changes BEFORE enabling crtcs */
2079     radeon_pm_compute_clocks(rdev);
2080     - if (ASIC_IS_DCE6(rdev) && !radeon_crtc->in_mode_set)
2081     - atombios_powergate_crtc(crtc, ATOM_DISABLE);
2082     atombios_enable_crtc(crtc, ATOM_ENABLE);
2083     if (ASIC_IS_DCE3(rdev) && !ASIC_IS_DCE6(rdev))
2084     atombios_enable_crtc_memreq(crtc, ATOM_ENABLE);
2085     @@ -271,8 +269,6 @@ void atombios_crtc_dpms(struct drm_crtc *crtc, int mode)
2086     atombios_enable_crtc_memreq(crtc, ATOM_DISABLE);
2087     atombios_enable_crtc(crtc, ATOM_DISABLE);
2088     radeon_crtc->enabled = false;
2089     - if (ASIC_IS_DCE6(rdev) && !radeon_crtc->in_mode_set)
2090     - atombios_powergate_crtc(crtc, ATOM_ENABLE);
2091     /* adjust pm to dpms changes AFTER disabling crtcs */
2092     radeon_pm_compute_clocks(rdev);
2093     break;
2094     @@ -1844,6 +1840,8 @@ static void atombios_crtc_disable(struct drm_crtc *crtc)
2095     int i;
2096    
2097     atombios_crtc_dpms(crtc, DRM_MODE_DPMS_OFF);
2098     + if (ASIC_IS_DCE6(rdev))
2099     + atombios_powergate_crtc(crtc, ATOM_ENABLE);
2100    
2101     for (i = 0; i < rdev->num_crtc; i++) {
2102     if (rdev->mode_info.crtcs[i] &&
2103     diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c
2104     index a2d478e..1b0a4ec 100644
2105     --- a/drivers/gpu/drm/radeon/evergreen.c
2106     +++ b/drivers/gpu/drm/radeon/evergreen.c
2107     @@ -403,6 +403,19 @@ void evergreen_pm_misc(struct radeon_device *rdev)
2108     rdev->pm.current_vddc = voltage->voltage;
2109     DRM_DEBUG("Setting: vddc: %d\n", voltage->voltage);
2110     }
2111     +
2112     + /* starting with BTC, there is one state that is used for both
2113     + * MH and SH. Difference is that we always use the high clock index for
2114     + * mclk and vddci.
2115     + */
2116     + if ((rdev->pm.pm_method == PM_METHOD_PROFILE) &&
2117     + (rdev->family >= CHIP_BARTS) &&
2118     + rdev->pm.active_crtc_count &&
2119     + ((rdev->pm.profile_index == PM_PROFILE_MID_MH_IDX) ||
2120     + (rdev->pm.profile_index == PM_PROFILE_LOW_MH_IDX)))
2121     + voltage = &rdev->pm.power_state[req_ps_idx].
2122     + clock_info[rdev->pm.profiles[PM_PROFILE_HIGH_MH_IDX].dpms_on_cm_idx].voltage;
2123     +
2124     /* 0xff01 is a flag rather then an actual voltage */
2125     if (voltage->vddci == 0xff01)
2126     return;
2127     diff --git a/drivers/gpu/drm/radeon/r600_hdmi.c b/drivers/gpu/drm/radeon/r600_hdmi.c
2128     index ff80efe..95970ec 100644
2129     --- a/drivers/gpu/drm/radeon/r600_hdmi.c
2130     +++ b/drivers/gpu/drm/radeon/r600_hdmi.c
2131     @@ -544,7 +544,6 @@ void r600_hdmi_disable(struct drm_encoder *encoder)
2132    
2133     /* Called for ATOM_ENCODER_MODE_HDMI only */
2134     if (!dig || !dig->afmt) {
2135     - WARN_ON(1);
2136     return;
2137     }
2138     if (!dig->afmt->enabled)
2139     diff --git a/drivers/gpu/drm/radeon/radeon_atpx_handler.c b/drivers/gpu/drm/radeon/radeon_atpx_handler.c
2140     index 15f5ded..d96070b 100644
2141     --- a/drivers/gpu/drm/radeon/radeon_atpx_handler.c
2142     +++ b/drivers/gpu/drm/radeon/radeon_atpx_handler.c
2143     @@ -43,6 +43,12 @@ struct atpx_verify_interface {
2144     u32 function_bits; /* supported functions bit vector */
2145     } __packed;
2146    
2147     +struct atpx_px_params {
2148     + u16 size; /* structure size in bytes (includes size field) */
2149     + u32 valid_flags; /* which flags are valid */
2150     + u32 flags; /* flags */
2151     +} __packed;
2152     +
2153     struct atpx_power_control {
2154     u16 size;
2155     u8 dgpu_state;
2156     @@ -123,9 +129,61 @@ static void radeon_atpx_parse_functions(struct radeon_atpx_functions *f, u32 mas
2157     }
2158    
2159     /**
2160     + * radeon_atpx_validate_functions - validate ATPX functions
2161     + *
2162     + * @atpx: radeon atpx struct
2163     + *
2164     + * Validate that required functions are enabled (all asics).
2165     + * returns 0 on success, error on failure.
2166     + */
2167     +static int radeon_atpx_validate(struct radeon_atpx *atpx)
2168     +{
2169     + /* make sure required functions are enabled */
2170     + /* dGPU power control is required */
2171     + atpx->functions.power_cntl = true;
2172     +
2173     + if (atpx->functions.px_params) {
2174     + union acpi_object *info;
2175     + struct atpx_px_params output;
2176     + size_t size;
2177     + u32 valid_bits;
2178     +
2179     + info = radeon_atpx_call(atpx->handle, ATPX_FUNCTION_GET_PX_PARAMETERS, NULL);
2180     + if (!info)
2181     + return -EIO;
2182     +
2183     + memset(&output, 0, sizeof(output));
2184     +
2185     + size = *(u16 *) info->buffer.pointer;
2186     + if (size < 10) {
2187     + printk("ATPX buffer is too small: %zu\n", size);
2188     + kfree(info);
2189     + return -EINVAL;
2190     + }
2191     + size = min(sizeof(output), size);
2192     +
2193     + memcpy(&output, info->buffer.pointer, size);
2194     +
2195     + valid_bits = output.flags & output.valid_flags;
2196     + /* if separate mux flag is set, mux controls are required */
2197     + if (valid_bits & ATPX_SEPARATE_MUX_FOR_I2C) {
2198     + atpx->functions.i2c_mux_cntl = true;
2199     + atpx->functions.disp_mux_cntl = true;
2200     + }
2201     + /* if any outputs are muxed, mux controls are required */
2202     + if (valid_bits & (ATPX_CRT1_RGB_SIGNAL_MUXED |
2203     + ATPX_TV_SIGNAL_MUXED |
2204     + ATPX_DFP_SIGNAL_MUXED))
2205     + atpx->functions.disp_mux_cntl = true;
2206     +
2207     + kfree(info);
2208     + }
2209     + return 0;
2210     +}
2211     +
2212     +/**
2213     * radeon_atpx_verify_interface - verify ATPX
2214     *
2215     - * @handle: acpi handle
2216     * @atpx: radeon atpx struct
2217     *
2218     * Execute the ATPX_FUNCTION_VERIFY_INTERFACE ATPX function
2219     @@ -406,8 +464,19 @@ static bool radeon_atpx_pci_probe_handle(struct pci_dev *pdev)
2220     */
2221     static int radeon_atpx_init(void)
2222     {
2223     + int r;
2224     +
2225     /* set up the ATPX handle */
2226     - return radeon_atpx_verify_interface(&radeon_atpx_priv.atpx);
2227     + r = radeon_atpx_verify_interface(&radeon_atpx_priv.atpx);
2228     + if (r)
2229     + return r;
2230     +
2231     + /* validate the atpx setup */
2232     + r = radeon_atpx_validate(&radeon_atpx_priv.atpx);
2233     + if (r)
2234     + return r;
2235     +
2236     + return 0;
2237     }
2238    
2239     /**
2240     diff --git a/drivers/gpu/drm/radeon/radeon_pm.c b/drivers/gpu/drm/radeon/radeon_pm.c
2241     index 0bfa656..338fd6a 100644
2242     --- a/drivers/gpu/drm/radeon/radeon_pm.c
2243     +++ b/drivers/gpu/drm/radeon/radeon_pm.c
2244     @@ -169,7 +169,7 @@ static void radeon_set_power_state(struct radeon_device *rdev)
2245    
2246     /* starting with BTC, there is one state that is used for both
2247     * MH and SH. Difference is that we always use the high clock index for
2248     - * mclk.
2249     + * mclk and vddci.
2250     */
2251     if ((rdev->pm.pm_method == PM_METHOD_PROFILE) &&
2252     (rdev->family >= CHIP_BARTS) &&
2253     diff --git a/drivers/gpu/drm/udl/udl_drv.h b/drivers/gpu/drm/udl/udl_drv.h
2254     index 87aa5f5..cc6d90f 100644
2255     --- a/drivers/gpu/drm/udl/udl_drv.h
2256     +++ b/drivers/gpu/drm/udl/udl_drv.h
2257     @@ -75,6 +75,8 @@ struct udl_framebuffer {
2258     struct drm_framebuffer base;
2259     struct udl_gem_object *obj;
2260     bool active_16; /* active on the 16-bit channel */
2261     + int x1, y1, x2, y2; /* dirty rect */
2262     + spinlock_t dirty_lock;
2263     };
2264    
2265     #define to_udl_fb(x) container_of(x, struct udl_framebuffer, base)
2266     diff --git a/drivers/gpu/drm/udl/udl_fb.c b/drivers/gpu/drm/udl/udl_fb.c
2267     index d4ab3be..1eb060c 100644
2268     --- a/drivers/gpu/drm/udl/udl_fb.c
2269     +++ b/drivers/gpu/drm/udl/udl_fb.c
2270     @@ -22,9 +22,9 @@
2271    
2272     #include <drm/drm_fb_helper.h>
2273    
2274     -#define DL_DEFIO_WRITE_DELAY 5 /* fb_deferred_io.delay in jiffies */
2275     +#define DL_DEFIO_WRITE_DELAY (HZ/20) /* fb_deferred_io.delay in jiffies */
2276    
2277     -static int fb_defio = 1; /* Optionally enable experimental fb_defio mmap support */
2278     +static int fb_defio = 0; /* Optionally enable experimental fb_defio mmap support */
2279     static int fb_bpp = 16;
2280    
2281     module_param(fb_bpp, int, S_IWUSR | S_IRUSR | S_IWGRP | S_IRGRP);
2282     @@ -153,6 +153,9 @@ int udl_handle_damage(struct udl_framebuffer *fb, int x, int y,
2283     struct urb *urb;
2284     int aligned_x;
2285     int bpp = (fb->base.bits_per_pixel / 8);
2286     + int x2, y2;
2287     + bool store_for_later = false;
2288     + unsigned long flags;
2289    
2290     if (!fb->active_16)
2291     return 0;
2292     @@ -169,8 +172,6 @@ int udl_handle_damage(struct udl_framebuffer *fb, int x, int y,
2293     }
2294     }
2295    
2296     - start_cycles = get_cycles();
2297     -
2298     aligned_x = DL_ALIGN_DOWN(x, sizeof(unsigned long));
2299     width = DL_ALIGN_UP(width + (x-aligned_x), sizeof(unsigned long));
2300     x = aligned_x;
2301     @@ -180,19 +181,53 @@ int udl_handle_damage(struct udl_framebuffer *fb, int x, int y,
2302     (y + height > fb->base.height))
2303     return -EINVAL;
2304    
2305     + /* if we are in atomic just store the info
2306     + can't test inside spin lock */
2307     + if (in_atomic())
2308     + store_for_later = true;
2309     +
2310     + x2 = x + width - 1;
2311     + y2 = y + height - 1;
2312     +
2313     + spin_lock_irqsave(&fb->dirty_lock, flags);
2314     +
2315     + if (fb->y1 < y)
2316     + y = fb->y1;
2317     + if (fb->y2 > y2)
2318     + y2 = fb->y2;
2319     + if (fb->x1 < x)
2320     + x = fb->x1;
2321     + if (fb->x2 > x2)
2322     + x2 = fb->x2;
2323     +
2324     + if (store_for_later) {
2325     + fb->x1 = x;
2326     + fb->x2 = x2;
2327     + fb->y1 = y;
2328     + fb->y2 = y2;
2329     + spin_unlock_irqrestore(&fb->dirty_lock, flags);
2330     + return 0;
2331     + }
2332     +
2333     + fb->x1 = fb->y1 = INT_MAX;
2334     + fb->x2 = fb->y2 = 0;
2335     +
2336     + spin_unlock_irqrestore(&fb->dirty_lock, flags);
2337     + start_cycles = get_cycles();
2338     +
2339     urb = udl_get_urb(dev);
2340     if (!urb)
2341     return 0;
2342     cmd = urb->transfer_buffer;
2343    
2344     - for (i = y; i < y + height ; i++) {
2345     + for (i = y; i <= y2 ; i++) {
2346     const int line_offset = fb->base.pitches[0] * i;
2347     const int byte_offset = line_offset + (x * bpp);
2348     const int dev_byte_offset = (fb->base.width * bpp * i) + (x * bpp);
2349     if (udl_render_hline(dev, bpp, &urb,
2350     (char *) fb->obj->vmapping,
2351     &cmd, byte_offset, dev_byte_offset,
2352     - width * bpp,
2353     + (x2 - x + 1) * bpp,
2354     &bytes_identical, &bytes_sent))
2355     goto error;
2356     }
2357     @@ -434,6 +469,7 @@ udl_framebuffer_init(struct drm_device *dev,
2358     {
2359     int ret;
2360    
2361     + spin_lock_init(&ufb->dirty_lock);
2362     ufb->obj = obj;
2363     ret = drm_framebuffer_init(dev, &ufb->base, &udlfb_funcs);
2364     drm_helper_mode_fill_fb_struct(&ufb->base, mode_cmd);
2365     diff --git a/drivers/gpu/vga/vga_switcheroo.c b/drivers/gpu/vga/vga_switcheroo.c
2366     index fa60add..cf787e1 100644
2367     --- a/drivers/gpu/vga/vga_switcheroo.c
2368     +++ b/drivers/gpu/vga/vga_switcheroo.c
2369     @@ -25,6 +25,7 @@
2370     #include <linux/fb.h>
2371    
2372     #include <linux/pci.h>
2373     +#include <linux/console.h>
2374     #include <linux/vga_switcheroo.h>
2375    
2376     #include <linux/vgaarb.h>
2377     @@ -337,8 +338,10 @@ static int vga_switchto_stage2(struct vga_switcheroo_client *new_client)
2378    
2379     if (new_client->fb_info) {
2380     struct fb_event event;
2381     + console_lock();
2382     event.info = new_client->fb_info;
2383     fb_notifier_call_chain(FB_EVENT_REMAP_ALL_CONSOLE, &event);
2384     + console_unlock();
2385     }
2386    
2387     ret = vgasr_priv.handler->switchto(new_client->id);
2388     diff --git a/drivers/hid/hid-wiimote-ext.c b/drivers/hid/hid-wiimote-ext.c
2389     index 38ae877..0472191 100644
2390     --- a/drivers/hid/hid-wiimote-ext.c
2391     +++ b/drivers/hid/hid-wiimote-ext.c
2392     @@ -403,14 +403,14 @@ static void handler_nunchuck(struct wiimote_ext *ext, const __u8 *payload)
2393    
2394     if (ext->motionp) {
2395     input_report_key(ext->input,
2396     - wiiext_keymap[WIIEXT_KEY_Z], !!(payload[5] & 0x04));
2397     + wiiext_keymap[WIIEXT_KEY_Z], !(payload[5] & 0x04));
2398     input_report_key(ext->input,
2399     - wiiext_keymap[WIIEXT_KEY_C], !!(payload[5] & 0x08));
2400     + wiiext_keymap[WIIEXT_KEY_C], !(payload[5] & 0x08));
2401     } else {
2402     input_report_key(ext->input,
2403     - wiiext_keymap[WIIEXT_KEY_Z], !!(payload[5] & 0x01));
2404     + wiiext_keymap[WIIEXT_KEY_Z], !(payload[5] & 0x01));
2405     input_report_key(ext->input,
2406     - wiiext_keymap[WIIEXT_KEY_C], !!(payload[5] & 0x02));
2407     + wiiext_keymap[WIIEXT_KEY_C], !(payload[5] & 0x02));
2408     }
2409    
2410     input_sync(ext->input);
2411     diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
2412     index eca2801..f1e7b86 100644
2413     --- a/drivers/iommu/intel-iommu.c
2414     +++ b/drivers/iommu/intel-iommu.c
2415     @@ -4253,13 +4253,19 @@ static void quirk_iommu_rwbf(struct pci_dev *dev)
2416     {
2417     /*
2418     * Mobile 4 Series Chipset neglects to set RWBF capability,
2419     - * but needs it:
2420     + * but needs it. Same seems to hold for the desktop versions.
2421     */
2422     printk(KERN_INFO "DMAR: Forcing write-buffer flush capability\n");
2423     rwbf_quirk = 1;
2424     }
2425    
2426     DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2a40, quirk_iommu_rwbf);
2427     +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e00, quirk_iommu_rwbf);
2428     +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e10, quirk_iommu_rwbf);
2429     +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e20, quirk_iommu_rwbf);
2430     +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e30, quirk_iommu_rwbf);
2431     +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e40, quirk_iommu_rwbf);
2432     +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e90, quirk_iommu_rwbf);
2433    
2434     #define GGC 0x52
2435     #define GGC_MEMORY_SIZE_MASK (0xf << 8)
2436     diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
2437     index e6e3911..089e8ea 100644
2438     --- a/drivers/mmc/core/mmc.c
2439     +++ b/drivers/mmc/core/mmc.c
2440     @@ -496,7 +496,7 @@ static int mmc_read_ext_csd(struct mmc_card *card, u8 *ext_csd)
2441     * RPMB regions are defined in multiples of 128K.
2442     */
2443     card->ext_csd.raw_rpmb_size_mult = ext_csd[EXT_CSD_RPMB_MULT];
2444     - if (ext_csd[EXT_CSD_RPMB_MULT]) {
2445     + if (ext_csd[EXT_CSD_RPMB_MULT] && mmc_host_cmd23(card->host)) {
2446     mmc_part_add(card, ext_csd[EXT_CSD_RPMB_MULT] << 17,
2447     EXT_CSD_PART_CONFIG_ACC_RPMB,
2448     "rpmb", 0, false,
2449     diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c b/drivers/mmc/host/sdhci-esdhc-imx.c
2450     index e07df81..b503113 100644
2451     --- a/drivers/mmc/host/sdhci-esdhc-imx.c
2452     +++ b/drivers/mmc/host/sdhci-esdhc-imx.c
2453     @@ -237,15 +237,18 @@ static void esdhc_writel_le(struct sdhci_host *host, u32 val, int reg)
2454    
2455     static u16 esdhc_readw_le(struct sdhci_host *host, int reg)
2456     {
2457     + struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
2458     + struct pltfm_imx_data *imx_data = pltfm_host->priv;
2459     +
2460     if (unlikely(reg == SDHCI_HOST_VERSION)) {
2461     - u16 val = readw(host->ioaddr + (reg ^ 2));
2462     - /*
2463     - * uSDHC supports SDHCI v3.0, but it's encoded as value
2464     - * 0x3 in host controller version register, which violates
2465     - * SDHCI_SPEC_300 definition. Work it around here.
2466     - */
2467     - if ((val & SDHCI_SPEC_VER_MASK) == 3)
2468     - return --val;
2469     + reg ^= 2;
2470     + if (is_imx6q_usdhc(imx_data)) {
2471     + /*
2472     + * The usdhc register returns a wrong host version.
2473     + * Correct it here.
2474     + */
2475     + return SDHCI_SPEC_300;
2476     + }
2477     }
2478    
2479     return readw(host->ioaddr + reg);
2480     diff --git a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
2481     index 75a3f46..88291bb 100644
2482     --- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
2483     +++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
2484     @@ -1434,7 +1434,7 @@ int mlx4_en_alloc_resources(struct mlx4_en_priv *priv)
2485     }
2486    
2487     #ifdef CONFIG_RFS_ACCEL
2488     - priv->dev->rx_cpu_rmap = alloc_irq_cpu_rmap(priv->rx_ring_num);
2489     + priv->dev->rx_cpu_rmap = alloc_irq_cpu_rmap(priv->mdev->dev->caps.comp_pool);
2490     if (!priv->dev->rx_cpu_rmap)
2491     goto err;
2492    
2493     @@ -1597,7 +1597,7 @@ int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port,
2494     err = -ENOMEM;
2495     goto out;
2496     }
2497     - priv->tx_cq = kzalloc(sizeof(struct mlx4_en_cq) * MAX_RX_RINGS,
2498     + priv->tx_cq = kzalloc(sizeof(struct mlx4_en_cq) * MAX_TX_RINGS,
2499     GFP_KERNEL);
2500     if (!priv->tx_cq) {
2501     err = -ENOMEM;
2502     diff --git a/drivers/net/ppp/ppp_generic.c b/drivers/net/ppp/ppp_generic.c
2503     index 0b2706a..508570e 100644
2504     --- a/drivers/net/ppp/ppp_generic.c
2505     +++ b/drivers/net/ppp/ppp_generic.c
2506     @@ -1058,7 +1058,15 @@ ppp_get_stats64(struct net_device *dev, struct rtnl_link_stats64 *stats64)
2507     return stats64;
2508     }
2509    
2510     +static struct lock_class_key ppp_tx_busylock;
2511     +static int ppp_dev_init(struct net_device *dev)
2512     +{
2513     + dev->qdisc_tx_busylock = &ppp_tx_busylock;
2514     + return 0;
2515     +}
2516     +
2517     static const struct net_device_ops ppp_netdev_ops = {
2518     + .ndo_init = ppp_dev_init,
2519     .ndo_start_xmit = ppp_start_xmit,
2520     .ndo_do_ioctl = ppp_net_ioctl,
2521     .ndo_get_stats64 = ppp_get_stats64,
2522     diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c
2523     index 00d3b2d..6d25439 100644
2524     --- a/drivers/net/usb/cdc_ncm.c
2525     +++ b/drivers/net/usb/cdc_ncm.c
2526     @@ -576,9 +576,14 @@ static int cdc_ncm_bind(struct usbnet *dev, struct usb_interface *intf)
2527     if ((intf->num_altsetting == 2) &&
2528     !usb_set_interface(dev->udev,
2529     intf->cur_altsetting->desc.bInterfaceNumber,
2530     - CDC_NCM_COMM_ALTSETTING_MBIM) &&
2531     - cdc_ncm_comm_intf_is_mbim(intf->cur_altsetting))
2532     - return -ENODEV;
2533     + CDC_NCM_COMM_ALTSETTING_MBIM)) {
2534     + if (cdc_ncm_comm_intf_is_mbim(intf->cur_altsetting))
2535     + return -ENODEV;
2536     + else
2537     + usb_set_interface(dev->udev,
2538     + intf->cur_altsetting->desc.bInterfaceNumber,
2539     + CDC_NCM_COMM_ALTSETTING_NCM);
2540     + }
2541     #endif
2542    
2543     /* NCM data altsetting is always 1 */
2544     diff --git a/drivers/net/wireless/b43/dma.h b/drivers/net/wireless/b43/dma.h
2545     index 315b96e..9fdd198 100644
2546     --- a/drivers/net/wireless/b43/dma.h
2547     +++ b/drivers/net/wireless/b43/dma.h
2548     @@ -169,7 +169,7 @@ struct b43_dmadesc_generic {
2549    
2550     /* DMA engine tuning knobs */
2551     #define B43_TXRING_SLOTS 256
2552     -#define B43_RXRING_SLOTS 64
2553     +#define B43_RXRING_SLOTS 256
2554     #define B43_DMA0_RX_FW598_BUFSIZE (B43_DMA0_RX_FW598_FO + IEEE80211_MAX_FRAME_LEN)
2555     #define B43_DMA0_RX_FW351_BUFSIZE (B43_DMA0_RX_FW351_FO + IEEE80211_MAX_FRAME_LEN)
2556    
2557     diff --git a/drivers/net/wireless/p54/p54usb.c b/drivers/net/wireless/p54/p54usb.c
2558     index 800a165..1f78585 100644
2559     --- a/drivers/net/wireless/p54/p54usb.c
2560     +++ b/drivers/net/wireless/p54/p54usb.c
2561     @@ -84,8 +84,8 @@ static struct usb_device_id p54u_table[] = {
2562     {USB_DEVICE(0x06b9, 0x0121)}, /* Thomson SpeedTouch 121g */
2563     {USB_DEVICE(0x0707, 0xee13)}, /* SMC 2862W-G version 2 */
2564     {USB_DEVICE(0x0803, 0x4310)}, /* Zoom 4410a */
2565     - {USB_DEVICE(0x083a, 0x4503)}, /* T-Com Sinus 154 data II */
2566     {USB_DEVICE(0x083a, 0x4521)}, /* Siemens Gigaset USB Adapter 54 version 2 */
2567     + {USB_DEVICE(0x083a, 0x4531)}, /* T-Com Sinus 154 data II */
2568     {USB_DEVICE(0x083a, 0xc501)}, /* Zoom Wireless-G 4410 */
2569     {USB_DEVICE(0x083a, 0xf503)}, /* Accton FD7050E ver 1010ec */
2570     {USB_DEVICE(0x0846, 0x4240)}, /* Netgear WG111 (v2) */
2571     diff --git a/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c b/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c
2572     index b7e6607..b450931 100644
2573     --- a/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c
2574     +++ b/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c
2575     @@ -285,6 +285,7 @@ static struct usb_device_id rtl8192c_usb_ids[] = {
2576     {RTL_USB_DEVICE(USB_VENDER_ID_REALTEK, 0x817f, rtl92cu_hal_cfg)},
2577     /* RTL8188CUS-VL */
2578     {RTL_USB_DEVICE(USB_VENDER_ID_REALTEK, 0x818a, rtl92cu_hal_cfg)},
2579     + {RTL_USB_DEVICE(USB_VENDER_ID_REALTEK, 0x819a, rtl92cu_hal_cfg)},
2580     /* 8188 Combo for BC4 */
2581     {RTL_USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8754, rtl92cu_hal_cfg)},
2582    
2583     @@ -363,9 +364,15 @@ static struct usb_device_id rtl8192c_usb_ids[] = {
2584    
2585     MODULE_DEVICE_TABLE(usb, rtl8192c_usb_ids);
2586    
2587     +static int rtl8192cu_probe(struct usb_interface *intf,
2588     + const struct usb_device_id *id)
2589     +{
2590     + return rtl_usb_probe(intf, id, &rtl92cu_hal_cfg);
2591     +}
2592     +
2593     static struct usb_driver rtl8192cu_driver = {
2594     .name = "rtl8192cu",
2595     - .probe = rtl_usb_probe,
2596     + .probe = rtl8192cu_probe,
2597     .disconnect = rtl_usb_disconnect,
2598     .id_table = rtl8192c_usb_ids,
2599    
2600     diff --git a/drivers/net/wireless/rtlwifi/usb.c b/drivers/net/wireless/rtlwifi/usb.c
2601     index 1535efd..2106fcf 100644
2602     --- a/drivers/net/wireless/rtlwifi/usb.c
2603     +++ b/drivers/net/wireless/rtlwifi/usb.c
2604     @@ -42,8 +42,12 @@
2605    
2606     static void usbctrl_async_callback(struct urb *urb)
2607     {
2608     - if (urb)
2609     - kfree(urb->context);
2610     + if (urb) {
2611     + /* free dr */
2612     + kfree(urb->setup_packet);
2613     + /* free databuf */
2614     + kfree(urb->transfer_buffer);
2615     + }
2616     }
2617    
2618     static int _usbctrl_vendorreq_async_write(struct usb_device *udev, u8 request,
2619     @@ -55,39 +59,47 @@ static int _usbctrl_vendorreq_async_write(struct usb_device *udev, u8 request,
2620     u8 reqtype;
2621     struct usb_ctrlrequest *dr;
2622     struct urb *urb;
2623     - struct rtl819x_async_write_data {
2624     - u8 data[REALTEK_USB_VENQT_MAX_BUF_SIZE];
2625     - struct usb_ctrlrequest dr;
2626     - } *buf;
2627     + const u16 databuf_maxlen = REALTEK_USB_VENQT_MAX_BUF_SIZE;
2628     + u8 *databuf;
2629     +
2630     + if (WARN_ON_ONCE(len > databuf_maxlen))
2631     + len = databuf_maxlen;
2632    
2633     pipe = usb_sndctrlpipe(udev, 0); /* write_out */
2634     reqtype = REALTEK_USB_VENQT_WRITE;
2635    
2636     - buf = kmalloc(sizeof(*buf), GFP_ATOMIC);
2637     - if (!buf)
2638     + dr = kmalloc(sizeof(*dr), GFP_ATOMIC);
2639     + if (!dr)
2640     return -ENOMEM;
2641    
2642     + databuf = kmalloc(databuf_maxlen, GFP_ATOMIC);
2643     + if (!databuf) {
2644     + kfree(dr);
2645     + return -ENOMEM;
2646     + }
2647     +
2648     urb = usb_alloc_urb(0, GFP_ATOMIC);
2649     if (!urb) {
2650     - kfree(buf);
2651     + kfree(databuf);
2652     + kfree(dr);
2653     return -ENOMEM;
2654     }
2655    
2656     - dr = &buf->dr;
2657     -
2658     dr->bRequestType = reqtype;
2659     dr->bRequest = request;
2660     dr->wValue = cpu_to_le16(value);
2661     dr->wIndex = cpu_to_le16(index);
2662     dr->wLength = cpu_to_le16(len);
2663     /* data are already in little-endian order */
2664     - memcpy(buf, pdata, len);
2665     + memcpy(databuf, pdata, len);
2666     usb_fill_control_urb(urb, udev, pipe,
2667     - (unsigned char *)dr, buf, len,
2668     - usbctrl_async_callback, buf);
2669     + (unsigned char *)dr, databuf, len,
2670     + usbctrl_async_callback, NULL);
2671     rc = usb_submit_urb(urb, GFP_ATOMIC);
2672     - if (rc < 0)
2673     - kfree(buf);
2674     + if (rc < 0) {
2675     + kfree(databuf);
2676     + kfree(dr);
2677     + }
2678     usb_free_urb(urb);
2679     return rc;
2680     }
2681     @@ -941,7 +953,8 @@ static struct rtl_intf_ops rtl_usb_ops = {
2682     };
2683    
2684     int rtl_usb_probe(struct usb_interface *intf,
2685     - const struct usb_device_id *id)
2686     + const struct usb_device_id *id,
2687     + struct rtl_hal_cfg *rtl_hal_cfg)
2688     {
2689     int err;
2690     struct ieee80211_hw *hw = NULL;
2691     @@ -976,7 +989,7 @@ int rtl_usb_probe(struct usb_interface *intf,
2692     usb_set_intfdata(intf, hw);
2693     /* init cfg & intf_ops */
2694     rtlpriv->rtlhal.interface = INTF_USB;
2695     - rtlpriv->cfg = (struct rtl_hal_cfg *)(id->driver_info);
2696     + rtlpriv->cfg = rtl_hal_cfg;
2697     rtlpriv->intf_ops = &rtl_usb_ops;
2698     rtl_dbgp_flag_init(hw);
2699     /* Init IO handler */
2700     diff --git a/drivers/net/wireless/rtlwifi/usb.h b/drivers/net/wireless/rtlwifi/usb.h
2701     index 5235136..fb986f9 100644
2702     --- a/drivers/net/wireless/rtlwifi/usb.h
2703     +++ b/drivers/net/wireless/rtlwifi/usb.h
2704     @@ -157,7 +157,8 @@ struct rtl_usb_priv {
2705    
2706    
2707     int rtl_usb_probe(struct usb_interface *intf,
2708     - const struct usb_device_id *id);
2709     + const struct usb_device_id *id,
2710     + struct rtl_hal_cfg *rtl92cu_hal_cfg);
2711     void rtl_usb_disconnect(struct usb_interface *intf);
2712     int rtl_usb_suspend(struct usb_interface *pusb_intf, pm_message_t message);
2713     int rtl_usb_resume(struct usb_interface *pusb_intf);
2714     diff --git a/drivers/net/xen-netback/interface.c b/drivers/net/xen-netback/interface.c
2715     index b8c5193..221f426 100644
2716     --- a/drivers/net/xen-netback/interface.c
2717     +++ b/drivers/net/xen-netback/interface.c
2718     @@ -132,6 +132,7 @@ static void xenvif_up(struct xenvif *vif)
2719     static void xenvif_down(struct xenvif *vif)
2720     {
2721     disable_irq(vif->irq);
2722     + del_timer_sync(&vif->credit_timeout);
2723     xen_netbk_deschedule_xenvif(vif);
2724     xen_netbk_remove_xenvif(vif);
2725     }
2726     @@ -363,8 +364,6 @@ void xenvif_disconnect(struct xenvif *vif)
2727     atomic_dec(&vif->refcnt);
2728     wait_event(vif->waiting_to_free, atomic_read(&vif->refcnt) == 0);
2729    
2730     - del_timer_sync(&vif->credit_timeout);
2731     -
2732     if (vif->irq)
2733     unbind_from_irqhandler(vif->irq, vif);
2734    
2735     diff --git a/drivers/net/xen-netback/netback.c b/drivers/net/xen-netback/netback.c
2736     index 2b9520c..cd49ba9 100644
2737     --- a/drivers/net/xen-netback/netback.c
2738     +++ b/drivers/net/xen-netback/netback.c
2739     @@ -911,13 +911,13 @@ static int netbk_count_requests(struct xenvif *vif,
2740     if (frags >= work_to_do) {
2741     netdev_err(vif->dev, "Need more frags\n");
2742     netbk_fatal_tx_err(vif);
2743     - return -frags;
2744     + return -ENODATA;
2745     }
2746    
2747     if (unlikely(frags >= MAX_SKB_FRAGS)) {
2748     netdev_err(vif->dev, "Too many frags\n");
2749     netbk_fatal_tx_err(vif);
2750     - return -frags;
2751     + return -E2BIG;
2752     }
2753    
2754     memcpy(txp, RING_GET_REQUEST(&vif->tx, cons + frags),
2755     @@ -925,7 +925,7 @@ static int netbk_count_requests(struct xenvif *vif,
2756     if (txp->size > first->size) {
2757     netdev_err(vif->dev, "Frag is bigger than frame.\n");
2758     netbk_fatal_tx_err(vif);
2759     - return -frags;
2760     + return -EIO;
2761     }
2762    
2763     first->size -= txp->size;
2764     @@ -935,7 +935,7 @@ static int netbk_count_requests(struct xenvif *vif,
2765     netdev_err(vif->dev, "txp->offset: %x, size: %u\n",
2766     txp->offset, txp->size);
2767     netbk_fatal_tx_err(vif);
2768     - return -frags;
2769     + return -EINVAL;
2770     }
2771     } while ((txp++)->flags & XEN_NETTXF_more_data);
2772     return frags;
2773     diff --git a/drivers/pci/access.c b/drivers/pci/access.c
2774     index 3af0478..32046c5 100644
2775     --- a/drivers/pci/access.c
2776     +++ b/drivers/pci/access.c
2777     @@ -515,7 +515,7 @@ static bool pcie_capability_reg_implemented(struct pci_dev *dev, int pos)
2778     return false;
2779    
2780     switch (pos) {
2781     - case PCI_EXP_FLAGS_TYPE:
2782     + case PCI_EXP_FLAGS:
2783     return true;
2784     case PCI_EXP_DEVCAP:
2785     case PCI_EXP_DEVCTL:
2786     diff --git a/drivers/pcmcia/vrc4171_card.c b/drivers/pcmcia/vrc4171_card.c
2787     index 75806be..d98a086 100644
2788     --- a/drivers/pcmcia/vrc4171_card.c
2789     +++ b/drivers/pcmcia/vrc4171_card.c
2790     @@ -246,6 +246,7 @@ static int pccard_init(struct pcmcia_socket *sock)
2791     socket = &vrc4171_sockets[slot];
2792     socket->csc_irq = search_nonuse_irq();
2793     socket->io_irq = search_nonuse_irq();
2794     + spin_lock_init(&socket->lock);
2795    
2796     return 0;
2797     }
2798     diff --git a/drivers/pps/clients/pps-ldisc.c b/drivers/pps/clients/pps-ldisc.c
2799     index 79451f2..60cee9e 100644
2800     --- a/drivers/pps/clients/pps-ldisc.c
2801     +++ b/drivers/pps/clients/pps-ldisc.c
2802     @@ -31,7 +31,7 @@
2803     static void pps_tty_dcd_change(struct tty_struct *tty, unsigned int status,
2804     struct pps_event_time *ts)
2805     {
2806     - struct pps_device *pps = (struct pps_device *)tty->disc_data;
2807     + struct pps_device *pps = pps_lookup_dev(tty);
2808    
2809     BUG_ON(pps == NULL);
2810    
2811     @@ -67,9 +67,9 @@ static int pps_tty_open(struct tty_struct *tty)
2812     pr_err("cannot register PPS source \"%s\"\n", info.path);
2813     return -ENOMEM;
2814     }
2815     - tty->disc_data = pps;
2816     + pps->lookup_cookie = tty;
2817    
2818     - /* Should open N_TTY ldisc too */
2819     + /* Now open the base class N_TTY ldisc */
2820     ret = alias_n_tty_open(tty);
2821     if (ret < 0) {
2822     pr_err("cannot open tty ldisc \"%s\"\n", info.path);
2823     @@ -81,7 +81,6 @@ static int pps_tty_open(struct tty_struct *tty)
2824     return 0;
2825    
2826     err_unregister:
2827     - tty->disc_data = NULL;
2828     pps_unregister_source(pps);
2829     return ret;
2830     }
2831     @@ -90,11 +89,10 @@ static void (*alias_n_tty_close)(struct tty_struct *tty);
2832    
2833     static void pps_tty_close(struct tty_struct *tty)
2834     {
2835     - struct pps_device *pps = (struct pps_device *)tty->disc_data;
2836     + struct pps_device *pps = pps_lookup_dev(tty);
2837    
2838     alias_n_tty_close(tty);
2839    
2840     - tty->disc_data = NULL;
2841     dev_info(pps->dev, "removed\n");
2842     pps_unregister_source(pps);
2843     }
2844     diff --git a/drivers/pps/pps.c b/drivers/pps/pps.c
2845     index 2420d5a..6437703 100644
2846     --- a/drivers/pps/pps.c
2847     +++ b/drivers/pps/pps.c
2848     @@ -247,12 +247,15 @@ static int pps_cdev_open(struct inode *inode, struct file *file)
2849     struct pps_device *pps = container_of(inode->i_cdev,
2850     struct pps_device, cdev);
2851     file->private_data = pps;
2852     -
2853     + kobject_get(&pps->dev->kobj);
2854     return 0;
2855     }
2856    
2857     static int pps_cdev_release(struct inode *inode, struct file *file)
2858     {
2859     + struct pps_device *pps = container_of(inode->i_cdev,
2860     + struct pps_device, cdev);
2861     + kobject_put(&pps->dev->kobj);
2862     return 0;
2863     }
2864    
2865     @@ -274,8 +277,10 @@ static void pps_device_destruct(struct device *dev)
2866     {
2867     struct pps_device *pps = dev_get_drvdata(dev);
2868    
2869     - /* release id here to protect others from using it while it's
2870     - * still in use */
2871     + cdev_del(&pps->cdev);
2872     +
2873     + /* Now we can release the ID for re-use */
2874     + pr_debug("deallocating pps%d\n", pps->id);
2875     mutex_lock(&pps_idr_lock);
2876     idr_remove(&pps_idr, pps->id);
2877     mutex_unlock(&pps_idr_lock);
2878     @@ -332,6 +337,7 @@ int pps_register_cdev(struct pps_device *pps)
2879     goto del_cdev;
2880     }
2881    
2882     + /* Override the release function with our own */
2883     pps->dev->release = pps_device_destruct;
2884    
2885     pr_debug("source %s got cdev (%d:%d)\n", pps->info.name,
2886     @@ -352,11 +358,44 @@ free_idr:
2887    
2888     void pps_unregister_cdev(struct pps_device *pps)
2889     {
2890     + pr_debug("unregistering pps%d\n", pps->id);
2891     + pps->lookup_cookie = NULL;
2892     device_destroy(pps_class, pps->dev->devt);
2893     - cdev_del(&pps->cdev);
2894     }
2895    
2896     /*
2897     + * Look up a pps device by magic cookie.
2898     + * The cookie is usually a pointer to some enclosing device, but this
2899     + * code doesn't care; you should never be dereferencing it.
2900     + *
2901     + * This is a bit of a kludge that is currently used only by the PPS
2902     + * serial line discipline. It may need to be tweaked when a second user
2903     + * is found.
2904     + *
2905     + * There is no function interface for setting the lookup_cookie field.
2906     + * It's initialized to NULL when the pps device is created, and if a
2907     + * client wants to use it, just fill it in afterward.
2908     + *
2909     + * The cookie is automatically set to NULL in pps_unregister_source()
2910     + * so that it will not be used again, even if the pps device cannot
2911     + * be removed from the idr due to pending references holding the minor
2912     + * number in use.
2913     + */
2914     +struct pps_device *pps_lookup_dev(void const *cookie)
2915     +{
2916     + struct pps_device *pps;
2917     + unsigned id;
2918     +
2919     + rcu_read_lock();
2920     + idr_for_each_entry(&pps_idr, pps, id)
2921     + if (cookie == pps->lookup_cookie)
2922     + break;
2923     + rcu_read_unlock();
2924     + return pps;
2925     +}
2926     +EXPORT_SYMBOL(pps_lookup_dev);
2927     +
2928     +/*
2929     * Module stuff
2930     */
2931    
2932     diff --git a/drivers/s390/kvm/kvm_virtio.c b/drivers/s390/kvm/kvm_virtio.c
2933     index 8491111..03a15e0 100644
2934     --- a/drivers/s390/kvm/kvm_virtio.c
2935     +++ b/drivers/s390/kvm/kvm_virtio.c
2936     @@ -422,6 +422,26 @@ static void kvm_extint_handler(struct ext_code ext_code,
2937     }
2938    
2939     /*
2940     + * For s390-virtio, we expect a page above main storage containing
2941     + * the virtio configuration. Try to actually load from this area
2942     + * in order to figure out if the host provides this page.
2943     + */
2944     +static int __init test_devices_support(unsigned long addr)
2945     +{
2946     + int ret = -EIO;
2947     +
2948     + asm volatile(
2949     + "0: lura 0,%1\n"
2950     + "1: xgr %0,%0\n"
2951     + "2:\n"
2952     + EX_TABLE(0b,2b)
2953     + EX_TABLE(1b,2b)
2954     + : "+d" (ret)
2955     + : "a" (addr)
2956     + : "0", "cc");
2957     + return ret;
2958     +}
2959     +/*
2960     * Init function for virtio
2961     * devices are in a single page above top of "normal" mem
2962     */
2963     @@ -432,21 +452,23 @@ static int __init kvm_devices_init(void)
2964     if (!MACHINE_IS_KVM)
2965     return -ENODEV;
2966    
2967     + if (test_devices_support(real_memory_size) < 0)
2968     + return -ENODEV;
2969     +
2970     + rc = vmem_add_mapping(real_memory_size, PAGE_SIZE);
2971     + if (rc)
2972     + return rc;
2973     +
2974     + kvm_devices = (void *) real_memory_size;
2975     +
2976     kvm_root = root_device_register("kvm_s390");
2977     if (IS_ERR(kvm_root)) {
2978     rc = PTR_ERR(kvm_root);
2979     printk(KERN_ERR "Could not register kvm_s390 root device");
2980     + vmem_remove_mapping(real_memory_size, PAGE_SIZE);
2981     return rc;
2982     }
2983    
2984     - rc = vmem_add_mapping(real_memory_size, PAGE_SIZE);
2985     - if (rc) {
2986     - root_device_unregister(kvm_root);
2987     - return rc;
2988     - }
2989     -
2990     - kvm_devices = (void *) real_memory_size;
2991     -
2992     INIT_WORK(&hotplug_work, hotplug_devices);
2993    
2994     service_subclass_irq_register();
2995     diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c
2996     index 9b038e4..8f14c42 100644
2997     --- a/drivers/staging/comedi/comedi_fops.c
2998     +++ b/drivers/staging/comedi/comedi_fops.c
2999     @@ -1547,6 +1547,11 @@ static long comedi_unlocked_ioctl(struct file *file, unsigned int cmd,
3000     /* Device config is special, because it must work on
3001     * an unconfigured device. */
3002     if (cmd == COMEDI_DEVCONFIG) {
3003     + if (minor >= COMEDI_NUM_BOARD_MINORS) {
3004     + /* Device config not appropriate on non-board minors. */
3005     + rc = -ENOTTY;
3006     + goto done;
3007     + }
3008     rc = do_devconfig_ioctl(dev,
3009     (struct comedi_devconfig __user *)arg);
3010     if (rc == 0)
3011     diff --git a/drivers/staging/comedi/drivers/ni_labpc.c b/drivers/staging/comedi/drivers/ni_labpc.c
3012     index d29c4d7..d999053 100644
3013     --- a/drivers/staging/comedi/drivers/ni_labpc.c
3014     +++ b/drivers/staging/comedi/drivers/ni_labpc.c
3015     @@ -1202,7 +1202,8 @@ static int labpc_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
3016     else
3017     channel = CR_CHAN(cmd->chanlist[0]);
3018     /* munge channel bits for differential / scan disabled mode */
3019     - if (mode != MODE_SINGLE_CHAN && aref == AREF_DIFF)
3020     + if ((mode == MODE_SINGLE_CHAN || mode == MODE_SINGLE_CHAN_INTERVAL) &&
3021     + aref == AREF_DIFF)
3022     channel *= 2;
3023     devpriv->command1_bits |= ADC_CHAN_BITS(channel);
3024     devpriv->command1_bits |= thisboard->ai_range_code[range];
3025     @@ -1217,21 +1218,6 @@ static int labpc_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
3026     devpriv->write_byte(devpriv->command1_bits,
3027     dev->iobase + COMMAND1_REG);
3028     }
3029     - /* setup any external triggering/pacing (command4 register) */
3030     - devpriv->command4_bits = 0;
3031     - if (cmd->convert_src != TRIG_EXT)
3032     - devpriv->command4_bits |= EXT_CONVERT_DISABLE_BIT;
3033     - /* XXX should discard first scan when using interval scanning
3034     - * since manual says it is not synced with scan clock */
3035     - if (labpc_use_continuous_mode(cmd, mode) == 0) {
3036     - devpriv->command4_bits |= INTERVAL_SCAN_EN_BIT;
3037     - if (cmd->scan_begin_src == TRIG_EXT)
3038     - devpriv->command4_bits |= EXT_SCAN_EN_BIT;
3039     - }
3040     - /* single-ended/differential */
3041     - if (aref == AREF_DIFF)
3042     - devpriv->command4_bits |= ADC_DIFF_BIT;
3043     - devpriv->write_byte(devpriv->command4_bits, dev->iobase + COMMAND4_REG);
3044    
3045     devpriv->write_byte(cmd->chanlist_len,
3046     dev->iobase + INTERVAL_COUNT_REG);
3047     @@ -1311,6 +1297,22 @@ static int labpc_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
3048     devpriv->command3_bits &= ~ADC_FNE_INTR_EN_BIT;
3049     devpriv->write_byte(devpriv->command3_bits, dev->iobase + COMMAND3_REG);
3050    
3051     + /* setup any external triggering/pacing (command4 register) */
3052     + devpriv->command4_bits = 0;
3053     + if (cmd->convert_src != TRIG_EXT)
3054     + devpriv->command4_bits |= EXT_CONVERT_DISABLE_BIT;
3055     + /* XXX should discard first scan when using interval scanning
3056     + * since manual says it is not synced with scan clock */
3057     + if (labpc_use_continuous_mode(cmd, mode) == 0) {
3058     + devpriv->command4_bits |= INTERVAL_SCAN_EN_BIT;
3059     + if (cmd->scan_begin_src == TRIG_EXT)
3060     + devpriv->command4_bits |= EXT_SCAN_EN_BIT;
3061     + }
3062     + /* single-ended/differential */
3063     + if (aref == AREF_DIFF)
3064     + devpriv->command4_bits |= ADC_DIFF_BIT;
3065     + devpriv->write_byte(devpriv->command4_bits, dev->iobase + COMMAND4_REG);
3066     +
3067     /* startup acquisition */
3068    
3069     /* command2 reg */
3070     diff --git a/drivers/staging/vt6656/dpc.c b/drivers/staging/vt6656/dpc.c
3071     index e94f6a1..d409e14 100644
3072     --- a/drivers/staging/vt6656/dpc.c
3073     +++ b/drivers/staging/vt6656/dpc.c
3074     @@ -1190,7 +1190,7 @@ static BOOL s_bHandleRxEncryption (
3075     if (byDecMode == KEY_CTL_WEP) {
3076     // handle WEP
3077     if ((pDevice->byLocalID <= REV_ID_VT3253_A1) ||
3078     - (((PSKeyTable)(&pKey->pvKeyTable))->bSoftWEP == TRUE)) {
3079     + (((PSKeyTable)(pKey->pvKeyTable))->bSoftWEP == TRUE)) {
3080     // Software WEP
3081     // 1. 3253A
3082     // 2. WEP 256
3083     @@ -1299,7 +1299,7 @@ static BOOL s_bHostWepRxEncryption (
3084     // handle WEP
3085     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"byDecMode == KEY_CTL_WEP\n");
3086     if ((pDevice->byLocalID <= REV_ID_VT3253_A1) ||
3087     - (((PSKeyTable)(&pKey->pvKeyTable))->bSoftWEP == TRUE) ||
3088     + (((PSKeyTable)(pKey->pvKeyTable))->bSoftWEP == TRUE) ||
3089     (bOnFly == FALSE)) {
3090     // Software WEP
3091     // 1. 3253A
3092     diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c
3093     index 83c04e1..9213d69 100644
3094     --- a/drivers/staging/vt6656/rxtx.c
3095     +++ b/drivers/staging/vt6656/rxtx.c
3096     @@ -1454,7 +1454,7 @@ s_bPacketToWirelessUsb(
3097    
3098     pvRrvTime = pMICHDR = pvRTS = pvCTS = pvTxDataHd = NULL;
3099     if (bNeedEncryption && pTransmitKey->pvKeyTable) {
3100     - if (((PSKeyTable)&pTransmitKey->pvKeyTable)->bSoftWEP == TRUE)
3101     + if (((PSKeyTable)pTransmitKey->pvKeyTable)->bSoftWEP == TRUE)
3102     bSoftWEP = TRUE; /* WEP 256 */
3103     }
3104    
3105     diff --git a/drivers/staging/vt6656/usbpipe.c b/drivers/staging/vt6656/usbpipe.c
3106     index fc68518..87815c5 100644
3107     --- a/drivers/staging/vt6656/usbpipe.c
3108     +++ b/drivers/staging/vt6656/usbpipe.c
3109     @@ -165,6 +165,11 @@ int PIPEnsControlOut(
3110     if (pDevice->Flags & fMP_CONTROL_WRITES)
3111     return STATUS_FAILURE;
3112    
3113     + if (pDevice->Flags & fMP_CONTROL_READS)
3114     + return STATUS_FAILURE;
3115     +
3116     + MP_SET_FLAG(pDevice, fMP_CONTROL_WRITES);
3117     +
3118     pDevice->sUsbCtlRequest.bRequestType = 0x40;
3119     pDevice->sUsbCtlRequest.bRequest = byRequest;
3120     pDevice->sUsbCtlRequest.wValue = cpu_to_le16p(&wValue);
3121     @@ -179,12 +184,13 @@ int PIPEnsControlOut(
3122    
3123     ntStatus = usb_submit_urb(pDevice->pControlURB, GFP_ATOMIC);
3124     if (ntStatus != 0) {
3125     - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"control send request submission failed: %d\n", ntStatus);
3126     + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO
3127     + "control send request submission failed: %d\n",
3128     + ntStatus);
3129     + MP_CLEAR_FLAG(pDevice, fMP_CONTROL_WRITES);
3130     return STATUS_FAILURE;
3131     }
3132     - else {
3133     - MP_SET_FLAG(pDevice, fMP_CONTROL_WRITES);
3134     - }
3135     +
3136     spin_unlock_irq(&pDevice->lock);
3137     for (ii = 0; ii <= USB_CTL_WAIT; ii ++) {
3138    
3139     @@ -224,6 +230,11 @@ int PIPEnsControlIn(
3140     if (pDevice->Flags & fMP_CONTROL_READS)
3141     return STATUS_FAILURE;
3142    
3143     + if (pDevice->Flags & fMP_CONTROL_WRITES)
3144     + return STATUS_FAILURE;
3145     +
3146     + MP_SET_FLAG(pDevice, fMP_CONTROL_READS);
3147     +
3148     pDevice->sUsbCtlRequest.bRequestType = 0xC0;
3149     pDevice->sUsbCtlRequest.bRequest = byRequest;
3150     pDevice->sUsbCtlRequest.wValue = cpu_to_le16p(&wValue);
3151     @@ -237,10 +248,11 @@ int PIPEnsControlIn(
3152    
3153     ntStatus = usb_submit_urb(pDevice->pControlURB, GFP_ATOMIC);
3154     if (ntStatus != 0) {
3155     - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"control request submission failed: %d\n", ntStatus);
3156     - }else {
3157     - MP_SET_FLAG(pDevice, fMP_CONTROL_READS);
3158     - }
3159     + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO
3160     + "control request submission failed: %d\n", ntStatus);
3161     + MP_CLEAR_FLAG(pDevice, fMP_CONTROL_READS);
3162     + return STATUS_FAILURE;
3163     + }
3164    
3165     spin_unlock_irq(&pDevice->lock);
3166     for (ii = 0; ii <= USB_CTL_WAIT; ii ++) {
3167     diff --git a/drivers/staging/zram/zram_drv.c b/drivers/staging/zram/zram_drv.c
3168     index f2a73bd..071e058 100644
3169     --- a/drivers/staging/zram/zram_drv.c
3170     +++ b/drivers/staging/zram/zram_drv.c
3171     @@ -228,11 +228,12 @@ static int zram_bvec_read(struct zram *zram, struct bio_vec *bvec,
3172     return 0;
3173     }
3174    
3175     - user_mem = kmap_atomic(page);
3176     if (is_partial_io(bvec))
3177     /* Use a temporary buffer to decompress the page */
3178     - uncmem = kmalloc(PAGE_SIZE, GFP_KERNEL);
3179     - else
3180     + uncmem = kmalloc(PAGE_SIZE, GFP_NOIO);
3181     +
3182     + user_mem = kmap_atomic(page);
3183     + if (!is_partial_io(bvec))
3184     uncmem = user_mem;
3185    
3186     if (!uncmem) {
3187     @@ -279,7 +280,7 @@ static int zram_bvec_write(struct zram *zram, struct bio_vec *bvec, u32 index,
3188     * This is a partial IO. We need to read the full page
3189     * before to write the changes.
3190     */
3191     - uncmem = kmalloc(PAGE_SIZE, GFP_KERNEL);
3192     + uncmem = kmalloc(PAGE_SIZE, GFP_NOIO);
3193     if (!uncmem) {
3194     pr_info("Error allocating temp memory!\n");
3195     ret = -ENOMEM;
3196     diff --git a/drivers/staging/zsmalloc/zsmalloc-main.c b/drivers/staging/zsmalloc/zsmalloc-main.c
3197     index 09a9d35..223c736 100644
3198     --- a/drivers/staging/zsmalloc/zsmalloc-main.c
3199     +++ b/drivers/staging/zsmalloc/zsmalloc-main.c
3200     @@ -222,11 +222,9 @@ struct zs_pool {
3201     /*
3202     * By default, zsmalloc uses a copy-based object mapping method to access
3203     * allocations that span two pages. However, if a particular architecture
3204     - * 1) Implements local_flush_tlb_kernel_range() and 2) Performs VM mapping
3205     - * faster than copying, then it should be added here so that
3206     - * USE_PGTABLE_MAPPING is defined. This causes zsmalloc to use page table
3207     - * mapping rather than copying
3208     - * for object mapping.
3209     + * performs VM mapping faster than copying, then it should be added here
3210     + * so that USE_PGTABLE_MAPPING is defined. This causes zsmalloc to use
3211     + * page table mapping rather than copying for object mapping.
3212     */
3213     #if defined(CONFIG_ARM)
3214     #define USE_PGTABLE_MAPPING
3215     @@ -663,7 +661,7 @@ static inline void __zs_unmap_object(struct mapping_area *area,
3216    
3217     flush_cache_vunmap(addr, end);
3218     unmap_kernel_range_noflush(addr, PAGE_SIZE * 2);
3219     - local_flush_tlb_kernel_range(addr, end);
3220     + flush_tlb_kernel_range(addr, end);
3221     }
3222    
3223     #else /* USE_PGTABLE_MAPPING */
3224     diff --git a/drivers/tty/n_gsm.c b/drivers/tty/n_gsm.c
3225     index dcc0430..bfd6771 100644
3226     --- a/drivers/tty/n_gsm.c
3227     +++ b/drivers/tty/n_gsm.c
3228     @@ -1689,6 +1689,8 @@ static inline void dlci_put(struct gsm_dlci *dlci)
3229     tty_port_put(&dlci->port);
3230     }
3231    
3232     +static void gsm_destroy_network(struct gsm_dlci *dlci);
3233     +
3234     /**
3235     * gsm_dlci_release - release DLCI
3236     * @dlci: DLCI to destroy
3237     @@ -1702,9 +1704,19 @@ static void gsm_dlci_release(struct gsm_dlci *dlci)
3238     {
3239     struct tty_struct *tty = tty_port_tty_get(&dlci->port);
3240     if (tty) {
3241     + mutex_lock(&dlci->mutex);
3242     + gsm_destroy_network(dlci);
3243     + mutex_unlock(&dlci->mutex);
3244     +
3245     + /* tty_vhangup needs the tty_lock, so unlock and
3246     + relock after doing the hangup. */
3247     + tty_unlock(tty);
3248     tty_vhangup(tty);
3249     + tty_lock(tty);
3250     + tty_port_tty_set(&dlci->port, NULL);
3251     tty_kref_put(tty);
3252     }
3253     + dlci->state = DLCI_CLOSED;
3254     dlci_put(dlci);
3255     }
3256    
3257     @@ -2947,6 +2959,8 @@ static void gsmtty_close(struct tty_struct *tty, struct file *filp)
3258    
3259     if (dlci == NULL)
3260     return;
3261     + if (dlci->state == DLCI_CLOSED)
3262     + return;
3263     mutex_lock(&dlci->mutex);
3264     gsm_destroy_network(dlci);
3265     mutex_unlock(&dlci->mutex);
3266     @@ -2965,6 +2979,8 @@ out:
3267     static void gsmtty_hangup(struct tty_struct *tty)
3268     {
3269     struct gsm_dlci *dlci = tty->driver_data;
3270     + if (dlci->state == DLCI_CLOSED)
3271     + return;
3272     tty_port_hangup(&dlci->port);
3273     gsm_dlci_begin_close(dlci);
3274     }
3275     @@ -2972,9 +2988,12 @@ static void gsmtty_hangup(struct tty_struct *tty)
3276     static int gsmtty_write(struct tty_struct *tty, const unsigned char *buf,
3277     int len)
3278     {
3279     + int sent;
3280     struct gsm_dlci *dlci = tty->driver_data;
3281     + if (dlci->state == DLCI_CLOSED)
3282     + return -EINVAL;
3283     /* Stuff the bytes into the fifo queue */
3284     - int sent = kfifo_in_locked(dlci->fifo, buf, len, &dlci->lock);
3285     + sent = kfifo_in_locked(dlci->fifo, buf, len, &dlci->lock);
3286     /* Need to kick the channel */
3287     gsm_dlci_data_kick(dlci);
3288     return sent;
3289     @@ -2983,18 +3002,24 @@ static int gsmtty_write(struct tty_struct *tty, const unsigned char *buf,
3290     static int gsmtty_write_room(struct tty_struct *tty)
3291     {
3292     struct gsm_dlci *dlci = tty->driver_data;
3293     + if (dlci->state == DLCI_CLOSED)
3294     + return -EINVAL;
3295     return TX_SIZE - kfifo_len(dlci->fifo);
3296     }
3297    
3298     static int gsmtty_chars_in_buffer(struct tty_struct *tty)
3299     {
3300     struct gsm_dlci *dlci = tty->driver_data;
3301     + if (dlci->state == DLCI_CLOSED)
3302     + return -EINVAL;
3303     return kfifo_len(dlci->fifo);
3304     }
3305    
3306     static void gsmtty_flush_buffer(struct tty_struct *tty)
3307     {
3308     struct gsm_dlci *dlci = tty->driver_data;
3309     + if (dlci->state == DLCI_CLOSED)
3310     + return;
3311     /* Caution needed: If we implement reliable transport classes
3312     then the data being transmitted can't simply be junked once
3313     it has first hit the stack. Until then we can just blow it
3314     @@ -3013,6 +3038,8 @@ static void gsmtty_wait_until_sent(struct tty_struct *tty, int timeout)
3315     static int gsmtty_tiocmget(struct tty_struct *tty)
3316     {
3317     struct gsm_dlci *dlci = tty->driver_data;
3318     + if (dlci->state == DLCI_CLOSED)
3319     + return -EINVAL;
3320     return dlci->modem_rx;
3321     }
3322    
3323     @@ -3022,6 +3049,8 @@ static int gsmtty_tiocmset(struct tty_struct *tty,
3324     struct gsm_dlci *dlci = tty->driver_data;
3325     unsigned int modem_tx = dlci->modem_tx;
3326    
3327     + if (dlci->state == DLCI_CLOSED)
3328     + return -EINVAL;
3329     modem_tx &= ~clear;
3330     modem_tx |= set;
3331    
3332     @@ -3040,6 +3069,8 @@ static int gsmtty_ioctl(struct tty_struct *tty,
3333     struct gsm_netconfig nc;
3334     int index;
3335    
3336     + if (dlci->state == DLCI_CLOSED)
3337     + return -EINVAL;
3338     switch (cmd) {
3339     case GSMIOC_ENABLE_NET:
3340     if (copy_from_user(&nc, (void __user *)arg, sizeof(nc)))
3341     @@ -3066,6 +3097,9 @@ static int gsmtty_ioctl(struct tty_struct *tty,
3342    
3343     static void gsmtty_set_termios(struct tty_struct *tty, struct ktermios *old)
3344     {
3345     + struct gsm_dlci *dlci = tty->driver_data;
3346     + if (dlci->state == DLCI_CLOSED)
3347     + return;
3348     /* For the moment its fixed. In actual fact the speed information
3349     for the virtual channel can be propogated in both directions by
3350     the RPN control message. This however rapidly gets nasty as we
3351     @@ -3077,6 +3111,8 @@ static void gsmtty_set_termios(struct tty_struct *tty, struct ktermios *old)
3352     static void gsmtty_throttle(struct tty_struct *tty)
3353     {
3354     struct gsm_dlci *dlci = tty->driver_data;
3355     + if (dlci->state == DLCI_CLOSED)
3356     + return;
3357     if (tty->termios.c_cflag & CRTSCTS)
3358     dlci->modem_tx &= ~TIOCM_DTR;
3359     dlci->throttled = 1;
3360     @@ -3087,6 +3123,8 @@ static void gsmtty_throttle(struct tty_struct *tty)
3361     static void gsmtty_unthrottle(struct tty_struct *tty)
3362     {
3363     struct gsm_dlci *dlci = tty->driver_data;
3364     + if (dlci->state == DLCI_CLOSED)
3365     + return;
3366     if (tty->termios.c_cflag & CRTSCTS)
3367     dlci->modem_tx |= TIOCM_DTR;
3368     dlci->throttled = 0;
3369     @@ -3098,6 +3136,8 @@ static int gsmtty_break_ctl(struct tty_struct *tty, int state)
3370     {
3371     struct gsm_dlci *dlci = tty->driver_data;
3372     int encode = 0; /* Off */
3373     + if (dlci->state == DLCI_CLOSED)
3374     + return -EINVAL;
3375    
3376     if (state == -1) /* "On indefinitely" - we can't encode this
3377     properly */
3378     diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c
3379     index 5981912..5c110c8 100644
3380     --- a/drivers/tty/serial/imx.c
3381     +++ b/drivers/tty/serial/imx.c
3382     @@ -1213,8 +1213,14 @@ imx_console_write(struct console *co, const char *s, unsigned int count)
3383     struct imx_port_ucrs old_ucr;
3384     unsigned int ucr1;
3385     unsigned long flags;
3386     + int locked = 1;
3387    
3388     - spin_lock_irqsave(&sport->port.lock, flags);
3389     + if (sport->port.sysrq)
3390     + locked = 0;
3391     + else if (oops_in_progress)
3392     + locked = spin_trylock_irqsave(&sport->port.lock, flags);
3393     + else
3394     + spin_lock_irqsave(&sport->port.lock, flags);
3395    
3396     /*
3397     * First, save UCR1/2/3 and then disable interrupts
3398     @@ -1241,7 +1247,8 @@ imx_console_write(struct console *co, const char *s, unsigned int count)
3399    
3400     imx_port_ucrs_restore(&sport->port, &old_ucr);
3401    
3402     - spin_unlock_irqrestore(&sport->port.lock, flags);
3403     + if (locked)
3404     + spin_unlock_irqrestore(&sport->port.lock, flags);
3405     }
3406    
3407     /*
3408     diff --git a/drivers/tty/tty_ioctl.c b/drivers/tty/tty_ioctl.c
3409     index 8481b29..e4455e0 100644
3410     --- a/drivers/tty/tty_ioctl.c
3411     +++ b/drivers/tty/tty_ioctl.c
3412     @@ -617,7 +617,7 @@ static int set_termios(struct tty_struct *tty, void __user *arg, int opt)
3413     if (opt & TERMIOS_WAIT) {
3414     tty_wait_until_sent(tty, 0);
3415     if (signal_pending(current))
3416     - return -EINTR;
3417     + return -ERESTARTSYS;
3418     }
3419    
3420     tty_set_termios(tty, &tmp_termios);
3421     @@ -684,7 +684,7 @@ static int set_termiox(struct tty_struct *tty, void __user *arg, int opt)
3422     if (opt & TERMIOS_WAIT) {
3423     tty_wait_until_sent(tty, 0);
3424     if (signal_pending(current))
3425     - return -EINTR;
3426     + return -ERESTARTSYS;
3427     }
3428    
3429     mutex_lock(&tty->termios_mutex);
3430     diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c
3431     index 8fd8968..3b1d6bf 100644
3432     --- a/drivers/tty/vt/vt.c
3433     +++ b/drivers/tty/vt/vt.c
3434     @@ -539,7 +539,7 @@ static void insert_char(struct vc_data *vc, unsigned int nr)
3435     {
3436     unsigned short *p = (unsigned short *) vc->vc_pos;
3437    
3438     - scr_memmovew(p + nr, p, (vc->vc_cols - vc->vc_x) * 2);
3439     + scr_memmovew(p + nr, p, (vc->vc_cols - vc->vc_x - nr) * 2);
3440     scr_memsetw(p, vc->vc_video_erase_char, nr * 2);
3441     vc->vc_need_wrap = 0;
3442     if (DO_UPDATE(vc))
3443     @@ -638,7 +638,7 @@ static inline void save_screen(struct vc_data *vc)
3444     * Redrawing of screen
3445     */
3446    
3447     -static void clear_buffer_attributes(struct vc_data *vc)
3448     +void clear_buffer_attributes(struct vc_data *vc)
3449     {
3450     unsigned short *p = (unsigned short *)vc->vc_origin;
3451     int count = vc->vc_screenbuf_size / 2;
3452     @@ -2987,7 +2987,7 @@ int __init vty_init(const struct file_operations *console_fops)
3453    
3454     static struct class *vtconsole_class;
3455    
3456     -static int bind_con_driver(const struct consw *csw, int first, int last,
3457     +static int do_bind_con_driver(const struct consw *csw, int first, int last,
3458     int deflt)
3459     {
3460     struct module *owner = csw->owner;
3461     @@ -2998,7 +2998,7 @@ static int bind_con_driver(const struct consw *csw, int first, int last,
3462     if (!try_module_get(owner))
3463     return -ENODEV;
3464    
3465     - console_lock();
3466     + WARN_CONSOLE_UNLOCKED();
3467    
3468     /* check if driver is registered */
3469     for (i = 0; i < MAX_NR_CON_DRIVER; i++) {
3470     @@ -3083,11 +3083,22 @@ static int bind_con_driver(const struct consw *csw, int first, int last,
3471    
3472     retval = 0;
3473     err:
3474     - console_unlock();
3475     module_put(owner);
3476     return retval;
3477     };
3478    
3479     +
3480     +static int bind_con_driver(const struct consw *csw, int first, int last,
3481     + int deflt)
3482     +{
3483     + int ret;
3484     +
3485     + console_lock();
3486     + ret = do_bind_con_driver(csw, first, last, deflt);
3487     + console_unlock();
3488     + return ret;
3489     +}
3490     +
3491     #ifdef CONFIG_VT_HW_CONSOLE_BINDING
3492     static int con_is_graphics(const struct consw *csw, int first, int last)
3493     {
3494     @@ -3124,6 +3135,18 @@ static int con_is_graphics(const struct consw *csw, int first, int last)
3495     */
3496     int unbind_con_driver(const struct consw *csw, int first, int last, int deflt)
3497     {
3498     + int retval;
3499     +
3500     + console_lock();
3501     + retval = do_unbind_con_driver(csw, first, last, deflt);
3502     + console_unlock();
3503     + return retval;
3504     +}
3505     +EXPORT_SYMBOL(unbind_con_driver);
3506     +
3507     +/* unlocked version of unbind_con_driver() */
3508     +int do_unbind_con_driver(const struct consw *csw, int first, int last, int deflt)
3509     +{
3510     struct module *owner = csw->owner;
3511     const struct consw *defcsw = NULL;
3512     struct con_driver *con_driver = NULL, *con_back = NULL;
3513     @@ -3132,7 +3155,7 @@ int unbind_con_driver(const struct consw *csw, int first, int last, int deflt)
3514     if (!try_module_get(owner))
3515     return -ENODEV;
3516    
3517     - console_lock();
3518     + WARN_CONSOLE_UNLOCKED();
3519    
3520     /* check if driver is registered and if it is unbindable */
3521     for (i = 0; i < MAX_NR_CON_DRIVER; i++) {
3522     @@ -3145,10 +3168,8 @@ int unbind_con_driver(const struct consw *csw, int first, int last, int deflt)
3523     }
3524     }
3525    
3526     - if (retval) {
3527     - console_unlock();
3528     + if (retval)
3529     goto err;
3530     - }
3531    
3532     retval = -ENODEV;
3533    
3534     @@ -3164,15 +3185,11 @@ int unbind_con_driver(const struct consw *csw, int first, int last, int deflt)
3535     }
3536     }
3537    
3538     - if (retval) {
3539     - console_unlock();
3540     + if (retval)
3541     goto err;
3542     - }
3543    
3544     - if (!con_is_bound(csw)) {
3545     - console_unlock();
3546     + if (!con_is_bound(csw))
3547     goto err;
3548     - }
3549    
3550     first = max(first, con_driver->first);
3551     last = min(last, con_driver->last);
3552     @@ -3199,15 +3216,14 @@ int unbind_con_driver(const struct consw *csw, int first, int last, int deflt)
3553     if (!con_is_bound(csw))
3554     con_driver->flag &= ~CON_DRIVER_FLAG_INIT;
3555    
3556     - console_unlock();
3557     /* ignore return value, binding should not fail */
3558     - bind_con_driver(defcsw, first, last, deflt);
3559     + do_bind_con_driver(defcsw, first, last, deflt);
3560     err:
3561     module_put(owner);
3562     return retval;
3563    
3564     }
3565     -EXPORT_SYMBOL(unbind_con_driver);
3566     +EXPORT_SYMBOL_GPL(do_unbind_con_driver);
3567    
3568     static int vt_bind(struct con_driver *con)
3569     {
3570     @@ -3492,28 +3508,18 @@ int con_debug_leave(void)
3571     }
3572     EXPORT_SYMBOL_GPL(con_debug_leave);
3573    
3574     -/**
3575     - * register_con_driver - register console driver to console layer
3576     - * @csw: console driver
3577     - * @first: the first console to take over, minimum value is 0
3578     - * @last: the last console to take over, maximum value is MAX_NR_CONSOLES -1
3579     - *
3580     - * DESCRIPTION: This function registers a console driver which can later
3581     - * bind to a range of consoles specified by @first and @last. It will
3582     - * also initialize the console driver by calling con_startup().
3583     - */
3584     -int register_con_driver(const struct consw *csw, int first, int last)
3585     +static int do_register_con_driver(const struct consw *csw, int first, int last)
3586     {
3587     struct module *owner = csw->owner;
3588     struct con_driver *con_driver;
3589     const char *desc;
3590     int i, retval = 0;
3591    
3592     + WARN_CONSOLE_UNLOCKED();
3593     +
3594     if (!try_module_get(owner))
3595     return -ENODEV;
3596    
3597     - console_lock();
3598     -
3599     for (i = 0; i < MAX_NR_CON_DRIVER; i++) {
3600     con_driver = &registered_con_driver[i];
3601    
3602     @@ -3566,10 +3572,29 @@ int register_con_driver(const struct consw *csw, int first, int last)
3603     }
3604    
3605     err:
3606     - console_unlock();
3607     module_put(owner);
3608     return retval;
3609     }
3610     +
3611     +/**
3612     + * register_con_driver - register console driver to console layer
3613     + * @csw: console driver
3614     + * @first: the first console to take over, minimum value is 0
3615     + * @last: the last console to take over, maximum value is MAX_NR_CONSOLES -1
3616     + *
3617     + * DESCRIPTION: This function registers a console driver which can later
3618     + * bind to a range of consoles specified by @first and @last. It will
3619     + * also initialize the console driver by calling con_startup().
3620     + */
3621     +int register_con_driver(const struct consw *csw, int first, int last)
3622     +{
3623     + int retval;
3624     +
3625     + console_lock();
3626     + retval = do_register_con_driver(csw, first, last);
3627     + console_unlock();
3628     + return retval;
3629     +}
3630     EXPORT_SYMBOL(register_con_driver);
3631    
3632     /**
3633     @@ -3585,9 +3610,18 @@ EXPORT_SYMBOL(register_con_driver);
3634     */
3635     int unregister_con_driver(const struct consw *csw)
3636     {
3637     - int i, retval = -ENODEV;
3638     + int retval;
3639    
3640     console_lock();
3641     + retval = do_unregister_con_driver(csw);
3642     + console_unlock();
3643     + return retval;
3644     +}
3645     +EXPORT_SYMBOL(unregister_con_driver);
3646     +
3647     +int do_unregister_con_driver(const struct consw *csw)
3648     +{
3649     + int i, retval = -ENODEV;
3650    
3651     /* cannot unregister a bound driver */
3652     if (con_is_bound(csw))
3653     @@ -3613,27 +3647,53 @@ int unregister_con_driver(const struct consw *csw)
3654     }
3655     }
3656     err:
3657     - console_unlock();
3658     return retval;
3659     }
3660     -EXPORT_SYMBOL(unregister_con_driver);
3661     +EXPORT_SYMBOL_GPL(do_unregister_con_driver);
3662    
3663     /*
3664     * If we support more console drivers, this function is used
3665     * when a driver wants to take over some existing consoles
3666     * and become default driver for newly opened ones.
3667     *
3668     - * take_over_console is basically a register followed by unbind
3669     + * take_over_console is basically a register followed by unbind
3670     + */
3671     +int do_take_over_console(const struct consw *csw, int first, int last, int deflt)
3672     +{
3673     + int err;
3674     +
3675     + err = do_register_con_driver(csw, first, last);
3676     + /*
3677     + * If we get an busy error we still want to bind the console driver
3678     + * and return success, as we may have unbound the console driver
3679     + * but not unregistered it.
3680     + */
3681     + if (err == -EBUSY)
3682     + err = 0;
3683     + if (!err)
3684     + do_bind_con_driver(csw, first, last, deflt);
3685     +
3686     + return err;
3687     +}
3688     +EXPORT_SYMBOL_GPL(do_take_over_console);
3689     +
3690     +/*
3691     + * If we support more console drivers, this function is used
3692     + * when a driver wants to take over some existing consoles
3693     + * and become default driver for newly opened ones.
3694     + *
3695     + * take_over_console is basically a register followed by unbind
3696     */
3697     int take_over_console(const struct consw *csw, int first, int last, int deflt)
3698     {
3699     int err;
3700    
3701     err = register_con_driver(csw, first, last);
3702     - /* if we get an busy error we still want to bind the console driver
3703     + /*
3704     + * If we get an busy error we still want to bind the console driver
3705     * and return success, as we may have unbound the console driver
3706     -  * but not unregistered it.
3707     - */
3708     + * but not unregistered it.
3709     + */
3710     if (err == -EBUSY)
3711     err = 0;
3712     if (!err)
3713     diff --git a/drivers/usb/host/ehci-omap.c b/drivers/usb/host/ehci-omap.c
3714     index ac17a7c..99899e8 100644
3715     --- a/drivers/usb/host/ehci-omap.c
3716     +++ b/drivers/usb/host/ehci-omap.c
3717     @@ -288,7 +288,6 @@ static int ehci_hcd_omap_remove(struct platform_device *pdev)
3718     {
3719     struct device *dev = &pdev->dev;
3720     struct usb_hcd *hcd = dev_get_drvdata(dev);
3721     - struct ehci_hcd_omap_platform_data *pdata = dev->platform_data;
3722    
3723     usb_remove_hcd(hcd);
3724     disable_put_regulator(dev->platform_data);
3725     @@ -298,13 +297,6 @@ static int ehci_hcd_omap_remove(struct platform_device *pdev)
3726     pm_runtime_put_sync(dev);
3727     pm_runtime_disable(dev);
3728    
3729     - if (pdata->phy_reset) {
3730     - if (gpio_is_valid(pdata->reset_gpio_port[0]))
3731     - gpio_free(pdata->reset_gpio_port[0]);
3732     -
3733     - if (gpio_is_valid(pdata->reset_gpio_port[1]))
3734     - gpio_free(pdata->reset_gpio_port[1]);
3735     - }
3736     return 0;
3737     }
3738    
3739     @@ -372,7 +364,7 @@ static const struct hc_driver ehci_omap_hc_driver = {
3740     .clear_tt_buffer_complete = ehci_clear_tt_buffer_complete,
3741     };
3742    
3743     -MODULE_ALIAS("platform:omap-ehci");
3744     +MODULE_ALIAS("platform:ehci-omap");
3745     MODULE_AUTHOR("Texas Instruments, Inc.");
3746     MODULE_AUTHOR("Felipe Balbi <felipe.balbi@nokia.com>");
3747    
3748     diff --git a/drivers/usb/musb/am35x.c b/drivers/usb/musb/am35x.c
3749     index c107d7c..59eea21 100644
3750     --- a/drivers/usb/musb/am35x.c
3751     +++ b/drivers/usb/musb/am35x.c
3752     @@ -365,7 +365,7 @@ static int am35x_musb_init(struct musb *musb)
3753     usb_nop_xceiv_register();
3754     musb->xceiv = usb_get_phy(USB_PHY_TYPE_USB2);
3755     if (IS_ERR_OR_NULL(musb->xceiv))
3756     - return -ENODEV;
3757     + return -EPROBE_DEFER;
3758    
3759     setup_timer(&otg_workaround, otg_timer, (unsigned long) musb);
3760    
3761     diff --git a/drivers/usb/musb/blackfin.c b/drivers/usb/musb/blackfin.c
3762     index 14dab9f..dbb31b3 100644
3763     --- a/drivers/usb/musb/blackfin.c
3764     +++ b/drivers/usb/musb/blackfin.c
3765     @@ -406,7 +406,7 @@ static int bfin_musb_init(struct musb *musb)
3766     musb->xceiv = usb_get_phy(USB_PHY_TYPE_USB2);
3767     if (IS_ERR_OR_NULL(musb->xceiv)) {
3768     gpio_free(musb->config->gpio_vrsel);
3769     - return -ENODEV;
3770     + return -EPROBE_DEFER;
3771     }
3772    
3773     bfin_musb_reg_init(musb);
3774     diff --git a/drivers/usb/musb/da8xx.c b/drivers/usb/musb/da8xx.c
3775     index 97996af..7c71769d 100644
3776     --- a/drivers/usb/musb/da8xx.c
3777     +++ b/drivers/usb/musb/da8xx.c
3778     @@ -410,6 +410,7 @@ static int da8xx_musb_init(struct musb *musb)
3779     {
3780     void __iomem *reg_base = musb->ctrl_base;
3781     u32 rev;
3782     + int ret = -ENODEV;
3783    
3784     musb->mregs += DA8XX_MENTOR_CORE_OFFSET;
3785    
3786     @@ -420,8 +421,10 @@ static int da8xx_musb_init(struct musb *musb)
3787    
3788     usb_nop_xceiv_register();
3789     musb->xceiv = usb_get_phy(USB_PHY_TYPE_USB2);
3790     - if (IS_ERR_OR_NULL(musb->xceiv))
3791     + if (IS_ERR_OR_NULL(musb->xceiv)) {
3792     + ret = -EPROBE_DEFER;
3793     goto fail;
3794     + }
3795    
3796     setup_timer(&otg_workaround, otg_timer, (unsigned long)musb);
3797    
3798     @@ -441,7 +444,7 @@ static int da8xx_musb_init(struct musb *musb)
3799     musb->isr = da8xx_musb_interrupt;
3800     return 0;
3801     fail:
3802     - return -ENODEV;
3803     + return ret;
3804     }
3805    
3806     static int da8xx_musb_exit(struct musb *musb)
3807     diff --git a/drivers/usb/musb/davinci.c b/drivers/usb/musb/davinci.c
3808     index b1c01ca..e040d91 100644
3809     --- a/drivers/usb/musb/davinci.c
3810     +++ b/drivers/usb/musb/davinci.c
3811     @@ -380,11 +380,14 @@ static int davinci_musb_init(struct musb *musb)
3812     {
3813     void __iomem *tibase = musb->ctrl_base;
3814     u32 revision;
3815     + int ret = -ENODEV;
3816    
3817     usb_nop_xceiv_register();
3818     musb->xceiv = usb_get_phy(USB_PHY_TYPE_USB2);
3819     - if (IS_ERR_OR_NULL(musb->xceiv))
3820     + if (IS_ERR_OR_NULL(musb->xceiv)) {
3821     + ret = -EPROBE_DEFER;
3822     goto unregister;
3823     + }
3824    
3825     musb->mregs += DAVINCI_BASE_OFFSET;
3826    
3827     @@ -438,7 +441,7 @@ fail:
3828     usb_put_phy(musb->xceiv);
3829     unregister:
3830     usb_nop_xceiv_unregister();
3831     - return -ENODEV;
3832     + return ret;
3833     }
3834    
3835     static int davinci_musb_exit(struct musb *musb)
3836     diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
3837     index fd34867..60b41cc 100644
3838     --- a/drivers/usb/musb/musb_core.c
3839     +++ b/drivers/usb/musb/musb_core.c
3840     @@ -1993,6 +1993,7 @@ fail2:
3841     musb_platform_exit(musb);
3842    
3843     fail1:
3844     + pm_runtime_disable(musb->controller);
3845     dev_err(musb->controller,
3846     "musb_init_controller failed with status %d\n", status);
3847    
3848     diff --git a/drivers/usb/musb/musb_dsps.c b/drivers/usb/musb/musb_dsps.c
3849     index f7d764d..341a4b5 100644
3850     --- a/drivers/usb/musb/musb_dsps.c
3851     +++ b/drivers/usb/musb/musb_dsps.c
3852     @@ -419,7 +419,7 @@ static int dsps_musb_init(struct musb *musb)
3853     usb_nop_xceiv_register();
3854     musb->xceiv = usb_get_phy(USB_PHY_TYPE_USB2);
3855     if (IS_ERR_OR_NULL(musb->xceiv))
3856     - return -ENODEV;
3857     + return -EPROBE_DEFER;
3858    
3859     /* Returns zero if e.g. not clocked */
3860     rev = dsps_readl(reg_base, wrp->revision);
3861     diff --git a/drivers/usb/musb/omap2430.c b/drivers/usb/musb/omap2430.c
3862     index da00af4..d7772856 100644
3863     --- a/drivers/usb/musb/omap2430.c
3864     +++ b/drivers/usb/musb/omap2430.c
3865     @@ -369,7 +369,7 @@ static int omap2430_musb_init(struct musb *musb)
3866     musb->xceiv = devm_usb_get_phy(dev, USB_PHY_TYPE_USB2);
3867     if (IS_ERR_OR_NULL(musb->xceiv)) {
3868     pr_err("HS USB OTG: no transceiver configured\n");
3869     - return -ENODEV;
3870     + return -EPROBE_DEFER;
3871     }
3872    
3873     musb->isr = omap2430_musb_interrupt;
3874     diff --git a/drivers/usb/musb/tusb6010.c b/drivers/usb/musb/tusb6010.c
3875     index 3969813..464bd23 100644
3876     --- a/drivers/usb/musb/tusb6010.c
3877     +++ b/drivers/usb/musb/tusb6010.c
3878     @@ -1069,7 +1069,7 @@ static int tusb_musb_init(struct musb *musb)
3879     usb_nop_xceiv_register();
3880     musb->xceiv = usb_get_phy(USB_PHY_TYPE_USB2);
3881     if (IS_ERR_OR_NULL(musb->xceiv))
3882     - return -ENODEV;
3883     + return -EPROBE_DEFER;
3884    
3885     pdev = to_platform_device(musb->controller);
3886    
3887     diff --git a/drivers/usb/musb/ux500.c b/drivers/usb/musb/ux500.c
3888     index a27ca1a..13a3929 100644
3889     --- a/drivers/usb/musb/ux500.c
3890     +++ b/drivers/usb/musb/ux500.c
3891     @@ -61,7 +61,7 @@ static int ux500_musb_init(struct musb *musb)
3892     musb->xceiv = usb_get_phy(USB_PHY_TYPE_USB2);
3893     if (IS_ERR_OR_NULL(musb->xceiv)) {
3894     pr_err("HS USB OTG: no transceiver configured\n");
3895     - return -ENODEV;
3896     + return -EPROBE_DEFER;
3897     }
3898    
3899     musb->isr = ux500_musb_interrupt;
3900     @@ -108,7 +108,7 @@ static int ux500_probe(struct platform_device *pdev)
3901     goto err3;
3902     }
3903    
3904     - ret = clk_enable(clk);
3905     + ret = clk_prepare_enable(clk);
3906     if (ret) {
3907     dev_err(&pdev->dev, "failed to enable clock\n");
3908     goto err4;
3909     @@ -148,7 +148,7 @@ static int ux500_probe(struct platform_device *pdev)
3910     return 0;
3911    
3912     err5:
3913     - clk_disable(clk);
3914     + clk_disable_unprepare(clk);
3915    
3916     err4:
3917     clk_put(clk);
3918     @@ -168,7 +168,7 @@ static int ux500_remove(struct platform_device *pdev)
3919     struct ux500_glue *glue = platform_get_drvdata(pdev);
3920    
3921     platform_device_unregister(glue->musb);
3922     - clk_disable(glue->clk);
3923     + clk_disable_unprepare(glue->clk);
3924     clk_put(glue->clk);
3925     kfree(glue);
3926    
3927     @@ -182,7 +182,7 @@ static int ux500_suspend(struct device *dev)
3928     struct musb *musb = glue_to_musb(glue);
3929    
3930     usb_phy_set_suspend(musb->xceiv, 1);
3931     - clk_disable(glue->clk);
3932     + clk_disable_unprepare(glue->clk);
3933    
3934     return 0;
3935     }
3936     @@ -193,7 +193,7 @@ static int ux500_resume(struct device *dev)
3937     struct musb *musb = glue_to_musb(glue);
3938     int ret;
3939    
3940     - ret = clk_enable(glue->clk);
3941     + ret = clk_prepare_enable(glue->clk);
3942     if (ret) {
3943     dev_err(dev, "failed to enable clock\n");
3944     return ret;
3945     diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
3946     index 90ceef1..d07fccf 100644
3947     --- a/drivers/usb/serial/ftdi_sio.c
3948     +++ b/drivers/usb/serial/ftdi_sio.c
3949     @@ -1886,24 +1886,22 @@ static void ftdi_dtr_rts(struct usb_serial_port *port, int on)
3950     {
3951     struct ftdi_private *priv = usb_get_serial_port_data(port);
3952    
3953     - mutex_lock(&port->serial->disc_mutex);
3954     - if (!port->serial->disconnected) {
3955     - /* Disable flow control */
3956     - if (!on && usb_control_msg(port->serial->dev,
3957     + /* Disable flow control */
3958     + if (!on) {
3959     + if (usb_control_msg(port->serial->dev,
3960     usb_sndctrlpipe(port->serial->dev, 0),
3961     FTDI_SIO_SET_FLOW_CTRL_REQUEST,
3962     FTDI_SIO_SET_FLOW_CTRL_REQUEST_TYPE,
3963     0, priv->interface, NULL, 0,
3964     WDR_TIMEOUT) < 0) {
3965     - dev_err(&port->dev, "error from flowcontrol urb\n");
3966     + dev_err(&port->dev, "error from flowcontrol urb\n");
3967     }
3968     - /* drop RTS and DTR */
3969     - if (on)
3970     - set_mctrl(port, TIOCM_DTR | TIOCM_RTS);
3971     - else
3972     - clear_mctrl(port, TIOCM_DTR | TIOCM_RTS);
3973     }
3974     - mutex_unlock(&port->serial->disc_mutex);
3975     + /* drop RTS and DTR */
3976     + if (on)
3977     + set_mctrl(port, TIOCM_DTR | TIOCM_RTS);
3978     + else
3979     + clear_mctrl(port, TIOCM_DTR | TIOCM_RTS);
3980     }
3981    
3982     /*
3983     diff --git a/drivers/usb/serial/mct_u232.c b/drivers/usb/serial/mct_u232.c
3984     index b691175..d9c8651 100644
3985     --- a/drivers/usb/serial/mct_u232.c
3986     +++ b/drivers/usb/serial/mct_u232.c
3987     @@ -499,19 +499,15 @@ static void mct_u232_dtr_rts(struct usb_serial_port *port, int on)
3988     unsigned int control_state;
3989     struct mct_u232_private *priv = usb_get_serial_port_data(port);
3990    
3991     - mutex_lock(&port->serial->disc_mutex);
3992     - if (!port->serial->disconnected) {
3993     - /* drop DTR and RTS */
3994     - spin_lock_irq(&priv->lock);
3995     - if (on)
3996     - priv->control_state |= TIOCM_DTR | TIOCM_RTS;
3997     - else
3998     - priv->control_state &= ~(TIOCM_DTR | TIOCM_RTS);
3999     - control_state = priv->control_state;
4000     - spin_unlock_irq(&priv->lock);
4001     - mct_u232_set_modem_ctrl(port, control_state);
4002     - }
4003     - mutex_unlock(&port->serial->disc_mutex);
4004     + spin_lock_irq(&priv->lock);
4005     + if (on)
4006     + priv->control_state |= TIOCM_DTR | TIOCM_RTS;
4007     + else
4008     + priv->control_state &= ~(TIOCM_DTR | TIOCM_RTS);
4009     + control_state = priv->control_state;
4010     + spin_unlock_irq(&priv->lock);
4011     +
4012     + mct_u232_set_modem_ctrl(port, control_state);
4013     }
4014    
4015     static void mct_u232_close(struct usb_serial_port *port)
4016     diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
4017     index 567bc77..f7d339d 100644
4018     --- a/drivers/usb/serial/option.c
4019     +++ b/drivers/usb/serial/option.c
4020     @@ -479,6 +479,7 @@ static const struct option_blacklist_info four_g_w14_blacklist = {
4021    
4022     static const struct option_blacklist_info alcatel_x200_blacklist = {
4023     .sendsetup = BIT(0) | BIT(1),
4024     + .reserved = BIT(4),
4025     };
4026    
4027     static const struct option_blacklist_info zte_0037_blacklist = {
4028     @@ -575,8 +576,14 @@ static const struct usb_device_id option_ids[] = {
4029     { USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_GLX) },
4030     { USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_GKE) },
4031     { USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_GLE) },
4032     + { USB_DEVICE(QUANTA_VENDOR_ID, 0xea42),
4033     + .driver_info = (kernel_ulong_t)&net_intf4_blacklist },
4034     + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1c05, USB_CLASS_COMM, 0x02, 0xff) },
4035     + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1c23, USB_CLASS_COMM, 0x02, 0xff) },
4036     { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E173, 0xff, 0xff, 0xff),
4037     .driver_info = (kernel_ulong_t) &net_intf1_blacklist },
4038     + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1441, USB_CLASS_COMM, 0x02, 0xff) },
4039     + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1442, USB_CLASS_COMM, 0x02, 0xff) },
4040     { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4505, 0xff, 0xff, 0xff),
4041     .driver_info = (kernel_ulong_t) &huawei_cdc12_blacklist },
4042     { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3765, 0xff, 0xff, 0xff),
4043     @@ -1215,7 +1222,14 @@ static const struct usb_device_id option_ids[] = {
4044     { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_X060S_X200),
4045     .driver_info = (kernel_ulong_t)&alcatel_x200_blacklist
4046     },
4047     - { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_X220_X500D) },
4048     + { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_X220_X500D),
4049     + .driver_info = (kernel_ulong_t)&net_intf6_blacklist },
4050     + { USB_DEVICE(ALCATEL_VENDOR_ID, 0x0052),
4051     + .driver_info = (kernel_ulong_t)&net_intf6_blacklist },
4052     + { USB_DEVICE(ALCATEL_VENDOR_ID, 0x00b6),
4053     + .driver_info = (kernel_ulong_t)&net_intf3_blacklist },
4054     + { USB_DEVICE(ALCATEL_VENDOR_ID, 0x00b7),
4055     + .driver_info = (kernel_ulong_t)&net_intf5_blacklist },
4056     { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_L100V),
4057     .driver_info = (kernel_ulong_t)&net_intf4_blacklist },
4058     { USB_DEVICE(AIRPLUS_VENDOR_ID, AIRPLUS_PRODUCT_MCD650) },
4059     diff --git a/drivers/usb/serial/quatech2.c b/drivers/usb/serial/quatech2.c
4060     index d152be9..a8d5110 100644
4061     --- a/drivers/usb/serial/quatech2.c
4062     +++ b/drivers/usb/serial/quatech2.c
4063     @@ -945,19 +945,17 @@ static void qt2_dtr_rts(struct usb_serial_port *port, int on)
4064     struct usb_device *dev = port->serial->dev;
4065     struct qt2_port_private *port_priv = usb_get_serial_port_data(port);
4066    
4067     - mutex_lock(&port->serial->disc_mutex);
4068     - if (!port->serial->disconnected) {
4069     - /* Disable flow control */
4070     - if (!on && qt2_setregister(dev, port_priv->device_port,
4071     + /* Disable flow control */
4072     + if (!on) {
4073     + if (qt2_setregister(dev, port_priv->device_port,
4074     UART_MCR, 0) < 0)
4075     dev_warn(&port->dev, "error from flowcontrol urb\n");
4076     - /* drop RTS and DTR */
4077     - if (on)
4078     - update_mctrl(port_priv, TIOCM_DTR | TIOCM_RTS, 0);
4079     - else
4080     - update_mctrl(port_priv, 0, TIOCM_DTR | TIOCM_RTS);
4081     }
4082     - mutex_unlock(&port->serial->disc_mutex);
4083     + /* drop RTS and DTR */
4084     + if (on)
4085     + update_mctrl(port_priv, TIOCM_DTR | TIOCM_RTS, 0);
4086     + else
4087     + update_mctrl(port_priv, 0, TIOCM_DTR | TIOCM_RTS);
4088     }
4089    
4090     static void qt2_update_msr(struct usb_serial_port *port, unsigned char *ch)
4091     diff --git a/drivers/usb/serial/sierra.c b/drivers/usb/serial/sierra.c
4092     index af06f2f..d4426c0 100644
4093     --- a/drivers/usb/serial/sierra.c
4094     +++ b/drivers/usb/serial/sierra.c
4095     @@ -861,19 +861,13 @@ static int sierra_open(struct tty_struct *tty, struct usb_serial_port *port)
4096    
4097     static void sierra_dtr_rts(struct usb_serial_port *port, int on)
4098     {
4099     - struct usb_serial *serial = port->serial;
4100     struct sierra_port_private *portdata;
4101    
4102     portdata = usb_get_serial_port_data(port);
4103     portdata->rts_state = on;
4104     portdata->dtr_state = on;
4105    
4106     - if (serial->dev) {
4107     - mutex_lock(&serial->disc_mutex);
4108     - if (!serial->disconnected)
4109     - sierra_send_setup(port);
4110     - mutex_unlock(&serial->disc_mutex);
4111     - }
4112     + sierra_send_setup(port);
4113     }
4114    
4115     static int sierra_startup(struct usb_serial *serial)
4116     diff --git a/drivers/usb/serial/ssu100.c b/drivers/usb/serial/ssu100.c
4117     index 4543ea3..d938396 100644
4118     --- a/drivers/usb/serial/ssu100.c
4119     +++ b/drivers/usb/serial/ssu100.c
4120     @@ -506,19 +506,16 @@ static void ssu100_dtr_rts(struct usb_serial_port *port, int on)
4121     {
4122     struct usb_device *dev = port->serial->dev;
4123    
4124     - mutex_lock(&port->serial->disc_mutex);
4125     - if (!port->serial->disconnected) {
4126     - /* Disable flow control */
4127     - if (!on &&
4128     - ssu100_setregister(dev, 0, UART_MCR, 0) < 0)
4129     + /* Disable flow control */
4130     + if (!on) {
4131     + if (ssu100_setregister(dev, 0, UART_MCR, 0) < 0)
4132     dev_err(&port->dev, "error from flowcontrol urb\n");
4133     - /* drop RTS and DTR */
4134     - if (on)
4135     - set_mctrl(dev, TIOCM_DTR | TIOCM_RTS);
4136     - else
4137     - clear_mctrl(dev, TIOCM_DTR | TIOCM_RTS);
4138     }
4139     - mutex_unlock(&port->serial->disc_mutex);
4140     + /* drop RTS and DTR */
4141     + if (on)
4142     + set_mctrl(dev, TIOCM_DTR | TIOCM_RTS);
4143     + else
4144     + clear_mctrl(dev, TIOCM_DTR | TIOCM_RTS);
4145     }
4146    
4147     static void ssu100_update_msr(struct usb_serial_port *port, u8 msr)
4148     diff --git a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c
4149     index 64bda13..15af799 100644
4150     --- a/drivers/usb/serial/usb-serial.c
4151     +++ b/drivers/usb/serial/usb-serial.c
4152     @@ -688,10 +688,20 @@ static int serial_carrier_raised(struct tty_port *port)
4153     static void serial_dtr_rts(struct tty_port *port, int on)
4154     {
4155     struct usb_serial_port *p = container_of(port, struct usb_serial_port, port);
4156     - struct usb_serial_driver *drv = p->serial->type;
4157     + struct usb_serial *serial = p->serial;
4158     + struct usb_serial_driver *drv = serial->type;
4159    
4160     - if (drv->dtr_rts)
4161     + if (!drv->dtr_rts)
4162     + return;
4163     + /*
4164     + * Work-around bug in the tty-layer which can result in dtr_rts
4165     + * being called after a disconnect (and tty_unregister_device
4166     + * has returned). Remove once bug has been squashed.
4167     + */
4168     + mutex_lock(&serial->disc_mutex);
4169     + if (!serial->disconnected)
4170     drv->dtr_rts(p, on);
4171     + mutex_unlock(&serial->disc_mutex);
4172     }
4173    
4174     static const struct tty_port_operations serial_port_ops = {
4175     diff --git a/drivers/usb/serial/usb_wwan.c b/drivers/usb/serial/usb_wwan.c
4176     index 01c94aa..1355a6c 100644
4177     --- a/drivers/usb/serial/usb_wwan.c
4178     +++ b/drivers/usb/serial/usb_wwan.c
4179     @@ -38,7 +38,6 @@
4180    
4181     void usb_wwan_dtr_rts(struct usb_serial_port *port, int on)
4182     {
4183     - struct usb_serial *serial = port->serial;
4184     struct usb_wwan_port_private *portdata;
4185     struct usb_wwan_intf_private *intfdata;
4186    
4187     @@ -48,12 +47,11 @@ void usb_wwan_dtr_rts(struct usb_serial_port *port, int on)
4188     return;
4189    
4190     portdata = usb_get_serial_port_data(port);
4191     - mutex_lock(&serial->disc_mutex);
4192     + /* FIXME: locking */
4193     portdata->rts_state = on;
4194     portdata->dtr_state = on;
4195     - if (serial->dev)
4196     - intfdata->send_setup(port);
4197     - mutex_unlock(&serial->disc_mutex);
4198     +
4199     + intfdata->send_setup(port);
4200     }
4201     EXPORT_SYMBOL(usb_wwan_dtr_rts);
4202    
4203     diff --git a/drivers/usb/storage/initializers.c b/drivers/usb/storage/initializers.c
4204     index 16b0bf0..7ab9046 100644
4205     --- a/drivers/usb/storage/initializers.c
4206     +++ b/drivers/usb/storage/initializers.c
4207     @@ -147,7 +147,7 @@ static int usb_stor_huawei_dongles_pid(struct us_data *us)
4208     int idProduct;
4209    
4210     idesc = &us->pusb_intf->cur_altsetting->desc;
4211     - idProduct = us->pusb_dev->descriptor.idProduct;
4212     + idProduct = le16_to_cpu(us->pusb_dev->descriptor.idProduct);
4213     /* The first port is CDROM,
4214     * means the dongle in the single port mode,
4215     * and a switch command is required to be sent. */
4216     @@ -169,7 +169,7 @@ int usb_stor_huawei_init(struct us_data *us)
4217     int result = 0;
4218    
4219     if (usb_stor_huawei_dongles_pid(us)) {
4220     - if (us->pusb_dev->descriptor.idProduct >= 0x1446)
4221     + if (le16_to_cpu(us->pusb_dev->descriptor.idProduct) >= 0x1446)
4222     result = usb_stor_huawei_scsi_init(us);
4223     else
4224     result = usb_stor_huawei_feature_init(us);
4225     diff --git a/drivers/usb/storage/unusual_cypress.h b/drivers/usb/storage/unusual_cypress.h
4226     index 2c85530..65a6a75 100644
4227     --- a/drivers/usb/storage/unusual_cypress.h
4228     +++ b/drivers/usb/storage/unusual_cypress.h
4229     @@ -31,7 +31,7 @@ UNUSUAL_DEV( 0x04b4, 0x6831, 0x0000, 0x9999,
4230     "Cypress ISD-300LP",
4231     USB_SC_CYP_ATACB, USB_PR_DEVICE, NULL, 0),
4232    
4233     -UNUSUAL_DEV( 0x14cd, 0x6116, 0x0000, 0x9999,
4234     +UNUSUAL_DEV( 0x14cd, 0x6116, 0x0000, 0x0219,
4235     "Super Top",
4236     "USB 2.0 SATA BRIDGE",
4237     USB_SC_CYP_ATACB, USB_PR_DEVICE, NULL, 0),
4238     diff --git a/drivers/video/backlight/adp8860_bl.c b/drivers/video/backlight/adp8860_bl.c
4239     index 6bb72c0..a77c9ca 100644
4240     --- a/drivers/video/backlight/adp8860_bl.c
4241     +++ b/drivers/video/backlight/adp8860_bl.c
4242     @@ -783,7 +783,7 @@ static int adp8860_i2c_suspend(struct i2c_client *client, pm_message_t message)
4243    
4244     static int adp8860_i2c_resume(struct i2c_client *client)
4245     {
4246     - adp8860_set_bits(client, ADP8860_MDCR, NSTBY);
4247     + adp8860_set_bits(client, ADP8860_MDCR, NSTBY | BLEN);
4248    
4249     return 0;
4250     }
4251     diff --git a/drivers/video/backlight/adp8870_bl.c b/drivers/video/backlight/adp8870_bl.c
4252     index 63c882b..712c25a 100644
4253     --- a/drivers/video/backlight/adp8870_bl.c
4254     +++ b/drivers/video/backlight/adp8870_bl.c
4255     @@ -957,7 +957,7 @@ static int adp8870_i2c_suspend(struct i2c_client *client, pm_message_t message)
4256    
4257     static int adp8870_i2c_resume(struct i2c_client *client)
4258     {
4259     - adp8870_set_bits(client, ADP8870_MDCR, NSTBY);
4260     + adp8870_set_bits(client, ADP8870_MDCR, NSTBY | BLEN);
4261    
4262     return 0;
4263     }
4264     diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c
4265     index fdefa8f..501c599 100644
4266     --- a/drivers/video/console/fbcon.c
4267     +++ b/drivers/video/console/fbcon.c
4268     @@ -529,6 +529,33 @@ static int search_for_mapped_con(void)
4269     return retval;
4270     }
4271    
4272     +static int do_fbcon_takeover(int show_logo)
4273     +{
4274     + int err, i;
4275     +
4276     + if (!num_registered_fb)
4277     + return -ENODEV;
4278     +
4279     + if (!show_logo)
4280     + logo_shown = FBCON_LOGO_DONTSHOW;
4281     +
4282     + for (i = first_fb_vc; i <= last_fb_vc; i++)
4283     + con2fb_map[i] = info_idx;
4284     +
4285     + err = do_take_over_console(&fb_con, first_fb_vc, last_fb_vc,
4286     + fbcon_is_default);
4287     +
4288     + if (err) {
4289     + for (i = first_fb_vc; i <= last_fb_vc; i++)
4290     + con2fb_map[i] = -1;
4291     + info_idx = -1;
4292     + } else {
4293     + fbcon_has_console_bind = 1;
4294     + }
4295     +
4296     + return err;
4297     +}
4298     +
4299     static int fbcon_takeover(int show_logo)
4300     {
4301     int err, i;
4302     @@ -815,6 +842,8 @@ static void con2fb_init_display(struct vc_data *vc, struct fb_info *info,
4303     *
4304     * Maps a virtual console @unit to a frame buffer device
4305     * @newidx.
4306     + *
4307     + * This should be called with the console lock held.
4308     */
4309     static int set_con2fb_map(int unit, int newidx, int user)
4310     {
4311     @@ -832,7 +861,7 @@ static int set_con2fb_map(int unit, int newidx, int user)
4312    
4313     if (!search_for_mapped_con() || !con_is_bound(&fb_con)) {
4314     info_idx = newidx;
4315     - return fbcon_takeover(0);
4316     + return do_fbcon_takeover(0);
4317     }
4318    
4319     if (oldidx != -1)
4320     @@ -840,7 +869,6 @@ static int set_con2fb_map(int unit, int newidx, int user)
4321    
4322     found = search_fb_in_map(newidx);
4323    
4324     - console_lock();
4325     con2fb_map[unit] = newidx;
4326     if (!err && !found)
4327     err = con2fb_acquire_newinfo(vc, info, unit, oldidx);
4328     @@ -867,7 +895,6 @@ static int set_con2fb_map(int unit, int newidx, int user)
4329     if (!search_fb_in_map(info_idx))
4330     info_idx = newidx;
4331    
4332     - console_unlock();
4333     return err;
4334     }
4335    
4336     @@ -990,7 +1017,7 @@ static const char *fbcon_startup(void)
4337     }
4338    
4339     /* Setup default font */
4340     - if (!p->fontdata) {
4341     + if (!p->fontdata && !vc->vc_font.data) {
4342     if (!fontname[0] || !(font = find_font(fontname)))
4343     font = get_default_font(info->var.xres,
4344     info->var.yres,
4345     @@ -1000,6 +1027,8 @@ static const char *fbcon_startup(void)
4346     vc->vc_font.height = font->height;
4347     vc->vc_font.data = (void *)(p->fontdata = font->data);
4348     vc->vc_font.charcount = 256; /* FIXME Need to support more fonts */
4349     + } else {
4350     + p->fontdata = vc->vc_font.data;
4351     }
4352    
4353     cols = FBCON_SWAP(ops->rotate, info->var.xres, info->var.yres);
4354     @@ -1159,9 +1188,9 @@ static void fbcon_init(struct vc_data *vc, int init)
4355     ops->p = &fb_display[fg_console];
4356     }
4357    
4358     -static void fbcon_free_font(struct display *p)
4359     +static void fbcon_free_font(struct display *p, bool freefont)
4360     {
4361     - if (p->userfont && p->fontdata && (--REFCOUNT(p->fontdata) == 0))
4362     + if (freefont && p->userfont && p->fontdata && (--REFCOUNT(p->fontdata) == 0))
4363     kfree(p->fontdata - FONT_EXTRA_WORDS * sizeof(int));
4364     p->fontdata = NULL;
4365     p->userfont = 0;
4366     @@ -1173,8 +1202,8 @@ static void fbcon_deinit(struct vc_data *vc)
4367     struct fb_info *info;
4368     struct fbcon_ops *ops;
4369     int idx;
4370     + bool free_font = true;
4371    
4372     - fbcon_free_font(p);
4373     idx = con2fb_map[vc->vc_num];
4374    
4375     if (idx == -1)
4376     @@ -1185,6 +1214,8 @@ static void fbcon_deinit(struct vc_data *vc)
4377     if (!info)
4378     goto finished;
4379    
4380     + if (info->flags & FBINFO_MISC_FIRMWARE)
4381     + free_font = false;
4382     ops = info->fbcon_par;
4383    
4384     if (!ops)
4385     @@ -1196,6 +1227,8 @@ static void fbcon_deinit(struct vc_data *vc)
4386     ops->flags &= ~FBCON_FLAGS_INIT;
4387     finished:
4388    
4389     + fbcon_free_font(p, free_font);
4390     +
4391     if (!con_is_bound(&fb_con))
4392     fbcon_exit();
4393    
4394     @@ -2977,7 +3010,7 @@ static int fbcon_unbind(void)
4395     {
4396     int ret;
4397    
4398     - ret = unbind_con_driver(&fb_con, first_fb_vc, last_fb_vc,
4399     + ret = do_unbind_con_driver(&fb_con, first_fb_vc, last_fb_vc,
4400     fbcon_is_default);
4401    
4402     if (!ret)
4403     @@ -2992,6 +3025,7 @@ static inline int fbcon_unbind(void)
4404     }
4405     #endif /* CONFIG_VT_HW_CONSOLE_BINDING */
4406    
4407     +/* called with console_lock held */
4408     static int fbcon_fb_unbind(int idx)
4409     {
4410     int i, new_idx = -1, ret = 0;
4411     @@ -3018,6 +3052,7 @@ static int fbcon_fb_unbind(int idx)
4412     return ret;
4413     }
4414    
4415     +/* called with console_lock held */
4416     static int fbcon_fb_unregistered(struct fb_info *info)
4417     {
4418     int i, idx;
4419     @@ -3050,11 +3085,12 @@ static int fbcon_fb_unregistered(struct fb_info *info)
4420     primary_device = -1;
4421    
4422     if (!num_registered_fb)
4423     - unregister_con_driver(&fb_con);
4424     + do_unregister_con_driver(&fb_con);
4425    
4426     return 0;
4427     }
4428    
4429     +/* called with console_lock held */
4430     static void fbcon_remap_all(int idx)
4431     {
4432     int i;
4433     @@ -3099,6 +3135,7 @@ static inline void fbcon_select_primary(struct fb_info *info)
4434     }
4435     #endif /* CONFIG_FRAMEBUFFER_DETECT_PRIMARY */
4436    
4437     +/* called with console_lock held */
4438     static int fbcon_fb_registered(struct fb_info *info)
4439     {
4440     int ret = 0, i, idx;
4441     @@ -3115,7 +3152,7 @@ static int fbcon_fb_registered(struct fb_info *info)
4442     }
4443    
4444     if (info_idx != -1)
4445     - ret = fbcon_takeover(1);
4446     + ret = do_fbcon_takeover(1);
4447     } else {
4448     for (i = first_fb_vc; i <= last_fb_vc; i++) {
4449     if (con2fb_map_boot[i] == idx)
4450     @@ -3251,6 +3288,7 @@ static int fbcon_event_notify(struct notifier_block *self,
4451     ret = fbcon_fb_unregistered(info);
4452     break;
4453     case FB_EVENT_SET_CONSOLE_MAP:
4454     + /* called with console lock held */
4455     con2fb = event->data;
4456     ret = set_con2fb_map(con2fb->console - 1,
4457     con2fb->framebuffer, 1);
4458     diff --git a/drivers/video/console/vgacon.c b/drivers/video/console/vgacon.c
4459     index d449a74..5855d17 100644
4460     --- a/drivers/video/console/vgacon.c
4461     +++ b/drivers/video/console/vgacon.c
4462     @@ -1064,7 +1064,7 @@ static int vgacon_do_font_op(struct vgastate *state,char *arg,int set,int ch512)
4463     unsigned short video_port_status = vga_video_port_reg + 6;
4464     int font_select = 0x00, beg, i;
4465     char *charmap;
4466     -
4467     + bool clear_attribs = false;
4468     if (vga_video_type != VIDEO_TYPE_EGAM) {
4469     charmap = (char *) VGA_MAP_MEM(colourmap, 0);
4470     beg = 0x0e;
4471     @@ -1169,12 +1169,6 @@ static int vgacon_do_font_op(struct vgastate *state,char *arg,int set,int ch512)
4472    
4473     /* if 512 char mode is already enabled don't re-enable it. */
4474     if ((set) && (ch512 != vga_512_chars)) {
4475     - /* attribute controller */
4476     - for (i = 0; i < MAX_NR_CONSOLES; i++) {
4477     - struct vc_data *c = vc_cons[i].d;
4478     - if (c && c->vc_sw == &vga_con)
4479     - c->vc_hi_font_mask = ch512 ? 0x0800 : 0;
4480     - }
4481     vga_512_chars = ch512;
4482     /* 256-char: enable intensity bit
4483     512-char: disable intensity bit */
4484     @@ -1185,8 +1179,22 @@ static int vgacon_do_font_op(struct vgastate *state,char *arg,int set,int ch512)
4485     it means, but it works, and it appears necessary */
4486     inb_p(video_port_status);
4487     vga_wattr(state->vgabase, VGA_AR_ENABLE_DISPLAY, 0);
4488     + clear_attribs = true;
4489     }
4490     raw_spin_unlock_irq(&vga_lock);
4491     +
4492     + if (clear_attribs) {
4493     + for (i = 0; i < MAX_NR_CONSOLES; i++) {
4494     + struct vc_data *c = vc_cons[i].d;
4495     + if (c && c->vc_sw == &vga_con) {
4496     + /* force hi font mask to 0, so we always clear
4497     + the bit on either transition */
4498     + c->vc_hi_font_mask = 0x00;
4499     + clear_buffer_attributes(c);
4500     + c->vc_hi_font_mask = ch512 ? 0x0800 : 0;
4501     + }
4502     + }
4503     + }
4504     return 0;
4505     }
4506    
4507     diff --git a/drivers/video/fbmem.c b/drivers/video/fbmem.c
4508     index 3ff0105..dc61c12 100644
4509     --- a/drivers/video/fbmem.c
4510     +++ b/drivers/video/fbmem.c
4511     @@ -1177,8 +1177,10 @@ static long do_fb_ioctl(struct fb_info *info, unsigned int cmd,
4512     event.data = &con2fb;
4513     if (!lock_fb_info(info))
4514     return -ENODEV;
4515     + console_lock();
4516     event.info = info;
4517     ret = fb_notifier_call_chain(FB_EVENT_SET_CONSOLE_MAP, &event);
4518     + console_unlock();
4519     unlock_fb_info(info);
4520     break;
4521     case FBIOBLANK:
4522     @@ -1650,7 +1652,9 @@ static int do_register_framebuffer(struct fb_info *fb_info)
4523     event.info = fb_info;
4524     if (!lock_fb_info(fb_info))
4525     return -ENODEV;
4526     + console_lock();
4527     fb_notifier_call_chain(FB_EVENT_FB_REGISTERED, &event);
4528     + console_unlock();
4529     unlock_fb_info(fb_info);
4530     return 0;
4531     }
4532     @@ -1666,8 +1670,10 @@ static int do_unregister_framebuffer(struct fb_info *fb_info)
4533    
4534     if (!lock_fb_info(fb_info))
4535     return -ENODEV;
4536     + console_lock();
4537     event.info = fb_info;
4538     ret = fb_notifier_call_chain(FB_EVENT_FB_UNBIND, &event);
4539     + console_unlock();
4540     unlock_fb_info(fb_info);
4541    
4542     if (ret)
4543     @@ -1682,7 +1688,9 @@ static int do_unregister_framebuffer(struct fb_info *fb_info)
4544     num_registered_fb--;
4545     fb_cleanup_device(fb_info);
4546     event.info = fb_info;
4547     + console_lock();
4548     fb_notifier_call_chain(FB_EVENT_FB_UNREGISTERED, &event);
4549     + console_unlock();
4550    
4551     /* this may free fb info */
4552     put_fb_info(fb_info);
4553     @@ -1853,11 +1861,8 @@ int fb_new_modelist(struct fb_info *info)
4554     err = 1;
4555    
4556     if (!list_empty(&info->modelist)) {
4557     - if (!lock_fb_info(info))
4558     - return -ENODEV;
4559     event.info = info;
4560     err = fb_notifier_call_chain(FB_EVENT_NEW_MODELIST, &event);
4561     - unlock_fb_info(info);
4562     }
4563    
4564     return err;
4565     diff --git a/drivers/video/fbsysfs.c b/drivers/video/fbsysfs.c
4566     index a55e366..ef476b0 100644
4567     --- a/drivers/video/fbsysfs.c
4568     +++ b/drivers/video/fbsysfs.c
4569     @@ -177,6 +177,8 @@ static ssize_t store_modes(struct device *device,
4570     if (i * sizeof(struct fb_videomode) != count)
4571     return -EINVAL;
4572    
4573     + if (!lock_fb_info(fb_info))
4574     + return -ENODEV;
4575     console_lock();
4576     list_splice(&fb_info->modelist, &old_list);
4577     fb_videomode_to_modelist((const struct fb_videomode *)buf, i,
4578     @@ -188,6 +190,7 @@ static ssize_t store_modes(struct device *device,
4579     fb_destroy_modelist(&old_list);
4580    
4581     console_unlock();
4582     + unlock_fb_info(fb_info);
4583    
4584     return 0;
4585     }
4586     diff --git a/drivers/video/fsl-diu-fb.c b/drivers/video/fsl-diu-fb.c
4587     index 19cfd7a..41fbd94 100644
4588     --- a/drivers/video/fsl-diu-fb.c
4589     +++ b/drivers/video/fsl-diu-fb.c
4590     @@ -944,7 +944,7 @@ static u32 fsl_diu_get_pixel_format(unsigned int bits_per_pixel)
4591     #define PF_COMP_0_MASK 0x0000000F
4592     #define PF_COMP_0_SHIFT 0
4593    
4594     -#define MAKE_PF(alpha, red, blue, green, size, c0, c1, c2, c3) \
4595     +#define MAKE_PF(alpha, red, green, blue, size, c0, c1, c2, c3) \
4596     cpu_to_le32(PF_BYTE_F | (alpha << PF_ALPHA_C_SHIFT) | \
4597     (blue << PF_BLUE_C_SHIFT) | (green << PF_GREEN_C_SHIFT) | \
4598     (red << PF_RED_C_SHIFT) | (c3 << PF_COMP_3_SHIFT) | \
4599     @@ -954,10 +954,10 @@ static u32 fsl_diu_get_pixel_format(unsigned int bits_per_pixel)
4600     switch (bits_per_pixel) {
4601     case 32:
4602     /* 0x88883316 */
4603     - return MAKE_PF(3, 2, 0, 1, 3, 8, 8, 8, 8);
4604     + return MAKE_PF(3, 2, 1, 0, 3, 8, 8, 8, 8);
4605     case 24:
4606     /* 0x88082219 */
4607     - return MAKE_PF(4, 0, 1, 2, 2, 0, 8, 8, 8);
4608     + return MAKE_PF(4, 0, 1, 2, 2, 8, 8, 8, 0);
4609     case 16:
4610     /* 0x65053118 */
4611     return MAKE_PF(4, 2, 1, 0, 1, 5, 6, 5, 0);
4612     @@ -1232,6 +1232,16 @@ static int fsl_diu_ioctl(struct fb_info *info, unsigned int cmd,
4613     return 0;
4614     }
4615    
4616     +static inline void fsl_diu_enable_interrupts(struct fsl_diu_data *data)
4617     +{
4618     + u32 int_mask = INT_UNDRUN; /* enable underrun detection */
4619     +
4620     + if (IS_ENABLED(CONFIG_NOT_COHERENT_CACHE))
4621     + int_mask |= INT_VSYNC; /* enable vertical sync */
4622     +
4623     + clrbits32(&data->diu_reg->int_mask, int_mask);
4624     +}
4625     +
4626     /* turn on fb if count == 1
4627     */
4628     static int fsl_diu_open(struct fb_info *info, int user)
4629     @@ -1251,19 +1261,7 @@ static int fsl_diu_open(struct fb_info *info, int user)
4630     if (res < 0)
4631     mfbi->count--;
4632     else {
4633     - struct fsl_diu_data *data = mfbi->parent;
4634     -
4635     -#ifdef CONFIG_NOT_COHERENT_CACHE
4636     - /*
4637     - * Enable underrun detection and vertical sync
4638     - * interrupts.
4639     - */
4640     - clrbits32(&data->diu_reg->int_mask,
4641     - INT_UNDRUN | INT_VSYNC);
4642     -#else
4643     - /* Enable underrun detection */
4644     - clrbits32(&data->diu_reg->int_mask, INT_UNDRUN);
4645     -#endif
4646     + fsl_diu_enable_interrupts(mfbi->parent);
4647     fsl_diu_enable_panel(info);
4648     }
4649     }
4650     @@ -1283,9 +1281,18 @@ static int fsl_diu_release(struct fb_info *info, int user)
4651     mfbi->count--;
4652     if (mfbi->count == 0) {
4653     struct fsl_diu_data *data = mfbi->parent;
4654     + bool disable = true;
4655     + int i;
4656    
4657     - /* Disable interrupts */
4658     - out_be32(&data->diu_reg->int_mask, 0xffffffff);
4659     + /* Disable interrupts only if all AOIs are closed */
4660     + for (i = 0; i < NUM_AOIS; i++) {
4661     + struct mfb_info *mi = data->fsl_diu_info[i].par;
4662     +
4663     + if (mi->count)
4664     + disable = false;
4665     + }
4666     + if (disable)
4667     + out_be32(&data->diu_reg->int_mask, 0xffffffff);
4668     fsl_diu_disable_panel(info);
4669     }
4670    
4671     @@ -1614,14 +1621,6 @@ static int fsl_diu_probe(struct platform_device *pdev)
4672     out_be32(&data->diu_reg->desc[1], data->dummy_ad.paddr);
4673     out_be32(&data->diu_reg->desc[2], data->dummy_ad.paddr);
4674    
4675     - for (i = 0; i < NUM_AOIS; i++) {
4676     - ret = install_fb(&data->fsl_diu_info[i]);
4677     - if (ret) {
4678     - dev_err(&pdev->dev, "could not register fb %d\n", i);
4679     - goto error;
4680     - }
4681     - }
4682     -
4683     /*
4684     * Older versions of U-Boot leave interrupts enabled, so disable
4685     * all of them and clear the status register.
4686     @@ -1630,12 +1629,21 @@ static int fsl_diu_probe(struct platform_device *pdev)
4687     in_be32(&data->diu_reg->int_status);
4688    
4689     ret = request_irq(data->irq, fsl_diu_isr, 0, "fsl-diu-fb",
4690     - &data->diu_reg);
4691     + data->diu_reg);
4692     if (ret) {
4693     dev_err(&pdev->dev, "could not claim irq\n");
4694     goto error;
4695     }
4696    
4697     + for (i = 0; i < NUM_AOIS; i++) {
4698     + ret = install_fb(&data->fsl_diu_info[i]);
4699     + if (ret) {
4700     + dev_err(&pdev->dev, "could not register fb %d\n", i);
4701     + free_irq(data->irq, data->diu_reg);
4702     + goto error;
4703     + }
4704     + }
4705     +
4706     sysfs_attr_init(&data->dev_attr.attr);
4707     data->dev_attr.attr.name = "monitor";
4708     data->dev_attr.attr.mode = S_IRUGO|S_IWUSR;
4709     @@ -1667,7 +1675,7 @@ static int fsl_diu_remove(struct platform_device *pdev)
4710     data = dev_get_drvdata(&pdev->dev);
4711     disable_lcdc(&data->fsl_diu_info[0]);
4712    
4713     - free_irq(data->irq, &data->diu_reg);
4714     + free_irq(data->irq, data->diu_reg);
4715    
4716     for (i = 0; i < NUM_AOIS; i++)
4717     uninstall_fb(&data->fsl_diu_info[i]);
4718     diff --git a/drivers/xen/evtchn.c b/drivers/xen/evtchn.c
4719     index b1f60a0..b2db77e 100644
4720     --- a/drivers/xen/evtchn.c
4721     +++ b/drivers/xen/evtchn.c
4722     @@ -269,6 +269,14 @@ static int evtchn_bind_to_user(struct per_user_data *u, int port)
4723     u->name, (void *)(unsigned long)port);
4724     if (rc >= 0)
4725     rc = evtchn_make_refcounted(port);
4726     + else {
4727     + /* bind failed, should close the port now */
4728     + struct evtchn_close close;
4729     + close.port = port;
4730     + if (HYPERVISOR_event_channel_op(EVTCHNOP_close, &close) != 0)
4731     + BUG();
4732     + set_port_user(port, NULL);
4733     + }
4734    
4735     return rc;
4736     }
4737     @@ -277,6 +285,8 @@ static void evtchn_unbind_from_user(struct per_user_data *u, int port)
4738     {
4739     int irq = irq_from_evtchn(port);
4740    
4741     + BUG_ON(irq < 0);
4742     +
4743     unbind_from_irqhandler(irq, (void *)(unsigned long)port);
4744    
4745     set_port_user(port, NULL);
4746     diff --git a/fs/block_dev.c b/fs/block_dev.c
4747     index 172f849..78333a3 100644
4748     --- a/fs/block_dev.c
4749     +++ b/fs/block_dev.c
4750     @@ -994,6 +994,7 @@ int revalidate_disk(struct gendisk *disk)
4751    
4752     mutex_lock(&bdev->bd_mutex);
4753     check_disk_size_change(disk, bdev);
4754     + bdev->bd_invalidated = 0;
4755     mutex_unlock(&bdev->bd_mutex);
4756     bdput(bdev);
4757     return ret;
4758     diff --git a/fs/gfs2/bmap.c b/fs/gfs2/bmap.c
4759     index a68e91b..9a3945a 100644
4760     --- a/fs/gfs2/bmap.c
4761     +++ b/fs/gfs2/bmap.c
4762     @@ -1286,6 +1286,10 @@ int gfs2_setattr_size(struct inode *inode, u64 newsize)
4763    
4764     inode_dio_wait(inode);
4765    
4766     + ret = gfs2_rs_alloc(GFS2_I(inode));
4767     + if (ret)
4768     + return ret;
4769     +
4770     oldsize = inode->i_size;
4771     if (newsize >= oldsize)
4772     return do_grow(inode, newsize);
4773     diff --git a/fs/lockd/clntproc.c b/fs/lockd/clntproc.c
4774     index 54f9e6c..52e5120 100644
4775     --- a/fs/lockd/clntproc.c
4776     +++ b/fs/lockd/clntproc.c
4777     @@ -550,6 +550,9 @@ again:
4778     status = nlmclnt_block(block, req, NLMCLNT_POLL_TIMEOUT);
4779     if (status < 0)
4780     break;
4781     + /* Resend the blocking lock request after a server reboot */
4782     + if (resp->status == nlm_lck_denied_grace_period)
4783     + continue;
4784     if (resp->status != nlm_lck_blocked)
4785     break;
4786     }
4787     diff --git a/fs/namespace.c b/fs/namespace.c
4788     index 55605c5..a51054f 100644
4789     --- a/fs/namespace.c
4790     +++ b/fs/namespace.c
4791     @@ -1238,6 +1238,14 @@ static int do_umount(struct mount *mnt, int flags)
4792     }
4793    
4794     /*
4795     + * Is the caller allowed to modify his namespace?
4796     + */
4797     +static inline bool may_mount(void)
4798     +{
4799     + return ns_capable(current->nsproxy->mnt_ns->user_ns, CAP_SYS_ADMIN);
4800     +}
4801     +
4802     +/*
4803     * Now umount can handle mount points as well as block devices.
4804     * This is important for filesystems which use unnamed block devices.
4805     *
4806     @@ -1255,6 +1263,9 @@ SYSCALL_DEFINE2(umount, char __user *, name, int, flags)
4807     if (flags & ~(MNT_FORCE | MNT_DETACH | MNT_EXPIRE | UMOUNT_NOFOLLOW))
4808     return -EINVAL;
4809    
4810     + if (!may_mount())
4811     + return -EPERM;
4812     +
4813     if (!(flags & UMOUNT_NOFOLLOW))
4814     lookup_flags |= LOOKUP_FOLLOW;
4815    
4816     @@ -1268,10 +1279,6 @@ SYSCALL_DEFINE2(umount, char __user *, name, int, flags)
4817     if (!check_mnt(mnt))
4818     goto dput_and_out;
4819    
4820     - retval = -EPERM;
4821     - if (!ns_capable(mnt->mnt_ns->user_ns, CAP_SYS_ADMIN))
4822     - goto dput_and_out;
4823     -
4824     retval = do_umount(mnt, flags);
4825     dput_and_out:
4826     /* we mustn't call path_put() as that would clear mnt_expiry_mark */
4827     @@ -1295,7 +1302,7 @@ SYSCALL_DEFINE1(oldumount, char __user *, name)
4828    
4829     static int mount_is_safe(struct path *path)
4830     {
4831     - if (ns_capable(real_mount(path->mnt)->mnt_ns->user_ns, CAP_SYS_ADMIN))
4832     + if (may_mount())
4833     return 0;
4834     return -EPERM;
4835     #ifdef notyet
4836     @@ -1633,7 +1640,7 @@ static int do_change_type(struct path *path, int flag)
4837     int type;
4838     int err = 0;
4839    
4840     - if (!ns_capable(mnt->mnt_ns->user_ns, CAP_SYS_ADMIN))
4841     + if (!may_mount())
4842     return -EPERM;
4843    
4844     if (path->dentry != path->mnt->mnt_root)
4845     @@ -1797,7 +1804,7 @@ static int do_move_mount(struct path *path, const char *old_name)
4846     struct mount *p;
4847     struct mount *old;
4848     int err = 0;
4849     - if (!ns_capable(real_mount(path->mnt)->mnt_ns->user_ns, CAP_SYS_ADMIN))
4850     + if (!may_mount())
4851     return -EPERM;
4852     if (!old_name || !*old_name)
4853     return -EINVAL;
4854     @@ -1933,16 +1940,14 @@ static int do_new_mount(struct path *path, const char *fstype, int flags,
4855     int mnt_flags, const char *name, void *data)
4856     {
4857     struct file_system_type *type;
4858     - struct user_namespace *user_ns;
4859     + struct user_namespace *user_ns = current->nsproxy->mnt_ns->user_ns;
4860     struct vfsmount *mnt;
4861     int err;
4862    
4863     if (!fstype)
4864     return -EINVAL;
4865    
4866     - /* we need capabilities... */
4867     - user_ns = real_mount(path->mnt)->mnt_ns->user_ns;
4868     - if (!ns_capable(user_ns, CAP_SYS_ADMIN))
4869     + if (!may_mount())
4870     return -EPERM;
4871    
4872     type = get_fs_type(fstype);
4873     @@ -2567,7 +2572,7 @@ SYSCALL_DEFINE2(pivot_root, const char __user *, new_root,
4874     struct mount *new_mnt, *root_mnt;
4875     int error;
4876    
4877     - if (!ns_capable(current->nsproxy->mnt_ns->user_ns, CAP_SYS_ADMIN))
4878     + if (!may_mount())
4879     return -EPERM;
4880    
4881     error = user_path_dir(new_root, &new);
4882     diff --git a/fs/nfs/blocklayout/blocklayout.c b/fs/nfs/blocklayout/blocklayout.c
4883     index 4fa788c..434b93e 100644
4884     --- a/fs/nfs/blocklayout/blocklayout.c
4885     +++ b/fs/nfs/blocklayout/blocklayout.c
4886     @@ -1273,6 +1273,7 @@ static const struct nfs_pageio_ops bl_pg_write_ops = {
4887     static struct pnfs_layoutdriver_type blocklayout_type = {
4888     .id = LAYOUT_BLOCK_VOLUME,
4889     .name = "LAYOUT_BLOCK_VOLUME",
4890     + .owner = THIS_MODULE,
4891     .read_pagelist = bl_read_pagelist,
4892     .write_pagelist = bl_write_pagelist,
4893     .alloc_layout_hdr = bl_alloc_layout_hdr,
4894     diff --git a/fs/nfs/callback_proc.c b/fs/nfs/callback_proc.c
4895     index 264d1aa..2960512 100644
4896     --- a/fs/nfs/callback_proc.c
4897     +++ b/fs/nfs/callback_proc.c
4898     @@ -183,60 +183,15 @@ static u32 initiate_file_draining(struct nfs_client *clp,
4899     static u32 initiate_bulk_draining(struct nfs_client *clp,
4900     struct cb_layoutrecallargs *args)
4901     {
4902     - struct nfs_server *server;
4903     - struct pnfs_layout_hdr *lo;
4904     - struct inode *ino;
4905     - u32 rv = NFS4ERR_NOMATCHING_LAYOUT;
4906     - struct pnfs_layout_hdr *tmp;
4907     - LIST_HEAD(recall_list);
4908     - LIST_HEAD(free_me_list);
4909     - struct pnfs_layout_range range = {
4910     - .iomode = IOMODE_ANY,
4911     - .offset = 0,
4912     - .length = NFS4_MAX_UINT64,
4913     - };
4914     -
4915     - spin_lock(&clp->cl_lock);
4916     - rcu_read_lock();
4917     - list_for_each_entry_rcu(server, &clp->cl_superblocks, client_link) {
4918     - if ((args->cbl_recall_type == RETURN_FSID) &&
4919     - memcmp(&server->fsid, &args->cbl_fsid,
4920     - sizeof(struct nfs_fsid)))
4921     - continue;
4922     + int stat;
4923    
4924     - list_for_each_entry(lo, &server->layouts, plh_layouts) {
4925     - ino = igrab(lo->plh_inode);
4926     - if (!ino)
4927     - continue;
4928     - spin_lock(&ino->i_lock);
4929     - /* Is this layout in the process of being freed? */
4930     - if (NFS_I(ino)->layout != lo) {
4931     - spin_unlock(&ino->i_lock);
4932     - iput(ino);
4933     - continue;
4934     - }
4935     - pnfs_get_layout_hdr(lo);
4936     - spin_unlock(&ino->i_lock);
4937     - list_add(&lo->plh_bulk_recall, &recall_list);
4938     - }
4939     - }
4940     - rcu_read_unlock();
4941     - spin_unlock(&clp->cl_lock);
4942     -
4943     - list_for_each_entry_safe(lo, tmp,
4944     - &recall_list, plh_bulk_recall) {
4945     - ino = lo->plh_inode;
4946     - spin_lock(&ino->i_lock);
4947     - set_bit(NFS_LAYOUT_BULK_RECALL, &lo->plh_flags);
4948     - if (pnfs_mark_matching_lsegs_invalid(lo, &free_me_list, &range))
4949     - rv = NFS4ERR_DELAY;
4950     - list_del_init(&lo->plh_bulk_recall);
4951     - spin_unlock(&ino->i_lock);
4952     - pnfs_free_lseg_list(&free_me_list);
4953     - pnfs_put_layout_hdr(lo);
4954     - iput(ino);
4955     - }
4956     - return rv;
4957     + if (args->cbl_recall_type == RETURN_FSID)
4958     + stat = pnfs_destroy_layouts_byfsid(clp, &args->cbl_fsid, true);
4959     + else
4960     + stat = pnfs_destroy_layouts_byclid(clp, true);
4961     + if (stat != 0)
4962     + return NFS4ERR_DELAY;
4963     + return NFS4ERR_NOMATCHING_LAYOUT;
4964     }
4965    
4966     static u32 do_callback_layoutrecall(struct nfs_client *clp,
4967     diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
4968     index cf747ef..efda60d 100644
4969     --- a/fs/nfs/nfs4proc.c
4970     +++ b/fs/nfs/nfs4proc.c
4971     @@ -1463,7 +1463,7 @@ static void nfs4_open_prepare(struct rpc_task *task, void *calldata)
4972     struct nfs4_state_owner *sp = data->owner;
4973    
4974     if (nfs_wait_on_sequence(data->o_arg.seqid, task) != 0)
4975     - return;
4976     + goto out_wait;
4977     /*
4978     * Check if we still need to send an OPEN call, or if we can use
4979     * a delegation instead.
4980     @@ -1498,6 +1498,7 @@ unlock_no_action:
4981     rcu_read_unlock();
4982     out_no_action:
4983     task->tk_action = NULL;
4984     +out_wait:
4985     nfs4_sequence_done(task, &data->o_res.seq_res);
4986     }
4987    
4988     @@ -2150,7 +2151,7 @@ static void nfs4_close_prepare(struct rpc_task *task, void *data)
4989    
4990     dprintk("%s: begin!\n", __func__);
4991     if (nfs_wait_on_sequence(calldata->arg.seqid, task) != 0)
4992     - return;
4993     + goto out_wait;
4994    
4995     task->tk_msg.rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_OPEN_DOWNGRADE];
4996     calldata->arg.fmode = FMODE_READ|FMODE_WRITE;
4997     @@ -2172,16 +2173,14 @@ static void nfs4_close_prepare(struct rpc_task *task, void *data)
4998    
4999     if (!call_close) {
5000     /* Note: exit _without_ calling nfs4_close_done */
5001     - task->tk_action = NULL;
5002     - nfs4_sequence_done(task, &calldata->res.seq_res);
5003     - goto out;
5004     + goto out_no_action;
5005     }
5006    
5007     if (calldata->arg.fmode == 0) {
5008     task->tk_msg.rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_CLOSE];
5009     if (calldata->roc &&
5010     pnfs_roc_drain(inode, &calldata->roc_barrier, task))
5011     - goto out;
5012     + goto out_wait;
5013     }
5014    
5015     nfs_fattr_init(calldata->res.fattr);
5016     @@ -2191,8 +2190,12 @@ static void nfs4_close_prepare(struct rpc_task *task, void *data)
5017     &calldata->res.seq_res,
5018     task) != 0)
5019     nfs_release_seqid(calldata->arg.seqid);
5020     -out:
5021     dprintk("%s: done!\n", __func__);
5022     + return;
5023     +out_no_action:
5024     + task->tk_action = NULL;
5025     +out_wait:
5026     + nfs4_sequence_done(task, &calldata->res.seq_res);
5027     }
5028    
5029     static const struct rpc_call_ops nfs4_close_ops = {
5030     @@ -4423,12 +4426,10 @@ static void nfs4_locku_prepare(struct rpc_task *task, void *data)
5031     struct nfs4_unlockdata *calldata = data;
5032    
5033     if (nfs_wait_on_sequence(calldata->arg.seqid, task) != 0)
5034     - return;
5035     + goto out_wait;
5036     if (test_bit(NFS_LOCK_INITIALIZED, &calldata->lsp->ls_flags) == 0) {
5037     /* Note: exit _without_ running nfs4_locku_done */
5038     - task->tk_action = NULL;
5039     - nfs4_sequence_done(task, &calldata->res.seq_res);
5040     - return;
5041     + goto out_no_action;
5042     }
5043     calldata->timestamp = jiffies;
5044     if (nfs4_setup_sequence(calldata->server,
5045     @@ -4436,6 +4437,11 @@ static void nfs4_locku_prepare(struct rpc_task *task, void *data)
5046     &calldata->res.seq_res,
5047     task) != 0)
5048     nfs_release_seqid(calldata->arg.seqid);
5049     + return;
5050     +out_no_action:
5051     + task->tk_action = NULL;
5052     +out_wait:
5053     + nfs4_sequence_done(task, &calldata->res.seq_res);
5054     }
5055    
5056     static const struct rpc_call_ops nfs4_locku_ops = {
5057     @@ -4576,7 +4582,7 @@ static void nfs4_lock_prepare(struct rpc_task *task, void *calldata)
5058    
5059     dprintk("%s: begin!\n", __func__);
5060     if (nfs_wait_on_sequence(data->arg.lock_seqid, task) != 0)
5061     - return;
5062     + goto out_wait;
5063     /* Do we need to do an open_to_lock_owner? */
5064     if (!(data->arg.lock_seqid->sequence->flags & NFS_SEQID_CONFIRMED)) {
5065     if (nfs_wait_on_sequence(data->arg.open_seqid, task) != 0) {
5066     @@ -4596,6 +4602,8 @@ static void nfs4_lock_prepare(struct rpc_task *task, void *calldata)
5067     nfs_release_seqid(data->arg.open_seqid);
5068     out_release_lock_seqid:
5069     nfs_release_seqid(data->arg.lock_seqid);
5070     +out_wait:
5071     + nfs4_sequence_done(task, &data->res.seq_res);
5072     dprintk("%s: done!, ret = %d\n", __func__, data->rpc_status);
5073     }
5074    
5075     @@ -6134,7 +6142,8 @@ nfs4_proc_layoutget(struct nfs4_layoutget *lgp, gfp_t gfp_flags)
5076     status = nfs4_wait_for_completion_rpc_task(task);
5077     if (status == 0)
5078     status = task->tk_status;
5079     - if (status == 0)
5080     + /* if layoutp->len is 0, nfs4_layoutget_prepare called rpc_exit */
5081     + if (status == 0 && lgp->res.layoutp->len)
5082     lseg = pnfs_layout_process(lgp);
5083     rpc_put_task(task);
5084     dprintk("<-- %s status=%d\n", __func__, status);
5085     diff --git a/fs/nfs/objlayout/objio_osd.c b/fs/nfs/objlayout/objio_osd.c
5086     index c6f9906..88f9611 100644
5087     --- a/fs/nfs/objlayout/objio_osd.c
5088     +++ b/fs/nfs/objlayout/objio_osd.c
5089     @@ -647,6 +647,7 @@ static struct pnfs_layoutdriver_type objlayout_type = {
5090     .flags = PNFS_LAYOUTRET_ON_SETATTR |
5091     PNFS_LAYOUTRET_ON_ERROR,
5092    
5093     + .owner = THIS_MODULE,
5094     .alloc_layout_hdr = objlayout_alloc_layout_hdr,
5095     .free_layout_hdr = objlayout_free_layout_hdr,
5096    
5097     diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c
5098     index d00260b..6be70f6 100644
5099     --- a/fs/nfs/pnfs.c
5100     +++ b/fs/nfs/pnfs.c
5101     @@ -505,37 +505,147 @@ pnfs_destroy_layout(struct nfs_inode *nfsi)
5102     }
5103     EXPORT_SYMBOL_GPL(pnfs_destroy_layout);
5104    
5105     -/*
5106     - * Called by the state manger to remove all layouts established under an
5107     - * expired lease.
5108     - */
5109     -void
5110     -pnfs_destroy_all_layouts(struct nfs_client *clp)
5111     +static bool
5112     +pnfs_layout_add_bulk_destroy_list(struct inode *inode,
5113     + struct list_head *layout_list)
5114     {
5115     - struct nfs_server *server;
5116     struct pnfs_layout_hdr *lo;
5117     - LIST_HEAD(tmp_list);
5118     + bool ret = false;
5119    
5120     - nfs4_deviceid_mark_client_invalid(clp);
5121     - nfs4_deviceid_purge_client(clp);
5122     + spin_lock(&inode->i_lock);
5123     + lo = NFS_I(inode)->layout;
5124     + if (lo != NULL && list_empty(&lo->plh_bulk_destroy)) {
5125     + pnfs_get_layout_hdr(lo);
5126     + list_add(&lo->plh_bulk_destroy, layout_list);
5127     + ret = true;
5128     + }
5129     + spin_unlock(&inode->i_lock);
5130     + return ret;
5131     +}
5132     +
5133     +/* Caller must hold rcu_read_lock and clp->cl_lock */
5134     +static int
5135     +pnfs_layout_bulk_destroy_byserver_locked(struct nfs_client *clp,
5136     + struct nfs_server *server,
5137     + struct list_head *layout_list)
5138     +{
5139     + struct pnfs_layout_hdr *lo, *next;
5140     + struct inode *inode;
5141     +
5142     + list_for_each_entry_safe(lo, next, &server->layouts, plh_layouts) {
5143     + inode = igrab(lo->plh_inode);
5144     + if (inode == NULL)
5145     + continue;
5146     + list_del_init(&lo->plh_layouts);
5147     + if (pnfs_layout_add_bulk_destroy_list(inode, layout_list))
5148     + continue;
5149     + rcu_read_unlock();
5150     + spin_unlock(&clp->cl_lock);
5151     + iput(inode);
5152     + spin_lock(&clp->cl_lock);
5153     + rcu_read_lock();
5154     + return -EAGAIN;
5155     + }
5156     + return 0;
5157     +}
5158     +
5159     +static int
5160     +pnfs_layout_free_bulk_destroy_list(struct list_head *layout_list,
5161     + bool is_bulk_recall)
5162     +{
5163     + struct pnfs_layout_hdr *lo;
5164     + struct inode *inode;
5165     + struct pnfs_layout_range range = {
5166     + .iomode = IOMODE_ANY,
5167     + .offset = 0,
5168     + .length = NFS4_MAX_UINT64,
5169     + };
5170     + LIST_HEAD(lseg_list);
5171     + int ret = 0;
5172     +
5173     + while (!list_empty(layout_list)) {
5174     + lo = list_entry(layout_list->next, struct pnfs_layout_hdr,
5175     + plh_bulk_destroy);
5176     + dprintk("%s freeing layout for inode %lu\n", __func__,
5177     + lo->plh_inode->i_ino);
5178     + inode = lo->plh_inode;
5179     + spin_lock(&inode->i_lock);
5180     + list_del_init(&lo->plh_bulk_destroy);
5181     + lo->plh_block_lgets++; /* permanently block new LAYOUTGETs */
5182     + if (is_bulk_recall)
5183     + set_bit(NFS_LAYOUT_BULK_RECALL, &lo->plh_flags);
5184     + if (pnfs_mark_matching_lsegs_invalid(lo, &lseg_list, &range))
5185     + ret = -EAGAIN;
5186     + spin_unlock(&inode->i_lock);
5187     + pnfs_free_lseg_list(&lseg_list);
5188     + pnfs_put_layout_hdr(lo);
5189     + iput(inode);
5190     + }
5191     + return ret;
5192     +}
5193     +
5194     +int
5195     +pnfs_destroy_layouts_byfsid(struct nfs_client *clp,
5196     + struct nfs_fsid *fsid,
5197     + bool is_recall)
5198     +{
5199     + struct nfs_server *server;
5200     + LIST_HEAD(layout_list);
5201    
5202     spin_lock(&clp->cl_lock);
5203     rcu_read_lock();
5204     +restart:
5205     list_for_each_entry_rcu(server, &clp->cl_superblocks, client_link) {
5206     - if (!list_empty(&server->layouts))
5207     - list_splice_init(&server->layouts, &tmp_list);
5208     + if (memcmp(&server->fsid, fsid, sizeof(*fsid)) != 0)
5209     + continue;
5210     + if (pnfs_layout_bulk_destroy_byserver_locked(clp,
5211     + server,
5212     + &layout_list) != 0)
5213     + goto restart;
5214     }
5215     rcu_read_unlock();
5216     spin_unlock(&clp->cl_lock);
5217    
5218     - while (!list_empty(&tmp_list)) {
5219     - lo = list_entry(tmp_list.next, struct pnfs_layout_hdr,
5220     - plh_layouts);
5221     - dprintk("%s freeing layout for inode %lu\n", __func__,
5222     - lo->plh_inode->i_ino);
5223     - list_del_init(&lo->plh_layouts);
5224     - pnfs_destroy_layout(NFS_I(lo->plh_inode));
5225     + if (list_empty(&layout_list))
5226     + return 0;
5227     + return pnfs_layout_free_bulk_destroy_list(&layout_list, is_recall);
5228     +}
5229     +
5230     +int
5231     +pnfs_destroy_layouts_byclid(struct nfs_client *clp,
5232     + bool is_recall)
5233     +{
5234     + struct nfs_server *server;
5235     + LIST_HEAD(layout_list);
5236     +
5237     + spin_lock(&clp->cl_lock);
5238     + rcu_read_lock();
5239     +restart:
5240     + list_for_each_entry_rcu(server, &clp->cl_superblocks, client_link) {
5241     + if (pnfs_layout_bulk_destroy_byserver_locked(clp,
5242     + server,
5243     + &layout_list) != 0)
5244     + goto restart;
5245     }
5246     + rcu_read_unlock();
5247     + spin_unlock(&clp->cl_lock);
5248     +
5249     + if (list_empty(&layout_list))
5250     + return 0;
5251     + return pnfs_layout_free_bulk_destroy_list(&layout_list, is_recall);
5252     +}
5253     +
5254     +/*
5255     + * Called by the state manger to remove all layouts established under an
5256     + * expired lease.
5257     + */
5258     +void
5259     +pnfs_destroy_all_layouts(struct nfs_client *clp)
5260     +{
5261     + nfs4_deviceid_mark_client_invalid(clp);
5262     + nfs4_deviceid_purge_client(clp);
5263     +
5264     + pnfs_destroy_layouts_byclid(clp, false);
5265     }
5266    
5267     /*
5268     @@ -888,7 +998,7 @@ alloc_init_layout_hdr(struct inode *ino,
5269     atomic_set(&lo->plh_refcount, 1);
5270     INIT_LIST_HEAD(&lo->plh_layouts);
5271     INIT_LIST_HEAD(&lo->plh_segs);
5272     - INIT_LIST_HEAD(&lo->plh_bulk_recall);
5273     + INIT_LIST_HEAD(&lo->plh_bulk_destroy);
5274     lo->plh_inode = ino;
5275     lo->plh_lc_cred = get_rpccred(ctx->state->owner->so_cred);
5276     return lo;
5277     diff --git a/fs/nfs/pnfs.h b/fs/nfs/pnfs.h
5278     index dbf7bba..97cb358 100644
5279     --- a/fs/nfs/pnfs.h
5280     +++ b/fs/nfs/pnfs.h
5281     @@ -132,7 +132,7 @@ struct pnfs_layoutdriver_type {
5282     struct pnfs_layout_hdr {
5283     atomic_t plh_refcount;
5284     struct list_head plh_layouts; /* other client layouts */
5285     - struct list_head plh_bulk_recall; /* clnt list of bulk recalls */
5286     + struct list_head plh_bulk_destroy;
5287     struct list_head plh_segs; /* layout segments list */
5288     nfs4_stateid plh_stateid;
5289     atomic_t plh_outstanding; /* number of RPCs out */
5290     @@ -196,6 +196,11 @@ struct pnfs_layout_segment *pnfs_layout_process(struct nfs4_layoutget *lgp);
5291     void pnfs_free_lseg_list(struct list_head *tmp_list);
5292     void pnfs_destroy_layout(struct nfs_inode *);
5293     void pnfs_destroy_all_layouts(struct nfs_client *);
5294     +int pnfs_destroy_layouts_byfsid(struct nfs_client *clp,
5295     + struct nfs_fsid *fsid,
5296     + bool is_recall);
5297     +int pnfs_destroy_layouts_byclid(struct nfs_client *clp,
5298     + bool is_recall);
5299     void pnfs_put_layout_hdr(struct pnfs_layout_hdr *lo);
5300     void pnfs_set_layout_stateid(struct pnfs_layout_hdr *lo,
5301     const nfs4_stateid *new,
5302     diff --git a/fs/notify/inotify/inotify_user.c b/fs/notify/inotify/inotify_user.c
5303     index 228a2c2..07f7a92 100644
5304     --- a/fs/notify/inotify/inotify_user.c
5305     +++ b/fs/notify/inotify/inotify_user.c
5306     @@ -576,8 +576,6 @@ static int inotify_update_existing_watch(struct fsnotify_group *group,
5307    
5308     /* don't allow invalid bits: we don't want flags set */
5309     mask = inotify_arg_to_mask(arg);
5310     - if (unlikely(!(mask & IN_ALL_EVENTS)))
5311     - return -EINVAL;
5312    
5313     fsn_mark = fsnotify_find_inode_mark(group, inode);
5314     if (!fsn_mark)
5315     @@ -629,8 +627,6 @@ static int inotify_new_watch(struct fsnotify_group *group,
5316    
5317     /* don't allow invalid bits: we don't want flags set */
5318     mask = inotify_arg_to_mask(arg);
5319     - if (unlikely(!(mask & IN_ALL_EVENTS)))
5320     - return -EINVAL;
5321    
5322     tmp_i_mark = kmem_cache_alloc(inotify_inode_mark_cachep, GFP_KERNEL);
5323     if (unlikely(!tmp_i_mark))
5324     diff --git a/fs/ocfs2/dlmglue.c b/fs/ocfs2/dlmglue.c
5325     index 4f7795f..88577eb 100644
5326     --- a/fs/ocfs2/dlmglue.c
5327     +++ b/fs/ocfs2/dlmglue.c
5328     @@ -2545,6 +2545,7 @@ int ocfs2_super_lock(struct ocfs2_super *osb,
5329     * everything is up to the caller :) */
5330     status = ocfs2_should_refresh_lock_res(lockres);
5331     if (status < 0) {
5332     + ocfs2_cluster_unlock(osb, lockres, level);
5333     mlog_errno(status);
5334     goto bail;
5335     }
5336     @@ -2553,8 +2554,10 @@ int ocfs2_super_lock(struct ocfs2_super *osb,
5337    
5338     ocfs2_complete_lock_res_refresh(lockres, status);
5339    
5340     - if (status < 0)
5341     + if (status < 0) {
5342     + ocfs2_cluster_unlock(osb, lockres, level);
5343     mlog_errno(status);
5344     + }
5345     ocfs2_track_lock_refresh(lockres);
5346     }
5347     bail:
5348     diff --git a/include/linux/console.h b/include/linux/console.h
5349     index dedb082..47b858c 100644
5350     --- a/include/linux/console.h
5351     +++ b/include/linux/console.h
5352     @@ -77,7 +77,9 @@ extern const struct consw prom_con; /* SPARC PROM console */
5353     int con_is_bound(const struct consw *csw);
5354     int register_con_driver(const struct consw *csw, int first, int last);
5355     int unregister_con_driver(const struct consw *csw);
5356     +int do_unregister_con_driver(const struct consw *csw);
5357     int take_over_console(const struct consw *sw, int first, int last, int deflt);
5358     +int do_take_over_console(const struct consw *sw, int first, int last, int deflt);
5359     void give_up_console(const struct consw *sw);
5360     #ifdef CONFIG_HW_CONSOLE
5361     int con_debug_enter(struct vc_data *vc);
5362     diff --git a/include/linux/if_vlan.h b/include/linux/if_vlan.h
5363     index d06cc5c..218a3b6 100644
5364     --- a/include/linux/if_vlan.h
5365     +++ b/include/linux/if_vlan.h
5366     @@ -331,7 +331,7 @@ static inline void vlan_set_encap_proto(struct sk_buff *skb,
5367     struct vlan_hdr *vhdr)
5368     {
5369     __be16 proto;
5370     - unsigned char *rawp;
5371     + unsigned short *rawp;
5372    
5373     /*
5374     * Was a VLAN packet, grab the encapsulated protocol, which the layer
5375     @@ -344,8 +344,8 @@ static inline void vlan_set_encap_proto(struct sk_buff *skb,
5376     return;
5377     }
5378    
5379     - rawp = skb->data;
5380     - if (*(unsigned short *) rawp == 0xFFFF)
5381     + rawp = (unsigned short *)(vhdr + 1);
5382     + if (*rawp == 0xFFFF)
5383     /*
5384     * This is a magic hack to spot IPX packets. Older Novell
5385     * breaks the protocol design and runs IPX over 802.3 without
5386     diff --git a/include/linux/pps_kernel.h b/include/linux/pps_kernel.h
5387     index 0cc45ae..7db3eb9 100644
5388     --- a/include/linux/pps_kernel.h
5389     +++ b/include/linux/pps_kernel.h
5390     @@ -43,7 +43,7 @@ struct pps_source_info {
5391     int event, void *data); /* PPS echo function */
5392    
5393     struct module *owner;
5394     - struct device *dev;
5395     + struct device *dev; /* Parent device for device_create */
5396     };
5397    
5398     struct pps_event_time {
5399     @@ -69,6 +69,7 @@ struct pps_device {
5400     wait_queue_head_t queue; /* PPS event queue */
5401    
5402     unsigned int id; /* PPS source unique ID */
5403     + void const *lookup_cookie; /* pps_lookup_dev only */
5404     struct cdev cdev;
5405     struct device *dev;
5406     struct fasync_struct *async_queue; /* fasync method */
5407     @@ -82,16 +83,26 @@ struct pps_device {
5408     extern struct device_attribute pps_attrs[];
5409    
5410     /*
5411     + * Internal functions.
5412     + *
5413     + * These are not actually part of the exported API, but this is a
5414     + * convenient header file to put them in.
5415     + */
5416     +
5417     +extern int pps_register_cdev(struct pps_device *pps);
5418     +extern void pps_unregister_cdev(struct pps_device *pps);
5419     +
5420     +/*
5421     * Exported functions
5422     */
5423    
5424     extern struct pps_device *pps_register_source(
5425     struct pps_source_info *info, int default_params);
5426     extern void pps_unregister_source(struct pps_device *pps);
5427     -extern int pps_register_cdev(struct pps_device *pps);
5428     -extern void pps_unregister_cdev(struct pps_device *pps);
5429     extern void pps_event(struct pps_device *pps,
5430     struct pps_event_time *ts, int event, void *data);
5431     +/* Look up a pps device by magic cookie */
5432     +struct pps_device *pps_lookup_dev(void const *cookie);
5433    
5434     static inline void timespec_to_pps_ktime(struct pps_ktime *kt,
5435     struct timespec ts)
5436     diff --git a/include/linux/vt_kern.h b/include/linux/vt_kern.h
5437     index 50ae7d0..e8d6571 100644
5438     --- a/include/linux/vt_kern.h
5439     +++ b/include/linux/vt_kern.h
5440     @@ -47,6 +47,7 @@ int con_set_cmap(unsigned char __user *cmap);
5441     int con_get_cmap(unsigned char __user *cmap);
5442     void scrollback(struct vc_data *vc, int lines);
5443     void scrollfront(struct vc_data *vc, int lines);
5444     +void clear_buffer_attributes(struct vc_data *vc);
5445     void update_region(struct vc_data *vc, unsigned long start, int count);
5446     void redraw_screen(struct vc_data *vc, int is_switch);
5447     #define update_screen(x) redraw_screen(x, 0)
5448     @@ -130,6 +131,8 @@ void vt_event_post(unsigned int event, unsigned int old, unsigned int new);
5449     int vt_waitactive(int n);
5450     void change_console(struct vc_data *new_vc);
5451     void reset_vc(struct vc_data *vc);
5452     +extern int do_unbind_con_driver(const struct consw *csw, int first, int last,
5453     + int deflt);
5454     extern int unbind_con_driver(const struct consw *csw, int first, int last,
5455     int deflt);
5456     int vty_init(const struct file_operations *console_fops);
5457     diff --git a/include/net/dst.h b/include/net/dst.h
5458     index 9a78810..b3ebe17 100644
5459     --- a/include/net/dst.h
5460     +++ b/include/net/dst.h
5461     @@ -36,13 +36,9 @@ struct dst_entry {
5462     struct net_device *dev;
5463     struct dst_ops *ops;
5464     unsigned long _metrics;
5465     - union {
5466     - unsigned long expires;
5467     - /* point to where the dst_entry copied from */
5468     - struct dst_entry *from;
5469     - };
5470     + unsigned long expires;
5471     struct dst_entry *path;
5472     - void *__pad0;
5473     + struct dst_entry *from;
5474     #ifdef CONFIG_XFRM
5475     struct xfrm_state *xfrm;
5476     #else
5477     diff --git a/include/net/icmp.h b/include/net/icmp.h
5478     index 9ac2524..081439f 100644
5479     --- a/include/net/icmp.h
5480     +++ b/include/net/icmp.h
5481     @@ -41,6 +41,7 @@ struct net;
5482    
5483     extern void icmp_send(struct sk_buff *skb_in, int type, int code, __be32 info);
5484     extern int icmp_rcv(struct sk_buff *skb);
5485     +extern void icmp_err(struct sk_buff *, u32 info);
5486     extern int icmp_init(void);
5487     extern void icmp_out_count(struct net *net, unsigned char type);
5488    
5489     diff --git a/include/net/inet6_hashtables.h b/include/net/inet6_hashtables.h
5490     index 9e34c87..f071f50 100644
5491     --- a/include/net/inet6_hashtables.h
5492     +++ b/include/net/inet6_hashtables.h
5493     @@ -28,16 +28,16 @@
5494    
5495     struct inet_hashinfo;
5496    
5497     -/* I have no idea if this is a good hash for v6 or not. -DaveM */
5498     static inline unsigned int inet6_ehashfn(struct net *net,
5499     const struct in6_addr *laddr, const u16 lport,
5500     const struct in6_addr *faddr, const __be16 fport)
5501     {
5502     - u32 ports = (lport ^ (__force u16)fport);
5503     + u32 ports = (((u32)lport) << 16) | (__force u32)fport;
5504    
5505     return jhash_3words((__force u32)laddr->s6_addr32[3],
5506     - (__force u32)faddr->s6_addr32[3],
5507     - ports, inet_ehash_secret + net_hash_mix(net));
5508     + ipv6_addr_jhash(faddr),
5509     + ports,
5510     + inet_ehash_secret + net_hash_mix(net));
5511     }
5512    
5513     static inline int inet6_sk_ehashfn(const struct sock *sk)
5514     diff --git a/include/net/inet_sock.h b/include/net/inet_sock.h
5515     index a4196cb..7235ae7 100644
5516     --- a/include/net/inet_sock.h
5517     +++ b/include/net/inet_sock.h
5518     @@ -203,6 +203,7 @@ static inline void inet_sk_copy_descendant(struct sock *sk_to,
5519     extern int inet_sk_rebuild_header(struct sock *sk);
5520    
5521     extern u32 inet_ehash_secret;
5522     +extern u32 ipv6_hash_secret;
5523     extern void build_ehash_secret(void);
5524    
5525     static inline unsigned int inet_ehashfn(struct net *net,
5526     diff --git a/include/net/ip6_fib.h b/include/net/ip6_fib.h
5527     index fdc48a9..28d27a6 100644
5528     --- a/include/net/ip6_fib.h
5529     +++ b/include/net/ip6_fib.h
5530     @@ -166,50 +166,35 @@ static inline struct inet6_dev *ip6_dst_idev(struct dst_entry *dst)
5531    
5532     static inline void rt6_clean_expires(struct rt6_info *rt)
5533     {
5534     - if (!(rt->rt6i_flags & RTF_EXPIRES) && rt->dst.from)
5535     - dst_release(rt->dst.from);
5536     -
5537     rt->rt6i_flags &= ~RTF_EXPIRES;
5538     - rt->dst.from = NULL;
5539     }
5540    
5541     static inline void rt6_set_expires(struct rt6_info *rt, unsigned long expires)
5542     {
5543     - if (!(rt->rt6i_flags & RTF_EXPIRES) && rt->dst.from)
5544     - dst_release(rt->dst.from);
5545     -
5546     - rt->rt6i_flags |= RTF_EXPIRES;
5547     rt->dst.expires = expires;
5548     + rt->rt6i_flags |= RTF_EXPIRES;
5549     }
5550    
5551     -static inline void rt6_update_expires(struct rt6_info *rt, int timeout)
5552     +static inline void rt6_update_expires(struct rt6_info *rt0, int timeout)
5553     {
5554     - if (!(rt->rt6i_flags & RTF_EXPIRES)) {
5555     - if (rt->dst.from)
5556     - dst_release(rt->dst.from);
5557     - /* dst_set_expires relies on expires == 0
5558     - * if it has not been set previously.
5559     - */
5560     - rt->dst.expires = 0;
5561     - }
5562     -
5563     - dst_set_expires(&rt->dst, timeout);
5564     - rt->rt6i_flags |= RTF_EXPIRES;
5565     + struct rt6_info *rt;
5566     +
5567     + for (rt = rt0; rt && !(rt->rt6i_flags & RTF_EXPIRES);
5568     + rt = (struct rt6_info *)rt->dst.from);
5569     + if (rt && rt != rt0)
5570     + rt0->dst.expires = rt->dst.expires;
5571     +
5572     + dst_set_expires(&rt0->dst, timeout);
5573     + rt0->rt6i_flags |= RTF_EXPIRES;
5574     }
5575    
5576     static inline void rt6_set_from(struct rt6_info *rt, struct rt6_info *from)
5577     {
5578     struct dst_entry *new = (struct dst_entry *) from;
5579    
5580     - if (!(rt->rt6i_flags & RTF_EXPIRES) && rt->dst.from) {
5581     - if (new == rt->dst.from)
5582     - return;
5583     - dst_release(rt->dst.from);
5584     - }
5585     -
5586     rt->rt6i_flags &= ~RTF_EXPIRES;
5587     - rt->dst.from = new;
5588     dst_hold(new);
5589     + rt->dst.from = new;
5590     }
5591    
5592     static inline void ip6_rt_put(struct rt6_info *rt)
5593     diff --git a/include/net/ipv6.h b/include/net/ipv6.h
5594     index 5af66b2..5a67919 100644
5595     --- a/include/net/ipv6.h
5596     +++ b/include/net/ipv6.h
5597     @@ -15,6 +15,7 @@
5598    
5599     #include <linux/ipv6.h>
5600     #include <linux/hardirq.h>
5601     +#include <linux/jhash.h>
5602     #include <net/if_inet6.h>
5603     #include <net/ndisc.h>
5604     #include <net/flow.h>
5605     @@ -473,6 +474,17 @@ static inline u32 ipv6_addr_hash(const struct in6_addr *a)
5606     #endif
5607     }
5608    
5609     +/* more secured version of ipv6_addr_hash() */
5610     +static inline u32 ipv6_addr_jhash(const struct in6_addr *a)
5611     +{
5612     + u32 v = (__force u32)a->s6_addr32[0] ^ (__force u32)a->s6_addr32[1];
5613     +
5614     + return jhash_3words(v,
5615     + (__force u32)a->s6_addr32[2],
5616     + (__force u32)a->s6_addr32[3],
5617     + ipv6_hash_secret);
5618     +}
5619     +
5620     static inline bool ipv6_addr_loopback(const struct in6_addr *a)
5621     {
5622     return (a->s6_addr32[0] | a->s6_addr32[1] |
5623     diff --git a/include/net/sock.h b/include/net/sock.h
5624     index 182ca99..25afaa0 100644
5625     --- a/include/net/sock.h
5626     +++ b/include/net/sock.h
5627     @@ -1037,7 +1037,7 @@ static inline void sk_refcnt_debug_dec(struct sock *sk)
5628     sk->sk_prot->name, sk, atomic_read(&sk->sk_prot->socks));
5629     }
5630    
5631     -inline void sk_refcnt_debug_release(const struct sock *sk)
5632     +static inline void sk_refcnt_debug_release(const struct sock *sk)
5633     {
5634     if (atomic_read(&sk->sk_refcnt) != 1)
5635     printk(KERN_DEBUG "Destruction of the %s socket %p delayed, refcnt=%d\n",
5636     diff --git a/include/uapi/linux/serial_core.h b/include/uapi/linux/serial_core.h
5637     index 2c6c85f..8f6e50a 100644
5638     --- a/include/uapi/linux/serial_core.h
5639     +++ b/include/uapi/linux/serial_core.h
5640     @@ -50,7 +50,7 @@
5641     #define PORT_LPC3220 22 /* NXP LPC32xx SoC "Standard" UART */
5642     #define PORT_8250_CIR 23 /* CIR infrared port, has its own driver */
5643     #define PORT_XR17V35X 24 /* Exar XR17V35x UARTs */
5644     -#define PORT_BRCM_TRUMANAGE 24
5645     +#define PORT_BRCM_TRUMANAGE 25
5646     #define PORT_MAX_8250 25 /* max port ID */
5647    
5648     /*
5649     diff --git a/include/uapi/linux/usb/audio.h b/include/uapi/linux/usb/audio.h
5650     index ac90037..d2314be 100644
5651     --- a/include/uapi/linux/usb/audio.h
5652     +++ b/include/uapi/linux/usb/audio.h
5653     @@ -384,14 +384,16 @@ static inline __u8 uac_processing_unit_iProcessing(struct uac_processing_unit_de
5654     int protocol)
5655     {
5656     __u8 control_size = uac_processing_unit_bControlSize(desc, protocol);
5657     - return desc->baSourceID[desc->bNrInPins + control_size];
5658     + return *(uac_processing_unit_bmControls(desc, protocol)
5659     + + control_size);
5660     }
5661    
5662     static inline __u8 *uac_processing_unit_specific(struct uac_processing_unit_descriptor *desc,
5663     int protocol)
5664     {
5665     __u8 control_size = uac_processing_unit_bControlSize(desc, protocol);
5666     - return &desc->baSourceID[desc->bNrInPins + control_size + 1];
5667     + return uac_processing_unit_bmControls(desc, protocol)
5668     + + control_size + 1;
5669     }
5670    
5671     /* 4.5.2 Class-Specific AS Interface Descriptor */
5672     diff --git a/kernel/futex.c b/kernel/futex.c
5673     index 19eb089..8879430 100644
5674     --- a/kernel/futex.c
5675     +++ b/kernel/futex.c
5676     @@ -2471,8 +2471,6 @@ SYSCALL_DEFINE3(get_robust_list, int, pid,
5677     if (!futex_cmpxchg_enabled)
5678     return -ENOSYS;
5679    
5680     - WARN_ONCE(1, "deprecated: get_robust_list will be deleted in 2013.\n");
5681     -
5682     rcu_read_lock();
5683    
5684     ret = -ESRCH;
5685     diff --git a/kernel/futex_compat.c b/kernel/futex_compat.c
5686     index 83e368b..a9642d5 100644
5687     --- a/kernel/futex_compat.c
5688     +++ b/kernel/futex_compat.c
5689     @@ -142,8 +142,6 @@ compat_sys_get_robust_list(int pid, compat_uptr_t __user *head_ptr,
5690     if (!futex_cmpxchg_enabled)
5691     return -ENOSYS;
5692    
5693     - WARN_ONCE(1, "deprecated: get_robust_list will be deleted in 2013.\n");
5694     -
5695     rcu_read_lock();
5696    
5697     ret = -ESRCH;
5698     diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c
5699     index 6db7a5e..cdd5607 100644
5700     --- a/kernel/hrtimer.c
5701     +++ b/kernel/hrtimer.c
5702     @@ -640,21 +640,9 @@ static inline void hrtimer_init_hres(struct hrtimer_cpu_base *base)
5703     * and expiry check is done in the hrtimer_interrupt or in the softirq.
5704     */
5705     static inline int hrtimer_enqueue_reprogram(struct hrtimer *timer,
5706     - struct hrtimer_clock_base *base,
5707     - int wakeup)
5708     + struct hrtimer_clock_base *base)
5709     {
5710     - if (base->cpu_base->hres_active && hrtimer_reprogram(timer, base)) {
5711     - if (wakeup) {
5712     - raw_spin_unlock(&base->cpu_base->lock);
5713     - raise_softirq_irqoff(HRTIMER_SOFTIRQ);
5714     - raw_spin_lock(&base->cpu_base->lock);
5715     - } else
5716     - __raise_softirq_irqoff(HRTIMER_SOFTIRQ);
5717     -
5718     - return 1;
5719     - }
5720     -
5721     - return 0;
5722     + return base->cpu_base->hres_active && hrtimer_reprogram(timer, base);
5723     }
5724    
5725     static inline ktime_t hrtimer_update_base(struct hrtimer_cpu_base *base)
5726     @@ -735,8 +723,7 @@ static inline int hrtimer_switch_to_hres(void) { return 0; }
5727     static inline void
5728     hrtimer_force_reprogram(struct hrtimer_cpu_base *base, int skip_equal) { }
5729     static inline int hrtimer_enqueue_reprogram(struct hrtimer *timer,
5730     - struct hrtimer_clock_base *base,
5731     - int wakeup)
5732     + struct hrtimer_clock_base *base)
5733     {
5734     return 0;
5735     }
5736     @@ -995,8 +982,21 @@ int __hrtimer_start_range_ns(struct hrtimer *timer, ktime_t tim,
5737     *
5738     * XXX send_remote_softirq() ?
5739     */
5740     - if (leftmost && new_base->cpu_base == &__get_cpu_var(hrtimer_bases))
5741     - hrtimer_enqueue_reprogram(timer, new_base, wakeup);
5742     + if (leftmost && new_base->cpu_base == &__get_cpu_var(hrtimer_bases)
5743     + && hrtimer_enqueue_reprogram(timer, new_base)) {
5744     + if (wakeup) {
5745     + /*
5746     + * We need to drop cpu_base->lock to avoid a
5747     + * lock ordering issue vs. rq->lock.
5748     + */
5749     + raw_spin_unlock(&new_base->cpu_base->lock);
5750     + raise_softirq_irqoff(HRTIMER_SOFTIRQ);
5751     + local_irq_restore(flags);
5752     + return ret;
5753     + } else {
5754     + __raise_softirq_irqoff(HRTIMER_SOFTIRQ);
5755     + }
5756     + }
5757    
5758     unlock_hrtimer_base(timer, &flags);
5759    
5760     diff --git a/kernel/irq/spurious.c b/kernel/irq/spurious.c
5761     index 611cd60..7b5f012 100644
5762     --- a/kernel/irq/spurious.c
5763     +++ b/kernel/irq/spurious.c
5764     @@ -80,13 +80,11 @@ static int try_one_irq(int irq, struct irq_desc *desc, bool force)
5765    
5766     /*
5767     * All handlers must agree on IRQF_SHARED, so we test just the
5768     - * first. Check for action->next as well.
5769     + * first.
5770     */
5771     action = desc->action;
5772     if (!action || !(action->flags & IRQF_SHARED) ||
5773     - (action->flags & __IRQF_TIMER) ||
5774     - (action->handler(irq, action->dev_id) == IRQ_HANDLED) ||
5775     - !action->next)
5776     + (action->flags & __IRQF_TIMER))
5777     goto out;
5778    
5779     /* Already running on another processor */
5780     @@ -104,6 +102,7 @@ static int try_one_irq(int irq, struct irq_desc *desc, bool force)
5781     do {
5782     if (handle_irq_event(desc) == IRQ_HANDLED)
5783     ret = IRQ_HANDLED;
5784     + /* Make sure that there is still a valid action */
5785     action = desc->action;
5786     } while ((desc->istate & IRQS_PENDING) && action);
5787     desc->istate &= ~IRQS_POLL_INPROGRESS;
5788     diff --git a/kernel/posix-cpu-timers.c b/kernel/posix-cpu-timers.c
5789     index a278cad..942ca27 100644
5790     --- a/kernel/posix-cpu-timers.c
5791     +++ b/kernel/posix-cpu-timers.c
5792     @@ -1401,8 +1401,10 @@ static int do_cpu_nanosleep(const clockid_t which_clock, int flags,
5793     while (!signal_pending(current)) {
5794     if (timer.it.cpu.expires.sched == 0) {
5795     /*
5796     - * Our timer fired and was reset.
5797     + * Our timer fired and was reset, below
5798     + * deletion can not fail.
5799     */
5800     + posix_cpu_timer_del(&timer);
5801     spin_unlock_irq(&timer.it_lock);
5802     return 0;
5803     }
5804     @@ -1420,9 +1422,26 @@ static int do_cpu_nanosleep(const clockid_t which_clock, int flags,
5805     * We were interrupted by a signal.
5806     */
5807     sample_to_timespec(which_clock, timer.it.cpu.expires, rqtp);
5808     - posix_cpu_timer_set(&timer, 0, &zero_it, it);
5809     + error = posix_cpu_timer_set(&timer, 0, &zero_it, it);
5810     + if (!error) {
5811     + /*
5812     + * Timer is now unarmed, deletion can not fail.
5813     + */
5814     + posix_cpu_timer_del(&timer);
5815     + }
5816     spin_unlock_irq(&timer.it_lock);
5817    
5818     + while (error == TIMER_RETRY) {
5819     + /*
5820     + * We need to handle case when timer was or is in the
5821     + * middle of firing. In other cases we already freed
5822     + * resources.
5823     + */
5824     + spin_lock_irq(&timer.it_lock);
5825     + error = posix_cpu_timer_del(&timer);
5826     + spin_unlock_irq(&timer.it_lock);
5827     + }
5828     +
5829     if ((it->it_value.tv_sec | it->it_value.tv_nsec) == 0) {
5830     /*
5831     * It actually did fire already.
5832     diff --git a/kernel/timeconst.pl b/kernel/timeconst.pl
5833     index eb51d76..3f42652 100644
5834     --- a/kernel/timeconst.pl
5835     +++ b/kernel/timeconst.pl
5836     @@ -369,10 +369,8 @@ if ($hz eq '--can') {
5837     die "Usage: $0 HZ\n";
5838     }
5839    
5840     - @val = @{$canned_values{$hz}};
5841     - if (!defined(@val)) {
5842     - @val = compute_values($hz);
5843     - }
5844     + $cv = $canned_values{$hz};
5845     + @val = defined($cv) ? @$cv : compute_values($hz);
5846     output($hz, @val);
5847     }
5848     exit 0;
5849     diff --git a/kernel/workqueue.c b/kernel/workqueue.c
5850     index fbc6576..033ad5b 100644
5851     --- a/kernel/workqueue.c
5852     +++ b/kernel/workqueue.c
5853     @@ -1352,7 +1352,7 @@ void delayed_work_timer_fn(unsigned long __data)
5854     /* should have been called from irqsafe timer with irq already off */
5855     __queue_work(dwork->cpu, cwq->wq, &dwork->work);
5856     }
5857     -EXPORT_SYMBOL_GPL(delayed_work_timer_fn);
5858     +EXPORT_SYMBOL(delayed_work_timer_fn);
5859    
5860     static void __queue_delayed_work(int cpu, struct workqueue_struct *wq,
5861     struct delayed_work *dwork, unsigned long delay)
5862     diff --git a/mm/fadvise.c b/mm/fadvise.c
5863     index a47f0f5..909ec55 100644
5864     --- a/mm/fadvise.c
5865     +++ b/mm/fadvise.c
5866     @@ -17,6 +17,7 @@
5867     #include <linux/fadvise.h>
5868     #include <linux/writeback.h>
5869     #include <linux/syscalls.h>
5870     +#include <linux/swap.h>
5871    
5872     #include <asm/unistd.h>
5873    
5874     @@ -120,9 +121,22 @@ SYSCALL_DEFINE(fadvise64_64)(int fd, loff_t offset, loff_t len, int advice)
5875     start_index = (offset+(PAGE_CACHE_SIZE-1)) >> PAGE_CACHE_SHIFT;
5876     end_index = (endbyte >> PAGE_CACHE_SHIFT);
5877    
5878     - if (end_index >= start_index)
5879     - invalidate_mapping_pages(mapping, start_index,
5880     + if (end_index >= start_index) {
5881     + unsigned long count = invalidate_mapping_pages(mapping,
5882     + start_index, end_index);
5883     +
5884     + /*
5885     + * If fewer pages were invalidated than expected then
5886     + * it is possible that some of the pages were on
5887     + * a per-cpu pagevec for a remote CPU. Drain all
5888     + * pagevecs and try again.
5889     + */
5890     + if (count < (end_index - start_index + 1)) {
5891     + lru_add_drain_all();
5892     + invalidate_mapping_pages(mapping, start_index,
5893     end_index);
5894     + }
5895     + }
5896     break;
5897     default:
5898     ret = -EINVAL;
5899     diff --git a/mm/mmu_notifier.c b/mm/mmu_notifier.c
5900     index 8a5ac8c..f5c3d96 100644
5901     --- a/mm/mmu_notifier.c
5902     +++ b/mm/mmu_notifier.c
5903     @@ -37,49 +37,51 @@ static struct srcu_struct srcu;
5904     void __mmu_notifier_release(struct mm_struct *mm)
5905     {
5906     struct mmu_notifier *mn;
5907     - struct hlist_node *n;
5908     int id;
5909    
5910     /*
5911     - * SRCU here will block mmu_notifier_unregister until
5912     - * ->release returns.
5913     + * srcu_read_lock() here will block synchronize_srcu() in
5914     + * mmu_notifier_unregister() until all registered
5915     + * ->release() callouts this function makes have
5916     + * returned.
5917     */
5918     id = srcu_read_lock(&srcu);
5919     - hlist_for_each_entry_rcu(mn, n, &mm->mmu_notifier_mm->list, hlist)
5920     - /*
5921     - * if ->release runs before mmu_notifier_unregister it
5922     - * must be handled as it's the only way for the driver
5923     - * to flush all existing sptes and stop the driver
5924     - * from establishing any more sptes before all the
5925     - * pages in the mm are freed.
5926     - */
5927     - if (mn->ops->release)
5928     - mn->ops->release(mn, mm);
5929     - srcu_read_unlock(&srcu, id);
5930     -
5931     spin_lock(&mm->mmu_notifier_mm->lock);
5932     while (unlikely(!hlist_empty(&mm->mmu_notifier_mm->list))) {
5933     mn = hlist_entry(mm->mmu_notifier_mm->list.first,
5934     struct mmu_notifier,
5935     hlist);
5936     +
5937     /*
5938     - * We arrived before mmu_notifier_unregister so
5939     - * mmu_notifier_unregister will do nothing other than
5940     - * to wait ->release to finish and
5941     - * mmu_notifier_unregister to return.
5942     + * Unlink. This will prevent mmu_notifier_unregister()
5943     + * from also making the ->release() callout.
5944     */
5945     hlist_del_init_rcu(&mn->hlist);
5946     + spin_unlock(&mm->mmu_notifier_mm->lock);
5947     +
5948     + /*
5949     + * Clear sptes. (see 'release' description in mmu_notifier.h)
5950     + */
5951     + if (mn->ops->release)
5952     + mn->ops->release(mn, mm);
5953     +
5954     + spin_lock(&mm->mmu_notifier_mm->lock);
5955     }
5956     spin_unlock(&mm->mmu_notifier_mm->lock);
5957    
5958     /*
5959     - * synchronize_srcu here prevents mmu_notifier_release to
5960     - * return to exit_mmap (which would proceed freeing all pages
5961     - * in the mm) until the ->release method returns, if it was
5962     - * invoked by mmu_notifier_unregister.
5963     - *
5964     - * The mmu_notifier_mm can't go away from under us because one
5965     - * mm_count is hold by exit_mmap.
5966     + * All callouts to ->release() which we have done are complete.
5967     + * Allow synchronize_srcu() in mmu_notifier_unregister() to complete
5968     + */
5969     + srcu_read_unlock(&srcu, id);
5970     +
5971     + /*
5972     + * mmu_notifier_unregister() may have unlinked a notifier and may
5973     + * still be calling out to it. Additionally, other notifiers
5974     + * may have been active via vmtruncate() et. al. Block here
5975     + * to ensure that all notifier callouts for this mm have been
5976     + * completed and the sptes are really cleaned up before returning
5977     + * to exit_mmap().
5978     */
5979     synchronize_srcu(&srcu);
5980     }
5981     @@ -294,31 +296,31 @@ void mmu_notifier_unregister(struct mmu_notifier *mn, struct mm_struct *mm)
5982     {
5983     BUG_ON(atomic_read(&mm->mm_count) <= 0);
5984    
5985     + spin_lock(&mm->mmu_notifier_mm->lock);
5986     if (!hlist_unhashed(&mn->hlist)) {
5987     - /*
5988     - * SRCU here will force exit_mmap to wait ->release to finish
5989     - * before freeing the pages.
5990     - */
5991     int id;
5992    
5993     - id = srcu_read_lock(&srcu);
5994     /*
5995     - * exit_mmap will block in mmu_notifier_release to
5996     - * guarantee ->release is called before freeing the
5997     - * pages.
5998     + * Ensure we synchronize up with __mmu_notifier_release().
5999     */
6000     + id = srcu_read_lock(&srcu);
6001     +
6002     + hlist_del_rcu(&mn->hlist);
6003     + spin_unlock(&mm->mmu_notifier_mm->lock);
6004     +
6005     if (mn->ops->release)
6006     mn->ops->release(mn, mm);
6007     - srcu_read_unlock(&srcu, id);
6008    
6009     - spin_lock(&mm->mmu_notifier_mm->lock);
6010     - hlist_del_rcu(&mn->hlist);
6011     + /*
6012     + * Allow __mmu_notifier_release() to complete.
6013     + */
6014     + srcu_read_unlock(&srcu, id);
6015     + } else
6016     spin_unlock(&mm->mmu_notifier_mm->lock);
6017     - }
6018    
6019     /*
6020     - * Wait any running method to finish, of course including
6021     - * ->release if it was run by mmu_notifier_relase instead of us.
6022     + * Wait for any running method to finish, including ->release() if it
6023     + * was run by __mmu_notifier_release() instead of us.
6024     */
6025     synchronize_srcu(&srcu);
6026    
6027     diff --git a/mm/shmem.c b/mm/shmem.c
6028     index 5dd56f6..efd0b3a 100644
6029     --- a/mm/shmem.c
6030     +++ b/mm/shmem.c
6031     @@ -2487,6 +2487,7 @@ static int shmem_remount_fs(struct super_block *sb, int *flags, char *data)
6032     unsigned long inodes;
6033     int error = -EINVAL;
6034    
6035     + config.mpol = NULL;
6036     if (shmem_parse_options(data, &config, true))
6037     return error;
6038    
6039     @@ -2511,8 +2512,13 @@ static int shmem_remount_fs(struct super_block *sb, int *flags, char *data)
6040     sbinfo->max_inodes = config.max_inodes;
6041     sbinfo->free_inodes = config.max_inodes - inodes;
6042    
6043     - mpol_put(sbinfo->mpol);
6044     - sbinfo->mpol = config.mpol; /* transfers initial ref */
6045     + /*
6046     + * Preserve previous mempolicy unless mpol remount option was specified.
6047     + */
6048     + if (config.mpol) {
6049     + mpol_put(sbinfo->mpol);
6050     + sbinfo->mpol = config.mpol; /* transfers initial ref */
6051     + }
6052     out:
6053     spin_unlock(&sbinfo->stat_lock);
6054     return error;
6055     diff --git a/net/core/dst.c b/net/core/dst.c
6056     index ee6153e..35fd12f 100644
6057     --- a/net/core/dst.c
6058     +++ b/net/core/dst.c
6059     @@ -179,6 +179,7 @@ void *dst_alloc(struct dst_ops *ops, struct net_device *dev,
6060     dst_init_metrics(dst, dst_default_metrics, true);
6061     dst->expires = 0UL;
6062     dst->path = dst;
6063     + dst->from = NULL;
6064     #ifdef CONFIG_XFRM
6065     dst->xfrm = NULL;
6066     #endif
6067     diff --git a/net/core/sock_diag.c b/net/core/sock_diag.c
6068     index 602cd63..750f44f 100644
6069     --- a/net/core/sock_diag.c
6070     +++ b/net/core/sock_diag.c
6071     @@ -121,6 +121,9 @@ static int __sock_diag_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
6072     if (nlmsg_len(nlh) < sizeof(*req))
6073     return -EINVAL;
6074    
6075     + if (req->sdiag_family >= AF_MAX)
6076     + return -EINVAL;
6077     +
6078     hndl = sock_diag_lock_handler(req->sdiag_family);
6079     if (hndl == NULL)
6080     err = -ENOENT;
6081     diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c
6082     index 24b384b..fcf104e 100644
6083     --- a/net/ipv4/af_inet.c
6084     +++ b/net/ipv4/af_inet.c
6085     @@ -248,8 +248,12 @@ EXPORT_SYMBOL(inet_listen);
6086     u32 inet_ehash_secret __read_mostly;
6087     EXPORT_SYMBOL(inet_ehash_secret);
6088    
6089     +u32 ipv6_hash_secret __read_mostly;
6090     +EXPORT_SYMBOL(ipv6_hash_secret);
6091     +
6092     /*
6093     - * inet_ehash_secret must be set exactly once
6094     + * inet_ehash_secret must be set exactly once, and to a non nul value
6095     + * ipv6_hash_secret must be set exactly once.
6096     */
6097     void build_ehash_secret(void)
6098     {
6099     @@ -259,7 +263,8 @@ void build_ehash_secret(void)
6100     get_random_bytes(&rnd, sizeof(rnd));
6101     } while (rnd == 0);
6102    
6103     - cmpxchg(&inet_ehash_secret, 0, rnd);
6104     + if (cmpxchg(&inet_ehash_secret, 0, rnd) == 0)
6105     + get_random_bytes(&ipv6_hash_secret, sizeof(ipv6_hash_secret));
6106     }
6107     EXPORT_SYMBOL(build_ehash_secret);
6108    
6109     @@ -1590,7 +1595,7 @@ static const struct net_offload udp_offload = {
6110    
6111     static const struct net_protocol icmp_protocol = {
6112     .handler = icmp_rcv,
6113     - .err_handler = ping_err,
6114     + .err_handler = icmp_err,
6115     .no_policy = 1,
6116     .netns_ok = 1,
6117     };
6118     diff --git a/net/ipv4/icmp.c b/net/ipv4/icmp.c
6119     index 17ff9fd..3ac5dff 100644
6120     --- a/net/ipv4/icmp.c
6121     +++ b/net/ipv4/icmp.c
6122     @@ -934,6 +934,29 @@ error:
6123     goto drop;
6124     }
6125    
6126     +void icmp_err(struct sk_buff *skb, u32 info)
6127     +{
6128     + struct iphdr *iph = (struct iphdr *)skb->data;
6129     + struct icmphdr *icmph = (struct icmphdr *)(skb->data+(iph->ihl<<2));
6130     + int type = icmp_hdr(skb)->type;
6131     + int code = icmp_hdr(skb)->code;
6132     + struct net *net = dev_net(skb->dev);
6133     +
6134     + /*
6135     + * Use ping_err to handle all icmp errors except those
6136     + * triggered by ICMP_ECHOREPLY which sent from kernel.
6137     + */
6138     + if (icmph->type != ICMP_ECHOREPLY) {
6139     + ping_err(skb, info);
6140     + return;
6141     + }
6142     +
6143     + if (type == ICMP_DEST_UNREACH && code == ICMP_FRAG_NEEDED)
6144     + ipv4_update_pmtu(skb, net, info, 0, 0, IPPROTO_ICMP, 0);
6145     + else if (type == ICMP_REDIRECT)
6146     + ipv4_redirect(skb, net, 0, 0, IPPROTO_ICMP, 0);
6147     +}
6148     +
6149     /*
6150     * This table is the definition of how we handle ICMP.
6151     */
6152     diff --git a/net/ipv4/ping.c b/net/ipv4/ping.c
6153     index 6f9c072..dc454cc 100644
6154     --- a/net/ipv4/ping.c
6155     +++ b/net/ipv4/ping.c
6156     @@ -322,8 +322,8 @@ void ping_err(struct sk_buff *skb, u32 info)
6157     struct iphdr *iph = (struct iphdr *)skb->data;
6158     struct icmphdr *icmph = (struct icmphdr *)(skb->data+(iph->ihl<<2));
6159     struct inet_sock *inet_sock;
6160     - int type = icmph->type;
6161     - int code = icmph->code;
6162     + int type = icmp_hdr(skb)->type;
6163     + int code = icmp_hdr(skb)->code;
6164     struct net *net = dev_net(skb->dev);
6165     struct sock *sk;
6166     int harderr;
6167     diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
6168     index 5d45159..ff031a5 100644
6169     --- a/net/ipv4/tcp_output.c
6170     +++ b/net/ipv4/tcp_output.c
6171     @@ -1351,8 +1351,8 @@ int tcp_trim_head(struct sock *sk, struct sk_buff *skb, u32 len)
6172     return 0;
6173     }
6174    
6175     -/* Calculate MSS. Not accounting for SACKs here. */
6176     -int tcp_mtu_to_mss(struct sock *sk, int pmtu)
6177     +/* Calculate MSS not accounting any TCP options. */
6178     +static inline int __tcp_mtu_to_mss(struct sock *sk, int pmtu)
6179     {
6180     const struct tcp_sock *tp = tcp_sk(sk);
6181     const struct inet_connection_sock *icsk = inet_csk(sk);
6182     @@ -1381,13 +1381,17 @@ int tcp_mtu_to_mss(struct sock *sk, int pmtu)
6183     /* Then reserve room for full set of TCP options and 8 bytes of data */
6184     if (mss_now < 48)
6185     mss_now = 48;
6186     -
6187     - /* Now subtract TCP options size, not including SACKs */
6188     - mss_now -= tp->tcp_header_len - sizeof(struct tcphdr);
6189     -
6190     return mss_now;
6191     }
6192    
6193     +/* Calculate MSS. Not accounting for SACKs here. */
6194     +int tcp_mtu_to_mss(struct sock *sk, int pmtu)
6195     +{
6196     + /* Subtract TCP options size, not including SACKs */
6197     + return __tcp_mtu_to_mss(sk, pmtu) -
6198     + (tcp_sk(sk)->tcp_header_len - sizeof(struct tcphdr));
6199     +}
6200     +
6201     /* Inverse of above */
6202     int tcp_mss_to_mtu(struct sock *sk, int mss)
6203     {
6204     @@ -2930,7 +2934,7 @@ static int tcp_send_syn_data(struct sock *sk, struct sk_buff *syn)
6205     */
6206     if (tp->rx_opt.user_mss && tp->rx_opt.user_mss < tp->rx_opt.mss_clamp)
6207     tp->rx_opt.mss_clamp = tp->rx_opt.user_mss;
6208     - space = tcp_mtu_to_mss(sk, inet_csk(sk)->icsk_pmtu_cookie) -
6209     + space = __tcp_mtu_to_mss(sk, inet_csk(sk)->icsk_pmtu_cookie) -
6210     MAX_TCP_OPTION_SPACE;
6211    
6212     syn_data = skb_copy_expand(syn, skb_headroom(syn), space,
6213     diff --git a/net/ipv6/route.c b/net/ipv6/route.c
6214     index 363d8b7..6f9f7b6 100644
6215     --- a/net/ipv6/route.c
6216     +++ b/net/ipv6/route.c
6217     @@ -300,6 +300,7 @@ static void ip6_dst_destroy(struct dst_entry *dst)
6218     {
6219     struct rt6_info *rt = (struct rt6_info *)dst;
6220     struct inet6_dev *idev = rt->rt6i_idev;
6221     + struct dst_entry *from = dst->from;
6222    
6223     if (rt->n)
6224     neigh_release(rt->n);
6225     @@ -312,8 +313,8 @@ static void ip6_dst_destroy(struct dst_entry *dst)
6226     in6_dev_put(idev);
6227     }
6228    
6229     - if (!(rt->rt6i_flags & RTF_EXPIRES) && dst->from)
6230     - dst_release(dst->from);
6231     + dst->from = NULL;
6232     + dst_release(from);
6233    
6234     if (rt6_has_peer(rt)) {
6235     struct inet_peer *peer = rt6_peer_ptr(rt);
6236     @@ -1054,7 +1055,6 @@ struct dst_entry *ip6_blackhole_route(struct net *net, struct dst_entry *dst_ori
6237    
6238     rt->rt6i_gateway = ort->rt6i_gateway;
6239     rt->rt6i_flags = ort->rt6i_flags;
6240     - rt6_clean_expires(rt);
6241     rt->rt6i_metric = 0;
6242    
6243     memcpy(&rt->rt6i_dst, &ort->rt6i_dst, sizeof(struct rt6key));
6244     @@ -1859,8 +1859,6 @@ static struct rt6_info *ip6_rt_copy(struct rt6_info *ort,
6245     if ((ort->rt6i_flags & (RTF_DEFAULT | RTF_ADDRCONF)) ==
6246     (RTF_DEFAULT | RTF_ADDRCONF))
6247     rt6_set_from(rt, ort);
6248     - else
6249     - rt6_clean_expires(rt);
6250     rt->rt6i_metric = 0;
6251    
6252     #ifdef CONFIG_IPV6_SUBTREES
6253     diff --git a/net/ipv6/xfrm6_policy.c b/net/ipv6/xfrm6_policy.c
6254     index c984413..8f32718 100644
6255     --- a/net/ipv6/xfrm6_policy.c
6256     +++ b/net/ipv6/xfrm6_policy.c
6257     @@ -236,6 +236,8 @@ static void xfrm6_dst_destroy(struct dst_entry *dst)
6258     {
6259     struct xfrm_dst *xdst = (struct xfrm_dst *)dst;
6260    
6261     + if (likely(xdst->u.rt6.n))
6262     + neigh_release(xdst->u.rt6.n);
6263     if (likely(xdst->u.rt6.rt6i_idev))
6264     in6_dev_put(xdst->u.rt6.rt6i_idev);
6265     dst_destroy_metrics_generic(dst);
6266     diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
6267     index 5107248..f75ba1a 100644
6268     --- a/net/mac80211/mlme.c
6269     +++ b/net/mac80211/mlme.c
6270     @@ -1812,6 +1812,8 @@ static void __ieee80211_disconnect(struct ieee80211_sub_if_data *sdata,
6271     WLAN_REASON_DISASSOC_DUE_TO_INACTIVITY,
6272     transmit_frame, frame_buf);
6273     ifmgd->flags &= ~IEEE80211_STA_CSA_RECEIVED;
6274     + ieee80211_wake_queues_by_reason(&sdata->local->hw,
6275     + IEEE80211_QUEUE_STOP_REASON_CSA);
6276     mutex_unlock(&ifmgd->mtx);
6277    
6278     /*
6279     @@ -1856,8 +1858,6 @@ static void ieee80211_csa_connection_drop_work(struct work_struct *work)
6280     container_of(work, struct ieee80211_sub_if_data,
6281     u.mgd.csa_connection_drop_work);
6282    
6283     - ieee80211_wake_queues_by_reason(&sdata->local->hw,
6284     - IEEE80211_QUEUE_STOP_REASON_CSA);
6285     __ieee80211_disconnect(sdata, true);
6286     }
6287    
6288     diff --git a/security/keys/process_keys.c b/security/keys/process_keys.c
6289     index 20e4bf5..58dfe08 100644
6290     --- a/security/keys/process_keys.c
6291     +++ b/security/keys/process_keys.c
6292     @@ -367,6 +367,8 @@ key_ref_t search_my_process_keyrings(struct key_type *type,
6293    
6294     switch (PTR_ERR(key_ref)) {
6295     case -EAGAIN: /* no key */
6296     + if (ret)
6297     + break;
6298     case -ENOKEY: /* negative key */
6299     ret = key_ref;
6300     break;
6301     diff --git a/sound/drivers/aloop.c b/sound/drivers/aloop.c
6302     index 3d82232..64d5347 100644
6303     --- a/sound/drivers/aloop.c
6304     +++ b/sound/drivers/aloop.c
6305     @@ -286,12 +286,14 @@ static int loopback_trigger(struct snd_pcm_substream *substream, int cmd)
6306     loopback_active_notify(dpcm);
6307     break;
6308     case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
6309     + case SNDRV_PCM_TRIGGER_SUSPEND:
6310     spin_lock(&cable->lock);
6311     cable->pause |= stream;
6312     loopback_timer_stop(dpcm);
6313     spin_unlock(&cable->lock);
6314     break;
6315     case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
6316     + case SNDRV_PCM_TRIGGER_RESUME:
6317     spin_lock(&cable->lock);
6318     dpcm->last_jiffies = jiffies;
6319     cable->pause &= ~stream;
6320     @@ -563,7 +565,8 @@ static snd_pcm_uframes_t loopback_pointer(struct snd_pcm_substream *substream)
6321     static struct snd_pcm_hardware loopback_pcm_hardware =
6322     {
6323     .info = (SNDRV_PCM_INFO_INTERLEAVED | SNDRV_PCM_INFO_MMAP |
6324     - SNDRV_PCM_INFO_MMAP_VALID | SNDRV_PCM_INFO_PAUSE),
6325     + SNDRV_PCM_INFO_MMAP_VALID | SNDRV_PCM_INFO_PAUSE |
6326     + SNDRV_PCM_INFO_RESUME),
6327     .formats = (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S16_BE |
6328     SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_S32_BE |
6329     SNDRV_PCM_FMTBIT_FLOAT_LE | SNDRV_PCM_FMTBIT_FLOAT_BE),
6330     diff --git a/sound/pci/ali5451/ali5451.c b/sound/pci/ali5451/ali5451.c
6331     index 136a393..e760af9 100644
6332     --- a/sound/pci/ali5451/ali5451.c
6333     +++ b/sound/pci/ali5451/ali5451.c
6334     @@ -1435,7 +1435,7 @@ static snd_pcm_uframes_t snd_ali_pointer(struct snd_pcm_substream *substream)
6335    
6336     spin_lock(&codec->reg_lock);
6337     if (!pvoice->running) {
6338     - spin_unlock_irq(&codec->reg_lock);
6339     + spin_unlock(&codec->reg_lock);
6340     return 0;
6341     }
6342     outb(pvoice->number, ALI_REG(codec, ALI_GC_CIR));
6343     diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
6344     index 822df97..713e9af 100644
6345     --- a/sound/pci/hda/hda_codec.c
6346     +++ b/sound/pci/hda/hda_codec.c
6347     @@ -2160,11 +2160,12 @@ struct snd_kcontrol *snd_hda_find_mixer_ctl(struct hda_codec *codec,
6348     EXPORT_SYMBOL_HDA(snd_hda_find_mixer_ctl);
6349    
6350     static int find_empty_mixer_ctl_idx(struct hda_codec *codec, const char *name,
6351     - int dev)
6352     + int start_idx)
6353     {
6354     - int idx;
6355     - for (idx = 0; idx < 16; idx++) { /* 16 ctlrs should be large enough */
6356     - if (!find_mixer_ctl(codec, name, dev, idx))
6357     + int i, idx;
6358     + /* 16 ctlrs should be large enough */
6359     + for (i = 0, idx = start_idx; i < 16; i++, idx++) {
6360     + if (!find_mixer_ctl(codec, name, 0, idx))
6361     return idx;
6362     }
6363     return -EBUSY;
6364     @@ -3132,30 +3133,29 @@ int snd_hda_create_dig_out_ctls(struct hda_codec *codec,
6365     int err;
6366     struct snd_kcontrol *kctl;
6367     struct snd_kcontrol_new *dig_mix;
6368     - int idx, dev = 0;
6369     - const int spdif_pcm_dev = 1;
6370     + int idx = 0;
6371     + const int spdif_index = 16;
6372     struct hda_spdif_out *spdif;
6373     + struct hda_bus *bus = codec->bus;
6374    
6375     - if (codec->primary_dig_out_type == HDA_PCM_TYPE_HDMI &&
6376     + if (bus->primary_dig_out_type == HDA_PCM_TYPE_HDMI &&
6377     type == HDA_PCM_TYPE_SPDIF) {
6378     - dev = spdif_pcm_dev;
6379     - } else if (codec->primary_dig_out_type == HDA_PCM_TYPE_SPDIF &&
6380     + idx = spdif_index;
6381     + } else if (bus->primary_dig_out_type == HDA_PCM_TYPE_SPDIF &&
6382     type == HDA_PCM_TYPE_HDMI) {
6383     - for (idx = 0; idx < codec->spdif_out.used; idx++) {
6384     - spdif = snd_array_elem(&codec->spdif_out, idx);
6385     - for (dig_mix = dig_mixes; dig_mix->name; dig_mix++) {
6386     - kctl = find_mixer_ctl(codec, dig_mix->name, 0, idx);
6387     - if (!kctl)
6388     - break;
6389     - kctl->id.device = spdif_pcm_dev;
6390     - }
6391     + /* suppose a single SPDIF device */
6392     + for (dig_mix = dig_mixes; dig_mix->name; dig_mix++) {
6393     + kctl = find_mixer_ctl(codec, dig_mix->name, 0, 0);
6394     + if (!kctl)
6395     + break;
6396     + kctl->id.index = spdif_index;
6397     }
6398     - codec->primary_dig_out_type = HDA_PCM_TYPE_HDMI;
6399     + bus->primary_dig_out_type = HDA_PCM_TYPE_HDMI;
6400     }
6401     - if (!codec->primary_dig_out_type)
6402     - codec->primary_dig_out_type = type;
6403     + if (!bus->primary_dig_out_type)
6404     + bus->primary_dig_out_type = type;
6405    
6406     - idx = find_empty_mixer_ctl_idx(codec, "IEC958 Playback Switch", dev);
6407     + idx = find_empty_mixer_ctl_idx(codec, "IEC958 Playback Switch", idx);
6408     if (idx < 0) {
6409     printk(KERN_ERR "hda_codec: too many IEC958 outputs\n");
6410     return -EBUSY;
6411     @@ -3165,7 +3165,6 @@ int snd_hda_create_dig_out_ctls(struct hda_codec *codec,
6412     kctl = snd_ctl_new1(dig_mix, codec);
6413     if (!kctl)
6414     return -ENOMEM;
6415     - kctl->id.device = dev;
6416     kctl->id.index = idx;
6417     kctl->private_value = codec->spdif_out.used - 1;
6418     err = snd_hda_ctl_add(codec, associated_nid, kctl);
6419     diff --git a/sound/pci/hda/hda_codec.h b/sound/pci/hda/hda_codec.h
6420     index 8665540..a35cf09 100644
6421     --- a/sound/pci/hda/hda_codec.h
6422     +++ b/sound/pci/hda/hda_codec.h
6423     @@ -671,6 +671,8 @@ struct hda_bus {
6424     unsigned int response_reset:1; /* controller was reset */
6425     unsigned int in_reset:1; /* during reset operation */
6426     unsigned int power_keep_link_on:1; /* don't power off HDA link */
6427     +
6428     + int primary_dig_out_type; /* primary digital out PCM type */
6429     };
6430    
6431     /*
6432     @@ -837,7 +839,6 @@ struct hda_codec {
6433     struct mutex hash_mutex;
6434     struct snd_array spdif_out;
6435     unsigned int spdif_in_enable; /* SPDIF input enable? */
6436     - int primary_dig_out_type; /* primary digital out PCM type */
6437     const hda_nid_t *slave_dig_outs; /* optional digital out slave widgets */
6438     struct snd_array init_pins; /* initial (BIOS) pin configurations */
6439     struct snd_array driver_pins; /* pin configs set by codec parser */
6440     diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
6441     index c78286f..63607da 100644
6442     --- a/sound/pci/hda/hda_intel.c
6443     +++ b/sound/pci/hda/hda_intel.c
6444     @@ -3624,7 +3624,7 @@ static DEFINE_PCI_DEVICE_TABLE(azx_ids) = {
6445     .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH },
6446     /* 5 Series/3400 */
6447     { PCI_DEVICE(0x8086, 0x3b56),
6448     - .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH },
6449     + .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_NOPM },
6450     /* Poulsbo */
6451     { PCI_DEVICE(0x8086, 0x811b),
6452     .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_NOPM },
6453     diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
6454     index 807a2aa..b14813d 100644
6455     --- a/sound/pci/hda/patch_hdmi.c
6456     +++ b/sound/pci/hda/patch_hdmi.c
6457     @@ -714,9 +714,10 @@ static void hdmi_setup_fake_chmap(unsigned char *map, int ca)
6458    
6459     static void hdmi_setup_channel_mapping(struct hda_codec *codec,
6460     hda_nid_t pin_nid, bool non_pcm, int ca,
6461     - int channels, unsigned char *map)
6462     + int channels, unsigned char *map,
6463     + bool chmap_set)
6464     {
6465     - if (!non_pcm && map) {
6466     + if (!non_pcm && chmap_set) {
6467     hdmi_manual_setup_channel_mapping(codec, pin_nid,
6468     channels, map);
6469     } else {
6470     @@ -905,7 +906,8 @@ static void hdmi_setup_audio_infoframe(struct hda_codec *codec, int pin_idx,
6471     pin_nid,
6472     channels);
6473     hdmi_setup_channel_mapping(codec, pin_nid, non_pcm, ca,
6474     - channels, per_pin->chmap);
6475     + channels, per_pin->chmap,
6476     + per_pin->chmap_set);
6477     hdmi_stop_infoframe_trans(codec, pin_nid);
6478     hdmi_fill_audio_infoframe(codec, pin_nid,
6479     ai.bytes, sizeof(ai));
6480     @@ -915,7 +917,8 @@ static void hdmi_setup_audio_infoframe(struct hda_codec *codec, int pin_idx,
6481     * accordingly */
6482     if (per_pin->non_pcm != non_pcm)
6483     hdmi_setup_channel_mapping(codec, pin_nid, non_pcm, ca,
6484     - channels, per_pin->chmap);
6485     + channels, per_pin->chmap,
6486     + per_pin->chmap_set);
6487     }
6488    
6489     per_pin->non_pcm = non_pcm;
6490     @@ -1100,8 +1103,12 @@ static int hdmi_pcm_open(struct hda_pcm_stream *hinfo,
6491     if (!static_hdmi_pcm && eld->eld_valid) {
6492     snd_hdmi_eld_update_pcm_info(eld, hinfo);
6493     if (hinfo->channels_min > hinfo->channels_max ||
6494     - !hinfo->rates || !hinfo->formats)
6495     + !hinfo->rates || !hinfo->formats) {
6496     + per_cvt->assigned = 0;
6497     + hinfo->nid = 0;
6498     + snd_hda_spdif_ctls_unassign(codec, pin_idx);
6499     return -ENODEV;
6500     + }
6501     }
6502    
6503     /* Store the updated parameters */
6504     @@ -1165,6 +1172,7 @@ static void hdmi_present_sense(struct hdmi_spec_per_pin *per_pin, int repoll)
6505     "HDMI status: Codec=%d Pin=%d Presence_Detect=%d ELD_Valid=%d\n",
6506     codec->addr, pin_nid, eld->monitor_present, eld_valid);
6507    
6508     + eld->eld_valid = false;
6509     if (eld_valid) {
6510     if (!snd_hdmi_get_eld(eld, codec, pin_nid))
6511     snd_hdmi_show_eld(eld);
6512     diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
6513     index 5faaad2..47fb18d 100644
6514     --- a/sound/pci/hda/patch_realtek.c
6515     +++ b/sound/pci/hda/patch_realtek.c
6516     @@ -5394,6 +5394,7 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = {
6517     SND_PCI_QUIRK(0x1043, 0x835f, "Asus Eee 1601", ALC888_FIXUP_EEE1601),
6518     SND_PCI_QUIRK(0x104d, 0x9047, "Sony Vaio TT", ALC889_FIXUP_VAIO_TT),
6519     SND_PCI_QUIRK(0x104d, 0x905a, "Sony Vaio Z", ALC882_FIXUP_NO_PRIMARY_HP),
6520     + SND_PCI_QUIRK(0x104d, 0x9043, "Sony Vaio VGC-LN51JGB", ALC882_FIXUP_NO_PRIMARY_HP),
6521    
6522     /* All Apple entries are in codec SSIDs */
6523     SND_PCI_QUIRK(0x106b, 0x00a0, "MacBookPro 3,1", ALC889_FIXUP_MBP_VREF),
6524     diff --git a/sound/pci/rme32.c b/sound/pci/rme32.c
6525     index 2450663..0ecd410 100644
6526     --- a/sound/pci/rme32.c
6527     +++ b/sound/pci/rme32.c
6528     @@ -1017,7 +1017,7 @@ static int snd_rme32_capture_close(struct snd_pcm_substream *substream)
6529     spin_lock_irq(&rme32->lock);
6530     rme32->capture_substream = NULL;
6531     rme32->capture_periodsize = 0;
6532     - spin_unlock(&rme32->lock);
6533     + spin_unlock_irq(&rme32->lock);
6534     return 0;
6535     }
6536    
6537     diff --git a/sound/soc/codecs/arizona.c b/sound/soc/codecs/arizona.c
6538     index ef62c43..2899cb9 100644
6539     --- a/sound/soc/codecs/arizona.c
6540     +++ b/sound/soc/codecs/arizona.c
6541     @@ -910,7 +910,7 @@ static int arizona_calc_fll(struct arizona_fll *fll,
6542    
6543     cfg->n = target / (ratio * Fref);
6544    
6545     - if (target % Fref) {
6546     + if (target % (ratio * Fref)) {
6547     gcd_fll = gcd(target, ratio * Fref);
6548     arizona_fll_dbg(fll, "GCD=%u\n", gcd_fll);
6549    
6550     @@ -922,6 +922,15 @@ static int arizona_calc_fll(struct arizona_fll *fll,
6551     cfg->lambda = 0;
6552     }
6553    
6554     + /* Round down to 16bit range with cost of accuracy lost.
6555     + * Denominator must be bigger than numerator so we only
6556     + * take care of it.
6557     + */
6558     + while (cfg->lambda >= (1 << 16)) {
6559     + cfg->theta >>= 1;
6560     + cfg->lambda >>= 1;
6561     + }
6562     +
6563     arizona_fll_dbg(fll, "N=%x THETA=%x LAMBDA=%x\n",
6564     cfg->n, cfg->theta, cfg->lambda);
6565     arizona_fll_dbg(fll, "FRATIO=%x(%d) OUTDIV=%x REFCLK_DIV=%x\n",
6566     diff --git a/sound/soc/codecs/wm2200.c b/sound/soc/codecs/wm2200.c
6567     index d8c65f5..d5371e0 100644
6568     --- a/sound/soc/codecs/wm2200.c
6569     +++ b/sound/soc/codecs/wm2200.c
6570     @@ -1126,9 +1126,9 @@ SOC_DOUBLE_R_TLV("IN3 Volume", WM2200_IN3L_CONTROL, WM2200_IN3R_CONTROL,
6571    
6572     SOC_DOUBLE_R("IN1 Digital Switch", WM2200_ADC_DIGITAL_VOLUME_1L,
6573     WM2200_ADC_DIGITAL_VOLUME_1R, WM2200_IN1L_MUTE_SHIFT, 1, 1),
6574     -SOC_DOUBLE_R("IN2 Digital Switch", WM2200_ADC_DIGITAL_VOLUME_1L,
6575     +SOC_DOUBLE_R("IN2 Digital Switch", WM2200_ADC_DIGITAL_VOLUME_2L,
6576     WM2200_ADC_DIGITAL_VOLUME_2R, WM2200_IN2L_MUTE_SHIFT, 1, 1),
6577     -SOC_DOUBLE_R("IN3 Digital Switch", WM2200_ADC_DIGITAL_VOLUME_1L,
6578     +SOC_DOUBLE_R("IN3 Digital Switch", WM2200_ADC_DIGITAL_VOLUME_3L,
6579     WM2200_ADC_DIGITAL_VOLUME_3R, WM2200_IN3L_MUTE_SHIFT, 1, 1),
6580    
6581     SOC_DOUBLE_R_TLV("IN1 Digital Volume", WM2200_ADC_DIGITAL_VOLUME_1L,
6582     diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h
6583     index 64d25a7..820580a 100644
6584     --- a/sound/usb/quirks-table.h
6585     +++ b/sound/usb/quirks-table.h
6586     @@ -1750,7 +1750,7 @@ YAMAHA_DEVICE(0x7010, "UB99"),
6587     .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
6588     /* .vendor_name = "Roland", */
6589     /* .product_name = "A-PRO", */
6590     - .ifnum = 1,
6591     + .ifnum = 0,
6592     .type = QUIRK_MIDI_FIXED_ENDPOINT,
6593     .data = & (const struct snd_usb_midi_endpoint_info) {
6594     .out_cables = 0x0003,
6595     diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
6596     index 2c97185..0115289 100644
6597     --- a/sound/usb/quirks.c
6598     +++ b/sound/usb/quirks.c
6599     @@ -533,7 +533,7 @@ static int snd_usb_mbox2_boot_quirk(struct usb_device *dev)
6600     {
6601     struct usb_host_config *config = dev->actconfig;
6602     int err;
6603     - u8 bootresponse[12];
6604     + u8 bootresponse[0x12];
6605     int fwsize;
6606     int count;
6607    
6608     diff --git a/tools/perf/Makefile b/tools/perf/Makefile
6609     index 8ab05e5..fb1b1c4 100644
6610     --- a/tools/perf/Makefile
6611     +++ b/tools/perf/Makefile
6612     @@ -276,13 +276,13 @@ $(OUTPUT)util/parse-events-flex.c: util/parse-events.l $(OUTPUT)util/parse-event
6613     $(QUIET_FLEX)$(FLEX) --header-file=$(OUTPUT)util/parse-events-flex.h $(PARSER_DEBUG_FLEX) -t util/parse-events.l > $(OUTPUT)util/parse-events-flex.c
6614    
6615     $(OUTPUT)util/parse-events-bison.c: util/parse-events.y
6616     - $(QUIET_BISON)$(BISON) -v util/parse-events.y -d $(PARSER_DEBUG_BISON) -o $(OUTPUT)util/parse-events-bison.c
6617     + $(QUIET_BISON)$(BISON) -v util/parse-events.y -d $(PARSER_DEBUG_BISON) -o $(OUTPUT)util/parse-events-bison.c -p parse_events_
6618    
6619     $(OUTPUT)util/pmu-flex.c: util/pmu.l $(OUTPUT)util/pmu-bison.c
6620     $(QUIET_FLEX)$(FLEX) --header-file=$(OUTPUT)util/pmu-flex.h -t util/pmu.l > $(OUTPUT)util/pmu-flex.c
6621    
6622     $(OUTPUT)util/pmu-bison.c: util/pmu.y
6623     - $(QUIET_BISON)$(BISON) -v util/pmu.y -d -o $(OUTPUT)util/pmu-bison.c
6624     + $(QUIET_BISON)$(BISON) -v util/pmu.y -d -o $(OUTPUT)util/pmu-bison.c -p perf_pmu_
6625    
6626     $(OUTPUT)util/parse-events.o: $(OUTPUT)util/parse-events-flex.c $(OUTPUT)util/parse-events-bison.c
6627     $(OUTPUT)util/pmu.o: $(OUTPUT)util/pmu-flex.c $(OUTPUT)util/pmu-bison.c
6628     diff --git a/tools/perf/ui/hist.c b/tools/perf/ui/hist.c
6629     index aa84130..6416580 100644
6630     --- a/tools/perf/ui/hist.c
6631     +++ b/tools/perf/ui/hist.c
6632     @@ -463,11 +463,15 @@ int hist_entry__period_snprintf(struct perf_hpp *hpp, struct hist_entry *he,
6633     if (!perf_hpp__format[i].cond)
6634     continue;
6635    
6636     + /*
6637     + * If there's no field_sep, we still need
6638     + * to display initial ' '.
6639     + */
6640     if (!sep || !first) {
6641     ret = scnprintf(hpp->buf, hpp->size, "%s", sep ?: " ");
6642     advance_hpp(hpp, ret);
6643     + } else
6644     first = false;
6645     - }
6646    
6647     if (color && perf_hpp__format[i].color)
6648     ret = perf_hpp__format[i].color(hpp, he);
6649     diff --git a/tools/perf/util/parse-events.y b/tools/perf/util/parse-events.y
6650     index 0f9914a..7bf890e 100644
6651     --- a/tools/perf/util/parse-events.y
6652     +++ b/tools/perf/util/parse-events.y
6653     @@ -1,5 +1,4 @@
6654     %pure-parser
6655     -%name-prefix "parse_events_"
6656     %parse-param {void *_data}
6657     %parse-param {void *scanner}
6658     %lex-param {void* scanner}
6659     diff --git a/tools/perf/util/pmu.y b/tools/perf/util/pmu.y
6660     index ec89804..bfd7e85 100644
6661     --- a/tools/perf/util/pmu.y
6662     +++ b/tools/perf/util/pmu.y
6663     @@ -1,5 +1,4 @@
6664    
6665     -%name-prefix "perf_pmu_"
6666     %parse-param {struct list_head *format}
6667     %parse-param {char *name}
6668