Contents of /trunk/kernel-alx/patches-4.1/0106-4.1.7-all-fixes.patch
Parent Directory | Revision Log
Revision 2748 -
(show annotations)
(download)
Mon Jan 11 12:00:45 2016 UTC (8 years, 8 months ago) by niro
File size: 104870 byte(s)
Mon Jan 11 12:00:45 2016 UTC (8 years, 8 months ago) by niro
File size: 104870 byte(s)
-linux-4.1 patches up to 4.1.15
1 | diff --git a/Makefile b/Makefile |
2 | index 838dabcb7f48..b8591e5f79b8 100644 |
3 | --- a/Makefile |
4 | +++ b/Makefile |
5 | @@ -1,6 +1,6 @@ |
6 | VERSION = 4 |
7 | PATCHLEVEL = 1 |
8 | -SUBLEVEL = 6 |
9 | +SUBLEVEL = 7 |
10 | EXTRAVERSION = |
11 | NAME = Series 4800 |
12 | |
13 | diff --git a/arch/arm/boot/dts/dra7.dtsi b/arch/arm/boot/dts/dra7.dtsi |
14 | index f03a091cd076..dfcc0dd637e5 100644 |
15 | --- a/arch/arm/boot/dts/dra7.dtsi |
16 | +++ b/arch/arm/boot/dts/dra7.dtsi |
17 | @@ -116,7 +116,7 @@ |
18 | ranges = <0 0x2000 0x2000>; |
19 | |
20 | scm_conf: scm_conf@0 { |
21 | - compatible = "syscon"; |
22 | + compatible = "syscon", "simple-bus"; |
23 | reg = <0x0 0x1400>; |
24 | #address-cells = <1>; |
25 | #size-cells = <1>; |
26 | diff --git a/arch/arm/boot/dts/imx6qdl.dtsi b/arch/arm/boot/dts/imx6qdl.dtsi |
27 | index f74a8ded515f..38c786018a09 100644 |
28 | --- a/arch/arm/boot/dts/imx6qdl.dtsi |
29 | +++ b/arch/arm/boot/dts/imx6qdl.dtsi |
30 | @@ -153,10 +153,10 @@ |
31 | interrupt-names = "msi"; |
32 | #interrupt-cells = <1>; |
33 | interrupt-map-mask = <0 0 0 0x7>; |
34 | - interrupt-map = <0 0 0 1 &intc GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>, |
35 | - <0 0 0 2 &intc GIC_SPI 122 IRQ_TYPE_LEVEL_HIGH>, |
36 | - <0 0 0 3 &intc GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>, |
37 | - <0 0 0 4 &intc GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>; |
38 | + interrupt-map = <0 0 0 1 &gpc GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>, |
39 | + <0 0 0 2 &gpc GIC_SPI 122 IRQ_TYPE_LEVEL_HIGH>, |
40 | + <0 0 0 3 &gpc GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>, |
41 | + <0 0 0 4 &gpc GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>; |
42 | clocks = <&clks IMX6QDL_CLK_PCIE_AXI>, |
43 | <&clks IMX6QDL_CLK_LVDS1_GATE>, |
44 | <&clks IMX6QDL_CLK_PCIE_REF_125M>; |
45 | diff --git a/arch/arm/boot/dts/omap2430.dtsi b/arch/arm/boot/dts/omap2430.dtsi |
46 | index 11a7963be003..2390f387c271 100644 |
47 | --- a/arch/arm/boot/dts/omap2430.dtsi |
48 | +++ b/arch/arm/boot/dts/omap2430.dtsi |
49 | @@ -51,7 +51,8 @@ |
50 | }; |
51 | |
52 | scm_conf: scm_conf@270 { |
53 | - compatible = "syscon"; |
54 | + compatible = "syscon", |
55 | + "simple-bus"; |
56 | reg = <0x270 0x240>; |
57 | #address-cells = <1>; |
58 | #size-cells = <1>; |
59 | diff --git a/arch/arm/boot/dts/omap4.dtsi b/arch/arm/boot/dts/omap4.dtsi |
60 | index f884d6adb71e..84be9da74c7e 100644 |
61 | --- a/arch/arm/boot/dts/omap4.dtsi |
62 | +++ b/arch/arm/boot/dts/omap4.dtsi |
63 | @@ -191,7 +191,8 @@ |
64 | }; |
65 | |
66 | omap4_padconf_global: omap4_padconf_global@5a0 { |
67 | - compatible = "syscon"; |
68 | + compatible = "syscon", |
69 | + "simple-bus"; |
70 | reg = <0x5a0 0x170>; |
71 | #address-cells = <1>; |
72 | #size-cells = <1>; |
73 | diff --git a/arch/arm/boot/dts/omap5.dtsi b/arch/arm/boot/dts/omap5.dtsi |
74 | index 7d24ae0306b5..874a26f9dc0f 100644 |
75 | --- a/arch/arm/boot/dts/omap5.dtsi |
76 | +++ b/arch/arm/boot/dts/omap5.dtsi |
77 | @@ -180,7 +180,8 @@ |
78 | }; |
79 | |
80 | omap5_padconf_global: omap5_padconf_global@5a0 { |
81 | - compatible = "syscon"; |
82 | + compatible = "syscon", |
83 | + "simple-bus"; |
84 | reg = <0x5a0 0xec>; |
85 | #address-cells = <1>; |
86 | #size-cells = <1>; |
87 | diff --git a/arch/arm/mach-bcm/Makefile b/arch/arm/mach-bcm/Makefile |
88 | index 4c38674c73ec..54d274da7ccb 100644 |
89 | --- a/arch/arm/mach-bcm/Makefile |
90 | +++ b/arch/arm/mach-bcm/Makefile |
91 | @@ -43,5 +43,5 @@ obj-$(CONFIG_ARCH_BCM_63XX) := bcm63xx.o |
92 | ifeq ($(CONFIG_ARCH_BRCMSTB),y) |
93 | CFLAGS_platsmp-brcmstb.o += -march=armv7-a |
94 | obj-y += brcmstb.o |
95 | -obj-$(CONFIG_SMP) += headsmp-brcmstb.o platsmp-brcmstb.o |
96 | +obj-$(CONFIG_SMP) += platsmp-brcmstb.o |
97 | endif |
98 | diff --git a/arch/arm/mach-bcm/brcmstb.h b/arch/arm/mach-bcm/brcmstb.h |
99 | deleted file mode 100644 |
100 | index ec0c3d112b36..000000000000 |
101 | --- a/arch/arm/mach-bcm/brcmstb.h |
102 | +++ /dev/null |
103 | @@ -1,19 +0,0 @@ |
104 | -/* |
105 | - * Copyright (C) 2013-2014 Broadcom Corporation |
106 | - * |
107 | - * This program is free software; you can redistribute it and/or |
108 | - * modify it under the terms of the GNU General Public License as |
109 | - * published by the Free Software Foundation version 2. |
110 | - * |
111 | - * This program is distributed "as is" WITHOUT ANY WARRANTY of any |
112 | - * kind, whether express or implied; without even the implied warranty |
113 | - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
114 | - * GNU General Public License for more details. |
115 | - */ |
116 | - |
117 | -#ifndef __BRCMSTB_H__ |
118 | -#define __BRCMSTB_H__ |
119 | - |
120 | -void brcmstb_secondary_startup(void); |
121 | - |
122 | -#endif /* __BRCMSTB_H__ */ |
123 | diff --git a/arch/arm/mach-bcm/headsmp-brcmstb.S b/arch/arm/mach-bcm/headsmp-brcmstb.S |
124 | deleted file mode 100644 |
125 | index 199c1ea58248..000000000000 |
126 | --- a/arch/arm/mach-bcm/headsmp-brcmstb.S |
127 | +++ /dev/null |
128 | @@ -1,33 +0,0 @@ |
129 | -/* |
130 | - * SMP boot code for secondary CPUs |
131 | - * Based on arch/arm/mach-tegra/headsmp.S |
132 | - * |
133 | - * Copyright (C) 2010 NVIDIA, Inc. |
134 | - * Copyright (C) 2013-2014 Broadcom Corporation |
135 | - * |
136 | - * This program is free software; you can redistribute it and/or |
137 | - * modify it under the terms of the GNU General Public License as |
138 | - * published by the Free Software Foundation version 2. |
139 | - * |
140 | - * This program is distributed "as is" WITHOUT ANY WARRANTY of any |
141 | - * kind, whether express or implied; without even the implied warranty |
142 | - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
143 | - * GNU General Public License for more details. |
144 | - */ |
145 | - |
146 | -#include <asm/assembler.h> |
147 | -#include <linux/linkage.h> |
148 | -#include <linux/init.h> |
149 | - |
150 | - .section ".text.head", "ax" |
151 | - |
152 | -ENTRY(brcmstb_secondary_startup) |
153 | - /* |
154 | - * Ensure CPU is in a sane state by disabling all IRQs and switching |
155 | - * into SVC mode. |
156 | - */ |
157 | - setmode PSR_I_BIT | PSR_F_BIT | SVC_MODE, r0 |
158 | - |
159 | - bl v7_invalidate_l1 |
160 | - b secondary_startup |
161 | -ENDPROC(brcmstb_secondary_startup) |
162 | diff --git a/arch/arm/mach-bcm/platsmp-brcmstb.c b/arch/arm/mach-bcm/platsmp-brcmstb.c |
163 | index e209e6fc7caf..44d6bddf7a4e 100644 |
164 | --- a/arch/arm/mach-bcm/platsmp-brcmstb.c |
165 | +++ b/arch/arm/mach-bcm/platsmp-brcmstb.c |
166 | @@ -30,8 +30,6 @@ |
167 | #include <asm/mach-types.h> |
168 | #include <asm/smp_plat.h> |
169 | |
170 | -#include "brcmstb.h" |
171 | - |
172 | enum { |
173 | ZONE_MAN_CLKEN_MASK = BIT(0), |
174 | ZONE_MAN_RESET_CNTL_MASK = BIT(1), |
175 | @@ -153,7 +151,7 @@ static void brcmstb_cpu_boot(u32 cpu) |
176 | * Set the reset vector to point to the secondary_startup |
177 | * routine |
178 | */ |
179 | - cpu_set_boot_addr(cpu, virt_to_phys(brcmstb_secondary_startup)); |
180 | + cpu_set_boot_addr(cpu, virt_to_phys(secondary_startup)); |
181 | |
182 | /* Unhalt the cpu */ |
183 | cpu_rst_cfg_set(cpu, 0); |
184 | diff --git a/arch/arm/mach-berlin/headsmp.S b/arch/arm/mach-berlin/headsmp.S |
185 | index 4a4c56a58ad3..dc82a3486b05 100644 |
186 | --- a/arch/arm/mach-berlin/headsmp.S |
187 | +++ b/arch/arm/mach-berlin/headsmp.S |
188 | @@ -12,12 +12,6 @@ |
189 | #include <linux/init.h> |
190 | #include <asm/assembler.h> |
191 | |
192 | -ENTRY(berlin_secondary_startup) |
193 | - ARM_BE8(setend be) |
194 | - bl v7_invalidate_l1 |
195 | - b secondary_startup |
196 | -ENDPROC(berlin_secondary_startup) |
197 | - |
198 | /* |
199 | * If the following instruction is set in the reset exception vector, CPUs |
200 | * will fetch the value of the software reset address vector when being |
201 | diff --git a/arch/arm/mach-berlin/platsmp.c b/arch/arm/mach-berlin/platsmp.c |
202 | index 702e7982015a..34a3753e7356 100644 |
203 | --- a/arch/arm/mach-berlin/platsmp.c |
204 | +++ b/arch/arm/mach-berlin/platsmp.c |
205 | @@ -22,7 +22,6 @@ |
206 | #define RESET_VECT 0x00 |
207 | #define SW_RESET_ADDR 0x94 |
208 | |
209 | -extern void berlin_secondary_startup(void); |
210 | extern u32 boot_inst; |
211 | |
212 | static void __iomem *cpu_ctrl; |
213 | @@ -85,7 +84,7 @@ static void __init berlin_smp_prepare_cpus(unsigned int max_cpus) |
214 | * Write the secondary startup address into the SW reset address |
215 | * vector. This is used by boot_inst. |
216 | */ |
217 | - writel(virt_to_phys(berlin_secondary_startup), vectors_base + SW_RESET_ADDR); |
218 | + writel(virt_to_phys(secondary_startup), vectors_base + SW_RESET_ADDR); |
219 | |
220 | iounmap(vectors_base); |
221 | unmap_scu: |
222 | diff --git a/arch/arm/mach-hisi/Makefile b/arch/arm/mach-hisi/Makefile |
223 | index 6b7b3033de0b..659db1933ed3 100644 |
224 | --- a/arch/arm/mach-hisi/Makefile |
225 | +++ b/arch/arm/mach-hisi/Makefile |
226 | @@ -6,4 +6,4 @@ CFLAGS_platmcpm.o := -march=armv7-a |
227 | |
228 | obj-y += hisilicon.o |
229 | obj-$(CONFIG_MCPM) += platmcpm.o |
230 | -obj-$(CONFIG_SMP) += platsmp.o hotplug.o headsmp.o |
231 | +obj-$(CONFIG_SMP) += platsmp.o hotplug.o |
232 | diff --git a/arch/arm/mach-hisi/core.h b/arch/arm/mach-hisi/core.h |
233 | index 92a682d8e939..c7648ef1825c 100644 |
234 | --- a/arch/arm/mach-hisi/core.h |
235 | +++ b/arch/arm/mach-hisi/core.h |
236 | @@ -12,7 +12,6 @@ extern void hi3xxx_cpu_die(unsigned int cpu); |
237 | extern int hi3xxx_cpu_kill(unsigned int cpu); |
238 | extern void hi3xxx_set_cpu(int cpu, bool enable); |
239 | |
240 | -extern void hisi_secondary_startup(void); |
241 | extern struct smp_operations hix5hd2_smp_ops; |
242 | extern void hix5hd2_set_cpu(int cpu, bool enable); |
243 | extern void hix5hd2_cpu_die(unsigned int cpu); |
244 | diff --git a/arch/arm/mach-hisi/headsmp.S b/arch/arm/mach-hisi/headsmp.S |
245 | deleted file mode 100644 |
246 | index 81e35b159e75..000000000000 |
247 | --- a/arch/arm/mach-hisi/headsmp.S |
248 | +++ /dev/null |
249 | @@ -1,16 +0,0 @@ |
250 | -/* |
251 | - * Copyright (c) 2014 Hisilicon Limited. |
252 | - * Copyright (c) 2014 Linaro Ltd. |
253 | - * |
254 | - * This program is free software; you can redistribute it and/or modify |
255 | - * it under the terms of the GNU General Public License version 2 as |
256 | - * published by the Free Software Foundation. |
257 | - */ |
258 | -#include <linux/linkage.h> |
259 | -#include <linux/init.h> |
260 | - |
261 | - __CPUINIT |
262 | - |
263 | -ENTRY(hisi_secondary_startup) |
264 | - bl v7_invalidate_l1 |
265 | - b secondary_startup |
266 | diff --git a/arch/arm/mach-hisi/platsmp.c b/arch/arm/mach-hisi/platsmp.c |
267 | index 8880c8e8b296..51744127db66 100644 |
268 | --- a/arch/arm/mach-hisi/platsmp.c |
269 | +++ b/arch/arm/mach-hisi/platsmp.c |
270 | @@ -118,7 +118,7 @@ static int hix5hd2_boot_secondary(unsigned int cpu, struct task_struct *idle) |
271 | { |
272 | phys_addr_t jumpaddr; |
273 | |
274 | - jumpaddr = virt_to_phys(hisi_secondary_startup); |
275 | + jumpaddr = virt_to_phys(secondary_startup); |
276 | hix5hd2_set_scu_boot_addr(HIX5HD2_BOOT_ADDRESS, jumpaddr); |
277 | hix5hd2_set_cpu(cpu, true); |
278 | arch_send_wakeup_ipi_mask(cpumask_of(cpu)); |
279 | @@ -156,7 +156,7 @@ static int hip01_boot_secondary(unsigned int cpu, struct task_struct *idle) |
280 | struct device_node *node; |
281 | |
282 | |
283 | - jumpaddr = virt_to_phys(hisi_secondary_startup); |
284 | + jumpaddr = virt_to_phys(secondary_startup); |
285 | hip01_set_boot_addr(HIP01_BOOT_ADDRESS, jumpaddr); |
286 | |
287 | node = of_find_compatible_node(NULL, NULL, "hisilicon,hip01-sysctrl"); |
288 | diff --git a/arch/arm/mach-imx/headsmp.S b/arch/arm/mach-imx/headsmp.S |
289 | index de5047c8a6c8..b5e976816b63 100644 |
290 | --- a/arch/arm/mach-imx/headsmp.S |
291 | +++ b/arch/arm/mach-imx/headsmp.S |
292 | @@ -25,7 +25,6 @@ diag_reg_offset: |
293 | .endm |
294 | |
295 | ENTRY(v7_secondary_startup) |
296 | - bl v7_invalidate_l1 |
297 | set_diag_reg |
298 | b secondary_startup |
299 | ENDPROC(v7_secondary_startup) |
300 | diff --git a/arch/arm/mach-mvebu/headsmp-a9.S b/arch/arm/mach-mvebu/headsmp-a9.S |
301 | index 08d5ed46b996..48e4c4b3cd1c 100644 |
302 | --- a/arch/arm/mach-mvebu/headsmp-a9.S |
303 | +++ b/arch/arm/mach-mvebu/headsmp-a9.S |
304 | @@ -21,7 +21,6 @@ |
305 | |
306 | ENTRY(mvebu_cortex_a9_secondary_startup) |
307 | ARM_BE8(setend be) |
308 | - bl v7_invalidate_l1 |
309 | bl armada_38x_scu_power_up |
310 | b secondary_startup |
311 | ENDPROC(mvebu_cortex_a9_secondary_startup) |
312 | diff --git a/arch/arm/mach-omap2/omap-wakeupgen.c b/arch/arm/mach-omap2/omap-wakeupgen.c |
313 | index 3b56722dfd8a..6833df45d7b1 100644 |
314 | --- a/arch/arm/mach-omap2/omap-wakeupgen.c |
315 | +++ b/arch/arm/mach-omap2/omap-wakeupgen.c |
316 | @@ -392,6 +392,7 @@ static struct irq_chip wakeupgen_chip = { |
317 | .irq_mask = wakeupgen_mask, |
318 | .irq_unmask = wakeupgen_unmask, |
319 | .irq_retrigger = irq_chip_retrigger_hierarchy, |
320 | + .irq_set_type = irq_chip_set_type_parent, |
321 | .flags = IRQCHIP_SKIP_SET_WAKE | IRQCHIP_MASK_ON_SUSPEND, |
322 | #ifdef CONFIG_SMP |
323 | .irq_set_affinity = irq_chip_set_affinity_parent, |
324 | diff --git a/arch/arm/mach-prima2/headsmp.S b/arch/arm/mach-prima2/headsmp.S |
325 | index d86fe33c5f53..209d9fc5c16c 100644 |
326 | --- a/arch/arm/mach-prima2/headsmp.S |
327 | +++ b/arch/arm/mach-prima2/headsmp.S |
328 | @@ -15,7 +15,6 @@ |
329 | * ready for them to initialise. |
330 | */ |
331 | ENTRY(sirfsoc_secondary_startup) |
332 | - bl v7_invalidate_l1 |
333 | mrc p15, 0, r0, c0, c0, 5 |
334 | and r0, r0, #15 |
335 | adr r4, 1f |
336 | diff --git a/arch/arm/mach-rockchip/core.h b/arch/arm/mach-rockchip/core.h |
337 | index 39bca96b555a..492c048813da 100644 |
338 | --- a/arch/arm/mach-rockchip/core.h |
339 | +++ b/arch/arm/mach-rockchip/core.h |
340 | @@ -17,4 +17,3 @@ extern char rockchip_secondary_trampoline; |
341 | extern char rockchip_secondary_trampoline_end; |
342 | |
343 | extern unsigned long rockchip_boot_fn; |
344 | -extern void rockchip_secondary_startup(void); |
345 | diff --git a/arch/arm/mach-rockchip/headsmp.S b/arch/arm/mach-rockchip/headsmp.S |
346 | index 46c22dedf632..d69708b07282 100644 |
347 | --- a/arch/arm/mach-rockchip/headsmp.S |
348 | +++ b/arch/arm/mach-rockchip/headsmp.S |
349 | @@ -15,14 +15,6 @@ |
350 | #include <linux/linkage.h> |
351 | #include <linux/init.h> |
352 | |
353 | -ENTRY(rockchip_secondary_startup) |
354 | - mrc p15, 0, r0, c0, c0, 0 @ read main ID register |
355 | - ldr r1, =0x00000c09 @ Cortex-A9 primary part number |
356 | - teq r0, r1 |
357 | - beq v7_invalidate_l1 |
358 | - b secondary_startup |
359 | -ENDPROC(rockchip_secondary_startup) |
360 | - |
361 | ENTRY(rockchip_secondary_trampoline) |
362 | ldr pc, 1f |
363 | ENDPROC(rockchip_secondary_trampoline) |
364 | diff --git a/arch/arm/mach-rockchip/platsmp.c b/arch/arm/mach-rockchip/platsmp.c |
365 | index 5b4ca3c3c879..2e6ab67e2284 100644 |
366 | --- a/arch/arm/mach-rockchip/platsmp.c |
367 | +++ b/arch/arm/mach-rockchip/platsmp.c |
368 | @@ -149,8 +149,7 @@ static int __cpuinit rockchip_boot_secondary(unsigned int cpu, |
369 | * sram_base_addr + 8: start address for pc |
370 | * */ |
371 | udelay(10); |
372 | - writel(virt_to_phys(rockchip_secondary_startup), |
373 | - sram_base_addr + 8); |
374 | + writel(virt_to_phys(secondary_startup), sram_base_addr + 8); |
375 | writel(0xDEADBEAF, sram_base_addr + 4); |
376 | dsb_sev(); |
377 | } |
378 | @@ -189,7 +188,7 @@ static int __init rockchip_smp_prepare_sram(struct device_node *node) |
379 | } |
380 | |
381 | /* set the boot function for the sram code */ |
382 | - rockchip_boot_fn = virt_to_phys(rockchip_secondary_startup); |
383 | + rockchip_boot_fn = virt_to_phys(secondary_startup); |
384 | |
385 | /* copy the trampoline to sram, that runs during startup of the core */ |
386 | memcpy(sram_base_addr, &rockchip_secondary_trampoline, trampoline_sz); |
387 | diff --git a/arch/arm/mach-shmobile/common.h b/arch/arm/mach-shmobile/common.h |
388 | index afc60bad6fd6..476092b86c6e 100644 |
389 | --- a/arch/arm/mach-shmobile/common.h |
390 | +++ b/arch/arm/mach-shmobile/common.h |
391 | @@ -14,7 +14,6 @@ extern void shmobile_smp_sleep(void); |
392 | extern void shmobile_smp_hook(unsigned int cpu, unsigned long fn, |
393 | unsigned long arg); |
394 | extern int shmobile_smp_cpu_disable(unsigned int cpu); |
395 | -extern void shmobile_invalidate_start(void); |
396 | extern void shmobile_boot_scu(void); |
397 | extern void shmobile_smp_scu_prepare_cpus(unsigned int max_cpus); |
398 | extern void shmobile_smp_scu_cpu_die(unsigned int cpu); |
399 | diff --git a/arch/arm/mach-shmobile/headsmp-scu.S b/arch/arm/mach-shmobile/headsmp-scu.S |
400 | index 69df8bfac167..fa5248c52399 100644 |
401 | --- a/arch/arm/mach-shmobile/headsmp-scu.S |
402 | +++ b/arch/arm/mach-shmobile/headsmp-scu.S |
403 | @@ -22,7 +22,7 @@ |
404 | * Boot code for secondary CPUs. |
405 | * |
406 | * First we turn on L1 cache coherency for our CPU. Then we jump to |
407 | - * shmobile_invalidate_start that invalidates the cache and hands over control |
408 | + * secondary_startup that invalidates the cache and hands over control |
409 | * to the common ARM startup code. |
410 | */ |
411 | ENTRY(shmobile_boot_scu) |
412 | @@ -36,7 +36,7 @@ ENTRY(shmobile_boot_scu) |
413 | bic r2, r2, r3 @ Clear bits of our CPU (Run Mode) |
414 | str r2, [r0, #8] @ write back |
415 | |
416 | - b shmobile_invalidate_start |
417 | + b secondary_startup |
418 | ENDPROC(shmobile_boot_scu) |
419 | |
420 | .text |
421 | diff --git a/arch/arm/mach-shmobile/headsmp.S b/arch/arm/mach-shmobile/headsmp.S |
422 | index 50c491567e11..330c1fc63197 100644 |
423 | --- a/arch/arm/mach-shmobile/headsmp.S |
424 | +++ b/arch/arm/mach-shmobile/headsmp.S |
425 | @@ -16,13 +16,6 @@ |
426 | #include <asm/assembler.h> |
427 | #include <asm/memory.h> |
428 | |
429 | -#ifdef CONFIG_SMP |
430 | -ENTRY(shmobile_invalidate_start) |
431 | - bl v7_invalidate_l1 |
432 | - b secondary_startup |
433 | -ENDPROC(shmobile_invalidate_start) |
434 | -#endif |
435 | - |
436 | /* |
437 | * Reset vector for secondary CPUs. |
438 | * This will be mapped at address 0 by SBAR register. |
439 | diff --git a/arch/arm/mach-shmobile/platsmp-apmu.c b/arch/arm/mach-shmobile/platsmp-apmu.c |
440 | index f483b560b066..b0790fc32282 100644 |
441 | --- a/arch/arm/mach-shmobile/platsmp-apmu.c |
442 | +++ b/arch/arm/mach-shmobile/platsmp-apmu.c |
443 | @@ -133,7 +133,7 @@ void __init shmobile_smp_apmu_prepare_cpus(unsigned int max_cpus, |
444 | int shmobile_smp_apmu_boot_secondary(unsigned int cpu, struct task_struct *idle) |
445 | { |
446 | /* For this particular CPU register boot vector */ |
447 | - shmobile_smp_hook(cpu, virt_to_phys(shmobile_invalidate_start), 0); |
448 | + shmobile_smp_hook(cpu, virt_to_phys(secondary_startup), 0); |
449 | |
450 | return apmu_wrap(cpu, apmu_power_on); |
451 | } |
452 | diff --git a/arch/arm/mach-socfpga/core.h b/arch/arm/mach-socfpga/core.h |
453 | index a0f3b1cd497c..767c09e954a0 100644 |
454 | --- a/arch/arm/mach-socfpga/core.h |
455 | +++ b/arch/arm/mach-socfpga/core.h |
456 | @@ -31,7 +31,6 @@ |
457 | |
458 | #define RSTMGR_MPUMODRST_CPU1 0x2 /* CPU1 Reset */ |
459 | |
460 | -extern void socfpga_secondary_startup(void); |
461 | extern void __iomem *socfpga_scu_base_addr; |
462 | |
463 | extern void socfpga_init_clocks(void); |
464 | diff --git a/arch/arm/mach-socfpga/headsmp.S b/arch/arm/mach-socfpga/headsmp.S |
465 | index f65ea0af4af3..5bb016427107 100644 |
466 | --- a/arch/arm/mach-socfpga/headsmp.S |
467 | +++ b/arch/arm/mach-socfpga/headsmp.S |
468 | @@ -30,8 +30,3 @@ ENTRY(secondary_trampoline) |
469 | 1: .long . |
470 | .long socfpga_cpu1start_addr |
471 | ENTRY(secondary_trampoline_end) |
472 | - |
473 | -ENTRY(socfpga_secondary_startup) |
474 | - bl v7_invalidate_l1 |
475 | - b secondary_startup |
476 | -ENDPROC(socfpga_secondary_startup) |
477 | diff --git a/arch/arm/mach-socfpga/platsmp.c b/arch/arm/mach-socfpga/platsmp.c |
478 | index c64d89b7c0ca..79c5336c569f 100644 |
479 | --- a/arch/arm/mach-socfpga/platsmp.c |
480 | +++ b/arch/arm/mach-socfpga/platsmp.c |
481 | @@ -40,7 +40,7 @@ static int socfpga_boot_secondary(unsigned int cpu, struct task_struct *idle) |
482 | |
483 | memcpy(phys_to_virt(0), &secondary_trampoline, trampoline_size); |
484 | |
485 | - writel(virt_to_phys(socfpga_secondary_startup), |
486 | + writel(virt_to_phys(secondary_startup), |
487 | sys_manager_base_addr + (socfpga_cpu1start_addr & 0x000000ff)); |
488 | |
489 | flush_cache_all(); |
490 | diff --git a/arch/arm/mach-tegra/Makefile b/arch/arm/mach-tegra/Makefile |
491 | index e48a74458c25..fffad2426ee4 100644 |
492 | --- a/arch/arm/mach-tegra/Makefile |
493 | +++ b/arch/arm/mach-tegra/Makefile |
494 | @@ -19,7 +19,7 @@ obj-$(CONFIG_ARCH_TEGRA_3x_SOC) += pm-tegra30.o |
495 | ifeq ($(CONFIG_CPU_IDLE),y) |
496 | obj-$(CONFIG_ARCH_TEGRA_3x_SOC) += cpuidle-tegra30.o |
497 | endif |
498 | -obj-$(CONFIG_SMP) += platsmp.o headsmp.o |
499 | +obj-$(CONFIG_SMP) += platsmp.o |
500 | obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o |
501 | |
502 | obj-$(CONFIG_ARCH_TEGRA_114_SOC) += sleep-tegra30.o |
503 | diff --git a/arch/arm/mach-tegra/headsmp.S b/arch/arm/mach-tegra/headsmp.S |
504 | deleted file mode 100644 |
505 | index 2072e7322c39..000000000000 |
506 | --- a/arch/arm/mach-tegra/headsmp.S |
507 | +++ /dev/null |
508 | @@ -1,12 +0,0 @@ |
509 | -#include <linux/linkage.h> |
510 | -#include <linux/init.h> |
511 | - |
512 | -#include "sleep.h" |
513 | - |
514 | - .section ".text.head", "ax" |
515 | - |
516 | -ENTRY(tegra_secondary_startup) |
517 | - check_cpu_part_num 0xc09, r8, r9 |
518 | - bleq v7_invalidate_l1 |
519 | - b secondary_startup |
520 | -ENDPROC(tegra_secondary_startup) |
521 | diff --git a/arch/arm/mach-tegra/reset.c b/arch/arm/mach-tegra/reset.c |
522 | index 894c5c472184..6fd9db54887e 100644 |
523 | --- a/arch/arm/mach-tegra/reset.c |
524 | +++ b/arch/arm/mach-tegra/reset.c |
525 | @@ -94,7 +94,7 @@ void __init tegra_cpu_reset_handler_init(void) |
526 | __tegra_cpu_reset_handler_data[TEGRA_RESET_MASK_PRESENT] = |
527 | *((u32 *)cpu_possible_mask); |
528 | __tegra_cpu_reset_handler_data[TEGRA_RESET_STARTUP_SECONDARY] = |
529 | - virt_to_phys((void *)tegra_secondary_startup); |
530 | + virt_to_phys((void *)secondary_startup); |
531 | #endif |
532 | |
533 | #ifdef CONFIG_PM_SLEEP |
534 | diff --git a/arch/arm/mach-tegra/reset.h b/arch/arm/mach-tegra/reset.h |
535 | index 29c3dec0126a..9c479c7925b8 100644 |
536 | --- a/arch/arm/mach-tegra/reset.h |
537 | +++ b/arch/arm/mach-tegra/reset.h |
538 | @@ -37,7 +37,6 @@ void __tegra_cpu_reset_handler_start(void); |
539 | void __tegra_cpu_reset_handler(void); |
540 | void __tegra20_cpu1_resettable_status_offset(void); |
541 | void __tegra_cpu_reset_handler_end(void); |
542 | -void tegra_secondary_startup(void); |
543 | |
544 | #ifdef CONFIG_PM_SLEEP |
545 | #define tegra_cpu_lp1_mask \ |
546 | diff --git a/arch/arm/mach-zynq/common.h b/arch/arm/mach-zynq/common.h |
547 | index 382c60e9aa16..7038cae95ddc 100644 |
548 | --- a/arch/arm/mach-zynq/common.h |
549 | +++ b/arch/arm/mach-zynq/common.h |
550 | @@ -17,8 +17,6 @@ |
551 | #ifndef __MACH_ZYNQ_COMMON_H__ |
552 | #define __MACH_ZYNQ_COMMON_H__ |
553 | |
554 | -void zynq_secondary_startup(void); |
555 | - |
556 | extern int zynq_slcr_init(void); |
557 | extern int zynq_early_slcr_init(void); |
558 | extern void zynq_slcr_system_reset(void); |
559 | diff --git a/arch/arm/mach-zynq/headsmp.S b/arch/arm/mach-zynq/headsmp.S |
560 | index dd8c071941e7..045c72720a4d 100644 |
561 | --- a/arch/arm/mach-zynq/headsmp.S |
562 | +++ b/arch/arm/mach-zynq/headsmp.S |
563 | @@ -22,8 +22,3 @@ zynq_secondary_trampoline_jump: |
564 | .globl zynq_secondary_trampoline_end |
565 | zynq_secondary_trampoline_end: |
566 | ENDPROC(zynq_secondary_trampoline) |
567 | - |
568 | -ENTRY(zynq_secondary_startup) |
569 | - bl v7_invalidate_l1 |
570 | - b secondary_startup |
571 | -ENDPROC(zynq_secondary_startup) |
572 | diff --git a/arch/arm/mach-zynq/platsmp.c b/arch/arm/mach-zynq/platsmp.c |
573 | index 52d768ff7857..f66816c49186 100644 |
574 | --- a/arch/arm/mach-zynq/platsmp.c |
575 | +++ b/arch/arm/mach-zynq/platsmp.c |
576 | @@ -87,10 +87,9 @@ int zynq_cpun_start(u32 address, int cpu) |
577 | } |
578 | EXPORT_SYMBOL(zynq_cpun_start); |
579 | |
580 | -static int zynq_boot_secondary(unsigned int cpu, |
581 | - struct task_struct *idle) |
582 | +static int zynq_boot_secondary(unsigned int cpu, struct task_struct *idle) |
583 | { |
584 | - return zynq_cpun_start(virt_to_phys(zynq_secondary_startup), cpu); |
585 | + return zynq_cpun_start(virt_to_phys(secondary_startup), cpu); |
586 | } |
587 | |
588 | /* |
589 | diff --git a/arch/arm/mm/proc-v7.S b/arch/arm/mm/proc-v7.S |
590 | index 3d1054f11a8a..7911f14c2157 100644 |
591 | --- a/arch/arm/mm/proc-v7.S |
592 | +++ b/arch/arm/mm/proc-v7.S |
593 | @@ -268,7 +268,10 @@ __v7_ca15mp_setup: |
594 | __v7_b15mp_setup: |
595 | __v7_ca17mp_setup: |
596 | mov r10, #0 |
597 | -1: |
598 | +1: adr r12, __v7_setup_stack @ the local stack |
599 | + stmia r12, {r0-r5, lr} @ v7_invalidate_l1 touches r0-r6 |
600 | + bl v7_invalidate_l1 |
601 | + ldmia r12, {r0-r5, lr} |
602 | #ifdef CONFIG_SMP |
603 | ALT_SMP(mrc p15, 0, r0, c1, c0, 1) |
604 | ALT_UP(mov r0, #(1 << 6)) @ fake it for UP |
605 | @@ -277,7 +280,7 @@ __v7_ca17mp_setup: |
606 | orreq r0, r0, r10 @ Enable CPU-specific SMP bits |
607 | mcreq p15, 0, r0, c1, c0, 1 |
608 | #endif |
609 | - b __v7_setup |
610 | + b __v7_setup_cont |
611 | |
612 | __v7_pj4b_setup: |
613 | #ifdef CONFIG_CPU_PJ4B |
614 | @@ -335,10 +338,11 @@ __v7_pj4b_setup: |
615 | |
616 | __v7_setup: |
617 | adr r12, __v7_setup_stack @ the local stack |
618 | - stmia r12, {r0-r5, r7, r9, r11, lr} |
619 | - bl v7_flush_dcache_louis |
620 | - ldmia r12, {r0-r5, r7, r9, r11, lr} |
621 | + stmia r12, {r0-r5, lr} @ v7_invalidate_l1 touches r0-r6 |
622 | + bl v7_invalidate_l1 |
623 | + ldmia r12, {r0-r5, lr} |
624 | |
625 | +__v7_setup_cont: |
626 | mrc p15, 0, r0, c0, c0, 0 @ read main ID register |
627 | and r10, r0, #0xff000000 @ ARM? |
628 | teq r10, #0x41000000 |
629 | @@ -460,7 +464,7 @@ ENDPROC(__v7_setup) |
630 | |
631 | .align 2 |
632 | __v7_setup_stack: |
633 | - .space 4 * 11 @ 11 registers |
634 | + .space 4 * 7 @ 12 registers |
635 | |
636 | __INITDATA |
637 | |
638 | diff --git a/arch/arm/vdso/Makefile b/arch/arm/vdso/Makefile |
639 | index 8aa791051029..1160434eece0 100644 |
640 | --- a/arch/arm/vdso/Makefile |
641 | +++ b/arch/arm/vdso/Makefile |
642 | @@ -6,9 +6,15 @@ obj-vdso := vgettimeofday.o datapage.o |
643 | targets := $(obj-vdso) vdso.so vdso.so.dbg vdso.so.raw vdso.lds |
644 | obj-vdso := $(addprefix $(obj)/, $(obj-vdso)) |
645 | |
646 | -ccflags-y := -shared -fPIC -fno-common -fno-builtin -fno-stack-protector |
647 | -ccflags-y += -nostdlib -Wl,-soname=linux-vdso.so.1 -DDISABLE_BRANCH_PROFILING |
648 | -ccflags-y += -Wl,--no-undefined $(call cc-ldoption, -Wl$(comma)--hash-style=sysv) |
649 | +ccflags-y := -fPIC -fno-common -fno-builtin -fno-stack-protector |
650 | +ccflags-y += -DDISABLE_BRANCH_PROFILING |
651 | + |
652 | +VDSO_LDFLAGS := -Wl,-Bsymbolic -Wl,--no-undefined -Wl,-soname=linux-vdso.so.1 |
653 | +VDSO_LDFLAGS += -Wl,-z,max-page-size=4096 -Wl,-z,common-page-size=4096 |
654 | +VDSO_LDFLAGS += -nostdlib -shared |
655 | +VDSO_LDFLAGS += $(call cc-ldoption, -Wl$(comma)--hash-style=sysv) |
656 | +VDSO_LDFLAGS += $(call cc-ldoption, -Wl$(comma)--build-id) |
657 | +VDSO_LDFLAGS += $(call cc-ldoption, -fuse-ld=bfd) |
658 | |
659 | obj-$(CONFIG_VDSO) += vdso.o |
660 | extra-$(CONFIG_VDSO) += vdso.lds |
661 | @@ -40,10 +46,8 @@ $(obj)/%.so: $(obj)/%.so.dbg FORCE |
662 | |
663 | # Actual build commands |
664 | quiet_cmd_vdsold = VDSO $@ |
665 | - cmd_vdsold = $(CC) $(c_flags) -Wl,-T $(filter %.lds,$^) $(filter %.o,$^) \ |
666 | - $(call cc-ldoption, -Wl$(comma)--build-id) \ |
667 | - -Wl,-Bsymbolic -Wl,-z,max-page-size=4096 \ |
668 | - -Wl,-z,common-page-size=4096 -o $@ |
669 | + cmd_vdsold = $(CC) $(c_flags) $(VDSO_LDFLAGS) \ |
670 | + -Wl,-T $(filter %.lds,$^) $(filter %.o,$^) -o $@ |
671 | |
672 | quiet_cmd_vdsomunge = MUNGE $@ |
673 | cmd_vdsomunge = $(objtree)/$(obj)/vdsomunge $< $@ |
674 | diff --git a/arch/arm64/kernel/perf_event.c b/arch/arm64/kernel/perf_event.c |
675 | index cce18c85d2e8..7778453762d8 100644 |
676 | --- a/arch/arm64/kernel/perf_event.c |
677 | +++ b/arch/arm64/kernel/perf_event.c |
678 | @@ -1318,7 +1318,7 @@ static int armpmu_device_probe(struct platform_device *pdev) |
679 | /* Don't bother with PPIs; they're already affine */ |
680 | irq = platform_get_irq(pdev, 0); |
681 | if (irq >= 0 && irq_is_percpu(irq)) |
682 | - return 0; |
683 | + goto out; |
684 | |
685 | irqs = kcalloc(pdev->num_resources, sizeof(*irqs), GFP_KERNEL); |
686 | if (!irqs) |
687 | @@ -1355,6 +1355,7 @@ static int armpmu_device_probe(struct platform_device *pdev) |
688 | else |
689 | kfree(irqs); |
690 | |
691 | +out: |
692 | cpu_pmu->plat_device = pdev; |
693 | return 0; |
694 | } |
695 | diff --git a/arch/arm64/kvm/inject_fault.c b/arch/arm64/kvm/inject_fault.c |
696 | index f02530e726f6..85c57158dcd9 100644 |
697 | --- a/arch/arm64/kvm/inject_fault.c |
698 | +++ b/arch/arm64/kvm/inject_fault.c |
699 | @@ -168,8 +168,8 @@ void kvm_inject_dabt(struct kvm_vcpu *vcpu, unsigned long addr) |
700 | { |
701 | if (!(vcpu->arch.hcr_el2 & HCR_RW)) |
702 | inject_abt32(vcpu, false, addr); |
703 | - |
704 | - inject_abt64(vcpu, false, addr); |
705 | + else |
706 | + inject_abt64(vcpu, false, addr); |
707 | } |
708 | |
709 | /** |
710 | @@ -184,8 +184,8 @@ void kvm_inject_pabt(struct kvm_vcpu *vcpu, unsigned long addr) |
711 | { |
712 | if (!(vcpu->arch.hcr_el2 & HCR_RW)) |
713 | inject_abt32(vcpu, true, addr); |
714 | - |
715 | - inject_abt64(vcpu, true, addr); |
716 | + else |
717 | + inject_abt64(vcpu, true, addr); |
718 | } |
719 | |
720 | /** |
721 | @@ -198,6 +198,6 @@ void kvm_inject_undefined(struct kvm_vcpu *vcpu) |
722 | { |
723 | if (!(vcpu->arch.hcr_el2 & HCR_RW)) |
724 | inject_undef32(vcpu); |
725 | - |
726 | - inject_undef64(vcpu); |
727 | + else |
728 | + inject_undef64(vcpu); |
729 | } |
730 | diff --git a/arch/mips/kernel/scall64-64.S b/arch/mips/kernel/scall64-64.S |
731 | index ad4d44635c76..a6f6b762c47a 100644 |
732 | --- a/arch/mips/kernel/scall64-64.S |
733 | +++ b/arch/mips/kernel/scall64-64.S |
734 | @@ -80,7 +80,7 @@ syscall_trace_entry: |
735 | SAVE_STATIC |
736 | move s0, t2 |
737 | move a0, sp |
738 | - daddiu a1, v0, __NR_64_Linux |
739 | + move a1, v0 |
740 | jal syscall_trace_enter |
741 | |
742 | bltz v0, 2f # seccomp failed? Skip syscall |
743 | diff --git a/arch/mips/kernel/scall64-n32.S b/arch/mips/kernel/scall64-n32.S |
744 | index 446cc654da56..4b2010654c46 100644 |
745 | --- a/arch/mips/kernel/scall64-n32.S |
746 | +++ b/arch/mips/kernel/scall64-n32.S |
747 | @@ -72,7 +72,7 @@ n32_syscall_trace_entry: |
748 | SAVE_STATIC |
749 | move s0, t2 |
750 | move a0, sp |
751 | - daddiu a1, v0, __NR_N32_Linux |
752 | + move a1, v0 |
753 | jal syscall_trace_enter |
754 | |
755 | bltz v0, 2f # seccomp failed? Skip syscall |
756 | diff --git a/arch/x86/include/asm/sigcontext.h b/arch/x86/include/asm/sigcontext.h |
757 | index 6fe6b182c998..9dfce4e0417d 100644 |
758 | --- a/arch/x86/include/asm/sigcontext.h |
759 | +++ b/arch/x86/include/asm/sigcontext.h |
760 | @@ -57,9 +57,9 @@ struct sigcontext { |
761 | unsigned long ip; |
762 | unsigned long flags; |
763 | unsigned short cs; |
764 | - unsigned short __pad2; /* Was called gs, but was always zero. */ |
765 | - unsigned short __pad1; /* Was called fs, but was always zero. */ |
766 | - unsigned short ss; |
767 | + unsigned short gs; |
768 | + unsigned short fs; |
769 | + unsigned short __pad0; |
770 | unsigned long err; |
771 | unsigned long trapno; |
772 | unsigned long oldmask; |
773 | diff --git a/arch/x86/include/uapi/asm/sigcontext.h b/arch/x86/include/uapi/asm/sigcontext.h |
774 | index 16dc4e8a2cd3..d8b9f9081e86 100644 |
775 | --- a/arch/x86/include/uapi/asm/sigcontext.h |
776 | +++ b/arch/x86/include/uapi/asm/sigcontext.h |
777 | @@ -177,24 +177,9 @@ struct sigcontext { |
778 | __u64 rip; |
779 | __u64 eflags; /* RFLAGS */ |
780 | __u16 cs; |
781 | - |
782 | - /* |
783 | - * Prior to 2.5.64 ("[PATCH] x86-64 updates for 2.5.64-bk3"), |
784 | - * Linux saved and restored fs and gs in these slots. This |
785 | - * was counterproductive, as fsbase and gsbase were never |
786 | - * saved, so arch_prctl was presumably unreliable. |
787 | - * |
788 | - * If these slots are ever needed for any other purpose, there |
789 | - * is some risk that very old 64-bit binaries could get |
790 | - * confused. I doubt that many such binaries still work, |
791 | - * though, since the same patch in 2.5.64 also removed the |
792 | - * 64-bit set_thread_area syscall, so it appears that there is |
793 | - * no TLS API that works in both pre- and post-2.5.64 kernels. |
794 | - */ |
795 | - __u16 __pad2; /* Was gs. */ |
796 | - __u16 __pad1; /* Was fs. */ |
797 | - |
798 | - __u16 ss; |
799 | + __u16 gs; |
800 | + __u16 fs; |
801 | + __u16 __pad0; |
802 | __u64 err; |
803 | __u64 trapno; |
804 | __u64 oldmask; |
805 | diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c |
806 | index dcb52850a28f..cde732c1b495 100644 |
807 | --- a/arch/x86/kernel/apic/apic.c |
808 | +++ b/arch/x86/kernel/apic/apic.c |
809 | @@ -1424,7 +1424,7 @@ static inline void __x2apic_disable(void) |
810 | { |
811 | u64 msr; |
812 | |
813 | - if (cpu_has_apic) |
814 | + if (!cpu_has_apic) |
815 | return; |
816 | |
817 | rdmsrl(MSR_IA32_APICBASE, msr); |
818 | @@ -1483,10 +1483,13 @@ void x2apic_setup(void) |
819 | |
820 | static __init void x2apic_disable(void) |
821 | { |
822 | - u32 x2apic_id; |
823 | + u32 x2apic_id, state = x2apic_state; |
824 | |
825 | - if (x2apic_state != X2APIC_ON) |
826 | - goto out; |
827 | + x2apic_mode = 0; |
828 | + x2apic_state = X2APIC_DISABLED; |
829 | + |
830 | + if (state != X2APIC_ON) |
831 | + return; |
832 | |
833 | x2apic_id = read_apic_id(); |
834 | if (x2apic_id >= 255) |
835 | @@ -1494,9 +1497,6 @@ static __init void x2apic_disable(void) |
836 | |
837 | __x2apic_disable(); |
838 | register_lapic_address(mp_lapic_addr); |
839 | -out: |
840 | - x2apic_state = X2APIC_DISABLED; |
841 | - x2apic_mode = 0; |
842 | } |
843 | |
844 | static __init void x2apic_enable(void) |
845 | diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c |
846 | index 6e338e3b1dc0..971743774248 100644 |
847 | --- a/arch/x86/kernel/process.c |
848 | +++ b/arch/x86/kernel/process.c |
849 | @@ -453,6 +453,7 @@ static int prefer_mwait_c1_over_halt(const struct cpuinfo_x86 *c) |
850 | static void mwait_idle(void) |
851 | { |
852 | if (!current_set_polling_and_test()) { |
853 | + trace_cpu_idle_rcuidle(1, smp_processor_id()); |
854 | if (this_cpu_has(X86_BUG_CLFLUSH_MONITOR)) { |
855 | smp_mb(); /* quirk */ |
856 | clflush((void *)¤t_thread_info()->flags); |
857 | @@ -464,6 +465,7 @@ static void mwait_idle(void) |
858 | __sti_mwait(0, 0); |
859 | else |
860 | local_irq_enable(); |
861 | + trace_cpu_idle_rcuidle(PWR_EVENT_EXIT, smp_processor_id()); |
862 | } else { |
863 | local_irq_enable(); |
864 | } |
865 | diff --git a/arch/x86/kernel/signal.c b/arch/x86/kernel/signal.c |
866 | index 1ea14fd53933..e0fd5f47fbb9 100644 |
867 | --- a/arch/x86/kernel/signal.c |
868 | +++ b/arch/x86/kernel/signal.c |
869 | @@ -93,8 +93,15 @@ int restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc) |
870 | COPY(r15); |
871 | #endif /* CONFIG_X86_64 */ |
872 | |
873 | +#ifdef CONFIG_X86_32 |
874 | COPY_SEG_CPL3(cs); |
875 | COPY_SEG_CPL3(ss); |
876 | +#else /* !CONFIG_X86_32 */ |
877 | + /* Kernel saves and restores only the CS segment register on signals, |
878 | + * which is the bare minimum needed to allow mixed 32/64-bit code. |
879 | + * App's signal handler can save/restore other segments if needed. */ |
880 | + COPY_SEG_CPL3(cs); |
881 | +#endif /* CONFIG_X86_32 */ |
882 | |
883 | get_user_ex(tmpflags, &sc->flags); |
884 | regs->flags = (regs->flags & ~FIX_EFLAGS) | (tmpflags & FIX_EFLAGS); |
885 | @@ -154,9 +161,8 @@ int setup_sigcontext(struct sigcontext __user *sc, void __user *fpstate, |
886 | #else /* !CONFIG_X86_32 */ |
887 | put_user_ex(regs->flags, &sc->flags); |
888 | put_user_ex(regs->cs, &sc->cs); |
889 | - put_user_ex(0, &sc->__pad2); |
890 | - put_user_ex(0, &sc->__pad1); |
891 | - put_user_ex(regs->ss, &sc->ss); |
892 | + put_user_ex(0, &sc->gs); |
893 | + put_user_ex(0, &sc->fs); |
894 | #endif /* CONFIG_X86_32 */ |
895 | |
896 | put_user_ex(fpstate, &sc->fpstate); |
897 | @@ -450,19 +456,9 @@ static int __setup_rt_frame(int sig, struct ksignal *ksig, |
898 | |
899 | regs->sp = (unsigned long)frame; |
900 | |
901 | - /* |
902 | - * Set up the CS and SS registers to run signal handlers in |
903 | - * 64-bit mode, even if the handler happens to be interrupting |
904 | - * 32-bit or 16-bit code. |
905 | - * |
906 | - * SS is subtle. In 64-bit mode, we don't need any particular |
907 | - * SS descriptor, but we do need SS to be valid. It's possible |
908 | - * that the old SS is entirely bogus -- this can happen if the |
909 | - * signal we're trying to deliver is #GP or #SS caused by a bad |
910 | - * SS value. |
911 | - */ |
912 | + /* Set up the CS register to run signal handlers in 64-bit mode, |
913 | + even if the handler happens to be interrupting 32-bit code. */ |
914 | regs->cs = __USER_CS; |
915 | - regs->ss = __USER_DS; |
916 | |
917 | return 0; |
918 | } |
919 | diff --git a/arch/x86/xen/Kconfig b/arch/x86/xen/Kconfig |
920 | index e88fda867a33..484145368a24 100644 |
921 | --- a/arch/x86/xen/Kconfig |
922 | +++ b/arch/x86/xen/Kconfig |
923 | @@ -8,7 +8,7 @@ config XEN |
924 | select PARAVIRT_CLOCK |
925 | select XEN_HAVE_PVMMU |
926 | depends on X86_64 || (X86_32 && X86_PAE) |
927 | - depends on X86_TSC |
928 | + depends on X86_LOCAL_APIC && X86_TSC |
929 | help |
930 | This is the Linux Xen port. Enabling this will allow the |
931 | kernel to boot in a paravirtualized environment under the |
932 | @@ -17,7 +17,7 @@ config XEN |
933 | config XEN_DOM0 |
934 | def_bool y |
935 | depends on XEN && PCI_XEN && SWIOTLB_XEN |
936 | - depends on X86_LOCAL_APIC && X86_IO_APIC && ACPI && PCI |
937 | + depends on X86_IO_APIC && ACPI && PCI |
938 | |
939 | config XEN_PVHVM |
940 | def_bool y |
941 | diff --git a/arch/x86/xen/Makefile b/arch/x86/xen/Makefile |
942 | index 7322755f337a..4b6e29ac0968 100644 |
943 | --- a/arch/x86/xen/Makefile |
944 | +++ b/arch/x86/xen/Makefile |
945 | @@ -13,13 +13,13 @@ CFLAGS_mmu.o := $(nostackp) |
946 | obj-y := enlighten.o setup.o multicalls.o mmu.o irq.o \ |
947 | time.o xen-asm.o xen-asm_$(BITS).o \ |
948 | grant-table.o suspend.o platform-pci-unplug.o \ |
949 | - p2m.o |
950 | + p2m.o apic.o |
951 | |
952 | obj-$(CONFIG_EVENT_TRACING) += trace.o |
953 | |
954 | obj-$(CONFIG_SMP) += smp.o |
955 | obj-$(CONFIG_PARAVIRT_SPINLOCKS)+= spinlock.o |
956 | obj-$(CONFIG_XEN_DEBUG_FS) += debugfs.o |
957 | -obj-$(CONFIG_XEN_DOM0) += apic.o vga.o |
958 | +obj-$(CONFIG_XEN_DOM0) += vga.o |
959 | obj-$(CONFIG_SWIOTLB_XEN) += pci-swiotlb-xen.o |
960 | obj-$(CONFIG_XEN_EFI) += efi.o |
961 | diff --git a/arch/x86/xen/xen-ops.h b/arch/x86/xen/xen-ops.h |
962 | index 9e195c683549..bef30cbb56c4 100644 |
963 | --- a/arch/x86/xen/xen-ops.h |
964 | +++ b/arch/x86/xen/xen-ops.h |
965 | @@ -101,17 +101,15 @@ struct dom0_vga_console_info; |
966 | |
967 | #ifdef CONFIG_XEN_DOM0 |
968 | void __init xen_init_vga(const struct dom0_vga_console_info *, size_t size); |
969 | -void __init xen_init_apic(void); |
970 | #else |
971 | static inline void __init xen_init_vga(const struct dom0_vga_console_info *info, |
972 | size_t size) |
973 | { |
974 | } |
975 | -static inline void __init xen_init_apic(void) |
976 | -{ |
977 | -} |
978 | #endif |
979 | |
980 | +void __init xen_init_apic(void); |
981 | + |
982 | #ifdef CONFIG_XEN_EFI |
983 | extern void xen_efi_init(void); |
984 | #else |
985 | diff --git a/block/blk-settings.c b/block/blk-settings.c |
986 | index 12600bfffca9..e0057d035200 100644 |
987 | --- a/block/blk-settings.c |
988 | +++ b/block/blk-settings.c |
989 | @@ -241,8 +241,8 @@ EXPORT_SYMBOL(blk_queue_bounce_limit); |
990 | * Description: |
991 | * Enables a low level driver to set a hard upper limit, |
992 | * max_hw_sectors, on the size of requests. max_hw_sectors is set by |
993 | - * the device driver based upon the combined capabilities of I/O |
994 | - * controller and storage device. |
995 | + * the device driver based upon the capabilities of the I/O |
996 | + * controller. |
997 | * |
998 | * max_sectors is a soft limit imposed by the block layer for |
999 | * filesystem type requests. This value can be overridden on a |
1000 | diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c |
1001 | index 41c99be9bd41..e0064d180f04 100644 |
1002 | --- a/drivers/ata/libata-core.c |
1003 | +++ b/drivers/ata/libata-core.c |
1004 | @@ -694,11 +694,11 @@ static int ata_rwcmd_protocol(struct ata_taskfile *tf, struct ata_device *dev) |
1005 | * RETURNS: |
1006 | * Block address read from @tf. |
1007 | */ |
1008 | -u64 ata_tf_read_block(const struct ata_taskfile *tf, struct ata_device *dev) |
1009 | +u64 ata_tf_read_block(struct ata_taskfile *tf, struct ata_device *dev) |
1010 | { |
1011 | u64 block = 0; |
1012 | |
1013 | - if (!dev || tf->flags & ATA_TFLAG_LBA) { |
1014 | + if (tf->flags & ATA_TFLAG_LBA) { |
1015 | if (tf->flags & ATA_TFLAG_LBA48) { |
1016 | block |= (u64)tf->hob_lbah << 40; |
1017 | block |= (u64)tf->hob_lbam << 32; |
1018 | @@ -2147,24 +2147,6 @@ static int ata_dev_config_ncq(struct ata_device *dev, |
1019 | return 0; |
1020 | } |
1021 | |
1022 | -static void ata_dev_config_sense_reporting(struct ata_device *dev) |
1023 | -{ |
1024 | - unsigned int err_mask; |
1025 | - |
1026 | - if (!ata_id_has_sense_reporting(dev->id)) |
1027 | - return; |
1028 | - |
1029 | - if (ata_id_sense_reporting_enabled(dev->id)) |
1030 | - return; |
1031 | - |
1032 | - err_mask = ata_dev_set_feature(dev, SETFEATURE_SENSE_DATA, 0x1); |
1033 | - if (err_mask) { |
1034 | - ata_dev_dbg(dev, |
1035 | - "failed to enable Sense Data Reporting, Emask 0x%x\n", |
1036 | - err_mask); |
1037 | - } |
1038 | -} |
1039 | - |
1040 | /** |
1041 | * ata_dev_configure - Configure the specified ATA/ATAPI device |
1042 | * @dev: Target device to configure |
1043 | @@ -2387,7 +2369,7 @@ int ata_dev_configure(struct ata_device *dev) |
1044 | dev->devslp_timing[i] = sata_setting[j]; |
1045 | } |
1046 | } |
1047 | - ata_dev_config_sense_reporting(dev); |
1048 | + |
1049 | dev->cdb_len = 16; |
1050 | } |
1051 | |
1052 | @@ -4248,6 +4230,8 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = { |
1053 | ATA_HORKAGE_ZERO_AFTER_TRIM, }, |
1054 | { "Samsung SSD 8*", NULL, ATA_HORKAGE_NO_NCQ_TRIM | |
1055 | ATA_HORKAGE_ZERO_AFTER_TRIM, }, |
1056 | + { "FCCT*M500*", NULL, ATA_HORKAGE_NO_NCQ_TRIM | |
1057 | + ATA_HORKAGE_ZERO_AFTER_TRIM, }, |
1058 | |
1059 | /* devices that don't properly handle TRIM commands */ |
1060 | { "SuperSSpeed S238*", NULL, ATA_HORKAGE_NOTRIM, }, |
1061 | diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c |
1062 | index 7465031a893c..cb0508af1459 100644 |
1063 | --- a/drivers/ata/libata-eh.c |
1064 | +++ b/drivers/ata/libata-eh.c |
1065 | @@ -1592,8 +1592,6 @@ static int ata_eh_read_log_10h(struct ata_device *dev, |
1066 | tf->hob_lbah = buf[10]; |
1067 | tf->nsect = buf[12]; |
1068 | tf->hob_nsect = buf[13]; |
1069 | - if (ata_id_has_ncq_autosense(dev->id)) |
1070 | - tf->auxiliary = buf[14] << 16 | buf[15] << 8 | buf[16]; |
1071 | |
1072 | return 0; |
1073 | } |
1074 | @@ -1630,70 +1628,6 @@ unsigned int atapi_eh_tur(struct ata_device *dev, u8 *r_sense_key) |
1075 | } |
1076 | |
1077 | /** |
1078 | - * ata_eh_request_sense - perform REQUEST_SENSE_DATA_EXT |
1079 | - * @dev: device to perform REQUEST_SENSE_SENSE_DATA_EXT to |
1080 | - * @sense_buf: result sense data buffer (SCSI_SENSE_BUFFERSIZE bytes long) |
1081 | - * @dfl_sense_key: default sense key to use |
1082 | - * |
1083 | - * Perform REQUEST_SENSE_DATA_EXT after the device reported CHECK |
1084 | - * SENSE. This function is EH helper. |
1085 | - * |
1086 | - * LOCKING: |
1087 | - * Kernel thread context (may sleep). |
1088 | - * |
1089 | - * RETURNS: |
1090 | - * encoded sense data on success, 0 on failure or if sense data |
1091 | - * is not available. |
1092 | - */ |
1093 | -static u32 ata_eh_request_sense(struct ata_queued_cmd *qc, |
1094 | - struct scsi_cmnd *cmd) |
1095 | -{ |
1096 | - struct ata_device *dev = qc->dev; |
1097 | - struct ata_taskfile tf; |
1098 | - unsigned int err_mask; |
1099 | - |
1100 | - if (!cmd) |
1101 | - return 0; |
1102 | - |
1103 | - DPRINTK("ATA request sense\n"); |
1104 | - ata_dev_warn(dev, "request sense\n"); |
1105 | - if (!ata_id_sense_reporting_enabled(dev->id)) { |
1106 | - ata_dev_warn(qc->dev, "sense data reporting disabled\n"); |
1107 | - return 0; |
1108 | - } |
1109 | - ata_tf_init(dev, &tf); |
1110 | - |
1111 | - tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE; |
1112 | - tf.flags |= ATA_TFLAG_LBA | ATA_TFLAG_LBA48; |
1113 | - tf.command = ATA_CMD_REQ_SENSE_DATA; |
1114 | - tf.protocol = ATA_PROT_NODATA; |
1115 | - |
1116 | - err_mask = ata_exec_internal(dev, &tf, NULL, DMA_NONE, NULL, 0, 0); |
1117 | - /* |
1118 | - * ACS-4 states: |
1119 | - * The device may set the SENSE DATA AVAILABLE bit to one in the |
1120 | - * STATUS field and clear the ERROR bit to zero in the STATUS field |
1121 | - * to indicate that the command returned completion without an error |
1122 | - * and the sense data described in table 306 is available. |
1123 | - * |
1124 | - * IOW the 'ATA_SENSE' bit might not be set even though valid |
1125 | - * sense data is available. |
1126 | - * So check for both. |
1127 | - */ |
1128 | - if ((tf.command & ATA_SENSE) || |
1129 | - tf.lbah != 0 || tf.lbam != 0 || tf.lbal != 0) { |
1130 | - ata_scsi_set_sense(cmd, tf.lbah, tf.lbam, tf.lbal); |
1131 | - qc->flags |= ATA_QCFLAG_SENSE_VALID; |
1132 | - ata_dev_warn(dev, "sense data %02x/%02x/%02x\n", |
1133 | - tf.lbah, tf.lbam, tf.lbal); |
1134 | - } else { |
1135 | - ata_dev_warn(dev, "request sense failed stat %02x emask %x\n", |
1136 | - tf.command, err_mask); |
1137 | - } |
1138 | - return err_mask; |
1139 | -} |
1140 | - |
1141 | -/** |
1142 | * atapi_eh_request_sense - perform ATAPI REQUEST_SENSE |
1143 | * @dev: device to perform REQUEST_SENSE to |
1144 | * @sense_buf: result sense data buffer (SCSI_SENSE_BUFFERSIZE bytes long) |
1145 | @@ -1855,19 +1789,6 @@ void ata_eh_analyze_ncq_error(struct ata_link *link) |
1146 | memcpy(&qc->result_tf, &tf, sizeof(tf)); |
1147 | qc->result_tf.flags = ATA_TFLAG_ISADDR | ATA_TFLAG_LBA | ATA_TFLAG_LBA48; |
1148 | qc->err_mask |= AC_ERR_DEV | AC_ERR_NCQ; |
1149 | - if (qc->result_tf.auxiliary) { |
1150 | - char sense_key, asc, ascq; |
1151 | - |
1152 | - sense_key = (qc->result_tf.auxiliary >> 16) & 0xff; |
1153 | - asc = (qc->result_tf.auxiliary >> 8) & 0xff; |
1154 | - ascq = qc->result_tf.auxiliary & 0xff; |
1155 | - ata_dev_dbg(dev, "NCQ Autosense %02x/%02x/%02x\n", |
1156 | - sense_key, asc, ascq); |
1157 | - ata_scsi_set_sense(qc->scsicmd, sense_key, asc, ascq); |
1158 | - ata_scsi_set_sense_information(qc->scsicmd, &qc->result_tf); |
1159 | - qc->flags |= ATA_QCFLAG_SENSE_VALID; |
1160 | - } |
1161 | - |
1162 | ehc->i.err_mask &= ~AC_ERR_DEV; |
1163 | } |
1164 | |
1165 | @@ -1897,27 +1818,6 @@ static unsigned int ata_eh_analyze_tf(struct ata_queued_cmd *qc, |
1166 | return ATA_EH_RESET; |
1167 | } |
1168 | |
1169 | - /* |
1170 | - * Sense data reporting does not work if the |
1171 | - * device fault bit is set. |
1172 | - */ |
1173 | - if ((stat & ATA_SENSE) && !(stat & ATA_DF) && |
1174 | - !(qc->flags & ATA_QCFLAG_SENSE_VALID)) { |
1175 | - if (!(qc->ap->pflags & ATA_PFLAG_FROZEN)) { |
1176 | - tmp = ata_eh_request_sense(qc, qc->scsicmd); |
1177 | - if (tmp) |
1178 | - qc->err_mask |= tmp; |
1179 | - else |
1180 | - ata_scsi_set_sense_information(qc->scsicmd, tf); |
1181 | - } else { |
1182 | - ata_dev_warn(qc->dev, "sense data available but port frozen\n"); |
1183 | - } |
1184 | - } |
1185 | - |
1186 | - /* Set by NCQ autosense or request sense above */ |
1187 | - if (qc->flags & ATA_QCFLAG_SENSE_VALID) |
1188 | - return 0; |
1189 | - |
1190 | if (stat & (ATA_ERR | ATA_DF)) |
1191 | qc->err_mask |= AC_ERR_DEV; |
1192 | else |
1193 | @@ -2661,15 +2561,14 @@ static void ata_eh_link_report(struct ata_link *link) |
1194 | |
1195 | #ifdef CONFIG_ATA_VERBOSE_ERROR |
1196 | if (res->command & (ATA_BUSY | ATA_DRDY | ATA_DF | ATA_DRQ | |
1197 | - ATA_SENSE | ATA_ERR)) { |
1198 | + ATA_ERR)) { |
1199 | if (res->command & ATA_BUSY) |
1200 | ata_dev_err(qc->dev, "status: { Busy }\n"); |
1201 | else |
1202 | - ata_dev_err(qc->dev, "status: { %s%s%s%s%s}\n", |
1203 | + ata_dev_err(qc->dev, "status: { %s%s%s%s}\n", |
1204 | res->command & ATA_DRDY ? "DRDY " : "", |
1205 | res->command & ATA_DF ? "DF " : "", |
1206 | res->command & ATA_DRQ ? "DRQ " : "", |
1207 | - res->command & ATA_SENSE ? "SENSE " : "", |
1208 | res->command & ATA_ERR ? "ERR " : ""); |
1209 | } |
1210 | |
1211 | diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c |
1212 | index 641a61a59e89..0d7f0da3a269 100644 |
1213 | --- a/drivers/ata/libata-scsi.c |
1214 | +++ b/drivers/ata/libata-scsi.c |
1215 | @@ -270,28 +270,13 @@ DEVICE_ATTR(unload_heads, S_IRUGO | S_IWUSR, |
1216 | ata_scsi_park_show, ata_scsi_park_store); |
1217 | EXPORT_SYMBOL_GPL(dev_attr_unload_heads); |
1218 | |
1219 | -void ata_scsi_set_sense(struct scsi_cmnd *cmd, u8 sk, u8 asc, u8 ascq) |
1220 | +static void ata_scsi_set_sense(struct scsi_cmnd *cmd, u8 sk, u8 asc, u8 ascq) |
1221 | { |
1222 | - if (!cmd) |
1223 | - return; |
1224 | - |
1225 | cmd->result = (DRIVER_SENSE << 24) | SAM_STAT_CHECK_CONDITION; |
1226 | |
1227 | scsi_build_sense_buffer(0, cmd->sense_buffer, sk, asc, ascq); |
1228 | } |
1229 | |
1230 | -void ata_scsi_set_sense_information(struct scsi_cmnd *cmd, |
1231 | - const struct ata_taskfile *tf) |
1232 | -{ |
1233 | - u64 information; |
1234 | - |
1235 | - if (!cmd) |
1236 | - return; |
1237 | - |
1238 | - information = ata_tf_read_block(tf, NULL); |
1239 | - scsi_set_sense_information(cmd->sense_buffer, information); |
1240 | -} |
1241 | - |
1242 | static ssize_t |
1243 | ata_scsi_em_message_store(struct device *dev, struct device_attribute *attr, |
1244 | const char *buf, size_t count) |
1245 | @@ -1792,9 +1777,7 @@ static void ata_scsi_qc_complete(struct ata_queued_cmd *qc) |
1246 | ((cdb[2] & 0x20) || need_sense)) { |
1247 | ata_gen_passthru_sense(qc); |
1248 | } else { |
1249 | - if (qc->flags & ATA_QCFLAG_SENSE_VALID) { |
1250 | - cmd->result = SAM_STAT_CHECK_CONDITION; |
1251 | - } else if (!need_sense) { |
1252 | + if (!need_sense) { |
1253 | cmd->result = SAM_STAT_GOOD; |
1254 | } else { |
1255 | /* TODO: decide which descriptor format to use |
1256 | diff --git a/drivers/ata/libata.h b/drivers/ata/libata.h |
1257 | index a998a175f9f1..f840ca18a7c0 100644 |
1258 | --- a/drivers/ata/libata.h |
1259 | +++ b/drivers/ata/libata.h |
1260 | @@ -67,8 +67,7 @@ extern struct ata_queued_cmd *ata_qc_new_init(struct ata_device *dev, int tag); |
1261 | extern int ata_build_rw_tf(struct ata_taskfile *tf, struct ata_device *dev, |
1262 | u64 block, u32 n_block, unsigned int tf_flags, |
1263 | unsigned int tag); |
1264 | -extern u64 ata_tf_read_block(const struct ata_taskfile *tf, |
1265 | - struct ata_device *dev); |
1266 | +extern u64 ata_tf_read_block(struct ata_taskfile *tf, struct ata_device *dev); |
1267 | extern unsigned ata_exec_internal(struct ata_device *dev, |
1268 | struct ata_taskfile *tf, const u8 *cdb, |
1269 | int dma_dir, void *buf, unsigned int buflen, |
1270 | @@ -138,9 +137,6 @@ extern int ata_scsi_add_hosts(struct ata_host *host, |
1271 | struct scsi_host_template *sht); |
1272 | extern void ata_scsi_scan_host(struct ata_port *ap, int sync); |
1273 | extern int ata_scsi_offline_dev(struct ata_device *dev); |
1274 | -extern void ata_scsi_set_sense(struct scsi_cmnd *cmd, u8 sk, u8 asc, u8 ascq); |
1275 | -extern void ata_scsi_set_sense_information(struct scsi_cmnd *cmd, |
1276 | - const struct ata_taskfile *tf); |
1277 | extern void ata_scsi_media_change_notify(struct ata_device *dev); |
1278 | extern void ata_scsi_hotplug(struct work_struct *work); |
1279 | extern void ata_schedule_scsi_eh(struct Scsi_Host *shost); |
1280 | diff --git a/drivers/base/regmap/regcache-rbtree.c b/drivers/base/regmap/regcache-rbtree.c |
1281 | index 81751a49d8bf..56486d92c4e7 100644 |
1282 | --- a/drivers/base/regmap/regcache-rbtree.c |
1283 | +++ b/drivers/base/regmap/regcache-rbtree.c |
1284 | @@ -296,11 +296,20 @@ static int regcache_rbtree_insert_to_block(struct regmap *map, |
1285 | if (!blk) |
1286 | return -ENOMEM; |
1287 | |
1288 | - present = krealloc(rbnode->cache_present, |
1289 | - BITS_TO_LONGS(blklen) * sizeof(*present), GFP_KERNEL); |
1290 | - if (!present) { |
1291 | - kfree(blk); |
1292 | - return -ENOMEM; |
1293 | + if (BITS_TO_LONGS(blklen) > BITS_TO_LONGS(rbnode->blklen)) { |
1294 | + present = krealloc(rbnode->cache_present, |
1295 | + BITS_TO_LONGS(blklen) * sizeof(*present), |
1296 | + GFP_KERNEL); |
1297 | + if (!present) { |
1298 | + kfree(blk); |
1299 | + return -ENOMEM; |
1300 | + } |
1301 | + |
1302 | + memset(present + BITS_TO_LONGS(rbnode->blklen), 0, |
1303 | + (BITS_TO_LONGS(blklen) - BITS_TO_LONGS(rbnode->blklen)) |
1304 | + * sizeof(*present)); |
1305 | + } else { |
1306 | + present = rbnode->cache_present; |
1307 | } |
1308 | |
1309 | /* insert the register value in the correct place in the rbnode block */ |
1310 | diff --git a/drivers/block/xen-blkback/blkback.c b/drivers/block/xen-blkback/blkback.c |
1311 | index 713fc9ff1149..3e9ec9523f73 100644 |
1312 | --- a/drivers/block/xen-blkback/blkback.c |
1313 | +++ b/drivers/block/xen-blkback/blkback.c |
1314 | @@ -362,8 +362,8 @@ static void purge_persistent_gnt(struct xen_blkif *blkif) |
1315 | return; |
1316 | } |
1317 | |
1318 | - if (work_pending(&blkif->persistent_purge_work)) { |
1319 | - pr_alert_ratelimited("Scheduled work from previous purge is still pending, cannot purge list\n"); |
1320 | + if (work_busy(&blkif->persistent_purge_work)) { |
1321 | + pr_alert_ratelimited("Scheduled work from previous purge is still busy, cannot purge list\n"); |
1322 | return; |
1323 | } |
1324 | |
1325 | diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c |
1326 | index 2c61cf8c6f61..89c7371ab2dc 100644 |
1327 | --- a/drivers/block/xen-blkfront.c |
1328 | +++ b/drivers/block/xen-blkfront.c |
1329 | @@ -1118,8 +1118,10 @@ static void blkif_completion(struct blk_shadow *s, struct blkfront_info *info, |
1330 | * Add the used indirect page back to the list of |
1331 | * available pages for indirect grefs. |
1332 | */ |
1333 | - indirect_page = pfn_to_page(s->indirect_grants[i]->pfn); |
1334 | - list_add(&indirect_page->lru, &info->indirect_pages); |
1335 | + if (!info->feature_persistent) { |
1336 | + indirect_page = pfn_to_page(s->indirect_grants[i]->pfn); |
1337 | + list_add(&indirect_page->lru, &info->indirect_pages); |
1338 | + } |
1339 | s->indirect_grants[i]->gref = GRANT_INVALID_REF; |
1340 | list_add_tail(&s->indirect_grants[i]->node, &info->grants); |
1341 | } |
1342 | diff --git a/drivers/clk/pxa/clk-pxa3xx.c b/drivers/clk/pxa/clk-pxa3xx.c |
1343 | index 4b93a1efb36d..ac03ba49e9d1 100644 |
1344 | --- a/drivers/clk/pxa/clk-pxa3xx.c |
1345 | +++ b/drivers/clk/pxa/clk-pxa3xx.c |
1346 | @@ -126,7 +126,7 @@ PARENTS(pxa3xx_ac97_bus) = { "ring_osc_60mhz", "ac97" }; |
1347 | PARENTS(pxa3xx_sbus) = { "ring_osc_60mhz", "system_bus" }; |
1348 | PARENTS(pxa3xx_smemcbus) = { "ring_osc_60mhz", "smemc" }; |
1349 | |
1350 | -#define CKEN_AB(bit) ((CKEN_ ## bit > 31) ? &CKENA : &CKENB) |
1351 | +#define CKEN_AB(bit) ((CKEN_ ## bit > 31) ? &CKENB : &CKENA) |
1352 | #define PXA3XX_CKEN(dev_id, con_id, parents, mult_lp, div_lp, mult_hp, \ |
1353 | div_hp, bit, is_lp, flags) \ |
1354 | PXA_CKEN(dev_id, con_id, bit, parents, mult_lp, div_lp, \ |
1355 | diff --git a/drivers/crypto/caam/caamhash.c b/drivers/crypto/caam/caamhash.c |
1356 | index 332c8ef8dae2..0436997e054b 100644 |
1357 | --- a/drivers/crypto/caam/caamhash.c |
1358 | +++ b/drivers/crypto/caam/caamhash.c |
1359 | @@ -909,13 +909,14 @@ static int ahash_final_ctx(struct ahash_request *req) |
1360 | state->buflen_1; |
1361 | u32 *sh_desc = ctx->sh_desc_fin, *desc; |
1362 | dma_addr_t ptr = ctx->sh_desc_fin_dma; |
1363 | - int sec4_sg_bytes; |
1364 | + int sec4_sg_bytes, sec4_sg_src_index; |
1365 | int digestsize = crypto_ahash_digestsize(ahash); |
1366 | struct ahash_edesc *edesc; |
1367 | int ret = 0; |
1368 | int sh_len; |
1369 | |
1370 | - sec4_sg_bytes = (1 + (buflen ? 1 : 0)) * sizeof(struct sec4_sg_entry); |
1371 | + sec4_sg_src_index = 1 + (buflen ? 1 : 0); |
1372 | + sec4_sg_bytes = sec4_sg_src_index * sizeof(struct sec4_sg_entry); |
1373 | |
1374 | /* allocate space for base edesc and hw desc commands, link tables */ |
1375 | edesc = kmalloc(sizeof(struct ahash_edesc) + DESC_JOB_IO_LEN + |
1376 | @@ -942,7 +943,7 @@ static int ahash_final_ctx(struct ahash_request *req) |
1377 | state->buf_dma = try_buf_map_to_sec4_sg(jrdev, edesc->sec4_sg + 1, |
1378 | buf, state->buf_dma, buflen, |
1379 | last_buflen); |
1380 | - (edesc->sec4_sg + sec4_sg_bytes - 1)->len |= SEC4_SG_LEN_FIN; |
1381 | + (edesc->sec4_sg + sec4_sg_src_index - 1)->len |= SEC4_SG_LEN_FIN; |
1382 | |
1383 | edesc->sec4_sg_dma = dma_map_single(jrdev, edesc->sec4_sg, |
1384 | sec4_sg_bytes, DMA_TO_DEVICE); |
1385 | diff --git a/drivers/crypto/nx/nx-sha256.c b/drivers/crypto/nx/nx-sha256.c |
1386 | index 08f8d5cd6334..becb738c897b 100644 |
1387 | --- a/drivers/crypto/nx/nx-sha256.c |
1388 | +++ b/drivers/crypto/nx/nx-sha256.c |
1389 | @@ -71,7 +71,6 @@ static int nx_sha256_update(struct shash_desc *desc, const u8 *data, |
1390 | struct sha256_state *sctx = shash_desc_ctx(desc); |
1391 | struct nx_crypto_ctx *nx_ctx = crypto_tfm_ctx(&desc->tfm->base); |
1392 | struct nx_csbcpb *csbcpb = (struct nx_csbcpb *)nx_ctx->csbcpb; |
1393 | - struct nx_sg *in_sg; |
1394 | struct nx_sg *out_sg; |
1395 | u64 to_process = 0, leftover, total; |
1396 | unsigned long irq_flags; |
1397 | @@ -97,7 +96,6 @@ static int nx_sha256_update(struct shash_desc *desc, const u8 *data, |
1398 | NX_CPB_FDM(csbcpb) |= NX_FDM_INTERMEDIATE; |
1399 | NX_CPB_FDM(csbcpb) |= NX_FDM_CONTINUATION; |
1400 | |
1401 | - in_sg = nx_ctx->in_sg; |
1402 | max_sg_len = min_t(u64, nx_ctx->ap->sglen, |
1403 | nx_driver.of.max_sg_len/sizeof(struct nx_sg)); |
1404 | max_sg_len = min_t(u64, max_sg_len, |
1405 | @@ -114,17 +112,12 @@ static int nx_sha256_update(struct shash_desc *desc, const u8 *data, |
1406 | } |
1407 | |
1408 | do { |
1409 | - /* |
1410 | - * to_process: the SHA256_BLOCK_SIZE data chunk to process in |
1411 | - * this update. This value is also restricted by the sg list |
1412 | - * limits. |
1413 | - */ |
1414 | - to_process = total - to_process; |
1415 | - to_process = to_process & ~(SHA256_BLOCK_SIZE - 1); |
1416 | + int used_sgs = 0; |
1417 | + struct nx_sg *in_sg = nx_ctx->in_sg; |
1418 | |
1419 | if (buf_len) { |
1420 | data_len = buf_len; |
1421 | - in_sg = nx_build_sg_list(nx_ctx->in_sg, |
1422 | + in_sg = nx_build_sg_list(in_sg, |
1423 | (u8 *) sctx->buf, |
1424 | &data_len, |
1425 | max_sg_len); |
1426 | @@ -133,15 +126,27 @@ static int nx_sha256_update(struct shash_desc *desc, const u8 *data, |
1427 | rc = -EINVAL; |
1428 | goto out; |
1429 | } |
1430 | + used_sgs = in_sg - nx_ctx->in_sg; |
1431 | } |
1432 | |
1433 | + /* to_process: SHA256_BLOCK_SIZE aligned chunk to be |
1434 | + * processed in this iteration. This value is restricted |
1435 | + * by sg list limits and number of sgs we already used |
1436 | + * for leftover data. (see above) |
1437 | + * In ideal case, we could allow NX_PAGE_SIZE * max_sg_len, |
1438 | + * but because data may not be aligned, we need to account |
1439 | + * for that too. */ |
1440 | + to_process = min_t(u64, total, |
1441 | + (max_sg_len - 1 - used_sgs) * NX_PAGE_SIZE); |
1442 | + to_process = to_process & ~(SHA256_BLOCK_SIZE - 1); |
1443 | + |
1444 | data_len = to_process - buf_len; |
1445 | in_sg = nx_build_sg_list(in_sg, (u8 *) data, |
1446 | &data_len, max_sg_len); |
1447 | |
1448 | nx_ctx->op.inlen = (nx_ctx->in_sg - in_sg) * sizeof(struct nx_sg); |
1449 | |
1450 | - to_process = (data_len + buf_len); |
1451 | + to_process = data_len + buf_len; |
1452 | leftover = total - to_process; |
1453 | |
1454 | /* |
1455 | diff --git a/drivers/crypto/nx/nx-sha512.c b/drivers/crypto/nx/nx-sha512.c |
1456 | index aff0fe58eac0..b6e183d58d73 100644 |
1457 | --- a/drivers/crypto/nx/nx-sha512.c |
1458 | +++ b/drivers/crypto/nx/nx-sha512.c |
1459 | @@ -71,7 +71,6 @@ static int nx_sha512_update(struct shash_desc *desc, const u8 *data, |
1460 | struct sha512_state *sctx = shash_desc_ctx(desc); |
1461 | struct nx_crypto_ctx *nx_ctx = crypto_tfm_ctx(&desc->tfm->base); |
1462 | struct nx_csbcpb *csbcpb = (struct nx_csbcpb *)nx_ctx->csbcpb; |
1463 | - struct nx_sg *in_sg; |
1464 | struct nx_sg *out_sg; |
1465 | u64 to_process, leftover = 0, total; |
1466 | unsigned long irq_flags; |
1467 | @@ -97,7 +96,6 @@ static int nx_sha512_update(struct shash_desc *desc, const u8 *data, |
1468 | NX_CPB_FDM(csbcpb) |= NX_FDM_INTERMEDIATE; |
1469 | NX_CPB_FDM(csbcpb) |= NX_FDM_CONTINUATION; |
1470 | |
1471 | - in_sg = nx_ctx->in_sg; |
1472 | max_sg_len = min_t(u64, nx_ctx->ap->sglen, |
1473 | nx_driver.of.max_sg_len/sizeof(struct nx_sg)); |
1474 | max_sg_len = min_t(u64, max_sg_len, |
1475 | @@ -114,18 +112,12 @@ static int nx_sha512_update(struct shash_desc *desc, const u8 *data, |
1476 | } |
1477 | |
1478 | do { |
1479 | - /* |
1480 | - * to_process: the SHA512_BLOCK_SIZE data chunk to process in |
1481 | - * this update. This value is also restricted by the sg list |
1482 | - * limits. |
1483 | - */ |
1484 | - to_process = total - leftover; |
1485 | - to_process = to_process & ~(SHA512_BLOCK_SIZE - 1); |
1486 | - leftover = total - to_process; |
1487 | + int used_sgs = 0; |
1488 | + struct nx_sg *in_sg = nx_ctx->in_sg; |
1489 | |
1490 | if (buf_len) { |
1491 | data_len = buf_len; |
1492 | - in_sg = nx_build_sg_list(nx_ctx->in_sg, |
1493 | + in_sg = nx_build_sg_list(in_sg, |
1494 | (u8 *) sctx->buf, |
1495 | &data_len, max_sg_len); |
1496 | |
1497 | @@ -133,8 +125,20 @@ static int nx_sha512_update(struct shash_desc *desc, const u8 *data, |
1498 | rc = -EINVAL; |
1499 | goto out; |
1500 | } |
1501 | + used_sgs = in_sg - nx_ctx->in_sg; |
1502 | } |
1503 | |
1504 | + /* to_process: SHA512_BLOCK_SIZE aligned chunk to be |
1505 | + * processed in this iteration. This value is restricted |
1506 | + * by sg list limits and number of sgs we already used |
1507 | + * for leftover data. (see above) |
1508 | + * In ideal case, we could allow NX_PAGE_SIZE * max_sg_len, |
1509 | + * but because data may not be aligned, we need to account |
1510 | + * for that too. */ |
1511 | + to_process = min_t(u64, total, |
1512 | + (max_sg_len - 1 - used_sgs) * NX_PAGE_SIZE); |
1513 | + to_process = to_process & ~(SHA512_BLOCK_SIZE - 1); |
1514 | + |
1515 | data_len = to_process - buf_len; |
1516 | in_sg = nx_build_sg_list(in_sg, (u8 *) data, |
1517 | &data_len, max_sg_len); |
1518 | @@ -146,7 +150,7 @@ static int nx_sha512_update(struct shash_desc *desc, const u8 *data, |
1519 | goto out; |
1520 | } |
1521 | |
1522 | - to_process = (data_len + buf_len); |
1523 | + to_process = data_len + buf_len; |
1524 | leftover = total - to_process; |
1525 | |
1526 | /* |
1527 | diff --git a/drivers/edac/ppc4xx_edac.c b/drivers/edac/ppc4xx_edac.c |
1528 | index 3515b381c131..711d8ad74f11 100644 |
1529 | --- a/drivers/edac/ppc4xx_edac.c |
1530 | +++ b/drivers/edac/ppc4xx_edac.c |
1531 | @@ -920,7 +920,7 @@ static int ppc4xx_edac_init_csrows(struct mem_ctl_info *mci, u32 mcopt1) |
1532 | */ |
1533 | |
1534 | for (row = 0; row < mci->nr_csrows; row++) { |
1535 | - struct csrow_info *csi = &mci->csrows[row]; |
1536 | + struct csrow_info *csi = mci->csrows[row]; |
1537 | |
1538 | /* |
1539 | * Get the configuration settings for this |
1540 | diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c |
1541 | index 60b0c13d7ff5..aebc4595afa0 100644 |
1542 | --- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c |
1543 | +++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c |
1544 | @@ -559,7 +559,7 @@ static int atmel_hlcdc_dc_drm_remove(struct platform_device *pdev) |
1545 | return 0; |
1546 | } |
1547 | |
1548 | -#ifdef CONFIG_PM |
1549 | +#ifdef CONFIG_PM_SLEEP |
1550 | static int atmel_hlcdc_dc_drm_suspend(struct device *dev) |
1551 | { |
1552 | struct drm_device *drm_dev = dev_get_drvdata(dev); |
1553 | diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c |
1554 | index d714a4b5711e..b1fe32b119ef 100644 |
1555 | --- a/drivers/gpu/drm/i915/intel_dp.c |
1556 | +++ b/drivers/gpu/drm/i915/intel_dp.c |
1557 | @@ -1150,6 +1150,19 @@ intel_dp_sink_rates(struct intel_dp *intel_dp, const int **sink_rates) |
1558 | return (intel_dp_max_link_bw(intel_dp) >> 3) + 1; |
1559 | } |
1560 | |
1561 | +static bool intel_dp_source_supports_hbr2(struct drm_device *dev) |
1562 | +{ |
1563 | + /* WaDisableHBR2:skl */ |
1564 | + if (IS_SKYLAKE(dev) && INTEL_REVID(dev) <= SKL_REVID_B0) |
1565 | + return false; |
1566 | + |
1567 | + if ((IS_HASWELL(dev) && !IS_HSW_ULX(dev)) || IS_BROADWELL(dev) || |
1568 | + (INTEL_INFO(dev)->gen >= 9)) |
1569 | + return true; |
1570 | + else |
1571 | + return false; |
1572 | +} |
1573 | + |
1574 | static int |
1575 | intel_dp_source_rates(struct drm_device *dev, const int **source_rates) |
1576 | { |
1577 | @@ -1163,11 +1176,8 @@ intel_dp_source_rates(struct drm_device *dev, const int **source_rates) |
1578 | |
1579 | *source_rates = default_rates; |
1580 | |
1581 | - if (IS_SKYLAKE(dev) && INTEL_REVID(dev) <= SKL_REVID_B0) |
1582 | - /* WaDisableHBR2:skl */ |
1583 | - return (DP_LINK_BW_2_7 >> 3) + 1; |
1584 | - else if (INTEL_INFO(dev)->gen >= 8 || |
1585 | - (IS_HASWELL(dev) && !IS_HSW_ULX(dev))) |
1586 | + /* This depends on the fact that 5.4 is last value in the array */ |
1587 | + if (intel_dp_source_supports_hbr2(dev)) |
1588 | return (DP_LINK_BW_5_4 >> 3) + 1; |
1589 | else |
1590 | return (DP_LINK_BW_2_7 >> 3) + 1; |
1591 | @@ -3783,10 +3793,15 @@ intel_dp_get_dpcd(struct intel_dp *intel_dp) |
1592 | } |
1593 | } |
1594 | |
1595 | - /* Training Pattern 3 support, both source and sink */ |
1596 | + /* Training Pattern 3 support, Intel platforms that support HBR2 alone |
1597 | + * have support for TP3 hence that check is used along with dpcd check |
1598 | + * to ensure TP3 can be enabled. |
1599 | + * SKL < B0: due it's WaDisableHBR2 is the only exception where TP3 is |
1600 | + * supported but still not enabled. |
1601 | + */ |
1602 | if (intel_dp->dpcd[DP_DPCD_REV] >= 0x12 && |
1603 | intel_dp->dpcd[DP_MAX_LANE_COUNT] & DP_TPS3_SUPPORTED && |
1604 | - (IS_HASWELL(dev_priv) || INTEL_INFO(dev_priv)->gen >= 8)) { |
1605 | + intel_dp_source_supports_hbr2(dev)) { |
1606 | intel_dp->use_tps3 = true; |
1607 | DRM_DEBUG_KMS("Displayport TPS3 supported\n"); |
1608 | } else |
1609 | diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c |
1610 | index 424e62197787..9ab7c1c758ae 100644 |
1611 | --- a/drivers/gpu/drm/i915/intel_lrc.c |
1612 | +++ b/drivers/gpu/drm/i915/intel_lrc.c |
1613 | @@ -848,6 +848,8 @@ static int intel_lr_context_pin(struct intel_engine_cs *ring, |
1614 | ret = intel_pin_and_map_ringbuffer_obj(ring->dev, ringbuf); |
1615 | if (ret) |
1616 | goto unpin_ctx_obj; |
1617 | + |
1618 | + ctx_obj->dirty = true; |
1619 | } |
1620 | |
1621 | return ret; |
1622 | diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c b/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c |
1623 | index 654c8daeb5ab..97ad3bcb99a7 100644 |
1624 | --- a/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c |
1625 | +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c |
1626 | @@ -2492,7 +2492,7 @@ int vmw_execbuf_process(struct drm_file *file_priv, |
1627 | ret = ttm_eu_reserve_buffers(&ticket, &sw_context->validate_nodes, |
1628 | true, NULL); |
1629 | if (unlikely(ret != 0)) |
1630 | - goto out_err; |
1631 | + goto out_err_nores; |
1632 | |
1633 | ret = vmw_validate_buffers(dev_priv, sw_context); |
1634 | if (unlikely(ret != 0)) |
1635 | @@ -2536,6 +2536,7 @@ int vmw_execbuf_process(struct drm_file *file_priv, |
1636 | vmw_resource_relocations_free(&sw_context->res_relocations); |
1637 | |
1638 | vmw_fifo_commit(dev_priv, command_size); |
1639 | + mutex_unlock(&dev_priv->binding_mutex); |
1640 | |
1641 | vmw_query_bo_switch_commit(dev_priv, sw_context); |
1642 | ret = vmw_execbuf_fence_commands(file_priv, dev_priv, |
1643 | @@ -2551,7 +2552,6 @@ int vmw_execbuf_process(struct drm_file *file_priv, |
1644 | DRM_ERROR("Fence submission error. Syncing.\n"); |
1645 | |
1646 | vmw_resource_list_unreserve(&sw_context->resource_list, false); |
1647 | - mutex_unlock(&dev_priv->binding_mutex); |
1648 | |
1649 | ttm_eu_fence_buffer_objects(&ticket, &sw_context->validate_nodes, |
1650 | (void *) fence); |
1651 | diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c |
1652 | index 008e89bf6f3c..32d52d29cc68 100644 |
1653 | --- a/drivers/hid/hid-input.c |
1654 | +++ b/drivers/hid/hid-input.c |
1655 | @@ -462,12 +462,15 @@ out: |
1656 | |
1657 | static void hidinput_cleanup_battery(struct hid_device *dev) |
1658 | { |
1659 | + const struct power_supply_desc *psy_desc; |
1660 | + |
1661 | if (!dev->battery) |
1662 | return; |
1663 | |
1664 | + psy_desc = dev->battery->desc; |
1665 | power_supply_unregister(dev->battery); |
1666 | - kfree(dev->battery->desc->name); |
1667 | - kfree(dev->battery->desc); |
1668 | + kfree(psy_desc->name); |
1669 | + kfree(psy_desc); |
1670 | dev->battery = NULL; |
1671 | } |
1672 | #else /* !CONFIG_HID_BATTERY_STRENGTH */ |
1673 | diff --git a/drivers/hid/hid-uclogic.c b/drivers/hid/hid-uclogic.c |
1674 | index 94167310e15a..b905d501e752 100644 |
1675 | --- a/drivers/hid/hid-uclogic.c |
1676 | +++ b/drivers/hid/hid-uclogic.c |
1677 | @@ -858,7 +858,7 @@ static int uclogic_tablet_enable(struct hid_device *hdev) |
1678 | for (p = drvdata->rdesc; |
1679 | p <= drvdata->rdesc + drvdata->rsize - 4;) { |
1680 | if (p[0] == 0xFE && p[1] == 0xED && p[2] == 0x1D && |
1681 | - p[3] < sizeof(params)) { |
1682 | + p[3] < ARRAY_SIZE(params)) { |
1683 | v = params[p[3]]; |
1684 | put_unaligned(cpu_to_le32(v), (s32 *)p); |
1685 | p += 4; |
1686 | diff --git a/drivers/input/keyboard/gpio_keys_polled.c b/drivers/input/keyboard/gpio_keys_polled.c |
1687 | index 097d7216d98e..c6dc644aa580 100644 |
1688 | --- a/drivers/input/keyboard/gpio_keys_polled.c |
1689 | +++ b/drivers/input/keyboard/gpio_keys_polled.c |
1690 | @@ -246,7 +246,7 @@ static int gpio_keys_polled_probe(struct platform_device *pdev) |
1691 | * convert it to descriptor. |
1692 | */ |
1693 | if (!button->gpiod && gpio_is_valid(button->gpio)) { |
1694 | - unsigned flags = 0; |
1695 | + unsigned flags = GPIOF_IN; |
1696 | |
1697 | if (button->active_low) |
1698 | flags |= GPIOF_ACTIVE_LOW; |
1699 | diff --git a/drivers/irqchip/irq-crossbar.c b/drivers/irqchip/irq-crossbar.c |
1700 | index 692fe2bc8197..c12bb93334ff 100644 |
1701 | --- a/drivers/irqchip/irq-crossbar.c |
1702 | +++ b/drivers/irqchip/irq-crossbar.c |
1703 | @@ -68,7 +68,9 @@ static struct irq_chip crossbar_chip = { |
1704 | .irq_mask = irq_chip_mask_parent, |
1705 | .irq_unmask = irq_chip_unmask_parent, |
1706 | .irq_retrigger = irq_chip_retrigger_hierarchy, |
1707 | - .irq_set_wake = irq_chip_set_wake_parent, |
1708 | + .irq_set_type = irq_chip_set_type_parent, |
1709 | + .flags = IRQCHIP_MASK_ON_SUSPEND | |
1710 | + IRQCHIP_SKIP_SET_WAKE, |
1711 | #ifdef CONFIG_SMP |
1712 | .irq_set_affinity = irq_chip_set_affinity_parent, |
1713 | #endif |
1714 | diff --git a/drivers/md/dm-thin-metadata.c b/drivers/md/dm-thin-metadata.c |
1715 | index 79f694120ddf..cde1d6749017 100644 |
1716 | --- a/drivers/md/dm-thin-metadata.c |
1717 | +++ b/drivers/md/dm-thin-metadata.c |
1718 | @@ -1295,8 +1295,8 @@ static int __release_metadata_snap(struct dm_pool_metadata *pmd) |
1719 | return r; |
1720 | |
1721 | disk_super = dm_block_data(copy); |
1722 | - dm_sm_dec_block(pmd->metadata_sm, le64_to_cpu(disk_super->data_mapping_root)); |
1723 | - dm_sm_dec_block(pmd->metadata_sm, le64_to_cpu(disk_super->device_details_root)); |
1724 | + dm_btree_del(&pmd->info, le64_to_cpu(disk_super->data_mapping_root)); |
1725 | + dm_btree_del(&pmd->details_info, le64_to_cpu(disk_super->device_details_root)); |
1726 | dm_sm_dec_block(pmd->metadata_sm, held_root); |
1727 | |
1728 | return dm_tm_unlock(pmd->tm, copy); |
1729 | diff --git a/drivers/mfd/arizona-core.c b/drivers/mfd/arizona-core.c |
1730 | index 6ca6dfab50eb..6523903e15fe 100644 |
1731 | --- a/drivers/mfd/arizona-core.c |
1732 | +++ b/drivers/mfd/arizona-core.c |
1733 | @@ -912,10 +912,6 @@ int arizona_dev_init(struct arizona *arizona) |
1734 | arizona->pdata.gpio_defaults[i]); |
1735 | } |
1736 | |
1737 | - pm_runtime_set_autosuspend_delay(arizona->dev, 100); |
1738 | - pm_runtime_use_autosuspend(arizona->dev); |
1739 | - pm_runtime_enable(arizona->dev); |
1740 | - |
1741 | /* Chip default */ |
1742 | if (!arizona->pdata.clk32k_src) |
1743 | arizona->pdata.clk32k_src = ARIZONA_32KZ_MCLK2; |
1744 | @@ -1012,11 +1008,17 @@ int arizona_dev_init(struct arizona *arizona) |
1745 | arizona->pdata.spk_fmt[i]); |
1746 | } |
1747 | |
1748 | + pm_runtime_set_active(arizona->dev); |
1749 | + pm_runtime_enable(arizona->dev); |
1750 | + |
1751 | /* Set up for interrupts */ |
1752 | ret = arizona_irq_init(arizona); |
1753 | if (ret != 0) |
1754 | goto err_reset; |
1755 | |
1756 | + pm_runtime_set_autosuspend_delay(arizona->dev, 100); |
1757 | + pm_runtime_use_autosuspend(arizona->dev); |
1758 | + |
1759 | arizona_request_irq(arizona, ARIZONA_IRQ_CLKGEN_ERR, "CLKGEN error", |
1760 | arizona_clkgen_err, arizona); |
1761 | arizona_request_irq(arizona, ARIZONA_IRQ_OVERCLOCKED, "Overclocked", |
1762 | @@ -1045,10 +1047,6 @@ int arizona_dev_init(struct arizona *arizona) |
1763 | goto err_irq; |
1764 | } |
1765 | |
1766 | -#ifdef CONFIG_PM |
1767 | - regulator_disable(arizona->dcvdd); |
1768 | -#endif |
1769 | - |
1770 | return 0; |
1771 | |
1772 | err_irq: |
1773 | diff --git a/drivers/net/can/usb/peak_usb/pcan_usb.c b/drivers/net/can/usb/peak_usb/pcan_usb.c |
1774 | index 72427f21edff..edfec540c893 100644 |
1775 | --- a/drivers/net/can/usb/peak_usb/pcan_usb.c |
1776 | +++ b/drivers/net/can/usb/peak_usb/pcan_usb.c |
1777 | @@ -855,6 +855,18 @@ static int pcan_usb_probe(struct usb_interface *intf) |
1778 | /* |
1779 | * describe the PCAN-USB adapter |
1780 | */ |
1781 | +static const struct can_bittiming_const pcan_usb_const = { |
1782 | + .name = "pcan_usb", |
1783 | + .tseg1_min = 1, |
1784 | + .tseg1_max = 16, |
1785 | + .tseg2_min = 1, |
1786 | + .tseg2_max = 8, |
1787 | + .sjw_max = 4, |
1788 | + .brp_min = 1, |
1789 | + .brp_max = 64, |
1790 | + .brp_inc = 1, |
1791 | +}; |
1792 | + |
1793 | const struct peak_usb_adapter pcan_usb = { |
1794 | .name = "PCAN-USB", |
1795 | .device_id = PCAN_USB_PRODUCT_ID, |
1796 | @@ -863,17 +875,7 @@ const struct peak_usb_adapter pcan_usb = { |
1797 | .clock = { |
1798 | .freq = PCAN_USB_CRYSTAL_HZ / 2 , |
1799 | }, |
1800 | - .bittiming_const = { |
1801 | - .name = "pcan_usb", |
1802 | - .tseg1_min = 1, |
1803 | - .tseg1_max = 16, |
1804 | - .tseg2_min = 1, |
1805 | - .tseg2_max = 8, |
1806 | - .sjw_max = 4, |
1807 | - .brp_min = 1, |
1808 | - .brp_max = 64, |
1809 | - .brp_inc = 1, |
1810 | - }, |
1811 | + .bittiming_const = &pcan_usb_const, |
1812 | |
1813 | /* size of device private data */ |
1814 | .sizeof_dev_private = sizeof(struct pcan_usb), |
1815 | diff --git a/drivers/net/can/usb/peak_usb/pcan_usb_core.c b/drivers/net/can/usb/peak_usb/pcan_usb_core.c |
1816 | index 7921cff93a63..5a2e341a6d1e 100644 |
1817 | --- a/drivers/net/can/usb/peak_usb/pcan_usb_core.c |
1818 | +++ b/drivers/net/can/usb/peak_usb/pcan_usb_core.c |
1819 | @@ -792,9 +792,9 @@ static int peak_usb_create_dev(const struct peak_usb_adapter *peak_usb_adapter, |
1820 | dev->ep_msg_out = peak_usb_adapter->ep_msg_out[ctrl_idx]; |
1821 | |
1822 | dev->can.clock = peak_usb_adapter->clock; |
1823 | - dev->can.bittiming_const = &peak_usb_adapter->bittiming_const; |
1824 | + dev->can.bittiming_const = peak_usb_adapter->bittiming_const; |
1825 | dev->can.do_set_bittiming = peak_usb_set_bittiming; |
1826 | - dev->can.data_bittiming_const = &peak_usb_adapter->data_bittiming_const; |
1827 | + dev->can.data_bittiming_const = peak_usb_adapter->data_bittiming_const; |
1828 | dev->can.do_set_data_bittiming = peak_usb_set_data_bittiming; |
1829 | dev->can.do_set_mode = peak_usb_set_mode; |
1830 | dev->can.do_get_berr_counter = peak_usb_adapter->do_get_berr_counter; |
1831 | diff --git a/drivers/net/can/usb/peak_usb/pcan_usb_core.h b/drivers/net/can/usb/peak_usb/pcan_usb_core.h |
1832 | index 9e624f05ad4d..506fe506c9d3 100644 |
1833 | --- a/drivers/net/can/usb/peak_usb/pcan_usb_core.h |
1834 | +++ b/drivers/net/can/usb/peak_usb/pcan_usb_core.h |
1835 | @@ -48,8 +48,8 @@ struct peak_usb_adapter { |
1836 | u32 device_id; |
1837 | u32 ctrlmode_supported; |
1838 | struct can_clock clock; |
1839 | - const struct can_bittiming_const bittiming_const; |
1840 | - const struct can_bittiming_const data_bittiming_const; |
1841 | + const struct can_bittiming_const * const bittiming_const; |
1842 | + const struct can_bittiming_const * const data_bittiming_const; |
1843 | unsigned int ctrl_count; |
1844 | |
1845 | int (*intf_probe)(struct usb_interface *intf); |
1846 | diff --git a/drivers/net/can/usb/peak_usb/pcan_usb_fd.c b/drivers/net/can/usb/peak_usb/pcan_usb_fd.c |
1847 | index 09d14e70abd7..ce44a033f63b 100644 |
1848 | --- a/drivers/net/can/usb/peak_usb/pcan_usb_fd.c |
1849 | +++ b/drivers/net/can/usb/peak_usb/pcan_usb_fd.c |
1850 | @@ -990,6 +990,30 @@ static void pcan_usb_fd_free(struct peak_usb_device *dev) |
1851 | } |
1852 | |
1853 | /* describes the PCAN-USB FD adapter */ |
1854 | +static const struct can_bittiming_const pcan_usb_fd_const = { |
1855 | + .name = "pcan_usb_fd", |
1856 | + .tseg1_min = 1, |
1857 | + .tseg1_max = 64, |
1858 | + .tseg2_min = 1, |
1859 | + .tseg2_max = 16, |
1860 | + .sjw_max = 16, |
1861 | + .brp_min = 1, |
1862 | + .brp_max = 1024, |
1863 | + .brp_inc = 1, |
1864 | +}; |
1865 | + |
1866 | +static const struct can_bittiming_const pcan_usb_fd_data_const = { |
1867 | + .name = "pcan_usb_fd", |
1868 | + .tseg1_min = 1, |
1869 | + .tseg1_max = 16, |
1870 | + .tseg2_min = 1, |
1871 | + .tseg2_max = 8, |
1872 | + .sjw_max = 4, |
1873 | + .brp_min = 1, |
1874 | + .brp_max = 1024, |
1875 | + .brp_inc = 1, |
1876 | +}; |
1877 | + |
1878 | const struct peak_usb_adapter pcan_usb_fd = { |
1879 | .name = "PCAN-USB FD", |
1880 | .device_id = PCAN_USBFD_PRODUCT_ID, |
1881 | @@ -999,28 +1023,8 @@ const struct peak_usb_adapter pcan_usb_fd = { |
1882 | .clock = { |
1883 | .freq = PCAN_UFD_CRYSTAL_HZ, |
1884 | }, |
1885 | - .bittiming_const = { |
1886 | - .name = "pcan_usb_fd", |
1887 | - .tseg1_min = 1, |
1888 | - .tseg1_max = 64, |
1889 | - .tseg2_min = 1, |
1890 | - .tseg2_max = 16, |
1891 | - .sjw_max = 16, |
1892 | - .brp_min = 1, |
1893 | - .brp_max = 1024, |
1894 | - .brp_inc = 1, |
1895 | - }, |
1896 | - .data_bittiming_const = { |
1897 | - .name = "pcan_usb_fd", |
1898 | - .tseg1_min = 1, |
1899 | - .tseg1_max = 16, |
1900 | - .tseg2_min = 1, |
1901 | - .tseg2_max = 8, |
1902 | - .sjw_max = 4, |
1903 | - .brp_min = 1, |
1904 | - .brp_max = 1024, |
1905 | - .brp_inc = 1, |
1906 | - }, |
1907 | + .bittiming_const = &pcan_usb_fd_const, |
1908 | + .data_bittiming_const = &pcan_usb_fd_data_const, |
1909 | |
1910 | /* size of device private data */ |
1911 | .sizeof_dev_private = sizeof(struct pcan_usb_fd_device), |
1912 | @@ -1058,6 +1062,30 @@ const struct peak_usb_adapter pcan_usb_fd = { |
1913 | }; |
1914 | |
1915 | /* describes the PCAN-USB Pro FD adapter */ |
1916 | +static const struct can_bittiming_const pcan_usb_pro_fd_const = { |
1917 | + .name = "pcan_usb_pro_fd", |
1918 | + .tseg1_min = 1, |
1919 | + .tseg1_max = 64, |
1920 | + .tseg2_min = 1, |
1921 | + .tseg2_max = 16, |
1922 | + .sjw_max = 16, |
1923 | + .brp_min = 1, |
1924 | + .brp_max = 1024, |
1925 | + .brp_inc = 1, |
1926 | +}; |
1927 | + |
1928 | +static const struct can_bittiming_const pcan_usb_pro_fd_data_const = { |
1929 | + .name = "pcan_usb_pro_fd", |
1930 | + .tseg1_min = 1, |
1931 | + .tseg1_max = 16, |
1932 | + .tseg2_min = 1, |
1933 | + .tseg2_max = 8, |
1934 | + .sjw_max = 4, |
1935 | + .brp_min = 1, |
1936 | + .brp_max = 1024, |
1937 | + .brp_inc = 1, |
1938 | +}; |
1939 | + |
1940 | const struct peak_usb_adapter pcan_usb_pro_fd = { |
1941 | .name = "PCAN-USB Pro FD", |
1942 | .device_id = PCAN_USBPROFD_PRODUCT_ID, |
1943 | @@ -1067,28 +1095,8 @@ const struct peak_usb_adapter pcan_usb_pro_fd = { |
1944 | .clock = { |
1945 | .freq = PCAN_UFD_CRYSTAL_HZ, |
1946 | }, |
1947 | - .bittiming_const = { |
1948 | - .name = "pcan_usb_pro_fd", |
1949 | - .tseg1_min = 1, |
1950 | - .tseg1_max = 64, |
1951 | - .tseg2_min = 1, |
1952 | - .tseg2_max = 16, |
1953 | - .sjw_max = 16, |
1954 | - .brp_min = 1, |
1955 | - .brp_max = 1024, |
1956 | - .brp_inc = 1, |
1957 | - }, |
1958 | - .data_bittiming_const = { |
1959 | - .name = "pcan_usb_pro_fd", |
1960 | - .tseg1_min = 1, |
1961 | - .tseg1_max = 16, |
1962 | - .tseg2_min = 1, |
1963 | - .tseg2_max = 8, |
1964 | - .sjw_max = 4, |
1965 | - .brp_min = 1, |
1966 | - .brp_max = 1024, |
1967 | - .brp_inc = 1, |
1968 | - }, |
1969 | + .bittiming_const = &pcan_usb_pro_fd_const, |
1970 | + .data_bittiming_const = &pcan_usb_pro_fd_data_const, |
1971 | |
1972 | /* size of device private data */ |
1973 | .sizeof_dev_private = sizeof(struct pcan_usb_fd_device), |
1974 | diff --git a/drivers/net/can/usb/peak_usb/pcan_usb_pro.c b/drivers/net/can/usb/peak_usb/pcan_usb_pro.c |
1975 | index dec51717635e..a5ad2e6aa73a 100644 |
1976 | --- a/drivers/net/can/usb/peak_usb/pcan_usb_pro.c |
1977 | +++ b/drivers/net/can/usb/peak_usb/pcan_usb_pro.c |
1978 | @@ -1004,6 +1004,18 @@ int pcan_usb_pro_probe(struct usb_interface *intf) |
1979 | /* |
1980 | * describe the PCAN-USB Pro adapter |
1981 | */ |
1982 | +static const struct can_bittiming_const pcan_usb_pro_const = { |
1983 | + .name = "pcan_usb_pro", |
1984 | + .tseg1_min = 1, |
1985 | + .tseg1_max = 16, |
1986 | + .tseg2_min = 1, |
1987 | + .tseg2_max = 8, |
1988 | + .sjw_max = 4, |
1989 | + .brp_min = 1, |
1990 | + .brp_max = 1024, |
1991 | + .brp_inc = 1, |
1992 | +}; |
1993 | + |
1994 | const struct peak_usb_adapter pcan_usb_pro = { |
1995 | .name = "PCAN-USB Pro", |
1996 | .device_id = PCAN_USBPRO_PRODUCT_ID, |
1997 | @@ -1012,17 +1024,7 @@ const struct peak_usb_adapter pcan_usb_pro = { |
1998 | .clock = { |
1999 | .freq = PCAN_USBPRO_CRYSTAL_HZ, |
2000 | }, |
2001 | - .bittiming_const = { |
2002 | - .name = "pcan_usb_pro", |
2003 | - .tseg1_min = 1, |
2004 | - .tseg1_max = 16, |
2005 | - .tseg2_min = 1, |
2006 | - .tseg2_max = 8, |
2007 | - .sjw_max = 4, |
2008 | - .brp_min = 1, |
2009 | - .brp_max = 1024, |
2010 | - .brp_inc = 1, |
2011 | - }, |
2012 | + .bittiming_const = &pcan_usb_pro_const, |
2013 | |
2014 | /* size of device private data */ |
2015 | .sizeof_dev_private = sizeof(struct pcan_usb_pro_device), |
2016 | diff --git a/drivers/net/wireless/iwlwifi/pcie/trans.c b/drivers/net/wireless/iwlwifi/pcie/trans.c |
2017 | index 37e6a6f91487..699a4802835f 100644 |
2018 | --- a/drivers/net/wireless/iwlwifi/pcie/trans.c |
2019 | +++ b/drivers/net/wireless/iwlwifi/pcie/trans.c |
2020 | @@ -457,10 +457,16 @@ static void iwl_pcie_apm_stop(struct iwl_trans *trans, bool op_mode_leave) |
2021 | if (trans->cfg->device_family == IWL_DEVICE_FAMILY_7000) |
2022 | iwl_set_bits_prph(trans, APMG_PCIDEV_STT_REG, |
2023 | APMG_PCIDEV_STT_VAL_WAKE_ME); |
2024 | - else if (trans->cfg->device_family == IWL_DEVICE_FAMILY_8000) |
2025 | + else if (trans->cfg->device_family == IWL_DEVICE_FAMILY_8000) { |
2026 | + iwl_set_bit(trans, CSR_DBG_LINK_PWR_MGMT_REG, |
2027 | + CSR_RESET_LINK_PWR_MGMT_DISABLED); |
2028 | iwl_set_bit(trans, CSR_HW_IF_CONFIG_REG, |
2029 | CSR_HW_IF_CONFIG_REG_PREPARE | |
2030 | CSR_HW_IF_CONFIG_REG_ENABLE_PME); |
2031 | + mdelay(1); |
2032 | + iwl_clear_bit(trans, CSR_DBG_LINK_PWR_MGMT_REG, |
2033 | + CSR_RESET_LINK_PWR_MGMT_DISABLED); |
2034 | + } |
2035 | mdelay(5); |
2036 | } |
2037 | |
2038 | @@ -555,6 +561,10 @@ static int iwl_pcie_prepare_card_hw(struct iwl_trans *trans) |
2039 | if (ret >= 0) |
2040 | return 0; |
2041 | |
2042 | + iwl_set_bit(trans, CSR_DBG_LINK_PWR_MGMT_REG, |
2043 | + CSR_RESET_LINK_PWR_MGMT_DISABLED); |
2044 | + msleep(1); |
2045 | + |
2046 | for (iter = 0; iter < 10; iter++) { |
2047 | /* If HW is not ready, prepare the conditions to check again */ |
2048 | iwl_set_bit(trans, CSR_HW_IF_CONFIG_REG, |
2049 | @@ -562,8 +572,10 @@ static int iwl_pcie_prepare_card_hw(struct iwl_trans *trans) |
2050 | |
2051 | do { |
2052 | ret = iwl_pcie_set_hw_ready(trans); |
2053 | - if (ret >= 0) |
2054 | - return 0; |
2055 | + if (ret >= 0) { |
2056 | + ret = 0; |
2057 | + goto out; |
2058 | + } |
2059 | |
2060 | usleep_range(200, 1000); |
2061 | t += 200; |
2062 | @@ -573,6 +585,10 @@ static int iwl_pcie_prepare_card_hw(struct iwl_trans *trans) |
2063 | |
2064 | IWL_ERR(trans, "Couldn't prepare the card\n"); |
2065 | |
2066 | +out: |
2067 | + iwl_clear_bit(trans, CSR_DBG_LINK_PWR_MGMT_REG, |
2068 | + CSR_RESET_LINK_PWR_MGMT_DISABLED); |
2069 | + |
2070 | return ret; |
2071 | } |
2072 | |
2073 | diff --git a/drivers/net/wireless/rsi/rsi_91x_sdio_ops.c b/drivers/net/wireless/rsi/rsi_91x_sdio_ops.c |
2074 | index b6cc9ff47fc2..1c6788aecc62 100644 |
2075 | --- a/drivers/net/wireless/rsi/rsi_91x_sdio_ops.c |
2076 | +++ b/drivers/net/wireless/rsi/rsi_91x_sdio_ops.c |
2077 | @@ -172,6 +172,7 @@ static int rsi_load_ta_instructions(struct rsi_common *common) |
2078 | (struct rsi_91x_sdiodev *)adapter->rsi_dev; |
2079 | u32 len; |
2080 | u32 num_blocks; |
2081 | + const u8 *fw; |
2082 | const struct firmware *fw_entry = NULL; |
2083 | u32 block_size = dev->tx_blk_size; |
2084 | int status = 0; |
2085 | @@ -200,6 +201,10 @@ static int rsi_load_ta_instructions(struct rsi_common *common) |
2086 | return status; |
2087 | } |
2088 | |
2089 | + /* Copy firmware into DMA-accessible memory */ |
2090 | + fw = kmemdup(fw_entry->data, fw_entry->size, GFP_KERNEL); |
2091 | + if (!fw) |
2092 | + return -ENOMEM; |
2093 | len = fw_entry->size; |
2094 | |
2095 | if (len % 4) |
2096 | @@ -210,7 +215,8 @@ static int rsi_load_ta_instructions(struct rsi_common *common) |
2097 | rsi_dbg(INIT_ZONE, "%s: Instruction size:%d\n", __func__, len); |
2098 | rsi_dbg(INIT_ZONE, "%s: num blocks: %d\n", __func__, num_blocks); |
2099 | |
2100 | - status = rsi_copy_to_card(common, fw_entry->data, len, num_blocks); |
2101 | + status = rsi_copy_to_card(common, fw, len, num_blocks); |
2102 | + kfree(fw); |
2103 | release_firmware(fw_entry); |
2104 | return status; |
2105 | } |
2106 | diff --git a/drivers/net/wireless/rsi/rsi_91x_usb_ops.c b/drivers/net/wireless/rsi/rsi_91x_usb_ops.c |
2107 | index 1106ce76707e..30c2cf7fa93b 100644 |
2108 | --- a/drivers/net/wireless/rsi/rsi_91x_usb_ops.c |
2109 | +++ b/drivers/net/wireless/rsi/rsi_91x_usb_ops.c |
2110 | @@ -146,7 +146,10 @@ static int rsi_load_ta_instructions(struct rsi_common *common) |
2111 | return status; |
2112 | } |
2113 | |
2114 | + /* Copy firmware into DMA-accessible memory */ |
2115 | fw = kmemdup(fw_entry->data, fw_entry->size, GFP_KERNEL); |
2116 | + if (!fw) |
2117 | + return -ENOMEM; |
2118 | len = fw_entry->size; |
2119 | |
2120 | if (len % 4) |
2121 | @@ -158,6 +161,7 @@ static int rsi_load_ta_instructions(struct rsi_common *common) |
2122 | rsi_dbg(INIT_ZONE, "%s: num blocks: %d\n", __func__, num_blocks); |
2123 | |
2124 | status = rsi_copy_to_card(common, fw, len, num_blocks); |
2125 | + kfree(fw); |
2126 | release_firmware(fw_entry); |
2127 | return status; |
2128 | } |
2129 | diff --git a/drivers/net/wireless/rtlwifi/core.c b/drivers/net/wireless/rtlwifi/core.c |
2130 | index 3b3a88b53b11..585d0883c7e5 100644 |
2131 | --- a/drivers/net/wireless/rtlwifi/core.c |
2132 | +++ b/drivers/net/wireless/rtlwifi/core.c |
2133 | @@ -1015,9 +1015,12 @@ static void send_beacon_frame(struct ieee80211_hw *hw, |
2134 | { |
2135 | struct rtl_priv *rtlpriv = rtl_priv(hw); |
2136 | struct sk_buff *skb = ieee80211_beacon_get(hw, vif); |
2137 | + struct rtl_tcb_desc tcb_desc; |
2138 | |
2139 | - if (skb) |
2140 | - rtlpriv->intf_ops->adapter_tx(hw, NULL, skb, NULL); |
2141 | + if (skb) { |
2142 | + memset(&tcb_desc, 0, sizeof(struct rtl_tcb_desc)); |
2143 | + rtlpriv->intf_ops->adapter_tx(hw, NULL, skb, &tcb_desc); |
2144 | + } |
2145 | } |
2146 | |
2147 | static void rtl_op_bss_info_changed(struct ieee80211_hw *hw, |
2148 | diff --git a/drivers/net/wireless/rtlwifi/rtl8723be/sw.c b/drivers/net/wireless/rtlwifi/rtl8723be/sw.c |
2149 | index 1017f02d7bf7..7bf88d9dcdc3 100644 |
2150 | --- a/drivers/net/wireless/rtlwifi/rtl8723be/sw.c |
2151 | +++ b/drivers/net/wireless/rtlwifi/rtl8723be/sw.c |
2152 | @@ -385,6 +385,7 @@ module_param_named(debug, rtl8723be_mod_params.debug, int, 0444); |
2153 | module_param_named(ips, rtl8723be_mod_params.inactiveps, bool, 0444); |
2154 | module_param_named(swlps, rtl8723be_mod_params.swctrl_lps, bool, 0444); |
2155 | module_param_named(fwlps, rtl8723be_mod_params.fwctrl_lps, bool, 0444); |
2156 | +module_param_named(msi, rtl8723be_mod_params.msi_support, bool, 0444); |
2157 | module_param_named(disable_watchdog, rtl8723be_mod_params.disable_watchdog, |
2158 | bool, 0444); |
2159 | MODULE_PARM_DESC(swenc, "Set to 1 for software crypto (default 0)\n"); |
2160 | diff --git a/drivers/pci/Kconfig b/drivers/pci/Kconfig |
2161 | index 73de4efcbe6e..944f50015ed0 100644 |
2162 | --- a/drivers/pci/Kconfig |
2163 | +++ b/drivers/pci/Kconfig |
2164 | @@ -2,7 +2,7 @@ |
2165 | # PCI configuration |
2166 | # |
2167 | config PCI_BUS_ADDR_T_64BIT |
2168 | - def_bool y if (ARCH_DMA_ADDR_T_64BIT || 64BIT) |
2169 | + def_bool y if (ARCH_DMA_ADDR_T_64BIT || (64BIT && !PARISC)) |
2170 | depends on PCI |
2171 | |
2172 | config PCI_MSI |
2173 | diff --git a/drivers/scsi/fnic/fnic.h b/drivers/scsi/fnic/fnic.h |
2174 | index 26270c351624..ce129e595b55 100644 |
2175 | --- a/drivers/scsi/fnic/fnic.h |
2176 | +++ b/drivers/scsi/fnic/fnic.h |
2177 | @@ -39,7 +39,7 @@ |
2178 | |
2179 | #define DRV_NAME "fnic" |
2180 | #define DRV_DESCRIPTION "Cisco FCoE HBA Driver" |
2181 | -#define DRV_VERSION "1.6.0.17" |
2182 | +#define DRV_VERSION "1.6.0.17a" |
2183 | #define PFX DRV_NAME ": " |
2184 | #define DFX DRV_NAME "%d: " |
2185 | |
2186 | diff --git a/drivers/scsi/fnic/fnic_scsi.c b/drivers/scsi/fnic/fnic_scsi.c |
2187 | index 155b286f1a9d..25436cd2860c 100644 |
2188 | --- a/drivers/scsi/fnic/fnic_scsi.c |
2189 | +++ b/drivers/scsi/fnic/fnic_scsi.c |
2190 | @@ -425,6 +425,7 @@ static int fnic_queuecommand_lck(struct scsi_cmnd *sc, void (*done)(struct scsi_ |
2191 | unsigned long ptr; |
2192 | struct fc_rport_priv *rdata; |
2193 | spinlock_t *io_lock = NULL; |
2194 | + int io_lock_acquired = 0; |
2195 | |
2196 | if (unlikely(fnic_chk_state_flags_locked(fnic, FNIC_FLAGS_IO_BLOCKED))) |
2197 | return SCSI_MLQUEUE_HOST_BUSY; |
2198 | @@ -518,6 +519,7 @@ static int fnic_queuecommand_lck(struct scsi_cmnd *sc, void (*done)(struct scsi_ |
2199 | spin_lock_irqsave(io_lock, flags); |
2200 | |
2201 | /* initialize rest of io_req */ |
2202 | + io_lock_acquired = 1; |
2203 | io_req->port_id = rport->port_id; |
2204 | io_req->start_time = jiffies; |
2205 | CMD_STATE(sc) = FNIC_IOREQ_CMD_PENDING; |
2206 | @@ -571,7 +573,7 @@ out: |
2207 | (((u64)CMD_FLAGS(sc) >> 32) | CMD_STATE(sc))); |
2208 | |
2209 | /* if only we issued IO, will we have the io lock */ |
2210 | - if (CMD_FLAGS(sc) & FNIC_IO_INITIALIZED) |
2211 | + if (io_lock_acquired) |
2212 | spin_unlock_irqrestore(io_lock, flags); |
2213 | |
2214 | atomic_dec(&fnic->in_flight); |
2215 | diff --git a/drivers/scsi/libfc/fc_exch.c b/drivers/scsi/libfc/fc_exch.c |
2216 | index 1b3a09473452..30f9ef0c0d4f 100644 |
2217 | --- a/drivers/scsi/libfc/fc_exch.c |
2218 | +++ b/drivers/scsi/libfc/fc_exch.c |
2219 | @@ -733,8 +733,6 @@ static bool fc_invoke_resp(struct fc_exch *ep, struct fc_seq *sp, |
2220 | if (resp) { |
2221 | resp(sp, fp, arg); |
2222 | res = true; |
2223 | - } else if (!IS_ERR(fp)) { |
2224 | - fc_frame_free(fp); |
2225 | } |
2226 | |
2227 | spin_lock_bh(&ep->ex_lock); |
2228 | @@ -1596,7 +1594,8 @@ static void fc_exch_recv_seq_resp(struct fc_exch_mgr *mp, struct fc_frame *fp) |
2229 | * If new exch resp handler is valid then call that |
2230 | * first. |
2231 | */ |
2232 | - fc_invoke_resp(ep, sp, fp); |
2233 | + if (!fc_invoke_resp(ep, sp, fp)) |
2234 | + fc_frame_free(fp); |
2235 | |
2236 | fc_exch_release(ep); |
2237 | return; |
2238 | @@ -1695,7 +1694,8 @@ static void fc_exch_abts_resp(struct fc_exch *ep, struct fc_frame *fp) |
2239 | fc_exch_hold(ep); |
2240 | if (!rc) |
2241 | fc_exch_delete(ep); |
2242 | - fc_invoke_resp(ep, sp, fp); |
2243 | + if (!fc_invoke_resp(ep, sp, fp)) |
2244 | + fc_frame_free(fp); |
2245 | if (has_rec) |
2246 | fc_exch_timer_set(ep, ep->r_a_tov); |
2247 | fc_exch_release(ep); |
2248 | diff --git a/drivers/scsi/libfc/fc_fcp.c b/drivers/scsi/libfc/fc_fcp.c |
2249 | index c6795941b45d..2d5909c4685c 100644 |
2250 | --- a/drivers/scsi/libfc/fc_fcp.c |
2251 | +++ b/drivers/scsi/libfc/fc_fcp.c |
2252 | @@ -1039,11 +1039,26 @@ restart: |
2253 | fc_fcp_pkt_hold(fsp); |
2254 | spin_unlock_irqrestore(&si->scsi_queue_lock, flags); |
2255 | |
2256 | - if (!fc_fcp_lock_pkt(fsp)) { |
2257 | + spin_lock_bh(&fsp->scsi_pkt_lock); |
2258 | + if (!(fsp->state & FC_SRB_COMPL)) { |
2259 | + fsp->state |= FC_SRB_COMPL; |
2260 | + /* |
2261 | + * TODO: dropping scsi_pkt_lock and then reacquiring |
2262 | + * again around fc_fcp_cleanup_cmd() is required, |
2263 | + * since fc_fcp_cleanup_cmd() calls into |
2264 | + * fc_seq_set_resp() and that func preempts cpu using |
2265 | + * schedule. May be schedule and related code should be |
2266 | + * removed instead of unlocking here to avoid scheduling |
2267 | + * while atomic bug. |
2268 | + */ |
2269 | + spin_unlock_bh(&fsp->scsi_pkt_lock); |
2270 | + |
2271 | fc_fcp_cleanup_cmd(fsp, error); |
2272 | + |
2273 | + spin_lock_bh(&fsp->scsi_pkt_lock); |
2274 | fc_io_compl(fsp); |
2275 | - fc_fcp_unlock_pkt(fsp); |
2276 | } |
2277 | + spin_unlock_bh(&fsp->scsi_pkt_lock); |
2278 | |
2279 | fc_fcp_pkt_release(fsp); |
2280 | spin_lock_irqsave(&si->scsi_queue_lock, flags); |
2281 | diff --git a/drivers/scsi/libiscsi.c b/drivers/scsi/libiscsi.c |
2282 | index 8053f24f0349..98d9bb6ff725 100644 |
2283 | --- a/drivers/scsi/libiscsi.c |
2284 | +++ b/drivers/scsi/libiscsi.c |
2285 | @@ -2941,10 +2941,10 @@ void iscsi_conn_teardown(struct iscsi_cls_conn *cls_conn) |
2286 | { |
2287 | struct iscsi_conn *conn = cls_conn->dd_data; |
2288 | struct iscsi_session *session = conn->session; |
2289 | - unsigned long flags; |
2290 | |
2291 | del_timer_sync(&conn->transport_timer); |
2292 | |
2293 | + mutex_lock(&session->eh_mutex); |
2294 | spin_lock_bh(&session->frwd_lock); |
2295 | conn->c_stage = ISCSI_CONN_CLEANUP_WAIT; |
2296 | if (session->leadconn == conn) { |
2297 | @@ -2956,28 +2956,6 @@ void iscsi_conn_teardown(struct iscsi_cls_conn *cls_conn) |
2298 | } |
2299 | spin_unlock_bh(&session->frwd_lock); |
2300 | |
2301 | - /* |
2302 | - * Block until all in-progress commands for this connection |
2303 | - * time out or fail. |
2304 | - */ |
2305 | - for (;;) { |
2306 | - spin_lock_irqsave(session->host->host_lock, flags); |
2307 | - if (!atomic_read(&session->host->host_busy)) { /* OK for ERL == 0 */ |
2308 | - spin_unlock_irqrestore(session->host->host_lock, flags); |
2309 | - break; |
2310 | - } |
2311 | - spin_unlock_irqrestore(session->host->host_lock, flags); |
2312 | - msleep_interruptible(500); |
2313 | - iscsi_conn_printk(KERN_INFO, conn, "iscsi conn_destroy(): " |
2314 | - "host_busy %d host_failed %d\n", |
2315 | - atomic_read(&session->host->host_busy), |
2316 | - session->host->host_failed); |
2317 | - /* |
2318 | - * force eh_abort() to unblock |
2319 | - */ |
2320 | - wake_up(&conn->ehwait); |
2321 | - } |
2322 | - |
2323 | /* flush queued up work because we free the connection below */ |
2324 | iscsi_suspend_tx(conn); |
2325 | |
2326 | @@ -2994,6 +2972,7 @@ void iscsi_conn_teardown(struct iscsi_cls_conn *cls_conn) |
2327 | if (session->leadconn == conn) |
2328 | session->leadconn = NULL; |
2329 | spin_unlock_bh(&session->frwd_lock); |
2330 | + mutex_unlock(&session->eh_mutex); |
2331 | |
2332 | iscsi_destroy_conn(cls_conn); |
2333 | } |
2334 | diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c |
2335 | index 59c31bf88d92..ce6c770d74d5 100644 |
2336 | --- a/drivers/scsi/scsi_error.c |
2337 | +++ b/drivers/scsi/scsi_error.c |
2338 | @@ -26,7 +26,6 @@ |
2339 | #include <linux/blkdev.h> |
2340 | #include <linux/delay.h> |
2341 | #include <linux/jiffies.h> |
2342 | -#include <asm/unaligned.h> |
2343 | |
2344 | #include <scsi/scsi.h> |
2345 | #include <scsi/scsi_cmnd.h> |
2346 | @@ -2587,33 +2586,3 @@ void scsi_build_sense_buffer(int desc, u8 *buf, u8 key, u8 asc, u8 ascq) |
2347 | } |
2348 | } |
2349 | EXPORT_SYMBOL(scsi_build_sense_buffer); |
2350 | - |
2351 | -/** |
2352 | - * scsi_set_sense_information - set the information field in a |
2353 | - * formatted sense data buffer |
2354 | - * @buf: Where to build sense data |
2355 | - * @info: 64-bit information value to be set |
2356 | - * |
2357 | - **/ |
2358 | -void scsi_set_sense_information(u8 *buf, u64 info) |
2359 | -{ |
2360 | - if ((buf[0] & 0x7f) == 0x72) { |
2361 | - u8 *ucp, len; |
2362 | - |
2363 | - len = buf[7]; |
2364 | - ucp = (char *)scsi_sense_desc_find(buf, len + 8, 0); |
2365 | - if (!ucp) { |
2366 | - buf[7] = len + 0xa; |
2367 | - ucp = buf + 8 + len; |
2368 | - } |
2369 | - ucp[0] = 0; |
2370 | - ucp[1] = 0xa; |
2371 | - ucp[2] = 0x80; /* Valid bit */ |
2372 | - ucp[3] = 0; |
2373 | - put_unaligned_be64(info, &ucp[4]); |
2374 | - } else if ((buf[0] & 0x7f) == 0x70) { |
2375 | - buf[0] |= 0x80; |
2376 | - put_unaligned_be64(info, &buf[3]); |
2377 | - } |
2378 | -} |
2379 | -EXPORT_SYMBOL(scsi_set_sense_information); |
2380 | diff --git a/drivers/scsi/scsi_pm.c b/drivers/scsi/scsi_pm.c |
2381 | index 9e43ae1d2163..e4b799837948 100644 |
2382 | --- a/drivers/scsi/scsi_pm.c |
2383 | +++ b/drivers/scsi/scsi_pm.c |
2384 | @@ -217,15 +217,15 @@ static int sdev_runtime_suspend(struct device *dev) |
2385 | { |
2386 | const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; |
2387 | struct scsi_device *sdev = to_scsi_device(dev); |
2388 | - int err; |
2389 | + int err = 0; |
2390 | |
2391 | - err = blk_pre_runtime_suspend(sdev->request_queue); |
2392 | - if (err) |
2393 | - return err; |
2394 | - if (pm && pm->runtime_suspend) |
2395 | + if (pm && pm->runtime_suspend) { |
2396 | + err = blk_pre_runtime_suspend(sdev->request_queue); |
2397 | + if (err) |
2398 | + return err; |
2399 | err = pm->runtime_suspend(dev); |
2400 | - blk_post_runtime_suspend(sdev->request_queue, err); |
2401 | - |
2402 | + blk_post_runtime_suspend(sdev->request_queue, err); |
2403 | + } |
2404 | return err; |
2405 | } |
2406 | |
2407 | @@ -248,11 +248,11 @@ static int sdev_runtime_resume(struct device *dev) |
2408 | const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; |
2409 | int err = 0; |
2410 | |
2411 | - blk_pre_runtime_resume(sdev->request_queue); |
2412 | - if (pm && pm->runtime_resume) |
2413 | + if (pm && pm->runtime_resume) { |
2414 | + blk_pre_runtime_resume(sdev->request_queue); |
2415 | err = pm->runtime_resume(dev); |
2416 | - blk_post_runtime_resume(sdev->request_queue, err); |
2417 | - |
2418 | + blk_post_runtime_resume(sdev->request_queue, err); |
2419 | + } |
2420 | return err; |
2421 | } |
2422 | |
2423 | diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c |
2424 | index 7f9d65fe4fd9..11ea52b2c36b 100644 |
2425 | --- a/drivers/scsi/sd.c |
2426 | +++ b/drivers/scsi/sd.c |
2427 | @@ -2770,9 +2770,9 @@ static int sd_revalidate_disk(struct gendisk *disk) |
2428 | max_xfer = sdkp->max_xfer_blocks; |
2429 | max_xfer <<= ilog2(sdp->sector_size) - 9; |
2430 | |
2431 | - max_xfer = min_not_zero(queue_max_hw_sectors(sdkp->disk->queue), |
2432 | - max_xfer); |
2433 | - blk_queue_max_hw_sectors(sdkp->disk->queue, max_xfer); |
2434 | + sdkp->disk->queue->limits.max_sectors = |
2435 | + min_not_zero(queue_max_hw_sectors(sdkp->disk->queue), max_xfer); |
2436 | + |
2437 | set_capacity(disk, sdkp->capacity); |
2438 | sd_config_write_same(sdkp); |
2439 | kfree(buffer); |
2440 | diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c |
2441 | index 305a5cbc099a..0ab6e2efd28c 100644 |
2442 | --- a/drivers/target/iscsi/iscsi_target.c |
2443 | +++ b/drivers/target/iscsi/iscsi_target.c |
2444 | @@ -968,9 +968,9 @@ int iscsit_setup_scsi_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd, |
2445 | cmd->cmd_flags |= ICF_NON_IMMEDIATE_UNSOLICITED_DATA; |
2446 | |
2447 | conn->sess->init_task_tag = cmd->init_task_tag = hdr->itt; |
2448 | - if (hdr->flags & ISCSI_FLAG_CMD_READ) { |
2449 | + if (hdr->flags & ISCSI_FLAG_CMD_READ) |
2450 | cmd->targ_xfer_tag = session_get_next_ttt(conn->sess); |
2451 | - } else if (hdr->flags & ISCSI_FLAG_CMD_WRITE) |
2452 | + else |
2453 | cmd->targ_xfer_tag = 0xFFFFFFFF; |
2454 | cmd->cmd_sn = be32_to_cpu(hdr->cmdsn); |
2455 | cmd->exp_stat_sn = be32_to_cpu(hdr->exp_statsn); |
2456 | diff --git a/drivers/xen/xenbus/xenbus_client.c b/drivers/xen/xenbus/xenbus_client.c |
2457 | index 96b2011d25f3..658be6cc3db6 100644 |
2458 | --- a/drivers/xen/xenbus/xenbus_client.c |
2459 | +++ b/drivers/xen/xenbus/xenbus_client.c |
2460 | @@ -814,8 +814,10 @@ static int xenbus_unmap_ring_vfree_hvm(struct xenbus_device *dev, void *vaddr) |
2461 | |
2462 | rv = xenbus_unmap_ring(dev, node->handles, node->nr_handles, |
2463 | addrs); |
2464 | - if (!rv) |
2465 | + if (!rv) { |
2466 | vunmap(vaddr); |
2467 | + free_xenballooned_pages(node->nr_handles, node->hvm.pages); |
2468 | + } |
2469 | else |
2470 | WARN(1, "Leaking %p, size %u page(s)\n", vaddr, |
2471 | node->nr_handles); |
2472 | diff --git a/include/drm/drm_pciids.h b/include/drm/drm_pciids.h |
2473 | index 45c39a37f924..8bc073d297db 100644 |
2474 | --- a/include/drm/drm_pciids.h |
2475 | +++ b/include/drm/drm_pciids.h |
2476 | @@ -172,6 +172,7 @@ |
2477 | {0x1002, 0x6610, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_NEW_MEMMAP}, \ |
2478 | {0x1002, 0x6611, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_NEW_MEMMAP}, \ |
2479 | {0x1002, 0x6613, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_NEW_MEMMAP}, \ |
2480 | + {0x1002, 0x6617, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ |
2481 | {0x1002, 0x6620, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ |
2482 | {0x1002, 0x6621, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ |
2483 | {0x1002, 0x6623, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ |
2484 | diff --git a/include/linux/ata.h b/include/linux/ata.h |
2485 | index 533dbb6428f5..5dfbcd8887bb 100644 |
2486 | --- a/include/linux/ata.h |
2487 | +++ b/include/linux/ata.h |
2488 | @@ -385,8 +385,6 @@ enum { |
2489 | SATA_SSP = 0x06, /* Software Settings Preservation */ |
2490 | SATA_DEVSLP = 0x09, /* Device Sleep */ |
2491 | |
2492 | - SETFEATURE_SENSE_DATA = 0xC3, /* Sense Data Reporting feature */ |
2493 | - |
2494 | /* feature values for SET_MAX */ |
2495 | ATA_SET_MAX_ADDR = 0x00, |
2496 | ATA_SET_MAX_PASSWD = 0x01, |
2497 | @@ -530,8 +528,6 @@ struct ata_bmdma_prd { |
2498 | #define ata_id_cdb_intr(id) (((id)[ATA_ID_CONFIG] & 0x60) == 0x20) |
2499 | #define ata_id_has_da(id) ((id)[ATA_ID_SATA_CAPABILITY_2] & (1 << 4)) |
2500 | #define ata_id_has_devslp(id) ((id)[ATA_ID_FEATURE_SUPP] & (1 << 8)) |
2501 | -#define ata_id_has_ncq_autosense(id) \ |
2502 | - ((id)[ATA_ID_FEATURE_SUPP] & (1 << 7)) |
2503 | |
2504 | static inline bool ata_id_has_hipm(const u16 *id) |
2505 | { |
2506 | @@ -710,20 +706,6 @@ static inline bool ata_id_has_read_log_dma_ext(const u16 *id) |
2507 | return id[ATA_ID_COMMAND_SET_3] & (1 << 3); |
2508 | } |
2509 | |
2510 | -static inline bool ata_id_has_sense_reporting(const u16 *id) |
2511 | -{ |
2512 | - if (!(id[ATA_ID_CFS_ENABLE_2] & (1 << 15))) |
2513 | - return false; |
2514 | - return id[ATA_ID_COMMAND_SET_3] & (1 << 6); |
2515 | -} |
2516 | - |
2517 | -static inline bool ata_id_sense_reporting_enabled(const u16 *id) |
2518 | -{ |
2519 | - if (!(id[ATA_ID_CFS_ENABLE_2] & (1 << 15))) |
2520 | - return false; |
2521 | - return id[ATA_ID_COMMAND_SET_4] & (1 << 6); |
2522 | -} |
2523 | - |
2524 | /** |
2525 | * ata_id_major_version - get ATA level of drive |
2526 | * @id: Identify data |
2527 | diff --git a/include/linux/irq.h b/include/linux/irq.h |
2528 | index 62c6901cab55..3532dca843f4 100644 |
2529 | --- a/include/linux/irq.h |
2530 | +++ b/include/linux/irq.h |
2531 | @@ -467,6 +467,7 @@ extern int irq_chip_set_affinity_parent(struct irq_data *data, |
2532 | const struct cpumask *dest, |
2533 | bool force); |
2534 | extern int irq_chip_set_wake_parent(struct irq_data *data, unsigned int on); |
2535 | +extern int irq_chip_set_type_parent(struct irq_data *data, unsigned int type); |
2536 | #endif |
2537 | |
2538 | /* Handling of unhandled and spurious interrupts: */ |
2539 | diff --git a/include/scsi/scsi_eh.h b/include/scsi/scsi_eh.h |
2540 | index 5a4bb5bb66b3..1e1421b06565 100644 |
2541 | --- a/include/scsi/scsi_eh.h |
2542 | +++ b/include/scsi/scsi_eh.h |
2543 | @@ -59,7 +59,6 @@ extern int scsi_get_sense_info_fld(const u8 * sense_buffer, int sb_len, |
2544 | u64 * info_out); |
2545 | |
2546 | extern void scsi_build_sense_buffer(int desc, u8 *buf, u8 key, u8 asc, u8 ascq); |
2547 | -extern void scsi_set_sense_information(u8 *buf, u64 info); |
2548 | |
2549 | extern int scsi_ioctl_reset(struct scsi_device *, int __user *); |
2550 | |
2551 | diff --git a/ipc/sem.c b/ipc/sem.c |
2552 | index d1a6edd17eba..c50aa5755c62 100644 |
2553 | --- a/ipc/sem.c |
2554 | +++ b/ipc/sem.c |
2555 | @@ -253,6 +253,16 @@ static void sem_rcu_free(struct rcu_head *head) |
2556 | } |
2557 | |
2558 | /* |
2559 | + * spin_unlock_wait() and !spin_is_locked() are not memory barriers, they |
2560 | + * are only control barriers. |
2561 | + * The code must pair with spin_unlock(&sem->lock) or |
2562 | + * spin_unlock(&sem_perm.lock), thus just the control barrier is insufficient. |
2563 | + * |
2564 | + * smp_rmb() is sufficient, as writes cannot pass the control barrier. |
2565 | + */ |
2566 | +#define ipc_smp_acquire__after_spin_is_unlocked() smp_rmb() |
2567 | + |
2568 | +/* |
2569 | * Wait until all currently ongoing simple ops have completed. |
2570 | * Caller must own sem_perm.lock. |
2571 | * New simple ops cannot start, because simple ops first check |
2572 | @@ -275,6 +285,7 @@ static void sem_wait_array(struct sem_array *sma) |
2573 | sem = sma->sem_base + i; |
2574 | spin_unlock_wait(&sem->lock); |
2575 | } |
2576 | + ipc_smp_acquire__after_spin_is_unlocked(); |
2577 | } |
2578 | |
2579 | /* |
2580 | @@ -327,13 +338,12 @@ static inline int sem_lock(struct sem_array *sma, struct sembuf *sops, |
2581 | /* Then check that the global lock is free */ |
2582 | if (!spin_is_locked(&sma->sem_perm.lock)) { |
2583 | /* |
2584 | - * The ipc object lock check must be visible on all |
2585 | - * cores before rechecking the complex count. Otherwise |
2586 | - * we can race with another thread that does: |
2587 | + * We need a memory barrier with acquire semantics, |
2588 | + * otherwise we can race with another thread that does: |
2589 | * complex_count++; |
2590 | * spin_unlock(sem_perm.lock); |
2591 | */ |
2592 | - smp_rmb(); |
2593 | + ipc_smp_acquire__after_spin_is_unlocked(); |
2594 | |
2595 | /* |
2596 | * Now repeat the test of complex_count: |
2597 | @@ -2074,17 +2084,28 @@ void exit_sem(struct task_struct *tsk) |
2598 | rcu_read_lock(); |
2599 | un = list_entry_rcu(ulp->list_proc.next, |
2600 | struct sem_undo, list_proc); |
2601 | - if (&un->list_proc == &ulp->list_proc) |
2602 | - semid = -1; |
2603 | - else |
2604 | - semid = un->semid; |
2605 | + if (&un->list_proc == &ulp->list_proc) { |
2606 | + /* |
2607 | + * We must wait for freeary() before freeing this ulp, |
2608 | + * in case we raced with last sem_undo. There is a small |
2609 | + * possibility where we exit while freeary() didn't |
2610 | + * finish unlocking sem_undo_list. |
2611 | + */ |
2612 | + spin_unlock_wait(&ulp->lock); |
2613 | + rcu_read_unlock(); |
2614 | + break; |
2615 | + } |
2616 | + spin_lock(&ulp->lock); |
2617 | + semid = un->semid; |
2618 | + spin_unlock(&ulp->lock); |
2619 | |
2620 | + /* exit_sem raced with IPC_RMID, nothing to do */ |
2621 | if (semid == -1) { |
2622 | rcu_read_unlock(); |
2623 | - break; |
2624 | + continue; |
2625 | } |
2626 | |
2627 | - sma = sem_obtain_object_check(tsk->nsproxy->ipc_ns, un->semid); |
2628 | + sma = sem_obtain_object_check(tsk->nsproxy->ipc_ns, semid); |
2629 | /* exit_sem raced with IPC_RMID, nothing to do */ |
2630 | if (IS_ERR(sma)) { |
2631 | rcu_read_unlock(); |
2632 | diff --git a/kernel/cpuset.c b/kernel/cpuset.c |
2633 | index ee14e3a35a29..f0acff0f66c9 100644 |
2634 | --- a/kernel/cpuset.c |
2635 | +++ b/kernel/cpuset.c |
2636 | @@ -1223,7 +1223,7 @@ static int update_nodemask(struct cpuset *cs, struct cpuset *trialcs, |
2637 | spin_unlock_irq(&callback_lock); |
2638 | |
2639 | /* use trialcs->mems_allowed as a temp variable */ |
2640 | - update_nodemasks_hier(cs, &cs->mems_allowed); |
2641 | + update_nodemasks_hier(cs, &trialcs->mems_allowed); |
2642 | done: |
2643 | return retval; |
2644 | } |
2645 | diff --git a/kernel/events/core.c b/kernel/events/core.c |
2646 | index 0ceb386777ae..94817491407b 100644 |
2647 | --- a/kernel/events/core.c |
2648 | +++ b/kernel/events/core.c |
2649 | @@ -1886,8 +1886,6 @@ event_sched_in(struct perf_event *event, |
2650 | |
2651 | perf_pmu_disable(event->pmu); |
2652 | |
2653 | - event->tstamp_running += tstamp - event->tstamp_stopped; |
2654 | - |
2655 | perf_set_shadow_time(event, ctx, tstamp); |
2656 | |
2657 | perf_log_itrace_start(event); |
2658 | @@ -1899,6 +1897,8 @@ event_sched_in(struct perf_event *event, |
2659 | goto out; |
2660 | } |
2661 | |
2662 | + event->tstamp_running += tstamp - event->tstamp_stopped; |
2663 | + |
2664 | if (!is_software_event(event)) |
2665 | cpuctx->active_oncpu++; |
2666 | if (!ctx->nr_active++) |
2667 | @@ -3976,28 +3976,21 @@ static void perf_event_for_each(struct perf_event *event, |
2668 | perf_event_for_each_child(sibling, func); |
2669 | } |
2670 | |
2671 | -static int perf_event_period(struct perf_event *event, u64 __user *arg) |
2672 | -{ |
2673 | - struct perf_event_context *ctx = event->ctx; |
2674 | - int ret = 0, active; |
2675 | +struct period_event { |
2676 | + struct perf_event *event; |
2677 | u64 value; |
2678 | +}; |
2679 | |
2680 | - if (!is_sampling_event(event)) |
2681 | - return -EINVAL; |
2682 | - |
2683 | - if (copy_from_user(&value, arg, sizeof(value))) |
2684 | - return -EFAULT; |
2685 | - |
2686 | - if (!value) |
2687 | - return -EINVAL; |
2688 | +static int __perf_event_period(void *info) |
2689 | +{ |
2690 | + struct period_event *pe = info; |
2691 | + struct perf_event *event = pe->event; |
2692 | + struct perf_event_context *ctx = event->ctx; |
2693 | + u64 value = pe->value; |
2694 | + bool active; |
2695 | |
2696 | - raw_spin_lock_irq(&ctx->lock); |
2697 | + raw_spin_lock(&ctx->lock); |
2698 | if (event->attr.freq) { |
2699 | - if (value > sysctl_perf_event_sample_rate) { |
2700 | - ret = -EINVAL; |
2701 | - goto unlock; |
2702 | - } |
2703 | - |
2704 | event->attr.sample_freq = value; |
2705 | } else { |
2706 | event->attr.sample_period = value; |
2707 | @@ -4016,11 +4009,53 @@ static int perf_event_period(struct perf_event *event, u64 __user *arg) |
2708 | event->pmu->start(event, PERF_EF_RELOAD); |
2709 | perf_pmu_enable(ctx->pmu); |
2710 | } |
2711 | + raw_spin_unlock(&ctx->lock); |
2712 | |
2713 | -unlock: |
2714 | + return 0; |
2715 | +} |
2716 | + |
2717 | +static int perf_event_period(struct perf_event *event, u64 __user *arg) |
2718 | +{ |
2719 | + struct period_event pe = { .event = event, }; |
2720 | + struct perf_event_context *ctx = event->ctx; |
2721 | + struct task_struct *task; |
2722 | + u64 value; |
2723 | + |
2724 | + if (!is_sampling_event(event)) |
2725 | + return -EINVAL; |
2726 | + |
2727 | + if (copy_from_user(&value, arg, sizeof(value))) |
2728 | + return -EFAULT; |
2729 | + |
2730 | + if (!value) |
2731 | + return -EINVAL; |
2732 | + |
2733 | + if (event->attr.freq && value > sysctl_perf_event_sample_rate) |
2734 | + return -EINVAL; |
2735 | + |
2736 | + task = ctx->task; |
2737 | + pe.value = value; |
2738 | + |
2739 | + if (!task) { |
2740 | + cpu_function_call(event->cpu, __perf_event_period, &pe); |
2741 | + return 0; |
2742 | + } |
2743 | + |
2744 | +retry: |
2745 | + if (!task_function_call(task, __perf_event_period, &pe)) |
2746 | + return 0; |
2747 | + |
2748 | + raw_spin_lock_irq(&ctx->lock); |
2749 | + if (ctx->is_active) { |
2750 | + raw_spin_unlock_irq(&ctx->lock); |
2751 | + task = ctx->task; |
2752 | + goto retry; |
2753 | + } |
2754 | + |
2755 | + __perf_event_period(&pe); |
2756 | raw_spin_unlock_irq(&ctx->lock); |
2757 | |
2758 | - return ret; |
2759 | + return 0; |
2760 | } |
2761 | |
2762 | static const struct file_operations perf_fops; |
2763 | @@ -4766,12 +4801,20 @@ static const struct file_operations perf_fops = { |
2764 | * to user-space before waking everybody up. |
2765 | */ |
2766 | |
2767 | +static inline struct fasync_struct **perf_event_fasync(struct perf_event *event) |
2768 | +{ |
2769 | + /* only the parent has fasync state */ |
2770 | + if (event->parent) |
2771 | + event = event->parent; |
2772 | + return &event->fasync; |
2773 | +} |
2774 | + |
2775 | void perf_event_wakeup(struct perf_event *event) |
2776 | { |
2777 | ring_buffer_wakeup(event); |
2778 | |
2779 | if (event->pending_kill) { |
2780 | - kill_fasync(&event->fasync, SIGIO, event->pending_kill); |
2781 | + kill_fasync(perf_event_fasync(event), SIGIO, event->pending_kill); |
2782 | event->pending_kill = 0; |
2783 | } |
2784 | } |
2785 | @@ -6117,7 +6160,7 @@ static int __perf_event_overflow(struct perf_event *event, |
2786 | else |
2787 | perf_event_output(event, data, regs); |
2788 | |
2789 | - if (event->fasync && event->pending_kill) { |
2790 | + if (*perf_event_fasync(event) && event->pending_kill) { |
2791 | event->pending_wakeup = 1; |
2792 | irq_work_queue(&event->pending); |
2793 | } |
2794 | diff --git a/kernel/events/ring_buffer.c b/kernel/events/ring_buffer.c |
2795 | index 725c416085e3..a7604c81168e 100644 |
2796 | --- a/kernel/events/ring_buffer.c |
2797 | +++ b/kernel/events/ring_buffer.c |
2798 | @@ -547,11 +547,13 @@ static void __rb_free_aux(struct ring_buffer *rb) |
2799 | rb->aux_priv = NULL; |
2800 | } |
2801 | |
2802 | - for (pg = 0; pg < rb->aux_nr_pages; pg++) |
2803 | - rb_free_aux_page(rb, pg); |
2804 | + if (rb->aux_nr_pages) { |
2805 | + for (pg = 0; pg < rb->aux_nr_pages; pg++) |
2806 | + rb_free_aux_page(rb, pg); |
2807 | |
2808 | - kfree(rb->aux_pages); |
2809 | - rb->aux_nr_pages = 0; |
2810 | + kfree(rb->aux_pages); |
2811 | + rb->aux_nr_pages = 0; |
2812 | + } |
2813 | } |
2814 | |
2815 | void rb_free_aux(struct ring_buffer *rb) |
2816 | diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c |
2817 | index eb9a4ea394ab..94bbd8fee90d 100644 |
2818 | --- a/kernel/irq/chip.c |
2819 | +++ b/kernel/irq/chip.c |
2820 | @@ -934,6 +934,23 @@ int irq_chip_set_affinity_parent(struct irq_data *data, |
2821 | } |
2822 | |
2823 | /** |
2824 | + * irq_chip_set_type_parent - Set IRQ type on the parent interrupt |
2825 | + * @data: Pointer to interrupt specific data |
2826 | + * @type: IRQ_TYPE_{LEVEL,EDGE}_* value - see include/linux/irq.h |
2827 | + * |
2828 | + * Conditional, as the underlying parent chip might not implement it. |
2829 | + */ |
2830 | +int irq_chip_set_type_parent(struct irq_data *data, unsigned int type) |
2831 | +{ |
2832 | + data = data->parent_data; |
2833 | + |
2834 | + if (data->chip->irq_set_type) |
2835 | + return data->chip->irq_set_type(data, type); |
2836 | + |
2837 | + return -ENOSYS; |
2838 | +} |
2839 | + |
2840 | +/** |
2841 | * irq_chip_retrigger_hierarchy - Retrigger an interrupt in hardware |
2842 | * @data: Pointer to interrupt specific data |
2843 | * |
2844 | @@ -946,7 +963,7 @@ int irq_chip_retrigger_hierarchy(struct irq_data *data) |
2845 | if (data->chip && data->chip->irq_retrigger) |
2846 | return data->chip->irq_retrigger(data); |
2847 | |
2848 | - return -ENOSYS; |
2849 | + return 0; |
2850 | } |
2851 | |
2852 | /** |
2853 | diff --git a/mm/memory-failure.c b/mm/memory-failure.c |
2854 | index 501820c815b3..9f48145c884f 100644 |
2855 | --- a/mm/memory-failure.c |
2856 | +++ b/mm/memory-failure.c |
2857 | @@ -1558,6 +1558,8 @@ static int get_any_page(struct page *page, unsigned long pfn, int flags) |
2858 | */ |
2859 | ret = __get_any_page(page, pfn, 0); |
2860 | if (!PageLRU(page)) { |
2861 | + /* Drop page reference which is from __get_any_page() */ |
2862 | + put_page(page); |
2863 | pr_info("soft_offline: %#lx: unknown non LRU page type %lx\n", |
2864 | pfn, page->flags); |
2865 | return -EIO; |
2866 | @@ -1587,13 +1589,12 @@ static int soft_offline_huge_page(struct page *page, int flags) |
2867 | unlock_page(hpage); |
2868 | |
2869 | ret = isolate_huge_page(hpage, &pagelist); |
2870 | - if (ret) { |
2871 | - /* |
2872 | - * get_any_page() and isolate_huge_page() takes a refcount each, |
2873 | - * so need to drop one here. |
2874 | - */ |
2875 | - put_page(hpage); |
2876 | - } else { |
2877 | + /* |
2878 | + * get_any_page() and isolate_huge_page() takes a refcount each, |
2879 | + * so need to drop one here. |
2880 | + */ |
2881 | + put_page(hpage); |
2882 | + if (!ret) { |
2883 | pr_info("soft offline: %#lx hugepage failed to isolate\n", pfn); |
2884 | return -EBUSY; |
2885 | } |
2886 | diff --git a/net/9p/client.c b/net/9p/client.c |
2887 | index 81925b923318..fcf6fe063d82 100644 |
2888 | --- a/net/9p/client.c |
2889 | +++ b/net/9p/client.c |
2890 | @@ -1541,6 +1541,7 @@ p9_client_read(struct p9_fid *fid, u64 offset, struct iov_iter *to, int *err) |
2891 | struct p9_client *clnt = fid->clnt; |
2892 | struct p9_req_t *req; |
2893 | int total = 0; |
2894 | + *err = 0; |
2895 | |
2896 | p9_debug(P9_DEBUG_9P, ">>> TREAD fid %d offset %llu %d\n", |
2897 | fid->fid, (unsigned long long) offset, (int)iov_iter_count(to)); |
2898 | @@ -1616,6 +1617,7 @@ p9_client_write(struct p9_fid *fid, u64 offset, struct iov_iter *from, int *err) |
2899 | struct p9_client *clnt = fid->clnt; |
2900 | struct p9_req_t *req; |
2901 | int total = 0; |
2902 | + *err = 0; |
2903 | |
2904 | p9_debug(P9_DEBUG_9P, ">>> TWRITE fid %d offset %llu count %zd\n", |
2905 | fid->fid, (unsigned long long) offset, |
2906 | diff --git a/net/mac80211/rc80211_minstrel.c b/net/mac80211/rc80211_minstrel.c |
2907 | index 247552a7f6c2..3ece7d1034c8 100644 |
2908 | --- a/net/mac80211/rc80211_minstrel.c |
2909 | +++ b/net/mac80211/rc80211_minstrel.c |
2910 | @@ -92,14 +92,15 @@ int minstrel_get_tp_avg(struct minstrel_rate *mr, int prob_ewma) |
2911 | static inline void |
2912 | minstrel_sort_best_tp_rates(struct minstrel_sta_info *mi, int i, u8 *tp_list) |
2913 | { |
2914 | - int j = MAX_THR_RATES; |
2915 | - struct minstrel_rate_stats *tmp_mrs = &mi->r[j - 1].stats; |
2916 | + int j; |
2917 | + struct minstrel_rate_stats *tmp_mrs; |
2918 | struct minstrel_rate_stats *cur_mrs = &mi->r[i].stats; |
2919 | |
2920 | - while (j > 0 && (minstrel_get_tp_avg(&mi->r[i], cur_mrs->prob_ewma) > |
2921 | - minstrel_get_tp_avg(&mi->r[tp_list[j - 1]], tmp_mrs->prob_ewma))) { |
2922 | - j--; |
2923 | + for (j = MAX_THR_RATES; j > 0; --j) { |
2924 | tmp_mrs = &mi->r[tp_list[j - 1]].stats; |
2925 | + if (minstrel_get_tp_avg(&mi->r[i], cur_mrs->prob_ewma) <= |
2926 | + minstrel_get_tp_avg(&mi->r[tp_list[j - 1]], tmp_mrs->prob_ewma)) |
2927 | + break; |
2928 | } |
2929 | |
2930 | if (j < MAX_THR_RATES - 1) |
2931 | diff --git a/scripts/kconfig/streamline_config.pl b/scripts/kconfig/streamline_config.pl |
2932 | index 9cb8522d8d22..f3d3fb42b873 100755 |
2933 | --- a/scripts/kconfig/streamline_config.pl |
2934 | +++ b/scripts/kconfig/streamline_config.pl |
2935 | @@ -137,7 +137,7 @@ my $ksource = ($ARGV[0] ? $ARGV[0] : '.'); |
2936 | my $kconfig = $ARGV[1]; |
2937 | my $lsmod_file = $ENV{'LSMOD'}; |
2938 | |
2939 | -my @makefiles = `find $ksource -name Makefile 2>/dev/null`; |
2940 | +my @makefiles = `find $ksource -name Makefile -or -name Kbuild 2>/dev/null`; |
2941 | chomp @makefiles; |
2942 | |
2943 | my %depends; |
2944 | diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c |
2945 | index 5645481af3d9..36e8f1236637 100644 |
2946 | --- a/sound/pci/hda/hda_codec.c |
2947 | +++ b/sound/pci/hda/hda_codec.c |
2948 | @@ -3259,7 +3259,7 @@ static int add_std_chmaps(struct hda_codec *codec) |
2949 | struct snd_pcm_chmap *chmap; |
2950 | const struct snd_pcm_chmap_elem *elem; |
2951 | |
2952 | - if (!pcm || pcm->own_chmap || |
2953 | + if (!pcm || !pcm->pcm || pcm->own_chmap || |
2954 | !hinfo->substreams) |
2955 | continue; |
2956 | elem = hinfo->chmap ? hinfo->chmap : snd_pcm_std_chmaps; |
2957 | diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c |
2958 | index ac0db1679f09..5bc7f2e2715c 100644 |
2959 | --- a/sound/pci/hda/hda_generic.c |
2960 | +++ b/sound/pci/hda/hda_generic.c |
2961 | @@ -671,7 +671,8 @@ static bool is_active_nid(struct hda_codec *codec, hda_nid_t nid, |
2962 | } |
2963 | for (i = 0; i < path->depth; i++) { |
2964 | if (path->path[i] == nid) { |
2965 | - if (dir == HDA_OUTPUT || path->idx[i] == idx) |
2966 | + if (dir == HDA_OUTPUT || idx == -1 || |
2967 | + path->idx[i] == idx) |
2968 | return true; |
2969 | break; |
2970 | } |
2971 | @@ -682,7 +683,7 @@ static bool is_active_nid(struct hda_codec *codec, hda_nid_t nid, |
2972 | |
2973 | /* check whether the NID is referred by any active paths */ |
2974 | #define is_active_nid_for_any(codec, nid) \ |
2975 | - is_active_nid(codec, nid, HDA_OUTPUT, 0) |
2976 | + is_active_nid(codec, nid, HDA_OUTPUT, -1) |
2977 | |
2978 | /* get the default amp value for the target state */ |
2979 | static int get_amp_val_to_activate(struct hda_codec *codec, hda_nid_t nid, |
2980 | @@ -883,8 +884,7 @@ void snd_hda_activate_path(struct hda_codec *codec, struct nid_path *path, |
2981 | struct hda_gen_spec *spec = codec->spec; |
2982 | int i; |
2983 | |
2984 | - if (!enable) |
2985 | - path->active = false; |
2986 | + path->active = enable; |
2987 | |
2988 | /* make sure the widget is powered up */ |
2989 | if (enable && (spec->power_down_unused || codec->power_save_node)) |
2990 | @@ -902,9 +902,6 @@ void snd_hda_activate_path(struct hda_codec *codec, struct nid_path *path, |
2991 | if (has_amp_out(codec, path, i)) |
2992 | activate_amp_out(codec, path, i, enable); |
2993 | } |
2994 | - |
2995 | - if (enable) |
2996 | - path->active = true; |
2997 | } |
2998 | EXPORT_SYMBOL_GPL(snd_hda_activate_path); |
2999 | |
3000 | diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c |
3001 | index 78b719b5b34d..06cc9d57ba3d 100644 |
3002 | --- a/sound/pci/hda/patch_conexant.c |
3003 | +++ b/sound/pci/hda/patch_conexant.c |
3004 | @@ -200,12 +200,33 @@ static int cx_auto_init(struct hda_codec *codec) |
3005 | return 0; |
3006 | } |
3007 | |
3008 | -#define cx_auto_free snd_hda_gen_free |
3009 | +static void cx_auto_reboot_notify(struct hda_codec *codec) |
3010 | +{ |
3011 | + struct conexant_spec *spec = codec->spec; |
3012 | + |
3013 | + if (codec->core.vendor_id != 0x14f150f2) |
3014 | + return; |
3015 | + |
3016 | + /* Turn the CX20722 codec into D3 to avoid spurious noises |
3017 | + from the internal speaker during (and after) reboot */ |
3018 | + cx_auto_turn_eapd(codec, spec->num_eapds, spec->eapds, false); |
3019 | + |
3020 | + snd_hda_codec_set_power_to_all(codec, codec->core.afg, AC_PWRST_D3); |
3021 | + snd_hda_codec_write(codec, codec->core.afg, 0, |
3022 | + AC_VERB_SET_POWER_STATE, AC_PWRST_D3); |
3023 | +} |
3024 | + |
3025 | +static void cx_auto_free(struct hda_codec *codec) |
3026 | +{ |
3027 | + cx_auto_reboot_notify(codec); |
3028 | + snd_hda_gen_free(codec); |
3029 | +} |
3030 | |
3031 | static const struct hda_codec_ops cx_auto_patch_ops = { |
3032 | .build_controls = cx_auto_build_controls, |
3033 | .build_pcms = snd_hda_gen_build_pcms, |
3034 | .init = cx_auto_init, |
3035 | + .reboot_notify = cx_auto_reboot_notify, |
3036 | .free = cx_auto_free, |
3037 | .unsol_event = snd_hda_jack_unsol_event, |
3038 | #ifdef CONFIG_PM |
3039 | diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c |
3040 | index 1e99f075a5ab..91f6928560e1 100644 |
3041 | --- a/sound/pci/hda/patch_realtek.c |
3042 | +++ b/sound/pci/hda/patch_realtek.c |
3043 | @@ -5119,6 +5119,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { |
3044 | SND_PCI_QUIRK(0x1028, 0x06d9, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE), |
3045 | SND_PCI_QUIRK(0x1028, 0x06da, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE), |
3046 | SND_PCI_QUIRK(0x1028, 0x06de, "Dell", ALC292_FIXUP_DISABLE_AAMIX), |
3047 | + SND_PCI_QUIRK(0x1028, 0x06db, "Dell", ALC292_FIXUP_DISABLE_AAMIX), |
3048 | SND_PCI_QUIRK(0x1028, 0x164a, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE), |
3049 | SND_PCI_QUIRK(0x1028, 0x164b, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE), |
3050 | SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC2), |
3051 | diff --git a/sound/usb/card.c b/sound/usb/card.c |
3052 | index 1fab9778807a..0450593980fd 100644 |
3053 | --- a/sound/usb/card.c |
3054 | +++ b/sound/usb/card.c |
3055 | @@ -638,7 +638,7 @@ int snd_usb_autoresume(struct snd_usb_audio *chip) |
3056 | int err = -ENODEV; |
3057 | |
3058 | down_read(&chip->shutdown_rwsem); |
3059 | - if (chip->probing && chip->in_pm) |
3060 | + if (chip->probing || chip->in_pm) |
3061 | err = 0; |
3062 | else if (!chip->shutdown) |
3063 | err = usb_autopm_get_interface(chip->pm_intf); |
3064 | diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c |
3065 | index 754e689596a2..00ebc0ca008e 100644 |
3066 | --- a/sound/usb/quirks.c |
3067 | +++ b/sound/usb/quirks.c |
3068 | @@ -1268,6 +1268,7 @@ u64 snd_usb_interface_dsd_format_quirks(struct snd_usb_audio *chip, |
3069 | return SNDRV_PCM_FMTBIT_DSD_U32_BE; |
3070 | break; |
3071 | |
3072 | + case USB_ID(0x20b1, 0x000a): /* Gustard DAC-X20U */ |
3073 | case USB_ID(0x20b1, 0x2009): /* DIYINHK DSD DXD 384kHz USB to I2S/DSD */ |
3074 | case USB_ID(0x20b1, 0x2023): /* JLsounds I2SoverUSB */ |
3075 | if (fp->altsetting == 3) |