Annotation of /trunk/kernel-magellan/patches-4.8/0112-4.8.13-all-fixes.patch
Parent Directory | Revision Log
Revision 2852 -
(hide annotations)
(download)
Fri Jan 6 09:45:18 2017 UTC (7 years, 8 months ago) by niro
File size: 34958 byte(s)
Fri Jan 6 09:45:18 2017 UTC (7 years, 8 months ago) by niro
File size: 34958 byte(s)
-linux-4.8.13
1 | niro | 2852 | diff --git a/Makefile b/Makefile |
2 | index 7b0c92f53169..b38abe9adef8 100644 | ||
3 | --- a/Makefile | ||
4 | +++ b/Makefile | ||
5 | @@ -1,6 +1,6 @@ | ||
6 | VERSION = 4 | ||
7 | PATCHLEVEL = 8 | ||
8 | -SUBLEVEL = 12 | ||
9 | +SUBLEVEL = 13 | ||
10 | EXTRAVERSION = | ||
11 | NAME = Psychotic Stoned Sheep | ||
12 | |||
13 | diff --git a/arch/arc/include/asm/delay.h b/arch/arc/include/asm/delay.h | ||
14 | index 08e7e2a16ac1..a36e8601114d 100644 | ||
15 | --- a/arch/arc/include/asm/delay.h | ||
16 | +++ b/arch/arc/include/asm/delay.h | ||
17 | @@ -22,10 +22,11 @@ | ||
18 | static inline void __delay(unsigned long loops) | ||
19 | { | ||
20 | __asm__ __volatile__( | ||
21 | - " lp 1f \n" | ||
22 | - " nop \n" | ||
23 | - "1: \n" | ||
24 | - : "+l"(loops)); | ||
25 | + " mov lp_count, %0 \n" | ||
26 | + " lp 1f \n" | ||
27 | + " nop \n" | ||
28 | + "1: \n" | ||
29 | + : : "r"(loops)); | ||
30 | } | ||
31 | |||
32 | extern void __bad_udelay(void); | ||
33 | diff --git a/arch/arc/include/asm/pgtable.h b/arch/arc/include/asm/pgtable.h | ||
34 | index 89eeb3720051..e94ca72b974e 100644 | ||
35 | --- a/arch/arc/include/asm/pgtable.h | ||
36 | +++ b/arch/arc/include/asm/pgtable.h | ||
37 | @@ -280,7 +280,7 @@ static inline void pmd_set(pmd_t *pmdp, pte_t *ptep) | ||
38 | |||
39 | #define pte_page(pte) pfn_to_page(pte_pfn(pte)) | ||
40 | #define mk_pte(page, prot) pfn_pte(page_to_pfn(page), prot) | ||
41 | -#define pfn_pte(pfn, prot) __pte(((pfn) << PAGE_SHIFT) | pgprot_val(prot)) | ||
42 | +#define pfn_pte(pfn, prot) __pte(__pfn_to_phys(pfn) | pgprot_val(prot)) | ||
43 | |||
44 | /* Don't use virt_to_pfn for macros below: could cause truncations for PAE40*/ | ||
45 | #define pte_pfn(pte) (pte_val(pte) >> PAGE_SHIFT) | ||
46 | diff --git a/arch/arm64/boot/dts/arm/juno-r1.dts b/arch/arm64/boot/dts/arm/juno-r1.dts | ||
47 | index 123a58b29cbd..f0b857d6d73c 100644 | ||
48 | --- a/arch/arm64/boot/dts/arm/juno-r1.dts | ||
49 | +++ b/arch/arm64/boot/dts/arm/juno-r1.dts | ||
50 | @@ -76,7 +76,7 @@ | ||
51 | compatible = "arm,idle-state"; | ||
52 | arm,psci-suspend-param = <0x1010000>; | ||
53 | local-timer-stop; | ||
54 | - entry-latency-us = <300>; | ||
55 | + entry-latency-us = <400>; | ||
56 | exit-latency-us = <1200>; | ||
57 | min-residency-us = <2500>; | ||
58 | }; | ||
59 | diff --git a/arch/arm64/boot/dts/arm/juno-r2.dts b/arch/arm64/boot/dts/arm/juno-r2.dts | ||
60 | index 007be826efce..26aaa6a7670f 100644 | ||
61 | --- a/arch/arm64/boot/dts/arm/juno-r2.dts | ||
62 | +++ b/arch/arm64/boot/dts/arm/juno-r2.dts | ||
63 | @@ -76,7 +76,7 @@ | ||
64 | compatible = "arm,idle-state"; | ||
65 | arm,psci-suspend-param = <0x1010000>; | ||
66 | local-timer-stop; | ||
67 | - entry-latency-us = <300>; | ||
68 | + entry-latency-us = <400>; | ||
69 | exit-latency-us = <1200>; | ||
70 | min-residency-us = <2500>; | ||
71 | }; | ||
72 | diff --git a/arch/arm64/boot/dts/arm/juno.dts b/arch/arm64/boot/dts/arm/juno.dts | ||
73 | index a7270eff6939..6e154d948a80 100644 | ||
74 | --- a/arch/arm64/boot/dts/arm/juno.dts | ||
75 | +++ b/arch/arm64/boot/dts/arm/juno.dts | ||
76 | @@ -76,7 +76,7 @@ | ||
77 | compatible = "arm,idle-state"; | ||
78 | arm,psci-suspend-param = <0x1010000>; | ||
79 | local-timer-stop; | ||
80 | - entry-latency-us = <300>; | ||
81 | + entry-latency-us = <400>; | ||
82 | exit-latency-us = <1200>; | ||
83 | min-residency-us = <2500>; | ||
84 | }; | ||
85 | diff --git a/arch/arm64/include/asm/cpufeature.h b/arch/arm64/include/asm/cpufeature.h | ||
86 | index 7099f26e3702..b96346b943b7 100644 | ||
87 | --- a/arch/arm64/include/asm/cpufeature.h | ||
88 | +++ b/arch/arm64/include/asm/cpufeature.h | ||
89 | @@ -90,7 +90,7 @@ struct arm64_cpu_capabilities { | ||
90 | u16 capability; | ||
91 | int def_scope; /* default scope */ | ||
92 | bool (*matches)(const struct arm64_cpu_capabilities *caps, int scope); | ||
93 | - void (*enable)(void *); /* Called on all active CPUs */ | ||
94 | + int (*enable)(void *); /* Called on all active CPUs */ | ||
95 | union { | ||
96 | struct { /* To be used for erratum handling only */ | ||
97 | u32 midr_model; | ||
98 | diff --git a/arch/arm64/include/asm/exec.h b/arch/arm64/include/asm/exec.h | ||
99 | index db0563c23482..f7865dd9d868 100644 | ||
100 | --- a/arch/arm64/include/asm/exec.h | ||
101 | +++ b/arch/arm64/include/asm/exec.h | ||
102 | @@ -18,6 +18,9 @@ | ||
103 | #ifndef __ASM_EXEC_H | ||
104 | #define __ASM_EXEC_H | ||
105 | |||
106 | +#include <linux/sched.h> | ||
107 | + | ||
108 | extern unsigned long arch_align_stack(unsigned long sp); | ||
109 | +void uao_thread_switch(struct task_struct *next); | ||
110 | |||
111 | #endif /* __ASM_EXEC_H */ | ||
112 | diff --git a/arch/arm64/include/asm/processor.h b/arch/arm64/include/asm/processor.h | ||
113 | index ace0a96e7d6e..3be0ab013e35 100644 | ||
114 | --- a/arch/arm64/include/asm/processor.h | ||
115 | +++ b/arch/arm64/include/asm/processor.h | ||
116 | @@ -190,8 +190,8 @@ static inline void spin_lock_prefetch(const void *ptr) | ||
117 | |||
118 | #endif | ||
119 | |||
120 | -void cpu_enable_pan(void *__unused); | ||
121 | -void cpu_enable_uao(void *__unused); | ||
122 | -void cpu_enable_cache_maint_trap(void *__unused); | ||
123 | +int cpu_enable_pan(void *__unused); | ||
124 | +int cpu_enable_uao(void *__unused); | ||
125 | +int cpu_enable_cache_maint_trap(void *__unused); | ||
126 | |||
127 | #endif /* __ASM_PROCESSOR_H */ | ||
128 | diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c | ||
129 | index 62272eac1352..94a0330f7ec9 100644 | ||
130 | --- a/arch/arm64/kernel/cpufeature.c | ||
131 | +++ b/arch/arm64/kernel/cpufeature.c | ||
132 | @@ -19,7 +19,9 @@ | ||
133 | #define pr_fmt(fmt) "CPU features: " fmt | ||
134 | |||
135 | #include <linux/bsearch.h> | ||
136 | +#include <linux/cpumask.h> | ||
137 | #include <linux/sort.h> | ||
138 | +#include <linux/stop_machine.h> | ||
139 | #include <linux/types.h> | ||
140 | #include <asm/cpu.h> | ||
141 | #include <asm/cpufeature.h> | ||
142 | @@ -936,7 +938,13 @@ void __init enable_cpu_capabilities(const struct arm64_cpu_capabilities *caps) | ||
143 | { | ||
144 | for (; caps->matches; caps++) | ||
145 | if (caps->enable && cpus_have_cap(caps->capability)) | ||
146 | - on_each_cpu(caps->enable, NULL, true); | ||
147 | + /* | ||
148 | + * Use stop_machine() as it schedules the work allowing | ||
149 | + * us to modify PSTATE, instead of on_each_cpu() which | ||
150 | + * uses an IPI, giving us a PSTATE that disappears when | ||
151 | + * we return. | ||
152 | + */ | ||
153 | + stop_machine(caps->enable, NULL, cpu_online_mask); | ||
154 | } | ||
155 | |||
156 | /* | ||
157 | diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c | ||
158 | index 6cd2612236dc..9cc8667212a6 100644 | ||
159 | --- a/arch/arm64/kernel/process.c | ||
160 | +++ b/arch/arm64/kernel/process.c | ||
161 | @@ -49,6 +49,7 @@ | ||
162 | #include <asm/alternative.h> | ||
163 | #include <asm/compat.h> | ||
164 | #include <asm/cacheflush.h> | ||
165 | +#include <asm/exec.h> | ||
166 | #include <asm/fpsimd.h> | ||
167 | #include <asm/mmu_context.h> | ||
168 | #include <asm/processor.h> | ||
169 | @@ -303,7 +304,7 @@ static void tls_thread_switch(struct task_struct *next) | ||
170 | } | ||
171 | |||
172 | /* Restore the UAO state depending on next's addr_limit */ | ||
173 | -static void uao_thread_switch(struct task_struct *next) | ||
174 | +void uao_thread_switch(struct task_struct *next) | ||
175 | { | ||
176 | if (IS_ENABLED(CONFIG_ARM64_UAO)) { | ||
177 | if (task_thread_info(next)->addr_limit == KERNEL_DS) | ||
178 | diff --git a/arch/arm64/kernel/suspend.c b/arch/arm64/kernel/suspend.c | ||
179 | index b616e365cee3..23ddf5500b09 100644 | ||
180 | --- a/arch/arm64/kernel/suspend.c | ||
181 | +++ b/arch/arm64/kernel/suspend.c | ||
182 | @@ -1,8 +1,11 @@ | ||
183 | #include <linux/ftrace.h> | ||
184 | #include <linux/percpu.h> | ||
185 | #include <linux/slab.h> | ||
186 | +#include <asm/alternative.h> | ||
187 | #include <asm/cacheflush.h> | ||
188 | +#include <asm/cpufeature.h> | ||
189 | #include <asm/debug-monitors.h> | ||
190 | +#include <asm/exec.h> | ||
191 | #include <asm/pgtable.h> | ||
192 | #include <asm/memory.h> | ||
193 | #include <asm/mmu_context.h> | ||
194 | @@ -48,6 +51,14 @@ void notrace __cpu_suspend_exit(void) | ||
195 | set_my_cpu_offset(per_cpu_offset(smp_processor_id())); | ||
196 | |||
197 | /* | ||
198 | + * PSTATE was not saved over suspend/resume, re-enable any detected | ||
199 | + * features that might not have been set correctly. | ||
200 | + */ | ||
201 | + asm(ALTERNATIVE("nop", SET_PSTATE_PAN(1), ARM64_HAS_PAN, | ||
202 | + CONFIG_ARM64_PAN)); | ||
203 | + uao_thread_switch(current); | ||
204 | + | ||
205 | + /* | ||
206 | * Restore HW breakpoint registers to sane values | ||
207 | * before debug exceptions are possibly reenabled | ||
208 | * through local_dbg_restore. | ||
209 | diff --git a/arch/arm64/kernel/traps.c b/arch/arm64/kernel/traps.c | ||
210 | index 771a01a7fbce..9595d3d9c3db 100644 | ||
211 | --- a/arch/arm64/kernel/traps.c | ||
212 | +++ b/arch/arm64/kernel/traps.c | ||
213 | @@ -428,9 +428,10 @@ asmlinkage void __exception do_undefinstr(struct pt_regs *regs) | ||
214 | force_signal_inject(SIGILL, ILL_ILLOPC, regs, 0); | ||
215 | } | ||
216 | |||
217 | -void cpu_enable_cache_maint_trap(void *__unused) | ||
218 | +int cpu_enable_cache_maint_trap(void *__unused) | ||
219 | { | ||
220 | config_sctlr_el1(SCTLR_EL1_UCI, 0); | ||
221 | + return 0; | ||
222 | } | ||
223 | |||
224 | #define __user_cache_maint(insn, address, res) \ | ||
225 | diff --git a/arch/arm64/mm/fault.c b/arch/arm64/mm/fault.c | ||
226 | index 05d2bd776c69..67506c3c5476 100644 | ||
227 | --- a/arch/arm64/mm/fault.c | ||
228 | +++ b/arch/arm64/mm/fault.c | ||
229 | @@ -29,7 +29,9 @@ | ||
230 | #include <linux/sched.h> | ||
231 | #include <linux/highmem.h> | ||
232 | #include <linux/perf_event.h> | ||
233 | +#include <linux/preempt.h> | ||
234 | |||
235 | +#include <asm/bug.h> | ||
236 | #include <asm/cpufeature.h> | ||
237 | #include <asm/exception.h> | ||
238 | #include <asm/debug-monitors.h> | ||
239 | @@ -671,9 +673,17 @@ asmlinkage int __exception do_debug_exception(unsigned long addr, | ||
240 | NOKPROBE_SYMBOL(do_debug_exception); | ||
241 | |||
242 | #ifdef CONFIG_ARM64_PAN | ||
243 | -void cpu_enable_pan(void *__unused) | ||
244 | +int cpu_enable_pan(void *__unused) | ||
245 | { | ||
246 | + /* | ||
247 | + * We modify PSTATE. This won't work from irq context as the PSTATE | ||
248 | + * is discarded once we return from the exception. | ||
249 | + */ | ||
250 | + WARN_ON_ONCE(in_interrupt()); | ||
251 | + | ||
252 | config_sctlr_el1(SCTLR_EL1_SPAN, 0); | ||
253 | + asm(SET_PSTATE_PAN(1)); | ||
254 | + return 0; | ||
255 | } | ||
256 | #endif /* CONFIG_ARM64_PAN */ | ||
257 | |||
258 | @@ -684,8 +694,9 @@ void cpu_enable_pan(void *__unused) | ||
259 | * We need to enable the feature at runtime (instead of adding it to | ||
260 | * PSR_MODE_EL1h) as the feature may not be implemented by the cpu. | ||
261 | */ | ||
262 | -void cpu_enable_uao(void *__unused) | ||
263 | +int cpu_enable_uao(void *__unused) | ||
264 | { | ||
265 | asm(SET_PSTATE_UAO(1)); | ||
266 | + return 0; | ||
267 | } | ||
268 | #endif /* CONFIG_ARM64_UAO */ | ||
269 | diff --git a/arch/x86/events/core.c b/arch/x86/events/core.c | ||
270 | index d0efb5cb1b00..a4e070a51584 100644 | ||
271 | --- a/arch/x86/events/core.c | ||
272 | +++ b/arch/x86/events/core.c | ||
273 | @@ -2344,7 +2344,7 @@ perf_callchain_user32(struct pt_regs *regs, struct perf_callchain_entry_ctx *ent | ||
274 | frame.next_frame = 0; | ||
275 | frame.return_address = 0; | ||
276 | |||
277 | - if (!access_ok(VERIFY_READ, fp, 8)) | ||
278 | + if (!valid_user_frame(fp, sizeof(frame))) | ||
279 | break; | ||
280 | |||
281 | bytes = __copy_from_user_nmi(&frame.next_frame, fp, 4); | ||
282 | @@ -2354,9 +2354,6 @@ perf_callchain_user32(struct pt_regs *regs, struct perf_callchain_entry_ctx *ent | ||
283 | if (bytes != 0) | ||
284 | break; | ||
285 | |||
286 | - if (!valid_user_frame(fp, sizeof(frame))) | ||
287 | - break; | ||
288 | - | ||
289 | perf_callchain_store(entry, cs_base + frame.return_address); | ||
290 | fp = compat_ptr(ss_base + frame.next_frame); | ||
291 | } | ||
292 | @@ -2405,7 +2402,7 @@ perf_callchain_user(struct perf_callchain_entry_ctx *entry, struct pt_regs *regs | ||
293 | frame.next_frame = NULL; | ||
294 | frame.return_address = 0; | ||
295 | |||
296 | - if (!access_ok(VERIFY_READ, fp, sizeof(*fp) * 2)) | ||
297 | + if (!valid_user_frame(fp, sizeof(frame))) | ||
298 | break; | ||
299 | |||
300 | bytes = __copy_from_user_nmi(&frame.next_frame, fp, sizeof(*fp)); | ||
301 | @@ -2415,9 +2412,6 @@ perf_callchain_user(struct perf_callchain_entry_ctx *entry, struct pt_regs *regs | ||
302 | if (bytes != 0) | ||
303 | break; | ||
304 | |||
305 | - if (!valid_user_frame(fp, sizeof(frame))) | ||
306 | - break; | ||
307 | - | ||
308 | perf_callchain_store(entry, frame.return_address); | ||
309 | fp = (void __user *)frame.next_frame; | ||
310 | } | ||
311 | diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c | ||
312 | index e207b33e4ce9..1e007a93bdcc 100644 | ||
313 | --- a/drivers/ata/libata-scsi.c | ||
314 | +++ b/drivers/ata/libata-scsi.c | ||
315 | @@ -1088,7 +1088,7 @@ static void ata_gen_passthru_sense(struct ata_queued_cmd *qc) | ||
316 | desc[1] = tf->command; /* status */ | ||
317 | desc[2] = tf->device; | ||
318 | desc[3] = tf->nsect; | ||
319 | - desc[0] = 0; | ||
320 | + desc[7] = 0; | ||
321 | if (tf->flags & ATA_TFLAG_LBA48) { | ||
322 | desc[8] |= 0x80; | ||
323 | if (tf->hob_nsect) | ||
324 | diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c | ||
325 | index 04365b17ee67..5163c8f918cb 100644 | ||
326 | --- a/drivers/block/zram/zram_drv.c | ||
327 | +++ b/drivers/block/zram/zram_drv.c | ||
328 | @@ -1403,7 +1403,8 @@ static ssize_t hot_remove_store(struct class *class, | ||
329 | zram = idr_find(&zram_index_idr, dev_id); | ||
330 | if (zram) { | ||
331 | ret = zram_remove(zram); | ||
332 | - idr_remove(&zram_index_idr, dev_id); | ||
333 | + if (!ret) | ||
334 | + idr_remove(&zram_index_idr, dev_id); | ||
335 | } else { | ||
336 | ret = -ENODEV; | ||
337 | } | ||
338 | diff --git a/drivers/clk/sunxi/clk-sunxi.c b/drivers/clk/sunxi/clk-sunxi.c | ||
339 | index 838b22aa8b67..f2c9274b8bd5 100644 | ||
340 | --- a/drivers/clk/sunxi/clk-sunxi.c | ||
341 | +++ b/drivers/clk/sunxi/clk-sunxi.c | ||
342 | @@ -373,7 +373,7 @@ static void sun4i_get_apb1_factors(struct factors_request *req) | ||
343 | else | ||
344 | calcp = 3; | ||
345 | |||
346 | - calcm = (req->parent_rate >> calcp) - 1; | ||
347 | + calcm = (div >> calcp) - 1; | ||
348 | |||
349 | req->rate = (req->parent_rate >> calcp) / (calcm + 1); | ||
350 | req->m = calcm; | ||
351 | diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c | ||
352 | index 10b5ddf2c588..1ed085f01a49 100644 | ||
353 | --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c | ||
354 | +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c | ||
355 | @@ -33,6 +33,7 @@ struct amdgpu_atpx { | ||
356 | |||
357 | static struct amdgpu_atpx_priv { | ||
358 | bool atpx_detected; | ||
359 | + bool bridge_pm_usable; | ||
360 | /* handle for device - and atpx */ | ||
361 | acpi_handle dhandle; | ||
362 | acpi_handle other_handle; | ||
363 | @@ -200,7 +201,11 @@ static int amdgpu_atpx_validate(struct amdgpu_atpx *atpx) | ||
364 | atpx->is_hybrid = false; | ||
365 | if (valid_bits & ATPX_MS_HYBRID_GFX_SUPPORTED) { | ||
366 | printk("ATPX Hybrid Graphics\n"); | ||
367 | - atpx->functions.power_cntl = false; | ||
368 | + /* | ||
369 | + * Disable legacy PM methods only when pcie port PM is usable, | ||
370 | + * otherwise the device might fail to power off or power on. | ||
371 | + */ | ||
372 | + atpx->functions.power_cntl = !amdgpu_atpx_priv.bridge_pm_usable; | ||
373 | atpx->is_hybrid = true; | ||
374 | } | ||
375 | |||
376 | @@ -546,17 +551,25 @@ static bool amdgpu_atpx_detect(void) | ||
377 | struct pci_dev *pdev = NULL; | ||
378 | bool has_atpx = false; | ||
379 | int vga_count = 0; | ||
380 | + bool d3_supported = false; | ||
381 | + struct pci_dev *parent_pdev; | ||
382 | |||
383 | while ((pdev = pci_get_class(PCI_CLASS_DISPLAY_VGA << 8, pdev)) != NULL) { | ||
384 | vga_count++; | ||
385 | |||
386 | has_atpx |= (amdgpu_atpx_pci_probe_handle(pdev) == true); | ||
387 | + | ||
388 | + parent_pdev = pci_upstream_bridge(pdev); | ||
389 | + d3_supported |= parent_pdev && parent_pdev->bridge_d3; | ||
390 | } | ||
391 | |||
392 | while ((pdev = pci_get_class(PCI_CLASS_DISPLAY_OTHER << 8, pdev)) != NULL) { | ||
393 | vga_count++; | ||
394 | |||
395 | has_atpx |= (amdgpu_atpx_pci_probe_handle(pdev) == true); | ||
396 | + | ||
397 | + parent_pdev = pci_upstream_bridge(pdev); | ||
398 | + d3_supported |= parent_pdev && parent_pdev->bridge_d3; | ||
399 | } | ||
400 | |||
401 | if (has_atpx && vga_count == 2) { | ||
402 | @@ -564,6 +577,7 @@ static bool amdgpu_atpx_detect(void) | ||
403 | printk(KERN_INFO "vga_switcheroo: detected switching method %s handle\n", | ||
404 | acpi_method_name); | ||
405 | amdgpu_atpx_priv.atpx_detected = true; | ||
406 | + amdgpu_atpx_priv.bridge_pm_usable = d3_supported; | ||
407 | amdgpu_atpx_init(); | ||
408 | return true; | ||
409 | } | ||
410 | diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c | ||
411 | index a77ce9983f69..b8e3854a1f20 100644 | ||
412 | --- a/drivers/gpu/drm/i915/i915_gem.c | ||
413 | +++ b/drivers/gpu/drm/i915/i915_gem.c | ||
414 | @@ -2540,7 +2540,7 @@ i915_gem_object_get_pages_gtt(struct drm_i915_gem_object *obj) | ||
415 | page = shmem_read_mapping_page(mapping, i); | ||
416 | if (IS_ERR(page)) { | ||
417 | ret = PTR_ERR(page); | ||
418 | - goto err_pages; | ||
419 | + goto err_sg; | ||
420 | } | ||
421 | } | ||
422 | #ifdef CONFIG_SWIOTLB | ||
423 | @@ -2583,8 +2583,9 @@ i915_gem_object_get_pages_gtt(struct drm_i915_gem_object *obj) | ||
424 | |||
425 | return 0; | ||
426 | |||
427 | -err_pages: | ||
428 | +err_sg: | ||
429 | sg_mark_end(sg); | ||
430 | +err_pages: | ||
431 | for_each_sgt_page(page, sgt_iter, st) | ||
432 | put_page(page); | ||
433 | sg_free_table(st); | ||
434 | diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c | ||
435 | index e26f88965c58..35d385d70d8e 100644 | ||
436 | --- a/drivers/gpu/drm/i915/intel_display.c | ||
437 | +++ b/drivers/gpu/drm/i915/intel_display.c | ||
438 | @@ -11791,7 +11791,7 @@ static int intel_crtc_page_flip(struct drm_crtc *crtc, | ||
439 | intel_crtc->reset_counter = i915_reset_counter(&dev_priv->gpu_error); | ||
440 | if (__i915_reset_in_progress_or_wedged(intel_crtc->reset_counter)) { | ||
441 | ret = -EIO; | ||
442 | - goto cleanup; | ||
443 | + goto unlock; | ||
444 | } | ||
445 | |||
446 | atomic_inc(&intel_crtc->unpin_work_count); | ||
447 | @@ -11877,6 +11877,7 @@ cleanup_pending: | ||
448 | if (!IS_ERR_OR_NULL(request)) | ||
449 | i915_add_request_no_flush(request); | ||
450 | atomic_dec(&intel_crtc->unpin_work_count); | ||
451 | +unlock: | ||
452 | mutex_unlock(&dev->struct_mutex); | ||
453 | cleanup: | ||
454 | crtc->primary->fb = old_fb; | ||
455 | diff --git a/drivers/gpu/drm/mediatek/mtk_disp_ovl.c b/drivers/gpu/drm/mediatek/mtk_disp_ovl.c | ||
456 | index 8f62671fcfbf..54acfccee7eb 100644 | ||
457 | --- a/drivers/gpu/drm/mediatek/mtk_disp_ovl.c | ||
458 | +++ b/drivers/gpu/drm/mediatek/mtk_disp_ovl.c | ||
459 | @@ -249,13 +249,6 @@ static int mtk_disp_ovl_probe(struct platform_device *pdev) | ||
460 | if (irq < 0) | ||
461 | return irq; | ||
462 | |||
463 | - ret = devm_request_irq(dev, irq, mtk_disp_ovl_irq_handler, | ||
464 | - IRQF_TRIGGER_NONE, dev_name(dev), priv); | ||
465 | - if (ret < 0) { | ||
466 | - dev_err(dev, "Failed to request irq %d: %d\n", irq, ret); | ||
467 | - return ret; | ||
468 | - } | ||
469 | - | ||
470 | comp_id = mtk_ddp_comp_get_id(dev->of_node, MTK_DISP_OVL); | ||
471 | if (comp_id < 0) { | ||
472 | dev_err(dev, "Failed to identify by alias: %d\n", comp_id); | ||
473 | @@ -271,6 +264,13 @@ static int mtk_disp_ovl_probe(struct platform_device *pdev) | ||
474 | |||
475 | platform_set_drvdata(pdev, priv); | ||
476 | |||
477 | + ret = devm_request_irq(dev, irq, mtk_disp_ovl_irq_handler, | ||
478 | + IRQF_TRIGGER_NONE, dev_name(dev), priv); | ||
479 | + if (ret < 0) { | ||
480 | + dev_err(dev, "Failed to request irq %d: %d\n", irq, ret); | ||
481 | + return ret; | ||
482 | + } | ||
483 | + | ||
484 | ret = component_add(dev, &mtk_disp_ovl_component_ops); | ||
485 | if (ret) | ||
486 | dev_err(dev, "Failed to add component: %d\n", ret); | ||
487 | diff --git a/drivers/gpu/drm/radeon/radeon_atpx_handler.c b/drivers/gpu/drm/radeon/radeon_atpx_handler.c | ||
488 | index ddef0d494084..34b4ace5d75f 100644 | ||
489 | --- a/drivers/gpu/drm/radeon/radeon_atpx_handler.c | ||
490 | +++ b/drivers/gpu/drm/radeon/radeon_atpx_handler.c | ||
491 | @@ -33,6 +33,7 @@ struct radeon_atpx { | ||
492 | |||
493 | static struct radeon_atpx_priv { | ||
494 | bool atpx_detected; | ||
495 | + bool bridge_pm_usable; | ||
496 | /* handle for device - and atpx */ | ||
497 | acpi_handle dhandle; | ||
498 | struct radeon_atpx atpx; | ||
499 | @@ -198,7 +199,11 @@ static int radeon_atpx_validate(struct radeon_atpx *atpx) | ||
500 | atpx->is_hybrid = false; | ||
501 | if (valid_bits & ATPX_MS_HYBRID_GFX_SUPPORTED) { | ||
502 | printk("ATPX Hybrid Graphics\n"); | ||
503 | - atpx->functions.power_cntl = false; | ||
504 | + /* | ||
505 | + * Disable legacy PM methods only when pcie port PM is usable, | ||
506 | + * otherwise the device might fail to power off or power on. | ||
507 | + */ | ||
508 | + atpx->functions.power_cntl = !radeon_atpx_priv.bridge_pm_usable; | ||
509 | atpx->is_hybrid = true; | ||
510 | } | ||
511 | |||
512 | @@ -543,11 +548,16 @@ static bool radeon_atpx_detect(void) | ||
513 | struct pci_dev *pdev = NULL; | ||
514 | bool has_atpx = false; | ||
515 | int vga_count = 0; | ||
516 | + bool d3_supported = false; | ||
517 | + struct pci_dev *parent_pdev; | ||
518 | |||
519 | while ((pdev = pci_get_class(PCI_CLASS_DISPLAY_VGA << 8, pdev)) != NULL) { | ||
520 | vga_count++; | ||
521 | |||
522 | has_atpx |= (radeon_atpx_pci_probe_handle(pdev) == true); | ||
523 | + | ||
524 | + parent_pdev = pci_upstream_bridge(pdev); | ||
525 | + d3_supported |= parent_pdev && parent_pdev->bridge_d3; | ||
526 | } | ||
527 | |||
528 | /* some newer PX laptops mark the dGPU as a non-VGA display device */ | ||
529 | @@ -555,6 +565,9 @@ static bool radeon_atpx_detect(void) | ||
530 | vga_count++; | ||
531 | |||
532 | has_atpx |= (radeon_atpx_pci_probe_handle(pdev) == true); | ||
533 | + | ||
534 | + parent_pdev = pci_upstream_bridge(pdev); | ||
535 | + d3_supported |= parent_pdev && parent_pdev->bridge_d3; | ||
536 | } | ||
537 | |||
538 | if (has_atpx && vga_count == 2) { | ||
539 | @@ -562,6 +575,7 @@ static bool radeon_atpx_detect(void) | ||
540 | printk(KERN_INFO "vga_switcheroo: detected switching method %s handle\n", | ||
541 | acpi_method_name); | ||
542 | radeon_atpx_priv.atpx_detected = true; | ||
543 | + radeon_atpx_priv.bridge_pm_usable = d3_supported; | ||
544 | radeon_atpx_init(); | ||
545 | return true; | ||
546 | } | ||
547 | diff --git a/drivers/input/mouse/psmouse-base.c b/drivers/input/mouse/psmouse-base.c | ||
548 | index 5784e20542a4..9f6203c8577c 100644 | ||
549 | --- a/drivers/input/mouse/psmouse-base.c | ||
550 | +++ b/drivers/input/mouse/psmouse-base.c | ||
551 | @@ -1115,10 +1115,6 @@ static int psmouse_extensions(struct psmouse *psmouse, | ||
552 | if (psmouse_try_protocol(psmouse, PSMOUSE_TOUCHKIT_PS2, | ||
553 | &max_proto, set_properties, true)) | ||
554 | return PSMOUSE_TOUCHKIT_PS2; | ||
555 | - | ||
556 | - if (psmouse_try_protocol(psmouse, PSMOUSE_BYD, | ||
557 | - &max_proto, set_properties, true)) | ||
558 | - return PSMOUSE_BYD; | ||
559 | } | ||
560 | |||
561 | /* | ||
562 | diff --git a/drivers/net/wireless/marvell/mwifiex/cfg80211.c b/drivers/net/wireless/marvell/mwifiex/cfg80211.c | ||
563 | index a8ff969c95c2..cbc7dfae0a0e 100644 | ||
564 | --- a/drivers/net/wireless/marvell/mwifiex/cfg80211.c | ||
565 | +++ b/drivers/net/wireless/marvell/mwifiex/cfg80211.c | ||
566 | @@ -2203,8 +2203,9 @@ done: | ||
567 | is_scanning_required = 1; | ||
568 | } else { | ||
569 | mwifiex_dbg(priv->adapter, MSG, | ||
570 | - "info: trying to associate to '%s' bssid %pM\n", | ||
571 | - (char *)req_ssid.ssid, bss->bssid); | ||
572 | + "info: trying to associate to '%.*s' bssid %pM\n", | ||
573 | + req_ssid.ssid_len, (char *)req_ssid.ssid, | ||
574 | + bss->bssid); | ||
575 | memcpy(&priv->cfg_bssid, bss->bssid, ETH_ALEN); | ||
576 | break; | ||
577 | } | ||
578 | @@ -2264,8 +2265,8 @@ mwifiex_cfg80211_connect(struct wiphy *wiphy, struct net_device *dev, | ||
579 | } | ||
580 | |||
581 | mwifiex_dbg(adapter, INFO, | ||
582 | - "info: Trying to associate to %s and bssid %pM\n", | ||
583 | - (char *)sme->ssid, sme->bssid); | ||
584 | + "info: Trying to associate to %.*s and bssid %pM\n", | ||
585 | + (int)sme->ssid_len, (char *)sme->ssid, sme->bssid); | ||
586 | |||
587 | if (!mwifiex_stop_bg_scan(priv)) | ||
588 | cfg80211_sched_scan_stopped_rtnl(priv->wdev.wiphy); | ||
589 | @@ -2398,8 +2399,8 @@ mwifiex_cfg80211_join_ibss(struct wiphy *wiphy, struct net_device *dev, | ||
590 | } | ||
591 | |||
592 | mwifiex_dbg(priv->adapter, MSG, | ||
593 | - "info: trying to join to %s and bssid %pM\n", | ||
594 | - (char *)params->ssid, params->bssid); | ||
595 | + "info: trying to join to %.*s and bssid %pM\n", | ||
596 | + params->ssid_len, (char *)params->ssid, params->bssid); | ||
597 | |||
598 | mwifiex_set_ibss_params(priv, params); | ||
599 | |||
600 | diff --git a/drivers/pci/pcie/aer/aer_inject.c b/drivers/pci/pcie/aer/aer_inject.c | ||
601 | index db553dc22c8e..2b6a59266689 100644 | ||
602 | --- a/drivers/pci/pcie/aer/aer_inject.c | ||
603 | +++ b/drivers/pci/pcie/aer/aer_inject.c | ||
604 | @@ -307,20 +307,6 @@ out: | ||
605 | return 0; | ||
606 | } | ||
607 | |||
608 | -static struct pci_dev *pcie_find_root_port(struct pci_dev *dev) | ||
609 | -{ | ||
610 | - while (1) { | ||
611 | - if (!pci_is_pcie(dev)) | ||
612 | - break; | ||
613 | - if (pci_pcie_type(dev) == PCI_EXP_TYPE_ROOT_PORT) | ||
614 | - return dev; | ||
615 | - if (!dev->bus->self) | ||
616 | - break; | ||
617 | - dev = dev->bus->self; | ||
618 | - } | ||
619 | - return NULL; | ||
620 | -} | ||
621 | - | ||
622 | static int find_aer_device_iter(struct device *device, void *data) | ||
623 | { | ||
624 | struct pcie_device **result = data; | ||
625 | diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c | ||
626 | index 93f280df3428..f6eff4aaffd7 100644 | ||
627 | --- a/drivers/pci/probe.c | ||
628 | +++ b/drivers/pci/probe.c | ||
629 | @@ -1439,6 +1439,21 @@ static void program_hpp_type1(struct pci_dev *dev, struct hpp_type1 *hpp) | ||
630 | dev_warn(&dev->dev, "PCI-X settings not supported\n"); | ||
631 | } | ||
632 | |||
633 | +static bool pcie_root_rcb_set(struct pci_dev *dev) | ||
634 | +{ | ||
635 | + struct pci_dev *rp = pcie_find_root_port(dev); | ||
636 | + u16 lnkctl; | ||
637 | + | ||
638 | + if (!rp) | ||
639 | + return false; | ||
640 | + | ||
641 | + pcie_capability_read_word(rp, PCI_EXP_LNKCTL, &lnkctl); | ||
642 | + if (lnkctl & PCI_EXP_LNKCTL_RCB) | ||
643 | + return true; | ||
644 | + | ||
645 | + return false; | ||
646 | +} | ||
647 | + | ||
648 | static void program_hpp_type2(struct pci_dev *dev, struct hpp_type2 *hpp) | ||
649 | { | ||
650 | int pos; | ||
651 | @@ -1468,9 +1483,20 @@ static void program_hpp_type2(struct pci_dev *dev, struct hpp_type2 *hpp) | ||
652 | ~hpp->pci_exp_devctl_and, hpp->pci_exp_devctl_or); | ||
653 | |||
654 | /* Initialize Link Control Register */ | ||
655 | - if (pcie_cap_has_lnkctl(dev)) | ||
656 | + if (pcie_cap_has_lnkctl(dev)) { | ||
657 | + | ||
658 | + /* | ||
659 | + * If the Root Port supports Read Completion Boundary of | ||
660 | + * 128, set RCB to 128. Otherwise, clear it. | ||
661 | + */ | ||
662 | + hpp->pci_exp_lnkctl_and |= PCI_EXP_LNKCTL_RCB; | ||
663 | + hpp->pci_exp_lnkctl_or &= ~PCI_EXP_LNKCTL_RCB; | ||
664 | + if (pcie_root_rcb_set(dev)) | ||
665 | + hpp->pci_exp_lnkctl_or |= PCI_EXP_LNKCTL_RCB; | ||
666 | + | ||
667 | pcie_capability_clear_and_set_word(dev, PCI_EXP_LNKCTL, | ||
668 | ~hpp->pci_exp_lnkctl_and, hpp->pci_exp_lnkctl_or); | ||
669 | + } | ||
670 | |||
671 | /* Find Advanced Error Reporting Enhanced Capability */ | ||
672 | pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ERR); | ||
673 | diff --git a/drivers/pwm/sysfs.c b/drivers/pwm/sysfs.c | ||
674 | index 0296d8178ae2..a813239300c3 100644 | ||
675 | --- a/drivers/pwm/sysfs.c | ||
676 | +++ b/drivers/pwm/sysfs.c | ||
677 | @@ -425,6 +425,8 @@ void pwmchip_sysfs_unexport_children(struct pwm_chip *chip) | ||
678 | if (test_bit(PWMF_EXPORTED, &pwm->flags)) | ||
679 | pwm_unexport_child(parent, pwm); | ||
680 | } | ||
681 | + | ||
682 | + put_device(parent); | ||
683 | } | ||
684 | |||
685 | static int __init pwm_sysfs_init(void) | ||
686 | diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c | ||
687 | index 030d0023e1d2..5138a841ff4f 100644 | ||
688 | --- a/drivers/scsi/hpsa.c | ||
689 | +++ b/drivers/scsi/hpsa.c | ||
690 | @@ -2007,7 +2007,7 @@ static struct hpsa_scsi_dev_t *lookup_hpsa_scsi_dev(struct ctlr_info *h, | ||
691 | |||
692 | static int hpsa_slave_alloc(struct scsi_device *sdev) | ||
693 | { | ||
694 | - struct hpsa_scsi_dev_t *sd; | ||
695 | + struct hpsa_scsi_dev_t *sd = NULL; | ||
696 | unsigned long flags; | ||
697 | struct ctlr_info *h; | ||
698 | |||
699 | @@ -2024,7 +2024,8 @@ static int hpsa_slave_alloc(struct scsi_device *sdev) | ||
700 | sd->target = sdev_id(sdev); | ||
701 | sd->lun = sdev->lun; | ||
702 | } | ||
703 | - } else | ||
704 | + } | ||
705 | + if (!sd) | ||
706 | sd = lookup_hpsa_scsi_dev(h, sdev_channel(sdev), | ||
707 | sdev_id(sdev), sdev->lun); | ||
708 | |||
709 | @@ -3805,6 +3806,7 @@ static int hpsa_update_device_info(struct ctlr_info *h, | ||
710 | sizeof(this_device->vendor)); | ||
711 | memcpy(this_device->model, &inq_buff[16], | ||
712 | sizeof(this_device->model)); | ||
713 | + this_device->rev = inq_buff[2]; | ||
714 | memset(this_device->device_id, 0, | ||
715 | sizeof(this_device->device_id)); | ||
716 | hpsa_get_device_id(h, scsi3addr, this_device->device_id, 8, | ||
717 | @@ -3887,10 +3889,14 @@ static void figure_bus_target_lun(struct ctlr_info *h, | ||
718 | |||
719 | if (!is_logical_dev_addr_mode(lunaddrbytes)) { | ||
720 | /* physical device, target and lun filled in later */ | ||
721 | - if (is_hba_lunid(lunaddrbytes)) | ||
722 | + if (is_hba_lunid(lunaddrbytes)) { | ||
723 | + int bus = HPSA_HBA_BUS; | ||
724 | + | ||
725 | + if (!device->rev) | ||
726 | + bus = HPSA_LEGACY_HBA_BUS; | ||
727 | hpsa_set_bus_target_lun(device, | ||
728 | - HPSA_HBA_BUS, 0, lunid & 0x3fff); | ||
729 | - else | ||
730 | + bus, 0, lunid & 0x3fff); | ||
731 | + } else | ||
732 | /* defer target, lun assignment for physical devices */ | ||
733 | hpsa_set_bus_target_lun(device, | ||
734 | HPSA_PHYSICAL_DEVICE_BUS, -1, -1); | ||
735 | diff --git a/drivers/scsi/hpsa.h b/drivers/scsi/hpsa.h | ||
736 | index a1487e67f7a1..9d45dde5747f 100644 | ||
737 | --- a/drivers/scsi/hpsa.h | ||
738 | +++ b/drivers/scsi/hpsa.h | ||
739 | @@ -69,6 +69,7 @@ struct hpsa_scsi_dev_t { | ||
740 | u64 sas_address; | ||
741 | unsigned char vendor[8]; /* bytes 8-15 of inquiry data */ | ||
742 | unsigned char model[16]; /* bytes 16-31 of inquiry data */ | ||
743 | + unsigned char rev; /* byte 2 of inquiry data */ | ||
744 | unsigned char raid_level; /* from inquiry page 0xC1 */ | ||
745 | unsigned char volume_offline; /* discovered via TUR or VPD */ | ||
746 | u16 queue_depth; /* max queue_depth for this device */ | ||
747 | @@ -403,6 +404,7 @@ struct offline_device_entry { | ||
748 | #define HPSA_RAID_VOLUME_BUS 1 | ||
749 | #define HPSA_EXTERNAL_RAID_VOLUME_BUS 2 | ||
750 | #define HPSA_HBA_BUS 0 | ||
751 | +#define HPSA_LEGACY_HBA_BUS 3 | ||
752 | |||
753 | /* | ||
754 | Send the command to the hardware | ||
755 | diff --git a/drivers/scsi/libfc/fc_lport.c b/drivers/scsi/libfc/fc_lport.c | ||
756 | index 04ce7cfb6d1b..50c71678a156 100644 | ||
757 | --- a/drivers/scsi/libfc/fc_lport.c | ||
758 | +++ b/drivers/scsi/libfc/fc_lport.c | ||
759 | @@ -308,7 +308,7 @@ struct fc_host_statistics *fc_get_host_stats(struct Scsi_Host *shost) | ||
760 | fc_stats = &lport->host_stats; | ||
761 | memset(fc_stats, 0, sizeof(struct fc_host_statistics)); | ||
762 | |||
763 | - fc_stats->seconds_since_last_reset = (lport->boot_time - jiffies) / HZ; | ||
764 | + fc_stats->seconds_since_last_reset = (jiffies - lport->boot_time) / HZ; | ||
765 | |||
766 | for_each_possible_cpu(cpu) { | ||
767 | struct fc_stats *stats; | ||
768 | diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c | ||
769 | index a78415d77434..78be4aee7064 100644 | ||
770 | --- a/fs/overlayfs/super.c | ||
771 | +++ b/fs/overlayfs/super.c | ||
772 | @@ -329,11 +329,11 @@ static struct dentry *ovl_d_real(struct dentry *dentry, | ||
773 | if (!real) | ||
774 | goto bug; | ||
775 | |||
776 | + /* Handle recursion */ | ||
777 | + real = d_real(real, inode, open_flags); | ||
778 | + | ||
779 | if (!inode || inode == d_inode(real)) | ||
780 | return real; | ||
781 | - | ||
782 | - /* Handle recursion */ | ||
783 | - return d_real(real, inode, open_flags); | ||
784 | bug: | ||
785 | WARN(1, "ovl_d_real(%pd4, %s:%lu): real dentry not found\n", dentry, | ||
786 | inode ? inode->i_sb->s_id : "NULL", inode ? inode->i_ino : 0); | ||
787 | diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h | ||
788 | index 573c5a18908f..0a0b2d5148e1 100644 | ||
789 | --- a/include/linux/compiler-gcc.h | ||
790 | +++ b/include/linux/compiler-gcc.h | ||
791 | @@ -256,7 +256,9 @@ | ||
792 | #endif | ||
793 | #endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP && !__CHECKER__ */ | ||
794 | |||
795 | -#if GCC_VERSION >= 50000 | ||
796 | +#if GCC_VERSION >= 70000 | ||
797 | +#define KASAN_ABI_VERSION 5 | ||
798 | +#elif GCC_VERSION >= 50000 | ||
799 | #define KASAN_ABI_VERSION 4 | ||
800 | #elif GCC_VERSION >= 40902 | ||
801 | #define KASAN_ABI_VERSION 3 | ||
802 | diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h | ||
803 | index 01e84436cddf..d47cc4ab74ee 100644 | ||
804 | --- a/include/linux/pagemap.h | ||
805 | +++ b/include/linux/pagemap.h | ||
806 | @@ -364,16 +364,13 @@ static inline struct page *read_mapping_page(struct address_space *mapping, | ||
807 | } | ||
808 | |||
809 | /* | ||
810 | - * Get the offset in PAGE_SIZE. | ||
811 | - * (TODO: hugepage should have ->index in PAGE_SIZE) | ||
812 | + * Get index of the page with in radix-tree | ||
813 | + * (TODO: remove once hugetlb pages will have ->index in PAGE_SIZE) | ||
814 | */ | ||
815 | -static inline pgoff_t page_to_pgoff(struct page *page) | ||
816 | +static inline pgoff_t page_to_index(struct page *page) | ||
817 | { | ||
818 | pgoff_t pgoff; | ||
819 | |||
820 | - if (unlikely(PageHeadHuge(page))) | ||
821 | - return page->index << compound_order(page); | ||
822 | - | ||
823 | if (likely(!PageTransTail(page))) | ||
824 | return page->index; | ||
825 | |||
826 | @@ -387,6 +384,18 @@ static inline pgoff_t page_to_pgoff(struct page *page) | ||
827 | } | ||
828 | |||
829 | /* | ||
830 | + * Get the offset in PAGE_SIZE. | ||
831 | + * (TODO: hugepage should have ->index in PAGE_SIZE) | ||
832 | + */ | ||
833 | +static inline pgoff_t page_to_pgoff(struct page *page) | ||
834 | +{ | ||
835 | + if (unlikely(PageHeadHuge(page))) | ||
836 | + return page->index << compound_order(page); | ||
837 | + | ||
838 | + return page_to_index(page); | ||
839 | +} | ||
840 | + | ||
841 | +/* | ||
842 | * Return byte-offset into filesystem object for page. | ||
843 | */ | ||
844 | static inline loff_t page_offset(struct page *page) | ||
845 | diff --git a/include/linux/pci.h b/include/linux/pci.h | ||
846 | index 0ab835965669..03f3df0888fe 100644 | ||
847 | --- a/include/linux/pci.h | ||
848 | +++ b/include/linux/pci.h | ||
849 | @@ -1896,6 +1896,20 @@ static inline int pci_pcie_type(const struct pci_dev *dev) | ||
850 | return (pcie_caps_reg(dev) & PCI_EXP_FLAGS_TYPE) >> 4; | ||
851 | } | ||
852 | |||
853 | +static inline struct pci_dev *pcie_find_root_port(struct pci_dev *dev) | ||
854 | +{ | ||
855 | + while (1) { | ||
856 | + if (!pci_is_pcie(dev)) | ||
857 | + break; | ||
858 | + if (pci_pcie_type(dev) == PCI_EXP_TYPE_ROOT_PORT) | ||
859 | + return dev; | ||
860 | + if (!dev->bus->self) | ||
861 | + break; | ||
862 | + dev = dev->bus->self; | ||
863 | + } | ||
864 | + return NULL; | ||
865 | +} | ||
866 | + | ||
867 | void pci_request_acs(void); | ||
868 | bool pci_acs_enabled(struct pci_dev *pdev, u16 acs_flags); | ||
869 | bool pci_acs_path_enabled(struct pci_dev *start, | ||
870 | diff --git a/include/uapi/linux/input-event-codes.h b/include/uapi/linux/input-event-codes.h | ||
871 | index d6d071fc3c56..3af60ee69053 100644 | ||
872 | --- a/include/uapi/linux/input-event-codes.h | ||
873 | +++ b/include/uapi/linux/input-event-codes.h | ||
874 | @@ -640,7 +640,7 @@ | ||
875 | * Control a data application associated with the currently viewed channel, | ||
876 | * e.g. teletext or data broadcast application (MHEG, MHP, HbbTV, etc.) | ||
877 | */ | ||
878 | -#define KEY_DATA 0x275 | ||
879 | +#define KEY_DATA 0x277 | ||
880 | |||
881 | #define BTN_TRIGGER_HAPPY 0x2c0 | ||
882 | #define BTN_TRIGGER_HAPPY1 0x2c0 | ||
883 | diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h | ||
884 | index 0082fce402a0..85c5a883c6e3 100644 | ||
885 | --- a/kernel/rcu/tree_plugin.h | ||
886 | +++ b/kernel/rcu/tree_plugin.h | ||
887 | @@ -2173,6 +2173,7 @@ static int rcu_nocb_kthread(void *arg) | ||
888 | cl++; | ||
889 | c++; | ||
890 | local_bh_enable(); | ||
891 | + cond_resched_rcu_qs(); | ||
892 | list = next; | ||
893 | } | ||
894 | trace_rcu_batch_end(rdp->rsp->name, c, !!list, 0, 0, 1); | ||
895 | diff --git a/mm/kasan/kasan.h b/mm/kasan/kasan.h | ||
896 | index e5c2181fee6f..03f4545b103d 100644 | ||
897 | --- a/mm/kasan/kasan.h | ||
898 | +++ b/mm/kasan/kasan.h | ||
899 | @@ -53,6 +53,9 @@ struct kasan_global { | ||
900 | #if KASAN_ABI_VERSION >= 4 | ||
901 | struct kasan_source_location *location; | ||
902 | #endif | ||
903 | +#if KASAN_ABI_VERSION >= 5 | ||
904 | + char *odr_indicator; | ||
905 | +#endif | ||
906 | }; | ||
907 | |||
908 | /** | ||
909 | diff --git a/mm/khugepaged.c b/mm/khugepaged.c | ||
910 | index 728d7790dc2d..87e1a7ca3846 100644 | ||
911 | --- a/mm/khugepaged.c | ||
912 | +++ b/mm/khugepaged.c | ||
913 | @@ -103,6 +103,7 @@ static struct khugepaged_scan khugepaged_scan = { | ||
914 | .mm_head = LIST_HEAD_INIT(khugepaged_scan.mm_head), | ||
915 | }; | ||
916 | |||
917 | +#ifdef CONFIG_SYSFS | ||
918 | static ssize_t scan_sleep_millisecs_show(struct kobject *kobj, | ||
919 | struct kobj_attribute *attr, | ||
920 | char *buf) | ||
921 | @@ -295,6 +296,7 @@ struct attribute_group khugepaged_attr_group = { | ||
922 | .attrs = khugepaged_attr, | ||
923 | .name = "khugepaged", | ||
924 | }; | ||
925 | +#endif /* CONFIG_SYSFS */ | ||
926 | |||
927 | #define VM_NO_KHUGEPAGED (VM_SPECIAL | VM_HUGETLB) | ||
928 | |||
929 | diff --git a/mm/mlock.c b/mm/mlock.c | ||
930 | index 14645be06e30..9c91acc0e328 100644 | ||
931 | --- a/mm/mlock.c | ||
932 | +++ b/mm/mlock.c | ||
933 | @@ -190,10 +190,13 @@ unsigned int munlock_vma_page(struct page *page) | ||
934 | */ | ||
935 | spin_lock_irq(zone_lru_lock(zone)); | ||
936 | |||
937 | - nr_pages = hpage_nr_pages(page); | ||
938 | - if (!TestClearPageMlocked(page)) | ||
939 | + if (!TestClearPageMlocked(page)) { | ||
940 | + /* Potentially, PTE-mapped THP: do not skip the rest PTEs */ | ||
941 | + nr_pages = 1; | ||
942 | goto unlock_out; | ||
943 | + } | ||
944 | |||
945 | + nr_pages = hpage_nr_pages(page); | ||
946 | __mod_zone_page_state(zone, NR_MLOCK, -nr_pages); | ||
947 | |||
948 | if (__munlock_isolate_lru_page(page, true)) { | ||
949 | diff --git a/mm/truncate.c b/mm/truncate.c | ||
950 | index a01cce450a26..8d8c62d89e6d 100644 | ||
951 | --- a/mm/truncate.c | ||
952 | +++ b/mm/truncate.c | ||
953 | @@ -283,7 +283,7 @@ void truncate_inode_pages_range(struct address_space *mapping, | ||
954 | |||
955 | if (!trylock_page(page)) | ||
956 | continue; | ||
957 | - WARN_ON(page_to_pgoff(page) != index); | ||
958 | + WARN_ON(page_to_index(page) != index); | ||
959 | if (PageWriteback(page)) { | ||
960 | unlock_page(page); | ||
961 | continue; | ||
962 | @@ -371,7 +371,7 @@ void truncate_inode_pages_range(struct address_space *mapping, | ||
963 | } | ||
964 | |||
965 | lock_page(page); | ||
966 | - WARN_ON(page_to_pgoff(page) != index); | ||
967 | + WARN_ON(page_to_index(page) != index); | ||
968 | wait_on_page_writeback(page); | ||
969 | truncate_inode_page(mapping, page); | ||
970 | unlock_page(page); | ||
971 | @@ -492,7 +492,7 @@ unsigned long invalidate_mapping_pages(struct address_space *mapping, | ||
972 | if (!trylock_page(page)) | ||
973 | continue; | ||
974 | |||
975 | - WARN_ON(page_to_pgoff(page) != index); | ||
976 | + WARN_ON(page_to_index(page) != index); | ||
977 | |||
978 | /* Middle of THP: skip */ | ||
979 | if (PageTransTail(page)) { | ||
980 | @@ -612,7 +612,7 @@ int invalidate_inode_pages2_range(struct address_space *mapping, | ||
981 | } | ||
982 | |||
983 | lock_page(page); | ||
984 | - WARN_ON(page_to_pgoff(page) != index); | ||
985 | + WARN_ON(page_to_index(page) != index); | ||
986 | if (page->mapping != mapping) { | ||
987 | unlock_page(page); | ||
988 | continue; | ||
989 | diff --git a/mm/workingset.c b/mm/workingset.c | ||
990 | index 617475f529f4..fb1f9183d89a 100644 | ||
991 | --- a/mm/workingset.c | ||
992 | +++ b/mm/workingset.c | ||
993 | @@ -348,7 +348,7 @@ static unsigned long count_shadow_nodes(struct shrinker *shrinker, | ||
994 | shadow_nodes = list_lru_shrink_count(&workingset_shadow_nodes, sc); | ||
995 | local_irq_enable(); | ||
996 | |||
997 | - if (memcg_kmem_enabled()) { | ||
998 | + if (sc->memcg) { | ||
999 | pages = mem_cgroup_node_nr_lru_pages(sc->memcg, sc->nid, | ||
1000 | LRU_ALL_FILE); | ||
1001 | } else { | ||
1002 | diff --git a/net/batman-adv/tp_meter.c b/net/batman-adv/tp_meter.c | ||
1003 | index 2333777f919d..8af1611b8ab2 100644 | ||
1004 | --- a/net/batman-adv/tp_meter.c | ||
1005 | +++ b/net/batman-adv/tp_meter.c | ||
1006 | @@ -837,6 +837,7 @@ static int batadv_tp_send(void *arg) | ||
1007 | primary_if = batadv_primary_if_get_selected(bat_priv); | ||
1008 | if (unlikely(!primary_if)) { | ||
1009 | err = BATADV_TP_REASON_DST_UNREACHABLE; | ||
1010 | + tp_vars->reason = err; | ||
1011 | goto out; | ||
1012 | } | ||
1013 | |||
1014 | diff --git a/virt/kvm/arm/vgic/vgic-v2.c b/virt/kvm/arm/vgic/vgic-v2.c | ||
1015 | index 0bf6709d1006..6fb4314cec49 100644 | ||
1016 | --- a/virt/kvm/arm/vgic/vgic-v2.c | ||
1017 | +++ b/virt/kvm/arm/vgic/vgic-v2.c | ||
1018 | @@ -50,8 +50,10 @@ void vgic_v2_process_maintenance(struct kvm_vcpu *vcpu) | ||
1019 | |||
1020 | WARN_ON(cpuif->vgic_lr[lr] & GICH_LR_STATE); | ||
1021 | |||
1022 | - kvm_notify_acked_irq(vcpu->kvm, 0, | ||
1023 | - intid - VGIC_NR_PRIVATE_IRQS); | ||
1024 | + /* Only SPIs require notification */ | ||
1025 | + if (vgic_valid_spi(vcpu->kvm, intid)) | ||
1026 | + kvm_notify_acked_irq(vcpu->kvm, 0, | ||
1027 | + intid - VGIC_NR_PRIVATE_IRQS); | ||
1028 | } | ||
1029 | } | ||
1030 | |||
1031 | diff --git a/virt/kvm/arm/vgic/vgic-v3.c b/virt/kvm/arm/vgic/vgic-v3.c | ||
1032 | index 9f0dae397d9c..5c9f9745e6ca 100644 | ||
1033 | --- a/virt/kvm/arm/vgic/vgic-v3.c | ||
1034 | +++ b/virt/kvm/arm/vgic/vgic-v3.c | ||
1035 | @@ -41,8 +41,10 @@ void vgic_v3_process_maintenance(struct kvm_vcpu *vcpu) | ||
1036 | |||
1037 | WARN_ON(cpuif->vgic_lr[lr] & ICH_LR_STATE); | ||
1038 | |||
1039 | - kvm_notify_acked_irq(vcpu->kvm, 0, | ||
1040 | - intid - VGIC_NR_PRIVATE_IRQS); | ||
1041 | + /* Only SPIs require notification */ | ||
1042 | + if (vgic_valid_spi(vcpu->kvm, intid)) | ||
1043 | + kvm_notify_acked_irq(vcpu->kvm, 0, | ||
1044 | + intid - VGIC_NR_PRIVATE_IRQS); | ||
1045 | } | ||
1046 | |||
1047 | /* | ||
1048 | diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c | ||
1049 | index 195078225aa5..690d15eaee05 100644 | ||
1050 | --- a/virt/kvm/kvm_main.c | ||
1051 | +++ b/virt/kvm/kvm_main.c | ||
1052 | @@ -2852,10 +2852,10 @@ static int kvm_ioctl_create_device(struct kvm *kvm, | ||
1053 | |||
1054 | ret = anon_inode_getfd(ops->name, &kvm_device_fops, dev, O_RDWR | O_CLOEXEC); | ||
1055 | if (ret < 0) { | ||
1056 | - ops->destroy(dev); | ||
1057 | mutex_lock(&kvm->lock); | ||
1058 | list_del(&dev->vm_node); | ||
1059 | mutex_unlock(&kvm->lock); | ||
1060 | + ops->destroy(dev); | ||
1061 | return ret; | ||
1062 | } | ||
1063 |