Magellan Linux

Annotation of /trunk/kernel-alx/patches-4.4/0118-4.4.19-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2827 - (hide annotations) (download)
Tue Sep 13 07:18:26 2016 UTC (7 years, 8 months ago) by niro
File size: 187821 byte(s)
-linux-4.4.19
1 niro 2827 diff --git a/Documentation/module-signing.txt b/Documentation/module-signing.txt
2     index a78bf1ffa68c..39b7f612c418 100644
3     --- a/Documentation/module-signing.txt
4     +++ b/Documentation/module-signing.txt
5     @@ -271,3 +271,9 @@ Since the private key is used to sign modules, viruses and malware could use
6     the private key to sign modules and compromise the operating system. The
7     private key must be either destroyed or moved to a secure location and not kept
8     in the root node of the kernel source tree.
9     +
10     +If you use the same private key to sign modules for multiple kernel
11     +configurations, you must ensure that the module version information is
12     +sufficient to prevent loading a module into a different kernel. Either
13     +set CONFIG_MODVERSIONS=y or ensure that each configuration has a different
14     +kernel release string by changing EXTRAVERSION or CONFIG_LOCALVERSION.
15     diff --git a/Makefile b/Makefile
16     index eaedea88a8a7..695c64ec160c 100644
17     --- a/Makefile
18     +++ b/Makefile
19     @@ -1,6 +1,6 @@
20     VERSION = 4
21     PATCHLEVEL = 4
22     -SUBLEVEL = 18
23     +SUBLEVEL = 19
24     EXTRAVERSION =
25     NAME = Blurry Fish Butt
26    
27     diff --git a/arch/arc/include/asm/pgtable.h b/arch/arc/include/asm/pgtable.h
28     index 57af2f05ae84..3cab04255ae0 100644
29     --- a/arch/arc/include/asm/pgtable.h
30     +++ b/arch/arc/include/asm/pgtable.h
31     @@ -110,7 +110,7 @@
32     #define ___DEF (_PAGE_PRESENT | _PAGE_CACHEABLE)
33    
34     /* Set of bits not changed in pte_modify */
35     -#define _PAGE_CHG_MASK (PAGE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY)
36     +#define _PAGE_CHG_MASK (PAGE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY | _PAGE_SPECIAL)
37    
38     /* More Abbrevaited helpers */
39     #define PAGE_U_NONE __pgprot(___DEF)
40     diff --git a/arch/arm/boot/dts/sun4i-a10-a1000.dts b/arch/arm/boot/dts/sun4i-a10-a1000.dts
41     index 97570cb7f2fc..1d23527d4ecf 100644
42     --- a/arch/arm/boot/dts/sun4i-a10-a1000.dts
43     +++ b/arch/arm/boot/dts/sun4i-a10-a1000.dts
44     @@ -84,6 +84,7 @@
45     regulator-name = "emac-3v3";
46     regulator-min-microvolt = <3300000>;
47     regulator-max-microvolt = <3300000>;
48     + startup-delay-us = <20000>;
49     enable-active-high;
50     gpio = <&pio 7 15 GPIO_ACTIVE_HIGH>;
51     };
52     diff --git a/arch/arm/boot/dts/sun4i-a10-hackberry.dts b/arch/arm/boot/dts/sun4i-a10-hackberry.dts
53     index 2b17c5199151..6de83a6187d0 100644
54     --- a/arch/arm/boot/dts/sun4i-a10-hackberry.dts
55     +++ b/arch/arm/boot/dts/sun4i-a10-hackberry.dts
56     @@ -66,6 +66,7 @@
57     regulator-name = "emac-3v3";
58     regulator-min-microvolt = <3300000>;
59     regulator-max-microvolt = <3300000>;
60     + startup-delay-us = <20000>;
61     enable-active-high;
62     gpio = <&pio 7 19 GPIO_ACTIVE_HIGH>;
63     };
64     diff --git a/arch/arm/boot/dts/sun4i-a10-jesurun-q5.dts b/arch/arm/boot/dts/sun4i-a10-jesurun-q5.dts
65     index 7afc7a64eef1..e28f080b1fd5 100644
66     --- a/arch/arm/boot/dts/sun4i-a10-jesurun-q5.dts
67     +++ b/arch/arm/boot/dts/sun4i-a10-jesurun-q5.dts
68     @@ -80,6 +80,7 @@
69     regulator-name = "emac-3v3";
70     regulator-min-microvolt = <3300000>;
71     regulator-max-microvolt = <3300000>;
72     + startup-delay-us = <20000>;
73     enable-active-high;
74     gpio = <&pio 7 19 GPIO_ACTIVE_HIGH>; /* PH19 */
75     };
76     diff --git a/arch/arm/boot/dts/sun5i-a10s-wobo-i5.dts b/arch/arm/boot/dts/sun5i-a10s-wobo-i5.dts
77     index 9fea918f949e..39731a78f087 100644
78     --- a/arch/arm/boot/dts/sun5i-a10s-wobo-i5.dts
79     +++ b/arch/arm/boot/dts/sun5i-a10s-wobo-i5.dts
80     @@ -79,6 +79,7 @@
81     regulator-name = "emac-3v3";
82     regulator-min-microvolt = <3300000>;
83     regulator-max-microvolt = <3300000>;
84     + startup-delay-us = <20000>;
85     enable-active-high;
86     gpio = <&pio 0 2 GPIO_ACTIVE_HIGH>;
87     };
88     diff --git a/arch/arm64/boot/dts/rockchip/rk3368.dtsi b/arch/arm64/boot/dts/rockchip/rk3368.dtsi
89     index cc093a482aa4..8fe39e1b680e 100644
90     --- a/arch/arm64/boot/dts/rockchip/rk3368.dtsi
91     +++ b/arch/arm64/boot/dts/rockchip/rk3368.dtsi
92     @@ -517,7 +517,7 @@
93     #address-cells = <0>;
94    
95     reg = <0x0 0xffb71000 0x0 0x1000>,
96     - <0x0 0xffb72000 0x0 0x1000>,
97     + <0x0 0xffb72000 0x0 0x2000>,
98     <0x0 0xffb74000 0x0 0x2000>,
99     <0x0 0xffb76000 0x0 0x2000>;
100     interrupts = <GIC_PPI 9
101     diff --git a/arch/arm64/include/asm/ptrace.h b/arch/arm64/include/asm/ptrace.h
102     index a307eb6e7fa8..7f94755089e2 100644
103     --- a/arch/arm64/include/asm/ptrace.h
104     +++ b/arch/arm64/include/asm/ptrace.h
105     @@ -117,6 +117,8 @@ struct pt_regs {
106     };
107     u64 orig_x0;
108     u64 syscallno;
109     + u64 orig_addr_limit;
110     + u64 unused; // maintain 16 byte alignment
111     };
112    
113     #define arch_has_single_step() (1)
114     diff --git a/arch/arm64/kernel/asm-offsets.c b/arch/arm64/kernel/asm-offsets.c
115     index 25de8b244961..087cf9a65359 100644
116     --- a/arch/arm64/kernel/asm-offsets.c
117     +++ b/arch/arm64/kernel/asm-offsets.c
118     @@ -58,6 +58,7 @@ int main(void)
119     DEFINE(S_PC, offsetof(struct pt_regs, pc));
120     DEFINE(S_ORIG_X0, offsetof(struct pt_regs, orig_x0));
121     DEFINE(S_SYSCALLNO, offsetof(struct pt_regs, syscallno));
122     + DEFINE(S_ORIG_ADDR_LIMIT, offsetof(struct pt_regs, orig_addr_limit));
123     DEFINE(S_FRAME_SIZE, sizeof(struct pt_regs));
124     BLANK();
125     DEFINE(MM_CONTEXT_ID, offsetof(struct mm_struct, context.id.counter));
126     diff --git a/arch/arm64/kernel/debug-monitors.c b/arch/arm64/kernel/debug-monitors.c
127     index c1492ba1f6d1..e51f27ac13fd 100644
128     --- a/arch/arm64/kernel/debug-monitors.c
129     +++ b/arch/arm64/kernel/debug-monitors.c
130     @@ -152,7 +152,6 @@ static int debug_monitors_init(void)
131     /* Clear the OS lock. */
132     on_each_cpu(clear_os_lock, NULL, 1);
133     isb();
134     - local_dbg_enable();
135    
136     /* Register hotplug handler. */
137     __register_cpu_notifier(&os_lock_nb);
138     diff --git a/arch/arm64/kernel/entry.S b/arch/arm64/kernel/entry.S
139     index 7ed3d75f6304..5a3753d09e20 100644
140     --- a/arch/arm64/kernel/entry.S
141     +++ b/arch/arm64/kernel/entry.S
142     @@ -27,6 +27,7 @@
143     #include <asm/cpufeature.h>
144     #include <asm/errno.h>
145     #include <asm/esr.h>
146     +#include <asm/memory.h>
147     #include <asm/thread_info.h>
148     #include <asm/unistd.h>
149    
150     @@ -93,7 +94,13 @@
151     disable_step_tsk x19, x20 // exceptions when scheduling.
152     .else
153     add x21, sp, #S_FRAME_SIZE
154     - .endif
155     + get_thread_info tsk
156     + /* Save the task's original addr_limit and set USER_DS (TASK_SIZE_64) */
157     + ldr x20, [tsk, #TI_ADDR_LIMIT]
158     + str x20, [sp, #S_ORIG_ADDR_LIMIT]
159     + mov x20, #TASK_SIZE_64
160     + str x20, [tsk, #TI_ADDR_LIMIT]
161     + .endif /* \el == 0 */
162     mrs x22, elr_el1
163     mrs x23, spsr_el1
164     stp lr, x21, [sp, #S_LR]
165     @@ -117,6 +124,12 @@
166     .endm
167    
168     .macro kernel_exit, el
169     + .if \el != 0
170     + /* Restore the task's original addr_limit. */
171     + ldr x20, [sp, #S_ORIG_ADDR_LIMIT]
172     + str x20, [tsk, #TI_ADDR_LIMIT]
173     + .endif
174     +
175     ldp x21, x22, [sp, #S_PC] // load ELR, SPSR
176     .if \el == 0
177     ct_user_enter
178     diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c
179     index b1adc51b2c2e..f3c3d8fee5ba 100644
180     --- a/arch/arm64/kernel/smp.c
181     +++ b/arch/arm64/kernel/smp.c
182     @@ -188,7 +188,6 @@ asmlinkage void secondary_start_kernel(void)
183     set_cpu_online(cpu, true);
184     complete(&cpu_running);
185    
186     - local_dbg_enable();
187     local_irq_enable();
188     local_async_enable();
189    
190     @@ -334,8 +333,8 @@ void __init smp_cpus_done(unsigned int max_cpus)
191    
192     void __init smp_prepare_boot_cpu(void)
193     {
194     - cpuinfo_store_boot_cpu();
195     set_my_cpu_offset(per_cpu_offset(smp_processor_id()));
196     + cpuinfo_store_boot_cpu();
197     }
198    
199     static u64 __init of_get_cpu_mpidr(struct device_node *dn)
200     diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c
201     index 116ad654dd59..653735a8c58a 100644
202     --- a/arch/arm64/mm/mmu.c
203     +++ b/arch/arm64/mm/mmu.c
204     @@ -652,9 +652,9 @@ void *__init fixmap_remap_fdt(phys_addr_t dt_phys)
205     /*
206     * Check whether the physical FDT address is set and meets the minimum
207     * alignment requirement. Since we are relying on MIN_FDT_ALIGN to be
208     - * at least 8 bytes so that we can always access the size field of the
209     - * FDT header after mapping the first chunk, double check here if that
210     - * is indeed the case.
211     + * at least 8 bytes so that we can always access the magic and size
212     + * fields of the FDT header after mapping the first chunk, double check
213     + * here if that is indeed the case.
214     */
215     BUILD_BUG_ON(MIN_FDT_ALIGN < 8);
216     if (!dt_phys || dt_phys % MIN_FDT_ALIGN)
217     @@ -682,7 +682,7 @@ void *__init fixmap_remap_fdt(phys_addr_t dt_phys)
218     create_mapping(round_down(dt_phys, SWAPPER_BLOCK_SIZE), dt_virt_base,
219     SWAPPER_BLOCK_SIZE, prot);
220    
221     - if (fdt_check_header(dt_virt) != 0)
222     + if (fdt_magic(dt_virt) != FDT_MAGIC)
223     return NULL;
224    
225     size = fdt_totalsize(dt_virt);
226     diff --git a/arch/arm64/mm/proc.S b/arch/arm64/mm/proc.S
227     index b8f04b3f2786..1f6bb29ca53b 100644
228     --- a/arch/arm64/mm/proc.S
229     +++ b/arch/arm64/mm/proc.S
230     @@ -156,6 +156,8 @@ ENTRY(__cpu_setup)
231     msr cpacr_el1, x0 // Enable FP/ASIMD
232     mov x0, #1 << 12 // Reset mdscr_el1 and disable
233     msr mdscr_el1, x0 // access to the DCC from EL0
234     + isb // Unmask debug exceptions now,
235     + enable_dbg // since this is per-cpu
236     reset_pmuserenr_el0 x0 // Disable PMU access from EL0
237     /*
238     * Memory region attributes for LPAE:
239     diff --git a/arch/metag/include/asm/cmpxchg_lnkget.h b/arch/metag/include/asm/cmpxchg_lnkget.h
240     index 0154e2807ebb..2369ad394876 100644
241     --- a/arch/metag/include/asm/cmpxchg_lnkget.h
242     +++ b/arch/metag/include/asm/cmpxchg_lnkget.h
243     @@ -73,7 +73,7 @@ static inline unsigned long __cmpxchg_u32(volatile int *m, unsigned long old,
244     " DCACHE [%2], %0\n"
245     #endif
246     "2:\n"
247     - : "=&d" (temp), "=&da" (retval)
248     + : "=&d" (temp), "=&d" (retval)
249     : "da" (m), "bd" (old), "da" (new)
250     : "cc"
251     );
252     diff --git a/arch/mips/kernel/csrc-r4k.c b/arch/mips/kernel/csrc-r4k.c
253     index 1f910563fdf6..d76275da54cb 100644
254     --- a/arch/mips/kernel/csrc-r4k.c
255     +++ b/arch/mips/kernel/csrc-r4k.c
256     @@ -23,7 +23,7 @@ static struct clocksource clocksource_mips = {
257     .flags = CLOCK_SOURCE_IS_CONTINUOUS,
258     };
259    
260     -static u64 notrace r4k_read_sched_clock(void)
261     +static u64 __maybe_unused notrace r4k_read_sched_clock(void)
262     {
263     return read_c0_count();
264     }
265     @@ -82,7 +82,9 @@ int __init init_r4k_clocksource(void)
266    
267     clocksource_register_hz(&clocksource_mips, mips_hpt_frequency);
268    
269     +#ifndef CONFIG_CPU_FREQ
270     sched_clock_register(r4k_read_sched_clock, 32, mips_hpt_frequency);
271     +#endif
272    
273     return 0;
274     }
275     diff --git a/arch/mips/kvm/emulate.c b/arch/mips/kvm/emulate.c
276     index dc10c77b7500..d6476d11212e 100644
277     --- a/arch/mips/kvm/emulate.c
278     +++ b/arch/mips/kvm/emulate.c
279     @@ -1629,8 +1629,14 @@ enum emulation_result kvm_mips_emulate_cache(uint32_t inst, uint32_t *opc,
280    
281     preempt_disable();
282     if (KVM_GUEST_KSEGX(va) == KVM_GUEST_KSEG0) {
283     - if (kvm_mips_host_tlb_lookup(vcpu, va) < 0)
284     - kvm_mips_handle_kseg0_tlb_fault(va, vcpu);
285     + if (kvm_mips_host_tlb_lookup(vcpu, va) < 0 &&
286     + kvm_mips_handle_kseg0_tlb_fault(va, vcpu)) {
287     + kvm_err("%s: handling mapped kseg0 tlb fault for %lx, vcpu: %p, ASID: %#lx\n",
288     + __func__, va, vcpu, read_c0_entryhi());
289     + er = EMULATE_FAIL;
290     + preempt_enable();
291     + goto done;
292     + }
293     } else if ((KVM_GUEST_KSEGX(va) < KVM_GUEST_KSEG0) ||
294     KVM_GUEST_KSEGX(va) == KVM_GUEST_KSEG23) {
295     int index;
296     @@ -1665,14 +1671,19 @@ enum emulation_result kvm_mips_emulate_cache(uint32_t inst, uint32_t *opc,
297     run, vcpu);
298     preempt_enable();
299     goto dont_update_pc;
300     - } else {
301     - /*
302     - * We fault an entry from the guest tlb to the
303     - * shadow host TLB
304     - */
305     - kvm_mips_handle_mapped_seg_tlb_fault(vcpu, tlb,
306     - NULL,
307     - NULL);
308     + }
309     + /*
310     + * We fault an entry from the guest tlb to the
311     + * shadow host TLB
312     + */
313     + if (kvm_mips_handle_mapped_seg_tlb_fault(vcpu, tlb,
314     + NULL, NULL)) {
315     + kvm_err("%s: handling mapped seg tlb fault for %lx, index: %u, vcpu: %p, ASID: %#lx\n",
316     + __func__, va, index, vcpu,
317     + read_c0_entryhi());
318     + er = EMULATE_FAIL;
319     + preempt_enable();
320     + goto done;
321     }
322     }
323     } else {
324     @@ -2633,8 +2644,13 @@ enum emulation_result kvm_mips_handle_tlbmiss(unsigned long cause,
325     * OK we have a Guest TLB entry, now inject it into the
326     * shadow host TLB
327     */
328     - kvm_mips_handle_mapped_seg_tlb_fault(vcpu, tlb, NULL,
329     - NULL);
330     + if (kvm_mips_handle_mapped_seg_tlb_fault(vcpu, tlb,
331     + NULL, NULL)) {
332     + kvm_err("%s: handling mapped seg tlb fault for %lx, index: %u, vcpu: %p, ASID: %#lx\n",
333     + __func__, va, index, vcpu,
334     + read_c0_entryhi());
335     + er = EMULATE_FAIL;
336     + }
337     }
338     }
339    
340     diff --git a/arch/mips/kvm/tlb.c b/arch/mips/kvm/tlb.c
341     index aed0ac2a4972..7a7ed9ca01bb 100644
342     --- a/arch/mips/kvm/tlb.c
343     +++ b/arch/mips/kvm/tlb.c
344     @@ -276,7 +276,7 @@ int kvm_mips_handle_kseg0_tlb_fault(unsigned long badvaddr,
345     }
346    
347     gfn = (KVM_GUEST_CPHYSADDR(badvaddr) >> PAGE_SHIFT);
348     - if (gfn >= kvm->arch.guest_pmap_npages) {
349     + if ((gfn | 1) >= kvm->arch.guest_pmap_npages) {
350     kvm_err("%s: Invalid gfn: %#llx, BadVaddr: %#lx\n", __func__,
351     gfn, badvaddr);
352     kvm_mips_dump_host_tlbs();
353     @@ -361,25 +361,39 @@ int kvm_mips_handle_mapped_seg_tlb_fault(struct kvm_vcpu *vcpu,
354     unsigned long entryhi = 0, entrylo0 = 0, entrylo1 = 0;
355     struct kvm *kvm = vcpu->kvm;
356     pfn_t pfn0, pfn1;
357     -
358     - if ((tlb->tlb_hi & VPN2_MASK) == 0) {
359     - pfn0 = 0;
360     - pfn1 = 0;
361     - } else {
362     - if (kvm_mips_map_page(kvm, mips3_tlbpfn_to_paddr(tlb->tlb_lo0)
363     - >> PAGE_SHIFT) < 0)
364     - return -1;
365     -
366     - if (kvm_mips_map_page(kvm, mips3_tlbpfn_to_paddr(tlb->tlb_lo1)
367     - >> PAGE_SHIFT) < 0)
368     - return -1;
369     -
370     - pfn0 = kvm->arch.guest_pmap[mips3_tlbpfn_to_paddr(tlb->tlb_lo0)
371     - >> PAGE_SHIFT];
372     - pfn1 = kvm->arch.guest_pmap[mips3_tlbpfn_to_paddr(tlb->tlb_lo1)
373     - >> PAGE_SHIFT];
374     + gfn_t gfn0, gfn1;
375     + long tlb_lo[2];
376     +
377     + tlb_lo[0] = tlb->tlb_lo0;
378     + tlb_lo[1] = tlb->tlb_lo1;
379     +
380     + /*
381     + * The commpage address must not be mapped to anything else if the guest
382     + * TLB contains entries nearby, or commpage accesses will break.
383     + */
384     + if (!((tlb->tlb_hi ^ KVM_GUEST_COMMPAGE_ADDR) &
385     + VPN2_MASK & (PAGE_MASK << 1)))
386     + tlb_lo[(KVM_GUEST_COMMPAGE_ADDR >> PAGE_SHIFT) & 1] = 0;
387     +
388     + gfn0 = mips3_tlbpfn_to_paddr(tlb_lo[0]) >> PAGE_SHIFT;
389     + gfn1 = mips3_tlbpfn_to_paddr(tlb_lo[1]) >> PAGE_SHIFT;
390     + if (gfn0 >= kvm->arch.guest_pmap_npages ||
391     + gfn1 >= kvm->arch.guest_pmap_npages) {
392     + kvm_err("%s: Invalid gfn: [%#llx, %#llx], EHi: %#lx\n",
393     + __func__, gfn0, gfn1, tlb->tlb_hi);
394     + kvm_mips_dump_guest_tlbs(vcpu);
395     + return -1;
396     }
397    
398     + if (kvm_mips_map_page(kvm, gfn0) < 0)
399     + return -1;
400     +
401     + if (kvm_mips_map_page(kvm, gfn1) < 0)
402     + return -1;
403     +
404     + pfn0 = kvm->arch.guest_pmap[gfn0];
405     + pfn1 = kvm->arch.guest_pmap[gfn1];
406     +
407     if (hpa0)
408     *hpa0 = pfn0 << PAGE_SHIFT;
409    
410     @@ -391,9 +405,9 @@ int kvm_mips_handle_mapped_seg_tlb_fault(struct kvm_vcpu *vcpu,
411     kvm_mips_get_kernel_asid(vcpu) :
412     kvm_mips_get_user_asid(vcpu));
413     entrylo0 = mips3_paddr_to_tlbpfn(pfn0 << PAGE_SHIFT) | (0x3 << 3) |
414     - (tlb->tlb_lo0 & MIPS3_PG_D) | (tlb->tlb_lo0 & MIPS3_PG_V);
415     + (tlb_lo[0] & MIPS3_PG_D) | (tlb_lo[0] & MIPS3_PG_V);
416     entrylo1 = mips3_paddr_to_tlbpfn(pfn1 << PAGE_SHIFT) | (0x3 << 3) |
417     - (tlb->tlb_lo1 & MIPS3_PG_D) | (tlb->tlb_lo1 & MIPS3_PG_V);
418     + (tlb_lo[1] & MIPS3_PG_D) | (tlb_lo[1] & MIPS3_PG_V);
419    
420     kvm_debug("@ %#lx tlb_lo0: 0x%08lx tlb_lo1: 0x%08lx\n", vcpu->arch.pc,
421     tlb->tlb_lo0, tlb->tlb_lo1);
422     @@ -794,10 +808,16 @@ uint32_t kvm_get_inst(uint32_t *opc, struct kvm_vcpu *vcpu)
423     local_irq_restore(flags);
424     return KVM_INVALID_INST;
425     }
426     - kvm_mips_handle_mapped_seg_tlb_fault(vcpu,
427     - &vcpu->arch.
428     - guest_tlb[index],
429     - NULL, NULL);
430     + if (kvm_mips_handle_mapped_seg_tlb_fault(vcpu,
431     + &vcpu->arch.guest_tlb[index],
432     + NULL, NULL)) {
433     + kvm_err("%s: handling mapped seg tlb fault failed for %p, index: %u, vcpu: %p, ASID: %#lx\n",
434     + __func__, opc, index, vcpu,
435     + read_c0_entryhi());
436     + kvm_mips_dump_guest_tlbs(vcpu);
437     + local_irq_restore(flags);
438     + return KVM_INVALID_INST;
439     + }
440     inst = *(opc);
441     }
442     local_irq_restore(flags);
443     diff --git a/arch/mips/loongson64/loongson-3/hpet.c b/arch/mips/loongson64/loongson-3/hpet.c
444     index a2631a52ca99..444802e78554 100644
445     --- a/arch/mips/loongson64/loongson-3/hpet.c
446     +++ b/arch/mips/loongson64/loongson-3/hpet.c
447     @@ -13,8 +13,8 @@
448     #define SMBUS_PCI_REG64 0x64
449     #define SMBUS_PCI_REGB4 0xb4
450    
451     -#define HPET_MIN_CYCLES 64
452     -#define HPET_MIN_PROG_DELTA (HPET_MIN_CYCLES + (HPET_MIN_CYCLES >> 1))
453     +#define HPET_MIN_CYCLES 16
454     +#define HPET_MIN_PROG_DELTA (HPET_MIN_CYCLES * 12)
455    
456     static DEFINE_SPINLOCK(hpet_lock);
457     DEFINE_PER_CPU(struct clock_event_device, hpet_clockevent_device);
458     @@ -157,14 +157,14 @@ static int hpet_tick_resume(struct clock_event_device *evt)
459     static int hpet_next_event(unsigned long delta,
460     struct clock_event_device *evt)
461     {
462     - unsigned int cnt;
463     - int res;
464     + u32 cnt;
465     + s32 res;
466    
467     cnt = hpet_read(HPET_COUNTER);
468     - cnt += delta;
469     + cnt += (u32) delta;
470     hpet_write(HPET_T0_CMP, cnt);
471    
472     - res = (int)(cnt - hpet_read(HPET_COUNTER));
473     + res = (s32)(cnt - hpet_read(HPET_COUNTER));
474    
475     return res < HPET_MIN_CYCLES ? -ETIME : 0;
476     }
477     @@ -230,7 +230,7 @@ void __init setup_hpet_timer(void)
478    
479     cd = &per_cpu(hpet_clockevent_device, cpu);
480     cd->name = "hpet";
481     - cd->rating = 320;
482     + cd->rating = 100;
483     cd->features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT;
484     cd->set_state_shutdown = hpet_set_state_shutdown;
485     cd->set_state_periodic = hpet_set_state_periodic;
486     diff --git a/arch/mips/mm/uasm-mips.c b/arch/mips/mm/uasm-mips.c
487     index b4a837893562..5abe51cad899 100644
488     --- a/arch/mips/mm/uasm-mips.c
489     +++ b/arch/mips/mm/uasm-mips.c
490     @@ -65,7 +65,7 @@ static struct insn insn_table[] = {
491     #ifndef CONFIG_CPU_MIPSR6
492     { insn_cache, M(cache_op, 0, 0, 0, 0, 0), RS | RT | SIMM },
493     #else
494     - { insn_cache, M6(cache_op, 0, 0, 0, cache6_op), RS | RT | SIMM9 },
495     + { insn_cache, M6(spec3_op, 0, 0, 0, cache6_op), RS | RT | SIMM9 },
496     #endif
497     { insn_daddiu, M(daddiu_op, 0, 0, 0, 0, 0), RS | RT | SIMM },
498     { insn_daddu, M(spec_op, 0, 0, 0, 0, daddu_op), RS | RT | RD },
499     diff --git a/arch/powerpc/kvm/book3s_hv_rmhandlers.S b/arch/powerpc/kvm/book3s_hv_rmhandlers.S
500     index 463af88c95a2..974f73df00bb 100644
501     --- a/arch/powerpc/kvm/book3s_hv_rmhandlers.S
502     +++ b/arch/powerpc/kvm/book3s_hv_rmhandlers.S
503     @@ -655,112 +655,8 @@ END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_207S)
504    
505     #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
506     BEGIN_FTR_SECTION
507     - b skip_tm
508     -END_FTR_SECTION_IFCLR(CPU_FTR_TM)
509     -
510     - /* Turn on TM/FP/VSX/VMX so we can restore them. */
511     - mfmsr r5
512     - li r6, MSR_TM >> 32
513     - sldi r6, r6, 32
514     - or r5, r5, r6
515     - ori r5, r5, MSR_FP
516     - oris r5, r5, (MSR_VEC | MSR_VSX)@h
517     - mtmsrd r5
518     -
519     - /*
520     - * The user may change these outside of a transaction, so they must
521     - * always be context switched.
522     - */
523     - ld r5, VCPU_TFHAR(r4)
524     - ld r6, VCPU_TFIAR(r4)
525     - ld r7, VCPU_TEXASR(r4)
526     - mtspr SPRN_TFHAR, r5
527     - mtspr SPRN_TFIAR, r6
528     - mtspr SPRN_TEXASR, r7
529     -
530     - ld r5, VCPU_MSR(r4)
531     - rldicl. r5, r5, 64 - MSR_TS_S_LG, 62
532     - beq skip_tm /* TM not active in guest */
533     -
534     - /* Make sure the failure summary is set, otherwise we'll program check
535     - * when we trechkpt. It's possible that this might have been not set
536     - * on a kvmppc_set_one_reg() call but we shouldn't let this crash the
537     - * host.
538     - */
539     - oris r7, r7, (TEXASR_FS)@h
540     - mtspr SPRN_TEXASR, r7
541     -
542     - /*
543     - * We need to load up the checkpointed state for the guest.
544     - * We need to do this early as it will blow away any GPRs, VSRs and
545     - * some SPRs.
546     - */
547     -
548     - mr r31, r4
549     - addi r3, r31, VCPU_FPRS_TM
550     - bl load_fp_state
551     - addi r3, r31, VCPU_VRS_TM
552     - bl load_vr_state
553     - mr r4, r31
554     - lwz r7, VCPU_VRSAVE_TM(r4)
555     - mtspr SPRN_VRSAVE, r7
556     -
557     - ld r5, VCPU_LR_TM(r4)
558     - lwz r6, VCPU_CR_TM(r4)
559     - ld r7, VCPU_CTR_TM(r4)
560     - ld r8, VCPU_AMR_TM(r4)
561     - ld r9, VCPU_TAR_TM(r4)
562     - mtlr r5
563     - mtcr r6
564     - mtctr r7
565     - mtspr SPRN_AMR, r8
566     - mtspr SPRN_TAR, r9
567     -
568     - /*
569     - * Load up PPR and DSCR values but don't put them in the actual SPRs
570     - * till the last moment to avoid running with userspace PPR and DSCR for
571     - * too long.
572     - */
573     - ld r29, VCPU_DSCR_TM(r4)
574     - ld r30, VCPU_PPR_TM(r4)
575     -
576     - std r2, PACATMSCRATCH(r13) /* Save TOC */
577     -
578     - /* Clear the MSR RI since r1, r13 are all going to be foobar. */
579     - li r5, 0
580     - mtmsrd r5, 1
581     -
582     - /* Load GPRs r0-r28 */
583     - reg = 0
584     - .rept 29
585     - ld reg, VCPU_GPRS_TM(reg)(r31)
586     - reg = reg + 1
587     - .endr
588     -
589     - mtspr SPRN_DSCR, r29
590     - mtspr SPRN_PPR, r30
591     -
592     - /* Load final GPRs */
593     - ld 29, VCPU_GPRS_TM(29)(r31)
594     - ld 30, VCPU_GPRS_TM(30)(r31)
595     - ld 31, VCPU_GPRS_TM(31)(r31)
596     -
597     - /* TM checkpointed state is now setup. All GPRs are now volatile. */
598     - TRECHKPT
599     -
600     - /* Now let's get back the state we need. */
601     - HMT_MEDIUM
602     - GET_PACA(r13)
603     - ld r29, HSTATE_DSCR(r13)
604     - mtspr SPRN_DSCR, r29
605     - ld r4, HSTATE_KVM_VCPU(r13)
606     - ld r1, HSTATE_HOST_R1(r13)
607     - ld r2, PACATMSCRATCH(r13)
608     -
609     - /* Set the MSR RI since we have our registers back. */
610     - li r5, MSR_RI
611     - mtmsrd r5, 1
612     -skip_tm:
613     + bl kvmppc_restore_tm
614     +END_FTR_SECTION_IFSET(CPU_FTR_TM)
615     #endif
616    
617     /* Load guest PMU registers */
618     @@ -841,12 +737,6 @@ BEGIN_FTR_SECTION
619     /* Skip next section on POWER7 */
620     b 8f
621     END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_207S)
622     - /* Turn on TM so we can access TFHAR/TFIAR/TEXASR */
623     - mfmsr r8
624     - li r0, 1
625     - rldimi r8, r0, MSR_TM_LG, 63-MSR_TM_LG
626     - mtmsrd r8
627     -
628     /* Load up POWER8-specific registers */
629     ld r5, VCPU_IAMR(r4)
630     lwz r6, VCPU_PSPB(r4)
631     @@ -1436,106 +1326,8 @@ END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_207S)
632    
633     #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
634     BEGIN_FTR_SECTION
635     - b 2f
636     -END_FTR_SECTION_IFCLR(CPU_FTR_TM)
637     - /* Turn on TM. */
638     - mfmsr r8
639     - li r0, 1
640     - rldimi r8, r0, MSR_TM_LG, 63-MSR_TM_LG
641     - mtmsrd r8
642     -
643     - ld r5, VCPU_MSR(r9)
644     - rldicl. r5, r5, 64 - MSR_TS_S_LG, 62
645     - beq 1f /* TM not active in guest. */
646     -
647     - li r3, TM_CAUSE_KVM_RESCHED
648     -
649     - /* Clear the MSR RI since r1, r13 are all going to be foobar. */
650     - li r5, 0
651     - mtmsrd r5, 1
652     -
653     - /* All GPRs are volatile at this point. */
654     - TRECLAIM(R3)
655     -
656     - /* Temporarily store r13 and r9 so we have some regs to play with */
657     - SET_SCRATCH0(r13)
658     - GET_PACA(r13)
659     - std r9, PACATMSCRATCH(r13)
660     - ld r9, HSTATE_KVM_VCPU(r13)
661     -
662     - /* Get a few more GPRs free. */
663     - std r29, VCPU_GPRS_TM(29)(r9)
664     - std r30, VCPU_GPRS_TM(30)(r9)
665     - std r31, VCPU_GPRS_TM(31)(r9)
666     -
667     - /* Save away PPR and DSCR soon so don't run with user values. */
668     - mfspr r31, SPRN_PPR
669     - HMT_MEDIUM
670     - mfspr r30, SPRN_DSCR
671     - ld r29, HSTATE_DSCR(r13)
672     - mtspr SPRN_DSCR, r29
673     -
674     - /* Save all but r9, r13 & r29-r31 */
675     - reg = 0
676     - .rept 29
677     - .if (reg != 9) && (reg != 13)
678     - std reg, VCPU_GPRS_TM(reg)(r9)
679     - .endif
680     - reg = reg + 1
681     - .endr
682     - /* ... now save r13 */
683     - GET_SCRATCH0(r4)
684     - std r4, VCPU_GPRS_TM(13)(r9)
685     - /* ... and save r9 */
686     - ld r4, PACATMSCRATCH(r13)
687     - std r4, VCPU_GPRS_TM(9)(r9)
688     -
689     - /* Reload stack pointer and TOC. */
690     - ld r1, HSTATE_HOST_R1(r13)
691     - ld r2, PACATOC(r13)
692     -
693     - /* Set MSR RI now we have r1 and r13 back. */
694     - li r5, MSR_RI
695     - mtmsrd r5, 1
696     -
697     - /* Save away checkpinted SPRs. */
698     - std r31, VCPU_PPR_TM(r9)
699     - std r30, VCPU_DSCR_TM(r9)
700     - mflr r5
701     - mfcr r6
702     - mfctr r7
703     - mfspr r8, SPRN_AMR
704     - mfspr r10, SPRN_TAR
705     - std r5, VCPU_LR_TM(r9)
706     - stw r6, VCPU_CR_TM(r9)
707     - std r7, VCPU_CTR_TM(r9)
708     - std r8, VCPU_AMR_TM(r9)
709     - std r10, VCPU_TAR_TM(r9)
710     -
711     - /* Restore r12 as trap number. */
712     - lwz r12, VCPU_TRAP(r9)
713     -
714     - /* Save FP/VSX. */
715     - addi r3, r9, VCPU_FPRS_TM
716     - bl store_fp_state
717     - addi r3, r9, VCPU_VRS_TM
718     - bl store_vr_state
719     - mfspr r6, SPRN_VRSAVE
720     - stw r6, VCPU_VRSAVE_TM(r9)
721     -1:
722     - /*
723     - * We need to save these SPRs after the treclaim so that the software
724     - * error code is recorded correctly in the TEXASR. Also the user may
725     - * change these outside of a transaction, so they must always be
726     - * context switched.
727     - */
728     - mfspr r5, SPRN_TFHAR
729     - mfspr r6, SPRN_TFIAR
730     - mfspr r7, SPRN_TEXASR
731     - std r5, VCPU_TFHAR(r9)
732     - std r6, VCPU_TFIAR(r9)
733     - std r7, VCPU_TEXASR(r9)
734     -2:
735     + bl kvmppc_save_tm
736     +END_FTR_SECTION_IFSET(CPU_FTR_TM)
737     #endif
738    
739     /* Increment yield count if they have a VPA */
740     @@ -2245,6 +2037,13 @@ _GLOBAL(kvmppc_h_cede) /* r3 = vcpu pointer, r11 = msr, r13 = paca */
741     /* save FP state */
742     bl kvmppc_save_fp
743    
744     +#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
745     +BEGIN_FTR_SECTION
746     + ld r9, HSTATE_KVM_VCPU(r13)
747     + bl kvmppc_save_tm
748     +END_FTR_SECTION_IFSET(CPU_FTR_TM)
749     +#endif
750     +
751     /*
752     * Set DEC to the smaller of DEC and HDEC, so that we wake
753     * no later than the end of our timeslice (HDEC interrupts
754     @@ -2321,6 +2120,12 @@ kvm_end_cede:
755     bl kvmhv_accumulate_time
756     #endif
757    
758     +#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
759     +BEGIN_FTR_SECTION
760     + bl kvmppc_restore_tm
761     +END_FTR_SECTION_IFSET(CPU_FTR_TM)
762     +#endif
763     +
764     /* load up FP state */
765     bl kvmppc_load_fp
766    
767     @@ -2629,6 +2434,239 @@ END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC)
768     mr r4,r31
769     blr
770    
771     +#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
772     +/*
773     + * Save transactional state and TM-related registers.
774     + * Called with r9 pointing to the vcpu struct.
775     + * This can modify all checkpointed registers, but
776     + * restores r1, r2 and r9 (vcpu pointer) before exit.
777     + */
778     +kvmppc_save_tm:
779     + mflr r0
780     + std r0, PPC_LR_STKOFF(r1)
781     +
782     + /* Turn on TM. */
783     + mfmsr r8
784     + li r0, 1
785     + rldimi r8, r0, MSR_TM_LG, 63-MSR_TM_LG
786     + mtmsrd r8
787     +
788     + ld r5, VCPU_MSR(r9)
789     + rldicl. r5, r5, 64 - MSR_TS_S_LG, 62
790     + beq 1f /* TM not active in guest. */
791     +
792     + std r1, HSTATE_HOST_R1(r13)
793     + li r3, TM_CAUSE_KVM_RESCHED
794     +
795     + /* Clear the MSR RI since r1, r13 are all going to be foobar. */
796     + li r5, 0
797     + mtmsrd r5, 1
798     +
799     + /* All GPRs are volatile at this point. */
800     + TRECLAIM(R3)
801     +
802     + /* Temporarily store r13 and r9 so we have some regs to play with */
803     + SET_SCRATCH0(r13)
804     + GET_PACA(r13)
805     + std r9, PACATMSCRATCH(r13)
806     + ld r9, HSTATE_KVM_VCPU(r13)
807     +
808     + /* Get a few more GPRs free. */
809     + std r29, VCPU_GPRS_TM(29)(r9)
810     + std r30, VCPU_GPRS_TM(30)(r9)
811     + std r31, VCPU_GPRS_TM(31)(r9)
812     +
813     + /* Save away PPR and DSCR soon so don't run with user values. */
814     + mfspr r31, SPRN_PPR
815     + HMT_MEDIUM
816     + mfspr r30, SPRN_DSCR
817     + ld r29, HSTATE_DSCR(r13)
818     + mtspr SPRN_DSCR, r29
819     +
820     + /* Save all but r9, r13 & r29-r31 */
821     + reg = 0
822     + .rept 29
823     + .if (reg != 9) && (reg != 13)
824     + std reg, VCPU_GPRS_TM(reg)(r9)
825     + .endif
826     + reg = reg + 1
827     + .endr
828     + /* ... now save r13 */
829     + GET_SCRATCH0(r4)
830     + std r4, VCPU_GPRS_TM(13)(r9)
831     + /* ... and save r9 */
832     + ld r4, PACATMSCRATCH(r13)
833     + std r4, VCPU_GPRS_TM(9)(r9)
834     +
835     + /* Reload stack pointer and TOC. */
836     + ld r1, HSTATE_HOST_R1(r13)
837     + ld r2, PACATOC(r13)
838     +
839     + /* Set MSR RI now we have r1 and r13 back. */
840     + li r5, MSR_RI
841     + mtmsrd r5, 1
842     +
843     + /* Save away checkpinted SPRs. */
844     + std r31, VCPU_PPR_TM(r9)
845     + std r30, VCPU_DSCR_TM(r9)
846     + mflr r5
847     + mfcr r6
848     + mfctr r7
849     + mfspr r8, SPRN_AMR
850     + mfspr r10, SPRN_TAR
851     + std r5, VCPU_LR_TM(r9)
852     + stw r6, VCPU_CR_TM(r9)
853     + std r7, VCPU_CTR_TM(r9)
854     + std r8, VCPU_AMR_TM(r9)
855     + std r10, VCPU_TAR_TM(r9)
856     +
857     + /* Restore r12 as trap number. */
858     + lwz r12, VCPU_TRAP(r9)
859     +
860     + /* Save FP/VSX. */
861     + addi r3, r9, VCPU_FPRS_TM
862     + bl store_fp_state
863     + addi r3, r9, VCPU_VRS_TM
864     + bl store_vr_state
865     + mfspr r6, SPRN_VRSAVE
866     + stw r6, VCPU_VRSAVE_TM(r9)
867     +1:
868     + /*
869     + * We need to save these SPRs after the treclaim so that the software
870     + * error code is recorded correctly in the TEXASR. Also the user may
871     + * change these outside of a transaction, so they must always be
872     + * context switched.
873     + */
874     + mfspr r5, SPRN_TFHAR
875     + mfspr r6, SPRN_TFIAR
876     + mfspr r7, SPRN_TEXASR
877     + std r5, VCPU_TFHAR(r9)
878     + std r6, VCPU_TFIAR(r9)
879     + std r7, VCPU_TEXASR(r9)
880     +
881     + ld r0, PPC_LR_STKOFF(r1)
882     + mtlr r0
883     + blr
884     +
885     +/*
886     + * Restore transactional state and TM-related registers.
887     + * Called with r4 pointing to the vcpu struct.
888     + * This potentially modifies all checkpointed registers.
889     + * It restores r1, r2, r4 from the PACA.
890     + */
891     +kvmppc_restore_tm:
892     + mflr r0
893     + std r0, PPC_LR_STKOFF(r1)
894     +
895     + /* Turn on TM/FP/VSX/VMX so we can restore them. */
896     + mfmsr r5
897     + li r6, MSR_TM >> 32
898     + sldi r6, r6, 32
899     + or r5, r5, r6
900     + ori r5, r5, MSR_FP
901     + oris r5, r5, (MSR_VEC | MSR_VSX)@h
902     + mtmsrd r5
903     +
904     + /*
905     + * The user may change these outside of a transaction, so they must
906     + * always be context switched.
907     + */
908     + ld r5, VCPU_TFHAR(r4)
909     + ld r6, VCPU_TFIAR(r4)
910     + ld r7, VCPU_TEXASR(r4)
911     + mtspr SPRN_TFHAR, r5
912     + mtspr SPRN_TFIAR, r6
913     + mtspr SPRN_TEXASR, r7
914     +
915     + ld r5, VCPU_MSR(r4)
916     + rldicl. r5, r5, 64 - MSR_TS_S_LG, 62
917     + beqlr /* TM not active in guest */
918     + std r1, HSTATE_HOST_R1(r13)
919     +
920     + /* Make sure the failure summary is set, otherwise we'll program check
921     + * when we trechkpt. It's possible that this might have been not set
922     + * on a kvmppc_set_one_reg() call but we shouldn't let this crash the
923     + * host.
924     + */
925     + oris r7, r7, (TEXASR_FS)@h
926     + mtspr SPRN_TEXASR, r7
927     +
928     + /*
929     + * We need to load up the checkpointed state for the guest.
930     + * We need to do this early as it will blow away any GPRs, VSRs and
931     + * some SPRs.
932     + */
933     +
934     + mr r31, r4
935     + addi r3, r31, VCPU_FPRS_TM
936     + bl load_fp_state
937     + addi r3, r31, VCPU_VRS_TM
938     + bl load_vr_state
939     + mr r4, r31
940     + lwz r7, VCPU_VRSAVE_TM(r4)
941     + mtspr SPRN_VRSAVE, r7
942     +
943     + ld r5, VCPU_LR_TM(r4)
944     + lwz r6, VCPU_CR_TM(r4)
945     + ld r7, VCPU_CTR_TM(r4)
946     + ld r8, VCPU_AMR_TM(r4)
947     + ld r9, VCPU_TAR_TM(r4)
948     + mtlr r5
949     + mtcr r6
950     + mtctr r7
951     + mtspr SPRN_AMR, r8
952     + mtspr SPRN_TAR, r9
953     +
954     + /*
955     + * Load up PPR and DSCR values but don't put them in the actual SPRs
956     + * till the last moment to avoid running with userspace PPR and DSCR for
957     + * too long.
958     + */
959     + ld r29, VCPU_DSCR_TM(r4)
960     + ld r30, VCPU_PPR_TM(r4)
961     +
962     + std r2, PACATMSCRATCH(r13) /* Save TOC */
963     +
964     + /* Clear the MSR RI since r1, r13 are all going to be foobar. */
965     + li r5, 0
966     + mtmsrd r5, 1
967     +
968     + /* Load GPRs r0-r28 */
969     + reg = 0
970     + .rept 29
971     + ld reg, VCPU_GPRS_TM(reg)(r31)
972     + reg = reg + 1
973     + .endr
974     +
975     + mtspr SPRN_DSCR, r29
976     + mtspr SPRN_PPR, r30
977     +
978     + /* Load final GPRs */
979     + ld 29, VCPU_GPRS_TM(29)(r31)
980     + ld 30, VCPU_GPRS_TM(30)(r31)
981     + ld 31, VCPU_GPRS_TM(31)(r31)
982     +
983     + /* TM checkpointed state is now setup. All GPRs are now volatile. */
984     + TRECHKPT
985     +
986     + /* Now let's get back the state we need. */
987     + HMT_MEDIUM
988     + GET_PACA(r13)
989     + ld r29, HSTATE_DSCR(r13)
990     + mtspr SPRN_DSCR, r29
991     + ld r4, HSTATE_KVM_VCPU(r13)
992     + ld r1, HSTATE_HOST_R1(r13)
993     + ld r2, PACATMSCRATCH(r13)
994     +
995     + /* Set the MSR RI since we have our registers back. */
996     + li r5, MSR_RI
997     + mtmsrd r5, 1
998     +
999     + ld r0, PPC_LR_STKOFF(r1)
1000     + mtlr r0
1001     + blr
1002     +#endif
1003     +
1004     /*
1005     * We come here if we get any exception or interrupt while we are
1006     * executing host real mode code while in guest MMU context.
1007     diff --git a/arch/x86/kvm/mtrr.c b/arch/x86/kvm/mtrr.c
1008     index c146f3c262c3..0149ac59c273 100644
1009     --- a/arch/x86/kvm/mtrr.c
1010     +++ b/arch/x86/kvm/mtrr.c
1011     @@ -539,6 +539,7 @@ static void mtrr_lookup_var_start(struct mtrr_iter *iter)
1012    
1013     iter->fixed = false;
1014     iter->start_max = iter->start;
1015     + iter->range = NULL;
1016     iter->range = list_prepare_entry(iter->range, &mtrr_state->head, node);
1017    
1018     __mtrr_lookup_var_next(iter);
1019     diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
1020     index 41e7943004fe..4589b6feeb7b 100644
1021     --- a/arch/x86/kvm/vmx.c
1022     +++ b/arch/x86/kvm/vmx.c
1023     @@ -8124,6 +8124,7 @@ static int vmx_handle_exit(struct kvm_vcpu *vcpu)
1024     if ((vectoring_info & VECTORING_INFO_VALID_MASK) &&
1025     (exit_reason != EXIT_REASON_EXCEPTION_NMI &&
1026     exit_reason != EXIT_REASON_EPT_VIOLATION &&
1027     + exit_reason != EXIT_REASON_PML_FULL &&
1028     exit_reason != EXIT_REASON_TASK_SWITCH)) {
1029     vcpu->run->exit_reason = KVM_EXIT_INTERNAL_ERROR;
1030     vcpu->run->internal.suberror = KVM_INTERNAL_ERROR_DELIVERY_EV;
1031     @@ -8736,6 +8737,22 @@ static void vmx_load_vmcs01(struct kvm_vcpu *vcpu)
1032     put_cpu();
1033     }
1034    
1035     +/*
1036     + * Ensure that the current vmcs of the logical processor is the
1037     + * vmcs01 of the vcpu before calling free_nested().
1038     + */
1039     +static void vmx_free_vcpu_nested(struct kvm_vcpu *vcpu)
1040     +{
1041     + struct vcpu_vmx *vmx = to_vmx(vcpu);
1042     + int r;
1043     +
1044     + r = vcpu_load(vcpu);
1045     + BUG_ON(r);
1046     + vmx_load_vmcs01(vcpu);
1047     + free_nested(vmx);
1048     + vcpu_put(vcpu);
1049     +}
1050     +
1051     static void vmx_free_vcpu(struct kvm_vcpu *vcpu)
1052     {
1053     struct vcpu_vmx *vmx = to_vmx(vcpu);
1054     @@ -8744,8 +8761,7 @@ static void vmx_free_vcpu(struct kvm_vcpu *vcpu)
1055     vmx_destroy_pml_buffer(vmx);
1056     free_vpid(vmx->vpid);
1057     leave_guest_mode(vcpu);
1058     - vmx_load_vmcs01(vcpu);
1059     - free_nested(vmx);
1060     + vmx_free_vcpu_nested(vcpu);
1061     free_loaded_vmcs(vmx->loaded_vmcs);
1062     kfree(vmx->guest_msrs);
1063     kvm_vcpu_uninit(vcpu);
1064     diff --git a/arch/x86/pci/intel_mid_pci.c b/arch/x86/pci/intel_mid_pci.c
1065     index 8b93e634af84..ae97f24a4371 100644
1066     --- a/arch/x86/pci/intel_mid_pci.c
1067     +++ b/arch/x86/pci/intel_mid_pci.c
1068     @@ -37,6 +37,7 @@
1069    
1070     /* Quirks for the listed devices */
1071     #define PCI_DEVICE_ID_INTEL_MRFL_MMC 0x1190
1072     +#define PCI_DEVICE_ID_INTEL_MRFL_HSU 0x1191
1073    
1074     /* Fixed BAR fields */
1075     #define PCIE_VNDR_CAP_ID_FIXED_BAR 0x00 /* Fixed BAR (TBD) */
1076     @@ -225,13 +226,20 @@ static int intel_mid_pci_irq_enable(struct pci_dev *dev)
1077     /* Special treatment for IRQ0 */
1078     if (dev->irq == 0) {
1079     /*
1080     + * Skip HS UART common registers device since it has
1081     + * IRQ0 assigned and not used by the kernel.
1082     + */
1083     + if (dev->device == PCI_DEVICE_ID_INTEL_MRFL_HSU)
1084     + return -EBUSY;
1085     + /*
1086     * TNG has IRQ0 assigned to eMMC controller. But there
1087     * are also other devices with bogus PCI configuration
1088     * that have IRQ0 assigned. This check ensures that
1089     - * eMMC gets it.
1090     + * eMMC gets it. The rest of devices still could be
1091     + * enabled without interrupt line being allocated.
1092     */
1093     if (dev->device != PCI_DEVICE_ID_INTEL_MRFL_MMC)
1094     - return -EBUSY;
1095     + return 0;
1096     }
1097     break;
1098     default:
1099     diff --git a/block/bio.c b/block/bio.c
1100     index d4d144363250..46e2cc1d4016 100644
1101     --- a/block/bio.c
1102     +++ b/block/bio.c
1103     @@ -584,6 +584,8 @@ void __bio_clone_fast(struct bio *bio, struct bio *bio_src)
1104     bio->bi_rw = bio_src->bi_rw;
1105     bio->bi_iter = bio_src->bi_iter;
1106     bio->bi_io_vec = bio_src->bi_io_vec;
1107     +
1108     + bio_clone_blkcg_association(bio, bio_src);
1109     }
1110     EXPORT_SYMBOL(__bio_clone_fast);
1111    
1112     @@ -689,6 +691,8 @@ integrity_clone:
1113     }
1114     }
1115    
1116     + bio_clone_blkcg_association(bio, bio_src);
1117     +
1118     return bio;
1119     }
1120     EXPORT_SYMBOL(bio_clone_bioset);
1121     @@ -2014,6 +2018,17 @@ void bio_disassociate_task(struct bio *bio)
1122     }
1123     }
1124    
1125     +/**
1126     + * bio_clone_blkcg_association - clone blkcg association from src to dst bio
1127     + * @dst: destination bio
1128     + * @src: source bio
1129     + */
1130     +void bio_clone_blkcg_association(struct bio *dst, struct bio *src)
1131     +{
1132     + if (src->bi_css)
1133     + WARN_ON(bio_associate_blkcg(dst, src->bi_css));
1134     +}
1135     +
1136     #endif /* CONFIG_BLK_CGROUP */
1137    
1138     static void __init biovec_init_slabs(void)
1139     diff --git a/block/genhd.c b/block/genhd.c
1140     index d2a1d43bf9fa..a5bed6bc869d 100644
1141     --- a/block/genhd.c
1142     +++ b/block/genhd.c
1143     @@ -612,7 +612,7 @@ void add_disk(struct gendisk *disk)
1144    
1145     /* Register BDI before referencing it from bdev */
1146     bdi = &disk->queue->backing_dev_info;
1147     - bdi_register_dev(bdi, disk_devt(disk));
1148     + bdi_register_owner(bdi, disk_to_dev(disk));
1149    
1150     blk_register_region(disk_devt(disk), disk->minors, NULL,
1151     exact_match, exact_lock, disk);
1152     diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
1153     index b420fb46669d..43f20328f830 100644
1154     --- a/drivers/acpi/ec.c
1155     +++ b/drivers/acpi/ec.c
1156     @@ -101,6 +101,7 @@ enum ec_command {
1157     #define ACPI_EC_UDELAY_POLL 550 /* Wait 1ms for EC transaction polling */
1158     #define ACPI_EC_CLEAR_MAX 100 /* Maximum number of events to query
1159     * when trying to clear the EC */
1160     +#define ACPI_EC_MAX_QUERIES 16 /* Maximum number of parallel queries */
1161    
1162     enum {
1163     EC_FLAGS_QUERY_PENDING, /* Query is pending */
1164     @@ -121,6 +122,10 @@ static unsigned int ec_delay __read_mostly = ACPI_EC_DELAY;
1165     module_param(ec_delay, uint, 0644);
1166     MODULE_PARM_DESC(ec_delay, "Timeout(ms) waited until an EC command completes");
1167    
1168     +static unsigned int ec_max_queries __read_mostly = ACPI_EC_MAX_QUERIES;
1169     +module_param(ec_max_queries, uint, 0644);
1170     +MODULE_PARM_DESC(ec_max_queries, "Maximum parallel _Qxx evaluations");
1171     +
1172     static bool ec_busy_polling __read_mostly;
1173     module_param(ec_busy_polling, bool, 0644);
1174     MODULE_PARM_DESC(ec_busy_polling, "Use busy polling to advance EC transaction");
1175     @@ -174,6 +179,7 @@ static void acpi_ec_event_processor(struct work_struct *work);
1176    
1177     struct acpi_ec *boot_ec, *first_ec;
1178     EXPORT_SYMBOL(first_ec);
1179     +static struct workqueue_struct *ec_query_wq;
1180    
1181     static int EC_FLAGS_VALIDATE_ECDT; /* ASUStec ECDTs need to be validated */
1182     static int EC_FLAGS_SKIP_DSDT_SCAN; /* Not all BIOS survive early DSDT scan */
1183     @@ -1097,7 +1103,7 @@ static int acpi_ec_query(struct acpi_ec *ec, u8 *data)
1184     * work queue execution.
1185     */
1186     ec_dbg_evt("Query(0x%02x) scheduled", value);
1187     - if (!schedule_work(&q->work)) {
1188     + if (!queue_work(ec_query_wq, &q->work)) {
1189     ec_dbg_evt("Query(0x%02x) overlapped", value);
1190     result = -EBUSY;
1191     }
1192     @@ -1657,15 +1663,41 @@ static struct acpi_driver acpi_ec_driver = {
1193     },
1194     };
1195    
1196     +static inline int acpi_ec_query_init(void)
1197     +{
1198     + if (!ec_query_wq) {
1199     + ec_query_wq = alloc_workqueue("kec_query", 0,
1200     + ec_max_queries);
1201     + if (!ec_query_wq)
1202     + return -ENODEV;
1203     + }
1204     + return 0;
1205     +}
1206     +
1207     +static inline void acpi_ec_query_exit(void)
1208     +{
1209     + if (ec_query_wq) {
1210     + destroy_workqueue(ec_query_wq);
1211     + ec_query_wq = NULL;
1212     + }
1213     +}
1214     +
1215     int __init acpi_ec_init(void)
1216     {
1217     - int result = 0;
1218     + int result;
1219    
1220     + /* register workqueue for _Qxx evaluations */
1221     + result = acpi_ec_query_init();
1222     + if (result)
1223     + goto err_exit;
1224     /* Now register the driver for the EC */
1225     result = acpi_bus_register_driver(&acpi_ec_driver);
1226     - if (result < 0)
1227     - return -ENODEV;
1228     + if (result)
1229     + goto err_exit;
1230    
1231     +err_exit:
1232     + if (result)
1233     + acpi_ec_query_exit();
1234     return result;
1235     }
1236    
1237     @@ -1675,5 +1707,6 @@ static void __exit acpi_ec_exit(void)
1238     {
1239    
1240     acpi_bus_unregister_driver(&acpi_ec_driver);
1241     + acpi_ec_query_exit();
1242     }
1243     #endif /* 0 */
1244     diff --git a/drivers/bluetooth/hci_intel.c b/drivers/bluetooth/hci_intel.c
1245     index 4a414a5a3165..b9065506a847 100644
1246     --- a/drivers/bluetooth/hci_intel.c
1247     +++ b/drivers/bluetooth/hci_intel.c
1248     @@ -1234,8 +1234,7 @@ static int intel_probe(struct platform_device *pdev)
1249    
1250     idev->pdev = pdev;
1251    
1252     - idev->reset = devm_gpiod_get_optional(&pdev->dev, "reset",
1253     - GPIOD_OUT_LOW);
1254     + idev->reset = devm_gpiod_get(&pdev->dev, "reset", GPIOD_OUT_LOW);
1255     if (IS_ERR(idev->reset)) {
1256     dev_err(&pdev->dev, "Unable to retrieve gpio\n");
1257     return PTR_ERR(idev->reset);
1258     @@ -1247,8 +1246,7 @@ static int intel_probe(struct platform_device *pdev)
1259    
1260     dev_err(&pdev->dev, "No IRQ, falling back to gpio-irq\n");
1261    
1262     - host_wake = devm_gpiod_get_optional(&pdev->dev, "host-wake",
1263     - GPIOD_IN);
1264     + host_wake = devm_gpiod_get(&pdev->dev, "host-wake", GPIOD_IN);
1265     if (IS_ERR(host_wake)) {
1266     dev_err(&pdev->dev, "Unable to retrieve IRQ\n");
1267     goto no_irq;
1268     diff --git a/drivers/char/random.c b/drivers/char/random.c
1269     index 0227b0465b40..491a4dce13fe 100644
1270     --- a/drivers/char/random.c
1271     +++ b/drivers/char/random.c
1272     @@ -948,6 +948,7 @@ void add_interrupt_randomness(int irq, int irq_flags)
1273     /* award one bit for the contents of the fast pool */
1274     credit_entropy_bits(r, credit + 1);
1275     }
1276     +EXPORT_SYMBOL_GPL(add_interrupt_randomness);
1277    
1278     #ifdef CONFIG_BLOCK
1279     void add_disk_randomness(struct gendisk *disk)
1280     @@ -1460,12 +1461,16 @@ random_read(struct file *file, char __user *buf, size_t nbytes, loff_t *ppos)
1281     static ssize_t
1282     urandom_read(struct file *file, char __user *buf, size_t nbytes, loff_t *ppos)
1283     {
1284     + static int maxwarn = 10;
1285     int ret;
1286    
1287     - if (unlikely(nonblocking_pool.initialized == 0))
1288     - printk_once(KERN_NOTICE "random: %s urandom read "
1289     - "with %d bits of entropy available\n",
1290     - current->comm, nonblocking_pool.entropy_total);
1291     + if (unlikely(nonblocking_pool.initialized == 0) &&
1292     + maxwarn > 0) {
1293     + maxwarn--;
1294     + printk(KERN_NOTICE "random: %s: uninitialized urandom read "
1295     + "(%zd bytes read, %d bits of entropy available)\n",
1296     + current->comm, nbytes, nonblocking_pool.entropy_total);
1297     + }
1298    
1299     nbytes = min_t(size_t, nbytes, INT_MAX >> (ENTROPY_SHIFT + 3));
1300     ret = extract_entropy_user(&nonblocking_pool, buf, nbytes);
1301     @@ -1847,12 +1852,18 @@ void add_hwgenerator_randomness(const char *buffer, size_t count,
1302     {
1303     struct entropy_store *poolp = &input_pool;
1304    
1305     - /* Suspend writing if we're above the trickle threshold.
1306     - * We'll be woken up again once below random_write_wakeup_thresh,
1307     - * or when the calling thread is about to terminate.
1308     - */
1309     - wait_event_interruptible(random_write_wait, kthread_should_stop() ||
1310     + if (unlikely(nonblocking_pool.initialized == 0))
1311     + poolp = &nonblocking_pool;
1312     + else {
1313     + /* Suspend writing if we're above the trickle
1314     + * threshold. We'll be woken up again once below
1315     + * random_write_wakeup_thresh, or when the calling
1316     + * thread is about to terminate.
1317     + */
1318     + wait_event_interruptible(random_write_wait,
1319     + kthread_should_stop() ||
1320     ENTROPY_BITS(&input_pool) <= random_write_wakeup_bits);
1321     + }
1322     mix_pool_bytes(poolp, buffer, count);
1323     credit_entropy_bits(poolp, entropy);
1324     }
1325     diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c
1326     index f53b02a6bc05..6e80e4298274 100644
1327     --- a/drivers/cpufreq/intel_pstate.c
1328     +++ b/drivers/cpufreq/intel_pstate.c
1329     @@ -662,7 +662,7 @@ static int core_get_max_pstate(void)
1330     if (err)
1331     goto skip_tar;
1332    
1333     - tdp_msr = MSR_CONFIG_TDP_NOMINAL + tdp_ctrl;
1334     + tdp_msr = MSR_CONFIG_TDP_NOMINAL + (tdp_ctrl & 0x3);
1335     err = rdmsrl_safe(tdp_msr, &tdp_ratio);
1336     if (err)
1337     goto skip_tar;
1338     diff --git a/drivers/edac/edac_mc_sysfs.c b/drivers/edac/edac_mc_sysfs.c
1339     index 58aed67b7eba..3c8f19f5ac81 100644
1340     --- a/drivers/edac/edac_mc_sysfs.c
1341     +++ b/drivers/edac/edac_mc_sysfs.c
1342     @@ -313,7 +313,6 @@ static struct device_type csrow_attr_type = {
1343     * possible dynamic channel DIMM Label attribute files
1344     *
1345     */
1346     -
1347     DEVICE_CHANNEL(ch0_dimm_label, S_IRUGO | S_IWUSR,
1348     channel_dimm_label_show, channel_dimm_label_store, 0);
1349     DEVICE_CHANNEL(ch1_dimm_label, S_IRUGO | S_IWUSR,
1350     @@ -326,6 +325,10 @@ DEVICE_CHANNEL(ch4_dimm_label, S_IRUGO | S_IWUSR,
1351     channel_dimm_label_show, channel_dimm_label_store, 4);
1352     DEVICE_CHANNEL(ch5_dimm_label, S_IRUGO | S_IWUSR,
1353     channel_dimm_label_show, channel_dimm_label_store, 5);
1354     +DEVICE_CHANNEL(ch6_dimm_label, S_IRUGO | S_IWUSR,
1355     + channel_dimm_label_show, channel_dimm_label_store, 6);
1356     +DEVICE_CHANNEL(ch7_dimm_label, S_IRUGO | S_IWUSR,
1357     + channel_dimm_label_show, channel_dimm_label_store, 7);
1358    
1359     /* Total possible dynamic DIMM Label attribute file table */
1360     static struct attribute *dynamic_csrow_dimm_attr[] = {
1361     @@ -335,6 +338,8 @@ static struct attribute *dynamic_csrow_dimm_attr[] = {
1362     &dev_attr_legacy_ch3_dimm_label.attr.attr,
1363     &dev_attr_legacy_ch4_dimm_label.attr.attr,
1364     &dev_attr_legacy_ch5_dimm_label.attr.attr,
1365     + &dev_attr_legacy_ch6_dimm_label.attr.attr,
1366     + &dev_attr_legacy_ch7_dimm_label.attr.attr,
1367     NULL
1368     };
1369    
1370     @@ -351,6 +356,10 @@ DEVICE_CHANNEL(ch4_ce_count, S_IRUGO,
1371     channel_ce_count_show, NULL, 4);
1372     DEVICE_CHANNEL(ch5_ce_count, S_IRUGO,
1373     channel_ce_count_show, NULL, 5);
1374     +DEVICE_CHANNEL(ch6_ce_count, S_IRUGO,
1375     + channel_ce_count_show, NULL, 6);
1376     +DEVICE_CHANNEL(ch7_ce_count, S_IRUGO,
1377     + channel_ce_count_show, NULL, 7);
1378    
1379     /* Total possible dynamic ce_count attribute file table */
1380     static struct attribute *dynamic_csrow_ce_count_attr[] = {
1381     @@ -360,6 +369,8 @@ static struct attribute *dynamic_csrow_ce_count_attr[] = {
1382     &dev_attr_legacy_ch3_ce_count.attr.attr,
1383     &dev_attr_legacy_ch4_ce_count.attr.attr,
1384     &dev_attr_legacy_ch5_ce_count.attr.attr,
1385     + &dev_attr_legacy_ch6_ce_count.attr.attr,
1386     + &dev_attr_legacy_ch7_ce_count.attr.attr,
1387     NULL
1388     };
1389    
1390     @@ -371,9 +382,16 @@ static umode_t csrow_dev_is_visible(struct kobject *kobj,
1391    
1392     if (idx >= csrow->nr_channels)
1393     return 0;
1394     +
1395     + if (idx >= ARRAY_SIZE(dynamic_csrow_ce_count_attr) - 1) {
1396     + WARN_ONCE(1, "idx: %d\n", idx);
1397     + return 0;
1398     + }
1399     +
1400     /* Only expose populated DIMMs */
1401     if (!csrow->channels[idx]->dimm->nr_pages)
1402     return 0;
1403     +
1404     return attr->mode;
1405     }
1406    
1407     diff --git a/drivers/gpio/gpio-intel-mid.c b/drivers/gpio/gpio-intel-mid.c
1408     index 70097472b02c..c50e930d97d3 100644
1409     --- a/drivers/gpio/gpio-intel-mid.c
1410     +++ b/drivers/gpio/gpio-intel-mid.c
1411     @@ -17,7 +17,6 @@
1412     * Moorestown platform Langwell chip.
1413     * Medfield platform Penwell chip.
1414     * Clovertrail platform Cloverview chip.
1415     - * Merrifield platform Tangier chip.
1416     */
1417    
1418     #include <linux/module.h>
1419     @@ -64,10 +63,6 @@ enum GPIO_REG {
1420     /* intel_mid gpio driver data */
1421     struct intel_mid_gpio_ddata {
1422     u16 ngpio; /* number of gpio pins */
1423     - u32 gplr_offset; /* offset of first GPLR register from base */
1424     - u32 flis_base; /* base address of FLIS registers */
1425     - u32 flis_len; /* length of FLIS registers */
1426     - u32 (*get_flis_offset)(int gpio);
1427     u32 chip_irq_type; /* chip interrupt type */
1428     };
1429    
1430     @@ -257,15 +252,6 @@ static const struct intel_mid_gpio_ddata gpio_cloverview_core = {
1431     .chip_irq_type = INTEL_MID_IRQ_TYPE_EDGE,
1432     };
1433    
1434     -static const struct intel_mid_gpio_ddata gpio_tangier = {
1435     - .ngpio = 192,
1436     - .gplr_offset = 4,
1437     - .flis_base = 0xff0c0000,
1438     - .flis_len = 0x8000,
1439     - .get_flis_offset = NULL,
1440     - .chip_irq_type = INTEL_MID_IRQ_TYPE_EDGE,
1441     -};
1442     -
1443     static const struct pci_device_id intel_gpio_ids[] = {
1444     {
1445     /* Lincroft */
1446     @@ -292,11 +278,6 @@ static const struct pci_device_id intel_gpio_ids[] = {
1447     PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x08f7),
1448     .driver_data = (kernel_ulong_t)&gpio_cloverview_core,
1449     },
1450     - {
1451     - /* Tangier */
1452     - PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x1199),
1453     - .driver_data = (kernel_ulong_t)&gpio_tangier,
1454     - },
1455     { 0 }
1456     };
1457     MODULE_DEVICE_TABLE(pci, intel_gpio_ids);
1458     diff --git a/drivers/gpio/gpio-pca953x.c b/drivers/gpio/gpio-pca953x.c
1459     index 2d4892cc70fb..c844d7eccb6c 100644
1460     --- a/drivers/gpio/gpio-pca953x.c
1461     +++ b/drivers/gpio/gpio-pca953x.c
1462     @@ -86,7 +86,7 @@ MODULE_DEVICE_TABLE(acpi, pca953x_acpi_ids);
1463     #define MAX_BANK 5
1464     #define BANK_SZ 8
1465    
1466     -#define NBANK(chip) (chip->gpio_chip.ngpio / BANK_SZ)
1467     +#define NBANK(chip) DIV_ROUND_UP(chip->gpio_chip.ngpio, BANK_SZ)
1468    
1469     struct pca953x_chip {
1470     unsigned gpio_start;
1471     diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
1472     index 9416e0f5c1db..0aaa457a1710 100644
1473     --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
1474     +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
1475     @@ -566,28 +566,19 @@ int amdgpu_atombios_get_clock_info(struct amdgpu_device *adev)
1476     le16_to_cpu(firmware_info->info.usReferenceClock);
1477     ppll->reference_div = 0;
1478    
1479     - if (crev < 2)
1480     - ppll->pll_out_min =
1481     - le16_to_cpu(firmware_info->info.usMinPixelClockPLL_Output);
1482     - else
1483     - ppll->pll_out_min =
1484     - le32_to_cpu(firmware_info->info_12.ulMinPixelClockPLL_Output);
1485     + ppll->pll_out_min =
1486     + le32_to_cpu(firmware_info->info_12.ulMinPixelClockPLL_Output);
1487     ppll->pll_out_max =
1488     le32_to_cpu(firmware_info->info.ulMaxPixelClockPLL_Output);
1489    
1490     - if (crev >= 4) {
1491     - ppll->lcd_pll_out_min =
1492     - le16_to_cpu(firmware_info->info_14.usLcdMinPixelClockPLL_Output) * 100;
1493     - if (ppll->lcd_pll_out_min == 0)
1494     - ppll->lcd_pll_out_min = ppll->pll_out_min;
1495     - ppll->lcd_pll_out_max =
1496     - le16_to_cpu(firmware_info->info_14.usLcdMaxPixelClockPLL_Output) * 100;
1497     - if (ppll->lcd_pll_out_max == 0)
1498     - ppll->lcd_pll_out_max = ppll->pll_out_max;
1499     - } else {
1500     + ppll->lcd_pll_out_min =
1501     + le16_to_cpu(firmware_info->info_14.usLcdMinPixelClockPLL_Output) * 100;
1502     + if (ppll->lcd_pll_out_min == 0)
1503     ppll->lcd_pll_out_min = ppll->pll_out_min;
1504     + ppll->lcd_pll_out_max =
1505     + le16_to_cpu(firmware_info->info_14.usLcdMaxPixelClockPLL_Output) * 100;
1506     + if (ppll->lcd_pll_out_max == 0)
1507     ppll->lcd_pll_out_max = ppll->pll_out_max;
1508     - }
1509    
1510     if (ppll->pll_out_min == 0)
1511     ppll->pll_out_min = 64800;
1512     diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c
1513     index 5a8fbadbd27b..29adbbe225c4 100644
1514     --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c
1515     +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c
1516     @@ -10,6 +10,7 @@
1517     #include <linux/slab.h>
1518     #include <linux/acpi.h>
1519     #include <linux/pci.h>
1520     +#include <linux/delay.h>
1521    
1522     #include "amdgpu_acpi.h"
1523    
1524     @@ -256,6 +257,10 @@ static int amdgpu_atpx_set_discrete_state(struct amdgpu_atpx *atpx, u8 state)
1525     if (!info)
1526     return -EIO;
1527     kfree(info);
1528     +
1529     + /* 200ms delay is required after off */
1530     + if (state == 0)
1531     + msleep(200);
1532     }
1533     return 0;
1534     }
1535     diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
1536     index 7ef2c13921b4..930083336968 100644
1537     --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
1538     +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
1539     @@ -1690,7 +1690,6 @@ amdgpu_connector_add(struct amdgpu_device *adev,
1540     DRM_MODE_SCALE_NONE);
1541     /* no HPD on analog connectors */
1542     amdgpu_connector->hpd.hpd = AMDGPU_HPD_NONE;
1543     - connector->polled = DRM_CONNECTOR_POLL_CONNECT;
1544     connector->interlace_allowed = true;
1545     connector->doublescan_allowed = true;
1546     break;
1547     @@ -1893,8 +1892,10 @@ amdgpu_connector_add(struct amdgpu_device *adev,
1548     }
1549    
1550     if (amdgpu_connector->hpd.hpd == AMDGPU_HPD_NONE) {
1551     - if (i2c_bus->valid)
1552     - connector->polled = DRM_CONNECTOR_POLL_CONNECT;
1553     + if (i2c_bus->valid) {
1554     + connector->polled = DRM_CONNECTOR_POLL_CONNECT |
1555     + DRM_CONNECTOR_POLL_DISCONNECT;
1556     + }
1557     } else
1558     connector->polled = DRM_CONNECTOR_POLL_HPD;
1559    
1560     diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
1561     index c961fe093e12..16302f7d59f6 100644
1562     --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
1563     +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
1564     @@ -1793,7 +1793,23 @@ int amdgpu_resume_kms(struct drm_device *dev, bool resume, bool fbcon)
1565     }
1566    
1567     drm_kms_helper_poll_enable(dev);
1568     +
1569     + /*
1570     + * Most of the connector probing functions try to acquire runtime pm
1571     + * refs to ensure that the GPU is powered on when connector polling is
1572     + * performed. Since we're calling this from a runtime PM callback,
1573     + * trying to acquire rpm refs will cause us to deadlock.
1574     + *
1575     + * Since we're guaranteed to be holding the rpm lock, it's safe to
1576     + * temporarily disable the rpm helpers so this doesn't deadlock us.
1577     + */
1578     +#ifdef CONFIG_PM
1579     + dev->dev->power.disable_depth++;
1580     +#endif
1581     drm_helper_hpd_irq_event(dev);
1582     +#ifdef CONFIG_PM
1583     + dev->dev->power.disable_depth--;
1584     +#endif
1585    
1586     if (fbcon) {
1587     amdgpu_fbdev_set_suspend(adev, 0);
1588     diff --git a/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c b/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c
1589     index 1cd6de575305..542517d4e584 100644
1590     --- a/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c
1591     +++ b/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c
1592     @@ -98,6 +98,7 @@ amdgpu_atombios_encoder_set_backlight_level(struct amdgpu_encoder *amdgpu_encode
1593     case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA:
1594     case ENCODER_OBJECT_ID_INTERNAL_UNIPHY1:
1595     case ENCODER_OBJECT_ID_INTERNAL_UNIPHY2:
1596     + case ENCODER_OBJECT_ID_INTERNAL_UNIPHY3:
1597     if (dig->backlight_level == 0)
1598     amdgpu_atombios_encoder_setup_dig_transmitter(encoder,
1599     ATOM_TRANSMITTER_ACTION_LCD_BLOFF, 0, 0);
1600     diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
1601     index ea87033bfaf6..df17fababbd6 100644
1602     --- a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
1603     +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
1604     @@ -167,6 +167,7 @@ static int gmc_v7_0_init_microcode(struct amdgpu_device *adev)
1605     break;
1606     case CHIP_KAVERI:
1607     case CHIP_KABINI:
1608     + case CHIP_MULLINS:
1609     return 0;
1610     default: BUG();
1611     }
1612     diff --git a/drivers/gpu/drm/drm_cache.c b/drivers/gpu/drm/drm_cache.c
1613     index 6743ff7dccfa..7f4a6c550319 100644
1614     --- a/drivers/gpu/drm/drm_cache.c
1615     +++ b/drivers/gpu/drm/drm_cache.c
1616     @@ -136,6 +136,7 @@ drm_clflush_virt_range(void *addr, unsigned long length)
1617     mb();
1618     for (; addr < end; addr += size)
1619     clflushopt(addr);
1620     + clflushopt(end - 1); /* force serialisation */
1621     mb();
1622     return;
1623     }
1624     diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
1625     index d5d2c03fd136..8c9ac021608f 100644
1626     --- a/drivers/gpu/drm/drm_edid.c
1627     +++ b/drivers/gpu/drm/drm_edid.c
1628     @@ -73,6 +73,8 @@
1629     #define EDID_QUIRK_FORCE_8BPC (1 << 8)
1630     /* Force 12bpc */
1631     #define EDID_QUIRK_FORCE_12BPC (1 << 9)
1632     +/* Force 6bpc */
1633     +#define EDID_QUIRK_FORCE_6BPC (1 << 10)
1634    
1635     struct detailed_mode_closure {
1636     struct drm_connector *connector;
1637     @@ -99,6 +101,9 @@ static struct edid_quirk {
1638     /* Unknown Acer */
1639     { "ACR", 2423, EDID_QUIRK_FIRST_DETAILED_PREFERRED },
1640    
1641     + /* AEO model 0 reports 8 bpc, but is a 6 bpc panel */
1642     + { "AEO", 0, EDID_QUIRK_FORCE_6BPC },
1643     +
1644     /* Belinea 10 15 55 */
1645     { "MAX", 1516, EDID_QUIRK_PREFER_LARGE_60 },
1646     { "MAX", 0x77e, EDID_QUIRK_PREFER_LARGE_60 },
1647     @@ -3820,6 +3825,9 @@ int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid)
1648    
1649     drm_add_display_info(edid, &connector->display_info, connector);
1650    
1651     + if (quirks & EDID_QUIRK_FORCE_6BPC)
1652     + connector->display_info.bpc = 6;
1653     +
1654     if (quirks & EDID_QUIRK_FORCE_8BPC)
1655     connector->display_info.bpc = 8;
1656    
1657     diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
1658     index c41bc42b6fa7..3292495ee10f 100644
1659     --- a/drivers/gpu/drm/i915/intel_display.c
1660     +++ b/drivers/gpu/drm/i915/intel_display.c
1661     @@ -11952,21 +11952,11 @@ connected_sink_compute_bpp(struct intel_connector *connector,
1662     pipe_config->pipe_bpp = connector->base.display_info.bpc*3;
1663     }
1664    
1665     - /* Clamp bpp to default limit on screens without EDID 1.4 */
1666     - if (connector->base.display_info.bpc == 0) {
1667     - int type = connector->base.connector_type;
1668     - int clamp_bpp = 24;
1669     -
1670     - /* Fall back to 18 bpp when DP sink capability is unknown. */
1671     - if (type == DRM_MODE_CONNECTOR_DisplayPort ||
1672     - type == DRM_MODE_CONNECTOR_eDP)
1673     - clamp_bpp = 18;
1674     -
1675     - if (bpp > clamp_bpp) {
1676     - DRM_DEBUG_KMS("clamping display bpp (was %d) to default limit of %d\n",
1677     - bpp, clamp_bpp);
1678     - pipe_config->pipe_bpp = clamp_bpp;
1679     - }
1680     + /* Clamp bpp to 8 on screens without EDID 1.4 */
1681     + if (connector->base.display_info.bpc == 0 && bpp > 24) {
1682     + DRM_DEBUG_KMS("clamping display bpp (was %d) to default limit of 24\n",
1683     + bpp);
1684     + pipe_config->pipe_bpp = 24;
1685     }
1686     }
1687    
1688     diff --git a/drivers/gpu/drm/i915/intel_opregion.c b/drivers/gpu/drm/i915/intel_opregion.c
1689     index 6dc13c02c28e..e362a30776fa 100644
1690     --- a/drivers/gpu/drm/i915/intel_opregion.c
1691     +++ b/drivers/gpu/drm/i915/intel_opregion.c
1692     @@ -682,7 +682,7 @@ static void intel_didl_outputs(struct drm_device *dev)
1693     }
1694    
1695     if (!acpi_video_bus) {
1696     - DRM_ERROR("No ACPI video bus found\n");
1697     + DRM_DEBUG_KMS("No ACPI video bus found\n");
1698     return;
1699     }
1700    
1701     diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
1702     index eb434881ddbc..1e851e037c29 100644
1703     --- a/drivers/gpu/drm/i915/intel_pm.c
1704     +++ b/drivers/gpu/drm/i915/intel_pm.c
1705     @@ -4526,7 +4526,8 @@ void gen6_rps_idle(struct drm_i915_private *dev_priv)
1706     else
1707     gen6_set_rps(dev_priv->dev, dev_priv->rps.idle_freq);
1708     dev_priv->rps.last_adj = 0;
1709     - I915_WRITE(GEN6_PMINTRMSK, 0xffffffff);
1710     + I915_WRITE(GEN6_PMINTRMSK,
1711     + gen6_sanitize_rps_pm_mask(dev_priv, ~0));
1712     }
1713     mutex_unlock(&dev_priv->rps.hw_lock);
1714    
1715     diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c
1716     index 1d3ee5179ab8..d236fc7c425b 100644
1717     --- a/drivers/gpu/drm/nouveau/nouveau_drm.c
1718     +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c
1719     @@ -308,7 +308,16 @@ static int nouveau_drm_probe(struct pci_dev *pdev,
1720     bool boot = false;
1721     int ret;
1722    
1723     - /* remove conflicting drivers (vesafb, efifb etc) */
1724     + /* We need to check that the chipset is supported before booting
1725     + * fbdev off the hardware, as there's no way to put it back.
1726     + */
1727     + ret = nvkm_device_pci_new(pdev, NULL, "error", true, false, 0, &device);
1728     + if (ret)
1729     + return ret;
1730     +
1731     + nvkm_device_del(&device);
1732     +
1733     + /* Remove conflicting drivers (vesafb, efifb etc). */
1734     aper = alloc_apertures(3);
1735     if (!aper)
1736     return -ENOMEM;
1737     diff --git a/drivers/gpu/drm/nouveau/nv04_fbcon.c b/drivers/gpu/drm/nouveau/nv04_fbcon.c
1738     index 8f715feadf56..f90568327468 100644
1739     --- a/drivers/gpu/drm/nouveau/nv04_fbcon.c
1740     +++ b/drivers/gpu/drm/nouveau/nv04_fbcon.c
1741     @@ -107,11 +107,11 @@ nv04_fbcon_imageblit(struct fb_info *info, const struct fb_image *image)
1742     ((image->dx + image->width) & 0xffff));
1743     OUT_RING(chan, bg);
1744     OUT_RING(chan, fg);
1745     - OUT_RING(chan, (image->height << 16) | image->width);
1746     + OUT_RING(chan, (image->height << 16) | ALIGN(image->width, 8));
1747     OUT_RING(chan, (image->height << 16) | image->width);
1748     OUT_RING(chan, (image->dy << 16) | (image->dx & 0xffff));
1749    
1750     - dsize = ALIGN(image->width * image->height, 32) >> 5;
1751     + dsize = ALIGN(ALIGN(image->width, 8) * image->height, 32) >> 5;
1752     while (dsize) {
1753     int iter_len = dsize > 128 ? 128 : dsize;
1754    
1755     diff --git a/drivers/gpu/drm/nouveau/nv50_fbcon.c b/drivers/gpu/drm/nouveau/nv50_fbcon.c
1756     index a4e259a00430..c8e096533f60 100644
1757     --- a/drivers/gpu/drm/nouveau/nv50_fbcon.c
1758     +++ b/drivers/gpu/drm/nouveau/nv50_fbcon.c
1759     @@ -125,7 +125,7 @@ nv50_fbcon_imageblit(struct fb_info *info, const struct fb_image *image)
1760     OUT_RING(chan, 0);
1761     OUT_RING(chan, image->dy);
1762    
1763     - dwords = ALIGN(image->width * image->height, 32) >> 5;
1764     + dwords = ALIGN(ALIGN(image->width, 8) * image->height, 32) >> 5;
1765     while (dwords) {
1766     int push = dwords > 2047 ? 2047 : dwords;
1767    
1768     diff --git a/drivers/gpu/drm/nouveau/nvc0_fbcon.c b/drivers/gpu/drm/nouveau/nvc0_fbcon.c
1769     index f28315e865a5..22d32578dafd 100644
1770     --- a/drivers/gpu/drm/nouveau/nvc0_fbcon.c
1771     +++ b/drivers/gpu/drm/nouveau/nvc0_fbcon.c
1772     @@ -125,7 +125,7 @@ nvc0_fbcon_imageblit(struct fb_info *info, const struct fb_image *image)
1773     OUT_RING (chan, 0);
1774     OUT_RING (chan, image->dy);
1775    
1776     - dwords = ALIGN(image->width * image->height, 32) >> 5;
1777     + dwords = ALIGN(ALIGN(image->width, 8) * image->height, 32) >> 5;
1778     while (dwords) {
1779     int push = dwords > 2047 ? 2047 : dwords;
1780    
1781     diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv30.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv30.c
1782     index 69de8c6259fe..f1e15a4d4f64 100644
1783     --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv30.c
1784     +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv30.c
1785     @@ -76,8 +76,8 @@ nv30_gr_chan_new(struct nvkm_gr *base, struct nvkm_fifo_chan *fifoch,
1786     nvkm_wo32(chan->inst, i, 0x00040004);
1787     for (i = 0x1f18; i <= 0x3088 ; i += 16) {
1788     nvkm_wo32(chan->inst, i + 0, 0x10700ff9);
1789     - nvkm_wo32(chan->inst, i + 1, 0x0436086c);
1790     - nvkm_wo32(chan->inst, i + 2, 0x000c001b);
1791     + nvkm_wo32(chan->inst, i + 4, 0x0436086c);
1792     + nvkm_wo32(chan->inst, i + 8, 0x000c001b);
1793     }
1794     for (i = 0x30b8; i < 0x30c8; i += 4)
1795     nvkm_wo32(chan->inst, i, 0x0000ffff);
1796     diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv34.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv34.c
1797     index 2207dac23981..300f5ed5de0b 100644
1798     --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv34.c
1799     +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv34.c
1800     @@ -75,8 +75,8 @@ nv34_gr_chan_new(struct nvkm_gr *base, struct nvkm_fifo_chan *fifoch,
1801     nvkm_wo32(chan->inst, i, 0x00040004);
1802     for (i = 0x15ac; i <= 0x271c ; i += 16) {
1803     nvkm_wo32(chan->inst, i + 0, 0x10700ff9);
1804     - nvkm_wo32(chan->inst, i + 1, 0x0436086c);
1805     - nvkm_wo32(chan->inst, i + 2, 0x000c001b);
1806     + nvkm_wo32(chan->inst, i + 4, 0x0436086c);
1807     + nvkm_wo32(chan->inst, i + 8, 0x000c001b);
1808     }
1809     for (i = 0x274c; i < 0x275c; i += 4)
1810     nvkm_wo32(chan->inst, i, 0x0000ffff);
1811     diff --git a/drivers/gpu/drm/radeon/atombios_encoders.c b/drivers/gpu/drm/radeon/atombios_encoders.c
1812     index 0b04b9282f56..d4ac8c837314 100644
1813     --- a/drivers/gpu/drm/radeon/atombios_encoders.c
1814     +++ b/drivers/gpu/drm/radeon/atombios_encoders.c
1815     @@ -120,6 +120,7 @@ atombios_set_backlight_level(struct radeon_encoder *radeon_encoder, u8 level)
1816     case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA:
1817     case ENCODER_OBJECT_ID_INTERNAL_UNIPHY1:
1818     case ENCODER_OBJECT_ID_INTERNAL_UNIPHY2:
1819     + case ENCODER_OBJECT_ID_INTERNAL_UNIPHY3:
1820     if (dig->backlight_level == 0)
1821     atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_LCD_BLOFF, 0, 0);
1822     else {
1823     diff --git a/drivers/gpu/drm/radeon/radeon_atombios.c b/drivers/gpu/drm/radeon/radeon_atombios.c
1824     index de9a2ffcf5f7..0c5b3eeff82d 100644
1825     --- a/drivers/gpu/drm/radeon/radeon_atombios.c
1826     +++ b/drivers/gpu/drm/radeon/radeon_atombios.c
1827     @@ -1155,7 +1155,7 @@ bool radeon_atom_get_clock_info(struct drm_device *dev)
1828     le16_to_cpu(firmware_info->info.usReferenceClock);
1829     p1pll->reference_div = 0;
1830    
1831     - if (crev < 2)
1832     + if ((frev < 2) && (crev < 2))
1833     p1pll->pll_out_min =
1834     le16_to_cpu(firmware_info->info.usMinPixelClockPLL_Output);
1835     else
1836     @@ -1164,7 +1164,7 @@ bool radeon_atom_get_clock_info(struct drm_device *dev)
1837     p1pll->pll_out_max =
1838     le32_to_cpu(firmware_info->info.ulMaxPixelClockPLL_Output);
1839    
1840     - if (crev >= 4) {
1841     + if (((frev < 2) && (crev >= 4)) || (frev >= 2)) {
1842     p1pll->lcd_pll_out_min =
1843     le16_to_cpu(firmware_info->info_14.usLcdMinPixelClockPLL_Output) * 100;
1844     if (p1pll->lcd_pll_out_min == 0)
1845     diff --git a/drivers/gpu/drm/radeon/radeon_atpx_handler.c b/drivers/gpu/drm/radeon/radeon_atpx_handler.c
1846     index c4b4f298a283..69ce95571136 100644
1847     --- a/drivers/gpu/drm/radeon/radeon_atpx_handler.c
1848     +++ b/drivers/gpu/drm/radeon/radeon_atpx_handler.c
1849     @@ -10,6 +10,7 @@
1850     #include <linux/slab.h>
1851     #include <linux/acpi.h>
1852     #include <linux/pci.h>
1853     +#include <linux/delay.h>
1854    
1855     #include "radeon_acpi.h"
1856    
1857     @@ -255,6 +256,10 @@ static int radeon_atpx_set_discrete_state(struct radeon_atpx *atpx, u8 state)
1858     if (!info)
1859     return -EIO;
1860     kfree(info);
1861     +
1862     + /* 200ms delay is required after off */
1863     + if (state == 0)
1864     + msleep(200);
1865     }
1866     return 0;
1867     }
1868     diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c
1869     index 9cfc1c3e1965..30f00748ed37 100644
1870     --- a/drivers/gpu/drm/radeon/radeon_connectors.c
1871     +++ b/drivers/gpu/drm/radeon/radeon_connectors.c
1872     @@ -2058,7 +2058,6 @@ radeon_add_atom_connector(struct drm_device *dev,
1873     RADEON_OUTPUT_CSC_BYPASS);
1874     /* no HPD on analog connectors */
1875     radeon_connector->hpd.hpd = RADEON_HPD_NONE;
1876     - connector->polled = DRM_CONNECTOR_POLL_CONNECT;
1877     connector->interlace_allowed = true;
1878     connector->doublescan_allowed = true;
1879     break;
1880     @@ -2308,8 +2307,10 @@ radeon_add_atom_connector(struct drm_device *dev,
1881     }
1882    
1883     if (radeon_connector->hpd.hpd == RADEON_HPD_NONE) {
1884     - if (i2c_bus->valid)
1885     - connector->polled = DRM_CONNECTOR_POLL_CONNECT;
1886     + if (i2c_bus->valid) {
1887     + connector->polled = DRM_CONNECTOR_POLL_CONNECT |
1888     + DRM_CONNECTOR_POLL_DISCONNECT;
1889     + }
1890     } else
1891     connector->polled = DRM_CONNECTOR_POLL_HPD;
1892    
1893     @@ -2385,7 +2386,6 @@ radeon_add_legacy_connector(struct drm_device *dev,
1894     1);
1895     /* no HPD on analog connectors */
1896     radeon_connector->hpd.hpd = RADEON_HPD_NONE;
1897     - connector->polled = DRM_CONNECTOR_POLL_CONNECT;
1898     connector->interlace_allowed = true;
1899     connector->doublescan_allowed = true;
1900     break;
1901     @@ -2470,10 +2470,13 @@ radeon_add_legacy_connector(struct drm_device *dev,
1902     }
1903    
1904     if (radeon_connector->hpd.hpd == RADEON_HPD_NONE) {
1905     - if (i2c_bus->valid)
1906     - connector->polled = DRM_CONNECTOR_POLL_CONNECT;
1907     + if (i2c_bus->valid) {
1908     + connector->polled = DRM_CONNECTOR_POLL_CONNECT |
1909     + DRM_CONNECTOR_POLL_DISCONNECT;
1910     + }
1911     } else
1912     connector->polled = DRM_CONNECTOR_POLL_HPD;
1913     +
1914     connector->display_info.subpixel_order = subpixel_order;
1915     drm_connector_register(connector);
1916     }
1917     diff --git a/drivers/hid/uhid.c b/drivers/hid/uhid.c
1918     index e094c572b86e..1a2032c2c1fb 100644
1919     --- a/drivers/hid/uhid.c
1920     +++ b/drivers/hid/uhid.c
1921     @@ -51,10 +51,26 @@ struct uhid_device {
1922     u32 report_id;
1923     u32 report_type;
1924     struct uhid_event report_buf;
1925     + struct work_struct worker;
1926     };
1927    
1928     static struct miscdevice uhid_misc;
1929    
1930     +static void uhid_device_add_worker(struct work_struct *work)
1931     +{
1932     + struct uhid_device *uhid = container_of(work, struct uhid_device, worker);
1933     + int ret;
1934     +
1935     + ret = hid_add_device(uhid->hid);
1936     + if (ret) {
1937     + hid_err(uhid->hid, "Cannot register HID device: error %d\n", ret);
1938     +
1939     + hid_destroy_device(uhid->hid);
1940     + uhid->hid = NULL;
1941     + uhid->running = false;
1942     + }
1943     +}
1944     +
1945     static void uhid_queue(struct uhid_device *uhid, struct uhid_event *ev)
1946     {
1947     __u8 newhead;
1948     @@ -498,18 +514,14 @@ static int uhid_dev_create2(struct uhid_device *uhid,
1949     uhid->hid = hid;
1950     uhid->running = true;
1951    
1952     - ret = hid_add_device(hid);
1953     - if (ret) {
1954     - hid_err(hid, "Cannot register HID device\n");
1955     - goto err_hid;
1956     - }
1957     + /* Adding of a HID device is done through a worker, to allow HID drivers
1958     + * which use feature requests during .probe to work, without they would
1959     + * be blocked on devlock, which is held by uhid_char_write.
1960     + */
1961     + schedule_work(&uhid->worker);
1962    
1963     return 0;
1964    
1965     -err_hid:
1966     - hid_destroy_device(hid);
1967     - uhid->hid = NULL;
1968     - uhid->running = false;
1969     err_free:
1970     kfree(uhid->rd_data);
1971     uhid->rd_data = NULL;
1972     @@ -550,6 +562,8 @@ static int uhid_dev_destroy(struct uhid_device *uhid)
1973     uhid->running = false;
1974     wake_up_interruptible(&uhid->report_wait);
1975    
1976     + cancel_work_sync(&uhid->worker);
1977     +
1978     hid_destroy_device(uhid->hid);
1979     kfree(uhid->rd_data);
1980    
1981     @@ -612,6 +626,7 @@ static int uhid_char_open(struct inode *inode, struct file *file)
1982     init_waitqueue_head(&uhid->waitq);
1983     init_waitqueue_head(&uhid->report_wait);
1984     uhid->running = false;
1985     + INIT_WORK(&uhid->worker, uhid_device_add_worker);
1986    
1987     file->private_data = uhid;
1988     nonseekable_open(inode, file);
1989     diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c
1990     index f19b6f7a467a..9b5440f6b3b4 100644
1991     --- a/drivers/hv/vmbus_drv.c
1992     +++ b/drivers/hv/vmbus_drv.c
1993     @@ -41,6 +41,7 @@
1994     #include <linux/ptrace.h>
1995     #include <linux/screen_info.h>
1996     #include <linux/kdebug.h>
1997     +#include <linux/random.h>
1998     #include "hyperv_vmbus.h"
1999    
2000     static struct acpi_device *hv_acpi_dev;
2001     @@ -826,6 +827,8 @@ static void vmbus_isr(void)
2002     else
2003     tasklet_schedule(&msg_dpc);
2004     }
2005     +
2006     + add_interrupt_randomness(HYPERVISOR_CALLBACK_VECTOR, 0);
2007     }
2008    
2009    
2010     diff --git a/drivers/i2c/busses/i2c-efm32.c b/drivers/i2c/busses/i2c-efm32.c
2011     index 8eff62738877..e253598d764c 100644
2012     --- a/drivers/i2c/busses/i2c-efm32.c
2013     +++ b/drivers/i2c/busses/i2c-efm32.c
2014     @@ -433,7 +433,7 @@ static int efm32_i2c_probe(struct platform_device *pdev)
2015     ret = request_irq(ddata->irq, efm32_i2c_irq, 0, DRIVER_NAME, ddata);
2016     if (ret < 0) {
2017     dev_err(&pdev->dev, "failed to request irq (%d)\n", ret);
2018     - return ret;
2019     + goto err_disable_clk;
2020     }
2021    
2022     ret = i2c_add_adapter(&ddata->adapter);
2023     diff --git a/drivers/infiniband/core/iwpm_util.c b/drivers/infiniband/core/iwpm_util.c
2024     index 5fb089e91353..fb43a242847b 100644
2025     --- a/drivers/infiniband/core/iwpm_util.c
2026     +++ b/drivers/infiniband/core/iwpm_util.c
2027     @@ -634,6 +634,7 @@ static int send_nlmsg_done(struct sk_buff *skb, u8 nl_client, int iwpm_pid)
2028     if (!(ibnl_put_msg(skb, &nlh, 0, 0, nl_client,
2029     RDMA_NL_IWPM_MAPINFO, NLM_F_MULTI))) {
2030     pr_warn("%s Unable to put NLMSG_DONE\n", __func__);
2031     + dev_kfree_skb(skb);
2032     return -ENOMEM;
2033     }
2034     nlh->nlmsg_type = NLMSG_DONE;
2035     diff --git a/drivers/infiniband/core/sa_query.c b/drivers/infiniband/core/sa_query.c
2036     index a95a32ba596e..d3b7ecd106f7 100644
2037     --- a/drivers/infiniband/core/sa_query.c
2038     +++ b/drivers/infiniband/core/sa_query.c
2039     @@ -534,7 +534,7 @@ static int ib_nl_send_msg(struct ib_sa_query *query, gfp_t gfp_mask)
2040     data = ibnl_put_msg(skb, &nlh, query->seq, 0, RDMA_NL_LS,
2041     RDMA_NL_LS_OP_RESOLVE, NLM_F_REQUEST);
2042     if (!data) {
2043     - kfree_skb(skb);
2044     + nlmsg_free(skb);
2045     return -EMSGSIZE;
2046     }
2047    
2048     diff --git a/drivers/infiniband/hw/mlx4/mad.c b/drivers/infiniband/hw/mlx4/mad.c
2049     index 870e56b6b25f..05179f47bbde 100644
2050     --- a/drivers/infiniband/hw/mlx4/mad.c
2051     +++ b/drivers/infiniband/hw/mlx4/mad.c
2052     @@ -526,7 +526,7 @@ int mlx4_ib_send_to_slave(struct mlx4_ib_dev *dev, int slave, u8 port,
2053     tun_tx_ix = (++tun_qp->tx_ix_head) & (MLX4_NUM_TUNNEL_BUFS - 1);
2054     spin_unlock(&tun_qp->tx_lock);
2055     if (ret)
2056     - goto out;
2057     + goto end;
2058    
2059     tun_mad = (struct mlx4_rcv_tunnel_mad *) (tun_qp->tx_ring[tun_tx_ix].buf.addr);
2060     if (tun_qp->tx_ring[tun_tx_ix].ah)
2061     @@ -595,9 +595,15 @@ int mlx4_ib_send_to_slave(struct mlx4_ib_dev *dev, int slave, u8 port,
2062     wr.wr.send_flags = IB_SEND_SIGNALED;
2063    
2064     ret = ib_post_send(src_qp, &wr.wr, &bad_wr);
2065     -out:
2066     - if (ret)
2067     - ib_destroy_ah(ah);
2068     + if (!ret)
2069     + return 0;
2070     + out:
2071     + spin_lock(&tun_qp->tx_lock);
2072     + tun_qp->tx_ix_tail++;
2073     + spin_unlock(&tun_qp->tx_lock);
2074     + tun_qp->tx_ring[tun_tx_ix].ah = NULL;
2075     +end:
2076     + ib_destroy_ah(ah);
2077     return ret;
2078     }
2079    
2080     @@ -1278,9 +1284,15 @@ int mlx4_ib_send_to_wire(struct mlx4_ib_dev *dev, int slave, u8 port,
2081    
2082    
2083     ret = ib_post_send(send_qp, &wr.wr, &bad_wr);
2084     + if (!ret)
2085     + return 0;
2086     +
2087     + spin_lock(&sqp->tx_lock);
2088     + sqp->tx_ix_tail++;
2089     + spin_unlock(&sqp->tx_lock);
2090     + sqp->tx_ring[wire_tx_ix].ah = NULL;
2091     out:
2092     - if (ret)
2093     - ib_destroy_ah(ah);
2094     + ib_destroy_ah(ah);
2095     return ret;
2096     }
2097    
2098     diff --git a/drivers/infiniband/hw/mlx4/qp.c b/drivers/infiniband/hw/mlx4/qp.c
2099     index 13eaaf45288f..ea1e2ddaddf5 100644
2100     --- a/drivers/infiniband/hw/mlx4/qp.c
2101     +++ b/drivers/infiniband/hw/mlx4/qp.c
2102     @@ -357,7 +357,7 @@ static int send_wqe_overhead(enum mlx4_ib_qp_type type, u32 flags)
2103     sizeof (struct mlx4_wqe_raddr_seg);
2104     case MLX4_IB_QPT_RC:
2105     return sizeof (struct mlx4_wqe_ctrl_seg) +
2106     - sizeof (struct mlx4_wqe_atomic_seg) +
2107     + sizeof (struct mlx4_wqe_masked_atomic_seg) +
2108     sizeof (struct mlx4_wqe_raddr_seg);
2109     case MLX4_IB_QPT_SMI:
2110     case MLX4_IB_QPT_GSI:
2111     @@ -1162,8 +1162,10 @@ struct ib_qp *mlx4_ib_create_qp(struct ib_pd *pd,
2112     {
2113     err = create_qp_common(to_mdev(pd->device), pd, init_attr,
2114     udata, 0, &qp, gfp);
2115     - if (err)
2116     + if (err) {
2117     + kfree(qp);
2118     return ERR_PTR(err);
2119     + }
2120    
2121     qp->ibqp.qp_num = qp->mqp.qpn;
2122     qp->xrcdn = xrcdn;
2123     diff --git a/drivers/infiniband/hw/mlx5/cq.c b/drivers/infiniband/hw/mlx5/cq.c
2124     index 92ddae101ecc..8184267c7901 100644
2125     --- a/drivers/infiniband/hw/mlx5/cq.c
2126     +++ b/drivers/infiniband/hw/mlx5/cq.c
2127     @@ -763,7 +763,8 @@ struct ib_cq *mlx5_ib_create_cq(struct ib_device *ibdev,
2128     if (attr->flags)
2129     return ERR_PTR(-EINVAL);
2130    
2131     - if (entries < 0)
2132     + if (entries < 0 ||
2133     + (entries > (1 << MLX5_CAP_GEN(dev->mdev, log_max_cq_sz))))
2134     return ERR_PTR(-EINVAL);
2135    
2136     entries = roundup_pow_of_two(entries + 1);
2137     @@ -1094,11 +1095,16 @@ int mlx5_ib_resize_cq(struct ib_cq *ibcq, int entries, struct ib_udata *udata)
2138     return -ENOSYS;
2139     }
2140    
2141     - if (entries < 1)
2142     + if (entries < 1 ||
2143     + entries > (1 << MLX5_CAP_GEN(dev->mdev, log_max_cq_sz))) {
2144     + mlx5_ib_warn(dev, "wrong entries number %d, max %d\n",
2145     + entries,
2146     + 1 << MLX5_CAP_GEN(dev->mdev, log_max_cq_sz));
2147     return -EINVAL;
2148     + }
2149    
2150     entries = roundup_pow_of_two(entries + 1);
2151     - if (entries > (1 << MLX5_CAP_GEN(dev->mdev, log_max_cq_sz)) + 1)
2152     + if (entries > (1 << MLX5_CAP_GEN(dev->mdev, log_max_cq_sz)) + 1)
2153     return -EINVAL;
2154    
2155     if (entries == ibcq->cqe + 1)
2156     diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c
2157     index fd17443aeacd..bfc940ff9c8a 100644
2158     --- a/drivers/infiniband/hw/mlx5/main.c
2159     +++ b/drivers/infiniband/hw/mlx5/main.c
2160     @@ -962,14 +962,11 @@ static void mlx5_ib_event(struct mlx5_core_dev *dev, void *context,
2161     break;
2162    
2163     case MLX5_DEV_EVENT_PORT_DOWN:
2164     + case MLX5_DEV_EVENT_PORT_INITIALIZED:
2165     ibev.event = IB_EVENT_PORT_ERR;
2166     port = (u8)param;
2167     break;
2168    
2169     - case MLX5_DEV_EVENT_PORT_INITIALIZED:
2170     - /* not used by ULPs */
2171     - return;
2172     -
2173     case MLX5_DEV_EVENT_LID_CHANGE:
2174     ibev.event = IB_EVENT_LID_CHANGE;
2175     port = (u8)param;
2176     diff --git a/drivers/infiniband/hw/mlx5/qp.c b/drivers/infiniband/hw/mlx5/qp.c
2177     index 307bdbca8938..cfcfbb6b84d7 100644
2178     --- a/drivers/infiniband/hw/mlx5/qp.c
2179     +++ b/drivers/infiniband/hw/mlx5/qp.c
2180     @@ -226,6 +226,8 @@ static int set_rq_size(struct mlx5_ib_dev *dev, struct ib_qp_cap *cap,
2181     qp->rq.max_gs = 0;
2182     qp->rq.wqe_cnt = 0;
2183     qp->rq.wqe_shift = 0;
2184     + cap->max_recv_wr = 0;
2185     + cap->max_recv_sge = 0;
2186     } else {
2187     if (ucmd) {
2188     qp->rq.wqe_cnt = ucmd->rq_wqe_count;
2189     @@ -2525,10 +2527,11 @@ static u8 get_fence(u8 fence, struct ib_send_wr *wr)
2190     return MLX5_FENCE_MODE_SMALL_AND_FENCE;
2191     else
2192     return fence;
2193     -
2194     - } else {
2195     - return 0;
2196     + } else if (unlikely(wr->send_flags & IB_SEND_FENCE)) {
2197     + return MLX5_FENCE_MODE_FENCE;
2198     }
2199     +
2200     + return 0;
2201     }
2202    
2203     static int begin_wqe(struct mlx5_ib_qp *qp, void **seg,
2204     @@ -3092,17 +3095,19 @@ int mlx5_ib_query_qp(struct ib_qp *ibqp, struct ib_qp_attr *qp_attr, int qp_attr
2205     qp_attr->cap.max_recv_sge = qp->rq.max_gs;
2206    
2207     if (!ibqp->uobject) {
2208     - qp_attr->cap.max_send_wr = qp->sq.wqe_cnt;
2209     + qp_attr->cap.max_send_wr = qp->sq.max_post;
2210     qp_attr->cap.max_send_sge = qp->sq.max_gs;
2211     + qp_init_attr->qp_context = ibqp->qp_context;
2212     } else {
2213     qp_attr->cap.max_send_wr = 0;
2214     qp_attr->cap.max_send_sge = 0;
2215     }
2216    
2217     - /* We don't support inline sends for kernel QPs (yet), and we
2218     - * don't know what userspace's value should be.
2219     - */
2220     - qp_attr->cap.max_inline_data = 0;
2221     + qp_init_attr->qp_type = ibqp->qp_type;
2222     + qp_init_attr->recv_cq = ibqp->recv_cq;
2223     + qp_init_attr->send_cq = ibqp->send_cq;
2224     + qp_init_attr->srq = ibqp->srq;
2225     + qp_attr->cap.max_inline_data = qp->max_inline_data;
2226    
2227     qp_init_attr->cap = qp_attr->cap;
2228    
2229     diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c
2230     index 7d3281866ffc..942dffca6a9d 100644
2231     --- a/drivers/infiniband/ulp/ipoib/ipoib_main.c
2232     +++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c
2233     @@ -1131,7 +1131,9 @@ struct ipoib_neigh *ipoib_neigh_get(struct net_device *dev, u8 *daddr)
2234     neigh = NULL;
2235     goto out_unlock;
2236     }
2237     - neigh->alive = jiffies;
2238     +
2239     + if (likely(skb_queue_len(&neigh->queue) < IPOIB_MAX_PATH_REC_QUEUE))
2240     + neigh->alive = jiffies;
2241     goto out_unlock;
2242     }
2243     }
2244     diff --git a/drivers/input/mouse/elan_i2c_core.c b/drivers/input/mouse/elan_i2c_core.c
2245     index 2f589857a039..d15b33813021 100644
2246     --- a/drivers/input/mouse/elan_i2c_core.c
2247     +++ b/drivers/input/mouse/elan_i2c_core.c
2248     @@ -4,7 +4,8 @@
2249     * Copyright (c) 2013 ELAN Microelectronics Corp.
2250     *
2251     * Author: 林政維 (Duson Lin) <dusonlin@emc.com.tw>
2252     - * Version: 1.6.0
2253     + * Author: KT Liao <kt.liao@emc.com.tw>
2254     + * Version: 1.6.2
2255     *
2256     * Based on cyapa driver:
2257     * copyright (c) 2011-2012 Cypress Semiconductor, Inc.
2258     @@ -40,7 +41,7 @@
2259     #include "elan_i2c.h"
2260    
2261     #define DRIVER_NAME "elan_i2c"
2262     -#define ELAN_DRIVER_VERSION "1.6.1"
2263     +#define ELAN_DRIVER_VERSION "1.6.2"
2264     #define ELAN_VENDOR_ID 0x04f3
2265     #define ETP_MAX_PRESSURE 255
2266     #define ETP_FWIDTH_REDUCE 90
2267     @@ -199,9 +200,41 @@ static int elan_sleep(struct elan_tp_data *data)
2268     return error;
2269     }
2270    
2271     +static int elan_query_product(struct elan_tp_data *data)
2272     +{
2273     + int error;
2274     +
2275     + error = data->ops->get_product_id(data->client, &data->product_id);
2276     + if (error)
2277     + return error;
2278     +
2279     + error = data->ops->get_sm_version(data->client, &data->ic_type,
2280     + &data->sm_version);
2281     + if (error)
2282     + return error;
2283     +
2284     + return 0;
2285     +}
2286     +
2287     +static int elan_check_ASUS_special_fw(struct elan_tp_data *data)
2288     +{
2289     + if (data->ic_type != 0x0E)
2290     + return false;
2291     +
2292     + switch (data->product_id) {
2293     + case 0x05 ... 0x07:
2294     + case 0x09:
2295     + case 0x13:
2296     + return true;
2297     + default:
2298     + return false;
2299     + }
2300     +}
2301     +
2302     static int __elan_initialize(struct elan_tp_data *data)
2303     {
2304     struct i2c_client *client = data->client;
2305     + bool woken_up = false;
2306     int error;
2307    
2308     error = data->ops->initialize(client);
2309     @@ -210,6 +243,27 @@ static int __elan_initialize(struct elan_tp_data *data)
2310     return error;
2311     }
2312    
2313     + error = elan_query_product(data);
2314     + if (error)
2315     + return error;
2316     +
2317     + /*
2318     + * Some ASUS devices were shipped with firmware that requires
2319     + * touchpads to be woken up first, before attempting to switch
2320     + * them into absolute reporting mode.
2321     + */
2322     + if (elan_check_ASUS_special_fw(data)) {
2323     + error = data->ops->sleep_control(client, false);
2324     + if (error) {
2325     + dev_err(&client->dev,
2326     + "failed to wake device up: %d\n", error);
2327     + return error;
2328     + }
2329     +
2330     + msleep(200);
2331     + woken_up = true;
2332     + }
2333     +
2334     data->mode |= ETP_ENABLE_ABS;
2335     error = data->ops->set_mode(client, data->mode);
2336     if (error) {
2337     @@ -218,11 +272,13 @@ static int __elan_initialize(struct elan_tp_data *data)
2338     return error;
2339     }
2340    
2341     - error = data->ops->sleep_control(client, false);
2342     - if (error) {
2343     - dev_err(&client->dev,
2344     - "failed to wake device up: %d\n", error);
2345     - return error;
2346     + if (!woken_up) {
2347     + error = data->ops->sleep_control(client, false);
2348     + if (error) {
2349     + dev_err(&client->dev,
2350     + "failed to wake device up: %d\n", error);
2351     + return error;
2352     + }
2353     }
2354    
2355     return 0;
2356     @@ -248,10 +304,6 @@ static int elan_query_device_info(struct elan_tp_data *data)
2357     {
2358     int error;
2359    
2360     - error = data->ops->get_product_id(data->client, &data->product_id);
2361     - if (error)
2362     - return error;
2363     -
2364     error = data->ops->get_version(data->client, false, &data->fw_version);
2365     if (error)
2366     return error;
2367     @@ -261,11 +313,6 @@ static int elan_query_device_info(struct elan_tp_data *data)
2368     if (error)
2369     return error;
2370    
2371     - error = data->ops->get_sm_version(data->client, &data->ic_type,
2372     - &data->sm_version);
2373     - if (error)
2374     - return error;
2375     -
2376     error = data->ops->get_version(data->client, true, &data->iap_version);
2377     if (error)
2378     return error;
2379     diff --git a/drivers/input/touchscreen/sur40.c b/drivers/input/touchscreen/sur40.c
2380     index d214f22ed305..45b466e3bbe8 100644
2381     --- a/drivers/input/touchscreen/sur40.c
2382     +++ b/drivers/input/touchscreen/sur40.c
2383     @@ -126,7 +126,7 @@ struct sur40_image_header {
2384     #define VIDEO_PACKET_SIZE 16384
2385    
2386     /* polling interval (ms) */
2387     -#define POLL_INTERVAL 4
2388     +#define POLL_INTERVAL 1
2389    
2390     /* maximum number of contacts FIXME: this is a guess? */
2391     #define MAX_CONTACTS 64
2392     @@ -441,7 +441,7 @@ static void sur40_process_video(struct sur40_state *sur40)
2393    
2394     /* return error if streaming was stopped in the meantime */
2395     if (sur40->sequence == -1)
2396     - goto err_poll;
2397     + return;
2398    
2399     /* mark as finished */
2400     v4l2_get_timestamp(&new_buf->vb.timestamp);
2401     @@ -730,6 +730,7 @@ static int sur40_start_streaming(struct vb2_queue *vq, unsigned int count)
2402     static void sur40_stop_streaming(struct vb2_queue *vq)
2403     {
2404     struct sur40_state *sur40 = vb2_get_drv_priv(vq);
2405     + vb2_wait_for_all_buffers(vq);
2406     sur40->sequence = -1;
2407    
2408     /* Release all active buffers */
2409     diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c
2410     index b9319b76a8a1..0397985a2601 100644
2411     --- a/drivers/iommu/amd_iommu.c
2412     +++ b/drivers/iommu/amd_iommu.c
2413     @@ -352,9 +352,11 @@ static void init_iommu_group(struct device *dev)
2414     if (!domain)
2415     goto out;
2416    
2417     - dma_domain = to_pdomain(domain)->priv;
2418     + if (to_pdomain(domain)->flags == PD_DMA_OPS_MASK) {
2419     + dma_domain = to_pdomain(domain)->priv;
2420     + init_unity_mappings_for_device(dev, dma_domain);
2421     + }
2422    
2423     - init_unity_mappings_for_device(dev, dma_domain);
2424     out:
2425     iommu_group_put(group);
2426     }
2427     @@ -2322,8 +2324,15 @@ static void update_device_table(struct protection_domain *domain)
2428     {
2429     struct iommu_dev_data *dev_data;
2430    
2431     - list_for_each_entry(dev_data, &domain->dev_list, list)
2432     + list_for_each_entry(dev_data, &domain->dev_list, list) {
2433     set_dte_entry(dev_data->devid, domain, dev_data->ats.enabled);
2434     +
2435     + if (dev_data->devid == dev_data->alias)
2436     + continue;
2437     +
2438     + /* There is an alias, update device table entry for it */
2439     + set_dte_entry(dev_data->alias, domain, dev_data->ats.enabled);
2440     + }
2441     }
2442    
2443     static void update_domain(struct protection_domain *domain)
2444     @@ -2970,9 +2979,7 @@ static struct iommu_domain *amd_iommu_domain_alloc(unsigned type)
2445     static void amd_iommu_domain_free(struct iommu_domain *dom)
2446     {
2447     struct protection_domain *domain;
2448     -
2449     - if (!dom)
2450     - return;
2451     + struct dma_ops_domain *dma_dom;
2452    
2453     domain = to_pdomain(dom);
2454    
2455     @@ -2981,13 +2988,24 @@ static void amd_iommu_domain_free(struct iommu_domain *dom)
2456    
2457     BUG_ON(domain->dev_cnt != 0);
2458    
2459     - if (domain->mode != PAGE_MODE_NONE)
2460     - free_pagetable(domain);
2461     + if (!dom)
2462     + return;
2463     +
2464     + switch (dom->type) {
2465     + case IOMMU_DOMAIN_DMA:
2466     + dma_dom = domain->priv;
2467     + dma_ops_domain_free(dma_dom);
2468     + break;
2469     + default:
2470     + if (domain->mode != PAGE_MODE_NONE)
2471     + free_pagetable(domain);
2472    
2473     - if (domain->flags & PD_IOMMUV2_MASK)
2474     - free_gcr3_table(domain);
2475     + if (domain->flags & PD_IOMMUV2_MASK)
2476     + free_gcr3_table(domain);
2477    
2478     - protection_domain_free(domain);
2479     + protection_domain_free(domain);
2480     + break;
2481     + }
2482     }
2483    
2484     static void amd_iommu_detach_device(struct iommu_domain *dom,
2485     diff --git a/drivers/iommu/exynos-iommu.c b/drivers/iommu/exynos-iommu.c
2486     index 97c41b8ab5d9..29a31eb9ace3 100644
2487     --- a/drivers/iommu/exynos-iommu.c
2488     +++ b/drivers/iommu/exynos-iommu.c
2489     @@ -647,6 +647,7 @@ static struct platform_driver exynos_sysmmu_driver __refdata = {
2490     .name = "exynos-sysmmu",
2491     .of_match_table = sysmmu_of_match,
2492     .pm = &sysmmu_pm_ops,
2493     + .suppress_bind_attrs = true,
2494     }
2495     };
2496    
2497     diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
2498     index 6763a4dfed94..24d81308a1a6 100644
2499     --- a/drivers/iommu/intel-iommu.c
2500     +++ b/drivers/iommu/intel-iommu.c
2501     @@ -2032,7 +2032,7 @@ out_unlock:
2502     spin_unlock(&iommu->lock);
2503     spin_unlock_irqrestore(&device_domain_lock, flags);
2504    
2505     - return 0;
2506     + return ret;
2507     }
2508    
2509     struct domain_context_mapping_data {
2510     diff --git a/drivers/md/dm-flakey.c b/drivers/md/dm-flakey.c
2511     index 09e2afcafd2d..cd0a93df4cb7 100644
2512     --- a/drivers/md/dm-flakey.c
2513     +++ b/drivers/md/dm-flakey.c
2514     @@ -289,10 +289,16 @@ static int flakey_map(struct dm_target *ti, struct bio *bio)
2515     pb->bio_submitted = true;
2516    
2517     /*
2518     - * Map reads as normal.
2519     + * Map reads as normal only if corrupt_bio_byte set.
2520     */
2521     - if (bio_data_dir(bio) == READ)
2522     - goto map_bio;
2523     + if (bio_data_dir(bio) == READ) {
2524     + /* If flags were specified, only corrupt those that match. */
2525     + if (fc->corrupt_bio_byte && (fc->corrupt_bio_rw == READ) &&
2526     + all_corrupt_bio_flags_match(bio, fc))
2527     + goto map_bio;
2528     + else
2529     + return -EIO;
2530     + }
2531    
2532     /*
2533     * Drop writes?
2534     @@ -330,12 +336,13 @@ static int flakey_end_io(struct dm_target *ti, struct bio *bio, int error)
2535    
2536     /*
2537     * Corrupt successful READs while in down state.
2538     - * If flags were specified, only corrupt those that match.
2539     */
2540     - if (fc->corrupt_bio_byte && !error && pb->bio_submitted &&
2541     - (bio_data_dir(bio) == READ) && (fc->corrupt_bio_rw == READ) &&
2542     - all_corrupt_bio_flags_match(bio, fc))
2543     - corrupt_bio_data(bio, fc);
2544     + if (!error && pb->bio_submitted && (bio_data_dir(bio) == READ)) {
2545     + if (fc->corrupt_bio_byte)
2546     + corrupt_bio_data(bio, fc);
2547     + else
2548     + return -EIO;
2549     + }
2550    
2551     return error;
2552     }
2553     diff --git a/drivers/md/dm.c b/drivers/md/dm.c
2554     index c338aebb4ccd..a42729ebf272 100644
2555     --- a/drivers/md/dm.c
2556     +++ b/drivers/md/dm.c
2557     @@ -3078,7 +3078,8 @@ static void unlock_fs(struct mapped_device *md)
2558     * Caller must hold md->suspend_lock
2559     */
2560     static int __dm_suspend(struct mapped_device *md, struct dm_table *map,
2561     - unsigned suspend_flags, int interruptible)
2562     + unsigned suspend_flags, int interruptible,
2563     + int dmf_suspended_flag)
2564     {
2565     bool do_lockfs = suspend_flags & DM_SUSPEND_LOCKFS_FLAG;
2566     bool noflush = suspend_flags & DM_SUSPEND_NOFLUSH_FLAG;
2567     @@ -3145,6 +3146,8 @@ static int __dm_suspend(struct mapped_device *md, struct dm_table *map,
2568     * to finish.
2569     */
2570     r = dm_wait_for_completion(md, interruptible);
2571     + if (!r)
2572     + set_bit(dmf_suspended_flag, &md->flags);
2573    
2574     if (noflush)
2575     clear_bit(DMF_NOFLUSH_SUSPENDING, &md->flags);
2576     @@ -3206,12 +3209,10 @@ retry:
2577    
2578     map = rcu_dereference_protected(md->map, lockdep_is_held(&md->suspend_lock));
2579    
2580     - r = __dm_suspend(md, map, suspend_flags, TASK_INTERRUPTIBLE);
2581     + r = __dm_suspend(md, map, suspend_flags, TASK_INTERRUPTIBLE, DMF_SUSPENDED);
2582     if (r)
2583     goto out_unlock;
2584    
2585     - set_bit(DMF_SUSPENDED, &md->flags);
2586     -
2587     dm_table_postsuspend_targets(map);
2588    
2589     out_unlock:
2590     @@ -3305,9 +3306,8 @@ static void __dm_internal_suspend(struct mapped_device *md, unsigned suspend_fla
2591     * would require changing .presuspend to return an error -- avoid this
2592     * until there is a need for more elaborate variants of internal suspend.
2593     */
2594     - (void) __dm_suspend(md, map, suspend_flags, TASK_UNINTERRUPTIBLE);
2595     -
2596     - set_bit(DMF_SUSPENDED_INTERNALLY, &md->flags);
2597     + (void) __dm_suspend(md, map, suspend_flags, TASK_UNINTERRUPTIBLE,
2598     + DMF_SUSPENDED_INTERNALLY);
2599    
2600     dm_table_postsuspend_targets(map);
2601     }
2602     diff --git a/drivers/media/dvb-core/dvb_ringbuffer.c b/drivers/media/dvb-core/dvb_ringbuffer.c
2603     index 1100e98a7b1d..7df7fb3738a0 100644
2604     --- a/drivers/media/dvb-core/dvb_ringbuffer.c
2605     +++ b/drivers/media/dvb-core/dvb_ringbuffer.c
2606     @@ -55,7 +55,13 @@ void dvb_ringbuffer_init(struct dvb_ringbuffer *rbuf, void *data, size_t len)
2607    
2608     int dvb_ringbuffer_empty(struct dvb_ringbuffer *rbuf)
2609     {
2610     - return (rbuf->pread==rbuf->pwrite);
2611     + /* smp_load_acquire() to load write pointer on reader side
2612     + * this pairs with smp_store_release() in dvb_ringbuffer_write(),
2613     + * dvb_ringbuffer_write_user(), or dvb_ringbuffer_reset()
2614     + *
2615     + * for memory barriers also see Documentation/circular-buffers.txt
2616     + */
2617     + return (rbuf->pread == smp_load_acquire(&rbuf->pwrite));
2618     }
2619    
2620    
2621     @@ -64,7 +70,12 @@ ssize_t dvb_ringbuffer_free(struct dvb_ringbuffer *rbuf)
2622     {
2623     ssize_t free;
2624    
2625     - free = rbuf->pread - rbuf->pwrite;
2626     + /* ACCESS_ONCE() to load read pointer on writer side
2627     + * this pairs with smp_store_release() in dvb_ringbuffer_read(),
2628     + * dvb_ringbuffer_read_user(), dvb_ringbuffer_flush(),
2629     + * or dvb_ringbuffer_reset()
2630     + */
2631     + free = ACCESS_ONCE(rbuf->pread) - rbuf->pwrite;
2632     if (free <= 0)
2633     free += rbuf->size;
2634     return free-1;
2635     @@ -76,7 +87,11 @@ ssize_t dvb_ringbuffer_avail(struct dvb_ringbuffer *rbuf)
2636     {
2637     ssize_t avail;
2638    
2639     - avail = rbuf->pwrite - rbuf->pread;
2640     + /* smp_load_acquire() to load write pointer on reader side
2641     + * this pairs with smp_store_release() in dvb_ringbuffer_write(),
2642     + * dvb_ringbuffer_write_user(), or dvb_ringbuffer_reset()
2643     + */
2644     + avail = smp_load_acquire(&rbuf->pwrite) - rbuf->pread;
2645     if (avail < 0)
2646     avail += rbuf->size;
2647     return avail;
2648     @@ -86,14 +101,25 @@ ssize_t dvb_ringbuffer_avail(struct dvb_ringbuffer *rbuf)
2649    
2650     void dvb_ringbuffer_flush(struct dvb_ringbuffer *rbuf)
2651     {
2652     - rbuf->pread = rbuf->pwrite;
2653     + /* dvb_ringbuffer_flush() counts as read operation
2654     + * smp_load_acquire() to load write pointer
2655     + * smp_store_release() to update read pointer, this ensures that the
2656     + * correct pointer is visible for subsequent dvb_ringbuffer_free()
2657     + * calls on other cpu cores
2658     + */
2659     + smp_store_release(&rbuf->pread, smp_load_acquire(&rbuf->pwrite));
2660     rbuf->error = 0;
2661     }
2662     EXPORT_SYMBOL(dvb_ringbuffer_flush);
2663    
2664     void dvb_ringbuffer_reset(struct dvb_ringbuffer *rbuf)
2665     {
2666     - rbuf->pread = rbuf->pwrite = 0;
2667     + /* dvb_ringbuffer_reset() counts as read and write operation
2668     + * smp_store_release() to update read pointer
2669     + */
2670     + smp_store_release(&rbuf->pread, 0);
2671     + /* smp_store_release() to update write pointer */
2672     + smp_store_release(&rbuf->pwrite, 0);
2673     rbuf->error = 0;
2674     }
2675    
2676     @@ -119,12 +145,17 @@ ssize_t dvb_ringbuffer_read_user(struct dvb_ringbuffer *rbuf, u8 __user *buf, si
2677     return -EFAULT;
2678     buf += split;
2679     todo -= split;
2680     - rbuf->pread = 0;
2681     + /* smp_store_release() for read pointer update to ensure
2682     + * that buf is not overwritten until read is complete,
2683     + * this pairs with ACCESS_ONCE() in dvb_ringbuffer_free()
2684     + */
2685     + smp_store_release(&rbuf->pread, 0);
2686     }
2687     if (copy_to_user(buf, rbuf->data+rbuf->pread, todo))
2688     return -EFAULT;
2689    
2690     - rbuf->pread = (rbuf->pread + todo) % rbuf->size;
2691     + /* smp_store_release() to update read pointer, see above */
2692     + smp_store_release(&rbuf->pread, (rbuf->pread + todo) % rbuf->size);
2693    
2694     return len;
2695     }
2696     @@ -139,11 +170,16 @@ void dvb_ringbuffer_read(struct dvb_ringbuffer *rbuf, u8 *buf, size_t len)
2697     memcpy(buf, rbuf->data+rbuf->pread, split);
2698     buf += split;
2699     todo -= split;
2700     - rbuf->pread = 0;
2701     + /* smp_store_release() for read pointer update to ensure
2702     + * that buf is not overwritten until read is complete,
2703     + * this pairs with ACCESS_ONCE() in dvb_ringbuffer_free()
2704     + */
2705     + smp_store_release(&rbuf->pread, 0);
2706     }
2707     memcpy(buf, rbuf->data+rbuf->pread, todo);
2708    
2709     - rbuf->pread = (rbuf->pread + todo) % rbuf->size;
2710     + /* smp_store_release() to update read pointer, see above */
2711     + smp_store_release(&rbuf->pread, (rbuf->pread + todo) % rbuf->size);
2712     }
2713    
2714    
2715     @@ -158,10 +194,16 @@ ssize_t dvb_ringbuffer_write(struct dvb_ringbuffer *rbuf, const u8 *buf, size_t
2716     memcpy(rbuf->data+rbuf->pwrite, buf, split);
2717     buf += split;
2718     todo -= split;
2719     - rbuf->pwrite = 0;
2720     + /* smp_store_release() for write pointer update to ensure that
2721     + * written data is visible on other cpu cores before the pointer
2722     + * update, this pairs with smp_load_acquire() in
2723     + * dvb_ringbuffer_empty() or dvb_ringbuffer_avail()
2724     + */
2725     + smp_store_release(&rbuf->pwrite, 0);
2726     }
2727     memcpy(rbuf->data+rbuf->pwrite, buf, todo);
2728     - rbuf->pwrite = (rbuf->pwrite + todo) % rbuf->size;
2729     + /* smp_store_release() for write pointer update, see above */
2730     + smp_store_release(&rbuf->pwrite, (rbuf->pwrite + todo) % rbuf->size);
2731    
2732     return len;
2733     }
2734     @@ -181,12 +223,18 @@ ssize_t dvb_ringbuffer_write_user(struct dvb_ringbuffer *rbuf,
2735     return len - todo;
2736     buf += split;
2737     todo -= split;
2738     - rbuf->pwrite = 0;
2739     + /* smp_store_release() for write pointer update to ensure that
2740     + * written data is visible on other cpu cores before the pointer
2741     + * update, this pairs with smp_load_acquire() in
2742     + * dvb_ringbuffer_empty() or dvb_ringbuffer_avail()
2743     + */
2744     + smp_store_release(&rbuf->pwrite, 0);
2745     }
2746     status = copy_from_user(rbuf->data+rbuf->pwrite, buf, todo);
2747     if (status)
2748     return len - todo;
2749     - rbuf->pwrite = (rbuf->pwrite + todo) % rbuf->size;
2750     + /* smp_store_release() for write pointer update, see above */
2751     + smp_store_release(&rbuf->pwrite, (rbuf->pwrite + todo) % rbuf->size);
2752    
2753     return len;
2754     }
2755     diff --git a/drivers/media/platform/s5p-mfc/s5p_mfc.c b/drivers/media/platform/s5p-mfc/s5p_mfc.c
2756     index 3ffe2ecfd5ef..c8946f98ced4 100644
2757     --- a/drivers/media/platform/s5p-mfc/s5p_mfc.c
2758     +++ b/drivers/media/platform/s5p-mfc/s5p_mfc.c
2759     @@ -1029,6 +1029,11 @@ static int match_child(struct device *dev, void *data)
2760     return !strcmp(dev_name(dev), (char *)data);
2761     }
2762    
2763     +static void s5p_mfc_memdev_release(struct device *dev)
2764     +{
2765     + dma_release_declared_memory(dev);
2766     +}
2767     +
2768     static void *mfc_get_drv_data(struct platform_device *pdev);
2769    
2770     static int s5p_mfc_alloc_memdevs(struct s5p_mfc_dev *dev)
2771     @@ -1041,6 +1046,9 @@ static int s5p_mfc_alloc_memdevs(struct s5p_mfc_dev *dev)
2772     mfc_err("Not enough memory\n");
2773     return -ENOMEM;
2774     }
2775     +
2776     + dev_set_name(dev->mem_dev_l, "%s", "s5p-mfc-l");
2777     + dev->mem_dev_l->release = s5p_mfc_memdev_release;
2778     device_initialize(dev->mem_dev_l);
2779     of_property_read_u32_array(dev->plat_dev->dev.of_node,
2780     "samsung,mfc-l", mem_info, 2);
2781     @@ -1058,6 +1066,9 @@ static int s5p_mfc_alloc_memdevs(struct s5p_mfc_dev *dev)
2782     mfc_err("Not enough memory\n");
2783     return -ENOMEM;
2784     }
2785     +
2786     + dev_set_name(dev->mem_dev_r, "%s", "s5p-mfc-r");
2787     + dev->mem_dev_r->release = s5p_mfc_memdev_release;
2788     device_initialize(dev->mem_dev_r);
2789     of_property_read_u32_array(dev->plat_dev->dev.of_node,
2790     "samsung,mfc-r", mem_info, 2);
2791     diff --git a/drivers/media/rc/ir-rc5-decoder.c b/drivers/media/rc/ir-rc5-decoder.c
2792     index 84fa6e9b59a1..67314c034cdb 100644
2793     --- a/drivers/media/rc/ir-rc5-decoder.c
2794     +++ b/drivers/media/rc/ir-rc5-decoder.c
2795     @@ -29,7 +29,7 @@
2796     #define RC5_BIT_START (1 * RC5_UNIT)
2797     #define RC5_BIT_END (1 * RC5_UNIT)
2798     #define RC5X_SPACE (4 * RC5_UNIT)
2799     -#define RC5_TRAILER (10 * RC5_UNIT) /* In reality, approx 100 */
2800     +#define RC5_TRAILER (6 * RC5_UNIT) /* In reality, approx 100 */
2801    
2802     enum rc5_state {
2803     STATE_INACTIVE,
2804     diff --git a/drivers/media/usb/usbtv/usbtv-audio.c b/drivers/media/usb/usbtv/usbtv-audio.c
2805     index 78c12d22dfbb..5dab02432e82 100644
2806     --- a/drivers/media/usb/usbtv/usbtv-audio.c
2807     +++ b/drivers/media/usb/usbtv/usbtv-audio.c
2808     @@ -278,6 +278,9 @@ static void snd_usbtv_trigger(struct work_struct *work)
2809     {
2810     struct usbtv *chip = container_of(work, struct usbtv, snd_trigger);
2811    
2812     + if (!chip->snd)
2813     + return;
2814     +
2815     if (atomic_read(&chip->snd_stream))
2816     usbtv_audio_start(chip);
2817     else
2818     @@ -378,6 +381,8 @@ err:
2819    
2820     void usbtv_audio_free(struct usbtv *usbtv)
2821     {
2822     + cancel_work_sync(&usbtv->snd_trigger);
2823     +
2824     if (usbtv->snd && usbtv->udev) {
2825     snd_card_free(usbtv->snd);
2826     usbtv->snd = NULL;
2827     diff --git a/drivers/media/v4l2-core/videobuf2-core.c b/drivers/media/v4l2-core/videobuf2-core.c
2828     index 11f39791ec33..47f37683893a 100644
2829     --- a/drivers/media/v4l2-core/videobuf2-core.c
2830     +++ b/drivers/media/v4l2-core/videobuf2-core.c
2831     @@ -1505,7 +1505,7 @@ static int __vb2_get_done_vb(struct vb2_queue *q, struct vb2_buffer **vb,
2832     void *pb, int nonblocking)
2833     {
2834     unsigned long flags;
2835     - int ret;
2836     + int ret = 0;
2837    
2838     /*
2839     * Wait for at least one buffer to become available on the done_list.
2840     @@ -1521,10 +1521,12 @@ static int __vb2_get_done_vb(struct vb2_queue *q, struct vb2_buffer **vb,
2841     spin_lock_irqsave(&q->done_lock, flags);
2842     *vb = list_first_entry(&q->done_list, struct vb2_buffer, done_entry);
2843     /*
2844     - * Only remove the buffer from done_list if v4l2_buffer can handle all
2845     - * the planes.
2846     + * Only remove the buffer from done_list if all planes can be
2847     + * handled. Some cases such as V4L2 file I/O and DVB have pb
2848     + * == NULL; skip the check then as there's nothing to verify.
2849     */
2850     - ret = call_bufop(q, verify_planes_array, *vb, pb);
2851     + if (pb)
2852     + ret = call_bufop(q, verify_planes_array, *vb, pb);
2853     if (!ret)
2854     list_del(&(*vb)->done_entry);
2855     spin_unlock_irqrestore(&q->done_lock, flags);
2856     diff --git a/drivers/media/v4l2-core/videobuf2-v4l2.c b/drivers/media/v4l2-core/videobuf2-v4l2.c
2857     index 502984c724ff..6c441be8f893 100644
2858     --- a/drivers/media/v4l2-core/videobuf2-v4l2.c
2859     +++ b/drivers/media/v4l2-core/videobuf2-v4l2.c
2860     @@ -67,6 +67,11 @@ static int __verify_planes_array(struct vb2_buffer *vb, const struct v4l2_buffer
2861     return 0;
2862     }
2863    
2864     +static int __verify_planes_array_core(struct vb2_buffer *vb, const void *pb)
2865     +{
2866     + return __verify_planes_array(vb, pb);
2867     +}
2868     +
2869     /**
2870     * __verify_length() - Verify that the bytesused value for each plane fits in
2871     * the plane length and that the data offset doesn't exceed the bytesused value.
2872     @@ -432,6 +437,7 @@ static int __fill_vb2_buffer(struct vb2_buffer *vb,
2873     }
2874    
2875     static const struct vb2_buf_ops v4l2_buf_ops = {
2876     + .verify_planes_array = __verify_planes_array_core,
2877     .fill_user_buffer = __fill_v4l2_buffer,
2878     .fill_vb2_buffer = __fill_vb2_buffer,
2879     .set_timestamp = __set_timestamp,
2880     diff --git a/drivers/mfd/qcom_rpm.c b/drivers/mfd/qcom_rpm.c
2881     index 207a3bd68559..a867cc91657e 100644
2882     --- a/drivers/mfd/qcom_rpm.c
2883     +++ b/drivers/mfd/qcom_rpm.c
2884     @@ -34,7 +34,13 @@ struct qcom_rpm_resource {
2885     struct qcom_rpm_data {
2886     u32 version;
2887     const struct qcom_rpm_resource *resource_table;
2888     - unsigned n_resources;
2889     + unsigned int n_resources;
2890     + unsigned int req_ctx_off;
2891     + unsigned int req_sel_off;
2892     + unsigned int ack_ctx_off;
2893     + unsigned int ack_sel_off;
2894     + unsigned int req_sel_size;
2895     + unsigned int ack_sel_size;
2896     };
2897    
2898     struct qcom_rpm {
2899     @@ -61,11 +67,7 @@ struct qcom_rpm {
2900    
2901     #define RPM_REQUEST_TIMEOUT (5 * HZ)
2902    
2903     -#define RPM_REQUEST_CONTEXT 3
2904     -#define RPM_REQ_SELECT 11
2905     -#define RPM_ACK_CONTEXT 15
2906     -#define RPM_ACK_SELECTOR 23
2907     -#define RPM_SELECT_SIZE 7
2908     +#define RPM_MAX_SEL_SIZE 7
2909    
2910     #define RPM_NOTIFICATION BIT(30)
2911     #define RPM_REJECTED BIT(31)
2912     @@ -157,6 +159,12 @@ static const struct qcom_rpm_data apq8064_template = {
2913     .version = 3,
2914     .resource_table = apq8064_rpm_resource_table,
2915     .n_resources = ARRAY_SIZE(apq8064_rpm_resource_table),
2916     + .req_ctx_off = 3,
2917     + .req_sel_off = 11,
2918     + .ack_ctx_off = 15,
2919     + .ack_sel_off = 23,
2920     + .req_sel_size = 4,
2921     + .ack_sel_size = 7,
2922     };
2923    
2924     static const struct qcom_rpm_resource msm8660_rpm_resource_table[] = {
2925     @@ -240,6 +248,12 @@ static const struct qcom_rpm_data msm8660_template = {
2926     .version = 2,
2927     .resource_table = msm8660_rpm_resource_table,
2928     .n_resources = ARRAY_SIZE(msm8660_rpm_resource_table),
2929     + .req_ctx_off = 3,
2930     + .req_sel_off = 11,
2931     + .ack_ctx_off = 19,
2932     + .ack_sel_off = 27,
2933     + .req_sel_size = 7,
2934     + .ack_sel_size = 7,
2935     };
2936    
2937     static const struct qcom_rpm_resource msm8960_rpm_resource_table[] = {
2938     @@ -322,6 +336,12 @@ static const struct qcom_rpm_data msm8960_template = {
2939     .version = 3,
2940     .resource_table = msm8960_rpm_resource_table,
2941     .n_resources = ARRAY_SIZE(msm8960_rpm_resource_table),
2942     + .req_ctx_off = 3,
2943     + .req_sel_off = 11,
2944     + .ack_ctx_off = 15,
2945     + .ack_sel_off = 23,
2946     + .req_sel_size = 4,
2947     + .ack_sel_size = 7,
2948     };
2949    
2950     static const struct qcom_rpm_resource ipq806x_rpm_resource_table[] = {
2951     @@ -362,6 +382,12 @@ static const struct qcom_rpm_data ipq806x_template = {
2952     .version = 3,
2953     .resource_table = ipq806x_rpm_resource_table,
2954     .n_resources = ARRAY_SIZE(ipq806x_rpm_resource_table),
2955     + .req_ctx_off = 3,
2956     + .req_sel_off = 11,
2957     + .ack_ctx_off = 15,
2958     + .ack_sel_off = 23,
2959     + .req_sel_size = 4,
2960     + .ack_sel_size = 7,
2961     };
2962    
2963     static const struct of_device_id qcom_rpm_of_match[] = {
2964     @@ -380,7 +406,7 @@ int qcom_rpm_write(struct qcom_rpm *rpm,
2965     {
2966     const struct qcom_rpm_resource *res;
2967     const struct qcom_rpm_data *data = rpm->data;
2968     - u32 sel_mask[RPM_SELECT_SIZE] = { 0 };
2969     + u32 sel_mask[RPM_MAX_SEL_SIZE] = { 0 };
2970     int left;
2971     int ret = 0;
2972     int i;
2973     @@ -398,12 +424,12 @@ int qcom_rpm_write(struct qcom_rpm *rpm,
2974     writel_relaxed(buf[i], RPM_REQ_REG(rpm, res->target_id + i));
2975    
2976     bitmap_set((unsigned long *)sel_mask, res->select_id, 1);
2977     - for (i = 0; i < ARRAY_SIZE(sel_mask); i++) {
2978     + for (i = 0; i < rpm->data->req_sel_size; i++) {
2979     writel_relaxed(sel_mask[i],
2980     - RPM_CTRL_REG(rpm, RPM_REQ_SELECT + i));
2981     + RPM_CTRL_REG(rpm, rpm->data->req_sel_off + i));
2982     }
2983    
2984     - writel_relaxed(BIT(state), RPM_CTRL_REG(rpm, RPM_REQUEST_CONTEXT));
2985     + writel_relaxed(BIT(state), RPM_CTRL_REG(rpm, rpm->data->req_ctx_off));
2986    
2987     reinit_completion(&rpm->ack);
2988     regmap_write(rpm->ipc_regmap, rpm->ipc_offset, BIT(rpm->ipc_bit));
2989     @@ -426,10 +452,11 @@ static irqreturn_t qcom_rpm_ack_interrupt(int irq, void *dev)
2990     u32 ack;
2991     int i;
2992    
2993     - ack = readl_relaxed(RPM_CTRL_REG(rpm, RPM_ACK_CONTEXT));
2994     - for (i = 0; i < RPM_SELECT_SIZE; i++)
2995     - writel_relaxed(0, RPM_CTRL_REG(rpm, RPM_ACK_SELECTOR + i));
2996     - writel(0, RPM_CTRL_REG(rpm, RPM_ACK_CONTEXT));
2997     + ack = readl_relaxed(RPM_CTRL_REG(rpm, rpm->data->ack_ctx_off));
2998     + for (i = 0; i < rpm->data->ack_sel_size; i++)
2999     + writel_relaxed(0,
3000     + RPM_CTRL_REG(rpm, rpm->data->ack_sel_off + i));
3001     + writel(0, RPM_CTRL_REG(rpm, rpm->data->ack_ctx_off));
3002    
3003     if (ack & RPM_NOTIFICATION) {
3004     dev_warn(rpm->dev, "ignoring notification!\n");
3005     diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
3006     index ce7b2cab5762..54ab48827258 100644
3007     --- a/drivers/mtd/nand/nand_base.c
3008     +++ b/drivers/mtd/nand/nand_base.c
3009     @@ -2586,7 +2586,7 @@ static int nand_do_write_ops(struct mtd_info *mtd, loff_t to,
3010     int cached = writelen > bytes && page != blockmask;
3011     uint8_t *wbuf = buf;
3012     int use_bufpoi;
3013     - int part_pagewr = (column || writelen < (mtd->writesize - 1));
3014     + int part_pagewr = (column || writelen < mtd->writesize);
3015    
3016     if (part_pagewr)
3017     use_bufpoi = 1;
3018     diff --git a/drivers/mtd/ubi/build.c b/drivers/mtd/ubi/build.c
3019     index 22fd19c0c5d3..27de0463226e 100644
3020     --- a/drivers/mtd/ubi/build.c
3021     +++ b/drivers/mtd/ubi/build.c
3022     @@ -869,7 +869,7 @@ int ubi_attach_mtd_dev(struct mtd_info *mtd, int ubi_num,
3023     for (i = 0; i < UBI_MAX_DEVICES; i++) {
3024     ubi = ubi_devices[i];
3025     if (ubi && mtd->index == ubi->mtd->index) {
3026     - ubi_err(ubi, "mtd%d is already attached to ubi%d",
3027     + pr_err("ubi: mtd%d is already attached to ubi%d",
3028     mtd->index, i);
3029     return -EEXIST;
3030     }
3031     @@ -884,7 +884,7 @@ int ubi_attach_mtd_dev(struct mtd_info *mtd, int ubi_num,
3032     * no sense to attach emulated MTD devices, so we prohibit this.
3033     */
3034     if (mtd->type == MTD_UBIVOLUME) {
3035     - ubi_err(ubi, "refuse attaching mtd%d - it is already emulated on top of UBI",
3036     + pr_err("ubi: refuse attaching mtd%d - it is already emulated on top of UBI",
3037     mtd->index);
3038     return -EINVAL;
3039     }
3040     @@ -895,7 +895,7 @@ int ubi_attach_mtd_dev(struct mtd_info *mtd, int ubi_num,
3041     if (!ubi_devices[ubi_num])
3042     break;
3043     if (ubi_num == UBI_MAX_DEVICES) {
3044     - ubi_err(ubi, "only %d UBI devices may be created",
3045     + pr_err("ubi: only %d UBI devices may be created",
3046     UBI_MAX_DEVICES);
3047     return -ENFILE;
3048     }
3049     @@ -905,7 +905,7 @@ int ubi_attach_mtd_dev(struct mtd_info *mtd, int ubi_num,
3050    
3051     /* Make sure ubi_num is not busy */
3052     if (ubi_devices[ubi_num]) {
3053     - ubi_err(ubi, "already exists");
3054     + pr_err("ubi: ubi%i already exists", ubi_num);
3055     return -EEXIST;
3056     }
3057     }
3058     @@ -987,6 +987,9 @@ int ubi_attach_mtd_dev(struct mtd_info *mtd, int ubi_num,
3059     goto out_detach;
3060     }
3061    
3062     + /* Make device "available" before it becomes accessible via sysfs */
3063     + ubi_devices[ubi_num] = ubi;
3064     +
3065     err = uif_init(ubi, &ref);
3066     if (err)
3067     goto out_detach;
3068     @@ -1031,7 +1034,6 @@ int ubi_attach_mtd_dev(struct mtd_info *mtd, int ubi_num,
3069     wake_up_process(ubi->bgt_thread);
3070     spin_unlock(&ubi->wl_lock);
3071    
3072     - ubi_devices[ubi_num] = ubi;
3073     ubi_notify_all(ubi, UBI_VOLUME_ADDED, NULL);
3074     return ubi_num;
3075    
3076     @@ -1042,6 +1044,7 @@ out_uif:
3077     ubi_assert(ref);
3078     uif_close(ubi);
3079     out_detach:
3080     + ubi_devices[ubi_num] = NULL;
3081     ubi_wl_close(ubi);
3082     ubi_free_internal_volumes(ubi);
3083     vfree(ubi->vtbl);
3084     diff --git a/drivers/mtd/ubi/vmt.c b/drivers/mtd/ubi/vmt.c
3085     index 1ae17bb9b889..3ea4c022cbb9 100644
3086     --- a/drivers/mtd/ubi/vmt.c
3087     +++ b/drivers/mtd/ubi/vmt.c
3088     @@ -488,13 +488,6 @@ int ubi_resize_volume(struct ubi_volume_desc *desc, int reserved_pebs)
3089     spin_unlock(&ubi->volumes_lock);
3090     }
3091    
3092     - /* Change volume table record */
3093     - vtbl_rec = ubi->vtbl[vol_id];
3094     - vtbl_rec.reserved_pebs = cpu_to_be32(reserved_pebs);
3095     - err = ubi_change_vtbl_record(ubi, vol_id, &vtbl_rec);
3096     - if (err)
3097     - goto out_acc;
3098     -
3099     if (pebs < 0) {
3100     for (i = 0; i < -pebs; i++) {
3101     err = ubi_eba_unmap_leb(ubi, vol, reserved_pebs + i);
3102     @@ -512,6 +505,24 @@ int ubi_resize_volume(struct ubi_volume_desc *desc, int reserved_pebs)
3103     spin_unlock(&ubi->volumes_lock);
3104     }
3105    
3106     + /*
3107     + * When we shrink a volume we have to flush all pending (erase) work.
3108     + * Otherwise it can happen that upon next attach UBI finds a LEB with
3109     + * lnum > highest_lnum and refuses to attach.
3110     + */
3111     + if (pebs < 0) {
3112     + err = ubi_wl_flush(ubi, vol_id, UBI_ALL);
3113     + if (err)
3114     + goto out_acc;
3115     + }
3116     +
3117     + /* Change volume table record */
3118     + vtbl_rec = ubi->vtbl[vol_id];
3119     + vtbl_rec.reserved_pebs = cpu_to_be32(reserved_pebs);
3120     + err = ubi_change_vtbl_record(ubi, vol_id, &vtbl_rec);
3121     + if (err)
3122     + goto out_acc;
3123     +
3124     vol->reserved_pebs = reserved_pebs;
3125     if (vol->vol_type == UBI_DYNAMIC_VOLUME) {
3126     vol->used_ebs = reserved_pebs;
3127     diff --git a/drivers/of/base.c b/drivers/of/base.c
3128     index 017dd94f16ea..942461f36616 100644
3129     --- a/drivers/of/base.c
3130     +++ b/drivers/of/base.c
3131     @@ -112,6 +112,7 @@ static ssize_t of_node_property_read(struct file *filp, struct kobject *kobj,
3132     return memory_read_from_buffer(buf, count, &offset, pp->value, pp->length);
3133     }
3134    
3135     +/* always return newly allocated name, caller must free after use */
3136     static const char *safe_name(struct kobject *kobj, const char *orig_name)
3137     {
3138     const char *name = orig_name;
3139     @@ -126,9 +127,12 @@ static const char *safe_name(struct kobject *kobj, const char *orig_name)
3140     name = kasprintf(GFP_KERNEL, "%s#%i", orig_name, ++i);
3141     }
3142    
3143     - if (name != orig_name)
3144     + if (name == orig_name) {
3145     + name = kstrdup(orig_name, GFP_KERNEL);
3146     + } else {
3147     pr_warn("device-tree: Duplicate name in %s, renamed to \"%s\"\n",
3148     kobject_name(kobj), name);
3149     + }
3150     return name;
3151     }
3152    
3153     @@ -159,6 +163,7 @@ int __of_add_property_sysfs(struct device_node *np, struct property *pp)
3154     int __of_attach_node_sysfs(struct device_node *np)
3155     {
3156     const char *name;
3157     + struct kobject *parent;
3158     struct property *pp;
3159     int rc;
3160    
3161     @@ -171,15 +176,16 @@ int __of_attach_node_sysfs(struct device_node *np)
3162     np->kobj.kset = of_kset;
3163     if (!np->parent) {
3164     /* Nodes without parents are new top level trees */
3165     - rc = kobject_add(&np->kobj, NULL, "%s",
3166     - safe_name(&of_kset->kobj, "base"));
3167     + name = safe_name(&of_kset->kobj, "base");
3168     + parent = NULL;
3169     } else {
3170     name = safe_name(&np->parent->kobj, kbasename(np->full_name));
3171     - if (!name || !name[0])
3172     - return -EINVAL;
3173     -
3174     - rc = kobject_add(&np->kobj, &np->parent->kobj, "%s", name);
3175     + parent = &np->parent->kobj;
3176     }
3177     + if (!name)
3178     + return -ENOMEM;
3179     + rc = kobject_add(&np->kobj, parent, "%s", name);
3180     + kfree(name);
3181     if (rc)
3182     return rc;
3183    
3184     @@ -1753,6 +1759,12 @@ int __of_remove_property(struct device_node *np, struct property *prop)
3185     return 0;
3186     }
3187    
3188     +void __of_sysfs_remove_bin_file(struct device_node *np, struct property *prop)
3189     +{
3190     + sysfs_remove_bin_file(&np->kobj, &prop->attr);
3191     + kfree(prop->attr.attr.name);
3192     +}
3193     +
3194     void __of_remove_property_sysfs(struct device_node *np, struct property *prop)
3195     {
3196     if (!IS_ENABLED(CONFIG_SYSFS))
3197     @@ -1760,7 +1772,7 @@ void __of_remove_property_sysfs(struct device_node *np, struct property *prop)
3198    
3199     /* at early boot, bail here and defer setup to of_init() */
3200     if (of_kset && of_node_is_attached(np))
3201     - sysfs_remove_bin_file(&np->kobj, &prop->attr);
3202     + __of_sysfs_remove_bin_file(np, prop);
3203     }
3204    
3205     /**
3206     @@ -1830,7 +1842,7 @@ void __of_update_property_sysfs(struct device_node *np, struct property *newprop
3207     return;
3208    
3209     if (oldprop)
3210     - sysfs_remove_bin_file(&np->kobj, &oldprop->attr);
3211     + __of_sysfs_remove_bin_file(np, oldprop);
3212     __of_add_property_sysfs(np, newprop);
3213     }
3214    
3215     diff --git a/drivers/of/dynamic.c b/drivers/of/dynamic.c
3216     index 53826b84e0ec..2d72ddcf534f 100644
3217     --- a/drivers/of/dynamic.c
3218     +++ b/drivers/of/dynamic.c
3219     @@ -55,7 +55,7 @@ void __of_detach_node_sysfs(struct device_node *np)
3220     /* only remove properties if on sysfs */
3221     if (of_node_is_attached(np)) {
3222     for_each_property_of_node(np, pp)
3223     - sysfs_remove_bin_file(&np->kobj, &pp->attr);
3224     + __of_sysfs_remove_bin_file(np, pp);
3225     kobject_del(&np->kobj);
3226     }
3227    
3228     diff --git a/drivers/of/of_private.h b/drivers/of/of_private.h
3229     index 8e882e706cd8..46ddbee22ce3 100644
3230     --- a/drivers/of/of_private.h
3231     +++ b/drivers/of/of_private.h
3232     @@ -81,6 +81,9 @@ extern int __of_attach_node_sysfs(struct device_node *np);
3233     extern void __of_detach_node(struct device_node *np);
3234     extern void __of_detach_node_sysfs(struct device_node *np);
3235    
3236     +extern void __of_sysfs_remove_bin_file(struct device_node *np,
3237     + struct property *prop);
3238     +
3239     /* iterators for transactions, used for overlays */
3240     /* forward iterator */
3241     #define for_each_transaction_entry(_oft, _te) \
3242     diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
3243     index 7e327309cf69..3c4752a288e2 100644
3244     --- a/drivers/pci/quirks.c
3245     +++ b/drivers/pci/quirks.c
3246     @@ -3115,13 +3115,15 @@ static void quirk_no_bus_reset(struct pci_dev *dev)
3247     }
3248    
3249     /*
3250     - * Atheros AR93xx chips do not behave after a bus reset. The device will
3251     - * throw a Link Down error on AER-capable systems and regardless of AER,
3252     - * config space of the device is never accessible again and typically
3253     - * causes the system to hang or reset when access is attempted.
3254     + * Some Atheros AR9xxx and QCA988x chips do not behave after a bus reset.
3255     + * The device will throw a Link Down error on AER-capable systems and
3256     + * regardless of AER, config space of the device is never accessible again
3257     + * and typically causes the system to hang or reset when access is attempted.
3258     * http://www.spinics.net/lists/linux-pci/msg34797.html
3259     */
3260     DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATHEROS, 0x0030, quirk_no_bus_reset);
3261     +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATHEROS, 0x0032, quirk_no_bus_reset);
3262     +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATHEROS, 0x003c, quirk_no_bus_reset);
3263    
3264     static void quirk_no_pm_reset(struct pci_dev *dev)
3265     {
3266     diff --git a/drivers/pinctrl/intel/pinctrl-cherryview.c b/drivers/pinctrl/intel/pinctrl-cherryview.c
3267     index 84936bae6e5e..4e377599d266 100644
3268     --- a/drivers/pinctrl/intel/pinctrl-cherryview.c
3269     +++ b/drivers/pinctrl/intel/pinctrl-cherryview.c
3270     @@ -160,7 +160,6 @@ struct chv_pin_context {
3271     * @pctldev: Pointer to the pin controller device
3272     * @chip: GPIO chip in this pin controller
3273     * @regs: MMIO registers
3274     - * @lock: Lock to serialize register accesses
3275     * @intr_lines: Stores mapping between 16 HW interrupt wires and GPIO
3276     * offset (in GPIO number space)
3277     * @community: Community this pinctrl instance represents
3278     @@ -174,7 +173,6 @@ struct chv_pinctrl {
3279     struct pinctrl_dev *pctldev;
3280     struct gpio_chip chip;
3281     void __iomem *regs;
3282     - raw_spinlock_t lock;
3283     unsigned intr_lines[16];
3284     const struct chv_community *community;
3285     u32 saved_intmask;
3286     @@ -659,6 +657,17 @@ static const struct chv_community *chv_communities[] = {
3287     &southeast_community,
3288     };
3289    
3290     +/*
3291     + * Lock to serialize register accesses
3292     + *
3293     + * Due to a silicon issue, a shared lock must be used to prevent
3294     + * concurrent accesses across the 4 GPIO controllers.
3295     + *
3296     + * See Intel Atom Z8000 Processor Series Specification Update (Rev. 005),
3297     + * errata #CHT34, for further information.
3298     + */
3299     +static DEFINE_RAW_SPINLOCK(chv_lock);
3300     +
3301     static void __iomem *chv_padreg(struct chv_pinctrl *pctrl, unsigned offset,
3302     unsigned reg)
3303     {
3304     @@ -720,13 +729,13 @@ static void chv_pin_dbg_show(struct pinctrl_dev *pctldev, struct seq_file *s,
3305     u32 ctrl0, ctrl1;
3306     bool locked;
3307    
3308     - raw_spin_lock_irqsave(&pctrl->lock, flags);
3309     + raw_spin_lock_irqsave(&chv_lock, flags);
3310    
3311     ctrl0 = readl(chv_padreg(pctrl, offset, CHV_PADCTRL0));
3312     ctrl1 = readl(chv_padreg(pctrl, offset, CHV_PADCTRL1));
3313     locked = chv_pad_locked(pctrl, offset);
3314    
3315     - raw_spin_unlock_irqrestore(&pctrl->lock, flags);
3316     + raw_spin_unlock_irqrestore(&chv_lock, flags);
3317    
3318     if (ctrl0 & CHV_PADCTRL0_GPIOEN) {
3319     seq_puts(s, "GPIO ");
3320     @@ -789,14 +798,14 @@ static int chv_pinmux_set_mux(struct pinctrl_dev *pctldev, unsigned function,
3321    
3322     grp = &pctrl->community->groups[group];
3323    
3324     - raw_spin_lock_irqsave(&pctrl->lock, flags);
3325     + raw_spin_lock_irqsave(&chv_lock, flags);
3326    
3327     /* Check first that the pad is not locked */
3328     for (i = 0; i < grp->npins; i++) {
3329     if (chv_pad_locked(pctrl, grp->pins[i])) {
3330     dev_warn(pctrl->dev, "unable to set mode for locked pin %u\n",
3331     grp->pins[i]);
3332     - raw_spin_unlock_irqrestore(&pctrl->lock, flags);
3333     + raw_spin_unlock_irqrestore(&chv_lock, flags);
3334     return -EBUSY;
3335     }
3336     }
3337     @@ -839,7 +848,7 @@ static int chv_pinmux_set_mux(struct pinctrl_dev *pctldev, unsigned function,
3338     pin, altfunc->mode, altfunc->invert_oe ? "" : "not ");
3339     }
3340    
3341     - raw_spin_unlock_irqrestore(&pctrl->lock, flags);
3342     + raw_spin_unlock_irqrestore(&chv_lock, flags);
3343    
3344     return 0;
3345     }
3346     @@ -853,13 +862,13 @@ static int chv_gpio_request_enable(struct pinctrl_dev *pctldev,
3347     void __iomem *reg;
3348     u32 value;
3349    
3350     - raw_spin_lock_irqsave(&pctrl->lock, flags);
3351     + raw_spin_lock_irqsave(&chv_lock, flags);
3352    
3353     if (chv_pad_locked(pctrl, offset)) {
3354     value = readl(chv_padreg(pctrl, offset, CHV_PADCTRL0));
3355     if (!(value & CHV_PADCTRL0_GPIOEN)) {
3356     /* Locked so cannot enable */
3357     - raw_spin_unlock_irqrestore(&pctrl->lock, flags);
3358     + raw_spin_unlock_irqrestore(&chv_lock, flags);
3359     return -EBUSY;
3360     }
3361     } else {
3362     @@ -899,7 +908,7 @@ static int chv_gpio_request_enable(struct pinctrl_dev *pctldev,
3363     chv_writel(value, reg);
3364     }
3365    
3366     - raw_spin_unlock_irqrestore(&pctrl->lock, flags);
3367     + raw_spin_unlock_irqrestore(&chv_lock, flags);
3368    
3369     return 0;
3370     }
3371     @@ -913,13 +922,13 @@ static void chv_gpio_disable_free(struct pinctrl_dev *pctldev,
3372     void __iomem *reg;
3373     u32 value;
3374    
3375     - raw_spin_lock_irqsave(&pctrl->lock, flags);
3376     + raw_spin_lock_irqsave(&chv_lock, flags);
3377    
3378     reg = chv_padreg(pctrl, offset, CHV_PADCTRL0);
3379     value = readl(reg) & ~CHV_PADCTRL0_GPIOEN;
3380     chv_writel(value, reg);
3381    
3382     - raw_spin_unlock_irqrestore(&pctrl->lock, flags);
3383     + raw_spin_unlock_irqrestore(&chv_lock, flags);
3384     }
3385    
3386     static int chv_gpio_set_direction(struct pinctrl_dev *pctldev,
3387     @@ -931,7 +940,7 @@ static int chv_gpio_set_direction(struct pinctrl_dev *pctldev,
3388     unsigned long flags;
3389     u32 ctrl0;
3390    
3391     - raw_spin_lock_irqsave(&pctrl->lock, flags);
3392     + raw_spin_lock_irqsave(&chv_lock, flags);
3393    
3394     ctrl0 = readl(reg) & ~CHV_PADCTRL0_GPIOCFG_MASK;
3395     if (input)
3396     @@ -940,7 +949,7 @@ static int chv_gpio_set_direction(struct pinctrl_dev *pctldev,
3397     ctrl0 |= CHV_PADCTRL0_GPIOCFG_GPO << CHV_PADCTRL0_GPIOCFG_SHIFT;
3398     chv_writel(ctrl0, reg);
3399    
3400     - raw_spin_unlock_irqrestore(&pctrl->lock, flags);
3401     + raw_spin_unlock_irqrestore(&chv_lock, flags);
3402    
3403     return 0;
3404     }
3405     @@ -965,10 +974,10 @@ static int chv_config_get(struct pinctrl_dev *pctldev, unsigned pin,
3406     u16 arg = 0;
3407     u32 term;
3408    
3409     - raw_spin_lock_irqsave(&pctrl->lock, flags);
3410     + raw_spin_lock_irqsave(&chv_lock, flags);
3411     ctrl0 = readl(chv_padreg(pctrl, pin, CHV_PADCTRL0));
3412     ctrl1 = readl(chv_padreg(pctrl, pin, CHV_PADCTRL1));
3413     - raw_spin_unlock_irqrestore(&pctrl->lock, flags);
3414     + raw_spin_unlock_irqrestore(&chv_lock, flags);
3415    
3416     term = (ctrl0 & CHV_PADCTRL0_TERM_MASK) >> CHV_PADCTRL0_TERM_SHIFT;
3417    
3418     @@ -1042,7 +1051,7 @@ static int chv_config_set_pull(struct chv_pinctrl *pctrl, unsigned pin,
3419     unsigned long flags;
3420     u32 ctrl0, pull;
3421    
3422     - raw_spin_lock_irqsave(&pctrl->lock, flags);
3423     + raw_spin_lock_irqsave(&chv_lock, flags);
3424     ctrl0 = readl(reg);
3425    
3426     switch (param) {
3427     @@ -1065,7 +1074,7 @@ static int chv_config_set_pull(struct chv_pinctrl *pctrl, unsigned pin,
3428     pull = CHV_PADCTRL0_TERM_20K << CHV_PADCTRL0_TERM_SHIFT;
3429     break;
3430     default:
3431     - raw_spin_unlock_irqrestore(&pctrl->lock, flags);
3432     + raw_spin_unlock_irqrestore(&chv_lock, flags);
3433     return -EINVAL;
3434     }
3435    
3436     @@ -1083,7 +1092,7 @@ static int chv_config_set_pull(struct chv_pinctrl *pctrl, unsigned pin,
3437     pull = CHV_PADCTRL0_TERM_20K << CHV_PADCTRL0_TERM_SHIFT;
3438     break;
3439     default:
3440     - raw_spin_unlock_irqrestore(&pctrl->lock, flags);
3441     + raw_spin_unlock_irqrestore(&chv_lock, flags);
3442     return -EINVAL;
3443     }
3444    
3445     @@ -1091,12 +1100,12 @@ static int chv_config_set_pull(struct chv_pinctrl *pctrl, unsigned pin,
3446     break;
3447    
3448     default:
3449     - raw_spin_unlock_irqrestore(&pctrl->lock, flags);
3450     + raw_spin_unlock_irqrestore(&chv_lock, flags);
3451     return -EINVAL;
3452     }
3453    
3454     chv_writel(ctrl0, reg);
3455     - raw_spin_unlock_irqrestore(&pctrl->lock, flags);
3456     + raw_spin_unlock_irqrestore(&chv_lock, flags);
3457    
3458     return 0;
3459     }
3460     @@ -1162,9 +1171,9 @@ static int chv_gpio_get(struct gpio_chip *chip, unsigned offset)
3461     unsigned long flags;
3462     u32 ctrl0, cfg;
3463    
3464     - raw_spin_lock_irqsave(&pctrl->lock, flags);
3465     + raw_spin_lock_irqsave(&chv_lock, flags);
3466     ctrl0 = readl(chv_padreg(pctrl, pin, CHV_PADCTRL0));
3467     - raw_spin_unlock_irqrestore(&pctrl->lock, flags);
3468     + raw_spin_unlock_irqrestore(&chv_lock, flags);
3469    
3470     cfg = ctrl0 & CHV_PADCTRL0_GPIOCFG_MASK;
3471     cfg >>= CHV_PADCTRL0_GPIOCFG_SHIFT;
3472     @@ -1182,7 +1191,7 @@ static void chv_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
3473     void __iomem *reg;
3474     u32 ctrl0;
3475    
3476     - raw_spin_lock_irqsave(&pctrl->lock, flags);
3477     + raw_spin_lock_irqsave(&chv_lock, flags);
3478    
3479     reg = chv_padreg(pctrl, pin, CHV_PADCTRL0);
3480     ctrl0 = readl(reg);
3481     @@ -1194,7 +1203,7 @@ static void chv_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
3482    
3483     chv_writel(ctrl0, reg);
3484    
3485     - raw_spin_unlock_irqrestore(&pctrl->lock, flags);
3486     + raw_spin_unlock_irqrestore(&chv_lock, flags);
3487     }
3488    
3489     static int chv_gpio_get_direction(struct gpio_chip *chip, unsigned offset)
3490     @@ -1204,9 +1213,9 @@ static int chv_gpio_get_direction(struct gpio_chip *chip, unsigned offset)
3491     u32 ctrl0, direction;
3492     unsigned long flags;
3493    
3494     - raw_spin_lock_irqsave(&pctrl->lock, flags);
3495     + raw_spin_lock_irqsave(&chv_lock, flags);
3496     ctrl0 = readl(chv_padreg(pctrl, pin, CHV_PADCTRL0));
3497     - raw_spin_unlock_irqrestore(&pctrl->lock, flags);
3498     + raw_spin_unlock_irqrestore(&chv_lock, flags);
3499    
3500     direction = ctrl0 & CHV_PADCTRL0_GPIOCFG_MASK;
3501     direction >>= CHV_PADCTRL0_GPIOCFG_SHIFT;
3502     @@ -1244,14 +1253,14 @@ static void chv_gpio_irq_ack(struct irq_data *d)
3503     int pin = chv_gpio_offset_to_pin(pctrl, irqd_to_hwirq(d));
3504     u32 intr_line;
3505    
3506     - raw_spin_lock(&pctrl->lock);
3507     + raw_spin_lock(&chv_lock);
3508    
3509     intr_line = readl(chv_padreg(pctrl, pin, CHV_PADCTRL0));
3510     intr_line &= CHV_PADCTRL0_INTSEL_MASK;
3511     intr_line >>= CHV_PADCTRL0_INTSEL_SHIFT;
3512     chv_writel(BIT(intr_line), pctrl->regs + CHV_INTSTAT);
3513    
3514     - raw_spin_unlock(&pctrl->lock);
3515     + raw_spin_unlock(&chv_lock);
3516     }
3517    
3518     static void chv_gpio_irq_mask_unmask(struct irq_data *d, bool mask)
3519     @@ -1262,7 +1271,7 @@ static void chv_gpio_irq_mask_unmask(struct irq_data *d, bool mask)
3520     u32 value, intr_line;
3521     unsigned long flags;
3522    
3523     - raw_spin_lock_irqsave(&pctrl->lock, flags);
3524     + raw_spin_lock_irqsave(&chv_lock, flags);
3525    
3526     intr_line = readl(chv_padreg(pctrl, pin, CHV_PADCTRL0));
3527     intr_line &= CHV_PADCTRL0_INTSEL_MASK;
3528     @@ -1275,7 +1284,7 @@ static void chv_gpio_irq_mask_unmask(struct irq_data *d, bool mask)
3529     value |= BIT(intr_line);
3530     chv_writel(value, pctrl->regs + CHV_INTMASK);
3531    
3532     - raw_spin_unlock_irqrestore(&pctrl->lock, flags);
3533     + raw_spin_unlock_irqrestore(&chv_lock, flags);
3534     }
3535    
3536     static void chv_gpio_irq_mask(struct irq_data *d)
3537     @@ -1309,7 +1318,7 @@ static unsigned chv_gpio_irq_startup(struct irq_data *d)
3538     unsigned long flags;
3539     u32 intsel, value;
3540    
3541     - raw_spin_lock_irqsave(&pctrl->lock, flags);
3542     + raw_spin_lock_irqsave(&chv_lock, flags);
3543     intsel = readl(chv_padreg(pctrl, pin, CHV_PADCTRL0));
3544     intsel &= CHV_PADCTRL0_INTSEL_MASK;
3545     intsel >>= CHV_PADCTRL0_INTSEL_SHIFT;
3546     @@ -1324,7 +1333,7 @@ static unsigned chv_gpio_irq_startup(struct irq_data *d)
3547     irq_set_handler_locked(d, handler);
3548     pctrl->intr_lines[intsel] = offset;
3549     }
3550     - raw_spin_unlock_irqrestore(&pctrl->lock, flags);
3551     + raw_spin_unlock_irqrestore(&chv_lock, flags);
3552     }
3553    
3554     chv_gpio_irq_unmask(d);
3555     @@ -1340,7 +1349,7 @@ static int chv_gpio_irq_type(struct irq_data *d, unsigned type)
3556     unsigned long flags;
3557     u32 value;
3558    
3559     - raw_spin_lock_irqsave(&pctrl->lock, flags);
3560     + raw_spin_lock_irqsave(&chv_lock, flags);
3561    
3562     /*
3563     * Pins which can be used as shared interrupt are configured in
3564     @@ -1389,7 +1398,7 @@ static int chv_gpio_irq_type(struct irq_data *d, unsigned type)
3565     else if (type & IRQ_TYPE_LEVEL_MASK)
3566     irq_set_handler_locked(d, handle_level_irq);
3567    
3568     - raw_spin_unlock_irqrestore(&pctrl->lock, flags);
3569     + raw_spin_unlock_irqrestore(&chv_lock, flags);
3570    
3571     return 0;
3572     }
3573     @@ -1501,7 +1510,6 @@ static int chv_pinctrl_probe(struct platform_device *pdev)
3574     if (i == ARRAY_SIZE(chv_communities))
3575     return -ENODEV;
3576    
3577     - raw_spin_lock_init(&pctrl->lock);
3578     pctrl->dev = &pdev->dev;
3579    
3580     #ifdef CONFIG_PM_SLEEP
3581     diff --git a/drivers/platform/x86/hp-wmi.c b/drivers/platform/x86/hp-wmi.c
3582     index fb4dd7b3ee71..af2046c87806 100644
3583     --- a/drivers/platform/x86/hp-wmi.c
3584     +++ b/drivers/platform/x86/hp-wmi.c
3585     @@ -723,6 +723,11 @@ static int __init hp_wmi_rfkill_setup(struct platform_device *device)
3586     if (err)
3587     return err;
3588    
3589     + err = hp_wmi_perform_query(HPWMI_WIRELESS_QUERY, 1, &wireless,
3590     + sizeof(wireless), 0);
3591     + if (err)
3592     + return err;
3593     +
3594     if (wireless & 0x1) {
3595     wifi_rfkill = rfkill_alloc("hp-wifi", &device->dev,
3596     RFKILL_TYPE_WLAN,
3597     @@ -910,7 +915,7 @@ static int __init hp_wmi_bios_setup(struct platform_device *device)
3598     gps_rfkill = NULL;
3599     rfkill2_count = 0;
3600    
3601     - if (hp_wmi_bios_2009_later() || hp_wmi_rfkill_setup(device))
3602     + if (hp_wmi_rfkill_setup(device))
3603     hp_wmi_rfkill2_setup(device);
3604    
3605     err = device_create_file(&device->dev, &dev_attr_display);
3606     diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c
3607     index 9e03d158f411..4f7ce0097191 100644
3608     --- a/drivers/remoteproc/remoteproc_core.c
3609     +++ b/drivers/remoteproc/remoteproc_core.c
3610     @@ -1239,11 +1239,6 @@ int rproc_add(struct rproc *rproc)
3611     if (ret < 0)
3612     return ret;
3613    
3614     - /* expose to rproc_get_by_phandle users */
3615     - mutex_lock(&rproc_list_mutex);
3616     - list_add(&rproc->node, &rproc_list);
3617     - mutex_unlock(&rproc_list_mutex);
3618     -
3619     dev_info(dev, "%s is available\n", rproc->name);
3620    
3621     dev_info(dev, "Note: remoteproc is still under development and considered experimental.\n");
3622     @@ -1251,8 +1246,16 @@ int rproc_add(struct rproc *rproc)
3623    
3624     /* create debugfs entries */
3625     rproc_create_debug_dir(rproc);
3626     + ret = rproc_add_virtio_devices(rproc);
3627     + if (ret < 0)
3628     + return ret;
3629    
3630     - return rproc_add_virtio_devices(rproc);
3631     + /* expose to rproc_get_by_phandle users */
3632     + mutex_lock(&rproc_list_mutex);
3633     + list_add(&rproc->node, &rproc_list);
3634     + mutex_unlock(&rproc_list_mutex);
3635     +
3636     + return 0;
3637     }
3638     EXPORT_SYMBOL(rproc_add);
3639    
3640     diff --git a/drivers/rtc/rtc-s3c.c b/drivers/rtc/rtc-s3c.c
3641     index ffb860d18701..f92528822f06 100644
3642     --- a/drivers/rtc/rtc-s3c.c
3643     +++ b/drivers/rtc/rtc-s3c.c
3644     @@ -149,12 +149,14 @@ static int s3c_rtc_setfreq(struct s3c_rtc *info, int freq)
3645     if (!is_power_of_2(freq))
3646     return -EINVAL;
3647    
3648     + s3c_rtc_enable_clk(info);
3649     spin_lock_irq(&info->pie_lock);
3650    
3651     if (info->data->set_freq)
3652     info->data->set_freq(info, freq);
3653    
3654     spin_unlock_irq(&info->pie_lock);
3655     + s3c_rtc_disable_clk(info);
3656    
3657     return 0;
3658     }
3659     diff --git a/drivers/s390/cio/cmf.c b/drivers/s390/cio/cmf.c
3660     index b2afad5a5682..2a34eb5f6161 100644
3661     --- a/drivers/s390/cio/cmf.c
3662     +++ b/drivers/s390/cio/cmf.c
3663     @@ -753,6 +753,17 @@ static void reset_cmb(struct ccw_device *cdev)
3664     cmf_generic_reset(cdev);
3665     }
3666    
3667     +static int cmf_enabled(struct ccw_device *cdev)
3668     +{
3669     + int enabled;
3670     +
3671     + spin_lock_irq(cdev->ccwlock);
3672     + enabled = !!cdev->private->cmb;
3673     + spin_unlock_irq(cdev->ccwlock);
3674     +
3675     + return enabled;
3676     +}
3677     +
3678     static struct attribute_group cmf_attr_group;
3679    
3680     static struct cmb_operations cmbops_basic = {
3681     @@ -1153,13 +1164,8 @@ static ssize_t cmb_enable_show(struct device *dev,
3682     char *buf)
3683     {
3684     struct ccw_device *cdev = to_ccwdev(dev);
3685     - int enabled;
3686    
3687     - spin_lock_irq(cdev->ccwlock);
3688     - enabled = !!cdev->private->cmb;
3689     - spin_unlock_irq(cdev->ccwlock);
3690     -
3691     - return sprintf(buf, "%d\n", enabled);
3692     + return sprintf(buf, "%d\n", cmf_enabled(cdev));
3693     }
3694    
3695     static ssize_t cmb_enable_store(struct device *dev,
3696     @@ -1199,15 +1205,20 @@ int ccw_set_cmf(struct ccw_device *cdev, int enable)
3697     * @cdev: The ccw device to be enabled
3698     *
3699     * Returns %0 for success or a negative error value.
3700     - *
3701     + * Note: If this is called on a device for which channel measurement is already
3702     + * enabled a reset of the measurement data is triggered.
3703     * Context:
3704     * non-atomic
3705     */
3706     int enable_cmf(struct ccw_device *cdev)
3707     {
3708     - int ret;
3709     + int ret = 0;
3710    
3711     device_lock(&cdev->dev);
3712     + if (cmf_enabled(cdev)) {
3713     + cmbops->reset(cdev);
3714     + goto out_unlock;
3715     + }
3716     get_device(&cdev->dev);
3717     ret = cmbops->alloc(cdev);
3718     if (ret)
3719     @@ -1226,7 +1237,7 @@ int enable_cmf(struct ccw_device *cdev)
3720     out:
3721     if (ret)
3722     put_device(&cdev->dev);
3723     -
3724     +out_unlock:
3725     device_unlock(&cdev->dev);
3726     return ret;
3727     }
3728     diff --git a/drivers/scsi/lpfc/lpfc_scsi.c b/drivers/scsi/lpfc/lpfc_scsi.c
3729     index 4679ed4444a7..9e165bc05ee1 100644
3730     --- a/drivers/scsi/lpfc/lpfc_scsi.c
3731     +++ b/drivers/scsi/lpfc/lpfc_scsi.c
3732     @@ -3859,7 +3859,7 @@ int lpfc_sli4_scmd_to_wqidx_distr(struct lpfc_hba *phba,
3733     uint32_t tag;
3734     uint16_t hwq;
3735    
3736     - if (shost_use_blk_mq(cmnd->device->host)) {
3737     + if (cmnd && shost_use_blk_mq(cmnd->device->host)) {
3738     tag = blk_mq_unique_tag(cmnd->request);
3739     hwq = blk_mq_unique_tag_to_hwq(tag);
3740    
3741     diff --git a/drivers/spi/spi-pxa2xx.c b/drivers/spi/spi-pxa2xx.c
3742     index 73c8ea0b1360..3cac73e4c3e4 100644
3743     --- a/drivers/spi/spi-pxa2xx.c
3744     +++ b/drivers/spi/spi-pxa2xx.c
3745     @@ -548,7 +548,14 @@ static void reset_sccr1(struct driver_data *drv_data)
3746     u32 sccr1_reg;
3747    
3748     sccr1_reg = pxa2xx_spi_read(drv_data, SSCR1) & ~drv_data->int_cr1;
3749     - sccr1_reg &= ~SSCR1_RFT;
3750     + switch (drv_data->ssp_type) {
3751     + case QUARK_X1000_SSP:
3752     + sccr1_reg &= ~QUARK_X1000_SSCR1_RFT;
3753     + break;
3754     + default:
3755     + sccr1_reg &= ~SSCR1_RFT;
3756     + break;
3757     + }
3758     sccr1_reg |= chip->threshold;
3759     pxa2xx_spi_write(drv_data, SSCR1, sccr1_reg);
3760     }
3761     diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c
3762     index 72204fbf2bb1..bd810c109277 100644
3763     --- a/drivers/target/iscsi/iscsi_target.c
3764     +++ b/drivers/target/iscsi/iscsi_target.c
3765     @@ -492,7 +492,8 @@ static void iscsit_aborted_task(struct iscsi_conn *conn, struct iscsi_cmd *cmd)
3766     bool scsi_cmd = (cmd->iscsi_opcode == ISCSI_OP_SCSI_CMD);
3767    
3768     spin_lock_bh(&conn->cmd_lock);
3769     - if (!list_empty(&cmd->i_conn_node))
3770     + if (!list_empty(&cmd->i_conn_node) &&
3771     + !(cmd->se_cmd.transport_state & CMD_T_FABRIC_STOP))
3772     list_del_init(&cmd->i_conn_node);
3773     spin_unlock_bh(&conn->cmd_lock);
3774    
3775     @@ -4194,6 +4195,7 @@ transport_err:
3776    
3777     static void iscsit_release_commands_from_conn(struct iscsi_conn *conn)
3778     {
3779     + LIST_HEAD(tmp_list);
3780     struct iscsi_cmd *cmd = NULL, *cmd_tmp = NULL;
3781     struct iscsi_session *sess = conn->sess;
3782     /*
3783     @@ -4202,18 +4204,26 @@ static void iscsit_release_commands_from_conn(struct iscsi_conn *conn)
3784     * has been reset -> returned sleeping pre-handler state.
3785     */
3786     spin_lock_bh(&conn->cmd_lock);
3787     - list_for_each_entry_safe(cmd, cmd_tmp, &conn->conn_cmd_list, i_conn_node) {
3788     + list_splice_init(&conn->conn_cmd_list, &tmp_list);
3789    
3790     + list_for_each_entry(cmd, &tmp_list, i_conn_node) {
3791     + struct se_cmd *se_cmd = &cmd->se_cmd;
3792     +
3793     + if (se_cmd->se_tfo != NULL) {
3794     + spin_lock(&se_cmd->t_state_lock);
3795     + se_cmd->transport_state |= CMD_T_FABRIC_STOP;
3796     + spin_unlock(&se_cmd->t_state_lock);
3797     + }
3798     + }
3799     + spin_unlock_bh(&conn->cmd_lock);
3800     +
3801     + list_for_each_entry_safe(cmd, cmd_tmp, &tmp_list, i_conn_node) {
3802     list_del_init(&cmd->i_conn_node);
3803     - spin_unlock_bh(&conn->cmd_lock);
3804    
3805     iscsit_increment_maxcmdsn(cmd, sess);
3806     -
3807     iscsit_free_cmd(cmd, true);
3808    
3809     - spin_lock_bh(&conn->cmd_lock);
3810     }
3811     - spin_unlock_bh(&conn->cmd_lock);
3812     }
3813    
3814     static void iscsit_stop_timers_for_cmds(
3815     diff --git a/drivers/target/iscsi/iscsi_target_login.c b/drivers/target/iscsi/iscsi_target_login.c
3816     index 96e78c823d13..316f66172335 100644
3817     --- a/drivers/target/iscsi/iscsi_target_login.c
3818     +++ b/drivers/target/iscsi/iscsi_target_login.c
3819     @@ -1357,8 +1357,9 @@ static int __iscsi_target_login_thread(struct iscsi_np *np)
3820     }
3821     login->zero_tsih = zero_tsih;
3822    
3823     - conn->sess->se_sess->sup_prot_ops =
3824     - conn->conn_transport->iscsit_get_sup_prot_ops(conn);
3825     + if (conn->sess)
3826     + conn->sess->se_sess->sup_prot_ops =
3827     + conn->conn_transport->iscsit_get_sup_prot_ops(conn);
3828    
3829     tpg = conn->tpg;
3830     if (!tpg) {
3831     diff --git a/drivers/target/target_core_device.c b/drivers/target/target_core_device.c
3832     index 3436a83568ea..dcd5ed26eb18 100644
3833     --- a/drivers/target/target_core_device.c
3834     +++ b/drivers/target/target_core_device.c
3835     @@ -832,13 +832,15 @@ struct se_device *target_alloc_device(struct se_hba *hba, const char *name)
3836     * in ATA and we need to set TPE=1
3837     */
3838     bool target_configure_unmap_from_queue(struct se_dev_attrib *attrib,
3839     - struct request_queue *q, int block_size)
3840     + struct request_queue *q)
3841     {
3842     + int block_size = queue_logical_block_size(q);
3843     +
3844     if (!blk_queue_discard(q))
3845     return false;
3846    
3847     - attrib->max_unmap_lba_count = (q->limits.max_discard_sectors << 9) /
3848     - block_size;
3849     + attrib->max_unmap_lba_count =
3850     + q->limits.max_discard_sectors >> (ilog2(block_size) - 9);
3851     /*
3852     * Currently hardcoded to 1 in Linux/SCSI code..
3853     */
3854     diff --git a/drivers/target/target_core_file.c b/drivers/target/target_core_file.c
3855     index 75f0f08b2a34..79291869bce6 100644
3856     --- a/drivers/target/target_core_file.c
3857     +++ b/drivers/target/target_core_file.c
3858     @@ -161,8 +161,7 @@ static int fd_configure_device(struct se_device *dev)
3859     dev_size, div_u64(dev_size, fd_dev->fd_block_size),
3860     fd_dev->fd_block_size);
3861    
3862     - if (target_configure_unmap_from_queue(&dev->dev_attrib, q,
3863     - fd_dev->fd_block_size))
3864     + if (target_configure_unmap_from_queue(&dev->dev_attrib, q))
3865     pr_debug("IFILE: BLOCK Discard support available,"
3866     " disabled by default\n");
3867     /*
3868     diff --git a/drivers/target/target_core_iblock.c b/drivers/target/target_core_iblock.c
3869     index 2c53dcefff3e..4620c1dcdbc7 100644
3870     --- a/drivers/target/target_core_iblock.c
3871     +++ b/drivers/target/target_core_iblock.c
3872     @@ -121,8 +121,7 @@ static int iblock_configure_device(struct se_device *dev)
3873     dev->dev_attrib.hw_max_sectors = queue_max_hw_sectors(q);
3874     dev->dev_attrib.hw_queue_depth = q->nr_requests;
3875    
3876     - if (target_configure_unmap_from_queue(&dev->dev_attrib, q,
3877     - dev->dev_attrib.hw_block_size))
3878     + if (target_configure_unmap_from_queue(&dev->dev_attrib, q))
3879     pr_debug("IBLOCK: BLOCK Discard support available,"
3880     " disabled by default\n");
3881    
3882     diff --git a/drivers/target/target_core_internal.h b/drivers/target/target_core_internal.h
3883     index dae0750c2032..253a91bff943 100644
3884     --- a/drivers/target/target_core_internal.h
3885     +++ b/drivers/target/target_core_internal.h
3886     @@ -148,6 +148,7 @@ sense_reason_t target_cmd_size_check(struct se_cmd *cmd, unsigned int size);
3887     void target_qf_do_work(struct work_struct *work);
3888     bool target_check_wce(struct se_device *dev);
3889     bool target_check_fua(struct se_device *dev);
3890     +void __target_execute_cmd(struct se_cmd *, bool);
3891    
3892     /* target_core_stat.c */
3893     void target_stat_setup_dev_default_groups(struct se_device *);
3894     diff --git a/drivers/target/target_core_sbc.c b/drivers/target/target_core_sbc.c
3895     index 98698d875742..c220bb8dfa9d 100644
3896     --- a/drivers/target/target_core_sbc.c
3897     +++ b/drivers/target/target_core_sbc.c
3898     @@ -594,7 +594,7 @@ static sense_reason_t compare_and_write_callback(struct se_cmd *cmd, bool succes
3899     cmd->transport_state |= CMD_T_ACTIVE|CMD_T_BUSY|CMD_T_SENT;
3900     spin_unlock_irq(&cmd->t_state_lock);
3901    
3902     - __target_execute_cmd(cmd);
3903     + __target_execute_cmd(cmd, false);
3904    
3905     kfree(buf);
3906     return ret;
3907     diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c
3908     index d151bc3d6971..7bc3778a1ac9 100644
3909     --- a/drivers/target/target_core_transport.c
3910     +++ b/drivers/target/target_core_transport.c
3911     @@ -1270,23 +1270,6 @@ target_setup_cmd_from_cdb(struct se_cmd *cmd, unsigned char *cdb)
3912    
3913     trace_target_sequencer_start(cmd);
3914    
3915     - /*
3916     - * Check for an existing UNIT ATTENTION condition
3917     - */
3918     - ret = target_scsi3_ua_check(cmd);
3919     - if (ret)
3920     - return ret;
3921     -
3922     - ret = target_alua_state_check(cmd);
3923     - if (ret)
3924     - return ret;
3925     -
3926     - ret = target_check_reservation(cmd);
3927     - if (ret) {
3928     - cmd->scsi_status = SAM_STAT_RESERVATION_CONFLICT;
3929     - return ret;
3930     - }
3931     -
3932     ret = dev->transport->parse_cdb(cmd);
3933     if (ret == TCM_UNSUPPORTED_SCSI_OPCODE)
3934     pr_warn_ratelimited("%s/%s: Unsupported SCSI Opcode 0x%02x, sending CHECK_CONDITION.\n",
3935     @@ -1749,20 +1732,45 @@ queue_full:
3936     }
3937     EXPORT_SYMBOL(transport_generic_request_failure);
3938    
3939     -void __target_execute_cmd(struct se_cmd *cmd)
3940     +void __target_execute_cmd(struct se_cmd *cmd, bool do_checks)
3941     {
3942     sense_reason_t ret;
3943    
3944     - if (cmd->execute_cmd) {
3945     - ret = cmd->execute_cmd(cmd);
3946     - if (ret) {
3947     - spin_lock_irq(&cmd->t_state_lock);
3948     - cmd->transport_state &= ~(CMD_T_BUSY|CMD_T_SENT);
3949     - spin_unlock_irq(&cmd->t_state_lock);
3950     + if (!cmd->execute_cmd) {
3951     + ret = TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;
3952     + goto err;
3953     + }
3954     + if (do_checks) {
3955     + /*
3956     + * Check for an existing UNIT ATTENTION condition after
3957     + * target_handle_task_attr() has done SAM task attr
3958     + * checking, and possibly have already defered execution
3959     + * out to target_restart_delayed_cmds() context.
3960     + */
3961     + ret = target_scsi3_ua_check(cmd);
3962     + if (ret)
3963     + goto err;
3964     +
3965     + ret = target_alua_state_check(cmd);
3966     + if (ret)
3967     + goto err;
3968    
3969     - transport_generic_request_failure(cmd, ret);
3970     + ret = target_check_reservation(cmd);
3971     + if (ret) {
3972     + cmd->scsi_status = SAM_STAT_RESERVATION_CONFLICT;
3973     + goto err;
3974     }
3975     }
3976     +
3977     + ret = cmd->execute_cmd(cmd);
3978     + if (!ret)
3979     + return;
3980     +err:
3981     + spin_lock_irq(&cmd->t_state_lock);
3982     + cmd->transport_state &= ~(CMD_T_BUSY|CMD_T_SENT);
3983     + spin_unlock_irq(&cmd->t_state_lock);
3984     +
3985     + transport_generic_request_failure(cmd, ret);
3986     }
3987    
3988     static int target_write_prot_action(struct se_cmd *cmd)
3989     @@ -1807,6 +1815,8 @@ static bool target_handle_task_attr(struct se_cmd *cmd)
3990     if (dev->transport->transport_flags & TRANSPORT_FLAG_PASSTHROUGH)
3991     return false;
3992    
3993     + cmd->se_cmd_flags |= SCF_TASK_ATTR_SET;
3994     +
3995     /*
3996     * Check for the existence of HEAD_OF_QUEUE, and if true return 1
3997     * to allow the passed struct se_cmd list of tasks to the front of the list.
3998     @@ -1887,7 +1897,7 @@ void target_execute_cmd(struct se_cmd *cmd)
3999     return;
4000     }
4001    
4002     - __target_execute_cmd(cmd);
4003     + __target_execute_cmd(cmd, true);
4004     }
4005     EXPORT_SYMBOL(target_execute_cmd);
4006    
4007     @@ -1911,7 +1921,7 @@ static void target_restart_delayed_cmds(struct se_device *dev)
4008     list_del(&cmd->se_delayed_node);
4009     spin_unlock(&dev->delayed_cmd_lock);
4010    
4011     - __target_execute_cmd(cmd);
4012     + __target_execute_cmd(cmd, true);
4013    
4014     if (cmd->sam_task_attr == TCM_ORDERED_TAG)
4015     break;
4016     @@ -1929,6 +1939,9 @@ static void transport_complete_task_attr(struct se_cmd *cmd)
4017     if (dev->transport->transport_flags & TRANSPORT_FLAG_PASSTHROUGH)
4018     return;
4019    
4020     + if (!(cmd->se_cmd_flags & SCF_TASK_ATTR_SET))
4021     + goto restart;
4022     +
4023     if (cmd->sam_task_attr == TCM_SIMPLE_TAG) {
4024     atomic_dec_mb(&dev->simple_cmds);
4025     dev->dev_cur_ordered_id++;
4026     @@ -1945,7 +1958,7 @@ static void transport_complete_task_attr(struct se_cmd *cmd)
4027     pr_debug("Incremented dev_cur_ordered_id: %u for ORDERED\n",
4028     dev->dev_cur_ordered_id);
4029     }
4030     -
4031     +restart:
4032     target_restart_delayed_cmds(dev);
4033     }
4034    
4035     @@ -2533,15 +2546,10 @@ static void target_release_cmd_kref(struct kref *kref)
4036     bool fabric_stop;
4037    
4038     spin_lock_irqsave(&se_sess->sess_cmd_lock, flags);
4039     - if (list_empty(&se_cmd->se_cmd_list)) {
4040     - spin_unlock_irqrestore(&se_sess->sess_cmd_lock, flags);
4041     - target_free_cmd_mem(se_cmd);
4042     - se_cmd->se_tfo->release_cmd(se_cmd);
4043     - return;
4044     - }
4045    
4046     spin_lock(&se_cmd->t_state_lock);
4047     - fabric_stop = (se_cmd->transport_state & CMD_T_FABRIC_STOP);
4048     + fabric_stop = (se_cmd->transport_state & CMD_T_FABRIC_STOP) &&
4049     + (se_cmd->transport_state & CMD_T_ABORTED);
4050     spin_unlock(&se_cmd->t_state_lock);
4051    
4052     if (se_cmd->cmd_wait_set || fabric_stop) {
4053     diff --git a/drivers/tty/serial/atmel_serial.c b/drivers/tty/serial/atmel_serial.c
4054     index 7bbadd176c74..7b5462eb8388 100644
4055     --- a/drivers/tty/serial/atmel_serial.c
4056     +++ b/drivers/tty/serial/atmel_serial.c
4057     @@ -485,19 +485,21 @@ static void atmel_start_tx(struct uart_port *port)
4058     {
4059     struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
4060    
4061     - if (atmel_use_pdc_tx(port)) {
4062     - if (atmel_uart_readl(port, ATMEL_PDC_PTSR) & ATMEL_PDC_TXTEN)
4063     - /* The transmitter is already running. Yes, we
4064     - really need this.*/
4065     - return;
4066     + if (atmel_use_pdc_tx(port) && (atmel_uart_readl(port, ATMEL_PDC_PTSR)
4067     + & ATMEL_PDC_TXTEN))
4068     + /* The transmitter is already running. Yes, we
4069     + really need this.*/
4070     + return;
4071    
4072     + if (atmel_use_pdc_tx(port) || atmel_use_dma_tx(port))
4073     if ((port->rs485.flags & SER_RS485_ENABLED) &&
4074     !(port->rs485.flags & SER_RS485_RX_DURING_TX))
4075     atmel_stop_rx(port);
4076    
4077     + if (atmel_use_pdc_tx(port))
4078     /* re-enable PDC transmit */
4079     atmel_uart_writel(port, ATMEL_PDC_PTCR, ATMEL_PDC_TXTEN);
4080     - }
4081     +
4082     /* Enable interrupts */
4083     atmel_uart_writel(port, ATMEL_US_IER, atmel_port->tx_done_mask);
4084     }
4085     diff --git a/drivers/tty/serial/msm_serial.c b/drivers/tty/serial/msm_serial.c
4086     index dcde955475dc..e1de4944e0ce 100644
4087     --- a/drivers/tty/serial/msm_serial.c
4088     +++ b/drivers/tty/serial/msm_serial.c
4089     @@ -726,7 +726,7 @@ static void msm_handle_tx(struct uart_port *port)
4090     return;
4091     }
4092    
4093     - pio_count = CIRC_CNT(xmit->head, xmit->tail, UART_XMIT_SIZE);
4094     + pio_count = CIRC_CNT_TO_END(xmit->head, xmit->tail, UART_XMIT_SIZE);
4095     dma_count = CIRC_CNT_TO_END(xmit->head, xmit->tail, UART_XMIT_SIZE);
4096    
4097     dma_min = 1; /* Always DMA */
4098     diff --git a/drivers/tty/serial/samsung.c b/drivers/tty/serial/samsung.c
4099     index 8320173af846..237ef5573c18 100644
4100     --- a/drivers/tty/serial/samsung.c
4101     +++ b/drivers/tty/serial/samsung.c
4102     @@ -1676,7 +1676,7 @@ static int s3c24xx_serial_init_port(struct s3c24xx_uart_port *ourport,
4103     return -ENODEV;
4104    
4105     if (port->mapbase != 0)
4106     - return 0;
4107     + return -EINVAL;
4108    
4109     /* setup info for port */
4110     port->dev = &platdev->dev;
4111     @@ -1730,22 +1730,25 @@ static int s3c24xx_serial_init_port(struct s3c24xx_uart_port *ourport,
4112     ourport->dma = devm_kzalloc(port->dev,
4113     sizeof(*ourport->dma),
4114     GFP_KERNEL);
4115     - if (!ourport->dma)
4116     - return -ENOMEM;
4117     + if (!ourport->dma) {
4118     + ret = -ENOMEM;
4119     + goto err;
4120     + }
4121     }
4122    
4123     ourport->clk = clk_get(&platdev->dev, "uart");
4124     if (IS_ERR(ourport->clk)) {
4125     pr_err("%s: Controller clock not found\n",
4126     dev_name(&platdev->dev));
4127     - return PTR_ERR(ourport->clk);
4128     + ret = PTR_ERR(ourport->clk);
4129     + goto err;
4130     }
4131    
4132     ret = clk_prepare_enable(ourport->clk);
4133     if (ret) {
4134     pr_err("uart: clock failed to prepare+enable: %d\n", ret);
4135     clk_put(ourport->clk);
4136     - return ret;
4137     + goto err;
4138     }
4139    
4140     /* Keep all interrupts masked and cleared */
4141     @@ -1761,7 +1764,12 @@ static int s3c24xx_serial_init_port(struct s3c24xx_uart_port *ourport,
4142    
4143     /* reset the fifos (and setup the uart) */
4144     s3c24xx_serial_resetport(port, cfg);
4145     +
4146     return 0;
4147     +
4148     +err:
4149     + port->mapbase = 0;
4150     + return ret;
4151     }
4152    
4153     /* Device driver serial port probe */
4154     diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c
4155     index 38ae877c46e3..3ffb01ff6549 100644
4156     --- a/drivers/usb/core/devio.c
4157     +++ b/drivers/usb/core/devio.c
4158     @@ -1203,10 +1203,11 @@ static int proc_getdriver(struct usb_dev_state *ps, void __user *arg)
4159    
4160     static int proc_connectinfo(struct usb_dev_state *ps, void __user *arg)
4161     {
4162     - struct usbdevfs_connectinfo ci = {
4163     - .devnum = ps->dev->devnum,
4164     - .slow = ps->dev->speed == USB_SPEED_LOW
4165     - };
4166     + struct usbdevfs_connectinfo ci;
4167     +
4168     + memset(&ci, 0, sizeof(ci));
4169     + ci.devnum = ps->dev->devnum;
4170     + ci.slow = ps->dev->speed == USB_SPEED_LOW;
4171    
4172     if (copy_to_user(arg, &ci, sizeof(ci)))
4173     return -EFAULT;
4174     diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
4175     index 944a6dca0fcb..d2e50a27140c 100644
4176     --- a/drivers/usb/core/quirks.c
4177     +++ b/drivers/usb/core/quirks.c
4178     @@ -128,6 +128,9 @@ static const struct usb_device_id usb_quirk_list[] = {
4179     { USB_DEVICE(0x04f3, 0x016f), .driver_info =
4180     USB_QUIRK_DEVICE_QUALIFIER },
4181    
4182     + { USB_DEVICE(0x04f3, 0x0381), .driver_info =
4183     + USB_QUIRK_NO_LPM },
4184     +
4185     { USB_DEVICE(0x04f3, 0x21b8), .driver_info =
4186     USB_QUIRK_DEVICE_QUALIFIER },
4187    
4188     diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
4189     index 69ffe6e8d77f..70900e6ca9bc 100644
4190     --- a/drivers/usb/dwc3/gadget.c
4191     +++ b/drivers/usb/dwc3/gadget.c
4192     @@ -1965,6 +1965,10 @@ static int dwc3_cleanup_done_reqs(struct dwc3 *dwc, struct dwc3_ep *dep,
4193     return 1;
4194     }
4195    
4196     + if (usb_endpoint_xfer_isoc(dep->endpoint.desc))
4197     + if ((event->status & DEPEVT_STATUS_IOC) &&
4198     + (trb->ctrl & DWC3_TRB_CTRL_IOC))
4199     + return 0;
4200     return 1;
4201     }
4202    
4203     diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c
4204     index 97ef75af9632..803c503a2e3d 100644
4205     --- a/drivers/usb/gadget/function/f_fs.c
4206     +++ b/drivers/usb/gadget/function/f_fs.c
4207     @@ -2740,6 +2740,7 @@ static int _ffs_func_bind(struct usb_configuration *c,
4208     func->ffs->ss_descs_count;
4209    
4210     int fs_len, hs_len, ss_len, ret, i;
4211     + struct ffs_ep *eps_ptr;
4212    
4213     /* Make it a single chunk, less management later on */
4214     vla_group(d);
4215     @@ -2788,12 +2789,9 @@ static int _ffs_func_bind(struct usb_configuration *c,
4216     ffs->raw_descs_length);
4217    
4218     memset(vla_ptr(vlabuf, d, inums), 0xff, d_inums__sz);
4219     - for (ret = ffs->eps_count; ret; --ret) {
4220     - struct ffs_ep *ptr;
4221     -
4222     - ptr = vla_ptr(vlabuf, d, eps);
4223     - ptr[ret].num = -1;
4224     - }
4225     + eps_ptr = vla_ptr(vlabuf, d, eps);
4226     + for (i = 0; i < ffs->eps_count; i++)
4227     + eps_ptr[i].num = -1;
4228    
4229     /* Save pointers
4230     * d_eps == vlabuf, func->eps used to kfree vlabuf later
4231     diff --git a/drivers/usb/gadget/function/f_uac2.c b/drivers/usb/gadget/function/f_uac2.c
4232     index 044ca79d3cb5..12628dd36e55 100644
4233     --- a/drivers/usb/gadget/function/f_uac2.c
4234     +++ b/drivers/usb/gadget/function/f_uac2.c
4235     @@ -1291,6 +1291,7 @@ in_rq_cur(struct usb_function *fn, const struct usb_ctrlrequest *cr)
4236    
4237     if (control_selector == UAC2_CS_CONTROL_SAM_FREQ) {
4238     struct cntrl_cur_lay3 c;
4239     + memset(&c, 0, sizeof(struct cntrl_cur_lay3));
4240    
4241     if (entity_id == USB_IN_CLK_ID)
4242     c.dCUR = p_srate;
4243     diff --git a/drivers/usb/renesas_usbhs/fifo.c b/drivers/usb/renesas_usbhs/fifo.c
4244     index f1893e08e51a..db565f620f82 100644
4245     --- a/drivers/usb/renesas_usbhs/fifo.c
4246     +++ b/drivers/usb/renesas_usbhs/fifo.c
4247     @@ -808,20 +808,27 @@ static void xfer_work(struct work_struct *work)
4248     {
4249     struct usbhs_pkt *pkt = container_of(work, struct usbhs_pkt, work);
4250     struct usbhs_pipe *pipe = pkt->pipe;
4251     - struct usbhs_fifo *fifo = usbhs_pipe_to_fifo(pipe);
4252     + struct usbhs_fifo *fifo;
4253     struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe);
4254     struct dma_async_tx_descriptor *desc;
4255     - struct dma_chan *chan = usbhsf_dma_chan_get(fifo, pkt);
4256     + struct dma_chan *chan;
4257     struct device *dev = usbhs_priv_to_dev(priv);
4258     enum dma_transfer_direction dir;
4259     + unsigned long flags;
4260    
4261     + usbhs_lock(priv, flags);
4262     + fifo = usbhs_pipe_to_fifo(pipe);
4263     + if (!fifo)
4264     + goto xfer_work_end;
4265     +
4266     + chan = usbhsf_dma_chan_get(fifo, pkt);
4267     dir = usbhs_pipe_is_dir_in(pipe) ? DMA_DEV_TO_MEM : DMA_MEM_TO_DEV;
4268    
4269     desc = dmaengine_prep_slave_single(chan, pkt->dma + pkt->actual,
4270     pkt->trans, dir,
4271     DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
4272     if (!desc)
4273     - return;
4274     + goto xfer_work_end;
4275    
4276     desc->callback = usbhsf_dma_complete;
4277     desc->callback_param = pipe;
4278     @@ -829,7 +836,7 @@ static void xfer_work(struct work_struct *work)
4279     pkt->cookie = dmaengine_submit(desc);
4280     if (pkt->cookie < 0) {
4281     dev_err(dev, "Failed to submit dma descriptor\n");
4282     - return;
4283     + goto xfer_work_end;
4284     }
4285    
4286     dev_dbg(dev, " %s %d (%d/ %d)\n",
4287     @@ -840,6 +847,9 @@ static void xfer_work(struct work_struct *work)
4288     usbhs_pipe_set_trans_count_if_bulk(pipe, pkt->trans);
4289     dma_async_issue_pending(chan);
4290     usbhs_pipe_enable(pipe);
4291     +
4292     +xfer_work_end:
4293     + usbhs_unlock(priv, flags);
4294     }
4295    
4296     /*
4297     diff --git a/drivers/usb/renesas_usbhs/mod_gadget.c b/drivers/usb/renesas_usbhs/mod_gadget.c
4298     index fa14198daf77..5a3abf56d56b 100644
4299     --- a/drivers/usb/renesas_usbhs/mod_gadget.c
4300     +++ b/drivers/usb/renesas_usbhs/mod_gadget.c
4301     @@ -586,6 +586,9 @@ static int usbhsg_ep_enable(struct usb_ep *ep,
4302     struct usbhs_priv *priv = usbhsg_gpriv_to_priv(gpriv);
4303     struct usbhs_pipe *pipe;
4304     int ret = -EIO;
4305     + unsigned long flags;
4306     +
4307     + usbhs_lock(priv, flags);
4308    
4309     /*
4310     * if it already have pipe,
4311     @@ -594,7 +597,8 @@ static int usbhsg_ep_enable(struct usb_ep *ep,
4312     if (uep->pipe) {
4313     usbhs_pipe_clear(uep->pipe);
4314     usbhs_pipe_sequence_data0(uep->pipe);
4315     - return 0;
4316     + ret = 0;
4317     + goto usbhsg_ep_enable_end;
4318     }
4319    
4320     pipe = usbhs_pipe_malloc(priv,
4321     @@ -622,6 +626,9 @@ static int usbhsg_ep_enable(struct usb_ep *ep,
4322     ret = 0;
4323     }
4324    
4325     +usbhsg_ep_enable_end:
4326     + usbhs_unlock(priv, flags);
4327     +
4328     return ret;
4329     }
4330    
4331     diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
4332     index d96d423d00e6..8e07536c233a 100644
4333     --- a/drivers/usb/serial/option.c
4334     +++ b/drivers/usb/serial/option.c
4335     @@ -273,6 +273,7 @@ static void option_instat_callback(struct urb *urb);
4336     #define TELIT_PRODUCT_LE922_USBCFG5 0x1045
4337     #define TELIT_PRODUCT_LE920 0x1200
4338     #define TELIT_PRODUCT_LE910 0x1201
4339     +#define TELIT_PRODUCT_LE910_USBCFG4 0x1206
4340    
4341     /* ZTE PRODUCTS */
4342     #define ZTE_VENDOR_ID 0x19d2
4343     @@ -1198,6 +1199,8 @@ static const struct usb_device_id option_ids[] = {
4344     .driver_info = (kernel_ulong_t)&telit_le922_blacklist_usbcfg0 },
4345     { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE910),
4346     .driver_info = (kernel_ulong_t)&telit_le910_blacklist },
4347     + { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE910_USBCFG4),
4348     + .driver_info = (kernel_ulong_t)&telit_le922_blacklist_usbcfg3 },
4349     { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920),
4350     .driver_info = (kernel_ulong_t)&telit_le920_blacklist },
4351     { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MF622, 0xff, 0xff, 0xff) }, /* ZTE WCDMA products */
4352     diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c
4353     index 8ab6238c9299..56f7e2521202 100644
4354     --- a/drivers/virtio/virtio_balloon.c
4355     +++ b/drivers/virtio/virtio_balloon.c
4356     @@ -196,6 +196,8 @@ static unsigned leak_balloon(struct virtio_balloon *vb, size_t num)
4357     num = min(num, ARRAY_SIZE(vb->pfns));
4358    
4359     mutex_lock(&vb->balloon_lock);
4360     + /* We can't release more pages than taken */
4361     + num = min(num, (size_t)vb->num_pages);
4362     for (vb->num_pfns = 0; vb->num_pfns < num;
4363     vb->num_pfns += VIRTIO_BALLOON_PAGES_PER_PAGE) {
4364     page = balloon_page_dequeue(vb_dev_info);
4365     diff --git a/drivers/w1/masters/omap_hdq.c b/drivers/w1/masters/omap_hdq.c
4366     index 0e2f43bccf1f..0c427d6a12d1 100644
4367     --- a/drivers/w1/masters/omap_hdq.c
4368     +++ b/drivers/w1/masters/omap_hdq.c
4369     @@ -390,8 +390,6 @@ static int hdq_read_byte(struct hdq_data *hdq_data, u8 *val)
4370     goto out;
4371     }
4372    
4373     - hdq_data->hdq_irqstatus = 0;
4374     -
4375     if (!(hdq_data->hdq_irqstatus & OMAP_HDQ_INT_STATUS_RXCOMPLETE)) {
4376     hdq_reg_merge(hdq_data, OMAP_HDQ_CTRL_STATUS,
4377     OMAP_HDQ_CTRL_STATUS_DIR | OMAP_HDQ_CTRL_STATUS_GO,
4378     diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
4379     index 9abe18763a7f..257bbdcb5df6 100644
4380     --- a/fs/btrfs/extent_io.c
4381     +++ b/fs/btrfs/extent_io.c
4382     @@ -2786,12 +2786,6 @@ struct bio *btrfs_bio_clone(struct bio *bio, gfp_t gfp_mask)
4383     btrfs_bio->csum = NULL;
4384     btrfs_bio->csum_allocated = NULL;
4385     btrfs_bio->end_io = NULL;
4386     -
4387     -#ifdef CONFIG_BLK_CGROUP
4388     - /* FIXME, put this into bio_clone_bioset */
4389     - if (bio->bi_css)
4390     - bio_associate_blkcg(new, bio->bi_css);
4391     -#endif
4392     }
4393     return new;
4394     }
4395     diff --git a/fs/cifs/cifs_fs_sb.h b/fs/cifs/cifs_fs_sb.h
4396     index 3182273a3407..1418daa03d95 100644
4397     --- a/fs/cifs/cifs_fs_sb.h
4398     +++ b/fs/cifs/cifs_fs_sb.h
4399     @@ -46,6 +46,9 @@
4400     #define CIFS_MOUNT_CIFS_BACKUPUID 0x200000 /* backup intent bit for a user */
4401     #define CIFS_MOUNT_CIFS_BACKUPGID 0x400000 /* backup intent bit for a group */
4402     #define CIFS_MOUNT_MAP_SFM_CHR 0x800000 /* SFM/MAC mapping for illegal chars */
4403     +#define CIFS_MOUNT_USE_PREFIX_PATH 0x1000000 /* make subpath with unaccessible
4404     + * root mountable
4405     + */
4406    
4407     struct cifs_sb_info {
4408     struct rb_root tlink_tree;
4409     @@ -67,5 +70,6 @@ struct cifs_sb_info {
4410     struct backing_dev_info bdi;
4411     struct delayed_work prune_tlinks;
4412     struct rcu_head rcu;
4413     + char *prepath;
4414     };
4415     #endif /* _CIFS_FS_SB_H */
4416     diff --git a/fs/cifs/cifsencrypt.c b/fs/cifs/cifsencrypt.c
4417     index e682b36a210f..4acbc390a7d6 100644
4418     --- a/fs/cifs/cifsencrypt.c
4419     +++ b/fs/cifs/cifsencrypt.c
4420     @@ -731,24 +731,26 @@ setup_ntlmv2_rsp(struct cifs_ses *ses, const struct nls_table *nls_cp)
4421    
4422     memcpy(ses->auth_key.response + baselen, tiblob, tilen);
4423    
4424     + mutex_lock(&ses->server->srv_mutex);
4425     +
4426     rc = crypto_hmacmd5_alloc(ses->server);
4427     if (rc) {
4428     cifs_dbg(VFS, "could not crypto alloc hmacmd5 rc %d\n", rc);
4429     - goto setup_ntlmv2_rsp_ret;
4430     + goto unlock;
4431     }
4432    
4433     /* calculate ntlmv2_hash */
4434     rc = calc_ntlmv2_hash(ses, ntlmv2_hash, nls_cp);
4435     if (rc) {
4436     cifs_dbg(VFS, "could not get v2 hash rc %d\n", rc);
4437     - goto setup_ntlmv2_rsp_ret;
4438     + goto unlock;
4439     }
4440    
4441     /* calculate first part of the client response (CR1) */
4442     rc = CalcNTLMv2_response(ses, ntlmv2_hash);
4443     if (rc) {
4444     cifs_dbg(VFS, "Could not calculate CR1 rc: %d\n", rc);
4445     - goto setup_ntlmv2_rsp_ret;
4446     + goto unlock;
4447     }
4448    
4449     /* now calculate the session key for NTLMv2 */
4450     @@ -757,13 +759,13 @@ setup_ntlmv2_rsp(struct cifs_ses *ses, const struct nls_table *nls_cp)
4451     if (rc) {
4452     cifs_dbg(VFS, "%s: Could not set NTLMV2 Hash as a key\n",
4453     __func__);
4454     - goto setup_ntlmv2_rsp_ret;
4455     + goto unlock;
4456     }
4457    
4458     rc = crypto_shash_init(&ses->server->secmech.sdeschmacmd5->shash);
4459     if (rc) {
4460     cifs_dbg(VFS, "%s: Could not init hmacmd5\n", __func__);
4461     - goto setup_ntlmv2_rsp_ret;
4462     + goto unlock;
4463     }
4464    
4465     rc = crypto_shash_update(&ses->server->secmech.sdeschmacmd5->shash,
4466     @@ -771,7 +773,7 @@ setup_ntlmv2_rsp(struct cifs_ses *ses, const struct nls_table *nls_cp)
4467     CIFS_HMAC_MD5_HASH_SIZE);
4468     if (rc) {
4469     cifs_dbg(VFS, "%s: Could not update with response\n", __func__);
4470     - goto setup_ntlmv2_rsp_ret;
4471     + goto unlock;
4472     }
4473    
4474     rc = crypto_shash_final(&ses->server->secmech.sdeschmacmd5->shash,
4475     @@ -779,6 +781,8 @@ setup_ntlmv2_rsp(struct cifs_ses *ses, const struct nls_table *nls_cp)
4476     if (rc)
4477     cifs_dbg(VFS, "%s: Could not generate md5 hash\n", __func__);
4478    
4479     +unlock:
4480     + mutex_unlock(&ses->server->srv_mutex);
4481     setup_ntlmv2_rsp_ret:
4482     kfree(tiblob);
4483    
4484     diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c
4485     index cbc0f4bca0c0..450578097fb7 100644
4486     --- a/fs/cifs/cifsfs.c
4487     +++ b/fs/cifs/cifsfs.c
4488     @@ -686,6 +686,14 @@ cifs_do_mount(struct file_system_type *fs_type,
4489     goto out_cifs_sb;
4490     }
4491    
4492     + if (volume_info->prepath) {
4493     + cifs_sb->prepath = kstrdup(volume_info->prepath, GFP_KERNEL);
4494     + if (cifs_sb->prepath == NULL) {
4495     + root = ERR_PTR(-ENOMEM);
4496     + goto out_cifs_sb;
4497     + }
4498     + }
4499     +
4500     cifs_setup_cifs_sb(volume_info, cifs_sb);
4501    
4502     rc = cifs_mount(cifs_sb, volume_info);
4503     @@ -724,7 +732,11 @@ cifs_do_mount(struct file_system_type *fs_type,
4504     sb->s_flags |= MS_ACTIVE;
4505     }
4506    
4507     - root = cifs_get_root(volume_info, sb);
4508     + if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_USE_PREFIX_PATH)
4509     + root = dget(sb->s_root);
4510     + else
4511     + root = cifs_get_root(volume_info, sb);
4512     +
4513     if (IS_ERR(root))
4514     goto out_super;
4515    
4516     diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
4517     index 5481a6eb9a95..61c3a5ab8637 100644
4518     --- a/fs/cifs/connect.c
4519     +++ b/fs/cifs/connect.c
4520     @@ -3517,6 +3517,44 @@ cifs_get_volume_info(char *mount_data, const char *devname)
4521     return volume_info;
4522     }
4523    
4524     +static int
4525     +cifs_are_all_path_components_accessible(struct TCP_Server_Info *server,
4526     + unsigned int xid,
4527     + struct cifs_tcon *tcon,
4528     + struct cifs_sb_info *cifs_sb,
4529     + char *full_path)
4530     +{
4531     + int rc;
4532     + char *s;
4533     + char sep, tmp;
4534     +
4535     + sep = CIFS_DIR_SEP(cifs_sb);
4536     + s = full_path;
4537     +
4538     + rc = server->ops->is_path_accessible(xid, tcon, cifs_sb, "");
4539     + while (rc == 0) {
4540     + /* skip separators */
4541     + while (*s == sep)
4542     + s++;
4543     + if (!*s)
4544     + break;
4545     + /* next separator */
4546     + while (*s && *s != sep)
4547     + s++;
4548     +
4549     + /*
4550     + * temporarily null-terminate the path at the end of
4551     + * the current component
4552     + */
4553     + tmp = *s;
4554     + *s = 0;
4555     + rc = server->ops->is_path_accessible(xid, tcon, cifs_sb,
4556     + full_path);
4557     + *s = tmp;
4558     + }
4559     + return rc;
4560     +}
4561     +
4562     int
4563     cifs_mount(struct cifs_sb_info *cifs_sb, struct smb_vol *volume_info)
4564     {
4565     @@ -3654,6 +3692,16 @@ remote_path_check:
4566     kfree(full_path);
4567     goto mount_fail_check;
4568     }
4569     +
4570     + rc = cifs_are_all_path_components_accessible(server,
4571     + xid, tcon, cifs_sb,
4572     + full_path);
4573     + if (rc != 0) {
4574     + cifs_dbg(VFS, "cannot query dirs between root and final path, "
4575     + "enabling CIFS_MOUNT_USE_PREFIX_PATH\n");
4576     + cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_USE_PREFIX_PATH;
4577     + rc = 0;
4578     + }
4579     kfree(full_path);
4580     }
4581    
4582     @@ -3923,6 +3971,7 @@ cifs_umount(struct cifs_sb_info *cifs_sb)
4583    
4584     bdi_destroy(&cifs_sb->bdi);
4585     kfree(cifs_sb->mountdata);
4586     + kfree(cifs_sb->prepath);
4587     call_rcu(&cifs_sb->rcu, delayed_free);
4588     }
4589    
4590     diff --git a/fs/cifs/dir.c b/fs/cifs/dir.c
4591     index c3eb998a99bd..26a3b389a265 100644
4592     --- a/fs/cifs/dir.c
4593     +++ b/fs/cifs/dir.c
4594     @@ -84,6 +84,7 @@ build_path_from_dentry(struct dentry *direntry)
4595     struct dentry *temp;
4596     int namelen;
4597     int dfsplen;
4598     + int pplen = 0;
4599     char *full_path;
4600     char dirsep;
4601     struct cifs_sb_info *cifs_sb = CIFS_SB(direntry->d_sb);
4602     @@ -95,8 +96,12 @@ build_path_from_dentry(struct dentry *direntry)
4603     dfsplen = strnlen(tcon->treeName, MAX_TREE_SIZE + 1);
4604     else
4605     dfsplen = 0;
4606     +
4607     + if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_USE_PREFIX_PATH)
4608     + pplen = cifs_sb->prepath ? strlen(cifs_sb->prepath) + 1 : 0;
4609     +
4610     cifs_bp_rename_retry:
4611     - namelen = dfsplen;
4612     + namelen = dfsplen + pplen;
4613     seq = read_seqbegin(&rename_lock);
4614     rcu_read_lock();
4615     for (temp = direntry; !IS_ROOT(temp);) {
4616     @@ -137,7 +142,7 @@ cifs_bp_rename_retry:
4617     }
4618     }
4619     rcu_read_unlock();
4620     - if (namelen != dfsplen || read_seqretry(&rename_lock, seq)) {
4621     + if (namelen != dfsplen + pplen || read_seqretry(&rename_lock, seq)) {
4622     cifs_dbg(FYI, "did not end path lookup where expected. namelen=%ddfsplen=%d\n",
4623     namelen, dfsplen);
4624     /* presumably this is only possible if racing with a rename
4625     @@ -153,6 +158,17 @@ cifs_bp_rename_retry:
4626     those safely to '/' if any are found in the middle of the prepath */
4627     /* BB test paths to Windows with '/' in the midst of prepath */
4628    
4629     + if (pplen) {
4630     + int i;
4631     +
4632     + cifs_dbg(FYI, "using cifs_sb prepath <%s>\n", cifs_sb->prepath);
4633     + memcpy(full_path+dfsplen+1, cifs_sb->prepath, pplen-1);
4634     + full_path[dfsplen] = '\\';
4635     + for (i = 0; i < pplen-1; i++)
4636     + if (full_path[dfsplen+1+i] == '/')
4637     + full_path[dfsplen+1+i] = CIFS_DIR_SEP(cifs_sb);
4638     + }
4639     +
4640     if (dfsplen) {
4641     strncpy(full_path, tcon->treeName, dfsplen);
4642     if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_POSIX_PATHS) {
4643     @@ -229,6 +245,13 @@ cifs_do_create(struct inode *inode, struct dentry *direntry, unsigned int xid,
4644     goto cifs_create_get_file_info;
4645     }
4646    
4647     + if (S_ISDIR(newinode->i_mode)) {
4648     + CIFSSMBClose(xid, tcon, fid->netfid);
4649     + iput(newinode);
4650     + rc = -EISDIR;
4651     + goto out;
4652     + }
4653     +
4654     if (!S_ISREG(newinode->i_mode)) {
4655     /*
4656     * The server may allow us to open things like
4657     @@ -399,10 +422,14 @@ cifs_create_set_dentry:
4658     if (rc != 0) {
4659     cifs_dbg(FYI, "Create worked, get_inode_info failed rc = %d\n",
4660     rc);
4661     - if (server->ops->close)
4662     - server->ops->close(xid, tcon, fid);
4663     - goto out;
4664     + goto out_err;
4665     }
4666     +
4667     + if (S_ISDIR(newinode->i_mode)) {
4668     + rc = -EISDIR;
4669     + goto out_err;
4670     + }
4671     +
4672     d_drop(direntry);
4673     d_add(direntry, newinode);
4674    
4675     @@ -410,6 +437,13 @@ out:
4676     kfree(buf);
4677     kfree(full_path);
4678     return rc;
4679     +
4680     +out_err:
4681     + if (server->ops->close)
4682     + server->ops->close(xid, tcon, fid);
4683     + if (newinode)
4684     + iput(newinode);
4685     + goto out;
4686     }
4687    
4688     int
4689     diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c
4690     index a329f5ba35aa..9cdeb0293267 100644
4691     --- a/fs/cifs/inode.c
4692     +++ b/fs/cifs/inode.c
4693     @@ -982,10 +982,26 @@ struct inode *cifs_root_iget(struct super_block *sb)
4694     struct inode *inode = NULL;
4695     long rc;
4696     struct cifs_tcon *tcon = cifs_sb_master_tcon(cifs_sb);
4697     + char *path = NULL;
4698     + int len;
4699     +
4700     + if ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_USE_PREFIX_PATH)
4701     + && cifs_sb->prepath) {
4702     + len = strlen(cifs_sb->prepath);
4703     + path = kzalloc(len + 2 /* leading sep + null */, GFP_KERNEL);
4704     + if (path == NULL)
4705     + return ERR_PTR(-ENOMEM);
4706     + path[0] = '/';
4707     + memcpy(path+1, cifs_sb->prepath, len);
4708     + } else {
4709     + path = kstrdup("", GFP_KERNEL);
4710     + if (path == NULL)
4711     + return ERR_PTR(-ENOMEM);
4712     + }
4713    
4714     xid = get_xid();
4715     if (tcon->unix_ext) {
4716     - rc = cifs_get_inode_info_unix(&inode, "", sb, xid);
4717     + rc = cifs_get_inode_info_unix(&inode, path, sb, xid);
4718     /* some servers mistakenly claim POSIX support */
4719     if (rc != -EOPNOTSUPP)
4720     goto iget_no_retry;
4721     @@ -993,7 +1009,8 @@ struct inode *cifs_root_iget(struct super_block *sb)
4722     tcon->unix_ext = false;
4723     }
4724    
4725     - rc = cifs_get_inode_info(&inode, "", NULL, sb, xid, NULL);
4726     + convert_delimiter(path, CIFS_DIR_SEP(cifs_sb));
4727     + rc = cifs_get_inode_info(&inode, path, NULL, sb, xid, NULL);
4728    
4729     iget_no_retry:
4730     if (!inode) {
4731     @@ -1022,6 +1039,7 @@ iget_no_retry:
4732     }
4733    
4734     out:
4735     + kfree(path);
4736     /* can not call macro free_xid here since in a void func
4737     * TODO: This is no longer true
4738     */
4739     diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c
4740     index 53ccdde6ff18..dd8543caa56e 100644
4741     --- a/fs/cifs/smb2ops.c
4742     +++ b/fs/cifs/smb2ops.c
4743     @@ -1039,6 +1039,9 @@ smb2_new_lease_key(struct cifs_fid *fid)
4744     get_random_bytes(fid->lease_key, SMB2_LEASE_KEY_SIZE);
4745     }
4746    
4747     +#define SMB2_SYMLINK_STRUCT_SIZE \
4748     + (sizeof(struct smb2_err_rsp) - 1 + sizeof(struct smb2_symlink_err_rsp))
4749     +
4750     static int
4751     smb2_query_symlink(const unsigned int xid, struct cifs_tcon *tcon,
4752     const char *full_path, char **target_path,
4753     @@ -1051,7 +1054,10 @@ smb2_query_symlink(const unsigned int xid, struct cifs_tcon *tcon,
4754     struct cifs_fid fid;
4755     struct smb2_err_rsp *err_buf = NULL;
4756     struct smb2_symlink_err_rsp *symlink;
4757     - unsigned int sub_len, sub_offset;
4758     + unsigned int sub_len;
4759     + unsigned int sub_offset;
4760     + unsigned int print_len;
4761     + unsigned int print_offset;
4762    
4763     cifs_dbg(FYI, "%s: path: %s\n", __func__, full_path);
4764    
4765     @@ -1072,11 +1078,33 @@ smb2_query_symlink(const unsigned int xid, struct cifs_tcon *tcon,
4766     kfree(utf16_path);
4767     return -ENOENT;
4768     }
4769     +
4770     + if (le32_to_cpu(err_buf->ByteCount) < sizeof(struct smb2_symlink_err_rsp) ||
4771     + get_rfc1002_length(err_buf) + 4 < SMB2_SYMLINK_STRUCT_SIZE) {
4772     + kfree(utf16_path);
4773     + return -ENOENT;
4774     + }
4775     +
4776     /* open must fail on symlink - reset rc */
4777     rc = 0;
4778     symlink = (struct smb2_symlink_err_rsp *)err_buf->ErrorData;
4779     sub_len = le16_to_cpu(symlink->SubstituteNameLength);
4780     sub_offset = le16_to_cpu(symlink->SubstituteNameOffset);
4781     + print_len = le16_to_cpu(symlink->PrintNameLength);
4782     + print_offset = le16_to_cpu(symlink->PrintNameOffset);
4783     +
4784     + if (get_rfc1002_length(err_buf) + 4 <
4785     + SMB2_SYMLINK_STRUCT_SIZE + sub_offset + sub_len) {
4786     + kfree(utf16_path);
4787     + return -ENOENT;
4788     + }
4789     +
4790     + if (get_rfc1002_length(err_buf) + 4 <
4791     + SMB2_SYMLINK_STRUCT_SIZE + print_offset + print_len) {
4792     + kfree(utf16_path);
4793     + return -ENOENT;
4794     + }
4795     +
4796     *target_path = cifs_strndup_from_utf16(
4797     (char *)symlink->PathBuffer + sub_offset,
4798     sub_len, true, cifs_sb->local_nls);
4799     diff --git a/fs/jbd2/commit.c b/fs/jbd2/commit.c
4800     index 36345fefa3ff..2d964ce45606 100644
4801     --- a/fs/jbd2/commit.c
4802     +++ b/fs/jbd2/commit.c
4803     @@ -124,7 +124,7 @@ static int journal_submit_commit_record(journal_t *journal,
4804     struct commit_header *tmp;
4805     struct buffer_head *bh;
4806     int ret;
4807     - struct timespec now = current_kernel_time();
4808     + struct timespec64 now = current_kernel_time64();
4809    
4810     *cbh = NULL;
4811    
4812     diff --git a/fs/nfs/write.c b/fs/nfs/write.c
4813     index 7b9316406930..7a9b6e347249 100644
4814     --- a/fs/nfs/write.c
4815     +++ b/fs/nfs/write.c
4816     @@ -1261,6 +1261,9 @@ int nfs_updatepage(struct file *file, struct page *page,
4817     dprintk("NFS: nfs_updatepage(%pD2 %d@%lld)\n",
4818     file, count, (long long)(page_file_offset(page) + offset));
4819    
4820     + if (!count)
4821     + goto out;
4822     +
4823     if (nfs_can_extend_write(file, page, inode)) {
4824     count = max(count + offset, nfs_page_length(page));
4825     offset = 0;
4826     @@ -1271,7 +1274,7 @@ int nfs_updatepage(struct file *file, struct page *page,
4827     nfs_set_pageerror(page);
4828     else
4829     __set_page_dirty_nobuffers(page);
4830     -
4831     +out:
4832     dprintk("NFS: nfs_updatepage returns %d (isize %lld)\n",
4833     status, (long long)i_size_read(inode));
4834     return status;
4835     diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
4836     index ed2f64ca49de..f7ea624780a7 100644
4837     --- a/fs/nfsd/nfs4state.c
4838     +++ b/fs/nfsd/nfs4state.c
4839     @@ -4882,6 +4882,32 @@ nfsd4_test_stateid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
4840     return nfs_ok;
4841     }
4842    
4843     +static __be32
4844     +nfsd4_free_lock_stateid(stateid_t *stateid, struct nfs4_stid *s)
4845     +{
4846     + struct nfs4_ol_stateid *stp = openlockstateid(s);
4847     + __be32 ret;
4848     +
4849     + mutex_lock(&stp->st_mutex);
4850     +
4851     + ret = check_stateid_generation(stateid, &s->sc_stateid, 1);
4852     + if (ret)
4853     + goto out;
4854     +
4855     + ret = nfserr_locks_held;
4856     + if (check_for_locks(stp->st_stid.sc_file,
4857     + lockowner(stp->st_stateowner)))
4858     + goto out;
4859     +
4860     + release_lock_stateid(stp);
4861     + ret = nfs_ok;
4862     +
4863     +out:
4864     + mutex_unlock(&stp->st_mutex);
4865     + nfs4_put_stid(s);
4866     + return ret;
4867     +}
4868     +
4869     __be32
4870     nfsd4_free_stateid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
4871     struct nfsd4_free_stateid *free_stateid)
4872     @@ -4889,7 +4915,6 @@ nfsd4_free_stateid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
4873     stateid_t *stateid = &free_stateid->fr_stateid;
4874     struct nfs4_stid *s;
4875     struct nfs4_delegation *dp;
4876     - struct nfs4_ol_stateid *stp;
4877     struct nfs4_client *cl = cstate->session->se_client;
4878     __be32 ret = nfserr_bad_stateid;
4879    
4880     @@ -4908,18 +4933,9 @@ nfsd4_free_stateid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
4881     ret = nfserr_locks_held;
4882     break;
4883     case NFS4_LOCK_STID:
4884     - ret = check_stateid_generation(stateid, &s->sc_stateid, 1);
4885     - if (ret)
4886     - break;
4887     - stp = openlockstateid(s);
4888     - ret = nfserr_locks_held;
4889     - if (check_for_locks(stp->st_stid.sc_file,
4890     - lockowner(stp->st_stateowner)))
4891     - break;
4892     - WARN_ON(!unhash_lock_stateid(stp));
4893     + atomic_inc(&s->sc_count);
4894     spin_unlock(&cl->cl_lock);
4895     - nfs4_put_stid(s);
4896     - ret = nfs_ok;
4897     + ret = nfsd4_free_lock_stateid(stateid, s);
4898     goto out;
4899     case NFS4_REVOKED_DELEG_STID:
4900     dp = delegstateid(s);
4901     @@ -5486,7 +5502,7 @@ static __be32
4902     lookup_or_create_lock_state(struct nfsd4_compound_state *cstate,
4903     struct nfs4_ol_stateid *ost,
4904     struct nfsd4_lock *lock,
4905     - struct nfs4_ol_stateid **lst, bool *new)
4906     + struct nfs4_ol_stateid **plst, bool *new)
4907     {
4908     __be32 status;
4909     struct nfs4_file *fi = ost->st_stid.sc_file;
4910     @@ -5494,7 +5510,9 @@ lookup_or_create_lock_state(struct nfsd4_compound_state *cstate,
4911     struct nfs4_client *cl = oo->oo_owner.so_client;
4912     struct inode *inode = d_inode(cstate->current_fh.fh_dentry);
4913     struct nfs4_lockowner *lo;
4914     + struct nfs4_ol_stateid *lst;
4915     unsigned int strhashval;
4916     + bool hashed;
4917    
4918     lo = find_lockowner_str(cl, &lock->lk_new_owner);
4919     if (!lo) {
4920     @@ -5510,12 +5528,27 @@ lookup_or_create_lock_state(struct nfsd4_compound_state *cstate,
4921     goto out;
4922     }
4923    
4924     - *lst = find_or_create_lock_stateid(lo, fi, inode, ost, new);
4925     - if (*lst == NULL) {
4926     +retry:
4927     + lst = find_or_create_lock_stateid(lo, fi, inode, ost, new);
4928     + if (lst == NULL) {
4929     status = nfserr_jukebox;
4930     goto out;
4931     }
4932     +
4933     + mutex_lock(&lst->st_mutex);
4934     +
4935     + /* See if it's still hashed to avoid race with FREE_STATEID */
4936     + spin_lock(&cl->cl_lock);
4937     + hashed = !list_empty(&lst->st_perfile);
4938     + spin_unlock(&cl->cl_lock);
4939     +
4940     + if (!hashed) {
4941     + mutex_unlock(&lst->st_mutex);
4942     + nfs4_put_stid(&lst->st_stid);
4943     + goto retry;
4944     + }
4945     status = nfs_ok;
4946     + *plst = lst;
4947     out:
4948     nfs4_put_stateowner(&lo->lo_owner);
4949     return status;
4950     @@ -5582,8 +5615,6 @@ nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
4951     goto out;
4952     status = lookup_or_create_lock_state(cstate, open_stp, lock,
4953     &lock_stp, &new);
4954     - if (status == nfs_ok)
4955     - mutex_lock(&lock_stp->st_mutex);
4956     } else {
4957     status = nfs4_preprocess_seqid_op(cstate,
4958     lock->lk_old_lock_seqid,
4959     diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c
4960     index a1acc6004a91..70a7bbe199d0 100644
4961     --- a/fs/overlayfs/super.c
4962     +++ b/fs/overlayfs/super.c
4963     @@ -376,7 +376,8 @@ static struct ovl_entry *ovl_alloc_entry(unsigned int numlower)
4964     static bool ovl_dentry_remote(struct dentry *dentry)
4965     {
4966     return dentry->d_flags &
4967     - (DCACHE_OP_REVALIDATE | DCACHE_OP_WEAK_REVALIDATE);
4968     + (DCACHE_OP_REVALIDATE | DCACHE_OP_WEAK_REVALIDATE |
4969     + DCACHE_OP_REAL);
4970     }
4971    
4972     static bool ovl_dentry_weird(struct dentry *dentry)
4973     diff --git a/include/linux/backing-dev-defs.h b/include/linux/backing-dev-defs.h
4974     index 1b4d69f68c33..140c29635069 100644
4975     --- a/include/linux/backing-dev-defs.h
4976     +++ b/include/linux/backing-dev-defs.h
4977     @@ -163,6 +163,7 @@ struct backing_dev_info {
4978     wait_queue_head_t wb_waitq;
4979    
4980     struct device *dev;
4981     + struct device *owner;
4982    
4983     struct timer_list laptop_mode_wb_timer;
4984    
4985     diff --git a/include/linux/backing-dev.h b/include/linux/backing-dev.h
4986     index c82794f20110..89d3de3e096b 100644
4987     --- a/include/linux/backing-dev.h
4988     +++ b/include/linux/backing-dev.h
4989     @@ -24,6 +24,7 @@ __printf(3, 4)
4990     int bdi_register(struct backing_dev_info *bdi, struct device *parent,
4991     const char *fmt, ...);
4992     int bdi_register_dev(struct backing_dev_info *bdi, dev_t dev);
4993     +int bdi_register_owner(struct backing_dev_info *bdi, struct device *owner);
4994     void bdi_unregister(struct backing_dev_info *bdi);
4995    
4996     int __must_check bdi_setup_and_register(struct backing_dev_info *, char *);
4997     diff --git a/include/linux/bio.h b/include/linux/bio.h
4998     index fbe47bc700bd..42e4e3cbb001 100644
4999     --- a/include/linux/bio.h
5000     +++ b/include/linux/bio.h
5001     @@ -527,11 +527,14 @@ extern unsigned int bvec_nr_vecs(unsigned short idx);
5002     int bio_associate_blkcg(struct bio *bio, struct cgroup_subsys_state *blkcg_css);
5003     int bio_associate_current(struct bio *bio);
5004     void bio_disassociate_task(struct bio *bio);
5005     +void bio_clone_blkcg_association(struct bio *dst, struct bio *src);
5006     #else /* CONFIG_BLK_CGROUP */
5007     static inline int bio_associate_blkcg(struct bio *bio,
5008     struct cgroup_subsys_state *blkcg_css) { return 0; }
5009     static inline int bio_associate_current(struct bio *bio) { return -ENOENT; }
5010     static inline void bio_disassociate_task(struct bio *bio) { }
5011     +static inline void bio_clone_blkcg_association(struct bio *dst,
5012     + struct bio *src) { }
5013     #endif /* CONFIG_BLK_CGROUP */
5014    
5015     #ifdef CONFIG_HIGHMEM
5016     diff --git a/include/linux/mlx5/qp.h b/include/linux/mlx5/qp.h
5017     index f079fb1a31f7..a8786d27ab81 100644
5018     --- a/include/linux/mlx5/qp.h
5019     +++ b/include/linux/mlx5/qp.h
5020     @@ -160,6 +160,7 @@ enum {
5021     enum {
5022     MLX5_FENCE_MODE_NONE = 0 << 5,
5023     MLX5_FENCE_MODE_INITIATOR_SMALL = 1 << 5,
5024     + MLX5_FENCE_MODE_FENCE = 2 << 5,
5025     MLX5_FENCE_MODE_STRONG_ORDERING = 3 << 5,
5026     MLX5_FENCE_MODE_SMALL_AND_FENCE = 4 << 5,
5027     };
5028     @@ -534,9 +535,9 @@ struct mlx5_destroy_qp_mbox_out {
5029     struct mlx5_modify_qp_mbox_in {
5030     struct mlx5_inbox_hdr hdr;
5031     __be32 qpn;
5032     - u8 rsvd1[4];
5033     - __be32 optparam;
5034     u8 rsvd0[4];
5035     + __be32 optparam;
5036     + u8 rsvd1[4];
5037     struct mlx5_qp_context ctx;
5038     };
5039    
5040     diff --git a/include/target/target_core_backend.h b/include/target/target_core_backend.h
5041     index 28ee5c2e6bcd..711322a8ee35 100644
5042     --- a/include/target/target_core_backend.h
5043     +++ b/include/target/target_core_backend.h
5044     @@ -96,6 +96,6 @@ sense_reason_t passthrough_parse_cdb(struct se_cmd *cmd,
5045     bool target_sense_desc_format(struct se_device *dev);
5046     sector_t target_to_linux_sector(struct se_device *dev, sector_t lb);
5047     bool target_configure_unmap_from_queue(struct se_dev_attrib *attrib,
5048     - struct request_queue *q, int block_size);
5049     + struct request_queue *q);
5050    
5051     #endif /* TARGET_CORE_BACKEND_H */
5052     diff --git a/include/target/target_core_base.h b/include/target/target_core_base.h
5053     index 689f4d207122..59081c73b296 100644
5054     --- a/include/target/target_core_base.h
5055     +++ b/include/target/target_core_base.h
5056     @@ -139,6 +139,7 @@ enum se_cmd_flags_table {
5057     SCF_COMPARE_AND_WRITE_POST = 0x00100000,
5058     SCF_PASSTHROUGH_PROT_SG_TO_MEM_NOALLOC = 0x00200000,
5059     SCF_ACK_KREF = 0x00400000,
5060     + SCF_TASK_ATTR_SET = 0x01000000,
5061     };
5062    
5063     /* struct se_dev_entry->lun_flags and struct se_lun->lun_access */
5064     diff --git a/include/target/target_core_fabric.h b/include/target/target_core_fabric.h
5065     index 7fb2557a760e..ce9ea736f1d7 100644
5066     --- a/include/target/target_core_fabric.h
5067     +++ b/include/target/target_core_fabric.h
5068     @@ -163,7 +163,6 @@ int core_tmr_alloc_req(struct se_cmd *, void *, u8, gfp_t);
5069     void core_tmr_release_req(struct se_tmr_req *);
5070     int transport_generic_handle_tmr(struct se_cmd *);
5071     void transport_generic_request_failure(struct se_cmd *, sense_reason_t);
5072     -void __target_execute_cmd(struct se_cmd *);
5073     int transport_lookup_tmr_lun(struct se_cmd *, u64);
5074     void core_allocate_nexus_loss_ua(struct se_node_acl *acl);
5075    
5076     diff --git a/include/trace/events/sunrpc.h b/include/trace/events/sunrpc.h
5077     index 003dca933803..5664ca07c9c7 100644
5078     --- a/include/trace/events/sunrpc.h
5079     +++ b/include/trace/events/sunrpc.h
5080     @@ -529,20 +529,27 @@ TRACE_EVENT(svc_xprt_do_enqueue,
5081    
5082     TP_STRUCT__entry(
5083     __field(struct svc_xprt *, xprt)
5084     - __field_struct(struct sockaddr_storage, ss)
5085     __field(int, pid)
5086     __field(unsigned long, flags)
5087     + __dynamic_array(unsigned char, addr, xprt != NULL ?
5088     + xprt->xpt_remotelen : 0)
5089     ),
5090    
5091     TP_fast_assign(
5092     __entry->xprt = xprt;
5093     - xprt ? memcpy(&__entry->ss, &xprt->xpt_remote, sizeof(__entry->ss)) : memset(&__entry->ss, 0, sizeof(__entry->ss));
5094     __entry->pid = rqst? rqst->rq_task->pid : 0;
5095     - __entry->flags = xprt ? xprt->xpt_flags : 0;
5096     + if (xprt) {
5097     + memcpy(__get_dynamic_array(addr),
5098     + &xprt->xpt_remote,
5099     + xprt->xpt_remotelen);
5100     + __entry->flags = xprt->xpt_flags;
5101     + } else
5102     + __entry->flags = 0;
5103     ),
5104    
5105     TP_printk("xprt=0x%p addr=%pIScp pid=%d flags=%s", __entry->xprt,
5106     - (struct sockaddr *)&__entry->ss,
5107     + __get_dynamic_array_len(addr) != 0 ?
5108     + (struct sockaddr *)__get_dynamic_array(addr) : NULL,
5109     __entry->pid, show_svc_xprt_flags(__entry->flags))
5110     );
5111    
5112     @@ -553,18 +560,25 @@ TRACE_EVENT(svc_xprt_dequeue,
5113    
5114     TP_STRUCT__entry(
5115     __field(struct svc_xprt *, xprt)
5116     - __field_struct(struct sockaddr_storage, ss)
5117     __field(unsigned long, flags)
5118     + __dynamic_array(unsigned char, addr, xprt != NULL ?
5119     + xprt->xpt_remotelen : 0)
5120     ),
5121    
5122     TP_fast_assign(
5123     - __entry->xprt = xprt,
5124     - xprt ? memcpy(&__entry->ss, &xprt->xpt_remote, sizeof(__entry->ss)) : memset(&__entry->ss, 0, sizeof(__entry->ss));
5125     - __entry->flags = xprt ? xprt->xpt_flags : 0;
5126     + __entry->xprt = xprt;
5127     + if (xprt) {
5128     + memcpy(__get_dynamic_array(addr),
5129     + &xprt->xpt_remote,
5130     + xprt->xpt_remotelen);
5131     + __entry->flags = xprt->xpt_flags;
5132     + } else
5133     + __entry->flags = 0;
5134     ),
5135    
5136     TP_printk("xprt=0x%p addr=%pIScp flags=%s", __entry->xprt,
5137     - (struct sockaddr *)&__entry->ss,
5138     + __get_dynamic_array_len(addr) != 0 ?
5139     + (struct sockaddr *)__get_dynamic_array(addr) : NULL,
5140     show_svc_xprt_flags(__entry->flags))
5141     );
5142    
5143     @@ -592,19 +606,26 @@ TRACE_EVENT(svc_handle_xprt,
5144     TP_STRUCT__entry(
5145     __field(struct svc_xprt *, xprt)
5146     __field(int, len)
5147     - __field_struct(struct sockaddr_storage, ss)
5148     __field(unsigned long, flags)
5149     + __dynamic_array(unsigned char, addr, xprt != NULL ?
5150     + xprt->xpt_remotelen : 0)
5151     ),
5152    
5153     TP_fast_assign(
5154     __entry->xprt = xprt;
5155     - xprt ? memcpy(&__entry->ss, &xprt->xpt_remote, sizeof(__entry->ss)) : memset(&__entry->ss, 0, sizeof(__entry->ss));
5156     __entry->len = len;
5157     - __entry->flags = xprt ? xprt->xpt_flags : 0;
5158     + if (xprt) {
5159     + memcpy(__get_dynamic_array(addr),
5160     + &xprt->xpt_remote,
5161     + xprt->xpt_remotelen);
5162     + __entry->flags = xprt->xpt_flags;
5163     + } else
5164     + __entry->flags = 0;
5165     ),
5166    
5167     TP_printk("xprt=0x%p addr=%pIScp len=%d flags=%s", __entry->xprt,
5168     - (struct sockaddr *)&__entry->ss,
5169     + __get_dynamic_array_len(addr) != 0 ?
5170     + (struct sockaddr *)__get_dynamic_array(addr) : NULL,
5171     __entry->len, show_svc_xprt_flags(__entry->flags))
5172     );
5173     #endif /* _TRACE_SUNRPC_H */
5174     diff --git a/kernel/auditsc.c b/kernel/auditsc.c
5175     index b86cc04959de..48f45987dc6c 100644
5176     --- a/kernel/auditsc.c
5177     +++ b/kernel/auditsc.c
5178     @@ -73,6 +73,7 @@
5179     #include <linux/compat.h>
5180     #include <linux/ctype.h>
5181     #include <linux/string.h>
5182     +#include <linux/uaccess.h>
5183     #include <uapi/linux/limits.h>
5184    
5185     #include "audit.h"
5186     @@ -82,7 +83,8 @@
5187     #define AUDITSC_SUCCESS 1
5188     #define AUDITSC_FAILURE 2
5189    
5190     -/* no execve audit message should be longer than this (userspace limits) */
5191     +/* no execve audit message should be longer than this (userspace limits),
5192     + * see the note near the top of audit_log_execve_info() about this value */
5193     #define MAX_EXECVE_AUDIT_LEN 7500
5194    
5195     /* max length to print of cmdline/proctitle value during audit */
5196     @@ -988,184 +990,178 @@ static int audit_log_pid_context(struct audit_context *context, pid_t pid,
5197     return rc;
5198     }
5199    
5200     -/*
5201     - * to_send and len_sent accounting are very loose estimates. We aren't
5202     - * really worried about a hard cap to MAX_EXECVE_AUDIT_LEN so much as being
5203     - * within about 500 bytes (next page boundary)
5204     - *
5205     - * why snprintf? an int is up to 12 digits long. if we just assumed when
5206     - * logging that a[%d]= was going to be 16 characters long we would be wasting
5207     - * space in every audit message. In one 7500 byte message we can log up to
5208     - * about 1000 min size arguments. That comes down to about 50% waste of space
5209     - * if we didn't do the snprintf to find out how long arg_num_len was.
5210     - */
5211     -static int audit_log_single_execve_arg(struct audit_context *context,
5212     - struct audit_buffer **ab,
5213     - int arg_num,
5214     - size_t *len_sent,
5215     - const char __user *p,
5216     - char *buf)
5217     +static void audit_log_execve_info(struct audit_context *context,
5218     + struct audit_buffer **ab)
5219     {
5220     - char arg_num_len_buf[12];
5221     - const char __user *tmp_p = p;
5222     - /* how many digits are in arg_num? 5 is the length of ' a=""' */
5223     - size_t arg_num_len = snprintf(arg_num_len_buf, 12, "%d", arg_num) + 5;
5224     - size_t len, len_left, to_send;
5225     - size_t max_execve_audit_len = MAX_EXECVE_AUDIT_LEN;
5226     - unsigned int i, has_cntl = 0, too_long = 0;
5227     - int ret;
5228     -
5229     - /* strnlen_user includes the null we don't want to send */
5230     - len_left = len = strnlen_user(p, MAX_ARG_STRLEN) - 1;
5231     -
5232     - /*
5233     - * We just created this mm, if we can't find the strings
5234     - * we just copied into it something is _very_ wrong. Similar
5235     - * for strings that are too long, we should not have created
5236     - * any.
5237     - */
5238     - if (WARN_ON_ONCE(len < 0 || len > MAX_ARG_STRLEN - 1)) {
5239     - send_sig(SIGKILL, current, 0);
5240     - return -1;
5241     + long len_max;
5242     + long len_rem;
5243     + long len_full;
5244     + long len_buf;
5245     + long len_abuf;
5246     + long len_tmp;
5247     + bool require_data;
5248     + bool encode;
5249     + unsigned int iter;
5250     + unsigned int arg;
5251     + char *buf_head;
5252     + char *buf;
5253     + const char __user *p = (const char __user *)current->mm->arg_start;
5254     +
5255     + /* NOTE: this buffer needs to be large enough to hold all the non-arg
5256     + * data we put in the audit record for this argument (see the
5257     + * code below) ... at this point in time 96 is plenty */
5258     + char abuf[96];
5259     +
5260     + /* NOTE: we set MAX_EXECVE_AUDIT_LEN to a rather arbitrary limit, the
5261     + * current value of 7500 is not as important as the fact that it
5262     + * is less than 8k, a setting of 7500 gives us plenty of wiggle
5263     + * room if we go over a little bit in the logging below */
5264     + WARN_ON_ONCE(MAX_EXECVE_AUDIT_LEN > 7500);
5265     + len_max = MAX_EXECVE_AUDIT_LEN;
5266     +
5267     + /* scratch buffer to hold the userspace args */
5268     + buf_head = kmalloc(MAX_EXECVE_AUDIT_LEN + 1, GFP_KERNEL);
5269     + if (!buf_head) {
5270     + audit_panic("out of memory for argv string");
5271     + return;
5272     }
5273     + buf = buf_head;
5274    
5275     - /* walk the whole argument looking for non-ascii chars */
5276     + audit_log_format(*ab, "argc=%d", context->execve.argc);
5277     +
5278     + len_rem = len_max;
5279     + len_buf = 0;
5280     + len_full = 0;
5281     + require_data = true;
5282     + encode = false;
5283     + iter = 0;
5284     + arg = 0;
5285     do {
5286     - if (len_left > MAX_EXECVE_AUDIT_LEN)
5287     - to_send = MAX_EXECVE_AUDIT_LEN;
5288     - else
5289     - to_send = len_left;
5290     - ret = copy_from_user(buf, tmp_p, to_send);
5291     - /*
5292     - * There is no reason for this copy to be short. We just
5293     - * copied them here, and the mm hasn't been exposed to user-
5294     - * space yet.
5295     - */
5296     - if (ret) {
5297     - WARN_ON(1);
5298     - send_sig(SIGKILL, current, 0);
5299     - return -1;
5300     - }
5301     - buf[to_send] = '\0';
5302     - has_cntl = audit_string_contains_control(buf, to_send);
5303     - if (has_cntl) {
5304     - /*
5305     - * hex messages get logged as 2 bytes, so we can only
5306     - * send half as much in each message
5307     - */
5308     - max_execve_audit_len = MAX_EXECVE_AUDIT_LEN / 2;
5309     - break;
5310     - }
5311     - len_left -= to_send;
5312     - tmp_p += to_send;
5313     - } while (len_left > 0);
5314     -
5315     - len_left = len;
5316     -
5317     - if (len > max_execve_audit_len)
5318     - too_long = 1;
5319     -
5320     - /* rewalk the argument actually logging the message */
5321     - for (i = 0; len_left > 0; i++) {
5322     - int room_left;
5323     -
5324     - if (len_left > max_execve_audit_len)
5325     - to_send = max_execve_audit_len;
5326     - else
5327     - to_send = len_left;
5328     -
5329     - /* do we have space left to send this argument in this ab? */
5330     - room_left = MAX_EXECVE_AUDIT_LEN - arg_num_len - *len_sent;
5331     - if (has_cntl)
5332     - room_left -= (to_send * 2);
5333     - else
5334     - room_left -= to_send;
5335     - if (room_left < 0) {
5336     - *len_sent = 0;
5337     - audit_log_end(*ab);
5338     - *ab = audit_log_start(context, GFP_KERNEL, AUDIT_EXECVE);
5339     - if (!*ab)
5340     - return 0;
5341     - }
5342     + /* NOTE: we don't ever want to trust this value for anything
5343     + * serious, but the audit record format insists we
5344     + * provide an argument length for really long arguments,
5345     + * e.g. > MAX_EXECVE_AUDIT_LEN, so we have no choice but
5346     + * to use strncpy_from_user() to obtain this value for
5347     + * recording in the log, although we don't use it
5348     + * anywhere here to avoid a double-fetch problem */
5349     + if (len_full == 0)
5350     + len_full = strnlen_user(p, MAX_ARG_STRLEN) - 1;
5351     +
5352     + /* read more data from userspace */
5353     + if (require_data) {
5354     + /* can we make more room in the buffer? */
5355     + if (buf != buf_head) {
5356     + memmove(buf_head, buf, len_buf);
5357     + buf = buf_head;
5358     + }
5359     +
5360     + /* fetch as much as we can of the argument */
5361     + len_tmp = strncpy_from_user(&buf_head[len_buf], p,
5362     + len_max - len_buf);
5363     + if (len_tmp == -EFAULT) {
5364     + /* unable to copy from userspace */
5365     + send_sig(SIGKILL, current, 0);
5366     + goto out;
5367     + } else if (len_tmp == (len_max - len_buf)) {
5368     + /* buffer is not large enough */
5369     + require_data = true;
5370     + /* NOTE: if we are going to span multiple
5371     + * buffers force the encoding so we stand
5372     + * a chance at a sane len_full value and
5373     + * consistent record encoding */
5374     + encode = true;
5375     + len_full = len_full * 2;
5376     + p += len_tmp;
5377     + } else {
5378     + require_data = false;
5379     + if (!encode)
5380     + encode = audit_string_contains_control(
5381     + buf, len_tmp);
5382     + /* try to use a trusted value for len_full */
5383     + if (len_full < len_max)
5384     + len_full = (encode ?
5385     + len_tmp * 2 : len_tmp);
5386     + p += len_tmp + 1;
5387     + }
5388     + len_buf += len_tmp;
5389     + buf_head[len_buf] = '\0';
5390    
5391     - /*
5392     - * first record needs to say how long the original string was
5393     - * so we can be sure nothing was lost.
5394     - */
5395     - if ((i == 0) && (too_long))
5396     - audit_log_format(*ab, " a%d_len=%zu", arg_num,
5397     - has_cntl ? 2*len : len);
5398     -
5399     - /*
5400     - * normally arguments are small enough to fit and we already
5401     - * filled buf above when we checked for control characters
5402     - * so don't bother with another copy_from_user
5403     - */
5404     - if (len >= max_execve_audit_len)
5405     - ret = copy_from_user(buf, p, to_send);
5406     - else
5407     - ret = 0;
5408     - if (ret) {
5409     - WARN_ON(1);
5410     - send_sig(SIGKILL, current, 0);
5411     - return -1;
5412     + /* length of the buffer in the audit record? */
5413     + len_abuf = (encode ? len_buf * 2 : len_buf + 2);
5414     }
5415     - buf[to_send] = '\0';
5416     -
5417     - /* actually log it */
5418     - audit_log_format(*ab, " a%d", arg_num);
5419     - if (too_long)
5420     - audit_log_format(*ab, "[%d]", i);
5421     - audit_log_format(*ab, "=");
5422     - if (has_cntl)
5423     - audit_log_n_hex(*ab, buf, to_send);
5424     - else
5425     - audit_log_string(*ab, buf);
5426     -
5427     - p += to_send;
5428     - len_left -= to_send;
5429     - *len_sent += arg_num_len;
5430     - if (has_cntl)
5431     - *len_sent += to_send * 2;
5432     - else
5433     - *len_sent += to_send;
5434     - }
5435     - /* include the null we didn't log */
5436     - return len + 1;
5437     -}
5438    
5439     -static void audit_log_execve_info(struct audit_context *context,
5440     - struct audit_buffer **ab)
5441     -{
5442     - int i, len;
5443     - size_t len_sent = 0;
5444     - const char __user *p;
5445     - char *buf;
5446     + /* write as much as we can to the audit log */
5447     + if (len_buf > 0) {
5448     + /* NOTE: some magic numbers here - basically if we
5449     + * can't fit a reasonable amount of data into the
5450     + * existing audit buffer, flush it and start with
5451     + * a new buffer */
5452     + if ((sizeof(abuf) + 8) > len_rem) {
5453     + len_rem = len_max;
5454     + audit_log_end(*ab);
5455     + *ab = audit_log_start(context,
5456     + GFP_KERNEL, AUDIT_EXECVE);
5457     + if (!*ab)
5458     + goto out;
5459     + }
5460    
5461     - p = (const char __user *)current->mm->arg_start;
5462     + /* create the non-arg portion of the arg record */
5463     + len_tmp = 0;
5464     + if (require_data || (iter > 0) ||
5465     + ((len_abuf + sizeof(abuf)) > len_rem)) {
5466     + if (iter == 0) {
5467     + len_tmp += snprintf(&abuf[len_tmp],
5468     + sizeof(abuf) - len_tmp,
5469     + " a%d_len=%lu",
5470     + arg, len_full);
5471     + }
5472     + len_tmp += snprintf(&abuf[len_tmp],
5473     + sizeof(abuf) - len_tmp,
5474     + " a%d[%d]=", arg, iter++);
5475     + } else
5476     + len_tmp += snprintf(&abuf[len_tmp],
5477     + sizeof(abuf) - len_tmp,
5478     + " a%d=", arg);
5479     + WARN_ON(len_tmp >= sizeof(abuf));
5480     + abuf[sizeof(abuf) - 1] = '\0';
5481     +
5482     + /* log the arg in the audit record */
5483     + audit_log_format(*ab, "%s", abuf);
5484     + len_rem -= len_tmp;
5485     + len_tmp = len_buf;
5486     + if (encode) {
5487     + if (len_abuf > len_rem)
5488     + len_tmp = len_rem / 2; /* encoding */
5489     + audit_log_n_hex(*ab, buf, len_tmp);
5490     + len_rem -= len_tmp * 2;
5491     + len_abuf -= len_tmp * 2;
5492     + } else {
5493     + if (len_abuf > len_rem)
5494     + len_tmp = len_rem - 2; /* quotes */
5495     + audit_log_n_string(*ab, buf, len_tmp);
5496     + len_rem -= len_tmp + 2;
5497     + /* don't subtract the "2" because we still need
5498     + * to add quotes to the remaining string */
5499     + len_abuf -= len_tmp;
5500     + }
5501     + len_buf -= len_tmp;
5502     + buf += len_tmp;
5503     + }
5504    
5505     - audit_log_format(*ab, "argc=%d", context->execve.argc);
5506     + /* ready to move to the next argument? */
5507     + if ((len_buf == 0) && !require_data) {
5508     + arg++;
5509     + iter = 0;
5510     + len_full = 0;
5511     + require_data = true;
5512     + encode = false;
5513     + }
5514     + } while (arg < context->execve.argc);
5515    
5516     - /*
5517     - * we need some kernel buffer to hold the userspace args. Just
5518     - * allocate one big one rather than allocating one of the right size
5519     - * for every single argument inside audit_log_single_execve_arg()
5520     - * should be <8k allocation so should be pretty safe.
5521     - */
5522     - buf = kmalloc(MAX_EXECVE_AUDIT_LEN + 1, GFP_KERNEL);
5523     - if (!buf) {
5524     - audit_panic("out of memory for argv string");
5525     - return;
5526     - }
5527     + /* NOTE: the caller handles the final audit_log_end() call */
5528    
5529     - for (i = 0; i < context->execve.argc; i++) {
5530     - len = audit_log_single_execve_arg(context, ab, i,
5531     - &len_sent, p, buf);
5532     - if (len <= 0)
5533     - break;
5534     - p += len;
5535     - }
5536     - kfree(buf);
5537     +out:
5538     + kfree(buf_head);
5539     }
5540    
5541     static void show_special(struct audit_context *context, int *call_panic)
5542     diff --git a/kernel/module.c b/kernel/module.c
5543     index 0e5c71195f18..b14a4f31221f 100644
5544     --- a/kernel/module.c
5545     +++ b/kernel/module.c
5546     @@ -2606,13 +2606,18 @@ static inline void kmemleak_load_module(const struct module *mod,
5547     #endif
5548    
5549     #ifdef CONFIG_MODULE_SIG
5550     -static int module_sig_check(struct load_info *info)
5551     +static int module_sig_check(struct load_info *info, int flags)
5552     {
5553     int err = -ENOKEY;
5554     const unsigned long markerlen = sizeof(MODULE_SIG_STRING) - 1;
5555     const void *mod = info->hdr;
5556    
5557     - if (info->len > markerlen &&
5558     + /*
5559     + * Require flags == 0, as a module with version information
5560     + * removed is no longer the module that was signed
5561     + */
5562     + if (flags == 0 &&
5563     + info->len > markerlen &&
5564     memcmp(mod + info->len - markerlen, MODULE_SIG_STRING, markerlen) == 0) {
5565     /* We truncate the module to discard the signature */
5566     info->len -= markerlen;
5567     @@ -2631,7 +2636,7 @@ static int module_sig_check(struct load_info *info)
5568     return err;
5569     }
5570     #else /* !CONFIG_MODULE_SIG */
5571     -static int module_sig_check(struct load_info *info)
5572     +static int module_sig_check(struct load_info *info, int flags)
5573     {
5574     return 0;
5575     }
5576     @@ -3444,7 +3449,7 @@ static int load_module(struct load_info *info, const char __user *uargs,
5577     long err;
5578     char *after_dashes;
5579    
5580     - err = module_sig_check(info);
5581     + err = module_sig_check(info, flags);
5582     if (err)
5583     goto free_copy;
5584    
5585     diff --git a/mm/backing-dev.c b/mm/backing-dev.c
5586     index cbe6f0b96f29..9ef80bf441b3 100644
5587     --- a/mm/backing-dev.c
5588     +++ b/mm/backing-dev.c
5589     @@ -825,6 +825,20 @@ int bdi_register_dev(struct backing_dev_info *bdi, dev_t dev)
5590     }
5591     EXPORT_SYMBOL(bdi_register_dev);
5592    
5593     +int bdi_register_owner(struct backing_dev_info *bdi, struct device *owner)
5594     +{
5595     + int rc;
5596     +
5597     + rc = bdi_register(bdi, NULL, "%u:%u", MAJOR(owner->devt),
5598     + MINOR(owner->devt));
5599     + if (rc)
5600     + return rc;
5601     + bdi->owner = owner;
5602     + get_device(owner);
5603     + return 0;
5604     +}
5605     +EXPORT_SYMBOL(bdi_register_owner);
5606     +
5607     /*
5608     * Remove bdi from bdi_list, and ensure that it is no longer visible
5609     */
5610     @@ -849,6 +863,11 @@ void bdi_unregister(struct backing_dev_info *bdi)
5611     device_unregister(bdi->dev);
5612     bdi->dev = NULL;
5613     }
5614     +
5615     + if (bdi->owner) {
5616     + put_device(bdi->owner);
5617     + bdi->owner = NULL;
5618     + }
5619     }
5620    
5621     void bdi_exit(struct backing_dev_info *bdi)
5622     diff --git a/mm/hugetlb.c b/mm/hugetlb.c
5623     index ef6963b577fd..0c31f184daf8 100644
5624     --- a/mm/hugetlb.c
5625     +++ b/mm/hugetlb.c
5626     @@ -2170,6 +2170,10 @@ static unsigned long set_max_huge_pages(struct hstate *h, unsigned long count,
5627     * and reducing the surplus.
5628     */
5629     spin_unlock(&hugetlb_lock);
5630     +
5631     + /* yield cpu to avoid soft lockup */
5632     + cond_resched();
5633     +
5634     if (hstate_is_gigantic(h))
5635     ret = alloc_fresh_gigantic_page(h, nodes_allowed);
5636     else
5637     diff --git a/net/bluetooth/l2cap_sock.c b/net/bluetooth/l2cap_sock.c
5638     index 1bb551527044..d9bbbded49ef 100644
5639     --- a/net/bluetooth/l2cap_sock.c
5640     +++ b/net/bluetooth/l2cap_sock.c
5641     @@ -927,7 +927,7 @@ static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname,
5642     break;
5643     }
5644    
5645     - if (get_user(opt, (u32 __user *) optval)) {
5646     + if (get_user(opt, (u16 __user *) optval)) {
5647     err = -EFAULT;
5648     break;
5649     }
5650     diff --git a/net/netlabel/netlabel_kapi.c b/net/netlabel/netlabel_kapi.c
5651     index 28cddc85b700..bfa2b6d5b5cf 100644
5652     --- a/net/netlabel/netlabel_kapi.c
5653     +++ b/net/netlabel/netlabel_kapi.c
5654     @@ -824,7 +824,11 @@ socket_setattr_return:
5655     */
5656     void netlbl_sock_delattr(struct sock *sk)
5657     {
5658     - cipso_v4_sock_delattr(sk);
5659     + switch (sk->sk_family) {
5660     + case AF_INET:
5661     + cipso_v4_sock_delattr(sk);
5662     + break;
5663     + }
5664     }
5665    
5666     /**
5667     @@ -987,7 +991,11 @@ req_setattr_return:
5668     */
5669     void netlbl_req_delattr(struct request_sock *req)
5670     {
5671     - cipso_v4_req_delattr(req);
5672     + switch (req->rsk_ops->family) {
5673     + case AF_INET:
5674     + cipso_v4_req_delattr(req);
5675     + break;
5676     + }
5677     }
5678    
5679     /**
5680     diff --git a/scripts/recordmcount.c b/scripts/recordmcount.c
5681     index e167592793a7..42396a74405d 100644
5682     --- a/scripts/recordmcount.c
5683     +++ b/scripts/recordmcount.c
5684     @@ -33,10 +33,17 @@
5685     #include <string.h>
5686     #include <unistd.h>
5687    
5688     +/*
5689     + * glibc synced up and added the metag number but didn't add the relocations.
5690     + * Work around this in a crude manner for now.
5691     + */
5692     #ifndef EM_METAG
5693     -/* Remove this when these make it to the standard system elf.h. */
5694     #define EM_METAG 174
5695     +#endif
5696     +#ifndef R_METAG_ADDR32
5697     #define R_METAG_ADDR32 2
5698     +#endif
5699     +#ifndef R_METAG_NONE
5700     #define R_METAG_NONE 3
5701     #endif
5702    
5703     diff --git a/sound/hda/array.c b/sound/hda/array.c
5704     index 516795baa7db..5dfa610e4471 100644
5705     --- a/sound/hda/array.c
5706     +++ b/sound/hda/array.c
5707     @@ -21,13 +21,15 @@ void *snd_array_new(struct snd_array *array)
5708     return NULL;
5709     if (array->used >= array->alloced) {
5710     int num = array->alloced + array->alloc_align;
5711     + int oldsize = array->alloced * array->elem_size;
5712     int size = (num + 1) * array->elem_size;
5713     void *nlist;
5714     if (snd_BUG_ON(num >= 4096))
5715     return NULL;
5716     - nlist = krealloc(array->list, size, GFP_KERNEL | __GFP_ZERO);
5717     + nlist = krealloc(array->list, size, GFP_KERNEL);
5718     if (!nlist)
5719     return NULL;
5720     + memset(nlist + oldsize, 0, size - oldsize);
5721     array->list = nlist;
5722     array->alloced = num;
5723     }
5724     diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
5725     index 8218cace8fea..e769e5764cba 100644
5726     --- a/sound/pci/hda/hda_intel.c
5727     +++ b/sound/pci/hda/hda_intel.c
5728     @@ -2288,6 +2288,8 @@ static const struct pci_device_id azx_ids[] = {
5729     { PCI_DEVICE(0x1022, 0x780d),
5730     .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_SB },
5731     /* ATI HDMI */
5732     + { PCI_DEVICE(0x1002, 0x0002),
5733     + .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS },
5734     { PCI_DEVICE(0x1002, 0x1308),
5735     .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS },
5736     { PCI_DEVICE(0x1002, 0x157a),
5737     diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
5738     index abcb5a6a1cd9..f25479ba3981 100644
5739     --- a/sound/pci/hda/patch_realtek.c
5740     +++ b/sound/pci/hda/patch_realtek.c
5741     @@ -4674,6 +4674,22 @@ static void alc290_fixup_mono_speakers(struct hda_codec *codec,
5742     }
5743     }
5744    
5745     +static void alc298_fixup_speaker_volume(struct hda_codec *codec,
5746     + const struct hda_fixup *fix, int action)
5747     +{
5748     + if (action == HDA_FIXUP_ACT_PRE_PROBE) {
5749     + /* The speaker is routed to the Node 0x06 by a mistake, as a result
5750     + we can't adjust the speaker's volume since this node does not has
5751     + Amp-out capability. we change the speaker's route to:
5752     + Node 0x02 (Audio Output) -> Node 0x0c (Audio Mixer) -> Node 0x17 (
5753     + Pin Complex), since Node 0x02 has Amp-out caps, we can adjust
5754     + speaker's volume now. */
5755     +
5756     + hda_nid_t conn1[1] = { 0x0c };
5757     + snd_hda_override_conn_list(codec, 0x17, 1, conn1);
5758     + }
5759     +}
5760     +
5761     /* Hook to update amp GPIO4 for automute */
5762     static void alc280_hp_gpio4_automute_hook(struct hda_codec *codec,
5763     struct hda_jack_callback *jack)
5764     @@ -4823,6 +4839,7 @@ enum {
5765     ALC280_FIXUP_HP_HEADSET_MIC,
5766     ALC221_FIXUP_HP_FRONT_MIC,
5767     ALC292_FIXUP_TPT460,
5768     + ALC298_FIXUP_SPK_VOLUME,
5769     };
5770    
5771     static const struct hda_fixup alc269_fixups[] = {
5772     @@ -5478,6 +5495,12 @@ static const struct hda_fixup alc269_fixups[] = {
5773     .chained = true,
5774     .chain_id = ALC293_FIXUP_LENOVO_SPK_NOISE,
5775     },
5776     + [ALC298_FIXUP_SPK_VOLUME] = {
5777     + .type = HDA_FIXUP_FUNC,
5778     + .v.func = alc298_fixup_speaker_volume,
5779     + .chained = true,
5780     + .chain_id = ALC298_FIXUP_DELL1_MIC_NO_PRESENCE,
5781     + },
5782     };
5783    
5784     static const struct snd_pci_quirk alc269_fixup_tbl[] = {
5785     @@ -5524,6 +5547,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
5786     SND_PCI_QUIRK(0x1028, 0x0704, "Dell XPS 13 9350", ALC256_FIXUP_DELL_XPS_13_HEADPHONE_NOISE),
5787     SND_PCI_QUIRK(0x1028, 0x0725, "Dell Inspiron 3162", ALC255_FIXUP_DELL_SPK_NOISE),
5788     SND_PCI_QUIRK(0x1028, 0x075b, "Dell XPS 13 9360", ALC256_FIXUP_DELL_XPS_13_HEADPHONE_NOISE),
5789     + SND_PCI_QUIRK(0x1028, 0x075d, "Dell AIO", ALC298_FIXUP_SPK_VOLUME),
5790     SND_PCI_QUIRK(0x1028, 0x164a, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
5791     SND_PCI_QUIRK(0x1028, 0x164b, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
5792     SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC2),
5793     @@ -5799,6 +5823,10 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
5794     {0x1b, 0x01014020},
5795     {0x21, 0x0221103f}),
5796     SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
5797     + {0x14, 0x90170130},
5798     + {0x1b, 0x02011020},
5799     + {0x21, 0x0221103f}),
5800     + SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
5801     {0x14, 0x90170150},
5802     {0x1b, 0x02011020},
5803     {0x21, 0x0221105f}),
5804     diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
5805     index 510df220d1b5..336ed267c407 100644
5806     --- a/virt/kvm/kvm_main.c
5807     +++ b/virt/kvm/kvm_main.c
5808     @@ -142,6 +142,7 @@ int vcpu_load(struct kvm_vcpu *vcpu)
5809     put_cpu();
5810     return 0;
5811     }
5812     +EXPORT_SYMBOL_GPL(vcpu_load);
5813    
5814     void vcpu_put(struct kvm_vcpu *vcpu)
5815     {
5816     @@ -151,6 +152,7 @@ void vcpu_put(struct kvm_vcpu *vcpu)
5817     preempt_enable();
5818     mutex_unlock(&vcpu->mutex);
5819     }
5820     +EXPORT_SYMBOL_GPL(vcpu_put);
5821    
5822     static void ack_flush(void *_completed)
5823     {