Magellan Linux

Annotation of /trunk/kernel-magellan/patches-4.8/0104-4.8.5-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2844 - (hide annotations) (download)
Tue Nov 22 13:19:31 2016 UTC (7 years, 6 months ago) by niro
File size: 184911 byte(s)
-linux-4.8.5
1 niro 2844 diff --git a/Documentation/ABI/testing/sysfs-class-cxl b/Documentation/ABI/testing/sysfs-class-cxl
2     index 4ba0a2a61926..640f65e79ef1 100644
3     --- a/Documentation/ABI/testing/sysfs-class-cxl
4     +++ b/Documentation/ABI/testing/sysfs-class-cxl
5     @@ -220,8 +220,11 @@ What: /sys/class/cxl/<card>/reset
6     Date: October 2014
7     Contact: linuxppc-dev@lists.ozlabs.org
8     Description: write only
9     - Writing 1 will issue a PERST to card which may cause the card
10     - to reload the FPGA depending on load_image_on_perst.
11     + Writing 1 will issue a PERST to card provided there are no
12     + contexts active on any one of the card AFUs. This may cause
13     + the card to reload the FPGA depending on load_image_on_perst.
14     + Writing -1 will do a force PERST irrespective of any active
15     + contexts on the card AFUs.
16     Users: https://github.com/ibm-capi/libcxl
17    
18     What: /sys/class/cxl/<card>/perst_reloads_same_image (not in a guest)
19     diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
20     index a4f4d693e2c1..46726d4899fe 100644
21     --- a/Documentation/kernel-parameters.txt
22     +++ b/Documentation/kernel-parameters.txt
23     @@ -1457,7 +1457,14 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
24     i8042.nopnp [HW] Don't use ACPIPnP / PnPBIOS to discover KBD/AUX
25     controllers
26     i8042.notimeout [HW] Ignore timeout condition signalled by controller
27     - i8042.reset [HW] Reset the controller during init and cleanup
28     + i8042.reset [HW] Reset the controller during init, cleanup and
29     + suspend-to-ram transitions, only during s2r
30     + transitions, or never reset
31     + Format: { 1 | Y | y | 0 | N | n }
32     + 1, Y, y: always reset controller
33     + 0, N, n: don't ever reset controller
34     + Default: only on s2r transitions on x86; most other
35     + architectures force reset to be always executed
36     i8042.unlock [HW] Unlock (ignore) the keylock
37     i8042.kbdreset [HW] Reset device connected to KBD port
38    
39     diff --git a/Makefile b/Makefile
40     index 82a36ab540a4..daa3a01d2525 100644
41     --- a/Makefile
42     +++ b/Makefile
43     @@ -1,6 +1,6 @@
44     VERSION = 4
45     PATCHLEVEL = 8
46     -SUBLEVEL = 4
47     +SUBLEVEL = 5
48     EXTRAVERSION =
49     NAME = Psychotic Stoned Sheep
50    
51     diff --git a/arch/arc/kernel/signal.c b/arch/arc/kernel/signal.c
52     index 6cb3736b6b83..d347bbc086fe 100644
53     --- a/arch/arc/kernel/signal.c
54     +++ b/arch/arc/kernel/signal.c
55     @@ -107,13 +107,13 @@ static int restore_usr_regs(struct pt_regs *regs, struct rt_sigframe __user *sf)
56     struct user_regs_struct uregs;
57    
58     err = __copy_from_user(&set, &sf->uc.uc_sigmask, sizeof(set));
59     - if (!err)
60     - set_current_blocked(&set);
61     -
62     err |= __copy_from_user(&uregs.scratch,
63     &(sf->uc.uc_mcontext.regs.scratch),
64     sizeof(sf->uc.uc_mcontext.regs.scratch));
65     + if (err)
66     + return err;
67    
68     + set_current_blocked(&set);
69     regs->bta = uregs.scratch.bta;
70     regs->lp_start = uregs.scratch.lp_start;
71     regs->lp_end = uregs.scratch.lp_end;
72     @@ -138,7 +138,7 @@ static int restore_usr_regs(struct pt_regs *regs, struct rt_sigframe __user *sf)
73     regs->r0 = uregs.scratch.r0;
74     regs->sp = uregs.scratch.sp;
75    
76     - return err;
77     + return 0;
78     }
79    
80     static inline int is_do_ss_needed(unsigned int magic)
81     diff --git a/arch/arm64/include/asm/kvm_emulate.h b/arch/arm64/include/asm/kvm_emulate.h
82     index 4cdeae3b17c6..948a9a8a9297 100644
83     --- a/arch/arm64/include/asm/kvm_emulate.h
84     +++ b/arch/arm64/include/asm/kvm_emulate.h
85     @@ -167,11 +167,6 @@ static inline bool kvm_vcpu_dabt_isvalid(const struct kvm_vcpu *vcpu)
86     return !!(kvm_vcpu_get_hsr(vcpu) & ESR_ELx_ISV);
87     }
88    
89     -static inline bool kvm_vcpu_dabt_iswrite(const struct kvm_vcpu *vcpu)
90     -{
91     - return !!(kvm_vcpu_get_hsr(vcpu) & ESR_ELx_WNR);
92     -}
93     -
94     static inline bool kvm_vcpu_dabt_issext(const struct kvm_vcpu *vcpu)
95     {
96     return !!(kvm_vcpu_get_hsr(vcpu) & ESR_ELx_SSE);
97     @@ -192,6 +187,12 @@ static inline bool kvm_vcpu_dabt_iss1tw(const struct kvm_vcpu *vcpu)
98     return !!(kvm_vcpu_get_hsr(vcpu) & ESR_ELx_S1PTW);
99     }
100    
101     +static inline bool kvm_vcpu_dabt_iswrite(const struct kvm_vcpu *vcpu)
102     +{
103     + return !!(kvm_vcpu_get_hsr(vcpu) & ESR_ELx_WNR) ||
104     + kvm_vcpu_dabt_iss1tw(vcpu); /* AF/DBM update */
105     +}
106     +
107     static inline bool kvm_vcpu_dabt_is_cm(const struct kvm_vcpu *vcpu)
108     {
109     return !!(kvm_vcpu_get_hsr(vcpu) & ESR_ELx_CM);
110     diff --git a/arch/arm64/include/asm/module.h b/arch/arm64/include/asm/module.h
111     index e12af6754634..06ff7fd9e81f 100644
112     --- a/arch/arm64/include/asm/module.h
113     +++ b/arch/arm64/include/asm/module.h
114     @@ -17,6 +17,7 @@
115     #define __ASM_MODULE_H
116    
117     #include <asm-generic/module.h>
118     +#include <asm/memory.h>
119    
120     #define MODULE_ARCH_VERMAGIC "aarch64"
121    
122     @@ -32,6 +33,10 @@ u64 module_emit_plt_entry(struct module *mod, const Elf64_Rela *rela,
123     Elf64_Sym *sym);
124    
125     #ifdef CONFIG_RANDOMIZE_BASE
126     +#ifdef CONFIG_MODVERSIONS
127     +#define ARCH_RELOCATES_KCRCTAB
128     +#define reloc_start (kimage_vaddr - KIMAGE_VADDR)
129     +#endif
130     extern u64 module_alloc_base;
131     #else
132     #define module_alloc_base ((u64)_etext - MODULES_VSIZE)
133     diff --git a/arch/arm64/include/asm/percpu.h b/arch/arm64/include/asm/percpu.h
134     index 2fee2f59288c..5394c8405e66 100644
135     --- a/arch/arm64/include/asm/percpu.h
136     +++ b/arch/arm64/include/asm/percpu.h
137     @@ -44,48 +44,44 @@ static inline unsigned long __percpu_##op(void *ptr, \
138     \
139     switch (size) { \
140     case 1: \
141     - do { \
142     - asm ("//__per_cpu_" #op "_1\n" \
143     - "ldxrb %w[ret], %[ptr]\n" \
144     + asm ("//__per_cpu_" #op "_1\n" \
145     + "1: ldxrb %w[ret], %[ptr]\n" \
146     #asm_op " %w[ret], %w[ret], %w[val]\n" \
147     - "stxrb %w[loop], %w[ret], %[ptr]\n" \
148     - : [loop] "=&r" (loop), [ret] "=&r" (ret), \
149     - [ptr] "+Q"(*(u8 *)ptr) \
150     - : [val] "Ir" (val)); \
151     - } while (loop); \
152     + " stxrb %w[loop], %w[ret], %[ptr]\n" \
153     + " cbnz %w[loop], 1b" \
154     + : [loop] "=&r" (loop), [ret] "=&r" (ret), \
155     + [ptr] "+Q"(*(u8 *)ptr) \
156     + : [val] "Ir" (val)); \
157     break; \
158     case 2: \
159     - do { \
160     - asm ("//__per_cpu_" #op "_2\n" \
161     - "ldxrh %w[ret], %[ptr]\n" \
162     + asm ("//__per_cpu_" #op "_2\n" \
163     + "1: ldxrh %w[ret], %[ptr]\n" \
164     #asm_op " %w[ret], %w[ret], %w[val]\n" \
165     - "stxrh %w[loop], %w[ret], %[ptr]\n" \
166     - : [loop] "=&r" (loop), [ret] "=&r" (ret), \
167     - [ptr] "+Q"(*(u16 *)ptr) \
168     - : [val] "Ir" (val)); \
169     - } while (loop); \
170     + " stxrh %w[loop], %w[ret], %[ptr]\n" \
171     + " cbnz %w[loop], 1b" \
172     + : [loop] "=&r" (loop), [ret] "=&r" (ret), \
173     + [ptr] "+Q"(*(u16 *)ptr) \
174     + : [val] "Ir" (val)); \
175     break; \
176     case 4: \
177     - do { \
178     - asm ("//__per_cpu_" #op "_4\n" \
179     - "ldxr %w[ret], %[ptr]\n" \
180     + asm ("//__per_cpu_" #op "_4\n" \
181     + "1: ldxr %w[ret], %[ptr]\n" \
182     #asm_op " %w[ret], %w[ret], %w[val]\n" \
183     - "stxr %w[loop], %w[ret], %[ptr]\n" \
184     - : [loop] "=&r" (loop), [ret] "=&r" (ret), \
185     - [ptr] "+Q"(*(u32 *)ptr) \
186     - : [val] "Ir" (val)); \
187     - } while (loop); \
188     + " stxr %w[loop], %w[ret], %[ptr]\n" \
189     + " cbnz %w[loop], 1b" \
190     + : [loop] "=&r" (loop), [ret] "=&r" (ret), \
191     + [ptr] "+Q"(*(u32 *)ptr) \
192     + : [val] "Ir" (val)); \
193     break; \
194     case 8: \
195     - do { \
196     - asm ("//__per_cpu_" #op "_8\n" \
197     - "ldxr %[ret], %[ptr]\n" \
198     + asm ("//__per_cpu_" #op "_8\n" \
199     + "1: ldxr %[ret], %[ptr]\n" \
200     #asm_op " %[ret], %[ret], %[val]\n" \
201     - "stxr %w[loop], %[ret], %[ptr]\n" \
202     - : [loop] "=&r" (loop), [ret] "=&r" (ret), \
203     - [ptr] "+Q"(*(u64 *)ptr) \
204     - : [val] "Ir" (val)); \
205     - } while (loop); \
206     + " stxr %w[loop], %[ret], %[ptr]\n" \
207     + " cbnz %w[loop], 1b" \
208     + : [loop] "=&r" (loop), [ret] "=&r" (ret), \
209     + [ptr] "+Q"(*(u64 *)ptr) \
210     + : [val] "Ir" (val)); \
211     break; \
212     default: \
213     BUILD_BUG(); \
214     @@ -150,44 +146,40 @@ static inline unsigned long __percpu_xchg(void *ptr, unsigned long val,
215    
216     switch (size) {
217     case 1:
218     - do {
219     - asm ("//__percpu_xchg_1\n"
220     - "ldxrb %w[ret], %[ptr]\n"
221     - "stxrb %w[loop], %w[val], %[ptr]\n"
222     - : [loop] "=&r"(loop), [ret] "=&r"(ret),
223     - [ptr] "+Q"(*(u8 *)ptr)
224     - : [val] "r" (val));
225     - } while (loop);
226     + asm ("//__percpu_xchg_1\n"
227     + "1: ldxrb %w[ret], %[ptr]\n"
228     + " stxrb %w[loop], %w[val], %[ptr]\n"
229     + " cbnz %w[loop], 1b"
230     + : [loop] "=&r"(loop), [ret] "=&r"(ret),
231     + [ptr] "+Q"(*(u8 *)ptr)
232     + : [val] "r" (val));
233     break;
234     case 2:
235     - do {
236     - asm ("//__percpu_xchg_2\n"
237     - "ldxrh %w[ret], %[ptr]\n"
238     - "stxrh %w[loop], %w[val], %[ptr]\n"
239     - : [loop] "=&r"(loop), [ret] "=&r"(ret),
240     - [ptr] "+Q"(*(u16 *)ptr)
241     - : [val] "r" (val));
242     - } while (loop);
243     + asm ("//__percpu_xchg_2\n"
244     + "1: ldxrh %w[ret], %[ptr]\n"
245     + " stxrh %w[loop], %w[val], %[ptr]\n"
246     + " cbnz %w[loop], 1b"
247     + : [loop] "=&r"(loop), [ret] "=&r"(ret),
248     + [ptr] "+Q"(*(u16 *)ptr)
249     + : [val] "r" (val));
250     break;
251     case 4:
252     - do {
253     - asm ("//__percpu_xchg_4\n"
254     - "ldxr %w[ret], %[ptr]\n"
255     - "stxr %w[loop], %w[val], %[ptr]\n"
256     - : [loop] "=&r"(loop), [ret] "=&r"(ret),
257     - [ptr] "+Q"(*(u32 *)ptr)
258     - : [val] "r" (val));
259     - } while (loop);
260     + asm ("//__percpu_xchg_4\n"
261     + "1: ldxr %w[ret], %[ptr]\n"
262     + " stxr %w[loop], %w[val], %[ptr]\n"
263     + " cbnz %w[loop], 1b"
264     + : [loop] "=&r"(loop), [ret] "=&r"(ret),
265     + [ptr] "+Q"(*(u32 *)ptr)
266     + : [val] "r" (val));
267     break;
268     case 8:
269     - do {
270     - asm ("//__percpu_xchg_8\n"
271     - "ldxr %[ret], %[ptr]\n"
272     - "stxr %w[loop], %[val], %[ptr]\n"
273     - : [loop] "=&r"(loop), [ret] "=&r"(ret),
274     - [ptr] "+Q"(*(u64 *)ptr)
275     - : [val] "r" (val));
276     - } while (loop);
277     + asm ("//__percpu_xchg_8\n"
278     + "1: ldxr %[ret], %[ptr]\n"
279     + " stxr %w[loop], %[val], %[ptr]\n"
280     + " cbnz %w[loop], 1b"
281     + : [loop] "=&r"(loop), [ret] "=&r"(ret),
282     + [ptr] "+Q"(*(u64 *)ptr)
283     + : [val] "r" (val));
284     break;
285     default:
286     BUILD_BUG();
287     diff --git a/arch/arm64/include/asm/uaccess.h b/arch/arm64/include/asm/uaccess.h
288     index c47257c91b77..db849839e07b 100644
289     --- a/arch/arm64/include/asm/uaccess.h
290     +++ b/arch/arm64/include/asm/uaccess.h
291     @@ -21,6 +21,7 @@
292     /*
293     * User space memory access functions
294     */
295     +#include <linux/bitops.h>
296     #include <linux/kasan-checks.h>
297     #include <linux/string.h>
298     #include <linux/thread_info.h>
299     @@ -102,6 +103,13 @@ static inline void set_fs(mm_segment_t fs)
300     flag; \
301     })
302    
303     +/*
304     + * When dealing with data aborts or instruction traps we may end up with
305     + * a tagged userland pointer. Clear the tag to get a sane pointer to pass
306     + * on to access_ok(), for instance.
307     + */
308     +#define untagged_addr(addr) sign_extend64(addr, 55)
309     +
310     #define access_ok(type, addr, size) __range_ok(addr, size)
311     #define user_addr_max get_fs
312    
313     diff --git a/arch/arm64/kernel/armv8_deprecated.c b/arch/arm64/kernel/armv8_deprecated.c
314     index 42ffdb54e162..b0988bb1bf64 100644
315     --- a/arch/arm64/kernel/armv8_deprecated.c
316     +++ b/arch/arm64/kernel/armv8_deprecated.c
317     @@ -280,35 +280,43 @@ static void __init register_insn_emulation_sysctl(struct ctl_table *table)
318     /*
319     * Error-checking SWP macros implemented using ldxr{b}/stxr{b}
320     */
321     -#define __user_swpX_asm(data, addr, res, temp, B) \
322     +
323     +/* Arbitrary constant to ensure forward-progress of the LL/SC loop */
324     +#define __SWP_LL_SC_LOOPS 4
325     +
326     +#define __user_swpX_asm(data, addr, res, temp, temp2, B) \
327     __asm__ __volatile__( \
328     + " mov %w3, %w7\n" \
329     ALTERNATIVE("nop", SET_PSTATE_PAN(0), ARM64_HAS_PAN, \
330     CONFIG_ARM64_PAN) \
331     - "0: ldxr"B" %w2, [%3]\n" \
332     - "1: stxr"B" %w0, %w1, [%3]\n" \
333     + "0: ldxr"B" %w2, [%4]\n" \
334     + "1: stxr"B" %w0, %w1, [%4]\n" \
335     " cbz %w0, 2f\n" \
336     - " mov %w0, %w4\n" \
337     + " sub %w3, %w3, #1\n" \
338     + " cbnz %w3, 0b\n" \
339     + " mov %w0, %w5\n" \
340     " b 3f\n" \
341     "2:\n" \
342     " mov %w1, %w2\n" \
343     "3:\n" \
344     " .pushsection .fixup,\"ax\"\n" \
345     " .align 2\n" \
346     - "4: mov %w0, %w5\n" \
347     + "4: mov %w0, %w6\n" \
348     " b 3b\n" \
349     " .popsection" \
350     _ASM_EXTABLE(0b, 4b) \
351     _ASM_EXTABLE(1b, 4b) \
352     ALTERNATIVE("nop", SET_PSTATE_PAN(1), ARM64_HAS_PAN, \
353     CONFIG_ARM64_PAN) \
354     - : "=&r" (res), "+r" (data), "=&r" (temp) \
355     - : "r" (addr), "i" (-EAGAIN), "i" (-EFAULT) \
356     + : "=&r" (res), "+r" (data), "=&r" (temp), "=&r" (temp2) \
357     + : "r" (addr), "i" (-EAGAIN), "i" (-EFAULT), \
358     + "i" (__SWP_LL_SC_LOOPS) \
359     : "memory")
360    
361     -#define __user_swp_asm(data, addr, res, temp) \
362     - __user_swpX_asm(data, addr, res, temp, "")
363     -#define __user_swpb_asm(data, addr, res, temp) \
364     - __user_swpX_asm(data, addr, res, temp, "b")
365     +#define __user_swp_asm(data, addr, res, temp, temp2) \
366     + __user_swpX_asm(data, addr, res, temp, temp2, "")
367     +#define __user_swpb_asm(data, addr, res, temp, temp2) \
368     + __user_swpX_asm(data, addr, res, temp, temp2, "b")
369    
370     /*
371     * Bit 22 of the instruction encoding distinguishes between
372     @@ -328,12 +336,12 @@ static int emulate_swpX(unsigned int address, unsigned int *data,
373     }
374    
375     while (1) {
376     - unsigned long temp;
377     + unsigned long temp, temp2;
378    
379     if (type == TYPE_SWPB)
380     - __user_swpb_asm(*data, address, res, temp);
381     + __user_swpb_asm(*data, address, res, temp, temp2);
382     else
383     - __user_swp_asm(*data, address, res, temp);
384     + __user_swp_asm(*data, address, res, temp, temp2);
385    
386     if (likely(res != -EAGAIN) || signal_pending(current))
387     break;
388     diff --git a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S
389     index 3e7b050e99dc..4d19508c55a3 100644
390     --- a/arch/arm64/kernel/head.S
391     +++ b/arch/arm64/kernel/head.S
392     @@ -578,8 +578,9 @@ CPU_LE( movk x0, #0x30d0, lsl #16 ) // Clear EE and E0E on LE systems
393     b.lt 4f // Skip if no PMU present
394     mrs x0, pmcr_el0 // Disable debug access traps
395     ubfx x0, x0, #11, #5 // to EL2 and allow access to
396     - msr mdcr_el2, x0 // all PMU counters from EL1
397     4:
398     + csel x0, xzr, x0, lt // all PMU counters from EL1
399     + msr mdcr_el2, x0 // (if they exist)
400    
401     /* Stage-2 translation */
402     msr vttbr_el2, xzr
403     diff --git a/arch/arm64/kernel/traps.c b/arch/arm64/kernel/traps.c
404     index df06750846de..771a01a7fbce 100644
405     --- a/arch/arm64/kernel/traps.c
406     +++ b/arch/arm64/kernel/traps.c
407     @@ -434,18 +434,21 @@ void cpu_enable_cache_maint_trap(void *__unused)
408     }
409    
410     #define __user_cache_maint(insn, address, res) \
411     - asm volatile ( \
412     - "1: " insn ", %1\n" \
413     - " mov %w0, #0\n" \
414     - "2:\n" \
415     - " .pushsection .fixup,\"ax\"\n" \
416     - " .align 2\n" \
417     - "3: mov %w0, %w2\n" \
418     - " b 2b\n" \
419     - " .popsection\n" \
420     - _ASM_EXTABLE(1b, 3b) \
421     - : "=r" (res) \
422     - : "r" (address), "i" (-EFAULT) )
423     + if (untagged_addr(address) >= user_addr_max()) \
424     + res = -EFAULT; \
425     + else \
426     + asm volatile ( \
427     + "1: " insn ", %1\n" \
428     + " mov %w0, #0\n" \
429     + "2:\n" \
430     + " .pushsection .fixup,\"ax\"\n" \
431     + " .align 2\n" \
432     + "3: mov %w0, %w2\n" \
433     + " b 2b\n" \
434     + " .popsection\n" \
435     + _ASM_EXTABLE(1b, 3b) \
436     + : "=r" (res) \
437     + : "r" (address), "i" (-EFAULT) )
438    
439     asmlinkage void __exception do_sysinstr(unsigned int esr, struct pt_regs *regs)
440     {
441     diff --git a/arch/arm64/kvm/hyp/entry.S b/arch/arm64/kvm/hyp/entry.S
442     index ce9e5e5f28cf..eaf08d3abbef 100644
443     --- a/arch/arm64/kvm/hyp/entry.S
444     +++ b/arch/arm64/kvm/hyp/entry.S
445     @@ -98,6 +98,8 @@ ENTRY(__guest_exit)
446     // x4-x29,lr: vcpu regs
447     // vcpu x0-x3 on the stack
448    
449     + ALTERNATIVE(nop, SET_PSTATE_PAN(1), ARM64_HAS_PAN, CONFIG_ARM64_PAN)
450     +
451     add x2, x0, #VCPU_CONTEXT
452    
453     stp x4, x5, [x2, #CPU_XREG_OFFSET(4)]
454     diff --git a/arch/metag/include/asm/atomic.h b/arch/metag/include/asm/atomic.h
455     index 470e365f04ea..8ff0a70865f6 100644
456     --- a/arch/metag/include/asm/atomic.h
457     +++ b/arch/metag/include/asm/atomic.h
458     @@ -39,11 +39,10 @@
459     #define atomic_dec(v) atomic_sub(1, (v))
460    
461     #define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0)
462     +#define atomic_dec_if_positive(v) atomic_sub_if_positive(1, v)
463    
464     #endif
465    
466     -#define atomic_dec_if_positive(v) atomic_sub_if_positive(1, v)
467     -
468     #include <asm-generic/atomic64.h>
469    
470     #endif /* __ASM_METAG_ATOMIC_H */
471     diff --git a/arch/mips/include/asm/ptrace.h b/arch/mips/include/asm/ptrace.h
472     index f6fc6aac5496..b6578611dddb 100644
473     --- a/arch/mips/include/asm/ptrace.h
474     +++ b/arch/mips/include/asm/ptrace.h
475     @@ -152,7 +152,7 @@ static inline int is_syscall_success(struct pt_regs *regs)
476    
477     static inline long regs_return_value(struct pt_regs *regs)
478     {
479     - if (is_syscall_success(regs))
480     + if (is_syscall_success(regs) || !user_mode(regs))
481     return regs->regs[2];
482     else
483     return -regs->regs[2];
484     diff --git a/arch/mips/vdso/Makefile b/arch/mips/vdso/Makefile
485     index 3b4538ec0102..de9e8836d248 100644
486     --- a/arch/mips/vdso/Makefile
487     +++ b/arch/mips/vdso/Makefile
488     @@ -82,7 +82,7 @@ obj-vdso := $(obj-vdso-y:%.o=$(obj)/%.o)
489     $(obj-vdso): KBUILD_CFLAGS := $(cflags-vdso) $(native-abi)
490     $(obj-vdso): KBUILD_AFLAGS := $(aflags-vdso) $(native-abi)
491    
492     -$(obj)/vdso.lds: KBUILD_CPPFLAGS := $(native-abi)
493     +$(obj)/vdso.lds: KBUILD_CPPFLAGS := $(ccflags-vdso) $(native-abi)
494    
495     $(obj)/vdso.so.dbg.raw: $(obj)/vdso.lds $(obj-vdso) FORCE
496     $(call if_changed,vdsold)
497     diff --git a/arch/parisc/include/asm/pgtable.h b/arch/parisc/include/asm/pgtable.h
498     index 291cee28ccb6..c2c43f714684 100644
499     --- a/arch/parisc/include/asm/pgtable.h
500     +++ b/arch/parisc/include/asm/pgtable.h
501     @@ -83,10 +83,10 @@ static inline void purge_tlb_entries(struct mm_struct *mm, unsigned long addr)
502     printk("%s:%d: bad pgd %08lx.\n", __FILE__, __LINE__, (unsigned long)pgd_val(e))
503    
504     /* This is the size of the initially mapped kernel memory */
505     -#ifdef CONFIG_64BIT
506     -#define KERNEL_INITIAL_ORDER 25 /* 1<<25 = 32MB */
507     +#if defined(CONFIG_64BIT)
508     +#define KERNEL_INITIAL_ORDER 26 /* 1<<26 = 64MB */
509     #else
510     -#define KERNEL_INITIAL_ORDER 24 /* 1<<24 = 16MB */
511     +#define KERNEL_INITIAL_ORDER 25 /* 1<<25 = 32MB */
512     #endif
513     #define KERNEL_INITIAL_SIZE (1 << KERNEL_INITIAL_ORDER)
514    
515     diff --git a/arch/parisc/kernel/setup.c b/arch/parisc/kernel/setup.c
516     index f7ea626e29c9..81d6f6391944 100644
517     --- a/arch/parisc/kernel/setup.c
518     +++ b/arch/parisc/kernel/setup.c
519     @@ -38,6 +38,7 @@
520     #include <linux/export.h>
521    
522     #include <asm/processor.h>
523     +#include <asm/sections.h>
524     #include <asm/pdc.h>
525     #include <asm/led.h>
526     #include <asm/machdep.h> /* for pa7300lc_init() proto */
527     @@ -140,6 +141,13 @@ void __init setup_arch(char **cmdline_p)
528     #endif
529     printk(KERN_CONT ".\n");
530    
531     + /*
532     + * Check if initial kernel page mappings are sufficient.
533     + * panic early if not, else we may access kernel functions
534     + * and variables which can't be reached.
535     + */
536     + if (__pa((unsigned long) &_end) >= KERNEL_INITIAL_SIZE)
537     + panic("KERNEL_INITIAL_ORDER too small!");
538    
539     pdc_console_init();
540    
541     diff --git a/arch/parisc/kernel/time.c b/arch/parisc/kernel/time.c
542     index 4b0b963d52a7..9b63b876a13a 100644
543     --- a/arch/parisc/kernel/time.c
544     +++ b/arch/parisc/kernel/time.c
545     @@ -226,12 +226,6 @@ void __init start_cpu_itimer(void)
546     unsigned int cpu = smp_processor_id();
547     unsigned long next_tick = mfctl(16) + clocktick;
548    
549     -#if defined(CONFIG_HAVE_UNSTABLE_SCHED_CLOCK) && defined(CONFIG_64BIT)
550     - /* With multiple 64bit CPUs online, the cr16's are not syncronized. */
551     - if (cpu != 0)
552     - clear_sched_clock_stable();
553     -#endif
554     -
555     mtctl(next_tick, 16); /* kick off Interval Timer (CR16) */
556    
557     per_cpu(cpu_data, cpu).it_value = next_tick;
558     diff --git a/arch/parisc/kernel/vmlinux.lds.S b/arch/parisc/kernel/vmlinux.lds.S
559     index f3ead0b6ce46..75304af9f742 100644
560     --- a/arch/parisc/kernel/vmlinux.lds.S
561     +++ b/arch/parisc/kernel/vmlinux.lds.S
562     @@ -89,8 +89,9 @@ SECTIONS
563     /* Start of data section */
564     _sdata = .;
565    
566     - RO_DATA_SECTION(8)
567     -
568     + /* Architecturally we need to keep __gp below 0x1000000 and thus
569     + * in front of RO_DATA_SECTION() which stores lots of tracepoint
570     + * and ftrace symbols. */
571     #ifdef CONFIG_64BIT
572     . = ALIGN(16);
573     /* Linkage tables */
574     @@ -105,6 +106,8 @@ SECTIONS
575     }
576     #endif
577    
578     + RO_DATA_SECTION(8)
579     +
580     /* unwind info */
581     .PARISC.unwind : {
582     __start___unwind = .;
583     diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
584     index 927d2ab2ce08..792cb1768c8f 100644
585     --- a/arch/powerpc/Kconfig
586     +++ b/arch/powerpc/Kconfig
587     @@ -637,7 +637,7 @@ config FORCE_MAX_ZONEORDER
588     int "Maximum zone order"
589     range 8 9 if PPC64 && PPC_64K_PAGES
590     default "9" if PPC64 && PPC_64K_PAGES
591     - range 9 13 if PPC64 && !PPC_64K_PAGES
592     + range 13 13 if PPC64 && !PPC_64K_PAGES
593     default "13" if PPC64 && !PPC_64K_PAGES
594     range 9 64 if PPC32 && PPC_16K_PAGES
595     default "9" if PPC32 && PPC_16K_PAGES
596     diff --git a/arch/powerpc/kernel/eeh_driver.c b/arch/powerpc/kernel/eeh_driver.c
597     index 5f36e8a70daa..29aa8d1ce273 100644
598     --- a/arch/powerpc/kernel/eeh_driver.c
599     +++ b/arch/powerpc/kernel/eeh_driver.c
600     @@ -994,6 +994,14 @@ static void eeh_handle_special_event(void)
601     /* Notify all devices to be down */
602     eeh_pe_state_clear(pe, EEH_PE_PRI_BUS);
603     bus = eeh_pe_bus_get(phb_pe);
604     + if (!bus) {
605     + pr_err("%s: Cannot find PCI bus for "
606     + "PHB#%d-PE#%x\n",
607     + __func__,
608     + pe->phb->global_number,
609     + pe->addr);
610     + break;
611     + }
612     eeh_pe_dev_traverse(pe,
613     eeh_report_failure, NULL);
614     pci_hp_remove_devices(bus);
615     diff --git a/arch/powerpc/kernel/vdso64/datapage.S b/arch/powerpc/kernel/vdso64/datapage.S
616     index 184a6ba7f283..abf17feffe40 100644
617     --- a/arch/powerpc/kernel/vdso64/datapage.S
618     +++ b/arch/powerpc/kernel/vdso64/datapage.S
619     @@ -59,7 +59,7 @@ V_FUNCTION_BEGIN(__kernel_get_syscall_map)
620     bl V_LOCAL_FUNC(__get_datapage)
621     mtlr r12
622     addi r3,r3,CFG_SYSCALL_MAP64
623     - cmpli cr0,r4,0
624     + cmpldi cr0,r4,0
625     crclr cr0*4+so
626     beqlr
627     li r0,NR_syscalls
628     diff --git a/arch/powerpc/kernel/vdso64/gettimeofday.S b/arch/powerpc/kernel/vdso64/gettimeofday.S
629     index a76b4af37ef2..382021324883 100644
630     --- a/arch/powerpc/kernel/vdso64/gettimeofday.S
631     +++ b/arch/powerpc/kernel/vdso64/gettimeofday.S
632     @@ -145,7 +145,7 @@ V_FUNCTION_BEGIN(__kernel_clock_getres)
633     bne cr0,99f
634    
635     li r3,0
636     - cmpli cr0,r4,0
637     + cmpldi cr0,r4,0
638     crclr cr0*4+so
639     beqlr
640     lis r5,CLOCK_REALTIME_RES@h
641     diff --git a/arch/powerpc/lib/copyuser_64.S b/arch/powerpc/lib/copyuser_64.S
642     index f09899e35991..7b22624f332c 100644
643     --- a/arch/powerpc/lib/copyuser_64.S
644     +++ b/arch/powerpc/lib/copyuser_64.S
645     @@ -359,6 +359,7 @@ END_FTR_SECTION_IFCLR(CPU_FTR_UNALIGNED_LD_STD)
646     addi r3,r3,8
647     171:
648     177:
649     +179:
650     addi r3,r3,8
651     370:
652     372:
653     @@ -373,7 +374,6 @@ END_FTR_SECTION_IFCLR(CPU_FTR_UNALIGNED_LD_STD)
654     173:
655     174:
656     175:
657     -179:
658     181:
659     184:
660     186:
661     diff --git a/arch/powerpc/mm/copro_fault.c b/arch/powerpc/mm/copro_fault.c
662     index bb0354222b11..362954f98029 100644
663     --- a/arch/powerpc/mm/copro_fault.c
664     +++ b/arch/powerpc/mm/copro_fault.c
665     @@ -106,6 +106,8 @@ int copro_calculate_slb(struct mm_struct *mm, u64 ea, struct copro_slb *slb)
666     switch (REGION_ID(ea)) {
667     case USER_REGION_ID:
668     pr_devel("%s: 0x%llx -- USER_REGION_ID\n", __func__, ea);
669     + if (mm == NULL)
670     + return 1;
671     psize = get_slice_psize(mm, ea);
672     ssize = user_segment_size(ea);
673     vsid = get_vsid(mm->context.id, ea, ssize);
674     diff --git a/arch/powerpc/mm/hash_utils_64.c b/arch/powerpc/mm/hash_utils_64.c
675     index 0821556e16f4..28923b2e2df1 100644
676     --- a/arch/powerpc/mm/hash_utils_64.c
677     +++ b/arch/powerpc/mm/hash_utils_64.c
678     @@ -526,7 +526,7 @@ static bool might_have_hea(void)
679     */
680     #ifdef CONFIG_IBMEBUS
681     return !cpu_has_feature(CPU_FTR_ARCH_207S) &&
682     - !firmware_has_feature(FW_FEATURE_SPLPAR);
683     + firmware_has_feature(FW_FEATURE_SPLPAR);
684     #else
685     return false;
686     #endif
687     diff --git a/arch/powerpc/platforms/powernv/eeh-powernv.c b/arch/powerpc/platforms/powernv/eeh-powernv.c
688     index 86544ea85dc3..ba17fdd87ab0 100644
689     --- a/arch/powerpc/platforms/powernv/eeh-powernv.c
690     +++ b/arch/powerpc/platforms/powernv/eeh-powernv.c
691     @@ -1091,6 +1091,11 @@ static int pnv_eeh_reset(struct eeh_pe *pe, int option)
692     }
693    
694     bus = eeh_pe_bus_get(pe);
695     + if (!bus) {
696     + pr_err("%s: Cannot find PCI bus for PHB#%d-PE#%x\n",
697     + __func__, pe->phb->global_number, pe->addr);
698     + return -EIO;
699     + }
700     if (pe->type & EEH_PE_VF)
701     return pnv_eeh_reset_vf_pe(pe, option);
702    
703     @@ -1306,7 +1311,7 @@ static void pnv_eeh_get_and_dump_hub_diag(struct pci_controller *hose)
704     return;
705     }
706    
707     - switch (data->type) {
708     + switch (be16_to_cpu(data->type)) {
709     case OPAL_P7IOC_DIAG_TYPE_RGC:
710     pr_info("P7IOC diag-data for RGC\n\n");
711     pnv_eeh_dump_hub_diag_common(data);
712     @@ -1538,7 +1543,7 @@ static int pnv_eeh_next_error(struct eeh_pe **pe)
713    
714     /* Try best to clear it */
715     opal_pci_eeh_freeze_clear(phb->opal_id,
716     - frozen_pe_no,
717     + be64_to_cpu(frozen_pe_no),
718     OPAL_EEH_ACTION_CLEAR_FREEZE_ALL);
719     ret = EEH_NEXT_ERR_NONE;
720     } else if ((*pe)->state & EEH_PE_ISOLATED ||
721     diff --git a/arch/powerpc/platforms/powernv/pci.c b/arch/powerpc/platforms/powernv/pci.c
722     index a21d831c1114..0fe3520058a5 100644
723     --- a/arch/powerpc/platforms/powernv/pci.c
724     +++ b/arch/powerpc/platforms/powernv/pci.c
725     @@ -309,8 +309,8 @@ static void pnv_pci_dump_p7ioc_diag_data(struct pci_controller *hose,
726     be64_to_cpu(data->dma1ErrorLog1));
727    
728     for (i = 0; i < OPAL_P7IOC_NUM_PEST_REGS; i++) {
729     - if ((data->pestA[i] >> 63) == 0 &&
730     - (data->pestB[i] >> 63) == 0)
731     + if ((be64_to_cpu(data->pestA[i]) >> 63) == 0 &&
732     + (be64_to_cpu(data->pestB[i]) >> 63) == 0)
733     continue;
734    
735     pr_info("PE[%3d] A/B: %016llx %016llx\n",
736     diff --git a/arch/powerpc/platforms/pseries/lpar.c b/arch/powerpc/platforms/pseries/lpar.c
737     index 86707e67843f..aa35245d8d6d 100644
738     --- a/arch/powerpc/platforms/pseries/lpar.c
739     +++ b/arch/powerpc/platforms/pseries/lpar.c
740     @@ -393,7 +393,7 @@ static void __pSeries_lpar_hugepage_invalidate(unsigned long *slot,
741     unsigned long *vpn, int count,
742     int psize, int ssize)
743     {
744     - unsigned long param[8];
745     + unsigned long param[PLPAR_HCALL9_BUFSIZE];
746     int i = 0, pix = 0, rc;
747     unsigned long flags = 0;
748     int lock_tlbie = !mmu_has_feature(MMU_FTR_LOCKLESS_TLBIE);
749     @@ -522,7 +522,7 @@ static void pSeries_lpar_flush_hash_range(unsigned long number, int local)
750     unsigned long flags = 0;
751     struct ppc64_tlb_batch *batch = this_cpu_ptr(&ppc64_tlb_batch);
752     int lock_tlbie = !mmu_has_feature(MMU_FTR_LOCKLESS_TLBIE);
753     - unsigned long param[9];
754     + unsigned long param[PLPAR_HCALL9_BUFSIZE];
755     unsigned long hash, index, shift, hidx, slot;
756     real_pte_t pte;
757     int psize, ssize;
758     diff --git a/arch/powerpc/sysdev/cpm1.c b/arch/powerpc/sysdev/cpm1.c
759     index 81d49476c47e..82e8e2b6a3c4 100644
760     --- a/arch/powerpc/sysdev/cpm1.c
761     +++ b/arch/powerpc/sysdev/cpm1.c
762     @@ -233,8 +233,6 @@ void __init cpm_reset(void)
763     else
764     out_be32(&siu_conf->sc_sdcr, 1);
765     immr_unmap(siu_conf);
766     -
767     - cpm_muram_init();
768     }
769    
770     static DEFINE_SPINLOCK(cmd_lock);
771     diff --git a/arch/powerpc/sysdev/cpm2.c b/arch/powerpc/sysdev/cpm2.c
772     index 8dc1e24f3c23..f78ff841652c 100644
773     --- a/arch/powerpc/sysdev/cpm2.c
774     +++ b/arch/powerpc/sysdev/cpm2.c
775     @@ -66,10 +66,6 @@ void __init cpm2_reset(void)
776     cpm2_immr = ioremap(get_immrbase(), CPM_MAP_SIZE);
777     #endif
778    
779     - /* Reclaim the DP memory for our use.
780     - */
781     - cpm_muram_init();
782     -
783     /* Tell everyone where the comm processor resides.
784     */
785     cpmp = &cpm2_immr->im_cpm;
786     diff --git a/arch/powerpc/sysdev/cpm_common.c b/arch/powerpc/sysdev/cpm_common.c
787     index 947f42007734..51bf749a4f3a 100644
788     --- a/arch/powerpc/sysdev/cpm_common.c
789     +++ b/arch/powerpc/sysdev/cpm_common.c
790     @@ -37,6 +37,21 @@
791     #include <linux/of_gpio.h>
792     #endif
793    
794     +static int __init cpm_init(void)
795     +{
796     + struct device_node *np;
797     +
798     + np = of_find_compatible_node(NULL, NULL, "fsl,cpm1");
799     + if (!np)
800     + np = of_find_compatible_node(NULL, NULL, "fsl,cpm2");
801     + if (!np)
802     + return -ENODEV;
803     + cpm_muram_init();
804     + of_node_put(np);
805     + return 0;
806     +}
807     +subsys_initcall(cpm_init);
808     +
809     #ifdef CONFIG_PPC_EARLY_DEBUG_CPM
810     static u32 __iomem *cpm_udbg_txdesc;
811     static u8 __iomem *cpm_udbg_txbuf;
812     diff --git a/arch/powerpc/xmon/spr_access.S b/arch/powerpc/xmon/spr_access.S
813     index 84ad74213c83..7d8b0e8ed6d9 100644
814     --- a/arch/powerpc/xmon/spr_access.S
815     +++ b/arch/powerpc/xmon/spr_access.S
816     @@ -2,12 +2,12 @@
817    
818     /* unsigned long xmon_mfspr(sprn, default_value) */
819     _GLOBAL(xmon_mfspr)
820     - ld r5, .Lmfspr_table@got(r2)
821     + PPC_LL r5, .Lmfspr_table@got(r2)
822     b xmon_mxspr
823    
824     /* void xmon_mtspr(sprn, new_value) */
825     _GLOBAL(xmon_mtspr)
826     - ld r5, .Lmtspr_table@got(r2)
827     + PPC_LL r5, .Lmtspr_table@got(r2)
828     b xmon_mxspr
829    
830     /*
831     diff --git a/arch/s390/kvm/intercept.c b/arch/s390/kvm/intercept.c
832     index dfd0ca2638fa..9746b780ad5a 100644
833     --- a/arch/s390/kvm/intercept.c
834     +++ b/arch/s390/kvm/intercept.c
835     @@ -118,8 +118,13 @@ static int handle_validity(struct kvm_vcpu *vcpu)
836    
837     vcpu->stat.exit_validity++;
838     trace_kvm_s390_intercept_validity(vcpu, viwhy);
839     - WARN_ONCE(true, "kvm: unhandled validity intercept 0x%x\n", viwhy);
840     - return -EOPNOTSUPP;
841     + KVM_EVENT(3, "validity intercept 0x%x for pid %u (kvm 0x%pK)", viwhy,
842     + current->pid, vcpu->kvm);
843     +
844     + /* do not warn on invalid runtime instrumentation mode */
845     + WARN_ONCE(viwhy != 0x44, "kvm: unhandled validity intercept 0x%x\n",
846     + viwhy);
847     + return -EINVAL;
848     }
849    
850     static int handle_instruction(struct kvm_vcpu *vcpu)
851     diff --git a/arch/x86/kernel/e820.c b/arch/x86/kernel/e820.c
852     index 8a90f1517837..625eb698c780 100644
853     --- a/arch/x86/kernel/e820.c
854     +++ b/arch/x86/kernel/e820.c
855     @@ -348,7 +348,7 @@ int __init sanitize_e820_map(struct e820entry *biosmap, int max_nr_map,
856     * continue building up new bios map based on this
857     * information
858     */
859     - if (current_type != last_type) {
860     + if (current_type != last_type || current_type == E820_PRAM) {
861     if (last_type != 0) {
862     new_bios[new_bios_entry].size =
863     change_point[chgidx]->addr - last_addr;
864     diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c
865     index 82b17373b66a..9e152cdab0f3 100644
866     --- a/arch/x86/kernel/smpboot.c
867     +++ b/arch/x86/kernel/smpboot.c
868     @@ -1408,15 +1408,17 @@ __init void prefill_possible_map(void)
869    
870     /* No boot processor was found in mptable or ACPI MADT */
871     if (!num_processors) {
872     - int apicid = boot_cpu_physical_apicid;
873     - int cpu = hard_smp_processor_id();
874     + if (boot_cpu_has(X86_FEATURE_APIC)) {
875     + int apicid = boot_cpu_physical_apicid;
876     + int cpu = hard_smp_processor_id();
877    
878     - pr_warn("Boot CPU (id %d) not listed by BIOS\n", cpu);
879     + pr_warn("Boot CPU (id %d) not listed by BIOS\n", cpu);
880    
881     - /* Make sure boot cpu is enumerated */
882     - if (apic->cpu_present_to_apicid(0) == BAD_APICID &&
883     - apic->apic_id_valid(apicid))
884     - generic_processor_info(apicid, boot_cpu_apic_version);
885     + /* Make sure boot cpu is enumerated */
886     + if (apic->cpu_present_to_apicid(0) == BAD_APICID &&
887     + apic->apic_id_valid(apicid))
888     + generic_processor_info(apicid, boot_cpu_apic_version);
889     + }
890    
891     if (!num_processors)
892     num_processors = 1;
893     diff --git a/arch/x86/kvm/ioapic.c b/arch/x86/kvm/ioapic.c
894     index c7220ba94aa7..1a22de70f7f7 100644
895     --- a/arch/x86/kvm/ioapic.c
896     +++ b/arch/x86/kvm/ioapic.c
897     @@ -594,7 +594,7 @@ static void kvm_ioapic_reset(struct kvm_ioapic *ioapic)
898     ioapic->irr = 0;
899     ioapic->irr_delivered = 0;
900     ioapic->id = 0;
901     - memset(ioapic->irq_eoi, 0x00, IOAPIC_NUM_PINS);
902     + memset(ioapic->irq_eoi, 0x00, sizeof(ioapic->irq_eoi));
903     rtc_irq_eoi_tracking_reset(ioapic);
904     }
905    
906     diff --git a/arch/x86/platform/uv/bios_uv.c b/arch/x86/platform/uv/bios_uv.c
907     index 23f2f3e41c7f..58e152b3bd90 100644
908     --- a/arch/x86/platform/uv/bios_uv.c
909     +++ b/arch/x86/platform/uv/bios_uv.c
910     @@ -40,7 +40,15 @@ s64 uv_bios_call(enum uv_bios_cmd which, u64 a1, u64 a2, u64 a3, u64 a4, u64 a5)
911     */
912     return BIOS_STATUS_UNIMPLEMENTED;
913    
914     - ret = efi_call_virt_pointer(tab, function, (u64)which, a1, a2, a3, a4, a5);
915     + /*
916     + * If EFI_OLD_MEMMAP is set, we need to fall back to using our old EFI
917     + * callback method, which uses efi_call() directly, with the kernel page tables:
918     + */
919     + if (unlikely(test_bit(EFI_OLD_MEMMAP, &efi.flags)))
920     + ret = efi_call((void *)__va(tab->function), (u64)which, a1, a2, a3, a4, a5);
921     + else
922     + ret = efi_call_virt_pointer(tab, function, (u64)which, a1, a2, a3, a4, a5);
923     +
924     return ret;
925     }
926     EXPORT_SYMBOL_GPL(uv_bios_call);
927     diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c
928     index dd38e5ced4a3..b08ccbb9393a 100644
929     --- a/block/blk-cgroup.c
930     +++ b/block/blk-cgroup.c
931     @@ -1340,10 +1340,8 @@ int blkcg_policy_register(struct blkcg_policy *pol)
932     struct blkcg_policy_data *cpd;
933    
934     cpd = pol->cpd_alloc_fn(GFP_KERNEL);
935     - if (!cpd) {
936     - mutex_unlock(&blkcg_pol_mutex);
937     + if (!cpd)
938     goto err_free_cpds;
939     - }
940    
941     blkcg->cpd[pol->plid] = cpd;
942     cpd->blkcg = blkcg;
943     diff --git a/drivers/base/platform.c b/drivers/base/platform.c
944     index 6482d47deb50..d5572295cad3 100644
945     --- a/drivers/base/platform.c
946     +++ b/drivers/base/platform.c
947     @@ -97,7 +97,7 @@ int platform_get_irq(struct platform_device *dev, unsigned int num)
948     int ret;
949    
950     ret = of_irq_get(dev->dev.of_node, num);
951     - if (ret >= 0 || ret == -EPROBE_DEFER)
952     + if (ret > 0 || ret == -EPROBE_DEFER)
953     return ret;
954     }
955    
956     @@ -175,7 +175,7 @@ int platform_get_irq_byname(struct platform_device *dev, const char *name)
957     int ret;
958    
959     ret = of_irq_get_byname(dev->dev.of_node, name);
960     - if (ret >= 0 || ret == -EPROBE_DEFER)
961     + if (ret > 0 || ret == -EPROBE_DEFER)
962     return ret;
963     }
964    
965     diff --git a/drivers/clk/imx/clk-imx6q.c b/drivers/clk/imx/clk-imx6q.c
966     index ba1c1ae72ac2..ce8ea10407e4 100644
967     --- a/drivers/clk/imx/clk-imx6q.c
968     +++ b/drivers/clk/imx/clk-imx6q.c
969     @@ -318,11 +318,16 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node)
970     clk[IMX6QDL_CLK_IPG_PER_SEL] = imx_clk_mux("ipg_per_sel", base + 0x1c, 6, 1, ipg_per_sels, ARRAY_SIZE(ipg_per_sels));
971     clk[IMX6QDL_CLK_UART_SEL] = imx_clk_mux("uart_sel", base + 0x24, 6, 1, uart_sels, ARRAY_SIZE(uart_sels));
972     clk[IMX6QDL_CLK_GPU2D_CORE_SEL] = imx_clk_mux("gpu2d_core_sel", base + 0x18, 16, 2, gpu2d_core_sels_2, ARRAY_SIZE(gpu2d_core_sels_2));
973     + } else if (clk_on_imx6dl()) {
974     + clk[IMX6QDL_CLK_MLB_SEL] = imx_clk_mux("mlb_sel", base + 0x18, 16, 2, gpu2d_core_sels, ARRAY_SIZE(gpu2d_core_sels));
975     } else {
976     clk[IMX6QDL_CLK_GPU2D_CORE_SEL] = imx_clk_mux("gpu2d_core_sel", base + 0x18, 16, 2, gpu2d_core_sels, ARRAY_SIZE(gpu2d_core_sels));
977     }
978     clk[IMX6QDL_CLK_GPU3D_CORE_SEL] = imx_clk_mux("gpu3d_core_sel", base + 0x18, 4, 2, gpu3d_core_sels, ARRAY_SIZE(gpu3d_core_sels));
979     - clk[IMX6QDL_CLK_GPU3D_SHADER_SEL] = imx_clk_mux("gpu3d_shader_sel", base + 0x18, 8, 2, gpu3d_shader_sels, ARRAY_SIZE(gpu3d_shader_sels));
980     + if (clk_on_imx6dl())
981     + clk[IMX6QDL_CLK_GPU2D_CORE_SEL] = imx_clk_mux("gpu2d_core_sel", base + 0x18, 8, 2, gpu3d_shader_sels, ARRAY_SIZE(gpu3d_shader_sels));
982     + else
983     + clk[IMX6QDL_CLK_GPU3D_SHADER_SEL] = imx_clk_mux("gpu3d_shader_sel", base + 0x18, 8, 2, gpu3d_shader_sels, ARRAY_SIZE(gpu3d_shader_sels));
984     clk[IMX6QDL_CLK_IPU1_SEL] = imx_clk_mux("ipu1_sel", base + 0x3c, 9, 2, ipu_sels, ARRAY_SIZE(ipu_sels));
985     clk[IMX6QDL_CLK_IPU2_SEL] = imx_clk_mux("ipu2_sel", base + 0x3c, 14, 2, ipu_sels, ARRAY_SIZE(ipu_sels));
986     clk[IMX6QDL_CLK_LDB_DI0_SEL] = imx_clk_mux_flags("ldb_di0_sel", base + 0x2c, 9, 3, ldb_di_sels, ARRAY_SIZE(ldb_di_sels), CLK_SET_RATE_PARENT);
987     @@ -400,9 +405,15 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node)
988     clk[IMX6QDL_CLK_LDB_DI0_DIV_3_5] = imx_clk_fixed_factor("ldb_di0_div_3_5", "ldb_di0_sel", 2, 7);
989     clk[IMX6QDL_CLK_LDB_DI1_DIV_3_5] = imx_clk_fixed_factor("ldb_di1_div_3_5", "ldb_di1_sel", 2, 7);
990     }
991     - clk[IMX6QDL_CLK_GPU2D_CORE_PODF] = imx_clk_divider("gpu2d_core_podf", "gpu2d_core_sel", base + 0x18, 23, 3);
992     + if (clk_on_imx6dl())
993     + clk[IMX6QDL_CLK_MLB_PODF] = imx_clk_divider("mlb_podf", "mlb_sel", base + 0x18, 23, 3);
994     + else
995     + clk[IMX6QDL_CLK_GPU2D_CORE_PODF] = imx_clk_divider("gpu2d_core_podf", "gpu2d_core_sel", base + 0x18, 23, 3);
996     clk[IMX6QDL_CLK_GPU3D_CORE_PODF] = imx_clk_divider("gpu3d_core_podf", "gpu3d_core_sel", base + 0x18, 26, 3);
997     - clk[IMX6QDL_CLK_GPU3D_SHADER] = imx_clk_divider("gpu3d_shader", "gpu3d_shader_sel", base + 0x18, 29, 3);
998     + if (clk_on_imx6dl())
999     + clk[IMX6QDL_CLK_GPU2D_CORE_PODF] = imx_clk_divider("gpu2d_core_podf", "gpu2d_core_sel", base + 0x18, 29, 3);
1000     + else
1001     + clk[IMX6QDL_CLK_GPU3D_SHADER] = imx_clk_divider("gpu3d_shader", "gpu3d_shader_sel", base + 0x18, 29, 3);
1002     clk[IMX6QDL_CLK_IPU1_PODF] = imx_clk_divider("ipu1_podf", "ipu1_sel", base + 0x3c, 11, 3);
1003     clk[IMX6QDL_CLK_IPU2_PODF] = imx_clk_divider("ipu2_podf", "ipu2_sel", base + 0x3c, 16, 3);
1004     clk[IMX6QDL_CLK_LDB_DI0_PODF] = imx_clk_divider_flags("ldb_di0_podf", "ldb_di0_div_3_5", base + 0x20, 10, 1, 0);
1005     @@ -473,14 +484,7 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node)
1006     clk[IMX6QDL_CLK_ESAI_MEM] = imx_clk_gate2_shared("esai_mem", "ahb", base + 0x6c, 16, &share_count_esai);
1007     clk[IMX6QDL_CLK_GPT_IPG] = imx_clk_gate2("gpt_ipg", "ipg", base + 0x6c, 20);
1008     clk[IMX6QDL_CLK_GPT_IPG_PER] = imx_clk_gate2("gpt_ipg_per", "ipg_per", base + 0x6c, 22);
1009     - if (clk_on_imx6dl())
1010     - /*
1011     - * The multiplexer and divider of imx6q clock gpu3d_shader get
1012     - * redefined/reused as gpu2d_core_sel and gpu2d_core_podf on imx6dl.
1013     - */
1014     - clk[IMX6QDL_CLK_GPU2D_CORE] = imx_clk_gate2("gpu2d_core", "gpu3d_shader", base + 0x6c, 24);
1015     - else
1016     - clk[IMX6QDL_CLK_GPU2D_CORE] = imx_clk_gate2("gpu2d_core", "gpu2d_core_podf", base + 0x6c, 24);
1017     + clk[IMX6QDL_CLK_GPU2D_CORE] = imx_clk_gate2("gpu2d_core", "gpu2d_core_podf", base + 0x6c, 24);
1018     clk[IMX6QDL_CLK_GPU3D_CORE] = imx_clk_gate2("gpu3d_core", "gpu3d_core_podf", base + 0x6c, 26);
1019     clk[IMX6QDL_CLK_HDMI_IAHB] = imx_clk_gate2("hdmi_iahb", "ahb", base + 0x70, 0);
1020     clk[IMX6QDL_CLK_HDMI_ISFR] = imx_clk_gate2("hdmi_isfr", "video_27m", base + 0x70, 4);
1021     @@ -511,7 +515,7 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node)
1022     * The multiplexer and divider of the imx6q clock gpu2d get
1023     * redefined/reused as mlb_sys_sel and mlb_sys_clk_podf on imx6dl.
1024     */
1025     - clk[IMX6QDL_CLK_MLB] = imx_clk_gate2("mlb", "gpu2d_core_podf", base + 0x74, 18);
1026     + clk[IMX6QDL_CLK_MLB] = imx_clk_gate2("mlb", "mlb_podf", base + 0x74, 18);
1027     else
1028     clk[IMX6QDL_CLK_MLB] = imx_clk_gate2("mlb", "axi", base + 0x74, 18);
1029     clk[IMX6QDL_CLK_MMDC_CH0_AXI] = imx_clk_gate2("mmdc_ch0_axi", "mmdc_ch0_axi_podf", base + 0x74, 20);
1030     @@ -629,6 +633,24 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node)
1031     if (IS_ENABLED(CONFIG_PCI_IMX6))
1032     clk_set_parent(clk[IMX6QDL_CLK_LVDS1_SEL], clk[IMX6QDL_CLK_SATA_REF_100M]);
1033    
1034     + /*
1035     + * Initialize the GPU clock muxes, so that the maximum specified clock
1036     + * rates for the respective SoC are not exceeded.
1037     + */
1038     + if (clk_on_imx6dl()) {
1039     + clk_set_parent(clk[IMX6QDL_CLK_GPU3D_CORE_SEL],
1040     + clk[IMX6QDL_CLK_PLL2_PFD1_594M]);
1041     + clk_set_parent(clk[IMX6QDL_CLK_GPU2D_CORE_SEL],
1042     + clk[IMX6QDL_CLK_PLL2_PFD1_594M]);
1043     + } else if (clk_on_imx6q()) {
1044     + clk_set_parent(clk[IMX6QDL_CLK_GPU3D_CORE_SEL],
1045     + clk[IMX6QDL_CLK_MMDC_CH0_AXI]);
1046     + clk_set_parent(clk[IMX6QDL_CLK_GPU3D_SHADER_SEL],
1047     + clk[IMX6QDL_CLK_PLL2_PFD1_594M]);
1048     + clk_set_parent(clk[IMX6QDL_CLK_GPU2D_CORE_SEL],
1049     + clk[IMX6QDL_CLK_PLL3_USB_OTG]);
1050     + }
1051     +
1052     imx_register_uart_clocks(uart_clks);
1053     }
1054     CLK_OF_DECLARE(imx6q, "fsl,imx6q-ccm", imx6q_clocks_init);
1055     diff --git a/drivers/cpufreq/cpufreq-dt-platdev.c b/drivers/cpufreq/cpufreq-dt-platdev.c
1056     index 2ee40fd360ca..e1aa531a4c34 100644
1057     --- a/drivers/cpufreq/cpufreq-dt-platdev.c
1058     +++ b/drivers/cpufreq/cpufreq-dt-platdev.c
1059     @@ -68,6 +68,8 @@ static const struct of_device_id machines[] __initconst = {
1060    
1061     { .compatible = "sigma,tango4" },
1062    
1063     + { .compatible = "ti,am33xx", },
1064     + { .compatible = "ti,dra7", },
1065     { .compatible = "ti,omap2", },
1066     { .compatible = "ti,omap3", },
1067     { .compatible = "ti,omap4", },
1068     diff --git a/drivers/cpufreq/cpufreq_conservative.c b/drivers/cpufreq/cpufreq_conservative.c
1069     index 18da4f8051d3..13475890d792 100644
1070     --- a/drivers/cpufreq/cpufreq_conservative.c
1071     +++ b/drivers/cpufreq/cpufreq_conservative.c
1072     @@ -17,6 +17,7 @@
1073     struct cs_policy_dbs_info {
1074     struct policy_dbs_info policy_dbs;
1075     unsigned int down_skip;
1076     + unsigned int requested_freq;
1077     };
1078    
1079     static inline struct cs_policy_dbs_info *to_dbs_info(struct policy_dbs_info *policy_dbs)
1080     @@ -61,6 +62,7 @@ static unsigned int cs_dbs_timer(struct cpufreq_policy *policy)
1081     {
1082     struct policy_dbs_info *policy_dbs = policy->governor_data;
1083     struct cs_policy_dbs_info *dbs_info = to_dbs_info(policy_dbs);
1084     + unsigned int requested_freq = dbs_info->requested_freq;
1085     struct dbs_data *dbs_data = policy_dbs->dbs_data;
1086     struct cs_dbs_tuners *cs_tuners = dbs_data->tuners;
1087     unsigned int load = dbs_update(policy);
1088     @@ -72,10 +74,16 @@ static unsigned int cs_dbs_timer(struct cpufreq_policy *policy)
1089     if (cs_tuners->freq_step == 0)
1090     goto out;
1091    
1092     + /*
1093     + * If requested_freq is out of range, it is likely that the limits
1094     + * changed in the meantime, so fall back to current frequency in that
1095     + * case.
1096     + */
1097     + if (requested_freq > policy->max || requested_freq < policy->min)
1098     + requested_freq = policy->cur;
1099     +
1100     /* Check for frequency increase */
1101     if (load > dbs_data->up_threshold) {
1102     - unsigned int requested_freq = policy->cur;
1103     -
1104     dbs_info->down_skip = 0;
1105    
1106     /* if we are already at full speed then break out early */
1107     @@ -83,8 +91,11 @@ static unsigned int cs_dbs_timer(struct cpufreq_policy *policy)
1108     goto out;
1109    
1110     requested_freq += get_freq_target(cs_tuners, policy);
1111     + if (requested_freq > policy->max)
1112     + requested_freq = policy->max;
1113    
1114     __cpufreq_driver_target(policy, requested_freq, CPUFREQ_RELATION_H);
1115     + dbs_info->requested_freq = requested_freq;
1116     goto out;
1117     }
1118    
1119     @@ -95,7 +106,7 @@ static unsigned int cs_dbs_timer(struct cpufreq_policy *policy)
1120    
1121     /* Check for frequency decrease */
1122     if (load < cs_tuners->down_threshold) {
1123     - unsigned int freq_target, requested_freq = policy->cur;
1124     + unsigned int freq_target;
1125     /*
1126     * if we cannot reduce the frequency anymore, break out early
1127     */
1128     @@ -109,6 +120,7 @@ static unsigned int cs_dbs_timer(struct cpufreq_policy *policy)
1129     requested_freq = policy->min;
1130    
1131     __cpufreq_driver_target(policy, requested_freq, CPUFREQ_RELATION_L);
1132     + dbs_info->requested_freq = requested_freq;
1133     }
1134    
1135     out:
1136     @@ -287,6 +299,7 @@ static void cs_start(struct cpufreq_policy *policy)
1137     struct cs_policy_dbs_info *dbs_info = to_dbs_info(policy->governor_data);
1138    
1139     dbs_info->down_skip = 0;
1140     + dbs_info->requested_freq = policy->cur;
1141     }
1142    
1143     static struct dbs_governor cs_governor = {
1144     diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c
1145     index be9eade147f2..b46547e907be 100644
1146     --- a/drivers/cpufreq/intel_pstate.c
1147     +++ b/drivers/cpufreq/intel_pstate.c
1148     @@ -556,12 +556,12 @@ static void intel_pstate_hwp_set(const struct cpumask *cpumask)
1149     int min, hw_min, max, hw_max, cpu, range, adj_range;
1150     u64 value, cap;
1151    
1152     - rdmsrl(MSR_HWP_CAPABILITIES, cap);
1153     - hw_min = HWP_LOWEST_PERF(cap);
1154     - hw_max = HWP_HIGHEST_PERF(cap);
1155     - range = hw_max - hw_min;
1156     -
1157     for_each_cpu(cpu, cpumask) {
1158     + rdmsrl_on_cpu(cpu, MSR_HWP_CAPABILITIES, &cap);
1159     + hw_min = HWP_LOWEST_PERF(cap);
1160     + hw_max = HWP_HIGHEST_PERF(cap);
1161     + range = hw_max - hw_min;
1162     +
1163     rdmsrl_on_cpu(cpu, MSR_HWP_REQUEST, &value);
1164     adj_range = limits->min_perf_pct * range / 100;
1165     min = hw_min + adj_range;
1166     diff --git a/drivers/gpio/gpio-mpc8xxx.c b/drivers/gpio/gpio-mpc8xxx.c
1167     index 425501c39527..793518a30afe 100644
1168     --- a/drivers/gpio/gpio-mpc8xxx.c
1169     +++ b/drivers/gpio/gpio-mpc8xxx.c
1170     @@ -239,7 +239,7 @@ static int mpc8xxx_gpio_irq_map(struct irq_domain *h, unsigned int irq,
1171     irq_hw_number_t hwirq)
1172     {
1173     irq_set_chip_data(irq, h->host_data);
1174     - irq_set_chip_and_handler(irq, &mpc8xxx_irq_chip, handle_level_irq);
1175     + irq_set_chip_and_handler(irq, &mpc8xxx_irq_chip, handle_edge_irq);
1176    
1177     return 0;
1178     }
1179     diff --git a/drivers/infiniband/core/verbs.c b/drivers/infiniband/core/verbs.c
1180     index f2b776efab3a..5f88ccd6806b 100644
1181     --- a/drivers/infiniband/core/verbs.c
1182     +++ b/drivers/infiniband/core/verbs.c
1183     @@ -821,7 +821,7 @@ struct ib_qp *ib_create_qp(struct ib_pd *pd,
1184     if (ret) {
1185     pr_err("failed to init MR pool ret= %d\n", ret);
1186     ib_destroy_qp(qp);
1187     - qp = ERR_PTR(ret);
1188     + return ERR_PTR(ret);
1189     }
1190     }
1191    
1192     diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c
1193     index 3322ed750172..6b07d4bca764 100644
1194     --- a/drivers/infiniband/ulp/srp/ib_srp.c
1195     +++ b/drivers/infiniband/ulp/srp/ib_srp.c
1196     @@ -1400,7 +1400,9 @@ static int srp_map_sg_entry(struct srp_map_state *state,
1197    
1198     while (dma_len) {
1199     unsigned offset = dma_addr & ~dev->mr_page_mask;
1200     - if (state->npages == dev->max_pages_per_mr || offset != 0) {
1201     +
1202     + if (state->npages == dev->max_pages_per_mr ||
1203     + (state->npages > 0 && offset != 0)) {
1204     ret = srp_map_finish_fmr(state, ch);
1205     if (ret)
1206     return ret;
1207     @@ -1417,12 +1419,12 @@ static int srp_map_sg_entry(struct srp_map_state *state,
1208     }
1209    
1210     /*
1211     - * If the last entry of the MR wasn't a full page, then we need to
1212     + * If the end of the MR is not on a page boundary then we need to
1213     * close it out and start a new one -- we can only merge at page
1214     * boundaries.
1215     */
1216     ret = 0;
1217     - if (len != dev->mr_page_size)
1218     + if ((dma_addr & ~dev->mr_page_mask) != 0)
1219     ret = srp_map_finish_fmr(state, ch);
1220     return ret;
1221     }
1222     diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c
1223     index 08e252a42480..ff8c10749e57 100644
1224     --- a/drivers/input/mouse/elantech.c
1225     +++ b/drivers/input/mouse/elantech.c
1226     @@ -1159,6 +1159,13 @@ static const struct dmi_system_id elantech_dmi_has_middle_button[] = {
1227     DMI_MATCH(DMI_PRODUCT_NAME, "CELSIUS H730"),
1228     },
1229     },
1230     + {
1231     + /* Fujitsu H760 also has a middle button */
1232     + .matches = {
1233     + DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
1234     + DMI_MATCH(DMI_PRODUCT_NAME, "CELSIUS H760"),
1235     + },
1236     + },
1237     #endif
1238     { }
1239     };
1240     @@ -1503,10 +1510,10 @@ static const struct dmi_system_id elantech_dmi_force_crc_enabled[] = {
1241     },
1242     },
1243     {
1244     - /* Fujitsu LIFEBOOK E554 does not work with crc_enabled == 0 */
1245     + /* Fujitsu H760 does not work with crc_enabled == 0 */
1246     .matches = {
1247     DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
1248     - DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK E554"),
1249     + DMI_MATCH(DMI_PRODUCT_NAME, "CELSIUS H760"),
1250     },
1251     },
1252     {
1253     @@ -1517,6 +1524,20 @@ static const struct dmi_system_id elantech_dmi_force_crc_enabled[] = {
1254     },
1255     },
1256     {
1257     + /* Fujitsu LIFEBOOK E554 does not work with crc_enabled == 0 */
1258     + .matches = {
1259     + DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
1260     + DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK E554"),
1261     + },
1262     + },
1263     + {
1264     + /* Fujitsu LIFEBOOK E556 does not work with crc_enabled == 0 */
1265     + .matches = {
1266     + DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
1267     + DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK E556"),
1268     + },
1269     + },
1270     + {
1271     /* Fujitsu LIFEBOOK U745 does not work with crc_enabled == 0 */
1272     .matches = {
1273     DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
1274     diff --git a/drivers/input/serio/i8042-io.h b/drivers/input/serio/i8042-io.h
1275     index a5eed2ade53d..34da81c006b6 100644
1276     --- a/drivers/input/serio/i8042-io.h
1277     +++ b/drivers/input/serio/i8042-io.h
1278     @@ -81,7 +81,7 @@ static inline int i8042_platform_init(void)
1279     return -EBUSY;
1280     #endif
1281    
1282     - i8042_reset = 1;
1283     + i8042_reset = I8042_RESET_ALWAYS;
1284     return 0;
1285     }
1286    
1287     diff --git a/drivers/input/serio/i8042-ip22io.h b/drivers/input/serio/i8042-ip22io.h
1288     index ee1ad27d6ed0..08a1c10a1448 100644
1289     --- a/drivers/input/serio/i8042-ip22io.h
1290     +++ b/drivers/input/serio/i8042-ip22io.h
1291     @@ -61,7 +61,7 @@ static inline int i8042_platform_init(void)
1292     return -EBUSY;
1293     #endif
1294    
1295     - i8042_reset = 1;
1296     + i8042_reset = I8042_RESET_ALWAYS;
1297    
1298     return 0;
1299     }
1300     diff --git a/drivers/input/serio/i8042-ppcio.h b/drivers/input/serio/i8042-ppcio.h
1301     index f708c75d16f1..1aabea43329e 100644
1302     --- a/drivers/input/serio/i8042-ppcio.h
1303     +++ b/drivers/input/serio/i8042-ppcio.h
1304     @@ -44,7 +44,7 @@ static inline void i8042_write_command(int val)
1305    
1306     static inline int i8042_platform_init(void)
1307     {
1308     - i8042_reset = 1;
1309     + i8042_reset = I8042_RESET_ALWAYS;
1310     return 0;
1311     }
1312    
1313     diff --git a/drivers/input/serio/i8042-sparcio.h b/drivers/input/serio/i8042-sparcio.h
1314     index afcd1c1a05b2..6231d63860ee 100644
1315     --- a/drivers/input/serio/i8042-sparcio.h
1316     +++ b/drivers/input/serio/i8042-sparcio.h
1317     @@ -130,7 +130,7 @@ static int __init i8042_platform_init(void)
1318     }
1319     }
1320    
1321     - i8042_reset = 1;
1322     + i8042_reset = I8042_RESET_ALWAYS;
1323    
1324     return 0;
1325     }
1326     diff --git a/drivers/input/serio/i8042-unicore32io.h b/drivers/input/serio/i8042-unicore32io.h
1327     index 73f5cc124a36..455747552f85 100644
1328     --- a/drivers/input/serio/i8042-unicore32io.h
1329     +++ b/drivers/input/serio/i8042-unicore32io.h
1330     @@ -61,7 +61,7 @@ static inline int i8042_platform_init(void)
1331     if (!request_mem_region(I8042_REGION_START, I8042_REGION_SIZE, "i8042"))
1332     return -EBUSY;
1333    
1334     - i8042_reset = 1;
1335     + i8042_reset = I8042_RESET_ALWAYS;
1336     return 0;
1337     }
1338    
1339     diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h
1340     index 68f5f4a0f1e7..f4bfb4b2d50a 100644
1341     --- a/drivers/input/serio/i8042-x86ia64io.h
1342     +++ b/drivers/input/serio/i8042-x86ia64io.h
1343     @@ -510,6 +510,90 @@ static const struct dmi_system_id __initconst i8042_dmi_nomux_table[] = {
1344     { }
1345     };
1346    
1347     +/*
1348     + * On some Asus laptops, just running self tests cause problems.
1349     + */
1350     +static const struct dmi_system_id i8042_dmi_noselftest_table[] = {
1351     + {
1352     + .matches = {
1353     + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
1354     + DMI_MATCH(DMI_PRODUCT_NAME, "A455LD"),
1355     + },
1356     + },
1357     + {
1358     + .matches = {
1359     + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
1360     + DMI_MATCH(DMI_PRODUCT_NAME, "K401LB"),
1361     + },
1362     + },
1363     + {
1364     + .matches = {
1365     + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
1366     + DMI_MATCH(DMI_PRODUCT_NAME, "K501LB"),
1367     + },
1368     + },
1369     + {
1370     + .matches = {
1371     + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
1372     + DMI_MATCH(DMI_PRODUCT_NAME, "K501LX"),
1373     + },
1374     + },
1375     + {
1376     + .matches = {
1377     + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
1378     + DMI_MATCH(DMI_PRODUCT_NAME, "R409L"),
1379     + },
1380     + },
1381     + {
1382     + .matches = {
1383     + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
1384     + DMI_MATCH(DMI_PRODUCT_NAME, "V502LX"),
1385     + },
1386     + },
1387     + {
1388     + .matches = {
1389     + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
1390     + DMI_MATCH(DMI_PRODUCT_NAME, "X302LA"),
1391     + },
1392     + },
1393     + {
1394     + .matches = {
1395     + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
1396     + DMI_MATCH(DMI_PRODUCT_NAME, "X450LCP"),
1397     + },
1398     + },
1399     + {
1400     + .matches = {
1401     + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
1402     + DMI_MATCH(DMI_PRODUCT_NAME, "X450LD"),
1403     + },
1404     + },
1405     + {
1406     + .matches = {
1407     + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
1408     + DMI_MATCH(DMI_PRODUCT_NAME, "X455LAB"),
1409     + },
1410     + },
1411     + {
1412     + .matches = {
1413     + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
1414     + DMI_MATCH(DMI_PRODUCT_NAME, "X455LDB"),
1415     + },
1416     + },
1417     + {
1418     + .matches = {
1419     + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
1420     + DMI_MATCH(DMI_PRODUCT_NAME, "X455LF"),
1421     + },
1422     + },
1423     + {
1424     + .matches = {
1425     + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
1426     + DMI_MATCH(DMI_PRODUCT_NAME, "Z450LA"),
1427     + },
1428     + },
1429     + { }
1430     +};
1431     static const struct dmi_system_id __initconst i8042_dmi_reset_table[] = {
1432     {
1433     /* MSI Wind U-100 */
1434     @@ -1072,12 +1156,18 @@ static int __init i8042_platform_init(void)
1435     return retval;
1436    
1437     #if defined(__ia64__)
1438     - i8042_reset = true;
1439     + i8042_reset = I8042_RESET_ALWAYS;
1440     #endif
1441    
1442     #ifdef CONFIG_X86
1443     - if (dmi_check_system(i8042_dmi_reset_table))
1444     - i8042_reset = true;
1445     + /* Honor module parameter when value is not default */
1446     + if (i8042_reset == I8042_RESET_DEFAULT) {
1447     + if (dmi_check_system(i8042_dmi_reset_table))
1448     + i8042_reset = I8042_RESET_ALWAYS;
1449     +
1450     + if (dmi_check_system(i8042_dmi_noselftest_table))
1451     + i8042_reset = I8042_RESET_NEVER;
1452     + }
1453    
1454     if (dmi_check_system(i8042_dmi_noloop_table))
1455     i8042_noloop = true;
1456     diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c
1457     index 405252a884dd..89abfdb539ac 100644
1458     --- a/drivers/input/serio/i8042.c
1459     +++ b/drivers/input/serio/i8042.c
1460     @@ -48,9 +48,39 @@ static bool i8042_unlock;
1461     module_param_named(unlock, i8042_unlock, bool, 0);
1462     MODULE_PARM_DESC(unlock, "Ignore keyboard lock.");
1463    
1464     -static bool i8042_reset;
1465     -module_param_named(reset, i8042_reset, bool, 0);
1466     -MODULE_PARM_DESC(reset, "Reset controller during init and cleanup.");
1467     +enum i8042_controller_reset_mode {
1468     + I8042_RESET_NEVER,
1469     + I8042_RESET_ALWAYS,
1470     + I8042_RESET_ON_S2RAM,
1471     +#define I8042_RESET_DEFAULT I8042_RESET_ON_S2RAM
1472     +};
1473     +static enum i8042_controller_reset_mode i8042_reset = I8042_RESET_DEFAULT;
1474     +static int i8042_set_reset(const char *val, const struct kernel_param *kp)
1475     +{
1476     + enum i8042_controller_reset_mode *arg = kp->arg;
1477     + int error;
1478     + bool reset;
1479     +
1480     + if (val) {
1481     + error = kstrtobool(val, &reset);
1482     + if (error)
1483     + return error;
1484     + } else {
1485     + reset = true;
1486     + }
1487     +
1488     + *arg = reset ? I8042_RESET_ALWAYS : I8042_RESET_NEVER;
1489     + return 0;
1490     +}
1491     +
1492     +static const struct kernel_param_ops param_ops_reset_param = {
1493     + .flags = KERNEL_PARAM_OPS_FL_NOARG,
1494     + .set = i8042_set_reset,
1495     +};
1496     +#define param_check_reset_param(name, p) \
1497     + __param_check(name, p, enum i8042_controller_reset_mode)
1498     +module_param_named(reset, i8042_reset, reset_param, 0);
1499     +MODULE_PARM_DESC(reset, "Reset controller on resume, cleanup or both");
1500    
1501     static bool i8042_direct;
1502     module_param_named(direct, i8042_direct, bool, 0);
1503     @@ -1019,7 +1049,7 @@ static int i8042_controller_init(void)
1504     * Reset the controller and reset CRT to the original value set by BIOS.
1505     */
1506    
1507     -static void i8042_controller_reset(bool force_reset)
1508     +static void i8042_controller_reset(bool s2r_wants_reset)
1509     {
1510     i8042_flush();
1511    
1512     @@ -1044,8 +1074,10 @@ static void i8042_controller_reset(bool force_reset)
1513     * Reset the controller if requested.
1514     */
1515    
1516     - if (i8042_reset || force_reset)
1517     + if (i8042_reset == I8042_RESET_ALWAYS ||
1518     + (i8042_reset == I8042_RESET_ON_S2RAM && s2r_wants_reset)) {
1519     i8042_controller_selftest();
1520     + }
1521    
1522     /*
1523     * Restore the original control register setting.
1524     @@ -1110,7 +1142,7 @@ static void i8042_dritek_enable(void)
1525     * before suspending.
1526     */
1527    
1528     -static int i8042_controller_resume(bool force_reset)
1529     +static int i8042_controller_resume(bool s2r_wants_reset)
1530     {
1531     int error;
1532    
1533     @@ -1118,7 +1150,8 @@ static int i8042_controller_resume(bool force_reset)
1534     if (error)
1535     return error;
1536    
1537     - if (i8042_reset || force_reset) {
1538     + if (i8042_reset == I8042_RESET_ALWAYS ||
1539     + (i8042_reset == I8042_RESET_ON_S2RAM && s2r_wants_reset)) {
1540     error = i8042_controller_selftest();
1541     if (error)
1542     return error;
1543     @@ -1195,7 +1228,7 @@ static int i8042_pm_resume_noirq(struct device *dev)
1544    
1545     static int i8042_pm_resume(struct device *dev)
1546     {
1547     - bool force_reset;
1548     + bool want_reset;
1549     int i;
1550    
1551     for (i = 0; i < I8042_NUM_PORTS; i++) {
1552     @@ -1218,9 +1251,9 @@ static int i8042_pm_resume(struct device *dev)
1553     * off control to the platform firmware, otherwise we can simply restore
1554     * the mode.
1555     */
1556     - force_reset = pm_resume_via_firmware();
1557     + want_reset = pm_resume_via_firmware();
1558    
1559     - return i8042_controller_resume(force_reset);
1560     + return i8042_controller_resume(want_reset);
1561     }
1562    
1563     static int i8042_pm_thaw(struct device *dev)
1564     @@ -1482,7 +1515,7 @@ static int __init i8042_probe(struct platform_device *dev)
1565    
1566     i8042_platform_device = dev;
1567    
1568     - if (i8042_reset) {
1569     + if (i8042_reset == I8042_RESET_ALWAYS) {
1570     error = i8042_controller_selftest();
1571     if (error)
1572     return error;
1573     diff --git a/drivers/irqchip/irq-eznps.c b/drivers/irqchip/irq-eznps.c
1574     index efbf0e4304b7..ebc2b0b15f67 100644
1575     --- a/drivers/irqchip/irq-eznps.c
1576     +++ b/drivers/irqchip/irq-eznps.c
1577     @@ -85,7 +85,7 @@ static void nps400_irq_eoi_global(struct irq_data *irqd)
1578     nps_ack_gic();
1579     }
1580    
1581     -static void nps400_irq_eoi(struct irq_data *irqd)
1582     +static void nps400_irq_ack(struct irq_data *irqd)
1583     {
1584     unsigned int __maybe_unused irq = irqd_to_hwirq(irqd);
1585    
1586     @@ -103,7 +103,7 @@ static struct irq_chip nps400_irq_chip_percpu = {
1587     .name = "NPS400 IC",
1588     .irq_mask = nps400_irq_mask,
1589     .irq_unmask = nps400_irq_unmask,
1590     - .irq_eoi = nps400_irq_eoi,
1591     + .irq_ack = nps400_irq_ack,
1592     };
1593    
1594     static int nps400_irq_map(struct irq_domain *d, unsigned int virq,
1595     diff --git a/drivers/irqchip/irq-gic-v3.c b/drivers/irqchip/irq-gic-v3.c
1596     index da6c0ba61d4f..708a2604a7b5 100644
1597     --- a/drivers/irqchip/irq-gic-v3.c
1598     +++ b/drivers/irqchip/irq-gic-v3.c
1599     @@ -153,7 +153,7 @@ static void gic_enable_redist(bool enable)
1600     return; /* No PM support in this redistributor */
1601     }
1602    
1603     - while (count--) {
1604     + while (--count) {
1605     val = readl_relaxed(rbase + GICR_WAKER);
1606     if (enable ^ (bool)(val & GICR_WAKER_ChildrenAsleep))
1607     break;
1608     diff --git a/drivers/md/dm-crypt.c b/drivers/md/dm-crypt.c
1609     index 874295757caa..6fc8923bd92a 100644
1610     --- a/drivers/md/dm-crypt.c
1611     +++ b/drivers/md/dm-crypt.c
1612     @@ -113,8 +113,7 @@ struct iv_tcw_private {
1613     * and encrypts / decrypts at the same time.
1614     */
1615     enum flags { DM_CRYPT_SUSPENDED, DM_CRYPT_KEY_VALID,
1616     - DM_CRYPT_SAME_CPU, DM_CRYPT_NO_OFFLOAD,
1617     - DM_CRYPT_EXIT_THREAD};
1618     + DM_CRYPT_SAME_CPU, DM_CRYPT_NO_OFFLOAD };
1619    
1620     /*
1621     * The fields in here must be read only after initialization.
1622     @@ -1207,18 +1206,20 @@ continue_locked:
1623     if (!RB_EMPTY_ROOT(&cc->write_tree))
1624     goto pop_from_list;
1625    
1626     - if (unlikely(test_bit(DM_CRYPT_EXIT_THREAD, &cc->flags))) {
1627     - spin_unlock_irq(&cc->write_thread_wait.lock);
1628     - break;
1629     - }
1630     -
1631     - __set_current_state(TASK_INTERRUPTIBLE);
1632     + set_current_state(TASK_INTERRUPTIBLE);
1633     __add_wait_queue(&cc->write_thread_wait, &wait);
1634    
1635     spin_unlock_irq(&cc->write_thread_wait.lock);
1636    
1637     + if (unlikely(kthread_should_stop())) {
1638     + set_task_state(current, TASK_RUNNING);
1639     + remove_wait_queue(&cc->write_thread_wait, &wait);
1640     + break;
1641     + }
1642     +
1643     schedule();
1644    
1645     + set_task_state(current, TASK_RUNNING);
1646     spin_lock_irq(&cc->write_thread_wait.lock);
1647     __remove_wait_queue(&cc->write_thread_wait, &wait);
1648     goto continue_locked;
1649     @@ -1533,13 +1534,8 @@ static void crypt_dtr(struct dm_target *ti)
1650     if (!cc)
1651     return;
1652    
1653     - if (cc->write_thread) {
1654     - spin_lock_irq(&cc->write_thread_wait.lock);
1655     - set_bit(DM_CRYPT_EXIT_THREAD, &cc->flags);
1656     - wake_up_locked(&cc->write_thread_wait);
1657     - spin_unlock_irq(&cc->write_thread_wait.lock);
1658     + if (cc->write_thread)
1659     kthread_stop(cc->write_thread);
1660     - }
1661    
1662     if (cc->io_queue)
1663     destroy_workqueue(cc->io_queue);
1664     diff --git a/drivers/md/dm-mpath.c b/drivers/md/dm-mpath.c
1665     index ac734e5bbe48..15db5e9c572e 100644
1666     --- a/drivers/md/dm-mpath.c
1667     +++ b/drivers/md/dm-mpath.c
1668     @@ -1521,10 +1521,10 @@ static void activate_path(struct work_struct *work)
1669     {
1670     struct pgpath *pgpath =
1671     container_of(work, struct pgpath, activate_path.work);
1672     + struct request_queue *q = bdev_get_queue(pgpath->path.dev->bdev);
1673    
1674     - if (pgpath->is_active)
1675     - scsi_dh_activate(bdev_get_queue(pgpath->path.dev->bdev),
1676     - pg_init_done, pgpath);
1677     + if (pgpath->is_active && !blk_queue_dying(q))
1678     + scsi_dh_activate(q, pg_init_done, pgpath);
1679     else
1680     pg_init_done(pgpath, SCSI_DH_DEV_OFFLINED);
1681     }
1682     diff --git a/drivers/md/dm-rq.c b/drivers/md/dm-rq.c
1683     index 1ca7463e8bb2..5da86c8b6545 100644
1684     --- a/drivers/md/dm-rq.c
1685     +++ b/drivers/md/dm-rq.c
1686     @@ -73,15 +73,24 @@ static void dm_old_start_queue(struct request_queue *q)
1687     spin_unlock_irqrestore(q->queue_lock, flags);
1688     }
1689    
1690     +static void dm_mq_start_queue(struct request_queue *q)
1691     +{
1692     + unsigned long flags;
1693     +
1694     + spin_lock_irqsave(q->queue_lock, flags);
1695     + queue_flag_clear(QUEUE_FLAG_STOPPED, q);
1696     + spin_unlock_irqrestore(q->queue_lock, flags);
1697     +
1698     + blk_mq_start_stopped_hw_queues(q, true);
1699     + blk_mq_kick_requeue_list(q);
1700     +}
1701     +
1702     void dm_start_queue(struct request_queue *q)
1703     {
1704     if (!q->mq_ops)
1705     dm_old_start_queue(q);
1706     - else {
1707     - queue_flag_clear_unlocked(QUEUE_FLAG_STOPPED, q);
1708     - blk_mq_start_stopped_hw_queues(q, true);
1709     - blk_mq_kick_requeue_list(q);
1710     - }
1711     + else
1712     + dm_mq_start_queue(q);
1713     }
1714    
1715     static void dm_old_stop_queue(struct request_queue *q)
1716     diff --git a/drivers/md/dm.c b/drivers/md/dm.c
1717     index fa9b1cb4438a..0f2928b3136b 100644
1718     --- a/drivers/md/dm.c
1719     +++ b/drivers/md/dm.c
1720     @@ -1873,6 +1873,7 @@ EXPORT_SYMBOL_GPL(dm_device_name);
1721    
1722     static void __dm_destroy(struct mapped_device *md, bool wait)
1723     {
1724     + struct request_queue *q = dm_get_md_queue(md);
1725     struct dm_table *map;
1726     int srcu_idx;
1727    
1728     @@ -1883,6 +1884,10 @@ static void __dm_destroy(struct mapped_device *md, bool wait)
1729     set_bit(DMF_FREEING, &md->flags);
1730     spin_unlock(&_minor_lock);
1731    
1732     + spin_lock_irq(q->queue_lock);
1733     + queue_flag_set(QUEUE_FLAG_DYING, q);
1734     + spin_unlock_irq(q->queue_lock);
1735     +
1736     if (dm_request_based(md) && md->kworker_task)
1737     flush_kthread_worker(&md->kworker);
1738    
1739     @@ -2249,10 +2254,11 @@ static int __dm_resume(struct mapped_device *md, struct dm_table *map)
1740    
1741     int dm_resume(struct mapped_device *md)
1742     {
1743     - int r = -EINVAL;
1744     + int r;
1745     struct dm_table *map = NULL;
1746    
1747     retry:
1748     + r = -EINVAL;
1749     mutex_lock_nested(&md->suspend_lock, SINGLE_DEPTH_NESTING);
1750    
1751     if (!dm_suspended_md(md))
1752     @@ -2276,8 +2282,6 @@ retry:
1753     goto out;
1754    
1755     clear_bit(DMF_SUSPENDED, &md->flags);
1756     -
1757     - r = 0;
1758     out:
1759     mutex_unlock(&md->suspend_lock);
1760    
1761     diff --git a/drivers/media/dvb-frontends/mb86a20s.c b/drivers/media/dvb-frontends/mb86a20s.c
1762     index 41325328a22e..fe79358b035e 100644
1763     --- a/drivers/media/dvb-frontends/mb86a20s.c
1764     +++ b/drivers/media/dvb-frontends/mb86a20s.c
1765     @@ -71,25 +71,27 @@ static struct regdata mb86a20s_init1[] = {
1766     };
1767    
1768     static struct regdata mb86a20s_init2[] = {
1769     - { 0x28, 0x22 }, { 0x29, 0x00 }, { 0x2a, 0x1f }, { 0x2b, 0xf0 },
1770     + { 0x50, 0xd1 }, { 0x51, 0x22 },
1771     + { 0x39, 0x01 },
1772     + { 0x71, 0x00 },
1773     { 0x3b, 0x21 },
1774     - { 0x3c, 0x38 },
1775     + { 0x3c, 0x3a },
1776     { 0x01, 0x0d },
1777     - { 0x04, 0x08 }, { 0x05, 0x03 },
1778     + { 0x04, 0x08 }, { 0x05, 0x05 },
1779     { 0x04, 0x0e }, { 0x05, 0x00 },
1780     - { 0x04, 0x0f }, { 0x05, 0x37 },
1781     - { 0x04, 0x0b }, { 0x05, 0x78 },
1782     + { 0x04, 0x0f }, { 0x05, 0x14 },
1783     + { 0x04, 0x0b }, { 0x05, 0x8c },
1784     { 0x04, 0x00 }, { 0x05, 0x00 },
1785     - { 0x04, 0x01 }, { 0x05, 0x1e },
1786     - { 0x04, 0x02 }, { 0x05, 0x07 },
1787     - { 0x04, 0x03 }, { 0x05, 0xd0 },
1788     + { 0x04, 0x01 }, { 0x05, 0x07 },
1789     + { 0x04, 0x02 }, { 0x05, 0x0f },
1790     + { 0x04, 0x03 }, { 0x05, 0xa0 },
1791     { 0x04, 0x09 }, { 0x05, 0x00 },
1792     { 0x04, 0x0a }, { 0x05, 0xff },
1793     - { 0x04, 0x27 }, { 0x05, 0x00 },
1794     + { 0x04, 0x27 }, { 0x05, 0x64 },
1795     { 0x04, 0x28 }, { 0x05, 0x00 },
1796     - { 0x04, 0x1e }, { 0x05, 0x00 },
1797     - { 0x04, 0x29 }, { 0x05, 0x64 },
1798     - { 0x04, 0x32 }, { 0x05, 0x02 },
1799     + { 0x04, 0x1e }, { 0x05, 0xff },
1800     + { 0x04, 0x29 }, { 0x05, 0x0a },
1801     + { 0x04, 0x32 }, { 0x05, 0x0a },
1802     { 0x04, 0x14 }, { 0x05, 0x02 },
1803     { 0x04, 0x04 }, { 0x05, 0x00 },
1804     { 0x04, 0x05 }, { 0x05, 0x22 },
1805     @@ -97,8 +99,6 @@ static struct regdata mb86a20s_init2[] = {
1806     { 0x04, 0x07 }, { 0x05, 0xd8 },
1807     { 0x04, 0x12 }, { 0x05, 0x00 },
1808     { 0x04, 0x13 }, { 0x05, 0xff },
1809     - { 0x04, 0x15 }, { 0x05, 0x4e },
1810     - { 0x04, 0x16 }, { 0x05, 0x20 },
1811    
1812     /*
1813     * On this demod, when the bit count reaches the count below,
1814     @@ -152,42 +152,36 @@ static struct regdata mb86a20s_init2[] = {
1815     { 0x50, 0x51 }, { 0x51, 0x04 }, /* MER symbol 4 */
1816     { 0x45, 0x04 }, /* CN symbol 4 */
1817     { 0x48, 0x04 }, /* CN manual mode */
1818     -
1819     + { 0x50, 0xd5 }, { 0x51, 0x01 },
1820     { 0x50, 0xd6 }, { 0x51, 0x1f },
1821     { 0x50, 0xd2 }, { 0x51, 0x03 },
1822     - { 0x50, 0xd7 }, { 0x51, 0xbf },
1823     - { 0x28, 0x74 }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0xff },
1824     - { 0x28, 0x46 }, { 0x29, 0x00 }, { 0x2a, 0x1a }, { 0x2b, 0x0c },
1825     -
1826     - { 0x04, 0x40 }, { 0x05, 0x00 },
1827     - { 0x28, 0x00 }, { 0x2b, 0x08 },
1828     - { 0x28, 0x05 }, { 0x2b, 0x00 },
1829     + { 0x50, 0xd7 }, { 0x51, 0x3f },
1830     { 0x1c, 0x01 },
1831     - { 0x28, 0x06 }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x1f },
1832     - { 0x28, 0x07 }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x18 },
1833     - { 0x28, 0x08 }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x12 },
1834     - { 0x28, 0x09 }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x30 },
1835     - { 0x28, 0x0a }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x37 },
1836     - { 0x28, 0x0b }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x02 },
1837     - { 0x28, 0x0c }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x09 },
1838     - { 0x28, 0x0d }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x06 },
1839     - { 0x28, 0x0e }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x7b },
1840     - { 0x28, 0x0f }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x76 },
1841     - { 0x28, 0x10 }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x7d },
1842     - { 0x28, 0x11 }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x08 },
1843     - { 0x28, 0x12 }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x0b },
1844     - { 0x28, 0x13 }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x00 },
1845     - { 0x28, 0x14 }, { 0x29, 0x00 }, { 0x2a, 0x01 }, { 0x2b, 0xf2 },
1846     - { 0x28, 0x15 }, { 0x29, 0x00 }, { 0x2a, 0x01 }, { 0x2b, 0xf3 },
1847     - { 0x28, 0x16 }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x05 },
1848     - { 0x28, 0x17 }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x16 },
1849     - { 0x28, 0x18 }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x0f },
1850     - { 0x28, 0x19 }, { 0x29, 0x00 }, { 0x2a, 0x07 }, { 0x2b, 0xef },
1851     - { 0x28, 0x1a }, { 0x29, 0x00 }, { 0x2a, 0x07 }, { 0x2b, 0xd8 },
1852     - { 0x28, 0x1b }, { 0x29, 0x00 }, { 0x2a, 0x07 }, { 0x2b, 0xf1 },
1853     - { 0x28, 0x1c }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x3d },
1854     - { 0x28, 0x1d }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x94 },
1855     - { 0x28, 0x1e }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0xba },
1856     + { 0x28, 0x06 }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x03 },
1857     + { 0x28, 0x07 }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x0d },
1858     + { 0x28, 0x08 }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x02 },
1859     + { 0x28, 0x09 }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x01 },
1860     + { 0x28, 0x0a }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x21 },
1861     + { 0x28, 0x0b }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x29 },
1862     + { 0x28, 0x0c }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x16 },
1863     + { 0x28, 0x0d }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x31 },
1864     + { 0x28, 0x0e }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x0e },
1865     + { 0x28, 0x0f }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x4e },
1866     + { 0x28, 0x10 }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x46 },
1867     + { 0x28, 0x11 }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x0f },
1868     + { 0x28, 0x12 }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x56 },
1869     + { 0x28, 0x13 }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x35 },
1870     + { 0x28, 0x14 }, { 0x29, 0x00 }, { 0x2a, 0x01 }, { 0x2b, 0xbe },
1871     + { 0x28, 0x15 }, { 0x29, 0x00 }, { 0x2a, 0x01 }, { 0x2b, 0x84 },
1872     + { 0x28, 0x16 }, { 0x29, 0x00 }, { 0x2a, 0x03 }, { 0x2b, 0xee },
1873     + { 0x28, 0x17 }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x98 },
1874     + { 0x28, 0x18 }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x9f },
1875     + { 0x28, 0x19 }, { 0x29, 0x00 }, { 0x2a, 0x07 }, { 0x2b, 0xb2 },
1876     + { 0x28, 0x1a }, { 0x29, 0x00 }, { 0x2a, 0x06 }, { 0x2b, 0xc2 },
1877     + { 0x28, 0x1b }, { 0x29, 0x00 }, { 0x2a, 0x07 }, { 0x2b, 0x4a },
1878     + { 0x28, 0x1c }, { 0x29, 0x00 }, { 0x2a, 0x01 }, { 0x2b, 0xbc },
1879     + { 0x28, 0x1d }, { 0x29, 0x00 }, { 0x2a, 0x04 }, { 0x2b, 0xba },
1880     + { 0x28, 0x1e }, { 0x29, 0x00 }, { 0x2a, 0x06 }, { 0x2b, 0x14 },
1881     { 0x50, 0x1e }, { 0x51, 0x5d },
1882     { 0x50, 0x22 }, { 0x51, 0x00 },
1883     { 0x50, 0x23 }, { 0x51, 0xc8 },
1884     @@ -196,9 +190,7 @@ static struct regdata mb86a20s_init2[] = {
1885     { 0x50, 0x26 }, { 0x51, 0x00 },
1886     { 0x50, 0x27 }, { 0x51, 0xc3 },
1887     { 0x50, 0x39 }, { 0x51, 0x02 },
1888     - { 0xec, 0x0f },
1889     - { 0xeb, 0x1f },
1890     - { 0x28, 0x6a }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x00 },
1891     + { 0x50, 0xd5 }, { 0x51, 0x01 },
1892     { 0xd0, 0x00 },
1893     };
1894    
1895     @@ -318,7 +310,11 @@ static int mb86a20s_read_status(struct dvb_frontend *fe, enum fe_status *status)
1896     if (val >= 7)
1897     *status |= FE_HAS_SYNC;
1898    
1899     - if (val >= 8) /* Maybe 9? */
1900     + /*
1901     + * Actually, on state S8, it starts receiving TS, but the TS
1902     + * output is only on normal state after the transition to S9.
1903     + */
1904     + if (val >= 9)
1905     *status |= FE_HAS_LOCK;
1906    
1907     dev_dbg(&state->i2c->dev, "%s: Status = 0x%02x (state = %d)\n",
1908     @@ -2058,6 +2054,11 @@ static void mb86a20s_release(struct dvb_frontend *fe)
1909     kfree(state);
1910     }
1911    
1912     +static int mb86a20s_get_frontend_algo(struct dvb_frontend *fe)
1913     +{
1914     + return DVBFE_ALGO_HW;
1915     +}
1916     +
1917     static struct dvb_frontend_ops mb86a20s_ops;
1918    
1919     struct dvb_frontend *mb86a20s_attach(const struct mb86a20s_config *config,
1920     @@ -2130,6 +2131,7 @@ static struct dvb_frontend_ops mb86a20s_ops = {
1921     .read_status = mb86a20s_read_status_and_stats,
1922     .read_signal_strength = mb86a20s_read_signal_strength_from_cache,
1923     .tune = mb86a20s_tune,
1924     + .get_frontend_algo = mb86a20s_get_frontend_algo,
1925     };
1926    
1927     MODULE_DESCRIPTION("DVB Frontend module for Fujitsu mb86A20s hardware");
1928     diff --git a/drivers/media/usb/cx231xx/cx231xx-avcore.c b/drivers/media/usb/cx231xx/cx231xx-avcore.c
1929     index 491913778bcc..2f52d66b4dae 100644
1930     --- a/drivers/media/usb/cx231xx/cx231xx-avcore.c
1931     +++ b/drivers/media/usb/cx231xx/cx231xx-avcore.c
1932     @@ -1264,7 +1264,10 @@ int cx231xx_set_agc_analog_digital_mux_select(struct cx231xx *dev,
1933     dev->board.agc_analog_digital_select_gpio,
1934     analog_or_digital);
1935    
1936     - return status;
1937     + if (status < 0)
1938     + return status;
1939     +
1940     + return 0;
1941     }
1942    
1943     int cx231xx_enable_i2c_port_3(struct cx231xx *dev, bool is_port_3)
1944     diff --git a/drivers/media/usb/cx231xx/cx231xx-cards.c b/drivers/media/usb/cx231xx/cx231xx-cards.c
1945     index c63248a18823..72c246bfaa1c 100644
1946     --- a/drivers/media/usb/cx231xx/cx231xx-cards.c
1947     +++ b/drivers/media/usb/cx231xx/cx231xx-cards.c
1948     @@ -486,7 +486,7 @@ struct cx231xx_board cx231xx_boards[] = {
1949     .output_mode = OUT_MODE_VIP11,
1950     .demod_xfer_mode = 0,
1951     .ctl_pin_status_mask = 0xFFFFFFC4,
1952     - .agc_analog_digital_select_gpio = 0x00, /* According with PV cxPolaris.inf file */
1953     + .agc_analog_digital_select_gpio = 0x1c,
1954     .tuner_sif_gpio = -1,
1955     .tuner_scl_gpio = -1,
1956     .tuner_sda_gpio = -1,
1957     diff --git a/drivers/media/usb/cx231xx/cx231xx-core.c b/drivers/media/usb/cx231xx/cx231xx-core.c
1958     index 630f4fc5155f..ea9a99e41581 100644
1959     --- a/drivers/media/usb/cx231xx/cx231xx-core.c
1960     +++ b/drivers/media/usb/cx231xx/cx231xx-core.c
1961     @@ -712,6 +712,7 @@ int cx231xx_set_mode(struct cx231xx *dev, enum cx231xx_mode set_mode)
1962     break;
1963     case CX231XX_BOARD_CNXT_RDE_253S:
1964     case CX231XX_BOARD_CNXT_RDU_253S:
1965     + case CX231XX_BOARD_PV_PLAYTV_USB_HYBRID:
1966     errCode = cx231xx_set_agc_analog_digital_mux_select(dev, 1);
1967     break;
1968     case CX231XX_BOARD_HAUPPAUGE_EXETER:
1969     @@ -738,7 +739,7 @@ int cx231xx_set_mode(struct cx231xx *dev, enum cx231xx_mode set_mode)
1970     case CX231XX_BOARD_PV_PLAYTV_USB_HYBRID:
1971     case CX231XX_BOARD_HAUPPAUGE_USB2_FM_PAL:
1972     case CX231XX_BOARD_HAUPPAUGE_USB2_FM_NTSC:
1973     - errCode = cx231xx_set_agc_analog_digital_mux_select(dev, 0);
1974     + errCode = cx231xx_set_agc_analog_digital_mux_select(dev, 0);
1975     break;
1976     default:
1977     break;
1978     @@ -1301,15 +1302,29 @@ int cx231xx_dev_init(struct cx231xx *dev)
1979     dev->i2c_bus[2].i2c_reserve = 0;
1980    
1981     /* register I2C buses */
1982     - cx231xx_i2c_register(&dev->i2c_bus[0]);
1983     - cx231xx_i2c_register(&dev->i2c_bus[1]);
1984     - cx231xx_i2c_register(&dev->i2c_bus[2]);
1985     + errCode = cx231xx_i2c_register(&dev->i2c_bus[0]);
1986     + if (errCode < 0)
1987     + return errCode;
1988     + errCode = cx231xx_i2c_register(&dev->i2c_bus[1]);
1989     + if (errCode < 0)
1990     + return errCode;
1991     + errCode = cx231xx_i2c_register(&dev->i2c_bus[2]);
1992     + if (errCode < 0)
1993     + return errCode;
1994    
1995     errCode = cx231xx_i2c_mux_create(dev);
1996     + if (errCode < 0) {
1997     + dev_err(dev->dev,
1998     + "%s: Failed to create I2C mux\n", __func__);
1999     + return errCode;
2000     + }
2001     + errCode = cx231xx_i2c_mux_register(dev, 0);
2002     + if (errCode < 0)
2003     + return errCode;
2004     +
2005     + errCode = cx231xx_i2c_mux_register(dev, 1);
2006     if (errCode < 0)
2007     return errCode;
2008     - cx231xx_i2c_mux_register(dev, 0);
2009     - cx231xx_i2c_mux_register(dev, 1);
2010    
2011     /* scan the real bus segments in the order of physical port numbers */
2012     cx231xx_do_i2c_scan(dev, I2C_0);
2013     diff --git a/drivers/memstick/host/rtsx_usb_ms.c b/drivers/memstick/host/rtsx_usb_ms.c
2014     index d34bc3530385..2e3cf012ef48 100644
2015     --- a/drivers/memstick/host/rtsx_usb_ms.c
2016     +++ b/drivers/memstick/host/rtsx_usb_ms.c
2017     @@ -524,6 +524,7 @@ static void rtsx_usb_ms_handle_req(struct work_struct *work)
2018     int rc;
2019    
2020     if (!host->req) {
2021     + pm_runtime_get_sync(ms_dev(host));
2022     do {
2023     rc = memstick_next_req(msh, &host->req);
2024     dev_dbg(ms_dev(host), "next req %d\n", rc);
2025     @@ -544,6 +545,7 @@ static void rtsx_usb_ms_handle_req(struct work_struct *work)
2026     host->req->error);
2027     }
2028     } while (!rc);
2029     + pm_runtime_put(ms_dev(host));
2030     }
2031    
2032     }
2033     @@ -570,6 +572,7 @@ static int rtsx_usb_ms_set_param(struct memstick_host *msh,
2034     dev_dbg(ms_dev(host), "%s: param = %d, value = %d\n",
2035     __func__, param, value);
2036    
2037     + pm_runtime_get_sync(ms_dev(host));
2038     mutex_lock(&ucr->dev_mutex);
2039    
2040     err = rtsx_usb_card_exclusive_check(ucr, RTSX_USB_MS_CARD);
2041     @@ -635,6 +638,7 @@ static int rtsx_usb_ms_set_param(struct memstick_host *msh,
2042     }
2043     out:
2044     mutex_unlock(&ucr->dev_mutex);
2045     + pm_runtime_put(ms_dev(host));
2046    
2047     /* power-on delay */
2048     if (param == MEMSTICK_POWER && value == MEMSTICK_POWER_ON)
2049     @@ -681,6 +685,7 @@ static int rtsx_usb_detect_ms_card(void *__host)
2050     int err;
2051    
2052     for (;;) {
2053     + pm_runtime_get_sync(ms_dev(host));
2054     mutex_lock(&ucr->dev_mutex);
2055    
2056     /* Check pending MS card changes */
2057     @@ -703,6 +708,7 @@ static int rtsx_usb_detect_ms_card(void *__host)
2058     }
2059    
2060     poll_again:
2061     + pm_runtime_put(ms_dev(host));
2062     if (host->eject)
2063     break;
2064    
2065     diff --git a/drivers/misc/cxl/api.c b/drivers/misc/cxl/api.c
2066     index f3d34b941f85..af23d7dfe752 100644
2067     --- a/drivers/misc/cxl/api.c
2068     +++ b/drivers/misc/cxl/api.c
2069     @@ -229,6 +229,14 @@ int cxl_start_context(struct cxl_context *ctx, u64 wed,
2070     if (ctx->status == STARTED)
2071     goto out; /* already started */
2072    
2073     + /*
2074     + * Increment the mapped context count for adapter. This also checks
2075     + * if adapter_context_lock is taken.
2076     + */
2077     + rc = cxl_adapter_context_get(ctx->afu->adapter);
2078     + if (rc)
2079     + goto out;
2080     +
2081     if (task) {
2082     ctx->pid = get_task_pid(task, PIDTYPE_PID);
2083     ctx->glpid = get_task_pid(task->group_leader, PIDTYPE_PID);
2084     @@ -240,6 +248,7 @@ int cxl_start_context(struct cxl_context *ctx, u64 wed,
2085    
2086     if ((rc = cxl_ops->attach_process(ctx, kernel, wed, 0))) {
2087     put_pid(ctx->pid);
2088     + cxl_adapter_context_put(ctx->afu->adapter);
2089     cxl_ctx_put();
2090     goto out;
2091     }
2092     diff --git a/drivers/misc/cxl/context.c b/drivers/misc/cxl/context.c
2093     index c466ee2b0c97..5e506c19108a 100644
2094     --- a/drivers/misc/cxl/context.c
2095     +++ b/drivers/misc/cxl/context.c
2096     @@ -238,6 +238,9 @@ int __detach_context(struct cxl_context *ctx)
2097     put_pid(ctx->glpid);
2098    
2099     cxl_ctx_put();
2100     +
2101     + /* Decrease the attached context count on the adapter */
2102     + cxl_adapter_context_put(ctx->afu->adapter);
2103     return 0;
2104     }
2105    
2106     diff --git a/drivers/misc/cxl/cxl.h b/drivers/misc/cxl/cxl.h
2107     index 344a0ff8f8c7..19aa2aca9683 100644
2108     --- a/drivers/misc/cxl/cxl.h
2109     +++ b/drivers/misc/cxl/cxl.h
2110     @@ -615,6 +615,14 @@ struct cxl {
2111     bool perst_select_user;
2112     bool perst_same_image;
2113     bool psl_timebase_synced;
2114     +
2115     + /*
2116     + * number of contexts mapped on to this card. Possible values are:
2117     + * >0: Number of contexts mapped and new one can be mapped.
2118     + * 0: No active contexts and new ones can be mapped.
2119     + * -1: No contexts mapped and new ones cannot be mapped.
2120     + */
2121     + atomic_t contexts_num;
2122     };
2123    
2124     int cxl_pci_alloc_one_irq(struct cxl *adapter);
2125     @@ -940,4 +948,20 @@ bool cxl_pci_is_vphb_device(struct pci_dev *dev);
2126    
2127     /* decode AFU error bits in the PSL register PSL_SERR_An */
2128     void cxl_afu_decode_psl_serr(struct cxl_afu *afu, u64 serr);
2129     +
2130     +/*
2131     + * Increments the number of attached contexts on an adapter.
2132     + * In case an adapter_context_lock is taken the return -EBUSY.
2133     + */
2134     +int cxl_adapter_context_get(struct cxl *adapter);
2135     +
2136     +/* Decrements the number of attached contexts on an adapter */
2137     +void cxl_adapter_context_put(struct cxl *adapter);
2138     +
2139     +/* If no active contexts then prevents contexts from being attached */
2140     +int cxl_adapter_context_lock(struct cxl *adapter);
2141     +
2142     +/* Unlock the contexts-lock if taken. Warn and force unlock otherwise */
2143     +void cxl_adapter_context_unlock(struct cxl *adapter);
2144     +
2145     #endif
2146     diff --git a/drivers/misc/cxl/file.c b/drivers/misc/cxl/file.c
2147     index 5fb9894b157f..d0b421f49b39 100644
2148     --- a/drivers/misc/cxl/file.c
2149     +++ b/drivers/misc/cxl/file.c
2150     @@ -205,11 +205,22 @@ static long afu_ioctl_start_work(struct cxl_context *ctx,
2151     ctx->pid = get_task_pid(current, PIDTYPE_PID);
2152     ctx->glpid = get_task_pid(current->group_leader, PIDTYPE_PID);
2153    
2154     + /*
2155     + * Increment the mapped context count for adapter. This also checks
2156     + * if adapter_context_lock is taken.
2157     + */
2158     + rc = cxl_adapter_context_get(ctx->afu->adapter);
2159     + if (rc) {
2160     + afu_release_irqs(ctx, ctx);
2161     + goto out;
2162     + }
2163     +
2164     trace_cxl_attach(ctx, work.work_element_descriptor, work.num_interrupts, amr);
2165    
2166     if ((rc = cxl_ops->attach_process(ctx, false, work.work_element_descriptor,
2167     amr))) {
2168     afu_release_irqs(ctx, ctx);
2169     + cxl_adapter_context_put(ctx->afu->adapter);
2170     goto out;
2171     }
2172    
2173     diff --git a/drivers/misc/cxl/guest.c b/drivers/misc/cxl/guest.c
2174     index 9aa58a77a24d..3e102cd6ed91 100644
2175     --- a/drivers/misc/cxl/guest.c
2176     +++ b/drivers/misc/cxl/guest.c
2177     @@ -1152,6 +1152,9 @@ struct cxl *cxl_guest_init_adapter(struct device_node *np, struct platform_devic
2178     if ((rc = cxl_sysfs_adapter_add(adapter)))
2179     goto err_put1;
2180    
2181     + /* release the context lock as the adapter is configured */
2182     + cxl_adapter_context_unlock(adapter);
2183     +
2184     return adapter;
2185    
2186     err_put1:
2187     diff --git a/drivers/misc/cxl/main.c b/drivers/misc/cxl/main.c
2188     index d9be23b24aa3..62e0dfb5f15b 100644
2189     --- a/drivers/misc/cxl/main.c
2190     +++ b/drivers/misc/cxl/main.c
2191     @@ -243,8 +243,10 @@ struct cxl *cxl_alloc_adapter(void)
2192     if (dev_set_name(&adapter->dev, "card%i", adapter->adapter_num))
2193     goto err2;
2194    
2195     - return adapter;
2196     + /* start with context lock taken */
2197     + atomic_set(&adapter->contexts_num, -1);
2198    
2199     + return adapter;
2200     err2:
2201     cxl_remove_adapter_nr(adapter);
2202     err1:
2203     @@ -286,6 +288,44 @@ int cxl_afu_select_best_mode(struct cxl_afu *afu)
2204     return 0;
2205     }
2206    
2207     +int cxl_adapter_context_get(struct cxl *adapter)
2208     +{
2209     + int rc;
2210     +
2211     + rc = atomic_inc_unless_negative(&adapter->contexts_num);
2212     + return rc >= 0 ? 0 : -EBUSY;
2213     +}
2214     +
2215     +void cxl_adapter_context_put(struct cxl *adapter)
2216     +{
2217     + atomic_dec_if_positive(&adapter->contexts_num);
2218     +}
2219     +
2220     +int cxl_adapter_context_lock(struct cxl *adapter)
2221     +{
2222     + int rc;
2223     + /* no active contexts -> contexts_num == 0 */
2224     + rc = atomic_cmpxchg(&adapter->contexts_num, 0, -1);
2225     + return rc ? -EBUSY : 0;
2226     +}
2227     +
2228     +void cxl_adapter_context_unlock(struct cxl *adapter)
2229     +{
2230     + int val = atomic_cmpxchg(&adapter->contexts_num, -1, 0);
2231     +
2232     + /*
2233     + * contexts lock taken -> contexts_num == -1
2234     + * If not true then show a warning and force reset the lock.
2235     + * This will happen when context_unlock was requested without
2236     + * doing a context_lock.
2237     + */
2238     + if (val != -1) {
2239     + atomic_set(&adapter->contexts_num, 0);
2240     + WARN(1, "Adapter context unlocked with %d active contexts",
2241     + val);
2242     + }
2243     +}
2244     +
2245     static int __init init_cxl(void)
2246     {
2247     int rc = 0;
2248     diff --git a/drivers/misc/cxl/pci.c b/drivers/misc/cxl/pci.c
2249     index 6f0c4ac4b649..8ad4e4f6ff77 100644
2250     --- a/drivers/misc/cxl/pci.c
2251     +++ b/drivers/misc/cxl/pci.c
2252     @@ -1484,6 +1484,8 @@ static int cxl_configure_adapter(struct cxl *adapter, struct pci_dev *dev)
2253     if ((rc = cxl_native_register_psl_err_irq(adapter)))
2254     goto err;
2255    
2256     + /* Release the context lock as adapter is configured */
2257     + cxl_adapter_context_unlock(adapter);
2258     return 0;
2259    
2260     err:
2261     diff --git a/drivers/misc/cxl/sysfs.c b/drivers/misc/cxl/sysfs.c
2262     index b043c20f158f..a8b6d6a635e9 100644
2263     --- a/drivers/misc/cxl/sysfs.c
2264     +++ b/drivers/misc/cxl/sysfs.c
2265     @@ -75,12 +75,31 @@ static ssize_t reset_adapter_store(struct device *device,
2266     int val;
2267    
2268     rc = sscanf(buf, "%i", &val);
2269     - if ((rc != 1) || (val != 1))
2270     + if ((rc != 1) || (val != 1 && val != -1))
2271     return -EINVAL;
2272    
2273     - if ((rc = cxl_ops->adapter_reset(adapter)))
2274     - return rc;
2275     - return count;
2276     + /*
2277     + * See if we can lock the context mapping that's only allowed
2278     + * when there are no contexts attached to the adapter. Once
2279     + * taken this will also prevent any context from getting activated.
2280     + */
2281     + if (val == 1) {
2282     + rc = cxl_adapter_context_lock(adapter);
2283     + if (rc)
2284     + goto out;
2285     +
2286     + rc = cxl_ops->adapter_reset(adapter);
2287     + /* In case reset failed release context lock */
2288     + if (rc)
2289     + cxl_adapter_context_unlock(adapter);
2290     +
2291     + } else if (val == -1) {
2292     + /* Perform a forced adapter reset */
2293     + rc = cxl_ops->adapter_reset(adapter);
2294     + }
2295     +
2296     +out:
2297     + return rc ? rc : count;
2298     }
2299    
2300     static ssize_t load_image_on_perst_show(struct device *device,
2301     diff --git a/drivers/misc/mei/amthif.c b/drivers/misc/mei/amthif.c
2302     index fd9271bc1a11..cd01e342bc78 100644
2303     --- a/drivers/misc/mei/amthif.c
2304     +++ b/drivers/misc/mei/amthif.c
2305     @@ -139,7 +139,7 @@ int mei_amthif_read(struct mei_device *dev, struct file *file,
2306     return -ERESTARTSYS;
2307    
2308     if (!mei_cl_is_connected(cl)) {
2309     - rets = -EBUSY;
2310     + rets = -ENODEV;
2311     goto out;
2312     }
2313    
2314     diff --git a/drivers/misc/mei/bus.c b/drivers/misc/mei/bus.c
2315     index e094df3cf2d5..5b5b2e07e99e 100644
2316     --- a/drivers/misc/mei/bus.c
2317     +++ b/drivers/misc/mei/bus.c
2318     @@ -142,7 +142,7 @@ ssize_t __mei_cl_recv(struct mei_cl *cl, u8 *buf, size_t length)
2319     mutex_lock(&bus->device_lock);
2320    
2321     if (!mei_cl_is_connected(cl)) {
2322     - rets = -EBUSY;
2323     + rets = -ENODEV;
2324     goto out;
2325     }
2326     }
2327     diff --git a/drivers/misc/mei/hw-me-regs.h b/drivers/misc/mei/hw-me-regs.h
2328     index 0dcb854b4bfc..7ad15d678878 100644
2329     --- a/drivers/misc/mei/hw-me-regs.h
2330     +++ b/drivers/misc/mei/hw-me-regs.h
2331     @@ -125,6 +125,9 @@
2332     #define MEI_DEV_ID_BXT_M 0x1A9A /* Broxton M */
2333     #define MEI_DEV_ID_APL_I 0x5A9A /* Apollo Lake I */
2334    
2335     +#define MEI_DEV_ID_KBP 0xA2BA /* Kaby Point */
2336     +#define MEI_DEV_ID_KBP_2 0xA2BB /* Kaby Point 2 */
2337     +
2338     /*
2339     * MEI HW Section
2340     */
2341     diff --git a/drivers/misc/mei/main.c b/drivers/misc/mei/main.c
2342     index 52635b063873..080208dc5516 100644
2343     --- a/drivers/misc/mei/main.c
2344     +++ b/drivers/misc/mei/main.c
2345     @@ -202,7 +202,7 @@ static ssize_t mei_read(struct file *file, char __user *ubuf,
2346    
2347     mutex_lock(&dev->device_lock);
2348     if (!mei_cl_is_connected(cl)) {
2349     - rets = -EBUSY;
2350     + rets = -ENODEV;
2351     goto out;
2352     }
2353     }
2354     diff --git a/drivers/misc/mei/pci-me.c b/drivers/misc/mei/pci-me.c
2355     index 71cea9b296b2..5eb9b75ae9ec 100644
2356     --- a/drivers/misc/mei/pci-me.c
2357     +++ b/drivers/misc/mei/pci-me.c
2358     @@ -91,6 +91,9 @@ static const struct pci_device_id mei_me_pci_tbl[] = {
2359     {MEI_PCI_DEVICE(MEI_DEV_ID_BXT_M, mei_me_pch8_cfg)},
2360     {MEI_PCI_DEVICE(MEI_DEV_ID_APL_I, mei_me_pch8_cfg)},
2361    
2362     + {MEI_PCI_DEVICE(MEI_DEV_ID_KBP, mei_me_pch8_cfg)},
2363     + {MEI_PCI_DEVICE(MEI_DEV_ID_KBP_2, mei_me_pch8_cfg)},
2364     +
2365     /* required last entry */
2366     {0, }
2367     };
2368     diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c
2369     index 2206d4477dbb..17891f17f39d 100644
2370     --- a/drivers/mmc/card/block.c
2371     +++ b/drivers/mmc/card/block.c
2372     @@ -1778,7 +1778,7 @@ static void mmc_blk_packed_hdr_wrq_prep(struct mmc_queue_req *mqrq,
2373     struct mmc_blk_data *md = mq->data;
2374     struct mmc_packed *packed = mqrq->packed;
2375     bool do_rel_wr, do_data_tag;
2376     - u32 *packed_cmd_hdr;
2377     + __le32 *packed_cmd_hdr;
2378     u8 hdr_blocks;
2379     u8 i = 1;
2380    
2381     @@ -2303,7 +2303,8 @@ again:
2382     set_capacity(md->disk, size);
2383    
2384     if (mmc_host_cmd23(card->host)) {
2385     - if (mmc_card_mmc(card) ||
2386     + if ((mmc_card_mmc(card) &&
2387     + card->csd.mmca_vsn >= CSD_SPEC_VER_3) ||
2388     (mmc_card_sd(card) &&
2389     card->scr.cmds & SD_SCR_CMD23_SUPPORT))
2390     md->flags |= MMC_BLK_CMD23;
2391     diff --git a/drivers/mmc/card/queue.h b/drivers/mmc/card/queue.h
2392     index fee5e1271465..7f16709a5bd5 100644
2393     --- a/drivers/mmc/card/queue.h
2394     +++ b/drivers/mmc/card/queue.h
2395     @@ -31,7 +31,7 @@ enum mmc_packed_type {
2396    
2397     struct mmc_packed {
2398     struct list_head list;
2399     - u32 cmd_hdr[1024];
2400     + __le32 cmd_hdr[1024];
2401     unsigned int blocks;
2402     u8 nr_entries;
2403     u8 retries;
2404     diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
2405     index f2d185cf8a8b..c57eb32dc075 100644
2406     --- a/drivers/mmc/core/mmc.c
2407     +++ b/drivers/mmc/core/mmc.c
2408     @@ -1259,6 +1259,16 @@ static int mmc_select_hs400es(struct mmc_card *card)
2409     goto out_err;
2410     }
2411    
2412     + if (card->mmc_avail_type & EXT_CSD_CARD_TYPE_HS400_1_2V)
2413     + err = __mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_120);
2414     +
2415     + if (err && card->mmc_avail_type & EXT_CSD_CARD_TYPE_HS400_1_8V)
2416     + err = __mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_180);
2417     +
2418     + /* If fails try again during next card power cycle */
2419     + if (err)
2420     + goto out_err;
2421     +
2422     err = mmc_select_bus_width(card);
2423     if (err < 0)
2424     goto out_err;
2425     diff --git a/drivers/mmc/host/rtsx_usb_sdmmc.c b/drivers/mmc/host/rtsx_usb_sdmmc.c
2426     index 6c71fc9f76c7..da9f71b8deb0 100644
2427     --- a/drivers/mmc/host/rtsx_usb_sdmmc.c
2428     +++ b/drivers/mmc/host/rtsx_usb_sdmmc.c
2429     @@ -1138,11 +1138,6 @@ static void sdmmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
2430     dev_dbg(sdmmc_dev(host), "%s\n", __func__);
2431     mutex_lock(&ucr->dev_mutex);
2432    
2433     - if (rtsx_usb_card_exclusive_check(ucr, RTSX_USB_SD_CARD)) {
2434     - mutex_unlock(&ucr->dev_mutex);
2435     - return;
2436     - }
2437     -
2438     sd_set_power_mode(host, ios->power_mode);
2439     sd_set_bus_width(host, ios->bus_width);
2440     sd_set_timing(host, ios->timing, &host->ddr_mode);
2441     @@ -1314,6 +1309,7 @@ static void rtsx_usb_update_led(struct work_struct *work)
2442     container_of(work, struct rtsx_usb_sdmmc, led_work);
2443     struct rtsx_ucr *ucr = host->ucr;
2444    
2445     + pm_runtime_get_sync(sdmmc_dev(host));
2446     mutex_lock(&ucr->dev_mutex);
2447    
2448     if (host->led.brightness == LED_OFF)
2449     @@ -1322,6 +1318,7 @@ static void rtsx_usb_update_led(struct work_struct *work)
2450     rtsx_usb_turn_on_led(ucr);
2451    
2452     mutex_unlock(&ucr->dev_mutex);
2453     + pm_runtime_put(sdmmc_dev(host));
2454     }
2455     #endif
2456    
2457     diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
2458     index cd65d474afa2..a8a022a7358f 100644
2459     --- a/drivers/mmc/host/sdhci.c
2460     +++ b/drivers/mmc/host/sdhci.c
2461     @@ -687,7 +687,7 @@ static u8 sdhci_calc_timeout(struct sdhci_host *host, struct mmc_command *cmd)
2462     * host->clock is in Hz. target_timeout is in us.
2463     * Hence, us = 1000000 * cycles / Hz. Round up.
2464     */
2465     - val = 1000000 * data->timeout_clks;
2466     + val = 1000000ULL * data->timeout_clks;
2467     if (do_div(val, host->clock))
2468     target_timeout++;
2469     target_timeout += val;
2470     diff --git a/drivers/mtd/ubi/wl.c b/drivers/mtd/ubi/wl.c
2471     index f4533266d7b2..b419c7cfd014 100644
2472     --- a/drivers/mtd/ubi/wl.c
2473     +++ b/drivers/mtd/ubi/wl.c
2474     @@ -644,7 +644,7 @@ static int wear_leveling_worker(struct ubi_device *ubi, struct ubi_work *wrk,
2475     int shutdown)
2476     {
2477     int err, scrubbing = 0, torture = 0, protect = 0, erroneous = 0;
2478     - int vol_id = -1, lnum = -1;
2479     + int erase = 0, keep = 0, vol_id = -1, lnum = -1;
2480     #ifdef CONFIG_MTD_UBI_FASTMAP
2481     int anchor = wrk->anchor;
2482     #endif
2483     @@ -780,6 +780,16 @@ static int wear_leveling_worker(struct ubi_device *ubi, struct ubi_work *wrk,
2484     e1->pnum);
2485     scrubbing = 1;
2486     goto out_not_moved;
2487     + } else if (ubi->fast_attach && err == UBI_IO_BAD_HDR_EBADMSG) {
2488     + /*
2489     + * While a full scan would detect interrupted erasures
2490     + * at attach time we can face them here when attached from
2491     + * Fastmap.
2492     + */
2493     + dbg_wl("PEB %d has ECC errors, maybe from an interrupted erasure",
2494     + e1->pnum);
2495     + erase = 1;
2496     + goto out_not_moved;
2497     }
2498    
2499     ubi_err(ubi, "error %d while reading VID header from PEB %d",
2500     @@ -815,6 +825,7 @@ static int wear_leveling_worker(struct ubi_device *ubi, struct ubi_work *wrk,
2501     * Target PEB had bit-flips or write error - torture it.
2502     */
2503     torture = 1;
2504     + keep = 1;
2505     goto out_not_moved;
2506     }
2507    
2508     @@ -901,7 +912,7 @@ out_not_moved:
2509     ubi->erroneous_peb_count += 1;
2510     } else if (scrubbing)
2511     wl_tree_add(e1, &ubi->scrub);
2512     - else
2513     + else if (keep)
2514     wl_tree_add(e1, &ubi->used);
2515     if (dst_leb_clean) {
2516     wl_tree_add(e2, &ubi->free);
2517     @@ -922,6 +933,12 @@ out_not_moved:
2518     goto out_ro;
2519     }
2520    
2521     + if (erase) {
2522     + err = do_sync_erase(ubi, e1, vol_id, lnum, 1);
2523     + if (err)
2524     + goto out_ro;
2525     + }
2526     +
2527     mutex_unlock(&ubi->move_mutex);
2528     return 0;
2529    
2530     diff --git a/drivers/net/wireless/ath/ath10k/ce.c b/drivers/net/wireless/ath/ath10k/ce.c
2531     index 9fb8d7472d18..da9998ea9271 100644
2532     --- a/drivers/net/wireless/ath/ath10k/ce.c
2533     +++ b/drivers/net/wireless/ath/ath10k/ce.c
2534     @@ -433,6 +433,13 @@ void ath10k_ce_rx_update_write_idx(struct ath10k_ce_pipe *pipe, u32 nentries)
2535     unsigned int nentries_mask = dest_ring->nentries_mask;
2536     unsigned int write_index = dest_ring->write_index;
2537     u32 ctrl_addr = pipe->ctrl_addr;
2538     + u32 cur_write_idx = ath10k_ce_dest_ring_write_index_get(ar, ctrl_addr);
2539     +
2540     + /* Prevent CE ring stuck issue that will occur when ring is full.
2541     + * Make sure that write index is 1 less than read index.
2542     + */
2543     + if ((cur_write_idx + nentries) == dest_ring->sw_index)
2544     + nentries -= 1;
2545    
2546     write_index = CE_RING_IDX_ADD(nentries_mask, write_index, nentries);
2547     ath10k_ce_dest_ring_write_index_set(ar, ctrl_addr, write_index);
2548     diff --git a/drivers/net/wireless/realtek/rtlwifi/regd.c b/drivers/net/wireless/realtek/rtlwifi/regd.c
2549     index 3524441fd516..6ee6bf8e7eaf 100644
2550     --- a/drivers/net/wireless/realtek/rtlwifi/regd.c
2551     +++ b/drivers/net/wireless/realtek/rtlwifi/regd.c
2552     @@ -345,9 +345,9 @@ static const struct ieee80211_regdomain *_rtl_regdomain_select(
2553     return &rtl_regdom_no_midband;
2554     case COUNTRY_CODE_IC:
2555     return &rtl_regdom_11;
2556     - case COUNTRY_CODE_ETSI:
2557     case COUNTRY_CODE_TELEC_NETGEAR:
2558     return &rtl_regdom_60_64;
2559     + case COUNTRY_CODE_ETSI:
2560     case COUNTRY_CODE_SPAIN:
2561     case COUNTRY_CODE_FRANCE:
2562     case COUNTRY_CODE_ISRAEL:
2563     @@ -406,6 +406,8 @@ static u8 channel_plan_to_country_code(u8 channelplan)
2564     return COUNTRY_CODE_WORLD_WIDE_13;
2565     case 0x22:
2566     return COUNTRY_CODE_IC;
2567     + case 0x25:
2568     + return COUNTRY_CODE_ETSI;
2569     case 0x32:
2570     return COUNTRY_CODE_TELEC_NETGEAR;
2571     case 0x41:
2572     diff --git a/drivers/pci/host/pci-tegra.c b/drivers/pci/host/pci-tegra.c
2573     index 6de0757b11e4..84d650d892e7 100644
2574     --- a/drivers/pci/host/pci-tegra.c
2575     +++ b/drivers/pci/host/pci-tegra.c
2576     @@ -856,7 +856,7 @@ static int tegra_pcie_phy_disable(struct tegra_pcie *pcie)
2577     /* override IDDQ */
2578     value = pads_readl(pcie, PADS_CTL);
2579     value |= PADS_CTL_IDDQ_1L;
2580     - pads_writel(pcie, PADS_CTL, value);
2581     + pads_writel(pcie, value, PADS_CTL);
2582    
2583     /* reset PLL */
2584     value = pads_readl(pcie, soc->pads_pll_ctl);
2585     diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
2586     index 44e0ff37480b..4bf1a88d7ba7 100644
2587     --- a/drivers/pci/quirks.c
2588     +++ b/drivers/pci/quirks.c
2589     @@ -3198,6 +3198,7 @@ static void quirk_no_bus_reset(struct pci_dev *dev)
2590     DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATHEROS, 0x0030, quirk_no_bus_reset);
2591     DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATHEROS, 0x0032, quirk_no_bus_reset);
2592     DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATHEROS, 0x003c, quirk_no_bus_reset);
2593     +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATHEROS, 0x0033, quirk_no_bus_reset);
2594    
2595     static void quirk_no_pm_reset(struct pci_dev *dev)
2596     {
2597     diff --git a/drivers/pinctrl/intel/pinctrl-baytrail.c b/drivers/pinctrl/intel/pinctrl-baytrail.c
2598     index d22a9fe2e6df..71bbeb9321ba 100644
2599     --- a/drivers/pinctrl/intel/pinctrl-baytrail.c
2600     +++ b/drivers/pinctrl/intel/pinctrl-baytrail.c
2601     @@ -1808,6 +1808,8 @@ static int byt_pinctrl_probe(struct platform_device *pdev)
2602     return PTR_ERR(vg->pctl_dev);
2603     }
2604    
2605     + raw_spin_lock_init(&vg->lock);
2606     +
2607     ret = byt_gpio_probe(vg);
2608     if (ret) {
2609     pinctrl_unregister(vg->pctl_dev);
2610     @@ -1815,7 +1817,6 @@ static int byt_pinctrl_probe(struct platform_device *pdev)
2611     }
2612    
2613     platform_set_drvdata(pdev, vg);
2614     - raw_spin_lock_init(&vg->lock);
2615     pm_runtime_enable(&pdev->dev);
2616    
2617     return 0;
2618     diff --git a/drivers/pinctrl/intel/pinctrl-intel.c b/drivers/pinctrl/intel/pinctrl-intel.c
2619     index 257cab129692..2b5b20bf7d99 100644
2620     --- a/drivers/pinctrl/intel/pinctrl-intel.c
2621     +++ b/drivers/pinctrl/intel/pinctrl-intel.c
2622     @@ -19,6 +19,7 @@
2623     #include <linux/pinctrl/pinconf.h>
2624     #include <linux/pinctrl/pinconf-generic.h>
2625    
2626     +#include "../core.h"
2627     #include "pinctrl-intel.h"
2628    
2629     /* Offset from regs */
2630     @@ -1079,6 +1080,26 @@ int intel_pinctrl_remove(struct platform_device *pdev)
2631     EXPORT_SYMBOL_GPL(intel_pinctrl_remove);
2632    
2633     #ifdef CONFIG_PM_SLEEP
2634     +static bool intel_pinctrl_should_save(struct intel_pinctrl *pctrl, unsigned pin)
2635     +{
2636     + const struct pin_desc *pd = pin_desc_get(pctrl->pctldev, pin);
2637     +
2638     + if (!pd || !intel_pad_usable(pctrl, pin))
2639     + return false;
2640     +
2641     + /*
2642     + * Only restore the pin if it is actually in use by the kernel (or
2643     + * by userspace). It is possible that some pins are used by the
2644     + * BIOS during resume and those are not always locked down so leave
2645     + * them alone.
2646     + */
2647     + if (pd->mux_owner || pd->gpio_owner ||
2648     + gpiochip_line_is_irq(&pctrl->chip, pin))
2649     + return true;
2650     +
2651     + return false;
2652     +}
2653     +
2654     int intel_pinctrl_suspend(struct device *dev)
2655     {
2656     struct platform_device *pdev = to_platform_device(dev);
2657     @@ -1092,7 +1113,7 @@ int intel_pinctrl_suspend(struct device *dev)
2658     const struct pinctrl_pin_desc *desc = &pctrl->soc->pins[i];
2659     u32 val;
2660    
2661     - if (!intel_pad_usable(pctrl, desc->number))
2662     + if (!intel_pinctrl_should_save(pctrl, desc->number))
2663     continue;
2664    
2665     val = readl(intel_get_padcfg(pctrl, desc->number, PADCFG0));
2666     @@ -1153,7 +1174,7 @@ int intel_pinctrl_resume(struct device *dev)
2667     void __iomem *padcfg;
2668     u32 val;
2669    
2670     - if (!intel_pad_usable(pctrl, desc->number))
2671     + if (!intel_pinctrl_should_save(pctrl, desc->number))
2672     continue;
2673    
2674     padcfg = intel_get_padcfg(pctrl, desc->number, PADCFG0);
2675     diff --git a/drivers/regulator/tps65910-regulator.c b/drivers/regulator/tps65910-regulator.c
2676     index fb991ec76423..696116ebdf50 100644
2677     --- a/drivers/regulator/tps65910-regulator.c
2678     +++ b/drivers/regulator/tps65910-regulator.c
2679     @@ -1111,6 +1111,12 @@ static int tps65910_probe(struct platform_device *pdev)
2680     pmic->num_regulators = ARRAY_SIZE(tps65910_regs);
2681     pmic->ext_sleep_control = tps65910_ext_sleep_control;
2682     info = tps65910_regs;
2683     + /* Work around silicon erratum SWCZ010: output programmed
2684     + * voltage level can go higher than expected or crash
2685     + * Workaround: use no synchronization of DCDC clocks
2686     + */
2687     + tps65910_reg_clear_bits(pmic->mfd, TPS65910_DCDCCTRL,
2688     + DCDCCTRL_DCDCCKSYNC_MASK);
2689     break;
2690     case TPS65911:
2691     pmic->get_ctrl_reg = &tps65911_get_ctrl_register;
2692     diff --git a/drivers/s390/scsi/zfcp_dbf.c b/drivers/s390/scsi/zfcp_dbf.c
2693     index 5d7fbe4e907e..581001989937 100644
2694     --- a/drivers/s390/scsi/zfcp_dbf.c
2695     +++ b/drivers/s390/scsi/zfcp_dbf.c
2696     @@ -3,7 +3,7 @@
2697     *
2698     * Debug traces for zfcp.
2699     *
2700     - * Copyright IBM Corp. 2002, 2013
2701     + * Copyright IBM Corp. 2002, 2016
2702     */
2703    
2704     #define KMSG_COMPONENT "zfcp"
2705     @@ -65,7 +65,7 @@ void zfcp_dbf_pl_write(struct zfcp_dbf *dbf, void *data, u16 length, char *area,
2706     * @tag: tag indicating which kind of unsolicited status has been received
2707     * @req: request for which a response was received
2708     */
2709     -void zfcp_dbf_hba_fsf_res(char *tag, struct zfcp_fsf_req *req)
2710     +void zfcp_dbf_hba_fsf_res(char *tag, int level, struct zfcp_fsf_req *req)
2711     {
2712     struct zfcp_dbf *dbf = req->adapter->dbf;
2713     struct fsf_qtcb_prefix *q_pref = &req->qtcb->prefix;
2714     @@ -85,6 +85,8 @@ void zfcp_dbf_hba_fsf_res(char *tag, struct zfcp_fsf_req *req)
2715     rec->u.res.req_issued = req->issued;
2716     rec->u.res.prot_status = q_pref->prot_status;
2717     rec->u.res.fsf_status = q_head->fsf_status;
2718     + rec->u.res.port_handle = q_head->port_handle;
2719     + rec->u.res.lun_handle = q_head->lun_handle;
2720    
2721     memcpy(rec->u.res.prot_status_qual, &q_pref->prot_status_qual,
2722     FSF_PROT_STATUS_QUAL_SIZE);
2723     @@ -97,7 +99,7 @@ void zfcp_dbf_hba_fsf_res(char *tag, struct zfcp_fsf_req *req)
2724     rec->pl_len, "fsf_res", req->req_id);
2725     }
2726    
2727     - debug_event(dbf->hba, 1, rec, sizeof(*rec));
2728     + debug_event(dbf->hba, level, rec, sizeof(*rec));
2729     spin_unlock_irqrestore(&dbf->hba_lock, flags);
2730     }
2731    
2732     @@ -241,7 +243,8 @@ static void zfcp_dbf_set_common(struct zfcp_dbf_rec *rec,
2733     if (sdev) {
2734     rec->lun_status = atomic_read(&sdev_to_zfcp(sdev)->status);
2735     rec->lun = zfcp_scsi_dev_lun(sdev);
2736     - }
2737     + } else
2738     + rec->lun = ZFCP_DBF_INVALID_LUN;
2739     }
2740    
2741     /**
2742     @@ -320,13 +323,48 @@ void zfcp_dbf_rec_run(char *tag, struct zfcp_erp_action *erp)
2743     spin_unlock_irqrestore(&dbf->rec_lock, flags);
2744     }
2745    
2746     +/**
2747     + * zfcp_dbf_rec_run_wka - trace wka port event with info like running recovery
2748     + * @tag: identifier for event
2749     + * @wka_port: well known address port
2750     + * @req_id: request ID to correlate with potential HBA trace record
2751     + */
2752     +void zfcp_dbf_rec_run_wka(char *tag, struct zfcp_fc_wka_port *wka_port,
2753     + u64 req_id)
2754     +{
2755     + struct zfcp_dbf *dbf = wka_port->adapter->dbf;
2756     + struct zfcp_dbf_rec *rec = &dbf->rec_buf;
2757     + unsigned long flags;
2758     +
2759     + spin_lock_irqsave(&dbf->rec_lock, flags);
2760     + memset(rec, 0, sizeof(*rec));
2761     +
2762     + rec->id = ZFCP_DBF_REC_RUN;
2763     + memcpy(rec->tag, tag, ZFCP_DBF_TAG_LEN);
2764     + rec->port_status = wka_port->status;
2765     + rec->d_id = wka_port->d_id;
2766     + rec->lun = ZFCP_DBF_INVALID_LUN;
2767     +
2768     + rec->u.run.fsf_req_id = req_id;
2769     + rec->u.run.rec_status = ~0;
2770     + rec->u.run.rec_step = ~0;
2771     + rec->u.run.rec_action = ~0;
2772     + rec->u.run.rec_count = ~0;
2773     +
2774     + debug_event(dbf->rec, 1, rec, sizeof(*rec));
2775     + spin_unlock_irqrestore(&dbf->rec_lock, flags);
2776     +}
2777     +
2778     static inline
2779     -void zfcp_dbf_san(char *tag, struct zfcp_dbf *dbf, void *data, u8 id, u16 len,
2780     - u64 req_id, u32 d_id)
2781     +void zfcp_dbf_san(char *tag, struct zfcp_dbf *dbf,
2782     + char *paytag, struct scatterlist *sg, u8 id, u16 len,
2783     + u64 req_id, u32 d_id, u16 cap_len)
2784     {
2785     struct zfcp_dbf_san *rec = &dbf->san_buf;
2786     u16 rec_len;
2787     unsigned long flags;
2788     + struct zfcp_dbf_pay *payload = &dbf->pay_buf;
2789     + u16 pay_sum = 0;
2790    
2791     spin_lock_irqsave(&dbf->san_lock, flags);
2792     memset(rec, 0, sizeof(*rec));
2793     @@ -334,10 +372,41 @@ void zfcp_dbf_san(char *tag, struct zfcp_dbf *dbf, void *data, u8 id, u16 len,
2794     rec->id = id;
2795     rec->fsf_req_id = req_id;
2796     rec->d_id = d_id;
2797     - rec_len = min(len, (u16)ZFCP_DBF_SAN_MAX_PAYLOAD);
2798     - memcpy(rec->payload, data, rec_len);
2799     memcpy(rec->tag, tag, ZFCP_DBF_TAG_LEN);
2800     + rec->pl_len = len; /* full length even if we cap pay below */
2801     + if (!sg)
2802     + goto out;
2803     + rec_len = min_t(unsigned int, sg->length, ZFCP_DBF_SAN_MAX_PAYLOAD);
2804     + memcpy(rec->payload, sg_virt(sg), rec_len); /* part of 1st sg entry */
2805     + if (len <= rec_len)
2806     + goto out; /* skip pay record if full content in rec->payload */
2807     +
2808     + /* if (len > rec_len):
2809     + * dump data up to cap_len ignoring small duplicate in rec->payload
2810     + */
2811     + spin_lock(&dbf->pay_lock);
2812     + memset(payload, 0, sizeof(*payload));
2813     + memcpy(payload->area, paytag, ZFCP_DBF_TAG_LEN);
2814     + payload->fsf_req_id = req_id;
2815     + payload->counter = 0;
2816     + for (; sg && pay_sum < cap_len; sg = sg_next(sg)) {
2817     + u16 pay_len, offset = 0;
2818     +
2819     + while (offset < sg->length && pay_sum < cap_len) {
2820     + pay_len = min((u16)ZFCP_DBF_PAY_MAX_REC,
2821     + (u16)(sg->length - offset));
2822     + /* cap_len <= pay_sum < cap_len+ZFCP_DBF_PAY_MAX_REC */
2823     + memcpy(payload->data, sg_virt(sg) + offset, pay_len);
2824     + debug_event(dbf->pay, 1, payload,
2825     + zfcp_dbf_plen(pay_len));
2826     + payload->counter++;
2827     + offset += pay_len;
2828     + pay_sum += pay_len;
2829     + }
2830     + }
2831     + spin_unlock(&dbf->pay_lock);
2832    
2833     +out:
2834     debug_event(dbf->san, 1, rec, sizeof(*rec));
2835     spin_unlock_irqrestore(&dbf->san_lock, flags);
2836     }
2837     @@ -354,9 +423,62 @@ void zfcp_dbf_san_req(char *tag, struct zfcp_fsf_req *fsf, u32 d_id)
2838     struct zfcp_fsf_ct_els *ct_els = fsf->data;
2839     u16 length;
2840    
2841     - length = (u16)(ct_els->req->length + FC_CT_HDR_LEN);
2842     - zfcp_dbf_san(tag, dbf, sg_virt(ct_els->req), ZFCP_DBF_SAN_REQ, length,
2843     - fsf->req_id, d_id);
2844     + length = (u16)zfcp_qdio_real_bytes(ct_els->req);
2845     + zfcp_dbf_san(tag, dbf, "san_req", ct_els->req, ZFCP_DBF_SAN_REQ,
2846     + length, fsf->req_id, d_id, length);
2847     +}
2848     +
2849     +static u16 zfcp_dbf_san_res_cap_len_if_gpn_ft(char *tag,
2850     + struct zfcp_fsf_req *fsf,
2851     + u16 len)
2852     +{
2853     + struct zfcp_fsf_ct_els *ct_els = fsf->data;
2854     + struct fc_ct_hdr *reqh = sg_virt(ct_els->req);
2855     + struct fc_ns_gid_ft *reqn = (struct fc_ns_gid_ft *)(reqh + 1);
2856     + struct scatterlist *resp_entry = ct_els->resp;
2857     + struct fc_gpn_ft_resp *acc;
2858     + int max_entries, x, last = 0;
2859     +
2860     + if (!(memcmp(tag, "fsscth2", 7) == 0
2861     + && ct_els->d_id == FC_FID_DIR_SERV
2862     + && reqh->ct_rev == FC_CT_REV
2863     + && reqh->ct_in_id[0] == 0
2864     + && reqh->ct_in_id[1] == 0
2865     + && reqh->ct_in_id[2] == 0
2866     + && reqh->ct_fs_type == FC_FST_DIR
2867     + && reqh->ct_fs_subtype == FC_NS_SUBTYPE
2868     + && reqh->ct_options == 0
2869     + && reqh->_ct_resvd1 == 0
2870     + && reqh->ct_cmd == FC_NS_GPN_FT
2871     + /* reqh->ct_mr_size can vary so do not match but read below */
2872     + && reqh->_ct_resvd2 == 0
2873     + && reqh->ct_reason == 0
2874     + && reqh->ct_explan == 0
2875     + && reqh->ct_vendor == 0
2876     + && reqn->fn_resvd == 0
2877     + && reqn->fn_domain_id_scope == 0
2878     + && reqn->fn_area_id_scope == 0
2879     + && reqn->fn_fc4_type == FC_TYPE_FCP))
2880     + return len; /* not GPN_FT response so do not cap */
2881     +
2882     + acc = sg_virt(resp_entry);
2883     + max_entries = (reqh->ct_mr_size * 4 / sizeof(struct fc_gpn_ft_resp))
2884     + + 1 /* zfcp_fc_scan_ports: bytes correct, entries off-by-one
2885     + * to account for header as 1st pseudo "entry" */;
2886     +
2887     + /* the basic CT_IU preamble is the same size as one entry in the GPN_FT
2888     + * response, allowing us to skip special handling for it - just skip it
2889     + */
2890     + for (x = 1; x < max_entries && !last; x++) {
2891     + if (x % (ZFCP_FC_GPN_FT_ENT_PAGE + 1))
2892     + acc++;
2893     + else
2894     + acc = sg_virt(++resp_entry);
2895     +
2896     + last = acc->fp_flags & FC_NS_FID_LAST;
2897     + }
2898     + len = min(len, (u16)(x * sizeof(struct fc_gpn_ft_resp)));
2899     + return len; /* cap after last entry */
2900     }
2901    
2902     /**
2903     @@ -370,9 +492,10 @@ void zfcp_dbf_san_res(char *tag, struct zfcp_fsf_req *fsf)
2904     struct zfcp_fsf_ct_els *ct_els = fsf->data;
2905     u16 length;
2906    
2907     - length = (u16)(ct_els->resp->length + FC_CT_HDR_LEN);
2908     - zfcp_dbf_san(tag, dbf, sg_virt(ct_els->resp), ZFCP_DBF_SAN_RES, length,
2909     - fsf->req_id, 0);
2910     + length = (u16)zfcp_qdio_real_bytes(ct_els->resp);
2911     + zfcp_dbf_san(tag, dbf, "san_res", ct_els->resp, ZFCP_DBF_SAN_RES,
2912     + length, fsf->req_id, ct_els->d_id,
2913     + zfcp_dbf_san_res_cap_len_if_gpn_ft(tag, fsf, length));
2914     }
2915    
2916     /**
2917     @@ -386,11 +509,13 @@ void zfcp_dbf_san_in_els(char *tag, struct zfcp_fsf_req *fsf)
2918     struct fsf_status_read_buffer *srb =
2919     (struct fsf_status_read_buffer *) fsf->data;
2920     u16 length;
2921     + struct scatterlist sg;
2922    
2923     length = (u16)(srb->length -
2924     offsetof(struct fsf_status_read_buffer, payload));
2925     - zfcp_dbf_san(tag, dbf, srb->payload.data, ZFCP_DBF_SAN_ELS, length,
2926     - fsf->req_id, ntoh24(srb->d_id));
2927     + sg_init_one(&sg, srb->payload.data, length);
2928     + zfcp_dbf_san(tag, dbf, "san_els", &sg, ZFCP_DBF_SAN_ELS, length,
2929     + fsf->req_id, ntoh24(srb->d_id), length);
2930     }
2931    
2932     /**
2933     @@ -399,7 +524,8 @@ void zfcp_dbf_san_in_els(char *tag, struct zfcp_fsf_req *fsf)
2934     * @sc: pointer to struct scsi_cmnd
2935     * @fsf: pointer to struct zfcp_fsf_req
2936     */
2937     -void zfcp_dbf_scsi(char *tag, struct scsi_cmnd *sc, struct zfcp_fsf_req *fsf)
2938     +void zfcp_dbf_scsi(char *tag, int level, struct scsi_cmnd *sc,
2939     + struct zfcp_fsf_req *fsf)
2940     {
2941     struct zfcp_adapter *adapter =
2942     (struct zfcp_adapter *) sc->device->host->hostdata[0];
2943     @@ -442,7 +568,7 @@ void zfcp_dbf_scsi(char *tag, struct scsi_cmnd *sc, struct zfcp_fsf_req *fsf)
2944     }
2945     }
2946    
2947     - debug_event(dbf->scsi, 1, rec, sizeof(*rec));
2948     + debug_event(dbf->scsi, level, rec, sizeof(*rec));
2949     spin_unlock_irqrestore(&dbf->scsi_lock, flags);
2950     }
2951    
2952     diff --git a/drivers/s390/scsi/zfcp_dbf.h b/drivers/s390/scsi/zfcp_dbf.h
2953     index 0be3d48681ae..36d07584271d 100644
2954     --- a/drivers/s390/scsi/zfcp_dbf.h
2955     +++ b/drivers/s390/scsi/zfcp_dbf.h
2956     @@ -2,7 +2,7 @@
2957     * zfcp device driver
2958     * debug feature declarations
2959     *
2960     - * Copyright IBM Corp. 2008, 2010
2961     + * Copyright IBM Corp. 2008, 2015
2962     */
2963    
2964     #ifndef ZFCP_DBF_H
2965     @@ -17,6 +17,11 @@
2966    
2967     #define ZFCP_DBF_INVALID_LUN 0xFFFFFFFFFFFFFFFFull
2968    
2969     +enum zfcp_dbf_pseudo_erp_act_type {
2970     + ZFCP_PSEUDO_ERP_ACTION_RPORT_ADD = 0xff,
2971     + ZFCP_PSEUDO_ERP_ACTION_RPORT_DEL = 0xfe,
2972     +};
2973     +
2974     /**
2975     * struct zfcp_dbf_rec_trigger - trace record for triggered recovery action
2976     * @ready: number of ready recovery actions
2977     @@ -110,6 +115,7 @@ struct zfcp_dbf_san {
2978     u32 d_id;
2979     #define ZFCP_DBF_SAN_MAX_PAYLOAD (FC_CT_HDR_LEN + 32)
2980     char payload[ZFCP_DBF_SAN_MAX_PAYLOAD];
2981     + u16 pl_len;
2982     } __packed;
2983    
2984     /**
2985     @@ -126,6 +132,8 @@ struct zfcp_dbf_hba_res {
2986     u8 prot_status_qual[FSF_PROT_STATUS_QUAL_SIZE];
2987     u32 fsf_status;
2988     u8 fsf_status_qual[FSF_STATUS_QUALIFIER_SIZE];
2989     + u32 port_handle;
2990     + u32 lun_handle;
2991     } __packed;
2992    
2993     /**
2994     @@ -279,7 +287,7 @@ static inline
2995     void zfcp_dbf_hba_fsf_resp(char *tag, int level, struct zfcp_fsf_req *req)
2996     {
2997     if (debug_level_enabled(req->adapter->dbf->hba, level))
2998     - zfcp_dbf_hba_fsf_res(tag, req);
2999     + zfcp_dbf_hba_fsf_res(tag, level, req);
3000     }
3001    
3002     /**
3003     @@ -318,7 +326,7 @@ void _zfcp_dbf_scsi(char *tag, int level, struct scsi_cmnd *scmd,
3004     scmd->device->host->hostdata[0];
3005    
3006     if (debug_level_enabled(adapter->dbf->scsi, level))
3007     - zfcp_dbf_scsi(tag, scmd, req);
3008     + zfcp_dbf_scsi(tag, level, scmd, req);
3009     }
3010    
3011     /**
3012     diff --git a/drivers/s390/scsi/zfcp_erp.c b/drivers/s390/scsi/zfcp_erp.c
3013     index 3fb410977014..a59d678125bd 100644
3014     --- a/drivers/s390/scsi/zfcp_erp.c
3015     +++ b/drivers/s390/scsi/zfcp_erp.c
3016     @@ -3,7 +3,7 @@
3017     *
3018     * Error Recovery Procedures (ERP).
3019     *
3020     - * Copyright IBM Corp. 2002, 2010
3021     + * Copyright IBM Corp. 2002, 2015
3022     */
3023    
3024     #define KMSG_COMPONENT "zfcp"
3025     @@ -1217,8 +1217,14 @@ static void zfcp_erp_action_cleanup(struct zfcp_erp_action *act, int result)
3026     break;
3027    
3028     case ZFCP_ERP_ACTION_REOPEN_PORT:
3029     - if (result == ZFCP_ERP_SUCCEEDED)
3030     - zfcp_scsi_schedule_rport_register(port);
3031     + /* This switch case might also happen after a forced reopen
3032     + * was successfully done and thus overwritten with a new
3033     + * non-forced reopen at `ersfs_2'. In this case, we must not
3034     + * do the clean-up of the non-forced version.
3035     + */
3036     + if (act->step != ZFCP_ERP_STEP_UNINITIALIZED)
3037     + if (result == ZFCP_ERP_SUCCEEDED)
3038     + zfcp_scsi_schedule_rport_register(port);
3039     /* fall through */
3040     case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED:
3041     put_device(&port->dev);
3042     diff --git a/drivers/s390/scsi/zfcp_ext.h b/drivers/s390/scsi/zfcp_ext.h
3043     index 5b500652572b..c8fed9fa1cca 100644
3044     --- a/drivers/s390/scsi/zfcp_ext.h
3045     +++ b/drivers/s390/scsi/zfcp_ext.h
3046     @@ -3,7 +3,7 @@
3047     *
3048     * External function declarations.
3049     *
3050     - * Copyright IBM Corp. 2002, 2010
3051     + * Copyright IBM Corp. 2002, 2015
3052     */
3053    
3054     #ifndef ZFCP_EXT_H
3055     @@ -35,8 +35,9 @@ extern void zfcp_dbf_adapter_unregister(struct zfcp_adapter *);
3056     extern void zfcp_dbf_rec_trig(char *, struct zfcp_adapter *,
3057     struct zfcp_port *, struct scsi_device *, u8, u8);
3058     extern void zfcp_dbf_rec_run(char *, struct zfcp_erp_action *);
3059     +extern void zfcp_dbf_rec_run_wka(char *, struct zfcp_fc_wka_port *, u64);
3060     extern void zfcp_dbf_hba_fsf_uss(char *, struct zfcp_fsf_req *);
3061     -extern void zfcp_dbf_hba_fsf_res(char *, struct zfcp_fsf_req *);
3062     +extern void zfcp_dbf_hba_fsf_res(char *, int, struct zfcp_fsf_req *);
3063     extern void zfcp_dbf_hba_bit_err(char *, struct zfcp_fsf_req *);
3064     extern void zfcp_dbf_hba_berr(struct zfcp_dbf *, struct zfcp_fsf_req *);
3065     extern void zfcp_dbf_hba_def_err(struct zfcp_adapter *, u64, u16, void **);
3066     @@ -44,7 +45,8 @@ extern void zfcp_dbf_hba_basic(char *, struct zfcp_adapter *);
3067     extern void zfcp_dbf_san_req(char *, struct zfcp_fsf_req *, u32);
3068     extern void zfcp_dbf_san_res(char *, struct zfcp_fsf_req *);
3069     extern void zfcp_dbf_san_in_els(char *, struct zfcp_fsf_req *);
3070     -extern void zfcp_dbf_scsi(char *, struct scsi_cmnd *, struct zfcp_fsf_req *);
3071     +extern void zfcp_dbf_scsi(char *, int, struct scsi_cmnd *,
3072     + struct zfcp_fsf_req *);
3073    
3074     /* zfcp_erp.c */
3075     extern void zfcp_erp_set_adapter_status(struct zfcp_adapter *, u32);
3076     diff --git a/drivers/s390/scsi/zfcp_fsf.c b/drivers/s390/scsi/zfcp_fsf.c
3077     index 522a633c866a..75f820ca17b7 100644
3078     --- a/drivers/s390/scsi/zfcp_fsf.c
3079     +++ b/drivers/s390/scsi/zfcp_fsf.c
3080     @@ -3,7 +3,7 @@
3081     *
3082     * Implementation of FSF commands.
3083     *
3084     - * Copyright IBM Corp. 2002, 2013
3085     + * Copyright IBM Corp. 2002, 2015
3086     */
3087    
3088     #define KMSG_COMPONENT "zfcp"
3089     @@ -508,7 +508,10 @@ static int zfcp_fsf_exchange_config_evaluate(struct zfcp_fsf_req *req)
3090     fc_host_port_type(shost) = FC_PORTTYPE_PTP;
3091     break;
3092     case FSF_TOPO_FABRIC:
3093     - fc_host_port_type(shost) = FC_PORTTYPE_NPORT;
3094     + if (bottom->connection_features & FSF_FEATURE_NPIV_MODE)
3095     + fc_host_port_type(shost) = FC_PORTTYPE_NPIV;
3096     + else
3097     + fc_host_port_type(shost) = FC_PORTTYPE_NPORT;
3098     break;
3099     case FSF_TOPO_AL:
3100     fc_host_port_type(shost) = FC_PORTTYPE_NLPORT;
3101     @@ -613,7 +616,6 @@ static void zfcp_fsf_exchange_port_evaluate(struct zfcp_fsf_req *req)
3102    
3103     if (adapter->connection_features & FSF_FEATURE_NPIV_MODE) {
3104     fc_host_permanent_port_name(shost) = bottom->wwpn;
3105     - fc_host_port_type(shost) = FC_PORTTYPE_NPIV;
3106     } else
3107     fc_host_permanent_port_name(shost) = fc_host_port_name(shost);
3108     fc_host_maxframe_size(shost) = bottom->maximum_frame_size;
3109     @@ -982,8 +984,12 @@ static int zfcp_fsf_setup_ct_els_sbals(struct zfcp_fsf_req *req,
3110     if (zfcp_adapter_multi_buffer_active(adapter)) {
3111     if (zfcp_qdio_sbals_from_sg(qdio, &req->qdio_req, sg_req))
3112     return -EIO;
3113     + qtcb->bottom.support.req_buf_length =
3114     + zfcp_qdio_real_bytes(sg_req);
3115     if (zfcp_qdio_sbals_from_sg(qdio, &req->qdio_req, sg_resp))
3116     return -EIO;
3117     + qtcb->bottom.support.resp_buf_length =
3118     + zfcp_qdio_real_bytes(sg_resp);
3119    
3120     zfcp_qdio_set_data_div(qdio, &req->qdio_req,
3121     zfcp_qdio_sbale_count(sg_req));
3122     @@ -1073,6 +1079,7 @@ int zfcp_fsf_send_ct(struct zfcp_fc_wka_port *wka_port,
3123    
3124     req->handler = zfcp_fsf_send_ct_handler;
3125     req->qtcb->header.port_handle = wka_port->handle;
3126     + ct->d_id = wka_port->d_id;
3127     req->data = ct;
3128    
3129     zfcp_dbf_san_req("fssct_1", req, wka_port->d_id);
3130     @@ -1169,6 +1176,7 @@ int zfcp_fsf_send_els(struct zfcp_adapter *adapter, u32 d_id,
3131    
3132     hton24(req->qtcb->bottom.support.d_id, d_id);
3133     req->handler = zfcp_fsf_send_els_handler;
3134     + els->d_id = d_id;
3135     req->data = els;
3136    
3137     zfcp_dbf_san_req("fssels1", req, d_id);
3138     @@ -1575,7 +1583,7 @@ out:
3139     int zfcp_fsf_open_wka_port(struct zfcp_fc_wka_port *wka_port)
3140     {
3141     struct zfcp_qdio *qdio = wka_port->adapter->qdio;
3142     - struct zfcp_fsf_req *req;
3143     + struct zfcp_fsf_req *req = NULL;
3144     int retval = -EIO;
3145    
3146     spin_lock_irq(&qdio->req_q_lock);
3147     @@ -1604,6 +1612,8 @@ int zfcp_fsf_open_wka_port(struct zfcp_fc_wka_port *wka_port)
3148     zfcp_fsf_req_free(req);
3149     out:
3150     spin_unlock_irq(&qdio->req_q_lock);
3151     + if (req && !IS_ERR(req))
3152     + zfcp_dbf_rec_run_wka("fsowp_1", wka_port, req->req_id);
3153     return retval;
3154     }
3155    
3156     @@ -1628,7 +1638,7 @@ static void zfcp_fsf_close_wka_port_handler(struct zfcp_fsf_req *req)
3157     int zfcp_fsf_close_wka_port(struct zfcp_fc_wka_port *wka_port)
3158     {
3159     struct zfcp_qdio *qdio = wka_port->adapter->qdio;
3160     - struct zfcp_fsf_req *req;
3161     + struct zfcp_fsf_req *req = NULL;
3162     int retval = -EIO;
3163    
3164     spin_lock_irq(&qdio->req_q_lock);
3165     @@ -1657,6 +1667,8 @@ int zfcp_fsf_close_wka_port(struct zfcp_fc_wka_port *wka_port)
3166     zfcp_fsf_req_free(req);
3167     out:
3168     spin_unlock_irq(&qdio->req_q_lock);
3169     + if (req && !IS_ERR(req))
3170     + zfcp_dbf_rec_run_wka("fscwp_1", wka_port, req->req_id);
3171     return retval;
3172     }
3173    
3174     diff --git a/drivers/s390/scsi/zfcp_fsf.h b/drivers/s390/scsi/zfcp_fsf.h
3175     index 57ae3ae1046d..be1c04b334c5 100644
3176     --- a/drivers/s390/scsi/zfcp_fsf.h
3177     +++ b/drivers/s390/scsi/zfcp_fsf.h
3178     @@ -3,7 +3,7 @@
3179     *
3180     * Interface to the FSF support functions.
3181     *
3182     - * Copyright IBM Corp. 2002, 2010
3183     + * Copyright IBM Corp. 2002, 2015
3184     */
3185    
3186     #ifndef FSF_H
3187     @@ -436,6 +436,7 @@ struct zfcp_blk_drv_data {
3188     * @handler_data: data passed to handler function
3189     * @port: Optional pointer to port for zfcp internal ELS (only test link ADISC)
3190     * @status: used to pass error status to calling function
3191     + * @d_id: Destination ID of either open WKA port for CT or of D_ID for ELS
3192     */
3193     struct zfcp_fsf_ct_els {
3194     struct scatterlist *req;
3195     @@ -444,6 +445,7 @@ struct zfcp_fsf_ct_els {
3196     void *handler_data;
3197     struct zfcp_port *port;
3198     int status;
3199     + u32 d_id;
3200     };
3201    
3202     #endif /* FSF_H */
3203     diff --git a/drivers/s390/scsi/zfcp_scsi.c b/drivers/s390/scsi/zfcp_scsi.c
3204     index b3c6ff49103b..9069f98a1817 100644
3205     --- a/drivers/s390/scsi/zfcp_scsi.c
3206     +++ b/drivers/s390/scsi/zfcp_scsi.c
3207     @@ -3,7 +3,7 @@
3208     *
3209     * Interface to Linux SCSI midlayer.
3210     *
3211     - * Copyright IBM Corp. 2002, 2013
3212     + * Copyright IBM Corp. 2002, 2015
3213     */
3214    
3215     #define KMSG_COMPONENT "zfcp"
3216     @@ -556,6 +556,9 @@ static void zfcp_scsi_rport_register(struct zfcp_port *port)
3217     ids.port_id = port->d_id;
3218     ids.roles = FC_RPORT_ROLE_FCP_TARGET;
3219    
3220     + zfcp_dbf_rec_trig("scpaddy", port->adapter, port, NULL,
3221     + ZFCP_PSEUDO_ERP_ACTION_RPORT_ADD,
3222     + ZFCP_PSEUDO_ERP_ACTION_RPORT_ADD);
3223     rport = fc_remote_port_add(port->adapter->scsi_host, 0, &ids);
3224     if (!rport) {
3225     dev_err(&port->adapter->ccw_device->dev,
3226     @@ -577,6 +580,9 @@ static void zfcp_scsi_rport_block(struct zfcp_port *port)
3227     struct fc_rport *rport = port->rport;
3228    
3229     if (rport) {
3230     + zfcp_dbf_rec_trig("scpdely", port->adapter, port, NULL,
3231     + ZFCP_PSEUDO_ERP_ACTION_RPORT_DEL,
3232     + ZFCP_PSEUDO_ERP_ACTION_RPORT_DEL);
3233     fc_remote_port_delete(rport);
3234     port->rport = NULL;
3235     }
3236     diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c
3237     index e0a78f53d809..bac8cdf9fb23 100644
3238     --- a/drivers/scsi/scsi_scan.c
3239     +++ b/drivers/scsi/scsi_scan.c
3240     @@ -1472,12 +1472,12 @@ retry:
3241     out_err:
3242     kfree(lun_data);
3243     out:
3244     - scsi_device_put(sdev);
3245     if (scsi_device_created(sdev))
3246     /*
3247     * the sdev we used didn't appear in the report luns scan
3248     */
3249     __scsi_remove_device(sdev);
3250     + scsi_device_put(sdev);
3251     return ret;
3252     }
3253    
3254     diff --git a/drivers/soc/fsl/qe/gpio.c b/drivers/soc/fsl/qe/gpio.c
3255     index 333eb2215a57..0aaf429f31d5 100644
3256     --- a/drivers/soc/fsl/qe/gpio.c
3257     +++ b/drivers/soc/fsl/qe/gpio.c
3258     @@ -41,7 +41,8 @@ struct qe_gpio_chip {
3259    
3260     static void qe_gpio_save_regs(struct of_mm_gpio_chip *mm_gc)
3261     {
3262     - struct qe_gpio_chip *qe_gc = gpiochip_get_data(&mm_gc->gc);
3263     + struct qe_gpio_chip *qe_gc =
3264     + container_of(mm_gc, struct qe_gpio_chip, mm_gc);
3265     struct qe_pio_regs __iomem *regs = mm_gc->regs;
3266    
3267     qe_gc->cpdata = in_be32(&regs->cpdata);
3268     diff --git a/drivers/soc/fsl/qe/qe_common.c b/drivers/soc/fsl/qe/qe_common.c
3269     index 41eff805a904..104e68d9b84f 100644
3270     --- a/drivers/soc/fsl/qe/qe_common.c
3271     +++ b/drivers/soc/fsl/qe/qe_common.c
3272     @@ -70,6 +70,11 @@ int cpm_muram_init(void)
3273     }
3274    
3275     muram_pool = gen_pool_create(0, -1);
3276     + if (!muram_pool) {
3277     + pr_err("Cannot allocate memory pool for CPM/QE muram");
3278     + ret = -ENOMEM;
3279     + goto out_muram;
3280     + }
3281     muram_pbase = of_translate_address(np, zero);
3282     if (muram_pbase == (phys_addr_t)OF_BAD_ADDR) {
3283     pr_err("Cannot translate zero through CPM muram node");
3284     @@ -116,6 +121,9 @@ static unsigned long cpm_muram_alloc_common(unsigned long size,
3285     struct muram_block *entry;
3286     unsigned long start;
3287    
3288     + if (!muram_pool && cpm_muram_init())
3289     + goto out2;
3290     +
3291     start = gen_pool_alloc_algo(muram_pool, size, algo, data);
3292     if (!start)
3293     goto out2;
3294     diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c
3295     index 6094a6beddde..e825d580ccee 100644
3296     --- a/drivers/target/target_core_transport.c
3297     +++ b/drivers/target/target_core_transport.c
3298     @@ -754,15 +754,7 @@ EXPORT_SYMBOL(target_complete_cmd);
3299    
3300     void target_complete_cmd_with_length(struct se_cmd *cmd, u8 scsi_status, int length)
3301     {
3302     - if (scsi_status != SAM_STAT_GOOD) {
3303     - return;
3304     - }
3305     -
3306     - /*
3307     - * Calculate new residual count based upon length of SCSI data
3308     - * transferred.
3309     - */
3310     - if (length < cmd->data_length) {
3311     + if (scsi_status == SAM_STAT_GOOD && length < cmd->data_length) {
3312     if (cmd->se_cmd_flags & SCF_UNDERFLOW_BIT) {
3313     cmd->residual_count += cmd->data_length - length;
3314     } else {
3315     @@ -771,12 +763,6 @@ void target_complete_cmd_with_length(struct se_cmd *cmd, u8 scsi_status, int len
3316     }
3317    
3318     cmd->data_length = length;
3319     - } else if (length > cmd->data_length) {
3320     - cmd->se_cmd_flags |= SCF_OVERFLOW_BIT;
3321     - cmd->residual_count = length - cmd->data_length;
3322     - } else {
3323     - cmd->se_cmd_flags &= ~(SCF_OVERFLOW_BIT | SCF_UNDERFLOW_BIT);
3324     - cmd->residual_count = 0;
3325     }
3326    
3327     target_complete_cmd(cmd, scsi_status);
3328     @@ -1706,6 +1692,7 @@ void transport_generic_request_failure(struct se_cmd *cmd,
3329     case TCM_LOGICAL_BLOCK_GUARD_CHECK_FAILED:
3330     case TCM_LOGICAL_BLOCK_APP_TAG_CHECK_FAILED:
3331     case TCM_LOGICAL_BLOCK_REF_TAG_CHECK_FAILED:
3332     + case TCM_COPY_TARGET_DEVICE_NOT_REACHABLE:
3333     break;
3334     case TCM_OUT_OF_RESOURCES:
3335     sense_reason = TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;
3336     @@ -2547,8 +2534,10 @@ int target_get_sess_cmd(struct se_cmd *se_cmd, bool ack_kref)
3337     * fabric acknowledgement that requires two target_put_sess_cmd()
3338     * invocations before se_cmd descriptor release.
3339     */
3340     - if (ack_kref)
3341     + if (ack_kref) {
3342     kref_get(&se_cmd->cmd_kref);
3343     + se_cmd->se_cmd_flags |= SCF_ACK_KREF;
3344     + }
3345    
3346     spin_lock_irqsave(&se_sess->sess_cmd_lock, flags);
3347     if (se_sess->sess_tearing_down) {
3348     @@ -2871,6 +2860,12 @@ static const struct sense_info sense_info_table[] = {
3349     .ascq = 0x03, /* LOGICAL BLOCK REFERENCE TAG CHECK FAILED */
3350     .add_sector_info = true,
3351     },
3352     + [TCM_COPY_TARGET_DEVICE_NOT_REACHABLE] = {
3353     + .key = COPY_ABORTED,
3354     + .asc = 0x0d,
3355     + .ascq = 0x02, /* COPY TARGET DEVICE NOT REACHABLE */
3356     +
3357     + },
3358     [TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE] = {
3359     /*
3360     * Returning ILLEGAL REQUEST would cause immediate IO errors on
3361     diff --git a/drivers/target/target_core_xcopy.c b/drivers/target/target_core_xcopy.c
3362     index 75cd85426ae3..094a1440eacb 100644
3363     --- a/drivers/target/target_core_xcopy.c
3364     +++ b/drivers/target/target_core_xcopy.c
3365     @@ -104,7 +104,7 @@ static int target_xcopy_locate_se_dev_e4(struct se_cmd *se_cmd, struct xcopy_op
3366     }
3367     mutex_unlock(&g_device_mutex);
3368    
3369     - pr_err("Unable to locate 0xe4 descriptor for EXTENDED_COPY\n");
3370     + pr_debug_ratelimited("Unable to locate 0xe4 descriptor for EXTENDED_COPY\n");
3371     return -EINVAL;
3372     }
3373    
3374     @@ -185,7 +185,7 @@ static int target_xcopy_parse_tiddesc_e4(struct se_cmd *se_cmd, struct xcopy_op
3375    
3376     static int target_xcopy_parse_target_descriptors(struct se_cmd *se_cmd,
3377     struct xcopy_op *xop, unsigned char *p,
3378     - unsigned short tdll)
3379     + unsigned short tdll, sense_reason_t *sense_ret)
3380     {
3381     struct se_device *local_dev = se_cmd->se_dev;
3382     unsigned char *desc = p;
3383     @@ -193,6 +193,8 @@ static int target_xcopy_parse_target_descriptors(struct se_cmd *se_cmd,
3384     unsigned short start = 0;
3385     bool src = true;
3386    
3387     + *sense_ret = TCM_INVALID_PARAMETER_LIST;
3388     +
3389     if (offset != 0) {
3390     pr_err("XCOPY target descriptor list length is not"
3391     " multiple of %d\n", XCOPY_TARGET_DESC_LEN);
3392     @@ -243,9 +245,16 @@ static int target_xcopy_parse_target_descriptors(struct se_cmd *se_cmd,
3393     rc = target_xcopy_locate_se_dev_e4(se_cmd, xop, true);
3394     else
3395     rc = target_xcopy_locate_se_dev_e4(se_cmd, xop, false);
3396     -
3397     - if (rc < 0)
3398     + /*
3399     + * If a matching IEEE NAA 0x83 descriptor for the requested device
3400     + * is not located on this node, return COPY_ABORTED with ASQ/ASQC
3401     + * 0x0d/0x02 - COPY_TARGET_DEVICE_NOT_REACHABLE to request the
3402     + * initiator to fall back to normal copy method.
3403     + */
3404     + if (rc < 0) {
3405     + *sense_ret = TCM_COPY_TARGET_DEVICE_NOT_REACHABLE;
3406     goto out;
3407     + }
3408    
3409     pr_debug("XCOPY TGT desc: Source dev: %p NAA IEEE WWN: 0x%16phN\n",
3410     xop->src_dev, &xop->src_tid_wwn[0]);
3411     @@ -653,6 +662,7 @@ static int target_xcopy_read_source(
3412     rc = target_xcopy_setup_pt_cmd(xpt_cmd, xop, src_dev, &cdb[0],
3413     remote_port, true);
3414     if (rc < 0) {
3415     + ec_cmd->scsi_status = xpt_cmd->se_cmd.scsi_status;
3416     transport_generic_free_cmd(se_cmd, 0);
3417     return rc;
3418     }
3419     @@ -664,6 +674,7 @@ static int target_xcopy_read_source(
3420    
3421     rc = target_xcopy_issue_pt_cmd(xpt_cmd);
3422     if (rc < 0) {
3423     + ec_cmd->scsi_status = xpt_cmd->se_cmd.scsi_status;
3424     transport_generic_free_cmd(se_cmd, 0);
3425     return rc;
3426     }
3427     @@ -714,6 +725,7 @@ static int target_xcopy_write_destination(
3428     remote_port, false);
3429     if (rc < 0) {
3430     struct se_cmd *src_cmd = &xop->src_pt_cmd->se_cmd;
3431     + ec_cmd->scsi_status = xpt_cmd->se_cmd.scsi_status;
3432     /*
3433     * If the failure happened before the t_mem_list hand-off in
3434     * target_xcopy_setup_pt_cmd(), Reset memory + clear flag so that
3435     @@ -729,6 +741,7 @@ static int target_xcopy_write_destination(
3436    
3437     rc = target_xcopy_issue_pt_cmd(xpt_cmd);
3438     if (rc < 0) {
3439     + ec_cmd->scsi_status = xpt_cmd->se_cmd.scsi_status;
3440     se_cmd->se_cmd_flags &= ~SCF_PASSTHROUGH_SG_TO_MEM_NOALLOC;
3441     transport_generic_free_cmd(se_cmd, 0);
3442     return rc;
3443     @@ -815,9 +828,14 @@ static void target_xcopy_do_work(struct work_struct *work)
3444     out:
3445     xcopy_pt_undepend_remotedev(xop);
3446     kfree(xop);
3447     -
3448     - pr_warn("target_xcopy_do_work: Setting X-COPY CHECK_CONDITION -> sending response\n");
3449     - ec_cmd->scsi_status = SAM_STAT_CHECK_CONDITION;
3450     + /*
3451     + * Don't override an error scsi status if it has already been set
3452     + */
3453     + if (ec_cmd->scsi_status == SAM_STAT_GOOD) {
3454     + pr_warn_ratelimited("target_xcopy_do_work: rc: %d, Setting X-COPY"
3455     + " CHECK_CONDITION -> sending response\n", rc);
3456     + ec_cmd->scsi_status = SAM_STAT_CHECK_CONDITION;
3457     + }
3458     target_complete_cmd(ec_cmd, SAM_STAT_CHECK_CONDITION);
3459     }
3460    
3461     @@ -875,7 +893,7 @@ sense_reason_t target_do_xcopy(struct se_cmd *se_cmd)
3462     " tdll: %hu sdll: %u inline_dl: %u\n", list_id, list_id_usage,
3463     tdll, sdll, inline_dl);
3464    
3465     - rc = target_xcopy_parse_target_descriptors(se_cmd, xop, &p[16], tdll);
3466     + rc = target_xcopy_parse_target_descriptors(se_cmd, xop, &p[16], tdll, &ret);
3467     if (rc <= 0)
3468     goto out;
3469    
3470     diff --git a/drivers/target/tcm_fc/tfc_cmd.c b/drivers/target/tcm_fc/tfc_cmd.c
3471     index 216e18cc9133..9a874a89941d 100644
3472     --- a/drivers/target/tcm_fc/tfc_cmd.c
3473     +++ b/drivers/target/tcm_fc/tfc_cmd.c
3474     @@ -572,7 +572,7 @@ static void ft_send_work(struct work_struct *work)
3475     if (target_submit_cmd(&cmd->se_cmd, cmd->sess->se_sess, fcp->fc_cdb,
3476     &cmd->ft_sense_buffer[0], scsilun_to_int(&fcp->fc_lun),
3477     ntohl(fcp->fc_dl), task_attr, data_dir,
3478     - TARGET_SCF_ACK_KREF))
3479     + TARGET_SCF_ACK_KREF | TARGET_SCF_USE_CPUID))
3480     goto err;
3481    
3482     pr_debug("r_ctl %x alloc target_submit_cmd\n", fh->fh_r_ctl);
3483     diff --git a/drivers/video/fbdev/efifb.c b/drivers/video/fbdev/efifb.c
3484     index 924bad45c176..37a37c4d04cb 100644
3485     --- a/drivers/video/fbdev/efifb.c
3486     +++ b/drivers/video/fbdev/efifb.c
3487     @@ -50,9 +50,9 @@ static int efifb_setcolreg(unsigned regno, unsigned red, unsigned green,
3488     return 1;
3489    
3490     if (regno < 16) {
3491     - red >>= 8;
3492     - green >>= 8;
3493     - blue >>= 8;
3494     + red >>= 16 - info->var.red.length;
3495     + green >>= 16 - info->var.green.length;
3496     + blue >>= 16 - info->var.blue.length;
3497     ((u32 *)(info->pseudo_palette))[regno] =
3498     (red << info->var.red.offset) |
3499     (green << info->var.green.offset) |
3500     diff --git a/drivers/watchdog/mt7621_wdt.c b/drivers/watchdog/mt7621_wdt.c
3501     index 4a2290f900a8..d5735c12067d 100644
3502     --- a/drivers/watchdog/mt7621_wdt.c
3503     +++ b/drivers/watchdog/mt7621_wdt.c
3504     @@ -139,7 +139,6 @@ static int mt7621_wdt_probe(struct platform_device *pdev)
3505     if (!IS_ERR(mt7621_wdt_reset))
3506     reset_control_deassert(mt7621_wdt_reset);
3507    
3508     - mt7621_wdt_dev.dev = &pdev->dev;
3509     mt7621_wdt_dev.bootstatus = mt7621_wdt_bootcause();
3510    
3511     watchdog_init_timeout(&mt7621_wdt_dev, mt7621_wdt_dev.max_timeout,
3512     diff --git a/drivers/watchdog/rt2880_wdt.c b/drivers/watchdog/rt2880_wdt.c
3513     index 1967919ae743..14b4fd428fff 100644
3514     --- a/drivers/watchdog/rt2880_wdt.c
3515     +++ b/drivers/watchdog/rt2880_wdt.c
3516     @@ -158,7 +158,6 @@ static int rt288x_wdt_probe(struct platform_device *pdev)
3517    
3518     rt288x_wdt_freq = clk_get_rate(rt288x_wdt_clk) / RALINK_WDT_PRESCALE;
3519    
3520     - rt288x_wdt_dev.dev = &pdev->dev;
3521     rt288x_wdt_dev.bootstatus = rt288x_wdt_bootcause();
3522     rt288x_wdt_dev.max_timeout = (0xfffful / rt288x_wdt_freq);
3523     rt288x_wdt_dev.parent = &pdev->dev;
3524     diff --git a/fs/ceph/file.c b/fs/ceph/file.c
3525     index 0f5375d8e030..eede975e85c0 100644
3526     --- a/fs/ceph/file.c
3527     +++ b/fs/ceph/file.c
3528     @@ -1272,7 +1272,8 @@ again:
3529     statret = __ceph_do_getattr(inode, page,
3530     CEPH_STAT_CAP_INLINE_DATA, !!page);
3531     if (statret < 0) {
3532     - __free_page(page);
3533     + if (page)
3534     + __free_page(page);
3535     if (statret == -ENODATA) {
3536     BUG_ON(retry_op != READ_INLINE);
3537     goto again;
3538     diff --git a/fs/cifs/cifs_debug.c b/fs/cifs/cifs_debug.c
3539     index 6c58e13fed2f..3d03e48a9213 100644
3540     --- a/fs/cifs/cifs_debug.c
3541     +++ b/fs/cifs/cifs_debug.c
3542     @@ -152,6 +152,7 @@ static int cifs_debug_data_proc_show(struct seq_file *m, void *v)
3543     list_for_each(tmp1, &cifs_tcp_ses_list) {
3544     server = list_entry(tmp1, struct TCP_Server_Info,
3545     tcp_ses_list);
3546     + seq_printf(m, "\nNumber of credits: %d", server->credits);
3547     i++;
3548     list_for_each(tmp2, &server->smb_ses_list) {
3549     ses = list_entry(tmp2, struct cifs_ses,
3550     diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c
3551     index 14ae4b8e1a3c..8c68d03a6949 100644
3552     --- a/fs/cifs/cifsfs.c
3553     +++ b/fs/cifs/cifsfs.c
3554     @@ -271,7 +271,7 @@ cifs_alloc_inode(struct super_block *sb)
3555     cifs_inode->createtime = 0;
3556     cifs_inode->epoch = 0;
3557     #ifdef CONFIG_CIFS_SMB2
3558     - get_random_bytes(cifs_inode->lease_key, SMB2_LEASE_KEY_SIZE);
3559     + generate_random_uuid(cifs_inode->lease_key);
3560     #endif
3561     /*
3562     * Can not set i_flags here - they get immediately overwritten to zero
3563     @@ -1271,7 +1271,6 @@ init_cifs(void)
3564     GlobalTotalActiveXid = 0;
3565     GlobalMaxActiveXid = 0;
3566     spin_lock_init(&cifs_tcp_ses_lock);
3567     - spin_lock_init(&cifs_file_list_lock);
3568     spin_lock_init(&GlobalMid_Lock);
3569    
3570     get_random_bytes(&cifs_lock_secret, sizeof(cifs_lock_secret));
3571     diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h
3572     index 8f1d8c1e72be..65f78b7a9062 100644
3573     --- a/fs/cifs/cifsglob.h
3574     +++ b/fs/cifs/cifsglob.h
3575     @@ -833,6 +833,7 @@ struct cifs_tcon {
3576     struct list_head tcon_list;
3577     int tc_count;
3578     struct list_head openFileList;
3579     + spinlock_t open_file_lock; /* protects list above */
3580     struct cifs_ses *ses; /* pointer to session associated with */
3581     char treeName[MAX_TREE_SIZE + 1]; /* UNC name of resource in ASCII */
3582     char *nativeFileSystem;
3583     @@ -889,7 +890,7 @@ struct cifs_tcon {
3584     #endif /* CONFIG_CIFS_STATS2 */
3585     __u64 bytes_read;
3586     __u64 bytes_written;
3587     - spinlock_t stat_lock;
3588     + spinlock_t stat_lock; /* protects the two fields above */
3589     #endif /* CONFIG_CIFS_STATS */
3590     FILE_SYSTEM_DEVICE_INFO fsDevInfo;
3591     FILE_SYSTEM_ATTRIBUTE_INFO fsAttrInfo; /* ok if fs name truncated */
3592     @@ -1040,8 +1041,10 @@ struct cifs_fid_locks {
3593     };
3594    
3595     struct cifsFileInfo {
3596     + /* following two lists are protected by tcon->open_file_lock */
3597     struct list_head tlist; /* pointer to next fid owned by tcon */
3598     struct list_head flist; /* next fid (file instance) for this inode */
3599     + /* lock list below protected by cifsi->lock_sem */
3600     struct cifs_fid_locks *llist; /* brlocks held by this fid */
3601     kuid_t uid; /* allows finding which FileInfo structure */
3602     __u32 pid; /* process id who opened file */
3603     @@ -1049,11 +1052,12 @@ struct cifsFileInfo {
3604     /* BB add lock scope info here if needed */ ;
3605     /* lock scope id (0 if none) */
3606     struct dentry *dentry;
3607     - unsigned int f_flags;
3608     struct tcon_link *tlink;
3609     + unsigned int f_flags;
3610     bool invalidHandle:1; /* file closed via session abend */
3611     bool oplock_break_cancelled:1;
3612     - int count; /* refcount protected by cifs_file_list_lock */
3613     + int count;
3614     + spinlock_t file_info_lock; /* protects four flag/count fields above */
3615     struct mutex fh_mutex; /* prevents reopen race after dead ses*/
3616     struct cifs_search_info srch_inf;
3617     struct work_struct oplock_break; /* work for oplock breaks */
3618     @@ -1120,7 +1124,7 @@ struct cifs_writedata {
3619    
3620     /*
3621     * Take a reference on the file private data. Must be called with
3622     - * cifs_file_list_lock held.
3623     + * cfile->file_info_lock held.
3624     */
3625     static inline void
3626     cifsFileInfo_get_locked(struct cifsFileInfo *cifs_file)
3627     @@ -1514,8 +1518,10 @@ require use of the stronger protocol */
3628     * GlobalMid_Lock protects:
3629     * list operations on pending_mid_q and oplockQ
3630     * updates to XID counters, multiplex id and SMB sequence numbers
3631     - * cifs_file_list_lock protects:
3632     - * list operations on tcp and SMB session lists and tCon lists
3633     + * tcp_ses_lock protects:
3634     + * list operations on tcp and SMB session lists
3635     + * tcon->open_file_lock protects the list of open files hanging off the tcon
3636     + * cfile->file_info_lock protects counters and fields in cifs file struct
3637     * f_owner.lock protects certain per file struct operations
3638     * mapping->page_lock protects certain per page operations
3639     *
3640     @@ -1547,18 +1553,12 @@ GLOBAL_EXTERN struct list_head cifs_tcp_ses_list;
3641     * tcp session, and the list of tcon's per smb session. It also protects
3642     * the reference counters for the server, smb session, and tcon. Finally,
3643     * changes to the tcon->tidStatus should be done while holding this lock.
3644     + * generally the locks should be taken in order tcp_ses_lock before
3645     + * tcon->open_file_lock and that before file->file_info_lock since the
3646     + * structure order is cifs_socket-->cifs_ses-->cifs_tcon-->cifs_file
3647     */
3648     GLOBAL_EXTERN spinlock_t cifs_tcp_ses_lock;
3649    
3650     -/*
3651     - * This lock protects the cifs_file->llist and cifs_file->flist
3652     - * list operations, and updates to some flags (cifs_file->invalidHandle)
3653     - * It will be moved to either use the tcon->stat_lock or equivalent later.
3654     - * If cifs_tcp_ses_lock and the lock below are both needed to be held, then
3655     - * the cifs_tcp_ses_lock must be grabbed first and released last.
3656     - */
3657     -GLOBAL_EXTERN spinlock_t cifs_file_list_lock;
3658     -
3659     #ifdef CONFIG_CIFS_DNOTIFY_EXPERIMENTAL /* unused temporarily */
3660     /* Outstanding dir notify requests */
3661     GLOBAL_EXTERN struct list_head GlobalDnotifyReqList;
3662     diff --git a/fs/cifs/cifssmb.c b/fs/cifs/cifssmb.c
3663     index d47197ea4ab6..78046051bbbc 100644
3664     --- a/fs/cifs/cifssmb.c
3665     +++ b/fs/cifs/cifssmb.c
3666     @@ -98,13 +98,13 @@ cifs_mark_open_files_invalid(struct cifs_tcon *tcon)
3667     struct list_head *tmp1;
3668    
3669     /* list all files open on tree connection and mark them invalid */
3670     - spin_lock(&cifs_file_list_lock);
3671     + spin_lock(&tcon->open_file_lock);
3672     list_for_each_safe(tmp, tmp1, &tcon->openFileList) {
3673     open_file = list_entry(tmp, struct cifsFileInfo, tlist);
3674     open_file->invalidHandle = true;
3675     open_file->oplock_break_cancelled = true;
3676     }
3677     - spin_unlock(&cifs_file_list_lock);
3678     + spin_unlock(&tcon->open_file_lock);
3679     /*
3680     * BB Add call to invalidate_inodes(sb) for all superblocks mounted
3681     * to this tcon.
3682     diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
3683     index 2e4f4bad8b1e..7b67179521cf 100644
3684     --- a/fs/cifs/connect.c
3685     +++ b/fs/cifs/connect.c
3686     @@ -2163,7 +2163,7 @@ cifs_get_tcp_session(struct smb_vol *volume_info)
3687     memcpy(&tcp_ses->dstaddr, &volume_info->dstaddr,
3688     sizeof(tcp_ses->dstaddr));
3689     #ifdef CONFIG_CIFS_SMB2
3690     - get_random_bytes(tcp_ses->client_guid, SMB2_CLIENT_GUID_SIZE);
3691     + generate_random_uuid(tcp_ses->client_guid);
3692     #endif
3693     /*
3694     * at this point we are the only ones with the pointer
3695     @@ -3688,14 +3688,16 @@ remote_path_check:
3696     goto mount_fail_check;
3697     }
3698    
3699     - rc = cifs_are_all_path_components_accessible(server,
3700     + if (rc != -EREMOTE) {
3701     + rc = cifs_are_all_path_components_accessible(server,
3702     xid, tcon, cifs_sb,
3703     full_path);
3704     - if (rc != 0) {
3705     - cifs_dbg(VFS, "cannot query dirs between root and final path, "
3706     - "enabling CIFS_MOUNT_USE_PREFIX_PATH\n");
3707     - cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_USE_PREFIX_PATH;
3708     - rc = 0;
3709     + if (rc != 0) {
3710     + cifs_dbg(VFS, "cannot query dirs between root and final path, "
3711     + "enabling CIFS_MOUNT_USE_PREFIX_PATH\n");
3712     + cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_USE_PREFIX_PATH;
3713     + rc = 0;
3714     + }
3715     }
3716     kfree(full_path);
3717     }
3718     diff --git a/fs/cifs/file.c b/fs/cifs/file.c
3719     index 579e41b350a2..605438afe7ef 100644
3720     --- a/fs/cifs/file.c
3721     +++ b/fs/cifs/file.c
3722     @@ -305,6 +305,7 @@ cifs_new_fileinfo(struct cifs_fid *fid, struct file *file,
3723     cfile->tlink = cifs_get_tlink(tlink);
3724     INIT_WORK(&cfile->oplock_break, cifs_oplock_break);
3725     mutex_init(&cfile->fh_mutex);
3726     + spin_lock_init(&cfile->file_info_lock);
3727    
3728     cifs_sb_active(inode->i_sb);
3729    
3730     @@ -317,7 +318,7 @@ cifs_new_fileinfo(struct cifs_fid *fid, struct file *file,
3731     oplock = 0;
3732     }
3733    
3734     - spin_lock(&cifs_file_list_lock);
3735     + spin_lock(&tcon->open_file_lock);
3736     if (fid->pending_open->oplock != CIFS_OPLOCK_NO_CHANGE && oplock)
3737     oplock = fid->pending_open->oplock;
3738     list_del(&fid->pending_open->olist);
3739     @@ -326,12 +327,13 @@ cifs_new_fileinfo(struct cifs_fid *fid, struct file *file,
3740     server->ops->set_fid(cfile, fid, oplock);
3741    
3742     list_add(&cfile->tlist, &tcon->openFileList);
3743     +
3744     /* if readable file instance put first in list*/
3745     if (file->f_mode & FMODE_READ)
3746     list_add(&cfile->flist, &cinode->openFileList);
3747     else
3748     list_add_tail(&cfile->flist, &cinode->openFileList);
3749     - spin_unlock(&cifs_file_list_lock);
3750     + spin_unlock(&tcon->open_file_lock);
3751    
3752     if (fid->purge_cache)
3753     cifs_zap_mapping(inode);
3754     @@ -343,16 +345,16 @@ cifs_new_fileinfo(struct cifs_fid *fid, struct file *file,
3755     struct cifsFileInfo *
3756     cifsFileInfo_get(struct cifsFileInfo *cifs_file)
3757     {
3758     - spin_lock(&cifs_file_list_lock);
3759     + spin_lock(&cifs_file->file_info_lock);
3760     cifsFileInfo_get_locked(cifs_file);
3761     - spin_unlock(&cifs_file_list_lock);
3762     + spin_unlock(&cifs_file->file_info_lock);
3763     return cifs_file;
3764     }
3765    
3766     /*
3767     * Release a reference on the file private data. This may involve closing
3768     * the filehandle out on the server. Must be called without holding
3769     - * cifs_file_list_lock.
3770     + * tcon->open_file_lock and cifs_file->file_info_lock.
3771     */
3772     void cifsFileInfo_put(struct cifsFileInfo *cifs_file)
3773     {
3774     @@ -367,11 +369,15 @@ void cifsFileInfo_put(struct cifsFileInfo *cifs_file)
3775     struct cifs_pending_open open;
3776     bool oplock_break_cancelled;
3777    
3778     - spin_lock(&cifs_file_list_lock);
3779     + spin_lock(&tcon->open_file_lock);
3780     +
3781     + spin_lock(&cifs_file->file_info_lock);
3782     if (--cifs_file->count > 0) {
3783     - spin_unlock(&cifs_file_list_lock);
3784     + spin_unlock(&cifs_file->file_info_lock);
3785     + spin_unlock(&tcon->open_file_lock);
3786     return;
3787     }
3788     + spin_unlock(&cifs_file->file_info_lock);
3789    
3790     if (server->ops->get_lease_key)
3791     server->ops->get_lease_key(inode, &fid);
3792     @@ -395,7 +401,8 @@ void cifsFileInfo_put(struct cifsFileInfo *cifs_file)
3793     set_bit(CIFS_INO_INVALID_MAPPING, &cifsi->flags);
3794     cifs_set_oplock_level(cifsi, 0);
3795     }
3796     - spin_unlock(&cifs_file_list_lock);
3797     +
3798     + spin_unlock(&tcon->open_file_lock);
3799    
3800     oplock_break_cancelled = cancel_work_sync(&cifs_file->oplock_break);
3801    
3802     @@ -772,10 +779,10 @@ int cifs_closedir(struct inode *inode, struct file *file)
3803     server = tcon->ses->server;
3804    
3805     cifs_dbg(FYI, "Freeing private data in close dir\n");
3806     - spin_lock(&cifs_file_list_lock);
3807     + spin_lock(&cfile->file_info_lock);
3808     if (server->ops->dir_needs_close(cfile)) {
3809     cfile->invalidHandle = true;
3810     - spin_unlock(&cifs_file_list_lock);
3811     + spin_unlock(&cfile->file_info_lock);
3812     if (server->ops->close_dir)
3813     rc = server->ops->close_dir(xid, tcon, &cfile->fid);
3814     else
3815     @@ -784,7 +791,7 @@ int cifs_closedir(struct inode *inode, struct file *file)
3816     /* not much we can do if it fails anyway, ignore rc */
3817     rc = 0;
3818     } else
3819     - spin_unlock(&cifs_file_list_lock);
3820     + spin_unlock(&cfile->file_info_lock);
3821    
3822     buf = cfile->srch_inf.ntwrk_buf_start;
3823     if (buf) {
3824     @@ -1728,12 +1735,13 @@ struct cifsFileInfo *find_readable_file(struct cifsInodeInfo *cifs_inode,
3825     {
3826     struct cifsFileInfo *open_file = NULL;
3827     struct cifs_sb_info *cifs_sb = CIFS_SB(cifs_inode->vfs_inode.i_sb);
3828     + struct cifs_tcon *tcon = cifs_sb_master_tcon(cifs_sb);
3829    
3830     /* only filter by fsuid on multiuser mounts */
3831     if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MULTIUSER))
3832     fsuid_only = false;
3833    
3834     - spin_lock(&cifs_file_list_lock);
3835     + spin_lock(&tcon->open_file_lock);
3836     /* we could simply get the first_list_entry since write-only entries
3837     are always at the end of the list but since the first entry might
3838     have a close pending, we go through the whole list */
3839     @@ -1744,8 +1752,8 @@ struct cifsFileInfo *find_readable_file(struct cifsInodeInfo *cifs_inode,
3840     if (!open_file->invalidHandle) {
3841     /* found a good file */
3842     /* lock it so it will not be closed on us */
3843     - cifsFileInfo_get_locked(open_file);
3844     - spin_unlock(&cifs_file_list_lock);
3845     + cifsFileInfo_get(open_file);
3846     + spin_unlock(&tcon->open_file_lock);
3847     return open_file;
3848     } /* else might as well continue, and look for
3849     another, or simply have the caller reopen it
3850     @@ -1753,7 +1761,7 @@ struct cifsFileInfo *find_readable_file(struct cifsInodeInfo *cifs_inode,
3851     } else /* write only file */
3852     break; /* write only files are last so must be done */
3853     }
3854     - spin_unlock(&cifs_file_list_lock);
3855     + spin_unlock(&tcon->open_file_lock);
3856     return NULL;
3857     }
3858    
3859     @@ -1762,6 +1770,7 @@ struct cifsFileInfo *find_writable_file(struct cifsInodeInfo *cifs_inode,
3860     {
3861     struct cifsFileInfo *open_file, *inv_file = NULL;
3862     struct cifs_sb_info *cifs_sb;
3863     + struct cifs_tcon *tcon;
3864     bool any_available = false;
3865     int rc;
3866     unsigned int refind = 0;
3867     @@ -1777,15 +1786,16 @@ struct cifsFileInfo *find_writable_file(struct cifsInodeInfo *cifs_inode,
3868     }
3869    
3870     cifs_sb = CIFS_SB(cifs_inode->vfs_inode.i_sb);
3871     + tcon = cifs_sb_master_tcon(cifs_sb);
3872    
3873     /* only filter by fsuid on multiuser mounts */
3874     if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MULTIUSER))
3875     fsuid_only = false;
3876    
3877     - spin_lock(&cifs_file_list_lock);
3878     + spin_lock(&tcon->open_file_lock);
3879     refind_writable:
3880     if (refind > MAX_REOPEN_ATT) {
3881     - spin_unlock(&cifs_file_list_lock);
3882     + spin_unlock(&tcon->open_file_lock);
3883     return NULL;
3884     }
3885     list_for_each_entry(open_file, &cifs_inode->openFileList, flist) {
3886     @@ -1796,8 +1806,8 @@ refind_writable:
3887     if (OPEN_FMODE(open_file->f_flags) & FMODE_WRITE) {
3888     if (!open_file->invalidHandle) {
3889     /* found a good writable file */
3890     - cifsFileInfo_get_locked(open_file);
3891     - spin_unlock(&cifs_file_list_lock);
3892     + cifsFileInfo_get(open_file);
3893     + spin_unlock(&tcon->open_file_lock);
3894     return open_file;
3895     } else {
3896     if (!inv_file)
3897     @@ -1813,24 +1823,24 @@ refind_writable:
3898    
3899     if (inv_file) {
3900     any_available = false;
3901     - cifsFileInfo_get_locked(inv_file);
3902     + cifsFileInfo_get(inv_file);
3903     }
3904    
3905     - spin_unlock(&cifs_file_list_lock);
3906     + spin_unlock(&tcon->open_file_lock);
3907    
3908     if (inv_file) {
3909     rc = cifs_reopen_file(inv_file, false);
3910     if (!rc)
3911     return inv_file;
3912     else {
3913     - spin_lock(&cifs_file_list_lock);
3914     + spin_lock(&tcon->open_file_lock);
3915     list_move_tail(&inv_file->flist,
3916     &cifs_inode->openFileList);
3917     - spin_unlock(&cifs_file_list_lock);
3918     + spin_unlock(&tcon->open_file_lock);
3919     cifsFileInfo_put(inv_file);
3920     - spin_lock(&cifs_file_list_lock);
3921     ++refind;
3922     inv_file = NULL;
3923     + spin_lock(&tcon->open_file_lock);
3924     goto refind_writable;
3925     }
3926     }
3927     @@ -3618,15 +3628,17 @@ static int cifs_readpage(struct file *file, struct page *page)
3928     static int is_inode_writable(struct cifsInodeInfo *cifs_inode)
3929     {
3930     struct cifsFileInfo *open_file;
3931     + struct cifs_tcon *tcon =
3932     + cifs_sb_master_tcon(CIFS_SB(cifs_inode->vfs_inode.i_sb));
3933    
3934     - spin_lock(&cifs_file_list_lock);
3935     + spin_lock(&tcon->open_file_lock);
3936     list_for_each_entry(open_file, &cifs_inode->openFileList, flist) {
3937     if (OPEN_FMODE(open_file->f_flags) & FMODE_WRITE) {
3938     - spin_unlock(&cifs_file_list_lock);
3939     + spin_unlock(&tcon->open_file_lock);
3940     return 1;
3941     }
3942     }
3943     - spin_unlock(&cifs_file_list_lock);
3944     + spin_unlock(&tcon->open_file_lock);
3945     return 0;
3946     }
3947    
3948     diff --git a/fs/cifs/misc.c b/fs/cifs/misc.c
3949     index 813fe13c2ae1..c6729156f9a0 100644
3950     --- a/fs/cifs/misc.c
3951     +++ b/fs/cifs/misc.c
3952     @@ -120,6 +120,7 @@ tconInfoAlloc(void)
3953     ++ret_buf->tc_count;
3954     INIT_LIST_HEAD(&ret_buf->openFileList);
3955     INIT_LIST_HEAD(&ret_buf->tcon_list);
3956     + spin_lock_init(&ret_buf->open_file_lock);
3957     #ifdef CONFIG_CIFS_STATS
3958     spin_lock_init(&ret_buf->stat_lock);
3959     #endif
3960     @@ -465,7 +466,7 @@ is_valid_oplock_break(char *buffer, struct TCP_Server_Info *srv)
3961     continue;
3962    
3963     cifs_stats_inc(&tcon->stats.cifs_stats.num_oplock_brks);
3964     - spin_lock(&cifs_file_list_lock);
3965     + spin_lock(&tcon->open_file_lock);
3966     list_for_each(tmp2, &tcon->openFileList) {
3967     netfile = list_entry(tmp2, struct cifsFileInfo,
3968     tlist);
3969     @@ -495,11 +496,11 @@ is_valid_oplock_break(char *buffer, struct TCP_Server_Info *srv)
3970     &netfile->oplock_break);
3971     netfile->oplock_break_cancelled = false;
3972    
3973     - spin_unlock(&cifs_file_list_lock);
3974     + spin_unlock(&tcon->open_file_lock);
3975     spin_unlock(&cifs_tcp_ses_lock);
3976     return true;
3977     }
3978     - spin_unlock(&cifs_file_list_lock);
3979     + spin_unlock(&tcon->open_file_lock);
3980     spin_unlock(&cifs_tcp_ses_lock);
3981     cifs_dbg(FYI, "No matching file for oplock break\n");
3982     return true;
3983     @@ -613,9 +614,9 @@ backup_cred(struct cifs_sb_info *cifs_sb)
3984     void
3985     cifs_del_pending_open(struct cifs_pending_open *open)
3986     {
3987     - spin_lock(&cifs_file_list_lock);
3988     + spin_lock(&tlink_tcon(open->tlink)->open_file_lock);
3989     list_del(&open->olist);
3990     - spin_unlock(&cifs_file_list_lock);
3991     + spin_unlock(&tlink_tcon(open->tlink)->open_file_lock);
3992     }
3993    
3994     void
3995     @@ -635,7 +636,7 @@ void
3996     cifs_add_pending_open(struct cifs_fid *fid, struct tcon_link *tlink,
3997     struct cifs_pending_open *open)
3998     {
3999     - spin_lock(&cifs_file_list_lock);
4000     + spin_lock(&tlink_tcon(tlink)->open_file_lock);
4001     cifs_add_pending_open_locked(fid, tlink, open);
4002     - spin_unlock(&cifs_file_list_lock);
4003     + spin_unlock(&tlink_tcon(open->tlink)->open_file_lock);
4004     }
4005     diff --git a/fs/cifs/readdir.c b/fs/cifs/readdir.c
4006     index 65cf85dcda09..8f6a2a5863b9 100644
4007     --- a/fs/cifs/readdir.c
4008     +++ b/fs/cifs/readdir.c
4009     @@ -597,14 +597,14 @@ find_cifs_entry(const unsigned int xid, struct cifs_tcon *tcon, loff_t pos,
4010     is_dir_changed(file)) || (index_to_find < first_entry_in_buffer)) {
4011     /* close and restart search */
4012     cifs_dbg(FYI, "search backing up - close and restart search\n");
4013     - spin_lock(&cifs_file_list_lock);
4014     + spin_lock(&cfile->file_info_lock);
4015     if (server->ops->dir_needs_close(cfile)) {
4016     cfile->invalidHandle = true;
4017     - spin_unlock(&cifs_file_list_lock);
4018     + spin_unlock(&cfile->file_info_lock);
4019     if (server->ops->close_dir)
4020     server->ops->close_dir(xid, tcon, &cfile->fid);
4021     } else
4022     - spin_unlock(&cifs_file_list_lock);
4023     + spin_unlock(&cfile->file_info_lock);
4024     if (cfile->srch_inf.ntwrk_buf_start) {
4025     cifs_dbg(FYI, "freeing SMB ff cache buf on search rewind\n");
4026     if (cfile->srch_inf.smallBuf)
4027     diff --git a/fs/cifs/smb2glob.h b/fs/cifs/smb2glob.h
4028     index 0ffa18094335..238759c146ba 100644
4029     --- a/fs/cifs/smb2glob.h
4030     +++ b/fs/cifs/smb2glob.h
4031     @@ -61,4 +61,14 @@
4032     /* Maximum buffer size value we can send with 1 credit */
4033     #define SMB2_MAX_BUFFER_SIZE 65536
4034    
4035     +/*
4036     + * Maximum number of credits to keep available.
4037     + * This value is chosen somewhat arbitrarily. The Windows client
4038     + * defaults to 128 credits, the Windows server allows clients up to
4039     + * 512 credits, and the NetApp server does not limit clients at all.
4040     + * Choose a high enough value such that the client shouldn't limit
4041     + * performance.
4042     + */
4043     +#define SMB2_MAX_CREDITS_AVAILABLE 32000
4044     +
4045     #endif /* _SMB2_GLOB_H */
4046     diff --git a/fs/cifs/smb2inode.c b/fs/cifs/smb2inode.c
4047     index 4f0231e685a9..1238cd3552f9 100644
4048     --- a/fs/cifs/smb2inode.c
4049     +++ b/fs/cifs/smb2inode.c
4050     @@ -266,9 +266,15 @@ smb2_set_file_info(struct inode *inode, const char *full_path,
4051     struct tcon_link *tlink;
4052     int rc;
4053    
4054     + if ((buf->CreationTime == 0) && (buf->LastAccessTime == 0) &&
4055     + (buf->LastWriteTime == 0) && (buf->ChangeTime) &&
4056     + (buf->Attributes == 0))
4057     + return 0; /* would be a no op, no sense sending this */
4058     +
4059     tlink = cifs_sb_tlink(cifs_sb);
4060     if (IS_ERR(tlink))
4061     return PTR_ERR(tlink);
4062     +
4063     rc = smb2_open_op_close(xid, tlink_tcon(tlink), cifs_sb, full_path,
4064     FILE_WRITE_ATTRIBUTES, FILE_OPEN, 0, buf,
4065     SMB2_OP_SET_INFO);
4066     diff --git a/fs/cifs/smb2misc.c b/fs/cifs/smb2misc.c
4067     index 389fb9f8c84e..3d383489b9cf 100644
4068     --- a/fs/cifs/smb2misc.c
4069     +++ b/fs/cifs/smb2misc.c
4070     @@ -549,19 +549,19 @@ smb2_is_valid_lease_break(char *buffer)
4071     list_for_each(tmp1, &server->smb_ses_list) {
4072     ses = list_entry(tmp1, struct cifs_ses, smb_ses_list);
4073    
4074     - spin_lock(&cifs_file_list_lock);
4075     list_for_each(tmp2, &ses->tcon_list) {
4076     tcon = list_entry(tmp2, struct cifs_tcon,
4077     tcon_list);
4078     + spin_lock(&tcon->open_file_lock);
4079     cifs_stats_inc(
4080     &tcon->stats.cifs_stats.num_oplock_brks);
4081     if (smb2_tcon_has_lease(tcon, rsp, lw)) {
4082     - spin_unlock(&cifs_file_list_lock);
4083     + spin_unlock(&tcon->open_file_lock);
4084     spin_unlock(&cifs_tcp_ses_lock);
4085     return true;
4086     }
4087     + spin_unlock(&tcon->open_file_lock);
4088     }
4089     - spin_unlock(&cifs_file_list_lock);
4090     }
4091     }
4092     spin_unlock(&cifs_tcp_ses_lock);
4093     @@ -603,7 +603,7 @@ smb2_is_valid_oplock_break(char *buffer, struct TCP_Server_Info *server)
4094     tcon = list_entry(tmp1, struct cifs_tcon, tcon_list);
4095    
4096     cifs_stats_inc(&tcon->stats.cifs_stats.num_oplock_brks);
4097     - spin_lock(&cifs_file_list_lock);
4098     + spin_lock(&tcon->open_file_lock);
4099     list_for_each(tmp2, &tcon->openFileList) {
4100     cfile = list_entry(tmp2, struct cifsFileInfo,
4101     tlist);
4102     @@ -615,7 +615,7 @@ smb2_is_valid_oplock_break(char *buffer, struct TCP_Server_Info *server)
4103    
4104     cifs_dbg(FYI, "file id match, oplock break\n");
4105     cinode = CIFS_I(d_inode(cfile->dentry));
4106     -
4107     + spin_lock(&cfile->file_info_lock);
4108     if (!CIFS_CACHE_WRITE(cinode) &&
4109     rsp->OplockLevel == SMB2_OPLOCK_LEVEL_NONE)
4110     cfile->oplock_break_cancelled = true;
4111     @@ -637,14 +637,14 @@ smb2_is_valid_oplock_break(char *buffer, struct TCP_Server_Info *server)
4112     clear_bit(
4113     CIFS_INODE_DOWNGRADE_OPLOCK_TO_L2,
4114     &cinode->flags);
4115     -
4116     + spin_unlock(&cfile->file_info_lock);
4117     queue_work(cifsiod_wq, &cfile->oplock_break);
4118    
4119     - spin_unlock(&cifs_file_list_lock);
4120     + spin_unlock(&tcon->open_file_lock);
4121     spin_unlock(&cifs_tcp_ses_lock);
4122     return true;
4123     }
4124     - spin_unlock(&cifs_file_list_lock);
4125     + spin_unlock(&tcon->open_file_lock);
4126     spin_unlock(&cifs_tcp_ses_lock);
4127     cifs_dbg(FYI, "No matching file for oplock break\n");
4128     return true;
4129     diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c
4130     index d203c0329626..0e73cefca65e 100644
4131     --- a/fs/cifs/smb2ops.c
4132     +++ b/fs/cifs/smb2ops.c
4133     @@ -287,7 +287,7 @@ SMB3_request_interfaces(const unsigned int xid, struct cifs_tcon *tcon)
4134     cifs_dbg(FYI, "Link Speed %lld\n",
4135     le64_to_cpu(out_buf->LinkSpeed));
4136     }
4137     -
4138     + kfree(out_buf);
4139     return rc;
4140     }
4141     #endif /* STATS2 */
4142     @@ -541,6 +541,7 @@ smb2_set_fid(struct cifsFileInfo *cfile, struct cifs_fid *fid, __u32 oplock)
4143     server->ops->set_oplock_level(cinode, oplock, fid->epoch,
4144     &fid->purge_cache);
4145     cinode->can_cache_brlcks = CIFS_CACHE_WRITE(cinode);
4146     + memcpy(cfile->fid.create_guid, fid->create_guid, 16);
4147     }
4148    
4149     static void
4150     @@ -699,6 +700,7 @@ smb2_clone_range(const unsigned int xid,
4151    
4152     cchunk_out:
4153     kfree(pcchunk);
4154     + kfree(retbuf);
4155     return rc;
4156     }
4157    
4158     @@ -823,7 +825,6 @@ smb2_duplicate_extents(const unsigned int xid,
4159     {
4160     int rc;
4161     unsigned int ret_data_len;
4162     - char *retbuf = NULL;
4163     struct duplicate_extents_to_file dup_ext_buf;
4164     struct cifs_tcon *tcon = tlink_tcon(trgtfile->tlink);
4165    
4166     @@ -849,7 +850,7 @@ smb2_duplicate_extents(const unsigned int xid,
4167     FSCTL_DUPLICATE_EXTENTS_TO_FILE,
4168     true /* is_fsctl */, (char *)&dup_ext_buf,
4169     sizeof(struct duplicate_extents_to_file),
4170     - (char **)&retbuf,
4171     + NULL,
4172     &ret_data_len);
4173    
4174     if (ret_data_len > 0)
4175     @@ -872,7 +873,6 @@ smb3_set_integrity(const unsigned int xid, struct cifs_tcon *tcon,
4176     struct cifsFileInfo *cfile)
4177     {
4178     struct fsctl_set_integrity_information_req integr_info;
4179     - char *retbuf = NULL;
4180     unsigned int ret_data_len;
4181    
4182     integr_info.ChecksumAlgorithm = cpu_to_le16(CHECKSUM_TYPE_UNCHANGED);
4183     @@ -884,7 +884,7 @@ smb3_set_integrity(const unsigned int xid, struct cifs_tcon *tcon,
4184     FSCTL_SET_INTEGRITY_INFORMATION,
4185     true /* is_fsctl */, (char *)&integr_info,
4186     sizeof(struct fsctl_set_integrity_information_req),
4187     - (char **)&retbuf,
4188     + NULL,
4189     &ret_data_len);
4190    
4191     }
4192     @@ -1041,7 +1041,7 @@ smb2_set_lease_key(struct inode *inode, struct cifs_fid *fid)
4193     static void
4194     smb2_new_lease_key(struct cifs_fid *fid)
4195     {
4196     - get_random_bytes(fid->lease_key, SMB2_LEASE_KEY_SIZE);
4197     + generate_random_uuid(fid->lease_key);
4198     }
4199    
4200     #define SMB2_SYMLINK_STRUCT_SIZE \
4201     diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c
4202     index 29e06db5f187..3eec96ca87d9 100644
4203     --- a/fs/cifs/smb2pdu.c
4204     +++ b/fs/cifs/smb2pdu.c
4205     @@ -100,7 +100,21 @@ smb2_hdr_assemble(struct smb2_hdr *hdr, __le16 smb2_cmd /* command */ ,
4206     hdr->ProtocolId = SMB2_PROTO_NUMBER;
4207     hdr->StructureSize = cpu_to_le16(64);
4208     hdr->Command = smb2_cmd;
4209     - hdr->CreditRequest = cpu_to_le16(2); /* BB make this dynamic */
4210     + if (tcon && tcon->ses && tcon->ses->server) {
4211     + struct TCP_Server_Info *server = tcon->ses->server;
4212     +
4213     + spin_lock(&server->req_lock);
4214     + /* Request up to 2 credits but don't go over the limit. */
4215     + if (server->credits >= SMB2_MAX_CREDITS_AVAILABLE)
4216     + hdr->CreditRequest = cpu_to_le16(0);
4217     + else
4218     + hdr->CreditRequest = cpu_to_le16(
4219     + min_t(int, SMB2_MAX_CREDITS_AVAILABLE -
4220     + server->credits, 2));
4221     + spin_unlock(&server->req_lock);
4222     + } else {
4223     + hdr->CreditRequest = cpu_to_le16(2);
4224     + }
4225     hdr->ProcessId = cpu_to_le32((__u16)current->tgid);
4226    
4227     if (!tcon)
4228     @@ -590,6 +604,7 @@ SMB2_sess_setup(const unsigned int xid, struct cifs_ses *ses,
4229     char *security_blob = NULL;
4230     unsigned char *ntlmssp_blob = NULL;
4231     bool use_spnego = false; /* else use raw ntlmssp */
4232     + u64 previous_session = ses->Suid;
4233    
4234     cifs_dbg(FYI, "Session Setup\n");
4235    
4236     @@ -627,6 +642,10 @@ ssetup_ntlmssp_authenticate:
4237     return rc;
4238    
4239     req->hdr.SessionId = 0; /* First session, not a reauthenticate */
4240     +
4241     + /* if reconnect, we need to send previous sess id, otherwise it is 0 */
4242     + req->PreviousSessionId = previous_session;
4243     +
4244     req->Flags = 0; /* MBZ */
4245     /* to enable echos and oplocks */
4246     req->hdr.CreditRequest = cpu_to_le16(3);
4247     @@ -1164,7 +1183,7 @@ create_durable_v2_buf(struct cifs_fid *pfid)
4248    
4249     buf->dcontext.Timeout = 0; /* Should this be configurable by workload */
4250     buf->dcontext.Flags = cpu_to_le32(SMB2_DHANDLE_FLAG_PERSISTENT);
4251     - get_random_bytes(buf->dcontext.CreateGuid, 16);
4252     + generate_random_uuid(buf->dcontext.CreateGuid);
4253     memcpy(pfid->create_guid, buf->dcontext.CreateGuid, 16);
4254    
4255     /* SMB2_CREATE_DURABLE_HANDLE_REQUEST is "DH2Q" */
4256     @@ -2057,6 +2076,7 @@ smb2_async_readv(struct cifs_readdata *rdata)
4257     if (rdata->credits) {
4258     buf->CreditCharge = cpu_to_le16(DIV_ROUND_UP(rdata->bytes,
4259     SMB2_MAX_BUFFER_SIZE));
4260     + buf->CreditRequest = buf->CreditCharge;
4261     spin_lock(&server->req_lock);
4262     server->credits += rdata->credits -
4263     le16_to_cpu(buf->CreditCharge);
4264     @@ -2243,6 +2263,7 @@ smb2_async_writev(struct cifs_writedata *wdata,
4265     if (wdata->credits) {
4266     req->hdr.CreditCharge = cpu_to_le16(DIV_ROUND_UP(wdata->bytes,
4267     SMB2_MAX_BUFFER_SIZE));
4268     + req->hdr.CreditRequest = req->hdr.CreditCharge;
4269     spin_lock(&server->req_lock);
4270     server->credits += wdata->credits -
4271     le16_to_cpu(req->hdr.CreditCharge);
4272     diff --git a/fs/cifs/smb2pdu.h b/fs/cifs/smb2pdu.h
4273     index ff88d9feb01e..fd3709e8de33 100644
4274     --- a/fs/cifs/smb2pdu.h
4275     +++ b/fs/cifs/smb2pdu.h
4276     @@ -276,7 +276,7 @@ struct smb2_sess_setup_req {
4277     __le32 Channel;
4278     __le16 SecurityBufferOffset;
4279     __le16 SecurityBufferLength;
4280     - __le64 PreviousSessionId;
4281     + __u64 PreviousSessionId;
4282     __u8 Buffer[1]; /* variable length GSS security buffer */
4283     } __packed;
4284    
4285     diff --git a/fs/crypto/crypto.c b/fs/crypto/crypto.c
4286     index c502c116924c..55d64fba1e87 100644
4287     --- a/fs/crypto/crypto.c
4288     +++ b/fs/crypto/crypto.c
4289     @@ -152,7 +152,10 @@ static int do_page_crypto(struct inode *inode,
4290     struct page *src_page, struct page *dest_page,
4291     gfp_t gfp_flags)
4292     {
4293     - u8 xts_tweak[FS_XTS_TWEAK_SIZE];
4294     + struct {
4295     + __le64 index;
4296     + u8 padding[FS_XTS_TWEAK_SIZE - sizeof(__le64)];
4297     + } xts_tweak;
4298     struct skcipher_request *req = NULL;
4299     DECLARE_FS_COMPLETION_RESULT(ecr);
4300     struct scatterlist dst, src;
4301     @@ -172,17 +175,15 @@ static int do_page_crypto(struct inode *inode,
4302     req, CRYPTO_TFM_REQ_MAY_BACKLOG | CRYPTO_TFM_REQ_MAY_SLEEP,
4303     fscrypt_complete, &ecr);
4304    
4305     - BUILD_BUG_ON(FS_XTS_TWEAK_SIZE < sizeof(index));
4306     - memcpy(xts_tweak, &index, sizeof(index));
4307     - memset(&xts_tweak[sizeof(index)], 0,
4308     - FS_XTS_TWEAK_SIZE - sizeof(index));
4309     + BUILD_BUG_ON(sizeof(xts_tweak) != FS_XTS_TWEAK_SIZE);
4310     + xts_tweak.index = cpu_to_le64(index);
4311     + memset(xts_tweak.padding, 0, sizeof(xts_tweak.padding));
4312    
4313     sg_init_table(&dst, 1);
4314     sg_set_page(&dst, dest_page, PAGE_SIZE, 0);
4315     sg_init_table(&src, 1);
4316     sg_set_page(&src, src_page, PAGE_SIZE, 0);
4317     - skcipher_request_set_crypt(req, &src, &dst, PAGE_SIZE,
4318     - xts_tweak);
4319     + skcipher_request_set_crypt(req, &src, &dst, PAGE_SIZE, &xts_tweak);
4320     if (rw == FS_DECRYPT)
4321     res = crypto_skcipher_decrypt(req);
4322     else
4323     diff --git a/fs/crypto/policy.c b/fs/crypto/policy.c
4324     index ed115acb5dee..6865663aac69 100644
4325     --- a/fs/crypto/policy.c
4326     +++ b/fs/crypto/policy.c
4327     @@ -109,6 +109,8 @@ int fscrypt_process_policy(struct file *filp,
4328     if (ret)
4329     return ret;
4330    
4331     + inode_lock(inode);
4332     +
4333     if (!inode_has_encryption_context(inode)) {
4334     if (!S_ISDIR(inode->i_mode))
4335     ret = -EINVAL;
4336     @@ -127,6 +129,8 @@ int fscrypt_process_policy(struct file *filp,
4337     ret = -EINVAL;
4338     }
4339    
4340     + inode_unlock(inode);
4341     +
4342     mnt_drop_write_file(filp);
4343     return ret;
4344     }
4345     diff --git a/fs/ext4/sysfs.c b/fs/ext4/sysfs.c
4346     index 73bcfd41f5f2..42145be5c6b4 100644
4347     --- a/fs/ext4/sysfs.c
4348     +++ b/fs/ext4/sysfs.c
4349     @@ -223,14 +223,18 @@ static struct attribute *ext4_attrs[] = {
4350     EXT4_ATTR_FEATURE(lazy_itable_init);
4351     EXT4_ATTR_FEATURE(batched_discard);
4352     EXT4_ATTR_FEATURE(meta_bg_resize);
4353     +#ifdef CONFIG_EXT4_FS_ENCRYPTION
4354     EXT4_ATTR_FEATURE(encryption);
4355     +#endif
4356     EXT4_ATTR_FEATURE(metadata_csum_seed);
4357    
4358     static struct attribute *ext4_feat_attrs[] = {
4359     ATTR_LIST(lazy_itable_init),
4360     ATTR_LIST(batched_discard),
4361     ATTR_LIST(meta_bg_resize),
4362     +#ifdef CONFIG_EXT4_FS_ENCRYPTION
4363     ATTR_LIST(encryption),
4364     +#endif
4365     ATTR_LIST(metadata_csum_seed),
4366     NULL,
4367     };
4368     diff --git a/fs/isofs/inode.c b/fs/isofs/inode.c
4369     index ad0c745ebad7..871c8b392099 100644
4370     --- a/fs/isofs/inode.c
4371     +++ b/fs/isofs/inode.c
4372     @@ -687,6 +687,11 @@ static int isofs_fill_super(struct super_block *s, void *data, int silent)
4373     pri_bh = NULL;
4374    
4375     root_found:
4376     + /* We don't support read-write mounts */
4377     + if (!(s->s_flags & MS_RDONLY)) {
4378     + error = -EACCES;
4379     + goto out_freebh;
4380     + }
4381    
4382     if (joliet_level && (pri == NULL || !opt.rock)) {
4383     /* This is the case of Joliet with the norock mount flag.
4384     @@ -1501,9 +1506,6 @@ struct inode *__isofs_iget(struct super_block *sb,
4385     static struct dentry *isofs_mount(struct file_system_type *fs_type,
4386     int flags, const char *dev_name, void *data)
4387     {
4388     - /* We don't support read-write mounts */
4389     - if (!(flags & MS_RDONLY))
4390     - return ERR_PTR(-EACCES);
4391     return mount_bdev(fs_type, flags, dev_name, data, isofs_fill_super);
4392     }
4393    
4394     diff --git a/fs/jbd2/transaction.c b/fs/jbd2/transaction.c
4395     index 3d8246a9faa4..e1652665bd93 100644
4396     --- a/fs/jbd2/transaction.c
4397     +++ b/fs/jbd2/transaction.c
4398     @@ -1149,6 +1149,7 @@ int jbd2_journal_get_create_access(handle_t *handle, struct buffer_head *bh)
4399     JBUFFER_TRACE(jh, "file as BJ_Reserved");
4400     spin_lock(&journal->j_list_lock);
4401     __jbd2_journal_file_buffer(jh, transaction, BJ_Reserved);
4402     + spin_unlock(&journal->j_list_lock);
4403     } else if (jh->b_transaction == journal->j_committing_transaction) {
4404     /* first access by this transaction */
4405     jh->b_modified = 0;
4406     @@ -1156,8 +1157,8 @@ int jbd2_journal_get_create_access(handle_t *handle, struct buffer_head *bh)
4407     JBUFFER_TRACE(jh, "set next transaction");
4408     spin_lock(&journal->j_list_lock);
4409     jh->b_next_transaction = transaction;
4410     + spin_unlock(&journal->j_list_lock);
4411     }
4412     - spin_unlock(&journal->j_list_lock);
4413     jbd_unlock_bh_state(bh);
4414    
4415     /*
4416     diff --git a/fs/nfs/blocklayout/blocklayout.c b/fs/nfs/blocklayout/blocklayout.c
4417     index 217847679f0e..2905479f214a 100644
4418     --- a/fs/nfs/blocklayout/blocklayout.c
4419     +++ b/fs/nfs/blocklayout/blocklayout.c
4420     @@ -344,9 +344,10 @@ static void bl_write_cleanup(struct work_struct *work)
4421     u64 start = hdr->args.offset & (loff_t)PAGE_MASK;
4422     u64 end = (hdr->args.offset + hdr->args.count +
4423     PAGE_SIZE - 1) & (loff_t)PAGE_MASK;
4424     + u64 lwb = hdr->args.offset + hdr->args.count;
4425    
4426     ext_tree_mark_written(bl, start >> SECTOR_SHIFT,
4427     - (end - start) >> SECTOR_SHIFT, end);
4428     + (end - start) >> SECTOR_SHIFT, lwb);
4429     }
4430    
4431     pnfs_ld_write_done(hdr);
4432     diff --git a/fs/nfs/delegation.c b/fs/nfs/delegation.c
4433     index 322c2585bc34..b9c65421ed81 100644
4434     --- a/fs/nfs/delegation.c
4435     +++ b/fs/nfs/delegation.c
4436     @@ -41,6 +41,17 @@ void nfs_mark_delegation_referenced(struct nfs_delegation *delegation)
4437     set_bit(NFS_DELEGATION_REFERENCED, &delegation->flags);
4438     }
4439    
4440     +static bool
4441     +nfs4_is_valid_delegation(const struct nfs_delegation *delegation,
4442     + fmode_t flags)
4443     +{
4444     + if (delegation != NULL && (delegation->type & flags) == flags &&
4445     + !test_bit(NFS_DELEGATION_REVOKED, &delegation->flags) &&
4446     + !test_bit(NFS_DELEGATION_RETURNING, &delegation->flags))
4447     + return true;
4448     + return false;
4449     +}
4450     +
4451     static int
4452     nfs4_do_check_delegation(struct inode *inode, fmode_t flags, bool mark)
4453     {
4454     @@ -50,8 +61,7 @@ nfs4_do_check_delegation(struct inode *inode, fmode_t flags, bool mark)
4455     flags &= FMODE_READ|FMODE_WRITE;
4456     rcu_read_lock();
4457     delegation = rcu_dereference(NFS_I(inode)->delegation);
4458     - if (delegation != NULL && (delegation->type & flags) == flags &&
4459     - !test_bit(NFS_DELEGATION_RETURNING, &delegation->flags)) {
4460     + if (nfs4_is_valid_delegation(delegation, flags)) {
4461     if (mark)
4462     nfs_mark_delegation_referenced(delegation);
4463     ret = 1;
4464     @@ -893,7 +903,7 @@ bool nfs4_copy_delegation_stateid(struct inode *inode, fmode_t flags,
4465     flags &= FMODE_READ|FMODE_WRITE;
4466     rcu_read_lock();
4467     delegation = rcu_dereference(nfsi->delegation);
4468     - ret = (delegation != NULL && (delegation->type & flags) == flags);
4469     + ret = nfs4_is_valid_delegation(delegation, flags);
4470     if (ret) {
4471     nfs4_stateid_copy(dst, &delegation->stateid);
4472     nfs_mark_delegation_referenced(delegation);
4473     diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c
4474     index 177fefb26c18..6bc5a68e39f1 100644
4475     --- a/fs/nfs/dir.c
4476     +++ b/fs/nfs/dir.c
4477     @@ -435,11 +435,11 @@ int nfs_same_file(struct dentry *dentry, struct nfs_entry *entry)
4478     return 0;
4479    
4480     nfsi = NFS_I(inode);
4481     - if (entry->fattr->fileid == nfsi->fileid)
4482     - return 1;
4483     - if (nfs_compare_fh(entry->fh, &nfsi->fh) == 0)
4484     - return 1;
4485     - return 0;
4486     + if (entry->fattr->fileid != nfsi->fileid)
4487     + return 0;
4488     + if (entry->fh->size && nfs_compare_fh(entry->fh, &nfsi->fh) != 0)
4489     + return 0;
4490     + return 1;
4491     }
4492    
4493     static
4494     @@ -517,6 +517,8 @@ again:
4495     &entry->fattr->fsid))
4496     goto out;
4497     if (nfs_same_file(dentry, entry)) {
4498     + if (!entry->fh->size)
4499     + goto out;
4500     nfs_set_verifier(dentry, nfs_save_change_attribute(dir));
4501     status = nfs_refresh_inode(d_inode(dentry), entry->fattr);
4502     if (!status)
4503     @@ -529,6 +531,10 @@ again:
4504     goto again;
4505     }
4506     }
4507     + if (!entry->fh->size) {
4508     + d_lookup_done(dentry);
4509     + goto out;
4510     + }
4511    
4512     inode = nfs_fhget(dentry->d_sb, entry->fh, entry->fattr, entry->label);
4513     alias = d_splice_alias(inode, dentry);
4514     diff --git a/fs/nfs/nfs42proc.c b/fs/nfs/nfs42proc.c
4515     index 64b43b4ad9dd..608501971fe0 100644
4516     --- a/fs/nfs/nfs42proc.c
4517     +++ b/fs/nfs/nfs42proc.c
4518     @@ -443,6 +443,7 @@ int nfs42_proc_layoutstats_generic(struct nfs_server *server,
4519     task = rpc_run_task(&task_setup);
4520     if (IS_ERR(task))
4521     return PTR_ERR(task);
4522     + rpc_put_task(task);
4523     return 0;
4524     }
4525    
4526     diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c
4527     index cada00aa5096..8353f33f0466 100644
4528     --- a/fs/nfs/nfs4state.c
4529     +++ b/fs/nfs/nfs4state.c
4530     @@ -1498,6 +1498,9 @@ restart:
4531     __func__, status);
4532     case -ENOENT:
4533     case -ENOMEM:
4534     + case -EACCES:
4535     + case -EROFS:
4536     + case -EIO:
4537     case -ESTALE:
4538     /* Open state on this file cannot be recovered */
4539     nfs4_state_mark_recovery_failed(state, status);
4540     diff --git a/fs/nfsd/nfssvc.c b/fs/nfsd/nfssvc.c
4541     index 45007acaf364..a2b65fc56dd6 100644
4542     --- a/fs/nfsd/nfssvc.c
4543     +++ b/fs/nfsd/nfssvc.c
4544     @@ -366,14 +366,21 @@ static struct notifier_block nfsd_inet6addr_notifier = {
4545     };
4546     #endif
4547    
4548     +/* Only used under nfsd_mutex, so this atomic may be overkill: */
4549     +static atomic_t nfsd_notifier_refcount = ATOMIC_INIT(0);
4550     +
4551     static void nfsd_last_thread(struct svc_serv *serv, struct net *net)
4552     {
4553     struct nfsd_net *nn = net_generic(net, nfsd_net_id);
4554    
4555     - unregister_inetaddr_notifier(&nfsd_inetaddr_notifier);
4556     + /* check if the notifier still has clients */
4557     + if (atomic_dec_return(&nfsd_notifier_refcount) == 0) {
4558     + unregister_inetaddr_notifier(&nfsd_inetaddr_notifier);
4559     #if IS_ENABLED(CONFIG_IPV6)
4560     - unregister_inet6addr_notifier(&nfsd_inet6addr_notifier);
4561     + unregister_inet6addr_notifier(&nfsd_inet6addr_notifier);
4562     #endif
4563     + }
4564     +
4565     /*
4566     * write_ports can create the server without actually starting
4567     * any threads--if we get shut down before any threads are
4568     @@ -488,10 +495,13 @@ int nfsd_create_serv(struct net *net)
4569     }
4570    
4571     set_max_drc();
4572     - register_inetaddr_notifier(&nfsd_inetaddr_notifier);
4573     + /* check if the notifier is already set */
4574     + if (atomic_inc_return(&nfsd_notifier_refcount) == 1) {
4575     + register_inetaddr_notifier(&nfsd_inetaddr_notifier);
4576     #if IS_ENABLED(CONFIG_IPV6)
4577     - register_inet6addr_notifier(&nfsd_inet6addr_notifier);
4578     + register_inet6addr_notifier(&nfsd_inet6addr_notifier);
4579     #endif
4580     + }
4581     do_gettimeofday(&nn->nfssvc_boot); /* record boot time */
4582     return 0;
4583     }
4584     diff --git a/fs/overlayfs/copy_up.c b/fs/overlayfs/copy_up.c
4585     index 43fdc2765aea..abadbc30e013 100644
4586     --- a/fs/overlayfs/copy_up.c
4587     +++ b/fs/overlayfs/copy_up.c
4588     @@ -57,6 +57,7 @@ int ovl_copy_xattr(struct dentry *old, struct dentry *new)
4589     ssize_t list_size, size, value_size = 0;
4590     char *buf, *name, *value = NULL;
4591     int uninitialized_var(error);
4592     + size_t slen;
4593    
4594     if (!old->d_inode->i_op->getxattr ||
4595     !new->d_inode->i_op->getxattr)
4596     @@ -79,7 +80,16 @@ int ovl_copy_xattr(struct dentry *old, struct dentry *new)
4597     goto out;
4598     }
4599    
4600     - for (name = buf; name < (buf + list_size); name += strlen(name) + 1) {
4601     + for (name = buf; list_size; name += slen) {
4602     + slen = strnlen(name, list_size) + 1;
4603     +
4604     + /* underlying fs providing us with an broken xattr list? */
4605     + if (WARN_ON(slen > list_size)) {
4606     + error = -EIO;
4607     + break;
4608     + }
4609     + list_size -= slen;
4610     +
4611     if (ovl_is_private_xattr(name))
4612     continue;
4613     retry:
4614     diff --git a/fs/overlayfs/dir.c b/fs/overlayfs/dir.c
4615     index 1560fdc09a5f..74e696426aae 100644
4616     --- a/fs/overlayfs/dir.c
4617     +++ b/fs/overlayfs/dir.c
4618     @@ -14,6 +14,7 @@
4619     #include <linux/cred.h>
4620     #include <linux/posix_acl.h>
4621     #include <linux/posix_acl_xattr.h>
4622     +#include <linux/atomic.h>
4623     #include "overlayfs.h"
4624    
4625     void ovl_cleanup(struct inode *wdir, struct dentry *wdentry)
4626     @@ -37,8 +38,10 @@ struct dentry *ovl_lookup_temp(struct dentry *workdir, struct dentry *dentry)
4627     {
4628     struct dentry *temp;
4629     char name[20];
4630     + static atomic_t temp_id = ATOMIC_INIT(0);
4631    
4632     - snprintf(name, sizeof(name), "#%lx", (unsigned long) dentry);
4633     + /* counter is allowed to wrap, since temp dentries are ephemeral */
4634     + snprintf(name, sizeof(name), "#%x", atomic_inc_return(&temp_id));
4635    
4636     temp = lookup_one_len(name, workdir, strlen(name));
4637     if (!IS_ERR(temp) && temp->d_inode) {
4638     diff --git a/fs/pstore/ram.c b/fs/pstore/ram.c
4639     index 7a034d62cf8c..2340262a7e97 100644
4640     --- a/fs/pstore/ram.c
4641     +++ b/fs/pstore/ram.c
4642     @@ -377,13 +377,14 @@ static void ramoops_free_przs(struct ramoops_context *cxt)
4643     {
4644     int i;
4645    
4646     - cxt->max_dump_cnt = 0;
4647     if (!cxt->przs)
4648     return;
4649    
4650     - for (i = 0; !IS_ERR_OR_NULL(cxt->przs[i]); i++)
4651     + for (i = 0; i < cxt->max_dump_cnt; i++)
4652     persistent_ram_free(cxt->przs[i]);
4653     +
4654     kfree(cxt->przs);
4655     + cxt->max_dump_cnt = 0;
4656     }
4657    
4658     static int ramoops_init_przs(struct device *dev, struct ramoops_context *cxt,
4659     @@ -408,7 +409,7 @@ static int ramoops_init_przs(struct device *dev, struct ramoops_context *cxt,
4660     GFP_KERNEL);
4661     if (!cxt->przs) {
4662     dev_err(dev, "failed to initialize a prz array for dumps\n");
4663     - goto fail_prz;
4664     + goto fail_mem;
4665     }
4666    
4667     for (i = 0; i < cxt->max_dump_cnt; i++) {
4668     @@ -419,6 +420,11 @@ static int ramoops_init_przs(struct device *dev, struct ramoops_context *cxt,
4669     err = PTR_ERR(cxt->przs[i]);
4670     dev_err(dev, "failed to request mem region (0x%zx@0x%llx): %d\n",
4671     cxt->record_size, (unsigned long long)*paddr, err);
4672     +
4673     + while (i > 0) {
4674     + i--;
4675     + persistent_ram_free(cxt->przs[i]);
4676     + }
4677     goto fail_prz;
4678     }
4679     *paddr += cxt->record_size;
4680     @@ -426,7 +432,9 @@ static int ramoops_init_przs(struct device *dev, struct ramoops_context *cxt,
4681    
4682     return 0;
4683     fail_prz:
4684     - ramoops_free_przs(cxt);
4685     + kfree(cxt->przs);
4686     +fail_mem:
4687     + cxt->max_dump_cnt = 0;
4688     return err;
4689     }
4690    
4691     @@ -659,7 +667,6 @@ static int ramoops_remove(struct platform_device *pdev)
4692     struct ramoops_context *cxt = &oops_cxt;
4693    
4694     pstore_unregister(&cxt->pstore);
4695     - cxt->max_dump_cnt = 0;
4696    
4697     kfree(cxt->pstore.buf);
4698     cxt->pstore.bufsize = 0;
4699     diff --git a/fs/pstore/ram_core.c b/fs/pstore/ram_core.c
4700     index 76c3f80efdfa..364d2dffe5a6 100644
4701     --- a/fs/pstore/ram_core.c
4702     +++ b/fs/pstore/ram_core.c
4703     @@ -47,43 +47,10 @@ static inline size_t buffer_start(struct persistent_ram_zone *prz)
4704     return atomic_read(&prz->buffer->start);
4705     }
4706    
4707     -/* increase and wrap the start pointer, returning the old value */
4708     -static size_t buffer_start_add_atomic(struct persistent_ram_zone *prz, size_t a)
4709     -{
4710     - int old;
4711     - int new;
4712     -
4713     - do {
4714     - old = atomic_read(&prz->buffer->start);
4715     - new = old + a;
4716     - while (unlikely(new >= prz->buffer_size))
4717     - new -= prz->buffer_size;
4718     - } while (atomic_cmpxchg(&prz->buffer->start, old, new) != old);
4719     -
4720     - return old;
4721     -}
4722     -
4723     -/* increase the size counter until it hits the max size */
4724     -static void buffer_size_add_atomic(struct persistent_ram_zone *prz, size_t a)
4725     -{
4726     - size_t old;
4727     - size_t new;
4728     -
4729     - if (atomic_read(&prz->buffer->size) == prz->buffer_size)
4730     - return;
4731     -
4732     - do {
4733     - old = atomic_read(&prz->buffer->size);
4734     - new = old + a;
4735     - if (new > prz->buffer_size)
4736     - new = prz->buffer_size;
4737     - } while (atomic_cmpxchg(&prz->buffer->size, old, new) != old);
4738     -}
4739     -
4740     static DEFINE_RAW_SPINLOCK(buffer_lock);
4741    
4742     /* increase and wrap the start pointer, returning the old value */
4743     -static size_t buffer_start_add_locked(struct persistent_ram_zone *prz, size_t a)
4744     +static size_t buffer_start_add(struct persistent_ram_zone *prz, size_t a)
4745     {
4746     int old;
4747     int new;
4748     @@ -103,7 +70,7 @@ static size_t buffer_start_add_locked(struct persistent_ram_zone *prz, size_t a)
4749     }
4750    
4751     /* increase the size counter until it hits the max size */
4752     -static void buffer_size_add_locked(struct persistent_ram_zone *prz, size_t a)
4753     +static void buffer_size_add(struct persistent_ram_zone *prz, size_t a)
4754     {
4755     size_t old;
4756     size_t new;
4757     @@ -124,9 +91,6 @@ exit:
4758     raw_spin_unlock_irqrestore(&buffer_lock, flags);
4759     }
4760    
4761     -static size_t (*buffer_start_add)(struct persistent_ram_zone *, size_t) = buffer_start_add_atomic;
4762     -static void (*buffer_size_add)(struct persistent_ram_zone *, size_t) = buffer_size_add_atomic;
4763     -
4764     static void notrace persistent_ram_encode_rs8(struct persistent_ram_zone *prz,
4765     uint8_t *data, size_t len, uint8_t *ecc)
4766     {
4767     @@ -299,7 +263,7 @@ static void notrace persistent_ram_update(struct persistent_ram_zone *prz,
4768     const void *s, unsigned int start, unsigned int count)
4769     {
4770     struct persistent_ram_buffer *buffer = prz->buffer;
4771     - memcpy(buffer->data + start, s, count);
4772     + memcpy_toio(buffer->data + start, s, count);
4773     persistent_ram_update_ecc(prz, start, count);
4774     }
4775    
4776     @@ -322,8 +286,8 @@ void persistent_ram_save_old(struct persistent_ram_zone *prz)
4777     }
4778    
4779     prz->old_log_size = size;
4780     - memcpy(prz->old_log, &buffer->data[start], size - start);
4781     - memcpy(prz->old_log + size - start, &buffer->data[0], start);
4782     + memcpy_fromio(prz->old_log, &buffer->data[start], size - start);
4783     + memcpy_fromio(prz->old_log + size - start, &buffer->data[0], start);
4784     }
4785    
4786     int notrace persistent_ram_write(struct persistent_ram_zone *prz,
4787     @@ -426,9 +390,6 @@ static void *persistent_ram_iomap(phys_addr_t start, size_t size,
4788     return NULL;
4789     }
4790    
4791     - buffer_start_add = buffer_start_add_locked;
4792     - buffer_size_add = buffer_size_add_locked;
4793     -
4794     if (memtype)
4795     va = ioremap(start, size);
4796     else
4797     diff --git a/fs/super.c b/fs/super.c
4798     index c2ff475c1711..47d11e0462d0 100644
4799     --- a/fs/super.c
4800     +++ b/fs/super.c
4801     @@ -1379,8 +1379,8 @@ int freeze_super(struct super_block *sb)
4802     }
4803     }
4804     /*
4805     - * This is just for debugging purposes so that fs can warn if it
4806     - * sees write activity when frozen is set to SB_FREEZE_COMPLETE.
4807     + * For debugging purposes so that fs can warn if it sees write activity
4808     + * when frozen is set to SB_FREEZE_COMPLETE, and for thaw_super().
4809     */
4810     sb->s_writers.frozen = SB_FREEZE_COMPLETE;
4811     up_write(&sb->s_umount);
4812     @@ -1399,7 +1399,7 @@ int thaw_super(struct super_block *sb)
4813     int error;
4814    
4815     down_write(&sb->s_umount);
4816     - if (sb->s_writers.frozen == SB_UNFROZEN) {
4817     + if (sb->s_writers.frozen != SB_FREEZE_COMPLETE) {
4818     up_write(&sb->s_umount);
4819     return -EINVAL;
4820     }
4821     diff --git a/fs/ubifs/xattr.c b/fs/ubifs/xattr.c
4822     index 11a004114eba..c9ee6f6efa07 100644
4823     --- a/fs/ubifs/xattr.c
4824     +++ b/fs/ubifs/xattr.c
4825     @@ -172,6 +172,7 @@ out_cancel:
4826     host_ui->xattr_cnt -= 1;
4827     host_ui->xattr_size -= CALC_DENT_SIZE(nm->len);
4828     host_ui->xattr_size -= CALC_XATTR_BYTES(size);
4829     + host_ui->xattr_names -= nm->len;
4830     mutex_unlock(&host_ui->ui_mutex);
4831     out_free:
4832     make_bad_inode(inode);
4833     @@ -476,6 +477,7 @@ out_cancel:
4834     host_ui->xattr_cnt += 1;
4835     host_ui->xattr_size += CALC_DENT_SIZE(nm->len);
4836     host_ui->xattr_size += CALC_XATTR_BYTES(ui->data_len);
4837     + host_ui->xattr_names += nm->len;
4838     mutex_unlock(&host_ui->ui_mutex);
4839     ubifs_release_budget(c, &req);
4840     make_bad_inode(inode);
4841     diff --git a/include/dt-bindings/clock/imx6qdl-clock.h b/include/dt-bindings/clock/imx6qdl-clock.h
4842     index 29050337d9d5..da59fd9cdb5e 100644
4843     --- a/include/dt-bindings/clock/imx6qdl-clock.h
4844     +++ b/include/dt-bindings/clock/imx6qdl-clock.h
4845     @@ -269,6 +269,8 @@
4846     #define IMX6QDL_CLK_PRG0_APB 256
4847     #define IMX6QDL_CLK_PRG1_APB 257
4848     #define IMX6QDL_CLK_PRE_AXI 258
4849     -#define IMX6QDL_CLK_END 259
4850     +#define IMX6QDL_CLK_MLB_SEL 259
4851     +#define IMX6QDL_CLK_MLB_PODF 260
4852     +#define IMX6QDL_CLK_END 261
4853    
4854     #endif /* __DT_BINDINGS_CLOCK_IMX6QDL_H */
4855     diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h
4856     index 631ba33bbe9f..32dc0cbd51ca 100644
4857     --- a/include/linux/cpufreq.h
4858     +++ b/include/linux/cpufreq.h
4859     @@ -639,19 +639,19 @@ static inline int cpufreq_table_find_index_al(struct cpufreq_policy *policy,
4860     unsigned int target_freq)
4861     {
4862     struct cpufreq_frequency_table *table = policy->freq_table;
4863     + struct cpufreq_frequency_table *pos, *best = table - 1;
4864     unsigned int freq;
4865     - int i, best = -1;
4866    
4867     - for (i = 0; table[i].frequency != CPUFREQ_TABLE_END; i++) {
4868     - freq = table[i].frequency;
4869     + cpufreq_for_each_valid_entry(pos, table) {
4870     + freq = pos->frequency;
4871    
4872     if (freq >= target_freq)
4873     - return i;
4874     + return pos - table;
4875    
4876     - best = i;
4877     + best = pos;
4878     }
4879    
4880     - return best;
4881     + return best - table;
4882     }
4883    
4884     /* Find lowest freq at or above target in a table in descending order */
4885     @@ -659,28 +659,28 @@ static inline int cpufreq_table_find_index_dl(struct cpufreq_policy *policy,
4886     unsigned int target_freq)
4887     {
4888     struct cpufreq_frequency_table *table = policy->freq_table;
4889     + struct cpufreq_frequency_table *pos, *best = table - 1;
4890     unsigned int freq;
4891     - int i, best = -1;
4892    
4893     - for (i = 0; table[i].frequency != CPUFREQ_TABLE_END; i++) {
4894     - freq = table[i].frequency;
4895     + cpufreq_for_each_valid_entry(pos, table) {
4896     + freq = pos->frequency;
4897    
4898     if (freq == target_freq)
4899     - return i;
4900     + return pos - table;
4901    
4902     if (freq > target_freq) {
4903     - best = i;
4904     + best = pos;
4905     continue;
4906     }
4907    
4908     /* No freq found above target_freq */
4909     - if (best == -1)
4910     - return i;
4911     + if (best == table - 1)
4912     + return pos - table;
4913    
4914     - return best;
4915     + return best - table;
4916     }
4917    
4918     - return best;
4919     + return best - table;
4920     }
4921    
4922     /* Works only on sorted freq-tables */
4923     @@ -700,28 +700,28 @@ static inline int cpufreq_table_find_index_ah(struct cpufreq_policy *policy,
4924     unsigned int target_freq)
4925     {
4926     struct cpufreq_frequency_table *table = policy->freq_table;
4927     + struct cpufreq_frequency_table *pos, *best = table - 1;
4928     unsigned int freq;
4929     - int i, best = -1;
4930    
4931     - for (i = 0; table[i].frequency != CPUFREQ_TABLE_END; i++) {
4932     - freq = table[i].frequency;
4933     + cpufreq_for_each_valid_entry(pos, table) {
4934     + freq = pos->frequency;
4935    
4936     if (freq == target_freq)
4937     - return i;
4938     + return pos - table;
4939    
4940     if (freq < target_freq) {
4941     - best = i;
4942     + best = pos;
4943     continue;
4944     }
4945    
4946     /* No freq found below target_freq */
4947     - if (best == -1)
4948     - return i;
4949     + if (best == table - 1)
4950     + return pos - table;
4951    
4952     - return best;
4953     + return best - table;
4954     }
4955    
4956     - return best;
4957     + return best - table;
4958     }
4959    
4960     /* Find highest freq at or below target in a table in descending order */
4961     @@ -729,19 +729,19 @@ static inline int cpufreq_table_find_index_dh(struct cpufreq_policy *policy,
4962     unsigned int target_freq)
4963     {
4964     struct cpufreq_frequency_table *table = policy->freq_table;
4965     + struct cpufreq_frequency_table *pos, *best = table - 1;
4966     unsigned int freq;
4967     - int i, best = -1;
4968    
4969     - for (i = 0; table[i].frequency != CPUFREQ_TABLE_END; i++) {
4970     - freq = table[i].frequency;
4971     + cpufreq_for_each_valid_entry(pos, table) {
4972     + freq = pos->frequency;
4973    
4974     if (freq <= target_freq)
4975     - return i;
4976     + return pos - table;
4977    
4978     - best = i;
4979     + best = pos;
4980     }
4981    
4982     - return best;
4983     + return best - table;
4984     }
4985    
4986     /* Works only on sorted freq-tables */
4987     @@ -761,32 +761,32 @@ static inline int cpufreq_table_find_index_ac(struct cpufreq_policy *policy,
4988     unsigned int target_freq)
4989     {
4990     struct cpufreq_frequency_table *table = policy->freq_table;
4991     + struct cpufreq_frequency_table *pos, *best = table - 1;
4992     unsigned int freq;
4993     - int i, best = -1;
4994    
4995     - for (i = 0; table[i].frequency != CPUFREQ_TABLE_END; i++) {
4996     - freq = table[i].frequency;
4997     + cpufreq_for_each_valid_entry(pos, table) {
4998     + freq = pos->frequency;
4999    
5000     if (freq == target_freq)
5001     - return i;
5002     + return pos - table;
5003    
5004     if (freq < target_freq) {
5005     - best = i;
5006     + best = pos;
5007     continue;
5008     }
5009    
5010     /* No freq found below target_freq */
5011     - if (best == -1)
5012     - return i;
5013     + if (best == table - 1)
5014     + return pos - table;
5015    
5016     /* Choose the closest freq */
5017     - if (target_freq - table[best].frequency > freq - target_freq)
5018     - return i;
5019     + if (target_freq - best->frequency > freq - target_freq)
5020     + return pos - table;
5021    
5022     - return best;
5023     + return best - table;
5024     }
5025    
5026     - return best;
5027     + return best - table;
5028     }
5029    
5030     /* Find closest freq to target in a table in descending order */
5031     @@ -794,32 +794,32 @@ static inline int cpufreq_table_find_index_dc(struct cpufreq_policy *policy,
5032     unsigned int target_freq)
5033     {
5034     struct cpufreq_frequency_table *table = policy->freq_table;
5035     + struct cpufreq_frequency_table *pos, *best = table - 1;
5036     unsigned int freq;
5037     - int i, best = -1;
5038    
5039     - for (i = 0; table[i].frequency != CPUFREQ_TABLE_END; i++) {
5040     - freq = table[i].frequency;
5041     + cpufreq_for_each_valid_entry(pos, table) {
5042     + freq = pos->frequency;
5043    
5044     if (freq == target_freq)
5045     - return i;
5046     + return pos - table;
5047    
5048     if (freq > target_freq) {
5049     - best = i;
5050     + best = pos;
5051     continue;
5052     }
5053    
5054     /* No freq found above target_freq */
5055     - if (best == -1)
5056     - return i;
5057     + if (best == table - 1)
5058     + return pos - table;
5059    
5060     /* Choose the closest freq */
5061     - if (table[best].frequency - target_freq > target_freq - freq)
5062     - return i;
5063     + if (best->frequency - target_freq > target_freq - freq)
5064     + return pos - table;
5065    
5066     - return best;
5067     + return best - table;
5068     }
5069    
5070     - return best;
5071     + return best - table;
5072     }
5073    
5074     /* Works only on sorted freq-tables */
5075     diff --git a/include/linux/devfreq-event.h b/include/linux/devfreq-event.h
5076     index 0a83a1e648b0..4db00b02ca3f 100644
5077     --- a/include/linux/devfreq-event.h
5078     +++ b/include/linux/devfreq-event.h
5079     @@ -148,11 +148,6 @@ static inline int devfreq_event_reset_event(struct devfreq_event_dev *edev)
5080     return -EINVAL;
5081     }
5082    
5083     -static inline void *devfreq_event_get_drvdata(struct devfreq_event_dev *edev)
5084     -{
5085     - return ERR_PTR(-EINVAL);
5086     -}
5087     -
5088     static inline struct devfreq_event_dev *devfreq_event_get_edev_by_phandle(
5089     struct device *dev, int index)
5090     {
5091     diff --git a/include/linux/irqchip/arm-gic-v3.h b/include/linux/irqchip/arm-gic-v3.h
5092     index 99ac022edc60..3a8610ea6ab7 100644
5093     --- a/include/linux/irqchip/arm-gic-v3.h
5094     +++ b/include/linux/irqchip/arm-gic-v3.h
5095     @@ -290,7 +290,7 @@
5096     #define GITS_BASER_TYPE_SHIFT (56)
5097     #define GITS_BASER_TYPE(r) (((r) >> GITS_BASER_TYPE_SHIFT) & 7)
5098     #define GITS_BASER_ENTRY_SIZE_SHIFT (48)
5099     -#define GITS_BASER_ENTRY_SIZE(r) ((((r) >> GITS_BASER_ENTRY_SIZE_SHIFT) & 0xff) + 1)
5100     +#define GITS_BASER_ENTRY_SIZE(r) ((((r) >> GITS_BASER_ENTRY_SIZE_SHIFT) & 0x1f) + 1)
5101     #define GITS_BASER_SHAREABILITY_SHIFT (10)
5102     #define GITS_BASER_InnerShareable \
5103     GIC_BASER_SHAREABILITY(GITS_BASER, InnerShareable)
5104     diff --git a/include/target/target_core_base.h b/include/target/target_core_base.h
5105     index fb8e3b6febdf..c2119008990a 100644
5106     --- a/include/target/target_core_base.h
5107     +++ b/include/target/target_core_base.h
5108     @@ -177,6 +177,7 @@ enum tcm_sense_reason_table {
5109     TCM_LOGICAL_BLOCK_GUARD_CHECK_FAILED = R(0x15),
5110     TCM_LOGICAL_BLOCK_APP_TAG_CHECK_FAILED = R(0x16),
5111     TCM_LOGICAL_BLOCK_REF_TAG_CHECK_FAILED = R(0x17),
5112     + TCM_COPY_TARGET_DEVICE_NOT_REACHABLE = R(0x18),
5113     #undef R
5114     };
5115    
5116     diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
5117     index 039de34f1521..8b3610c871f2 100644
5118     --- a/kernel/sched/fair.c
5119     +++ b/kernel/sched/fair.c
5120     @@ -456,17 +456,23 @@ static inline int entity_before(struct sched_entity *a,
5121    
5122     static void update_min_vruntime(struct cfs_rq *cfs_rq)
5123     {
5124     + struct sched_entity *curr = cfs_rq->curr;
5125     +
5126     u64 vruntime = cfs_rq->min_vruntime;
5127    
5128     - if (cfs_rq->curr)
5129     - vruntime = cfs_rq->curr->vruntime;
5130     + if (curr) {
5131     + if (curr->on_rq)
5132     + vruntime = curr->vruntime;
5133     + else
5134     + curr = NULL;
5135     + }
5136    
5137     if (cfs_rq->rb_leftmost) {
5138     struct sched_entity *se = rb_entry(cfs_rq->rb_leftmost,
5139     struct sched_entity,
5140     run_node);
5141    
5142     - if (!cfs_rq->curr)
5143     + if (!curr)
5144     vruntime = se->vruntime;
5145     else
5146     vruntime = min_vruntime(vruntime, se->vruntime);
5147     @@ -680,7 +686,14 @@ void init_entity_runnable_average(struct sched_entity *se)
5148     * will definitely be update (after enqueue).
5149     */
5150     sa->period_contrib = 1023;
5151     - sa->load_avg = scale_load_down(se->load.weight);
5152     + /*
5153     + * Tasks are intialized with full load to be seen as heavy tasks until
5154     + * they get a chance to stabilize to their real load level.
5155     + * Group entities are intialized with zero load to reflect the fact that
5156     + * nothing has been attached to the task group yet.
5157     + */
5158     + if (entity_is_task(se))
5159     + sa->load_avg = scale_load_down(se->load.weight);
5160     sa->load_sum = sa->load_avg * LOAD_AVG_MAX;
5161     /*
5162     * At this point, util_avg won't be used in select_task_rq_fair anyway
5163     @@ -3459,9 +3472,10 @@ dequeue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags)
5164     account_entity_dequeue(cfs_rq, se);
5165    
5166     /*
5167     - * Normalize the entity after updating the min_vruntime because the
5168     - * update can refer to the ->curr item and we need to reflect this
5169     - * movement in our normalized position.
5170     + * Normalize after update_curr(); which will also have moved
5171     + * min_vruntime if @se is the one holding it back. But before doing
5172     + * update_min_vruntime() again, which will discount @se's position and
5173     + * can move min_vruntime forward still more.
5174     */
5175     if (!(flags & DEQUEUE_SLEEP))
5176     se->vruntime -= cfs_rq->min_vruntime;
5177     @@ -3469,8 +3483,16 @@ dequeue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags)
5178     /* return excess runtime on last dequeue */
5179     return_cfs_rq_runtime(cfs_rq);
5180    
5181     - update_min_vruntime(cfs_rq);
5182     update_cfs_shares(cfs_rq);
5183     +
5184     + /*
5185     + * Now advance min_vruntime if @se was the entity holding it back,
5186     + * except when: DEQUEUE_SAVE && !DEQUEUE_MOVE, in this case we'll be
5187     + * put back on, and if we advance min_vruntime, we'll be placed back
5188     + * further than we started -- ie. we'll be penalized.
5189     + */
5190     + if ((flags & (DEQUEUE_SAVE | DEQUEUE_MOVE)) == DEQUEUE_SAVE)
5191     + update_min_vruntime(cfs_rq);
5192     }
5193    
5194     /*
5195     diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
5196     index bf168838a029..e72581da9648 100644
5197     --- a/net/sunrpc/xprtsock.c
5198     +++ b/net/sunrpc/xprtsock.c
5199     @@ -473,7 +473,16 @@ static int xs_nospace(struct rpc_task *task)
5200     spin_unlock_bh(&xprt->transport_lock);
5201    
5202     /* Race breaker in case memory is freed before above code is called */
5203     - sk->sk_write_space(sk);
5204     + if (ret == -EAGAIN) {
5205     + struct socket_wq *wq;
5206     +
5207     + rcu_read_lock();
5208     + wq = rcu_dereference(sk->sk_wq);
5209     + set_bit(SOCKWQ_ASYNC_NOSPACE, &wq->flags);
5210     + rcu_read_unlock();
5211     +
5212     + sk->sk_write_space(sk);
5213     + }
5214     return ret;
5215     }
5216    
5217     diff --git a/sound/pci/hda/dell_wmi_helper.c b/sound/pci/hda/dell_wmi_helper.c
5218     index 9c22f95838ef..19d41da79f93 100644
5219     --- a/sound/pci/hda/dell_wmi_helper.c
5220     +++ b/sound/pci/hda/dell_wmi_helper.c
5221     @@ -49,7 +49,7 @@ static void alc_fixup_dell_wmi(struct hda_codec *codec,
5222     removefunc = true;
5223     if (dell_led_set_func(DELL_LED_MICMUTE, false) >= 0) {
5224     dell_led_value = 0;
5225     - if (spec->gen.num_adc_nids > 1)
5226     + if (spec->gen.num_adc_nids > 1 && !spec->gen.dyn_adc_switch)
5227     codec_dbg(codec, "Skipping micmute LED control due to several ADCs");
5228     else {
5229     dell_old_cap_hook = spec->gen.cap_sync_hook;
5230     diff --git a/sound/pci/hda/thinkpad_helper.c b/sound/pci/hda/thinkpad_helper.c
5231     index f0955fd7a2e7..6a23302297c9 100644
5232     --- a/sound/pci/hda/thinkpad_helper.c
5233     +++ b/sound/pci/hda/thinkpad_helper.c
5234     @@ -62,7 +62,7 @@ static void hda_fixup_thinkpad_acpi(struct hda_codec *codec,
5235     removefunc = false;
5236     }
5237     if (led_set_func(TPACPI_LED_MICMUTE, false) >= 0) {
5238     - if (spec->num_adc_nids > 1)
5239     + if (spec->num_adc_nids > 1 && !spec->dyn_adc_switch)
5240     codec_dbg(codec,
5241     "Skipping micmute LED control due to several ADCs");
5242     else {
5243     diff --git a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
5244     index 8ff6c6a61291..c9c8dc330116 100644
5245     --- a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
5246     +++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
5247     @@ -89,6 +89,7 @@ struct intel_pt_decoder {
5248     bool pge;
5249     bool have_tma;
5250     bool have_cyc;
5251     + bool fixup_last_mtc;
5252     uint64_t pos;
5253     uint64_t last_ip;
5254     uint64_t ip;
5255     @@ -584,10 +585,31 @@ struct intel_pt_calc_cyc_to_tsc_info {
5256     uint64_t tsc_timestamp;
5257     uint64_t timestamp;
5258     bool have_tma;
5259     + bool fixup_last_mtc;
5260     bool from_mtc;
5261     double cbr_cyc_to_tsc;
5262     };
5263    
5264     +/*
5265     + * MTC provides a 8-bit slice of CTC but the TMA packet only provides the lower
5266     + * 16 bits of CTC. If mtc_shift > 8 then some of the MTC bits are not in the CTC
5267     + * provided by the TMA packet. Fix-up the last_mtc calculated from the TMA
5268     + * packet by copying the missing bits from the current MTC assuming the least
5269     + * difference between the two, and that the current MTC comes after last_mtc.
5270     + */
5271     +static void intel_pt_fixup_last_mtc(uint32_t mtc, int mtc_shift,
5272     + uint32_t *last_mtc)
5273     +{
5274     + uint32_t first_missing_bit = 1U << (16 - mtc_shift);
5275     + uint32_t mask = ~(first_missing_bit - 1);
5276     +
5277     + *last_mtc |= mtc & mask;
5278     + if (*last_mtc >= mtc) {
5279     + *last_mtc -= first_missing_bit;
5280     + *last_mtc &= 0xff;
5281     + }
5282     +}
5283     +
5284     static int intel_pt_calc_cyc_cb(struct intel_pt_pkt_info *pkt_info)
5285     {
5286     struct intel_pt_decoder *decoder = pkt_info->decoder;
5287     @@ -617,6 +639,11 @@ static int intel_pt_calc_cyc_cb(struct intel_pt_pkt_info *pkt_info)
5288     return 0;
5289    
5290     mtc = pkt_info->packet.payload;
5291     + if (decoder->mtc_shift > 8 && data->fixup_last_mtc) {
5292     + data->fixup_last_mtc = false;
5293     + intel_pt_fixup_last_mtc(mtc, decoder->mtc_shift,
5294     + &data->last_mtc);
5295     + }
5296     if (mtc > data->last_mtc)
5297     mtc_delta = mtc - data->last_mtc;
5298     else
5299     @@ -685,6 +712,7 @@ static int intel_pt_calc_cyc_cb(struct intel_pt_pkt_info *pkt_info)
5300    
5301     data->ctc_delta = 0;
5302     data->have_tma = true;
5303     + data->fixup_last_mtc = true;
5304    
5305     return 0;
5306    
5307     @@ -751,6 +779,7 @@ static void intel_pt_calc_cyc_to_tsc(struct intel_pt_decoder *decoder,
5308     .tsc_timestamp = decoder->tsc_timestamp,
5309     .timestamp = decoder->timestamp,
5310     .have_tma = decoder->have_tma,
5311     + .fixup_last_mtc = decoder->fixup_last_mtc,
5312     .from_mtc = from_mtc,
5313     .cbr_cyc_to_tsc = 0,
5314     };
5315     @@ -1241,6 +1270,7 @@ static void intel_pt_calc_tma(struct intel_pt_decoder *decoder)
5316     }
5317     decoder->ctc_delta = 0;
5318     decoder->have_tma = true;
5319     + decoder->fixup_last_mtc = true;
5320     intel_pt_log("CTC timestamp " x64_fmt " last MTC %#x CTC rem %#x\n",
5321     decoder->ctc_timestamp, decoder->last_mtc, ctc_rem);
5322     }
5323     @@ -1255,6 +1285,12 @@ static void intel_pt_calc_mtc_timestamp(struct intel_pt_decoder *decoder)
5324    
5325     mtc = decoder->packet.payload;
5326    
5327     + if (decoder->mtc_shift > 8 && decoder->fixup_last_mtc) {
5328     + decoder->fixup_last_mtc = false;
5329     + intel_pt_fixup_last_mtc(mtc, decoder->mtc_shift,
5330     + &decoder->last_mtc);
5331     + }
5332     +
5333     if (mtc > decoder->last_mtc)
5334     mtc_delta = mtc - decoder->last_mtc;
5335     else
5336     @@ -1323,6 +1359,8 @@ static void intel_pt_calc_cyc_timestamp(struct intel_pt_decoder *decoder)
5337     timestamp, decoder->timestamp);
5338     else
5339     decoder->timestamp = timestamp;
5340     +
5341     + decoder->timestamp_insn_cnt = 0;
5342     }
5343    
5344     /* Walk PSB+ packets when already in sync. */
5345     diff --git a/tools/perf/util/intel-pt.c b/tools/perf/util/intel-pt.c
5346     index 551ff6f640be..b2878d2b2d67 100644
5347     --- a/tools/perf/util/intel-pt.c
5348     +++ b/tools/perf/util/intel-pt.c
5349     @@ -241,7 +241,7 @@ static int intel_pt_get_trace(struct intel_pt_buffer *b, void *data)
5350     }
5351    
5352     queue = &ptq->pt->queues.queue_array[ptq->queue_nr];
5353     -
5354     +next:
5355     buffer = auxtrace_buffer__next(queue, buffer);
5356     if (!buffer) {
5357     if (old_buffer)
5358     @@ -264,9 +264,6 @@ static int intel_pt_get_trace(struct intel_pt_buffer *b, void *data)
5359     intel_pt_do_fix_overlap(ptq->pt, old_buffer, buffer))
5360     return -ENOMEM;
5361    
5362     - if (old_buffer)
5363     - auxtrace_buffer__drop_data(old_buffer);
5364     -
5365     if (buffer->use_data) {
5366     b->len = buffer->use_size;
5367     b->buf = buffer->use_data;
5368     @@ -276,6 +273,16 @@ static int intel_pt_get_trace(struct intel_pt_buffer *b, void *data)
5369     }
5370     b->ref_timestamp = buffer->reference;
5371    
5372     + /*
5373     + * If in snapshot mode and the buffer has no usable data, get next
5374     + * buffer and again check overlap against old_buffer.
5375     + */
5376     + if (ptq->pt->snapshot_mode && !b->len)
5377     + goto next;
5378     +
5379     + if (old_buffer)
5380     + auxtrace_buffer__drop_data(old_buffer);
5381     +
5382     if (!old_buffer || ptq->pt->sampling_mode || (ptq->pt->snapshot_mode &&
5383     !buffer->consecutive)) {
5384     b->consecutive = false;
5385     diff --git a/tools/spi/spidev_test.c b/tools/spi/spidev_test.c
5386     index 8a73d8185316..f3825b676e38 100644
5387     --- a/tools/spi/spidev_test.c
5388     +++ b/tools/spi/spidev_test.c
5389     @@ -284,7 +284,7 @@ static void parse_opts(int argc, char *argv[])
5390    
5391     static void transfer_escaped_string(int fd, char *str)
5392     {
5393     - size_t size = strlen(str + 1);
5394     + size_t size = strlen(str);
5395     uint8_t *tx;
5396     uint8_t *rx;
5397