Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2618 - (show annotations) (download)
Mon Jul 13 08:29:10 2015 UTC (8 years, 9 months ago) by niro
File size: 249176 byte(s)
-linux-3.18.18
1 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);