Contents of /trunk/kernel-alx-legacy/patches-4.9/0183-4.9.84-all-fixes.patch
Parent Directory | Revision Log
Revision 3608 -
(show annotations)
(download)
Fri Aug 14 07:34:29 2020 UTC (4 years, 1 month ago) by niro
File size: 171141 byte(s)
Fri Aug 14 07:34:29 2020 UTC (4 years, 1 month ago) by niro
File size: 171141 byte(s)
-added kerenl-alx-legacy pkg
1 | diff --git a/Makefile b/Makefile |
2 | index cfae9b823d2b..db13b13cdcc2 100644 |
3 | --- a/Makefile |
4 | +++ b/Makefile |
5 | @@ -1,6 +1,6 @@ |
6 | VERSION = 4 |
7 | PATCHLEVEL = 9 |
8 | -SUBLEVEL = 83 |
9 | +SUBLEVEL = 84 |
10 | EXTRAVERSION = |
11 | NAME = Roaring Lionus |
12 | |
13 | @@ -87,10 +87,12 @@ endif |
14 | ifneq ($(filter 4.%,$(MAKE_VERSION)),) # make-4 |
15 | ifneq ($(filter %s ,$(firstword x$(MAKEFLAGS))),) |
16 | quiet=silent_ |
17 | + tools_silent=s |
18 | endif |
19 | else # make-3.8x |
20 | ifneq ($(filter s% -s%,$(MAKEFLAGS)),) |
21 | quiet=silent_ |
22 | + tools_silent=-s |
23 | endif |
24 | endif |
25 | |
26 | @@ -1614,11 +1616,11 @@ image_name: |
27 | # Clear a bunch of variables before executing the submake |
28 | tools/: FORCE |
29 | $(Q)mkdir -p $(objtree)/tools |
30 | - $(Q)$(MAKE) LDFLAGS= MAKEFLAGS="$(filter --j% -j,$(MAKEFLAGS))" O=$(shell cd $(objtree) && /bin/pwd) subdir=tools -C $(src)/tools/ |
31 | + $(Q)$(MAKE) LDFLAGS= MAKEFLAGS="$(tools_silent) $(filter --j% -j,$(MAKEFLAGS))" O=$(shell cd $(objtree) && /bin/pwd) subdir=tools -C $(src)/tools/ |
32 | |
33 | tools/%: FORCE |
34 | $(Q)mkdir -p $(objtree)/tools |
35 | - $(Q)$(MAKE) LDFLAGS= MAKEFLAGS="$(filter --j% -j,$(MAKEFLAGS))" O=$(shell cd $(objtree) && /bin/pwd) subdir=tools -C $(src)/tools/ $* |
36 | + $(Q)$(MAKE) LDFLAGS= MAKEFLAGS="$(tools_silent) $(filter --j% -j,$(MAKEFLAGS))" O=$(shell cd $(objtree) && /bin/pwd) subdir=tools -C $(src)/tools/ $* |
37 | |
38 | # Single targets |
39 | # --------------------------------------------------------------------------- |
40 | diff --git a/arch/arm/boot/dts/am4372.dtsi b/arch/arm/boot/dts/am4372.dtsi |
41 | index a20a71d9d22e..c9c9a47446e8 100644 |
42 | --- a/arch/arm/boot/dts/am4372.dtsi |
43 | +++ b/arch/arm/boot/dts/am4372.dtsi |
44 | @@ -926,7 +926,8 @@ |
45 | reg = <0x48038000 0x2000>, |
46 | <0x46000000 0x400000>; |
47 | reg-names = "mpu", "dat"; |
48 | - interrupts = <80>, <81>; |
49 | + interrupts = <GIC_SPI 80 IRQ_TYPE_LEVEL_HIGH>, |
50 | + <GIC_SPI 81 IRQ_TYPE_LEVEL_HIGH>; |
51 | interrupt-names = "tx", "rx"; |
52 | status = "disabled"; |
53 | dmas = <&edma 8 2>, |
54 | @@ -940,7 +941,8 @@ |
55 | reg = <0x4803C000 0x2000>, |
56 | <0x46400000 0x400000>; |
57 | reg-names = "mpu", "dat"; |
58 | - interrupts = <82>, <83>; |
59 | + interrupts = <GIC_SPI 82 IRQ_TYPE_LEVEL_HIGH>, |
60 | + <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>; |
61 | interrupt-names = "tx", "rx"; |
62 | status = "disabled"; |
63 | dmas = <&edma 10 2>, |
64 | diff --git a/arch/arm/boot/dts/am437x-cm-t43.dts b/arch/arm/boot/dts/am437x-cm-t43.dts |
65 | index 9e92d480576b..3b9a94c274a7 100644 |
66 | --- a/arch/arm/boot/dts/am437x-cm-t43.dts |
67 | +++ b/arch/arm/boot/dts/am437x-cm-t43.dts |
68 | @@ -301,8 +301,8 @@ |
69 | status = "okay"; |
70 | pinctrl-names = "default"; |
71 | pinctrl-0 = <&spi0_pins>; |
72 | - dmas = <&edma 16 |
73 | - &edma 17>; |
74 | + dmas = <&edma 16 0 |
75 | + &edma 17 0>; |
76 | dma-names = "tx0", "rx0"; |
77 | |
78 | flash: w25q64cvzpig@0 { |
79 | diff --git a/arch/arm/boot/dts/logicpd-som-lv-37xx-devkit.dts b/arch/arm/boot/dts/logicpd-som-lv-37xx-devkit.dts |
80 | index 38faa90007d7..2fa5eb4bd402 100644 |
81 | --- a/arch/arm/boot/dts/logicpd-som-lv-37xx-devkit.dts |
82 | +++ b/arch/arm/boot/dts/logicpd-som-lv-37xx-devkit.dts |
83 | @@ -72,7 +72,8 @@ |
84 | }; |
85 | |
86 | &gpmc { |
87 | - ranges = <1 0 0x08000000 0x1000000>; /* CS1: 16MB for LAN9221 */ |
88 | + ranges = <0 0 0x30000000 0x1000000 /* CS0: 16MB for NAND */ |
89 | + 1 0 0x2c000000 0x1000000>; /* CS1: 16MB for LAN9221 */ |
90 | |
91 | ethernet@gpmc { |
92 | pinctrl-names = "default"; |
93 | diff --git a/arch/arm/boot/dts/logicpd-som-lv.dtsi b/arch/arm/boot/dts/logicpd-som-lv.dtsi |
94 | index 26cce4d18405..4f2c5ec75714 100644 |
95 | --- a/arch/arm/boot/dts/logicpd-som-lv.dtsi |
96 | +++ b/arch/arm/boot/dts/logicpd-som-lv.dtsi |
97 | @@ -37,7 +37,7 @@ |
98 | }; |
99 | |
100 | &gpmc { |
101 | - ranges = <0 0 0x00000000 0x1000000>; /* CS0: 16MB for NAND */ |
102 | + ranges = <0 0 0x30000000 0x1000000>; /* CS0: 16MB for NAND */ |
103 | |
104 | nand@0,0 { |
105 | compatible = "ti,omap2-nand"; |
106 | @@ -121,7 +121,7 @@ |
107 | |
108 | &mmc3 { |
109 | interrupts-extended = <&intc 94 &omap3_pmx_core2 0x46>; |
110 | - pinctrl-0 = <&mmc3_pins>; |
111 | + pinctrl-0 = <&mmc3_pins &wl127x_gpio>; |
112 | pinctrl-names = "default"; |
113 | vmmc-supply = <&wl12xx_vmmc>; |
114 | non-removable; |
115 | @@ -132,8 +132,8 @@ |
116 | wlcore: wlcore@2 { |
117 | compatible = "ti,wl1273"; |
118 | reg = <2>; |
119 | - interrupt-parent = <&gpio5>; |
120 | - interrupts = <24 IRQ_TYPE_LEVEL_HIGH>; /* gpio 152 */ |
121 | + interrupt-parent = <&gpio1>; |
122 | + interrupts = <2 IRQ_TYPE_LEVEL_HIGH>; /* gpio 2 */ |
123 | ref-clock-frequency = <26000000>; |
124 | }; |
125 | }; |
126 | @@ -157,8 +157,6 @@ |
127 | OMAP3_CORE1_IOPAD(0x2166, PIN_INPUT_PULLUP | MUX_MODE3) /* sdmmc2_dat5.sdmmc3_dat1 */ |
128 | OMAP3_CORE1_IOPAD(0x2168, PIN_INPUT_PULLUP | MUX_MODE3) /* sdmmc2_dat6.sdmmc3_dat2 */ |
129 | OMAP3_CORE1_IOPAD(0x216a, PIN_INPUT_PULLUP | MUX_MODE3) /* sdmmc2_dat6.sdmmc3_dat3 */ |
130 | - OMAP3_CORE1_IOPAD(0x2184, PIN_INPUT_PULLUP | MUX_MODE4) /* mcbsp4_clkx.gpio_152 */ |
131 | - OMAP3_CORE1_IOPAD(0x2a0c, PIN_OUTPUT | MUX_MODE4) /* sys_boot1.gpio_3 */ |
132 | OMAP3_CORE1_IOPAD(0x21d0, PIN_INPUT_PULLUP | MUX_MODE3) /* mcspi1_cs1.sdmmc3_cmd */ |
133 | OMAP3_CORE1_IOPAD(0x21d2, PIN_INPUT_PULLUP | MUX_MODE3) /* mcspi1_cs2.sdmmc_clk */ |
134 | >; |
135 | @@ -228,6 +226,12 @@ |
136 | OMAP3_WKUP_IOPAD(0x2a0e, PIN_OUTPUT | MUX_MODE4) /* sys_boot2.gpio_4 */ |
137 | >; |
138 | }; |
139 | + wl127x_gpio: pinmux_wl127x_gpio_pin { |
140 | + pinctrl-single,pins = < |
141 | + OMAP3_WKUP_IOPAD(0x2a0c, PIN_INPUT | MUX_MODE4) /* sys_boot0.gpio_2 */ |
142 | + OMAP3_WKUP_IOPAD(0x2a0c, PIN_OUTPUT | MUX_MODE4) /* sys_boot1.gpio_3 */ |
143 | + >; |
144 | + }; |
145 | }; |
146 | |
147 | &omap3_pmx_core2 { |
148 | diff --git a/arch/arm/boot/dts/omap4.dtsi b/arch/arm/boot/dts/omap4.dtsi |
149 | index 9c289ddab3df..4d6584f15b17 100644 |
150 | --- a/arch/arm/boot/dts/omap4.dtsi |
151 | +++ b/arch/arm/boot/dts/omap4.dtsi |
152 | @@ -352,7 +352,7 @@ |
153 | elm: elm@48078000 { |
154 | compatible = "ti,am3352-elm"; |
155 | reg = <0x48078000 0x2000>; |
156 | - interrupts = <4>; |
157 | + interrupts = <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>; |
158 | ti,hwmods = "elm"; |
159 | status = "disabled"; |
160 | }; |
161 | @@ -859,14 +859,12 @@ |
162 | usbhsohci: ohci@4a064800 { |
163 | compatible = "ti,ohci-omap3"; |
164 | reg = <0x4a064800 0x400>; |
165 | - interrupt-parent = <&gic>; |
166 | interrupts = <GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>; |
167 | }; |
168 | |
169 | usbhsehci: ehci@4a064c00 { |
170 | compatible = "ti,ehci-omap"; |
171 | reg = <0x4a064c00 0x400>; |
172 | - interrupt-parent = <&gic>; |
173 | interrupts = <GIC_SPI 77 IRQ_TYPE_LEVEL_HIGH>; |
174 | }; |
175 | }; |
176 | diff --git a/arch/arm/common/bL_switcher_dummy_if.c b/arch/arm/common/bL_switcher_dummy_if.c |
177 | index 6053f64c3752..94133e33943c 100644 |
178 | --- a/arch/arm/common/bL_switcher_dummy_if.c |
179 | +++ b/arch/arm/common/bL_switcher_dummy_if.c |
180 | @@ -57,3 +57,7 @@ static struct miscdevice bL_switcher_device = { |
181 | &bL_switcher_fops |
182 | }; |
183 | module_misc_device(bL_switcher_device); |
184 | + |
185 | +MODULE_AUTHOR("Nicolas Pitre <nico@linaro.org>"); |
186 | +MODULE_LICENSE("GPL v2"); |
187 | +MODULE_DESCRIPTION("big.LITTLE switcher dummy user interface"); |
188 | diff --git a/arch/arm/mach-omap2/omap-secure.c b/arch/arm/mach-omap2/omap-secure.c |
189 | index 5ac122e88f67..9ff92050053c 100644 |
190 | --- a/arch/arm/mach-omap2/omap-secure.c |
191 | +++ b/arch/arm/mach-omap2/omap-secure.c |
192 | @@ -73,6 +73,25 @@ phys_addr_t omap_secure_ram_mempool_base(void) |
193 | return omap_secure_memblock_base; |
194 | } |
195 | |
196 | +u32 omap3_save_secure_ram(void __iomem *addr, int size) |
197 | +{ |
198 | + u32 ret; |
199 | + u32 param[5]; |
200 | + |
201 | + if (size != OMAP3_SAVE_SECURE_RAM_SZ) |
202 | + return OMAP3_SAVE_SECURE_RAM_SZ; |
203 | + |
204 | + param[0] = 4; /* Number of arguments */ |
205 | + param[1] = __pa(addr); /* Physical address for saving */ |
206 | + param[2] = 0; |
207 | + param[3] = 1; |
208 | + param[4] = 1; |
209 | + |
210 | + ret = save_secure_ram_context(__pa(param)); |
211 | + |
212 | + return ret; |
213 | +} |
214 | + |
215 | /** |
216 | * rx51_secure_dispatcher: Routine to dispatch secure PPA API calls |
217 | * @idx: The PPA API index |
218 | diff --git a/arch/arm/mach-omap2/omap-secure.h b/arch/arm/mach-omap2/omap-secure.h |
219 | index bae263fba640..c509cde71f93 100644 |
220 | --- a/arch/arm/mach-omap2/omap-secure.h |
221 | +++ b/arch/arm/mach-omap2/omap-secure.h |
222 | @@ -31,6 +31,8 @@ |
223 | /* Maximum Secure memory storage size */ |
224 | #define OMAP_SECURE_RAM_STORAGE (88 * SZ_1K) |
225 | |
226 | +#define OMAP3_SAVE_SECURE_RAM_SZ 0x803F |
227 | + |
228 | /* Secure low power HAL API index */ |
229 | #define OMAP4_HAL_SAVESECURERAM_INDEX 0x1a |
230 | #define OMAP4_HAL_SAVEHW_INDEX 0x1b |
231 | @@ -65,6 +67,8 @@ extern u32 omap_smc2(u32 id, u32 falg, u32 pargs); |
232 | extern u32 omap_smc3(u32 id, u32 process, u32 flag, u32 pargs); |
233 | extern phys_addr_t omap_secure_ram_mempool_base(void); |
234 | extern int omap_secure_ram_reserve_memblock(void); |
235 | +extern u32 save_secure_ram_context(u32 args_pa); |
236 | +extern u32 omap3_save_secure_ram(void __iomem *save_regs, int size); |
237 | |
238 | extern u32 rx51_secure_dispatcher(u32 idx, u32 process, u32 flag, u32 nargs, |
239 | u32 arg1, u32 arg2, u32 arg3, u32 arg4); |
240 | diff --git a/arch/arm/mach-omap2/pm.h b/arch/arm/mach-omap2/pm.h |
241 | index b668719b9b25..8e30772cfe32 100644 |
242 | --- a/arch/arm/mach-omap2/pm.h |
243 | +++ b/arch/arm/mach-omap2/pm.h |
244 | @@ -81,10 +81,6 @@ extern unsigned int omap3_do_wfi_sz; |
245 | /* ... and its pointer from SRAM after copy */ |
246 | extern void (*omap3_do_wfi_sram)(void); |
247 | |
248 | -/* save_secure_ram_context function pointer and size, for copy to SRAM */ |
249 | -extern int save_secure_ram_context(u32 *addr); |
250 | -extern unsigned int save_secure_ram_context_sz; |
251 | - |
252 | extern void omap3_save_scratchpad_contents(void); |
253 | |
254 | #define PM_RTA_ERRATUM_i608 (1 << 0) |
255 | diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c |
256 | index d44e0e2f1106..3836958074ac 100644 |
257 | --- a/arch/arm/mach-omap2/pm34xx.c |
258 | +++ b/arch/arm/mach-omap2/pm34xx.c |
259 | @@ -48,6 +48,7 @@ |
260 | #include "prm3xxx.h" |
261 | #include "pm.h" |
262 | #include "sdrc.h" |
263 | +#include "omap-secure.h" |
264 | #include "sram.h" |
265 | #include "control.h" |
266 | #include "vc.h" |
267 | @@ -66,7 +67,6 @@ struct power_state { |
268 | |
269 | static LIST_HEAD(pwrst_list); |
270 | |
271 | -static int (*_omap_save_secure_sram)(u32 *addr); |
272 | void (*omap3_do_wfi_sram)(void); |
273 | |
274 | static struct powerdomain *mpu_pwrdm, *neon_pwrdm; |
275 | @@ -121,8 +121,8 @@ static void omap3_save_secure_ram_context(void) |
276 | * will hang the system. |
277 | */ |
278 | pwrdm_set_next_pwrst(mpu_pwrdm, PWRDM_POWER_ON); |
279 | - ret = _omap_save_secure_sram((u32 *)(unsigned long) |
280 | - __pa(omap3_secure_ram_storage)); |
281 | + ret = omap3_save_secure_ram(omap3_secure_ram_storage, |
282 | + OMAP3_SAVE_SECURE_RAM_SZ); |
283 | pwrdm_set_next_pwrst(mpu_pwrdm, mpu_next_state); |
284 | /* Following is for error tracking, it should not happen */ |
285 | if (ret) { |
286 | @@ -434,15 +434,10 @@ static int __init pwrdms_setup(struct powerdomain *pwrdm, void *unused) |
287 | * |
288 | * The minimum set of functions is pushed to SRAM for execution: |
289 | * - omap3_do_wfi for erratum i581 WA, |
290 | - * - save_secure_ram_context for security extensions. |
291 | */ |
292 | void omap_push_sram_idle(void) |
293 | { |
294 | omap3_do_wfi_sram = omap_sram_push(omap3_do_wfi, omap3_do_wfi_sz); |
295 | - |
296 | - if (omap_type() != OMAP2_DEVICE_TYPE_GP) |
297 | - _omap_save_secure_sram = omap_sram_push(save_secure_ram_context, |
298 | - save_secure_ram_context_sz); |
299 | } |
300 | |
301 | static void __init pm_errata_configure(void) |
302 | @@ -554,7 +549,7 @@ int __init omap3_pm_init(void) |
303 | clkdm_add_wkdep(neon_clkdm, mpu_clkdm); |
304 | if (omap_type() != OMAP2_DEVICE_TYPE_GP) { |
305 | omap3_secure_ram_storage = |
306 | - kmalloc(0x803F, GFP_KERNEL); |
307 | + kmalloc(OMAP3_SAVE_SECURE_RAM_SZ, GFP_KERNEL); |
308 | if (!omap3_secure_ram_storage) |
309 | pr_err("Memory allocation failed when allocating for secure sram context\n"); |
310 | |
311 | diff --git a/arch/arm/mach-omap2/prm33xx.c b/arch/arm/mach-omap2/prm33xx.c |
312 | index dcb5001d77da..973bcd754e1c 100644 |
313 | --- a/arch/arm/mach-omap2/prm33xx.c |
314 | +++ b/arch/arm/mach-omap2/prm33xx.c |
315 | @@ -176,17 +176,6 @@ static int am33xx_pwrdm_read_pwrst(struct powerdomain *pwrdm) |
316 | return v; |
317 | } |
318 | |
319 | -static int am33xx_pwrdm_read_prev_pwrst(struct powerdomain *pwrdm) |
320 | -{ |
321 | - u32 v; |
322 | - |
323 | - v = am33xx_prm_read_reg(pwrdm->prcm_offs, pwrdm->pwrstst_offs); |
324 | - v &= AM33XX_LASTPOWERSTATEENTERED_MASK; |
325 | - v >>= AM33XX_LASTPOWERSTATEENTERED_SHIFT; |
326 | - |
327 | - return v; |
328 | -} |
329 | - |
330 | static int am33xx_pwrdm_set_lowpwrstchange(struct powerdomain *pwrdm) |
331 | { |
332 | am33xx_prm_rmw_reg_bits(AM33XX_LOWPOWERSTATECHANGE_MASK, |
333 | @@ -357,7 +346,6 @@ struct pwrdm_ops am33xx_pwrdm_operations = { |
334 | .pwrdm_set_next_pwrst = am33xx_pwrdm_set_next_pwrst, |
335 | .pwrdm_read_next_pwrst = am33xx_pwrdm_read_next_pwrst, |
336 | .pwrdm_read_pwrst = am33xx_pwrdm_read_pwrst, |
337 | - .pwrdm_read_prev_pwrst = am33xx_pwrdm_read_prev_pwrst, |
338 | .pwrdm_set_logic_retst = am33xx_pwrdm_set_logic_retst, |
339 | .pwrdm_read_logic_pwrst = am33xx_pwrdm_read_logic_pwrst, |
340 | .pwrdm_read_logic_retst = am33xx_pwrdm_read_logic_retst, |
341 | diff --git a/arch/arm/mach-omap2/sleep34xx.S b/arch/arm/mach-omap2/sleep34xx.S |
342 | index 1b9f0520dea9..3e0d802c59da 100644 |
343 | --- a/arch/arm/mach-omap2/sleep34xx.S |
344 | +++ b/arch/arm/mach-omap2/sleep34xx.S |
345 | @@ -93,20 +93,13 @@ ENTRY(enable_omap3630_toggle_l2_on_restore) |
346 | ENDPROC(enable_omap3630_toggle_l2_on_restore) |
347 | |
348 | /* |
349 | - * Function to call rom code to save secure ram context. This gets |
350 | - * relocated to SRAM, so it can be all in .data section. Otherwise |
351 | - * we need to initialize api_params separately. |
352 | + * Function to call rom code to save secure ram context. |
353 | + * |
354 | + * r0 = physical address of the parameters |
355 | */ |
356 | - .data |
357 | - .align 3 |
358 | ENTRY(save_secure_ram_context) |
359 | stmfd sp!, {r4 - r11, lr} @ save registers on stack |
360 | - adr r3, api_params @ r3 points to parameters |
361 | - str r0, [r3,#0x4] @ r0 has sdram address |
362 | - ldr r12, high_mask |
363 | - and r3, r3, r12 |
364 | - ldr r12, sram_phy_addr_mask |
365 | - orr r3, r3, r12 |
366 | + mov r3, r0 @ physical address of parameters |
367 | mov r0, #25 @ set service ID for PPA |
368 | mov r12, r0 @ copy secure service ID in r12 |
369 | mov r1, #0 @ set task id for ROM code in r1 |
370 | @@ -120,18 +113,7 @@ ENTRY(save_secure_ram_context) |
371 | nop |
372 | nop |
373 | ldmfd sp!, {r4 - r11, pc} |
374 | - .align |
375 | -sram_phy_addr_mask: |
376 | - .word SRAM_BASE_P |
377 | -high_mask: |
378 | - .word 0xffff |
379 | -api_params: |
380 | - .word 0x4, 0x0, 0x0, 0x1, 0x1 |
381 | ENDPROC(save_secure_ram_context) |
382 | -ENTRY(save_secure_ram_context_sz) |
383 | - .word . - save_secure_ram_context |
384 | - |
385 | - .text |
386 | |
387 | /* |
388 | * ====================== |
389 | diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig |
390 | index cf57a7799a0f..7769c2e27788 100644 |
391 | --- a/arch/arm64/Kconfig |
392 | +++ b/arch/arm64/Kconfig |
393 | @@ -1007,7 +1007,7 @@ source "fs/Kconfig.binfmt" |
394 | config COMPAT |
395 | bool "Kernel support for 32-bit EL0" |
396 | depends on ARM64_4K_PAGES || EXPERT |
397 | - select COMPAT_BINFMT_ELF |
398 | + select COMPAT_BINFMT_ELF if BINFMT_ELF |
399 | select HAVE_UID16 |
400 | select OLD_SIGSUSPEND3 |
401 | select COMPAT_OLD_SIGACTION |
402 | diff --git a/arch/arm64/Kconfig.platforms b/arch/arm64/Kconfig.platforms |
403 | index 101794f5ce10..08a4497f70a6 100644 |
404 | --- a/arch/arm64/Kconfig.platforms |
405 | +++ b/arch/arm64/Kconfig.platforms |
406 | @@ -2,9 +2,11 @@ menu "Platform selection" |
407 | |
408 | config ARCH_SUNXI |
409 | bool "Allwinner sunxi 64-bit SoC Family" |
410 | + select ARCH_HAS_RESET_CONTROLLER |
411 | select GENERIC_IRQ_CHIP |
412 | select PINCTRL |
413 | select PINCTRL_SUN50I_A64 |
414 | + select RESET_CONTROLLER |
415 | help |
416 | This enables support for Allwinner sunxi based SoCs like the A64. |
417 | |
418 | diff --git a/arch/arm64/boot/dts/mediatek/mt8173.dtsi b/arch/arm64/boot/dts/mediatek/mt8173.dtsi |
419 | index 6c03c1702bb3..b307d6b6357e 100644 |
420 | --- a/arch/arm64/boot/dts/mediatek/mt8173.dtsi |
421 | +++ b/arch/arm64/boot/dts/mediatek/mt8173.dtsi |
422 | @@ -73,6 +73,7 @@ |
423 | reg = <0x000>; |
424 | enable-method = "psci"; |
425 | cpu-idle-states = <&CPU_SLEEP_0>; |
426 | + #cooling-cells = <2>; |
427 | }; |
428 | |
429 | cpu1: cpu@1 { |
430 | @@ -89,6 +90,7 @@ |
431 | reg = <0x100>; |
432 | enable-method = "psci"; |
433 | cpu-idle-states = <&CPU_SLEEP_0>; |
434 | + #cooling-cells = <2>; |
435 | }; |
436 | |
437 | cpu3: cpu@101 { |
438 | diff --git a/arch/arm64/crypto/crc32-arm64.c b/arch/arm64/crypto/crc32-arm64.c |
439 | index 6a37c3c6b11d..3ec568afd1d3 100644 |
440 | --- a/arch/arm64/crypto/crc32-arm64.c |
441 | +++ b/arch/arm64/crypto/crc32-arm64.c |
442 | @@ -232,6 +232,7 @@ static struct shash_alg crc32_alg = { |
443 | .cra_name = "crc32", |
444 | .cra_driver_name = "crc32-arm64-hw", |
445 | .cra_priority = 300, |
446 | + .cra_flags = CRYPTO_ALG_OPTIONAL_KEY, |
447 | .cra_blocksize = CHKSUM_BLOCK_SIZE, |
448 | .cra_alignmask = 0, |
449 | .cra_ctxsize = sizeof(struct chksum_ctx), |
450 | @@ -253,6 +254,7 @@ static struct shash_alg crc32c_alg = { |
451 | .cra_name = "crc32c", |
452 | .cra_driver_name = "crc32c-arm64-hw", |
453 | .cra_priority = 300, |
454 | + .cra_flags = CRYPTO_ALG_OPTIONAL_KEY, |
455 | .cra_blocksize = CHKSUM_BLOCK_SIZE, |
456 | .cra_alignmask = 0, |
457 | .cra_ctxsize = sizeof(struct chksum_ctx), |
458 | diff --git a/arch/arm64/include/asm/bug.h b/arch/arm64/include/asm/bug.h |
459 | index 561190d15881..0bfe1df12b19 100644 |
460 | --- a/arch/arm64/include/asm/bug.h |
461 | +++ b/arch/arm64/include/asm/bug.h |
462 | @@ -20,9 +20,6 @@ |
463 | |
464 | #include <asm/brk-imm.h> |
465 | |
466 | -#ifdef CONFIG_GENERIC_BUG |
467 | -#define HAVE_ARCH_BUG |
468 | - |
469 | #ifdef CONFIG_DEBUG_BUGVERBOSE |
470 | #define _BUGVERBOSE_LOCATION(file, line) __BUGVERBOSE_LOCATION(file, line) |
471 | #define __BUGVERBOSE_LOCATION(file, line) \ |
472 | @@ -36,28 +33,36 @@ |
473 | #define _BUGVERBOSE_LOCATION(file, line) |
474 | #endif |
475 | |
476 | -#define _BUG_FLAGS(flags) __BUG_FLAGS(flags) |
477 | +#ifdef CONFIG_GENERIC_BUG |
478 | |
479 | -#define __BUG_FLAGS(flags) asm volatile ( \ |
480 | +#define __BUG_ENTRY(flags) \ |
481 | ".pushsection __bug_table,\"a\"\n\t" \ |
482 | ".align 2\n\t" \ |
483 | "0: .long 1f - 0b\n\t" \ |
484 | _BUGVERBOSE_LOCATION(__FILE__, __LINE__) \ |
485 | ".short " #flags "\n\t" \ |
486 | ".popsection\n" \ |
487 | - \ |
488 | - "1: brk %[imm]" \ |
489 | - :: [imm] "i" (BUG_BRK_IMM) \ |
490 | -) |
491 | + "1: " |
492 | +#else |
493 | +#define __BUG_ENTRY(flags) "" |
494 | +#endif |
495 | + |
496 | +#define __BUG_FLAGS(flags) \ |
497 | + asm volatile ( \ |
498 | + __BUG_ENTRY(flags) \ |
499 | + "brk %[imm]" :: [imm] "i" (BUG_BRK_IMM) \ |
500 | + ); |
501 | |
502 | -#define BUG() do { \ |
503 | - _BUG_FLAGS(0); \ |
504 | - unreachable(); \ |
505 | + |
506 | +#define BUG() do { \ |
507 | + __BUG_FLAGS(0); \ |
508 | + unreachable(); \ |
509 | } while (0) |
510 | |
511 | -#define __WARN_TAINT(taint) _BUG_FLAGS(BUGFLAG_TAINT(taint)) |
512 | +#define __WARN_TAINT(taint) \ |
513 | + __BUG_FLAGS(BUGFLAG_TAINT(taint)) |
514 | |
515 | -#endif /* ! CONFIG_GENERIC_BUG */ |
516 | +#define HAVE_ARCH_BUG |
517 | |
518 | #include <asm-generic/bug.h> |
519 | |
520 | diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c |
521 | index 05615a3fdc6f..d5cc6d73c2c4 100644 |
522 | --- a/arch/arm64/mm/mmu.c |
523 | +++ b/arch/arm64/mm/mmu.c |
524 | @@ -479,7 +479,7 @@ void __init paging_init(void) |
525 | * To do this we need to go via a temporary pgd. |
526 | */ |
527 | cpu_replace_ttbr1(__va(pgd_phys)); |
528 | - memcpy(swapper_pg_dir, pgd, PAGE_SIZE); |
529 | + memcpy(swapper_pg_dir, pgd, PGD_SIZE); |
530 | cpu_replace_ttbr1(swapper_pg_dir); |
531 | |
532 | pgd_clear_fixmap(); |
533 | diff --git a/arch/m68k/kernel/vmlinux-nommu.lds b/arch/m68k/kernel/vmlinux-nommu.lds |
534 | index d2c8abf1c8c4..e958abe0f51e 100644 |
535 | --- a/arch/m68k/kernel/vmlinux-nommu.lds |
536 | +++ b/arch/m68k/kernel/vmlinux-nommu.lds |
537 | @@ -44,6 +44,8 @@ SECTIONS { |
538 | .text : { |
539 | HEAD_TEXT |
540 | TEXT_TEXT |
541 | + IRQENTRY_TEXT |
542 | + SOFTIRQENTRY_TEXT |
543 | SCHED_TEXT |
544 | CPUIDLE_TEXT |
545 | LOCK_TEXT |
546 | diff --git a/arch/m68k/kernel/vmlinux-std.lds b/arch/m68k/kernel/vmlinux-std.lds |
547 | index 5b5ce1e4d1ed..1656ae8a145d 100644 |
548 | --- a/arch/m68k/kernel/vmlinux-std.lds |
549 | +++ b/arch/m68k/kernel/vmlinux-std.lds |
550 | @@ -15,6 +15,8 @@ SECTIONS |
551 | .text : { |
552 | HEAD_TEXT |
553 | TEXT_TEXT |
554 | + IRQENTRY_TEXT |
555 | + SOFTIRQENTRY_TEXT |
556 | SCHED_TEXT |
557 | CPUIDLE_TEXT |
558 | LOCK_TEXT |
559 | diff --git a/arch/m68k/kernel/vmlinux-sun3.lds b/arch/m68k/kernel/vmlinux-sun3.lds |
560 | index fe5ea1974b16..07b9818b3176 100644 |
561 | --- a/arch/m68k/kernel/vmlinux-sun3.lds |
562 | +++ b/arch/m68k/kernel/vmlinux-sun3.lds |
563 | @@ -15,6 +15,8 @@ SECTIONS |
564 | .text : { |
565 | HEAD_TEXT |
566 | TEXT_TEXT |
567 | + IRQENTRY_TEXT |
568 | + SOFTIRQENTRY_TEXT |
569 | SCHED_TEXT |
570 | CPUIDLE_TEXT |
571 | LOCK_TEXT |
572 | diff --git a/arch/powerpc/crypto/crc32c-vpmsum_glue.c b/arch/powerpc/crypto/crc32c-vpmsum_glue.c |
573 | index f058e0c3e4d4..fd1d6c83f0c0 100644 |
574 | --- a/arch/powerpc/crypto/crc32c-vpmsum_glue.c |
575 | +++ b/arch/powerpc/crypto/crc32c-vpmsum_glue.c |
576 | @@ -141,6 +141,7 @@ static struct shash_alg alg = { |
577 | .cra_name = "crc32c", |
578 | .cra_driver_name = "crc32c-vpmsum", |
579 | .cra_priority = 200, |
580 | + .cra_flags = CRYPTO_ALG_OPTIONAL_KEY, |
581 | .cra_blocksize = CHKSUM_BLOCK_SIZE, |
582 | .cra_ctxsize = sizeof(u32), |
583 | .cra_module = THIS_MODULE, |
584 | diff --git a/arch/powerpc/include/asm/exception-64s.h b/arch/powerpc/include/asm/exception-64s.h |
585 | index cab6d2a46c41..903e76a9f158 100644 |
586 | --- a/arch/powerpc/include/asm/exception-64s.h |
587 | +++ b/arch/powerpc/include/asm/exception-64s.h |
588 | @@ -242,7 +242,7 @@ END_FTR_SECTION_NESTED(ftr,ftr,943) |
589 | mtspr SPRN_##h##SRR0,r12; \ |
590 | mfspr r12,SPRN_##h##SRR1; /* and SRR1 */ \ |
591 | mtspr SPRN_##h##SRR1,r10; \ |
592 | - h##rfid; \ |
593 | + h##RFI_TO_KERNEL; \ |
594 | b . /* prevent speculative execution */ |
595 | #define EXCEPTION_PROLOG_PSERIES_1(label, h) \ |
596 | __EXCEPTION_PROLOG_PSERIES_1(label, h) |
597 | diff --git a/arch/powerpc/include/asm/paca.h b/arch/powerpc/include/asm/paca.h |
598 | index ea43897183fd..c75ee2d886fc 100644 |
599 | --- a/arch/powerpc/include/asm/paca.h |
600 | +++ b/arch/powerpc/include/asm/paca.h |
601 | @@ -212,8 +212,7 @@ struct paca_struct { |
602 | */ |
603 | u64 exrfi[13] __aligned(0x80); |
604 | void *rfi_flush_fallback_area; |
605 | - u64 l1d_flush_congruence; |
606 | - u64 l1d_flush_sets; |
607 | + u64 l1d_flush_size; |
608 | #endif |
609 | }; |
610 | |
611 | diff --git a/arch/powerpc/kernel/asm-offsets.c b/arch/powerpc/kernel/asm-offsets.c |
612 | index 64bcbd580495..14fbbd9035ca 100644 |
613 | --- a/arch/powerpc/kernel/asm-offsets.c |
614 | +++ b/arch/powerpc/kernel/asm-offsets.c |
615 | @@ -242,8 +242,7 @@ int main(void) |
616 | DEFINE(PACA_IN_MCE, offsetof(struct paca_struct, in_mce)); |
617 | DEFINE(PACA_RFI_FLUSH_FALLBACK_AREA, offsetof(struct paca_struct, rfi_flush_fallback_area)); |
618 | DEFINE(PACA_EXRFI, offsetof(struct paca_struct, exrfi)); |
619 | - DEFINE(PACA_L1D_FLUSH_CONGRUENCE, offsetof(struct paca_struct, l1d_flush_congruence)); |
620 | - DEFINE(PACA_L1D_FLUSH_SETS, offsetof(struct paca_struct, l1d_flush_sets)); |
621 | + DEFINE(PACA_L1D_FLUSH_SIZE, offsetof(struct paca_struct, l1d_flush_size)); |
622 | #endif |
623 | DEFINE(PACAHWCPUID, offsetof(struct paca_struct, hw_cpu_id)); |
624 | DEFINE(PACAKEXECSTATE, offsetof(struct paca_struct, kexec_state)); |
625 | diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S |
626 | index 9121b9a35c8a..2dc52e6d2af4 100644 |
627 | --- a/arch/powerpc/kernel/entry_64.S |
628 | +++ b/arch/powerpc/kernel/entry_64.S |
629 | @@ -401,8 +401,7 @@ tabort_syscall: |
630 | mtmsrd r10, 1 |
631 | mtspr SPRN_SRR0, r11 |
632 | mtspr SPRN_SRR1, r12 |
633 | - |
634 | - rfid |
635 | + RFI_TO_USER |
636 | b . /* prevent speculative execution */ |
637 | #endif |
638 | |
639 | @@ -1078,7 +1077,7 @@ _GLOBAL(enter_rtas) |
640 | |
641 | mtspr SPRN_SRR0,r5 |
642 | mtspr SPRN_SRR1,r6 |
643 | - rfid |
644 | + RFI_TO_KERNEL |
645 | b . /* prevent speculative execution */ |
646 | |
647 | rtas_return_loc: |
648 | @@ -1103,7 +1102,7 @@ rtas_return_loc: |
649 | |
650 | mtspr SPRN_SRR0,r3 |
651 | mtspr SPRN_SRR1,r4 |
652 | - rfid |
653 | + RFI_TO_KERNEL |
654 | b . /* prevent speculative execution */ |
655 | |
656 | .align 3 |
657 | @@ -1174,7 +1173,7 @@ _GLOBAL(enter_prom) |
658 | LOAD_REG_IMMEDIATE(r12, MSR_SF | MSR_ISF | MSR_LE) |
659 | andc r11,r11,r12 |
660 | mtsrr1 r11 |
661 | - rfid |
662 | + RFI_TO_KERNEL |
663 | #endif /* CONFIG_PPC_BOOK3E */ |
664 | |
665 | 1: /* Return from OF */ |
666 | diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S |
667 | index 96db6c3adebe..7614d1dd2c0b 100644 |
668 | --- a/arch/powerpc/kernel/exceptions-64s.S |
669 | +++ b/arch/powerpc/kernel/exceptions-64s.S |
670 | @@ -244,7 +244,7 @@ BEGIN_FTR_SECTION |
671 | LOAD_HANDLER(r12, machine_check_handle_early) |
672 | 1: mtspr SPRN_SRR0,r12 |
673 | mtspr SPRN_SRR1,r11 |
674 | - rfid |
675 | + RFI_TO_KERNEL |
676 | b . /* prevent speculative execution */ |
677 | 2: |
678 | /* Stack overflow. Stay on emergency stack and panic. |
679 | @@ -280,7 +280,7 @@ machine_check_pSeries_0: |
680 | mtspr SPRN_SRR0,r12 |
681 | mfspr r12,SPRN_SRR1 |
682 | mtspr SPRN_SRR1,r10 |
683 | - rfid |
684 | + RFI_TO_KERNEL |
685 | b . /* prevent speculative execution */ |
686 | |
687 | TRAMP_KVM_SKIP(PACA_EXMC, 0x200) |
688 | @@ -446,7 +446,7 @@ EXC_COMMON_BEGIN(machine_check_handle_early) |
689 | li r3,MSR_ME |
690 | andc r10,r10,r3 /* Turn off MSR_ME */ |
691 | mtspr SPRN_SRR1,r10 |
692 | - rfid |
693 | + RFI_TO_KERNEL |
694 | b . |
695 | 2: |
696 | /* |
697 | @@ -464,7 +464,7 @@ EXC_COMMON_BEGIN(machine_check_handle_early) |
698 | */ |
699 | bl machine_check_queue_event |
700 | MACHINE_CHECK_HANDLER_WINDUP |
701 | - rfid |
702 | + RFI_TO_USER_OR_KERNEL |
703 | 9: |
704 | /* Deliver the machine check to host kernel in V mode. */ |
705 | MACHINE_CHECK_HANDLER_WINDUP |
706 | @@ -680,6 +680,7 @@ END_MMU_FTR_SECTION_IFCLR(MMU_FTR_TYPE_RADIX) |
707 | .machine push |
708 | .machine "power4" |
709 | mtcrf 0x80,r9 |
710 | + mtcrf 0x02,r9 /* I/D indication is in cr6 */ |
711 | mtcrf 0x01,r9 /* slb_allocate uses cr0 and cr7 */ |
712 | .machine pop |
713 | |
714 | @@ -705,7 +706,7 @@ END_MMU_FTR_SECTION_IFCLR(MMU_FTR_TYPE_RADIX) |
715 | mtspr SPRN_SRR0,r10 |
716 | ld r10,PACAKMSR(r13) |
717 | mtspr SPRN_SRR1,r10 |
718 | - rfid |
719 | + RFI_TO_KERNEL |
720 | b . |
721 | |
722 | EXC_COMMON_BEGIN(unrecov_slb) |
723 | @@ -892,7 +893,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_REAL_LE) \ |
724 | mtspr SPRN_SRR0,r10 ; \ |
725 | ld r10,PACAKMSR(r13) ; \ |
726 | mtspr SPRN_SRR1,r10 ; \ |
727 | - rfid ; \ |
728 | + RFI_TO_KERNEL ; \ |
729 | b . ; /* prevent speculative execution */ |
730 | |
731 | #define SYSCALL_PSERIES_3 \ |
732 | @@ -900,7 +901,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_REAL_LE) \ |
733 | 1: mfspr r12,SPRN_SRR1 ; \ |
734 | xori r12,r12,MSR_LE ; \ |
735 | mtspr SPRN_SRR1,r12 ; \ |
736 | - rfid ; /* return to userspace */ \ |
737 | + RFI_TO_USER ; /* return to userspace */ \ |
738 | b . ; /* prevent speculative execution */ |
739 | |
740 | #if defined(CONFIG_RELOCATABLE) |
741 | @@ -1275,7 +1276,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_CFAR) |
742 | ld r11,PACA_EXGEN+EX_R11(r13) |
743 | ld r12,PACA_EXGEN+EX_R12(r13) |
744 | ld r13,PACA_EXGEN+EX_R13(r13) |
745 | - HRFID |
746 | + HRFI_TO_UNKNOWN |
747 | b . |
748 | #endif |
749 | |
750 | @@ -1349,7 +1350,7 @@ masked_##_H##interrupt: \ |
751 | ld r10,PACA_EXGEN+EX_R10(r13); \ |
752 | ld r11,PACA_EXGEN+EX_R11(r13); \ |
753 | GET_SCRATCH0(r13); \ |
754 | - ##_H##rfid; \ |
755 | + ##_H##RFI_TO_KERNEL; \ |
756 | b . |
757 | |
758 | /* |
759 | @@ -1371,7 +1372,7 @@ TRAMP_REAL_BEGIN(kvmppc_skip_interrupt) |
760 | addi r13, r13, 4 |
761 | mtspr SPRN_SRR0, r13 |
762 | GET_SCRATCH0(r13) |
763 | - rfid |
764 | + RFI_TO_KERNEL |
765 | b . |
766 | |
767 | TRAMP_REAL_BEGIN(kvmppc_skip_Hinterrupt) |
768 | @@ -1383,7 +1384,7 @@ TRAMP_REAL_BEGIN(kvmppc_skip_Hinterrupt) |
769 | addi r13, r13, 4 |
770 | mtspr SPRN_HSRR0, r13 |
771 | GET_SCRATCH0(r13) |
772 | - hrfid |
773 | + HRFI_TO_KERNEL |
774 | b . |
775 | #endif |
776 | |
777 | @@ -1601,39 +1602,37 @@ rfi_flush_fallback: |
778 | std r9,PACA_EXRFI+EX_R9(r13) |
779 | std r10,PACA_EXRFI+EX_R10(r13) |
780 | std r11,PACA_EXRFI+EX_R11(r13) |
781 | - std r12,PACA_EXRFI+EX_R12(r13) |
782 | - std r8,PACA_EXRFI+EX_R13(r13) |
783 | mfctr r9 |
784 | ld r10,PACA_RFI_FLUSH_FALLBACK_AREA(r13) |
785 | - ld r11,PACA_L1D_FLUSH_SETS(r13) |
786 | - ld r12,PACA_L1D_FLUSH_CONGRUENCE(r13) |
787 | - /* |
788 | - * The load adresses are at staggered offsets within cachelines, |
789 | - * which suits some pipelines better (on others it should not |
790 | - * hurt). |
791 | - */ |
792 | - addi r12,r12,8 |
793 | + ld r11,PACA_L1D_FLUSH_SIZE(r13) |
794 | + srdi r11,r11,(7 + 3) /* 128 byte lines, unrolled 8x */ |
795 | mtctr r11 |
796 | DCBT_STOP_ALL_STREAM_IDS(r11) /* Stop prefetch streams */ |
797 | |
798 | /* order ld/st prior to dcbt stop all streams with flushing */ |
799 | sync |
800 | -1: li r8,0 |
801 | - .rept 8 /* 8-way set associative */ |
802 | - ldx r11,r10,r8 |
803 | - add r8,r8,r12 |
804 | - xor r11,r11,r11 // Ensure r11 is 0 even if fallback area is not |
805 | - add r8,r8,r11 // Add 0, this creates a dependency on the ldx |
806 | - .endr |
807 | - addi r10,r10,128 /* 128 byte cache line */ |
808 | + |
809 | + /* |
810 | + * The load adresses are at staggered offsets within cachelines, |
811 | + * which suits some pipelines better (on others it should not |
812 | + * hurt). |
813 | + */ |
814 | +1: |
815 | + ld r11,(0x80 + 8)*0(r10) |
816 | + ld r11,(0x80 + 8)*1(r10) |
817 | + ld r11,(0x80 + 8)*2(r10) |
818 | + ld r11,(0x80 + 8)*3(r10) |
819 | + ld r11,(0x80 + 8)*4(r10) |
820 | + ld r11,(0x80 + 8)*5(r10) |
821 | + ld r11,(0x80 + 8)*6(r10) |
822 | + ld r11,(0x80 + 8)*7(r10) |
823 | + addi r10,r10,0x80*8 |
824 | bdnz 1b |
825 | |
826 | mtctr r9 |
827 | ld r9,PACA_EXRFI+EX_R9(r13) |
828 | ld r10,PACA_EXRFI+EX_R10(r13) |
829 | ld r11,PACA_EXRFI+EX_R11(r13) |
830 | - ld r12,PACA_EXRFI+EX_R12(r13) |
831 | - ld r8,PACA_EXRFI+EX_R13(r13) |
832 | GET_SCRATCH0(r13); |
833 | rfid |
834 | |
835 | @@ -1644,39 +1643,37 @@ hrfi_flush_fallback: |
836 | std r9,PACA_EXRFI+EX_R9(r13) |
837 | std r10,PACA_EXRFI+EX_R10(r13) |
838 | std r11,PACA_EXRFI+EX_R11(r13) |
839 | - std r12,PACA_EXRFI+EX_R12(r13) |
840 | - std r8,PACA_EXRFI+EX_R13(r13) |
841 | mfctr r9 |
842 | ld r10,PACA_RFI_FLUSH_FALLBACK_AREA(r13) |
843 | - ld r11,PACA_L1D_FLUSH_SETS(r13) |
844 | - ld r12,PACA_L1D_FLUSH_CONGRUENCE(r13) |
845 | - /* |
846 | - * The load adresses are at staggered offsets within cachelines, |
847 | - * which suits some pipelines better (on others it should not |
848 | - * hurt). |
849 | - */ |
850 | - addi r12,r12,8 |
851 | + ld r11,PACA_L1D_FLUSH_SIZE(r13) |
852 | + srdi r11,r11,(7 + 3) /* 128 byte lines, unrolled 8x */ |
853 | mtctr r11 |
854 | DCBT_STOP_ALL_STREAM_IDS(r11) /* Stop prefetch streams */ |
855 | |
856 | /* order ld/st prior to dcbt stop all streams with flushing */ |
857 | sync |
858 | -1: li r8,0 |
859 | - .rept 8 /* 8-way set associative */ |
860 | - ldx r11,r10,r8 |
861 | - add r8,r8,r12 |
862 | - xor r11,r11,r11 // Ensure r11 is 0 even if fallback area is not |
863 | - add r8,r8,r11 // Add 0, this creates a dependency on the ldx |
864 | - .endr |
865 | - addi r10,r10,128 /* 128 byte cache line */ |
866 | + |
867 | + /* |
868 | + * The load adresses are at staggered offsets within cachelines, |
869 | + * which suits some pipelines better (on others it should not |
870 | + * hurt). |
871 | + */ |
872 | +1: |
873 | + ld r11,(0x80 + 8)*0(r10) |
874 | + ld r11,(0x80 + 8)*1(r10) |
875 | + ld r11,(0x80 + 8)*2(r10) |
876 | + ld r11,(0x80 + 8)*3(r10) |
877 | + ld r11,(0x80 + 8)*4(r10) |
878 | + ld r11,(0x80 + 8)*5(r10) |
879 | + ld r11,(0x80 + 8)*6(r10) |
880 | + ld r11,(0x80 + 8)*7(r10) |
881 | + addi r10,r10,0x80*8 |
882 | bdnz 1b |
883 | |
884 | mtctr r9 |
885 | ld r9,PACA_EXRFI+EX_R9(r13) |
886 | ld r10,PACA_EXRFI+EX_R10(r13) |
887 | ld r11,PACA_EXRFI+EX_R11(r13) |
888 | - ld r12,PACA_EXRFI+EX_R12(r13) |
889 | - ld r8,PACA_EXRFI+EX_R13(r13) |
890 | GET_SCRATCH0(r13); |
891 | hrfid |
892 | |
893 | diff --git a/arch/powerpc/kernel/idle_book3s.S b/arch/powerpc/kernel/idle_book3s.S |
894 | index b350ac5e3111..d92c95333435 100644 |
895 | --- a/arch/powerpc/kernel/idle_book3s.S |
896 | +++ b/arch/powerpc/kernel/idle_book3s.S |
897 | @@ -9,6 +9,7 @@ |
898 | */ |
899 | |
900 | #include <linux/threads.h> |
901 | +#include <asm/exception-64s.h> |
902 | #include <asm/processor.h> |
903 | #include <asm/page.h> |
904 | #include <asm/cputable.h> |
905 | @@ -178,7 +179,7 @@ _GLOBAL(pnv_powersave_common) |
906 | mtmsrd r6, 1 /* clear RI before setting SRR0/1 */ |
907 | mtspr SPRN_SRR0, r5 |
908 | mtspr SPRN_SRR1, r7 |
909 | - rfid |
910 | + RFI_TO_KERNEL |
911 | |
912 | .globl pnv_enter_arch207_idle_mode |
913 | pnv_enter_arch207_idle_mode: |
914 | @@ -668,7 +669,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_HVMODE) |
915 | mtcr r6 |
916 | mtspr SPRN_SRR1,r4 |
917 | mtspr SPRN_SRR0,r5 |
918 | - rfid |
919 | + RFI_TO_KERNEL |
920 | |
921 | /* |
922 | * R3 here contains the value that will be returned to the caller |
923 | @@ -689,4 +690,4 @@ END_FTR_SECTION_IFSET(CPU_FTR_HVMODE) |
924 | mtcr r6 |
925 | mtspr SPRN_SRR1,r4 |
926 | mtspr SPRN_SRR0,r5 |
927 | - rfid |
928 | + RFI_TO_KERNEL |
929 | diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c |
930 | index 7c30a91c1f86..5243501d95ef 100644 |
931 | --- a/arch/powerpc/kernel/setup_64.c |
932 | +++ b/arch/powerpc/kernel/setup_64.c |
933 | @@ -745,19 +745,8 @@ static void init_fallback_flush(void) |
934 | memset(l1d_flush_fallback_area, 0, l1d_size * 2); |
935 | |
936 | for_each_possible_cpu(cpu) { |
937 | - /* |
938 | - * The fallback flush is currently coded for 8-way |
939 | - * associativity. Different associativity is possible, but it |
940 | - * will be treated as 8-way and may not evict the lines as |
941 | - * effectively. |
942 | - * |
943 | - * 128 byte lines are mandatory. |
944 | - */ |
945 | - u64 c = l1d_size / 8; |
946 | - |
947 | paca[cpu].rfi_flush_fallback_area = l1d_flush_fallback_area; |
948 | - paca[cpu].l1d_flush_congruence = c; |
949 | - paca[cpu].l1d_flush_sets = c / 128; |
950 | + paca[cpu].l1d_flush_size = l1d_size; |
951 | } |
952 | } |
953 | |
954 | diff --git a/arch/powerpc/kvm/book3s_hv_rmhandlers.S b/arch/powerpc/kvm/book3s_hv_rmhandlers.S |
955 | index 0447a22a4df6..55fbc0c78721 100644 |
956 | --- a/arch/powerpc/kvm/book3s_hv_rmhandlers.S |
957 | +++ b/arch/powerpc/kvm/book3s_hv_rmhandlers.S |
958 | @@ -65,7 +65,7 @@ _GLOBAL_TOC(kvmppc_hv_entry_trampoline) |
959 | mtmsrd r0,1 /* clear RI in MSR */ |
960 | mtsrr0 r5 |
961 | mtsrr1 r6 |
962 | - RFI |
963 | + RFI_TO_KERNEL |
964 | |
965 | kvmppc_call_hv_entry: |
966 | ld r4, HSTATE_KVM_VCPU(r13) |
967 | @@ -171,7 +171,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S) |
968 | mtsrr0 r8 |
969 | mtsrr1 r7 |
970 | beq cr1, 13f /* machine check */ |
971 | - RFI |
972 | + RFI_TO_KERNEL |
973 | |
974 | /* On POWER7, we have external interrupts set to use HSRR0/1 */ |
975 | 11: mtspr SPRN_HSRR0, r8 |
976 | @@ -1018,8 +1018,7 @@ BEGIN_FTR_SECTION |
977 | END_FTR_SECTION_IFSET(CPU_FTR_HAS_PPR) |
978 | ld r0, VCPU_GPR(R0)(r4) |
979 | ld r4, VCPU_GPR(R4)(r4) |
980 | - |
981 | - hrfid |
982 | + HRFI_TO_GUEST |
983 | b . |
984 | |
985 | secondary_too_late: |
986 | diff --git a/arch/powerpc/kvm/book3s_rmhandlers.S b/arch/powerpc/kvm/book3s_rmhandlers.S |
987 | index 42a4b237df5f..34a5adeff084 100644 |
988 | --- a/arch/powerpc/kvm/book3s_rmhandlers.S |
989 | +++ b/arch/powerpc/kvm/book3s_rmhandlers.S |
990 | @@ -46,6 +46,9 @@ |
991 | |
992 | #define FUNC(name) name |
993 | |
994 | +#define RFI_TO_KERNEL RFI |
995 | +#define RFI_TO_GUEST RFI |
996 | + |
997 | .macro INTERRUPT_TRAMPOLINE intno |
998 | |
999 | .global kvmppc_trampoline_\intno |
1000 | @@ -141,7 +144,7 @@ kvmppc_handler_skip_ins: |
1001 | GET_SCRATCH0(r13) |
1002 | |
1003 | /* And get back into the code */ |
1004 | - RFI |
1005 | + RFI_TO_KERNEL |
1006 | #endif |
1007 | |
1008 | /* |
1009 | @@ -164,6 +167,6 @@ _GLOBAL_TOC(kvmppc_entry_trampoline) |
1010 | ori r5, r5, MSR_EE |
1011 | mtsrr0 r7 |
1012 | mtsrr1 r6 |
1013 | - RFI |
1014 | + RFI_TO_KERNEL |
1015 | |
1016 | #include "book3s_segment.S" |
1017 | diff --git a/arch/powerpc/kvm/book3s_segment.S b/arch/powerpc/kvm/book3s_segment.S |
1018 | index ca8f174289bb..7c982956d709 100644 |
1019 | --- a/arch/powerpc/kvm/book3s_segment.S |
1020 | +++ b/arch/powerpc/kvm/book3s_segment.S |
1021 | @@ -156,7 +156,7 @@ no_dcbz32_on: |
1022 | PPC_LL r9, SVCPU_R9(r3) |
1023 | PPC_LL r3, (SVCPU_R3)(r3) |
1024 | |
1025 | - RFI |
1026 | + RFI_TO_GUEST |
1027 | kvmppc_handler_trampoline_enter_end: |
1028 | |
1029 | |
1030 | @@ -389,5 +389,5 @@ END_FTR_SECTION_IFSET(CPU_FTR_HVMODE) |
1031 | cmpwi r12, BOOK3S_INTERRUPT_DOORBELL |
1032 | beqa BOOK3S_INTERRUPT_DOORBELL |
1033 | |
1034 | - RFI |
1035 | + RFI_TO_KERNEL |
1036 | kvmppc_handler_trampoline_exit_end: |
1037 | diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c |
1038 | index 083f92746951..bf949623de90 100644 |
1039 | --- a/arch/powerpc/perf/core-book3s.c |
1040 | +++ b/arch/powerpc/perf/core-book3s.c |
1041 | @@ -1381,7 +1381,7 @@ static int collect_events(struct perf_event *group, int max_count, |
1042 | int n = 0; |
1043 | struct perf_event *event; |
1044 | |
1045 | - if (!is_software_event(group)) { |
1046 | + if (group->pmu->task_ctx_nr == perf_hw_context) { |
1047 | if (n >= max_count) |
1048 | return -1; |
1049 | ctrs[n] = group; |
1050 | @@ -1389,7 +1389,7 @@ static int collect_events(struct perf_event *group, int max_count, |
1051 | events[n++] = group->hw.config; |
1052 | } |
1053 | list_for_each_entry(event, &group->sibling_list, group_entry) { |
1054 | - if (!is_software_event(event) && |
1055 | + if (event->pmu->task_ctx_nr == perf_hw_context && |
1056 | event->state != PERF_EVENT_STATE_OFF) { |
1057 | if (n >= max_count) |
1058 | return -1; |
1059 | diff --git a/arch/s390/crypto/crc32-vx.c b/arch/s390/crypto/crc32-vx.c |
1060 | index 992e630c227b..6f4985f357c6 100644 |
1061 | --- a/arch/s390/crypto/crc32-vx.c |
1062 | +++ b/arch/s390/crypto/crc32-vx.c |
1063 | @@ -238,6 +238,7 @@ static struct shash_alg crc32_vx_algs[] = { |
1064 | .cra_name = "crc32", |
1065 | .cra_driver_name = "crc32-vx", |
1066 | .cra_priority = 200, |
1067 | + .cra_flags = CRYPTO_ALG_OPTIONAL_KEY, |
1068 | .cra_blocksize = CRC32_BLOCK_SIZE, |
1069 | .cra_ctxsize = sizeof(struct crc_ctx), |
1070 | .cra_module = THIS_MODULE, |
1071 | @@ -258,6 +259,7 @@ static struct shash_alg crc32_vx_algs[] = { |
1072 | .cra_name = "crc32be", |
1073 | .cra_driver_name = "crc32be-vx", |
1074 | .cra_priority = 200, |
1075 | + .cra_flags = CRYPTO_ALG_OPTIONAL_KEY, |
1076 | .cra_blocksize = CRC32_BLOCK_SIZE, |
1077 | .cra_ctxsize = sizeof(struct crc_ctx), |
1078 | .cra_module = THIS_MODULE, |
1079 | @@ -278,6 +280,7 @@ static struct shash_alg crc32_vx_algs[] = { |
1080 | .cra_name = "crc32c", |
1081 | .cra_driver_name = "crc32c-vx", |
1082 | .cra_priority = 200, |
1083 | + .cra_flags = CRYPTO_ALG_OPTIONAL_KEY, |
1084 | .cra_blocksize = CRC32_BLOCK_SIZE, |
1085 | .cra_ctxsize = sizeof(struct crc_ctx), |
1086 | .cra_module = THIS_MODULE, |
1087 | diff --git a/arch/sparc/crypto/crc32c_glue.c b/arch/sparc/crypto/crc32c_glue.c |
1088 | index d1064e46efe8..8aa664638c3c 100644 |
1089 | --- a/arch/sparc/crypto/crc32c_glue.c |
1090 | +++ b/arch/sparc/crypto/crc32c_glue.c |
1091 | @@ -133,6 +133,7 @@ static struct shash_alg alg = { |
1092 | .cra_name = "crc32c", |
1093 | .cra_driver_name = "crc32c-sparc64", |
1094 | .cra_priority = SPARC_CR_OPCODE_PRIORITY, |
1095 | + .cra_flags = CRYPTO_ALG_OPTIONAL_KEY, |
1096 | .cra_blocksize = CHKSUM_BLOCK_SIZE, |
1097 | .cra_ctxsize = sizeof(u32), |
1098 | .cra_alignmask = 7, |
1099 | diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig |
1100 | index 0ca4d12ce95c..a4ac7bab15f7 100644 |
1101 | --- a/arch/x86/Kconfig |
1102 | +++ b/arch/x86/Kconfig |
1103 | @@ -1057,7 +1057,7 @@ config X86_MCE_THRESHOLD |
1104 | def_bool y |
1105 | |
1106 | config X86_MCE_INJECT |
1107 | - depends on X86_MCE |
1108 | + depends on X86_MCE && X86_LOCAL_APIC |
1109 | tristate "Machine check injector support" |
1110 | ---help--- |
1111 | Provide support for injecting machine checks for testing purposes. |
1112 | diff --git a/arch/x86/Kconfig.debug b/arch/x86/Kconfig.debug |
1113 | index 67eec55093a5..4386440fe463 100644 |
1114 | --- a/arch/x86/Kconfig.debug |
1115 | +++ b/arch/x86/Kconfig.debug |
1116 | @@ -352,6 +352,7 @@ config X86_DEBUG_FPU |
1117 | |
1118 | config PUNIT_ATOM_DEBUG |
1119 | tristate "ATOM Punit debug driver" |
1120 | + depends on PCI |
1121 | select DEBUG_FS |
1122 | select IOSF_MBI |
1123 | ---help--- |
1124 | diff --git a/arch/x86/boot/Makefile b/arch/x86/boot/Makefile |
1125 | index 12ea8f8384f4..3b7156f46bc1 100644 |
1126 | --- a/arch/x86/boot/Makefile |
1127 | +++ b/arch/x86/boot/Makefile |
1128 | @@ -73,12 +73,13 @@ UBSAN_SANITIZE := n |
1129 | $(obj)/bzImage: asflags-y := $(SVGA_MODE) |
1130 | |
1131 | quiet_cmd_image = BUILD $@ |
1132 | +silent_redirect_image = >/dev/null |
1133 | cmd_image = $(obj)/tools/build $(obj)/setup.bin $(obj)/vmlinux.bin \ |
1134 | - $(obj)/zoffset.h $@ |
1135 | + $(obj)/zoffset.h $@ $($(quiet)redirect_image) |
1136 | |
1137 | $(obj)/bzImage: $(obj)/setup.bin $(obj)/vmlinux.bin $(obj)/tools/build FORCE |
1138 | $(call if_changed,image) |
1139 | - @echo 'Kernel: $@ is ready' ' (#'`cat .version`')' |
1140 | + @$(kecho) 'Kernel: $@ is ready' ' (#'`cat .version`')' |
1141 | |
1142 | OBJCOPYFLAGS_vmlinux.bin := -O binary -R .note -R .comment -S |
1143 | $(obj)/vmlinux.bin: $(obj)/compressed/vmlinux FORCE |
1144 | diff --git a/arch/x86/crypto/crc32-pclmul_glue.c b/arch/x86/crypto/crc32-pclmul_glue.c |
1145 | index 27226df3f7d8..c8d9cdacbf10 100644 |
1146 | --- a/arch/x86/crypto/crc32-pclmul_glue.c |
1147 | +++ b/arch/x86/crypto/crc32-pclmul_glue.c |
1148 | @@ -162,6 +162,7 @@ static struct shash_alg alg = { |
1149 | .cra_name = "crc32", |
1150 | .cra_driver_name = "crc32-pclmul", |
1151 | .cra_priority = 200, |
1152 | + .cra_flags = CRYPTO_ALG_OPTIONAL_KEY, |
1153 | .cra_blocksize = CHKSUM_BLOCK_SIZE, |
1154 | .cra_ctxsize = sizeof(u32), |
1155 | .cra_module = THIS_MODULE, |
1156 | diff --git a/arch/x86/crypto/crc32c-intel_glue.c b/arch/x86/crypto/crc32c-intel_glue.c |
1157 | index 0857b1a1de3b..60a391b8c4a2 100644 |
1158 | --- a/arch/x86/crypto/crc32c-intel_glue.c |
1159 | +++ b/arch/x86/crypto/crc32c-intel_glue.c |
1160 | @@ -239,6 +239,7 @@ static struct shash_alg alg = { |
1161 | .cra_name = "crc32c", |
1162 | .cra_driver_name = "crc32c-intel", |
1163 | .cra_priority = 200, |
1164 | + .cra_flags = CRYPTO_ALG_OPTIONAL_KEY, |
1165 | .cra_blocksize = CHKSUM_BLOCK_SIZE, |
1166 | .cra_ctxsize = sizeof(u32), |
1167 | .cra_module = THIS_MODULE, |
1168 | diff --git a/arch/x86/crypto/twofish-x86_64-asm_64-3way.S b/arch/x86/crypto/twofish-x86_64-asm_64-3way.S |
1169 | index 1c3b7ceb36d2..e7273a606a07 100644 |
1170 | --- a/arch/x86/crypto/twofish-x86_64-asm_64-3way.S |
1171 | +++ b/arch/x86/crypto/twofish-x86_64-asm_64-3way.S |
1172 | @@ -55,29 +55,31 @@ |
1173 | #define RAB1bl %bl |
1174 | #define RAB2bl %cl |
1175 | |
1176 | +#define CD0 0x0(%rsp) |
1177 | +#define CD1 0x8(%rsp) |
1178 | +#define CD2 0x10(%rsp) |
1179 | + |
1180 | +# used only before/after all rounds |
1181 | #define RCD0 %r8 |
1182 | #define RCD1 %r9 |
1183 | #define RCD2 %r10 |
1184 | |
1185 | -#define RCD0d %r8d |
1186 | -#define RCD1d %r9d |
1187 | -#define RCD2d %r10d |
1188 | - |
1189 | -#define RX0 %rbp |
1190 | -#define RX1 %r11 |
1191 | -#define RX2 %r12 |
1192 | +# used only during rounds |
1193 | +#define RX0 %r8 |
1194 | +#define RX1 %r9 |
1195 | +#define RX2 %r10 |
1196 | |
1197 | -#define RX0d %ebp |
1198 | -#define RX1d %r11d |
1199 | -#define RX2d %r12d |
1200 | +#define RX0d %r8d |
1201 | +#define RX1d %r9d |
1202 | +#define RX2d %r10d |
1203 | |
1204 | -#define RY0 %r13 |
1205 | -#define RY1 %r14 |
1206 | -#define RY2 %r15 |
1207 | +#define RY0 %r11 |
1208 | +#define RY1 %r12 |
1209 | +#define RY2 %r13 |
1210 | |
1211 | -#define RY0d %r13d |
1212 | -#define RY1d %r14d |
1213 | -#define RY2d %r15d |
1214 | +#define RY0d %r11d |
1215 | +#define RY1d %r12d |
1216 | +#define RY2d %r13d |
1217 | |
1218 | #define RT0 %rdx |
1219 | #define RT1 %rsi |
1220 | @@ -85,6 +87,8 @@ |
1221 | #define RT0d %edx |
1222 | #define RT1d %esi |
1223 | |
1224 | +#define RT1bl %sil |
1225 | + |
1226 | #define do16bit_ror(rot, op1, op2, T0, T1, tmp1, tmp2, ab, dst) \ |
1227 | movzbl ab ## bl, tmp2 ## d; \ |
1228 | movzbl ab ## bh, tmp1 ## d; \ |
1229 | @@ -92,6 +96,11 @@ |
1230 | op1##l T0(CTX, tmp2, 4), dst ## d; \ |
1231 | op2##l T1(CTX, tmp1, 4), dst ## d; |
1232 | |
1233 | +#define swap_ab_with_cd(ab, cd, tmp) \ |
1234 | + movq cd, tmp; \ |
1235 | + movq ab, cd; \ |
1236 | + movq tmp, ab; |
1237 | + |
1238 | /* |
1239 | * Combined G1 & G2 function. Reordered with help of rotates to have moves |
1240 | * at begining. |
1241 | @@ -110,15 +119,15 @@ |
1242 | /* G1,2 && G2,2 */ \ |
1243 | do16bit_ror(32, xor, xor, Tx2, Tx3, RT0, RT1, ab ## 0, x ## 0); \ |
1244 | do16bit_ror(16, xor, xor, Ty3, Ty0, RT0, RT1, ab ## 0, y ## 0); \ |
1245 | - xchgq cd ## 0, ab ## 0; \ |
1246 | + swap_ab_with_cd(ab ## 0, cd ## 0, RT0); \ |
1247 | \ |
1248 | do16bit_ror(32, xor, xor, Tx2, Tx3, RT0, RT1, ab ## 1, x ## 1); \ |
1249 | do16bit_ror(16, xor, xor, Ty3, Ty0, RT0, RT1, ab ## 1, y ## 1); \ |
1250 | - xchgq cd ## 1, ab ## 1; \ |
1251 | + swap_ab_with_cd(ab ## 1, cd ## 1, RT0); \ |
1252 | \ |
1253 | do16bit_ror(32, xor, xor, Tx2, Tx3, RT0, RT1, ab ## 2, x ## 2); \ |
1254 | do16bit_ror(16, xor, xor, Ty3, Ty0, RT0, RT1, ab ## 2, y ## 2); \ |
1255 | - xchgq cd ## 2, ab ## 2; |
1256 | + swap_ab_with_cd(ab ## 2, cd ## 2, RT0); |
1257 | |
1258 | #define enc_round_end(ab, x, y, n) \ |
1259 | addl y ## d, x ## d; \ |
1260 | @@ -168,6 +177,16 @@ |
1261 | decrypt_round3(ba, dc, (n*2)+1); \ |
1262 | decrypt_round3(ba, dc, (n*2)); |
1263 | |
1264 | +#define push_cd() \ |
1265 | + pushq RCD2; \ |
1266 | + pushq RCD1; \ |
1267 | + pushq RCD0; |
1268 | + |
1269 | +#define pop_cd() \ |
1270 | + popq RCD0; \ |
1271 | + popq RCD1; \ |
1272 | + popq RCD2; |
1273 | + |
1274 | #define inpack3(in, n, xy, m) \ |
1275 | movq 4*(n)(in), xy ## 0; \ |
1276 | xorq w+4*m(CTX), xy ## 0; \ |
1277 | @@ -223,11 +242,8 @@ ENTRY(__twofish_enc_blk_3way) |
1278 | * %rdx: src, RIO |
1279 | * %rcx: bool, if true: xor output |
1280 | */ |
1281 | - pushq %r15; |
1282 | - pushq %r14; |
1283 | pushq %r13; |
1284 | pushq %r12; |
1285 | - pushq %rbp; |
1286 | pushq %rbx; |
1287 | |
1288 | pushq %rcx; /* bool xor */ |
1289 | @@ -235,40 +251,36 @@ ENTRY(__twofish_enc_blk_3way) |
1290 | |
1291 | inpack_enc3(); |
1292 | |
1293 | - encrypt_cycle3(RAB, RCD, 0); |
1294 | - encrypt_cycle3(RAB, RCD, 1); |
1295 | - encrypt_cycle3(RAB, RCD, 2); |
1296 | - encrypt_cycle3(RAB, RCD, 3); |
1297 | - encrypt_cycle3(RAB, RCD, 4); |
1298 | - encrypt_cycle3(RAB, RCD, 5); |
1299 | - encrypt_cycle3(RAB, RCD, 6); |
1300 | - encrypt_cycle3(RAB, RCD, 7); |
1301 | + push_cd(); |
1302 | + encrypt_cycle3(RAB, CD, 0); |
1303 | + encrypt_cycle3(RAB, CD, 1); |
1304 | + encrypt_cycle3(RAB, CD, 2); |
1305 | + encrypt_cycle3(RAB, CD, 3); |
1306 | + encrypt_cycle3(RAB, CD, 4); |
1307 | + encrypt_cycle3(RAB, CD, 5); |
1308 | + encrypt_cycle3(RAB, CD, 6); |
1309 | + encrypt_cycle3(RAB, CD, 7); |
1310 | + pop_cd(); |
1311 | |
1312 | popq RIO; /* dst */ |
1313 | - popq %rbp; /* bool xor */ |
1314 | + popq RT1; /* bool xor */ |
1315 | |
1316 | - testb %bpl, %bpl; |
1317 | + testb RT1bl, RT1bl; |
1318 | jnz .L__enc_xor3; |
1319 | |
1320 | outunpack_enc3(mov); |
1321 | |
1322 | popq %rbx; |
1323 | - popq %rbp; |
1324 | popq %r12; |
1325 | popq %r13; |
1326 | - popq %r14; |
1327 | - popq %r15; |
1328 | ret; |
1329 | |
1330 | .L__enc_xor3: |
1331 | outunpack_enc3(xor); |
1332 | |
1333 | popq %rbx; |
1334 | - popq %rbp; |
1335 | popq %r12; |
1336 | popq %r13; |
1337 | - popq %r14; |
1338 | - popq %r15; |
1339 | ret; |
1340 | ENDPROC(__twofish_enc_blk_3way) |
1341 | |
1342 | @@ -278,35 +290,31 @@ ENTRY(twofish_dec_blk_3way) |
1343 | * %rsi: dst |
1344 | * %rdx: src, RIO |
1345 | */ |
1346 | - pushq %r15; |
1347 | - pushq %r14; |
1348 | pushq %r13; |
1349 | pushq %r12; |
1350 | - pushq %rbp; |
1351 | pushq %rbx; |
1352 | |
1353 | pushq %rsi; /* dst */ |
1354 | |
1355 | inpack_dec3(); |
1356 | |
1357 | - decrypt_cycle3(RAB, RCD, 7); |
1358 | - decrypt_cycle3(RAB, RCD, 6); |
1359 | - decrypt_cycle3(RAB, RCD, 5); |
1360 | - decrypt_cycle3(RAB, RCD, 4); |
1361 | - decrypt_cycle3(RAB, RCD, 3); |
1362 | - decrypt_cycle3(RAB, RCD, 2); |
1363 | - decrypt_cycle3(RAB, RCD, 1); |
1364 | - decrypt_cycle3(RAB, RCD, 0); |
1365 | + push_cd(); |
1366 | + decrypt_cycle3(RAB, CD, 7); |
1367 | + decrypt_cycle3(RAB, CD, 6); |
1368 | + decrypt_cycle3(RAB, CD, 5); |
1369 | + decrypt_cycle3(RAB, CD, 4); |
1370 | + decrypt_cycle3(RAB, CD, 3); |
1371 | + decrypt_cycle3(RAB, CD, 2); |
1372 | + decrypt_cycle3(RAB, CD, 1); |
1373 | + decrypt_cycle3(RAB, CD, 0); |
1374 | + pop_cd(); |
1375 | |
1376 | popq RIO; /* dst */ |
1377 | |
1378 | outunpack_dec3(); |
1379 | |
1380 | popq %rbx; |
1381 | - popq %rbp; |
1382 | popq %r12; |
1383 | popq %r13; |
1384 | - popq %r14; |
1385 | - popq %r15; |
1386 | ret; |
1387 | ENDPROC(twofish_dec_blk_3way) |
1388 | diff --git a/arch/x86/events/core.c b/arch/x86/events/core.c |
1389 | index 9604b2574d6c..f73796db8758 100644 |
1390 | --- a/arch/x86/events/core.c |
1391 | +++ b/arch/x86/events/core.c |
1392 | @@ -190,8 +190,8 @@ static void release_pmc_hardware(void) {} |
1393 | |
1394 | static bool check_hw_exists(void) |
1395 | { |
1396 | - u64 val, val_fail, val_new= ~0; |
1397 | - int i, reg, reg_fail, ret = 0; |
1398 | + u64 val, val_fail = -1, val_new= ~0; |
1399 | + int i, reg, reg_fail = -1, ret = 0; |
1400 | int bios_fail = 0; |
1401 | int reg_safe = -1; |
1402 | |
1403 | diff --git a/arch/x86/include/asm/microcode_amd.h b/arch/x86/include/asm/microcode_amd.h |
1404 | index 15eb75484cc0..98ccbd1dbb01 100644 |
1405 | --- a/arch/x86/include/asm/microcode_amd.h |
1406 | +++ b/arch/x86/include/asm/microcode_amd.h |
1407 | @@ -59,7 +59,6 @@ static inline u16 find_equiv_id(struct equiv_cpu_entry *equiv_cpu_table, |
1408 | |
1409 | extern int __apply_microcode_amd(struct microcode_amd *mc_amd); |
1410 | extern int apply_microcode_amd(int cpu); |
1411 | -extern enum ucode_state load_microcode_amd(int cpu, u8 family, const u8 *data, size_t size); |
1412 | |
1413 | #define PATCH_MAX_SIZE PAGE_SIZE |
1414 | |
1415 | diff --git a/arch/x86/include/asm/vmx.h b/arch/x86/include/asm/vmx.h |
1416 | index a002b07a7099..6899cf187ba2 100644 |
1417 | --- a/arch/x86/include/asm/vmx.h |
1418 | +++ b/arch/x86/include/asm/vmx.h |
1419 | @@ -399,10 +399,11 @@ enum vmcs_field { |
1420 | #define IDENTITY_PAGETABLE_PRIVATE_MEMSLOT (KVM_USER_MEM_SLOTS + 2) |
1421 | |
1422 | #define VMX_NR_VPIDS (1 << 16) |
1423 | +#define VMX_VPID_EXTENT_INDIVIDUAL_ADDR 0 |
1424 | #define VMX_VPID_EXTENT_SINGLE_CONTEXT 1 |
1425 | #define VMX_VPID_EXTENT_ALL_CONTEXT 2 |
1426 | +#define VMX_VPID_EXTENT_SINGLE_NON_GLOBAL 3 |
1427 | |
1428 | -#define VMX_EPT_EXTENT_INDIVIDUAL_ADDR 0 |
1429 | #define VMX_EPT_EXTENT_CONTEXT 1 |
1430 | #define VMX_EPT_EXTENT_GLOBAL 2 |
1431 | #define VMX_EPT_EXTENT_SHIFT 24 |
1432 | @@ -419,8 +420,10 @@ enum vmcs_field { |
1433 | #define VMX_EPT_EXTENT_GLOBAL_BIT (1ull << 26) |
1434 | |
1435 | #define VMX_VPID_INVVPID_BIT (1ull << 0) /* (32 - 32) */ |
1436 | +#define VMX_VPID_EXTENT_INDIVIDUAL_ADDR_BIT (1ull << 8) /* (40 - 32) */ |
1437 | #define VMX_VPID_EXTENT_SINGLE_CONTEXT_BIT (1ull << 9) /* (41 - 32) */ |
1438 | #define VMX_VPID_EXTENT_GLOBAL_CONTEXT_BIT (1ull << 10) /* (42 - 32) */ |
1439 | +#define VMX_VPID_EXTENT_SINGLE_NON_GLOBAL_BIT (1ull << 11) /* (43 - 32) */ |
1440 | |
1441 | #define VMX_EPT_DEFAULT_GAW 3 |
1442 | #define VMX_EPT_MAX_GAW 0x4 |
1443 | diff --git a/arch/x86/kernel/cpu/mcheck/mce-inject.c b/arch/x86/kernel/cpu/mcheck/mce-inject.c |
1444 | index 517619ea6498..99165b206df3 100644 |
1445 | --- a/arch/x86/kernel/cpu/mcheck/mce-inject.c |
1446 | +++ b/arch/x86/kernel/cpu/mcheck/mce-inject.c |
1447 | @@ -152,7 +152,6 @@ static void raise_mce(struct mce *m) |
1448 | if (context == MCJ_CTX_RANDOM) |
1449 | return; |
1450 | |
1451 | -#ifdef CONFIG_X86_LOCAL_APIC |
1452 | if (m->inject_flags & (MCJ_IRQ_BROADCAST | MCJ_NMI_BROADCAST)) { |
1453 | unsigned long start; |
1454 | int cpu; |
1455 | @@ -192,9 +191,7 @@ static void raise_mce(struct mce *m) |
1456 | raise_local(); |
1457 | put_cpu(); |
1458 | put_online_cpus(); |
1459 | - } else |
1460 | -#endif |
1461 | - { |
1462 | + } else { |
1463 | preempt_disable(); |
1464 | raise_local(); |
1465 | preempt_enable(); |
1466 | diff --git a/arch/x86/kernel/cpu/microcode/amd.c b/arch/x86/kernel/cpu/microcode/amd.c |
1467 | index b74bb29db6b9..732bb03fcf91 100644 |
1468 | --- a/arch/x86/kernel/cpu/microcode/amd.c |
1469 | +++ b/arch/x86/kernel/cpu/microcode/amd.c |
1470 | @@ -135,6 +135,9 @@ static size_t compute_container_size(u8 *data, u32 total_size) |
1471 | return size; |
1472 | } |
1473 | |
1474 | +static enum ucode_state |
1475 | +load_microcode_amd(bool save, u8 family, const u8 *data, size_t size); |
1476 | + |
1477 | /* |
1478 | * Early load occurs before we can vmalloc(). So we look for the microcode |
1479 | * patch container file in initrd, traverse equivalent cpu table, look for a |
1480 | @@ -451,7 +454,7 @@ int __init save_microcode_in_initrd_amd(void) |
1481 | eax = cpuid_eax(0x00000001); |
1482 | eax = ((eax >> 8) & 0xf) + ((eax >> 20) & 0xff); |
1483 | |
1484 | - ret = load_microcode_amd(smp_processor_id(), eax, container, container_size); |
1485 | + ret = load_microcode_amd(true, eax, container, container_size); |
1486 | if (ret != UCODE_OK) |
1487 | retval = -EINVAL; |
1488 | |
1489 | @@ -864,7 +867,8 @@ static enum ucode_state __load_microcode_amd(u8 family, const u8 *data, |
1490 | return UCODE_OK; |
1491 | } |
1492 | |
1493 | -enum ucode_state load_microcode_amd(int cpu, u8 family, const u8 *data, size_t size) |
1494 | +static enum ucode_state |
1495 | +load_microcode_amd(bool save, u8 family, const u8 *data, size_t size) |
1496 | { |
1497 | enum ucode_state ret; |
1498 | |
1499 | @@ -878,8 +882,8 @@ enum ucode_state load_microcode_amd(int cpu, u8 family, const u8 *data, size_t s |
1500 | |
1501 | #ifdef CONFIG_X86_32 |
1502 | /* save BSP's matching patch for early load */ |
1503 | - if (cpu_data(cpu).cpu_index == boot_cpu_data.cpu_index) { |
1504 | - struct ucode_patch *p = find_patch(cpu); |
1505 | + if (save) { |
1506 | + struct ucode_patch *p = find_patch(0); |
1507 | if (p) { |
1508 | memset(amd_ucode_patch, 0, PATCH_MAX_SIZE); |
1509 | memcpy(amd_ucode_patch, p->data, min_t(u32, ksize(p->data), |
1510 | @@ -911,11 +915,12 @@ static enum ucode_state request_microcode_amd(int cpu, struct device *device, |
1511 | { |
1512 | char fw_name[36] = "amd-ucode/microcode_amd.bin"; |
1513 | struct cpuinfo_x86 *c = &cpu_data(cpu); |
1514 | + bool bsp = c->cpu_index == boot_cpu_data.cpu_index; |
1515 | enum ucode_state ret = UCODE_NFOUND; |
1516 | const struct firmware *fw; |
1517 | |
1518 | /* reload ucode container only on the boot cpu */ |
1519 | - if (!refresh_fw || c->cpu_index != boot_cpu_data.cpu_index) |
1520 | + if (!refresh_fw || !bsp) |
1521 | return UCODE_OK; |
1522 | |
1523 | if (c->x86 >= 0x15) |
1524 | @@ -932,7 +937,7 @@ static enum ucode_state request_microcode_amd(int cpu, struct device *device, |
1525 | goto fw_release; |
1526 | } |
1527 | |
1528 | - ret = load_microcode_amd(cpu, c->x86, fw->data, fw->size); |
1529 | + ret = load_microcode_amd(bsp, c->x86, fw->data, fw->size); |
1530 | |
1531 | fw_release: |
1532 | release_firmware(fw); |
1533 | diff --git a/arch/x86/kernel/vm86_32.c b/arch/x86/kernel/vm86_32.c |
1534 | index 4b3012888ada..8a1d63591399 100644 |
1535 | --- a/arch/x86/kernel/vm86_32.c |
1536 | +++ b/arch/x86/kernel/vm86_32.c |
1537 | @@ -160,11 +160,12 @@ void save_v86_state(struct kernel_vm86_regs *regs, int retval) |
1538 | |
1539 | static void mark_screen_rdonly(struct mm_struct *mm) |
1540 | { |
1541 | + struct vm_area_struct *vma; |
1542 | + spinlock_t *ptl; |
1543 | pgd_t *pgd; |
1544 | pud_t *pud; |
1545 | pmd_t *pmd; |
1546 | pte_t *pte; |
1547 | - spinlock_t *ptl; |
1548 | int i; |
1549 | |
1550 | down_write(&mm->mmap_sem); |
1551 | @@ -177,7 +178,7 @@ static void mark_screen_rdonly(struct mm_struct *mm) |
1552 | pmd = pmd_offset(pud, 0xA0000); |
1553 | |
1554 | if (pmd_trans_huge(*pmd)) { |
1555 | - struct vm_area_struct *vma = find_vma(mm, 0xA0000); |
1556 | + vma = find_vma(mm, 0xA0000); |
1557 | split_huge_pmd(vma, pmd, 0xA0000); |
1558 | } |
1559 | if (pmd_none_or_clear_bad(pmd)) |
1560 | diff --git a/arch/x86/kvm/Kconfig b/arch/x86/kvm/Kconfig |
1561 | index ab8e32f7b9a8..9150e09773cb 100644 |
1562 | --- a/arch/x86/kvm/Kconfig |
1563 | +++ b/arch/x86/kvm/Kconfig |
1564 | @@ -22,7 +22,8 @@ config KVM |
1565 | depends on HAVE_KVM |
1566 | depends on HIGH_RES_TIMERS |
1567 | # for TASKSTATS/TASK_DELAY_ACCT: |
1568 | - depends on NET |
1569 | + depends on NET && MULTIUSER |
1570 | + depends on X86_LOCAL_APIC |
1571 | select PREEMPT_NOTIFIERS |
1572 | select MMU_NOTIFIER |
1573 | select ANON_INODES |
1574 | diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c |
1575 | index 1e16821c1378..c51aaac953b4 100644 |
1576 | --- a/arch/x86/kvm/vmx.c |
1577 | +++ b/arch/x86/kvm/vmx.c |
1578 | @@ -142,6 +142,12 @@ module_param_named(preemption_timer, enable_preemption_timer, bool, S_IRUGO); |
1579 | |
1580 | #define VMX_MISC_EMULATED_PREEMPTION_TIMER_RATE 5 |
1581 | |
1582 | +#define VMX_VPID_EXTENT_SUPPORTED_MASK \ |
1583 | + (VMX_VPID_EXTENT_INDIVIDUAL_ADDR_BIT | \ |
1584 | + VMX_VPID_EXTENT_SINGLE_CONTEXT_BIT | \ |
1585 | + VMX_VPID_EXTENT_GLOBAL_CONTEXT_BIT | \ |
1586 | + VMX_VPID_EXTENT_SINGLE_NON_GLOBAL_BIT) |
1587 | + |
1588 | /* |
1589 | * These 2 parameters are used to config the controls for Pause-Loop Exiting: |
1590 | * ple_gap: upper bound on the amount of time between two successive |
1591 | @@ -2839,8 +2845,7 @@ static void nested_vmx_setup_ctls_msrs(struct vcpu_vmx *vmx) |
1592 | */ |
1593 | if (enable_vpid) |
1594 | vmx->nested.nested_vmx_vpid_caps = VMX_VPID_INVVPID_BIT | |
1595 | - VMX_VPID_EXTENT_SINGLE_CONTEXT_BIT | |
1596 | - VMX_VPID_EXTENT_GLOBAL_CONTEXT_BIT; |
1597 | + VMX_VPID_EXTENT_SUPPORTED_MASK; |
1598 | else |
1599 | vmx->nested.nested_vmx_vpid_caps = 0; |
1600 | |
1601 | @@ -7685,7 +7690,8 @@ static int handle_invvpid(struct kvm_vcpu *vcpu) |
1602 | vmx_instruction_info = vmcs_read32(VMX_INSTRUCTION_INFO); |
1603 | type = kvm_register_readl(vcpu, (vmx_instruction_info >> 28) & 0xf); |
1604 | |
1605 | - types = (vmx->nested.nested_vmx_vpid_caps >> 8) & 0x7; |
1606 | + types = (vmx->nested.nested_vmx_vpid_caps & |
1607 | + VMX_VPID_EXTENT_SUPPORTED_MASK) >> 8; |
1608 | |
1609 | if (type >= 32 || !(types & (1 << type))) { |
1610 | nested_vmx_failValid(vcpu, |
1611 | @@ -7707,21 +7713,27 @@ static int handle_invvpid(struct kvm_vcpu *vcpu) |
1612 | } |
1613 | |
1614 | switch (type) { |
1615 | + case VMX_VPID_EXTENT_INDIVIDUAL_ADDR: |
1616 | case VMX_VPID_EXTENT_SINGLE_CONTEXT: |
1617 | - /* |
1618 | - * Old versions of KVM use the single-context version so we |
1619 | - * have to support it; just treat it the same as all-context. |
1620 | - */ |
1621 | + case VMX_VPID_EXTENT_SINGLE_NON_GLOBAL: |
1622 | + if (!vpid) { |
1623 | + nested_vmx_failValid(vcpu, |
1624 | + VMXERR_INVALID_OPERAND_TO_INVEPT_INVVPID); |
1625 | + skip_emulated_instruction(vcpu); |
1626 | + return 1; |
1627 | + } |
1628 | + break; |
1629 | case VMX_VPID_EXTENT_ALL_CONTEXT: |
1630 | - __vmx_flush_tlb(vcpu, to_vmx(vcpu)->nested.vpid02); |
1631 | - nested_vmx_succeed(vcpu); |
1632 | break; |
1633 | default: |
1634 | - /* Trap individual address invalidation invvpid calls */ |
1635 | - BUG_ON(1); |
1636 | - break; |
1637 | + WARN_ON_ONCE(1); |
1638 | + skip_emulated_instruction(vcpu); |
1639 | + return 1; |
1640 | } |
1641 | |
1642 | + __vmx_flush_tlb(vcpu, vmx->nested.vpid02); |
1643 | + nested_vmx_succeed(vcpu); |
1644 | + |
1645 | skip_emulated_instruction(vcpu); |
1646 | return 1; |
1647 | } |
1648 | diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c |
1649 | index 75f756eac979..4b19ec1da22d 100644 |
1650 | --- a/arch/x86/kvm/x86.c |
1651 | +++ b/arch/x86/kvm/x86.c |
1652 | @@ -2847,6 +2847,12 @@ void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu) |
1653 | kvm_x86_ops->vcpu_put(vcpu); |
1654 | kvm_put_guest_fpu(vcpu); |
1655 | vcpu->arch.last_host_tsc = rdtsc(); |
1656 | + /* |
1657 | + * If userspace has set any breakpoints or watchpoints, dr6 is restored |
1658 | + * on every vmexit, but if not, we might have a stale dr6 from the |
1659 | + * guest. do_debug expects dr6 to be cleared after it runs, do the same. |
1660 | + */ |
1661 | + set_debugreg(0, 6); |
1662 | } |
1663 | |
1664 | static int kvm_vcpu_ioctl_get_lapic(struct kvm_vcpu *vcpu, |
1665 | @@ -8421,6 +8427,13 @@ static int apf_put_user(struct kvm_vcpu *vcpu, u32 val) |
1666 | sizeof(val)); |
1667 | } |
1668 | |
1669 | +static int apf_get_user(struct kvm_vcpu *vcpu, u32 *val) |
1670 | +{ |
1671 | + |
1672 | + return kvm_read_guest_cached(vcpu->kvm, &vcpu->arch.apf.data, val, |
1673 | + sizeof(u32)); |
1674 | +} |
1675 | + |
1676 | void kvm_arch_async_page_not_present(struct kvm_vcpu *vcpu, |
1677 | struct kvm_async_pf *work) |
1678 | { |
1679 | @@ -8447,6 +8460,7 @@ void kvm_arch_async_page_present(struct kvm_vcpu *vcpu, |
1680 | struct kvm_async_pf *work) |
1681 | { |
1682 | struct x86_exception fault; |
1683 | + u32 val; |
1684 | |
1685 | if (work->wakeup_all) |
1686 | work->arch.token = ~0; /* broadcast wakeup */ |
1687 | @@ -8454,14 +8468,24 @@ void kvm_arch_async_page_present(struct kvm_vcpu *vcpu, |
1688 | kvm_del_async_pf_gfn(vcpu, work->arch.gfn); |
1689 | trace_kvm_async_pf_ready(work->arch.token, work->gva); |
1690 | |
1691 | - if ((vcpu->arch.apf.msr_val & KVM_ASYNC_PF_ENABLED) && |
1692 | - !apf_put_user(vcpu, KVM_PV_REASON_PAGE_READY)) { |
1693 | - fault.vector = PF_VECTOR; |
1694 | - fault.error_code_valid = true; |
1695 | - fault.error_code = 0; |
1696 | - fault.nested_page_fault = false; |
1697 | - fault.address = work->arch.token; |
1698 | - kvm_inject_page_fault(vcpu, &fault); |
1699 | + if (vcpu->arch.apf.msr_val & KVM_ASYNC_PF_ENABLED && |
1700 | + !apf_get_user(vcpu, &val)) { |
1701 | + if (val == KVM_PV_REASON_PAGE_NOT_PRESENT && |
1702 | + vcpu->arch.exception.pending && |
1703 | + vcpu->arch.exception.nr == PF_VECTOR && |
1704 | + !apf_put_user(vcpu, 0)) { |
1705 | + vcpu->arch.exception.pending = false; |
1706 | + vcpu->arch.exception.nr = 0; |
1707 | + vcpu->arch.exception.has_error_code = false; |
1708 | + vcpu->arch.exception.error_code = 0; |
1709 | + } else if (!apf_put_user(vcpu, KVM_PV_REASON_PAGE_READY)) { |
1710 | + fault.vector = PF_VECTOR; |
1711 | + fault.error_code_valid = true; |
1712 | + fault.error_code = 0; |
1713 | + fault.nested_page_fault = false; |
1714 | + fault.address = work->arch.token; |
1715 | + kvm_inject_page_fault(vcpu, &fault); |
1716 | + } |
1717 | } |
1718 | vcpu->arch.apf.halted = false; |
1719 | vcpu->arch.mp_state = KVM_MP_STATE_RUNNABLE; |
1720 | diff --git a/arch/x86/math-emu/Makefile b/arch/x86/math-emu/Makefile |
1721 | index 9b0c63b60302..1b2dac174321 100644 |
1722 | --- a/arch/x86/math-emu/Makefile |
1723 | +++ b/arch/x86/math-emu/Makefile |
1724 | @@ -5,8 +5,8 @@ |
1725 | #DEBUG = -DDEBUGGING |
1726 | DEBUG = |
1727 | PARANOID = -DPARANOID |
1728 | -EXTRA_CFLAGS := $(PARANOID) $(DEBUG) -fno-builtin $(MATH_EMULATION) |
1729 | -EXTRA_AFLAGS := $(PARANOID) |
1730 | +ccflags-y += $(PARANOID) $(DEBUG) -fno-builtin $(MATH_EMULATION) |
1731 | +asflags-y += $(PARANOID) |
1732 | |
1733 | # From 'C' language sources: |
1734 | C_OBJS =fpu_entry.o errors.o \ |
1735 | diff --git a/arch/x86/math-emu/reg_compare.c b/arch/x86/math-emu/reg_compare.c |
1736 | index b77360fdbf4a..19b33b50adfa 100644 |
1737 | --- a/arch/x86/math-emu/reg_compare.c |
1738 | +++ b/arch/x86/math-emu/reg_compare.c |
1739 | @@ -168,7 +168,7 @@ static int compare(FPU_REG const *b, int tagb) |
1740 | /* This function requires that st(0) is not empty */ |
1741 | int FPU_compare_st_data(FPU_REG const *loaded_data, u_char loaded_tag) |
1742 | { |
1743 | - int f = 0, c; |
1744 | + int f, c; |
1745 | |
1746 | c = compare(loaded_data, loaded_tag); |
1747 | |
1748 | @@ -189,12 +189,12 @@ int FPU_compare_st_data(FPU_REG const *loaded_data, u_char loaded_tag) |
1749 | case COMP_No_Comp: |
1750 | f = SW_C3 | SW_C2 | SW_C0; |
1751 | break; |
1752 | -#ifdef PARANOID |
1753 | default: |
1754 | +#ifdef PARANOID |
1755 | EXCEPTION(EX_INTERNAL | 0x121); |
1756 | +#endif /* PARANOID */ |
1757 | f = SW_C3 | SW_C2 | SW_C0; |
1758 | break; |
1759 | -#endif /* PARANOID */ |
1760 | } |
1761 | setcc(f); |
1762 | if (c & COMP_Denormal) { |
1763 | @@ -205,7 +205,7 @@ int FPU_compare_st_data(FPU_REG const *loaded_data, u_char loaded_tag) |
1764 | |
1765 | static int compare_st_st(int nr) |
1766 | { |
1767 | - int f = 0, c; |
1768 | + int f, c; |
1769 | FPU_REG *st_ptr; |
1770 | |
1771 | if (!NOT_EMPTY(0) || !NOT_EMPTY(nr)) { |
1772 | @@ -235,12 +235,12 @@ static int compare_st_st(int nr) |
1773 | case COMP_No_Comp: |
1774 | f = SW_C3 | SW_C2 | SW_C0; |
1775 | break; |
1776 | -#ifdef PARANOID |
1777 | default: |
1778 | +#ifdef PARANOID |
1779 | EXCEPTION(EX_INTERNAL | 0x122); |
1780 | +#endif /* PARANOID */ |
1781 | f = SW_C3 | SW_C2 | SW_C0; |
1782 | break; |
1783 | -#endif /* PARANOID */ |
1784 | } |
1785 | setcc(f); |
1786 | if (c & COMP_Denormal) { |
1787 | @@ -283,12 +283,12 @@ static int compare_i_st_st(int nr) |
1788 | case COMP_No_Comp: |
1789 | f = X86_EFLAGS_ZF | X86_EFLAGS_PF | X86_EFLAGS_CF; |
1790 | break; |
1791 | -#ifdef PARANOID |
1792 | default: |
1793 | +#ifdef PARANOID |
1794 | EXCEPTION(EX_INTERNAL | 0x122); |
1795 | +#endif /* PARANOID */ |
1796 | f = 0; |
1797 | break; |
1798 | -#endif /* PARANOID */ |
1799 | } |
1800 | FPU_EFLAGS = (FPU_EFLAGS & ~(X86_EFLAGS_ZF | X86_EFLAGS_PF | X86_EFLAGS_CF)) | f; |
1801 | if (c & COMP_Denormal) { |
1802 | diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c |
1803 | index 7aaa2635862d..ecae9ac216fa 100644 |
1804 | --- a/arch/x86/mm/ioremap.c |
1805 | +++ b/arch/x86/mm/ioremap.c |
1806 | @@ -347,11 +347,11 @@ void iounmap(volatile void __iomem *addr) |
1807 | (void __force *)addr < phys_to_virt(ISA_END_ADDRESS)) |
1808 | return; |
1809 | |
1810 | + mmiotrace_iounmap(addr); |
1811 | + |
1812 | addr = (volatile void __iomem *) |
1813 | (PAGE_MASK & (unsigned long __force)addr); |
1814 | |
1815 | - mmiotrace_iounmap(addr); |
1816 | - |
1817 | /* Use the vm area unlocked, assuming the caller |
1818 | ensures there isn't another iounmap for the same address |
1819 | in parallel. Reuse of the virtual address is prevented by |
1820 | diff --git a/arch/x86/mm/kmmio.c b/arch/x86/mm/kmmio.c |
1821 | index afc47f5c9531..cadb82be5f36 100644 |
1822 | --- a/arch/x86/mm/kmmio.c |
1823 | +++ b/arch/x86/mm/kmmio.c |
1824 | @@ -434,17 +434,18 @@ int register_kmmio_probe(struct kmmio_probe *p) |
1825 | unsigned long flags; |
1826 | int ret = 0; |
1827 | unsigned long size = 0; |
1828 | + unsigned long addr = p->addr & PAGE_MASK; |
1829 | const unsigned long size_lim = p->len + (p->addr & ~PAGE_MASK); |
1830 | unsigned int l; |
1831 | pte_t *pte; |
1832 | |
1833 | spin_lock_irqsave(&kmmio_lock, flags); |
1834 | - if (get_kmmio_probe(p->addr)) { |
1835 | + if (get_kmmio_probe(addr)) { |
1836 | ret = -EEXIST; |
1837 | goto out; |
1838 | } |
1839 | |
1840 | - pte = lookup_address(p->addr, &l); |
1841 | + pte = lookup_address(addr, &l); |
1842 | if (!pte) { |
1843 | ret = -EINVAL; |
1844 | goto out; |
1845 | @@ -453,7 +454,7 @@ int register_kmmio_probe(struct kmmio_probe *p) |
1846 | kmmio_count++; |
1847 | list_add_rcu(&p->list, &kmmio_probes); |
1848 | while (size < size_lim) { |
1849 | - if (add_kmmio_fault_page(p->addr + size)) |
1850 | + if (add_kmmio_fault_page(addr + size)) |
1851 | pr_err("Unable to set page fault.\n"); |
1852 | size += page_level_size(l); |
1853 | } |
1854 | @@ -527,19 +528,20 @@ void unregister_kmmio_probe(struct kmmio_probe *p) |
1855 | { |
1856 | unsigned long flags; |
1857 | unsigned long size = 0; |
1858 | + unsigned long addr = p->addr & PAGE_MASK; |
1859 | const unsigned long size_lim = p->len + (p->addr & ~PAGE_MASK); |
1860 | struct kmmio_fault_page *release_list = NULL; |
1861 | struct kmmio_delayed_release *drelease; |
1862 | unsigned int l; |
1863 | pte_t *pte; |
1864 | |
1865 | - pte = lookup_address(p->addr, &l); |
1866 | + pte = lookup_address(addr, &l); |
1867 | if (!pte) |
1868 | return; |
1869 | |
1870 | spin_lock_irqsave(&kmmio_lock, flags); |
1871 | while (size < size_lim) { |
1872 | - release_kmmio_fault_page(p->addr + size, &release_list); |
1873 | + release_kmmio_fault_page(addr + size, &release_list); |
1874 | size += page_level_size(l); |
1875 | } |
1876 | list_del_rcu(&p->list); |
1877 | diff --git a/block/blk-map.c b/block/blk-map.c |
1878 | index 27fd8d92892d..a8b4f526d8bb 100644 |
1879 | --- a/block/blk-map.c |
1880 | +++ b/block/blk-map.c |
1881 | @@ -116,7 +116,7 @@ int blk_rq_map_user_iov(struct request_queue *q, struct request *rq, |
1882 | unsigned long align = q->dma_pad_mask | queue_dma_alignment(q); |
1883 | struct bio *bio = NULL; |
1884 | struct iov_iter i; |
1885 | - int ret; |
1886 | + int ret = -EINVAL; |
1887 | |
1888 | if (!iter_is_iovec(iter)) |
1889 | goto fail; |
1890 | @@ -145,7 +145,7 @@ int blk_rq_map_user_iov(struct request_queue *q, struct request *rq, |
1891 | __blk_rq_unmap_user(bio); |
1892 | fail: |
1893 | rq->bio = NULL; |
1894 | - return -EINVAL; |
1895 | + return ret; |
1896 | } |
1897 | EXPORT_SYMBOL(blk_rq_map_user_iov); |
1898 | |
1899 | diff --git a/crypto/ahash.c b/crypto/ahash.c |
1900 | index f3fa104de479..14402ef6d826 100644 |
1901 | --- a/crypto/ahash.c |
1902 | +++ b/crypto/ahash.c |
1903 | @@ -192,11 +192,18 @@ int crypto_ahash_setkey(struct crypto_ahash *tfm, const u8 *key, |
1904 | unsigned int keylen) |
1905 | { |
1906 | unsigned long alignmask = crypto_ahash_alignmask(tfm); |
1907 | + int err; |
1908 | |
1909 | if ((unsigned long)key & alignmask) |
1910 | - return ahash_setkey_unaligned(tfm, key, keylen); |
1911 | + err = ahash_setkey_unaligned(tfm, key, keylen); |
1912 | + else |
1913 | + err = tfm->setkey(tfm, key, keylen); |
1914 | + |
1915 | + if (err) |
1916 | + return err; |
1917 | |
1918 | - return tfm->setkey(tfm, key, keylen); |
1919 | + crypto_ahash_clear_flags(tfm, CRYPTO_TFM_NEED_KEY); |
1920 | + return 0; |
1921 | } |
1922 | EXPORT_SYMBOL_GPL(crypto_ahash_setkey); |
1923 | |
1924 | @@ -369,7 +376,12 @@ EXPORT_SYMBOL_GPL(crypto_ahash_finup); |
1925 | |
1926 | int crypto_ahash_digest(struct ahash_request *req) |
1927 | { |
1928 | - return crypto_ahash_op(req, crypto_ahash_reqtfm(req)->digest); |
1929 | + struct crypto_ahash *tfm = crypto_ahash_reqtfm(req); |
1930 | + |
1931 | + if (crypto_ahash_get_flags(tfm) & CRYPTO_TFM_NEED_KEY) |
1932 | + return -ENOKEY; |
1933 | + |
1934 | + return crypto_ahash_op(req, tfm->digest); |
1935 | } |
1936 | EXPORT_SYMBOL_GPL(crypto_ahash_digest); |
1937 | |
1938 | @@ -455,7 +467,6 @@ static int crypto_ahash_init_tfm(struct crypto_tfm *tfm) |
1939 | struct ahash_alg *alg = crypto_ahash_alg(hash); |
1940 | |
1941 | hash->setkey = ahash_nosetkey; |
1942 | - hash->has_setkey = false; |
1943 | hash->export = ahash_no_export; |
1944 | hash->import = ahash_no_import; |
1945 | |
1946 | @@ -470,7 +481,8 @@ static int crypto_ahash_init_tfm(struct crypto_tfm *tfm) |
1947 | |
1948 | if (alg->setkey) { |
1949 | hash->setkey = alg->setkey; |
1950 | - hash->has_setkey = true; |
1951 | + if (!(alg->halg.base.cra_flags & CRYPTO_ALG_OPTIONAL_KEY)) |
1952 | + crypto_ahash_set_flags(hash, CRYPTO_TFM_NEED_KEY); |
1953 | } |
1954 | if (alg->export) |
1955 | hash->export = alg->export; |
1956 | diff --git a/crypto/algif_hash.c b/crypto/algif_hash.c |
1957 | index 54fc90e8339c..731b5fb8567b 100644 |
1958 | --- a/crypto/algif_hash.c |
1959 | +++ b/crypto/algif_hash.c |
1960 | @@ -34,11 +34,6 @@ struct hash_ctx { |
1961 | struct ahash_request req; |
1962 | }; |
1963 | |
1964 | -struct algif_hash_tfm { |
1965 | - struct crypto_ahash *hash; |
1966 | - bool has_key; |
1967 | -}; |
1968 | - |
1969 | static int hash_alloc_result(struct sock *sk, struct hash_ctx *ctx) |
1970 | { |
1971 | unsigned ds; |
1972 | @@ -308,7 +303,7 @@ static int hash_check_key(struct socket *sock) |
1973 | int err = 0; |
1974 | struct sock *psk; |
1975 | struct alg_sock *pask; |
1976 | - struct algif_hash_tfm *tfm; |
1977 | + struct crypto_ahash *tfm; |
1978 | struct sock *sk = sock->sk; |
1979 | struct alg_sock *ask = alg_sk(sk); |
1980 | |
1981 | @@ -322,7 +317,7 @@ static int hash_check_key(struct socket *sock) |
1982 | |
1983 | err = -ENOKEY; |
1984 | lock_sock_nested(psk, SINGLE_DEPTH_NESTING); |
1985 | - if (!tfm->has_key) |
1986 | + if (crypto_ahash_get_flags(tfm) & CRYPTO_TFM_NEED_KEY) |
1987 | goto unlock; |
1988 | |
1989 | if (!pask->refcnt++) |
1990 | @@ -413,41 +408,17 @@ static struct proto_ops algif_hash_ops_nokey = { |
1991 | |
1992 | static void *hash_bind(const char *name, u32 type, u32 mask) |
1993 | { |
1994 | - struct algif_hash_tfm *tfm; |
1995 | - struct crypto_ahash *hash; |
1996 | - |
1997 | - tfm = kzalloc(sizeof(*tfm), GFP_KERNEL); |
1998 | - if (!tfm) |
1999 | - return ERR_PTR(-ENOMEM); |
2000 | - |
2001 | - hash = crypto_alloc_ahash(name, type, mask); |
2002 | - if (IS_ERR(hash)) { |
2003 | - kfree(tfm); |
2004 | - return ERR_CAST(hash); |
2005 | - } |
2006 | - |
2007 | - tfm->hash = hash; |
2008 | - |
2009 | - return tfm; |
2010 | + return crypto_alloc_ahash(name, type, mask); |
2011 | } |
2012 | |
2013 | static void hash_release(void *private) |
2014 | { |
2015 | - struct algif_hash_tfm *tfm = private; |
2016 | - |
2017 | - crypto_free_ahash(tfm->hash); |
2018 | - kfree(tfm); |
2019 | + crypto_free_ahash(private); |
2020 | } |
2021 | |
2022 | static int hash_setkey(void *private, const u8 *key, unsigned int keylen) |
2023 | { |
2024 | - struct algif_hash_tfm *tfm = private; |
2025 | - int err; |
2026 | - |
2027 | - err = crypto_ahash_setkey(tfm->hash, key, keylen); |
2028 | - tfm->has_key = !err; |
2029 | - |
2030 | - return err; |
2031 | + return crypto_ahash_setkey(private, key, keylen); |
2032 | } |
2033 | |
2034 | static void hash_sock_destruct(struct sock *sk) |
2035 | @@ -462,11 +433,10 @@ static void hash_sock_destruct(struct sock *sk) |
2036 | |
2037 | static int hash_accept_parent_nokey(void *private, struct sock *sk) |
2038 | { |
2039 | - struct hash_ctx *ctx; |
2040 | + struct crypto_ahash *tfm = private; |
2041 | struct alg_sock *ask = alg_sk(sk); |
2042 | - struct algif_hash_tfm *tfm = private; |
2043 | - struct crypto_ahash *hash = tfm->hash; |
2044 | - unsigned len = sizeof(*ctx) + crypto_ahash_reqsize(hash); |
2045 | + struct hash_ctx *ctx; |
2046 | + unsigned int len = sizeof(*ctx) + crypto_ahash_reqsize(tfm); |
2047 | |
2048 | ctx = sock_kmalloc(sk, len, GFP_KERNEL); |
2049 | if (!ctx) |
2050 | @@ -479,7 +449,7 @@ static int hash_accept_parent_nokey(void *private, struct sock *sk) |
2051 | |
2052 | ask->private = ctx; |
2053 | |
2054 | - ahash_request_set_tfm(&ctx->req, hash); |
2055 | + ahash_request_set_tfm(&ctx->req, tfm); |
2056 | ahash_request_set_callback(&ctx->req, CRYPTO_TFM_REQ_MAY_BACKLOG, |
2057 | af_alg_complete, &ctx->completion); |
2058 | |
2059 | @@ -490,9 +460,9 @@ static int hash_accept_parent_nokey(void *private, struct sock *sk) |
2060 | |
2061 | static int hash_accept_parent(void *private, struct sock *sk) |
2062 | { |
2063 | - struct algif_hash_tfm *tfm = private; |
2064 | + struct crypto_ahash *tfm = private; |
2065 | |
2066 | - if (!tfm->has_key && crypto_ahash_has_setkey(tfm->hash)) |
2067 | + if (crypto_ahash_get_flags(tfm) & CRYPTO_TFM_NEED_KEY) |
2068 | return -ENOKEY; |
2069 | |
2070 | return hash_accept_parent_nokey(private, sk); |
2071 | diff --git a/crypto/crc32_generic.c b/crypto/crc32_generic.c |
2072 | index aa2a25fc7482..718cbce8d169 100644 |
2073 | --- a/crypto/crc32_generic.c |
2074 | +++ b/crypto/crc32_generic.c |
2075 | @@ -133,6 +133,7 @@ static struct shash_alg alg = { |
2076 | .cra_name = "crc32", |
2077 | .cra_driver_name = "crc32-generic", |
2078 | .cra_priority = 100, |
2079 | + .cra_flags = CRYPTO_ALG_OPTIONAL_KEY, |
2080 | .cra_blocksize = CHKSUM_BLOCK_SIZE, |
2081 | .cra_ctxsize = sizeof(u32), |
2082 | .cra_module = THIS_MODULE, |
2083 | diff --git a/crypto/crc32c_generic.c b/crypto/crc32c_generic.c |
2084 | index 4c0a0e271876..372320399622 100644 |
2085 | --- a/crypto/crc32c_generic.c |
2086 | +++ b/crypto/crc32c_generic.c |
2087 | @@ -146,6 +146,7 @@ static struct shash_alg alg = { |
2088 | .cra_name = "crc32c", |
2089 | .cra_driver_name = "crc32c-generic", |
2090 | .cra_priority = 100, |
2091 | + .cra_flags = CRYPTO_ALG_OPTIONAL_KEY, |
2092 | .cra_blocksize = CHKSUM_BLOCK_SIZE, |
2093 | .cra_alignmask = 3, |
2094 | .cra_ctxsize = sizeof(struct chksum_ctx), |
2095 | diff --git a/crypto/cryptd.c b/crypto/cryptd.c |
2096 | index af9ad45d1909..9b66ce7e728d 100644 |
2097 | --- a/crypto/cryptd.c |
2098 | +++ b/crypto/cryptd.c |
2099 | @@ -673,10 +673,9 @@ static int cryptd_create_hash(struct crypto_template *tmpl, struct rtattr **tb, |
2100 | if (err) |
2101 | goto out_free_inst; |
2102 | |
2103 | - type = CRYPTO_ALG_ASYNC; |
2104 | - if (alg->cra_flags & CRYPTO_ALG_INTERNAL) |
2105 | - type |= CRYPTO_ALG_INTERNAL; |
2106 | - inst->alg.halg.base.cra_flags = type; |
2107 | + inst->alg.halg.base.cra_flags = CRYPTO_ALG_ASYNC | |
2108 | + (alg->cra_flags & (CRYPTO_ALG_INTERNAL | |
2109 | + CRYPTO_ALG_OPTIONAL_KEY)); |
2110 | |
2111 | inst->alg.halg.digestsize = salg->digestsize; |
2112 | inst->alg.halg.statesize = salg->statesize; |
2113 | diff --git a/crypto/mcryptd.c b/crypto/mcryptd.c |
2114 | index 6e9389c8bfbd..7406ed0745be 100644 |
2115 | --- a/crypto/mcryptd.c |
2116 | +++ b/crypto/mcryptd.c |
2117 | @@ -516,10 +516,9 @@ static int mcryptd_create_hash(struct crypto_template *tmpl, struct rtattr **tb, |
2118 | if (err) |
2119 | goto out_free_inst; |
2120 | |
2121 | - type = CRYPTO_ALG_ASYNC; |
2122 | - if (alg->cra_flags & CRYPTO_ALG_INTERNAL) |
2123 | - type |= CRYPTO_ALG_INTERNAL; |
2124 | - inst->alg.halg.base.cra_flags = type; |
2125 | + inst->alg.halg.base.cra_flags = CRYPTO_ALG_ASYNC | |
2126 | + (alg->cra_flags & (CRYPTO_ALG_INTERNAL | |
2127 | + CRYPTO_ALG_OPTIONAL_KEY)); |
2128 | |
2129 | inst->alg.halg.digestsize = halg->digestsize; |
2130 | inst->alg.halg.statesize = halg->statesize; |
2131 | diff --git a/crypto/shash.c b/crypto/shash.c |
2132 | index 9bd5044d467b..d5bd2f05d036 100644 |
2133 | --- a/crypto/shash.c |
2134 | +++ b/crypto/shash.c |
2135 | @@ -57,11 +57,18 @@ int crypto_shash_setkey(struct crypto_shash *tfm, const u8 *key, |
2136 | { |
2137 | struct shash_alg *shash = crypto_shash_alg(tfm); |
2138 | unsigned long alignmask = crypto_shash_alignmask(tfm); |
2139 | + int err; |
2140 | |
2141 | if ((unsigned long)key & alignmask) |
2142 | - return shash_setkey_unaligned(tfm, key, keylen); |
2143 | + err = shash_setkey_unaligned(tfm, key, keylen); |
2144 | + else |
2145 | + err = shash->setkey(tfm, key, keylen); |
2146 | + |
2147 | + if (err) |
2148 | + return err; |
2149 | |
2150 | - return shash->setkey(tfm, key, keylen); |
2151 | + crypto_shash_clear_flags(tfm, CRYPTO_TFM_NEED_KEY); |
2152 | + return 0; |
2153 | } |
2154 | EXPORT_SYMBOL_GPL(crypto_shash_setkey); |
2155 | |
2156 | @@ -180,6 +187,9 @@ int crypto_shash_digest(struct shash_desc *desc, const u8 *data, |
2157 | struct shash_alg *shash = crypto_shash_alg(tfm); |
2158 | unsigned long alignmask = crypto_shash_alignmask(tfm); |
2159 | |
2160 | + if (crypto_shash_get_flags(tfm) & CRYPTO_TFM_NEED_KEY) |
2161 | + return -ENOKEY; |
2162 | + |
2163 | if (((unsigned long)data | (unsigned long)out) & alignmask) |
2164 | return shash_digest_unaligned(desc, data, len, out); |
2165 | |
2166 | @@ -359,7 +369,8 @@ int crypto_init_shash_ops_async(struct crypto_tfm *tfm) |
2167 | crt->digest = shash_async_digest; |
2168 | crt->setkey = shash_async_setkey; |
2169 | |
2170 | - crt->has_setkey = alg->setkey != shash_no_setkey; |
2171 | + crypto_ahash_set_flags(crt, crypto_shash_get_flags(shash) & |
2172 | + CRYPTO_TFM_NEED_KEY); |
2173 | |
2174 | if (alg->export) |
2175 | crt->export = shash_async_export; |
2176 | @@ -374,8 +385,14 @@ int crypto_init_shash_ops_async(struct crypto_tfm *tfm) |
2177 | static int crypto_shash_init_tfm(struct crypto_tfm *tfm) |
2178 | { |
2179 | struct crypto_shash *hash = __crypto_shash_cast(tfm); |
2180 | + struct shash_alg *alg = crypto_shash_alg(hash); |
2181 | + |
2182 | + hash->descsize = alg->descsize; |
2183 | + |
2184 | + if (crypto_shash_alg_has_setkey(alg) && |
2185 | + !(alg->base.cra_flags & CRYPTO_ALG_OPTIONAL_KEY)) |
2186 | + crypto_shash_set_flags(hash, CRYPTO_TFM_NEED_KEY); |
2187 | |
2188 | - hash->descsize = crypto_shash_alg(hash)->descsize; |
2189 | return 0; |
2190 | } |
2191 | |
2192 | diff --git a/drivers/Makefile b/drivers/Makefile |
2193 | index 733bf0b2613f..7c3d58dcf6b3 100644 |
2194 | --- a/drivers/Makefile |
2195 | +++ b/drivers/Makefile |
2196 | @@ -99,6 +99,7 @@ obj-$(CONFIG_TC) += tc/ |
2197 | obj-$(CONFIG_UWB) += uwb/ |
2198 | obj-$(CONFIG_USB_PHY) += usb/ |
2199 | obj-$(CONFIG_USB) += usb/ |
2200 | +obj-$(CONFIG_USB_SUPPORT) += usb/ |
2201 | obj-$(CONFIG_PCI) += usb/ |
2202 | obj-$(CONFIG_USB_GADGET) += usb/ |
2203 | obj-$(CONFIG_OF) += usb/ |
2204 | diff --git a/drivers/android/binder.c b/drivers/android/binder.c |
2205 | index 15009b2b33c7..3b6ac80b2127 100644 |
2206 | --- a/drivers/android/binder.c |
2207 | +++ b/drivers/android/binder.c |
2208 | @@ -2628,6 +2628,8 @@ static unsigned int binder_poll(struct file *filp, |
2209 | binder_lock(__func__); |
2210 | |
2211 | thread = binder_get_thread(proc); |
2212 | + if (!thread) |
2213 | + return POLLERR; |
2214 | |
2215 | wait_for_proc_work = thread->transaction_stack == NULL && |
2216 | list_empty(&thread->todo) && thread->return_error == BR_OK; |
2217 | diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c |
2218 | index e32badd26c8a..343cad9bf7e7 100644 |
2219 | --- a/drivers/block/rbd.c |
2220 | +++ b/drivers/block/rbd.c |
2221 | @@ -3756,7 +3756,7 @@ static void rbd_watch_cb(void *arg, u64 notify_id, u64 cookie, |
2222 | struct rbd_device *rbd_dev = arg; |
2223 | void *p = data; |
2224 | void *const end = p + data_len; |
2225 | - u8 struct_v; |
2226 | + u8 struct_v = 0; |
2227 | u32 len; |
2228 | u32 notify_op; |
2229 | int ret; |
2230 | diff --git a/drivers/clk/meson/Kconfig b/drivers/clk/meson/Kconfig |
2231 | index 19480bcc7046..2f29ee1a4d00 100644 |
2232 | --- a/drivers/clk/meson/Kconfig |
2233 | +++ b/drivers/clk/meson/Kconfig |
2234 | @@ -14,6 +14,7 @@ config COMMON_CLK_MESON8B |
2235 | config COMMON_CLK_GXBB |
2236 | bool |
2237 | depends on COMMON_CLK_AMLOGIC |
2238 | + select RESET_CONTROLLER |
2239 | help |
2240 | Support for the clock controller on AmLogic S905 devices, aka gxbb. |
2241 | Say Y if you want peripherals and CPU frequency scaling to work. |
2242 | diff --git a/drivers/clk/sunxi-ng/Kconfig b/drivers/clk/sunxi-ng/Kconfig |
2243 | index 254d9526c018..4e8e9bc8f3e5 100644 |
2244 | --- a/drivers/clk/sunxi-ng/Kconfig |
2245 | +++ b/drivers/clk/sunxi-ng/Kconfig |
2246 | @@ -1,6 +1,7 @@ |
2247 | config SUNXI_CCU |
2248 | bool "Clock support for Allwinner SoCs" |
2249 | depends on ARCH_SUNXI || COMPILE_TEST |
2250 | + select RESET_CONTROLLER |
2251 | default ARCH_SUNXI |
2252 | |
2253 | if SUNXI_CCU |
2254 | diff --git a/drivers/crypto/bfin_crc.c b/drivers/crypto/bfin_crc.c |
2255 | index 10db7df366c8..2ee11802992f 100644 |
2256 | --- a/drivers/crypto/bfin_crc.c |
2257 | +++ b/drivers/crypto/bfin_crc.c |
2258 | @@ -494,7 +494,8 @@ static struct ahash_alg algs = { |
2259 | .cra_driver_name = DRIVER_NAME, |
2260 | .cra_priority = 100, |
2261 | .cra_flags = CRYPTO_ALG_TYPE_AHASH | |
2262 | - CRYPTO_ALG_ASYNC, |
2263 | + CRYPTO_ALG_ASYNC | |
2264 | + CRYPTO_ALG_OPTIONAL_KEY, |
2265 | .cra_blocksize = CHKSUM_BLOCK_SIZE, |
2266 | .cra_ctxsize = sizeof(struct bfin_crypto_crc_ctx), |
2267 | .cra_alignmask = 3, |
2268 | diff --git a/drivers/crypto/s5p-sss.c b/drivers/crypto/s5p-sss.c |
2269 | index a668286d62cb..500e4090e2fd 100644 |
2270 | --- a/drivers/crypto/s5p-sss.c |
2271 | +++ b/drivers/crypto/s5p-sss.c |
2272 | @@ -542,15 +542,21 @@ static void s5p_aes_crypt_start(struct s5p_aes_dev *dev, unsigned long mode) |
2273 | uint32_t aes_control; |
2274 | unsigned long flags; |
2275 | int err; |
2276 | + u8 *iv; |
2277 | |
2278 | aes_control = SSS_AES_KEY_CHANGE_MODE; |
2279 | if (mode & FLAGS_AES_DECRYPT) |
2280 | aes_control |= SSS_AES_MODE_DECRYPT; |
2281 | |
2282 | - if ((mode & FLAGS_AES_MODE_MASK) == FLAGS_AES_CBC) |
2283 | + if ((mode & FLAGS_AES_MODE_MASK) == FLAGS_AES_CBC) { |
2284 | aes_control |= SSS_AES_CHAIN_MODE_CBC; |
2285 | - else if ((mode & FLAGS_AES_MODE_MASK) == FLAGS_AES_CTR) |
2286 | + iv = req->info; |
2287 | + } else if ((mode & FLAGS_AES_MODE_MASK) == FLAGS_AES_CTR) { |
2288 | aes_control |= SSS_AES_CHAIN_MODE_CTR; |
2289 | + iv = req->info; |
2290 | + } else { |
2291 | + iv = NULL; /* AES_ECB */ |
2292 | + } |
2293 | |
2294 | if (dev->ctx->keylen == AES_KEYSIZE_192) |
2295 | aes_control |= SSS_AES_KEY_SIZE_192; |
2296 | @@ -581,7 +587,7 @@ static void s5p_aes_crypt_start(struct s5p_aes_dev *dev, unsigned long mode) |
2297 | goto outdata_error; |
2298 | |
2299 | SSS_AES_WRITE(dev, AES_CONTROL, aes_control); |
2300 | - s5p_set_aes(dev, dev->ctx->aes_key, req->info, dev->ctx->keylen); |
2301 | + s5p_set_aes(dev, dev->ctx->aes_key, iv, dev->ctx->keylen); |
2302 | |
2303 | s5p_set_dma_indata(dev, dev->sg_src); |
2304 | s5p_set_dma_outdata(dev, dev->sg_dst); |
2305 | diff --git a/drivers/crypto/talitos.c b/drivers/crypto/talitos.c |
2306 | index 1c8d79d93098..42c060c7ae15 100644 |
2307 | --- a/drivers/crypto/talitos.c |
2308 | +++ b/drivers/crypto/talitos.c |
2309 | @@ -1124,6 +1124,11 @@ int talitos_sg_map(struct device *dev, struct scatterlist *src, |
2310 | struct talitos_private *priv = dev_get_drvdata(dev); |
2311 | bool is_sec1 = has_ftr_sec1(priv); |
2312 | |
2313 | + if (!src) { |
2314 | + *ptr = zero_entry; |
2315 | + return 1; |
2316 | + } |
2317 | + |
2318 | to_talitos_ptr_len(ptr, len, is_sec1); |
2319 | to_talitos_ptr_ext_set(ptr, 0, is_sec1); |
2320 | |
2321 | diff --git a/drivers/dma/at_hdmac.c b/drivers/dma/at_hdmac.c |
2322 | index a4c8f80db29d..e2cec5b357fd 100644 |
2323 | --- a/drivers/dma/at_hdmac.c |
2324 | +++ b/drivers/dma/at_hdmac.c |
2325 | @@ -709,7 +709,7 @@ atc_prep_dma_interleaved(struct dma_chan *chan, |
2326 | unsigned long flags) |
2327 | { |
2328 | struct at_dma_chan *atchan = to_at_dma_chan(chan); |
2329 | - struct data_chunk *first = xt->sgl; |
2330 | + struct data_chunk *first; |
2331 | struct at_desc *desc = NULL; |
2332 | size_t xfer_count; |
2333 | unsigned int dwidth; |
2334 | @@ -721,6 +721,8 @@ atc_prep_dma_interleaved(struct dma_chan *chan, |
2335 | if (unlikely(!xt || xt->numf != 1 || !xt->frame_size)) |
2336 | return NULL; |
2337 | |
2338 | + first = xt->sgl; |
2339 | + |
2340 | dev_info(chan2dev(chan), |
2341 | "%s: src=%pad, dest=%pad, numf=%d, frame_size=%d, flags=0x%lx\n", |
2342 | __func__, &xt->src_start, &xt->dst_start, xt->numf, |
2343 | diff --git a/drivers/dma/dma-jz4740.c b/drivers/dma/dma-jz4740.c |
2344 | index d50273fed715..afd5e10f8927 100644 |
2345 | --- a/drivers/dma/dma-jz4740.c |
2346 | +++ b/drivers/dma/dma-jz4740.c |
2347 | @@ -555,7 +555,7 @@ static int jz4740_dma_probe(struct platform_device *pdev) |
2348 | |
2349 | ret = dma_async_device_register(dd); |
2350 | if (ret) |
2351 | - return ret; |
2352 | + goto err_clk; |
2353 | |
2354 | irq = platform_get_irq(pdev, 0); |
2355 | ret = request_irq(irq, jz4740_dma_irq, 0, dev_name(&pdev->dev), dmadev); |
2356 | @@ -568,6 +568,8 @@ static int jz4740_dma_probe(struct platform_device *pdev) |
2357 | |
2358 | err_unregister: |
2359 | dma_async_device_unregister(dd); |
2360 | +err_clk: |
2361 | + clk_disable_unprepare(dmadev->clk); |
2362 | return ret; |
2363 | } |
2364 | |
2365 | diff --git a/drivers/dma/ioat/init.c b/drivers/dma/ioat/init.c |
2366 | index 0dea6d55f0ff..84eb83eb2efe 100644 |
2367 | --- a/drivers/dma/ioat/init.c |
2368 | +++ b/drivers/dma/ioat/init.c |
2369 | @@ -388,7 +388,7 @@ static int ioat_dma_self_test(struct ioatdma_device *ioat_dma) |
2370 | if (memcmp(src, dest, IOAT_TEST_SIZE)) { |
2371 | dev_err(dev, "Self-test copy failed compare, disabling\n"); |
2372 | err = -ENODEV; |
2373 | - goto free_resources; |
2374 | + goto unmap_dma; |
2375 | } |
2376 | |
2377 | unmap_dma: |
2378 | diff --git a/drivers/dma/zx296702_dma.c b/drivers/dma/zx296702_dma.c |
2379 | index 6059d81e701a..8e55403847b2 100644 |
2380 | --- a/drivers/dma/zx296702_dma.c |
2381 | +++ b/drivers/dma/zx296702_dma.c |
2382 | @@ -26,7 +26,7 @@ |
2383 | |
2384 | #define DRIVER_NAME "zx-dma" |
2385 | #define DMA_ALIGN 4 |
2386 | -#define DMA_MAX_SIZE (0x10000 - PAGE_SIZE) |
2387 | +#define DMA_MAX_SIZE (0x10000 - 512) |
2388 | #define LLI_BLOCK_SIZE (4 * PAGE_SIZE) |
2389 | |
2390 | #define REG_ZX_SRC_ADDR 0x00 |
2391 | diff --git a/drivers/gpio/gpio-intel-mid.c b/drivers/gpio/gpio-intel-mid.c |
2392 | index 164de64b11fc..9d46af0c4084 100644 |
2393 | --- a/drivers/gpio/gpio-intel-mid.c |
2394 | +++ b/drivers/gpio/gpio-intel-mid.c |
2395 | @@ -321,7 +321,7 @@ static void intel_mid_irq_init_hw(struct intel_mid_gpio *priv) |
2396 | } |
2397 | } |
2398 | |
2399 | -static int intel_gpio_runtime_idle(struct device *dev) |
2400 | +static int __maybe_unused intel_gpio_runtime_idle(struct device *dev) |
2401 | { |
2402 | int err = pm_schedule_suspend(dev, 500); |
2403 | return err ?: -EBUSY; |
2404 | diff --git a/drivers/gpio/gpio-xgene.c b/drivers/gpio/gpio-xgene.c |
2405 | index 40a8881c2ce8..f1c6ec17b90a 100644 |
2406 | --- a/drivers/gpio/gpio-xgene.c |
2407 | +++ b/drivers/gpio/gpio-xgene.c |
2408 | @@ -42,9 +42,7 @@ struct xgene_gpio { |
2409 | struct gpio_chip chip; |
2410 | void __iomem *base; |
2411 | spinlock_t lock; |
2412 | -#ifdef CONFIG_PM |
2413 | u32 set_dr_val[XGENE_MAX_GPIO_BANKS]; |
2414 | -#endif |
2415 | }; |
2416 | |
2417 | static int xgene_gpio_get(struct gpio_chip *gc, unsigned int offset) |
2418 | @@ -138,8 +136,7 @@ static int xgene_gpio_dir_out(struct gpio_chip *gc, |
2419 | return 0; |
2420 | } |
2421 | |
2422 | -#ifdef CONFIG_PM |
2423 | -static int xgene_gpio_suspend(struct device *dev) |
2424 | +static __maybe_unused int xgene_gpio_suspend(struct device *dev) |
2425 | { |
2426 | struct xgene_gpio *gpio = dev_get_drvdata(dev); |
2427 | unsigned long bank_offset; |
2428 | @@ -152,7 +149,7 @@ static int xgene_gpio_suspend(struct device *dev) |
2429 | return 0; |
2430 | } |
2431 | |
2432 | -static int xgene_gpio_resume(struct device *dev) |
2433 | +static __maybe_unused int xgene_gpio_resume(struct device *dev) |
2434 | { |
2435 | struct xgene_gpio *gpio = dev_get_drvdata(dev); |
2436 | unsigned long bank_offset; |
2437 | @@ -166,10 +163,6 @@ static int xgene_gpio_resume(struct device *dev) |
2438 | } |
2439 | |
2440 | static SIMPLE_DEV_PM_OPS(xgene_gpio_pm, xgene_gpio_suspend, xgene_gpio_resume); |
2441 | -#define XGENE_GPIO_PM_OPS (&xgene_gpio_pm) |
2442 | -#else |
2443 | -#define XGENE_GPIO_PM_OPS NULL |
2444 | -#endif |
2445 | |
2446 | static int xgene_gpio_probe(struct platform_device *pdev) |
2447 | { |
2448 | @@ -241,7 +234,7 @@ static struct platform_driver xgene_gpio_driver = { |
2449 | .name = "xgene-gpio", |
2450 | .of_match_table = xgene_gpio_of_match, |
2451 | .acpi_match_table = ACPI_PTR(xgene_gpio_acpi_match), |
2452 | - .pm = XGENE_GPIO_PM_OPS, |
2453 | + .pm = &xgene_gpio_pm, |
2454 | }, |
2455 | .probe = xgene_gpio_probe, |
2456 | }; |
2457 | diff --git a/drivers/gpu/drm/armada/armada_crtc.c b/drivers/gpu/drm/armada/armada_crtc.c |
2458 | index a51f8cbcfe26..3137adf7b0af 100644 |
2459 | --- a/drivers/gpu/drm/armada/armada_crtc.c |
2460 | +++ b/drivers/gpu/drm/armada/armada_crtc.c |
2461 | @@ -1178,17 +1178,13 @@ static int armada_drm_crtc_create(struct drm_device *drm, struct device *dev, |
2462 | |
2463 | ret = devm_request_irq(dev, irq, armada_drm_irq, 0, "armada_drm_crtc", |
2464 | dcrtc); |
2465 | - if (ret < 0) { |
2466 | - kfree(dcrtc); |
2467 | - return ret; |
2468 | - } |
2469 | + if (ret < 0) |
2470 | + goto err_crtc; |
2471 | |
2472 | if (dcrtc->variant->init) { |
2473 | ret = dcrtc->variant->init(dcrtc, dev); |
2474 | - if (ret) { |
2475 | - kfree(dcrtc); |
2476 | - return ret; |
2477 | - } |
2478 | + if (ret) |
2479 | + goto err_crtc; |
2480 | } |
2481 | |
2482 | /* Ensure AXI pipeline is enabled */ |
2483 | @@ -1199,13 +1195,15 @@ static int armada_drm_crtc_create(struct drm_device *drm, struct device *dev, |
2484 | dcrtc->crtc.port = port; |
2485 | |
2486 | primary = kzalloc(sizeof(*primary), GFP_KERNEL); |
2487 | - if (!primary) |
2488 | - return -ENOMEM; |
2489 | + if (!primary) { |
2490 | + ret = -ENOMEM; |
2491 | + goto err_crtc; |
2492 | + } |
2493 | |
2494 | ret = armada_drm_plane_init(primary); |
2495 | if (ret) { |
2496 | kfree(primary); |
2497 | - return ret; |
2498 | + goto err_crtc; |
2499 | } |
2500 | |
2501 | ret = drm_universal_plane_init(drm, &primary->base, 0, |
2502 | @@ -1215,7 +1213,7 @@ static int armada_drm_crtc_create(struct drm_device *drm, struct device *dev, |
2503 | DRM_PLANE_TYPE_PRIMARY, NULL); |
2504 | if (ret) { |
2505 | kfree(primary); |
2506 | - return ret; |
2507 | + goto err_crtc; |
2508 | } |
2509 | |
2510 | ret = drm_crtc_init_with_planes(drm, &dcrtc->crtc, &primary->base, NULL, |
2511 | @@ -1234,6 +1232,9 @@ static int armada_drm_crtc_create(struct drm_device *drm, struct device *dev, |
2512 | |
2513 | err_crtc_init: |
2514 | primary->base.funcs->destroy(&primary->base); |
2515 | +err_crtc: |
2516 | + kfree(dcrtc); |
2517 | + |
2518 | return ret; |
2519 | } |
2520 | |
2521 | diff --git a/drivers/gpu/drm/drm_modeset_lock.c b/drivers/gpu/drm/drm_modeset_lock.c |
2522 | index 61146f5b4f56..0a6bf815640e 100644 |
2523 | --- a/drivers/gpu/drm/drm_modeset_lock.c |
2524 | +++ b/drivers/gpu/drm/drm_modeset_lock.c |
2525 | @@ -81,7 +81,7 @@ void drm_modeset_lock_all(struct drm_device *dev) |
2526 | struct drm_modeset_acquire_ctx *ctx; |
2527 | int ret; |
2528 | |
2529 | - ctx = kzalloc(sizeof(*ctx), GFP_KERNEL); |
2530 | + ctx = kzalloc(sizeof(*ctx), GFP_KERNEL | __GFP_NOFAIL); |
2531 | if (WARN_ON(!ctx)) |
2532 | return; |
2533 | |
2534 | diff --git a/drivers/gpu/drm/exynos/exynos_hdmi.c b/drivers/gpu/drm/exynos/exynos_hdmi.c |
2535 | index 38eaa63afb31..4198e50fa27b 100644 |
2536 | --- a/drivers/gpu/drm/exynos/exynos_hdmi.c |
2537 | +++ b/drivers/gpu/drm/exynos/exynos_hdmi.c |
2538 | @@ -1939,8 +1939,7 @@ static int hdmi_remove(struct platform_device *pdev) |
2539 | return 0; |
2540 | } |
2541 | |
2542 | -#ifdef CONFIG_PM |
2543 | -static int exynos_hdmi_suspend(struct device *dev) |
2544 | +static int __maybe_unused exynos_hdmi_suspend(struct device *dev) |
2545 | { |
2546 | struct hdmi_context *hdata = dev_get_drvdata(dev); |
2547 | |
2548 | @@ -1949,7 +1948,7 @@ static int exynos_hdmi_suspend(struct device *dev) |
2549 | return 0; |
2550 | } |
2551 | |
2552 | -static int exynos_hdmi_resume(struct device *dev) |
2553 | +static int __maybe_unused exynos_hdmi_resume(struct device *dev) |
2554 | { |
2555 | struct hdmi_context *hdata = dev_get_drvdata(dev); |
2556 | int ret; |
2557 | @@ -1960,7 +1959,6 @@ static int exynos_hdmi_resume(struct device *dev) |
2558 | |
2559 | return 0; |
2560 | } |
2561 | -#endif |
2562 | |
2563 | static const struct dev_pm_ops exynos_hdmi_pm_ops = { |
2564 | SET_RUNTIME_PM_OPS(exynos_hdmi_suspend, exynos_hdmi_resume, NULL) |
2565 | diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h |
2566 | index a19ec06f9e42..6a9860df208f 100644 |
2567 | --- a/drivers/gpu/drm/i915/intel_drv.h |
2568 | +++ b/drivers/gpu/drm/i915/intel_drv.h |
2569 | @@ -1581,7 +1581,7 @@ extern struct drm_display_mode *intel_find_panel_downclock( |
2570 | int intel_backlight_device_register(struct intel_connector *connector); |
2571 | void intel_backlight_device_unregister(struct intel_connector *connector); |
2572 | #else /* CONFIG_BACKLIGHT_CLASS_DEVICE */ |
2573 | -static int intel_backlight_device_register(struct intel_connector *connector) |
2574 | +static inline int intel_backlight_device_register(struct intel_connector *connector) |
2575 | { |
2576 | return 0; |
2577 | } |
2578 | diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c |
2579 | index be4b4d546fd9..1cb1b01e4471 100644 |
2580 | --- a/drivers/gpu/drm/i915/intel_panel.c |
2581 | +++ b/drivers/gpu/drm/i915/intel_panel.c |
2582 | @@ -544,25 +544,6 @@ static u32 pwm_get_backlight(struct intel_connector *connector) |
2583 | return DIV_ROUND_UP(duty_ns * 100, CRC_PMIC_PWM_PERIOD_NS); |
2584 | } |
2585 | |
2586 | -static u32 intel_panel_get_backlight(struct intel_connector *connector) |
2587 | -{ |
2588 | - struct drm_i915_private *dev_priv = to_i915(connector->base.dev); |
2589 | - struct intel_panel *panel = &connector->panel; |
2590 | - u32 val = 0; |
2591 | - |
2592 | - mutex_lock(&dev_priv->backlight_lock); |
2593 | - |
2594 | - if (panel->backlight.enabled) { |
2595 | - val = panel->backlight.get(connector); |
2596 | - val = intel_panel_compute_brightness(connector, val); |
2597 | - } |
2598 | - |
2599 | - mutex_unlock(&dev_priv->backlight_lock); |
2600 | - |
2601 | - DRM_DEBUG_DRIVER("get backlight PWM = %d\n", val); |
2602 | - return val; |
2603 | -} |
2604 | - |
2605 | static void lpt_set_backlight(struct intel_connector *connector, u32 level) |
2606 | { |
2607 | struct drm_i915_private *dev_priv = to_i915(connector->base.dev); |
2608 | @@ -646,30 +627,6 @@ intel_panel_actually_set_backlight(struct intel_connector *connector, u32 level) |
2609 | panel->backlight.set(connector, level); |
2610 | } |
2611 | |
2612 | -/* set backlight brightness to level in range [0..max], scaling wrt hw min */ |
2613 | -static void intel_panel_set_backlight(struct intel_connector *connector, |
2614 | - u32 user_level, u32 user_max) |
2615 | -{ |
2616 | - struct drm_i915_private *dev_priv = to_i915(connector->base.dev); |
2617 | - struct intel_panel *panel = &connector->panel; |
2618 | - u32 hw_level; |
2619 | - |
2620 | - if (!panel->backlight.present) |
2621 | - return; |
2622 | - |
2623 | - mutex_lock(&dev_priv->backlight_lock); |
2624 | - |
2625 | - WARN_ON(panel->backlight.max == 0); |
2626 | - |
2627 | - hw_level = scale_user_to_hw(connector, user_level, user_max); |
2628 | - panel->backlight.level = hw_level; |
2629 | - |
2630 | - if (panel->backlight.enabled) |
2631 | - intel_panel_actually_set_backlight(connector, hw_level); |
2632 | - |
2633 | - mutex_unlock(&dev_priv->backlight_lock); |
2634 | -} |
2635 | - |
2636 | /* set backlight brightness to level in range [0..max], assuming hw min is |
2637 | * respected. |
2638 | */ |
2639 | @@ -1122,6 +1079,49 @@ void intel_panel_enable_backlight(struct intel_connector *connector) |
2640 | } |
2641 | |
2642 | #if IS_ENABLED(CONFIG_BACKLIGHT_CLASS_DEVICE) |
2643 | +static u32 intel_panel_get_backlight(struct intel_connector *connector) |
2644 | +{ |
2645 | + struct drm_i915_private *dev_priv = to_i915(connector->base.dev); |
2646 | + struct intel_panel *panel = &connector->panel; |
2647 | + u32 val = 0; |
2648 | + |
2649 | + mutex_lock(&dev_priv->backlight_lock); |
2650 | + |
2651 | + if (panel->backlight.enabled) { |
2652 | + val = panel->backlight.get(connector); |
2653 | + val = intel_panel_compute_brightness(connector, val); |
2654 | + } |
2655 | + |
2656 | + mutex_unlock(&dev_priv->backlight_lock); |
2657 | + |
2658 | + DRM_DEBUG_DRIVER("get backlight PWM = %d\n", val); |
2659 | + return val; |
2660 | +} |
2661 | + |
2662 | +/* set backlight brightness to level in range [0..max], scaling wrt hw min */ |
2663 | +static void intel_panel_set_backlight(struct intel_connector *connector, |
2664 | + u32 user_level, u32 user_max) |
2665 | +{ |
2666 | + struct drm_i915_private *dev_priv = to_i915(connector->base.dev); |
2667 | + struct intel_panel *panel = &connector->panel; |
2668 | + u32 hw_level; |
2669 | + |
2670 | + if (!panel->backlight.present) |
2671 | + return; |
2672 | + |
2673 | + mutex_lock(&dev_priv->backlight_lock); |
2674 | + |
2675 | + WARN_ON(panel->backlight.max == 0); |
2676 | + |
2677 | + hw_level = scale_user_to_hw(connector, user_level, user_max); |
2678 | + panel->backlight.level = hw_level; |
2679 | + |
2680 | + if (panel->backlight.enabled) |
2681 | + intel_panel_actually_set_backlight(connector, hw_level); |
2682 | + |
2683 | + mutex_unlock(&dev_priv->backlight_lock); |
2684 | +} |
2685 | + |
2686 | static int intel_backlight_device_update_status(struct backlight_device *bd) |
2687 | { |
2688 | struct intel_connector *connector = bl_get_data(bd); |
2689 | diff --git a/drivers/gpu/drm/nouveau/nouveau_gem.c b/drivers/gpu/drm/nouveau/nouveau_gem.c |
2690 | index 72e2399bce39..909f69a302ee 100644 |
2691 | --- a/drivers/gpu/drm/nouveau/nouveau_gem.c |
2692 | +++ b/drivers/gpu/drm/nouveau/nouveau_gem.c |
2693 | @@ -369,7 +369,7 @@ validate_init(struct nouveau_channel *chan, struct drm_file *file_priv, |
2694 | { |
2695 | struct nouveau_cli *cli = nouveau_cli(file_priv); |
2696 | int trycnt = 0; |
2697 | - int ret, i; |
2698 | + int ret = -EINVAL, i; |
2699 | struct nouveau_bo *res_bo = NULL; |
2700 | LIST_HEAD(gart_list); |
2701 | LIST_HEAD(vram_list); |
2702 | diff --git a/drivers/idle/Kconfig b/drivers/idle/Kconfig |
2703 | index 4732dfc15447..331adc509f3a 100644 |
2704 | --- a/drivers/idle/Kconfig |
2705 | +++ b/drivers/idle/Kconfig |
2706 | @@ -17,6 +17,7 @@ config I7300_IDLE_IOAT_CHANNEL |
2707 | |
2708 | config I7300_IDLE |
2709 | tristate "Intel chipset idle memory power saving driver" |
2710 | + depends on PCI |
2711 | select I7300_IDLE_IOAT_CHANNEL |
2712 | help |
2713 | Enable memory power savings when idle with certain Intel server |
2714 | diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c |
2715 | index a09d6eed3b88..30f01613b518 100644 |
2716 | --- a/drivers/infiniband/core/cma.c |
2717 | +++ b/drivers/infiniband/core/cma.c |
2718 | @@ -744,6 +744,7 @@ struct rdma_cm_id *rdma_create_id(struct net *net, |
2719 | INIT_LIST_HEAD(&id_priv->mc_list); |
2720 | get_random_bytes(&id_priv->seq_num, sizeof id_priv->seq_num); |
2721 | id_priv->id.route.addr.dev_addr.net = get_net(net); |
2722 | + id_priv->seq_num &= 0x00ffffff; |
2723 | |
2724 | return &id_priv->id; |
2725 | } |
2726 | diff --git a/drivers/infiniband/hw/i40iw/i40iw_d.h b/drivers/infiniband/hw/i40iw/i40iw_d.h |
2727 | index 2fac1db0e0a0..d1328a697750 100644 |
2728 | --- a/drivers/infiniband/hw/i40iw/i40iw_d.h |
2729 | +++ b/drivers/infiniband/hw/i40iw/i40iw_d.h |
2730 | @@ -1102,7 +1102,7 @@ |
2731 | #define I40IWQPC_VLANTAG_MASK (0xffffULL << I40IWQPC_VLANTAG_SHIFT) |
2732 | |
2733 | #define I40IWQPC_ARPIDX_SHIFT 48 |
2734 | -#define I40IWQPC_ARPIDX_MASK (0xfffULL << I40IWQPC_ARPIDX_SHIFT) |
2735 | +#define I40IWQPC_ARPIDX_MASK (0xffffULL << I40IWQPC_ARPIDX_SHIFT) |
2736 | |
2737 | #define I40IWQPC_FLOWLABEL_SHIFT 0 |
2738 | #define I40IWQPC_FLOWLABEL_MASK (0xfffffUL << I40IWQPC_FLOWLABEL_SHIFT) |
2739 | diff --git a/drivers/input/keyboard/tca8418_keypad.c b/drivers/input/keyboard/tca8418_keypad.c |
2740 | index 9002298698fc..3048ef3e3e16 100644 |
2741 | --- a/drivers/input/keyboard/tca8418_keypad.c |
2742 | +++ b/drivers/input/keyboard/tca8418_keypad.c |
2743 | @@ -164,11 +164,18 @@ static void tca8418_read_keypad(struct tca8418_keypad *keypad_data) |
2744 | int error, col, row; |
2745 | u8 reg, state, code; |
2746 | |
2747 | - /* Initial read of the key event FIFO */ |
2748 | - error = tca8418_read_byte(keypad_data, REG_KEY_EVENT_A, ®); |
2749 | + do { |
2750 | + error = tca8418_read_byte(keypad_data, REG_KEY_EVENT_A, ®); |
2751 | + if (error < 0) { |
2752 | + dev_err(&keypad_data->client->dev, |
2753 | + "unable to read REG_KEY_EVENT_A\n"); |
2754 | + break; |
2755 | + } |
2756 | + |
2757 | + /* Assume that key code 0 signifies empty FIFO */ |
2758 | + if (reg <= 0) |
2759 | + break; |
2760 | |
2761 | - /* Assume that key code 0 signifies empty FIFO */ |
2762 | - while (error >= 0 && reg > 0) { |
2763 | state = reg & KEY_EVENT_VALUE; |
2764 | code = reg & KEY_EVENT_CODE; |
2765 | |
2766 | @@ -184,11 +191,7 @@ static void tca8418_read_keypad(struct tca8418_keypad *keypad_data) |
2767 | |
2768 | /* Read for next loop */ |
2769 | error = tca8418_read_byte(keypad_data, REG_KEY_EVENT_A, ®); |
2770 | - } |
2771 | - |
2772 | - if (error < 0) |
2773 | - dev_err(&keypad_data->client->dev, |
2774 | - "unable to read REG_KEY_EVENT_A\n"); |
2775 | + } while (1); |
2776 | |
2777 | input_sync(input); |
2778 | } |
2779 | diff --git a/drivers/isdn/hardware/eicon/message.c b/drivers/isdn/hardware/eicon/message.c |
2780 | index 296f1411fe84..3b11422b1cce 100644 |
2781 | --- a/drivers/isdn/hardware/eicon/message.c |
2782 | +++ b/drivers/isdn/hardware/eicon/message.c |
2783 | @@ -147,7 +147,7 @@ static word plci_remove_check(PLCI *); |
2784 | static void listen_check(DIVA_CAPI_ADAPTER *); |
2785 | static byte AddInfo(byte **, byte **, byte *, byte *); |
2786 | static byte getChannel(API_PARSE *); |
2787 | -static void IndParse(PLCI *, word *, byte **, byte); |
2788 | +static void IndParse(PLCI *, const word *, byte **, byte); |
2789 | static byte ie_compare(byte *, byte *); |
2790 | static word find_cip(DIVA_CAPI_ADAPTER *, byte *, byte *); |
2791 | static word CPN_filter_ok(byte *cpn, DIVA_CAPI_ADAPTER *, word); |
2792 | @@ -4858,7 +4858,7 @@ static void sig_ind(PLCI *plci) |
2793 | /* included before the ESC_MSGTYPE and MAXPARMSIDS has to be incremented */ |
2794 | /* SMSG is situated at the end because its 0 (for compatibility reasons */ |
2795 | /* (see Info_Mask Bit 4, first IE. then the message type) */ |
2796 | - word parms_id[] = |
2797 | + static const word parms_id[] = |
2798 | {MAXPARMSIDS, CPN, 0xff, DSA, OSA, BC, LLC, HLC, ESC_CAUSE, DSP, DT, CHA, |
2799 | UUI, CONG_RR, CONG_RNR, ESC_CHI, KEY, CHI, CAU, ESC_LAW, |
2800 | RDN, RDX, CONN_NR, RIN, NI, CAI, ESC_CR, |
2801 | @@ -4866,12 +4866,12 @@ static void sig_ind(PLCI *plci) |
2802 | /* 14 FTY repl by ESC_CHI */ |
2803 | /* 18 PI repl by ESC_LAW */ |
2804 | /* removed OAD changed to 0xff for future use, OAD is multiIE now */ |
2805 | - word multi_fac_id[] = {1, FTY}; |
2806 | - word multi_pi_id[] = {1, PI}; |
2807 | - word multi_CiPN_id[] = {1, OAD}; |
2808 | - word multi_ssext_id[] = {1, ESC_SSEXT}; |
2809 | + static const word multi_fac_id[] = {1, FTY}; |
2810 | + static const word multi_pi_id[] = {1, PI}; |
2811 | + static const word multi_CiPN_id[] = {1, OAD}; |
2812 | + static const word multi_ssext_id[] = {1, ESC_SSEXT}; |
2813 | |
2814 | - word multi_vswitch_id[] = {1, ESC_VSWITCH}; |
2815 | + static const word multi_vswitch_id[] = {1, ESC_VSWITCH}; |
2816 | |
2817 | byte *cau; |
2818 | word ncci; |
2819 | @@ -8924,7 +8924,7 @@ static void listen_check(DIVA_CAPI_ADAPTER *a) |
2820 | /* functions for all parameters sent in INDs */ |
2821 | /*------------------------------------------------------------------*/ |
2822 | |
2823 | -static void IndParse(PLCI *plci, word *parms_id, byte **parms, byte multiIEsize) |
2824 | +static void IndParse(PLCI *plci, const word *parms_id, byte **parms, byte multiIEsize) |
2825 | { |
2826 | word ploc; /* points to current location within packet */ |
2827 | byte w; |
2828 | diff --git a/drivers/media/i2c/s5k6aa.c b/drivers/media/i2c/s5k6aa.c |
2829 | index faee11383cb7..4b615b4b0463 100644 |
2830 | --- a/drivers/media/i2c/s5k6aa.c |
2831 | +++ b/drivers/media/i2c/s5k6aa.c |
2832 | @@ -421,6 +421,7 @@ static int s5k6aa_set_ahb_address(struct i2c_client *client) |
2833 | |
2834 | /** |
2835 | * s5k6aa_configure_pixel_clock - apply ISP main clock/PLL configuration |
2836 | + * @s5k6aa: pointer to &struct s5k6aa describing the device |
2837 | * |
2838 | * Configure the internal ISP PLL for the required output frequency. |
2839 | * Locking: called with s5k6aa.lock mutex held. |
2840 | @@ -669,6 +670,7 @@ static int s5k6aa_set_input_params(struct s5k6aa *s5k6aa) |
2841 | |
2842 | /** |
2843 | * s5k6aa_configure_video_bus - configure the video output interface |
2844 | + * @s5k6aa: pointer to &struct s5k6aa describing the device |
2845 | * @bus_type: video bus type: parallel or MIPI-CSI |
2846 | * @nlanes: number of MIPI lanes to be used (MIPI-CSI only) |
2847 | * |
2848 | @@ -724,6 +726,8 @@ static int s5k6aa_new_config_sync(struct i2c_client *client, int timeout, |
2849 | |
2850 | /** |
2851 | * s5k6aa_set_prev_config - write user preview register set |
2852 | + * @s5k6aa: pointer to &struct s5k6aa describing the device |
2853 | + * @preset: s5kaa preset to be applied |
2854 | * |
2855 | * Configure output resolution and color fromat, pixel clock |
2856 | * frequency range, device frame rate type and frame period range. |
2857 | @@ -777,6 +781,7 @@ static int s5k6aa_set_prev_config(struct s5k6aa *s5k6aa, |
2858 | |
2859 | /** |
2860 | * s5k6aa_initialize_isp - basic ISP MCU initialization |
2861 | + * @sd: pointer to V4L2 sub-device descriptor |
2862 | * |
2863 | * Configure AHB addresses for registers read/write; configure PLLs for |
2864 | * required output pixel clock. The ISP power supply needs to be already |
2865 | diff --git a/drivers/media/i2c/tc358743.c b/drivers/media/i2c/tc358743.c |
2866 | index 1e3a0dd2238c..26d999c812c9 100644 |
2867 | --- a/drivers/media/i2c/tc358743.c |
2868 | +++ b/drivers/media/i2c/tc358743.c |
2869 | @@ -193,57 +193,61 @@ static void i2c_wr(struct v4l2_subdev *sd, u16 reg, u8 *values, u32 n) |
2870 | } |
2871 | } |
2872 | |
2873 | -static u8 i2c_rd8(struct v4l2_subdev *sd, u16 reg) |
2874 | +static noinline u32 i2c_rdreg(struct v4l2_subdev *sd, u16 reg, u32 n) |
2875 | { |
2876 | - u8 val; |
2877 | + __le32 val = 0; |
2878 | |
2879 | - i2c_rd(sd, reg, &val, 1); |
2880 | + i2c_rd(sd, reg, (u8 __force *)&val, n); |
2881 | |
2882 | - return val; |
2883 | + return le32_to_cpu(val); |
2884 | +} |
2885 | + |
2886 | +static noinline void i2c_wrreg(struct v4l2_subdev *sd, u16 reg, u32 val, u32 n) |
2887 | +{ |
2888 | + __le32 raw = cpu_to_le32(val); |
2889 | + |
2890 | + i2c_wr(sd, reg, (u8 __force *)&raw, n); |
2891 | +} |
2892 | + |
2893 | +static u8 i2c_rd8(struct v4l2_subdev *sd, u16 reg) |
2894 | +{ |
2895 | + return i2c_rdreg(sd, reg, 1); |
2896 | } |
2897 | |
2898 | static void i2c_wr8(struct v4l2_subdev *sd, u16 reg, u8 val) |
2899 | { |
2900 | - i2c_wr(sd, reg, &val, 1); |
2901 | + i2c_wrreg(sd, reg, val, 1); |
2902 | } |
2903 | |
2904 | static void i2c_wr8_and_or(struct v4l2_subdev *sd, u16 reg, |
2905 | u8 mask, u8 val) |
2906 | { |
2907 | - i2c_wr8(sd, reg, (i2c_rd8(sd, reg) & mask) | val); |
2908 | + i2c_wrreg(sd, reg, (i2c_rdreg(sd, reg, 2) & mask) | val, 2); |
2909 | } |
2910 | |
2911 | static u16 i2c_rd16(struct v4l2_subdev *sd, u16 reg) |
2912 | { |
2913 | - u16 val; |
2914 | - |
2915 | - i2c_rd(sd, reg, (u8 *)&val, 2); |
2916 | - |
2917 | - return val; |
2918 | + return i2c_rdreg(sd, reg, 2); |
2919 | } |
2920 | |
2921 | static void i2c_wr16(struct v4l2_subdev *sd, u16 reg, u16 val) |
2922 | { |
2923 | - i2c_wr(sd, reg, (u8 *)&val, 2); |
2924 | + i2c_wrreg(sd, reg, val, 2); |
2925 | } |
2926 | |
2927 | static void i2c_wr16_and_or(struct v4l2_subdev *sd, u16 reg, u16 mask, u16 val) |
2928 | { |
2929 | - i2c_wr16(sd, reg, (i2c_rd16(sd, reg) & mask) | val); |
2930 | + i2c_wrreg(sd, reg, (i2c_rdreg(sd, reg, 2) & mask) | val, 2); |
2931 | } |
2932 | |
2933 | static u32 i2c_rd32(struct v4l2_subdev *sd, u16 reg) |
2934 | { |
2935 | - u32 val; |
2936 | - |
2937 | - i2c_rd(sd, reg, (u8 *)&val, 4); |
2938 | - |
2939 | - return val; |
2940 | + return i2c_rdreg(sd, reg, 4); |
2941 | } |
2942 | |
2943 | static void i2c_wr32(struct v4l2_subdev *sd, u16 reg, u32 val) |
2944 | { |
2945 | - i2c_wr(sd, reg, (u8 *)&val, 4); |
2946 | + i2c_wrreg(sd, reg, val, 4); |
2947 | } |
2948 | |
2949 | /* --------------- STATUS --------------- */ |
2950 | @@ -1236,7 +1240,7 @@ static int tc358743_g_register(struct v4l2_subdev *sd, |
2951 | |
2952 | reg->size = tc358743_get_reg_size(reg->reg); |
2953 | |
2954 | - i2c_rd(sd, reg->reg, (u8 *)®->val, reg->size); |
2955 | + reg->val = i2c_rdreg(sd, reg->reg, reg->size); |
2956 | |
2957 | return 0; |
2958 | } |
2959 | @@ -1262,7 +1266,7 @@ static int tc358743_s_register(struct v4l2_subdev *sd, |
2960 | reg->reg == BCAPS) |
2961 | return 0; |
2962 | |
2963 | - i2c_wr(sd, (u16)reg->reg, (u8 *)®->val, |
2964 | + i2c_wrreg(sd, (u16)reg->reg, reg->val, |
2965 | tc358743_get_reg_size(reg->reg)); |
2966 | |
2967 | return 0; |
2968 | diff --git a/drivers/media/pci/tw5864/tw5864-video.c b/drivers/media/pci/tw5864/tw5864-video.c |
2969 | index 652a059b2e0a..1ddf80f85c24 100644 |
2970 | --- a/drivers/media/pci/tw5864/tw5864-video.c |
2971 | +++ b/drivers/media/pci/tw5864/tw5864-video.c |
2972 | @@ -708,6 +708,8 @@ static void tw5864_frame_interval_set(struct tw5864_input *input) |
2973 | static int tw5864_frameinterval_get(struct tw5864_input *input, |
2974 | struct v4l2_fract *frameinterval) |
2975 | { |
2976 | + struct tw5864_dev *dev = input->root; |
2977 | + |
2978 | switch (input->std) { |
2979 | case STD_NTSC: |
2980 | frameinterval->numerator = 1001; |
2981 | @@ -719,8 +721,8 @@ static int tw5864_frameinterval_get(struct tw5864_input *input, |
2982 | frameinterval->denominator = 25; |
2983 | break; |
2984 | default: |
2985 | - WARN(1, "tw5864_frameinterval_get requested for unknown std %d\n", |
2986 | - input->std); |
2987 | + dev_warn(&dev->pci->dev, "tw5864_frameinterval_get requested for unknown std %d\n", |
2988 | + input->std); |
2989 | return -EINVAL; |
2990 | } |
2991 | |
2992 | diff --git a/drivers/media/usb/em28xx/Kconfig b/drivers/media/usb/em28xx/Kconfig |
2993 | index d917b0a2beb1..aa131cf9989b 100644 |
2994 | --- a/drivers/media/usb/em28xx/Kconfig |
2995 | +++ b/drivers/media/usb/em28xx/Kconfig |
2996 | @@ -11,7 +11,7 @@ config VIDEO_EM28XX_V4L2 |
2997 | select VIDEO_SAA711X if MEDIA_SUBDRV_AUTOSELECT |
2998 | select VIDEO_TVP5150 if MEDIA_SUBDRV_AUTOSELECT |
2999 | select VIDEO_MSP3400 if MEDIA_SUBDRV_AUTOSELECT |
3000 | - select VIDEO_MT9V011 if MEDIA_SUBDRV_AUTOSELECT |
3001 | + select VIDEO_MT9V011 if MEDIA_SUBDRV_AUTOSELECT && MEDIA_CAMERA_SUPPORT |
3002 | |
3003 | ---help--- |
3004 | This is a video4linux driver for Empia 28xx based TV cards. |
3005 | diff --git a/drivers/media/usb/go7007/Kconfig b/drivers/media/usb/go7007/Kconfig |
3006 | index 95a3af644a92..af1d02430931 100644 |
3007 | --- a/drivers/media/usb/go7007/Kconfig |
3008 | +++ b/drivers/media/usb/go7007/Kconfig |
3009 | @@ -11,7 +11,7 @@ config VIDEO_GO7007 |
3010 | select VIDEO_TW2804 if MEDIA_SUBDRV_AUTOSELECT |
3011 | select VIDEO_TW9903 if MEDIA_SUBDRV_AUTOSELECT |
3012 | select VIDEO_TW9906 if MEDIA_SUBDRV_AUTOSELECT |
3013 | - select VIDEO_OV7640 if MEDIA_SUBDRV_AUTOSELECT |
3014 | + select VIDEO_OV7640 if MEDIA_SUBDRV_AUTOSELECT && MEDIA_CAMERA_SUPPORT |
3015 | select VIDEO_UDA1342 if MEDIA_SUBDRV_AUTOSELECT |
3016 | ---help--- |
3017 | This is a video4linux driver for the WIS GO7007 MPEG |
3018 | diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig |
3019 | index 95c32f2d7601..db28e22edbf9 100644 |
3020 | --- a/drivers/net/Kconfig |
3021 | +++ b/drivers/net/Kconfig |
3022 | @@ -437,6 +437,9 @@ config XEN_NETDEV_BACKEND |
3023 | config VMXNET3 |
3024 | tristate "VMware VMXNET3 ethernet driver" |
3025 | depends on PCI && INET |
3026 | + depends on !(PAGE_SIZE_64KB || ARM64_64K_PAGES || \ |
3027 | + IA64_PAGE_SIZE_64KB || MICROBLAZE_64K_PAGES || \ |
3028 | + PARISC_PAGE_SIZE_64KB || PPC_64K_PAGES) |
3029 | help |
3030 | This driver supports VMware's vmxnet3 virtual ethernet NIC. |
3031 | To compile this driver as a module, choose M here: the |
3032 | diff --git a/drivers/net/ethernet/arc/emac_rockchip.c b/drivers/net/ethernet/arc/emac_rockchip.c |
3033 | index e278e3d96ee0..c6163874e4e7 100644 |
3034 | --- a/drivers/net/ethernet/arc/emac_rockchip.c |
3035 | +++ b/drivers/net/ethernet/arc/emac_rockchip.c |
3036 | @@ -220,9 +220,11 @@ static int emac_rockchip_probe(struct platform_device *pdev) |
3037 | |
3038 | /* RMII TX/RX needs always a rate of 25MHz */ |
3039 | err = clk_set_rate(priv->macclk, 25000000); |
3040 | - if (err) |
3041 | + if (err) { |
3042 | dev_err(dev, |
3043 | "failed to change mac clock rate (%d)\n", err); |
3044 | + goto out_clk_disable_macclk; |
3045 | + } |
3046 | } |
3047 | |
3048 | err = arc_emac_probe(ndev, interface); |
3049 | @@ -232,7 +234,8 @@ static int emac_rockchip_probe(struct platform_device *pdev) |
3050 | } |
3051 | |
3052 | return 0; |
3053 | - |
3054 | +out_clk_disable_macclk: |
3055 | + clk_disable_unprepare(priv->macclk); |
3056 | out_regulator_disable: |
3057 | if (priv->regulator) |
3058 | regulator_disable(priv->regulator); |
3059 | diff --git a/drivers/net/ethernet/freescale/gianfar.c b/drivers/net/ethernet/freescale/gianfar.c |
3060 | index fd206889a433..e3b41ba95168 100644 |
3061 | --- a/drivers/net/ethernet/freescale/gianfar.c |
3062 | +++ b/drivers/net/ethernet/freescale/gianfar.c |
3063 | @@ -1375,9 +1375,11 @@ static int gfar_probe(struct platform_device *ofdev) |
3064 | |
3065 | gfar_init_addr_hash_table(priv); |
3066 | |
3067 | - /* Insert receive time stamps into padding alignment bytes */ |
3068 | + /* Insert receive time stamps into padding alignment bytes, and |
3069 | + * plus 2 bytes padding to ensure the cpu alignment. |
3070 | + */ |
3071 | if (priv->device_flags & FSL_GIANFAR_DEV_HAS_TIMER) |
3072 | - priv->padding = 8; |
3073 | + priv->padding = 8 + DEFAULT_PADDING; |
3074 | |
3075 | if (dev->features & NETIF_F_IP_CSUM || |
3076 | priv->device_flags & FSL_GIANFAR_DEV_HAS_TIMER) |
3077 | @@ -1787,6 +1789,7 @@ static int init_phy(struct net_device *dev) |
3078 | GFAR_SUPPORTED_GBIT : 0; |
3079 | phy_interface_t interface; |
3080 | struct phy_device *phydev; |
3081 | + struct ethtool_eee edata; |
3082 | |
3083 | priv->oldlink = 0; |
3084 | priv->oldspeed = 0; |
3085 | @@ -1811,6 +1814,10 @@ static int init_phy(struct net_device *dev) |
3086 | /* Add support for flow control, but don't advertise it by default */ |
3087 | phydev->supported |= (SUPPORTED_Pause | SUPPORTED_Asym_Pause); |
3088 | |
3089 | + /* disable EEE autoneg, EEE not supported by eTSEC */ |
3090 | + memset(&edata, 0, sizeof(struct ethtool_eee)); |
3091 | + phy_ethtool_set_eee(phydev, &edata); |
3092 | + |
3093 | return 0; |
3094 | } |
3095 | |
3096 | diff --git a/drivers/net/hippi/rrunner.c b/drivers/net/hippi/rrunner.c |
3097 | index 95c0b45a68fb..313e006f74fe 100644 |
3098 | --- a/drivers/net/hippi/rrunner.c |
3099 | +++ b/drivers/net/hippi/rrunner.c |
3100 | @@ -1381,8 +1381,8 @@ static int rr_close(struct net_device *dev) |
3101 | rrpriv->info_dma); |
3102 | rrpriv->info = NULL; |
3103 | |
3104 | - free_irq(pdev->irq, dev); |
3105 | spin_unlock_irqrestore(&rrpriv->lock, flags); |
3106 | + free_irq(pdev->irq, dev); |
3107 | |
3108 | return 0; |
3109 | } |
3110 | diff --git a/drivers/net/ipvlan/ipvlan_core.c b/drivers/net/ipvlan/ipvlan_core.c |
3111 | index 980e38524418..627eb825eb74 100644 |
3112 | --- a/drivers/net/ipvlan/ipvlan_core.c |
3113 | +++ b/drivers/net/ipvlan/ipvlan_core.c |
3114 | @@ -370,6 +370,7 @@ static int ipvlan_process_v4_outbound(struct sk_buff *skb) |
3115 | .flowi4_oif = dev->ifindex, |
3116 | .flowi4_tos = RT_TOS(ip4h->tos), |
3117 | .flowi4_flags = FLOWI_FLAG_ANYSRC, |
3118 | + .flowi4_mark = skb->mark, |
3119 | .daddr = ip4h->daddr, |
3120 | .saddr = ip4h->saddr, |
3121 | }; |
3122 | diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c |
3123 | index edffe5aeeeb1..d46f086e6360 100644 |
3124 | --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c |
3125 | +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c |
3126 | @@ -2049,7 +2049,7 @@ static int brcmf_sdio_txpkt_hdalign(struct brcmf_sdio *bus, struct sk_buff *pkt) |
3127 | return head_pad; |
3128 | } |
3129 | |
3130 | -/** |
3131 | +/* |
3132 | * struct brcmf_skbuff_cb reserves first two bytes in sk_buff::cb for |
3133 | * bus layer usage. |
3134 | */ |
3135 | diff --git a/drivers/net/wireless/st/cw1200/wsm.c b/drivers/net/wireless/st/cw1200/wsm.c |
3136 | index 680d60eabc75..ed93bf3474ec 100644 |
3137 | --- a/drivers/net/wireless/st/cw1200/wsm.c |
3138 | +++ b/drivers/net/wireless/st/cw1200/wsm.c |
3139 | @@ -379,7 +379,6 @@ static int wsm_multi_tx_confirm(struct cw1200_common *priv, |
3140 | { |
3141 | int ret; |
3142 | int count; |
3143 | - int i; |
3144 | |
3145 | count = WSM_GET32(buf); |
3146 | if (WARN_ON(count <= 0)) |
3147 | @@ -395,11 +394,10 @@ static int wsm_multi_tx_confirm(struct cw1200_common *priv, |
3148 | } |
3149 | |
3150 | cw1200_debug_txed_multi(priv, count); |
3151 | - for (i = 0; i < count; ++i) { |
3152 | + do { |
3153 | ret = wsm_tx_confirm(priv, buf, link_id); |
3154 | - if (ret) |
3155 | - return ret; |
3156 | - } |
3157 | + } while (!ret && --count); |
3158 | + |
3159 | return ret; |
3160 | |
3161 | underflow: |
3162 | diff --git a/drivers/pci/host/vmd.c b/drivers/pci/host/vmd.c |
3163 | index 37e29b580be3..0e7f8f319fe3 100644 |
3164 | --- a/drivers/pci/host/vmd.c |
3165 | +++ b/drivers/pci/host/vmd.c |
3166 | @@ -727,7 +727,7 @@ static void vmd_remove(struct pci_dev *dev) |
3167 | irq_domain_remove(vmd->irq_domain); |
3168 | } |
3169 | |
3170 | -#ifdef CONFIG_PM |
3171 | +#ifdef CONFIG_PM_SLEEP |
3172 | static int vmd_suspend(struct device *dev) |
3173 | { |
3174 | struct pci_dev *pdev = to_pci_dev(dev); |
3175 | diff --git a/drivers/perf/xgene_pmu.c b/drivers/perf/xgene_pmu.c |
3176 | index a8ac4bcef2c0..35b5289bc5da 100644 |
3177 | --- a/drivers/perf/xgene_pmu.c |
3178 | +++ b/drivers/perf/xgene_pmu.c |
3179 | @@ -25,6 +25,7 @@ |
3180 | #include <linux/interrupt.h> |
3181 | #include <linux/io.h> |
3182 | #include <linux/mfd/syscon.h> |
3183 | +#include <linux/module.h> |
3184 | #include <linux/of_address.h> |
3185 | #include <linux/of_fdt.h> |
3186 | #include <linux/of_irq.h> |
3187 | diff --git a/drivers/pinctrl/sunxi/pinctrl-sun50i-a64.c b/drivers/pinctrl/sunxi/pinctrl-sun50i-a64.c |
3188 | index 4f2a726bbaeb..f5f77432ce6f 100644 |
3189 | --- a/drivers/pinctrl/sunxi/pinctrl-sun50i-a64.c |
3190 | +++ b/drivers/pinctrl/sunxi/pinctrl-sun50i-a64.c |
3191 | @@ -428,7 +428,7 @@ static const struct sunxi_desc_pin a64_pins[] = { |
3192 | SUNXI_FUNCTION(0x0, "gpio_in"), |
3193 | SUNXI_FUNCTION(0x1, "gpio_out"), |
3194 | SUNXI_FUNCTION(0x2, "mmc0"), /* D3 */ |
3195 | - SUNXI_FUNCTION(0x4, "uart0")), /* RX */ |
3196 | + SUNXI_FUNCTION(0x3, "uart0")), /* RX */ |
3197 | SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 5), |
3198 | SUNXI_FUNCTION(0x0, "gpio_in"), |
3199 | SUNXI_FUNCTION(0x1, "gpio_out"), |
3200 | diff --git a/drivers/pinctrl/sunxi/pinctrl-sun9i-a80.c b/drivers/pinctrl/sunxi/pinctrl-sun9i-a80.c |
3201 | index 1b580ba76453..907d7db3fcee 100644 |
3202 | --- a/drivers/pinctrl/sunxi/pinctrl-sun9i-a80.c |
3203 | +++ b/drivers/pinctrl/sunxi/pinctrl-sun9i-a80.c |
3204 | @@ -145,19 +145,19 @@ static const struct sunxi_desc_pin sun9i_a80_pins[] = { |
3205 | SUNXI_FUNCTION(0x0, "gpio_in"), |
3206 | SUNXI_FUNCTION(0x1, "gpio_out"), |
3207 | SUNXI_FUNCTION(0x3, "mcsi"), /* MCLK */ |
3208 | - SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 14)), /* PB_EINT14 */ |
3209 | + SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 14)), /* PB_EINT14 */ |
3210 | SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 15), |
3211 | SUNXI_FUNCTION(0x0, "gpio_in"), |
3212 | SUNXI_FUNCTION(0x1, "gpio_out"), |
3213 | SUNXI_FUNCTION(0x3, "mcsi"), /* SCK */ |
3214 | SUNXI_FUNCTION(0x4, "i2c4"), /* SCK */ |
3215 | - SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 15)), /* PB_EINT15 */ |
3216 | + SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 15)), /* PB_EINT15 */ |
3217 | SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 16), |
3218 | SUNXI_FUNCTION(0x0, "gpio_in"), |
3219 | SUNXI_FUNCTION(0x1, "gpio_out"), |
3220 | SUNXI_FUNCTION(0x3, "mcsi"), /* SDA */ |
3221 | SUNXI_FUNCTION(0x4, "i2c4"), /* SDA */ |
3222 | - SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 16)), /* PB_EINT16 */ |
3223 | + SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 16)), /* PB_EINT16 */ |
3224 | |
3225 | /* Hole */ |
3226 | SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 0), |
3227 | diff --git a/drivers/platform/x86/dell-laptop.c b/drivers/platform/x86/dell-laptop.c |
3228 | index 2c2f02b2e08a..167d5042a629 100644 |
3229 | --- a/drivers/platform/x86/dell-laptop.c |
3230 | +++ b/drivers/platform/x86/dell-laptop.c |
3231 | @@ -45,6 +45,7 @@ |
3232 | |
3233 | struct quirk_entry { |
3234 | u8 touchpad_led; |
3235 | + u8 kbd_led_levels_off_1; |
3236 | |
3237 | int needs_kbd_timeouts; |
3238 | /* |
3239 | @@ -75,6 +76,10 @@ static struct quirk_entry quirk_dell_xps13_9333 = { |
3240 | .kbd_timeouts = { 0, 5, 15, 60, 5 * 60, 15 * 60, -1 }, |
3241 | }; |
3242 | |
3243 | +static struct quirk_entry quirk_dell_latitude_e6410 = { |
3244 | + .kbd_led_levels_off_1 = 1, |
3245 | +}; |
3246 | + |
3247 | static struct platform_driver platform_driver = { |
3248 | .driver = { |
3249 | .name = "dell-laptop", |
3250 | @@ -270,6 +275,15 @@ static const struct dmi_system_id dell_quirks[] __initconst = { |
3251 | }, |
3252 | .driver_data = &quirk_dell_xps13_9333, |
3253 | }, |
3254 | + { |
3255 | + .callback = dmi_matched, |
3256 | + .ident = "Dell Latitude E6410", |
3257 | + .matches = { |
3258 | + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), |
3259 | + DMI_MATCH(DMI_PRODUCT_NAME, "Latitude E6410"), |
3260 | + }, |
3261 | + .driver_data = &quirk_dell_latitude_e6410, |
3262 | + }, |
3263 | { } |
3264 | }; |
3265 | |
3266 | @@ -1170,6 +1184,9 @@ static int kbd_get_info(struct kbd_info *info) |
3267 | units = (buffer->output[2] >> 8) & 0xFF; |
3268 | info->levels = (buffer->output[2] >> 16) & 0xFF; |
3269 | |
3270 | + if (quirks && quirks->kbd_led_levels_off_1 && info->levels) |
3271 | + info->levels--; |
3272 | + |
3273 | if (units & BIT(0)) |
3274 | info->seconds = (buffer->output[3] >> 0) & 0xFF; |
3275 | if (units & BIT(1)) |
3276 | diff --git a/drivers/platform/x86/intel_mid_thermal.c b/drivers/platform/x86/intel_mid_thermal.c |
3277 | index 5c768c4627d3..78e1bfee698a 100644 |
3278 | --- a/drivers/platform/x86/intel_mid_thermal.c |
3279 | +++ b/drivers/platform/x86/intel_mid_thermal.c |
3280 | @@ -415,6 +415,7 @@ static struct thermal_device_info *initialize_sensor(int index) |
3281 | return td_info; |
3282 | } |
3283 | |
3284 | +#ifdef CONFIG_PM_SLEEP |
3285 | /** |
3286 | * mid_thermal_resume - resume routine |
3287 | * @dev: device structure |
3288 | @@ -442,6 +443,7 @@ static int mid_thermal_suspend(struct device *dev) |
3289 | */ |
3290 | return configure_adc(0); |
3291 | } |
3292 | +#endif |
3293 | |
3294 | static SIMPLE_DEV_PM_OPS(mid_thermal_pm, |
3295 | mid_thermal_suspend, mid_thermal_resume); |
3296 | diff --git a/drivers/s390/block/dasd_eckd.c b/drivers/s390/block/dasd_eckd.c |
3297 | index a7a88476e215..0f5bc2f8382b 100644 |
3298 | --- a/drivers/s390/block/dasd_eckd.c |
3299 | +++ b/drivers/s390/block/dasd_eckd.c |
3300 | @@ -521,10 +521,12 @@ static int prefix_LRE(struct ccw1 *ccw, struct PFX_eckd_data *pfxdata, |
3301 | pfxdata->validity.define_extent = 1; |
3302 | |
3303 | /* private uid is kept up to date, conf_data may be outdated */ |
3304 | - if (startpriv->uid.type != UA_BASE_DEVICE) { |
3305 | + if (startpriv->uid.type == UA_BASE_PAV_ALIAS) |
3306 | pfxdata->validity.verify_base = 1; |
3307 | - if (startpriv->uid.type == UA_HYPER_PAV_ALIAS) |
3308 | - pfxdata->validity.hyper_pav = 1; |
3309 | + |
3310 | + if (startpriv->uid.type == UA_HYPER_PAV_ALIAS) { |
3311 | + pfxdata->validity.verify_base = 1; |
3312 | + pfxdata->validity.hyper_pav = 1; |
3313 | } |
3314 | |
3315 | /* define extend data (mostly)*/ |
3316 | @@ -3471,10 +3473,12 @@ static int prepare_itcw(struct itcw *itcw, |
3317 | pfxdata.validity.define_extent = 1; |
3318 | |
3319 | /* private uid is kept up to date, conf_data may be outdated */ |
3320 | - if (startpriv->uid.type != UA_BASE_DEVICE) { |
3321 | + if (startpriv->uid.type == UA_BASE_PAV_ALIAS) |
3322 | + pfxdata.validity.verify_base = 1; |
3323 | + |
3324 | + if (startpriv->uid.type == UA_HYPER_PAV_ALIAS) { |
3325 | pfxdata.validity.verify_base = 1; |
3326 | - if (startpriv->uid.type == UA_HYPER_PAV_ALIAS) |
3327 | - pfxdata.validity.hyper_pav = 1; |
3328 | + pfxdata.validity.hyper_pav = 1; |
3329 | } |
3330 | |
3331 | switch (cmd) { |
3332 | diff --git a/drivers/scsi/advansys.c b/drivers/scsi/advansys.c |
3333 | index febbd83e2ecd..24e57e770432 100644 |
3334 | --- a/drivers/scsi/advansys.c |
3335 | +++ b/drivers/scsi/advansys.c |
3336 | @@ -6291,18 +6291,17 @@ static uchar AscGetSynPeriodIndex(ASC_DVC_VAR *asc_dvc, uchar syn_time) |
3337 | static uchar |
3338 | AscMsgOutSDTR(ASC_DVC_VAR *asc_dvc, uchar sdtr_period, uchar sdtr_offset) |
3339 | { |
3340 | - EXT_MSG sdtr_buf; |
3341 | - uchar sdtr_period_index; |
3342 | - PortAddr iop_base; |
3343 | - |
3344 | - iop_base = asc_dvc->iop_base; |
3345 | - sdtr_buf.msg_type = EXTENDED_MESSAGE; |
3346 | - sdtr_buf.msg_len = MS_SDTR_LEN; |
3347 | - sdtr_buf.msg_req = EXTENDED_SDTR; |
3348 | - sdtr_buf.xfer_period = sdtr_period; |
3349 | + PortAddr iop_base = asc_dvc->iop_base; |
3350 | + uchar sdtr_period_index = AscGetSynPeriodIndex(asc_dvc, sdtr_period); |
3351 | + EXT_MSG sdtr_buf = { |
3352 | + .msg_type = EXTENDED_MESSAGE, |
3353 | + .msg_len = MS_SDTR_LEN, |
3354 | + .msg_req = EXTENDED_SDTR, |
3355 | + .xfer_period = sdtr_period, |
3356 | + .req_ack_offset = sdtr_offset, |
3357 | + }; |
3358 | sdtr_offset &= ASC_SYN_MAX_OFFSET; |
3359 | - sdtr_buf.req_ack_offset = sdtr_offset; |
3360 | - sdtr_period_index = AscGetSynPeriodIndex(asc_dvc, sdtr_period); |
3361 | + |
3362 | if (sdtr_period_index <= asc_dvc->max_sdtr_index) { |
3363 | AscMemWordCopyPtrToLram(iop_base, ASCV_MSGOUT_BEG, |
3364 | (uchar *)&sdtr_buf, |
3365 | @@ -11030,6 +11029,9 @@ static int advansys_board_found(struct Scsi_Host *shost, unsigned int iop, |
3366 | ASC_DBG(2, "AdvInitGetConfig()\n"); |
3367 | |
3368 | ret = AdvInitGetConfig(pdev, shost) ? -ENODEV : 0; |
3369 | +#else |
3370 | + share_irq = 0; |
3371 | + ret = -ENODEV; |
3372 | #endif /* CONFIG_PCI */ |
3373 | } |
3374 | |
3375 | diff --git a/drivers/spi/Kconfig b/drivers/spi/Kconfig |
3376 | index b7995474148c..0e7415f6d093 100644 |
3377 | --- a/drivers/spi/Kconfig |
3378 | +++ b/drivers/spi/Kconfig |
3379 | @@ -156,6 +156,7 @@ config SPI_BCM63XX_HSSPI |
3380 | config SPI_BCM_QSPI |
3381 | tristate "Broadcom BSPI and MSPI controller support" |
3382 | depends on ARCH_BRCMSTB || ARCH_BCM || ARCH_BCM_IPROC || COMPILE_TEST |
3383 | + depends on MTD_NORFLASH |
3384 | default ARCH_BCM_IPROC |
3385 | help |
3386 | Enables support for the Broadcom SPI flash and MSPI controller. |
3387 | diff --git a/drivers/spi/spi-sun4i.c b/drivers/spi/spi-sun4i.c |
3388 | index 4969dc10684a..d8995b6c5a7e 100644 |
3389 | --- a/drivers/spi/spi-sun4i.c |
3390 | +++ b/drivers/spi/spi-sun4i.c |
3391 | @@ -466,7 +466,7 @@ static int sun4i_spi_probe(struct platform_device *pdev) |
3392 | |
3393 | static int sun4i_spi_remove(struct platform_device *pdev) |
3394 | { |
3395 | - pm_runtime_disable(&pdev->dev); |
3396 | + pm_runtime_force_suspend(&pdev->dev); |
3397 | |
3398 | return 0; |
3399 | } |
3400 | diff --git a/drivers/staging/android/ashmem.c b/drivers/staging/android/ashmem.c |
3401 | index 558a66b459fa..d08324998933 100644 |
3402 | --- a/drivers/staging/android/ashmem.c |
3403 | +++ b/drivers/staging/android/ashmem.c |
3404 | @@ -719,30 +719,32 @@ static int ashmem_pin_unpin(struct ashmem_area *asma, unsigned long cmd, |
3405 | size_t pgstart, pgend; |
3406 | int ret = -EINVAL; |
3407 | |
3408 | + mutex_lock(&ashmem_mutex); |
3409 | + |
3410 | if (unlikely(!asma->file)) |
3411 | - return -EINVAL; |
3412 | + goto out_unlock; |
3413 | |
3414 | - if (unlikely(copy_from_user(&pin, p, sizeof(pin)))) |
3415 | - return -EFAULT; |
3416 | + if (unlikely(copy_from_user(&pin, p, sizeof(pin)))) { |
3417 | + ret = -EFAULT; |
3418 | + goto out_unlock; |
3419 | + } |
3420 | |
3421 | /* per custom, you can pass zero for len to mean "everything onward" */ |
3422 | if (!pin.len) |
3423 | pin.len = PAGE_ALIGN(asma->size) - pin.offset; |
3424 | |
3425 | if (unlikely((pin.offset | pin.len) & ~PAGE_MASK)) |
3426 | - return -EINVAL; |
3427 | + goto out_unlock; |
3428 | |
3429 | if (unlikely(((__u32)-1) - pin.offset < pin.len)) |
3430 | - return -EINVAL; |
3431 | + goto out_unlock; |
3432 | |
3433 | if (unlikely(PAGE_ALIGN(asma->size) < pin.offset + pin.len)) |
3434 | - return -EINVAL; |
3435 | + goto out_unlock; |
3436 | |
3437 | pgstart = pin.offset / PAGE_SIZE; |
3438 | pgend = pgstart + (pin.len / PAGE_SIZE) - 1; |
3439 | |
3440 | - mutex_lock(&ashmem_mutex); |
3441 | - |
3442 | switch (cmd) { |
3443 | case ASHMEM_PIN: |
3444 | ret = ashmem_pin(asma, pgstart, pgend); |
3445 | @@ -755,6 +757,7 @@ static int ashmem_pin_unpin(struct ashmem_area *asma, unsigned long cmd, |
3446 | break; |
3447 | } |
3448 | |
3449 | +out_unlock: |
3450 | mutex_unlock(&ashmem_mutex); |
3451 | |
3452 | return ret; |
3453 | diff --git a/drivers/staging/android/ion/ion-ioctl.c b/drivers/staging/android/ion/ion-ioctl.c |
3454 | index 7e7431d8d49f..2b700e8455c6 100644 |
3455 | --- a/drivers/staging/android/ion/ion-ioctl.c |
3456 | +++ b/drivers/staging/android/ion/ion-ioctl.c |
3457 | @@ -83,8 +83,10 @@ long ion_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) |
3458 | return -EFAULT; |
3459 | |
3460 | ret = validate_ioctl_arg(cmd, &data); |
3461 | - if (WARN_ON_ONCE(ret)) |
3462 | + if (ret) { |
3463 | + pr_warn_once("%s: ioctl validate failed\n", __func__); |
3464 | return ret; |
3465 | + } |
3466 | |
3467 | if (!(dir & _IOC_WRITE)) |
3468 | memset(&data, 0, sizeof(data)); |
3469 | diff --git a/drivers/staging/android/ion/ion_system_heap.c b/drivers/staging/android/ion/ion_system_heap.c |
3470 | index 7e023d505af8..d270a424ecac 100644 |
3471 | --- a/drivers/staging/android/ion/ion_system_heap.c |
3472 | +++ b/drivers/staging/android/ion/ion_system_heap.c |
3473 | @@ -384,7 +384,7 @@ static int ion_system_contig_heap_allocate(struct ion_heap *heap, |
3474 | if (align > (PAGE_SIZE << order)) |
3475 | return -EINVAL; |
3476 | |
3477 | - page = alloc_pages(low_order_gfp_flags, order); |
3478 | + page = alloc_pages(low_order_gfp_flags | __GFP_NOWARN, order); |
3479 | if (!page) |
3480 | return -ENOMEM; |
3481 | |
3482 | diff --git a/drivers/staging/iio/adc/ad7192.c b/drivers/staging/iio/adc/ad7192.c |
3483 | index eeacb0e55db7..4dc9ca3a11b4 100644 |
3484 | --- a/drivers/staging/iio/adc/ad7192.c |
3485 | +++ b/drivers/staging/iio/adc/ad7192.c |
3486 | @@ -141,6 +141,8 @@ |
3487 | #define AD7192_GPOCON_P1DAT BIT(1) /* P1 state */ |
3488 | #define AD7192_GPOCON_P0DAT BIT(0) /* P0 state */ |
3489 | |
3490 | +#define AD7192_EXT_FREQ_MHZ_MIN 2457600 |
3491 | +#define AD7192_EXT_FREQ_MHZ_MAX 5120000 |
3492 | #define AD7192_INT_FREQ_MHZ 4915200 |
3493 | |
3494 | /* NOTE: |
3495 | @@ -216,6 +218,12 @@ static int ad7192_calibrate_all(struct ad7192_state *st) |
3496 | ARRAY_SIZE(ad7192_calib_arr)); |
3497 | } |
3498 | |
3499 | +static inline bool ad7192_valid_external_frequency(u32 freq) |
3500 | +{ |
3501 | + return (freq >= AD7192_EXT_FREQ_MHZ_MIN && |
3502 | + freq <= AD7192_EXT_FREQ_MHZ_MAX); |
3503 | +} |
3504 | + |
3505 | static int ad7192_setup(struct ad7192_state *st, |
3506 | const struct ad7192_platform_data *pdata) |
3507 | { |
3508 | @@ -241,17 +249,20 @@ static int ad7192_setup(struct ad7192_state *st, |
3509 | id); |
3510 | |
3511 | switch (pdata->clock_source_sel) { |
3512 | - case AD7192_CLK_EXT_MCLK1_2: |
3513 | - case AD7192_CLK_EXT_MCLK2: |
3514 | - st->mclk = AD7192_INT_FREQ_MHZ; |
3515 | - break; |
3516 | case AD7192_CLK_INT: |
3517 | case AD7192_CLK_INT_CO: |
3518 | - if (pdata->ext_clk_hz) |
3519 | - st->mclk = pdata->ext_clk_hz; |
3520 | - else |
3521 | - st->mclk = AD7192_INT_FREQ_MHZ; |
3522 | + st->mclk = AD7192_INT_FREQ_MHZ; |
3523 | break; |
3524 | + case AD7192_CLK_EXT_MCLK1_2: |
3525 | + case AD7192_CLK_EXT_MCLK2: |
3526 | + if (ad7192_valid_external_frequency(pdata->ext_clk_hz)) { |
3527 | + st->mclk = pdata->ext_clk_hz; |
3528 | + break; |
3529 | + } |
3530 | + dev_err(&st->sd.spi->dev, "Invalid frequency setting %u\n", |
3531 | + pdata->ext_clk_hz); |
3532 | + ret = -EINVAL; |
3533 | + goto out; |
3534 | default: |
3535 | ret = -EINVAL; |
3536 | goto out; |
3537 | diff --git a/drivers/staging/iio/impedance-analyzer/ad5933.c b/drivers/staging/iio/impedance-analyzer/ad5933.c |
3538 | index 3892a7470410..4c7465c2d91c 100644 |
3539 | --- a/drivers/staging/iio/impedance-analyzer/ad5933.c |
3540 | +++ b/drivers/staging/iio/impedance-analyzer/ad5933.c |
3541 | @@ -642,8 +642,6 @@ static int ad5933_register_ring_funcs_and_init(struct iio_dev *indio_dev) |
3542 | /* Ring buffer functions - here trigger setup related */ |
3543 | indio_dev->setup_ops = &ad5933_ring_setup_ops; |
3544 | |
3545 | - indio_dev->modes |= INDIO_BUFFER_HARDWARE; |
3546 | - |
3547 | return 0; |
3548 | } |
3549 | |
3550 | @@ -754,7 +752,7 @@ static int ad5933_probe(struct i2c_client *client, |
3551 | indio_dev->dev.parent = &client->dev; |
3552 | indio_dev->info = &ad5933_info; |
3553 | indio_dev->name = id->name; |
3554 | - indio_dev->modes = INDIO_DIRECT_MODE; |
3555 | + indio_dev->modes = (INDIO_BUFFER_SOFTWARE | INDIO_DIRECT_MODE); |
3556 | indio_dev->channels = ad5933_channels; |
3557 | indio_dev->num_channels = ARRAY_SIZE(ad5933_channels); |
3558 | |
3559 | diff --git a/drivers/staging/lustre/lnet/libcfs/linux/linux-crypto-adler.c b/drivers/staging/lustre/lnet/libcfs/linux/linux-crypto-adler.c |
3560 | index db0572733712..ab30a0f5129c 100644 |
3561 | --- a/drivers/staging/lustre/lnet/libcfs/linux/linux-crypto-adler.c |
3562 | +++ b/drivers/staging/lustre/lnet/libcfs/linux/linux-crypto-adler.c |
3563 | @@ -119,6 +119,7 @@ static struct shash_alg alg = { |
3564 | .cra_name = "adler32", |
3565 | .cra_driver_name = "adler32-zlib", |
3566 | .cra_priority = 100, |
3567 | + .cra_flags = CRYPTO_ALG_OPTIONAL_KEY, |
3568 | .cra_blocksize = CHKSUM_BLOCK_SIZE, |
3569 | .cra_ctxsize = sizeof(u32), |
3570 | .cra_module = THIS_MODULE, |
3571 | diff --git a/drivers/thermal/Kconfig b/drivers/thermal/Kconfig |
3572 | index a13541bdc726..6356295672cb 100644 |
3573 | --- a/drivers/thermal/Kconfig |
3574 | +++ b/drivers/thermal/Kconfig |
3575 | @@ -316,7 +316,7 @@ config X86_PKG_TEMP_THERMAL |
3576 | |
3577 | config INTEL_SOC_DTS_IOSF_CORE |
3578 | tristate |
3579 | - depends on X86 |
3580 | + depends on X86 && PCI |
3581 | select IOSF_MBI |
3582 | help |
3583 | This is becoming a common feature for Intel SoCs to expose the additional |
3584 | @@ -326,7 +326,7 @@ config INTEL_SOC_DTS_IOSF_CORE |
3585 | |
3586 | config INTEL_SOC_DTS_THERMAL |
3587 | tristate "Intel SoCs DTS thermal driver" |
3588 | - depends on X86 |
3589 | + depends on X86 && PCI |
3590 | select INTEL_SOC_DTS_IOSF_CORE |
3591 | select THERMAL_WRITABLE_TRIPS |
3592 | help |
3593 | diff --git a/drivers/usb/dwc3/dwc3-of-simple.c b/drivers/usb/dwc3/dwc3-of-simple.c |
3594 | index fe414e7a9c78..a3e2200f5b5f 100644 |
3595 | --- a/drivers/usb/dwc3/dwc3-of-simple.c |
3596 | +++ b/drivers/usb/dwc3/dwc3-of-simple.c |
3597 | @@ -58,8 +58,10 @@ static int dwc3_of_simple_clk_init(struct dwc3_of_simple *simple, int count) |
3598 | |
3599 | clk = of_clk_get(np, i); |
3600 | if (IS_ERR(clk)) { |
3601 | - while (--i >= 0) |
3602 | + while (--i >= 0) { |
3603 | + clk_disable_unprepare(simple->clks[i]); |
3604 | clk_put(simple->clks[i]); |
3605 | + } |
3606 | return PTR_ERR(clk); |
3607 | } |
3608 | |
3609 | diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c |
3610 | index 16c67120d72b..f483c3b1e971 100644 |
3611 | --- a/drivers/usb/dwc3/gadget.c |
3612 | +++ b/drivers/usb/dwc3/gadget.c |
3613 | @@ -247,7 +247,7 @@ int dwc3_send_gadget_ep_cmd(struct dwc3_ep *dep, unsigned cmd, |
3614 | struct dwc3_gadget_ep_cmd_params *params) |
3615 | { |
3616 | struct dwc3 *dwc = dep->dwc; |
3617 | - u32 timeout = 500; |
3618 | + u32 timeout = 1000; |
3619 | u32 reg; |
3620 | |
3621 | int cmd_status = 0; |
3622 | diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c |
3623 | index aac28d998073..2d9a8067eaca 100644 |
3624 | --- a/drivers/usb/musb/musb_core.c |
3625 | +++ b/drivers/usb/musb/musb_core.c |
3626 | @@ -2043,6 +2043,7 @@ struct musb_pending_work { |
3627 | struct list_head node; |
3628 | }; |
3629 | |
3630 | +#ifdef CONFIG_PM |
3631 | /* |
3632 | * Called from musb_runtime_resume(), musb_resume(), and |
3633 | * musb_queue_resume_work(). Callers must take musb->lock. |
3634 | @@ -2070,6 +2071,7 @@ static int musb_run_resume_work(struct musb *musb) |
3635 | |
3636 | return error; |
3637 | } |
3638 | +#endif |
3639 | |
3640 | /* |
3641 | * Called to run work if device is active or else queue the work to happen |
3642 | diff --git a/drivers/usb/phy/Kconfig b/drivers/usb/phy/Kconfig |
3643 | index b9c409a18faa..125cea1c3c8d 100644 |
3644 | --- a/drivers/usb/phy/Kconfig |
3645 | +++ b/drivers/usb/phy/Kconfig |
3646 | @@ -147,6 +147,7 @@ config USB_MSM_OTG |
3647 | depends on (USB || USB_GADGET) && (ARCH_QCOM || COMPILE_TEST) |
3648 | depends on USB_GADGET || !USB_GADGET # if USB_GADGET=m, this can't be 'y' |
3649 | depends on RESET_CONTROLLER |
3650 | + depends on REGULATOR |
3651 | depends on EXTCON |
3652 | select USB_PHY |
3653 | help |
3654 | diff --git a/drivers/usb/usbip/stub_dev.c b/drivers/usb/usbip/stub_dev.c |
3655 | index 1886d8e4f14e..3550224f4d69 100644 |
3656 | --- a/drivers/usb/usbip/stub_dev.c |
3657 | +++ b/drivers/usb/usbip/stub_dev.c |
3658 | @@ -87,6 +87,7 @@ static ssize_t store_sockfd(struct device *dev, struct device_attribute *attr, |
3659 | goto err; |
3660 | |
3661 | sdev->ud.tcp_socket = socket; |
3662 | + sdev->ud.sockfd = sockfd; |
3663 | |
3664 | spin_unlock_irq(&sdev->ud.lock); |
3665 | |
3666 | @@ -186,6 +187,7 @@ static void stub_shutdown_connection(struct usbip_device *ud) |
3667 | if (ud->tcp_socket) { |
3668 | sockfd_put(ud->tcp_socket); |
3669 | ud->tcp_socket = NULL; |
3670 | + ud->sockfd = -1; |
3671 | } |
3672 | |
3673 | /* 3. free used data */ |
3674 | @@ -280,6 +282,7 @@ static struct stub_device *stub_device_alloc(struct usb_device *udev) |
3675 | sdev->ud.status = SDEV_ST_AVAILABLE; |
3676 | spin_lock_init(&sdev->ud.lock); |
3677 | sdev->ud.tcp_socket = NULL; |
3678 | + sdev->ud.sockfd = -1; |
3679 | |
3680 | INIT_LIST_HEAD(&sdev->priv_init); |
3681 | INIT_LIST_HEAD(&sdev->priv_tx); |
3682 | diff --git a/drivers/usb/usbip/vhci_hcd.c b/drivers/usb/usbip/vhci_hcd.c |
3683 | index dbe615ba07c9..9936a2f199b1 100644 |
3684 | --- a/drivers/usb/usbip/vhci_hcd.c |
3685 | +++ b/drivers/usb/usbip/vhci_hcd.c |
3686 | @@ -832,6 +832,7 @@ static void vhci_shutdown_connection(struct usbip_device *ud) |
3687 | if (vdev->ud.tcp_socket) { |
3688 | sockfd_put(vdev->ud.tcp_socket); |
3689 | vdev->ud.tcp_socket = NULL; |
3690 | + vdev->ud.sockfd = -1; |
3691 | } |
3692 | pr_info("release socket\n"); |
3693 | |
3694 | @@ -879,6 +880,7 @@ static void vhci_device_reset(struct usbip_device *ud) |
3695 | if (ud->tcp_socket) { |
3696 | sockfd_put(ud->tcp_socket); |
3697 | ud->tcp_socket = NULL; |
3698 | + ud->sockfd = -1; |
3699 | } |
3700 | ud->status = VDEV_ST_NULL; |
3701 | |
3702 | diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c |
3703 | index 64613fbf5cf8..cd38f5add254 100644 |
3704 | --- a/drivers/vhost/vhost.c |
3705 | +++ b/drivers/vhost/vhost.c |
3706 | @@ -849,7 +849,7 @@ static void vhost_dev_lock_vqs(struct vhost_dev *d) |
3707 | { |
3708 | int i = 0; |
3709 | for (i = 0; i < d->nvqs; ++i) |
3710 | - mutex_lock(&d->vqs[i]->mutex); |
3711 | + mutex_lock_nested(&d->vqs[i]->mutex, i); |
3712 | } |
3713 | |
3714 | static void vhost_dev_unlock_vqs(struct vhost_dev *d) |
3715 | diff --git a/drivers/video/fbdev/mmp/core.c b/drivers/video/fbdev/mmp/core.c |
3716 | index a0f496049db7..3a6bb6561ba0 100644 |
3717 | --- a/drivers/video/fbdev/mmp/core.c |
3718 | +++ b/drivers/video/fbdev/mmp/core.c |
3719 | @@ -23,6 +23,7 @@ |
3720 | #include <linux/slab.h> |
3721 | #include <linux/dma-mapping.h> |
3722 | #include <linux/export.h> |
3723 | +#include <linux/module.h> |
3724 | #include <video/mmp_disp.h> |
3725 | |
3726 | static struct mmp_overlay *path_get_overlay(struct mmp_path *path, |
3727 | @@ -249,3 +250,7 @@ void mmp_unregister_path(struct mmp_path *path) |
3728 | mutex_unlock(&disp_lock); |
3729 | } |
3730 | EXPORT_SYMBOL_GPL(mmp_unregister_path); |
3731 | + |
3732 | +MODULE_AUTHOR("Zhou Zhu <zzhu3@marvell.com>"); |
3733 | +MODULE_DESCRIPTION("Marvell MMP display framework"); |
3734 | +MODULE_LICENSE("GPL"); |
3735 | diff --git a/drivers/video/fbdev/via/viafbdev.c b/drivers/video/fbdev/via/viafbdev.c |
3736 | index f9718f012aae..badee04ef496 100644 |
3737 | --- a/drivers/video/fbdev/via/viafbdev.c |
3738 | +++ b/drivers/video/fbdev/via/viafbdev.c |
3739 | @@ -1630,16 +1630,14 @@ static void viafb_init_proc(struct viafb_shared *shared) |
3740 | } |
3741 | static void viafb_remove_proc(struct viafb_shared *shared) |
3742 | { |
3743 | - struct proc_dir_entry *viafb_entry = shared->proc_entry, |
3744 | - *iga1_entry = shared->iga1_proc_entry, |
3745 | - *iga2_entry = shared->iga2_proc_entry; |
3746 | + struct proc_dir_entry *viafb_entry = shared->proc_entry; |
3747 | |
3748 | if (!viafb_entry) |
3749 | return; |
3750 | |
3751 | - remove_proc_entry("output_devices", iga2_entry); |
3752 | + remove_proc_entry("output_devices", shared->iga2_proc_entry); |
3753 | remove_proc_entry("iga2", viafb_entry); |
3754 | - remove_proc_entry("output_devices", iga1_entry); |
3755 | + remove_proc_entry("output_devices", shared->iga1_proc_entry); |
3756 | remove_proc_entry("iga1", viafb_entry); |
3757 | remove_proc_entry("supported_output_devices", viafb_entry); |
3758 | |
3759 | diff --git a/drivers/xen/Kconfig b/drivers/xen/Kconfig |
3760 | index f15bb3b789d5..98b8f3205322 100644 |
3761 | --- a/drivers/xen/Kconfig |
3762 | +++ b/drivers/xen/Kconfig |
3763 | @@ -246,7 +246,7 @@ config XEN_ACPI_HOTPLUG_CPU |
3764 | |
3765 | config XEN_ACPI_PROCESSOR |
3766 | tristate "Xen ACPI processor" |
3767 | - depends on XEN && X86 && ACPI_PROCESSOR && CPU_FREQ |
3768 | + depends on XEN && XEN_DOM0 && X86 && ACPI_PROCESSOR && CPU_FREQ |
3769 | default m |
3770 | help |
3771 | This ACPI processor uploads Power Management information to the Xen |
3772 | diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c |
3773 | index 0fe346c4bd28..d3dd631432eb 100644 |
3774 | --- a/fs/btrfs/ioctl.c |
3775 | +++ b/fs/btrfs/ioctl.c |
3776 | @@ -2244,7 +2244,7 @@ static noinline int btrfs_search_path_in_tree(struct btrfs_fs_info *info, |
3777 | if (!path) |
3778 | return -ENOMEM; |
3779 | |
3780 | - ptr = &name[BTRFS_INO_LOOKUP_PATH_MAX]; |
3781 | + ptr = &name[BTRFS_INO_LOOKUP_PATH_MAX - 1]; |
3782 | |
3783 | key.objectid = tree_id; |
3784 | key.type = BTRFS_ROOT_ITEM_KEY; |
3785 | diff --git a/fs/compat_binfmt_elf.c b/fs/compat_binfmt_elf.c |
3786 | index 4d24d17bcfc1..943be5ecfcd9 100644 |
3787 | --- a/fs/compat_binfmt_elf.c |
3788 | +++ b/fs/compat_binfmt_elf.c |
3789 | @@ -51,6 +51,7 @@ |
3790 | #define elf_prstatus compat_elf_prstatus |
3791 | #define elf_prpsinfo compat_elf_prpsinfo |
3792 | |
3793 | +#ifdef CONFIG_ELF_CORE |
3794 | /* |
3795 | * Compat version of cputime_to_compat_timeval, perhaps this |
3796 | * should be an inline in <linux/compat.h>. |
3797 | @@ -63,6 +64,7 @@ static void cputime_to_compat_timeval(const cputime_t cputime, |
3798 | value->tv_sec = tv.tv_sec; |
3799 | value->tv_usec = tv.tv_usec; |
3800 | } |
3801 | +#endif |
3802 | |
3803 | #undef cputime_to_timeval |
3804 | #define cputime_to_timeval cputime_to_compat_timeval |
3805 | diff --git a/fs/reiserfs/lbalance.c b/fs/reiserfs/lbalance.c |
3806 | index 249594a821e0..f5cebd70d903 100644 |
3807 | --- a/fs/reiserfs/lbalance.c |
3808 | +++ b/fs/reiserfs/lbalance.c |
3809 | @@ -475,7 +475,7 @@ static void leaf_item_bottle(struct buffer_info *dest_bi, |
3810 | * 'cpy_bytes'; create new item header; |
3811 | * n_ih = new item_header; |
3812 | */ |
3813 | - memcpy(&n_ih, ih, SHORT_KEY_SIZE); |
3814 | + memcpy(&n_ih.ih_key, &ih->ih_key, KEY_SIZE); |
3815 | |
3816 | /* Endian safe, both le */ |
3817 | n_ih.ih_version = ih->ih_version; |
3818 | diff --git a/fs/reiserfs/reiserfs.h b/fs/reiserfs/reiserfs.h |
3819 | index 2adcde137c3f..5dcf3ab83886 100644 |
3820 | --- a/fs/reiserfs/reiserfs.h |
3821 | +++ b/fs/reiserfs/reiserfs.h |
3822 | @@ -1326,7 +1326,6 @@ struct cpu_key { |
3823 | #define KEY_NOT_FOUND 0 |
3824 | |
3825 | #define KEY_SIZE (sizeof(struct reiserfs_key)) |
3826 | -#define SHORT_KEY_SIZE (sizeof (__u32) + sizeof (__u32)) |
3827 | |
3828 | /* return values for search_by_key and clones */ |
3829 | #define ITEM_FOUND 1 |
3830 | diff --git a/include/crypto/hash.h b/include/crypto/hash.h |
3831 | index 26605888a199..d3de3b819ec0 100644 |
3832 | --- a/include/crypto/hash.h |
3833 | +++ b/include/crypto/hash.h |
3834 | @@ -205,7 +205,6 @@ struct crypto_ahash { |
3835 | unsigned int keylen); |
3836 | |
3837 | unsigned int reqsize; |
3838 | - bool has_setkey; |
3839 | struct crypto_tfm base; |
3840 | }; |
3841 | |
3842 | @@ -399,11 +398,6 @@ static inline void *ahash_request_ctx(struct ahash_request *req) |
3843 | int crypto_ahash_setkey(struct crypto_ahash *tfm, const u8 *key, |
3844 | unsigned int keylen); |
3845 | |
3846 | -static inline bool crypto_ahash_has_setkey(struct crypto_ahash *tfm) |
3847 | -{ |
3848 | - return tfm->has_setkey; |
3849 | -} |
3850 | - |
3851 | /** |
3852 | * crypto_ahash_finup() - update and finalize message digest |
3853 | * @req: reference to the ahash_request handle that holds all information |
3854 | @@ -475,7 +469,12 @@ static inline int crypto_ahash_export(struct ahash_request *req, void *out) |
3855 | */ |
3856 | static inline int crypto_ahash_import(struct ahash_request *req, const void *in) |
3857 | { |
3858 | - return crypto_ahash_reqtfm(req)->import(req, in); |
3859 | + struct crypto_ahash *tfm = crypto_ahash_reqtfm(req); |
3860 | + |
3861 | + if (crypto_ahash_get_flags(tfm) & CRYPTO_TFM_NEED_KEY) |
3862 | + return -ENOKEY; |
3863 | + |
3864 | + return tfm->import(req, in); |
3865 | } |
3866 | |
3867 | /** |
3868 | @@ -492,7 +491,12 @@ static inline int crypto_ahash_import(struct ahash_request *req, const void *in) |
3869 | */ |
3870 | static inline int crypto_ahash_init(struct ahash_request *req) |
3871 | { |
3872 | - return crypto_ahash_reqtfm(req)->init(req); |
3873 | + struct crypto_ahash *tfm = crypto_ahash_reqtfm(req); |
3874 | + |
3875 | + if (crypto_ahash_get_flags(tfm) & CRYPTO_TFM_NEED_KEY) |
3876 | + return -ENOKEY; |
3877 | + |
3878 | + return tfm->init(req); |
3879 | } |
3880 | |
3881 | /** |
3882 | @@ -845,7 +849,12 @@ static inline int crypto_shash_export(struct shash_desc *desc, void *out) |
3883 | */ |
3884 | static inline int crypto_shash_import(struct shash_desc *desc, const void *in) |
3885 | { |
3886 | - return crypto_shash_alg(desc->tfm)->import(desc, in); |
3887 | + struct crypto_shash *tfm = desc->tfm; |
3888 | + |
3889 | + if (crypto_shash_get_flags(tfm) & CRYPTO_TFM_NEED_KEY) |
3890 | + return -ENOKEY; |
3891 | + |
3892 | + return crypto_shash_alg(tfm)->import(desc, in); |
3893 | } |
3894 | |
3895 | /** |
3896 | @@ -861,7 +870,12 @@ static inline int crypto_shash_import(struct shash_desc *desc, const void *in) |
3897 | */ |
3898 | static inline int crypto_shash_init(struct shash_desc *desc) |
3899 | { |
3900 | - return crypto_shash_alg(desc->tfm)->init(desc); |
3901 | + struct crypto_shash *tfm = desc->tfm; |
3902 | + |
3903 | + if (crypto_shash_get_flags(tfm) & CRYPTO_TFM_NEED_KEY) |
3904 | + return -ENOKEY; |
3905 | + |
3906 | + return crypto_shash_alg(tfm)->init(desc); |
3907 | } |
3908 | |
3909 | /** |
3910 | diff --git a/include/linux/crypto.h b/include/linux/crypto.h |
3911 | index 7cee5551625b..8edb3ba6f640 100644 |
3912 | --- a/include/linux/crypto.h |
3913 | +++ b/include/linux/crypto.h |
3914 | @@ -102,9 +102,17 @@ |
3915 | */ |
3916 | #define CRYPTO_ALG_INTERNAL 0x00002000 |
3917 | |
3918 | +/* |
3919 | + * Set if the algorithm has a ->setkey() method but can be used without |
3920 | + * calling it first, i.e. there is a default key. |
3921 | + */ |
3922 | +#define CRYPTO_ALG_OPTIONAL_KEY 0x00004000 |
3923 | + |
3924 | /* |
3925 | * Transform masks and values (for crt_flags). |
3926 | */ |
3927 | +#define CRYPTO_TFM_NEED_KEY 0x00000001 |
3928 | + |
3929 | #define CRYPTO_TFM_REQ_MASK 0x000fff00 |
3930 | #define CRYPTO_TFM_RES_MASK 0xfff00000 |
3931 | |
3932 | diff --git a/include/linux/pci-ecam.h b/include/linux/pci-ecam.h |
3933 | index 7adad206b1f4..e19efac11d13 100644 |
3934 | --- a/include/linux/pci-ecam.h |
3935 | +++ b/include/linux/pci-ecam.h |
3936 | @@ -59,7 +59,7 @@ void __iomem *pci_ecam_map_bus(struct pci_bus *bus, unsigned int devfn, |
3937 | /* default ECAM ops */ |
3938 | extern struct pci_ecam_ops pci_generic_ecam_ops; |
3939 | |
3940 | -#ifdef CONFIG_PCI_HOST_GENERIC |
3941 | +#ifdef CONFIG_PCI_HOST_COMMON |
3942 | /* for DT-based PCI controllers that support ECAM */ |
3943 | int pci_host_common_probe(struct platform_device *pdev, |
3944 | struct pci_ecam_ops *ops); |
3945 | diff --git a/include/linux/ptr_ring.h b/include/linux/ptr_ring.h |
3946 | index e38f471a5402..05c6d20c2a7a 100644 |
3947 | --- a/include/linux/ptr_ring.h |
3948 | +++ b/include/linux/ptr_ring.h |
3949 | @@ -351,6 +351,8 @@ static inline void *ptr_ring_consume_bh(struct ptr_ring *r) |
3950 | |
3951 | static inline void **__ptr_ring_init_queue_alloc(unsigned int size, gfp_t gfp) |
3952 | { |
3953 | + if (size * sizeof(void *) > KMALLOC_MAX_SIZE) |
3954 | + return NULL; |
3955 | return kcalloc(size, sizeof(void *), gfp); |
3956 | } |
3957 | |
3958 | diff --git a/include/linux/string.h b/include/linux/string.h |
3959 | index 26b6f6a66f83..0c88c0a1a72b 100644 |
3960 | --- a/include/linux/string.h |
3961 | +++ b/include/linux/string.h |
3962 | @@ -123,6 +123,7 @@ extern char *kstrdup(const char *s, gfp_t gfp) __malloc; |
3963 | extern const char *kstrdup_const(const char *s, gfp_t gfp); |
3964 | extern char *kstrndup(const char *s, size_t len, gfp_t gfp); |
3965 | extern void *kmemdup(const void *src, size_t len, gfp_t gfp); |
3966 | +extern char *kmemdup_nul(const char *s, size_t len, gfp_t gfp); |
3967 | |
3968 | extern char **argv_split(gfp_t gfp, const char *str, int *argcp); |
3969 | extern void argv_free(char **argv); |
3970 | diff --git a/include/net/red.h b/include/net/red.h |
3971 | index 76e0b5f922c6..3618cdfec884 100644 |
3972 | --- a/include/net/red.h |
3973 | +++ b/include/net/red.h |
3974 | @@ -167,6 +167,17 @@ static inline void red_set_vars(struct red_vars *v) |
3975 | v->qcount = -1; |
3976 | } |
3977 | |
3978 | +static inline bool red_check_params(u32 qth_min, u32 qth_max, u8 Wlog) |
3979 | +{ |
3980 | + if (fls(qth_min) + Wlog > 32) |
3981 | + return false; |
3982 | + if (fls(qth_max) + Wlog > 32) |
3983 | + return false; |
3984 | + if (qth_max < qth_min) |
3985 | + return false; |
3986 | + return true; |
3987 | +} |
3988 | + |
3989 | static inline void red_set_parms(struct red_parms *p, |
3990 | u32 qth_min, u32 qth_max, u8 Wlog, u8 Plog, |
3991 | u8 Scell_log, u8 *stab, u32 max_P) |
3992 | @@ -178,7 +189,7 @@ static inline void red_set_parms(struct red_parms *p, |
3993 | p->qth_max = qth_max << Wlog; |
3994 | p->Wlog = Wlog; |
3995 | p->Plog = Plog; |
3996 | - if (delta < 0) |
3997 | + if (delta <= 0) |
3998 | delta = 1; |
3999 | p->qth_delta = delta; |
4000 | if (!max_P) { |
4001 | diff --git a/include/net/sctp/sctp.h b/include/net/sctp/sctp.h |
4002 | index 61d9ce89d10d..579ded2c6ef1 100644 |
4003 | --- a/include/net/sctp/sctp.h |
4004 | +++ b/include/net/sctp/sctp.h |
4005 | @@ -433,7 +433,8 @@ static inline int sctp_frag_point(const struct sctp_association *asoc, int pmtu) |
4006 | if (asoc->user_frag) |
4007 | frag = min_t(int, frag, asoc->user_frag); |
4008 | |
4009 | - frag = SCTP_TRUNC4(min_t(int, frag, SCTP_MAX_CHUNK_LEN)); |
4010 | + frag = SCTP_TRUNC4(min_t(int, frag, SCTP_MAX_CHUNK_LEN - |
4011 | + sizeof(struct sctp_data_chunk))); |
4012 | |
4013 | return frag; |
4014 | } |
4015 | diff --git a/include/trace/events/clk.h b/include/trace/events/clk.h |
4016 | index 758607226bfd..2cd449328aee 100644 |
4017 | --- a/include/trace/events/clk.h |
4018 | +++ b/include/trace/events/clk.h |
4019 | @@ -134,12 +134,12 @@ DECLARE_EVENT_CLASS(clk_parent, |
4020 | |
4021 | TP_STRUCT__entry( |
4022 | __string( name, core->name ) |
4023 | - __string( pname, parent->name ) |
4024 | + __string( pname, parent ? parent->name : "none" ) |
4025 | ), |
4026 | |
4027 | TP_fast_assign( |
4028 | __assign_str(name, core->name); |
4029 | - __assign_str(pname, parent->name); |
4030 | + __assign_str(pname, parent ? parent->name : "none"); |
4031 | ), |
4032 | |
4033 | TP_printk("%s %s", __get_str(name), __get_str(pname)) |
4034 | diff --git a/kernel/kcov.c b/kernel/kcov.c |
4035 | index 3cbb0c879705..3883df58aa12 100644 |
4036 | --- a/kernel/kcov.c |
4037 | +++ b/kernel/kcov.c |
4038 | @@ -220,9 +220,9 @@ static int kcov_ioctl_locked(struct kcov *kcov, unsigned int cmd, |
4039 | if (unused != 0 || kcov->mode == KCOV_MODE_DISABLED || |
4040 | kcov->area == NULL) |
4041 | return -EINVAL; |
4042 | - if (kcov->t != NULL) |
4043 | - return -EBUSY; |
4044 | t = current; |
4045 | + if (kcov->t != NULL || t->kcov != NULL) |
4046 | + return -EBUSY; |
4047 | /* Cache in task struct for performance. */ |
4048 | t->kcov_size = kcov->size; |
4049 | t->kcov_area = kcov->area; |
4050 | diff --git a/kernel/trace/blktrace.c b/kernel/trace/blktrace.c |
4051 | index dbafc5df03f3..4e17d55ba127 100644 |
4052 | --- a/kernel/trace/blktrace.c |
4053 | +++ b/kernel/trace/blktrace.c |
4054 | @@ -57,7 +57,8 @@ static struct tracer_flags blk_tracer_flags = { |
4055 | }; |
4056 | |
4057 | /* Global reference count of probes */ |
4058 | -static atomic_t blk_probes_ref = ATOMIC_INIT(0); |
4059 | +static DEFINE_MUTEX(blk_probe_mutex); |
4060 | +static int blk_probes_ref; |
4061 | |
4062 | static void blk_register_tracepoints(void); |
4063 | static void blk_unregister_tracepoints(void); |
4064 | @@ -306,11 +307,26 @@ static void blk_trace_free(struct blk_trace *bt) |
4065 | kfree(bt); |
4066 | } |
4067 | |
4068 | +static void get_probe_ref(void) |
4069 | +{ |
4070 | + mutex_lock(&blk_probe_mutex); |
4071 | + if (++blk_probes_ref == 1) |
4072 | + blk_register_tracepoints(); |
4073 | + mutex_unlock(&blk_probe_mutex); |
4074 | +} |
4075 | + |
4076 | +static void put_probe_ref(void) |
4077 | +{ |
4078 | + mutex_lock(&blk_probe_mutex); |
4079 | + if (!--blk_probes_ref) |
4080 | + blk_unregister_tracepoints(); |
4081 | + mutex_unlock(&blk_probe_mutex); |
4082 | +} |
4083 | + |
4084 | static void blk_trace_cleanup(struct blk_trace *bt) |
4085 | { |
4086 | blk_trace_free(bt); |
4087 | - if (atomic_dec_and_test(&blk_probes_ref)) |
4088 | - blk_unregister_tracepoints(); |
4089 | + put_probe_ref(); |
4090 | } |
4091 | |
4092 | int blk_trace_remove(struct request_queue *q) |
4093 | @@ -522,8 +538,7 @@ int do_blk_trace_setup(struct request_queue *q, char *name, dev_t dev, |
4094 | if (cmpxchg(&q->blk_trace, NULL, bt)) |
4095 | goto err; |
4096 | |
4097 | - if (atomic_inc_return(&blk_probes_ref) == 1) |
4098 | - blk_register_tracepoints(); |
4099 | + get_probe_ref(); |
4100 | |
4101 | return 0; |
4102 | err: |
4103 | @@ -1469,9 +1484,7 @@ static int blk_trace_remove_queue(struct request_queue *q) |
4104 | if (bt == NULL) |
4105 | return -EINVAL; |
4106 | |
4107 | - if (atomic_dec_and_test(&blk_probes_ref)) |
4108 | - blk_unregister_tracepoints(); |
4109 | - |
4110 | + put_probe_ref(); |
4111 | blk_trace_free(bt); |
4112 | return 0; |
4113 | } |
4114 | @@ -1502,8 +1515,7 @@ static int blk_trace_setup_queue(struct request_queue *q, |
4115 | if (cmpxchg(&q->blk_trace, NULL, bt)) |
4116 | goto free_bt; |
4117 | |
4118 | - if (atomic_inc_return(&blk_probes_ref) == 1) |
4119 | - blk_register_tracepoints(); |
4120 | + get_probe_ref(); |
4121 | return 0; |
4122 | |
4123 | free_bt: |
4124 | diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug |
4125 | index f60e67217f18..58a22ca10f33 100644 |
4126 | --- a/lib/Kconfig.debug |
4127 | +++ b/lib/Kconfig.debug |
4128 | @@ -197,7 +197,6 @@ config ENABLE_MUST_CHECK |
4129 | config FRAME_WARN |
4130 | int "Warn for stack frames larger than (needs gcc 4.4)" |
4131 | range 0 8192 |
4132 | - default 0 if KASAN |
4133 | default 2048 if GCC_PLUGIN_LATENT_ENTROPY |
4134 | default 1024 if !64BIT |
4135 | default 2048 if 64BIT |
4136 | diff --git a/lib/oid_registry.c b/lib/oid_registry.c |
4137 | index 318f382a010d..150e04d70303 100644 |
4138 | --- a/lib/oid_registry.c |
4139 | +++ b/lib/oid_registry.c |
4140 | @@ -116,7 +116,7 @@ int sprint_oid(const void *data, size_t datasize, char *buffer, size_t bufsize) |
4141 | int count; |
4142 | |
4143 | if (v >= end) |
4144 | - return -EBADMSG; |
4145 | + goto bad; |
4146 | |
4147 | n = *v++; |
4148 | ret = count = snprintf(buffer, bufsize, "%u.%u", n / 40, n % 40); |
4149 | @@ -134,7 +134,7 @@ int sprint_oid(const void *data, size_t datasize, char *buffer, size_t bufsize) |
4150 | num = n & 0x7f; |
4151 | do { |
4152 | if (v >= end) |
4153 | - return -EBADMSG; |
4154 | + goto bad; |
4155 | n = *v++; |
4156 | num <<= 7; |
4157 | num |= n & 0x7f; |
4158 | @@ -148,6 +148,10 @@ int sprint_oid(const void *data, size_t datasize, char *buffer, size_t bufsize) |
4159 | } |
4160 | |
4161 | return ret; |
4162 | + |
4163 | +bad: |
4164 | + snprintf(buffer, bufsize, "(bad)"); |
4165 | + return -EBADMSG; |
4166 | } |
4167 | EXPORT_SYMBOL_GPL(sprint_oid); |
4168 | |
4169 | diff --git a/mm/early_ioremap.c b/mm/early_ioremap.c |
4170 | index 6d5717bd7197..57540de2b44c 100644 |
4171 | --- a/mm/early_ioremap.c |
4172 | +++ b/mm/early_ioremap.c |
4173 | @@ -103,7 +103,7 @@ __early_ioremap(resource_size_t phys_addr, unsigned long size, pgprot_t prot) |
4174 | enum fixed_addresses idx; |
4175 | int i, slot; |
4176 | |
4177 | - WARN_ON(system_state != SYSTEM_BOOTING); |
4178 | + WARN_ON(system_state >= SYSTEM_RUNNING); |
4179 | |
4180 | slot = -1; |
4181 | for (i = 0; i < FIX_BTMAPS_SLOTS; i++) { |
4182 | diff --git a/mm/shmem.c b/mm/shmem.c |
4183 | index 004e0f87e8a8..2123bfc39ef2 100644 |
4184 | --- a/mm/shmem.c |
4185 | +++ b/mm/shmem.c |
4186 | @@ -370,6 +370,7 @@ static bool shmem_confirm_swap(struct address_space *mapping, |
4187 | |
4188 | int shmem_huge __read_mostly; |
4189 | |
4190 | +#if defined(CONFIG_SYSFS) || defined(CONFIG_TMPFS) |
4191 | static int shmem_parse_huge(const char *str) |
4192 | { |
4193 | if (!strcmp(str, "never")) |
4194 | @@ -407,6 +408,7 @@ static const char *shmem_format_huge(int huge) |
4195 | return "bad_val"; |
4196 | } |
4197 | } |
4198 | +#endif |
4199 | |
4200 | static unsigned long shmem_unused_huge_shrink(struct shmem_sb_info *sbinfo, |
4201 | struct shrink_control *sc, unsigned long nr_to_split) |
4202 | @@ -1550,7 +1552,7 @@ static int shmem_getpage_gfp(struct inode *inode, pgoff_t index, |
4203 | struct mm_struct *fault_mm, int *fault_type) |
4204 | { |
4205 | struct address_space *mapping = inode->i_mapping; |
4206 | - struct shmem_inode_info *info; |
4207 | + struct shmem_inode_info *info = SHMEM_I(inode); |
4208 | struct shmem_sb_info *sbinfo; |
4209 | struct mm_struct *charge_mm; |
4210 | struct mem_cgroup *memcg; |
4211 | @@ -1600,7 +1602,6 @@ static int shmem_getpage_gfp(struct inode *inode, pgoff_t index, |
4212 | * Fast cache lookup did not find it: |
4213 | * bring it back from swap or allocate. |
4214 | */ |
4215 | - info = SHMEM_I(inode); |
4216 | sbinfo = SHMEM_SB(inode->i_sb); |
4217 | charge_mm = fault_mm ? : current->mm; |
4218 | |
4219 | @@ -1852,7 +1853,6 @@ alloc_nohuge: page = shmem_alloc_and_acct_page(gfp, info, sbinfo, |
4220 | put_page(page); |
4221 | } |
4222 | if (error == -ENOSPC && !once++) { |
4223 | - info = SHMEM_I(inode); |
4224 | spin_lock_irq(&info->lock); |
4225 | shmem_recalc_inode(inode); |
4226 | spin_unlock_irq(&info->lock); |
4227 | diff --git a/mm/util.c b/mm/util.c |
4228 | index 1a41553db866..8c755d05d4e6 100644 |
4229 | --- a/mm/util.c |
4230 | +++ b/mm/util.c |
4231 | @@ -80,6 +80,8 @@ EXPORT_SYMBOL(kstrdup_const); |
4232 | * @s: the string to duplicate |
4233 | * @max: read at most @max chars from @s |
4234 | * @gfp: the GFP mask used in the kmalloc() call when allocating memory |
4235 | + * |
4236 | + * Note: Use kmemdup_nul() instead if the size is known exactly. |
4237 | */ |
4238 | char *kstrndup(const char *s, size_t max, gfp_t gfp) |
4239 | { |
4240 | @@ -117,6 +119,28 @@ void *kmemdup(const void *src, size_t len, gfp_t gfp) |
4241 | } |
4242 | EXPORT_SYMBOL(kmemdup); |
4243 | |
4244 | +/** |
4245 | + * kmemdup_nul - Create a NUL-terminated string from unterminated data |
4246 | + * @s: The data to stringify |
4247 | + * @len: The size of the data |
4248 | + * @gfp: the GFP mask used in the kmalloc() call when allocating memory |
4249 | + */ |
4250 | +char *kmemdup_nul(const char *s, size_t len, gfp_t gfp) |
4251 | +{ |
4252 | + char *buf; |
4253 | + |
4254 | + if (!s) |
4255 | + return NULL; |
4256 | + |
4257 | + buf = kmalloc_track_caller(len + 1, gfp); |
4258 | + if (buf) { |
4259 | + memcpy(buf, s, len); |
4260 | + buf[len] = '\0'; |
4261 | + } |
4262 | + return buf; |
4263 | +} |
4264 | +EXPORT_SYMBOL(kmemdup_nul); |
4265 | + |
4266 | /** |
4267 | * memdup_user - duplicate memory region from user space |
4268 | * |
4269 | diff --git a/mm/vmscan.c b/mm/vmscan.c |
4270 | index f118dc23f662..4365de74bdb0 100644 |
4271 | --- a/mm/vmscan.c |
4272 | +++ b/mm/vmscan.c |
4273 | @@ -295,10 +295,13 @@ EXPORT_SYMBOL(register_shrinker); |
4274 | */ |
4275 | void unregister_shrinker(struct shrinker *shrinker) |
4276 | { |
4277 | + if (!shrinker->nr_deferred) |
4278 | + return; |
4279 | down_write(&shrinker_rwsem); |
4280 | list_del(&shrinker->list); |
4281 | up_write(&shrinker_rwsem); |
4282 | kfree(shrinker->nr_deferred); |
4283 | + shrinker->nr_deferred = NULL; |
4284 | } |
4285 | EXPORT_SYMBOL(unregister_shrinker); |
4286 | |
4287 | diff --git a/net/core/dev.c b/net/core/dev.c |
4288 | index 67b5d4d8acb1..8898618bf341 100644 |
4289 | --- a/net/core/dev.c |
4290 | +++ b/net/core/dev.c |
4291 | @@ -2763,7 +2763,7 @@ struct sk_buff *__skb_gso_segment(struct sk_buff *skb, |
4292 | |
4293 | segs = skb_mac_gso_segment(skb, features); |
4294 | |
4295 | - if (unlikely(skb_needs_check(skb, tx_path))) |
4296 | + if (unlikely(skb_needs_check(skb, tx_path) && !IS_ERR(segs))) |
4297 | skb_warn_bad_offload(skb); |
4298 | |
4299 | return segs; |
4300 | diff --git a/net/decnet/af_decnet.c b/net/decnet/af_decnet.c |
4301 | index 13d6b1a6e0fc..9d8fcdefefc0 100644 |
4302 | --- a/net/decnet/af_decnet.c |
4303 | +++ b/net/decnet/af_decnet.c |
4304 | @@ -1337,6 +1337,12 @@ static int dn_setsockopt(struct socket *sock, int level, int optname, char __use |
4305 | lock_sock(sk); |
4306 | err = __dn_setsockopt(sock, level, optname, optval, optlen, 0); |
4307 | release_sock(sk); |
4308 | +#ifdef CONFIG_NETFILTER |
4309 | + /* we need to exclude all possible ENOPROTOOPTs except default case */ |
4310 | + if (err == -ENOPROTOOPT && optname != DSO_LINKINFO && |
4311 | + optname != DSO_STREAM && optname != DSO_SEQPACKET) |
4312 | + err = nf_setsockopt(sk, PF_DECnet, optname, optval, optlen); |
4313 | +#endif |
4314 | |
4315 | return err; |
4316 | } |
4317 | @@ -1444,15 +1450,6 @@ static int __dn_setsockopt(struct socket *sock, int level,int optname, char __us |
4318 | dn_nsp_send_disc(sk, 0x38, 0, sk->sk_allocation); |
4319 | break; |
4320 | |
4321 | - default: |
4322 | -#ifdef CONFIG_NETFILTER |
4323 | - return nf_setsockopt(sk, PF_DECnet, optname, optval, optlen); |
4324 | -#endif |
4325 | - case DSO_LINKINFO: |
4326 | - case DSO_STREAM: |
4327 | - case DSO_SEQPACKET: |
4328 | - return -ENOPROTOOPT; |
4329 | - |
4330 | case DSO_MAXWINDOW: |
4331 | if (optlen != sizeof(unsigned long)) |
4332 | return -EINVAL; |
4333 | @@ -1500,6 +1497,12 @@ static int __dn_setsockopt(struct socket *sock, int level,int optname, char __us |
4334 | return -EINVAL; |
4335 | scp->info_loc = u.info; |
4336 | break; |
4337 | + |
4338 | + case DSO_LINKINFO: |
4339 | + case DSO_STREAM: |
4340 | + case DSO_SEQPACKET: |
4341 | + default: |
4342 | + return -ENOPROTOOPT; |
4343 | } |
4344 | |
4345 | return 0; |
4346 | @@ -1513,6 +1516,20 @@ static int dn_getsockopt(struct socket *sock, int level, int optname, char __use |
4347 | lock_sock(sk); |
4348 | err = __dn_getsockopt(sock, level, optname, optval, optlen, 0); |
4349 | release_sock(sk); |
4350 | +#ifdef CONFIG_NETFILTER |
4351 | + if (err == -ENOPROTOOPT && optname != DSO_STREAM && |
4352 | + optname != DSO_SEQPACKET && optname != DSO_CONACCEPT && |
4353 | + optname != DSO_CONREJECT) { |
4354 | + int len; |
4355 | + |
4356 | + if (get_user(len, optlen)) |
4357 | + return -EFAULT; |
4358 | + |
4359 | + err = nf_getsockopt(sk, PF_DECnet, optname, optval, &len); |
4360 | + if (err >= 0) |
4361 | + err = put_user(len, optlen); |
4362 | + } |
4363 | +#endif |
4364 | |
4365 | return err; |
4366 | } |
4367 | @@ -1578,26 +1595,6 @@ static int __dn_getsockopt(struct socket *sock, int level,int optname, char __us |
4368 | r_data = &link; |
4369 | break; |
4370 | |
4371 | - default: |
4372 | -#ifdef CONFIG_NETFILTER |
4373 | - { |
4374 | - int ret, len; |
4375 | - |
4376 | - if (get_user(len, optlen)) |
4377 | - return -EFAULT; |
4378 | - |
4379 | - ret = nf_getsockopt(sk, PF_DECnet, optname, optval, &len); |
4380 | - if (ret >= 0) |
4381 | - ret = put_user(len, optlen); |
4382 | - return ret; |
4383 | - } |
4384 | -#endif |
4385 | - case DSO_STREAM: |
4386 | - case DSO_SEQPACKET: |
4387 | - case DSO_CONACCEPT: |
4388 | - case DSO_CONREJECT: |
4389 | - return -ENOPROTOOPT; |
4390 | - |
4391 | case DSO_MAXWINDOW: |
4392 | if (r_len > sizeof(unsigned long)) |
4393 | r_len = sizeof(unsigned long); |
4394 | @@ -1629,6 +1626,13 @@ static int __dn_getsockopt(struct socket *sock, int level,int optname, char __us |
4395 | r_len = sizeof(unsigned char); |
4396 | r_data = &scp->info_rem; |
4397 | break; |
4398 | + |
4399 | + case DSO_STREAM: |
4400 | + case DSO_SEQPACKET: |
4401 | + case DSO_CONACCEPT: |
4402 | + case DSO_CONREJECT: |
4403 | + default: |
4404 | + return -ENOPROTOOPT; |
4405 | } |
4406 | |
4407 | if (r_data) { |
4408 | diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c |
4409 | index 551dd393ceec..bf62fa487262 100644 |
4410 | --- a/net/ipv4/ip_sockglue.c |
4411 | +++ b/net/ipv4/ip_sockglue.c |
4412 | @@ -1243,11 +1243,8 @@ int ip_setsockopt(struct sock *sk, int level, |
4413 | if (err == -ENOPROTOOPT && optname != IP_HDRINCL && |
4414 | optname != IP_IPSEC_POLICY && |
4415 | optname != IP_XFRM_POLICY && |
4416 | - !ip_mroute_opt(optname)) { |
4417 | - lock_sock(sk); |
4418 | + !ip_mroute_opt(optname)) |
4419 | err = nf_setsockopt(sk, PF_INET, optname, optval, optlen); |
4420 | - release_sock(sk); |
4421 | - } |
4422 | #endif |
4423 | return err; |
4424 | } |
4425 | @@ -1272,12 +1269,9 @@ int compat_ip_setsockopt(struct sock *sk, int level, int optname, |
4426 | if (err == -ENOPROTOOPT && optname != IP_HDRINCL && |
4427 | optname != IP_IPSEC_POLICY && |
4428 | optname != IP_XFRM_POLICY && |
4429 | - !ip_mroute_opt(optname)) { |
4430 | - lock_sock(sk); |
4431 | - err = compat_nf_setsockopt(sk, PF_INET, optname, |
4432 | - optval, optlen); |
4433 | - release_sock(sk); |
4434 | - } |
4435 | + !ip_mroute_opt(optname)) |
4436 | + err = compat_nf_setsockopt(sk, PF_INET, optname, optval, |
4437 | + optlen); |
4438 | #endif |
4439 | return err; |
4440 | } |
4441 | diff --git a/net/ipv4/netfilter/ipt_CLUSTERIP.c b/net/ipv4/netfilter/ipt_CLUSTERIP.c |
4442 | index 4a9e6db9df8d..16599bae11dd 100644 |
4443 | --- a/net/ipv4/netfilter/ipt_CLUSTERIP.c |
4444 | +++ b/net/ipv4/netfilter/ipt_CLUSTERIP.c |
4445 | @@ -365,7 +365,7 @@ static int clusterip_tg_check(const struct xt_tgchk_param *par) |
4446 | struct ipt_clusterip_tgt_info *cipinfo = par->targinfo; |
4447 | const struct ipt_entry *e = par->entryinfo; |
4448 | struct clusterip_config *config; |
4449 | - int ret; |
4450 | + int ret, i; |
4451 | |
4452 | if (par->nft_compat) { |
4453 | pr_err("cannot use CLUSTERIP target from nftables compat\n"); |
4454 | @@ -384,8 +384,18 @@ static int clusterip_tg_check(const struct xt_tgchk_param *par) |
4455 | pr_info("Please specify destination IP\n"); |
4456 | return -EINVAL; |
4457 | } |
4458 | - |
4459 | - /* FIXME: further sanity checks */ |
4460 | + if (cipinfo->num_local_nodes > ARRAY_SIZE(cipinfo->local_nodes)) { |
4461 | + pr_info("bad num_local_nodes %u\n", cipinfo->num_local_nodes); |
4462 | + return -EINVAL; |
4463 | + } |
4464 | + for (i = 0; i < cipinfo->num_local_nodes; i++) { |
4465 | + if (cipinfo->local_nodes[i] - 1 >= |
4466 | + sizeof(config->local_nodes) * 8) { |
4467 | + pr_info("bad local_nodes[%d] %u\n", |
4468 | + i, cipinfo->local_nodes[i]); |
4469 | + return -EINVAL; |
4470 | + } |
4471 | + } |
4472 | |
4473 | config = clusterip_config_find_get(par->net, e->ip.dst.s_addr, 1); |
4474 | if (!config) { |
4475 | diff --git a/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c b/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c |
4476 | index 0c9ded247ebb..6dc8eab0fabc 100644 |
4477 | --- a/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c |
4478 | +++ b/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c |
4479 | @@ -218,15 +218,19 @@ getorigdst(struct sock *sk, int optval, void __user *user, int *len) |
4480 | struct nf_conntrack_tuple tuple; |
4481 | |
4482 | memset(&tuple, 0, sizeof(tuple)); |
4483 | + |
4484 | + lock_sock(sk); |
4485 | tuple.src.u3.ip = inet->inet_rcv_saddr; |
4486 | tuple.src.u.tcp.port = inet->inet_sport; |
4487 | tuple.dst.u3.ip = inet->inet_daddr; |
4488 | tuple.dst.u.tcp.port = inet->inet_dport; |
4489 | tuple.src.l3num = PF_INET; |
4490 | tuple.dst.protonum = sk->sk_protocol; |
4491 | + release_sock(sk); |
4492 | |
4493 | /* We only do TCP and SCTP at the moment: is there a better way? */ |
4494 | - if (sk->sk_protocol != IPPROTO_TCP && sk->sk_protocol != IPPROTO_SCTP) { |
4495 | + if (tuple.dst.protonum != IPPROTO_TCP && |
4496 | + tuple.dst.protonum != IPPROTO_SCTP) { |
4497 | pr_debug("SO_ORIGINAL_DST: Not a TCP/SCTP socket\n"); |
4498 | return -ENOPROTOOPT; |
4499 | } |
4500 | diff --git a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c |
4501 | index bcea985dd76b..493a32f6a5f2 100644 |
4502 | --- a/net/ipv6/ipv6_sockglue.c |
4503 | +++ b/net/ipv6/ipv6_sockglue.c |
4504 | @@ -907,12 +907,8 @@ int ipv6_setsockopt(struct sock *sk, int level, int optname, |
4505 | #ifdef CONFIG_NETFILTER |
4506 | /* we need to exclude all possible ENOPROTOOPTs except default case */ |
4507 | if (err == -ENOPROTOOPT && optname != IPV6_IPSEC_POLICY && |
4508 | - optname != IPV6_XFRM_POLICY) { |
4509 | - lock_sock(sk); |
4510 | - err = nf_setsockopt(sk, PF_INET6, optname, optval, |
4511 | - optlen); |
4512 | - release_sock(sk); |
4513 | - } |
4514 | + optname != IPV6_XFRM_POLICY) |
4515 | + err = nf_setsockopt(sk, PF_INET6, optname, optval, optlen); |
4516 | #endif |
4517 | return err; |
4518 | } |
4519 | @@ -942,12 +938,9 @@ int compat_ipv6_setsockopt(struct sock *sk, int level, int optname, |
4520 | #ifdef CONFIG_NETFILTER |
4521 | /* we need to exclude all possible ENOPROTOOPTs except default case */ |
4522 | if (err == -ENOPROTOOPT && optname != IPV6_IPSEC_POLICY && |
4523 | - optname != IPV6_XFRM_POLICY) { |
4524 | - lock_sock(sk); |
4525 | - err = compat_nf_setsockopt(sk, PF_INET6, optname, |
4526 | - optval, optlen); |
4527 | - release_sock(sk); |
4528 | - } |
4529 | + optname != IPV6_XFRM_POLICY) |
4530 | + err = compat_nf_setsockopt(sk, PF_INET6, optname, optval, |
4531 | + optlen); |
4532 | #endif |
4533 | return err; |
4534 | } |
4535 | diff --git a/net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c b/net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c |
4536 | index 963ee3848675..af80e97f59b5 100644 |
4537 | --- a/net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c |
4538 | +++ b/net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c |
4539 | @@ -226,20 +226,27 @@ static struct nf_hook_ops ipv6_conntrack_ops[] __read_mostly = { |
4540 | static int |
4541 | ipv6_getorigdst(struct sock *sk, int optval, void __user *user, int *len) |
4542 | { |
4543 | - const struct inet_sock *inet = inet_sk(sk); |
4544 | + struct nf_conntrack_tuple tuple = { .src.l3num = NFPROTO_IPV6 }; |
4545 | const struct ipv6_pinfo *inet6 = inet6_sk(sk); |
4546 | + const struct inet_sock *inet = inet_sk(sk); |
4547 | const struct nf_conntrack_tuple_hash *h; |
4548 | struct sockaddr_in6 sin6; |
4549 | - struct nf_conntrack_tuple tuple = { .src.l3num = NFPROTO_IPV6 }; |
4550 | struct nf_conn *ct; |
4551 | + __be32 flow_label; |
4552 | + int bound_dev_if; |
4553 | |
4554 | + lock_sock(sk); |
4555 | tuple.src.u3.in6 = sk->sk_v6_rcv_saddr; |
4556 | tuple.src.u.tcp.port = inet->inet_sport; |
4557 | tuple.dst.u3.in6 = sk->sk_v6_daddr; |
4558 | tuple.dst.u.tcp.port = inet->inet_dport; |
4559 | tuple.dst.protonum = sk->sk_protocol; |
4560 | + bound_dev_if = sk->sk_bound_dev_if; |
4561 | + flow_label = inet6->flow_label; |
4562 | + release_sock(sk); |
4563 | |
4564 | - if (sk->sk_protocol != IPPROTO_TCP && sk->sk_protocol != IPPROTO_SCTP) |
4565 | + if (tuple.dst.protonum != IPPROTO_TCP && |
4566 | + tuple.dst.protonum != IPPROTO_SCTP) |
4567 | return -ENOPROTOOPT; |
4568 | |
4569 | if (*len < 0 || (unsigned int) *len < sizeof(sin6)) |
4570 | @@ -257,14 +264,13 @@ ipv6_getorigdst(struct sock *sk, int optval, void __user *user, int *len) |
4571 | |
4572 | sin6.sin6_family = AF_INET6; |
4573 | sin6.sin6_port = ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.dst.u.tcp.port; |
4574 | - sin6.sin6_flowinfo = inet6->flow_label & IPV6_FLOWINFO_MASK; |
4575 | + sin6.sin6_flowinfo = flow_label & IPV6_FLOWINFO_MASK; |
4576 | memcpy(&sin6.sin6_addr, |
4577 | &ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.dst.u3.in6, |
4578 | sizeof(sin6.sin6_addr)); |
4579 | |
4580 | nf_ct_put(ct); |
4581 | - sin6.sin6_scope_id = ipv6_iface_scope_id(&sin6.sin6_addr, |
4582 | - sk->sk_bound_dev_if); |
4583 | + sin6.sin6_scope_id = ipv6_iface_scope_id(&sin6.sin6_addr, bound_dev_if); |
4584 | return copy_to_user(user, &sin6, sizeof(sin6)) ? -EFAULT : 0; |
4585 | } |
4586 | |
4587 | diff --git a/net/kcm/kcmsock.c b/net/kcm/kcmsock.c |
4588 | index 22785dc03051..179cd9b1b1f4 100644 |
4589 | --- a/net/kcm/kcmsock.c |
4590 | +++ b/net/kcm/kcmsock.c |
4591 | @@ -1381,8 +1381,13 @@ static int kcm_attach(struct socket *sock, struct socket *csock, |
4592 | if (!csk) |
4593 | return -EINVAL; |
4594 | |
4595 | - /* We must prevent loops or risk deadlock ! */ |
4596 | - if (csk->sk_family == PF_KCM) |
4597 | + /* Only allow TCP sockets to be attached for now */ |
4598 | + if ((csk->sk_family != AF_INET && csk->sk_family != AF_INET6) || |
4599 | + csk->sk_protocol != IPPROTO_TCP) |
4600 | + return -EOPNOTSUPP; |
4601 | + |
4602 | + /* Don't allow listeners or closed sockets */ |
4603 | + if (csk->sk_state == TCP_LISTEN || csk->sk_state == TCP_CLOSE) |
4604 | return -EOPNOTSUPP; |
4605 | |
4606 | psock = kmem_cache_zalloc(kcm_psockp, GFP_KERNEL); |
4607 | @@ -1404,9 +1409,18 @@ static int kcm_attach(struct socket *sock, struct socket *csock, |
4608 | return err; |
4609 | } |
4610 | |
4611 | - sock_hold(csk); |
4612 | - |
4613 | write_lock_bh(&csk->sk_callback_lock); |
4614 | + |
4615 | + /* Check if sk_user_data is aready by KCM or someone else. |
4616 | + * Must be done under lock to prevent race conditions. |
4617 | + */ |
4618 | + if (csk->sk_user_data) { |
4619 | + write_unlock_bh(&csk->sk_callback_lock); |
4620 | + strp_done(&psock->strp); |
4621 | + kmem_cache_free(kcm_psockp, psock); |
4622 | + return -EALREADY; |
4623 | + } |
4624 | + |
4625 | psock->save_data_ready = csk->sk_data_ready; |
4626 | psock->save_write_space = csk->sk_write_space; |
4627 | psock->save_state_change = csk->sk_state_change; |
4628 | @@ -1414,8 +1428,11 @@ static int kcm_attach(struct socket *sock, struct socket *csock, |
4629 | csk->sk_data_ready = psock_data_ready; |
4630 | csk->sk_write_space = psock_write_space; |
4631 | csk->sk_state_change = psock_state_change; |
4632 | + |
4633 | write_unlock_bh(&csk->sk_callback_lock); |
4634 | |
4635 | + sock_hold(csk); |
4636 | + |
4637 | /* Finished initialization, now add the psock to the MUX. */ |
4638 | spin_lock_bh(&mux->lock); |
4639 | head = &mux->psocks; |
4640 | diff --git a/net/netfilter/x_tables.c b/net/netfilter/x_tables.c |
4641 | index fc4977456c30..e47ade305a46 100644 |
4642 | --- a/net/netfilter/x_tables.c |
4643 | +++ b/net/netfilter/x_tables.c |
4644 | @@ -39,8 +39,6 @@ MODULE_LICENSE("GPL"); |
4645 | MODULE_AUTHOR("Harald Welte <laforge@netfilter.org>"); |
4646 | MODULE_DESCRIPTION("{ip,ip6,arp,eb}_tables backend module"); |
4647 | |
4648 | -#define SMP_ALIGN(x) (((x) + SMP_CACHE_BYTES-1) & ~(SMP_CACHE_BYTES-1)) |
4649 | - |
4650 | struct compat_delta { |
4651 | unsigned int offset; /* offset in kernel */ |
4652 | int delta; /* delta in 32bit user land */ |
4653 | @@ -209,6 +207,9 @@ xt_request_find_match(uint8_t nfproto, const char *name, uint8_t revision) |
4654 | { |
4655 | struct xt_match *match; |
4656 | |
4657 | + if (strnlen(name, XT_EXTENSION_MAXNAMELEN) == XT_EXTENSION_MAXNAMELEN) |
4658 | + return ERR_PTR(-EINVAL); |
4659 | + |
4660 | match = xt_find_match(nfproto, name, revision); |
4661 | if (IS_ERR(match)) { |
4662 | request_module("%st_%s", xt_prefix[nfproto], name); |
4663 | @@ -251,6 +252,9 @@ struct xt_target *xt_request_find_target(u8 af, const char *name, u8 revision) |
4664 | { |
4665 | struct xt_target *target; |
4666 | |
4667 | + if (strnlen(name, XT_EXTENSION_MAXNAMELEN) == XT_EXTENSION_MAXNAMELEN) |
4668 | + return ERR_PTR(-EINVAL); |
4669 | + |
4670 | target = xt_find_target(af, name, revision); |
4671 | if (IS_ERR(target)) { |
4672 | request_module("%st_%s", xt_prefix[af], name); |
4673 | @@ -952,7 +956,7 @@ struct xt_table_info *xt_alloc_table_info(unsigned int size) |
4674 | return NULL; |
4675 | |
4676 | /* Pedantry: prevent them from hitting BUG() in vmalloc.c --RR */ |
4677 | - if ((SMP_ALIGN(size) >> PAGE_SHIFT) + 2 > totalram_pages) |
4678 | + if ((size >> PAGE_SHIFT) + 2 > totalram_pages) |
4679 | return NULL; |
4680 | |
4681 | if (sz <= (PAGE_SIZE << PAGE_ALLOC_COSTLY_ORDER)) |
4682 | diff --git a/net/netfilter/xt_RATEEST.c b/net/netfilter/xt_RATEEST.c |
4683 | index dbd6c4a12b97..92cfae66743b 100644 |
4684 | --- a/net/netfilter/xt_RATEEST.c |
4685 | +++ b/net/netfilter/xt_RATEEST.c |
4686 | @@ -39,23 +39,31 @@ static void xt_rateest_hash_insert(struct xt_rateest *est) |
4687 | hlist_add_head(&est->list, &rateest_hash[h]); |
4688 | } |
4689 | |
4690 | -struct xt_rateest *xt_rateest_lookup(const char *name) |
4691 | +static struct xt_rateest *__xt_rateest_lookup(const char *name) |
4692 | { |
4693 | struct xt_rateest *est; |
4694 | unsigned int h; |
4695 | |
4696 | h = xt_rateest_hash(name); |
4697 | - mutex_lock(&xt_rateest_mutex); |
4698 | hlist_for_each_entry(est, &rateest_hash[h], list) { |
4699 | if (strcmp(est->name, name) == 0) { |
4700 | est->refcnt++; |
4701 | - mutex_unlock(&xt_rateest_mutex); |
4702 | return est; |
4703 | } |
4704 | } |
4705 | - mutex_unlock(&xt_rateest_mutex); |
4706 | + |
4707 | return NULL; |
4708 | } |
4709 | + |
4710 | +struct xt_rateest *xt_rateest_lookup(const char *name) |
4711 | +{ |
4712 | + struct xt_rateest *est; |
4713 | + |
4714 | + mutex_lock(&xt_rateest_mutex); |
4715 | + est = __xt_rateest_lookup(name); |
4716 | + mutex_unlock(&xt_rateest_mutex); |
4717 | + return est; |
4718 | +} |
4719 | EXPORT_SYMBOL_GPL(xt_rateest_lookup); |
4720 | |
4721 | void xt_rateest_put(struct xt_rateest *est) |
4722 | @@ -100,8 +108,10 @@ static int xt_rateest_tg_checkentry(const struct xt_tgchk_param *par) |
4723 | |
4724 | net_get_random_once(&jhash_rnd, sizeof(jhash_rnd)); |
4725 | |
4726 | - est = xt_rateest_lookup(info->name); |
4727 | + mutex_lock(&xt_rateest_mutex); |
4728 | + est = __xt_rateest_lookup(info->name); |
4729 | if (est) { |
4730 | + mutex_unlock(&xt_rateest_mutex); |
4731 | /* |
4732 | * If estimator parameters are specified, they must match the |
4733 | * existing estimator. |
4734 | @@ -139,11 +149,13 @@ static int xt_rateest_tg_checkentry(const struct xt_tgchk_param *par) |
4735 | |
4736 | info->est = est; |
4737 | xt_rateest_hash_insert(est); |
4738 | + mutex_unlock(&xt_rateest_mutex); |
4739 | return 0; |
4740 | |
4741 | err2: |
4742 | kfree(est); |
4743 | err1: |
4744 | + mutex_unlock(&xt_rateest_mutex); |
4745 | return ret; |
4746 | } |
4747 | |
4748 | diff --git a/net/netfilter/xt_cgroup.c b/net/netfilter/xt_cgroup.c |
4749 | index a086a914865f..0eddbd5328af 100644 |
4750 | --- a/net/netfilter/xt_cgroup.c |
4751 | +++ b/net/netfilter/xt_cgroup.c |
4752 | @@ -52,6 +52,7 @@ static int cgroup_mt_check_v1(const struct xt_mtchk_param *par) |
4753 | return -EINVAL; |
4754 | } |
4755 | |
4756 | + info->priv = NULL; |
4757 | if (info->has_path) { |
4758 | cgrp = cgroup_get_from_path(info->path); |
4759 | if (IS_ERR(cgrp)) { |
4760 | diff --git a/net/rds/tcp.c b/net/rds/tcp.c |
4761 | index 78f976d32018..d36effbf7614 100644 |
4762 | --- a/net/rds/tcp.c |
4763 | +++ b/net/rds/tcp.c |
4764 | @@ -303,7 +303,8 @@ static void rds_tcp_conn_free(void *arg) |
4765 | rdsdebug("freeing tc %p\n", tc); |
4766 | |
4767 | spin_lock_irqsave(&rds_tcp_conn_lock, flags); |
4768 | - list_del(&tc->t_tcp_node); |
4769 | + if (!tc->t_tcp_node_detached) |
4770 | + list_del(&tc->t_tcp_node); |
4771 | spin_unlock_irqrestore(&rds_tcp_conn_lock, flags); |
4772 | |
4773 | kmem_cache_free(rds_tcp_conn_slab, tc); |
4774 | @@ -528,8 +529,12 @@ static void rds_tcp_kill_sock(struct net *net) |
4775 | |
4776 | if (net != c_net || !tc->t_sock) |
4777 | continue; |
4778 | - if (!list_has_conn(&tmp_list, tc->t_cpath->cp_conn)) |
4779 | + if (!list_has_conn(&tmp_list, tc->t_cpath->cp_conn)) { |
4780 | list_move_tail(&tc->t_tcp_node, &tmp_list); |
4781 | + } else { |
4782 | + list_del(&tc->t_tcp_node); |
4783 | + tc->t_tcp_node_detached = true; |
4784 | + } |
4785 | } |
4786 | spin_unlock_irq(&rds_tcp_conn_lock); |
4787 | list_for_each_entry_safe(tc, _tc, &tmp_list, t_tcp_node) { |
4788 | diff --git a/net/rds/tcp.h b/net/rds/tcp.h |
4789 | index 56ea6620fcf9..800e847d2e00 100644 |
4790 | --- a/net/rds/tcp.h |
4791 | +++ b/net/rds/tcp.h |
4792 | @@ -11,6 +11,7 @@ struct rds_tcp_incoming { |
4793 | struct rds_tcp_connection { |
4794 | |
4795 | struct list_head t_tcp_node; |
4796 | + bool t_tcp_node_detached; |
4797 | struct rds_conn_path *t_cpath; |
4798 | /* t_conn_path_lock synchronizes the connection establishment between |
4799 | * rds_tcp_accept_one and rds_tcp_conn_path_connect |
4800 | diff --git a/net/sched/sch_choke.c b/net/sched/sch_choke.c |
4801 | index 3b6d5bd69101..6125c17cffaf 100644 |
4802 | --- a/net/sched/sch_choke.c |
4803 | +++ b/net/sched/sch_choke.c |
4804 | @@ -424,6 +424,9 @@ static int choke_change(struct Qdisc *sch, struct nlattr *opt) |
4805 | |
4806 | ctl = nla_data(tb[TCA_CHOKE_PARMS]); |
4807 | |
4808 | + if (!red_check_params(ctl->qth_min, ctl->qth_max, ctl->Wlog)) |
4809 | + return -EINVAL; |
4810 | + |
4811 | if (ctl->limit > CHOKE_MAX_QUEUE) |
4812 | return -EINVAL; |
4813 | |
4814 | diff --git a/net/sched/sch_gred.c b/net/sched/sch_gred.c |
4815 | index c78a093c551a..44941e25f3ad 100644 |
4816 | --- a/net/sched/sch_gred.c |
4817 | +++ b/net/sched/sch_gred.c |
4818 | @@ -356,6 +356,9 @@ static inline int gred_change_vq(struct Qdisc *sch, int dp, |
4819 | struct gred_sched *table = qdisc_priv(sch); |
4820 | struct gred_sched_data *q = table->tab[dp]; |
4821 | |
4822 | + if (!red_check_params(ctl->qth_min, ctl->qth_max, ctl->Wlog)) |
4823 | + return -EINVAL; |
4824 | + |
4825 | if (!q) { |
4826 | table->tab[dp] = q = *prealloc; |
4827 | *prealloc = NULL; |
4828 | diff --git a/net/sched/sch_red.c b/net/sched/sch_red.c |
4829 | index 249b2a18acbd..4610d44f58d3 100644 |
4830 | --- a/net/sched/sch_red.c |
4831 | +++ b/net/sched/sch_red.c |
4832 | @@ -184,6 +184,8 @@ static int red_change(struct Qdisc *sch, struct nlattr *opt) |
4833 | max_P = tb[TCA_RED_MAX_P] ? nla_get_u32(tb[TCA_RED_MAX_P]) : 0; |
4834 | |
4835 | ctl = nla_data(tb[TCA_RED_PARMS]); |
4836 | + if (!red_check_params(ctl->qth_min, ctl->qth_max, ctl->Wlog)) |
4837 | + return -EINVAL; |
4838 | |
4839 | if (ctl->limit > 0) { |
4840 | child = fifo_create_dflt(sch, &bfifo_qdisc_ops, ctl->limit); |
4841 | diff --git a/net/sched/sch_sfq.c b/net/sched/sch_sfq.c |
4842 | index ea8a56f76b32..d8c2b6baaad2 100644 |
4843 | --- a/net/sched/sch_sfq.c |
4844 | +++ b/net/sched/sch_sfq.c |
4845 | @@ -633,6 +633,9 @@ static int sfq_change(struct Qdisc *sch, struct nlattr *opt) |
4846 | if (ctl->divisor && |
4847 | (!is_power_of_2(ctl->divisor) || ctl->divisor > 65536)) |
4848 | return -EINVAL; |
4849 | + if (ctl_v1 && !red_check_params(ctl_v1->qth_min, ctl_v1->qth_max, |
4850 | + ctl_v1->Wlog)) |
4851 | + return -EINVAL; |
4852 | if (ctl_v1 && ctl_v1->qth_min) { |
4853 | p = kmalloc(sizeof(*p), GFP_KERNEL); |
4854 | if (!p) |
4855 | diff --git a/net/sctp/outqueue.c b/net/sctp/outqueue.c |
4856 | index 0994ce491e7c..0188d9e8272d 100644 |
4857 | --- a/net/sctp/outqueue.c |
4858 | +++ b/net/sctp/outqueue.c |
4859 | @@ -364,7 +364,8 @@ static int sctp_prsctp_prune_sent(struct sctp_association *asoc, |
4860 | asoc->sent_cnt_removable--; |
4861 | asoc->abandoned_sent[SCTP_PR_INDEX(PRIO)]++; |
4862 | |
4863 | - if (!chk->tsn_gap_acked) { |
4864 | + if (queue != &asoc->outqueue.retransmit && |
4865 | + !chk->tsn_gap_acked) { |
4866 | if (chk->transport) |
4867 | chk->transport->flight_size -= |
4868 | sctp_data_size(chk); |
4869 | @@ -1409,7 +1410,8 @@ static void sctp_check_transmitted(struct sctp_outq *q, |
4870 | /* If this chunk has not been acked, stop |
4871 | * considering it as 'outstanding'. |
4872 | */ |
4873 | - if (!tchunk->tsn_gap_acked) { |
4874 | + if (transmitted_queue != &q->retransmit && |
4875 | + !tchunk->tsn_gap_acked) { |
4876 | if (tchunk->transport) |
4877 | tchunk->transport->flight_size -= |
4878 | sctp_data_size(tchunk); |
4879 | diff --git a/net/sctp/socket.c b/net/sctp/socket.c |
4880 | index c472b8391dde..fd5b9d573b38 100644 |
4881 | --- a/net/sctp/socket.c |
4882 | +++ b/net/sctp/socket.c |
4883 | @@ -3125,9 +3125,9 @@ static int sctp_setsockopt_mappedv4(struct sock *sk, char __user *optval, unsign |
4884 | */ |
4885 | static int sctp_setsockopt_maxseg(struct sock *sk, char __user *optval, unsigned int optlen) |
4886 | { |
4887 | + struct sctp_sock *sp = sctp_sk(sk); |
4888 | struct sctp_assoc_value params; |
4889 | struct sctp_association *asoc; |
4890 | - struct sctp_sock *sp = sctp_sk(sk); |
4891 | int val; |
4892 | |
4893 | if (optlen == sizeof(int)) { |
4894 | @@ -3143,26 +3143,35 @@ static int sctp_setsockopt_maxseg(struct sock *sk, char __user *optval, unsigned |
4895 | if (copy_from_user(¶ms, optval, optlen)) |
4896 | return -EFAULT; |
4897 | val = params.assoc_value; |
4898 | - } else |
4899 | + } else { |
4900 | return -EINVAL; |
4901 | + } |
4902 | |
4903 | - if ((val != 0) && ((val < 8) || (val > SCTP_MAX_CHUNK_LEN))) |
4904 | - return -EINVAL; |
4905 | + if (val) { |
4906 | + int min_len, max_len; |
4907 | |
4908 | - asoc = sctp_id2assoc(sk, params.assoc_id); |
4909 | - if (!asoc && params.assoc_id && sctp_style(sk, UDP)) |
4910 | - return -EINVAL; |
4911 | + min_len = SCTP_DEFAULT_MINSEGMENT - sp->pf->af->net_header_len; |
4912 | + min_len -= sizeof(struct sctphdr) + |
4913 | + sizeof(struct sctp_data_chunk); |
4914 | + |
4915 | + max_len = SCTP_MAX_CHUNK_LEN - sizeof(struct sctp_data_chunk); |
4916 | |
4917 | + if (val < min_len || val > max_len) |
4918 | + return -EINVAL; |
4919 | + } |
4920 | + |
4921 | + asoc = sctp_id2assoc(sk, params.assoc_id); |
4922 | if (asoc) { |
4923 | if (val == 0) { |
4924 | - val = asoc->pathmtu; |
4925 | - val -= sp->pf->af->net_header_len; |
4926 | + val = asoc->pathmtu - sp->pf->af->net_header_len; |
4927 | val -= sizeof(struct sctphdr) + |
4928 | - sizeof(struct sctp_data_chunk); |
4929 | + sizeof(struct sctp_data_chunk); |
4930 | } |
4931 | asoc->user_frag = val; |
4932 | asoc->frag_point = sctp_frag_point(asoc, asoc->pathmtu); |
4933 | } else { |
4934 | + if (params.assoc_id && sctp_style(sk, UDP)) |
4935 | + return -EINVAL; |
4936 | sp->user_frag = val; |
4937 | } |
4938 | |
4939 | diff --git a/net/wireless/core.c b/net/wireless/core.c |
4940 | index 8201e6d7449e..ce16da2905dc 100644 |
4941 | --- a/net/wireless/core.c |
4942 | +++ b/net/wireless/core.c |
4943 | @@ -421,6 +421,8 @@ struct wiphy *wiphy_new_nm(const struct cfg80211_ops *ops, int sizeof_priv, |
4944 | if (rv) |
4945 | goto use_default_name; |
4946 | } else { |
4947 | + int rv; |
4948 | + |
4949 | use_default_name: |
4950 | /* NOTE: This is *probably* safe w/out holding rtnl because of |
4951 | * the restrictions on phy names. Probably this call could |
4952 | @@ -428,7 +430,11 @@ struct wiphy *wiphy_new_nm(const struct cfg80211_ops *ops, int sizeof_priv, |
4953 | * phyX. But, might should add some locking and check return |
4954 | * value, and use a different name if this one exists? |
4955 | */ |
4956 | - dev_set_name(&rdev->wiphy.dev, PHY_NAME "%d", rdev->wiphy_idx); |
4957 | + rv = dev_set_name(&rdev->wiphy.dev, PHY_NAME "%d", rdev->wiphy_idx); |
4958 | + if (rv < 0) { |
4959 | + kfree(rdev); |
4960 | + return NULL; |
4961 | + } |
4962 | } |
4963 | |
4964 | INIT_LIST_HEAD(&rdev->wiphy.wdev_list); |
4965 | diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c |
4966 | index f19e6a57e118..5e89b7461f99 100644 |
4967 | --- a/net/xfrm/xfrm_policy.c |
4968 | +++ b/net/xfrm/xfrm_policy.c |
4969 | @@ -643,7 +643,8 @@ static void xfrm_hash_rebuild(struct work_struct *work) |
4970 | |
4971 | /* re-insert all policies by order of creation */ |
4972 | list_for_each_entry_reverse(policy, &net->xfrm.policy_all, walk.all) { |
4973 | - if (xfrm_policy_id2dir(policy->index) >= XFRM_POLICY_MAX) { |
4974 | + if (policy->walk.dead || |
4975 | + xfrm_policy_id2dir(policy->index) >= XFRM_POLICY_MAX) { |
4976 | /* skip socket policies */ |
4977 | continue; |
4978 | } |
4979 | @@ -1256,9 +1257,15 @@ static struct xfrm_policy *xfrm_sk_policy_lookup(const struct sock *sk, int dir, |
4980 | again: |
4981 | pol = rcu_dereference(sk->sk_policy[dir]); |
4982 | if (pol != NULL) { |
4983 | - bool match = xfrm_selector_match(&pol->selector, fl, family); |
4984 | + bool match; |
4985 | int err = 0; |
4986 | |
4987 | + if (pol->family != family) { |
4988 | + pol = NULL; |
4989 | + goto out; |
4990 | + } |
4991 | + |
4992 | + match = xfrm_selector_match(&pol->selector, fl, family); |
4993 | if (match) { |
4994 | if ((sk->sk_mark & pol->mark.m) != pol->mark.v) { |
4995 | pol = NULL; |
4996 | diff --git a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c |
4997 | index 22934885bd3f..5d33967d9aa1 100644 |
4998 | --- a/net/xfrm/xfrm_user.c |
4999 | +++ b/net/xfrm/xfrm_user.c |
5000 | @@ -1380,11 +1380,14 @@ static void copy_templates(struct xfrm_policy *xp, struct xfrm_user_tmpl *ut, |
5001 | |
5002 | static int validate_tmpl(int nr, struct xfrm_user_tmpl *ut, u16 family) |
5003 | { |
5004 | + u16 prev_family; |
5005 | int i; |
5006 | |
5007 | if (nr > XFRM_MAX_DEPTH) |
5008 | return -EINVAL; |
5009 | |
5010 | + prev_family = family; |
5011 | + |
5012 | for (i = 0; i < nr; i++) { |
5013 | /* We never validated the ut->family value, so many |
5014 | * applications simply leave it at zero. The check was |
5015 | @@ -1396,6 +1399,12 @@ static int validate_tmpl(int nr, struct xfrm_user_tmpl *ut, u16 family) |
5016 | if (!ut[i].family) |
5017 | ut[i].family = family; |
5018 | |
5019 | + if ((ut[i].mode == XFRM_MODE_TRANSPORT) && |
5020 | + (ut[i].family != prev_family)) |
5021 | + return -EINVAL; |
5022 | + |
5023 | + prev_family = ut[i].family; |
5024 | + |
5025 | switch (ut[i].family) { |
5026 | case AF_INET: |
5027 | break; |
5028 | @@ -1406,6 +1415,21 @@ static int validate_tmpl(int nr, struct xfrm_user_tmpl *ut, u16 family) |
5029 | default: |
5030 | return -EINVAL; |
5031 | } |
5032 | + |
5033 | + switch (ut[i].id.proto) { |
5034 | + case IPPROTO_AH: |
5035 | + case IPPROTO_ESP: |
5036 | + case IPPROTO_COMP: |
5037 | +#if IS_ENABLED(CONFIG_IPV6) |
5038 | + case IPPROTO_ROUTING: |
5039 | + case IPPROTO_DSTOPTS: |
5040 | +#endif |
5041 | + case IPSEC_PROTO_ANY: |
5042 | + break; |
5043 | + default: |
5044 | + return -EINVAL; |
5045 | + } |
5046 | + |
5047 | } |
5048 | |
5049 | return 0; |
5050 | diff --git a/scripts/kernel-doc b/scripts/kernel-doc |
5051 | index 93721f3c91bf..7b163f99624c 100755 |
5052 | --- a/scripts/kernel-doc |
5053 | +++ b/scripts/kernel-doc |
5054 | @@ -3139,4 +3139,4 @@ if ($verbose && $warnings) { |
5055 | print STDERR "$warnings warnings\n"; |
5056 | } |
5057 | |
5058 | -exit($errors); |
5059 | +exit($output_mode eq "none" ? 0 : $errors); |
5060 | diff --git a/security/keys/Kconfig b/security/keys/Kconfig |
5061 | index 0832f6368955..f2980084a38f 100644 |
5062 | --- a/security/keys/Kconfig |
5063 | +++ b/security/keys/Kconfig |
5064 | @@ -45,6 +45,7 @@ config BIG_KEYS |
5065 | bool "Large payload keys" |
5066 | depends on KEYS |
5067 | depends on TMPFS |
5068 | + select CRYPTO |
5069 | select CRYPTO_AES |
5070 | select CRYPTO_GCM |
5071 | help |
5072 | diff --git a/security/selinux/ss/services.c b/security/selinux/ss/services.c |
5073 | index 082b20c78363..73275a92f2e2 100644 |
5074 | --- a/security/selinux/ss/services.c |
5075 | +++ b/security/selinux/ss/services.c |
5076 | @@ -854,6 +854,9 @@ int security_bounded_transition(u32 old_sid, u32 new_sid) |
5077 | int index; |
5078 | int rc; |
5079 | |
5080 | + if (!ss_initialized) |
5081 | + return 0; |
5082 | + |
5083 | read_lock(&policy_rwlock); |
5084 | |
5085 | rc = -EINVAL; |
5086 | @@ -1400,27 +1403,25 @@ static int security_context_to_sid_core(const char *scontext, u32 scontext_len, |
5087 | if (!scontext_len) |
5088 | return -EINVAL; |
5089 | |
5090 | + /* Copy the string to allow changes and ensure a NUL terminator */ |
5091 | + scontext2 = kmemdup_nul(scontext, scontext_len, gfp_flags); |
5092 | + if (!scontext2) |
5093 | + return -ENOMEM; |
5094 | + |
5095 | if (!ss_initialized) { |
5096 | int i; |
5097 | |
5098 | for (i = 1; i < SECINITSID_NUM; i++) { |
5099 | - if (!strcmp(initial_sid_to_string[i], scontext)) { |
5100 | + if (!strcmp(initial_sid_to_string[i], scontext2)) { |
5101 | *sid = i; |
5102 | - return 0; |
5103 | + goto out; |
5104 | } |
5105 | } |
5106 | *sid = SECINITSID_KERNEL; |
5107 | - return 0; |
5108 | + goto out; |
5109 | } |
5110 | *sid = SECSID_NULL; |
5111 | |
5112 | - /* Copy the string so that we can modify the copy as we parse it. */ |
5113 | - scontext2 = kmalloc(scontext_len + 1, gfp_flags); |
5114 | - if (!scontext2) |
5115 | - return -ENOMEM; |
5116 | - memcpy(scontext2, scontext, scontext_len); |
5117 | - scontext2[scontext_len] = 0; |
5118 | - |
5119 | if (force) { |
5120 | /* Save another copy for storing in uninterpreted form */ |
5121 | rc = -ENOMEM; |
5122 | diff --git a/sound/pci/hda/patch_ca0132.c b/sound/pci/hda/patch_ca0132.c |
5123 | index 11b9b2f17a2e..9ec4dba8a793 100644 |
5124 | --- a/sound/pci/hda/patch_ca0132.c |
5125 | +++ b/sound/pci/hda/patch_ca0132.c |
5126 | @@ -1482,6 +1482,9 @@ static int dspio_scp(struct hda_codec *codec, |
5127 | } else if (ret_size != reply_data_size) { |
5128 | codec_dbg(codec, "RetLen and HdrLen .NE.\n"); |
5129 | return -EINVAL; |
5130 | + } else if (!reply) { |
5131 | + codec_dbg(codec, "NULL reply\n"); |
5132 | + return -EINVAL; |
5133 | } else { |
5134 | *reply_len = ret_size*sizeof(unsigned int); |
5135 | memcpy(reply, scp_reply.data, *reply_len); |
5136 | diff --git a/sound/soc/rockchip/rockchip_spdif.c b/sound/soc/rockchip/rockchip_spdif.c |
5137 | index fa8101d1e16f..f387d7bae3d4 100644 |
5138 | --- a/sound/soc/rockchip/rockchip_spdif.c |
5139 | +++ b/sound/soc/rockchip/rockchip_spdif.c |
5140 | @@ -318,26 +318,30 @@ static int rk_spdif_probe(struct platform_device *pdev) |
5141 | spdif->mclk = devm_clk_get(&pdev->dev, "mclk"); |
5142 | if (IS_ERR(spdif->mclk)) { |
5143 | dev_err(&pdev->dev, "Can't retrieve rk_spdif master clock\n"); |
5144 | - return PTR_ERR(spdif->mclk); |
5145 | + ret = PTR_ERR(spdif->mclk); |
5146 | + goto err_disable_hclk; |
5147 | } |
5148 | |
5149 | ret = clk_prepare_enable(spdif->mclk); |
5150 | if (ret) { |
5151 | dev_err(spdif->dev, "clock enable failed %d\n", ret); |
5152 | - return ret; |
5153 | + goto err_disable_clocks; |
5154 | } |
5155 | |
5156 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
5157 | regs = devm_ioremap_resource(&pdev->dev, res); |
5158 | - if (IS_ERR(regs)) |
5159 | - return PTR_ERR(regs); |
5160 | + if (IS_ERR(regs)) { |
5161 | + ret = PTR_ERR(regs); |
5162 | + goto err_disable_clocks; |
5163 | + } |
5164 | |
5165 | spdif->regmap = devm_regmap_init_mmio_clk(&pdev->dev, "hclk", regs, |
5166 | &rk_spdif_regmap_config); |
5167 | if (IS_ERR(spdif->regmap)) { |
5168 | dev_err(&pdev->dev, |
5169 | "Failed to initialise managed register map\n"); |
5170 | - return PTR_ERR(spdif->regmap); |
5171 | + ret = PTR_ERR(spdif->regmap); |
5172 | + goto err_disable_clocks; |
5173 | } |
5174 | |
5175 | spdif->playback_dma_data.addr = res->start + SPDIF_SMPDR; |
5176 | @@ -369,6 +373,10 @@ static int rk_spdif_probe(struct platform_device *pdev) |
5177 | |
5178 | err_pm_runtime: |
5179 | pm_runtime_disable(&pdev->dev); |
5180 | +err_disable_clocks: |
5181 | + clk_disable_unprepare(spdif->mclk); |
5182 | +err_disable_hclk: |
5183 | + clk_disable_unprepare(spdif->hclk); |
5184 | |
5185 | return ret; |
5186 | } |
5187 | diff --git a/sound/soc/ux500/mop500.c b/sound/soc/ux500/mop500.c |
5188 | index ba9fc099cf67..503aef8fcde2 100644 |
5189 | --- a/sound/soc/ux500/mop500.c |
5190 | +++ b/sound/soc/ux500/mop500.c |
5191 | @@ -164,3 +164,7 @@ static struct platform_driver snd_soc_mop500_driver = { |
5192 | }; |
5193 | |
5194 | module_platform_driver(snd_soc_mop500_driver); |
5195 | + |
5196 | +MODULE_LICENSE("GPL v2"); |
5197 | +MODULE_DESCRIPTION("ASoC MOP500 board driver"); |
5198 | +MODULE_AUTHOR("Ola Lilja"); |
5199 | diff --git a/sound/soc/ux500/ux500_pcm.c b/sound/soc/ux500/ux500_pcm.c |
5200 | index f12c01dddc8d..d35ba7700f46 100644 |
5201 | --- a/sound/soc/ux500/ux500_pcm.c |
5202 | +++ b/sound/soc/ux500/ux500_pcm.c |
5203 | @@ -165,3 +165,8 @@ int ux500_pcm_unregister_platform(struct platform_device *pdev) |
5204 | return 0; |
5205 | } |
5206 | EXPORT_SYMBOL_GPL(ux500_pcm_unregister_platform); |
5207 | + |
5208 | +MODULE_AUTHOR("Ola Lilja"); |
5209 | +MODULE_AUTHOR("Roger Nilsson"); |
5210 | +MODULE_DESCRIPTION("ASoC UX500 driver"); |
5211 | +MODULE_LICENSE("GPL v2"); |
5212 | diff --git a/tools/build/Makefile.build b/tools/build/Makefile.build |
5213 | index 99c0ccd2f176..e279a71c650d 100644 |
5214 | --- a/tools/build/Makefile.build |
5215 | +++ b/tools/build/Makefile.build |
5216 | @@ -19,6 +19,16 @@ else |
5217 | Q=@ |
5218 | endif |
5219 | |
5220 | +ifneq ($(filter 4.%,$(MAKE_VERSION)),) # make-4 |
5221 | +ifneq ($(filter %s ,$(firstword x$(MAKEFLAGS))),) |
5222 | + quiet=silent_ |
5223 | +endif |
5224 | +else # make-3.8x |
5225 | +ifneq ($(filter s% -s%,$(MAKEFLAGS)),) |
5226 | + quiet=silent_ |
5227 | +endif |
5228 | +endif |
5229 | + |
5230 | build-dir := $(srctree)/tools/build |
5231 | |
5232 | # Define $(fixdep) for dep-cmd function |
5233 | diff --git a/tools/perf/bench/numa.c b/tools/perf/bench/numa.c |
5234 | index 9e5a02d6b9a9..23cce5e5197a 100644 |
5235 | --- a/tools/perf/bench/numa.c |
5236 | +++ b/tools/perf/bench/numa.c |
5237 | @@ -211,6 +211,47 @@ static const char * const numa_usage[] = { |
5238 | NULL |
5239 | }; |
5240 | |
5241 | +/* |
5242 | + * To get number of numa nodes present. |
5243 | + */ |
5244 | +static int nr_numa_nodes(void) |
5245 | +{ |
5246 | + int i, nr_nodes = 0; |
5247 | + |
5248 | + for (i = 0; i < g->p.nr_nodes; i++) { |
5249 | + if (numa_bitmask_isbitset(numa_nodes_ptr, i)) |
5250 | + nr_nodes++; |
5251 | + } |
5252 | + |
5253 | + return nr_nodes; |
5254 | +} |
5255 | + |
5256 | +/* |
5257 | + * To check if given numa node is present. |
5258 | + */ |
5259 | +static int is_node_present(int node) |
5260 | +{ |
5261 | + return numa_bitmask_isbitset(numa_nodes_ptr, node); |
5262 | +} |
5263 | + |
5264 | +/* |
5265 | + * To check given numa node has cpus. |
5266 | + */ |
5267 | +static bool node_has_cpus(int node) |
5268 | +{ |
5269 | + struct bitmask *cpu = numa_allocate_cpumask(); |
5270 | + unsigned int i; |
5271 | + |
5272 | + if (cpu && !numa_node_to_cpus(node, cpu)) { |
5273 | + for (i = 0; i < cpu->size; i++) { |
5274 | + if (numa_bitmask_isbitset(cpu, i)) |
5275 | + return true; |
5276 | + } |
5277 | + } |
5278 | + |
5279 | + return false; /* lets fall back to nocpus safely */ |
5280 | +} |
5281 | + |
5282 | static cpu_set_t bind_to_cpu(int target_cpu) |
5283 | { |
5284 | cpu_set_t orig_mask, mask; |
5285 | @@ -239,12 +280,12 @@ static cpu_set_t bind_to_cpu(int target_cpu) |
5286 | |
5287 | static cpu_set_t bind_to_node(int target_node) |
5288 | { |
5289 | - int cpus_per_node = g->p.nr_cpus/g->p.nr_nodes; |
5290 | + int cpus_per_node = g->p.nr_cpus / nr_numa_nodes(); |
5291 | cpu_set_t orig_mask, mask; |
5292 | int cpu; |
5293 | int ret; |
5294 | |
5295 | - BUG_ON(cpus_per_node*g->p.nr_nodes != g->p.nr_cpus); |
5296 | + BUG_ON(cpus_per_node * nr_numa_nodes() != g->p.nr_cpus); |
5297 | BUG_ON(!cpus_per_node); |
5298 | |
5299 | ret = sched_getaffinity(0, sizeof(orig_mask), &orig_mask); |
5300 | @@ -644,7 +685,7 @@ static int parse_setup_node_list(void) |
5301 | int i; |
5302 | |
5303 | for (i = 0; i < mul; i++) { |
5304 | - if (t >= g->p.nr_tasks) { |
5305 | + if (t >= g->p.nr_tasks || !node_has_cpus(bind_node)) { |
5306 | printf("\n# NOTE: ignoring bind NODEs starting at NODE#%d\n", bind_node); |
5307 | goto out; |
5308 | } |
5309 | @@ -959,6 +1000,8 @@ static void calc_convergence(double runtime_ns_max, double *convergence) |
5310 | sum = 0; |
5311 | |
5312 | for (node = 0; node < g->p.nr_nodes; node++) { |
5313 | + if (!is_node_present(node)) |
5314 | + continue; |
5315 | nr = nodes[node]; |
5316 | nr_min = min(nr, nr_min); |
5317 | nr_max = max(nr, nr_max); |
5318 | @@ -979,8 +1022,11 @@ static void calc_convergence(double runtime_ns_max, double *convergence) |
5319 | process_groups = 0; |
5320 | |
5321 | for (node = 0; node < g->p.nr_nodes; node++) { |
5322 | - int processes = count_node_processes(node); |
5323 | + int processes; |
5324 | |
5325 | + if (!is_node_present(node)) |
5326 | + continue; |
5327 | + processes = count_node_processes(node); |
5328 | nr = nodes[node]; |
5329 | tprintf(" %2d/%-2d", nr, processes); |
5330 | |
5331 | @@ -1286,7 +1332,7 @@ static void print_summary(void) |
5332 | |
5333 | printf("\n ###\n"); |
5334 | printf(" # %d %s will execute (on %d nodes, %d CPUs):\n", |
5335 | - g->p.nr_tasks, g->p.nr_tasks == 1 ? "task" : "tasks", g->p.nr_nodes, g->p.nr_cpus); |
5336 | + g->p.nr_tasks, g->p.nr_tasks == 1 ? "task" : "tasks", nr_numa_nodes(), g->p.nr_cpus); |
5337 | printf(" # %5dx %5ldMB global shared mem operations\n", |
5338 | g->p.nr_loops, g->p.bytes_global/1024/1024); |
5339 | printf(" # %5dx %5ldMB process shared mem operations\n", |
5340 | diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c |
5341 | index 0b613e701736..c61e012e9771 100644 |
5342 | --- a/tools/perf/builtin-top.c |
5343 | +++ b/tools/perf/builtin-top.c |
5344 | @@ -73,6 +73,7 @@ |
5345 | #include <linux/types.h> |
5346 | |
5347 | static volatile int done; |
5348 | +static volatile int resize; |
5349 | |
5350 | #define HEADER_LINE_NR 5 |
5351 | |
5352 | @@ -82,10 +83,13 @@ static void perf_top__update_print_entries(struct perf_top *top) |
5353 | } |
5354 | |
5355 | static void perf_top__sig_winch(int sig __maybe_unused, |
5356 | - siginfo_t *info __maybe_unused, void *arg) |
5357 | + siginfo_t *info __maybe_unused, void *arg __maybe_unused) |
5358 | { |
5359 | - struct perf_top *top = arg; |
5360 | + resize = 1; |
5361 | +} |
5362 | |
5363 | +static void perf_top__resize(struct perf_top *top) |
5364 | +{ |
5365 | get_term_dimensions(&top->winsize); |
5366 | perf_top__update_print_entries(top); |
5367 | } |
5368 | @@ -472,7 +476,7 @@ static bool perf_top__handle_keypress(struct perf_top *top, int c) |
5369 | .sa_sigaction = perf_top__sig_winch, |
5370 | .sa_flags = SA_SIGINFO, |
5371 | }; |
5372 | - perf_top__sig_winch(SIGWINCH, NULL, top); |
5373 | + perf_top__resize(top); |
5374 | sigaction(SIGWINCH, &act, NULL); |
5375 | } else { |
5376 | signal(SIGWINCH, SIG_DFL); |
5377 | @@ -1003,6 +1007,11 @@ static int __cmd_top(struct perf_top *top) |
5378 | |
5379 | if (hits == top->samples) |
5380 | ret = perf_evlist__poll(top->evlist, 100); |
5381 | + |
5382 | + if (resize) { |
5383 | + perf_top__resize(top); |
5384 | + resize = 0; |
5385 | + } |
5386 | } |
5387 | |
5388 | ret = 0; |
5389 | diff --git a/tools/scripts/Makefile.include b/tools/scripts/Makefile.include |
5390 | index 8abbef164b4e..19edc1a7a232 100644 |
5391 | --- a/tools/scripts/Makefile.include |
5392 | +++ b/tools/scripts/Makefile.include |
5393 | @@ -46,6 +46,16 @@ else |
5394 | NO_SUBDIR = : |
5395 | endif |
5396 | |
5397 | +ifneq ($(filter 4.%,$(MAKE_VERSION)),) # make-4 |
5398 | +ifneq ($(filter %s ,$(firstword x$(MAKEFLAGS))),) |
5399 | + silent=1 |
5400 | +endif |
5401 | +else # make-3.8x |
5402 | +ifneq ($(filter s% -s%,$(MAKEFLAGS)),) |
5403 | + silent=1 |
5404 | +endif |
5405 | +endif |
5406 | + |
5407 | # |
5408 | # Define a callable command for descending to a new directory |
5409 | # |
5410 | @@ -58,7 +68,7 @@ descend = \ |
5411 | QUIET_SUBDIR0 = +$(MAKE) $(COMMAND_O) -C # space to separate -C and subdir |
5412 | QUIET_SUBDIR1 = |
5413 | |
5414 | -ifneq ($(findstring $(MAKEFLAGS),s),s) |
5415 | +ifneq ($(silent),1) |
5416 | ifneq ($(V),1) |
5417 | QUIET_CC = @echo ' CC '$@; |
5418 | QUIET_CC_FPIC = @echo ' CC FPIC '$@; |