Magellan Linux

Annotation of /trunk/kernel-alx/patches-3.18/0117-3.18.18-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2618 - (hide annotations) (download)
Mon Jul 13 08:29:10 2015 UTC (8 years, 10 months ago) by niro
File size: 249176 byte(s)
-linux-3.18.18
1 niro 2618 diff --git a/Documentation/devicetree/bindings/net/marvell-armada-370-neta.txt b/Documentation/devicetree/bindings/net/marvell-armada-370-neta.txt
2     index 750d577e8083..f5a8ca29aff0 100644
3     --- a/Documentation/devicetree/bindings/net/marvell-armada-370-neta.txt
4     +++ b/Documentation/devicetree/bindings/net/marvell-armada-370-neta.txt
5     @@ -1,7 +1,7 @@
6     * Marvell Armada 370 / Armada XP Ethernet Controller (NETA)
7    
8     Required properties:
9     -- compatible: should be "marvell,armada-370-neta".
10     +- compatible: "marvell,armada-370-neta" or "marvell,armada-xp-neta".
11     - reg: address and length of the register set for the device.
12     - interrupts: interrupt for the device
13     - phy: See ethernet.txt file in the same directory.
14     diff --git a/Documentation/devicetree/bindings/pinctrl/marvell,armada-370-pinctrl.txt b/Documentation/devicetree/bindings/pinctrl/marvell,armada-370-pinctrl.txt
15     index adda2a8d1d52..e357b020861d 100644
16     --- a/Documentation/devicetree/bindings/pinctrl/marvell,armada-370-pinctrl.txt
17     +++ b/Documentation/devicetree/bindings/pinctrl/marvell,armada-370-pinctrl.txt
18     @@ -92,5 +92,5 @@ mpp61 61 gpo, dev(wen1), uart1(txd), audio(rclk)
19     mpp62 62 gpio, dev(a2), uart1(cts), tdm(drx), pcie(clkreq0),
20     audio(mclk), uart0(cts)
21     mpp63 63 gpo, spi0(sck), tclk
22     -mpp64 64 gpio, spi0(miso), spi0-1(cs1)
23     -mpp65 65 gpio, spi0(mosi), spi0-1(cs2)
24     +mpp64 64 gpio, spi0(miso), spi0(cs1)
25     +mpp65 65 gpio, spi0(mosi), spi0(cs2)
26     diff --git a/Documentation/devicetree/bindings/pinctrl/marvell,armada-375-pinctrl.txt b/Documentation/devicetree/bindings/pinctrl/marvell,armada-375-pinctrl.txt
27     index 7de0cda4a379..bedbe42c8c0a 100644
28     --- a/Documentation/devicetree/bindings/pinctrl/marvell,armada-375-pinctrl.txt
29     +++ b/Documentation/devicetree/bindings/pinctrl/marvell,armada-375-pinctrl.txt
30     @@ -22,8 +22,8 @@ mpp5 5 gpio, dev(ad7), spi0(cs2), spi1(cs2)
31     mpp6 6 gpio, dev(ad0), led(p1), audio(rclk)
32     mpp7 7 gpio, dev(ad1), ptp(clk), led(p2), audio(extclk)
33     mpp8 8 gpio, dev (bootcs), spi0(cs0), spi1(cs0)
34     -mpp9 9 gpio, nf(wen), spi0(sck), spi1(sck)
35     -mpp10 10 gpio, nf(ren), dram(vttctrl), led(c1)
36     +mpp9 9 gpio, spi0(sck), spi1(sck), nand(we)
37     +mpp10 10 gpio, dram(vttctrl), led(c1), nand(re)
38     mpp11 11 gpio, dev(a0), led(c2), audio(sdo)
39     mpp12 12 gpio, dev(a1), audio(bclk)
40     mpp13 13 gpio, dev(readyn), pcie0(rstoutn), pcie1(rstoutn)
41     diff --git a/Documentation/devicetree/bindings/pinctrl/marvell,armada-38x-pinctrl.txt b/Documentation/devicetree/bindings/pinctrl/marvell,armada-38x-pinctrl.txt
42     index b17c96849fc9..4ac138aaaf87 100644
43     --- a/Documentation/devicetree/bindings/pinctrl/marvell,armada-38x-pinctrl.txt
44     +++ b/Documentation/devicetree/bindings/pinctrl/marvell,armada-38x-pinctrl.txt
45     @@ -27,15 +27,15 @@ mpp8 8 gpio, ge0(txd1), dev(ad10)
46     mpp9 9 gpio, ge0(txd2), dev(ad11)
47     mpp10 10 gpio, ge0(txd3), dev(ad12)
48     mpp11 11 gpio, ge0(txctl), dev(ad13)
49     -mpp12 12 gpio, ge0(rxd0), pcie0(rstout), pcie1(rstout) [1], spi0(cs1), dev(ad14)
50     -mpp13 13 gpio, ge0(rxd1), pcie0(clkreq), pcie1(clkreq) [1], spi0(cs2), dev(ad15)
51     -mpp14 14 gpio, ge0(rxd2), ptp(clk), m(vtt_ctrl), spi0(cs3), dev(wen1)
52     -mpp15 15 gpio, ge0(rxd3), ge(mdc slave), pcie0(rstout), spi0(mosi), pcie1(rstout) [1]
53     -mpp16 16 gpio, ge0(rxctl), ge(mdio slave), m(decc_err), spi0(miso), pcie0(clkreq)
54     +mpp12 12 gpio, ge0(rxd0), pcie0(rstout), spi0(cs1), dev(ad14), pcie3(clkreq)
55     +mpp13 13 gpio, ge0(rxd1), pcie0(clkreq), pcie1(clkreq) [1], spi0(cs2), dev(ad15), pcie2(clkreq)
56     +mpp14 14 gpio, ge0(rxd2), ptp(clk), m(vtt_ctrl), spi0(cs3), dev(wen1), pcie3(clkreq)
57     +mpp15 15 gpio, ge0(rxd3), ge(mdc slave), pcie0(rstout), spi0(mosi)
58     +mpp16 16 gpio, ge0(rxctl), ge(mdio slave), m(decc_err), spi0(miso), pcie0(clkreq), pcie1(clkreq) [1]
59     mpp17 17 gpio, ge0(rxclk), ptp(clk), ua1(rxd), spi0(sck), sata1(prsnt)
60     -mpp18 18 gpio, ge0(rxerr), ptp(trig_gen), ua1(txd), spi0(cs0), pcie1(rstout) [1]
61     -mpp19 19 gpio, ge0(col), ptp(event_req), pcie0(clkreq), sata1(prsnt), ua0(cts)
62     -mpp20 20 gpio, ge0(txclk), ptp(clk), pcie1(rstout) [1], sata0(prsnt), ua0(rts)
63     +mpp18 18 gpio, ge0(rxerr), ptp(trig_gen), ua1(txd), spi0(cs0)
64     +mpp19 19 gpio, ge0(col), ptp(event_req), ge0(txerr), sata1(prsnt), ua0(cts)
65     +mpp20 20 gpio, ge0(txclk), ptp(clk), sata0(prsnt), ua0(rts)
66     mpp21 21 gpio, spi0(cs1), ge1(rxd0), sata0(prsnt), sd0(cmd), dev(bootcs)
67     mpp22 22 gpio, spi0(mosi), dev(ad0)
68     mpp23 23 gpio, spi0(sck), dev(ad2)
69     @@ -58,23 +58,23 @@ mpp39 39 gpio, i2c1(sck), ge1(rxd2), ua0(cts), sd0(d1), dev(a2)
70     mpp40 40 gpio, i2c1(sda), ge1(rxd3), ua0(rts), sd0(d2), dev(ad6)
71     mpp41 41 gpio, ua1(rxd), ge1(rxctl), ua0(cts), spi1(cs3), dev(burst/last)
72     mpp42 42 gpio, ua1(txd), ua0(rts), dev(ad7)
73     -mpp43 43 gpio, pcie0(clkreq), m(vtt_ctrl), m(decc_err), pcie0(rstout), dev(clkout)
74     -mpp44 44 gpio, sata0(prsnt), sata1(prsnt), sata2(prsnt) [2], sata3(prsnt) [3], pcie0(rstout)
75     -mpp45 45 gpio, ref(clk_out0), pcie0(rstout), pcie1(rstout) [1], pcie2(rstout), pcie3(rstout)
76     -mpp46 46 gpio, ref(clk_out1), pcie0(rstout), pcie1(rstout) [1], pcie2(rstout), pcie3(rstout)
77     -mpp47 47 gpio, sata0(prsnt), sata1(prsnt), sata2(prsnt) [2], spi1(cs2), sata3(prsnt) [2]
78     -mpp48 48 gpio, sata0(prsnt), m(vtt_ctrl), tdm2c(pclk), audio(mclk), sd0(d4)
79     -mpp49 49 gpio, sata2(prsnt) [2], sata3(prsnt) [2], tdm2c(fsync), audio(lrclk), sd0(d5)
80     -mpp50 50 gpio, pcie0(rstout), pcie1(rstout) [1], tdm2c(drx), audio(extclk), sd0(cmd)
81     +mpp43 43 gpio, pcie0(clkreq), m(vtt_ctrl), m(decc_err), spi1(cs2), dev(clkout)
82     +mpp44 44 gpio, sata0(prsnt), sata1(prsnt), sata2(prsnt) [2], sata3(prsnt) [3]
83     +mpp45 45 gpio, ref(clk_out0), pcie0(rstout)
84     +mpp46 46 gpio, ref(clk_out1), pcie0(rstout)
85     +mpp47 47 gpio, sata0(prsnt), sata1(prsnt), sata2(prsnt) [2], sata3(prsnt) [2]
86     +mpp48 48 gpio, sata0(prsnt), m(vtt_ctrl), tdm2c(pclk), audio(mclk), sd0(d4), pcie0(clkreq)
87     +mpp49 49 gpio, sata2(prsnt) [2], sata3(prsnt) [2], tdm2c(fsync), audio(lrclk), sd0(d5), pcie1(clkreq)
88     +mpp50 50 gpio, pcie0(rstout), tdm2c(drx), audio(extclk), sd0(cmd)
89     mpp51 51 gpio, tdm2c(dtx), audio(sdo), m(decc_err)
90     -mpp52 52 gpio, pcie0(rstout), pcie1(rstout) [1], tdm2c(intn), audio(sdi), sd0(d6)
91     +mpp52 52 gpio, pcie0(rstout), tdm2c(intn), audio(sdi), sd0(d6)
92     mpp53 53 gpio, sata1(prsnt), sata0(prsnt), tdm2c(rstn), audio(bclk), sd0(d7)
93     -mpp54 54 gpio, sata0(prsnt), sata1(prsnt), pcie0(rstout), pcie1(rstout) [1], sd0(d3)
94     +mpp54 54 gpio, sata0(prsnt), sata1(prsnt), pcie0(rstout), ge0(txerr), sd0(d3)
95     mpp55 55 gpio, ua1(cts), ge(mdio), pcie1(clkreq) [1], spi1(cs1), sd0(d0)
96     mpp56 56 gpio, ua1(rts), ge(mdc), m(decc_err), spi1(mosi)
97     mpp57 57 gpio, spi1(sck), sd0(clk)
98     mpp58 58 gpio, pcie1(clkreq) [1], i2c1(sck), pcie2(clkreq), spi1(miso), sd0(d1)
99     -mpp59 59 gpio, pcie0(rstout), i2c1(sda), pcie1(rstout) [1], spi1(cs0), sd0(d2)
100     +mpp59 59 gpio, pcie0(rstout), i2c1(sda), spi1(cs0), sd0(d2)
101    
102     [1]: only available on 88F6820 and 88F6828
103     [2]: only available on 88F6828
104     diff --git a/Documentation/devicetree/bindings/pinctrl/marvell,armada-xp-pinctrl.txt b/Documentation/devicetree/bindings/pinctrl/marvell,armada-xp-pinctrl.txt
105     index 373dbccd7ab0..96e7744cab84 100644
106     --- a/Documentation/devicetree/bindings/pinctrl/marvell,armada-xp-pinctrl.txt
107     +++ b/Documentation/devicetree/bindings/pinctrl/marvell,armada-xp-pinctrl.txt
108     @@ -42,15 +42,15 @@ mpp20 20 gpio, ge0(rxd4), ge1(rxd2), lcd(d20), ptp(clk)
109     mpp21 21 gpio, ge0(rxd5), ge1(rxd3), lcd(d21), mem(bat)
110     mpp22 22 gpio, ge0(rxd6), ge1(rxctl), lcd(d22), sata0(prsnt)
111     mpp23 23 gpio, ge0(rxd7), ge1(rxclk), lcd(d23), sata1(prsnt)
112     -mpp24 24 gpio, lcd(hsync), sata1(prsnt), nf(bootcs-re), tdm(rst)
113     -mpp25 25 gpio, lcd(vsync), sata0(prsnt), nf(bootcs-we), tdm(pclk)
114     -mpp26 26 gpio, lcd(clk), tdm(fsync), vdd(cpu1-pd)
115     +mpp24 24 gpio, lcd(hsync), sata1(prsnt), tdm(rst)
116     +mpp25 25 gpio, lcd(vsync), sata0(prsnt), tdm(pclk)
117     +mpp26 26 gpio, lcd(clk), tdm(fsync)
118     mpp27 27 gpio, lcd(e), tdm(dtx), ptp(trig)
119     mpp28 28 gpio, lcd(pwm), tdm(drx), ptp(evreq)
120     -mpp29 29 gpio, lcd(ref-clk), tdm(int0), ptp(clk), vdd(cpu0-pd)
121     +mpp29 29 gpio, lcd(ref-clk), tdm(int0), ptp(clk)
122     mpp30 30 gpio, tdm(int1), sd0(clk)
123     -mpp31 31 gpio, tdm(int2), sd0(cmd), vdd(cpu0-pd)
124     -mpp32 32 gpio, tdm(int3), sd0(d0), vdd(cpu1-pd)
125     +mpp31 31 gpio, tdm(int2), sd0(cmd)
126     +mpp32 32 gpio, tdm(int3), sd0(d0)
127     mpp33 33 gpio, tdm(int4), sd0(d1), mem(bat)
128     mpp34 34 gpio, tdm(int5), sd0(d2), sata0(prsnt)
129     mpp35 35 gpio, tdm(int6), sd0(d3), sata1(prsnt)
130     @@ -58,21 +58,18 @@ mpp36 36 gpio, spi(mosi)
131     mpp37 37 gpio, spi(miso)
132     mpp38 38 gpio, spi(sck)
133     mpp39 39 gpio, spi(cs0)
134     -mpp40 40 gpio, spi(cs1), uart2(cts), lcd(vga-hsync), vdd(cpu1-pd),
135     - pcie(clkreq0)
136     +mpp40 40 gpio, spi(cs1), uart2(cts), lcd(vga-hsync), pcie(clkreq0)
137     mpp41 41 gpio, spi(cs2), uart2(rts), lcd(vga-vsync), sata1(prsnt),
138     pcie(clkreq1)
139     -mpp42 42 gpio, uart2(rxd), uart0(cts), tdm(int7), tdm-1(timer),
140     - vdd(cpu0-pd)
141     -mpp43 43 gpio, uart2(txd), uart0(rts), spi(cs3), pcie(rstout),
142     - vdd(cpu2-3-pd){1}
143     +mpp42 42 gpio, uart2(rxd), uart0(cts), tdm(int7), tdm-1(timer)
144     +mpp43 43 gpio, uart2(txd), uart0(rts), spi(cs3), pcie(rstout)
145     mpp44 44 gpio, uart2(cts), uart3(rxd), spi(cs4), pcie(clkreq2),
146     mem(bat)
147     mpp45 45 gpio, uart2(rts), uart3(txd), spi(cs5), sata1(prsnt)
148     mpp46 46 gpio, uart3(rts), uart1(rts), spi(cs6), sata0(prsnt)
149     mpp47 47 gpio, uart3(cts), uart1(cts), spi(cs7), pcie(clkreq3),
150     ref(clkout)
151     -mpp48 48 gpio, tclk, dev(burst/last)
152     +mpp48 48 gpio, dev(clkout), dev(burst/last)
153    
154     * Marvell Armada XP (mv78260 and mv78460 only)
155    
156     @@ -84,9 +81,9 @@ mpp51 51 gpio, dev(ad16)
157     mpp52 52 gpio, dev(ad17)
158     mpp53 53 gpio, dev(ad18)
159     mpp54 54 gpio, dev(ad19)
160     -mpp55 55 gpio, dev(ad20), vdd(cpu0-pd)
161     -mpp56 56 gpio, dev(ad21), vdd(cpu1-pd)
162     -mpp57 57 gpio, dev(ad22), vdd(cpu2-3-pd){1}
163     +mpp55 55 gpio, dev(ad20)
164     +mpp56 56 gpio, dev(ad21)
165     +mpp57 57 gpio, dev(ad22)
166     mpp58 58 gpio, dev(ad23)
167     mpp59 59 gpio, dev(ad24)
168     mpp60 60 gpio, dev(ad25)
169     @@ -96,6 +93,3 @@ mpp63 63 gpio, dev(ad28)
170     mpp64 64 gpio, dev(ad29)
171     mpp65 65 gpio, dev(ad30)
172     mpp66 66 gpio, dev(ad31)
173     -
174     -Notes:
175     -* {1} vdd(cpu2-3-pd) only available on mv78460.
176     diff --git a/Documentation/stable_kernel_rules.txt b/Documentation/stable_kernel_rules.txt
177     index 58d0ac4df946..3049a612291b 100644
178     --- a/Documentation/stable_kernel_rules.txt
179     +++ b/Documentation/stable_kernel_rules.txt
180     @@ -59,11 +59,20 @@ For all other submissions, choose one of the following procedures:
181     changelog of your submission, as well as the kernel version you wish
182     it to be applied to.
183    
184     -Option 1 is probably the easiest and most common. Options 2 and 3 are more
185     -useful if the patch isn't deemed worthy at the time it is applied to a public
186     -git tree (for instance, because it deserves more regression testing first).
187     -Option 3 is especially useful if the patch needs some special handling to apply
188     -to an older kernel (e.g., if API's have changed in the meantime).
189     +Option 1 is *strongly* preferred, is the easiest and most common. Options 2 and
190     +3 are more useful if the patch isn't deemed worthy at the time it is applied to
191     +a public git tree (for instance, because it deserves more regression testing
192     +first). Option 3 is especially useful if the patch needs some special handling
193     +to apply to an older kernel (e.g., if API's have changed in the meantime).
194     +
195     +Note that for Option 3, if the patch deviates from the original upstream patch
196     +(for example because it had to be backported) this must be very clearly
197     +documented and justified in the patch description.
198     +
199     +The upstream commit ID must be specified with a separate line above the commit
200     +text, like this:
201     +
202     + commit <sha1> upstream.
203    
204     Additionally, some patches submitted via Option 1 may have additional patch
205     prerequisites which can be cherry-picked. This can be specified in the following
206     diff --git a/Makefile b/Makefile
207     index 95ee52f9432e..35faaf8fb651 100644
208     --- a/Makefile
209     +++ b/Makefile
210     @@ -1,6 +1,6 @@
211     VERSION = 3
212     PATCHLEVEL = 18
213     -SUBLEVEL = 17
214     +SUBLEVEL = 18
215     EXTRAVERSION =
216     NAME = Diseased Newt
217    
218     diff --git a/arch/arc/include/asm/atomic.h b/arch/arc/include/asm/atomic.h
219     index 9917a45fc430..20b7dc17979e 100644
220     --- a/arch/arc/include/asm/atomic.h
221     +++ b/arch/arc/include/asm/atomic.h
222     @@ -43,6 +43,12 @@ static inline int atomic_##op##_return(int i, atomic_t *v) \
223     { \
224     unsigned int temp; \
225     \
226     + /* \
227     + * Explicit full memory barrier needed before/after as \
228     + * LLOCK/SCOND thmeselves don't provide any such semantics \
229     + */ \
230     + smp_mb(); \
231     + \
232     __asm__ __volatile__( \
233     "1: llock %0, [%1] \n" \
234     " " #asm_op " %0, %0, %2 \n" \
235     @@ -52,6 +58,8 @@ static inline int atomic_##op##_return(int i, atomic_t *v) \
236     : "r"(&v->counter), "ir"(i) \
237     : "cc"); \
238     \
239     + smp_mb(); \
240     + \
241     return temp; \
242     }
243    
244     @@ -105,6 +113,9 @@ static inline int atomic_##op##_return(int i, atomic_t *v) \
245     unsigned long flags; \
246     unsigned long temp; \
247     \
248     + /* \
249     + * spin lock/unlock provides the needed smp_mb() before/after \
250     + */ \
251     atomic_ops_lock(flags); \
252     temp = v->counter; \
253     temp c_op i; \
254     @@ -142,9 +153,19 @@ ATOMIC_OP(and, &=, and)
255     #define __atomic_add_unless(v, a, u) \
256     ({ \
257     int c, old; \
258     + \
259     + /* \
260     + * Explicit full memory barrier needed before/after as \
261     + * LLOCK/SCOND thmeselves don't provide any such semantics \
262     + */ \
263     + smp_mb(); \
264     + \
265     c = atomic_read(v); \
266     while (c != (u) && (old = atomic_cmpxchg((v), c, c + (a))) != c)\
267     c = old; \
268     + \
269     + smp_mb(); \
270     + \
271     c; \
272     })
273    
274     diff --git a/arch/arc/include/asm/bitops.h b/arch/arc/include/asm/bitops.h
275     index 1a5bf07eefe2..89fbbb0db51b 100644
276     --- a/arch/arc/include/asm/bitops.h
277     +++ b/arch/arc/include/asm/bitops.h
278     @@ -103,6 +103,12 @@ static inline int test_and_set_bit(unsigned long nr, volatile unsigned long *m)
279     if (__builtin_constant_p(nr))
280     nr &= 0x1f;
281    
282     + /*
283     + * Explicit full memory barrier needed before/after as
284     + * LLOCK/SCOND themselves don't provide any such semantics
285     + */
286     + smp_mb();
287     +
288     __asm__ __volatile__(
289     "1: llock %0, [%2] \n"
290     " bset %1, %0, %3 \n"
291     @@ -112,6 +118,8 @@ static inline int test_and_set_bit(unsigned long nr, volatile unsigned long *m)
292     : "r"(m), "ir"(nr)
293     : "cc");
294    
295     + smp_mb();
296     +
297     return (old & (1 << nr)) != 0;
298     }
299    
300     @@ -125,6 +133,8 @@ test_and_clear_bit(unsigned long nr, volatile unsigned long *m)
301     if (__builtin_constant_p(nr))
302     nr &= 0x1f;
303    
304     + smp_mb();
305     +
306     __asm__ __volatile__(
307     "1: llock %0, [%2] \n"
308     " bclr %1, %0, %3 \n"
309     @@ -134,6 +144,8 @@ test_and_clear_bit(unsigned long nr, volatile unsigned long *m)
310     : "r"(m), "ir"(nr)
311     : "cc");
312    
313     + smp_mb();
314     +
315     return (old & (1 << nr)) != 0;
316     }
317    
318     @@ -147,6 +159,8 @@ test_and_change_bit(unsigned long nr, volatile unsigned long *m)
319     if (__builtin_constant_p(nr))
320     nr &= 0x1f;
321    
322     + smp_mb();
323     +
324     __asm__ __volatile__(
325     "1: llock %0, [%2] \n"
326     " bxor %1, %0, %3 \n"
327     @@ -156,6 +170,8 @@ test_and_change_bit(unsigned long nr, volatile unsigned long *m)
328     : "r"(m), "ir"(nr)
329     : "cc");
330    
331     + smp_mb();
332     +
333     return (old & (1 << nr)) != 0;
334     }
335    
336     @@ -235,6 +251,9 @@ static inline int test_and_set_bit(unsigned long nr, volatile unsigned long *m)
337     if (__builtin_constant_p(nr))
338     nr &= 0x1f;
339    
340     + /*
341     + * spin lock/unlock provide the needed smp_mb() before/after
342     + */
343     bitops_lock(flags);
344    
345     old = *m;
346     diff --git a/arch/arc/include/asm/cmpxchg.h b/arch/arc/include/asm/cmpxchg.h
347     index 03cd6894855d..44fd531f4d7b 100644
348     --- a/arch/arc/include/asm/cmpxchg.h
349     +++ b/arch/arc/include/asm/cmpxchg.h
350     @@ -10,6 +10,8 @@
351     #define __ASM_ARC_CMPXCHG_H
352    
353     #include <linux/types.h>
354     +
355     +#include <asm/barrier.h>
356     #include <asm/smp.h>
357    
358     #ifdef CONFIG_ARC_HAS_LLSC
359     @@ -19,16 +21,25 @@ __cmpxchg(volatile void *ptr, unsigned long expected, unsigned long new)
360     {
361     unsigned long prev;
362    
363     + /*
364     + * Explicit full memory barrier needed before/after as
365     + * LLOCK/SCOND thmeselves don't provide any such semantics
366     + */
367     + smp_mb();
368     +
369     __asm__ __volatile__(
370     "1: llock %0, [%1] \n"
371     " brne %0, %2, 2f \n"
372     " scond %3, [%1] \n"
373     " bnz 1b \n"
374     "2: \n"
375     - : "=&r"(prev)
376     - : "r"(ptr), "ir"(expected),
377     - "r"(new) /* can't be "ir". scond can't take limm for "b" */
378     - : "cc");
379     + : "=&r"(prev) /* Early clobber, to prevent reg reuse */
380     + : "r"(ptr), /* Not "m": llock only supports reg direct addr mode */
381     + "ir"(expected),
382     + "r"(new) /* can't be "ir". scond can't take LIMM for "b" */
383     + : "cc", "memory"); /* so that gcc knows memory is being written here */
384     +
385     + smp_mb();
386    
387     return prev;
388     }
389     @@ -42,6 +53,9 @@ __cmpxchg(volatile void *ptr, unsigned long expected, unsigned long new)
390     int prev;
391     volatile unsigned long *p = ptr;
392    
393     + /*
394     + * spin lock/unlock provide the needed smp_mb() before/after
395     + */
396     atomic_ops_lock(flags);
397     prev = *p;
398     if (prev == expected)
399     @@ -77,12 +91,16 @@ static inline unsigned long __xchg(unsigned long val, volatile void *ptr,
400    
401     switch (size) {
402     case 4:
403     + smp_mb();
404     +
405     __asm__ __volatile__(
406     " ex %0, [%1] \n"
407     : "+r"(val)
408     : "r"(ptr)
409     : "memory");
410    
411     + smp_mb();
412     +
413     return val;
414     }
415     return __xchg_bad_pointer();
416     diff --git a/arch/arc/include/asm/spinlock.h b/arch/arc/include/asm/spinlock.h
417     index b6a8c2dfbe6e..e1651df6a93d 100644
418     --- a/arch/arc/include/asm/spinlock.h
419     +++ b/arch/arc/include/asm/spinlock.h
420     @@ -22,24 +22,46 @@ static inline void arch_spin_lock(arch_spinlock_t *lock)
421     {
422     unsigned int tmp = __ARCH_SPIN_LOCK_LOCKED__;
423    
424     + /*
425     + * This smp_mb() is technically superfluous, we only need the one
426     + * after the lock for providing the ACQUIRE semantics.
427     + * However doing the "right" thing was regressing hackbench
428     + * so keeping this, pending further investigation
429     + */
430     + smp_mb();
431     +
432     __asm__ __volatile__(
433     "1: ex %0, [%1] \n"
434     " breq %0, %2, 1b \n"
435     : "+&r" (tmp)
436     : "r"(&(lock->slock)), "ir"(__ARCH_SPIN_LOCK_LOCKED__)
437     : "memory");
438     +
439     + /*
440     + * ACQUIRE barrier to ensure load/store after taking the lock
441     + * don't "bleed-up" out of the critical section (leak-in is allowed)
442     + * http://www.spinics.net/lists/kernel/msg2010409.html
443     + *
444     + * ARCv2 only has load-load, store-store and all-all barrier
445     + * thus need the full all-all barrier
446     + */
447     + smp_mb();
448     }
449    
450     static inline int arch_spin_trylock(arch_spinlock_t *lock)
451     {
452     unsigned int tmp = __ARCH_SPIN_LOCK_LOCKED__;
453    
454     + smp_mb();
455     +
456     __asm__ __volatile__(
457     "1: ex %0, [%1] \n"
458     : "+r" (tmp)
459     : "r"(&(lock->slock))
460     : "memory");
461    
462     + smp_mb();
463     +
464     return (tmp == __ARCH_SPIN_LOCK_UNLOCKED__);
465     }
466    
467     @@ -47,12 +69,22 @@ static inline void arch_spin_unlock(arch_spinlock_t *lock)
468     {
469     unsigned int tmp = __ARCH_SPIN_LOCK_UNLOCKED__;
470    
471     + /*
472     + * RELEASE barrier: given the instructions avail on ARCv2, full barrier
473     + * is the only option
474     + */
475     + smp_mb();
476     +
477     __asm__ __volatile__(
478     " ex %0, [%1] \n"
479     : "+r" (tmp)
480     : "r"(&(lock->slock))
481     : "memory");
482    
483     + /*
484     + * superfluous, but keeping for now - see pairing version in
485     + * arch_spin_lock above
486     + */
487     smp_mb();
488     }
489    
490     diff --git a/arch/arm/boot/dts/armada-370-xp.dtsi b/arch/arm/boot/dts/armada-370-xp.dtsi
491     index 83286ec9702c..84366cddaa8e 100644
492     --- a/arch/arm/boot/dts/armada-370-xp.dtsi
493     +++ b/arch/arm/boot/dts/armada-370-xp.dtsi
494     @@ -225,7 +225,6 @@
495     };
496    
497     eth0: ethernet@70000 {
498     - compatible = "marvell,armada-370-neta";
499     reg = <0x70000 0x4000>;
500     interrupts = <8>;
501     clocks = <&gateclk 4>;
502     @@ -241,7 +240,6 @@
503     };
504    
505     eth1: ethernet@74000 {
506     - compatible = "marvell,armada-370-neta";
507     reg = <0x74000 0x4000>;
508     interrupts = <10>;
509     clocks = <&gateclk 3>;
510     diff --git a/arch/arm/boot/dts/armada-370.dtsi b/arch/arm/boot/dts/armada-370.dtsi
511     index 7513410f7b89..b6e02689c61b 100644
512     --- a/arch/arm/boot/dts/armada-370.dtsi
513     +++ b/arch/arm/boot/dts/armada-370.dtsi
514     @@ -302,6 +302,14 @@
515     dmacap,memset;
516     };
517     };
518     +
519     + ethernet@70000 {
520     + compatible = "marvell,armada-370-neta";
521     + };
522     +
523     + ethernet@74000 {
524     + compatible = "marvell,armada-370-neta";
525     + };
526     };
527     };
528     };
529     diff --git a/arch/arm/boot/dts/armada-xp-mv78260.dtsi b/arch/arm/boot/dts/armada-xp-mv78260.dtsi
530     index 480e237a870f..677160effbb0 100644
531     --- a/arch/arm/boot/dts/armada-xp-mv78260.dtsi
532     +++ b/arch/arm/boot/dts/armada-xp-mv78260.dtsi
533     @@ -296,7 +296,7 @@
534     };
535    
536     eth3: ethernet@34000 {
537     - compatible = "marvell,armada-370-neta";
538     + compatible = "marvell,armada-xp-neta";
539     reg = <0x34000 0x4000>;
540     interrupts = <14>;
541     clocks = <&gateclk 1>;
542     diff --git a/arch/arm/boot/dts/armada-xp-mv78460.dtsi b/arch/arm/boot/dts/armada-xp-mv78460.dtsi
543     index 2c7b1fef4703..e143776b78ec 100644
544     --- a/arch/arm/boot/dts/armada-xp-mv78460.dtsi
545     +++ b/arch/arm/boot/dts/armada-xp-mv78460.dtsi
546     @@ -334,7 +334,7 @@
547     };
548    
549     eth3: ethernet@34000 {
550     - compatible = "marvell,armada-370-neta";
551     + compatible = "marvell,armada-xp-neta";
552     reg = <0x34000 0x4000>;
553     interrupts = <14>;
554     clocks = <&gateclk 1>;
555     diff --git a/arch/arm/boot/dts/armada-xp.dtsi b/arch/arm/boot/dts/armada-xp.dtsi
556     index bff9f6c18db1..66d25b788067 100644
557     --- a/arch/arm/boot/dts/armada-xp.dtsi
558     +++ b/arch/arm/boot/dts/armada-xp.dtsi
559     @@ -125,7 +125,7 @@
560     };
561    
562     eth2: ethernet@30000 {
563     - compatible = "marvell,armada-370-neta";
564     + compatible = "marvell,armada-xp-neta";
565     reg = <0x30000 0x4000>;
566     interrupts = <12>;
567     clocks = <&gateclk 2>;
568     @@ -168,6 +168,14 @@
569     };
570     };
571    
572     + ethernet@70000 {
573     + compatible = "marvell,armada-xp-neta";
574     + };
575     +
576     + ethernet@74000 {
577     + compatible = "marvell,armada-xp-neta";
578     + };
579     +
580     xor@f0900 {
581     compatible = "marvell,orion-xor";
582     reg = <0xF0900 0x100
583     diff --git a/arch/arm/boot/dts/at91-sama5d4ek.dts b/arch/arm/boot/dts/at91-sama5d4ek.dts
584     index b5b84006469e..d7f6ae4e5b98 100644
585     --- a/arch/arm/boot/dts/at91-sama5d4ek.dts
586     +++ b/arch/arm/boot/dts/at91-sama5d4ek.dts
587     @@ -108,8 +108,8 @@
588     mmc0: mmc@f8000000 {
589     pinctrl-names = "default";
590     pinctrl-0 = <&pinctrl_mmc0_clk_cmd_dat0 &pinctrl_mmc0_dat1_3 &pinctrl_mmc0_cd>;
591     - slot@1 {
592     - reg = <1>;
593     + slot@0 {
594     + reg = <0>;
595     bus-width = <4>;
596     cd-gpios = <&pioE 5 0>;
597     };
598     diff --git a/arch/arm/kvm/psci.c b/arch/arm/kvm/psci.c
599     index 58cb3248d277..4d0d89e342f9 100644
600     --- a/arch/arm/kvm/psci.c
601     +++ b/arch/arm/kvm/psci.c
602     @@ -237,10 +237,6 @@ static int kvm_psci_0_2_call(struct kvm_vcpu *vcpu)
603     case PSCI_0_2_FN64_AFFINITY_INFO:
604     val = kvm_psci_vcpu_affinity_info(vcpu);
605     break;
606     - case PSCI_0_2_FN_MIGRATE:
607     - case PSCI_0_2_FN64_MIGRATE:
608     - val = PSCI_RET_NOT_SUPPORTED;
609     - break;
610     case PSCI_0_2_FN_MIGRATE_INFO_TYPE:
611     /*
612     * Trusted OS is MP hence does not require migration
613     @@ -249,10 +245,6 @@ static int kvm_psci_0_2_call(struct kvm_vcpu *vcpu)
614     */
615     val = PSCI_0_2_TOS_MP;
616     break;
617     - case PSCI_0_2_FN_MIGRATE_INFO_UP_CPU:
618     - case PSCI_0_2_FN64_MIGRATE_INFO_UP_CPU:
619     - val = PSCI_RET_NOT_SUPPORTED;
620     - break;
621     case PSCI_0_2_FN_SYSTEM_OFF:
622     kvm_psci_system_off(vcpu);
623     /*
624     @@ -278,7 +270,8 @@ static int kvm_psci_0_2_call(struct kvm_vcpu *vcpu)
625     ret = 0;
626     break;
627     default:
628     - return -EINVAL;
629     + val = PSCI_RET_NOT_SUPPORTED;
630     + break;
631     }
632    
633     *vcpu_reg(vcpu, 0) = val;
634     @@ -298,12 +291,9 @@ static int kvm_psci_0_1_call(struct kvm_vcpu *vcpu)
635     case KVM_PSCI_FN_CPU_ON:
636     val = kvm_psci_vcpu_on(vcpu);
637     break;
638     - case KVM_PSCI_FN_CPU_SUSPEND:
639     - case KVM_PSCI_FN_MIGRATE:
640     + default:
641     val = PSCI_RET_NOT_SUPPORTED;
642     break;
643     - default:
644     - return -EINVAL;
645     }
646    
647     *vcpu_reg(vcpu, 0) = val;
648     diff --git a/arch/arm/mach-tegra/cpuidle-tegra20.c b/arch/arm/mach-tegra/cpuidle-tegra20.c
649     index b30bf5cba65b..f209e9c507e2 100644
650     --- a/arch/arm/mach-tegra/cpuidle-tegra20.c
651     +++ b/arch/arm/mach-tegra/cpuidle-tegra20.c
652     @@ -35,6 +35,7 @@
653     #include "iomap.h"
654     #include "irq.h"
655     #include "pm.h"
656     +#include "reset.h"
657     #include "sleep.h"
658    
659     #ifdef CONFIG_PM_SLEEP
660     @@ -72,15 +73,13 @@ static struct cpuidle_driver tegra_idle_driver = {
661    
662     #ifdef CONFIG_PM_SLEEP
663     #ifdef CONFIG_SMP
664     -static void __iomem *pmc = IO_ADDRESS(TEGRA_PMC_BASE);
665     -
666     static int tegra20_reset_sleeping_cpu_1(void)
667     {
668     int ret = 0;
669    
670     tegra_pen_lock();
671    
672     - if (readl(pmc + PMC_SCRATCH41) == CPU_RESETTABLE)
673     + if (readb(tegra20_cpu1_resettable_status) == CPU_RESETTABLE)
674     tegra20_cpu_shutdown(1);
675     else
676     ret = -EINVAL;
677     diff --git a/arch/arm/mach-tegra/reset-handler.S b/arch/arm/mach-tegra/reset-handler.S
678     index 71be4af5e975..e3070fdab80b 100644
679     --- a/arch/arm/mach-tegra/reset-handler.S
680     +++ b/arch/arm/mach-tegra/reset-handler.S
681     @@ -169,10 +169,10 @@ after_errata:
682     cmp r6, #TEGRA20
683     bne 1f
684     /* If not CPU0, don't let CPU0 reset CPU1 now that CPU1 is coming up. */
685     - mov32 r5, TEGRA_PMC_BASE
686     - mov r0, #0
687     + mov32 r5, TEGRA_IRAM_BASE + TEGRA_IRAM_RESET_HANDLER_OFFSET
688     + mov r0, #CPU_NOT_RESETTABLE
689     cmp r10, #0
690     - strne r0, [r5, #PMC_SCRATCH41]
691     + strneb r0, [r5, #__tegra20_cpu1_resettable_status_offset]
692     1:
693     #endif
694    
695     @@ -281,6 +281,10 @@ __tegra_cpu_reset_handler_data:
696     .rept TEGRA_RESET_DATA_SIZE
697     .long 0
698     .endr
699     + .globl __tegra20_cpu1_resettable_status_offset
700     + .equ __tegra20_cpu1_resettable_status_offset, \
701     + . - __tegra_cpu_reset_handler_start
702     + .byte 0
703     .align L1_CACHE_SHIFT
704    
705     ENTRY(__tegra_cpu_reset_handler_end)
706     diff --git a/arch/arm/mach-tegra/reset.h b/arch/arm/mach-tegra/reset.h
707     index 76a93434c6ee..29c3dec0126a 100644
708     --- a/arch/arm/mach-tegra/reset.h
709     +++ b/arch/arm/mach-tegra/reset.h
710     @@ -35,6 +35,7 @@ extern unsigned long __tegra_cpu_reset_handler_data[TEGRA_RESET_DATA_SIZE];
711    
712     void __tegra_cpu_reset_handler_start(void);
713     void __tegra_cpu_reset_handler(void);
714     +void __tegra20_cpu1_resettable_status_offset(void);
715     void __tegra_cpu_reset_handler_end(void);
716     void tegra_secondary_startup(void);
717    
718     @@ -47,6 +48,9 @@ void tegra_secondary_startup(void);
719     (IO_ADDRESS(TEGRA_IRAM_BASE + TEGRA_IRAM_RESET_HANDLER_OFFSET + \
720     ((u32)&__tegra_cpu_reset_handler_data[TEGRA_RESET_MASK_LP2] - \
721     (u32)__tegra_cpu_reset_handler_start)))
722     +#define tegra20_cpu1_resettable_status \
723     + (IO_ADDRESS(TEGRA_IRAM_BASE + TEGRA_IRAM_RESET_HANDLER_OFFSET + \
724     + (u32)__tegra20_cpu1_resettable_status_offset))
725     #endif
726    
727     #define tegra_cpu_reset_handler_offset \
728     diff --git a/arch/arm/mach-tegra/sleep-tegra20.S b/arch/arm/mach-tegra/sleep-tegra20.S
729     index be4bc5f853f5..e6b684e14322 100644
730     --- a/arch/arm/mach-tegra/sleep-tegra20.S
731     +++ b/arch/arm/mach-tegra/sleep-tegra20.S
732     @@ -97,9 +97,10 @@ ENDPROC(tegra20_hotplug_shutdown)
733     ENTRY(tegra20_cpu_shutdown)
734     cmp r0, #0
735     reteq lr @ must not be called for CPU 0
736     - mov32 r1, TEGRA_PMC_VIRT + PMC_SCRATCH41
737     + mov32 r1, TEGRA_IRAM_RESET_BASE_VIRT
738     + ldr r2, =__tegra20_cpu1_resettable_status_offset
739     mov r12, #CPU_RESETTABLE
740     - str r12, [r1]
741     + strb r12, [r1, r2]
742    
743     cpu_to_halt_reg r1, r0
744     ldr r3, =TEGRA_FLOW_CTRL_VIRT
745     @@ -182,38 +183,41 @@ ENDPROC(tegra_pen_unlock)
746     /*
747     * tegra20_cpu_clear_resettable(void)
748     *
749     - * Called to clear the "resettable soon" flag in PMC_SCRATCH41 when
750     + * Called to clear the "resettable soon" flag in IRAM variable when
751     * it is expected that the secondary CPU will be idle soon.
752     */
753     ENTRY(tegra20_cpu_clear_resettable)
754     - mov32 r1, TEGRA_PMC_VIRT + PMC_SCRATCH41
755     + mov32 r1, TEGRA_IRAM_RESET_BASE_VIRT
756     + ldr r2, =__tegra20_cpu1_resettable_status_offset
757     mov r12, #CPU_NOT_RESETTABLE
758     - str r12, [r1]
759     + strb r12, [r1, r2]
760     ret lr
761     ENDPROC(tegra20_cpu_clear_resettable)
762    
763     /*
764     * tegra20_cpu_set_resettable_soon(void)
765     *
766     - * Called to set the "resettable soon" flag in PMC_SCRATCH41 when
767     + * Called to set the "resettable soon" flag in IRAM variable when
768     * it is expected that the secondary CPU will be idle soon.
769     */
770     ENTRY(tegra20_cpu_set_resettable_soon)
771     - mov32 r1, TEGRA_PMC_VIRT + PMC_SCRATCH41
772     + mov32 r1, TEGRA_IRAM_RESET_BASE_VIRT
773     + ldr r2, =__tegra20_cpu1_resettable_status_offset
774     mov r12, #CPU_RESETTABLE_SOON
775     - str r12, [r1]
776     + strb r12, [r1, r2]
777     ret lr
778     ENDPROC(tegra20_cpu_set_resettable_soon)
779    
780     /*
781     * tegra20_cpu_is_resettable_soon(void)
782     *
783     - * Returns true if the "resettable soon" flag in PMC_SCRATCH41 has been
784     + * Returns true if the "resettable soon" flag in IRAM variable has been
785     * set because it is expected that the secondary CPU will be idle soon.
786     */
787     ENTRY(tegra20_cpu_is_resettable_soon)
788     - mov32 r1, TEGRA_PMC_VIRT + PMC_SCRATCH41
789     - ldr r12, [r1]
790     + mov32 r1, TEGRA_IRAM_RESET_BASE_VIRT
791     + ldr r2, =__tegra20_cpu1_resettable_status_offset
792     + ldrb r12, [r1, r2]
793     cmp r12, #CPU_RESETTABLE_SOON
794     moveq r0, #1
795     movne r0, #0
796     @@ -256,9 +260,10 @@ ENTRY(tegra20_sleep_cpu_secondary_finish)
797     mov r0, #TEGRA_FLUSH_CACHE_LOUIS
798     bl tegra_disable_clean_inv_dcache
799    
800     - mov32 r0, TEGRA_PMC_VIRT + PMC_SCRATCH41
801     + mov32 r0, TEGRA_IRAM_RESET_BASE_VIRT
802     + ldr r4, =__tegra20_cpu1_resettable_status_offset
803     mov r3, #CPU_RESETTABLE
804     - str r3, [r0]
805     + strb r3, [r0, r4]
806    
807     bl tegra_cpu_do_idle
808    
809     @@ -274,10 +279,10 @@ ENTRY(tegra20_sleep_cpu_secondary_finish)
810    
811     bl tegra_pen_lock
812    
813     - mov32 r3, TEGRA_PMC_VIRT
814     - add r0, r3, #PMC_SCRATCH41
815     + mov32 r0, TEGRA_IRAM_RESET_BASE_VIRT
816     + ldr r4, =__tegra20_cpu1_resettable_status_offset
817     mov r3, #CPU_NOT_RESETTABLE
818     - str r3, [r0]
819     + strb r3, [r0, r4]
820    
821     bl tegra_pen_unlock
822    
823     diff --git a/arch/arm/mach-tegra/sleep.h b/arch/arm/mach-tegra/sleep.h
824     index 92d46ec1361a..0d59360d891d 100644
825     --- a/arch/arm/mach-tegra/sleep.h
826     +++ b/arch/arm/mach-tegra/sleep.h
827     @@ -18,6 +18,7 @@
828     #define __MACH_TEGRA_SLEEP_H
829    
830     #include "iomap.h"
831     +#include "irammap.h"
832    
833     #define TEGRA_ARM_PERIF_VIRT (TEGRA_ARM_PERIF_BASE - IO_CPU_PHYS \
834     + IO_CPU_VIRT)
835     @@ -29,6 +30,9 @@
836     + IO_APB_VIRT)
837     #define TEGRA_PMC_VIRT (TEGRA_PMC_BASE - IO_APB_PHYS + IO_APB_VIRT)
838    
839     +#define TEGRA_IRAM_RESET_BASE_VIRT (IO_IRAM_VIRT + \
840     + TEGRA_IRAM_RESET_HANDLER_OFFSET)
841     +
842     /* PMC_SCRATCH37-39 and 41 are used for tegra_pen_lock and idle */
843     #define PMC_SCRATCH37 0x130
844     #define PMC_SCRATCH38 0x134
845     diff --git a/arch/arm64/kernel/entry.S b/arch/arm64/kernel/entry.S
846     index 2b0f3d5e11c7..6c99b4664b40 100644
847     --- a/arch/arm64/kernel/entry.S
848     +++ b/arch/arm64/kernel/entry.S
849     @@ -517,6 +517,7 @@ el0_sp_pc:
850     mrs x26, far_el1
851     // enable interrupts before calling the main handler
852     enable_dbg_and_irq
853     + ct_user_exit
854     mov x0, x26
855     mov x1, x25
856     mov x2, sp
857     diff --git a/arch/arm64/kernel/vdso/Makefile b/arch/arm64/kernel/vdso/Makefile
858     index ff3bddea482d..f6fe17d88da5 100644
859     --- a/arch/arm64/kernel/vdso/Makefile
860     +++ b/arch/arm64/kernel/vdso/Makefile
861     @@ -15,6 +15,10 @@ ccflags-y := -shared -fno-common -fno-builtin
862     ccflags-y += -nostdlib -Wl,-soname=linux-vdso.so.1 \
863     $(call cc-ldoption, -Wl$(comma)--hash-style=sysv)
864    
865     +# Workaround for bare-metal (ELF) toolchains that neglect to pass -shared
866     +# down to collect2, resulting in silent corruption of the vDSO image.
867     +ccflags-y += -Wl,-shared
868     +
869     obj-y += vdso.o
870     extra-y += vdso.lds vdso-offsets.h
871     CPPFLAGS_vdso.lds += -P -C -U$(ARCH)
872     diff --git a/arch/arm64/mm/context.c b/arch/arm64/mm/context.c
873     index baa758d37021..76c1e6cd36fc 100644
874     --- a/arch/arm64/mm/context.c
875     +++ b/arch/arm64/mm/context.c
876     @@ -92,6 +92,14 @@ static void reset_context(void *info)
877     unsigned int cpu = smp_processor_id();
878     struct mm_struct *mm = current->active_mm;
879    
880     + /*
881     + * current->active_mm could be init_mm for the idle thread immediately
882     + * after secondary CPU boot or hotplug. TTBR0_EL1 is already set to
883     + * the reserved value, so no need to reset any context.
884     + */
885     + if (mm == &init_mm)
886     + return;
887     +
888     smp_rmb();
889     asid = cpu_last_asid + cpu;
890    
891     diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c
892     index c95464a33f36..f752943f75d2 100644
893     --- a/arch/arm64/mm/init.c
894     +++ b/arch/arm64/mm/init.c
895     @@ -238,7 +238,7 @@ static void __init free_unused_memmap(void)
896     * memmap entries are valid from the bank end aligned to
897     * MAX_ORDER_NR_PAGES.
898     */
899     - prev_end = ALIGN(start + __phys_to_pfn(reg->size),
900     + prev_end = ALIGN(__phys_to_pfn(reg->base + reg->size),
901     MAX_ORDER_NR_PAGES);
902     }
903    
904     diff --git a/arch/mips/include/asm/mach-generic/spaces.h b/arch/mips/include/asm/mach-generic/spaces.h
905     index 9488fa5f8866..afc96ecb9004 100644
906     --- a/arch/mips/include/asm/mach-generic/spaces.h
907     +++ b/arch/mips/include/asm/mach-generic/spaces.h
908     @@ -94,7 +94,11 @@
909     #endif
910    
911     #ifndef FIXADDR_TOP
912     +#ifdef CONFIG_KVM_GUEST
913     +#define FIXADDR_TOP ((unsigned long)(long)(int)0x7ffe0000)
914     +#else
915     #define FIXADDR_TOP ((unsigned long)(long)(int)0xfffe0000)
916     #endif
917     +#endif
918    
919     #endif /* __ASM_MACH_GENERIC_SPACES_H */
920     diff --git a/arch/mips/kernel/irq.c b/arch/mips/kernel/irq.c
921     index d2bfbc2e8995..be15e52a47a0 100644
922     --- a/arch/mips/kernel/irq.c
923     +++ b/arch/mips/kernel/irq.c
924     @@ -109,7 +109,7 @@ void __init init_IRQ(void)
925     #endif
926     }
927    
928     -#ifdef DEBUG_STACKOVERFLOW
929     +#ifdef CONFIG_DEBUG_STACKOVERFLOW
930     static inline void check_stack_overflow(void)
931     {
932     unsigned long sp;
933     diff --git a/arch/mips/kvm/mips.c b/arch/mips/kvm/mips.c
934     index 39074fb83bad..a53eaf50c224 100644
935     --- a/arch/mips/kvm/mips.c
936     +++ b/arch/mips/kvm/mips.c
937     @@ -784,7 +784,7 @@ int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm, struct kvm_dirty_log *log)
938    
939     /* If nothing is dirty, don't bother messing with page tables. */
940     if (is_dirty) {
941     - memslot = &kvm->memslots->memslots[log->slot];
942     + memslot = id_to_memslot(kvm->memslots, log->slot);
943    
944     ga = memslot->base_gfn << PAGE_SHIFT;
945     ga_end = ga + (memslot->npages << PAGE_SHIFT);
946     diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c
947     index a6995d4e93d4..ffa07eb5fff0 100644
948     --- a/arch/powerpc/perf/core-book3s.c
949     +++ b/arch/powerpc/perf/core-book3s.c
950     @@ -131,7 +131,16 @@ static void pmao_restore_workaround(bool ebb) { }
951    
952     static bool regs_use_siar(struct pt_regs *regs)
953     {
954     - return !!regs->result;
955     + /*
956     + * When we take a performance monitor exception the regs are setup
957     + * using perf_read_regs() which overloads some fields, in particular
958     + * regs->result to tell us whether to use SIAR.
959     + *
960     + * However if the regs are from another exception, eg. a syscall, then
961     + * they have not been setup using perf_read_regs() and so regs->result
962     + * is something random.
963     + */
964     + return ((TRAP(regs) == 0xf00) && regs->result);
965     }
966    
967     /*
968     diff --git a/arch/s390/kernel/crash_dump.c b/arch/s390/kernel/crash_dump.c
969     index 9f73c8059022..49b74454d7ee 100644
970     --- a/arch/s390/kernel/crash_dump.c
971     +++ b/arch/s390/kernel/crash_dump.c
972     @@ -415,7 +415,7 @@ static void *nt_s390_vx_low(void *ptr, __vector128 *vx_regs)
973     ptr += len;
974     /* Copy lower halves of SIMD registers 0-15 */
975     for (i = 0; i < 16; i++) {
976     - memcpy(ptr, &vx_regs[i], 8);
977     + memcpy(ptr, &vx_regs[i].u[2], 8);
978     ptr += 8;
979     }
980     return ptr;
981     diff --git a/arch/sparc/kernel/ldc.c b/arch/sparc/kernel/ldc.c
982     index 4310332872d4..71762565513e 100644
983     --- a/arch/sparc/kernel/ldc.c
984     +++ b/arch/sparc/kernel/ldc.c
985     @@ -2307,7 +2307,7 @@ void *ldc_alloc_exp_dring(struct ldc_channel *lp, unsigned int len,
986     if (len & (8UL - 1))
987     return ERR_PTR(-EINVAL);
988    
989     - buf = kzalloc(len, GFP_KERNEL);
990     + buf = kzalloc(len, GFP_ATOMIC);
991     if (!buf)
992     return ERR_PTR(-ENOMEM);
993    
994     diff --git a/arch/x86/include/asm/segment.h b/arch/x86/include/asm/segment.h
995     index 6f1c3a8a33ab..bcc9a2f46c62 100644
996     --- a/arch/x86/include/asm/segment.h
997     +++ b/arch/x86/include/asm/segment.h
998     @@ -212,10 +212,21 @@
999     #define TLS_SIZE (GDT_ENTRY_TLS_ENTRIES * 8)
1000    
1001     #ifdef __KERNEL__
1002     +
1003     +/*
1004     + * early_idt_handler_array is an array of entry points referenced in the
1005     + * early IDT. For simplicity, it's a real array with one entry point
1006     + * every nine bytes. That leaves room for an optional 'push $0' if the
1007     + * vector has no error code (two bytes), a 'push $vector_number' (two
1008     + * bytes), and a jump to the common entry code (up to five bytes).
1009     + */
1010     +#define EARLY_IDT_HANDLER_SIZE 9
1011     +
1012     #ifndef __ASSEMBLY__
1013     -extern const char early_idt_handlers[NUM_EXCEPTION_VECTORS][2+2+5];
1014     +
1015     +extern const char early_idt_handler_array[NUM_EXCEPTION_VECTORS][EARLY_IDT_HANDLER_SIZE];
1016     #ifdef CONFIG_TRACING
1017     -#define trace_early_idt_handlers early_idt_handlers
1018     +# define trace_early_idt_handler_array early_idt_handler_array
1019     #endif
1020    
1021     /*
1022     diff --git a/arch/x86/kernel/head64.c b/arch/x86/kernel/head64.c
1023     index 3b241f0ca005..957fdb5eb2e3 100644
1024     --- a/arch/x86/kernel/head64.c
1025     +++ b/arch/x86/kernel/head64.c
1026     @@ -164,7 +164,7 @@ asmlinkage __visible void __init x86_64_start_kernel(char * real_mode_data)
1027     clear_bss();
1028    
1029     for (i = 0; i < NUM_EXCEPTION_VECTORS; i++)
1030     - set_intr_gate(i, early_idt_handlers[i]);
1031     + set_intr_gate(i, early_idt_handler_array[i]);
1032     load_idt((const struct desc_ptr *)&idt_descr);
1033    
1034     copy_bootdata(__va(real_mode_data));
1035     diff --git a/arch/x86/kernel/head_32.S b/arch/x86/kernel/head_32.S
1036     index f36bd42d6f0c..30a2aa3782fa 100644
1037     --- a/arch/x86/kernel/head_32.S
1038     +++ b/arch/x86/kernel/head_32.S
1039     @@ -477,21 +477,22 @@ is486:
1040     __INIT
1041     setup_once:
1042     /*
1043     - * Set up a idt with 256 entries pointing to ignore_int,
1044     - * interrupt gates. It doesn't actually load idt - that needs
1045     - * to be done on each CPU. Interrupts are enabled elsewhere,
1046     - * when we can be relatively sure everything is ok.
1047     + * Set up a idt with 256 interrupt gates that push zero if there
1048     + * is no error code and then jump to early_idt_handler_common.
1049     + * It doesn't actually load the idt - that needs to be done on
1050     + * each CPU. Interrupts are enabled elsewhere, when we can be
1051     + * relatively sure everything is ok.
1052     */
1053    
1054     movl $idt_table,%edi
1055     - movl $early_idt_handlers,%eax
1056     + movl $early_idt_handler_array,%eax
1057     movl $NUM_EXCEPTION_VECTORS,%ecx
1058     1:
1059     movl %eax,(%edi)
1060     movl %eax,4(%edi)
1061     /* interrupt gate, dpl=0, present */
1062     movl $(0x8E000000 + __KERNEL_CS),2(%edi)
1063     - addl $9,%eax
1064     + addl $EARLY_IDT_HANDLER_SIZE,%eax
1065     addl $8,%edi
1066     loop 1b
1067    
1068     @@ -523,26 +524,28 @@ setup_once:
1069     andl $0,setup_once_ref /* Once is enough, thanks */
1070     ret
1071    
1072     -ENTRY(early_idt_handlers)
1073     +ENTRY(early_idt_handler_array)
1074     # 36(%esp) %eflags
1075     # 32(%esp) %cs
1076     # 28(%esp) %eip
1077     # 24(%rsp) error code
1078     i = 0
1079     .rept NUM_EXCEPTION_VECTORS
1080     - .if (EXCEPTION_ERRCODE_MASK >> i) & 1
1081     - ASM_NOP2
1082     - .else
1083     + .ifeq (EXCEPTION_ERRCODE_MASK >> i) & 1
1084     pushl $0 # Dummy error code, to make stack frame uniform
1085     .endif
1086     pushl $i # 20(%esp) Vector number
1087     - jmp early_idt_handler
1088     + jmp early_idt_handler_common
1089     i = i + 1
1090     + .fill early_idt_handler_array + i*EARLY_IDT_HANDLER_SIZE - ., 1, 0xcc
1091     .endr
1092     -ENDPROC(early_idt_handlers)
1093     +ENDPROC(early_idt_handler_array)
1094    
1095     - /* This is global to keep gas from relaxing the jumps */
1096     -ENTRY(early_idt_handler)
1097     +early_idt_handler_common:
1098     + /*
1099     + * The stack is the hardware frame, an error code or zero, and the
1100     + * vector number.
1101     + */
1102     cld
1103    
1104     cmpl $2,(%esp) # X86_TRAP_NMI
1105     @@ -602,7 +605,7 @@ ex_entry:
1106     is_nmi:
1107     addl $8,%esp /* drop vector number and error code */
1108     iret
1109     -ENDPROC(early_idt_handler)
1110     +ENDPROC(early_idt_handler_common)
1111    
1112     /* This is the default interrupt "handler" :-) */
1113     ALIGN
1114     diff --git a/arch/x86/kernel/head_64.S b/arch/x86/kernel/head_64.S
1115     index a468c0a65c42..a2dc0add72ed 100644
1116     --- a/arch/x86/kernel/head_64.S
1117     +++ b/arch/x86/kernel/head_64.S
1118     @@ -321,26 +321,28 @@ bad_address:
1119     jmp bad_address
1120    
1121     __INIT
1122     - .globl early_idt_handlers
1123     -early_idt_handlers:
1124     +ENTRY(early_idt_handler_array)
1125     # 104(%rsp) %rflags
1126     # 96(%rsp) %cs
1127     # 88(%rsp) %rip
1128     # 80(%rsp) error code
1129     i = 0
1130     .rept NUM_EXCEPTION_VECTORS
1131     - .if (EXCEPTION_ERRCODE_MASK >> i) & 1
1132     - ASM_NOP2
1133     - .else
1134     + .ifeq (EXCEPTION_ERRCODE_MASK >> i) & 1
1135     pushq $0 # Dummy error code, to make stack frame uniform
1136     .endif
1137     pushq $i # 72(%rsp) Vector number
1138     - jmp early_idt_handler
1139     + jmp early_idt_handler_common
1140     i = i + 1
1141     + .fill early_idt_handler_array + i*EARLY_IDT_HANDLER_SIZE - ., 1, 0xcc
1142     .endr
1143     +ENDPROC(early_idt_handler_array)
1144    
1145     -/* This is global to keep gas from relaxing the jumps */
1146     -ENTRY(early_idt_handler)
1147     +early_idt_handler_common:
1148     + /*
1149     + * The stack is the hardware frame, an error code or zero, and the
1150     + * vector number.
1151     + */
1152     cld
1153    
1154     cmpl $2,(%rsp) # X86_TRAP_NMI
1155     @@ -412,7 +414,7 @@ ENTRY(early_idt_handler)
1156     is_nmi:
1157     addq $16,%rsp # drop vector number and error code
1158     INTERRUPT_RETURN
1159     -ENDPROC(early_idt_handler)
1160     +ENDPROC(early_idt_handler_common)
1161    
1162     __INITDATA
1163    
1164     diff --git a/arch/x86/pci/acpi.c b/arch/x86/pci/acpi.c
1165     index cfd1b132b8e3..a3e94b4108bf 100644
1166     --- a/arch/x86/pci/acpi.c
1167     +++ b/arch/x86/pci/acpi.c
1168     @@ -84,6 +84,17 @@ static const struct dmi_system_id pci_crs_quirks[] __initconst = {
1169     DMI_MATCH(DMI_BIOS_VENDOR, "Phoenix Technologies, LTD"),
1170     },
1171     },
1172     + /* https://bugs.launchpad.net/ubuntu/+source/alsa-driver/+bug/931368 */
1173     + /* https://bugs.launchpad.net/ubuntu/+source/alsa-driver/+bug/1033299 */
1174     + {
1175     + .callback = set_use_crs,
1176     + .ident = "Foxconn K8M890-8237A",
1177     + .matches = {
1178     + DMI_MATCH(DMI_BOARD_VENDOR, "Foxconn"),
1179     + DMI_MATCH(DMI_BOARD_NAME, "K8M890-8237A"),
1180     + DMI_MATCH(DMI_BIOS_VENDOR, "Phoenix Technologies, LTD"),
1181     + },
1182     + },
1183    
1184     /* Now for the blacklist.. */
1185    
1186     @@ -124,8 +135,10 @@ void __init pci_acpi_crs_quirks(void)
1187     {
1188     int year;
1189    
1190     - if (dmi_get_date(DMI_BIOS_DATE, &year, NULL, NULL) && year < 2008)
1191     - pci_use_crs = false;
1192     + if (dmi_get_date(DMI_BIOS_DATE, &year, NULL, NULL) && year < 2008) {
1193     + if (iomem_resource.end <= 0xffffffff)
1194     + pci_use_crs = false;
1195     + }
1196    
1197     dmi_check_system(pci_crs_quirks);
1198    
1199     diff --git a/block/genhd.c b/block/genhd.c
1200     index 0a536dc05f3b..c2fb3f7bdec4 100644
1201     --- a/block/genhd.c
1202     +++ b/block/genhd.c
1203     @@ -422,9 +422,9 @@ int blk_alloc_devt(struct hd_struct *part, dev_t *devt)
1204     /* allocate ext devt */
1205     idr_preload(GFP_KERNEL);
1206    
1207     - spin_lock(&ext_devt_lock);
1208     + spin_lock_bh(&ext_devt_lock);
1209     idx = idr_alloc(&ext_devt_idr, part, 0, NR_EXT_DEVT, GFP_NOWAIT);
1210     - spin_unlock(&ext_devt_lock);
1211     + spin_unlock_bh(&ext_devt_lock);
1212    
1213     idr_preload_end();
1214     if (idx < 0)
1215     @@ -449,9 +449,9 @@ void blk_free_devt(dev_t devt)
1216     return;
1217    
1218     if (MAJOR(devt) == BLOCK_EXT_MAJOR) {
1219     - spin_lock(&ext_devt_lock);
1220     + spin_lock_bh(&ext_devt_lock);
1221     idr_remove(&ext_devt_idr, blk_mangle_minor(MINOR(devt)));
1222     - spin_unlock(&ext_devt_lock);
1223     + spin_unlock_bh(&ext_devt_lock);
1224     }
1225     }
1226    
1227     @@ -691,13 +691,13 @@ struct gendisk *get_gendisk(dev_t devt, int *partno)
1228     } else {
1229     struct hd_struct *part;
1230    
1231     - spin_lock(&ext_devt_lock);
1232     + spin_lock_bh(&ext_devt_lock);
1233     part = idr_find(&ext_devt_idr, blk_mangle_minor(MINOR(devt)));
1234     if (part && get_disk(part_to_disk(part))) {
1235     *partno = part->partno;
1236     disk = part_to_disk(part);
1237     }
1238     - spin_unlock(&ext_devt_lock);
1239     + spin_unlock_bh(&ext_devt_lock);
1240     }
1241    
1242     return disk;
1243     diff --git a/crypto/asymmetric_keys/asymmetric_keys.h b/crypto/asymmetric_keys/asymmetric_keys.h
1244     index f97330886d58..3f5b537ab33e 100644
1245     --- a/crypto/asymmetric_keys/asymmetric_keys.h
1246     +++ b/crypto/asymmetric_keys/asymmetric_keys.h
1247     @@ -11,6 +11,9 @@
1248    
1249     extern struct asymmetric_key_id *asymmetric_key_hex_to_key_id(const char *id);
1250    
1251     +extern int __asymmetric_key_hex_to_key_id(const char *id,
1252     + struct asymmetric_key_id *match_id,
1253     + size_t hexlen);
1254     static inline
1255     const struct asymmetric_key_ids *asymmetric_key_ids(const struct key *key)
1256     {
1257     diff --git a/crypto/asymmetric_keys/asymmetric_type.c b/crypto/asymmetric_keys/asymmetric_type.c
1258     index bcbbbd794e1d..b0e4ed23d668 100644
1259     --- a/crypto/asymmetric_keys/asymmetric_type.c
1260     +++ b/crypto/asymmetric_keys/asymmetric_type.c
1261     @@ -104,6 +104,15 @@ static bool asymmetric_match_key_ids(
1262     return false;
1263     }
1264    
1265     +/* helper function can be called directly with pre-allocated memory */
1266     +inline int __asymmetric_key_hex_to_key_id(const char *id,
1267     + struct asymmetric_key_id *match_id,
1268     + size_t hexlen)
1269     +{
1270     + match_id->len = hexlen;
1271     + return hex2bin(match_id->data, id, hexlen);
1272     +}
1273     +
1274     /**
1275     * asymmetric_key_hex_to_key_id - Convert a hex string into a key ID.
1276     * @id: The ID as a hex string.
1277     @@ -111,21 +120,20 @@ static bool asymmetric_match_key_ids(
1278     struct asymmetric_key_id *asymmetric_key_hex_to_key_id(const char *id)
1279     {
1280     struct asymmetric_key_id *match_id;
1281     - size_t hexlen;
1282     + size_t asciihexlen;
1283     int ret;
1284    
1285     if (!*id)
1286     return ERR_PTR(-EINVAL);
1287     - hexlen = strlen(id);
1288     - if (hexlen & 1)
1289     + asciihexlen = strlen(id);
1290     + if (asciihexlen & 1)
1291     return ERR_PTR(-EINVAL);
1292    
1293     - match_id = kmalloc(sizeof(struct asymmetric_key_id) + hexlen / 2,
1294     + match_id = kmalloc(sizeof(struct asymmetric_key_id) + asciihexlen / 2,
1295     GFP_KERNEL);
1296     if (!match_id)
1297     return ERR_PTR(-ENOMEM);
1298     - match_id->len = hexlen / 2;
1299     - ret = hex2bin(match_id->data, id, hexlen / 2);
1300     + ret = __asymmetric_key_hex_to_key_id(id, match_id, asciihexlen / 2);
1301     if (ret < 0) {
1302     kfree(match_id);
1303     return ERR_PTR(-EINVAL);
1304     diff --git a/crypto/asymmetric_keys/x509_public_key.c b/crypto/asymmetric_keys/x509_public_key.c
1305     index a6c42031628e..24f17e6c5904 100644
1306     --- a/crypto/asymmetric_keys/x509_public_key.c
1307     +++ b/crypto/asymmetric_keys/x509_public_key.c
1308     @@ -28,17 +28,30 @@ static bool use_builtin_keys;
1309     static struct asymmetric_key_id *ca_keyid;
1310    
1311     #ifndef MODULE
1312     +static struct {
1313     + struct asymmetric_key_id id;
1314     + unsigned char data[10];
1315     +} cakey;
1316     +
1317     static int __init ca_keys_setup(char *str)
1318     {
1319     if (!str) /* default system keyring */
1320     return 1;
1321    
1322     if (strncmp(str, "id:", 3) == 0) {
1323     - struct asymmetric_key_id *p;
1324     - p = asymmetric_key_hex_to_key_id(str + 3);
1325     - if (p == ERR_PTR(-EINVAL))
1326     - pr_err("Unparsable hex string in ca_keys\n");
1327     - else if (!IS_ERR(p))
1328     + struct asymmetric_key_id *p = &cakey.id;
1329     + size_t hexlen = (strlen(str) - 3) / 2;
1330     + int ret;
1331     +
1332     + if (hexlen == 0 || hexlen > sizeof(cakey.data)) {
1333     + pr_err("Missing or invalid ca_keys id\n");
1334     + return 1;
1335     + }
1336     +
1337     + ret = __asymmetric_key_hex_to_key_id(str + 3, p, hexlen);
1338     + if (ret < 0)
1339     + pr_err("Unparsable ca_keys id hex string\n");
1340     + else
1341     ca_keyid = p; /* owner key 'id:xxxxxx' */
1342     } else if (strcmp(str, "builtin") == 0) {
1343     use_builtin_keys = true;
1344     diff --git a/drivers/acpi/device_pm.c b/drivers/acpi/device_pm.c
1345     index 6341e668f362..813397a25594 100644
1346     --- a/drivers/acpi/device_pm.c
1347     +++ b/drivers/acpi/device_pm.c
1348     @@ -957,6 +957,7 @@ EXPORT_SYMBOL_GPL(acpi_subsys_prepare);
1349     */
1350     void acpi_subsys_complete(struct device *dev)
1351     {
1352     + pm_generic_complete(dev);
1353     /*
1354     * If the device had been runtime-suspended before the system went into
1355     * the sleep state it is going out of and it has never been resumed till
1356     diff --git a/drivers/ata/ahci_mvebu.c b/drivers/ata/ahci_mvebu.c
1357     index 68672d2692ee..e3267b78b200 100644
1358     --- a/drivers/ata/ahci_mvebu.c
1359     +++ b/drivers/ata/ahci_mvebu.c
1360     @@ -43,7 +43,7 @@ static void ahci_mvebu_mbus_config(struct ahci_host_priv *hpriv,
1361     writel((cs->mbus_attr << 8) |
1362     (dram->mbus_dram_target_id << 4) | 1,
1363     hpriv->mmio + AHCI_WINDOW_CTRL(i));
1364     - writel(cs->base, hpriv->mmio + AHCI_WINDOW_BASE(i));
1365     + writel(cs->base >> 16, hpriv->mmio + AHCI_WINDOW_BASE(i));
1366     writel(((cs->size - 1) & 0xffff0000),
1367     hpriv->mmio + AHCI_WINDOW_SIZE(i));
1368     }
1369     diff --git a/drivers/ata/pata_octeon_cf.c b/drivers/ata/pata_octeon_cf.c
1370     index 2a97d3a531ec..afc252f523f0 100644
1371     --- a/drivers/ata/pata_octeon_cf.c
1372     +++ b/drivers/ata/pata_octeon_cf.c
1373     @@ -1053,7 +1053,7 @@ static struct of_device_id octeon_cf_match[] = {
1374     },
1375     {},
1376     };
1377     -MODULE_DEVICE_TABLE(of, octeon_i2c_match);
1378     +MODULE_DEVICE_TABLE(of, octeon_cf_match);
1379    
1380     static struct platform_driver octeon_cf_driver = {
1381     .probe = octeon_cf_probe,
1382     diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c
1383     index ee731bb7d957..b389c1dbcdf7 100644
1384     --- a/drivers/base/regmap/regmap.c
1385     +++ b/drivers/base/regmap/regmap.c
1386     @@ -944,11 +944,10 @@ EXPORT_SYMBOL_GPL(devm_regmap_init);
1387     static void regmap_field_init(struct regmap_field *rm_field,
1388     struct regmap *regmap, struct reg_field reg_field)
1389     {
1390     - int field_bits = reg_field.msb - reg_field.lsb + 1;
1391     rm_field->regmap = regmap;
1392     rm_field->reg = reg_field.reg;
1393     rm_field->shift = reg_field.lsb;
1394     - rm_field->mask = ((BIT(field_bits) - 1) << reg_field.lsb);
1395     + rm_field->mask = GENMASK(reg_field.msb, reg_field.lsb);
1396     rm_field->id_size = reg_field.id_size;
1397     rm_field->id_offset = reg_field.id_offset;
1398     }
1399     @@ -2317,7 +2316,7 @@ int regmap_bulk_read(struct regmap *map, unsigned int reg, void *val,
1400     &ival);
1401     if (ret != 0)
1402     return ret;
1403     - memcpy(val + (i * val_bytes), &ival, val_bytes);
1404     + map->format.format_val(val + (i * val_bytes), ival, 0);
1405     }
1406     }
1407    
1408     diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
1409     index 5d684d97dc6d..501a8ca662f4 100644
1410     --- a/drivers/block/rbd.c
1411     +++ b/drivers/block/rbd.c
1412     @@ -1998,11 +1998,11 @@ static struct rbd_obj_request *rbd_obj_request_create(const char *object_name,
1413     rbd_assert(obj_request_type_valid(type));
1414    
1415     size = strlen(object_name) + 1;
1416     - name = kmalloc(size, GFP_KERNEL);
1417     + name = kmalloc(size, GFP_NOIO);
1418     if (!name)
1419     return NULL;
1420    
1421     - obj_request = kmem_cache_zalloc(rbd_obj_request_cache, GFP_KERNEL);
1422     + obj_request = kmem_cache_zalloc(rbd_obj_request_cache, GFP_NOIO);
1423     if (!obj_request) {
1424     kfree(name);
1425     return NULL;
1426     diff --git a/drivers/bluetooth/ath3k.c b/drivers/bluetooth/ath3k.c
1427     index 288547a3c566..8dc319dd3150 100644
1428     --- a/drivers/bluetooth/ath3k.c
1429     +++ b/drivers/bluetooth/ath3k.c
1430     @@ -80,6 +80,7 @@ static const struct usb_device_id ath3k_table[] = {
1431     { USB_DEVICE(0x0489, 0xe057) },
1432     { USB_DEVICE(0x0489, 0xe056) },
1433     { USB_DEVICE(0x0489, 0xe05f) },
1434     + { USB_DEVICE(0x0489, 0xe076) },
1435     { USB_DEVICE(0x0489, 0xe078) },
1436     { USB_DEVICE(0x04c5, 0x1330) },
1437     { USB_DEVICE(0x04CA, 0x3004) },
1438     @@ -88,6 +89,8 @@ static const struct usb_device_id ath3k_table[] = {
1439     { USB_DEVICE(0x04CA, 0x3007) },
1440     { USB_DEVICE(0x04CA, 0x3008) },
1441     { USB_DEVICE(0x04CA, 0x300b) },
1442     + { USB_DEVICE(0x04CA, 0x300d) },
1443     + { USB_DEVICE(0x04CA, 0x300f) },
1444     { USB_DEVICE(0x04CA, 0x3010) },
1445     { USB_DEVICE(0x0930, 0x0219) },
1446     { USB_DEVICE(0x0930, 0x0220) },
1447     @@ -111,6 +114,7 @@ static const struct usb_device_id ath3k_table[] = {
1448     { USB_DEVICE(0x13d3, 0x3408) },
1449     { USB_DEVICE(0x13d3, 0x3423) },
1450     { USB_DEVICE(0x13d3, 0x3432) },
1451     + { USB_DEVICE(0x13d3, 0x3474) },
1452    
1453     /* Atheros AR5BBU12 with sflash firmware */
1454     { USB_DEVICE(0x0489, 0xE02C) },
1455     @@ -135,6 +139,7 @@ static const struct usb_device_id ath3k_blist_tbl[] = {
1456     { USB_DEVICE(0x0489, 0xe056), .driver_info = BTUSB_ATH3012 },
1457     { USB_DEVICE(0x0489, 0xe057), .driver_info = BTUSB_ATH3012 },
1458     { USB_DEVICE(0x0489, 0xe05f), .driver_info = BTUSB_ATH3012 },
1459     + { USB_DEVICE(0x0489, 0xe076), .driver_info = BTUSB_ATH3012 },
1460     { USB_DEVICE(0x0489, 0xe078), .driver_info = BTUSB_ATH3012 },
1461     { USB_DEVICE(0x04c5, 0x1330), .driver_info = BTUSB_ATH3012 },
1462     { USB_DEVICE(0x04ca, 0x3004), .driver_info = BTUSB_ATH3012 },
1463     @@ -143,6 +148,8 @@ static const struct usb_device_id ath3k_blist_tbl[] = {
1464     { USB_DEVICE(0x04ca, 0x3007), .driver_info = BTUSB_ATH3012 },
1465     { USB_DEVICE(0x04ca, 0x3008), .driver_info = BTUSB_ATH3012 },
1466     { USB_DEVICE(0x04ca, 0x300b), .driver_info = BTUSB_ATH3012 },
1467     + { USB_DEVICE(0x04ca, 0x300d), .driver_info = BTUSB_ATH3012 },
1468     + { USB_DEVICE(0x04ca, 0x300f), .driver_info = BTUSB_ATH3012 },
1469     { USB_DEVICE(0x04ca, 0x3010), .driver_info = BTUSB_ATH3012 },
1470     { USB_DEVICE(0x0930, 0x0219), .driver_info = BTUSB_ATH3012 },
1471     { USB_DEVICE(0x0930, 0x0220), .driver_info = BTUSB_ATH3012 },
1472     @@ -166,6 +173,7 @@ static const struct usb_device_id ath3k_blist_tbl[] = {
1473     { USB_DEVICE(0x13d3, 0x3408), .driver_info = BTUSB_ATH3012 },
1474     { USB_DEVICE(0x13d3, 0x3423), .driver_info = BTUSB_ATH3012 },
1475     { USB_DEVICE(0x13d3, 0x3432), .driver_info = BTUSB_ATH3012 },
1476     + { USB_DEVICE(0x13d3, 0x3474), .driver_info = BTUSB_ATH3012 },
1477    
1478     /* Atheros AR5BBU22 with sflash firmware */
1479     { USB_DEVICE(0x0489, 0xE036), .driver_info = BTUSB_ATH3012 },
1480     diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
1481     index 813bb06a8889..c675e2bd9fd3 100644
1482     --- a/drivers/bluetooth/btusb.c
1483     +++ b/drivers/bluetooth/btusb.c
1484     @@ -168,6 +168,7 @@ static const struct usb_device_id blacklist_table[] = {
1485     { USB_DEVICE(0x0489, 0xe056), .driver_info = BTUSB_ATH3012 },
1486     { USB_DEVICE(0x0489, 0xe057), .driver_info = BTUSB_ATH3012 },
1487     { USB_DEVICE(0x0489, 0xe05f), .driver_info = BTUSB_ATH3012 },
1488     + { USB_DEVICE(0x0489, 0xe076), .driver_info = BTUSB_ATH3012 },
1489     { USB_DEVICE(0x0489, 0xe078), .driver_info = BTUSB_ATH3012 },
1490     { USB_DEVICE(0x04c5, 0x1330), .driver_info = BTUSB_ATH3012 },
1491     { USB_DEVICE(0x04ca, 0x3004), .driver_info = BTUSB_ATH3012 },
1492     @@ -176,6 +177,8 @@ static const struct usb_device_id blacklist_table[] = {
1493     { USB_DEVICE(0x04ca, 0x3007), .driver_info = BTUSB_ATH3012 },
1494     { USB_DEVICE(0x04ca, 0x3008), .driver_info = BTUSB_ATH3012 },
1495     { USB_DEVICE(0x04ca, 0x300b), .driver_info = BTUSB_ATH3012 },
1496     + { USB_DEVICE(0x04ca, 0x300d), .driver_info = BTUSB_ATH3012 },
1497     + { USB_DEVICE(0x04ca, 0x300f), .driver_info = BTUSB_ATH3012 },
1498     { USB_DEVICE(0x04ca, 0x3010), .driver_info = BTUSB_ATH3012 },
1499     { USB_DEVICE(0x0930, 0x0219), .driver_info = BTUSB_ATH3012 },
1500     { USB_DEVICE(0x0930, 0x0220), .driver_info = BTUSB_ATH3012 },
1501     @@ -199,6 +202,7 @@ static const struct usb_device_id blacklist_table[] = {
1502     { USB_DEVICE(0x13d3, 0x3408), .driver_info = BTUSB_ATH3012 },
1503     { USB_DEVICE(0x13d3, 0x3423), .driver_info = BTUSB_ATH3012 },
1504     { USB_DEVICE(0x13d3, 0x3432), .driver_info = BTUSB_ATH3012 },
1505     + { USB_DEVICE(0x13d3, 0x3474), .driver_info = BTUSB_ATH3012 },
1506    
1507     /* Atheros AR5BBU12 with sflash firmware */
1508     { USB_DEVICE(0x0489, 0xe02c), .driver_info = BTUSB_IGNORE },
1509     @@ -1589,6 +1593,8 @@ static int btusb_setup_intel(struct hci_dev *hdev)
1510     }
1511     fw_ptr = fw->data;
1512    
1513     + kfree_skb(skb);
1514     +
1515     /* This Intel specific command enables the manufacturer mode of the
1516     * controller.
1517     *
1518     diff --git a/drivers/bus/arm-ccn.c b/drivers/bus/arm-ccn.c
1519     index aaa0f2a87118..60397ec77ff7 100644
1520     --- a/drivers/bus/arm-ccn.c
1521     +++ b/drivers/bus/arm-ccn.c
1522     @@ -212,7 +212,7 @@ static int arm_ccn_node_to_xp_port(int node)
1523    
1524     static void arm_ccn_pmu_config_set(u64 *config, u32 node_xp, u32 type, u32 port)
1525     {
1526     - *config &= ~((0xff << 0) | (0xff << 8) | (0xff << 24));
1527     + *config &= ~((0xff << 0) | (0xff << 8) | (0x3 << 24));
1528     *config |= (node_xp << 0) | (type << 8) | (port << 24);
1529     }
1530    
1531     diff --git a/drivers/char/agp/intel-gtt.c b/drivers/char/agp/intel-gtt.c
1532     index 9a024f899dd4..9a99d0a3ff08 100644
1533     --- a/drivers/char/agp/intel-gtt.c
1534     +++ b/drivers/char/agp/intel-gtt.c
1535     @@ -585,7 +585,7 @@ static inline int needs_ilk_vtd_wa(void)
1536     /* Query intel_iommu to see if we need the workaround. Presumably that
1537     * was loaded first.
1538     */
1539     - if ((gpu_devid == PCI_DEVICE_ID_INTEL_IRONLAKE_M_HB ||
1540     + if ((gpu_devid == PCI_DEVICE_ID_INTEL_IRONLAKE_D_IG ||
1541     gpu_devid == PCI_DEVICE_ID_INTEL_IRONLAKE_M_IG) &&
1542     intel_iommu_gfx_mapped)
1543     return 1;
1544     diff --git a/drivers/char/tpm/tpm_ibmvtpm.c b/drivers/char/tpm/tpm_ibmvtpm.c
1545     index 102463ba745d..643bba7d6f81 100644
1546     --- a/drivers/char/tpm/tpm_ibmvtpm.c
1547     +++ b/drivers/char/tpm/tpm_ibmvtpm.c
1548     @@ -579,6 +579,9 @@ static int tpm_ibmvtpm_probe(struct vio_dev *vio_dev,
1549     goto cleanup;
1550     }
1551    
1552     + ibmvtpm->dev = dev;
1553     + ibmvtpm->vdev = vio_dev;
1554     +
1555     crq_q = &ibmvtpm->crq_queue;
1556     crq_q->crq_addr = (struct ibmvtpm_crq *)get_zeroed_page(GFP_KERNEL);
1557     if (!crq_q->crq_addr) {
1558     @@ -623,8 +626,6 @@ static int tpm_ibmvtpm_probe(struct vio_dev *vio_dev,
1559    
1560     crq_q->index = 0;
1561    
1562     - ibmvtpm->dev = dev;
1563     - ibmvtpm->vdev = vio_dev;
1564     TPM_VPRIV(chip) = (void *)ibmvtpm;
1565    
1566     spin_lock_init(&ibmvtpm->rtce_lock);
1567     diff --git a/drivers/clk/at91/clk-pll.c b/drivers/clk/at91/clk-pll.c
1568     index 6ec79dbc0840..cbbe40377ad6 100644
1569     --- a/drivers/clk/at91/clk-pll.c
1570     +++ b/drivers/clk/at91/clk-pll.c
1571     @@ -173,8 +173,7 @@ static long clk_pll_get_best_div_mul(struct clk_pll *pll, unsigned long rate,
1572     int i = 0;
1573    
1574     /* Check if parent_rate is a valid input rate */
1575     - if (parent_rate < characteristics->input.min ||
1576     - parent_rate > characteristics->input.max)
1577     + if (parent_rate < characteristics->input.min)
1578     return -ERANGE;
1579    
1580     /*
1581     @@ -187,6 +186,15 @@ static long clk_pll_get_best_div_mul(struct clk_pll *pll, unsigned long rate,
1582     if (!mindiv)
1583     mindiv = 1;
1584    
1585     + if (parent_rate > characteristics->input.max) {
1586     + tmpdiv = DIV_ROUND_UP(parent_rate, characteristics->input.max);
1587     + if (tmpdiv > PLL_DIV_MAX)
1588     + return -ERANGE;
1589     +
1590     + if (tmpdiv > mindiv)
1591     + mindiv = tmpdiv;
1592     + }
1593     +
1594     /*
1595     * Calculate the maximum divider which is limited by PLL register
1596     * layout (limited by the MUL or DIV field size).
1597     diff --git a/drivers/clk/at91/pmc.h b/drivers/clk/at91/pmc.h
1598     index 52d2041fa3f6..af2c99195541 100644
1599     --- a/drivers/clk/at91/pmc.h
1600     +++ b/drivers/clk/at91/pmc.h
1601     @@ -120,7 +120,7 @@ extern void __init of_at91sam9x5_clk_smd_setup(struct device_node *np,
1602     struct at91_pmc *pmc);
1603     #endif
1604    
1605     -#if defined(CONFIG_HAVE_AT91_SMD)
1606     +#if defined(CONFIG_HAVE_AT91_H32MX)
1607     extern void __init of_sama5d4_clk_h32mx_setup(struct device_node *np,
1608     struct at91_pmc *pmc);
1609     #endif
1610     diff --git a/drivers/clocksource/exynos_mct.c b/drivers/clocksource/exynos_mct.c
1611     index 83564c9cfdbe..c844616028d2 100644
1612     --- a/drivers/clocksource/exynos_mct.c
1613     +++ b/drivers/clocksource/exynos_mct.c
1614     @@ -466,15 +466,12 @@ static int exynos4_local_timer_setup(struct clock_event_device *evt)
1615     exynos4_mct_write(TICK_BASE_CNT, mevt->base + MCT_L_TCNTB_OFFSET);
1616    
1617     if (mct_int_type == MCT_INT_SPI) {
1618     - evt->irq = mct_irqs[MCT_L0_IRQ + cpu];
1619     - if (request_irq(evt->irq, exynos4_mct_tick_isr,
1620     - IRQF_TIMER | IRQF_NOBALANCING,
1621     - evt->name, mevt)) {
1622     - pr_err("exynos-mct: cannot register IRQ %d\n",
1623     - evt->irq);
1624     +
1625     + if (evt->irq == -1)
1626     return -EIO;
1627     - }
1628     - irq_force_affinity(mct_irqs[MCT_L0_IRQ + cpu], cpumask_of(cpu));
1629     +
1630     + irq_force_affinity(evt->irq, cpumask_of(cpu));
1631     + enable_irq(evt->irq);
1632     } else {
1633     enable_percpu_irq(mct_irqs[MCT_L0_IRQ], 0);
1634     }
1635     @@ -487,10 +484,12 @@ static int exynos4_local_timer_setup(struct clock_event_device *evt)
1636     static void exynos4_local_timer_stop(struct clock_event_device *evt)
1637     {
1638     evt->set_mode(CLOCK_EVT_MODE_UNUSED, evt);
1639     - if (mct_int_type == MCT_INT_SPI)
1640     - free_irq(evt->irq, this_cpu_ptr(&percpu_mct_tick));
1641     - else
1642     + if (mct_int_type == MCT_INT_SPI) {
1643     + if (evt->irq != -1)
1644     + disable_irq_nosync(evt->irq);
1645     + } else {
1646     disable_percpu_irq(mct_irqs[MCT_L0_IRQ]);
1647     + }
1648     }
1649    
1650     static int exynos4_mct_cpu_notify(struct notifier_block *self,
1651     @@ -522,7 +521,7 @@ static struct notifier_block exynos4_mct_cpu_nb = {
1652    
1653     static void __init exynos4_timer_resources(struct device_node *np, void __iomem *base)
1654     {
1655     - int err;
1656     + int err, cpu;
1657     struct mct_clock_event_device *mevt = this_cpu_ptr(&percpu_mct_tick);
1658     struct clk *mct_clk, *tick_clk;
1659    
1660     @@ -549,7 +548,25 @@ static void __init exynos4_timer_resources(struct device_node *np, void __iomem
1661     WARN(err, "MCT: can't request IRQ %d (%d)\n",
1662     mct_irqs[MCT_L0_IRQ], err);
1663     } else {
1664     - irq_set_affinity(mct_irqs[MCT_L0_IRQ], cpumask_of(0));
1665     + for_each_possible_cpu(cpu) {
1666     + int mct_irq = mct_irqs[MCT_L0_IRQ + cpu];
1667     + struct mct_clock_event_device *pcpu_mevt =
1668     + per_cpu_ptr(&percpu_mct_tick, cpu);
1669     +
1670     + pcpu_mevt->evt.irq = -1;
1671     +
1672     + irq_set_status_flags(mct_irq, IRQ_NOAUTOEN);
1673     + if (request_irq(mct_irq,
1674     + exynos4_mct_tick_isr,
1675     + IRQF_TIMER | IRQF_NOBALANCING,
1676     + pcpu_mevt->name, pcpu_mevt)) {
1677     + pr_err("exynos-mct: cannot register IRQ (cpu%d)\n",
1678     + cpu);
1679     +
1680     + continue;
1681     + }
1682     + pcpu_mevt->evt.irq = mct_irq;
1683     + }
1684     }
1685    
1686     err = register_cpu_notifier(&exynos4_mct_cpu_nb);
1687     diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c
1688     index 27bb6d3877ed..d0d21363c63f 100644
1689     --- a/drivers/cpufreq/intel_pstate.c
1690     +++ b/drivers/cpufreq/intel_pstate.c
1691     @@ -443,7 +443,7 @@ static void byt_set_pstate(struct cpudata *cpudata, int pstate)
1692    
1693     val |= vid;
1694    
1695     - wrmsrl(MSR_IA32_PERF_CTL, val);
1696     + wrmsrl_on_cpu(cpudata->cpu, MSR_IA32_PERF_CTL, val);
1697     }
1698    
1699     #define BYT_BCLK_FREQS 5
1700     diff --git a/drivers/crypto/caam/caamhash.c b/drivers/crypto/caam/caamhash.c
1701     index f347ab7eea95..08b0da23c4ab 100644
1702     --- a/drivers/crypto/caam/caamhash.c
1703     +++ b/drivers/crypto/caam/caamhash.c
1704     @@ -1543,6 +1543,8 @@ static int ahash_init(struct ahash_request *req)
1705    
1706     state->current_buf = 0;
1707     state->buf_dma = 0;
1708     + state->buflen_0 = 0;
1709     + state->buflen_1 = 0;
1710    
1711     return 0;
1712     }
1713     diff --git a/drivers/crypto/caam/caamrng.c b/drivers/crypto/caam/caamrng.c
1714     index ae31e555793c..a48dc251b14f 100644
1715     --- a/drivers/crypto/caam/caamrng.c
1716     +++ b/drivers/crypto/caam/caamrng.c
1717     @@ -56,7 +56,7 @@
1718    
1719     /* Buffer, its dma address and lock */
1720     struct buf_data {
1721     - u8 buf[RN_BUF_SIZE];
1722     + u8 buf[RN_BUF_SIZE] ____cacheline_aligned;
1723     dma_addr_t addr;
1724     struct completion filled;
1725     u32 hw_desc[DESC_JOB_O_LEN];
1726     diff --git a/drivers/crypto/talitos.c b/drivers/crypto/talitos.c
1727     index 624b8be0c365..307931528eb2 100644
1728     --- a/drivers/crypto/talitos.c
1729     +++ b/drivers/crypto/talitos.c
1730     @@ -927,7 +927,8 @@ static int sg_to_link_tbl(struct scatterlist *sg, int sg_count,
1731     sg_count--;
1732     link_tbl_ptr--;
1733     }
1734     - be16_add_cpu(&link_tbl_ptr->len, cryptlen);
1735     + link_tbl_ptr->len = cpu_to_be16(be16_to_cpu(link_tbl_ptr->len)
1736     + + cryptlen);
1737    
1738     /* tag end of link table */
1739     link_tbl_ptr->j_extent = DESC_PTR_LNKTBL_RETURN;
1740     @@ -2563,6 +2564,7 @@ static struct talitos_crypto_alg *talitos_alg_alloc(struct device *dev,
1741     break;
1742     default:
1743     dev_err(dev, "unknown algorithm type %d\n", t_alg->algt.type);
1744     + kfree(t_alg);
1745     return ERR_PTR(-EINVAL);
1746     }
1747    
1748     diff --git a/drivers/dma/mv_xor.c b/drivers/dma/mv_xor.c
1749     index a63837ca1410..ede8e868016d 100644
1750     --- a/drivers/dma/mv_xor.c
1751     +++ b/drivers/dma/mv_xor.c
1752     @@ -277,7 +277,8 @@ static void mv_xor_slot_cleanup(struct mv_xor_chan *mv_chan)
1753     dma_cookie_t cookie = 0;
1754     int busy = mv_chan_is_busy(mv_chan);
1755     u32 current_desc = mv_chan_get_current_desc(mv_chan);
1756     - int seen_current = 0;
1757     + int current_cleaned = 0;
1758     + struct mv_xor_desc *hw_desc;
1759    
1760     dev_dbg(mv_chan_to_devp(mv_chan), "%s %d\n", __func__, __LINE__);
1761     dev_dbg(mv_chan_to_devp(mv_chan), "current_desc %x\n", current_desc);
1762     @@ -289,38 +290,57 @@ static void mv_xor_slot_cleanup(struct mv_xor_chan *mv_chan)
1763    
1764     list_for_each_entry_safe(iter, _iter, &mv_chan->chain,
1765     chain_node) {
1766     - prefetch(_iter);
1767     - prefetch(&_iter->async_tx);
1768    
1769     - /* do not advance past the current descriptor loaded into the
1770     - * hardware channel, subsequent descriptors are either in
1771     - * process or have not been submitted
1772     - */
1773     - if (seen_current)
1774     - break;
1775     + /* clean finished descriptors */
1776     + hw_desc = iter->hw_desc;
1777     + if (hw_desc->status & XOR_DESC_SUCCESS) {
1778     + cookie = mv_xor_run_tx_complete_actions(iter, mv_chan,
1779     + cookie);
1780    
1781     - /* stop the search if we reach the current descriptor and the
1782     - * channel is busy
1783     - */
1784     - if (iter->async_tx.phys == current_desc) {
1785     - seen_current = 1;
1786     - if (busy)
1787     + /* done processing desc, clean slot */
1788     + mv_xor_clean_slot(iter, mv_chan);
1789     +
1790     + /* break if we did cleaned the current */
1791     + if (iter->async_tx.phys == current_desc) {
1792     + current_cleaned = 1;
1793     + break;
1794     + }
1795     + } else {
1796     + if (iter->async_tx.phys == current_desc) {
1797     + current_cleaned = 0;
1798     break;
1799     + }
1800     }
1801     -
1802     - cookie = mv_xor_run_tx_complete_actions(iter, mv_chan, cookie);
1803     -
1804     - if (mv_xor_clean_slot(iter, mv_chan))
1805     - break;
1806     }
1807    
1808     if ((busy == 0) && !list_empty(&mv_chan->chain)) {
1809     - struct mv_xor_desc_slot *chain_head;
1810     - chain_head = list_entry(mv_chan->chain.next,
1811     - struct mv_xor_desc_slot,
1812     - chain_node);
1813     -
1814     - mv_xor_start_new_chain(mv_chan, chain_head);
1815     + if (current_cleaned) {
1816     + /*
1817     + * current descriptor cleaned and removed, run
1818     + * from list head
1819     + */
1820     + iter = list_entry(mv_chan->chain.next,
1821     + struct mv_xor_desc_slot,
1822     + chain_node);
1823     + mv_xor_start_new_chain(mv_chan, iter);
1824     + } else {
1825     + if (!list_is_last(&iter->chain_node, &mv_chan->chain)) {
1826     + /*
1827     + * descriptors are still waiting after
1828     + * current, trigger them
1829     + */
1830     + iter = list_entry(iter->chain_node.next,
1831     + struct mv_xor_desc_slot,
1832     + chain_node);
1833     + mv_xor_start_new_chain(mv_chan, iter);
1834     + } else {
1835     + /*
1836     + * some descriptors are still waiting
1837     + * to be cleaned
1838     + */
1839     + tasklet_schedule(&mv_chan->irq_tasklet);
1840     + }
1841     + }
1842     }
1843    
1844     if (cookie > 0)
1845     diff --git a/drivers/dma/mv_xor.h b/drivers/dma/mv_xor.h
1846     index 78edc7e44569..4fa0fe2e2f08 100644
1847     --- a/drivers/dma/mv_xor.h
1848     +++ b/drivers/dma/mv_xor.h
1849     @@ -35,6 +35,7 @@
1850     #define XOR_OPERATION_MODE_XOR 0
1851     #define XOR_OPERATION_MODE_MEMCPY 2
1852     #define XOR_DESCRIPTOR_SWAP BIT(14)
1853     +#define XOR_DESC_SUCCESS 0x40000000
1854    
1855     #define XOR_DESC_DMA_OWNED BIT(31)
1856     #define XOR_DESC_EOD_INT_EN BIT(31)
1857     diff --git a/drivers/gpio/gpio-crystalcove.c b/drivers/gpio/gpio-crystalcove.c
1858     index a7cf0c193ba8..2a8791cc138a 100644
1859     --- a/drivers/gpio/gpio-crystalcove.c
1860     +++ b/drivers/gpio/gpio-crystalcove.c
1861     @@ -250,6 +250,7 @@ static struct irq_chip crystalcove_irqchip = {
1862     .irq_set_type = crystalcove_irq_type,
1863     .irq_bus_lock = crystalcove_bus_lock,
1864     .irq_bus_sync_unlock = crystalcove_bus_sync_unlock,
1865     + .flags = IRQCHIP_SKIP_SET_WAKE,
1866     };
1867    
1868     static irqreturn_t crystalcove_gpio_irq_handler(int irq, void *data)
1869     diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c b/drivers/gpu/drm/drm_dp_mst_topology.c
1870     index f50d884b81cf..1f5e42a1f5b4 100644
1871     --- a/drivers/gpu/drm/drm_dp_mst_topology.c
1872     +++ b/drivers/gpu/drm/drm_dp_mst_topology.c
1873     @@ -1152,6 +1152,8 @@ static struct drm_dp_mst_branch *drm_dp_get_mst_branch_device(struct drm_dp_mst_
1874     struct drm_dp_mst_port *port;
1875     int i;
1876     /* find the port by iterating down */
1877     +
1878     + mutex_lock(&mgr->lock);
1879     mstb = mgr->mst_primary;
1880    
1881     for (i = 0; i < lct - 1; i++) {
1882     @@ -1171,6 +1173,7 @@ static struct drm_dp_mst_branch *drm_dp_get_mst_branch_device(struct drm_dp_mst_
1883     }
1884     }
1885     kref_get(&mstb->kref);
1886     + mutex_unlock(&mgr->lock);
1887     return mstb;
1888     }
1889    
1890     @@ -1178,7 +1181,7 @@ static void drm_dp_check_and_send_link_address(struct drm_dp_mst_topology_mgr *m
1891     struct drm_dp_mst_branch *mstb)
1892     {
1893     struct drm_dp_mst_port *port;
1894     -
1895     + struct drm_dp_mst_branch *mstb_child;
1896     if (!mstb->link_address_sent) {
1897     drm_dp_send_link_address(mgr, mstb);
1898     mstb->link_address_sent = true;
1899     @@ -1193,17 +1196,31 @@ static void drm_dp_check_and_send_link_address(struct drm_dp_mst_topology_mgr *m
1900     if (!port->available_pbn)
1901     drm_dp_send_enum_path_resources(mgr, mstb, port);
1902    
1903     - if (port->mstb)
1904     - drm_dp_check_and_send_link_address(mgr, port->mstb);
1905     + if (port->mstb) {
1906     + mstb_child = drm_dp_get_validated_mstb_ref(mgr, port->mstb);
1907     + if (mstb_child) {
1908     + drm_dp_check_and_send_link_address(mgr, mstb_child);
1909     + drm_dp_put_mst_branch_device(mstb_child);
1910     + }
1911     + }
1912     }
1913     }
1914    
1915     static void drm_dp_mst_link_probe_work(struct work_struct *work)
1916     {
1917     struct drm_dp_mst_topology_mgr *mgr = container_of(work, struct drm_dp_mst_topology_mgr, work);
1918     + struct drm_dp_mst_branch *mstb;
1919    
1920     - drm_dp_check_and_send_link_address(mgr, mgr->mst_primary);
1921     -
1922     + mutex_lock(&mgr->lock);
1923     + mstb = mgr->mst_primary;
1924     + if (mstb) {
1925     + kref_get(&mstb->kref);
1926     + }
1927     + mutex_unlock(&mgr->lock);
1928     + if (mstb) {
1929     + drm_dp_check_and_send_link_address(mgr, mstb);
1930     + drm_dp_put_mst_branch_device(mstb);
1931     + }
1932     }
1933    
1934     static bool drm_dp_validate_guid(struct drm_dp_mst_topology_mgr *mgr,
1935     diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
1936     index e08a4729596b..9bf747f2a32b 100644
1937     --- a/drivers/gpu/drm/i915/i915_reg.h
1938     +++ b/drivers/gpu/drm/i915/i915_reg.h
1939     @@ -5768,6 +5768,7 @@ enum punit_power_well {
1940     #define HSW_ROW_CHICKEN3_L3_GLOBAL_ATOMICS_DISABLE (1 << 6)
1941    
1942     #define HALF_SLICE_CHICKEN3 0xe184
1943     +#define HSW_SAMPLE_C_PERFORMANCE (1<<9)
1944     #define GEN8_CENTROID_PIXEL_OPT_DIS (1<<8)
1945     #define GEN8_SAMPLER_POWER_BYPASS_DIS (1<<1)
1946    
1947     diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
1948     index a29db0a1da42..3104d06aa20c 100644
1949     --- a/drivers/gpu/drm/i915/intel_dp.c
1950     +++ b/drivers/gpu/drm/i915/intel_dp.c
1951     @@ -778,10 +778,8 @@ intel_dp_aux_ch(struct intel_dp *intel_dp,
1952     DP_AUX_CH_CTL_RECEIVE_ERROR))
1953     continue;
1954     if (status & DP_AUX_CH_CTL_DONE)
1955     - break;
1956     + goto done;
1957     }
1958     - if (status & DP_AUX_CH_CTL_DONE)
1959     - break;
1960     }
1961    
1962     if ((status & DP_AUX_CH_CTL_DONE) == 0) {
1963     @@ -790,6 +788,7 @@ intel_dp_aux_ch(struct intel_dp *intel_dp,
1964     goto out;
1965     }
1966    
1967     +done:
1968     /* Check for timeout or receive error.
1969     * Timeouts occur when the sink is not connected
1970     */
1971     diff --git a/drivers/gpu/drm/i915/intel_i2c.c b/drivers/gpu/drm/i915/intel_i2c.c
1972     index 56e437e31580..ae628001fd97 100644
1973     --- a/drivers/gpu/drm/i915/intel_i2c.c
1974     +++ b/drivers/gpu/drm/i915/intel_i2c.c
1975     @@ -435,7 +435,7 @@ gmbus_xfer(struct i2c_adapter *adapter,
1976     struct intel_gmbus,
1977     adapter);
1978     struct drm_i915_private *dev_priv = bus->dev_priv;
1979     - int i, reg_offset;
1980     + int i = 0, inc, try = 0, reg_offset;
1981     int ret = 0;
1982    
1983     intel_aux_display_runtime_get(dev_priv);
1984     @@ -448,12 +448,14 @@ gmbus_xfer(struct i2c_adapter *adapter,
1985    
1986     reg_offset = dev_priv->gpio_mmio_base;
1987    
1988     +retry:
1989     I915_WRITE(GMBUS0 + reg_offset, bus->reg0);
1990    
1991     - for (i = 0; i < num; i++) {
1992     + for (; i < num; i += inc) {
1993     + inc = 1;
1994     if (gmbus_is_index_read(msgs, i, num)) {
1995     ret = gmbus_xfer_index_read(dev_priv, &msgs[i]);
1996     - i += 1; /* set i to the index of the read xfer */
1997     + inc = 2; /* an index read is two msgs */
1998     } else if (msgs[i].flags & I2C_M_RD) {
1999     ret = gmbus_xfer_read(dev_priv, &msgs[i], 0);
2000     } else {
2001     @@ -525,6 +527,18 @@ clear_err:
2002     adapter->name, msgs[i].addr,
2003     (msgs[i].flags & I2C_M_RD) ? 'r' : 'w', msgs[i].len);
2004    
2005     + /*
2006     + * Passive adapters sometimes NAK the first probe. Retry the first
2007     + * message once on -ENXIO for GMBUS transfers; the bit banging algorithm
2008     + * has retries internally. See also the retry loop in
2009     + * drm_do_probe_ddc_edid, which bails out on the first -ENXIO.
2010     + */
2011     + if (ret == -ENXIO && i == 0 && try++ == 0) {
2012     + DRM_DEBUG_KMS("GMBUS [%s] NAK on first message, retry\n",
2013     + adapter->name);
2014     + goto retry;
2015     + }
2016     +
2017     goto out;
2018    
2019     timeout:
2020     diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
2021     index 83c7ecf2608a..c64f1942e8de 100644
2022     --- a/drivers/gpu/drm/i915/intel_pm.c
2023     +++ b/drivers/gpu/drm/i915/intel_pm.c
2024     @@ -5691,6 +5691,10 @@ static void haswell_init_clock_gating(struct drm_device *dev)
2025     I915_WRITE(GEN7_GT_MODE,
2026     GEN6_WIZ_HASHING_MASK | GEN6_WIZ_HASHING_16x4);
2027    
2028     + /* WaSampleCChickenBitEnable:hsw */
2029     + I915_WRITE(HALF_SLICE_CHICKEN3,
2030     + _MASKED_BIT_ENABLE(HSW_SAMPLE_C_PERFORMANCE));
2031     +
2032     /* WaSwitchSolVfFArbitrationPriority:hsw */
2033     I915_WRITE(GAM_ECOCHK, I915_READ(GAM_ECOCHK) | HSW_ECOCHK_ARB_PRIO_SOL);
2034    
2035     diff --git a/drivers/gpu/drm/mgag200/mgag200_mode.c b/drivers/gpu/drm/mgag200/mgag200_mode.c
2036     index 83485ab81ce8..d8e693d1f6d4 100644
2037     --- a/drivers/gpu/drm/mgag200/mgag200_mode.c
2038     +++ b/drivers/gpu/drm/mgag200/mgag200_mode.c
2039     @@ -1525,6 +1525,11 @@ static int mga_vga_mode_valid(struct drm_connector *connector,
2040     return MODE_BANDWIDTH;
2041     }
2042    
2043     + if ((mode->hdisplay % 8) != 0 || (mode->hsync_start % 8) != 0 ||
2044     + (mode->hsync_end % 8) != 0 || (mode->htotal % 8) != 0) {
2045     + return MODE_H_ILLEGAL;
2046     + }
2047     +
2048     if (mode->crtc_hdisplay > 2048 || mode->crtc_hsync_start > 4096 ||
2049     mode->crtc_hsync_end > 4096 || mode->crtc_htotal > 4096 ||
2050     mode->crtc_vdisplay > 2048 || mode->crtc_vsync_start > 4096 ||
2051     diff --git a/drivers/gpu/drm/qxl/qxl_cmd.c b/drivers/gpu/drm/qxl/qxl_cmd.c
2052     index 97823644d347..f33251d67914 100644
2053     --- a/drivers/gpu/drm/qxl/qxl_cmd.c
2054     +++ b/drivers/gpu/drm/qxl/qxl_cmd.c
2055     @@ -505,6 +505,7 @@ int qxl_hw_surface_alloc(struct qxl_device *qdev,
2056    
2057     cmd = (struct qxl_surface_cmd *)qxl_release_map(qdev, release);
2058     cmd->type = QXL_SURFACE_CMD_CREATE;
2059     + cmd->flags = QXL_SURF_FLAG_KEEP_DATA;
2060     cmd->u.surface_create.format = surf->surf.format;
2061     cmd->u.surface_create.width = surf->surf.width;
2062     cmd->u.surface_create.height = surf->surf.height;
2063     diff --git a/drivers/gpu/drm/qxl/qxl_ioctl.c b/drivers/gpu/drm/qxl/qxl_ioctl.c
2064     index b110883f8253..7354a4cda59d 100644
2065     --- a/drivers/gpu/drm/qxl/qxl_ioctl.c
2066     +++ b/drivers/gpu/drm/qxl/qxl_ioctl.c
2067     @@ -122,8 +122,10 @@ static struct qxl_bo *qxlhw_handle_to_bo(struct qxl_device *qdev,
2068     qobj = gem_to_qxl_bo(gobj);
2069    
2070     ret = qxl_release_list_add(release, qobj);
2071     - if (ret)
2072     + if (ret) {
2073     + drm_gem_object_unreference_unlocked(gobj);
2074     return NULL;
2075     + }
2076    
2077     return qobj;
2078     }
2079     diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c
2080     index 4f9ec36698f7..ce8cab52285b 100644
2081     --- a/drivers/gpu/drm/radeon/atombios_crtc.c
2082     +++ b/drivers/gpu/drm/radeon/atombios_crtc.c
2083     @@ -580,9 +580,6 @@ static u32 atombios_adjust_pll(struct drm_crtc *crtc,
2084     else
2085     radeon_crtc->pll_flags |= RADEON_PLL_PREFER_LOW_REF_DIV;
2086    
2087     - /* if there is no audio, set MINM_OVER_MAXP */
2088     - if (!drm_detect_monitor_audio(radeon_connector_edid(connector)))
2089     - radeon_crtc->pll_flags |= RADEON_PLL_PREFER_MINM_OVER_MAXP;
2090     if (rdev->family < CHIP_RV770)
2091     radeon_crtc->pll_flags |= RADEON_PLL_PREFER_MINM_OVER_MAXP;
2092     /* use frac fb div on APUs */
2093     @@ -1789,9 +1786,7 @@ static int radeon_get_shared_nondp_ppll(struct drm_crtc *crtc)
2094     if ((crtc->mode.clock == test_crtc->mode.clock) &&
2095     (adjusted_clock == test_adjusted_clock) &&
2096     (radeon_crtc->ss_enabled == test_radeon_crtc->ss_enabled) &&
2097     - (test_radeon_crtc->pll_id != ATOM_PPLL_INVALID) &&
2098     - (drm_detect_monitor_audio(radeon_connector_edid(test_radeon_crtc->connector)) ==
2099     - drm_detect_monitor_audio(radeon_connector_edid(radeon_crtc->connector))))
2100     + (test_radeon_crtc->pll_id != ATOM_PPLL_INVALID))
2101     return test_radeon_crtc->pll_id;
2102     }
2103     }
2104     diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c
2105     index 63e8bff5d47a..87073e69fc0d 100644
2106     --- a/drivers/gpu/drm/radeon/cik.c
2107     +++ b/drivers/gpu/drm/radeon/cik.c
2108     @@ -4523,6 +4523,31 @@ void cik_compute_set_wptr(struct radeon_device *rdev,
2109     WDOORBELL32(ring->doorbell_index, ring->wptr);
2110     }
2111    
2112     +static void cik_compute_stop(struct radeon_device *rdev,
2113     + struct radeon_ring *ring)
2114     +{
2115     + u32 j, tmp;
2116     +
2117     + cik_srbm_select(rdev, ring->me, ring->pipe, ring->queue, 0);
2118     + /* Disable wptr polling. */
2119     + tmp = RREG32(CP_PQ_WPTR_POLL_CNTL);
2120     + tmp &= ~WPTR_POLL_EN;
2121     + WREG32(CP_PQ_WPTR_POLL_CNTL, tmp);
2122     + /* Disable HQD. */
2123     + if (RREG32(CP_HQD_ACTIVE) & 1) {
2124     + WREG32(CP_HQD_DEQUEUE_REQUEST, 1);
2125     + for (j = 0; j < rdev->usec_timeout; j++) {
2126     + if (!(RREG32(CP_HQD_ACTIVE) & 1))
2127     + break;
2128     + udelay(1);
2129     + }
2130     + WREG32(CP_HQD_DEQUEUE_REQUEST, 0);
2131     + WREG32(CP_HQD_PQ_RPTR, 0);
2132     + WREG32(CP_HQD_PQ_WPTR, 0);
2133     + }
2134     + cik_srbm_select(rdev, 0, 0, 0, 0);
2135     +}
2136     +
2137     /**
2138     * cik_cp_compute_enable - enable/disable the compute CP MEs
2139     *
2140     @@ -4536,6 +4561,15 @@ static void cik_cp_compute_enable(struct radeon_device *rdev, bool enable)
2141     if (enable)
2142     WREG32(CP_MEC_CNTL, 0);
2143     else {
2144     + /*
2145     + * To make hibernation reliable we need to clear compute ring
2146     + * configuration before halting the compute ring.
2147     + */
2148     + mutex_lock(&rdev->srbm_mutex);
2149     + cik_compute_stop(rdev,&rdev->ring[CAYMAN_RING_TYPE_CP1_INDEX]);
2150     + cik_compute_stop(rdev,&rdev->ring[CAYMAN_RING_TYPE_CP2_INDEX]);
2151     + mutex_unlock(&rdev->srbm_mutex);
2152     +
2153     WREG32(CP_MEC_CNTL, (MEC_ME1_HALT | MEC_ME2_HALT));
2154     rdev->ring[CAYMAN_RING_TYPE_CP1_INDEX].ready = false;
2155     rdev->ring[CAYMAN_RING_TYPE_CP2_INDEX].ready = false;
2156     diff --git a/drivers/gpu/drm/radeon/cik_sdma.c b/drivers/gpu/drm/radeon/cik_sdma.c
2157     index d748963af08b..02246acba36a 100644
2158     --- a/drivers/gpu/drm/radeon/cik_sdma.c
2159     +++ b/drivers/gpu/drm/radeon/cik_sdma.c
2160     @@ -268,6 +268,17 @@ static void cik_sdma_gfx_stop(struct radeon_device *rdev)
2161     }
2162     rdev->ring[R600_RING_TYPE_DMA_INDEX].ready = false;
2163     rdev->ring[CAYMAN_RING_TYPE_DMA1_INDEX].ready = false;
2164     +
2165     + /* FIXME use something else than big hammer but after few days can not
2166     + * seem to find good combination so reset SDMA blocks as it seems we
2167     + * do not shut them down properly. This fix hibernation and does not
2168     + * affect suspend to ram.
2169     + */
2170     + WREG32(SRBM_SOFT_RESET, SOFT_RESET_SDMA | SOFT_RESET_SDMA1);
2171     + (void)RREG32(SRBM_SOFT_RESET);
2172     + udelay(50);
2173     + WREG32(SRBM_SOFT_RESET, 0);
2174     + (void)RREG32(SRBM_SOFT_RESET);
2175     }
2176    
2177     /**
2178     diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
2179     index bdf263a4a67c..5d54ab0fbe2b 100644
2180     --- a/drivers/gpu/drm/radeon/radeon_device.c
2181     +++ b/drivers/gpu/drm/radeon/radeon_device.c
2182     @@ -1426,6 +1426,21 @@ int radeon_device_init(struct radeon_device *rdev,
2183     if (r)
2184     DRM_ERROR("ib ring test failed (%d).\n", r);
2185    
2186     + /*
2187     + * Turks/Thames GPU will freeze whole laptop if DPM is not restarted
2188     + * after the CP ring have chew one packet at least. Hence here we stop
2189     + * and restart DPM after the radeon_ib_ring_tests().
2190     + */
2191     + if (rdev->pm.dpm_enabled &&
2192     + (rdev->pm.pm_method == PM_METHOD_DPM) &&
2193     + (rdev->family == CHIP_TURKS) &&
2194     + (rdev->flags & RADEON_IS_MOBILITY)) {
2195     + mutex_lock(&rdev->pm.mutex);
2196     + radeon_dpm_disable(rdev);
2197     + radeon_dpm_enable(rdev);
2198     + mutex_unlock(&rdev->pm.mutex);
2199     + }
2200     +
2201     if ((radeon_testing & 1)) {
2202     if (rdev->accel_working)
2203     radeon_test_moves(rdev);
2204     diff --git a/drivers/gpu/drm/radeon/radeon_irq_kms.c b/drivers/gpu/drm/radeon/radeon_irq_kms.c
2205     index 00fc59762e0d..bbcd754dc7d0 100644
2206     --- a/drivers/gpu/drm/radeon/radeon_irq_kms.c
2207     +++ b/drivers/gpu/drm/radeon/radeon_irq_kms.c
2208     @@ -79,10 +79,12 @@ static void radeon_hotplug_work_func(struct work_struct *work)
2209     struct drm_mode_config *mode_config = &dev->mode_config;
2210     struct drm_connector *connector;
2211    
2212     + mutex_lock(&mode_config->mutex);
2213     if (mode_config->num_connector) {
2214     list_for_each_entry(connector, &mode_config->connector_list, head)
2215     radeon_connector_hotplug(connector);
2216     }
2217     + mutex_unlock(&mode_config->mutex);
2218     /* Just fire off a uevent and let userspace tell us what to do */
2219     drm_helper_hpd_irq_event(dev);
2220     }
2221     diff --git a/drivers/gpu/drm/radeon/radeon_kms.c b/drivers/gpu/drm/radeon/radeon_kms.c
2222     index 8ec652722e4f..46bcd5d38a1e 100644
2223     --- a/drivers/gpu/drm/radeon/radeon_kms.c
2224     +++ b/drivers/gpu/drm/radeon/radeon_kms.c
2225     @@ -540,6 +540,9 @@ static int radeon_info_ioctl(struct drm_device *dev, void *data, struct drm_file
2226     else
2227     *value = 1;
2228     break;
2229     + case RADEON_INFO_VA_UNMAP_WORKING:
2230     + *value = true;
2231     + break;
2232     default:
2233     DRM_DEBUG_KMS("Invalid request %d\n", info->request);
2234     return -EINVAL;
2235     diff --git a/drivers/gpu/drm/radeon/radeon_vm.c b/drivers/gpu/drm/radeon/radeon_vm.c
2236     index 2ab80a5331a4..190eb5bee4eb 100644
2237     --- a/drivers/gpu/drm/radeon/radeon_vm.c
2238     +++ b/drivers/gpu/drm/radeon/radeon_vm.c
2239     @@ -513,6 +513,8 @@ int radeon_vm_bo_set_addr(struct radeon_device *rdev,
2240     tmp->addr = bo_va->addr;
2241     tmp->bo = radeon_bo_ref(bo_va->bo);
2242     list_add(&tmp->vm_status, &vm->freed);
2243     +
2244     + bo_va->addr = 0;
2245     }
2246    
2247     interval_tree_remove(&bo_va->it, &vm->va);
2248     @@ -1058,7 +1060,8 @@ void radeon_vm_bo_rmv(struct radeon_device *rdev,
2249     list_del(&bo_va->bo_list);
2250    
2251     mutex_lock(&vm->mutex);
2252     - interval_tree_remove(&bo_va->it, &vm->va);
2253     + if (bo_va->it.start || bo_va->it.last)
2254     + interval_tree_remove(&bo_va->it, &vm->va);
2255     list_del(&bo_va->vm_status);
2256    
2257     if (bo_va->addr) {
2258     diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
2259     index 77ba023cab95..7eda03c13805 100644
2260     --- a/drivers/hid/hid-core.c
2261     +++ b/drivers/hid/hid-core.c
2262     @@ -1919,6 +1919,7 @@ static const struct hid_device_id hid_have_special_driver[] = {
2263     { HID_USB_DEVICE(USB_VENDOR_ID_SAMSUNG, USB_DEVICE_ID_SAMSUNG_IR_REMOTE) },
2264     { HID_USB_DEVICE(USB_VENDOR_ID_SAMSUNG, USB_DEVICE_ID_SAMSUNG_WIRELESS_KBD_MOUSE) },
2265     { HID_USB_DEVICE(USB_VENDOR_ID_SKYCABLE, USB_DEVICE_ID_SKYCABLE_WIRELESS_PRESENTER) },
2266     + { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SMK, USB_DEVICE_ID_SMK_PS3_BDREMOTE) },
2267     { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_BUZZ_CONTROLLER) },
2268     { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_WIRELESS_BUZZ_CONTROLLER) },
2269     { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_BDREMOTE) },
2270     diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
2271     index 07e19295fad9..252a7ed40f86 100644
2272     --- a/drivers/hid/hid-ids.h
2273     +++ b/drivers/hid/hid-ids.h
2274     @@ -829,6 +829,9 @@
2275     #define USB_VENDOR_ID_SKYCABLE 0x1223
2276     #define USB_DEVICE_ID_SKYCABLE_WIRELESS_PRESENTER 0x3F07
2277    
2278     +#define USB_VENDOR_ID_SMK 0x0609
2279     +#define USB_DEVICE_ID_SMK_PS3_BDREMOTE 0x0306
2280     +
2281     #define USB_VENDOR_ID_SONY 0x054c
2282     #define USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE 0x024b
2283     #define USB_DEVICE_ID_SONY_VAIO_VGP_MOUSE 0x0374
2284     diff --git a/drivers/hid/hid-sony.c b/drivers/hid/hid-sony.c
2285     index bc4269e559f1..15b3475e641d 100644
2286     --- a/drivers/hid/hid-sony.c
2287     +++ b/drivers/hid/hid-sony.c
2288     @@ -2034,6 +2034,9 @@ static const struct hid_device_id sony_devices[] = {
2289     /* Logitech Harmony Adapter for PS3 */
2290     { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_HARMONY_PS3),
2291     .driver_data = PS3REMOTE },
2292     + /* SMK-Link PS3 BD Remote Control */
2293     + { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SMK, USB_DEVICE_ID_SMK_PS3_BDREMOTE),
2294     + .driver_data = PS3REMOTE },
2295     /* Sony Dualshock 4 controllers for PS4 */
2296     { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER),
2297     .driver_data = DUALSHOCK4_CONTROLLER_USB },
2298     diff --git a/drivers/hwmon/mcp3021.c b/drivers/hwmon/mcp3021.c
2299     index d219c06a857b..972444a14cca 100644
2300     --- a/drivers/hwmon/mcp3021.c
2301     +++ b/drivers/hwmon/mcp3021.c
2302     @@ -31,14 +31,11 @@
2303     /* output format */
2304     #define MCP3021_SAR_SHIFT 2
2305     #define MCP3021_SAR_MASK 0x3ff
2306     -
2307     #define MCP3021_OUTPUT_RES 10 /* 10-bit resolution */
2308     -#define MCP3021_OUTPUT_SCALE 4
2309    
2310     #define MCP3221_SAR_SHIFT 0
2311     #define MCP3221_SAR_MASK 0xfff
2312     #define MCP3221_OUTPUT_RES 12 /* 12-bit resolution */
2313     -#define MCP3221_OUTPUT_SCALE 1
2314    
2315     enum chips {
2316     mcp3021,
2317     @@ -54,7 +51,6 @@ struct mcp3021_data {
2318     u16 sar_shift;
2319     u16 sar_mask;
2320     u8 output_res;
2321     - u8 output_scale;
2322     };
2323    
2324     static int mcp3021_read16(struct i2c_client *client)
2325     @@ -84,13 +80,7 @@ static int mcp3021_read16(struct i2c_client *client)
2326    
2327     static inline u16 volts_from_reg(struct mcp3021_data *data, u16 val)
2328     {
2329     - if (val == 0)
2330     - return 0;
2331     -
2332     - val = val * data->output_scale - data->output_scale / 2;
2333     -
2334     - return val * DIV_ROUND_CLOSEST(data->vdd,
2335     - (1 << data->output_res) * data->output_scale);
2336     + return DIV_ROUND_CLOSEST(data->vdd * val, 1 << data->output_res);
2337     }
2338    
2339     static ssize_t show_in_input(struct device *dev, struct device_attribute *attr,
2340     @@ -132,14 +122,12 @@ static int mcp3021_probe(struct i2c_client *client,
2341     data->sar_shift = MCP3021_SAR_SHIFT;
2342     data->sar_mask = MCP3021_SAR_MASK;
2343     data->output_res = MCP3021_OUTPUT_RES;
2344     - data->output_scale = MCP3021_OUTPUT_SCALE;
2345     break;
2346    
2347     case mcp3221:
2348     data->sar_shift = MCP3221_SAR_SHIFT;
2349     data->sar_mask = MCP3221_SAR_MASK;
2350     data->output_res = MCP3221_OUTPUT_RES;
2351     - data->output_scale = MCP3221_OUTPUT_SCALE;
2352     break;
2353     }
2354    
2355     diff --git a/drivers/i2c/busses/i2c-at91.c b/drivers/i2c/busses/i2c-at91.c
2356     index e05a672db3e5..85d2f6b51c3c 100644
2357     --- a/drivers/i2c/busses/i2c-at91.c
2358     +++ b/drivers/i2c/busses/i2c-at91.c
2359     @@ -62,6 +62,9 @@
2360     #define AT91_TWI_UNRE 0x0080 /* Underrun Error */
2361     #define AT91_TWI_NACK 0x0100 /* Not Acknowledged */
2362    
2363     +#define AT91_TWI_INT_MASK \
2364     + (AT91_TWI_TXCOMP | AT91_TWI_RXRDY | AT91_TWI_TXRDY | AT91_TWI_NACK)
2365     +
2366     #define AT91_TWI_IER 0x0024 /* Interrupt Enable Register */
2367     #define AT91_TWI_IDR 0x0028 /* Interrupt Disable Register */
2368     #define AT91_TWI_IMR 0x002c /* Interrupt Mask Register */
2369     @@ -117,13 +120,12 @@ static void at91_twi_write(struct at91_twi_dev *dev, unsigned reg, unsigned val)
2370    
2371     static void at91_disable_twi_interrupts(struct at91_twi_dev *dev)
2372     {
2373     - at91_twi_write(dev, AT91_TWI_IDR,
2374     - AT91_TWI_TXCOMP | AT91_TWI_RXRDY | AT91_TWI_TXRDY);
2375     + at91_twi_write(dev, AT91_TWI_IDR, AT91_TWI_INT_MASK);
2376     }
2377    
2378     static void at91_twi_irq_save(struct at91_twi_dev *dev)
2379     {
2380     - dev->imr = at91_twi_read(dev, AT91_TWI_IMR) & 0x7;
2381     + dev->imr = at91_twi_read(dev, AT91_TWI_IMR) & AT91_TWI_INT_MASK;
2382     at91_disable_twi_interrupts(dev);
2383     }
2384    
2385     @@ -213,6 +215,14 @@ static void at91_twi_write_data_dma_callback(void *data)
2386     dma_unmap_single(dev->dev, sg_dma_address(&dev->dma.sg),
2387     dev->buf_len, DMA_TO_DEVICE);
2388    
2389     + /*
2390     + * When this callback is called, THR/TX FIFO is likely not to be empty
2391     + * yet. So we have to wait for TXCOMP or NACK bits to be set into the
2392     + * Status Register to be sure that the STOP bit has been sent and the
2393     + * transfer is completed. The NACK interrupt has already been enabled,
2394     + * we just have to enable TXCOMP one.
2395     + */
2396     + at91_twi_write(dev, AT91_TWI_IER, AT91_TWI_TXCOMP);
2397     at91_twi_write(dev, AT91_TWI_CR, AT91_TWI_STOP);
2398     }
2399    
2400     @@ -307,7 +317,7 @@ static void at91_twi_read_data_dma_callback(void *data)
2401     /* The last two bytes have to be read without using dma */
2402     dev->buf += dev->buf_len - 2;
2403     dev->buf_len = 2;
2404     - at91_twi_write(dev, AT91_TWI_IER, AT91_TWI_RXRDY);
2405     + at91_twi_write(dev, AT91_TWI_IER, AT91_TWI_RXRDY | AT91_TWI_TXCOMP);
2406     }
2407    
2408     static void at91_twi_read_data_dma(struct at91_twi_dev *dev)
2409     @@ -368,7 +378,7 @@ static irqreturn_t atmel_twi_interrupt(int irq, void *dev_id)
2410     /* catch error flags */
2411     dev->transfer_status |= status;
2412    
2413     - if (irqstatus & AT91_TWI_TXCOMP) {
2414     + if (irqstatus & (AT91_TWI_TXCOMP | AT91_TWI_NACK)) {
2415     at91_disable_twi_interrupts(dev);
2416     complete(&dev->cmd_complete);
2417     }
2418     @@ -381,6 +391,34 @@ static int at91_do_twi_transfer(struct at91_twi_dev *dev)
2419     int ret;
2420     bool has_unre_flag = dev->pdata->has_unre_flag;
2421    
2422     + /*
2423     + * WARNING: the TXCOMP bit in the Status Register is NOT a clear on
2424     + * read flag but shows the state of the transmission at the time the
2425     + * Status Register is read. According to the programmer datasheet,
2426     + * TXCOMP is set when both holding register and internal shifter are
2427     + * empty and STOP condition has been sent.
2428     + * Consequently, we should enable NACK interrupt rather than TXCOMP to
2429     + * detect transmission failure.
2430     + *
2431     + * Besides, the TXCOMP bit is already set before the i2c transaction
2432     + * has been started. For read transactions, this bit is cleared when
2433     + * writing the START bit into the Control Register. So the
2434     + * corresponding interrupt can safely be enabled just after.
2435     + * However for write transactions managed by the CPU, we first write
2436     + * into THR, so TXCOMP is cleared. Then we can safely enable TXCOMP
2437     + * interrupt. If TXCOMP interrupt were enabled before writing into THR,
2438     + * the interrupt handler would be called immediately and the i2c command
2439     + * would be reported as completed.
2440     + * Also when a write transaction is managed by the DMA controller,
2441     + * enabling the TXCOMP interrupt in this function may lead to a race
2442     + * condition since we don't know whether the TXCOMP interrupt is enabled
2443     + * before or after the DMA has started to write into THR. So the TXCOMP
2444     + * interrupt is enabled later by at91_twi_write_data_dma_callback().
2445     + * Immediately after in that DMA callback, we still need to send the
2446     + * STOP condition manually writing the corresponding bit into the
2447     + * Control Register.
2448     + */
2449     +
2450     dev_dbg(dev->dev, "transfer: %s %d bytes.\n",
2451     (dev->msg->flags & I2C_M_RD) ? "read" : "write", dev->buf_len);
2452    
2453     @@ -411,26 +449,24 @@ static int at91_do_twi_transfer(struct at91_twi_dev *dev)
2454     * seems to be the best solution.
2455     */
2456     if (dev->use_dma && (dev->buf_len > AT91_I2C_DMA_THRESHOLD)) {
2457     + at91_twi_write(dev, AT91_TWI_IER, AT91_TWI_NACK);
2458     at91_twi_read_data_dma(dev);
2459     - /*
2460     - * It is important to enable TXCOMP irq here because
2461     - * doing it only when transferring the last two bytes
2462     - * will mask NACK errors since TXCOMP is set when a
2463     - * NACK occurs.
2464     - */
2465     - at91_twi_write(dev, AT91_TWI_IER,
2466     - AT91_TWI_TXCOMP);
2467     - } else
2468     + } else {
2469     at91_twi_write(dev, AT91_TWI_IER,
2470     - AT91_TWI_TXCOMP | AT91_TWI_RXRDY);
2471     + AT91_TWI_TXCOMP |
2472     + AT91_TWI_NACK |
2473     + AT91_TWI_RXRDY);
2474     + }
2475     } else {
2476     if (dev->use_dma && (dev->buf_len > AT91_I2C_DMA_THRESHOLD)) {
2477     + at91_twi_write(dev, AT91_TWI_IER, AT91_TWI_NACK);
2478     at91_twi_write_data_dma(dev);
2479     - at91_twi_write(dev, AT91_TWI_IER, AT91_TWI_TXCOMP);
2480     } else {
2481     at91_twi_write_next_byte(dev);
2482     at91_twi_write(dev, AT91_TWI_IER,
2483     - AT91_TWI_TXCOMP | AT91_TWI_TXRDY);
2484     + AT91_TWI_TXCOMP |
2485     + AT91_TWI_NACK |
2486     + AT91_TWI_TXRDY);
2487     }
2488     }
2489    
2490     diff --git a/drivers/iio/imu/adis16400.h b/drivers/iio/imu/adis16400.h
2491     index 0916bf6b6c31..1e8fd2e81d45 100644
2492     --- a/drivers/iio/imu/adis16400.h
2493     +++ b/drivers/iio/imu/adis16400.h
2494     @@ -165,6 +165,7 @@ struct adis16400_state {
2495     int filt_int;
2496    
2497     struct adis adis;
2498     + unsigned long avail_scan_mask[2];
2499     };
2500    
2501     /* At the moment triggers are only used for ring buffer
2502     diff --git a/drivers/iio/imu/adis16400_core.c b/drivers/iio/imu/adis16400_core.c
2503     index fa795dcd5f75..7b06e058b000 100644
2504     --- a/drivers/iio/imu/adis16400_core.c
2505     +++ b/drivers/iio/imu/adis16400_core.c
2506     @@ -405,6 +405,11 @@ static int adis16400_read_raw(struct iio_dev *indio_dev,
2507     *val = st->variant->temp_scale_nano / 1000000;
2508     *val2 = (st->variant->temp_scale_nano % 1000000);
2509     return IIO_VAL_INT_PLUS_MICRO;
2510     + case IIO_PRESSURE:
2511     + /* 20 uBar = 0.002kPascal */
2512     + *val = 0;
2513     + *val2 = 2000;
2514     + return IIO_VAL_INT_PLUS_MICRO;
2515     default:
2516     return -EINVAL;
2517     }
2518     @@ -454,10 +459,10 @@ static int adis16400_read_raw(struct iio_dev *indio_dev,
2519     }
2520     }
2521    
2522     -#define ADIS16400_VOLTAGE_CHAN(addr, bits, name, si) { \
2523     +#define ADIS16400_VOLTAGE_CHAN(addr, bits, name, si, chn) { \
2524     .type = IIO_VOLTAGE, \
2525     .indexed = 1, \
2526     - .channel = 0, \
2527     + .channel = chn, \
2528     .extend_name = name, \
2529     .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
2530     BIT(IIO_CHAN_INFO_SCALE), \
2531     @@ -474,10 +479,10 @@ static int adis16400_read_raw(struct iio_dev *indio_dev,
2532     }
2533    
2534     #define ADIS16400_SUPPLY_CHAN(addr, bits) \
2535     - ADIS16400_VOLTAGE_CHAN(addr, bits, "supply", ADIS16400_SCAN_SUPPLY)
2536     + ADIS16400_VOLTAGE_CHAN(addr, bits, "supply", ADIS16400_SCAN_SUPPLY, 0)
2537    
2538     #define ADIS16400_AUX_ADC_CHAN(addr, bits) \
2539     - ADIS16400_VOLTAGE_CHAN(addr, bits, NULL, ADIS16400_SCAN_ADC)
2540     + ADIS16400_VOLTAGE_CHAN(addr, bits, NULL, ADIS16400_SCAN_ADC, 1)
2541    
2542     #define ADIS16400_GYRO_CHAN(mod, addr, bits) { \
2543     .type = IIO_ANGL_VEL, \
2544     @@ -791,11 +796,6 @@ static const struct iio_info adis16400_info = {
2545     .debugfs_reg_access = adis_debugfs_reg_access,
2546     };
2547    
2548     -static const unsigned long adis16400_burst_scan_mask[] = {
2549     - ~0UL,
2550     - 0,
2551     -};
2552     -
2553     static const char * const adis16400_status_error_msgs[] = {
2554     [ADIS16400_DIAG_STAT_ZACCL_FAIL] = "Z-axis accelerometer self-test failure",
2555     [ADIS16400_DIAG_STAT_YACCL_FAIL] = "Y-axis accelerometer self-test failure",
2556     @@ -843,6 +843,20 @@ static const struct adis_data adis16400_data = {
2557     BIT(ADIS16400_DIAG_STAT_POWER_LOW),
2558     };
2559    
2560     +static void adis16400_setup_chan_mask(struct adis16400_state *st)
2561     +{
2562     + const struct adis16400_chip_info *chip_info = st->variant;
2563     + unsigned i;
2564     +
2565     + for (i = 0; i < chip_info->num_channels; i++) {
2566     + const struct iio_chan_spec *ch = &chip_info->channels[i];
2567     +
2568     + if (ch->scan_index >= 0 &&
2569     + ch->scan_index != ADIS16400_SCAN_TIMESTAMP)
2570     + st->avail_scan_mask[0] |= BIT(ch->scan_index);
2571     + }
2572     +}
2573     +
2574     static int adis16400_probe(struct spi_device *spi)
2575     {
2576     struct adis16400_state *st;
2577     @@ -866,8 +880,10 @@ static int adis16400_probe(struct spi_device *spi)
2578     indio_dev->info = &adis16400_info;
2579     indio_dev->modes = INDIO_DIRECT_MODE;
2580    
2581     - if (!(st->variant->flags & ADIS16400_NO_BURST))
2582     - indio_dev->available_scan_masks = adis16400_burst_scan_mask;
2583     + if (!(st->variant->flags & ADIS16400_NO_BURST)) {
2584     + adis16400_setup_chan_mask(st);
2585     + indio_dev->available_scan_masks = st->avail_scan_mask;
2586     + }
2587    
2588     ret = adis_init(&st->adis, indio_dev, spi, &adis16400_data);
2589     if (ret)
2590     diff --git a/drivers/infiniband/ulp/isert/ib_isert.c b/drivers/infiniband/ulp/isert/ib_isert.c
2591     index 0618e407197d..02c494a8d111 100644
2592     --- a/drivers/infiniband/ulp/isert/ib_isert.c
2593     +++ b/drivers/infiniband/ulp/isert/ib_isert.c
2594     @@ -61,6 +61,8 @@ static int
2595     isert_rdma_accept(struct isert_conn *isert_conn);
2596     struct rdma_cm_id *isert_setup_id(struct isert_np *isert_np);
2597    
2598     +static void isert_release_work(struct work_struct *work);
2599     +
2600     static inline bool
2601     isert_prot_cmd(struct isert_conn *conn, struct se_cmd *cmd)
2602     {
2603     @@ -624,6 +626,7 @@ isert_connect_request(struct rdma_cm_id *cma_id, struct rdma_cm_event *event)
2604     mutex_init(&isert_conn->conn_mutex);
2605     spin_lock_init(&isert_conn->conn_lock);
2606     INIT_LIST_HEAD(&isert_conn->conn_fr_pool);
2607     + INIT_WORK(&isert_conn->release_work, isert_release_work);
2608    
2609     isert_conn->conn_cm_id = cma_id;
2610    
2611     @@ -891,6 +894,7 @@ isert_disconnected_handler(struct rdma_cm_id *cma_id,
2612     {
2613     struct isert_np *isert_np = cma_id->context;
2614     struct isert_conn *isert_conn;
2615     + bool terminating = false;
2616    
2617     if (isert_np->np_cm_id == cma_id)
2618     return isert_np_cma_handler(cma_id->context, event);
2619     @@ -898,12 +902,25 @@ isert_disconnected_handler(struct rdma_cm_id *cma_id,
2620     isert_conn = cma_id->qp->qp_context;
2621    
2622     mutex_lock(&isert_conn->conn_mutex);
2623     + terminating = (isert_conn->state == ISER_CONN_TERMINATING);
2624     isert_conn_terminate(isert_conn);
2625     mutex_unlock(&isert_conn->conn_mutex);
2626    
2627     pr_info("conn %p completing conn_wait\n", isert_conn);
2628     complete(&isert_conn->conn_wait);
2629    
2630     + if (terminating)
2631     + goto out;
2632     +
2633     + mutex_lock(&isert_np->np_accept_mutex);
2634     + if (!list_empty(&isert_conn->conn_accept_node)) {
2635     + list_del_init(&isert_conn->conn_accept_node);
2636     + isert_put_conn(isert_conn);
2637     + queue_work(isert_release_wq, &isert_conn->release_work);
2638     + }
2639     + mutex_unlock(&isert_np->np_accept_mutex);
2640     +
2641     +out:
2642     return 0;
2643     }
2644    
2645     @@ -2485,7 +2502,6 @@ isert_build_rdma_wr(struct isert_conn *isert_conn, struct isert_cmd *isert_cmd,
2646     page_off = offset % PAGE_SIZE;
2647    
2648     send_wr->sg_list = ib_sge;
2649     - send_wr->num_sge = sg_nents;
2650     send_wr->wr_id = (unsigned long)&isert_cmd->tx_desc;
2651     /*
2652     * Perform mapping of TCM scatterlist memory ib_sge dma_addr.
2653     @@ -2504,14 +2520,17 @@ isert_build_rdma_wr(struct isert_conn *isert_conn, struct isert_cmd *isert_cmd,
2654     ib_sge->addr, ib_sge->length, ib_sge->lkey);
2655     page_off = 0;
2656     data_left -= ib_sge->length;
2657     + if (!data_left)
2658     + break;
2659     ib_sge++;
2660     pr_debug("Incrementing ib_sge pointer to %p\n", ib_sge);
2661     }
2662    
2663     + send_wr->num_sge = ++i;
2664     pr_debug("Set outgoing sg_list: %p num_sg: %u from TCM SGLs\n",
2665     send_wr->sg_list, send_wr->num_sge);
2666    
2667     - return sg_nents;
2668     + return send_wr->num_sge;
2669     }
2670    
2671     static int
2672     @@ -3417,7 +3436,6 @@ static void isert_wait_conn(struct iscsi_conn *conn)
2673    
2674     wait_for_completion(&isert_conn->conn_wait_comp_err);
2675    
2676     - INIT_WORK(&isert_conn->release_work, isert_release_work);
2677     queue_work(isert_release_wq, &isert_conn->release_work);
2678     }
2679    
2680     diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c
2681     index 991dc6b20a58..aa7f9209ac6c 100644
2682     --- a/drivers/input/mouse/elantech.c
2683     +++ b/drivers/input/mouse/elantech.c
2684     @@ -1376,10 +1376,11 @@ static bool elantech_is_signature_valid(const unsigned char *param)
2685     return true;
2686    
2687     /*
2688     - * Some models have a revision higher then 20. Meaning param[2] may
2689     - * be 10 or 20, skip the rates check for these.
2690     + * Some hw_version >= 4 models have a revision higher then 20. Meaning
2691     + * that param[2] may be 10 or 20, skip the rates check for these.
2692     */
2693     - if (param[0] == 0x46 && (param[1] & 0xef) == 0x0f && param[2] < 40)
2694     + if ((param[0] & 0x0f) >= 0x06 && (param[1] & 0xaf) == 0x0f &&
2695     + param[2] < 40)
2696     return true;
2697    
2698     for (i = 0; i < ARRAY_SIZE(rates); i++)
2699     diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
2700     index 2176874a41b1..f599357e8392 100644
2701     --- a/drivers/input/mouse/synaptics.c
2702     +++ b/drivers/input/mouse/synaptics.c
2703     @@ -148,6 +148,10 @@ static const struct min_max_quirk min_max_pnpid_table[] = {
2704     1024, 5112, 2024, 4832
2705     },
2706     {
2707     + (const char * const []){"LEN2000", NULL},
2708     + 1024, 5113, 2021, 4832
2709     + },
2710     + {
2711     (const char * const []){"LEN2001", NULL},
2712     {ANY_BOARD_ID, ANY_BOARD_ID},
2713     1024, 5022, 2508, 4832
2714     @@ -185,7 +189,7 @@ static const char * const topbuttonpad_pnp_ids[] = {
2715     "LEN0047",
2716     "LEN0048",
2717     "LEN0049",
2718     - "LEN2000",
2719     + "LEN2000", /* S540 */
2720     "LEN2001", /* Edge E431 */
2721     "LEN2002", /* Edge E531 */
2722     "LEN2003",
2723     diff --git a/drivers/input/touchscreen/pixcir_i2c_ts.c b/drivers/input/touchscreen/pixcir_i2c_ts.c
2724     index fc49c75317d1..9788a9b4a610 100644
2725     --- a/drivers/input/touchscreen/pixcir_i2c_ts.c
2726     +++ b/drivers/input/touchscreen/pixcir_i2c_ts.c
2727     @@ -78,7 +78,7 @@ static void pixcir_ts_parse(struct pixcir_i2c_ts_data *tsdata,
2728     }
2729    
2730     ret = i2c_master_recv(tsdata->client, rdbuf, readsize);
2731     - if (ret != sizeof(rdbuf)) {
2732     + if (ret != readsize) {
2733     dev_err(&tsdata->client->dev,
2734     "%s: i2c_master_recv failed(), ret=%d\n",
2735     __func__, ret);
2736     diff --git a/drivers/irqchip/irq-sunxi-nmi.c b/drivers/irqchip/irq-sunxi-nmi.c
2737     index 12f547a44ae4..eb9b59e8f122 100644
2738     --- a/drivers/irqchip/irq-sunxi-nmi.c
2739     +++ b/drivers/irqchip/irq-sunxi-nmi.c
2740     @@ -104,7 +104,7 @@ static int sunxi_sc_nmi_set_type(struct irq_data *data, unsigned int flow_type)
2741     irqd_set_trigger_type(data, flow_type);
2742     irq_setup_alt_chip(data, flow_type);
2743    
2744     - for (i = 0; i <= gc->num_ct; i++, ct++)
2745     + for (i = 0; i < gc->num_ct; i++, ct++)
2746     if (ct->type & flow_type)
2747     ctrl_off = ct->regs.type;
2748    
2749     diff --git a/drivers/leds/led-class.c b/drivers/leds/led-class.c
2750     index 7440c58b8e6f..f5dfb8f7fe3b 100644
2751     --- a/drivers/leds/led-class.c
2752     +++ b/drivers/leds/led-class.c
2753     @@ -173,6 +173,7 @@ void led_classdev_resume(struct led_classdev *led_cdev)
2754     }
2755     EXPORT_SYMBOL_GPL(led_classdev_resume);
2756    
2757     +#ifdef CONFIG_PM_SLEEP
2758     static int led_suspend(struct device *dev)
2759     {
2760     struct led_classdev *led_cdev = dev_get_drvdata(dev);
2761     @@ -192,11 +193,9 @@ static int led_resume(struct device *dev)
2762    
2763     return 0;
2764     }
2765     +#endif
2766    
2767     -static const struct dev_pm_ops leds_class_dev_pm_ops = {
2768     - .suspend = led_suspend,
2769     - .resume = led_resume,
2770     -};
2771     +static SIMPLE_DEV_PM_OPS(leds_class_dev_pm_ops, led_suspend, led_resume);
2772    
2773     /**
2774     * led_classdev_register - register a new object of led_classdev class.
2775     diff --git a/drivers/md/dm-stats.c b/drivers/md/dm-stats.c
2776     index 87f86c77b094..6f2a4ce413f7 100644
2777     --- a/drivers/md/dm-stats.c
2778     +++ b/drivers/md/dm-stats.c
2779     @@ -795,6 +795,8 @@ static int message_stats_create(struct mapped_device *md,
2780     return -EINVAL;
2781    
2782     if (sscanf(argv[2], "/%u%c", &divisor, &dummy) == 1) {
2783     + if (!divisor)
2784     + return -EINVAL;
2785     step = end - start;
2786     if (do_div(step, divisor))
2787     step++;
2788     diff --git a/drivers/md/persistent-data/dm-space-map-metadata.c b/drivers/md/persistent-data/dm-space-map-metadata.c
2789     index f4e22bcc7fb8..199c9ccd1f5d 100644
2790     --- a/drivers/md/persistent-data/dm-space-map-metadata.c
2791     +++ b/drivers/md/persistent-data/dm-space-map-metadata.c
2792     @@ -204,6 +204,27 @@ static void in(struct sm_metadata *smm)
2793     smm->recursion_count++;
2794     }
2795    
2796     +static int apply_bops(struct sm_metadata *smm)
2797     +{
2798     + int r = 0;
2799     +
2800     + while (!brb_empty(&smm->uncommitted)) {
2801     + struct block_op bop;
2802     +
2803     + r = brb_pop(&smm->uncommitted, &bop);
2804     + if (r) {
2805     + DMERR("bug in bop ring buffer");
2806     + break;
2807     + }
2808     +
2809     + r = commit_bop(smm, &bop);
2810     + if (r)
2811     + break;
2812     + }
2813     +
2814     + return r;
2815     +}
2816     +
2817     static int out(struct sm_metadata *smm)
2818     {
2819     int r = 0;
2820     @@ -216,21 +237,8 @@ static int out(struct sm_metadata *smm)
2821     return -ENOMEM;
2822     }
2823    
2824     - if (smm->recursion_count == 1) {
2825     - while (!brb_empty(&smm->uncommitted)) {
2826     - struct block_op bop;
2827     -
2828     - r = brb_pop(&smm->uncommitted, &bop);
2829     - if (r) {
2830     - DMERR("bug in bop ring buffer");
2831     - break;
2832     - }
2833     -
2834     - r = commit_bop(smm, &bop);
2835     - if (r)
2836     - break;
2837     - }
2838     - }
2839     + if (smm->recursion_count == 1)
2840     + apply_bops(smm);
2841    
2842     smm->recursion_count--;
2843    
2844     @@ -702,6 +710,12 @@ static int sm_metadata_extend(struct dm_space_map *sm, dm_block_t extra_blocks)
2845     }
2846     old_len = smm->begin;
2847    
2848     + r = apply_bops(smm);
2849     + if (r) {
2850     + DMERR("%s: apply_bops failed", __func__);
2851     + goto out;
2852     + }
2853     +
2854     r = sm_ll_commit(&smm->ll);
2855     if (r)
2856     goto out;
2857     @@ -771,6 +785,12 @@ int dm_sm_metadata_create(struct dm_space_map *sm,
2858     if (r)
2859     return r;
2860    
2861     + r = apply_bops(smm);
2862     + if (r) {
2863     + DMERR("%s: apply_bops failed", __func__);
2864     + return r;
2865     + }
2866     +
2867     return sm_metadata_commit(sm);
2868     }
2869    
2870     diff --git a/drivers/media/dvb-frontends/af9013.c b/drivers/media/dvb-frontends/af9013.c
2871     index 8001690d7576..ba6c8f6c42a1 100644
2872     --- a/drivers/media/dvb-frontends/af9013.c
2873     +++ b/drivers/media/dvb-frontends/af9013.c
2874     @@ -605,6 +605,10 @@ static int af9013_set_frontend(struct dvb_frontend *fe)
2875     }
2876     }
2877    
2878     + /* Return an error if can't find bandwidth or the right clock */
2879     + if (i == ARRAY_SIZE(coeff_lut))
2880     + return -EINVAL;
2881     +
2882     ret = af9013_wr_regs(state, 0xae00, coeff_lut[i].val,
2883     sizeof(coeff_lut[i].val));
2884     }
2885     diff --git a/drivers/media/dvb-frontends/cx24116.c b/drivers/media/dvb-frontends/cx24116.c
2886     index 2916d7c74a1d..7bc68b355c0b 100644
2887     --- a/drivers/media/dvb-frontends/cx24116.c
2888     +++ b/drivers/media/dvb-frontends/cx24116.c
2889     @@ -963,6 +963,10 @@ static int cx24116_send_diseqc_msg(struct dvb_frontend *fe,
2890     struct cx24116_state *state = fe->demodulator_priv;
2891     int i, ret;
2892    
2893     + /* Validate length */
2894     + if (d->msg_len > sizeof(d->msg))
2895     + return -EINVAL;
2896     +
2897     /* Dump DiSEqC message */
2898     if (debug) {
2899     printk(KERN_INFO "cx24116: %s(", __func__);
2900     @@ -974,10 +978,6 @@ static int cx24116_send_diseqc_msg(struct dvb_frontend *fe,
2901     printk(") toneburst=%d\n", toneburst);
2902     }
2903    
2904     - /* Validate length */
2905     - if (d->msg_len > (CX24116_ARGLEN - CX24116_DISEQC_MSGOFS))
2906     - return -EINVAL;
2907     -
2908     /* DiSEqC message */
2909     for (i = 0; i < d->msg_len; i++)
2910     state->dsec_cmd.args[CX24116_DISEQC_MSGOFS + i] = d->msg[i];
2911     diff --git a/drivers/media/dvb-frontends/cx24117.c b/drivers/media/dvb-frontends/cx24117.c
2912     index a6c3c9e2e897..d2eab0676d30 100644
2913     --- a/drivers/media/dvb-frontends/cx24117.c
2914     +++ b/drivers/media/dvb-frontends/cx24117.c
2915     @@ -1043,7 +1043,7 @@ static int cx24117_send_diseqc_msg(struct dvb_frontend *fe,
2916     dev_dbg(&state->priv->i2c->dev, ")\n");
2917    
2918     /* Validate length */
2919     - if (d->msg_len > 15)
2920     + if (d->msg_len > sizeof(d->msg))
2921     return -EINVAL;
2922    
2923     /* DiSEqC message */
2924     diff --git a/drivers/media/dvb-frontends/s5h1420.c b/drivers/media/dvb-frontends/s5h1420.c
2925     index 93eeaf7118fd..0b4f8fe6bf99 100644
2926     --- a/drivers/media/dvb-frontends/s5h1420.c
2927     +++ b/drivers/media/dvb-frontends/s5h1420.c
2928     @@ -180,7 +180,7 @@ static int s5h1420_send_master_cmd (struct dvb_frontend* fe,
2929     int result = 0;
2930    
2931     dprintk("enter %s\n", __func__);
2932     - if (cmd->msg_len > 8)
2933     + if (cmd->msg_len > sizeof(cmd->msg))
2934     return -EINVAL;
2935    
2936     /* setup for DISEQC */
2937     diff --git a/drivers/media/usb/dvb-usb/dib0700_core.c b/drivers/media/usb/dvb-usb/dib0700_core.c
2938     index 50856dbf5496..605b090c618b 100644
2939     --- a/drivers/media/usb/dvb-usb/dib0700_core.c
2940     +++ b/drivers/media/usb/dvb-usb/dib0700_core.c
2941     @@ -658,10 +658,20 @@ out:
2942     struct dib0700_rc_response {
2943     u8 report_id;
2944     u8 data_state;
2945     - u8 system;
2946     - u8 not_system;
2947     - u8 data;
2948     - u8 not_data;
2949     + union {
2950     + struct {
2951     + u8 system;
2952     + u8 not_system;
2953     + u8 data;
2954     + u8 not_data;
2955     + } nec;
2956     + struct {
2957     + u8 not_used;
2958     + u8 system;
2959     + u8 data;
2960     + u8 not_data;
2961     + } rc5;
2962     + };
2963     };
2964     #define RC_MSG_SIZE_V1_20 6
2965    
2966     @@ -697,8 +707,8 @@ static void dib0700_rc_urb_completion(struct urb *purb)
2967    
2968     deb_data("IR ID = %02X state = %02X System = %02X %02X Cmd = %02X %02X (len %d)\n",
2969     poll_reply->report_id, poll_reply->data_state,
2970     - poll_reply->system, poll_reply->not_system,
2971     - poll_reply->data, poll_reply->not_data,
2972     + poll_reply->nec.system, poll_reply->nec.not_system,
2973     + poll_reply->nec.data, poll_reply->nec.not_data,
2974     purb->actual_length);
2975    
2976     switch (d->props.rc.core.protocol) {
2977     @@ -707,30 +717,30 @@ static void dib0700_rc_urb_completion(struct urb *purb)
2978     toggle = 0;
2979    
2980     /* NEC protocol sends repeat code as 0 0 0 FF */
2981     - if (poll_reply->system == 0x00 &&
2982     - poll_reply->not_system == 0x00 &&
2983     - poll_reply->data == 0x00 &&
2984     - poll_reply->not_data == 0xff) {
2985     + if (poll_reply->nec.system == 0x00 &&
2986     + poll_reply->nec.not_system == 0x00 &&
2987     + poll_reply->nec.data == 0x00 &&
2988     + poll_reply->nec.not_data == 0xff) {
2989     poll_reply->data_state = 2;
2990     break;
2991     }
2992    
2993     - if ((poll_reply->data ^ poll_reply->not_data) != 0xff) {
2994     + if ((poll_reply->nec.data ^ poll_reply->nec.not_data) != 0xff) {
2995     deb_data("NEC32 protocol\n");
2996     - keycode = RC_SCANCODE_NEC32(poll_reply->system << 24 |
2997     - poll_reply->not_system << 16 |
2998     - poll_reply->data << 8 |
2999     - poll_reply->not_data);
3000     - } else if ((poll_reply->system ^ poll_reply->not_system) != 0xff) {
3001     + keycode = RC_SCANCODE_NEC32(poll_reply->nec.system << 24 |
3002     + poll_reply->nec.not_system << 16 |
3003     + poll_reply->nec.data << 8 |
3004     + poll_reply->nec.not_data);
3005     + } else if ((poll_reply->nec.system ^ poll_reply->nec.not_system) != 0xff) {
3006     deb_data("NEC extended protocol\n");
3007     - keycode = RC_SCANCODE_NECX(poll_reply->system << 8 |
3008     - poll_reply->not_system,
3009     - poll_reply->data);
3010     + keycode = RC_SCANCODE_NECX(poll_reply->nec.system << 8 |
3011     + poll_reply->nec.not_system,
3012     + poll_reply->nec.data);
3013    
3014     } else {
3015     deb_data("NEC normal protocol\n");
3016     - keycode = RC_SCANCODE_NEC(poll_reply->system,
3017     - poll_reply->data);
3018     + keycode = RC_SCANCODE_NEC(poll_reply->nec.system,
3019     + poll_reply->nec.data);
3020     }
3021    
3022     break;
3023     @@ -738,19 +748,19 @@ static void dib0700_rc_urb_completion(struct urb *purb)
3024     deb_data("RC5 protocol\n");
3025     protocol = RC_TYPE_RC5;
3026     toggle = poll_reply->report_id;
3027     - keycode = RC_SCANCODE_RC5(poll_reply->system, poll_reply->data);
3028     + keycode = RC_SCANCODE_RC5(poll_reply->rc5.system, poll_reply->rc5.data);
3029     +
3030     + if ((poll_reply->rc5.data ^ poll_reply->rc5.not_data) != 0xff) {
3031     + /* Key failed integrity check */
3032     + err("key failed integrity check: %02x %02x %02x %02x",
3033     + poll_reply->rc5.not_used, poll_reply->rc5.system,
3034     + poll_reply->rc5.data, poll_reply->rc5.not_data);
3035     + goto resubmit;
3036     + }
3037    
3038     break;
3039     }
3040    
3041     - if ((poll_reply->data + poll_reply->not_data) != 0xff) {
3042     - /* Key failed integrity check */
3043     - err("key failed integrity check: %02x %02x %02x %02x",
3044     - poll_reply->system, poll_reply->not_system,
3045     - poll_reply->data, poll_reply->not_data);
3046     - goto resubmit;
3047     - }
3048     -
3049     rc_keydown(d->rc_dev, protocol, keycode, toggle);
3050    
3051     resubmit:
3052     diff --git a/drivers/media/usb/dvb-usb/dib0700_devices.c b/drivers/media/usb/dvb-usb/dib0700_devices.c
3053     index e1757b8f5f5d..6aa4e9f4e441 100644
3054     --- a/drivers/media/usb/dvb-usb/dib0700_devices.c
3055     +++ b/drivers/media/usb/dvb-usb/dib0700_devices.c
3056     @@ -3947,6 +3947,8 @@ struct dvb_usb_device_properties dib0700_devices[] = {
3057    
3058     DIB0700_DEFAULT_STREAMING_CONFIG(0x02),
3059     }},
3060     + .size_of_priv = sizeof(struct
3061     + dib0700_adapter_state),
3062     }, {
3063     .num_frontends = 1,
3064     .fe = {{
3065     @@ -3959,6 +3961,8 @@ struct dvb_usb_device_properties dib0700_devices[] = {
3066    
3067     DIB0700_DEFAULT_STREAMING_CONFIG(0x03),
3068     }},
3069     + .size_of_priv = sizeof(struct
3070     + dib0700_adapter_state),
3071     }
3072     },
3073    
3074     @@ -4012,6 +4016,8 @@ struct dvb_usb_device_properties dib0700_devices[] = {
3075    
3076     DIB0700_DEFAULT_STREAMING_CONFIG(0x02),
3077     }},
3078     + .size_of_priv = sizeof(struct
3079     + dib0700_adapter_state),
3080     },
3081     },
3082    
3083     diff --git a/drivers/misc/mei/client.c b/drivers/misc/mei/client.c
3084     index bc9ba5359bc6..351e4bc07a51 100644
3085     --- a/drivers/misc/mei/client.c
3086     +++ b/drivers/misc/mei/client.c
3087     @@ -478,7 +478,7 @@ void mei_host_client_init(struct work_struct *work)
3088     bool mei_hbuf_acquire(struct mei_device *dev)
3089     {
3090     if (mei_pg_state(dev) == MEI_PG_ON ||
3091     - dev->pg_event == MEI_PG_EVENT_WAIT) {
3092     + mei_pg_in_transition(dev)) {
3093     dev_dbg(dev->dev, "device is in pg\n");
3094     return false;
3095     }
3096     diff --git a/drivers/misc/mei/hw-me.c b/drivers/misc/mei/hw-me.c
3097     index 350a28af98aa..c1ef64c5e81e 100644
3098     --- a/drivers/misc/mei/hw-me.c
3099     +++ b/drivers/misc/mei/hw-me.c
3100     @@ -627,11 +627,27 @@ int mei_me_pg_unset_sync(struct mei_device *dev)
3101     mutex_lock(&dev->device_lock);
3102    
3103     reply:
3104     - if (dev->pg_event == MEI_PG_EVENT_RECEIVED)
3105     - ret = mei_hbm_pg(dev, MEI_PG_ISOLATION_EXIT_RES_CMD);
3106     + if (dev->pg_event != MEI_PG_EVENT_RECEIVED) {
3107     + ret = -ETIME;
3108     + goto out;
3109     + }
3110     +
3111     + dev->pg_event = MEI_PG_EVENT_INTR_WAIT;
3112     + ret = mei_hbm_pg(dev, MEI_PG_ISOLATION_EXIT_RES_CMD);
3113     + if (ret)
3114     + return ret;
3115     +
3116     + mutex_unlock(&dev->device_lock);
3117     + wait_event_timeout(dev->wait_pg,
3118     + dev->pg_event == MEI_PG_EVENT_INTR_RECEIVED, timeout);
3119     + mutex_lock(&dev->device_lock);
3120     +
3121     + if (dev->pg_event == MEI_PG_EVENT_INTR_RECEIVED)
3122     + ret = 0;
3123     else
3124     ret = -ETIME;
3125    
3126     +out:
3127     dev->pg_event = MEI_PG_EVENT_IDLE;
3128     hw->pg_state = MEI_PG_OFF;
3129    
3130     @@ -639,6 +655,19 @@ reply:
3131     }
3132    
3133     /**
3134     + * mei_me_pg_in_transition - is device now in pg transition
3135     + *
3136     + * @dev: the device structure
3137     + *
3138     + * Return: true if in pg transition, false otherwise
3139     + */
3140     +static bool mei_me_pg_in_transition(struct mei_device *dev)
3141     +{
3142     + return dev->pg_event >= MEI_PG_EVENT_WAIT &&
3143     + dev->pg_event <= MEI_PG_EVENT_INTR_WAIT;
3144     +}
3145     +
3146     +/**
3147     * mei_me_pg_is_enabled - detect if PG is supported by HW
3148     *
3149     * @dev: the device structure
3150     @@ -670,6 +699,24 @@ notsupported:
3151     }
3152    
3153     /**
3154     + * mei_me_pg_intr - perform pg processing in interrupt thread handler
3155     + *
3156     + * @dev: the device structure
3157     + */
3158     +static void mei_me_pg_intr(struct mei_device *dev)
3159     +{
3160     + struct mei_me_hw *hw = to_me_hw(dev);
3161     +
3162     + if (dev->pg_event != MEI_PG_EVENT_INTR_WAIT)
3163     + return;
3164     +
3165     + dev->pg_event = MEI_PG_EVENT_INTR_RECEIVED;
3166     + hw->pg_state = MEI_PG_OFF;
3167     + if (waitqueue_active(&dev->wait_pg))
3168     + wake_up(&dev->wait_pg);
3169     +}
3170     +
3171     +/**
3172     * mei_me_irq_quick_handler - The ISR of the MEI device
3173     *
3174     * @irq: The irq number
3175     @@ -727,6 +774,8 @@ irqreturn_t mei_me_irq_thread_handler(int irq, void *dev_id)
3176     goto end;
3177     }
3178    
3179     + mei_me_pg_intr(dev);
3180     +
3181     /* check if we need to start the dev */
3182     if (!mei_host_is_ready(dev)) {
3183     if (mei_hw_is_ready(dev)) {
3184     @@ -763,9 +812,10 @@ irqreturn_t mei_me_irq_thread_handler(int irq, void *dev_id)
3185     /*
3186     * During PG handshake only allowed write is the replay to the
3187     * PG exit message, so block calling write function
3188     - * if the pg state is not idle
3189     + * if the pg event is in PG handshake
3190     */
3191     - if (dev->pg_event == MEI_PG_EVENT_IDLE) {
3192     + if (dev->pg_event != MEI_PG_EVENT_WAIT &&
3193     + dev->pg_event != MEI_PG_EVENT_RECEIVED) {
3194     rets = mei_irq_write_handler(dev, &complete_list);
3195     dev->hbuf_is_ready = mei_hbuf_is_ready(dev);
3196     }
3197     @@ -790,6 +840,7 @@ static const struct mei_hw_ops mei_me_hw_ops = {
3198     .hw_config = mei_me_hw_config,
3199     .hw_start = mei_me_hw_start,
3200    
3201     + .pg_in_transition = mei_me_pg_in_transition,
3202     .pg_is_enabled = mei_me_pg_is_enabled,
3203    
3204     .intr_clear = mei_me_intr_clear,
3205     diff --git a/drivers/misc/mei/hw-txe.c b/drivers/misc/mei/hw-txe.c
3206     index c5e1902e493f..c11a01a1ec21 100644
3207     --- a/drivers/misc/mei/hw-txe.c
3208     +++ b/drivers/misc/mei/hw-txe.c
3209     @@ -16,6 +16,7 @@
3210    
3211     #include <linux/pci.h>
3212     #include <linux/jiffies.h>
3213     +#include <linux/ktime.h>
3214     #include <linux/delay.h>
3215     #include <linux/kthread.h>
3216     #include <linux/irqreturn.h>
3217     @@ -218,26 +219,25 @@ static u32 mei_txe_aliveness_get(struct mei_device *dev)
3218     *
3219     * Polls for HICR_HOST_ALIVENESS_RESP.ALIVENESS_RESP to be set
3220     *
3221     - * Return: > 0 if the expected value was received, -ETIME otherwise
3222     + * Return: 0 if the expected value was received, -ETIME otherwise
3223     */
3224     static int mei_txe_aliveness_poll(struct mei_device *dev, u32 expected)
3225     {
3226     struct mei_txe_hw *hw = to_txe_hw(dev);
3227     - int t = 0;
3228     + ktime_t stop, start;
3229    
3230     + start = ktime_get();
3231     + stop = ktime_add(start, ms_to_ktime(SEC_ALIVENESS_WAIT_TIMEOUT));
3232     do {
3233     hw->aliveness = mei_txe_aliveness_get(dev);
3234     if (hw->aliveness == expected) {
3235     dev->pg_event = MEI_PG_EVENT_IDLE;
3236     - dev_dbg(dev->dev,
3237     - "aliveness settled after %d msecs\n", t);
3238     - return t;
3239     + dev_dbg(dev->dev, "aliveness settled after %lld usecs\n",
3240     + ktime_to_us(ktime_sub(ktime_get(), start)));
3241     + return 0;
3242     }
3243     - mutex_unlock(&dev->device_lock);
3244     - msleep(MSEC_PER_SEC / 5);
3245     - mutex_lock(&dev->device_lock);
3246     - t += MSEC_PER_SEC / 5;
3247     - } while (t < SEC_ALIVENESS_WAIT_TIMEOUT);
3248     + usleep_range(20, 50);
3249     + } while (ktime_before(ktime_get(), stop));
3250    
3251     dev->pg_event = MEI_PG_EVENT_IDLE;
3252     dev_err(dev->dev, "aliveness timed out\n");
3253     @@ -302,6 +302,18 @@ int mei_txe_aliveness_set_sync(struct mei_device *dev, u32 req)
3254     }
3255    
3256     /**
3257     + * mei_txe_pg_in_transition - is device now in pg transition
3258     + *
3259     + * @dev: the device structure
3260     + *
3261     + * Return: true if in pg transition, false otherwise
3262     + */
3263     +static bool mei_txe_pg_in_transition(struct mei_device *dev)
3264     +{
3265     + return dev->pg_event == MEI_PG_EVENT_WAIT;
3266     +}
3267     +
3268     +/**
3269     * mei_txe_pg_is_enabled - detect if PG is supported by HW
3270     *
3271     * @dev: the device structure
3272     @@ -1139,6 +1151,7 @@ static const struct mei_hw_ops mei_txe_hw_ops = {
3273     .hw_config = mei_txe_hw_config,
3274     .hw_start = mei_txe_hw_start,
3275    
3276     + .pg_in_transition = mei_txe_pg_in_transition,
3277     .pg_is_enabled = mei_txe_pg_is_enabled,
3278    
3279     .intr_clear = mei_txe_intr_clear,
3280     diff --git a/drivers/misc/mei/mei_dev.h b/drivers/misc/mei/mei_dev.h
3281     index 71744b16cc8c..909b2d81895b 100644
3282     --- a/drivers/misc/mei/mei_dev.h
3283     +++ b/drivers/misc/mei/mei_dev.h
3284     @@ -264,6 +264,7 @@ struct mei_cl {
3285    
3286     * @fw_status : get fw status registers
3287     * @pg_state : power gating state of the device
3288     + * @pg_in_transition : is device now in pg transition
3289     * @pg_is_enabled : is power gating enabled
3290    
3291     * @intr_clear : clear pending interrupts
3292     @@ -293,6 +294,7 @@ struct mei_hw_ops {
3293    
3294     int (*fw_status)(struct mei_device *dev, struct mei_fw_status *fw_sts);
3295     enum mei_pg_state (*pg_state)(struct mei_device *dev);
3296     + bool (*pg_in_transition)(struct mei_device *dev);
3297     bool (*pg_is_enabled)(struct mei_device *dev);
3298    
3299     void (*intr_clear)(struct mei_device *dev);
3300     @@ -390,11 +392,15 @@ struct mei_cl_device {
3301     * @MEI_PG_EVENT_IDLE: the driver is not in power gating transition
3302     * @MEI_PG_EVENT_WAIT: the driver is waiting for a pg event to complete
3303     * @MEI_PG_EVENT_RECEIVED: the driver received pg event
3304     + * @MEI_PG_EVENT_INTR_WAIT: the driver is waiting for a pg event interrupt
3305     + * @MEI_PG_EVENT_INTR_RECEIVED: the driver received pg event interrupt
3306     */
3307     enum mei_pg_event {
3308     MEI_PG_EVENT_IDLE,
3309     MEI_PG_EVENT_WAIT,
3310     MEI_PG_EVENT_RECEIVED,
3311     + MEI_PG_EVENT_INTR_WAIT,
3312     + MEI_PG_EVENT_INTR_RECEIVED,
3313     };
3314    
3315     /**
3316     @@ -721,6 +727,11 @@ static inline enum mei_pg_state mei_pg_state(struct mei_device *dev)
3317     return dev->ops->pg_state(dev);
3318     }
3319    
3320     +static inline bool mei_pg_in_transition(struct mei_device *dev)
3321     +{
3322     + return dev->ops->pg_in_transition(dev);
3323     +}
3324     +
3325     static inline bool mei_pg_is_enabled(struct mei_device *dev)
3326     {
3327     return dev->ops->pg_is_enabled(dev);
3328     diff --git a/drivers/mmc/host/sdhci-pxav3.c b/drivers/mmc/host/sdhci-pxav3.c
3329     index 38251da7ba32..29708b82ceef 100644
3330     --- a/drivers/mmc/host/sdhci-pxav3.c
3331     +++ b/drivers/mmc/host/sdhci-pxav3.c
3332     @@ -330,16 +330,6 @@ static int sdhci_pxav3_probe(struct platform_device *pdev)
3333     /* enable 1/8V DDR capable */
3334     host->mmc->caps |= MMC_CAP_1_8V_DDR;
3335    
3336     - if (of_device_is_compatible(np, "marvell,armada-380-sdhci")) {
3337     - ret = armada_38x_quirks(pdev, host);
3338     - if (ret < 0)
3339     - goto err_clk_get;
3340     - ret = mv_conf_mbus_windows(pdev, mv_mbus_dram_info());
3341     - if (ret < 0)
3342     - goto err_mbus_win;
3343     - }
3344     -
3345     -
3346     pltfm_host = sdhci_priv(host);
3347     pltfm_host->priv = pxa;
3348    
3349     @@ -352,6 +342,15 @@ static int sdhci_pxav3_probe(struct platform_device *pdev)
3350     pltfm_host->clk = clk;
3351     clk_prepare_enable(clk);
3352    
3353     + if (of_device_is_compatible(np, "marvell,armada-380-sdhci")) {
3354     + ret = armada_38x_quirks(pdev, host);
3355     + if (ret < 0)
3356     + goto err_clk_get;
3357     + ret = mv_conf_mbus_windows(pdev, mv_mbus_dram_info());
3358     + if (ret < 0)
3359     + goto err_mbus_win;
3360     + }
3361     +
3362     match = of_match_device(of_match_ptr(sdhci_pxav3_of_match), &pdev->dev);
3363     if (match) {
3364     ret = mmc_of_parse(host->mmc);
3365     @@ -421,9 +420,9 @@ err_add_host:
3366     pm_runtime_put_noidle(&pdev->dev);
3367     err_of_parse:
3368     err_cd_req:
3369     +err_mbus_win:
3370     clk_disable_unprepare(clk);
3371     err_clk_get:
3372     -err_mbus_win:
3373     sdhci_pltfm_free(pdev);
3374     return ret;
3375     }
3376     diff --git a/drivers/mtd/mtd_blkdevs.c b/drivers/mtd/mtd_blkdevs.c
3377     index d08229eb44d8..3a69b1e56908 100644
3378     --- a/drivers/mtd/mtd_blkdevs.c
3379     +++ b/drivers/mtd/mtd_blkdevs.c
3380     @@ -200,6 +200,7 @@ static int blktrans_open(struct block_device *bdev, fmode_t mode)
3381     return -ERESTARTSYS; /* FIXME: busy loop! -arnd*/
3382    
3383     mutex_lock(&dev->lock);
3384     + mutex_lock(&mtd_table_mutex);
3385    
3386     if (dev->open)
3387     goto unlock;
3388     @@ -223,6 +224,7 @@ static int blktrans_open(struct block_device *bdev, fmode_t mode)
3389    
3390     unlock:
3391     dev->open++;
3392     + mutex_unlock(&mtd_table_mutex);
3393     mutex_unlock(&dev->lock);
3394     blktrans_dev_put(dev);
3395     return ret;
3396     @@ -233,6 +235,7 @@ error_release:
3397     error_put:
3398     module_put(dev->tr->owner);
3399     kref_put(&dev->ref, blktrans_dev_release);
3400     + mutex_unlock(&mtd_table_mutex);
3401     mutex_unlock(&dev->lock);
3402     blktrans_dev_put(dev);
3403     return ret;
3404     @@ -246,6 +249,7 @@ static void blktrans_release(struct gendisk *disk, fmode_t mode)
3405     return;
3406    
3407     mutex_lock(&dev->lock);
3408     + mutex_lock(&mtd_table_mutex);
3409    
3410     if (--dev->open)
3411     goto unlock;
3412     @@ -259,6 +263,7 @@ static void blktrans_release(struct gendisk *disk, fmode_t mode)
3413     __put_mtd_device(dev->mtd);
3414     }
3415     unlock:
3416     + mutex_unlock(&mtd_table_mutex);
3417     mutex_unlock(&dev->lock);
3418     blktrans_dev_put(dev);
3419     }
3420     diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
3421     index 710eb5793eb3..1217eafb61a4 100644
3422     --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
3423     +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
3424     @@ -9307,7 +9307,8 @@ unload_error:
3425     * function stop ramrod is sent, since as part of this ramrod FW access
3426     * PTP registers.
3427     */
3428     - bnx2x_stop_ptp(bp);
3429     + if (bp->flags & PTP_SUPPORTED)
3430     + bnx2x_stop_ptp(bp);
3431    
3432     /* Disable HW interrupts, NAPI */
3433     bnx2x_netif_stop(bp, 1);
3434     diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c
3435     index 67a84cfaefa1..fb34708aa5f4 100644
3436     --- a/drivers/net/ethernet/marvell/mvneta.c
3437     +++ b/drivers/net/ethernet/marvell/mvneta.c
3438     @@ -304,6 +304,7 @@ struct mvneta_port {
3439     unsigned int link;
3440     unsigned int duplex;
3441     unsigned int speed;
3442     + unsigned int tx_csum_limit;
3443     };
3444    
3445     /* The mvneta_tx_desc and mvneta_rx_desc structures describe the
3446     @@ -2441,8 +2442,10 @@ static int mvneta_change_mtu(struct net_device *dev, int mtu)
3447    
3448     dev->mtu = mtu;
3449    
3450     - if (!netif_running(dev))
3451     + if (!netif_running(dev)) {
3452     + netdev_update_features(dev);
3453     return 0;
3454     + }
3455    
3456     /* The interface is running, so we have to force a
3457     * reallocation of the queues
3458     @@ -2471,9 +2474,26 @@ static int mvneta_change_mtu(struct net_device *dev, int mtu)
3459     mvneta_start_dev(pp);
3460     mvneta_port_up(pp);
3461    
3462     + netdev_update_features(dev);
3463     +
3464     return 0;
3465     }
3466    
3467     +static netdev_features_t mvneta_fix_features(struct net_device *dev,
3468     + netdev_features_t features)
3469     +{
3470     + struct mvneta_port *pp = netdev_priv(dev);
3471     +
3472     + if (pp->tx_csum_limit && dev->mtu > pp->tx_csum_limit) {
3473     + features &= ~(NETIF_F_IP_CSUM | NETIF_F_TSO);
3474     + netdev_info(dev,
3475     + "Disable IP checksum for MTU greater than %dB\n",
3476     + pp->tx_csum_limit);
3477     + }
3478     +
3479     + return features;
3480     +}
3481     +
3482     /* Get mac address */
3483     static void mvneta_get_mac_addr(struct mvneta_port *pp, unsigned char *addr)
3484     {
3485     @@ -2791,6 +2811,7 @@ static const struct net_device_ops mvneta_netdev_ops = {
3486     .ndo_set_rx_mode = mvneta_set_rx_mode,
3487     .ndo_set_mac_address = mvneta_set_mac_addr,
3488     .ndo_change_mtu = mvneta_change_mtu,
3489     + .ndo_fix_features = mvneta_fix_features,
3490     .ndo_get_stats64 = mvneta_get_stats64,
3491     .ndo_do_ioctl = mvneta_ioctl,
3492     };
3493     @@ -3029,6 +3050,9 @@ static int mvneta_probe(struct platform_device *pdev)
3494     }
3495     }
3496    
3497     + if (of_device_is_compatible(dn, "marvell,armada-370-neta"))
3498     + pp->tx_csum_limit = 1600;
3499     +
3500     pp->tx_ring_size = MVNETA_MAX_TXD;
3501     pp->rx_ring_size = MVNETA_MAX_RXD;
3502    
3503     @@ -3101,6 +3125,7 @@ static int mvneta_remove(struct platform_device *pdev)
3504    
3505     static const struct of_device_id mvneta_match[] = {
3506     { .compatible = "marvell,armada-370-neta" },
3507     + { .compatible = "marvell,armada-xp-neta" },
3508     { }
3509     };
3510     MODULE_DEVICE_TABLE(of, mvneta_match);
3511     diff --git a/drivers/net/ethernet/mellanox/mlx4/en_tx.c b/drivers/net/ethernet/mellanox/mlx4/en_tx.c
3512     index 142ddd595e2e..5980d3fe597c 100644
3513     --- a/drivers/net/ethernet/mellanox/mlx4/en_tx.c
3514     +++ b/drivers/net/ethernet/mellanox/mlx4/en_tx.c
3515     @@ -66,6 +66,7 @@ int mlx4_en_create_tx_ring(struct mlx4_en_priv *priv,
3516     ring->size = size;
3517     ring->size_mask = size - 1;
3518     ring->stride = stride;
3519     + ring->full_size = ring->size - HEADROOM - MAX_DESC_TXBBS;
3520    
3521     tmp = size * sizeof(struct mlx4_en_tx_info);
3522     ring->tx_info = kmalloc_node(tmp, GFP_KERNEL | __GFP_NOWARN, node);
3523     @@ -223,6 +224,11 @@ void mlx4_en_deactivate_tx_ring(struct mlx4_en_priv *priv,
3524     MLX4_QP_STATE_RST, NULL, 0, 0, &ring->qp);
3525     }
3526    
3527     +static inline bool mlx4_en_is_tx_ring_full(struct mlx4_en_tx_ring *ring)
3528     +{
3529     + return ring->prod - ring->cons > ring->full_size;
3530     +}
3531     +
3532     static void mlx4_en_stamp_wqe(struct mlx4_en_priv *priv,
3533     struct mlx4_en_tx_ring *ring, int index,
3534     u8 owner)
3535     @@ -465,11 +471,10 @@ static bool mlx4_en_process_tx_cq(struct net_device *dev,
3536    
3537     netdev_tx_completed_queue(ring->tx_queue, packets, bytes);
3538    
3539     - /*
3540     - * Wakeup Tx queue if this stopped, and at least 1 packet
3541     - * was completed
3542     + /* Wakeup Tx queue if this stopped, and ring is not full.
3543     */
3544     - if (netif_tx_queue_stopped(ring->tx_queue) && txbbs_skipped > 0) {
3545     + if (netif_tx_queue_stopped(ring->tx_queue) &&
3546     + !mlx4_en_is_tx_ring_full(ring)) {
3547     netif_tx_wake_queue(ring->tx_queue);
3548     ring->wake_queue++;
3549     }
3550     @@ -913,8 +918,7 @@ netdev_tx_t mlx4_en_xmit(struct sk_buff *skb, struct net_device *dev)
3551     skb_tx_timestamp(skb);
3552    
3553     /* Check available TXBBs And 2K spare for prefetch */
3554     - stop_queue = (int)(ring->prod - ring_cons) >
3555     - ring->size - HEADROOM - MAX_DESC_TXBBS;
3556     + stop_queue = mlx4_en_is_tx_ring_full(ring);
3557     if (unlikely(stop_queue)) {
3558     netif_tx_stop_queue(ring->tx_queue);
3559     ring->queue_stopped++;
3560     @@ -983,8 +987,7 @@ netdev_tx_t mlx4_en_xmit(struct sk_buff *skb, struct net_device *dev)
3561     smp_rmb();
3562    
3563     ring_cons = ACCESS_ONCE(ring->cons);
3564     - if (unlikely(((int)(ring->prod - ring_cons)) <=
3565     - ring->size - HEADROOM - MAX_DESC_TXBBS)) {
3566     + if (unlikely(!mlx4_en_is_tx_ring_full(ring))) {
3567     netif_tx_wake_queue(ring->tx_queue);
3568     ring->wake_queue++;
3569     }
3570     diff --git a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
3571     index 692bd4e8b21f..4f908065accf 100644
3572     --- a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
3573     +++ b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
3574     @@ -280,6 +280,7 @@ struct mlx4_en_tx_ring {
3575     u32 size; /* number of TXBBs */
3576     u32 size_mask;
3577     u16 stride;
3578     + u32 full_size;
3579     u16 cqn; /* index of port CQ associated with this ring */
3580     u32 buf_size;
3581     __be32 doorbell_qpn;
3582     diff --git a/drivers/net/ethernet/stmicro/stmmac/descs.h b/drivers/net/ethernet/stmicro/stmmac/descs.h
3583     index ad3996038018..799c2929c536 100644
3584     --- a/drivers/net/ethernet/stmicro/stmmac/descs.h
3585     +++ b/drivers/net/ethernet/stmicro/stmmac/descs.h
3586     @@ -158,6 +158,8 @@ struct dma_desc {
3587     u32 buffer2_size:13;
3588     u32 reserved4:3;
3589     } etx; /* -- enhanced -- */
3590     +
3591     + u64 all_flags;
3592     } des01;
3593     unsigned int des2;
3594     unsigned int des3;
3595     diff --git a/drivers/net/ethernet/stmicro/stmmac/enh_desc.c b/drivers/net/ethernet/stmicro/stmmac/enh_desc.c
3596     index 1e2bcf5f89e1..7d944449f5ef 100644
3597     --- a/drivers/net/ethernet/stmicro/stmmac/enh_desc.c
3598     +++ b/drivers/net/ethernet/stmicro/stmmac/enh_desc.c
3599     @@ -240,6 +240,7 @@ static int enh_desc_get_rx_status(void *data, struct stmmac_extra_stats *x,
3600     static void enh_desc_init_rx_desc(struct dma_desc *p, int disable_rx_ic,
3601     int mode, int end)
3602     {
3603     + p->des01.all_flags = 0;
3604     p->des01.erx.own = 1;
3605     p->des01.erx.buffer1_size = BUF_SIZE_8KiB - 1;
3606    
3607     @@ -254,7 +255,7 @@ static void enh_desc_init_rx_desc(struct dma_desc *p, int disable_rx_ic,
3608    
3609     static void enh_desc_init_tx_desc(struct dma_desc *p, int mode, int end)
3610     {
3611     - p->des01.etx.own = 0;
3612     + p->des01.all_flags = 0;
3613     if (mode == STMMAC_CHAIN_MODE)
3614     ehn_desc_tx_set_on_chain(p, end);
3615     else
3616     diff --git a/drivers/net/ethernet/stmicro/stmmac/norm_desc.c b/drivers/net/ethernet/stmicro/stmmac/norm_desc.c
3617     index 35ad4f427ae2..48c3456445b2 100644
3618     --- a/drivers/net/ethernet/stmicro/stmmac/norm_desc.c
3619     +++ b/drivers/net/ethernet/stmicro/stmmac/norm_desc.c
3620     @@ -123,6 +123,7 @@ static int ndesc_get_rx_status(void *data, struct stmmac_extra_stats *x,
3621     static void ndesc_init_rx_desc(struct dma_desc *p, int disable_rx_ic, int mode,
3622     int end)
3623     {
3624     + p->des01.all_flags = 0;
3625     p->des01.rx.own = 1;
3626     p->des01.rx.buffer1_size = BUF_SIZE_2KiB - 1;
3627    
3628     @@ -137,7 +138,7 @@ static void ndesc_init_rx_desc(struct dma_desc *p, int disable_rx_ic, int mode,
3629    
3630     static void ndesc_init_tx_desc(struct dma_desc *p, int mode, int end)
3631     {
3632     - p->des01.tx.own = 0;
3633     + p->des01.all_flags = 0;
3634     if (mode == STMMAC_CHAIN_MODE)
3635     ndesc_tx_set_on_chain(p, end);
3636     else
3637     diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
3638     index 18c46bb0f3bf..c769da8d6f3a 100644
3639     --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
3640     +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
3641     @@ -1172,41 +1172,41 @@ static int alloc_dma_desc_resources(struct stmmac_priv *priv)
3642     goto err_tx_skbuff;
3643    
3644     if (priv->extend_desc) {
3645     - priv->dma_erx = dma_alloc_coherent(priv->device, rxsize *
3646     - sizeof(struct
3647     - dma_extended_desc),
3648     - &priv->dma_rx_phy,
3649     - GFP_KERNEL);
3650     + priv->dma_erx = dma_zalloc_coherent(priv->device, rxsize *
3651     + sizeof(struct
3652     + dma_extended_desc),
3653     + &priv->dma_rx_phy,
3654     + GFP_KERNEL);
3655     if (!priv->dma_erx)
3656     goto err_dma;
3657    
3658     - priv->dma_etx = dma_alloc_coherent(priv->device, txsize *
3659     - sizeof(struct
3660     - dma_extended_desc),
3661     - &priv->dma_tx_phy,
3662     - GFP_KERNEL);
3663     + priv->dma_etx = dma_zalloc_coherent(priv->device, txsize *
3664     + sizeof(struct
3665     + dma_extended_desc),
3666     + &priv->dma_tx_phy,
3667     + GFP_KERNEL);
3668     if (!priv->dma_etx) {
3669     dma_free_coherent(priv->device, priv->dma_rx_size *
3670     - sizeof(struct dma_extended_desc),
3671     - priv->dma_erx, priv->dma_rx_phy);
3672     + sizeof(struct dma_extended_desc),
3673     + priv->dma_erx, priv->dma_rx_phy);
3674     goto err_dma;
3675     }
3676     } else {
3677     - priv->dma_rx = dma_alloc_coherent(priv->device, rxsize *
3678     - sizeof(struct dma_desc),
3679     - &priv->dma_rx_phy,
3680     - GFP_KERNEL);
3681     + priv->dma_rx = dma_zalloc_coherent(priv->device, rxsize *
3682     + sizeof(struct dma_desc),
3683     + &priv->dma_rx_phy,
3684     + GFP_KERNEL);
3685     if (!priv->dma_rx)
3686     goto err_dma;
3687    
3688     - priv->dma_tx = dma_alloc_coherent(priv->device, txsize *
3689     - sizeof(struct dma_desc),
3690     - &priv->dma_tx_phy,
3691     - GFP_KERNEL);
3692     + priv->dma_tx = dma_zalloc_coherent(priv->device, txsize *
3693     + sizeof(struct dma_desc),
3694     + &priv->dma_tx_phy,
3695     + GFP_KERNEL);
3696     if (!priv->dma_tx) {
3697     dma_free_coherent(priv->device, priv->dma_rx_size *
3698     - sizeof(struct dma_desc),
3699     - priv->dma_rx, priv->dma_rx_phy);
3700     + sizeof(struct dma_desc),
3701     + priv->dma_rx, priv->dma_rx_phy);
3702     goto err_dma;
3703     }
3704     }
3705     diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
3706     index 3fc91e89f5a5..70a0d88de654 100644
3707     --- a/drivers/net/phy/phy_device.c
3708     +++ b/drivers/net/phy/phy_device.c
3709     @@ -782,10 +782,11 @@ static int genphy_config_advert(struct phy_device *phydev)
3710     if (phydev->supported & (SUPPORTED_1000baseT_Half |
3711     SUPPORTED_1000baseT_Full)) {
3712     adv |= ethtool_adv_to_mii_ctrl1000_t(advertise);
3713     - if (adv != oldadv)
3714     - changed = 1;
3715     }
3716    
3717     + if (adv != oldadv)
3718     + changed = 1;
3719     +
3720     err = phy_write(phydev, MII_CTRL1000, adv);
3721     if (err < 0)
3722     return err;
3723     diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
3724     index 4f18a6be0c7d..2cf58993da8b 100644
3725     --- a/drivers/net/wireless/ath/ath9k/main.c
3726     +++ b/drivers/net/wireless/ath/ath9k/main.c
3727     @@ -212,11 +212,13 @@ static bool ath_prepare_reset(struct ath_softc *sc)
3728     ath_stop_ani(sc);
3729     ath9k_hw_disable_interrupts(ah);
3730    
3731     - if (!ath_drain_all_txq(sc))
3732     - ret = false;
3733     -
3734     - if (!ath_stoprecv(sc))
3735     - ret = false;
3736     + if (AR_SREV_9300_20_OR_LATER(ah)) {
3737     + ret &= ath_stoprecv(sc);
3738     + ret &= ath_drain_all_txq(sc);
3739     + } else {
3740     + ret &= ath_drain_all_txq(sc);
3741     + ret &= ath_stoprecv(sc);
3742     + }
3743    
3744     return ret;
3745     }
3746     diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c
3747     index 5d4173ee55bc..614d62ebc0ba 100644
3748     --- a/drivers/net/wireless/b43/main.c
3749     +++ b/drivers/net/wireless/b43/main.c
3750     @@ -5314,6 +5314,10 @@ static void b43_supported_bands(struct b43_wldev *dev, bool *have_2ghz_phy,
3751     *have_5ghz_phy = true;
3752     return;
3753     case 0x4321: /* BCM4306 */
3754     + /* There are 14e4:4321 PCI devs with 2.4 GHz BCM4321 (N-PHY) */
3755     + if (dev->phy.type != B43_PHYTYPE_G)
3756     + break;
3757     + /* fall through */
3758     case 0x4313: /* BCM4311 */
3759     case 0x431a: /* BCM4318 */
3760     case 0x432a: /* BCM4321 */
3761     diff --git a/drivers/net/wireless/rtlwifi/rtl8188ee/hw.c b/drivers/net/wireless/rtlwifi/rtl8188ee/hw.c
3762     index f2b9713c456e..425ccb301705 100644
3763     --- a/drivers/net/wireless/rtlwifi/rtl8188ee/hw.c
3764     +++ b/drivers/net/wireless/rtlwifi/rtl8188ee/hw.c
3765     @@ -1353,27 +1353,11 @@ void rtl88ee_set_qos(struct ieee80211_hw *hw, int aci)
3766     }
3767     }
3768    
3769     -static void rtl88ee_clear_interrupt(struct ieee80211_hw *hw)
3770     -{
3771     - struct rtl_priv *rtlpriv = rtl_priv(hw);
3772     - u32 tmp;
3773     -
3774     - tmp = rtl_read_dword(rtlpriv, REG_HISR);
3775     - rtl_write_dword(rtlpriv, REG_HISR, tmp);
3776     -
3777     - tmp = rtl_read_dword(rtlpriv, REG_HISRE);
3778     - rtl_write_dword(rtlpriv, REG_HISRE, tmp);
3779     -
3780     - tmp = rtl_read_dword(rtlpriv, REG_HSISR);
3781     - rtl_write_dword(rtlpriv, REG_HSISR, tmp);
3782     -}
3783     -
3784     void rtl88ee_enable_interrupt(struct ieee80211_hw *hw)
3785     {
3786     struct rtl_priv *rtlpriv = rtl_priv(hw);
3787     struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
3788    
3789     - rtl88ee_clear_interrupt(hw);/*clear it here first*/
3790     rtl_write_dword(rtlpriv, REG_HIMR,
3791     rtlpci->irq_mask[0] & 0xFFFFFFFF);
3792     rtl_write_dword(rtlpriv, REG_HIMRE,
3793     diff --git a/drivers/net/wireless/rtlwifi/rtl8192ee/hw.c b/drivers/net/wireless/rtlwifi/rtl8192ee/hw.c
3794     index b461b3128da5..93624541e495 100644
3795     --- a/drivers/net/wireless/rtlwifi/rtl8192ee/hw.c
3796     +++ b/drivers/net/wireless/rtlwifi/rtl8192ee/hw.c
3797     @@ -1584,28 +1584,11 @@ void rtl92ee_set_qos(struct ieee80211_hw *hw, int aci)
3798     }
3799     }
3800    
3801     -static void rtl92ee_clear_interrupt(struct ieee80211_hw *hw)
3802     -{
3803     - struct rtl_priv *rtlpriv = rtl_priv(hw);
3804     - u32 tmp;
3805     -
3806     - tmp = rtl_read_dword(rtlpriv, REG_HISR);
3807     - rtl_write_dword(rtlpriv, REG_HISR, tmp);
3808     -
3809     - tmp = rtl_read_dword(rtlpriv, REG_HISRE);
3810     - rtl_write_dword(rtlpriv, REG_HISRE, tmp);
3811     -
3812     - tmp = rtl_read_dword(rtlpriv, REG_HSISR);
3813     - rtl_write_dword(rtlpriv, REG_HSISR, tmp);
3814     -}
3815     -
3816     void rtl92ee_enable_interrupt(struct ieee80211_hw *hw)
3817     {
3818     struct rtl_priv *rtlpriv = rtl_priv(hw);
3819     struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
3820    
3821     - rtl92ee_clear_interrupt(hw);/*clear it here first*/
3822     -
3823     rtl_write_dword(rtlpriv, REG_HIMR, rtlpci->irq_mask[0] & 0xFFFFFFFF);
3824     rtl_write_dword(rtlpriv, REG_HIMRE, rtlpci->irq_mask[1] & 0xFFFFFFFF);
3825     rtlpci->irq_enabled = true;
3826     diff --git a/drivers/net/wireless/rtlwifi/rtl8723ae/hw.c b/drivers/net/wireless/rtlwifi/rtl8723ae/hw.c
3827     index aa085462d0e9..5e1334082570 100644
3828     --- a/drivers/net/wireless/rtlwifi/rtl8723ae/hw.c
3829     +++ b/drivers/net/wireless/rtlwifi/rtl8723ae/hw.c
3830     @@ -1258,18 +1258,6 @@ void rtl8723e_set_qos(struct ieee80211_hw *hw, int aci)
3831     }
3832     }
3833    
3834     -static void rtl8723e_clear_interrupt(struct ieee80211_hw *hw)
3835     -{
3836     - struct rtl_priv *rtlpriv = rtl_priv(hw);
3837     - u32 tmp;
3838     -
3839     - tmp = rtl_read_dword(rtlpriv, REG_HISR);
3840     - rtl_write_dword(rtlpriv, REG_HISR, tmp);
3841     -
3842     - tmp = rtl_read_dword(rtlpriv, REG_HISRE);
3843     - rtl_write_dword(rtlpriv, REG_HISRE, tmp);
3844     -}
3845     -
3846     void rtl8723e_enable_interrupt(struct ieee80211_hw *hw)
3847     {
3848     struct rtl_priv *rtlpriv = rtl_priv(hw);
3849     @@ -1284,7 +1272,6 @@ void rtl8723e_disable_interrupt(struct ieee80211_hw *hw)
3850     {
3851     struct rtl_priv *rtlpriv = rtl_priv(hw);
3852     struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
3853     - rtl8723e_clear_interrupt(hw);/*clear it here first*/
3854     rtl_write_dword(rtlpriv, 0x3a8, IMR8190_DISABLED);
3855     rtl_write_dword(rtlpriv, 0x3ac, IMR8190_DISABLED);
3856     rtlpci->irq_enabled = false;
3857     diff --git a/drivers/net/wireless/rtlwifi/rtl8723be/hw.c b/drivers/net/wireless/rtlwifi/rtl8723be/hw.c
3858     index 6dad28e77bbb..cfe679963676 100644
3859     --- a/drivers/net/wireless/rtlwifi/rtl8723be/hw.c
3860     +++ b/drivers/net/wireless/rtlwifi/rtl8723be/hw.c
3861     @@ -1634,28 +1634,11 @@ void rtl8723be_set_qos(struct ieee80211_hw *hw, int aci)
3862     }
3863     }
3864    
3865     -static void rtl8723be_clear_interrupt(struct ieee80211_hw *hw)
3866     -{
3867     - struct rtl_priv *rtlpriv = rtl_priv(hw);
3868     - u32 tmp;
3869     -
3870     - tmp = rtl_read_dword(rtlpriv, REG_HISR);
3871     - rtl_write_dword(rtlpriv, REG_HISR, tmp);
3872     -
3873     - tmp = rtl_read_dword(rtlpriv, REG_HISRE);
3874     - rtl_write_dword(rtlpriv, REG_HISRE, tmp);
3875     -
3876     - tmp = rtl_read_dword(rtlpriv, REG_HSISR);
3877     - rtl_write_dword(rtlpriv, REG_HSISR, tmp);
3878     -}
3879     -
3880     void rtl8723be_enable_interrupt(struct ieee80211_hw *hw)
3881     {
3882     struct rtl_priv *rtlpriv = rtl_priv(hw);
3883     struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
3884    
3885     - rtl8723be_clear_interrupt(hw);/*clear it here first*/
3886     -
3887     rtl_write_dword(rtlpriv, REG_HIMR, rtlpci->irq_mask[0] & 0xFFFFFFFF);
3888     rtl_write_dword(rtlpriv, REG_HIMRE, rtlpci->irq_mask[1] & 0xFFFFFFFF);
3889     rtlpci->irq_enabled = true;
3890     diff --git a/drivers/net/wireless/rtlwifi/rtl8821ae/hw.c b/drivers/net/wireless/rtlwifi/rtl8821ae/hw.c
3891     index 8ec8200002c7..43c14d4da563 100644
3892     --- a/drivers/net/wireless/rtlwifi/rtl8821ae/hw.c
3893     +++ b/drivers/net/wireless/rtlwifi/rtl8821ae/hw.c
3894     @@ -2253,31 +2253,11 @@ void rtl8821ae_set_qos(struct ieee80211_hw *hw, int aci)
3895     }
3896     }
3897    
3898     -static void rtl8821ae_clear_interrupt(struct ieee80211_hw *hw)
3899     -{
3900     - struct rtl_priv *rtlpriv = rtl_priv(hw);
3901     - u32 tmp;
3902     - tmp = rtl_read_dword(rtlpriv, REG_HISR);
3903     - /*printk("clear interrupt first:\n");
3904     - printk("0x%x = 0x%08x\n",REG_HISR, tmp);*/
3905     - rtl_write_dword(rtlpriv, REG_HISR, tmp);
3906     -
3907     - tmp = rtl_read_dword(rtlpriv, REG_HISRE);
3908     - /*printk("0x%x = 0x%08x\n",REG_HISRE, tmp);*/
3909     - rtl_write_dword(rtlpriv, REG_HISRE, tmp);
3910     -
3911     - tmp = rtl_read_dword(rtlpriv, REG_HSISR);
3912     - /*printk("0x%x = 0x%08x\n",REG_HSISR, tmp);*/
3913     - rtl_write_dword(rtlpriv, REG_HSISR, tmp);
3914     -}
3915     -
3916     void rtl8821ae_enable_interrupt(struct ieee80211_hw *hw)
3917     {
3918     struct rtl_priv *rtlpriv = rtl_priv(hw);
3919     struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
3920    
3921     - rtl8821ae_clear_interrupt(hw);/*clear it here first*/
3922     -
3923     rtl_write_dword(rtlpriv, REG_HIMR, rtlpci->irq_mask[0] & 0xFFFFFFFF);
3924     rtl_write_dword(rtlpriv, REG_HIMRE, rtlpci->irq_mask[1] & 0xFFFFFFFF);
3925     rtlpci->irq_enabled = true;
3926     diff --git a/drivers/nfc/st21nfcb/i2c.c b/drivers/nfc/st21nfcb/i2c.c
3927     index 2cf867b9796d..157259d5fa26 100644
3928     --- a/drivers/nfc/st21nfcb/i2c.c
3929     +++ b/drivers/nfc/st21nfcb/i2c.c
3930     @@ -90,11 +90,6 @@ static void st21nfcb_nci_i2c_disable(void *phy_id)
3931     gpio_set_value(phy->gpio_reset, 1);
3932     }
3933    
3934     -static void st21nfcb_nci_remove_header(struct sk_buff *skb)
3935     -{
3936     - skb_pull(skb, ST21NFCB_FRAME_HEADROOM);
3937     -}
3938     -
3939     /*
3940     * Writing a frame must not return the number of written bytes.
3941     * It must return either zero for success, or <0 for error.
3942     @@ -124,8 +119,6 @@ static int st21nfcb_nci_i2c_write(void *phy_id, struct sk_buff *skb)
3943     r = 0;
3944     }
3945    
3946     - st21nfcb_nci_remove_header(skb);
3947     -
3948     return r;
3949     }
3950    
3951     @@ -395,9 +388,6 @@ static int st21nfcb_nci_i2c_remove(struct i2c_client *client)
3952    
3953     ndlc_remove(phy->ndlc);
3954    
3955     - if (phy->powered)
3956     - st21nfcb_nci_i2c_disable(phy);
3957     -
3958     return 0;
3959     }
3960    
3961     diff --git a/drivers/nfc/st21nfcb/st21nfcb.c b/drivers/nfc/st21nfcb/st21nfcb.c
3962     index ea63d5877831..28b39143a830 100644
3963     --- a/drivers/nfc/st21nfcb/st21nfcb.c
3964     +++ b/drivers/nfc/st21nfcb/st21nfcb.c
3965     @@ -122,11 +122,8 @@ EXPORT_SYMBOL_GPL(st21nfcb_nci_probe);
3966    
3967     void st21nfcb_nci_remove(struct nci_dev *ndev)
3968     {
3969     - struct st21nfcb_nci_info *info = nci_get_drvdata(ndev);
3970     -
3971     nci_unregister_device(ndev);
3972     nci_free_device(ndev);
3973     - kfree(info);
3974     }
3975     EXPORT_SYMBOL_GPL(st21nfcb_nci_remove);
3976    
3977     diff --git a/drivers/of/address.c b/drivers/of/address.c
3978     index 216b00d99bd8..1dba1a9c1fcf 100644
3979     --- a/drivers/of/address.c
3980     +++ b/drivers/of/address.c
3981     @@ -712,7 +712,7 @@ int __weak pci_register_io_range(phys_addr_t addr, resource_size_t size)
3982     }
3983    
3984     /* add the range to the list */
3985     - range = kzalloc(sizeof(*range), GFP_KERNEL);
3986     + range = kzalloc(sizeof(*range), GFP_ATOMIC);
3987     if (!range) {
3988     err = -ENOMEM;
3989     goto end_register;
3990     @@ -765,7 +765,7 @@ unsigned long __weak pci_address_to_pio(phys_addr_t address)
3991     spin_lock(&io_range_lock);
3992     list_for_each_entry(res, &io_range_list, list) {
3993     if (address >= res->start && address < res->start + res->size) {
3994     - addr = res->start - address + offset;
3995     + addr = address - res->start + offset;
3996     break;
3997     }
3998     offset += res->size;
3999     diff --git a/drivers/pci/hotplug/pciehp_hpc.c b/drivers/pci/hotplug/pciehp_hpc.c
4000     index 0ebf754fc177..6d6868811e56 100644
4001     --- a/drivers/pci/hotplug/pciehp_hpc.c
4002     +++ b/drivers/pci/hotplug/pciehp_hpc.c
4003     @@ -176,20 +176,17 @@ static void pcie_wait_cmd(struct controller *ctrl)
4004     jiffies_to_msecs(jiffies - ctrl->cmd_started));
4005     }
4006    
4007     -/**
4008     - * pcie_write_cmd - Issue controller command
4009     - * @ctrl: controller to which the command is issued
4010     - * @cmd: command value written to slot control register
4011     - * @mask: bitmask of slot control register to be modified
4012     - */
4013     -static void pcie_write_cmd(struct controller *ctrl, u16 cmd, u16 mask)
4014     +static void pcie_do_write_cmd(struct controller *ctrl, u16 cmd,
4015     + u16 mask, bool wait)
4016     {
4017     struct pci_dev *pdev = ctrl_dev(ctrl);
4018     u16 slot_ctrl;
4019    
4020     mutex_lock(&ctrl->ctrl_lock);
4021    
4022     - /* Wait for any previous command that might still be in progress */
4023     + /*
4024     + * Always wait for any previous command that might still be in progress
4025     + */
4026     pcie_wait_cmd(ctrl);
4027    
4028     pcie_capability_read_word(pdev, PCI_EXP_SLTCTL, &slot_ctrl);
4029     @@ -201,9 +198,33 @@ static void pcie_write_cmd(struct controller *ctrl, u16 cmd, u16 mask)
4030     ctrl->cmd_started = jiffies;
4031     ctrl->slot_ctrl = slot_ctrl;
4032    
4033     + /*
4034     + * Optionally wait for the hardware to be ready for a new command,
4035     + * indicating completion of the above issued command.
4036     + */
4037     + if (wait)
4038     + pcie_wait_cmd(ctrl);
4039     +
4040     mutex_unlock(&ctrl->ctrl_lock);
4041     }
4042    
4043     +/**
4044     + * pcie_write_cmd - Issue controller command
4045     + * @ctrl: controller to which the command is issued
4046     + * @cmd: command value written to slot control register
4047     + * @mask: bitmask of slot control register to be modified
4048     + */
4049     +static void pcie_write_cmd(struct controller *ctrl, u16 cmd, u16 mask)
4050     +{
4051     + pcie_do_write_cmd(ctrl, cmd, mask, true);
4052     +}
4053     +
4054     +/* Same as above without waiting for the hardware to latch */
4055     +static void pcie_write_cmd_nowait(struct controller *ctrl, u16 cmd, u16 mask)
4056     +{
4057     + pcie_do_write_cmd(ctrl, cmd, mask, false);
4058     +}
4059     +
4060     bool pciehp_check_link_active(struct controller *ctrl)
4061     {
4062     struct pci_dev *pdev = ctrl_dev(ctrl);
4063     @@ -422,7 +443,7 @@ void pciehp_set_attention_status(struct slot *slot, u8 value)
4064     default:
4065     return;
4066     }
4067     - pcie_write_cmd(ctrl, slot_cmd, PCI_EXP_SLTCTL_AIC);
4068     + pcie_write_cmd_nowait(ctrl, slot_cmd, PCI_EXP_SLTCTL_AIC);
4069     ctrl_dbg(ctrl, "%s: SLOTCTRL %x write cmd %x\n", __func__,
4070     pci_pcie_cap(ctrl->pcie->port) + PCI_EXP_SLTCTL, slot_cmd);
4071     }
4072     @@ -434,7 +455,8 @@ void pciehp_green_led_on(struct slot *slot)
4073     if (!PWR_LED(ctrl))
4074     return;
4075    
4076     - pcie_write_cmd(ctrl, PCI_EXP_SLTCTL_PWR_IND_ON, PCI_EXP_SLTCTL_PIC);
4077     + pcie_write_cmd_nowait(ctrl, PCI_EXP_SLTCTL_PWR_IND_ON,
4078     + PCI_EXP_SLTCTL_PIC);
4079     ctrl_dbg(ctrl, "%s: SLOTCTRL %x write cmd %x\n", __func__,
4080     pci_pcie_cap(ctrl->pcie->port) + PCI_EXP_SLTCTL,
4081     PCI_EXP_SLTCTL_PWR_IND_ON);
4082     @@ -447,7 +469,8 @@ void pciehp_green_led_off(struct slot *slot)
4083     if (!PWR_LED(ctrl))
4084     return;
4085    
4086     - pcie_write_cmd(ctrl, PCI_EXP_SLTCTL_PWR_IND_OFF, PCI_EXP_SLTCTL_PIC);
4087     + pcie_write_cmd_nowait(ctrl, PCI_EXP_SLTCTL_PWR_IND_OFF,
4088     + PCI_EXP_SLTCTL_PIC);
4089     ctrl_dbg(ctrl, "%s: SLOTCTRL %x write cmd %x\n", __func__,
4090     pci_pcie_cap(ctrl->pcie->port) + PCI_EXP_SLTCTL,
4091     PCI_EXP_SLTCTL_PWR_IND_OFF);
4092     @@ -460,7 +483,8 @@ void pciehp_green_led_blink(struct slot *slot)
4093     if (!PWR_LED(ctrl))
4094     return;
4095    
4096     - pcie_write_cmd(ctrl, PCI_EXP_SLTCTL_PWR_IND_BLINK, PCI_EXP_SLTCTL_PIC);
4097     + pcie_write_cmd_nowait(ctrl, PCI_EXP_SLTCTL_PWR_IND_BLINK,
4098     + PCI_EXP_SLTCTL_PIC);
4099     ctrl_dbg(ctrl, "%s: SLOTCTRL %x write cmd %x\n", __func__,
4100     pci_pcie_cap(ctrl->pcie->port) + PCI_EXP_SLTCTL,
4101     PCI_EXP_SLTCTL_PWR_IND_BLINK);
4102     @@ -613,7 +637,7 @@ void pcie_enable_notification(struct controller *ctrl)
4103     PCI_EXP_SLTCTL_HPIE | PCI_EXP_SLTCTL_CCIE |
4104     PCI_EXP_SLTCTL_DLLSCE);
4105    
4106     - pcie_write_cmd(ctrl, cmd, mask);
4107     + pcie_write_cmd_nowait(ctrl, cmd, mask);
4108     ctrl_dbg(ctrl, "%s: SLOTCTRL %x write cmd %x\n", __func__,
4109     pci_pcie_cap(ctrl->pcie->port) + PCI_EXP_SLTCTL, cmd);
4110     }
4111     @@ -664,7 +688,7 @@ int pciehp_reset_slot(struct slot *slot, int probe)
4112     pci_reset_bridge_secondary_bus(ctrl->pcie->port);
4113    
4114     pcie_capability_write_word(pdev, PCI_EXP_SLTSTA, stat_mask);
4115     - pcie_write_cmd(ctrl, ctrl_mask, ctrl_mask);
4116     + pcie_write_cmd_nowait(ctrl, ctrl_mask, ctrl_mask);
4117     ctrl_dbg(ctrl, "%s: SLOTCTRL %x write cmd %x\n", __func__,
4118     pci_pcie_cap(ctrl->pcie->port) + PCI_EXP_SLTCTL, ctrl_mask);
4119     if (pciehp_poll_mode)
4120     diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
4121     index 0190d1ee36b7..ff7af33f2353 100644
4122     --- a/drivers/pci/pci.c
4123     +++ b/drivers/pci/pci.c
4124     @@ -4299,6 +4299,17 @@ bool pci_device_is_present(struct pci_dev *pdev)
4125     }
4126     EXPORT_SYMBOL_GPL(pci_device_is_present);
4127    
4128     +void pci_ignore_hotplug(struct pci_dev *dev)
4129     +{
4130     + struct pci_dev *bridge = dev->bus->self;
4131     +
4132     + dev->ignore_hotplug = 1;
4133     + /* Propagate the "ignore hotplug" setting to the parent bridge. */
4134     + if (bridge)
4135     + bridge->ignore_hotplug = 1;
4136     +}
4137     +EXPORT_SYMBOL_GPL(pci_ignore_hotplug);
4138     +
4139     #define RESOURCE_ALIGNMENT_PARAM_SIZE COMMAND_LINE_SIZE
4140     static char resource_alignment_param[RESOURCE_ALIGNMENT_PARAM_SIZE] = {0};
4141     static DEFINE_SPINLOCK(resource_alignment_lock);
4142     diff --git a/drivers/pcmcia/topic.h b/drivers/pcmcia/topic.h
4143     index 615a45a8fe86..582688fe7505 100644
4144     --- a/drivers/pcmcia/topic.h
4145     +++ b/drivers/pcmcia/topic.h
4146     @@ -104,6 +104,9 @@
4147     #define TOPIC_EXCA_IF_CONTROL 0x3e /* 8 bit */
4148     #define TOPIC_EXCA_IFC_33V_ENA 0x01
4149    
4150     +#define TOPIC_PCI_CFG_PPBCN 0x3e /* 16-bit */
4151     +#define TOPIC_PCI_CFG_PPBCN_WBEN 0x0400
4152     +
4153     static void topic97_zoom_video(struct pcmcia_socket *sock, int onoff)
4154     {
4155     struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
4156     @@ -138,6 +141,7 @@ static int topic97_override(struct yenta_socket *socket)
4157     static int topic95_override(struct yenta_socket *socket)
4158     {
4159     u8 fctrl;
4160     + u16 ppbcn;
4161    
4162     /* enable 3.3V support for 16bit cards */
4163     fctrl = exca_readb(socket, TOPIC_EXCA_IF_CONTROL);
4164     @@ -146,6 +150,18 @@ static int topic95_override(struct yenta_socket *socket)
4165     /* tell yenta to use exca registers to power 16bit cards */
4166     socket->flags |= YENTA_16BIT_POWER_EXCA | YENTA_16BIT_POWER_DF;
4167    
4168     + /* Disable write buffers to prevent lockups under load with numerous
4169     + Cardbus cards, observed on Tecra 500CDT and reported elsewhere on the
4170     + net. This is not a power-on default according to the datasheet
4171     + but some BIOSes seem to set it. */
4172     + if (pci_read_config_word(socket->dev, TOPIC_PCI_CFG_PPBCN, &ppbcn) == 0
4173     + && socket->dev->revision <= 7
4174     + && (ppbcn & TOPIC_PCI_CFG_PPBCN_WBEN)) {
4175     + ppbcn &= ~TOPIC_PCI_CFG_PPBCN_WBEN;
4176     + pci_write_config_word(socket->dev, TOPIC_PCI_CFG_PPBCN, ppbcn);
4177     + dev_info(&socket->dev->dev, "Disabled ToPIC95 Cardbus write buffers.\n");
4178     + }
4179     +
4180     return 0;
4181     }
4182    
4183     diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-370.c b/drivers/pinctrl/mvebu/pinctrl-armada-370.c
4184     index 670e5b01c678..5e423e0b0cb2 100644
4185     --- a/drivers/pinctrl/mvebu/pinctrl-armada-370.c
4186     +++ b/drivers/pinctrl/mvebu/pinctrl-armada-370.c
4187     @@ -370,11 +370,11 @@ static struct mvebu_mpp_mode mv88f6710_mpp_modes[] = {
4188     MPP_MODE(64,
4189     MPP_FUNCTION(0x0, "gpio", NULL),
4190     MPP_FUNCTION(0x1, "spi0", "miso"),
4191     - MPP_FUNCTION(0x2, "spi0-1", "cs1")),
4192     + MPP_FUNCTION(0x2, "spi0", "cs1")),
4193     MPP_MODE(65,
4194     MPP_FUNCTION(0x0, "gpio", NULL),
4195     MPP_FUNCTION(0x1, "spi0", "mosi"),
4196     - MPP_FUNCTION(0x2, "spi0-1", "cs2")),
4197     + MPP_FUNCTION(0x2, "spi0", "cs2")),
4198     };
4199    
4200     static struct mvebu_pinctrl_soc_info armada_370_pinctrl_info;
4201     diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-375.c b/drivers/pinctrl/mvebu/pinctrl-armada-375.c
4202     index db078fe7ace6..64cc1184ecc2 100644
4203     --- a/drivers/pinctrl/mvebu/pinctrl-armada-375.c
4204     +++ b/drivers/pinctrl/mvebu/pinctrl-armada-375.c
4205     @@ -92,19 +92,17 @@ static struct mvebu_mpp_mode mv88f6720_mpp_modes[] = {
4206     MPP_FUNCTION(0x5, "nand", "io1")),
4207     MPP_MODE(8,
4208     MPP_FUNCTION(0x0, "gpio", NULL),
4209     - MPP_FUNCTION(0x1, "dev ", "bootcs"),
4210     + MPP_FUNCTION(0x1, "dev", "bootcs"),
4211     MPP_FUNCTION(0x2, "spi0", "cs0"),
4212     MPP_FUNCTION(0x3, "spi1", "cs0"),
4213     MPP_FUNCTION(0x5, "nand", "ce")),
4214     MPP_MODE(9,
4215     MPP_FUNCTION(0x0, "gpio", NULL),
4216     - MPP_FUNCTION(0x1, "nf", "wen"),
4217     MPP_FUNCTION(0x2, "spi0", "sck"),
4218     MPP_FUNCTION(0x3, "spi1", "sck"),
4219     MPP_FUNCTION(0x5, "nand", "we")),
4220     MPP_MODE(10,
4221     MPP_FUNCTION(0x0, "gpio", NULL),
4222     - MPP_FUNCTION(0x1, "nf", "ren"),
4223     MPP_FUNCTION(0x2, "dram", "vttctrl"),
4224     MPP_FUNCTION(0x3, "led", "c1"),
4225     MPP_FUNCTION(0x5, "nand", "re"),
4226     diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-38x.c b/drivers/pinctrl/mvebu/pinctrl-armada-38x.c
4227     index 1049f82fb62f..adb6c238f059 100644
4228     --- a/drivers/pinctrl/mvebu/pinctrl-armada-38x.c
4229     +++ b/drivers/pinctrl/mvebu/pinctrl-armada-38x.c
4230     @@ -94,37 +94,39 @@ static struct mvebu_mpp_mode armada_38x_mpp_modes[] = {
4231     MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
4232     MPP_VAR_FUNCTION(1, "ge0", "rxd0", V_88F6810_PLUS),
4233     MPP_VAR_FUNCTION(2, "pcie0", "rstout", V_88F6810_PLUS),
4234     - MPP_VAR_FUNCTION(3, "pcie1", "rstout", V_88F6820_PLUS),
4235     MPP_VAR_FUNCTION(4, "spi0", "cs1", V_88F6810_PLUS),
4236     - MPP_VAR_FUNCTION(5, "dev", "ad14", V_88F6810_PLUS)),
4237     + MPP_VAR_FUNCTION(5, "dev", "ad14", V_88F6810_PLUS),
4238     + MPP_VAR_FUNCTION(6, "pcie3", "clkreq", V_88F6810_PLUS)),
4239     MPP_MODE(13,
4240     MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
4241     MPP_VAR_FUNCTION(1, "ge0", "rxd1", V_88F6810_PLUS),
4242     MPP_VAR_FUNCTION(2, "pcie0", "clkreq", V_88F6810_PLUS),
4243     MPP_VAR_FUNCTION(3, "pcie1", "clkreq", V_88F6820_PLUS),
4244     MPP_VAR_FUNCTION(4, "spi0", "cs2", V_88F6810_PLUS),
4245     - MPP_VAR_FUNCTION(5, "dev", "ad15", V_88F6810_PLUS)),
4246     + MPP_VAR_FUNCTION(5, "dev", "ad15", V_88F6810_PLUS),
4247     + MPP_VAR_FUNCTION(6, "pcie2", "clkreq", V_88F6810_PLUS)),
4248     MPP_MODE(14,
4249     MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
4250     MPP_VAR_FUNCTION(1, "ge0", "rxd2", V_88F6810_PLUS),
4251     MPP_VAR_FUNCTION(2, "ptp", "clk", V_88F6810_PLUS),
4252     MPP_VAR_FUNCTION(3, "m", "vtt_ctrl", V_88F6810_PLUS),
4253     MPP_VAR_FUNCTION(4, "spi0", "cs3", V_88F6810_PLUS),
4254     - MPP_VAR_FUNCTION(5, "dev", "wen1", V_88F6810_PLUS)),
4255     + MPP_VAR_FUNCTION(5, "dev", "wen1", V_88F6810_PLUS),
4256     + MPP_VAR_FUNCTION(6, "pcie3", "clkreq", V_88F6810_PLUS)),
4257     MPP_MODE(15,
4258     MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
4259     MPP_VAR_FUNCTION(1, "ge0", "rxd3", V_88F6810_PLUS),
4260     MPP_VAR_FUNCTION(2, "ge", "mdc slave", V_88F6810_PLUS),
4261     MPP_VAR_FUNCTION(3, "pcie0", "rstout", V_88F6810_PLUS),
4262     - MPP_VAR_FUNCTION(4, "spi0", "mosi", V_88F6810_PLUS),
4263     - MPP_VAR_FUNCTION(5, "pcie1", "rstout", V_88F6820_PLUS)),
4264     + MPP_VAR_FUNCTION(4, "spi0", "mosi", V_88F6810_PLUS)),
4265     MPP_MODE(16,
4266     MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
4267     MPP_VAR_FUNCTION(1, "ge0", "rxctl", V_88F6810_PLUS),
4268     MPP_VAR_FUNCTION(2, "ge", "mdio slave", V_88F6810_PLUS),
4269     MPP_VAR_FUNCTION(3, "m", "decc_err", V_88F6810_PLUS),
4270     MPP_VAR_FUNCTION(4, "spi0", "miso", V_88F6810_PLUS),
4271     - MPP_VAR_FUNCTION(5, "pcie0", "clkreq", V_88F6810_PLUS)),
4272     + MPP_VAR_FUNCTION(5, "pcie0", "clkreq", V_88F6810_PLUS),
4273     + MPP_VAR_FUNCTION(6, "pcie1", "clkreq", V_88F6820_PLUS)),
4274     MPP_MODE(17,
4275     MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
4276     MPP_VAR_FUNCTION(1, "ge0", "rxclk", V_88F6810_PLUS),
4277     @@ -137,20 +139,18 @@ static struct mvebu_mpp_mode armada_38x_mpp_modes[] = {
4278     MPP_VAR_FUNCTION(1, "ge0", "rxerr", V_88F6810_PLUS),
4279     MPP_VAR_FUNCTION(2, "ptp", "trig_gen", V_88F6810_PLUS),
4280     MPP_VAR_FUNCTION(3, "ua1", "txd", V_88F6810_PLUS),
4281     - MPP_VAR_FUNCTION(4, "spi0", "cs0", V_88F6810_PLUS),
4282     - MPP_VAR_FUNCTION(5, "pcie1", "rstout", V_88F6820_PLUS)),
4283     + MPP_VAR_FUNCTION(4, "spi0", "cs0", V_88F6810_PLUS)),
4284     MPP_MODE(19,
4285     MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
4286     MPP_VAR_FUNCTION(1, "ge0", "col", V_88F6810_PLUS),
4287     MPP_VAR_FUNCTION(2, "ptp", "event_req", V_88F6810_PLUS),
4288     - MPP_VAR_FUNCTION(3, "pcie0", "clkreq", V_88F6810_PLUS),
4289     + MPP_VAR_FUNCTION(3, "ge0", "txerr", V_88F6810_PLUS),
4290     MPP_VAR_FUNCTION(4, "sata1", "prsnt", V_88F6810_PLUS),
4291     MPP_VAR_FUNCTION(5, "ua0", "cts", V_88F6810_PLUS)),
4292     MPP_MODE(20,
4293     MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
4294     MPP_VAR_FUNCTION(1, "ge0", "txclk", V_88F6810_PLUS),
4295     MPP_VAR_FUNCTION(2, "ptp", "clk", V_88F6810_PLUS),
4296     - MPP_VAR_FUNCTION(3, "pcie1", "rstout", V_88F6820_PLUS),
4297     MPP_VAR_FUNCTION(4, "sata0", "prsnt", V_88F6810_PLUS),
4298     MPP_VAR_FUNCTION(5, "ua0", "rts", V_88F6810_PLUS)),
4299     MPP_MODE(21,
4300     @@ -275,35 +275,27 @@ static struct mvebu_mpp_mode armada_38x_mpp_modes[] = {
4301     MPP_VAR_FUNCTION(1, "pcie0", "clkreq", V_88F6810_PLUS),
4302     MPP_VAR_FUNCTION(2, "m", "vtt_ctrl", V_88F6810_PLUS),
4303     MPP_VAR_FUNCTION(3, "m", "decc_err", V_88F6810_PLUS),
4304     - MPP_VAR_FUNCTION(4, "pcie0", "rstout", V_88F6810_PLUS),
4305     + MPP_VAR_FUNCTION(4, "spi1", "cs2", V_88F6810_PLUS),
4306     MPP_VAR_FUNCTION(5, "dev", "clkout", V_88F6810_PLUS)),
4307     MPP_MODE(44,
4308     MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
4309     MPP_VAR_FUNCTION(1, "sata0", "prsnt", V_88F6810_PLUS),
4310     MPP_VAR_FUNCTION(2, "sata1", "prsnt", V_88F6810_PLUS),
4311     MPP_VAR_FUNCTION(3, "sata2", "prsnt", V_88F6828),
4312     - MPP_VAR_FUNCTION(4, "sata3", "prsnt", V_88F6828),
4313     - MPP_VAR_FUNCTION(5, "pcie0", "rstout", V_88F6810_PLUS)),
4314     + MPP_VAR_FUNCTION(4, "sata3", "prsnt", V_88F6828)),
4315     MPP_MODE(45,
4316     MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
4317     MPP_VAR_FUNCTION(1, "ref", "clk_out0", V_88F6810_PLUS),
4318     - MPP_VAR_FUNCTION(2, "pcie0", "rstout", V_88F6810_PLUS),
4319     - MPP_VAR_FUNCTION(3, "pcie1", "rstout", V_88F6820_PLUS),
4320     - MPP_VAR_FUNCTION(4, "pcie2", "rstout", V_88F6810_PLUS),
4321     - MPP_VAR_FUNCTION(5, "pcie3", "rstout", V_88F6810_PLUS)),
4322     + MPP_VAR_FUNCTION(2, "pcie0", "rstout", V_88F6810_PLUS)),
4323     MPP_MODE(46,
4324     MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
4325     MPP_VAR_FUNCTION(1, "ref", "clk_out1", V_88F6810_PLUS),
4326     - MPP_VAR_FUNCTION(2, "pcie0", "rstout", V_88F6810_PLUS),
4327     - MPP_VAR_FUNCTION(3, "pcie1", "rstout", V_88F6820_PLUS),
4328     - MPP_VAR_FUNCTION(4, "pcie2", "rstout", V_88F6810_PLUS),
4329     - MPP_VAR_FUNCTION(5, "pcie3", "rstout", V_88F6810_PLUS)),
4330     + MPP_VAR_FUNCTION(2, "pcie0", "rstout", V_88F6810_PLUS)),
4331     MPP_MODE(47,
4332     MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
4333     MPP_VAR_FUNCTION(1, "sata0", "prsnt", V_88F6810_PLUS),
4334     MPP_VAR_FUNCTION(2, "sata1", "prsnt", V_88F6810_PLUS),
4335     MPP_VAR_FUNCTION(3, "sata2", "prsnt", V_88F6828),
4336     - MPP_VAR_FUNCTION(4, "spi1", "cs2", V_88F6810_PLUS),
4337     MPP_VAR_FUNCTION(5, "sata3", "prsnt", V_88F6828)),
4338     MPP_MODE(48,
4339     MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
4340     @@ -311,18 +303,19 @@ static struct mvebu_mpp_mode armada_38x_mpp_modes[] = {
4341     MPP_VAR_FUNCTION(2, "m", "vtt_ctrl", V_88F6810_PLUS),
4342     MPP_VAR_FUNCTION(3, "tdm2c", "pclk", V_88F6810_PLUS),
4343     MPP_VAR_FUNCTION(4, "audio", "mclk", V_88F6810_PLUS),
4344     - MPP_VAR_FUNCTION(5, "sd0", "d4", V_88F6810_PLUS)),
4345     + MPP_VAR_FUNCTION(5, "sd0", "d4", V_88F6810_PLUS),
4346     + MPP_VAR_FUNCTION(6, "pcie0", "clkreq", V_88F6810_PLUS)),
4347     MPP_MODE(49,
4348     MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
4349     MPP_VAR_FUNCTION(1, "sata2", "prsnt", V_88F6828),
4350     MPP_VAR_FUNCTION(2, "sata3", "prsnt", V_88F6828),
4351     MPP_VAR_FUNCTION(3, "tdm2c", "fsync", V_88F6810_PLUS),
4352     MPP_VAR_FUNCTION(4, "audio", "lrclk", V_88F6810_PLUS),
4353     - MPP_VAR_FUNCTION(5, "sd0", "d5", V_88F6810_PLUS)),
4354     + MPP_VAR_FUNCTION(5, "sd0", "d5", V_88F6810_PLUS),
4355     + MPP_VAR_FUNCTION(6, "pcie1", "clkreq", V_88F6820_PLUS)),
4356     MPP_MODE(50,
4357     MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
4358     MPP_VAR_FUNCTION(1, "pcie0", "rstout", V_88F6810_PLUS),
4359     - MPP_VAR_FUNCTION(2, "pcie1", "rstout", V_88F6820_PLUS),
4360     MPP_VAR_FUNCTION(3, "tdm2c", "drx", V_88F6810_PLUS),
4361     MPP_VAR_FUNCTION(4, "audio", "extclk", V_88F6810_PLUS),
4362     MPP_VAR_FUNCTION(5, "sd0", "cmd", V_88F6810_PLUS)),
4363     @@ -334,7 +327,6 @@ static struct mvebu_mpp_mode armada_38x_mpp_modes[] = {
4364     MPP_MODE(52,
4365     MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
4366     MPP_VAR_FUNCTION(1, "pcie0", "rstout", V_88F6810_PLUS),
4367     - MPP_VAR_FUNCTION(2, "pcie1", "rstout", V_88F6820_PLUS),
4368     MPP_VAR_FUNCTION(3, "tdm2c", "intn", V_88F6810_PLUS),
4369     MPP_VAR_FUNCTION(4, "audio", "sdi", V_88F6810_PLUS),
4370     MPP_VAR_FUNCTION(5, "sd0", "d6", V_88F6810_PLUS)),
4371     @@ -350,7 +342,7 @@ static struct mvebu_mpp_mode armada_38x_mpp_modes[] = {
4372     MPP_VAR_FUNCTION(1, "sata0", "prsnt", V_88F6810_PLUS),
4373     MPP_VAR_FUNCTION(2, "sata1", "prsnt", V_88F6810_PLUS),
4374     MPP_VAR_FUNCTION(3, "pcie0", "rstout", V_88F6810_PLUS),
4375     - MPP_VAR_FUNCTION(4, "pcie1", "rstout", V_88F6820_PLUS),
4376     + MPP_VAR_FUNCTION(4, "ge0", "txerr", V_88F6810_PLUS),
4377     MPP_VAR_FUNCTION(5, "sd0", "d3", V_88F6810_PLUS)),
4378     MPP_MODE(55,
4379     MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
4380     @@ -380,7 +372,6 @@ static struct mvebu_mpp_mode armada_38x_mpp_modes[] = {
4381     MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
4382     MPP_VAR_FUNCTION(1, "pcie0", "rstout", V_88F6810_PLUS),
4383     MPP_VAR_FUNCTION(2, "i2c1", "sda", V_88F6810_PLUS),
4384     - MPP_VAR_FUNCTION(3, "pcie1", "rstout", V_88F6820_PLUS),
4385     MPP_VAR_FUNCTION(4, "spi1", "cs0", V_88F6810_PLUS),
4386     MPP_VAR_FUNCTION(5, "sd0", "d2", V_88F6810_PLUS)),
4387     };
4388     @@ -409,7 +400,7 @@ static struct mvebu_mpp_ctrl armada_38x_mpp_controls[] = {
4389    
4390     static struct pinctrl_gpio_range armada_38x_mpp_gpio_ranges[] = {
4391     MPP_GPIO_RANGE(0, 0, 0, 32),
4392     - MPP_GPIO_RANGE(1, 32, 32, 27),
4393     + MPP_GPIO_RANGE(1, 32, 32, 28),
4394     };
4395    
4396     static int armada_38x_pinctrl_probe(struct platform_device *pdev)
4397     diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-xp.c b/drivers/pinctrl/mvebu/pinctrl-armada-xp.c
4398     index de311129f7a0..cb06fd293fd2 100644
4399     --- a/drivers/pinctrl/mvebu/pinctrl-armada-xp.c
4400     +++ b/drivers/pinctrl/mvebu/pinctrl-armada-xp.c
4401     @@ -14,10 +14,7 @@
4402     * available: mv78230, mv78260 and mv78460. From a pin muxing
4403     * perspective, the mv78230 has 49 MPP pins. The mv78260 and mv78460
4404     * both have 67 MPP pins (more GPIOs and address lines for the memory
4405     - * bus mainly). The only difference between the mv78260 and the
4406     - * mv78460 in terms of pin muxing is the addition of two functions on
4407     - * pins 43 and 56 to access the VDD of the CPU2 and 3 (mv78260 has two
4408     - * cores, mv78460 has four cores).
4409     + * bus mainly).
4410     */
4411    
4412     #include <linux/err.h>
4413     @@ -171,20 +168,17 @@ static struct mvebu_mpp_mode armada_xp_mpp_modes[] = {
4414     MPP_MODE(24,
4415     MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
4416     MPP_VAR_FUNCTION(0x1, "sata1", "prsnt", V_MV78230_PLUS),
4417     - MPP_VAR_FUNCTION(0x2, "nf", "bootcs-re", V_MV78230_PLUS),
4418     MPP_VAR_FUNCTION(0x3, "tdm", "rst", V_MV78230_PLUS),
4419     MPP_VAR_FUNCTION(0x4, "lcd", "hsync", V_MV78230_PLUS)),
4420     MPP_MODE(25,
4421     MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
4422     MPP_VAR_FUNCTION(0x1, "sata0", "prsnt", V_MV78230_PLUS),
4423     - MPP_VAR_FUNCTION(0x2, "nf", "bootcs-we", V_MV78230_PLUS),
4424     MPP_VAR_FUNCTION(0x3, "tdm", "pclk", V_MV78230_PLUS),
4425     MPP_VAR_FUNCTION(0x4, "lcd", "vsync", V_MV78230_PLUS)),
4426     MPP_MODE(26,
4427     MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
4428     MPP_VAR_FUNCTION(0x3, "tdm", "fsync", V_MV78230_PLUS),
4429     - MPP_VAR_FUNCTION(0x4, "lcd", "clk", V_MV78230_PLUS),
4430     - MPP_VAR_FUNCTION(0x5, "vdd", "cpu1-pd", V_MV78230_PLUS)),
4431     + MPP_VAR_FUNCTION(0x4, "lcd", "clk", V_MV78230_PLUS)),
4432     MPP_MODE(27,
4433     MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
4434     MPP_VAR_FUNCTION(0x1, "ptp", "trig", V_MV78230_PLUS),
4435     @@ -199,8 +193,7 @@ static struct mvebu_mpp_mode armada_xp_mpp_modes[] = {
4436     MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
4437     MPP_VAR_FUNCTION(0x1, "ptp", "clk", V_MV78230_PLUS),
4438     MPP_VAR_FUNCTION(0x3, "tdm", "int0", V_MV78230_PLUS),
4439     - MPP_VAR_FUNCTION(0x4, "lcd", "ref-clk", V_MV78230_PLUS),
4440     - MPP_VAR_FUNCTION(0x5, "vdd", "cpu0-pd", V_MV78230_PLUS)),
4441     + MPP_VAR_FUNCTION(0x4, "lcd", "ref-clk", V_MV78230_PLUS)),
4442     MPP_MODE(30,
4443     MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
4444     MPP_VAR_FUNCTION(0x1, "sd0", "clk", V_MV78230_PLUS),
4445     @@ -208,13 +201,11 @@ static struct mvebu_mpp_mode armada_xp_mpp_modes[] = {
4446     MPP_MODE(31,
4447     MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
4448     MPP_VAR_FUNCTION(0x1, "sd0", "cmd", V_MV78230_PLUS),
4449     - MPP_VAR_FUNCTION(0x3, "tdm", "int2", V_MV78230_PLUS),
4450     - MPP_VAR_FUNCTION(0x5, "vdd", "cpu0-pd", V_MV78230_PLUS)),
4451     + MPP_VAR_FUNCTION(0x3, "tdm", "int2", V_MV78230_PLUS)),
4452     MPP_MODE(32,
4453     MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
4454     MPP_VAR_FUNCTION(0x1, "sd0", "d0", V_MV78230_PLUS),
4455     - MPP_VAR_FUNCTION(0x3, "tdm", "int3", V_MV78230_PLUS),
4456     - MPP_VAR_FUNCTION(0x5, "vdd", "cpu1-pd", V_MV78230_PLUS)),
4457     + MPP_VAR_FUNCTION(0x3, "tdm", "int3", V_MV78230_PLUS)),
4458     MPP_MODE(33,
4459     MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
4460     MPP_VAR_FUNCTION(0x1, "sd0", "d1", V_MV78230_PLUS),
4461     @@ -246,7 +237,6 @@ static struct mvebu_mpp_mode armada_xp_mpp_modes[] = {
4462     MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
4463     MPP_VAR_FUNCTION(0x1, "spi", "cs1", V_MV78230_PLUS),
4464     MPP_VAR_FUNCTION(0x2, "uart2", "cts", V_MV78230_PLUS),
4465     - MPP_VAR_FUNCTION(0x3, "vdd", "cpu1-pd", V_MV78230_PLUS),
4466     MPP_VAR_FUNCTION(0x4, "lcd", "vga-hsync", V_MV78230_PLUS),
4467     MPP_VAR_FUNCTION(0x5, "pcie", "clkreq0", V_MV78230_PLUS)),
4468     MPP_MODE(41,
4469     @@ -261,15 +251,13 @@ static struct mvebu_mpp_mode armada_xp_mpp_modes[] = {
4470     MPP_VAR_FUNCTION(0x1, "uart2", "rxd", V_MV78230_PLUS),
4471     MPP_VAR_FUNCTION(0x2, "uart0", "cts", V_MV78230_PLUS),
4472     MPP_VAR_FUNCTION(0x3, "tdm", "int7", V_MV78230_PLUS),
4473     - MPP_VAR_FUNCTION(0x4, "tdm-1", "timer", V_MV78230_PLUS),
4474     - MPP_VAR_FUNCTION(0x5, "vdd", "cpu0-pd", V_MV78230_PLUS)),
4475     + MPP_VAR_FUNCTION(0x4, "tdm-1", "timer", V_MV78230_PLUS)),
4476     MPP_MODE(43,
4477     MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
4478     MPP_VAR_FUNCTION(0x1, "uart2", "txd", V_MV78230_PLUS),
4479     MPP_VAR_FUNCTION(0x2, "uart0", "rts", V_MV78230_PLUS),
4480     MPP_VAR_FUNCTION(0x3, "spi", "cs3", V_MV78230_PLUS),
4481     - MPP_VAR_FUNCTION(0x4, "pcie", "rstout", V_MV78230_PLUS),
4482     - MPP_VAR_FUNCTION(0x5, "vdd", "cpu2-3-pd", V_MV78460)),
4483     + MPP_VAR_FUNCTION(0x4, "pcie", "rstout", V_MV78230_PLUS)),
4484     MPP_MODE(44,
4485     MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
4486     MPP_VAR_FUNCTION(0x1, "uart2", "cts", V_MV78230_PLUS),
4487     @@ -298,7 +286,7 @@ static struct mvebu_mpp_mode armada_xp_mpp_modes[] = {
4488     MPP_VAR_FUNCTION(0x5, "pcie", "clkreq3", V_MV78230_PLUS)),
4489     MPP_MODE(48,
4490     MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
4491     - MPP_VAR_FUNCTION(0x1, "tclk", NULL, V_MV78230_PLUS),
4492     + MPP_VAR_FUNCTION(0x1, "dev", "clkout", V_MV78230_PLUS),
4493     MPP_VAR_FUNCTION(0x2, "dev", "burst/last", V_MV78230_PLUS)),
4494     MPP_MODE(49,
4495     MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78260_PLUS),
4496     @@ -320,16 +308,13 @@ static struct mvebu_mpp_mode armada_xp_mpp_modes[] = {
4497     MPP_VAR_FUNCTION(0x1, "dev", "ad19", V_MV78260_PLUS)),
4498     MPP_MODE(55,
4499     MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78260_PLUS),
4500     - MPP_VAR_FUNCTION(0x1, "dev", "ad20", V_MV78260_PLUS),
4501     - MPP_VAR_FUNCTION(0x2, "vdd", "cpu0-pd", V_MV78260_PLUS)),
4502     + MPP_VAR_FUNCTION(0x1, "dev", "ad20", V_MV78260_PLUS)),
4503     MPP_MODE(56,
4504     MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78260_PLUS),
4505     - MPP_VAR_FUNCTION(0x1, "dev", "ad21", V_MV78260_PLUS),
4506     - MPP_VAR_FUNCTION(0x2, "vdd", "cpu1-pd", V_MV78260_PLUS)),
4507     + MPP_VAR_FUNCTION(0x1, "dev", "ad21", V_MV78260_PLUS)),
4508     MPP_MODE(57,
4509     MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78260_PLUS),
4510     - MPP_VAR_FUNCTION(0x1, "dev", "ad22", V_MV78260_PLUS),
4511     - MPP_VAR_FUNCTION(0x2, "vdd", "cpu2-3-pd", V_MV78460)),
4512     + MPP_VAR_FUNCTION(0x1, "dev", "ad22", V_MV78260_PLUS)),
4513     MPP_MODE(58,
4514     MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78260_PLUS),
4515     MPP_VAR_FUNCTION(0x1, "dev", "ad23", V_MV78260_PLUS)),
4516     diff --git a/drivers/platform/x86/ideapad-laptop.c b/drivers/platform/x86/ideapad-laptop.c
4517     index ed494f37c40f..14ad4c28b0be 100644
4518     --- a/drivers/platform/x86/ideapad-laptop.c
4519     +++ b/drivers/platform/x86/ideapad-laptop.c
4520     @@ -464,8 +464,9 @@ static const struct ideapad_rfk_data ideapad_rfk_data[] = {
4521     static int ideapad_rfk_set(void *data, bool blocked)
4522     {
4523     struct ideapad_rfk_priv *priv = data;
4524     + int opcode = ideapad_rfk_data[priv->dev].opcode;
4525    
4526     - return write_ec_cmd(priv->priv->adev->handle, priv->dev, !blocked);
4527     + return write_ec_cmd(priv->priv->adev->handle, opcode, !blocked);
4528     }
4529    
4530     static struct rfkill_ops ideapad_rfk_ops = {
4531     @@ -831,6 +832,13 @@ static void ideapad_acpi_notify(acpi_handle handle, u32 event, void *data)
4532     */
4533     static const struct dmi_system_id no_hw_rfkill_list[] = {
4534     {
4535     + .ident = "Lenovo G50-30",
4536     + .matches = {
4537     + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
4538     + DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo G50-30"),
4539     + },
4540     + },
4541     + {
4542     .ident = "Lenovo Yoga 2 11 / 13 / Pro",
4543     .matches = {
4544     DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
4545     diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
4546     index d92612c51657..bc3d80f9d5d6 100644
4547     --- a/drivers/regulator/core.c
4548     +++ b/drivers/regulator/core.c
4549     @@ -774,7 +774,7 @@ static int suspend_prepare(struct regulator_dev *rdev, suspend_state_t state)
4550     static void print_constraints(struct regulator_dev *rdev)
4551     {
4552     struct regulation_constraints *constraints = rdev->constraints;
4553     - char buf[80] = "";
4554     + char buf[160] = "";
4555     int count = 0;
4556     int ret;
4557    
4558     diff --git a/drivers/scsi/ipr.h b/drivers/scsi/ipr.h
4559     index fa82c003bc32..ae4626f64208 100644
4560     --- a/drivers/scsi/ipr.h
4561     +++ b/drivers/scsi/ipr.h
4562     @@ -270,7 +270,7 @@
4563     #define IPR_RUNTIME_RESET 0x40000000
4564    
4565     #define IPR_IPL_INIT_MIN_STAGE_TIME 5
4566     -#define IPR_IPL_INIT_DEFAULT_STAGE_TIME 15
4567     +#define IPR_IPL_INIT_DEFAULT_STAGE_TIME 30
4568     #define IPR_IPL_INIT_STAGE_UNKNOWN 0x0
4569     #define IPR_IPL_INIT_STAGE_TRANSOP 0xB0000000
4570     #define IPR_IPL_INIT_STAGE_MASK 0xff000000
4571     diff --git a/drivers/scsi/scsi_transport_srp.c b/drivers/scsi/scsi_transport_srp.c
4572     index ae45bd99baed..e05cd7e2d6d3 100644
4573     --- a/drivers/scsi/scsi_transport_srp.c
4574     +++ b/drivers/scsi/scsi_transport_srp.c
4575     @@ -396,6 +396,36 @@ static void srp_reconnect_work(struct work_struct *work)
4576     }
4577     }
4578    
4579     +/**
4580     + * scsi_request_fn_active() - number of kernel threads inside scsi_request_fn()
4581     + * @shost: SCSI host for which to count the number of scsi_request_fn() callers.
4582     + *
4583     + * To do: add support for scsi-mq in this function.
4584     + */
4585     +static int scsi_request_fn_active(struct Scsi_Host *shost)
4586     +{
4587     + struct scsi_device *sdev;
4588     + struct request_queue *q;
4589     + int request_fn_active = 0;
4590     +
4591     + shost_for_each_device(sdev, shost) {
4592     + q = sdev->request_queue;
4593     +
4594     + spin_lock_irq(q->queue_lock);
4595     + request_fn_active += q->request_fn_active;
4596     + spin_unlock_irq(q->queue_lock);
4597     + }
4598     +
4599     + return request_fn_active;
4600     +}
4601     +
4602     +/* Wait until ongoing shost->hostt->queuecommand() calls have finished. */
4603     +static void srp_wait_for_queuecommand(struct Scsi_Host *shost)
4604     +{
4605     + while (scsi_request_fn_active(shost))
4606     + msleep(20);
4607     +}
4608     +
4609     static void __rport_fail_io_fast(struct srp_rport *rport)
4610     {
4611     struct Scsi_Host *shost = rport_to_shost(rport);
4612     @@ -504,27 +534,6 @@ void srp_start_tl_fail_timers(struct srp_rport *rport)
4613     EXPORT_SYMBOL(srp_start_tl_fail_timers);
4614    
4615     /**
4616     - * scsi_request_fn_active() - number of kernel threads inside scsi_request_fn()
4617     - * @shost: SCSI host for which to count the number of scsi_request_fn() callers.
4618     - */
4619     -static int scsi_request_fn_active(struct Scsi_Host *shost)
4620     -{
4621     - struct scsi_device *sdev;
4622     - struct request_queue *q;
4623     - int request_fn_active = 0;
4624     -
4625     - shost_for_each_device(sdev, shost) {
4626     - q = sdev->request_queue;
4627     -
4628     - spin_lock_irq(q->queue_lock);
4629     - request_fn_active += q->request_fn_active;
4630     - spin_unlock_irq(q->queue_lock);
4631     - }
4632     -
4633     - return request_fn_active;
4634     -}
4635     -
4636     -/**
4637     * srp_reconnect_rport() - reconnect to an SRP target port
4638     * @rport: SRP target port.
4639     *
4640     @@ -559,8 +568,7 @@ int srp_reconnect_rport(struct srp_rport *rport)
4641     if (res)
4642     goto out;
4643     scsi_target_block(&shost->shost_gendev);
4644     - while (scsi_request_fn_active(shost))
4645     - msleep(20);
4646     + srp_wait_for_queuecommand(shost);
4647     res = rport->state != SRP_RPORT_LOST ? i->f->reconnect(rport) : -ENODEV;
4648     pr_debug("%s (state %d): transport.reconnect() returned %d\n",
4649     dev_name(&shost->shost_gendev), rport->state, res);
4650     diff --git a/drivers/spi/spi-orion.c b/drivers/spi/spi-orion.c
4651     index c76b7d7879df..bd09807b6b05 100644
4652     --- a/drivers/spi/spi-orion.c
4653     +++ b/drivers/spi/spi-orion.c
4654     @@ -52,6 +52,12 @@ enum orion_spi_type {
4655    
4656     struct orion_spi_dev {
4657     enum orion_spi_type typ;
4658     + /*
4659     + * min_divisor and max_hz should be exclusive, the only we can
4660     + * have both is for managing the armada-370-spi case with old
4661     + * device tree
4662     + */
4663     + unsigned long max_hz;
4664     unsigned int min_divisor;
4665     unsigned int max_divisor;
4666     u32 prescale_mask;
4667     @@ -402,8 +408,9 @@ static const struct orion_spi_dev orion_spi_dev_data = {
4668    
4669     static const struct orion_spi_dev armada_spi_dev_data = {
4670     .typ = ARMADA_SPI,
4671     - .min_divisor = 1,
4672     + .min_divisor = 4,
4673     .max_divisor = 1920,
4674     + .max_hz = 50000000,
4675     .prescale_mask = ARMADA_SPI_CLK_PRESCALE_MASK,
4676     };
4677    
4678     @@ -468,7 +475,21 @@ static int orion_spi_probe(struct platform_device *pdev)
4679     goto out;
4680    
4681     tclk_hz = clk_get_rate(spi->clk);
4682     - master->max_speed_hz = DIV_ROUND_UP(tclk_hz, devdata->min_divisor);
4683     +
4684     + /*
4685     + * With old device tree, armada-370-spi could be used with
4686     + * Armada XP, however for this SoC the maximum frequency is
4687     + * 50MHz instead of tclk/4. On Armada 370, tclk cannot be
4688     + * higher than 200MHz. So, in order to be able to handle both
4689     + * SoCs, we can take the minimum of 50MHz and tclk/4.
4690     + */
4691     + if (of_device_is_compatible(pdev->dev.of_node,
4692     + "marvell,armada-370-spi"))
4693     + master->max_speed_hz = min(devdata->max_hz,
4694     + DIV_ROUND_UP(tclk_hz, devdata->min_divisor));
4695     + else
4696     + master->max_speed_hz =
4697     + DIV_ROUND_UP(tclk_hz, devdata->min_divisor);
4698     master->min_speed_hz = DIV_ROUND_UP(tclk_hz, devdata->max_divisor);
4699    
4700     r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
4701     diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
4702     index 1c72be19e70e..115ad5dbc7c5 100644
4703     --- a/drivers/spi/spi.c
4704     +++ b/drivers/spi/spi.c
4705     @@ -1059,9 +1059,6 @@ void spi_finalize_current_message(struct spi_master *master)
4706    
4707     spin_lock_irqsave(&master->queue_lock, flags);
4708     mesg = master->cur_msg;
4709     - master->cur_msg = NULL;
4710     -
4711     - queue_kthread_work(&master->kworker, &master->pump_messages);
4712     spin_unlock_irqrestore(&master->queue_lock, flags);
4713    
4714     spi_unmap_msg(master, mesg);
4715     @@ -1074,9 +1071,13 @@ void spi_finalize_current_message(struct spi_master *master)
4716     }
4717     }
4718    
4719     - trace_spi_message_done(mesg);
4720     -
4721     + spin_lock_irqsave(&master->queue_lock, flags);
4722     + master->cur_msg = NULL;
4723     master->cur_msg_prepared = false;
4724     + queue_kthread_work(&master->kworker, &master->pump_messages);
4725     + spin_unlock_irqrestore(&master->queue_lock, flags);
4726     +
4727     + trace_spi_message_done(mesg);
4728    
4729     mesg->state = NULL;
4730     if (mesg->complete)
4731     diff --git a/drivers/staging/ozwpan/ozusbsvc1.c b/drivers/staging/ozwpan/ozusbsvc1.c
4732     index be7ee01c50ab..0c6bea0b311c 100644
4733     --- a/drivers/staging/ozwpan/ozusbsvc1.c
4734     +++ b/drivers/staging/ozwpan/ozusbsvc1.c
4735     @@ -326,7 +326,11 @@ static void oz_usb_handle_ep_data(struct oz_usb_ctx *usb_ctx,
4736     struct oz_multiple_fixed *body =
4737     (struct oz_multiple_fixed *)data_hdr;
4738     u8 *data = body->data;
4739     - int n = (len - sizeof(struct oz_multiple_fixed)+1)
4740     + unsigned int n;
4741     + if (!body->unit_size ||
4742     + len < sizeof(struct oz_multiple_fixed) - 1)
4743     + break;
4744     + n = (len - (sizeof(struct oz_multiple_fixed) - 1))
4745     / body->unit_size;
4746     while (n--) {
4747     oz_hcd_data_ind(usb_ctx->hport, body->endpoint,
4748     @@ -390,10 +394,15 @@ void oz_usb_rx(struct oz_pd *pd, struct oz_elt *elt)
4749     case OZ_GET_DESC_RSP: {
4750     struct oz_get_desc_rsp *body =
4751     (struct oz_get_desc_rsp *)usb_hdr;
4752     - int data_len = elt->length -
4753     - sizeof(struct oz_get_desc_rsp) + 1;
4754     - u16 offs = le16_to_cpu(get_unaligned(&body->offset));
4755     - u16 total_size =
4756     + u16 offs, total_size;
4757     + u8 data_len;
4758     +
4759     + if (elt->length < sizeof(struct oz_get_desc_rsp) - 1)
4760     + break;
4761     + data_len = elt->length -
4762     + (sizeof(struct oz_get_desc_rsp) - 1);
4763     + offs = le16_to_cpu(get_unaligned(&body->offset));
4764     + total_size =
4765     le16_to_cpu(get_unaligned(&body->total_size));
4766     oz_dbg(ON, "USB_REQ_GET_DESCRIPTOR - cnf\n");
4767     oz_hcd_get_desc_cnf(usb_ctx->hport, body->req_id,
4768     diff --git a/drivers/staging/rtl8712/rtl8712_recv.c b/drivers/staging/rtl8712/rtl8712_recv.c
4769     index b27806209268..ff7583d97bf5 100644
4770     --- a/drivers/staging/rtl8712/rtl8712_recv.c
4771     +++ b/drivers/staging/rtl8712/rtl8712_recv.c
4772     @@ -1068,7 +1068,8 @@ static int recvbuf2recvframe(struct _adapter *padapter, struct sk_buff *pskb)
4773     /* for first fragment packet, driver need allocate 1536 +
4774     * drvinfo_sz + RXDESC_SIZE to defrag packet. */
4775     if ((mf == 1) && (frag == 0))
4776     - alloc_sz = 1658;/*1658+6=1664, 1664 is 128 alignment.*/
4777     + /*1658+6=1664, 1664 is 128 alignment.*/
4778     + alloc_sz = max_t(u16, tmp_len, 1658);
4779     else
4780     alloc_sz = tmp_len;
4781     /* 2 is for IP header 4 bytes alignment in QoS packet case.
4782     diff --git a/drivers/staging/vt6655/device_main.c b/drivers/staging/vt6655/device_main.c
4783     index 54e16f40d8ed..ea240512cbbb 100644
4784     --- a/drivers/staging/vt6655/device_main.c
4785     +++ b/drivers/staging/vt6655/device_main.c
4786     @@ -1340,6 +1340,10 @@ static int device_rx_srv(struct vnt_private *pDevice, unsigned int uIdx)
4787     pRD = pRD->next) {
4788     if (works++ > 15)
4789     break;
4790     +
4791     + if (!pRD->pRDInfo->skb)
4792     + break;
4793     +
4794     if (device_receive_frame(pDevice, pRD)) {
4795     if (!device_alloc_rx_buf(pDevice, pRD)) {
4796     dev_err(&pDevice->pcid->dev,
4797     diff --git a/drivers/tty/n_tty.c b/drivers/tty/n_tty.c
4798     index 72824659f628..e3ebb674a693 100644
4799     --- a/drivers/tty/n_tty.c
4800     +++ b/drivers/tty/n_tty.c
4801     @@ -186,6 +186,17 @@ static int receive_room(struct tty_struct *tty)
4802     return left;
4803     }
4804    
4805     +static inline int tty_copy_to_user(struct tty_struct *tty,
4806     + void __user *to,
4807     + const void *from,
4808     + unsigned long n)
4809     +{
4810     + struct n_tty_data *ldata = tty->disc_data;
4811     +
4812     + tty_audit_add_data(tty, to, n, ldata->icanon);
4813     + return copy_to_user(to, from, n);
4814     +}
4815     +
4816     /**
4817     * n_tty_set_room - receive space
4818     * @tty: terminal
4819     @@ -2081,12 +2092,12 @@ static int canon_copy_from_read_buf(struct tty_struct *tty,
4820     __func__, eol, found, n, c, size, more);
4821    
4822     if (n > size) {
4823     - ret = copy_to_user(*b, read_buf_addr(ldata, tail), size);
4824     + ret = tty_copy_to_user(tty, *b, read_buf_addr(ldata, tail), size);
4825     if (ret)
4826     return -EFAULT;
4827     - ret = copy_to_user(*b + size, ldata->read_buf, n - size);
4828     + ret = tty_copy_to_user(tty, *b + size, ldata->read_buf, n - size);
4829     } else
4830     - ret = copy_to_user(*b, read_buf_addr(ldata, tail), n);
4831     + ret = tty_copy_to_user(tty, *b, read_buf_addr(ldata, tail), n);
4832    
4833     if (ret)
4834     return -EFAULT;
4835     diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c
4836     index 369e18d9ab48..696d4b5af293 100644
4837     --- a/drivers/tty/serial/imx.c
4838     +++ b/drivers/tty/serial/imx.c
4839     @@ -900,6 +900,14 @@ static void dma_rx_callback(void *data)
4840    
4841     status = dmaengine_tx_status(chan, (dma_cookie_t)0, &state);
4842     count = RX_BUF_SIZE - state.residue;
4843     +
4844     + if (readl(sport->port.membase + USR2) & USR2_IDLE) {
4845     + /* In condition [3] the SDMA counted up too early */
4846     + count--;
4847     +
4848     + writel(USR2_IDLE, sport->port.membase + USR2);
4849     + }
4850     +
4851     dev_dbg(sport->port.dev, "We get %d bytes.\n", count);
4852    
4853     if (count) {
4854     diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
4855     index 12d37aedc66f..7d8c3d4ede20 100644
4856     --- a/drivers/usb/class/cdc-acm.c
4857     +++ b/drivers/usb/class/cdc-acm.c
4858     @@ -1486,6 +1486,11 @@ skip_countries:
4859     goto alloc_fail8;
4860     }
4861    
4862     + if (quirks & CLEAR_HALT_CONDITIONS) {
4863     + usb_clear_halt(usb_dev, usb_rcvbulkpipe(usb_dev, epread->bEndpointAddress));
4864     + usb_clear_halt(usb_dev, usb_sndbulkpipe(usb_dev, epwrite->bEndpointAddress));
4865     + }
4866     +
4867     return 0;
4868     alloc_fail8:
4869     if (acm->country_codes) {
4870     @@ -1763,6 +1768,10 @@ static const struct usb_device_id acm_ids[] = {
4871     .driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */
4872     },
4873    
4874     + { USB_DEVICE(0x2912, 0x0001), /* ATOL FPrint */
4875     + .driver_info = CLEAR_HALT_CONDITIONS,
4876     + },
4877     +
4878     /* Nokia S60 phones expose two ACM channels. The first is
4879     * a modem and is picked up by the standard AT-command
4880     * information below. The second is 'vendor-specific' but
4881     diff --git a/drivers/usb/class/cdc-acm.h b/drivers/usb/class/cdc-acm.h
4882     index d3251ebd09e2..9cca2e7280bb 100644
4883     --- a/drivers/usb/class/cdc-acm.h
4884     +++ b/drivers/usb/class/cdc-acm.h
4885     @@ -134,3 +134,4 @@ struct acm {
4886     #define NO_DATA_INTERFACE BIT(4)
4887     #define IGNORE_DEVICE BIT(5)
4888     #define QUIRK_CONTROL_LINE_STATE BIT(6)
4889     +#define CLEAR_HALT_CONDITIONS BIT(7)
4890     diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
4891     index 85e03cb0c418..2222899c4b69 100644
4892     --- a/drivers/usb/core/hub.c
4893     +++ b/drivers/usb/core/hub.c
4894     @@ -2613,9 +2613,6 @@ static bool use_new_scheme(struct usb_device *udev, int retry)
4895     return USE_NEW_SCHEME(retry);
4896     }
4897    
4898     -static int hub_port_reset(struct usb_hub *hub, int port1,
4899     - struct usb_device *udev, unsigned int delay, bool warm);
4900     -
4901     /* Is a USB 3.0 port in the Inactive or Compliance Mode state?
4902     * Port worm reset is required to recover
4903     */
4904     @@ -2703,44 +2700,6 @@ static int hub_port_wait_reset(struct usb_hub *hub, int port1,
4905     return 0;
4906     }
4907    
4908     -static void hub_port_finish_reset(struct usb_hub *hub, int port1,
4909     - struct usb_device *udev, int *status)
4910     -{
4911     - switch (*status) {
4912     - case 0:
4913     - /* TRSTRCY = 10 ms; plus some extra */
4914     - msleep(10 + 40);
4915     - if (udev) {
4916     - struct usb_hcd *hcd = bus_to_hcd(udev->bus);
4917     -
4918     - update_devnum(udev, 0);
4919     - /* The xHC may think the device is already reset,
4920     - * so ignore the status.
4921     - */
4922     - if (hcd->driver->reset_device)
4923     - hcd->driver->reset_device(hcd, udev);
4924     - }
4925     - /* FALL THROUGH */
4926     - case -ENOTCONN:
4927     - case -ENODEV:
4928     - usb_clear_port_feature(hub->hdev,
4929     - port1, USB_PORT_FEAT_C_RESET);
4930     - if (hub_is_superspeed(hub->hdev)) {
4931     - usb_clear_port_feature(hub->hdev, port1,
4932     - USB_PORT_FEAT_C_BH_PORT_RESET);
4933     - usb_clear_port_feature(hub->hdev, port1,
4934     - USB_PORT_FEAT_C_PORT_LINK_STATE);
4935     - usb_clear_port_feature(hub->hdev, port1,
4936     - USB_PORT_FEAT_C_CONNECTION);
4937     - }
4938     - if (udev)
4939     - usb_set_device_state(udev, *status
4940     - ? USB_STATE_NOTATTACHED
4941     - : USB_STATE_DEFAULT);
4942     - break;
4943     - }
4944     -}
4945     -
4946     /* Handle port reset and port warm(BH) reset (for USB3 protocol ports) */
4947     static int hub_port_reset(struct usb_hub *hub, int port1,
4948     struct usb_device *udev, unsigned int delay, bool warm)
4949     @@ -2764,13 +2723,10 @@ static int hub_port_reset(struct usb_hub *hub, int port1,
4950     * If the caller hasn't explicitly requested a warm reset,
4951     * double check and see if one is needed.
4952     */
4953     - status = hub_port_status(hub, port1,
4954     - &portstatus, &portchange);
4955     - if (status < 0)
4956     - goto done;
4957     -
4958     - if (hub_port_warm_reset_required(hub, port1, portstatus))
4959     - warm = true;
4960     + if (hub_port_status(hub, port1, &portstatus, &portchange) == 0)
4961     + if (hub_port_warm_reset_required(hub, port1,
4962     + portstatus))
4963     + warm = true;
4964     }
4965     clear_bit(port1, hub->warm_reset_bits);
4966    
4967     @@ -2796,11 +2752,19 @@ static int hub_port_reset(struct usb_hub *hub, int port1,
4968    
4969     /* Check for disconnect or reset */
4970     if (status == 0 || status == -ENOTCONN || status == -ENODEV) {
4971     - hub_port_finish_reset(hub, port1, udev, &status);
4972     + usb_clear_port_feature(hub->hdev, port1,
4973     + USB_PORT_FEAT_C_RESET);
4974    
4975     if (!hub_is_superspeed(hub->hdev))
4976     goto done;
4977    
4978     + usb_clear_port_feature(hub->hdev, port1,
4979     + USB_PORT_FEAT_C_BH_PORT_RESET);
4980     + usb_clear_port_feature(hub->hdev, port1,
4981     + USB_PORT_FEAT_C_PORT_LINK_STATE);
4982     + usb_clear_port_feature(hub->hdev, port1,
4983     + USB_PORT_FEAT_C_CONNECTION);
4984     +
4985     /*
4986     * If a USB 3.0 device migrates from reset to an error
4987     * state, re-issue the warm reset.
4988     @@ -2833,6 +2797,26 @@ static int hub_port_reset(struct usb_hub *hub, int port1,
4989     dev_err(&port_dev->dev, "Cannot enable. Maybe the USB cable is bad?\n");
4990    
4991     done:
4992     + if (status == 0) {
4993     + /* TRSTRCY = 10 ms; plus some extra */
4994     + msleep(10 + 40);
4995     + if (udev) {
4996     + struct usb_hcd *hcd = bus_to_hcd(udev->bus);
4997     +
4998     + update_devnum(udev, 0);
4999     + /* The xHC may think the device is already reset,
5000     + * so ignore the status.
5001     + */
5002     + if (hcd->driver->reset_device)
5003     + hcd->driver->reset_device(hcd, udev);
5004     +
5005     + usb_set_device_state(udev, USB_STATE_DEFAULT);
5006     + }
5007     + } else {
5008     + if (udev)
5009     + usb_set_device_state(udev, USB_STATE_NOTATTACHED);
5010     + }
5011     +
5012     if (!hub_is_superspeed(hub->hdev))
5013     up_read(&ehci_cf_port_reset_rwsem);
5014    
5015     diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
5016     index 272e0928736e..d98faf73d6b2 100644
5017     --- a/drivers/usb/dwc3/gadget.c
5018     +++ b/drivers/usb/dwc3/gadget.c
5019     @@ -289,6 +289,8 @@ int dwc3_send_gadget_generic_command(struct dwc3 *dwc, unsigned cmd, u32 param)
5020     if (!(reg & DWC3_DGCMD_CMDACT)) {
5021     dev_vdbg(dwc->dev, "Command Complete --> %d\n",
5022     DWC3_DGCMD_STATUS(reg));
5023     + if (DWC3_DGCMD_STATUS(reg))
5024     + return -EINVAL;
5025     return 0;
5026     }
5027    
5028     @@ -322,6 +324,8 @@ int dwc3_send_gadget_ep_cmd(struct dwc3 *dwc, unsigned ep,
5029     if (!(reg & DWC3_DEPCMD_CMDACT)) {
5030     dev_vdbg(dwc->dev, "Command Complete --> %d\n",
5031     DWC3_DEPCMD_STATUS(reg));
5032     + if (DWC3_DEPCMD_STATUS(reg))
5033     + return -EINVAL;
5034     return 0;
5035     }
5036    
5037     @@ -1899,12 +1903,16 @@ static void dwc3_endpoint_transfer_complete(struct dwc3 *dwc,
5038     {
5039     unsigned status = 0;
5040     int clean_busy;
5041     + u32 is_xfer_complete;
5042     +
5043     + is_xfer_complete = (event->endpoint_event == DWC3_DEPEVT_XFERCOMPLETE);
5044    
5045     if (event->status & DEPEVT_STATUS_BUSERR)
5046     status = -ECONNRESET;
5047    
5048     clean_busy = dwc3_cleanup_done_reqs(dwc, dep, event, status);
5049     - if (clean_busy)
5050     + if (clean_busy && (is_xfer_complete ||
5051     + usb_endpoint_xfer_isoc(dep->endpoint.desc)))
5052     dep->flags &= ~DWC3_EP_BUSY;
5053    
5054     /*
5055     diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c
5056     index 9031750e7404..ffd739e31bfc 100644
5057     --- a/drivers/usb/serial/cp210x.c
5058     +++ b/drivers/usb/serial/cp210x.c
5059     @@ -128,6 +128,7 @@ static const struct usb_device_id id_table[] = {
5060     { USB_DEVICE(0x10C4, 0x8946) }, /* Ketra N1 Wireless Interface */
5061     { USB_DEVICE(0x10C4, 0x8977) }, /* CEL MeshWorks DevKit Device */
5062     { USB_DEVICE(0x10C4, 0x8998) }, /* KCF Technologies PRN */
5063     + { USB_DEVICE(0x10C4, 0x8A2A) }, /* HubZ dual ZigBee and Z-Wave dongle */
5064     { USB_DEVICE(0x10C4, 0xEA60) }, /* Silicon Labs factory default */
5065     { USB_DEVICE(0x10C4, 0xEA61) }, /* Silicon Labs factory default */
5066     { USB_DEVICE(0x10C4, 0xEA70) }, /* Silicon Labs factory default */
5067     diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
5068     index 8eb68a31cab6..4c8b3b82103d 100644
5069     --- a/drivers/usb/serial/ftdi_sio.c
5070     +++ b/drivers/usb/serial/ftdi_sio.c
5071     @@ -699,6 +699,7 @@ static const struct usb_device_id id_table_combined[] = {
5072     { USB_DEVICE(XSENS_VID, XSENS_AWINDA_DONGLE_PID) },
5073     { USB_DEVICE(XSENS_VID, XSENS_AWINDA_STATION_PID) },
5074     { USB_DEVICE(XSENS_VID, XSENS_CONVERTER_PID) },
5075     + { USB_DEVICE(XSENS_VID, XSENS_MTDEVBOARD_PID) },
5076     { USB_DEVICE(XSENS_VID, XSENS_MTW_PID) },
5077     { USB_DEVICE(FTDI_VID, FTDI_OMNI1509) },
5078     { USB_DEVICE(MOBILITY_VID, MOBILITY_USB_SERIAL_PID) },
5079     diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h
5080     index 4e4f46f3c89c..792e054126de 100644
5081     --- a/drivers/usb/serial/ftdi_sio_ids.h
5082     +++ b/drivers/usb/serial/ftdi_sio_ids.h
5083     @@ -155,6 +155,7 @@
5084     #define XSENS_AWINDA_STATION_PID 0x0101
5085     #define XSENS_AWINDA_DONGLE_PID 0x0102
5086     #define XSENS_MTW_PID 0x0200 /* Xsens MTw */
5087     +#define XSENS_MTDEVBOARD_PID 0x0300 /* Motion Tracker Development Board */
5088     #define XSENS_CONVERTER_PID 0xD00D /* Xsens USB-serial converter */
5089    
5090     /* Xsens devices using FTDI VID */
5091     diff --git a/drivers/w1/slaves/w1_therm.c b/drivers/w1/slaves/w1_therm.c
5092     index 1f11a20a8ab9..55eb86c9e214 100644
5093     --- a/drivers/w1/slaves/w1_therm.c
5094     +++ b/drivers/w1/slaves/w1_therm.c
5095     @@ -59,16 +59,32 @@ MODULE_ALIAS("w1-family-" __stringify(W1_THERM_DS28EA00));
5096     static int w1_strong_pullup = 1;
5097     module_param_named(strong_pullup, w1_strong_pullup, int, 0);
5098    
5099     +struct w1_therm_family_data {
5100     + uint8_t rom[9];
5101     + atomic_t refcnt;
5102     +};
5103     +
5104     +/* return the address of the refcnt in the family data */
5105     +#define THERM_REFCNT(family_data) \
5106     + (&((struct w1_therm_family_data*)family_data)->refcnt)
5107     +
5108     static int w1_therm_add_slave(struct w1_slave *sl)
5109     {
5110     - sl->family_data = kzalloc(9, GFP_KERNEL);
5111     + sl->family_data = kzalloc(sizeof(struct w1_therm_family_data),
5112     + GFP_KERNEL);
5113     if (!sl->family_data)
5114     return -ENOMEM;
5115     + atomic_set(THERM_REFCNT(sl->family_data), 1);
5116     return 0;
5117     }
5118    
5119     static void w1_therm_remove_slave(struct w1_slave *sl)
5120     {
5121     + int refcnt = atomic_sub_return(1, THERM_REFCNT(sl->family_data));
5122     + while(refcnt) {
5123     + msleep(1000);
5124     + refcnt = atomic_read(THERM_REFCNT(sl->family_data));
5125     + }
5126     kfree(sl->family_data);
5127     sl->family_data = NULL;
5128     }
5129     @@ -194,13 +210,22 @@ static ssize_t w1_slave_show(struct device *device,
5130     struct w1_slave *sl = dev_to_w1_slave(device);
5131     struct w1_master *dev = sl->master;
5132     u8 rom[9], crc, verdict, external_power;
5133     - int i, max_trying = 10;
5134     + int i, ret, max_trying = 10;
5135     ssize_t c = PAGE_SIZE;
5136     + u8 *family_data = sl->family_data;
5137     +
5138     + ret = mutex_lock_interruptible(&dev->bus_mutex);
5139     + if (ret != 0)
5140     + goto post_unlock;
5141    
5142     - i = mutex_lock_interruptible(&dev->bus_mutex);
5143     - if (i != 0)
5144     - return i;
5145     + if(!sl->family_data)
5146     + {
5147     + ret = -ENODEV;
5148     + goto pre_unlock;
5149     + }
5150    
5151     + /* prevent the slave from going away in sleep */
5152     + atomic_inc(THERM_REFCNT(family_data));
5153     memset(rom, 0, sizeof(rom));
5154    
5155     while (max_trying--) {
5156     @@ -230,17 +255,19 @@ static ssize_t w1_slave_show(struct device *device,
5157     mutex_unlock(&dev->bus_mutex);
5158    
5159     sleep_rem = msleep_interruptible(tm);
5160     - if (sleep_rem != 0)
5161     - return -EINTR;
5162     + if (sleep_rem != 0) {
5163     + ret = -EINTR;
5164     + goto post_unlock;
5165     + }
5166    
5167     - i = mutex_lock_interruptible(&dev->bus_mutex);
5168     - if (i != 0)
5169     - return i;
5170     + ret = mutex_lock_interruptible(&dev->bus_mutex);
5171     + if (ret != 0)
5172     + goto post_unlock;
5173     } else if (!w1_strong_pullup) {
5174     sleep_rem = msleep_interruptible(tm);
5175     if (sleep_rem != 0) {
5176     - mutex_unlock(&dev->bus_mutex);
5177     - return -EINTR;
5178     + ret = -EINTR;
5179     + goto pre_unlock;
5180     }
5181     }
5182    
5183     @@ -269,19 +296,24 @@ static ssize_t w1_slave_show(struct device *device,
5184     c -= snprintf(buf + PAGE_SIZE - c, c, ": crc=%02x %s\n",
5185     crc, (verdict) ? "YES" : "NO");
5186     if (verdict)
5187     - memcpy(sl->family_data, rom, sizeof(rom));
5188     + memcpy(family_data, rom, sizeof(rom));
5189     else
5190     dev_warn(device, "Read failed CRC check\n");
5191    
5192     for (i = 0; i < 9; ++i)
5193     c -= snprintf(buf + PAGE_SIZE - c, c, "%02x ",
5194     - ((u8 *)sl->family_data)[i]);
5195     + ((u8 *)family_data)[i]);
5196    
5197     c -= snprintf(buf + PAGE_SIZE - c, c, "t=%d\n",
5198     w1_convert_temp(rom, sl->family->fid));
5199     + ret = PAGE_SIZE - c;
5200     +
5201     +pre_unlock:
5202     mutex_unlock(&dev->bus_mutex);
5203    
5204     - return PAGE_SIZE - c;
5205     +post_unlock:
5206     + atomic_dec(THERM_REFCNT(family_data));
5207     + return ret;
5208     }
5209    
5210     static int __init w1_therm_init(void)
5211     diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
5212     index fce3b5b9a2bb..1cecf25fa14f 100644
5213     --- a/fs/btrfs/ioctl.c
5214     +++ b/fs/btrfs/ioctl.c
5215     @@ -2434,8 +2434,6 @@ static noinline int btrfs_ioctl_snap_destroy(struct file *file,
5216     goto out_unlock_inode;
5217     }
5218    
5219     - d_invalidate(dentry);
5220     -
5221     down_write(&root->fs_info->subvol_sem);
5222    
5223     err = may_destroy_subvol(dest);
5224     @@ -2529,7 +2527,7 @@ out_up_write:
5225     out_unlock_inode:
5226     mutex_unlock(&inode->i_mutex);
5227     if (!err) {
5228     - shrink_dcache_sb(root->fs_info->sb);
5229     + d_invalidate(dentry);
5230     btrfs_invalidate_inodes(dest);
5231     d_delete(dentry);
5232     ASSERT(dest->send_in_progress == 0);
5233     diff --git a/fs/ext4/indirect.c b/fs/ext4/indirect.c
5234     index 5e7af1c69577..11368881477c 100644
5235     --- a/fs/ext4/indirect.c
5236     +++ b/fs/ext4/indirect.c
5237     @@ -565,7 +565,7 @@ int ext4_ind_map_blocks(handle_t *handle, struct inode *inode,
5238     EXT4_FEATURE_RO_COMPAT_BIGALLOC)) {
5239     EXT4_ERROR_INODE(inode, "Can't allocate blocks for "
5240     "non-extent mapped inodes with bigalloc");
5241     - return -ENOSPC;
5242     + return -EUCLEAN;
5243     }
5244    
5245     /* Set up for the direct block allocation */
5246     diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
5247     index 842cdd153c20..120824664d32 100644
5248     --- a/fs/ext4/inode.c
5249     +++ b/fs/ext4/inode.c
5250     @@ -1606,19 +1606,32 @@ static int __ext4_journalled_writepage(struct page *page,
5251     ext4_walk_page_buffers(handle, page_bufs, 0, len,
5252     NULL, bget_one);
5253     }
5254     - /* As soon as we unlock the page, it can go away, but we have
5255     - * references to buffers so we are safe */
5256     + /*
5257     + * We need to release the page lock before we start the
5258     + * journal, so grab a reference so the page won't disappear
5259     + * out from under us.
5260     + */
5261     + get_page(page);
5262     unlock_page(page);
5263    
5264     handle = ext4_journal_start(inode, EXT4_HT_WRITE_PAGE,
5265     ext4_writepage_trans_blocks(inode));
5266     if (IS_ERR(handle)) {
5267     ret = PTR_ERR(handle);
5268     - goto out;
5269     + put_page(page);
5270     + goto out_no_pagelock;
5271     }
5272     -
5273     BUG_ON(!ext4_handle_valid(handle));
5274    
5275     + lock_page(page);
5276     + put_page(page);
5277     + if (page->mapping != mapping) {
5278     + /* The page got truncated from under us */
5279     + ext4_journal_stop(handle);
5280     + ret = 0;
5281     + goto out;
5282     + }
5283     +
5284     if (inline_data) {
5285     BUFFER_TRACE(inode_bh, "get write access");
5286     ret = ext4_journal_get_write_access(handle, inode_bh);
5287     @@ -1644,6 +1657,8 @@ static int __ext4_journalled_writepage(struct page *page,
5288     NULL, bput_one);
5289     ext4_set_inode_state(inode, EXT4_STATE_JDATA);
5290     out:
5291     + unlock_page(page);
5292     +out_no_pagelock:
5293     brelse(inode_bh);
5294     return ret;
5295     }
5296     diff --git a/fs/ext4/super.c b/fs/ext4/super.c
5297     index fc7391e14c2a..bf038468d752 100644
5298     --- a/fs/ext4/super.c
5299     +++ b/fs/ext4/super.c
5300     @@ -831,6 +831,7 @@ static void ext4_put_super(struct super_block *sb)
5301     dump_orphan_list(sb, sbi);
5302     J_ASSERT(list_empty(&sbi->s_orphan));
5303    
5304     + sync_blockdev(sb->s_bdev);
5305     invalidate_bdev(sb->s_bdev);
5306     if (sbi->journal_bdev && sbi->journal_bdev != sb->s_bdev) {
5307     /*
5308     diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c
5309     index 03246cd9d47a..9e3f6cfee2fb 100644
5310     --- a/fs/fuse/inode.c
5311     +++ b/fs/fuse/inode.c
5312     @@ -1049,6 +1049,7 @@ static int fuse_fill_super(struct super_block *sb, void *data, int silent)
5313     goto err_fput;
5314    
5315     fuse_conn_init(fc);
5316     + fc->release = fuse_free_conn;
5317    
5318     fc->dev = sb->s_dev;
5319     fc->sb = sb;
5320     @@ -1063,7 +1064,6 @@ static int fuse_fill_super(struct super_block *sb, void *data, int silent)
5321     fc->dont_mask = 1;
5322     sb->s_flags |= MS_POSIXACL;
5323    
5324     - fc->release = fuse_free_conn;
5325     fc->flags = d.flags;
5326     fc->user_id = d.user_id;
5327     fc->group_id = d.group_id;
5328     diff --git a/fs/jbd2/checkpoint.c b/fs/jbd2/checkpoint.c
5329     index 988b32ed4c87..4227dc4f7437 100644
5330     --- a/fs/jbd2/checkpoint.c
5331     +++ b/fs/jbd2/checkpoint.c
5332     @@ -390,7 +390,7 @@ int jbd2_cleanup_journal_tail(journal_t *journal)
5333     unsigned long blocknr;
5334    
5335     if (is_journal_aborted(journal))
5336     - return 1;
5337     + return -EIO;
5338    
5339     if (!jbd2_journal_get_log_tail(journal, &first_tid, &blocknr))
5340     return 1;
5341     @@ -405,10 +405,9 @@ int jbd2_cleanup_journal_tail(journal_t *journal)
5342     * jbd2_cleanup_journal_tail() doesn't get called all that often.
5343     */
5344     if (journal->j_flags & JBD2_BARRIER)
5345     - blkdev_issue_flush(journal->j_fs_dev, GFP_KERNEL, NULL);
5346     + blkdev_issue_flush(journal->j_fs_dev, GFP_NOFS, NULL);
5347    
5348     - __jbd2_update_log_tail(journal, first_tid, blocknr);
5349     - return 0;
5350     + return __jbd2_update_log_tail(journal, first_tid, blocknr);
5351     }
5352    
5353    
5354     diff --git a/fs/jbd2/journal.c b/fs/jbd2/journal.c
5355     index 1df94fabe4eb..be6f7178d23a 100644
5356     --- a/fs/jbd2/journal.c
5357     +++ b/fs/jbd2/journal.c
5358     @@ -885,9 +885,10 @@ int jbd2_journal_get_log_tail(journal_t *journal, tid_t *tid,
5359     *
5360     * Requires j_checkpoint_mutex
5361     */
5362     -void __jbd2_update_log_tail(journal_t *journal, tid_t tid, unsigned long block)
5363     +int __jbd2_update_log_tail(journal_t *journal, tid_t tid, unsigned long block)
5364     {
5365     unsigned long freed;
5366     + int ret;
5367    
5368     BUG_ON(!mutex_is_locked(&journal->j_checkpoint_mutex));
5369    
5370     @@ -897,7 +898,10 @@ void __jbd2_update_log_tail(journal_t *journal, tid_t tid, unsigned long block)
5371     * space and if we lose sb update during power failure we'd replay
5372     * old transaction with possibly newly overwritten data.
5373     */
5374     - jbd2_journal_update_sb_log_tail(journal, tid, block, WRITE_FUA);
5375     + ret = jbd2_journal_update_sb_log_tail(journal, tid, block, WRITE_FUA);
5376     + if (ret)
5377     + goto out;
5378     +
5379     write_lock(&journal->j_state_lock);
5380     freed = block - journal->j_tail;
5381     if (block < journal->j_tail)
5382     @@ -913,6 +917,9 @@ void __jbd2_update_log_tail(journal_t *journal, tid_t tid, unsigned long block)
5383     journal->j_tail_sequence = tid;
5384     journal->j_tail = block;
5385     write_unlock(&journal->j_state_lock);
5386     +
5387     +out:
5388     + return ret;
5389     }
5390    
5391     /*
5392     @@ -1331,7 +1338,7 @@ static int journal_reset(journal_t *journal)
5393     return jbd2_journal_start_thread(journal);
5394     }
5395    
5396     -static void jbd2_write_superblock(journal_t *journal, int write_op)
5397     +static int jbd2_write_superblock(journal_t *journal, int write_op)
5398     {
5399     struct buffer_head *bh = journal->j_sb_buffer;
5400     journal_superblock_t *sb = journal->j_superblock;
5401     @@ -1370,7 +1377,10 @@ static void jbd2_write_superblock(journal_t *journal, int write_op)
5402     printk(KERN_ERR "JBD2: Error %d detected when updating "
5403     "journal superblock for %s.\n", ret,
5404     journal->j_devname);
5405     + jbd2_journal_abort(journal, ret);
5406     }
5407     +
5408     + return ret;
5409     }
5410    
5411     /**
5412     @@ -1383,10 +1393,11 @@ static void jbd2_write_superblock(journal_t *journal, int write_op)
5413     * Update a journal's superblock information about log tail and write it to
5414     * disk, waiting for the IO to complete.
5415     */
5416     -void jbd2_journal_update_sb_log_tail(journal_t *journal, tid_t tail_tid,
5417     +int jbd2_journal_update_sb_log_tail(journal_t *journal, tid_t tail_tid,
5418     unsigned long tail_block, int write_op)
5419     {
5420     journal_superblock_t *sb = journal->j_superblock;
5421     + int ret;
5422    
5423     BUG_ON(!mutex_is_locked(&journal->j_checkpoint_mutex));
5424     jbd_debug(1, "JBD2: updating superblock (start %lu, seq %u)\n",
5425     @@ -1395,13 +1406,18 @@ void jbd2_journal_update_sb_log_tail(journal_t *journal, tid_t tail_tid,
5426     sb->s_sequence = cpu_to_be32(tail_tid);
5427     sb->s_start = cpu_to_be32(tail_block);
5428    
5429     - jbd2_write_superblock(journal, write_op);
5430     + ret = jbd2_write_superblock(journal, write_op);
5431     + if (ret)
5432     + goto out;
5433    
5434     /* Log is no longer empty */
5435     write_lock(&journal->j_state_lock);
5436     WARN_ON(!sb->s_sequence);
5437     journal->j_flags &= ~JBD2_FLUSHED;
5438     write_unlock(&journal->j_state_lock);
5439     +
5440     +out:
5441     + return ret;
5442     }
5443    
5444     /**
5445     @@ -1951,7 +1967,14 @@ int jbd2_journal_flush(journal_t *journal)
5446     return -EIO;
5447    
5448     mutex_lock(&journal->j_checkpoint_mutex);
5449     - jbd2_cleanup_journal_tail(journal);
5450     + if (!err) {
5451     + err = jbd2_cleanup_journal_tail(journal);
5452     + if (err < 0) {
5453     + mutex_unlock(&journal->j_checkpoint_mutex);
5454     + goto out;
5455     + }
5456     + err = 0;
5457     + }
5458    
5459     /* Finally, mark the journal as really needing no recovery.
5460     * This sets s_start==0 in the underlying superblock, which is
5461     @@ -1967,7 +1990,8 @@ int jbd2_journal_flush(journal_t *journal)
5462     J_ASSERT(journal->j_head == journal->j_tail);
5463     J_ASSERT(journal->j_tail_sequence == journal->j_transaction_sequence);
5464     write_unlock(&journal->j_state_lock);
5465     - return 0;
5466     +out:
5467     + return err;
5468     }
5469    
5470     /**
5471     diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
5472     index cd617076aeca..b13edc0865f7 100644
5473     --- a/fs/nfs/nfs4proc.c
5474     +++ b/fs/nfs/nfs4proc.c
5475     @@ -38,6 +38,7 @@
5476     #include <linux/mm.h>
5477     #include <linux/delay.h>
5478     #include <linux/errno.h>
5479     +#include <linux/file.h>
5480     #include <linux/string.h>
5481     #include <linux/ratelimit.h>
5482     #include <linux/printk.h>
5483     @@ -5355,6 +5356,7 @@ static struct nfs4_unlockdata *nfs4_alloc_unlockdata(struct file_lock *fl,
5484     atomic_inc(&lsp->ls_count);
5485     /* Ensure we don't close file until we're done freeing locks! */
5486     p->ctx = get_nfs_open_context(ctx);
5487     + get_file(fl->fl_file);
5488     memcpy(&p->fl, fl, sizeof(p->fl));
5489     p->server = NFS_SERVER(inode);
5490     return p;
5491     @@ -5366,6 +5368,7 @@ static void nfs4_locku_release_calldata(void *data)
5492     nfs_free_seqid(calldata->arg.seqid);
5493     nfs4_put_lock_state(calldata->lsp);
5494     put_nfs_open_context(calldata->ctx);
5495     + fput(calldata->fl.fl_file);
5496     kfree(calldata);
5497     }
5498    
5499     @@ -5550,6 +5553,7 @@ static struct nfs4_lockdata *nfs4_alloc_lockdata(struct file_lock *fl,
5500     p->server = server;
5501     atomic_inc(&lsp->ls_count);
5502     p->ctx = get_nfs_open_context(ctx);
5503     + get_file(fl->fl_file);
5504     memcpy(&p->fl, fl, sizeof(p->fl));
5505     return p;
5506     out_free_seqid:
5507     @@ -5639,6 +5643,7 @@ static void nfs4_lock_release(void *calldata)
5508     nfs_free_seqid(data->arg.lock_seqid);
5509     nfs4_put_lock_state(data->lsp);
5510     put_nfs_open_context(data->ctx);
5511     + fput(data->fl.fl_file);
5512     kfree(data);
5513     dprintk("%s: done!\n", __func__);
5514     }
5515     diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c
5516     index 5194933ed419..1f9d57ab8df4 100644
5517     --- a/fs/nfs/nfs4state.c
5518     +++ b/fs/nfs/nfs4state.c
5519     @@ -1455,6 +1455,8 @@ restart:
5520     spin_unlock(&state->state_lock);
5521     }
5522     nfs4_put_open_state(state);
5523     + clear_bit(NFS4CLNT_RECLAIM_NOGRACE,
5524     + &state->flags);
5525     spin_lock(&sp->so_lock);
5526     goto restart;
5527     }
5528     diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c
5529     index 883ee88e5f5e..354f66609316 100644
5530     --- a/fs/nfs/pnfs.c
5531     +++ b/fs/nfs/pnfs.c
5532     @@ -1535,6 +1535,7 @@ int pnfs_write_done_resend_to_mds(struct nfs_pgio_header *hdr)
5533     /* Resend all requests through the MDS */
5534     nfs_pageio_init_write(&pgio, hdr->inode, FLUSH_STABLE, true,
5535     hdr->completion_ops);
5536     + set_bit(NFS_CONTEXT_RESEND_WRITES, &hdr->args.context->flags);
5537     return nfs_pageio_resend(&pgio, hdr);
5538     }
5539     EXPORT_SYMBOL_GPL(pnfs_write_done_resend_to_mds);
5540     @@ -1576,6 +1577,7 @@ pnfs_write_through_mds(struct nfs_pageio_descriptor *desc,
5541     desc->pg_recoalesce = 1;
5542     }
5543     nfs_pgio_data_destroy(hdr);
5544     + hdr->release(hdr);
5545     }
5546    
5547     static enum pnfs_try_status
5548     @@ -1692,6 +1694,7 @@ pnfs_read_through_mds(struct nfs_pageio_descriptor *desc,
5549     desc->pg_recoalesce = 1;
5550     }
5551     nfs_pgio_data_destroy(hdr);
5552     + hdr->release(hdr);
5553     }
5554    
5555     /*
5556     diff --git a/fs/nfs/write.c b/fs/nfs/write.c
5557     index f83b02dc9166..6067f2a0b493 100644
5558     --- a/fs/nfs/write.c
5559     +++ b/fs/nfs/write.c
5560     @@ -1252,6 +1252,7 @@ static void nfs_initiate_write(struct nfs_pgio_header *hdr,
5561     static void nfs_redirty_request(struct nfs_page *req)
5562     {
5563     nfs_mark_request_dirty(req);
5564     + set_bit(NFS_CONTEXT_RESEND_WRITES, &req->wb_context->flags);
5565     nfs_unlock_request(req);
5566     nfs_end_page_writeback(req);
5567     nfs_release_request(req);
5568     diff --git a/fs/xfs/xfs_symlink.c b/fs/xfs/xfs_symlink.c
5569     index 02ae62a998e0..6a93fd583ec0 100644
5570     --- a/fs/xfs/xfs_symlink.c
5571     +++ b/fs/xfs/xfs_symlink.c
5572     @@ -107,7 +107,7 @@ xfs_readlink_bmap(
5573     cur_chunk += sizeof(struct xfs_dsymlink_hdr);
5574     }
5575    
5576     - memcpy(link + offset, bp->b_addr, byte_cnt);
5577     + memcpy(link + offset, cur_chunk, byte_cnt);
5578    
5579     pathlen -= byte_cnt;
5580     offset += byte_cnt;
5581     diff --git a/include/linux/jbd2.h b/include/linux/jbd2.h
5582     index 704b9a599b26..dadb42109dec 100644
5583     --- a/include/linux/jbd2.h
5584     +++ b/include/linux/jbd2.h
5585     @@ -1035,7 +1035,7 @@ struct buffer_head *jbd2_journal_get_descriptor_buffer(journal_t *journal);
5586     int jbd2_journal_next_log_block(journal_t *, unsigned long long *);
5587     int jbd2_journal_get_log_tail(journal_t *journal, tid_t *tid,
5588     unsigned long *block);
5589     -void __jbd2_update_log_tail(journal_t *journal, tid_t tid, unsigned long block);
5590     +int __jbd2_update_log_tail(journal_t *journal, tid_t tid, unsigned long block);
5591     void jbd2_update_log_tail(journal_t *journal, tid_t tid, unsigned long block);
5592    
5593     /* Commit management */
5594     @@ -1157,7 +1157,7 @@ extern int jbd2_journal_recover (journal_t *journal);
5595     extern int jbd2_journal_wipe (journal_t *, int);
5596     extern int jbd2_journal_skip_recovery (journal_t *);
5597     extern void jbd2_journal_update_sb_errno(journal_t *);
5598     -extern void jbd2_journal_update_sb_log_tail (journal_t *, tid_t,
5599     +extern int jbd2_journal_update_sb_log_tail (journal_t *, tid_t,
5600     unsigned long, int);
5601     extern void __jbd2_journal_abort_hard (journal_t *);
5602     extern void jbd2_journal_abort (journal_t *, int);
5603     diff --git a/include/linux/kmemleak.h b/include/linux/kmemleak.h
5604     index 057e95971014..19acfdc3828f 100644
5605     --- a/include/linux/kmemleak.h
5606     +++ b/include/linux/kmemleak.h
5607     @@ -26,7 +26,8 @@
5608     extern void kmemleak_init(void) __ref;
5609     extern void kmemleak_alloc(const void *ptr, size_t size, int min_count,
5610     gfp_t gfp) __ref;
5611     -extern void kmemleak_alloc_percpu(const void __percpu *ptr, size_t size) __ref;
5612     +extern void kmemleak_alloc_percpu(const void __percpu *ptr, size_t size,
5613     + gfp_t gfp) __ref;
5614     extern void kmemleak_free(const void *ptr) __ref;
5615     extern void kmemleak_free_part(const void *ptr, size_t size) __ref;
5616     extern void kmemleak_free_percpu(const void __percpu *ptr) __ref;
5617     @@ -69,7 +70,8 @@ static inline void kmemleak_alloc_recursive(const void *ptr, size_t size,
5618     gfp_t gfp)
5619     {
5620     }
5621     -static inline void kmemleak_alloc_percpu(const void __percpu *ptr, size_t size)
5622     +static inline void kmemleak_alloc_percpu(const void __percpu *ptr, size_t size,
5623     + gfp_t gfp)
5624     {
5625     }
5626     static inline void kmemleak_free(const void *ptr)
5627     diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h
5628     index d77a08d25223..d71682435f4a 100644
5629     --- a/include/linux/nfs_xdr.h
5630     +++ b/include/linux/nfs_xdr.h
5631     @@ -1132,7 +1132,7 @@ struct nfs41_state_protection {
5632     struct nfs4_op_map allow;
5633     };
5634    
5635     -#define NFS4_EXCHANGE_ID_LEN (48)
5636     +#define NFS4_EXCHANGE_ID_LEN (127)
5637     struct nfs41_exchange_id_args {
5638     struct nfs_client *client;
5639     nfs4_verifier *verifier;
5640     diff --git a/include/linux/pci.h b/include/linux/pci.h
5641     index 2882c13c6391..e92cdad3240d 100644
5642     --- a/include/linux/pci.h
5643     +++ b/include/linux/pci.h
5644     @@ -993,6 +993,7 @@ int __must_check pci_assign_resource(struct pci_dev *dev, int i);
5645     int __must_check pci_reassign_resource(struct pci_dev *dev, int i, resource_size_t add_size, resource_size_t align);
5646     int pci_select_bars(struct pci_dev *dev, unsigned long flags);
5647     bool pci_device_is_present(struct pci_dev *pdev);
5648     +void pci_ignore_hotplug(struct pci_dev *dev);
5649    
5650     /* ROM control related routines */
5651     int pci_enable_rom(struct pci_dev *pdev);
5652     @@ -1028,11 +1029,6 @@ bool pci_dev_run_wake(struct pci_dev *dev);
5653     bool pci_check_pme_status(struct pci_dev *dev);
5654     void pci_pme_wakeup_bus(struct pci_bus *bus);
5655    
5656     -static inline void pci_ignore_hotplug(struct pci_dev *dev)
5657     -{
5658     - dev->ignore_hotplug = 1;
5659     -}
5660     -
5661     static inline int pci_enable_wake(struct pci_dev *dev, pci_power_t state,
5662     bool enable)
5663     {
5664     diff --git a/include/linux/rhashtable.h b/include/linux/rhashtable.h
5665     index fb298e9d6d3a..84056743780a 100644
5666     --- a/include/linux/rhashtable.h
5667     +++ b/include/linux/rhashtable.h
5668     @@ -108,7 +108,7 @@ int rhashtable_expand(struct rhashtable *ht, gfp_t flags);
5669     int rhashtable_shrink(struct rhashtable *ht, gfp_t flags);
5670    
5671     void *rhashtable_lookup(const struct rhashtable *ht, const void *key);
5672     -void *rhashtable_lookup_compare(const struct rhashtable *ht, u32 hash,
5673     +void *rhashtable_lookup_compare(const struct rhashtable *ht, void *key,
5674     bool (*compare)(void *, void *), void *arg);
5675    
5676     void rhashtable_destroy(const struct rhashtable *ht);
5677     diff --git a/include/net/netfilter/nf_queue.h b/include/net/netfilter/nf_queue.h
5678     index 84a53d780306..1a91f979160e 100644
5679     --- a/include/net/netfilter/nf_queue.h
5680     +++ b/include/net/netfilter/nf_queue.h
5681     @@ -28,6 +28,8 @@ struct nf_queue_entry {
5682     struct nf_queue_handler {
5683     int (*outfn)(struct nf_queue_entry *entry,
5684     unsigned int queuenum);
5685     + void (*nf_hook_drop)(struct net *net,
5686     + struct nf_hook_ops *ops);
5687     };
5688    
5689     void nf_register_queue_handler(const struct nf_queue_handler *qh);
5690     diff --git a/include/net/netns/sctp.h b/include/net/netns/sctp.h
5691     index 3573a81815ad..8ba379f9e467 100644
5692     --- a/include/net/netns/sctp.h
5693     +++ b/include/net/netns/sctp.h
5694     @@ -31,6 +31,7 @@ struct netns_sctp {
5695     struct list_head addr_waitq;
5696     struct timer_list addr_wq_timer;
5697     struct list_head auto_asconf_splist;
5698     + /* Lock that protects both addr_waitq and auto_asconf_splist */
5699     spinlock_t addr_wq_lock;
5700    
5701     /* Lock that protects the local_addr_list writers */
5702     diff --git a/include/net/sctp/structs.h b/include/net/sctp/structs.h
5703     index 4ff3f67be62c..2ad3a7bc8385 100644
5704     --- a/include/net/sctp/structs.h
5705     +++ b/include/net/sctp/structs.h
5706     @@ -223,6 +223,10 @@ struct sctp_sock {
5707     atomic_t pd_mode;
5708     /* Receive to here while partial delivery is in effect. */
5709     struct sk_buff_head pd_lobby;
5710     +
5711     + /* These must be the last fields, as they will skipped on copies,
5712     + * like on accept and peeloff operations
5713     + */
5714     struct list_head auto_asconf_list;
5715     int do_auto_asconf;
5716     };
5717     diff --git a/include/uapi/drm/radeon_drm.h b/include/uapi/drm/radeon_drm.h
5718     index 50d0fb41a3bf..76d2edea5bd1 100644
5719     --- a/include/uapi/drm/radeon_drm.h
5720     +++ b/include/uapi/drm/radeon_drm.h
5721     @@ -1034,6 +1034,7 @@ struct drm_radeon_cs {
5722     #define RADEON_INFO_VRAM_USAGE 0x1e
5723     #define RADEON_INFO_GTT_USAGE 0x1f
5724     #define RADEON_INFO_ACTIVE_CU_COUNT 0x20
5725     +#define RADEON_INFO_VA_UNMAP_WORKING 0x25
5726    
5727     struct drm_radeon_info {
5728     uint32_t request;
5729     diff --git a/kernel/irq/devres.c b/kernel/irq/devres.c
5730     index d5d0f7345c54..74d90a754268 100644
5731     --- a/kernel/irq/devres.c
5732     +++ b/kernel/irq/devres.c
5733     @@ -104,7 +104,7 @@ int devm_request_any_context_irq(struct device *dev, unsigned int irq,
5734     return -ENOMEM;
5735    
5736     rc = request_any_context_irq(irq, handler, irqflags, devname, dev_id);
5737     - if (rc) {
5738     + if (rc < 0) {
5739     devres_free(dr);
5740     return rc;
5741     }
5742     @@ -113,7 +113,7 @@ int devm_request_any_context_irq(struct device *dev, unsigned int irq,
5743     dr->dev_id = dev_id;
5744     devres_add(dev, dr);
5745    
5746     - return 0;
5747     + return rc;
5748     }
5749     EXPORT_SYMBOL(devm_request_any_context_irq);
5750    
5751     diff --git a/kernel/power/Kconfig b/kernel/power/Kconfig
5752     index bbef57f5bdfd..c2ae4618a159 100644
5753     --- a/kernel/power/Kconfig
5754     +++ b/kernel/power/Kconfig
5755     @@ -191,7 +191,7 @@ config DPM_WATCHDOG
5756     config DPM_WATCHDOG_TIMEOUT
5757     int "Watchdog timeout in seconds"
5758     range 1 120
5759     - default 12
5760     + default 60
5761     depends on DPM_WATCHDOG
5762    
5763     config PM_TRACE
5764     diff --git a/kernel/rcu/tiny.c b/kernel/rcu/tiny.c
5765     index c0623fc47125..da80f2f73b50 100644
5766     --- a/kernel/rcu/tiny.c
5767     +++ b/kernel/rcu/tiny.c
5768     @@ -282,6 +282,11 @@ static void __rcu_process_callbacks(struct rcu_ctrlblk *rcp)
5769    
5770     /* Move the ready-to-invoke callbacks to a local list. */
5771     local_irq_save(flags);
5772     + if (rcp->donetail == &rcp->rcucblist) {
5773     + /* No callbacks ready, so just leave. */
5774     + local_irq_restore(flags);
5775     + return;
5776     + }
5777     RCU_TRACE(trace_rcu_batch_start(rcp->name, 0, rcp->qlen, -1));
5778     list = rcp->rcucblist;
5779     rcp->rcucblist = *rcp->donetail;
5780     diff --git a/kernel/softirq.c b/kernel/softirq.c
5781     index 0699add19164..9e787d8311b5 100644
5782     --- a/kernel/softirq.c
5783     +++ b/kernel/softirq.c
5784     @@ -656,9 +656,13 @@ static void run_ksoftirqd(unsigned int cpu)
5785     * in the task stack here.
5786     */
5787     __do_softirq();
5788     - rcu_note_context_switch(cpu);
5789     local_irq_enable();
5790     cond_resched();
5791     +
5792     + preempt_disable();
5793     + rcu_note_context_switch(cpu);
5794     + preempt_enable();
5795     +
5796     return;
5797     }
5798     local_irq_enable();
5799     diff --git a/kernel/trace/ring_buffer_benchmark.c b/kernel/trace/ring_buffer_benchmark.c
5800     index 3f9e328c30b5..728f99b4533d 100644
5801     --- a/kernel/trace/ring_buffer_benchmark.c
5802     +++ b/kernel/trace/ring_buffer_benchmark.c
5803     @@ -452,7 +452,7 @@ static int __init ring_buffer_benchmark_init(void)
5804    
5805     if (producer_fifo >= 0) {
5806     struct sched_param param = {
5807     - .sched_priority = consumer_fifo
5808     + .sched_priority = producer_fifo
5809     };
5810     sched_setscheduler(producer, SCHED_FIFO, &param);
5811     } else
5812     diff --git a/kernel/trace/trace_events_filter.c b/kernel/trace/trace_events_filter.c
5813     index 7a8c1528e141..bcb9145a7913 100644
5814     --- a/kernel/trace/trace_events_filter.c
5815     +++ b/kernel/trace/trace_events_filter.c
5816     @@ -1050,6 +1050,9 @@ static void parse_init(struct filter_parse_state *ps,
5817    
5818     static char infix_next(struct filter_parse_state *ps)
5819     {
5820     + if (!ps->infix.cnt)
5821     + return 0;
5822     +
5823     ps->infix.cnt--;
5824    
5825     return ps->infix.string[ps->infix.tail++];
5826     @@ -1065,6 +1068,9 @@ static char infix_peek(struct filter_parse_state *ps)
5827    
5828     static void infix_advance(struct filter_parse_state *ps)
5829     {
5830     + if (!ps->infix.cnt)
5831     + return;
5832     +
5833     ps->infix.cnt--;
5834     ps->infix.tail++;
5835     }
5836     diff --git a/lib/rhashtable.c b/lib/rhashtable.c
5837     index 624a0b7c05ef..cb22073fe687 100644
5838     --- a/lib/rhashtable.c
5839     +++ b/lib/rhashtable.c
5840     @@ -61,6 +61,8 @@ static u32 __hashfn(const struct rhashtable *ht, const void *key,
5841     * Computes the hash value using the hash function provided in the 'hashfn'
5842     * of struct rhashtable_params. The returned value is guaranteed to be
5843     * smaller than the number of buckets in the hash table.
5844     + *
5845     + * The caller must ensure that no concurrent table mutations occur.
5846     */
5847     u32 rhashtable_hashfn(const struct rhashtable *ht, const void *key, u32 len)
5848     {
5849     @@ -92,6 +94,8 @@ static u32 obj_hashfn(const struct rhashtable *ht, const void *ptr, u32 hsize)
5850     * 'obj_hashfn' depending on whether the hash table is set up to work with
5851     * a fixed length key. The returned value is guaranteed to be smaller than
5852     * the number of buckets in the hash table.
5853     + *
5854     + * The caller must ensure that no concurrent table mutations occur.
5855     */
5856     u32 rhashtable_obj_hashfn(const struct rhashtable *ht, void *ptr)
5857     {
5858     @@ -474,7 +478,7 @@ EXPORT_SYMBOL_GPL(rhashtable_lookup);
5859     /**
5860     * rhashtable_lookup_compare - search hash table with compare function
5861     * @ht: hash table
5862     - * @hash: hash value of desired entry
5863     + * @key: pointer to key
5864     * @compare: compare function, must return true on match
5865     * @arg: argument passed on to compare function
5866     *
5867     @@ -486,14 +490,14 @@ EXPORT_SYMBOL_GPL(rhashtable_lookup);
5868     *
5869     * Returns the first entry on which the compare function returned true.
5870     */
5871     -void *rhashtable_lookup_compare(const struct rhashtable *ht, u32 hash,
5872     +void *rhashtable_lookup_compare(const struct rhashtable *ht, void *key,
5873     bool (*compare)(void *, void *), void *arg)
5874     {
5875     const struct bucket_table *tbl = rht_dereference_rcu(ht->tbl, ht);
5876     struct rhash_head *he;
5877     + u32 hash;
5878    
5879     - if (unlikely(hash >= tbl->size))
5880     - return NULL;
5881     + hash = __hashfn(ht, key, ht->p.key_len, tbl->size);
5882    
5883     rht_for_each_rcu(he, tbl->buckets[hash], ht) {
5884     if (!compare(rht_obj(ht, he), arg))
5885     diff --git a/mm/kmemleak.c b/mm/kmemleak.c
5886     index 3cda50c1e394..1f14ef68a5c8 100644
5887     --- a/mm/kmemleak.c
5888     +++ b/mm/kmemleak.c
5889     @@ -193,6 +193,8 @@ static struct kmem_cache *scan_area_cache;
5890    
5891     /* set if tracing memory operations is enabled */
5892     static int kmemleak_enabled;
5893     +/* same as above but only for the kmemleak_free() callback */
5894     +static int kmemleak_free_enabled;
5895     /* set in the late_initcall if there were no errors */
5896     static int kmemleak_initialized;
5897     /* enables or disables early logging of the memory operations */
5898     @@ -905,12 +907,13 @@ EXPORT_SYMBOL_GPL(kmemleak_alloc);
5899     * kmemleak_alloc_percpu - register a newly allocated __percpu object
5900     * @ptr: __percpu pointer to beginning of the object
5901     * @size: size of the object
5902     + * @gfp: flags used for kmemleak internal memory allocations
5903     *
5904     * This function is called from the kernel percpu allocator when a new object
5905     - * (memory block) is allocated (alloc_percpu). It assumes GFP_KERNEL
5906     - * allocation.
5907     + * (memory block) is allocated (alloc_percpu).
5908     */
5909     -void __ref kmemleak_alloc_percpu(const void __percpu *ptr, size_t size)
5910     +void __ref kmemleak_alloc_percpu(const void __percpu *ptr, size_t size,
5911     + gfp_t gfp)
5912     {
5913     unsigned int cpu;
5914    
5915     @@ -923,7 +926,7 @@ void __ref kmemleak_alloc_percpu(const void __percpu *ptr, size_t size)
5916     if (kmemleak_enabled && ptr && !IS_ERR(ptr))
5917     for_each_possible_cpu(cpu)
5918     create_object((unsigned long)per_cpu_ptr(ptr, cpu),
5919     - size, 0, GFP_KERNEL);
5920     + size, 0, gfp);
5921     else if (kmemleak_early_log)
5922     log_early(KMEMLEAK_ALLOC_PERCPU, ptr, size, 0);
5923     }
5924     @@ -940,7 +943,7 @@ void __ref kmemleak_free(const void *ptr)
5925     {
5926     pr_debug("%s(0x%p)\n", __func__, ptr);
5927    
5928     - if (kmemleak_enabled && ptr && !IS_ERR(ptr))
5929     + if (kmemleak_free_enabled && ptr && !IS_ERR(ptr))
5930     delete_object_full((unsigned long)ptr);
5931     else if (kmemleak_early_log)
5932     log_early(KMEMLEAK_FREE, ptr, 0, 0);
5933     @@ -980,7 +983,7 @@ void __ref kmemleak_free_percpu(const void __percpu *ptr)
5934    
5935     pr_debug("%s(0x%p)\n", __func__, ptr);
5936    
5937     - if (kmemleak_enabled && ptr && !IS_ERR(ptr))
5938     + if (kmemleak_free_enabled && ptr && !IS_ERR(ptr))
5939     for_each_possible_cpu(cpu)
5940     delete_object_full((unsigned long)per_cpu_ptr(ptr,
5941     cpu));
5942     @@ -1743,6 +1746,13 @@ static void kmemleak_do_cleanup(struct work_struct *work)
5943     mutex_lock(&scan_mutex);
5944     stop_scan_thread();
5945    
5946     + /*
5947     + * Once the scan thread has stopped, it is safe to no longer track
5948     + * object freeing. Ordering of the scan thread stopping and the memory
5949     + * accesses below is guaranteed by the kthread_stop() function.
5950     + */
5951     + kmemleak_free_enabled = 0;
5952     +
5953     if (!kmemleak_found_leaks)
5954     __kmemleak_do_cleanup();
5955     else
5956     @@ -1769,6 +1779,8 @@ static void kmemleak_disable(void)
5957     /* check whether it is too early for a kernel thread */
5958     if (kmemleak_initialized)
5959     schedule_work(&cleanup_work);
5960     + else
5961     + kmemleak_free_enabled = 0;
5962    
5963     pr_info("Kernel memory leak detector disabled\n");
5964     }
5965     @@ -1833,8 +1845,10 @@ void __init kmemleak_init(void)
5966     if (kmemleak_error) {
5967     local_irq_restore(flags);
5968     return;
5969     - } else
5970     + } else {
5971     kmemleak_enabled = 1;
5972     + kmemleak_free_enabled = 1;
5973     + }
5974     local_irq_restore(flags);
5975    
5976     /*
5977     diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
5978     index 8c71654e261f..05014e89efae 100644
5979     --- a/mm/memory_hotplug.c
5980     +++ b/mm/memory_hotplug.c
5981     @@ -1978,8 +1978,10 @@ void try_offline_node(int nid)
5982     * wait_table may be allocated from boot memory,
5983     * here only free if it's allocated by vmalloc.
5984     */
5985     - if (is_vmalloc_addr(zone->wait_table))
5986     + if (is_vmalloc_addr(zone->wait_table)) {
5987     vfree(zone->wait_table);
5988     + zone->wait_table = NULL;
5989     + }
5990     }
5991     }
5992     EXPORT_SYMBOL(try_offline_node);
5993     diff --git a/mm/percpu.c b/mm/percpu.c
5994     index 014bab65e0ff..88bb6c92d83a 100644
5995     --- a/mm/percpu.c
5996     +++ b/mm/percpu.c
5997     @@ -1030,7 +1030,7 @@ area_found:
5998     memset((void *)pcpu_chunk_addr(chunk, cpu, 0) + off, 0, size);
5999    
6000     ptr = __addr_to_pcpu_ptr(chunk->base_addr + off);
6001     - kmemleak_alloc_percpu(ptr, size);
6002     + kmemleak_alloc_percpu(ptr, size, gfp);
6003     return ptr;
6004    
6005     fail_unlock:
6006     diff --git a/net/bridge/br_ioctl.c b/net/bridge/br_ioctl.c
6007     index a9a4a1b7863d..8d423bc649b9 100644
6008     --- a/net/bridge/br_ioctl.c
6009     +++ b/net/bridge/br_ioctl.c
6010     @@ -247,9 +247,7 @@ static int old_dev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
6011     if (!ns_capable(dev_net(dev)->user_ns, CAP_NET_ADMIN))
6012     return -EPERM;
6013    
6014     - spin_lock_bh(&br->lock);
6015     br_stp_set_bridge_priority(br, args[1]);
6016     - spin_unlock_bh(&br->lock);
6017     return 0;
6018    
6019     case BRCTL_SET_PORT_PRIORITY:
6020     diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c
6021     index b0aee78dba41..c08f510fce30 100644
6022     --- a/net/bridge/br_multicast.c
6023     +++ b/net/bridge/br_multicast.c
6024     @@ -1166,6 +1166,9 @@ static void br_multicast_add_router(struct net_bridge *br,
6025     struct net_bridge_port *p;
6026     struct hlist_node *slot = NULL;
6027    
6028     + if (!hlist_unhashed(&port->rlist))
6029     + return;
6030     +
6031     hlist_for_each_entry(p, &br->router_list, rlist) {
6032     if ((unsigned long) port >= (unsigned long) p)
6033     break;
6034     @@ -1193,12 +1196,8 @@ static void br_multicast_mark_router(struct net_bridge *br,
6035     if (port->multicast_router != 1)
6036     return;
6037    
6038     - if (!hlist_unhashed(&port->rlist))
6039     - goto timer;
6040     -
6041     br_multicast_add_router(br, port);
6042    
6043     -timer:
6044     mod_timer(&port->multicast_router_timer,
6045     now + br->multicast_querier_interval);
6046     }
6047     diff --git a/net/bridge/br_stp_if.c b/net/bridge/br_stp_if.c
6048     index 41146872c1b4..7832d07f48f6 100644
6049     --- a/net/bridge/br_stp_if.c
6050     +++ b/net/bridge/br_stp_if.c
6051     @@ -243,12 +243,13 @@ bool br_stp_recalculate_bridge_id(struct net_bridge *br)
6052     return true;
6053     }
6054    
6055     -/* called under bridge lock */
6056     +/* Acquires and releases bridge lock */
6057     void br_stp_set_bridge_priority(struct net_bridge *br, u16 newprio)
6058     {
6059     struct net_bridge_port *p;
6060     int wasroot;
6061    
6062     + spin_lock_bh(&br->lock);
6063     wasroot = br_is_root_bridge(br);
6064    
6065     list_for_each_entry(p, &br->port_list, list) {
6066     @@ -266,6 +267,7 @@ void br_stp_set_bridge_priority(struct net_bridge *br, u16 newprio)
6067     br_port_state_selection(br);
6068     if (br_is_root_bridge(br) && !wasroot)
6069     br_become_root_bridge(br);
6070     + spin_unlock_bh(&br->lock);
6071     }
6072    
6073     /* called under bridge lock */
6074     diff --git a/net/core/neighbour.c b/net/core/neighbour.c
6075     index ef31fef25e5a..2b0d99dad8be 100644
6076     --- a/net/core/neighbour.c
6077     +++ b/net/core/neighbour.c
6078     @@ -977,6 +977,8 @@ int __neigh_event_send(struct neighbour *neigh, struct sk_buff *skb)
6079     rc = 0;
6080     if (neigh->nud_state & (NUD_CONNECTED | NUD_DELAY | NUD_PROBE))
6081     goto out_unlock_bh;
6082     + if (neigh->dead)
6083     + goto out_dead;
6084    
6085     if (!(neigh->nud_state & (NUD_STALE | NUD_INCOMPLETE))) {
6086     if (NEIGH_VAR(neigh->parms, MCAST_PROBES) +
6087     @@ -1033,6 +1035,13 @@ out_unlock_bh:
6088     write_unlock(&neigh->lock);
6089     local_bh_enable();
6090     return rc;
6091     +
6092     +out_dead:
6093     + if (neigh->nud_state & NUD_STALE)
6094     + goto out_unlock_bh;
6095     + write_unlock_bh(&neigh->lock);
6096     + kfree_skb(skb);
6097     + return 1;
6098     }
6099     EXPORT_SYMBOL(__neigh_event_send);
6100    
6101     @@ -1096,6 +1105,8 @@ int neigh_update(struct neighbour *neigh, const u8 *lladdr, u8 new,
6102     if (!(flags & NEIGH_UPDATE_F_ADMIN) &&
6103     (old & (NUD_NOARP | NUD_PERMANENT)))
6104     goto out;
6105     + if (neigh->dead)
6106     + goto out;
6107    
6108     if (!(new & NUD_VALID)) {
6109     neigh_del_timer(neigh);
6110     @@ -1245,6 +1256,8 @@ EXPORT_SYMBOL(neigh_update);
6111     */
6112     void __neigh_set_probe_once(struct neighbour *neigh)
6113     {
6114     + if (neigh->dead)
6115     + return;
6116     neigh->updated = jiffies;
6117     if (!(neigh->nud_state & NUD_FAILED))
6118     return;
6119     diff --git a/net/core/skbuff.c b/net/core/skbuff.c
6120     index 02ebb7133312..72400a1bb439 100644
6121     --- a/net/core/skbuff.c
6122     +++ b/net/core/skbuff.c
6123     @@ -4199,7 +4199,7 @@ struct sk_buff *alloc_skb_with_frags(unsigned long header_len,
6124    
6125     while (order) {
6126     if (npages >= 1 << order) {
6127     - page = alloc_pages(gfp_mask |
6128     + page = alloc_pages((gfp_mask & ~__GFP_WAIT) |
6129     __GFP_COMP |
6130     __GFP_NOWARN |
6131     __GFP_NORETRY,
6132     diff --git a/net/core/sock.c b/net/core/sock.c
6133     index 852acbc52f96..1e5130de31b6 100644
6134     --- a/net/core/sock.c
6135     +++ b/net/core/sock.c
6136     @@ -1854,7 +1854,7 @@ bool skb_page_frag_refill(unsigned int sz, struct page_frag *pfrag, gfp_t gfp)
6137    
6138     pfrag->offset = 0;
6139     if (SKB_FRAG_PAGE_ORDER) {
6140     - pfrag->page = alloc_pages(gfp | __GFP_COMP |
6141     + pfrag->page = alloc_pages((gfp & ~__GFP_WAIT) | __GFP_COMP |
6142     __GFP_NOWARN | __GFP_NORETRY,
6143     SKB_FRAG_PAGE_ORDER);
6144     if (likely(pfrag->page)) {
6145     diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c
6146     index e67da4e6c324..9a173577a790 100644
6147     --- a/net/ipv4/af_inet.c
6148     +++ b/net/ipv4/af_inet.c
6149     @@ -228,6 +228,8 @@ int inet_listen(struct socket *sock, int backlog)
6150     err = 0;
6151     if (err)
6152     goto out;
6153     +
6154     + tcp_fastopen_init_key_once(true);
6155     }
6156     err = inet_csk_listen_start(sk, backlog);
6157     if (err)
6158     diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
6159     index de6195485b31..32b25cc96fff 100644
6160     --- a/net/ipv4/tcp.c
6161     +++ b/net/ipv4/tcp.c
6162     @@ -2585,10 +2585,13 @@ static int do_tcp_setsockopt(struct sock *sk, int level,
6163    
6164     case TCP_FASTOPEN:
6165     if (val >= 0 && ((1 << sk->sk_state) & (TCPF_CLOSE |
6166     - TCPF_LISTEN)))
6167     + TCPF_LISTEN))) {
6168     + tcp_fastopen_init_key_once(true);
6169     +
6170     err = fastopen_init_queue(sk, val);
6171     - else
6172     + } else {
6173     err = -EINVAL;
6174     + }
6175     break;
6176     case TCP_TIMESTAMP:
6177     if (!tp->repair)
6178     diff --git a/net/ipv4/tcp_fastopen.c b/net/ipv4/tcp_fastopen.c
6179     index c73077280ad4..b01d5bd6d6ca 100644
6180     --- a/net/ipv4/tcp_fastopen.c
6181     +++ b/net/ipv4/tcp_fastopen.c
6182     @@ -78,8 +78,6 @@ static bool __tcp_fastopen_cookie_gen(const void *path,
6183     struct tcp_fastopen_context *ctx;
6184     bool ok = false;
6185    
6186     - tcp_fastopen_init_key_once(true);
6187     -
6188     rcu_read_lock();
6189     ctx = rcu_dereference(tcp_fastopen_ctx);
6190     if (ctx) {
6191     diff --git a/net/netfilter/core.c b/net/netfilter/core.c
6192     index 024a2e25c8a4..d047a6679ff2 100644
6193     --- a/net/netfilter/core.c
6194     +++ b/net/netfilter/core.c
6195     @@ -88,6 +88,7 @@ void nf_unregister_hook(struct nf_hook_ops *reg)
6196     static_key_slow_dec(&nf_hooks_needed[reg->pf][reg->hooknum]);
6197     #endif
6198     synchronize_net();
6199     + nf_queue_nf_hook_drop(reg);
6200     }
6201     EXPORT_SYMBOL(nf_unregister_hook);
6202    
6203     diff --git a/net/netfilter/nf_internals.h b/net/netfilter/nf_internals.h
6204     index 61a3c927e63c..aba1d7dac17c 100644
6205     --- a/net/netfilter/nf_internals.h
6206     +++ b/net/netfilter/nf_internals.h
6207     @@ -24,6 +24,7 @@ int nf_queue(struct sk_buff *skb, struct nf_hook_ops *elem, u_int8_t pf,
6208     unsigned int hook, struct net_device *indev,
6209     struct net_device *outdev, int (*okfn)(struct sk_buff *),
6210     unsigned int queuenum);
6211     +void nf_queue_nf_hook_drop(struct nf_hook_ops *ops);
6212     int __init netfilter_queue_init(void);
6213    
6214     /* nf_log.c */
6215     diff --git a/net/netfilter/nf_queue.c b/net/netfilter/nf_queue.c
6216     index 4c8b68e5fa16..77ee2d4d5046 100644
6217     --- a/net/netfilter/nf_queue.c
6218     +++ b/net/netfilter/nf_queue.c
6219     @@ -95,6 +95,23 @@ bool nf_queue_entry_get_refs(struct nf_queue_entry *entry)
6220     }
6221     EXPORT_SYMBOL_GPL(nf_queue_entry_get_refs);
6222    
6223     +void nf_queue_nf_hook_drop(struct nf_hook_ops *ops)
6224     +{
6225     + const struct nf_queue_handler *qh;
6226     + struct net *net;
6227     +
6228     + rtnl_lock();
6229     + rcu_read_lock();
6230     + qh = rcu_dereference(queue_handler);
6231     + if (qh) {
6232     + for_each_net(net) {
6233     + qh->nf_hook_drop(net, ops);
6234     + }
6235     + }
6236     + rcu_read_unlock();
6237     + rtnl_unlock();
6238     +}
6239     +
6240     /*
6241     * Any packet that leaves via this function must come back
6242     * through nf_reinject().
6243     diff --git a/net/netfilter/nfnetlink_queue_core.c b/net/netfilter/nfnetlink_queue_core.c
6244     index 7c60ccd61a3e..8add272654f6 100644
6245     --- a/net/netfilter/nfnetlink_queue_core.c
6246     +++ b/net/netfilter/nfnetlink_queue_core.c
6247     @@ -815,6 +815,27 @@ static struct notifier_block nfqnl_dev_notifier = {
6248     .notifier_call = nfqnl_rcv_dev_event,
6249     };
6250    
6251     +static int nf_hook_cmp(struct nf_queue_entry *entry, unsigned long ops_ptr)
6252     +{
6253     + return entry->elem == (struct nf_hook_ops *)ops_ptr;
6254     +}
6255     +
6256     +static void nfqnl_nf_hook_drop(struct net *net, struct nf_hook_ops *hook)
6257     +{
6258     + struct nfnl_queue_net *q = nfnl_queue_pernet(net);
6259     + int i;
6260     +
6261     + rcu_read_lock();
6262     + for (i = 0; i < INSTANCE_BUCKETS; i++) {
6263     + struct nfqnl_instance *inst;
6264     + struct hlist_head *head = &q->instance_table[i];
6265     +
6266     + hlist_for_each_entry_rcu(inst, head, hlist)
6267     + nfqnl_flush(inst, nf_hook_cmp, (unsigned long)hook);
6268     + }
6269     + rcu_read_unlock();
6270     +}
6271     +
6272     static int
6273     nfqnl_rcv_nl_event(struct notifier_block *this,
6274     unsigned long event, void *ptr)
6275     @@ -1022,7 +1043,8 @@ static const struct nla_policy nfqa_cfg_policy[NFQA_CFG_MAX+1] = {
6276     };
6277    
6278     static const struct nf_queue_handler nfqh = {
6279     - .outfn = &nfqnl_enqueue_packet,
6280     + .outfn = &nfqnl_enqueue_packet,
6281     + .nf_hook_drop = &nfqnl_nf_hook_drop,
6282     };
6283    
6284     static int
6285     diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
6286     index c0a418766f9c..c82b2e37e652 100644
6287     --- a/net/netlink/af_netlink.c
6288     +++ b/net/netlink/af_netlink.c
6289     @@ -1003,11 +1003,8 @@ static struct sock *__netlink_lookup(struct netlink_table *table, u32 portid,
6290     .net = net,
6291     .portid = portid,
6292     };
6293     - u32 hash;
6294    
6295     - hash = rhashtable_hashfn(&table->hash, &portid, sizeof(portid));
6296     -
6297     - return rhashtable_lookup_compare(&table->hash, hash,
6298     + return rhashtable_lookup_compare(&table->hash, &portid,
6299     &netlink_compare, &arg);
6300     }
6301    
6302     diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
6303     index 07c04a841ba0..5dcfe05ea232 100644
6304     --- a/net/packet/af_packet.c
6305     +++ b/net/packet/af_packet.c
6306     @@ -1255,16 +1255,6 @@ static void packet_sock_destruct(struct sock *sk)
6307     sk_refcnt_debug_dec(sk);
6308     }
6309    
6310     -static int fanout_rr_next(struct packet_fanout *f, unsigned int num)
6311     -{
6312     - int x = atomic_read(&f->rr_cur) + 1;
6313     -
6314     - if (x >= num)
6315     - x = 0;
6316     -
6317     - return x;
6318     -}
6319     -
6320     static unsigned int fanout_demux_hash(struct packet_fanout *f,
6321     struct sk_buff *skb,
6322     unsigned int num)
6323     @@ -1276,13 +1266,9 @@ static unsigned int fanout_demux_lb(struct packet_fanout *f,
6324     struct sk_buff *skb,
6325     unsigned int num)
6326     {
6327     - int cur, old;
6328     + unsigned int val = atomic_inc_return(&f->rr_cur);
6329    
6330     - cur = atomic_read(&f->rr_cur);
6331     - while ((old = atomic_cmpxchg(&f->rr_cur, cur,
6332     - fanout_rr_next(f, num))) != cur)
6333     - cur = old;
6334     - return cur;
6335     + return val % num;
6336     }
6337    
6338     static unsigned int fanout_demux_cpu(struct packet_fanout *f,
6339     @@ -1336,7 +1322,7 @@ static int packet_rcv_fanout(struct sk_buff *skb, struct net_device *dev,
6340     struct packet_type *pt, struct net_device *orig_dev)
6341     {
6342     struct packet_fanout *f = pt->af_packet_priv;
6343     - unsigned int num = f->num_members;
6344     + unsigned int num = READ_ONCE(f->num_members);
6345     struct packet_sock *po;
6346     unsigned int idx;
6347    
6348     diff --git a/net/rose/af_rose.c b/net/rose/af_rose.c
6349     index a85c1a086ae4..67984fb42f14 100644
6350     --- a/net/rose/af_rose.c
6351     +++ b/net/rose/af_rose.c
6352     @@ -192,7 +192,8 @@ static void rose_kill_by_device(struct net_device *dev)
6353    
6354     if (rose->device == dev) {
6355     rose_disconnect(s, ENETUNREACH, ROSE_OUT_OF_ORDER, 0);
6356     - rose->neighbour->use--;
6357     + if (rose->neighbour)
6358     + rose->neighbour->use--;
6359     rose->device = NULL;
6360     }
6361     }
6362     diff --git a/net/sctp/output.c b/net/sctp/output.c
6363     index fc5e45b8a832..abe7c2db2412 100644
6364     --- a/net/sctp/output.c
6365     +++ b/net/sctp/output.c
6366     @@ -599,7 +599,9 @@ out:
6367     return err;
6368     no_route:
6369     kfree_skb(nskb);
6370     - IP_INC_STATS(sock_net(asoc->base.sk), IPSTATS_MIB_OUTNOROUTES);
6371     +
6372     + if (asoc)
6373     + IP_INC_STATS(sock_net(asoc->base.sk), IPSTATS_MIB_OUTNOROUTES);
6374    
6375     /* FIXME: Returning the 'err' will effect all the associations
6376     * associated with a socket, although only one of the paths of the
6377     diff --git a/net/sctp/socket.c b/net/sctp/socket.c
6378     index 634a2abb5f3a..99e640c46ab2 100644
6379     --- a/net/sctp/socket.c
6380     +++ b/net/sctp/socket.c
6381     @@ -1533,8 +1533,10 @@ static void sctp_close(struct sock *sk, long timeout)
6382    
6383     /* Supposedly, no process has access to the socket, but
6384     * the net layers still may.
6385     + * Also, sctp_destroy_sock() needs to be called with addr_wq_lock
6386     + * held and that should be grabbed before socket lock.
6387     */
6388     - local_bh_disable();
6389     + spin_lock_bh(&net->sctp.addr_wq_lock);
6390     bh_lock_sock(sk);
6391    
6392     /* Hold the sock, since sk_common_release() will put sock_put()
6393     @@ -1544,7 +1546,7 @@ static void sctp_close(struct sock *sk, long timeout)
6394     sk_common_release(sk);
6395    
6396     bh_unlock_sock(sk);
6397     - local_bh_enable();
6398     + spin_unlock_bh(&net->sctp.addr_wq_lock);
6399    
6400     sock_put(sk);
6401    
6402     @@ -3581,6 +3583,7 @@ static int sctp_setsockopt_auto_asconf(struct sock *sk, char __user *optval,
6403     if ((val && sp->do_auto_asconf) || (!val && !sp->do_auto_asconf))
6404     return 0;
6405    
6406     + spin_lock_bh(&sock_net(sk)->sctp.addr_wq_lock);
6407     if (val == 0 && sp->do_auto_asconf) {
6408     list_del(&sp->auto_asconf_list);
6409     sp->do_auto_asconf = 0;
6410     @@ -3589,6 +3592,7 @@ static int sctp_setsockopt_auto_asconf(struct sock *sk, char __user *optval,
6411     &sock_net(sk)->sctp.auto_asconf_splist);
6412     sp->do_auto_asconf = 1;
6413     }
6414     + spin_unlock_bh(&sock_net(sk)->sctp.addr_wq_lock);
6415     return 0;
6416     }
6417    
6418     @@ -4122,18 +4126,28 @@ static int sctp_init_sock(struct sock *sk)
6419     local_bh_disable();
6420     percpu_counter_inc(&sctp_sockets_allocated);
6421     sock_prot_inuse_add(net, sk->sk_prot, 1);
6422     +
6423     + /* Nothing can fail after this block, otherwise
6424     + * sctp_destroy_sock() will be called without addr_wq_lock held
6425     + */
6426     if (net->sctp.default_auto_asconf) {
6427     + spin_lock(&sock_net(sk)->sctp.addr_wq_lock);
6428     list_add_tail(&sp->auto_asconf_list,
6429     &net->sctp.auto_asconf_splist);
6430     sp->do_auto_asconf = 1;
6431     - } else
6432     + spin_unlock(&sock_net(sk)->sctp.addr_wq_lock);
6433     + } else {
6434     sp->do_auto_asconf = 0;
6435     + }
6436     +
6437     local_bh_enable();
6438    
6439     return 0;
6440     }
6441    
6442     -/* Cleanup any SCTP per socket resources. */
6443     +/* Cleanup any SCTP per socket resources. Must be called with
6444     + * sock_net(sk)->sctp.addr_wq_lock held if sp->do_auto_asconf is true
6445     + */
6446     static void sctp_destroy_sock(struct sock *sk)
6447     {
6448     struct sctp_sock *sp;
6449     @@ -7201,6 +7215,19 @@ void sctp_copy_sock(struct sock *newsk, struct sock *sk,
6450     newinet->mc_list = NULL;
6451     }
6452    
6453     +static inline void sctp_copy_descendant(struct sock *sk_to,
6454     + const struct sock *sk_from)
6455     +{
6456     + int ancestor_size = sizeof(struct inet_sock) +
6457     + sizeof(struct sctp_sock) -
6458     + offsetof(struct sctp_sock, auto_asconf_list);
6459     +
6460     + if (sk_from->sk_family == PF_INET6)
6461     + ancestor_size += sizeof(struct ipv6_pinfo);
6462     +
6463     + __inet_sk_copy_descendant(sk_to, sk_from, ancestor_size);
6464     +}
6465     +
6466     /* Populate the fields of the newsk from the oldsk and migrate the assoc
6467     * and its messages to the newsk.
6468     */
6469     @@ -7215,7 +7242,6 @@ static void sctp_sock_migrate(struct sock *oldsk, struct sock *newsk,
6470     struct sk_buff *skb, *tmp;
6471     struct sctp_ulpevent *event;
6472     struct sctp_bind_hashbucket *head;
6473     - struct list_head tmplist;
6474    
6475     /* Migrate socket buffer sizes and all the socket level options to the
6476     * new socket.
6477     @@ -7223,12 +7249,7 @@ static void sctp_sock_migrate(struct sock *oldsk, struct sock *newsk,
6478     newsk->sk_sndbuf = oldsk->sk_sndbuf;
6479     newsk->sk_rcvbuf = oldsk->sk_rcvbuf;
6480     /* Brute force copy old sctp opt. */
6481     - if (oldsp->do_auto_asconf) {
6482     - memcpy(&tmplist, &newsp->auto_asconf_list, sizeof(tmplist));
6483     - inet_sk_copy_descendant(newsk, oldsk);
6484     - memcpy(&newsp->auto_asconf_list, &tmplist, sizeof(tmplist));
6485     - } else
6486     - inet_sk_copy_descendant(newsk, oldsk);
6487     + sctp_copy_descendant(newsk, oldsk);
6488    
6489     /* Restore the ep value that was overwritten with the above structure
6490     * copy.
6491     diff --git a/net/socket.c b/net/socket.c
6492     index cf9ebf10c841..02fc7c8ea9ed 100644
6493     --- a/net/socket.c
6494     +++ b/net/socket.c
6495     @@ -2017,14 +2017,12 @@ static int ___sys_sendmsg(struct socket *sock, struct msghdr __user *msg,
6496     int err, ctl_len, total_len;
6497    
6498     err = -EFAULT;
6499     - if (MSG_CMSG_COMPAT & flags) {
6500     - if (get_compat_msghdr(msg_sys, msg_compat))
6501     - return -EFAULT;
6502     - } else {
6503     + if (MSG_CMSG_COMPAT & flags)
6504     + err = get_compat_msghdr(msg_sys, msg_compat);
6505     + else
6506     err = copy_msghdr_from_user(msg_sys, msg);
6507     - if (err)
6508     - return err;
6509     - }
6510     + if (err)
6511     + return err;
6512    
6513     if (msg_sys->msg_iovlen > UIO_FASTIOV) {
6514     err = -EMSGSIZE;
6515     @@ -2229,14 +2227,12 @@ static int ___sys_recvmsg(struct socket *sock, struct msghdr __user *msg,
6516     struct sockaddr __user *uaddr;
6517     int __user *uaddr_len;
6518    
6519     - if (MSG_CMSG_COMPAT & flags) {
6520     - if (get_compat_msghdr(msg_sys, msg_compat))
6521     - return -EFAULT;
6522     - } else {
6523     + if (MSG_CMSG_COMPAT & flags)
6524     + err = get_compat_msghdr(msg_sys, msg_compat);
6525     + else
6526     err = copy_msghdr_from_user(msg_sys, msg);
6527     - if (err)
6528     - return err;
6529     - }
6530     + if (err)
6531     + return err;
6532    
6533     if (msg_sys->msg_iovlen > UIO_FASTIOV) {
6534     err = -EMSGSIZE;
6535     diff --git a/net/sunrpc/backchannel_rqst.c b/net/sunrpc/backchannel_rqst.c
6536     index 1bb4d26fbd6b..ca9ff71134f9 100644
6537     --- a/net/sunrpc/backchannel_rqst.c
6538     +++ b/net/sunrpc/backchannel_rqst.c
6539     @@ -60,7 +60,7 @@ static void xprt_free_allocation(struct rpc_rqst *req)
6540    
6541     dprintk("RPC: free allocations for req= %p\n", req);
6542     WARN_ON_ONCE(test_bit(RPC_BC_PA_IN_USE, &req->rq_bc_pa_state));
6543     - xbufp = &req->rq_private_buf;
6544     + xbufp = &req->rq_rcv_buf;
6545     free_page((unsigned long)xbufp->head[0].iov_base);
6546     xbufp = &req->rq_snd_buf;
6547     free_page((unsigned long)xbufp->head[0].iov_base);
6548     diff --git a/net/wireless/wext-compat.c b/net/wireless/wext-compat.c
6549     index 0f47948c572f..d2c77d5707b2 100644
6550     --- a/net/wireless/wext-compat.c
6551     +++ b/net/wireless/wext-compat.c
6552     @@ -1333,6 +1333,8 @@ static struct iw_statistics *cfg80211_wireless_stats(struct net_device *dev)
6553     memcpy(bssid, wdev->current_bss->pub.bssid, ETH_ALEN);
6554     wdev_unlock(wdev);
6555    
6556     + memset(&sinfo, 0, sizeof(sinfo));
6557     +
6558     if (rdev_get_station(rdev, dev, bssid, &sinfo))
6559     return NULL;
6560    
6561     diff --git a/security/integrity/ima/ima.h b/security/integrity/ima/ima.h
6562     index 8ee997dff139..fc56d4dfa954 100644
6563     --- a/security/integrity/ima/ima.h
6564     +++ b/security/integrity/ima/ima.h
6565     @@ -106,7 +106,7 @@ void ima_add_violation(struct file *file, const unsigned char *filename,
6566     const char *op, const char *cause);
6567     int ima_init_crypto(void);
6568     void ima_putc(struct seq_file *m, void *data, int datalen);
6569     -void ima_print_digest(struct seq_file *m, u8 *digest, int size);
6570     +void ima_print_digest(struct seq_file *m, u8 *digest, u32 size);
6571     struct ima_template_desc *ima_template_desc_current(void);
6572     int ima_init_template(void);
6573    
6574     diff --git a/security/integrity/ima/ima_fs.c b/security/integrity/ima/ima_fs.c
6575     index da92fcc08d15..d30afe461070 100644
6576     --- a/security/integrity/ima/ima_fs.c
6577     +++ b/security/integrity/ima/ima_fs.c
6578     @@ -186,9 +186,9 @@ static const struct file_operations ima_measurements_ops = {
6579     .release = seq_release,
6580     };
6581    
6582     -void ima_print_digest(struct seq_file *m, u8 *digest, int size)
6583     +void ima_print_digest(struct seq_file *m, u8 *digest, u32 size)
6584     {
6585     - int i;
6586     + u32 i;
6587    
6588     for (i = 0; i < size; i++)
6589     seq_printf(m, "%02x", *(digest + i));
6590     diff --git a/security/integrity/ima/ima_template_lib.c b/security/integrity/ima/ima_template_lib.c
6591     index 1506f0248572..1eb173ddefd6 100644
6592     --- a/security/integrity/ima/ima_template_lib.c
6593     +++ b/security/integrity/ima/ima_template_lib.c
6594     @@ -70,7 +70,8 @@ static void ima_show_template_data_ascii(struct seq_file *m,
6595     enum data_formats datafmt,
6596     struct ima_field_data *field_data)
6597     {
6598     - u8 *buf_ptr = field_data->data, buflen = field_data->len;
6599     + u8 *buf_ptr = field_data->data;
6600     + u32 buflen = field_data->len;
6601    
6602     switch (datafmt) {
6603     case DATA_FMT_DIGEST_WITH_ALGO:
6604     diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
6605     index e708368d208f..6bd95f95e48f 100644
6606     --- a/sound/pci/hda/hda_codec.c
6607     +++ b/sound/pci/hda/hda_codec.c
6608     @@ -2140,6 +2140,16 @@ static void put_vol_mute(struct hda_codec *codec, unsigned int amp_caps,
6609     snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_AMP_GAIN_MUTE, parm);
6610     }
6611    
6612     +/* meta hook to call each driver's vmaster hook */
6613     +static void vmaster_hook(void *private_data, int enabled)
6614     +{
6615     + struct hda_vmaster_mute_hook *hook = private_data;
6616     +
6617     + if (hook->mute_mode != HDA_VMUTE_FOLLOW_MASTER)
6618     + enabled = hook->mute_mode;
6619     + hook->hook(hook->codec, enabled);
6620     +}
6621     +
6622     /**
6623     * snd_hda_codec_amp_read - Read AMP value
6624     * @codec: HD-audio codec
6625     @@ -2985,9 +2995,9 @@ int snd_hda_add_vmaster_hook(struct hda_codec *codec,
6626    
6627     if (!hook->hook || !hook->sw_kctl)
6628     return 0;
6629     - snd_ctl_add_vmaster_hook(hook->sw_kctl, hook->hook, codec);
6630     hook->codec = codec;
6631     hook->mute_mode = HDA_VMUTE_FOLLOW_MASTER;
6632     + snd_ctl_add_vmaster_hook(hook->sw_kctl, vmaster_hook, hook);
6633     if (!expose_enum_ctl)
6634     return 0;
6635     kctl = snd_ctl_new1(&vmaster_mute_mode, hook);
6636     @@ -3010,14 +3020,7 @@ void snd_hda_sync_vmaster_hook(struct hda_vmaster_mute_hook *hook)
6637     */
6638     if (hook->codec->bus->shutdown)
6639     return;
6640     - switch (hook->mute_mode) {
6641     - case HDA_VMUTE_FOLLOW_MASTER:
6642     - snd_ctl_sync_vmaster_hook(hook->sw_kctl);
6643     - break;
6644     - default:
6645     - hook->hook(hook->codec, hook->mute_mode);
6646     - break;
6647     - }
6648     + snd_ctl_sync_vmaster_hook(hook->sw_kctl);
6649     }
6650     EXPORT_SYMBOL_GPL(snd_hda_sync_vmaster_hook);
6651    
6652     diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
6653     index ddfc8a891db4..58f82733c893 100644
6654     --- a/sound/pci/hda/hda_intel.c
6655     +++ b/sound/pci/hda/hda_intel.c
6656     @@ -2091,6 +2091,8 @@ static const struct pci_device_id azx_ids[] = {
6657     { PCI_DEVICE(0x1022, 0x780d),
6658     .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_SB },
6659     /* ATI HDMI */
6660     + { PCI_DEVICE(0x1002, 0x1308),
6661     + .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS },
6662     { PCI_DEVICE(0x1002, 0x793b),
6663     .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
6664     { PCI_DEVICE(0x1002, 0x7919),
6665     @@ -2099,6 +2101,8 @@ static const struct pci_device_id azx_ids[] = {
6666     .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
6667     { PCI_DEVICE(0x1002, 0x970f),
6668     .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
6669     + { PCI_DEVICE(0x1002, 0x9840),
6670     + .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS },
6671     { PCI_DEVICE(0x1002, 0xaa00),
6672     .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
6673     { PCI_DEVICE(0x1002, 0xaa08),
6674     diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c
6675     index 1b1e8c68edd6..69c9d377e517 100644
6676     --- a/sound/pci/hda/patch_conexant.c
6677     +++ b/sound/pci/hda/patch_conexant.c
6678     @@ -973,6 +973,14 @@ static const struct hda_codec_preset snd_hda_preset_conexant[] = {
6679     .patch = patch_conexant_auto },
6680     { .id = 0x14f150b9, .name = "CX20665",
6681     .patch = patch_conexant_auto },
6682     + { .id = 0x14f150f1, .name = "CX20721",
6683     + .patch = patch_conexant_auto },
6684     + { .id = 0x14f150f2, .name = "CX20722",
6685     + .patch = patch_conexant_auto },
6686     + { .id = 0x14f150f3, .name = "CX20723",
6687     + .patch = patch_conexant_auto },
6688     + { .id = 0x14f150f4, .name = "CX20724",
6689     + .patch = patch_conexant_auto },
6690     { .id = 0x14f1510f, .name = "CX20751/2",
6691     .patch = patch_conexant_auto },
6692     { .id = 0x14f15110, .name = "CX20751/2",
6693     @@ -1007,6 +1015,10 @@ MODULE_ALIAS("snd-hda-codec-id:14f150ab");
6694     MODULE_ALIAS("snd-hda-codec-id:14f150ac");
6695     MODULE_ALIAS("snd-hda-codec-id:14f150b8");
6696     MODULE_ALIAS("snd-hda-codec-id:14f150b9");
6697     +MODULE_ALIAS("snd-hda-codec-id:14f150f1");
6698     +MODULE_ALIAS("snd-hda-codec-id:14f150f2");
6699     +MODULE_ALIAS("snd-hda-codec-id:14f150f3");
6700     +MODULE_ALIAS("snd-hda-codec-id:14f150f4");
6701     MODULE_ALIAS("snd-hda-codec-id:14f1510f");
6702     MODULE_ALIAS("snd-hda-codec-id:14f15110");
6703     MODULE_ALIAS("snd-hda-codec-id:14f15111");
6704     diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
6705     index fca6d06f4bec..24cec17db1a4 100644
6706     --- a/sound/pci/hda/patch_realtek.c
6707     +++ b/sound/pci/hda/patch_realtek.c
6708     @@ -2165,6 +2165,7 @@ static const struct hda_fixup alc882_fixups[] = {
6709     static const struct snd_pci_quirk alc882_fixup_tbl[] = {
6710     SND_PCI_QUIRK(0x1025, 0x006c, "Acer Aspire 9810", ALC883_FIXUP_ACER_EAPD),
6711     SND_PCI_QUIRK(0x1025, 0x0090, "Acer Aspire", ALC883_FIXUP_ACER_EAPD),
6712     + SND_PCI_QUIRK(0x1025, 0x0107, "Acer Aspire", ALC883_FIXUP_ACER_EAPD),
6713     SND_PCI_QUIRK(0x1025, 0x010a, "Acer Ferrari 5000", ALC883_FIXUP_ACER_EAPD),
6714     SND_PCI_QUIRK(0x1025, 0x0110, "Acer Aspire", ALC883_FIXUP_ACER_EAPD),
6715     SND_PCI_QUIRK(0x1025, 0x0112, "Acer Aspire 9303", ALC883_FIXUP_ACER_EAPD),
6716     @@ -4375,6 +4376,7 @@ enum {
6717     ALC269_FIXUP_LIFEBOOK,
6718     ALC269_FIXUP_LIFEBOOK_EXTMIC,
6719     ALC269_FIXUP_LIFEBOOK_HP_PIN,
6720     + ALC269_FIXUP_LIFEBOOK_NO_HP_TO_LINEOUT,
6721     ALC269_FIXUP_AMIC,
6722     ALC269_FIXUP_DMIC,
6723     ALC269VB_FIXUP_AMIC,
6724     @@ -4395,6 +4397,7 @@ enum {
6725     ALC269_FIXUP_DELL3_MIC_NO_PRESENCE,
6726     ALC269_FIXUP_HEADSET_MODE,
6727     ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC,
6728     + ALC269_FIXUP_ASPIRE_HEADSET_MIC,
6729     ALC269_FIXUP_ASUS_X101_FUNC,
6730     ALC269_FIXUP_ASUS_X101_VERB,
6731     ALC269_FIXUP_ASUS_X101,
6732     @@ -4422,6 +4425,7 @@ enum {
6733     ALC255_FIXUP_HEADSET_MODE_NO_HP_MIC,
6734     ALC293_FIXUP_DELL1_MIC_NO_PRESENCE,
6735     ALC292_FIXUP_TPT440_DOCK,
6736     + ALC292_FIXUP_TPT440_DOCK2,
6737     ALC283_FIXUP_BXBT2807_MIC,
6738     ALC255_FIXUP_DELL_WMI_MIC_MUTE_LED,
6739     ALC282_FIXUP_ASPIRE_V5_PINS,
6740     @@ -4532,6 +4536,10 @@ static const struct hda_fixup alc269_fixups[] = {
6741     { }
6742     },
6743     },
6744     + [ALC269_FIXUP_LIFEBOOK_NO_HP_TO_LINEOUT] = {
6745     + .type = HDA_FIXUP_FUNC,
6746     + .v.func = alc269_fixup_pincfg_no_hp_to_lineout,
6747     + },
6748     [ALC269_FIXUP_AMIC] = {
6749     .type = HDA_FIXUP_PINS,
6750     .v.pins = (const struct hda_pintbl[]) {
6751     @@ -4660,6 +4668,15 @@ static const struct hda_fixup alc269_fixups[] = {
6752     .type = HDA_FIXUP_FUNC,
6753     .v.func = alc_fixup_headset_mode_no_hp_mic,
6754     },
6755     + [ALC269_FIXUP_ASPIRE_HEADSET_MIC] = {
6756     + .type = HDA_FIXUP_PINS,
6757     + .v.pins = (const struct hda_pintbl[]) {
6758     + { 0x19, 0x01a1913c }, /* headset mic w/o jack detect */
6759     + { }
6760     + },
6761     + .chained = true,
6762     + .chain_id = ALC269_FIXUP_HEADSET_MODE,
6763     + },
6764     [ALC286_FIXUP_SONY_MIC_NO_PRESENCE] = {
6765     .type = HDA_FIXUP_PINS,
6766     .v.pins = (const struct hda_pintbl[]) {
6767     @@ -4862,6 +4879,12 @@ static const struct hda_fixup alc269_fixups[] = {
6768     .chain_id = ALC269_FIXUP_HEADSET_MODE
6769     },
6770     [ALC292_FIXUP_TPT440_DOCK] = {
6771     + .type = HDA_FIXUP_FUNC,
6772     + .v.func = alc269_fixup_pincfg_no_hp_to_lineout,
6773     + .chained = true,
6774     + .chain_id = ALC292_FIXUP_TPT440_DOCK2
6775     + },
6776     + [ALC292_FIXUP_TPT440_DOCK2] = {
6777     .type = HDA_FIXUP_PINS,
6778     .v.pins = (const struct hda_pintbl[]) {
6779     { 0x16, 0x21211010 }, /* dock headphone */
6780     @@ -4909,6 +4932,8 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
6781     SND_PCI_QUIRK(0x1025, 0x029b, "Acer 1810TZ", ALC269_FIXUP_INV_DMIC),
6782     SND_PCI_QUIRK(0x1025, 0x0349, "Acer AOD260", ALC269_FIXUP_INV_DMIC),
6783     SND_PCI_QUIRK(0x1025, 0x047c, "Acer AC700", ALC269_FIXUP_ACER_AC700),
6784     + SND_PCI_QUIRK(0x1025, 0x072d, "Acer Aspire V5-571G", ALC269_FIXUP_ASPIRE_HEADSET_MIC),
6785     + SND_PCI_QUIRK(0x1025, 0x080d, "Acer Aspire V5-122P", ALC269_FIXUP_ASPIRE_HEADSET_MIC),
6786     SND_PCI_QUIRK(0x1025, 0x0740, "Acer AO725", ALC271_FIXUP_HP_GATE_MIC_JACK),
6787     SND_PCI_QUIRK(0x1025, 0x0742, "Acer AO756", ALC271_FIXUP_HP_GATE_MIC_JACK),
6788     SND_PCI_QUIRK(0x1025, 0x0775, "Acer Aspire E1-572", ALC271_FIXUP_HP_GATE_MIC_JACK_E1_572),
6789     @@ -5002,6 +5027,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
6790     SND_PCI_QUIRK(0x104d, 0x9084, "Sony VAIO", ALC275_FIXUP_SONY_HWEQ),
6791     SND_PCI_QUIRK(0x104d, 0x9099, "Sony VAIO S13", ALC275_FIXUP_SONY_DISABLE_AAMIX),
6792     SND_PCI_QUIRK(0x10cf, 0x1475, "Lifebook", ALC269_FIXUP_LIFEBOOK),
6793     + SND_PCI_QUIRK(0x10cf, 0x159f, "Lifebook E780", ALC269_FIXUP_LIFEBOOK_NO_HP_TO_LINEOUT),
6794     SND_PCI_QUIRK(0x10cf, 0x15dc, "Lifebook T731", ALC269_FIXUP_LIFEBOOK_HP_PIN),
6795     SND_PCI_QUIRK(0x10cf, 0x1757, "Lifebook E752", ALC269_FIXUP_LIFEBOOK_HP_PIN),
6796     SND_PCI_QUIRK(0x10cf, 0x1845, "Lifebook U904", ALC269_FIXUP_LIFEBOOK_EXTMIC),
6797     diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
6798     index 87eff3173ce9..60b3100a2120 100644
6799     --- a/sound/pci/hda/patch_sigmatel.c
6800     +++ b/sound/pci/hda/patch_sigmatel.c
6801     @@ -100,6 +100,7 @@ enum {
6802     STAC_HP_ENVY_BASS,
6803     STAC_HP_BNB13_EQ,
6804     STAC_HP_ENVY_TS_BASS,
6805     + STAC_HP_ENVY_TS_DAC_BIND,
6806     STAC_92HD83XXX_GPIO10_EAPD,
6807     STAC_92HD83XXX_MODELS
6808     };
6809     @@ -2170,6 +2171,22 @@ static void stac92hd83xxx_fixup_gpio10_eapd(struct hda_codec *codec,
6810     spec->eapd_switch = 0;
6811     }
6812    
6813     +static void hp_envy_ts_fixup_dac_bind(struct hda_codec *codec,
6814     + const struct hda_fixup *fix,
6815     + int action)
6816     +{
6817     + struct sigmatel_spec *spec = codec->spec;
6818     + static hda_nid_t preferred_pairs[] = {
6819     + 0xd, 0x13,
6820     + 0
6821     + };
6822     +
6823     + if (action != HDA_FIXUP_ACT_PRE_PROBE)
6824     + return;
6825     +
6826     + spec->gen.preferred_dacs = preferred_pairs;
6827     +}
6828     +
6829     static const struct hda_verb hp_bnb13_eq_verbs[] = {
6830     /* 44.1KHz base */
6831     { 0x22, 0x7A6, 0x3E },
6832     @@ -2685,6 +2702,12 @@ static const struct hda_fixup stac92hd83xxx_fixups[] = {
6833     {}
6834     },
6835     },
6836     + [STAC_HP_ENVY_TS_DAC_BIND] = {
6837     + .type = HDA_FIXUP_FUNC,
6838     + .v.func = hp_envy_ts_fixup_dac_bind,
6839     + .chained = true,
6840     + .chain_id = STAC_HP_ENVY_TS_BASS,
6841     + },
6842     [STAC_92HD83XXX_GPIO10_EAPD] = {
6843     .type = HDA_FIXUP_FUNC,
6844     .v.func = stac92hd83xxx_fixup_gpio10_eapd,
6845     @@ -2763,6 +2786,8 @@ static const struct snd_pci_quirk stac92hd83xxx_fixup_tbl[] = {
6846     "HP bNB13", STAC_HP_BNB13_EQ),
6847     SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x190e,
6848     "HP ENVY TS", STAC_HP_ENVY_TS_BASS),
6849     + SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x1967,
6850     + "HP ENVY TS", STAC_HP_ENVY_TS_DAC_BIND),
6851     SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x1940,
6852     "HP bNB13", STAC_HP_BNB13_EQ),
6853     SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x1941,
6854     diff --git a/sound/soc/codecs/tas2552.c b/sound/soc/codecs/tas2552.c
6855     index f039dc825971..6dbfc4703a3a 100644
6856     --- a/sound/soc/codecs/tas2552.c
6857     +++ b/sound/soc/codecs/tas2552.c
6858     @@ -120,6 +120,9 @@ static void tas2552_sw_shutdown(struct tas2552_data *tas_data, int sw_shutdown)
6859     {
6860     u8 cfg1_reg;
6861    
6862     + if (!tas_data->codec)
6863     + return;
6864     +
6865     if (sw_shutdown)
6866     cfg1_reg = 0;
6867     else
6868     @@ -335,7 +338,6 @@ static DECLARE_TLV_DB_SCALE(dac_tlv, -7, 100, 24);
6869     static const struct snd_kcontrol_new tas2552_snd_controls[] = {
6870     SOC_SINGLE_TLV("Speaker Driver Playback Volume",
6871     TAS2552_PGA_GAIN, 0, 0x1f, 1, dac_tlv),
6872     - SOC_DAPM_SINGLE("Playback AMP", SND_SOC_NOPM, 0, 1, 0),
6873     };
6874    
6875     static const struct reg_default tas2552_init_regs[] = {
6876     diff --git a/sound/soc/codecs/wm5102.c b/sound/soc/codecs/wm5102.c
6877     index f60234962527..8fafff5fad4b 100644
6878     --- a/sound/soc/codecs/wm5102.c
6879     +++ b/sound/soc/codecs/wm5102.c
6880     @@ -41,7 +41,7 @@ struct wm5102_priv {
6881     static DECLARE_TLV_DB_SCALE(ana_tlv, 0, 100, 0);
6882     static DECLARE_TLV_DB_SCALE(eq_tlv, -1200, 100, 0);
6883     static DECLARE_TLV_DB_SCALE(digital_tlv, -6400, 50, 0);
6884     -static DECLARE_TLV_DB_SCALE(noise_tlv, 0, 600, 0);
6885     +static DECLARE_TLV_DB_SCALE(noise_tlv, -13200, 600, 0);
6886     static DECLARE_TLV_DB_SCALE(ng_tlv, -10200, 600, 0);
6887    
6888     static const struct wm_adsp_region wm5102_dsp1_regions[] = {
6889     diff --git a/sound/soc/codecs/wm5110.c b/sound/soc/codecs/wm5110.c
6890     index 2f2ec26d831c..4cab08b43a53 100644
6891     --- a/sound/soc/codecs/wm5110.c
6892     +++ b/sound/soc/codecs/wm5110.c
6893     @@ -167,7 +167,7 @@ static int wm5110_sysclk_ev(struct snd_soc_dapm_widget *w,
6894     static DECLARE_TLV_DB_SCALE(ana_tlv, 0, 100, 0);
6895     static DECLARE_TLV_DB_SCALE(eq_tlv, -1200, 100, 0);
6896     static DECLARE_TLV_DB_SCALE(digital_tlv, -6400, 50, 0);
6897     -static DECLARE_TLV_DB_SCALE(noise_tlv, 0, 600, 0);
6898     +static DECLARE_TLV_DB_SCALE(noise_tlv, -13200, 600, 0);
6899     static DECLARE_TLV_DB_SCALE(ng_tlv, -10200, 600, 0);
6900    
6901     #define WM5110_NG_SRC(name, base) \
6902     diff --git a/sound/soc/codecs/wm8737.c b/sound/soc/codecs/wm8737.c
6903     index 744a422ecb05..4be874c9dc91 100644
6904     --- a/sound/soc/codecs/wm8737.c
6905     +++ b/sound/soc/codecs/wm8737.c
6906     @@ -494,7 +494,8 @@ static int wm8737_set_bias_level(struct snd_soc_codec *codec,
6907    
6908     /* Fast VMID ramp at 2*2.5k */
6909     snd_soc_update_bits(codec, WM8737_MISC_BIAS_CONTROL,
6910     - WM8737_VMIDSEL_MASK, 0x4);
6911     + WM8737_VMIDSEL_MASK,
6912     + 2 << WM8737_VMIDSEL_SHIFT);
6913    
6914     /* Bring VMID up */
6915     snd_soc_update_bits(codec, WM8737_POWER_MANAGEMENT,
6916     @@ -508,7 +509,8 @@ static int wm8737_set_bias_level(struct snd_soc_codec *codec,
6917    
6918     /* VMID at 2*300k */
6919     snd_soc_update_bits(codec, WM8737_MISC_BIAS_CONTROL,
6920     - WM8737_VMIDSEL_MASK, 2);
6921     + WM8737_VMIDSEL_MASK,
6922     + 1 << WM8737_VMIDSEL_SHIFT);
6923    
6924     break;
6925    
6926     diff --git a/sound/soc/codecs/wm8903.h b/sound/soc/codecs/wm8903.h
6927     index db949311c0f2..0bb4a647755d 100644
6928     --- a/sound/soc/codecs/wm8903.h
6929     +++ b/sound/soc/codecs/wm8903.h
6930     @@ -172,7 +172,7 @@ extern int wm8903_mic_detect(struct snd_soc_codec *codec,
6931     #define WM8903_VMID_BUF_ENA_WIDTH 1 /* VMID_BUF_ENA */
6932    
6933     #define WM8903_VMID_RES_50K 2
6934     -#define WM8903_VMID_RES_250K 3
6935     +#define WM8903_VMID_RES_250K 4
6936     #define WM8903_VMID_RES_5K 6
6937    
6938     /*
6939     diff --git a/sound/soc/codecs/wm8955.c b/sound/soc/codecs/wm8955.c
6940     index 7d0b01bcab4b..d48ac712f624 100644
6941     --- a/sound/soc/codecs/wm8955.c
6942     +++ b/sound/soc/codecs/wm8955.c
6943     @@ -298,7 +298,7 @@ static int wm8955_configure_clocking(struct snd_soc_codec *codec)
6944     snd_soc_update_bits(codec, WM8955_PLL_CONTROL_2,
6945     WM8955_K_17_9_MASK,
6946     (pll.k >> 9) & WM8955_K_17_9_MASK);
6947     - snd_soc_update_bits(codec, WM8955_PLL_CONTROL_2,
6948     + snd_soc_update_bits(codec, WM8955_PLL_CONTROL_3,
6949     WM8955_K_8_0_MASK,
6950     pll.k & WM8955_K_8_0_MASK);
6951     if (pll.k)
6952     diff --git a/sound/soc/codecs/wm8960.c b/sound/soc/codecs/wm8960.c
6953     index 34a18a910113..ab7fa7c9fa84 100644
6954     --- a/sound/soc/codecs/wm8960.c
6955     +++ b/sound/soc/codecs/wm8960.c
6956     @@ -242,7 +242,7 @@ SOC_SINGLE("PCM Playback -6dB Switch", WM8960_DACCTL1, 7, 1, 0),
6957     SOC_ENUM("ADC Polarity", wm8960_enum[0]),
6958     SOC_SINGLE("ADC High Pass Filter Switch", WM8960_DACCTL1, 0, 1, 0),
6959    
6960     -SOC_ENUM("DAC Polarity", wm8960_enum[2]),
6961     +SOC_ENUM("DAC Polarity", wm8960_enum[1]),
6962     SOC_SINGLE_BOOL_EXT("DAC Deemphasis Switch", 0,
6963     wm8960_get_deemph, wm8960_put_deemph),
6964    
6965     diff --git a/sound/soc/codecs/wm8997.c b/sound/soc/codecs/wm8997.c
6966     index ab33fe596519..dd1842527b30 100644
6967     --- a/sound/soc/codecs/wm8997.c
6968     +++ b/sound/soc/codecs/wm8997.c
6969     @@ -40,7 +40,7 @@ struct wm8997_priv {
6970     static DECLARE_TLV_DB_SCALE(ana_tlv, 0, 100, 0);
6971     static DECLARE_TLV_DB_SCALE(eq_tlv, -1200, 100, 0);
6972     static DECLARE_TLV_DB_SCALE(digital_tlv, -6400, 50, 0);
6973     -static DECLARE_TLV_DB_SCALE(noise_tlv, 0, 600, 0);
6974     +static DECLARE_TLV_DB_SCALE(noise_tlv, -13200, 600, 0);
6975     static DECLARE_TLV_DB_SCALE(ng_tlv, -10200, 600, 0);
6976    
6977     static const struct reg_default wm8997_sysclk_reva_patch[] = {
6978     diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c
6979     index a712d754431c..b4edae1d4f5d 100644
6980     --- a/sound/usb/mixer.c
6981     +++ b/sound/usb/mixer.c
6982     @@ -914,6 +914,7 @@ static void volume_control_quirks(struct usb_mixer_elem_info *cval,
6983     case USB_ID(0x046d, 0x081d): /* HD Webcam c510 */
6984     case USB_ID(0x046d, 0x0825): /* HD Webcam c270 */
6985     case USB_ID(0x046d, 0x0826): /* HD Webcam c525 */
6986     + case USB_ID(0x046d, 0x08ca): /* Logitech Quickcam Fusion */
6987     case USB_ID(0x046d, 0x0991):
6988     /* Most audio usb devices lie about volume resolution.
6989     * Most Logitech webcams have res = 384.
6990     diff --git a/sound/usb/mixer_maps.c b/sound/usb/mixer_maps.c
6991     index 621bc9ebb55e..b16be3944213 100644
6992     --- a/sound/usb/mixer_maps.c
6993     +++ b/sound/usb/mixer_maps.c
6994     @@ -428,6 +428,11 @@ static struct usbmix_ctl_map usbmix_ctl_maps[] = {
6995     .map = ebox44_map,
6996     },
6997     {
6998     + /* MAYA44 USB+ */
6999     + .id = USB_ID(0x2573, 0x0008),
7000     + .map = maya44_map,
7001     + },
7002     + {
7003     /* KEF X300A */
7004     .id = USB_ID(0x27ac, 0x1000),
7005     .map = scms_usb3318_map,
7006     diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
7007     index 05ad944dc5c8..9ff5050d513a 100644
7008     --- a/sound/usb/quirks.c
7009     +++ b/sound/usb/quirks.c
7010     @@ -1257,8 +1257,9 @@ u64 snd_usb_interface_dsd_format_quirks(struct snd_usb_audio *chip,
7011     if (fp->altsetting == 2)
7012     return SNDRV_PCM_FMTBIT_DSD_U32_BE;
7013     break;
7014     - /* DIYINHK DSD DXD 384kHz USB to I2S/DSD */
7015     - case USB_ID(0x20b1, 0x2009):
7016     +
7017     + case USB_ID(0x20b1, 0x2009): /* DIYINHK DSD DXD 384kHz USB to I2S/DSD */
7018     + case USB_ID(0x20b1, 0x2023): /* JLsounds I2SoverUSB */
7019     if (fp->altsetting == 3)
7020     return SNDRV_PCM_FMTBIT_DSD_U32_BE;
7021     break;
7022     diff --git a/virt/kvm/arm/vgic.c b/virt/kvm/arm/vgic.c
7023     index 5f67fadfca65..d7cf2ffc56e9 100644
7024     --- a/virt/kvm/arm/vgic.c
7025     +++ b/virt/kvm/arm/vgic.c
7026     @@ -1721,7 +1721,7 @@ int kvm_vgic_inject_irq(struct kvm *kvm, int cpuid, unsigned int irq_num,
7027     goto out;
7028     }
7029    
7030     - if (irq_num >= kvm->arch.vgic.nr_irqs)
7031     + if (irq_num >= min(kvm->arch.vgic.nr_irqs, 1020))
7032     return -EINVAL;
7033    
7034     vcpu_id = vgic_update_irq_pending(kvm, cpuid, irq_num, level);