Contents of /trunk/kernel-alx-legacy/patches-4.9/0390-4.9.291-all-fixes.patch
Parent Directory | Revision Log
Revision 3692 -
(show annotations)
(download)
Mon Oct 24 14:08:06 2022 UTC (23 months ago) by niro
File size: 213831 byte(s)
Mon Oct 24 14:08:06 2022 UTC (23 months ago) by niro
File size: 213831 byte(s)
-linux-4.9.291
1 | diff --git a/Documentation/devicetree/bindings/regulator/samsung,s5m8767.txt b/Documentation/devicetree/bindings/regulator/samsung,s5m8767.txt |
2 | index 093edda0c8dfc..6cd83d920155f 100644 |
3 | --- a/Documentation/devicetree/bindings/regulator/samsung,s5m8767.txt |
4 | +++ b/Documentation/devicetree/bindings/regulator/samsung,s5m8767.txt |
5 | @@ -13,6 +13,14 @@ common regulator binding documented in: |
6 | |
7 | |
8 | Required properties of the main device node (the parent!): |
9 | + - s5m8767,pmic-buck-ds-gpios: GPIO specifiers for three host gpio's used |
10 | + for selecting GPIO DVS lines. It is one-to-one mapped to dvs gpio lines. |
11 | + |
12 | + [1] If either of the 's5m8767,pmic-buck[2/3/4]-uses-gpio-dvs' optional |
13 | + property is specified, then all the eight voltage values for the |
14 | + 's5m8767,pmic-buck[2/3/4]-dvs-voltage' should be specified. |
15 | + |
16 | +Optional properties of the main device node (the parent!): |
17 | - s5m8767,pmic-buck2-dvs-voltage: A set of 8 voltage values in micro-volt (uV) |
18 | units for buck2 when changing voltage using gpio dvs. Refer to [1] below |
19 | for additional information. |
20 | @@ -25,26 +33,13 @@ Required properties of the main device node (the parent!): |
21 | units for buck4 when changing voltage using gpio dvs. Refer to [1] below |
22 | for additional information. |
23 | |
24 | - - s5m8767,pmic-buck-ds-gpios: GPIO specifiers for three host gpio's used |
25 | - for selecting GPIO DVS lines. It is one-to-one mapped to dvs gpio lines. |
26 | - |
27 | - [1] If none of the 's5m8767,pmic-buck[2/3/4]-uses-gpio-dvs' optional |
28 | - property is specified, the 's5m8767,pmic-buck[2/3/4]-dvs-voltage' |
29 | - property should specify atleast one voltage level (which would be a |
30 | - safe operating voltage). |
31 | - |
32 | - If either of the 's5m8767,pmic-buck[2/3/4]-uses-gpio-dvs' optional |
33 | - property is specified, then all the eight voltage values for the |
34 | - 's5m8767,pmic-buck[2/3/4]-dvs-voltage' should be specified. |
35 | - |
36 | -Optional properties of the main device node (the parent!): |
37 | - s5m8767,pmic-buck2-uses-gpio-dvs: 'buck2' can be controlled by gpio dvs. |
38 | - s5m8767,pmic-buck3-uses-gpio-dvs: 'buck3' can be controlled by gpio dvs. |
39 | - s5m8767,pmic-buck4-uses-gpio-dvs: 'buck4' can be controlled by gpio dvs. |
40 | |
41 | Additional properties required if either of the optional properties are used: |
42 | |
43 | - - s5m8767,pmic-buck234-default-dvs-idx: Default voltage setting selected from |
44 | + - s5m8767,pmic-buck-default-dvs-idx: Default voltage setting selected from |
45 | the possible 8 options selectable by the dvs gpios. The value of this |
46 | property should be between 0 and 7. If not specified or if out of range, the |
47 | default value of this property is set to 0. |
48 | diff --git a/Makefile b/Makefile |
49 | index 9f1647076926d..fa41ff3c7cc38 100644 |
50 | --- a/Makefile |
51 | +++ b/Makefile |
52 | @@ -1,6 +1,6 @@ |
53 | VERSION = 4 |
54 | PATCHLEVEL = 9 |
55 | -SUBLEVEL = 290 |
56 | +SUBLEVEL = 291 |
57 | EXTRAVERSION = |
58 | NAME = Roaring Lionus |
59 | |
60 | diff --git a/arch/arm/Makefile b/arch/arm/Makefile |
61 | index d9a2fcd33bc60..1f9747cbc86c0 100644 |
62 | --- a/arch/arm/Makefile |
63 | +++ b/arch/arm/Makefile |
64 | @@ -64,15 +64,15 @@ KBUILD_CFLAGS += $(call cc-option,-fno-ipa-sra) |
65 | # Note that GCC does not numerically define an architecture version |
66 | # macro, but instead defines a whole series of macros which makes |
67 | # testing for a specific architecture or later rather impossible. |
68 | -arch-$(CONFIG_CPU_32v7M) =-D__LINUX_ARM_ARCH__=7 -march=armv7-m -Wa,-march=armv7-m |
69 | -arch-$(CONFIG_CPU_32v7) =-D__LINUX_ARM_ARCH__=7 $(call cc-option,-march=armv7-a,-march=armv5t -Wa$(comma)-march=armv7-a) |
70 | -arch-$(CONFIG_CPU_32v6) =-D__LINUX_ARM_ARCH__=6 $(call cc-option,-march=armv6,-march=armv5t -Wa$(comma)-march=armv6) |
71 | +arch-$(CONFIG_CPU_32v7M) =-D__LINUX_ARM_ARCH__=7 -march=armv7-m |
72 | +arch-$(CONFIG_CPU_32v7) =-D__LINUX_ARM_ARCH__=7 -march=armv7-a |
73 | +arch-$(CONFIG_CPU_32v6) =-D__LINUX_ARM_ARCH__=6 -march=armv6 |
74 | # Only override the compiler option if ARMv6. The ARMv6K extensions are |
75 | # always available in ARMv7 |
76 | ifeq ($(CONFIG_CPU_32v6),y) |
77 | -arch-$(CONFIG_CPU_32v6K) =-D__LINUX_ARM_ARCH__=6 $(call cc-option,-march=armv6k,-march=armv5t -Wa$(comma)-march=armv6k) |
78 | +arch-$(CONFIG_CPU_32v6K) =-D__LINUX_ARM_ARCH__=6 -march=armv6k |
79 | endif |
80 | -arch-$(CONFIG_CPU_32v5) =-D__LINUX_ARM_ARCH__=5 $(call cc-option,-march=armv5te,-march=armv4t) |
81 | +arch-$(CONFIG_CPU_32v5) =-D__LINUX_ARM_ARCH__=5 -march=armv5te |
82 | arch-$(CONFIG_CPU_32v4T) =-D__LINUX_ARM_ARCH__=4 -march=armv4t |
83 | arch-$(CONFIG_CPU_32v4) =-D__LINUX_ARM_ARCH__=4 -march=armv4 |
84 | arch-$(CONFIG_CPU_32v3) =-D__LINUX_ARM_ARCH__=3 -march=armv3 |
85 | @@ -86,7 +86,7 @@ tune-$(CONFIG_CPU_ARM720T) =-mtune=arm7tdmi |
86 | tune-$(CONFIG_CPU_ARM740T) =-mtune=arm7tdmi |
87 | tune-$(CONFIG_CPU_ARM9TDMI) =-mtune=arm9tdmi |
88 | tune-$(CONFIG_CPU_ARM940T) =-mtune=arm9tdmi |
89 | -tune-$(CONFIG_CPU_ARM946E) =$(call cc-option,-mtune=arm9e,-mtune=arm9tdmi) |
90 | +tune-$(CONFIG_CPU_ARM946E) =-mtune=arm9e |
91 | tune-$(CONFIG_CPU_ARM920T) =-mtune=arm9tdmi |
92 | tune-$(CONFIG_CPU_ARM922T) =-mtune=arm9tdmi |
93 | tune-$(CONFIG_CPU_ARM925T) =-mtune=arm9tdmi |
94 | @@ -94,11 +94,11 @@ tune-$(CONFIG_CPU_ARM926T) =-mtune=arm9tdmi |
95 | tune-$(CONFIG_CPU_FA526) =-mtune=arm9tdmi |
96 | tune-$(CONFIG_CPU_SA110) =-mtune=strongarm110 |
97 | tune-$(CONFIG_CPU_SA1100) =-mtune=strongarm1100 |
98 | -tune-$(CONFIG_CPU_XSCALE) =$(call cc-option,-mtune=xscale,-mtune=strongarm110) -Wa,-mcpu=xscale |
99 | -tune-$(CONFIG_CPU_XSC3) =$(call cc-option,-mtune=xscale,-mtune=strongarm110) -Wa,-mcpu=xscale |
100 | -tune-$(CONFIG_CPU_FEROCEON) =$(call cc-option,-mtune=marvell-f,-mtune=xscale) |
101 | -tune-$(CONFIG_CPU_V6) =$(call cc-option,-mtune=arm1136j-s,-mtune=strongarm) |
102 | -tune-$(CONFIG_CPU_V6K) =$(call cc-option,-mtune=arm1136j-s,-mtune=strongarm) |
103 | +tune-$(CONFIG_CPU_XSCALE) =-mtune=xscale |
104 | +tune-$(CONFIG_CPU_XSC3) =-mtune=xscale |
105 | +tune-$(CONFIG_CPU_FEROCEON) =-mtune=xscale |
106 | +tune-$(CONFIG_CPU_V6) =-mtune=arm1136j-s |
107 | +tune-$(CONFIG_CPU_V6K) =-mtune=arm1136j-s |
108 | |
109 | # Evaluate tune cc-option calls now |
110 | tune-y := $(tune-y) |
111 | diff --git a/arch/arm/boot/dts/omap-gpmc-smsc9221.dtsi b/arch/arm/boot/dts/omap-gpmc-smsc9221.dtsi |
112 | index 73e272fadc202..58d288fddd9c2 100644 |
113 | --- a/arch/arm/boot/dts/omap-gpmc-smsc9221.dtsi |
114 | +++ b/arch/arm/boot/dts/omap-gpmc-smsc9221.dtsi |
115 | @@ -28,7 +28,7 @@ |
116 | compatible = "smsc,lan9221","smsc,lan9115"; |
117 | bank-width = <2>; |
118 | |
119 | - gpmc,mux-add-data; |
120 | + gpmc,mux-add-data = <0>; |
121 | gpmc,cs-on-ns = <0>; |
122 | gpmc,cs-rd-off-ns = <42>; |
123 | gpmc,cs-wr-off-ns = <36>; |
124 | diff --git a/arch/arm/boot/dts/omap3-gta04.dtsi b/arch/arm/boot/dts/omap3-gta04.dtsi |
125 | index 7191506934494..338ee6bd0e0c0 100644 |
126 | --- a/arch/arm/boot/dts/omap3-gta04.dtsi |
127 | +++ b/arch/arm/boot/dts/omap3-gta04.dtsi |
128 | @@ -352,7 +352,7 @@ |
129 | compatible = "bosch,bma180"; |
130 | reg = <0x41>; |
131 | pinctrl-names = "default"; |
132 | - pintcrl-0 = <&bma180_pins>; |
133 | + pinctrl-0 = <&bma180_pins>; |
134 | interrupt-parent = <&gpio4>; |
135 | interrupts = <19 IRQ_TYPE_LEVEL_HIGH>; /* GPIO_115 */ |
136 | }; |
137 | diff --git a/arch/arm/boot/dts/omap3-overo-tobiduo-common.dtsi b/arch/arm/boot/dts/omap3-overo-tobiduo-common.dtsi |
138 | index 82e98ee3023ad..3dbeb7a6c569c 100644 |
139 | --- a/arch/arm/boot/dts/omap3-overo-tobiduo-common.dtsi |
140 | +++ b/arch/arm/boot/dts/omap3-overo-tobiduo-common.dtsi |
141 | @@ -25,7 +25,7 @@ |
142 | compatible = "smsc,lan9221","smsc,lan9115"; |
143 | bank-width = <2>; |
144 | |
145 | - gpmc,mux-add-data; |
146 | + gpmc,mux-add-data = <0>; |
147 | gpmc,cs-on-ns = <0>; |
148 | gpmc,cs-rd-off-ns = <42>; |
149 | gpmc,cs-wr-off-ns = <36>; |
150 | diff --git a/arch/arm/kernel/stacktrace.c b/arch/arm/kernel/stacktrace.c |
151 | index 6e8a50de40e2b..c10c1de244eba 100644 |
152 | --- a/arch/arm/kernel/stacktrace.c |
153 | +++ b/arch/arm/kernel/stacktrace.c |
154 | @@ -51,8 +51,7 @@ int notrace unwind_frame(struct stackframe *frame) |
155 | |
156 | frame->sp = frame->fp; |
157 | frame->fp = *(unsigned long *)(fp); |
158 | - frame->pc = frame->lr; |
159 | - frame->lr = *(unsigned long *)(fp + 4); |
160 | + frame->pc = *(unsigned long *)(fp + 4); |
161 | #else |
162 | /* check current frame pointer is within bounds */ |
163 | if (fp < low + 12 || fp > high - 4) |
164 | diff --git a/arch/arm/mm/Kconfig b/arch/arm/mm/Kconfig |
165 | index 7f3760fa9c154..93623627a0b68 100644 |
166 | --- a/arch/arm/mm/Kconfig |
167 | +++ b/arch/arm/mm/Kconfig |
168 | @@ -731,7 +731,7 @@ config CPU_BIG_ENDIAN |
169 | config CPU_ENDIAN_BE8 |
170 | bool |
171 | depends on CPU_BIG_ENDIAN |
172 | - default CPU_V6 || CPU_V6K || CPU_V7 |
173 | + default CPU_V6 || CPU_V6K || CPU_V7 || CPU_V7M |
174 | help |
175 | Support for the BE-8 (big-endian) mode on ARMv6 and ARMv7 processors. |
176 | |
177 | diff --git a/arch/hexagon/lib/io.c b/arch/hexagon/lib/io.c |
178 | index 885c9626d5e08..e5dfed1cf151b 100644 |
179 | --- a/arch/hexagon/lib/io.c |
180 | +++ b/arch/hexagon/lib/io.c |
181 | @@ -40,6 +40,7 @@ void __raw_readsw(const void __iomem *addr, void *data, int len) |
182 | *dst++ = *src; |
183 | |
184 | } |
185 | +EXPORT_SYMBOL(__raw_readsw); |
186 | |
187 | /* |
188 | * __raw_writesw - read words a short at a time |
189 | @@ -60,6 +61,7 @@ void __raw_writesw(void __iomem *addr, const void *data, int len) |
190 | |
191 | |
192 | } |
193 | +EXPORT_SYMBOL(__raw_writesw); |
194 | |
195 | /* Pretty sure len is pre-adjusted for the length of the access already */ |
196 | void __raw_readsl(const void __iomem *addr, void *data, int len) |
197 | @@ -75,6 +77,7 @@ void __raw_readsl(const void __iomem *addr, void *data, int len) |
198 | |
199 | |
200 | } |
201 | +EXPORT_SYMBOL(__raw_readsl); |
202 | |
203 | void __raw_writesl(void __iomem *addr, const void *data, int len) |
204 | { |
205 | @@ -89,3 +92,4 @@ void __raw_writesl(void __iomem *addr, const void *data, int len) |
206 | |
207 | |
208 | } |
209 | +EXPORT_SYMBOL(__raw_writesl); |
210 | diff --git a/arch/ia64/Kconfig.debug b/arch/ia64/Kconfig.debug |
211 | index de9d507ba0fd4..ee6c7f75f479d 100644 |
212 | --- a/arch/ia64/Kconfig.debug |
213 | +++ b/arch/ia64/Kconfig.debug |
214 | @@ -41,7 +41,7 @@ config DISABLE_VHPT |
215 | |
216 | config IA64_DEBUG_CMPXCHG |
217 | bool "Turn on compare-and-exchange bug checking (slow!)" |
218 | - depends on DEBUG_KERNEL |
219 | + depends on DEBUG_KERNEL && PRINTK |
220 | help |
221 | Selecting this option turns on bug checking for the IA-64 |
222 | compare-and-exchange instructions. This is slow! Itaniums |
223 | diff --git a/arch/m68k/Kconfig.machine b/arch/m68k/Kconfig.machine |
224 | index 2a5c7abb2896e..f622c3ccafc31 100644 |
225 | --- a/arch/m68k/Kconfig.machine |
226 | +++ b/arch/m68k/Kconfig.machine |
227 | @@ -184,6 +184,7 @@ config INIT_LCD |
228 | config MEMORY_RESERVE |
229 | int "Memory reservation (MiB)" |
230 | depends on (UCSIMM || UCDIMM) |
231 | + default 0 |
232 | help |
233 | Reserve certain memory regions on 68x328 based boards. |
234 | |
235 | diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig |
236 | index 24eb7fe7922e6..9708c319a7444 100644 |
237 | --- a/arch/mips/Kconfig |
238 | +++ b/arch/mips/Kconfig |
239 | @@ -267,6 +267,9 @@ config BCM63XX |
240 | select SYS_SUPPORTS_32BIT_KERNEL |
241 | select SYS_SUPPORTS_BIG_ENDIAN |
242 | select SYS_HAS_EARLY_PRINTK |
243 | + select SYS_HAS_CPU_BMIPS32_3300 |
244 | + select SYS_HAS_CPU_BMIPS4350 |
245 | + select SYS_HAS_CPU_BMIPS4380 |
246 | select SWAP_IO_SPACE |
247 | select GPIOLIB |
248 | select HAVE_CLK |
249 | @@ -1373,6 +1376,7 @@ config CPU_LOONGSON3 |
250 | select WEAK_REORDERING_BEYOND_LLSC |
251 | select MIPS_PGD_C0_CONTEXT |
252 | select MIPS_L1_CACHE_SHIFT_6 |
253 | + select MIPS_FP_SUPPORT |
254 | select GPIOLIB |
255 | help |
256 | The Loongson 3 processor implements the MIPS64R2 instruction |
257 | diff --git a/arch/mips/bcm63xx/clk.c b/arch/mips/bcm63xx/clk.c |
258 | index b49fc9cb9cad2..4f375050ab8e9 100644 |
259 | --- a/arch/mips/bcm63xx/clk.c |
260 | +++ b/arch/mips/bcm63xx/clk.c |
261 | @@ -336,6 +336,12 @@ void clk_disable(struct clk *clk) |
262 | |
263 | EXPORT_SYMBOL(clk_disable); |
264 | |
265 | +struct clk *clk_get_parent(struct clk *clk) |
266 | +{ |
267 | + return NULL; |
268 | +} |
269 | +EXPORT_SYMBOL(clk_get_parent); |
270 | + |
271 | unsigned long clk_get_rate(struct clk *clk) |
272 | { |
273 | return clk->rate; |
274 | diff --git a/arch/mips/kernel/r2300_fpu.S b/arch/mips/kernel/r2300_fpu.S |
275 | index 918f2f6d3861a..ca34767280791 100644 |
276 | --- a/arch/mips/kernel/r2300_fpu.S |
277 | +++ b/arch/mips/kernel/r2300_fpu.S |
278 | @@ -27,8 +27,8 @@ |
279 | #define EX2(a,b) \ |
280 | 9: a,##b; \ |
281 | .section __ex_table,"a"; \ |
282 | - PTR 9b,bad_stack; \ |
283 | - PTR 9b+4,bad_stack; \ |
284 | + PTR 9b,fault; \ |
285 | + PTR 9b+4,fault; \ |
286 | .previous |
287 | |
288 | .set noreorder |
289 | diff --git a/arch/mips/kernel/syscall.c b/arch/mips/kernel/syscall.c |
290 | index 4234b2d726c55..67d3cba60c9fa 100644 |
291 | --- a/arch/mips/kernel/syscall.c |
292 | +++ b/arch/mips/kernel/syscall.c |
293 | @@ -244,12 +244,3 @@ SYSCALL_DEFINE3(cachectl, char *, addr, int, nbytes, int, op) |
294 | { |
295 | return -ENOSYS; |
296 | } |
297 | - |
298 | -/* |
299 | - * If we ever come here the user sp is bad. Zap the process right away. |
300 | - * Due to the bad stack signaling wouldn't work. |
301 | - */ |
302 | -asmlinkage void bad_stack(void) |
303 | -{ |
304 | - do_exit(SIGSEGV); |
305 | -} |
306 | diff --git a/arch/mips/lantiq/xway/dma.c b/arch/mips/lantiq/xway/dma.c |
307 | index cef811755123f..fc9eff29d8ff0 100644 |
308 | --- a/arch/mips/lantiq/xway/dma.c |
309 | +++ b/arch/mips/lantiq/xway/dma.c |
310 | @@ -21,6 +21,7 @@ |
311 | #include <linux/dma-mapping.h> |
312 | #include <linux/module.h> |
313 | #include <linux/clk.h> |
314 | +#include <linux/delay.h> |
315 | #include <linux/err.h> |
316 | |
317 | #include <lantiq_soc.h> |
318 | @@ -39,6 +40,7 @@ |
319 | #define LTQ_DMA_PCTRL 0x44 |
320 | #define LTQ_DMA_IRNEN 0xf4 |
321 | |
322 | +#define DMA_ID_CHNR GENMASK(26, 20) /* channel number */ |
323 | #define DMA_DESCPT BIT(3) /* descriptor complete irq */ |
324 | #define DMA_TX BIT(8) /* TX channel direction */ |
325 | #define DMA_CHAN_ON BIT(0) /* channel on / off bit */ |
326 | @@ -49,7 +51,6 @@ |
327 | #define DMA_POLL BIT(31) /* turn on channel polling */ |
328 | #define DMA_CLK_DIV4 BIT(6) /* polling clock divider */ |
329 | #define DMA_2W_BURST BIT(1) /* 2 word burst length */ |
330 | -#define DMA_MAX_CHANNEL 20 /* the soc has 20 channels */ |
331 | #define DMA_ETOP_ENDIANNESS (0xf << 8) /* endianness swap etop channels */ |
332 | #define DMA_WEIGHT (BIT(17) | BIT(16)) /* default channel wheight */ |
333 | |
334 | @@ -216,7 +217,7 @@ ltq_dma_init(struct platform_device *pdev) |
335 | { |
336 | struct clk *clk; |
337 | struct resource *res; |
338 | - unsigned id; |
339 | + unsigned int id, nchannels; |
340 | int i; |
341 | |
342 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
343 | @@ -232,21 +233,24 @@ ltq_dma_init(struct platform_device *pdev) |
344 | clk_enable(clk); |
345 | ltq_dma_w32_mask(0, DMA_RESET, LTQ_DMA_CTRL); |
346 | |
347 | + usleep_range(1, 10); |
348 | + |
349 | /* disable all interrupts */ |
350 | ltq_dma_w32(0, LTQ_DMA_IRNEN); |
351 | |
352 | /* reset/configure each channel */ |
353 | - for (i = 0; i < DMA_MAX_CHANNEL; i++) { |
354 | + id = ltq_dma_r32(LTQ_DMA_ID); |
355 | + nchannels = ((id & DMA_ID_CHNR) >> 20); |
356 | + for (i = 0; i < nchannels; i++) { |
357 | ltq_dma_w32(i, LTQ_DMA_CS); |
358 | ltq_dma_w32(DMA_CHAN_RST, LTQ_DMA_CCTRL); |
359 | ltq_dma_w32(DMA_POLL | DMA_CLK_DIV4, LTQ_DMA_CPOLL); |
360 | ltq_dma_w32_mask(DMA_CHAN_ON, 0, LTQ_DMA_CCTRL); |
361 | } |
362 | |
363 | - id = ltq_dma_r32(LTQ_DMA_ID); |
364 | dev_info(&pdev->dev, |
365 | "Init done - hw rev: %X, ports: %d, channels: %d\n", |
366 | - id & 0x1f, (id >> 16) & 0xf, id >> 20); |
367 | + id & 0x1f, (id >> 16) & 0xf, nchannels); |
368 | |
369 | return 0; |
370 | } |
371 | diff --git a/arch/mips/sni/time.c b/arch/mips/sni/time.c |
372 | index 7ee14f41fc25d..1ea060f08ffea 100644 |
373 | --- a/arch/mips/sni/time.c |
374 | +++ b/arch/mips/sni/time.c |
375 | @@ -17,14 +17,14 @@ static int a20r_set_periodic(struct clock_event_device *evt) |
376 | { |
377 | *(volatile u8 *)(A20R_PT_CLOCK_BASE + 12) = 0x34; |
378 | wmb(); |
379 | - *(volatile u8 *)(A20R_PT_CLOCK_BASE + 0) = SNI_COUNTER0_DIV; |
380 | + *(volatile u8 *)(A20R_PT_CLOCK_BASE + 0) = SNI_COUNTER0_DIV & 0xff; |
381 | wmb(); |
382 | *(volatile u8 *)(A20R_PT_CLOCK_BASE + 0) = SNI_COUNTER0_DIV >> 8; |
383 | wmb(); |
384 | |
385 | *(volatile u8 *)(A20R_PT_CLOCK_BASE + 12) = 0xb4; |
386 | wmb(); |
387 | - *(volatile u8 *)(A20R_PT_CLOCK_BASE + 8) = SNI_COUNTER2_DIV; |
388 | + *(volatile u8 *)(A20R_PT_CLOCK_BASE + 8) = SNI_COUNTER2_DIV & 0xff; |
389 | wmb(); |
390 | *(volatile u8 *)(A20R_PT_CLOCK_BASE + 8) = SNI_COUNTER2_DIV >> 8; |
391 | wmb(); |
392 | diff --git a/arch/parisc/kernel/entry.S b/arch/parisc/kernel/entry.S |
393 | index 63b140bde2a3a..ad20414b7fb5d 100644 |
394 | --- a/arch/parisc/kernel/entry.S |
395 | +++ b/arch/parisc/kernel/entry.S |
396 | @@ -1849,8 +1849,8 @@ syscall_restore: |
397 | LDREG TI_TASK-THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r1 |
398 | |
399 | /* Are we being ptraced? */ |
400 | - ldw TASK_FLAGS(%r1),%r19 |
401 | - ldi _TIF_SYSCALL_TRACE_MASK,%r2 |
402 | + LDREG TI_FLAGS-THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r19 |
403 | + ldi _TIF_SINGLESTEP|_TIF_BLOCKSTEP,%r2 |
404 | and,COND(=) %r19,%r2,%r0 |
405 | b,n syscall_restore_rfi |
406 | |
407 | diff --git a/arch/parisc/kernel/smp.c b/arch/parisc/kernel/smp.c |
408 | index 75dab2871346c..af966c1c922ff 100644 |
409 | --- a/arch/parisc/kernel/smp.c |
410 | +++ b/arch/parisc/kernel/smp.c |
411 | @@ -32,6 +32,7 @@ |
412 | #include <linux/bitops.h> |
413 | #include <linux/ftrace.h> |
414 | #include <linux/cpu.h> |
415 | +#include <linux/kgdb.h> |
416 | |
417 | #include <linux/atomic.h> |
418 | #include <asm/current.h> |
419 | @@ -74,7 +75,10 @@ enum ipi_message_type { |
420 | IPI_CALL_FUNC, |
421 | IPI_CPU_START, |
422 | IPI_CPU_STOP, |
423 | - IPI_CPU_TEST |
424 | + IPI_CPU_TEST, |
425 | +#ifdef CONFIG_KGDB |
426 | + IPI_ENTER_KGDB, |
427 | +#endif |
428 | }; |
429 | |
430 | |
431 | @@ -170,7 +174,12 @@ ipi_interrupt(int irq, void *dev_id) |
432 | case IPI_CPU_TEST: |
433 | smp_debug(100, KERN_DEBUG "CPU%d is alive!\n", this_cpu); |
434 | break; |
435 | - |
436 | +#ifdef CONFIG_KGDB |
437 | + case IPI_ENTER_KGDB: |
438 | + smp_debug(100, KERN_DEBUG "CPU%d ENTER_KGDB\n", this_cpu); |
439 | + kgdb_nmicallback(raw_smp_processor_id(), get_irq_regs()); |
440 | + break; |
441 | +#endif |
442 | default: |
443 | printk(KERN_CRIT "Unknown IPI num on CPU%d: %lu\n", |
444 | this_cpu, which); |
445 | @@ -226,6 +235,12 @@ send_IPI_allbutself(enum ipi_message_type op) |
446 | } |
447 | } |
448 | |
449 | +#ifdef CONFIG_KGDB |
450 | +void kgdb_roundup_cpus(void) |
451 | +{ |
452 | + send_IPI_allbutself(IPI_ENTER_KGDB); |
453 | +} |
454 | +#endif |
455 | |
456 | inline void |
457 | smp_send_stop(void) { send_IPI_allbutself(IPI_CPU_STOP); } |
458 | diff --git a/arch/parisc/mm/init.c b/arch/parisc/mm/init.c |
459 | index dbbe3932f833c..7bdc449615e85 100644 |
460 | --- a/arch/parisc/mm/init.c |
461 | +++ b/arch/parisc/mm/init.c |
462 | @@ -940,9 +940,9 @@ void flush_tlb_all(void) |
463 | { |
464 | int do_recycle; |
465 | |
466 | - __inc_irq_stat(irq_tlb_count); |
467 | do_recycle = 0; |
468 | spin_lock(&sid_lock); |
469 | + __inc_irq_stat(irq_tlb_count); |
470 | if (dirty_space_ids > RECYCLE_THRESHOLD) { |
471 | BUG_ON(recycle_inuse); /* FIXME: Use a semaphore/wait queue here */ |
472 | get_dirty_sids(&recycle_ndirty,recycle_dirty_array); |
473 | @@ -961,8 +961,8 @@ void flush_tlb_all(void) |
474 | #else |
475 | void flush_tlb_all(void) |
476 | { |
477 | - __inc_irq_stat(irq_tlb_count); |
478 | spin_lock(&sid_lock); |
479 | + __inc_irq_stat(irq_tlb_count); |
480 | flush_tlb_all_local(NULL); |
481 | recycle_sids(); |
482 | spin_unlock(&sid_lock); |
483 | diff --git a/arch/powerpc/boot/dts/charon.dts b/arch/powerpc/boot/dts/charon.dts |
484 | index 0e00e508eaa6a..1c8fe20752e6a 100644 |
485 | --- a/arch/powerpc/boot/dts/charon.dts |
486 | +++ b/arch/powerpc/boot/dts/charon.dts |
487 | @@ -39,7 +39,7 @@ |
488 | }; |
489 | }; |
490 | |
491 | - memory { |
492 | + memory@0 { |
493 | device_type = "memory"; |
494 | reg = <0x00000000 0x08000000>; // 128MB |
495 | }; |
496 | diff --git a/arch/powerpc/boot/dts/digsy_mtc.dts b/arch/powerpc/boot/dts/digsy_mtc.dts |
497 | index 955bff629df3c..bf511255f3ae8 100644 |
498 | --- a/arch/powerpc/boot/dts/digsy_mtc.dts |
499 | +++ b/arch/powerpc/boot/dts/digsy_mtc.dts |
500 | @@ -20,7 +20,7 @@ |
501 | model = "intercontrol,digsy-mtc"; |
502 | compatible = "intercontrol,digsy-mtc"; |
503 | |
504 | - memory { |
505 | + memory@0 { |
506 | reg = <0x00000000 0x02000000>; // 32MB |
507 | }; |
508 | |
509 | diff --git a/arch/powerpc/boot/dts/lite5200.dts b/arch/powerpc/boot/dts/lite5200.dts |
510 | index 179a1785d6454..18d137a3393f0 100644 |
511 | --- a/arch/powerpc/boot/dts/lite5200.dts |
512 | +++ b/arch/powerpc/boot/dts/lite5200.dts |
513 | @@ -36,7 +36,7 @@ |
514 | }; |
515 | }; |
516 | |
517 | - memory { |
518 | + memory@0 { |
519 | device_type = "memory"; |
520 | reg = <0x00000000 0x04000000>; // 64MB |
521 | }; |
522 | diff --git a/arch/powerpc/boot/dts/lite5200b.dts b/arch/powerpc/boot/dts/lite5200b.dts |
523 | index 5abb46c5cc951..29419cf81e044 100644 |
524 | --- a/arch/powerpc/boot/dts/lite5200b.dts |
525 | +++ b/arch/powerpc/boot/dts/lite5200b.dts |
526 | @@ -35,7 +35,7 @@ |
527 | led4 { gpios = <&gpio_simple 2 1>; }; |
528 | }; |
529 | |
530 | - memory { |
531 | + memory@0 { |
532 | reg = <0x00000000 0x10000000>; // 256MB |
533 | }; |
534 | |
535 | diff --git a/arch/powerpc/boot/dts/media5200.dts b/arch/powerpc/boot/dts/media5200.dts |
536 | index b5413cb85f134..3d57463bc49da 100644 |
537 | --- a/arch/powerpc/boot/dts/media5200.dts |
538 | +++ b/arch/powerpc/boot/dts/media5200.dts |
539 | @@ -36,7 +36,7 @@ |
540 | }; |
541 | }; |
542 | |
543 | - memory { |
544 | + memory@0 { |
545 | reg = <0x00000000 0x08000000>; // 128MB RAM |
546 | }; |
547 | |
548 | diff --git a/arch/powerpc/boot/dts/mpc5200b.dtsi b/arch/powerpc/boot/dts/mpc5200b.dtsi |
549 | index 969b2200b2f97..ecfba675b5611 100644 |
550 | --- a/arch/powerpc/boot/dts/mpc5200b.dtsi |
551 | +++ b/arch/powerpc/boot/dts/mpc5200b.dtsi |
552 | @@ -37,7 +37,7 @@ |
553 | }; |
554 | }; |
555 | |
556 | - memory: memory { |
557 | + memory: memory@0 { |
558 | device_type = "memory"; |
559 | reg = <0x00000000 0x04000000>; // 64MB |
560 | }; |
561 | diff --git a/arch/powerpc/boot/dts/o2d.dts b/arch/powerpc/boot/dts/o2d.dts |
562 | index 9f6dd4d889b32..5a676e8141caf 100644 |
563 | --- a/arch/powerpc/boot/dts/o2d.dts |
564 | +++ b/arch/powerpc/boot/dts/o2d.dts |
565 | @@ -16,7 +16,7 @@ |
566 | model = "ifm,o2d"; |
567 | compatible = "ifm,o2d"; |
568 | |
569 | - memory { |
570 | + memory@0 { |
571 | reg = <0x00000000 0x08000000>; // 128MB |
572 | }; |
573 | |
574 | diff --git a/arch/powerpc/boot/dts/o2d.dtsi b/arch/powerpc/boot/dts/o2d.dtsi |
575 | index cf073e693f24d..1b4df5f64b580 100644 |
576 | --- a/arch/powerpc/boot/dts/o2d.dtsi |
577 | +++ b/arch/powerpc/boot/dts/o2d.dtsi |
578 | @@ -23,7 +23,7 @@ |
579 | model = "ifm,o2d"; |
580 | compatible = "ifm,o2d"; |
581 | |
582 | - memory { |
583 | + memory@0 { |
584 | reg = <0x00000000 0x04000000>; // 64MB |
585 | }; |
586 | |
587 | diff --git a/arch/powerpc/boot/dts/o2dnt2.dts b/arch/powerpc/boot/dts/o2dnt2.dts |
588 | index a0f5b97a4f06e..5184c461a205f 100644 |
589 | --- a/arch/powerpc/boot/dts/o2dnt2.dts |
590 | +++ b/arch/powerpc/boot/dts/o2dnt2.dts |
591 | @@ -16,7 +16,7 @@ |
592 | model = "ifm,o2dnt2"; |
593 | compatible = "ifm,o2d"; |
594 | |
595 | - memory { |
596 | + memory@0 { |
597 | reg = <0x00000000 0x08000000>; // 128MB |
598 | }; |
599 | |
600 | diff --git a/arch/powerpc/boot/dts/o3dnt.dts b/arch/powerpc/boot/dts/o3dnt.dts |
601 | index acce49326491b..045b901719245 100644 |
602 | --- a/arch/powerpc/boot/dts/o3dnt.dts |
603 | +++ b/arch/powerpc/boot/dts/o3dnt.dts |
604 | @@ -16,7 +16,7 @@ |
605 | model = "ifm,o3dnt"; |
606 | compatible = "ifm,o2d"; |
607 | |
608 | - memory { |
609 | + memory@0 { |
610 | reg = <0x00000000 0x04000000>; // 64MB |
611 | }; |
612 | |
613 | diff --git a/arch/powerpc/boot/dts/pcm032.dts b/arch/powerpc/boot/dts/pcm032.dts |
614 | index 96b139bf50e9c..ac3f53c1a1f5b 100644 |
615 | --- a/arch/powerpc/boot/dts/pcm032.dts |
616 | +++ b/arch/powerpc/boot/dts/pcm032.dts |
617 | @@ -26,7 +26,7 @@ |
618 | model = "phytec,pcm032"; |
619 | compatible = "phytec,pcm032"; |
620 | |
621 | - memory { |
622 | + memory@0 { |
623 | reg = <0x00000000 0x08000000>; // 128MB |
624 | }; |
625 | |
626 | diff --git a/arch/powerpc/boot/dts/tqm5200.dts b/arch/powerpc/boot/dts/tqm5200.dts |
627 | index 1db07f6cf133c..68b9e8240fb5b 100644 |
628 | --- a/arch/powerpc/boot/dts/tqm5200.dts |
629 | +++ b/arch/powerpc/boot/dts/tqm5200.dts |
630 | @@ -36,7 +36,7 @@ |
631 | }; |
632 | }; |
633 | |
634 | - memory { |
635 | + memory@0 { |
636 | device_type = "memory"; |
637 | reg = <0x00000000 0x04000000>; // 64MB |
638 | }; |
639 | diff --git a/arch/powerpc/net/bpf_jit.h b/arch/powerpc/net/bpf_jit.h |
640 | index 83e5b255d1423..89e61b109c17f 100644 |
641 | --- a/arch/powerpc/net/bpf_jit.h |
642 | +++ b/arch/powerpc/net/bpf_jit.h |
643 | @@ -177,13 +177,26 @@ |
644 | #define PPC_NEG(d, a) EMIT(PPC_INST_NEG | ___PPC_RT(d) | ___PPC_RA(a)) |
645 | |
646 | /* Long jump; (unconditional 'branch') */ |
647 | -#define PPC_JMP(dest) EMIT(PPC_INST_BRANCH | \ |
648 | - (((dest) - (ctx->idx * 4)) & 0x03fffffc)) |
649 | +#define PPC_JMP(dest) \ |
650 | + do { \ |
651 | + long offset = (long)(dest) - (ctx->idx * 4); \ |
652 | + if (offset < -0x2000000 || offset > 0x1fffffc || offset & 0x3) { \ |
653 | + pr_err_ratelimited("Branch offset 0x%lx (@%u) out of range\n", offset, ctx->idx); \ |
654 | + return -ERANGE; \ |
655 | + } \ |
656 | + EMIT(PPC_INST_BRANCH | (offset & 0x03fffffc)); \ |
657 | + } while (0) |
658 | /* "cond" here covers BO:BI fields. */ |
659 | -#define PPC_BCC_SHORT(cond, dest) EMIT(PPC_INST_BRANCH_COND | \ |
660 | - (((cond) & 0x3ff) << 16) | \ |
661 | - (((dest) - (ctx->idx * 4)) & \ |
662 | - 0xfffc)) |
663 | +#define PPC_BCC_SHORT(cond, dest) \ |
664 | + do { \ |
665 | + long offset = (long)(dest) - (ctx->idx * 4); \ |
666 | + if (offset < -0x8000 || offset > 0x7fff || offset & 0x3) { \ |
667 | + pr_err_ratelimited("Conditional branch offset 0x%lx (@%u) out of range\n", offset, ctx->idx); \ |
668 | + return -ERANGE; \ |
669 | + } \ |
670 | + EMIT(PPC_INST_BRANCH_COND | (((cond) & 0x3ff) << 16) | (offset & 0xfffc)); \ |
671 | + } while (0) |
672 | + |
673 | /* Sign-extended 32-bit immediate load */ |
674 | #define PPC_LI32(d, i) do { \ |
675 | if ((int)(uintptr_t)(i) >= -32768 && \ |
676 | diff --git a/arch/powerpc/net/bpf_jit_comp64.c b/arch/powerpc/net/bpf_jit_comp64.c |
677 | index e08e55cd98e6f..5a834e34c5b4d 100644 |
678 | --- a/arch/powerpc/net/bpf_jit_comp64.c |
679 | +++ b/arch/powerpc/net/bpf_jit_comp64.c |
680 | @@ -239,7 +239,7 @@ static void bpf_jit_emit_func_call(u32 *image, struct codegen_context *ctx, u64 |
681 | PPC_BLRL(); |
682 | } |
683 | |
684 | -static void bpf_jit_emit_tail_call(u32 *image, struct codegen_context *ctx, u32 out) |
685 | +static int bpf_jit_emit_tail_call(u32 *image, struct codegen_context *ctx, u32 out) |
686 | { |
687 | /* |
688 | * By now, the eBPF program has already setup parameters in r3, r4 and r5 |
689 | @@ -300,7 +300,9 @@ static void bpf_jit_emit_tail_call(u32 *image, struct codegen_context *ctx, u32 |
690 | bpf_jit_emit_common_epilogue(image, ctx); |
691 | |
692 | PPC_BCTR(); |
693 | + |
694 | /* out: */ |
695 | + return 0; |
696 | } |
697 | |
698 | /* Assemble the body code between the prologue & epilogue */ |
699 | @@ -310,7 +312,7 @@ static int bpf_jit_build_body(struct bpf_prog *fp, u32 *image, |
700 | { |
701 | const struct bpf_insn *insn = fp->insnsi; |
702 | int flen = fp->len; |
703 | - int i; |
704 | + int i, ret; |
705 | |
706 | /* Start of epilogue code - will only be valid 2nd pass onwards */ |
707 | u32 exit_addr = addrs[flen]; |
708 | @@ -361,18 +363,25 @@ static int bpf_jit_build_body(struct bpf_prog *fp, u32 *image, |
709 | PPC_SUB(dst_reg, dst_reg, src_reg); |
710 | goto bpf_alu32_trunc; |
711 | case BPF_ALU | BPF_ADD | BPF_K: /* (u32) dst += (u32) imm */ |
712 | - case BPF_ALU | BPF_SUB | BPF_K: /* (u32) dst -= (u32) imm */ |
713 | case BPF_ALU64 | BPF_ADD | BPF_K: /* dst += imm */ |
714 | + if (!imm) { |
715 | + goto bpf_alu32_trunc; |
716 | + } else if (imm >= -32768 && imm < 32768) { |
717 | + PPC_ADDI(dst_reg, dst_reg, IMM_L(imm)); |
718 | + } else { |
719 | + PPC_LI32(b2p[TMP_REG_1], imm); |
720 | + PPC_ADD(dst_reg, dst_reg, b2p[TMP_REG_1]); |
721 | + } |
722 | + goto bpf_alu32_trunc; |
723 | + case BPF_ALU | BPF_SUB | BPF_K: /* (u32) dst -= (u32) imm */ |
724 | case BPF_ALU64 | BPF_SUB | BPF_K: /* dst -= imm */ |
725 | - if (BPF_OP(code) == BPF_SUB) |
726 | - imm = -imm; |
727 | - if (imm) { |
728 | - if (imm >= -32768 && imm < 32768) |
729 | - PPC_ADDI(dst_reg, dst_reg, IMM_L(imm)); |
730 | - else { |
731 | - PPC_LI32(b2p[TMP_REG_1], imm); |
732 | - PPC_ADD(dst_reg, dst_reg, b2p[TMP_REG_1]); |
733 | - } |
734 | + if (!imm) { |
735 | + goto bpf_alu32_trunc; |
736 | + } else if (imm > -32768 && imm <= 32768) { |
737 | + PPC_ADDI(dst_reg, dst_reg, IMM_L(-imm)); |
738 | + } else { |
739 | + PPC_LI32(b2p[TMP_REG_1], imm); |
740 | + PPC_SUB(dst_reg, dst_reg, b2p[TMP_REG_1]); |
741 | } |
742 | goto bpf_alu32_trunc; |
743 | case BPF_ALU | BPF_MUL | BPF_X: /* (u32) dst *= (u32) src */ |
744 | @@ -938,7 +947,9 @@ common_load: |
745 | */ |
746 | case BPF_JMP | BPF_CALL | BPF_X: |
747 | ctx->seen |= SEEN_TAILCALL; |
748 | - bpf_jit_emit_tail_call(image, ctx, addrs[i + 1]); |
749 | + ret = bpf_jit_emit_tail_call(image, ctx, addrs[i + 1]); |
750 | + if (ret < 0) |
751 | + return ret; |
752 | break; |
753 | |
754 | default: |
755 | diff --git a/arch/powerpc/platforms/85xx/mpc85xx_pm_ops.c b/arch/powerpc/platforms/85xx/mpc85xx_pm_ops.c |
756 | index f05325f0cc03b..ddd2953965aa1 100644 |
757 | --- a/arch/powerpc/platforms/85xx/mpc85xx_pm_ops.c |
758 | +++ b/arch/powerpc/platforms/85xx/mpc85xx_pm_ops.c |
759 | @@ -98,9 +98,8 @@ int __init mpc85xx_setup_pmc(void) |
760 | pr_err("Could not map guts node address\n"); |
761 | return -ENOMEM; |
762 | } |
763 | + qoriq_pm_ops = &mpc85xx_pm_ops; |
764 | } |
765 | |
766 | - qoriq_pm_ops = &mpc85xx_pm_ops; |
767 | - |
768 | return 0; |
769 | } |
770 | diff --git a/arch/powerpc/sysdev/dcr-low.S b/arch/powerpc/sysdev/dcr-low.S |
771 | index e687bb2003ff0..5589fbe48bbdc 100644 |
772 | --- a/arch/powerpc/sysdev/dcr-low.S |
773 | +++ b/arch/powerpc/sysdev/dcr-low.S |
774 | @@ -15,7 +15,7 @@ |
775 | #include <asm/export.h> |
776 | |
777 | #define DCR_ACCESS_PROLOG(table) \ |
778 | - cmpli cr0,r3,1024; \ |
779 | + cmplwi cr0,r3,1024; \ |
780 | rlwinm r3,r3,4,18,27; \ |
781 | lis r5,table@h; \ |
782 | ori r5,r5,table@l; \ |
783 | diff --git a/arch/s390/mm/gmap.c b/arch/s390/mm/gmap.c |
784 | index 0195c3983f540..65f802f705475 100644 |
785 | --- a/arch/s390/mm/gmap.c |
786 | +++ b/arch/s390/mm/gmap.c |
787 | @@ -662,9 +662,10 @@ void __gmap_zap(struct gmap *gmap, unsigned long gaddr) |
788 | vmaddr |= gaddr & ~PMD_MASK; |
789 | /* Get pointer to the page table entry */ |
790 | ptep = get_locked_pte(gmap->mm, vmaddr, &ptl); |
791 | - if (likely(ptep)) |
792 | + if (likely(ptep)) { |
793 | ptep_zap_unused(gmap->mm, vmaddr, ptep, 0); |
794 | - pte_unmap_unlock(ptep, ptl); |
795 | + pte_unmap_unlock(ptep, ptl); |
796 | + } |
797 | } |
798 | } |
799 | EXPORT_SYMBOL_GPL(__gmap_zap); |
800 | diff --git a/arch/sh/Kconfig.debug b/arch/sh/Kconfig.debug |
801 | index 5f2bb4242c0f7..c50c397cbcf75 100644 |
802 | --- a/arch/sh/Kconfig.debug |
803 | +++ b/arch/sh/Kconfig.debug |
804 | @@ -60,6 +60,7 @@ config DUMP_CODE |
805 | |
806 | config DWARF_UNWINDER |
807 | bool "Enable the DWARF unwinder for stacktraces" |
808 | + depends on DEBUG_KERNEL |
809 | select FRAME_POINTER |
810 | depends on SUPERH32 |
811 | default n |
812 | diff --git a/arch/sh/include/asm/sfp-machine.h b/arch/sh/include/asm/sfp-machine.h |
813 | index d3c548443f2a6..dd195c6f3b9d8 100644 |
814 | --- a/arch/sh/include/asm/sfp-machine.h |
815 | +++ b/arch/sh/include/asm/sfp-machine.h |
816 | @@ -25,6 +25,14 @@ |
817 | #ifndef _SFP_MACHINE_H |
818 | #define _SFP_MACHINE_H |
819 | |
820 | +#ifdef __BIG_ENDIAN__ |
821 | +#define __BYTE_ORDER __BIG_ENDIAN |
822 | +#define __LITTLE_ENDIAN 0 |
823 | +#else |
824 | +#define __BYTE_ORDER __LITTLE_ENDIAN |
825 | +#define __BIG_ENDIAN 0 |
826 | +#endif |
827 | + |
828 | #define _FP_W_TYPE_SIZE 32 |
829 | #define _FP_W_TYPE unsigned long |
830 | #define _FP_WS_TYPE signed long |
831 | diff --git a/arch/sh/kernel/cpu/sh4a/smp-shx3.c b/arch/sh/kernel/cpu/sh4a/smp-shx3.c |
832 | index 0d3637c494bfe..c1f66c35e0c12 100644 |
833 | --- a/arch/sh/kernel/cpu/sh4a/smp-shx3.c |
834 | +++ b/arch/sh/kernel/cpu/sh4a/smp-shx3.c |
835 | @@ -76,8 +76,9 @@ static void shx3_prepare_cpus(unsigned int max_cpus) |
836 | BUILD_BUG_ON(SMP_MSG_NR >= 8); |
837 | |
838 | for (i = 0; i < SMP_MSG_NR; i++) |
839 | - request_irq(104 + i, ipi_interrupt_handler, |
840 | - IRQF_PERCPU, "IPI", (void *)(long)i); |
841 | + if (request_irq(104 + i, ipi_interrupt_handler, |
842 | + IRQF_PERCPU, "IPI", (void *)(long)i)) |
843 | + pr_err("Failed to request irq %d\n", i); |
844 | |
845 | for (i = 0; i < max_cpus; i++) |
846 | set_cpu_present(i, true); |
847 | diff --git a/arch/x86/events/intel/uncore_snbep.c b/arch/x86/events/intel/uncore_snbep.c |
848 | index 686dd4339370f..e94d547e9d248 100644 |
849 | --- a/arch/x86/events/intel/uncore_snbep.c |
850 | +++ b/arch/x86/events/intel/uncore_snbep.c |
851 | @@ -3363,6 +3363,9 @@ static int skx_cha_hw_config(struct intel_uncore_box *box, struct perf_event *ev |
852 | struct hw_perf_event_extra *reg1 = &event->hw.extra_reg; |
853 | struct extra_reg *er; |
854 | int idx = 0; |
855 | + /* Any of the CHA events may be filtered by Thread/Core-ID.*/ |
856 | + if (event->hw.config & SNBEP_CBO_PMON_CTL_TID_EN) |
857 | + idx = SKX_CHA_MSR_PMON_BOX_FILTER_TID; |
858 | |
859 | for (er = skx_uncore_cha_extra_regs; er->msr; er++) { |
860 | if (er->event != (event->hw.config & er->config_mask)) |
861 | @@ -3430,6 +3433,7 @@ static struct event_constraint skx_uncore_iio_constraints[] = { |
862 | UNCORE_EVENT_CONSTRAINT(0xc0, 0xc), |
863 | UNCORE_EVENT_CONSTRAINT(0xc5, 0xc), |
864 | UNCORE_EVENT_CONSTRAINT(0xd4, 0xc), |
865 | + UNCORE_EVENT_CONSTRAINT(0xd5, 0xc), |
866 | EVENT_CONSTRAINT_END |
867 | }; |
868 | |
869 | diff --git a/arch/x86/include/asm/page_64_types.h b/arch/x86/include/asm/page_64_types.h |
870 | index 390fdd39e0e21..5a69eee673536 100644 |
871 | --- a/arch/x86/include/asm/page_64_types.h |
872 | +++ b/arch/x86/include/asm/page_64_types.h |
873 | @@ -19,7 +19,7 @@ |
874 | #define THREAD_SIZE (PAGE_SIZE << THREAD_SIZE_ORDER) |
875 | #define CURRENT_MASK (~(THREAD_SIZE - 1)) |
876 | |
877 | -#define EXCEPTION_STACK_ORDER (0 + KASAN_STACK_ORDER) |
878 | +#define EXCEPTION_STACK_ORDER (1 + KASAN_STACK_ORDER) |
879 | #define EXCEPTION_STKSZ (PAGE_SIZE << EXCEPTION_STACK_ORDER) |
880 | |
881 | #define DEBUG_STACK_ORDER (EXCEPTION_STACK_ORDER + 1) |
882 | diff --git a/arch/x86/kernel/irq.c b/arch/x86/kernel/irq.c |
883 | index c6f0ef1d9ab78..a1aecdc305da3 100644 |
884 | --- a/arch/x86/kernel/irq.c |
885 | +++ b/arch/x86/kernel/irq.c |
886 | @@ -284,8 +284,10 @@ void kvm_set_posted_intr_wakeup_handler(void (*handler)(void)) |
887 | { |
888 | if (handler) |
889 | kvm_posted_intr_wakeup_handler = handler; |
890 | - else |
891 | + else { |
892 | kvm_posted_intr_wakeup_handler = dummy_handler; |
893 | + synchronize_rcu(); |
894 | + } |
895 | } |
896 | EXPORT_SYMBOL_GPL(kvm_set_posted_intr_wakeup_handler); |
897 | |
898 | diff --git a/crypto/pcrypt.c b/crypto/pcrypt.c |
899 | index 85082574c5154..62e11835f220e 100644 |
900 | --- a/crypto/pcrypt.c |
901 | +++ b/crypto/pcrypt.c |
902 | @@ -138,12 +138,14 @@ static void pcrypt_aead_enc(struct padata_priv *padata) |
903 | { |
904 | struct pcrypt_request *preq = pcrypt_padata_request(padata); |
905 | struct aead_request *req = pcrypt_request_ctx(preq); |
906 | + int ret; |
907 | |
908 | - padata->info = crypto_aead_encrypt(req); |
909 | + ret = crypto_aead_encrypt(req); |
910 | |
911 | - if (padata->info == -EINPROGRESS) |
912 | + if (ret == -EINPROGRESS) |
913 | return; |
914 | |
915 | + padata->info = ret; |
916 | padata_do_serial(padata); |
917 | } |
918 | |
919 | @@ -180,12 +182,14 @@ static void pcrypt_aead_dec(struct padata_priv *padata) |
920 | { |
921 | struct pcrypt_request *preq = pcrypt_padata_request(padata); |
922 | struct aead_request *req = pcrypt_request_ctx(preq); |
923 | + int ret; |
924 | |
925 | - padata->info = crypto_aead_decrypt(req); |
926 | + ret = crypto_aead_decrypt(req); |
927 | |
928 | - if (padata->info == -EINPROGRESS) |
929 | + if (ret == -EINPROGRESS) |
930 | return; |
931 | |
932 | + padata->info = ret; |
933 | padata_do_serial(padata); |
934 | } |
935 | |
936 | diff --git a/drivers/acpi/acpica/acglobal.h b/drivers/acpi/acpica/acglobal.h |
937 | index 750fa824d42c4..a04bb91d56ca6 100644 |
938 | --- a/drivers/acpi/acpica/acglobal.h |
939 | +++ b/drivers/acpi/acpica/acglobal.h |
940 | @@ -259,6 +259,8 @@ extern struct acpi_bit_register_info |
941 | |
942 | ACPI_GLOBAL(u8, acpi_gbl_sleep_type_a); |
943 | ACPI_GLOBAL(u8, acpi_gbl_sleep_type_b); |
944 | +ACPI_GLOBAL(u8, acpi_gbl_sleep_type_a_s0); |
945 | +ACPI_GLOBAL(u8, acpi_gbl_sleep_type_b_s0); |
946 | |
947 | /***************************************************************************** |
948 | * |
949 | diff --git a/drivers/acpi/acpica/hwesleep.c b/drivers/acpi/acpica/hwesleep.c |
950 | index 3f2fb4b31fdc0..7e2f9b0e66eea 100644 |
951 | --- a/drivers/acpi/acpica/hwesleep.c |
952 | +++ b/drivers/acpi/acpica/hwesleep.c |
953 | @@ -184,17 +184,13 @@ acpi_status acpi_hw_extended_sleep(u8 sleep_state) |
954 | |
955 | acpi_status acpi_hw_extended_wake_prep(u8 sleep_state) |
956 | { |
957 | - acpi_status status; |
958 | u8 sleep_type_value; |
959 | |
960 | ACPI_FUNCTION_TRACE(hw_extended_wake_prep); |
961 | |
962 | - status = acpi_get_sleep_type_data(ACPI_STATE_S0, |
963 | - &acpi_gbl_sleep_type_a, |
964 | - &acpi_gbl_sleep_type_b); |
965 | - if (ACPI_SUCCESS(status)) { |
966 | + if (acpi_gbl_sleep_type_a_s0 != ACPI_SLEEP_TYPE_INVALID) { |
967 | sleep_type_value = |
968 | - ((acpi_gbl_sleep_type_a << ACPI_X_SLEEP_TYPE_POSITION) & |
969 | + ((acpi_gbl_sleep_type_a_s0 << ACPI_X_SLEEP_TYPE_POSITION) & |
970 | ACPI_X_SLEEP_TYPE_MASK); |
971 | |
972 | (void)acpi_write((u64)(sleep_type_value | ACPI_X_SLEEP_ENABLE), |
973 | diff --git a/drivers/acpi/acpica/hwsleep.c b/drivers/acpi/acpica/hwsleep.c |
974 | index d00c9810845b2..ddf198de87295 100644 |
975 | --- a/drivers/acpi/acpica/hwsleep.c |
976 | +++ b/drivers/acpi/acpica/hwsleep.c |
977 | @@ -217,7 +217,7 @@ acpi_status acpi_hw_legacy_sleep(u8 sleep_state) |
978 | |
979 | acpi_status acpi_hw_legacy_wake_prep(u8 sleep_state) |
980 | { |
981 | - acpi_status status; |
982 | + acpi_status status = AE_OK; |
983 | struct acpi_bit_register_info *sleep_type_reg_info; |
984 | struct acpi_bit_register_info *sleep_enable_reg_info; |
985 | u32 pm1a_control; |
986 | @@ -230,10 +230,7 @@ acpi_status acpi_hw_legacy_wake_prep(u8 sleep_state) |
987 | * This is unclear from the ACPI Spec, but it is required |
988 | * by some machines. |
989 | */ |
990 | - status = acpi_get_sleep_type_data(ACPI_STATE_S0, |
991 | - &acpi_gbl_sleep_type_a, |
992 | - &acpi_gbl_sleep_type_b); |
993 | - if (ACPI_SUCCESS(status)) { |
994 | + if (acpi_gbl_sleep_type_a_s0 != ACPI_SLEEP_TYPE_INVALID) { |
995 | sleep_type_reg_info = |
996 | acpi_hw_get_bit_register_info(ACPI_BITREG_SLEEP_TYPE); |
997 | sleep_enable_reg_info = |
998 | @@ -254,9 +251,9 @@ acpi_status acpi_hw_legacy_wake_prep(u8 sleep_state) |
999 | |
1000 | /* Insert the SLP_TYP bits */ |
1001 | |
1002 | - pm1a_control |= (acpi_gbl_sleep_type_a << |
1003 | + pm1a_control |= (acpi_gbl_sleep_type_a_s0 << |
1004 | sleep_type_reg_info->bit_position); |
1005 | - pm1b_control |= (acpi_gbl_sleep_type_b << |
1006 | + pm1b_control |= (acpi_gbl_sleep_type_b_s0 << |
1007 | sleep_type_reg_info->bit_position); |
1008 | |
1009 | /* Write the control registers and ignore any errors */ |
1010 | diff --git a/drivers/acpi/acpica/hwxfsleep.c b/drivers/acpi/acpica/hwxfsleep.c |
1011 | index f76e0eab32b8e..53f9f4c359579 100644 |
1012 | --- a/drivers/acpi/acpica/hwxfsleep.c |
1013 | +++ b/drivers/acpi/acpica/hwxfsleep.c |
1014 | @@ -315,6 +315,13 @@ acpi_status acpi_enter_sleep_state_prep(u8 sleep_state) |
1015 | return_ACPI_STATUS(status); |
1016 | } |
1017 | |
1018 | + status = acpi_get_sleep_type_data(ACPI_STATE_S0, |
1019 | + &acpi_gbl_sleep_type_a_s0, |
1020 | + &acpi_gbl_sleep_type_b_s0); |
1021 | + if (ACPI_FAILURE(status)) { |
1022 | + acpi_gbl_sleep_type_a_s0 = ACPI_SLEEP_TYPE_INVALID; |
1023 | + } |
1024 | + |
1025 | /* Execute the _PTS method (Prepare To Sleep) */ |
1026 | |
1027 | arg_list.count = 1; |
1028 | diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c |
1029 | index 93ecae55fe6a0..69c6f02f16b5b 100644 |
1030 | --- a/drivers/acpi/battery.c |
1031 | +++ b/drivers/acpi/battery.c |
1032 | @@ -187,7 +187,7 @@ static int acpi_battery_is_charged(struct acpi_battery *battery) |
1033 | return 1; |
1034 | |
1035 | /* fallback to using design values for broken batteries */ |
1036 | - if (battery->design_capacity == battery->capacity_now) |
1037 | + if (battery->design_capacity <= battery->capacity_now) |
1038 | return 1; |
1039 | |
1040 | /* we don't do any sort of metric based on percentages */ |
1041 | diff --git a/drivers/acpi/pmic/intel_pmic.c b/drivers/acpi/pmic/intel_pmic.c |
1042 | index ca18e0d23df97..db63d3463617a 100644 |
1043 | --- a/drivers/acpi/pmic/intel_pmic.c |
1044 | +++ b/drivers/acpi/pmic/intel_pmic.c |
1045 | @@ -216,31 +216,36 @@ static acpi_status intel_pmic_regs_handler(u32 function, |
1046 | void *handler_context, void *region_context) |
1047 | { |
1048 | struct intel_pmic_opregion *opregion = region_context; |
1049 | - int result = 0; |
1050 | + int result = -EINVAL; |
1051 | + |
1052 | + if (function == ACPI_WRITE) { |
1053 | + switch (address) { |
1054 | + case 0: |
1055 | + return AE_OK; |
1056 | + case 1: |
1057 | + opregion->ctx.addr |= (*value64 & 0xff) << 8; |
1058 | + return AE_OK; |
1059 | + case 2: |
1060 | + opregion->ctx.addr |= *value64 & 0xff; |
1061 | + return AE_OK; |
1062 | + case 3: |
1063 | + opregion->ctx.val = *value64 & 0xff; |
1064 | + return AE_OK; |
1065 | + case 4: |
1066 | + if (*value64) { |
1067 | + result = regmap_write(opregion->regmap, opregion->ctx.addr, |
1068 | + opregion->ctx.val); |
1069 | + } else { |
1070 | + result = regmap_read(opregion->regmap, opregion->ctx.addr, |
1071 | + &opregion->ctx.val); |
1072 | + } |
1073 | + opregion->ctx.addr = 0; |
1074 | + } |
1075 | + } |
1076 | |
1077 | - switch (address) { |
1078 | - case 0: |
1079 | - return AE_OK; |
1080 | - case 1: |
1081 | - opregion->ctx.addr |= (*value64 & 0xff) << 8; |
1082 | + if (function == ACPI_READ && address == 3) { |
1083 | + *value64 = opregion->ctx.val; |
1084 | return AE_OK; |
1085 | - case 2: |
1086 | - opregion->ctx.addr |= *value64 & 0xff; |
1087 | - return AE_OK; |
1088 | - case 3: |
1089 | - opregion->ctx.val = *value64 & 0xff; |
1090 | - return AE_OK; |
1091 | - case 4: |
1092 | - if (*value64) { |
1093 | - result = regmap_write(opregion->regmap, opregion->ctx.addr, |
1094 | - opregion->ctx.val); |
1095 | - } else { |
1096 | - result = regmap_read(opregion->regmap, opregion->ctx.addr, |
1097 | - &opregion->ctx.val); |
1098 | - if (result == 0) |
1099 | - *value64 = opregion->ctx.val; |
1100 | - } |
1101 | - memset(&opregion->ctx, 0x00, sizeof(opregion->ctx)); |
1102 | } |
1103 | |
1104 | if (result < 0) { |
1105 | diff --git a/drivers/android/binder.c b/drivers/android/binder.c |
1106 | index f4c0b62959450..f78f7d06ad9fc 100644 |
1107 | --- a/drivers/android/binder.c |
1108 | +++ b/drivers/android/binder.c |
1109 | @@ -303,6 +303,7 @@ struct binder_proc { |
1110 | struct task_struct *tsk; |
1111 | struct files_struct *files; |
1112 | struct mutex files_lock; |
1113 | + const struct cred *cred; |
1114 | struct hlist_node deferred_work_node; |
1115 | int deferred_work; |
1116 | void *buffer; |
1117 | @@ -1431,8 +1432,8 @@ static void binder_transaction(struct binder_proc *proc, |
1118 | return_error = BR_FAILED_REPLY; |
1119 | goto err_invalid_target_handle; |
1120 | } |
1121 | - if (security_binder_transaction(proc->tsk, |
1122 | - target_proc->tsk) < 0) { |
1123 | + if (security_binder_transaction(proc->cred, |
1124 | + target_proc->cred) < 0) { |
1125 | return_error = BR_FAILED_REPLY; |
1126 | goto err_invalid_target_handle; |
1127 | } |
1128 | @@ -1505,7 +1506,7 @@ static void binder_transaction(struct binder_proc *proc, |
1129 | t->from = thread; |
1130 | else |
1131 | t->from = NULL; |
1132 | - t->sender_euid = task_euid(proc->tsk); |
1133 | + t->sender_euid = proc->cred->euid; |
1134 | t->to_proc = target_proc; |
1135 | t->to_thread = target_thread; |
1136 | t->code = tr->code; |
1137 | @@ -1593,8 +1594,8 @@ static void binder_transaction(struct binder_proc *proc, |
1138 | return_error = BR_FAILED_REPLY; |
1139 | goto err_binder_get_ref_for_node_failed; |
1140 | } |
1141 | - if (security_binder_transfer_binder(proc->tsk, |
1142 | - target_proc->tsk)) { |
1143 | + if (security_binder_transfer_binder(proc->cred, |
1144 | + target_proc->cred)) { |
1145 | return_error = BR_FAILED_REPLY; |
1146 | goto err_binder_get_ref_for_node_failed; |
1147 | } |
1148 | @@ -1633,8 +1634,8 @@ static void binder_transaction(struct binder_proc *proc, |
1149 | return_error = BR_FAILED_REPLY; |
1150 | goto err_binder_get_ref_failed; |
1151 | } |
1152 | - if (security_binder_transfer_binder(proc->tsk, |
1153 | - target_proc->tsk)) { |
1154 | + if (security_binder_transfer_binder(proc->cred, |
1155 | + target_proc->cred)) { |
1156 | return_error = BR_FAILED_REPLY; |
1157 | goto err_binder_get_ref_failed; |
1158 | } |
1159 | @@ -1697,8 +1698,8 @@ static void binder_transaction(struct binder_proc *proc, |
1160 | return_error = BR_FAILED_REPLY; |
1161 | goto err_fget_failed; |
1162 | } |
1163 | - if (security_binder_transfer_file(proc->tsk, |
1164 | - target_proc->tsk, |
1165 | + if (security_binder_transfer_file(proc->cred, |
1166 | + target_proc->cred, |
1167 | file) < 0) { |
1168 | fput(file); |
1169 | return_error = BR_FAILED_REPLY; |
1170 | @@ -2780,7 +2781,7 @@ static int binder_ioctl_set_ctx_mgr(struct file *filp) |
1171 | ret = -EBUSY; |
1172 | goto out; |
1173 | } |
1174 | - ret = security_binder_set_context_mgr(proc->tsk); |
1175 | + ret = security_binder_set_context_mgr(proc->cred); |
1176 | if (ret < 0) |
1177 | goto out; |
1178 | if (uid_valid(binder_context_mgr_uid)) { |
1179 | @@ -3036,6 +3037,7 @@ static int binder_open(struct inode *nodp, struct file *filp) |
1180 | get_task_struct(current->group_leader); |
1181 | proc->tsk = current->group_leader; |
1182 | mutex_init(&proc->files_lock); |
1183 | + proc->cred = get_cred(filp->f_cred); |
1184 | INIT_LIST_HEAD(&proc->todo); |
1185 | init_waitqueue_head(&proc->wait); |
1186 | proc->default_priority = task_nice(current); |
1187 | @@ -3241,6 +3243,7 @@ static void binder_deferred_release(struct binder_proc *proc) |
1188 | } |
1189 | |
1190 | put_task_struct(proc->tsk); |
1191 | + put_cred(proc->cred); |
1192 | |
1193 | binder_debug(BINDER_DEBUG_OPEN_CLOSE, |
1194 | "%s: %d threads %d, nodes %d (ref %d), refs %d, active transactions %d, buffers %d, pages %d\n", |
1195 | diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c |
1196 | index 16f8fda899815..07f96a0321498 100644 |
1197 | --- a/drivers/ata/libata-eh.c |
1198 | +++ b/drivers/ata/libata-eh.c |
1199 | @@ -114,6 +114,12 @@ static const unsigned long ata_eh_identify_timeouts[] = { |
1200 | ULONG_MAX, |
1201 | }; |
1202 | |
1203 | +static const unsigned long ata_eh_revalidate_timeouts[] = { |
1204 | + 15000, /* Some drives are slow to read log pages when waking-up */ |
1205 | + 15000, /* combined time till here is enough even for media access */ |
1206 | + ULONG_MAX, |
1207 | +}; |
1208 | + |
1209 | static const unsigned long ata_eh_flush_timeouts[] = { |
1210 | 15000, /* be generous with flush */ |
1211 | 15000, /* ditto */ |
1212 | @@ -150,6 +156,8 @@ static const struct ata_eh_cmd_timeout_ent |
1213 | ata_eh_cmd_timeout_table[ATA_EH_CMD_TIMEOUT_TABLE_SIZE] = { |
1214 | { .commands = CMDS(ATA_CMD_ID_ATA, ATA_CMD_ID_ATAPI), |
1215 | .timeouts = ata_eh_identify_timeouts, }, |
1216 | + { .commands = CMDS(ATA_CMD_READ_LOG_EXT, ATA_CMD_READ_LOG_DMA_EXT), |
1217 | + .timeouts = ata_eh_revalidate_timeouts, }, |
1218 | { .commands = CMDS(ATA_CMD_READ_NATIVE_MAX, ATA_CMD_READ_NATIVE_MAX_EXT), |
1219 | .timeouts = ata_eh_other_timeouts, }, |
1220 | { .commands = CMDS(ATA_CMD_SET_MAX, ATA_CMD_SET_MAX_EXT), |
1221 | diff --git a/drivers/auxdisplay/img-ascii-lcd.c b/drivers/auxdisplay/img-ascii-lcd.c |
1222 | index 6e8eaa7fe7a6f..b5f849d2f7623 100644 |
1223 | --- a/drivers/auxdisplay/img-ascii-lcd.c |
1224 | +++ b/drivers/auxdisplay/img-ascii-lcd.c |
1225 | @@ -283,6 +283,16 @@ static int img_ascii_lcd_display(struct img_ascii_lcd_ctx *ctx, |
1226 | if (msg[count - 1] == '\n') |
1227 | count--; |
1228 | |
1229 | + if (!count) { |
1230 | + /* clear the LCD */ |
1231 | + devm_kfree(&ctx->pdev->dev, ctx->message); |
1232 | + ctx->message = NULL; |
1233 | + ctx->message_len = 0; |
1234 | + memset(ctx->curr, ' ', ctx->cfg->num_chars); |
1235 | + ctx->cfg->update(ctx); |
1236 | + return 0; |
1237 | + } |
1238 | + |
1239 | new_msg = devm_kmalloc(&ctx->pdev->dev, count + 1, GFP_KERNEL); |
1240 | if (!new_msg) |
1241 | return -ENOMEM; |
1242 | diff --git a/drivers/cpuidle/sysfs.c b/drivers/cpuidle/sysfs.c |
1243 | index e7e92ed34f0c6..34c4a61a954fc 100644 |
1244 | --- a/drivers/cpuidle/sysfs.c |
1245 | +++ b/drivers/cpuidle/sysfs.c |
1246 | @@ -413,6 +413,7 @@ static int cpuidle_add_state_sysfs(struct cpuidle_device *device) |
1247 | &kdev->kobj, "state%d", i); |
1248 | if (ret) { |
1249 | kobject_put(&kobj->kobj); |
1250 | + kfree(kobj); |
1251 | goto error_state; |
1252 | } |
1253 | kobject_uevent(&kobj->kobj, KOBJ_ADD); |
1254 | @@ -543,6 +544,7 @@ static int cpuidle_add_driver_sysfs(struct cpuidle_device *dev) |
1255 | &kdev->kobj, "driver"); |
1256 | if (ret) { |
1257 | kobject_put(&kdrv->kobj); |
1258 | + kfree(kdrv); |
1259 | return ret; |
1260 | } |
1261 | |
1262 | @@ -629,7 +631,6 @@ int cpuidle_add_sysfs(struct cpuidle_device *dev) |
1263 | if (!kdev) |
1264 | return -ENOMEM; |
1265 | kdev->dev = dev; |
1266 | - dev->kobj_dev = kdev; |
1267 | |
1268 | init_completion(&kdev->kobj_unregister); |
1269 | |
1270 | @@ -637,9 +638,11 @@ int cpuidle_add_sysfs(struct cpuidle_device *dev) |
1271 | "cpuidle"); |
1272 | if (error) { |
1273 | kobject_put(&kdev->kobj); |
1274 | + kfree(kdev); |
1275 | return error; |
1276 | } |
1277 | |
1278 | + dev->kobj_dev = kdev; |
1279 | kobject_uevent(&kdev->kobj, KOBJ_ADD); |
1280 | |
1281 | return 0; |
1282 | diff --git a/drivers/crypto/qat/qat_common/adf_pf2vf_msg.c b/drivers/crypto/qat/qat_common/adf_pf2vf_msg.c |
1283 | index c64481160b711..180016e157771 100644 |
1284 | --- a/drivers/crypto/qat/qat_common/adf_pf2vf_msg.c |
1285 | +++ b/drivers/crypto/qat/qat_common/adf_pf2vf_msg.c |
1286 | @@ -195,6 +195,13 @@ static int __adf_iov_putmsg(struct adf_accel_dev *accel_dev, u32 msg, u8 vf_nr) |
1287 | val = ADF_CSR_RD(pmisc_bar_addr, pf2vf_offset); |
1288 | } while ((val & int_bit) && (count++ < ADF_IOV_MSG_ACK_MAX_RETRY)); |
1289 | |
1290 | + if (val != msg) { |
1291 | + dev_dbg(&GET_DEV(accel_dev), |
1292 | + "Collision - PFVF CSR overwritten by remote function\n"); |
1293 | + ret = -EIO; |
1294 | + goto out; |
1295 | + } |
1296 | + |
1297 | if (val & int_bit) { |
1298 | dev_dbg(&GET_DEV(accel_dev), "ACK not received from remote\n"); |
1299 | val &= ~int_bit; |
1300 | @@ -243,6 +250,11 @@ void adf_vf2pf_req_hndl(struct adf_accel_vf_info *vf_info) |
1301 | |
1302 | /* Read message from the VF */ |
1303 | msg = ADF_CSR_RD(pmisc_addr, hw_data->get_pf2vf_offset(vf_nr)); |
1304 | + if (!(msg & ADF_VF2PF_INT)) { |
1305 | + dev_info(&GET_DEV(accel_dev), |
1306 | + "Spurious VF2PF interrupt, msg %X. Ignored\n", msg); |
1307 | + goto out; |
1308 | + } |
1309 | |
1310 | /* To ACK, clear the VF2PFINT bit */ |
1311 | msg &= ~ADF_VF2PF_INT; |
1312 | @@ -326,6 +338,7 @@ void adf_vf2pf_req_hndl(struct adf_accel_vf_info *vf_info) |
1313 | if (resp && adf_iov_putmsg(accel_dev, resp, vf_nr)) |
1314 | dev_err(&GET_DEV(accel_dev), "Failed to send response to VF\n"); |
1315 | |
1316 | +out: |
1317 | /* re-enable interrupt on PF from this VF */ |
1318 | adf_enable_vf2pf_interrupts(accel_dev, (1 << vf_nr)); |
1319 | return; |
1320 | diff --git a/drivers/crypto/qat/qat_common/adf_vf_isr.c b/drivers/crypto/qat/qat_common/adf_vf_isr.c |
1321 | index 36db3c443e7e4..6fa1447d05829 100644 |
1322 | --- a/drivers/crypto/qat/qat_common/adf_vf_isr.c |
1323 | +++ b/drivers/crypto/qat/qat_common/adf_vf_isr.c |
1324 | @@ -123,6 +123,11 @@ static void adf_pf2vf_bh_handler(void *data) |
1325 | |
1326 | /* Read the message from PF */ |
1327 | msg = ADF_CSR_RD(pmisc_bar_addr, hw_data->get_pf2vf_offset(0)); |
1328 | + if (!(msg & ADF_PF2VF_INT)) { |
1329 | + dev_info(&GET_DEV(accel_dev), |
1330 | + "Spurious PF2VF interrupt, msg %X. Ignored\n", msg); |
1331 | + goto out; |
1332 | + } |
1333 | |
1334 | if (!(msg & ADF_PF2VF_MSGORIGIN_SYSTEM)) |
1335 | /* Ignore legacy non-system (non-kernel) PF2VF messages */ |
1336 | @@ -171,6 +176,7 @@ static void adf_pf2vf_bh_handler(void *data) |
1337 | msg &= ~BIT(0); |
1338 | ADF_CSR_WR(pmisc_bar_addr, hw_data->get_pf2vf_offset(0), msg); |
1339 | |
1340 | +out: |
1341 | /* Re-enable PF2VF interrupts */ |
1342 | adf_enable_pf2vf_interrupts(accel_dev); |
1343 | return; |
1344 | diff --git a/drivers/dma/at_xdmac.c b/drivers/dma/at_xdmac.c |
1345 | index 12d9048293245..a505be9ef96da 100644 |
1346 | --- a/drivers/dma/at_xdmac.c |
1347 | +++ b/drivers/dma/at_xdmac.c |
1348 | @@ -156,7 +156,7 @@ |
1349 | #define AT_XDMAC_CC_WRIP (0x1 << 23) /* Write in Progress (read only) */ |
1350 | #define AT_XDMAC_CC_WRIP_DONE (0x0 << 23) |
1351 | #define AT_XDMAC_CC_WRIP_IN_PROGRESS (0x1 << 23) |
1352 | -#define AT_XDMAC_CC_PERID(i) (0x7f & (i) << 24) /* Channel Peripheral Identifier */ |
1353 | +#define AT_XDMAC_CC_PERID(i) ((0x7f & (i)) << 24) /* Channel Peripheral Identifier */ |
1354 | #define AT_XDMAC_CDS_MSP 0x2C /* Channel Data Stride Memory Set Pattern */ |
1355 | #define AT_XDMAC_CSUS 0x30 /* Channel Source Microblock Stride */ |
1356 | #define AT_XDMAC_CDUS 0x34 /* Channel Destination Microblock Stride */ |
1357 | diff --git a/drivers/dma/dmaengine.h b/drivers/dma/dmaengine.h |
1358 | index 882ff9448c3ba..6537b8ec03934 100644 |
1359 | --- a/drivers/dma/dmaengine.h |
1360 | +++ b/drivers/dma/dmaengine.h |
1361 | @@ -167,7 +167,7 @@ dmaengine_desc_get_callback_invoke(struct dma_async_tx_descriptor *tx, |
1362 | static inline bool |
1363 | dmaengine_desc_callback_valid(struct dmaengine_desc_callback *cb) |
1364 | { |
1365 | - return (cb->callback) ? true : false; |
1366 | + return cb->callback || cb->callback_result; |
1367 | } |
1368 | |
1369 | #endif |
1370 | diff --git a/drivers/edac/sb_edac.c b/drivers/edac/sb_edac.c |
1371 | index e9391950a8437..94194ead73636 100644 |
1372 | --- a/drivers/edac/sb_edac.c |
1373 | +++ b/drivers/edac/sb_edac.c |
1374 | @@ -1009,7 +1009,7 @@ static u64 haswell_get_tohm(struct sbridge_pvt *pvt) |
1375 | pci_read_config_dword(pvt->info.pci_vtd, HASWELL_TOHM_1, ®); |
1376 | rc = ((reg << 6) | rc) << 26; |
1377 | |
1378 | - return rc | 0x1ffffff; |
1379 | + return rc | 0x3ffffff; |
1380 | } |
1381 | |
1382 | static u64 knl_get_tolm(struct sbridge_pvt *pvt) |
1383 | diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c |
1384 | index 694f631d9c90d..eb79d0d3d34f1 100644 |
1385 | --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c |
1386 | +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c |
1387 | @@ -844,6 +844,7 @@ static int amdgpu_connector_vga_get_modes(struct drm_connector *connector) |
1388 | |
1389 | amdgpu_connector_get_edid(connector); |
1390 | ret = amdgpu_connector_ddc_get_modes(connector); |
1391 | + amdgpu_get_native_mode(connector); |
1392 | |
1393 | return ret; |
1394 | } |
1395 | diff --git a/drivers/gpu/drm/drm_plane_helper.c b/drivers/gpu/drm/drm_plane_helper.c |
1396 | index 7899fc1dcdb08..c4fd742ff917a 100644 |
1397 | --- a/drivers/gpu/drm/drm_plane_helper.c |
1398 | +++ b/drivers/gpu/drm/drm_plane_helper.c |
1399 | @@ -246,7 +246,6 @@ int drm_plane_helper_check_update(struct drm_plane *plane, |
1400 | .crtc_w = drm_rect_width(dst), |
1401 | .crtc_h = drm_rect_height(dst), |
1402 | .rotation = rotation, |
1403 | - .visible = *visible, |
1404 | }; |
1405 | int ret; |
1406 | |
1407 | diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c |
1408 | index 983ce7965c7ff..dfce39f02f8d4 100644 |
1409 | --- a/drivers/gpu/drm/msm/msm_gem.c |
1410 | +++ b/drivers/gpu/drm/msm/msm_gem.c |
1411 | @@ -871,7 +871,7 @@ struct drm_gem_object *msm_gem_new(struct drm_device *dev, |
1412 | |
1413 | ret = msm_gem_new_impl(dev, size, flags, NULL, &obj); |
1414 | if (ret) |
1415 | - goto fail; |
1416 | + return ERR_PTR(ret); |
1417 | |
1418 | if (use_pages(obj)) { |
1419 | ret = drm_gem_object_init(dev, obj, size); |
1420 | @@ -910,7 +910,7 @@ struct drm_gem_object *msm_gem_import(struct drm_device *dev, |
1421 | mutex_unlock(&dev->struct_mutex); |
1422 | |
1423 | if (ret) |
1424 | - goto fail; |
1425 | + return ERR_PTR(ret); |
1426 | |
1427 | drm_gem_private_object_init(dev, obj, size); |
1428 | |
1429 | diff --git a/drivers/gpu/drm/udl/udl_connector.c b/drivers/gpu/drm/udl/udl_connector.c |
1430 | index d2f57c52f7db2..c001ed8e7dd90 100644 |
1431 | --- a/drivers/gpu/drm/udl/udl_connector.c |
1432 | +++ b/drivers/gpu/drm/udl/udl_connector.c |
1433 | @@ -37,7 +37,7 @@ static u8 *udl_get_edid(struct udl_device *udl) |
1434 | ret = usb_control_msg(udl->udev, |
1435 | usb_rcvctrlpipe(udl->udev, 0), (0x02), |
1436 | (0x80 | (0x02 << 5)), i << 8, 0xA1, rbuf, 2, |
1437 | - HZ); |
1438 | + 1000); |
1439 | if (ret < 1) { |
1440 | DRM_ERROR("Read EDID byte %d failed err %x\n", i, ret); |
1441 | goto error; |
1442 | diff --git a/drivers/hv/hyperv_vmbus.h b/drivers/hv/hyperv_vmbus.h |
1443 | index 8d7f865c1133f..9d3605df1f489 100644 |
1444 | --- a/drivers/hv/hyperv_vmbus.h |
1445 | +++ b/drivers/hv/hyperv_vmbus.h |
1446 | @@ -26,6 +26,7 @@ |
1447 | #define _HYPERV_VMBUS_H |
1448 | |
1449 | #include <linux/list.h> |
1450 | +#include <linux/bitops.h> |
1451 | #include <asm/sync_bitops.h> |
1452 | #include <linux/atomic.h> |
1453 | #include <linux/hyperv.h> |
1454 | diff --git a/drivers/hwmon/hwmon.c b/drivers/hwmon/hwmon.c |
1455 | index e0a1a118514f9..8b11d2fdf80ab 100644 |
1456 | --- a/drivers/hwmon/hwmon.c |
1457 | +++ b/drivers/hwmon/hwmon.c |
1458 | @@ -592,8 +592,10 @@ __hwmon_device_register(struct device *dev, const char *name, void *drvdata, |
1459 | dev_set_drvdata(hdev, drvdata); |
1460 | dev_set_name(hdev, HWMON_ID_FORMAT, id); |
1461 | err = device_register(hdev); |
1462 | - if (err) |
1463 | - goto free_hwmon; |
1464 | + if (err) { |
1465 | + put_device(hdev); |
1466 | + goto ida_remove; |
1467 | + } |
1468 | |
1469 | if (chip && chip->ops->is_visible && chip->ops->read && |
1470 | chip->info[0]->type == hwmon_chip && |
1471 | diff --git a/drivers/hwmon/pmbus/lm25066.c b/drivers/hwmon/pmbus/lm25066.c |
1472 | index a3d912cd3b8d7..5081fd7e8fddc 100644 |
1473 | --- a/drivers/hwmon/pmbus/lm25066.c |
1474 | +++ b/drivers/hwmon/pmbus/lm25066.c |
1475 | @@ -69,22 +69,27 @@ static struct __coeff lm25066_coeff[5][PSC_NUM_CLASSES + 2] = { |
1476 | [lm25056] = { |
1477 | [PSC_VOLTAGE_IN] = { |
1478 | .m = 16296, |
1479 | + .b = 1343, |
1480 | .R = -2, |
1481 | }, |
1482 | [PSC_CURRENT_IN] = { |
1483 | .m = 13797, |
1484 | + .b = -1833, |
1485 | .R = -2, |
1486 | }, |
1487 | [PSC_CURRENT_IN_L] = { |
1488 | .m = 6726, |
1489 | + .b = -537, |
1490 | .R = -2, |
1491 | }, |
1492 | [PSC_POWER] = { |
1493 | .m = 5501, |
1494 | + .b = -2908, |
1495 | .R = -3, |
1496 | }, |
1497 | [PSC_POWER_L] = { |
1498 | .m = 26882, |
1499 | + .b = -5646, |
1500 | .R = -4, |
1501 | }, |
1502 | [PSC_TEMPERATURE] = { |
1503 | @@ -96,26 +101,32 @@ static struct __coeff lm25066_coeff[5][PSC_NUM_CLASSES + 2] = { |
1504 | [lm25066] = { |
1505 | [PSC_VOLTAGE_IN] = { |
1506 | .m = 22070, |
1507 | + .b = -1800, |
1508 | .R = -2, |
1509 | }, |
1510 | [PSC_VOLTAGE_OUT] = { |
1511 | .m = 22070, |
1512 | + .b = -1800, |
1513 | .R = -2, |
1514 | }, |
1515 | [PSC_CURRENT_IN] = { |
1516 | .m = 13661, |
1517 | + .b = -5200, |
1518 | .R = -2, |
1519 | }, |
1520 | [PSC_CURRENT_IN_L] = { |
1521 | .m = 6852, |
1522 | + .b = -3100, |
1523 | .R = -2, |
1524 | }, |
1525 | [PSC_POWER] = { |
1526 | .m = 736, |
1527 | + .b = -3300, |
1528 | .R = -2, |
1529 | }, |
1530 | [PSC_POWER_L] = { |
1531 | .m = 369, |
1532 | + .b = -1900, |
1533 | .R = -2, |
1534 | }, |
1535 | [PSC_TEMPERATURE] = { |
1536 | @@ -155,26 +166,32 @@ static struct __coeff lm25066_coeff[5][PSC_NUM_CLASSES + 2] = { |
1537 | [lm5064] = { |
1538 | [PSC_VOLTAGE_IN] = { |
1539 | .m = 4611, |
1540 | + .b = -642, |
1541 | .R = -2, |
1542 | }, |
1543 | [PSC_VOLTAGE_OUT] = { |
1544 | .m = 4621, |
1545 | + .b = 423, |
1546 | .R = -2, |
1547 | }, |
1548 | [PSC_CURRENT_IN] = { |
1549 | .m = 10742, |
1550 | + .b = 1552, |
1551 | .R = -2, |
1552 | }, |
1553 | [PSC_CURRENT_IN_L] = { |
1554 | .m = 5456, |
1555 | + .b = 2118, |
1556 | .R = -2, |
1557 | }, |
1558 | [PSC_POWER] = { |
1559 | .m = 1204, |
1560 | + .b = 8524, |
1561 | .R = -3, |
1562 | }, |
1563 | [PSC_POWER_L] = { |
1564 | .m = 612, |
1565 | + .b = 11202, |
1566 | .R = -3, |
1567 | }, |
1568 | [PSC_TEMPERATURE] = { |
1569 | @@ -184,26 +201,32 @@ static struct __coeff lm25066_coeff[5][PSC_NUM_CLASSES + 2] = { |
1570 | [lm5066] = { |
1571 | [PSC_VOLTAGE_IN] = { |
1572 | .m = 4587, |
1573 | + .b = -1200, |
1574 | .R = -2, |
1575 | }, |
1576 | [PSC_VOLTAGE_OUT] = { |
1577 | .m = 4587, |
1578 | + .b = -2400, |
1579 | .R = -2, |
1580 | }, |
1581 | [PSC_CURRENT_IN] = { |
1582 | .m = 10753, |
1583 | + .b = -1200, |
1584 | .R = -2, |
1585 | }, |
1586 | [PSC_CURRENT_IN_L] = { |
1587 | .m = 5405, |
1588 | + .b = -600, |
1589 | .R = -2, |
1590 | }, |
1591 | [PSC_POWER] = { |
1592 | .m = 1204, |
1593 | + .b = -6000, |
1594 | .R = -3, |
1595 | }, |
1596 | [PSC_POWER_L] = { |
1597 | .m = 605, |
1598 | + .b = -8000, |
1599 | .R = -3, |
1600 | }, |
1601 | [PSC_TEMPERATURE] = { |
1602 | diff --git a/drivers/i2c/busses/i2c-xlr.c b/drivers/i2c/busses/i2c-xlr.c |
1603 | index ad17d88d85736..63f47e07345c0 100644 |
1604 | --- a/drivers/i2c/busses/i2c-xlr.c |
1605 | +++ b/drivers/i2c/busses/i2c-xlr.c |
1606 | @@ -434,11 +434,15 @@ static int xlr_i2c_probe(struct platform_device *pdev) |
1607 | i2c_set_adapdata(&priv->adap, priv); |
1608 | ret = i2c_add_numbered_adapter(&priv->adap); |
1609 | if (ret < 0) |
1610 | - return ret; |
1611 | + goto err_unprepare_clk; |
1612 | |
1613 | platform_set_drvdata(pdev, priv); |
1614 | dev_info(&priv->adap.dev, "Added I2C Bus.\n"); |
1615 | return 0; |
1616 | + |
1617 | +err_unprepare_clk: |
1618 | + clk_unprepare(clk); |
1619 | + return ret; |
1620 | } |
1621 | |
1622 | static int xlr_i2c_remove(struct platform_device *pdev) |
1623 | diff --git a/drivers/iio/dac/ad5446.c b/drivers/iio/dac/ad5446.c |
1624 | index b555552a0d803..d3a3d62869d83 100644 |
1625 | --- a/drivers/iio/dac/ad5446.c |
1626 | +++ b/drivers/iio/dac/ad5446.c |
1627 | @@ -510,8 +510,15 @@ static int ad5622_write(struct ad5446_state *st, unsigned val) |
1628 | { |
1629 | struct i2c_client *client = to_i2c_client(st->dev); |
1630 | __be16 data = cpu_to_be16(val); |
1631 | + int ret; |
1632 | + |
1633 | + ret = i2c_master_send(client, (char *)&data, sizeof(data)); |
1634 | + if (ret < 0) |
1635 | + return ret; |
1636 | + if (ret != sizeof(data)) |
1637 | + return -EIO; |
1638 | |
1639 | - return i2c_master_send(client, (char *)&data, sizeof(data)); |
1640 | + return 0; |
1641 | } |
1642 | |
1643 | /** |
1644 | diff --git a/drivers/infiniband/hw/mlx4/qp.c b/drivers/infiniband/hw/mlx4/qp.c |
1645 | index 7284a9176844e..718d817265795 100644 |
1646 | --- a/drivers/infiniband/hw/mlx4/qp.c |
1647 | +++ b/drivers/infiniband/hw/mlx4/qp.c |
1648 | @@ -773,8 +773,10 @@ static int create_qp_common(struct mlx4_ib_dev *dev, struct ib_pd *pd, |
1649 | if (dev->steering_support == |
1650 | MLX4_STEERING_MODE_DEVICE_MANAGED) |
1651 | qp->flags |= MLX4_IB_QP_NETIF; |
1652 | - else |
1653 | + else { |
1654 | + err = -EINVAL; |
1655 | goto err; |
1656 | + } |
1657 | } |
1658 | |
1659 | memcpy(&backup_cap, &init_attr->cap, sizeof(backup_cap)); |
1660 | diff --git a/drivers/infiniband/hw/qedr/verbs.c b/drivers/infiniband/hw/qedr/verbs.c |
1661 | index 7603a1641c7d8..38c651f1a606b 100644 |
1662 | --- a/drivers/infiniband/hw/qedr/verbs.c |
1663 | +++ b/drivers/infiniband/hw/qedr/verbs.c |
1664 | @@ -2015,15 +2015,18 @@ int qedr_query_qp(struct ib_qp *ibqp, |
1665 | int rc = 0; |
1666 | |
1667 | memset(¶ms, 0, sizeof(params)); |
1668 | - |
1669 | - rc = dev->ops->rdma_query_qp(dev->rdma_ctx, qp->qed_qp, ¶ms); |
1670 | - if (rc) |
1671 | - goto err; |
1672 | - |
1673 | memset(qp_attr, 0, sizeof(*qp_attr)); |
1674 | memset(qp_init_attr, 0, sizeof(*qp_init_attr)); |
1675 | |
1676 | - qp_attr->qp_state = qedr_get_ibqp_state(params.state); |
1677 | + if (qp->qp_type != IB_QPT_GSI) { |
1678 | + rc = dev->ops->rdma_query_qp(dev->rdma_ctx, qp->qed_qp, ¶ms); |
1679 | + if (rc) |
1680 | + goto err; |
1681 | + qp_attr->qp_state = qedr_get_ibqp_state(params.state); |
1682 | + } else { |
1683 | + qp_attr->qp_state = qedr_get_ibqp_state(QED_ROCE_QP_STATE_RTS); |
1684 | + } |
1685 | + |
1686 | qp_attr->cur_qp_state = qedr_get_ibqp_state(params.state); |
1687 | qp_attr->path_mtu = iboe_get_mtu(params.mtu); |
1688 | qp_attr->path_mig_state = IB_MIG_MIGRATED; |
1689 | diff --git a/drivers/infiniband/sw/rxe/rxe_param.h b/drivers/infiniband/sw/rxe/rxe_param.h |
1690 | index 13ed2cc6eaa2a..9f7817e12775a 100644 |
1691 | --- a/drivers/infiniband/sw/rxe/rxe_param.h |
1692 | +++ b/drivers/infiniband/sw/rxe/rxe_param.h |
1693 | @@ -144,7 +144,7 @@ enum rxe_port_param { |
1694 | RXE_PORT_MAX_MTU = IB_MTU_4096, |
1695 | RXE_PORT_ACTIVE_MTU = IB_MTU_256, |
1696 | RXE_PORT_GID_TBL_LEN = 1024, |
1697 | - RXE_PORT_PORT_CAP_FLAGS = RDMA_CORE_CAP_PROT_ROCE_UDP_ENCAP, |
1698 | + RXE_PORT_PORT_CAP_FLAGS = IB_PORT_CM_SUP, |
1699 | RXE_PORT_MAX_MSG_SZ = 0x800000, |
1700 | RXE_PORT_BAD_PKEY_CNTR = 0, |
1701 | RXE_PORT_QKEY_VIOL_CNTR = 0, |
1702 | diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c |
1703 | index 15be3ee6cc501..4aba40c881a73 100644 |
1704 | --- a/drivers/input/mouse/elantech.c |
1705 | +++ b/drivers/input/mouse/elantech.c |
1706 | @@ -431,6 +431,19 @@ static void elantech_report_trackpoint(struct psmouse *psmouse, |
1707 | case 0x16008020U: |
1708 | case 0x26800010U: |
1709 | case 0x36808000U: |
1710 | + |
1711 | + /* |
1712 | + * This firmware misreport coordinates for trackpoint |
1713 | + * occasionally. Discard packets outside of [-127, 127] range |
1714 | + * to prevent cursor jumps. |
1715 | + */ |
1716 | + if (packet[4] == 0x80 || packet[5] == 0x80 || |
1717 | + packet[1] >> 7 == packet[4] >> 7 || |
1718 | + packet[2] >> 7 == packet[5] >> 7) { |
1719 | + elantech_debug("discarding packet [%6ph]\n", packet); |
1720 | + break; |
1721 | + |
1722 | + } |
1723 | x = packet[4] - (int)((packet[1]^0x80) << 1); |
1724 | y = (int)((packet[2]^0x80) << 1) - packet[5]; |
1725 | |
1726 | diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h |
1727 | index 3049bccf24227..323b86b38b3a3 100644 |
1728 | --- a/drivers/input/serio/i8042-x86ia64io.h |
1729 | +++ b/drivers/input/serio/i8042-x86ia64io.h |
1730 | @@ -276,6 +276,13 @@ static const struct dmi_system_id __initconst i8042_dmi_nomux_table[] = { |
1731 | DMI_MATCH(DMI_PRODUCT_NAME, "LifeBook S6230"), |
1732 | }, |
1733 | }, |
1734 | + { |
1735 | + /* Fujitsu Lifebook T725 laptop */ |
1736 | + .matches = { |
1737 | + DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"), |
1738 | + DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK T725"), |
1739 | + }, |
1740 | + }, |
1741 | { |
1742 | /* Fujitsu Lifebook U745 */ |
1743 | .matches = { |
1744 | @@ -916,6 +923,13 @@ static const struct dmi_system_id __initconst i8042_dmi_notimeout_table[] = { |
1745 | DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK AH544"), |
1746 | }, |
1747 | }, |
1748 | + { |
1749 | + /* Fujitsu Lifebook T725 laptop */ |
1750 | + .matches = { |
1751 | + DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"), |
1752 | + DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK T725"), |
1753 | + }, |
1754 | + }, |
1755 | { |
1756 | /* Fujitsu U574 laptop */ |
1757 | /* https://bugzilla.kernel.org/show_bug.cgi?id=69731 */ |
1758 | diff --git a/drivers/irqchip/irq-bcm6345-l1.c b/drivers/irqchip/irq-bcm6345-l1.c |
1759 | index daa4ae89e466e..7ed976d436b25 100644 |
1760 | --- a/drivers/irqchip/irq-bcm6345-l1.c |
1761 | +++ b/drivers/irqchip/irq-bcm6345-l1.c |
1762 | @@ -143,7 +143,7 @@ static void bcm6345_l1_irq_handle(struct irq_desc *desc) |
1763 | for_each_set_bit(hwirq, &pending, IRQS_PER_WORD) { |
1764 | irq = irq_linear_revmap(intc->domain, base + hwirq); |
1765 | if (irq) |
1766 | - do_IRQ(irq); |
1767 | + generic_handle_irq(irq); |
1768 | else |
1769 | spurious_interrupt(); |
1770 | } |
1771 | diff --git a/drivers/irqchip/irq-s3c24xx.c b/drivers/irqchip/irq-s3c24xx.c |
1772 | index c25ce5af091ad..e92ab62cc87d9 100644 |
1773 | --- a/drivers/irqchip/irq-s3c24xx.c |
1774 | +++ b/drivers/irqchip/irq-s3c24xx.c |
1775 | @@ -368,11 +368,25 @@ static inline int s3c24xx_handle_intc(struct s3c_irq_intc *intc, |
1776 | asmlinkage void __exception_irq_entry s3c24xx_handle_irq(struct pt_regs *regs) |
1777 | { |
1778 | do { |
1779 | - if (likely(s3c_intc[0])) |
1780 | - if (s3c24xx_handle_intc(s3c_intc[0], regs, 0)) |
1781 | - continue; |
1782 | + /* |
1783 | + * For platform based machines, neither ERR nor NULL can happen here. |
1784 | + * The s3c24xx_handle_irq() will be set as IRQ handler iff this succeeds: |
1785 | + * |
1786 | + * s3c_intc[0] = s3c24xx_init_intc() |
1787 | + * |
1788 | + * If this fails, the next calls to s3c24xx_init_intc() won't be executed. |
1789 | + * |
1790 | + * For DT machine, s3c_init_intc_of() could set the IRQ handler without |
1791 | + * setting s3c_intc[0] only if it was called with num_ctrl=0. There is no |
1792 | + * such code path, so again the s3c_intc[0] will have a valid pointer if |
1793 | + * set_handle_irq() is called. |
1794 | + * |
1795 | + * Therefore in s3c24xx_handle_irq(), the s3c_intc[0] is always something. |
1796 | + */ |
1797 | + if (s3c24xx_handle_intc(s3c_intc[0], regs, 0)) |
1798 | + continue; |
1799 | |
1800 | - if (s3c_intc[2]) |
1801 | + if (!IS_ERR_OR_NULL(s3c_intc[2])) |
1802 | if (s3c24xx_handle_intc(s3c_intc[2], regs, 64)) |
1803 | continue; |
1804 | |
1805 | diff --git a/drivers/media/i2c/mt9p031.c b/drivers/media/i2c/mt9p031.c |
1806 | index 237737fec09c1..e6159faff45af 100644 |
1807 | --- a/drivers/media/i2c/mt9p031.c |
1808 | +++ b/drivers/media/i2c/mt9p031.c |
1809 | @@ -81,7 +81,9 @@ |
1810 | #define MT9P031_PIXEL_CLOCK_INVERT (1 << 15) |
1811 | #define MT9P031_PIXEL_CLOCK_SHIFT(n) ((n) << 8) |
1812 | #define MT9P031_PIXEL_CLOCK_DIVIDE(n) ((n) << 0) |
1813 | -#define MT9P031_FRAME_RESTART 0x0b |
1814 | +#define MT9P031_RESTART 0x0b |
1815 | +#define MT9P031_FRAME_PAUSE_RESTART (1 << 1) |
1816 | +#define MT9P031_FRAME_RESTART (1 << 0) |
1817 | #define MT9P031_SHUTTER_DELAY 0x0c |
1818 | #define MT9P031_RST 0x0d |
1819 | #define MT9P031_RST_ENABLE 1 |
1820 | @@ -448,9 +450,23 @@ static int mt9p031_set_params(struct mt9p031 *mt9p031) |
1821 | static int mt9p031_s_stream(struct v4l2_subdev *subdev, int enable) |
1822 | { |
1823 | struct mt9p031 *mt9p031 = to_mt9p031(subdev); |
1824 | + struct i2c_client *client = v4l2_get_subdevdata(subdev); |
1825 | + int val; |
1826 | int ret; |
1827 | |
1828 | if (!enable) { |
1829 | + /* enable pause restart */ |
1830 | + val = MT9P031_FRAME_PAUSE_RESTART; |
1831 | + ret = mt9p031_write(client, MT9P031_RESTART, val); |
1832 | + if (ret < 0) |
1833 | + return ret; |
1834 | + |
1835 | + /* enable restart + keep pause restart set */ |
1836 | + val |= MT9P031_FRAME_RESTART; |
1837 | + ret = mt9p031_write(client, MT9P031_RESTART, val); |
1838 | + if (ret < 0) |
1839 | + return ret; |
1840 | + |
1841 | /* Stop sensor readout */ |
1842 | ret = mt9p031_set_output_control(mt9p031, |
1843 | MT9P031_OUTPUT_CONTROL_CEN, 0); |
1844 | @@ -470,6 +486,16 @@ static int mt9p031_s_stream(struct v4l2_subdev *subdev, int enable) |
1845 | if (ret < 0) |
1846 | return ret; |
1847 | |
1848 | + /* |
1849 | + * - clear pause restart |
1850 | + * - don't clear restart as clearing restart manually can cause |
1851 | + * undefined behavior |
1852 | + */ |
1853 | + val = MT9P031_FRAME_RESTART; |
1854 | + ret = mt9p031_write(client, MT9P031_RESTART, val); |
1855 | + if (ret < 0) |
1856 | + return ret; |
1857 | + |
1858 | return mt9p031_pll_enable(mt9p031); |
1859 | } |
1860 | |
1861 | diff --git a/drivers/media/pci/netup_unidvb/netup_unidvb_core.c b/drivers/media/pci/netup_unidvb/netup_unidvb_core.c |
1862 | index b078ac2a682cf..48e1f4a128019 100644 |
1863 | --- a/drivers/media/pci/netup_unidvb/netup_unidvb_core.c |
1864 | +++ b/drivers/media/pci/netup_unidvb/netup_unidvb_core.c |
1865 | @@ -266,19 +266,24 @@ static irqreturn_t netup_unidvb_isr(int irq, void *dev_id) |
1866 | if ((reg40 & AVL_IRQ_ASSERTED) != 0) { |
1867 | /* IRQ is being signaled */ |
1868 | reg_isr = readw(ndev->bmmio0 + REG_ISR); |
1869 | - if (reg_isr & NETUP_UNIDVB_IRQ_I2C0) { |
1870 | - iret = netup_i2c_interrupt(&ndev->i2c[0]); |
1871 | - } else if (reg_isr & NETUP_UNIDVB_IRQ_I2C1) { |
1872 | - iret = netup_i2c_interrupt(&ndev->i2c[1]); |
1873 | - } else if (reg_isr & NETUP_UNIDVB_IRQ_SPI) { |
1874 | + if (reg_isr & NETUP_UNIDVB_IRQ_SPI) |
1875 | iret = netup_spi_interrupt(ndev->spi); |
1876 | - } else if (reg_isr & NETUP_UNIDVB_IRQ_DMA1) { |
1877 | - iret = netup_dma_interrupt(&ndev->dma[0]); |
1878 | - } else if (reg_isr & NETUP_UNIDVB_IRQ_DMA2) { |
1879 | - iret = netup_dma_interrupt(&ndev->dma[1]); |
1880 | - } else if (reg_isr & NETUP_UNIDVB_IRQ_CI) { |
1881 | - iret = netup_ci_interrupt(ndev); |
1882 | + else if (!ndev->old_fw) { |
1883 | + if (reg_isr & NETUP_UNIDVB_IRQ_I2C0) { |
1884 | + iret = netup_i2c_interrupt(&ndev->i2c[0]); |
1885 | + } else if (reg_isr & NETUP_UNIDVB_IRQ_I2C1) { |
1886 | + iret = netup_i2c_interrupt(&ndev->i2c[1]); |
1887 | + } else if (reg_isr & NETUP_UNIDVB_IRQ_DMA1) { |
1888 | + iret = netup_dma_interrupt(&ndev->dma[0]); |
1889 | + } else if (reg_isr & NETUP_UNIDVB_IRQ_DMA2) { |
1890 | + iret = netup_dma_interrupt(&ndev->dma[1]); |
1891 | + } else if (reg_isr & NETUP_UNIDVB_IRQ_CI) { |
1892 | + iret = netup_ci_interrupt(ndev); |
1893 | + } else { |
1894 | + goto err; |
1895 | + } |
1896 | } else { |
1897 | +err: |
1898 | dev_err(&pci_dev->dev, |
1899 | "%s(): unknown interrupt 0x%x\n", |
1900 | __func__, reg_isr); |
1901 | diff --git a/drivers/media/platform/mtk-vpu/mtk_vpu.c b/drivers/media/platform/mtk-vpu/mtk_vpu.c |
1902 | index c9bf58c978780..9c332ce8cdfec 100644 |
1903 | --- a/drivers/media/platform/mtk-vpu/mtk_vpu.c |
1904 | +++ b/drivers/media/platform/mtk-vpu/mtk_vpu.c |
1905 | @@ -801,7 +801,8 @@ static int mtk_vpu_probe(struct platform_device *pdev) |
1906 | vpu->wdt.wq = create_singlethread_workqueue("vpu_wdt"); |
1907 | if (!vpu->wdt.wq) { |
1908 | dev_err(dev, "initialize wdt workqueue failed\n"); |
1909 | - return -ENOMEM; |
1910 | + ret = -ENOMEM; |
1911 | + goto clk_unprepare; |
1912 | } |
1913 | INIT_WORK(&vpu->wdt.ws, vpu_wdt_reset_func); |
1914 | mutex_init(&vpu->vpu_mutex); |
1915 | @@ -900,6 +901,8 @@ disable_vpu_clk: |
1916 | vpu_clock_disable(vpu); |
1917 | workqueue_destroy: |
1918 | destroy_workqueue(vpu->wdt.wq); |
1919 | +clk_unprepare: |
1920 | + clk_unprepare(vpu->clk); |
1921 | |
1922 | return ret; |
1923 | } |
1924 | diff --git a/drivers/media/platform/s5p-mfc/s5p_mfc.c b/drivers/media/platform/s5p-mfc/s5p_mfc.c |
1925 | index 8051c13456922..0ff972b8d9671 100644 |
1926 | --- a/drivers/media/platform/s5p-mfc/s5p_mfc.c |
1927 | +++ b/drivers/media/platform/s5p-mfc/s5p_mfc.c |
1928 | @@ -1160,7 +1160,7 @@ static int s5p_mfc_probe(struct platform_device *pdev) |
1929 | spin_lock_init(&dev->condlock); |
1930 | dev->plat_dev = pdev; |
1931 | if (!dev->plat_dev) { |
1932 | - dev_err(&pdev->dev, "No platform data specified\n"); |
1933 | + mfc_err("No platform data specified\n"); |
1934 | return -ENODEV; |
1935 | } |
1936 | |
1937 | diff --git a/drivers/media/radio/si470x/radio-si470x-i2c.c b/drivers/media/radio/si470x/radio-si470x-i2c.c |
1938 | index 8f3086773db46..6162aa5758428 100644 |
1939 | --- a/drivers/media/radio/si470x/radio-si470x-i2c.c |
1940 | +++ b/drivers/media/radio/si470x/radio-si470x-i2c.c |
1941 | @@ -24,7 +24,7 @@ |
1942 | |
1943 | /* driver definitions */ |
1944 | #define DRIVER_AUTHOR "Joonyoung Shim <jy0922.shim@samsung.com>"; |
1945 | -#define DRIVER_CARD "Silicon Labs Si470x FM Radio Receiver" |
1946 | +#define DRIVER_CARD "Silicon Labs Si470x FM Radio" |
1947 | #define DRIVER_DESC "I2C radio driver for Si470x FM Radio Receivers" |
1948 | #define DRIVER_VERSION "1.0.2" |
1949 | |
1950 | diff --git a/drivers/media/radio/si470x/radio-si470x-usb.c b/drivers/media/radio/si470x/radio-si470x-usb.c |
1951 | index 1d045a8c29e21..a8a0ff9a1f838 100644 |
1952 | --- a/drivers/media/radio/si470x/radio-si470x-usb.c |
1953 | +++ b/drivers/media/radio/si470x/radio-si470x-usb.c |
1954 | @@ -29,7 +29,7 @@ |
1955 | |
1956 | /* driver definitions */ |
1957 | #define DRIVER_AUTHOR "Tobias Lorenz <tobias.lorenz@gmx.net>" |
1958 | -#define DRIVER_CARD "Silicon Labs Si470x FM Radio Receiver" |
1959 | +#define DRIVER_CARD "Silicon Labs Si470x FM Radio" |
1960 | #define DRIVER_DESC "USB radio driver for Si470x FM Radio Receivers" |
1961 | #define DRIVER_VERSION "1.0.10" |
1962 | |
1963 | diff --git a/drivers/media/rc/ite-cir.c b/drivers/media/rc/ite-cir.c |
1964 | index 7d3e50d94d86a..e8bc02ce9b2ff 100644 |
1965 | --- a/drivers/media/rc/ite-cir.c |
1966 | +++ b/drivers/media/rc/ite-cir.c |
1967 | @@ -299,7 +299,7 @@ static irqreturn_t ite_cir_isr(int irq, void *data) |
1968 | } |
1969 | |
1970 | /* check for the receive interrupt */ |
1971 | - if (iflags & ITE_IRQ_RX_FIFO) { |
1972 | + if (iflags & (ITE_IRQ_RX_FIFO | ITE_IRQ_RX_FIFO_OVERRUN)) { |
1973 | /* read the FIFO bytes */ |
1974 | rx_bytes = |
1975 | dev->params.get_rx_bytes(dev, rx_buf, |
1976 | diff --git a/drivers/media/rc/mceusb.c b/drivers/media/rc/mceusb.c |
1977 | index d9f88a4a96bd1..b78d70685b1c3 100644 |
1978 | --- a/drivers/media/rc/mceusb.c |
1979 | +++ b/drivers/media/rc/mceusb.c |
1980 | @@ -1090,6 +1090,7 @@ static void mceusb_dev_recv(struct urb *urb) |
1981 | case -ECONNRESET: |
1982 | case -ENOENT: |
1983 | case -EILSEQ: |
1984 | + case -EPROTO: |
1985 | case -ESHUTDOWN: |
1986 | usb_unlink_urb(urb); |
1987 | return; |
1988 | diff --git a/drivers/media/usb/dvb-usb/az6027.c b/drivers/media/usb/dvb-usb/az6027.c |
1989 | index 2e711362847e4..382c8075ef524 100644 |
1990 | --- a/drivers/media/usb/dvb-usb/az6027.c |
1991 | +++ b/drivers/media/usb/dvb-usb/az6027.c |
1992 | @@ -394,6 +394,7 @@ static struct rc_map_table rc_map_az6027_table[] = { |
1993 | /* remote control stuff (does not work with my box) */ |
1994 | static int az6027_rc_query(struct dvb_usb_device *d, u32 *event, int *state) |
1995 | { |
1996 | + *state = REMOTE_NO_KEY_PRESSED; |
1997 | return 0; |
1998 | } |
1999 | |
2000 | diff --git a/drivers/media/usb/dvb-usb/dibusb-common.c b/drivers/media/usb/dvb-usb/dibusb-common.c |
2001 | index bcacb0f220282..3e45642ae186b 100644 |
2002 | --- a/drivers/media/usb/dvb-usb/dibusb-common.c |
2003 | +++ b/drivers/media/usb/dvb-usb/dibusb-common.c |
2004 | @@ -226,7 +226,7 @@ int dibusb_read_eeprom_byte(struct dvb_usb_device *d, u8 offs, u8 *val) |
2005 | u8 *buf; |
2006 | int rc; |
2007 | |
2008 | - buf = kmalloc(2, GFP_KERNEL); |
2009 | + buf = kzalloc(2, GFP_KERNEL); |
2010 | if (!buf) |
2011 | return -ENOMEM; |
2012 | |
2013 | diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v4l2.c |
2014 | index 4a270f88aa18c..2b1e06e825f0d 100644 |
2015 | --- a/drivers/media/usb/uvc/uvc_v4l2.c |
2016 | +++ b/drivers/media/usb/uvc/uvc_v4l2.c |
2017 | @@ -451,10 +451,13 @@ static int uvc_v4l2_set_streamparm(struct uvc_streaming *stream, |
2018 | uvc_simplify_fraction(&timeperframe.numerator, |
2019 | &timeperframe.denominator, 8, 333); |
2020 | |
2021 | - if (parm->type == V4L2_BUF_TYPE_VIDEO_CAPTURE) |
2022 | + if (parm->type == V4L2_BUF_TYPE_VIDEO_CAPTURE) { |
2023 | parm->parm.capture.timeperframe = timeperframe; |
2024 | - else |
2025 | + parm->parm.capture.capability = V4L2_CAP_TIMEPERFRAME; |
2026 | + } else { |
2027 | parm->parm.output.timeperframe = timeperframe; |
2028 | + parm->parm.output.capability = V4L2_CAP_TIMEPERFRAME; |
2029 | + } |
2030 | |
2031 | return 0; |
2032 | } |
2033 | diff --git a/drivers/memory/fsl_ifc.c b/drivers/memory/fsl_ifc.c |
2034 | index 38b945eb410f3..9c0e70b047c39 100644 |
2035 | --- a/drivers/memory/fsl_ifc.c |
2036 | +++ b/drivers/memory/fsl_ifc.c |
2037 | @@ -276,7 +276,7 @@ static int fsl_ifc_ctrl_probe(struct platform_device *dev) |
2038 | |
2039 | ret = fsl_ifc_ctrl_init(fsl_ifc_ctrl_dev); |
2040 | if (ret < 0) |
2041 | - goto err; |
2042 | + goto err_unmap_nandirq; |
2043 | |
2044 | init_waitqueue_head(&fsl_ifc_ctrl_dev->nand_wait); |
2045 | |
2046 | @@ -285,7 +285,7 @@ static int fsl_ifc_ctrl_probe(struct platform_device *dev) |
2047 | if (ret != 0) { |
2048 | dev_err(&dev->dev, "failed to install irq (%d)\n", |
2049 | fsl_ifc_ctrl_dev->irq); |
2050 | - goto err_irq; |
2051 | + goto err_unmap_nandirq; |
2052 | } |
2053 | |
2054 | if (fsl_ifc_ctrl_dev->nand_irq) { |
2055 | @@ -294,17 +294,16 @@ static int fsl_ifc_ctrl_probe(struct platform_device *dev) |
2056 | if (ret != 0) { |
2057 | dev_err(&dev->dev, "failed to install irq (%d)\n", |
2058 | fsl_ifc_ctrl_dev->nand_irq); |
2059 | - goto err_nandirq; |
2060 | + goto err_free_irq; |
2061 | } |
2062 | } |
2063 | |
2064 | return 0; |
2065 | |
2066 | -err_nandirq: |
2067 | - free_irq(fsl_ifc_ctrl_dev->nand_irq, fsl_ifc_ctrl_dev); |
2068 | - irq_dispose_mapping(fsl_ifc_ctrl_dev->nand_irq); |
2069 | -err_irq: |
2070 | +err_free_irq: |
2071 | free_irq(fsl_ifc_ctrl_dev->irq, fsl_ifc_ctrl_dev); |
2072 | +err_unmap_nandirq: |
2073 | + irq_dispose_mapping(fsl_ifc_ctrl_dev->nand_irq); |
2074 | irq_dispose_mapping(fsl_ifc_ctrl_dev->irq); |
2075 | err: |
2076 | iounmap(fsl_ifc_ctrl_dev->gregs); |
2077 | diff --git a/drivers/memstick/core/ms_block.c b/drivers/memstick/core/ms_block.c |
2078 | index aacf584f2a42e..45136b700d2c4 100644 |
2079 | --- a/drivers/memstick/core/ms_block.c |
2080 | +++ b/drivers/memstick/core/ms_block.c |
2081 | @@ -1730,7 +1730,7 @@ static int msb_init_card(struct memstick_dev *card) |
2082 | msb->pages_in_block = boot_block->attr.block_size * 2; |
2083 | msb->block_size = msb->page_size * msb->pages_in_block; |
2084 | |
2085 | - if (msb->page_size > PAGE_SIZE) { |
2086 | + if ((size_t)msb->page_size > PAGE_SIZE) { |
2087 | /* this isn't supported by linux at all, anyway*/ |
2088 | dbg("device page %d size isn't supported", msb->page_size); |
2089 | return -EINVAL; |
2090 | diff --git a/drivers/memstick/host/jmb38x_ms.c b/drivers/memstick/host/jmb38x_ms.c |
2091 | index 08fa6400d2558..ba6cd576e9979 100644 |
2092 | --- a/drivers/memstick/host/jmb38x_ms.c |
2093 | +++ b/drivers/memstick/host/jmb38x_ms.c |
2094 | @@ -905,7 +905,7 @@ static struct memstick_host *jmb38x_ms_alloc_host(struct jmb38x_ms *jm, int cnt) |
2095 | |
2096 | iounmap(host->addr); |
2097 | err_out_free: |
2098 | - kfree(msh); |
2099 | + memstick_free_host(msh); |
2100 | return NULL; |
2101 | } |
2102 | |
2103 | diff --git a/drivers/memstick/host/r592.c b/drivers/memstick/host/r592.c |
2104 | index 2539984c1db1c..256634ec58b63 100644 |
2105 | --- a/drivers/memstick/host/r592.c |
2106 | +++ b/drivers/memstick/host/r592.c |
2107 | @@ -841,15 +841,15 @@ static void r592_remove(struct pci_dev *pdev) |
2108 | } |
2109 | memstick_remove_host(dev->host); |
2110 | |
2111 | + if (dev->dummy_dma_page) |
2112 | + dma_free_coherent(&pdev->dev, PAGE_SIZE, dev->dummy_dma_page, |
2113 | + dev->dummy_dma_page_physical_address); |
2114 | + |
2115 | free_irq(dev->irq, dev); |
2116 | iounmap(dev->mmio); |
2117 | pci_release_regions(pdev); |
2118 | pci_disable_device(pdev); |
2119 | memstick_free_host(dev->host); |
2120 | - |
2121 | - if (dev->dummy_dma_page) |
2122 | - dma_free_coherent(&pdev->dev, PAGE_SIZE, dev->dummy_dma_page, |
2123 | - dev->dummy_dma_page_physical_address); |
2124 | } |
2125 | |
2126 | #ifdef CONFIG_PM_SLEEP |
2127 | diff --git a/drivers/mmc/host/Kconfig b/drivers/mmc/host/Kconfig |
2128 | index 5274f503a39ad..5c0bc817019f7 100644 |
2129 | --- a/drivers/mmc/host/Kconfig |
2130 | +++ b/drivers/mmc/host/Kconfig |
2131 | @@ -367,7 +367,7 @@ config MMC_OMAP_HS |
2132 | |
2133 | config MMC_WBSD |
2134 | tristate "Winbond W83L51xD SD/MMC Card Interface support" |
2135 | - depends on ISA_DMA_API |
2136 | + depends on ISA_DMA_API && !M68K |
2137 | help |
2138 | This selects the Winbond(R) W83L51xD Secure digital and |
2139 | Multimedia card Interface. |
2140 | diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c |
2141 | index 209bdf0317b34..1c80717af333e 100644 |
2142 | --- a/drivers/mmc/host/dw_mmc.c |
2143 | +++ b/drivers/mmc/host/dw_mmc.c |
2144 | @@ -1862,7 +1862,8 @@ static void dw_mci_tasklet_func(unsigned long priv) |
2145 | * delayed. Allowing the transfer to take place |
2146 | * avoids races and keeps things simple. |
2147 | */ |
2148 | - if (err != -ETIMEDOUT) { |
2149 | + if (err != -ETIMEDOUT && |
2150 | + host->dir_status == DW_MCI_RECV_STATUS) { |
2151 | state = STATE_SENDING_DATA; |
2152 | continue; |
2153 | } |
2154 | diff --git a/drivers/mmc/host/mxs-mmc.c b/drivers/mmc/host/mxs-mmc.c |
2155 | index 687fd68fbbcd1..77a03301b2a58 100644 |
2156 | --- a/drivers/mmc/host/mxs-mmc.c |
2157 | +++ b/drivers/mmc/host/mxs-mmc.c |
2158 | @@ -571,6 +571,11 @@ static const struct of_device_id mxs_mmc_dt_ids[] = { |
2159 | }; |
2160 | MODULE_DEVICE_TABLE(of, mxs_mmc_dt_ids); |
2161 | |
2162 | +static void mxs_mmc_regulator_disable(void *regulator) |
2163 | +{ |
2164 | + regulator_disable(regulator); |
2165 | +} |
2166 | + |
2167 | static int mxs_mmc_probe(struct platform_device *pdev) |
2168 | { |
2169 | const struct of_device_id *of_id = |
2170 | @@ -614,6 +619,11 @@ static int mxs_mmc_probe(struct platform_device *pdev) |
2171 | "Failed to enable vmmc regulator: %d\n", ret); |
2172 | goto out_mmc_free; |
2173 | } |
2174 | + |
2175 | + ret = devm_add_action_or_reset(&pdev->dev, mxs_mmc_regulator_disable, |
2176 | + reg_vmmc); |
2177 | + if (ret) |
2178 | + goto out_mmc_free; |
2179 | } |
2180 | |
2181 | ssp->clk = devm_clk_get(&pdev->dev, NULL); |
2182 | diff --git a/drivers/mtd/spi-nor/hisi-sfc.c b/drivers/mtd/spi-nor/hisi-sfc.c |
2183 | index 68be79ba571df..a0c2101f0b486 100644 |
2184 | --- a/drivers/mtd/spi-nor/hisi-sfc.c |
2185 | +++ b/drivers/mtd/spi-nor/hisi-sfc.c |
2186 | @@ -467,7 +467,6 @@ static int hisi_spi_nor_remove(struct platform_device *pdev) |
2187 | |
2188 | hisi_spi_nor_unregister_all(host); |
2189 | mutex_destroy(&host->lock); |
2190 | - clk_disable_unprepare(host->clk); |
2191 | return 0; |
2192 | } |
2193 | |
2194 | diff --git a/drivers/net/bonding/bond_sysfs_slave.c b/drivers/net/bonding/bond_sysfs_slave.c |
2195 | index 68bbac4715c35..1e1e77a40f182 100644 |
2196 | --- a/drivers/net/bonding/bond_sysfs_slave.c |
2197 | +++ b/drivers/net/bonding/bond_sysfs_slave.c |
2198 | @@ -112,15 +112,15 @@ static ssize_t ad_partner_oper_port_state_show(struct slave *slave, char *buf) |
2199 | } |
2200 | static SLAVE_ATTR_RO(ad_partner_oper_port_state); |
2201 | |
2202 | -static const struct slave_attribute *slave_attrs[] = { |
2203 | - &slave_attr_state, |
2204 | - &slave_attr_mii_status, |
2205 | - &slave_attr_link_failure_count, |
2206 | - &slave_attr_perm_hwaddr, |
2207 | - &slave_attr_queue_id, |
2208 | - &slave_attr_ad_aggregator_id, |
2209 | - &slave_attr_ad_actor_oper_port_state, |
2210 | - &slave_attr_ad_partner_oper_port_state, |
2211 | +static const struct attribute *slave_attrs[] = { |
2212 | + &slave_attr_state.attr, |
2213 | + &slave_attr_mii_status.attr, |
2214 | + &slave_attr_link_failure_count.attr, |
2215 | + &slave_attr_perm_hwaddr.attr, |
2216 | + &slave_attr_queue_id.attr, |
2217 | + &slave_attr_ad_aggregator_id.attr, |
2218 | + &slave_attr_ad_actor_oper_port_state.attr, |
2219 | + &slave_attr_ad_partner_oper_port_state.attr, |
2220 | NULL |
2221 | }; |
2222 | |
2223 | @@ -141,24 +141,10 @@ const struct sysfs_ops slave_sysfs_ops = { |
2224 | |
2225 | int bond_sysfs_slave_add(struct slave *slave) |
2226 | { |
2227 | - const struct slave_attribute **a; |
2228 | - int err; |
2229 | - |
2230 | - for (a = slave_attrs; *a; ++a) { |
2231 | - err = sysfs_create_file(&slave->kobj, &((*a)->attr)); |
2232 | - if (err) { |
2233 | - kobject_put(&slave->kobj); |
2234 | - return err; |
2235 | - } |
2236 | - } |
2237 | - |
2238 | - return 0; |
2239 | + return sysfs_create_files(&slave->kobj, slave_attrs); |
2240 | } |
2241 | |
2242 | void bond_sysfs_slave_del(struct slave *slave) |
2243 | { |
2244 | - const struct slave_attribute **a; |
2245 | - |
2246 | - for (a = slave_attrs; *a; ++a) |
2247 | - sysfs_remove_file(&slave->kobj, &((*a)->attr)); |
2248 | + sysfs_remove_files(&slave->kobj, slave_attrs); |
2249 | } |
2250 | diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_init_ops.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_init_ops.h |
2251 | index 1835d2e451c01..fc7fce642666c 100644 |
2252 | --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_init_ops.h |
2253 | +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_init_ops.h |
2254 | @@ -635,11 +635,13 @@ static int bnx2x_ilt_client_mem_op(struct bnx2x *bp, int cli_num, |
2255 | { |
2256 | int i, rc; |
2257 | struct bnx2x_ilt *ilt = BP_ILT(bp); |
2258 | - struct ilt_client_info *ilt_cli = &ilt->clients[cli_num]; |
2259 | + struct ilt_client_info *ilt_cli; |
2260 | |
2261 | if (!ilt || !ilt->lines) |
2262 | return -1; |
2263 | |
2264 | + ilt_cli = &ilt->clients[cli_num]; |
2265 | + |
2266 | if (ilt_cli->flags & (ILT_CLIENT_SKIP_INIT | ILT_CLIENT_SKIP_MEM)) |
2267 | return 0; |
2268 | |
2269 | diff --git a/drivers/net/ethernet/intel/i40evf/i40evf_main.c b/drivers/net/ethernet/intel/i40evf/i40evf_main.c |
2270 | index 537776a3e5de1..9ba36425a3ddd 100644 |
2271 | --- a/drivers/net/ethernet/intel/i40evf/i40evf_main.c |
2272 | +++ b/drivers/net/ethernet/intel/i40evf/i40evf_main.c |
2273 | @@ -1889,7 +1889,7 @@ static void i40evf_adminq_task(struct work_struct *work) |
2274 | |
2275 | /* check for error indications */ |
2276 | val = rd32(hw, hw->aq.arq.len); |
2277 | - if (val == 0xdeadbeef) /* indicates device in reset */ |
2278 | + if (val == 0xdeadbeef || val == 0xffffffff) /* device in reset */ |
2279 | goto freedom; |
2280 | oldval = val; |
2281 | if (val & I40E_VF_ARQLEN1_ARQVFE_MASK) { |
2282 | diff --git a/drivers/net/ethernet/sfc/ptp.c b/drivers/net/ethernet/sfc/ptp.c |
2283 | index 04cbff7f1b23d..a48ff6fc66b44 100644 |
2284 | --- a/drivers/net/ethernet/sfc/ptp.c |
2285 | +++ b/drivers/net/ethernet/sfc/ptp.c |
2286 | @@ -494,7 +494,7 @@ static int efx_ptp_get_attributes(struct efx_nic *efx) |
2287 | } else if (rc == -EINVAL) { |
2288 | fmt = MC_CMD_PTP_OUT_GET_ATTRIBUTES_SECONDS_NANOSECONDS; |
2289 | } else if (rc == -EPERM) { |
2290 | - netif_info(efx, probe, efx->net_dev, "no PTP support\n"); |
2291 | + pci_info(efx->pci_dev, "no PTP support\n"); |
2292 | return rc; |
2293 | } else { |
2294 | efx_mcdi_display_error(efx, MC_CMD_PTP, sizeof(inbuf), |
2295 | @@ -613,7 +613,7 @@ static int efx_ptp_disable(struct efx_nic *efx) |
2296 | * should only have been called during probe. |
2297 | */ |
2298 | if (rc == -ENOSYS || rc == -EPERM) |
2299 | - netif_info(efx, probe, efx->net_dev, "no PTP support\n"); |
2300 | + pci_info(efx->pci_dev, "no PTP support\n"); |
2301 | else if (rc) |
2302 | efx_mcdi_display_error(efx, MC_CMD_PTP, |
2303 | MC_CMD_PTP_IN_DISABLE_LEN, |
2304 | diff --git a/drivers/net/ethernet/sfc/siena_sriov.c b/drivers/net/ethernet/sfc/siena_sriov.c |
2305 | index da7b94f346049..30d58f72725df 100644 |
2306 | --- a/drivers/net/ethernet/sfc/siena_sriov.c |
2307 | +++ b/drivers/net/ethernet/sfc/siena_sriov.c |
2308 | @@ -1059,7 +1059,7 @@ void efx_siena_sriov_probe(struct efx_nic *efx) |
2309 | return; |
2310 | |
2311 | if (efx_siena_sriov_cmd(efx, false, &efx->vi_scale, &count)) { |
2312 | - netif_info(efx, probe, efx->net_dev, "no SR-IOV VFs probed\n"); |
2313 | + pci_info(efx->pci_dev, "no SR-IOV VFs probed\n"); |
2314 | return; |
2315 | } |
2316 | if (count > 0 && count > max_vfs) |
2317 | diff --git a/drivers/net/ethernet/ti/davinci_emac.c b/drivers/net/ethernet/ti/davinci_emac.c |
2318 | index 8b7596fef42a6..37162492e2635 100644 |
2319 | --- a/drivers/net/ethernet/ti/davinci_emac.c |
2320 | +++ b/drivers/net/ethernet/ti/davinci_emac.c |
2321 | @@ -426,8 +426,20 @@ static int emac_set_coalesce(struct net_device *ndev, |
2322 | u32 int_ctrl, num_interrupts = 0; |
2323 | u32 prescale = 0, addnl_dvdr = 1, coal_intvl = 0; |
2324 | |
2325 | - if (!coal->rx_coalesce_usecs) |
2326 | - return -EINVAL; |
2327 | + if (!coal->rx_coalesce_usecs) { |
2328 | + priv->coal_intvl = 0; |
2329 | + |
2330 | + switch (priv->version) { |
2331 | + case EMAC_VERSION_2: |
2332 | + emac_ctrl_write(EMAC_DM646X_CMINTCTRL, 0); |
2333 | + break; |
2334 | + default: |
2335 | + emac_ctrl_write(EMAC_CTRL_EWINTTCNT, 0); |
2336 | + break; |
2337 | + } |
2338 | + |
2339 | + return 0; |
2340 | + } |
2341 | |
2342 | coal_intvl = coal->rx_coalesce_usecs; |
2343 | |
2344 | diff --git a/drivers/net/phy/mdio-mux.c b/drivers/net/phy/mdio-mux.c |
2345 | index 599ce24c514f1..456b64248e5da 100644 |
2346 | --- a/drivers/net/phy/mdio-mux.c |
2347 | +++ b/drivers/net/phy/mdio-mux.c |
2348 | @@ -117,6 +117,7 @@ int mdio_mux_init(struct device *dev, |
2349 | } else { |
2350 | parent_bus_node = NULL; |
2351 | parent_bus = mux_bus; |
2352 | + get_device(&parent_bus->dev); |
2353 | } |
2354 | |
2355 | pb = devm_kzalloc(dev, sizeof(*pb), GFP_KERNEL); |
2356 | @@ -182,9 +183,7 @@ int mdio_mux_init(struct device *dev, |
2357 | |
2358 | devm_kfree(dev, pb); |
2359 | err_pb_kz: |
2360 | - /* balance the reference of_mdio_find_bus() took */ |
2361 | - if (!mux_bus) |
2362 | - put_device(&parent_bus->dev); |
2363 | + put_device(&parent_bus->dev); |
2364 | err_parent_bus: |
2365 | of_node_put(parent_bus_node); |
2366 | return ret_val; |
2367 | @@ -202,7 +201,6 @@ void mdio_mux_uninit(void *mux_handle) |
2368 | cb = cb->next; |
2369 | } |
2370 | |
2371 | - /* balance the reference of_mdio_find_bus() in mdio_mux_init() took */ |
2372 | put_device(&pb->mii_bus->dev); |
2373 | } |
2374 | EXPORT_SYMBOL_GPL(mdio_mux_uninit); |
2375 | diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c |
2376 | index 1704d9e2ca8d1..c21328e1e3cca 100644 |
2377 | --- a/drivers/net/phy/micrel.c |
2378 | +++ b/drivers/net/phy/micrel.c |
2379 | @@ -876,8 +876,9 @@ static struct phy_driver ksphy_driver[] = { |
2380 | .get_sset_count = kszphy_get_sset_count, |
2381 | .get_strings = kszphy_get_strings, |
2382 | .get_stats = kszphy_get_stats, |
2383 | - .suspend = genphy_suspend, |
2384 | - .resume = genphy_resume, |
2385 | + /* No suspend/resume callbacks because of errata DS80000700A, |
2386 | + * receiver error following software power down. |
2387 | + */ |
2388 | }, { |
2389 | .phy_id = PHY_ID_KSZ8041RNLI, |
2390 | .phy_id_mask = MICREL_PHY_ID_MASK, |
2391 | diff --git a/drivers/net/tun.c b/drivers/net/tun.c |
2392 | index dc0349d13f86a..966e2f03c1296 100644 |
2393 | --- a/drivers/net/tun.c |
2394 | +++ b/drivers/net/tun.c |
2395 | @@ -855,6 +855,7 @@ static netdev_tx_t tun_net_xmit(struct sk_buff *skb, struct net_device *dev) |
2396 | { |
2397 | struct tun_struct *tun = netdev_priv(dev); |
2398 | int txq = skb->queue_mapping; |
2399 | + struct netdev_queue *queue; |
2400 | struct tun_file *tfile; |
2401 | u32 numqueues = 0; |
2402 | |
2403 | @@ -920,6 +921,10 @@ static netdev_tx_t tun_net_xmit(struct sk_buff *skb, struct net_device *dev) |
2404 | if (skb_array_produce(&tfile->tx_array, skb)) |
2405 | goto drop; |
2406 | |
2407 | + /* NETIF_F_LLTX requires to do our own update of trans_start */ |
2408 | + queue = netdev_get_tx_queue(dev, txq); |
2409 | + queue->trans_start = jiffies; |
2410 | + |
2411 | /* Notify and wake up reader process */ |
2412 | if (tfile->flags & TUN_FASYNC) |
2413 | kill_fasync(&tfile->fasync, SIGIO, POLL_IN); |
2414 | diff --git a/drivers/net/vmxnet3/vmxnet3_drv.c b/drivers/net/vmxnet3/vmxnet3_drv.c |
2415 | index c999b10531c59..56a8031b56b37 100644 |
2416 | --- a/drivers/net/vmxnet3/vmxnet3_drv.c |
2417 | +++ b/drivers/net/vmxnet3/vmxnet3_drv.c |
2418 | @@ -3622,7 +3622,6 @@ vmxnet3_suspend(struct device *device) |
2419 | vmxnet3_free_intr_resources(adapter); |
2420 | |
2421 | netif_device_detach(netdev); |
2422 | - netif_tx_stop_all_queues(netdev); |
2423 | |
2424 | /* Create wake-up filters. */ |
2425 | pmConf = adapter->pm_conf; |
2426 | diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c |
2427 | index 314cac2ce0879..41fb17cece622 100644 |
2428 | --- a/drivers/net/wireless/ath/ath10k/mac.c |
2429 | +++ b/drivers/net/wireless/ath/ath10k/mac.c |
2430 | @@ -980,7 +980,7 @@ static int ath10k_monitor_vdev_start(struct ath10k *ar, int vdev_id) |
2431 | arg.channel.min_power = 0; |
2432 | arg.channel.max_power = channel->max_power * 2; |
2433 | arg.channel.max_reg_power = channel->max_reg_power * 2; |
2434 | - arg.channel.max_antenna_gain = channel->max_antenna_gain * 2; |
2435 | + arg.channel.max_antenna_gain = channel->max_antenna_gain; |
2436 | |
2437 | reinit_completion(&ar->vdev_setup_done); |
2438 | |
2439 | @@ -1416,7 +1416,7 @@ static int ath10k_vdev_start_restart(struct ath10k_vif *arvif, |
2440 | arg.channel.min_power = 0; |
2441 | arg.channel.max_power = chandef->chan->max_power * 2; |
2442 | arg.channel.max_reg_power = chandef->chan->max_reg_power * 2; |
2443 | - arg.channel.max_antenna_gain = chandef->chan->max_antenna_gain * 2; |
2444 | + arg.channel.max_antenna_gain = chandef->chan->max_antenna_gain; |
2445 | |
2446 | if (arvif->vdev_type == WMI_VDEV_TYPE_AP) { |
2447 | arg.ssid = arvif->u.ap.ssid; |
2448 | @@ -3019,7 +3019,7 @@ static int ath10k_update_channel_list(struct ath10k *ar) |
2449 | ch->min_power = 0; |
2450 | ch->max_power = channel->max_power * 2; |
2451 | ch->max_reg_power = channel->max_reg_power * 2; |
2452 | - ch->max_antenna_gain = channel->max_antenna_gain * 2; |
2453 | + ch->max_antenna_gain = channel->max_antenna_gain; |
2454 | ch->reg_class_id = 0; /* FIXME */ |
2455 | |
2456 | /* FIXME: why use only legacy modes, why not any |
2457 | diff --git a/drivers/net/wireless/ath/ath10k/wmi.h b/drivers/net/wireless/ath/ath10k/wmi.h |
2458 | index cce028ea9b57d..5f718210ce682 100644 |
2459 | --- a/drivers/net/wireless/ath/ath10k/wmi.h |
2460 | +++ b/drivers/net/wireless/ath/ath10k/wmi.h |
2461 | @@ -1802,7 +1802,9 @@ struct wmi_channel { |
2462 | union { |
2463 | __le32 reginfo1; |
2464 | struct { |
2465 | + /* note: power unit is 1 dBm */ |
2466 | u8 antenna_max; |
2467 | + /* note: power unit is 0.5 dBm */ |
2468 | u8 max_tx_power; |
2469 | } __packed; |
2470 | } __packed; |
2471 | @@ -1821,6 +1823,7 @@ struct wmi_channel_arg { |
2472 | u32 min_power; |
2473 | u32 max_power; |
2474 | u32 max_reg_power; |
2475 | + /* note: power unit is 1 dBm */ |
2476 | u32 max_antenna_gain; |
2477 | u32 reg_class_id; |
2478 | enum wmi_phy_mode mode; |
2479 | diff --git a/drivers/net/wireless/ath/ath6kl/usb.c b/drivers/net/wireless/ath/ath6kl/usb.c |
2480 | index fc22c5f479276..3d0dfcf2c2462 100644 |
2481 | --- a/drivers/net/wireless/ath/ath6kl/usb.c |
2482 | +++ b/drivers/net/wireless/ath/ath6kl/usb.c |
2483 | @@ -340,6 +340,11 @@ static int ath6kl_usb_setup_pipe_resources(struct ath6kl_usb *ar_usb) |
2484 | le16_to_cpu(endpoint->wMaxPacketSize), |
2485 | endpoint->bInterval); |
2486 | } |
2487 | + |
2488 | + /* Ignore broken descriptors. */ |
2489 | + if (usb_endpoint_maxp(endpoint) == 0) |
2490 | + continue; |
2491 | + |
2492 | urbcount = 0; |
2493 | |
2494 | pipe_num = |
2495 | @@ -907,7 +912,7 @@ static int ath6kl_usb_submit_ctrl_in(struct ath6kl_usb *ar_usb, |
2496 | req, |
2497 | USB_DIR_IN | USB_TYPE_VENDOR | |
2498 | USB_RECIP_DEVICE, value, index, buf, |
2499 | - size, 2 * HZ); |
2500 | + size, 2000); |
2501 | |
2502 | if (ret < 0) { |
2503 | ath6kl_warn("Failed to read usb control message: %d\n", ret); |
2504 | diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c |
2505 | index 7776f4a8630e4..ca0877f0e6392 100644 |
2506 | --- a/drivers/net/wireless/ath/ath9k/main.c |
2507 | +++ b/drivers/net/wireless/ath/ath9k/main.c |
2508 | @@ -528,8 +528,10 @@ irqreturn_t ath_isr(int irq, void *dev) |
2509 | ath9k_debug_sync_cause(sc, sync_cause); |
2510 | status &= ah->imask; /* discard unasked-for bits */ |
2511 | |
2512 | - if (test_bit(ATH_OP_HW_RESET, &common->op_flags)) |
2513 | + if (test_bit(ATH_OP_HW_RESET, &common->op_flags)) { |
2514 | + ath9k_hw_kill_interrupts(sc->sc_ah); |
2515 | return IRQ_HANDLED; |
2516 | + } |
2517 | |
2518 | /* |
2519 | * If there are no status bits set, then this interrupt was not |
2520 | diff --git a/drivers/net/wireless/ath/dfs_pattern_detector.c b/drivers/net/wireless/ath/dfs_pattern_detector.c |
2521 | index 78146607f16e8..acd85e5069346 100644 |
2522 | --- a/drivers/net/wireless/ath/dfs_pattern_detector.c |
2523 | +++ b/drivers/net/wireless/ath/dfs_pattern_detector.c |
2524 | @@ -182,10 +182,12 @@ static void channel_detector_exit(struct dfs_pattern_detector *dpd, |
2525 | if (cd == NULL) |
2526 | return; |
2527 | list_del(&cd->head); |
2528 | - for (i = 0; i < dpd->num_radar_types; i++) { |
2529 | - struct pri_detector *de = cd->detectors[i]; |
2530 | - if (de != NULL) |
2531 | - de->exit(de); |
2532 | + if (cd->detectors) { |
2533 | + for (i = 0; i < dpd->num_radar_types; i++) { |
2534 | + struct pri_detector *de = cd->detectors[i]; |
2535 | + if (de != NULL) |
2536 | + de->exit(de); |
2537 | + } |
2538 | } |
2539 | kfree(cd->detectors); |
2540 | kfree(cd); |
2541 | diff --git a/drivers/net/wireless/ath/wcn36xx/main.c b/drivers/net/wireless/ath/wcn36xx/main.c |
2542 | index 86beadf0f2493..b5a885a8301cc 100644 |
2543 | --- a/drivers/net/wireless/ath/wcn36xx/main.c |
2544 | +++ b/drivers/net/wireless/ath/wcn36xx/main.c |
2545 | @@ -129,7 +129,9 @@ static struct ieee80211_supported_band wcn_band_2ghz = { |
2546 | .cap = IEEE80211_HT_CAP_GRN_FLD | |
2547 | IEEE80211_HT_CAP_SGI_20 | |
2548 | IEEE80211_HT_CAP_DSSSCCK40 | |
2549 | - IEEE80211_HT_CAP_LSIG_TXOP_PROT, |
2550 | + IEEE80211_HT_CAP_LSIG_TXOP_PROT | |
2551 | + IEEE80211_HT_CAP_SGI_40 | |
2552 | + IEEE80211_HT_CAP_SUP_WIDTH_20_40, |
2553 | .ht_supported = true, |
2554 | .ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K, |
2555 | .ampdu_density = IEEE80211_HT_MPDU_DENSITY_16, |
2556 | diff --git a/drivers/net/wireless/ath/wcn36xx/smd.c b/drivers/net/wireless/ath/wcn36xx/smd.c |
2557 | index a443992320f2e..914c210c9e605 100644 |
2558 | --- a/drivers/net/wireless/ath/wcn36xx/smd.c |
2559 | +++ b/drivers/net/wireless/ath/wcn36xx/smd.c |
2560 | @@ -2081,30 +2081,52 @@ static int wcn36xx_smd_delete_sta_context_ind(struct wcn36xx *wcn, |
2561 | size_t len) |
2562 | { |
2563 | struct wcn36xx_hal_delete_sta_context_ind_msg *rsp = buf; |
2564 | - struct wcn36xx_vif *tmp; |
2565 | + struct wcn36xx_vif *vif_priv; |
2566 | + struct ieee80211_vif *vif; |
2567 | + struct ieee80211_bss_conf *bss_conf; |
2568 | struct ieee80211_sta *sta; |
2569 | + bool found = false; |
2570 | |
2571 | if (len != sizeof(*rsp)) { |
2572 | wcn36xx_warn("Corrupted delete sta indication\n"); |
2573 | return -EIO; |
2574 | } |
2575 | |
2576 | - wcn36xx_dbg(WCN36XX_DBG_HAL, "delete station indication %pM index %d\n", |
2577 | - rsp->addr2, rsp->sta_id); |
2578 | + wcn36xx_dbg(WCN36XX_DBG_HAL, |
2579 | + "delete station indication %pM index %d reason %d\n", |
2580 | + rsp->addr2, rsp->sta_id, rsp->reason_code); |
2581 | |
2582 | - list_for_each_entry(tmp, &wcn->vif_list, list) { |
2583 | + list_for_each_entry(vif_priv, &wcn->vif_list, list) { |
2584 | rcu_read_lock(); |
2585 | - sta = ieee80211_find_sta(wcn36xx_priv_to_vif(tmp), rsp->addr2); |
2586 | - if (sta) |
2587 | - ieee80211_report_low_ack(sta, 0); |
2588 | + vif = wcn36xx_priv_to_vif(vif_priv); |
2589 | + |
2590 | + if (vif->type == NL80211_IFTYPE_STATION) { |
2591 | + /* We could call ieee80211_find_sta too, but checking |
2592 | + * bss_conf is clearer. |
2593 | + */ |
2594 | + bss_conf = &vif->bss_conf; |
2595 | + if (vif_priv->sta_assoc && |
2596 | + !memcmp(bss_conf->bssid, rsp->addr2, ETH_ALEN)) { |
2597 | + found = true; |
2598 | + wcn36xx_dbg(WCN36XX_DBG_HAL, |
2599 | + "connection loss bss_index %d\n", |
2600 | + vif_priv->bss_index); |
2601 | + ieee80211_connection_loss(vif); |
2602 | + } |
2603 | + } else { |
2604 | + sta = ieee80211_find_sta(vif, rsp->addr2); |
2605 | + if (sta) { |
2606 | + found = true; |
2607 | + ieee80211_report_low_ack(sta, 0); |
2608 | + } |
2609 | + } |
2610 | + |
2611 | rcu_read_unlock(); |
2612 | - if (sta) |
2613 | + if (found) |
2614 | return 0; |
2615 | } |
2616 | |
2617 | - wcn36xx_warn("STA with addr %pM and index %d not found\n", |
2618 | - rsp->addr2, |
2619 | - rsp->sta_id); |
2620 | + wcn36xx_warn("BSS or STA with addr %pM not found\n", rsp->addr2); |
2621 | return -ENOENT; |
2622 | } |
2623 | |
2624 | diff --git a/drivers/net/wireless/broadcom/b43/phy_g.c b/drivers/net/wireless/broadcom/b43/phy_g.c |
2625 | index 822dcaa8ace63..35ff139b1496e 100644 |
2626 | --- a/drivers/net/wireless/broadcom/b43/phy_g.c |
2627 | +++ b/drivers/net/wireless/broadcom/b43/phy_g.c |
2628 | @@ -2310,7 +2310,7 @@ static u8 b43_gphy_aci_scan(struct b43_wldev *dev) |
2629 | b43_phy_mask(dev, B43_PHY_G_CRS, 0x7FFF); |
2630 | b43_set_all_gains(dev, 3, 8, 1); |
2631 | |
2632 | - start = (channel - 5 > 0) ? channel - 5 : 1; |
2633 | + start = (channel > 5) ? channel - 5 : 1; |
2634 | end = (channel + 5 < 14) ? channel + 5 : 13; |
2635 | |
2636 | for (i = start; i <= end; i++) { |
2637 | diff --git a/drivers/net/wireless/broadcom/b43legacy/radio.c b/drivers/net/wireless/broadcom/b43legacy/radio.c |
2638 | index 9501420340a91..5b1e8890305c1 100644 |
2639 | --- a/drivers/net/wireless/broadcom/b43legacy/radio.c |
2640 | +++ b/drivers/net/wireless/broadcom/b43legacy/radio.c |
2641 | @@ -299,7 +299,7 @@ u8 b43legacy_radio_aci_scan(struct b43legacy_wldev *dev) |
2642 | & 0x7FFF); |
2643 | b43legacy_set_all_gains(dev, 3, 8, 1); |
2644 | |
2645 | - start = (channel - 5 > 0) ? channel - 5 : 1; |
2646 | + start = (channel > 5) ? channel - 5 : 1; |
2647 | end = (channel + 5 < 14) ? channel + 5 : 13; |
2648 | |
2649 | for (i = start; i <= end; i++) { |
2650 | diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/utils.c b/drivers/net/wireless/intel/iwlwifi/mvm/utils.c |
2651 | index ff5ce1ed03c42..4746f4b096c56 100644 |
2652 | --- a/drivers/net/wireless/intel/iwlwifi/mvm/utils.c |
2653 | +++ b/drivers/net/wireless/intel/iwlwifi/mvm/utils.c |
2654 | @@ -913,6 +913,9 @@ bool iwl_mvm_rx_diversity_allowed(struct iwl_mvm *mvm) |
2655 | |
2656 | lockdep_assert_held(&mvm->mutex); |
2657 | |
2658 | + if (iwlmvm_mod_params.power_scheme != IWL_POWER_SCHEME_CAM) |
2659 | + return false; |
2660 | + |
2661 | if (num_of_ant(iwl_mvm_get_valid_rx_ant(mvm)) == 1) |
2662 | return false; |
2663 | |
2664 | diff --git a/drivers/net/wireless/marvell/libertas/if_usb.c b/drivers/net/wireless/marvell/libertas/if_usb.c |
2665 | index 9d147b11ee516..9f19fd5c18d07 100644 |
2666 | --- a/drivers/net/wireless/marvell/libertas/if_usb.c |
2667 | +++ b/drivers/net/wireless/marvell/libertas/if_usb.c |
2668 | @@ -292,6 +292,7 @@ err_add_card: |
2669 | if_usb_reset_device(cardp); |
2670 | dealloc: |
2671 | if_usb_free(cardp); |
2672 | + kfree(cardp); |
2673 | |
2674 | error: |
2675 | return r; |
2676 | @@ -318,6 +319,7 @@ static void if_usb_disconnect(struct usb_interface *intf) |
2677 | |
2678 | /* Unlink and free urb */ |
2679 | if_usb_free(cardp); |
2680 | + kfree(cardp); |
2681 | |
2682 | usb_set_intfdata(intf, NULL); |
2683 | usb_put_dev(interface_to_usbdev(intf)); |
2684 | diff --git a/drivers/net/wireless/marvell/libertas_tf/if_usb.c b/drivers/net/wireless/marvell/libertas_tf/if_usb.c |
2685 | index 4b539209999b4..aaba324dbc39b 100644 |
2686 | --- a/drivers/net/wireless/marvell/libertas_tf/if_usb.c |
2687 | +++ b/drivers/net/wireless/marvell/libertas_tf/if_usb.c |
2688 | @@ -234,6 +234,7 @@ static int if_usb_probe(struct usb_interface *intf, |
2689 | |
2690 | dealloc: |
2691 | if_usb_free(cardp); |
2692 | + kfree(cardp); |
2693 | error: |
2694 | lbtf_deb_leave(LBTF_DEB_MAIN); |
2695 | return -ENOMEM; |
2696 | @@ -258,6 +259,7 @@ static void if_usb_disconnect(struct usb_interface *intf) |
2697 | |
2698 | /* Unlink and free urb */ |
2699 | if_usb_free(cardp); |
2700 | + kfree(cardp); |
2701 | |
2702 | usb_set_intfdata(intf, NULL); |
2703 | usb_put_dev(interface_to_usbdev(intf)); |
2704 | diff --git a/drivers/net/wireless/marvell/mwifiex/11n.c b/drivers/net/wireless/marvell/mwifiex/11n.c |
2705 | index c174e79e6df2b..b70eac7d2dd79 100644 |
2706 | --- a/drivers/net/wireless/marvell/mwifiex/11n.c |
2707 | +++ b/drivers/net/wireless/marvell/mwifiex/11n.c |
2708 | @@ -630,14 +630,15 @@ int mwifiex_send_delba(struct mwifiex_private *priv, int tid, u8 *peer_mac, |
2709 | uint16_t del_ba_param_set; |
2710 | |
2711 | memset(&delba, 0, sizeof(delba)); |
2712 | - delba.del_ba_param_set = cpu_to_le16(tid << DELBA_TID_POS); |
2713 | |
2714 | - del_ba_param_set = le16_to_cpu(delba.del_ba_param_set); |
2715 | + del_ba_param_set = tid << DELBA_TID_POS; |
2716 | + |
2717 | if (initiator) |
2718 | del_ba_param_set |= IEEE80211_DELBA_PARAM_INITIATOR_MASK; |
2719 | else |
2720 | del_ba_param_set &= ~IEEE80211_DELBA_PARAM_INITIATOR_MASK; |
2721 | |
2722 | + delba.del_ba_param_set = cpu_to_le16(del_ba_param_set); |
2723 | memcpy(&delba.peer_mac_addr, peer_mac, ETH_ALEN); |
2724 | |
2725 | /* We don't wait for the response of this command */ |
2726 | diff --git a/drivers/net/wireless/marvell/mwifiex/pcie.c b/drivers/net/wireless/marvell/mwifiex/pcie.c |
2727 | index d0743bd25ba95..aaabd8454794e 100644 |
2728 | --- a/drivers/net/wireless/marvell/mwifiex/pcie.c |
2729 | +++ b/drivers/net/wireless/marvell/mwifiex/pcie.c |
2730 | @@ -1265,6 +1265,14 @@ mwifiex_pcie_send_data(struct mwifiex_adapter *adapter, struct sk_buff *skb, |
2731 | ret = -1; |
2732 | goto done_unmap; |
2733 | } |
2734 | + |
2735 | + /* The firmware (latest version 15.68.19.p21) of the 88W8897 PCIe+USB card |
2736 | + * seems to crash randomly after setting the TX ring write pointer when |
2737 | + * ASPM powersaving is enabled. A workaround seems to be keeping the bus |
2738 | + * busy by reading a random register afterwards. |
2739 | + */ |
2740 | + mwifiex_read_reg(adapter, PCI_VENDOR_ID, &rx_val); |
2741 | + |
2742 | if ((mwifiex_pcie_txbd_not_full(card)) && |
2743 | tx_param->next_pkt_len) { |
2744 | /* have more packets and TxBD still can hold more */ |
2745 | diff --git a/drivers/net/wireless/marvell/mwifiex/usb.c b/drivers/net/wireless/marvell/mwifiex/usb.c |
2746 | index 09185a1f7379c..2c4225e57c396 100644 |
2747 | --- a/drivers/net/wireless/marvell/mwifiex/usb.c |
2748 | +++ b/drivers/net/wireless/marvell/mwifiex/usb.c |
2749 | @@ -473,6 +473,22 @@ static int mwifiex_usb_probe(struct usb_interface *intf, |
2750 | } |
2751 | } |
2752 | |
2753 | + switch (card->usb_boot_state) { |
2754 | + case USB8XXX_FW_DNLD: |
2755 | + /* Reject broken descriptors. */ |
2756 | + if (!card->rx_cmd_ep || !card->tx_cmd_ep) |
2757 | + return -ENODEV; |
2758 | + if (card->bulk_out_maxpktsize == 0) |
2759 | + return -ENODEV; |
2760 | + break; |
2761 | + case USB8XXX_FW_READY: |
2762 | + /* Assume the driver can handle missing endpoints for now. */ |
2763 | + break; |
2764 | + default: |
2765 | + WARN_ON(1); |
2766 | + return -ENODEV; |
2767 | + } |
2768 | + |
2769 | usb_set_intfdata(intf, card); |
2770 | |
2771 | ret = mwifiex_add_card(card, &add_remove_card_sem, &usb_ops, |
2772 | diff --git a/drivers/net/wireless/marvell/mwl8k.c b/drivers/net/wireless/marvell/mwl8k.c |
2773 | index 66cd38d4f199b..c6f008796ff16 100644 |
2774 | --- a/drivers/net/wireless/marvell/mwl8k.c |
2775 | +++ b/drivers/net/wireless/marvell/mwl8k.c |
2776 | @@ -5783,8 +5783,8 @@ static void mwl8k_fw_state_machine(const struct firmware *fw, void *context) |
2777 | fail: |
2778 | priv->fw_state = FW_STATE_ERROR; |
2779 | complete(&priv->firmware_loading_complete); |
2780 | - device_release_driver(&priv->pdev->dev); |
2781 | mwl8k_release_firmware(priv); |
2782 | + device_release_driver(&priv->pdev->dev); |
2783 | } |
2784 | |
2785 | #define MAX_RESTART_ATTEMPTS 1 |
2786 | diff --git a/drivers/net/wireless/realtek/rtl818x/rtl8187/rtl8225.c b/drivers/net/wireless/realtek/rtl818x/rtl8187/rtl8225.c |
2787 | index e6668ffb77e65..49fb8bba3d91a 100644 |
2788 | --- a/drivers/net/wireless/realtek/rtl818x/rtl8187/rtl8225.c |
2789 | +++ b/drivers/net/wireless/realtek/rtl818x/rtl8187/rtl8225.c |
2790 | @@ -31,7 +31,7 @@ u8 rtl818x_ioread8_idx(struct rtl8187_priv *priv, |
2791 | usb_control_msg(priv->udev, usb_rcvctrlpipe(priv->udev, 0), |
2792 | RTL8187_REQ_GET_REG, RTL8187_REQT_READ, |
2793 | (unsigned long)addr, idx & 0x03, |
2794 | - &priv->io_dmabuf->bits8, sizeof(val), HZ / 2); |
2795 | + &priv->io_dmabuf->bits8, sizeof(val), 500); |
2796 | |
2797 | val = priv->io_dmabuf->bits8; |
2798 | mutex_unlock(&priv->io_mutex); |
2799 | @@ -48,7 +48,7 @@ u16 rtl818x_ioread16_idx(struct rtl8187_priv *priv, |
2800 | usb_control_msg(priv->udev, usb_rcvctrlpipe(priv->udev, 0), |
2801 | RTL8187_REQ_GET_REG, RTL8187_REQT_READ, |
2802 | (unsigned long)addr, idx & 0x03, |
2803 | - &priv->io_dmabuf->bits16, sizeof(val), HZ / 2); |
2804 | + &priv->io_dmabuf->bits16, sizeof(val), 500); |
2805 | |
2806 | val = priv->io_dmabuf->bits16; |
2807 | mutex_unlock(&priv->io_mutex); |
2808 | @@ -65,7 +65,7 @@ u32 rtl818x_ioread32_idx(struct rtl8187_priv *priv, |
2809 | usb_control_msg(priv->udev, usb_rcvctrlpipe(priv->udev, 0), |
2810 | RTL8187_REQ_GET_REG, RTL8187_REQT_READ, |
2811 | (unsigned long)addr, idx & 0x03, |
2812 | - &priv->io_dmabuf->bits32, sizeof(val), HZ / 2); |
2813 | + &priv->io_dmabuf->bits32, sizeof(val), 500); |
2814 | |
2815 | val = priv->io_dmabuf->bits32; |
2816 | mutex_unlock(&priv->io_mutex); |
2817 | @@ -82,7 +82,7 @@ void rtl818x_iowrite8_idx(struct rtl8187_priv *priv, |
2818 | usb_control_msg(priv->udev, usb_sndctrlpipe(priv->udev, 0), |
2819 | RTL8187_REQ_SET_REG, RTL8187_REQT_WRITE, |
2820 | (unsigned long)addr, idx & 0x03, |
2821 | - &priv->io_dmabuf->bits8, sizeof(val), HZ / 2); |
2822 | + &priv->io_dmabuf->bits8, sizeof(val), 500); |
2823 | |
2824 | mutex_unlock(&priv->io_mutex); |
2825 | } |
2826 | @@ -96,7 +96,7 @@ void rtl818x_iowrite16_idx(struct rtl8187_priv *priv, |
2827 | usb_control_msg(priv->udev, usb_sndctrlpipe(priv->udev, 0), |
2828 | RTL8187_REQ_SET_REG, RTL8187_REQT_WRITE, |
2829 | (unsigned long)addr, idx & 0x03, |
2830 | - &priv->io_dmabuf->bits16, sizeof(val), HZ / 2); |
2831 | + &priv->io_dmabuf->bits16, sizeof(val), 500); |
2832 | |
2833 | mutex_unlock(&priv->io_mutex); |
2834 | } |
2835 | @@ -110,7 +110,7 @@ void rtl818x_iowrite32_idx(struct rtl8187_priv *priv, |
2836 | usb_control_msg(priv->udev, usb_sndctrlpipe(priv->udev, 0), |
2837 | RTL8187_REQ_SET_REG, RTL8187_REQT_WRITE, |
2838 | (unsigned long)addr, idx & 0x03, |
2839 | - &priv->io_dmabuf->bits32, sizeof(val), HZ / 2); |
2840 | + &priv->io_dmabuf->bits32, sizeof(val), 500); |
2841 | |
2842 | mutex_unlock(&priv->io_mutex); |
2843 | } |
2844 | @@ -186,7 +186,7 @@ static void rtl8225_write_8051(struct ieee80211_hw *dev, u8 addr, __le16 data) |
2845 | usb_control_msg(priv->udev, usb_sndctrlpipe(priv->udev, 0), |
2846 | RTL8187_REQ_SET_REG, RTL8187_REQT_WRITE, |
2847 | addr, 0x8225, &priv->io_dmabuf->bits16, sizeof(data), |
2848 | - HZ / 2); |
2849 | + 500); |
2850 | |
2851 | mutex_unlock(&priv->io_mutex); |
2852 | |
2853 | diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c |
2854 | index ceaf6b30d683d..0971c09363cbf 100644 |
2855 | --- a/drivers/net/xen-netfront.c |
2856 | +++ b/drivers/net/xen-netfront.c |
2857 | @@ -1460,6 +1460,10 @@ static int netfront_resume(struct xenbus_device *dev) |
2858 | |
2859 | dev_dbg(&dev->dev, "%s\n", dev->nodename); |
2860 | |
2861 | + netif_tx_lock_bh(info->netdev); |
2862 | + netif_device_detach(info->netdev); |
2863 | + netif_tx_unlock_bh(info->netdev); |
2864 | + |
2865 | xennet_disconnect_backend(info); |
2866 | return 0; |
2867 | } |
2868 | @@ -2020,6 +2024,10 @@ static int xennet_connect(struct net_device *dev) |
2869 | * domain a kick because we've probably just requeued some |
2870 | * packets. |
2871 | */ |
2872 | + netif_tx_lock_bh(np->netdev); |
2873 | + netif_device_attach(np->netdev); |
2874 | + netif_tx_unlock_bh(np->netdev); |
2875 | + |
2876 | netif_carrier_on(np->netdev); |
2877 | for (j = 0; j < num_queues; ++j) { |
2878 | queue = &np->queues[j]; |
2879 | diff --git a/drivers/nfc/pn533/pn533.c b/drivers/nfc/pn533/pn533.c |
2880 | index 6c495664d2cb7..806309ee41657 100644 |
2881 | --- a/drivers/nfc/pn533/pn533.c |
2882 | +++ b/drivers/nfc/pn533/pn533.c |
2883 | @@ -2075,7 +2075,7 @@ static int pn533_fill_fragment_skbs(struct pn533 *dev, struct sk_buff *skb) |
2884 | frag = pn533_alloc_skb(dev, frag_size); |
2885 | if (!frag) { |
2886 | skb_queue_purge(&dev->fragment_skb); |
2887 | - break; |
2888 | + return -ENOMEM; |
2889 | } |
2890 | |
2891 | if (!dev->tgt_mode) { |
2892 | @@ -2145,7 +2145,7 @@ static int pn533_transceive(struct nfc_dev *nfc_dev, |
2893 | /* jumbo frame ? */ |
2894 | if (skb->len > PN533_CMD_DATAEXCH_DATA_MAXLEN) { |
2895 | rc = pn533_fill_fragment_skbs(dev, skb); |
2896 | - if (rc <= 0) |
2897 | + if (rc < 0) |
2898 | goto error; |
2899 | |
2900 | skb = skb_dequeue(&dev->fragment_skb); |
2901 | @@ -2217,7 +2217,7 @@ static int pn533_tm_send(struct nfc_dev *nfc_dev, struct sk_buff *skb) |
2902 | /* let's split in multiple chunks if size's too big */ |
2903 | if (skb->len > PN533_CMD_DATAEXCH_DATA_MAXLEN) { |
2904 | rc = pn533_fill_fragment_skbs(dev, skb); |
2905 | - if (rc <= 0) |
2906 | + if (rc < 0) |
2907 | goto error; |
2908 | |
2909 | /* get the first skb */ |
2910 | diff --git a/drivers/pci/host/pci-aardvark.c b/drivers/pci/host/pci-aardvark.c |
2911 | index 736d9f58438ec..08375e68f1c30 100644 |
2912 | --- a/drivers/pci/host/pci-aardvark.c |
2913 | +++ b/drivers/pci/host/pci-aardvark.c |
2914 | @@ -110,6 +110,7 @@ |
2915 | #define PCIE_MSI_STATUS_REG (CONTROL_BASE_ADDR + 0x58) |
2916 | #define PCIE_MSI_MASK_REG (CONTROL_BASE_ADDR + 0x5C) |
2917 | #define PCIE_MSI_PAYLOAD_REG (CONTROL_BASE_ADDR + 0x9C) |
2918 | +#define PCIE_MSI_DATA_MASK GENMASK(15, 0) |
2919 | |
2920 | /* PCIe window configuration */ |
2921 | #define OB_WIN_BASE_ADDR 0x4c00 |
2922 | @@ -404,7 +405,7 @@ static void advk_pcie_check_pio_status(struct advk_pcie *pcie) |
2923 | else |
2924 | str_posted = "Posted"; |
2925 | |
2926 | - dev_err(dev, "%s PIO Response Status: %s, %#x @ %#x\n", |
2927 | + dev_dbg(dev, "%s PIO Response Status: %s, %#x @ %#x\n", |
2928 | str_posted, strcomp_status, reg, advk_readl(pcie, PIO_ADDR_LS)); |
2929 | } |
2930 | |
2931 | @@ -785,8 +786,12 @@ static void advk_pcie_handle_msi(struct advk_pcie *pcie) |
2932 | if (!(BIT(msi_idx) & msi_status)) |
2933 | continue; |
2934 | |
2935 | + /* |
2936 | + * msi_idx contains bits [4:0] of the msi_data and msi_data |
2937 | + * contains 16bit MSI interrupt number |
2938 | + */ |
2939 | advk_writel(pcie, BIT(msi_idx), PCIE_MSI_STATUS_REG); |
2940 | - msi_data = advk_readl(pcie, PCIE_MSI_PAYLOAD_REG) & 0xFF; |
2941 | + msi_data = advk_readl(pcie, PCIE_MSI_PAYLOAD_REG) & PCIE_MSI_DATA_MASK; |
2942 | generic_handle_irq(msi_data); |
2943 | } |
2944 | |
2945 | diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c |
2946 | index 97c3515e3b543..be2f1402c84c2 100644 |
2947 | --- a/drivers/pci/msi.c |
2948 | +++ b/drivers/pci/msi.c |
2949 | @@ -391,18 +391,6 @@ static void free_msi_irqs(struct pci_dev *dev) |
2950 | for (i = 0; i < entry->nvec_used; i++) |
2951 | BUG_ON(irq_has_action(entry->irq + i)); |
2952 | |
2953 | - pci_msi_teardown_msi_irqs(dev); |
2954 | - |
2955 | - list_for_each_entry_safe(entry, tmp, msi_list, list) { |
2956 | - if (entry->msi_attrib.is_msix) { |
2957 | - if (list_is_last(&entry->list, msi_list)) |
2958 | - iounmap(entry->mask_base); |
2959 | - } |
2960 | - |
2961 | - list_del(&entry->list); |
2962 | - kfree(entry); |
2963 | - } |
2964 | - |
2965 | if (dev->msi_irq_groups) { |
2966 | sysfs_remove_groups(&dev->dev.kobj, dev->msi_irq_groups); |
2967 | msi_attrs = dev->msi_irq_groups[0]->attrs; |
2968 | @@ -418,6 +406,18 @@ static void free_msi_irqs(struct pci_dev *dev) |
2969 | kfree(dev->msi_irq_groups); |
2970 | dev->msi_irq_groups = NULL; |
2971 | } |
2972 | + |
2973 | + pci_msi_teardown_msi_irqs(dev); |
2974 | + |
2975 | + list_for_each_entry_safe(entry, tmp, msi_list, list) { |
2976 | + if (entry->msi_attrib.is_msix) { |
2977 | + if (list_is_last(&entry->list, msi_list)) |
2978 | + iounmap(entry->mask_base); |
2979 | + } |
2980 | + |
2981 | + list_del(&entry->list); |
2982 | + free_msi_entry(entry); |
2983 | + } |
2984 | } |
2985 | |
2986 | static void pci_intx_for_msi(struct pci_dev *dev, int enable) |
2987 | diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c |
2988 | index 66e5bb7bfb67b..3ff2971102b61 100644 |
2989 | --- a/drivers/pci/quirks.c |
2990 | +++ b/drivers/pci/quirks.c |
2991 | @@ -3370,6 +3370,7 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATHEROS, 0x0032, quirk_no_bus_reset); |
2992 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATHEROS, 0x003c, quirk_no_bus_reset); |
2993 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATHEROS, 0x0033, quirk_no_bus_reset); |
2994 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATHEROS, 0x0034, quirk_no_bus_reset); |
2995 | +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATHEROS, 0x003e, quirk_no_bus_reset); |
2996 | |
2997 | /* |
2998 | * Some TI KeyStone C667X devices do not support bus/hot reset. The PCIESS |
2999 | diff --git a/drivers/platform/x86/hp_accel.c b/drivers/platform/x86/hp_accel.c |
3000 | index 403d966223ee9..76cb361b623cb 100644 |
3001 | --- a/drivers/platform/x86/hp_accel.c |
3002 | +++ b/drivers/platform/x86/hp_accel.c |
3003 | @@ -382,9 +382,11 @@ static int lis3lv02d_add(struct acpi_device *device) |
3004 | INIT_WORK(&hpled_led.work, delayed_set_status_worker); |
3005 | ret = led_classdev_register(NULL, &hpled_led.led_classdev); |
3006 | if (ret) { |
3007 | + i8042_remove_filter(hp_accel_i8042_filter); |
3008 | lis3lv02d_joystick_disable(&lis3_dev); |
3009 | lis3lv02d_poweroff(&lis3_dev); |
3010 | flush_work(&hpled_led.work); |
3011 | + lis3lv02d_remove_fs(&lis3_dev); |
3012 | return ret; |
3013 | } |
3014 | |
3015 | diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c |
3016 | index 84bfecded84d9..9c929b5ce58e2 100644 |
3017 | --- a/drivers/platform/x86/thinkpad_acpi.c |
3018 | +++ b/drivers/platform/x86/thinkpad_acpi.c |
3019 | @@ -8884,7 +8884,7 @@ static int fan_write_cmd_level(const char *cmd, int *rc) |
3020 | |
3021 | if (strlencmp(cmd, "level auto") == 0) |
3022 | level = TP_EC_FAN_AUTO; |
3023 | - else if ((strlencmp(cmd, "level disengaged") == 0) | |
3024 | + else if ((strlencmp(cmd, "level disengaged") == 0) || |
3025 | (strlencmp(cmd, "level full-speed") == 0)) |
3026 | level = TP_EC_FAN_FULLSPEED; |
3027 | else if (sscanf(cmd, "level %d", &level) != 1) |
3028 | diff --git a/drivers/platform/x86/wmi.c b/drivers/platform/x86/wmi.c |
3029 | index 00d82e8443bdd..da06284c455dc 100644 |
3030 | --- a/drivers/platform/x86/wmi.c |
3031 | +++ b/drivers/platform/x86/wmi.c |
3032 | @@ -289,7 +289,14 @@ struct acpi_buffer *out) |
3033 | * the WQxx method failed - we should disable collection anyway. |
3034 | */ |
3035 | if ((block->flags & ACPI_WMI_EXPENSIVE) && ACPI_SUCCESS(wc_status)) { |
3036 | - status = acpi_execute_simple_method(handle, wc_method, 0); |
3037 | + /* |
3038 | + * Ignore whether this WCxx call succeeds or not since |
3039 | + * the previously executed WQxx method call might have |
3040 | + * succeeded, and returning the failing status code |
3041 | + * of this call would throw away the result of the WQxx |
3042 | + * call, potentially leaking memory. |
3043 | + */ |
3044 | + acpi_execute_simple_method(handle, wc_method, 0); |
3045 | } |
3046 | |
3047 | return status; |
3048 | diff --git a/drivers/power/supply/bq27xxx_battery_i2c.c b/drivers/power/supply/bq27xxx_battery_i2c.c |
3049 | index 5c5c3a6f99234..91fabe9e6efd0 100644 |
3050 | --- a/drivers/power/supply/bq27xxx_battery_i2c.c |
3051 | +++ b/drivers/power/supply/bq27xxx_battery_i2c.c |
3052 | @@ -115,7 +115,8 @@ static int bq27xxx_battery_i2c_probe(struct i2c_client *client, |
3053 | dev_err(&client->dev, |
3054 | "Unable to register IRQ %d error %d\n", |
3055 | client->irq, ret); |
3056 | - return ret; |
3057 | + bq27xxx_battery_teardown(di); |
3058 | + goto err_failed; |
3059 | } |
3060 | } |
3061 | |
3062 | diff --git a/drivers/power/supply/max17042_battery.c b/drivers/power/supply/max17042_battery.c |
3063 | index f18d845b3b92d..01ca03c809d05 100644 |
3064 | --- a/drivers/power/supply/max17042_battery.c |
3065 | +++ b/drivers/power/supply/max17042_battery.c |
3066 | @@ -246,7 +246,10 @@ static int max17042_get_property(struct power_supply *psy, |
3067 | val->intval = data * 625 / 8; |
3068 | break; |
3069 | case POWER_SUPPLY_PROP_CAPACITY: |
3070 | - ret = regmap_read(map, MAX17042_RepSOC, &data); |
3071 | + if (chip->pdata->enable_current_sense) |
3072 | + ret = regmap_read(map, MAX17042_RepSOC, &data); |
3073 | + else |
3074 | + ret = regmap_read(map, MAX17042_VFSOC, &data); |
3075 | if (ret < 0) |
3076 | return ret; |
3077 | |
3078 | @@ -752,7 +755,8 @@ static void max17042_set_soc_threshold(struct max17042_chip *chip, u16 off) |
3079 | regmap_read(map, MAX17042_RepSOC, &soc); |
3080 | soc >>= 8; |
3081 | soc_tr = (soc + off) << 8; |
3082 | - soc_tr |= (soc - off); |
3083 | + if (off < soc) |
3084 | + soc_tr |= soc - off; |
3085 | regmap_write(map, MAX17042_SALRT_Th, soc_tr); |
3086 | } |
3087 | |
3088 | diff --git a/drivers/power/supply/rt5033_battery.c b/drivers/power/supply/rt5033_battery.c |
3089 | index 9310b85f3405e..7eec7014086d8 100644 |
3090 | --- a/drivers/power/supply/rt5033_battery.c |
3091 | +++ b/drivers/power/supply/rt5033_battery.c |
3092 | @@ -63,7 +63,7 @@ static int rt5033_battery_get_watt_prop(struct i2c_client *client, |
3093 | regmap_read(battery->regmap, regh, &msb); |
3094 | regmap_read(battery->regmap, regl, &lsb); |
3095 | |
3096 | - ret = ((msb << 4) + (lsb >> 4)) * 1250 / 1000; |
3097 | + ret = ((msb << 4) + (lsb >> 4)) * 1250; |
3098 | |
3099 | return ret; |
3100 | } |
3101 | diff --git a/drivers/regulator/s5m8767.c b/drivers/regulator/s5m8767.c |
3102 | index 27343e1c43ef8..45fad246c27e3 100644 |
3103 | --- a/drivers/regulator/s5m8767.c |
3104 | +++ b/drivers/regulator/s5m8767.c |
3105 | @@ -845,18 +845,15 @@ static int s5m8767_pmic_probe(struct platform_device *pdev) |
3106 | /* DS4 GPIO */ |
3107 | gpio_direction_output(pdata->buck_ds[2], 0x0); |
3108 | |
3109 | - if (pdata->buck2_gpiodvs || pdata->buck3_gpiodvs || |
3110 | - pdata->buck4_gpiodvs) { |
3111 | - regmap_update_bits(s5m8767->iodev->regmap_pmic, |
3112 | - S5M8767_REG_BUCK2CTRL, 1 << 1, |
3113 | - (pdata->buck2_gpiodvs) ? (1 << 1) : (0 << 1)); |
3114 | - regmap_update_bits(s5m8767->iodev->regmap_pmic, |
3115 | - S5M8767_REG_BUCK3CTRL, 1 << 1, |
3116 | - (pdata->buck3_gpiodvs) ? (1 << 1) : (0 << 1)); |
3117 | - regmap_update_bits(s5m8767->iodev->regmap_pmic, |
3118 | - S5M8767_REG_BUCK4CTRL, 1 << 1, |
3119 | - (pdata->buck4_gpiodvs) ? (1 << 1) : (0 << 1)); |
3120 | - } |
3121 | + regmap_update_bits(s5m8767->iodev->regmap_pmic, |
3122 | + S5M8767_REG_BUCK2CTRL, 1 << 1, |
3123 | + (pdata->buck2_gpiodvs) ? (1 << 1) : (0 << 1)); |
3124 | + regmap_update_bits(s5m8767->iodev->regmap_pmic, |
3125 | + S5M8767_REG_BUCK3CTRL, 1 << 1, |
3126 | + (pdata->buck3_gpiodvs) ? (1 << 1) : (0 << 1)); |
3127 | + regmap_update_bits(s5m8767->iodev->regmap_pmic, |
3128 | + S5M8767_REG_BUCK4CTRL, 1 << 1, |
3129 | + (pdata->buck4_gpiodvs) ? (1 << 1) : (0 << 1)); |
3130 | |
3131 | /* Initialize GPIO DVS registers */ |
3132 | for (i = 0; i < 8; i++) { |
3133 | diff --git a/drivers/scsi/advansys.c b/drivers/scsi/advansys.c |
3134 | index 24e57e770432b..6efd17692a55a 100644 |
3135 | --- a/drivers/scsi/advansys.c |
3136 | +++ b/drivers/scsi/advansys.c |
3137 | @@ -3370,8 +3370,8 @@ static void asc_prt_adv_board_info(struct seq_file *m, struct Scsi_Host *shost) |
3138 | shost->host_no); |
3139 | |
3140 | seq_printf(m, |
3141 | - " iop_base 0x%lx, cable_detect: %X, err_code %u\n", |
3142 | - (unsigned long)v->iop_base, |
3143 | + " iop_base 0x%p, cable_detect: %X, err_code %u\n", |
3144 | + v->iop_base, |
3145 | AdvReadWordRegister(iop_base,IOPW_SCSI_CFG1) & CABLE_DETECT, |
3146 | v->err_code); |
3147 | |
3148 | diff --git a/drivers/scsi/csiostor/csio_lnode.c b/drivers/scsi/csiostor/csio_lnode.c |
3149 | index 957767d383610..d1df694d9ed00 100644 |
3150 | --- a/drivers/scsi/csiostor/csio_lnode.c |
3151 | +++ b/drivers/scsi/csiostor/csio_lnode.c |
3152 | @@ -611,7 +611,7 @@ csio_ln_vnp_read_cbfn(struct csio_hw *hw, struct csio_mb *mbp) |
3153 | struct fc_els_csp *csp; |
3154 | struct fc_els_cssp *clsp; |
3155 | enum fw_retval retval; |
3156 | - __be32 nport_id; |
3157 | + __be32 nport_id = 0; |
3158 | |
3159 | retval = FW_CMD_RETVAL_G(ntohl(rsp->alloc_to_len16)); |
3160 | if (retval != FW_SUCCESS) { |
3161 | diff --git a/drivers/scsi/dc395x.c b/drivers/scsi/dc395x.c |
3162 | index 830b2d2dcf206..8490d0ff04ca7 100644 |
3163 | --- a/drivers/scsi/dc395x.c |
3164 | +++ b/drivers/scsi/dc395x.c |
3165 | @@ -4809,6 +4809,7 @@ static int dc395x_init_one(struct pci_dev *dev, const struct pci_device_id *id) |
3166 | /* initialise the adapter and everything we need */ |
3167 | if (adapter_init(acb, io_port_base, io_port_len, irq)) { |
3168 | dprintkl(KERN_INFO, "adapter init failed\n"); |
3169 | + acb = NULL; |
3170 | goto fail; |
3171 | } |
3172 | |
3173 | diff --git a/drivers/scsi/lpfc/lpfc_sli.c b/drivers/scsi/lpfc/lpfc_sli.c |
3174 | index 0e7915ecb85a5..5c847ef459cd1 100644 |
3175 | --- a/drivers/scsi/lpfc/lpfc_sli.c |
3176 | +++ b/drivers/scsi/lpfc/lpfc_sli.c |
3177 | @@ -17274,6 +17274,7 @@ lpfc_drain_txq(struct lpfc_hba *phba) |
3178 | fail_msg, |
3179 | piocbq->iotag, piocbq->sli4_xritag); |
3180 | list_add_tail(&piocbq->list, &completions); |
3181 | + fail_msg = NULL; |
3182 | } |
3183 | spin_unlock_irqrestore(&pring->ring_lock, iflags); |
3184 | } |
3185 | diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h |
3186 | index 6ca00813c71f0..4a1a16e6a8204 100644 |
3187 | --- a/drivers/scsi/qla2xxx/qla_gbl.h |
3188 | +++ b/drivers/scsi/qla2xxx/qla_gbl.h |
3189 | @@ -115,7 +115,6 @@ extern int ql2xasynctmfenable; |
3190 | extern int ql2xgffidenable; |
3191 | extern int ql2xenabledif; |
3192 | extern int ql2xenablehba_err_chk; |
3193 | -extern int ql2xtargetreset; |
3194 | extern int ql2xdontresethba; |
3195 | extern uint64_t ql2xmaxlun; |
3196 | extern int ql2xmdcapmask; |
3197 | @@ -655,7 +654,6 @@ extern void qlafx00_abort_iocb(srb_t *, struct abort_iocb_entry_fx00 *); |
3198 | extern void qlafx00_fxdisc_iocb(srb_t *, struct fxdisc_entry_fx00 *); |
3199 | extern void qlafx00_timer_routine(scsi_qla_host_t *); |
3200 | extern int qlafx00_rescan_isp(scsi_qla_host_t *); |
3201 | -extern int qlafx00_loop_reset(scsi_qla_host_t *vha); |
3202 | |
3203 | /* qla82xx related functions */ |
3204 | |
3205 | diff --git a/drivers/scsi/qla2xxx/qla_mr.c b/drivers/scsi/qla2xxx/qla_mr.c |
3206 | index 15dff7099955b..b72cc4b1287d9 100644 |
3207 | --- a/drivers/scsi/qla2xxx/qla_mr.c |
3208 | +++ b/drivers/scsi/qla2xxx/qla_mr.c |
3209 | @@ -738,29 +738,6 @@ qlafx00_lun_reset(fc_port_t *fcport, uint64_t l, int tag) |
3210 | return qla2x00_async_tm_cmd(fcport, TCF_LUN_RESET, l, tag); |
3211 | } |
3212 | |
3213 | -int |
3214 | -qlafx00_loop_reset(scsi_qla_host_t *vha) |
3215 | -{ |
3216 | - int ret; |
3217 | - struct fc_port *fcport; |
3218 | - struct qla_hw_data *ha = vha->hw; |
3219 | - |
3220 | - if (ql2xtargetreset) { |
3221 | - list_for_each_entry(fcport, &vha->vp_fcports, list) { |
3222 | - if (fcport->port_type != FCT_TARGET) |
3223 | - continue; |
3224 | - |
3225 | - ret = ha->isp_ops->target_reset(fcport, 0, 0); |
3226 | - if (ret != QLA_SUCCESS) { |
3227 | - ql_dbg(ql_dbg_taskm, vha, 0x803d, |
3228 | - "Bus Reset failed: Reset=%d " |
3229 | - "d_id=%x.\n", ret, fcport->d_id.b24); |
3230 | - } |
3231 | - } |
3232 | - } |
3233 | - return QLA_SUCCESS; |
3234 | -} |
3235 | - |
3236 | int |
3237 | qlafx00_iospace_config(struct qla_hw_data *ha) |
3238 | { |
3239 | diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c |
3240 | index 65bbca715f57d..274b61ddee04a 100644 |
3241 | --- a/drivers/scsi/qla2xxx/qla_os.c |
3242 | +++ b/drivers/scsi/qla2xxx/qla_os.c |
3243 | @@ -180,12 +180,6 @@ MODULE_PARM_DESC(ql2xdbwr, |
3244 | " 0 -- Regular doorbell.\n" |
3245 | " 1 -- CAMRAM doorbell (faster).\n"); |
3246 | |
3247 | -int ql2xtargetreset = 1; |
3248 | -module_param(ql2xtargetreset, int, S_IRUGO); |
3249 | -MODULE_PARM_DESC(ql2xtargetreset, |
3250 | - "Enable target reset." |
3251 | - "Default is 1 - use hw defaults."); |
3252 | - |
3253 | int ql2xgffidenable; |
3254 | module_param(ql2xgffidenable, int, S_IRUGO); |
3255 | MODULE_PARM_DESC(ql2xgffidenable, |
3256 | @@ -1401,27 +1395,10 @@ int |
3257 | qla2x00_loop_reset(scsi_qla_host_t *vha) |
3258 | { |
3259 | int ret; |
3260 | - struct fc_port *fcport; |
3261 | struct qla_hw_data *ha = vha->hw; |
3262 | |
3263 | - if (IS_QLAFX00(ha)) { |
3264 | - return qlafx00_loop_reset(vha); |
3265 | - } |
3266 | - |
3267 | - if (ql2xtargetreset == 1 && ha->flags.enable_target_reset) { |
3268 | - list_for_each_entry(fcport, &vha->vp_fcports, list) { |
3269 | - if (fcport->port_type != FCT_TARGET) |
3270 | - continue; |
3271 | - |
3272 | - ret = ha->isp_ops->target_reset(fcport, 0, 0); |
3273 | - if (ret != QLA_SUCCESS) { |
3274 | - ql_dbg(ql_dbg_taskm, vha, 0x802c, |
3275 | - "Bus Reset failed: Reset=%d " |
3276 | - "d_id=%x.\n", ret, fcport->d_id.b24); |
3277 | - } |
3278 | - } |
3279 | - } |
3280 | - |
3281 | + if (IS_QLAFX00(ha)) |
3282 | + return QLA_SUCCESS; |
3283 | |
3284 | if (ha->flags.enable_lip_full_login && !IS_CNA_CAPABLE(ha)) { |
3285 | atomic_set(&vha->loop_state, LOOP_DOWN); |
3286 | diff --git a/drivers/sh/maple/maple.c b/drivers/sh/maple/maple.c |
3287 | index bec81c2404f78..1682fa3671bc3 100644 |
3288 | --- a/drivers/sh/maple/maple.c |
3289 | +++ b/drivers/sh/maple/maple.c |
3290 | @@ -835,8 +835,10 @@ static int __init maple_bus_init(void) |
3291 | |
3292 | maple_queue_cache = KMEM_CACHE(maple_buffer, SLAB_HWCACHE_ALIGN); |
3293 | |
3294 | - if (!maple_queue_cache) |
3295 | + if (!maple_queue_cache) { |
3296 | + retval = -ENOMEM; |
3297 | goto cleanup_bothirqs; |
3298 | + } |
3299 | |
3300 | INIT_LIST_HEAD(&maple_waitq); |
3301 | INIT_LIST_HEAD(&maple_sentq); |
3302 | @@ -849,6 +851,7 @@ static int __init maple_bus_init(void) |
3303 | if (!mdev[i]) { |
3304 | while (i-- > 0) |
3305 | maple_free_dev(mdev[i]); |
3306 | + retval = -ENOMEM; |
3307 | goto cleanup_cache; |
3308 | } |
3309 | baseunits[i] = mdev[i]; |
3310 | diff --git a/drivers/soc/tegra/pmc.c b/drivers/soc/tegra/pmc.c |
3311 | index a12710c917a14..93da935130397 100644 |
3312 | --- a/drivers/soc/tegra/pmc.c |
3313 | +++ b/drivers/soc/tegra/pmc.c |
3314 | @@ -384,7 +384,7 @@ static int tegra_powergate_power_up(struct tegra_powergate *pg, |
3315 | |
3316 | err = tegra_powergate_enable_clocks(pg); |
3317 | if (err) |
3318 | - goto disable_clks; |
3319 | + goto powergate_off; |
3320 | |
3321 | usleep_range(10, 20); |
3322 | |
3323 | @@ -396,7 +396,7 @@ static int tegra_powergate_power_up(struct tegra_powergate *pg, |
3324 | |
3325 | err = tegra_powergate_reset_deassert(pg); |
3326 | if (err) |
3327 | - goto powergate_off; |
3328 | + goto disable_clks; |
3329 | |
3330 | usleep_range(10, 20); |
3331 | |
3332 | diff --git a/drivers/spi/spi-bcm-qspi.c b/drivers/spi/spi-bcm-qspi.c |
3333 | index 5453910d8abc3..d521adf6ac245 100644 |
3334 | --- a/drivers/spi/spi-bcm-qspi.c |
3335 | +++ b/drivers/spi/spi-bcm-qspi.c |
3336 | @@ -1266,7 +1266,7 @@ int bcm_qspi_probe(struct platform_device *pdev, |
3337 | &qspi->dev_ids[val]); |
3338 | if (ret < 0) { |
3339 | dev_err(&pdev->dev, "IRQ %s not found\n", name); |
3340 | - goto qspi_probe_err; |
3341 | + goto qspi_unprepare_err; |
3342 | } |
3343 | |
3344 | qspi->dev_ids[val].dev = qspi; |
3345 | @@ -1281,7 +1281,7 @@ int bcm_qspi_probe(struct platform_device *pdev, |
3346 | if (!num_ints) { |
3347 | dev_err(&pdev->dev, "no IRQs registered, cannot init driver\n"); |
3348 | ret = -EINVAL; |
3349 | - goto qspi_probe_err; |
3350 | + goto qspi_unprepare_err; |
3351 | } |
3352 | |
3353 | /* |
3354 | @@ -1332,6 +1332,7 @@ int bcm_qspi_probe(struct platform_device *pdev, |
3355 | |
3356 | qspi_reg_err: |
3357 | bcm_qspi_hw_uninit(qspi); |
3358 | +qspi_unprepare_err: |
3359 | clk_disable_unprepare(qspi->clk); |
3360 | qspi_probe_err: |
3361 | kfree(qspi->dev_ids); |
3362 | diff --git a/drivers/spi/spi-pl022.c b/drivers/spi/spi-pl022.c |
3363 | index f7f7ba17b40e9..27cf77dfc6038 100644 |
3364 | --- a/drivers/spi/spi-pl022.c |
3365 | +++ b/drivers/spi/spi-pl022.c |
3366 | @@ -1703,12 +1703,13 @@ static int verify_controller_parameters(struct pl022 *pl022, |
3367 | return -EINVAL; |
3368 | } |
3369 | } else { |
3370 | - if (chip_info->duplex != SSP_MICROWIRE_CHANNEL_FULL_DUPLEX) |
3371 | + if (chip_info->duplex != SSP_MICROWIRE_CHANNEL_FULL_DUPLEX) { |
3372 | dev_err(&pl022->adev->dev, |
3373 | "Microwire half duplex mode requested," |
3374 | " but this is only available in the" |
3375 | " ST version of PL022\n"); |
3376 | - return -EINVAL; |
3377 | + return -EINVAL; |
3378 | + } |
3379 | } |
3380 | } |
3381 | return 0; |
3382 | diff --git a/drivers/target/target_core_alua.c b/drivers/target/target_core_alua.c |
3383 | index ee5b29aed54bd..fa28fd89add6c 100644 |
3384 | --- a/drivers/target/target_core_alua.c |
3385 | +++ b/drivers/target/target_core_alua.c |
3386 | @@ -1735,7 +1735,6 @@ int core_alua_set_tg_pt_gp_id( |
3387 | pr_err("Maximum ALUA alua_tg_pt_gps_count:" |
3388 | " 0x0000ffff reached\n"); |
3389 | spin_unlock(&dev->t10_alua.tg_pt_gps_lock); |
3390 | - kmem_cache_free(t10_alua_tg_pt_gp_cache, tg_pt_gp); |
3391 | return -ENOSPC; |
3392 | } |
3393 | again: |
3394 | diff --git a/drivers/target/target_core_device.c b/drivers/target/target_core_device.c |
3395 | index c3d576ed6f135..d8c3c72da7464 100644 |
3396 | --- a/drivers/target/target_core_device.c |
3397 | +++ b/drivers/target/target_core_device.c |
3398 | @@ -787,6 +787,8 @@ struct se_device *target_alloc_device(struct se_hba *hba, const char *name) |
3399 | INIT_LIST_HEAD(&dev->t10_alua.lba_map_list); |
3400 | spin_lock_init(&dev->t10_alua.lba_map_lock); |
3401 | |
3402 | + INIT_WORK(&dev->delayed_cmd_work, target_do_delayed_work); |
3403 | + |
3404 | dev->t10_wwn.t10_dev = dev; |
3405 | dev->t10_alua.t10_dev = dev; |
3406 | |
3407 | diff --git a/drivers/target/target_core_internal.h b/drivers/target/target_core_internal.h |
3408 | index be52838cc1a88..48a631ab449e9 100644 |
3409 | --- a/drivers/target/target_core_internal.h |
3410 | +++ b/drivers/target/target_core_internal.h |
3411 | @@ -144,6 +144,7 @@ void transport_clear_lun_ref(struct se_lun *); |
3412 | void transport_send_task_abort(struct se_cmd *); |
3413 | sense_reason_t target_cmd_size_check(struct se_cmd *cmd, unsigned int size); |
3414 | void target_qf_do_work(struct work_struct *work); |
3415 | +void target_do_delayed_work(struct work_struct *work); |
3416 | bool target_check_wce(struct se_device *dev); |
3417 | bool target_check_fua(struct se_device *dev); |
3418 | void __target_execute_cmd(struct se_cmd *, bool); |
3419 | diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c |
3420 | index 6afb65387be6c..0e9383fbdd4dc 100644 |
3421 | --- a/drivers/target/target_core_transport.c |
3422 | +++ b/drivers/target/target_core_transport.c |
3423 | @@ -1883,32 +1883,35 @@ static bool target_handle_task_attr(struct se_cmd *cmd) |
3424 | */ |
3425 | switch (cmd->sam_task_attr) { |
3426 | case TCM_HEAD_TAG: |
3427 | + atomic_inc_mb(&dev->non_ordered); |
3428 | pr_debug("Added HEAD_OF_QUEUE for CDB: 0x%02x\n", |
3429 | cmd->t_task_cdb[0]); |
3430 | return false; |
3431 | case TCM_ORDERED_TAG: |
3432 | - atomic_inc_mb(&dev->dev_ordered_sync); |
3433 | + atomic_inc_mb(&dev->delayed_cmd_count); |
3434 | |
3435 | pr_debug("Added ORDERED for CDB: 0x%02x to ordered list\n", |
3436 | cmd->t_task_cdb[0]); |
3437 | - |
3438 | - /* |
3439 | - * Execute an ORDERED command if no other older commands |
3440 | - * exist that need to be completed first. |
3441 | - */ |
3442 | - if (!atomic_read(&dev->simple_cmds)) |
3443 | - return false; |
3444 | break; |
3445 | default: |
3446 | /* |
3447 | * For SIMPLE and UNTAGGED Task Attribute commands |
3448 | */ |
3449 | - atomic_inc_mb(&dev->simple_cmds); |
3450 | + atomic_inc_mb(&dev->non_ordered); |
3451 | + |
3452 | + if (atomic_read(&dev->delayed_cmd_count) == 0) |
3453 | + return false; |
3454 | break; |
3455 | } |
3456 | |
3457 | - if (atomic_read(&dev->dev_ordered_sync) == 0) |
3458 | - return false; |
3459 | + if (cmd->sam_task_attr != TCM_ORDERED_TAG) { |
3460 | + atomic_inc_mb(&dev->delayed_cmd_count); |
3461 | + /* |
3462 | + * We will account for this when we dequeue from the delayed |
3463 | + * list. |
3464 | + */ |
3465 | + atomic_dec_mb(&dev->non_ordered); |
3466 | + } |
3467 | |
3468 | spin_lock(&dev->delayed_cmd_lock); |
3469 | list_add_tail(&cmd->se_delayed_node, &dev->delayed_cmd_list); |
3470 | @@ -1916,6 +1919,12 @@ static bool target_handle_task_attr(struct se_cmd *cmd) |
3471 | |
3472 | pr_debug("Added CDB: 0x%02x Task Attr: 0x%02x to delayed CMD listn", |
3473 | cmd->t_task_cdb[0], cmd->sam_task_attr); |
3474 | + /* |
3475 | + * We may have no non ordered cmds when this function started or we |
3476 | + * could have raced with the last simple/head cmd completing, so kick |
3477 | + * the delayed handler here. |
3478 | + */ |
3479 | + schedule_work(&dev->delayed_cmd_work); |
3480 | return true; |
3481 | } |
3482 | |
3483 | @@ -1966,29 +1975,48 @@ EXPORT_SYMBOL(target_execute_cmd); |
3484 | * Process all commands up to the last received ORDERED task attribute which |
3485 | * requires another blocking boundary |
3486 | */ |
3487 | -static void target_restart_delayed_cmds(struct se_device *dev) |
3488 | +void target_do_delayed_work(struct work_struct *work) |
3489 | { |
3490 | - for (;;) { |
3491 | + struct se_device *dev = container_of(work, struct se_device, |
3492 | + delayed_cmd_work); |
3493 | + |
3494 | + spin_lock(&dev->delayed_cmd_lock); |
3495 | + while (!dev->ordered_sync_in_progress) { |
3496 | struct se_cmd *cmd; |
3497 | |
3498 | - spin_lock(&dev->delayed_cmd_lock); |
3499 | - if (list_empty(&dev->delayed_cmd_list)) { |
3500 | - spin_unlock(&dev->delayed_cmd_lock); |
3501 | + if (list_empty(&dev->delayed_cmd_list)) |
3502 | break; |
3503 | - } |
3504 | |
3505 | cmd = list_entry(dev->delayed_cmd_list.next, |
3506 | struct se_cmd, se_delayed_node); |
3507 | + |
3508 | + if (cmd->sam_task_attr == TCM_ORDERED_TAG) { |
3509 | + /* |
3510 | + * Check if we started with: |
3511 | + * [ordered] [simple] [ordered] |
3512 | + * and we are now at the last ordered so we have to wait |
3513 | + * for the simple cmd. |
3514 | + */ |
3515 | + if (atomic_read(&dev->non_ordered) > 0) |
3516 | + break; |
3517 | + |
3518 | + dev->ordered_sync_in_progress = true; |
3519 | + } |
3520 | + |
3521 | list_del(&cmd->se_delayed_node); |
3522 | + atomic_dec_mb(&dev->delayed_cmd_count); |
3523 | spin_unlock(&dev->delayed_cmd_lock); |
3524 | |
3525 | + if (cmd->sam_task_attr != TCM_ORDERED_TAG) |
3526 | + atomic_inc_mb(&dev->non_ordered); |
3527 | + |
3528 | cmd->transport_state |= CMD_T_SENT; |
3529 | |
3530 | __target_execute_cmd(cmd, true); |
3531 | |
3532 | - if (cmd->sam_task_attr == TCM_ORDERED_TAG) |
3533 | - break; |
3534 | + spin_lock(&dev->delayed_cmd_lock); |
3535 | } |
3536 | + spin_unlock(&dev->delayed_cmd_lock); |
3537 | } |
3538 | |
3539 | /* |
3540 | @@ -2006,16 +2034,19 @@ static void transport_complete_task_attr(struct se_cmd *cmd) |
3541 | goto restart; |
3542 | |
3543 | if (cmd->sam_task_attr == TCM_SIMPLE_TAG) { |
3544 | - atomic_dec_mb(&dev->simple_cmds); |
3545 | + atomic_dec_mb(&dev->non_ordered); |
3546 | dev->dev_cur_ordered_id++; |
3547 | pr_debug("Incremented dev->dev_cur_ordered_id: %u for SIMPLE\n", |
3548 | dev->dev_cur_ordered_id); |
3549 | } else if (cmd->sam_task_attr == TCM_HEAD_TAG) { |
3550 | + atomic_dec_mb(&dev->non_ordered); |
3551 | dev->dev_cur_ordered_id++; |
3552 | pr_debug("Incremented dev_cur_ordered_id: %u for HEAD_OF_QUEUE\n", |
3553 | dev->dev_cur_ordered_id); |
3554 | } else if (cmd->sam_task_attr == TCM_ORDERED_TAG) { |
3555 | - atomic_dec_mb(&dev->dev_ordered_sync); |
3556 | + spin_lock(&dev->delayed_cmd_lock); |
3557 | + dev->ordered_sync_in_progress = false; |
3558 | + spin_unlock(&dev->delayed_cmd_lock); |
3559 | |
3560 | dev->dev_cur_ordered_id++; |
3561 | pr_debug("Incremented dev_cur_ordered_id: %u for ORDERED\n", |
3562 | @@ -2024,7 +2055,8 @@ static void transport_complete_task_attr(struct se_cmd *cmd) |
3563 | cmd->se_cmd_flags &= ~SCF_TASK_ATTR_SET; |
3564 | |
3565 | restart: |
3566 | - target_restart_delayed_cmds(dev); |
3567 | + if (atomic_read(&dev->delayed_cmd_count) > 0) |
3568 | + schedule_work(&dev->delayed_cmd_work); |
3569 | } |
3570 | |
3571 | static void transport_complete_qf(struct se_cmd *cmd) |
3572 | diff --git a/drivers/tty/serial/8250/8250_dw.c b/drivers/tty/serial/8250/8250_dw.c |
3573 | index 22d65a33059e1..aa9cc5e1c91cc 100644 |
3574 | --- a/drivers/tty/serial/8250/8250_dw.c |
3575 | +++ b/drivers/tty/serial/8250/8250_dw.c |
3576 | @@ -637,7 +637,7 @@ static struct platform_driver dw8250_platform_driver = { |
3577 | .name = "dw-apb-uart", |
3578 | .pm = &dw8250_pm_ops, |
3579 | .of_match_table = dw8250_of_match, |
3580 | - .acpi_match_table = ACPI_PTR(dw8250_acpi_match), |
3581 | + .acpi_match_table = dw8250_acpi_match, |
3582 | }, |
3583 | .probe = dw8250_probe, |
3584 | .remove = dw8250_remove, |
3585 | diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c |
3586 | index 74a1a97a77b28..bbba2174d6e75 100644 |
3587 | --- a/drivers/tty/serial/serial_core.c |
3588 | +++ b/drivers/tty/serial/serial_core.c |
3589 | @@ -209,7 +209,11 @@ static int uart_port_startup(struct tty_struct *tty, struct uart_state *state, |
3590 | if (retval == 0) { |
3591 | if (uart_console(uport) && uport->cons->cflag) { |
3592 | tty->termios.c_cflag = uport->cons->cflag; |
3593 | + tty->termios.c_ispeed = uport->cons->ispeed; |
3594 | + tty->termios.c_ospeed = uport->cons->ospeed; |
3595 | uport->cons->cflag = 0; |
3596 | + uport->cons->ispeed = 0; |
3597 | + uport->cons->ospeed = 0; |
3598 | } |
3599 | /* |
3600 | * Initialise the hardware port settings. |
3601 | @@ -277,8 +281,11 @@ static void uart_shutdown(struct tty_struct *tty, struct uart_state *state) |
3602 | /* |
3603 | * Turn off DTR and RTS early. |
3604 | */ |
3605 | - if (uport && uart_console(uport) && tty) |
3606 | + if (uport && uart_console(uport) && tty) { |
3607 | uport->cons->cflag = tty->termios.c_cflag; |
3608 | + uport->cons->ispeed = tty->termios.c_ispeed; |
3609 | + uport->cons->ospeed = tty->termios.c_ospeed; |
3610 | + } |
3611 | |
3612 | if (!tty || C_HUPCL(tty)) |
3613 | uart_clear_mctrl(uport, TIOCM_DTR | TIOCM_RTS); |
3614 | @@ -2059,8 +2066,11 @@ uart_set_options(struct uart_port *port, struct console *co, |
3615 | * Allow the setting of the UART parameters with a NULL console |
3616 | * too: |
3617 | */ |
3618 | - if (co) |
3619 | + if (co) { |
3620 | co->cflag = termios.c_cflag; |
3621 | + co->ispeed = termios.c_ispeed; |
3622 | + co->ospeed = termios.c_ospeed; |
3623 | + } |
3624 | |
3625 | return 0; |
3626 | } |
3627 | @@ -2198,6 +2208,8 @@ int uart_resume_port(struct uart_driver *drv, struct uart_port *uport) |
3628 | */ |
3629 | memset(&termios, 0, sizeof(struct ktermios)); |
3630 | termios.c_cflag = uport->cons->cflag; |
3631 | + termios.c_ispeed = uport->cons->ispeed; |
3632 | + termios.c_ospeed = uport->cons->ospeed; |
3633 | |
3634 | /* |
3635 | * If that's unset, use the tty termios setting. |
3636 | diff --git a/drivers/tty/serial/xilinx_uartps.c b/drivers/tty/serial/xilinx_uartps.c |
3637 | index eb61a07fcbbc3..b92700fdfd512 100644 |
3638 | --- a/drivers/tty/serial/xilinx_uartps.c |
3639 | +++ b/drivers/tty/serial/xilinx_uartps.c |
3640 | @@ -589,9 +589,10 @@ static void cdns_uart_start_tx(struct uart_port *port) |
3641 | if (uart_circ_empty(&port->state->xmit)) |
3642 | return; |
3643 | |
3644 | + writel(CDNS_UART_IXR_TXEMPTY, port->membase + CDNS_UART_ISR); |
3645 | + |
3646 | cdns_uart_handle_tx(port); |
3647 | |
3648 | - writel(CDNS_UART_IXR_TXEMPTY, port->membase + CDNS_UART_ISR); |
3649 | /* Enable the TX Empty interrupt */ |
3650 | writel(CDNS_UART_IXR_TXEMPTY, port->membase + CDNS_UART_IER); |
3651 | } |
3652 | diff --git a/drivers/tty/tty_buffer.c b/drivers/tty/tty_buffer.c |
3653 | index ca9c82ee6c35d..dfccc102c1ddd 100644 |
3654 | --- a/drivers/tty/tty_buffer.c |
3655 | +++ b/drivers/tty/tty_buffer.c |
3656 | @@ -536,6 +536,9 @@ static void flush_to_ldisc(struct work_struct *work) |
3657 | if (!count) |
3658 | break; |
3659 | head->read += count; |
3660 | + |
3661 | + if (need_resched()) |
3662 | + cond_resched(); |
3663 | } |
3664 | |
3665 | mutex_unlock(&buf->lock); |
3666 | diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c |
3667 | index 6062a5d816a63..f4b13f0637ea3 100644 |
3668 | --- a/drivers/usb/chipidea/core.c |
3669 | +++ b/drivers/usb/chipidea/core.c |
3670 | @@ -516,7 +516,7 @@ int hw_device_reset(struct ci_hdrc *ci) |
3671 | return 0; |
3672 | } |
3673 | |
3674 | -static irqreturn_t ci_irq(int irq, void *data) |
3675 | +static irqreturn_t ci_irq_handler(int irq, void *data) |
3676 | { |
3677 | struct ci_hdrc *ci = data; |
3678 | irqreturn_t ret = IRQ_NONE; |
3679 | @@ -569,6 +569,15 @@ static irqreturn_t ci_irq(int irq, void *data) |
3680 | return ret; |
3681 | } |
3682 | |
3683 | +static void ci_irq(struct ci_hdrc *ci) |
3684 | +{ |
3685 | + unsigned long flags; |
3686 | + |
3687 | + local_irq_save(flags); |
3688 | + ci_irq_handler(ci->irq, ci); |
3689 | + local_irq_restore(flags); |
3690 | +} |
3691 | + |
3692 | static int ci_vbus_notifier(struct notifier_block *nb, unsigned long event, |
3693 | void *ptr) |
3694 | { |
3695 | @@ -582,7 +591,7 @@ static int ci_vbus_notifier(struct notifier_block *nb, unsigned long event, |
3696 | |
3697 | vbus->changed = true; |
3698 | |
3699 | - ci_irq(ci->irq, ci); |
3700 | + ci_irq(ci); |
3701 | return NOTIFY_DONE; |
3702 | } |
3703 | |
3704 | @@ -599,7 +608,7 @@ static int ci_id_notifier(struct notifier_block *nb, unsigned long event, |
3705 | |
3706 | id->changed = true; |
3707 | |
3708 | - ci_irq(ci->irq, ci); |
3709 | + ci_irq(ci); |
3710 | return NOTIFY_DONE; |
3711 | } |
3712 | |
3713 | @@ -1011,7 +1020,7 @@ static int ci_hdrc_probe(struct platform_device *pdev) |
3714 | } |
3715 | |
3716 | platform_set_drvdata(pdev, ci); |
3717 | - ret = devm_request_irq(dev, ci->irq, ci_irq, IRQF_SHARED, |
3718 | + ret = devm_request_irq(dev, ci->irq, ci_irq_handler, IRQF_SHARED, |
3719 | ci->platdata->name, ci); |
3720 | if (ret) |
3721 | goto stop; |
3722 | @@ -1126,11 +1135,11 @@ static void ci_extcon_wakeup_int(struct ci_hdrc *ci) |
3723 | |
3724 | if (!IS_ERR(cable_id->edev) && ci->is_otg && |
3725 | (otgsc & OTGSC_IDIE) && (otgsc & OTGSC_IDIS)) |
3726 | - ci_irq(ci->irq, ci); |
3727 | + ci_irq(ci); |
3728 | |
3729 | if (!IS_ERR(cable_vbus->edev) && ci->is_otg && |
3730 | (otgsc & OTGSC_BSVIE) && (otgsc & OTGSC_BSVIS)) |
3731 | - ci_irq(ci->irq, ci); |
3732 | + ci_irq(ci); |
3733 | } |
3734 | |
3735 | static int ci_controller_resume(struct device *dev) |
3736 | diff --git a/drivers/usb/gadget/legacy/hid.c b/drivers/usb/gadget/legacy/hid.c |
3737 | index cccbb948821b2..a55d3761d777c 100644 |
3738 | --- a/drivers/usb/gadget/legacy/hid.c |
3739 | +++ b/drivers/usb/gadget/legacy/hid.c |
3740 | @@ -103,8 +103,10 @@ static int do_config(struct usb_configuration *c) |
3741 | |
3742 | list_for_each_entry(e, &hidg_func_list, node) { |
3743 | e->f = usb_get_function(e->fi); |
3744 | - if (IS_ERR(e->f)) |
3745 | + if (IS_ERR(e->f)) { |
3746 | + status = PTR_ERR(e->f); |
3747 | goto put; |
3748 | + } |
3749 | status = usb_add_function(c, e->f); |
3750 | if (status < 0) { |
3751 | usb_put_function(e->f); |
3752 | diff --git a/drivers/usb/host/max3421-hcd.c b/drivers/usb/host/max3421-hcd.c |
3753 | index 1654a1bc64141..88aa5acac6fd9 100644 |
3754 | --- a/drivers/usb/host/max3421-hcd.c |
3755 | +++ b/drivers/usb/host/max3421-hcd.c |
3756 | @@ -121,8 +121,6 @@ struct max3421_hcd { |
3757 | |
3758 | struct task_struct *spi_thread; |
3759 | |
3760 | - struct max3421_hcd *next; |
3761 | - |
3762 | enum max3421_rh_state rh_state; |
3763 | /* lower 16 bits contain port status, upper 16 bits the change mask: */ |
3764 | u32 port_status; |
3765 | @@ -170,8 +168,6 @@ struct max3421_ep { |
3766 | u8 retransmit; /* packet needs retransmission */ |
3767 | }; |
3768 | |
3769 | -static struct max3421_hcd *max3421_hcd_list; |
3770 | - |
3771 | #define MAX3421_FIFO_SIZE 64 |
3772 | |
3773 | #define MAX3421_SPI_DIR_RD 0 /* read register from MAX3421 */ |
3774 | @@ -1835,9 +1831,8 @@ max3421_probe(struct spi_device *spi) |
3775 | } |
3776 | set_bit(HCD_FLAG_POLL_RH, &hcd->flags); |
3777 | max3421_hcd = hcd_to_max3421(hcd); |
3778 | - max3421_hcd->next = max3421_hcd_list; |
3779 | - max3421_hcd_list = max3421_hcd; |
3780 | INIT_LIST_HEAD(&max3421_hcd->ep_list); |
3781 | + spi_set_drvdata(spi, max3421_hcd); |
3782 | |
3783 | max3421_hcd->tx = kmalloc(sizeof(*max3421_hcd->tx), GFP_KERNEL); |
3784 | if (!max3421_hcd->tx) |
3785 | @@ -1882,28 +1877,18 @@ error: |
3786 | static int |
3787 | max3421_remove(struct spi_device *spi) |
3788 | { |
3789 | - struct max3421_hcd *max3421_hcd = NULL, **prev; |
3790 | - struct usb_hcd *hcd = NULL; |
3791 | + struct max3421_hcd *max3421_hcd; |
3792 | + struct usb_hcd *hcd; |
3793 | unsigned long flags; |
3794 | |
3795 | - for (prev = &max3421_hcd_list; *prev; prev = &(*prev)->next) { |
3796 | - max3421_hcd = *prev; |
3797 | - hcd = max3421_to_hcd(max3421_hcd); |
3798 | - if (hcd->self.controller == &spi->dev) |
3799 | - break; |
3800 | - } |
3801 | - if (!max3421_hcd) { |
3802 | - dev_err(&spi->dev, "no MAX3421 HCD found for SPI device %p\n", |
3803 | - spi); |
3804 | - return -ENODEV; |
3805 | - } |
3806 | + max3421_hcd = spi_get_drvdata(spi); |
3807 | + hcd = max3421_to_hcd(max3421_hcd); |
3808 | |
3809 | usb_remove_hcd(hcd); |
3810 | |
3811 | spin_lock_irqsave(&max3421_hcd->lock, flags); |
3812 | |
3813 | kthread_stop(max3421_hcd->spi_thread); |
3814 | - *prev = max3421_hcd->next; |
3815 | |
3816 | spin_unlock_irqrestore(&max3421_hcd->lock, flags); |
3817 | |
3818 | diff --git a/drivers/usb/host/ohci-tmio.c b/drivers/usb/host/ohci-tmio.c |
3819 | index 9c9e97294c18d..4d42ae3b2fd6d 100644 |
3820 | --- a/drivers/usb/host/ohci-tmio.c |
3821 | +++ b/drivers/usb/host/ohci-tmio.c |
3822 | @@ -199,7 +199,7 @@ static int ohci_hcd_tmio_drv_probe(struct platform_device *dev) |
3823 | if (usb_disabled()) |
3824 | return -ENODEV; |
3825 | |
3826 | - if (!cell) |
3827 | + if (!cell || !regs || !config || !sram) |
3828 | return -EINVAL; |
3829 | |
3830 | if (irq < 0) |
3831 | diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c |
3832 | index dc8f54a68bdbc..9708dbb52b702 100644 |
3833 | --- a/drivers/usb/host/xhci-hub.c |
3834 | +++ b/drivers/usb/host/xhci-hub.c |
3835 | @@ -174,7 +174,6 @@ static void xhci_common_hub_descriptor(struct xhci_hcd *xhci, |
3836 | { |
3837 | u16 temp; |
3838 | |
3839 | - desc->bPwrOn2PwrGood = 10; /* xhci section 5.4.9 says 20ms max */ |
3840 | desc->bHubContrCurrent = 0; |
3841 | |
3842 | desc->bNbrPorts = ports; |
3843 | @@ -208,6 +207,7 @@ static void xhci_usb2_hub_descriptor(struct usb_hcd *hcd, struct xhci_hcd *xhci, |
3844 | desc->bDescriptorType = USB_DT_HUB; |
3845 | temp = 1 + (ports / 8); |
3846 | desc->bDescLength = USB_DT_HUB_NONVAR_SIZE + 2 * temp; |
3847 | + desc->bPwrOn2PwrGood = 10; /* xhci section 5.4.8 says 20ms */ |
3848 | |
3849 | /* The Device Removable bits are reported on a byte granularity. |
3850 | * If the port doesn't exist within that byte, the bit is set to 0. |
3851 | @@ -258,6 +258,7 @@ static void xhci_usb3_hub_descriptor(struct usb_hcd *hcd, struct xhci_hcd *xhci, |
3852 | xhci_common_hub_descriptor(xhci, desc, ports); |
3853 | desc->bDescriptorType = USB_DT_SS_HUB; |
3854 | desc->bDescLength = USB_DT_SS_HUB_SIZE; |
3855 | + desc->bPwrOn2PwrGood = 50; /* usb 3.1 may fail if less than 100ms */ |
3856 | |
3857 | /* header decode latency should be zero for roothubs, |
3858 | * see section 4.23.5.2. |
3859 | diff --git a/drivers/usb/misc/iowarrior.c b/drivers/usb/misc/iowarrior.c |
3860 | index 1b83946bfb18d..1ea48590bf3b1 100644 |
3861 | --- a/drivers/usb/misc/iowarrior.c |
3862 | +++ b/drivers/usb/misc/iowarrior.c |
3863 | @@ -96,10 +96,6 @@ struct iowarrior { |
3864 | /* globals */ |
3865 | /*--------------*/ |
3866 | |
3867 | -/* |
3868 | - * USB spec identifies 5 second timeouts. |
3869 | - */ |
3870 | -#define GET_TIMEOUT 5 |
3871 | #define USB_REQ_GET_REPORT 0x01 |
3872 | //#if 0 |
3873 | static int usb_get_report(struct usb_device *dev, |
3874 | @@ -111,7 +107,7 @@ static int usb_get_report(struct usb_device *dev, |
3875 | USB_DIR_IN | USB_TYPE_CLASS | |
3876 | USB_RECIP_INTERFACE, (type << 8) + id, |
3877 | inter->desc.bInterfaceNumber, buf, size, |
3878 | - GET_TIMEOUT*HZ); |
3879 | + USB_CTRL_GET_TIMEOUT); |
3880 | } |
3881 | //#endif |
3882 | |
3883 | @@ -126,7 +122,7 @@ static int usb_set_report(struct usb_interface *intf, unsigned char type, |
3884 | USB_TYPE_CLASS | USB_RECIP_INTERFACE, |
3885 | (type << 8) + id, |
3886 | intf->cur_altsetting->desc.bInterfaceNumber, buf, |
3887 | - size, HZ); |
3888 | + size, 1000); |
3889 | } |
3890 | |
3891 | /*---------------------*/ |
3892 | diff --git a/drivers/usb/musb/tusb6010.c b/drivers/usb/musb/tusb6010.c |
3893 | index 7e9204fdba4a8..fb4239b5286fb 100644 |
3894 | --- a/drivers/usb/musb/tusb6010.c |
3895 | +++ b/drivers/usb/musb/tusb6010.c |
3896 | @@ -1120,6 +1120,11 @@ static int tusb_musb_init(struct musb *musb) |
3897 | |
3898 | /* dma address for async dma */ |
3899 | mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
3900 | + if (!mem) { |
3901 | + pr_debug("no async dma resource?\n"); |
3902 | + ret = -ENODEV; |
3903 | + goto done; |
3904 | + } |
3905 | musb->async = mem->start; |
3906 | |
3907 | /* dma address for sync dma */ |
3908 | diff --git a/drivers/usb/serial/keyspan.c b/drivers/usb/serial/keyspan.c |
3909 | index e08755e9b6129..9c825d4e564e8 100644 |
3910 | --- a/drivers/usb/serial/keyspan.c |
3911 | +++ b/drivers/usb/serial/keyspan.c |
3912 | @@ -2419,22 +2419,22 @@ static int keyspan_port_probe(struct usb_serial_port *port) |
3913 | for (i = 0; i < ARRAY_SIZE(p_priv->in_buffer); ++i) { |
3914 | p_priv->in_buffer[i] = kzalloc(IN_BUFLEN, GFP_KERNEL); |
3915 | if (!p_priv->in_buffer[i]) |
3916 | - goto err_in_buffer; |
3917 | + goto err_free_in_buffer; |
3918 | } |
3919 | |
3920 | for (i = 0; i < ARRAY_SIZE(p_priv->out_buffer); ++i) { |
3921 | p_priv->out_buffer[i] = kzalloc(OUT_BUFLEN, GFP_KERNEL); |
3922 | if (!p_priv->out_buffer[i]) |
3923 | - goto err_out_buffer; |
3924 | + goto err_free_out_buffer; |
3925 | } |
3926 | |
3927 | p_priv->inack_buffer = kzalloc(INACK_BUFLEN, GFP_KERNEL); |
3928 | if (!p_priv->inack_buffer) |
3929 | - goto err_inack_buffer; |
3930 | + goto err_free_out_buffer; |
3931 | |
3932 | p_priv->outcont_buffer = kzalloc(OUTCONT_BUFLEN, GFP_KERNEL); |
3933 | if (!p_priv->outcont_buffer) |
3934 | - goto err_outcont_buffer; |
3935 | + goto err_free_inack_buffer; |
3936 | |
3937 | p_priv->device_details = d_details; |
3938 | |
3939 | @@ -2480,15 +2480,14 @@ static int keyspan_port_probe(struct usb_serial_port *port) |
3940 | |
3941 | return 0; |
3942 | |
3943 | -err_outcont_buffer: |
3944 | +err_free_inack_buffer: |
3945 | kfree(p_priv->inack_buffer); |
3946 | -err_inack_buffer: |
3947 | +err_free_out_buffer: |
3948 | for (i = 0; i < ARRAY_SIZE(p_priv->out_buffer); ++i) |
3949 | kfree(p_priv->out_buffer[i]); |
3950 | -err_out_buffer: |
3951 | +err_free_in_buffer: |
3952 | for (i = 0; i < ARRAY_SIZE(p_priv->in_buffer); ++i) |
3953 | kfree(p_priv->in_buffer[i]); |
3954 | -err_in_buffer: |
3955 | kfree(p_priv); |
3956 | |
3957 | return -ENOMEM; |
3958 | diff --git a/drivers/video/console/sticon.c b/drivers/video/console/sticon.c |
3959 | index 3a10ac19598fa..8827e0ec5995c 100644 |
3960 | --- a/drivers/video/console/sticon.c |
3961 | +++ b/drivers/video/console/sticon.c |
3962 | @@ -290,13 +290,13 @@ static unsigned long sticon_getxy(struct vc_data *conp, unsigned long pos, |
3963 | static u8 sticon_build_attr(struct vc_data *conp, u8 color, u8 intens, |
3964 | u8 blink, u8 underline, u8 reverse, u8 italic) |
3965 | { |
3966 | - u8 attr = ((color & 0x70) >> 1) | ((color & 7)); |
3967 | + u8 fg = color & 7; |
3968 | + u8 bg = (color & 0x70) >> 4; |
3969 | |
3970 | - if (reverse) { |
3971 | - color = ((color >> 3) & 0x7) | ((color & 0x7) << 3); |
3972 | - } |
3973 | - |
3974 | - return attr; |
3975 | + if (reverse) |
3976 | + return (fg << 3) | bg; |
3977 | + else |
3978 | + return (bg << 3) | fg; |
3979 | } |
3980 | |
3981 | static void sticon_invert_region(struct vc_data *conp, u16 *p, int count) |
3982 | diff --git a/drivers/video/fbdev/chipsfb.c b/drivers/video/fbdev/chipsfb.c |
3983 | index 314b7eceb81c5..84a3778552eba 100644 |
3984 | --- a/drivers/video/fbdev/chipsfb.c |
3985 | +++ b/drivers/video/fbdev/chipsfb.c |
3986 | @@ -332,7 +332,7 @@ static struct fb_var_screeninfo chipsfb_var = { |
3987 | |
3988 | static void init_chips(struct fb_info *p, unsigned long addr) |
3989 | { |
3990 | - memset(p->screen_base, 0, 0x100000); |
3991 | + fb_memset(p->screen_base, 0, 0x100000); |
3992 | |
3993 | p->fix = chipsfb_fix; |
3994 | p->fix.smem_start = addr; |
3995 | diff --git a/drivers/watchdog/f71808e_wdt.c b/drivers/watchdog/f71808e_wdt.c |
3996 | index ae4974701e5c7..6fe9daf2367b5 100644 |
3997 | --- a/drivers/watchdog/f71808e_wdt.c |
3998 | +++ b/drivers/watchdog/f71808e_wdt.c |
3999 | @@ -237,15 +237,17 @@ static int watchdog_set_timeout(int timeout) |
4000 | |
4001 | mutex_lock(&watchdog.lock); |
4002 | |
4003 | - watchdog.timeout = timeout; |
4004 | if (timeout > 0xff) { |
4005 | watchdog.timer_val = DIV_ROUND_UP(timeout, 60); |
4006 | watchdog.minutes_mode = true; |
4007 | + timeout = watchdog.timer_val * 60; |
4008 | } else { |
4009 | watchdog.timer_val = timeout; |
4010 | watchdog.minutes_mode = false; |
4011 | } |
4012 | |
4013 | + watchdog.timeout = timeout; |
4014 | + |
4015 | mutex_unlock(&watchdog.lock); |
4016 | |
4017 | return 0; |
4018 | diff --git a/drivers/watchdog/omap_wdt.c b/drivers/watchdog/omap_wdt.c |
4019 | index 1b02bfa81b296..40c006ee8492d 100644 |
4020 | --- a/drivers/watchdog/omap_wdt.c |
4021 | +++ b/drivers/watchdog/omap_wdt.c |
4022 | @@ -271,8 +271,12 @@ static int omap_wdt_probe(struct platform_device *pdev) |
4023 | wdev->wdog.bootstatus = WDIOF_CARDRESET; |
4024 | } |
4025 | |
4026 | - if (!early_enable) |
4027 | + if (early_enable) { |
4028 | + omap_wdt_start(&wdev->wdog); |
4029 | + set_bit(WDOG_HW_RUNNING, &wdev->wdog.status); |
4030 | + } else { |
4031 | omap_wdt_disable(wdev); |
4032 | + } |
4033 | |
4034 | ret = watchdog_register_device(&wdev->wdog); |
4035 | if (ret) { |
4036 | diff --git a/drivers/xen/xen-pciback/conf_space_capability.c b/drivers/xen/xen-pciback/conf_space_capability.c |
4037 | index b1a1d7de0894e..daa2e89a50fa3 100644 |
4038 | --- a/drivers/xen/xen-pciback/conf_space_capability.c |
4039 | +++ b/drivers/xen/xen-pciback/conf_space_capability.c |
4040 | @@ -159,7 +159,7 @@ static void *pm_ctrl_init(struct pci_dev *dev, int offset) |
4041 | } |
4042 | |
4043 | out: |
4044 | - return ERR_PTR(err); |
4045 | + return err ? ERR_PTR(err) : NULL; |
4046 | } |
4047 | |
4048 | static const struct config_field caplist_pm[] = { |
4049 | diff --git a/fs/btrfs/async-thread.c b/fs/btrfs/async-thread.c |
4050 | index 5456937836b86..033cb85ce9b51 100644 |
4051 | --- a/fs/btrfs/async-thread.c |
4052 | +++ b/fs/btrfs/async-thread.c |
4053 | @@ -283,6 +283,13 @@ static void run_ordered_work(struct __btrfs_workqueue *wq, |
4054 | ordered_list); |
4055 | if (!test_bit(WORK_DONE_BIT, &work->flags)) |
4056 | break; |
4057 | + /* |
4058 | + * Orders all subsequent loads after reading WORK_DONE_BIT, |
4059 | + * paired with the smp_mb__before_atomic in btrfs_work_helper |
4060 | + * this guarantees that the ordered function will see all |
4061 | + * updates from ordinary work function. |
4062 | + */ |
4063 | + smp_rmb(); |
4064 | |
4065 | /* |
4066 | * we are going to call the ordered done function, but |
4067 | @@ -368,6 +375,13 @@ static void normal_work_helper(struct btrfs_work *work) |
4068 | thresh_exec_hook(wq); |
4069 | work->func(work); |
4070 | if (need_order) { |
4071 | + /* |
4072 | + * Ensures all memory accesses done in the work function are |
4073 | + * ordered before setting the WORK_DONE_BIT. Ensuring the thread |
4074 | + * which is going to executed the ordered work sees them. |
4075 | + * Pairs with the smp_rmb in run_ordered_work. |
4076 | + */ |
4077 | + smp_mb__before_atomic(); |
4078 | set_bit(WORK_DONE_BIT, &work->flags); |
4079 | run_ordered_work(wq, work); |
4080 | } |
4081 | diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c |
4082 | index 11ecd798864c8..cc91b0c564a38 100644 |
4083 | --- a/fs/btrfs/tree-log.c |
4084 | +++ b/fs/btrfs/tree-log.c |
4085 | @@ -2225,7 +2225,9 @@ again: |
4086 | else { |
4087 | ret = find_dir_range(log, path, dirid, key_type, |
4088 | &range_start, &range_end); |
4089 | - if (ret != 0) |
4090 | + if (ret < 0) |
4091 | + goto out; |
4092 | + else if (ret > 0) |
4093 | break; |
4094 | } |
4095 | |
4096 | diff --git a/fs/jfs/jfs_mount.c b/fs/jfs/jfs_mount.c |
4097 | index 103788ecc28c1..0c2aabba1fdbb 100644 |
4098 | --- a/fs/jfs/jfs_mount.c |
4099 | +++ b/fs/jfs/jfs_mount.c |
4100 | @@ -93,14 +93,14 @@ int jfs_mount(struct super_block *sb) |
4101 | * (initialize mount inode from the superblock) |
4102 | */ |
4103 | if ((rc = chkSuper(sb))) { |
4104 | - goto errout20; |
4105 | + goto out; |
4106 | } |
4107 | |
4108 | ipaimap = diReadSpecial(sb, AGGREGATE_I, 0); |
4109 | if (ipaimap == NULL) { |
4110 | jfs_err("jfs_mount: Failed to read AGGREGATE_I"); |
4111 | rc = -EIO; |
4112 | - goto errout20; |
4113 | + goto out; |
4114 | } |
4115 | sbi->ipaimap = ipaimap; |
4116 | |
4117 | @@ -111,7 +111,7 @@ int jfs_mount(struct super_block *sb) |
4118 | */ |
4119 | if ((rc = diMount(ipaimap))) { |
4120 | jfs_err("jfs_mount: diMount(ipaimap) failed w/rc = %d", rc); |
4121 | - goto errout21; |
4122 | + goto err_ipaimap; |
4123 | } |
4124 | |
4125 | /* |
4126 | @@ -120,7 +120,7 @@ int jfs_mount(struct super_block *sb) |
4127 | ipbmap = diReadSpecial(sb, BMAP_I, 0); |
4128 | if (ipbmap == NULL) { |
4129 | rc = -EIO; |
4130 | - goto errout22; |
4131 | + goto err_umount_ipaimap; |
4132 | } |
4133 | |
4134 | jfs_info("jfs_mount: ipbmap:0x%p", ipbmap); |
4135 | @@ -132,7 +132,7 @@ int jfs_mount(struct super_block *sb) |
4136 | */ |
4137 | if ((rc = dbMount(ipbmap))) { |
4138 | jfs_err("jfs_mount: dbMount failed w/rc = %d", rc); |
4139 | - goto errout22; |
4140 | + goto err_ipbmap; |
4141 | } |
4142 | |
4143 | /* |
4144 | @@ -151,7 +151,7 @@ int jfs_mount(struct super_block *sb) |
4145 | if (!ipaimap2) { |
4146 | jfs_err("jfs_mount: Failed to read AGGREGATE_I"); |
4147 | rc = -EIO; |
4148 | - goto errout35; |
4149 | + goto err_umount_ipbmap; |
4150 | } |
4151 | sbi->ipaimap2 = ipaimap2; |
4152 | |
4153 | @@ -163,7 +163,7 @@ int jfs_mount(struct super_block *sb) |
4154 | if ((rc = diMount(ipaimap2))) { |
4155 | jfs_err("jfs_mount: diMount(ipaimap2) failed, rc = %d", |
4156 | rc); |
4157 | - goto errout35; |
4158 | + goto err_ipaimap2; |
4159 | } |
4160 | } else |
4161 | /* Secondary aggregate inode table is not valid */ |
4162 | @@ -180,7 +180,7 @@ int jfs_mount(struct super_block *sb) |
4163 | jfs_err("jfs_mount: Failed to read FILESYSTEM_I"); |
4164 | /* open fileset secondary inode allocation map */ |
4165 | rc = -EIO; |
4166 | - goto errout40; |
4167 | + goto err_umount_ipaimap2; |
4168 | } |
4169 | jfs_info("jfs_mount: ipimap:0x%p", ipimap); |
4170 | |
4171 | @@ -190,41 +190,34 @@ int jfs_mount(struct super_block *sb) |
4172 | /* initialize fileset inode allocation map */ |
4173 | if ((rc = diMount(ipimap))) { |
4174 | jfs_err("jfs_mount: diMount failed w/rc = %d", rc); |
4175 | - goto errout41; |
4176 | + goto err_ipimap; |
4177 | } |
4178 | |
4179 | - goto out; |
4180 | + return rc; |
4181 | |
4182 | /* |
4183 | * unwind on error |
4184 | */ |
4185 | - errout41: /* close fileset inode allocation map inode */ |
4186 | +err_ipimap: |
4187 | + /* close fileset inode allocation map inode */ |
4188 | diFreeSpecial(ipimap); |
4189 | - |
4190 | - errout40: /* fileset closed */ |
4191 | - |
4192 | +err_umount_ipaimap2: |
4193 | /* close secondary aggregate inode allocation map */ |
4194 | - if (ipaimap2) { |
4195 | + if (ipaimap2) |
4196 | diUnmount(ipaimap2, 1); |
4197 | +err_ipaimap2: |
4198 | + /* close aggregate inodes */ |
4199 | + if (ipaimap2) |
4200 | diFreeSpecial(ipaimap2); |
4201 | - } |
4202 | - |
4203 | - errout35: |
4204 | - |
4205 | - /* close aggregate block allocation map */ |
4206 | +err_umount_ipbmap: /* close aggregate block allocation map */ |
4207 | dbUnmount(ipbmap, 1); |
4208 | +err_ipbmap: /* close aggregate inodes */ |
4209 | diFreeSpecial(ipbmap); |
4210 | - |
4211 | - errout22: /* close aggregate inode allocation map */ |
4212 | - |
4213 | +err_umount_ipaimap: /* close aggregate inode allocation map */ |
4214 | diUnmount(ipaimap, 1); |
4215 | - |
4216 | - errout21: /* close aggregate inodes */ |
4217 | +err_ipaimap: /* close aggregate inodes */ |
4218 | diFreeSpecial(ipaimap); |
4219 | - errout20: /* aggregate closed */ |
4220 | - |
4221 | - out: |
4222 | - |
4223 | +out: |
4224 | if (rc) |
4225 | jfs_err("Mount JFS Failure: %d", rc); |
4226 | |
4227 | diff --git a/fs/nfs/flexfilelayout/flexfilelayoutdev.c b/fs/nfs/flexfilelayout/flexfilelayoutdev.c |
4228 | index c8863563c6350..287ed99a7e513 100644 |
4229 | --- a/fs/nfs/flexfilelayout/flexfilelayoutdev.c |
4230 | +++ b/fs/nfs/flexfilelayout/flexfilelayoutdev.c |
4231 | @@ -383,10 +383,10 @@ nfs4_ff_layout_prepare_ds(struct pnfs_layout_segment *lseg, u32 ds_idx, |
4232 | goto out_fail; |
4233 | |
4234 | ds = mirror->mirror_ds->ds; |
4235 | + if (READ_ONCE(ds->ds_clp)) |
4236 | + goto out; |
4237 | /* matching smp_wmb() in _nfs4_pnfs_v3/4_ds_connect */ |
4238 | smp_rmb(); |
4239 | - if (ds->ds_clp) |
4240 | - goto out; |
4241 | |
4242 | /* FIXME: For now we assume the server sent only one version of NFS |
4243 | * to use for the DS. |
4244 | diff --git a/fs/nfs/pnfs_nfs.c b/fs/nfs/pnfs_nfs.c |
4245 | index 53b4705abcc76..1f2da20946640 100644 |
4246 | --- a/fs/nfs/pnfs_nfs.c |
4247 | +++ b/fs/nfs/pnfs_nfs.c |
4248 | @@ -666,7 +666,7 @@ static int _nfs4_pnfs_v3_ds_connect(struct nfs_server *mds_srv, |
4249 | } |
4250 | |
4251 | smp_wmb(); |
4252 | - ds->ds_clp = clp; |
4253 | + WRITE_ONCE(ds->ds_clp, clp); |
4254 | dprintk("%s [new] addr: %s\n", __func__, ds->ds_remotestr); |
4255 | out: |
4256 | return status; |
4257 | @@ -742,7 +742,7 @@ static int _nfs4_pnfs_v4_ds_connect(struct nfs_server *mds_srv, |
4258 | } |
4259 | |
4260 | smp_wmb(); |
4261 | - ds->ds_clp = clp; |
4262 | + WRITE_ONCE(ds->ds_clp, clp); |
4263 | dprintk("%s [new] addr: %s\n", __func__, ds->ds_remotestr); |
4264 | out: |
4265 | return status; |
4266 | diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c |
4267 | index d526e86cf5bbe..f584ef6e754a7 100644 |
4268 | --- a/fs/ocfs2/file.c |
4269 | +++ b/fs/ocfs2/file.c |
4270 | @@ -490,10 +490,11 @@ int ocfs2_truncate_file(struct inode *inode, |
4271 | * greater than page size, so we have to truncate them |
4272 | * anyway. |
4273 | */ |
4274 | - unmap_mapping_range(inode->i_mapping, new_i_size + PAGE_SIZE - 1, 0, 1); |
4275 | - truncate_inode_pages(inode->i_mapping, new_i_size); |
4276 | |
4277 | if (OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL) { |
4278 | + unmap_mapping_range(inode->i_mapping, |
4279 | + new_i_size + PAGE_SIZE - 1, 0, 1); |
4280 | + truncate_inode_pages(inode->i_mapping, new_i_size); |
4281 | status = ocfs2_truncate_inline(inode, di_bh, new_i_size, |
4282 | i_size_read(inode), 1); |
4283 | if (status) |
4284 | @@ -512,6 +513,9 @@ int ocfs2_truncate_file(struct inode *inode, |
4285 | goto bail_unlock_sem; |
4286 | } |
4287 | |
4288 | + unmap_mapping_range(inode->i_mapping, new_i_size + PAGE_SIZE - 1, 0, 1); |
4289 | + truncate_inode_pages(inode->i_mapping, new_i_size); |
4290 | + |
4291 | status = ocfs2_commit_truncate(osb, inode, di_bh); |
4292 | if (status < 0) { |
4293 | mlog_errno(status); |
4294 | diff --git a/fs/orangefs/dcache.c b/fs/orangefs/dcache.c |
4295 | index 5355efba4bc8c..1942f9946ab77 100644 |
4296 | --- a/fs/orangefs/dcache.c |
4297 | +++ b/fs/orangefs/dcache.c |
4298 | @@ -25,8 +25,10 @@ static int orangefs_revalidate_lookup(struct dentry *dentry) |
4299 | gossip_debug(GOSSIP_DCACHE_DEBUG, "%s: attempting lookup.\n", __func__); |
4300 | |
4301 | new_op = op_alloc(ORANGEFS_VFS_OP_LOOKUP); |
4302 | - if (!new_op) |
4303 | + if (!new_op) { |
4304 | + ret = -ENOMEM; |
4305 | goto out_put_parent; |
4306 | + } |
4307 | |
4308 | new_op->upcall.req.lookup.sym_follow = ORANGEFS_LOOKUP_LINK_NO_FOLLOW; |
4309 | new_op->upcall.req.lookup.parent_refn = parent->refn; |
4310 | diff --git a/fs/quota/quota_tree.c b/fs/quota/quota_tree.c |
4311 | index ecd9887b0d1fe..8c7705b50e5dd 100644 |
4312 | --- a/fs/quota/quota_tree.c |
4313 | +++ b/fs/quota/quota_tree.c |
4314 | @@ -422,6 +422,7 @@ static int free_dqentry(struct qtree_mem_dqinfo *info, struct dquot *dquot, |
4315 | quota_error(dquot->dq_sb, "Quota structure has offset to " |
4316 | "other block (%u) than it should (%u)", blk, |
4317 | (uint)(dquot->dq_off >> info->dqi_blocksize_bits)); |
4318 | + ret = -EIO; |
4319 | goto out_buf; |
4320 | } |
4321 | ret = read_blk(info, blk, buf); |
4322 | @@ -487,6 +488,13 @@ static int remove_tree(struct qtree_mem_dqinfo *info, struct dquot *dquot, |
4323 | goto out_buf; |
4324 | } |
4325 | newblk = le32_to_cpu(ref[get_index(info, dquot->dq_id, depth)]); |
4326 | + if (newblk < QT_TREEOFF || newblk >= info->dqi_blocks) { |
4327 | + quota_error(dquot->dq_sb, "Getting block too big (%u >= %u)", |
4328 | + newblk, info->dqi_blocks); |
4329 | + ret = -EUCLEAN; |
4330 | + goto out_buf; |
4331 | + } |
4332 | + |
4333 | if (depth == info->dqi_qtree_depth - 1) { |
4334 | ret = free_dqentry(info, dquot, newblk); |
4335 | newblk = 0; |
4336 | @@ -586,6 +594,13 @@ static loff_t find_tree_dqentry(struct qtree_mem_dqinfo *info, |
4337 | blk = le32_to_cpu(ref[get_index(info, dquot->dq_id, depth)]); |
4338 | if (!blk) /* No reference? */ |
4339 | goto out_buf; |
4340 | + if (blk < QT_TREEOFF || blk >= info->dqi_blocks) { |
4341 | + quota_error(dquot->dq_sb, "Getting block too big (%u >= %u)", |
4342 | + blk, info->dqi_blocks); |
4343 | + ret = -EUCLEAN; |
4344 | + goto out_buf; |
4345 | + } |
4346 | + |
4347 | if (depth < info->dqi_qtree_depth - 1) |
4348 | ret = find_tree_dqentry(info, dquot, blk, depth+1); |
4349 | else |
4350 | diff --git a/fs/tracefs/inode.c b/fs/tracefs/inode.c |
4351 | index 21d36d2847356..985cccfcedad9 100644 |
4352 | --- a/fs/tracefs/inode.c |
4353 | +++ b/fs/tracefs/inode.c |
4354 | @@ -429,7 +429,8 @@ static struct dentry *__create_dir(const char *name, struct dentry *parent, |
4355 | if (unlikely(!inode)) |
4356 | return failed_creating(dentry); |
4357 | |
4358 | - inode->i_mode = S_IFDIR | S_IRWXU | S_IRUGO | S_IXUGO; |
4359 | + /* Do not set bits for OTH */ |
4360 | + inode->i_mode = S_IFDIR | S_IRWXU | S_IRUSR| S_IRGRP | S_IXUSR | S_IXGRP; |
4361 | inode->i_op = ops; |
4362 | inode->i_fop = &simple_dir_operations; |
4363 | |
4364 | diff --git a/include/linux/console.h b/include/linux/console.h |
4365 | index d530c4627e54e..118c33aa5ecfa 100644 |
4366 | --- a/include/linux/console.h |
4367 | +++ b/include/linux/console.h |
4368 | @@ -135,6 +135,8 @@ struct console { |
4369 | short flags; |
4370 | short index; |
4371 | int cflag; |
4372 | + uint ispeed; |
4373 | + uint ospeed; |
4374 | void *data; |
4375 | struct console *next; |
4376 | }; |
4377 | diff --git a/include/linux/filter.h b/include/linux/filter.h |
4378 | index 0837d904405a3..05be3d84655e4 100644 |
4379 | --- a/include/linux/filter.h |
4380 | +++ b/include/linux/filter.h |
4381 | @@ -600,6 +600,7 @@ void bpf_warn_invalid_xdp_action(u32 act); |
4382 | extern int bpf_jit_enable; |
4383 | extern int bpf_jit_harden; |
4384 | extern long bpf_jit_limit; |
4385 | +extern long bpf_jit_limit_max; |
4386 | |
4387 | typedef void (*bpf_jit_fill_hole_t)(void *area, unsigned int size); |
4388 | |
4389 | diff --git a/include/linux/libata.h b/include/linux/libata.h |
4390 | index de770d11a5c18..208534322bcdc 100644 |
4391 | --- a/include/linux/libata.h |
4392 | +++ b/include/linux/libata.h |
4393 | @@ -404,7 +404,7 @@ enum { |
4394 | /* This should match the actual table size of |
4395 | * ata_eh_cmd_timeout_table in libata-eh.c. |
4396 | */ |
4397 | - ATA_EH_CMD_TIMEOUT_TABLE_SIZE = 6, |
4398 | + ATA_EH_CMD_TIMEOUT_TABLE_SIZE = 7, |
4399 | |
4400 | /* Horkage types. May be set by libata or controller on drives |
4401 | (some horkage may be drive/controller pair dependent */ |
4402 | diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h |
4403 | index 558adfa5c8a87..53ac461f342bb 100644 |
4404 | --- a/include/linux/lsm_hooks.h |
4405 | +++ b/include/linux/lsm_hooks.h |
4406 | @@ -1147,22 +1147,22 @@ |
4407 | * |
4408 | * @binder_set_context_mgr |
4409 | * Check whether @mgr is allowed to be the binder context manager. |
4410 | - * @mgr contains the task_struct for the task being registered. |
4411 | + * @mgr contains the struct cred for the current binder process. |
4412 | * Return 0 if permission is granted. |
4413 | * @binder_transaction |
4414 | * Check whether @from is allowed to invoke a binder transaction call |
4415 | * to @to. |
4416 | - * @from contains the task_struct for the sending task. |
4417 | - * @to contains the task_struct for the receiving task. |
4418 | - * @binder_transfer_binder |
4419 | + * @from contains the struct cred for the sending process. |
4420 | + * @to contains the struct cred for the receiving process. |
4421 | + * @binder_transfer_binder: |
4422 | * Check whether @from is allowed to transfer a binder reference to @to. |
4423 | - * @from contains the task_struct for the sending task. |
4424 | - * @to contains the task_struct for the receiving task. |
4425 | - * @binder_transfer_file |
4426 | + * @from contains the struct cred for the sending process. |
4427 | + * @to contains the struct cred for the receiving process. |
4428 | + * @binder_transfer_file: |
4429 | * Check whether @from is allowed to transfer @file to @to. |
4430 | - * @from contains the task_struct for the sending task. |
4431 | + * @from contains the struct cred for the sending process. |
4432 | * @file contains the struct file being transferred. |
4433 | - * @to contains the task_struct for the receiving task. |
4434 | + * @to contains the struct cred for the receiving process. |
4435 | * |
4436 | * @ptrace_access_check: |
4437 | * Check permission before allowing the current process to trace the |
4438 | @@ -1332,13 +1332,13 @@ |
4439 | */ |
4440 | |
4441 | union security_list_options { |
4442 | - int (*binder_set_context_mgr)(struct task_struct *mgr); |
4443 | - int (*binder_transaction)(struct task_struct *from, |
4444 | - struct task_struct *to); |
4445 | - int (*binder_transfer_binder)(struct task_struct *from, |
4446 | - struct task_struct *to); |
4447 | - int (*binder_transfer_file)(struct task_struct *from, |
4448 | - struct task_struct *to, |
4449 | + int (*binder_set_context_mgr)(const struct cred *mgr); |
4450 | + int (*binder_transaction)(const struct cred *from, |
4451 | + const struct cred *to); |
4452 | + int (*binder_transfer_binder)(const struct cred *from, |
4453 | + const struct cred *to); |
4454 | + int (*binder_transfer_file)(const struct cred *from, |
4455 | + const struct cred *to, |
4456 | struct file *file); |
4457 | |
4458 | int (*ptrace_access_check)(struct task_struct *child, |
4459 | diff --git a/include/linux/security.h b/include/linux/security.h |
4460 | index c2125e9093e8e..2f5d282bd3eca 100644 |
4461 | --- a/include/linux/security.h |
4462 | +++ b/include/linux/security.h |
4463 | @@ -184,13 +184,13 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) |
4464 | extern int security_init(void); |
4465 | |
4466 | /* Security operations */ |
4467 | -int security_binder_set_context_mgr(struct task_struct *mgr); |
4468 | -int security_binder_transaction(struct task_struct *from, |
4469 | - struct task_struct *to); |
4470 | -int security_binder_transfer_binder(struct task_struct *from, |
4471 | - struct task_struct *to); |
4472 | -int security_binder_transfer_file(struct task_struct *from, |
4473 | - struct task_struct *to, struct file *file); |
4474 | +int security_binder_set_context_mgr(const struct cred *mgr); |
4475 | +int security_binder_transaction(const struct cred *from, |
4476 | + const struct cred *to); |
4477 | +int security_binder_transfer_binder(const struct cred *from, |
4478 | + const struct cred *to); |
4479 | +int security_binder_transfer_file(const struct cred *from, |
4480 | + const struct cred *to, struct file *file); |
4481 | int security_ptrace_access_check(struct task_struct *child, unsigned int mode); |
4482 | int security_ptrace_traceme(struct task_struct *parent); |
4483 | int security_capget(struct task_struct *target, |
4484 | @@ -394,25 +394,25 @@ static inline int security_init(void) |
4485 | return 0; |
4486 | } |
4487 | |
4488 | -static inline int security_binder_set_context_mgr(struct task_struct *mgr) |
4489 | +static inline int security_binder_set_context_mgr(const struct cred *mgr) |
4490 | { |
4491 | return 0; |
4492 | } |
4493 | |
4494 | -static inline int security_binder_transaction(struct task_struct *from, |
4495 | - struct task_struct *to) |
4496 | +static inline int security_binder_transaction(const struct cred *from, |
4497 | + const struct cred *to) |
4498 | { |
4499 | return 0; |
4500 | } |
4501 | |
4502 | -static inline int security_binder_transfer_binder(struct task_struct *from, |
4503 | - struct task_struct *to) |
4504 | +static inline int security_binder_transfer_binder(const struct cred *from, |
4505 | + const struct cred *to) |
4506 | { |
4507 | return 0; |
4508 | } |
4509 | |
4510 | -static inline int security_binder_transfer_file(struct task_struct *from, |
4511 | - struct task_struct *to, |
4512 | +static inline int security_binder_transfer_file(const struct cred *from, |
4513 | + const struct cred *to, |
4514 | struct file *file) |
4515 | { |
4516 | return 0; |
4517 | diff --git a/include/net/llc.h b/include/net/llc.h |
4518 | index 95e5ced4c1339..18dfd3e49a69f 100644 |
4519 | --- a/include/net/llc.h |
4520 | +++ b/include/net/llc.h |
4521 | @@ -72,7 +72,9 @@ struct llc_sap { |
4522 | static inline |
4523 | struct hlist_head *llc_sk_dev_hash(struct llc_sap *sap, int ifindex) |
4524 | { |
4525 | - return &sap->sk_dev_hash[ifindex % LLC_SK_DEV_HASH_ENTRIES]; |
4526 | + u32 bucket = hash_32(ifindex, LLC_SK_DEV_HASH_BITS); |
4527 | + |
4528 | + return &sap->sk_dev_hash[bucket]; |
4529 | } |
4530 | |
4531 | static inline |
4532 | diff --git a/include/target/target_core_base.h b/include/target/target_core_base.h |
4533 | index 8a70d38f13329..0c7dd6dd23957 100644 |
4534 | --- a/include/target/target_core_base.h |
4535 | +++ b/include/target/target_core_base.h |
4536 | @@ -779,8 +779,9 @@ struct se_device { |
4537 | atomic_long_t read_bytes; |
4538 | atomic_long_t write_bytes; |
4539 | /* Active commands on this virtual SE device */ |
4540 | - atomic_t simple_cmds; |
4541 | - atomic_t dev_ordered_sync; |
4542 | + atomic_t non_ordered; |
4543 | + bool ordered_sync_in_progress; |
4544 | + atomic_t delayed_cmd_count; |
4545 | atomic_t dev_qf_count; |
4546 | u32 export_count; |
4547 | spinlock_t delayed_cmd_lock; |
4548 | @@ -803,6 +804,7 @@ struct se_device { |
4549 | struct list_head dev_tmr_list; |
4550 | struct workqueue_struct *tmr_wq; |
4551 | struct work_struct qf_work_queue; |
4552 | + struct work_struct delayed_cmd_work; |
4553 | struct list_head delayed_cmd_list; |
4554 | struct list_head state_list; |
4555 | struct list_head qf_cmd_list; |
4556 | diff --git a/include/uapi/linux/pci_regs.h b/include/uapi/linux/pci_regs.h |
4557 | index ecc8e01c56163..9d846dfb9e904 100644 |
4558 | --- a/include/uapi/linux/pci_regs.h |
4559 | +++ b/include/uapi/linux/pci_regs.h |
4560 | @@ -488,6 +488,12 @@ |
4561 | #define PCI_EXP_DEVCTL_URRE 0x0008 /* Unsupported Request Reporting En. */ |
4562 | #define PCI_EXP_DEVCTL_RELAX_EN 0x0010 /* Enable relaxed ordering */ |
4563 | #define PCI_EXP_DEVCTL_PAYLOAD 0x00e0 /* Max_Payload_Size */ |
4564 | +#define PCI_EXP_DEVCTL_PAYLOAD_128B 0x0000 /* 128 Bytes */ |
4565 | +#define PCI_EXP_DEVCTL_PAYLOAD_256B 0x0020 /* 256 Bytes */ |
4566 | +#define PCI_EXP_DEVCTL_PAYLOAD_512B 0x0040 /* 512 Bytes */ |
4567 | +#define PCI_EXP_DEVCTL_PAYLOAD_1024B 0x0060 /* 1024 Bytes */ |
4568 | +#define PCI_EXP_DEVCTL_PAYLOAD_2048B 0x0080 /* 2048 Bytes */ |
4569 | +#define PCI_EXP_DEVCTL_PAYLOAD_4096B 0x00a0 /* 4096 Bytes */ |
4570 | #define PCI_EXP_DEVCTL_EXT_TAG 0x0100 /* Extended Tag Field Enable */ |
4571 | #define PCI_EXP_DEVCTL_PHANTOM 0x0200 /* Phantom Functions Enable */ |
4572 | #define PCI_EXP_DEVCTL_AUX_PME 0x0400 /* Auxiliary Power PM Enable */ |
4573 | diff --git a/kernel/bpf/core.c b/kernel/bpf/core.c |
4574 | index df2ebce927ec4..3ce69c0276c09 100644 |
4575 | --- a/kernel/bpf/core.c |
4576 | +++ b/kernel/bpf/core.c |
4577 | @@ -212,6 +212,7 @@ struct bpf_prog *bpf_patch_insn_single(struct bpf_prog *prog, u32 off, |
4578 | int bpf_jit_enable __read_mostly = IS_BUILTIN(CONFIG_BPF_JIT_ALWAYS_ON); |
4579 | int bpf_jit_harden __read_mostly; |
4580 | long bpf_jit_limit __read_mostly; |
4581 | +long bpf_jit_limit_max __read_mostly; |
4582 | |
4583 | static atomic_long_t bpf_jit_current; |
4584 | |
4585 | @@ -231,7 +232,8 @@ u64 __weak bpf_jit_alloc_exec_limit(void) |
4586 | static int __init bpf_jit_charge_init(void) |
4587 | { |
4588 | /* Only used as heuristic here to derive limit. */ |
4589 | - bpf_jit_limit = min_t(u64, round_up(bpf_jit_alloc_exec_limit() >> 2, |
4590 | + bpf_jit_limit_max = bpf_jit_alloc_exec_limit(); |
4591 | + bpf_jit_limit = min_t(u64, round_up(bpf_jit_limit_max >> 2, |
4592 | PAGE_SIZE), LONG_MAX); |
4593 | return 0; |
4594 | } |
4595 | diff --git a/kernel/cgroup.c b/kernel/cgroup.c |
4596 | index 3378c44e147e6..248b0bf5d6795 100644 |
4597 | --- a/kernel/cgroup.c |
4598 | +++ b/kernel/cgroup.c |
4599 | @@ -1564,6 +1564,7 @@ static int rebind_subsystems(struct cgroup_root *dst_root, u16 ss_mask) |
4600 | struct cgroup *dcgrp = &dst_root->cgrp; |
4601 | struct cgroup_subsys *ss; |
4602 | int ssid, i, ret; |
4603 | + u16 dfl_disable_ss_mask = 0; |
4604 | |
4605 | lockdep_assert_held(&cgroup_mutex); |
4606 | |
4607 | @@ -1580,8 +1581,28 @@ static int rebind_subsystems(struct cgroup_root *dst_root, u16 ss_mask) |
4608 | /* can't move between two non-dummy roots either */ |
4609 | if (ss->root != &cgrp_dfl_root && dst_root != &cgrp_dfl_root) |
4610 | return -EBUSY; |
4611 | + |
4612 | + /* |
4613 | + * Collect ssid's that need to be disabled from default |
4614 | + * hierarchy. |
4615 | + */ |
4616 | + if (ss->root == &cgrp_dfl_root) |
4617 | + dfl_disable_ss_mask |= 1 << ssid; |
4618 | + |
4619 | } while_each_subsys_mask(); |
4620 | |
4621 | + if (dfl_disable_ss_mask) { |
4622 | + struct cgroup *scgrp = &cgrp_dfl_root.cgrp; |
4623 | + |
4624 | + /* |
4625 | + * Controllers from default hierarchy that need to be rebound |
4626 | + * are all disabled together in one go. |
4627 | + */ |
4628 | + cgrp_dfl_root.subsys_mask &= ~dfl_disable_ss_mask; |
4629 | + WARN_ON(cgroup_apply_control(scgrp)); |
4630 | + cgroup_finalize_control(scgrp, 0); |
4631 | + } |
4632 | + |
4633 | do_each_subsys_mask(ss, ssid, ss_mask) { |
4634 | struct cgroup_root *src_root = ss->root; |
4635 | struct cgroup *scgrp = &src_root->cgrp; |
4636 | @@ -1590,10 +1611,12 @@ static int rebind_subsystems(struct cgroup_root *dst_root, u16 ss_mask) |
4637 | |
4638 | WARN_ON(!css || cgroup_css(dcgrp, ss)); |
4639 | |
4640 | - /* disable from the source */ |
4641 | - src_root->subsys_mask &= ~(1 << ssid); |
4642 | - WARN_ON(cgroup_apply_control(scgrp)); |
4643 | - cgroup_finalize_control(scgrp, 0); |
4644 | + if (src_root != &cgrp_dfl_root) { |
4645 | + /* disable from the source */ |
4646 | + src_root->subsys_mask &= ~(1 << ssid); |
4647 | + WARN_ON(cgroup_apply_control(scgrp)); |
4648 | + cgroup_finalize_control(scgrp, 0); |
4649 | + } |
4650 | |
4651 | /* rebind */ |
4652 | RCU_INIT_POINTER(scgrp->subsys[ssid], NULL); |
4653 | diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c |
4654 | index 9f56e3fac795a..05dd765e2cbca 100644 |
4655 | --- a/kernel/locking/lockdep.c |
4656 | +++ b/kernel/locking/lockdep.c |
4657 | @@ -695,7 +695,7 @@ look_up_lock_class(struct lockdep_map *lock, unsigned int subclass) |
4658 | if (DEBUG_LOCKS_WARN_ON(!irqs_disabled())) |
4659 | return NULL; |
4660 | |
4661 | - hlist_for_each_entry_rcu(class, hash_head, hash_entry) { |
4662 | + hlist_for_each_entry_rcu_notrace(class, hash_head, hash_entry) { |
4663 | if (class->key == key) { |
4664 | /* |
4665 | * Huh! same key, different name? Did someone trample |
4666 | diff --git a/kernel/power/swap.c b/kernel/power/swap.c |
4667 | index a3b1e617bcdc3..8009cd308fcc6 100644 |
4668 | --- a/kernel/power/swap.c |
4669 | +++ b/kernel/power/swap.c |
4670 | @@ -1528,9 +1528,10 @@ end: |
4671 | int swsusp_check(void) |
4672 | { |
4673 | int error; |
4674 | + void *holder; |
4675 | |
4676 | hib_resume_bdev = blkdev_get_by_dev(swsusp_resume_device, |
4677 | - FMODE_READ, NULL); |
4678 | + FMODE_READ | FMODE_EXCL, &holder); |
4679 | if (!IS_ERR(hib_resume_bdev)) { |
4680 | set_blocksize(hib_resume_bdev, PAGE_SIZE); |
4681 | clear_page(swsusp_header); |
4682 | @@ -1552,7 +1553,7 @@ int swsusp_check(void) |
4683 | |
4684 | put: |
4685 | if (error) |
4686 | - blkdev_put(hib_resume_bdev, FMODE_READ); |
4687 | + blkdev_put(hib_resume_bdev, FMODE_READ | FMODE_EXCL); |
4688 | else |
4689 | pr_debug("PM: Image signature found, resuming\n"); |
4690 | } else { |
4691 | diff --git a/kernel/sched/core.c b/kernel/sched/core.c |
4692 | index c7c7ba8807f83..b1bfd44aa9f01 100644 |
4693 | --- a/kernel/sched/core.c |
4694 | +++ b/kernel/sched/core.c |
4695 | @@ -1875,6 +1875,9 @@ out: |
4696 | |
4697 | bool cpus_share_cache(int this_cpu, int that_cpu) |
4698 | { |
4699 | + if (this_cpu == that_cpu) |
4700 | + return true; |
4701 | + |
4702 | return per_cpu(sd_llc_id, this_cpu) == per_cpu(sd_llc_id, that_cpu); |
4703 | } |
4704 | #endif /* CONFIG_SMP */ |
4705 | diff --git a/kernel/signal.c b/kernel/signal.c |
4706 | index bedca1629f260..2c26af848e682 100644 |
4707 | --- a/kernel/signal.c |
4708 | +++ b/kernel/signal.c |
4709 | @@ -1823,16 +1823,6 @@ static inline int may_ptrace_stop(void) |
4710 | return 1; |
4711 | } |
4712 | |
4713 | -/* |
4714 | - * Return non-zero if there is a SIGKILL that should be waking us up. |
4715 | - * Called with the siglock held. |
4716 | - */ |
4717 | -static int sigkill_pending(struct task_struct *tsk) |
4718 | -{ |
4719 | - return sigismember(&tsk->pending.signal, SIGKILL) || |
4720 | - sigismember(&tsk->signal->shared_pending.signal, SIGKILL); |
4721 | -} |
4722 | - |
4723 | /* |
4724 | * This must be called with current->sighand->siglock held. |
4725 | * |
4726 | @@ -1858,15 +1848,10 @@ static void ptrace_stop(int exit_code, int why, int clear_code, siginfo_t *info) |
4727 | * calling arch_ptrace_stop, so we must release it now. |
4728 | * To preserve proper semantics, we must do this before |
4729 | * any signal bookkeeping like checking group_stop_count. |
4730 | - * Meanwhile, a SIGKILL could come in before we retake the |
4731 | - * siglock. That must prevent us from sleeping in TASK_TRACED. |
4732 | - * So after regaining the lock, we must check for SIGKILL. |
4733 | */ |
4734 | spin_unlock_irq(¤t->sighand->siglock); |
4735 | arch_ptrace_stop(exit_code, info); |
4736 | spin_lock_irq(¤t->sighand->siglock); |
4737 | - if (sigkill_pending(current)) |
4738 | - return; |
4739 | } |
4740 | |
4741 | /* |
4742 | @@ -1875,6 +1860,8 @@ static void ptrace_stop(int exit_code, int why, int clear_code, siginfo_t *info) |
4743 | * Also, transition to TRACED and updates to ->jobctl should be |
4744 | * atomic with respect to siglock and should be done after the arch |
4745 | * hook as siglock is released and regrabbed across it. |
4746 | + * schedule() will not sleep if there is a pending signal that |
4747 | + * can awaken the task. |
4748 | */ |
4749 | set_current_state(TASK_TRACED); |
4750 | |
4751 | diff --git a/kernel/trace/tracing_map.c b/kernel/trace/tracing_map.c |
4752 | index 35b2ba07f3c6f..379db35838b64 100644 |
4753 | --- a/kernel/trace/tracing_map.c |
4754 | +++ b/kernel/trace/tracing_map.c |
4755 | @@ -703,29 +703,35 @@ int tracing_map_init(struct tracing_map *map) |
4756 | return err; |
4757 | } |
4758 | |
4759 | -static int cmp_entries_dup(const struct tracing_map_sort_entry **a, |
4760 | - const struct tracing_map_sort_entry **b) |
4761 | +static int cmp_entries_dup(const void *A, const void *B) |
4762 | { |
4763 | + const struct tracing_map_sort_entry *a, *b; |
4764 | int ret = 0; |
4765 | |
4766 | - if (memcmp((*a)->key, (*b)->key, (*a)->elt->map->key_size)) |
4767 | + a = *(const struct tracing_map_sort_entry **)A; |
4768 | + b = *(const struct tracing_map_sort_entry **)B; |
4769 | + |
4770 | + if (memcmp(a->key, b->key, a->elt->map->key_size)) |
4771 | ret = 1; |
4772 | |
4773 | return ret; |
4774 | } |
4775 | |
4776 | -static int cmp_entries_sum(const struct tracing_map_sort_entry **a, |
4777 | - const struct tracing_map_sort_entry **b) |
4778 | +static int cmp_entries_sum(const void *A, const void *B) |
4779 | { |
4780 | const struct tracing_map_elt *elt_a, *elt_b; |
4781 | + const struct tracing_map_sort_entry *a, *b; |
4782 | struct tracing_map_sort_key *sort_key; |
4783 | struct tracing_map_field *field; |
4784 | tracing_map_cmp_fn_t cmp_fn; |
4785 | void *val_a, *val_b; |
4786 | int ret = 0; |
4787 | |
4788 | - elt_a = (*a)->elt; |
4789 | - elt_b = (*b)->elt; |
4790 | + a = *(const struct tracing_map_sort_entry **)A; |
4791 | + b = *(const struct tracing_map_sort_entry **)B; |
4792 | + |
4793 | + elt_a = a->elt; |
4794 | + elt_b = b->elt; |
4795 | |
4796 | sort_key = &elt_a->map->sort_key; |
4797 | |
4798 | @@ -742,18 +748,21 @@ static int cmp_entries_sum(const struct tracing_map_sort_entry **a, |
4799 | return ret; |
4800 | } |
4801 | |
4802 | -static int cmp_entries_key(const struct tracing_map_sort_entry **a, |
4803 | - const struct tracing_map_sort_entry **b) |
4804 | +static int cmp_entries_key(const void *A, const void *B) |
4805 | { |
4806 | const struct tracing_map_elt *elt_a, *elt_b; |
4807 | + const struct tracing_map_sort_entry *a, *b; |
4808 | struct tracing_map_sort_key *sort_key; |
4809 | struct tracing_map_field *field; |
4810 | tracing_map_cmp_fn_t cmp_fn; |
4811 | void *val_a, *val_b; |
4812 | int ret = 0; |
4813 | |
4814 | - elt_a = (*a)->elt; |
4815 | - elt_b = (*b)->elt; |
4816 | + a = *(const struct tracing_map_sort_entry **)A; |
4817 | + b = *(const struct tracing_map_sort_entry **)B; |
4818 | + |
4819 | + elt_a = a->elt; |
4820 | + elt_b = b->elt; |
4821 | |
4822 | sort_key = &elt_a->map->sort_key; |
4823 | |
4824 | @@ -926,10 +935,8 @@ static void sort_secondary(struct tracing_map *map, |
4825 | struct tracing_map_sort_key *primary_key, |
4826 | struct tracing_map_sort_key *secondary_key) |
4827 | { |
4828 | - int (*primary_fn)(const struct tracing_map_sort_entry **, |
4829 | - const struct tracing_map_sort_entry **); |
4830 | - int (*secondary_fn)(const struct tracing_map_sort_entry **, |
4831 | - const struct tracing_map_sort_entry **); |
4832 | + int (*primary_fn)(const void *, const void *); |
4833 | + int (*secondary_fn)(const void *, const void *); |
4834 | unsigned i, start = 0, n_sub = 1; |
4835 | |
4836 | if (is_key(map, primary_key->field_idx)) |
4837 | @@ -998,8 +1005,7 @@ int tracing_map_sort_entries(struct tracing_map *map, |
4838 | unsigned int n_sort_keys, |
4839 | struct tracing_map_sort_entry ***sort_entries) |
4840 | { |
4841 | - int (*cmp_entries_fn)(const struct tracing_map_sort_entry **, |
4842 | - const struct tracing_map_sort_entry **); |
4843 | + int (*cmp_entries_fn)(const void *, const void *); |
4844 | struct tracing_map_sort_entry *sort_entry, **entries; |
4845 | int i, n_entries, ret; |
4846 | |
4847 | diff --git a/lib/decompress_unxz.c b/lib/decompress_unxz.c |
4848 | index 25d59a95bd668..abea25310ac73 100644 |
4849 | --- a/lib/decompress_unxz.c |
4850 | +++ b/lib/decompress_unxz.c |
4851 | @@ -167,7 +167,7 @@ |
4852 | * memeq and memzero are not used much and any remotely sane implementation |
4853 | * is fast enough. memcpy/memmove speed matters in multi-call mode, but |
4854 | * the kernel image is decompressed in single-call mode, in which only |
4855 | - * memcpy speed can matter and only if there is a lot of uncompressible data |
4856 | + * memmove speed can matter and only if there is a lot of uncompressible data |
4857 | * (LZMA2 stores uncompressible chunks in uncompressed form). Thus, the |
4858 | * functions below should just be kept small; it's probably not worth |
4859 | * optimizing for speed. |
4860 | diff --git a/lib/xz/xz_dec_lzma2.c b/lib/xz/xz_dec_lzma2.c |
4861 | index 08c3c80499983..2c5197d6b944d 100644 |
4862 | --- a/lib/xz/xz_dec_lzma2.c |
4863 | +++ b/lib/xz/xz_dec_lzma2.c |
4864 | @@ -387,7 +387,14 @@ static void dict_uncompressed(struct dictionary *dict, struct xz_buf *b, |
4865 | |
4866 | *left -= copy_size; |
4867 | |
4868 | - memcpy(dict->buf + dict->pos, b->in + b->in_pos, copy_size); |
4869 | + /* |
4870 | + * If doing in-place decompression in single-call mode and the |
4871 | + * uncompressed size of the file is larger than the caller |
4872 | + * thought (i.e. it is invalid input!), the buffers below may |
4873 | + * overlap and cause undefined behavior with memcpy(). |
4874 | + * With valid inputs memcpy() would be fine here. |
4875 | + */ |
4876 | + memmove(dict->buf + dict->pos, b->in + b->in_pos, copy_size); |
4877 | dict->pos += copy_size; |
4878 | |
4879 | if (dict->full < dict->pos) |
4880 | @@ -397,7 +404,11 @@ static void dict_uncompressed(struct dictionary *dict, struct xz_buf *b, |
4881 | if (dict->pos == dict->end) |
4882 | dict->pos = 0; |
4883 | |
4884 | - memcpy(b->out + b->out_pos, b->in + b->in_pos, |
4885 | + /* |
4886 | + * Like above but for multi-call mode: use memmove() |
4887 | + * to avoid undefined behavior with invalid input. |
4888 | + */ |
4889 | + memmove(b->out + b->out_pos, b->in + b->in_pos, |
4890 | copy_size); |
4891 | } |
4892 | |
4893 | @@ -421,6 +432,12 @@ static uint32_t dict_flush(struct dictionary *dict, struct xz_buf *b) |
4894 | if (dict->pos == dict->end) |
4895 | dict->pos = 0; |
4896 | |
4897 | + /* |
4898 | + * These buffers cannot overlap even if doing in-place |
4899 | + * decompression because in multi-call mode dict->buf |
4900 | + * has been allocated by us in this file; it's not |
4901 | + * provided by the caller like in single-call mode. |
4902 | + */ |
4903 | memcpy(b->out + b->out_pos, dict->buf + dict->start, |
4904 | copy_size); |
4905 | } |
4906 | diff --git a/lib/xz/xz_dec_stream.c b/lib/xz/xz_dec_stream.c |
4907 | index ac809b1e64f78..9e5b9ab537fea 100644 |
4908 | --- a/lib/xz/xz_dec_stream.c |
4909 | +++ b/lib/xz/xz_dec_stream.c |
4910 | @@ -402,12 +402,12 @@ static enum xz_ret dec_stream_header(struct xz_dec *s) |
4911 | * we will accept other check types too, but then the check won't |
4912 | * be verified and a warning (XZ_UNSUPPORTED_CHECK) will be given. |
4913 | */ |
4914 | + if (s->temp.buf[HEADER_MAGIC_SIZE + 1] > XZ_CHECK_MAX) |
4915 | + return XZ_OPTIONS_ERROR; |
4916 | + |
4917 | s->check_type = s->temp.buf[HEADER_MAGIC_SIZE + 1]; |
4918 | |
4919 | #ifdef XZ_DEC_ANY_CHECK |
4920 | - if (s->check_type > XZ_CHECK_MAX) |
4921 | - return XZ_OPTIONS_ERROR; |
4922 | - |
4923 | if (s->check_type > XZ_CHECK_CRC32) |
4924 | return XZ_UNSUPPORTED_CHECK; |
4925 | #else |
4926 | diff --git a/mm/oom_kill.c b/mm/oom_kill.c |
4927 | index d514eebad905e..c78a6abb6f2b6 100644 |
4928 | --- a/mm/oom_kill.c |
4929 | +++ b/mm/oom_kill.c |
4930 | @@ -1078,25 +1078,22 @@ bool out_of_memory(struct oom_control *oc) |
4931 | } |
4932 | |
4933 | /* |
4934 | - * The pagefault handler calls here because it is out of memory, so kill a |
4935 | - * memory-hogging task. If oom_lock is held by somebody else, a parallel oom |
4936 | - * killing is already in progress so do nothing. |
4937 | + * The pagefault handler calls here because some allocation has failed. We have |
4938 | + * to take care of the memcg OOM here because this is the only safe context without |
4939 | + * any locks held but let the oom killer triggered from the allocation context care |
4940 | + * about the global OOM. |
4941 | */ |
4942 | void pagefault_out_of_memory(void) |
4943 | { |
4944 | - struct oom_control oc = { |
4945 | - .zonelist = NULL, |
4946 | - .nodemask = NULL, |
4947 | - .memcg = NULL, |
4948 | - .gfp_mask = 0, |
4949 | - .order = 0, |
4950 | - }; |
4951 | + static DEFINE_RATELIMIT_STATE(pfoom_rs, DEFAULT_RATELIMIT_INTERVAL, |
4952 | + DEFAULT_RATELIMIT_BURST); |
4953 | |
4954 | if (mem_cgroup_oom_synchronize(true)) |
4955 | return; |
4956 | |
4957 | - if (!mutex_trylock(&oom_lock)) |
4958 | + if (fatal_signal_pending(current)) |
4959 | return; |
4960 | - out_of_memory(&oc); |
4961 | - mutex_unlock(&oom_lock); |
4962 | + |
4963 | + if (__ratelimit(&pfoom_rs)) |
4964 | + pr_warn("Huh VM_FAULT_OOM leaked out to the #PF handler. Retrying PF\n"); |
4965 | } |
4966 | diff --git a/mm/slab.h b/mm/slab.h |
4967 | index ceb7d70cdb764..34929ac0ebead 100644 |
4968 | --- a/mm/slab.h |
4969 | +++ b/mm/slab.h |
4970 | @@ -139,7 +139,7 @@ static inline unsigned long kmem_cache_flags(unsigned long object_size, |
4971 | #define SLAB_CACHE_FLAGS (SLAB_NOLEAKTRACE | SLAB_RECLAIM_ACCOUNT | \ |
4972 | SLAB_TEMPORARY | SLAB_NOTRACK | SLAB_ACCOUNT) |
4973 | #else |
4974 | -#define SLAB_CACHE_FLAGS (0) |
4975 | +#define SLAB_CACHE_FLAGS (SLAB_NOLEAKTRACE) |
4976 | #endif |
4977 | |
4978 | #define CACHE_CREATE_MASK (SLAB_CORE_FLAGS | SLAB_DEBUG_FLAGS | SLAB_CACHE_FLAGS) |
4979 | diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c |
4980 | index 2b7bfd97587a0..b5c1cd4ba2a15 100644 |
4981 | --- a/mm/zsmalloc.c |
4982 | +++ b/mm/zsmalloc.c |
4983 | @@ -1962,10 +1962,11 @@ static inline void zs_pool_dec_isolated(struct zs_pool *pool) |
4984 | VM_BUG_ON(atomic_long_read(&pool->isolated_pages) <= 0); |
4985 | atomic_long_dec(&pool->isolated_pages); |
4986 | /* |
4987 | - * There's no possibility of racing, since wait_for_isolated_drain() |
4988 | - * checks the isolated count under &class->lock after enqueuing |
4989 | - * on migration_wait. |
4990 | + * Checking pool->destroying must happen after atomic_long_dec() |
4991 | + * for pool->isolated_pages above. Paired with the smp_mb() in |
4992 | + * zs_unregister_migration(). |
4993 | */ |
4994 | + smp_mb__after_atomic(); |
4995 | if (atomic_long_read(&pool->isolated_pages) == 0 && pool->destroying) |
4996 | wake_up_all(&pool->migration_wait); |
4997 | } |
4998 | diff --git a/net/batman-adv/bat_v_ogm.c b/net/batman-adv/bat_v_ogm.c |
4999 | index d2e6885479cb1..cb94ac9886181 100644 |
5000 | --- a/net/batman-adv/bat_v_ogm.c |
5001 | +++ b/net/batman-adv/bat_v_ogm.c |
5002 | @@ -690,6 +690,12 @@ static void batadv_v_ogm_process(const struct sk_buff *skb, int ogm_offset, |
5003 | ntohl(ogm_packet->seqno), ogm_throughput, ogm_packet->ttl, |
5004 | ogm_packet->version, ntohs(ogm_packet->tvlv_len)); |
5005 | |
5006 | + if (batadv_is_my_mac(bat_priv, ogm_packet->orig)) { |
5007 | + batadv_dbg(BATADV_DBG_BATMAN, bat_priv, |
5008 | + "Drop packet: originator packet from ourself\n"); |
5009 | + return; |
5010 | + } |
5011 | + |
5012 | /* If the troughput metric is 0, immediately drop the packet. No need to |
5013 | * create orig_node / neigh_node for an unusable route. |
5014 | */ |
5015 | @@ -788,11 +794,6 @@ int batadv_v_ogm_packet_recv(struct sk_buff *skb, |
5016 | if (batadv_is_my_mac(bat_priv, ethhdr->h_source)) |
5017 | return NET_RX_DROP; |
5018 | |
5019 | - ogm_packet = (struct batadv_ogm2_packet *)skb->data; |
5020 | - |
5021 | - if (batadv_is_my_mac(bat_priv, ogm_packet->orig)) |
5022 | - return NET_RX_DROP; |
5023 | - |
5024 | batadv_inc_counter(bat_priv, BATADV_CNT_MGMT_RX); |
5025 | batadv_add_counter(bat_priv, BATADV_CNT_MGMT_RX_BYTES, |
5026 | skb->len + ETH_HLEN); |
5027 | diff --git a/net/batman-adv/bridge_loop_avoidance.c b/net/batman-adv/bridge_loop_avoidance.c |
5028 | index dc635bd935846..a087f559f93e5 100644 |
5029 | --- a/net/batman-adv/bridge_loop_avoidance.c |
5030 | +++ b/net/batman-adv/bridge_loop_avoidance.c |
5031 | @@ -1593,13 +1593,16 @@ int batadv_bla_init(struct batadv_priv *bat_priv) |
5032 | } |
5033 | |
5034 | /** |
5035 | - * batadv_bla_check_bcast_duplist - Check if a frame is in the broadcast dup. |
5036 | + * batadv_bla_check_duplist() - Check if a frame is in the broadcast dup. |
5037 | * @bat_priv: the bat priv with all the soft interface information |
5038 | - * @skb: contains the bcast_packet to be checked |
5039 | + * @skb: contains the multicast packet to be checked |
5040 | + * @payload_ptr: pointer to position inside the head buffer of the skb |
5041 | + * marking the start of the data to be CRC'ed |
5042 | + * @orig: originator mac address, NULL if unknown |
5043 | * |
5044 | - * check if it is on our broadcast list. Another gateway might |
5045 | - * have sent the same packet because it is connected to the same backbone, |
5046 | - * so we have to remove this duplicate. |
5047 | + * Check if it is on our broadcast list. Another gateway might have sent the |
5048 | + * same packet because it is connected to the same backbone, so we have to |
5049 | + * remove this duplicate. |
5050 | * |
5051 | * This is performed by checking the CRC, which will tell us |
5052 | * with a good chance that it is the same packet. If it is furthermore |
5053 | @@ -1608,19 +1611,17 @@ int batadv_bla_init(struct batadv_priv *bat_priv) |
5054 | * |
5055 | * Return: true if a packet is in the duplicate list, false otherwise. |
5056 | */ |
5057 | -bool batadv_bla_check_bcast_duplist(struct batadv_priv *bat_priv, |
5058 | - struct sk_buff *skb) |
5059 | +static bool batadv_bla_check_duplist(struct batadv_priv *bat_priv, |
5060 | + struct sk_buff *skb, u8 *payload_ptr, |
5061 | + const u8 *orig) |
5062 | { |
5063 | - int i, curr; |
5064 | - __be32 crc; |
5065 | - struct batadv_bcast_packet *bcast_packet; |
5066 | struct batadv_bcast_duplist_entry *entry; |
5067 | bool ret = false; |
5068 | - |
5069 | - bcast_packet = (struct batadv_bcast_packet *)skb->data; |
5070 | + int i, curr; |
5071 | + __be32 crc; |
5072 | |
5073 | /* calculate the crc ... */ |
5074 | - crc = batadv_skb_crc32(skb, (u8 *)(bcast_packet + 1)); |
5075 | + crc = batadv_skb_crc32(skb, payload_ptr); |
5076 | |
5077 | spin_lock_bh(&bat_priv->bla.bcast_duplist_lock); |
5078 | |
5079 | @@ -1639,8 +1640,21 @@ bool batadv_bla_check_bcast_duplist(struct batadv_priv *bat_priv, |
5080 | if (entry->crc != crc) |
5081 | continue; |
5082 | |
5083 | - if (batadv_compare_eth(entry->orig, bcast_packet->orig)) |
5084 | - continue; |
5085 | + /* are the originators both known and not anonymous? */ |
5086 | + if (orig && !is_zero_ether_addr(orig) && |
5087 | + !is_zero_ether_addr(entry->orig)) { |
5088 | + /* If known, check if the new frame came from |
5089 | + * the same originator: |
5090 | + * We are safe to take identical frames from the |
5091 | + * same orig, if known, as multiplications in |
5092 | + * the mesh are detected via the (orig, seqno) pair. |
5093 | + * So we can be a bit more liberal here and allow |
5094 | + * identical frames from the same orig which the source |
5095 | + * host might have sent multiple times on purpose. |
5096 | + */ |
5097 | + if (batadv_compare_eth(entry->orig, orig)) |
5098 | + continue; |
5099 | + } |
5100 | |
5101 | /* this entry seems to match: same crc, not too old, |
5102 | * and from another gw. therefore return true to forbid it. |
5103 | @@ -1656,7 +1670,14 @@ bool batadv_bla_check_bcast_duplist(struct batadv_priv *bat_priv, |
5104 | entry = &bat_priv->bla.bcast_duplist[curr]; |
5105 | entry->crc = crc; |
5106 | entry->entrytime = jiffies; |
5107 | - ether_addr_copy(entry->orig, bcast_packet->orig); |
5108 | + |
5109 | + /* known originator */ |
5110 | + if (orig) |
5111 | + ether_addr_copy(entry->orig, orig); |
5112 | + /* anonymous originator */ |
5113 | + else |
5114 | + eth_zero_addr(entry->orig); |
5115 | + |
5116 | bat_priv->bla.bcast_duplist_curr = curr; |
5117 | |
5118 | out: |
5119 | @@ -1665,6 +1686,48 @@ out: |
5120 | return ret; |
5121 | } |
5122 | |
5123 | +/** |
5124 | + * batadv_bla_check_ucast_duplist() - Check if a frame is in the broadcast dup. |
5125 | + * @bat_priv: the bat priv with all the soft interface information |
5126 | + * @skb: contains the multicast packet to be checked, decapsulated from a |
5127 | + * unicast_packet |
5128 | + * |
5129 | + * Check if it is on our broadcast list. Another gateway might have sent the |
5130 | + * same packet because it is connected to the same backbone, so we have to |
5131 | + * remove this duplicate. |
5132 | + * |
5133 | + * Return: true if a packet is in the duplicate list, false otherwise. |
5134 | + */ |
5135 | +static bool batadv_bla_check_ucast_duplist(struct batadv_priv *bat_priv, |
5136 | + struct sk_buff *skb) |
5137 | +{ |
5138 | + return batadv_bla_check_duplist(bat_priv, skb, (u8 *)skb->data, NULL); |
5139 | +} |
5140 | + |
5141 | +/** |
5142 | + * batadv_bla_check_bcast_duplist() - Check if a frame is in the broadcast dup. |
5143 | + * @bat_priv: the bat priv with all the soft interface information |
5144 | + * @skb: contains the bcast_packet to be checked |
5145 | + * |
5146 | + * Check if it is on our broadcast list. Another gateway might have sent the |
5147 | + * same packet because it is connected to the same backbone, so we have to |
5148 | + * remove this duplicate. |
5149 | + * |
5150 | + * Return: true if a packet is in the duplicate list, false otherwise. |
5151 | + */ |
5152 | +bool batadv_bla_check_bcast_duplist(struct batadv_priv *bat_priv, |
5153 | + struct sk_buff *skb) |
5154 | +{ |
5155 | + struct batadv_bcast_packet *bcast_packet; |
5156 | + u8 *payload_ptr; |
5157 | + |
5158 | + bcast_packet = (struct batadv_bcast_packet *)skb->data; |
5159 | + payload_ptr = (u8 *)(bcast_packet + 1); |
5160 | + |
5161 | + return batadv_bla_check_duplist(bat_priv, skb, payload_ptr, |
5162 | + bcast_packet->orig); |
5163 | +} |
5164 | + |
5165 | /** |
5166 | * batadv_bla_is_backbone_gw_orig - Check if the originator is a gateway for |
5167 | * the VLAN identified by vid. |
5168 | @@ -1879,6 +1942,14 @@ bool batadv_bla_rx(struct batadv_priv *bat_priv, struct sk_buff *skb, |
5169 | packet_type == BATADV_UNICAST) |
5170 | goto handled; |
5171 | |
5172 | + /* potential duplicates from foreign BLA backbone gateways via |
5173 | + * multicast-in-unicast packets |
5174 | + */ |
5175 | + if (is_multicast_ether_addr(ethhdr->h_dest) && |
5176 | + packet_type == BATADV_UNICAST && |
5177 | + batadv_bla_check_ucast_duplist(bat_priv, skb)) |
5178 | + goto handled; |
5179 | + |
5180 | ether_addr_copy(search_claim.addr, ethhdr->h_source); |
5181 | search_claim.vid = vid; |
5182 | claim = batadv_claim_hash_find(bat_priv, &search_claim); |
5183 | diff --git a/net/batman-adv/fragmentation.c b/net/batman-adv/fragmentation.c |
5184 | index fef21f75892e4..343f4fc5909d7 100644 |
5185 | --- a/net/batman-adv/fragmentation.c |
5186 | +++ b/net/batman-adv/fragmentation.c |
5187 | @@ -394,9 +394,10 @@ out: |
5188 | |
5189 | /** |
5190 | * batadv_frag_create - create a fragment from skb |
5191 | + * @net_dev: outgoing device for fragment |
5192 | * @skb: skb to create fragment from |
5193 | * @frag_head: header to use in new fragment |
5194 | - * @mtu: size of new fragment |
5195 | + * @fragment_size: size of new fragment |
5196 | * |
5197 | * Split the passed skb into two fragments: A new one with size matching the |
5198 | * passed mtu and the old one with the rest. The new skb contains data from the |
5199 | @@ -404,22 +405,25 @@ out: |
5200 | * |
5201 | * Return: the new fragment, NULL on error. |
5202 | */ |
5203 | -static struct sk_buff *batadv_frag_create(struct sk_buff *skb, |
5204 | +static struct sk_buff *batadv_frag_create(struct net_device *net_dev, |
5205 | + struct sk_buff *skb, |
5206 | struct batadv_frag_packet *frag_head, |
5207 | - unsigned int mtu) |
5208 | + unsigned int fragment_size) |
5209 | { |
5210 | + unsigned int ll_reserved = LL_RESERVED_SPACE(net_dev); |
5211 | + unsigned int tailroom = net_dev->needed_tailroom; |
5212 | struct sk_buff *skb_fragment; |
5213 | unsigned int header_size = sizeof(*frag_head); |
5214 | - unsigned int fragment_size = mtu - header_size; |
5215 | + unsigned int mtu = fragment_size + header_size; |
5216 | |
5217 | - skb_fragment = netdev_alloc_skb(NULL, mtu + ETH_HLEN); |
5218 | + skb_fragment = dev_alloc_skb(ll_reserved + mtu + tailroom); |
5219 | if (!skb_fragment) |
5220 | goto err; |
5221 | |
5222 | skb_fragment->priority = skb->priority; |
5223 | |
5224 | /* Eat the last mtu-bytes of the skb */ |
5225 | - skb_reserve(skb_fragment, header_size + ETH_HLEN); |
5226 | + skb_reserve(skb_fragment, ll_reserved + header_size); |
5227 | skb_split(skb, skb_fragment, skb->len - fragment_size); |
5228 | |
5229 | /* Add the header */ |
5230 | @@ -443,13 +447,14 @@ int batadv_frag_send_packet(struct sk_buff *skb, |
5231 | struct batadv_orig_node *orig_node, |
5232 | struct batadv_neigh_node *neigh_node) |
5233 | { |
5234 | + struct net_device *net_dev = neigh_node->if_incoming->net_dev; |
5235 | struct batadv_priv *bat_priv; |
5236 | struct batadv_hard_iface *primary_if = NULL; |
5237 | struct batadv_frag_packet frag_header; |
5238 | struct sk_buff *skb_fragment; |
5239 | - unsigned int mtu = neigh_node->if_incoming->net_dev->mtu; |
5240 | + unsigned int mtu = net_dev->mtu; |
5241 | unsigned int header_size = sizeof(frag_header); |
5242 | - unsigned int max_fragment_size, max_packet_size; |
5243 | + unsigned int max_fragment_size, num_fragments; |
5244 | int ret = -1; |
5245 | |
5246 | /* To avoid merge and refragmentation at next-hops we never send |
5247 | @@ -457,10 +462,15 @@ int batadv_frag_send_packet(struct sk_buff *skb, |
5248 | */ |
5249 | mtu = min_t(unsigned int, mtu, BATADV_FRAG_MAX_FRAG_SIZE); |
5250 | max_fragment_size = mtu - header_size; |
5251 | - max_packet_size = max_fragment_size * BATADV_FRAG_MAX_FRAGMENTS; |
5252 | + |
5253 | + if (skb->len == 0 || max_fragment_size == 0) |
5254 | + return -EINVAL; |
5255 | + |
5256 | + num_fragments = (skb->len - 1) / max_fragment_size + 1; |
5257 | + max_fragment_size = (skb->len - 1) / num_fragments + 1; |
5258 | |
5259 | /* Don't even try to fragment, if we need more than 16 fragments */ |
5260 | - if (skb->len > max_packet_size) |
5261 | + if (num_fragments > BATADV_FRAG_MAX_FRAGMENTS) |
5262 | goto out; |
5263 | |
5264 | bat_priv = orig_node->bat_priv; |
5265 | @@ -498,7 +508,8 @@ int batadv_frag_send_packet(struct sk_buff *skb, |
5266 | goto out; |
5267 | } |
5268 | |
5269 | - skb_fragment = batadv_frag_create(skb, &frag_header, mtu); |
5270 | + skb_fragment = batadv_frag_create(net_dev, skb, &frag_header, |
5271 | + max_fragment_size); |
5272 | if (!skb_fragment) |
5273 | goto out; |
5274 | |
5275 | @@ -517,11 +528,14 @@ int batadv_frag_send_packet(struct sk_buff *skb, |
5276 | frag_header.no++; |
5277 | } |
5278 | |
5279 | - /* Make room for the fragment header. */ |
5280 | - if (batadv_skb_head_push(skb, header_size) < 0 || |
5281 | - pskb_expand_head(skb, header_size + ETH_HLEN, 0, GFP_ATOMIC) < 0) |
5282 | + /* make sure that there is at least enough head for the fragmentation |
5283 | + * and ethernet headers |
5284 | + */ |
5285 | + ret = skb_cow_head(skb, ETH_HLEN + header_size); |
5286 | + if (ret < 0) |
5287 | goto out; |
5288 | |
5289 | + skb_push(skb, header_size); |
5290 | memcpy(skb->data, &frag_header, header_size); |
5291 | |
5292 | /* Send the last fragment */ |
5293 | diff --git a/net/batman-adv/hard-interface.c b/net/batman-adv/hard-interface.c |
5294 | index f528761674df9..4f384abb4cedd 100644 |
5295 | --- a/net/batman-adv/hard-interface.c |
5296 | +++ b/net/batman-adv/hard-interface.c |
5297 | @@ -359,6 +359,9 @@ static void batadv_hardif_recalc_extra_skbroom(struct net_device *soft_iface) |
5298 | needed_headroom = lower_headroom + (lower_header_len - ETH_HLEN); |
5299 | needed_headroom += batadv_max_header_len(); |
5300 | |
5301 | + /* fragmentation headers don't strip the unicast/... header */ |
5302 | + needed_headroom += sizeof(struct batadv_frag_packet); |
5303 | + |
5304 | soft_iface->needed_headroom = needed_headroom; |
5305 | soft_iface->needed_tailroom = lower_tailroom; |
5306 | } |
5307 | diff --git a/net/batman-adv/multicast.c b/net/batman-adv/multicast.c |
5308 | index 5a2aac17805ba..283ac3fb94293 100644 |
5309 | --- a/net/batman-adv/multicast.c |
5310 | +++ b/net/batman-adv/multicast.c |
5311 | @@ -53,10 +53,12 @@ |
5312 | #include <net/ip.h> |
5313 | #include <net/ipv6.h> |
5314 | |
5315 | +#include "bridge_loop_avoidance.h" |
5316 | #include "hard-interface.h" |
5317 | #include "hash.h" |
5318 | #include "log.h" |
5319 | #include "packet.h" |
5320 | +#include "send.h" |
5321 | #include "translation-table.h" |
5322 | #include "tvlv.h" |
5323 | |
5324 | @@ -1251,6 +1253,35 @@ void batadv_mcast_free(struct batadv_priv *bat_priv) |
5325 | spin_unlock_bh(&bat_priv->tt.commit_lock); |
5326 | } |
5327 | |
5328 | +/** |
5329 | + * batadv_mcast_forw_send_orig() - send a multicast packet to an originator |
5330 | + * @bat_priv: the bat priv with all the soft interface information |
5331 | + * @skb: the multicast packet to send |
5332 | + * @vid: the vlan identifier |
5333 | + * @orig_node: the originator to send the packet to |
5334 | + * |
5335 | + * Return: NET_XMIT_DROP in case of error or NET_XMIT_SUCCESS otherwise. |
5336 | + */ |
5337 | +int batadv_mcast_forw_send_orig(struct batadv_priv *bat_priv, |
5338 | + struct sk_buff *skb, |
5339 | + unsigned short vid, |
5340 | + struct batadv_orig_node *orig_node) |
5341 | +{ |
5342 | + /* Avoid sending multicast-in-unicast packets to other BLA |
5343 | + * gateways - they already got the frame from the LAN side |
5344 | + * we share with them. |
5345 | + * TODO: Refactor to take BLA into account earlier, to avoid |
5346 | + * reducing the mcast_fanout count. |
5347 | + */ |
5348 | + if (batadv_bla_is_backbone_gw_orig(bat_priv, orig_node->orig, vid)) { |
5349 | + dev_kfree_skb(skb); |
5350 | + return NET_XMIT_SUCCESS; |
5351 | + } |
5352 | + |
5353 | + return batadv_send_skb_unicast(bat_priv, skb, BATADV_UNICAST, 0, |
5354 | + orig_node, vid); |
5355 | +} |
5356 | + |
5357 | /** |
5358 | * batadv_mcast_purge_orig - reset originator global mcast state modifications |
5359 | * @orig: the originator which is going to get purged |
5360 | diff --git a/net/batman-adv/multicast.h b/net/batman-adv/multicast.h |
5361 | index 1fb00ba84907a..751f547561643 100644 |
5362 | --- a/net/batman-adv/multicast.h |
5363 | +++ b/net/batman-adv/multicast.h |
5364 | @@ -45,6 +45,11 @@ enum batadv_forw_mode |
5365 | batadv_mcast_forw_mode(struct batadv_priv *bat_priv, struct sk_buff *skb, |
5366 | struct batadv_orig_node **mcast_single_orig); |
5367 | |
5368 | +int batadv_mcast_forw_send_orig(struct batadv_priv *bat_priv, |
5369 | + struct sk_buff *skb, |
5370 | + unsigned short vid, |
5371 | + struct batadv_orig_node *orig_node); |
5372 | + |
5373 | void batadv_mcast_init(struct batadv_priv *bat_priv); |
5374 | |
5375 | int batadv_mcast_flags_seq_print_text(struct seq_file *seq, void *offset); |
5376 | @@ -71,6 +76,16 @@ static inline int batadv_mcast_init(struct batadv_priv *bat_priv) |
5377 | return 0; |
5378 | } |
5379 | |
5380 | +static inline int |
5381 | +batadv_mcast_forw_send_orig(struct batadv_priv *bat_priv, |
5382 | + struct sk_buff *skb, |
5383 | + unsigned short vid, |
5384 | + struct batadv_orig_node *orig_node) |
5385 | +{ |
5386 | + kfree_skb(skb); |
5387 | + return NET_XMIT_DROP; |
5388 | +} |
5389 | + |
5390 | static inline void batadv_mcast_free(struct batadv_priv *bat_priv) |
5391 | { |
5392 | } |
5393 | diff --git a/net/batman-adv/soft-interface.c b/net/batman-adv/soft-interface.c |
5394 | index af0a8439cf08a..4805c98588dc1 100644 |
5395 | --- a/net/batman-adv/soft-interface.c |
5396 | +++ b/net/batman-adv/soft-interface.c |
5397 | @@ -356,9 +356,8 @@ send: |
5398 | goto dropped; |
5399 | ret = batadv_send_skb_via_gw(bat_priv, skb, vid); |
5400 | } else if (mcast_single_orig) { |
5401 | - ret = batadv_send_skb_unicast(bat_priv, skb, |
5402 | - BATADV_UNICAST, 0, |
5403 | - mcast_single_orig, vid); |
5404 | + ret = batadv_mcast_forw_send_orig(bat_priv, skb, vid, |
5405 | + mcast_single_orig); |
5406 | } else { |
5407 | if (batadv_dat_snoop_outgoing_arp_request(bat_priv, |
5408 | skb)) |
5409 | diff --git a/net/bluetooth/l2cap_sock.c b/net/bluetooth/l2cap_sock.c |
5410 | index f46f59129bf39..a47430d843dcf 100644 |
5411 | --- a/net/bluetooth/l2cap_sock.c |
5412 | +++ b/net/bluetooth/l2cap_sock.c |
5413 | @@ -1319,6 +1319,9 @@ static void l2cap_sock_close_cb(struct l2cap_chan *chan) |
5414 | { |
5415 | struct sock *sk = chan->data; |
5416 | |
5417 | + if (!sk) |
5418 | + return; |
5419 | + |
5420 | l2cap_sock_kill(sk); |
5421 | } |
5422 | |
5423 | @@ -1327,6 +1330,9 @@ static void l2cap_sock_teardown_cb(struct l2cap_chan *chan, int err) |
5424 | struct sock *sk = chan->data; |
5425 | struct sock *parent; |
5426 | |
5427 | + if (!sk) |
5428 | + return; |
5429 | + |
5430 | BT_DBG("chan %p state %s", chan, state_to_string(chan->state)); |
5431 | |
5432 | /* This callback can be called both for server (BT_LISTEN) |
5433 | @@ -1510,8 +1516,10 @@ static void l2cap_sock_destruct(struct sock *sk) |
5434 | { |
5435 | BT_DBG("sk %p", sk); |
5436 | |
5437 | - if (l2cap_pi(sk)->chan) |
5438 | + if (l2cap_pi(sk)->chan) { |
5439 | + l2cap_pi(sk)->chan->data = NULL; |
5440 | l2cap_chan_put(l2cap_pi(sk)->chan); |
5441 | + } |
5442 | |
5443 | if (l2cap_pi(sk)->rx_busy_skb) { |
5444 | kfree_skb(l2cap_pi(sk)->rx_busy_skb); |
5445 | diff --git a/net/bluetooth/sco.c b/net/bluetooth/sco.c |
5446 | index 77f88c7df6053..b3b4ffaa394f6 100644 |
5447 | --- a/net/bluetooth/sco.c |
5448 | +++ b/net/bluetooth/sco.c |
5449 | @@ -254,7 +254,8 @@ static int sco_connect(struct hci_dev *hdev, struct sock *sk) |
5450 | return err; |
5451 | } |
5452 | |
5453 | -static int sco_send_frame(struct sock *sk, struct msghdr *msg, int len) |
5454 | +static int sco_send_frame(struct sock *sk, void *buf, int len, |
5455 | + unsigned int msg_flags) |
5456 | { |
5457 | struct sco_conn *conn = sco_pi(sk)->conn; |
5458 | struct sk_buff *skb; |
5459 | @@ -266,15 +267,11 @@ static int sco_send_frame(struct sock *sk, struct msghdr *msg, int len) |
5460 | |
5461 | BT_DBG("sk %p len %d", sk, len); |
5462 | |
5463 | - skb = bt_skb_send_alloc(sk, len, msg->msg_flags & MSG_DONTWAIT, &err); |
5464 | + skb = bt_skb_send_alloc(sk, len, msg_flags & MSG_DONTWAIT, &err); |
5465 | if (!skb) |
5466 | return err; |
5467 | |
5468 | - if (memcpy_from_msg(skb_put(skb, len), msg, len)) { |
5469 | - kfree_skb(skb); |
5470 | - return -EFAULT; |
5471 | - } |
5472 | - |
5473 | + memcpy(skb_put(skb, len), buf, len); |
5474 | hci_send_sco(conn->hcon, skb); |
5475 | |
5476 | return len; |
5477 | @@ -693,6 +690,7 @@ static int sco_sock_sendmsg(struct socket *sock, struct msghdr *msg, |
5478 | size_t len) |
5479 | { |
5480 | struct sock *sk = sock->sk; |
5481 | + void *buf; |
5482 | int err; |
5483 | |
5484 | BT_DBG("sock %p, sk %p", sock, sk); |
5485 | @@ -704,14 +702,24 @@ static int sco_sock_sendmsg(struct socket *sock, struct msghdr *msg, |
5486 | if (msg->msg_flags & MSG_OOB) |
5487 | return -EOPNOTSUPP; |
5488 | |
5489 | + buf = kmalloc(len, GFP_KERNEL); |
5490 | + if (!buf) |
5491 | + return -ENOMEM; |
5492 | + |
5493 | + if (memcpy_from_msg(buf, msg, len)) { |
5494 | + kfree(buf); |
5495 | + return -EFAULT; |
5496 | + } |
5497 | + |
5498 | lock_sock(sk); |
5499 | |
5500 | if (sk->sk_state == BT_CONNECTED) |
5501 | - err = sco_send_frame(sk, msg, len); |
5502 | + err = sco_send_frame(sk, buf, len, msg->msg_flags); |
5503 | else |
5504 | err = -ENOTCONN; |
5505 | |
5506 | release_sock(sk); |
5507 | + kfree(buf); |
5508 | return err; |
5509 | } |
5510 | |
5511 | diff --git a/net/core/stream.c b/net/core/stream.c |
5512 | index 6e41b20bf9f86..05b63feac7e57 100644 |
5513 | --- a/net/core/stream.c |
5514 | +++ b/net/core/stream.c |
5515 | @@ -193,9 +193,6 @@ void sk_stream_kill_queues(struct sock *sk) |
5516 | /* First the read buffer. */ |
5517 | __skb_queue_purge(&sk->sk_receive_queue); |
5518 | |
5519 | - /* Next, the error queue. */ |
5520 | - __skb_queue_purge(&sk->sk_error_queue); |
5521 | - |
5522 | /* Next, the write queue. */ |
5523 | WARN_ON(!skb_queue_empty(&sk->sk_write_queue)); |
5524 | |
5525 | diff --git a/net/core/sysctl_net_core.c b/net/core/sysctl_net_core.c |
5526 | index b4318c1b5b960..f62e177267c34 100644 |
5527 | --- a/net/core/sysctl_net_core.c |
5528 | +++ b/net/core/sysctl_net_core.c |
5529 | @@ -368,7 +368,7 @@ static struct ctl_table net_core_table[] = { |
5530 | .mode = 0600, |
5531 | .proc_handler = proc_dolongvec_minmax_bpf_restricted, |
5532 | .extra1 = &long_one, |
5533 | - .extra2 = &long_max, |
5534 | + .extra2 = &bpf_jit_limit_max, |
5535 | }, |
5536 | #endif |
5537 | { |
5538 | diff --git a/net/netfilter/nfnetlink_queue.c b/net/netfilter/nfnetlink_queue.c |
5539 | index 2a811b5634d46..a35510565d4d1 100644 |
5540 | --- a/net/netfilter/nfnetlink_queue.c |
5541 | +++ b/net/netfilter/nfnetlink_queue.c |
5542 | @@ -539,7 +539,7 @@ nfqnl_build_packet_message(struct net *net, struct nfqnl_instance *queue, |
5543 | goto nla_put_failure; |
5544 | |
5545 | if (indev && entskb->dev && |
5546 | - entskb->mac_header != entskb->network_header) { |
5547 | + skb_mac_header_was_set(entskb)) { |
5548 | struct nfqnl_msg_packet_hw phw; |
5549 | int len; |
5550 | |
5551 | diff --git a/net/nfc/core.c b/net/nfc/core.c |
5552 | index c699d64a0753a..32a2dfc08f480 100644 |
5553 | --- a/net/nfc/core.c |
5554 | +++ b/net/nfc/core.c |
5555 | @@ -106,13 +106,13 @@ int nfc_dev_up(struct nfc_dev *dev) |
5556 | |
5557 | device_lock(&dev->dev); |
5558 | |
5559 | - if (dev->rfkill && rfkill_blocked(dev->rfkill)) { |
5560 | - rc = -ERFKILL; |
5561 | + if (!device_is_registered(&dev->dev)) { |
5562 | + rc = -ENODEV; |
5563 | goto error; |
5564 | } |
5565 | |
5566 | - if (!device_is_registered(&dev->dev)) { |
5567 | - rc = -ENODEV; |
5568 | + if (dev->rfkill && rfkill_blocked(dev->rfkill)) { |
5569 | + rc = -ERFKILL; |
5570 | goto error; |
5571 | } |
5572 | |
5573 | @@ -1133,11 +1133,7 @@ int nfc_register_device(struct nfc_dev *dev) |
5574 | if (rc) |
5575 | pr_err("Could not register llcp device\n"); |
5576 | |
5577 | - rc = nfc_genl_device_added(dev); |
5578 | - if (rc) |
5579 | - pr_debug("The userspace won't be notified that the device %s was added\n", |
5580 | - dev_name(&dev->dev)); |
5581 | - |
5582 | + device_lock(&dev->dev); |
5583 | dev->rfkill = rfkill_alloc(dev_name(&dev->dev), &dev->dev, |
5584 | RFKILL_TYPE_NFC, &nfc_rfkill_ops, dev); |
5585 | if (dev->rfkill) { |
5586 | @@ -1146,6 +1142,12 @@ int nfc_register_device(struct nfc_dev *dev) |
5587 | dev->rfkill = NULL; |
5588 | } |
5589 | } |
5590 | + device_unlock(&dev->dev); |
5591 | + |
5592 | + rc = nfc_genl_device_added(dev); |
5593 | + if (rc) |
5594 | + pr_debug("The userspace won't be notified that the device %s was added\n", |
5595 | + dev_name(&dev->dev)); |
5596 | |
5597 | return 0; |
5598 | } |
5599 | @@ -1162,10 +1164,17 @@ void nfc_unregister_device(struct nfc_dev *dev) |
5600 | |
5601 | pr_debug("dev_name=%s\n", dev_name(&dev->dev)); |
5602 | |
5603 | + rc = nfc_genl_device_removed(dev); |
5604 | + if (rc) |
5605 | + pr_debug("The userspace won't be notified that the device %s " |
5606 | + "was removed\n", dev_name(&dev->dev)); |
5607 | + |
5608 | + device_lock(&dev->dev); |
5609 | if (dev->rfkill) { |
5610 | rfkill_unregister(dev->rfkill); |
5611 | rfkill_destroy(dev->rfkill); |
5612 | } |
5613 | + device_unlock(&dev->dev); |
5614 | |
5615 | if (dev->ops->check_presence) { |
5616 | device_lock(&dev->dev); |
5617 | @@ -1175,11 +1184,6 @@ void nfc_unregister_device(struct nfc_dev *dev) |
5618 | cancel_work_sync(&dev->check_pres_work); |
5619 | } |
5620 | |
5621 | - rc = nfc_genl_device_removed(dev); |
5622 | - if (rc) |
5623 | - pr_debug("The userspace won't be notified that the device %s " |
5624 | - "was removed\n", dev_name(&dev->dev)); |
5625 | - |
5626 | nfc_llcp_unregister_device(dev); |
5627 | |
5628 | mutex_lock(&nfc_devlist_mutex); |
5629 | diff --git a/net/nfc/nci/core.c b/net/nfc/nci/core.c |
5630 | index bff6ba84d3979..19518a231e571 100644 |
5631 | --- a/net/nfc/nci/core.c |
5632 | +++ b/net/nfc/nci/core.c |
5633 | @@ -157,12 +157,15 @@ inline int nci_request(struct nci_dev *ndev, |
5634 | { |
5635 | int rc; |
5636 | |
5637 | - if (!test_bit(NCI_UP, &ndev->flags)) |
5638 | - return -ENETDOWN; |
5639 | - |
5640 | /* Serialize all requests */ |
5641 | mutex_lock(&ndev->req_lock); |
5642 | - rc = __nci_request(ndev, req, opt, timeout); |
5643 | + /* check the state after obtaing the lock against any races |
5644 | + * from nci_close_device when the device gets removed. |
5645 | + */ |
5646 | + if (test_bit(NCI_UP, &ndev->flags)) |
5647 | + rc = __nci_request(ndev, req, opt, timeout); |
5648 | + else |
5649 | + rc = -ENETDOWN; |
5650 | mutex_unlock(&ndev->req_lock); |
5651 | |
5652 | return rc; |
5653 | diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c |
5654 | index 2fecdfe49bae3..95470d628d34b 100644 |
5655 | --- a/net/vmw_vsock/af_vsock.c |
5656 | +++ b/net/vmw_vsock/af_vsock.c |
5657 | @@ -1173,6 +1173,8 @@ static int vsock_stream_connect(struct socket *sock, struct sockaddr *addr, |
5658 | * non-blocking call. |
5659 | */ |
5660 | err = -EALREADY; |
5661 | + if (flags & O_NONBLOCK) |
5662 | + goto out; |
5663 | break; |
5664 | default: |
5665 | if ((sk->sk_state == VSOCK_SS_LISTEN) || |
5666 | diff --git a/net/wireless/util.c b/net/wireless/util.c |
5667 | index a16e805c4857f..71f9c14174b55 100644 |
5668 | --- a/net/wireless/util.c |
5669 | +++ b/net/wireless/util.c |
5670 | @@ -1035,6 +1035,7 @@ int cfg80211_change_iface(struct cfg80211_registered_device *rdev, |
5671 | |
5672 | switch (otype) { |
5673 | case NL80211_IFTYPE_AP: |
5674 | + case NL80211_IFTYPE_P2P_GO: |
5675 | cfg80211_stop_ap(rdev, dev, true); |
5676 | break; |
5677 | case NL80211_IFTYPE_ADHOC: |
5678 | diff --git a/samples/kprobes/kretprobe_example.c b/samples/kprobes/kretprobe_example.c |
5679 | index 7f9060f435cde..da6de5e78e1dd 100644 |
5680 | --- a/samples/kprobes/kretprobe_example.c |
5681 | +++ b/samples/kprobes/kretprobe_example.c |
5682 | @@ -83,7 +83,7 @@ static int __init kretprobe_init(void) |
5683 | ret = register_kretprobe(&my_kretprobe); |
5684 | if (ret < 0) { |
5685 | pr_err("register_kretprobe failed, returned %d\n", ret); |
5686 | - return -1; |
5687 | + return ret; |
5688 | } |
5689 | pr_info("Planted return probe at %s: %p\n", |
5690 | my_kretprobe.kp.symbol_name, my_kretprobe.kp.addr); |
5691 | diff --git a/security/integrity/evm/evm_main.c b/security/integrity/evm/evm_main.c |
5692 | index 976b8dce64966..0138932ef34de 100644 |
5693 | --- a/security/integrity/evm/evm_main.c |
5694 | +++ b/security/integrity/evm/evm_main.c |
5695 | @@ -54,7 +54,7 @@ char *evm_config_xattrnames[] = { |
5696 | NULL |
5697 | }; |
5698 | |
5699 | -static int evm_fixmode; |
5700 | +static int evm_fixmode __ro_after_init; |
5701 | static int __init evm_set_fixmode(char *str) |
5702 | { |
5703 | if (strncmp(str, "fix", 3) == 0) |
5704 | diff --git a/security/security.c b/security/security.c |
5705 | index 112df16be770d..9a13d72a64465 100644 |
5706 | --- a/security/security.c |
5707 | +++ b/security/security.c |
5708 | @@ -131,25 +131,25 @@ int __init security_module_enable(const char *module) |
5709 | |
5710 | /* Security operations */ |
5711 | |
5712 | -int security_binder_set_context_mgr(struct task_struct *mgr) |
5713 | +int security_binder_set_context_mgr(const struct cred *mgr) |
5714 | { |
5715 | return call_int_hook(binder_set_context_mgr, 0, mgr); |
5716 | } |
5717 | |
5718 | -int security_binder_transaction(struct task_struct *from, |
5719 | - struct task_struct *to) |
5720 | +int security_binder_transaction(const struct cred *from, |
5721 | + const struct cred *to) |
5722 | { |
5723 | return call_int_hook(binder_transaction, 0, from, to); |
5724 | } |
5725 | |
5726 | -int security_binder_transfer_binder(struct task_struct *from, |
5727 | - struct task_struct *to) |
5728 | +int security_binder_transfer_binder(const struct cred *from, |
5729 | + const struct cred *to) |
5730 | { |
5731 | return call_int_hook(binder_transfer_binder, 0, from, to); |
5732 | } |
5733 | |
5734 | -int security_binder_transfer_file(struct task_struct *from, |
5735 | - struct task_struct *to, struct file *file) |
5736 | +int security_binder_transfer_file(const struct cred *from, |
5737 | + const struct cred *to, struct file *file) |
5738 | { |
5739 | return call_int_hook(binder_transfer_file, 0, from, to, file); |
5740 | } |
5741 | diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c |
5742 | index a2b63a6a33c7e..607c7fc4f24d3 100644 |
5743 | --- a/security/selinux/hooks.c |
5744 | +++ b/security/selinux/hooks.c |
5745 | @@ -2065,21 +2065,18 @@ static inline u32 open_file_to_av(struct file *file) |
5746 | |
5747 | /* Hook functions begin here. */ |
5748 | |
5749 | -static int selinux_binder_set_context_mgr(struct task_struct *mgr) |
5750 | +static int selinux_binder_set_context_mgr(const struct cred *mgr) |
5751 | { |
5752 | - u32 mysid = current_sid(); |
5753 | - u32 mgrsid = task_sid(mgr); |
5754 | - |
5755 | - return avc_has_perm(mysid, mgrsid, SECCLASS_BINDER, |
5756 | + return avc_has_perm(current_sid(), cred_sid(mgr), SECCLASS_BINDER, |
5757 | BINDER__SET_CONTEXT_MGR, NULL); |
5758 | } |
5759 | |
5760 | -static int selinux_binder_transaction(struct task_struct *from, |
5761 | - struct task_struct *to) |
5762 | +static int selinux_binder_transaction(const struct cred *from, |
5763 | + const struct cred *to) |
5764 | { |
5765 | u32 mysid = current_sid(); |
5766 | - u32 fromsid = task_sid(from); |
5767 | - u32 tosid = task_sid(to); |
5768 | + u32 fromsid = cred_sid(from); |
5769 | + u32 tosid = cred_sid(to); |
5770 | int rc; |
5771 | |
5772 | if (mysid != fromsid) { |
5773 | @@ -2093,21 +2090,19 @@ static int selinux_binder_transaction(struct task_struct *from, |
5774 | NULL); |
5775 | } |
5776 | |
5777 | -static int selinux_binder_transfer_binder(struct task_struct *from, |
5778 | - struct task_struct *to) |
5779 | +static int selinux_binder_transfer_binder(const struct cred *from, |
5780 | + const struct cred *to) |
5781 | { |
5782 | - u32 fromsid = task_sid(from); |
5783 | - u32 tosid = task_sid(to); |
5784 | - |
5785 | - return avc_has_perm(fromsid, tosid, SECCLASS_BINDER, BINDER__TRANSFER, |
5786 | + return avc_has_perm(cred_sid(from), cred_sid(to), |
5787 | + SECCLASS_BINDER, BINDER__TRANSFER, |
5788 | NULL); |
5789 | } |
5790 | |
5791 | -static int selinux_binder_transfer_file(struct task_struct *from, |
5792 | - struct task_struct *to, |
5793 | +static int selinux_binder_transfer_file(const struct cred *from, |
5794 | + const struct cred *to, |
5795 | struct file *file) |
5796 | { |
5797 | - u32 sid = task_sid(to); |
5798 | + u32 sid = cred_sid(to); |
5799 | struct file_security_struct *fsec = file->f_security; |
5800 | struct dentry *dentry = file->f_path.dentry; |
5801 | struct inode_security_struct *isec; |
5802 | diff --git a/security/smack/smackfs.c b/security/smack/smackfs.c |
5803 | index 966d30bf2e388..ed5b89fbbd96f 100644 |
5804 | --- a/security/smack/smackfs.c |
5805 | +++ b/security/smack/smackfs.c |
5806 | @@ -716,9 +716,7 @@ static void smk_cipso_doi(void) |
5807 | printk(KERN_WARNING "%s:%d remove rc = %d\n", |
5808 | __func__, __LINE__, rc); |
5809 | |
5810 | - doip = kmalloc(sizeof(struct cipso_v4_doi), GFP_KERNEL); |
5811 | - if (doip == NULL) |
5812 | - panic("smack: Failed to initialize cipso DOI.\n"); |
5813 | + doip = kmalloc(sizeof(struct cipso_v4_doi), GFP_KERNEL | __GFP_NOFAIL); |
5814 | doip->map.std = NULL; |
5815 | doip->doi = smk_cipso_doi_value; |
5816 | doip->type = CIPSO_V4_MAP_PASS; |
5817 | @@ -737,7 +735,7 @@ static void smk_cipso_doi(void) |
5818 | if (rc != 0) { |
5819 | printk(KERN_WARNING "%s:%d map add rc = %d\n", |
5820 | __func__, __LINE__, rc); |
5821 | - kfree(doip); |
5822 | + netlbl_cfg_cipsov4_del(doip->doi, &nai); |
5823 | return; |
5824 | } |
5825 | } |
5826 | @@ -854,6 +852,7 @@ static int smk_open_cipso(struct inode *inode, struct file *file) |
5827 | static ssize_t smk_set_cipso(struct file *file, const char __user *buf, |
5828 | size_t count, loff_t *ppos, int format) |
5829 | { |
5830 | + struct netlbl_lsm_catmap *old_cat; |
5831 | struct smack_known *skp; |
5832 | struct netlbl_lsm_secattr ncats; |
5833 | char mapcatset[SMK_CIPSOLEN]; |
5834 | @@ -943,9 +942,11 @@ static ssize_t smk_set_cipso(struct file *file, const char __user *buf, |
5835 | |
5836 | rc = smk_netlbl_mls(maplevel, mapcatset, &ncats, SMK_CIPSOLEN); |
5837 | if (rc >= 0) { |
5838 | - netlbl_catmap_free(skp->smk_netlabel.attr.mls.cat); |
5839 | + old_cat = skp->smk_netlabel.attr.mls.cat; |
5840 | skp->smk_netlabel.attr.mls.cat = ncats.attr.mls.cat; |
5841 | skp->smk_netlabel.attr.mls.lvl = ncats.attr.mls.lvl; |
5842 | + synchronize_rcu(); |
5843 | + netlbl_catmap_free(old_cat); |
5844 | rc = count; |
5845 | } |
5846 | |
5847 | diff --git a/sound/core/oss/mixer_oss.c b/sound/core/oss/mixer_oss.c |
5848 | index 2ff9c12d664a8..1845db338d0f6 100644 |
5849 | --- a/sound/core/oss/mixer_oss.c |
5850 | +++ b/sound/core/oss/mixer_oss.c |
5851 | @@ -145,11 +145,13 @@ static int snd_mixer_oss_devmask(struct snd_mixer_oss_file *fmixer) |
5852 | |
5853 | if (mixer == NULL) |
5854 | return -EIO; |
5855 | + mutex_lock(&mixer->reg_mutex); |
5856 | for (chn = 0; chn < 31; chn++) { |
5857 | pslot = &mixer->slots[chn]; |
5858 | if (pslot->put_volume || pslot->put_recsrc) |
5859 | result |= 1 << chn; |
5860 | } |
5861 | + mutex_unlock(&mixer->reg_mutex); |
5862 | return result; |
5863 | } |
5864 | |
5865 | @@ -161,11 +163,13 @@ static int snd_mixer_oss_stereodevs(struct snd_mixer_oss_file *fmixer) |
5866 | |
5867 | if (mixer == NULL) |
5868 | return -EIO; |
5869 | + mutex_lock(&mixer->reg_mutex); |
5870 | for (chn = 0; chn < 31; chn++) { |
5871 | pslot = &mixer->slots[chn]; |
5872 | if (pslot->put_volume && pslot->stereo) |
5873 | result |= 1 << chn; |
5874 | } |
5875 | + mutex_unlock(&mixer->reg_mutex); |
5876 | return result; |
5877 | } |
5878 | |
5879 | @@ -176,6 +180,7 @@ static int snd_mixer_oss_recmask(struct snd_mixer_oss_file *fmixer) |
5880 | |
5881 | if (mixer == NULL) |
5882 | return -EIO; |
5883 | + mutex_lock(&mixer->reg_mutex); |
5884 | if (mixer->put_recsrc && mixer->get_recsrc) { /* exclusive */ |
5885 | result = mixer->mask_recsrc; |
5886 | } else { |
5887 | @@ -187,6 +192,7 @@ static int snd_mixer_oss_recmask(struct snd_mixer_oss_file *fmixer) |
5888 | result |= 1 << chn; |
5889 | } |
5890 | } |
5891 | + mutex_unlock(&mixer->reg_mutex); |
5892 | return result; |
5893 | } |
5894 | |
5895 | @@ -197,11 +203,12 @@ static int snd_mixer_oss_get_recsrc(struct snd_mixer_oss_file *fmixer) |
5896 | |
5897 | if (mixer == NULL) |
5898 | return -EIO; |
5899 | + mutex_lock(&mixer->reg_mutex); |
5900 | if (mixer->put_recsrc && mixer->get_recsrc) { /* exclusive */ |
5901 | - int err; |
5902 | unsigned int index; |
5903 | - if ((err = mixer->get_recsrc(fmixer, &index)) < 0) |
5904 | - return err; |
5905 | + result = mixer->get_recsrc(fmixer, &index); |
5906 | + if (result < 0) |
5907 | + goto unlock; |
5908 | result = 1 << index; |
5909 | } else { |
5910 | struct snd_mixer_oss_slot *pslot; |
5911 | @@ -216,7 +223,10 @@ static int snd_mixer_oss_get_recsrc(struct snd_mixer_oss_file *fmixer) |
5912 | } |
5913 | } |
5914 | } |
5915 | - return mixer->oss_recsrc = result; |
5916 | + mixer->oss_recsrc = result; |
5917 | + unlock: |
5918 | + mutex_unlock(&mixer->reg_mutex); |
5919 | + return result; |
5920 | } |
5921 | |
5922 | static int snd_mixer_oss_set_recsrc(struct snd_mixer_oss_file *fmixer, int recsrc) |
5923 | @@ -229,6 +239,7 @@ static int snd_mixer_oss_set_recsrc(struct snd_mixer_oss_file *fmixer, int recsr |
5924 | |
5925 | if (mixer == NULL) |
5926 | return -EIO; |
5927 | + mutex_lock(&mixer->reg_mutex); |
5928 | if (mixer->get_recsrc && mixer->put_recsrc) { /* exclusive input */ |
5929 | if (recsrc & ~mixer->oss_recsrc) |
5930 | recsrc &= ~mixer->oss_recsrc; |
5931 | @@ -254,6 +265,7 @@ static int snd_mixer_oss_set_recsrc(struct snd_mixer_oss_file *fmixer, int recsr |
5932 | } |
5933 | } |
5934 | } |
5935 | + mutex_unlock(&mixer->reg_mutex); |
5936 | return result; |
5937 | } |
5938 | |
5939 | @@ -265,6 +277,7 @@ static int snd_mixer_oss_get_volume(struct snd_mixer_oss_file *fmixer, int slot) |
5940 | |
5941 | if (mixer == NULL || slot > 30) |
5942 | return -EIO; |
5943 | + mutex_lock(&mixer->reg_mutex); |
5944 | pslot = &mixer->slots[slot]; |
5945 | left = pslot->volume[0]; |
5946 | right = pslot->volume[1]; |
5947 | @@ -272,15 +285,21 @@ static int snd_mixer_oss_get_volume(struct snd_mixer_oss_file *fmixer, int slot) |
5948 | result = pslot->get_volume(fmixer, pslot, &left, &right); |
5949 | if (!pslot->stereo) |
5950 | right = left; |
5951 | - if (snd_BUG_ON(left < 0 || left > 100)) |
5952 | - return -EIO; |
5953 | - if (snd_BUG_ON(right < 0 || right > 100)) |
5954 | - return -EIO; |
5955 | + if (snd_BUG_ON(left < 0 || left > 100)) { |
5956 | + result = -EIO; |
5957 | + goto unlock; |
5958 | + } |
5959 | + if (snd_BUG_ON(right < 0 || right > 100)) { |
5960 | + result = -EIO; |
5961 | + goto unlock; |
5962 | + } |
5963 | if (result >= 0) { |
5964 | pslot->volume[0] = left; |
5965 | pslot->volume[1] = right; |
5966 | result = (left & 0xff) | ((right & 0xff) << 8); |
5967 | } |
5968 | + unlock: |
5969 | + mutex_unlock(&mixer->reg_mutex); |
5970 | return result; |
5971 | } |
5972 | |
5973 | @@ -293,6 +312,7 @@ static int snd_mixer_oss_set_volume(struct snd_mixer_oss_file *fmixer, |
5974 | |
5975 | if (mixer == NULL || slot > 30) |
5976 | return -EIO; |
5977 | + mutex_lock(&mixer->reg_mutex); |
5978 | pslot = &mixer->slots[slot]; |
5979 | if (left > 100) |
5980 | left = 100; |
5981 | @@ -303,10 +323,13 @@ static int snd_mixer_oss_set_volume(struct snd_mixer_oss_file *fmixer, |
5982 | if (pslot->put_volume) |
5983 | result = pslot->put_volume(fmixer, pslot, left, right); |
5984 | if (result < 0) |
5985 | - return result; |
5986 | + goto unlock; |
5987 | pslot->volume[0] = left; |
5988 | pslot->volume[1] = right; |
5989 | - return (left & 0xff) | ((right & 0xff) << 8); |
5990 | + result = (left & 0xff) | ((right & 0xff) << 8); |
5991 | + unlock: |
5992 | + mutex_unlock(&mixer->reg_mutex); |
5993 | + return result; |
5994 | } |
5995 | |
5996 | static int snd_mixer_oss_ioctl1(struct snd_mixer_oss_file *fmixer, unsigned int cmd, unsigned long arg) |
5997 | diff --git a/sound/core/timer.c b/sound/core/timer.c |
5998 | index 6475b85599364..596ba572d6c49 100644 |
5999 | --- a/sound/core/timer.c |
6000 | +++ b/sound/core/timer.c |
6001 | @@ -581,13 +581,13 @@ static int snd_timer_stop1(struct snd_timer_instance *timeri, bool stop) |
6002 | if (!timer) |
6003 | return -EINVAL; |
6004 | spin_lock_irqsave(&timer->lock, flags); |
6005 | + list_del_init(&timeri->ack_list); |
6006 | + list_del_init(&timeri->active_list); |
6007 | if (!(timeri->flags & (SNDRV_TIMER_IFLG_RUNNING | |
6008 | SNDRV_TIMER_IFLG_START))) { |
6009 | result = -EBUSY; |
6010 | goto unlock; |
6011 | } |
6012 | - list_del_init(&timeri->ack_list); |
6013 | - list_del_init(&timeri->active_list); |
6014 | if (timer->card && timer->card->shutdown) |
6015 | goto unlock; |
6016 | if (stop) { |
6017 | @@ -622,23 +622,22 @@ static int snd_timer_stop1(struct snd_timer_instance *timeri, bool stop) |
6018 | static int snd_timer_stop_slave(struct snd_timer_instance *timeri, bool stop) |
6019 | { |
6020 | unsigned long flags; |
6021 | + bool running; |
6022 | |
6023 | spin_lock_irqsave(&slave_active_lock, flags); |
6024 | - if (!(timeri->flags & SNDRV_TIMER_IFLG_RUNNING)) { |
6025 | - spin_unlock_irqrestore(&slave_active_lock, flags); |
6026 | - return -EBUSY; |
6027 | - } |
6028 | + running = timeri->flags & SNDRV_TIMER_IFLG_RUNNING; |
6029 | timeri->flags &= ~SNDRV_TIMER_IFLG_RUNNING; |
6030 | if (timeri->timer) { |
6031 | spin_lock(&timeri->timer->lock); |
6032 | list_del_init(&timeri->ack_list); |
6033 | list_del_init(&timeri->active_list); |
6034 | - snd_timer_notify1(timeri, stop ? SNDRV_TIMER_EVENT_STOP : |
6035 | - SNDRV_TIMER_EVENT_PAUSE); |
6036 | + if (running) |
6037 | + snd_timer_notify1(timeri, stop ? SNDRV_TIMER_EVENT_STOP : |
6038 | + SNDRV_TIMER_EVENT_PAUSE); |
6039 | spin_unlock(&timeri->timer->lock); |
6040 | } |
6041 | spin_unlock_irqrestore(&slave_active_lock, flags); |
6042 | - return 0; |
6043 | + return running ? 0 : -EBUSY; |
6044 | } |
6045 | |
6046 | /* |
6047 | diff --git a/sound/isa/gus/gus_dma.c b/sound/isa/gus/gus_dma.c |
6048 | index 36c27c8323601..2e27cd3427c87 100644 |
6049 | --- a/sound/isa/gus/gus_dma.c |
6050 | +++ b/sound/isa/gus/gus_dma.c |
6051 | @@ -141,6 +141,8 @@ static void snd_gf1_dma_interrupt(struct snd_gus_card * gus) |
6052 | } |
6053 | block = snd_gf1_dma_next_block(gus); |
6054 | spin_unlock(&gus->dma_lock); |
6055 | + if (!block) |
6056 | + return; |
6057 | snd_gf1_dma_program(gus, block->addr, block->buf_addr, block->count, (unsigned short) block->cmd); |
6058 | kfree(block); |
6059 | #if 0 |
6060 | diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c |
6061 | index 5451705f429e0..21b0368c2a3bc 100644 |
6062 | --- a/sound/soc/soc-dapm.c |
6063 | +++ b/sound/soc/soc-dapm.c |
6064 | @@ -2406,8 +2406,13 @@ static struct snd_soc_dapm_widget *dapm_find_widget( |
6065 | return NULL; |
6066 | } |
6067 | |
6068 | -static int snd_soc_dapm_set_pin(struct snd_soc_dapm_context *dapm, |
6069 | - const char *pin, int status) |
6070 | +/* |
6071 | + * set the DAPM pin status: |
6072 | + * returns 1 when the value has been updated, 0 when unchanged, or a negative |
6073 | + * error code; called from kcontrol put callback |
6074 | + */ |
6075 | +static int __snd_soc_dapm_set_pin(struct snd_soc_dapm_context *dapm, |
6076 | + const char *pin, int status) |
6077 | { |
6078 | struct snd_soc_dapm_widget *w = dapm_find_widget(dapm, pin, true); |
6079 | int ret = 0; |
6080 | @@ -2433,6 +2438,18 @@ static int snd_soc_dapm_set_pin(struct snd_soc_dapm_context *dapm, |
6081 | return ret; |
6082 | } |
6083 | |
6084 | +/* |
6085 | + * similar as __snd_soc_dapm_set_pin(), but returns 0 when successful; |
6086 | + * called from several API functions below |
6087 | + */ |
6088 | +static int snd_soc_dapm_set_pin(struct snd_soc_dapm_context *dapm, |
6089 | + const char *pin, int status) |
6090 | +{ |
6091 | + int ret = __snd_soc_dapm_set_pin(dapm, pin, status); |
6092 | + |
6093 | + return ret < 0 ? ret : 0; |
6094 | +} |
6095 | + |
6096 | /** |
6097 | * snd_soc_dapm_sync_unlocked - scan and power dapm paths |
6098 | * @dapm: DAPM context |
6099 | @@ -3327,10 +3344,10 @@ int snd_soc_dapm_put_pin_switch(struct snd_kcontrol *kcontrol, |
6100 | const char *pin = (const char *)kcontrol->private_value; |
6101 | int ret; |
6102 | |
6103 | - if (ucontrol->value.integer.value[0]) |
6104 | - ret = snd_soc_dapm_enable_pin(&card->dapm, pin); |
6105 | - else |
6106 | - ret = snd_soc_dapm_disable_pin(&card->dapm, pin); |
6107 | + mutex_lock_nested(&card->dapm_mutex, SND_SOC_DAPM_CLASS_RUNTIME); |
6108 | + ret = __snd_soc_dapm_set_pin(&card->dapm, pin, |
6109 | + !!ucontrol->value.integer.value[0]); |
6110 | + mutex_unlock(&card->dapm_mutex); |
6111 | |
6112 | snd_soc_dapm_sync(&card->dapm); |
6113 | return ret; |
6114 | diff --git a/sound/synth/emux/emux.c b/sound/synth/emux/emux.c |
6115 | index 9312cd8a6fdd1..c5c6d360843aa 100644 |
6116 | --- a/sound/synth/emux/emux.c |
6117 | +++ b/sound/synth/emux/emux.c |
6118 | @@ -101,7 +101,7 @@ int snd_emux_register(struct snd_emux *emu, struct snd_card *card, int index, ch |
6119 | emu->name = kstrdup(name, GFP_KERNEL); |
6120 | emu->voices = kcalloc(emu->max_voices, sizeof(struct snd_emux_voice), |
6121 | GFP_KERNEL); |
6122 | - if (emu->voices == NULL) |
6123 | + if (emu->name == NULL || emu->voices == NULL) |
6124 | return -ENOMEM; |
6125 | |
6126 | /* create soundfont list */ |
6127 | diff --git a/sound/usb/6fire/comm.c b/sound/usb/6fire/comm.c |
6128 | index 161215d78d952..f29c115b9d564 100644 |
6129 | --- a/sound/usb/6fire/comm.c |
6130 | +++ b/sound/usb/6fire/comm.c |
6131 | @@ -99,7 +99,7 @@ static int usb6fire_comm_send_buffer(u8 *buffer, struct usb_device *dev) |
6132 | int actual_len; |
6133 | |
6134 | ret = usb_interrupt_msg(dev, usb_sndintpipe(dev, COMM_EP), |
6135 | - buffer, buffer[1] + 2, &actual_len, HZ); |
6136 | + buffer, buffer[1] + 2, &actual_len, 1000); |
6137 | if (ret < 0) |
6138 | return ret; |
6139 | else if (actual_len != buffer[1] + 2) |
6140 | diff --git a/sound/usb/6fire/firmware.c b/sound/usb/6fire/firmware.c |
6141 | index 9520b4cd70385..7a89111041edc 100644 |
6142 | --- a/sound/usb/6fire/firmware.c |
6143 | +++ b/sound/usb/6fire/firmware.c |
6144 | @@ -166,7 +166,7 @@ static int usb6fire_fw_ezusb_write(struct usb_device *device, |
6145 | |
6146 | ret = usb_control_msg(device, usb_sndctrlpipe(device, 0), type, |
6147 | USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE, |
6148 | - value, 0, data, len, HZ); |
6149 | + value, 0, data, len, 1000); |
6150 | if (ret < 0) |
6151 | return ret; |
6152 | else if (ret != len) |
6153 | @@ -179,7 +179,7 @@ static int usb6fire_fw_ezusb_read(struct usb_device *device, |
6154 | { |
6155 | int ret = usb_control_msg(device, usb_rcvctrlpipe(device, 0), type, |
6156 | USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE, value, |
6157 | - 0, data, len, HZ); |
6158 | + 0, data, len, 1000); |
6159 | if (ret < 0) |
6160 | return ret; |
6161 | else if (ret != len) |
6162 | @@ -194,7 +194,7 @@ static int usb6fire_fw_fpga_write(struct usb_device *device, |
6163 | int ret; |
6164 | |
6165 | ret = usb_bulk_msg(device, usb_sndbulkpipe(device, FPGA_EP), data, len, |
6166 | - &actual_len, HZ); |
6167 | + &actual_len, 1000); |
6168 | if (ret < 0) |
6169 | return ret; |
6170 | else if (actual_len != len) |
6171 | diff --git a/sound/usb/line6/driver.c b/sound/usb/line6/driver.c |
6172 | index 0107bbfeb17d1..8cca0befcf013 100644 |
6173 | --- a/sound/usb/line6/driver.c |
6174 | +++ b/sound/usb/line6/driver.c |
6175 | @@ -110,12 +110,12 @@ static int line6_send_raw_message(struct usb_line6 *line6, const char *buffer, |
6176 | retval = usb_interrupt_msg(line6->usbdev, |
6177 | usb_sndintpipe(line6->usbdev, properties->ep_ctrl_w), |
6178 | (char *)frag_buf, frag_size, |
6179 | - &partial, LINE6_TIMEOUT * HZ); |
6180 | + &partial, LINE6_TIMEOUT); |
6181 | } else { |
6182 | retval = usb_bulk_msg(line6->usbdev, |
6183 | usb_sndbulkpipe(line6->usbdev, properties->ep_ctrl_w), |
6184 | (char *)frag_buf, frag_size, |
6185 | - &partial, LINE6_TIMEOUT * HZ); |
6186 | + &partial, LINE6_TIMEOUT); |
6187 | } |
6188 | |
6189 | if (retval) { |
6190 | @@ -351,7 +351,7 @@ int line6_read_data(struct usb_line6 *line6, unsigned address, void *data, |
6191 | ret = usb_control_msg(usbdev, usb_sndctrlpipe(usbdev, 0), 0x67, |
6192 | USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_OUT, |
6193 | (datalen << 8) | 0x21, address, |
6194 | - NULL, 0, LINE6_TIMEOUT * HZ); |
6195 | + NULL, 0, LINE6_TIMEOUT); |
6196 | |
6197 | if (ret < 0) { |
6198 | dev_err(line6->ifcdev, "read request failed (error %d)\n", ret); |
6199 | @@ -366,7 +366,7 @@ int line6_read_data(struct usb_line6 *line6, unsigned address, void *data, |
6200 | USB_TYPE_VENDOR | USB_RECIP_DEVICE | |
6201 | USB_DIR_IN, |
6202 | 0x0012, 0x0000, len, 1, |
6203 | - LINE6_TIMEOUT * HZ); |
6204 | + LINE6_TIMEOUT); |
6205 | if (ret < 0) { |
6206 | dev_err(line6->ifcdev, |
6207 | "receive length failed (error %d)\n", ret); |
6208 | @@ -394,7 +394,7 @@ int line6_read_data(struct usb_line6 *line6, unsigned address, void *data, |
6209 | ret = usb_control_msg(usbdev, usb_rcvctrlpipe(usbdev, 0), 0x67, |
6210 | USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN, |
6211 | 0x0013, 0x0000, data, datalen, |
6212 | - LINE6_TIMEOUT * HZ); |
6213 | + LINE6_TIMEOUT); |
6214 | |
6215 | if (ret < 0) |
6216 | dev_err(line6->ifcdev, "read failed (error %d)\n", ret); |
6217 | @@ -426,7 +426,7 @@ int line6_write_data(struct usb_line6 *line6, unsigned address, void *data, |
6218 | ret = usb_control_msg(usbdev, usb_sndctrlpipe(usbdev, 0), 0x67, |
6219 | USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_OUT, |
6220 | 0x0022, address, data, datalen, |
6221 | - LINE6_TIMEOUT * HZ); |
6222 | + LINE6_TIMEOUT); |
6223 | |
6224 | if (ret < 0) { |
6225 | dev_err(line6->ifcdev, |
6226 | @@ -442,7 +442,7 @@ int line6_write_data(struct usb_line6 *line6, unsigned address, void *data, |
6227 | USB_TYPE_VENDOR | USB_RECIP_DEVICE | |
6228 | USB_DIR_IN, |
6229 | 0x0012, 0x0000, |
6230 | - status, 1, LINE6_TIMEOUT * HZ); |
6231 | + status, 1, LINE6_TIMEOUT); |
6232 | |
6233 | if (ret < 0) { |
6234 | dev_err(line6->ifcdev, |
6235 | diff --git a/sound/usb/line6/driver.h b/sound/usb/line6/driver.h |
6236 | index 7e3a3aada2220..395f4e2c570a3 100644 |
6237 | --- a/sound/usb/line6/driver.h |
6238 | +++ b/sound/usb/line6/driver.h |
6239 | @@ -31,7 +31,7 @@ |
6240 | #define LINE6_FALLBACK_INTERVAL 10 |
6241 | #define LINE6_FALLBACK_MAXPACKETSIZE 16 |
6242 | |
6243 | -#define LINE6_TIMEOUT 1 |
6244 | +#define LINE6_TIMEOUT 1000 |
6245 | #define LINE6_BUFSIZE_LISTEN 64 |
6246 | #define LINE6_MIDI_MESSAGE_MAXLEN 256 |
6247 | |
6248 | diff --git a/sound/usb/line6/podhd.c b/sound/usb/line6/podhd.c |
6249 | index 8c4375bf34ab7..7133c36f99b6c 100644 |
6250 | --- a/sound/usb/line6/podhd.c |
6251 | +++ b/sound/usb/line6/podhd.c |
6252 | @@ -232,7 +232,7 @@ static int podhd_dev_start(struct usb_line6_podhd *pod) |
6253 | ret = usb_control_msg(usbdev, usb_sndctrlpipe(usbdev, 0), |
6254 | 0x67, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_OUT, |
6255 | 0x11, 0, |
6256 | - NULL, 0, LINE6_TIMEOUT * HZ); |
6257 | + NULL, 0, LINE6_TIMEOUT); |
6258 | if (ret < 0) { |
6259 | dev_err(pod->line6.ifcdev, "read request failed (error %d)\n", ret); |
6260 | goto exit; |
6261 | @@ -242,7 +242,7 @@ static int podhd_dev_start(struct usb_line6_podhd *pod) |
6262 | ret = usb_control_msg(usbdev, usb_rcvctrlpipe(usbdev, 0), 0x67, |
6263 | USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN, |
6264 | 0x11, 0x0, |
6265 | - init_bytes, 3, LINE6_TIMEOUT * HZ); |
6266 | + init_bytes, 3, LINE6_TIMEOUT); |
6267 | if (ret < 0) { |
6268 | dev_err(pod->line6.ifcdev, |
6269 | "receive length failed (error %d)\n", ret); |
6270 | @@ -262,7 +262,7 @@ static int podhd_dev_start(struct usb_line6_podhd *pod) |
6271 | USB_REQ_SET_FEATURE, |
6272 | USB_TYPE_STANDARD | USB_RECIP_DEVICE | USB_DIR_OUT, |
6273 | 1, 0, |
6274 | - NULL, 0, LINE6_TIMEOUT * HZ); |
6275 | + NULL, 0, LINE6_TIMEOUT); |
6276 | exit: |
6277 | kfree(init_bytes); |
6278 | return ret; |
6279 | diff --git a/sound/usb/line6/toneport.c b/sound/usb/line6/toneport.c |
6280 | index d3871d99ade4e..d7336333a7fba 100644 |
6281 | --- a/sound/usb/line6/toneport.c |
6282 | +++ b/sound/usb/line6/toneport.c |
6283 | @@ -133,7 +133,7 @@ static int toneport_send_cmd(struct usb_device *usbdev, int cmd1, int cmd2) |
6284 | |
6285 | ret = usb_control_msg(usbdev, usb_sndctrlpipe(usbdev, 0), 0x67, |
6286 | USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_OUT, |
6287 | - cmd1, cmd2, NULL, 0, LINE6_TIMEOUT * HZ); |
6288 | + cmd1, cmd2, NULL, 0, LINE6_TIMEOUT); |
6289 | |
6290 | if (ret < 0) { |
6291 | dev_err(&usbdev->dev, "send failed (error %d)\n", ret); |
6292 | diff --git a/sound/usb/misc/ua101.c b/sound/usb/misc/ua101.c |
6293 | index c19a5dd056317..8c00157c0fcb2 100644 |
6294 | --- a/sound/usb/misc/ua101.c |
6295 | +++ b/sound/usb/misc/ua101.c |
6296 | @@ -1032,7 +1032,7 @@ static int detect_usb_format(struct ua101 *ua) |
6297 | fmt_playback->bSubframeSize * ua->playback.channels; |
6298 | |
6299 | epd = &ua->intf[INTF_CAPTURE]->altsetting[1].endpoint[0].desc; |
6300 | - if (!usb_endpoint_is_isoc_in(epd)) { |
6301 | + if (!usb_endpoint_is_isoc_in(epd) || usb_endpoint_maxp(epd) == 0) { |
6302 | dev_err(&ua->dev->dev, "invalid capture endpoint\n"); |
6303 | return -ENXIO; |
6304 | } |
6305 | @@ -1040,7 +1040,7 @@ static int detect_usb_format(struct ua101 *ua) |
6306 | ua->capture.max_packet_bytes = usb_endpoint_maxp(epd); |
6307 | |
6308 | epd = &ua->intf[INTF_PLAYBACK]->altsetting[1].endpoint[0].desc; |
6309 | - if (!usb_endpoint_is_isoc_out(epd)) { |
6310 | + if (!usb_endpoint_is_isoc_out(epd) || usb_endpoint_maxp(epd) == 0) { |
6311 | dev_err(&ua->dev->dev, "invalid playback endpoint\n"); |
6312 | return -ENXIO; |
6313 | } |