Annotation of /trunk/kernel-alx-legacy/patches-4.9/0410-4.9.311-all-fixes.patch
Parent Directory | Revision Log
Revision 3712 -
(hide annotations)
(download)
Mon Oct 24 14:08:24 2022 UTC (18 months, 3 weeks ago) by niro
File size: 203363 byte(s)
Mon Oct 24 14:08:24 2022 UTC (18 months, 3 weeks ago) by niro
File size: 203363 byte(s)
-linux-4.9.311
1 | niro | 3712 | diff --git a/Makefile b/Makefile |
2 | index 72a8c786cb777..c1a20e4a2d136 100644 | ||
3 | --- a/Makefile | ||
4 | +++ b/Makefile | ||
5 | @@ -1,6 +1,6 @@ | ||
6 | VERSION = 4 | ||
7 | PATCHLEVEL = 9 | ||
8 | -SUBLEVEL = 310 | ||
9 | +SUBLEVEL = 311 | ||
10 | EXTRAVERSION = | ||
11 | NAME = Roaring Lionus | ||
12 | |||
13 | diff --git a/arch/arm/boot/dts/exynos5250-pinctrl.dtsi b/arch/arm/boot/dts/exynos5250-pinctrl.dtsi | ||
14 | index 2f6ab32b59548..7bb09532840fc 100644 | ||
15 | --- a/arch/arm/boot/dts/exynos5250-pinctrl.dtsi | ||
16 | +++ b/arch/arm/boot/dts/exynos5250-pinctrl.dtsi | ||
17 | @@ -257,7 +257,7 @@ | ||
18 | }; | ||
19 | |||
20 | uart3_data: uart3-data { | ||
21 | - samsung,pins = "gpa1-4", "gpa1-4"; | ||
22 | + samsung,pins = "gpa1-4", "gpa1-5"; | ||
23 | samsung,pin-function = <EXYNOS_PIN_FUNC_2>; | ||
24 | samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>; | ||
25 | samsung,pin-drv = <EXYNOS4_PIN_DRV_LV1>; | ||
26 | diff --git a/arch/arm/boot/dts/exynos5250-smdk5250.dts b/arch/arm/boot/dts/exynos5250-smdk5250.dts | ||
27 | index f0906d67a1070..54e79f6887ffa 100644 | ||
28 | --- a/arch/arm/boot/dts/exynos5250-smdk5250.dts | ||
29 | +++ b/arch/arm/boot/dts/exynos5250-smdk5250.dts | ||
30 | @@ -118,6 +118,9 @@ | ||
31 | |||
32 | &hdmi { | ||
33 | hpd-gpios = <&gpx3 7 GPIO_ACTIVE_HIGH>; | ||
34 | + vdd-supply = <&ldo8_reg>; | ||
35 | + vdd_osc-supply = <&ldo10_reg>; | ||
36 | + vdd_pll-supply = <&ldo8_reg>; | ||
37 | }; | ||
38 | |||
39 | &i2c_0 { | ||
40 | diff --git a/arch/arm/boot/dts/exynos5420-smdk5420.dts b/arch/arm/boot/dts/exynos5420-smdk5420.dts | ||
41 | index aaccd0da41e54..5ab719cf69ddd 100644 | ||
42 | --- a/arch/arm/boot/dts/exynos5420-smdk5420.dts | ||
43 | +++ b/arch/arm/boot/dts/exynos5420-smdk5420.dts | ||
44 | @@ -134,6 +134,9 @@ | ||
45 | hpd-gpios = <&gpx3 7 GPIO_ACTIVE_HIGH>; | ||
46 | pinctrl-names = "default"; | ||
47 | pinctrl-0 = <&hdmi_hpd_irq>; | ||
48 | + vdd-supply = <&ldo6_reg>; | ||
49 | + vdd_osc-supply = <&ldo7_reg>; | ||
50 | + vdd_pll-supply = <&ldo6_reg>; | ||
51 | }; | ||
52 | |||
53 | &hsi2c_4 { | ||
54 | diff --git a/arch/arm/boot/dts/qcom-ipq4019.dtsi b/arch/arm/boot/dts/qcom-ipq4019.dtsi | ||
55 | index 5ee84e3cb3e97..1fd63f485d3b6 100644 | ||
56 | --- a/arch/arm/boot/dts/qcom-ipq4019.dtsi | ||
57 | +++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi | ||
58 | @@ -93,7 +93,8 @@ | ||
59 | clocks { | ||
60 | sleep_clk: sleep_clk { | ||
61 | compatible = "fixed-clock"; | ||
62 | - clock-frequency = <32768>; | ||
63 | + clock-frequency = <32000>; | ||
64 | + clock-output-names = "gcc_sleep_clk_src"; | ||
65 | #clock-cells = <0>; | ||
66 | }; | ||
67 | }; | ||
68 | diff --git a/arch/arm/boot/dts/qcom-msm8960.dtsi b/arch/arm/boot/dts/qcom-msm8960.dtsi | ||
69 | index 288f56e0ccf55..819d0f085f8ca 100644 | ||
70 | --- a/arch/arm/boot/dts/qcom-msm8960.dtsi | ||
71 | +++ b/arch/arm/boot/dts/qcom-msm8960.dtsi | ||
72 | @@ -139,7 +139,9 @@ | ||
73 | reg = <0x108000 0x1000>; | ||
74 | qcom,ipc = <&l2cc 0x8 2>; | ||
75 | |||
76 | - interrupts = <0 19 0>, <0 21 0>, <0 22 0>; | ||
77 | + interrupts = <GIC_SPI 19 IRQ_TYPE_EDGE_RISING>, | ||
78 | + <GIC_SPI 21 IRQ_TYPE_EDGE_RISING>, | ||
79 | + <GIC_SPI 22 IRQ_TYPE_EDGE_RISING>; | ||
80 | interrupt-names = "ack", "err", "wakeup"; | ||
81 | |||
82 | regulators { | ||
83 | @@ -185,7 +187,7 @@ | ||
84 | compatible = "qcom,msm-uartdm-v1.3", "qcom,msm-uartdm"; | ||
85 | reg = <0x16440000 0x1000>, | ||
86 | <0x16400000 0x1000>; | ||
87 | - interrupts = <0 154 0x0>; | ||
88 | + interrupts = <GIC_SPI 154 IRQ_TYPE_LEVEL_HIGH>; | ||
89 | clocks = <&gcc GSBI5_UART_CLK>, <&gcc GSBI5_H_CLK>; | ||
90 | clock-names = "core", "iface"; | ||
91 | status = "disabled"; | ||
92 | @@ -311,7 +313,7 @@ | ||
93 | #address-cells = <1>; | ||
94 | #size-cells = <0>; | ||
95 | reg = <0x16080000 0x1000>; | ||
96 | - interrupts = <0 147 0>; | ||
97 | + interrupts = <GIC_SPI 147 IRQ_TYPE_LEVEL_HIGH>; | ||
98 | spi-max-frequency = <24000000>; | ||
99 | cs-gpios = <&msmgpio 8 0>; | ||
100 | |||
101 | diff --git a/arch/arm/boot/dts/spear1340.dtsi b/arch/arm/boot/dts/spear1340.dtsi | ||
102 | index 6361cbfcbe5e6..ece38b8c450dd 100644 | ||
103 | --- a/arch/arm/boot/dts/spear1340.dtsi | ||
104 | +++ b/arch/arm/boot/dts/spear1340.dtsi | ||
105 | @@ -141,9 +141,9 @@ | ||
106 | reg = <0xb4100000 0x1000>; | ||
107 | interrupts = <0 105 0x4>; | ||
108 | status = "disabled"; | ||
109 | - dmas = <&dwdma0 12 0 1>, | ||
110 | - <&dwdma0 13 1 0>; | ||
111 | - dma-names = "tx", "rx"; | ||
112 | + dmas = <&dwdma0 13 0 1>, | ||
113 | + <&dwdma0 12 1 0>; | ||
114 | + dma-names = "rx", "tx"; | ||
115 | }; | ||
116 | |||
117 | thermal@e07008c4 { | ||
118 | diff --git a/arch/arm/boot/dts/spear13xx.dtsi b/arch/arm/boot/dts/spear13xx.dtsi | ||
119 | index 9564337c1815d..45f5bd8d30f09 100644 | ||
120 | --- a/arch/arm/boot/dts/spear13xx.dtsi | ||
121 | +++ b/arch/arm/boot/dts/spear13xx.dtsi | ||
122 | @@ -288,9 +288,9 @@ | ||
123 | #size-cells = <0>; | ||
124 | interrupts = <0 31 0x4>; | ||
125 | status = "disabled"; | ||
126 | - dmas = <&dwdma0 4 0 0>, | ||
127 | - <&dwdma0 5 0 0>; | ||
128 | - dma-names = "tx", "rx"; | ||
129 | + dmas = <&dwdma0 5 0 0>, | ||
130 | + <&dwdma0 4 0 0>; | ||
131 | + dma-names = "rx", "tx"; | ||
132 | }; | ||
133 | |||
134 | rtc@e0580000 { | ||
135 | diff --git a/arch/arm/boot/dts/tegra20-tamonten.dtsi b/arch/arm/boot/dts/tegra20-tamonten.dtsi | ||
136 | index a613e3b85b456..29769bf7a11ab 100644 | ||
137 | --- a/arch/arm/boot/dts/tegra20-tamonten.dtsi | ||
138 | +++ b/arch/arm/boot/dts/tegra20-tamonten.dtsi | ||
139 | @@ -182,8 +182,8 @@ | ||
140 | }; | ||
141 | conf_ata { | ||
142 | nvidia,pins = "ata", "atb", "atc", "atd", "ate", | ||
143 | - "cdev1", "cdev2", "dap1", "dtb", "gma", | ||
144 | - "gmb", "gmc", "gmd", "gme", "gpu7", | ||
145 | + "cdev1", "cdev2", "dap1", "dtb", "dtf", | ||
146 | + "gma", "gmb", "gmc", "gmd", "gme", "gpu7", | ||
147 | "gpv", "i2cp", "irrx", "irtx", "pta", | ||
148 | "rm", "slxa", "slxk", "spia", "spib", | ||
149 | "uac"; | ||
150 | @@ -202,7 +202,7 @@ | ||
151 | }; | ||
152 | conf_crtp { | ||
153 | nvidia,pins = "crtp", "dap2", "dap3", "dap4", | ||
154 | - "dtc", "dte", "dtf", "gpu", "sdio1", | ||
155 | + "dtc", "dte", "gpu", "sdio1", | ||
156 | "slxc", "slxd", "spdi", "spdo", "spig", | ||
157 | "uda"; | ||
158 | nvidia,pull = <TEGRA_PIN_PULL_NONE>; | ||
159 | diff --git a/arch/arm/mach-davinci/board-da850-evm.c b/arch/arm/mach-davinci/board-da850-evm.c | ||
160 | index 3bdf0d5882383..5deafd26c7099 100644 | ||
161 | --- a/arch/arm/mach-davinci/board-da850-evm.c | ||
162 | +++ b/arch/arm/mach-davinci/board-da850-evm.c | ||
163 | @@ -1043,11 +1043,13 @@ static int __init da850_evm_config_emac(void) | ||
164 | int ret; | ||
165 | u32 val; | ||
166 | struct davinci_soc_info *soc_info = &davinci_soc_info; | ||
167 | - u8 rmii_en = soc_info->emac_pdata->rmii_en; | ||
168 | + u8 rmii_en; | ||
169 | |||
170 | if (!machine_is_davinci_da850_evm()) | ||
171 | return 0; | ||
172 | |||
173 | + rmii_en = soc_info->emac_pdata->rmii_en; | ||
174 | + | ||
175 | cfg_chip3_base = DA8XX_SYSCFG0_VIRT(DA8XX_CFGCHIP3_REG); | ||
176 | |||
177 | val = __raw_readl(cfg_chip3_base); | ||
178 | diff --git a/arch/arm/mach-mmp/sram.c b/arch/arm/mach-mmp/sram.c | ||
179 | index bf5e64906e656..a41162dc4af40 100644 | ||
180 | --- a/arch/arm/mach-mmp/sram.c | ||
181 | +++ b/arch/arm/mach-mmp/sram.c | ||
182 | @@ -75,6 +75,8 @@ static int sram_probe(struct platform_device *pdev) | ||
183 | if (!info) | ||
184 | return -ENOMEM; | ||
185 | |||
186 | + platform_set_drvdata(pdev, info); | ||
187 | + | ||
188 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||
189 | if (res == NULL) { | ||
190 | dev_err(&pdev->dev, "no memory resource defined\n"); | ||
191 | @@ -110,8 +112,6 @@ static int sram_probe(struct platform_device *pdev) | ||
192 | list_add(&info->node, &sram_bank_list); | ||
193 | mutex_unlock(&sram_lock); | ||
194 | |||
195 | - platform_set_drvdata(pdev, info); | ||
196 | - | ||
197 | dev_info(&pdev->dev, "initialized\n"); | ||
198 | return 0; | ||
199 | |||
200 | @@ -130,17 +130,19 @@ static int sram_remove(struct platform_device *pdev) | ||
201 | struct sram_bank_info *info; | ||
202 | |||
203 | info = platform_get_drvdata(pdev); | ||
204 | - if (info == NULL) | ||
205 | - return -ENODEV; | ||
206 | |||
207 | - mutex_lock(&sram_lock); | ||
208 | - list_del(&info->node); | ||
209 | - mutex_unlock(&sram_lock); | ||
210 | + if (info->sram_size) { | ||
211 | + mutex_lock(&sram_lock); | ||
212 | + list_del(&info->node); | ||
213 | + mutex_unlock(&sram_lock); | ||
214 | + | ||
215 | + gen_pool_destroy(info->gpool); | ||
216 | + iounmap(info->sram_virt); | ||
217 | + kfree(info->pool_name); | ||
218 | + } | ||
219 | |||
220 | - gen_pool_destroy(info->gpool); | ||
221 | - iounmap(info->sram_virt); | ||
222 | - kfree(info->pool_name); | ||
223 | kfree(info); | ||
224 | + | ||
225 | return 0; | ||
226 | } | ||
227 | |||
228 | diff --git a/arch/arm/mach-s3c24xx/mach-jive.c b/arch/arm/mach-s3c24xx/mach-jive.c | ||
229 | index 7d99fe8f61576..5d43733ee7d69 100644 | ||
230 | --- a/arch/arm/mach-s3c24xx/mach-jive.c | ||
231 | +++ b/arch/arm/mach-s3c24xx/mach-jive.c | ||
232 | @@ -240,11 +240,11 @@ static int __init jive_mtdset(char *options) | ||
233 | unsigned long set; | ||
234 | |||
235 | if (options == NULL || options[0] == '\0') | ||
236 | - return 0; | ||
237 | + return 1; | ||
238 | |||
239 | if (kstrtoul(options, 10, &set)) { | ||
240 | printk(KERN_ERR "failed to parse mtdset=%s\n", options); | ||
241 | - return 0; | ||
242 | + return 1; | ||
243 | } | ||
244 | |||
245 | switch (set) { | ||
246 | @@ -259,7 +259,7 @@ static int __init jive_mtdset(char *options) | ||
247 | "using default.", set); | ||
248 | } | ||
249 | |||
250 | - return 0; | ||
251 | + return 1; | ||
252 | } | ||
253 | |||
254 | /* parse the mtdset= option given to the kernel command line */ | ||
255 | diff --git a/arch/arm64/boot/dts/broadcom/bcm2837.dtsi b/arch/arm64/boot/dts/broadcom/bcm2837.dtsi | ||
256 | index c1f719b7097a6..95e3cb38474fb 100644 | ||
257 | --- a/arch/arm64/boot/dts/broadcom/bcm2837.dtsi | ||
258 | +++ b/arch/arm64/boot/dts/broadcom/bcm2837.dtsi | ||
259 | @@ -31,12 +31,26 @@ | ||
260 | #address-cells = <1>; | ||
261 | #size-cells = <0>; | ||
262 | |||
263 | + /* Source for d/i-cache-line-size and d/i-cache-sets | ||
264 | + * https://developer.arm.com/documentation/ddi0500/e/level-1-memory-system | ||
265 | + * /about-the-l1-memory-system?lang=en | ||
266 | + * | ||
267 | + * Source for d/i-cache-size | ||
268 | + * https://magpi.raspberrypi.com/articles/raspberry-pi-3-specs-benchmarks | ||
269 | + */ | ||
270 | cpu0: cpu@0 { | ||
271 | device_type = "cpu"; | ||
272 | compatible = "arm,cortex-a53"; | ||
273 | reg = <0>; | ||
274 | enable-method = "spin-table"; | ||
275 | cpu-release-addr = <0x0 0x000000d8>; | ||
276 | + d-cache-size = <0x8000>; | ||
277 | + d-cache-line-size = <64>; | ||
278 | + d-cache-sets = <128>; // 32KiB(size)/64(line-size)=512ways/4-way set | ||
279 | + i-cache-size = <0x8000>; | ||
280 | + i-cache-line-size = <64>; | ||
281 | + i-cache-sets = <256>; // 32KiB(size)/64(line-size)=512ways/2-way set | ||
282 | + next-level-cache = <&l2>; | ||
283 | }; | ||
284 | |||
285 | cpu1: cpu@1 { | ||
286 | @@ -45,6 +59,13 @@ | ||
287 | reg = <1>; | ||
288 | enable-method = "spin-table"; | ||
289 | cpu-release-addr = <0x0 0x000000e0>; | ||
290 | + d-cache-size = <0x8000>; | ||
291 | + d-cache-line-size = <64>; | ||
292 | + d-cache-sets = <128>; // 32KiB(size)/64(line-size)=512ways/4-way set | ||
293 | + i-cache-size = <0x8000>; | ||
294 | + i-cache-line-size = <64>; | ||
295 | + i-cache-sets = <256>; // 32KiB(size)/64(line-size)=512ways/2-way set | ||
296 | + next-level-cache = <&l2>; | ||
297 | }; | ||
298 | |||
299 | cpu2: cpu@2 { | ||
300 | @@ -53,6 +74,13 @@ | ||
301 | reg = <2>; | ||
302 | enable-method = "spin-table"; | ||
303 | cpu-release-addr = <0x0 0x000000e8>; | ||
304 | + d-cache-size = <0x8000>; | ||
305 | + d-cache-line-size = <64>; | ||
306 | + d-cache-sets = <128>; // 32KiB(size)/64(line-size)=512ways/4-way set | ||
307 | + i-cache-size = <0x8000>; | ||
308 | + i-cache-line-size = <64>; | ||
309 | + i-cache-sets = <256>; // 32KiB(size)/64(line-size)=512ways/2-way set | ||
310 | + next-level-cache = <&l2>; | ||
311 | }; | ||
312 | |||
313 | cpu3: cpu@3 { | ||
314 | @@ -61,6 +89,27 @@ | ||
315 | reg = <3>; | ||
316 | enable-method = "spin-table"; | ||
317 | cpu-release-addr = <0x0 0x000000f0>; | ||
318 | + d-cache-size = <0x8000>; | ||
319 | + d-cache-line-size = <64>; | ||
320 | + d-cache-sets = <128>; // 32KiB(size)/64(line-size)=512ways/4-way set | ||
321 | + i-cache-size = <0x8000>; | ||
322 | + i-cache-line-size = <64>; | ||
323 | + i-cache-sets = <256>; // 32KiB(size)/64(line-size)=512ways/2-way set | ||
324 | + next-level-cache = <&l2>; | ||
325 | + }; | ||
326 | + | ||
327 | + /* Source for cache-line-size + cache-sets | ||
328 | + * https://developer.arm.com/documentation/ddi0500 | ||
329 | + * /e/level-2-memory-system/about-the-l2-memory-system?lang=en | ||
330 | + * Source for cache-size | ||
331 | + * https://datasheets.raspberrypi.com/cm/cm1-and-cm3-datasheet.pdf | ||
332 | + */ | ||
333 | + l2: l2-cache0 { | ||
334 | + compatible = "cache"; | ||
335 | + cache-size = <0x80000>; | ||
336 | + cache-line-size = <64>; | ||
337 | + cache-sets = <512>; // 512KiB(size)/64(line-size)=8192ways/16-way set | ||
338 | + cache-level = <2>; | ||
339 | }; | ||
340 | }; | ||
341 | }; | ||
342 | diff --git a/arch/arm64/boot/dts/broadcom/ns2-svk.dts b/arch/arm64/boot/dts/broadcom/ns2-svk.dts | ||
343 | index b09f3bc5c6c16..58114b842a592 100644 | ||
344 | --- a/arch/arm64/boot/dts/broadcom/ns2-svk.dts | ||
345 | +++ b/arch/arm64/boot/dts/broadcom/ns2-svk.dts | ||
346 | @@ -103,8 +103,8 @@ | ||
347 | compatible = "silabs,si3226x"; | ||
348 | reg = <0>; | ||
349 | spi-max-frequency = <5000000>; | ||
350 | - spi-cpha = <1>; | ||
351 | - spi-cpol = <1>; | ||
352 | + spi-cpha; | ||
353 | + spi-cpol; | ||
354 | pl022,hierarchy = <0>; | ||
355 | pl022,interface = <0>; | ||
356 | pl022,slave-tx-disable = <0>; | ||
357 | @@ -127,8 +127,8 @@ | ||
358 | at25,byte-len = <0x8000>; | ||
359 | at25,addr-mode = <2>; | ||
360 | at25,page-size = <64>; | ||
361 | - spi-cpha = <1>; | ||
362 | - spi-cpol = <1>; | ||
363 | + spi-cpha; | ||
364 | + spi-cpol; | ||
365 | pl022,hierarchy = <0>; | ||
366 | pl022,interface = <0>; | ||
367 | pl022,slave-tx-disable = <0>; | ||
368 | diff --git a/arch/arm64/boot/dts/broadcom/ns2.dtsi b/arch/arm64/boot/dts/broadcom/ns2.dtsi | ||
369 | index 8a94ec8035d38..83c1718dac292 100644 | ||
370 | --- a/arch/arm64/boot/dts/broadcom/ns2.dtsi | ||
371 | +++ b/arch/arm64/boot/dts/broadcom/ns2.dtsi | ||
372 | @@ -514,7 +514,7 @@ | ||
373 | }; | ||
374 | }; | ||
375 | |||
376 | - sata: ahci@663f2000 { | ||
377 | + sata: sata@663f2000 { | ||
378 | compatible = "brcm,iproc-ahci", "generic-ahci"; | ||
379 | reg = <0x663f2000 0x1000>; | ||
380 | reg-names = "ahci"; | ||
381 | diff --git a/arch/arm64/kernel/insn.c b/arch/arm64/kernel/insn.c | ||
382 | index 755b3dd3073e5..fbfad5a83526b 100644 | ||
383 | --- a/arch/arm64/kernel/insn.c | ||
384 | +++ b/arch/arm64/kernel/insn.c | ||
385 | @@ -234,8 +234,8 @@ static int __kprobes aarch64_insn_patch_text_cb(void *arg) | ||
386 | int i, ret = 0; | ||
387 | struct aarch64_insn_patch *pp = arg; | ||
388 | |||
389 | - /* The first CPU becomes master */ | ||
390 | - if (atomic_inc_return(&pp->cpu_count) == 1) { | ||
391 | + /* The last CPU becomes master */ | ||
392 | + if (atomic_inc_return(&pp->cpu_count) == num_online_cpus()) { | ||
393 | for (i = 0; ret == 0 && i < pp->insn_cnt; i++) | ||
394 | ret = aarch64_insn_patch_text_nosync(pp->text_addrs[i], | ||
395 | pp->new_insns[i]); | ||
396 | diff --git a/arch/arm64/kernel/module.lds b/arch/arm64/kernel/module.lds | ||
397 | index 8949f6c6f729d..05881e2b414c5 100644 | ||
398 | --- a/arch/arm64/kernel/module.lds | ||
399 | +++ b/arch/arm64/kernel/module.lds | ||
400 | @@ -1,3 +1,3 @@ | ||
401 | SECTIONS { | ||
402 | - .plt (NOLOAD) : { BYTE(0) } | ||
403 | + .plt : { BYTE(0) } | ||
404 | } | ||
405 | diff --git a/arch/mips/dec/prom/Makefile b/arch/mips/dec/prom/Makefile | ||
406 | index ae73e42ac20b1..4c369359cdab5 100644 | ||
407 | --- a/arch/mips/dec/prom/Makefile | ||
408 | +++ b/arch/mips/dec/prom/Makefile | ||
409 | @@ -5,4 +5,4 @@ | ||
410 | |||
411 | lib-y += init.o memory.o cmdline.o identify.o console.o | ||
412 | |||
413 | -lib-$(CONFIG_32BIT) += locore.o | ||
414 | +lib-$(CONFIG_CPU_R3000) += locore.o | ||
415 | diff --git a/arch/mips/include/asm/dec/prom.h b/arch/mips/include/asm/dec/prom.h | ||
416 | index b59a2103b61a3..09538ff5e9245 100644 | ||
417 | --- a/arch/mips/include/asm/dec/prom.h | ||
418 | +++ b/arch/mips/include/asm/dec/prom.h | ||
419 | @@ -47,16 +47,11 @@ | ||
420 | */ | ||
421 | #define REX_PROM_MAGIC 0x30464354 | ||
422 | |||
423 | -#ifdef CONFIG_64BIT | ||
424 | - | ||
425 | -#define prom_is_rex(magic) 1 /* KN04 and KN05 are REX PROMs. */ | ||
426 | - | ||
427 | -#else /* !CONFIG_64BIT */ | ||
428 | - | ||
429 | -#define prom_is_rex(magic) ((magic) == REX_PROM_MAGIC) | ||
430 | - | ||
431 | -#endif /* !CONFIG_64BIT */ | ||
432 | - | ||
433 | +/* KN04 and KN05 are REX PROMs, so only do the check for R3k systems. */ | ||
434 | +static inline bool prom_is_rex(u32 magic) | ||
435 | +{ | ||
436 | + return !IS_ENABLED(CONFIG_CPU_R3000) || magic == REX_PROM_MAGIC; | ||
437 | +} | ||
438 | |||
439 | /* | ||
440 | * 3MIN/MAXINE PROM entry points for DS5000/1xx's, DS5000/xx's and | ||
441 | diff --git a/arch/mips/include/asm/setup.h b/arch/mips/include/asm/setup.h | ||
442 | index 4f5279a8308d7..e301967fcffdd 100644 | ||
443 | --- a/arch/mips/include/asm/setup.h | ||
444 | +++ b/arch/mips/include/asm/setup.h | ||
445 | @@ -13,7 +13,7 @@ static inline void setup_8250_early_printk_port(unsigned long base, | ||
446 | unsigned int reg_shift, unsigned int timeout) {} | ||
447 | #endif | ||
448 | |||
449 | -extern void set_handler(unsigned long offset, void *addr, unsigned long len); | ||
450 | +void set_handler(unsigned long offset, const void *addr, unsigned long len); | ||
451 | extern void set_uncached_handler(unsigned long offset, void *addr, unsigned long len); | ||
452 | |||
453 | typedef void (*vi_handler_t)(void); | ||
454 | diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c | ||
455 | index 5f717473d08e7..278e81c9e6143 100644 | ||
456 | --- a/arch/mips/kernel/traps.c | ||
457 | +++ b/arch/mips/kernel/traps.c | ||
458 | @@ -2019,19 +2019,19 @@ static void *set_vi_srs_handler(int n, vi_handler_t addr, int srs) | ||
459 | * If no shadow set is selected then use the default handler | ||
460 | * that does normal register saving and standard interrupt exit | ||
461 | */ | ||
462 | - extern char except_vec_vi, except_vec_vi_lui; | ||
463 | - extern char except_vec_vi_ori, except_vec_vi_end; | ||
464 | - extern char rollback_except_vec_vi; | ||
465 | - char *vec_start = using_rollback_handler() ? | ||
466 | - &rollback_except_vec_vi : &except_vec_vi; | ||
467 | + extern const u8 except_vec_vi[], except_vec_vi_lui[]; | ||
468 | + extern const u8 except_vec_vi_ori[], except_vec_vi_end[]; | ||
469 | + extern const u8 rollback_except_vec_vi[]; | ||
470 | + const u8 *vec_start = using_rollback_handler() ? | ||
471 | + rollback_except_vec_vi : except_vec_vi; | ||
472 | #if defined(CONFIG_CPU_MICROMIPS) || defined(CONFIG_CPU_BIG_ENDIAN) | ||
473 | - const int lui_offset = &except_vec_vi_lui - vec_start + 2; | ||
474 | - const int ori_offset = &except_vec_vi_ori - vec_start + 2; | ||
475 | + const int lui_offset = except_vec_vi_lui - vec_start + 2; | ||
476 | + const int ori_offset = except_vec_vi_ori - vec_start + 2; | ||
477 | #else | ||
478 | - const int lui_offset = &except_vec_vi_lui - vec_start; | ||
479 | - const int ori_offset = &except_vec_vi_ori - vec_start; | ||
480 | + const int lui_offset = except_vec_vi_lui - vec_start; | ||
481 | + const int ori_offset = except_vec_vi_ori - vec_start; | ||
482 | #endif | ||
483 | - const int handler_len = &except_vec_vi_end - vec_start; | ||
484 | + const int handler_len = except_vec_vi_end - vec_start; | ||
485 | |||
486 | if (handler_len > VECTORSPACING) { | ||
487 | /* | ||
488 | @@ -2251,7 +2251,7 @@ void per_cpu_trap_init(bool is_boot_cpu) | ||
489 | } | ||
490 | |||
491 | /* Install CPU exception handler */ | ||
492 | -void set_handler(unsigned long offset, void *addr, unsigned long size) | ||
493 | +void set_handler(unsigned long offset, const void *addr, unsigned long size) | ||
494 | { | ||
495 | #ifdef CONFIG_CPU_MICROMIPS | ||
496 | memcpy((void *)(ebase + offset), ((unsigned char *)addr - 1), size); | ||
497 | diff --git a/arch/mips/rb532/devices.c b/arch/mips/rb532/devices.c | ||
498 | index 0966adccf5200..ed921f7b43648 100644 | ||
499 | --- a/arch/mips/rb532/devices.c | ||
500 | +++ b/arch/mips/rb532/devices.c | ||
501 | @@ -313,11 +313,9 @@ static int __init plat_setup_devices(void) | ||
502 | static int __init setup_kmac(char *s) | ||
503 | { | ||
504 | printk(KERN_INFO "korina mac = %s\n", s); | ||
505 | - if (!mac_pton(s, korina_dev0_data.mac)) { | ||
506 | + if (!mac_pton(s, korina_dev0_data.mac)) | ||
507 | printk(KERN_ERR "Invalid mac\n"); | ||
508 | - return -EINVAL; | ||
509 | - } | ||
510 | - return 0; | ||
511 | + return 1; | ||
512 | } | ||
513 | |||
514 | __setup("kmac=", setup_kmac); | ||
515 | diff --git a/arch/powerpc/boot/dts/fsl/t104xrdb.dtsi b/arch/powerpc/boot/dts/fsl/t104xrdb.dtsi | ||
516 | index 5fdddbd2a62b2..b0a9beab1c26d 100644 | ||
517 | --- a/arch/powerpc/boot/dts/fsl/t104xrdb.dtsi | ||
518 | +++ b/arch/powerpc/boot/dts/fsl/t104xrdb.dtsi | ||
519 | @@ -139,12 +139,12 @@ | ||
520 | fman@400000 { | ||
521 | ethernet@e6000 { | ||
522 | phy-handle = <&phy_rgmii_0>; | ||
523 | - phy-connection-type = "rgmii"; | ||
524 | + phy-connection-type = "rgmii-id"; | ||
525 | }; | ||
526 | |||
527 | ethernet@e8000 { | ||
528 | phy-handle = <&phy_rgmii_1>; | ||
529 | - phy-connection-type = "rgmii"; | ||
530 | + phy-connection-type = "rgmii-id"; | ||
531 | }; | ||
532 | |||
533 | mdio0: mdio@fc000 { | ||
534 | diff --git a/arch/powerpc/sysdev/fsl_gtm.c b/arch/powerpc/sysdev/fsl_gtm.c | ||
535 | index a6f0b96ce2c94..97dee7c99aa02 100644 | ||
536 | --- a/arch/powerpc/sysdev/fsl_gtm.c | ||
537 | +++ b/arch/powerpc/sysdev/fsl_gtm.c | ||
538 | @@ -90,7 +90,7 @@ static LIST_HEAD(gtms); | ||
539 | */ | ||
540 | struct gtm_timer *gtm_get_timer16(void) | ||
541 | { | ||
542 | - struct gtm *gtm = NULL; | ||
543 | + struct gtm *gtm; | ||
544 | int i; | ||
545 | |||
546 | list_for_each_entry(gtm, >ms, list_node) { | ||
547 | @@ -107,7 +107,7 @@ struct gtm_timer *gtm_get_timer16(void) | ||
548 | spin_unlock_irq(>m->lock); | ||
549 | } | ||
550 | |||
551 | - if (gtm) | ||
552 | + if (!list_empty(>ms)) | ||
553 | return ERR_PTR(-EBUSY); | ||
554 | return ERR_PTR(-ENODEV); | ||
555 | } | ||
556 | diff --git a/arch/x86/events/intel/pt.c b/arch/x86/events/intel/pt.c | ||
557 | index 1808c57ce1614..2539aaddd1373 100644 | ||
558 | --- a/arch/x86/events/intel/pt.c | ||
559 | +++ b/arch/x86/events/intel/pt.c | ||
560 | @@ -410,7 +410,7 @@ static u64 pt_config_filters(struct perf_event *event) | ||
561 | pt->filters.filter[range].msr_b = filter->msr_b; | ||
562 | } | ||
563 | |||
564 | - rtit_ctl |= filter->config << pt_address_ranges[range].reg_off; | ||
565 | + rtit_ctl |= (u64)filter->config << pt_address_ranges[range].reg_off; | ||
566 | } | ||
567 | |||
568 | return rtit_ctl; | ||
569 | diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c | ||
570 | index 2e5553091f902..3edafdffa687c 100644 | ||
571 | --- a/arch/x86/kvm/emulate.c | ||
572 | +++ b/arch/x86/kvm/emulate.c | ||
573 | @@ -1674,11 +1674,6 @@ static int __load_segment_descriptor(struct x86_emulate_ctxt *ctxt, | ||
574 | goto exception; | ||
575 | } | ||
576 | |||
577 | - if (!seg_desc.p) { | ||
578 | - err_vec = (seg == VCPU_SREG_SS) ? SS_VECTOR : NP_VECTOR; | ||
579 | - goto exception; | ||
580 | - } | ||
581 | - | ||
582 | dpl = seg_desc.dpl; | ||
583 | |||
584 | switch (seg) { | ||
585 | @@ -1718,6 +1713,10 @@ static int __load_segment_descriptor(struct x86_emulate_ctxt *ctxt, | ||
586 | case VCPU_SREG_TR: | ||
587 | if (seg_desc.s || (seg_desc.type != 1 && seg_desc.type != 9)) | ||
588 | goto exception; | ||
589 | + if (!seg_desc.p) { | ||
590 | + err_vec = NP_VECTOR; | ||
591 | + goto exception; | ||
592 | + } | ||
593 | old_desc = seg_desc; | ||
594 | seg_desc.type |= 2; /* busy */ | ||
595 | ret = ctxt->ops->cmpxchg_emulated(ctxt, desc_addr, &old_desc, &seg_desc, | ||
596 | @@ -1742,6 +1741,11 @@ static int __load_segment_descriptor(struct x86_emulate_ctxt *ctxt, | ||
597 | break; | ||
598 | } | ||
599 | |||
600 | + if (!seg_desc.p) { | ||
601 | + err_vec = (seg == VCPU_SREG_SS) ? SS_VECTOR : NP_VECTOR; | ||
602 | + goto exception; | ||
603 | + } | ||
604 | + | ||
605 | if (seg_desc.s) { | ||
606 | /* mark segment as accessed */ | ||
607 | if (!(seg_desc.type & 1)) { | ||
608 | diff --git a/arch/x86/kvm/hyperv.c b/arch/x86/kvm/hyperv.c | ||
609 | index 5e837c96e93f2..56feb7d8f96d5 100644 | ||
610 | --- a/arch/x86/kvm/hyperv.c | ||
611 | +++ b/arch/x86/kvm/hyperv.c | ||
612 | @@ -244,6 +244,9 @@ static int synic_set_msr(struct kvm_vcpu_hv_synic *synic, | ||
613 | case HV_X64_MSR_EOM: { | ||
614 | int i; | ||
615 | |||
616 | + if (!synic->active) | ||
617 | + break; | ||
618 | + | ||
619 | for (i = 0; i < ARRAY_SIZE(synic->sint); i++) | ||
620 | kvm_hv_notify_acked_sint(vcpu, i); | ||
621 | break; | ||
622 | @@ -504,6 +507,12 @@ static int stimer_start(struct kvm_vcpu_hv_stimer *stimer) | ||
623 | static int stimer_set_config(struct kvm_vcpu_hv_stimer *stimer, u64 config, | ||
624 | bool host) | ||
625 | { | ||
626 | + struct kvm_vcpu *vcpu = stimer_to_vcpu(stimer); | ||
627 | + struct kvm_vcpu_hv_synic *synic = vcpu_to_synic(vcpu); | ||
628 | + | ||
629 | + if (!synic->active && (!host || config)) | ||
630 | + return 1; | ||
631 | + | ||
632 | trace_kvm_hv_stimer_set_config(stimer_to_vcpu(stimer)->vcpu_id, | ||
633 | stimer->index, config, host); | ||
634 | |||
635 | @@ -518,6 +527,12 @@ static int stimer_set_config(struct kvm_vcpu_hv_stimer *stimer, u64 config, | ||
636 | static int stimer_set_count(struct kvm_vcpu_hv_stimer *stimer, u64 count, | ||
637 | bool host) | ||
638 | { | ||
639 | + struct kvm_vcpu *vcpu = stimer_to_vcpu(stimer); | ||
640 | + struct kvm_vcpu_hv_synic *synic = vcpu_to_synic(vcpu); | ||
641 | + | ||
642 | + if (!synic->active && (!host || count)) | ||
643 | + return 1; | ||
644 | + | ||
645 | trace_kvm_hv_stimer_set_count(stimer_to_vcpu(stimer)->vcpu_id, | ||
646 | stimer->index, count, host); | ||
647 | |||
648 | diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c | ||
649 | index bfed29a4c2cec..e5f92488c3cde 100644 | ||
650 | --- a/arch/x86/kvm/lapic.c | ||
651 | +++ b/arch/x86/kvm/lapic.c | ||
652 | @@ -1767,10 +1767,7 @@ void kvm_set_lapic_tscdeadline_msr(struct kvm_vcpu *vcpu, u64 data) | ||
653 | |||
654 | void kvm_lapic_set_tpr(struct kvm_vcpu *vcpu, unsigned long cr8) | ||
655 | { | ||
656 | - struct kvm_lapic *apic = vcpu->arch.apic; | ||
657 | - | ||
658 | - apic_set_tpr(apic, ((cr8 & 0x0f) << 4) | ||
659 | - | (kvm_lapic_get_reg(apic, APIC_TASKPRI) & 4)); | ||
660 | + apic_set_tpr(vcpu->arch.apic, (cr8 & 0x0f) << 4); | ||
661 | } | ||
662 | |||
663 | u64 kvm_lapic_get_cr8(struct kvm_vcpu *vcpu) | ||
664 | diff --git a/arch/x86/kvm/pmu_amd.c b/arch/x86/kvm/pmu_amd.c | ||
665 | index cd944435dfbd7..e0473c72062e2 100644 | ||
666 | --- a/arch/x86/kvm/pmu_amd.c | ||
667 | +++ b/arch/x86/kvm/pmu_amd.c | ||
668 | @@ -139,12 +139,10 @@ static int amd_pmu_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info) | ||
669 | /* MSR_K7_EVNTSELn */ | ||
670 | pmc = get_gp_pmc(pmu, msr, MSR_K7_EVNTSEL0); | ||
671 | if (pmc) { | ||
672 | - if (data == pmc->eventsel) | ||
673 | - return 0; | ||
674 | - if (!(data & pmu->reserved_bits)) { | ||
675 | + data &= ~pmu->reserved_bits; | ||
676 | + if (data != pmc->eventsel) | ||
677 | reprogram_gp_counter(pmc, data); | ||
678 | - return 0; | ||
679 | - } | ||
680 | + return 0; | ||
681 | } | ||
682 | |||
683 | return 1; | ||
684 | diff --git a/arch/x86/power/cpu.c b/arch/x86/power/cpu.c | ||
685 | index c8f947a4aaf20..357b3e6a2f7b1 100644 | ||
686 | --- a/arch/x86/power/cpu.c | ||
687 | +++ b/arch/x86/power/cpu.c | ||
688 | @@ -41,7 +41,8 @@ static void msr_save_context(struct saved_context *ctxt) | ||
689 | struct saved_msr *end = msr + ctxt->saved_msrs.num; | ||
690 | |||
691 | while (msr < end) { | ||
692 | - msr->valid = !rdmsrl_safe(msr->info.msr_no, &msr->info.reg.q); | ||
693 | + if (msr->valid) | ||
694 | + rdmsrl(msr->info.msr_no, msr->info.reg.q); | ||
695 | msr++; | ||
696 | } | ||
697 | } | ||
698 | @@ -419,8 +420,10 @@ static int msr_build_context(const u32 *msr_id, const int num) | ||
699 | } | ||
700 | |||
701 | for (i = saved_msrs->num, j = 0; i < total_num; i++, j++) { | ||
702 | + u64 dummy; | ||
703 | + | ||
704 | msr_array[i].info.msr_no = msr_id[j]; | ||
705 | - msr_array[i].valid = false; | ||
706 | + msr_array[i].valid = !rdmsrl_safe(msr_id[j], &dummy); | ||
707 | msr_array[i].info.reg.q = 0; | ||
708 | } | ||
709 | saved_msrs->num = total_num; | ||
710 | @@ -507,10 +510,24 @@ static int pm_cpu_check(const struct x86_cpu_id *c) | ||
711 | return ret; | ||
712 | } | ||
713 | |||
714 | +static void pm_save_spec_msr(void) | ||
715 | +{ | ||
716 | + u32 spec_msr_id[] = { | ||
717 | + MSR_IA32_SPEC_CTRL, | ||
718 | + MSR_IA32_TSX_CTRL, | ||
719 | + MSR_TSX_FORCE_ABORT, | ||
720 | + MSR_IA32_MCU_OPT_CTRL, | ||
721 | + MSR_AMD64_LS_CFG, | ||
722 | + }; | ||
723 | + | ||
724 | + msr_build_context(spec_msr_id, ARRAY_SIZE(spec_msr_id)); | ||
725 | +} | ||
726 | + | ||
727 | static int pm_check_save_msr(void) | ||
728 | { | ||
729 | dmi_check_system(msr_save_dmi_table); | ||
730 | pm_cpu_check(msr_save_cpu_table); | ||
731 | + pm_save_spec_msr(); | ||
732 | |||
733 | return 0; | ||
734 | } | ||
735 | diff --git a/arch/xtensa/boot/dts/xtfpga-flash-128m.dtsi b/arch/xtensa/boot/dts/xtfpga-flash-128m.dtsi | ||
736 | index d3a88e029873d..d9b399b57bcdc 100644 | ||
737 | --- a/arch/xtensa/boot/dts/xtfpga-flash-128m.dtsi | ||
738 | +++ b/arch/xtensa/boot/dts/xtfpga-flash-128m.dtsi | ||
739 | @@ -7,19 +7,19 @@ | ||
740 | reg = <0x00000000 0x08000000>; | ||
741 | bank-width = <2>; | ||
742 | device-width = <2>; | ||
743 | - partition@0x0 { | ||
744 | + partition@0 { | ||
745 | label = "data"; | ||
746 | reg = <0x00000000 0x06000000>; | ||
747 | }; | ||
748 | - partition@0x6000000 { | ||
749 | + partition@6000000 { | ||
750 | label = "boot loader area"; | ||
751 | reg = <0x06000000 0x00800000>; | ||
752 | }; | ||
753 | - partition@0x6800000 { | ||
754 | + partition@6800000 { | ||
755 | label = "kernel image"; | ||
756 | reg = <0x06800000 0x017e0000>; | ||
757 | }; | ||
758 | - partition@0x7fe0000 { | ||
759 | + partition@7fe0000 { | ||
760 | label = "boot environment"; | ||
761 | reg = <0x07fe0000 0x00020000>; | ||
762 | }; | ||
763 | diff --git a/arch/xtensa/boot/dts/xtfpga-flash-16m.dtsi b/arch/xtensa/boot/dts/xtfpga-flash-16m.dtsi | ||
764 | index 1d97203c18e7f..c9d0fc0b62657 100644 | ||
765 | --- a/arch/xtensa/boot/dts/xtfpga-flash-16m.dtsi | ||
766 | +++ b/arch/xtensa/boot/dts/xtfpga-flash-16m.dtsi | ||
767 | @@ -7,19 +7,19 @@ | ||
768 | reg = <0x08000000 0x01000000>; | ||
769 | bank-width = <2>; | ||
770 | device-width = <2>; | ||
771 | - partition@0x0 { | ||
772 | + partition@0 { | ||
773 | label = "boot loader area"; | ||
774 | reg = <0x00000000 0x00400000>; | ||
775 | }; | ||
776 | - partition@0x400000 { | ||
777 | + partition@400000 { | ||
778 | label = "kernel image"; | ||
779 | reg = <0x00400000 0x00600000>; | ||
780 | }; | ||
781 | - partition@0xa00000 { | ||
782 | + partition@a00000 { | ||
783 | label = "data"; | ||
784 | reg = <0x00a00000 0x005e0000>; | ||
785 | }; | ||
786 | - partition@0xfe0000 { | ||
787 | + partition@fe0000 { | ||
788 | label = "boot environment"; | ||
789 | reg = <0x00fe0000 0x00020000>; | ||
790 | }; | ||
791 | diff --git a/arch/xtensa/boot/dts/xtfpga-flash-4m.dtsi b/arch/xtensa/boot/dts/xtfpga-flash-4m.dtsi | ||
792 | index d1c621ca8be10..332892315f92b 100644 | ||
793 | --- a/arch/xtensa/boot/dts/xtfpga-flash-4m.dtsi | ||
794 | +++ b/arch/xtensa/boot/dts/xtfpga-flash-4m.dtsi | ||
795 | @@ -7,11 +7,11 @@ | ||
796 | reg = <0x08000000 0x00400000>; | ||
797 | bank-width = <2>; | ||
798 | device-width = <2>; | ||
799 | - partition@0x0 { | ||
800 | + partition@0 { | ||
801 | label = "boot loader area"; | ||
802 | reg = <0x00000000 0x003f0000>; | ||
803 | }; | ||
804 | - partition@0x3f0000 { | ||
805 | + partition@3f0000 { | ||
806 | label = "boot environment"; | ||
807 | reg = <0x003f0000 0x00010000>; | ||
808 | }; | ||
809 | diff --git a/crypto/authenc.c b/crypto/authenc.c | ||
810 | index 6bfec690ca5be..f9ab04aa6dd59 100644 | ||
811 | --- a/crypto/authenc.c | ||
812 | +++ b/crypto/authenc.c | ||
813 | @@ -268,7 +268,7 @@ static int crypto_authenc_decrypt_tail(struct aead_request *req, | ||
814 | dst = scatterwalk_ffwd(areq_ctx->dst, req->dst, req->assoclen); | ||
815 | |||
816 | skcipher_request_set_tfm(skreq, ctx->enc); | ||
817 | - skcipher_request_set_callback(skreq, aead_request_flags(req), | ||
818 | + skcipher_request_set_callback(skreq, flags, | ||
819 | req->base.complete, req->base.data); | ||
820 | skcipher_request_set_crypt(skreq, src, dst, | ||
821 | req->cryptlen - authsize, req->iv); | ||
822 | diff --git a/drivers/acpi/acpica/nswalk.c b/drivers/acpi/acpica/nswalk.c | ||
823 | index ebd731fe8e457..6902c2a01f6f7 100644 | ||
824 | --- a/drivers/acpi/acpica/nswalk.c | ||
825 | +++ b/drivers/acpi/acpica/nswalk.c | ||
826 | @@ -203,6 +203,9 @@ acpi_ns_walk_namespace(acpi_object_type type, | ||
827 | |||
828 | if (start_node == ACPI_ROOT_OBJECT) { | ||
829 | start_node = acpi_gbl_root_node; | ||
830 | + if (!start_node) { | ||
831 | + return_ACPI_STATUS(AE_NO_NAMESPACE); | ||
832 | + } | ||
833 | } | ||
834 | |||
835 | /* Null child means "get first node" */ | ||
836 | diff --git a/drivers/acpi/apei/bert.c b/drivers/acpi/apei/bert.c | ||
837 | index a05b5c0cf181a..e22f3d89b84b0 100644 | ||
838 | --- a/drivers/acpi/apei/bert.c | ||
839 | +++ b/drivers/acpi/apei/bert.c | ||
840 | @@ -31,6 +31,7 @@ | ||
841 | |||
842 | #undef pr_fmt | ||
843 | #define pr_fmt(fmt) "BERT: " fmt | ||
844 | +#define ACPI_BERT_PRINT_MAX_LEN 1024 | ||
845 | |||
846 | static int bert_disable; | ||
847 | |||
848 | @@ -59,8 +60,11 @@ static void __init bert_print_all(struct acpi_bert_region *region, | ||
849 | } | ||
850 | |||
851 | pr_info_once("Error records from previous boot:\n"); | ||
852 | - | ||
853 | - cper_estatus_print(KERN_INFO HW_ERR, estatus); | ||
854 | + if (region_len < ACPI_BERT_PRINT_MAX_LEN) | ||
855 | + cper_estatus_print(KERN_INFO HW_ERR, estatus); | ||
856 | + else | ||
857 | + pr_info_once("Max print length exceeded, table data is available at:\n" | ||
858 | + "/sys/firmware/acpi/tables/data/BERT"); | ||
859 | |||
860 | /* | ||
861 | * Because the boot error source is "one-time polled" type, | ||
862 | diff --git a/drivers/acpi/cppc_acpi.c b/drivers/acpi/cppc_acpi.c | ||
863 | index 318bdfb8703cc..b27a405a0f87d 100644 | ||
864 | --- a/drivers/acpi/cppc_acpi.c | ||
865 | +++ b/drivers/acpi/cppc_acpi.c | ||
866 | @@ -681,6 +681,11 @@ int acpi_cppc_processor_probe(struct acpi_processor *pr) | ||
867 | cpc_obj = &out_obj->package.elements[0]; | ||
868 | if (cpc_obj->type == ACPI_TYPE_INTEGER) { | ||
869 | num_ent = cpc_obj->integer.value; | ||
870 | + if (num_ent <= 1) { | ||
871 | + pr_debug("Unexpected _CPC NumEntries value (%d) for CPU:%d\n", | ||
872 | + num_ent, pr->id); | ||
873 | + goto out_free; | ||
874 | + } | ||
875 | } else { | ||
876 | pr_debug("Unexpected entry type(%d) for NumEntries\n", | ||
877 | cpc_obj->type); | ||
878 | diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c | ||
879 | index d707cd16ed014..b4d50c5dcbf86 100644 | ||
880 | --- a/drivers/base/power/main.c | ||
881 | +++ b/drivers/base/power/main.c | ||
882 | @@ -1766,7 +1766,9 @@ static bool pm_ops_is_empty(const struct dev_pm_ops *ops) | ||
883 | |||
884 | void device_pm_check_callbacks(struct device *dev) | ||
885 | { | ||
886 | - spin_lock_irq(&dev->power.lock); | ||
887 | + unsigned long flags; | ||
888 | + | ||
889 | + spin_lock_irqsave(&dev->power.lock, flags); | ||
890 | dev->power.no_pm_callbacks = | ||
891 | (!dev->bus || (pm_ops_is_empty(dev->bus->pm) && | ||
892 | !dev->bus->suspend && !dev->bus->resume)) && | ||
893 | @@ -1776,5 +1778,5 @@ void device_pm_check_callbacks(struct device *dev) | ||
894 | (!dev->pm_domain || pm_ops_is_empty(&dev->pm_domain->ops)) && | ||
895 | (!dev->driver || (pm_ops_is_empty(dev->driver->pm) && | ||
896 | !dev->driver->suspend && !dev->driver->resume)); | ||
897 | - spin_unlock_irq(&dev->power.lock); | ||
898 | + spin_unlock_irqrestore(&dev->power.lock, flags); | ||
899 | } | ||
900 | diff --git a/drivers/block/drbd/drbd_int.h b/drivers/block/drbd/drbd_int.h | ||
901 | index 4cb8f21ff4eff..4a7be81e7de9a 100644 | ||
902 | --- a/drivers/block/drbd/drbd_int.h | ||
903 | +++ b/drivers/block/drbd/drbd_int.h | ||
904 | @@ -1696,22 +1696,22 @@ struct sib_info { | ||
905 | }; | ||
906 | void drbd_bcast_event(struct drbd_device *device, const struct sib_info *sib); | ||
907 | |||
908 | -extern void notify_resource_state(struct sk_buff *, | ||
909 | +extern int notify_resource_state(struct sk_buff *, | ||
910 | unsigned int, | ||
911 | struct drbd_resource *, | ||
912 | struct resource_info *, | ||
913 | enum drbd_notification_type); | ||
914 | -extern void notify_device_state(struct sk_buff *, | ||
915 | +extern int notify_device_state(struct sk_buff *, | ||
916 | unsigned int, | ||
917 | struct drbd_device *, | ||
918 | struct device_info *, | ||
919 | enum drbd_notification_type); | ||
920 | -extern void notify_connection_state(struct sk_buff *, | ||
921 | +extern int notify_connection_state(struct sk_buff *, | ||
922 | unsigned int, | ||
923 | struct drbd_connection *, | ||
924 | struct connection_info *, | ||
925 | enum drbd_notification_type); | ||
926 | -extern void notify_peer_device_state(struct sk_buff *, | ||
927 | +extern int notify_peer_device_state(struct sk_buff *, | ||
928 | unsigned int, | ||
929 | struct drbd_peer_device *, | ||
930 | struct peer_device_info *, | ||
931 | diff --git a/drivers/block/drbd/drbd_nl.c b/drivers/block/drbd/drbd_nl.c | ||
932 | index b809f325c2bea..3c9cee9520ed5 100644 | ||
933 | --- a/drivers/block/drbd/drbd_nl.c | ||
934 | +++ b/drivers/block/drbd/drbd_nl.c | ||
935 | @@ -4611,7 +4611,7 @@ static int nla_put_notification_header(struct sk_buff *msg, | ||
936 | return drbd_notification_header_to_skb(msg, &nh, true); | ||
937 | } | ||
938 | |||
939 | -void notify_resource_state(struct sk_buff *skb, | ||
940 | +int notify_resource_state(struct sk_buff *skb, | ||
941 | unsigned int seq, | ||
942 | struct drbd_resource *resource, | ||
943 | struct resource_info *resource_info, | ||
944 | @@ -4653,16 +4653,17 @@ void notify_resource_state(struct sk_buff *skb, | ||
945 | if (err && err != -ESRCH) | ||
946 | goto failed; | ||
947 | } | ||
948 | - return; | ||
949 | + return 0; | ||
950 | |||
951 | nla_put_failure: | ||
952 | nlmsg_free(skb); | ||
953 | failed: | ||
954 | drbd_err(resource, "Error %d while broadcasting event. Event seq:%u\n", | ||
955 | err, seq); | ||
956 | + return err; | ||
957 | } | ||
958 | |||
959 | -void notify_device_state(struct sk_buff *skb, | ||
960 | +int notify_device_state(struct sk_buff *skb, | ||
961 | unsigned int seq, | ||
962 | struct drbd_device *device, | ||
963 | struct device_info *device_info, | ||
964 | @@ -4702,16 +4703,17 @@ void notify_device_state(struct sk_buff *skb, | ||
965 | if (err && err != -ESRCH) | ||
966 | goto failed; | ||
967 | } | ||
968 | - return; | ||
969 | + return 0; | ||
970 | |||
971 | nla_put_failure: | ||
972 | nlmsg_free(skb); | ||
973 | failed: | ||
974 | drbd_err(device, "Error %d while broadcasting event. Event seq:%u\n", | ||
975 | err, seq); | ||
976 | + return err; | ||
977 | } | ||
978 | |||
979 | -void notify_connection_state(struct sk_buff *skb, | ||
980 | +int notify_connection_state(struct sk_buff *skb, | ||
981 | unsigned int seq, | ||
982 | struct drbd_connection *connection, | ||
983 | struct connection_info *connection_info, | ||
984 | @@ -4751,16 +4753,17 @@ void notify_connection_state(struct sk_buff *skb, | ||
985 | if (err && err != -ESRCH) | ||
986 | goto failed; | ||
987 | } | ||
988 | - return; | ||
989 | + return 0; | ||
990 | |||
991 | nla_put_failure: | ||
992 | nlmsg_free(skb); | ||
993 | failed: | ||
994 | drbd_err(connection, "Error %d while broadcasting event. Event seq:%u\n", | ||
995 | err, seq); | ||
996 | + return err; | ||
997 | } | ||
998 | |||
999 | -void notify_peer_device_state(struct sk_buff *skb, | ||
1000 | +int notify_peer_device_state(struct sk_buff *skb, | ||
1001 | unsigned int seq, | ||
1002 | struct drbd_peer_device *peer_device, | ||
1003 | struct peer_device_info *peer_device_info, | ||
1004 | @@ -4801,13 +4804,14 @@ void notify_peer_device_state(struct sk_buff *skb, | ||
1005 | if (err && err != -ESRCH) | ||
1006 | goto failed; | ||
1007 | } | ||
1008 | - return; | ||
1009 | + return 0; | ||
1010 | |||
1011 | nla_put_failure: | ||
1012 | nlmsg_free(skb); | ||
1013 | failed: | ||
1014 | drbd_err(peer_device, "Error %d while broadcasting event. Event seq:%u\n", | ||
1015 | err, seq); | ||
1016 | + return err; | ||
1017 | } | ||
1018 | |||
1019 | void notify_helper(enum drbd_notification_type type, | ||
1020 | @@ -4858,7 +4862,7 @@ fail: | ||
1021 | err, seq); | ||
1022 | } | ||
1023 | |||
1024 | -static void notify_initial_state_done(struct sk_buff *skb, unsigned int seq) | ||
1025 | +static int notify_initial_state_done(struct sk_buff *skb, unsigned int seq) | ||
1026 | { | ||
1027 | struct drbd_genlmsghdr *dh; | ||
1028 | int err; | ||
1029 | @@ -4872,11 +4876,12 @@ static void notify_initial_state_done(struct sk_buff *skb, unsigned int seq) | ||
1030 | if (nla_put_notification_header(skb, NOTIFY_EXISTS)) | ||
1031 | goto nla_put_failure; | ||
1032 | genlmsg_end(skb, dh); | ||
1033 | - return; | ||
1034 | + return 0; | ||
1035 | |||
1036 | nla_put_failure: | ||
1037 | nlmsg_free(skb); | ||
1038 | pr_err("Error %d sending event. Event seq:%u\n", err, seq); | ||
1039 | + return err; | ||
1040 | } | ||
1041 | |||
1042 | static void free_state_changes(struct list_head *list) | ||
1043 | @@ -4903,6 +4908,7 @@ static int get_initial_state(struct sk_buff *skb, struct netlink_callback *cb) | ||
1044 | unsigned int seq = cb->args[2]; | ||
1045 | unsigned int n; | ||
1046 | enum drbd_notification_type flags = 0; | ||
1047 | + int err = 0; | ||
1048 | |||
1049 | /* There is no need for taking notification_mutex here: it doesn't | ||
1050 | matter if the initial state events mix with later state chage | ||
1051 | @@ -4911,32 +4917,32 @@ static int get_initial_state(struct sk_buff *skb, struct netlink_callback *cb) | ||
1052 | |||
1053 | cb->args[5]--; | ||
1054 | if (cb->args[5] == 1) { | ||
1055 | - notify_initial_state_done(skb, seq); | ||
1056 | + err = notify_initial_state_done(skb, seq); | ||
1057 | goto out; | ||
1058 | } | ||
1059 | n = cb->args[4]++; | ||
1060 | if (cb->args[4] < cb->args[3]) | ||
1061 | flags |= NOTIFY_CONTINUES; | ||
1062 | if (n < 1) { | ||
1063 | - notify_resource_state_change(skb, seq, state_change->resource, | ||
1064 | + err = notify_resource_state_change(skb, seq, state_change->resource, | ||
1065 | NOTIFY_EXISTS | flags); | ||
1066 | goto next; | ||
1067 | } | ||
1068 | n--; | ||
1069 | if (n < state_change->n_connections) { | ||
1070 | - notify_connection_state_change(skb, seq, &state_change->connections[n], | ||
1071 | + err = notify_connection_state_change(skb, seq, &state_change->connections[n], | ||
1072 | NOTIFY_EXISTS | flags); | ||
1073 | goto next; | ||
1074 | } | ||
1075 | n -= state_change->n_connections; | ||
1076 | if (n < state_change->n_devices) { | ||
1077 | - notify_device_state_change(skb, seq, &state_change->devices[n], | ||
1078 | + err = notify_device_state_change(skb, seq, &state_change->devices[n], | ||
1079 | NOTIFY_EXISTS | flags); | ||
1080 | goto next; | ||
1081 | } | ||
1082 | n -= state_change->n_devices; | ||
1083 | if (n < state_change->n_devices * state_change->n_connections) { | ||
1084 | - notify_peer_device_state_change(skb, seq, &state_change->peer_devices[n], | ||
1085 | + err = notify_peer_device_state_change(skb, seq, &state_change->peer_devices[n], | ||
1086 | NOTIFY_EXISTS | flags); | ||
1087 | goto next; | ||
1088 | } | ||
1089 | @@ -4951,7 +4957,10 @@ next: | ||
1090 | cb->args[4] = 0; | ||
1091 | } | ||
1092 | out: | ||
1093 | - return skb->len; | ||
1094 | + if (err) | ||
1095 | + return err; | ||
1096 | + else | ||
1097 | + return skb->len; | ||
1098 | } | ||
1099 | |||
1100 | int drbd_adm_get_initial_state(struct sk_buff *skb, struct netlink_callback *cb) | ||
1101 | diff --git a/drivers/block/drbd/drbd_state.c b/drivers/block/drbd/drbd_state.c | ||
1102 | index eea0c4aec9789..b636d9c08c0e0 100644 | ||
1103 | --- a/drivers/block/drbd/drbd_state.c | ||
1104 | +++ b/drivers/block/drbd/drbd_state.c | ||
1105 | @@ -1505,7 +1505,7 @@ int drbd_bitmap_io_from_worker(struct drbd_device *device, | ||
1106 | return rv; | ||
1107 | } | ||
1108 | |||
1109 | -void notify_resource_state_change(struct sk_buff *skb, | ||
1110 | +int notify_resource_state_change(struct sk_buff *skb, | ||
1111 | unsigned int seq, | ||
1112 | struct drbd_resource_state_change *resource_state_change, | ||
1113 | enum drbd_notification_type type) | ||
1114 | @@ -1518,10 +1518,10 @@ void notify_resource_state_change(struct sk_buff *skb, | ||
1115 | .res_susp_fen = resource_state_change->susp_fen[NEW], | ||
1116 | }; | ||
1117 | |||
1118 | - notify_resource_state(skb, seq, resource, &resource_info, type); | ||
1119 | + return notify_resource_state(skb, seq, resource, &resource_info, type); | ||
1120 | } | ||
1121 | |||
1122 | -void notify_connection_state_change(struct sk_buff *skb, | ||
1123 | +int notify_connection_state_change(struct sk_buff *skb, | ||
1124 | unsigned int seq, | ||
1125 | struct drbd_connection_state_change *connection_state_change, | ||
1126 | enum drbd_notification_type type) | ||
1127 | @@ -1532,10 +1532,10 @@ void notify_connection_state_change(struct sk_buff *skb, | ||
1128 | .conn_role = connection_state_change->peer_role[NEW], | ||
1129 | }; | ||
1130 | |||
1131 | - notify_connection_state(skb, seq, connection, &connection_info, type); | ||
1132 | + return notify_connection_state(skb, seq, connection, &connection_info, type); | ||
1133 | } | ||
1134 | |||
1135 | -void notify_device_state_change(struct sk_buff *skb, | ||
1136 | +int notify_device_state_change(struct sk_buff *skb, | ||
1137 | unsigned int seq, | ||
1138 | struct drbd_device_state_change *device_state_change, | ||
1139 | enum drbd_notification_type type) | ||
1140 | @@ -1545,10 +1545,10 @@ void notify_device_state_change(struct sk_buff *skb, | ||
1141 | .dev_disk_state = device_state_change->disk_state[NEW], | ||
1142 | }; | ||
1143 | |||
1144 | - notify_device_state(skb, seq, device, &device_info, type); | ||
1145 | + return notify_device_state(skb, seq, device, &device_info, type); | ||
1146 | } | ||
1147 | |||
1148 | -void notify_peer_device_state_change(struct sk_buff *skb, | ||
1149 | +int notify_peer_device_state_change(struct sk_buff *skb, | ||
1150 | unsigned int seq, | ||
1151 | struct drbd_peer_device_state_change *p, | ||
1152 | enum drbd_notification_type type) | ||
1153 | @@ -1562,7 +1562,7 @@ void notify_peer_device_state_change(struct sk_buff *skb, | ||
1154 | .peer_resync_susp_dependency = p->resync_susp_dependency[NEW], | ||
1155 | }; | ||
1156 | |||
1157 | - notify_peer_device_state(skb, seq, peer_device, &peer_device_info, type); | ||
1158 | + return notify_peer_device_state(skb, seq, peer_device, &peer_device_info, type); | ||
1159 | } | ||
1160 | |||
1161 | static void broadcast_state_change(struct drbd_state_change *state_change) | ||
1162 | @@ -1570,7 +1570,7 @@ static void broadcast_state_change(struct drbd_state_change *state_change) | ||
1163 | struct drbd_resource_state_change *resource_state_change = &state_change->resource[0]; | ||
1164 | bool resource_state_has_changed; | ||
1165 | unsigned int n_device, n_connection, n_peer_device, n_peer_devices; | ||
1166 | - void (*last_func)(struct sk_buff *, unsigned int, void *, | ||
1167 | + int (*last_func)(struct sk_buff *, unsigned int, void *, | ||
1168 | enum drbd_notification_type) = NULL; | ||
1169 | void *uninitialized_var(last_arg); | ||
1170 | |||
1171 | diff --git a/drivers/block/drbd/drbd_state_change.h b/drivers/block/drbd/drbd_state_change.h | ||
1172 | index 9e503a1a0bfbc..e5a956d268664 100644 | ||
1173 | --- a/drivers/block/drbd/drbd_state_change.h | ||
1174 | +++ b/drivers/block/drbd/drbd_state_change.h | ||
1175 | @@ -43,19 +43,19 @@ extern struct drbd_state_change *remember_old_state(struct drbd_resource *, gfp_ | ||
1176 | extern void copy_old_to_new_state_change(struct drbd_state_change *); | ||
1177 | extern void forget_state_change(struct drbd_state_change *); | ||
1178 | |||
1179 | -extern void notify_resource_state_change(struct sk_buff *, | ||
1180 | +extern int notify_resource_state_change(struct sk_buff *, | ||
1181 | unsigned int, | ||
1182 | struct drbd_resource_state_change *, | ||
1183 | enum drbd_notification_type type); | ||
1184 | -extern void notify_connection_state_change(struct sk_buff *, | ||
1185 | +extern int notify_connection_state_change(struct sk_buff *, | ||
1186 | unsigned int, | ||
1187 | struct drbd_connection_state_change *, | ||
1188 | enum drbd_notification_type type); | ||
1189 | -extern void notify_device_state_change(struct sk_buff *, | ||
1190 | +extern int notify_device_state_change(struct sk_buff *, | ||
1191 | unsigned int, | ||
1192 | struct drbd_device_state_change *, | ||
1193 | enum drbd_notification_type type); | ||
1194 | -extern void notify_peer_device_state_change(struct sk_buff *, | ||
1195 | +extern int notify_peer_device_state_change(struct sk_buff *, | ||
1196 | unsigned int, | ||
1197 | struct drbd_peer_device_state_change *, | ||
1198 | enum drbd_notification_type type); | ||
1199 | diff --git a/drivers/block/loop.c b/drivers/block/loop.c | ||
1200 | index f236b7984b946..2ff17b397cd2f 100644 | ||
1201 | --- a/drivers/block/loop.c | ||
1202 | +++ b/drivers/block/loop.c | ||
1203 | @@ -773,33 +773,33 @@ static ssize_t loop_attr_backing_file_show(struct loop_device *lo, char *buf) | ||
1204 | |||
1205 | static ssize_t loop_attr_offset_show(struct loop_device *lo, char *buf) | ||
1206 | { | ||
1207 | - return sprintf(buf, "%llu\n", (unsigned long long)lo->lo_offset); | ||
1208 | + return sysfs_emit(buf, "%llu\n", (unsigned long long)lo->lo_offset); | ||
1209 | } | ||
1210 | |||
1211 | static ssize_t loop_attr_sizelimit_show(struct loop_device *lo, char *buf) | ||
1212 | { | ||
1213 | - return sprintf(buf, "%llu\n", (unsigned long long)lo->lo_sizelimit); | ||
1214 | + return sysfs_emit(buf, "%llu\n", (unsigned long long)lo->lo_sizelimit); | ||
1215 | } | ||
1216 | |||
1217 | static ssize_t loop_attr_autoclear_show(struct loop_device *lo, char *buf) | ||
1218 | { | ||
1219 | int autoclear = (lo->lo_flags & LO_FLAGS_AUTOCLEAR); | ||
1220 | |||
1221 | - return sprintf(buf, "%s\n", autoclear ? "1" : "0"); | ||
1222 | + return sysfs_emit(buf, "%s\n", autoclear ? "1" : "0"); | ||
1223 | } | ||
1224 | |||
1225 | static ssize_t loop_attr_partscan_show(struct loop_device *lo, char *buf) | ||
1226 | { | ||
1227 | int partscan = (lo->lo_flags & LO_FLAGS_PARTSCAN); | ||
1228 | |||
1229 | - return sprintf(buf, "%s\n", partscan ? "1" : "0"); | ||
1230 | + return sysfs_emit(buf, "%s\n", partscan ? "1" : "0"); | ||
1231 | } | ||
1232 | |||
1233 | static ssize_t loop_attr_dio_show(struct loop_device *lo, char *buf) | ||
1234 | { | ||
1235 | int dio = (lo->lo_flags & LO_FLAGS_DIRECT_IO); | ||
1236 | |||
1237 | - return sprintf(buf, "%s\n", dio ? "1" : "0"); | ||
1238 | + return sysfs_emit(buf, "%s\n", dio ? "1" : "0"); | ||
1239 | } | ||
1240 | |||
1241 | LOOP_ATTR_RO(backing_file); | ||
1242 | diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c | ||
1243 | index 302260e9002c7..45bd0d7d6a942 100644 | ||
1244 | --- a/drivers/block/virtio_blk.c | ||
1245 | +++ b/drivers/block/virtio_blk.c | ||
1246 | @@ -692,9 +692,17 @@ static int virtblk_probe(struct virtio_device *vdev) | ||
1247 | err = virtio_cread_feature(vdev, VIRTIO_BLK_F_BLK_SIZE, | ||
1248 | struct virtio_blk_config, blk_size, | ||
1249 | &blk_size); | ||
1250 | - if (!err) | ||
1251 | + if (!err) { | ||
1252 | + err = blk_validate_block_size(blk_size); | ||
1253 | + if (err) { | ||
1254 | + dev_err(&vdev->dev, | ||
1255 | + "virtio_blk: invalid block size: 0x%x\n", | ||
1256 | + blk_size); | ||
1257 | + goto out_free_tags; | ||
1258 | + } | ||
1259 | + | ||
1260 | blk_queue_logical_block_size(q, blk_size); | ||
1261 | - else | ||
1262 | + } else | ||
1263 | blk_size = queue_logical_block_size(q); | ||
1264 | |||
1265 | /* Use topology information if available */ | ||
1266 | diff --git a/drivers/char/virtio_console.c b/drivers/char/virtio_console.c | ||
1267 | index 2632b0fdb1b53..ba4c546db756f 100644 | ||
1268 | --- a/drivers/char/virtio_console.c | ||
1269 | +++ b/drivers/char/virtio_console.c | ||
1270 | @@ -2004,6 +2004,13 @@ static void virtcons_remove(struct virtio_device *vdev) | ||
1271 | list_del(&portdev->list); | ||
1272 | spin_unlock_irq(&pdrvdata_lock); | ||
1273 | |||
1274 | + /* Device is going away, exit any polling for buffers */ | ||
1275 | + virtio_break_device(vdev); | ||
1276 | + if (use_multiport(portdev)) | ||
1277 | + flush_work(&portdev->control_work); | ||
1278 | + else | ||
1279 | + flush_work(&portdev->config_work); | ||
1280 | + | ||
1281 | /* Disable interrupts for vqs */ | ||
1282 | vdev->config->reset(vdev); | ||
1283 | /* Finish up work that's lined up */ | ||
1284 | @@ -2277,7 +2284,7 @@ static struct virtio_driver virtio_rproc_serial = { | ||
1285 | .remove = virtcons_remove, | ||
1286 | }; | ||
1287 | |||
1288 | -static int __init init(void) | ||
1289 | +static int __init virtio_console_init(void) | ||
1290 | { | ||
1291 | int err; | ||
1292 | |||
1293 | @@ -2314,7 +2321,7 @@ free: | ||
1294 | return err; | ||
1295 | } | ||
1296 | |||
1297 | -static void __exit fini(void) | ||
1298 | +static void __exit virtio_console_fini(void) | ||
1299 | { | ||
1300 | reclaim_dma_bufs(); | ||
1301 | |||
1302 | @@ -2324,8 +2331,8 @@ static void __exit fini(void) | ||
1303 | class_destroy(pdrvdata.class); | ||
1304 | debugfs_remove_recursive(pdrvdata.debugfs_dir); | ||
1305 | } | ||
1306 | -module_init(init); | ||
1307 | -module_exit(fini); | ||
1308 | +module_init(virtio_console_init); | ||
1309 | +module_exit(virtio_console_fini); | ||
1310 | |||
1311 | MODULE_DESCRIPTION("Virtio console driver"); | ||
1312 | MODULE_LICENSE("GPL"); | ||
1313 | diff --git a/drivers/clk/clk-clps711x.c b/drivers/clk/clk-clps711x.c | ||
1314 | index 9193f64561f6f..4dcf15a882699 100644 | ||
1315 | --- a/drivers/clk/clk-clps711x.c | ||
1316 | +++ b/drivers/clk/clk-clps711x.c | ||
1317 | @@ -32,11 +32,13 @@ static const struct clk_div_table spi_div_table[] = { | ||
1318 | { .val = 1, .div = 8, }, | ||
1319 | { .val = 2, .div = 2, }, | ||
1320 | { .val = 3, .div = 1, }, | ||
1321 | + { /* sentinel */ } | ||
1322 | }; | ||
1323 | |||
1324 | static const struct clk_div_table timer_div_table[] = { | ||
1325 | { .val = 0, .div = 256, }, | ||
1326 | { .val = 1, .div = 1, }, | ||
1327 | + { /* sentinel */ } | ||
1328 | }; | ||
1329 | |||
1330 | struct clps711x_clk { | ||
1331 | diff --git a/drivers/clk/loongson1/clk-loongson1c.c b/drivers/clk/loongson1/clk-loongson1c.c | ||
1332 | index 3466f7320b40b..e3aa502761a31 100644 | ||
1333 | --- a/drivers/clk/loongson1/clk-loongson1c.c | ||
1334 | +++ b/drivers/clk/loongson1/clk-loongson1c.c | ||
1335 | @@ -40,6 +40,7 @@ static const struct clk_div_table ahb_div_table[] = { | ||
1336 | [1] = { .val = 1, .div = 4 }, | ||
1337 | [2] = { .val = 2, .div = 3 }, | ||
1338 | [3] = { .val = 3, .div = 3 }, | ||
1339 | + [4] = { /* sentinel */ } | ||
1340 | }; | ||
1341 | |||
1342 | void __init ls1x_clk_init(void) | ||
1343 | diff --git a/drivers/clk/qcom/clk-rcg2.c b/drivers/clk/qcom/clk-rcg2.c | ||
1344 | index 29abb600d7e15..e4d605dcc03db 100644 | ||
1345 | --- a/drivers/clk/qcom/clk-rcg2.c | ||
1346 | +++ b/drivers/clk/qcom/clk-rcg2.c | ||
1347 | @@ -644,6 +644,7 @@ static const struct frac_entry frac_table_pixel[] = { | ||
1348 | { 2, 9 }, | ||
1349 | { 4, 9 }, | ||
1350 | { 1, 1 }, | ||
1351 | + { 2, 3 }, | ||
1352 | { } | ||
1353 | }; | ||
1354 | |||
1355 | diff --git a/drivers/clk/tegra/clk-emc.c b/drivers/clk/tegra/clk-emc.c | ||
1356 | index 74e7544f861ba..348e7196b7b93 100644 | ||
1357 | --- a/drivers/clk/tegra/clk-emc.c | ||
1358 | +++ b/drivers/clk/tegra/clk-emc.c | ||
1359 | @@ -190,6 +190,7 @@ static struct tegra_emc *emc_ensure_emc_driver(struct tegra_clk_emc *tegra) | ||
1360 | |||
1361 | tegra->emc = platform_get_drvdata(pdev); | ||
1362 | if (!tegra->emc) { | ||
1363 | + put_device(&pdev->dev); | ||
1364 | pr_err("%s: cannot find EMC driver\n", __func__); | ||
1365 | return NULL; | ||
1366 | } | ||
1367 | diff --git a/drivers/clk/uniphier/clk-uniphier-fixed-rate.c b/drivers/clk/uniphier/clk-uniphier-fixed-rate.c | ||
1368 | index 0ad0d46173c0e..225de2302cb76 100644 | ||
1369 | --- a/drivers/clk/uniphier/clk-uniphier-fixed-rate.c | ||
1370 | +++ b/drivers/clk/uniphier/clk-uniphier-fixed-rate.c | ||
1371 | @@ -33,6 +33,7 @@ struct clk_hw *uniphier_clk_register_fixed_rate(struct device *dev, | ||
1372 | |||
1373 | init.name = name; | ||
1374 | init.ops = &clk_fixed_rate_ops; | ||
1375 | + init.flags = 0; | ||
1376 | init.parent_names = NULL; | ||
1377 | init.num_parents = 0; | ||
1378 | |||
1379 | diff --git a/drivers/clocksource/acpi_pm.c b/drivers/clocksource/acpi_pm.c | ||
1380 | index 28037d0b8dcd1..55348e7c1e6f7 100644 | ||
1381 | --- a/drivers/clocksource/acpi_pm.c | ||
1382 | +++ b/drivers/clocksource/acpi_pm.c | ||
1383 | @@ -230,8 +230,10 @@ static int __init parse_pmtmr(char *arg) | ||
1384 | int ret; | ||
1385 | |||
1386 | ret = kstrtouint(arg, 16, &base); | ||
1387 | - if (ret) | ||
1388 | - return ret; | ||
1389 | + if (ret) { | ||
1390 | + pr_warn("PMTMR: invalid 'pmtmr=' value: '%s'\n", arg); | ||
1391 | + return 1; | ||
1392 | + } | ||
1393 | |||
1394 | pr_info("PMTMR IOPort override: 0x%04x -> 0x%04x\n", pmtmr_ioport, | ||
1395 | base); | ||
1396 | diff --git a/drivers/crypto/ccp/ccp-dmaengine.c b/drivers/crypto/ccp/ccp-dmaengine.c | ||
1397 | index c4581510c3a14..6f9e228fc8adb 100644 | ||
1398 | --- a/drivers/crypto/ccp/ccp-dmaengine.c | ||
1399 | +++ b/drivers/crypto/ccp/ccp-dmaengine.c | ||
1400 | @@ -621,6 +621,20 @@ static int ccp_terminate_all(struct dma_chan *dma_chan) | ||
1401 | return 0; | ||
1402 | } | ||
1403 | |||
1404 | +static void ccp_dma_release(struct ccp_device *ccp) | ||
1405 | +{ | ||
1406 | + struct ccp_dma_chan *chan; | ||
1407 | + struct dma_chan *dma_chan; | ||
1408 | + unsigned int i; | ||
1409 | + | ||
1410 | + for (i = 0; i < ccp->cmd_q_count; i++) { | ||
1411 | + chan = ccp->ccp_dma_chan + i; | ||
1412 | + dma_chan = &chan->dma_chan; | ||
1413 | + tasklet_kill(&chan->cleanup_tasklet); | ||
1414 | + list_del_rcu(&dma_chan->device_node); | ||
1415 | + } | ||
1416 | +} | ||
1417 | + | ||
1418 | int ccp_dmaengine_register(struct ccp_device *ccp) | ||
1419 | { | ||
1420 | struct ccp_dma_chan *chan; | ||
1421 | @@ -715,6 +729,7 @@ int ccp_dmaengine_register(struct ccp_device *ccp) | ||
1422 | return 0; | ||
1423 | |||
1424 | err_reg: | ||
1425 | + ccp_dma_release(ccp); | ||
1426 | kmem_cache_destroy(ccp->dma_desc_cache); | ||
1427 | |||
1428 | err_cache: | ||
1429 | @@ -728,6 +743,7 @@ void ccp_dmaengine_unregister(struct ccp_device *ccp) | ||
1430 | struct dma_device *dma_dev = &ccp->dma_dev; | ||
1431 | |||
1432 | dma_async_device_unregister(dma_dev); | ||
1433 | + ccp_dma_release(ccp); | ||
1434 | |||
1435 | kmem_cache_destroy(ccp->dma_desc_cache); | ||
1436 | kmem_cache_destroy(ccp->dma_cmd_cache); | ||
1437 | diff --git a/drivers/crypto/mxs-dcp.c b/drivers/crypto/mxs-dcp.c | ||
1438 | index 0e14a6642de42..ad714798f5d86 100644 | ||
1439 | --- a/drivers/crypto/mxs-dcp.c | ||
1440 | +++ b/drivers/crypto/mxs-dcp.c | ||
1441 | @@ -328,7 +328,7 @@ static int mxs_dcp_aes_block_crypt(struct crypto_async_request *arq) | ||
1442 | memset(key + AES_KEYSIZE_128, 0, AES_KEYSIZE_128); | ||
1443 | } | ||
1444 | |||
1445 | - for_each_sg(req->src, src, sg_nents(src), i) { | ||
1446 | + for_each_sg(req->src, src, sg_nents(req->src), i) { | ||
1447 | src_buf = sg_virt(src); | ||
1448 | len = sg_dma_len(src); | ||
1449 | tlen += len; | ||
1450 | diff --git a/drivers/crypto/vmx/Kconfig b/drivers/crypto/vmx/Kconfig | ||
1451 | index c3d524ea69987..f39eeca87932e 100644 | ||
1452 | --- a/drivers/crypto/vmx/Kconfig | ||
1453 | +++ b/drivers/crypto/vmx/Kconfig | ||
1454 | @@ -1,7 +1,11 @@ | ||
1455 | config CRYPTO_DEV_VMX_ENCRYPT | ||
1456 | tristate "Encryption acceleration support on P8 CPU" | ||
1457 | depends on CRYPTO_DEV_VMX | ||
1458 | + select CRYPTO_AES | ||
1459 | + select CRYPTO_CBC | ||
1460 | + select CRYPTO_CTR | ||
1461 | select CRYPTO_GHASH | ||
1462 | + select CRYPTO_XTS | ||
1463 | default m | ||
1464 | help | ||
1465 | Support for VMX cryptographic acceleration instructions on Power8 CPU. | ||
1466 | diff --git a/drivers/dma/sh/shdma-base.c b/drivers/dma/sh/shdma-base.c | ||
1467 | index 4f8dfe77da3c5..12fa48e380cf5 100644 | ||
1468 | --- a/drivers/dma/sh/shdma-base.c | ||
1469 | +++ b/drivers/dma/sh/shdma-base.c | ||
1470 | @@ -118,10 +118,8 @@ static dma_cookie_t shdma_tx_submit(struct dma_async_tx_descriptor *tx) | ||
1471 | ret = pm_runtime_get(schan->dev); | ||
1472 | |||
1473 | spin_unlock_irq(&schan->chan_lock); | ||
1474 | - if (ret < 0) { | ||
1475 | + if (ret < 0) | ||
1476 | dev_err(schan->dev, "%s(): GET = %d\n", __func__, ret); | ||
1477 | - pm_runtime_put(schan->dev); | ||
1478 | - } | ||
1479 | |||
1480 | pm_runtime_barrier(schan->dev); | ||
1481 | |||
1482 | diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_events.c b/drivers/gpu/drm/amd/amdkfd/kfd_events.c | ||
1483 | index 6a3470f849989..732713ff3190d 100644 | ||
1484 | --- a/drivers/gpu/drm/amd/amdkfd/kfd_events.c | ||
1485 | +++ b/drivers/gpu/drm/amd/amdkfd/kfd_events.c | ||
1486 | @@ -607,6 +607,8 @@ static struct kfd_event_waiter *alloc_event_waiters(uint32_t num_events) | ||
1487 | event_waiters = kmalloc_array(num_events, | ||
1488 | sizeof(struct kfd_event_waiter), | ||
1489 | GFP_KERNEL); | ||
1490 | + if (!event_waiters) | ||
1491 | + return NULL; | ||
1492 | |||
1493 | for (i = 0; (event_waiters) && (i < num_events) ; i++) { | ||
1494 | INIT_LIST_HEAD(&event_waiters[i].waiters); | ||
1495 | diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c | ||
1496 | index b07b32eb0c4bb..6f93250518e3e 100644 | ||
1497 | --- a/drivers/gpu/drm/drm_edid.c | ||
1498 | +++ b/drivers/gpu/drm/drm_edid.c | ||
1499 | @@ -3791,16 +3791,8 @@ static void drm_parse_hdmi_deep_color_info(struct drm_connector *connector, | ||
1500 | connector->name, dc_bpc); | ||
1501 | info->bpc = dc_bpc; | ||
1502 | |||
1503 | - /* | ||
1504 | - * Deep color support mandates RGB444 support for all video | ||
1505 | - * modes and forbids YCRCB422 support for all video modes per | ||
1506 | - * HDMI 1.3 spec. | ||
1507 | - */ | ||
1508 | - info->color_formats = DRM_COLOR_FORMAT_RGB444; | ||
1509 | - | ||
1510 | /* YCRCB444 is optional according to spec. */ | ||
1511 | if (hdmi[6] & DRM_EDID_HDMI_DC_Y444) { | ||
1512 | - info->color_formats |= DRM_COLOR_FORMAT_YCRCB444; | ||
1513 | DRM_DEBUG("%s: HDMI sink does YCRCB444 in deep color.\n", | ||
1514 | connector->name); | ||
1515 | } | ||
1516 | diff --git a/drivers/gpu/drm/imx/parallel-display.c b/drivers/gpu/drm/imx/parallel-display.c | ||
1517 | index d796ada2a47ab..924a11232b843 100644 | ||
1518 | --- a/drivers/gpu/drm/imx/parallel-display.c | ||
1519 | +++ b/drivers/gpu/drm/imx/parallel-display.c | ||
1520 | @@ -83,8 +83,10 @@ static int imx_pd_connector_get_modes(struct drm_connector *connector) | ||
1521 | ret = of_get_drm_display_mode(np, &imxpd->mode, | ||
1522 | &imxpd->bus_flags, | ||
1523 | OF_USE_NATIVE_MODE); | ||
1524 | - if (ret) | ||
1525 | + if (ret) { | ||
1526 | + drm_mode_destroy(connector->dev, mode); | ||
1527 | return ret; | ||
1528 | + } | ||
1529 | |||
1530 | drm_mode_copy(mode, &imxpd->mode); | ||
1531 | mode->type |= DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED, | ||
1532 | diff --git a/drivers/gpu/drm/tegra/dsi.c b/drivers/gpu/drm/tegra/dsi.c | ||
1533 | index 3dea1216bafdc..dfd9e0b9582d8 100644 | ||
1534 | --- a/drivers/gpu/drm/tegra/dsi.c | ||
1535 | +++ b/drivers/gpu/drm/tegra/dsi.c | ||
1536 | @@ -1475,8 +1475,10 @@ static int tegra_dsi_ganged_probe(struct tegra_dsi *dsi) | ||
1537 | dsi->slave = platform_get_drvdata(gangster); | ||
1538 | of_node_put(np); | ||
1539 | |||
1540 | - if (!dsi->slave) | ||
1541 | + if (!dsi->slave) { | ||
1542 | + put_device(&gangster->dev); | ||
1543 | return -EPROBE_DEFER; | ||
1544 | + } | ||
1545 | |||
1546 | dsi->slave->master = dsi; | ||
1547 | } | ||
1548 | diff --git a/drivers/gpu/ipu-v3/ipu-di.c b/drivers/gpu/ipu-v3/ipu-di.c | ||
1549 | index a8d87ddd8a176..dc0511b22600c 100644 | ||
1550 | --- a/drivers/gpu/ipu-v3/ipu-di.c | ||
1551 | +++ b/drivers/gpu/ipu-v3/ipu-di.c | ||
1552 | @@ -460,8 +460,9 @@ static void ipu_di_config_clock(struct ipu_di *di, | ||
1553 | |||
1554 | error = rate / (sig->mode.pixelclock / 1000); | ||
1555 | |||
1556 | - dev_dbg(di->ipu->dev, " IPU clock can give %lu with divider %u, error %d.%u%%\n", | ||
1557 | - rate, div, (signed)(error - 1000) / 10, error % 10); | ||
1558 | + dev_dbg(di->ipu->dev, " IPU clock can give %lu with divider %u, error %c%d.%d%%\n", | ||
1559 | + rate, div, error < 1000 ? '-' : '+', | ||
1560 | + abs(error - 1000) / 10, abs(error - 1000) % 10); | ||
1561 | |||
1562 | /* Allow a 1% error */ | ||
1563 | if (error < 1010 && error >= 990) { | ||
1564 | diff --git a/drivers/hid/i2c-hid/i2c-hid-core.c b/drivers/hid/i2c-hid/i2c-hid-core.c | ||
1565 | index 518ccf15188ef..26c7701fb188d 100644 | ||
1566 | --- a/drivers/hid/i2c-hid/i2c-hid-core.c | ||
1567 | +++ b/drivers/hid/i2c-hid/i2c-hid-core.c | ||
1568 | @@ -643,6 +643,17 @@ static int i2c_hid_get_raw_report(struct hid_device *hid, | ||
1569 | if (report_type == HID_OUTPUT_REPORT) | ||
1570 | return -EINVAL; | ||
1571 | |||
1572 | + /* | ||
1573 | + * In case of unnumbered reports the response from the device will | ||
1574 | + * not have the report ID that the upper layers expect, so we need | ||
1575 | + * to stash it the buffer ourselves and adjust the data size. | ||
1576 | + */ | ||
1577 | + if (!report_number) { | ||
1578 | + buf[0] = 0; | ||
1579 | + buf++; | ||
1580 | + count--; | ||
1581 | + } | ||
1582 | + | ||
1583 | /* +2 bytes to include the size of the reply in the query buffer */ | ||
1584 | ask_count = min(count + 2, (size_t)ihid->bufsize); | ||
1585 | |||
1586 | @@ -664,6 +675,9 @@ static int i2c_hid_get_raw_report(struct hid_device *hid, | ||
1587 | count = min(count, ret_count - 2); | ||
1588 | memcpy(buf, ihid->rawbuf + 2, count); | ||
1589 | |||
1590 | + if (!report_number) | ||
1591 | + count++; | ||
1592 | + | ||
1593 | return count; | ||
1594 | } | ||
1595 | |||
1596 | @@ -680,17 +694,19 @@ static int i2c_hid_output_raw_report(struct hid_device *hid, __u8 *buf, | ||
1597 | |||
1598 | mutex_lock(&ihid->reset_lock); | ||
1599 | |||
1600 | - if (report_id) { | ||
1601 | - buf++; | ||
1602 | - count--; | ||
1603 | - } | ||
1604 | - | ||
1605 | + /* | ||
1606 | + * Note that both numbered and unnumbered reports passed here | ||
1607 | + * are supposed to have report ID stored in the 1st byte of the | ||
1608 | + * buffer, so we strip it off unconditionally before passing payload | ||
1609 | + * to i2c_hid_set_or_send_report which takes care of encoding | ||
1610 | + * everything properly. | ||
1611 | + */ | ||
1612 | ret = i2c_hid_set_or_send_report(client, | ||
1613 | report_type == HID_FEATURE_REPORT ? 0x03 : 0x02, | ||
1614 | - report_id, buf, count, use_data); | ||
1615 | + report_id, buf + 1, count - 1, use_data); | ||
1616 | |||
1617 | - if (report_id && ret >= 0) | ||
1618 | - ret++; /* add report_id to the number of transfered bytes */ | ||
1619 | + if (ret >= 0) | ||
1620 | + ret++; /* add report_id to the number of transferred bytes */ | ||
1621 | |||
1622 | mutex_unlock(&ihid->reset_lock); | ||
1623 | |||
1624 | diff --git a/drivers/hwmon/pmbus/pmbus.h b/drivers/hwmon/pmbus/pmbus.h | ||
1625 | index bfcb13bae34bd..8b6acb7497e2e 100644 | ||
1626 | --- a/drivers/hwmon/pmbus/pmbus.h | ||
1627 | +++ b/drivers/hwmon/pmbus/pmbus.h | ||
1628 | @@ -262,6 +262,7 @@ enum pmbus_regs { | ||
1629 | /* | ||
1630 | * STATUS_VOUT, STATUS_INPUT | ||
1631 | */ | ||
1632 | +#define PB_VOLTAGE_VIN_OFF BIT(3) | ||
1633 | #define PB_VOLTAGE_UV_FAULT BIT(4) | ||
1634 | #define PB_VOLTAGE_UV_WARNING BIT(5) | ||
1635 | #define PB_VOLTAGE_OV_WARNING BIT(6) | ||
1636 | diff --git a/drivers/hwmon/pmbus/pmbus_core.c b/drivers/hwmon/pmbus/pmbus_core.c | ||
1637 | index 0d75bc7b50657..a662702632a8c 100644 | ||
1638 | --- a/drivers/hwmon/pmbus/pmbus_core.c | ||
1639 | +++ b/drivers/hwmon/pmbus/pmbus_core.c | ||
1640 | @@ -1133,7 +1133,7 @@ static const struct pmbus_limit_attr vin_limit_attrs[] = { | ||
1641 | .reg = PMBUS_VIN_UV_FAULT_LIMIT, | ||
1642 | .attr = "lcrit", | ||
1643 | .alarm = "lcrit_alarm", | ||
1644 | - .sbit = PB_VOLTAGE_UV_FAULT, | ||
1645 | + .sbit = PB_VOLTAGE_UV_FAULT | PB_VOLTAGE_VIN_OFF, | ||
1646 | }, { | ||
1647 | .reg = PMBUS_VIN_OV_WARN_LIMIT, | ||
1648 | .attr = "max", | ||
1649 | @@ -1818,10 +1818,14 @@ static int pmbus_regulator_is_enabled(struct regulator_dev *rdev) | ||
1650 | { | ||
1651 | struct device *dev = rdev_get_dev(rdev); | ||
1652 | struct i2c_client *client = to_i2c_client(dev->parent); | ||
1653 | + struct pmbus_data *data = i2c_get_clientdata(client); | ||
1654 | u8 page = rdev_get_id(rdev); | ||
1655 | int ret; | ||
1656 | |||
1657 | + mutex_lock(&data->update_lock); | ||
1658 | ret = pmbus_read_byte_data(client, page, PMBUS_OPERATION); | ||
1659 | + mutex_unlock(&data->update_lock); | ||
1660 | + | ||
1661 | if (ret < 0) | ||
1662 | return ret; | ||
1663 | |||
1664 | @@ -1832,11 +1836,17 @@ static int _pmbus_regulator_on_off(struct regulator_dev *rdev, bool enable) | ||
1665 | { | ||
1666 | struct device *dev = rdev_get_dev(rdev); | ||
1667 | struct i2c_client *client = to_i2c_client(dev->parent); | ||
1668 | + struct pmbus_data *data = i2c_get_clientdata(client); | ||
1669 | u8 page = rdev_get_id(rdev); | ||
1670 | + int ret; | ||
1671 | |||
1672 | - return pmbus_update_byte_data(client, page, PMBUS_OPERATION, | ||
1673 | - PB_OPERATION_CONTROL_ON, | ||
1674 | - enable ? PB_OPERATION_CONTROL_ON : 0); | ||
1675 | + mutex_lock(&data->update_lock); | ||
1676 | + ret = pmbus_update_byte_data(client, page, PMBUS_OPERATION, | ||
1677 | + PB_OPERATION_CONTROL_ON, | ||
1678 | + enable ? PB_OPERATION_CONTROL_ON : 0); | ||
1679 | + mutex_unlock(&data->update_lock); | ||
1680 | + | ||
1681 | + return ret; | ||
1682 | } | ||
1683 | |||
1684 | static int pmbus_regulator_enable(struct regulator_dev *rdev) | ||
1685 | diff --git a/drivers/hwmon/sch56xx-common.c b/drivers/hwmon/sch56xx-common.c | ||
1686 | index 68c350c704fba..5fd9b6769d420 100644 | ||
1687 | --- a/drivers/hwmon/sch56xx-common.c | ||
1688 | +++ b/drivers/hwmon/sch56xx-common.c | ||
1689 | @@ -438,7 +438,7 @@ struct sch56xx_watchdog_data *sch56xx_watchdog_register(struct device *parent, | ||
1690 | if (nowayout) | ||
1691 | set_bit(WDOG_NO_WAY_OUT, &data->wddev.status); | ||
1692 | if (output_enable & SCH56XX_WDOG_OUTPUT_ENABLE) | ||
1693 | - set_bit(WDOG_ACTIVE, &data->wddev.status); | ||
1694 | + set_bit(WDOG_HW_RUNNING, &data->wddev.status); | ||
1695 | |||
1696 | /* Since the watchdog uses a downcounter there is no register to read | ||
1697 | the BIOS set timeout from (if any was set at all) -> | ||
1698 | diff --git a/drivers/hwtracing/coresight/coresight-etm4x-sysfs.c b/drivers/hwtracing/coresight/coresight-etm4x-sysfs.c | ||
1699 | index 00904c6b5b5e5..1bf107af8ce00 100644 | ||
1700 | --- a/drivers/hwtracing/coresight/coresight-etm4x-sysfs.c | ||
1701 | +++ b/drivers/hwtracing/coresight/coresight-etm4x-sysfs.c | ||
1702 | @@ -379,8 +379,12 @@ static ssize_t mode_store(struct device *dev, | ||
1703 | mode = ETM_MODE_QELEM(config->mode); | ||
1704 | /* start by clearing QE bits */ | ||
1705 | config->cfg &= ~(BIT(13) | BIT(14)); | ||
1706 | - /* if supported, Q elements with instruction counts are enabled */ | ||
1707 | - if ((mode & BIT(0)) && (drvdata->q_support & BIT(0))) | ||
1708 | + /* | ||
1709 | + * if supported, Q elements with instruction counts are enabled. | ||
1710 | + * Always set the low bit for any requested mode. Valid combos are | ||
1711 | + * 0b00, 0b01 and 0b11. | ||
1712 | + */ | ||
1713 | + if (mode && drvdata->q_support) | ||
1714 | config->cfg |= BIT(13); | ||
1715 | /* | ||
1716 | * if supported, Q elements with and without instruction | ||
1717 | diff --git a/drivers/i2c/busses/i2c-pasemi.c b/drivers/i2c/busses/i2c-pasemi.c | ||
1718 | index df1dbc92a0244..25c877654c32a 100644 | ||
1719 | --- a/drivers/i2c/busses/i2c-pasemi.c | ||
1720 | +++ b/drivers/i2c/busses/i2c-pasemi.c | ||
1721 | @@ -145,6 +145,12 @@ static int pasemi_i2c_xfer_msg(struct i2c_adapter *adapter, | ||
1722 | |||
1723 | TXFIFO_WR(smbus, msg->buf[msg->len-1] | | ||
1724 | (stop ? MTXFIFO_STOP : 0)); | ||
1725 | + | ||
1726 | + if (stop) { | ||
1727 | + err = pasemi_smb_waitready(smbus); | ||
1728 | + if (err) | ||
1729 | + goto reset_out; | ||
1730 | + } | ||
1731 | } | ||
1732 | |||
1733 | return 0; | ||
1734 | diff --git a/drivers/i2c/busses/i2c-xiic.c b/drivers/i2c/busses/i2c-xiic.c | ||
1735 | index b72cf2f8da5cb..c65a5d0af555b 100644 | ||
1736 | --- a/drivers/i2c/busses/i2c-xiic.c | ||
1737 | +++ b/drivers/i2c/busses/i2c-xiic.c | ||
1738 | @@ -727,7 +727,6 @@ static const struct i2c_algorithm xiic_algorithm = { | ||
1739 | |||
1740 | static struct i2c_adapter xiic_adapter = { | ||
1741 | .owner = THIS_MODULE, | ||
1742 | - .name = DRIVER_NAME, | ||
1743 | .class = I2C_CLASS_DEPRECATED, | ||
1744 | .algo = &xiic_algorithm, | ||
1745 | }; | ||
1746 | @@ -763,6 +762,8 @@ static int xiic_i2c_probe(struct platform_device *pdev) | ||
1747 | i2c_set_adapdata(&i2c->adap, i2c); | ||
1748 | i2c->adap.dev.parent = &pdev->dev; | ||
1749 | i2c->adap.dev.of_node = pdev->dev.of_node; | ||
1750 | + snprintf(i2c->adap.name, sizeof(i2c->adap.name), | ||
1751 | + DRIVER_NAME " %s", pdev->name); | ||
1752 | |||
1753 | mutex_init(&i2c->lock); | ||
1754 | init_waitqueue_head(&i2c->wait); | ||
1755 | diff --git a/drivers/i2c/muxes/i2c-demux-pinctrl.c b/drivers/i2c/muxes/i2c-demux-pinctrl.c | ||
1756 | index a86c511c29e0e..c347860b3690f 100644 | ||
1757 | --- a/drivers/i2c/muxes/i2c-demux-pinctrl.c | ||
1758 | +++ b/drivers/i2c/muxes/i2c-demux-pinctrl.c | ||
1759 | @@ -259,7 +259,7 @@ static int i2c_demux_pinctrl_probe(struct platform_device *pdev) | ||
1760 | |||
1761 | err = device_create_file(&pdev->dev, &dev_attr_available_masters); | ||
1762 | if (err) | ||
1763 | - goto err_rollback; | ||
1764 | + goto err_rollback_activation; | ||
1765 | |||
1766 | err = device_create_file(&pdev->dev, &dev_attr_current_master); | ||
1767 | if (err) | ||
1768 | @@ -269,8 +269,9 @@ static int i2c_demux_pinctrl_probe(struct platform_device *pdev) | ||
1769 | |||
1770 | err_rollback_available: | ||
1771 | device_remove_file(&pdev->dev, &dev_attr_available_masters); | ||
1772 | -err_rollback: | ||
1773 | +err_rollback_activation: | ||
1774 | i2c_demux_deactivate_master(priv); | ||
1775 | +err_rollback: | ||
1776 | for (j = 0; j < i; j++) { | ||
1777 | of_node_put(priv->chan[j].parent_np); | ||
1778 | of_changeset_destroy(&priv->chan[j].chgset); | ||
1779 | diff --git a/drivers/iio/adc/twl6030-gpadc.c b/drivers/iio/adc/twl6030-gpadc.c | ||
1780 | index becbb0aef232b..5075f594d97f7 100644 | ||
1781 | --- a/drivers/iio/adc/twl6030-gpadc.c | ||
1782 | +++ b/drivers/iio/adc/twl6030-gpadc.c | ||
1783 | @@ -927,6 +927,8 @@ static int twl6030_gpadc_probe(struct platform_device *pdev) | ||
1784 | ret = devm_request_threaded_irq(dev, irq, NULL, | ||
1785 | twl6030_gpadc_irq_handler, | ||
1786 | IRQF_ONESHOT, "twl6030_gpadc", indio_dev); | ||
1787 | + if (ret) | ||
1788 | + return ret; | ||
1789 | |||
1790 | ret = twl6030_gpadc_enable_irq(TWL6030_GPADC_RT_SW1_EOC_MASK); | ||
1791 | if (ret < 0) { | ||
1792 | diff --git a/drivers/iio/inkern.c b/drivers/iio/inkern.c | ||
1793 | index c4757e6367e7a..218cf4567ab58 100644 | ||
1794 | --- a/drivers/iio/inkern.c | ||
1795 | +++ b/drivers/iio/inkern.c | ||
1796 | @@ -591,13 +591,35 @@ EXPORT_SYMBOL_GPL(iio_read_channel_average_raw); | ||
1797 | static int iio_convert_raw_to_processed_unlocked(struct iio_channel *chan, | ||
1798 | int raw, int *processed, unsigned int scale) | ||
1799 | { | ||
1800 | - int scale_type, scale_val, scale_val2, offset; | ||
1801 | + int scale_type, scale_val, scale_val2; | ||
1802 | + int offset_type, offset_val, offset_val2; | ||
1803 | s64 raw64 = raw; | ||
1804 | - int ret; | ||
1805 | |||
1806 | - ret = iio_channel_read(chan, &offset, NULL, IIO_CHAN_INFO_OFFSET); | ||
1807 | - if (ret >= 0) | ||
1808 | - raw64 += offset; | ||
1809 | + offset_type = iio_channel_read(chan, &offset_val, &offset_val2, | ||
1810 | + IIO_CHAN_INFO_OFFSET); | ||
1811 | + if (offset_type >= 0) { | ||
1812 | + switch (offset_type) { | ||
1813 | + case IIO_VAL_INT: | ||
1814 | + break; | ||
1815 | + case IIO_VAL_INT_PLUS_MICRO: | ||
1816 | + case IIO_VAL_INT_PLUS_NANO: | ||
1817 | + /* | ||
1818 | + * Both IIO_VAL_INT_PLUS_MICRO and IIO_VAL_INT_PLUS_NANO | ||
1819 | + * implicitely truncate the offset to it's integer form. | ||
1820 | + */ | ||
1821 | + break; | ||
1822 | + case IIO_VAL_FRACTIONAL: | ||
1823 | + offset_val /= offset_val2; | ||
1824 | + break; | ||
1825 | + case IIO_VAL_FRACTIONAL_LOG2: | ||
1826 | + offset_val >>= offset_val2; | ||
1827 | + break; | ||
1828 | + default: | ||
1829 | + return -EINVAL; | ||
1830 | + } | ||
1831 | + | ||
1832 | + raw64 += offset_val; | ||
1833 | + } | ||
1834 | |||
1835 | scale_type = iio_channel_read(chan, &scale_val, &scale_val2, | ||
1836 | IIO_CHAN_INFO_SCALE); | ||
1837 | @@ -606,7 +628,7 @@ static int iio_convert_raw_to_processed_unlocked(struct iio_channel *chan, | ||
1838 | |||
1839 | switch (scale_type) { | ||
1840 | case IIO_VAL_INT: | ||
1841 | - *processed = raw64 * scale_val; | ||
1842 | + *processed = raw64 * scale_val * scale; | ||
1843 | break; | ||
1844 | case IIO_VAL_INT_PLUS_MICRO: | ||
1845 | if (scale_val2 < 0) | ||
1846 | diff --git a/drivers/input/input.c b/drivers/input/input.c | ||
1847 | index cb31236425a11..5d94fc3fce0bb 100644 | ||
1848 | --- a/drivers/input/input.c | ||
1849 | +++ b/drivers/input/input.c | ||
1850 | @@ -2112,12 +2112,6 @@ int input_register_device(struct input_dev *dev) | ||
1851 | /* KEY_RESERVED is not supposed to be transmitted to userspace. */ | ||
1852 | __clear_bit(KEY_RESERVED, dev->keybit); | ||
1853 | |||
1854 | - /* Buttonpads should not map BTN_RIGHT and/or BTN_MIDDLE. */ | ||
1855 | - if (test_bit(INPUT_PROP_BUTTONPAD, dev->propbit)) { | ||
1856 | - __clear_bit(BTN_RIGHT, dev->keybit); | ||
1857 | - __clear_bit(BTN_MIDDLE, dev->keybit); | ||
1858 | - } | ||
1859 | - | ||
1860 | /* Make sure that bitmasks not mentioned in dev->evbit are clean. */ | ||
1861 | input_cleanse_bitmasks(dev); | ||
1862 | |||
1863 | diff --git a/drivers/iommu/arm-smmu-v3.c b/drivers/iommu/arm-smmu-v3.c | ||
1864 | index 48d3820087881..db40ce599e974 100644 | ||
1865 | --- a/drivers/iommu/arm-smmu-v3.c | ||
1866 | +++ b/drivers/iommu/arm-smmu-v3.c | ||
1867 | @@ -1171,6 +1171,7 @@ static irqreturn_t arm_smmu_evtq_thread(int irq, void *dev) | ||
1868 | dev_info(smmu->dev, "\t0x%016llx\n", | ||
1869 | (unsigned long long)evt[i]); | ||
1870 | |||
1871 | + cond_resched(); | ||
1872 | } | ||
1873 | |||
1874 | /* | ||
1875 | diff --git a/drivers/irqchip/irq-nvic.c b/drivers/irqchip/irq-nvic.c | ||
1876 | index 9694529b709de..330beb62d015c 100644 | ||
1877 | --- a/drivers/irqchip/irq-nvic.c | ||
1878 | +++ b/drivers/irqchip/irq-nvic.c | ||
1879 | @@ -108,6 +108,7 @@ static int __init nvic_of_init(struct device_node *node, | ||
1880 | |||
1881 | if (!nvic_irq_domain) { | ||
1882 | pr_warn("Failed to allocate irq domain\n"); | ||
1883 | + iounmap(nvic_base); | ||
1884 | return -ENOMEM; | ||
1885 | } | ||
1886 | |||
1887 | @@ -117,6 +118,7 @@ static int __init nvic_of_init(struct device_node *node, | ||
1888 | if (ret) { | ||
1889 | pr_warn("Failed to allocate irq chips\n"); | ||
1890 | irq_domain_remove(nvic_irq_domain); | ||
1891 | + iounmap(nvic_base); | ||
1892 | return ret; | ||
1893 | } | ||
1894 | |||
1895 | diff --git a/drivers/md/dm-ioctl.c b/drivers/md/dm-ioctl.c | ||
1896 | index eb2659a123108..70245782e7f60 100644 | ||
1897 | --- a/drivers/md/dm-ioctl.c | ||
1898 | +++ b/drivers/md/dm-ioctl.c | ||
1899 | @@ -16,6 +16,7 @@ | ||
1900 | #include <linux/dm-ioctl.h> | ||
1901 | #include <linux/hdreg.h> | ||
1902 | #include <linux/compat.h> | ||
1903 | +#include <linux/nospec.h> | ||
1904 | |||
1905 | #include <asm/uaccess.h> | ||
1906 | |||
1907 | @@ -1642,6 +1643,7 @@ static ioctl_fn lookup_ioctl(unsigned int cmd, int *ioctl_flags) | ||
1908 | if (unlikely(cmd >= ARRAY_SIZE(_ioctls))) | ||
1909 | return NULL; | ||
1910 | |||
1911 | + cmd = array_index_nospec(cmd, ARRAY_SIZE(_ioctls)); | ||
1912 | *ioctl_flags = _ioctls[cmd].flags; | ||
1913 | return _ioctls[cmd].fn; | ||
1914 | } | ||
1915 | diff --git a/drivers/media/pci/cx88/cx88-mpeg.c b/drivers/media/pci/cx88/cx88-mpeg.c | ||
1916 | index 245357adbc250..37d4512f3eb80 100644 | ||
1917 | --- a/drivers/media/pci/cx88/cx88-mpeg.c | ||
1918 | +++ b/drivers/media/pci/cx88/cx88-mpeg.c | ||
1919 | @@ -175,6 +175,9 @@ int cx8802_start_dma(struct cx8802_dev *dev, | ||
1920 | cx_write(MO_TS_GPCNTRL, GP_COUNT_CONTROL_RESET); | ||
1921 | q->count = 0; | ||
1922 | |||
1923 | + /* clear interrupt status register */ | ||
1924 | + cx_write(MO_TS_INTSTAT, 0x1f1111); | ||
1925 | + | ||
1926 | /* enable irqs */ | ||
1927 | dprintk( 1, "setting the interrupt mask\n" ); | ||
1928 | cx_set(MO_PCI_INTMSK, core->pci_irqmask | PCI_INT_TSINT); | ||
1929 | diff --git a/drivers/media/platform/davinci/vpif.c b/drivers/media/platform/davinci/vpif.c | ||
1930 | index 0380cf2e5775d..736719d6d648d 100644 | ||
1931 | --- a/drivers/media/platform/davinci/vpif.c | ||
1932 | +++ b/drivers/media/platform/davinci/vpif.c | ||
1933 | @@ -437,6 +437,7 @@ static int vpif_probe(struct platform_device *pdev) | ||
1934 | |||
1935 | static int vpif_remove(struct platform_device *pdev) | ||
1936 | { | ||
1937 | + pm_runtime_put(&pdev->dev); | ||
1938 | pm_runtime_disable(&pdev->dev); | ||
1939 | return 0; | ||
1940 | } | ||
1941 | diff --git a/drivers/media/usb/go7007/s2250-board.c b/drivers/media/usb/go7007/s2250-board.c | ||
1942 | index 1466db150d82c..625e77f4dbd2e 100644 | ||
1943 | --- a/drivers/media/usb/go7007/s2250-board.c | ||
1944 | +++ b/drivers/media/usb/go7007/s2250-board.c | ||
1945 | @@ -512,6 +512,7 @@ static int s2250_probe(struct i2c_client *client, | ||
1946 | u8 *data; | ||
1947 | struct go7007 *go = i2c_get_adapdata(adapter); | ||
1948 | struct go7007_usb *usb = go->hpi_context; | ||
1949 | + int err = -EIO; | ||
1950 | |||
1951 | audio = i2c_new_dummy(adapter, TLV320_ADDRESS >> 1); | ||
1952 | if (audio == NULL) | ||
1953 | @@ -540,11 +541,8 @@ static int s2250_probe(struct i2c_client *client, | ||
1954 | V4L2_CID_HUE, -512, 511, 1, 0); | ||
1955 | sd->ctrl_handler = &state->hdl; | ||
1956 | if (state->hdl.error) { | ||
1957 | - int err = state->hdl.error; | ||
1958 | - | ||
1959 | - v4l2_ctrl_handler_free(&state->hdl); | ||
1960 | - kfree(state); | ||
1961 | - return err; | ||
1962 | + err = state->hdl.error; | ||
1963 | + goto fail; | ||
1964 | } | ||
1965 | |||
1966 | state->std = V4L2_STD_NTSC; | ||
1967 | @@ -608,7 +606,7 @@ fail: | ||
1968 | i2c_unregister_device(audio); | ||
1969 | v4l2_ctrl_handler_free(&state->hdl); | ||
1970 | kfree(state); | ||
1971 | - return -EIO; | ||
1972 | + return err; | ||
1973 | } | ||
1974 | |||
1975 | static int s2250_remove(struct i2c_client *client) | ||
1976 | diff --git a/drivers/media/usb/hdpvr/hdpvr-video.c b/drivers/media/usb/hdpvr/hdpvr-video.c | ||
1977 | index 474c11e1d4951..cfd8c09f9ded7 100644 | ||
1978 | --- a/drivers/media/usb/hdpvr/hdpvr-video.c | ||
1979 | +++ b/drivers/media/usb/hdpvr/hdpvr-video.c | ||
1980 | @@ -312,7 +312,6 @@ static int hdpvr_start_streaming(struct hdpvr_device *dev) | ||
1981 | |||
1982 | dev->status = STATUS_STREAMING; | ||
1983 | |||
1984 | - INIT_WORK(&dev->worker, hdpvr_transmit_buffers); | ||
1985 | schedule_work(&dev->worker); | ||
1986 | |||
1987 | v4l2_dbg(MSG_BUFFER, hdpvr_debug, &dev->v4l2_dev, | ||
1988 | @@ -1156,6 +1155,9 @@ int hdpvr_register_videodev(struct hdpvr_device *dev, struct device *parent, | ||
1989 | bool ac3 = dev->flags & HDPVR_FLAG_AC3_CAP; | ||
1990 | int res; | ||
1991 | |||
1992 | + // initialize dev->worker | ||
1993 | + INIT_WORK(&dev->worker, hdpvr_transmit_buffers); | ||
1994 | + | ||
1995 | dev->cur_std = V4L2_STD_525_60; | ||
1996 | dev->width = 720; | ||
1997 | dev->height = 480; | ||
1998 | diff --git a/drivers/memory/emif.c b/drivers/memory/emif.c | ||
1999 | index 88c32b8dc88a1..9f293b931144e 100644 | ||
2000 | --- a/drivers/memory/emif.c | ||
2001 | +++ b/drivers/memory/emif.c | ||
2002 | @@ -1425,7 +1425,7 @@ static struct emif_data *__init_or_module get_device_details( | ||
2003 | temp = devm_kzalloc(dev, sizeof(*pd), GFP_KERNEL); | ||
2004 | dev_info = devm_kzalloc(dev, sizeof(*dev_info), GFP_KERNEL); | ||
2005 | |||
2006 | - if (!emif || !pd || !dev_info) { | ||
2007 | + if (!emif || !temp || !dev_info) { | ||
2008 | dev_err(dev, "%s:%d: allocation error\n", __func__, __LINE__); | ||
2009 | goto error; | ||
2010 | } | ||
2011 | @@ -1517,7 +1517,7 @@ static int __init_or_module emif_probe(struct platform_device *pdev) | ||
2012 | { | ||
2013 | struct emif_data *emif; | ||
2014 | struct resource *res; | ||
2015 | - int irq; | ||
2016 | + int irq, ret; | ||
2017 | |||
2018 | if (pdev->dev.of_node) | ||
2019 | emif = of_get_memory_device_details(pdev->dev.of_node, &pdev->dev); | ||
2020 | @@ -1551,7 +1551,9 @@ static int __init_or_module emif_probe(struct platform_device *pdev) | ||
2021 | emif_onetime_settings(emif); | ||
2022 | emif_debugfs_init(emif); | ||
2023 | disable_and_clear_all_interrupts(emif); | ||
2024 | - setup_interrupts(emif, irq); | ||
2025 | + ret = setup_interrupts(emif, irq); | ||
2026 | + if (ret) | ||
2027 | + goto error; | ||
2028 | |||
2029 | /* One-time actions taken on probing the first device */ | ||
2030 | if (!emif1) { | ||
2031 | diff --git a/drivers/mfd/asic3.c b/drivers/mfd/asic3.c | ||
2032 | index 0413c8159551e..34270e237726f 100644 | ||
2033 | --- a/drivers/mfd/asic3.c | ||
2034 | +++ b/drivers/mfd/asic3.c | ||
2035 | @@ -915,14 +915,14 @@ static int __init asic3_mfd_probe(struct platform_device *pdev, | ||
2036 | ret = mfd_add_devices(&pdev->dev, pdev->id, | ||
2037 | &asic3_cell_ds1wm, 1, mem, asic->irq_base, NULL); | ||
2038 | if (ret < 0) | ||
2039 | - goto out; | ||
2040 | + goto out_unmap; | ||
2041 | } | ||
2042 | |||
2043 | if (mem_sdio && (irq >= 0)) { | ||
2044 | ret = mfd_add_devices(&pdev->dev, pdev->id, | ||
2045 | &asic3_cell_mmc, 1, mem_sdio, irq, NULL); | ||
2046 | if (ret < 0) | ||
2047 | - goto out; | ||
2048 | + goto out_unmap; | ||
2049 | } | ||
2050 | |||
2051 | ret = 0; | ||
2052 | @@ -936,8 +936,12 @@ static int __init asic3_mfd_probe(struct platform_device *pdev, | ||
2053 | ret = mfd_add_devices(&pdev->dev, 0, | ||
2054 | asic3_cell_leds, ASIC3_NUM_LEDS, NULL, 0, NULL); | ||
2055 | } | ||
2056 | + return ret; | ||
2057 | |||
2058 | - out: | ||
2059 | +out_unmap: | ||
2060 | + if (asic->tmio_cnf) | ||
2061 | + iounmap(asic->tmio_cnf); | ||
2062 | +out: | ||
2063 | return ret; | ||
2064 | } | ||
2065 | |||
2066 | diff --git a/drivers/mfd/mc13xxx-core.c b/drivers/mfd/mc13xxx-core.c | ||
2067 | index 75d52034f89da..5b4faebdcae23 100644 | ||
2068 | --- a/drivers/mfd/mc13xxx-core.c | ||
2069 | +++ b/drivers/mfd/mc13xxx-core.c | ||
2070 | @@ -313,8 +313,10 @@ int mc13xxx_adc_do_conversion(struct mc13xxx *mc13xxx, unsigned int mode, | ||
2071 | adc1 |= MC13783_ADC1_ATOX; | ||
2072 | |||
2073 | dev_dbg(mc13xxx->dev, "%s: request irq\n", __func__); | ||
2074 | - mc13xxx_irq_request(mc13xxx, MC13XXX_IRQ_ADCDONE, | ||
2075 | + ret = mc13xxx_irq_request(mc13xxx, MC13XXX_IRQ_ADCDONE, | ||
2076 | mc13xxx_handler_adcdone, __func__, &adcdone_data); | ||
2077 | + if (ret) | ||
2078 | + goto out; | ||
2079 | |||
2080 | mc13xxx_reg_write(mc13xxx, MC13XXX_ADC0, adc0); | ||
2081 | mc13xxx_reg_write(mc13xxx, MC13XXX_ADC1, adc1); | ||
2082 | diff --git a/drivers/misc/kgdbts.c b/drivers/misc/kgdbts.c | ||
2083 | index ab2184003c29d..d75686c1c6e85 100644 | ||
2084 | --- a/drivers/misc/kgdbts.c | ||
2085 | +++ b/drivers/misc/kgdbts.c | ||
2086 | @@ -1066,10 +1066,10 @@ static int kgdbts_option_setup(char *opt) | ||
2087 | { | ||
2088 | if (strlen(opt) >= MAX_CONFIG_LEN) { | ||
2089 | printk(KERN_ERR "kgdbts: config string too long\n"); | ||
2090 | - return -ENOSPC; | ||
2091 | + return 1; | ||
2092 | } | ||
2093 | strcpy(config, opt); | ||
2094 | - return 0; | ||
2095 | + return 1; | ||
2096 | } | ||
2097 | |||
2098 | __setup("kgdbts=", kgdbts_option_setup); | ||
2099 | diff --git a/drivers/mmc/core/host.c b/drivers/mmc/core/host.c | ||
2100 | index 848b3453517ea..60c2ca58dec34 100644 | ||
2101 | --- a/drivers/mmc/core/host.c | ||
2102 | +++ b/drivers/mmc/core/host.c | ||
2103 | @@ -403,6 +403,16 @@ again: | ||
2104 | |||
2105 | EXPORT_SYMBOL(mmc_alloc_host); | ||
2106 | |||
2107 | +static int mmc_validate_host_caps(struct mmc_host *host) | ||
2108 | +{ | ||
2109 | + if (host->caps & MMC_CAP_SDIO_IRQ && !host->ops->enable_sdio_irq) { | ||
2110 | + dev_warn(host->parent, "missing ->enable_sdio_irq() ops\n"); | ||
2111 | + return -EINVAL; | ||
2112 | + } | ||
2113 | + | ||
2114 | + return 0; | ||
2115 | +} | ||
2116 | + | ||
2117 | /** | ||
2118 | * mmc_add_host - initialise host hardware | ||
2119 | * @host: mmc host | ||
2120 | @@ -415,8 +425,9 @@ int mmc_add_host(struct mmc_host *host) | ||
2121 | { | ||
2122 | int err; | ||
2123 | |||
2124 | - WARN_ON((host->caps & MMC_CAP_SDIO_IRQ) && | ||
2125 | - !host->ops->enable_sdio_irq); | ||
2126 | + err = mmc_validate_host_caps(host); | ||
2127 | + if (err) | ||
2128 | + return err; | ||
2129 | |||
2130 | err = device_add(&host->class_dev); | ||
2131 | if (err) | ||
2132 | diff --git a/drivers/mtd/onenand/generic.c b/drivers/mtd/onenand/generic.c | ||
2133 | index 125da34d8ff95..23a878e7974e0 100644 | ||
2134 | --- a/drivers/mtd/onenand/generic.c | ||
2135 | +++ b/drivers/mtd/onenand/generic.c | ||
2136 | @@ -58,7 +58,12 @@ static int generic_onenand_probe(struct platform_device *pdev) | ||
2137 | } | ||
2138 | |||
2139 | info->onenand.mmcontrol = pdata ? pdata->mmcontrol : NULL; | ||
2140 | - info->onenand.irq = platform_get_irq(pdev, 0); | ||
2141 | + | ||
2142 | + err = platform_get_irq(pdev, 0); | ||
2143 | + if (err < 0) | ||
2144 | + goto out_iounmap; | ||
2145 | + | ||
2146 | + info->onenand.irq = err; | ||
2147 | |||
2148 | info->mtd.dev.parent = &pdev->dev; | ||
2149 | info->mtd.priv = &info->onenand; | ||
2150 | diff --git a/drivers/mtd/ubi/fastmap.c b/drivers/mtd/ubi/fastmap.c | ||
2151 | index e7b177c61642f..1486f9af8f1e8 100644 | ||
2152 | --- a/drivers/mtd/ubi/fastmap.c | ||
2153 | +++ b/drivers/mtd/ubi/fastmap.c | ||
2154 | @@ -478,7 +478,9 @@ static int scan_pool(struct ubi_device *ubi, struct ubi_attach_info *ai, | ||
2155 | if (err == UBI_IO_FF_BITFLIPS) | ||
2156 | scrub = 1; | ||
2157 | |||
2158 | - add_aeb(ai, free, pnum, ec, scrub); | ||
2159 | + ret = add_aeb(ai, free, pnum, ec, scrub); | ||
2160 | + if (ret) | ||
2161 | + goto out; | ||
2162 | continue; | ||
2163 | } else if (err == 0 || err == UBI_IO_BITFLIPS) { | ||
2164 | dbg_bld("Found non empty PEB:%i in pool", pnum); | ||
2165 | @@ -648,8 +650,10 @@ static int ubi_attach_fastmap(struct ubi_device *ubi, | ||
2166 | if (fm_pos >= fm_size) | ||
2167 | goto fail_bad; | ||
2168 | |||
2169 | - add_aeb(ai, &ai->free, be32_to_cpu(fmec->pnum), | ||
2170 | - be32_to_cpu(fmec->ec), 0); | ||
2171 | + ret = add_aeb(ai, &ai->free, be32_to_cpu(fmec->pnum), | ||
2172 | + be32_to_cpu(fmec->ec), 0); | ||
2173 | + if (ret) | ||
2174 | + goto fail; | ||
2175 | } | ||
2176 | |||
2177 | /* read EC values from used list */ | ||
2178 | @@ -659,8 +663,10 @@ static int ubi_attach_fastmap(struct ubi_device *ubi, | ||
2179 | if (fm_pos >= fm_size) | ||
2180 | goto fail_bad; | ||
2181 | |||
2182 | - add_aeb(ai, &used, be32_to_cpu(fmec->pnum), | ||
2183 | - be32_to_cpu(fmec->ec), 0); | ||
2184 | + ret = add_aeb(ai, &used, be32_to_cpu(fmec->pnum), | ||
2185 | + be32_to_cpu(fmec->ec), 0); | ||
2186 | + if (ret) | ||
2187 | + goto fail; | ||
2188 | } | ||
2189 | |||
2190 | /* read EC values from scrub list */ | ||
2191 | @@ -670,8 +676,10 @@ static int ubi_attach_fastmap(struct ubi_device *ubi, | ||
2192 | if (fm_pos >= fm_size) | ||
2193 | goto fail_bad; | ||
2194 | |||
2195 | - add_aeb(ai, &used, be32_to_cpu(fmec->pnum), | ||
2196 | - be32_to_cpu(fmec->ec), 1); | ||
2197 | + ret = add_aeb(ai, &used, be32_to_cpu(fmec->pnum), | ||
2198 | + be32_to_cpu(fmec->ec), 1); | ||
2199 | + if (ret) | ||
2200 | + goto fail; | ||
2201 | } | ||
2202 | |||
2203 | /* read EC values from erase list */ | ||
2204 | @@ -681,8 +689,10 @@ static int ubi_attach_fastmap(struct ubi_device *ubi, | ||
2205 | if (fm_pos >= fm_size) | ||
2206 | goto fail_bad; | ||
2207 | |||
2208 | - add_aeb(ai, &ai->erase, be32_to_cpu(fmec->pnum), | ||
2209 | - be32_to_cpu(fmec->ec), 1); | ||
2210 | + ret = add_aeb(ai, &ai->erase, be32_to_cpu(fmec->pnum), | ||
2211 | + be32_to_cpu(fmec->ec), 1); | ||
2212 | + if (ret) | ||
2213 | + goto fail; | ||
2214 | } | ||
2215 | |||
2216 | ai->mean_ec = div_u64(ai->ec_sum, ai->ec_count); | ||
2217 | diff --git a/drivers/net/can/usb/ems_usb.c b/drivers/net/can/usb/ems_usb.c | ||
2218 | index d62d61d734ea1..4d01b6cbf0ebf 100644 | ||
2219 | --- a/drivers/net/can/usb/ems_usb.c | ||
2220 | +++ b/drivers/net/can/usb/ems_usb.c | ||
2221 | @@ -834,7 +834,6 @@ static netdev_tx_t ems_usb_start_xmit(struct sk_buff *skb, struct net_device *ne | ||
2222 | |||
2223 | usb_unanchor_urb(urb); | ||
2224 | usb_free_coherent(dev->udev, size, buf, urb->transfer_dma); | ||
2225 | - dev_kfree_skb(skb); | ||
2226 | |||
2227 | atomic_dec(&dev->active_tx_urbs); | ||
2228 | |||
2229 | diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | ||
2230 | index 9e5251c427a36..401d9718841fc 100644 | ||
2231 | --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | ||
2232 | +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | ||
2233 | @@ -1008,9 +1008,7 @@ static int bnxt_set_pauseparam(struct net_device *dev, | ||
2234 | } | ||
2235 | |||
2236 | link_info->autoneg |= BNXT_AUTONEG_FLOW_CTRL; | ||
2237 | - if (bp->hwrm_spec_code >= 0x10201) | ||
2238 | - link_info->req_flow_ctrl = | ||
2239 | - PORT_PHY_CFG_REQ_AUTO_PAUSE_AUTONEG_PAUSE; | ||
2240 | + link_info->req_flow_ctrl = 0; | ||
2241 | } else { | ||
2242 | /* when transition from auto pause to force pause, | ||
2243 | * force a link change | ||
2244 | diff --git a/drivers/net/ethernet/micrel/Kconfig b/drivers/net/ethernet/micrel/Kconfig | ||
2245 | index b7e2f49696b74..aa12bace8673e 100644 | ||
2246 | --- a/drivers/net/ethernet/micrel/Kconfig | ||
2247 | +++ b/drivers/net/ethernet/micrel/Kconfig | ||
2248 | @@ -45,6 +45,7 @@ config KS8851 | ||
2249 | config KS8851_MLL | ||
2250 | tristate "Micrel KS8851 MLL" | ||
2251 | depends on HAS_IOMEM | ||
2252 | + depends on PTP_1588_CLOCK_OPTIONAL | ||
2253 | select MII | ||
2254 | ---help--- | ||
2255 | This platform driver is for Micrel KS8851 Address/data bus | ||
2256 | diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_dcb.h b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_dcb.h | ||
2257 | index f4aa6331b367b..0a9d24e86715d 100644 | ||
2258 | --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_dcb.h | ||
2259 | +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_dcb.h | ||
2260 | @@ -52,7 +52,7 @@ static inline int qlcnic_dcb_get_hw_capability(struct qlcnic_dcb *dcb) | ||
2261 | if (dcb && dcb->ops->get_hw_capability) | ||
2262 | return dcb->ops->get_hw_capability(dcb); | ||
2263 | |||
2264 | - return 0; | ||
2265 | + return -EOPNOTSUPP; | ||
2266 | } | ||
2267 | |||
2268 | static inline void qlcnic_dcb_free(struct qlcnic_dcb *dcb) | ||
2269 | @@ -66,7 +66,7 @@ static inline int qlcnic_dcb_attach(struct qlcnic_dcb *dcb) | ||
2270 | if (dcb && dcb->ops->attach) | ||
2271 | return dcb->ops->attach(dcb); | ||
2272 | |||
2273 | - return 0; | ||
2274 | + return -EOPNOTSUPP; | ||
2275 | } | ||
2276 | |||
2277 | static inline int | ||
2278 | @@ -75,7 +75,7 @@ qlcnic_dcb_query_hw_capability(struct qlcnic_dcb *dcb, char *buf) | ||
2279 | if (dcb && dcb->ops->query_hw_capability) | ||
2280 | return dcb->ops->query_hw_capability(dcb, buf); | ||
2281 | |||
2282 | - return 0; | ||
2283 | + return -EOPNOTSUPP; | ||
2284 | } | ||
2285 | |||
2286 | static inline void qlcnic_dcb_get_info(struct qlcnic_dcb *dcb) | ||
2287 | @@ -90,7 +90,7 @@ qlcnic_dcb_query_cee_param(struct qlcnic_dcb *dcb, char *buf, u8 type) | ||
2288 | if (dcb && dcb->ops->query_cee_param) | ||
2289 | return dcb->ops->query_cee_param(dcb, buf, type); | ||
2290 | |||
2291 | - return 0; | ||
2292 | + return -EOPNOTSUPP; | ||
2293 | } | ||
2294 | |||
2295 | static inline int qlcnic_dcb_get_cee_cfg(struct qlcnic_dcb *dcb) | ||
2296 | @@ -98,7 +98,7 @@ static inline int qlcnic_dcb_get_cee_cfg(struct qlcnic_dcb *dcb) | ||
2297 | if (dcb && dcb->ops->get_cee_cfg) | ||
2298 | return dcb->ops->get_cee_cfg(dcb); | ||
2299 | |||
2300 | - return 0; | ||
2301 | + return -EOPNOTSUPP; | ||
2302 | } | ||
2303 | |||
2304 | static inline void qlcnic_dcb_aen_handler(struct qlcnic_dcb *dcb, void *msg) | ||
2305 | diff --git a/drivers/net/ethernet/stmicro/stmmac/altr_tse_pcs.c b/drivers/net/ethernet/stmicro/stmmac/altr_tse_pcs.c | ||
2306 | index 6a9c954492f22..6ca428a702f16 100644 | ||
2307 | --- a/drivers/net/ethernet/stmicro/stmmac/altr_tse_pcs.c | ||
2308 | +++ b/drivers/net/ethernet/stmicro/stmmac/altr_tse_pcs.c | ||
2309 | @@ -68,10 +68,6 @@ | ||
2310 | #define TSE_PCS_USE_SGMII_ENA BIT(0) | ||
2311 | #define TSE_PCS_IF_USE_SGMII 0x03 | ||
2312 | |||
2313 | -#define SGMII_ADAPTER_CTRL_REG 0x00 | ||
2314 | -#define SGMII_ADAPTER_DISABLE 0x0001 | ||
2315 | -#define SGMII_ADAPTER_ENABLE 0x0000 | ||
2316 | - | ||
2317 | #define AUTONEGO_LINK_TIMER 20 | ||
2318 | |||
2319 | static int tse_pcs_reset(void __iomem *base, struct tse_pcs *pcs) | ||
2320 | @@ -215,12 +211,8 @@ void tse_pcs_fix_mac_speed(struct tse_pcs *pcs, struct phy_device *phy_dev, | ||
2321 | unsigned int speed) | ||
2322 | { | ||
2323 | void __iomem *tse_pcs_base = pcs->tse_pcs_base; | ||
2324 | - void __iomem *sgmii_adapter_base = pcs->sgmii_adapter_base; | ||
2325 | u32 val; | ||
2326 | |||
2327 | - writew(SGMII_ADAPTER_ENABLE, | ||
2328 | - sgmii_adapter_base + SGMII_ADAPTER_CTRL_REG); | ||
2329 | - | ||
2330 | pcs->autoneg = phy_dev->autoneg; | ||
2331 | |||
2332 | if (phy_dev->autoneg == AUTONEG_ENABLE) { | ||
2333 | diff --git a/drivers/net/ethernet/stmicro/stmmac/altr_tse_pcs.h b/drivers/net/ethernet/stmicro/stmmac/altr_tse_pcs.h | ||
2334 | index 2f5882450b06a..254199f2efdbf 100644 | ||
2335 | --- a/drivers/net/ethernet/stmicro/stmmac/altr_tse_pcs.h | ||
2336 | +++ b/drivers/net/ethernet/stmicro/stmmac/altr_tse_pcs.h | ||
2337 | @@ -21,6 +21,10 @@ | ||
2338 | #include <linux/phy.h> | ||
2339 | #include <linux/timer.h> | ||
2340 | |||
2341 | +#define SGMII_ADAPTER_CTRL_REG 0x00 | ||
2342 | +#define SGMII_ADAPTER_ENABLE 0x0000 | ||
2343 | +#define SGMII_ADAPTER_DISABLE 0x0001 | ||
2344 | + | ||
2345 | struct tse_pcs { | ||
2346 | struct device *dev; | ||
2347 | void __iomem *tse_pcs_base; | ||
2348 | diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c | ||
2349 | index c3a78c1134240..b138968b8672a 100644 | ||
2350 | --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c | ||
2351 | +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c | ||
2352 | @@ -29,9 +29,6 @@ | ||
2353 | |||
2354 | #include "altr_tse_pcs.h" | ||
2355 | |||
2356 | -#define SGMII_ADAPTER_CTRL_REG 0x00 | ||
2357 | -#define SGMII_ADAPTER_DISABLE 0x0001 | ||
2358 | - | ||
2359 | #define SYSMGR_EMACGRP_CTRL_PHYSEL_ENUM_GMII_MII 0x0 | ||
2360 | #define SYSMGR_EMACGRP_CTRL_PHYSEL_ENUM_RGMII 0x1 | ||
2361 | #define SYSMGR_EMACGRP_CTRL_PHYSEL_ENUM_RMII 0x2 | ||
2362 | @@ -65,16 +62,14 @@ static void socfpga_dwmac_fix_mac_speed(void *priv, unsigned int speed) | ||
2363 | { | ||
2364 | struct socfpga_dwmac *dwmac = (struct socfpga_dwmac *)priv; | ||
2365 | void __iomem *splitter_base = dwmac->splitter_base; | ||
2366 | - void __iomem *tse_pcs_base = dwmac->pcs.tse_pcs_base; | ||
2367 | void __iomem *sgmii_adapter_base = dwmac->pcs.sgmii_adapter_base; | ||
2368 | struct device *dev = dwmac->dev; | ||
2369 | struct net_device *ndev = dev_get_drvdata(dev); | ||
2370 | struct phy_device *phy_dev = ndev->phydev; | ||
2371 | u32 val; | ||
2372 | |||
2373 | - if ((tse_pcs_base) && (sgmii_adapter_base)) | ||
2374 | - writew(SGMII_ADAPTER_DISABLE, | ||
2375 | - sgmii_adapter_base + SGMII_ADAPTER_CTRL_REG); | ||
2376 | + writew(SGMII_ADAPTER_DISABLE, | ||
2377 | + sgmii_adapter_base + SGMII_ADAPTER_CTRL_REG); | ||
2378 | |||
2379 | if (splitter_base) { | ||
2380 | val = readl(splitter_base + EMAC_SPLITTER_CTRL_REG); | ||
2381 | @@ -96,7 +91,9 @@ static void socfpga_dwmac_fix_mac_speed(void *priv, unsigned int speed) | ||
2382 | writel(val, splitter_base + EMAC_SPLITTER_CTRL_REG); | ||
2383 | } | ||
2384 | |||
2385 | - if (tse_pcs_base && sgmii_adapter_base) | ||
2386 | + writew(SGMII_ADAPTER_ENABLE, | ||
2387 | + sgmii_adapter_base + SGMII_ADAPTER_CTRL_REG); | ||
2388 | + if (phy_dev) | ||
2389 | tse_pcs_fix_mac_speed(&dwmac->pcs, phy_dev, speed); | ||
2390 | } | ||
2391 | |||
2392 | diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c | ||
2393 | index 2019e163e0e9e..cbdd0deb7c565 100644 | ||
2394 | --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c | ||
2395 | +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c | ||
2396 | @@ -221,8 +221,7 @@ stmmac_probe_config_dt(struct platform_device *pdev, const char **mac) | ||
2397 | plat->interface = of_get_phy_mode(np); | ||
2398 | |||
2399 | /* Get max speed of operation from device tree */ | ||
2400 | - if (of_property_read_u32(np, "max-speed", &plat->max_speed)) | ||
2401 | - plat->max_speed = -1; | ||
2402 | + of_property_read_u32(np, "max-speed", &plat->max_speed); | ||
2403 | |||
2404 | plat->bus_id = of_alias_get_id(np, "ethernet"); | ||
2405 | if (plat->bus_id < 0) | ||
2406 | diff --git a/drivers/net/ethernet/sun/sunhme.c b/drivers/net/ethernet/sun/sunhme.c | ||
2407 | index cf4dcff051d5b..b38106a7cb5d8 100644 | ||
2408 | --- a/drivers/net/ethernet/sun/sunhme.c | ||
2409 | +++ b/drivers/net/ethernet/sun/sunhme.c | ||
2410 | @@ -3160,7 +3160,7 @@ static int happy_meal_pci_probe(struct pci_dev *pdev, | ||
2411 | if (err) { | ||
2412 | printk(KERN_ERR "happymeal(PCI): Cannot register net device, " | ||
2413 | "aborting.\n"); | ||
2414 | - goto err_out_iounmap; | ||
2415 | + goto err_out_free_coherent; | ||
2416 | } | ||
2417 | |||
2418 | pci_set_drvdata(pdev, hp); | ||
2419 | @@ -3193,6 +3193,10 @@ static int happy_meal_pci_probe(struct pci_dev *pdev, | ||
2420 | |||
2421 | return 0; | ||
2422 | |||
2423 | +err_out_free_coherent: | ||
2424 | + dma_free_coherent(hp->dma_dev, PAGE_SIZE, | ||
2425 | + hp->happy_block, hp->hblock_dvma); | ||
2426 | + | ||
2427 | err_out_iounmap: | ||
2428 | iounmap(hp->gregs); | ||
2429 | |||
2430 | diff --git a/drivers/net/hamradio/6pack.c b/drivers/net/hamradio/6pack.c | ||
2431 | index 96fb2a2a59f02..f829233a911a6 100644 | ||
2432 | --- a/drivers/net/hamradio/6pack.c | ||
2433 | +++ b/drivers/net/hamradio/6pack.c | ||
2434 | @@ -685,14 +685,14 @@ static void sixpack_close(struct tty_struct *tty) | ||
2435 | */ | ||
2436 | netif_stop_queue(sp->dev); | ||
2437 | |||
2438 | + unregister_netdev(sp->dev); | ||
2439 | + | ||
2440 | del_timer_sync(&sp->tx_t); | ||
2441 | del_timer_sync(&sp->resync_t); | ||
2442 | |||
2443 | /* Free all 6pack frame buffers. */ | ||
2444 | kfree(sp->rbuff); | ||
2445 | kfree(sp->xbuff); | ||
2446 | - | ||
2447 | - unregister_netdev(sp->dev); | ||
2448 | } | ||
2449 | |||
2450 | /* Perform I/O control on an active 6pack channel. */ | ||
2451 | diff --git a/drivers/net/phy/broadcom.c b/drivers/net/phy/broadcom.c | ||
2452 | index 870327efccf78..6bea2b219e007 100644 | ||
2453 | --- a/drivers/net/phy/broadcom.c | ||
2454 | +++ b/drivers/net/phy/broadcom.c | ||
2455 | @@ -15,6 +15,7 @@ | ||
2456 | */ | ||
2457 | |||
2458 | #include "bcm-phy-lib.h" | ||
2459 | +#include <linux/delay.h> | ||
2460 | #include <linux/module.h> | ||
2461 | #include <linux/phy.h> | ||
2462 | #include <linux/brcmphy.h> | ||
2463 | @@ -357,6 +358,26 @@ static int brcm_fet_config_init(struct phy_device *phydev) | ||
2464 | if (err < 0) | ||
2465 | return err; | ||
2466 | |||
2467 | + /* The datasheet indicates the PHY needs up to 1us to complete a reset, | ||
2468 | + * build some slack here. | ||
2469 | + */ | ||
2470 | + usleep_range(1000, 2000); | ||
2471 | + | ||
2472 | + /* The PHY requires 65 MDC clock cycles to complete a write operation | ||
2473 | + * and turnaround the line properly. | ||
2474 | + * | ||
2475 | + * We ignore -EIO here as the MDIO controller (e.g.: mdio-bcm-unimac) | ||
2476 | + * may flag the lack of turn-around as a read failure. This is | ||
2477 | + * particularly true with this combination since the MDIO controller | ||
2478 | + * only used 64 MDC cycles. This is not a critical failure in this | ||
2479 | + * specific case and it has no functional impact otherwise, so we let | ||
2480 | + * that one go through. If there is a genuine bus error, the next read | ||
2481 | + * of MII_BRCM_FET_INTREG will error out. | ||
2482 | + */ | ||
2483 | + err = phy_read(phydev, MII_BMCR); | ||
2484 | + if (err < 0 && err != -EIO) | ||
2485 | + return err; | ||
2486 | + | ||
2487 | reg = phy_read(phydev, MII_BRCM_FET_INTREG); | ||
2488 | if (reg < 0) | ||
2489 | return reg; | ||
2490 | diff --git a/drivers/net/slip/slip.c b/drivers/net/slip/slip.c | ||
2491 | index f870396e05e15..ba26fa0ceba89 100644 | ||
2492 | --- a/drivers/net/slip/slip.c | ||
2493 | +++ b/drivers/net/slip/slip.c | ||
2494 | @@ -471,7 +471,7 @@ static void sl_tx_timeout(struct net_device *dev) | ||
2495 | spin_lock(&sl->lock); | ||
2496 | |||
2497 | if (netif_queue_stopped(dev)) { | ||
2498 | - if (!netif_running(dev)) | ||
2499 | + if (!netif_running(dev) || !sl->tty) | ||
2500 | goto out; | ||
2501 | |||
2502 | /* May be we must check transmitter timeout here ? | ||
2503 | diff --git a/drivers/net/veth.c b/drivers/net/veth.c | ||
2504 | index ee7460ee3d050..57ff2fd95f75b 100644 | ||
2505 | --- a/drivers/net/veth.c | ||
2506 | +++ b/drivers/net/veth.c | ||
2507 | @@ -114,7 +114,7 @@ static netdev_tx_t veth_xmit(struct sk_buff *skb, struct net_device *dev) | ||
2508 | |||
2509 | rcu_read_lock(); | ||
2510 | rcv = rcu_dereference(priv->peer); | ||
2511 | - if (unlikely(!rcv)) { | ||
2512 | + if (unlikely(!rcv) || !pskb_may_pull(skb, ETH_HLEN)) { | ||
2513 | kfree_skb(skb); | ||
2514 | goto drop; | ||
2515 | } | ||
2516 | diff --git a/drivers/net/wireless/ath/ath5k/eeprom.c b/drivers/net/wireless/ath/ath5k/eeprom.c | ||
2517 | index 94d34ee02265d..01163b3339451 100644 | ||
2518 | --- a/drivers/net/wireless/ath/ath5k/eeprom.c | ||
2519 | +++ b/drivers/net/wireless/ath/ath5k/eeprom.c | ||
2520 | @@ -746,6 +746,9 @@ ath5k_eeprom_convert_pcal_info_5111(struct ath5k_hw *ah, int mode, | ||
2521 | } | ||
2522 | } | ||
2523 | |||
2524 | + if (idx == AR5K_EEPROM_N_PD_CURVES) | ||
2525 | + goto err_out; | ||
2526 | + | ||
2527 | ee->ee_pd_gains[mode] = 1; | ||
2528 | |||
2529 | pd = &chinfo[pier].pd_curves[idx]; | ||
2530 | diff --git a/drivers/net/wireless/ath/ath9k/htc_hst.c b/drivers/net/wireless/ath/ath9k/htc_hst.c | ||
2531 | index 625823e45d8f0..06a6e74435502 100644 | ||
2532 | --- a/drivers/net/wireless/ath/ath9k/htc_hst.c | ||
2533 | +++ b/drivers/net/wireless/ath/ath9k/htc_hst.c | ||
2534 | @@ -31,6 +31,7 @@ static int htc_issue_send(struct htc_target *target, struct sk_buff* skb, | ||
2535 | hdr->endpoint_id = epid; | ||
2536 | hdr->flags = flags; | ||
2537 | hdr->payload_len = cpu_to_be16(len); | ||
2538 | + memset(hdr->control, 0, sizeof(hdr->control)); | ||
2539 | |||
2540 | status = target->hif->send(target->hif_dev, endpoint->ul_pipeid, skb); | ||
2541 | |||
2542 | @@ -278,6 +279,10 @@ int htc_connect_service(struct htc_target *target, | ||
2543 | conn_msg->dl_pipeid = endpoint->dl_pipeid; | ||
2544 | conn_msg->ul_pipeid = endpoint->ul_pipeid; | ||
2545 | |||
2546 | + /* To prevent infoleak */ | ||
2547 | + conn_msg->svc_meta_len = 0; | ||
2548 | + conn_msg->pad = 0; | ||
2549 | + | ||
2550 | ret = htc_issue_send(target, skb, skb->len, 0, ENDPOINT0); | ||
2551 | if (ret) | ||
2552 | goto err; | ||
2553 | diff --git a/drivers/net/wireless/ath/carl9170/main.c b/drivers/net/wireless/ath/carl9170/main.c | ||
2554 | index 202f421e0e375..1ea80d004d463 100644 | ||
2555 | --- a/drivers/net/wireless/ath/carl9170/main.c | ||
2556 | +++ b/drivers/net/wireless/ath/carl9170/main.c | ||
2557 | @@ -1920,7 +1920,7 @@ static int carl9170_parse_eeprom(struct ar9170 *ar) | ||
2558 | WARN_ON(!(tx_streams >= 1 && tx_streams <= | ||
2559 | IEEE80211_HT_MCS_TX_MAX_STREAMS)); | ||
2560 | |||
2561 | - tx_params = (tx_streams - 1) << | ||
2562 | + tx_params |= (tx_streams - 1) << | ||
2563 | IEEE80211_HT_MCS_TX_MAX_STREAMS_SHIFT; | ||
2564 | |||
2565 | carl9170_band_2GHz.ht_cap.mcs.tx_params |= tx_params; | ||
2566 | diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c | ||
2567 | index d231042f19d64..33a7378164b88 100644 | ||
2568 | --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c | ||
2569 | +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c | ||
2570 | @@ -216,6 +216,8 @@ static int brcmf_init_nvram_parser(struct nvram_parser *nvp, | ||
2571 | size = BRCMF_FW_MAX_NVRAM_SIZE; | ||
2572 | else | ||
2573 | size = data_len; | ||
2574 | + /* Add space for properties we may add */ | ||
2575 | + size += strlen(BRCMF_FW_DEFAULT_BOARDREV) + 1; | ||
2576 | /* Alloc for extra 0 byte + roundup by 4 + length field */ | ||
2577 | size += 1 + 3 + sizeof(u32); | ||
2578 | nvp->nvram = kzalloc(size, GFP_KERNEL); | ||
2579 | diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c | ||
2580 | index d3d79219fbb05..9e90737f4d494 100644 | ||
2581 | --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c | ||
2582 | +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c | ||
2583 | @@ -22,6 +22,7 @@ | ||
2584 | #include <linux/interrupt.h> | ||
2585 | #include <linux/bcma/bcma.h> | ||
2586 | #include <linux/sched.h> | ||
2587 | +#include <linux/io.h> | ||
2588 | #include <asm/unaligned.h> | ||
2589 | |||
2590 | #include <soc.h> | ||
2591 | @@ -406,47 +407,6 @@ brcmf_pcie_write_ram32(struct brcmf_pciedev_info *devinfo, u32 mem_offset, | ||
2592 | } | ||
2593 | |||
2594 | |||
2595 | -static void | ||
2596 | -brcmf_pcie_copy_mem_todev(struct brcmf_pciedev_info *devinfo, u32 mem_offset, | ||
2597 | - void *srcaddr, u32 len) | ||
2598 | -{ | ||
2599 | - void __iomem *address = devinfo->tcm + mem_offset; | ||
2600 | - __le32 *src32; | ||
2601 | - __le16 *src16; | ||
2602 | - u8 *src8; | ||
2603 | - | ||
2604 | - if (((ulong)address & 4) || ((ulong)srcaddr & 4) || (len & 4)) { | ||
2605 | - if (((ulong)address & 2) || ((ulong)srcaddr & 2) || (len & 2)) { | ||
2606 | - src8 = (u8 *)srcaddr; | ||
2607 | - while (len) { | ||
2608 | - iowrite8(*src8, address); | ||
2609 | - address++; | ||
2610 | - src8++; | ||
2611 | - len--; | ||
2612 | - } | ||
2613 | - } else { | ||
2614 | - len = len / 2; | ||
2615 | - src16 = (__le16 *)srcaddr; | ||
2616 | - while (len) { | ||
2617 | - iowrite16(le16_to_cpu(*src16), address); | ||
2618 | - address += 2; | ||
2619 | - src16++; | ||
2620 | - len--; | ||
2621 | - } | ||
2622 | - } | ||
2623 | - } else { | ||
2624 | - len = len / 4; | ||
2625 | - src32 = (__le32 *)srcaddr; | ||
2626 | - while (len) { | ||
2627 | - iowrite32(le32_to_cpu(*src32), address); | ||
2628 | - address += 4; | ||
2629 | - src32++; | ||
2630 | - len--; | ||
2631 | - } | ||
2632 | - } | ||
2633 | -} | ||
2634 | - | ||
2635 | - | ||
2636 | static void | ||
2637 | brcmf_pcie_copy_dev_tomem(struct brcmf_pciedev_info *devinfo, u32 mem_offset, | ||
2638 | void *dstaddr, u32 len) | ||
2639 | @@ -1422,8 +1382,8 @@ static int brcmf_pcie_download_fw_nvram(struct brcmf_pciedev_info *devinfo, | ||
2640 | return err; | ||
2641 | |||
2642 | brcmf_dbg(PCIE, "Download FW %s\n", devinfo->fw_name); | ||
2643 | - brcmf_pcie_copy_mem_todev(devinfo, devinfo->ci->rambase, | ||
2644 | - (void *)fw->data, fw->size); | ||
2645 | + memcpy_toio(devinfo->tcm + devinfo->ci->rambase, | ||
2646 | + (void *)fw->data, fw->size); | ||
2647 | |||
2648 | resetintr = get_unaligned_le32(fw->data); | ||
2649 | release_firmware(fw); | ||
2650 | @@ -1437,7 +1397,7 @@ static int brcmf_pcie_download_fw_nvram(struct brcmf_pciedev_info *devinfo, | ||
2651 | brcmf_dbg(PCIE, "Download NVRAM %s\n", devinfo->nvram_name); | ||
2652 | address = devinfo->ci->rambase + devinfo->ci->ramsize - | ||
2653 | nvram_len; | ||
2654 | - brcmf_pcie_copy_mem_todev(devinfo, address, nvram, nvram_len); | ||
2655 | + memcpy_toio(devinfo->tcm + address, nvram, nvram_len); | ||
2656 | brcmf_fw_nvram_free(nvram); | ||
2657 | } else { | ||
2658 | brcmf_dbg(PCIE, "No matching NVRAM file found %s\n", | ||
2659 | diff --git a/drivers/net/wireless/intel/iwlwifi/dvm/mac80211.c b/drivers/net/wireless/intel/iwlwifi/dvm/mac80211.c | ||
2660 | index 8c0719468d005..6bd2486f617e1 100644 | ||
2661 | --- a/drivers/net/wireless/intel/iwlwifi/dvm/mac80211.c | ||
2662 | +++ b/drivers/net/wireless/intel/iwlwifi/dvm/mac80211.c | ||
2663 | @@ -315,7 +315,7 @@ static int iwlagn_mac_start(struct ieee80211_hw *hw) | ||
2664 | |||
2665 | priv->is_open = 1; | ||
2666 | IWL_DEBUG_MAC80211(priv, "leave\n"); | ||
2667 | - return 0; | ||
2668 | + return ret; | ||
2669 | } | ||
2670 | |||
2671 | static void iwlagn_mac_stop(struct ieee80211_hw *hw) | ||
2672 | diff --git a/drivers/net/wireless/ray_cs.c b/drivers/net/wireless/ray_cs.c | ||
2673 | index c78abfc7bd96d..784063b1e60f7 100644 | ||
2674 | --- a/drivers/net/wireless/ray_cs.c | ||
2675 | +++ b/drivers/net/wireless/ray_cs.c | ||
2676 | @@ -396,6 +396,8 @@ static int ray_config(struct pcmcia_device *link) | ||
2677 | goto failed; | ||
2678 | local->sram = ioremap(link->resource[2]->start, | ||
2679 | resource_size(link->resource[2])); | ||
2680 | + if (!local->sram) | ||
2681 | + goto failed; | ||
2682 | |||
2683 | /*** Set up 16k window for shared memory (receive buffer) ***************/ | ||
2684 | link->resource[3]->flags |= | ||
2685 | @@ -410,6 +412,8 @@ static int ray_config(struct pcmcia_device *link) | ||
2686 | goto failed; | ||
2687 | local->rmem = ioremap(link->resource[3]->start, | ||
2688 | resource_size(link->resource[3])); | ||
2689 | + if (!local->rmem) | ||
2690 | + goto failed; | ||
2691 | |||
2692 | /*** Set up window for attribute memory ***********************************/ | ||
2693 | link->resource[4]->flags |= | ||
2694 | @@ -424,6 +428,8 @@ static int ray_config(struct pcmcia_device *link) | ||
2695 | goto failed; | ||
2696 | local->amem = ioremap(link->resource[4]->start, | ||
2697 | resource_size(link->resource[4])); | ||
2698 | + if (!local->amem) | ||
2699 | + goto failed; | ||
2700 | |||
2701 | dev_dbg(&link->dev, "ray_config sram=%p\n", local->sram); | ||
2702 | dev_dbg(&link->dev, "ray_config rmem=%p\n", local->rmem); | ||
2703 | diff --git a/drivers/pci/hotplug/pciehp_hpc.c b/drivers/pci/hotplug/pciehp_hpc.c | ||
2704 | index 8b8b096167d7a..31be1c69fd706 100644 | ||
2705 | --- a/drivers/pci/hotplug/pciehp_hpc.c | ||
2706 | +++ b/drivers/pci/hotplug/pciehp_hpc.c | ||
2707 | @@ -120,6 +120,8 @@ static int pcie_poll_cmd(struct controller *ctrl, int timeout) | ||
2708 | if (slot_status & PCI_EXP_SLTSTA_CC) { | ||
2709 | pcie_capability_write_word(pdev, PCI_EXP_SLTSTA, | ||
2710 | PCI_EXP_SLTSTA_CC); | ||
2711 | + ctrl->cmd_busy = 0; | ||
2712 | + smp_mb(); | ||
2713 | return 1; | ||
2714 | } | ||
2715 | if (timeout < 0) | ||
2716 | diff --git a/drivers/pinctrl/mediatek/pinctrl-mtk-common.c b/drivers/pinctrl/mediatek/pinctrl-mtk-common.c | ||
2717 | index f9aef2ac03a1e..4cce720171093 100644 | ||
2718 | --- a/drivers/pinctrl/mediatek/pinctrl-mtk-common.c | ||
2719 | +++ b/drivers/pinctrl/mediatek/pinctrl-mtk-common.c | ||
2720 | @@ -1355,6 +1355,7 @@ int mtk_pctrl_init(struct platform_device *pdev, | ||
2721 | node = of_parse_phandle(np, "mediatek,pctl-regmap", 0); | ||
2722 | if (node) { | ||
2723 | pctl->regmap1 = syscon_node_to_regmap(node); | ||
2724 | + of_node_put(node); | ||
2725 | if (IS_ERR(pctl->regmap1)) | ||
2726 | return PTR_ERR(pctl->regmap1); | ||
2727 | } else if (regmap) { | ||
2728 | @@ -1368,6 +1369,7 @@ int mtk_pctrl_init(struct platform_device *pdev, | ||
2729 | node = of_parse_phandle(np, "mediatek,pctl-regmap", 1); | ||
2730 | if (node) { | ||
2731 | pctl->regmap2 = syscon_node_to_regmap(node); | ||
2732 | + of_node_put(node); | ||
2733 | if (IS_ERR(pctl->regmap2)) | ||
2734 | return PTR_ERR(pctl->regmap2); | ||
2735 | } | ||
2736 | diff --git a/drivers/pinctrl/nomadik/pinctrl-nomadik.c b/drivers/pinctrl/nomadik/pinctrl-nomadik.c | ||
2737 | index d318ca0554894..6e237c46e1bd9 100644 | ||
2738 | --- a/drivers/pinctrl/nomadik/pinctrl-nomadik.c | ||
2739 | +++ b/drivers/pinctrl/nomadik/pinctrl-nomadik.c | ||
2740 | @@ -1916,8 +1916,10 @@ static int nmk_pinctrl_probe(struct platform_device *pdev) | ||
2741 | } | ||
2742 | |||
2743 | prcm_np = of_parse_phandle(np, "prcm", 0); | ||
2744 | - if (prcm_np) | ||
2745 | + if (prcm_np) { | ||
2746 | npct->prcm_base = of_iomap(prcm_np, 0); | ||
2747 | + of_node_put(prcm_np); | ||
2748 | + } | ||
2749 | if (!npct->prcm_base) { | ||
2750 | if (version == PINCTRL_NMK_STN8815) { | ||
2751 | dev_info(&pdev->dev, | ||
2752 | diff --git a/drivers/pinctrl/pinconf-generic.c b/drivers/pinctrl/pinconf-generic.c | ||
2753 | index 5020ae5344794..074a7e044e250 100644 | ||
2754 | --- a/drivers/pinctrl/pinconf-generic.c | ||
2755 | +++ b/drivers/pinctrl/pinconf-generic.c | ||
2756 | @@ -31,10 +31,10 @@ static const struct pin_config_item conf_items[] = { | ||
2757 | PCONFDUMP(PIN_CONFIG_BIAS_BUS_HOLD, "input bias bus hold", NULL, false), | ||
2758 | PCONFDUMP(PIN_CONFIG_BIAS_DISABLE, "input bias disabled", NULL, false), | ||
2759 | PCONFDUMP(PIN_CONFIG_BIAS_HIGH_IMPEDANCE, "input bias high impedance", NULL, false), | ||
2760 | - PCONFDUMP(PIN_CONFIG_BIAS_PULL_DOWN, "input bias pull down", NULL, false), | ||
2761 | + PCONFDUMP(PIN_CONFIG_BIAS_PULL_DOWN, "input bias pull down", "ohms", true), | ||
2762 | PCONFDUMP(PIN_CONFIG_BIAS_PULL_PIN_DEFAULT, | ||
2763 | - "input bias pull to pin specific state", NULL, false), | ||
2764 | - PCONFDUMP(PIN_CONFIG_BIAS_PULL_UP, "input bias pull up", NULL, false), | ||
2765 | + "input bias pull to pin specific state", "ohms", true), | ||
2766 | + PCONFDUMP(PIN_CONFIG_BIAS_PULL_UP, "input bias pull up", "ohms", true), | ||
2767 | PCONFDUMP(PIN_CONFIG_DRIVE_OPEN_DRAIN, "output drive open drain", NULL, false), | ||
2768 | PCONFDUMP(PIN_CONFIG_DRIVE_OPEN_SOURCE, "output drive open source", NULL, false), | ||
2769 | PCONFDUMP(PIN_CONFIG_DRIVE_PUSH_PULL, "output drive push pull", NULL, false), | ||
2770 | diff --git a/drivers/pinctrl/pinctrl-rockchip.c b/drivers/pinctrl/pinctrl-rockchip.c | ||
2771 | index 17827a88b85e1..9bcb238c2e12e 100644 | ||
2772 | --- a/drivers/pinctrl/pinctrl-rockchip.c | ||
2773 | +++ b/drivers/pinctrl/pinctrl-rockchip.c | ||
2774 | @@ -2414,6 +2414,7 @@ static int rockchip_pinctrl_probe(struct platform_device *pdev) | ||
2775 | node = of_parse_phandle(np, "rockchip,grf", 0); | ||
2776 | if (node) { | ||
2777 | info->regmap_base = syscon_node_to_regmap(node); | ||
2778 | + of_node_put(node); | ||
2779 | if (IS_ERR(info->regmap_base)) | ||
2780 | return PTR_ERR(info->regmap_base); | ||
2781 | } else { | ||
2782 | @@ -2450,6 +2451,7 @@ static int rockchip_pinctrl_probe(struct platform_device *pdev) | ||
2783 | node = of_parse_phandle(np, "rockchip,pmu", 0); | ||
2784 | if (node) { | ||
2785 | info->regmap_pmu = syscon_node_to_regmap(node); | ||
2786 | + of_node_put(node); | ||
2787 | if (IS_ERR(info->regmap_pmu)) | ||
2788 | return PTR_ERR(info->regmap_pmu); | ||
2789 | } | ||
2790 | diff --git a/drivers/power/supply/ab8500_fg.c b/drivers/power/supply/ab8500_fg.c | ||
2791 | index d6079e892e11f..c07437ad1b852 100644 | ||
2792 | --- a/drivers/power/supply/ab8500_fg.c | ||
2793 | +++ b/drivers/power/supply/ab8500_fg.c | ||
2794 | @@ -2545,8 +2545,10 @@ static int ab8500_fg_sysfs_init(struct ab8500_fg *di) | ||
2795 | ret = kobject_init_and_add(&di->fg_kobject, | ||
2796 | &ab8500_fg_ktype, | ||
2797 | NULL, "battery"); | ||
2798 | - if (ret < 0) | ||
2799 | + if (ret < 0) { | ||
2800 | + kobject_put(&di->fg_kobject); | ||
2801 | dev_err(di->dev, "failed to create sysfs entry\n"); | ||
2802 | + } | ||
2803 | |||
2804 | return ret; | ||
2805 | } | ||
2806 | diff --git a/drivers/power/supply/wm8350_power.c b/drivers/power/supply/wm8350_power.c | ||
2807 | index 5c5880664e09b..28c7102fb24e8 100644 | ||
2808 | --- a/drivers/power/supply/wm8350_power.c | ||
2809 | +++ b/drivers/power/supply/wm8350_power.c | ||
2810 | @@ -410,44 +410,112 @@ static const struct power_supply_desc wm8350_usb_desc = { | ||
2811 | * Initialisation | ||
2812 | *********************************************************************/ | ||
2813 | |||
2814 | -static void wm8350_init_charger(struct wm8350 *wm8350) | ||
2815 | +static int wm8350_init_charger(struct wm8350 *wm8350) | ||
2816 | { | ||
2817 | + int ret; | ||
2818 | + | ||
2819 | /* register our interest in charger events */ | ||
2820 | - wm8350_register_irq(wm8350, WM8350_IRQ_CHG_BAT_HOT, | ||
2821 | + ret = wm8350_register_irq(wm8350, WM8350_IRQ_CHG_BAT_HOT, | ||
2822 | wm8350_charger_handler, 0, "Battery hot", wm8350); | ||
2823 | - wm8350_register_irq(wm8350, WM8350_IRQ_CHG_BAT_COLD, | ||
2824 | + if (ret) | ||
2825 | + goto err; | ||
2826 | + | ||
2827 | + ret = wm8350_register_irq(wm8350, WM8350_IRQ_CHG_BAT_COLD, | ||
2828 | wm8350_charger_handler, 0, "Battery cold", wm8350); | ||
2829 | - wm8350_register_irq(wm8350, WM8350_IRQ_CHG_BAT_FAIL, | ||
2830 | + if (ret) | ||
2831 | + goto free_chg_bat_hot; | ||
2832 | + | ||
2833 | + ret = wm8350_register_irq(wm8350, WM8350_IRQ_CHG_BAT_FAIL, | ||
2834 | wm8350_charger_handler, 0, "Battery fail", wm8350); | ||
2835 | - wm8350_register_irq(wm8350, WM8350_IRQ_CHG_TO, | ||
2836 | + if (ret) | ||
2837 | + goto free_chg_bat_cold; | ||
2838 | + | ||
2839 | + ret = wm8350_register_irq(wm8350, WM8350_IRQ_CHG_TO, | ||
2840 | wm8350_charger_handler, 0, | ||
2841 | "Charger timeout", wm8350); | ||
2842 | - wm8350_register_irq(wm8350, WM8350_IRQ_CHG_END, | ||
2843 | + if (ret) | ||
2844 | + goto free_chg_bat_fail; | ||
2845 | + | ||
2846 | + ret = wm8350_register_irq(wm8350, WM8350_IRQ_CHG_END, | ||
2847 | wm8350_charger_handler, 0, | ||
2848 | "Charge end", wm8350); | ||
2849 | - wm8350_register_irq(wm8350, WM8350_IRQ_CHG_START, | ||
2850 | + if (ret) | ||
2851 | + goto free_chg_to; | ||
2852 | + | ||
2853 | + ret = wm8350_register_irq(wm8350, WM8350_IRQ_CHG_START, | ||
2854 | wm8350_charger_handler, 0, | ||
2855 | "Charge start", wm8350); | ||
2856 | - wm8350_register_irq(wm8350, WM8350_IRQ_CHG_FAST_RDY, | ||
2857 | + if (ret) | ||
2858 | + goto free_chg_end; | ||
2859 | + | ||
2860 | + ret = wm8350_register_irq(wm8350, WM8350_IRQ_CHG_FAST_RDY, | ||
2861 | wm8350_charger_handler, 0, | ||
2862 | "Fast charge ready", wm8350); | ||
2863 | - wm8350_register_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_3P9, | ||
2864 | + if (ret) | ||
2865 | + goto free_chg_start; | ||
2866 | + | ||
2867 | + ret = wm8350_register_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_3P9, | ||
2868 | wm8350_charger_handler, 0, | ||
2869 | "Battery <3.9V", wm8350); | ||
2870 | - wm8350_register_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_3P1, | ||
2871 | + if (ret) | ||
2872 | + goto free_chg_fast_rdy; | ||
2873 | + | ||
2874 | + ret = wm8350_register_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_3P1, | ||
2875 | wm8350_charger_handler, 0, | ||
2876 | "Battery <3.1V", wm8350); | ||
2877 | - wm8350_register_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_2P85, | ||
2878 | + if (ret) | ||
2879 | + goto free_chg_vbatt_lt_3p9; | ||
2880 | + | ||
2881 | + ret = wm8350_register_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_2P85, | ||
2882 | wm8350_charger_handler, 0, | ||
2883 | "Battery <2.85V", wm8350); | ||
2884 | + if (ret) | ||
2885 | + goto free_chg_vbatt_lt_3p1; | ||
2886 | |||
2887 | /* and supply change events */ | ||
2888 | - wm8350_register_irq(wm8350, WM8350_IRQ_EXT_USB_FB, | ||
2889 | + ret = wm8350_register_irq(wm8350, WM8350_IRQ_EXT_USB_FB, | ||
2890 | wm8350_charger_handler, 0, "USB", wm8350); | ||
2891 | - wm8350_register_irq(wm8350, WM8350_IRQ_EXT_WALL_FB, | ||
2892 | + if (ret) | ||
2893 | + goto free_chg_vbatt_lt_2p85; | ||
2894 | + | ||
2895 | + ret = wm8350_register_irq(wm8350, WM8350_IRQ_EXT_WALL_FB, | ||
2896 | wm8350_charger_handler, 0, "Wall", wm8350); | ||
2897 | - wm8350_register_irq(wm8350, WM8350_IRQ_EXT_BAT_FB, | ||
2898 | + if (ret) | ||
2899 | + goto free_ext_usb_fb; | ||
2900 | + | ||
2901 | + ret = wm8350_register_irq(wm8350, WM8350_IRQ_EXT_BAT_FB, | ||
2902 | wm8350_charger_handler, 0, "Battery", wm8350); | ||
2903 | + if (ret) | ||
2904 | + goto free_ext_wall_fb; | ||
2905 | + | ||
2906 | + return 0; | ||
2907 | + | ||
2908 | +free_ext_wall_fb: | ||
2909 | + wm8350_free_irq(wm8350, WM8350_IRQ_EXT_WALL_FB, wm8350); | ||
2910 | +free_ext_usb_fb: | ||
2911 | + wm8350_free_irq(wm8350, WM8350_IRQ_EXT_USB_FB, wm8350); | ||
2912 | +free_chg_vbatt_lt_2p85: | ||
2913 | + wm8350_free_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_2P85, wm8350); | ||
2914 | +free_chg_vbatt_lt_3p1: | ||
2915 | + wm8350_free_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_3P1, wm8350); | ||
2916 | +free_chg_vbatt_lt_3p9: | ||
2917 | + wm8350_free_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_3P9, wm8350); | ||
2918 | +free_chg_fast_rdy: | ||
2919 | + wm8350_free_irq(wm8350, WM8350_IRQ_CHG_FAST_RDY, wm8350); | ||
2920 | +free_chg_start: | ||
2921 | + wm8350_free_irq(wm8350, WM8350_IRQ_CHG_START, wm8350); | ||
2922 | +free_chg_end: | ||
2923 | + wm8350_free_irq(wm8350, WM8350_IRQ_CHG_END, wm8350); | ||
2924 | +free_chg_to: | ||
2925 | + wm8350_free_irq(wm8350, WM8350_IRQ_CHG_TO, wm8350); | ||
2926 | +free_chg_bat_fail: | ||
2927 | + wm8350_free_irq(wm8350, WM8350_IRQ_CHG_BAT_FAIL, wm8350); | ||
2928 | +free_chg_bat_cold: | ||
2929 | + wm8350_free_irq(wm8350, WM8350_IRQ_CHG_BAT_COLD, wm8350); | ||
2930 | +free_chg_bat_hot: | ||
2931 | + wm8350_free_irq(wm8350, WM8350_IRQ_CHG_BAT_HOT, wm8350); | ||
2932 | +err: | ||
2933 | + return ret; | ||
2934 | } | ||
2935 | |||
2936 | static void free_charger_irq(struct wm8350 *wm8350) | ||
2937 | @@ -458,6 +526,7 @@ static void free_charger_irq(struct wm8350 *wm8350) | ||
2938 | wm8350_free_irq(wm8350, WM8350_IRQ_CHG_TO, wm8350); | ||
2939 | wm8350_free_irq(wm8350, WM8350_IRQ_CHG_END, wm8350); | ||
2940 | wm8350_free_irq(wm8350, WM8350_IRQ_CHG_START, wm8350); | ||
2941 | + wm8350_free_irq(wm8350, WM8350_IRQ_CHG_FAST_RDY, wm8350); | ||
2942 | wm8350_free_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_3P9, wm8350); | ||
2943 | wm8350_free_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_3P1, wm8350); | ||
2944 | wm8350_free_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_2P85, wm8350); | ||
2945 | diff --git a/drivers/ptp/ptp_sysfs.c b/drivers/ptp/ptp_sysfs.c | ||
2946 | index 731d0423c8aa7..b690621b4fc8d 100644 | ||
2947 | --- a/drivers/ptp/ptp_sysfs.c | ||
2948 | +++ b/drivers/ptp/ptp_sysfs.c | ||
2949 | @@ -26,7 +26,7 @@ static ssize_t clock_name_show(struct device *dev, | ||
2950 | struct device_attribute *attr, char *page) | ||
2951 | { | ||
2952 | struct ptp_clock *ptp = dev_get_drvdata(dev); | ||
2953 | - return snprintf(page, PAGE_SIZE-1, "%s\n", ptp->info->name); | ||
2954 | + return sysfs_emit(page, "%s\n", ptp->info->name); | ||
2955 | } | ||
2956 | static DEVICE_ATTR(clock_name, 0444, clock_name_show, NULL); | ||
2957 | |||
2958 | @@ -240,7 +240,7 @@ static ssize_t ptp_pin_show(struct device *dev, struct device_attribute *attr, | ||
2959 | |||
2960 | mutex_unlock(&ptp->pincfg_mux); | ||
2961 | |||
2962 | - return snprintf(page, PAGE_SIZE, "%u %u\n", func, chan); | ||
2963 | + return sysfs_emit(page, "%u %u\n", func, chan); | ||
2964 | } | ||
2965 | |||
2966 | static ssize_t ptp_pin_store(struct device *dev, struct device_attribute *attr, | ||
2967 | diff --git a/drivers/pwm/pwm-lpc18xx-sct.c b/drivers/pwm/pwm-lpc18xx-sct.c | ||
2968 | index d7f5f7de030dd..8b3aad06e2360 100644 | ||
2969 | --- a/drivers/pwm/pwm-lpc18xx-sct.c | ||
2970 | +++ b/drivers/pwm/pwm-lpc18xx-sct.c | ||
2971 | @@ -406,12 +406,6 @@ static int lpc18xx_pwm_probe(struct platform_device *pdev) | ||
2972 | lpc18xx_pwm_writel(lpc18xx_pwm, LPC18XX_PWM_LIMIT, | ||
2973 | BIT(lpc18xx_pwm->period_event)); | ||
2974 | |||
2975 | - ret = pwmchip_add(&lpc18xx_pwm->chip); | ||
2976 | - if (ret < 0) { | ||
2977 | - dev_err(&pdev->dev, "pwmchip_add failed: %d\n", ret); | ||
2978 | - goto disable_pwmclk; | ||
2979 | - } | ||
2980 | - | ||
2981 | for (i = 0; i < lpc18xx_pwm->chip.npwm; i++) { | ||
2982 | struct lpc18xx_pwm_data *data; | ||
2983 | |||
2984 | @@ -421,14 +415,12 @@ static int lpc18xx_pwm_probe(struct platform_device *pdev) | ||
2985 | GFP_KERNEL); | ||
2986 | if (!data) { | ||
2987 | ret = -ENOMEM; | ||
2988 | - goto remove_pwmchip; | ||
2989 | + goto disable_pwmclk; | ||
2990 | } | ||
2991 | |||
2992 | pwm_set_chip_data(pwm, data); | ||
2993 | } | ||
2994 | |||
2995 | - platform_set_drvdata(pdev, lpc18xx_pwm); | ||
2996 | - | ||
2997 | val = lpc18xx_pwm_readl(lpc18xx_pwm, LPC18XX_PWM_CTRL); | ||
2998 | val &= ~LPC18XX_PWM_BIDIR; | ||
2999 | val &= ~LPC18XX_PWM_CTRL_HALT; | ||
3000 | @@ -436,10 +428,16 @@ static int lpc18xx_pwm_probe(struct platform_device *pdev) | ||
3001 | val |= LPC18XX_PWM_PRE(0); | ||
3002 | lpc18xx_pwm_writel(lpc18xx_pwm, LPC18XX_PWM_CTRL, val); | ||
3003 | |||
3004 | + ret = pwmchip_add(&lpc18xx_pwm->chip); | ||
3005 | + if (ret < 0) { | ||
3006 | + dev_err(&pdev->dev, "pwmchip_add failed: %d\n", ret); | ||
3007 | + goto disable_pwmclk; | ||
3008 | + } | ||
3009 | + | ||
3010 | + platform_set_drvdata(pdev, lpc18xx_pwm); | ||
3011 | + | ||
3012 | return 0; | ||
3013 | |||
3014 | -remove_pwmchip: | ||
3015 | - pwmchip_remove(&lpc18xx_pwm->chip); | ||
3016 | disable_pwmclk: | ||
3017 | clk_disable_unprepare(lpc18xx_pwm->pwm_clk); | ||
3018 | return ret; | ||
3019 | diff --git a/drivers/remoteproc/qcom_wcnss.c b/drivers/remoteproc/qcom_wcnss.c | ||
3020 | index 323b629474a6b..9f76ad9e959dc 100644 | ||
3021 | --- a/drivers/remoteproc/qcom_wcnss.c | ||
3022 | +++ b/drivers/remoteproc/qcom_wcnss.c | ||
3023 | @@ -472,6 +472,7 @@ static int wcnss_alloc_memory_region(struct qcom_wcnss *wcnss) | ||
3024 | } | ||
3025 | |||
3026 | ret = of_address_to_resource(node, 0, &r); | ||
3027 | + of_node_put(node); | ||
3028 | if (ret) | ||
3029 | return ret; | ||
3030 | |||
3031 | diff --git a/drivers/rtc/rtc-wm8350.c b/drivers/rtc/rtc-wm8350.c | ||
3032 | index fa247deb9cf40..b45d7d9b8c062 100644 | ||
3033 | --- a/drivers/rtc/rtc-wm8350.c | ||
3034 | +++ b/drivers/rtc/rtc-wm8350.c | ||
3035 | @@ -443,14 +443,21 @@ static int wm8350_rtc_probe(struct platform_device *pdev) | ||
3036 | return ret; | ||
3037 | } | ||
3038 | |||
3039 | - wm8350_register_irq(wm8350, WM8350_IRQ_RTC_SEC, | ||
3040 | + ret = wm8350_register_irq(wm8350, WM8350_IRQ_RTC_SEC, | ||
3041 | wm8350_rtc_update_handler, 0, | ||
3042 | "RTC Seconds", wm8350); | ||
3043 | + if (ret) | ||
3044 | + return ret; | ||
3045 | + | ||
3046 | wm8350_mask_irq(wm8350, WM8350_IRQ_RTC_SEC); | ||
3047 | |||
3048 | - wm8350_register_irq(wm8350, WM8350_IRQ_RTC_ALM, | ||
3049 | + ret = wm8350_register_irq(wm8350, WM8350_IRQ_RTC_ALM, | ||
3050 | wm8350_rtc_alarm_handler, 0, | ||
3051 | "RTC Alarm", wm8350); | ||
3052 | + if (ret) { | ||
3053 | + wm8350_free_irq(wm8350, WM8350_IRQ_RTC_SEC, wm8350); | ||
3054 | + return ret; | ||
3055 | + } | ||
3056 | |||
3057 | return 0; | ||
3058 | } | ||
3059 | diff --git a/drivers/scsi/aha152x.c b/drivers/scsi/aha152x.c | ||
3060 | index f44d0487236e3..bd850c5faf77d 100644 | ||
3061 | --- a/drivers/scsi/aha152x.c | ||
3062 | +++ b/drivers/scsi/aha152x.c | ||
3063 | @@ -3381,13 +3381,11 @@ static int __init aha152x_setup(char *str) | ||
3064 | setup[setup_count].synchronous = ints[0] >= 6 ? ints[6] : 1; | ||
3065 | setup[setup_count].delay = ints[0] >= 7 ? ints[7] : DELAY_DEFAULT; | ||
3066 | setup[setup_count].ext_trans = ints[0] >= 8 ? ints[8] : 0; | ||
3067 | - if (ints[0] > 8) { /*}*/ | ||
3068 | + if (ints[0] > 8) | ||
3069 | printk(KERN_NOTICE "aha152x: usage: aha152x=<IOBASE>[,<IRQ>[,<SCSI ID>" | ||
3070 | "[,<RECONNECT>[,<PARITY>[,<SYNCHRONOUS>[,<DELAY>[,<EXT_TRANS>]]]]]]]\n"); | ||
3071 | - } else { | ||
3072 | + else | ||
3073 | setup_count++; | ||
3074 | - return 0; | ||
3075 | - } | ||
3076 | |||
3077 | return 1; | ||
3078 | } | ||
3079 | diff --git a/drivers/scsi/bfa/bfad_attr.c b/drivers/scsi/bfa/bfad_attr.c | ||
3080 | index 0a70d54a4df68..47e5993524685 100644 | ||
3081 | --- a/drivers/scsi/bfa/bfad_attr.c | ||
3082 | +++ b/drivers/scsi/bfa/bfad_attr.c | ||
3083 | @@ -722,7 +722,7 @@ bfad_im_serial_num_show(struct device *dev, struct device_attribute *attr, | ||
3084 | char serial_num[BFA_ADAPTER_SERIAL_NUM_LEN]; | ||
3085 | |||
3086 | bfa_get_adapter_serial_num(&bfad->bfa, serial_num); | ||
3087 | - return snprintf(buf, PAGE_SIZE, "%s\n", serial_num); | ||
3088 | + return sysfs_emit(buf, "%s\n", serial_num); | ||
3089 | } | ||
3090 | |||
3091 | static ssize_t | ||
3092 | @@ -736,7 +736,7 @@ bfad_im_model_show(struct device *dev, struct device_attribute *attr, | ||
3093 | char model[BFA_ADAPTER_MODEL_NAME_LEN]; | ||
3094 | |||
3095 | bfa_get_adapter_model(&bfad->bfa, model); | ||
3096 | - return snprintf(buf, PAGE_SIZE, "%s\n", model); | ||
3097 | + return sysfs_emit(buf, "%s\n", model); | ||
3098 | } | ||
3099 | |||
3100 | static ssize_t | ||
3101 | @@ -816,7 +816,7 @@ bfad_im_model_desc_show(struct device *dev, struct device_attribute *attr, | ||
3102 | snprintf(model_descr, BFA_ADAPTER_MODEL_DESCR_LEN, | ||
3103 | "Invalid Model"); | ||
3104 | |||
3105 | - return snprintf(buf, PAGE_SIZE, "%s\n", model_descr); | ||
3106 | + return sysfs_emit(buf, "%s\n", model_descr); | ||
3107 | } | ||
3108 | |||
3109 | static ssize_t | ||
3110 | @@ -830,7 +830,7 @@ bfad_im_node_name_show(struct device *dev, struct device_attribute *attr, | ||
3111 | u64 nwwn; | ||
3112 | |||
3113 | nwwn = bfa_fcs_lport_get_nwwn(port->fcs_port); | ||
3114 | - return snprintf(buf, PAGE_SIZE, "0x%llx\n", cpu_to_be64(nwwn)); | ||
3115 | + return sysfs_emit(buf, "0x%llx\n", cpu_to_be64(nwwn)); | ||
3116 | } | ||
3117 | |||
3118 | static ssize_t | ||
3119 | @@ -847,7 +847,7 @@ bfad_im_symbolic_name_show(struct device *dev, struct device_attribute *attr, | ||
3120 | bfa_fcs_lport_get_attr(&bfad->bfa_fcs.fabric.bport, &port_attr); | ||
3121 | strlcpy(symname, port_attr.port_cfg.sym_name.symname, | ||
3122 | BFA_SYMNAME_MAXLEN); | ||
3123 | - return snprintf(buf, PAGE_SIZE, "%s\n", symname); | ||
3124 | + return sysfs_emit(buf, "%s\n", symname); | ||
3125 | } | ||
3126 | |||
3127 | static ssize_t | ||
3128 | @@ -861,14 +861,14 @@ bfad_im_hw_version_show(struct device *dev, struct device_attribute *attr, | ||
3129 | char hw_ver[BFA_VERSION_LEN]; | ||
3130 | |||
3131 | bfa_get_pci_chip_rev(&bfad->bfa, hw_ver); | ||
3132 | - return snprintf(buf, PAGE_SIZE, "%s\n", hw_ver); | ||
3133 | + return sysfs_emit(buf, "%s\n", hw_ver); | ||
3134 | } | ||
3135 | |||
3136 | static ssize_t | ||
3137 | bfad_im_drv_version_show(struct device *dev, struct device_attribute *attr, | ||
3138 | char *buf) | ||
3139 | { | ||
3140 | - return snprintf(buf, PAGE_SIZE, "%s\n", BFAD_DRIVER_VERSION); | ||
3141 | + return sysfs_emit(buf, "%s\n", BFAD_DRIVER_VERSION); | ||
3142 | } | ||
3143 | |||
3144 | static ssize_t | ||
3145 | @@ -882,7 +882,7 @@ bfad_im_optionrom_version_show(struct device *dev, | ||
3146 | char optrom_ver[BFA_VERSION_LEN]; | ||
3147 | |||
3148 | bfa_get_adapter_optrom_ver(&bfad->bfa, optrom_ver); | ||
3149 | - return snprintf(buf, PAGE_SIZE, "%s\n", optrom_ver); | ||
3150 | + return sysfs_emit(buf, "%s\n", optrom_ver); | ||
3151 | } | ||
3152 | |||
3153 | static ssize_t | ||
3154 | @@ -896,7 +896,7 @@ bfad_im_fw_version_show(struct device *dev, struct device_attribute *attr, | ||
3155 | char fw_ver[BFA_VERSION_LEN]; | ||
3156 | |||
3157 | bfa_get_adapter_fw_ver(&bfad->bfa, fw_ver); | ||
3158 | - return snprintf(buf, PAGE_SIZE, "%s\n", fw_ver); | ||
3159 | + return sysfs_emit(buf, "%s\n", fw_ver); | ||
3160 | } | ||
3161 | |||
3162 | static ssize_t | ||
3163 | @@ -908,7 +908,7 @@ bfad_im_num_of_ports_show(struct device *dev, struct device_attribute *attr, | ||
3164 | (struct bfad_im_port_s *) shost->hostdata[0]; | ||
3165 | struct bfad_s *bfad = im_port->bfad; | ||
3166 | |||
3167 | - return snprintf(buf, PAGE_SIZE, "%d\n", | ||
3168 | + return sysfs_emit(buf, "%d\n", | ||
3169 | bfa_get_nports(&bfad->bfa)); | ||
3170 | } | ||
3171 | |||
3172 | @@ -916,7 +916,7 @@ static ssize_t | ||
3173 | bfad_im_drv_name_show(struct device *dev, struct device_attribute *attr, | ||
3174 | char *buf) | ||
3175 | { | ||
3176 | - return snprintf(buf, PAGE_SIZE, "%s\n", BFAD_DRIVER_NAME); | ||
3177 | + return sysfs_emit(buf, "%s\n", BFAD_DRIVER_NAME); | ||
3178 | } | ||
3179 | |||
3180 | static ssize_t | ||
3181 | @@ -935,14 +935,14 @@ bfad_im_num_of_discovered_ports_show(struct device *dev, | ||
3182 | rports = kzalloc(sizeof(struct bfa_rport_qualifier_s) * nrports, | ||
3183 | GFP_ATOMIC); | ||
3184 | if (rports == NULL) | ||
3185 | - return snprintf(buf, PAGE_SIZE, "Failed\n"); | ||
3186 | + return sysfs_emit(buf, "Failed\n"); | ||
3187 | |||
3188 | spin_lock_irqsave(&bfad->bfad_lock, flags); | ||
3189 | bfa_fcs_lport_get_rport_quals(port->fcs_port, rports, &nrports); | ||
3190 | spin_unlock_irqrestore(&bfad->bfad_lock, flags); | ||
3191 | kfree(rports); | ||
3192 | |||
3193 | - return snprintf(buf, PAGE_SIZE, "%d\n", nrports); | ||
3194 | + return sysfs_emit(buf, "%d\n", nrports); | ||
3195 | } | ||
3196 | |||
3197 | static DEVICE_ATTR(serial_number, S_IRUGO, | ||
3198 | diff --git a/drivers/scsi/ibmvscsi_tgt/ibmvscsi_tgt.c b/drivers/scsi/ibmvscsi_tgt/ibmvscsi_tgt.c | ||
3199 | index 5ed28111c3c33..569b662e19e7f 100644 | ||
3200 | --- a/drivers/scsi/ibmvscsi_tgt/ibmvscsi_tgt.c | ||
3201 | +++ b/drivers/scsi/ibmvscsi_tgt/ibmvscsi_tgt.c | ||
3202 | @@ -43,7 +43,7 @@ | ||
3203 | |||
3204 | #define IBMVSCSIS_VERSION "v0.2" | ||
3205 | |||
3206 | -#define INITIAL_SRP_LIMIT 800 | ||
3207 | +#define INITIAL_SRP_LIMIT 1024 | ||
3208 | #define DEFAULT_MAX_SECTORS 256 | ||
3209 | #define MAX_TXU 1024 * 1024 | ||
3210 | |||
3211 | diff --git a/drivers/scsi/libfc/fc_exch.c b/drivers/scsi/libfc/fc_exch.c | ||
3212 | index 59fd6101f188b..177e494b5e477 100644 | ||
3213 | --- a/drivers/scsi/libfc/fc_exch.c | ||
3214 | +++ b/drivers/scsi/libfc/fc_exch.c | ||
3215 | @@ -1663,6 +1663,7 @@ static void fc_exch_abts_resp(struct fc_exch *ep, struct fc_frame *fp) | ||
3216 | if (cancel_delayed_work_sync(&ep->timeout_work)) { | ||
3217 | FC_EXCH_DBG(ep, "Exchange timer canceled due to ABTS response\n"); | ||
3218 | fc_exch_release(ep); /* release from pending timer hold */ | ||
3219 | + return; | ||
3220 | } | ||
3221 | |||
3222 | spin_lock_bh(&ep->ex_lock); | ||
3223 | diff --git a/drivers/scsi/libsas/sas_ata.c b/drivers/scsi/libsas/sas_ata.c | ||
3224 | index 8800ff615bdd4..af2c7e7878b1f 100644 | ||
3225 | --- a/drivers/scsi/libsas/sas_ata.c | ||
3226 | +++ b/drivers/scsi/libsas/sas_ata.c | ||
3227 | @@ -220,7 +220,7 @@ static unsigned int sas_ata_qc_issue(struct ata_queued_cmd *qc) | ||
3228 | task->total_xfer_len = qc->nbytes; | ||
3229 | task->num_scatter = qc->n_elem; | ||
3230 | task->data_dir = qc->dma_dir; | ||
3231 | - } else if (qc->tf.protocol == ATA_PROT_NODATA) { | ||
3232 | + } else if (!ata_is_data(qc->tf.protocol)) { | ||
3233 | task->data_dir = DMA_NONE; | ||
3234 | } else { | ||
3235 | for_each_sg(qc->sg, sg, qc->n_elem, si) | ||
3236 | diff --git a/drivers/scsi/mvsas/mv_init.c b/drivers/scsi/mvsas/mv_init.c | ||
3237 | index 8280046fd1f0d..359fd39c6345d 100644 | ||
3238 | --- a/drivers/scsi/mvsas/mv_init.c | ||
3239 | +++ b/drivers/scsi/mvsas/mv_init.c | ||
3240 | @@ -679,6 +679,7 @@ static struct pci_device_id mvs_pci_table[] = { | ||
3241 | { PCI_VDEVICE(ARECA, PCI_DEVICE_ID_ARECA_1300), chip_1300 }, | ||
3242 | { PCI_VDEVICE(ARECA, PCI_DEVICE_ID_ARECA_1320), chip_1320 }, | ||
3243 | { PCI_VDEVICE(ADAPTEC2, 0x0450), chip_6440 }, | ||
3244 | + { PCI_VDEVICE(TTI, 0x2640), chip_6440 }, | ||
3245 | { PCI_VDEVICE(TTI, 0x2710), chip_9480 }, | ||
3246 | { PCI_VDEVICE(TTI, 0x2720), chip_9480 }, | ||
3247 | { PCI_VDEVICE(TTI, 0x2721), chip_9480 }, | ||
3248 | @@ -730,7 +731,7 @@ static ssize_t | ||
3249 | mvs_show_driver_version(struct device *cdev, | ||
3250 | struct device_attribute *attr, char *buffer) | ||
3251 | { | ||
3252 | - return snprintf(buffer, PAGE_SIZE, "%s\n", DRV_VERSION); | ||
3253 | + return sysfs_emit(buffer, "%s\n", DRV_VERSION); | ||
3254 | } | ||
3255 | |||
3256 | static DEVICE_ATTR(driver_version, | ||
3257 | @@ -782,7 +783,7 @@ mvs_store_interrupt_coalescing(struct device *cdev, | ||
3258 | static ssize_t mvs_show_interrupt_coalescing(struct device *cdev, | ||
3259 | struct device_attribute *attr, char *buffer) | ||
3260 | { | ||
3261 | - return snprintf(buffer, PAGE_SIZE, "%d\n", interrupt_coalescing); | ||
3262 | + return sysfs_emit(buffer, "%d\n", interrupt_coalescing); | ||
3263 | } | ||
3264 | |||
3265 | static DEVICE_ATTR(interrupt_coalescing, | ||
3266 | diff --git a/drivers/scsi/pm8001/pm8001_hwi.c b/drivers/scsi/pm8001/pm8001_hwi.c | ||
3267 | index f374abfb7f1f8..cc90b5c8d4625 100644 | ||
3268 | --- a/drivers/scsi/pm8001/pm8001_hwi.c | ||
3269 | +++ b/drivers/scsi/pm8001/pm8001_hwi.c | ||
3270 | @@ -1748,6 +1748,7 @@ static void pm8001_send_abort_all(struct pm8001_hba_info *pm8001_ha, | ||
3271 | ccb->device = pm8001_ha_dev; | ||
3272 | ccb->ccb_tag = ccb_tag; | ||
3273 | ccb->task = task; | ||
3274 | + ccb->n_elem = 0; | ||
3275 | |||
3276 | circularQ = &pm8001_ha->inbnd_q_tbl[0]; | ||
3277 | |||
3278 | @@ -1810,6 +1811,7 @@ static void pm8001_send_read_log(struct pm8001_hba_info *pm8001_ha, | ||
3279 | ccb->device = pm8001_ha_dev; | ||
3280 | ccb->ccb_tag = ccb_tag; | ||
3281 | ccb->task = task; | ||
3282 | + ccb->n_elem = 0; | ||
3283 | pm8001_ha_dev->id |= NCQ_READ_LOG_FLAG; | ||
3284 | pm8001_ha_dev->id |= NCQ_2ND_RLE_FLAG; | ||
3285 | |||
3286 | @@ -1826,7 +1828,7 @@ static void pm8001_send_read_log(struct pm8001_hba_info *pm8001_ha, | ||
3287 | |||
3288 | sata_cmd.tag = cpu_to_le32(ccb_tag); | ||
3289 | sata_cmd.device_id = cpu_to_le32(pm8001_ha_dev->device_id); | ||
3290 | - sata_cmd.ncqtag_atap_dir_m |= ((0x1 << 7) | (0x5 << 9)); | ||
3291 | + sata_cmd.ncqtag_atap_dir_m = cpu_to_le32((0x1 << 7) | (0x5 << 9)); | ||
3292 | memcpy(&sata_cmd.sata_fis, &fis, sizeof(struct host_to_dev_fis)); | ||
3293 | |||
3294 | res = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &sata_cmd, 0); | ||
3295 | @@ -3766,12 +3768,11 @@ int pm8001_mpi_task_abort_resp(struct pm8001_hba_info *pm8001_ha, void *piomb) | ||
3296 | mb(); | ||
3297 | |||
3298 | if (pm8001_dev->id & NCQ_ABORT_ALL_FLAG) { | ||
3299 | - pm8001_tag_free(pm8001_ha, tag); | ||
3300 | sas_free_task(t); | ||
3301 | - /* clear the flag */ | ||
3302 | - pm8001_dev->id &= 0xBFFFFFFF; | ||
3303 | - } else | ||
3304 | + pm8001_dev->id &= ~NCQ_ABORT_ALL_FLAG; | ||
3305 | + } else { | ||
3306 | t->task_done(t); | ||
3307 | + } | ||
3308 | |||
3309 | return 0; | ||
3310 | } | ||
3311 | @@ -4718,7 +4719,7 @@ int pm8001_chip_ssp_tm_req(struct pm8001_hba_info *pm8001_ha, | ||
3312 | memcpy(sspTMCmd.lun, task->ssp_task.LUN, 8); | ||
3313 | sspTMCmd.tag = cpu_to_le32(ccb->ccb_tag); | ||
3314 | if (pm8001_ha->chip_id != chip_8001) | ||
3315 | - sspTMCmd.ds_ads_m = 0x08; | ||
3316 | + sspTMCmd.ds_ads_m = cpu_to_le32(0x08); | ||
3317 | circularQ = &pm8001_ha->inbnd_q_tbl[0]; | ||
3318 | ret = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &sspTMCmd, 0); | ||
3319 | return ret; | ||
3320 | diff --git a/drivers/scsi/pm8001/pm80xx_hwi.c b/drivers/scsi/pm8001/pm80xx_hwi.c | ||
3321 | index df5f0bc295875..4eae727ccfbc8 100644 | ||
3322 | --- a/drivers/scsi/pm8001/pm80xx_hwi.c | ||
3323 | +++ b/drivers/scsi/pm8001/pm80xx_hwi.c | ||
3324 | @@ -870,9 +870,11 @@ pm80xx_set_thermal_config(struct pm8001_hba_info *pm8001_ha) | ||
3325 | else | ||
3326 | page_code = THERMAL_PAGE_CODE_8H; | ||
3327 | |||
3328 | - payload.cfg_pg[0] = (THERMAL_LOG_ENABLE << 9) | | ||
3329 | - (THERMAL_ENABLE << 8) | page_code; | ||
3330 | - payload.cfg_pg[1] = (LTEMPHIL << 24) | (RTEMPHIL << 8); | ||
3331 | + payload.cfg_pg[0] = | ||
3332 | + cpu_to_le32((THERMAL_LOG_ENABLE << 9) | | ||
3333 | + (THERMAL_ENABLE << 8) | page_code); | ||
3334 | + payload.cfg_pg[1] = | ||
3335 | + cpu_to_le32((LTEMPHIL << 24) | (RTEMPHIL << 8)); | ||
3336 | |||
3337 | rc = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &payload, 0); | ||
3338 | if (rc) | ||
3339 | @@ -1424,6 +1426,7 @@ static void pm80xx_send_abort_all(struct pm8001_hba_info *pm8001_ha, | ||
3340 | ccb->device = pm8001_ha_dev; | ||
3341 | ccb->ccb_tag = ccb_tag; | ||
3342 | ccb->task = task; | ||
3343 | + ccb->n_elem = 0; | ||
3344 | |||
3345 | circularQ = &pm8001_ha->inbnd_q_tbl[0]; | ||
3346 | |||
3347 | @@ -1504,7 +1507,7 @@ static void pm80xx_send_read_log(struct pm8001_hba_info *pm8001_ha, | ||
3348 | |||
3349 | sata_cmd.tag = cpu_to_le32(ccb_tag); | ||
3350 | sata_cmd.device_id = cpu_to_le32(pm8001_ha_dev->device_id); | ||
3351 | - sata_cmd.ncqtag_atap_dir_m_dad |= ((0x1 << 7) | (0x5 << 9)); | ||
3352 | + sata_cmd.ncqtag_atap_dir_m_dad = cpu_to_le32(((0x1 << 7) | (0x5 << 9))); | ||
3353 | memcpy(&sata_cmd.sata_fis, &fis, sizeof(struct host_to_dev_fis)); | ||
3354 | |||
3355 | res = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &sata_cmd, 0); | ||
3356 | diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c | ||
3357 | index 17b1525d492bf..c41491472d445 100644 | ||
3358 | --- a/drivers/scsi/qla2xxx/qla_isr.c | ||
3359 | +++ b/drivers/scsi/qla2xxx/qla_isr.c | ||
3360 | @@ -1618,6 +1618,7 @@ qla24xx_tm_iocb_entry(scsi_qla_host_t *vha, struct req_que *req, void *tsk) | ||
3361 | iocb->u.tmf.data = QLA_FUNCTION_FAILED; | ||
3362 | } else if ((le16_to_cpu(sts->scsi_status) & | ||
3363 | SS_RESPONSE_INFO_LEN_VALID)) { | ||
3364 | + host_to_fcp_swap(sts->data, sizeof(sts->data)); | ||
3365 | if (le32_to_cpu(sts->rsp_data_len) < 4) { | ||
3366 | ql_log(ql_log_warn, fcport->vha, 0x503b, | ||
3367 | "Async-%s error - hdl=%x not enough response(%d).\n", | ||
3368 | diff --git a/drivers/scsi/zorro7xx.c b/drivers/scsi/zorro7xx.c | ||
3369 | index aff31991aea98..ee6d974738532 100644 | ||
3370 | --- a/drivers/scsi/zorro7xx.c | ||
3371 | +++ b/drivers/scsi/zorro7xx.c | ||
3372 | @@ -158,6 +158,8 @@ static void zorro7xx_remove_one(struct zorro_dev *z) | ||
3373 | scsi_remove_host(host); | ||
3374 | |||
3375 | NCR_700_release(host); | ||
3376 | + if (host->base > 0x01000000) | ||
3377 | + iounmap(hostdata->base); | ||
3378 | kfree(hostdata); | ||
3379 | free_irq(host->irq, host); | ||
3380 | zorro_release_device(z); | ||
3381 | diff --git a/drivers/soc/ti/wkup_m3_ipc.c b/drivers/soc/ti/wkup_m3_ipc.c | ||
3382 | index fc33bfdc957cc..ead96fe2e7f5a 100644 | ||
3383 | --- a/drivers/soc/ti/wkup_m3_ipc.c | ||
3384 | +++ b/drivers/soc/ti/wkup_m3_ipc.c | ||
3385 | @@ -405,9 +405,9 @@ static int wkup_m3_ipc_probe(struct platform_device *pdev) | ||
3386 | } | ||
3387 | |||
3388 | irq = platform_get_irq(pdev, 0); | ||
3389 | - if (!irq) { | ||
3390 | + if (irq < 0) { | ||
3391 | dev_err(&pdev->dev, "no irq resource\n"); | ||
3392 | - return -ENXIO; | ||
3393 | + return irq; | ||
3394 | } | ||
3395 | |||
3396 | ret = devm_request_irq(dev, irq, wkup_m3_txev_handler, | ||
3397 | diff --git a/drivers/spi/spi-tegra114.c b/drivers/spi/spi-tegra114.c | ||
3398 | index d1ca8f619b828..89a3121f4f254 100644 | ||
3399 | --- a/drivers/spi/spi-tegra114.c | ||
3400 | +++ b/drivers/spi/spi-tegra114.c | ||
3401 | @@ -1098,6 +1098,10 @@ static int tegra_spi_probe(struct platform_device *pdev) | ||
3402 | tspi->phys = r->start; | ||
3403 | |||
3404 | spi_irq = platform_get_irq(pdev, 0); | ||
3405 | + if (spi_irq < 0) { | ||
3406 | + ret = spi_irq; | ||
3407 | + goto exit_free_master; | ||
3408 | + } | ||
3409 | tspi->irq = spi_irq; | ||
3410 | |||
3411 | tspi->clk = devm_clk_get(&pdev->dev, "spi"); | ||
3412 | diff --git a/drivers/spi/spi-tegra20-slink.c b/drivers/spi/spi-tegra20-slink.c | ||
3413 | index 88bfe7682a9eb..b8a3a78730b5e 100644 | ||
3414 | --- a/drivers/spi/spi-tegra20-slink.c | ||
3415 | +++ b/drivers/spi/spi-tegra20-slink.c | ||
3416 | @@ -1016,14 +1016,8 @@ static int tegra_slink_probe(struct platform_device *pdev) | ||
3417 | struct resource *r; | ||
3418 | int ret, spi_irq; | ||
3419 | const struct tegra_slink_chip_data *cdata = NULL; | ||
3420 | - const struct of_device_id *match; | ||
3421 | |||
3422 | - match = of_match_device(tegra_slink_of_match, &pdev->dev); | ||
3423 | - if (!match) { | ||
3424 | - dev_err(&pdev->dev, "Error: No device match found\n"); | ||
3425 | - return -ENODEV; | ||
3426 | - } | ||
3427 | - cdata = match->data; | ||
3428 | + cdata = of_device_get_match_data(&pdev->dev); | ||
3429 | |||
3430 | master = spi_alloc_master(&pdev->dev, sizeof(*tspi)); | ||
3431 | if (!master) { | ||
3432 | diff --git a/drivers/thermal/int340x_thermal/int3400_thermal.c b/drivers/thermal/int340x_thermal/int3400_thermal.c | ||
3433 | index d4c374cc4f74f..a8a47013ba47a 100644 | ||
3434 | --- a/drivers/thermal/int340x_thermal/int3400_thermal.c | ||
3435 | +++ b/drivers/thermal/int340x_thermal/int3400_thermal.c | ||
3436 | @@ -51,7 +51,7 @@ struct int3400_thermal_priv { | ||
3437 | struct art *arts; | ||
3438 | int trt_count; | ||
3439 | struct trt *trts; | ||
3440 | - u8 uuid_bitmap; | ||
3441 | + u32 uuid_bitmap; | ||
3442 | int rel_misc_dev_res; | ||
3443 | int current_uuid_index; | ||
3444 | }; | ||
3445 | diff --git a/drivers/tty/hvc/hvc_iucv.c b/drivers/tty/hvc/hvc_iucv.c | ||
3446 | index 8b70a1627356d..799bc191982cf 100644 | ||
3447 | --- a/drivers/tty/hvc/hvc_iucv.c | ||
3448 | +++ b/drivers/tty/hvc/hvc_iucv.c | ||
3449 | @@ -1469,7 +1469,9 @@ out_error: | ||
3450 | */ | ||
3451 | static int __init hvc_iucv_config(char *val) | ||
3452 | { | ||
3453 | - return kstrtoul(val, 10, &hvc_iucv_devices); | ||
3454 | + if (kstrtoul(val, 10, &hvc_iucv_devices)) | ||
3455 | + pr_warn("hvc_iucv= invalid parameter value '%s'\n", val); | ||
3456 | + return 1; | ||
3457 | } | ||
3458 | |||
3459 | |||
3460 | diff --git a/drivers/tty/mxser.c b/drivers/tty/mxser.c | ||
3461 | index 69294ae154be0..ea7f4af85d58b 100644 | ||
3462 | --- a/drivers/tty/mxser.c | ||
3463 | +++ b/drivers/tty/mxser.c | ||
3464 | @@ -860,6 +860,7 @@ static int mxser_activate(struct tty_port *port, struct tty_struct *tty) | ||
3465 | struct mxser_port *info = container_of(port, struct mxser_port, port); | ||
3466 | unsigned long page; | ||
3467 | unsigned long flags; | ||
3468 | + int ret; | ||
3469 | |||
3470 | page = __get_free_page(GFP_KERNEL); | ||
3471 | if (!page) | ||
3472 | @@ -869,9 +870,9 @@ static int mxser_activate(struct tty_port *port, struct tty_struct *tty) | ||
3473 | |||
3474 | if (!info->ioaddr || !info->type) { | ||
3475 | set_bit(TTY_IO_ERROR, &tty->flags); | ||
3476 | - free_page(page); | ||
3477 | spin_unlock_irqrestore(&info->slock, flags); | ||
3478 | - return 0; | ||
3479 | + ret = 0; | ||
3480 | + goto err_free_xmit; | ||
3481 | } | ||
3482 | info->port.xmit_buf = (unsigned char *) page; | ||
3483 | |||
3484 | @@ -897,8 +898,10 @@ static int mxser_activate(struct tty_port *port, struct tty_struct *tty) | ||
3485 | if (capable(CAP_SYS_ADMIN)) { | ||
3486 | set_bit(TTY_IO_ERROR, &tty->flags); | ||
3487 | return 0; | ||
3488 | - } else | ||
3489 | - return -ENODEV; | ||
3490 | + } | ||
3491 | + | ||
3492 | + ret = -ENODEV; | ||
3493 | + goto err_free_xmit; | ||
3494 | } | ||
3495 | |||
3496 | /* | ||
3497 | @@ -943,6 +946,10 @@ static int mxser_activate(struct tty_port *port, struct tty_struct *tty) | ||
3498 | spin_unlock_irqrestore(&info->slock, flags); | ||
3499 | |||
3500 | return 0; | ||
3501 | +err_free_xmit: | ||
3502 | + free_page(page); | ||
3503 | + info->port.xmit_buf = NULL; | ||
3504 | + return ret; | ||
3505 | } | ||
3506 | |||
3507 | /* | ||
3508 | diff --git a/drivers/tty/serial/kgdboc.c b/drivers/tty/serial/kgdboc.c | ||
3509 | index 0314e78e31ff1..72b89702d008c 100644 | ||
3510 | --- a/drivers/tty/serial/kgdboc.c | ||
3511 | +++ b/drivers/tty/serial/kgdboc.c | ||
3512 | @@ -304,16 +304,16 @@ static int kgdboc_option_setup(char *opt) | ||
3513 | { | ||
3514 | if (!opt) { | ||
3515 | pr_err("config string not provided\n"); | ||
3516 | - return -EINVAL; | ||
3517 | + return 1; | ||
3518 | } | ||
3519 | |||
3520 | if (strlen(opt) >= MAX_CONFIG_LEN) { | ||
3521 | pr_err("config string too long\n"); | ||
3522 | - return -ENOSPC; | ||
3523 | + return 1; | ||
3524 | } | ||
3525 | strcpy(config, opt); | ||
3526 | |||
3527 | - return 0; | ||
3528 | + return 1; | ||
3529 | } | ||
3530 | |||
3531 | __setup("kgdboc=", kgdboc_option_setup); | ||
3532 | diff --git a/drivers/tty/serial/samsung.c b/drivers/tty/serial/samsung.c | ||
3533 | index 8c89697c53573..15b9bf35457b7 100644 | ||
3534 | --- a/drivers/tty/serial/samsung.c | ||
3535 | +++ b/drivers/tty/serial/samsung.c | ||
3536 | @@ -764,11 +764,8 @@ static irqreturn_t s3c24xx_serial_tx_chars(int irq, void *id) | ||
3537 | goto out; | ||
3538 | } | ||
3539 | |||
3540 | - if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS) { | ||
3541 | - spin_unlock(&port->lock); | ||
3542 | + if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS) | ||
3543 | uart_write_wakeup(port); | ||
3544 | - spin_lock(&port->lock); | ||
3545 | - } | ||
3546 | |||
3547 | if (uart_circ_empty(xmit)) | ||
3548 | s3c24xx_serial_stop_tx(port); | ||
3549 | diff --git a/drivers/usb/dwc3/dwc3-omap.c b/drivers/usb/dwc3/dwc3-omap.c | ||
3550 | index 8e69150776f5c..a08b29fbaa50c 100644 | ||
3551 | --- a/drivers/usb/dwc3/dwc3-omap.c | ||
3552 | +++ b/drivers/usb/dwc3/dwc3-omap.c | ||
3553 | @@ -245,7 +245,7 @@ static void dwc3_omap_set_mailbox(struct dwc3_omap *omap, | ||
3554 | break; | ||
3555 | |||
3556 | case OMAP_DWC3_ID_FLOAT: | ||
3557 | - if (omap->vbus_reg) | ||
3558 | + if (omap->vbus_reg && regulator_is_enabled(omap->vbus_reg)) | ||
3559 | regulator_disable(omap->vbus_reg); | ||
3560 | val = dwc3_omap_read_utmi_ctrl(omap); | ||
3561 | val |= USBOTGSS_UTMI_OTG_CTRL_IDDIG; | ||
3562 | diff --git a/drivers/usb/serial/Kconfig b/drivers/usb/serial/Kconfig | ||
3563 | index 77c3ebe860c56..b495bbecf8096 100644 | ||
3564 | --- a/drivers/usb/serial/Kconfig | ||
3565 | +++ b/drivers/usb/serial/Kconfig | ||
3566 | @@ -65,6 +65,7 @@ config USB_SERIAL_SIMPLE | ||
3567 | - Libtransistor USB console | ||
3568 | - a number of Motorola phones | ||
3569 | - Motorola Tetra devices | ||
3570 | + - Nokia mobile phones | ||
3571 | - Novatel Wireless GPS receivers | ||
3572 | - Siemens USB/MPI adapter. | ||
3573 | - ViVOtech ViVOpay USB device. | ||
3574 | diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c | ||
3575 | index 3dd0bbb36dd27..c5fa5b704ec57 100644 | ||
3576 | --- a/drivers/usb/serial/pl2303.c | ||
3577 | +++ b/drivers/usb/serial/pl2303.c | ||
3578 | @@ -105,6 +105,7 @@ static const struct usb_device_id id_table[] = { | ||
3579 | { USB_DEVICE(ADLINK_VENDOR_ID, ADLINK_ND6530GC_PRODUCT_ID) }, | ||
3580 | { USB_DEVICE(SMART_VENDOR_ID, SMART_PRODUCT_ID) }, | ||
3581 | { USB_DEVICE(AT_VENDOR_ID, AT_VTKIT3_PRODUCT_ID) }, | ||
3582 | + { USB_DEVICE(IBM_VENDOR_ID, IBM_PRODUCT_ID) }, | ||
3583 | { } /* Terminating entry */ | ||
3584 | }; | ||
3585 | |||
3586 | diff --git a/drivers/usb/serial/pl2303.h b/drivers/usb/serial/pl2303.h | ||
3587 | index 62b8cd673aa11..908865495b489 100644 | ||
3588 | --- a/drivers/usb/serial/pl2303.h | ||
3589 | +++ b/drivers/usb/serial/pl2303.h | ||
3590 | @@ -33,6 +33,9 @@ | ||
3591 | #define ATEN_PRODUCT_UC485 0x2021 | ||
3592 | #define ATEN_PRODUCT_ID2 0x2118 | ||
3593 | |||
3594 | +#define IBM_VENDOR_ID 0x04b3 | ||
3595 | +#define IBM_PRODUCT_ID 0x4016 | ||
3596 | + | ||
3597 | #define IODATA_VENDOR_ID 0x04bb | ||
3598 | #define IODATA_PRODUCT_ID 0x0a03 | ||
3599 | #define IODATA_PRODUCT_ID_RSAQ5 0x0a0e | ||
3600 | diff --git a/drivers/usb/serial/usb-serial-simple.c b/drivers/usb/serial/usb-serial-simple.c | ||
3601 | index 15e05ebf37ac4..3681e64182620 100644 | ||
3602 | --- a/drivers/usb/serial/usb-serial-simple.c | ||
3603 | +++ b/drivers/usb/serial/usb-serial-simple.c | ||
3604 | @@ -94,6 +94,11 @@ DEVICE(moto_modem, MOTO_IDS); | ||
3605 | { USB_DEVICE(0x0cad, 0x9016) } /* TPG2200 */ | ||
3606 | DEVICE(motorola_tetra, MOTOROLA_TETRA_IDS); | ||
3607 | |||
3608 | +/* Nokia mobile phone driver */ | ||
3609 | +#define NOKIA_IDS() \ | ||
3610 | + { USB_DEVICE(0x0421, 0x069a) } /* Nokia 130 (RM-1035) */ | ||
3611 | +DEVICE(nokia, NOKIA_IDS); | ||
3612 | + | ||
3613 | /* Novatel Wireless GPS driver */ | ||
3614 | #define NOVATEL_IDS() \ | ||
3615 | { USB_DEVICE(0x09d7, 0x0100) } /* NovAtel FlexPack GPS */ | ||
3616 | @@ -126,6 +131,7 @@ static struct usb_serial_driver * const serial_drivers[] = { | ||
3617 | &vivopay_device, | ||
3618 | &moto_modem_device, | ||
3619 | &motorola_tetra_device, | ||
3620 | + &nokia_device, | ||
3621 | &novatel_gps_device, | ||
3622 | &hp4x_device, | ||
3623 | &suunto_device, | ||
3624 | @@ -143,6 +149,7 @@ static const struct usb_device_id id_table[] = { | ||
3625 | VIVOPAY_IDS(), | ||
3626 | MOTO_IDS(), | ||
3627 | MOTOROLA_TETRA_IDS(), | ||
3628 | + NOKIA_IDS(), | ||
3629 | NOVATEL_IDS(), | ||
3630 | HP4X_IDS(), | ||
3631 | SUUNTO_IDS(), | ||
3632 | diff --git a/drivers/usb/storage/ene_ub6250.c b/drivers/usb/storage/ene_ub6250.c | ||
3633 | index 4d6eb48b2c45d..aa88ff70b078f 100644 | ||
3634 | --- a/drivers/usb/storage/ene_ub6250.c | ||
3635 | +++ b/drivers/usb/storage/ene_ub6250.c | ||
3636 | @@ -251,36 +251,33 @@ static struct us_unusual_dev ene_ub6250_unusual_dev_list[] = { | ||
3637 | #define memstick_logaddr(logadr1, logadr0) ((((u16)(logadr1)) << 8) | (logadr0)) | ||
3638 | |||
3639 | |||
3640 | -struct SD_STATUS { | ||
3641 | - u8 Insert:1; | ||
3642 | - u8 Ready:1; | ||
3643 | - u8 MediaChange:1; | ||
3644 | - u8 IsMMC:1; | ||
3645 | - u8 HiCapacity:1; | ||
3646 | - u8 HiSpeed:1; | ||
3647 | - u8 WtP:1; | ||
3648 | - u8 Reserved:1; | ||
3649 | -}; | ||
3650 | - | ||
3651 | -struct MS_STATUS { | ||
3652 | - u8 Insert:1; | ||
3653 | - u8 Ready:1; | ||
3654 | - u8 MediaChange:1; | ||
3655 | - u8 IsMSPro:1; | ||
3656 | - u8 IsMSPHG:1; | ||
3657 | - u8 Reserved1:1; | ||
3658 | - u8 WtP:1; | ||
3659 | - u8 Reserved2:1; | ||
3660 | -}; | ||
3661 | - | ||
3662 | -struct SM_STATUS { | ||
3663 | - u8 Insert:1; | ||
3664 | - u8 Ready:1; | ||
3665 | - u8 MediaChange:1; | ||
3666 | - u8 Reserved:3; | ||
3667 | - u8 WtP:1; | ||
3668 | - u8 IsMS:1; | ||
3669 | -}; | ||
3670 | +/* SD_STATUS bits */ | ||
3671 | +#define SD_Insert BIT(0) | ||
3672 | +#define SD_Ready BIT(1) | ||
3673 | +#define SD_MediaChange BIT(2) | ||
3674 | +#define SD_IsMMC BIT(3) | ||
3675 | +#define SD_HiCapacity BIT(4) | ||
3676 | +#define SD_HiSpeed BIT(5) | ||
3677 | +#define SD_WtP BIT(6) | ||
3678 | + /* Bit 7 reserved */ | ||
3679 | + | ||
3680 | +/* MS_STATUS bits */ | ||
3681 | +#define MS_Insert BIT(0) | ||
3682 | +#define MS_Ready BIT(1) | ||
3683 | +#define MS_MediaChange BIT(2) | ||
3684 | +#define MS_IsMSPro BIT(3) | ||
3685 | +#define MS_IsMSPHG BIT(4) | ||
3686 | + /* Bit 5 reserved */ | ||
3687 | +#define MS_WtP BIT(6) | ||
3688 | + /* Bit 7 reserved */ | ||
3689 | + | ||
3690 | +/* SM_STATUS bits */ | ||
3691 | +#define SM_Insert BIT(0) | ||
3692 | +#define SM_Ready BIT(1) | ||
3693 | +#define SM_MediaChange BIT(2) | ||
3694 | + /* Bits 3-5 reserved */ | ||
3695 | +#define SM_WtP BIT(6) | ||
3696 | +#define SM_IsMS BIT(7) | ||
3697 | |||
3698 | struct ms_bootblock_cis { | ||
3699 | u8 bCistplDEVICE[6]; /* 0 */ | ||
3700 | @@ -451,9 +448,9 @@ struct ene_ub6250_info { | ||
3701 | u8 *bbuf; | ||
3702 | |||
3703 | /* for 6250 code */ | ||
3704 | - struct SD_STATUS SD_Status; | ||
3705 | - struct MS_STATUS MS_Status; | ||
3706 | - struct SM_STATUS SM_Status; | ||
3707 | + u8 SD_Status; | ||
3708 | + u8 MS_Status; | ||
3709 | + u8 SM_Status; | ||
3710 | |||
3711 | /* ----- SD Control Data ---------------- */ | ||
3712 | /*SD_REGISTER SD_Regs; */ | ||
3713 | @@ -588,7 +585,7 @@ static int sd_scsi_test_unit_ready(struct us_data *us, struct scsi_cmnd *srb) | ||
3714 | { | ||
3715 | struct ene_ub6250_info *info = (struct ene_ub6250_info *) us->extra; | ||
3716 | |||
3717 | - if (info->SD_Status.Insert && info->SD_Status.Ready) | ||
3718 | + if ((info->SD_Status & SD_Insert) && (info->SD_Status & SD_Ready)) | ||
3719 | return USB_STOR_TRANSPORT_GOOD; | ||
3720 | else { | ||
3721 | ene_sd_init(us); | ||
3722 | @@ -620,7 +617,7 @@ static int sd_scsi_mode_sense(struct us_data *us, struct scsi_cmnd *srb) | ||
3723 | 0x0b, 0x00, 0x80, 0x08, 0x00, 0x00, | ||
3724 | 0x71, 0xc0, 0x00, 0x00, 0x02, 0x00 }; | ||
3725 | |||
3726 | - if (info->SD_Status.WtP) | ||
3727 | + if (info->SD_Status & SD_WtP) | ||
3728 | usb_stor_set_xfer_buf(mediaWP, 12, srb); | ||
3729 | else | ||
3730 | usb_stor_set_xfer_buf(mediaNoWP, 12, srb); | ||
3731 | @@ -639,9 +636,9 @@ static int sd_scsi_read_capacity(struct us_data *us, struct scsi_cmnd *srb) | ||
3732 | struct ene_ub6250_info *info = (struct ene_ub6250_info *) us->extra; | ||
3733 | |||
3734 | usb_stor_dbg(us, "sd_scsi_read_capacity\n"); | ||
3735 | - if (info->SD_Status.HiCapacity) { | ||
3736 | + if (info->SD_Status & SD_HiCapacity) { | ||
3737 | bl_len = 0x200; | ||
3738 | - if (info->SD_Status.IsMMC) | ||
3739 | + if (info->SD_Status & SD_IsMMC) | ||
3740 | bl_num = info->HC_C_SIZE-1; | ||
3741 | else | ||
3742 | bl_num = (info->HC_C_SIZE + 1) * 1024 - 1; | ||
3743 | @@ -691,7 +688,7 @@ static int sd_scsi_read(struct us_data *us, struct scsi_cmnd *srb) | ||
3744 | return USB_STOR_TRANSPORT_ERROR; | ||
3745 | } | ||
3746 | |||
3747 | - if (info->SD_Status.HiCapacity) | ||
3748 | + if (info->SD_Status & SD_HiCapacity) | ||
3749 | bnByte = bn; | ||
3750 | |||
3751 | /* set up the command wrapper */ | ||
3752 | @@ -731,7 +728,7 @@ static int sd_scsi_write(struct us_data *us, struct scsi_cmnd *srb) | ||
3753 | return USB_STOR_TRANSPORT_ERROR; | ||
3754 | } | ||
3755 | |||
3756 | - if (info->SD_Status.HiCapacity) | ||
3757 | + if (info->SD_Status & SD_HiCapacity) | ||
3758 | bnByte = bn; | ||
3759 | |||
3760 | /* set up the command wrapper */ | ||
3761 | @@ -1447,7 +1444,7 @@ static int ms_scsi_test_unit_ready(struct us_data *us, struct scsi_cmnd *srb) | ||
3762 | struct ene_ub6250_info *info = (struct ene_ub6250_info *)(us->extra); | ||
3763 | |||
3764 | /* pr_info("MS_SCSI_Test_Unit_Ready\n"); */ | ||
3765 | - if (info->MS_Status.Insert && info->MS_Status.Ready) { | ||
3766 | + if ((info->MS_Status & MS_Insert) && (info->MS_Status & MS_Ready)) { | ||
3767 | return USB_STOR_TRANSPORT_GOOD; | ||
3768 | } else { | ||
3769 | ene_ms_init(us); | ||
3770 | @@ -1480,7 +1477,7 @@ static int ms_scsi_mode_sense(struct us_data *us, struct scsi_cmnd *srb) | ||
3771 | 0x0b, 0x00, 0x80, 0x08, 0x00, 0x00, | ||
3772 | 0x71, 0xc0, 0x00, 0x00, 0x02, 0x00 }; | ||
3773 | |||
3774 | - if (info->MS_Status.WtP) | ||
3775 | + if (info->MS_Status & MS_WtP) | ||
3776 | usb_stor_set_xfer_buf(mediaWP, 12, srb); | ||
3777 | else | ||
3778 | usb_stor_set_xfer_buf(mediaNoWP, 12, srb); | ||
3779 | @@ -1499,7 +1496,7 @@ static int ms_scsi_read_capacity(struct us_data *us, struct scsi_cmnd *srb) | ||
3780 | |||
3781 | usb_stor_dbg(us, "ms_scsi_read_capacity\n"); | ||
3782 | bl_len = 0x200; | ||
3783 | - if (info->MS_Status.IsMSPro) | ||
3784 | + if (info->MS_Status & MS_IsMSPro) | ||
3785 | bl_num = info->MSP_TotalBlock - 1; | ||
3786 | else | ||
3787 | bl_num = info->MS_Lib.NumberOfLogBlock * info->MS_Lib.blockSize * 2 - 1; | ||
3788 | @@ -1654,7 +1651,7 @@ static int ms_scsi_read(struct us_data *us, struct scsi_cmnd *srb) | ||
3789 | if (bn > info->bl_num) | ||
3790 | return USB_STOR_TRANSPORT_ERROR; | ||
3791 | |||
3792 | - if (info->MS_Status.IsMSPro) { | ||
3793 | + if (info->MS_Status & MS_IsMSPro) { | ||
3794 | result = ene_load_bincode(us, MSP_RW_PATTERN); | ||
3795 | if (result != USB_STOR_XFER_GOOD) { | ||
3796 | usb_stor_dbg(us, "Load MPS RW pattern Fail !!\n"); | ||
3797 | @@ -1755,7 +1752,7 @@ static int ms_scsi_write(struct us_data *us, struct scsi_cmnd *srb) | ||
3798 | if (bn > info->bl_num) | ||
3799 | return USB_STOR_TRANSPORT_ERROR; | ||
3800 | |||
3801 | - if (info->MS_Status.IsMSPro) { | ||
3802 | + if (info->MS_Status & MS_IsMSPro) { | ||
3803 | result = ene_load_bincode(us, MSP_RW_PATTERN); | ||
3804 | if (result != USB_STOR_XFER_GOOD) { | ||
3805 | pr_info("Load MSP RW pattern Fail !!\n"); | ||
3806 | @@ -1863,12 +1860,12 @@ static int ene_get_card_status(struct us_data *us, u8 *buf) | ||
3807 | |||
3808 | tmpreg = (u16) reg4b; | ||
3809 | reg4b = *(u32 *)(&buf[0x14]); | ||
3810 | - if (info->SD_Status.HiCapacity && !info->SD_Status.IsMMC) | ||
3811 | + if ((info->SD_Status & SD_HiCapacity) && !(info->SD_Status & SD_IsMMC)) | ||
3812 | info->HC_C_SIZE = (reg4b >> 8) & 0x3fffff; | ||
3813 | |||
3814 | info->SD_C_SIZE = ((tmpreg & 0x03) << 10) | (u16)(reg4b >> 22); | ||
3815 | info->SD_C_SIZE_MULT = (u8)(reg4b >> 7) & 0x07; | ||
3816 | - if (info->SD_Status.HiCapacity && info->SD_Status.IsMMC) | ||
3817 | + if ((info->SD_Status & SD_HiCapacity) && (info->SD_Status & SD_IsMMC)) | ||
3818 | info->HC_C_SIZE = *(u32 *)(&buf[0x100]); | ||
3819 | |||
3820 | if (info->SD_READ_BL_LEN > SD_BLOCK_LEN) { | ||
3821 | @@ -2080,6 +2077,7 @@ static int ene_ms_init(struct us_data *us) | ||
3822 | u16 MSP_BlockSize, MSP_UserAreaBlocks; | ||
3823 | struct ene_ub6250_info *info = (struct ene_ub6250_info *) us->extra; | ||
3824 | u8 *bbuf = info->bbuf; | ||
3825 | + unsigned int s; | ||
3826 | |||
3827 | printk(KERN_INFO "transport --- ENE_MSInit\n"); | ||
3828 | |||
3829 | @@ -2104,15 +2102,16 @@ static int ene_ms_init(struct us_data *us) | ||
3830 | return USB_STOR_TRANSPORT_ERROR; | ||
3831 | } | ||
3832 | /* the same part to test ENE */ | ||
3833 | - info->MS_Status = *(struct MS_STATUS *) bbuf; | ||
3834 | - | ||
3835 | - if (info->MS_Status.Insert && info->MS_Status.Ready) { | ||
3836 | - printk(KERN_INFO "Insert = %x\n", info->MS_Status.Insert); | ||
3837 | - printk(KERN_INFO "Ready = %x\n", info->MS_Status.Ready); | ||
3838 | - printk(KERN_INFO "IsMSPro = %x\n", info->MS_Status.IsMSPro); | ||
3839 | - printk(KERN_INFO "IsMSPHG = %x\n", info->MS_Status.IsMSPHG); | ||
3840 | - printk(KERN_INFO "WtP= %x\n", info->MS_Status.WtP); | ||
3841 | - if (info->MS_Status.IsMSPro) { | ||
3842 | + info->MS_Status = bbuf[0]; | ||
3843 | + | ||
3844 | + s = info->MS_Status; | ||
3845 | + if ((s & MS_Insert) && (s & MS_Ready)) { | ||
3846 | + printk(KERN_INFO "Insert = %x\n", !!(s & MS_Insert)); | ||
3847 | + printk(KERN_INFO "Ready = %x\n", !!(s & MS_Ready)); | ||
3848 | + printk(KERN_INFO "IsMSPro = %x\n", !!(s & MS_IsMSPro)); | ||
3849 | + printk(KERN_INFO "IsMSPHG = %x\n", !!(s & MS_IsMSPHG)); | ||
3850 | + printk(KERN_INFO "WtP= %x\n", !!(s & MS_WtP)); | ||
3851 | + if (s & MS_IsMSPro) { | ||
3852 | MSP_BlockSize = (bbuf[6] << 8) | bbuf[7]; | ||
3853 | MSP_UserAreaBlocks = (bbuf[10] << 8) | bbuf[11]; | ||
3854 | info->MSP_TotalBlock = MSP_BlockSize * MSP_UserAreaBlocks; | ||
3855 | @@ -2173,17 +2172,17 @@ static int ene_sd_init(struct us_data *us) | ||
3856 | return USB_STOR_TRANSPORT_ERROR; | ||
3857 | } | ||
3858 | |||
3859 | - info->SD_Status = *(struct SD_STATUS *) bbuf; | ||
3860 | - if (info->SD_Status.Insert && info->SD_Status.Ready) { | ||
3861 | - struct SD_STATUS *s = &info->SD_Status; | ||
3862 | + info->SD_Status = bbuf[0]; | ||
3863 | + if ((info->SD_Status & SD_Insert) && (info->SD_Status & SD_Ready)) { | ||
3864 | + unsigned int s = info->SD_Status; | ||
3865 | |||
3866 | ene_get_card_status(us, bbuf); | ||
3867 | - usb_stor_dbg(us, "Insert = %x\n", s->Insert); | ||
3868 | - usb_stor_dbg(us, "Ready = %x\n", s->Ready); | ||
3869 | - usb_stor_dbg(us, "IsMMC = %x\n", s->IsMMC); | ||
3870 | - usb_stor_dbg(us, "HiCapacity = %x\n", s->HiCapacity); | ||
3871 | - usb_stor_dbg(us, "HiSpeed = %x\n", s->HiSpeed); | ||
3872 | - usb_stor_dbg(us, "WtP = %x\n", s->WtP); | ||
3873 | + usb_stor_dbg(us, "Insert = %x\n", !!(s & SD_Insert)); | ||
3874 | + usb_stor_dbg(us, "Ready = %x\n", !!(s & SD_Ready)); | ||
3875 | + usb_stor_dbg(us, "IsMMC = %x\n", !!(s & SD_IsMMC)); | ||
3876 | + usb_stor_dbg(us, "HiCapacity = %x\n", !!(s & SD_HiCapacity)); | ||
3877 | + usb_stor_dbg(us, "HiSpeed = %x\n", !!(s & SD_HiSpeed)); | ||
3878 | + usb_stor_dbg(us, "WtP = %x\n", !!(s & SD_WtP)); | ||
3879 | } else { | ||
3880 | usb_stor_dbg(us, "SD Card Not Ready --- %x\n", bbuf[0]); | ||
3881 | return USB_STOR_TRANSPORT_ERROR; | ||
3882 | @@ -2205,14 +2204,14 @@ static int ene_init(struct us_data *us) | ||
3883 | |||
3884 | misc_reg03 = bbuf[0]; | ||
3885 | if (misc_reg03 & 0x01) { | ||
3886 | - if (!info->SD_Status.Ready) { | ||
3887 | + if (!(info->SD_Status & SD_Ready)) { | ||
3888 | result = ene_sd_init(us); | ||
3889 | if (result != USB_STOR_XFER_GOOD) | ||
3890 | return USB_STOR_TRANSPORT_ERROR; | ||
3891 | } | ||
3892 | } | ||
3893 | if (misc_reg03 & 0x02) { | ||
3894 | - if (!info->MS_Status.Ready) { | ||
3895 | + if (!(info->MS_Status & MS_Ready)) { | ||
3896 | result = ene_ms_init(us); | ||
3897 | if (result != USB_STOR_XFER_GOOD) | ||
3898 | return USB_STOR_TRANSPORT_ERROR; | ||
3899 | @@ -2302,14 +2301,14 @@ static int ene_transport(struct scsi_cmnd *srb, struct us_data *us) | ||
3900 | |||
3901 | /*US_DEBUG(usb_stor_show_command(us, srb)); */ | ||
3902 | scsi_set_resid(srb, 0); | ||
3903 | - if (unlikely(!(info->SD_Status.Ready || info->MS_Status.Ready))) | ||
3904 | + if (unlikely(!(info->SD_Status & SD_Ready) || (info->MS_Status & MS_Ready))) | ||
3905 | result = ene_init(us); | ||
3906 | if (result == USB_STOR_XFER_GOOD) { | ||
3907 | result = USB_STOR_TRANSPORT_ERROR; | ||
3908 | - if (info->SD_Status.Ready) | ||
3909 | + if (info->SD_Status & SD_Ready) | ||
3910 | result = sd_scsi_irp(us, srb); | ||
3911 | |||
3912 | - if (info->MS_Status.Ready) | ||
3913 | + if (info->MS_Status & MS_Ready) | ||
3914 | result = ms_scsi_irp(us, srb); | ||
3915 | } | ||
3916 | return result; | ||
3917 | @@ -2373,7 +2372,6 @@ static int ene_ub6250_probe(struct usb_interface *intf, | ||
3918 | |||
3919 | static int ene_ub6250_resume(struct usb_interface *iface) | ||
3920 | { | ||
3921 | - u8 tmp = 0; | ||
3922 | struct us_data *us = usb_get_intfdata(iface); | ||
3923 | struct ene_ub6250_info *info = (struct ene_ub6250_info *)(us->extra); | ||
3924 | |||
3925 | @@ -2385,17 +2383,16 @@ static int ene_ub6250_resume(struct usb_interface *iface) | ||
3926 | mutex_unlock(&us->dev_mutex); | ||
3927 | |||
3928 | info->Power_IsResum = true; | ||
3929 | - /*info->SD_Status.Ready = 0; */ | ||
3930 | - info->SD_Status = *(struct SD_STATUS *)&tmp; | ||
3931 | - info->MS_Status = *(struct MS_STATUS *)&tmp; | ||
3932 | - info->SM_Status = *(struct SM_STATUS *)&tmp; | ||
3933 | + /* info->SD_Status &= ~SD_Ready; */ | ||
3934 | + info->SD_Status = 0; | ||
3935 | + info->MS_Status = 0; | ||
3936 | + info->SM_Status = 0; | ||
3937 | |||
3938 | return 0; | ||
3939 | } | ||
3940 | |||
3941 | static int ene_ub6250_reset_resume(struct usb_interface *iface) | ||
3942 | { | ||
3943 | - u8 tmp = 0; | ||
3944 | struct us_data *us = usb_get_intfdata(iface); | ||
3945 | struct ene_ub6250_info *info = (struct ene_ub6250_info *)(us->extra); | ||
3946 | |||
3947 | @@ -2407,10 +2404,10 @@ static int ene_ub6250_reset_resume(struct usb_interface *iface) | ||
3948 | * the device | ||
3949 | */ | ||
3950 | info->Power_IsResum = true; | ||
3951 | - /*info->SD_Status.Ready = 0; */ | ||
3952 | - info->SD_Status = *(struct SD_STATUS *)&tmp; | ||
3953 | - info->MS_Status = *(struct MS_STATUS *)&tmp; | ||
3954 | - info->SM_Status = *(struct SM_STATUS *)&tmp; | ||
3955 | + /* info->SD_Status &= ~SD_Ready; */ | ||
3956 | + info->SD_Status = 0; | ||
3957 | + info->MS_Status = 0; | ||
3958 | + info->SM_Status = 0; | ||
3959 | |||
3960 | return 0; | ||
3961 | } | ||
3962 | diff --git a/drivers/usb/storage/realtek_cr.c b/drivers/usb/storage/realtek_cr.c | ||
3963 | index d955761fce6fc..d9d69637d6141 100644 | ||
3964 | --- a/drivers/usb/storage/realtek_cr.c | ||
3965 | +++ b/drivers/usb/storage/realtek_cr.c | ||
3966 | @@ -377,7 +377,7 @@ static int rts51x_read_mem(struct us_data *us, u16 addr, u8 *data, u16 len) | ||
3967 | |||
3968 | buf = kmalloc(len, GFP_NOIO); | ||
3969 | if (buf == NULL) | ||
3970 | - return USB_STOR_TRANSPORT_ERROR; | ||
3971 | + return -ENOMEM; | ||
3972 | |||
3973 | usb_stor_dbg(us, "addr = 0x%x, len = %d\n", addr, len); | ||
3974 | |||
3975 | diff --git a/drivers/video/fbdev/atafb.c b/drivers/video/fbdev/atafb.c | ||
3976 | index fcd2dd670a658..770f77055682b 100644 | ||
3977 | --- a/drivers/video/fbdev/atafb.c | ||
3978 | +++ b/drivers/video/fbdev/atafb.c | ||
3979 | @@ -1713,9 +1713,9 @@ static int falcon_setcolreg(unsigned int regno, unsigned int red, | ||
3980 | ((blue & 0xfc00) >> 8)); | ||
3981 | if (regno < 16) { | ||
3982 | shifter_tt.color_reg[regno] = | ||
3983 | - (((red & 0xe000) >> 13) | ((red & 0x1000) >> 12) << 8) | | ||
3984 | - (((green & 0xe000) >> 13) | ((green & 0x1000) >> 12) << 4) | | ||
3985 | - ((blue & 0xe000) >> 13) | ((blue & 0x1000) >> 12); | ||
3986 | + ((((red & 0xe000) >> 13) | ((red & 0x1000) >> 12)) << 8) | | ||
3987 | + ((((green & 0xe000) >> 13) | ((green & 0x1000) >> 12)) << 4) | | ||
3988 | + ((blue & 0xe000) >> 13) | ((blue & 0x1000) >> 12); | ||
3989 | ((u32 *)info->pseudo_palette)[regno] = ((red & 0xf800) | | ||
3990 | ((green & 0xfc00) >> 5) | | ||
3991 | ((blue & 0xf800) >> 11)); | ||
3992 | @@ -2001,9 +2001,9 @@ static int stste_setcolreg(unsigned int regno, unsigned int red, | ||
3993 | green >>= 12; | ||
3994 | if (ATARIHW_PRESENT(EXTD_SHIFTER)) | ||
3995 | shifter_tt.color_reg[regno] = | ||
3996 | - (((red & 0xe) >> 1) | ((red & 1) << 3) << 8) | | ||
3997 | - (((green & 0xe) >> 1) | ((green & 1) << 3) << 4) | | ||
3998 | - ((blue & 0xe) >> 1) | ((blue & 1) << 3); | ||
3999 | + ((((red & 0xe) >> 1) | ((red & 1) << 3)) << 8) | | ||
4000 | + ((((green & 0xe) >> 1) | ((green & 1) << 3)) << 4) | | ||
4001 | + ((blue & 0xe) >> 1) | ((blue & 1) << 3); | ||
4002 | else | ||
4003 | shifter_tt.color_reg[regno] = | ||
4004 | ((red & 0xe) << 7) | | ||
4005 | diff --git a/drivers/video/fbdev/cirrusfb.c b/drivers/video/fbdev/cirrusfb.c | ||
4006 | index d992aa5eb3f0d..a8f4967de7980 100644 | ||
4007 | --- a/drivers/video/fbdev/cirrusfb.c | ||
4008 | +++ b/drivers/video/fbdev/cirrusfb.c | ||
4009 | @@ -470,7 +470,7 @@ static int cirrusfb_check_mclk(struct fb_info *info, long freq) | ||
4010 | return 0; | ||
4011 | } | ||
4012 | |||
4013 | -static int cirrusfb_check_pixclock(const struct fb_var_screeninfo *var, | ||
4014 | +static int cirrusfb_check_pixclock(struct fb_var_screeninfo *var, | ||
4015 | struct fb_info *info) | ||
4016 | { | ||
4017 | long freq; | ||
4018 | @@ -479,9 +479,7 @@ static int cirrusfb_check_pixclock(const struct fb_var_screeninfo *var, | ||
4019 | unsigned maxclockidx = var->bits_per_pixel >> 3; | ||
4020 | |||
4021 | /* convert from ps to kHz */ | ||
4022 | - freq = PICOS2KHZ(var->pixclock); | ||
4023 | - | ||
4024 | - dev_dbg(info->device, "desired pixclock: %ld kHz\n", freq); | ||
4025 | + freq = PICOS2KHZ(var->pixclock ? : 1); | ||
4026 | |||
4027 | maxclock = cirrusfb_board_info[cinfo->btype].maxclock[maxclockidx]; | ||
4028 | cinfo->multiplexing = 0; | ||
4029 | @@ -489,11 +487,13 @@ static int cirrusfb_check_pixclock(const struct fb_var_screeninfo *var, | ||
4030 | /* If the frequency is greater than we can support, we might be able | ||
4031 | * to use multiplexing for the video mode */ | ||
4032 | if (freq > maxclock) { | ||
4033 | - dev_err(info->device, | ||
4034 | - "Frequency greater than maxclock (%ld kHz)\n", | ||
4035 | - maxclock); | ||
4036 | - return -EINVAL; | ||
4037 | + var->pixclock = KHZ2PICOS(maxclock); | ||
4038 | + | ||
4039 | + while ((freq = PICOS2KHZ(var->pixclock)) > maxclock) | ||
4040 | + var->pixclock++; | ||
4041 | } | ||
4042 | + dev_dbg(info->device, "desired pixclock: %ld kHz\n", freq); | ||
4043 | + | ||
4044 | /* | ||
4045 | * Additional constraint: 8bpp uses DAC clock doubling to allow maximum | ||
4046 | * pixel clock | ||
4047 | diff --git a/drivers/video/fbdev/core/fbcvt.c b/drivers/video/fbdev/core/fbcvt.c | ||
4048 | index 55d2bd0ce5c02..64843464c6613 100644 | ||
4049 | --- a/drivers/video/fbdev/core/fbcvt.c | ||
4050 | +++ b/drivers/video/fbdev/core/fbcvt.c | ||
4051 | @@ -214,9 +214,11 @@ static u32 fb_cvt_aspect_ratio(struct fb_cvt_data *cvt) | ||
4052 | static void fb_cvt_print_name(struct fb_cvt_data *cvt) | ||
4053 | { | ||
4054 | u32 pixcount, pixcount_mod; | ||
4055 | - int cnt = 255, offset = 0, read = 0; | ||
4056 | - u8 *buf = kzalloc(256, GFP_KERNEL); | ||
4057 | + int size = 256; | ||
4058 | + int off = 0; | ||
4059 | + u8 *buf; | ||
4060 | |||
4061 | + buf = kzalloc(size, GFP_KERNEL); | ||
4062 | if (!buf) | ||
4063 | return; | ||
4064 | |||
4065 | @@ -224,43 +226,30 @@ static void fb_cvt_print_name(struct fb_cvt_data *cvt) | ||
4066 | pixcount_mod = (cvt->xres * (cvt->yres/cvt->interlace)) % 1000000; | ||
4067 | pixcount_mod /= 1000; | ||
4068 | |||
4069 | - read = snprintf(buf+offset, cnt, "fbcvt: %dx%d@%d: CVT Name - ", | ||
4070 | - cvt->xres, cvt->yres, cvt->refresh); | ||
4071 | - offset += read; | ||
4072 | - cnt -= read; | ||
4073 | + off += scnprintf(buf + off, size - off, "fbcvt: %dx%d@%d: CVT Name - ", | ||
4074 | + cvt->xres, cvt->yres, cvt->refresh); | ||
4075 | |||
4076 | - if (cvt->status) | ||
4077 | - snprintf(buf+offset, cnt, "Not a CVT standard - %d.%03d Mega " | ||
4078 | - "Pixel Image\n", pixcount, pixcount_mod); | ||
4079 | - else { | ||
4080 | - if (pixcount) { | ||
4081 | - read = snprintf(buf+offset, cnt, "%d", pixcount); | ||
4082 | - cnt -= read; | ||
4083 | - offset += read; | ||
4084 | - } | ||
4085 | + if (cvt->status) { | ||
4086 | + off += scnprintf(buf + off, size - off, | ||
4087 | + "Not a CVT standard - %d.%03d Mega Pixel Image\n", | ||
4088 | + pixcount, pixcount_mod); | ||
4089 | + } else { | ||
4090 | + if (pixcount) | ||
4091 | + off += scnprintf(buf + off, size - off, "%d", pixcount); | ||
4092 | |||
4093 | - read = snprintf(buf+offset, cnt, ".%03dM", pixcount_mod); | ||
4094 | - cnt -= read; | ||
4095 | - offset += read; | ||
4096 | + off += scnprintf(buf + off, size - off, ".%03dM", pixcount_mod); | ||
4097 | |||
4098 | if (cvt->aspect_ratio == 0) | ||
4099 | - read = snprintf(buf+offset, cnt, "3"); | ||
4100 | + off += scnprintf(buf + off, size - off, "3"); | ||
4101 | else if (cvt->aspect_ratio == 3) | ||
4102 | - read = snprintf(buf+offset, cnt, "4"); | ||
4103 | + off += scnprintf(buf + off, size - off, "4"); | ||
4104 | else if (cvt->aspect_ratio == 1 || cvt->aspect_ratio == 4) | ||
4105 | - read = snprintf(buf+offset, cnt, "9"); | ||
4106 | + off += scnprintf(buf + off, size - off, "9"); | ||
4107 | else if (cvt->aspect_ratio == 2) | ||
4108 | - read = snprintf(buf+offset, cnt, "A"); | ||
4109 | - else | ||
4110 | - read = 0; | ||
4111 | - cnt -= read; | ||
4112 | - offset += read; | ||
4113 | - | ||
4114 | - if (cvt->flags & FB_CVT_FLAG_REDUCED_BLANK) { | ||
4115 | - read = snprintf(buf+offset, cnt, "-R"); | ||
4116 | - cnt -= read; | ||
4117 | - offset += read; | ||
4118 | - } | ||
4119 | + off += scnprintf(buf + off, size - off, "A"); | ||
4120 | + | ||
4121 | + if (cvt->flags & FB_CVT_FLAG_REDUCED_BLANK) | ||
4122 | + off += scnprintf(buf + off, size - off, "-R"); | ||
4123 | } | ||
4124 | |||
4125 | printk(KERN_INFO "%s\n", buf); | ||
4126 | diff --git a/drivers/video/fbdev/nvidia/nv_i2c.c b/drivers/video/fbdev/nvidia/nv_i2c.c | ||
4127 | index d7994a1732459..0b48965a6420c 100644 | ||
4128 | --- a/drivers/video/fbdev/nvidia/nv_i2c.c | ||
4129 | +++ b/drivers/video/fbdev/nvidia/nv_i2c.c | ||
4130 | @@ -86,7 +86,7 @@ static int nvidia_setup_i2c_bus(struct nvidia_i2c_chan *chan, const char *name, | ||
4131 | { | ||
4132 | int rc; | ||
4133 | |||
4134 | - strcpy(chan->adapter.name, name); | ||
4135 | + strscpy(chan->adapter.name, name, sizeof(chan->adapter.name)); | ||
4136 | chan->adapter.owner = THIS_MODULE; | ||
4137 | chan->adapter.class = i2c_class; | ||
4138 | chan->adapter.algo_data = &chan->algo; | ||
4139 | diff --git a/drivers/video/fbdev/omap2/omapfb/displays/connector-dvi.c b/drivers/video/fbdev/omap2/omapfb/displays/connector-dvi.c | ||
4140 | index 06e1db34541e2..41b0db0cc0471 100644 | ||
4141 | --- a/drivers/video/fbdev/omap2/omapfb/displays/connector-dvi.c | ||
4142 | +++ b/drivers/video/fbdev/omap2/omapfb/displays/connector-dvi.c | ||
4143 | @@ -254,6 +254,7 @@ static int dvic_probe_of(struct platform_device *pdev) | ||
4144 | adapter_node = of_parse_phandle(node, "ddc-i2c-bus", 0); | ||
4145 | if (adapter_node) { | ||
4146 | adapter = of_get_i2c_adapter_by_node(adapter_node); | ||
4147 | + of_node_put(adapter_node); | ||
4148 | if (adapter == NULL) { | ||
4149 | dev_err(&pdev->dev, "failed to parse ddc-i2c-bus\n"); | ||
4150 | omap_dss_put_device(ddata->in); | ||
4151 | diff --git a/drivers/video/fbdev/omap2/omapfb/displays/panel-dsi-cm.c b/drivers/video/fbdev/omap2/omapfb/displays/panel-dsi-cm.c | ||
4152 | index 8b810696a42b6..6a8f0f0fa6019 100644 | ||
4153 | --- a/drivers/video/fbdev/omap2/omapfb/displays/panel-dsi-cm.c | ||
4154 | +++ b/drivers/video/fbdev/omap2/omapfb/displays/panel-dsi-cm.c | ||
4155 | @@ -413,7 +413,7 @@ static ssize_t dsicm_num_errors_show(struct device *dev, | ||
4156 | if (r) | ||
4157 | return r; | ||
4158 | |||
4159 | - return snprintf(buf, PAGE_SIZE, "%d\n", errors); | ||
4160 | + return sysfs_emit(buf, "%d\n", errors); | ||
4161 | } | ||
4162 | |||
4163 | static ssize_t dsicm_hw_revision_show(struct device *dev, | ||
4164 | @@ -444,7 +444,7 @@ static ssize_t dsicm_hw_revision_show(struct device *dev, | ||
4165 | if (r) | ||
4166 | return r; | ||
4167 | |||
4168 | - return snprintf(buf, PAGE_SIZE, "%02x.%02x.%02x\n", id1, id2, id3); | ||
4169 | + return sysfs_emit(buf, "%02x.%02x.%02x\n", id1, id2, id3); | ||
4170 | } | ||
4171 | |||
4172 | static ssize_t dsicm_store_ulps(struct device *dev, | ||
4173 | @@ -494,7 +494,7 @@ static ssize_t dsicm_show_ulps(struct device *dev, | ||
4174 | t = ddata->ulps_enabled; | ||
4175 | mutex_unlock(&ddata->lock); | ||
4176 | |||
4177 | - return snprintf(buf, PAGE_SIZE, "%u\n", t); | ||
4178 | + return sysfs_emit(buf, "%u\n", t); | ||
4179 | } | ||
4180 | |||
4181 | static ssize_t dsicm_store_ulps_timeout(struct device *dev, | ||
4182 | @@ -541,7 +541,7 @@ static ssize_t dsicm_show_ulps_timeout(struct device *dev, | ||
4183 | t = ddata->ulps_timeout; | ||
4184 | mutex_unlock(&ddata->lock); | ||
4185 | |||
4186 | - return snprintf(buf, PAGE_SIZE, "%u\n", t); | ||
4187 | + return sysfs_emit(buf, "%u\n", t); | ||
4188 | } | ||
4189 | |||
4190 | static DEVICE_ATTR(num_dsi_errors, S_IRUGO, dsicm_num_errors_show, NULL); | ||
4191 | diff --git a/drivers/video/fbdev/omap2/omapfb/displays/panel-sony-acx565akm.c b/drivers/video/fbdev/omap2/omapfb/displays/panel-sony-acx565akm.c | ||
4192 | index 468560a6daaea..0a1a82c686807 100644 | ||
4193 | --- a/drivers/video/fbdev/omap2/omapfb/displays/panel-sony-acx565akm.c | ||
4194 | +++ b/drivers/video/fbdev/omap2/omapfb/displays/panel-sony-acx565akm.c | ||
4195 | @@ -487,7 +487,7 @@ static ssize_t show_cabc_available_modes(struct device *dev, | ||
4196 | int i; | ||
4197 | |||
4198 | if (!ddata->has_cabc) | ||
4199 | - return snprintf(buf, PAGE_SIZE, "%s\n", cabc_modes[0]); | ||
4200 | + return sysfs_emit(buf, "%s\n", cabc_modes[0]); | ||
4201 | |||
4202 | for (i = 0, len = 0; | ||
4203 | len < PAGE_SIZE && i < ARRAY_SIZE(cabc_modes); i++) | ||
4204 | diff --git a/drivers/video/fbdev/omap2/omapfb/displays/panel-tpo-td043mtea1.c b/drivers/video/fbdev/omap2/omapfb/displays/panel-tpo-td043mtea1.c | ||
4205 | index 51e628b85f4a0..2b8b6b5dc1aa2 100644 | ||
4206 | --- a/drivers/video/fbdev/omap2/omapfb/displays/panel-tpo-td043mtea1.c | ||
4207 | +++ b/drivers/video/fbdev/omap2/omapfb/displays/panel-tpo-td043mtea1.c | ||
4208 | @@ -173,7 +173,7 @@ static ssize_t tpo_td043_vmirror_show(struct device *dev, | ||
4209 | { | ||
4210 | struct panel_drv_data *ddata = dev_get_drvdata(dev); | ||
4211 | |||
4212 | - return snprintf(buf, PAGE_SIZE, "%d\n", ddata->vmirror); | ||
4213 | + return sysfs_emit(buf, "%d\n", ddata->vmirror); | ||
4214 | } | ||
4215 | |||
4216 | static ssize_t tpo_td043_vmirror_store(struct device *dev, | ||
4217 | @@ -203,7 +203,7 @@ static ssize_t tpo_td043_mode_show(struct device *dev, | ||
4218 | { | ||
4219 | struct panel_drv_data *ddata = dev_get_drvdata(dev); | ||
4220 | |||
4221 | - return snprintf(buf, PAGE_SIZE, "%d\n", ddata->mode); | ||
4222 | + return sysfs_emit(buf, "%d\n", ddata->mode); | ||
4223 | } | ||
4224 | |||
4225 | static ssize_t tpo_td043_mode_store(struct device *dev, | ||
4226 | diff --git a/drivers/video/fbdev/sm712fb.c b/drivers/video/fbdev/sm712fb.c | ||
4227 | index 17efcdd4dc99b..620f3152213ae 100644 | ||
4228 | --- a/drivers/video/fbdev/sm712fb.c | ||
4229 | +++ b/drivers/video/fbdev/sm712fb.c | ||
4230 | @@ -1046,7 +1046,7 @@ static ssize_t smtcfb_read(struct fb_info *info, char __user *buf, | ||
4231 | if (count + p > total_size) | ||
4232 | count = total_size - p; | ||
4233 | |||
4234 | - buffer = kmalloc((count > PAGE_SIZE) ? PAGE_SIZE : count, GFP_KERNEL); | ||
4235 | + buffer = kmalloc(PAGE_SIZE, GFP_KERNEL); | ||
4236 | if (!buffer) | ||
4237 | return -ENOMEM; | ||
4238 | |||
4239 | @@ -1058,25 +1058,14 @@ static ssize_t smtcfb_read(struct fb_info *info, char __user *buf, | ||
4240 | while (count) { | ||
4241 | c = (count > PAGE_SIZE) ? PAGE_SIZE : count; | ||
4242 | dst = buffer; | ||
4243 | - for (i = c >> 2; i--;) { | ||
4244 | - *dst = fb_readl(src++); | ||
4245 | - *dst = big_swap(*dst); | ||
4246 | + for (i = (c + 3) >> 2; i--;) { | ||
4247 | + u32 val; | ||
4248 | + | ||
4249 | + val = fb_readl(src); | ||
4250 | + *dst = big_swap(val); | ||
4251 | + src++; | ||
4252 | dst++; | ||
4253 | } | ||
4254 | - if (c & 3) { | ||
4255 | - u8 *dst8 = (u8 *)dst; | ||
4256 | - u8 __iomem *src8 = (u8 __iomem *)src; | ||
4257 | - | ||
4258 | - for (i = c & 3; i--;) { | ||
4259 | - if (i & 1) { | ||
4260 | - *dst8++ = fb_readb(++src8); | ||
4261 | - } else { | ||
4262 | - *dst8++ = fb_readb(--src8); | ||
4263 | - src8 += 2; | ||
4264 | - } | ||
4265 | - } | ||
4266 | - src = (u32 __iomem *)src8; | ||
4267 | - } | ||
4268 | |||
4269 | if (copy_to_user(buf, buffer, c)) { | ||
4270 | err = -EFAULT; | ||
4271 | @@ -1129,7 +1118,7 @@ static ssize_t smtcfb_write(struct fb_info *info, const char __user *buf, | ||
4272 | count = total_size - p; | ||
4273 | } | ||
4274 | |||
4275 | - buffer = kmalloc((count > PAGE_SIZE) ? PAGE_SIZE : count, GFP_KERNEL); | ||
4276 | + buffer = kmalloc(PAGE_SIZE, GFP_KERNEL); | ||
4277 | if (!buffer) | ||
4278 | return -ENOMEM; | ||
4279 | |||
4280 | @@ -1147,24 +1136,11 @@ static ssize_t smtcfb_write(struct fb_info *info, const char __user *buf, | ||
4281 | break; | ||
4282 | } | ||
4283 | |||
4284 | - for (i = c >> 2; i--;) { | ||
4285 | - fb_writel(big_swap(*src), dst++); | ||
4286 | + for (i = (c + 3) >> 2; i--;) { | ||
4287 | + fb_writel(big_swap(*src), dst); | ||
4288 | + dst++; | ||
4289 | src++; | ||
4290 | } | ||
4291 | - if (c & 3) { | ||
4292 | - u8 *src8 = (u8 *)src; | ||
4293 | - u8 __iomem *dst8 = (u8 __iomem *)dst; | ||
4294 | - | ||
4295 | - for (i = c & 3; i--;) { | ||
4296 | - if (i & 1) { | ||
4297 | - fb_writeb(*src8++, ++dst8); | ||
4298 | - } else { | ||
4299 | - fb_writeb(*src8++, --dst8); | ||
4300 | - dst8 += 2; | ||
4301 | - } | ||
4302 | - } | ||
4303 | - dst = (u32 __iomem *)dst8; | ||
4304 | - } | ||
4305 | |||
4306 | *ppos += c; | ||
4307 | buf += c; | ||
4308 | diff --git a/drivers/video/fbdev/smscufx.c b/drivers/video/fbdev/smscufx.c | ||
4309 | index ec2e7e3536859..aa387c5188e76 100644 | ||
4310 | --- a/drivers/video/fbdev/smscufx.c | ||
4311 | +++ b/drivers/video/fbdev/smscufx.c | ||
4312 | @@ -1671,6 +1671,7 @@ static int ufx_usb_probe(struct usb_interface *interface, | ||
4313 | info->par = dev; | ||
4314 | info->pseudo_palette = dev->pseudo_palette; | ||
4315 | info->fbops = &ufx_ops; | ||
4316 | + INIT_LIST_HEAD(&info->modelist); | ||
4317 | |||
4318 | retval = fb_alloc_cmap(&info->cmap, 256, 0); | ||
4319 | if (retval < 0) { | ||
4320 | @@ -1681,8 +1682,6 @@ static int ufx_usb_probe(struct usb_interface *interface, | ||
4321 | INIT_DELAYED_WORK(&dev->free_framebuffer_work, | ||
4322 | ufx_free_framebuffer_work); | ||
4323 | |||
4324 | - INIT_LIST_HEAD(&info->modelist); | ||
4325 | - | ||
4326 | retval = ufx_reg_read(dev, 0x3000, &id_rev); | ||
4327 | check_warn_goto_error(retval, "error %d reading 0x3000 register from device", retval); | ||
4328 | dev_dbg(dev->gdev, "ID_REV register value 0x%08x", id_rev); | ||
4329 | diff --git a/drivers/video/fbdev/w100fb.c b/drivers/video/fbdev/w100fb.c | ||
4330 | index 7bd4c27cfb149..b3b17b6adb7ed 100644 | ||
4331 | --- a/drivers/video/fbdev/w100fb.c | ||
4332 | +++ b/drivers/video/fbdev/w100fb.c | ||
4333 | @@ -772,12 +772,18 @@ out: | ||
4334 | fb_dealloc_cmap(&info->cmap); | ||
4335 | kfree(info->pseudo_palette); | ||
4336 | } | ||
4337 | - if (remapped_fbuf != NULL) | ||
4338 | + if (remapped_fbuf != NULL) { | ||
4339 | iounmap(remapped_fbuf); | ||
4340 | - if (remapped_regs != NULL) | ||
4341 | + remapped_fbuf = NULL; | ||
4342 | + } | ||
4343 | + if (remapped_regs != NULL) { | ||
4344 | iounmap(remapped_regs); | ||
4345 | - if (remapped_base != NULL) | ||
4346 | + remapped_regs = NULL; | ||
4347 | + } | ||
4348 | + if (remapped_base != NULL) { | ||
4349 | iounmap(remapped_base); | ||
4350 | + remapped_base = NULL; | ||
4351 | + } | ||
4352 | if (info) | ||
4353 | framebuffer_release(info); | ||
4354 | return err; | ||
4355 | @@ -802,8 +808,11 @@ static int w100fb_remove(struct platform_device *pdev) | ||
4356 | fb_dealloc_cmap(&info->cmap); | ||
4357 | |||
4358 | iounmap(remapped_base); | ||
4359 | + remapped_base = NULL; | ||
4360 | iounmap(remapped_regs); | ||
4361 | + remapped_regs = NULL; | ||
4362 | iounmap(remapped_fbuf); | ||
4363 | + remapped_fbuf = NULL; | ||
4364 | |||
4365 | framebuffer_release(info); | ||
4366 | |||
4367 | diff --git a/drivers/w1/slaves/w1_therm.c b/drivers/w1/slaves/w1_therm.c | ||
4368 | index 82611f197b0a0..7d0e09867bc73 100644 | ||
4369 | --- a/drivers/w1/slaves/w1_therm.c | ||
4370 | +++ b/drivers/w1/slaves/w1_therm.c | ||
4371 | @@ -589,16 +589,20 @@ static ssize_t w1_seq_show(struct device *device, | ||
4372 | if (sl->reg_num.id == reg_num->id) | ||
4373 | seq = i; | ||
4374 | |||
4375 | + if (w1_reset_bus(sl->master)) | ||
4376 | + goto error; | ||
4377 | + | ||
4378 | + /* Put the device into chain DONE state */ | ||
4379 | + w1_write_8(sl->master, W1_MATCH_ROM); | ||
4380 | + w1_write_block(sl->master, (u8 *)&rn, 8); | ||
4381 | w1_write_8(sl->master, W1_42_CHAIN); | ||
4382 | w1_write_8(sl->master, W1_42_CHAIN_DONE); | ||
4383 | w1_write_8(sl->master, W1_42_CHAIN_DONE_INV); | ||
4384 | - w1_read_block(sl->master, &ack, sizeof(ack)); | ||
4385 | |||
4386 | /* check for acknowledgment */ | ||
4387 | ack = w1_read_8(sl->master); | ||
4388 | if (ack != W1_42_SUCCESS_CONFIRM_BYTE) | ||
4389 | goto error; | ||
4390 | - | ||
4391 | } | ||
4392 | |||
4393 | /* Exit from CHAIN state */ | ||
4394 | diff --git a/fs/cifs/link.c b/fs/cifs/link.c | ||
4395 | index 38d26cbcad070..0c49e2aa7ea49 100644 | ||
4396 | --- a/fs/cifs/link.c | ||
4397 | +++ b/fs/cifs/link.c | ||
4398 | @@ -119,6 +119,9 @@ parse_mf_symlink(const u8 *buf, unsigned int buf_len, unsigned int *_link_len, | ||
4399 | if (rc != 1) | ||
4400 | return -EINVAL; | ||
4401 | |||
4402 | + if (link_len > CIFS_MF_SYMLINK_LINK_MAXLEN) | ||
4403 | + return -EINVAL; | ||
4404 | + | ||
4405 | rc = symlink_hash(link_len, link_str, md5_hash); | ||
4406 | if (rc) { | ||
4407 | cifs_dbg(FYI, "%s: MD5 hash failure: %d\n", __func__, rc); | ||
4408 | diff --git a/fs/ext2/super.c b/fs/ext2/super.c | ||
4409 | index 186912c9bf565..5ca1f73958b0d 100644 | ||
4410 | --- a/fs/ext2/super.c | ||
4411 | +++ b/fs/ext2/super.c | ||
4412 | @@ -743,8 +743,12 @@ static loff_t ext2_max_size(int bits) | ||
4413 | res += 1LL << (bits-2); | ||
4414 | res += 1LL << (2*(bits-2)); | ||
4415 | res += 1LL << (3*(bits-2)); | ||
4416 | + /* Compute how many metadata blocks are needed */ | ||
4417 | + meta_blocks = 1; | ||
4418 | + meta_blocks += 1 + ppb; | ||
4419 | + meta_blocks += 1 + ppb + ppb * ppb; | ||
4420 | /* Does block tree limit file size? */ | ||
4421 | - if (res < upper_limit) | ||
4422 | + if (res + meta_blocks <= upper_limit) | ||
4423 | goto check_lfs; | ||
4424 | |||
4425 | res = upper_limit; | ||
4426 | diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c | ||
4427 | index 79c067f74253e..e66aa8918dee2 100644 | ||
4428 | --- a/fs/ext4/inode.c | ||
4429 | +++ b/fs/ext4/inode.c | ||
4430 | @@ -2048,6 +2048,15 @@ static int ext4_writepage(struct page *page, | ||
4431 | else | ||
4432 | len = PAGE_SIZE; | ||
4433 | |||
4434 | + /* Should never happen but for bugs in other kernel subsystems */ | ||
4435 | + if (!page_has_buffers(page)) { | ||
4436 | + ext4_warning_inode(inode, | ||
4437 | + "page %lu does not have buffers attached", page->index); | ||
4438 | + ClearPageDirty(page); | ||
4439 | + unlock_page(page); | ||
4440 | + return 0; | ||
4441 | + } | ||
4442 | + | ||
4443 | page_bufs = page_buffers(page); | ||
4444 | /* | ||
4445 | * We cannot do block allocation or other extent handling in this | ||
4446 | @@ -2608,6 +2617,22 @@ static int mpage_prepare_extent_to_map(struct mpage_da_data *mpd) | ||
4447 | wait_on_page_writeback(page); | ||
4448 | BUG_ON(PageWriteback(page)); | ||
4449 | |||
4450 | + /* | ||
4451 | + * Should never happen but for buggy code in | ||
4452 | + * other subsystems that call | ||
4453 | + * set_page_dirty() without properly warning | ||
4454 | + * the file system first. See [1] for more | ||
4455 | + * information. | ||
4456 | + * | ||
4457 | + * [1] https://lore.kernel.org/linux-mm/20180103100430.GE4911@quack2.suse.cz | ||
4458 | + */ | ||
4459 | + if (!page_has_buffers(page)) { | ||
4460 | + ext4_warning_inode(mpd->inode, "page %lu does not have buffers attached", page->index); | ||
4461 | + ClearPageDirty(page); | ||
4462 | + unlock_page(page); | ||
4463 | + continue; | ||
4464 | + } | ||
4465 | + | ||
4466 | if (mpd->map.m_len == 0) | ||
4467 | mpd->first_page = page->index; | ||
4468 | mpd->next_page = page->index + 1; | ||
4469 | diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c | ||
4470 | index 56a94535c246f..a4182b150bb07 100644 | ||
4471 | --- a/fs/gfs2/rgrp.c | ||
4472 | +++ b/fs/gfs2/rgrp.c | ||
4473 | @@ -1390,7 +1390,8 @@ int gfs2_fitrim(struct file *filp, void __user *argp) | ||
4474 | |||
4475 | start = r.start >> bs_shift; | ||
4476 | end = start + (r.len >> bs_shift); | ||
4477 | - minlen = max_t(u64, r.minlen, | ||
4478 | + minlen = max_t(u64, r.minlen, sdp->sd_sb.sb_bsize); | ||
4479 | + minlen = max_t(u64, minlen, | ||
4480 | q->limits.discard_granularity) >> bs_shift; | ||
4481 | |||
4482 | if (end <= start || minlen > sdp->sd_max_rg_data) | ||
4483 | diff --git a/fs/jffs2/build.c b/fs/jffs2/build.c | ||
4484 | index b288c8ae1236b..837cd55fd4c5e 100644 | ||
4485 | --- a/fs/jffs2/build.c | ||
4486 | +++ b/fs/jffs2/build.c | ||
4487 | @@ -415,13 +415,15 @@ int jffs2_do_mount_fs(struct jffs2_sb_info *c) | ||
4488 | jffs2_free_ino_caches(c); | ||
4489 | jffs2_free_raw_node_refs(c); | ||
4490 | ret = -EIO; | ||
4491 | - goto out_free; | ||
4492 | + goto out_sum_exit; | ||
4493 | } | ||
4494 | |||
4495 | jffs2_calc_trigger_levels(c); | ||
4496 | |||
4497 | return 0; | ||
4498 | |||
4499 | + out_sum_exit: | ||
4500 | + jffs2_sum_exit(c); | ||
4501 | out_free: | ||
4502 | kvfree(c->blocks); | ||
4503 | |||
4504 | diff --git a/fs/jffs2/fs.c b/fs/jffs2/fs.c | ||
4505 | index c9c47d03a690c..d3c9e4c82e57c 100644 | ||
4506 | --- a/fs/jffs2/fs.c | ||
4507 | +++ b/fs/jffs2/fs.c | ||
4508 | @@ -596,8 +596,8 @@ out_root: | ||
4509 | jffs2_free_ino_caches(c); | ||
4510 | jffs2_free_raw_node_refs(c); | ||
4511 | kvfree(c->blocks); | ||
4512 | - out_inohash: | ||
4513 | jffs2_clear_xattr_subsystem(c); | ||
4514 | + out_inohash: | ||
4515 | kfree(c->inocache_list); | ||
4516 | out_wbuf: | ||
4517 | jffs2_flash_cleanup(c); | ||
4518 | diff --git a/fs/jffs2/scan.c b/fs/jffs2/scan.c | ||
4519 | index 08813789fcf06..664384dac6e58 100644 | ||
4520 | --- a/fs/jffs2/scan.c | ||
4521 | +++ b/fs/jffs2/scan.c | ||
4522 | @@ -136,7 +136,7 @@ int jffs2_scan_medium(struct jffs2_sb_info *c) | ||
4523 | if (!s) { | ||
4524 | JFFS2_WARNING("Can't allocate memory for summary\n"); | ||
4525 | ret = -ENOMEM; | ||
4526 | - goto out; | ||
4527 | + goto out_buf; | ||
4528 | } | ||
4529 | } | ||
4530 | |||
4531 | @@ -274,13 +274,15 @@ int jffs2_scan_medium(struct jffs2_sb_info *c) | ||
4532 | } | ||
4533 | ret = 0; | ||
4534 | out: | ||
4535 | + jffs2_sum_reset_collected(s); | ||
4536 | + kfree(s); | ||
4537 | + out_buf: | ||
4538 | if (buf_size) | ||
4539 | kfree(flashbuf); | ||
4540 | #ifndef __ECOS | ||
4541 | else | ||
4542 | mtd_unpoint(c->mtd, 0, c->mtd->size); | ||
4543 | #endif | ||
4544 | - kfree(s); | ||
4545 | return ret; | ||
4546 | } | ||
4547 | |||
4548 | diff --git a/fs/jfs/inode.c b/fs/jfs/inode.c | ||
4549 | index 87b41edc800d0..68779cc3609a6 100644 | ||
4550 | --- a/fs/jfs/inode.c | ||
4551 | +++ b/fs/jfs/inode.c | ||
4552 | @@ -156,12 +156,13 @@ void jfs_evict_inode(struct inode *inode) | ||
4553 | dquot_initialize(inode); | ||
4554 | |||
4555 | if (JFS_IP(inode)->fileset == FILESYSTEM_I) { | ||
4556 | + struct inode *ipimap = JFS_SBI(inode->i_sb)->ipimap; | ||
4557 | truncate_inode_pages_final(&inode->i_data); | ||
4558 | |||
4559 | if (test_cflag(COMMIT_Freewmap, inode)) | ||
4560 | jfs_free_zero_link(inode); | ||
4561 | |||
4562 | - if (JFS_SBI(inode->i_sb)->ipimap) | ||
4563 | + if (ipimap && JFS_IP(ipimap)->i_imap) | ||
4564 | diFree(inode); | ||
4565 | |||
4566 | /* | ||
4567 | diff --git a/fs/jfs/jfs_dmap.c b/fs/jfs/jfs_dmap.c | ||
4568 | index 9ff510a489cb1..6dac48e29d282 100644 | ||
4569 | --- a/fs/jfs/jfs_dmap.c | ||
4570 | +++ b/fs/jfs/jfs_dmap.c | ||
4571 | @@ -161,6 +161,7 @@ static const s8 budtab[256] = { | ||
4572 | * 0 - success | ||
4573 | * -ENOMEM - insufficient memory | ||
4574 | * -EIO - i/o error | ||
4575 | + * -EINVAL - wrong bmap data | ||
4576 | */ | ||
4577 | int dbMount(struct inode *ipbmap) | ||
4578 | { | ||
4579 | @@ -192,6 +193,12 @@ int dbMount(struct inode *ipbmap) | ||
4580 | bmp->db_nfree = le64_to_cpu(dbmp_le->dn_nfree); | ||
4581 | bmp->db_l2nbperpage = le32_to_cpu(dbmp_le->dn_l2nbperpage); | ||
4582 | bmp->db_numag = le32_to_cpu(dbmp_le->dn_numag); | ||
4583 | + if (!bmp->db_numag) { | ||
4584 | + release_metapage(mp); | ||
4585 | + kfree(bmp); | ||
4586 | + return -EINVAL; | ||
4587 | + } | ||
4588 | + | ||
4589 | bmp->db_maxlevel = le32_to_cpu(dbmp_le->dn_maxlevel); | ||
4590 | bmp->db_maxag = le32_to_cpu(dbmp_le->dn_maxag); | ||
4591 | bmp->db_agpref = le32_to_cpu(dbmp_le->dn_agpref); | ||
4592 | diff --git a/fs/nfs/callback_xdr.c b/fs/nfs/callback_xdr.c | ||
4593 | index 67903eeb2ca47..00e58a42e6372 100644 | ||
4594 | --- a/fs/nfs/callback_xdr.c | ||
4595 | +++ b/fs/nfs/callback_xdr.c | ||
4596 | @@ -319,10 +319,6 @@ __be32 decode_devicenotify_args(struct svc_rqst *rqstp, | ||
4597 | n = ntohl(*p++); | ||
4598 | if (n <= 0) | ||
4599 | goto out; | ||
4600 | - if (n > ULONG_MAX / sizeof(*args->devs)) { | ||
4601 | - status = htonl(NFS4ERR_BADXDR); | ||
4602 | - goto out; | ||
4603 | - } | ||
4604 | |||
4605 | args->devs = kmalloc_array(n, sizeof(*args->devs), GFP_KERNEL); | ||
4606 | if (!args->devs) { | ||
4607 | diff --git a/fs/nfsd/nfsproc.c b/fs/nfsd/nfsproc.c | ||
4608 | index 536009e503871..fd5bb6f7f5f77 100644 | ||
4609 | --- a/fs/nfsd/nfsproc.c | ||
4610 | +++ b/fs/nfsd/nfsproc.c | ||
4611 | @@ -207,7 +207,7 @@ nfsd_proc_write(struct svc_rqst *rqstp, struct nfsd_writeargs *argp, | ||
4612 | int stable = 1; | ||
4613 | unsigned long cnt = argp->len; | ||
4614 | |||
4615 | - dprintk("nfsd: WRITE %s %d bytes at %d\n", | ||
4616 | + dprintk("nfsd: WRITE %s %u bytes at %d\n", | ||
4617 | SVCFH_fmt(&argp->fh), | ||
4618 | argp->len, argp->offset); | ||
4619 | |||
4620 | diff --git a/fs/nfsd/xdr.h b/fs/nfsd/xdr.h | ||
4621 | index 4f0481d638048..8c78b56a93502 100644 | ||
4622 | --- a/fs/nfsd/xdr.h | ||
4623 | +++ b/fs/nfsd/xdr.h | ||
4624 | @@ -32,7 +32,7 @@ struct nfsd_readargs { | ||
4625 | struct nfsd_writeargs { | ||
4626 | svc_fh fh; | ||
4627 | __u32 offset; | ||
4628 | - int len; | ||
4629 | + __u32 len; | ||
4630 | int vlen; | ||
4631 | }; | ||
4632 | |||
4633 | diff --git a/fs/ntfs/inode.c b/fs/ntfs/inode.c | ||
4634 | index 8cd134750ebb0..4150b3633f779 100644 | ||
4635 | --- a/fs/ntfs/inode.c | ||
4636 | +++ b/fs/ntfs/inode.c | ||
4637 | @@ -1915,6 +1915,10 @@ int ntfs_read_inode_mount(struct inode *vi) | ||
4638 | } | ||
4639 | /* Now allocate memory for the attribute list. */ | ||
4640 | ni->attr_list_size = (u32)ntfs_attr_size(a); | ||
4641 | + if (!ni->attr_list_size) { | ||
4642 | + ntfs_error(sb, "Attr_list_size is zero"); | ||
4643 | + goto put_err_out; | ||
4644 | + } | ||
4645 | ni->attr_list = ntfs_malloc_nofs(ni->attr_list_size); | ||
4646 | if (!ni->attr_list) { | ||
4647 | ntfs_error(sb, "Not enough memory to allocate buffer " | ||
4648 | diff --git a/fs/ubifs/dir.c b/fs/ubifs/dir.c | ||
4649 | index 56eed54633cf2..89cebe1807d2b 100644 | ||
4650 | --- a/fs/ubifs/dir.c | ||
4651 | +++ b/fs/ubifs/dir.c | ||
4652 | @@ -376,6 +376,8 @@ out_inode: | ||
4653 | make_bad_inode(inode); | ||
4654 | if (!instantiated) | ||
4655 | iput(inode); | ||
4656 | + else if (whiteout) | ||
4657 | + iput(*whiteout); | ||
4658 | out_budg: | ||
4659 | ubifs_release_budget(c, &req); | ||
4660 | if (!instantiated) | ||
4661 | diff --git a/fs/ubifs/ioctl.c b/fs/ubifs/ioctl.c | ||
4662 | index 3c7b29de0ca73..b5320eedec3b1 100644 | ||
4663 | --- a/fs/ubifs/ioctl.c | ||
4664 | +++ b/fs/ubifs/ioctl.c | ||
4665 | @@ -105,7 +105,7 @@ static int setflags(struct inode *inode, int flags) | ||
4666 | struct ubifs_inode *ui = ubifs_inode(inode); | ||
4667 | struct ubifs_info *c = inode->i_sb->s_fs_info; | ||
4668 | struct ubifs_budget_req req = { .dirtied_ino = 1, | ||
4669 | - .dirtied_ino_d = ui->data_len }; | ||
4670 | + .dirtied_ino_d = ALIGN(ui->data_len, 8) }; | ||
4671 | |||
4672 | err = ubifs_budget_space(c, &req); | ||
4673 | if (err) | ||
4674 | diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h | ||
4675 | index 848aab6c69823..8050724065524 100644 | ||
4676 | --- a/include/linux/blkdev.h | ||
4677 | +++ b/include/linux/blkdev.h | ||
4678 | @@ -49,6 +49,14 @@ struct pr_ops; | ||
4679 | |||
4680 | typedef void (rq_end_io_fn)(struct request *, int); | ||
4681 | |||
4682 | +static inline int blk_validate_block_size(unsigned int bsize) | ||
4683 | +{ | ||
4684 | + if (bsize < 512 || bsize > PAGE_SIZE || !is_power_of_2(bsize)) | ||
4685 | + return -EINVAL; | ||
4686 | + | ||
4687 | + return 0; | ||
4688 | +} | ||
4689 | + | ||
4690 | #define BLK_RL_SYNCFULL (1U << 0) | ||
4691 | #define BLK_RL_ASYNCFULL (1U << 1) | ||
4692 | |||
4693 | diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h | ||
4694 | index a92fb5c5704f2..714d86dedbc2b 100644 | ||
4695 | --- a/include/linux/netdevice.h | ||
4696 | +++ b/include/linux/netdevice.h | ||
4697 | @@ -3410,7 +3410,8 @@ void netdev_run_todo(void); | ||
4698 | */ | ||
4699 | static inline void dev_put(struct net_device *dev) | ||
4700 | { | ||
4701 | - this_cpu_dec(*dev->pcpu_refcnt); | ||
4702 | + if (dev) | ||
4703 | + this_cpu_dec(*dev->pcpu_refcnt); | ||
4704 | } | ||
4705 | |||
4706 | /** | ||
4707 | @@ -3421,7 +3422,8 @@ static inline void dev_put(struct net_device *dev) | ||
4708 | */ | ||
4709 | static inline void dev_hold(struct net_device *dev) | ||
4710 | { | ||
4711 | - this_cpu_inc(*dev->pcpu_refcnt); | ||
4712 | + if (dev) | ||
4713 | + this_cpu_inc(*dev->pcpu_refcnt); | ||
4714 | } | ||
4715 | |||
4716 | /* Carrier loss detection, dial on demand. The functions netif_carrier_on | ||
4717 | diff --git a/include/net/xfrm.h b/include/net/xfrm.h | ||
4718 | index b2a405c93a342..7415a98769872 100644 | ||
4719 | --- a/include/net/xfrm.h | ||
4720 | +++ b/include/net/xfrm.h | ||
4721 | @@ -1595,13 +1595,16 @@ int xfrm_policy_walk(struct net *net, struct xfrm_policy_walk *walk, | ||
4722 | void *); | ||
4723 | void xfrm_policy_walk_done(struct xfrm_policy_walk *walk, struct net *net); | ||
4724 | int xfrm_policy_insert(int dir, struct xfrm_policy *policy, int excl); | ||
4725 | -struct xfrm_policy *xfrm_policy_bysel_ctx(struct net *net, u32 mark, | ||
4726 | +struct xfrm_policy *xfrm_policy_bysel_ctx(struct net *net, | ||
4727 | + const struct xfrm_mark *mark, | ||
4728 | u8 type, int dir, | ||
4729 | struct xfrm_selector *sel, | ||
4730 | struct xfrm_sec_ctx *ctx, int delete, | ||
4731 | int *err); | ||
4732 | -struct xfrm_policy *xfrm_policy_byid(struct net *net, u32 mark, u8, int dir, | ||
4733 | - u32 id, int delete, int *err); | ||
4734 | +struct xfrm_policy *xfrm_policy_byid(struct net *net, | ||
4735 | + const struct xfrm_mark *mark, | ||
4736 | + u8 type, int dir, u32 id, int delete, | ||
4737 | + int *err); | ||
4738 | int xfrm_policy_flush(struct net *net, u8 type, bool task_valid); | ||
4739 | void xfrm_policy_hash_rebuild(struct net *net); | ||
4740 | u32 xfrm_get_acqseq(void); | ||
4741 | diff --git a/init/main.c b/init/main.c | ||
4742 | index 9e057314a15f3..0c01d4e10d2f3 100644 | ||
4743 | --- a/init/main.c | ||
4744 | +++ b/init/main.c | ||
4745 | @@ -705,7 +705,7 @@ static int __init initcall_blacklist(char *str) | ||
4746 | } | ||
4747 | } while (str_entry); | ||
4748 | |||
4749 | - return 0; | ||
4750 | + return 1; | ||
4751 | } | ||
4752 | |||
4753 | static bool __init_or_module initcall_blacklisted(initcall_t fn) | ||
4754 | @@ -921,7 +921,9 @@ static noinline void __init kernel_init_freeable(void); | ||
4755 | bool rodata_enabled __ro_after_init = true; | ||
4756 | static int __init set_debug_rodata(char *str) | ||
4757 | { | ||
4758 | - return strtobool(str, &rodata_enabled); | ||
4759 | + if (strtobool(str, &rodata_enabled)) | ||
4760 | + pr_warn("Invalid option string for rodata: '%s'\n", str); | ||
4761 | + return 1; | ||
4762 | } | ||
4763 | __setup("rodata=", set_debug_rodata); | ||
4764 | #endif | ||
4765 | diff --git a/kernel/events/core.c b/kernel/events/core.c | ||
4766 | index e56a74fd5c814..396abd52962b8 100644 | ||
4767 | --- a/kernel/events/core.c | ||
4768 | +++ b/kernel/events/core.c | ||
4769 | @@ -8306,8 +8306,11 @@ perf_event_parse_addr_filter(struct perf_event *event, char *fstr, | ||
4770 | } | ||
4771 | |||
4772 | /* ready to consume more filters */ | ||
4773 | + kfree(filename); | ||
4774 | + filename = NULL; | ||
4775 | state = IF_STATE_ACTION; | ||
4776 | filter = NULL; | ||
4777 | + kernel = 0; | ||
4778 | } | ||
4779 | } | ||
4780 | |||
4781 | diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c | ||
4782 | index e938fd8db056b..c17b953f1294b 100644 | ||
4783 | --- a/kernel/power/hibernate.c | ||
4784 | +++ b/kernel/power/hibernate.c | ||
4785 | @@ -1185,7 +1185,7 @@ static int __init resumedelay_setup(char *str) | ||
4786 | int rc = kstrtouint(str, 0, &resume_delay); | ||
4787 | |||
4788 | if (rc) | ||
4789 | - return rc; | ||
4790 | + pr_warn("resumedelay: bad option string '%s'\n", str); | ||
4791 | return 1; | ||
4792 | } | ||
4793 | |||
4794 | diff --git a/kernel/power/suspend_test.c b/kernel/power/suspend_test.c | ||
4795 | index bdff5ed57f10a..5476bd8921832 100644 | ||
4796 | --- a/kernel/power/suspend_test.c | ||
4797 | +++ b/kernel/power/suspend_test.c | ||
4798 | @@ -158,22 +158,22 @@ static int __init setup_test_suspend(char *value) | ||
4799 | value++; | ||
4800 | suspend_type = strsep(&value, ","); | ||
4801 | if (!suspend_type) | ||
4802 | - return 0; | ||
4803 | + return 1; | ||
4804 | |||
4805 | repeat = strsep(&value, ","); | ||
4806 | if (repeat) { | ||
4807 | if (kstrtou32(repeat, 0, &test_repeat_count_max)) | ||
4808 | - return 0; | ||
4809 | + return 1; | ||
4810 | } | ||
4811 | |||
4812 | for (i = 0; pm_labels[i]; i++) | ||
4813 | if (!strcmp(pm_labels[i], suspend_type)) { | ||
4814 | test_state_label = pm_labels[i]; | ||
4815 | - return 0; | ||
4816 | + return 1; | ||
4817 | } | ||
4818 | |||
4819 | printk(warn_bad_state, suspend_type); | ||
4820 | - return 0; | ||
4821 | + return 1; | ||
4822 | } | ||
4823 | __setup("test_suspend", setup_test_suspend); | ||
4824 | |||
4825 | diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c | ||
4826 | index 9c17a26555512..f1f115b3ee018 100644 | ||
4827 | --- a/kernel/printk/printk.c | ||
4828 | +++ b/kernel/printk/printk.c | ||
4829 | @@ -122,8 +122,10 @@ static int __control_devkmsg(char *str) | ||
4830 | |||
4831 | static int __init control_devkmsg(char *str) | ||
4832 | { | ||
4833 | - if (__control_devkmsg(str) < 0) | ||
4834 | + if (__control_devkmsg(str) < 0) { | ||
4835 | + pr_warn("printk.devkmsg: bad option string '%s'\n", str); | ||
4836 | return 1; | ||
4837 | + } | ||
4838 | |||
4839 | /* | ||
4840 | * Set sysctl string accordingly: | ||
4841 | @@ -145,7 +147,7 @@ static int __init control_devkmsg(char *str) | ||
4842 | */ | ||
4843 | devkmsg_log |= DEVKMSG_LOG_MASK_LOCK; | ||
4844 | |||
4845 | - return 0; | ||
4846 | + return 1; | ||
4847 | } | ||
4848 | __setup("printk.devkmsg=", control_devkmsg); | ||
4849 | |||
4850 | diff --git a/kernel/ptrace.c b/kernel/ptrace.c | ||
4851 | index 4f10223bc7b0f..2b59212ddcc6e 100644 | ||
4852 | --- a/kernel/ptrace.c | ||
4853 | +++ b/kernel/ptrace.c | ||
4854 | @@ -371,6 +371,26 @@ bool ptrace_may_access(struct task_struct *task, unsigned int mode) | ||
4855 | return !err; | ||
4856 | } | ||
4857 | |||
4858 | +static int check_ptrace_options(unsigned long data) | ||
4859 | +{ | ||
4860 | + if (data & ~(unsigned long)PTRACE_O_MASK) | ||
4861 | + return -EINVAL; | ||
4862 | + | ||
4863 | + if (unlikely(data & PTRACE_O_SUSPEND_SECCOMP)) { | ||
4864 | + if (!IS_ENABLED(CONFIG_CHECKPOINT_RESTORE) || | ||
4865 | + !IS_ENABLED(CONFIG_SECCOMP)) | ||
4866 | + return -EINVAL; | ||
4867 | + | ||
4868 | + if (!capable(CAP_SYS_ADMIN)) | ||
4869 | + return -EPERM; | ||
4870 | + | ||
4871 | + if (seccomp_mode(¤t->seccomp) != SECCOMP_MODE_DISABLED || | ||
4872 | + current->ptrace & PT_SUSPEND_SECCOMP) | ||
4873 | + return -EPERM; | ||
4874 | + } | ||
4875 | + return 0; | ||
4876 | +} | ||
4877 | + | ||
4878 | static int ptrace_attach(struct task_struct *task, long request, | ||
4879 | unsigned long addr, | ||
4880 | unsigned long flags) | ||
4881 | @@ -382,8 +402,16 @@ static int ptrace_attach(struct task_struct *task, long request, | ||
4882 | if (seize) { | ||
4883 | if (addr != 0) | ||
4884 | goto out; | ||
4885 | + /* | ||
4886 | + * This duplicates the check in check_ptrace_options() because | ||
4887 | + * ptrace_attach() and ptrace_setoptions() have historically | ||
4888 | + * used different error codes for unknown ptrace options. | ||
4889 | + */ | ||
4890 | if (flags & ~(unsigned long)PTRACE_O_MASK) | ||
4891 | goto out; | ||
4892 | + retval = check_ptrace_options(flags); | ||
4893 | + if (retval) | ||
4894 | + return retval; | ||
4895 | flags = PT_PTRACED | PT_SEIZED | (flags << PT_OPT_FLAG_SHIFT); | ||
4896 | } else { | ||
4897 | flags = PT_PTRACED; | ||
4898 | @@ -656,22 +684,11 @@ int ptrace_writedata(struct task_struct *tsk, char __user *src, unsigned long ds | ||
4899 | static int ptrace_setoptions(struct task_struct *child, unsigned long data) | ||
4900 | { | ||
4901 | unsigned flags; | ||
4902 | + int ret; | ||
4903 | |||
4904 | - if (data & ~(unsigned long)PTRACE_O_MASK) | ||
4905 | - return -EINVAL; | ||
4906 | - | ||
4907 | - if (unlikely(data & PTRACE_O_SUSPEND_SECCOMP)) { | ||
4908 | - if (!IS_ENABLED(CONFIG_CHECKPOINT_RESTORE) || | ||
4909 | - !IS_ENABLED(CONFIG_SECCOMP)) | ||
4910 | - return -EINVAL; | ||
4911 | - | ||
4912 | - if (!capable(CAP_SYS_ADMIN)) | ||
4913 | - return -EPERM; | ||
4914 | - | ||
4915 | - if (seccomp_mode(¤t->seccomp) != SECCOMP_MODE_DISABLED || | ||
4916 | - current->ptrace & PT_SUSPEND_SECCOMP) | ||
4917 | - return -EPERM; | ||
4918 | - } | ||
4919 | + ret = check_ptrace_options(data); | ||
4920 | + if (ret) | ||
4921 | + return ret; | ||
4922 | |||
4923 | /* Avoid intermediate state when all opts are cleared */ | ||
4924 | flags = child->ptrace; | ||
4925 | diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c | ||
4926 | index fa178b62ea79b..69c3252d151ba 100644 | ||
4927 | --- a/kernel/sched/debug.c | ||
4928 | +++ b/kernel/sched/debug.c | ||
4929 | @@ -836,25 +836,15 @@ void print_numa_stats(struct seq_file *m, int node, unsigned long tsf, | ||
4930 | static void sched_show_numa(struct task_struct *p, struct seq_file *m) | ||
4931 | { | ||
4932 | #ifdef CONFIG_NUMA_BALANCING | ||
4933 | - struct mempolicy *pol; | ||
4934 | - | ||
4935 | if (p->mm) | ||
4936 | P(mm->numa_scan_seq); | ||
4937 | |||
4938 | - task_lock(p); | ||
4939 | - pol = p->mempolicy; | ||
4940 | - if (pol && !(pol->flags & MPOL_F_MORON)) | ||
4941 | - pol = NULL; | ||
4942 | - mpol_get(pol); | ||
4943 | - task_unlock(p); | ||
4944 | - | ||
4945 | P(numa_pages_migrated); | ||
4946 | P(numa_preferred_nid); | ||
4947 | P(total_numa_faults); | ||
4948 | SEQ_printf(m, "current_node=%d, numa_group_id=%d\n", | ||
4949 | task_node(p), task_numa_group_id(p)); | ||
4950 | show_numa_stats(p, m); | ||
4951 | - mpol_put(pol); | ||
4952 | #endif | ||
4953 | } | ||
4954 | |||
4955 | diff --git a/kernel/smp.c b/kernel/smp.c | ||
4956 | index 399905fdfa3f8..df9d5a64b0aad 100644 | ||
4957 | --- a/kernel/smp.c | ||
4958 | +++ b/kernel/smp.c | ||
4959 | @@ -209,7 +209,7 @@ static void flush_smp_call_function_queue(bool warn_cpu_offline) | ||
4960 | |||
4961 | /* There shouldn't be any pending callbacks on an offline CPU. */ | ||
4962 | if (unlikely(warn_cpu_offline && !cpu_online(smp_processor_id()) && | ||
4963 | - !warned && !llist_empty(head))) { | ||
4964 | + !warned && entry != NULL)) { | ||
4965 | warned = true; | ||
4966 | WARN(1, "IPI on offline CPU %d\n", smp_processor_id()); | ||
4967 | |||
4968 | diff --git a/lib/raid6/test/test.c b/lib/raid6/test/test.c | ||
4969 | index b07f4d8e6b033..a7e9372482996 100644 | ||
4970 | --- a/lib/raid6/test/test.c | ||
4971 | +++ b/lib/raid6/test/test.c | ||
4972 | @@ -22,7 +22,6 @@ | ||
4973 | #define NDISKS 16 /* Including P and Q */ | ||
4974 | |||
4975 | const char raid6_empty_zero_page[PAGE_SIZE] __attribute__((aligned(PAGE_SIZE))); | ||
4976 | -struct raid6_calls raid6_call; | ||
4977 | |||
4978 | char *dataptrs[NDISKS]; | ||
4979 | char data[NDISKS][PAGE_SIZE] __attribute__((aligned(PAGE_SIZE))); | ||
4980 | diff --git a/mm/kmemleak.c b/mm/kmemleak.c | ||
4981 | index 59bb2b9ec0e2e..c1360b2509194 100644 | ||
4982 | --- a/mm/kmemleak.c | ||
4983 | +++ b/mm/kmemleak.c | ||
4984 | @@ -1130,7 +1130,7 @@ EXPORT_SYMBOL(kmemleak_no_scan); | ||
4985 | void __ref kmemleak_alloc_phys(phys_addr_t phys, size_t size, int min_count, | ||
4986 | gfp_t gfp) | ||
4987 | { | ||
4988 | - if (!IS_ENABLED(CONFIG_HIGHMEM) || PHYS_PFN(phys) < max_low_pfn) | ||
4989 | + if (PHYS_PFN(phys) >= min_low_pfn && PHYS_PFN(phys) < max_low_pfn) | ||
4990 | kmemleak_alloc(__va(phys), size, min_count, gfp); | ||
4991 | } | ||
4992 | EXPORT_SYMBOL(kmemleak_alloc_phys); | ||
4993 | @@ -1141,7 +1141,7 @@ EXPORT_SYMBOL(kmemleak_alloc_phys); | ||
4994 | */ | ||
4995 | void __ref kmemleak_free_part_phys(phys_addr_t phys, size_t size) | ||
4996 | { | ||
4997 | - if (!IS_ENABLED(CONFIG_HIGHMEM) || PHYS_PFN(phys) < max_low_pfn) | ||
4998 | + if (PHYS_PFN(phys) >= min_low_pfn && PHYS_PFN(phys) < max_low_pfn) | ||
4999 | kmemleak_free_part(__va(phys), size); | ||
5000 | } | ||
5001 | EXPORT_SYMBOL(kmemleak_free_part_phys); | ||
5002 | @@ -1152,7 +1152,7 @@ EXPORT_SYMBOL(kmemleak_free_part_phys); | ||
5003 | */ | ||
5004 | void __ref kmemleak_not_leak_phys(phys_addr_t phys) | ||
5005 | { | ||
5006 | - if (!IS_ENABLED(CONFIG_HIGHMEM) || PHYS_PFN(phys) < max_low_pfn) | ||
5007 | + if (PHYS_PFN(phys) >= min_low_pfn && PHYS_PFN(phys) < max_low_pfn) | ||
5008 | kmemleak_not_leak(__va(phys)); | ||
5009 | } | ||
5010 | EXPORT_SYMBOL(kmemleak_not_leak_phys); | ||
5011 | @@ -1163,7 +1163,7 @@ EXPORT_SYMBOL(kmemleak_not_leak_phys); | ||
5012 | */ | ||
5013 | void __ref kmemleak_ignore_phys(phys_addr_t phys) | ||
5014 | { | ||
5015 | - if (!IS_ENABLED(CONFIG_HIGHMEM) || PHYS_PFN(phys) < max_low_pfn) | ||
5016 | + if (PHYS_PFN(phys) >= min_low_pfn && PHYS_PFN(phys) < max_low_pfn) | ||
5017 | kmemleak_ignore(__va(phys)); | ||
5018 | } | ||
5019 | EXPORT_SYMBOL(kmemleak_ignore_phys); | ||
5020 | diff --git a/mm/memcontrol.c b/mm/memcontrol.c | ||
5021 | index 27b0b4f03fcdc..955e8412b9f63 100644 | ||
5022 | --- a/mm/memcontrol.c | ||
5023 | +++ b/mm/memcontrol.c | ||
5024 | @@ -5840,7 +5840,7 @@ static int __init cgroup_memory(char *s) | ||
5025 | if (!strcmp(token, "nokmem")) | ||
5026 | cgroup_memory_nokmem = true; | ||
5027 | } | ||
5028 | - return 0; | ||
5029 | + return 1; | ||
5030 | } | ||
5031 | __setup("cgroup.memory=", cgroup_memory); | ||
5032 | |||
5033 | diff --git a/mm/memory.c b/mm/memory.c | ||
5034 | index 2b2cc69ddccef..1b31cdce936e9 100644 | ||
5035 | --- a/mm/memory.c | ||
5036 | +++ b/mm/memory.c | ||
5037 | @@ -1113,6 +1113,17 @@ int copy_page_range(struct mm_struct *dst_mm, struct mm_struct *src_mm, | ||
5038 | return ret; | ||
5039 | } | ||
5040 | |||
5041 | +/* Whether we should zap all COWed (private) pages too */ | ||
5042 | +static inline bool should_zap_cows(struct zap_details *details) | ||
5043 | +{ | ||
5044 | + /* By default, zap all pages */ | ||
5045 | + if (!details) | ||
5046 | + return true; | ||
5047 | + | ||
5048 | + /* Or, we zap COWed pages only if the caller wants to */ | ||
5049 | + return !details->check_mapping; | ||
5050 | +} | ||
5051 | + | ||
5052 | static unsigned long zap_pte_range(struct mmu_gather *tlb, | ||
5053 | struct vm_area_struct *vma, pmd_t *pmd, | ||
5054 | unsigned long addr, unsigned long end, | ||
5055 | @@ -1186,17 +1197,20 @@ again: | ||
5056 | } | ||
5057 | continue; | ||
5058 | } | ||
5059 | - /* only check swap_entries if explicitly asked for in details */ | ||
5060 | - if (unlikely(details && !details->check_swap_entries)) | ||
5061 | - continue; | ||
5062 | |||
5063 | entry = pte_to_swp_entry(ptent); | ||
5064 | - if (!non_swap_entry(entry)) | ||
5065 | + if (!non_swap_entry(entry)) { | ||
5066 | + /* Genuine swap entry, hence a private anon page */ | ||
5067 | + if (!should_zap_cows(details)) | ||
5068 | + continue; | ||
5069 | rss[MM_SWAPENTS]--; | ||
5070 | - else if (is_migration_entry(entry)) { | ||
5071 | + } else if (is_migration_entry(entry)) { | ||
5072 | struct page *page; | ||
5073 | |||
5074 | page = migration_entry_to_page(entry); | ||
5075 | + if (details && details->check_mapping && | ||
5076 | + details->check_mapping != page_rmapping(page)) | ||
5077 | + continue; | ||
5078 | rss[mm_counter(page)]--; | ||
5079 | } | ||
5080 | if (unlikely(!free_swap_and_cache(entry))) | ||
5081 | diff --git a/mm/mempolicy.c b/mm/mempolicy.c | ||
5082 | index 2f443767fd1b4..6059f85546fe9 100644 | ||
5083 | --- a/mm/mempolicy.c | ||
5084 | +++ b/mm/mempolicy.c | ||
5085 | @@ -734,7 +734,6 @@ static int vma_replace_policy(struct vm_area_struct *vma, | ||
5086 | static int mbind_range(struct mm_struct *mm, unsigned long start, | ||
5087 | unsigned long end, struct mempolicy *new_pol) | ||
5088 | { | ||
5089 | - struct vm_area_struct *next; | ||
5090 | struct vm_area_struct *prev; | ||
5091 | struct vm_area_struct *vma; | ||
5092 | int err = 0; | ||
5093 | @@ -750,8 +749,7 @@ static int mbind_range(struct mm_struct *mm, unsigned long start, | ||
5094 | if (start > vma->vm_start) | ||
5095 | prev = vma; | ||
5096 | |||
5097 | - for (; vma && vma->vm_start < end; prev = vma, vma = next) { | ||
5098 | - next = vma->vm_next; | ||
5099 | + for (; vma && vma->vm_start < end; prev = vma, vma = vma->vm_next) { | ||
5100 | vmstart = max(start, vma->vm_start); | ||
5101 | vmend = min(end, vma->vm_end); | ||
5102 | |||
5103 | @@ -765,10 +763,6 @@ static int mbind_range(struct mm_struct *mm, unsigned long start, | ||
5104 | new_pol, vma->vm_userfaultfd_ctx); | ||
5105 | if (prev) { | ||
5106 | vma = prev; | ||
5107 | - next = vma->vm_next; | ||
5108 | - if (mpol_equal(vma_policy(vma), new_pol)) | ||
5109 | - continue; | ||
5110 | - /* vma_merge() joined vma && vma->next, case 8 */ | ||
5111 | goto replace; | ||
5112 | } | ||
5113 | if (vma->vm_start != vmstart) { | ||
5114 | @@ -2505,6 +2499,7 @@ alloc_new: | ||
5115 | mpol_new = kmem_cache_alloc(policy_cache, GFP_KERNEL); | ||
5116 | if (!mpol_new) | ||
5117 | goto err_out; | ||
5118 | + atomic_set(&mpol_new->refcnt, 1); | ||
5119 | goto restart; | ||
5120 | } | ||
5121 | |||
5122 | diff --git a/mm/mmap.c b/mm/mmap.c | ||
5123 | index 7c8815636c482..18bd38ac15317 100644 | ||
5124 | --- a/mm/mmap.c | ||
5125 | +++ b/mm/mmap.c | ||
5126 | @@ -2425,7 +2425,7 @@ static int __init cmdline_parse_stack_guard_gap(char *p) | ||
5127 | if (!*endptr) | ||
5128 | stack_guard_gap = val << PAGE_SHIFT; | ||
5129 | |||
5130 | - return 0; | ||
5131 | + return 1; | ||
5132 | } | ||
5133 | __setup("stack_guard_gap=", cmdline_parse_stack_guard_gap); | ||
5134 | |||
5135 | diff --git a/mm/mremap.c b/mm/mremap.c | ||
5136 | index b5d8d25173c61..058de6f8c9d54 100644 | ||
5137 | --- a/mm/mremap.c | ||
5138 | +++ b/mm/mremap.c | ||
5139 | @@ -192,6 +192,9 @@ unsigned long move_page_tables(struct vm_area_struct *vma, | ||
5140 | unsigned long mmun_start; /* For mmu_notifiers */ | ||
5141 | unsigned long mmun_end; /* For mmu_notifiers */ | ||
5142 | |||
5143 | + if (!len) | ||
5144 | + return 0; | ||
5145 | + | ||
5146 | old_end = old_addr + len; | ||
5147 | flush_cache_range(vma, old_addr, old_end); | ||
5148 | |||
5149 | diff --git a/mm/page_alloc.c b/mm/page_alloc.c | ||
5150 | index babcbd8b94ea8..25c21aa398f8c 100644 | ||
5151 | --- a/mm/page_alloc.c | ||
5152 | +++ b/mm/page_alloc.c | ||
5153 | @@ -4503,7 +4503,7 @@ static int build_zonelists_node(pg_data_t *pgdat, struct zonelist *zonelist, | ||
5154 | do { | ||
5155 | zone_type--; | ||
5156 | zone = pgdat->node_zones + zone_type; | ||
5157 | - if (managed_zone(zone)) { | ||
5158 | + if (populated_zone(zone)) { | ||
5159 | zoneref_set_zone(zone, | ||
5160 | &zonelist->_zonerefs[nr_zones++]); | ||
5161 | check_highest_zone(zone_type); | ||
5162 | @@ -6267,10 +6267,17 @@ restart: | ||
5163 | |||
5164 | out2: | ||
5165 | /* Align start of ZONE_MOVABLE on all nids to MAX_ORDER_NR_PAGES */ | ||
5166 | - for (nid = 0; nid < MAX_NUMNODES; nid++) | ||
5167 | + for (nid = 0; nid < MAX_NUMNODES; nid++) { | ||
5168 | + unsigned long start_pfn, end_pfn; | ||
5169 | + | ||
5170 | zone_movable_pfn[nid] = | ||
5171 | roundup(zone_movable_pfn[nid], MAX_ORDER_NR_PAGES); | ||
5172 | |||
5173 | + get_pfn_range_for_nid(nid, &start_pfn, &end_pfn); | ||
5174 | + if (zone_movable_pfn[nid] >= end_pfn) | ||
5175 | + zone_movable_pfn[nid] = 0; | ||
5176 | + } | ||
5177 | + | ||
5178 | out: | ||
5179 | /* restore the node_state */ | ||
5180 | node_states[N_MEMORY] = saved_node_state; | ||
5181 | diff --git a/mm/rmap.c b/mm/rmap.c | ||
5182 | index a7276d8c96f33..0a5310b76ec85 100644 | ||
5183 | --- a/mm/rmap.c | ||
5184 | +++ b/mm/rmap.c | ||
5185 | @@ -1638,11 +1638,36 @@ static int try_to_unmap_one(struct page *page, struct vm_area_struct *vma, | ||
5186 | */ | ||
5187 | VM_BUG_ON_PAGE(!PageSwapCache(page), page); | ||
5188 | |||
5189 | - if (!PageDirty(page) && (flags & TTU_LZFREE)) { | ||
5190 | - /* It's a freeable page by MADV_FREE */ | ||
5191 | - dec_mm_counter(mm, MM_ANONPAGES); | ||
5192 | - rp->lazyfreed++; | ||
5193 | - goto discard; | ||
5194 | + if (flags & TTU_LZFREE) { | ||
5195 | + int ref_count, map_count; | ||
5196 | + | ||
5197 | + /* | ||
5198 | + * Synchronize with gup_pte_range(): | ||
5199 | + * - clear PTE; barrier; read refcount | ||
5200 | + * - inc refcount; barrier; read PTE | ||
5201 | + */ | ||
5202 | + smp_mb(); | ||
5203 | + | ||
5204 | + ref_count = page_ref_count(page); | ||
5205 | + map_count = page_mapcount(page); | ||
5206 | + | ||
5207 | + /* | ||
5208 | + * Order reads for page refcount and dirty flag | ||
5209 | + * (see comments in __remove_mapping()). | ||
5210 | + */ | ||
5211 | + smp_rmb(); | ||
5212 | + | ||
5213 | + /* | ||
5214 | + * The only page refs must be one from isolation | ||
5215 | + * plus the rmap(s) (dropped by discard:). | ||
5216 | + */ | ||
5217 | + if (ref_count == 1 + map_count && | ||
5218 | + !PageDirty(page)) { | ||
5219 | + /* It's a freeable page by MADV_FREE */ | ||
5220 | + dec_mm_counter(mm, MM_ANONPAGES); | ||
5221 | + rp->lazyfreed++; | ||
5222 | + goto discard; | ||
5223 | + } | ||
5224 | } | ||
5225 | |||
5226 | if (swap_duplicate(entry) < 0) { | ||
5227 | diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c | ||
5228 | index cff87c465bcb0..8face15b42d86 100644 | ||
5229 | --- a/net/bluetooth/hci_event.c | ||
5230 | +++ b/net/bluetooth/hci_event.c | ||
5231 | @@ -4470,8 +4470,9 @@ static void hci_disconn_phylink_complete_evt(struct hci_dev *hdev, | ||
5232 | hci_dev_lock(hdev); | ||
5233 | |||
5234 | hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle); | ||
5235 | - if (hcon) { | ||
5236 | + if (hcon && hcon->type == AMP_LINK) { | ||
5237 | hcon->state = BT_CLOSED; | ||
5238 | + hci_disconn_cfm(hcon, ev->reason); | ||
5239 | hci_conn_del(hcon); | ||
5240 | } | ||
5241 | |||
5242 | diff --git a/net/key/af_key.c b/net/key/af_key.c | ||
5243 | index adc93329e6aac..c9cc9f75b0999 100644 | ||
5244 | --- a/net/key/af_key.c | ||
5245 | +++ b/net/key/af_key.c | ||
5246 | @@ -1726,7 +1726,7 @@ static int pfkey_register(struct sock *sk, struct sk_buff *skb, const struct sad | ||
5247 | |||
5248 | xfrm_probe_algs(); | ||
5249 | |||
5250 | - supp_skb = compose_sadb_supported(hdr, GFP_KERNEL); | ||
5251 | + supp_skb = compose_sadb_supported(hdr, GFP_KERNEL | __GFP_ZERO); | ||
5252 | if (!supp_skb) { | ||
5253 | if (hdr->sadb_msg_satype != SADB_SATYPE_UNSPEC) | ||
5254 | pfk->registered &= ~(1<<hdr->sadb_msg_satype); | ||
5255 | @@ -2434,7 +2434,7 @@ static int pfkey_spddelete(struct sock *sk, struct sk_buff *skb, const struct sa | ||
5256 | return err; | ||
5257 | } | ||
5258 | |||
5259 | - xp = xfrm_policy_bysel_ctx(net, DUMMY_MARK, XFRM_POLICY_TYPE_MAIN, | ||
5260 | + xp = xfrm_policy_bysel_ctx(net, &dummy_mark, XFRM_POLICY_TYPE_MAIN, | ||
5261 | pol->sadb_x_policy_dir - 1, &sel, pol_ctx, | ||
5262 | 1, &err); | ||
5263 | security_xfrm_policy_free(pol_ctx); | ||
5264 | @@ -2687,7 +2687,7 @@ static int pfkey_spdget(struct sock *sk, struct sk_buff *skb, const struct sadb_ | ||
5265 | return -EINVAL; | ||
5266 | |||
5267 | delete = (hdr->sadb_msg_type == SADB_X_SPDDELETE2); | ||
5268 | - xp = xfrm_policy_byid(net, DUMMY_MARK, XFRM_POLICY_TYPE_MAIN, | ||
5269 | + xp = xfrm_policy_byid(net, &dummy_mark, XFRM_POLICY_TYPE_MAIN, | ||
5270 | dir, pol->sadb_x_policy_id, delete, &err); | ||
5271 | if (xp == NULL) | ||
5272 | return -ENOENT; | ||
5273 | diff --git a/net/netfilter/nf_conntrack_proto_tcp.c b/net/netfilter/nf_conntrack_proto_tcp.c | ||
5274 | index 69f687740c76b..9e9ce570bb9ec 100644 | ||
5275 | --- a/net/netfilter/nf_conntrack_proto_tcp.c | ||
5276 | +++ b/net/netfilter/nf_conntrack_proto_tcp.c | ||
5277 | @@ -390,8 +390,8 @@ static void tcp_options(const struct sk_buff *skb, | ||
5278 | length, buff); | ||
5279 | BUG_ON(ptr == NULL); | ||
5280 | |||
5281 | - state->td_scale = | ||
5282 | - state->flags = 0; | ||
5283 | + state->td_scale = 0; | ||
5284 | + state->flags &= IP_CT_TCP_FLAG_BE_LIBERAL; | ||
5285 | |||
5286 | while (length > 0) { | ||
5287 | int opcode=*ptr++; | ||
5288 | @@ -806,6 +806,16 @@ static unsigned int *tcp_get_timeouts(struct net *net) | ||
5289 | return tcp_pernet(net)->timeouts; | ||
5290 | } | ||
5291 | |||
5292 | +static void nf_ct_tcp_state_reset(struct ip_ct_tcp_state *state) | ||
5293 | +{ | ||
5294 | + state->td_end = 0; | ||
5295 | + state->td_maxend = 0; | ||
5296 | + state->td_maxwin = 0; | ||
5297 | + state->td_maxack = 0; | ||
5298 | + state->td_scale = 0; | ||
5299 | + state->flags &= IP_CT_TCP_FLAG_BE_LIBERAL; | ||
5300 | +} | ||
5301 | + | ||
5302 | /* Returns verdict for packet, or -1 for invalid. */ | ||
5303 | static int tcp_packet(struct nf_conn *ct, | ||
5304 | const struct sk_buff *skb, | ||
5305 | @@ -907,8 +917,7 @@ static int tcp_packet(struct nf_conn *ct, | ||
5306 | ct->proto.tcp.last_flags &= ~IP_CT_EXP_CHALLENGE_ACK; | ||
5307 | ct->proto.tcp.seen[ct->proto.tcp.last_dir].flags = | ||
5308 | ct->proto.tcp.last_flags; | ||
5309 | - memset(&ct->proto.tcp.seen[dir], 0, | ||
5310 | - sizeof(struct ip_ct_tcp_state)); | ||
5311 | + nf_ct_tcp_state_reset(&ct->proto.tcp.seen[dir]); | ||
5312 | break; | ||
5313 | } | ||
5314 | ct->proto.tcp.last_index = index; | ||
5315 | diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c | ||
5316 | index 13d69cbd14c20..8aef475fef310 100644 | ||
5317 | --- a/net/netlink/af_netlink.c | ||
5318 | +++ b/net/netlink/af_netlink.c | ||
5319 | @@ -161,6 +161,8 @@ static const struct rhashtable_params netlink_rhashtable_params; | ||
5320 | |||
5321 | static inline u32 netlink_group_mask(u32 group) | ||
5322 | { | ||
5323 | + if (group > 32) | ||
5324 | + return 0; | ||
5325 | return group ? 1 << (group - 1) : 0; | ||
5326 | } | ||
5327 | |||
5328 | diff --git a/net/nfc/nci/core.c b/net/nfc/nci/core.c | ||
5329 | index 84eedbd5716d1..df90872fcf908 100644 | ||
5330 | --- a/net/nfc/nci/core.c | ||
5331 | +++ b/net/nfc/nci/core.c | ||
5332 | @@ -561,6 +561,10 @@ static int nci_close_device(struct nci_dev *ndev) | ||
5333 | mutex_lock(&ndev->req_lock); | ||
5334 | |||
5335 | if (!test_and_clear_bit(NCI_UP, &ndev->flags)) { | ||
5336 | + /* Need to flush the cmd wq in case | ||
5337 | + * there is a queued/running cmd_work | ||
5338 | + */ | ||
5339 | + flush_workqueue(ndev->cmd_wq); | ||
5340 | del_timer_sync(&ndev->cmd_timer); | ||
5341 | del_timer_sync(&ndev->data_timer); | ||
5342 | mutex_unlock(&ndev->req_lock); | ||
5343 | diff --git a/net/openvswitch/flow_netlink.c b/net/openvswitch/flow_netlink.c | ||
5344 | index 50ea76180afae..28471cfad9225 100644 | ||
5345 | --- a/net/openvswitch/flow_netlink.c | ||
5346 | +++ b/net/openvswitch/flow_netlink.c | ||
5347 | @@ -1713,8 +1713,8 @@ static int __ovs_nla_put_key(const struct sw_flow_key *swkey, | ||
5348 | icmpv6_key->icmpv6_type = ntohs(output->tp.src); | ||
5349 | icmpv6_key->icmpv6_code = ntohs(output->tp.dst); | ||
5350 | |||
5351 | - if (icmpv6_key->icmpv6_type == NDISC_NEIGHBOUR_SOLICITATION || | ||
5352 | - icmpv6_key->icmpv6_type == NDISC_NEIGHBOUR_ADVERTISEMENT) { | ||
5353 | + if (swkey->tp.src == htons(NDISC_NEIGHBOUR_SOLICITATION) || | ||
5354 | + swkey->tp.src == htons(NDISC_NEIGHBOUR_ADVERTISEMENT)) { | ||
5355 | struct ovs_key_nd *nd_key; | ||
5356 | |||
5357 | nla = nla_reserve(skb, OVS_KEY_ATTR_ND, sizeof(*nd_key)); | ||
5358 | diff --git a/net/sunrpc/sched.c b/net/sunrpc/sched.c | ||
5359 | index 00d95fefdc6fd..ccb9fa5812d8a 100644 | ||
5360 | --- a/net/sunrpc/sched.c | ||
5361 | +++ b/net/sunrpc/sched.c | ||
5362 | @@ -883,8 +883,10 @@ int rpc_malloc(struct rpc_task *task) | ||
5363 | struct rpc_buffer *buf; | ||
5364 | gfp_t gfp = GFP_NOIO | __GFP_NOWARN; | ||
5365 | |||
5366 | + if (RPC_IS_ASYNC(task)) | ||
5367 | + gfp = GFP_NOWAIT | __GFP_NOWARN; | ||
5368 | if (RPC_IS_SWAPPER(task)) | ||
5369 | - gfp = __GFP_MEMALLOC | GFP_NOWAIT | __GFP_NOWARN; | ||
5370 | + gfp |= __GFP_MEMALLOC; | ||
5371 | |||
5372 | size += sizeof(struct rpc_buffer); | ||
5373 | if (size <= RPC_BUFFER_MAXSIZE) | ||
5374 | diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c | ||
5375 | index 9491fc81d50ad..ff263ece44a73 100644 | ||
5376 | --- a/net/sunrpc/xprt.c | ||
5377 | +++ b/net/sunrpc/xprt.c | ||
5378 | @@ -1446,7 +1446,14 @@ static void xprt_destroy(struct rpc_xprt *xprt) | ||
5379 | /* Exclude transport connect/disconnect handlers */ | ||
5380 | wait_on_bit_lock(&xprt->state, XPRT_LOCKED, TASK_UNINTERRUPTIBLE); | ||
5381 | |||
5382 | + /* | ||
5383 | + * xprt_schedule_autodisconnect() can run after XPRT_LOCKED | ||
5384 | + * is cleared. We use ->transport_lock to ensure the mod_timer() | ||
5385 | + * can only run *before* del_time_sync(), never after. | ||
5386 | + */ | ||
5387 | + spin_lock(&xprt->transport_lock); | ||
5388 | del_timer_sync(&xprt->timer); | ||
5389 | + spin_unlock(&xprt->transport_lock); | ||
5390 | |||
5391 | rpc_xprt_debugfs_unregister(xprt); | ||
5392 | rpc_destroy_wait_queue(&xprt->binding); | ||
5393 | diff --git a/net/sunrpc/xprtrdma/transport.c b/net/sunrpc/xprtrdma/transport.c | ||
5394 | index 3ea3bb64b6d5c..f308f286e9aa4 100644 | ||
5395 | --- a/net/sunrpc/xprtrdma/transport.c | ||
5396 | +++ b/net/sunrpc/xprtrdma/transport.c | ||
5397 | @@ -577,8 +577,10 @@ xprt_rdma_allocate(struct rpc_task *task) | ||
5398 | return -ENOMEM; | ||
5399 | |||
5400 | flags = RPCRDMA_DEF_GFP; | ||
5401 | + if (RPC_IS_ASYNC(task)) | ||
5402 | + flags = GFP_NOWAIT | __GFP_NOWARN; | ||
5403 | if (RPC_IS_SWAPPER(task)) | ||
5404 | - flags = __GFP_MEMALLOC | GFP_NOWAIT | __GFP_NOWARN; | ||
5405 | + flags |= __GFP_MEMALLOC; | ||
5406 | |||
5407 | if (!rpcrdma_get_rdmabuf(r_xprt, req, flags)) | ||
5408 | goto out_fail; | ||
5409 | diff --git a/net/x25/af_x25.c b/net/x25/af_x25.c | ||
5410 | index c23c04d38a82e..cd0c800b9072b 100644 | ||
5411 | --- a/net/x25/af_x25.c | ||
5412 | +++ b/net/x25/af_x25.c | ||
5413 | @@ -1795,10 +1795,15 @@ void x25_kill_by_neigh(struct x25_neigh *nb) | ||
5414 | |||
5415 | write_lock_bh(&x25_list_lock); | ||
5416 | |||
5417 | - sk_for_each(s, &x25_list) | ||
5418 | - if (x25_sk(s)->neighbour == nb) | ||
5419 | + sk_for_each(s, &x25_list) { | ||
5420 | + if (x25_sk(s)->neighbour == nb) { | ||
5421 | + write_unlock_bh(&x25_list_lock); | ||
5422 | + lock_sock(s); | ||
5423 | x25_disconnect(s, ENETUNREACH, 0, 0); | ||
5424 | - | ||
5425 | + release_sock(s); | ||
5426 | + write_lock_bh(&x25_list_lock); | ||
5427 | + } | ||
5428 | + } | ||
5429 | write_unlock_bh(&x25_list_lock); | ||
5430 | |||
5431 | /* Remove any related forwards */ | ||
5432 | diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c | ||
5433 | index b00ed36b9aacf..9179b47e8b61f 100644 | ||
5434 | --- a/net/xfrm/xfrm_policy.c | ||
5435 | +++ b/net/xfrm/xfrm_policy.c | ||
5436 | @@ -754,14 +754,10 @@ static void xfrm_policy_requeue(struct xfrm_policy *old, | ||
5437 | spin_unlock_bh(&pq->hold_queue.lock); | ||
5438 | } | ||
5439 | |||
5440 | -static bool xfrm_policy_mark_match(struct xfrm_policy *policy, | ||
5441 | - struct xfrm_policy *pol) | ||
5442 | +static inline bool xfrm_policy_mark_match(const struct xfrm_mark *mark, | ||
5443 | + struct xfrm_policy *pol) | ||
5444 | { | ||
5445 | - if (policy->mark.v == pol->mark.v && | ||
5446 | - policy->priority == pol->priority) | ||
5447 | - return true; | ||
5448 | - | ||
5449 | - return false; | ||
5450 | + return mark->v == pol->mark.v && mark->m == pol->mark.m; | ||
5451 | } | ||
5452 | |||
5453 | int xfrm_policy_insert(int dir, struct xfrm_policy *policy, int excl) | ||
5454 | @@ -779,7 +775,7 @@ int xfrm_policy_insert(int dir, struct xfrm_policy *policy, int excl) | ||
5455 | hlist_for_each_entry(pol, chain, bydst) { | ||
5456 | if (pol->type == policy->type && | ||
5457 | !selector_cmp(&pol->selector, &policy->selector) && | ||
5458 | - xfrm_policy_mark_match(policy, pol) && | ||
5459 | + xfrm_policy_mark_match(&policy->mark, pol) && | ||
5460 | xfrm_sec_ctx_match(pol->security, policy->security) && | ||
5461 | !WARN_ON(delpol)) { | ||
5462 | if (excl) { | ||
5463 | @@ -830,8 +826,8 @@ int xfrm_policy_insert(int dir, struct xfrm_policy *policy, int excl) | ||
5464 | } | ||
5465 | EXPORT_SYMBOL(xfrm_policy_insert); | ||
5466 | |||
5467 | -struct xfrm_policy *xfrm_policy_bysel_ctx(struct net *net, u32 mark, u8 type, | ||
5468 | - int dir, struct xfrm_selector *sel, | ||
5469 | +struct xfrm_policy *xfrm_policy_bysel_ctx(struct net *net, const struct xfrm_mark *mark, | ||
5470 | + u8 type, int dir, struct xfrm_selector *sel, | ||
5471 | struct xfrm_sec_ctx *ctx, int delete, | ||
5472 | int *err) | ||
5473 | { | ||
5474 | @@ -844,7 +840,7 @@ struct xfrm_policy *xfrm_policy_bysel_ctx(struct net *net, u32 mark, u8 type, | ||
5475 | ret = NULL; | ||
5476 | hlist_for_each_entry(pol, chain, bydst) { | ||
5477 | if (pol->type == type && | ||
5478 | - (mark & pol->mark.m) == pol->mark.v && | ||
5479 | + xfrm_policy_mark_match(mark, pol) && | ||
5480 | !selector_cmp(sel, &pol->selector) && | ||
5481 | xfrm_sec_ctx_match(ctx, pol->security)) { | ||
5482 | xfrm_pol_hold(pol); | ||
5483 | @@ -869,8 +865,8 @@ struct xfrm_policy *xfrm_policy_bysel_ctx(struct net *net, u32 mark, u8 type, | ||
5484 | } | ||
5485 | EXPORT_SYMBOL(xfrm_policy_bysel_ctx); | ||
5486 | |||
5487 | -struct xfrm_policy *xfrm_policy_byid(struct net *net, u32 mark, u8 type, | ||
5488 | - int dir, u32 id, int delete, int *err) | ||
5489 | +struct xfrm_policy *xfrm_policy_byid(struct net *net, const struct xfrm_mark *mark, | ||
5490 | + u8 type, int dir, u32 id, int delete, int *err) | ||
5491 | { | ||
5492 | struct xfrm_policy *pol, *ret; | ||
5493 | struct hlist_head *chain; | ||
5494 | @@ -885,7 +881,7 @@ struct xfrm_policy *xfrm_policy_byid(struct net *net, u32 mark, u8 type, | ||
5495 | ret = NULL; | ||
5496 | hlist_for_each_entry(pol, chain, byidx) { | ||
5497 | if (pol->type == type && pol->index == id && | ||
5498 | - (mark & pol->mark.m) == pol->mark.v) { | ||
5499 | + xfrm_policy_mark_match(mark, pol)) { | ||
5500 | xfrm_pol_hold(pol); | ||
5501 | if (delete) { | ||
5502 | *err = security_xfrm_policy_delete( | ||
5503 | diff --git a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c | ||
5504 | index 48139e1a0ac91..eaed745221977 100644 | ||
5505 | --- a/net/xfrm/xfrm_user.c | ||
5506 | +++ b/net/xfrm/xfrm_user.c | ||
5507 | @@ -1777,7 +1777,6 @@ static int xfrm_get_policy(struct sk_buff *skb, struct nlmsghdr *nlh, | ||
5508 | struct km_event c; | ||
5509 | int delete; | ||
5510 | struct xfrm_mark m; | ||
5511 | - u32 mark = xfrm_mark_get(attrs, &m); | ||
5512 | |||
5513 | p = nlmsg_data(nlh); | ||
5514 | delete = nlh->nlmsg_type == XFRM_MSG_DELPOLICY; | ||
5515 | @@ -1790,8 +1789,10 @@ static int xfrm_get_policy(struct sk_buff *skb, struct nlmsghdr *nlh, | ||
5516 | if (err) | ||
5517 | return err; | ||
5518 | |||
5519 | + xfrm_mark_get(attrs, &m); | ||
5520 | + | ||
5521 | if (p->index) | ||
5522 | - xp = xfrm_policy_byid(net, mark, type, p->dir, p->index, delete, &err); | ||
5523 | + xp = xfrm_policy_byid(net, &m, type, p->dir, p->index, delete, &err); | ||
5524 | else { | ||
5525 | struct nlattr *rt = attrs[XFRMA_SEC_CTX]; | ||
5526 | struct xfrm_sec_ctx *ctx; | ||
5527 | @@ -1808,7 +1809,7 @@ static int xfrm_get_policy(struct sk_buff *skb, struct nlmsghdr *nlh, | ||
5528 | if (err) | ||
5529 | return err; | ||
5530 | } | ||
5531 | - xp = xfrm_policy_bysel_ctx(net, mark, type, p->dir, &p->sel, | ||
5532 | + xp = xfrm_policy_bysel_ctx(net, &m, type, p->dir, &p->sel, | ||
5533 | ctx, delete, &err); | ||
5534 | security_xfrm_policy_free(ctx); | ||
5535 | } | ||
5536 | @@ -2072,7 +2073,6 @@ static int xfrm_add_pol_expire(struct sk_buff *skb, struct nlmsghdr *nlh, | ||
5537 | u8 type = XFRM_POLICY_TYPE_MAIN; | ||
5538 | int err = -ENOENT; | ||
5539 | struct xfrm_mark m; | ||
5540 | - u32 mark = xfrm_mark_get(attrs, &m); | ||
5541 | |||
5542 | err = copy_from_user_policy_type(&type, attrs); | ||
5543 | if (err) | ||
5544 | @@ -2082,8 +2082,10 @@ static int xfrm_add_pol_expire(struct sk_buff *skb, struct nlmsghdr *nlh, | ||
5545 | if (err) | ||
5546 | return err; | ||
5547 | |||
5548 | + xfrm_mark_get(attrs, &m); | ||
5549 | + | ||
5550 | if (p->index) | ||
5551 | - xp = xfrm_policy_byid(net, mark, type, p->dir, p->index, 0, &err); | ||
5552 | + xp = xfrm_policy_byid(net, &m, type, p->dir, p->index, 0, &err); | ||
5553 | else { | ||
5554 | struct nlattr *rt = attrs[XFRMA_SEC_CTX]; | ||
5555 | struct xfrm_sec_ctx *ctx; | ||
5556 | @@ -2100,7 +2102,7 @@ static int xfrm_add_pol_expire(struct sk_buff *skb, struct nlmsghdr *nlh, | ||
5557 | if (err) | ||
5558 | return err; | ||
5559 | } | ||
5560 | - xp = xfrm_policy_bysel_ctx(net, mark, type, p->dir, | ||
5561 | + xp = xfrm_policy_bysel_ctx(net, &m, type, p->dir, | ||
5562 | &p->sel, ctx, 0, &err); | ||
5563 | security_xfrm_policy_free(ctx); | ||
5564 | } | ||
5565 | diff --git a/scripts/gcc-plugins/latent_entropy_plugin.c b/scripts/gcc-plugins/latent_entropy_plugin.c | ||
5566 | index dff390f692a2c..4435263766ac9 100644 | ||
5567 | --- a/scripts/gcc-plugins/latent_entropy_plugin.c | ||
5568 | +++ b/scripts/gcc-plugins/latent_entropy_plugin.c | ||
5569 | @@ -86,25 +86,31 @@ static struct plugin_info latent_entropy_plugin_info = { | ||
5570 | .help = "disable\tturn off latent entropy instrumentation\n", | ||
5571 | }; | ||
5572 | |||
5573 | -static unsigned HOST_WIDE_INT seed; | ||
5574 | -/* | ||
5575 | - * get_random_seed() (this is a GCC function) generates the seed. | ||
5576 | - * This is a simple random generator without any cryptographic security because | ||
5577 | - * the entropy doesn't come from here. | ||
5578 | - */ | ||
5579 | +static unsigned HOST_WIDE_INT deterministic_seed; | ||
5580 | +static unsigned HOST_WIDE_INT rnd_buf[32]; | ||
5581 | +static size_t rnd_idx = ARRAY_SIZE(rnd_buf); | ||
5582 | +static int urandom_fd = -1; | ||
5583 | + | ||
5584 | static unsigned HOST_WIDE_INT get_random_const(void) | ||
5585 | { | ||
5586 | - unsigned int i; | ||
5587 | - unsigned HOST_WIDE_INT ret = 0; | ||
5588 | - | ||
5589 | - for (i = 0; i < 8 * sizeof(ret); i++) { | ||
5590 | - ret = (ret << 1) | (seed & 1); | ||
5591 | - seed >>= 1; | ||
5592 | - if (ret & 1) | ||
5593 | - seed ^= 0xD800000000000000ULL; | ||
5594 | + if (deterministic_seed) { | ||
5595 | + unsigned HOST_WIDE_INT w = deterministic_seed; | ||
5596 | + w ^= w << 13; | ||
5597 | + w ^= w >> 7; | ||
5598 | + w ^= w << 17; | ||
5599 | + deterministic_seed = w; | ||
5600 | + return deterministic_seed; | ||
5601 | } | ||
5602 | |||
5603 | - return ret; | ||
5604 | + if (urandom_fd < 0) { | ||
5605 | + urandom_fd = open("/dev/urandom", O_RDONLY); | ||
5606 | + gcc_assert(urandom_fd >= 0); | ||
5607 | + } | ||
5608 | + if (rnd_idx >= ARRAY_SIZE(rnd_buf)) { | ||
5609 | + gcc_assert(read(urandom_fd, rnd_buf, sizeof(rnd_buf)) == sizeof(rnd_buf)); | ||
5610 | + rnd_idx = 0; | ||
5611 | + } | ||
5612 | + return rnd_buf[rnd_idx++]; | ||
5613 | } | ||
5614 | |||
5615 | static tree tree_get_random_const(tree type) | ||
5616 | @@ -556,8 +562,6 @@ static void latent_entropy_start_unit(void *gcc_data __unused, | ||
5617 | tree type, id; | ||
5618 | int quals; | ||
5619 | |||
5620 | - seed = get_random_seed(false); | ||
5621 | - | ||
5622 | if (in_lto_p) | ||
5623 | return; | ||
5624 | |||
5625 | @@ -594,6 +598,12 @@ __visible int plugin_init(struct plugin_name_args *plugin_info, | ||
5626 | |||
5627 | struct register_pass_info latent_entropy_pass_info; | ||
5628 | |||
5629 | + /* | ||
5630 | + * Call get_random_seed() with noinit=true, so that this returns | ||
5631 | + * 0 in the case where no seed has been passed via -frandom-seed. | ||
5632 | + */ | ||
5633 | + deterministic_seed = get_random_seed(true); | ||
5634 | + | ||
5635 | latent_entropy_pass_info.pass = make_latent_entropy_pass(); | ||
5636 | latent_entropy_pass_info.reference_pass_name = "optimized"; | ||
5637 | latent_entropy_pass_info.ref_pass_instance_number = 1; | ||
5638 | diff --git a/security/selinux/xfrm.c b/security/selinux/xfrm.c | ||
5639 | index 56e354fcdfc66..5304dd49e054b 100644 | ||
5640 | --- a/security/selinux/xfrm.c | ||
5641 | +++ b/security/selinux/xfrm.c | ||
5642 | @@ -344,7 +344,7 @@ int selinux_xfrm_state_alloc_acquire(struct xfrm_state *x, | ||
5643 | int rc; | ||
5644 | struct xfrm_sec_ctx *ctx; | ||
5645 | char *ctx_str = NULL; | ||
5646 | - int str_len; | ||
5647 | + u32 str_len; | ||
5648 | |||
5649 | if (!polsec) | ||
5650 | return 0; | ||
5651 | diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c | ||
5652 | index 589c1c2ae6db3..84ed47195cdd2 100644 | ||
5653 | --- a/security/smack/smack_lsm.c | ||
5654 | +++ b/security/smack/smack_lsm.c | ||
5655 | @@ -2567,7 +2567,7 @@ static int smk_ipv6_check(struct smack_known *subject, | ||
5656 | #ifdef CONFIG_AUDIT | ||
5657 | smk_ad_init_net(&ad, __func__, LSM_AUDIT_DATA_NET, &net); | ||
5658 | ad.a.u.net->family = PF_INET6; | ||
5659 | - ad.a.u.net->dport = ntohs(address->sin6_port); | ||
5660 | + ad.a.u.net->dport = address->sin6_port; | ||
5661 | if (act == SMK_RECEIVING) | ||
5662 | ad.a.u.net->v6info.saddr = address->sin6_addr; | ||
5663 | else | ||
5664 | diff --git a/security/tomoyo/load_policy.c b/security/tomoyo/load_policy.c | ||
5665 | index 078fac0bb4c55..6766b92cb572e 100644 | ||
5666 | --- a/security/tomoyo/load_policy.c | ||
5667 | +++ b/security/tomoyo/load_policy.c | ||
5668 | @@ -23,7 +23,7 @@ static const char *tomoyo_loader; | ||
5669 | static int __init tomoyo_loader_setup(char *str) | ||
5670 | { | ||
5671 | tomoyo_loader = str; | ||
5672 | - return 0; | ||
5673 | + return 1; | ||
5674 | } | ||
5675 | |||
5676 | __setup("TOMOYO_loader=", tomoyo_loader_setup); | ||
5677 | @@ -62,7 +62,7 @@ static const char *tomoyo_trigger; | ||
5678 | static int __init tomoyo_trigger_setup(char *str) | ||
5679 | { | ||
5680 | tomoyo_trigger = str; | ||
5681 | - return 0; | ||
5682 | + return 1; | ||
5683 | } | ||
5684 | |||
5685 | __setup("TOMOYO_trigger=", tomoyo_trigger_setup); | ||
5686 | diff --git a/sound/core/pcm_misc.c b/sound/core/pcm_misc.c | ||
5687 | index 53dc37357bca9..92519e0477c86 100644 | ||
5688 | --- a/sound/core/pcm_misc.c | ||
5689 | +++ b/sound/core/pcm_misc.c | ||
5690 | @@ -412,7 +412,7 @@ int snd_pcm_format_set_silence(snd_pcm_format_t format, void *data, unsigned int | ||
5691 | return 0; | ||
5692 | width = pcm_formats[(INT)format].phys; /* physical width */ | ||
5693 | pat = pcm_formats[(INT)format].silence; | ||
5694 | - if (! width) | ||
5695 | + if (!width || !pat) | ||
5696 | return -EINVAL; | ||
5697 | /* signed or 1 byte data */ | ||
5698 | if (pcm_formats[(INT)format].signd == 1 || width <= 8) { | ||
5699 | diff --git a/sound/firewire/fcp.c b/sound/firewire/fcp.c | ||
5700 | index cce19768f43d0..8209856293d32 100644 | ||
5701 | --- a/sound/firewire/fcp.c | ||
5702 | +++ b/sound/firewire/fcp.c | ||
5703 | @@ -234,9 +234,7 @@ int fcp_avc_transaction(struct fw_unit *unit, | ||
5704 | t.response_match_bytes = response_match_bytes; | ||
5705 | t.state = STATE_PENDING; | ||
5706 | init_waitqueue_head(&t.wait); | ||
5707 | - | ||
5708 | - if (*(const u8 *)command == 0x00 || *(const u8 *)command == 0x03) | ||
5709 | - t.deferrable = true; | ||
5710 | + t.deferrable = (*(const u8 *)command == 0x00 || *(const u8 *)command == 0x03); | ||
5711 | |||
5712 | spin_lock_irq(&transactions_lock); | ||
5713 | list_add_tail(&t.list, &transactions); | ||
5714 | diff --git a/sound/isa/cs423x/cs4236.c b/sound/isa/cs423x/cs4236.c | ||
5715 | index c67d379cb6d6a..9d4a2c66ea16b 100644 | ||
5716 | --- a/sound/isa/cs423x/cs4236.c | ||
5717 | +++ b/sound/isa/cs423x/cs4236.c | ||
5718 | @@ -557,7 +557,7 @@ static int snd_cs423x_pnpbios_detect(struct pnp_dev *pdev, | ||
5719 | static int dev; | ||
5720 | int err; | ||
5721 | struct snd_card *card; | ||
5722 | - struct pnp_dev *cdev; | ||
5723 | + struct pnp_dev *cdev, *iter; | ||
5724 | char cid[PNP_ID_LEN]; | ||
5725 | |||
5726 | if (pnp_device_is_isapnp(pdev)) | ||
5727 | @@ -573,9 +573,11 @@ static int snd_cs423x_pnpbios_detect(struct pnp_dev *pdev, | ||
5728 | strcpy(cid, pdev->id[0].id); | ||
5729 | cid[5] = '1'; | ||
5730 | cdev = NULL; | ||
5731 | - list_for_each_entry(cdev, &(pdev->protocol->devices), protocol_list) { | ||
5732 | - if (!strcmp(cdev->id[0].id, cid)) | ||
5733 | + list_for_each_entry(iter, &(pdev->protocol->devices), protocol_list) { | ||
5734 | + if (!strcmp(iter->id[0].id, cid)) { | ||
5735 | + cdev = iter; | ||
5736 | break; | ||
5737 | + } | ||
5738 | } | ||
5739 | err = snd_cs423x_card_new(&pdev->dev, dev, &card); | ||
5740 | if (err < 0) | ||
5741 | diff --git a/sound/soc/atmel/atmel_ssc_dai.c b/sound/soc/atmel/atmel_ssc_dai.c | ||
5742 | index 16e459aedffe4..5958aafac8ebd 100644 | ||
5743 | --- a/sound/soc/atmel/atmel_ssc_dai.c | ||
5744 | +++ b/sound/soc/atmel/atmel_ssc_dai.c | ||
5745 | @@ -296,7 +296,10 @@ static int atmel_ssc_startup(struct snd_pcm_substream *substream, | ||
5746 | |||
5747 | /* Enable PMC peripheral clock for this SSC */ | ||
5748 | pr_debug("atmel_ssc_dai: Starting clock\n"); | ||
5749 | - clk_enable(ssc_p->ssc->clk); | ||
5750 | + ret = clk_enable(ssc_p->ssc->clk); | ||
5751 | + if (ret) | ||
5752 | + return ret; | ||
5753 | + | ||
5754 | ssc_p->mck_rate = clk_get_rate(ssc_p->ssc->clk); | ||
5755 | |||
5756 | /* Reset the SSC unless initialized to keep it in a clean state */ | ||
5757 | diff --git a/sound/soc/atmel/sam9g20_wm8731.c b/sound/soc/atmel/sam9g20_wm8731.c | ||
5758 | index d7469cdd90dc8..39365319c3516 100644 | ||
5759 | --- a/sound/soc/atmel/sam9g20_wm8731.c | ||
5760 | +++ b/sound/soc/atmel/sam9g20_wm8731.c | ||
5761 | @@ -226,6 +226,7 @@ static int at91sam9g20ek_audio_probe(struct platform_device *pdev) | ||
5762 | cpu_np = of_parse_phandle(np, "atmel,ssc-controller", 0); | ||
5763 | if (!cpu_np) { | ||
5764 | dev_err(&pdev->dev, "dai and pcm info missing\n"); | ||
5765 | + of_node_put(codec_np); | ||
5766 | return -EINVAL; | ||
5767 | } | ||
5768 | at91sam9g20ek_dai.cpu_of_node = cpu_np; | ||
5769 | diff --git a/sound/soc/codecs/wm8350.c b/sound/soc/codecs/wm8350.c | ||
5770 | index 2efc5b41ad0fe..6d719392cdbee 100644 | ||
5771 | --- a/sound/soc/codecs/wm8350.c | ||
5772 | +++ b/sound/soc/codecs/wm8350.c | ||
5773 | @@ -1536,18 +1536,38 @@ static int wm8350_codec_probe(struct snd_soc_codec *codec) | ||
5774 | wm8350_clear_bits(wm8350, WM8350_JACK_DETECT, | ||
5775 | WM8350_JDL_ENA | WM8350_JDR_ENA); | ||
5776 | |||
5777 | - wm8350_register_irq(wm8350, WM8350_IRQ_CODEC_JCK_DET_L, | ||
5778 | + ret = wm8350_register_irq(wm8350, WM8350_IRQ_CODEC_JCK_DET_L, | ||
5779 | wm8350_hpl_jack_handler, 0, "Left jack detect", | ||
5780 | priv); | ||
5781 | - wm8350_register_irq(wm8350, WM8350_IRQ_CODEC_JCK_DET_R, | ||
5782 | + if (ret != 0) | ||
5783 | + goto err; | ||
5784 | + | ||
5785 | + ret = wm8350_register_irq(wm8350, WM8350_IRQ_CODEC_JCK_DET_R, | ||
5786 | wm8350_hpr_jack_handler, 0, "Right jack detect", | ||
5787 | priv); | ||
5788 | - wm8350_register_irq(wm8350, WM8350_IRQ_CODEC_MICSCD, | ||
5789 | + if (ret != 0) | ||
5790 | + goto free_jck_det_l; | ||
5791 | + | ||
5792 | + ret = wm8350_register_irq(wm8350, WM8350_IRQ_CODEC_MICSCD, | ||
5793 | wm8350_mic_handler, 0, "Microphone short", priv); | ||
5794 | - wm8350_register_irq(wm8350, WM8350_IRQ_CODEC_MICD, | ||
5795 | + if (ret != 0) | ||
5796 | + goto free_jck_det_r; | ||
5797 | + | ||
5798 | + ret = wm8350_register_irq(wm8350, WM8350_IRQ_CODEC_MICD, | ||
5799 | wm8350_mic_handler, 0, "Microphone detect", priv); | ||
5800 | + if (ret != 0) | ||
5801 | + goto free_micscd; | ||
5802 | |||
5803 | return 0; | ||
5804 | + | ||
5805 | +free_micscd: | ||
5806 | + wm8350_free_irq(wm8350, WM8350_IRQ_CODEC_MICSCD, priv); | ||
5807 | +free_jck_det_r: | ||
5808 | + wm8350_free_irq(wm8350, WM8350_IRQ_CODEC_JCK_DET_R, priv); | ||
5809 | +free_jck_det_l: | ||
5810 | + wm8350_free_irq(wm8350, WM8350_IRQ_CODEC_JCK_DET_L, priv); | ||
5811 | +err: | ||
5812 | + return ret; | ||
5813 | } | ||
5814 | |||
5815 | static int wm8350_codec_remove(struct snd_soc_codec *codec) | ||
5816 | diff --git a/sound/soc/davinci/davinci-i2s.c b/sound/soc/davinci/davinci-i2s.c | ||
5817 | index 3849616519048..e5f61f1499c62 100644 | ||
5818 | --- a/sound/soc/davinci/davinci-i2s.c | ||
5819 | +++ b/sound/soc/davinci/davinci-i2s.c | ||
5820 | @@ -719,7 +719,9 @@ static int davinci_i2s_probe(struct platform_device *pdev) | ||
5821 | dev->clk = clk_get(&pdev->dev, NULL); | ||
5822 | if (IS_ERR(dev->clk)) | ||
5823 | return -ENODEV; | ||
5824 | - clk_enable(dev->clk); | ||
5825 | + ret = clk_enable(dev->clk); | ||
5826 | + if (ret) | ||
5827 | + goto err_put_clk; | ||
5828 | |||
5829 | dev->dev = &pdev->dev; | ||
5830 | dev_set_drvdata(&pdev->dev, dev); | ||
5831 | @@ -741,6 +743,7 @@ err_unregister_component: | ||
5832 | snd_soc_unregister_component(&pdev->dev); | ||
5833 | err_release_clk: | ||
5834 | clk_disable(dev->clk); | ||
5835 | +err_put_clk: | ||
5836 | clk_put(dev->clk); | ||
5837 | return ret; | ||
5838 | } | ||
5839 | diff --git a/sound/soc/fsl/imx-es8328.c b/sound/soc/fsl/imx-es8328.c | ||
5840 | index 20e7400e2611e..5942f99019382 100644 | ||
5841 | --- a/sound/soc/fsl/imx-es8328.c | ||
5842 | +++ b/sound/soc/fsl/imx-es8328.c | ||
5843 | @@ -93,6 +93,7 @@ static int imx_es8328_probe(struct platform_device *pdev) | ||
5844 | if (int_port > MUX_PORT_MAX || int_port == 0) { | ||
5845 | dev_err(dev, "mux-int-port: hardware only has %d mux ports\n", | ||
5846 | MUX_PORT_MAX); | ||
5847 | + ret = -EINVAL; | ||
5848 | goto fail; | ||
5849 | } | ||
5850 | |||
5851 | diff --git a/sound/soc/mxs/mxs-saif.c b/sound/soc/mxs/mxs-saif.c | ||
5852 | index 13631003cb7c6..5977a2011d9e6 100644 | ||
5853 | --- a/sound/soc/mxs/mxs-saif.c | ||
5854 | +++ b/sound/soc/mxs/mxs-saif.c | ||
5855 | @@ -442,7 +442,10 @@ static int mxs_saif_hw_params(struct snd_pcm_substream *substream, | ||
5856 | * basic clock which should be fast enough for the internal | ||
5857 | * logic. | ||
5858 | */ | ||
5859 | - clk_enable(saif->clk); | ||
5860 | + ret = clk_enable(saif->clk); | ||
5861 | + if (ret) | ||
5862 | + return ret; | ||
5863 | + | ||
5864 | ret = clk_set_rate(saif->clk, 24000000); | ||
5865 | clk_disable(saif->clk); | ||
5866 | if (ret) | ||
5867 | diff --git a/sound/soc/mxs/mxs-sgtl5000.c b/sound/soc/mxs/mxs-sgtl5000.c | ||
5868 | index 2b23ffbac6b12..e8aa93a654e7e 100644 | ||
5869 | --- a/sound/soc/mxs/mxs-sgtl5000.c | ||
5870 | +++ b/sound/soc/mxs/mxs-sgtl5000.c | ||
5871 | @@ -112,6 +112,9 @@ static int mxs_sgtl5000_probe(struct platform_device *pdev) | ||
5872 | codec_np = of_parse_phandle(np, "audio-codec", 0); | ||
5873 | if (!saif_np[0] || !saif_np[1] || !codec_np) { | ||
5874 | dev_err(&pdev->dev, "phandle missing or invalid\n"); | ||
5875 | + of_node_put(codec_np); | ||
5876 | + of_node_put(saif_np[0]); | ||
5877 | + of_node_put(saif_np[1]); | ||
5878 | return -EINVAL; | ||
5879 | } | ||
5880 | |||
5881 | diff --git a/sound/soc/sh/fsi.c b/sound/soc/sh/fsi.c | ||
5882 | index ead520182e268..29be452852746 100644 | ||
5883 | --- a/sound/soc/sh/fsi.c | ||
5884 | +++ b/sound/soc/sh/fsi.c | ||
5885 | @@ -821,14 +821,27 @@ static int fsi_clk_enable(struct device *dev, | ||
5886 | return ret; | ||
5887 | } | ||
5888 | |||
5889 | - clk_enable(clock->xck); | ||
5890 | - clk_enable(clock->ick); | ||
5891 | - clk_enable(clock->div); | ||
5892 | + ret = clk_enable(clock->xck); | ||
5893 | + if (ret) | ||
5894 | + goto err; | ||
5895 | + ret = clk_enable(clock->ick); | ||
5896 | + if (ret) | ||
5897 | + goto disable_xck; | ||
5898 | + ret = clk_enable(clock->div); | ||
5899 | + if (ret) | ||
5900 | + goto disable_ick; | ||
5901 | |||
5902 | clock->count++; | ||
5903 | } | ||
5904 | |||
5905 | return ret; | ||
5906 | + | ||
5907 | +disable_ick: | ||
5908 | + clk_disable(clock->ick); | ||
5909 | +disable_xck: | ||
5910 | + clk_disable(clock->xck); | ||
5911 | +err: | ||
5912 | + return ret; | ||
5913 | } | ||
5914 | |||
5915 | static int fsi_clk_disable(struct device *dev, | ||
5916 | diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c | ||
5917 | index 0344d44231675..81c3aa1670382 100644 | ||
5918 | --- a/sound/soc/soc-core.c | ||
5919 | +++ b/sound/soc/soc-core.c | ||
5920 | @@ -3799,7 +3799,7 @@ static int snd_soc_get_dai_name(struct of_phandle_args *args, | ||
5921 | if (!component_of_node && pos->dev->parent) | ||
5922 | component_of_node = pos->dev->parent->of_node; | ||
5923 | |||
5924 | - if (component_of_node != args->np) | ||
5925 | + if (component_of_node != args->np || !pos->num_dai) | ||
5926 | continue; | ||
5927 | |||
5928 | if (pos->driver->of_xlate_dai_name) { | ||
5929 | diff --git a/sound/soc/soc-generic-dmaengine-pcm.c b/sound/soc/soc-generic-dmaengine-pcm.c | ||
5930 | index 67d22b4baeb05..61f0c9d6f6dce 100644 | ||
5931 | --- a/sound/soc/soc-generic-dmaengine-pcm.c | ||
5932 | +++ b/sound/soc/soc-generic-dmaengine-pcm.c | ||
5933 | @@ -98,10 +98,10 @@ static int dmaengine_pcm_hw_params(struct snd_pcm_substream *substream, | ||
5934 | |||
5935 | memset(&slave_config, 0, sizeof(slave_config)); | ||
5936 | |||
5937 | - if (!pcm->config) | ||
5938 | - prepare_slave_config = snd_dmaengine_pcm_prepare_slave_config; | ||
5939 | - else | ||
5940 | + if (pcm->config && pcm->config->prepare_slave_config) | ||
5941 | prepare_slave_config = pcm->config->prepare_slave_config; | ||
5942 | + else | ||
5943 | + prepare_slave_config = snd_dmaengine_pcm_prepare_slave_config; | ||
5944 | |||
5945 | if (prepare_slave_config) { | ||
5946 | ret = prepare_slave_config(substream, params, &slave_config); | ||
5947 | diff --git a/sound/soc/soc-topology.c b/sound/soc/soc-topology.c | ||
5948 | index 6274a50026473..7528f0d4bddff 100644 | ||
5949 | --- a/sound/soc/soc-topology.c | ||
5950 | +++ b/sound/soc/soc-topology.c | ||
5951 | @@ -507,7 +507,8 @@ static int soc_tplg_kcontrol_bind_io(struct snd_soc_tplg_ctl_hdr *hdr, | ||
5952 | |||
5953 | if (hdr->ops.info == SND_SOC_TPLG_CTL_BYTES | ||
5954 | && k->iface & SNDRV_CTL_ELEM_IFACE_MIXER | ||
5955 | - && k->access & SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE | ||
5956 | + && (k->access & SNDRV_CTL_ELEM_ACCESS_TLV_READ | ||
5957 | + || k->access & SNDRV_CTL_ELEM_ACCESS_TLV_WRITE) | ||
5958 | && k->access & SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK) { | ||
5959 | struct soc_bytes_ext *sbe; | ||
5960 | struct snd_soc_tplg_bytes_control *be; | ||
5961 | diff --git a/sound/spi/at73c213.c b/sound/spi/at73c213.c | ||
5962 | index fac7e6eb9529c..671b4516d9303 100644 | ||
5963 | --- a/sound/spi/at73c213.c | ||
5964 | +++ b/sound/spi/at73c213.c | ||
5965 | @@ -221,7 +221,9 @@ static int snd_at73c213_pcm_open(struct snd_pcm_substream *substream) | ||
5966 | runtime->hw = snd_at73c213_playback_hw; | ||
5967 | chip->substream = substream; | ||
5968 | |||
5969 | - clk_enable(chip->ssc->clk); | ||
5970 | + err = clk_enable(chip->ssc->clk); | ||
5971 | + if (err) | ||
5972 | + return err; | ||
5973 | |||
5974 | return 0; | ||
5975 | } | ||
5976 | @@ -787,7 +789,9 @@ static int snd_at73c213_chip_init(struct snd_at73c213 *chip) | ||
5977 | goto out; | ||
5978 | |||
5979 | /* Enable DAC master clock. */ | ||
5980 | - clk_enable(chip->board->dac_clk); | ||
5981 | + retval = clk_enable(chip->board->dac_clk); | ||
5982 | + if (retval) | ||
5983 | + goto out; | ||
5984 | |||
5985 | /* Initialize at73c213 on SPI bus. */ | ||
5986 | retval = snd_at73c213_write_reg(chip, DAC_RST, 0x04); | ||
5987 | @@ -900,7 +904,9 @@ static int snd_at73c213_dev_init(struct snd_card *card, | ||
5988 | chip->card = card; | ||
5989 | chip->irq = -1; | ||
5990 | |||
5991 | - clk_enable(chip->ssc->clk); | ||
5992 | + retval = clk_enable(chip->ssc->clk); | ||
5993 | + if (retval) | ||
5994 | + return retval; | ||
5995 | |||
5996 | retval = request_irq(irq, snd_at73c213_interrupt, 0, "at73c213", chip); | ||
5997 | if (retval) { | ||
5998 | @@ -1019,7 +1025,9 @@ static int snd_at73c213_remove(struct spi_device *spi) | ||
5999 | int retval; | ||
6000 | |||
6001 | /* Stop playback. */ | ||
6002 | - clk_enable(chip->ssc->clk); | ||
6003 | + retval = clk_enable(chip->ssc->clk); | ||
6004 | + if (retval) | ||
6005 | + goto out; | ||
6006 | ssc_writel(chip->ssc->regs, CR, SSC_BIT(CR_TXDIS)); | ||
6007 | clk_disable(chip->ssc->clk); | ||
6008 | |||
6009 | @@ -1099,9 +1107,16 @@ static int snd_at73c213_resume(struct device *dev) | ||
6010 | { | ||
6011 | struct snd_card *card = dev_get_drvdata(dev); | ||
6012 | struct snd_at73c213 *chip = card->private_data; | ||
6013 | + int retval; | ||
6014 | |||
6015 | - clk_enable(chip->board->dac_clk); | ||
6016 | - clk_enable(chip->ssc->clk); | ||
6017 | + retval = clk_enable(chip->board->dac_clk); | ||
6018 | + if (retval) | ||
6019 | + return retval; | ||
6020 | + retval = clk_enable(chip->ssc->clk); | ||
6021 | + if (retval) { | ||
6022 | + clk_disable(chip->board->dac_clk); | ||
6023 | + return retval; | ||
6024 | + } | ||
6025 | ssc_writel(chip->ssc->regs, CR, SSC_BIT(CR_TXEN)); | ||
6026 | |||
6027 | return 0; | ||
6028 | diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile | ||
6029 | index ac9c477a2a485..46af3bb561422 100644 | ||
6030 | --- a/tools/build/feature/Makefile | ||
6031 | +++ b/tools/build/feature/Makefile | ||
6032 | @@ -162,7 +162,7 @@ strip-libs = $(filter-out -l%,$(1)) | ||
6033 | PERL_EMBED_LDOPTS = $(shell perl -MExtUtils::Embed -e ldopts 2>/dev/null) | ||
6034 | PERL_EMBED_LDFLAGS = $(call strip-libs,$(PERL_EMBED_LDOPTS)) | ||
6035 | PERL_EMBED_LIBADD = $(call grep-libs,$(PERL_EMBED_LDOPTS)) | ||
6036 | -PERL_EMBED_CCOPTS = `perl -MExtUtils::Embed -e ccopts 2>/dev/null` | ||
6037 | +PERL_EMBED_CCOPTS = $(shell perl -MExtUtils::Embed -e ccopts 2>/dev/null) | ||
6038 | FLAGS_PERL_EMBED=$(PERL_EMBED_CCOPTS) $(PERL_EMBED_LDOPTS) | ||
6039 | |||
6040 | $(OUTPUT)test-libperl.bin: | ||
6041 | diff --git a/tools/testing/selftests/x86/check_cc.sh b/tools/testing/selftests/x86/check_cc.sh | ||
6042 | index 172d3293fb7be..356689c563975 100755 | ||
6043 | --- a/tools/testing/selftests/x86/check_cc.sh | ||
6044 | +++ b/tools/testing/selftests/x86/check_cc.sh | ||
6045 | @@ -7,7 +7,7 @@ CC="$1" | ||
6046 | TESTPROG="$2" | ||
6047 | shift 2 | ||
6048 | |||
6049 | -if "$CC" -o /dev/null "$TESTPROG" -O0 "$@" 2>/dev/null; then | ||
6050 | +if [ -n "$CC" ] && $CC -o /dev/null "$TESTPROG" -O0 "$@" 2>/dev/null; then | ||
6051 | echo 1 | ||
6052 | else | ||
6053 | echo 0 | ||
6054 | diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c | ||
6055 | index d9b7001227e3c..d251b718bf53f 100644 | ||
6056 | --- a/virt/kvm/kvm_main.c | ||
6057 | +++ b/virt/kvm/kvm_main.c | ||
6058 | @@ -107,6 +107,8 @@ EXPORT_SYMBOL_GPL(kvm_debugfs_dir); | ||
6059 | static int kvm_debugfs_num_entries; | ||
6060 | static const struct file_operations *stat_fops_per_vm[]; | ||
6061 | |||
6062 | +static struct file_operations kvm_chardev_ops; | ||
6063 | + | ||
6064 | static long kvm_vcpu_ioctl(struct file *file, unsigned int ioctl, | ||
6065 | unsigned long arg); | ||
6066 | #ifdef CONFIG_KVM_COMPAT | ||
6067 | @@ -714,6 +716,16 @@ static struct kvm *kvm_create_vm(unsigned long type) | ||
6068 | |||
6069 | preempt_notifier_inc(); | ||
6070 | |||
6071 | + /* | ||
6072 | + * When the fd passed to this ioctl() is opened it pins the module, | ||
6073 | + * but try_module_get() also prevents getting a reference if the module | ||
6074 | + * is in MODULE_STATE_GOING (e.g. if someone ran "rmmod --wait"). | ||
6075 | + */ | ||
6076 | + if (!try_module_get(kvm_chardev_ops.owner)) { | ||
6077 | + r = -ENODEV; | ||
6078 | + goto out_err; | ||
6079 | + } | ||
6080 | + | ||
6081 | return kvm; | ||
6082 | |||
6083 | out_err: | ||
6084 | @@ -798,6 +810,7 @@ static void kvm_destroy_vm(struct kvm *kvm) | ||
6085 | preempt_notifier_dec(); | ||
6086 | hardware_disable_all(); | ||
6087 | mmdrop(mm); | ||
6088 | + module_put(kvm_chardev_ops.owner); | ||
6089 | } | ||
6090 | |||
6091 | void kvm_get_kvm(struct kvm *kvm) |