Magellan Linux

Contents of /trunk/kernel-alx/patches-4.4/0106-4.4.7-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2798 - (show annotations) (download)
Mon May 30 12:45:54 2016 UTC (7 years, 11 months ago) by niro
File size: 278845 byte(s)
-linux-4.4.7
1 diff --git a/MAINTAINERS b/MAINTAINERS
2 index d826f1b9eb02..4c3e1d2ac31b 100644
3 --- a/MAINTAINERS
4 +++ b/MAINTAINERS
5 @@ -230,13 +230,13 @@ F: kernel/sys_ni.c
6
7 ABIT UGURU 1,2 HARDWARE MONITOR DRIVER
8 M: Hans de Goede <hdegoede@redhat.com>
9 -L: lm-sensors@lm-sensors.org
10 +L: linux-hwmon@vger.kernel.org
11 S: Maintained
12 F: drivers/hwmon/abituguru.c
13
14 ABIT UGURU 3 HARDWARE MONITOR DRIVER
15 M: Alistair John Strachan <alistair@devzero.co.uk>
16 -L: lm-sensors@lm-sensors.org
17 +L: linux-hwmon@vger.kernel.org
18 S: Maintained
19 F: drivers/hwmon/abituguru3.c
20
21 @@ -373,14 +373,14 @@ S: Maintained
22
23 ADM1025 HARDWARE MONITOR DRIVER
24 M: Jean Delvare <jdelvare@suse.com>
25 -L: lm-sensors@lm-sensors.org
26 +L: linux-hwmon@vger.kernel.org
27 S: Maintained
28 F: Documentation/hwmon/adm1025
29 F: drivers/hwmon/adm1025.c
30
31 ADM1029 HARDWARE MONITOR DRIVER
32 M: Corentin Labbe <clabbe.montjoie@gmail.com>
33 -L: lm-sensors@lm-sensors.org
34 +L: linux-hwmon@vger.kernel.org
35 S: Maintained
36 F: drivers/hwmon/adm1029.c
37
38 @@ -425,7 +425,7 @@ F: drivers/video/backlight/adp8860_bl.c
39
40 ADS1015 HARDWARE MONITOR DRIVER
41 M: Dirk Eibach <eibach@gdsys.de>
42 -L: lm-sensors@lm-sensors.org
43 +L: linux-hwmon@vger.kernel.org
44 S: Maintained
45 F: Documentation/hwmon/ads1015
46 F: drivers/hwmon/ads1015.c
47 @@ -438,7 +438,7 @@ F: drivers/macintosh/therm_adt746x.c
48
49 ADT7475 HARDWARE MONITOR DRIVER
50 M: Jean Delvare <jdelvare@suse.com>
51 -L: lm-sensors@lm-sensors.org
52 +L: linux-hwmon@vger.kernel.org
53 S: Maintained
54 F: Documentation/hwmon/adt7475
55 F: drivers/hwmon/adt7475.c
56 @@ -615,7 +615,7 @@ F: include/linux/ccp.h
57
58 AMD FAM15H PROCESSOR POWER MONITORING DRIVER
59 M: Andreas Herrmann <herrmann.der.user@googlemail.com>
60 -L: lm-sensors@lm-sensors.org
61 +L: linux-hwmon@vger.kernel.org
62 S: Maintained
63 F: Documentation/hwmon/fam15h_power
64 F: drivers/hwmon/fam15h_power.c
65 @@ -779,7 +779,7 @@ F: drivers/input/mouse/bcm5974.c
66
67 APPLE SMC DRIVER
68 M: Henrik Rydberg <rydberg@bitmath.org>
69 -L: lm-sensors@lm-sensors.org
70 +L: linux-hwmon@vger.kernel.org
71 S: Odd fixes
72 F: drivers/hwmon/applesmc.c
73
74 @@ -1777,7 +1777,7 @@ F: include/media/as3645a.h
75
76 ASC7621 HARDWARE MONITOR DRIVER
77 M: George Joseph <george.joseph@fairview5.com>
78 -L: lm-sensors@lm-sensors.org
79 +L: linux-hwmon@vger.kernel.org
80 S: Maintained
81 F: Documentation/hwmon/asc7621
82 F: drivers/hwmon/asc7621.c
83 @@ -1864,7 +1864,7 @@ F: drivers/net/wireless/ath/carl9170/
84
85 ATK0110 HWMON DRIVER
86 M: Luca Tettamanti <kronos.it@gmail.com>
87 -L: lm-sensors@lm-sensors.org
88 +L: linux-hwmon@vger.kernel.org
89 S: Maintained
90 F: drivers/hwmon/asus_atk0110.c
91
92 @@ -2984,7 +2984,7 @@ F: mm/swap_cgroup.c
93
94 CORETEMP HARDWARE MONITORING DRIVER
95 M: Fenghua Yu <fenghua.yu@intel.com>
96 -L: lm-sensors@lm-sensors.org
97 +L: linux-hwmon@vger.kernel.org
98 S: Maintained
99 F: Documentation/hwmon/coretemp
100 F: drivers/hwmon/coretemp.c
101 @@ -3549,7 +3549,7 @@ T: git git://git.infradead.org/users/vkoul/slave-dma.git
102
103 DME1737 HARDWARE MONITOR DRIVER
104 M: Juerg Haefliger <juergh@gmail.com>
105 -L: lm-sensors@lm-sensors.org
106 +L: linux-hwmon@vger.kernel.org
107 S: Maintained
108 F: Documentation/hwmon/dme1737
109 F: drivers/hwmon/dme1737.c
110 @@ -4262,7 +4262,7 @@ F: include/video/exynos_mipi*
111
112 F71805F HARDWARE MONITORING DRIVER
113 M: Jean Delvare <jdelvare@suse.com>
114 -L: lm-sensors@lm-sensors.org
115 +L: linux-hwmon@vger.kernel.org
116 S: Maintained
117 F: Documentation/hwmon/f71805f
118 F: drivers/hwmon/f71805f.c
119 @@ -4341,7 +4341,7 @@ F: fs/*
120
121 FINTEK F75375S HARDWARE MONITOR AND FAN CONTROLLER DRIVER
122 M: Riku Voipio <riku.voipio@iki.fi>
123 -L: lm-sensors@lm-sensors.org
124 +L: linux-hwmon@vger.kernel.org
125 S: Maintained
126 F: drivers/hwmon/f75375s.c
127 F: include/linux/f75375s.h
128 @@ -4883,8 +4883,8 @@ F: drivers/media/usb/hackrf/
129 HARDWARE MONITORING
130 M: Jean Delvare <jdelvare@suse.com>
131 M: Guenter Roeck <linux@roeck-us.net>
132 -L: lm-sensors@lm-sensors.org
133 -W: http://www.lm-sensors.org/
134 +L: linux-hwmon@vger.kernel.org
135 +W: http://hwmon.wiki.kernel.org/
136 T: quilt http://jdelvare.nerim.net/devel/linux/jdelvare-hwmon/
137 T: git git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git
138 S: Maintained
139 @@ -5393,7 +5393,7 @@ F: drivers/usb/atm/ueagle-atm.c
140
141 INA209 HARDWARE MONITOR DRIVER
142 M: Guenter Roeck <linux@roeck-us.net>
143 -L: lm-sensors@lm-sensors.org
144 +L: linux-hwmon@vger.kernel.org
145 S: Maintained
146 F: Documentation/hwmon/ina209
147 F: Documentation/devicetree/bindings/i2c/ina209.txt
148 @@ -5401,7 +5401,7 @@ F: drivers/hwmon/ina209.c
149
150 INA2XX HARDWARE MONITOR DRIVER
151 M: Guenter Roeck <linux@roeck-us.net>
152 -L: lm-sensors@lm-sensors.org
153 +L: linux-hwmon@vger.kernel.org
154 S: Maintained
155 F: Documentation/hwmon/ina2xx
156 F: drivers/hwmon/ina2xx.c
157 @@ -5884,7 +5884,7 @@ F: drivers/isdn/hardware/eicon/
158
159 IT87 HARDWARE MONITORING DRIVER
160 M: Jean Delvare <jdelvare@suse.com>
161 -L: lm-sensors@lm-sensors.org
162 +L: linux-hwmon@vger.kernel.org
163 S: Maintained
164 F: Documentation/hwmon/it87
165 F: drivers/hwmon/it87.c
166 @@ -5920,7 +5920,7 @@ F: drivers/media/dvb-frontends/ix2505v*
167
168 JC42.4 TEMPERATURE SENSOR DRIVER
169 M: Guenter Roeck <linux@roeck-us.net>
170 -L: lm-sensors@lm-sensors.org
171 +L: linux-hwmon@vger.kernel.org
172 S: Maintained
173 F: drivers/hwmon/jc42.c
174 F: Documentation/hwmon/jc42
175 @@ -5970,14 +5970,14 @@ F: drivers/tty/serial/jsm/
176
177 K10TEMP HARDWARE MONITORING DRIVER
178 M: Clemens Ladisch <clemens@ladisch.de>
179 -L: lm-sensors@lm-sensors.org
180 +L: linux-hwmon@vger.kernel.org
181 S: Maintained
182 F: Documentation/hwmon/k10temp
183 F: drivers/hwmon/k10temp.c
184
185 K8TEMP HARDWARE MONITORING DRIVER
186 M: Rudolf Marek <r.marek@assembler.cz>
187 -L: lm-sensors@lm-sensors.org
188 +L: linux-hwmon@vger.kernel.org
189 S: Maintained
190 F: Documentation/hwmon/k8temp
191 F: drivers/hwmon/k8temp.c
192 @@ -6485,27 +6485,27 @@ F: net/llc/
193
194 LM73 HARDWARE MONITOR DRIVER
195 M: Guillaume Ligneul <guillaume.ligneul@gmail.com>
196 -L: lm-sensors@lm-sensors.org
197 +L: linux-hwmon@vger.kernel.org
198 S: Maintained
199 F: drivers/hwmon/lm73.c
200
201 LM78 HARDWARE MONITOR DRIVER
202 M: Jean Delvare <jdelvare@suse.com>
203 -L: lm-sensors@lm-sensors.org
204 +L: linux-hwmon@vger.kernel.org
205 S: Maintained
206 F: Documentation/hwmon/lm78
207 F: drivers/hwmon/lm78.c
208
209 LM83 HARDWARE MONITOR DRIVER
210 M: Jean Delvare <jdelvare@suse.com>
211 -L: lm-sensors@lm-sensors.org
212 +L: linux-hwmon@vger.kernel.org
213 S: Maintained
214 F: Documentation/hwmon/lm83
215 F: drivers/hwmon/lm83.c
216
217 LM90 HARDWARE MONITOR DRIVER
218 M: Jean Delvare <jdelvare@suse.com>
219 -L: lm-sensors@lm-sensors.org
220 +L: linux-hwmon@vger.kernel.org
221 S: Maintained
222 F: Documentation/hwmon/lm90
223 F: Documentation/devicetree/bindings/hwmon/lm90.txt
224 @@ -6513,7 +6513,7 @@ F: drivers/hwmon/lm90.c
225
226 LM95234 HARDWARE MONITOR DRIVER
227 M: Guenter Roeck <linux@roeck-us.net>
228 -L: lm-sensors@lm-sensors.org
229 +L: linux-hwmon@vger.kernel.org
230 S: Maintained
231 F: Documentation/hwmon/lm95234
232 F: drivers/hwmon/lm95234.c
233 @@ -6580,7 +6580,7 @@ F: drivers/scsi/sym53c8xx_2/
234
235 LTC4261 HARDWARE MONITOR DRIVER
236 M: Guenter Roeck <linux@roeck-us.net>
237 -L: lm-sensors@lm-sensors.org
238 +L: linux-hwmon@vger.kernel.org
239 S: Maintained
240 F: Documentation/hwmon/ltc4261
241 F: drivers/hwmon/ltc4261.c
242 @@ -6749,28 +6749,28 @@ F: include/uapi/linux/matroxfb.h
243
244 MAX16065 HARDWARE MONITOR DRIVER
245 M: Guenter Roeck <linux@roeck-us.net>
246 -L: lm-sensors@lm-sensors.org
247 +L: linux-hwmon@vger.kernel.org
248 S: Maintained
249 F: Documentation/hwmon/max16065
250 F: drivers/hwmon/max16065.c
251
252 MAX20751 HARDWARE MONITOR DRIVER
253 M: Guenter Roeck <linux@roeck-us.net>
254 -L: lm-sensors@lm-sensors.org
255 +L: linux-hwmon@vger.kernel.org
256 S: Maintained
257 F: Documentation/hwmon/max20751
258 F: drivers/hwmon/max20751.c
259
260 MAX6650 HARDWARE MONITOR AND FAN CONTROLLER DRIVER
261 M: "Hans J. Koch" <hjk@hansjkoch.de>
262 -L: lm-sensors@lm-sensors.org
263 +L: linux-hwmon@vger.kernel.org
264 S: Maintained
265 F: Documentation/hwmon/max6650
266 F: drivers/hwmon/max6650.c
267
268 MAX6697 HARDWARE MONITOR DRIVER
269 M: Guenter Roeck <linux@roeck-us.net>
270 -L: lm-sensors@lm-sensors.org
271 +L: linux-hwmon@vger.kernel.org
272 S: Maintained
273 F: Documentation/hwmon/max6697
274 F: Documentation/devicetree/bindings/i2c/max6697.txt
275 @@ -7303,7 +7303,7 @@ F: drivers/scsi/NCR_D700.*
276
277 NCT6775 HARDWARE MONITOR DRIVER
278 M: Guenter Roeck <linux@roeck-us.net>
279 -L: lm-sensors@lm-sensors.org
280 +L: linux-hwmon@vger.kernel.org
281 S: Maintained
282 F: Documentation/hwmon/nct6775
283 F: drivers/hwmon/nct6775.c
284 @@ -8064,7 +8064,7 @@ F: drivers/video/logo/logo_parisc*
285
286 PC87360 HARDWARE MONITORING DRIVER
287 M: Jim Cromie <jim.cromie@gmail.com>
288 -L: lm-sensors@lm-sensors.org
289 +L: linux-hwmon@vger.kernel.org
290 S: Maintained
291 F: Documentation/hwmon/pc87360
292 F: drivers/hwmon/pc87360.c
293 @@ -8076,7 +8076,7 @@ F: drivers/char/pc8736x_gpio.c
294
295 PC87427 HARDWARE MONITORING DRIVER
296 M: Jean Delvare <jdelvare@suse.com>
297 -L: lm-sensors@lm-sensors.org
298 +L: linux-hwmon@vger.kernel.org
299 S: Maintained
300 F: Documentation/hwmon/pc87427
301 F: drivers/hwmon/pc87427.c
302 @@ -8415,8 +8415,8 @@ F: drivers/rtc/rtc-puv3.c
303
304 PMBUS HARDWARE MONITORING DRIVERS
305 M: Guenter Roeck <linux@roeck-us.net>
306 -L: lm-sensors@lm-sensors.org
307 -W: http://www.lm-sensors.org/
308 +L: linux-hwmon@vger.kernel.org
309 +W: http://hwmon.wiki.kernel.org/
310 W: http://www.roeck-us.net/linux/drivers/
311 T: git git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git
312 S: Maintained
313 @@ -8610,7 +8610,7 @@ F: drivers/media/usb/pwc/*
314
315 PWM FAN DRIVER
316 M: Kamil Debski <k.debski@samsung.com>
317 -L: lm-sensors@lm-sensors.org
318 +L: linux-hwmon@vger.kernel.org
319 S: Supported
320 F: Documentation/devicetree/bindings/hwmon/pwm-fan.txt
321 F: Documentation/hwmon/pwm-fan
322 @@ -9882,28 +9882,28 @@ F: Documentation/devicetree/bindings/media/i2c/nokia,smia.txt
323
324 SMM665 HARDWARE MONITOR DRIVER
325 M: Guenter Roeck <linux@roeck-us.net>
326 -L: lm-sensors@lm-sensors.org
327 +L: linux-hwmon@vger.kernel.org
328 S: Maintained
329 F: Documentation/hwmon/smm665
330 F: drivers/hwmon/smm665.c
331
332 SMSC EMC2103 HARDWARE MONITOR DRIVER
333 M: Steve Glendinning <steve.glendinning@shawell.net>
334 -L: lm-sensors@lm-sensors.org
335 +L: linux-hwmon@vger.kernel.org
336 S: Maintained
337 F: Documentation/hwmon/emc2103
338 F: drivers/hwmon/emc2103.c
339
340 SMSC SCH5627 HARDWARE MONITOR DRIVER
341 M: Hans de Goede <hdegoede@redhat.com>
342 -L: lm-sensors@lm-sensors.org
343 +L: linux-hwmon@vger.kernel.org
344 S: Supported
345 F: Documentation/hwmon/sch5627
346 F: drivers/hwmon/sch5627.c
347
348 SMSC47B397 HARDWARE MONITOR DRIVER
349 M: Jean Delvare <jdelvare@suse.com>
350 -L: lm-sensors@lm-sensors.org
351 +L: linux-hwmon@vger.kernel.org
352 S: Maintained
353 F: Documentation/hwmon/smsc47b397
354 F: drivers/hwmon/smsc47b397.c
355 @@ -10830,7 +10830,7 @@ F: include/linux/mmc/sh_mobile_sdhi.h
356
357 TMP401 HARDWARE MONITOR DRIVER
358 M: Guenter Roeck <linux@roeck-us.net>
359 -L: lm-sensors@lm-sensors.org
360 +L: linux-hwmon@vger.kernel.org
361 S: Maintained
362 F: Documentation/hwmon/tmp401
363 F: drivers/hwmon/tmp401.c
364 @@ -11564,14 +11564,14 @@ F: Documentation/networking/vrf.txt
365
366 VT1211 HARDWARE MONITOR DRIVER
367 M: Juerg Haefliger <juergh@gmail.com>
368 -L: lm-sensors@lm-sensors.org
369 +L: linux-hwmon@vger.kernel.org
370 S: Maintained
371 F: Documentation/hwmon/vt1211
372 F: drivers/hwmon/vt1211.c
373
374 VT8231 HARDWARE MONITOR DRIVER
375 M: Roger Lucas <vt8231@hiddenengine.co.uk>
376 -L: lm-sensors@lm-sensors.org
377 +L: linux-hwmon@vger.kernel.org
378 S: Maintained
379 F: drivers/hwmon/vt8231.c
380
381 @@ -11590,21 +11590,21 @@ F: drivers/w1/
382
383 W83791D HARDWARE MONITORING DRIVER
384 M: Marc Hulsman <m.hulsman@tudelft.nl>
385 -L: lm-sensors@lm-sensors.org
386 +L: linux-hwmon@vger.kernel.org
387 S: Maintained
388 F: Documentation/hwmon/w83791d
389 F: drivers/hwmon/w83791d.c
390
391 W83793 HARDWARE MONITORING DRIVER
392 M: Rudolf Marek <r.marek@assembler.cz>
393 -L: lm-sensors@lm-sensors.org
394 +L: linux-hwmon@vger.kernel.org
395 S: Maintained
396 F: Documentation/hwmon/w83793
397 F: drivers/hwmon/w83793.c
398
399 W83795 HARDWARE MONITORING DRIVER
400 M: Jean Delvare <jdelvare@suse.com>
401 -L: lm-sensors@lm-sensors.org
402 +L: linux-hwmon@vger.kernel.org
403 S: Maintained
404 F: drivers/hwmon/w83795.c
405
406 diff --git a/Makefile b/Makefile
407 index 87d12b44ab66..5a493e785aca 100644
408 --- a/Makefile
409 +++ b/Makefile
410 @@ -1,6 +1,6 @@
411 VERSION = 4
412 PATCHLEVEL = 4
413 -SUBLEVEL = 6
414 +SUBLEVEL = 7
415 EXTRAVERSION =
416 NAME = Blurry Fish Butt
417
418 diff --git a/arch/arc/include/asm/bitops.h b/arch/arc/include/asm/bitops.h
419 index 57c1f33844d4..0352fb8d21b9 100644
420 --- a/arch/arc/include/asm/bitops.h
421 +++ b/arch/arc/include/asm/bitops.h
422 @@ -35,21 +35,6 @@ static inline void op##_bit(unsigned long nr, volatile unsigned long *m)\
423 \
424 m += nr >> 5; \
425 \
426 - /* \
427 - * ARC ISA micro-optimization: \
428 - * \
429 - * Instructions dealing with bitpos only consider lower 5 bits \
430 - * e.g (x << 33) is handled like (x << 1) by ASL instruction \
431 - * (mem pointer still needs adjustment to point to next word) \
432 - * \
433 - * Hence the masking to clamp @nr arg can be elided in general. \
434 - * \
435 - * However if @nr is a constant (above assumed in a register), \
436 - * and greater than 31, gcc can optimize away (x << 33) to 0, \
437 - * as overflow, given the 32-bit ISA. Thus masking needs to be \
438 - * done for const @nr, but no code is generated due to gcc \
439 - * const prop. \
440 - */ \
441 nr &= 0x1f; \
442 \
443 __asm__ __volatile__( \
444 diff --git a/arch/arc/include/asm/io.h b/arch/arc/include/asm/io.h
445 index 694ece8a0243..27b17adea50d 100644
446 --- a/arch/arc/include/asm/io.h
447 +++ b/arch/arc/include/asm/io.h
448 @@ -129,15 +129,23 @@ static inline void __raw_writel(u32 w, volatile void __iomem *addr)
449 #define writel(v,c) ({ __iowmb(); writel_relaxed(v,c); })
450
451 /*
452 - * Relaxed API for drivers which can handle any ordering themselves
453 + * Relaxed API for drivers which can handle barrier ordering themselves
454 + *
455 + * Also these are defined to perform little endian accesses.
456 + * To provide the typical device register semantics of fixed endian,
457 + * swap the byte order for Big Endian
458 + *
459 + * http://lkml.kernel.org/r/201603100845.30602.arnd@arndb.de
460 */
461 #define readb_relaxed(c) __raw_readb(c)
462 -#define readw_relaxed(c) __raw_readw(c)
463 -#define readl_relaxed(c) __raw_readl(c)
464 +#define readw_relaxed(c) ({ u16 __r = le16_to_cpu((__force __le16) \
465 + __raw_readw(c)); __r; })
466 +#define readl_relaxed(c) ({ u32 __r = le32_to_cpu((__force __le32) \
467 + __raw_readl(c)); __r; })
468
469 #define writeb_relaxed(v,c) __raw_writeb(v,c)
470 -#define writew_relaxed(v,c) __raw_writew(v,c)
471 -#define writel_relaxed(v,c) __raw_writel(v,c)
472 +#define writew_relaxed(v,c) __raw_writew((__force u16) cpu_to_le16(v),c)
473 +#define writel_relaxed(v,c) __raw_writel((__force u32) cpu_to_le32(v),c)
474
475 #include <asm-generic/io.h>
476
477 diff --git a/arch/arm/boot/dts/at91-sama5d3_xplained.dts b/arch/arm/boot/dts/at91-sama5d3_xplained.dts
478 index ff888d21c786..f3e2b96c06a3 100644
479 --- a/arch/arm/boot/dts/at91-sama5d3_xplained.dts
480 +++ b/arch/arm/boot/dts/at91-sama5d3_xplained.dts
481 @@ -303,6 +303,7 @@
482 regulator-name = "mmc0-card-supply";
483 regulator-min-microvolt = <3300000>;
484 regulator-max-microvolt = <3300000>;
485 + regulator-always-on;
486 };
487
488 gpio_keys {
489 diff --git a/arch/arm/boot/dts/at91-sama5d4_xplained.dts b/arch/arm/boot/dts/at91-sama5d4_xplained.dts
490 index 569026e8f96c..da84e65b56ef 100644
491 --- a/arch/arm/boot/dts/at91-sama5d4_xplained.dts
492 +++ b/arch/arm/boot/dts/at91-sama5d4_xplained.dts
493 @@ -268,5 +268,6 @@
494 regulator-min-microvolt = <3300000>;
495 regulator-max-microvolt = <3300000>;
496 vin-supply = <&vcc_3v3_reg>;
497 + regulator-always-on;
498 };
499 };
500 diff --git a/arch/arm/mach-s3c64xx/dev-audio.c b/arch/arm/mach-s3c64xx/dev-audio.c
501 index ff780a8d8366..9a42736ef4ac 100644
502 --- a/arch/arm/mach-s3c64xx/dev-audio.c
503 +++ b/arch/arm/mach-s3c64xx/dev-audio.c
504 @@ -54,12 +54,12 @@ static int s3c64xx_i2s_cfg_gpio(struct platform_device *pdev)
505
506 static struct resource s3c64xx_iis0_resource[] = {
507 [0] = DEFINE_RES_MEM(S3C64XX_PA_IIS0, SZ_256),
508 - [1] = DEFINE_RES_DMA(DMACH_I2S0_OUT),
509 - [2] = DEFINE_RES_DMA(DMACH_I2S0_IN),
510 };
511
512 -static struct s3c_audio_pdata i2sv3_pdata = {
513 +static struct s3c_audio_pdata i2s0_pdata = {
514 .cfg_gpio = s3c64xx_i2s_cfg_gpio,
515 + .dma_playback = DMACH_I2S0_OUT,
516 + .dma_capture = DMACH_I2S0_IN,
517 };
518
519 struct platform_device s3c64xx_device_iis0 = {
520 @@ -68,15 +68,19 @@ struct platform_device s3c64xx_device_iis0 = {
521 .num_resources = ARRAY_SIZE(s3c64xx_iis0_resource),
522 .resource = s3c64xx_iis0_resource,
523 .dev = {
524 - .platform_data = &i2sv3_pdata,
525 + .platform_data = &i2s0_pdata,
526 },
527 };
528 EXPORT_SYMBOL(s3c64xx_device_iis0);
529
530 static struct resource s3c64xx_iis1_resource[] = {
531 [0] = DEFINE_RES_MEM(S3C64XX_PA_IIS1, SZ_256),
532 - [1] = DEFINE_RES_DMA(DMACH_I2S1_OUT),
533 - [2] = DEFINE_RES_DMA(DMACH_I2S1_IN),
534 +};
535 +
536 +static struct s3c_audio_pdata i2s1_pdata = {
537 + .cfg_gpio = s3c64xx_i2s_cfg_gpio,
538 + .dma_playback = DMACH_I2S1_OUT,
539 + .dma_capture = DMACH_I2S1_IN,
540 };
541
542 struct platform_device s3c64xx_device_iis1 = {
543 @@ -85,19 +89,19 @@ struct platform_device s3c64xx_device_iis1 = {
544 .num_resources = ARRAY_SIZE(s3c64xx_iis1_resource),
545 .resource = s3c64xx_iis1_resource,
546 .dev = {
547 - .platform_data = &i2sv3_pdata,
548 + .platform_data = &i2s1_pdata,
549 },
550 };
551 EXPORT_SYMBOL(s3c64xx_device_iis1);
552
553 static struct resource s3c64xx_iisv4_resource[] = {
554 [0] = DEFINE_RES_MEM(S3C64XX_PA_IISV4, SZ_256),
555 - [1] = DEFINE_RES_DMA(DMACH_HSI_I2SV40_TX),
556 - [2] = DEFINE_RES_DMA(DMACH_HSI_I2SV40_RX),
557 };
558
559 static struct s3c_audio_pdata i2sv4_pdata = {
560 .cfg_gpio = s3c64xx_i2s_cfg_gpio,
561 + .dma_playback = DMACH_HSI_I2SV40_TX,
562 + .dma_capture = DMACH_HSI_I2SV40_RX,
563 .type = {
564 .i2s = {
565 .quirks = QUIRK_PRI_6CHAN,
566 @@ -142,12 +146,12 @@ static int s3c64xx_pcm_cfg_gpio(struct platform_device *pdev)
567
568 static struct resource s3c64xx_pcm0_resource[] = {
569 [0] = DEFINE_RES_MEM(S3C64XX_PA_PCM0, SZ_256),
570 - [1] = DEFINE_RES_DMA(DMACH_PCM0_TX),
571 - [2] = DEFINE_RES_DMA(DMACH_PCM0_RX),
572 };
573
574 static struct s3c_audio_pdata s3c_pcm0_pdata = {
575 .cfg_gpio = s3c64xx_pcm_cfg_gpio,
576 + .dma_capture = DMACH_PCM0_RX,
577 + .dma_playback = DMACH_PCM0_TX,
578 };
579
580 struct platform_device s3c64xx_device_pcm0 = {
581 @@ -163,12 +167,12 @@ EXPORT_SYMBOL(s3c64xx_device_pcm0);
582
583 static struct resource s3c64xx_pcm1_resource[] = {
584 [0] = DEFINE_RES_MEM(S3C64XX_PA_PCM1, SZ_256),
585 - [1] = DEFINE_RES_DMA(DMACH_PCM1_TX),
586 - [2] = DEFINE_RES_DMA(DMACH_PCM1_RX),
587 };
588
589 static struct s3c_audio_pdata s3c_pcm1_pdata = {
590 .cfg_gpio = s3c64xx_pcm_cfg_gpio,
591 + .dma_playback = DMACH_PCM1_TX,
592 + .dma_capture = DMACH_PCM1_RX,
593 };
594
595 struct platform_device s3c64xx_device_pcm1 = {
596 @@ -196,13 +200,14 @@ static int s3c64xx_ac97_cfg_gpe(struct platform_device *pdev)
597
598 static struct resource s3c64xx_ac97_resource[] = {
599 [0] = DEFINE_RES_MEM(S3C64XX_PA_AC97, SZ_256),
600 - [1] = DEFINE_RES_DMA(DMACH_AC97_PCMOUT),
601 - [2] = DEFINE_RES_DMA(DMACH_AC97_PCMIN),
602 - [3] = DEFINE_RES_DMA(DMACH_AC97_MICIN),
603 - [4] = DEFINE_RES_IRQ(IRQ_AC97),
604 + [1] = DEFINE_RES_IRQ(IRQ_AC97),
605 };
606
607 -static struct s3c_audio_pdata s3c_ac97_pdata;
608 +static struct s3c_audio_pdata s3c_ac97_pdata = {
609 + .dma_playback = DMACH_AC97_PCMOUT,
610 + .dma_capture = DMACH_AC97_PCMIN,
611 + .dma_capture_mic = DMACH_AC97_MICIN,
612 +};
613
614 static u64 s3c64xx_ac97_dmamask = DMA_BIT_MASK(32);
615
616 diff --git a/arch/arm/mach-s3c64xx/include/mach/dma.h b/arch/arm/mach-s3c64xx/include/mach/dma.h
617 index 096e14073bd9..9c739eafe95c 100644
618 --- a/arch/arm/mach-s3c64xx/include/mach/dma.h
619 +++ b/arch/arm/mach-s3c64xx/include/mach/dma.h
620 @@ -14,38 +14,38 @@
621 #define S3C64XX_DMA_CHAN(name) ((unsigned long)(name))
622
623 /* DMA0/SDMA0 */
624 -#define DMACH_UART0 S3C64XX_DMA_CHAN("uart0_tx")
625 -#define DMACH_UART0_SRC2 S3C64XX_DMA_CHAN("uart0_rx")
626 -#define DMACH_UART1 S3C64XX_DMA_CHAN("uart1_tx")
627 -#define DMACH_UART1_SRC2 S3C64XX_DMA_CHAN("uart1_rx")
628 -#define DMACH_UART2 S3C64XX_DMA_CHAN("uart2_tx")
629 -#define DMACH_UART2_SRC2 S3C64XX_DMA_CHAN("uart2_rx")
630 -#define DMACH_UART3 S3C64XX_DMA_CHAN("uart3_tx")
631 -#define DMACH_UART3_SRC2 S3C64XX_DMA_CHAN("uart3_rx")
632 -#define DMACH_PCM0_TX S3C64XX_DMA_CHAN("pcm0_tx")
633 -#define DMACH_PCM0_RX S3C64XX_DMA_CHAN("pcm0_rx")
634 -#define DMACH_I2S0_OUT S3C64XX_DMA_CHAN("i2s0_tx")
635 -#define DMACH_I2S0_IN S3C64XX_DMA_CHAN("i2s0_rx")
636 +#define DMACH_UART0 "uart0_tx"
637 +#define DMACH_UART0_SRC2 "uart0_rx"
638 +#define DMACH_UART1 "uart1_tx"
639 +#define DMACH_UART1_SRC2 "uart1_rx"
640 +#define DMACH_UART2 "uart2_tx"
641 +#define DMACH_UART2_SRC2 "uart2_rx"
642 +#define DMACH_UART3 "uart3_tx"
643 +#define DMACH_UART3_SRC2 "uart3_rx"
644 +#define DMACH_PCM0_TX "pcm0_tx"
645 +#define DMACH_PCM0_RX "pcm0_rx"
646 +#define DMACH_I2S0_OUT "i2s0_tx"
647 +#define DMACH_I2S0_IN "i2s0_rx"
648 #define DMACH_SPI0_TX S3C64XX_DMA_CHAN("spi0_tx")
649 #define DMACH_SPI0_RX S3C64XX_DMA_CHAN("spi0_rx")
650 -#define DMACH_HSI_I2SV40_TX S3C64XX_DMA_CHAN("i2s2_tx")
651 -#define DMACH_HSI_I2SV40_RX S3C64XX_DMA_CHAN("i2s2_rx")
652 +#define DMACH_HSI_I2SV40_TX "i2s2_tx"
653 +#define DMACH_HSI_I2SV40_RX "i2s2_rx"
654
655 /* DMA1/SDMA1 */
656 -#define DMACH_PCM1_TX S3C64XX_DMA_CHAN("pcm1_tx")
657 -#define DMACH_PCM1_RX S3C64XX_DMA_CHAN("pcm1_rx")
658 -#define DMACH_I2S1_OUT S3C64XX_DMA_CHAN("i2s1_tx")
659 -#define DMACH_I2S1_IN S3C64XX_DMA_CHAN("i2s1_rx")
660 +#define DMACH_PCM1_TX "pcm1_tx"
661 +#define DMACH_PCM1_RX "pcm1_rx"
662 +#define DMACH_I2S1_OUT "i2s1_tx"
663 +#define DMACH_I2S1_IN "i2s1_rx"
664 #define DMACH_SPI1_TX S3C64XX_DMA_CHAN("spi1_tx")
665 #define DMACH_SPI1_RX S3C64XX_DMA_CHAN("spi1_rx")
666 -#define DMACH_AC97_PCMOUT S3C64XX_DMA_CHAN("ac97_out")
667 -#define DMACH_AC97_PCMIN S3C64XX_DMA_CHAN("ac97_in")
668 -#define DMACH_AC97_MICIN S3C64XX_DMA_CHAN("ac97_mic")
669 -#define DMACH_PWM S3C64XX_DMA_CHAN("pwm")
670 -#define DMACH_IRDA S3C64XX_DMA_CHAN("irda")
671 -#define DMACH_EXTERNAL S3C64XX_DMA_CHAN("external")
672 -#define DMACH_SECURITY_RX S3C64XX_DMA_CHAN("sec_rx")
673 -#define DMACH_SECURITY_TX S3C64XX_DMA_CHAN("sec_tx")
674 +#define DMACH_AC97_PCMOUT "ac97_out"
675 +#define DMACH_AC97_PCMIN "ac97_in"
676 +#define DMACH_AC97_MICIN "ac97_mic"
677 +#define DMACH_PWM "pwm"
678 +#define DMACH_IRDA "irda"
679 +#define DMACH_EXTERNAL "external"
680 +#define DMACH_SECURITY_RX "sec_rx"
681 +#define DMACH_SECURITY_TX "sec_tx"
682
683 enum dma_ch {
684 DMACH_MAX = 32
685 diff --git a/arch/arm/plat-samsung/devs.c b/arch/arm/plat-samsung/devs.c
686 index 82074625de5c..e212f9d804bd 100644
687 --- a/arch/arm/plat-samsung/devs.c
688 +++ b/arch/arm/plat-samsung/devs.c
689 @@ -65,6 +65,7 @@
690 #include <linux/platform_data/usb-ohci-s3c2410.h>
691 #include <plat/usb-phy.h>
692 #include <plat/regs-spi.h>
693 +#include <linux/platform_data/asoc-s3c.h>
694 #include <linux/platform_data/spi-s3c64xx.h>
695
696 static u64 samsung_device_dma_mask = DMA_BIT_MASK(32);
697 @@ -74,9 +75,12 @@ static u64 samsung_device_dma_mask = DMA_BIT_MASK(32);
698 static struct resource s3c_ac97_resource[] = {
699 [0] = DEFINE_RES_MEM(S3C2440_PA_AC97, S3C2440_SZ_AC97),
700 [1] = DEFINE_RES_IRQ(IRQ_S3C244X_AC97),
701 - [2] = DEFINE_RES_DMA_NAMED(DMACH_PCM_OUT, "PCM out"),
702 - [3] = DEFINE_RES_DMA_NAMED(DMACH_PCM_IN, "PCM in"),
703 - [4] = DEFINE_RES_DMA_NAMED(DMACH_MIC_IN, "Mic in"),
704 +};
705 +
706 +static struct s3c_audio_pdata s3c_ac97_pdata = {
707 + .dma_playback = (void *)DMACH_PCM_OUT,
708 + .dma_capture = (void *)DMACH_PCM_IN,
709 + .dma_capture_mic = (void *)DMACH_MIC_IN,
710 };
711
712 struct platform_device s3c_device_ac97 = {
713 @@ -87,6 +91,7 @@ struct platform_device s3c_device_ac97 = {
714 .dev = {
715 .dma_mask = &samsung_device_dma_mask,
716 .coherent_dma_mask = DMA_BIT_MASK(32),
717 + .platform_data = &s3c_ac97_pdata,
718 }
719 };
720 #endif /* CONFIG_CPU_S3C2440 */
721 diff --git a/arch/ia64/include/asm/io.h b/arch/ia64/include/asm/io.h
722 index 9041bbe2b7b4..8fdb9c7eeb66 100644
723 --- a/arch/ia64/include/asm/io.h
724 +++ b/arch/ia64/include/asm/io.h
725 @@ -436,6 +436,7 @@ static inline void __iomem * ioremap_cache (unsigned long phys_addr, unsigned lo
726 return ioremap(phys_addr, size);
727 }
728 #define ioremap_cache ioremap_cache
729 +#define ioremap_uc ioremap_nocache
730
731
732 /*
733 diff --git a/arch/s390/include/asm/pci.h b/arch/s390/include/asm/pci.h
734 index c873e682b67f..2b2ced9dc00a 100644
735 --- a/arch/s390/include/asm/pci.h
736 +++ b/arch/s390/include/asm/pci.h
737 @@ -45,7 +45,7 @@ struct zpci_fmb {
738 u64 rpcit_ops;
739 u64 dma_rbytes;
740 u64 dma_wbytes;
741 -} __packed __aligned(16);
742 +} __packed __aligned(64);
743
744 enum zpci_state {
745 ZPCI_FN_STATE_RESERVED,
746 diff --git a/arch/s390/kernel/entry.S b/arch/s390/kernel/entry.S
747 index 857b6526d298..424e6809ad07 100644
748 --- a/arch/s390/kernel/entry.S
749 +++ b/arch/s390/kernel/entry.S
750 @@ -1197,114 +1197,12 @@ cleanup_critical:
751 .quad .Lpsw_idle_lpsw
752
753 .Lcleanup_save_fpu_regs:
754 - TSTMSK __LC_CPU_FLAGS,_CIF_FPU
755 - bor %r14
756 - clg %r9,BASED(.Lcleanup_save_fpu_regs_done)
757 - jhe 5f
758 - clg %r9,BASED(.Lcleanup_save_fpu_regs_fp)
759 - jhe 4f
760 - clg %r9,BASED(.Lcleanup_save_fpu_regs_vx_high)
761 - jhe 3f
762 - clg %r9,BASED(.Lcleanup_save_fpu_regs_vx_low)
763 - jhe 2f
764 - clg %r9,BASED(.Lcleanup_save_fpu_fpc_end)
765 - jhe 1f
766 - lg %r2,__LC_CURRENT
767 - aghi %r2,__TASK_thread
768 -0: # Store floating-point controls
769 - stfpc __THREAD_FPU_fpc(%r2)
770 -1: # Load register save area and check if VX is active
771 - lg %r3,__THREAD_FPU_regs(%r2)
772 - TSTMSK __LC_MACHINE_FLAGS,MACHINE_FLAG_VX
773 - jz 4f # no VX -> store FP regs
774 -2: # Store vector registers (V0-V15)
775 - VSTM %v0,%v15,0,%r3 # vstm 0,15,0(3)
776 -3: # Store vector registers (V16-V31)
777 - VSTM %v16,%v31,256,%r3 # vstm 16,31,256(3)
778 - j 5f # -> done, set CIF_FPU flag
779 -4: # Store floating-point registers
780 - std 0,0(%r3)
781 - std 1,8(%r3)
782 - std 2,16(%r3)
783 - std 3,24(%r3)
784 - std 4,32(%r3)
785 - std 5,40(%r3)
786 - std 6,48(%r3)
787 - std 7,56(%r3)
788 - std 8,64(%r3)
789 - std 9,72(%r3)
790 - std 10,80(%r3)
791 - std 11,88(%r3)
792 - std 12,96(%r3)
793 - std 13,104(%r3)
794 - std 14,112(%r3)
795 - std 15,120(%r3)
796 -5: # Set CIF_FPU flag
797 - oi __LC_CPU_FLAGS+7,_CIF_FPU
798 - lg %r9,48(%r11) # return from save_fpu_regs
799 + larl %r9,save_fpu_regs
800 br %r14
801 -.Lcleanup_save_fpu_fpc_end:
802 - .quad .Lsave_fpu_regs_fpc_end
803 -.Lcleanup_save_fpu_regs_vx_low:
804 - .quad .Lsave_fpu_regs_vx_low
805 -.Lcleanup_save_fpu_regs_vx_high:
806 - .quad .Lsave_fpu_regs_vx_high
807 -.Lcleanup_save_fpu_regs_fp:
808 - .quad .Lsave_fpu_regs_fp
809 -.Lcleanup_save_fpu_regs_done:
810 - .quad .Lsave_fpu_regs_done
811
812 .Lcleanup_load_fpu_regs:
813 - TSTMSK __LC_CPU_FLAGS,_CIF_FPU
814 - bnor %r14
815 - clg %r9,BASED(.Lcleanup_load_fpu_regs_done)
816 - jhe 1f
817 - clg %r9,BASED(.Lcleanup_load_fpu_regs_fp)
818 - jhe 2f
819 - clg %r9,BASED(.Lcleanup_load_fpu_regs_vx_high)
820 - jhe 3f
821 - clg %r9,BASED(.Lcleanup_load_fpu_regs_vx)
822 - jhe 4f
823 - lg %r4,__LC_CURRENT
824 - aghi %r4,__TASK_thread
825 - lfpc __THREAD_FPU_fpc(%r4)
826 - TSTMSK __LC_MACHINE_FLAGS,MACHINE_FLAG_VX
827 - lg %r4,__THREAD_FPU_regs(%r4) # %r4 <- reg save area
828 - jz 2f # -> no VX, load FP regs
829 -4: # Load V0 ..V15 registers
830 - VLM %v0,%v15,0,%r4
831 -3: # Load V16..V31 registers
832 - VLM %v16,%v31,256,%r4
833 - j 1f
834 -2: # Load floating-point registers
835 - ld 0,0(%r4)
836 - ld 1,8(%r4)
837 - ld 2,16(%r4)
838 - ld 3,24(%r4)
839 - ld 4,32(%r4)
840 - ld 5,40(%r4)
841 - ld 6,48(%r4)
842 - ld 7,56(%r4)
843 - ld 8,64(%r4)
844 - ld 9,72(%r4)
845 - ld 10,80(%r4)
846 - ld 11,88(%r4)
847 - ld 12,96(%r4)
848 - ld 13,104(%r4)
849 - ld 14,112(%r4)
850 - ld 15,120(%r4)
851 -1: # Clear CIF_FPU bit
852 - ni __LC_CPU_FLAGS+7,255-_CIF_FPU
853 - lg %r9,48(%r11) # return from load_fpu_regs
854 + larl %r9,load_fpu_regs
855 br %r14
856 -.Lcleanup_load_fpu_regs_vx:
857 - .quad .Lload_fpu_regs_vx
858 -.Lcleanup_load_fpu_regs_vx_high:
859 - .quad .Lload_fpu_regs_vx_high
860 -.Lcleanup_load_fpu_regs_fp:
861 - .quad .Lload_fpu_regs_fp
862 -.Lcleanup_load_fpu_regs_done:
863 - .quad .Lload_fpu_regs_done
864
865 /*
866 * Integer constants
867 diff --git a/arch/s390/kernel/head64.S b/arch/s390/kernel/head64.S
868 index 58b719fa8067..1ad2407c7f75 100644
869 --- a/arch/s390/kernel/head64.S
870 +++ b/arch/s390/kernel/head64.S
871 @@ -16,7 +16,7 @@
872
873 __HEAD
874 ENTRY(startup_continue)
875 - tm __LC_STFL_FAC_LIST+6,0x80 # LPP available ?
876 + tm __LC_STFL_FAC_LIST+5,0x80 # LPP available ?
877 jz 0f
878 xc __LC_LPP+1(7,0),__LC_LPP+1 # clear lpp and current_pid
879 mvi __LC_LPP,0x80 # and set LPP_MAGIC
880 diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c
881 index c837bcacf218..1f581eb61bc2 100644
882 --- a/arch/s390/kernel/setup.c
883 +++ b/arch/s390/kernel/setup.c
884 @@ -329,6 +329,7 @@ static void __init setup_lowcore(void)
885 + PAGE_SIZE - STACK_FRAME_OVERHEAD - sizeof(struct pt_regs);
886 lc->current_task = (unsigned long) init_thread_union.thread_info.task;
887 lc->thread_info = (unsigned long) &init_thread_union;
888 + lc->lpp = LPP_MAGIC;
889 lc->machine_flags = S390_lowcore.machine_flags;
890 lc->stfl_fac_list = S390_lowcore.stfl_fac_list;
891 memcpy(lc->stfle_fac_list, S390_lowcore.stfle_fac_list,
892 diff --git a/arch/s390/pci/pci.c b/arch/s390/pci/pci.c
893 index 7ef12a3ace3a..19442395f413 100644
894 --- a/arch/s390/pci/pci.c
895 +++ b/arch/s390/pci/pci.c
896 @@ -871,8 +871,11 @@ static inline int barsize(u8 size)
897
898 static int zpci_mem_init(void)
899 {
900 + BUILD_BUG_ON(!is_power_of_2(__alignof__(struct zpci_fmb)) ||
901 + __alignof__(struct zpci_fmb) < sizeof(struct zpci_fmb));
902 +
903 zdev_fmb_cache = kmem_cache_create("PCI_FMB_cache", sizeof(struct zpci_fmb),
904 - 16, 0, NULL);
905 + __alignof__(struct zpci_fmb), 0, NULL);
906 if (!zdev_fmb_cache)
907 goto error_zdev;
908
909 diff --git a/arch/sh/mm/kmap.c b/arch/sh/mm/kmap.c
910 index ec29e14ec5a8..bf25d7c79a2d 100644
911 --- a/arch/sh/mm/kmap.c
912 +++ b/arch/sh/mm/kmap.c
913 @@ -36,6 +36,7 @@ void *kmap_coherent(struct page *page, unsigned long addr)
914
915 BUG_ON(!test_bit(PG_dcache_clean, &page->flags));
916
917 + preempt_disable();
918 pagefault_disable();
919
920 idx = FIX_CMAP_END -
921 @@ -64,4 +65,5 @@ void kunmap_coherent(void *kvaddr)
922 }
923
924 pagefault_enable();
925 + preempt_enable();
926 }
927 diff --git a/arch/um/drivers/mconsole_kern.c b/arch/um/drivers/mconsole_kern.c
928 index 29880c9b324e..e22e57298522 100644
929 --- a/arch/um/drivers/mconsole_kern.c
930 +++ b/arch/um/drivers/mconsole_kern.c
931 @@ -133,7 +133,7 @@ void mconsole_proc(struct mc_request *req)
932 ptr += strlen("proc");
933 ptr = skip_spaces(ptr);
934
935 - file = file_open_root(mnt->mnt_root, mnt, ptr, O_RDONLY);
936 + file = file_open_root(mnt->mnt_root, mnt, ptr, O_RDONLY, 0);
937 if (IS_ERR(file)) {
938 mconsole_reply(req, "Failed to open file", 1, 0);
939 printk(KERN_ERR "open /proc/%s: %ld\n", ptr, PTR_ERR(file));
940 diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
941 index db3622f22b61..436639a31624 100644
942 --- a/arch/x86/Kconfig
943 +++ b/arch/x86/Kconfig
944 @@ -1126,22 +1126,23 @@ config MICROCODE
945 bool "CPU microcode loading support"
946 default y
947 depends on CPU_SUP_AMD || CPU_SUP_INTEL
948 - depends on BLK_DEV_INITRD
949 select FW_LOADER
950 ---help---
951 -
952 If you say Y here, you will be able to update the microcode on
953 - certain Intel and AMD processors. The Intel support is for the
954 - IA32 family, e.g. Pentium Pro, Pentium II, Pentium III, Pentium 4,
955 - Xeon etc. The AMD support is for families 0x10 and later. You will
956 - obviously need the actual microcode binary data itself which is not
957 - shipped with the Linux kernel.
958 -
959 - This option selects the general module only, you need to select
960 - at least one vendor specific module as well.
961 -
962 - To compile this driver as a module, choose M here: the module
963 - will be called microcode.
964 + Intel and AMD processors. The Intel support is for the IA32 family,
965 + e.g. Pentium Pro, Pentium II, Pentium III, Pentium 4, Xeon etc. The
966 + AMD support is for families 0x10 and later. You will obviously need
967 + the actual microcode binary data itself which is not shipped with
968 + the Linux kernel.
969 +
970 + The preferred method to load microcode from a detached initrd is described
971 + in Documentation/x86/early-microcode.txt. For that you need to enable
972 + CONFIG_BLK_DEV_INITRD in order for the loader to be able to scan the
973 + initrd for microcode blobs.
974 +
975 + In addition, you can build-in the microcode into the kernel. For that you
976 + need to enable FIRMWARE_IN_KERNEL and add the vendor-supplied microcode
977 + to the CONFIG_EXTRA_FIRMWARE config option.
978
979 config MICROCODE_INTEL
980 bool "Intel microcode loading support"
981 diff --git a/arch/x86/entry/common.c b/arch/x86/entry/common.c
982 index 03663740c866..1a4477cedc49 100644
983 --- a/arch/x86/entry/common.c
984 +++ b/arch/x86/entry/common.c
985 @@ -268,6 +268,7 @@ static void exit_to_usermode_loop(struct pt_regs *regs, u32 cached_flags)
986 /* Called with IRQs disabled. */
987 __visible inline void prepare_exit_to_usermode(struct pt_regs *regs)
988 {
989 + struct thread_info *ti = pt_regs_to_thread_info(regs);
990 u32 cached_flags;
991
992 if (IS_ENABLED(CONFIG_PROVE_LOCKING) && WARN_ON(!irqs_disabled()))
993 @@ -275,12 +276,22 @@ __visible inline void prepare_exit_to_usermode(struct pt_regs *regs)
994
995 lockdep_sys_exit();
996
997 - cached_flags =
998 - READ_ONCE(pt_regs_to_thread_info(regs)->flags);
999 + cached_flags = READ_ONCE(ti->flags);
1000
1001 if (unlikely(cached_flags & EXIT_TO_USERMODE_LOOP_FLAGS))
1002 exit_to_usermode_loop(regs, cached_flags);
1003
1004 +#ifdef CONFIG_COMPAT
1005 + /*
1006 + * Compat syscalls set TS_COMPAT. Make sure we clear it before
1007 + * returning to user mode. We need to clear it *after* signal
1008 + * handling, because syscall restart has a fixup for compat
1009 + * syscalls. The fixup is exercised by the ptrace_syscall_32
1010 + * selftest.
1011 + */
1012 + ti->status &= ~TS_COMPAT;
1013 +#endif
1014 +
1015 user_enter();
1016 }
1017
1018 @@ -332,14 +343,6 @@ __visible inline void syscall_return_slowpath(struct pt_regs *regs)
1019 if (unlikely(cached_flags & SYSCALL_EXIT_WORK_FLAGS))
1020 syscall_slow_exit_work(regs, cached_flags);
1021
1022 -#ifdef CONFIG_COMPAT
1023 - /*
1024 - * Compat syscalls set TS_COMPAT. Make sure we clear it before
1025 - * returning to user mode.
1026 - */
1027 - ti->status &= ~TS_COMPAT;
1028 -#endif
1029 -
1030 local_irq_disable();
1031 prepare_exit_to_usermode(regs);
1032 }
1033 diff --git a/arch/x86/include/asm/apic.h b/arch/x86/include/asm/apic.h
1034 index a30316bf801a..163769d82475 100644
1035 --- a/arch/x86/include/asm/apic.h
1036 +++ b/arch/x86/include/asm/apic.h
1037 @@ -638,8 +638,8 @@ static inline void entering_irq(void)
1038
1039 static inline void entering_ack_irq(void)
1040 {
1041 - ack_APIC_irq();
1042 entering_irq();
1043 + ack_APIC_irq();
1044 }
1045
1046 static inline void ipi_entering_ack_irq(void)
1047 diff --git a/arch/x86/include/asm/hw_irq.h b/arch/x86/include/asm/hw_irq.h
1048 index 1e3408e88604..59caa55fb9b5 100644
1049 --- a/arch/x86/include/asm/hw_irq.h
1050 +++ b/arch/x86/include/asm/hw_irq.h
1051 @@ -136,6 +136,7 @@ struct irq_alloc_info {
1052 struct irq_cfg {
1053 unsigned int dest_apicid;
1054 u8 vector;
1055 + u8 old_vector;
1056 };
1057
1058 extern struct irq_cfg *irq_cfg(unsigned int irq);
1059 diff --git a/arch/x86/include/asm/microcode.h b/arch/x86/include/asm/microcode.h
1060 index 34e62b1dcfce..712b24ed3a64 100644
1061 --- a/arch/x86/include/asm/microcode.h
1062 +++ b/arch/x86/include/asm/microcode.h
1063 @@ -2,6 +2,7 @@
1064 #define _ASM_X86_MICROCODE_H
1065
1066 #include <linux/earlycpio.h>
1067 +#include <linux/initrd.h>
1068
1069 #define native_rdmsr(msr, val1, val2) \
1070 do { \
1071 @@ -168,4 +169,29 @@ static inline void reload_early_microcode(void) { }
1072 static inline bool
1073 get_builtin_firmware(struct cpio_data *cd, const char *name) { return false; }
1074 #endif
1075 +
1076 +static inline unsigned long get_initrd_start(void)
1077 +{
1078 +#ifdef CONFIG_BLK_DEV_INITRD
1079 + return initrd_start;
1080 +#else
1081 + return 0;
1082 +#endif
1083 +}
1084 +
1085 +static inline unsigned long get_initrd_start_addr(void)
1086 +{
1087 +#ifdef CONFIG_BLK_DEV_INITRD
1088 +#ifdef CONFIG_X86_32
1089 + unsigned long *initrd_start_p = (unsigned long *)__pa_nodebug(&initrd_start);
1090 +
1091 + return (unsigned long)__pa_nodebug(*initrd_start_p);
1092 +#else
1093 + return get_initrd_start();
1094 +#endif
1095 +#else /* CONFIG_BLK_DEV_INITRD */
1096 + return 0;
1097 +#endif
1098 +}
1099 +
1100 #endif /* _ASM_X86_MICROCODE_H */
1101 diff --git a/arch/x86/include/asm/perf_event.h b/arch/x86/include/asm/perf_event.h
1102 index 7bcb861a04e5..5a2ed3ed2f26 100644
1103 --- a/arch/x86/include/asm/perf_event.h
1104 +++ b/arch/x86/include/asm/perf_event.h
1105 @@ -165,6 +165,7 @@ struct x86_pmu_capability {
1106 #define GLOBAL_STATUS_ASIF BIT_ULL(60)
1107 #define GLOBAL_STATUS_COUNTERS_FROZEN BIT_ULL(59)
1108 #define GLOBAL_STATUS_LBRS_FROZEN BIT_ULL(58)
1109 +#define GLOBAL_STATUS_TRACE_TOPAPMI BIT_ULL(55)
1110
1111 /*
1112 * IBS cpuid feature detection
1113 diff --git a/arch/x86/include/asm/xen/hypervisor.h b/arch/x86/include/asm/xen/hypervisor.h
1114 index 8b2d4bea9962..39171b3646bb 100644
1115 --- a/arch/x86/include/asm/xen/hypervisor.h
1116 +++ b/arch/x86/include/asm/xen/hypervisor.h
1117 @@ -62,4 +62,6 @@ void xen_arch_register_cpu(int num);
1118 void xen_arch_unregister_cpu(int num);
1119 #endif
1120
1121 +extern void xen_set_iopl_mask(unsigned mask);
1122 +
1123 #endif /* _ASM_X86_XEN_HYPERVISOR_H */
1124 diff --git a/arch/x86/kernel/apic/vector.c b/arch/x86/kernel/apic/vector.c
1125 index a35f6b5473f4..7af2505f20c2 100644
1126 --- a/arch/x86/kernel/apic/vector.c
1127 +++ b/arch/x86/kernel/apic/vector.c
1128 @@ -211,6 +211,7 @@ update:
1129 */
1130 cpumask_and(d->old_domain, d->old_domain, cpu_online_mask);
1131 d->move_in_progress = !cpumask_empty(d->old_domain);
1132 + d->cfg.old_vector = d->move_in_progress ? d->cfg.vector : 0;
1133 d->cfg.vector = vector;
1134 cpumask_copy(d->domain, vector_cpumask);
1135 success:
1136 @@ -653,46 +654,97 @@ void irq_complete_move(struct irq_cfg *cfg)
1137 }
1138
1139 /*
1140 - * Called with @desc->lock held and interrupts disabled.
1141 + * Called from fixup_irqs() with @desc->lock held and interrupts disabled.
1142 */
1143 void irq_force_complete_move(struct irq_desc *desc)
1144 {
1145 struct irq_data *irqdata = irq_desc_get_irq_data(desc);
1146 struct apic_chip_data *data = apic_chip_data(irqdata);
1147 struct irq_cfg *cfg = data ? &data->cfg : NULL;
1148 + unsigned int cpu;
1149
1150 if (!cfg)
1151 return;
1152
1153 - __irq_complete_move(cfg, cfg->vector);
1154 -
1155 /*
1156 * This is tricky. If the cleanup of @data->old_domain has not been
1157 * done yet, then the following setaffinity call will fail with
1158 * -EBUSY. This can leave the interrupt in a stale state.
1159 *
1160 - * The cleanup cannot make progress because we hold @desc->lock. So in
1161 - * case @data->old_domain is not yet cleaned up, we need to drop the
1162 - * lock and acquire it again. @desc cannot go away, because the
1163 - * hotplug code holds the sparse irq lock.
1164 + * All CPUs are stuck in stop machine with interrupts disabled so
1165 + * calling __irq_complete_move() would be completely pointless.
1166 */
1167 raw_spin_lock(&vector_lock);
1168 - /* Clean out all offline cpus (including ourself) first. */
1169 + /*
1170 + * Clean out all offline cpus (including the outgoing one) from the
1171 + * old_domain mask.
1172 + */
1173 cpumask_and(data->old_domain, data->old_domain, cpu_online_mask);
1174 - while (!cpumask_empty(data->old_domain)) {
1175 +
1176 + /*
1177 + * If move_in_progress is cleared and the old_domain mask is empty,
1178 + * then there is nothing to cleanup. fixup_irqs() will take care of
1179 + * the stale vectors on the outgoing cpu.
1180 + */
1181 + if (!data->move_in_progress && cpumask_empty(data->old_domain)) {
1182 raw_spin_unlock(&vector_lock);
1183 - raw_spin_unlock(&desc->lock);
1184 - cpu_relax();
1185 - raw_spin_lock(&desc->lock);
1186 + return;
1187 + }
1188 +
1189 + /*
1190 + * 1) The interrupt is in move_in_progress state. That means that we
1191 + * have not seen an interrupt since the io_apic was reprogrammed to
1192 + * the new vector.
1193 + *
1194 + * 2) The interrupt has fired on the new vector, but the cleanup IPIs
1195 + * have not been processed yet.
1196 + */
1197 + if (data->move_in_progress) {
1198 /*
1199 - * Reevaluate apic_chip_data. It might have been cleared after
1200 - * we dropped @desc->lock.
1201 + * In theory there is a race:
1202 + *
1203 + * set_ioapic(new_vector) <-- Interrupt is raised before update
1204 + * is effective, i.e. it's raised on
1205 + * the old vector.
1206 + *
1207 + * So if the target cpu cannot handle that interrupt before
1208 + * the old vector is cleaned up, we get a spurious interrupt
1209 + * and in the worst case the ioapic irq line becomes stale.
1210 + *
1211 + * But in case of cpu hotplug this should be a non issue
1212 + * because if the affinity update happens right before all
1213 + * cpus rendevouz in stop machine, there is no way that the
1214 + * interrupt can be blocked on the target cpu because all cpus
1215 + * loops first with interrupts enabled in stop machine, so the
1216 + * old vector is not yet cleaned up when the interrupt fires.
1217 + *
1218 + * So the only way to run into this issue is if the delivery
1219 + * of the interrupt on the apic/system bus would be delayed
1220 + * beyond the point where the target cpu disables interrupts
1221 + * in stop machine. I doubt that it can happen, but at least
1222 + * there is a theroretical chance. Virtualization might be
1223 + * able to expose this, but AFAICT the IOAPIC emulation is not
1224 + * as stupid as the real hardware.
1225 + *
1226 + * Anyway, there is nothing we can do about that at this point
1227 + * w/o refactoring the whole fixup_irq() business completely.
1228 + * We print at least the irq number and the old vector number,
1229 + * so we have the necessary information when a problem in that
1230 + * area arises.
1231 */
1232 - data = apic_chip_data(irqdata);
1233 - if (!data)
1234 - return;
1235 - raw_spin_lock(&vector_lock);
1236 + pr_warn("IRQ fixup: irq %d move in progress, old vector %d\n",
1237 + irqdata->irq, cfg->old_vector);
1238 }
1239 + /*
1240 + * If old_domain is not empty, then other cpus still have the irq
1241 + * descriptor set in their vector array. Clean it up.
1242 + */
1243 + for_each_cpu(cpu, data->old_domain)
1244 + per_cpu(vector_irq, cpu)[cfg->old_vector] = VECTOR_UNUSED;
1245 +
1246 + /* Cleanup the left overs of the (half finished) move */
1247 + cpumask_clear(data->old_domain);
1248 + data->move_in_progress = 0;
1249 raw_spin_unlock(&vector_lock);
1250 }
1251 #endif
1252 diff --git a/arch/x86/kernel/cpu/microcode/intel.c b/arch/x86/kernel/cpu/microcode/intel.c
1253 index ce47402eb2f9..ac8975a65280 100644
1254 --- a/arch/x86/kernel/cpu/microcode/intel.c
1255 +++ b/arch/x86/kernel/cpu/microcode/intel.c
1256 @@ -555,10 +555,14 @@ scan_microcode(struct mc_saved_data *mc_saved_data, unsigned long *initrd,
1257 cd.data = NULL;
1258 cd.size = 0;
1259
1260 - cd = find_cpio_data(p, (void *)start, size, &offset);
1261 - if (!cd.data) {
1262 + /* try built-in microcode if no initrd */
1263 + if (!size) {
1264 if (!load_builtin_intel_microcode(&cd))
1265 return UCODE_ERROR;
1266 + } else {
1267 + cd = find_cpio_data(p, (void *)start, size, &offset);
1268 + if (!cd.data)
1269 + return UCODE_ERROR;
1270 }
1271
1272 return get_matching_model_microcode(0, start, cd.data, cd.size,
1273 @@ -694,7 +698,7 @@ int __init save_microcode_in_initrd_intel(void)
1274 if (count == 0)
1275 return ret;
1276
1277 - copy_initrd_ptrs(mc_saved, mc_saved_in_initrd, initrd_start, count);
1278 + copy_initrd_ptrs(mc_saved, mc_saved_in_initrd, get_initrd_start(), count);
1279 ret = save_microcode(&mc_saved_data, mc_saved, count);
1280 if (ret)
1281 pr_err("Cannot save microcode patches from initrd.\n");
1282 @@ -732,16 +736,20 @@ void __init load_ucode_intel_bsp(void)
1283 struct boot_params *p;
1284
1285 p = (struct boot_params *)__pa_nodebug(&boot_params);
1286 - start = p->hdr.ramdisk_image;
1287 size = p->hdr.ramdisk_size;
1288
1289 - _load_ucode_intel_bsp(
1290 - (struct mc_saved_data *)__pa_nodebug(&mc_saved_data),
1291 - (unsigned long *)__pa_nodebug(&mc_saved_in_initrd),
1292 - start, size);
1293 + /*
1294 + * Set start only if we have an initrd image. We cannot use initrd_start
1295 + * because it is not set that early yet.
1296 + */
1297 + start = (size ? p->hdr.ramdisk_image : 0);
1298 +
1299 + _load_ucode_intel_bsp((struct mc_saved_data *)__pa_nodebug(&mc_saved_data),
1300 + (unsigned long *)__pa_nodebug(&mc_saved_in_initrd),
1301 + start, size);
1302 #else
1303 - start = boot_params.hdr.ramdisk_image + PAGE_OFFSET;
1304 size = boot_params.hdr.ramdisk_size;
1305 + start = (size ? boot_params.hdr.ramdisk_image + PAGE_OFFSET : 0);
1306
1307 _load_ucode_intel_bsp(&mc_saved_data, mc_saved_in_initrd, start, size);
1308 #endif
1309 @@ -752,20 +760,14 @@ void load_ucode_intel_ap(void)
1310 struct mc_saved_data *mc_saved_data_p;
1311 struct ucode_cpu_info uci;
1312 unsigned long *mc_saved_in_initrd_p;
1313 - unsigned long initrd_start_addr;
1314 enum ucode_state ret;
1315 #ifdef CONFIG_X86_32
1316 - unsigned long *initrd_start_p;
1317
1318 - mc_saved_in_initrd_p =
1319 - (unsigned long *)__pa_nodebug(mc_saved_in_initrd);
1320 + mc_saved_in_initrd_p = (unsigned long *)__pa_nodebug(mc_saved_in_initrd);
1321 mc_saved_data_p = (struct mc_saved_data *)__pa_nodebug(&mc_saved_data);
1322 - initrd_start_p = (unsigned long *)__pa_nodebug(&initrd_start);
1323 - initrd_start_addr = (unsigned long)__pa_nodebug(*initrd_start_p);
1324 #else
1325 - mc_saved_data_p = &mc_saved_data;
1326 mc_saved_in_initrd_p = mc_saved_in_initrd;
1327 - initrd_start_addr = initrd_start;
1328 + mc_saved_data_p = &mc_saved_data;
1329 #endif
1330
1331 /*
1332 @@ -777,7 +779,7 @@ void load_ucode_intel_ap(void)
1333
1334 collect_cpu_info_early(&uci);
1335 ret = load_microcode(mc_saved_data_p, mc_saved_in_initrd_p,
1336 - initrd_start_addr, &uci);
1337 + get_initrd_start_addr(), &uci);
1338
1339 if (ret != UCODE_OK)
1340 return;
1341 diff --git a/arch/x86/kernel/cpu/perf_event.c b/arch/x86/kernel/cpu/perf_event.c
1342 index 2bf79d7c97df..a3aeb2cc361e 100644
1343 --- a/arch/x86/kernel/cpu/perf_event.c
1344 +++ b/arch/x86/kernel/cpu/perf_event.c
1345 @@ -593,6 +593,19 @@ void x86_pmu_disable_all(void)
1346 }
1347 }
1348
1349 +/*
1350 + * There may be PMI landing after enabled=0. The PMI hitting could be before or
1351 + * after disable_all.
1352 + *
1353 + * If PMI hits before disable_all, the PMU will be disabled in the NMI handler.
1354 + * It will not be re-enabled in the NMI handler again, because enabled=0. After
1355 + * handling the NMI, disable_all will be called, which will not change the
1356 + * state either. If PMI hits after disable_all, the PMU is already disabled
1357 + * before entering NMI handler. The NMI handler will not change the state
1358 + * either.
1359 + *
1360 + * So either situation is harmless.
1361 + */
1362 static void x86_pmu_disable(struct pmu *pmu)
1363 {
1364 struct cpu_hw_events *cpuc = this_cpu_ptr(&cpu_hw_events);
1365 diff --git a/arch/x86/kernel/cpu/perf_event.h b/arch/x86/kernel/cpu/perf_event.h
1366 index d0e35ebb2adb..ee70445fbb1f 100644
1367 --- a/arch/x86/kernel/cpu/perf_event.h
1368 +++ b/arch/x86/kernel/cpu/perf_event.h
1369 @@ -591,6 +591,7 @@ struct x86_pmu {
1370 pebs_active :1,
1371 pebs_broken :1;
1372 int pebs_record_size;
1373 + int pebs_buffer_size;
1374 void (*drain_pebs)(struct pt_regs *regs);
1375 struct event_constraint *pebs_constraints;
1376 void (*pebs_aliases)(struct perf_event *event);
1377 @@ -907,6 +908,8 @@ void intel_pmu_lbr_init_hsw(void);
1378
1379 void intel_pmu_lbr_init_skl(void);
1380
1381 +void intel_pmu_pebs_data_source_nhm(void);
1382 +
1383 int intel_pmu_setup_lbr_filter(struct perf_event *event);
1384
1385 void intel_pt_interrupt(void);
1386 diff --git a/arch/x86/kernel/cpu/perf_event_intel.c b/arch/x86/kernel/cpu/perf_event_intel.c
1387 index e2a430021e46..078de2e86b7a 100644
1388 --- a/arch/x86/kernel/cpu/perf_event_intel.c
1389 +++ b/arch/x86/kernel/cpu/perf_event_intel.c
1390 @@ -1458,7 +1458,15 @@ static __initconst const u64 slm_hw_cache_event_ids
1391 };
1392
1393 /*
1394 - * Use from PMIs where the LBRs are already disabled.
1395 + * Used from PMIs where the LBRs are already disabled.
1396 + *
1397 + * This function could be called consecutively. It is required to remain in
1398 + * disabled state if called consecutively.
1399 + *
1400 + * During consecutive calls, the same disable value will be written to related
1401 + * registers, so the PMU state remains unchanged. hw.state in
1402 + * intel_bts_disable_local will remain PERF_HES_STOPPED too in consecutive
1403 + * calls.
1404 */
1405 static void __intel_pmu_disable_all(void)
1406 {
1407 @@ -1840,6 +1848,16 @@ again:
1408 if (__test_and_clear_bit(62, (unsigned long *)&status)) {
1409 handled++;
1410 x86_pmu.drain_pebs(regs);
1411 + /*
1412 + * There are cases where, even though, the PEBS ovfl bit is set
1413 + * in GLOBAL_OVF_STATUS, the PEBS events may also have their
1414 + * overflow bits set for their counters. We must clear them
1415 + * here because they have been processed as exact samples in
1416 + * the drain_pebs() routine. They must not be processed again
1417 + * in the for_each_bit_set() loop for regular samples below.
1418 + */
1419 + status &= ~cpuc->pebs_enabled;
1420 + status &= x86_pmu.intel_ctrl | GLOBAL_STATUS_TRACE_TOPAPMI;
1421 }
1422
1423 /*
1424 @@ -1885,7 +1903,10 @@ again:
1425 goto again;
1426
1427 done:
1428 - __intel_pmu_enable_all(0, true);
1429 + /* Only restore PMU state when it's active. See x86_pmu_disable(). */
1430 + if (cpuc->enabled)
1431 + __intel_pmu_enable_all(0, true);
1432 +
1433 /*
1434 * Only unmask the NMI after the overflow counters
1435 * have been reset. This avoids spurious NMIs on
1436 @@ -3315,6 +3336,7 @@ __init int intel_pmu_init(void)
1437 intel_perfmon_event_map[PERF_COUNT_HW_STALLED_CYCLES_BACKEND] =
1438 X86_CONFIG(.event=0xb1, .umask=0x3f, .inv=1, .cmask=1);
1439
1440 + intel_pmu_pebs_data_source_nhm();
1441 x86_add_quirk(intel_nehalem_quirk);
1442
1443 pr_cont("Nehalem events, ");
1444 @@ -3377,6 +3399,7 @@ __init int intel_pmu_init(void)
1445 intel_perfmon_event_map[PERF_COUNT_HW_STALLED_CYCLES_BACKEND] =
1446 X86_CONFIG(.event=0xb1, .umask=0x3f, .inv=1, .cmask=1);
1447
1448 + intel_pmu_pebs_data_source_nhm();
1449 pr_cont("Westmere events, ");
1450 break;
1451
1452 diff --git a/arch/x86/kernel/cpu/perf_event_intel_ds.c b/arch/x86/kernel/cpu/perf_event_intel_ds.c
1453 index 5db1c7755548..7abb2b88572e 100644
1454 --- a/arch/x86/kernel/cpu/perf_event_intel_ds.c
1455 +++ b/arch/x86/kernel/cpu/perf_event_intel_ds.c
1456 @@ -51,7 +51,8 @@ union intel_x86_pebs_dse {
1457 #define OP_LH (P(OP, LOAD) | P(LVL, HIT))
1458 #define SNOOP_NONE_MISS (P(SNOOP, NONE) | P(SNOOP, MISS))
1459
1460 -static const u64 pebs_data_source[] = {
1461 +/* Version for Sandy Bridge and later */
1462 +static u64 pebs_data_source[] = {
1463 P(OP, LOAD) | P(LVL, MISS) | P(LVL, L3) | P(SNOOP, NA),/* 0x00:ukn L3 */
1464 OP_LH | P(LVL, L1) | P(SNOOP, NONE), /* 0x01: L1 local */
1465 OP_LH | P(LVL, LFB) | P(SNOOP, NONE), /* 0x02: LFB hit */
1466 @@ -70,6 +71,14 @@ static const u64 pebs_data_source[] = {
1467 OP_LH | P(LVL, UNC) | P(SNOOP, NONE), /* 0x0f: uncached */
1468 };
1469
1470 +/* Patch up minor differences in the bits */
1471 +void __init intel_pmu_pebs_data_source_nhm(void)
1472 +{
1473 + pebs_data_source[0x05] = OP_LH | P(LVL, L3) | P(SNOOP, HIT);
1474 + pebs_data_source[0x06] = OP_LH | P(LVL, L3) | P(SNOOP, HITM);
1475 + pebs_data_source[0x07] = OP_LH | P(LVL, L3) | P(SNOOP, HITM);
1476 +}
1477 +
1478 static u64 precise_store_data(u64 status)
1479 {
1480 union intel_x86_pebs_dse dse;
1481 @@ -269,7 +278,7 @@ static int alloc_pebs_buffer(int cpu)
1482 if (!x86_pmu.pebs)
1483 return 0;
1484
1485 - buffer = kzalloc_node(PEBS_BUFFER_SIZE, GFP_KERNEL, node);
1486 + buffer = kzalloc_node(x86_pmu.pebs_buffer_size, GFP_KERNEL, node);
1487 if (unlikely(!buffer))
1488 return -ENOMEM;
1489
1490 @@ -286,7 +295,7 @@ static int alloc_pebs_buffer(int cpu)
1491 per_cpu(insn_buffer, cpu) = ibuffer;
1492 }
1493
1494 - max = PEBS_BUFFER_SIZE / x86_pmu.pebs_record_size;
1495 + max = x86_pmu.pebs_buffer_size / x86_pmu.pebs_record_size;
1496
1497 ds->pebs_buffer_base = (u64)(unsigned long)buffer;
1498 ds->pebs_index = ds->pebs_buffer_base;
1499 @@ -1296,6 +1305,7 @@ void __init intel_ds_init(void)
1500
1501 x86_pmu.bts = boot_cpu_has(X86_FEATURE_BTS);
1502 x86_pmu.pebs = boot_cpu_has(X86_FEATURE_PEBS);
1503 + x86_pmu.pebs_buffer_size = PEBS_BUFFER_SIZE;
1504 if (x86_pmu.pebs) {
1505 char pebs_type = x86_pmu.intel_cap.pebs_trap ? '+' : '-';
1506 int format = x86_pmu.intel_cap.pebs_format;
1507 @@ -1304,6 +1314,14 @@ void __init intel_ds_init(void)
1508 case 0:
1509 printk(KERN_CONT "PEBS fmt0%c, ", pebs_type);
1510 x86_pmu.pebs_record_size = sizeof(struct pebs_record_core);
1511 + /*
1512 + * Using >PAGE_SIZE buffers makes the WRMSR to
1513 + * PERF_GLOBAL_CTRL in intel_pmu_enable_all()
1514 + * mysteriously hang on Core2.
1515 + *
1516 + * As a workaround, we don't do this.
1517 + */
1518 + x86_pmu.pebs_buffer_size = PAGE_SIZE;
1519 x86_pmu.drain_pebs = intel_pmu_drain_pebs_core;
1520 break;
1521
1522 diff --git a/arch/x86/kernel/cpu/perf_event_knc.c b/arch/x86/kernel/cpu/perf_event_knc.c
1523 index 5b0c232d1ee6..b931095e86d4 100644
1524 --- a/arch/x86/kernel/cpu/perf_event_knc.c
1525 +++ b/arch/x86/kernel/cpu/perf_event_knc.c
1526 @@ -263,7 +263,9 @@ again:
1527 goto again;
1528
1529 done:
1530 - knc_pmu_enable_all(0);
1531 + /* Only restore PMU state when it's active. See x86_pmu_disable(). */
1532 + if (cpuc->enabled)
1533 + knc_pmu_enable_all(0);
1534
1535 return handled;
1536 }
1537 diff --git a/arch/x86/kernel/ioport.c b/arch/x86/kernel/ioport.c
1538 index 37dae792dbbe..589b3193f102 100644
1539 --- a/arch/x86/kernel/ioport.c
1540 +++ b/arch/x86/kernel/ioport.c
1541 @@ -96,9 +96,14 @@ asmlinkage long sys_ioperm(unsigned long from, unsigned long num, int turn_on)
1542 SYSCALL_DEFINE1(iopl, unsigned int, level)
1543 {
1544 struct pt_regs *regs = current_pt_regs();
1545 - unsigned int old = (regs->flags >> 12) & 3;
1546 struct thread_struct *t = &current->thread;
1547
1548 + /*
1549 + * Careful: the IOPL bits in regs->flags are undefined under Xen PV
1550 + * and changing them has no effect.
1551 + */
1552 + unsigned int old = t->iopl >> X86_EFLAGS_IOPL_BIT;
1553 +
1554 if (level > 3)
1555 return -EINVAL;
1556 /* Trying to gain more privileges? */
1557 @@ -106,8 +111,9 @@ SYSCALL_DEFINE1(iopl, unsigned int, level)
1558 if (!capable(CAP_SYS_RAWIO))
1559 return -EPERM;
1560 }
1561 - regs->flags = (regs->flags & ~X86_EFLAGS_IOPL) | (level << 12);
1562 - t->iopl = level << 12;
1563 + regs->flags = (regs->flags & ~X86_EFLAGS_IOPL) |
1564 + (level << X86_EFLAGS_IOPL_BIT);
1565 + t->iopl = level << X86_EFLAGS_IOPL_BIT;
1566 set_iopl_mask(t->iopl);
1567
1568 return 0;
1569 diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c
1570 index e835d263a33b..4cbb60fbff3e 100644
1571 --- a/arch/x86/kernel/process_64.c
1572 +++ b/arch/x86/kernel/process_64.c
1573 @@ -48,6 +48,7 @@
1574 #include <asm/syscalls.h>
1575 #include <asm/debugreg.h>
1576 #include <asm/switch_to.h>
1577 +#include <asm/xen/hypervisor.h>
1578
1579 asmlinkage extern void ret_from_fork(void);
1580
1581 @@ -411,6 +412,17 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
1582 task_thread_info(prev_p)->flags & _TIF_WORK_CTXSW_PREV))
1583 __switch_to_xtra(prev_p, next_p, tss);
1584
1585 +#ifdef CONFIG_XEN
1586 + /*
1587 + * On Xen PV, IOPL bits in pt_regs->flags have no effect, and
1588 + * current_pt_regs()->flags may not match the current task's
1589 + * intended IOPL. We need to switch it manually.
1590 + */
1591 + if (unlikely(static_cpu_has(X86_FEATURE_XENPV) &&
1592 + prev->iopl != next->iopl))
1593 + xen_set_iopl_mask(next->iopl);
1594 +#endif
1595 +
1596 if (static_cpu_has_bug(X86_BUG_SYSRET_SS_ATTRS)) {
1597 /*
1598 * AMD CPUs have a misfeature: SYSRET sets the SS selector but
1599 diff --git a/arch/x86/kvm/i8254.c b/arch/x86/kvm/i8254.c
1600 index b0ea42b78ccd..ab5318727579 100644
1601 --- a/arch/x86/kvm/i8254.c
1602 +++ b/arch/x86/kvm/i8254.c
1603 @@ -245,7 +245,7 @@ static void kvm_pit_ack_irq(struct kvm_irq_ack_notifier *kian)
1604 * PIC is being reset. Handle it gracefully here
1605 */
1606 atomic_inc(&ps->pending);
1607 - else if (value > 0)
1608 + else if (value > 0 && ps->reinject)
1609 /* in this case, we had multiple outstanding pit interrupts
1610 * that we needed to inject. Reinject
1611 */
1612 @@ -288,7 +288,9 @@ static void pit_do_work(struct kthread_work *work)
1613 * last one has been acked.
1614 */
1615 spin_lock(&ps->inject_lock);
1616 - if (ps->irq_ack) {
1617 + if (!ps->reinject)
1618 + inject = 1;
1619 + else if (ps->irq_ack) {
1620 ps->irq_ack = 0;
1621 inject = 1;
1622 }
1623 @@ -317,10 +319,10 @@ static enum hrtimer_restart pit_timer_fn(struct hrtimer *data)
1624 struct kvm_kpit_state *ps = container_of(data, struct kvm_kpit_state, timer);
1625 struct kvm_pit *pt = ps->kvm->arch.vpit;
1626
1627 - if (ps->reinject || !atomic_read(&ps->pending)) {
1628 + if (ps->reinject)
1629 atomic_inc(&ps->pending);
1630 - queue_kthread_work(&pt->worker, &pt->expired);
1631 - }
1632 +
1633 + queue_kthread_work(&pt->worker, &pt->expired);
1634
1635 if (ps->is_periodic) {
1636 hrtimer_add_expires_ns(&ps->timer, ps->period);
1637 diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
1638 index 0958fa2b7cb7..f34ab71dfd57 100644
1639 --- a/arch/x86/kvm/vmx.c
1640 +++ b/arch/x86/kvm/vmx.c
1641 @@ -2637,8 +2637,15 @@ static void nested_vmx_setup_ctls_msrs(struct vcpu_vmx *vmx)
1642 } else
1643 vmx->nested.nested_vmx_ept_caps = 0;
1644
1645 + /*
1646 + * Old versions of KVM use the single-context version without
1647 + * checking for support, so declare that it is supported even
1648 + * though it is treated as global context. The alternative is
1649 + * not failing the single-context invvpid, and it is worse.
1650 + */
1651 if (enable_vpid)
1652 vmx->nested.nested_vmx_vpid_caps = VMX_VPID_INVVPID_BIT |
1653 + VMX_VPID_EXTENT_SINGLE_CONTEXT_BIT |
1654 VMX_VPID_EXTENT_GLOBAL_CONTEXT_BIT;
1655 else
1656 vmx->nested.nested_vmx_vpid_caps = 0;
1657 @@ -7340,6 +7347,7 @@ static int handle_invept(struct kvm_vcpu *vcpu)
1658 if (!(types & (1UL << type))) {
1659 nested_vmx_failValid(vcpu,
1660 VMXERR_INVALID_OPERAND_TO_INVEPT_INVVPID);
1661 + skip_emulated_instruction(vcpu);
1662 return 1;
1663 }
1664
1665 @@ -7398,6 +7406,7 @@ static int handle_invvpid(struct kvm_vcpu *vcpu)
1666 if (!(types & (1UL << type))) {
1667 nested_vmx_failValid(vcpu,
1668 VMXERR_INVALID_OPERAND_TO_INVEPT_INVVPID);
1669 + skip_emulated_instruction(vcpu);
1670 return 1;
1671 }
1672
1673 @@ -7414,12 +7423,17 @@ static int handle_invvpid(struct kvm_vcpu *vcpu)
1674 }
1675
1676 switch (type) {
1677 + case VMX_VPID_EXTENT_SINGLE_CONTEXT:
1678 + /*
1679 + * Old versions of KVM use the single-context version so we
1680 + * have to support it; just treat it the same as all-context.
1681 + */
1682 case VMX_VPID_EXTENT_ALL_CONTEXT:
1683 __vmx_flush_tlb(vcpu, to_vmx(vcpu)->nested.vpid02);
1684 nested_vmx_succeed(vcpu);
1685 break;
1686 default:
1687 - /* Trap single context invalidation invvpid calls */
1688 + /* Trap individual address invalidation invvpid calls */
1689 BUG_ON(1);
1690 break;
1691 }
1692 diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
1693 index d2945024ed33..8bfc5fc6a39b 100644
1694 --- a/arch/x86/kvm/x86.c
1695 +++ b/arch/x86/kvm/x86.c
1696 @@ -2736,6 +2736,7 @@ void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
1697 }
1698
1699 kvm_make_request(KVM_REQ_STEAL_UPDATE, vcpu);
1700 + vcpu->arch.switch_db_regs |= KVM_DEBUGREG_RELOAD;
1701 }
1702
1703 void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu)
1704 diff --git a/arch/x86/mm/tlb.c b/arch/x86/mm/tlb.c
1705 index 8f4cc3dfac32..5fb6adaaa796 100644
1706 --- a/arch/x86/mm/tlb.c
1707 +++ b/arch/x86/mm/tlb.c
1708 @@ -106,8 +106,6 @@ static void flush_tlb_func(void *info)
1709
1710 if (f->flush_mm != this_cpu_read(cpu_tlbstate.active_mm))
1711 return;
1712 - if (!f->flush_end)
1713 - f->flush_end = f->flush_start + PAGE_SIZE;
1714
1715 count_vm_tlb_event(NR_TLB_REMOTE_FLUSH_RECEIVED);
1716 if (this_cpu_read(cpu_tlbstate.state) == TLBSTATE_OK) {
1717 @@ -135,12 +133,20 @@ void native_flush_tlb_others(const struct cpumask *cpumask,
1718 unsigned long end)
1719 {
1720 struct flush_tlb_info info;
1721 +
1722 + if (end == 0)
1723 + end = start + PAGE_SIZE;
1724 info.flush_mm = mm;
1725 info.flush_start = start;
1726 info.flush_end = end;
1727
1728 count_vm_tlb_event(NR_TLB_REMOTE_FLUSH);
1729 - trace_tlb_flush(TLB_REMOTE_SEND_IPI, end - start);
1730 + if (end == TLB_FLUSH_ALL)
1731 + trace_tlb_flush(TLB_REMOTE_SEND_IPI, TLB_FLUSH_ALL);
1732 + else
1733 + trace_tlb_flush(TLB_REMOTE_SEND_IPI,
1734 + (end - start) >> PAGE_SHIFT);
1735 +
1736 if (is_uv_system()) {
1737 unsigned int cpu;
1738
1739 diff --git a/arch/x86/pci/fixup.c b/arch/x86/pci/fixup.c
1740 index e58565556703..0ae7e9fa348d 100644
1741 --- a/arch/x86/pci/fixup.c
1742 +++ b/arch/x86/pci/fixup.c
1743 @@ -540,3 +540,10 @@ static void twinhead_reserve_killing_zone(struct pci_dev *dev)
1744 }
1745 }
1746 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x27B9, twinhead_reserve_killing_zone);
1747 +
1748 +static void pci_bdwep_bar(struct pci_dev *dev)
1749 +{
1750 + dev->non_compliant_bars = 1;
1751 +}
1752 +DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x6fa0, pci_bdwep_bar);
1753 +DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x6fc0, pci_bdwep_bar);
1754 diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
1755 index b7de78bdc09c..beab8c706ac9 100644
1756 --- a/arch/x86/xen/enlighten.c
1757 +++ b/arch/x86/xen/enlighten.c
1758 @@ -961,7 +961,7 @@ static void xen_load_sp0(struct tss_struct *tss,
1759 tss->x86_tss.sp0 = thread->sp0;
1760 }
1761
1762 -static void xen_set_iopl_mask(unsigned mask)
1763 +void xen_set_iopl_mask(unsigned mask)
1764 {
1765 struct physdev_set_iopl set_iopl;
1766
1767 diff --git a/arch/xtensa/kernel/head.S b/arch/xtensa/kernel/head.S
1768 index 9ed55649ac8e..05e1df943856 100644
1769 --- a/arch/xtensa/kernel/head.S
1770 +++ b/arch/xtensa/kernel/head.S
1771 @@ -128,7 +128,7 @@ ENTRY(_startup)
1772 wsr a0, icountlevel
1773
1774 .set _index, 0
1775 - .rept XCHAL_NUM_DBREAK - 1
1776 + .rept XCHAL_NUM_DBREAK
1777 wsr a0, SREG_DBREAKC + _index
1778 .set _index, _index + 1
1779 .endr
1780 diff --git a/arch/xtensa/mm/cache.c b/arch/xtensa/mm/cache.c
1781 index d75aa1476da7..1a804a2f9a5b 100644
1782 --- a/arch/xtensa/mm/cache.c
1783 +++ b/arch/xtensa/mm/cache.c
1784 @@ -97,11 +97,11 @@ void clear_user_highpage(struct page *page, unsigned long vaddr)
1785 unsigned long paddr;
1786 void *kvaddr = coherent_kvaddr(page, TLBTEMP_BASE_1, vaddr, &paddr);
1787
1788 - pagefault_disable();
1789 + preempt_disable();
1790 kmap_invalidate_coherent(page, vaddr);
1791 set_bit(PG_arch_1, &page->flags);
1792 clear_page_alias(kvaddr, paddr);
1793 - pagefault_enable();
1794 + preempt_enable();
1795 }
1796
1797 void copy_user_highpage(struct page *dst, struct page *src,
1798 @@ -113,11 +113,11 @@ void copy_user_highpage(struct page *dst, struct page *src,
1799 void *src_vaddr = coherent_kvaddr(src, TLBTEMP_BASE_2, vaddr,
1800 &src_paddr);
1801
1802 - pagefault_disable();
1803 + preempt_disable();
1804 kmap_invalidate_coherent(dst, vaddr);
1805 set_bit(PG_arch_1, &dst->flags);
1806 copy_page_alias(dst_vaddr, src_vaddr, dst_paddr, src_paddr);
1807 - pagefault_enable();
1808 + preempt_enable();
1809 }
1810
1811 #endif /* DCACHE_WAY_SIZE > PAGE_SIZE */
1812 diff --git a/arch/xtensa/platforms/iss/console.c b/arch/xtensa/platforms/iss/console.c
1813 index 70cb408bc20d..92d785fefb6d 100644
1814 --- a/arch/xtensa/platforms/iss/console.c
1815 +++ b/arch/xtensa/platforms/iss/console.c
1816 @@ -100,21 +100,23 @@ static void rs_poll(unsigned long priv)
1817 {
1818 struct tty_port *port = (struct tty_port *)priv;
1819 int i = 0;
1820 + int rd = 1;
1821 unsigned char c;
1822
1823 spin_lock(&timer_lock);
1824
1825 while (simc_poll(0)) {
1826 - simc_read(0, &c, 1);
1827 + rd = simc_read(0, &c, 1);
1828 + if (rd <= 0)
1829 + break;
1830 tty_insert_flip_char(port, c, TTY_NORMAL);
1831 i++;
1832 }
1833
1834 if (i)
1835 tty_flip_buffer_push(port);
1836 -
1837 -
1838 - mod_timer(&serial_timer, jiffies + SERIAL_TIMER_VALUE);
1839 + if (rd)
1840 + mod_timer(&serial_timer, jiffies + SERIAL_TIMER_VALUE);
1841 spin_unlock(&timer_lock);
1842 }
1843
1844 diff --git a/block/blk-core.c b/block/blk-core.c
1845 index 33e2f62d5062..f8e64cac981a 100644
1846 --- a/block/blk-core.c
1847 +++ b/block/blk-core.c
1848 @@ -2189,7 +2189,7 @@ int blk_insert_cloned_request(struct request_queue *q, struct request *rq)
1849 if (q->mq_ops) {
1850 if (blk_queue_io_stat(q))
1851 blk_account_io_start(rq, true);
1852 - blk_mq_insert_request(rq, false, true, true);
1853 + blk_mq_insert_request(rq, false, true, false);
1854 return 0;
1855 }
1856
1857 diff --git a/crypto/asymmetric_keys/x509_cert_parser.c b/crypto/asymmetric_keys/x509_cert_parser.c
1858 index 021d39c0ba75..13c4e5a5fe8c 100644
1859 --- a/crypto/asymmetric_keys/x509_cert_parser.c
1860 +++ b/crypto/asymmetric_keys/x509_cert_parser.c
1861 @@ -494,7 +494,7 @@ int x509_decode_time(time64_t *_t, size_t hdrlen,
1862 unsigned char tag,
1863 const unsigned char *value, size_t vlen)
1864 {
1865 - static const unsigned char month_lengths[] = { 31, 29, 31, 30, 31, 30,
1866 + static const unsigned char month_lengths[] = { 31, 28, 31, 30, 31, 30,
1867 31, 31, 30, 31, 30, 31 };
1868 const unsigned char *p = value;
1869 unsigned year, mon, day, hour, min, sec, mon_len;
1870 @@ -540,9 +540,9 @@ int x509_decode_time(time64_t *_t, size_t hdrlen,
1871 if (year % 4 == 0) {
1872 mon_len = 29;
1873 if (year % 100 == 0) {
1874 - year /= 100;
1875 - if (year % 4 != 0)
1876 - mon_len = 28;
1877 + mon_len = 28;
1878 + if (year % 400 == 0)
1879 + mon_len = 29;
1880 }
1881 }
1882 }
1883 diff --git a/crypto/keywrap.c b/crypto/keywrap.c
1884 index b1d106ce55f3..72014f963ba7 100644
1885 --- a/crypto/keywrap.c
1886 +++ b/crypto/keywrap.c
1887 @@ -212,7 +212,7 @@ static int crypto_kw_decrypt(struct blkcipher_desc *desc,
1888 SEMIBSIZE))
1889 ret = -EBADMSG;
1890
1891 - memzero_explicit(&block, sizeof(struct crypto_kw_block));
1892 + memzero_explicit(block, sizeof(struct crypto_kw_block));
1893
1894 return ret;
1895 }
1896 @@ -297,7 +297,7 @@ static int crypto_kw_encrypt(struct blkcipher_desc *desc,
1897 /* establish the IV for the caller to pick up */
1898 memcpy(desc->info, block->A, SEMIBSIZE);
1899
1900 - memzero_explicit(&block, sizeof(struct crypto_kw_block));
1901 + memzero_explicit(block, sizeof(struct crypto_kw_block));
1902
1903 return 0;
1904 }
1905 diff --git a/drivers/acpi/resource.c b/drivers/acpi/resource.c
1906 index cdc5c2599beb..627f8fbb5e9a 100644
1907 --- a/drivers/acpi/resource.c
1908 +++ b/drivers/acpi/resource.c
1909 @@ -26,8 +26,20 @@
1910
1911 #ifdef CONFIG_X86
1912 #define valid_IRQ(i) (((i) != 0) && ((i) != 2))
1913 +static inline bool acpi_iospace_resource_valid(struct resource *res)
1914 +{
1915 + /* On X86 IO space is limited to the [0 - 64K] IO port range */
1916 + return res->end < 0x10003;
1917 +}
1918 #else
1919 #define valid_IRQ(i) (true)
1920 +/*
1921 + * ACPI IO descriptors on arches other than X86 contain MMIO CPU physical
1922 + * addresses mapping IO space in CPU physical address space, IO space
1923 + * resources can be placed anywhere in the 64-bit physical address space.
1924 + */
1925 +static inline bool
1926 +acpi_iospace_resource_valid(struct resource *res) { return true; }
1927 #endif
1928
1929 static bool acpi_dev_resource_len_valid(u64 start, u64 end, u64 len, bool io)
1930 @@ -126,7 +138,7 @@ static void acpi_dev_ioresource_flags(struct resource *res, u64 len,
1931 if (!acpi_dev_resource_len_valid(res->start, res->end, len, true))
1932 res->flags |= IORESOURCE_DISABLED | IORESOURCE_UNSET;
1933
1934 - if (res->end >= 0x10003)
1935 + if (!acpi_iospace_resource_valid(res))
1936 res->flags |= IORESOURCE_DISABLED | IORESOURCE_UNSET;
1937
1938 if (io_decode == ACPI_DECODE_16)
1939 diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c
1940 index 0d94621dc856..e3322adaaae0 100644
1941 --- a/drivers/acpi/sleep.c
1942 +++ b/drivers/acpi/sleep.c
1943 @@ -714,6 +714,7 @@ static int acpi_hibernation_enter(void)
1944
1945 static void acpi_hibernation_leave(void)
1946 {
1947 + pm_set_resume_via_firmware();
1948 /*
1949 * If ACPI is not enabled by the BIOS and the boot kernel, we need to
1950 * enable it here.
1951 diff --git a/drivers/block/brd.c b/drivers/block/brd.c
1952 index a5880f4ab40e..1914c63ca8b1 100644
1953 --- a/drivers/block/brd.c
1954 +++ b/drivers/block/brd.c
1955 @@ -338,7 +338,7 @@ static blk_qc_t brd_make_request(struct request_queue *q, struct bio *bio)
1956
1957 if (unlikely(bio->bi_rw & REQ_DISCARD)) {
1958 if (sector & ((PAGE_SIZE >> SECTOR_SHIFT) - 1) ||
1959 - bio->bi_iter.bi_size & PAGE_MASK)
1960 + bio->bi_iter.bi_size & ~PAGE_MASK)
1961 goto io_error;
1962 discard_from_brd(brd, sector, bio->bi_iter.bi_size);
1963 goto out;
1964 diff --git a/drivers/block/mtip32xx/mtip32xx.c b/drivers/block/mtip32xx/mtip32xx.c
1965 index 3457ac8c03e2..55d3d1da72de 100644
1966 --- a/drivers/block/mtip32xx/mtip32xx.c
1967 +++ b/drivers/block/mtip32xx/mtip32xx.c
1968 @@ -173,7 +173,13 @@ static struct mtip_cmd *mtip_get_int_command(struct driver_data *dd)
1969 {
1970 struct request *rq;
1971
1972 + if (mtip_check_surprise_removal(dd->pdev))
1973 + return NULL;
1974 +
1975 rq = blk_mq_alloc_request(dd->queue, 0, __GFP_RECLAIM, true);
1976 + if (IS_ERR(rq))
1977 + return NULL;
1978 +
1979 return blk_mq_rq_to_pdu(rq);
1980 }
1981
1982 @@ -233,15 +239,9 @@ static void mtip_async_complete(struct mtip_port *port,
1983 "Command tag %d failed due to TFE\n", tag);
1984 }
1985
1986 - /* Unmap the DMA scatter list entries */
1987 - dma_unmap_sg(&dd->pdev->dev, cmd->sg, cmd->scatter_ents, cmd->direction);
1988 -
1989 rq = mtip_rq_from_tag(dd, tag);
1990
1991 - if (unlikely(cmd->unaligned))
1992 - up(&port->cmd_slot_unal);
1993 -
1994 - blk_mq_end_request(rq, status ? -EIO : 0);
1995 + blk_mq_complete_request(rq, status);
1996 }
1997
1998 /*
1999 @@ -581,6 +581,8 @@ static void mtip_completion(struct mtip_port *port,
2000 dev_warn(&port->dd->pdev->dev,
2001 "Internal command %d completed with TFE\n", tag);
2002
2003 + command->comp_func = NULL;
2004 + command->comp_data = NULL;
2005 complete(waiting);
2006 }
2007
2008 @@ -618,8 +620,6 @@ static void mtip_handle_tfe(struct driver_data *dd)
2009
2010 port = dd->port;
2011
2012 - set_bit(MTIP_PF_EH_ACTIVE_BIT, &port->flags);
2013 -
2014 if (test_bit(MTIP_PF_IC_ACTIVE_BIT, &port->flags)) {
2015 cmd = mtip_cmd_from_tag(dd, MTIP_TAG_INTERNAL);
2016 dbg_printk(MTIP_DRV_NAME " TFE for the internal command\n");
2017 @@ -628,7 +628,7 @@ static void mtip_handle_tfe(struct driver_data *dd)
2018 cmd->comp_func(port, MTIP_TAG_INTERNAL,
2019 cmd, PORT_IRQ_TF_ERR);
2020 }
2021 - goto handle_tfe_exit;
2022 + return;
2023 }
2024
2025 /* clear the tag accumulator */
2026 @@ -701,7 +701,7 @@ static void mtip_handle_tfe(struct driver_data *dd)
2027 fail_reason = "thermal shutdown";
2028 }
2029 if (buf[288] == 0xBF) {
2030 - set_bit(MTIP_DDF_SEC_LOCK_BIT, &dd->dd_flag);
2031 + set_bit(MTIP_DDF_REBUILD_FAILED_BIT, &dd->dd_flag);
2032 dev_info(&dd->pdev->dev,
2033 "Drive indicates rebuild has failed. Secure erase required.\n");
2034 fail_all_ncq_cmds = 1;
2035 @@ -771,11 +771,6 @@ static void mtip_handle_tfe(struct driver_data *dd)
2036 }
2037 }
2038 print_tags(dd, "reissued (TFE)", tagaccum, cmd_cnt);
2039 -
2040 -handle_tfe_exit:
2041 - /* clear eh_active */
2042 - clear_bit(MTIP_PF_EH_ACTIVE_BIT, &port->flags);
2043 - wake_up_interruptible(&port->svc_wait);
2044 }
2045
2046 /*
2047 @@ -1007,6 +1002,7 @@ static bool mtip_pause_ncq(struct mtip_port *port,
2048 (fis->features == 0x27 || fis->features == 0x72 ||
2049 fis->features == 0x62 || fis->features == 0x26))) {
2050 clear_bit(MTIP_DDF_SEC_LOCK_BIT, &port->dd->dd_flag);
2051 + clear_bit(MTIP_DDF_REBUILD_FAILED_BIT, &port->dd->dd_flag);
2052 /* Com reset after secure erase or lowlevel format */
2053 mtip_restart_port(port);
2054 clear_bit(MTIP_PF_SE_ACTIVE_BIT, &port->flags);
2055 @@ -1021,12 +1017,14 @@ static bool mtip_pause_ncq(struct mtip_port *port,
2056 *
2057 * @port Pointer to port data structure
2058 * @timeout Max duration to wait (ms)
2059 + * @atomic gfp_t flag to indicate blockable context or not
2060 *
2061 * return value
2062 * 0 Success
2063 * -EBUSY Commands still active
2064 */
2065 -static int mtip_quiesce_io(struct mtip_port *port, unsigned long timeout)
2066 +static int mtip_quiesce_io(struct mtip_port *port, unsigned long timeout,
2067 + gfp_t atomic)
2068 {
2069 unsigned long to;
2070 unsigned int n;
2071 @@ -1037,16 +1035,21 @@ static int mtip_quiesce_io(struct mtip_port *port, unsigned long timeout)
2072 to = jiffies + msecs_to_jiffies(timeout);
2073 do {
2074 if (test_bit(MTIP_PF_SVC_THD_ACTIVE_BIT, &port->flags) &&
2075 - test_bit(MTIP_PF_ISSUE_CMDS_BIT, &port->flags)) {
2076 + test_bit(MTIP_PF_ISSUE_CMDS_BIT, &port->flags) &&
2077 + atomic == GFP_KERNEL) {
2078 msleep(20);
2079 continue; /* svc thd is actively issuing commands */
2080 }
2081
2082 - msleep(100);
2083 + if (atomic == GFP_KERNEL)
2084 + msleep(100);
2085 + else {
2086 + cpu_relax();
2087 + udelay(100);
2088 + }
2089 +
2090 if (mtip_check_surprise_removal(port->dd->pdev))
2091 goto err_fault;
2092 - if (test_bit(MTIP_DDF_REMOVE_PENDING_BIT, &port->dd->dd_flag))
2093 - goto err_fault;
2094
2095 /*
2096 * Ignore s_active bit 0 of array element 0.
2097 @@ -1099,6 +1102,7 @@ static int mtip_exec_internal_command(struct mtip_port *port,
2098 struct mtip_cmd *int_cmd;
2099 struct driver_data *dd = port->dd;
2100 int rv = 0;
2101 + unsigned long start;
2102
2103 /* Make sure the buffer is 8 byte aligned. This is asic specific. */
2104 if (buffer & 0x00000007) {
2105 @@ -1107,6 +1111,10 @@ static int mtip_exec_internal_command(struct mtip_port *port,
2106 }
2107
2108 int_cmd = mtip_get_int_command(dd);
2109 + if (!int_cmd) {
2110 + dbg_printk(MTIP_DRV_NAME "Unable to allocate tag for PIO cmd\n");
2111 + return -EFAULT;
2112 + }
2113
2114 set_bit(MTIP_PF_IC_ACTIVE_BIT, &port->flags);
2115
2116 @@ -1119,7 +1127,7 @@ static int mtip_exec_internal_command(struct mtip_port *port,
2117 if (fis->command != ATA_CMD_STANDBYNOW1) {
2118 /* wait for io to complete if non atomic */
2119 if (mtip_quiesce_io(port,
2120 - MTIP_QUIESCE_IO_TIMEOUT_MS) < 0) {
2121 + MTIP_QUIESCE_IO_TIMEOUT_MS, atomic) < 0) {
2122 dev_warn(&dd->pdev->dev,
2123 "Failed to quiesce IO\n");
2124 mtip_put_int_command(dd, int_cmd);
2125 @@ -1162,6 +1170,8 @@ static int mtip_exec_internal_command(struct mtip_port *port,
2126 /* Populate the command header */
2127 int_cmd->command_header->byte_count = 0;
2128
2129 + start = jiffies;
2130 +
2131 /* Issue the command to the hardware */
2132 mtip_issue_non_ncq_command(port, MTIP_TAG_INTERNAL);
2133
2134 @@ -1170,10 +1180,12 @@ static int mtip_exec_internal_command(struct mtip_port *port,
2135 if ((rv = wait_for_completion_interruptible_timeout(
2136 &wait,
2137 msecs_to_jiffies(timeout))) <= 0) {
2138 +
2139 if (rv == -ERESTARTSYS) { /* interrupted */
2140 dev_err(&dd->pdev->dev,
2141 - "Internal command [%02X] was interrupted after %lu ms\n",
2142 - fis->command, timeout);
2143 + "Internal command [%02X] was interrupted after %u ms\n",
2144 + fis->command,
2145 + jiffies_to_msecs(jiffies - start));
2146 rv = -EINTR;
2147 goto exec_ic_exit;
2148 } else if (rv == 0) /* timeout */
2149 @@ -2897,6 +2909,42 @@ static int mtip_ftl_rebuild_poll(struct driver_data *dd)
2150 return -EFAULT;
2151 }
2152
2153 +static void mtip_softirq_done_fn(struct request *rq)
2154 +{
2155 + struct mtip_cmd *cmd = blk_mq_rq_to_pdu(rq);
2156 + struct driver_data *dd = rq->q->queuedata;
2157 +
2158 + /* Unmap the DMA scatter list entries */
2159 + dma_unmap_sg(&dd->pdev->dev, cmd->sg, cmd->scatter_ents,
2160 + cmd->direction);
2161 +
2162 + if (unlikely(cmd->unaligned))
2163 + up(&dd->port->cmd_slot_unal);
2164 +
2165 + blk_mq_end_request(rq, rq->errors);
2166 +}
2167 +
2168 +static void mtip_abort_cmd(struct request *req, void *data,
2169 + bool reserved)
2170 +{
2171 + struct driver_data *dd = data;
2172 +
2173 + dbg_printk(MTIP_DRV_NAME " Aborting request, tag = %d\n", req->tag);
2174 +
2175 + clear_bit(req->tag, dd->port->cmds_to_issue);
2176 + req->errors = -EIO;
2177 + mtip_softirq_done_fn(req);
2178 +}
2179 +
2180 +static void mtip_queue_cmd(struct request *req, void *data,
2181 + bool reserved)
2182 +{
2183 + struct driver_data *dd = data;
2184 +
2185 + set_bit(req->tag, dd->port->cmds_to_issue);
2186 + blk_abort_request(req);
2187 +}
2188 +
2189 /*
2190 * service thread to issue queued commands
2191 *
2192 @@ -2909,7 +2957,7 @@ static int mtip_ftl_rebuild_poll(struct driver_data *dd)
2193 static int mtip_service_thread(void *data)
2194 {
2195 struct driver_data *dd = (struct driver_data *)data;
2196 - unsigned long slot, slot_start, slot_wrap;
2197 + unsigned long slot, slot_start, slot_wrap, to;
2198 unsigned int num_cmd_slots = dd->slot_groups * 32;
2199 struct mtip_port *port = dd->port;
2200
2201 @@ -2924,9 +2972,7 @@ static int mtip_service_thread(void *data)
2202 * is in progress nor error handling is active
2203 */
2204 wait_event_interruptible(port->svc_wait, (port->flags) &&
2205 - !(port->flags & MTIP_PF_PAUSE_IO));
2206 -
2207 - set_bit(MTIP_PF_SVC_THD_ACTIVE_BIT, &port->flags);
2208 + (port->flags & MTIP_PF_SVC_THD_WORK));
2209
2210 if (kthread_should_stop() ||
2211 test_bit(MTIP_PF_SVC_THD_STOP_BIT, &port->flags))
2212 @@ -2936,6 +2982,8 @@ static int mtip_service_thread(void *data)
2213 &dd->dd_flag)))
2214 goto st_out;
2215
2216 + set_bit(MTIP_PF_SVC_THD_ACTIVE_BIT, &port->flags);
2217 +
2218 restart_eh:
2219 /* Demux bits: start with error handling */
2220 if (test_bit(MTIP_PF_EH_ACTIVE_BIT, &port->flags)) {
2221 @@ -2946,6 +2994,32 @@ restart_eh:
2222 if (test_bit(MTIP_PF_EH_ACTIVE_BIT, &port->flags))
2223 goto restart_eh;
2224
2225 + if (test_bit(MTIP_PF_TO_ACTIVE_BIT, &port->flags)) {
2226 + to = jiffies + msecs_to_jiffies(5000);
2227 +
2228 + do {
2229 + mdelay(100);
2230 + } while (atomic_read(&dd->irq_workers_active) != 0 &&
2231 + time_before(jiffies, to));
2232 +
2233 + if (atomic_read(&dd->irq_workers_active) != 0)
2234 + dev_warn(&dd->pdev->dev,
2235 + "Completion workers still active!");
2236 +
2237 + spin_lock(dd->queue->queue_lock);
2238 + blk_mq_all_tag_busy_iter(*dd->tags.tags,
2239 + mtip_queue_cmd, dd);
2240 + spin_unlock(dd->queue->queue_lock);
2241 +
2242 + set_bit(MTIP_PF_ISSUE_CMDS_BIT, &dd->port->flags);
2243 +
2244 + if (mtip_device_reset(dd))
2245 + blk_mq_all_tag_busy_iter(*dd->tags.tags,
2246 + mtip_abort_cmd, dd);
2247 +
2248 + clear_bit(MTIP_PF_TO_ACTIVE_BIT, &dd->port->flags);
2249 + }
2250 +
2251 if (test_bit(MTIP_PF_ISSUE_CMDS_BIT, &port->flags)) {
2252 slot = 1;
2253 /* used to restrict the loop to one iteration */
2254 @@ -2978,10 +3052,8 @@ restart_eh:
2255 }
2256
2257 if (test_bit(MTIP_PF_REBUILD_BIT, &port->flags)) {
2258 - if (mtip_ftl_rebuild_poll(dd) < 0)
2259 - set_bit(MTIP_DDF_REBUILD_FAILED_BIT,
2260 - &dd->dd_flag);
2261 - clear_bit(MTIP_PF_REBUILD_BIT, &port->flags);
2262 + if (mtip_ftl_rebuild_poll(dd) == 0)
2263 + clear_bit(MTIP_PF_REBUILD_BIT, &port->flags);
2264 }
2265 }
2266
2267 @@ -3096,7 +3168,7 @@ static int mtip_hw_get_identify(struct driver_data *dd)
2268 if (buf[288] == 0xBF) {
2269 dev_info(&dd->pdev->dev,
2270 "Drive indicates rebuild has failed.\n");
2271 - /* TODO */
2272 + set_bit(MTIP_DDF_REBUILD_FAILED_BIT, &dd->dd_flag);
2273 }
2274 }
2275
2276 @@ -3270,20 +3342,25 @@ out1:
2277 return rv;
2278 }
2279
2280 -static void mtip_standby_drive(struct driver_data *dd)
2281 +static int mtip_standby_drive(struct driver_data *dd)
2282 {
2283 - if (dd->sr)
2284 - return;
2285 + int rv = 0;
2286
2287 + if (dd->sr || !dd->port)
2288 + return -ENODEV;
2289 /*
2290 * Send standby immediate (E0h) to the drive so that it
2291 * saves its state.
2292 */
2293 if (!test_bit(MTIP_PF_REBUILD_BIT, &dd->port->flags) &&
2294 - !test_bit(MTIP_DDF_SEC_LOCK_BIT, &dd->dd_flag))
2295 - if (mtip_standby_immediate(dd->port))
2296 + !test_bit(MTIP_DDF_REBUILD_FAILED_BIT, &dd->dd_flag) &&
2297 + !test_bit(MTIP_DDF_SEC_LOCK_BIT, &dd->dd_flag)) {
2298 + rv = mtip_standby_immediate(dd->port);
2299 + if (rv)
2300 dev_warn(&dd->pdev->dev,
2301 "STANDBY IMMEDIATE failed\n");
2302 + }
2303 + return rv;
2304 }
2305
2306 /*
2307 @@ -3296,10 +3373,6 @@ static void mtip_standby_drive(struct driver_data *dd)
2308 */
2309 static int mtip_hw_exit(struct driver_data *dd)
2310 {
2311 - /*
2312 - * Send standby immediate (E0h) to the drive so that it
2313 - * saves its state.
2314 - */
2315 if (!dd->sr) {
2316 /* de-initialize the port. */
2317 mtip_deinit_port(dd->port);
2318 @@ -3341,8 +3414,7 @@ static int mtip_hw_shutdown(struct driver_data *dd)
2319 * Send standby immediate (E0h) to the drive so that it
2320 * saves its state.
2321 */
2322 - if (!dd->sr && dd->port)
2323 - mtip_standby_immediate(dd->port);
2324 + mtip_standby_drive(dd);
2325
2326 return 0;
2327 }
2328 @@ -3365,7 +3437,7 @@ static int mtip_hw_suspend(struct driver_data *dd)
2329 * Send standby immediate (E0h) to the drive
2330 * so that it saves its state.
2331 */
2332 - if (mtip_standby_immediate(dd->port) != 0) {
2333 + if (mtip_standby_drive(dd) != 0) {
2334 dev_err(&dd->pdev->dev,
2335 "Failed standby-immediate command\n");
2336 return -EFAULT;
2337 @@ -3603,6 +3675,28 @@ static int mtip_block_getgeo(struct block_device *dev,
2338 return 0;
2339 }
2340
2341 +static int mtip_block_open(struct block_device *dev, fmode_t mode)
2342 +{
2343 + struct driver_data *dd;
2344 +
2345 + if (dev && dev->bd_disk) {
2346 + dd = (struct driver_data *) dev->bd_disk->private_data;
2347 +
2348 + if (dd) {
2349 + if (test_bit(MTIP_DDF_REMOVAL_BIT,
2350 + &dd->dd_flag)) {
2351 + return -ENODEV;
2352 + }
2353 + return 0;
2354 + }
2355 + }
2356 + return -ENODEV;
2357 +}
2358 +
2359 +void mtip_block_release(struct gendisk *disk, fmode_t mode)
2360 +{
2361 +}
2362 +
2363 /*
2364 * Block device operation function.
2365 *
2366 @@ -3610,6 +3704,8 @@ static int mtip_block_getgeo(struct block_device *dev,
2367 * layer.
2368 */
2369 static const struct block_device_operations mtip_block_ops = {
2370 + .open = mtip_block_open,
2371 + .release = mtip_block_release,
2372 .ioctl = mtip_block_ioctl,
2373 #ifdef CONFIG_COMPAT
2374 .compat_ioctl = mtip_block_compat_ioctl,
2375 @@ -3671,10 +3767,9 @@ static int mtip_submit_request(struct blk_mq_hw_ctx *hctx, struct request *rq)
2376 rq_data_dir(rq))) {
2377 return -ENODATA;
2378 }
2379 - if (unlikely(test_bit(MTIP_DDF_SEC_LOCK_BIT, &dd->dd_flag)))
2380 + if (unlikely(test_bit(MTIP_DDF_SEC_LOCK_BIT, &dd->dd_flag) ||
2381 + test_bit(MTIP_DDF_REBUILD_FAILED_BIT, &dd->dd_flag)))
2382 return -ENODATA;
2383 - if (test_bit(MTIP_DDF_REBUILD_FAILED_BIT, &dd->dd_flag))
2384 - return -ENXIO;
2385 }
2386
2387 if (rq->cmd_flags & REQ_DISCARD) {
2388 @@ -3786,11 +3881,33 @@ static int mtip_init_cmd(void *data, struct request *rq, unsigned int hctx_idx,
2389 return 0;
2390 }
2391
2392 +static enum blk_eh_timer_return mtip_cmd_timeout(struct request *req,
2393 + bool reserved)
2394 +{
2395 + struct driver_data *dd = req->q->queuedata;
2396 + int ret = BLK_EH_RESET_TIMER;
2397 +
2398 + if (reserved)
2399 + goto exit_handler;
2400 +
2401 + if (test_bit(req->tag, dd->port->cmds_to_issue))
2402 + goto exit_handler;
2403 +
2404 + if (test_and_set_bit(MTIP_PF_TO_ACTIVE_BIT, &dd->port->flags))
2405 + goto exit_handler;
2406 +
2407 + wake_up_interruptible(&dd->port->svc_wait);
2408 +exit_handler:
2409 + return ret;
2410 +}
2411 +
2412 static struct blk_mq_ops mtip_mq_ops = {
2413 .queue_rq = mtip_queue_rq,
2414 .map_queue = blk_mq_map_queue,
2415 .init_request = mtip_init_cmd,
2416 .exit_request = mtip_free_cmd,
2417 + .complete = mtip_softirq_done_fn,
2418 + .timeout = mtip_cmd_timeout,
2419 };
2420
2421 /*
2422 @@ -3857,7 +3974,6 @@ static int mtip_block_initialize(struct driver_data *dd)
2423
2424 mtip_hw_debugfs_init(dd);
2425
2426 -skip_create_disk:
2427 memset(&dd->tags, 0, sizeof(dd->tags));
2428 dd->tags.ops = &mtip_mq_ops;
2429 dd->tags.nr_hw_queues = 1;
2430 @@ -3867,12 +3983,13 @@ skip_create_disk:
2431 dd->tags.numa_node = dd->numa_node;
2432 dd->tags.flags = BLK_MQ_F_SHOULD_MERGE;
2433 dd->tags.driver_data = dd;
2434 + dd->tags.timeout = MTIP_NCQ_CMD_TIMEOUT_MS;
2435
2436 rv = blk_mq_alloc_tag_set(&dd->tags);
2437 if (rv) {
2438 dev_err(&dd->pdev->dev,
2439 "Unable to allocate request queue\n");
2440 - goto block_queue_alloc_init_error;
2441 + goto block_queue_alloc_tag_error;
2442 }
2443
2444 /* Allocate the request queue. */
2445 @@ -3887,6 +4004,7 @@ skip_create_disk:
2446 dd->disk->queue = dd->queue;
2447 dd->queue->queuedata = dd;
2448
2449 +skip_create_disk:
2450 /* Initialize the protocol layer. */
2451 wait_for_rebuild = mtip_hw_get_identify(dd);
2452 if (wait_for_rebuild < 0) {
2453 @@ -3983,8 +4101,9 @@ kthread_run_error:
2454 read_capacity_error:
2455 init_hw_cmds_error:
2456 blk_cleanup_queue(dd->queue);
2457 - blk_mq_free_tag_set(&dd->tags);
2458 block_queue_alloc_init_error:
2459 + blk_mq_free_tag_set(&dd->tags);
2460 +block_queue_alloc_tag_error:
2461 mtip_hw_debugfs_exit(dd);
2462 disk_index_error:
2463 spin_lock(&rssd_index_lock);
2464 @@ -4001,6 +4120,22 @@ protocol_init_error:
2465 return rv;
2466 }
2467
2468 +static void mtip_no_dev_cleanup(struct request *rq, void *data, bool reserv)
2469 +{
2470 + struct driver_data *dd = (struct driver_data *)data;
2471 + struct mtip_cmd *cmd;
2472 +
2473 + if (likely(!reserv))
2474 + blk_mq_complete_request(rq, -ENODEV);
2475 + else if (test_bit(MTIP_PF_IC_ACTIVE_BIT, &dd->port->flags)) {
2476 +
2477 + cmd = mtip_cmd_from_tag(dd, MTIP_TAG_INTERNAL);
2478 + if (cmd->comp_func)
2479 + cmd->comp_func(dd->port, MTIP_TAG_INTERNAL,
2480 + cmd, -ENODEV);
2481 + }
2482 +}
2483 +
2484 /*
2485 * Block layer deinitialization function.
2486 *
2487 @@ -4032,12 +4167,23 @@ static int mtip_block_remove(struct driver_data *dd)
2488 }
2489 }
2490
2491 - if (!dd->sr)
2492 - mtip_standby_drive(dd);
2493 + if (!dd->sr) {
2494 + /*
2495 + * Explicitly wait here for IOs to quiesce,
2496 + * as mtip_standby_drive usually won't wait for IOs.
2497 + */
2498 + if (!mtip_quiesce_io(dd->port, MTIP_QUIESCE_IO_TIMEOUT_MS,
2499 + GFP_KERNEL))
2500 + mtip_standby_drive(dd);
2501 + }
2502 else
2503 dev_info(&dd->pdev->dev, "device %s surprise removal\n",
2504 dd->disk->disk_name);
2505
2506 + blk_mq_freeze_queue_start(dd->queue);
2507 + blk_mq_stop_hw_queues(dd->queue);
2508 + blk_mq_all_tag_busy_iter(dd->tags.tags[0], mtip_no_dev_cleanup, dd);
2509 +
2510 /*
2511 * Delete our gendisk structure. This also removes the device
2512 * from /dev
2513 @@ -4047,7 +4193,8 @@ static int mtip_block_remove(struct driver_data *dd)
2514 dd->bdev = NULL;
2515 }
2516 if (dd->disk) {
2517 - del_gendisk(dd->disk);
2518 + if (test_bit(MTIP_DDF_INIT_DONE_BIT, &dd->dd_flag))
2519 + del_gendisk(dd->disk);
2520 if (dd->disk->queue) {
2521 blk_cleanup_queue(dd->queue);
2522 blk_mq_free_tag_set(&dd->tags);
2523 @@ -4088,7 +4235,8 @@ static int mtip_block_shutdown(struct driver_data *dd)
2524 dev_info(&dd->pdev->dev,
2525 "Shutting down %s ...\n", dd->disk->disk_name);
2526
2527 - del_gendisk(dd->disk);
2528 + if (test_bit(MTIP_DDF_INIT_DONE_BIT, &dd->dd_flag))
2529 + del_gendisk(dd->disk);
2530 if (dd->disk->queue) {
2531 blk_cleanup_queue(dd->queue);
2532 blk_mq_free_tag_set(&dd->tags);
2533 @@ -4433,7 +4581,7 @@ static void mtip_pci_remove(struct pci_dev *pdev)
2534 struct driver_data *dd = pci_get_drvdata(pdev);
2535 unsigned long flags, to;
2536
2537 - set_bit(MTIP_DDF_REMOVE_PENDING_BIT, &dd->dd_flag);
2538 + set_bit(MTIP_DDF_REMOVAL_BIT, &dd->dd_flag);
2539
2540 spin_lock_irqsave(&dev_lock, flags);
2541 list_del_init(&dd->online_list);
2542 @@ -4450,12 +4598,17 @@ static void mtip_pci_remove(struct pci_dev *pdev)
2543 } while (atomic_read(&dd->irq_workers_active) != 0 &&
2544 time_before(jiffies, to));
2545
2546 + if (!dd->sr)
2547 + fsync_bdev(dd->bdev);
2548 +
2549 if (atomic_read(&dd->irq_workers_active) != 0) {
2550 dev_warn(&dd->pdev->dev,
2551 "Completion workers still active!\n");
2552 }
2553
2554 - blk_mq_stop_hw_queues(dd->queue);
2555 + blk_set_queue_dying(dd->queue);
2556 + set_bit(MTIP_DDF_REMOVE_PENDING_BIT, &dd->dd_flag);
2557 +
2558 /* Clean up the block layer. */
2559 mtip_block_remove(dd);
2560
2561 diff --git a/drivers/block/mtip32xx/mtip32xx.h b/drivers/block/mtip32xx/mtip32xx.h
2562 index 3274784008eb..7617888f7944 100644
2563 --- a/drivers/block/mtip32xx/mtip32xx.h
2564 +++ b/drivers/block/mtip32xx/mtip32xx.h
2565 @@ -134,16 +134,24 @@ enum {
2566 MTIP_PF_EH_ACTIVE_BIT = 1, /* error handling */
2567 MTIP_PF_SE_ACTIVE_BIT = 2, /* secure erase */
2568 MTIP_PF_DM_ACTIVE_BIT = 3, /* download microcde */
2569 + MTIP_PF_TO_ACTIVE_BIT = 9, /* timeout handling */
2570 MTIP_PF_PAUSE_IO = ((1 << MTIP_PF_IC_ACTIVE_BIT) |
2571 (1 << MTIP_PF_EH_ACTIVE_BIT) |
2572 (1 << MTIP_PF_SE_ACTIVE_BIT) |
2573 - (1 << MTIP_PF_DM_ACTIVE_BIT)),
2574 + (1 << MTIP_PF_DM_ACTIVE_BIT) |
2575 + (1 << MTIP_PF_TO_ACTIVE_BIT)),
2576
2577 MTIP_PF_SVC_THD_ACTIVE_BIT = 4,
2578 MTIP_PF_ISSUE_CMDS_BIT = 5,
2579 MTIP_PF_REBUILD_BIT = 6,
2580 MTIP_PF_SVC_THD_STOP_BIT = 8,
2581
2582 + MTIP_PF_SVC_THD_WORK = ((1 << MTIP_PF_EH_ACTIVE_BIT) |
2583 + (1 << MTIP_PF_ISSUE_CMDS_BIT) |
2584 + (1 << MTIP_PF_REBUILD_BIT) |
2585 + (1 << MTIP_PF_SVC_THD_STOP_BIT) |
2586 + (1 << MTIP_PF_TO_ACTIVE_BIT)),
2587 +
2588 /* below are bit numbers in 'dd_flag' defined in driver_data */
2589 MTIP_DDF_SEC_LOCK_BIT = 0,
2590 MTIP_DDF_REMOVE_PENDING_BIT = 1,
2591 @@ -153,6 +161,7 @@ enum {
2592 MTIP_DDF_RESUME_BIT = 6,
2593 MTIP_DDF_INIT_DONE_BIT = 7,
2594 MTIP_DDF_REBUILD_FAILED_BIT = 8,
2595 + MTIP_DDF_REMOVAL_BIT = 9,
2596
2597 MTIP_DDF_STOP_IO = ((1 << MTIP_DDF_REMOVE_PENDING_BIT) |
2598 (1 << MTIP_DDF_SEC_LOCK_BIT) |
2599 diff --git a/drivers/bluetooth/ath3k.c b/drivers/bluetooth/ath3k.c
2600 index fa893c3ec408..0beaa52df66b 100644
2601 --- a/drivers/bluetooth/ath3k.c
2602 +++ b/drivers/bluetooth/ath3k.c
2603 @@ -82,6 +82,7 @@ static const struct usb_device_id ath3k_table[] = {
2604 { USB_DEVICE(0x0489, 0xe05f) },
2605 { USB_DEVICE(0x0489, 0xe076) },
2606 { USB_DEVICE(0x0489, 0xe078) },
2607 + { USB_DEVICE(0x0489, 0xe095) },
2608 { USB_DEVICE(0x04c5, 0x1330) },
2609 { USB_DEVICE(0x04CA, 0x3004) },
2610 { USB_DEVICE(0x04CA, 0x3005) },
2611 @@ -92,6 +93,7 @@ static const struct usb_device_id ath3k_table[] = {
2612 { USB_DEVICE(0x04CA, 0x300d) },
2613 { USB_DEVICE(0x04CA, 0x300f) },
2614 { USB_DEVICE(0x04CA, 0x3010) },
2615 + { USB_DEVICE(0x04CA, 0x3014) },
2616 { USB_DEVICE(0x0930, 0x0219) },
2617 { USB_DEVICE(0x0930, 0x021c) },
2618 { USB_DEVICE(0x0930, 0x0220) },
2619 @@ -113,10 +115,12 @@ static const struct usb_device_id ath3k_table[] = {
2620 { USB_DEVICE(0x13d3, 0x3362) },
2621 { USB_DEVICE(0x13d3, 0x3375) },
2622 { USB_DEVICE(0x13d3, 0x3393) },
2623 + { USB_DEVICE(0x13d3, 0x3395) },
2624 { USB_DEVICE(0x13d3, 0x3402) },
2625 { USB_DEVICE(0x13d3, 0x3408) },
2626 { USB_DEVICE(0x13d3, 0x3423) },
2627 { USB_DEVICE(0x13d3, 0x3432) },
2628 + { USB_DEVICE(0x13d3, 0x3472) },
2629 { USB_DEVICE(0x13d3, 0x3474) },
2630
2631 /* Atheros AR5BBU12 with sflash firmware */
2632 @@ -144,6 +148,7 @@ static const struct usb_device_id ath3k_blist_tbl[] = {
2633 { USB_DEVICE(0x0489, 0xe05f), .driver_info = BTUSB_ATH3012 },
2634 { USB_DEVICE(0x0489, 0xe076), .driver_info = BTUSB_ATH3012 },
2635 { USB_DEVICE(0x0489, 0xe078), .driver_info = BTUSB_ATH3012 },
2636 + { USB_DEVICE(0x0489, 0xe095), .driver_info = BTUSB_ATH3012 },
2637 { USB_DEVICE(0x04c5, 0x1330), .driver_info = BTUSB_ATH3012 },
2638 { USB_DEVICE(0x04ca, 0x3004), .driver_info = BTUSB_ATH3012 },
2639 { USB_DEVICE(0x04ca, 0x3005), .driver_info = BTUSB_ATH3012 },
2640 @@ -154,6 +159,7 @@ static const struct usb_device_id ath3k_blist_tbl[] = {
2641 { USB_DEVICE(0x04ca, 0x300d), .driver_info = BTUSB_ATH3012 },
2642 { USB_DEVICE(0x04ca, 0x300f), .driver_info = BTUSB_ATH3012 },
2643 { USB_DEVICE(0x04ca, 0x3010), .driver_info = BTUSB_ATH3012 },
2644 + { USB_DEVICE(0x04ca, 0x3014), .driver_info = BTUSB_ATH3012 },
2645 { USB_DEVICE(0x0930, 0x0219), .driver_info = BTUSB_ATH3012 },
2646 { USB_DEVICE(0x0930, 0x021c), .driver_info = BTUSB_ATH3012 },
2647 { USB_DEVICE(0x0930, 0x0220), .driver_info = BTUSB_ATH3012 },
2648 @@ -175,10 +181,12 @@ static const struct usb_device_id ath3k_blist_tbl[] = {
2649 { USB_DEVICE(0x13d3, 0x3362), .driver_info = BTUSB_ATH3012 },
2650 { USB_DEVICE(0x13d3, 0x3375), .driver_info = BTUSB_ATH3012 },
2651 { USB_DEVICE(0x13d3, 0x3393), .driver_info = BTUSB_ATH3012 },
2652 + { USB_DEVICE(0x13d3, 0x3395), .driver_info = BTUSB_ATH3012 },
2653 { USB_DEVICE(0x13d3, 0x3402), .driver_info = BTUSB_ATH3012 },
2654 { USB_DEVICE(0x13d3, 0x3408), .driver_info = BTUSB_ATH3012 },
2655 { USB_DEVICE(0x13d3, 0x3423), .driver_info = BTUSB_ATH3012 },
2656 { USB_DEVICE(0x13d3, 0x3432), .driver_info = BTUSB_ATH3012 },
2657 + { USB_DEVICE(0x13d3, 0x3472), .driver_info = BTUSB_ATH3012 },
2658 { USB_DEVICE(0x13d3, 0x3474), .driver_info = BTUSB_ATH3012 },
2659
2660 /* Atheros AR5BBU22 with sflash firmware */
2661 diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
2662 index 968897108c76..79107597a594 100644
2663 --- a/drivers/bluetooth/btusb.c
2664 +++ b/drivers/bluetooth/btusb.c
2665 @@ -196,6 +196,7 @@ static const struct usb_device_id blacklist_table[] = {
2666 { USB_DEVICE(0x0489, 0xe05f), .driver_info = BTUSB_ATH3012 },
2667 { USB_DEVICE(0x0489, 0xe076), .driver_info = BTUSB_ATH3012 },
2668 { USB_DEVICE(0x0489, 0xe078), .driver_info = BTUSB_ATH3012 },
2669 + { USB_DEVICE(0x0489, 0xe095), .driver_info = BTUSB_ATH3012 },
2670 { USB_DEVICE(0x04c5, 0x1330), .driver_info = BTUSB_ATH3012 },
2671 { USB_DEVICE(0x04ca, 0x3004), .driver_info = BTUSB_ATH3012 },
2672 { USB_DEVICE(0x04ca, 0x3005), .driver_info = BTUSB_ATH3012 },
2673 @@ -206,6 +207,7 @@ static const struct usb_device_id blacklist_table[] = {
2674 { USB_DEVICE(0x04ca, 0x300d), .driver_info = BTUSB_ATH3012 },
2675 { USB_DEVICE(0x04ca, 0x300f), .driver_info = BTUSB_ATH3012 },
2676 { USB_DEVICE(0x04ca, 0x3010), .driver_info = BTUSB_ATH3012 },
2677 + { USB_DEVICE(0x04ca, 0x3014), .driver_info = BTUSB_ATH3012 },
2678 { USB_DEVICE(0x0930, 0x0219), .driver_info = BTUSB_ATH3012 },
2679 { USB_DEVICE(0x0930, 0x021c), .driver_info = BTUSB_ATH3012 },
2680 { USB_DEVICE(0x0930, 0x0220), .driver_info = BTUSB_ATH3012 },
2681 @@ -227,10 +229,12 @@ static const struct usb_device_id blacklist_table[] = {
2682 { USB_DEVICE(0x13d3, 0x3362), .driver_info = BTUSB_ATH3012 },
2683 { USB_DEVICE(0x13d3, 0x3375), .driver_info = BTUSB_ATH3012 },
2684 { USB_DEVICE(0x13d3, 0x3393), .driver_info = BTUSB_ATH3012 },
2685 + { USB_DEVICE(0x13d3, 0x3395), .driver_info = BTUSB_ATH3012 },
2686 { USB_DEVICE(0x13d3, 0x3402), .driver_info = BTUSB_ATH3012 },
2687 { USB_DEVICE(0x13d3, 0x3408), .driver_info = BTUSB_ATH3012 },
2688 { USB_DEVICE(0x13d3, 0x3423), .driver_info = BTUSB_ATH3012 },
2689 { USB_DEVICE(0x13d3, 0x3432), .driver_info = BTUSB_ATH3012 },
2690 + { USB_DEVICE(0x13d3, 0x3472), .driver_info = BTUSB_ATH3012 },
2691 { USB_DEVICE(0x13d3, 0x3474), .driver_info = BTUSB_ATH3012 },
2692
2693 /* Atheros AR5BBU12 with sflash firmware */
2694 diff --git a/drivers/char/tpm/tpm-chip.c b/drivers/char/tpm/tpm-chip.c
2695 index 45cc39aabeee..252142524ff2 100644
2696 --- a/drivers/char/tpm/tpm-chip.c
2697 +++ b/drivers/char/tpm/tpm-chip.c
2698 @@ -136,11 +136,13 @@ struct tpm_chip *tpmm_chip_alloc(struct device *dev,
2699 chip->cdev.owner = chip->pdev->driver->owner;
2700 chip->cdev.kobj.parent = &chip->dev.kobj;
2701
2702 + devm_add_action(dev, (void (*)(void *)) put_device, &chip->dev);
2703 +
2704 return chip;
2705 }
2706 EXPORT_SYMBOL_GPL(tpmm_chip_alloc);
2707
2708 -static int tpm_dev_add_device(struct tpm_chip *chip)
2709 +static int tpm_add_char_device(struct tpm_chip *chip)
2710 {
2711 int rc;
2712
2713 @@ -151,7 +153,6 @@ static int tpm_dev_add_device(struct tpm_chip *chip)
2714 chip->devname, MAJOR(chip->dev.devt),
2715 MINOR(chip->dev.devt), rc);
2716
2717 - device_unregister(&chip->dev);
2718 return rc;
2719 }
2720
2721 @@ -162,16 +163,17 @@ static int tpm_dev_add_device(struct tpm_chip *chip)
2722 chip->devname, MAJOR(chip->dev.devt),
2723 MINOR(chip->dev.devt), rc);
2724
2725 + cdev_del(&chip->cdev);
2726 return rc;
2727 }
2728
2729 return rc;
2730 }
2731
2732 -static void tpm_dev_del_device(struct tpm_chip *chip)
2733 +static void tpm_del_char_device(struct tpm_chip *chip)
2734 {
2735 cdev_del(&chip->cdev);
2736 - device_unregister(&chip->dev);
2737 + device_del(&chip->dev);
2738 }
2739
2740 static int tpm1_chip_register(struct tpm_chip *chip)
2741 @@ -222,7 +224,7 @@ int tpm_chip_register(struct tpm_chip *chip)
2742
2743 tpm_add_ppi(chip);
2744
2745 - rc = tpm_dev_add_device(chip);
2746 + rc = tpm_add_char_device(chip);
2747 if (rc)
2748 goto out_err;
2749
2750 @@ -274,6 +276,6 @@ void tpm_chip_unregister(struct tpm_chip *chip)
2751 sysfs_remove_link(&chip->pdev->kobj, "ppi");
2752
2753 tpm1_chip_unregister(chip);
2754 - tpm_dev_del_device(chip);
2755 + tpm_del_char_device(chip);
2756 }
2757 EXPORT_SYMBOL_GPL(tpm_chip_unregister);
2758 diff --git a/drivers/char/tpm/tpm_crb.c b/drivers/char/tpm/tpm_crb.c
2759 index 4bb9727c1047..61e64293b765 100644
2760 --- a/drivers/char/tpm/tpm_crb.c
2761 +++ b/drivers/char/tpm/tpm_crb.c
2762 @@ -310,11 +310,11 @@ static int crb_acpi_remove(struct acpi_device *device)
2763 struct device *dev = &device->dev;
2764 struct tpm_chip *chip = dev_get_drvdata(dev);
2765
2766 - tpm_chip_unregister(chip);
2767 -
2768 if (chip->flags & TPM_CHIP_FLAG_TPM2)
2769 tpm2_shutdown(chip, TPM2_SU_CLEAR);
2770
2771 + tpm_chip_unregister(chip);
2772 +
2773 return 0;
2774 }
2775
2776 diff --git a/drivers/char/tpm/tpm_eventlog.c b/drivers/char/tpm/tpm_eventlog.c
2777 index bd72fb04225e..4e6940acf639 100644
2778 --- a/drivers/char/tpm/tpm_eventlog.c
2779 +++ b/drivers/char/tpm/tpm_eventlog.c
2780 @@ -232,7 +232,7 @@ static int tpm_binary_bios_measurements_show(struct seq_file *m, void *v)
2781 {
2782 struct tcpa_event *event = v;
2783 struct tcpa_event temp_event;
2784 - char *tempPtr;
2785 + char *temp_ptr;
2786 int i;
2787
2788 memcpy(&temp_event, event, sizeof(struct tcpa_event));
2789 @@ -242,10 +242,16 @@ static int tpm_binary_bios_measurements_show(struct seq_file *m, void *v)
2790 temp_event.event_type = do_endian_conversion(event->event_type);
2791 temp_event.event_size = do_endian_conversion(event->event_size);
2792
2793 - tempPtr = (char *)&temp_event;
2794 + temp_ptr = (char *) &temp_event;
2795
2796 - for (i = 0; i < sizeof(struct tcpa_event) + temp_event.event_size; i++)
2797 - seq_putc(m, tempPtr[i]);
2798 + for (i = 0; i < (sizeof(struct tcpa_event) - 1) ; i++)
2799 + seq_putc(m, temp_ptr[i]);
2800 +
2801 + temp_ptr = (char *) v;
2802 +
2803 + for (i = (sizeof(struct tcpa_event) - 1);
2804 + i < (sizeof(struct tcpa_event) + temp_event.event_size); i++)
2805 + seq_putc(m, temp_ptr[i]);
2806
2807 return 0;
2808
2809 diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c
2810 index 39bf5820297e..4f9830c1b121 100644
2811 --- a/drivers/clk/bcm/clk-bcm2835.c
2812 +++ b/drivers/clk/bcm/clk-bcm2835.c
2813 @@ -1097,13 +1097,15 @@ static int bcm2835_pll_divider_set_rate(struct clk_hw *hw,
2814 struct bcm2835_pll_divider *divider = bcm2835_pll_divider_from_hw(hw);
2815 struct bcm2835_cprman *cprman = divider->cprman;
2816 const struct bcm2835_pll_divider_data *data = divider->data;
2817 - u32 cm;
2818 - int ret;
2819 + u32 cm, div, max_div = 1 << A2W_PLL_DIV_BITS;
2820
2821 - ret = clk_divider_ops.set_rate(hw, rate, parent_rate);
2822 - if (ret)
2823 - return ret;
2824 + div = DIV_ROUND_UP_ULL(parent_rate, rate);
2825 +
2826 + div = min(div, max_div);
2827 + if (div == max_div)
2828 + div = 0;
2829
2830 + cprman_write(cprman, data->a2w_reg, div);
2831 cm = cprman_read(cprman, data->cm_reg);
2832 cprman_write(cprman, data->cm_reg, cm | data->load_mask);
2833 cprman_write(cprman, data->cm_reg, cm & ~data->load_mask);
2834 diff --git a/drivers/clk/rockchip/clk-rk3188.c b/drivers/clk/rockchip/clk-rk3188.c
2835 index abb47608713b..fe728f8dcbe4 100644
2836 --- a/drivers/clk/rockchip/clk-rk3188.c
2837 +++ b/drivers/clk/rockchip/clk-rk3188.c
2838 @@ -718,6 +718,7 @@ static const char *const rk3188_critical_clocks[] __initconst = {
2839 "hclk_peri",
2840 "pclk_cpu",
2841 "pclk_peri",
2842 + "hclk_cpubus"
2843 };
2844
2845 static void __init rk3188_common_clk_init(struct device_node *np)
2846 diff --git a/drivers/clk/rockchip/clk-rk3368.c b/drivers/clk/rockchip/clk-rk3368.c
2847 index 7e6b783e6eee..1b148694b633 100644
2848 --- a/drivers/clk/rockchip/clk-rk3368.c
2849 +++ b/drivers/clk/rockchip/clk-rk3368.c
2850 @@ -165,7 +165,7 @@ static const struct rockchip_cpuclk_reg_data rk3368_cpuclkb_data = {
2851 .core_reg = RK3368_CLKSEL_CON(0),
2852 .div_core_shift = 0,
2853 .div_core_mask = 0x1f,
2854 - .mux_core_shift = 15,
2855 + .mux_core_shift = 7,
2856 };
2857
2858 static const struct rockchip_cpuclk_reg_data rk3368_cpuclkl_data = {
2859 @@ -218,29 +218,29 @@ static const struct rockchip_cpuclk_reg_data rk3368_cpuclkl_data = {
2860 }
2861
2862 static struct rockchip_cpuclk_rate_table rk3368_cpuclkb_rates[] __initdata = {
2863 - RK3368_CPUCLKB_RATE(1512000000, 2, 6, 6),
2864 - RK3368_CPUCLKB_RATE(1488000000, 2, 5, 5),
2865 - RK3368_CPUCLKB_RATE(1416000000, 2, 5, 5),
2866 - RK3368_CPUCLKB_RATE(1200000000, 2, 4, 4),
2867 - RK3368_CPUCLKB_RATE(1008000000, 2, 4, 4),
2868 - RK3368_CPUCLKB_RATE( 816000000, 2, 3, 3),
2869 - RK3368_CPUCLKB_RATE( 696000000, 2, 3, 3),
2870 - RK3368_CPUCLKB_RATE( 600000000, 2, 2, 2),
2871 - RK3368_CPUCLKB_RATE( 408000000, 2, 2, 2),
2872 - RK3368_CPUCLKB_RATE( 312000000, 2, 2, 2),
2873 + RK3368_CPUCLKB_RATE(1512000000, 1, 5, 5),
2874 + RK3368_CPUCLKB_RATE(1488000000, 1, 4, 4),
2875 + RK3368_CPUCLKB_RATE(1416000000, 1, 4, 4),
2876 + RK3368_CPUCLKB_RATE(1200000000, 1, 3, 3),
2877 + RK3368_CPUCLKB_RATE(1008000000, 1, 3, 3),
2878 + RK3368_CPUCLKB_RATE( 816000000, 1, 2, 2),
2879 + RK3368_CPUCLKB_RATE( 696000000, 1, 2, 2),
2880 + RK3368_CPUCLKB_RATE( 600000000, 1, 1, 1),
2881 + RK3368_CPUCLKB_RATE( 408000000, 1, 1, 1),
2882 + RK3368_CPUCLKB_RATE( 312000000, 1, 1, 1),
2883 };
2884
2885 static struct rockchip_cpuclk_rate_table rk3368_cpuclkl_rates[] __initdata = {
2886 - RK3368_CPUCLKL_RATE(1512000000, 2, 7, 7),
2887 - RK3368_CPUCLKL_RATE(1488000000, 2, 6, 6),
2888 - RK3368_CPUCLKL_RATE(1416000000, 2, 6, 6),
2889 - RK3368_CPUCLKL_RATE(1200000000, 2, 5, 5),
2890 - RK3368_CPUCLKL_RATE(1008000000, 2, 5, 5),
2891 - RK3368_CPUCLKL_RATE( 816000000, 2, 4, 4),
2892 - RK3368_CPUCLKL_RATE( 696000000, 2, 3, 3),
2893 - RK3368_CPUCLKL_RATE( 600000000, 2, 3, 3),
2894 - RK3368_CPUCLKL_RATE( 408000000, 2, 2, 2),
2895 - RK3368_CPUCLKL_RATE( 312000000, 2, 2, 2),
2896 + RK3368_CPUCLKL_RATE(1512000000, 1, 6, 6),
2897 + RK3368_CPUCLKL_RATE(1488000000, 1, 5, 5),
2898 + RK3368_CPUCLKL_RATE(1416000000, 1, 5, 5),
2899 + RK3368_CPUCLKL_RATE(1200000000, 1, 4, 4),
2900 + RK3368_CPUCLKL_RATE(1008000000, 1, 4, 4),
2901 + RK3368_CPUCLKL_RATE( 816000000, 1, 3, 3),
2902 + RK3368_CPUCLKL_RATE( 696000000, 1, 2, 2),
2903 + RK3368_CPUCLKL_RATE( 600000000, 1, 2, 2),
2904 + RK3368_CPUCLKL_RATE( 408000000, 1, 1, 1),
2905 + RK3368_CPUCLKL_RATE( 312000000, 1, 1, 1),
2906 };
2907
2908 static struct rockchip_clk_branch rk3368_clk_branches[] __initdata = {
2909 @@ -384,10 +384,10 @@ static struct rockchip_clk_branch rk3368_clk_branches[] __initdata = {
2910 * Clock-Architecture Diagram 3
2911 */
2912
2913 - COMPOSITE(0, "aclk_vepu", mux_pll_src_cpll_gpll_usb_p, 0,
2914 + COMPOSITE(0, "aclk_vepu", mux_pll_src_cpll_gpll_npll_usb_p, 0,
2915 RK3368_CLKSEL_CON(15), 6, 2, MFLAGS, 0, 5, DFLAGS,
2916 RK3368_CLKGATE_CON(4), 6, GFLAGS),
2917 - COMPOSITE(0, "aclk_vdpu", mux_pll_src_cpll_gpll_usb_p, 0,
2918 + COMPOSITE(0, "aclk_vdpu", mux_pll_src_cpll_gpll_npll_usb_p, 0,
2919 RK3368_CLKSEL_CON(15), 14, 2, MFLAGS, 8, 5, DFLAGS,
2920 RK3368_CLKGATE_CON(4), 7, GFLAGS),
2921
2922 @@ -442,7 +442,7 @@ static struct rockchip_clk_branch rk3368_clk_branches[] __initdata = {
2923 GATE(SCLK_HDMI_HDCP, "sclk_hdmi_hdcp", "xin24m", 0,
2924 RK3368_CLKGATE_CON(4), 13, GFLAGS),
2925 GATE(SCLK_HDMI_CEC, "sclk_hdmi_cec", "xin32k", 0,
2926 - RK3368_CLKGATE_CON(5), 12, GFLAGS),
2927 + RK3368_CLKGATE_CON(4), 12, GFLAGS),
2928
2929 COMPOSITE_NODIV(0, "vip_src", mux_pll_src_cpll_gpll_p, 0,
2930 RK3368_CLKSEL_CON(21), 15, 1, MFLAGS,
2931 diff --git a/drivers/crypto/atmel-aes.c b/drivers/crypto/atmel-aes.c
2932 index fb16d812c8f5..1dffb13e5c2f 100644
2933 --- a/drivers/crypto/atmel-aes.c
2934 +++ b/drivers/crypto/atmel-aes.c
2935 @@ -1396,9 +1396,9 @@ static int atmel_aes_probe(struct platform_device *pdev)
2936 }
2937
2938 aes_dd->io_base = devm_ioremap_resource(&pdev->dev, aes_res);
2939 - if (!aes_dd->io_base) {
2940 + if (IS_ERR(aes_dd->io_base)) {
2941 dev_err(dev, "can't ioremap\n");
2942 - err = -ENOMEM;
2943 + err = PTR_ERR(aes_dd->io_base);
2944 goto res_err;
2945 }
2946
2947 diff --git a/drivers/crypto/atmel-sha.c b/drivers/crypto/atmel-sha.c
2948 index 3178f84d2757..0dadb6332f0e 100644
2949 --- a/drivers/crypto/atmel-sha.c
2950 +++ b/drivers/crypto/atmel-sha.c
2951 @@ -1405,9 +1405,9 @@ static int atmel_sha_probe(struct platform_device *pdev)
2952 }
2953
2954 sha_dd->io_base = devm_ioremap_resource(&pdev->dev, sha_res);
2955 - if (!sha_dd->io_base) {
2956 + if (IS_ERR(sha_dd->io_base)) {
2957 dev_err(dev, "can't ioremap\n");
2958 - err = -ENOMEM;
2959 + err = PTR_ERR(sha_dd->io_base);
2960 goto res_err;
2961 }
2962
2963 diff --git a/drivers/crypto/atmel-tdes.c b/drivers/crypto/atmel-tdes.c
2964 index 2c7a628d0375..bf467d7be35c 100644
2965 --- a/drivers/crypto/atmel-tdes.c
2966 +++ b/drivers/crypto/atmel-tdes.c
2967 @@ -1417,9 +1417,9 @@ static int atmel_tdes_probe(struct platform_device *pdev)
2968 }
2969
2970 tdes_dd->io_base = devm_ioremap_resource(&pdev->dev, tdes_res);
2971 - if (!tdes_dd->io_base) {
2972 + if (IS_ERR(tdes_dd->io_base)) {
2973 dev_err(dev, "can't ioremap\n");
2974 - err = -ENOMEM;
2975 + err = PTR_ERR(tdes_dd->io_base);
2976 goto res_err;
2977 }
2978
2979 diff --git a/drivers/crypto/ccp/ccp-crypto-aes-cmac.c b/drivers/crypto/ccp/ccp-crypto-aes-cmac.c
2980 index d89f20c04266..3d9acc53d247 100644
2981 --- a/drivers/crypto/ccp/ccp-crypto-aes-cmac.c
2982 +++ b/drivers/crypto/ccp/ccp-crypto-aes-cmac.c
2983 @@ -220,6 +220,39 @@ static int ccp_aes_cmac_digest(struct ahash_request *req)
2984 return ccp_aes_cmac_finup(req);
2985 }
2986
2987 +static int ccp_aes_cmac_export(struct ahash_request *req, void *out)
2988 +{
2989 + struct ccp_aes_cmac_req_ctx *rctx = ahash_request_ctx(req);
2990 + struct ccp_aes_cmac_exp_ctx state;
2991 +
2992 + state.null_msg = rctx->null_msg;
2993 + memcpy(state.iv, rctx->iv, sizeof(state.iv));
2994 + state.buf_count = rctx->buf_count;
2995 + memcpy(state.buf, rctx->buf, sizeof(state.buf));
2996 +
2997 + /* 'out' may not be aligned so memcpy from local variable */
2998 + memcpy(out, &state, sizeof(state));
2999 +
3000 + return 0;
3001 +}
3002 +
3003 +static int ccp_aes_cmac_import(struct ahash_request *req, const void *in)
3004 +{
3005 + struct ccp_aes_cmac_req_ctx *rctx = ahash_request_ctx(req);
3006 + struct ccp_aes_cmac_exp_ctx state;
3007 +
3008 + /* 'in' may not be aligned so memcpy to local variable */
3009 + memcpy(&state, in, sizeof(state));
3010 +
3011 + memset(rctx, 0, sizeof(*rctx));
3012 + rctx->null_msg = state.null_msg;
3013 + memcpy(rctx->iv, state.iv, sizeof(rctx->iv));
3014 + rctx->buf_count = state.buf_count;
3015 + memcpy(rctx->buf, state.buf, sizeof(rctx->buf));
3016 +
3017 + return 0;
3018 +}
3019 +
3020 static int ccp_aes_cmac_setkey(struct crypto_ahash *tfm, const u8 *key,
3021 unsigned int key_len)
3022 {
3023 @@ -352,10 +385,13 @@ int ccp_register_aes_cmac_algs(struct list_head *head)
3024 alg->final = ccp_aes_cmac_final;
3025 alg->finup = ccp_aes_cmac_finup;
3026 alg->digest = ccp_aes_cmac_digest;
3027 + alg->export = ccp_aes_cmac_export;
3028 + alg->import = ccp_aes_cmac_import;
3029 alg->setkey = ccp_aes_cmac_setkey;
3030
3031 halg = &alg->halg;
3032 halg->digestsize = AES_BLOCK_SIZE;
3033 + halg->statesize = sizeof(struct ccp_aes_cmac_exp_ctx);
3034
3035 base = &halg->base;
3036 snprintf(base->cra_name, CRYPTO_MAX_ALG_NAME, "cmac(aes)");
3037 diff --git a/drivers/crypto/ccp/ccp-crypto-sha.c b/drivers/crypto/ccp/ccp-crypto-sha.c
3038 index d14b3f28e010..8ef06fad8b14 100644
3039 --- a/drivers/crypto/ccp/ccp-crypto-sha.c
3040 +++ b/drivers/crypto/ccp/ccp-crypto-sha.c
3041 @@ -207,6 +207,43 @@ static int ccp_sha_digest(struct ahash_request *req)
3042 return ccp_sha_finup(req);
3043 }
3044
3045 +static int ccp_sha_export(struct ahash_request *req, void *out)
3046 +{
3047 + struct ccp_sha_req_ctx *rctx = ahash_request_ctx(req);
3048 + struct ccp_sha_exp_ctx state;
3049 +
3050 + state.type = rctx->type;
3051 + state.msg_bits = rctx->msg_bits;
3052 + state.first = rctx->first;
3053 + memcpy(state.ctx, rctx->ctx, sizeof(state.ctx));
3054 + state.buf_count = rctx->buf_count;
3055 + memcpy(state.buf, rctx->buf, sizeof(state.buf));
3056 +
3057 + /* 'out' may not be aligned so memcpy from local variable */
3058 + memcpy(out, &state, sizeof(state));
3059 +
3060 + return 0;
3061 +}
3062 +
3063 +static int ccp_sha_import(struct ahash_request *req, const void *in)
3064 +{
3065 + struct ccp_sha_req_ctx *rctx = ahash_request_ctx(req);
3066 + struct ccp_sha_exp_ctx state;
3067 +
3068 + /* 'in' may not be aligned so memcpy to local variable */
3069 + memcpy(&state, in, sizeof(state));
3070 +
3071 + memset(rctx, 0, sizeof(*rctx));
3072 + rctx->type = state.type;
3073 + rctx->msg_bits = state.msg_bits;
3074 + rctx->first = state.first;
3075 + memcpy(rctx->ctx, state.ctx, sizeof(rctx->ctx));
3076 + rctx->buf_count = state.buf_count;
3077 + memcpy(rctx->buf, state.buf, sizeof(rctx->buf));
3078 +
3079 + return 0;
3080 +}
3081 +
3082 static int ccp_sha_setkey(struct crypto_ahash *tfm, const u8 *key,
3083 unsigned int key_len)
3084 {
3085 @@ -403,9 +440,12 @@ static int ccp_register_sha_alg(struct list_head *head,
3086 alg->final = ccp_sha_final;
3087 alg->finup = ccp_sha_finup;
3088 alg->digest = ccp_sha_digest;
3089 + alg->export = ccp_sha_export;
3090 + alg->import = ccp_sha_import;
3091
3092 halg = &alg->halg;
3093 halg->digestsize = def->digest_size;
3094 + halg->statesize = sizeof(struct ccp_sha_exp_ctx);
3095
3096 base = &halg->base;
3097 snprintf(base->cra_name, CRYPTO_MAX_ALG_NAME, "%s", def->name);
3098 diff --git a/drivers/crypto/ccp/ccp-crypto.h b/drivers/crypto/ccp/ccp-crypto.h
3099 index 76a96f0f44c6..a326ec20bfa8 100644
3100 --- a/drivers/crypto/ccp/ccp-crypto.h
3101 +++ b/drivers/crypto/ccp/ccp-crypto.h
3102 @@ -129,6 +129,15 @@ struct ccp_aes_cmac_req_ctx {
3103 struct ccp_cmd cmd;
3104 };
3105
3106 +struct ccp_aes_cmac_exp_ctx {
3107 + unsigned int null_msg;
3108 +
3109 + u8 iv[AES_BLOCK_SIZE];
3110 +
3111 + unsigned int buf_count;
3112 + u8 buf[AES_BLOCK_SIZE];
3113 +};
3114 +
3115 /***** SHA related defines *****/
3116 #define MAX_SHA_CONTEXT_SIZE SHA256_DIGEST_SIZE
3117 #define MAX_SHA_BLOCK_SIZE SHA256_BLOCK_SIZE
3118 @@ -171,6 +180,19 @@ struct ccp_sha_req_ctx {
3119 struct ccp_cmd cmd;
3120 };
3121
3122 +struct ccp_sha_exp_ctx {
3123 + enum ccp_sha_type type;
3124 +
3125 + u64 msg_bits;
3126 +
3127 + unsigned int first;
3128 +
3129 + u8 ctx[MAX_SHA_CONTEXT_SIZE];
3130 +
3131 + unsigned int buf_count;
3132 + u8 buf[MAX_SHA_BLOCK_SIZE];
3133 +};
3134 +
3135 /***** Common Context Structure *****/
3136 struct ccp_ctx {
3137 int (*complete)(struct crypto_async_request *req, int ret);
3138 diff --git a/drivers/crypto/marvell/cesa.c b/drivers/crypto/marvell/cesa.c
3139 index c0656e7f37b5..80239ae69527 100644
3140 --- a/drivers/crypto/marvell/cesa.c
3141 +++ b/drivers/crypto/marvell/cesa.c
3142 @@ -420,7 +420,7 @@ static int mv_cesa_probe(struct platform_device *pdev)
3143 res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "regs");
3144 cesa->regs = devm_ioremap_resource(dev, res);
3145 if (IS_ERR(cesa->regs))
3146 - return -ENOMEM;
3147 + return PTR_ERR(cesa->regs);
3148
3149 ret = mv_cesa_dev_dma_init(cesa);
3150 if (ret)
3151 diff --git a/drivers/crypto/ux500/cryp/cryp_core.c b/drivers/crypto/ux500/cryp/cryp_core.c
3152 index 4c243c1ffc7f..790f7cadc1ed 100644
3153 --- a/drivers/crypto/ux500/cryp/cryp_core.c
3154 +++ b/drivers/crypto/ux500/cryp/cryp_core.c
3155 @@ -1440,9 +1440,9 @@ static int ux500_cryp_probe(struct platform_device *pdev)
3156
3157 device_data->phybase = res->start;
3158 device_data->base = devm_ioremap_resource(dev, res);
3159 - if (!device_data->base) {
3160 + if (IS_ERR(device_data->base)) {
3161 dev_err(dev, "[%s]: ioremap failed!", __func__);
3162 - ret = -ENOMEM;
3163 + ret = PTR_ERR(device_data->base);
3164 goto out;
3165 }
3166
3167 diff --git a/drivers/crypto/ux500/hash/hash_core.c b/drivers/crypto/ux500/hash/hash_core.c
3168 index f47d112041b2..66b1c3313e2e 100644
3169 --- a/drivers/crypto/ux500/hash/hash_core.c
3170 +++ b/drivers/crypto/ux500/hash/hash_core.c
3171 @@ -1675,9 +1675,9 @@ static int ux500_hash_probe(struct platform_device *pdev)
3172
3173 device_data->phybase = res->start;
3174 device_data->base = devm_ioremap_resource(dev, res);
3175 - if (!device_data->base) {
3176 + if (IS_ERR(device_data->base)) {
3177 dev_err(dev, "%s: ioremap() failed!\n", __func__);
3178 - ret = -ENOMEM;
3179 + ret = PTR_ERR(device_data->base);
3180 goto out;
3181 }
3182 spin_lock_init(&device_data->ctx_lock);
3183 diff --git a/drivers/edac/amd64_edac.c b/drivers/edac/amd64_edac.c
3184 index 9eee13ef83a5..d87a47547ba5 100644
3185 --- a/drivers/edac/amd64_edac.c
3186 +++ b/drivers/edac/amd64_edac.c
3187 @@ -1452,7 +1452,7 @@ static u64 f1x_get_norm_dct_addr(struct amd64_pvt *pvt, u8 range,
3188 u64 chan_off;
3189 u64 dram_base = get_dram_base(pvt, range);
3190 u64 hole_off = f10_dhar_offset(pvt);
3191 - u64 dct_sel_base_off = (pvt->dct_sel_hi & 0xFFFFFC00) << 16;
3192 + u64 dct_sel_base_off = (u64)(pvt->dct_sel_hi & 0xFFFFFC00) << 16;
3193
3194 if (hi_rng) {
3195 /*
3196 diff --git a/drivers/edac/sb_edac.c b/drivers/edac/sb_edac.c
3197 index 429309c62699..cbee3179ec08 100644
3198 --- a/drivers/edac/sb_edac.c
3199 +++ b/drivers/edac/sb_edac.c
3200 @@ -1117,8 +1117,8 @@ static void get_memory_layout(const struct mem_ctl_info *mci)
3201 edac_dbg(0, "TAD#%d: up to %u.%03u GB (0x%016Lx), socket interleave %d, memory interleave %d, TGT: %d, %d, %d, %d, reg=0x%08x\n",
3202 n_tads, gb, (mb*1000)/1024,
3203 ((u64)tmp_mb) << 20L,
3204 - (u32)TAD_SOCK(reg),
3205 - (u32)TAD_CH(reg),
3206 + (u32)(1 << TAD_SOCK(reg)),
3207 + (u32)TAD_CH(reg) + 1,
3208 (u32)TAD_TGT0(reg),
3209 (u32)TAD_TGT1(reg),
3210 (u32)TAD_TGT2(reg),
3211 @@ -1396,7 +1396,7 @@ static int get_memory_error_data(struct mem_ctl_info *mci,
3212 }
3213
3214 ch_way = TAD_CH(reg) + 1;
3215 - sck_way = TAD_SOCK(reg) + 1;
3216 + sck_way = 1 << TAD_SOCK(reg);
3217
3218 if (ch_way == 3)
3219 idx = addr >> 6;
3220 @@ -1453,7 +1453,7 @@ static int get_memory_error_data(struct mem_ctl_info *mci,
3221 n_tads,
3222 addr,
3223 limit,
3224 - (u32)TAD_SOCK(reg),
3225 + sck_way,
3226 ch_way,
3227 offset,
3228 idx,
3229 @@ -1468,18 +1468,12 @@ static int get_memory_error_data(struct mem_ctl_info *mci,
3230 offset, addr);
3231 return -EINVAL;
3232 }
3233 - addr -= offset;
3234 - /* Store the low bits [0:6] of the addr */
3235 - ch_addr = addr & 0x7f;
3236 - /* Remove socket wayness and remove 6 bits */
3237 - addr >>= 6;
3238 - addr = div_u64(addr, sck_xch);
3239 -#if 0
3240 - /* Divide by channel way */
3241 - addr = addr / ch_way;
3242 -#endif
3243 - /* Recover the last 6 bits */
3244 - ch_addr |= addr << 6;
3245 +
3246 + ch_addr = addr - offset;
3247 + ch_addr >>= (6 + shiftup);
3248 + ch_addr /= ch_way * sck_way;
3249 + ch_addr <<= (6 + shiftup);
3250 + ch_addr |= addr & ((1 << (6 + shiftup)) - 1);
3251
3252 /*
3253 * Step 3) Decode rank
3254 diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c
3255 index 5a8fbadbd27b..8ac49812a716 100644
3256 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c
3257 +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c
3258 @@ -63,6 +63,10 @@ bool amdgpu_has_atpx(void) {
3259 return amdgpu_atpx_priv.atpx_detected;
3260 }
3261
3262 +bool amdgpu_has_atpx_dgpu_power_cntl(void) {
3263 + return amdgpu_atpx_priv.atpx.functions.power_cntl;
3264 +}
3265 +
3266 /**
3267 * amdgpu_atpx_call - call an ATPX method
3268 *
3269 @@ -142,10 +146,6 @@ static void amdgpu_atpx_parse_functions(struct amdgpu_atpx_functions *f, u32 mas
3270 */
3271 static int amdgpu_atpx_validate(struct amdgpu_atpx *atpx)
3272 {
3273 - /* make sure required functions are enabled */
3274 - /* dGPU power control is required */
3275 - atpx->functions.power_cntl = true;
3276 -
3277 if (atpx->functions.px_params) {
3278 union acpi_object *info;
3279 struct atpx_px_params output;
3280 diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
3281 index c961fe093e12..9d88023df836 100644
3282 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
3283 +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
3284 @@ -61,6 +61,12 @@ static const char *amdgpu_asic_name[] = {
3285 "LAST",
3286 };
3287
3288 +#if defined(CONFIG_VGA_SWITCHEROO)
3289 +bool amdgpu_has_atpx_dgpu_power_cntl(void);
3290 +#else
3291 +static inline bool amdgpu_has_atpx_dgpu_power_cntl(void) { return false; }
3292 +#endif
3293 +
3294 bool amdgpu_device_is_px(struct drm_device *dev)
3295 {
3296 struct amdgpu_device *adev = dev->dev_private;
3297 @@ -1469,7 +1475,7 @@ int amdgpu_device_init(struct amdgpu_device *adev,
3298
3299 if (amdgpu_runtime_pm == 1)
3300 runtime = true;
3301 - if (amdgpu_device_is_px(ddev))
3302 + if (amdgpu_device_is_px(ddev) && amdgpu_has_atpx_dgpu_power_cntl())
3303 runtime = true;
3304 vga_switcheroo_register_client(adev->pdev, &amdgpu_switcheroo_ops, runtime);
3305 if (runtime)
3306 diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c
3307 index 2cf50180cc51..b1c7a9b3631b 100644
3308 --- a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c
3309 +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c
3310 @@ -32,8 +32,8 @@
3311 #include "oss/oss_2_4_d.h"
3312 #include "oss/oss_2_4_sh_mask.h"
3313
3314 -#include "gmc/gmc_8_1_d.h"
3315 -#include "gmc/gmc_8_1_sh_mask.h"
3316 +#include "gmc/gmc_7_1_d.h"
3317 +#include "gmc/gmc_7_1_sh_mask.h"
3318
3319 #include "gca/gfx_8_0_d.h"
3320 #include "gca/gfx_8_0_enum.h"
3321 diff --git a/drivers/gpu/drm/radeon/atombios_encoders.c b/drivers/gpu/drm/radeon/atombios_encoders.c
3322 index bb292143997e..adf74f4366bb 100644
3323 --- a/drivers/gpu/drm/radeon/atombios_encoders.c
3324 +++ b/drivers/gpu/drm/radeon/atombios_encoders.c
3325 @@ -892,8 +892,6 @@ atombios_dig_encoder_setup2(struct drm_encoder *encoder, int action, int panel_m
3326 else
3327 args.v1.ucLaneNum = 4;
3328
3329 - if (ENCODER_MODE_IS_DP(args.v1.ucEncoderMode) && (dp_clock == 270000))
3330 - args.v1.ucConfig |= ATOM_ENCODER_CONFIG_DPLINKRATE_2_70GHZ;
3331 switch (radeon_encoder->encoder_id) {
3332 case ENCODER_OBJECT_ID_INTERNAL_UNIPHY:
3333 args.v1.ucConfig = ATOM_ENCODER_CONFIG_V2_TRANSMITTER1;
3334 @@ -910,6 +908,10 @@ atombios_dig_encoder_setup2(struct drm_encoder *encoder, int action, int panel_m
3335 args.v1.ucConfig |= ATOM_ENCODER_CONFIG_LINKB;
3336 else
3337 args.v1.ucConfig |= ATOM_ENCODER_CONFIG_LINKA;
3338 +
3339 + if (ENCODER_MODE_IS_DP(args.v1.ucEncoderMode) && (dp_clock == 270000))
3340 + args.v1.ucConfig |= ATOM_ENCODER_CONFIG_DPLINKRATE_2_70GHZ;
3341 +
3342 break;
3343 case 2:
3344 case 3:
3345 diff --git a/drivers/gpu/drm/radeon/radeon_atpx_handler.c b/drivers/gpu/drm/radeon/radeon_atpx_handler.c
3346 index c4b4f298a283..9bc408c9f9f6 100644
3347 --- a/drivers/gpu/drm/radeon/radeon_atpx_handler.c
3348 +++ b/drivers/gpu/drm/radeon/radeon_atpx_handler.c
3349 @@ -62,6 +62,10 @@ bool radeon_has_atpx(void) {
3350 return radeon_atpx_priv.atpx_detected;
3351 }
3352
3353 +bool radeon_has_atpx_dgpu_power_cntl(void) {
3354 + return radeon_atpx_priv.atpx.functions.power_cntl;
3355 +}
3356 +
3357 /**
3358 * radeon_atpx_call - call an ATPX method
3359 *
3360 @@ -141,10 +145,6 @@ static void radeon_atpx_parse_functions(struct radeon_atpx_functions *f, u32 mas
3361 */
3362 static int radeon_atpx_validate(struct radeon_atpx *atpx)
3363 {
3364 - /* make sure required functions are enabled */
3365 - /* dGPU power control is required */
3366 - atpx->functions.power_cntl = true;
3367 -
3368 if (atpx->functions.px_params) {
3369 union acpi_object *info;
3370 struct atpx_px_params output;
3371 diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
3372 index c566993a2ec3..f78f111e68de 100644
3373 --- a/drivers/gpu/drm/radeon/radeon_device.c
3374 +++ b/drivers/gpu/drm/radeon/radeon_device.c
3375 @@ -103,6 +103,12 @@ static const char radeon_family_name[][16] = {
3376 "LAST",
3377 };
3378
3379 +#if defined(CONFIG_VGA_SWITCHEROO)
3380 +bool radeon_has_atpx_dgpu_power_cntl(void);
3381 +#else
3382 +static inline bool radeon_has_atpx_dgpu_power_cntl(void) { return false; }
3383 +#endif
3384 +
3385 #define RADEON_PX_QUIRK_DISABLE_PX (1 << 0)
3386 #define RADEON_PX_QUIRK_LONG_WAKEUP (1 << 1)
3387
3388 @@ -1433,7 +1439,7 @@ int radeon_device_init(struct radeon_device *rdev,
3389 * ignore it */
3390 vga_client_register(rdev->pdev, rdev, NULL, radeon_vga_set_decode);
3391
3392 - if (rdev->flags & RADEON_IS_PX)
3393 + if ((rdev->flags & RADEON_IS_PX) && radeon_has_atpx_dgpu_power_cntl())
3394 runtime = true;
3395 vga_switcheroo_register_client(rdev->pdev, &radeon_switcheroo_ops, runtime);
3396 if (runtime)
3397 diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
3398 index c6f7a694f67a..ec791e169f8f 100644
3399 --- a/drivers/hid/hid-core.c
3400 +++ b/drivers/hid/hid-core.c
3401 @@ -1897,6 +1897,7 @@ static const struct hid_device_id hid_have_special_driver[] = {
3402 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_ELITE_KBD) },
3403 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_CORDLESS_DESKTOP_LX500) },
3404 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_EXTREME_3D) },
3405 + { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_DUAL_ACTION) },
3406 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WHEEL) },
3407 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD_CORD) },
3408 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD) },
3409 @@ -2615,9 +2616,10 @@ int hid_add_device(struct hid_device *hdev)
3410 /*
3411 * Scan generic devices for group information
3412 */
3413 - if (hid_ignore_special_drivers ||
3414 - (!hdev->group &&
3415 - !hid_match_id(hdev, hid_have_special_driver))) {
3416 + if (hid_ignore_special_drivers) {
3417 + hdev->group = HID_GROUP_GENERIC;
3418 + } else if (!hdev->group &&
3419 + !hid_match_id(hdev, hid_have_special_driver)) {
3420 ret = hid_scan_report(hdev);
3421 if (ret)
3422 hid_warn(hdev, "bad device descriptor (%d)\n", ret);
3423 diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
3424 index 2b8ff18d3713..c5ec4f915594 100644
3425 --- a/drivers/hid/hid-multitouch.c
3426 +++ b/drivers/hid/hid-multitouch.c
3427 @@ -396,6 +396,11 @@ static void mt_feature_mapping(struct hid_device *hdev,
3428 td->is_buttonpad = true;
3429
3430 break;
3431 + case 0xff0000c5:
3432 + /* Retrieve the Win8 blob once to enable some devices */
3433 + if (usage->usage_index == 0)
3434 + mt_get_feature(hdev, field->report);
3435 + break;
3436 }
3437 }
3438
3439 diff --git a/drivers/hid/i2c-hid/i2c-hid.c b/drivers/hid/i2c-hid/i2c-hid.c
3440 index 10bd8e6e4c9c..0b80633bae91 100644
3441 --- a/drivers/hid/i2c-hid/i2c-hid.c
3442 +++ b/drivers/hid/i2c-hid/i2c-hid.c
3443 @@ -282,17 +282,21 @@ static int i2c_hid_set_or_send_report(struct i2c_client *client, u8 reportType,
3444 u16 dataRegister = le16_to_cpu(ihid->hdesc.wDataRegister);
3445 u16 outputRegister = le16_to_cpu(ihid->hdesc.wOutputRegister);
3446 u16 maxOutputLength = le16_to_cpu(ihid->hdesc.wMaxOutputLength);
3447 + u16 size;
3448 + int args_len;
3449 + int index = 0;
3450 +
3451 + i2c_hid_dbg(ihid, "%s\n", __func__);
3452 +
3453 + if (data_len > ihid->bufsize)
3454 + return -EINVAL;
3455
3456 - /* hid_hw_* already checked that data_len < HID_MAX_BUFFER_SIZE */
3457 - u16 size = 2 /* size */ +
3458 + size = 2 /* size */ +
3459 (reportID ? 1 : 0) /* reportID */ +
3460 data_len /* buf */;
3461 - int args_len = (reportID >= 0x0F ? 1 : 0) /* optional third byte */ +
3462 + args_len = (reportID >= 0x0F ? 1 : 0) /* optional third byte */ +
3463 2 /* dataRegister */ +
3464 size /* args */;
3465 - int index = 0;
3466 -
3467 - i2c_hid_dbg(ihid, "%s\n", __func__);
3468
3469 if (!use_data && maxOutputLength == 0)
3470 return -ENOSYS;
3471 diff --git a/drivers/idle/intel_idle.c b/drivers/idle/intel_idle.c
3472 index cd4510a63375..146eed70bdf4 100644
3473 --- a/drivers/idle/intel_idle.c
3474 +++ b/drivers/idle/intel_idle.c
3475 @@ -65,7 +65,7 @@
3476 #include <asm/mwait.h>
3477 #include <asm/msr.h>
3478
3479 -#define INTEL_IDLE_VERSION "0.4"
3480 +#define INTEL_IDLE_VERSION "0.4.1"
3481 #define PREFIX "intel_idle: "
3482
3483 static struct cpuidle_driver intel_idle_driver = {
3484 @@ -994,36 +994,92 @@ static void intel_idle_cpuidle_devices_uninit(void)
3485 }
3486
3487 /*
3488 - * intel_idle_state_table_update()
3489 - *
3490 - * Update the default state_table for this CPU-id
3491 + * ivt_idle_state_table_update(void)
3492 *
3493 - * Currently used to access tuned IVT multi-socket targets
3494 + * Tune IVT multi-socket targets
3495 * Assumption: num_sockets == (max_package_num + 1)
3496 */
3497 -void intel_idle_state_table_update(void)
3498 +static void ivt_idle_state_table_update(void)
3499 {
3500 /* IVT uses a different table for 1-2, 3-4, and > 4 sockets */
3501 - if (boot_cpu_data.x86_model == 0x3e) { /* IVT */
3502 - int cpu, package_num, num_sockets = 1;
3503 -
3504 - for_each_online_cpu(cpu) {
3505 - package_num = topology_physical_package_id(cpu);
3506 - if (package_num + 1 > num_sockets) {
3507 - num_sockets = package_num + 1;
3508 -
3509 - if (num_sockets > 4) {
3510 - cpuidle_state_table = ivt_cstates_8s;
3511 - return;
3512 - }
3513 + int cpu, package_num, num_sockets = 1;
3514 +
3515 + for_each_online_cpu(cpu) {
3516 + package_num = topology_physical_package_id(cpu);
3517 + if (package_num + 1 > num_sockets) {
3518 + num_sockets = package_num + 1;
3519 +
3520 + if (num_sockets > 4) {
3521 + cpuidle_state_table = ivt_cstates_8s;
3522 + return;
3523 }
3524 }
3525 + }
3526 +
3527 + if (num_sockets > 2)
3528 + cpuidle_state_table = ivt_cstates_4s;
3529 +
3530 + /* else, 1 and 2 socket systems use default ivt_cstates */
3531 +}
3532 +/*
3533 + * sklh_idle_state_table_update(void)
3534 + *
3535 + * On SKL-H (model 0x5e) disable C8 and C9 if:
3536 + * C10 is enabled and SGX disabled
3537 + */
3538 +static void sklh_idle_state_table_update(void)
3539 +{
3540 + unsigned long long msr;
3541 + unsigned int eax, ebx, ecx, edx;
3542 +
3543 +
3544 + /* if PC10 disabled via cmdline intel_idle.max_cstate=7 or shallower */
3545 + if (max_cstate <= 7)
3546 + return;
3547 +
3548 + /* if PC10 not present in CPUID.MWAIT.EDX */
3549 + if ((mwait_substates & (0xF << 28)) == 0)
3550 + return;
3551 +
3552 + rdmsrl(MSR_NHM_SNB_PKG_CST_CFG_CTL, msr);
3553 +
3554 + /* PC10 is not enabled in PKG C-state limit */
3555 + if ((msr & 0xF) != 8)
3556 + return;
3557 +
3558 + ecx = 0;
3559 + cpuid(7, &eax, &ebx, &ecx, &edx);
3560 +
3561 + /* if SGX is present */
3562 + if (ebx & (1 << 2)) {
3563
3564 - if (num_sockets > 2)
3565 - cpuidle_state_table = ivt_cstates_4s;
3566 - /* else, 1 and 2 socket systems use default ivt_cstates */
3567 + rdmsrl(MSR_IA32_FEATURE_CONTROL, msr);
3568 +
3569 + /* if SGX is enabled */
3570 + if (msr & (1 << 18))
3571 + return;
3572 + }
3573 +
3574 + skl_cstates[5].disabled = 1; /* C8-SKL */
3575 + skl_cstates[6].disabled = 1; /* C9-SKL */
3576 +}
3577 +/*
3578 + * intel_idle_state_table_update()
3579 + *
3580 + * Update the default state_table for this CPU-id
3581 + */
3582 +
3583 +static void intel_idle_state_table_update(void)
3584 +{
3585 + switch (boot_cpu_data.x86_model) {
3586 +
3587 + case 0x3e: /* IVT */
3588 + ivt_idle_state_table_update();
3589 + break;
3590 + case 0x5e: /* SKL-H */
3591 + sklh_idle_state_table_update();
3592 + break;
3593 }
3594 - return;
3595 }
3596
3597 /*
3598 @@ -1063,6 +1119,14 @@ static int __init intel_idle_cpuidle_driver_init(void)
3599 if (num_substates == 0)
3600 continue;
3601
3602 + /* if state marked as disabled, skip it */
3603 + if (cpuidle_state_table[cstate].disabled != 0) {
3604 + pr_debug(PREFIX "state %s is disabled",
3605 + cpuidle_state_table[cstate].name);
3606 + continue;
3607 + }
3608 +
3609 +
3610 if (((mwait_cstate + 1) > 2) &&
3611 !boot_cpu_has(X86_FEATURE_NONSTOP_TSC))
3612 mark_tsc_unstable("TSC halts in idle"
3613 diff --git a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
3614 index f357ca67a41c..87799de90a1d 100644
3615 --- a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
3616 +++ b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
3617 @@ -456,7 +456,10 @@ out_locked:
3618 return status;
3619 }
3620
3621 -static void ipoib_mcast_join(struct net_device *dev, struct ipoib_mcast *mcast)
3622 +/*
3623 + * Caller must hold 'priv->lock'
3624 + */
3625 +static int ipoib_mcast_join(struct net_device *dev, struct ipoib_mcast *mcast)
3626 {
3627 struct ipoib_dev_priv *priv = netdev_priv(dev);
3628 struct ib_sa_multicast *multicast;
3629 @@ -466,6 +469,10 @@ static void ipoib_mcast_join(struct net_device *dev, struct ipoib_mcast *mcast)
3630 ib_sa_comp_mask comp_mask;
3631 int ret = 0;
3632
3633 + if (!priv->broadcast ||
3634 + !test_bit(IPOIB_FLAG_OPER_UP, &priv->flags))
3635 + return -EINVAL;
3636 +
3637 ipoib_dbg_mcast(priv, "joining MGID %pI6\n", mcast->mcmember.mgid.raw);
3638
3639 rec.mgid = mcast->mcmember.mgid;
3640 @@ -525,20 +532,23 @@ static void ipoib_mcast_join(struct net_device *dev, struct ipoib_mcast *mcast)
3641 rec.join_state = 4;
3642 #endif
3643 }
3644 + spin_unlock_irq(&priv->lock);
3645
3646 multicast = ib_sa_join_multicast(&ipoib_sa_client, priv->ca, priv->port,
3647 &rec, comp_mask, GFP_KERNEL,
3648 ipoib_mcast_join_complete, mcast);
3649 + spin_lock_irq(&priv->lock);
3650 if (IS_ERR(multicast)) {
3651 ret = PTR_ERR(multicast);
3652 ipoib_warn(priv, "ib_sa_join_multicast failed, status %d\n", ret);
3653 - spin_lock_irq(&priv->lock);
3654 /* Requeue this join task with a backoff delay */
3655 __ipoib_mcast_schedule_join_thread(priv, mcast, 1);
3656 clear_bit(IPOIB_MCAST_FLAG_BUSY, &mcast->flags);
3657 spin_unlock_irq(&priv->lock);
3658 complete(&mcast->done);
3659 + spin_lock_irq(&priv->lock);
3660 }
3661 + return 0;
3662 }
3663
3664 void ipoib_mcast_join_task(struct work_struct *work)
3665 @@ -620,9 +630,10 @@ void ipoib_mcast_join_task(struct work_struct *work)
3666 /* Found the next unjoined group */
3667 init_completion(&mcast->done);
3668 set_bit(IPOIB_MCAST_FLAG_BUSY, &mcast->flags);
3669 - spin_unlock_irq(&priv->lock);
3670 - ipoib_mcast_join(dev, mcast);
3671 - spin_lock_irq(&priv->lock);
3672 + if (ipoib_mcast_join(dev, mcast)) {
3673 + spin_unlock_irq(&priv->lock);
3674 + return;
3675 + }
3676 } else if (!delay_until ||
3677 time_before(mcast->delay_until, delay_until))
3678 delay_until = mcast->delay_until;
3679 @@ -641,10 +652,9 @@ out:
3680 if (mcast) {
3681 init_completion(&mcast->done);
3682 set_bit(IPOIB_MCAST_FLAG_BUSY, &mcast->flags);
3683 + ipoib_mcast_join(dev, mcast);
3684 }
3685 spin_unlock_irq(&priv->lock);
3686 - if (mcast)
3687 - ipoib_mcast_join(dev, mcast);
3688 }
3689
3690 int ipoib_mcast_start_thread(struct net_device *dev)
3691 diff --git a/drivers/infiniband/ulp/isert/ib_isert.c b/drivers/infiniband/ulp/isert/ib_isert.c
3692 index 8a51c3b5d657..b0edb66a291b 100644
3693 --- a/drivers/infiniband/ulp/isert/ib_isert.c
3694 +++ b/drivers/infiniband/ulp/isert/ib_isert.c
3695 @@ -66,6 +66,7 @@ isert_rdma_accept(struct isert_conn *isert_conn);
3696 struct rdma_cm_id *isert_setup_id(struct isert_np *isert_np);
3697
3698 static void isert_release_work(struct work_struct *work);
3699 +static void isert_wait4flush(struct isert_conn *isert_conn);
3700
3701 static inline bool
3702 isert_prot_cmd(struct isert_conn *conn, struct se_cmd *cmd)
3703 @@ -815,12 +816,31 @@ isert_put_conn(struct isert_conn *isert_conn)
3704 kref_put(&isert_conn->kref, isert_release_kref);
3705 }
3706
3707 +static void
3708 +isert_handle_unbound_conn(struct isert_conn *isert_conn)
3709 +{
3710 + struct isert_np *isert_np = isert_conn->cm_id->context;
3711 +
3712 + mutex_lock(&isert_np->mutex);
3713 + if (!list_empty(&isert_conn->node)) {
3714 + /*
3715 + * This means iscsi doesn't know this connection
3716 + * so schedule a cleanup ourselves
3717 + */
3718 + list_del_init(&isert_conn->node);
3719 + isert_put_conn(isert_conn);
3720 + complete(&isert_conn->wait);
3721 + queue_work(isert_release_wq, &isert_conn->release_work);
3722 + }
3723 + mutex_unlock(&isert_np->mutex);
3724 +}
3725 +
3726 /**
3727 * isert_conn_terminate() - Initiate connection termination
3728 * @isert_conn: isert connection struct
3729 *
3730 * Notes:
3731 - * In case the connection state is FULL_FEATURE, move state
3732 + * In case the connection state is BOUND, move state
3733 * to TEMINATING and start teardown sequence (rdma_disconnect).
3734 * In case the connection state is UP, complete flush as well.
3735 *
3736 @@ -832,23 +852,19 @@ isert_conn_terminate(struct isert_conn *isert_conn)
3737 {
3738 int err;
3739
3740 - switch (isert_conn->state) {
3741 - case ISER_CONN_TERMINATING:
3742 - break;
3743 - case ISER_CONN_UP:
3744 - case ISER_CONN_FULL_FEATURE: /* FALLTHRU */
3745 - isert_info("Terminating conn %p state %d\n",
3746 - isert_conn, isert_conn->state);
3747 - isert_conn->state = ISER_CONN_TERMINATING;
3748 - err = rdma_disconnect(isert_conn->cm_id);
3749 - if (err)
3750 - isert_warn("Failed rdma_disconnect isert_conn %p\n",
3751 - isert_conn);
3752 - break;
3753 - default:
3754 - isert_warn("conn %p teminating in state %d\n",
3755 - isert_conn, isert_conn->state);
3756 - }
3757 + if (isert_conn->state >= ISER_CONN_TERMINATING)
3758 + return;
3759 +
3760 + isert_info("Terminating conn %p state %d\n",
3761 + isert_conn, isert_conn->state);
3762 + isert_conn->state = ISER_CONN_TERMINATING;
3763 + err = rdma_disconnect(isert_conn->cm_id);
3764 + if (err)
3765 + isert_warn("Failed rdma_disconnect isert_conn %p\n",
3766 + isert_conn);
3767 +
3768 + isert_info("conn %p completing wait\n", isert_conn);
3769 + complete(&isert_conn->wait);
3770 }
3771
3772 static int
3773 @@ -882,35 +898,27 @@ static int
3774 isert_disconnected_handler(struct rdma_cm_id *cma_id,
3775 enum rdma_cm_event_type event)
3776 {
3777 - struct isert_np *isert_np = cma_id->context;
3778 - struct isert_conn *isert_conn;
3779 - bool terminating = false;
3780 -
3781 - if (isert_np->cm_id == cma_id)
3782 - return isert_np_cma_handler(cma_id->context, event);
3783 -
3784 - isert_conn = cma_id->qp->qp_context;
3785 + struct isert_conn *isert_conn = cma_id->qp->qp_context;
3786
3787 mutex_lock(&isert_conn->mutex);
3788 - terminating = (isert_conn->state == ISER_CONN_TERMINATING);
3789 - isert_conn_terminate(isert_conn);
3790 - mutex_unlock(&isert_conn->mutex);
3791 -
3792 - isert_info("conn %p completing wait\n", isert_conn);
3793 - complete(&isert_conn->wait);
3794 -
3795 - if (terminating)
3796 - goto out;
3797 -
3798 - mutex_lock(&isert_np->mutex);
3799 - if (!list_empty(&isert_conn->node)) {
3800 - list_del_init(&isert_conn->node);
3801 - isert_put_conn(isert_conn);
3802 - queue_work(isert_release_wq, &isert_conn->release_work);
3803 + switch (isert_conn->state) {
3804 + case ISER_CONN_TERMINATING:
3805 + break;
3806 + case ISER_CONN_UP:
3807 + isert_conn_terminate(isert_conn);
3808 + isert_wait4flush(isert_conn);
3809 + isert_handle_unbound_conn(isert_conn);
3810 + break;
3811 + case ISER_CONN_BOUND:
3812 + case ISER_CONN_FULL_FEATURE: /* FALLTHRU */
3813 + iscsit_cause_connection_reinstatement(isert_conn->conn, 0);
3814 + break;
3815 + default:
3816 + isert_warn("conn %p teminating in state %d\n",
3817 + isert_conn, isert_conn->state);
3818 }
3819 - mutex_unlock(&isert_np->mutex);
3820 + mutex_unlock(&isert_conn->mutex);
3821
3822 -out:
3823 return 0;
3824 }
3825
3826 @@ -929,12 +937,16 @@ isert_connect_error(struct rdma_cm_id *cma_id)
3827 static int
3828 isert_cma_handler(struct rdma_cm_id *cma_id, struct rdma_cm_event *event)
3829 {
3830 + struct isert_np *isert_np = cma_id->context;
3831 int ret = 0;
3832
3833 isert_info("%s (%d): status %d id %p np %p\n",
3834 rdma_event_msg(event->event), event->event,
3835 event->status, cma_id, cma_id->context);
3836
3837 + if (isert_np->cm_id == cma_id)
3838 + return isert_np_cma_handler(cma_id->context, event->event);
3839 +
3840 switch (event->event) {
3841 case RDMA_CM_EVENT_CONNECT_REQUEST:
3842 ret = isert_connect_request(cma_id, event);
3843 @@ -980,13 +992,10 @@ isert_post_recvm(struct isert_conn *isert_conn, u32 count)
3844 rx_wr--;
3845 rx_wr->next = NULL; /* mark end of work requests list */
3846
3847 - isert_conn->post_recv_buf_count += count;
3848 ret = ib_post_recv(isert_conn->qp, isert_conn->rx_wr,
3849 &rx_wr_failed);
3850 - if (ret) {
3851 + if (ret)
3852 isert_err("ib_post_recv() failed with ret: %d\n", ret);
3853 - isert_conn->post_recv_buf_count -= count;
3854 - }
3855
3856 return ret;
3857 }
3858 @@ -1002,12 +1011,9 @@ isert_post_recv(struct isert_conn *isert_conn, struct iser_rx_desc *rx_desc)
3859 rx_wr.num_sge = 1;
3860 rx_wr.next = NULL;
3861
3862 - isert_conn->post_recv_buf_count++;
3863 ret = ib_post_recv(isert_conn->qp, &rx_wr, &rx_wr_failed);
3864 - if (ret) {
3865 + if (ret)
3866 isert_err("ib_post_recv() failed with ret: %d\n", ret);
3867 - isert_conn->post_recv_buf_count--;
3868 - }
3869
3870 return ret;
3871 }
3872 @@ -1120,12 +1126,9 @@ isert_rdma_post_recvl(struct isert_conn *isert_conn)
3873 rx_wr.sg_list = &sge;
3874 rx_wr.num_sge = 1;
3875
3876 - isert_conn->post_recv_buf_count++;
3877 ret = ib_post_recv(isert_conn->qp, &rx_wr, &rx_wr_fail);
3878 - if (ret) {
3879 + if (ret)
3880 isert_err("ib_post_recv() failed: %d\n", ret);
3881 - isert_conn->post_recv_buf_count--;
3882 - }
3883
3884 return ret;
3885 }
3886 @@ -1620,7 +1623,6 @@ isert_rcv_completion(struct iser_rx_desc *desc,
3887 ib_dma_sync_single_for_device(ib_dev, rx_dma, rx_buflen,
3888 DMA_FROM_DEVICE);
3889
3890 - isert_conn->post_recv_buf_count--;
3891 }
3892
3893 static int
3894 @@ -2035,7 +2037,8 @@ is_isert_tx_desc(struct isert_conn *isert_conn, void *wr_id)
3895 void *start = isert_conn->rx_descs;
3896 int len = ISERT_QP_MAX_RECV_DTOS * sizeof(*isert_conn->rx_descs);
3897
3898 - if (wr_id >= start && wr_id < start + len)
3899 + if ((wr_id >= start && wr_id < start + len) ||
3900 + (wr_id == isert_conn->login_req_buf))
3901 return false;
3902
3903 return true;
3904 @@ -2059,10 +2062,6 @@ isert_cq_comp_err(struct isert_conn *isert_conn, struct ib_wc *wc)
3905 isert_unmap_tx_desc(desc, ib_dev);
3906 else
3907 isert_completion_put(desc, isert_cmd, ib_dev, true);
3908 - } else {
3909 - isert_conn->post_recv_buf_count--;
3910 - if (!isert_conn->post_recv_buf_count)
3911 - iscsit_cause_connection_reinstatement(isert_conn->conn, 0);
3912 }
3913 }
3914
3915 @@ -3193,6 +3192,7 @@ accept_wait:
3916
3917 conn->context = isert_conn;
3918 isert_conn->conn = conn;
3919 + isert_conn->state = ISER_CONN_BOUND;
3920
3921 isert_set_conn_info(np, conn, isert_conn);
3922
3923 diff --git a/drivers/infiniband/ulp/isert/ib_isert.h b/drivers/infiniband/ulp/isert/ib_isert.h
3924 index 3d7fbc47c343..1874d21daee0 100644
3925 --- a/drivers/infiniband/ulp/isert/ib_isert.h
3926 +++ b/drivers/infiniband/ulp/isert/ib_isert.h
3927 @@ -50,6 +50,7 @@ enum iser_ib_op_code {
3928 enum iser_conn_state {
3929 ISER_CONN_INIT,
3930 ISER_CONN_UP,
3931 + ISER_CONN_BOUND,
3932 ISER_CONN_FULL_FEATURE,
3933 ISER_CONN_TERMINATING,
3934 ISER_CONN_DOWN,
3935 @@ -144,7 +145,6 @@ struct isert_device;
3936
3937 struct isert_conn {
3938 enum iser_conn_state state;
3939 - int post_recv_buf_count;
3940 u32 responder_resources;
3941 u32 initiator_depth;
3942 bool pi_support;
3943 diff --git a/drivers/infiniband/ulp/srpt/ib_srpt.c b/drivers/infiniband/ulp/srpt/ib_srpt.c
3944 index 2e2fe818ca9f..eaabf3125846 100644
3945 --- a/drivers/infiniband/ulp/srpt/ib_srpt.c
3946 +++ b/drivers/infiniband/ulp/srpt/ib_srpt.c
3947 @@ -1737,47 +1737,6 @@ send_sense:
3948 return -1;
3949 }
3950
3951 -/**
3952 - * srpt_rx_mgmt_fn_tag() - Process a task management function by tag.
3953 - * @ch: RDMA channel of the task management request.
3954 - * @fn: Task management function to perform.
3955 - * @req_tag: Tag of the SRP task management request.
3956 - * @mgmt_ioctx: I/O context of the task management request.
3957 - *
3958 - * Returns zero if the target core will process the task management
3959 - * request asynchronously.
3960 - *
3961 - * Note: It is assumed that the initiator serializes tag-based task management
3962 - * requests.
3963 - */
3964 -static int srpt_rx_mgmt_fn_tag(struct srpt_send_ioctx *ioctx, u64 tag)
3965 -{
3966 - struct srpt_device *sdev;
3967 - struct srpt_rdma_ch *ch;
3968 - struct srpt_send_ioctx *target;
3969 - int ret, i;
3970 -
3971 - ret = -EINVAL;
3972 - ch = ioctx->ch;
3973 - BUG_ON(!ch);
3974 - BUG_ON(!ch->sport);
3975 - sdev = ch->sport->sdev;
3976 - BUG_ON(!sdev);
3977 - spin_lock_irq(&sdev->spinlock);
3978 - for (i = 0; i < ch->rq_size; ++i) {
3979 - target = ch->ioctx_ring[i];
3980 - if (target->cmd.se_lun == ioctx->cmd.se_lun &&
3981 - target->cmd.tag == tag &&
3982 - srpt_get_cmd_state(target) != SRPT_STATE_DONE) {
3983 - ret = 0;
3984 - /* now let the target core abort &target->cmd; */
3985 - break;
3986 - }
3987 - }
3988 - spin_unlock_irq(&sdev->spinlock);
3989 - return ret;
3990 -}
3991 -
3992 static int srp_tmr_to_tcm(int fn)
3993 {
3994 switch (fn) {
3995 @@ -1812,7 +1771,6 @@ static void srpt_handle_tsk_mgmt(struct srpt_rdma_ch *ch,
3996 struct se_cmd *cmd;
3997 struct se_session *sess = ch->sess;
3998 uint64_t unpacked_lun;
3999 - uint32_t tag = 0;
4000 int tcm_tmr;
4001 int rc;
4002
4003 @@ -1828,25 +1786,10 @@ static void srpt_handle_tsk_mgmt(struct srpt_rdma_ch *ch,
4004 srpt_set_cmd_state(send_ioctx, SRPT_STATE_MGMT);
4005 send_ioctx->cmd.tag = srp_tsk->tag;
4006 tcm_tmr = srp_tmr_to_tcm(srp_tsk->tsk_mgmt_func);
4007 - if (tcm_tmr < 0) {
4008 - send_ioctx->cmd.se_tmr_req->response =
4009 - TMR_TASK_MGMT_FUNCTION_NOT_SUPPORTED;
4010 - goto fail;
4011 - }
4012 unpacked_lun = srpt_unpack_lun((uint8_t *)&srp_tsk->lun,
4013 sizeof(srp_tsk->lun));
4014 -
4015 - if (srp_tsk->tsk_mgmt_func == SRP_TSK_ABORT_TASK) {
4016 - rc = srpt_rx_mgmt_fn_tag(send_ioctx, srp_tsk->task_tag);
4017 - if (rc < 0) {
4018 - send_ioctx->cmd.se_tmr_req->response =
4019 - TMR_TASK_DOES_NOT_EXIST;
4020 - goto fail;
4021 - }
4022 - tag = srp_tsk->task_tag;
4023 - }
4024 rc = target_submit_tmr(&send_ioctx->cmd, sess, NULL, unpacked_lun,
4025 - srp_tsk, tcm_tmr, GFP_KERNEL, tag,
4026 + srp_tsk, tcm_tmr, GFP_KERNEL, srp_tsk->task_tag,
4027 TARGET_SCF_ACK_KREF);
4028 if (rc != 0) {
4029 send_ioctx->cmd.se_tmr_req->response = TMR_FUNCTION_REJECTED;
4030 diff --git a/drivers/input/misc/ati_remote2.c b/drivers/input/misc/ati_remote2.c
4031 index cfd58e87da26..1c5914cae853 100644
4032 --- a/drivers/input/misc/ati_remote2.c
4033 +++ b/drivers/input/misc/ati_remote2.c
4034 @@ -817,26 +817,49 @@ static int ati_remote2_probe(struct usb_interface *interface, const struct usb_d
4035
4036 ar2->udev = udev;
4037
4038 + /* Sanity check, first interface must have an endpoint */
4039 + if (alt->desc.bNumEndpoints < 1 || !alt->endpoint) {
4040 + dev_err(&interface->dev,
4041 + "%s(): interface 0 must have an endpoint\n", __func__);
4042 + r = -ENODEV;
4043 + goto fail1;
4044 + }
4045 ar2->intf[0] = interface;
4046 ar2->ep[0] = &alt->endpoint[0].desc;
4047
4048 + /* Sanity check, the device must have two interfaces */
4049 ar2->intf[1] = usb_ifnum_to_if(udev, 1);
4050 + if ((udev->actconfig->desc.bNumInterfaces < 2) || !ar2->intf[1]) {
4051 + dev_err(&interface->dev, "%s(): need 2 interfaces, found %d\n",
4052 + __func__, udev->actconfig->desc.bNumInterfaces);
4053 + r = -ENODEV;
4054 + goto fail1;
4055 + }
4056 +
4057 r = usb_driver_claim_interface(&ati_remote2_driver, ar2->intf[1], ar2);
4058 if (r)
4059 goto fail1;
4060 +
4061 + /* Sanity check, second interface must have an endpoint */
4062 alt = ar2->intf[1]->cur_altsetting;
4063 + if (alt->desc.bNumEndpoints < 1 || !alt->endpoint) {
4064 + dev_err(&interface->dev,
4065 + "%s(): interface 1 must have an endpoint\n", __func__);
4066 + r = -ENODEV;
4067 + goto fail2;
4068 + }
4069 ar2->ep[1] = &alt->endpoint[0].desc;
4070
4071 r = ati_remote2_urb_init(ar2);
4072 if (r)
4073 - goto fail2;
4074 + goto fail3;
4075
4076 ar2->channel_mask = channel_mask;
4077 ar2->mode_mask = mode_mask;
4078
4079 r = ati_remote2_setup(ar2, ar2->channel_mask);
4080 if (r)
4081 - goto fail2;
4082 + goto fail3;
4083
4084 usb_make_path(udev, ar2->phys, sizeof(ar2->phys));
4085 strlcat(ar2->phys, "/input0", sizeof(ar2->phys));
4086 @@ -845,11 +868,11 @@ static int ati_remote2_probe(struct usb_interface *interface, const struct usb_d
4087
4088 r = sysfs_create_group(&udev->dev.kobj, &ati_remote2_attr_group);
4089 if (r)
4090 - goto fail2;
4091 + goto fail3;
4092
4093 r = ati_remote2_input_init(ar2);
4094 if (r)
4095 - goto fail3;
4096 + goto fail4;
4097
4098 usb_set_intfdata(interface, ar2);
4099
4100 @@ -857,10 +880,11 @@ static int ati_remote2_probe(struct usb_interface *interface, const struct usb_d
4101
4102 return 0;
4103
4104 - fail3:
4105 + fail4:
4106 sysfs_remove_group(&udev->dev.kobj, &ati_remote2_attr_group);
4107 - fail2:
4108 + fail3:
4109 ati_remote2_urb_cleanup(ar2);
4110 + fail2:
4111 usb_driver_release_interface(&ati_remote2_driver, ar2->intf[1]);
4112 fail1:
4113 kfree(ar2);
4114 diff --git a/drivers/input/misc/ims-pcu.c b/drivers/input/misc/ims-pcu.c
4115 index ac1fa5f44580..9c0ea36913b4 100644
4116 --- a/drivers/input/misc/ims-pcu.c
4117 +++ b/drivers/input/misc/ims-pcu.c
4118 @@ -1663,6 +1663,8 @@ static int ims_pcu_parse_cdc_data(struct usb_interface *intf, struct ims_pcu *pc
4119
4120 pcu->ctrl_intf = usb_ifnum_to_if(pcu->udev,
4121 union_desc->bMasterInterface0);
4122 + if (!pcu->ctrl_intf)
4123 + return -EINVAL;
4124
4125 alt = pcu->ctrl_intf->cur_altsetting;
4126 pcu->ep_ctrl = &alt->endpoint[0].desc;
4127 @@ -1670,6 +1672,8 @@ static int ims_pcu_parse_cdc_data(struct usb_interface *intf, struct ims_pcu *pc
4128
4129 pcu->data_intf = usb_ifnum_to_if(pcu->udev,
4130 union_desc->bSlaveInterface0);
4131 + if (!pcu->data_intf)
4132 + return -EINVAL;
4133
4134 alt = pcu->data_intf->cur_altsetting;
4135 if (alt->desc.bNumEndpoints != 2) {
4136 diff --git a/drivers/input/misc/powermate.c b/drivers/input/misc/powermate.c
4137 index 63b539d3daba..84909a12ff36 100644
4138 --- a/drivers/input/misc/powermate.c
4139 +++ b/drivers/input/misc/powermate.c
4140 @@ -307,6 +307,9 @@ static int powermate_probe(struct usb_interface *intf, const struct usb_device_i
4141 int error = -ENOMEM;
4142
4143 interface = intf->cur_altsetting;
4144 + if (interface->desc.bNumEndpoints < 1)
4145 + return -EINVAL;
4146 +
4147 endpoint = &interface->endpoint[0].desc;
4148 if (!usb_endpoint_is_int_in(endpoint))
4149 return -EIO;
4150 diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
4151 index 6025eb430c0a..a41d8328c064 100644
4152 --- a/drivers/input/mouse/synaptics.c
4153 +++ b/drivers/input/mouse/synaptics.c
4154 @@ -862,8 +862,9 @@ static void synaptics_report_ext_buttons(struct psmouse *psmouse,
4155 if (!SYN_CAP_MULTI_BUTTON_NO(priv->ext_cap))
4156 return;
4157
4158 - /* Bug in FW 8.1, buttons are reported only when ExtBit is 1 */
4159 - if (SYN_ID_FULL(priv->identity) == 0x801 &&
4160 + /* Bug in FW 8.1 & 8.2, buttons are reported only when ExtBit is 1 */
4161 + if ((SYN_ID_FULL(priv->identity) == 0x801 ||
4162 + SYN_ID_FULL(priv->identity) == 0x802) &&
4163 !((psmouse->packet[0] ^ psmouse->packet[3]) & 0x02))
4164 return;
4165
4166 diff --git a/drivers/md/bcache/super.c b/drivers/md/bcache/super.c
4167 index 8d0ead98eb6e..a296425a7270 100644
4168 --- a/drivers/md/bcache/super.c
4169 +++ b/drivers/md/bcache/super.c
4170 @@ -1015,8 +1015,12 @@ int bch_cached_dev_attach(struct cached_dev *dc, struct cache_set *c)
4171 */
4172 atomic_set(&dc->count, 1);
4173
4174 - if (bch_cached_dev_writeback_start(dc))
4175 + /* Block writeback thread, but spawn it */
4176 + down_write(&dc->writeback_lock);
4177 + if (bch_cached_dev_writeback_start(dc)) {
4178 + up_write(&dc->writeback_lock);
4179 return -ENOMEM;
4180 + }
4181
4182 if (BDEV_STATE(&dc->sb) == BDEV_STATE_DIRTY) {
4183 bch_sectors_dirty_init(dc);
4184 @@ -1028,6 +1032,9 @@ int bch_cached_dev_attach(struct cached_dev *dc, struct cache_set *c)
4185 bch_cached_dev_run(dc);
4186 bcache_device_link(&dc->disk, c, "bdev");
4187
4188 + /* Allow the writeback thread to proceed */
4189 + up_write(&dc->writeback_lock);
4190 +
4191 pr_info("Caching %s as %s on set %pU",
4192 bdevname(dc->bdev, buf), dc->disk.disk->disk_name,
4193 dc->disk.c->sb.set_uuid);
4194 @@ -1366,6 +1373,9 @@ static void cache_set_flush(struct closure *cl)
4195 struct btree *b;
4196 unsigned i;
4197
4198 + if (!c)
4199 + closure_return(cl);
4200 +
4201 bch_cache_accounting_destroy(&c->accounting);
4202
4203 kobject_put(&c->internal);
4204 @@ -1828,11 +1838,12 @@ static int cache_alloc(struct cache_sb *sb, struct cache *ca)
4205 return 0;
4206 }
4207
4208 -static void register_cache(struct cache_sb *sb, struct page *sb_page,
4209 +static int register_cache(struct cache_sb *sb, struct page *sb_page,
4210 struct block_device *bdev, struct cache *ca)
4211 {
4212 char name[BDEVNAME_SIZE];
4213 - const char *err = "cannot allocate memory";
4214 + const char *err = NULL;
4215 + int ret = 0;
4216
4217 memcpy(&ca->sb, sb, sizeof(struct cache_sb));
4218 ca->bdev = bdev;
4219 @@ -1847,27 +1858,35 @@ static void register_cache(struct cache_sb *sb, struct page *sb_page,
4220 if (blk_queue_discard(bdev_get_queue(ca->bdev)))
4221 ca->discard = CACHE_DISCARD(&ca->sb);
4222
4223 - if (cache_alloc(sb, ca) != 0)
4224 + ret = cache_alloc(sb, ca);
4225 + if (ret != 0)
4226 goto err;
4227
4228 - err = "error creating kobject";
4229 - if (kobject_add(&ca->kobj, &part_to_dev(bdev->bd_part)->kobj, "bcache"))
4230 - goto err;
4231 + if (kobject_add(&ca->kobj, &part_to_dev(bdev->bd_part)->kobj, "bcache")) {
4232 + err = "error calling kobject_add";
4233 + ret = -ENOMEM;
4234 + goto out;
4235 + }
4236
4237 mutex_lock(&bch_register_lock);
4238 err = register_cache_set(ca);
4239 mutex_unlock(&bch_register_lock);
4240
4241 - if (err)
4242 - goto err;
4243 + if (err) {
4244 + ret = -ENODEV;
4245 + goto out;
4246 + }
4247
4248 pr_info("registered cache device %s", bdevname(bdev, name));
4249 +
4250 out:
4251 kobject_put(&ca->kobj);
4252 - return;
4253 +
4254 err:
4255 - pr_notice("error opening %s: %s", bdevname(bdev, name), err);
4256 - goto out;
4257 + if (err)
4258 + pr_notice("error opening %s: %s", bdevname(bdev, name), err);
4259 +
4260 + return ret;
4261 }
4262
4263 /* Global interfaces/init */
4264 @@ -1965,7 +1984,8 @@ static ssize_t register_bcache(struct kobject *k, struct kobj_attribute *attr,
4265 if (!ca)
4266 goto err_close;
4267
4268 - register_cache(sb, sb_page, bdev, ca);
4269 + if (register_cache(sb, sb_page, bdev, ca) != 0)
4270 + goto err_close;
4271 }
4272 out:
4273 if (sb_page)
4274 diff --git a/drivers/md/dm-cache-metadata.c b/drivers/md/dm-cache-metadata.c
4275 index f6543f3a970f..27f2ef300f8b 100644
4276 --- a/drivers/md/dm-cache-metadata.c
4277 +++ b/drivers/md/dm-cache-metadata.c
4278 @@ -867,19 +867,40 @@ static int blocks_are_unmapped_or_clean(struct dm_cache_metadata *cmd,
4279 return 0;
4280 }
4281
4282 -#define WRITE_LOCK(cmd) \
4283 - if (cmd->fail_io || dm_bm_is_read_only(cmd->bm)) \
4284 +#define WRITE_LOCK(cmd) \
4285 + down_write(&cmd->root_lock); \
4286 + if (cmd->fail_io || dm_bm_is_read_only(cmd->bm)) { \
4287 + up_write(&cmd->root_lock); \
4288 return -EINVAL; \
4289 - down_write(&cmd->root_lock)
4290 + }
4291
4292 #define WRITE_LOCK_VOID(cmd) \
4293 - if (cmd->fail_io || dm_bm_is_read_only(cmd->bm)) \
4294 + down_write(&cmd->root_lock); \
4295 + if (cmd->fail_io || dm_bm_is_read_only(cmd->bm)) { \
4296 + up_write(&cmd->root_lock); \
4297 return; \
4298 - down_write(&cmd->root_lock)
4299 + }
4300
4301 #define WRITE_UNLOCK(cmd) \
4302 up_write(&cmd->root_lock)
4303
4304 +#define READ_LOCK(cmd) \
4305 + down_read(&cmd->root_lock); \
4306 + if (cmd->fail_io || dm_bm_is_read_only(cmd->bm)) { \
4307 + up_read(&cmd->root_lock); \
4308 + return -EINVAL; \
4309 + }
4310 +
4311 +#define READ_LOCK_VOID(cmd) \
4312 + down_read(&cmd->root_lock); \
4313 + if (cmd->fail_io || dm_bm_is_read_only(cmd->bm)) { \
4314 + up_read(&cmd->root_lock); \
4315 + return; \
4316 + }
4317 +
4318 +#define READ_UNLOCK(cmd) \
4319 + up_read(&cmd->root_lock)
4320 +
4321 int dm_cache_resize(struct dm_cache_metadata *cmd, dm_cblock_t new_cache_size)
4322 {
4323 int r;
4324 @@ -1015,22 +1036,20 @@ int dm_cache_load_discards(struct dm_cache_metadata *cmd,
4325 {
4326 int r;
4327
4328 - down_read(&cmd->root_lock);
4329 + READ_LOCK(cmd);
4330 r = __load_discards(cmd, fn, context);
4331 - up_read(&cmd->root_lock);
4332 + READ_UNLOCK(cmd);
4333
4334 return r;
4335 }
4336
4337 -dm_cblock_t dm_cache_size(struct dm_cache_metadata *cmd)
4338 +int dm_cache_size(struct dm_cache_metadata *cmd, dm_cblock_t *result)
4339 {
4340 - dm_cblock_t r;
4341 + READ_LOCK(cmd);
4342 + *result = cmd->cache_blocks;
4343 + READ_UNLOCK(cmd);
4344
4345 - down_read(&cmd->root_lock);
4346 - r = cmd->cache_blocks;
4347 - up_read(&cmd->root_lock);
4348 -
4349 - return r;
4350 + return 0;
4351 }
4352
4353 static int __remove(struct dm_cache_metadata *cmd, dm_cblock_t cblock)
4354 @@ -1188,9 +1207,9 @@ int dm_cache_load_mappings(struct dm_cache_metadata *cmd,
4355 {
4356 int r;
4357
4358 - down_read(&cmd->root_lock);
4359 + READ_LOCK(cmd);
4360 r = __load_mappings(cmd, policy, fn, context);
4361 - up_read(&cmd->root_lock);
4362 + READ_UNLOCK(cmd);
4363
4364 return r;
4365 }
4366 @@ -1215,18 +1234,18 @@ static int __dump_mappings(struct dm_cache_metadata *cmd)
4367
4368 void dm_cache_dump(struct dm_cache_metadata *cmd)
4369 {
4370 - down_read(&cmd->root_lock);
4371 + READ_LOCK_VOID(cmd);
4372 __dump_mappings(cmd);
4373 - up_read(&cmd->root_lock);
4374 + READ_UNLOCK(cmd);
4375 }
4376
4377 int dm_cache_changed_this_transaction(struct dm_cache_metadata *cmd)
4378 {
4379 int r;
4380
4381 - down_read(&cmd->root_lock);
4382 + READ_LOCK(cmd);
4383 r = cmd->changed;
4384 - up_read(&cmd->root_lock);
4385 + READ_UNLOCK(cmd);
4386
4387 return r;
4388 }
4389 @@ -1276,9 +1295,9 @@ int dm_cache_set_dirty(struct dm_cache_metadata *cmd,
4390 void dm_cache_metadata_get_stats(struct dm_cache_metadata *cmd,
4391 struct dm_cache_statistics *stats)
4392 {
4393 - down_read(&cmd->root_lock);
4394 + READ_LOCK_VOID(cmd);
4395 *stats = cmd->stats;
4396 - up_read(&cmd->root_lock);
4397 + READ_UNLOCK(cmd);
4398 }
4399
4400 void dm_cache_metadata_set_stats(struct dm_cache_metadata *cmd,
4401 @@ -1312,9 +1331,9 @@ int dm_cache_get_free_metadata_block_count(struct dm_cache_metadata *cmd,
4402 {
4403 int r = -EINVAL;
4404
4405 - down_read(&cmd->root_lock);
4406 + READ_LOCK(cmd);
4407 r = dm_sm_get_nr_free(cmd->metadata_sm, result);
4408 - up_read(&cmd->root_lock);
4409 + READ_UNLOCK(cmd);
4410
4411 return r;
4412 }
4413 @@ -1324,9 +1343,9 @@ int dm_cache_get_metadata_dev_size(struct dm_cache_metadata *cmd,
4414 {
4415 int r = -EINVAL;
4416
4417 - down_read(&cmd->root_lock);
4418 + READ_LOCK(cmd);
4419 r = dm_sm_get_nr_blocks(cmd->metadata_sm, result);
4420 - up_read(&cmd->root_lock);
4421 + READ_UNLOCK(cmd);
4422
4423 return r;
4424 }
4425 @@ -1417,7 +1436,13 @@ int dm_cache_write_hints(struct dm_cache_metadata *cmd, struct dm_cache_policy *
4426
4427 int dm_cache_metadata_all_clean(struct dm_cache_metadata *cmd, bool *result)
4428 {
4429 - return blocks_are_unmapped_or_clean(cmd, 0, cmd->cache_blocks, result);
4430 + int r;
4431 +
4432 + READ_LOCK(cmd);
4433 + r = blocks_are_unmapped_or_clean(cmd, 0, cmd->cache_blocks, result);
4434 + READ_UNLOCK(cmd);
4435 +
4436 + return r;
4437 }
4438
4439 void dm_cache_metadata_set_read_only(struct dm_cache_metadata *cmd)
4440 @@ -1440,10 +1465,7 @@ int dm_cache_metadata_set_needs_check(struct dm_cache_metadata *cmd)
4441 struct dm_block *sblock;
4442 struct cache_disk_superblock *disk_super;
4443
4444 - /*
4445 - * We ignore fail_io for this function.
4446 - */
4447 - down_write(&cmd->root_lock);
4448 + WRITE_LOCK(cmd);
4449 set_bit(NEEDS_CHECK, &cmd->flags);
4450
4451 r = superblock_lock(cmd, &sblock);
4452 @@ -1458,19 +1480,17 @@ int dm_cache_metadata_set_needs_check(struct dm_cache_metadata *cmd)
4453 dm_bm_unlock(sblock);
4454
4455 out:
4456 - up_write(&cmd->root_lock);
4457 + WRITE_UNLOCK(cmd);
4458 return r;
4459 }
4460
4461 -bool dm_cache_metadata_needs_check(struct dm_cache_metadata *cmd)
4462 +int dm_cache_metadata_needs_check(struct dm_cache_metadata *cmd, bool *result)
4463 {
4464 - bool needs_check;
4465 + READ_LOCK(cmd);
4466 + *result = !!test_bit(NEEDS_CHECK, &cmd->flags);
4467 + READ_UNLOCK(cmd);
4468
4469 - down_read(&cmd->root_lock);
4470 - needs_check = !!test_bit(NEEDS_CHECK, &cmd->flags);
4471 - up_read(&cmd->root_lock);
4472 -
4473 - return needs_check;
4474 + return 0;
4475 }
4476
4477 int dm_cache_metadata_abort(struct dm_cache_metadata *cmd)
4478 diff --git a/drivers/md/dm-cache-metadata.h b/drivers/md/dm-cache-metadata.h
4479 index 2ffee21f318d..8528744195e5 100644
4480 --- a/drivers/md/dm-cache-metadata.h
4481 +++ b/drivers/md/dm-cache-metadata.h
4482 @@ -66,7 +66,7 @@ void dm_cache_metadata_close(struct dm_cache_metadata *cmd);
4483 * origin blocks to map to.
4484 */
4485 int dm_cache_resize(struct dm_cache_metadata *cmd, dm_cblock_t new_cache_size);
4486 -dm_cblock_t dm_cache_size(struct dm_cache_metadata *cmd);
4487 +int dm_cache_size(struct dm_cache_metadata *cmd, dm_cblock_t *result);
4488
4489 int dm_cache_discard_bitset_resize(struct dm_cache_metadata *cmd,
4490 sector_t discard_block_size,
4491 @@ -137,7 +137,7 @@ int dm_cache_write_hints(struct dm_cache_metadata *cmd, struct dm_cache_policy *
4492 */
4493 int dm_cache_metadata_all_clean(struct dm_cache_metadata *cmd, bool *result);
4494
4495 -bool dm_cache_metadata_needs_check(struct dm_cache_metadata *cmd);
4496 +int dm_cache_metadata_needs_check(struct dm_cache_metadata *cmd, bool *result);
4497 int dm_cache_metadata_set_needs_check(struct dm_cache_metadata *cmd);
4498 void dm_cache_metadata_set_read_only(struct dm_cache_metadata *cmd);
4499 void dm_cache_metadata_set_read_write(struct dm_cache_metadata *cmd);
4500 diff --git a/drivers/md/dm-cache-target.c b/drivers/md/dm-cache-target.c
4501 index 2fd4c8296144..515f83e7d9ab 100644
4502 --- a/drivers/md/dm-cache-target.c
4503 +++ b/drivers/md/dm-cache-target.c
4504 @@ -987,9 +987,14 @@ static void notify_mode_switch(struct cache *cache, enum cache_metadata_mode mod
4505
4506 static void set_cache_mode(struct cache *cache, enum cache_metadata_mode new_mode)
4507 {
4508 - bool needs_check = dm_cache_metadata_needs_check(cache->cmd);
4509 + bool needs_check;
4510 enum cache_metadata_mode old_mode = get_cache_mode(cache);
4511
4512 + if (dm_cache_metadata_needs_check(cache->cmd, &needs_check)) {
4513 + DMERR("unable to read needs_check flag, setting failure mode");
4514 + new_mode = CM_FAIL;
4515 + }
4516 +
4517 if (new_mode == CM_WRITE && needs_check) {
4518 DMERR("%s: unable to switch cache to write mode until repaired.",
4519 cache_device_name(cache));
4520 @@ -3513,6 +3518,7 @@ static void cache_status(struct dm_target *ti, status_type_t type,
4521 char buf[BDEVNAME_SIZE];
4522 struct cache *cache = ti->private;
4523 dm_cblock_t residency;
4524 + bool needs_check;
4525
4526 switch (type) {
4527 case STATUSTYPE_INFO:
4528 @@ -3586,7 +3592,9 @@ static void cache_status(struct dm_target *ti, status_type_t type,
4529 else
4530 DMEMIT("rw ");
4531
4532 - if (dm_cache_metadata_needs_check(cache->cmd))
4533 + r = dm_cache_metadata_needs_check(cache->cmd, &needs_check);
4534 +
4535 + if (r || needs_check)
4536 DMEMIT("needs_check ");
4537 else
4538 DMEMIT("- ");
4539 diff --git a/drivers/md/dm-snap.c b/drivers/md/dm-snap.c
4540 index 61f184ad081c..e108deebbaaa 100644
4541 --- a/drivers/md/dm-snap.c
4542 +++ b/drivers/md/dm-snap.c
4543 @@ -1106,6 +1106,7 @@ static int snapshot_ctr(struct dm_target *ti, unsigned int argc, char **argv)
4544 int i;
4545 int r = -EINVAL;
4546 char *origin_path, *cow_path;
4547 + dev_t origin_dev, cow_dev;
4548 unsigned args_used, num_flush_bios = 1;
4549 fmode_t origin_mode = FMODE_READ;
4550
4551 @@ -1136,11 +1137,19 @@ static int snapshot_ctr(struct dm_target *ti, unsigned int argc, char **argv)
4552 ti->error = "Cannot get origin device";
4553 goto bad_origin;
4554 }
4555 + origin_dev = s->origin->bdev->bd_dev;
4556
4557 cow_path = argv[0];
4558 argv++;
4559 argc--;
4560
4561 + cow_dev = dm_get_dev_t(cow_path);
4562 + if (cow_dev && cow_dev == origin_dev) {
4563 + ti->error = "COW device cannot be the same as origin device";
4564 + r = -EINVAL;
4565 + goto bad_cow;
4566 + }
4567 +
4568 r = dm_get_device(ti, cow_path, dm_table_get_mode(ti->table), &s->cow);
4569 if (r) {
4570 ti->error = "Cannot get COW device";
4571 diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c
4572 index 061152a43730..cb5d0daf53bb 100644
4573 --- a/drivers/md/dm-table.c
4574 +++ b/drivers/md/dm-table.c
4575 @@ -365,6 +365,26 @@ static int upgrade_mode(struct dm_dev_internal *dd, fmode_t new_mode,
4576 }
4577
4578 /*
4579 + * Convert the path to a device
4580 + */
4581 +dev_t dm_get_dev_t(const char *path)
4582 +{
4583 + dev_t uninitialized_var(dev);
4584 + struct block_device *bdev;
4585 +
4586 + bdev = lookup_bdev(path);
4587 + if (IS_ERR(bdev))
4588 + dev = name_to_dev_t(path);
4589 + else {
4590 + dev = bdev->bd_dev;
4591 + bdput(bdev);
4592 + }
4593 +
4594 + return dev;
4595 +}
4596 +EXPORT_SYMBOL_GPL(dm_get_dev_t);
4597 +
4598 +/*
4599 * Add a device to the list, or just increment the usage count if
4600 * it's already present.
4601 */
4602 @@ -372,23 +392,15 @@ int dm_get_device(struct dm_target *ti, const char *path, fmode_t mode,
4603 struct dm_dev **result)
4604 {
4605 int r;
4606 - dev_t uninitialized_var(dev);
4607 + dev_t dev;
4608 struct dm_dev_internal *dd;
4609 struct dm_table *t = ti->table;
4610 - struct block_device *bdev;
4611
4612 BUG_ON(!t);
4613
4614 - /* convert the path to a device */
4615 - bdev = lookup_bdev(path);
4616 - if (IS_ERR(bdev)) {
4617 - dev = name_to_dev_t(path);
4618 - if (!dev)
4619 - return -ENODEV;
4620 - } else {
4621 - dev = bdev->bd_dev;
4622 - bdput(bdev);
4623 - }
4624 + dev = dm_get_dev_t(path);
4625 + if (!dev)
4626 + return -ENODEV;
4627
4628 dd = find_device(&t->devices, dev);
4629 if (!dd) {
4630 diff --git a/drivers/md/dm-thin-metadata.c b/drivers/md/dm-thin-metadata.c
4631 index c219a053c7f6..911ada643364 100644
4632 --- a/drivers/md/dm-thin-metadata.c
4633 +++ b/drivers/md/dm-thin-metadata.c
4634 @@ -1943,5 +1943,8 @@ bool dm_pool_metadata_needs_check(struct dm_pool_metadata *pmd)
4635
4636 void dm_pool_issue_prefetches(struct dm_pool_metadata *pmd)
4637 {
4638 - dm_tm_issue_prefetches(pmd->tm);
4639 + down_read(&pmd->root_lock);
4640 + if (!pmd->fail_io)
4641 + dm_tm_issue_prefetches(pmd->tm);
4642 + up_read(&pmd->root_lock);
4643 }
4644 diff --git a/drivers/md/dm.c b/drivers/md/dm.c
4645 index dd834927bc66..c338aebb4ccd 100644
4646 --- a/drivers/md/dm.c
4647 +++ b/drivers/md/dm.c
4648 @@ -1109,12 +1109,8 @@ static void rq_completed(struct mapped_device *md, int rw, bool run_queue)
4649 * back into ->request_fn() could deadlock attempting to grab the
4650 * queue lock again.
4651 */
4652 - if (run_queue) {
4653 - if (md->queue->mq_ops)
4654 - blk_mq_run_hw_queues(md->queue, true);
4655 - else
4656 - blk_run_queue_async(md->queue);
4657 - }
4658 + if (!md->queue->mq_ops && run_queue)
4659 + blk_run_queue_async(md->queue);
4660
4661 /*
4662 * dm_put() must be at the end of this function. See the comment above
4663 @@ -1214,9 +1210,9 @@ static void dm_requeue_original_request(struct mapped_device *md,
4664 {
4665 int rw = rq_data_dir(rq);
4666
4667 + rq_end_stats(md, rq);
4668 dm_unprep_request(rq);
4669
4670 - rq_end_stats(md, rq);
4671 if (!rq->q->mq_ops)
4672 old_requeue_request(rq);
4673 else {
4674 @@ -1336,7 +1332,10 @@ static void dm_complete_request(struct request *rq, int error)
4675 struct dm_rq_target_io *tio = tio_from_request(rq);
4676
4677 tio->error = error;
4678 - blk_complete_request(rq);
4679 + if (!rq->q->mq_ops)
4680 + blk_complete_request(rq);
4681 + else
4682 + blk_mq_complete_request(rq, error);
4683 }
4684
4685 /*
4686 diff --git a/drivers/md/multipath.c b/drivers/md/multipath.c
4687 index 0a72ab6e6c20..dd483bb2e111 100644
4688 --- a/drivers/md/multipath.c
4689 +++ b/drivers/md/multipath.c
4690 @@ -129,7 +129,9 @@ static void multipath_make_request(struct mddev *mddev, struct bio * bio)
4691 }
4692 multipath = conf->multipaths + mp_bh->path;
4693
4694 - mp_bh->bio = *bio;
4695 + bio_init(&mp_bh->bio);
4696 + __bio_clone_fast(&mp_bh->bio, bio);
4697 +
4698 mp_bh->bio.bi_iter.bi_sector += multipath->rdev->data_offset;
4699 mp_bh->bio.bi_bdev = multipath->rdev->bdev;
4700 mp_bh->bio.bi_rw |= REQ_FAILFAST_TRANSPORT;
4701 diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
4702 index c4b913409226..515554c7365b 100644
4703 --- a/drivers/md/raid1.c
4704 +++ b/drivers/md/raid1.c
4705 @@ -2274,6 +2274,7 @@ static void handle_write_finished(struct r1conf *conf, struct r1bio *r1_bio)
4706 if (fail) {
4707 spin_lock_irq(&conf->device_lock);
4708 list_add(&r1_bio->retry_list, &conf->bio_end_io_list);
4709 + conf->nr_queued++;
4710 spin_unlock_irq(&conf->device_lock);
4711 md_wakeup_thread(conf->mddev->thread);
4712 } else {
4713 @@ -2391,8 +2392,10 @@ static void raid1d(struct md_thread *thread)
4714 LIST_HEAD(tmp);
4715 spin_lock_irqsave(&conf->device_lock, flags);
4716 if (!test_bit(MD_CHANGE_PENDING, &mddev->flags)) {
4717 - list_add(&tmp, &conf->bio_end_io_list);
4718 - list_del_init(&conf->bio_end_io_list);
4719 + while (!list_empty(&conf->bio_end_io_list)) {
4720 + list_move(conf->bio_end_io_list.prev, &tmp);
4721 + conf->nr_queued--;
4722 + }
4723 }
4724 spin_unlock_irqrestore(&conf->device_lock, flags);
4725 while (!list_empty(&tmp)) {
4726 diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
4727 index ce959b4ae4df..ebb0dd612ebd 100644
4728 --- a/drivers/md/raid10.c
4729 +++ b/drivers/md/raid10.c
4730 @@ -2664,6 +2664,7 @@ static void handle_write_completed(struct r10conf *conf, struct r10bio *r10_bio)
4731 if (fail) {
4732 spin_lock_irq(&conf->device_lock);
4733 list_add(&r10_bio->retry_list, &conf->bio_end_io_list);
4734 + conf->nr_queued++;
4735 spin_unlock_irq(&conf->device_lock);
4736 md_wakeup_thread(conf->mddev->thread);
4737 } else {
4738 @@ -2691,8 +2692,10 @@ static void raid10d(struct md_thread *thread)
4739 LIST_HEAD(tmp);
4740 spin_lock_irqsave(&conf->device_lock, flags);
4741 if (!test_bit(MD_CHANGE_PENDING, &mddev->flags)) {
4742 - list_add(&tmp, &conf->bio_end_io_list);
4743 - list_del_init(&conf->bio_end_io_list);
4744 + while (!list_empty(&conf->bio_end_io_list)) {
4745 + list_move(conf->bio_end_io_list.prev, &tmp);
4746 + conf->nr_queued--;
4747 + }
4748 }
4749 spin_unlock_irqrestore(&conf->device_lock, flags);
4750 while (!list_empty(&tmp)) {
4751 diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
4752 index 704ef7fcfbf8..10ce885445f6 100644
4753 --- a/drivers/md/raid5.c
4754 +++ b/drivers/md/raid5.c
4755 @@ -340,8 +340,7 @@ static void release_inactive_stripe_list(struct r5conf *conf,
4756 int hash)
4757 {
4758 int size;
4759 - unsigned long do_wakeup = 0;
4760 - int i = 0;
4761 + bool do_wakeup = false;
4762 unsigned long flags;
4763
4764 if (hash == NR_STRIPE_HASH_LOCKS) {
4765 @@ -362,19 +361,15 @@ static void release_inactive_stripe_list(struct r5conf *conf,
4766 !list_empty(list))
4767 atomic_dec(&conf->empty_inactive_list_nr);
4768 list_splice_tail_init(list, conf->inactive_list + hash);
4769 - do_wakeup |= 1 << hash;
4770 + do_wakeup = true;
4771 spin_unlock_irqrestore(conf->hash_locks + hash, flags);
4772 }
4773 size--;
4774 hash--;
4775 }
4776
4777 - for (i = 0; i < NR_STRIPE_HASH_LOCKS; i++) {
4778 - if (do_wakeup & (1 << i))
4779 - wake_up(&conf->wait_for_stripe[i]);
4780 - }
4781 -
4782 if (do_wakeup) {
4783 + wake_up(&conf->wait_for_stripe);
4784 if (atomic_read(&conf->active_stripes) == 0)
4785 wake_up(&conf->wait_for_quiescent);
4786 if (conf->retry_read_aligned)
4787 @@ -687,15 +682,14 @@ raid5_get_active_stripe(struct r5conf *conf, sector_t sector,
4788 if (!sh) {
4789 set_bit(R5_INACTIVE_BLOCKED,
4790 &conf->cache_state);
4791 - wait_event_exclusive_cmd(
4792 - conf->wait_for_stripe[hash],
4793 + wait_event_lock_irq(
4794 + conf->wait_for_stripe,
4795 !list_empty(conf->inactive_list + hash) &&
4796 (atomic_read(&conf->active_stripes)
4797 < (conf->max_nr_stripes * 3 / 4)
4798 || !test_bit(R5_INACTIVE_BLOCKED,
4799 &conf->cache_state)),
4800 - spin_unlock_irq(conf->hash_locks + hash),
4801 - spin_lock_irq(conf->hash_locks + hash));
4802 + *(conf->hash_locks + hash));
4803 clear_bit(R5_INACTIVE_BLOCKED,
4804 &conf->cache_state);
4805 } else {
4806 @@ -720,9 +714,6 @@ raid5_get_active_stripe(struct r5conf *conf, sector_t sector,
4807 }
4808 } while (sh == NULL);
4809
4810 - if (!list_empty(conf->inactive_list + hash))
4811 - wake_up(&conf->wait_for_stripe[hash]);
4812 -
4813 spin_unlock_irq(conf->hash_locks + hash);
4814 return sh;
4815 }
4816 @@ -2091,6 +2082,14 @@ static int resize_chunks(struct r5conf *conf, int new_disks, int new_sectors)
4817 unsigned long cpu;
4818 int err = 0;
4819
4820 + /*
4821 + * Never shrink. And mddev_suspend() could deadlock if this is called
4822 + * from raid5d. In that case, scribble_disks and scribble_sectors
4823 + * should equal to new_disks and new_sectors
4824 + */
4825 + if (conf->scribble_disks >= new_disks &&
4826 + conf->scribble_sectors >= new_sectors)
4827 + return 0;
4828 mddev_suspend(conf->mddev);
4829 get_online_cpus();
4830 for_each_present_cpu(cpu) {
4831 @@ -2112,6 +2111,10 @@ static int resize_chunks(struct r5conf *conf, int new_disks, int new_sectors)
4832 }
4833 put_online_cpus();
4834 mddev_resume(conf->mddev);
4835 + if (!err) {
4836 + conf->scribble_disks = new_disks;
4837 + conf->scribble_sectors = new_sectors;
4838 + }
4839 return err;
4840 }
4841
4842 @@ -2192,7 +2195,7 @@ static int resize_stripes(struct r5conf *conf, int newsize)
4843 cnt = 0;
4844 list_for_each_entry(nsh, &newstripes, lru) {
4845 lock_device_hash_lock(conf, hash);
4846 - wait_event_exclusive_cmd(conf->wait_for_stripe[hash],
4847 + wait_event_cmd(conf->wait_for_stripe,
4848 !list_empty(conf->inactive_list + hash),
4849 unlock_device_hash_lock(conf, hash),
4850 lock_device_hash_lock(conf, hash));
4851 @@ -4238,7 +4241,6 @@ static void break_stripe_batch_list(struct stripe_head *head_sh,
4852 WARN_ON_ONCE(sh->state & ((1 << STRIPE_ACTIVE) |
4853 (1 << STRIPE_SYNCING) |
4854 (1 << STRIPE_REPLACED) |
4855 - (1 << STRIPE_PREREAD_ACTIVE) |
4856 (1 << STRIPE_DELAYED) |
4857 (1 << STRIPE_BIT_DELAY) |
4858 (1 << STRIPE_FULL_WRITE) |
4859 @@ -4253,6 +4255,7 @@ static void break_stripe_batch_list(struct stripe_head *head_sh,
4860 (1 << STRIPE_REPLACED)));
4861
4862 set_mask_bits(&sh->state, ~(STRIPE_EXPAND_SYNC_FLAGS |
4863 + (1 << STRIPE_PREREAD_ACTIVE) |
4864 (1 << STRIPE_DEGRADED)),
4865 head_sh->state & (1 << STRIPE_INSYNC));
4866
4867 @@ -6414,6 +6417,12 @@ static int raid5_alloc_percpu(struct r5conf *conf)
4868 }
4869 put_online_cpus();
4870
4871 + if (!err) {
4872 + conf->scribble_disks = max(conf->raid_disks,
4873 + conf->previous_raid_disks);
4874 + conf->scribble_sectors = max(conf->chunk_sectors,
4875 + conf->prev_chunk_sectors);
4876 + }
4877 return err;
4878 }
4879
4880 @@ -6504,9 +6513,7 @@ static struct r5conf *setup_conf(struct mddev *mddev)
4881 seqcount_init(&conf->gen_lock);
4882 mutex_init(&conf->cache_size_mutex);
4883 init_waitqueue_head(&conf->wait_for_quiescent);
4884 - for (i = 0; i < NR_STRIPE_HASH_LOCKS; i++) {
4885 - init_waitqueue_head(&conf->wait_for_stripe[i]);
4886 - }
4887 + init_waitqueue_head(&conf->wait_for_stripe);
4888 init_waitqueue_head(&conf->wait_for_overlap);
4889 INIT_LIST_HEAD(&conf->handle_list);
4890 INIT_LIST_HEAD(&conf->hold_list);
4891 @@ -7015,8 +7022,8 @@ static int run(struct mddev *mddev)
4892 }
4893
4894 if (discard_supported &&
4895 - mddev->queue->limits.max_discard_sectors >= stripe &&
4896 - mddev->queue->limits.discard_granularity >= stripe)
4897 + mddev->queue->limits.max_discard_sectors >= (stripe >> 9) &&
4898 + mddev->queue->limits.discard_granularity >= stripe)
4899 queue_flag_set_unlocked(QUEUE_FLAG_DISCARD,
4900 mddev->queue);
4901 else
4902 diff --git a/drivers/md/raid5.h b/drivers/md/raid5.h
4903 index a415e1cd39b8..517d4b68a1be 100644
4904 --- a/drivers/md/raid5.h
4905 +++ b/drivers/md/raid5.h
4906 @@ -510,6 +510,8 @@ struct r5conf {
4907 * conversions
4908 */
4909 } __percpu *percpu;
4910 + int scribble_disks;
4911 + int scribble_sectors;
4912 #ifdef CONFIG_HOTPLUG_CPU
4913 struct notifier_block cpu_notify;
4914 #endif
4915 @@ -522,7 +524,7 @@ struct r5conf {
4916 atomic_t empty_inactive_list_nr;
4917 struct llist_head released_stripes;
4918 wait_queue_head_t wait_for_quiescent;
4919 - wait_queue_head_t wait_for_stripe[NR_STRIPE_HASH_LOCKS];
4920 + wait_queue_head_t wait_for_stripe;
4921 wait_queue_head_t wait_for_overlap;
4922 unsigned long cache_state;
4923 #define R5_INACTIVE_BLOCKED 1 /* release of inactive stripes blocked,
4924 diff --git a/drivers/media/i2c/adv7511.c b/drivers/media/i2c/adv7511.c
4925 index e4900df1140b..c24839cfcc35 100644
4926 --- a/drivers/media/i2c/adv7511.c
4927 +++ b/drivers/media/i2c/adv7511.c
4928 @@ -1161,12 +1161,23 @@ static void adv7511_dbg_dump_edid(int lvl, int debug, struct v4l2_subdev *sd, in
4929 }
4930 }
4931
4932 +static void adv7511_notify_no_edid(struct v4l2_subdev *sd)
4933 +{
4934 + struct adv7511_state *state = get_adv7511_state(sd);
4935 + struct adv7511_edid_detect ed;
4936 +
4937 + /* We failed to read the EDID, so send an event for this. */
4938 + ed.present = false;
4939 + ed.segment = adv7511_rd(sd, 0xc4);
4940 + v4l2_subdev_notify(sd, ADV7511_EDID_DETECT, (void *)&ed);
4941 + v4l2_ctrl_s_ctrl(state->have_edid0_ctrl, 0x0);
4942 +}
4943 +
4944 static void adv7511_edid_handler(struct work_struct *work)
4945 {
4946 struct delayed_work *dwork = to_delayed_work(work);
4947 struct adv7511_state *state = container_of(dwork, struct adv7511_state, edid_handler);
4948 struct v4l2_subdev *sd = &state->sd;
4949 - struct adv7511_edid_detect ed;
4950
4951 v4l2_dbg(1, debug, sd, "%s:\n", __func__);
4952
4953 @@ -1191,9 +1202,7 @@ static void adv7511_edid_handler(struct work_struct *work)
4954 }
4955
4956 /* We failed to read the EDID, so send an event for this. */
4957 - ed.present = false;
4958 - ed.segment = adv7511_rd(sd, 0xc4);
4959 - v4l2_subdev_notify(sd, ADV7511_EDID_DETECT, (void *)&ed);
4960 + adv7511_notify_no_edid(sd);
4961 v4l2_dbg(1, debug, sd, "%s: no edid found\n", __func__);
4962 }
4963
4964 @@ -1264,7 +1273,6 @@ static void adv7511_check_monitor_present_status(struct v4l2_subdev *sd)
4965 /* update read only ctrls */
4966 v4l2_ctrl_s_ctrl(state->hotplug_ctrl, adv7511_have_hotplug(sd) ? 0x1 : 0x0);
4967 v4l2_ctrl_s_ctrl(state->rx_sense_ctrl, adv7511_have_rx_sense(sd) ? 0x1 : 0x0);
4968 - v4l2_ctrl_s_ctrl(state->have_edid0_ctrl, state->edid.segments ? 0x1 : 0x0);
4969
4970 if ((status & MASK_ADV7511_HPD_DETECT) && ((status & MASK_ADV7511_MSEN_DETECT) || state->edid.segments)) {
4971 v4l2_dbg(1, debug, sd, "%s: hotplug and (rx-sense or edid)\n", __func__);
4972 @@ -1294,6 +1302,7 @@ static void adv7511_check_monitor_present_status(struct v4l2_subdev *sd)
4973 }
4974 adv7511_s_power(sd, false);
4975 memset(&state->edid, 0, sizeof(struct adv7511_state_edid));
4976 + adv7511_notify_no_edid(sd);
4977 }
4978 }
4979
4980 @@ -1370,6 +1379,7 @@ static bool adv7511_check_edid_status(struct v4l2_subdev *sd)
4981 }
4982 /* one more segment read ok */
4983 state->edid.segments = segment + 1;
4984 + v4l2_ctrl_s_ctrl(state->have_edid0_ctrl, 0x1);
4985 if (((state->edid.data[0x7e] >> 1) + 1) > state->edid.segments) {
4986 /* Request next EDID segment */
4987 v4l2_dbg(1, debug, sd, "%s: request segment %d\n", __func__, state->edid.segments);
4988 @@ -1389,7 +1399,6 @@ static bool adv7511_check_edid_status(struct v4l2_subdev *sd)
4989 ed.present = true;
4990 ed.segment = 0;
4991 state->edid_detect_counter++;
4992 - v4l2_ctrl_s_ctrl(state->have_edid0_ctrl, state->edid.segments ? 0x1 : 0x0);
4993 v4l2_subdev_notify(sd, ADV7511_EDID_DETECT, (void *)&ed);
4994 return ed.present;
4995 }
4996 diff --git a/drivers/media/pci/bt8xx/bttv-driver.c b/drivers/media/pci/bt8xx/bttv-driver.c
4997 index 15a4ebc2844d..51dbef2f9a48 100644
4998 --- a/drivers/media/pci/bt8xx/bttv-driver.c
4999 +++ b/drivers/media/pci/bt8xx/bttv-driver.c
5000 @@ -2334,6 +2334,19 @@ static int bttv_g_fmt_vid_overlay(struct file *file, void *priv,
5001 return 0;
5002 }
5003
5004 +static void bttv_get_width_mask_vid_cap(const struct bttv_format *fmt,
5005 + unsigned int *width_mask,
5006 + unsigned int *width_bias)
5007 +{
5008 + if (fmt->flags & FORMAT_FLAGS_PLANAR) {
5009 + *width_mask = ~15; /* width must be a multiple of 16 pixels */
5010 + *width_bias = 8; /* nearest */
5011 + } else {
5012 + *width_mask = ~3; /* width must be a multiple of 4 pixels */
5013 + *width_bias = 2; /* nearest */
5014 + }
5015 +}
5016 +
5017 static int bttv_try_fmt_vid_cap(struct file *file, void *priv,
5018 struct v4l2_format *f)
5019 {
5020 @@ -2343,6 +2356,7 @@ static int bttv_try_fmt_vid_cap(struct file *file, void *priv,
5021 enum v4l2_field field;
5022 __s32 width, height;
5023 __s32 height2;
5024 + unsigned int width_mask, width_bias;
5025 int rc;
5026
5027 fmt = format_by_fourcc(f->fmt.pix.pixelformat);
5028 @@ -2375,9 +2389,9 @@ static int bttv_try_fmt_vid_cap(struct file *file, void *priv,
5029 width = f->fmt.pix.width;
5030 height = f->fmt.pix.height;
5031
5032 + bttv_get_width_mask_vid_cap(fmt, &width_mask, &width_bias);
5033 rc = limit_scaled_size_lock(fh, &width, &height, field,
5034 - /* width_mask: 4 pixels */ ~3,
5035 - /* width_bias: nearest */ 2,
5036 + width_mask, width_bias,
5037 /* adjust_size */ 1,
5038 /* adjust_crop */ 0);
5039 if (0 != rc)
5040 @@ -2410,6 +2424,7 @@ static int bttv_s_fmt_vid_cap(struct file *file, void *priv,
5041 struct bttv_fh *fh = priv;
5042 struct bttv *btv = fh->btv;
5043 __s32 width, height;
5044 + unsigned int width_mask, width_bias;
5045 enum v4l2_field field;
5046
5047 retval = bttv_switch_type(fh, f->type);
5048 @@ -2424,9 +2439,10 @@ static int bttv_s_fmt_vid_cap(struct file *file, void *priv,
5049 height = f->fmt.pix.height;
5050 field = f->fmt.pix.field;
5051
5052 + fmt = format_by_fourcc(f->fmt.pix.pixelformat);
5053 + bttv_get_width_mask_vid_cap(fmt, &width_mask, &width_bias);
5054 retval = limit_scaled_size_lock(fh, &width, &height, f->fmt.pix.field,
5055 - /* width_mask: 4 pixels */ ~3,
5056 - /* width_bias: nearest */ 2,
5057 + width_mask, width_bias,
5058 /* adjust_size */ 1,
5059 /* adjust_crop */ 1);
5060 if (0 != retval)
5061 @@ -2434,8 +2450,6 @@ static int bttv_s_fmt_vid_cap(struct file *file, void *priv,
5062
5063 f->fmt.pix.field = field;
5064
5065 - fmt = format_by_fourcc(f->fmt.pix.pixelformat);
5066 -
5067 /* update our state informations */
5068 fh->fmt = fmt;
5069 fh->cap.field = f->fmt.pix.field;
5070 diff --git a/drivers/media/pci/saa7134/saa7134-video.c b/drivers/media/pci/saa7134/saa7134-video.c
5071 index 518086c7aed5..15e56c07b217 100644
5072 --- a/drivers/media/pci/saa7134/saa7134-video.c
5073 +++ b/drivers/media/pci/saa7134/saa7134-video.c
5074 @@ -1219,10 +1219,13 @@ static int saa7134_g_fmt_vid_cap(struct file *file, void *priv,
5075 f->fmt.pix.height = dev->height;
5076 f->fmt.pix.field = dev->field;
5077 f->fmt.pix.pixelformat = dev->fmt->fourcc;
5078 - f->fmt.pix.bytesperline =
5079 - (f->fmt.pix.width * dev->fmt->depth) >> 3;
5080 + if (dev->fmt->planar)
5081 + f->fmt.pix.bytesperline = f->fmt.pix.width;
5082 + else
5083 + f->fmt.pix.bytesperline =
5084 + (f->fmt.pix.width * dev->fmt->depth) / 8;
5085 f->fmt.pix.sizeimage =
5086 - f->fmt.pix.height * f->fmt.pix.bytesperline;
5087 + (f->fmt.pix.height * f->fmt.pix.width * dev->fmt->depth) / 8;
5088 f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M;
5089 return 0;
5090 }
5091 @@ -1298,10 +1301,13 @@ static int saa7134_try_fmt_vid_cap(struct file *file, void *priv,
5092 if (f->fmt.pix.height > maxh)
5093 f->fmt.pix.height = maxh;
5094 f->fmt.pix.width &= ~0x03;
5095 - f->fmt.pix.bytesperline =
5096 - (f->fmt.pix.width * fmt->depth) >> 3;
5097 + if (fmt->planar)
5098 + f->fmt.pix.bytesperline = f->fmt.pix.width;
5099 + else
5100 + f->fmt.pix.bytesperline =
5101 + (f->fmt.pix.width * fmt->depth) / 8;
5102 f->fmt.pix.sizeimage =
5103 - f->fmt.pix.height * f->fmt.pix.bytesperline;
5104 + (f->fmt.pix.height * f->fmt.pix.width * fmt->depth) / 8;
5105 f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M;
5106
5107 return 0;
5108 diff --git a/drivers/media/platform/coda/coda-bit.c b/drivers/media/platform/coda/coda-bit.c
5109 index 654e964f84a2..d76511c1c1e3 100644
5110 --- a/drivers/media/platform/coda/coda-bit.c
5111 +++ b/drivers/media/platform/coda/coda-bit.c
5112 @@ -1342,7 +1342,7 @@ static void coda_finish_encode(struct coda_ctx *ctx)
5113
5114 /* Calculate bytesused field */
5115 if (dst_buf->sequence == 0) {
5116 - vb2_set_plane_payload(&dst_buf->vb2_buf, 0,
5117 + vb2_set_plane_payload(&dst_buf->vb2_buf, 0, wr_ptr - start_ptr +
5118 ctx->vpu_header_size[0] +
5119 ctx->vpu_header_size[1] +
5120 ctx->vpu_header_size[2]);
5121 diff --git a/drivers/media/usb/pwc/pwc-if.c b/drivers/media/usb/pwc/pwc-if.c
5122 index b79c36fd8cd2..58f23bcfe94e 100644
5123 --- a/drivers/media/usb/pwc/pwc-if.c
5124 +++ b/drivers/media/usb/pwc/pwc-if.c
5125 @@ -91,6 +91,7 @@ static const struct usb_device_id pwc_device_table [] = {
5126 { USB_DEVICE(0x0471, 0x0312) },
5127 { USB_DEVICE(0x0471, 0x0313) }, /* the 'new' 720K */
5128 { USB_DEVICE(0x0471, 0x0329) }, /* Philips SPC 900NC PC Camera */
5129 + { USB_DEVICE(0x0471, 0x032C) }, /* Philips SPC 880NC PC Camera */
5130 { USB_DEVICE(0x069A, 0x0001) }, /* Askey */
5131 { USB_DEVICE(0x046D, 0x08B0) }, /* Logitech QuickCam Pro 3000 */
5132 { USB_DEVICE(0x046D, 0x08B1) }, /* Logitech QuickCam Notebook Pro */
5133 @@ -811,6 +812,11 @@ static int usb_pwc_probe(struct usb_interface *intf, const struct usb_device_id
5134 name = "Philips SPC 900NC webcam";
5135 type_id = 740;
5136 break;
5137 + case 0x032C:
5138 + PWC_INFO("Philips SPC 880NC USB webcam detected.\n");
5139 + name = "Philips SPC 880NC webcam";
5140 + type_id = 740;
5141 + break;
5142 default:
5143 return -ENODEV;
5144 break;
5145 diff --git a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
5146 index 327e83ac2469..f38c076752ce 100644
5147 --- a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
5148 +++ b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
5149 @@ -415,7 +415,8 @@ static int get_v4l2_buffer32(struct v4l2_buffer *kp, struct v4l2_buffer32 __user
5150 get_user(kp->index, &up->index) ||
5151 get_user(kp->type, &up->type) ||
5152 get_user(kp->flags, &up->flags) ||
5153 - get_user(kp->memory, &up->memory))
5154 + get_user(kp->memory, &up->memory) ||
5155 + get_user(kp->length, &up->length))
5156 return -EFAULT;
5157
5158 if (V4L2_TYPE_IS_OUTPUT(kp->type))
5159 @@ -427,9 +428,6 @@ static int get_v4l2_buffer32(struct v4l2_buffer *kp, struct v4l2_buffer32 __user
5160 return -EFAULT;
5161
5162 if (V4L2_TYPE_IS_MULTIPLANAR(kp->type)) {
5163 - if (get_user(kp->length, &up->length))
5164 - return -EFAULT;
5165 -
5166 num_planes = kp->length;
5167 if (num_planes == 0) {
5168 kp->m.planes = NULL;
5169 @@ -462,16 +460,14 @@ static int get_v4l2_buffer32(struct v4l2_buffer *kp, struct v4l2_buffer32 __user
5170 } else {
5171 switch (kp->memory) {
5172 case V4L2_MEMORY_MMAP:
5173 - if (get_user(kp->length, &up->length) ||
5174 - get_user(kp->m.offset, &up->m.offset))
5175 + if (get_user(kp->m.offset, &up->m.offset))
5176 return -EFAULT;
5177 break;
5178 case V4L2_MEMORY_USERPTR:
5179 {
5180 compat_long_t tmp;
5181
5182 - if (get_user(kp->length, &up->length) ||
5183 - get_user(tmp, &up->m.userptr))
5184 + if (get_user(tmp, &up->m.userptr))
5185 return -EFAULT;
5186
5187 kp->m.userptr = (unsigned long)compat_ptr(tmp);
5188 @@ -513,7 +509,8 @@ static int put_v4l2_buffer32(struct v4l2_buffer *kp, struct v4l2_buffer32 __user
5189 copy_to_user(&up->timecode, &kp->timecode, sizeof(struct v4l2_timecode)) ||
5190 put_user(kp->sequence, &up->sequence) ||
5191 put_user(kp->reserved2, &up->reserved2) ||
5192 - put_user(kp->reserved, &up->reserved))
5193 + put_user(kp->reserved, &up->reserved) ||
5194 + put_user(kp->length, &up->length))
5195 return -EFAULT;
5196
5197 if (V4L2_TYPE_IS_MULTIPLANAR(kp->type)) {
5198 @@ -536,13 +533,11 @@ static int put_v4l2_buffer32(struct v4l2_buffer *kp, struct v4l2_buffer32 __user
5199 } else {
5200 switch (kp->memory) {
5201 case V4L2_MEMORY_MMAP:
5202 - if (put_user(kp->length, &up->length) ||
5203 - put_user(kp->m.offset, &up->m.offset))
5204 + if (put_user(kp->m.offset, &up->m.offset))
5205 return -EFAULT;
5206 break;
5207 case V4L2_MEMORY_USERPTR:
5208 - if (put_user(kp->length, &up->length) ||
5209 - put_user(kp->m.userptr, &up->m.userptr))
5210 + if (put_user(kp->m.userptr, &up->m.userptr))
5211 return -EFAULT;
5212 break;
5213 case V4L2_MEMORY_OVERLAY:
5214 diff --git a/drivers/misc/mei/bus.c b/drivers/misc/mei/bus.c
5215 index 0b05aa938799..1a173d0af694 100644
5216 --- a/drivers/misc/mei/bus.c
5217 +++ b/drivers/misc/mei/bus.c
5218 @@ -53,6 +53,11 @@ ssize_t __mei_cl_send(struct mei_cl *cl, u8 *buf, size_t length,
5219 bus = cl->dev;
5220
5221 mutex_lock(&bus->device_lock);
5222 + if (bus->dev_state != MEI_DEV_ENABLED) {
5223 + rets = -ENODEV;
5224 + goto out;
5225 + }
5226 +
5227 if (!mei_cl_is_connected(cl)) {
5228 rets = -ENODEV;
5229 goto out;
5230 @@ -109,6 +114,10 @@ ssize_t __mei_cl_recv(struct mei_cl *cl, u8 *buf, size_t length)
5231 bus = cl->dev;
5232
5233 mutex_lock(&bus->device_lock);
5234 + if (bus->dev_state != MEI_DEV_ENABLED) {
5235 + rets = -ENODEV;
5236 + goto out;
5237 + }
5238
5239 cb = mei_cl_read_cb(cl, NULL);
5240 if (cb)
5241 diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c
5242 index d8486168415a..553113eb1bdb 100644
5243 --- a/drivers/mmc/card/block.c
5244 +++ b/drivers/mmc/card/block.c
5245 @@ -596,6 +596,14 @@ static int mmc_blk_ioctl_cmd(struct block_device *bdev,
5246 struct mmc_card *card;
5247 int err = 0, ioc_err = 0;
5248
5249 + /*
5250 + * The caller must have CAP_SYS_RAWIO, and must be calling this on the
5251 + * whole block device, not on a partition. This prevents overspray
5252 + * between sibling partitions.
5253 + */
5254 + if ((!capable(CAP_SYS_RAWIO)) || (bdev != bdev->bd_contains))
5255 + return -EPERM;
5256 +
5257 idata = mmc_blk_ioctl_copy_from_user(ic_ptr);
5258 if (IS_ERR(idata))
5259 return PTR_ERR(idata);
5260 @@ -638,6 +646,14 @@ static int mmc_blk_ioctl_multi_cmd(struct block_device *bdev,
5261 int i, err = 0, ioc_err = 0;
5262 __u64 num_of_cmds;
5263
5264 + /*
5265 + * The caller must have CAP_SYS_RAWIO, and must be calling this on the
5266 + * whole block device, not on a partition. This prevents overspray
5267 + * between sibling partitions.
5268 + */
5269 + if ((!capable(CAP_SYS_RAWIO)) || (bdev != bdev->bd_contains))
5270 + return -EPERM;
5271 +
5272 if (copy_from_user(&num_of_cmds, &user->num_of_cmds,
5273 sizeof(num_of_cmds)))
5274 return -EFAULT;
5275 @@ -693,14 +709,6 @@ cmd_err:
5276 static int mmc_blk_ioctl(struct block_device *bdev, fmode_t mode,
5277 unsigned int cmd, unsigned long arg)
5278 {
5279 - /*
5280 - * The caller must have CAP_SYS_RAWIO, and must be calling this on the
5281 - * whole block device, not on a partition. This prevents overspray
5282 - * between sibling partitions.
5283 - */
5284 - if ((!capable(CAP_SYS_RAWIO)) || (bdev != bdev->bd_contains))
5285 - return -EPERM;
5286 -
5287 switch (cmd) {
5288 case MMC_IOC_CMD:
5289 return mmc_blk_ioctl_cmd(bdev,
5290 diff --git a/drivers/mmc/host/mmc_spi.c b/drivers/mmc/host/mmc_spi.c
5291 index 1c1b45ef3faf..aad3243a48fc 100644
5292 --- a/drivers/mmc/host/mmc_spi.c
5293 +++ b/drivers/mmc/host/mmc_spi.c
5294 @@ -1436,6 +1436,12 @@ static int mmc_spi_probe(struct spi_device *spi)
5295 host->pdata->cd_debounce);
5296 if (status != 0)
5297 goto fail_add_host;
5298 +
5299 + /* The platform has a CD GPIO signal that may support
5300 + * interrupts, so let mmc_gpiod_request_cd_irq() decide
5301 + * if polling is needed or not.
5302 + */
5303 + mmc->caps &= ~MMC_CAP_NEEDS_POLL;
5304 mmc_gpiod_request_cd_irq(mmc);
5305 }
5306
5307 diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
5308 index 8814eb6b83bf..1a802af827ed 100644
5309 --- a/drivers/mmc/host/sdhci.c
5310 +++ b/drivers/mmc/host/sdhci.c
5311 @@ -666,9 +666,20 @@ static u8 sdhci_calc_timeout(struct sdhci_host *host, struct mmc_command *cmd)
5312 if (!data)
5313 target_timeout = cmd->busy_timeout * 1000;
5314 else {
5315 - target_timeout = data->timeout_ns / 1000;
5316 - if (host->clock)
5317 - target_timeout += data->timeout_clks / host->clock;
5318 + target_timeout = DIV_ROUND_UP(data->timeout_ns, 1000);
5319 + if (host->clock && data->timeout_clks) {
5320 + unsigned long long val;
5321 +
5322 + /*
5323 + * data->timeout_clks is in units of clock cycles.
5324 + * host->clock is in Hz. target_timeout is in us.
5325 + * Hence, us = 1000000 * cycles / Hz. Round up.
5326 + */
5327 + val = 1000000 * data->timeout_clks;
5328 + if (do_div(val, host->clock))
5329 + target_timeout++;
5330 + target_timeout += val;
5331 + }
5332 }
5333
5334 /*
5335 @@ -3095,14 +3106,14 @@ int sdhci_add_host(struct sdhci_host *host)
5336 if (caps[0] & SDHCI_TIMEOUT_CLK_UNIT)
5337 host->timeout_clk *= 1000;
5338
5339 + if (override_timeout_clk)
5340 + host->timeout_clk = override_timeout_clk;
5341 +
5342 mmc->max_busy_timeout = host->ops->get_max_timeout_count ?
5343 host->ops->get_max_timeout_count(host) : 1 << 27;
5344 mmc->max_busy_timeout /= host->timeout_clk;
5345 }
5346
5347 - if (override_timeout_clk)
5348 - host->timeout_clk = override_timeout_clk;
5349 -
5350 mmc->caps |= MMC_CAP_SDIO_IRQ | MMC_CAP_ERASE | MMC_CAP_CMD23;
5351 mmc->caps2 |= MMC_CAP2_SDIO_IRQ_NOTHREAD;
5352
5353 diff --git a/drivers/mmc/host/sh_mmcif.c b/drivers/mmc/host/sh_mmcif.c
5354 index ad9ffea7d659..6234eab38ff3 100644
5355 --- a/drivers/mmc/host/sh_mmcif.c
5356 +++ b/drivers/mmc/host/sh_mmcif.c
5357 @@ -397,38 +397,26 @@ static void sh_mmcif_start_dma_tx(struct sh_mmcif_host *host)
5358 }
5359
5360 static struct dma_chan *
5361 -sh_mmcif_request_dma_one(struct sh_mmcif_host *host,
5362 - struct sh_mmcif_plat_data *pdata,
5363 - enum dma_transfer_direction direction)
5364 +sh_mmcif_request_dma_pdata(struct sh_mmcif_host *host, uintptr_t slave_id)
5365 {
5366 - struct dma_slave_config cfg = { 0, };
5367 - struct dma_chan *chan;
5368 - void *slave_data = NULL;
5369 - struct resource *res;
5370 - struct device *dev = sh_mmcif_host_to_dev(host);
5371 dma_cap_mask_t mask;
5372 - int ret;
5373
5374 dma_cap_zero(mask);
5375 dma_cap_set(DMA_SLAVE, mask);
5376 + if (slave_id <= 0)
5377 + return NULL;
5378
5379 - if (pdata)
5380 - slave_data = direction == DMA_MEM_TO_DEV ?
5381 - (void *)pdata->slave_id_tx :
5382 - (void *)pdata->slave_id_rx;
5383 -
5384 - chan = dma_request_slave_channel_compat(mask, shdma_chan_filter,
5385 - slave_data, dev,
5386 - direction == DMA_MEM_TO_DEV ? "tx" : "rx");
5387 -
5388 - dev_dbg(dev, "%s: %s: got channel %p\n", __func__,
5389 - direction == DMA_MEM_TO_DEV ? "TX" : "RX", chan);
5390 + return dma_request_channel(mask, shdma_chan_filter, (void *)slave_id);
5391 +}
5392
5393 - if (!chan)
5394 - return NULL;
5395 +static int sh_mmcif_dma_slave_config(struct sh_mmcif_host *host,
5396 + struct dma_chan *chan,
5397 + enum dma_transfer_direction direction)
5398 +{
5399 + struct resource *res;
5400 + struct dma_slave_config cfg = { 0, };
5401
5402 res = platform_get_resource(host->pd, IORESOURCE_MEM, 0);
5403 -
5404 cfg.direction = direction;
5405
5406 if (direction == DMA_DEV_TO_MEM) {
5407 @@ -439,38 +427,42 @@ sh_mmcif_request_dma_one(struct sh_mmcif_host *host,
5408 cfg.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
5409 }
5410
5411 - ret = dmaengine_slave_config(chan, &cfg);
5412 - if (ret < 0) {
5413 - dma_release_channel(chan);
5414 - return NULL;
5415 - }
5416 -
5417 - return chan;
5418 + return dmaengine_slave_config(chan, &cfg);
5419 }
5420
5421 -static void sh_mmcif_request_dma(struct sh_mmcif_host *host,
5422 - struct sh_mmcif_plat_data *pdata)
5423 +static void sh_mmcif_request_dma(struct sh_mmcif_host *host)
5424 {
5425 struct device *dev = sh_mmcif_host_to_dev(host);
5426 host->dma_active = false;
5427
5428 - if (pdata) {
5429 - if (pdata->slave_id_tx <= 0 || pdata->slave_id_rx <= 0)
5430 - return;
5431 - } else if (!dev->of_node) {
5432 - return;
5433 + /* We can only either use DMA for both Tx and Rx or not use it at all */
5434 + if (IS_ENABLED(CONFIG_SUPERH) && dev->platform_data) {
5435 + struct sh_mmcif_plat_data *pdata = dev->platform_data;
5436 +
5437 + host->chan_tx = sh_mmcif_request_dma_pdata(host,
5438 + pdata->slave_id_tx);
5439 + host->chan_rx = sh_mmcif_request_dma_pdata(host,
5440 + pdata->slave_id_rx);
5441 + } else {
5442 + host->chan_tx = dma_request_slave_channel(dev, "tx");
5443 + host->chan_rx = dma_request_slave_channel(dev, "rx");
5444 }
5445 + dev_dbg(dev, "%s: got channel TX %p RX %p\n", __func__, host->chan_tx,
5446 + host->chan_rx);
5447
5448 - /* We can only either use DMA for both Tx and Rx or not use it at all */
5449 - host->chan_tx = sh_mmcif_request_dma_one(host, pdata, DMA_MEM_TO_DEV);
5450 - if (!host->chan_tx)
5451 - return;
5452 + if (!host->chan_tx || !host->chan_rx ||
5453 + sh_mmcif_dma_slave_config(host, host->chan_tx, DMA_MEM_TO_DEV) ||
5454 + sh_mmcif_dma_slave_config(host, host->chan_rx, DMA_DEV_TO_MEM))
5455 + goto error;
5456
5457 - host->chan_rx = sh_mmcif_request_dma_one(host, pdata, DMA_DEV_TO_MEM);
5458 - if (!host->chan_rx) {
5459 + return;
5460 +
5461 +error:
5462 + if (host->chan_tx)
5463 dma_release_channel(host->chan_tx);
5464 - host->chan_tx = NULL;
5465 - }
5466 + if (host->chan_rx)
5467 + dma_release_channel(host->chan_rx);
5468 + host->chan_tx = host->chan_rx = NULL;
5469 }
5470
5471 static void sh_mmcif_release_dma(struct sh_mmcif_host *host)
5472 @@ -1102,7 +1094,7 @@ static void sh_mmcif_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
5473 if (ios->power_mode == MMC_POWER_UP) {
5474 if (!host->card_present) {
5475 /* See if we also get DMA */
5476 - sh_mmcif_request_dma(host, dev->platform_data);
5477 + sh_mmcif_request_dma(host);
5478 host->card_present = true;
5479 }
5480 sh_mmcif_set_power(host, ios);
5481 diff --git a/drivers/mtd/onenand/onenand_base.c b/drivers/mtd/onenand/onenand_base.c
5482 index 43b3392ffee7..652d01832873 100644
5483 --- a/drivers/mtd/onenand/onenand_base.c
5484 +++ b/drivers/mtd/onenand/onenand_base.c
5485 @@ -2599,6 +2599,7 @@ static int onenand_default_block_markbad(struct mtd_info *mtd, loff_t ofs)
5486 */
5487 static int onenand_block_markbad(struct mtd_info *mtd, loff_t ofs)
5488 {
5489 + struct onenand_chip *this = mtd->priv;
5490 int ret;
5491
5492 ret = onenand_block_isbad(mtd, ofs);
5493 @@ -2610,7 +2611,7 @@ static int onenand_block_markbad(struct mtd_info *mtd, loff_t ofs)
5494 }
5495
5496 onenand_get_device(mtd, FL_WRITING);
5497 - ret = mtd_block_markbad(mtd, ofs);
5498 + ret = this->block_markbad(mtd, ofs);
5499 onenand_release_device(mtd);
5500 return ret;
5501 }
5502 diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c
5503 index ed622fa29dfa..a4ac6fedac75 100644
5504 --- a/drivers/net/ethernet/marvell/mvneta.c
5505 +++ b/drivers/net/ethernet/marvell/mvneta.c
5506 @@ -3404,7 +3404,7 @@ static int mvneta_probe(struct platform_device *pdev)
5507 dev->features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO;
5508 dev->hw_features |= dev->features;
5509 dev->vlan_features |= dev->features;
5510 - dev->priv_flags |= IFF_UNICAST_FLT;
5511 + dev->priv_flags |= IFF_UNICAST_FLT | IFF_LIVE_ADDR_CHANGE;
5512 dev->gso_max_segs = MVNETA_MAX_TSO_SEGS;
5513
5514 err = register_netdev(dev);
5515 diff --git a/drivers/net/irda/irtty-sir.c b/drivers/net/irda/irtty-sir.c
5516 index 696852eb23c3..7a3f990c1935 100644
5517 --- a/drivers/net/irda/irtty-sir.c
5518 +++ b/drivers/net/irda/irtty-sir.c
5519 @@ -430,16 +430,6 @@ static int irtty_open(struct tty_struct *tty)
5520
5521 /* Module stuff handled via irda_ldisc.owner - Jean II */
5522
5523 - /* First make sure we're not already connected. */
5524 - if (tty->disc_data != NULL) {
5525 - priv = tty->disc_data;
5526 - if (priv && priv->magic == IRTTY_MAGIC) {
5527 - ret = -EEXIST;
5528 - goto out;
5529 - }
5530 - tty->disc_data = NULL; /* ### */
5531 - }
5532 -
5533 /* stop the underlying driver */
5534 irtty_stop_receiver(tty, TRUE);
5535 if (tty->ops->stop)
5536 diff --git a/drivers/net/rionet.c b/drivers/net/rionet.c
5537 index 01f08a7751f7..e7034c55e796 100644
5538 --- a/drivers/net/rionet.c
5539 +++ b/drivers/net/rionet.c
5540 @@ -280,7 +280,7 @@ static void rionet_outb_msg_event(struct rio_mport *mport, void *dev_id, int mbo
5541 struct net_device *ndev = dev_id;
5542 struct rionet_private *rnet = netdev_priv(ndev);
5543
5544 - spin_lock(&rnet->lock);
5545 + spin_lock(&rnet->tx_lock);
5546
5547 if (netif_msg_intr(rnet))
5548 printk(KERN_INFO
5549 @@ -299,7 +299,7 @@ static void rionet_outb_msg_event(struct rio_mport *mport, void *dev_id, int mbo
5550 if (rnet->tx_cnt < RIONET_TX_RING_SIZE)
5551 netif_wake_queue(ndev);
5552
5553 - spin_unlock(&rnet->lock);
5554 + spin_unlock(&rnet->tx_lock);
5555 }
5556
5557 static int rionet_open(struct net_device *ndev)
5558 diff --git a/drivers/net/wireless/iwlwifi/mvm/fw.c b/drivers/net/wireless/iwlwifi/mvm/fw.c
5559 index d906fa13ba97..610c442c7ab2 100644
5560 --- a/drivers/net/wireless/iwlwifi/mvm/fw.c
5561 +++ b/drivers/net/wireless/iwlwifi/mvm/fw.c
5562 @@ -106,7 +106,7 @@ static int iwl_send_tx_ant_cfg(struct iwl_mvm *mvm, u8 valid_tx_ant)
5563 sizeof(tx_ant_cmd), &tx_ant_cmd);
5564 }
5565
5566 -static void iwl_free_fw_paging(struct iwl_mvm *mvm)
5567 +void iwl_free_fw_paging(struct iwl_mvm *mvm)
5568 {
5569 int i;
5570
5571 @@ -126,6 +126,8 @@ static void iwl_free_fw_paging(struct iwl_mvm *mvm)
5572 get_order(mvm->fw_paging_db[i].fw_paging_size));
5573 }
5574 kfree(mvm->trans->paging_download_buf);
5575 + mvm->trans->paging_download_buf = NULL;
5576 +
5577 memset(mvm->fw_paging_db, 0, sizeof(mvm->fw_paging_db));
5578 }
5579
5580 diff --git a/drivers/net/wireless/iwlwifi/mvm/mvm.h b/drivers/net/wireless/iwlwifi/mvm/mvm.h
5581 index 4bde2d027dcd..244e26c26821 100644
5582 --- a/drivers/net/wireless/iwlwifi/mvm/mvm.h
5583 +++ b/drivers/net/wireless/iwlwifi/mvm/mvm.h
5584 @@ -1190,6 +1190,9 @@ void iwl_mvm_rx_umac_scan_complete_notif(struct iwl_mvm *mvm,
5585 void iwl_mvm_rx_umac_scan_iter_complete_notif(struct iwl_mvm *mvm,
5586 struct iwl_rx_cmd_buffer *rxb);
5587
5588 +/* Paging */
5589 +void iwl_free_fw_paging(struct iwl_mvm *mvm);
5590 +
5591 /* MVM debugfs */
5592 #ifdef CONFIG_IWLWIFI_DEBUGFS
5593 int iwl_mvm_dbgfs_register(struct iwl_mvm *mvm, struct dentry *dbgfs_dir);
5594 diff --git a/drivers/net/wireless/iwlwifi/mvm/ops.c b/drivers/net/wireless/iwlwifi/mvm/ops.c
5595 index 13c97f665ba8..c3adf2bcdc85 100644
5596 --- a/drivers/net/wireless/iwlwifi/mvm/ops.c
5597 +++ b/drivers/net/wireless/iwlwifi/mvm/ops.c
5598 @@ -645,6 +645,8 @@ static void iwl_op_mode_mvm_stop(struct iwl_op_mode *op_mode)
5599 for (i = 0; i < NVM_MAX_NUM_SECTIONS; i++)
5600 kfree(mvm->nvm_sections[i].data);
5601
5602 + iwl_free_fw_paging(mvm);
5603 +
5604 iwl_mvm_tof_clean(mvm);
5605
5606 ieee80211_free_hw(mvm->hw);
5607 diff --git a/drivers/nvdimm/bus.c b/drivers/nvdimm/bus.c
5608 index 7e2c43f701bc..496b9b662dc6 100644
5609 --- a/drivers/nvdimm/bus.c
5610 +++ b/drivers/nvdimm/bus.c
5611 @@ -513,10 +513,10 @@ static int __nd_ioctl(struct nvdimm_bus *nvdimm_bus, struct nvdimm *nvdimm,
5612
5613 /* fail write commands (when read-only) */
5614 if (read_only)
5615 - switch (ioctl_cmd) {
5616 - case ND_IOCTL_VENDOR:
5617 - case ND_IOCTL_SET_CONFIG_DATA:
5618 - case ND_IOCTL_ARS_START:
5619 + switch (cmd) {
5620 + case ND_CMD_VENDOR:
5621 + case ND_CMD_SET_CONFIG_DATA:
5622 + case ND_CMD_ARS_START:
5623 dev_dbg(&nvdimm_bus->dev, "'%s' command while read-only.\n",
5624 nvdimm ? nvdimm_cmd_name(cmd)
5625 : nvdimm_bus_cmd_name(cmd));
5626 diff --git a/drivers/of/of_reserved_mem.c b/drivers/of/of_reserved_mem.c
5627 index 1a3556a9e9ea..ed01c0172e4a 100644
5628 --- a/drivers/of/of_reserved_mem.c
5629 +++ b/drivers/of/of_reserved_mem.c
5630 @@ -32,11 +32,13 @@ int __init __weak early_init_dt_alloc_reserved_memory_arch(phys_addr_t size,
5631 phys_addr_t align, phys_addr_t start, phys_addr_t end, bool nomap,
5632 phys_addr_t *res_base)
5633 {
5634 + phys_addr_t base;
5635 /*
5636 * We use __memblock_alloc_base() because memblock_alloc_base()
5637 * panic()s on allocation failure.
5638 */
5639 - phys_addr_t base = __memblock_alloc_base(size, align, end);
5640 + end = !end ? MEMBLOCK_ALLOC_ANYWHERE : end;
5641 + base = __memblock_alloc_base(size, align, end);
5642 if (!base)
5643 return -ENOMEM;
5644
5645 diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
5646 index edb1984201e9..7aafb5fb9336 100644
5647 --- a/drivers/pci/probe.c
5648 +++ b/drivers/pci/probe.c
5649 @@ -179,6 +179,9 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,
5650 u16 orig_cmd;
5651 struct pci_bus_region region, inverted_region;
5652
5653 + if (dev->non_compliant_bars)
5654 + return 0;
5655 +
5656 mask = type ? PCI_ROM_ADDRESS_MASK : ~0;
5657
5658 /* No printks while decoding is disabled! */
5659 @@ -1174,6 +1177,7 @@ void pci_msi_setup_pci_dev(struct pci_dev *dev)
5660 int pci_setup_device(struct pci_dev *dev)
5661 {
5662 u32 class;
5663 + u16 cmd;
5664 u8 hdr_type;
5665 int pos = 0;
5666 struct pci_bus_region region;
5667 @@ -1219,6 +1223,16 @@ int pci_setup_device(struct pci_dev *dev)
5668 /* device class may be changed after fixup */
5669 class = dev->class >> 8;
5670
5671 + if (dev->non_compliant_bars) {
5672 + pci_read_config_word(dev, PCI_COMMAND, &cmd);
5673 + if (cmd & (PCI_COMMAND_IO | PCI_COMMAND_MEMORY)) {
5674 + dev_info(&dev->dev, "device has non-compliant BARs; disabling IO/MEM decoding\n");
5675 + cmd &= ~PCI_COMMAND_IO;
5676 + cmd &= ~PCI_COMMAND_MEMORY;
5677 + pci_write_config_word(dev, PCI_COMMAND, cmd);
5678 + }
5679 + }
5680 +
5681 switch (dev->hdr_type) { /* header type */
5682 case PCI_HEADER_TYPE_NORMAL: /* standard header */
5683 if (class == PCI_CLASS_BRIDGE_PCI)
5684 diff --git a/drivers/pinctrl/bcm/pinctrl-bcm2835.c b/drivers/pinctrl/bcm/pinctrl-bcm2835.c
5685 index 2e6ca69635aa..17dd8fe12b54 100644
5686 --- a/drivers/pinctrl/bcm/pinctrl-bcm2835.c
5687 +++ b/drivers/pinctrl/bcm/pinctrl-bcm2835.c
5688 @@ -779,7 +779,7 @@ static int bcm2835_pctl_dt_node_to_map(struct pinctrl_dev *pctldev,
5689 }
5690 if (num_pulls) {
5691 err = of_property_read_u32_index(np, "brcm,pull",
5692 - (num_funcs > 1) ? i : 0, &pull);
5693 + (num_pulls > 1) ? i : 0, &pull);
5694 if (err)
5695 goto out;
5696 err = bcm2835_pctl_dt_node_to_map_pull(pc, np, pin,
5697 diff --git a/drivers/platform/x86/ideapad-laptop.c b/drivers/platform/x86/ideapad-laptop.c
5698 index d78ee151c9e4..be3bc2f4edd4 100644
5699 --- a/drivers/platform/x86/ideapad-laptop.c
5700 +++ b/drivers/platform/x86/ideapad-laptop.c
5701 @@ -865,6 +865,20 @@ static const struct dmi_system_id no_hw_rfkill_list[] = {
5702 },
5703 },
5704 {
5705 + .ident = "Lenovo ideapad Y700-15ISK",
5706 + .matches = {
5707 + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
5708 + DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo ideapad Y700-15ISK"),
5709 + },
5710 + },
5711 + {
5712 + .ident = "Lenovo ideapad Y700 Touch-15ISK",
5713 + .matches = {
5714 + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
5715 + DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo ideapad Y700 Touch-15ISK"),
5716 + },
5717 + },
5718 + {
5719 .ident = "Lenovo ideapad Y700-17ISK",
5720 .matches = {
5721 DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
5722 diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
5723 index 73b7683355cd..7b94b8ee087c 100644
5724 --- a/drivers/regulator/core.c
5725 +++ b/drivers/regulator/core.c
5726 @@ -132,24 +132,24 @@ static bool have_full_constraints(void)
5727 return has_full_constraints || of_have_populated_dt();
5728 }
5729
5730 +static inline struct regulator_dev *rdev_get_supply(struct regulator_dev *rdev)
5731 +{
5732 + if (rdev && rdev->supply)
5733 + return rdev->supply->rdev;
5734 +
5735 + return NULL;
5736 +}
5737 +
5738 /**
5739 * regulator_lock_supply - lock a regulator and its supplies
5740 * @rdev: regulator source
5741 */
5742 static void regulator_lock_supply(struct regulator_dev *rdev)
5743 {
5744 - struct regulator *supply;
5745 - int i = 0;
5746 -
5747 - while (1) {
5748 - mutex_lock_nested(&rdev->mutex, i++);
5749 - supply = rdev->supply;
5750 -
5751 - if (!rdev->supply)
5752 - return;
5753 + int i;
5754
5755 - rdev = supply->rdev;
5756 - }
5757 + for (i = 0; rdev->supply; rdev = rdev_get_supply(rdev), i++)
5758 + mutex_lock_nested(&rdev->mutex, i);
5759 }
5760
5761 /**
5762 diff --git a/drivers/scsi/aacraid/aacraid.h b/drivers/scsi/aacraid/aacraid.h
5763 index 074878b55a0b..d044f3f273be 100644
5764 --- a/drivers/scsi/aacraid/aacraid.h
5765 +++ b/drivers/scsi/aacraid/aacraid.h
5766 @@ -944,6 +944,7 @@ struct fib {
5767 */
5768 struct list_head fiblink;
5769 void *data;
5770 + u32 vector_no;
5771 struct hw_fib *hw_fib_va; /* Actual shared object */
5772 dma_addr_t hw_fib_pa; /* physical address of hw_fib*/
5773 };
5774 @@ -2113,6 +2114,7 @@ static inline unsigned int cap_to_cyls(sector_t capacity, unsigned divisor)
5775 int aac_acquire_irq(struct aac_dev *dev);
5776 void aac_free_irq(struct aac_dev *dev);
5777 const char *aac_driverinfo(struct Scsi_Host *);
5778 +void aac_fib_vector_assign(struct aac_dev *dev);
5779 struct fib *aac_fib_alloc(struct aac_dev *dev);
5780 int aac_fib_setup(struct aac_dev *dev);
5781 void aac_fib_map_free(struct aac_dev *dev);
5782 diff --git a/drivers/scsi/aacraid/commsup.c b/drivers/scsi/aacraid/commsup.c
5783 index a1f90fe849c9..4cbf54928640 100644
5784 --- a/drivers/scsi/aacraid/commsup.c
5785 +++ b/drivers/scsi/aacraid/commsup.c
5786 @@ -83,13 +83,38 @@ static int fib_map_alloc(struct aac_dev *dev)
5787
5788 void aac_fib_map_free(struct aac_dev *dev)
5789 {
5790 - pci_free_consistent(dev->pdev,
5791 - dev->max_fib_size * (dev->scsi_host_ptr->can_queue + AAC_NUM_MGT_FIB),
5792 - dev->hw_fib_va, dev->hw_fib_pa);
5793 + if (dev->hw_fib_va && dev->max_fib_size) {
5794 + pci_free_consistent(dev->pdev,
5795 + (dev->max_fib_size *
5796 + (dev->scsi_host_ptr->can_queue + AAC_NUM_MGT_FIB)),
5797 + dev->hw_fib_va, dev->hw_fib_pa);
5798 + }
5799 dev->hw_fib_va = NULL;
5800 dev->hw_fib_pa = 0;
5801 }
5802
5803 +void aac_fib_vector_assign(struct aac_dev *dev)
5804 +{
5805 + u32 i = 0;
5806 + u32 vector = 1;
5807 + struct fib *fibptr = NULL;
5808 +
5809 + for (i = 0, fibptr = &dev->fibs[i];
5810 + i < (dev->scsi_host_ptr->can_queue + AAC_NUM_MGT_FIB);
5811 + i++, fibptr++) {
5812 + if ((dev->max_msix == 1) ||
5813 + (i > ((dev->scsi_host_ptr->can_queue + AAC_NUM_MGT_FIB - 1)
5814 + - dev->vector_cap))) {
5815 + fibptr->vector_no = 0;
5816 + } else {
5817 + fibptr->vector_no = vector;
5818 + vector++;
5819 + if (vector == dev->max_msix)
5820 + vector = 1;
5821 + }
5822 + }
5823 +}
5824 +
5825 /**
5826 * aac_fib_setup - setup the fibs
5827 * @dev: Adapter to set up
5828 @@ -151,6 +176,12 @@ int aac_fib_setup(struct aac_dev * dev)
5829 hw_fib_pa = hw_fib_pa +
5830 dev->max_fib_size + sizeof(struct aac_fib_xporthdr);
5831 }
5832 +
5833 + /*
5834 + *Assign vector numbers to fibs
5835 + */
5836 + aac_fib_vector_assign(dev);
5837 +
5838 /*
5839 * Add the fib chain to the free list
5840 */
5841 diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c
5842 index 3b6e5c67e853..aa6eccb8940b 100644
5843 --- a/drivers/scsi/aacraid/linit.c
5844 +++ b/drivers/scsi/aacraid/linit.c
5845 @@ -1404,8 +1404,18 @@ static int aac_acquire_resources(struct aac_dev *dev)
5846
5847 aac_adapter_enable_int(dev);
5848
5849 - if (!dev->sync_mode)
5850 + /*max msix may change after EEH
5851 + * Re-assign vectors to fibs
5852 + */
5853 + aac_fib_vector_assign(dev);
5854 +
5855 + if (!dev->sync_mode) {
5856 + /* After EEH recovery or suspend resume, max_msix count
5857 + * may change, therfore updating in init as well.
5858 + */
5859 aac_adapter_start(dev);
5860 + dev->init->Sa_MSIXVectors = cpu_to_le32(dev->max_msix);
5861 + }
5862 return 0;
5863
5864 error_iounmap:
5865 diff --git a/drivers/scsi/aacraid/src.c b/drivers/scsi/aacraid/src.c
5866 index 2aa34ea8ceb1..bc0203f3d243 100644
5867 --- a/drivers/scsi/aacraid/src.c
5868 +++ b/drivers/scsi/aacraid/src.c
5869 @@ -156,8 +156,8 @@ static irqreturn_t aac_src_intr_message(int irq, void *dev_id)
5870 break;
5871 if (dev->msi_enabled && dev->max_msix > 1)
5872 atomic_dec(&dev->rrq_outstanding[vector_no]);
5873 - aac_intr_normal(dev, handle-1, 0, isFastResponse, NULL);
5874 dev->host_rrq[index++] = 0;
5875 + aac_intr_normal(dev, handle-1, 0, isFastResponse, NULL);
5876 if (index == (vector_no + 1) * dev->vector_cap)
5877 index = vector_no * dev->vector_cap;
5878 dev->host_rrq_idx[vector_no] = index;
5879 @@ -452,36 +452,20 @@ static int aac_src_deliver_message(struct fib *fib)
5880 #endif
5881
5882 u16 hdr_size = le16_to_cpu(fib->hw_fib_va->header.Size);
5883 + u16 vector_no;
5884
5885 atomic_inc(&q->numpending);
5886
5887 if (dev->msi_enabled && fib->hw_fib_va->header.Command != AifRequest &&
5888 dev->max_msix > 1) {
5889 - u_int16_t vector_no, first_choice = 0xffff;
5890 -
5891 - vector_no = dev->fibs_pushed_no % dev->max_msix;
5892 - do {
5893 - vector_no += 1;
5894 - if (vector_no == dev->max_msix)
5895 - vector_no = 1;
5896 - if (atomic_read(&dev->rrq_outstanding[vector_no]) <
5897 - dev->vector_cap)
5898 - break;
5899 - if (0xffff == first_choice)
5900 - first_choice = vector_no;
5901 - else if (vector_no == first_choice)
5902 - break;
5903 - } while (1);
5904 - if (vector_no == first_choice)
5905 - vector_no = 0;
5906 - atomic_inc(&dev->rrq_outstanding[vector_no]);
5907 - if (dev->fibs_pushed_no == 0xffffffff)
5908 - dev->fibs_pushed_no = 0;
5909 - else
5910 - dev->fibs_pushed_no++;
5911 + vector_no = fib->vector_no;
5912 fib->hw_fib_va->header.Handle += (vector_no << 16);
5913 + } else {
5914 + vector_no = 0;
5915 }
5916
5917 + atomic_inc(&dev->rrq_outstanding[vector_no]);
5918 +
5919 if (dev->comm_interface == AAC_COMM_MESSAGE_TYPE2) {
5920 /* Calculate the amount to the fibsize bits */
5921 fibsize = (hdr_size + 127) / 128 - 1;
5922 diff --git a/drivers/scsi/aic7xxx/aic7xxx_osm.c b/drivers/scsi/aic7xxx/aic7xxx_osm.c
5923 index b846a4683562..fc6a83188c1e 100644
5924 --- a/drivers/scsi/aic7xxx/aic7xxx_osm.c
5925 +++ b/drivers/scsi/aic7xxx/aic7xxx_osm.c
5926 @@ -1336,6 +1336,7 @@ ahc_platform_set_tags(struct ahc_softc *ahc, struct scsi_device *sdev,
5927 case AHC_DEV_Q_TAGGED:
5928 scsi_change_queue_depth(sdev,
5929 dev->openings + dev->active);
5930 + break;
5931 default:
5932 /*
5933 * We allow the OS to queue 2 untagged transactions to
5934 diff --git a/drivers/scsi/be2iscsi/be_main.c b/drivers/scsi/be2iscsi/be_main.c
5935 index fe0c5143f8e6..758f76e88704 100644
5936 --- a/drivers/scsi/be2iscsi/be_main.c
5937 +++ b/drivers/scsi/be2iscsi/be_main.c
5938 @@ -4470,6 +4470,7 @@ put_shost:
5939 scsi_host_put(phba->shost);
5940 free_kset:
5941 iscsi_boot_destroy_kset(phba->boot_kset);
5942 + phba->boot_kset = NULL;
5943 return -ENOMEM;
5944 }
5945
5946 diff --git a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c
5947 index 536cd5a80422..43ac62623bf2 100644
5948 --- a/drivers/scsi/ipr.c
5949 +++ b/drivers/scsi/ipr.c
5950 @@ -4003,13 +4003,17 @@ static ssize_t ipr_store_update_fw(struct device *dev,
5951 struct ipr_sglist *sglist;
5952 char fname[100];
5953 char *src;
5954 - int len, result, dnld_size;
5955 + char *endline;
5956 + int result, dnld_size;
5957
5958 if (!capable(CAP_SYS_ADMIN))
5959 return -EACCES;
5960
5961 - len = snprintf(fname, 99, "%s", buf);
5962 - fname[len-1] = '\0';
5963 + snprintf(fname, sizeof(fname), "%s", buf);
5964 +
5965 + endline = strchr(fname, '\n');
5966 + if (endline)
5967 + *endline = '\0';
5968
5969 if (request_firmware(&fw_entry, fname, &ioa_cfg->pdev->dev)) {
5970 dev_err(&ioa_cfg->pdev->dev, "Firmware file %s not found\n", fname);
5971 diff --git a/drivers/scsi/scsi_common.c b/drivers/scsi/scsi_common.c
5972 index c126966130ab..ce79de822e46 100644
5973 --- a/drivers/scsi/scsi_common.c
5974 +++ b/drivers/scsi/scsi_common.c
5975 @@ -278,8 +278,16 @@ int scsi_set_sense_information(u8 *buf, int buf_len, u64 info)
5976 ucp[3] = 0;
5977 put_unaligned_be64(info, &ucp[4]);
5978 } else if ((buf[0] & 0x7f) == 0x70) {
5979 - buf[0] |= 0x80;
5980 - put_unaligned_be64(info, &buf[3]);
5981 + /*
5982 + * Only set the 'VALID' bit if we can represent the value
5983 + * correctly; otherwise just fill out the lower bytes and
5984 + * clear the 'VALID' flag.
5985 + */
5986 + if (info <= 0xffffffffUL)
5987 + buf[0] |= 0x80;
5988 + else
5989 + buf[0] &= 0x7f;
5990 + put_unaligned_be32((u32)info, &buf[3]);
5991 }
5992
5993 return 0;
5994 diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
5995 index bb669d32ccd0..cc84ea7d09cc 100644
5996 --- a/drivers/scsi/sd.c
5997 +++ b/drivers/scsi/sd.c
5998 @@ -648,7 +648,7 @@ static void sd_config_discard(struct scsi_disk *sdkp, unsigned int mode)
5999 */
6000 if (sdkp->lbprz) {
6001 q->limits.discard_alignment = 0;
6002 - q->limits.discard_granularity = 1;
6003 + q->limits.discard_granularity = logical_block_size;
6004 } else {
6005 q->limits.discard_alignment = sdkp->unmap_alignment *
6006 logical_block_size;
6007 diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c
6008 index 5e820674432c..ae7d9bdf409c 100644
6009 --- a/drivers/scsi/sg.c
6010 +++ b/drivers/scsi/sg.c
6011 @@ -652,7 +652,8 @@ sg_write(struct file *filp, const char __user *buf, size_t count, loff_t * ppos)
6012 else
6013 hp->dxfer_direction = (mxsize > 0) ? SG_DXFER_FROM_DEV : SG_DXFER_NONE;
6014 hp->dxfer_len = mxsize;
6015 - if (hp->dxfer_direction == SG_DXFER_TO_DEV)
6016 + if ((hp->dxfer_direction == SG_DXFER_TO_DEV) ||
6017 + (hp->dxfer_direction == SG_DXFER_TO_FROM_DEV))
6018 hp->dxferp = (char __user *)buf + cmd_size;
6019 else
6020 hp->dxferp = NULL;
6021 diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c
6022 index 3fba42ad9fb8..0f636cc4c809 100644
6023 --- a/drivers/scsi/storvsc_drv.c
6024 +++ b/drivers/scsi/storvsc_drv.c
6025 @@ -889,8 +889,9 @@ static void storvsc_handle_error(struct vmscsi_request *vm_srb,
6026 do_work = true;
6027 process_err_fn = storvsc_remove_lun;
6028 break;
6029 - case (SRB_STATUS_ABORTED | SRB_STATUS_AUTOSENSE_VALID):
6030 - if ((asc == 0x2a) && (ascq == 0x9)) {
6031 + case SRB_STATUS_ABORTED:
6032 + if (vm_srb->srb_status & SRB_STATUS_AUTOSENSE_VALID &&
6033 + (asc == 0x2a) && (ascq == 0x9)) {
6034 do_work = true;
6035 process_err_fn = storvsc_device_scan;
6036 /*
6037 diff --git a/drivers/staging/android/ion/ion_test.c b/drivers/staging/android/ion/ion_test.c
6038 index b8dcf5a26cc4..58d46893e5ff 100644
6039 --- a/drivers/staging/android/ion/ion_test.c
6040 +++ b/drivers/staging/android/ion/ion_test.c
6041 @@ -285,8 +285,8 @@ static int __init ion_test_init(void)
6042 {
6043 ion_test_pdev = platform_device_register_simple("ion-test",
6044 -1, NULL, 0);
6045 - if (!ion_test_pdev)
6046 - return -ENODEV;
6047 + if (IS_ERR(ion_test_pdev))
6048 + return PTR_ERR(ion_test_pdev);
6049
6050 return platform_driver_probe(&ion_test_platform_driver, ion_test_probe);
6051 }
6052 diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c
6053 index 6cc304a4c59b..27fbf1a81097 100644
6054 --- a/drivers/staging/comedi/drivers/ni_mio_common.c
6055 +++ b/drivers/staging/comedi/drivers/ni_mio_common.c
6056 @@ -246,24 +246,24 @@ static void ni_writel(struct comedi_device *dev, uint32_t data, int reg)
6057 {
6058 if (dev->mmio)
6059 writel(data, dev->mmio + reg);
6060 -
6061 - outl(data, dev->iobase + reg);
6062 + else
6063 + outl(data, dev->iobase + reg);
6064 }
6065
6066 static void ni_writew(struct comedi_device *dev, uint16_t data, int reg)
6067 {
6068 if (dev->mmio)
6069 writew(data, dev->mmio + reg);
6070 -
6071 - outw(data, dev->iobase + reg);
6072 + else
6073 + outw(data, dev->iobase + reg);
6074 }
6075
6076 static void ni_writeb(struct comedi_device *dev, uint8_t data, int reg)
6077 {
6078 if (dev->mmio)
6079 writeb(data, dev->mmio + reg);
6080 -
6081 - outb(data, dev->iobase + reg);
6082 + else
6083 + outb(data, dev->iobase + reg);
6084 }
6085
6086 static uint32_t ni_readl(struct comedi_device *dev, int reg)
6087 diff --git a/drivers/staging/comedi/drivers/ni_tiocmd.c b/drivers/staging/comedi/drivers/ni_tiocmd.c
6088 index 437f723bb34d..823e47910004 100644
6089 --- a/drivers/staging/comedi/drivers/ni_tiocmd.c
6090 +++ b/drivers/staging/comedi/drivers/ni_tiocmd.c
6091 @@ -92,7 +92,7 @@ static int ni_tio_input_inttrig(struct comedi_device *dev,
6092 unsigned long flags;
6093 int ret = 0;
6094
6095 - if (trig_num != cmd->start_src)
6096 + if (trig_num != cmd->start_arg)
6097 return -EINVAL;
6098
6099 spin_lock_irqsave(&counter->lock, flags);
6100 diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c
6101 index 94f4ffac723f..d151bc3d6971 100644
6102 --- a/drivers/target/target_core_transport.c
6103 +++ b/drivers/target/target_core_transport.c
6104 @@ -2618,8 +2618,6 @@ void target_wait_for_sess_cmds(struct se_session *se_sess)
6105
6106 list_for_each_entry_safe(se_cmd, tmp_cmd,
6107 &se_sess->sess_wait_list, se_cmd_list) {
6108 - list_del_init(&se_cmd->se_cmd_list);
6109 -
6110 pr_debug("Waiting for se_cmd: %p t_state: %d, fabric state:"
6111 " %d\n", se_cmd, se_cmd->t_state,
6112 se_cmd->se_tfo->get_cmd_state(se_cmd));
6113 diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
6114 index ba08b5521382..3d5f8f432b5b 100644
6115 --- a/drivers/thermal/thermal_core.c
6116 +++ b/drivers/thermal/thermal_core.c
6117 @@ -454,6 +454,10 @@ static void handle_thermal_trip(struct thermal_zone_device *tz, int trip)
6118 {
6119 enum thermal_trip_type type;
6120
6121 + /* Ignore disabled trip points */
6122 + if (test_bit(trip, &tz->trips_disabled))
6123 + return;
6124 +
6125 tz->ops->get_trip_type(tz, trip, &type);
6126
6127 if (type == THERMAL_TRIP_CRITICAL || type == THERMAL_TRIP_HOT)
6128 @@ -1796,6 +1800,7 @@ struct thermal_zone_device *thermal_zone_device_register(const char *type,
6129 {
6130 struct thermal_zone_device *tz;
6131 enum thermal_trip_type trip_type;
6132 + int trip_temp;
6133 int result;
6134 int count;
6135 int passive = 0;
6136 @@ -1867,9 +1872,15 @@ struct thermal_zone_device *thermal_zone_device_register(const char *type,
6137 goto unregister;
6138
6139 for (count = 0; count < trips; count++) {
6140 - tz->ops->get_trip_type(tz, count, &trip_type);
6141 + if (tz->ops->get_trip_type(tz, count, &trip_type))
6142 + set_bit(count, &tz->trips_disabled);
6143 if (trip_type == THERMAL_TRIP_PASSIVE)
6144 passive = 1;
6145 + if (tz->ops->get_trip_temp(tz, count, &trip_temp))
6146 + set_bit(count, &tz->trips_disabled);
6147 + /* Check for bogus trip points */
6148 + if (trip_temp == 0)
6149 + set_bit(count, &tz->trips_disabled);
6150 }
6151
6152 if (!passive) {
6153 diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c
6154 index 52d82d2ac726..56ccbcefdd85 100644
6155 --- a/drivers/tty/serial/8250/8250_port.c
6156 +++ b/drivers/tty/serial/8250/8250_port.c
6157 @@ -713,22 +713,16 @@ static int size_fifo(struct uart_8250_port *up)
6158 */
6159 static unsigned int autoconfig_read_divisor_id(struct uart_8250_port *p)
6160 {
6161 - unsigned char old_dll, old_dlm, old_lcr;
6162 - unsigned int id;
6163 + unsigned char old_lcr;
6164 + unsigned int id, old_dl;
6165
6166 old_lcr = serial_in(p, UART_LCR);
6167 serial_out(p, UART_LCR, UART_LCR_CONF_MODE_A);
6168 + old_dl = serial_dl_read(p);
6169 + serial_dl_write(p, 0);
6170 + id = serial_dl_read(p);
6171 + serial_dl_write(p, old_dl);
6172
6173 - old_dll = serial_in(p, UART_DLL);
6174 - old_dlm = serial_in(p, UART_DLM);
6175 -
6176 - serial_out(p, UART_DLL, 0);
6177 - serial_out(p, UART_DLM, 0);
6178 -
6179 - id = serial_in(p, UART_DLL) | serial_in(p, UART_DLM) << 8;
6180 -
6181 - serial_out(p, UART_DLL, old_dll);
6182 - serial_out(p, UART_DLM, old_dlm);
6183 serial_out(p, UART_LCR, old_lcr);
6184
6185 return id;
6186 diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
6187 index fa4e23930614..d37fdcc3143c 100644
6188 --- a/drivers/usb/class/cdc-acm.c
6189 +++ b/drivers/usb/class/cdc-acm.c
6190 @@ -1114,6 +1114,9 @@ static int acm_probe(struct usb_interface *intf,
6191 if (quirks == NO_UNION_NORMAL) {
6192 data_interface = usb_ifnum_to_if(usb_dev, 1);
6193 control_interface = usb_ifnum_to_if(usb_dev, 0);
6194 + /* we would crash */
6195 + if (!data_interface || !control_interface)
6196 + return -ENODEV;
6197 goto skip_normal_probe;
6198 }
6199
6200 diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c
6201 index 56593a9a8726..2057d91d8336 100644
6202 --- a/drivers/usb/core/driver.c
6203 +++ b/drivers/usb/core/driver.c
6204 @@ -502,11 +502,15 @@ static int usb_unbind_interface(struct device *dev)
6205 int usb_driver_claim_interface(struct usb_driver *driver,
6206 struct usb_interface *iface, void *priv)
6207 {
6208 - struct device *dev = &iface->dev;
6209 + struct device *dev;
6210 struct usb_device *udev;
6211 int retval = 0;
6212 int lpm_disable_error;
6213
6214 + if (!iface)
6215 + return -ENODEV;
6216 +
6217 + dev = &iface->dev;
6218 if (dev->driver)
6219 return -EBUSY;
6220
6221 diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
6222 index 1560f3f3e756..2a274884c7ea 100644
6223 --- a/drivers/usb/core/hub.c
6224 +++ b/drivers/usb/core/hub.c
6225 @@ -4277,7 +4277,7 @@ hub_port_init(struct usb_hub *hub, struct usb_device *udev, int port1,
6226 {
6227 struct usb_device *hdev = hub->hdev;
6228 struct usb_hcd *hcd = bus_to_hcd(hdev->bus);
6229 - int i, j, retval;
6230 + int retries, operations, retval, i;
6231 unsigned delay = HUB_SHORT_RESET_TIME;
6232 enum usb_device_speed oldspeed = udev->speed;
6233 const char *speed;
6234 @@ -4379,7 +4379,7 @@ hub_port_init(struct usb_hub *hub, struct usb_device *udev, int port1,
6235 * first 8 bytes of the device descriptor to get the ep0 maxpacket
6236 * value.
6237 */
6238 - for (i = 0; i < GET_DESCRIPTOR_TRIES; (++i, msleep(100))) {
6239 + for (retries = 0; retries < GET_DESCRIPTOR_TRIES; (++retries, msleep(100))) {
6240 bool did_new_scheme = false;
6241
6242 if (use_new_scheme(udev, retry_counter)) {
6243 @@ -4406,7 +4406,7 @@ hub_port_init(struct usb_hub *hub, struct usb_device *udev, int port1,
6244 * 255 is for WUSB devices, we actually need to use
6245 * 512 (WUSB1.0[4.8.1]).
6246 */
6247 - for (j = 0; j < 3; ++j) {
6248 + for (operations = 0; operations < 3; ++operations) {
6249 buf->bMaxPacketSize0 = 0;
6250 r = usb_control_msg(udev, usb_rcvaddr0pipe(),
6251 USB_REQ_GET_DESCRIPTOR, USB_DIR_IN,
6252 @@ -4426,7 +4426,13 @@ hub_port_init(struct usb_hub *hub, struct usb_device *udev, int port1,
6253 r = -EPROTO;
6254 break;
6255 }
6256 - if (r == 0)
6257 + /*
6258 + * Some devices time out if they are powered on
6259 + * when already connected. They need a second
6260 + * reset. But only on the first attempt,
6261 + * lest we get into a time out/reset loop
6262 + */
6263 + if (r == 0 || (r == -ETIMEDOUT && retries == 0))
6264 break;
6265 }
6266 udev->descriptor.bMaxPacketSize0 =
6267 @@ -4458,7 +4464,7 @@ hub_port_init(struct usb_hub *hub, struct usb_device *udev, int port1,
6268 * authorization will assign the final address.
6269 */
6270 if (udev->wusb == 0) {
6271 - for (j = 0; j < SET_ADDRESS_TRIES; ++j) {
6272 + for (operations = 0; operations < SET_ADDRESS_TRIES; ++operations) {
6273 retval = hub_set_address(udev, devnum);
6274 if (retval >= 0)
6275 break;
6276 diff --git a/drivers/usb/misc/iowarrior.c b/drivers/usb/misc/iowarrior.c
6277 index c6bfd13f6c92..1950e87b4219 100644
6278 --- a/drivers/usb/misc/iowarrior.c
6279 +++ b/drivers/usb/misc/iowarrior.c
6280 @@ -787,6 +787,12 @@ static int iowarrior_probe(struct usb_interface *interface,
6281 iface_desc = interface->cur_altsetting;
6282 dev->product_id = le16_to_cpu(udev->descriptor.idProduct);
6283
6284 + if (iface_desc->desc.bNumEndpoints < 1) {
6285 + dev_err(&interface->dev, "Invalid number of endpoints\n");
6286 + retval = -EINVAL;
6287 + goto error;
6288 + }
6289 +
6290 /* set up the endpoint information */
6291 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
6292 endpoint = &iface_desc->endpoint[i].desc;
6293 diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c
6294 index 7a76fe4c2f9e..bdc0f2f24f19 100644
6295 --- a/drivers/usb/serial/cp210x.c
6296 +++ b/drivers/usb/serial/cp210x.c
6297 @@ -164,6 +164,7 @@ static const struct usb_device_id id_table[] = {
6298 { USB_DEVICE(0x18EF, 0xE025) }, /* ELV Marble Sound Board 1 */
6299 { USB_DEVICE(0x1901, 0x0190) }, /* GE B850 CP2105 Recorder interface */
6300 { USB_DEVICE(0x1901, 0x0193) }, /* GE B650 CP2104 PMC interface */
6301 + { USB_DEVICE(0x1901, 0x0194) }, /* GE Healthcare Remote Alarm Box */
6302 { USB_DEVICE(0x19CF, 0x3000) }, /* Parrot NMEA GPS Flight Recorder */
6303 { USB_DEVICE(0x1ADB, 0x0001) }, /* Schweitzer Engineering C662 Cable */
6304 { USB_DEVICE(0x1B1C, 0x1C00) }, /* Corsair USB Dongle */
6305 diff --git a/drivers/usb/serial/cypress_m8.c b/drivers/usb/serial/cypress_m8.c
6306 index 01bf53392819..244acb1299a9 100644
6307 --- a/drivers/usb/serial/cypress_m8.c
6308 +++ b/drivers/usb/serial/cypress_m8.c
6309 @@ -447,6 +447,11 @@ static int cypress_generic_port_probe(struct usb_serial_port *port)
6310 struct usb_serial *serial = port->serial;
6311 struct cypress_private *priv;
6312
6313 + if (!port->interrupt_out_urb || !port->interrupt_in_urb) {
6314 + dev_err(&port->dev, "required endpoint is missing\n");
6315 + return -ENODEV;
6316 + }
6317 +
6318 priv = kzalloc(sizeof(struct cypress_private), GFP_KERNEL);
6319 if (!priv)
6320 return -ENOMEM;
6321 @@ -606,12 +611,6 @@ static int cypress_open(struct tty_struct *tty, struct usb_serial_port *port)
6322 cypress_set_termios(tty, port, &priv->tmp_termios);
6323
6324 /* setup the port and start reading from the device */
6325 - if (!port->interrupt_in_urb) {
6326 - dev_err(&port->dev, "%s - interrupt_in_urb is empty!\n",
6327 - __func__);
6328 - return -1;
6329 - }
6330 -
6331 usb_fill_int_urb(port->interrupt_in_urb, serial->dev,
6332 usb_rcvintpipe(serial->dev, port->interrupt_in_endpointAddress),
6333 port->interrupt_in_urb->transfer_buffer,
6334 diff --git a/drivers/usb/serial/digi_acceleport.c b/drivers/usb/serial/digi_acceleport.c
6335 index 12b0e67473ba..3df7b7ec178e 100644
6336 --- a/drivers/usb/serial/digi_acceleport.c
6337 +++ b/drivers/usb/serial/digi_acceleport.c
6338 @@ -1251,8 +1251,27 @@ static int digi_port_init(struct usb_serial_port *port, unsigned port_num)
6339
6340 static int digi_startup(struct usb_serial *serial)
6341 {
6342 + struct device *dev = &serial->interface->dev;
6343 struct digi_serial *serial_priv;
6344 int ret;
6345 + int i;
6346 +
6347 + /* check whether the device has the expected number of endpoints */
6348 + if (serial->num_port_pointers < serial->type->num_ports + 1) {
6349 + dev_err(dev, "OOB endpoints missing\n");
6350 + return -ENODEV;
6351 + }
6352 +
6353 + for (i = 0; i < serial->type->num_ports + 1 ; i++) {
6354 + if (!serial->port[i]->read_urb) {
6355 + dev_err(dev, "bulk-in endpoint missing\n");
6356 + return -ENODEV;
6357 + }
6358 + if (!serial->port[i]->write_urb) {
6359 + dev_err(dev, "bulk-out endpoint missing\n");
6360 + return -ENODEV;
6361 + }
6362 + }
6363
6364 serial_priv = kzalloc(sizeof(*serial_priv), GFP_KERNEL);
6365 if (!serial_priv)
6366 diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
6367 index 8c660ae401d8..b61f12160d37 100644
6368 --- a/drivers/usb/serial/ftdi_sio.c
6369 +++ b/drivers/usb/serial/ftdi_sio.c
6370 @@ -1004,6 +1004,10 @@ static const struct usb_device_id id_table_combined[] = {
6371 { USB_DEVICE(FTDI_VID, CHETCO_SEASMART_DISPLAY_PID) },
6372 { USB_DEVICE(FTDI_VID, CHETCO_SEASMART_LITE_PID) },
6373 { USB_DEVICE(FTDI_VID, CHETCO_SEASMART_ANALOG_PID) },
6374 + /* ICP DAS I-756xU devices */
6375 + { USB_DEVICE(ICPDAS_VID, ICPDAS_I7560U_PID) },
6376 + { USB_DEVICE(ICPDAS_VID, ICPDAS_I7561U_PID) },
6377 + { USB_DEVICE(ICPDAS_VID, ICPDAS_I7563U_PID) },
6378 { } /* Terminating entry */
6379 };
6380
6381 diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h
6382 index a84df2513994..c5d6c1e73e8e 100644
6383 --- a/drivers/usb/serial/ftdi_sio_ids.h
6384 +++ b/drivers/usb/serial/ftdi_sio_ids.h
6385 @@ -872,6 +872,14 @@
6386 #define NOVITUS_BONO_E_PID 0x6010
6387
6388 /*
6389 + * ICPDAS I-756*U devices
6390 + */
6391 +#define ICPDAS_VID 0x1b5c
6392 +#define ICPDAS_I7560U_PID 0x0103
6393 +#define ICPDAS_I7561U_PID 0x0104
6394 +#define ICPDAS_I7563U_PID 0x0105
6395 +
6396 +/*
6397 * RT Systems programming cables for various ham radios
6398 */
6399 #define RTSYSTEMS_VID 0x2100 /* Vendor ID */
6400 diff --git a/drivers/usb/serial/mct_u232.c b/drivers/usb/serial/mct_u232.c
6401 index fd707d6a10e2..89726f702202 100644
6402 --- a/drivers/usb/serial/mct_u232.c
6403 +++ b/drivers/usb/serial/mct_u232.c
6404 @@ -376,14 +376,21 @@ static void mct_u232_msr_to_state(struct usb_serial_port *port,
6405
6406 static int mct_u232_port_probe(struct usb_serial_port *port)
6407 {
6408 + struct usb_serial *serial = port->serial;
6409 struct mct_u232_private *priv;
6410
6411 + /* check first to simplify error handling */
6412 + if (!serial->port[1] || !serial->port[1]->interrupt_in_urb) {
6413 + dev_err(&port->dev, "expected endpoint missing\n");
6414 + return -ENODEV;
6415 + }
6416 +
6417 priv = kzalloc(sizeof(*priv), GFP_KERNEL);
6418 if (!priv)
6419 return -ENOMEM;
6420
6421 /* Use second interrupt-in endpoint for reading. */
6422 - priv->read_urb = port->serial->port[1]->interrupt_in_urb;
6423 + priv->read_urb = serial->port[1]->interrupt_in_urb;
6424 priv->read_urb->context = port;
6425
6426 spin_lock_init(&priv->lock);
6427 diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
6428 index 348e19834b83..c6f497f16526 100644
6429 --- a/drivers/usb/serial/option.c
6430 +++ b/drivers/usb/serial/option.c
6431 @@ -1818,6 +1818,8 @@ static const struct usb_device_id option_ids[] = {
6432 { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d02, 0xff, 0x00, 0x00) },
6433 { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d03, 0xff, 0x02, 0x01) },
6434 { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d03, 0xff, 0x00, 0x00) },
6435 + { USB_DEVICE_INTERFACE_CLASS(0x2001, 0x7e19, 0xff), /* D-Link DWM-221 B1 */
6436 + .driver_info = (kernel_ulong_t)&net_intf4_blacklist },
6437 { USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e01, 0xff, 0xff, 0xff) }, /* D-Link DWM-152/C1 */
6438 { USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e02, 0xff, 0xff, 0xff) }, /* D-Link DWM-156/C1 */
6439 { USB_DEVICE_INTERFACE_CLASS(0x2020, 0x4000, 0xff) }, /* OLICARD300 - MT6225 */
6440 diff --git a/drivers/usb/storage/uas.c b/drivers/usb/storage/uas.c
6441 index 5c66d3f7a6d0..ce0cd6e20d4f 100644
6442 --- a/drivers/usb/storage/uas.c
6443 +++ b/drivers/usb/storage/uas.c
6444 @@ -812,7 +812,7 @@ static struct scsi_host_template uas_host_template = {
6445 .slave_configure = uas_slave_configure,
6446 .eh_abort_handler = uas_eh_abort_handler,
6447 .eh_bus_reset_handler = uas_eh_bus_reset_handler,
6448 - .can_queue = 65536, /* Is there a limit on the _host_ ? */
6449 + .can_queue = MAX_CMNDS,
6450 .this_id = -1,
6451 .sg_tablesize = SG_NONE,
6452 .skip_settle_delay = 1,
6453 diff --git a/drivers/watchdog/rc32434_wdt.c b/drivers/watchdog/rc32434_wdt.c
6454 index 71e78ef4b736..3a75f3b53452 100644
6455 --- a/drivers/watchdog/rc32434_wdt.c
6456 +++ b/drivers/watchdog/rc32434_wdt.c
6457 @@ -237,7 +237,7 @@ static long rc32434_wdt_ioctl(struct file *file, unsigned int cmd,
6458 return -EINVAL;
6459 /* Fall through */
6460 case WDIOC_GETTIMEOUT:
6461 - return copy_to_user(argp, &timeout, sizeof(int));
6462 + return copy_to_user(argp, &timeout, sizeof(int)) ? -EFAULT : 0;
6463 default:
6464 return -ENOTTY;
6465 }
6466 diff --git a/fs/coredump.c b/fs/coredump.c
6467 index 1777331eee76..dfc87c5f5a54 100644
6468 --- a/fs/coredump.c
6469 +++ b/fs/coredump.c
6470 @@ -32,6 +32,9 @@
6471 #include <linux/pipe_fs_i.h>
6472 #include <linux/oom.h>
6473 #include <linux/compat.h>
6474 +#include <linux/sched.h>
6475 +#include <linux/fs.h>
6476 +#include <linux/path.h>
6477
6478 #include <asm/uaccess.h>
6479 #include <asm/mmu_context.h>
6480 @@ -627,6 +630,8 @@ void do_coredump(const siginfo_t *siginfo)
6481 }
6482 } else {
6483 struct inode *inode;
6484 + int open_flags = O_CREAT | O_RDWR | O_NOFOLLOW |
6485 + O_LARGEFILE | O_EXCL;
6486
6487 if (cprm.limit < binfmt->min_coredump)
6488 goto fail_unlock;
6489 @@ -665,10 +670,27 @@ void do_coredump(const siginfo_t *siginfo)
6490 * what matters is that at least one of the two processes
6491 * writes its coredump successfully, not which one.
6492 */
6493 - cprm.file = filp_open(cn.corename,
6494 - O_CREAT | 2 | O_NOFOLLOW |
6495 - O_LARGEFILE | O_EXCL,
6496 - 0600);
6497 + if (need_suid_safe) {
6498 + /*
6499 + * Using user namespaces, normal user tasks can change
6500 + * their current->fs->root to point to arbitrary
6501 + * directories. Since the intention of the "only dump
6502 + * with a fully qualified path" rule is to control where
6503 + * coredumps may be placed using root privileges,
6504 + * current->fs->root must not be used. Instead, use the
6505 + * root directory of init_task.
6506 + */
6507 + struct path root;
6508 +
6509 + task_lock(&init_task);
6510 + get_fs_root(init_task.fs, &root);
6511 + task_unlock(&init_task);
6512 + cprm.file = file_open_root(root.dentry, root.mnt,
6513 + cn.corename, open_flags, 0600);
6514 + path_put(&root);
6515 + } else {
6516 + cprm.file = filp_open(cn.corename, open_flags, 0600);
6517 + }
6518 if (IS_ERR(cprm.file))
6519 goto fail_unlock;
6520
6521 diff --git a/fs/fhandle.c b/fs/fhandle.c
6522 index d59712dfa3e7..ca3c3dd01789 100644
6523 --- a/fs/fhandle.c
6524 +++ b/fs/fhandle.c
6525 @@ -228,7 +228,7 @@ long do_handle_open(int mountdirfd,
6526 path_put(&path);
6527 return fd;
6528 }
6529 - file = file_open_root(path.dentry, path.mnt, "", open_flag);
6530 + file = file_open_root(path.dentry, path.mnt, "", open_flag, 0);
6531 if (IS_ERR(file)) {
6532 put_unused_fd(fd);
6533 retval = PTR_ERR(file);
6534 diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c
6535 index 7a8ea1351584..60d6fc2e0e4b 100644
6536 --- a/fs/fs-writeback.c
6537 +++ b/fs/fs-writeback.c
6538 @@ -281,13 +281,15 @@ locked_inode_to_wb_and_lock_list(struct inode *inode)
6539 wb_get(wb);
6540 spin_unlock(&inode->i_lock);
6541 spin_lock(&wb->list_lock);
6542 - wb_put(wb); /* not gonna deref it anymore */
6543
6544 /* i_wb may have changed inbetween, can't use inode_to_wb() */
6545 - if (likely(wb == inode->i_wb))
6546 - return wb; /* @inode already has ref */
6547 + if (likely(wb == inode->i_wb)) {
6548 + wb_put(wb); /* @inode already has ref */
6549 + return wb;
6550 + }
6551
6552 spin_unlock(&wb->list_lock);
6553 + wb_put(wb);
6554 cpu_relax();
6555 spin_lock(&inode->i_lock);
6556 }
6557 @@ -1339,10 +1341,10 @@ __writeback_single_inode(struct inode *inode, struct writeback_control *wbc)
6558 * we go e.g. from filesystem. Flusher thread uses __writeback_single_inode()
6559 * and does more profound writeback list handling in writeback_sb_inodes().
6560 */
6561 -static int
6562 -writeback_single_inode(struct inode *inode, struct bdi_writeback *wb,
6563 - struct writeback_control *wbc)
6564 +static int writeback_single_inode(struct inode *inode,
6565 + struct writeback_control *wbc)
6566 {
6567 + struct bdi_writeback *wb;
6568 int ret = 0;
6569
6570 spin_lock(&inode->i_lock);
6571 @@ -1380,7 +1382,8 @@ writeback_single_inode(struct inode *inode, struct bdi_writeback *wb,
6572 ret = __writeback_single_inode(inode, wbc);
6573
6574 wbc_detach_inode(wbc);
6575 - spin_lock(&wb->list_lock);
6576 +
6577 + wb = inode_to_wb_and_lock_list(inode);
6578 spin_lock(&inode->i_lock);
6579 /*
6580 * If inode is clean, remove it from writeback lists. Otherwise don't
6581 @@ -1455,6 +1458,7 @@ static long writeback_sb_inodes(struct super_block *sb,
6582
6583 while (!list_empty(&wb->b_io)) {
6584 struct inode *inode = wb_inode(wb->b_io.prev);
6585 + struct bdi_writeback *tmp_wb;
6586
6587 if (inode->i_sb != sb) {
6588 if (work->sb) {
6589 @@ -1545,15 +1549,23 @@ static long writeback_sb_inodes(struct super_block *sb,
6590 cond_resched();
6591 }
6592
6593 -
6594 - spin_lock(&wb->list_lock);
6595 + /*
6596 + * Requeue @inode if still dirty. Be careful as @inode may
6597 + * have been switched to another wb in the meantime.
6598 + */
6599 + tmp_wb = inode_to_wb_and_lock_list(inode);
6600 spin_lock(&inode->i_lock);
6601 if (!(inode->i_state & I_DIRTY_ALL))
6602 wrote++;
6603 - requeue_inode(inode, wb, &wbc);
6604 + requeue_inode(inode, tmp_wb, &wbc);
6605 inode_sync_complete(inode);
6606 spin_unlock(&inode->i_lock);
6607
6608 + if (unlikely(tmp_wb != wb)) {
6609 + spin_unlock(&tmp_wb->list_lock);
6610 + spin_lock(&wb->list_lock);
6611 + }
6612 +
6613 /*
6614 * bail out to wb_writeback() often enough to check
6615 * background threshold and other termination conditions.
6616 @@ -2340,7 +2352,6 @@ EXPORT_SYMBOL(sync_inodes_sb);
6617 */
6618 int write_inode_now(struct inode *inode, int sync)
6619 {
6620 - struct bdi_writeback *wb = &inode_to_bdi(inode)->wb;
6621 struct writeback_control wbc = {
6622 .nr_to_write = LONG_MAX,
6623 .sync_mode = sync ? WB_SYNC_ALL : WB_SYNC_NONE,
6624 @@ -2352,7 +2363,7 @@ int write_inode_now(struct inode *inode, int sync)
6625 wbc.nr_to_write = 0;
6626
6627 might_sleep();
6628 - return writeback_single_inode(inode, wb, &wbc);
6629 + return writeback_single_inode(inode, &wbc);
6630 }
6631 EXPORT_SYMBOL(write_inode_now);
6632
6633 @@ -2369,7 +2380,7 @@ EXPORT_SYMBOL(write_inode_now);
6634 */
6635 int sync_inode(struct inode *inode, struct writeback_control *wbc)
6636 {
6637 - return writeback_single_inode(inode, &inode_to_bdi(inode)->wb, wbc);
6638 + return writeback_single_inode(inode, wbc);
6639 }
6640 EXPORT_SYMBOL(sync_inode);
6641
6642 diff --git a/fs/fuse/cuse.c b/fs/fuse/cuse.c
6643 index 8e3ee1936c7e..c5b6b7165489 100644
6644 --- a/fs/fuse/cuse.c
6645 +++ b/fs/fuse/cuse.c
6646 @@ -90,7 +90,7 @@ static struct list_head *cuse_conntbl_head(dev_t devt)
6647
6648 static ssize_t cuse_read_iter(struct kiocb *kiocb, struct iov_iter *to)
6649 {
6650 - struct fuse_io_priv io = { .async = 0, .file = kiocb->ki_filp };
6651 + struct fuse_io_priv io = FUSE_IO_PRIV_SYNC(kiocb->ki_filp);
6652 loff_t pos = 0;
6653
6654 return fuse_direct_io(&io, to, &pos, FUSE_DIO_CUSE);
6655 @@ -98,7 +98,7 @@ static ssize_t cuse_read_iter(struct kiocb *kiocb, struct iov_iter *to)
6656
6657 static ssize_t cuse_write_iter(struct kiocb *kiocb, struct iov_iter *from)
6658 {
6659 - struct fuse_io_priv io = { .async = 0, .file = kiocb->ki_filp };
6660 + struct fuse_io_priv io = FUSE_IO_PRIV_SYNC(kiocb->ki_filp);
6661 loff_t pos = 0;
6662 /*
6663 * No locking or generic_write_checks(), the server is
6664 diff --git a/fs/fuse/file.c b/fs/fuse/file.c
6665 index 570ca4053c80..c2e340d6ec6e 100644
6666 --- a/fs/fuse/file.c
6667 +++ b/fs/fuse/file.c
6668 @@ -528,6 +528,11 @@ static void fuse_release_user_pages(struct fuse_req *req, int write)
6669 }
6670 }
6671
6672 +static void fuse_io_release(struct kref *kref)
6673 +{
6674 + kfree(container_of(kref, struct fuse_io_priv, refcnt));
6675 +}
6676 +
6677 static ssize_t fuse_get_res_by_io(struct fuse_io_priv *io)
6678 {
6679 if (io->err)
6680 @@ -585,8 +590,9 @@ static void fuse_aio_complete(struct fuse_io_priv *io, int err, ssize_t pos)
6681 }
6682
6683 io->iocb->ki_complete(io->iocb, res, 0);
6684 - kfree(io);
6685 }
6686 +
6687 + kref_put(&io->refcnt, fuse_io_release);
6688 }
6689
6690 static void fuse_aio_complete_req(struct fuse_conn *fc, struct fuse_req *req)
6691 @@ -613,6 +619,7 @@ static size_t fuse_async_req_send(struct fuse_conn *fc, struct fuse_req *req,
6692 size_t num_bytes, struct fuse_io_priv *io)
6693 {
6694 spin_lock(&io->lock);
6695 + kref_get(&io->refcnt);
6696 io->size += num_bytes;
6697 io->reqs++;
6698 spin_unlock(&io->lock);
6699 @@ -691,7 +698,7 @@ static void fuse_short_read(struct fuse_req *req, struct inode *inode,
6700
6701 static int fuse_do_readpage(struct file *file, struct page *page)
6702 {
6703 - struct fuse_io_priv io = { .async = 0, .file = file };
6704 + struct fuse_io_priv io = FUSE_IO_PRIV_SYNC(file);
6705 struct inode *inode = page->mapping->host;
6706 struct fuse_conn *fc = get_fuse_conn(inode);
6707 struct fuse_req *req;
6708 @@ -984,7 +991,7 @@ static size_t fuse_send_write_pages(struct fuse_req *req, struct file *file,
6709 size_t res;
6710 unsigned offset;
6711 unsigned i;
6712 - struct fuse_io_priv io = { .async = 0, .file = file };
6713 + struct fuse_io_priv io = FUSE_IO_PRIV_SYNC(file);
6714
6715 for (i = 0; i < req->num_pages; i++)
6716 fuse_wait_on_page_writeback(inode, req->pages[i]->index);
6717 @@ -1398,7 +1405,7 @@ static ssize_t __fuse_direct_read(struct fuse_io_priv *io,
6718
6719 static ssize_t fuse_direct_read_iter(struct kiocb *iocb, struct iov_iter *to)
6720 {
6721 - struct fuse_io_priv io = { .async = 0, .file = iocb->ki_filp };
6722 + struct fuse_io_priv io = FUSE_IO_PRIV_SYNC(iocb->ki_filp);
6723 return __fuse_direct_read(&io, to, &iocb->ki_pos);
6724 }
6725
6726 @@ -1406,7 +1413,7 @@ static ssize_t fuse_direct_write_iter(struct kiocb *iocb, struct iov_iter *from)
6727 {
6728 struct file *file = iocb->ki_filp;
6729 struct inode *inode = file_inode(file);
6730 - struct fuse_io_priv io = { .async = 0, .file = file };
6731 + struct fuse_io_priv io = FUSE_IO_PRIV_SYNC(file);
6732 ssize_t res;
6733
6734 if (is_bad_inode(inode))
6735 @@ -2786,6 +2793,7 @@ fuse_direct_IO(struct kiocb *iocb, struct iov_iter *iter, loff_t offset)
6736 loff_t i_size;
6737 size_t count = iov_iter_count(iter);
6738 struct fuse_io_priv *io;
6739 + bool is_sync = is_sync_kiocb(iocb);
6740
6741 pos = offset;
6742 inode = file->f_mapping->host;
6743 @@ -2806,6 +2814,7 @@ fuse_direct_IO(struct kiocb *iocb, struct iov_iter *iter, loff_t offset)
6744 if (!io)
6745 return -ENOMEM;
6746 spin_lock_init(&io->lock);
6747 + kref_init(&io->refcnt);
6748 io->reqs = 1;
6749 io->bytes = -1;
6750 io->size = 0;
6751 @@ -2825,12 +2834,18 @@ fuse_direct_IO(struct kiocb *iocb, struct iov_iter *iter, loff_t offset)
6752 * to wait on real async I/O requests, so we must submit this request
6753 * synchronously.
6754 */
6755 - if (!is_sync_kiocb(iocb) && (offset + count > i_size) &&
6756 + if (!is_sync && (offset + count > i_size) &&
6757 iov_iter_rw(iter) == WRITE)
6758 io->async = false;
6759
6760 - if (io->async && is_sync_kiocb(iocb))
6761 + if (io->async && is_sync) {
6762 + /*
6763 + * Additional reference to keep io around after
6764 + * calling fuse_aio_complete()
6765 + */
6766 + kref_get(&io->refcnt);
6767 io->done = &wait;
6768 + }
6769
6770 if (iov_iter_rw(iter) == WRITE) {
6771 ret = fuse_direct_io(io, iter, &pos, FUSE_DIO_WRITE);
6772 @@ -2843,14 +2858,14 @@ fuse_direct_IO(struct kiocb *iocb, struct iov_iter *iter, loff_t offset)
6773 fuse_aio_complete(io, ret < 0 ? ret : 0, -1);
6774
6775 /* we have a non-extending, async request, so return */
6776 - if (!is_sync_kiocb(iocb))
6777 + if (!is_sync)
6778 return -EIOCBQUEUED;
6779
6780 wait_for_completion(&wait);
6781 ret = fuse_get_res_by_io(io);
6782 }
6783
6784 - kfree(io);
6785 + kref_put(&io->refcnt, fuse_io_release);
6786
6787 if (iov_iter_rw(iter) == WRITE) {
6788 if (ret > 0)
6789 diff --git a/fs/fuse/fuse_i.h b/fs/fuse/fuse_i.h
6790 index 405113101db8..604cd42dafef 100644
6791 --- a/fs/fuse/fuse_i.h
6792 +++ b/fs/fuse/fuse_i.h
6793 @@ -22,6 +22,7 @@
6794 #include <linux/rbtree.h>
6795 #include <linux/poll.h>
6796 #include <linux/workqueue.h>
6797 +#include <linux/kref.h>
6798
6799 /** Max number of pages that can be used in a single read request */
6800 #define FUSE_MAX_PAGES_PER_REQ 32
6801 @@ -243,6 +244,7 @@ struct fuse_args {
6802
6803 /** The request IO state (for asynchronous processing) */
6804 struct fuse_io_priv {
6805 + struct kref refcnt;
6806 int async;
6807 spinlock_t lock;
6808 unsigned reqs;
6809 @@ -256,6 +258,13 @@ struct fuse_io_priv {
6810 struct completion *done;
6811 };
6812
6813 +#define FUSE_IO_PRIV_SYNC(f) \
6814 +{ \
6815 + .refcnt = { ATOMIC_INIT(1) }, \
6816 + .async = 0, \
6817 + .file = f, \
6818 +}
6819 +
6820 /**
6821 * Request flags
6822 *
6823 diff --git a/fs/jbd2/journal.c b/fs/jbd2/journal.c
6824 index 81e622681c82..624a57a9c4aa 100644
6825 --- a/fs/jbd2/journal.c
6826 +++ b/fs/jbd2/journal.c
6827 @@ -1408,11 +1408,12 @@ out:
6828 /**
6829 * jbd2_mark_journal_empty() - Mark on disk journal as empty.
6830 * @journal: The journal to update.
6831 + * @write_op: With which operation should we write the journal sb
6832 *
6833 * Update a journal's dynamic superblock fields to show that journal is empty.
6834 * Write updated superblock to disk waiting for IO to complete.
6835 */
6836 -static void jbd2_mark_journal_empty(journal_t *journal)
6837 +static void jbd2_mark_journal_empty(journal_t *journal, int write_op)
6838 {
6839 journal_superblock_t *sb = journal->j_superblock;
6840
6841 @@ -1430,7 +1431,7 @@ static void jbd2_mark_journal_empty(journal_t *journal)
6842 sb->s_start = cpu_to_be32(0);
6843 read_unlock(&journal->j_state_lock);
6844
6845 - jbd2_write_superblock(journal, WRITE_FUA);
6846 + jbd2_write_superblock(journal, write_op);
6847
6848 /* Log is no longer empty */
6849 write_lock(&journal->j_state_lock);
6850 @@ -1716,7 +1717,13 @@ int jbd2_journal_destroy(journal_t *journal)
6851 if (journal->j_sb_buffer) {
6852 if (!is_journal_aborted(journal)) {
6853 mutex_lock(&journal->j_checkpoint_mutex);
6854 - jbd2_mark_journal_empty(journal);
6855 +
6856 + write_lock(&journal->j_state_lock);
6857 + journal->j_tail_sequence =
6858 + ++journal->j_transaction_sequence;
6859 + write_unlock(&journal->j_state_lock);
6860 +
6861 + jbd2_mark_journal_empty(journal, WRITE_FLUSH_FUA);
6862 mutex_unlock(&journal->j_checkpoint_mutex);
6863 } else
6864 err = -EIO;
6865 @@ -1975,7 +1982,7 @@ int jbd2_journal_flush(journal_t *journal)
6866 * the magic code for a fully-recovered superblock. Any future
6867 * commits of data to the journal will restore the current
6868 * s_start value. */
6869 - jbd2_mark_journal_empty(journal);
6870 + jbd2_mark_journal_empty(journal, WRITE_FUA);
6871 mutex_unlock(&journal->j_checkpoint_mutex);
6872 write_lock(&journal->j_state_lock);
6873 J_ASSERT(!journal->j_running_transaction);
6874 @@ -2021,7 +2028,7 @@ int jbd2_journal_wipe(journal_t *journal, int write)
6875 if (write) {
6876 /* Lock to make assertions happy... */
6877 mutex_lock(&journal->j_checkpoint_mutex);
6878 - jbd2_mark_journal_empty(journal);
6879 + jbd2_mark_journal_empty(journal, WRITE_FUA);
6880 mutex_unlock(&journal->j_checkpoint_mutex);
6881 }
6882
6883 diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c
6884 index a9f096c7e99f..7d5351cd67fb 100644
6885 --- a/fs/nfsd/nfs4proc.c
6886 +++ b/fs/nfsd/nfs4proc.c
6887 @@ -877,6 +877,7 @@ nfsd4_secinfo(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
6888 &exp, &dentry);
6889 if (err)
6890 return err;
6891 + fh_unlock(&cstate->current_fh);
6892 if (d_really_is_negative(dentry)) {
6893 exp_put(exp);
6894 err = nfserr_noent;
6895 diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
6896 index 51c9e9ca39a4..12935209deca 100644
6897 --- a/fs/nfsd/nfs4xdr.c
6898 +++ b/fs/nfsd/nfs4xdr.c
6899 @@ -1072,8 +1072,9 @@ nfsd4_decode_rename(struct nfsd4_compoundargs *argp, struct nfsd4_rename *rename
6900
6901 READ_BUF(4);
6902 rename->rn_snamelen = be32_to_cpup(p++);
6903 - READ_BUF(rename->rn_snamelen + 4);
6904 + READ_BUF(rename->rn_snamelen);
6905 SAVEMEM(rename->rn_sname, rename->rn_snamelen);
6906 + READ_BUF(4);
6907 rename->rn_tnamelen = be32_to_cpup(p++);
6908 READ_BUF(rename->rn_tnamelen);
6909 SAVEMEM(rename->rn_tname, rename->rn_tnamelen);
6910 @@ -1155,13 +1156,14 @@ nfsd4_decode_setclientid(struct nfsd4_compoundargs *argp, struct nfsd4_setclient
6911 READ_BUF(8);
6912 setclientid->se_callback_prog = be32_to_cpup(p++);
6913 setclientid->se_callback_netid_len = be32_to_cpup(p++);
6914 -
6915 - READ_BUF(setclientid->se_callback_netid_len + 4);
6916 + READ_BUF(setclientid->se_callback_netid_len);
6917 SAVEMEM(setclientid->se_callback_netid_val, setclientid->se_callback_netid_len);
6918 + READ_BUF(4);
6919 setclientid->se_callback_addr_len = be32_to_cpup(p++);
6920
6921 - READ_BUF(setclientid->se_callback_addr_len + 4);
6922 + READ_BUF(setclientid->se_callback_addr_len);
6923 SAVEMEM(setclientid->se_callback_addr_val, setclientid->se_callback_addr_len);
6924 + READ_BUF(4);
6925 setclientid->se_callback_ident = be32_to_cpup(p++);
6926
6927 DECODE_TAIL;
6928 @@ -1815,8 +1817,9 @@ nfsd4_decode_compound(struct nfsd4_compoundargs *argp)
6929
6930 READ_BUF(4);
6931 argp->taglen = be32_to_cpup(p++);
6932 - READ_BUF(argp->taglen + 8);
6933 + READ_BUF(argp->taglen);
6934 SAVEMEM(argp->tag, argp->taglen);
6935 + READ_BUF(8);
6936 argp->minorversion = be32_to_cpup(p++);
6937 argp->opcnt = be32_to_cpup(p++);
6938 max_reply += 4 + (XDR_QUADLEN(argp->taglen) << 2);
6939 diff --git a/fs/ocfs2/dlm/dlmconvert.c b/fs/ocfs2/dlm/dlmconvert.c
6940 index e36d63ff1783..f90931335c6b 100644
6941 --- a/fs/ocfs2/dlm/dlmconvert.c
6942 +++ b/fs/ocfs2/dlm/dlmconvert.c
6943 @@ -262,6 +262,7 @@ enum dlm_status dlmconvert_remote(struct dlm_ctxt *dlm,
6944 struct dlm_lock *lock, int flags, int type)
6945 {
6946 enum dlm_status status;
6947 + u8 old_owner = res->owner;
6948
6949 mlog(0, "type=%d, convert_type=%d, busy=%d\n", lock->ml.type,
6950 lock->ml.convert_type, res->state & DLM_LOCK_RES_IN_PROGRESS);
6951 @@ -287,6 +288,19 @@ enum dlm_status dlmconvert_remote(struct dlm_ctxt *dlm,
6952 status = DLM_DENIED;
6953 goto bail;
6954 }
6955 +
6956 + if (lock->ml.type == type && lock->ml.convert_type == LKM_IVMODE) {
6957 + mlog(0, "last convert request returned DLM_RECOVERING, but "
6958 + "owner has already queued and sent ast to me. res %.*s, "
6959 + "(cookie=%u:%llu, type=%d, conv=%d)\n",
6960 + res->lockname.len, res->lockname.name,
6961 + dlm_get_lock_cookie_node(be64_to_cpu(lock->ml.cookie)),
6962 + dlm_get_lock_cookie_seq(be64_to_cpu(lock->ml.cookie)),
6963 + lock->ml.type, lock->ml.convert_type);
6964 + status = DLM_NORMAL;
6965 + goto bail;
6966 + }
6967 +
6968 res->state |= DLM_LOCK_RES_IN_PROGRESS;
6969 /* move lock to local convert queue */
6970 /* do not alter lock refcount. switching lists. */
6971 @@ -316,11 +330,19 @@ enum dlm_status dlmconvert_remote(struct dlm_ctxt *dlm,
6972 spin_lock(&res->spinlock);
6973 res->state &= ~DLM_LOCK_RES_IN_PROGRESS;
6974 lock->convert_pending = 0;
6975 - /* if it failed, move it back to granted queue */
6976 + /* if it failed, move it back to granted queue.
6977 + * if master returns DLM_NORMAL and then down before sending ast,
6978 + * it may have already been moved to granted queue, reset to
6979 + * DLM_RECOVERING and retry convert */
6980 if (status != DLM_NORMAL) {
6981 if (status != DLM_NOTQUEUED)
6982 dlm_error(status);
6983 dlm_revert_pending_convert(res, lock);
6984 + } else if ((res->state & DLM_LOCK_RES_RECOVERING) ||
6985 + (old_owner != res->owner)) {
6986 + mlog(0, "res %.*s is in recovering or has been recovered.\n",
6987 + res->lockname.len, res->lockname.name);
6988 + status = DLM_RECOVERING;
6989 }
6990 bail:
6991 spin_unlock(&res->spinlock);
6992 diff --git a/fs/ocfs2/dlm/dlmrecovery.c b/fs/ocfs2/dlm/dlmrecovery.c
6993 index 42f0cae93a0a..4a338803e7e9 100644
6994 --- a/fs/ocfs2/dlm/dlmrecovery.c
6995 +++ b/fs/ocfs2/dlm/dlmrecovery.c
6996 @@ -2064,7 +2064,6 @@ void dlm_move_lockres_to_recovery_list(struct dlm_ctxt *dlm,
6997 dlm_lock_get(lock);
6998 if (lock->convert_pending) {
6999 /* move converting lock back to granted */
7000 - BUG_ON(i != DLM_CONVERTING_LIST);
7001 mlog(0, "node died with convert pending "
7002 "on %.*s. move back to granted list.\n",
7003 res->lockname.len, res->lockname.name);
7004 diff --git a/fs/open.c b/fs/open.c
7005 index b6f1e96a7c0b..6a24f988d253 100644
7006 --- a/fs/open.c
7007 +++ b/fs/open.c
7008 @@ -995,14 +995,12 @@ struct file *filp_open(const char *filename, int flags, umode_t mode)
7009 EXPORT_SYMBOL(filp_open);
7010
7011 struct file *file_open_root(struct dentry *dentry, struct vfsmount *mnt,
7012 - const char *filename, int flags)
7013 + const char *filename, int flags, umode_t mode)
7014 {
7015 struct open_flags op;
7016 - int err = build_open_flags(flags, 0, &op);
7017 + int err = build_open_flags(flags, mode, &op);
7018 if (err)
7019 return ERR_PTR(err);
7020 - if (flags & O_CREAT)
7021 - return ERR_PTR(-EINVAL);
7022 return do_file_open_root(dentry, mnt, filename, &op);
7023 }
7024 EXPORT_SYMBOL(file_open_root);
7025 diff --git a/fs/proc_namespace.c b/fs/proc_namespace.c
7026 index 8ebd9a334085..87645955990d 100644
7027 --- a/fs/proc_namespace.c
7028 +++ b/fs/proc_namespace.c
7029 @@ -197,6 +197,8 @@ static int show_vfsstat(struct seq_file *m, struct vfsmount *mnt)
7030 if (sb->s_op->show_devname) {
7031 seq_puts(m, "device ");
7032 err = sb->s_op->show_devname(m, mnt_path.dentry);
7033 + if (err)
7034 + goto out;
7035 } else {
7036 if (r->mnt_devname) {
7037 seq_puts(m, "device ");
7038 diff --git a/fs/quota/dquot.c b/fs/quota/dquot.c
7039 index ef0d64b2a6d9..353ff31dcee1 100644
7040 --- a/fs/quota/dquot.c
7041 +++ b/fs/quota/dquot.c
7042 @@ -1398,7 +1398,7 @@ static int dquot_active(const struct inode *inode)
7043 static int __dquot_initialize(struct inode *inode, int type)
7044 {
7045 int cnt, init_needed = 0;
7046 - struct dquot **dquots, *got[MAXQUOTAS];
7047 + struct dquot **dquots, *got[MAXQUOTAS] = {};
7048 struct super_block *sb = inode->i_sb;
7049 qsize_t rsv;
7050 int ret = 0;
7051 @@ -1415,7 +1415,6 @@ static int __dquot_initialize(struct inode *inode, int type)
7052 int rc;
7053 struct dquot *dquot;
7054
7055 - got[cnt] = NULL;
7056 if (type != -1 && cnt != type)
7057 continue;
7058 /*
7059 diff --git a/fs/splice.c b/fs/splice.c
7060 index 4cf700d50b40..0f77e9682857 100644
7061 --- a/fs/splice.c
7062 +++ b/fs/splice.c
7063 @@ -185,6 +185,9 @@ ssize_t splice_to_pipe(struct pipe_inode_info *pipe,
7064 unsigned int spd_pages = spd->nr_pages;
7065 int ret, do_wakeup, page_nr;
7066
7067 + if (!spd_pages)
7068 + return 0;
7069 +
7070 ret = 0;
7071 do_wakeup = 0;
7072 page_nr = 0;
7073 diff --git a/fs/xfs/xfs_attr_list.c b/fs/xfs/xfs_attr_list.c
7074 index 0ef7c2ed3f8a..4fa14820e2e2 100644
7075 --- a/fs/xfs/xfs_attr_list.c
7076 +++ b/fs/xfs/xfs_attr_list.c
7077 @@ -202,8 +202,10 @@ xfs_attr_shortform_list(xfs_attr_list_context_t *context)
7078 sbp->namelen,
7079 sbp->valuelen,
7080 &sbp->name[sbp->namelen]);
7081 - if (error)
7082 + if (error) {
7083 + kmem_free(sbuf);
7084 return error;
7085 + }
7086 if (context->seen_enough)
7087 break;
7088 cursor->offset++;
7089 @@ -454,14 +456,13 @@ xfs_attr3_leaf_list_int(
7090 args.rmtblkcnt = xfs_attr3_rmt_blocks(
7091 args.dp->i_mount, valuelen);
7092 retval = xfs_attr_rmtval_get(&args);
7093 - if (retval)
7094 - return retval;
7095 - retval = context->put_listent(context,
7096 - entry->flags,
7097 - name_rmt->name,
7098 - (int)name_rmt->namelen,
7099 - valuelen,
7100 - args.value);
7101 + if (!retval)
7102 + retval = context->put_listent(context,
7103 + entry->flags,
7104 + name_rmt->name,
7105 + (int)name_rmt->namelen,
7106 + valuelen,
7107 + args.value);
7108 kmem_free(args.value);
7109 } else {
7110 retval = context->put_listent(context,
7111 diff --git a/include/asm-generic/bitops/lock.h b/include/asm-generic/bitops/lock.h
7112 index c30266e94806..8ef0ccbf8167 100644
7113 --- a/include/asm-generic/bitops/lock.h
7114 +++ b/include/asm-generic/bitops/lock.h
7115 @@ -29,16 +29,16 @@ do { \
7116 * @nr: the bit to set
7117 * @addr: the address to start counting from
7118 *
7119 - * This operation is like clear_bit_unlock, however it is not atomic.
7120 - * It does provide release barrier semantics so it can be used to unlock
7121 - * a bit lock, however it would only be used if no other CPU can modify
7122 - * any bits in the memory until the lock is released (a good example is
7123 - * if the bit lock itself protects access to the other bits in the word).
7124 + * A weaker form of clear_bit_unlock() as used by __bit_lock_unlock(). If all
7125 + * the bits in the word are protected by this lock some archs can use weaker
7126 + * ops to safely unlock.
7127 + *
7128 + * See for example x86's implementation.
7129 */
7130 #define __clear_bit_unlock(nr, addr) \
7131 do { \
7132 - smp_mb(); \
7133 - __clear_bit(nr, addr); \
7134 + smp_mb__before_atomic(); \
7135 + clear_bit(nr, addr); \
7136 } while (0)
7137
7138 #endif /* _ASM_GENERIC_BITOPS_LOCK_H_ */
7139 diff --git a/include/linux/cgroup-defs.h b/include/linux/cgroup-defs.h
7140 index 8e30faeab183..a7c7f74808a4 100644
7141 --- a/include/linux/cgroup-defs.h
7142 +++ b/include/linux/cgroup-defs.h
7143 @@ -216,6 +216,9 @@ struct css_set {
7144 /* all css_task_iters currently walking this cset */
7145 struct list_head task_iters;
7146
7147 + /* dead and being drained, ignore for migration */
7148 + bool dead;
7149 +
7150 /* For RCU-protected deletion */
7151 struct rcu_head rcu_head;
7152 };
7153 diff --git a/include/linux/device-mapper.h b/include/linux/device-mapper.h
7154 index ec1c61c87d89..899ab9f8549e 100644
7155 --- a/include/linux/device-mapper.h
7156 +++ b/include/linux/device-mapper.h
7157 @@ -124,6 +124,8 @@ struct dm_dev {
7158 char name[16];
7159 };
7160
7161 +dev_t dm_get_dev_t(const char *path);
7162 +
7163 /*
7164 * Constructors should call these functions to ensure destination devices
7165 * are opened/closed correctly.
7166 diff --git a/include/linux/fs.h b/include/linux/fs.h
7167 index 3aa514254161..22c5a0cf16e3 100644
7168 --- a/include/linux/fs.h
7169 +++ b/include/linux/fs.h
7170 @@ -2217,7 +2217,7 @@ extern long do_sys_open(int dfd, const char __user *filename, int flags,
7171 extern struct file *file_open_name(struct filename *, int, umode_t);
7172 extern struct file *filp_open(const char *, int, umode_t);
7173 extern struct file *file_open_root(struct dentry *, struct vfsmount *,
7174 - const char *, int);
7175 + const char *, int, umode_t);
7176 extern struct file * dentry_open(const struct path *, int, const struct cred *);
7177 extern int filp_close(struct file *, fl_owner_t id);
7178
7179 diff --git a/include/linux/kernel.h b/include/linux/kernel.h
7180 index 350dfb08aee3..924853d33a13 100644
7181 --- a/include/linux/kernel.h
7182 +++ b/include/linux/kernel.h
7183 @@ -607,7 +607,7 @@ do { \
7184
7185 #define do_trace_printk(fmt, args...) \
7186 do { \
7187 - static const char *trace_printk_fmt \
7188 + static const char *trace_printk_fmt __used \
7189 __attribute__((section("__trace_printk_fmt"))) = \
7190 __builtin_constant_p(fmt) ? fmt : NULL; \
7191 \
7192 @@ -651,7 +651,7 @@ int __trace_printk(unsigned long ip, const char *fmt, ...);
7193 */
7194
7195 #define trace_puts(str) ({ \
7196 - static const char *trace_printk_fmt \
7197 + static const char *trace_printk_fmt __used \
7198 __attribute__((section("__trace_printk_fmt"))) = \
7199 __builtin_constant_p(str) ? str : NULL; \
7200 \
7201 @@ -673,7 +673,7 @@ extern void trace_dump_stack(int skip);
7202 #define ftrace_vprintk(fmt, vargs) \
7203 do { \
7204 if (__builtin_constant_p(fmt)) { \
7205 - static const char *trace_printk_fmt \
7206 + static const char *trace_printk_fmt __used \
7207 __attribute__((section("__trace_printk_fmt"))) = \
7208 __builtin_constant_p(fmt) ? fmt : NULL; \
7209 \
7210 diff --git a/include/linux/pci.h b/include/linux/pci.h
7211 index 6ae25aae88fd..4e554bfff129 100644
7212 --- a/include/linux/pci.h
7213 +++ b/include/linux/pci.h
7214 @@ -359,6 +359,7 @@ struct pci_dev {
7215 unsigned int io_window_1k:1; /* Intel P2P bridge 1K I/O windows */
7216 unsigned int irq_managed:1;
7217 unsigned int has_secondary_link:1;
7218 + unsigned int non_compliant_bars:1; /* broken BARs; ignore them */
7219 pci_dev_flags_t dev_flags;
7220 atomic_t enable_cnt; /* pci_enable_device has been called */
7221
7222 diff --git a/include/linux/platform_data/asoc-s3c.h b/include/linux/platform_data/asoc-s3c.h
7223 index 5e0bc779e6c5..33f88b4479e4 100644
7224 --- a/include/linux/platform_data/asoc-s3c.h
7225 +++ b/include/linux/platform_data/asoc-s3c.h
7226 @@ -39,6 +39,10 @@ struct samsung_i2s {
7227 */
7228 struct s3c_audio_pdata {
7229 int (*cfg_gpio)(struct platform_device *);
7230 + void *dma_playback;
7231 + void *dma_capture;
7232 + void *dma_play_sec;
7233 + void *dma_capture_mic;
7234 union {
7235 struct samsung_i2s i2s;
7236 } type;
7237 diff --git a/include/linux/thermal.h b/include/linux/thermal.h
7238 index e13a1ace50e9..4a849f19e6c9 100644
7239 --- a/include/linux/thermal.h
7240 +++ b/include/linux/thermal.h
7241 @@ -156,6 +156,7 @@ struct thermal_attr {
7242 * @trip_hyst_attrs: attributes for trip points for sysfs: trip hysteresis
7243 * @devdata: private pointer for device private data
7244 * @trips: number of trip points the thermal zone supports
7245 + * @trips_disabled; bitmap for disabled trips
7246 * @passive_delay: number of milliseconds to wait between polls when
7247 * performing passive cooling.
7248 * @polling_delay: number of milliseconds to wait between polls when
7249 @@ -191,6 +192,7 @@ struct thermal_zone_device {
7250 struct thermal_attr *trip_hyst_attrs;
7251 void *devdata;
7252 int trips;
7253 + unsigned long trips_disabled; /* bitmap for disabled trips */
7254 int passive_delay;
7255 int polling_delay;
7256 int temperature;
7257 diff --git a/include/linux/tty.h b/include/linux/tty.h
7258 index 6b6e811f4575..3bf03b6b52e9 100644
7259 --- a/include/linux/tty.h
7260 +++ b/include/linux/tty.h
7261 @@ -594,7 +594,7 @@ static inline int tty_ldisc_receive_buf(struct tty_ldisc *ld, unsigned char *p,
7262 count = ld->ops->receive_buf2(ld->tty, p, f, count);
7263 else {
7264 count = min_t(int, count, ld->tty->receive_room);
7265 - if (count)
7266 + if (count && ld->ops->receive_buf)
7267 ld->ops->receive_buf(ld->tty, p, f, count);
7268 }
7269 return count;
7270 diff --git a/kernel/cgroup.c b/kernel/cgroup.c
7271 index fb1ecfd2decd..dc94f8beb097 100644
7272 --- a/kernel/cgroup.c
7273 +++ b/kernel/cgroup.c
7274 @@ -2498,6 +2498,14 @@ static void cgroup_migrate_add_src(struct css_set *src_cset,
7275 lockdep_assert_held(&cgroup_mutex);
7276 lockdep_assert_held(&css_set_lock);
7277
7278 + /*
7279 + * If ->dead, @src_set is associated with one or more dead cgroups
7280 + * and doesn't contain any migratable tasks. Ignore it early so
7281 + * that the rest of migration path doesn't get confused by it.
7282 + */
7283 + if (src_cset->dead)
7284 + return;
7285 +
7286 src_cgrp = cset_cgroup_from_root(src_cset, dst_cgrp->root);
7287
7288 if (!list_empty(&src_cset->mg_preload_node))
7289 @@ -5131,6 +5139,7 @@ static int cgroup_destroy_locked(struct cgroup *cgrp)
7290 __releases(&cgroup_mutex) __acquires(&cgroup_mutex)
7291 {
7292 struct cgroup_subsys_state *css;
7293 + struct cgrp_cset_link *link;
7294 int ssid;
7295
7296 lockdep_assert_held(&cgroup_mutex);
7297 @@ -5151,11 +5160,18 @@ static int cgroup_destroy_locked(struct cgroup *cgrp)
7298 return -EBUSY;
7299
7300 /*
7301 - * Mark @cgrp dead. This prevents further task migration and child
7302 - * creation by disabling cgroup_lock_live_group().
7303 + * Mark @cgrp and the associated csets dead. The former prevents
7304 + * further task migration and child creation by disabling
7305 + * cgroup_lock_live_group(). The latter makes the csets ignored by
7306 + * the migration path.
7307 */
7308 cgrp->self.flags &= ~CSS_ONLINE;
7309
7310 + spin_lock_bh(&css_set_lock);
7311 + list_for_each_entry(link, &cgrp->cset_links, cset_link)
7312 + link->cset->dead = true;
7313 + spin_unlock_bh(&css_set_lock);
7314 +
7315 /* initiate massacre of all css's */
7316 for_each_css(css, ssid, cgrp)
7317 kill_css(css);
7318 diff --git a/kernel/events/core.c b/kernel/events/core.c
7319 index 1087bbeb152b..faf2067fc8e2 100644
7320 --- a/kernel/events/core.c
7321 +++ b/kernel/events/core.c
7322 @@ -7979,6 +7979,9 @@ perf_event_alloc(struct perf_event_attr *attr, int cpu,
7323 }
7324 }
7325
7326 + /* symmetric to unaccount_event() in _free_event() */
7327 + account_event(event);
7328 +
7329 return event;
7330
7331 err_per_task:
7332 @@ -8342,8 +8345,6 @@ SYSCALL_DEFINE5(perf_event_open,
7333 }
7334 }
7335
7336 - account_event(event);
7337 -
7338 /*
7339 * Special case software events and allow them to be part of
7340 * any hardware group.
7341 @@ -8626,8 +8627,6 @@ perf_event_create_kernel_counter(struct perf_event_attr *attr, int cpu,
7342 /* Mark owner so we could distinguish it from user events. */
7343 event->owner = EVENT_OWNER_KERNEL;
7344
7345 - account_event(event);
7346 -
7347 ctx = find_get_context(event->pmu, task, event);
7348 if (IS_ERR(ctx)) {
7349 err = PTR_ERR(ctx);
7350 diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c
7351 index b7342a24f559..b7dd5718836e 100644
7352 --- a/kernel/power/hibernate.c
7353 +++ b/kernel/power/hibernate.c
7354 @@ -339,6 +339,7 @@ int hibernation_snapshot(int platform_mode)
7355 pm_message_t msg;
7356 int error;
7357
7358 + pm_suspend_clear_flags();
7359 error = platform_begin(platform_mode);
7360 if (error)
7361 goto Close;
7362 diff --git a/kernel/sched/core.c b/kernel/sched/core.c
7363 index eb70592f03f6..70e5e09341f1 100644
7364 --- a/kernel/sched/core.c
7365 +++ b/kernel/sched/core.c
7366 @@ -5525,6 +5525,7 @@ migration_call(struct notifier_block *nfb, unsigned long action, void *hcpu)
7367
7368 case CPU_UP_PREPARE:
7369 rq->calc_load_update = calc_load_update;
7370 + account_reset_rq(rq);
7371 break;
7372
7373 case CPU_ONLINE:
7374 diff --git a/kernel/sched/cputime.c b/kernel/sched/cputime.c
7375 index 05de80b48586..f74ea89e77a8 100644
7376 --- a/kernel/sched/cputime.c
7377 +++ b/kernel/sched/cputime.c
7378 @@ -259,21 +259,21 @@ static __always_inline bool steal_account_process_tick(void)
7379 #ifdef CONFIG_PARAVIRT
7380 if (static_key_false(&paravirt_steal_enabled)) {
7381 u64 steal;
7382 - cputime_t steal_ct;
7383 + unsigned long steal_jiffies;
7384
7385 steal = paravirt_steal_clock(smp_processor_id());
7386 steal -= this_rq()->prev_steal_time;
7387
7388 /*
7389 - * cputime_t may be less precise than nsecs (eg: if it's
7390 - * based on jiffies). Lets cast the result to cputime
7391 + * steal is in nsecs but our caller is expecting steal
7392 + * time in jiffies. Lets cast the result to jiffies
7393 * granularity and account the rest on the next rounds.
7394 */
7395 - steal_ct = nsecs_to_cputime(steal);
7396 - this_rq()->prev_steal_time += cputime_to_nsecs(steal_ct);
7397 + steal_jiffies = nsecs_to_jiffies(steal);
7398 + this_rq()->prev_steal_time += jiffies_to_nsecs(steal_jiffies);
7399
7400 - account_steal_time(steal_ct);
7401 - return steal_ct;
7402 + account_steal_time(jiffies_to_cputime(steal_jiffies));
7403 + return steal_jiffies;
7404 }
7405 #endif
7406 return false;
7407 diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
7408 index b242775bf670..0517abd7dd73 100644
7409 --- a/kernel/sched/sched.h
7410 +++ b/kernel/sched/sched.h
7411 @@ -1770,3 +1770,16 @@ static inline u64 irq_time_read(int cpu)
7412 }
7413 #endif /* CONFIG_64BIT */
7414 #endif /* CONFIG_IRQ_TIME_ACCOUNTING */
7415 +
7416 +static inline void account_reset_rq(struct rq *rq)
7417 +{
7418 +#ifdef CONFIG_IRQ_TIME_ACCOUNTING
7419 + rq->prev_irq_time = 0;
7420 +#endif
7421 +#ifdef CONFIG_PARAVIRT
7422 + rq->prev_steal_time = 0;
7423 +#endif
7424 +#ifdef CONFIG_PARAVIRT_TIME_ACCOUNTING
7425 + rq->prev_steal_time_rq = 0;
7426 +#endif
7427 +}
7428 diff --git a/kernel/sysctl_binary.c b/kernel/sysctl_binary.c
7429 index 7e7746a42a62..10a1d7dc9313 100644
7430 --- a/kernel/sysctl_binary.c
7431 +++ b/kernel/sysctl_binary.c
7432 @@ -1321,7 +1321,7 @@ static ssize_t binary_sysctl(const int *name, int nlen,
7433 }
7434
7435 mnt = task_active_pid_ns(current)->proc_mnt;
7436 - file = file_open_root(mnt->mnt_root, mnt, pathname, flags);
7437 + file = file_open_root(mnt->mnt_root, mnt, pathname, flags, 0);
7438 result = PTR_ERR(file);
7439 if (IS_ERR(file))
7440 goto out_putname;
7441 diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
7442 index d9293402ee68..8305cbb2d5a2 100644
7443 --- a/kernel/trace/trace.c
7444 +++ b/kernel/trace/trace.c
7445 @@ -4949,7 +4949,10 @@ static ssize_t tracing_splice_read_pipe(struct file *filp,
7446
7447 spd.nr_pages = i;
7448
7449 - ret = splice_to_pipe(pipe, &spd);
7450 + if (i)
7451 + ret = splice_to_pipe(pipe, &spd);
7452 + else
7453 + ret = 0;
7454 out:
7455 splice_shrink_spd(&spd);
7456 return ret;
7457 diff --git a/kernel/trace/trace_irqsoff.c b/kernel/trace/trace_irqsoff.c
7458 index e4e56589ec1d..be3222b7d72e 100644
7459 --- a/kernel/trace/trace_irqsoff.c
7460 +++ b/kernel/trace/trace_irqsoff.c
7461 @@ -109,8 +109,12 @@ static int func_prolog_dec(struct trace_array *tr,
7462 return 0;
7463
7464 local_save_flags(*flags);
7465 - /* slight chance to get a false positive on tracing_cpu */
7466 - if (!irqs_disabled_flags(*flags))
7467 + /*
7468 + * Slight chance to get a false positive on tracing_cpu,
7469 + * although I'm starting to think there isn't a chance.
7470 + * Leave this for now just to be paranoid.
7471 + */
7472 + if (!irqs_disabled_flags(*flags) && !preempt_count())
7473 return 0;
7474
7475 *data = per_cpu_ptr(tr->trace_buffer.data, cpu);
7476 diff --git a/kernel/trace/trace_printk.c b/kernel/trace/trace_printk.c
7477 index 060df67dbdd1..f96f0383f6c6 100644
7478 --- a/kernel/trace/trace_printk.c
7479 +++ b/kernel/trace/trace_printk.c
7480 @@ -296,6 +296,9 @@ static int t_show(struct seq_file *m, void *v)
7481 const char *str = *fmt;
7482 int i;
7483
7484 + if (!*fmt)
7485 + return 0;
7486 +
7487 seq_printf(m, "0x%lx : \"", *(unsigned long *)fmt);
7488
7489 /*
7490 diff --git a/kernel/watchdog.c b/kernel/watchdog.c
7491 index 18f34cf75f74..198137b1cadc 100644
7492 --- a/kernel/watchdog.c
7493 +++ b/kernel/watchdog.c
7494 @@ -907,6 +907,9 @@ static int proc_watchdog_common(int which, struct ctl_table *table, int write,
7495 * both lockup detectors are disabled if proc_watchdog_update()
7496 * returns an error.
7497 */
7498 + if (old == new)
7499 + goto out;
7500 +
7501 err = proc_watchdog_update();
7502 }
7503 out:
7504 @@ -951,7 +954,7 @@ int proc_soft_watchdog(struct ctl_table *table, int write,
7505 int proc_watchdog_thresh(struct ctl_table *table, int write,
7506 void __user *buffer, size_t *lenp, loff_t *ppos)
7507 {
7508 - int err, old;
7509 + int err, old, new;
7510
7511 get_online_cpus();
7512 mutex_lock(&watchdog_proc_mutex);
7513 @@ -971,6 +974,10 @@ int proc_watchdog_thresh(struct ctl_table *table, int write,
7514 /*
7515 * Update the sample period. Restore on failure.
7516 */
7517 + new = ACCESS_ONCE(watchdog_thresh);
7518 + if (old == new)
7519 + goto out;
7520 +
7521 set_sample_period();
7522 err = proc_watchdog_update();
7523 if (err) {
7524 diff --git a/mm/memcontrol.c b/mm/memcontrol.c
7525 index ee6acd279953..fc0bcc41d57f 100644
7526 --- a/mm/memcontrol.c
7527 +++ b/mm/memcontrol.c
7528 @@ -1332,7 +1332,7 @@ static unsigned long mem_cgroup_get_limit(struct mem_cgroup *memcg)
7529 return limit;
7530 }
7531
7532 -static void mem_cgroup_out_of_memory(struct mem_cgroup *memcg, gfp_t gfp_mask,
7533 +static bool mem_cgroup_out_of_memory(struct mem_cgroup *memcg, gfp_t gfp_mask,
7534 int order)
7535 {
7536 struct oom_control oc = {
7537 @@ -1410,6 +1410,7 @@ static void mem_cgroup_out_of_memory(struct mem_cgroup *memcg, gfp_t gfp_mask,
7538 }
7539 unlock:
7540 mutex_unlock(&oom_lock);
7541 + return chosen;
7542 }
7543
7544 #if MAX_NUMNODES > 1
7545 @@ -5121,6 +5122,7 @@ static ssize_t memory_high_write(struct kernfs_open_file *of,
7546 char *buf, size_t nbytes, loff_t off)
7547 {
7548 struct mem_cgroup *memcg = mem_cgroup_from_css(of_css(of));
7549 + unsigned long nr_pages;
7550 unsigned long high;
7551 int err;
7552
7553 @@ -5131,6 +5133,11 @@ static ssize_t memory_high_write(struct kernfs_open_file *of,
7554
7555 memcg->high = high;
7556
7557 + nr_pages = page_counter_read(&memcg->memory);
7558 + if (nr_pages > high)
7559 + try_to_free_mem_cgroup_pages(memcg, nr_pages - high,
7560 + GFP_KERNEL, true);
7561 +
7562 memcg_wb_domain_size_changed(memcg);
7563 return nbytes;
7564 }
7565 @@ -5152,6 +5159,8 @@ static ssize_t memory_max_write(struct kernfs_open_file *of,
7566 char *buf, size_t nbytes, loff_t off)
7567 {
7568 struct mem_cgroup *memcg = mem_cgroup_from_css(of_css(of));
7569 + unsigned int nr_reclaims = MEM_CGROUP_RECLAIM_RETRIES;
7570 + bool drained = false;
7571 unsigned long max;
7572 int err;
7573
7574 @@ -5160,9 +5169,36 @@ static ssize_t memory_max_write(struct kernfs_open_file *of,
7575 if (err)
7576 return err;
7577
7578 - err = mem_cgroup_resize_limit(memcg, max);
7579 - if (err)
7580 - return err;
7581 + xchg(&memcg->memory.limit, max);
7582 +
7583 + for (;;) {
7584 + unsigned long nr_pages = page_counter_read(&memcg->memory);
7585 +
7586 + if (nr_pages <= max)
7587 + break;
7588 +
7589 + if (signal_pending(current)) {
7590 + err = -EINTR;
7591 + break;
7592 + }
7593 +
7594 + if (!drained) {
7595 + drain_all_stock(memcg);
7596 + drained = true;
7597 + continue;
7598 + }
7599 +
7600 + if (nr_reclaims) {
7601 + if (!try_to_free_mem_cgroup_pages(memcg, nr_pages - max,
7602 + GFP_KERNEL, true))
7603 + nr_reclaims--;
7604 + continue;
7605 + }
7606 +
7607 + mem_cgroup_events(memcg, MEMCG_OOM, 1);
7608 + if (!mem_cgroup_out_of_memory(memcg, GFP_KERNEL, 0))
7609 + break;
7610 + }
7611
7612 memcg_wb_domain_size_changed(memcg);
7613 return nbytes;
7614 diff --git a/mm/page_alloc.c b/mm/page_alloc.c
7615 index 9d666df5ef95..c69531afbd8f 100644
7616 --- a/mm/page_alloc.c
7617 +++ b/mm/page_alloc.c
7618 @@ -662,34 +662,28 @@ static inline void __free_one_page(struct page *page,
7619 unsigned long combined_idx;
7620 unsigned long uninitialized_var(buddy_idx);
7621 struct page *buddy;
7622 - unsigned int max_order = MAX_ORDER;
7623 + unsigned int max_order;
7624 +
7625 + max_order = min_t(unsigned int, MAX_ORDER, pageblock_order + 1);
7626
7627 VM_BUG_ON(!zone_is_initialized(zone));
7628 VM_BUG_ON_PAGE(page->flags & PAGE_FLAGS_CHECK_AT_PREP, page);
7629
7630 VM_BUG_ON(migratetype == -1);
7631 - if (is_migrate_isolate(migratetype)) {
7632 - /*
7633 - * We restrict max order of merging to prevent merge
7634 - * between freepages on isolate pageblock and normal
7635 - * pageblock. Without this, pageblock isolation
7636 - * could cause incorrect freepage accounting.
7637 - */
7638 - max_order = min_t(unsigned int, MAX_ORDER, pageblock_order + 1);
7639 - } else {
7640 + if (likely(!is_migrate_isolate(migratetype)))
7641 __mod_zone_freepage_state(zone, 1 << order, migratetype);
7642 - }
7643
7644 - page_idx = pfn & ((1 << max_order) - 1);
7645 + page_idx = pfn & ((1 << MAX_ORDER) - 1);
7646
7647 VM_BUG_ON_PAGE(page_idx & ((1 << order) - 1), page);
7648 VM_BUG_ON_PAGE(bad_range(zone, page), page);
7649
7650 +continue_merging:
7651 while (order < max_order - 1) {
7652 buddy_idx = __find_buddy_index(page_idx, order);
7653 buddy = page + (buddy_idx - page_idx);
7654 if (!page_is_buddy(page, buddy, order))
7655 - break;
7656 + goto done_merging;
7657 /*
7658 * Our buddy is free or it is CONFIG_DEBUG_PAGEALLOC guard page,
7659 * merge with it and move up one order.
7660 @@ -706,6 +700,32 @@ static inline void __free_one_page(struct page *page,
7661 page_idx = combined_idx;
7662 order++;
7663 }
7664 + if (max_order < MAX_ORDER) {
7665 + /* If we are here, it means order is >= pageblock_order.
7666 + * We want to prevent merge between freepages on isolate
7667 + * pageblock and normal pageblock. Without this, pageblock
7668 + * isolation could cause incorrect freepage or CMA accounting.
7669 + *
7670 + * We don't want to hit this code for the more frequent
7671 + * low-order merging.
7672 + */
7673 + if (unlikely(has_isolate_pageblock(zone))) {
7674 + int buddy_mt;
7675 +
7676 + buddy_idx = __find_buddy_index(page_idx, order);
7677 + buddy = page + (buddy_idx - page_idx);
7678 + buddy_mt = get_pageblock_migratetype(buddy);
7679 +
7680 + if (migratetype != buddy_mt
7681 + && (is_migrate_isolate(migratetype) ||
7682 + is_migrate_isolate(buddy_mt)))
7683 + goto done_merging;
7684 + }
7685 + max_order++;
7686 + goto continue_merging;
7687 + }
7688 +
7689 +done_merging:
7690 set_page_order(page, order);
7691
7692 /*
7693 diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c
7694 index 7f22119276f3..b1b0a1c0bd8d 100644
7695 --- a/net/bluetooth/mgmt.c
7696 +++ b/net/bluetooth/mgmt.c
7697 @@ -7155,6 +7155,10 @@ static int add_advertising(struct sock *sk, struct hci_dev *hdev,
7698 return mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_ADVERTISING,
7699 status);
7700
7701 + if (data_len != sizeof(*cp) + cp->adv_data_len + cp->scan_rsp_len)
7702 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_ADVERTISING,
7703 + MGMT_STATUS_INVALID_PARAMS);
7704 +
7705 flags = __le32_to_cpu(cp->flags);
7706 timeout = __le16_to_cpu(cp->timeout);
7707 duration = __le16_to_cpu(cp->duration);
7708 diff --git a/scripts/coccinelle/iterators/use_after_iter.cocci b/scripts/coccinelle/iterators/use_after_iter.cocci
7709 index f085f5968c52..ce8cc9c006e5 100644
7710 --- a/scripts/coccinelle/iterators/use_after_iter.cocci
7711 +++ b/scripts/coccinelle/iterators/use_after_iter.cocci
7712 @@ -123,7 +123,7 @@ list_remove_head(x,c,...)
7713 |
7714 sizeof(<+...c...+>)
7715 |
7716 -&c->member
7717 + &c->member
7718 |
7719 c = E
7720 |
7721 diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile
7722 index d79cba4ce3eb..ebced77deb9c 100644
7723 --- a/scripts/kconfig/Makefile
7724 +++ b/scripts/kconfig/Makefile
7725 @@ -96,13 +96,15 @@ savedefconfig: $(obj)/conf
7726 defconfig: $(obj)/conf
7727 ifeq ($(KBUILD_DEFCONFIG),)
7728 $< $(silent) --defconfig $(Kconfig)
7729 -else ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG)),)
7730 +else
7731 +ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG)),)
7732 @$(kecho) "*** Default configuration is based on '$(KBUILD_DEFCONFIG)'"
7733 $(Q)$< $(silent) --defconfig=arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG) $(Kconfig)
7734 else
7735 @$(kecho) "*** Default configuration is based on target '$(KBUILD_DEFCONFIG)'"
7736 $(Q)$(MAKE) -f $(srctree)/Makefile $(KBUILD_DEFCONFIG)
7737 endif
7738 +endif
7739
7740 %_defconfig: $(obj)/conf
7741 $(Q)$< $(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
7742 diff --git a/scripts/package/mkspec b/scripts/package/mkspec
7743 index 71004daefe31..fe44d68e9344 100755
7744 --- a/scripts/package/mkspec
7745 +++ b/scripts/package/mkspec
7746 @@ -131,11 +131,11 @@ echo 'rm -rf $RPM_BUILD_ROOT'
7747 echo ""
7748 echo "%post"
7749 echo "if [ -x /sbin/installkernel -a -r /boot/vmlinuz-$KERNELRELEASE -a -r /boot/System.map-$KERNELRELEASE ]; then"
7750 -echo "cp /boot/vmlinuz-$KERNELRELEASE /boot/vmlinuz-$KERNELRELEASE-rpm"
7751 -echo "cp /boot/System.map-$KERNELRELEASE /boot/System.map-$KERNELRELEASE-rpm"
7752 +echo "cp /boot/vmlinuz-$KERNELRELEASE /boot/.vmlinuz-$KERNELRELEASE-rpm"
7753 +echo "cp /boot/System.map-$KERNELRELEASE /boot/.System.map-$KERNELRELEASE-rpm"
7754 echo "rm -f /boot/vmlinuz-$KERNELRELEASE /boot/System.map-$KERNELRELEASE"
7755 -echo "/sbin/installkernel $KERNELRELEASE /boot/vmlinuz-$KERNELRELEASE-rpm /boot/System.map-$KERNELRELEASE-rpm"
7756 -echo "rm -f /boot/vmlinuz-$KERNELRELEASE-rpm /boot/System.map-$KERNELRELEASE-rpm"
7757 +echo "/sbin/installkernel $KERNELRELEASE /boot/.vmlinuz-$KERNELRELEASE-rpm /boot/.System.map-$KERNELRELEASE-rpm"
7758 +echo "rm -f /boot/.vmlinuz-$KERNELRELEASE-rpm /boot/.System.map-$KERNELRELEASE-rpm"
7759 echo "fi"
7760 echo ""
7761 echo "%files"
7762 diff --git a/sound/core/pcm_lib.c b/sound/core/pcm_lib.c
7763 index 6b5a811e01a5..3a9b66c6e09c 100644
7764 --- a/sound/core/pcm_lib.c
7765 +++ b/sound/core/pcm_lib.c
7766 @@ -322,7 +322,7 @@ static int snd_pcm_update_hw_ptr0(struct snd_pcm_substream *substream,
7767 char name[16];
7768 snd_pcm_debug_name(substream, name, sizeof(name));
7769 pcm_err(substream->pcm,
7770 - "BUG: %s, pos = %ld, buffer size = %ld, period size = %ld\n",
7771 + "invalid position: %s, pos = %ld, buffer size = %ld, period size = %ld\n",
7772 name, pos, runtime->buffer_size,
7773 runtime->period_size);
7774 }
7775 diff --git a/sound/pci/hda/patch_cirrus.c b/sound/pci/hda/patch_cirrus.c
7776 index c1c855a6c0af..a47e8ae0eb30 100644
7777 --- a/sound/pci/hda/patch_cirrus.c
7778 +++ b/sound/pci/hda/patch_cirrus.c
7779 @@ -174,8 +174,12 @@ static void cs_automute(struct hda_codec *codec)
7780 snd_hda_gen_update_outputs(codec);
7781
7782 if (spec->gpio_eapd_hp || spec->gpio_eapd_speaker) {
7783 - spec->gpio_data = spec->gen.hp_jack_present ?
7784 - spec->gpio_eapd_hp : spec->gpio_eapd_speaker;
7785 + if (spec->gen.automute_speaker)
7786 + spec->gpio_data = spec->gen.hp_jack_present ?
7787 + spec->gpio_eapd_hp : spec->gpio_eapd_speaker;
7788 + else
7789 + spec->gpio_data =
7790 + spec->gpio_eapd_hp | spec->gpio_eapd_speaker;
7791 snd_hda_codec_write(codec, 0x01, 0,
7792 AC_VERB_SET_GPIO_DATA, spec->gpio_data);
7793 }
7794 diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c
7795 index ef198903c0c3..600af5878e75 100644
7796 --- a/sound/pci/hda/patch_conexant.c
7797 +++ b/sound/pci/hda/patch_conexant.c
7798 @@ -204,8 +204,13 @@ static void cx_auto_reboot_notify(struct hda_codec *codec)
7799 {
7800 struct conexant_spec *spec = codec->spec;
7801
7802 - if (codec->core.vendor_id != 0x14f150f2)
7803 + switch (codec->core.vendor_id) {
7804 + case 0x14f150f2: /* CX20722 */
7805 + case 0x14f150f4: /* CX20724 */
7806 + break;
7807 + default:
7808 return;
7809 + }
7810
7811 /* Turn the CX20722 codec into D3 to avoid spurious noises
7812 from the internal speaker during (and after) reboot */
7813 diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
7814 index 70c945603379..f7bcd8dbac14 100644
7815 --- a/sound/pci/hda/patch_hdmi.c
7816 +++ b/sound/pci/hda/patch_hdmi.c
7817 @@ -2353,6 +2353,10 @@ static void intel_pin_eld_notify(void *audio_ptr, int port)
7818 struct hda_codec *codec = audio_ptr;
7819 int pin_nid = port + 0x04;
7820
7821 + /* we assume only from port-B to port-D */
7822 + if (port < 1 || port > 3)
7823 + return;
7824 +
7825 /* skip notification during system suspend (but not in runtime PM);
7826 * the state will be updated at resume
7827 */
7828 diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
7829 index c2430b36e1ce..6968b796baa3 100644
7830 --- a/sound/pci/hda/patch_realtek.c
7831 +++ b/sound/pci/hda/patch_realtek.c
7832 @@ -5529,6 +5529,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
7833 SND_PCI_QUIRK(0x17aa, 0x2226, "ThinkPad X250", ALC292_FIXUP_TPT440_DOCK),
7834 SND_PCI_QUIRK(0x17aa, 0x2233, "Thinkpad", ALC293_FIXUP_LENOVO_SPK_NOISE),
7835 SND_PCI_QUIRK(0x17aa, 0x30bb, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY),
7836 + SND_PCI_QUIRK(0x17aa, 0x30e2, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY),
7837 SND_PCI_QUIRK(0x17aa, 0x3902, "Lenovo E50-80", ALC269_FIXUP_DMIC_THINKPAD_ACPI),
7838 SND_PCI_QUIRK(0x17aa, 0x3977, "IdeaPad S210", ALC283_FIXUP_INT_MIC),
7839 SND_PCI_QUIRK(0x17aa, 0x3978, "IdeaPad Y410P", ALC269_FIXUP_NO_SHUTUP),
7840 diff --git a/sound/pci/intel8x0.c b/sound/pci/intel8x0.c
7841 index 42bcbac801a3..ccdab29a8b66 100644
7842 --- a/sound/pci/intel8x0.c
7843 +++ b/sound/pci/intel8x0.c
7844 @@ -2879,6 +2879,7 @@ static void intel8x0_measure_ac97_clock(struct intel8x0 *chip)
7845
7846 static struct snd_pci_quirk intel8x0_clock_list[] = {
7847 SND_PCI_QUIRK(0x0e11, 0x008a, "AD1885", 41000),
7848 + SND_PCI_QUIRK(0x1014, 0x0581, "AD1981B", 48000),
7849 SND_PCI_QUIRK(0x1028, 0x00be, "AD1885", 44100),
7850 SND_PCI_QUIRK(0x1028, 0x0177, "AD1980", 48000),
7851 SND_PCI_QUIRK(0x1028, 0x01ad, "AD1981B", 48000),
7852 diff --git a/sound/soc/samsung/ac97.c b/sound/soc/samsung/ac97.c
7853 index e4145509d63c..9c5219392460 100644
7854 --- a/sound/soc/samsung/ac97.c
7855 +++ b/sound/soc/samsung/ac97.c
7856 @@ -324,7 +324,7 @@ static const struct snd_soc_component_driver s3c_ac97_component = {
7857
7858 static int s3c_ac97_probe(struct platform_device *pdev)
7859 {
7860 - struct resource *mem_res, *dmatx_res, *dmarx_res, *dmamic_res, *irq_res;
7861 + struct resource *mem_res, *irq_res;
7862 struct s3c_audio_pdata *ac97_pdata;
7863 int ret;
7864
7865 @@ -335,24 +335,6 @@ static int s3c_ac97_probe(struct platform_device *pdev)
7866 }
7867
7868 /* Check for availability of necessary resource */
7869 - dmatx_res = platform_get_resource(pdev, IORESOURCE_DMA, 0);
7870 - if (!dmatx_res) {
7871 - dev_err(&pdev->dev, "Unable to get AC97-TX dma resource\n");
7872 - return -ENXIO;
7873 - }
7874 -
7875 - dmarx_res = platform_get_resource(pdev, IORESOURCE_DMA, 1);
7876 - if (!dmarx_res) {
7877 - dev_err(&pdev->dev, "Unable to get AC97-RX dma resource\n");
7878 - return -ENXIO;
7879 - }
7880 -
7881 - dmamic_res = platform_get_resource(pdev, IORESOURCE_DMA, 2);
7882 - if (!dmamic_res) {
7883 - dev_err(&pdev->dev, "Unable to get AC97-MIC dma resource\n");
7884 - return -ENXIO;
7885 - }
7886 -
7887 irq_res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
7888 if (!irq_res) {
7889 dev_err(&pdev->dev, "AC97 IRQ not provided!\n");
7890 @@ -364,11 +346,11 @@ static int s3c_ac97_probe(struct platform_device *pdev)
7891 if (IS_ERR(s3c_ac97.regs))
7892 return PTR_ERR(s3c_ac97.regs);
7893
7894 - s3c_ac97_pcm_out.channel = dmatx_res->start;
7895 + s3c_ac97_pcm_out.slave = ac97_pdata->dma_playback;
7896 s3c_ac97_pcm_out.dma_addr = mem_res->start + S3C_AC97_PCM_DATA;
7897 - s3c_ac97_pcm_in.channel = dmarx_res->start;
7898 + s3c_ac97_pcm_in.slave = ac97_pdata->dma_capture;
7899 s3c_ac97_pcm_in.dma_addr = mem_res->start + S3C_AC97_PCM_DATA;
7900 - s3c_ac97_mic_in.channel = dmamic_res->start;
7901 + s3c_ac97_mic_in.slave = ac97_pdata->dma_capture_mic;
7902 s3c_ac97_mic_in.dma_addr = mem_res->start + S3C_AC97_MIC_DATA;
7903
7904 init_completion(&s3c_ac97.done);
7905 diff --git a/sound/soc/samsung/dma.h b/sound/soc/samsung/dma.h
7906 index 0e85dcfec023..085ef30f5ca2 100644
7907 --- a/sound/soc/samsung/dma.h
7908 +++ b/sound/soc/samsung/dma.h
7909 @@ -15,7 +15,7 @@
7910 #include <sound/dmaengine_pcm.h>
7911
7912 struct s3c_dma_params {
7913 - int channel; /* Channel ID */
7914 + void *slave; /* Channel ID */
7915 dma_addr_t dma_addr;
7916 int dma_size; /* Size of the DMA transfer */
7917 char *ch_name;
7918 diff --git a/sound/soc/samsung/dmaengine.c b/sound/soc/samsung/dmaengine.c
7919 index 506f5bf6d082..727008d57d14 100644
7920 --- a/sound/soc/samsung/dmaengine.c
7921 +++ b/sound/soc/samsung/dmaengine.c
7922 @@ -50,14 +50,14 @@ void samsung_asoc_init_dma_data(struct snd_soc_dai *dai,
7923
7924 if (playback) {
7925 playback_data = &playback->dma_data;
7926 - playback_data->filter_data = (void *)playback->channel;
7927 + playback_data->filter_data = playback->slave;
7928 playback_data->chan_name = playback->ch_name;
7929 playback_data->addr = playback->dma_addr;
7930 playback_data->addr_width = playback->dma_size;
7931 }
7932 if (capture) {
7933 capture_data = &capture->dma_data;
7934 - capture_data->filter_data = (void *)capture->channel;
7935 + capture_data->filter_data = capture->slave;
7936 capture_data->chan_name = capture->ch_name;
7937 capture_data->addr = capture->dma_addr;
7938 capture_data->addr_width = capture->dma_size;
7939 diff --git a/sound/soc/samsung/i2s.c b/sound/soc/samsung/i2s.c
7940 index 7dbf899b2af2..e163b0148c4b 100644
7941 --- a/sound/soc/samsung/i2s.c
7942 +++ b/sound/soc/samsung/i2s.c
7943 @@ -1260,27 +1260,14 @@ static int samsung_i2s_probe(struct platform_device *pdev)
7944 pri_dai->lock = &pri_dai->spinlock;
7945
7946 if (!np) {
7947 - res = platform_get_resource(pdev, IORESOURCE_DMA, 0);
7948 - if (!res) {
7949 - dev_err(&pdev->dev,
7950 - "Unable to get I2S-TX dma resource\n");
7951 - return -ENXIO;
7952 - }
7953 - pri_dai->dma_playback.channel = res->start;
7954 -
7955 - res = platform_get_resource(pdev, IORESOURCE_DMA, 1);
7956 - if (!res) {
7957 - dev_err(&pdev->dev,
7958 - "Unable to get I2S-RX dma resource\n");
7959 - return -ENXIO;
7960 - }
7961 - pri_dai->dma_capture.channel = res->start;
7962 -
7963 if (i2s_pdata == NULL) {
7964 dev_err(&pdev->dev, "Can't work without s3c_audio_pdata\n");
7965 return -EINVAL;
7966 }
7967
7968 + pri_dai->dma_playback.slave = i2s_pdata->dma_playback;
7969 + pri_dai->dma_capture.slave = i2s_pdata->dma_capture;
7970 +
7971 if (&i2s_pdata->type)
7972 i2s_cfg = &i2s_pdata->type.i2s;
7973
7974 @@ -1341,11 +1328,8 @@ static int samsung_i2s_probe(struct platform_device *pdev)
7975 sec_dai->dma_playback.dma_addr = regs_base + I2STXDS;
7976 sec_dai->dma_playback.ch_name = "tx-sec";
7977
7978 - if (!np) {
7979 - res = platform_get_resource(pdev, IORESOURCE_DMA, 2);
7980 - if (res)
7981 - sec_dai->dma_playback.channel = res->start;
7982 - }
7983 + if (!np)
7984 + sec_dai->dma_playback.slave = i2s_pdata->dma_play_sec;
7985
7986 sec_dai->dma_playback.dma_size = 4;
7987 sec_dai->addr = pri_dai->addr;
7988 diff --git a/sound/soc/samsung/pcm.c b/sound/soc/samsung/pcm.c
7989 index b320a9d3fbf8..c77f324e0bb8 100644
7990 --- a/sound/soc/samsung/pcm.c
7991 +++ b/sound/soc/samsung/pcm.c
7992 @@ -486,7 +486,7 @@ static const struct snd_soc_component_driver s3c_pcm_component = {
7993 static int s3c_pcm_dev_probe(struct platform_device *pdev)
7994 {
7995 struct s3c_pcm_info *pcm;
7996 - struct resource *mem_res, *dmatx_res, *dmarx_res;
7997 + struct resource *mem_res;
7998 struct s3c_audio_pdata *pcm_pdata;
7999 int ret;
8000
8001 @@ -499,18 +499,6 @@ static int s3c_pcm_dev_probe(struct platform_device *pdev)
8002 pcm_pdata = pdev->dev.platform_data;
8003
8004 /* Check for availability of necessary resource */
8005 - dmatx_res = platform_get_resource(pdev, IORESOURCE_DMA, 0);
8006 - if (!dmatx_res) {
8007 - dev_err(&pdev->dev, "Unable to get PCM-TX dma resource\n");
8008 - return -ENXIO;
8009 - }
8010 -
8011 - dmarx_res = platform_get_resource(pdev, IORESOURCE_DMA, 1);
8012 - if (!dmarx_res) {
8013 - dev_err(&pdev->dev, "Unable to get PCM-RX dma resource\n");
8014 - return -ENXIO;
8015 - }
8016 -
8017 mem_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
8018 if (!mem_res) {
8019 dev_err(&pdev->dev, "Unable to get register resource\n");
8020 @@ -568,8 +556,10 @@ static int s3c_pcm_dev_probe(struct platform_device *pdev)
8021 s3c_pcm_stereo_out[pdev->id].dma_addr = mem_res->start
8022 + S3C_PCM_TXFIFO;
8023
8024 - s3c_pcm_stereo_in[pdev->id].channel = dmarx_res->start;
8025 - s3c_pcm_stereo_out[pdev->id].channel = dmatx_res->start;
8026 + if (pcm_pdata) {
8027 + s3c_pcm_stereo_in[pdev->id].slave = pcm_pdata->dma_capture;
8028 + s3c_pcm_stereo_out[pdev->id].slave = pcm_pdata->dma_playback;
8029 + }
8030
8031 pcm->dma_capture = &s3c_pcm_stereo_in[pdev->id];
8032 pcm->dma_playback = &s3c_pcm_stereo_out[pdev->id];
8033 diff --git a/sound/soc/samsung/s3c2412-i2s.c b/sound/soc/samsung/s3c2412-i2s.c
8034 index 2b766d212ce0..77d27c85a32a 100644
8035 --- a/sound/soc/samsung/s3c2412-i2s.c
8036 +++ b/sound/soc/samsung/s3c2412-i2s.c
8037 @@ -34,13 +34,13 @@
8038 #include "s3c2412-i2s.h"
8039
8040 static struct s3c_dma_params s3c2412_i2s_pcm_stereo_out = {
8041 - .channel = DMACH_I2S_OUT,
8042 + .slave = (void *)(uintptr_t)DMACH_I2S_OUT,
8043 .ch_name = "tx",
8044 .dma_size = 4,
8045 };
8046
8047 static struct s3c_dma_params s3c2412_i2s_pcm_stereo_in = {
8048 - .channel = DMACH_I2S_IN,
8049 + .slave = (void *)(uintptr_t)DMACH_I2S_IN,
8050 .ch_name = "rx",
8051 .dma_size = 4,
8052 };
8053 diff --git a/sound/soc/samsung/s3c24xx-i2s.c b/sound/soc/samsung/s3c24xx-i2s.c
8054 index 5bf723689692..9da3a77ea2c7 100644
8055 --- a/sound/soc/samsung/s3c24xx-i2s.c
8056 +++ b/sound/soc/samsung/s3c24xx-i2s.c
8057 @@ -32,13 +32,13 @@
8058 #include "s3c24xx-i2s.h"
8059
8060 static struct s3c_dma_params s3c24xx_i2s_pcm_stereo_out = {
8061 - .channel = DMACH_I2S_OUT,
8062 + .slave = (void *)(uintptr_t)DMACH_I2S_OUT,
8063 .ch_name = "tx",
8064 .dma_size = 2,
8065 };
8066
8067 static struct s3c_dma_params s3c24xx_i2s_pcm_stereo_in = {
8068 - .channel = DMACH_I2S_IN,
8069 + .slave = (void *)(uintptr_t)DMACH_I2S_IN,
8070 .ch_name = "rx",
8071 .dma_size = 2,
8072 };
8073 diff --git a/sound/soc/samsung/spdif.c b/sound/soc/samsung/spdif.c
8074 index 36dbc0e96004..9dd7ee6d03ff 100644
8075 --- a/sound/soc/samsung/spdif.c
8076 +++ b/sound/soc/samsung/spdif.c
8077 @@ -359,7 +359,7 @@ static const struct snd_soc_component_driver samsung_spdif_component = {
8078 static int spdif_probe(struct platform_device *pdev)
8079 {
8080 struct s3c_audio_pdata *spdif_pdata;
8081 - struct resource *mem_res, *dma_res;
8082 + struct resource *mem_res;
8083 struct samsung_spdif_info *spdif;
8084 int ret;
8085
8086 @@ -367,12 +367,6 @@ static int spdif_probe(struct platform_device *pdev)
8087
8088 dev_dbg(&pdev->dev, "Entered %s\n", __func__);
8089
8090 - dma_res = platform_get_resource(pdev, IORESOURCE_DMA, 0);
8091 - if (!dma_res) {
8092 - dev_err(&pdev->dev, "Unable to get dma resource.\n");
8093 - return -ENXIO;
8094 - }
8095 -
8096 mem_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
8097 if (!mem_res) {
8098 dev_err(&pdev->dev, "Unable to get register resource.\n");
8099 @@ -432,7 +426,7 @@ static int spdif_probe(struct platform_device *pdev)
8100
8101 spdif_stereo_out.dma_size = 2;
8102 spdif_stereo_out.dma_addr = mem_res->start + DATA_OUTBUF;
8103 - spdif_stereo_out.channel = dma_res->start;
8104 + spdif_stereo_out.slave = spdif_pdata ? spdif_pdata->dma_playback : NULL;
8105
8106 spdif->dma_playback = &spdif_stereo_out;
8107
8108 diff --git a/sound/usb/clock.c b/sound/usb/clock.c
8109 index 2ed260b10f6d..7ccbcaf6a147 100644
8110 --- a/sound/usb/clock.c
8111 +++ b/sound/usb/clock.c
8112 @@ -285,6 +285,8 @@ static int set_sample_rate_v1(struct snd_usb_audio *chip, int iface,
8113 unsigned char data[3];
8114 int err, crate;
8115
8116 + if (get_iface_desc(alts)->bNumEndpoints < 1)
8117 + return -EINVAL;
8118 ep = get_endpoint(alts, 0)->bEndpointAddress;
8119
8120 /* if endpoint doesn't have sampling rate control, bail out */
8121 diff --git a/sound/usb/endpoint.c b/sound/usb/endpoint.c
8122 index 7b1cb365ffab..c07a7eda42a2 100644
8123 --- a/sound/usb/endpoint.c
8124 +++ b/sound/usb/endpoint.c
8125 @@ -438,6 +438,9 @@ exit_clear:
8126 *
8127 * New endpoints will be added to chip->ep_list and must be freed by
8128 * calling snd_usb_endpoint_free().
8129 + *
8130 + * For SND_USB_ENDPOINT_TYPE_SYNC, the caller needs to guarantee that
8131 + * bNumEndpoints > 1 beforehand.
8132 */
8133 struct snd_usb_endpoint *snd_usb_add_endpoint(struct snd_usb_audio *chip,
8134 struct usb_host_interface *alts,
8135 diff --git a/sound/usb/mixer_quirks.c b/sound/usb/mixer_quirks.c
8136 index 279025650568..f6c3bf79af9a 100644
8137 --- a/sound/usb/mixer_quirks.c
8138 +++ b/sound/usb/mixer_quirks.c
8139 @@ -1519,7 +1519,11 @@ static int snd_microii_spdif_default_get(struct snd_kcontrol *kcontrol,
8140
8141 /* use known values for that card: interface#1 altsetting#1 */
8142 iface = usb_ifnum_to_if(chip->dev, 1);
8143 + if (!iface || iface->num_altsetting < 2)
8144 + return -EINVAL;
8145 alts = &iface->altsetting[1];
8146 + if (get_iface_desc(alts)->bNumEndpoints < 1)
8147 + return -EINVAL;
8148 ep = get_endpoint(alts, 0)->bEndpointAddress;
8149
8150 err = snd_usb_ctl_msg(chip->dev,
8151 diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c
8152 index 9245f52d43bd..44d178ee9177 100644
8153 --- a/sound/usb/pcm.c
8154 +++ b/sound/usb/pcm.c
8155 @@ -159,6 +159,8 @@ static int init_pitch_v1(struct snd_usb_audio *chip, int iface,
8156 unsigned char data[1];
8157 int err;
8158
8159 + if (get_iface_desc(alts)->bNumEndpoints < 1)
8160 + return -EINVAL;
8161 ep = get_endpoint(alts, 0)->bEndpointAddress;
8162
8163 data[0] = 1;
8164 diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
8165 index c458d60d5030..cd7eac28edee 100644
8166 --- a/sound/usb/quirks.c
8167 +++ b/sound/usb/quirks.c
8168 @@ -150,6 +150,7 @@ static int create_fixed_stream_quirk(struct snd_usb_audio *chip,
8169 usb_audio_err(chip, "cannot memdup\n");
8170 return -ENOMEM;
8171 }
8172 + INIT_LIST_HEAD(&fp->list);
8173 if (fp->nr_rates > MAX_NR_RATES) {
8174 kfree(fp);
8175 return -EINVAL;
8176 @@ -167,19 +168,20 @@ static int create_fixed_stream_quirk(struct snd_usb_audio *chip,
8177 stream = (fp->endpoint & USB_DIR_IN)
8178 ? SNDRV_PCM_STREAM_CAPTURE : SNDRV_PCM_STREAM_PLAYBACK;
8179 err = snd_usb_add_audio_stream(chip, stream, fp);
8180 - if (err < 0) {
8181 - kfree(fp);
8182 - kfree(rate_table);
8183 - return err;
8184 - }
8185 + if (err < 0)
8186 + goto error;
8187 if (fp->iface != get_iface_desc(&iface->altsetting[0])->bInterfaceNumber ||
8188 fp->altset_idx >= iface->num_altsetting) {
8189 - kfree(fp);
8190 - kfree(rate_table);
8191 - return -EINVAL;
8192 + err = -EINVAL;
8193 + goto error;
8194 }
8195 alts = &iface->altsetting[fp->altset_idx];
8196 altsd = get_iface_desc(alts);
8197 + if (altsd->bNumEndpoints < 1) {
8198 + err = -EINVAL;
8199 + goto error;
8200 + }
8201 +
8202 fp->protocol = altsd->bInterfaceProtocol;
8203
8204 if (fp->datainterval == 0)
8205 @@ -190,6 +192,12 @@ static int create_fixed_stream_quirk(struct snd_usb_audio *chip,
8206 snd_usb_init_pitch(chip, fp->iface, alts, fp);
8207 snd_usb_init_sample_rate(chip, fp->iface, alts, fp, fp->rate_max);
8208 return 0;
8209 +
8210 + error:
8211 + list_del(&fp->list); /* unlink for avoiding double-free */
8212 + kfree(fp);
8213 + kfree(rate_table);
8214 + return err;
8215 }
8216
8217 static int create_auto_pcm_quirk(struct snd_usb_audio *chip,
8218 @@ -462,6 +470,7 @@ static int create_uaxx_quirk(struct snd_usb_audio *chip,
8219 fp->ep_attr = get_endpoint(alts, 0)->bmAttributes;
8220 fp->datainterval = 0;
8221 fp->maxpacksize = le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize);
8222 + INIT_LIST_HEAD(&fp->list);
8223
8224 switch (fp->maxpacksize) {
8225 case 0x120:
8226 @@ -485,6 +494,7 @@ static int create_uaxx_quirk(struct snd_usb_audio *chip,
8227 ? SNDRV_PCM_STREAM_CAPTURE : SNDRV_PCM_STREAM_PLAYBACK;
8228 err = snd_usb_add_audio_stream(chip, stream, fp);
8229 if (err < 0) {
8230 + list_del(&fp->list); /* unlink for avoiding double-free */
8231 kfree(fp);
8232 return err;
8233 }
8234 @@ -1121,6 +1131,7 @@ bool snd_usb_get_sample_rate_quirk(struct snd_usb_audio *chip)
8235 switch (chip->usb_id) {
8236 case USB_ID(0x045E, 0x075D): /* MS Lifecam Cinema */
8237 case USB_ID(0x045E, 0x076D): /* MS Lifecam HD-5000 */
8238 + case USB_ID(0x045E, 0x076E): /* MS Lifecam HD-5001 */
8239 case USB_ID(0x045E, 0x076F): /* MS Lifecam HD-6000 */
8240 case USB_ID(0x045E, 0x0772): /* MS Lifecam Studio */
8241 case USB_ID(0x045E, 0x0779): /* MS Lifecam HD-3000 */
8242 diff --git a/sound/usb/stream.c b/sound/usb/stream.c
8243 index 8ee14f2365e7..3b23102230c0 100644
8244 --- a/sound/usb/stream.c
8245 +++ b/sound/usb/stream.c
8246 @@ -316,7 +316,9 @@ static struct snd_pcm_chmap_elem *convert_chmap(int channels, unsigned int bits,
8247 /*
8248 * add this endpoint to the chip instance.
8249 * if a stream with the same endpoint already exists, append to it.
8250 - * if not, create a new pcm stream.
8251 + * if not, create a new pcm stream. note, fp is added to the substream
8252 + * fmt_list and will be freed on the chip instance release. do not free
8253 + * fp or do remove it from the substream fmt_list to avoid double-free.
8254 */
8255 int snd_usb_add_audio_stream(struct snd_usb_audio *chip,
8256 int stream,
8257 @@ -677,6 +679,7 @@ int snd_usb_parse_audio_interface(struct snd_usb_audio *chip, int iface_no)
8258 * (fp->maxpacksize & 0x7ff);
8259 fp->attributes = parse_uac_endpoint_attributes(chip, alts, protocol, iface_no);
8260 fp->clock = clock;
8261 + INIT_LIST_HEAD(&fp->list);
8262
8263 /* some quirks for attributes here */
8264
8265 @@ -725,6 +728,7 @@ int snd_usb_parse_audio_interface(struct snd_usb_audio *chip, int iface_no)
8266 dev_dbg(&dev->dev, "%u:%d: add audio endpoint %#x\n", iface_no, altno, fp->endpoint);
8267 err = snd_usb_add_audio_stream(chip, stream, fp);
8268 if (err < 0) {
8269 + list_del(&fp->list); /* unlink for avoiding double-free */
8270 kfree(fp->rate_table);
8271 kfree(fp->chmap);
8272 kfree(fp);
8273 diff --git a/tools/hv/Makefile b/tools/hv/Makefile
8274 index a8ab79556926..a8c4644022a6 100644
8275 --- a/tools/hv/Makefile
8276 +++ b/tools/hv/Makefile
8277 @@ -5,6 +5,8 @@ PTHREAD_LIBS = -lpthread
8278 WARNINGS = -Wall -Wextra
8279 CFLAGS = $(WARNINGS) -g $(PTHREAD_LIBS) $(shell getconf LFS_CFLAGS)
8280
8281 +CFLAGS += -D__EXPORTED_HEADERS__ -I../../include/uapi -I../../include
8282 +
8283 all: hv_kvp_daemon hv_vss_daemon hv_fcopy_daemon
8284 %: %.c
8285 $(CC) $(CFLAGS) -o $@ $^
8286 diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
8287 index b48e87693aa5..a35db828bd0d 100644
8288 --- a/tools/perf/util/parse-events.c
8289 +++ b/tools/perf/util/parse-events.c
8290 @@ -2101,11 +2101,11 @@ char *parse_events_formats_error_string(char *additional_terms)
8291
8292 /* valid terms */
8293 if (additional_terms) {
8294 - if (!asprintf(&str, "valid terms: %s,%s",
8295 - additional_terms, static_terms))
8296 + if (asprintf(&str, "valid terms: %s,%s",
8297 + additional_terms, static_terms) < 0)
8298 goto fail;
8299 } else {
8300 - if (!asprintf(&str, "valid terms: %s", static_terms))
8301 + if (asprintf(&str, "valid terms: %s", static_terms) < 0)
8302 goto fail;
8303 }
8304 return str;
8305 diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c
8306 index e4b173dec4b9..6f2a0279476c 100644
8307 --- a/tools/perf/util/pmu.c
8308 +++ b/tools/perf/util/pmu.c
8309 @@ -283,13 +283,12 @@ static int pmu_aliases_parse(char *dir, struct list_head *head)
8310 {
8311 struct dirent *evt_ent;
8312 DIR *event_dir;
8313 - int ret = 0;
8314
8315 event_dir = opendir(dir);
8316 if (!event_dir)
8317 return -EINVAL;
8318
8319 - while (!ret && (evt_ent = readdir(event_dir))) {
8320 + while ((evt_ent = readdir(event_dir))) {
8321 char path[PATH_MAX];
8322 char *name = evt_ent->d_name;
8323 FILE *file;
8324 @@ -305,17 +304,19 @@ static int pmu_aliases_parse(char *dir, struct list_head *head)
8325
8326 snprintf(path, PATH_MAX, "%s/%s", dir, name);
8327
8328 - ret = -EINVAL;
8329 file = fopen(path, "r");
8330 - if (!file)
8331 - break;
8332 + if (!file) {
8333 + pr_debug("Cannot open %s\n", path);
8334 + continue;
8335 + }
8336
8337 - ret = perf_pmu__new_alias(head, dir, name, file);
8338 + if (perf_pmu__new_alias(head, dir, name, file) < 0)
8339 + pr_debug("Cannot set up %s\n", name);
8340 fclose(file);
8341 }
8342
8343 closedir(event_dir);
8344 - return ret;
8345 + return 0;
8346 }
8347
8348 /*
8349 diff --git a/tools/perf/util/setup.py b/tools/perf/util/setup.py
8350 index 1833103768cb..c8680984d2d6 100644
8351 --- a/tools/perf/util/setup.py
8352 +++ b/tools/perf/util/setup.py
8353 @@ -22,6 +22,7 @@ cflags = getenv('CFLAGS', '').split()
8354 # switch off several checks (need to be at the end of cflags list)
8355 cflags += ['-fno-strict-aliasing', '-Wno-write-strings', '-Wno-unused-parameter' ]
8356
8357 +src_perf = getenv('srctree') + '/tools/perf'
8358 build_lib = getenv('PYTHON_EXTBUILD_LIB')
8359 build_tmp = getenv('PYTHON_EXTBUILD_TMP')
8360 libtraceevent = getenv('LIBTRACEEVENT')
8361 @@ -30,6 +31,9 @@ libapikfs = getenv('LIBAPI')
8362 ext_sources = [f.strip() for f in file('util/python-ext-sources')
8363 if len(f.strip()) > 0 and f[0] != '#']
8364
8365 +# use full paths with source files
8366 +ext_sources = map(lambda x: '%s/%s' % (src_perf, x) , ext_sources)
8367 +
8368 perf = Extension('perf',
8369 sources = ext_sources,
8370 include_dirs = ['util/include'],
8371 diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
8372 index 7338e30421d8..fefbf2d148ef 100644
8373 --- a/virt/kvm/kvm_main.c
8374 +++ b/virt/kvm/kvm_main.c
8375 @@ -547,6 +547,16 @@ static struct kvm *kvm_create_vm(unsigned long type)
8376 if (!kvm)
8377 return ERR_PTR(-ENOMEM);
8378
8379 + spin_lock_init(&kvm->mmu_lock);
8380 + atomic_inc(&current->mm->mm_count);
8381 + kvm->mm = current->mm;
8382 + kvm_eventfd_init(kvm);
8383 + mutex_init(&kvm->lock);
8384 + mutex_init(&kvm->irq_lock);
8385 + mutex_init(&kvm->slots_lock);
8386 + atomic_set(&kvm->users_count, 1);
8387 + INIT_LIST_HEAD(&kvm->devices);
8388 +
8389 r = kvm_arch_init_vm(kvm, type);
8390 if (r)
8391 goto out_err_no_disable;
8392 @@ -579,16 +589,6 @@ static struct kvm *kvm_create_vm(unsigned long type)
8393 goto out_err;
8394 }
8395
8396 - spin_lock_init(&kvm->mmu_lock);
8397 - kvm->mm = current->mm;
8398 - atomic_inc(&kvm->mm->mm_count);
8399 - kvm_eventfd_init(kvm);
8400 - mutex_init(&kvm->lock);
8401 - mutex_init(&kvm->irq_lock);
8402 - mutex_init(&kvm->slots_lock);
8403 - atomic_set(&kvm->users_count, 1);
8404 - INIT_LIST_HEAD(&kvm->devices);
8405 -
8406 r = kvm_init_mmu_notifier(kvm);
8407 if (r)
8408 goto out_err;
8409 @@ -613,6 +613,7 @@ out_err_no_disable:
8410 for (i = 0; i < KVM_ADDRESS_SPACE_NUM; i++)
8411 kvm_free_memslots(kvm, kvm->memslots[i]);
8412 kvm_arch_free_vm(kvm);
8413 + mmdrop(current->mm);
8414 return ERR_PTR(r);
8415 }
8416