Contents of /trunk/kernel-alx/patches-4.9/0161-4.9.62-all-fixes.patch
Parent Directory | Revision Log
Revision 3046 -
(show annotations)
(download)
Wed Dec 20 11:49:32 2017 UTC (6 years, 9 months ago) by niro
File size: 97221 byte(s)
Wed Dec 20 11:49:32 2017 UTC (6 years, 9 months ago) by niro
File size: 97221 byte(s)
-linux-4.9.62
1 | diff --git a/Documentation/devicetree/bindings/arm/davinci.txt b/Documentation/devicetree/bindings/arm/davinci.txt |
2 | index f0841ce725b5..715622c36260 100644 |
3 | --- a/Documentation/devicetree/bindings/arm/davinci.txt |
4 | +++ b/Documentation/devicetree/bindings/arm/davinci.txt |
5 | @@ -13,6 +13,10 @@ EnBW AM1808 based CMC board |
6 | Required root node properties: |
7 | - compatible = "enbw,cmc", "ti,da850; |
8 | |
9 | +LEGO MINDSTORMS EV3 (AM1808 based) |
10 | +Required root node properties: |
11 | + - compatible = "lego,ev3", "ti,da850"; |
12 | + |
13 | Generic DaVinci Boards |
14 | ---------------------- |
15 | |
16 | diff --git a/Documentation/devicetree/bindings/clock/qoriq-clock.txt b/Documentation/devicetree/bindings/clock/qoriq-clock.txt |
17 | index 16a3ec433119..1bd2c76396f4 100644 |
18 | --- a/Documentation/devicetree/bindings/clock/qoriq-clock.txt |
19 | +++ b/Documentation/devicetree/bindings/clock/qoriq-clock.txt |
20 | @@ -31,6 +31,7 @@ Required properties: |
21 | * "fsl,t4240-clockgen" |
22 | * "fsl,b4420-clockgen" |
23 | * "fsl,b4860-clockgen" |
24 | + * "fsl,ls1012a-clockgen" |
25 | * "fsl,ls1021a-clockgen" |
26 | Chassis-version clock strings include: |
27 | * "fsl,qoriq-clockgen-1.0": for chassis 1.0 clocks |
28 | diff --git a/Documentation/devicetree/bindings/vendor-prefixes.txt b/Documentation/devicetree/bindings/vendor-prefixes.txt |
29 | index bceffffb7502..f949a22bcd74 100644 |
30 | --- a/Documentation/devicetree/bindings/vendor-prefixes.txt |
31 | +++ b/Documentation/devicetree/bindings/vendor-prefixes.txt |
32 | @@ -154,6 +154,7 @@ kosagi Sutajio Ko-Usagi PTE Ltd. |
33 | kyo Kyocera Corporation |
34 | lacie LaCie |
35 | lantiq Lantiq Semiconductor |
36 | +lego LEGO Systems A/S |
37 | lenovo Lenovo Group Ltd. |
38 | lg LG Corporation |
39 | linux Linux-specific binding |
40 | diff --git a/Makefile b/Makefile |
41 | index b56b99e20b30..8ab48891d088 100644 |
42 | --- a/Makefile |
43 | +++ b/Makefile |
44 | @@ -1,6 +1,6 @@ |
45 | VERSION = 4 |
46 | PATCHLEVEL = 9 |
47 | -SUBLEVEL = 61 |
48 | +SUBLEVEL = 62 |
49 | EXTRAVERSION = |
50 | NAME = Roaring Lionus |
51 | |
52 | diff --git a/arch/arm/boot/dts/imx53-qsb-common.dtsi b/arch/arm/boot/dts/imx53-qsb-common.dtsi |
53 | index c05e7cfd0cbc..40b3e31935d0 100644 |
54 | --- a/arch/arm/boot/dts/imx53-qsb-common.dtsi |
55 | +++ b/arch/arm/boot/dts/imx53-qsb-common.dtsi |
56 | @@ -215,16 +215,16 @@ |
57 | |
58 | pinctrl_fec: fecgrp { |
59 | fsl,pins = < |
60 | - MX53_PAD_FEC_MDC__FEC_MDC 0x80000000 |
61 | - MX53_PAD_FEC_MDIO__FEC_MDIO 0x80000000 |
62 | - MX53_PAD_FEC_REF_CLK__FEC_TX_CLK 0x80000000 |
63 | - MX53_PAD_FEC_RX_ER__FEC_RX_ER 0x80000000 |
64 | - MX53_PAD_FEC_CRS_DV__FEC_RX_DV 0x80000000 |
65 | - MX53_PAD_FEC_RXD1__FEC_RDATA_1 0x80000000 |
66 | - MX53_PAD_FEC_RXD0__FEC_RDATA_0 0x80000000 |
67 | - MX53_PAD_FEC_TX_EN__FEC_TX_EN 0x80000000 |
68 | - MX53_PAD_FEC_TXD1__FEC_TDATA_1 0x80000000 |
69 | - MX53_PAD_FEC_TXD0__FEC_TDATA_0 0x80000000 |
70 | + MX53_PAD_FEC_MDC__FEC_MDC 0x4 |
71 | + MX53_PAD_FEC_MDIO__FEC_MDIO 0x1fc |
72 | + MX53_PAD_FEC_REF_CLK__FEC_TX_CLK 0x180 |
73 | + MX53_PAD_FEC_RX_ER__FEC_RX_ER 0x180 |
74 | + MX53_PAD_FEC_CRS_DV__FEC_RX_DV 0x180 |
75 | + MX53_PAD_FEC_RXD1__FEC_RDATA_1 0x180 |
76 | + MX53_PAD_FEC_RXD0__FEC_RDATA_0 0x180 |
77 | + MX53_PAD_FEC_TX_EN__FEC_TX_EN 0x4 |
78 | + MX53_PAD_FEC_TXD1__FEC_TDATA_1 0x4 |
79 | + MX53_PAD_FEC_TXD0__FEC_TDATA_0 0x4 |
80 | >; |
81 | }; |
82 | |
83 | diff --git a/arch/arm/boot/dts/stih410.dtsi b/arch/arm/boot/dts/stih410.dtsi |
84 | index a3ef7341c051..4d329b2908be 100644 |
85 | --- a/arch/arm/boot/dts/stih410.dtsi |
86 | +++ b/arch/arm/boot/dts/stih410.dtsi |
87 | @@ -131,7 +131,7 @@ |
88 | <&clk_s_d2_quadfs 0>; |
89 | |
90 | assigned-clock-rates = <297000000>, |
91 | - <108000000>, |
92 | + <297000000>, |
93 | <0>, |
94 | <400000000>, |
95 | <400000000>; |
96 | diff --git a/arch/arm/configs/omap2plus_defconfig b/arch/arm/configs/omap2plus_defconfig |
97 | index 53e1a884a1ea..66d71963761d 100644 |
98 | --- a/arch/arm/configs/omap2plus_defconfig |
99 | +++ b/arch/arm/configs/omap2plus_defconfig |
100 | @@ -216,6 +216,7 @@ CONFIG_SERIO=m |
101 | CONFIG_SERIAL_8250=y |
102 | CONFIG_SERIAL_8250_CONSOLE=y |
103 | CONFIG_SERIAL_8250_NR_UARTS=32 |
104 | +CONFIG_SERIAL_8250_RUNTIME_UARTS=6 |
105 | CONFIG_SERIAL_8250_EXTENDED=y |
106 | CONFIG_SERIAL_8250_MANY_PORTS=y |
107 | CONFIG_SERIAL_8250_SHARE_IRQ=y |
108 | diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c |
109 | index 9688ec0c6ef4..1b304897aa12 100644 |
110 | --- a/arch/arm/kernel/traps.c |
111 | +++ b/arch/arm/kernel/traps.c |
112 | @@ -152,30 +152,26 @@ static void dump_mem(const char *lvl, const char *str, unsigned long bottom, |
113 | set_fs(fs); |
114 | } |
115 | |
116 | -static void dump_instr(const char *lvl, struct pt_regs *regs) |
117 | +static void __dump_instr(const char *lvl, struct pt_regs *regs) |
118 | { |
119 | unsigned long addr = instruction_pointer(regs); |
120 | const int thumb = thumb_mode(regs); |
121 | const int width = thumb ? 4 : 8; |
122 | - mm_segment_t fs; |
123 | char str[sizeof("00000000 ") * 5 + 2 + 1], *p = str; |
124 | int i; |
125 | |
126 | /* |
127 | - * We need to switch to kernel mode so that we can use __get_user |
128 | - * to safely read from kernel space. Note that we now dump the |
129 | - * code first, just in case the backtrace kills us. |
130 | + * Note that we now dump the code first, just in case the backtrace |
131 | + * kills us. |
132 | */ |
133 | - fs = get_fs(); |
134 | - set_fs(KERNEL_DS); |
135 | |
136 | for (i = -4; i < 1 + !!thumb; i++) { |
137 | unsigned int val, bad; |
138 | |
139 | if (thumb) |
140 | - bad = __get_user(val, &((u16 *)addr)[i]); |
141 | + bad = get_user(val, &((u16 *)addr)[i]); |
142 | else |
143 | - bad = __get_user(val, &((u32 *)addr)[i]); |
144 | + bad = get_user(val, &((u32 *)addr)[i]); |
145 | |
146 | if (!bad) |
147 | p += sprintf(p, i == 0 ? "(%0*x) " : "%0*x ", |
148 | @@ -186,8 +182,20 @@ static void dump_instr(const char *lvl, struct pt_regs *regs) |
149 | } |
150 | } |
151 | printk("%sCode: %s\n", lvl, str); |
152 | +} |
153 | |
154 | - set_fs(fs); |
155 | +static void dump_instr(const char *lvl, struct pt_regs *regs) |
156 | +{ |
157 | + mm_segment_t fs; |
158 | + |
159 | + if (!user_mode(regs)) { |
160 | + fs = get_fs(); |
161 | + set_fs(KERNEL_DS); |
162 | + __dump_instr(lvl, regs); |
163 | + set_fs(fs); |
164 | + } else { |
165 | + __dump_instr(lvl, regs); |
166 | + } |
167 | } |
168 | |
169 | #ifdef CONFIG_ARM_UNWIND |
170 | diff --git a/arch/arm64/mm/dma-mapping.c b/arch/arm64/mm/dma-mapping.c |
171 | index b5bf46ce873b..cab3574ab7d9 100644 |
172 | --- a/arch/arm64/mm/dma-mapping.c |
173 | +++ b/arch/arm64/mm/dma-mapping.c |
174 | @@ -836,14 +836,21 @@ static bool do_iommu_attach(struct device *dev, const struct iommu_ops *ops, |
175 | * then the IOMMU core will have already configured a group for this |
176 | * device, and allocated the default domain for that group. |
177 | */ |
178 | - if (!domain || iommu_dma_init_domain(domain, dma_base, size, dev)) { |
179 | - pr_warn("Failed to set up IOMMU for device %s; retaining platform DMA ops\n", |
180 | - dev_name(dev)); |
181 | - return false; |
182 | + if (!domain) |
183 | + goto out_err; |
184 | + |
185 | + if (domain->type == IOMMU_DOMAIN_DMA) { |
186 | + if (iommu_dma_init_domain(domain, dma_base, size, dev)) |
187 | + goto out_err; |
188 | + |
189 | + dev->archdata.dma_ops = &iommu_dma_ops; |
190 | } |
191 | |
192 | - dev->archdata.dma_ops = &iommu_dma_ops; |
193 | return true; |
194 | +out_err: |
195 | + pr_warn("Failed to set up IOMMU for device %s; retaining platform DMA ops\n", |
196 | + dev_name(dev)); |
197 | + return false; |
198 | } |
199 | |
200 | static void queue_iommu_attach(struct device *dev, const struct iommu_ops *ops, |
201 | diff --git a/arch/mips/ar7/platform.c b/arch/mips/ar7/platform.c |
202 | index 58fca9ad5fcc..3446b6fb3acb 100644 |
203 | --- a/arch/mips/ar7/platform.c |
204 | +++ b/arch/mips/ar7/platform.c |
205 | @@ -576,6 +576,7 @@ static int __init ar7_register_uarts(void) |
206 | uart_port.type = PORT_AR7; |
207 | uart_port.uartclk = clk_get_rate(bus_clk) / 2; |
208 | uart_port.iotype = UPIO_MEM32; |
209 | + uart_port.flags = UPF_FIXED_TYPE; |
210 | uart_port.regshift = 2; |
211 | |
212 | uart_port.line = 0; |
213 | @@ -654,6 +655,10 @@ static int __init ar7_register_devices(void) |
214 | u32 val; |
215 | int res; |
216 | |
217 | + res = ar7_gpio_init(); |
218 | + if (res) |
219 | + pr_warn("unable to register gpios: %d\n", res); |
220 | + |
221 | res = ar7_register_uarts(); |
222 | if (res) |
223 | pr_err("unable to setup uart(s): %d\n", res); |
224 | diff --git a/arch/mips/ar7/prom.c b/arch/mips/ar7/prom.c |
225 | index a23adc49d50f..36aabee9cba4 100644 |
226 | --- a/arch/mips/ar7/prom.c |
227 | +++ b/arch/mips/ar7/prom.c |
228 | @@ -246,8 +246,6 @@ void __init prom_init(void) |
229 | ar7_init_cmdline(fw_arg0, (char **)fw_arg1); |
230 | ar7_init_env((struct env_var *)fw_arg2); |
231 | console_config(); |
232 | - |
233 | - ar7_gpio_init(); |
234 | } |
235 | |
236 | #define PORT(offset) (KSEG1ADDR(AR7_REGS_UART0 + (offset * 4))) |
237 | diff --git a/arch/mips/include/asm/mips-cm.h b/arch/mips/include/asm/mips-cm.h |
238 | index 2e4180797b21..b6845db453a3 100644 |
239 | --- a/arch/mips/include/asm/mips-cm.h |
240 | +++ b/arch/mips/include/asm/mips-cm.h |
241 | @@ -239,8 +239,8 @@ BUILD_CM_Cx_R_(tcid_8_priority, 0x80) |
242 | #define CM_GCR_BASE_GCRBASE_MSK (_ULCAST_(0x1ffff) << 15) |
243 | #define CM_GCR_BASE_CMDEFTGT_SHF 0 |
244 | #define CM_GCR_BASE_CMDEFTGT_MSK (_ULCAST_(0x3) << 0) |
245 | -#define CM_GCR_BASE_CMDEFTGT_DISABLED 0 |
246 | -#define CM_GCR_BASE_CMDEFTGT_MEM 1 |
247 | +#define CM_GCR_BASE_CMDEFTGT_MEM 0 |
248 | +#define CM_GCR_BASE_CMDEFTGT_RESERVED 1 |
249 | #define CM_GCR_BASE_CMDEFTGT_IOCU0 2 |
250 | #define CM_GCR_BASE_CMDEFTGT_IOCU1 3 |
251 | |
252 | diff --git a/arch/mips/kernel/process.c b/arch/mips/kernel/process.c |
253 | index 1b50958a1373..c558bce989cd 100644 |
254 | --- a/arch/mips/kernel/process.c |
255 | +++ b/arch/mips/kernel/process.c |
256 | @@ -50,9 +50,7 @@ |
257 | #ifdef CONFIG_HOTPLUG_CPU |
258 | void arch_cpu_idle_dead(void) |
259 | { |
260 | - /* What the heck is this check doing ? */ |
261 | - if (!cpumask_test_cpu(smp_processor_id(), &cpu_callin_map)) |
262 | - play_dead(); |
263 | + play_dead(); |
264 | } |
265 | #endif |
266 | |
267 | diff --git a/arch/mips/kernel/smp-bmips.c b/arch/mips/kernel/smp-bmips.c |
268 | index 6d0f1321e084..47c9646f93b3 100644 |
269 | --- a/arch/mips/kernel/smp-bmips.c |
270 | +++ b/arch/mips/kernel/smp-bmips.c |
271 | @@ -587,11 +587,11 @@ void __init bmips_cpu_setup(void) |
272 | |
273 | /* Flush and enable RAC */ |
274 | cfg = __raw_readl(cbr + BMIPS_RAC_CONFIG); |
275 | - __raw_writel(cfg | 0x100, BMIPS_RAC_CONFIG); |
276 | + __raw_writel(cfg | 0x100, cbr + BMIPS_RAC_CONFIG); |
277 | __raw_readl(cbr + BMIPS_RAC_CONFIG); |
278 | |
279 | cfg = __raw_readl(cbr + BMIPS_RAC_CONFIG); |
280 | - __raw_writel(cfg | 0xf, BMIPS_RAC_CONFIG); |
281 | + __raw_writel(cfg | 0xf, cbr + BMIPS_RAC_CONFIG); |
282 | __raw_readl(cbr + BMIPS_RAC_CONFIG); |
283 | |
284 | cfg = __raw_readl(cbr + BMIPS_RAC_ADDRESS_RANGE); |
285 | diff --git a/arch/mips/kernel/smp.c b/arch/mips/kernel/smp.c |
286 | index 7ebb1918e2ac..95ba4271af6a 100644 |
287 | --- a/arch/mips/kernel/smp.c |
288 | +++ b/arch/mips/kernel/smp.c |
289 | @@ -68,6 +68,9 @@ EXPORT_SYMBOL(cpu_sibling_map); |
290 | cpumask_t cpu_core_map[NR_CPUS] __read_mostly; |
291 | EXPORT_SYMBOL(cpu_core_map); |
292 | |
293 | +static DECLARE_COMPLETION(cpu_starting); |
294 | +static DECLARE_COMPLETION(cpu_running); |
295 | + |
296 | /* |
297 | * A logcal cpu mask containing only one VPE per core to |
298 | * reduce the number of IPIs on large MT systems. |
299 | @@ -369,9 +372,12 @@ asmlinkage void start_secondary(void) |
300 | cpumask_set_cpu(cpu, &cpu_coherent_mask); |
301 | notify_cpu_starting(cpu); |
302 | |
303 | - cpumask_set_cpu(cpu, &cpu_callin_map); |
304 | + /* Notify boot CPU that we're starting & ready to sync counters */ |
305 | + complete(&cpu_starting); |
306 | + |
307 | synchronise_count_slave(cpu); |
308 | |
309 | + /* The CPU is running and counters synchronised, now mark it online */ |
310 | set_cpu_online(cpu, true); |
311 | |
312 | set_cpu_sibling_map(cpu); |
313 | @@ -379,6 +385,12 @@ asmlinkage void start_secondary(void) |
314 | |
315 | calculate_cpu_foreign_map(); |
316 | |
317 | + /* |
318 | + * Notify boot CPU that we're up & online and it can safely return |
319 | + * from __cpu_up |
320 | + */ |
321 | + complete(&cpu_running); |
322 | + |
323 | /* |
324 | * irq will be enabled in ->smp_finish(), enabling it too early |
325 | * is dangerous. |
326 | @@ -430,22 +442,23 @@ void smp_prepare_boot_cpu(void) |
327 | { |
328 | set_cpu_possible(0, true); |
329 | set_cpu_online(0, true); |
330 | - cpumask_set_cpu(0, &cpu_callin_map); |
331 | } |
332 | |
333 | int __cpu_up(unsigned int cpu, struct task_struct *tidle) |
334 | { |
335 | mp_ops->boot_secondary(cpu, tidle); |
336 | |
337 | - /* |
338 | - * Trust is futile. We should really have timeouts ... |
339 | - */ |
340 | - while (!cpumask_test_cpu(cpu, &cpu_callin_map)) { |
341 | - udelay(100); |
342 | - schedule(); |
343 | + /* Wait for CPU to start and be ready to sync counters */ |
344 | + if (!wait_for_completion_timeout(&cpu_starting, |
345 | + msecs_to_jiffies(1000))) { |
346 | + pr_crit("CPU%u: failed to start\n", cpu); |
347 | + return -EIO; |
348 | } |
349 | |
350 | synchronise_count_master(cpu); |
351 | + |
352 | + /* Wait for CPU to finish startup & mark itself online before return */ |
353 | + wait_for_completion(&cpu_running); |
354 | return 0; |
355 | } |
356 | |
357 | diff --git a/arch/mips/mm/uasm-micromips.c b/arch/mips/mm/uasm-micromips.c |
358 | index 277cf52d80e1..6c17cba7f383 100644 |
359 | --- a/arch/mips/mm/uasm-micromips.c |
360 | +++ b/arch/mips/mm/uasm-micromips.c |
361 | @@ -80,7 +80,7 @@ static struct insn insn_table_MM[] = { |
362 | { insn_jr, M(mm_pool32a_op, 0, 0, 0, mm_jalr_op, mm_pool32axf_op), RS }, |
363 | { insn_lb, M(mm_lb32_op, 0, 0, 0, 0, 0), RT | RS | SIMM }, |
364 | { insn_ld, 0, 0 }, |
365 | - { insn_lh, M(mm_lh32_op, 0, 0, 0, 0, 0), RS | RS | SIMM }, |
366 | + { insn_lh, M(mm_lh32_op, 0, 0, 0, 0, 0), RT | RS | SIMM }, |
367 | { insn_ll, M(mm_pool32c_op, 0, 0, (mm_ll_func << 1), 0, 0), RS | RT | SIMM }, |
368 | { insn_lld, 0, 0 }, |
369 | { insn_lui, M(mm_pool32i_op, mm_lui_op, 0, 0, 0, 0), RS | SIMM }, |
370 | diff --git a/arch/powerpc/boot/dts/fsl/kmcoge4.dts b/arch/powerpc/boot/dts/fsl/kmcoge4.dts |
371 | index ae70a24094b0..e103c0f3f650 100644 |
372 | --- a/arch/powerpc/boot/dts/fsl/kmcoge4.dts |
373 | +++ b/arch/powerpc/boot/dts/fsl/kmcoge4.dts |
374 | @@ -83,6 +83,10 @@ |
375 | }; |
376 | }; |
377 | |
378 | + sdhc@114000 { |
379 | + status = "disabled"; |
380 | + }; |
381 | + |
382 | i2c@119000 { |
383 | status = "disabled"; |
384 | }; |
385 | diff --git a/arch/powerpc/kernel/time.c b/arch/powerpc/kernel/time.c |
386 | index bc3f7d0d7b79..f1d7e996e673 100644 |
387 | --- a/arch/powerpc/kernel/time.c |
388 | +++ b/arch/powerpc/kernel/time.c |
389 | @@ -407,6 +407,7 @@ void arch_vtime_task_switch(struct task_struct *prev) |
390 | struct cpu_accounting_data *acct = get_accounting(current); |
391 | |
392 | acct->starttime = get_accounting(prev)->starttime; |
393 | + acct->startspurr = get_accounting(prev)->startspurr; |
394 | acct->system_time = 0; |
395 | acct->user_time = 0; |
396 | } |
397 | diff --git a/arch/powerpc/kvm/book3s_hv_rm_xics.c b/arch/powerpc/kvm/book3s_hv_rm_xics.c |
398 | index a0ea63ac2b52..a8e3498a853f 100644 |
399 | --- a/arch/powerpc/kvm/book3s_hv_rm_xics.c |
400 | +++ b/arch/powerpc/kvm/book3s_hv_rm_xics.c |
401 | @@ -376,6 +376,7 @@ static void icp_rm_deliver_irq(struct kvmppc_xics *xics, struct kvmppc_icp *icp, |
402 | */ |
403 | if (reject && reject != XICS_IPI) { |
404 | arch_spin_unlock(&ics->lock); |
405 | + icp->n_reject++; |
406 | new_irq = reject; |
407 | goto again; |
408 | } |
409 | @@ -707,10 +708,8 @@ int kvmppc_rm_h_eoi(struct kvm_vcpu *vcpu, unsigned long xirr) |
410 | state = &ics->irq_state[src]; |
411 | |
412 | /* Still asserted, resend it */ |
413 | - if (state->asserted) { |
414 | - icp->n_reject++; |
415 | + if (state->asserted) |
416 | icp_rm_deliver_irq(xics, icp, irq); |
417 | - } |
418 | |
419 | if (!hlist_empty(&vcpu->kvm->irq_ack_notifier_list)) { |
420 | icp->rm_action |= XICS_RM_NOTIFY_EOI; |
421 | diff --git a/arch/s390/kernel/early.c b/arch/s390/kernel/early.c |
422 | index 2374c5b46bbc..0c196861bc38 100644 |
423 | --- a/arch/s390/kernel/early.c |
424 | +++ b/arch/s390/kernel/early.c |
425 | @@ -363,6 +363,18 @@ static inline void save_vector_registers(void) |
426 | #endif |
427 | } |
428 | |
429 | +static int __init topology_setup(char *str) |
430 | +{ |
431 | + bool enabled; |
432 | + int rc; |
433 | + |
434 | + rc = kstrtobool(str, &enabled); |
435 | + if (!rc && !enabled) |
436 | + S390_lowcore.machine_flags &= ~MACHINE_HAS_TOPOLOGY; |
437 | + return rc; |
438 | +} |
439 | +early_param("topology", topology_setup); |
440 | + |
441 | static int __init disable_vector_extension(char *str) |
442 | { |
443 | S390_lowcore.machine_flags &= ~MACHINE_FLAG_VX; |
444 | diff --git a/arch/s390/kernel/topology.c b/arch/s390/kernel/topology.c |
445 | index 8705ee66c087..239f29508f0b 100644 |
446 | --- a/arch/s390/kernel/topology.c |
447 | +++ b/arch/s390/kernel/topology.c |
448 | @@ -37,7 +37,6 @@ static void set_topology_timer(void); |
449 | static void topology_work_fn(struct work_struct *work); |
450 | static struct sysinfo_15_1_x *tl_info; |
451 | |
452 | -static bool topology_enabled = true; |
453 | static DECLARE_WORK(topology_work, topology_work_fn); |
454 | |
455 | /* |
456 | @@ -56,7 +55,7 @@ static cpumask_t cpu_group_map(struct mask_info *info, unsigned int cpu) |
457 | cpumask_t mask; |
458 | |
459 | cpumask_copy(&mask, cpumask_of(cpu)); |
460 | - if (!topology_enabled || !MACHINE_HAS_TOPOLOGY) |
461 | + if (!MACHINE_HAS_TOPOLOGY) |
462 | return mask; |
463 | for (; info; info = info->next) { |
464 | if (cpumask_test_cpu(cpu, &info->mask)) |
465 | @@ -71,7 +70,7 @@ static cpumask_t cpu_thread_map(unsigned int cpu) |
466 | int i; |
467 | |
468 | cpumask_copy(&mask, cpumask_of(cpu)); |
469 | - if (!topology_enabled || !MACHINE_HAS_TOPOLOGY) |
470 | + if (!MACHINE_HAS_TOPOLOGY) |
471 | return mask; |
472 | cpu -= cpu % (smp_cpu_mtid + 1); |
473 | for (i = 0; i <= smp_cpu_mtid; i++) |
474 | @@ -413,12 +412,6 @@ static const struct cpumask *cpu_drawer_mask(int cpu) |
475 | return &per_cpu(cpu_topology, cpu).drawer_mask; |
476 | } |
477 | |
478 | -static int __init early_parse_topology(char *p) |
479 | -{ |
480 | - return kstrtobool(p, &topology_enabled); |
481 | -} |
482 | -early_param("topology", early_parse_topology); |
483 | - |
484 | static struct sched_domain_topology_level s390_topology[] = { |
485 | { cpu_thread_mask, cpu_smt_flags, SD_INIT_NAME(SMT) }, |
486 | { cpu_coregroup_mask, cpu_core_flags, SD_INIT_NAME(MC) }, |
487 | diff --git a/arch/sh/kernel/cpu/sh3/setup-sh770x.c b/arch/sh/kernel/cpu/sh3/setup-sh770x.c |
488 | index 538c10db3537..8dc315b212c2 100644 |
489 | --- a/arch/sh/kernel/cpu/sh3/setup-sh770x.c |
490 | +++ b/arch/sh/kernel/cpu/sh3/setup-sh770x.c |
491 | @@ -165,7 +165,6 @@ static struct plat_sci_port scif2_platform_data = { |
492 | .scscr = SCSCR_TE | SCSCR_RE, |
493 | .type = PORT_IRDA, |
494 | .ops = &sh770x_sci_port_ops, |
495 | - .regshift = 1, |
496 | }; |
497 | |
498 | static struct resource scif2_resources[] = { |
499 | diff --git a/arch/x86/crypto/sha1-mb/sha1_mb_mgr_flush_avx2.S b/arch/x86/crypto/sha1-mb/sha1_mb_mgr_flush_avx2.S |
500 | index 96df6a39d7e2..a2ae6891e1fc 100644 |
501 | --- a/arch/x86/crypto/sha1-mb/sha1_mb_mgr_flush_avx2.S |
502 | +++ b/arch/x86/crypto/sha1-mb/sha1_mb_mgr_flush_avx2.S |
503 | @@ -157,8 +157,8 @@ LABEL skip_ %I |
504 | .endr |
505 | |
506 | # Find min length |
507 | - vmovdqa _lens+0*16(state), %xmm0 |
508 | - vmovdqa _lens+1*16(state), %xmm1 |
509 | + vmovdqu _lens+0*16(state), %xmm0 |
510 | + vmovdqu _lens+1*16(state), %xmm1 |
511 | |
512 | vpminud %xmm1, %xmm0, %xmm2 # xmm2 has {D,C,B,A} |
513 | vpalignr $8, %xmm2, %xmm3, %xmm3 # xmm3 has {x,x,D,C} |
514 | @@ -178,8 +178,8 @@ LABEL skip_ %I |
515 | vpsubd %xmm2, %xmm0, %xmm0 |
516 | vpsubd %xmm2, %xmm1, %xmm1 |
517 | |
518 | - vmovdqa %xmm0, _lens+0*16(state) |
519 | - vmovdqa %xmm1, _lens+1*16(state) |
520 | + vmovdqu %xmm0, _lens+0*16(state) |
521 | + vmovdqu %xmm1, _lens+1*16(state) |
522 | |
523 | # "state" and "args" are the same address, arg1 |
524 | # len is arg2 |
525 | @@ -235,8 +235,8 @@ ENTRY(sha1_mb_mgr_get_comp_job_avx2) |
526 | jc .return_null |
527 | |
528 | # Find min length |
529 | - vmovdqa _lens(state), %xmm0 |
530 | - vmovdqa _lens+1*16(state), %xmm1 |
531 | + vmovdqu _lens(state), %xmm0 |
532 | + vmovdqu _lens+1*16(state), %xmm1 |
533 | |
534 | vpminud %xmm1, %xmm0, %xmm2 # xmm2 has {D,C,B,A} |
535 | vpalignr $8, %xmm2, %xmm3, %xmm3 # xmm3 has {x,x,D,C} |
536 | diff --git a/arch/x86/crypto/sha256-mb/sha256_mb_mgr_flush_avx2.S b/arch/x86/crypto/sha256-mb/sha256_mb_mgr_flush_avx2.S |
537 | index a78a0694ddef..ec9bee661d50 100644 |
538 | --- a/arch/x86/crypto/sha256-mb/sha256_mb_mgr_flush_avx2.S |
539 | +++ b/arch/x86/crypto/sha256-mb/sha256_mb_mgr_flush_avx2.S |
540 | @@ -155,8 +155,8 @@ LABEL skip_ %I |
541 | .endr |
542 | |
543 | # Find min length |
544 | - vmovdqa _lens+0*16(state), %xmm0 |
545 | - vmovdqa _lens+1*16(state), %xmm1 |
546 | + vmovdqu _lens+0*16(state), %xmm0 |
547 | + vmovdqu _lens+1*16(state), %xmm1 |
548 | |
549 | vpminud %xmm1, %xmm0, %xmm2 # xmm2 has {D,C,B,A} |
550 | vpalignr $8, %xmm2, %xmm3, %xmm3 # xmm3 has {x,x,D,C} |
551 | @@ -176,8 +176,8 @@ LABEL skip_ %I |
552 | vpsubd %xmm2, %xmm0, %xmm0 |
553 | vpsubd %xmm2, %xmm1, %xmm1 |
554 | |
555 | - vmovdqa %xmm0, _lens+0*16(state) |
556 | - vmovdqa %xmm1, _lens+1*16(state) |
557 | + vmovdqu %xmm0, _lens+0*16(state) |
558 | + vmovdqu %xmm1, _lens+1*16(state) |
559 | |
560 | # "state" and "args" are the same address, arg1 |
561 | # len is arg2 |
562 | @@ -234,8 +234,8 @@ ENTRY(sha256_mb_mgr_get_comp_job_avx2) |
563 | jc .return_null |
564 | |
565 | # Find min length |
566 | - vmovdqa _lens(state), %xmm0 |
567 | - vmovdqa _lens+1*16(state), %xmm1 |
568 | + vmovdqu _lens(state), %xmm0 |
569 | + vmovdqu _lens+1*16(state), %xmm1 |
570 | |
571 | vpminud %xmm1, %xmm0, %xmm2 # xmm2 has {D,C,B,A} |
572 | vpalignr $8, %xmm2, %xmm3, %xmm3 # xmm3 has {x,x,D,C} |
573 | diff --git a/arch/x86/include/asm/uaccess.h b/arch/x86/include/asm/uaccess.h |
574 | index a300aa10ebc5..dead0f3921f3 100644 |
575 | --- a/arch/x86/include/asm/uaccess.h |
576 | +++ b/arch/x86/include/asm/uaccess.h |
577 | @@ -68,6 +68,12 @@ static inline bool __chk_range_not_ok(unsigned long addr, unsigned long size, un |
578 | __chk_range_not_ok((unsigned long __force)(addr), size, limit); \ |
579 | }) |
580 | |
581 | +#ifdef CONFIG_DEBUG_ATOMIC_SLEEP |
582 | +# define WARN_ON_IN_IRQ() WARN_ON_ONCE(!in_task()) |
583 | +#else |
584 | +# define WARN_ON_IN_IRQ() |
585 | +#endif |
586 | + |
587 | /** |
588 | * access_ok: - Checks if a user space pointer is valid |
589 | * @type: Type of access: %VERIFY_READ or %VERIFY_WRITE. Note that |
590 | @@ -88,8 +94,11 @@ static inline bool __chk_range_not_ok(unsigned long addr, unsigned long size, un |
591 | * checks that the pointer is in the user space range - after calling |
592 | * this function, memory access functions may still return -EFAULT. |
593 | */ |
594 | -#define access_ok(type, addr, size) \ |
595 | - likely(!__range_not_ok(addr, size, user_addr_max())) |
596 | +#define access_ok(type, addr, size) \ |
597 | +({ \ |
598 | + WARN_ON_IN_IRQ(); \ |
599 | + likely(!__range_not_ok(addr, size, user_addr_max())); \ |
600 | +}) |
601 | |
602 | /* |
603 | * These are the main single-value transfer routines. They automatically |
604 | diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c |
605 | index 36171bcd91f8..9fe7b9e1ae30 100644 |
606 | --- a/arch/x86/kernel/smpboot.c |
607 | +++ b/arch/x86/kernel/smpboot.c |
608 | @@ -180,6 +180,12 @@ static void smp_callin(void) |
609 | */ |
610 | smp_store_cpu_info(cpuid); |
611 | |
612 | + /* |
613 | + * The topology information must be up to date before |
614 | + * calibrate_delay() and notify_cpu_starting(). |
615 | + */ |
616 | + set_cpu_sibling_map(raw_smp_processor_id()); |
617 | + |
618 | /* |
619 | * Get our bogomips. |
620 | * Update loops_per_jiffy in cpu_data. Previous call to |
621 | @@ -190,11 +196,6 @@ static void smp_callin(void) |
622 | cpu_data(cpuid).loops_per_jiffy = loops_per_jiffy; |
623 | pr_debug("Stack at about %p\n", &cpuid); |
624 | |
625 | - /* |
626 | - * This must be done before setting cpu_online_mask |
627 | - * or calling notify_cpu_starting. |
628 | - */ |
629 | - set_cpu_sibling_map(raw_smp_processor_id()); |
630 | wmb(); |
631 | |
632 | notify_cpu_starting(cpuid); |
633 | diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c |
634 | index 6e57edf33d75..44bf5cf417d3 100644 |
635 | --- a/arch/x86/kernel/tsc.c |
636 | +++ b/arch/x86/kernel/tsc.c |
637 | @@ -1382,12 +1382,10 @@ void __init tsc_init(void) |
638 | unsigned long calibrate_delay_is_known(void) |
639 | { |
640 | int sibling, cpu = smp_processor_id(); |
641 | - struct cpumask *mask = topology_core_cpumask(cpu); |
642 | + int constant_tsc = cpu_has(&cpu_data(cpu), X86_FEATURE_CONSTANT_TSC); |
643 | + const struct cpumask *mask = topology_core_cpumask(cpu); |
644 | |
645 | - if (!tsc_disabled && !cpu_has(&cpu_data(cpu), X86_FEATURE_CONSTANT_TSC)) |
646 | - return 0; |
647 | - |
648 | - if (!mask) |
649 | + if (tsc_disabled || !constant_tsc || !mask) |
650 | return 0; |
651 | |
652 | sibling = cpumask_any_but(mask, cpu); |
653 | diff --git a/arch/x86/oprofile/op_model_ppro.c b/arch/x86/oprofile/op_model_ppro.c |
654 | index 350f7096baac..7913b6921959 100644 |
655 | --- a/arch/x86/oprofile/op_model_ppro.c |
656 | +++ b/arch/x86/oprofile/op_model_ppro.c |
657 | @@ -212,8 +212,8 @@ static void arch_perfmon_setup_counters(void) |
658 | eax.full = cpuid_eax(0xa); |
659 | |
660 | /* Workaround for BIOS bugs in 6/15. Taken from perfmon2 */ |
661 | - if (eax.split.version_id == 0 && __this_cpu_read(cpu_info.x86) == 6 && |
662 | - __this_cpu_read(cpu_info.x86_model) == 15) { |
663 | + if (eax.split.version_id == 0 && boot_cpu_data.x86 == 6 && |
664 | + boot_cpu_data.x86_model == 15) { |
665 | eax.split.version_id = 2; |
666 | eax.split.num_counters = 2; |
667 | eax.split.bit_width = 40; |
668 | diff --git a/crypto/ccm.c b/crypto/ccm.c |
669 | index 006d8575ef5c..b3ace633fae9 100644 |
670 | --- a/crypto/ccm.c |
671 | +++ b/crypto/ccm.c |
672 | @@ -413,7 +413,7 @@ static int crypto_ccm_decrypt(struct aead_request *req) |
673 | unsigned int cryptlen = req->cryptlen; |
674 | u8 *authtag = pctx->auth_tag; |
675 | u8 *odata = pctx->odata; |
676 | - u8 *iv = req->iv; |
677 | + u8 *iv = pctx->idata; |
678 | int err; |
679 | |
680 | cryptlen -= authsize; |
681 | @@ -429,6 +429,8 @@ static int crypto_ccm_decrypt(struct aead_request *req) |
682 | if (req->src != req->dst) |
683 | dst = pctx->dst; |
684 | |
685 | + memcpy(iv, req->iv, 16); |
686 | + |
687 | skcipher_request_set_tfm(skreq, ctx->ctr); |
688 | skcipher_request_set_callback(skreq, pctx->flags, |
689 | crypto_ccm_decrypt_done, req); |
690 | diff --git a/drivers/base/power/opp/of.c b/drivers/base/power/opp/of.c |
691 | index 5552211e6fcd..b52c617947ad 100644 |
692 | --- a/drivers/base/power/opp/of.c |
693 | +++ b/drivers/base/power/opp/of.c |
694 | @@ -386,7 +386,7 @@ static int _of_add_opp_table_v1(struct device *dev) |
695 | { |
696 | const struct property *prop; |
697 | const __be32 *val; |
698 | - int nr; |
699 | + int nr, ret; |
700 | |
701 | prop = of_find_property(dev->of_node, "operating-points", NULL); |
702 | if (!prop) |
703 | @@ -409,9 +409,13 @@ static int _of_add_opp_table_v1(struct device *dev) |
704 | unsigned long freq = be32_to_cpup(val++) * 1000; |
705 | unsigned long volt = be32_to_cpup(val++); |
706 | |
707 | - if (_opp_add_v1(dev, freq, volt, false)) |
708 | - dev_warn(dev, "%s: Failed to add OPP %ld\n", |
709 | - __func__, freq); |
710 | + ret = _opp_add_v1(dev, freq, volt, false); |
711 | + if (ret) { |
712 | + dev_err(dev, "%s: Failed to add OPP %ld (%d)\n", |
713 | + __func__, freq, ret); |
714 | + dev_pm_opp_of_remove_table(dev); |
715 | + return ret; |
716 | + } |
717 | nr -= 2; |
718 | } |
719 | |
720 | diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c |
721 | index 7b274ff4632c..24f4b544d270 100644 |
722 | --- a/drivers/block/rbd.c |
723 | +++ b/drivers/block/rbd.c |
724 | @@ -2788,7 +2788,7 @@ static int rbd_img_obj_parent_read_full(struct rbd_obj_request *obj_request) |
725 | * from the parent. |
726 | */ |
727 | page_count = (u32)calc_pages_for(0, length); |
728 | - pages = ceph_alloc_page_vector(page_count, GFP_KERNEL); |
729 | + pages = ceph_alloc_page_vector(page_count, GFP_NOIO); |
730 | if (IS_ERR(pages)) { |
731 | result = PTR_ERR(pages); |
732 | pages = NULL; |
733 | @@ -2922,7 +2922,7 @@ static int rbd_img_obj_exists_submit(struct rbd_obj_request *obj_request) |
734 | */ |
735 | size = sizeof (__le64) + sizeof (__le32) + sizeof (__le32); |
736 | page_count = (u32)calc_pages_for(0, size); |
737 | - pages = ceph_alloc_page_vector(page_count, GFP_KERNEL); |
738 | + pages = ceph_alloc_page_vector(page_count, GFP_NOIO); |
739 | if (IS_ERR(pages)) { |
740 | ret = PTR_ERR(pages); |
741 | goto fail_stat_request; |
742 | diff --git a/drivers/clk/mvebu/ap806-system-controller.c b/drivers/clk/mvebu/ap806-system-controller.c |
743 | index 02023baf86c9..962e0c5f6f4d 100644 |
744 | --- a/drivers/clk/mvebu/ap806-system-controller.c |
745 | +++ b/drivers/clk/mvebu/ap806-system-controller.c |
746 | @@ -55,21 +55,39 @@ static int ap806_syscon_clk_probe(struct platform_device *pdev) |
747 | |
748 | freq_mode = reg & AP806_SAR_CLKFREQ_MODE_MASK; |
749 | switch (freq_mode) { |
750 | - case 0x0 ... 0x5: |
751 | + case 0x0: |
752 | + case 0x1: |
753 | cpuclk_freq = 2000; |
754 | break; |
755 | - case 0x6 ... 0xB: |
756 | + case 0x6: |
757 | + case 0x7: |
758 | cpuclk_freq = 1800; |
759 | break; |
760 | - case 0xC ... 0x11: |
761 | + case 0x4: |
762 | + case 0xB: |
763 | + case 0xD: |
764 | cpuclk_freq = 1600; |
765 | break; |
766 | - case 0x12 ... 0x16: |
767 | + case 0x1a: |
768 | cpuclk_freq = 1400; |
769 | break; |
770 | - case 0x17 ... 0x19: |
771 | + case 0x14: |
772 | + case 0x17: |
773 | cpuclk_freq = 1300; |
774 | break; |
775 | + case 0x19: |
776 | + cpuclk_freq = 1200; |
777 | + break; |
778 | + case 0x13: |
779 | + case 0x1d: |
780 | + cpuclk_freq = 1000; |
781 | + break; |
782 | + case 0x1c: |
783 | + cpuclk_freq = 800; |
784 | + break; |
785 | + case 0x1b: |
786 | + cpuclk_freq = 600; |
787 | + break; |
788 | default: |
789 | dev_err(&pdev->dev, "invalid SAR value\n"); |
790 | return -EINVAL; |
791 | diff --git a/drivers/clk/samsung/clk-exynos5433.c b/drivers/clk/samsung/clk-exynos5433.c |
792 | index ea1608682d7f..2fe057326552 100644 |
793 | --- a/drivers/clk/samsung/clk-exynos5433.c |
794 | +++ b/drivers/clk/samsung/clk-exynos5433.c |
795 | @@ -2559,8 +2559,10 @@ static const struct samsung_fixed_rate_clock disp_fixed_clks[] __initconst = { |
796 | FRATE(0, "phyclk_mipidphy1_bitclkdiv8_phy", NULL, 0, 188000000), |
797 | FRATE(0, "phyclk_mipidphy1_rxclkesc0_phy", NULL, 0, 100000000), |
798 | /* PHY clocks from MIPI_DPHY0 */ |
799 | - FRATE(0, "phyclk_mipidphy0_bitclkdiv8_phy", NULL, 0, 188000000), |
800 | - FRATE(0, "phyclk_mipidphy0_rxclkesc0_phy", NULL, 0, 100000000), |
801 | + FRATE(CLK_PHYCLK_MIPIDPHY0_BITCLKDIV8_PHY, "phyclk_mipidphy0_bitclkdiv8_phy", |
802 | + NULL, 0, 188000000), |
803 | + FRATE(CLK_PHYCLK_MIPIDPHY0_RXCLKESC0_PHY, "phyclk_mipidphy0_rxclkesc0_phy", |
804 | + NULL, 0, 100000000), |
805 | /* PHY clocks from HDMI_PHY */ |
806 | FRATE(CLK_PHYCLK_HDMIPHY_TMDS_CLKO_PHY, "phyclk_hdmiphy_tmds_clko_phy", |
807 | NULL, 0, 300000000), |
808 | diff --git a/drivers/crypto/vmx/aes_ctr.c b/drivers/crypto/vmx/aes_ctr.c |
809 | index 38ed10d761d0..7cf6d31c1123 100644 |
810 | --- a/drivers/crypto/vmx/aes_ctr.c |
811 | +++ b/drivers/crypto/vmx/aes_ctr.c |
812 | @@ -80,11 +80,13 @@ static int p8_aes_ctr_setkey(struct crypto_tfm *tfm, const u8 *key, |
813 | int ret; |
814 | struct p8_aes_ctr_ctx *ctx = crypto_tfm_ctx(tfm); |
815 | |
816 | + preempt_disable(); |
817 | pagefault_disable(); |
818 | enable_kernel_vsx(); |
819 | ret = aes_p8_set_encrypt_key(key, keylen * 8, &ctx->enc_key); |
820 | disable_kernel_vsx(); |
821 | pagefault_enable(); |
822 | + preempt_enable(); |
823 | |
824 | ret += crypto_blkcipher_setkey(ctx->fallback, key, keylen); |
825 | return ret; |
826 | @@ -99,11 +101,13 @@ static void p8_aes_ctr_final(struct p8_aes_ctr_ctx *ctx, |
827 | u8 *dst = walk->dst.virt.addr; |
828 | unsigned int nbytes = walk->nbytes; |
829 | |
830 | + preempt_disable(); |
831 | pagefault_disable(); |
832 | enable_kernel_vsx(); |
833 | aes_p8_encrypt(ctrblk, keystream, &ctx->enc_key); |
834 | disable_kernel_vsx(); |
835 | pagefault_enable(); |
836 | + preempt_enable(); |
837 | |
838 | crypto_xor(keystream, src, nbytes); |
839 | memcpy(dst, keystream, nbytes); |
840 | @@ -132,6 +136,7 @@ static int p8_aes_ctr_crypt(struct blkcipher_desc *desc, |
841 | blkcipher_walk_init(&walk, dst, src, nbytes); |
842 | ret = blkcipher_walk_virt_block(desc, &walk, AES_BLOCK_SIZE); |
843 | while ((nbytes = walk.nbytes) >= AES_BLOCK_SIZE) { |
844 | + preempt_disable(); |
845 | pagefault_disable(); |
846 | enable_kernel_vsx(); |
847 | aes_p8_ctr32_encrypt_blocks(walk.src.virt.addr, |
848 | @@ -143,6 +148,7 @@ static int p8_aes_ctr_crypt(struct blkcipher_desc *desc, |
849 | walk.iv); |
850 | disable_kernel_vsx(); |
851 | pagefault_enable(); |
852 | + preempt_enable(); |
853 | |
854 | /* We need to update IV mostly for last bytes/round */ |
855 | inc = (nbytes & AES_BLOCK_MASK) / AES_BLOCK_SIZE; |
856 | diff --git a/drivers/edac/amd64_edac.c b/drivers/edac/amd64_edac.c |
857 | index ee181c53626f..6e197c1c213d 100644 |
858 | --- a/drivers/edac/amd64_edac.c |
859 | +++ b/drivers/edac/amd64_edac.c |
860 | @@ -2984,8 +2984,11 @@ static int __init amd64_edac_init(void) |
861 | int err = -ENODEV; |
862 | int i; |
863 | |
864 | + if (!x86_match_cpu(amd64_cpuids)) |
865 | + return -ENODEV; |
866 | + |
867 | if (amd_cache_northbridges() < 0) |
868 | - goto err_ret; |
869 | + return -ENODEV; |
870 | |
871 | opstate_init(); |
872 | |
873 | @@ -2998,14 +3001,16 @@ static int __init amd64_edac_init(void) |
874 | if (!msrs) |
875 | goto err_free; |
876 | |
877 | - for (i = 0; i < amd_nb_num(); i++) |
878 | - if (probe_one_instance(i)) { |
879 | + for (i = 0; i < amd_nb_num(); i++) { |
880 | + err = probe_one_instance(i); |
881 | + if (err) { |
882 | /* unwind properly */ |
883 | while (--i >= 0) |
884 | remove_one_instance(i); |
885 | |
886 | goto err_pci; |
887 | } |
888 | + } |
889 | |
890 | setup_pci_device(); |
891 | |
892 | @@ -3025,7 +3030,6 @@ static int __init amd64_edac_init(void) |
893 | kfree(ecc_stngs); |
894 | ecc_stngs = NULL; |
895 | |
896 | -err_ret: |
897 | return err; |
898 | } |
899 | |
900 | diff --git a/drivers/edac/amd64_edac.h b/drivers/edac/amd64_edac.h |
901 | index c08870479054..dcb5f9481735 100644 |
902 | --- a/drivers/edac/amd64_edac.h |
903 | +++ b/drivers/edac/amd64_edac.h |
904 | @@ -16,6 +16,7 @@ |
905 | #include <linux/slab.h> |
906 | #include <linux/mmzone.h> |
907 | #include <linux/edac.h> |
908 | +#include <asm/cpu_device_id.h> |
909 | #include <asm/msr.h> |
910 | #include "edac_core.h" |
911 | #include "mce_amd.h" |
912 | diff --git a/drivers/gpu/drm/arm/malidp_planes.c b/drivers/gpu/drm/arm/malidp_planes.c |
913 | index afe0480d95c9..8b009b549e45 100644 |
914 | --- a/drivers/gpu/drm/arm/malidp_planes.c |
915 | +++ b/drivers/gpu/drm/arm/malidp_planes.c |
916 | @@ -182,7 +182,8 @@ static void malidp_de_plane_update(struct drm_plane *plane, |
917 | |
918 | /* setup the rotation and axis flip bits */ |
919 | if (plane->state->rotation & DRM_ROTATE_MASK) |
920 | - val = ilog2(plane->state->rotation & DRM_ROTATE_MASK) << LAYER_ROT_OFFSET; |
921 | + val |= ilog2(plane->state->rotation & DRM_ROTATE_MASK) << |
922 | + LAYER_ROT_OFFSET; |
923 | if (plane->state->rotation & DRM_REFLECT_X) |
924 | val |= LAYER_H_FLIP; |
925 | if (plane->state->rotation & DRM_REFLECT_Y) |
926 | diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c |
927 | index 213d892b6fa3..a68f94daf9b6 100644 |
928 | --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c |
929 | +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c |
930 | @@ -325,7 +325,7 @@ static void adv7511_set_link_config(struct adv7511 *adv7511, |
931 | adv7511->rgb = config->input_colorspace == HDMI_COLORSPACE_RGB; |
932 | } |
933 | |
934 | -static void adv7511_power_on(struct adv7511 *adv7511) |
935 | +static void __adv7511_power_on(struct adv7511 *adv7511) |
936 | { |
937 | adv7511->current_edid_segment = -1; |
938 | |
939 | @@ -354,6 +354,11 @@ static void adv7511_power_on(struct adv7511 *adv7511) |
940 | regmap_update_bits(adv7511->regmap, ADV7511_REG_POWER2, |
941 | ADV7511_REG_POWER2_HPD_SRC_MASK, |
942 | ADV7511_REG_POWER2_HPD_SRC_NONE); |
943 | +} |
944 | + |
945 | +static void adv7511_power_on(struct adv7511 *adv7511) |
946 | +{ |
947 | + __adv7511_power_on(adv7511); |
948 | |
949 | /* |
950 | * Most of the registers are reset during power down or when HPD is low. |
951 | @@ -362,21 +367,23 @@ static void adv7511_power_on(struct adv7511 *adv7511) |
952 | |
953 | if (adv7511->type == ADV7533) |
954 | adv7533_dsi_power_on(adv7511); |
955 | - |
956 | adv7511->powered = true; |
957 | } |
958 | |
959 | -static void adv7511_power_off(struct adv7511 *adv7511) |
960 | +static void __adv7511_power_off(struct adv7511 *adv7511) |
961 | { |
962 | /* TODO: setup additional power down modes */ |
963 | regmap_update_bits(adv7511->regmap, ADV7511_REG_POWER, |
964 | ADV7511_POWER_POWER_DOWN, |
965 | ADV7511_POWER_POWER_DOWN); |
966 | regcache_mark_dirty(adv7511->regmap); |
967 | +} |
968 | |
969 | +static void adv7511_power_off(struct adv7511 *adv7511) |
970 | +{ |
971 | + __adv7511_power_off(adv7511); |
972 | if (adv7511->type == ADV7533) |
973 | adv7533_dsi_power_off(adv7511); |
974 | - |
975 | adv7511->powered = false; |
976 | } |
977 | |
978 | @@ -567,23 +574,20 @@ static int adv7511_get_modes(struct adv7511 *adv7511, |
979 | |
980 | /* Reading the EDID only works if the device is powered */ |
981 | if (!adv7511->powered) { |
982 | - regmap_update_bits(adv7511->regmap, ADV7511_REG_POWER, |
983 | - ADV7511_POWER_POWER_DOWN, 0); |
984 | - if (adv7511->i2c_main->irq) { |
985 | - regmap_write(adv7511->regmap, ADV7511_REG_INT_ENABLE(0), |
986 | - ADV7511_INT0_EDID_READY); |
987 | - regmap_write(adv7511->regmap, ADV7511_REG_INT_ENABLE(1), |
988 | - ADV7511_INT1_DDC_ERROR); |
989 | - } |
990 | - adv7511->current_edid_segment = -1; |
991 | + unsigned int edid_i2c_addr = |
992 | + (adv7511->i2c_main->addr << 1) + 4; |
993 | + |
994 | + __adv7511_power_on(adv7511); |
995 | + |
996 | + /* Reset the EDID_I2C_ADDR register as it might be cleared */ |
997 | + regmap_write(adv7511->regmap, ADV7511_REG_EDID_I2C_ADDR, |
998 | + edid_i2c_addr); |
999 | } |
1000 | |
1001 | edid = drm_do_get_edid(connector, adv7511_get_edid_block, adv7511); |
1002 | |
1003 | if (!adv7511->powered) |
1004 | - regmap_update_bits(adv7511->regmap, ADV7511_REG_POWER, |
1005 | - ADV7511_POWER_POWER_DOWN, |
1006 | - ADV7511_POWER_POWER_DOWN); |
1007 | + __adv7511_power_off(adv7511); |
1008 | |
1009 | kfree(adv7511->edid); |
1010 | adv7511->edid = edid; |
1011 | diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c |
1012 | index 362b8cd68a24..80a903bd317d 100644 |
1013 | --- a/drivers/gpu/drm/drm_drv.c |
1014 | +++ b/drivers/gpu/drm/drm_drv.c |
1015 | @@ -218,7 +218,7 @@ static int drm_minor_register(struct drm_device *dev, unsigned int type) |
1016 | ret = drm_debugfs_init(minor, minor->index, drm_debugfs_root); |
1017 | if (ret) { |
1018 | DRM_ERROR("DRM: Failed to initialize /sys/kernel/debug/dri.\n"); |
1019 | - return ret; |
1020 | + goto err_debugfs; |
1021 | } |
1022 | |
1023 | ret = device_add(minor->kdev); |
1024 | diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h |
1025 | index a19ec06f9e42..3ce9ba30d827 100644 |
1026 | --- a/drivers/gpu/drm/i915/intel_drv.h |
1027 | +++ b/drivers/gpu/drm/i915/intel_drv.h |
1028 | @@ -457,7 +457,6 @@ struct intel_crtc_scaler_state { |
1029 | |
1030 | struct intel_pipe_wm { |
1031 | struct intel_wm_level wm[5]; |
1032 | - struct intel_wm_level raw_wm[5]; |
1033 | uint32_t linetime; |
1034 | bool fbc_wm_enabled; |
1035 | bool pipe_enabled; |
1036 | diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c |
1037 | index 49de4760cc16..277a8026460b 100644 |
1038 | --- a/drivers/gpu/drm/i915/intel_pm.c |
1039 | +++ b/drivers/gpu/drm/i915/intel_pm.c |
1040 | @@ -27,6 +27,7 @@ |
1041 | |
1042 | #include <linux/cpufreq.h> |
1043 | #include <drm/drm_plane_helper.h> |
1044 | +#include <drm/drm_atomic_helper.h> |
1045 | #include "i915_drv.h" |
1046 | #include "intel_drv.h" |
1047 | #include "../../../platform/x86/intel_ips.h" |
1048 | @@ -2017,9 +2018,9 @@ static void ilk_compute_wm_level(const struct drm_i915_private *dev_priv, |
1049 | const struct intel_crtc *intel_crtc, |
1050 | int level, |
1051 | struct intel_crtc_state *cstate, |
1052 | - struct intel_plane_state *pristate, |
1053 | - struct intel_plane_state *sprstate, |
1054 | - struct intel_plane_state *curstate, |
1055 | + const struct intel_plane_state *pristate, |
1056 | + const struct intel_plane_state *sprstate, |
1057 | + const struct intel_plane_state *curstate, |
1058 | struct intel_wm_level *result) |
1059 | { |
1060 | uint16_t pri_latency = dev_priv->wm.pri_latency[level]; |
1061 | @@ -2341,28 +2342,24 @@ static int ilk_compute_pipe_wm(struct intel_crtc_state *cstate) |
1062 | struct intel_pipe_wm *pipe_wm; |
1063 | struct drm_device *dev = state->dev; |
1064 | const struct drm_i915_private *dev_priv = to_i915(dev); |
1065 | - struct intel_plane *intel_plane; |
1066 | - struct intel_plane_state *pristate = NULL; |
1067 | - struct intel_plane_state *sprstate = NULL; |
1068 | - struct intel_plane_state *curstate = NULL; |
1069 | + struct drm_plane *plane; |
1070 | + const struct drm_plane_state *plane_state; |
1071 | + const struct intel_plane_state *pristate = NULL; |
1072 | + const struct intel_plane_state *sprstate = NULL; |
1073 | + const struct intel_plane_state *curstate = NULL; |
1074 | int level, max_level = ilk_wm_max_level(dev), usable_level; |
1075 | struct ilk_wm_maximums max; |
1076 | |
1077 | pipe_wm = &cstate->wm.ilk.optimal; |
1078 | |
1079 | - for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) { |
1080 | - struct intel_plane_state *ps; |
1081 | + drm_atomic_crtc_state_for_each_plane_state(plane, plane_state, &cstate->base) { |
1082 | + const struct intel_plane_state *ps = to_intel_plane_state(plane_state); |
1083 | |
1084 | - ps = intel_atomic_get_existing_plane_state(state, |
1085 | - intel_plane); |
1086 | - if (!ps) |
1087 | - continue; |
1088 | - |
1089 | - if (intel_plane->base.type == DRM_PLANE_TYPE_PRIMARY) |
1090 | + if (plane->type == DRM_PLANE_TYPE_PRIMARY) |
1091 | pristate = ps; |
1092 | - else if (intel_plane->base.type == DRM_PLANE_TYPE_OVERLAY) |
1093 | + else if (plane->type == DRM_PLANE_TYPE_OVERLAY) |
1094 | sprstate = ps; |
1095 | - else if (intel_plane->base.type == DRM_PLANE_TYPE_CURSOR) |
1096 | + else if (plane->type == DRM_PLANE_TYPE_CURSOR) |
1097 | curstate = ps; |
1098 | } |
1099 | |
1100 | @@ -2384,11 +2381,9 @@ static int ilk_compute_pipe_wm(struct intel_crtc_state *cstate) |
1101 | if (pipe_wm->sprites_scaled) |
1102 | usable_level = 0; |
1103 | |
1104 | - ilk_compute_wm_level(dev_priv, intel_crtc, 0, cstate, |
1105 | - pristate, sprstate, curstate, &pipe_wm->raw_wm[0]); |
1106 | - |
1107 | memset(&pipe_wm->wm, 0, sizeof(pipe_wm->wm)); |
1108 | - pipe_wm->wm[0] = pipe_wm->raw_wm[0]; |
1109 | + ilk_compute_wm_level(dev_priv, intel_crtc, 0, cstate, |
1110 | + pristate, sprstate, curstate, &pipe_wm->wm[0]); |
1111 | |
1112 | if (IS_HASWELL(dev) || IS_BROADWELL(dev)) |
1113 | pipe_wm->linetime = hsw_compute_linetime_wm(cstate); |
1114 | @@ -2398,8 +2393,8 @@ static int ilk_compute_pipe_wm(struct intel_crtc_state *cstate) |
1115 | |
1116 | ilk_compute_wm_reg_maximums(dev, 1, &max); |
1117 | |
1118 | - for (level = 1; level <= max_level; level++) { |
1119 | - struct intel_wm_level *wm = &pipe_wm->raw_wm[level]; |
1120 | + for (level = 1; level <= usable_level; level++) { |
1121 | + struct intel_wm_level *wm = &pipe_wm->wm[level]; |
1122 | |
1123 | ilk_compute_wm_level(dev_priv, intel_crtc, level, cstate, |
1124 | pristate, sprstate, curstate, wm); |
1125 | @@ -2409,13 +2404,10 @@ static int ilk_compute_pipe_wm(struct intel_crtc_state *cstate) |
1126 | * register maximums since such watermarks are |
1127 | * always invalid. |
1128 | */ |
1129 | - if (level > usable_level) |
1130 | - continue; |
1131 | - |
1132 | - if (ilk_validate_wm_level(level, &max, wm)) |
1133 | - pipe_wm->wm[level] = *wm; |
1134 | - else |
1135 | - usable_level = level; |
1136 | + if (!ilk_validate_wm_level(level, &max, wm)) { |
1137 | + memset(wm, 0, sizeof(*wm)); |
1138 | + break; |
1139 | + } |
1140 | } |
1141 | |
1142 | return 0; |
1143 | diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c |
1144 | index 36005bdf3749..29abd28c19b3 100644 |
1145 | --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c |
1146 | +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c |
1147 | @@ -721,7 +721,7 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset) |
1148 | * allocation taken by fbdev |
1149 | */ |
1150 | if (!(dev_priv->capabilities & SVGA_CAP_3D)) |
1151 | - mem_size *= 2; |
1152 | + mem_size *= 3; |
1153 | |
1154 | dev_priv->max_mob_pages = mem_size * 1024 / PAGE_SIZE; |
1155 | dev_priv->prim_bb_mem = |
1156 | diff --git a/drivers/iio/magnetometer/mag3110.c b/drivers/iio/magnetometer/mag3110.c |
1157 | index f2b3bd7bf862..b4f643fb3b1e 100644 |
1158 | --- a/drivers/iio/magnetometer/mag3110.c |
1159 | +++ b/drivers/iio/magnetometer/mag3110.c |
1160 | @@ -222,29 +222,39 @@ static int mag3110_write_raw(struct iio_dev *indio_dev, |
1161 | int val, int val2, long mask) |
1162 | { |
1163 | struct mag3110_data *data = iio_priv(indio_dev); |
1164 | - int rate; |
1165 | + int rate, ret; |
1166 | |
1167 | - if (iio_buffer_enabled(indio_dev)) |
1168 | - return -EBUSY; |
1169 | + ret = iio_device_claim_direct_mode(indio_dev); |
1170 | + if (ret) |
1171 | + return ret; |
1172 | |
1173 | switch (mask) { |
1174 | case IIO_CHAN_INFO_SAMP_FREQ: |
1175 | rate = mag3110_get_samp_freq_index(data, val, val2); |
1176 | - if (rate < 0) |
1177 | - return -EINVAL; |
1178 | + if (rate < 0) { |
1179 | + ret = -EINVAL; |
1180 | + break; |
1181 | + } |
1182 | |
1183 | data->ctrl_reg1 &= ~MAG3110_CTRL_DR_MASK; |
1184 | data->ctrl_reg1 |= rate << MAG3110_CTRL_DR_SHIFT; |
1185 | - return i2c_smbus_write_byte_data(data->client, |
1186 | + ret = i2c_smbus_write_byte_data(data->client, |
1187 | MAG3110_CTRL_REG1, data->ctrl_reg1); |
1188 | + break; |
1189 | case IIO_CHAN_INFO_CALIBBIAS: |
1190 | - if (val < -10000 || val > 10000) |
1191 | - return -EINVAL; |
1192 | - return i2c_smbus_write_word_swapped(data->client, |
1193 | + if (val < -10000 || val > 10000) { |
1194 | + ret = -EINVAL; |
1195 | + break; |
1196 | + } |
1197 | + ret = i2c_smbus_write_word_swapped(data->client, |
1198 | MAG3110_OFF_X + 2 * chan->scan_index, val << 1); |
1199 | + break; |
1200 | default: |
1201 | - return -EINVAL; |
1202 | + ret = -EINVAL; |
1203 | + break; |
1204 | } |
1205 | + iio_device_release_direct_mode(indio_dev); |
1206 | + return ret; |
1207 | } |
1208 | |
1209 | static irqreturn_t mag3110_trigger_handler(int irq, void *p) |
1210 | diff --git a/drivers/iio/pressure/ms5611_core.c b/drivers/iio/pressure/ms5611_core.c |
1211 | index a74ed1f0c880..8cc7156b5ace 100644 |
1212 | --- a/drivers/iio/pressure/ms5611_core.c |
1213 | +++ b/drivers/iio/pressure/ms5611_core.c |
1214 | @@ -308,6 +308,7 @@ static int ms5611_write_raw(struct iio_dev *indio_dev, |
1215 | { |
1216 | struct ms5611_state *st = iio_priv(indio_dev); |
1217 | const struct ms5611_osr *osr = NULL; |
1218 | + int ret; |
1219 | |
1220 | if (mask != IIO_CHAN_INFO_OVERSAMPLING_RATIO) |
1221 | return -EINVAL; |
1222 | @@ -321,12 +322,11 @@ static int ms5611_write_raw(struct iio_dev *indio_dev, |
1223 | if (!osr) |
1224 | return -EINVAL; |
1225 | |
1226 | - mutex_lock(&st->lock); |
1227 | + ret = iio_device_claim_direct_mode(indio_dev); |
1228 | + if (ret) |
1229 | + return ret; |
1230 | |
1231 | - if (iio_buffer_enabled(indio_dev)) { |
1232 | - mutex_unlock(&st->lock); |
1233 | - return -EBUSY; |
1234 | - } |
1235 | + mutex_lock(&st->lock); |
1236 | |
1237 | if (chan->type == IIO_TEMP) |
1238 | st->temp_osr = osr; |
1239 | @@ -334,6 +334,8 @@ static int ms5611_write_raw(struct iio_dev *indio_dev, |
1240 | st->pressure_osr = osr; |
1241 | |
1242 | mutex_unlock(&st->lock); |
1243 | + iio_device_release_direct_mode(indio_dev); |
1244 | + |
1245 | return 0; |
1246 | } |
1247 | |
1248 | diff --git a/drivers/iio/proximity/sx9500.c b/drivers/iio/proximity/sx9500.c |
1249 | index 1f06282ec793..9ea147f1a50d 100644 |
1250 | --- a/drivers/iio/proximity/sx9500.c |
1251 | +++ b/drivers/iio/proximity/sx9500.c |
1252 | @@ -387,14 +387,18 @@ static int sx9500_read_raw(struct iio_dev *indio_dev, |
1253 | int *val, int *val2, long mask) |
1254 | { |
1255 | struct sx9500_data *data = iio_priv(indio_dev); |
1256 | + int ret; |
1257 | |
1258 | switch (chan->type) { |
1259 | case IIO_PROXIMITY: |
1260 | switch (mask) { |
1261 | case IIO_CHAN_INFO_RAW: |
1262 | - if (iio_buffer_enabled(indio_dev)) |
1263 | - return -EBUSY; |
1264 | - return sx9500_read_proximity(data, chan, val); |
1265 | + ret = iio_device_claim_direct_mode(indio_dev); |
1266 | + if (ret) |
1267 | + return ret; |
1268 | + ret = sx9500_read_proximity(data, chan, val); |
1269 | + iio_device_release_direct_mode(indio_dev); |
1270 | + return ret; |
1271 | case IIO_CHAN_INFO_SAMP_FREQ: |
1272 | return sx9500_read_samp_freq(data, val, val2); |
1273 | default: |
1274 | diff --git a/drivers/iio/trigger/iio-trig-interrupt.c b/drivers/iio/trigger/iio-trig-interrupt.c |
1275 | index 572bc6f02ca8..e18f12b74610 100644 |
1276 | --- a/drivers/iio/trigger/iio-trig-interrupt.c |
1277 | +++ b/drivers/iio/trigger/iio-trig-interrupt.c |
1278 | @@ -58,7 +58,7 @@ static int iio_interrupt_trigger_probe(struct platform_device *pdev) |
1279 | trig_info = kzalloc(sizeof(*trig_info), GFP_KERNEL); |
1280 | if (!trig_info) { |
1281 | ret = -ENOMEM; |
1282 | - goto error_put_trigger; |
1283 | + goto error_free_trigger; |
1284 | } |
1285 | iio_trigger_set_drvdata(trig, trig_info); |
1286 | trig_info->irq = irq; |
1287 | @@ -83,8 +83,8 @@ static int iio_interrupt_trigger_probe(struct platform_device *pdev) |
1288 | free_irq(irq, trig); |
1289 | error_free_trig_info: |
1290 | kfree(trig_info); |
1291 | -error_put_trigger: |
1292 | - iio_trigger_put(trig); |
1293 | +error_free_trigger: |
1294 | + iio_trigger_free(trig); |
1295 | error_ret: |
1296 | return ret; |
1297 | } |
1298 | @@ -99,7 +99,7 @@ static int iio_interrupt_trigger_remove(struct platform_device *pdev) |
1299 | iio_trigger_unregister(trig); |
1300 | free_irq(trig_info->irq, trig); |
1301 | kfree(trig_info); |
1302 | - iio_trigger_put(trig); |
1303 | + iio_trigger_free(trig); |
1304 | |
1305 | return 0; |
1306 | } |
1307 | diff --git a/drivers/iio/trigger/iio-trig-sysfs.c b/drivers/iio/trigger/iio-trig-sysfs.c |
1308 | index 3dfab2bc6d69..202e8b89caf2 100644 |
1309 | --- a/drivers/iio/trigger/iio-trig-sysfs.c |
1310 | +++ b/drivers/iio/trigger/iio-trig-sysfs.c |
1311 | @@ -174,7 +174,7 @@ static int iio_sysfs_trigger_probe(int id) |
1312 | return 0; |
1313 | |
1314 | out2: |
1315 | - iio_trigger_put(t->trig); |
1316 | + iio_trigger_free(t->trig); |
1317 | free_t: |
1318 | kfree(t); |
1319 | out1: |
1320 | diff --git a/drivers/infiniband/sw/rxe/rxe_req.c b/drivers/infiniband/sw/rxe/rxe_req.c |
1321 | index 9f46be52335e..9d084780ac91 100644 |
1322 | --- a/drivers/infiniband/sw/rxe/rxe_req.c |
1323 | +++ b/drivers/infiniband/sw/rxe/rxe_req.c |
1324 | @@ -633,6 +633,7 @@ int rxe_requester(void *arg) |
1325 | goto exit; |
1326 | } |
1327 | rmr->state = RXE_MEM_STATE_FREE; |
1328 | + rxe_drop_ref(rmr); |
1329 | wqe->state = wqe_state_done; |
1330 | wqe->status = IB_WC_SUCCESS; |
1331 | } else if (wqe->wr.opcode == IB_WR_REG_MR) { |
1332 | diff --git a/drivers/infiniband/sw/rxe/rxe_resp.c b/drivers/infiniband/sw/rxe/rxe_resp.c |
1333 | index 69ed4e0d7a0d..7705820cdac6 100644 |
1334 | --- a/drivers/infiniband/sw/rxe/rxe_resp.c |
1335 | +++ b/drivers/infiniband/sw/rxe/rxe_resp.c |
1336 | @@ -893,6 +893,7 @@ static enum resp_states do_complete(struct rxe_qp *qp, |
1337 | return RESPST_ERROR; |
1338 | } |
1339 | rmr->state = RXE_MEM_STATE_FREE; |
1340 | + rxe_drop_ref(rmr); |
1341 | } |
1342 | |
1343 | wc->qp = &qp->ibqp; |
1344 | diff --git a/drivers/infiniband/ulp/ipoib/ipoib_cm.c b/drivers/infiniband/ulp/ipoib/ipoib_cm.c |
1345 | index 0616a65f0d78..75761667be59 100644 |
1346 | --- a/drivers/infiniband/ulp/ipoib/ipoib_cm.c |
1347 | +++ b/drivers/infiniband/ulp/ipoib/ipoib_cm.c |
1348 | @@ -1392,7 +1392,7 @@ static void ipoib_cm_tx_reap(struct work_struct *work) |
1349 | |
1350 | while (!list_empty(&priv->cm.reap_list)) { |
1351 | p = list_entry(priv->cm.reap_list.next, typeof(*p), list); |
1352 | - list_del(&p->list); |
1353 | + list_del_init(&p->list); |
1354 | spin_unlock_irqrestore(&priv->lock, flags); |
1355 | netif_tx_unlock_bh(dev); |
1356 | ipoib_cm_tx_destroy(p); |
1357 | diff --git a/drivers/input/keyboard/mpr121_touchkey.c b/drivers/input/keyboard/mpr121_touchkey.c |
1358 | index 0fd612dd76ed..aaf43befffaa 100644 |
1359 | --- a/drivers/input/keyboard/mpr121_touchkey.c |
1360 | +++ b/drivers/input/keyboard/mpr121_touchkey.c |
1361 | @@ -87,7 +87,8 @@ static irqreturn_t mpr_touchkey_interrupt(int irq, void *dev_id) |
1362 | struct mpr121_touchkey *mpr121 = dev_id; |
1363 | struct i2c_client *client = mpr121->client; |
1364 | struct input_dev *input = mpr121->input_dev; |
1365 | - unsigned int key_num, key_val, pressed; |
1366 | + unsigned long bit_changed; |
1367 | + unsigned int key_num; |
1368 | int reg; |
1369 | |
1370 | reg = i2c_smbus_read_byte_data(client, ELE_TOUCH_STATUS_1_ADDR); |
1371 | @@ -105,18 +106,22 @@ static irqreturn_t mpr_touchkey_interrupt(int irq, void *dev_id) |
1372 | |
1373 | reg &= TOUCH_STATUS_MASK; |
1374 | /* use old press bit to figure out which bit changed */ |
1375 | - key_num = ffs(reg ^ mpr121->statusbits) - 1; |
1376 | - pressed = reg & (1 << key_num); |
1377 | + bit_changed = reg ^ mpr121->statusbits; |
1378 | mpr121->statusbits = reg; |
1379 | + for_each_set_bit(key_num, &bit_changed, mpr121->keycount) { |
1380 | + unsigned int key_val, pressed; |
1381 | |
1382 | - key_val = mpr121->keycodes[key_num]; |
1383 | + pressed = reg & BIT(key_num); |
1384 | + key_val = mpr121->keycodes[key_num]; |
1385 | |
1386 | - input_event(input, EV_MSC, MSC_SCAN, key_num); |
1387 | - input_report_key(input, key_val, pressed); |
1388 | - input_sync(input); |
1389 | + input_event(input, EV_MSC, MSC_SCAN, key_num); |
1390 | + input_report_key(input, key_val, pressed); |
1391 | + |
1392 | + dev_dbg(&client->dev, "key %d %d %s\n", key_num, key_val, |
1393 | + pressed ? "pressed" : "released"); |
1394 | |
1395 | - dev_dbg(&client->dev, "key %d %d %s\n", key_num, key_val, |
1396 | - pressed ? "pressed" : "released"); |
1397 | + } |
1398 | + input_sync(input); |
1399 | |
1400 | out: |
1401 | return IRQ_HANDLED; |
1402 | @@ -231,6 +236,7 @@ static int mpr_touchkey_probe(struct i2c_client *client, |
1403 | input_dev->id.bustype = BUS_I2C; |
1404 | input_dev->dev.parent = &client->dev; |
1405 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP); |
1406 | + input_set_capability(input_dev, EV_MSC, MSC_SCAN); |
1407 | |
1408 | input_dev->keycode = mpr121->keycodes; |
1409 | input_dev->keycodesize = sizeof(mpr121->keycodes[0]); |
1410 | diff --git a/drivers/input/mouse/elan_i2c_core.c b/drivers/input/mouse/elan_i2c_core.c |
1411 | index b8c50d883b2c..c9d491bc85e0 100644 |
1412 | --- a/drivers/input/mouse/elan_i2c_core.c |
1413 | +++ b/drivers/input/mouse/elan_i2c_core.c |
1414 | @@ -1240,6 +1240,7 @@ static const struct acpi_device_id elan_acpi_id[] = { |
1415 | { "ELAN0605", 0 }, |
1416 | { "ELAN0609", 0 }, |
1417 | { "ELAN060B", 0 }, |
1418 | + { "ELAN060C", 0 }, |
1419 | { "ELAN0611", 0 }, |
1420 | { "ELAN1000", 0 }, |
1421 | { } |
1422 | diff --git a/drivers/iommu/arm-smmu-v3.c b/drivers/iommu/arm-smmu-v3.c |
1423 | index e6f9b2d745ca..d3d975ae24b7 100644 |
1424 | --- a/drivers/iommu/arm-smmu-v3.c |
1425 | +++ b/drivers/iommu/arm-smmu-v3.c |
1426 | @@ -1040,13 +1040,8 @@ static void arm_smmu_write_strtab_ent(struct arm_smmu_device *smmu, u32 sid, |
1427 | } |
1428 | } |
1429 | |
1430 | - /* Nuke the existing Config, as we're going to rewrite it */ |
1431 | - val &= ~(STRTAB_STE_0_CFG_MASK << STRTAB_STE_0_CFG_SHIFT); |
1432 | - |
1433 | - if (ste->valid) |
1434 | - val |= STRTAB_STE_0_V; |
1435 | - else |
1436 | - val &= ~STRTAB_STE_0_V; |
1437 | + /* Nuke the existing STE_0 value, as we're going to rewrite it */ |
1438 | + val = ste->valid ? STRTAB_STE_0_V : 0; |
1439 | |
1440 | if (ste->bypass) { |
1441 | val |= disable_bypass ? STRTAB_STE_0_CFG_ABORT |
1442 | @@ -1081,7 +1076,6 @@ static void arm_smmu_write_strtab_ent(struct arm_smmu_device *smmu, u32 sid, |
1443 | val |= (ste->s1_cfg->cdptr_dma & STRTAB_STE_0_S1CTXPTR_MASK |
1444 | << STRTAB_STE_0_S1CTXPTR_SHIFT) | |
1445 | STRTAB_STE_0_CFG_S1_TRANS; |
1446 | - |
1447 | } |
1448 | |
1449 | if (ste->s2_cfg) { |
1450 | diff --git a/drivers/media/i2c/adv7604.c b/drivers/media/i2c/adv7604.c |
1451 | index 4003831de712..7b1935ab03c8 100644 |
1452 | --- a/drivers/media/i2c/adv7604.c |
1453 | +++ b/drivers/media/i2c/adv7604.c |
1454 | @@ -3118,6 +3118,9 @@ static int adv76xx_parse_dt(struct adv76xx_state *state) |
1455 | state->pdata.blank_data = 1; |
1456 | state->pdata.op_format_mode_sel = ADV7604_OP_FORMAT_MODE0; |
1457 | state->pdata.bus_order = ADV7604_BUS_ORDER_RGB; |
1458 | + state->pdata.dr_str_data = ADV76XX_DR_STR_MEDIUM_HIGH; |
1459 | + state->pdata.dr_str_clk = ADV76XX_DR_STR_MEDIUM_HIGH; |
1460 | + state->pdata.dr_str_sync = ADV76XX_DR_STR_MEDIUM_HIGH; |
1461 | |
1462 | return 0; |
1463 | } |
1464 | diff --git a/drivers/misc/cxl/pci.c b/drivers/misc/cxl/pci.c |
1465 | index fa4fe02cfef4..eef202d4399b 100644 |
1466 | --- a/drivers/misc/cxl/pci.c |
1467 | +++ b/drivers/misc/cxl/pci.c |
1468 | @@ -1620,6 +1620,9 @@ static void cxl_pci_remove_adapter(struct cxl *adapter) |
1469 | cxl_sysfs_adapter_remove(adapter); |
1470 | cxl_debugfs_adapter_remove(adapter); |
1471 | |
1472 | + /* Flush adapter datacache as its about to be removed */ |
1473 | + cxl_data_cache_flush(adapter); |
1474 | + |
1475 | cxl_deconfigure_adapter(adapter); |
1476 | |
1477 | device_unregister(&adapter->dev); |
1478 | diff --git a/drivers/net/can/c_can/c_can_pci.c b/drivers/net/can/c_can/c_can_pci.c |
1479 | index cf7c18947189..d065c0e2d18e 100644 |
1480 | --- a/drivers/net/can/c_can/c_can_pci.c |
1481 | +++ b/drivers/net/can/c_can/c_can_pci.c |
1482 | @@ -178,7 +178,6 @@ static int c_can_pci_probe(struct pci_dev *pdev, |
1483 | break; |
1484 | case BOSCH_D_CAN: |
1485 | priv->regs = reg_map_d_can; |
1486 | - priv->can.ctrlmode_supported |= CAN_CTRLMODE_3_SAMPLES; |
1487 | break; |
1488 | default: |
1489 | ret = -EINVAL; |
1490 | diff --git a/drivers/net/can/c_can/c_can_platform.c b/drivers/net/can/c_can/c_can_platform.c |
1491 | index e36d10520e24..717530eac70c 100644 |
1492 | --- a/drivers/net/can/c_can/c_can_platform.c |
1493 | +++ b/drivers/net/can/c_can/c_can_platform.c |
1494 | @@ -320,7 +320,6 @@ static int c_can_plat_probe(struct platform_device *pdev) |
1495 | break; |
1496 | case BOSCH_D_CAN: |
1497 | priv->regs = reg_map_d_can; |
1498 | - priv->can.ctrlmode_supported |= CAN_CTRLMODE_3_SAMPLES; |
1499 | priv->read_reg = c_can_plat_read_reg_aligned_to_16bit; |
1500 | priv->write_reg = c_can_plat_write_reg_aligned_to_16bit; |
1501 | priv->read_reg32 = d_can_plat_read_reg32; |
1502 | diff --git a/drivers/net/can/ifi_canfd/ifi_canfd.c b/drivers/net/can/ifi_canfd/ifi_canfd.c |
1503 | index 481895b2f9f4..c06ef438f23f 100644 |
1504 | --- a/drivers/net/can/ifi_canfd/ifi_canfd.c |
1505 | +++ b/drivers/net/can/ifi_canfd/ifi_canfd.c |
1506 | @@ -670,9 +670,9 @@ static void ifi_canfd_set_bittiming(struct net_device *ndev) |
1507 | priv->base + IFI_CANFD_FTIME); |
1508 | |
1509 | /* Configure transmitter delay */ |
1510 | - tdc = (dbt->brp * (dbt->phase_seg1 + 1)) & IFI_CANFD_TDELAY_MASK; |
1511 | - writel(IFI_CANFD_TDELAY_EN | IFI_CANFD_TDELAY_ABS | tdc, |
1512 | - priv->base + IFI_CANFD_TDELAY); |
1513 | + tdc = dbt->brp * (dbt->prop_seg + dbt->phase_seg1); |
1514 | + tdc &= IFI_CANFD_TDELAY_MASK; |
1515 | + writel(IFI_CANFD_TDELAY_EN | tdc, priv->base + IFI_CANFD_TDELAY); |
1516 | } |
1517 | |
1518 | static void ifi_canfd_set_filter(struct net_device *ndev, const u32 id, |
1519 | diff --git a/drivers/net/can/sun4i_can.c b/drivers/net/can/sun4i_can.c |
1520 | index b0c80859f746..1ac2090a1721 100644 |
1521 | --- a/drivers/net/can/sun4i_can.c |
1522 | +++ b/drivers/net/can/sun4i_can.c |
1523 | @@ -539,6 +539,13 @@ static int sun4i_can_err(struct net_device *dev, u8 isrc, u8 status) |
1524 | } |
1525 | stats->rx_over_errors++; |
1526 | stats->rx_errors++; |
1527 | + |
1528 | + /* reset the CAN IP by entering reset mode |
1529 | + * ignoring timeout error |
1530 | + */ |
1531 | + set_reset_mode(dev); |
1532 | + set_normal_mode(dev); |
1533 | + |
1534 | /* clear bit */ |
1535 | sun4i_can_write_cmdreg(priv, SUN4I_CMD_CLEAR_OR_FLAG); |
1536 | } |
1537 | @@ -653,8 +660,9 @@ static irqreturn_t sun4i_can_interrupt(int irq, void *dev_id) |
1538 | netif_wake_queue(dev); |
1539 | can_led_event(dev, CAN_LED_EVENT_TX); |
1540 | } |
1541 | - if (isrc & SUN4I_INT_RBUF_VLD) { |
1542 | - /* receive interrupt */ |
1543 | + if ((isrc & SUN4I_INT_RBUF_VLD) && |
1544 | + !(isrc & SUN4I_INT_DATA_OR)) { |
1545 | + /* receive interrupt - don't read if overrun occurred */ |
1546 | while (status & SUN4I_STA_RBUF_RDY) { |
1547 | /* RX buffer is not empty */ |
1548 | sun4i_can_rx(dev); |
1549 | diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c |
1550 | index afbfc0f656f3..dc6d3b0a0be8 100644 |
1551 | --- a/drivers/net/usb/cdc_ncm.c |
1552 | +++ b/drivers/net/usb/cdc_ncm.c |
1553 | @@ -769,8 +769,10 @@ int cdc_ncm_bind_common(struct usbnet *dev, struct usb_interface *intf, u8 data_ |
1554 | u8 *buf; |
1555 | int len; |
1556 | int temp; |
1557 | + int err; |
1558 | u8 iface_no; |
1559 | struct usb_cdc_parsed_header hdr; |
1560 | + u16 curr_ntb_format; |
1561 | |
1562 | ctx = kzalloc(sizeof(*ctx), GFP_KERNEL); |
1563 | if (!ctx) |
1564 | @@ -875,6 +877,32 @@ int cdc_ncm_bind_common(struct usbnet *dev, struct usb_interface *intf, u8 data_ |
1565 | goto error2; |
1566 | } |
1567 | |
1568 | + /* |
1569 | + * Some Huawei devices have been observed to come out of reset in NDP32 mode. |
1570 | + * Let's check if this is the case, and set the device to NDP16 mode again if |
1571 | + * needed. |
1572 | + */ |
1573 | + if (ctx->drvflags & CDC_NCM_FLAG_RESET_NTB16) { |
1574 | + err = usbnet_read_cmd(dev, USB_CDC_GET_NTB_FORMAT, |
1575 | + USB_TYPE_CLASS | USB_DIR_IN | USB_RECIP_INTERFACE, |
1576 | + 0, iface_no, &curr_ntb_format, 2); |
1577 | + if (err < 0) { |
1578 | + goto error2; |
1579 | + } |
1580 | + |
1581 | + if (curr_ntb_format == USB_CDC_NCM_NTB32_FORMAT) { |
1582 | + dev_info(&intf->dev, "resetting NTB format to 16-bit"); |
1583 | + err = usbnet_write_cmd(dev, USB_CDC_SET_NTB_FORMAT, |
1584 | + USB_TYPE_CLASS | USB_DIR_OUT |
1585 | + | USB_RECIP_INTERFACE, |
1586 | + USB_CDC_NCM_NTB16_FORMAT, |
1587 | + iface_no, NULL, 0); |
1588 | + |
1589 | + if (err < 0) |
1590 | + goto error2; |
1591 | + } |
1592 | + } |
1593 | + |
1594 | cdc_ncm_find_endpoints(dev, ctx->data); |
1595 | cdc_ncm_find_endpoints(dev, ctx->control); |
1596 | if (!dev->in || !dev->out || !dev->status) { |
1597 | diff --git a/drivers/net/usb/huawei_cdc_ncm.c b/drivers/net/usb/huawei_cdc_ncm.c |
1598 | index 2680a65cd5e4..63f28908afda 100644 |
1599 | --- a/drivers/net/usb/huawei_cdc_ncm.c |
1600 | +++ b/drivers/net/usb/huawei_cdc_ncm.c |
1601 | @@ -80,6 +80,12 @@ static int huawei_cdc_ncm_bind(struct usbnet *usbnet_dev, |
1602 | * be at the end of the frame. |
1603 | */ |
1604 | drvflags |= CDC_NCM_FLAG_NDP_TO_END; |
1605 | + |
1606 | + /* Additionally, it has been reported that some Huawei E3372H devices, with |
1607 | + * firmware version 21.318.01.00.541, come out of reset in NTB32 format mode, hence |
1608 | + * needing to be set to the NTB16 one again. |
1609 | + */ |
1610 | + drvflags |= CDC_NCM_FLAG_RESET_NTB16; |
1611 | ret = cdc_ncm_bind_common(usbnet_dev, intf, 1, drvflags); |
1612 | if (ret) |
1613 | goto err; |
1614 | diff --git a/drivers/net/wireless/ath/wcn36xx/main.c b/drivers/net/wireless/ath/wcn36xx/main.c |
1615 | index e1d59da2ad20..ca8797c65312 100644 |
1616 | --- a/drivers/net/wireless/ath/wcn36xx/main.c |
1617 | +++ b/drivers/net/wireless/ath/wcn36xx/main.c |
1618 | @@ -1165,11 +1165,12 @@ static int wcn36xx_remove(struct platform_device *pdev) |
1619 | wcn36xx_dbg(WCN36XX_DBG_MAC, "platform remove\n"); |
1620 | |
1621 | release_firmware(wcn->nv); |
1622 | - mutex_destroy(&wcn->hal_mutex); |
1623 | |
1624 | ieee80211_unregister_hw(hw); |
1625 | iounmap(wcn->dxe_base); |
1626 | iounmap(wcn->ccu_base); |
1627 | + |
1628 | + mutex_destroy(&wcn->hal_mutex); |
1629 | ieee80211_free_hw(hw); |
1630 | |
1631 | return 0; |
1632 | diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c |
1633 | index 27960b0bfbcd..425a89c635d0 100644 |
1634 | --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c |
1635 | +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c |
1636 | @@ -6572,8 +6572,7 @@ static int brcmf_setup_wiphy(struct wiphy *wiphy, struct brcmf_if *ifp) |
1637 | wiphy->bands[NL80211_BAND_5GHZ] = band; |
1638 | } |
1639 | } |
1640 | - err = brcmf_setup_wiphybands(wiphy); |
1641 | - return err; |
1642 | + return 0; |
1643 | } |
1644 | |
1645 | static s32 brcmf_config_dongle(struct brcmf_cfg80211_info *cfg) |
1646 | @@ -6938,6 +6937,12 @@ struct brcmf_cfg80211_info *brcmf_cfg80211_attach(struct brcmf_pub *drvr, |
1647 | goto priv_out; |
1648 | } |
1649 | |
1650 | + err = brcmf_setup_wiphybands(wiphy); |
1651 | + if (err) { |
1652 | + brcmf_err("Setting wiphy bands failed (%d)\n", err); |
1653 | + goto wiphy_unreg_out; |
1654 | + } |
1655 | + |
1656 | /* If cfg80211 didn't disable 40MHz HT CAP in wiphy_register(), |
1657 | * setup 40MHz in 2GHz band and enable OBSS scanning. |
1658 | */ |
1659 | diff --git a/drivers/net/wireless/marvell/libertas/cmd.c b/drivers/net/wireless/marvell/libertas/cmd.c |
1660 | index 301170cccfff..033ff881c751 100644 |
1661 | --- a/drivers/net/wireless/marvell/libertas/cmd.c |
1662 | +++ b/drivers/net/wireless/marvell/libertas/cmd.c |
1663 | @@ -305,7 +305,7 @@ int lbs_cmd_802_11_sleep_params(struct lbs_private *priv, uint16_t cmd_action, |
1664 | } |
1665 | |
1666 | lbs_deb_leave_args(LBS_DEB_CMD, "ret %d", ret); |
1667 | - return 0; |
1668 | + return ret; |
1669 | } |
1670 | |
1671 | static int lbs_wait_for_ds_awake(struct lbs_private *priv) |
1672 | diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800usb.c b/drivers/net/wireless/ralink/rt2x00/rt2800usb.c |
1673 | index 4b0bb6b4f6f1..c636e6065548 100644 |
1674 | --- a/drivers/net/wireless/ralink/rt2x00/rt2800usb.c |
1675 | +++ b/drivers/net/wireless/ralink/rt2x00/rt2800usb.c |
1676 | @@ -646,10 +646,9 @@ static void rt2800usb_txdone_nostatus(struct rt2x00_dev *rt2x00dev) |
1677 | !test_bit(ENTRY_DATA_STATUS_PENDING, &entry->flags)) |
1678 | break; |
1679 | |
1680 | - if (test_bit(ENTRY_DATA_IO_FAILED, &entry->flags)) |
1681 | + if (test_bit(ENTRY_DATA_IO_FAILED, &entry->flags) || |
1682 | + rt2800usb_entry_txstatus_timeout(entry)) |
1683 | rt2x00lib_txdone_noinfo(entry, TXDONE_FAILURE); |
1684 | - else if (rt2800usb_entry_txstatus_timeout(entry)) |
1685 | - rt2x00lib_txdone_noinfo(entry, TXDONE_UNKNOWN); |
1686 | else |
1687 | break; |
1688 | } |
1689 | diff --git a/drivers/net/xen-netback/netback.c b/drivers/net/xen-netback/netback.c |
1690 | index d9b5b73c35a0..a7bdb1ffac2e 100644 |
1691 | --- a/drivers/net/xen-netback/netback.c |
1692 | +++ b/drivers/net/xen-netback/netback.c |
1693 | @@ -67,6 +67,7 @@ module_param(rx_drain_timeout_msecs, uint, 0444); |
1694 | unsigned int rx_stall_timeout_msecs = 60000; |
1695 | module_param(rx_stall_timeout_msecs, uint, 0444); |
1696 | |
1697 | +#define MAX_QUEUES_DEFAULT 8 |
1698 | unsigned int xenvif_max_queues; |
1699 | module_param_named(max_queues, xenvif_max_queues, uint, 0644); |
1700 | MODULE_PARM_DESC(max_queues, |
1701 | @@ -1626,11 +1627,12 @@ static int __init netback_init(void) |
1702 | if (!xen_domain()) |
1703 | return -ENODEV; |
1704 | |
1705 | - /* Allow as many queues as there are CPUs if user has not |
1706 | + /* Allow as many queues as there are CPUs but max. 8 if user has not |
1707 | * specified a value. |
1708 | */ |
1709 | if (xenvif_max_queues == 0) |
1710 | - xenvif_max_queues = num_online_cpus(); |
1711 | + xenvif_max_queues = min_t(unsigned int, MAX_QUEUES_DEFAULT, |
1712 | + num_online_cpus()); |
1713 | |
1714 | if (fatal_skb_slots < XEN_NETBK_LEGACY_SLOTS_MAX) { |
1715 | pr_info("fatal_skb_slots too small (%d), bump it to XEN_NETBK_LEGACY_SLOTS_MAX (%d)\n", |
1716 | diff --git a/drivers/pci/host/pci-mvebu.c b/drivers/pci/host/pci-mvebu.c |
1717 | index 45a89d969700..90e0b6f134ad 100644 |
1718 | --- a/drivers/pci/host/pci-mvebu.c |
1719 | +++ b/drivers/pci/host/pci-mvebu.c |
1720 | @@ -133,6 +133,12 @@ struct mvebu_pcie { |
1721 | int nports; |
1722 | }; |
1723 | |
1724 | +struct mvebu_pcie_window { |
1725 | + phys_addr_t base; |
1726 | + phys_addr_t remap; |
1727 | + size_t size; |
1728 | +}; |
1729 | + |
1730 | /* Structure representing one PCIe interface */ |
1731 | struct mvebu_pcie_port { |
1732 | char *name; |
1733 | @@ -150,10 +156,8 @@ struct mvebu_pcie_port { |
1734 | struct mvebu_sw_pci_bridge bridge; |
1735 | struct device_node *dn; |
1736 | struct mvebu_pcie *pcie; |
1737 | - phys_addr_t memwin_base; |
1738 | - size_t memwin_size; |
1739 | - phys_addr_t iowin_base; |
1740 | - size_t iowin_size; |
1741 | + struct mvebu_pcie_window memwin; |
1742 | + struct mvebu_pcie_window iowin; |
1743 | u32 saved_pcie_stat; |
1744 | }; |
1745 | |
1746 | @@ -379,23 +383,45 @@ static void mvebu_pcie_add_windows(struct mvebu_pcie_port *port, |
1747 | } |
1748 | } |
1749 | |
1750 | +static void mvebu_pcie_set_window(struct mvebu_pcie_port *port, |
1751 | + unsigned int target, unsigned int attribute, |
1752 | + const struct mvebu_pcie_window *desired, |
1753 | + struct mvebu_pcie_window *cur) |
1754 | +{ |
1755 | + if (desired->base == cur->base && desired->remap == cur->remap && |
1756 | + desired->size == cur->size) |
1757 | + return; |
1758 | + |
1759 | + if (cur->size != 0) { |
1760 | + mvebu_pcie_del_windows(port, cur->base, cur->size); |
1761 | + cur->size = 0; |
1762 | + cur->base = 0; |
1763 | + |
1764 | + /* |
1765 | + * If something tries to change the window while it is enabled |
1766 | + * the change will not be done atomically. That would be |
1767 | + * difficult to do in the general case. |
1768 | + */ |
1769 | + } |
1770 | + |
1771 | + if (desired->size == 0) |
1772 | + return; |
1773 | + |
1774 | + mvebu_pcie_add_windows(port, target, attribute, desired->base, |
1775 | + desired->size, desired->remap); |
1776 | + *cur = *desired; |
1777 | +} |
1778 | + |
1779 | static void mvebu_pcie_handle_iobase_change(struct mvebu_pcie_port *port) |
1780 | { |
1781 | - phys_addr_t iobase; |
1782 | + struct mvebu_pcie_window desired = {}; |
1783 | |
1784 | /* Are the new iobase/iolimit values invalid? */ |
1785 | if (port->bridge.iolimit < port->bridge.iobase || |
1786 | port->bridge.iolimitupper < port->bridge.iobaseupper || |
1787 | !(port->bridge.command & PCI_COMMAND_IO)) { |
1788 | - |
1789 | - /* If a window was configured, remove it */ |
1790 | - if (port->iowin_base) { |
1791 | - mvebu_pcie_del_windows(port, port->iowin_base, |
1792 | - port->iowin_size); |
1793 | - port->iowin_base = 0; |
1794 | - port->iowin_size = 0; |
1795 | - } |
1796 | - |
1797 | + mvebu_pcie_set_window(port, port->io_target, port->io_attr, |
1798 | + &desired, &port->iowin); |
1799 | return; |
1800 | } |
1801 | |
1802 | @@ -412,32 +438,27 @@ static void mvebu_pcie_handle_iobase_change(struct mvebu_pcie_port *port) |
1803 | * specifications. iobase is the bus address, port->iowin_base |
1804 | * is the CPU address. |
1805 | */ |
1806 | - iobase = ((port->bridge.iobase & 0xF0) << 8) | |
1807 | - (port->bridge.iobaseupper << 16); |
1808 | - port->iowin_base = port->pcie->io.start + iobase; |
1809 | - port->iowin_size = ((0xFFF | ((port->bridge.iolimit & 0xF0) << 8) | |
1810 | - (port->bridge.iolimitupper << 16)) - |
1811 | - iobase) + 1; |
1812 | - |
1813 | - mvebu_pcie_add_windows(port, port->io_target, port->io_attr, |
1814 | - port->iowin_base, port->iowin_size, |
1815 | - iobase); |
1816 | + desired.remap = ((port->bridge.iobase & 0xF0) << 8) | |
1817 | + (port->bridge.iobaseupper << 16); |
1818 | + desired.base = port->pcie->io.start + desired.remap; |
1819 | + desired.size = ((0xFFF | ((port->bridge.iolimit & 0xF0) << 8) | |
1820 | + (port->bridge.iolimitupper << 16)) - |
1821 | + desired.remap) + |
1822 | + 1; |
1823 | + |
1824 | + mvebu_pcie_set_window(port, port->io_target, port->io_attr, &desired, |
1825 | + &port->iowin); |
1826 | } |
1827 | |
1828 | static void mvebu_pcie_handle_membase_change(struct mvebu_pcie_port *port) |
1829 | { |
1830 | + struct mvebu_pcie_window desired = {.remap = MVEBU_MBUS_NO_REMAP}; |
1831 | + |
1832 | /* Are the new membase/memlimit values invalid? */ |
1833 | if (port->bridge.memlimit < port->bridge.membase || |
1834 | !(port->bridge.command & PCI_COMMAND_MEMORY)) { |
1835 | - |
1836 | - /* If a window was configured, remove it */ |
1837 | - if (port->memwin_base) { |
1838 | - mvebu_pcie_del_windows(port, port->memwin_base, |
1839 | - port->memwin_size); |
1840 | - port->memwin_base = 0; |
1841 | - port->memwin_size = 0; |
1842 | - } |
1843 | - |
1844 | + mvebu_pcie_set_window(port, port->mem_target, port->mem_attr, |
1845 | + &desired, &port->memwin); |
1846 | return; |
1847 | } |
1848 | |
1849 | @@ -447,14 +468,12 @@ static void mvebu_pcie_handle_membase_change(struct mvebu_pcie_port *port) |
1850 | * window to setup, according to the PCI-to-PCI bridge |
1851 | * specifications. |
1852 | */ |
1853 | - port->memwin_base = ((port->bridge.membase & 0xFFF0) << 16); |
1854 | - port->memwin_size = |
1855 | - (((port->bridge.memlimit & 0xFFF0) << 16) | 0xFFFFF) - |
1856 | - port->memwin_base + 1; |
1857 | - |
1858 | - mvebu_pcie_add_windows(port, port->mem_target, port->mem_attr, |
1859 | - port->memwin_base, port->memwin_size, |
1860 | - MVEBU_MBUS_NO_REMAP); |
1861 | + desired.base = ((port->bridge.membase & 0xFFF0) << 16); |
1862 | + desired.size = (((port->bridge.memlimit & 0xFFF0) << 16) | 0xFFFFF) - |
1863 | + desired.base + 1; |
1864 | + |
1865 | + mvebu_pcie_set_window(port, port->mem_target, port->mem_attr, &desired, |
1866 | + &port->memwin); |
1867 | } |
1868 | |
1869 | /* |
1870 | diff --git a/drivers/pinctrl/intel/pinctrl-baytrail.c b/drivers/pinctrl/intel/pinctrl-baytrail.c |
1871 | index 5419de8e20b1..0a965026b134 100644 |
1872 | --- a/drivers/pinctrl/intel/pinctrl-baytrail.c |
1873 | +++ b/drivers/pinctrl/intel/pinctrl-baytrail.c |
1874 | @@ -1466,7 +1466,7 @@ static void byt_gpio_dbg_show(struct seq_file *s, struct gpio_chip *chip) |
1875 | val & BYT_INPUT_EN ? " " : "in", |
1876 | val & BYT_OUTPUT_EN ? " " : "out", |
1877 | val & BYT_LEVEL ? "hi" : "lo", |
1878 | - comm->pad_map[i], comm->pad_map[i] * 32, |
1879 | + comm->pad_map[i], comm->pad_map[i] * 16, |
1880 | conf0 & 0x7, |
1881 | conf0 & BYT_TRIG_NEG ? " fall" : " ", |
1882 | conf0 & BYT_TRIG_POS ? " rise" : " ", |
1883 | diff --git a/drivers/platform/x86/hp-wmi.c b/drivers/platform/x86/hp-wmi.c |
1884 | index 96ffda493266..454cb2ee3cee 100644 |
1885 | --- a/drivers/platform/x86/hp-wmi.c |
1886 | +++ b/drivers/platform/x86/hp-wmi.c |
1887 | @@ -248,7 +248,7 @@ static int hp_wmi_display_state(void) |
1888 | int ret = hp_wmi_perform_query(HPWMI_DISPLAY_QUERY, 0, &state, |
1889 | sizeof(state), sizeof(state)); |
1890 | if (ret) |
1891 | - return -EINVAL; |
1892 | + return ret < 0 ? ret : -EINVAL; |
1893 | return state; |
1894 | } |
1895 | |
1896 | @@ -258,7 +258,7 @@ static int hp_wmi_hddtemp_state(void) |
1897 | int ret = hp_wmi_perform_query(HPWMI_HDDTEMP_QUERY, 0, &state, |
1898 | sizeof(state), sizeof(state)); |
1899 | if (ret) |
1900 | - return -EINVAL; |
1901 | + return ret < 0 ? ret : -EINVAL; |
1902 | return state; |
1903 | } |
1904 | |
1905 | @@ -268,7 +268,7 @@ static int hp_wmi_als_state(void) |
1906 | int ret = hp_wmi_perform_query(HPWMI_ALS_QUERY, 0, &state, |
1907 | sizeof(state), sizeof(state)); |
1908 | if (ret) |
1909 | - return -EINVAL; |
1910 | + return ret < 0 ? ret : -EINVAL; |
1911 | return state; |
1912 | } |
1913 | |
1914 | @@ -279,7 +279,7 @@ static int hp_wmi_dock_state(void) |
1915 | sizeof(state), sizeof(state)); |
1916 | |
1917 | if (ret) |
1918 | - return -EINVAL; |
1919 | + return ret < 0 ? ret : -EINVAL; |
1920 | |
1921 | return state & 0x1; |
1922 | } |
1923 | @@ -290,7 +290,7 @@ static int hp_wmi_tablet_state(void) |
1924 | int ret = hp_wmi_perform_query(HPWMI_HARDWARE_QUERY, 0, &state, |
1925 | sizeof(state), sizeof(state)); |
1926 | if (ret) |
1927 | - return ret; |
1928 | + return ret < 0 ? ret : -EINVAL; |
1929 | |
1930 | return (state & 0x4) ? 1 : 0; |
1931 | } |
1932 | @@ -323,7 +323,7 @@ static int __init hp_wmi_enable_hotkeys(void) |
1933 | int ret = hp_wmi_perform_query(HPWMI_BIOS_QUERY, 1, &value, |
1934 | sizeof(value), 0); |
1935 | if (ret) |
1936 | - return -EINVAL; |
1937 | + return ret < 0 ? ret : -EINVAL; |
1938 | return 0; |
1939 | } |
1940 | |
1941 | @@ -336,7 +336,7 @@ static int hp_wmi_set_block(void *data, bool blocked) |
1942 | ret = hp_wmi_perform_query(HPWMI_WIRELESS_QUERY, 1, |
1943 | &query, sizeof(query), 0); |
1944 | if (ret) |
1945 | - return -EINVAL; |
1946 | + return ret < 0 ? ret : -EINVAL; |
1947 | return 0; |
1948 | } |
1949 | |
1950 | @@ -428,7 +428,7 @@ static int hp_wmi_post_code_state(void) |
1951 | int ret = hp_wmi_perform_query(HPWMI_POSTCODEERROR_QUERY, 0, &state, |
1952 | sizeof(state), sizeof(state)); |
1953 | if (ret) |
1954 | - return -EINVAL; |
1955 | + return ret < 0 ? ret : -EINVAL; |
1956 | return state; |
1957 | } |
1958 | |
1959 | @@ -494,7 +494,7 @@ static ssize_t set_als(struct device *dev, struct device_attribute *attr, |
1960 | int ret = hp_wmi_perform_query(HPWMI_ALS_QUERY, 1, &tmp, |
1961 | sizeof(tmp), sizeof(tmp)); |
1962 | if (ret) |
1963 | - return -EINVAL; |
1964 | + return ret < 0 ? ret : -EINVAL; |
1965 | |
1966 | return count; |
1967 | } |
1968 | @@ -515,7 +515,7 @@ static ssize_t set_postcode(struct device *dev, struct device_attribute *attr, |
1969 | ret = hp_wmi_perform_query(HPWMI_POSTCODEERROR_QUERY, 1, &tmp, |
1970 | sizeof(tmp), sizeof(tmp)); |
1971 | if (ret) |
1972 | - return -EINVAL; |
1973 | + return ret < 0 ? ret : -EINVAL; |
1974 | |
1975 | return count; |
1976 | } |
1977 | @@ -572,10 +572,12 @@ static void hp_wmi_notify(u32 value, void *context) |
1978 | |
1979 | switch (event_id) { |
1980 | case HPWMI_DOCK_EVENT: |
1981 | - input_report_switch(hp_wmi_input_dev, SW_DOCK, |
1982 | - hp_wmi_dock_state()); |
1983 | - input_report_switch(hp_wmi_input_dev, SW_TABLET_MODE, |
1984 | - hp_wmi_tablet_state()); |
1985 | + if (test_bit(SW_DOCK, hp_wmi_input_dev->swbit)) |
1986 | + input_report_switch(hp_wmi_input_dev, SW_DOCK, |
1987 | + hp_wmi_dock_state()); |
1988 | + if (test_bit(SW_TABLET_MODE, hp_wmi_input_dev->swbit)) |
1989 | + input_report_switch(hp_wmi_input_dev, SW_TABLET_MODE, |
1990 | + hp_wmi_tablet_state()); |
1991 | input_sync(hp_wmi_input_dev); |
1992 | break; |
1993 | case HPWMI_PARK_HDD: |
1994 | @@ -644,6 +646,7 @@ static int __init hp_wmi_input_setup(void) |
1995 | { |
1996 | acpi_status status; |
1997 | int err; |
1998 | + int val; |
1999 | |
2000 | hp_wmi_input_dev = input_allocate_device(); |
2001 | if (!hp_wmi_input_dev) |
2002 | @@ -654,17 +657,26 @@ static int __init hp_wmi_input_setup(void) |
2003 | hp_wmi_input_dev->id.bustype = BUS_HOST; |
2004 | |
2005 | __set_bit(EV_SW, hp_wmi_input_dev->evbit); |
2006 | - __set_bit(SW_DOCK, hp_wmi_input_dev->swbit); |
2007 | - __set_bit(SW_TABLET_MODE, hp_wmi_input_dev->swbit); |
2008 | + |
2009 | + /* Dock */ |
2010 | + val = hp_wmi_dock_state(); |
2011 | + if (!(val < 0)) { |
2012 | + __set_bit(SW_DOCK, hp_wmi_input_dev->swbit); |
2013 | + input_report_switch(hp_wmi_input_dev, SW_DOCK, val); |
2014 | + } |
2015 | + |
2016 | + /* Tablet mode */ |
2017 | + val = hp_wmi_tablet_state(); |
2018 | + if (!(val < 0)) { |
2019 | + __set_bit(SW_TABLET_MODE, hp_wmi_input_dev->swbit); |
2020 | + input_report_switch(hp_wmi_input_dev, SW_TABLET_MODE, val); |
2021 | + } |
2022 | |
2023 | err = sparse_keymap_setup(hp_wmi_input_dev, hp_wmi_keymap, NULL); |
2024 | if (err) |
2025 | goto err_free_dev; |
2026 | |
2027 | /* Set initial hardware state */ |
2028 | - input_report_switch(hp_wmi_input_dev, SW_DOCK, hp_wmi_dock_state()); |
2029 | - input_report_switch(hp_wmi_input_dev, SW_TABLET_MODE, |
2030 | - hp_wmi_tablet_state()); |
2031 | input_sync(hp_wmi_input_dev); |
2032 | |
2033 | if (!hp_wmi_bios_2009_later() && hp_wmi_bios_2008_later()) |
2034 | @@ -950,10 +962,12 @@ static int hp_wmi_resume_handler(struct device *device) |
2035 | * changed. |
2036 | */ |
2037 | if (hp_wmi_input_dev) { |
2038 | - input_report_switch(hp_wmi_input_dev, SW_DOCK, |
2039 | - hp_wmi_dock_state()); |
2040 | - input_report_switch(hp_wmi_input_dev, SW_TABLET_MODE, |
2041 | - hp_wmi_tablet_state()); |
2042 | + if (test_bit(SW_DOCK, hp_wmi_input_dev->swbit)) |
2043 | + input_report_switch(hp_wmi_input_dev, SW_DOCK, |
2044 | + hp_wmi_dock_state()); |
2045 | + if (test_bit(SW_TABLET_MODE, hp_wmi_input_dev->swbit)) |
2046 | + input_report_switch(hp_wmi_input_dev, SW_TABLET_MODE, |
2047 | + hp_wmi_tablet_state()); |
2048 | input_sync(hp_wmi_input_dev); |
2049 | } |
2050 | |
2051 | diff --git a/drivers/s390/net/qeth_core.h b/drivers/s390/net/qeth_core.h |
2052 | index f3756ca6f349..d55e6438bb5e 100644 |
2053 | --- a/drivers/s390/net/qeth_core.h |
2054 | +++ b/drivers/s390/net/qeth_core.h |
2055 | @@ -921,7 +921,6 @@ void qeth_clear_thread_running_bit(struct qeth_card *, unsigned long); |
2056 | int qeth_core_hardsetup_card(struct qeth_card *); |
2057 | void qeth_print_status_message(struct qeth_card *); |
2058 | int qeth_init_qdio_queues(struct qeth_card *); |
2059 | -int qeth_send_startlan(struct qeth_card *); |
2060 | int qeth_send_ipa_cmd(struct qeth_card *, struct qeth_cmd_buffer *, |
2061 | int (*reply_cb) |
2062 | (struct qeth_card *, struct qeth_reply *, unsigned long), |
2063 | diff --git a/drivers/s390/net/qeth_core_main.c b/drivers/s390/net/qeth_core_main.c |
2064 | index e8c48309ebe9..21ef8023430f 100644 |
2065 | --- a/drivers/s390/net/qeth_core_main.c |
2066 | +++ b/drivers/s390/net/qeth_core_main.c |
2067 | @@ -2944,7 +2944,7 @@ int qeth_send_ipa_cmd(struct qeth_card *card, struct qeth_cmd_buffer *iob, |
2068 | } |
2069 | EXPORT_SYMBOL_GPL(qeth_send_ipa_cmd); |
2070 | |
2071 | -int qeth_send_startlan(struct qeth_card *card) |
2072 | +static int qeth_send_startlan(struct qeth_card *card) |
2073 | { |
2074 | int rc; |
2075 | struct qeth_cmd_buffer *iob; |
2076 | @@ -2957,7 +2957,6 @@ int qeth_send_startlan(struct qeth_card *card) |
2077 | rc = qeth_send_ipa_cmd(card, iob, NULL, NULL); |
2078 | return rc; |
2079 | } |
2080 | -EXPORT_SYMBOL_GPL(qeth_send_startlan); |
2081 | |
2082 | static int qeth_default_setadapterparms_cb(struct qeth_card *card, |
2083 | struct qeth_reply *reply, unsigned long data) |
2084 | @@ -5091,6 +5090,20 @@ int qeth_core_hardsetup_card(struct qeth_card *card) |
2085 | goto out; |
2086 | } |
2087 | |
2088 | + rc = qeth_send_startlan(card); |
2089 | + if (rc) { |
2090 | + QETH_DBF_TEXT_(SETUP, 2, "6err%d", rc); |
2091 | + if (rc == IPA_RC_LAN_OFFLINE) { |
2092 | + dev_warn(&card->gdev->dev, |
2093 | + "The LAN is offline\n"); |
2094 | + card->lan_online = 0; |
2095 | + } else { |
2096 | + rc = -ENODEV; |
2097 | + goto out; |
2098 | + } |
2099 | + } else |
2100 | + card->lan_online = 1; |
2101 | + |
2102 | card->options.ipa4.supported_funcs = 0; |
2103 | card->options.ipa6.supported_funcs = 0; |
2104 | card->options.adp.supported_funcs = 0; |
2105 | @@ -5102,14 +5115,14 @@ int qeth_core_hardsetup_card(struct qeth_card *card) |
2106 | if (qeth_is_supported(card, IPA_SETADAPTERPARMS)) { |
2107 | rc = qeth_query_setadapterparms(card); |
2108 | if (rc < 0) { |
2109 | - QETH_DBF_TEXT_(SETUP, 2, "6err%d", rc); |
2110 | + QETH_DBF_TEXT_(SETUP, 2, "7err%d", rc); |
2111 | goto out; |
2112 | } |
2113 | } |
2114 | if (qeth_adp_supported(card, IPA_SETADP_SET_DIAG_ASSIST)) { |
2115 | rc = qeth_query_setdiagass(card); |
2116 | if (rc < 0) { |
2117 | - QETH_DBF_TEXT_(SETUP, 2, "7err%d", rc); |
2118 | + QETH_DBF_TEXT_(SETUP, 2, "8err%d", rc); |
2119 | goto out; |
2120 | } |
2121 | } |
2122 | diff --git a/drivers/s390/net/qeth_l2_main.c b/drivers/s390/net/qeth_l2_main.c |
2123 | index 5d010aa89852..8530477caab8 100644 |
2124 | --- a/drivers/s390/net/qeth_l2_main.c |
2125 | +++ b/drivers/s390/net/qeth_l2_main.c |
2126 | @@ -1204,21 +1204,6 @@ static int __qeth_l2_set_online(struct ccwgroup_device *gdev, int recovery_mode) |
2127 | /* softsetup */ |
2128 | QETH_DBF_TEXT(SETUP, 2, "softsetp"); |
2129 | |
2130 | - rc = qeth_send_startlan(card); |
2131 | - if (rc) { |
2132 | - QETH_DBF_TEXT_(SETUP, 2, "1err%d", rc); |
2133 | - if (rc == 0xe080) { |
2134 | - dev_warn(&card->gdev->dev, |
2135 | - "The LAN is offline\n"); |
2136 | - card->lan_online = 0; |
2137 | - goto contin; |
2138 | - } |
2139 | - rc = -ENODEV; |
2140 | - goto out_remove; |
2141 | - } else |
2142 | - card->lan_online = 1; |
2143 | - |
2144 | -contin: |
2145 | if ((card->info.type == QETH_CARD_TYPE_OSD) || |
2146 | (card->info.type == QETH_CARD_TYPE_OSX)) { |
2147 | rc = qeth_l2_start_ipassists(card); |
2148 | diff --git a/drivers/s390/net/qeth_l3_main.c b/drivers/s390/net/qeth_l3_main.c |
2149 | index 171be5ec2ece..03a2619166ca 100644 |
2150 | --- a/drivers/s390/net/qeth_l3_main.c |
2151 | +++ b/drivers/s390/net/qeth_l3_main.c |
2152 | @@ -3230,21 +3230,6 @@ static int __qeth_l3_set_online(struct ccwgroup_device *gdev, int recovery_mode) |
2153 | /* softsetup */ |
2154 | QETH_DBF_TEXT(SETUP, 2, "softsetp"); |
2155 | |
2156 | - rc = qeth_send_startlan(card); |
2157 | - if (rc) { |
2158 | - QETH_DBF_TEXT_(SETUP, 2, "1err%d", rc); |
2159 | - if (rc == 0xe080) { |
2160 | - dev_warn(&card->gdev->dev, |
2161 | - "The LAN is offline\n"); |
2162 | - card->lan_online = 0; |
2163 | - goto contin; |
2164 | - } |
2165 | - rc = -ENODEV; |
2166 | - goto out_remove; |
2167 | - } else |
2168 | - card->lan_online = 1; |
2169 | - |
2170 | -contin: |
2171 | rc = qeth_l3_setadapter_parms(card); |
2172 | if (rc) |
2173 | QETH_DBF_TEXT_(SETUP, 2, "2err%04x", rc); |
2174 | diff --git a/drivers/s390/net/qeth_l3_sys.c b/drivers/s390/net/qeth_l3_sys.c |
2175 | index 0e00a5ce0f00..cffe42f5775d 100644 |
2176 | --- a/drivers/s390/net/qeth_l3_sys.c |
2177 | +++ b/drivers/s390/net/qeth_l3_sys.c |
2178 | @@ -692,15 +692,15 @@ static ssize_t qeth_l3_dev_vipa_add_show(char *buf, struct qeth_card *card, |
2179 | enum qeth_prot_versions proto) |
2180 | { |
2181 | struct qeth_ipaddr *ipaddr; |
2182 | - struct hlist_node *tmp; |
2183 | char addr_str[40]; |
2184 | + int str_len = 0; |
2185 | int entry_len; /* length of 1 entry string, differs between v4 and v6 */ |
2186 | - int i = 0; |
2187 | + int i; |
2188 | |
2189 | entry_len = (proto == QETH_PROT_IPV4)? 12 : 40; |
2190 | entry_len += 2; /* \n + terminator */ |
2191 | spin_lock_bh(&card->ip_lock); |
2192 | - hash_for_each_safe(card->ip_htable, i, tmp, ipaddr, hnode) { |
2193 | + hash_for_each(card->ip_htable, i, ipaddr, hnode) { |
2194 | if (ipaddr->proto != proto) |
2195 | continue; |
2196 | if (ipaddr->type != QETH_IP_TYPE_VIPA) |
2197 | @@ -708,16 +708,17 @@ static ssize_t qeth_l3_dev_vipa_add_show(char *buf, struct qeth_card *card, |
2198 | /* String must not be longer than PAGE_SIZE. So we check if |
2199 | * string length gets near PAGE_SIZE. Then we can savely display |
2200 | * the next IPv6 address (worst case, compared to IPv4) */ |
2201 | - if ((PAGE_SIZE - i) <= entry_len) |
2202 | + if ((PAGE_SIZE - str_len) <= entry_len) |
2203 | break; |
2204 | qeth_l3_ipaddr_to_string(proto, (const u8 *)&ipaddr->u, |
2205 | addr_str); |
2206 | - i += snprintf(buf + i, PAGE_SIZE - i, "%s\n", addr_str); |
2207 | + str_len += snprintf(buf + str_len, PAGE_SIZE - str_len, "%s\n", |
2208 | + addr_str); |
2209 | } |
2210 | spin_unlock_bh(&card->ip_lock); |
2211 | - i += snprintf(buf + i, PAGE_SIZE - i, "\n"); |
2212 | + str_len += snprintf(buf + str_len, PAGE_SIZE - str_len, "\n"); |
2213 | |
2214 | - return i; |
2215 | + return str_len; |
2216 | } |
2217 | |
2218 | static ssize_t qeth_l3_dev_vipa_add4_show(struct device *dev, |
2219 | @@ -854,15 +855,15 @@ static ssize_t qeth_l3_dev_rxip_add_show(char *buf, struct qeth_card *card, |
2220 | enum qeth_prot_versions proto) |
2221 | { |
2222 | struct qeth_ipaddr *ipaddr; |
2223 | - struct hlist_node *tmp; |
2224 | char addr_str[40]; |
2225 | + int str_len = 0; |
2226 | int entry_len; /* length of 1 entry string, differs between v4 and v6 */ |
2227 | - int i = 0; |
2228 | + int i; |
2229 | |
2230 | entry_len = (proto == QETH_PROT_IPV4)? 12 : 40; |
2231 | entry_len += 2; /* \n + terminator */ |
2232 | spin_lock_bh(&card->ip_lock); |
2233 | - hash_for_each_safe(card->ip_htable, i, tmp, ipaddr, hnode) { |
2234 | + hash_for_each(card->ip_htable, i, ipaddr, hnode) { |
2235 | if (ipaddr->proto != proto) |
2236 | continue; |
2237 | if (ipaddr->type != QETH_IP_TYPE_RXIP) |
2238 | @@ -870,16 +871,17 @@ static ssize_t qeth_l3_dev_rxip_add_show(char *buf, struct qeth_card *card, |
2239 | /* String must not be longer than PAGE_SIZE. So we check if |
2240 | * string length gets near PAGE_SIZE. Then we can savely display |
2241 | * the next IPv6 address (worst case, compared to IPv4) */ |
2242 | - if ((PAGE_SIZE - i) <= entry_len) |
2243 | + if ((PAGE_SIZE - str_len) <= entry_len) |
2244 | break; |
2245 | qeth_l3_ipaddr_to_string(proto, (const u8 *)&ipaddr->u, |
2246 | addr_str); |
2247 | - i += snprintf(buf + i, PAGE_SIZE - i, "%s\n", addr_str); |
2248 | + str_len += snprintf(buf + str_len, PAGE_SIZE - str_len, "%s\n", |
2249 | + addr_str); |
2250 | } |
2251 | spin_unlock_bh(&card->ip_lock); |
2252 | - i += snprintf(buf + i, PAGE_SIZE - i, "\n"); |
2253 | + str_len += snprintf(buf + str_len, PAGE_SIZE - str_len, "\n"); |
2254 | |
2255 | - return i; |
2256 | + return str_len; |
2257 | } |
2258 | |
2259 | static ssize_t qeth_l3_dev_rxip_add4_show(struct device *dev, |
2260 | diff --git a/drivers/staging/iio/trigger/iio-trig-bfin-timer.c b/drivers/staging/iio/trigger/iio-trig-bfin-timer.c |
2261 | index 38dca69a06eb..ce500a509aa2 100644 |
2262 | --- a/drivers/staging/iio/trigger/iio-trig-bfin-timer.c |
2263 | +++ b/drivers/staging/iio/trigger/iio-trig-bfin-timer.c |
2264 | @@ -260,7 +260,7 @@ static int iio_bfin_tmr_trigger_probe(struct platform_device *pdev) |
2265 | out1: |
2266 | iio_trigger_unregister(st->trig); |
2267 | out: |
2268 | - iio_trigger_put(st->trig); |
2269 | + iio_trigger_free(st->trig); |
2270 | return ret; |
2271 | } |
2272 | |
2273 | @@ -273,7 +273,7 @@ static int iio_bfin_tmr_trigger_remove(struct platform_device *pdev) |
2274 | peripheral_free(st->t->pin); |
2275 | free_irq(st->irq, st); |
2276 | iio_trigger_unregister(st->trig); |
2277 | - iio_trigger_put(st->trig); |
2278 | + iio_trigger_free(st->trig); |
2279 | |
2280 | return 0; |
2281 | } |
2282 | diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c |
2283 | index 7e97a1ccab23..15eaea53b3df 100644 |
2284 | --- a/drivers/tty/serial/sh-sci.c |
2285 | +++ b/drivers/tty/serial/sh-sci.c |
2286 | @@ -193,18 +193,17 @@ static const struct plat_sci_reg sci_regmap[SCIx_NR_REGTYPES][SCIx_NR_REGS] = { |
2287 | }, |
2288 | |
2289 | /* |
2290 | - * Common definitions for legacy IrDA ports, dependent on |
2291 | - * regshift value. |
2292 | + * Common definitions for legacy IrDA ports. |
2293 | */ |
2294 | [SCIx_IRDA_REGTYPE] = { |
2295 | [SCSMR] = { 0x00, 8 }, |
2296 | - [SCBRR] = { 0x01, 8 }, |
2297 | - [SCSCR] = { 0x02, 8 }, |
2298 | - [SCxTDR] = { 0x03, 8 }, |
2299 | - [SCxSR] = { 0x04, 8 }, |
2300 | - [SCxRDR] = { 0x05, 8 }, |
2301 | - [SCFCR] = { 0x06, 8 }, |
2302 | - [SCFDR] = { 0x07, 16 }, |
2303 | + [SCBRR] = { 0x02, 8 }, |
2304 | + [SCSCR] = { 0x04, 8 }, |
2305 | + [SCxTDR] = { 0x06, 8 }, |
2306 | + [SCxSR] = { 0x08, 16 }, |
2307 | + [SCxRDR] = { 0x0a, 8 }, |
2308 | + [SCFCR] = { 0x0c, 8 }, |
2309 | + [SCFDR] = { 0x0e, 16 }, |
2310 | [SCTFDR] = sci_reg_invalid, |
2311 | [SCRFDR] = sci_reg_invalid, |
2312 | [SCSPTR] = sci_reg_invalid, |
2313 | diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c |
2314 | index 882fc4e08284..fcc7aa248ce7 100644 |
2315 | --- a/drivers/usb/core/hcd.c |
2316 | +++ b/drivers/usb/core/hcd.c |
2317 | @@ -3023,6 +3023,7 @@ void usb_remove_hcd(struct usb_hcd *hcd) |
2318 | } |
2319 | |
2320 | usb_put_invalidate_rhdev(hcd); |
2321 | + hcd->flags = 0; |
2322 | } |
2323 | EXPORT_SYMBOL_GPL(usb_remove_hcd); |
2324 | |
2325 | diff --git a/drivers/video/fbdev/pmag-ba-fb.c b/drivers/video/fbdev/pmag-ba-fb.c |
2326 | index 5872bc4af3ce..df02fb4b7fd1 100644 |
2327 | --- a/drivers/video/fbdev/pmag-ba-fb.c |
2328 | +++ b/drivers/video/fbdev/pmag-ba-fb.c |
2329 | @@ -129,7 +129,7 @@ static struct fb_ops pmagbafb_ops = { |
2330 | /* |
2331 | * Turn the hardware cursor off. |
2332 | */ |
2333 | -static void __init pmagbafb_erase_cursor(struct fb_info *info) |
2334 | +static void pmagbafb_erase_cursor(struct fb_info *info) |
2335 | { |
2336 | struct pmagbafb_par *par = info->par; |
2337 | |
2338 | diff --git a/include/dt-bindings/clock/exynos5433.h b/include/dt-bindings/clock/exynos5433.h |
2339 | index 4fa6bb2136e3..be39d23e6a32 100644 |
2340 | --- a/include/dt-bindings/clock/exynos5433.h |
2341 | +++ b/include/dt-bindings/clock/exynos5433.h |
2342 | @@ -771,7 +771,10 @@ |
2343 | |
2344 | #define CLK_PCLK_DECON 113 |
2345 | |
2346 | -#define DISP_NR_CLK 114 |
2347 | +#define CLK_PHYCLK_MIPIDPHY0_BITCLKDIV8_PHY 114 |
2348 | +#define CLK_PHYCLK_MIPIDPHY0_RXCLKESC0_PHY 115 |
2349 | + |
2350 | +#define DISP_NR_CLK 116 |
2351 | |
2352 | /* CMU_AUD */ |
2353 | #define CLK_MOUT_AUD_PLL_USER 1 |
2354 | diff --git a/include/linux/phy.h b/include/linux/phy.h |
2355 | index 8431c8c0c320..a04d69ab7c34 100644 |
2356 | --- a/include/linux/phy.h |
2357 | +++ b/include/linux/phy.h |
2358 | @@ -142,11 +142,7 @@ static inline const char *phy_modes(phy_interface_t interface) |
2359 | /* Used when trying to connect to a specific phy (mii bus id:phy device id) */ |
2360 | #define PHY_ID_FMT "%s:%02x" |
2361 | |
2362 | -/* |
2363 | - * Need to be a little smaller than phydev->dev.bus_id to leave room |
2364 | - * for the ":%02x" |
2365 | - */ |
2366 | -#define MII_BUS_ID_SIZE (20 - 3) |
2367 | +#define MII_BUS_ID_SIZE 61 |
2368 | |
2369 | /* Or MII_ADDR_C45 into regnum for read/write on mii_bus to enable the 21 bit |
2370 | IEEE 802.3ae clause 45 addressing mode used by 10GIGE phy chips. */ |
2371 | @@ -602,7 +598,7 @@ struct phy_driver { |
2372 | /* A Structure for boards to register fixups with the PHY Lib */ |
2373 | struct phy_fixup { |
2374 | struct list_head list; |
2375 | - char bus_id[20]; |
2376 | + char bus_id[MII_BUS_ID_SIZE + 3]; |
2377 | u32 phy_uid; |
2378 | u32 phy_uid_mask; |
2379 | int (*run)(struct phy_device *phydev); |
2380 | diff --git a/include/linux/preempt.h b/include/linux/preempt.h |
2381 | index 75e4e30677f1..7eeceac52dea 100644 |
2382 | --- a/include/linux/preempt.h |
2383 | +++ b/include/linux/preempt.h |
2384 | @@ -65,19 +65,24 @@ |
2385 | |
2386 | /* |
2387 | * Are we doing bottom half or hardware interrupt processing? |
2388 | - * Are we in a softirq context? Interrupt context? |
2389 | - * in_softirq - Are we currently processing softirq or have bh disabled? |
2390 | - * in_serving_softirq - Are we currently processing softirq? |
2391 | + * |
2392 | + * in_irq() - We're in (hard) IRQ context |
2393 | + * in_softirq() - We have BH disabled, or are processing softirqs |
2394 | + * in_interrupt() - We're in NMI,IRQ,SoftIRQ context or have BH disabled |
2395 | + * in_serving_softirq() - We're in softirq context |
2396 | + * in_nmi() - We're in NMI context |
2397 | + * in_task() - We're in task context |
2398 | + * |
2399 | + * Note: due to the BH disabled confusion: in_softirq(),in_interrupt() really |
2400 | + * should not be used in new code. |
2401 | */ |
2402 | #define in_irq() (hardirq_count()) |
2403 | #define in_softirq() (softirq_count()) |
2404 | #define in_interrupt() (irq_count()) |
2405 | #define in_serving_softirq() (softirq_count() & SOFTIRQ_OFFSET) |
2406 | - |
2407 | -/* |
2408 | - * Are we in NMI context? |
2409 | - */ |
2410 | -#define in_nmi() (preempt_count() & NMI_MASK) |
2411 | +#define in_nmi() (preempt_count() & NMI_MASK) |
2412 | +#define in_task() (!(preempt_count() & \ |
2413 | + (NMI_MASK | HARDIRQ_MASK | SOFTIRQ_OFFSET))) |
2414 | |
2415 | /* |
2416 | * The preempt_count offset after preempt_disable(); |
2417 | diff --git a/include/linux/usb/cdc_ncm.h b/include/linux/usb/cdc_ncm.h |
2418 | index 00d232406f18..b0fad110817b 100644 |
2419 | --- a/include/linux/usb/cdc_ncm.h |
2420 | +++ b/include/linux/usb/cdc_ncm.h |
2421 | @@ -83,6 +83,7 @@ |
2422 | /* Driver flags */ |
2423 | #define CDC_NCM_FLAG_NDP_TO_END 0x02 /* NDP is placed at end of frame */ |
2424 | #define CDC_MBIM_FLAG_AVOID_ALTSETTING_TOGGLE 0x04 /* Avoid altsetting toggle during init */ |
2425 | +#define CDC_NCM_FLAG_RESET_NTB16 0x08 /* set NDP16 one more time after altsetting switch */ |
2426 | |
2427 | #define cdc_ncm_comm_intf_is_mbim(x) ((x)->desc.bInterfaceSubClass == USB_CDC_SUBCLASS_MBIM && \ |
2428 | (x)->desc.bInterfaceProtocol == USB_CDC_PROTO_NONE) |
2429 | diff --git a/include/sound/seq_kernel.h b/include/sound/seq_kernel.h |
2430 | index feb58d455560..4b9ee3009aa0 100644 |
2431 | --- a/include/sound/seq_kernel.h |
2432 | +++ b/include/sound/seq_kernel.h |
2433 | @@ -49,7 +49,8 @@ typedef union snd_seq_timestamp snd_seq_timestamp_t; |
2434 | #define SNDRV_SEQ_DEFAULT_CLIENT_EVENTS 200 |
2435 | |
2436 | /* max delivery path length */ |
2437 | -#define SNDRV_SEQ_MAX_HOPS 10 |
2438 | +/* NOTE: this shouldn't be greater than MAX_LOCKDEP_SUBCLASSES */ |
2439 | +#define SNDRV_SEQ_MAX_HOPS 8 |
2440 | |
2441 | /* max size of event size */ |
2442 | #define SNDRV_SEQ_MAX_EVENT_LEN 0x3fffffff |
2443 | diff --git a/kernel/sched/core.c b/kernel/sched/core.c |
2444 | index 02e7ad860b52..78181c03d9c7 100644 |
2445 | --- a/kernel/sched/core.c |
2446 | +++ b/kernel/sched/core.c |
2447 | @@ -7961,6 +7961,7 @@ void sched_move_task(struct task_struct *tsk) |
2448 | struct rq *rq; |
2449 | |
2450 | rq = task_rq_lock(tsk, &rf); |
2451 | + update_rq_clock(rq); |
2452 | |
2453 | running = task_current(rq, tsk); |
2454 | queued = task_on_rq_queued(tsk); |
2455 | diff --git a/kernel/workqueue_internal.h b/kernel/workqueue_internal.h |
2456 | index 8635417c587b..29fa81f0f51a 100644 |
2457 | --- a/kernel/workqueue_internal.h |
2458 | +++ b/kernel/workqueue_internal.h |
2459 | @@ -9,6 +9,7 @@ |
2460 | |
2461 | #include <linux/workqueue.h> |
2462 | #include <linux/kthread.h> |
2463 | +#include <linux/preempt.h> |
2464 | |
2465 | struct worker_pool; |
2466 | |
2467 | @@ -59,7 +60,7 @@ struct worker { |
2468 | */ |
2469 | static inline struct worker *current_wq_worker(void) |
2470 | { |
2471 | - if (current->flags & PF_WQ_WORKER) |
2472 | + if (in_task() && (current->flags & PF_WQ_WORKER)) |
2473 | return kthread_data(current); |
2474 | return NULL; |
2475 | } |
2476 | diff --git a/lib/asn1_decoder.c b/lib/asn1_decoder.c |
2477 | index fef5d2e114be..1ef0cec38d78 100644 |
2478 | --- a/lib/asn1_decoder.c |
2479 | +++ b/lib/asn1_decoder.c |
2480 | @@ -228,7 +228,7 @@ int asn1_ber_decoder(const struct asn1_decoder *decoder, |
2481 | hdr = 2; |
2482 | |
2483 | /* Extract a tag from the data */ |
2484 | - if (unlikely(dp >= datalen - 1)) |
2485 | + if (unlikely(datalen - dp < 2)) |
2486 | goto data_overrun_error; |
2487 | tag = data[dp++]; |
2488 | if (unlikely((tag & 0x1f) == ASN1_LONG_TAG)) |
2489 | @@ -274,7 +274,7 @@ int asn1_ber_decoder(const struct asn1_decoder *decoder, |
2490 | int n = len - 0x80; |
2491 | if (unlikely(n > 2)) |
2492 | goto length_too_long; |
2493 | - if (unlikely(dp >= datalen - n)) |
2494 | + if (unlikely(n > datalen - dp)) |
2495 | goto data_overrun_error; |
2496 | hdr += n; |
2497 | for (len = 0; n > 0; n--) { |
2498 | diff --git a/net/dsa/Kconfig b/net/dsa/Kconfig |
2499 | index 96e47c539bee..39bb5b3a82f2 100644 |
2500 | --- a/net/dsa/Kconfig |
2501 | +++ b/net/dsa/Kconfig |
2502 | @@ -1,12 +1,13 @@ |
2503 | config HAVE_NET_DSA |
2504 | def_bool y |
2505 | - depends on NETDEVICES && !S390 |
2506 | + depends on INET && NETDEVICES && !S390 |
2507 | |
2508 | # Drivers must select NET_DSA and the appropriate tagging format |
2509 | |
2510 | config NET_DSA |
2511 | tristate "Distributed Switch Architecture" |
2512 | - depends on HAVE_NET_DSA && NET_SWITCHDEV |
2513 | + depends on HAVE_NET_DSA |
2514 | + select NET_SWITCHDEV |
2515 | select PHYLIB |
2516 | ---help--- |
2517 | Say Y if you want to enable support for the hardware switches supported |
2518 | diff --git a/net/ipv4/ah4.c b/net/ipv4/ah4.c |
2519 | index f2a71025a770..22377c8ff14b 100644 |
2520 | --- a/net/ipv4/ah4.c |
2521 | +++ b/net/ipv4/ah4.c |
2522 | @@ -270,6 +270,9 @@ static void ah_input_done(struct crypto_async_request *base, int err) |
2523 | int ihl = ip_hdrlen(skb); |
2524 | int ah_hlen = (ah->hdrlen + 2) << 2; |
2525 | |
2526 | + if (err) |
2527 | + goto out; |
2528 | + |
2529 | work_iph = AH_SKB_CB(skb)->tmp; |
2530 | auth_data = ah_tmp_auth(work_iph, ihl); |
2531 | icv = ah_tmp_icv(ahp->ahash, auth_data, ahp->icv_trunc_len); |
2532 | diff --git a/net/netfilter/nft_meta.c b/net/netfilter/nft_meta.c |
2533 | index 6c1e0246706e..7c3395513ff0 100644 |
2534 | --- a/net/netfilter/nft_meta.c |
2535 | +++ b/net/netfilter/nft_meta.c |
2536 | @@ -159,8 +159,34 @@ void nft_meta_get_eval(const struct nft_expr *expr, |
2537 | else |
2538 | *dest = PACKET_BROADCAST; |
2539 | break; |
2540 | + case NFPROTO_NETDEV: |
2541 | + switch (skb->protocol) { |
2542 | + case htons(ETH_P_IP): { |
2543 | + int noff = skb_network_offset(skb); |
2544 | + struct iphdr *iph, _iph; |
2545 | + |
2546 | + iph = skb_header_pointer(skb, noff, |
2547 | + sizeof(_iph), &_iph); |
2548 | + if (!iph) |
2549 | + goto err; |
2550 | + |
2551 | + if (ipv4_is_multicast(iph->daddr)) |
2552 | + *dest = PACKET_MULTICAST; |
2553 | + else |
2554 | + *dest = PACKET_BROADCAST; |
2555 | + |
2556 | + break; |
2557 | + } |
2558 | + case htons(ETH_P_IPV6): |
2559 | + *dest = PACKET_MULTICAST; |
2560 | + break; |
2561 | + default: |
2562 | + WARN_ON_ONCE(1); |
2563 | + goto err; |
2564 | + } |
2565 | + break; |
2566 | default: |
2567 | - WARN_ON(1); |
2568 | + WARN_ON_ONCE(1); |
2569 | goto err; |
2570 | } |
2571 | break; |
2572 | diff --git a/security/apparmor/lsm.c b/security/apparmor/lsm.c |
2573 | index 41b8cb115801..7d3a98b2d55a 100644 |
2574 | --- a/security/apparmor/lsm.c |
2575 | +++ b/security/apparmor/lsm.c |
2576 | @@ -671,9 +671,9 @@ enum profile_mode aa_g_profile_mode = APPARMOR_ENFORCE; |
2577 | module_param_call(mode, param_set_mode, param_get_mode, |
2578 | &aa_g_profile_mode, S_IRUSR | S_IWUSR); |
2579 | |
2580 | -#ifdef CONFIG_SECURITY_APPARMOR_HASH |
2581 | /* whether policy verification hashing is enabled */ |
2582 | bool aa_g_hash_policy = IS_ENABLED(CONFIG_SECURITY_APPARMOR_HASH_DEFAULT); |
2583 | +#ifdef CONFIG_SECURITY_APPARMOR_HASH |
2584 | module_param_named(hash_policy, aa_g_hash_policy, aabool, S_IRUSR | S_IWUSR); |
2585 | #endif |
2586 | |
2587 | diff --git a/security/keys/trusted.c b/security/keys/trusted.c |
2588 | index f4db42e669e9..4ba2f6b91242 100644 |
2589 | --- a/security/keys/trusted.c |
2590 | +++ b/security/keys/trusted.c |
2591 | @@ -70,7 +70,7 @@ static int TSS_sha1(const unsigned char *data, unsigned int datalen, |
2592 | } |
2593 | |
2594 | ret = crypto_shash_digest(&sdesc->shash, data, datalen, digest); |
2595 | - kfree(sdesc); |
2596 | + kzfree(sdesc); |
2597 | return ret; |
2598 | } |
2599 | |
2600 | @@ -114,7 +114,7 @@ static int TSS_rawhmac(unsigned char *digest, const unsigned char *key, |
2601 | if (!ret) |
2602 | ret = crypto_shash_final(&sdesc->shash, digest); |
2603 | out: |
2604 | - kfree(sdesc); |
2605 | + kzfree(sdesc); |
2606 | return ret; |
2607 | } |
2608 | |
2609 | @@ -165,7 +165,7 @@ static int TSS_authhmac(unsigned char *digest, const unsigned char *key, |
2610 | paramdigest, TPM_NONCE_SIZE, h1, |
2611 | TPM_NONCE_SIZE, h2, 1, &c, 0, 0); |
2612 | out: |
2613 | - kfree(sdesc); |
2614 | + kzfree(sdesc); |
2615 | return ret; |
2616 | } |
2617 | |
2618 | @@ -246,7 +246,7 @@ static int TSS_checkhmac1(unsigned char *buffer, |
2619 | if (memcmp(testhmac, authdata, SHA1_DIGEST_SIZE)) |
2620 | ret = -EINVAL; |
2621 | out: |
2622 | - kfree(sdesc); |
2623 | + kzfree(sdesc); |
2624 | return ret; |
2625 | } |
2626 | |
2627 | @@ -347,7 +347,7 @@ static int TSS_checkhmac2(unsigned char *buffer, |
2628 | if (memcmp(testhmac2, authdata2, SHA1_DIGEST_SIZE)) |
2629 | ret = -EINVAL; |
2630 | out: |
2631 | - kfree(sdesc); |
2632 | + kzfree(sdesc); |
2633 | return ret; |
2634 | } |
2635 | |
2636 | @@ -564,7 +564,7 @@ static int tpm_seal(struct tpm_buf *tb, uint16_t keytype, |
2637 | *bloblen = storedsize; |
2638 | } |
2639 | out: |
2640 | - kfree(td); |
2641 | + kzfree(td); |
2642 | return ret; |
2643 | } |
2644 | |
2645 | @@ -678,7 +678,7 @@ static int key_seal(struct trusted_key_payload *p, |
2646 | if (ret < 0) |
2647 | pr_info("trusted_key: srkseal failed (%d)\n", ret); |
2648 | |
2649 | - kfree(tb); |
2650 | + kzfree(tb); |
2651 | return ret; |
2652 | } |
2653 | |
2654 | @@ -703,7 +703,7 @@ static int key_unseal(struct trusted_key_payload *p, |
2655 | /* pull migratable flag out of sealed key */ |
2656 | p->migratable = p->key[--p->key_len]; |
2657 | |
2658 | - kfree(tb); |
2659 | + kzfree(tb); |
2660 | return ret; |
2661 | } |
2662 | |
2663 | @@ -1037,12 +1037,12 @@ static int trusted_instantiate(struct key *key, |
2664 | if (!ret && options->pcrlock) |
2665 | ret = pcrlock(options->pcrlock); |
2666 | out: |
2667 | - kfree(datablob); |
2668 | - kfree(options); |
2669 | + kzfree(datablob); |
2670 | + kzfree(options); |
2671 | if (!ret) |
2672 | rcu_assign_keypointer(key, payload); |
2673 | else |
2674 | - kfree(payload); |
2675 | + kzfree(payload); |
2676 | return ret; |
2677 | } |
2678 | |
2679 | @@ -1051,8 +1051,7 @@ static void trusted_rcu_free(struct rcu_head *rcu) |
2680 | struct trusted_key_payload *p; |
2681 | |
2682 | p = container_of(rcu, struct trusted_key_payload, rcu); |
2683 | - memset(p->key, 0, p->key_len); |
2684 | - kfree(p); |
2685 | + kzfree(p); |
2686 | } |
2687 | |
2688 | /* |
2689 | @@ -1094,13 +1093,13 @@ static int trusted_update(struct key *key, struct key_preparsed_payload *prep) |
2690 | ret = datablob_parse(datablob, new_p, new_o); |
2691 | if (ret != Opt_update) { |
2692 | ret = -EINVAL; |
2693 | - kfree(new_p); |
2694 | + kzfree(new_p); |
2695 | goto out; |
2696 | } |
2697 | |
2698 | if (!new_o->keyhandle) { |
2699 | ret = -EINVAL; |
2700 | - kfree(new_p); |
2701 | + kzfree(new_p); |
2702 | goto out; |
2703 | } |
2704 | |
2705 | @@ -1114,22 +1113,22 @@ static int trusted_update(struct key *key, struct key_preparsed_payload *prep) |
2706 | ret = key_seal(new_p, new_o); |
2707 | if (ret < 0) { |
2708 | pr_info("trusted_key: key_seal failed (%d)\n", ret); |
2709 | - kfree(new_p); |
2710 | + kzfree(new_p); |
2711 | goto out; |
2712 | } |
2713 | if (new_o->pcrlock) { |
2714 | ret = pcrlock(new_o->pcrlock); |
2715 | if (ret < 0) { |
2716 | pr_info("trusted_key: pcrlock failed (%d)\n", ret); |
2717 | - kfree(new_p); |
2718 | + kzfree(new_p); |
2719 | goto out; |
2720 | } |
2721 | } |
2722 | rcu_assign_keypointer(key, new_p); |
2723 | call_rcu(&p->rcu, trusted_rcu_free); |
2724 | out: |
2725 | - kfree(datablob); |
2726 | - kfree(new_o); |
2727 | + kzfree(datablob); |
2728 | + kzfree(new_o); |
2729 | return ret; |
2730 | } |
2731 | |
2732 | @@ -1148,34 +1147,30 @@ static long trusted_read(const struct key *key, char __user *buffer, |
2733 | p = rcu_dereference_key(key); |
2734 | if (!p) |
2735 | return -EINVAL; |
2736 | - if (!buffer || buflen <= 0) |
2737 | - return 2 * p->blob_len; |
2738 | - ascii_buf = kmalloc(2 * p->blob_len, GFP_KERNEL); |
2739 | - if (!ascii_buf) |
2740 | - return -ENOMEM; |
2741 | |
2742 | - bufp = ascii_buf; |
2743 | - for (i = 0; i < p->blob_len; i++) |
2744 | - bufp = hex_byte_pack(bufp, p->blob[i]); |
2745 | - if ((copy_to_user(buffer, ascii_buf, 2 * p->blob_len)) != 0) { |
2746 | - kfree(ascii_buf); |
2747 | - return -EFAULT; |
2748 | + if (buffer && buflen >= 2 * p->blob_len) { |
2749 | + ascii_buf = kmalloc(2 * p->blob_len, GFP_KERNEL); |
2750 | + if (!ascii_buf) |
2751 | + return -ENOMEM; |
2752 | + |
2753 | + bufp = ascii_buf; |
2754 | + for (i = 0; i < p->blob_len; i++) |
2755 | + bufp = hex_byte_pack(bufp, p->blob[i]); |
2756 | + if (copy_to_user(buffer, ascii_buf, 2 * p->blob_len) != 0) { |
2757 | + kzfree(ascii_buf); |
2758 | + return -EFAULT; |
2759 | + } |
2760 | + kzfree(ascii_buf); |
2761 | } |
2762 | - kfree(ascii_buf); |
2763 | return 2 * p->blob_len; |
2764 | } |
2765 | |
2766 | /* |
2767 | - * trusted_destroy - before freeing the key, clear the decrypted data |
2768 | + * trusted_destroy - clear and free the key's payload |
2769 | */ |
2770 | static void trusted_destroy(struct key *key) |
2771 | { |
2772 | - struct trusted_key_payload *p = key->payload.data[0]; |
2773 | - |
2774 | - if (!p) |
2775 | - return; |
2776 | - memset(p->key, 0, p->key_len); |
2777 | - kfree(key->payload.data[0]); |
2778 | + kzfree(key->payload.data[0]); |
2779 | } |
2780 | |
2781 | struct key_type key_type_trusted = { |
2782 | diff --git a/sound/core/seq/oss/seq_oss_midi.c b/sound/core/seq/oss/seq_oss_midi.c |
2783 | index aaff9ee32695..b30b2139e3f0 100644 |
2784 | --- a/sound/core/seq/oss/seq_oss_midi.c |
2785 | +++ b/sound/core/seq/oss/seq_oss_midi.c |
2786 | @@ -612,9 +612,7 @@ send_midi_event(struct seq_oss_devinfo *dp, struct snd_seq_event *ev, struct seq |
2787 | if (!dp->timer->running) |
2788 | len = snd_seq_oss_timer_start(dp->timer); |
2789 | if (ev->type == SNDRV_SEQ_EVENT_SYSEX) { |
2790 | - if ((ev->flags & SNDRV_SEQ_EVENT_LENGTH_MASK) == SNDRV_SEQ_EVENT_LENGTH_VARIABLE) |
2791 | - snd_seq_oss_readq_puts(dp->readq, mdev->seq_device, |
2792 | - ev->data.ext.ptr, ev->data.ext.len); |
2793 | + snd_seq_oss_readq_sysex(dp->readq, mdev->seq_device, ev); |
2794 | } else { |
2795 | len = snd_midi_event_decode(mdev->coder, msg, sizeof(msg), ev); |
2796 | if (len > 0) |
2797 | diff --git a/sound/core/seq/oss/seq_oss_readq.c b/sound/core/seq/oss/seq_oss_readq.c |
2798 | index 046cb586fb2f..06b21226b4e7 100644 |
2799 | --- a/sound/core/seq/oss/seq_oss_readq.c |
2800 | +++ b/sound/core/seq/oss/seq_oss_readq.c |
2801 | @@ -117,6 +117,35 @@ snd_seq_oss_readq_puts(struct seq_oss_readq *q, int dev, unsigned char *data, in |
2802 | return 0; |
2803 | } |
2804 | |
2805 | +/* |
2806 | + * put MIDI sysex bytes; the event buffer may be chained, thus it has |
2807 | + * to be expanded via snd_seq_dump_var_event(). |
2808 | + */ |
2809 | +struct readq_sysex_ctx { |
2810 | + struct seq_oss_readq *readq; |
2811 | + int dev; |
2812 | +}; |
2813 | + |
2814 | +static int readq_dump_sysex(void *ptr, void *buf, int count) |
2815 | +{ |
2816 | + struct readq_sysex_ctx *ctx = ptr; |
2817 | + |
2818 | + return snd_seq_oss_readq_puts(ctx->readq, ctx->dev, buf, count); |
2819 | +} |
2820 | + |
2821 | +int snd_seq_oss_readq_sysex(struct seq_oss_readq *q, int dev, |
2822 | + struct snd_seq_event *ev) |
2823 | +{ |
2824 | + struct readq_sysex_ctx ctx = { |
2825 | + .readq = q, |
2826 | + .dev = dev |
2827 | + }; |
2828 | + |
2829 | + if ((ev->flags & SNDRV_SEQ_EVENT_LENGTH_MASK) != SNDRV_SEQ_EVENT_LENGTH_VARIABLE) |
2830 | + return 0; |
2831 | + return snd_seq_dump_var_event(ev, readq_dump_sysex, &ctx); |
2832 | +} |
2833 | + |
2834 | /* |
2835 | * copy an event to input queue: |
2836 | * return zero if enqueued |
2837 | diff --git a/sound/core/seq/oss/seq_oss_readq.h b/sound/core/seq/oss/seq_oss_readq.h |
2838 | index f1463f1f449e..8d033ca2d23f 100644 |
2839 | --- a/sound/core/seq/oss/seq_oss_readq.h |
2840 | +++ b/sound/core/seq/oss/seq_oss_readq.h |
2841 | @@ -44,6 +44,8 @@ void snd_seq_oss_readq_delete(struct seq_oss_readq *q); |
2842 | void snd_seq_oss_readq_clear(struct seq_oss_readq *readq); |
2843 | unsigned int snd_seq_oss_readq_poll(struct seq_oss_readq *readq, struct file *file, poll_table *wait); |
2844 | int snd_seq_oss_readq_puts(struct seq_oss_readq *readq, int dev, unsigned char *data, int len); |
2845 | +int snd_seq_oss_readq_sysex(struct seq_oss_readq *q, int dev, |
2846 | + struct snd_seq_event *ev); |
2847 | int snd_seq_oss_readq_put_event(struct seq_oss_readq *readq, union evrec *ev); |
2848 | int snd_seq_oss_readq_put_timestamp(struct seq_oss_readq *readq, unsigned long curt, int seq_mode); |
2849 | int snd_seq_oss_readq_pick(struct seq_oss_readq *q, union evrec *rec); |
2850 | diff --git a/sound/soc/sunxi/sun4i-spdif.c b/sound/soc/sunxi/sun4i-spdif.c |
2851 | index 88fbb3a1e660..048de15d6937 100644 |
2852 | --- a/sound/soc/sunxi/sun4i-spdif.c |
2853 | +++ b/sound/soc/sunxi/sun4i-spdif.c |
2854 | @@ -403,14 +403,6 @@ static struct snd_soc_dai_driver sun4i_spdif_dai = { |
2855 | .name = "spdif", |
2856 | }; |
2857 | |
2858 | -static const struct snd_soc_dapm_widget dit_widgets[] = { |
2859 | - SND_SOC_DAPM_OUTPUT("spdif-out"), |
2860 | -}; |
2861 | - |
2862 | -static const struct snd_soc_dapm_route dit_routes[] = { |
2863 | - { "spdif-out", NULL, "Playback" }, |
2864 | -}; |
2865 | - |
2866 | static const struct of_device_id sun4i_spdif_of_match[] = { |
2867 | { .compatible = "allwinner,sun4i-a10-spdif", }, |
2868 | { .compatible = "allwinner,sun6i-a31-spdif", }, |
2869 | diff --git a/tools/testing/selftests/firmware/fw_filesystem.sh b/tools/testing/selftests/firmware/fw_filesystem.sh |
2870 | index 5c495ad7958a..d8ac9ba67688 100755 |
2871 | --- a/tools/testing/selftests/firmware/fw_filesystem.sh |
2872 | +++ b/tools/testing/selftests/firmware/fw_filesystem.sh |
2873 | @@ -48,18 +48,18 @@ echo "ABCD0123" >"$FW" |
2874 | |
2875 | NAME=$(basename "$FW") |
2876 | |
2877 | -if printf '\000' >"$DIR"/trigger_request; then |
2878 | +if printf '\000' >"$DIR"/trigger_request 2> /dev/null; then |
2879 | echo "$0: empty filename should not succeed" >&2 |
2880 | exit 1 |
2881 | fi |
2882 | |
2883 | -if printf '\000' >"$DIR"/trigger_async_request; then |
2884 | +if printf '\000' >"$DIR"/trigger_async_request 2> /dev/null; then |
2885 | echo "$0: empty filename should not succeed (async)" >&2 |
2886 | exit 1 |
2887 | fi |
2888 | |
2889 | # Request a firmware that doesn't exist, it should fail. |
2890 | -if echo -n "nope-$NAME" >"$DIR"/trigger_request; then |
2891 | +if echo -n "nope-$NAME" >"$DIR"/trigger_request 2> /dev/null; then |
2892 | echo "$0: firmware shouldn't have loaded" >&2 |
2893 | exit 1 |
2894 | fi |
2895 | diff --git a/tools/testing/selftests/firmware/fw_userhelper.sh b/tools/testing/selftests/firmware/fw_userhelper.sh |
2896 | index b9983f8e09f6..01c626a1f226 100755 |
2897 | --- a/tools/testing/selftests/firmware/fw_userhelper.sh |
2898 | +++ b/tools/testing/selftests/firmware/fw_userhelper.sh |
2899 | @@ -64,9 +64,33 @@ trap "test_finish" EXIT |
2900 | echo "ABCD0123" >"$FW" |
2901 | NAME=$(basename "$FW") |
2902 | |
2903 | +DEVPATH="$DIR"/"nope-$NAME"/loading |
2904 | + |
2905 | # Test failure when doing nothing (timeout works). |
2906 | -echo 1 >/sys/class/firmware/timeout |
2907 | -echo -n "$NAME" >"$DIR"/trigger_request |
2908 | +echo -n 2 >/sys/class/firmware/timeout |
2909 | +echo -n "nope-$NAME" >"$DIR"/trigger_request 2>/dev/null & |
2910 | + |
2911 | +# Give the kernel some time to load the loading file, must be less |
2912 | +# than the timeout above. |
2913 | +sleep 1 |
2914 | +if [ ! -f $DEVPATH ]; then |
2915 | + echo "$0: fallback mechanism immediately cancelled" |
2916 | + echo "" |
2917 | + echo "The file never appeared: $DEVPATH" |
2918 | + echo "" |
2919 | + echo "This might be a distribution udev rule setup by your distribution" |
2920 | + echo "to immediately cancel all fallback requests, this must be" |
2921 | + echo "removed before running these tests. To confirm look for" |
2922 | + echo "a firmware rule like /lib/udev/rules.d/50-firmware.rules" |
2923 | + echo "and see if you have something like this:" |
2924 | + echo "" |
2925 | + echo "SUBSYSTEM==\"firmware\", ACTION==\"add\", ATTR{loading}=\"-1\"" |
2926 | + echo "" |
2927 | + echo "If you do remove this file or comment out this line before" |
2928 | + echo "proceeding with these tests." |
2929 | + exit 1 |
2930 | +fi |
2931 | + |
2932 | if diff -q "$FW" /dev/test_firmware >/dev/null ; then |
2933 | echo "$0: firmware was not expected to match" >&2 |
2934 | exit 1 |