Magellan Linux

Annotation of /trunk/kernel-alx/patches-4.9/0327-4.9.228-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3602 - (hide annotations) (download)
Thu Aug 13 10:21:42 2020 UTC (3 years, 9 months ago) by niro
File size: 139698 byte(s)
linux-228
1 niro 3602 diff --git a/Documentation/devicetree/bindings/display/mediatek/mediatek,dpi.txt b/Documentation/devicetree/bindings/display/mediatek/mediatek,dpi.txt
2     index b6a7e7397b8b..b944fe067188 100644
3     --- a/Documentation/devicetree/bindings/display/mediatek/mediatek,dpi.txt
4     +++ b/Documentation/devicetree/bindings/display/mediatek/mediatek,dpi.txt
5     @@ -16,6 +16,9 @@ Required properties:
6     Documentation/devicetree/bindings/graph.txt. This port should be connected
7     to the input port of an attached HDMI or LVDS encoder chip.
8    
9     +Optional properties:
10     +- pinctrl-names: Contain "default" and "sleep".
11     +
12     Example:
13    
14     dpi0: dpi@1401d000 {
15     @@ -26,6 +29,9 @@ dpi0: dpi@1401d000 {
16     <&mmsys CLK_MM_DPI_ENGINE>,
17     <&apmixedsys CLK_APMIXED_TVDPLL>;
18     clock-names = "pixel", "engine", "pll";
19     + pinctrl-names = "default", "sleep";
20     + pinctrl-0 = <&dpi_pin_func>;
21     + pinctrl-1 = <&dpi_pin_idle>;
22    
23     port {
24     dpi0_out: endpoint {
25     diff --git a/Documentation/virtual/kvm/api.txt b/Documentation/virtual/kvm/api.txt
26     index d1908e50b506..b8f5bf2a890a 100644
27     --- a/Documentation/virtual/kvm/api.txt
28     +++ b/Documentation/virtual/kvm/api.txt
29     @@ -3534,9 +3534,11 @@ EOI was received.
30     #define KVM_EXIT_HYPERV_SYNIC 1
31     #define KVM_EXIT_HYPERV_HCALL 2
32     __u32 type;
33     + __u32 pad1;
34     union {
35     struct {
36     __u32 msr;
37     + __u32 pad2;
38     __u64 control;
39     __u64 evt_page;
40     __u64 msg_page;
41     diff --git a/Makefile b/Makefile
42     index 6c3c6e193621..af23d7b67442 100644
43     --- a/Makefile
44     +++ b/Makefile
45     @@ -1,6 +1,6 @@
46     VERSION = 4
47     PATCHLEVEL = 9
48     -SUBLEVEL = 227
49     +SUBLEVEL = 228
50     EXTRAVERSION =
51     NAME = Roaring Lionus
52    
53     @@ -313,12 +313,8 @@ KBUILD_MODULES :=
54     KBUILD_BUILTIN := 1
55    
56     # If we have only "make modules", don't compile built-in objects.
57     -# When we're building modules with modversions, we need to consider
58     -# the built-in objects during the descend as well, in order to
59     -# make sure the checksums are up to date before we record them.
60     -
61     ifeq ($(MAKECMDGOALS),modules)
62     - KBUILD_BUILTIN := $(if $(CONFIG_MODVERSIONS),1)
63     + KBUILD_BUILTIN :=
64     endif
65    
66     # If we have "make <whatever> modules", compile modules
67     @@ -1237,6 +1233,13 @@ ifdef CONFIG_MODULES
68    
69     all: modules
70    
71     +# When we're building modules with modversions, we need to consider
72     +# the built-in objects during the descend as well, in order to
73     +# make sure the checksums are up to date before we record them.
74     +ifdef CONFIG_MODVERSIONS
75     + KBUILD_BUILTIN := 1
76     +endif
77     +
78     # Build modules
79     #
80     # A module can be listed more than once in obj-m resulting in
81     diff --git a/arch/arm/kernel/ptrace.c b/arch/arm/kernel/ptrace.c
82     index ae738a6319f6..364985c96a92 100644
83     --- a/arch/arm/kernel/ptrace.c
84     +++ b/arch/arm/kernel/ptrace.c
85     @@ -227,8 +227,8 @@ static struct undef_hook arm_break_hook = {
86     };
87    
88     static struct undef_hook thumb_break_hook = {
89     - .instr_mask = 0xffff,
90     - .instr_val = 0xde01,
91     + .instr_mask = 0xffffffff,
92     + .instr_val = 0x0000de01,
93     .cpsr_mask = PSR_T_BIT,
94     .cpsr_val = PSR_T_BIT,
95     .fn = break_trap,
96     diff --git a/arch/arm/mach-tegra/tegra.c b/arch/arm/mach-tegra/tegra.c
97     index e01cbca196b5..a67fcf7a5643 100644
98     --- a/arch/arm/mach-tegra/tegra.c
99     +++ b/arch/arm/mach-tegra/tegra.c
100     @@ -137,8 +137,8 @@ static const char * const tegra_dt_board_compat[] = {
101     };
102    
103     DT_MACHINE_START(TEGRA_DT, "NVIDIA Tegra SoC (Flattened Device Tree)")
104     - .l2c_aux_val = 0x3c400001,
105     - .l2c_aux_mask = 0xc20fc3fe,
106     + .l2c_aux_val = 0x3c400000,
107     + .l2c_aux_mask = 0xc20fc3ff,
108     .smp = smp_ops(tegra_smp_ops),
109     .map_io = tegra_map_common_io,
110     .init_early = tegra_init_early,
111     diff --git a/arch/arm/mm/proc-macros.S b/arch/arm/mm/proc-macros.S
112     index f8bb65032b79..796e8f675a93 100644
113     --- a/arch/arm/mm/proc-macros.S
114     +++ b/arch/arm/mm/proc-macros.S
115     @@ -4,6 +4,7 @@
116     * VMA_VM_FLAGS
117     * VM_EXEC
118     */
119     +#include <linux/const.h>
120     #include <asm/asm-offsets.h>
121     #include <asm/thread_info.h>
122    
123     @@ -34,7 +35,7 @@
124     * act_mm - get current->active_mm
125     */
126     .macro act_mm, rd
127     - bic \rd, sp, #8128
128     + bic \rd, sp, #(THREAD_SIZE - 1) & ~63
129     bic \rd, \rd, #63
130     ldr \rd, [\rd, #TI_TASK]
131     ldr \rd, [\rd, #TSK_ACTIVE_MM]
132     diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h
133     index 4cdfbd01b2de..367ebb48170b 100644
134     --- a/arch/arm64/include/asm/kvm_host.h
135     +++ b/arch/arm64/include/asm/kvm_host.h
136     @@ -290,8 +290,10 @@ struct kvm_vcpu_arch {
137     * CP14 and CP15 live in the same array, as they are backed by the
138     * same system registers.
139     */
140     -#define vcpu_cp14(v,r) ((v)->arch.ctxt.copro[(r)])
141     -#define vcpu_cp15(v,r) ((v)->arch.ctxt.copro[(r)])
142     +#define CPx_BIAS IS_ENABLED(CONFIG_CPU_BIG_ENDIAN)
143     +
144     +#define vcpu_cp14(v,r) ((v)->arch.ctxt.copro[(r) ^ CPx_BIAS])
145     +#define vcpu_cp15(v,r) ((v)->arch.ctxt.copro[(r) ^ CPx_BIAS])
146    
147     #ifdef CONFIG_CPU_BIG_ENDIAN
148     #define vcpu_cp15_64_high(v,r) vcpu_cp15((v),(r))
149     diff --git a/arch/m68k/include/asm/mac_via.h b/arch/m68k/include/asm/mac_via.h
150     index 53c632c85b03..dff6db19ae4d 100644
151     --- a/arch/m68k/include/asm/mac_via.h
152     +++ b/arch/m68k/include/asm/mac_via.h
153     @@ -256,6 +256,7 @@ extern int rbv_present,via_alt_mapping;
154    
155     struct irq_desc;
156    
157     +extern void via_l2_flush(int writeback);
158     extern void via_register_interrupts(void);
159     extern void via_irq_enable(int);
160     extern void via_irq_disable(int);
161     diff --git a/arch/m68k/mac/config.c b/arch/m68k/mac/config.c
162     index e46895316eb0..dcf18e1ca0bb 100644
163     --- a/arch/m68k/mac/config.c
164     +++ b/arch/m68k/mac/config.c
165     @@ -61,7 +61,6 @@ extern void iop_preinit(void);
166     extern void iop_init(void);
167     extern void via_init(void);
168     extern void via_init_clock(irq_handler_t func);
169     -extern void via_flush_cache(void);
170     extern void oss_init(void);
171     extern void psc_init(void);
172     extern void baboon_init(void);
173     @@ -132,21 +131,6 @@ int __init mac_parse_bootinfo(const struct bi_record *record)
174     return unknown;
175     }
176    
177     -/*
178     - * Flip into 24bit mode for an instant - flushes the L2 cache card. We
179     - * have to disable interrupts for this. Our IRQ handlers will crap
180     - * themselves if they take an IRQ in 24bit mode!
181     - */
182     -
183     -static void mac_cache_card_flush(int writeback)
184     -{
185     - unsigned long flags;
186     -
187     - local_irq_save(flags);
188     - via_flush_cache();
189     - local_irq_restore(flags);
190     -}
191     -
192     void __init config_mac(void)
193     {
194     if (!MACH_IS_MAC)
195     @@ -179,9 +163,8 @@ void __init config_mac(void)
196     * not.
197     */
198    
199     - if (macintosh_config->ident == MAC_MODEL_IICI
200     - || macintosh_config->ident == MAC_MODEL_IIFX)
201     - mach_l2_flush = mac_cache_card_flush;
202     + if (macintosh_config->ident == MAC_MODEL_IICI)
203     + mach_l2_flush = via_l2_flush;
204     }
205    
206    
207     diff --git a/arch/m68k/mac/via.c b/arch/m68k/mac/via.c
208     index a435aced6e43..35382c1b563f 100644
209     --- a/arch/m68k/mac/via.c
210     +++ b/arch/m68k/mac/via.c
211     @@ -299,10 +299,14 @@ void via_debug_dump(void)
212     * the system into 24-bit mode for an instant.
213     */
214    
215     -void via_flush_cache(void)
216     +void via_l2_flush(int writeback)
217     {
218     + unsigned long flags;
219     +
220     + local_irq_save(flags);
221     via2[gBufB] &= ~VIA2B_vMode32;
222     via2[gBufB] |= VIA2B_vMode32;
223     + local_irq_restore(flags);
224     }
225    
226     /*
227     diff --git a/arch/mips/Makefile b/arch/mips/Makefile
228     index 1a6bac7b076f..25f3bfef9b39 100644
229     --- a/arch/mips/Makefile
230     +++ b/arch/mips/Makefile
231     @@ -256,12 +256,23 @@ ifdef CONFIG_64BIT
232     endif
233     endif
234    
235     +# When linking a 32-bit executable the LLVM linker cannot cope with a
236     +# 32-bit load address that has been sign-extended to 64 bits. Simply
237     +# remove the upper 32 bits then, as it is safe to do so with other
238     +# linkers.
239     +ifdef CONFIG_64BIT
240     + load-ld = $(load-y)
241     +else
242     + load-ld = $(subst 0xffffffff,0x,$(load-y))
243     +endif
244     +
245     KBUILD_AFLAGS += $(cflags-y)
246     KBUILD_CFLAGS += $(cflags-y)
247     -KBUILD_CPPFLAGS += -DVMLINUX_LOAD_ADDRESS=$(load-y)
248     +KBUILD_CPPFLAGS += -DVMLINUX_LOAD_ADDRESS=$(load-y) -DLINKER_LOAD_ADDRESS=$(load-ld)
249     KBUILD_CPPFLAGS += -DDATAOFFSET=$(if $(dataoffset-y),$(dataoffset-y),0)
250    
251     bootvars-y = VMLINUX_LOAD_ADDRESS=$(load-y) \
252     + LINKER_LOAD_ADDRESS=$(load-ld) \
253     VMLINUX_ENTRY_ADDRESS=$(entry-y) \
254     PLATFORM="$(platform-y)"
255     ifdef CONFIG_32BIT
256     diff --git a/arch/mips/boot/compressed/Makefile b/arch/mips/boot/compressed/Makefile
257     index 2f77e250b91d..0fa91c981658 100644
258     --- a/arch/mips/boot/compressed/Makefile
259     +++ b/arch/mips/boot/compressed/Makefile
260     @@ -87,7 +87,7 @@ ifneq ($(zload-y),)
261     VMLINUZ_LOAD_ADDRESS := $(zload-y)
262     else
263     VMLINUZ_LOAD_ADDRESS = $(shell $(obj)/calc_vmlinuz_load_addr \
264     - $(obj)/vmlinux.bin $(VMLINUX_LOAD_ADDRESS))
265     + $(obj)/vmlinux.bin $(LINKER_LOAD_ADDRESS))
266     endif
267    
268     vmlinuzobjs-y += $(obj)/piggy.o
269     diff --git a/arch/mips/include/asm/kvm_host.h b/arch/mips/include/asm/kvm_host.h
270     index bebec370324f..22573b4f25b6 100644
271     --- a/arch/mips/include/asm/kvm_host.h
272     +++ b/arch/mips/include/asm/kvm_host.h
273     @@ -243,8 +243,12 @@ enum emulation_result {
274     #define MIPS3_PG_SHIFT 6
275     #define MIPS3_PG_FRAME 0x3fffffc0
276    
277     +#if defined(CONFIG_64BIT)
278     +#define VPN2_MASK GENMASK(cpu_vmbits - 1, 13)
279     +#else
280     #define VPN2_MASK 0xffffe000
281     -#define KVM_ENTRYHI_ASID MIPS_ENTRYHI_ASID
282     +#endif
283     +#define KVM_ENTRYHI_ASID cpu_asid_mask(&boot_cpu_data)
284     #define TLB_IS_GLOBAL(x) ((x).tlb_lo[0] & (x).tlb_lo[1] & ENTRYLO_G)
285     #define TLB_VPN2(x) ((x).tlb_hi & VPN2_MASK)
286     #define TLB_ASID(x) ((x).tlb_hi & KVM_ENTRYHI_ASID)
287     diff --git a/arch/mips/kernel/genex.S b/arch/mips/kernel/genex.S
288     index ae810da4d499..59ed811eb32a 100644
289     --- a/arch/mips/kernel/genex.S
290     +++ b/arch/mips/kernel/genex.S
291     @@ -429,20 +429,20 @@ NESTED(nmi_handler, PT_SIZE, sp)
292     .endm
293    
294     .macro __build_clear_fpe
295     + CLI
296     + TRACE_IRQS_OFF
297     .set push
298     /* gas fails to assemble cfc1 for some archs (octeon).*/ \
299     .set mips1
300     SET_HARDFLOAT
301     cfc1 a1, fcr31
302     .set pop
303     - CLI
304     - TRACE_IRQS_OFF
305     .endm
306    
307     .macro __build_clear_msa_fpe
308     - _cfcmsa a1, MSA_CSR
309     CLI
310     TRACE_IRQS_OFF
311     + _cfcmsa a1, MSA_CSR
312     .endm
313    
314     .macro __build_clear_ade
315     diff --git a/arch/mips/kernel/mips-cm.c b/arch/mips/kernel/mips-cm.c
316     index 60177a612cb1..df65516778a2 100644
317     --- a/arch/mips/kernel/mips-cm.c
318     +++ b/arch/mips/kernel/mips-cm.c
319     @@ -123,9 +123,9 @@ static char *cm2_causes[32] = {
320     "COH_RD_ERR", "MMIO_WR_ERR", "MMIO_RD_ERR", "0x07",
321     "0x08", "0x09", "0x0a", "0x0b",
322     "0x0c", "0x0d", "0x0e", "0x0f",
323     - "0x10", "0x11", "0x12", "0x13",
324     - "0x14", "0x15", "0x16", "INTVN_WR_ERR",
325     - "INTVN_RD_ERR", "0x19", "0x1a", "0x1b",
326     + "0x10", "INTVN_WR_ERR", "INTVN_RD_ERR", "0x13",
327     + "0x14", "0x15", "0x16", "0x17",
328     + "0x18", "0x19", "0x1a", "0x1b",
329     "0x1c", "0x1d", "0x1e", "0x1f"
330     };
331    
332     diff --git a/arch/mips/kernel/setup.c b/arch/mips/kernel/setup.c
333     index 7cc1d29334ee..2c3b89a65317 100644
334     --- a/arch/mips/kernel/setup.c
335     +++ b/arch/mips/kernel/setup.c
336     @@ -847,7 +847,17 @@ static void __init arch_mem_init(char **cmdline_p)
337     BOOTMEM_DEFAULT);
338     #endif
339     device_tree_init();
340     +
341     + /*
342     + * In order to reduce the possibility of kernel panic when failed to
343     + * get IO TLB memory under CONFIG_SWIOTLB, it is better to allocate
344     + * low memory as small as possible before plat_swiotlb_setup(), so
345     + * make sparse_init() using top-down allocation.
346     + */
347     + memblock_set_bottom_up(false);
348     sparse_init();
349     + memblock_set_bottom_up(true);
350     +
351     plat_swiotlb_setup();
352    
353     dma_contiguous_reserve(PFN_PHYS(max_low_pfn));
354     diff --git a/arch/mips/kernel/time.c b/arch/mips/kernel/time.c
355     index a7f81261c781..b7f7e08e1ce4 100644
356     --- a/arch/mips/kernel/time.c
357     +++ b/arch/mips/kernel/time.c
358     @@ -22,12 +22,82 @@
359     #include <linux/smp.h>
360     #include <linux/spinlock.h>
361     #include <linux/export.h>
362     +#include <linux/cpufreq.h>
363     +#include <linux/delay.h>
364    
365     #include <asm/cpu-features.h>
366     #include <asm/cpu-type.h>
367     #include <asm/div64.h>
368     #include <asm/time.h>
369    
370     +#ifdef CONFIG_CPU_FREQ
371     +
372     +static DEFINE_PER_CPU(unsigned long, pcp_lpj_ref);
373     +static DEFINE_PER_CPU(unsigned long, pcp_lpj_ref_freq);
374     +static unsigned long glb_lpj_ref;
375     +static unsigned long glb_lpj_ref_freq;
376     +
377     +static int cpufreq_callback(struct notifier_block *nb,
378     + unsigned long val, void *data)
379     +{
380     + struct cpufreq_freqs *freq = data;
381     + struct cpumask *cpus = freq->policy->cpus;
382     + unsigned long lpj;
383     + int cpu;
384     +
385     + /*
386     + * Skip lpj numbers adjustment if the CPU-freq transition is safe for
387     + * the loops delay. (Is this possible?)
388     + */
389     + if (freq->flags & CPUFREQ_CONST_LOOPS)
390     + return NOTIFY_OK;
391     +
392     + /* Save the initial values of the lpjes for future scaling. */
393     + if (!glb_lpj_ref) {
394     + glb_lpj_ref = boot_cpu_data.udelay_val;
395     + glb_lpj_ref_freq = freq->old;
396     +
397     + for_each_online_cpu(cpu) {
398     + per_cpu(pcp_lpj_ref, cpu) =
399     + cpu_data[cpu].udelay_val;
400     + per_cpu(pcp_lpj_ref_freq, cpu) = freq->old;
401     + }
402     + }
403     +
404     + /*
405     + * Adjust global lpj variable and per-CPU udelay_val number in
406     + * accordance with the new CPU frequency.
407     + */
408     + if ((val == CPUFREQ_PRECHANGE && freq->old < freq->new) ||
409     + (val == CPUFREQ_POSTCHANGE && freq->old > freq->new)) {
410     + loops_per_jiffy = cpufreq_scale(glb_lpj_ref,
411     + glb_lpj_ref_freq,
412     + freq->new);
413     +
414     + for_each_cpu(cpu, cpus) {
415     + lpj = cpufreq_scale(per_cpu(pcp_lpj_ref, cpu),
416     + per_cpu(pcp_lpj_ref_freq, cpu),
417     + freq->new);
418     + cpu_data[cpu].udelay_val = (unsigned int)lpj;
419     + }
420     + }
421     +
422     + return NOTIFY_OK;
423     +}
424     +
425     +static struct notifier_block cpufreq_notifier = {
426     + .notifier_call = cpufreq_callback,
427     +};
428     +
429     +static int __init register_cpufreq_notifier(void)
430     +{
431     + return cpufreq_register_notifier(&cpufreq_notifier,
432     + CPUFREQ_TRANSITION_NOTIFIER);
433     +}
434     +core_initcall(register_cpufreq_notifier);
435     +
436     +#endif /* CONFIG_CPU_FREQ */
437     +
438     /*
439     * forward reference
440     */
441     diff --git a/arch/mips/kernel/vmlinux.lds.S b/arch/mips/kernel/vmlinux.lds.S
442     index 2d965d91fee4..612b2b301280 100644
443     --- a/arch/mips/kernel/vmlinux.lds.S
444     +++ b/arch/mips/kernel/vmlinux.lds.S
445     @@ -49,7 +49,7 @@ SECTIONS
446     /* . = 0xa800000000300000; */
447     . = 0xffffffff80300000;
448     #endif
449     - . = VMLINUX_LOAD_ADDRESS;
450     + . = LINKER_LOAD_ADDRESS;
451     /* read-only */
452     _text = .; /* Text and read-only data */
453     .text : {
454     diff --git a/arch/powerpc/platforms/cell/spufs/file.c b/arch/powerpc/platforms/cell/spufs/file.c
455     index 06254467e4dd..f12b00a056cb 100644
456     --- a/arch/powerpc/platforms/cell/spufs/file.c
457     +++ b/arch/powerpc/platforms/cell/spufs/file.c
458     @@ -2044,8 +2044,9 @@ static ssize_t __spufs_mbox_info_read(struct spu_context *ctx,
459     static ssize_t spufs_mbox_info_read(struct file *file, char __user *buf,
460     size_t len, loff_t *pos)
461     {
462     - int ret;
463     struct spu_context *ctx = file->private_data;
464     + u32 stat, data;
465     + int ret;
466    
467     if (!access_ok(VERIFY_WRITE, buf, len))
468     return -EFAULT;
469     @@ -2054,11 +2055,16 @@ static ssize_t spufs_mbox_info_read(struct file *file, char __user *buf,
470     if (ret)
471     return ret;
472     spin_lock(&ctx->csa.register_lock);
473     - ret = __spufs_mbox_info_read(ctx, buf, len, pos);
474     + stat = ctx->csa.prob.mb_stat_R;
475     + data = ctx->csa.prob.pu_mb_R;
476     spin_unlock(&ctx->csa.register_lock);
477     spu_release_saved(ctx);
478    
479     - return ret;
480     + /* EOF if there's no entry in the mbox */
481     + if (!(stat & 0x0000ff))
482     + return 0;
483     +
484     + return simple_read_from_buffer(buf, len, pos, &data, sizeof(data));
485     }
486    
487     static const struct file_operations spufs_mbox_info_fops = {
488     @@ -2085,6 +2091,7 @@ static ssize_t spufs_ibox_info_read(struct file *file, char __user *buf,
489     size_t len, loff_t *pos)
490     {
491     struct spu_context *ctx = file->private_data;
492     + u32 stat, data;
493     int ret;
494    
495     if (!access_ok(VERIFY_WRITE, buf, len))
496     @@ -2094,11 +2101,16 @@ static ssize_t spufs_ibox_info_read(struct file *file, char __user *buf,
497     if (ret)
498     return ret;
499     spin_lock(&ctx->csa.register_lock);
500     - ret = __spufs_ibox_info_read(ctx, buf, len, pos);
501     + stat = ctx->csa.prob.mb_stat_R;
502     + data = ctx->csa.priv2.puint_mb_R;
503     spin_unlock(&ctx->csa.register_lock);
504     spu_release_saved(ctx);
505    
506     - return ret;
507     + /* EOF if there's no entry in the ibox */
508     + if (!(stat & 0xff0000))
509     + return 0;
510     +
511     + return simple_read_from_buffer(buf, len, pos, &data, sizeof(data));
512     }
513    
514     static const struct file_operations spufs_ibox_info_fops = {
515     @@ -2107,6 +2119,11 @@ static const struct file_operations spufs_ibox_info_fops = {
516     .llseek = generic_file_llseek,
517     };
518    
519     +static size_t spufs_wbox_info_cnt(struct spu_context *ctx)
520     +{
521     + return (4 - ((ctx->csa.prob.mb_stat_R & 0x00ff00) >> 8)) * sizeof(u32);
522     +}
523     +
524     static ssize_t __spufs_wbox_info_read(struct spu_context *ctx,
525     char __user *buf, size_t len, loff_t *pos)
526     {
527     @@ -2115,7 +2132,7 @@ static ssize_t __spufs_wbox_info_read(struct spu_context *ctx,
528     u32 wbox_stat;
529    
530     wbox_stat = ctx->csa.prob.mb_stat_R;
531     - cnt = 4 - ((wbox_stat & 0x00ff00) >> 8);
532     + cnt = spufs_wbox_info_cnt(ctx);
533     for (i = 0; i < cnt; i++) {
534     data[i] = ctx->csa.spu_mailbox_data[i];
535     }
536     @@ -2128,7 +2145,8 @@ static ssize_t spufs_wbox_info_read(struct file *file, char __user *buf,
537     size_t len, loff_t *pos)
538     {
539     struct spu_context *ctx = file->private_data;
540     - int ret;
541     + u32 data[ARRAY_SIZE(ctx->csa.spu_mailbox_data)];
542     + int ret, count;
543    
544     if (!access_ok(VERIFY_WRITE, buf, len))
545     return -EFAULT;
546     @@ -2137,11 +2155,13 @@ static ssize_t spufs_wbox_info_read(struct file *file, char __user *buf,
547     if (ret)
548     return ret;
549     spin_lock(&ctx->csa.register_lock);
550     - ret = __spufs_wbox_info_read(ctx, buf, len, pos);
551     + count = spufs_wbox_info_cnt(ctx);
552     + memcpy(&data, &ctx->csa.spu_mailbox_data, sizeof(data));
553     spin_unlock(&ctx->csa.register_lock);
554     spu_release_saved(ctx);
555    
556     - return ret;
557     + return simple_read_from_buffer(buf, len, pos, &data,
558     + count * sizeof(u32));
559     }
560    
561     static const struct file_operations spufs_wbox_info_fops = {
562     @@ -2150,27 +2170,33 @@ static const struct file_operations spufs_wbox_info_fops = {
563     .llseek = generic_file_llseek,
564     };
565    
566     -static ssize_t __spufs_dma_info_read(struct spu_context *ctx,
567     - char __user *buf, size_t len, loff_t *pos)
568     +static void spufs_get_dma_info(struct spu_context *ctx,
569     + struct spu_dma_info *info)
570     {
571     - struct spu_dma_info info;
572     - struct mfc_cq_sr *qp, *spuqp;
573     int i;
574    
575     - info.dma_info_type = ctx->csa.priv2.spu_tag_status_query_RW;
576     - info.dma_info_mask = ctx->csa.lscsa->tag_mask.slot[0];
577     - info.dma_info_status = ctx->csa.spu_chnldata_RW[24];
578     - info.dma_info_stall_and_notify = ctx->csa.spu_chnldata_RW[25];
579     - info.dma_info_atomic_command_status = ctx->csa.spu_chnldata_RW[27];
580     + info->dma_info_type = ctx->csa.priv2.spu_tag_status_query_RW;
581     + info->dma_info_mask = ctx->csa.lscsa->tag_mask.slot[0];
582     + info->dma_info_status = ctx->csa.spu_chnldata_RW[24];
583     + info->dma_info_stall_and_notify = ctx->csa.spu_chnldata_RW[25];
584     + info->dma_info_atomic_command_status = ctx->csa.spu_chnldata_RW[27];
585     for (i = 0; i < 16; i++) {
586     - qp = &info.dma_info_command_data[i];
587     - spuqp = &ctx->csa.priv2.spuq[i];
588     + struct mfc_cq_sr *qp = &info->dma_info_command_data[i];
589     + struct mfc_cq_sr *spuqp = &ctx->csa.priv2.spuq[i];
590    
591     qp->mfc_cq_data0_RW = spuqp->mfc_cq_data0_RW;
592     qp->mfc_cq_data1_RW = spuqp->mfc_cq_data1_RW;
593     qp->mfc_cq_data2_RW = spuqp->mfc_cq_data2_RW;
594     qp->mfc_cq_data3_RW = spuqp->mfc_cq_data3_RW;
595     }
596     +}
597     +
598     +static ssize_t __spufs_dma_info_read(struct spu_context *ctx,
599     + char __user *buf, size_t len, loff_t *pos)
600     +{
601     + struct spu_dma_info info;
602     +
603     + spufs_get_dma_info(ctx, &info);
604    
605     return simple_read_from_buffer(buf, len, pos, &info,
606     sizeof info);
607     @@ -2180,6 +2206,7 @@ static ssize_t spufs_dma_info_read(struct file *file, char __user *buf,
608     size_t len, loff_t *pos)
609     {
610     struct spu_context *ctx = file->private_data;
611     + struct spu_dma_info info;
612     int ret;
613    
614     if (!access_ok(VERIFY_WRITE, buf, len))
615     @@ -2189,11 +2216,12 @@ static ssize_t spufs_dma_info_read(struct file *file, char __user *buf,
616     if (ret)
617     return ret;
618     spin_lock(&ctx->csa.register_lock);
619     - ret = __spufs_dma_info_read(ctx, buf, len, pos);
620     + spufs_get_dma_info(ctx, &info);
621     spin_unlock(&ctx->csa.register_lock);
622     spu_release_saved(ctx);
623    
624     - return ret;
625     + return simple_read_from_buffer(buf, len, pos, &info,
626     + sizeof(info));
627     }
628    
629     static const struct file_operations spufs_dma_info_fops = {
630     @@ -2202,13 +2230,31 @@ static const struct file_operations spufs_dma_info_fops = {
631     .llseek = no_llseek,
632     };
633    
634     +static void spufs_get_proxydma_info(struct spu_context *ctx,
635     + struct spu_proxydma_info *info)
636     +{
637     + int i;
638     +
639     + info->proxydma_info_type = ctx->csa.prob.dma_querytype_RW;
640     + info->proxydma_info_mask = ctx->csa.prob.dma_querymask_RW;
641     + info->proxydma_info_status = ctx->csa.prob.dma_tagstatus_R;
642     +
643     + for (i = 0; i < 8; i++) {
644     + struct mfc_cq_sr *qp = &info->proxydma_info_command_data[i];
645     + struct mfc_cq_sr *puqp = &ctx->csa.priv2.puq[i];
646     +
647     + qp->mfc_cq_data0_RW = puqp->mfc_cq_data0_RW;
648     + qp->mfc_cq_data1_RW = puqp->mfc_cq_data1_RW;
649     + qp->mfc_cq_data2_RW = puqp->mfc_cq_data2_RW;
650     + qp->mfc_cq_data3_RW = puqp->mfc_cq_data3_RW;
651     + }
652     +}
653     +
654     static ssize_t __spufs_proxydma_info_read(struct spu_context *ctx,
655     char __user *buf, size_t len, loff_t *pos)
656     {
657     struct spu_proxydma_info info;
658     - struct mfc_cq_sr *qp, *puqp;
659     int ret = sizeof info;
660     - int i;
661    
662     if (len < ret)
663     return -EINVAL;
664     @@ -2216,18 +2262,7 @@ static ssize_t __spufs_proxydma_info_read(struct spu_context *ctx,
665     if (!access_ok(VERIFY_WRITE, buf, len))
666     return -EFAULT;
667    
668     - info.proxydma_info_type = ctx->csa.prob.dma_querytype_RW;
669     - info.proxydma_info_mask = ctx->csa.prob.dma_querymask_RW;
670     - info.proxydma_info_status = ctx->csa.prob.dma_tagstatus_R;
671     - for (i = 0; i < 8; i++) {
672     - qp = &info.proxydma_info_command_data[i];
673     - puqp = &ctx->csa.priv2.puq[i];
674     -
675     - qp->mfc_cq_data0_RW = puqp->mfc_cq_data0_RW;
676     - qp->mfc_cq_data1_RW = puqp->mfc_cq_data1_RW;
677     - qp->mfc_cq_data2_RW = puqp->mfc_cq_data2_RW;
678     - qp->mfc_cq_data3_RW = puqp->mfc_cq_data3_RW;
679     - }
680     + spufs_get_proxydma_info(ctx, &info);
681    
682     return simple_read_from_buffer(buf, len, pos, &info,
683     sizeof info);
684     @@ -2237,17 +2272,19 @@ static ssize_t spufs_proxydma_info_read(struct file *file, char __user *buf,
685     size_t len, loff_t *pos)
686     {
687     struct spu_context *ctx = file->private_data;
688     + struct spu_proxydma_info info;
689     int ret;
690    
691     ret = spu_acquire_saved(ctx);
692     if (ret)
693     return ret;
694     spin_lock(&ctx->csa.register_lock);
695     - ret = __spufs_proxydma_info_read(ctx, buf, len, pos);
696     + spufs_get_proxydma_info(ctx, &info);
697     spin_unlock(&ctx->csa.register_lock);
698     spu_release_saved(ctx);
699    
700     - return ret;
701     + return simple_read_from_buffer(buf, len, pos, &info,
702     + sizeof(info));
703     }
704    
705     static const struct file_operations spufs_proxydma_info_fops = {
706     diff --git a/arch/sparc/kernel/ptrace_32.c b/arch/sparc/kernel/ptrace_32.c
707     index a331fdc11a2c..396dbdea0cfa 100644
708     --- a/arch/sparc/kernel/ptrace_32.c
709     +++ b/arch/sparc/kernel/ptrace_32.c
710     @@ -45,82 +45,79 @@ enum sparc_regset {
711     REGSET_FP,
712     };
713    
714     +static int regwindow32_get(struct task_struct *target,
715     + const struct pt_regs *regs,
716     + u32 *uregs)
717     +{
718     + unsigned long reg_window = regs->u_regs[UREG_I6];
719     + int size = 16 * sizeof(u32);
720     +
721     + if (target == current) {
722     + if (copy_from_user(uregs, (void __user *)reg_window, size))
723     + return -EFAULT;
724     + } else {
725     + if (access_process_vm(target, reg_window, uregs, size,
726     + FOLL_FORCE) != size)
727     + return -EFAULT;
728     + }
729     + return 0;
730     +}
731     +
732     +static int regwindow32_set(struct task_struct *target,
733     + const struct pt_regs *regs,
734     + u32 *uregs)
735     +{
736     + unsigned long reg_window = regs->u_regs[UREG_I6];
737     + int size = 16 * sizeof(u32);
738     +
739     + if (target == current) {
740     + if (copy_to_user((void __user *)reg_window, uregs, size))
741     + return -EFAULT;
742     + } else {
743     + if (access_process_vm(target, reg_window, uregs, size,
744     + FOLL_FORCE | FOLL_WRITE) != size)
745     + return -EFAULT;
746     + }
747     + return 0;
748     +}
749     +
750     static int genregs32_get(struct task_struct *target,
751     const struct user_regset *regset,
752     unsigned int pos, unsigned int count,
753     void *kbuf, void __user *ubuf)
754     {
755     const struct pt_regs *regs = target->thread.kregs;
756     - unsigned long __user *reg_window;
757     - unsigned long *k = kbuf;
758     - unsigned long __user *u = ubuf;
759     - unsigned long reg;
760     + u32 uregs[16];
761     + int ret;
762    
763     if (target == current)
764     flush_user_windows();
765    
766     - pos /= sizeof(reg);
767     - count /= sizeof(reg);
768     -
769     - if (kbuf) {
770     - for (; count > 0 && pos < 16; count--)
771     - *k++ = regs->u_regs[pos++];
772     -
773     - reg_window = (unsigned long __user *) regs->u_regs[UREG_I6];
774     - reg_window -= 16;
775     - for (; count > 0 && pos < 32; count--) {
776     - if (get_user(*k++, &reg_window[pos++]))
777     - return -EFAULT;
778     - }
779     - } else {
780     - for (; count > 0 && pos < 16; count--) {
781     - if (put_user(regs->u_regs[pos++], u++))
782     - return -EFAULT;
783     - }
784     -
785     - reg_window = (unsigned long __user *) regs->u_regs[UREG_I6];
786     - reg_window -= 16;
787     - for (; count > 0 && pos < 32; count--) {
788     - if (get_user(reg, &reg_window[pos++]) ||
789     - put_user(reg, u++))
790     - return -EFAULT;
791     - }
792     - }
793     - while (count > 0) {
794     - switch (pos) {
795     - case 32: /* PSR */
796     - reg = regs->psr;
797     - break;
798     - case 33: /* PC */
799     - reg = regs->pc;
800     - break;
801     - case 34: /* NPC */
802     - reg = regs->npc;
803     - break;
804     - case 35: /* Y */
805     - reg = regs->y;
806     - break;
807     - case 36: /* WIM */
808     - case 37: /* TBR */
809     - reg = 0;
810     - break;
811     - default:
812     - goto finish;
813     - }
814     + ret = user_regset_copyout(&pos, &count, &kbuf, &ubuf,
815     + regs->u_regs,
816     + 0, 16 * sizeof(u32));
817     + if (ret || !count)
818     + return ret;
819    
820     - if (kbuf)
821     - *k++ = reg;
822     - else if (put_user(reg, u++))
823     + if (pos < 32 * sizeof(u32)) {
824     + if (regwindow32_get(target, regs, uregs))
825     return -EFAULT;
826     - pos++;
827     - count--;
828     + ret = user_regset_copyout(&pos, &count, &kbuf, &ubuf,
829     + uregs,
830     + 16 * sizeof(u32), 32 * sizeof(u32));
831     + if (ret || !count)
832     + return ret;
833     }
834     -finish:
835     - pos *= sizeof(reg);
836     - count *= sizeof(reg);
837    
838     - return user_regset_copyout_zero(&pos, &count, &kbuf, &ubuf,
839     - 38 * sizeof(reg), -1);
840     + uregs[0] = regs->psr;
841     + uregs[1] = regs->pc;
842     + uregs[2] = regs->npc;
843     + uregs[3] = regs->y;
844     + uregs[4] = 0; /* WIM */
845     + uregs[5] = 0; /* TBR */
846     + return user_regset_copyout(&pos, &count, &kbuf, &ubuf,
847     + uregs,
848     + 32 * sizeof(u32), 38 * sizeof(u32));
849     }
850    
851     static int genregs32_set(struct task_struct *target,
852     @@ -129,82 +126,53 @@ static int genregs32_set(struct task_struct *target,
853     const void *kbuf, const void __user *ubuf)
854     {
855     struct pt_regs *regs = target->thread.kregs;
856     - unsigned long __user *reg_window;
857     - const unsigned long *k = kbuf;
858     - const unsigned long __user *u = ubuf;
859     - unsigned long reg;
860     + u32 uregs[16];
861     + u32 psr;
862     + int ret;
863    
864     if (target == current)
865     flush_user_windows();
866    
867     - pos /= sizeof(reg);
868     - count /= sizeof(reg);
869     -
870     - if (kbuf) {
871     - for (; count > 0 && pos < 16; count--)
872     - regs->u_regs[pos++] = *k++;
873     -
874     - reg_window = (unsigned long __user *) regs->u_regs[UREG_I6];
875     - reg_window -= 16;
876     - for (; count > 0 && pos < 32; count--) {
877     - if (put_user(*k++, &reg_window[pos++]))
878     - return -EFAULT;
879     - }
880     - } else {
881     - for (; count > 0 && pos < 16; count--) {
882     - if (get_user(reg, u++))
883     - return -EFAULT;
884     - regs->u_regs[pos++] = reg;
885     - }
886     -
887     - reg_window = (unsigned long __user *) regs->u_regs[UREG_I6];
888     - reg_window -= 16;
889     - for (; count > 0 && pos < 32; count--) {
890     - if (get_user(reg, u++) ||
891     - put_user(reg, &reg_window[pos++]))
892     - return -EFAULT;
893     - }
894     - }
895     - while (count > 0) {
896     - unsigned long psr;
897     + ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
898     + regs->u_regs,
899     + 0, 16 * sizeof(u32));
900     + if (ret || !count)
901     + return ret;
902    
903     - if (kbuf)
904     - reg = *k++;
905     - else if (get_user(reg, u++))
906     + if (pos < 32 * sizeof(u32)) {
907     + if (regwindow32_get(target, regs, uregs))
908     return -EFAULT;
909     -
910     - switch (pos) {
911     - case 32: /* PSR */
912     - psr = regs->psr;
913     - psr &= ~(PSR_ICC | PSR_SYSCALL);
914     - psr |= (reg & (PSR_ICC | PSR_SYSCALL));
915     - regs->psr = psr;
916     - break;
917     - case 33: /* PC */
918     - regs->pc = reg;
919     - break;
920     - case 34: /* NPC */
921     - regs->npc = reg;
922     - break;
923     - case 35: /* Y */
924     - regs->y = reg;
925     - break;
926     - case 36: /* WIM */
927     - case 37: /* TBR */
928     - break;
929     - default:
930     - goto finish;
931     - }
932     -
933     - pos++;
934     - count--;
935     + ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
936     + uregs,
937     + 16 * sizeof(u32), 32 * sizeof(u32));
938     + if (ret)
939     + return ret;
940     + if (regwindow32_set(target, regs, uregs))
941     + return -EFAULT;
942     + if (!count)
943     + return 0;
944     }
945     -finish:
946     - pos *= sizeof(reg);
947     - count *= sizeof(reg);
948     -
949     + ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
950     + &psr,
951     + 32 * sizeof(u32), 33 * sizeof(u32));
952     + if (ret)
953     + return ret;
954     + regs->psr = (regs->psr & ~(PSR_ICC | PSR_SYSCALL)) |
955     + (psr & (PSR_ICC | PSR_SYSCALL));
956     + if (!count)
957     + return 0;
958     + ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
959     + &regs->pc,
960     + 33 * sizeof(u32), 34 * sizeof(u32));
961     + if (ret || !count)
962     + return ret;
963     + ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
964     + &regs->y,
965     + 34 * sizeof(u32), 35 * sizeof(u32));
966     + if (ret || !count)
967     + return ret;
968     return user_regset_copyin_ignore(&pos, &count, &kbuf, &ubuf,
969     - 38 * sizeof(reg), -1);
970     + 35 * sizeof(u32), 38 * sizeof(u32));
971     }
972    
973     static int fpregs32_get(struct task_struct *target,
974     diff --git a/arch/sparc/kernel/ptrace_64.c b/arch/sparc/kernel/ptrace_64.c
975     index 7037ca3b4328..0a89a0546077 100644
976     --- a/arch/sparc/kernel/ptrace_64.c
977     +++ b/arch/sparc/kernel/ptrace_64.c
978     @@ -533,19 +533,13 @@ static int genregs32_get(struct task_struct *target,
979     for (; count > 0 && pos < 32; count--) {
980     if (access_process_vm(target,
981     (unsigned long)
982     - &reg_window[pos],
983     + &reg_window[pos++],
984     &reg, sizeof(reg),
985     FOLL_FORCE)
986     != sizeof(reg))
987     return -EFAULT;
988     - if (access_process_vm(target,
989     - (unsigned long) u,
990     - &reg, sizeof(reg),
991     - FOLL_FORCE | FOLL_WRITE)
992     - != sizeof(reg))
993     + if (put_user(reg, u++))
994     return -EFAULT;
995     - pos++;
996     - u++;
997     }
998     }
999     }
1000     @@ -645,12 +639,7 @@ static int genregs32_set(struct task_struct *target,
1001     }
1002     } else {
1003     for (; count > 0 && pos < 32; count--) {
1004     - if (access_process_vm(target,
1005     - (unsigned long)
1006     - u,
1007     - &reg, sizeof(reg),
1008     - FOLL_FORCE)
1009     - != sizeof(reg))
1010     + if (get_user(reg, u++))
1011     return -EFAULT;
1012     if (access_process_vm(target,
1013     (unsigned long)
1014     diff --git a/arch/x86/boot/compressed/head_32.S b/arch/x86/boot/compressed/head_32.S
1015     index 7532f6f53677..93f41b4f05ce 100644
1016     --- a/arch/x86/boot/compressed/head_32.S
1017     +++ b/arch/x86/boot/compressed/head_32.S
1018     @@ -48,16 +48,17 @@
1019     * Position Independent Executable (PIE) so that linker won't optimize
1020     * R_386_GOT32X relocation to its fixed symbol address. Older
1021     * linkers generate R_386_32 relocations against locally defined symbols,
1022     - * _bss, _ebss, _got and _egot, in PIE. It isn't wrong, just less
1023     + * _bss, _ebss, _got, _egot and _end, in PIE. It isn't wrong, just less
1024     * optimal than R_386_RELATIVE. But the x86 kernel fails to properly handle
1025     * R_386_32 relocations when relocating the kernel. To generate
1026     - * R_386_RELATIVE relocations, we mark _bss, _ebss, _got and _egot as
1027     + * R_386_RELATIVE relocations, we mark _bss, _ebss, _got, _egot and _end as
1028     * hidden:
1029     */
1030     .hidden _bss
1031     .hidden _ebss
1032     .hidden _got
1033     .hidden _egot
1034     + .hidden _end
1035    
1036     __HEAD
1037     ENTRY(startup_32)
1038     diff --git a/arch/x86/boot/compressed/head_64.S b/arch/x86/boot/compressed/head_64.S
1039     index 3fac2d133e4e..d096bcfcb3f6 100644
1040     --- a/arch/x86/boot/compressed/head_64.S
1041     +++ b/arch/x86/boot/compressed/head_64.S
1042     @@ -40,6 +40,7 @@
1043     .hidden _ebss
1044     .hidden _got
1045     .hidden _egot
1046     + .hidden _end
1047    
1048     __HEAD
1049     .code32
1050     diff --git a/arch/x86/include/asm/cpufeatures.h b/arch/x86/include/asm/cpufeatures.h
1051     index 2cd5d12a842c..8ceb7a8a249c 100644
1052     --- a/arch/x86/include/asm/cpufeatures.h
1053     +++ b/arch/x86/include/asm/cpufeatures.h
1054     @@ -273,6 +273,7 @@
1055     #define X86_FEATURE_AMD_IBPB (13*32+12) /* "" Indirect Branch Prediction Barrier */
1056     #define X86_FEATURE_AMD_IBRS (13*32+14) /* "" Indirect Branch Restricted Speculation */
1057     #define X86_FEATURE_AMD_STIBP (13*32+15) /* "" Single Thread Indirect Branch Predictors */
1058     +#define X86_FEATURE_AMD_STIBP_ALWAYS_ON (13*32+17) /* "" Single Thread Indirect Branch Predictors always-on preferred */
1059     #define X86_FEATURE_AMD_SSBD (13*32+24) /* "" Speculative Store Bypass Disable */
1060     #define X86_FEATURE_VIRT_SSBD (13*32+25) /* Virtualized Speculative Store Bypass Disable */
1061     #define X86_FEATURE_AMD_SSB_NO (13*32+26) /* "" Speculative Store Bypass is fixed in hardware. */
1062     @@ -312,7 +313,6 @@
1063     #define X86_FEATURE_SUCCOR (17*32+1) /* Uncorrectable error containment and recovery */
1064     #define X86_FEATURE_SMCA (17*32+3) /* Scalable MCA */
1065    
1066     -
1067     /* Intel-defined CPU features, CPUID level 0x00000007:0 (EDX), word 18 */
1068     #define X86_FEATURE_AVX512_4VNNIW (18*32+ 2) /* AVX-512 Neural Network Instructions */
1069     #define X86_FEATURE_AVX512_4FMAPS (18*32+ 3) /* AVX-512 Multiply Accumulation Single precision */
1070     diff --git a/arch/x86/include/asm/nospec-branch.h b/arch/x86/include/asm/nospec-branch.h
1071     index 8d56d701b5f7..4af16acc001a 100644
1072     --- a/arch/x86/include/asm/nospec-branch.h
1073     +++ b/arch/x86/include/asm/nospec-branch.h
1074     @@ -223,6 +223,7 @@ enum spectre_v2_mitigation {
1075     enum spectre_v2_user_mitigation {
1076     SPECTRE_V2_USER_NONE,
1077     SPECTRE_V2_USER_STRICT,
1078     + SPECTRE_V2_USER_STRICT_PREFERRED,
1079     SPECTRE_V2_USER_PRCTL,
1080     SPECTRE_V2_USER_SECCOMP,
1081     };
1082     diff --git a/arch/x86/kernel/cpu/bugs.c b/arch/x86/kernel/cpu/bugs.c
1083     index 5ef0a2b34261..85c1cc0305f3 100644
1084     --- a/arch/x86/kernel/cpu/bugs.c
1085     +++ b/arch/x86/kernel/cpu/bugs.c
1086     @@ -60,7 +60,7 @@ static u64 __ro_after_init x86_spec_ctrl_mask = SPEC_CTRL_IBRS;
1087     u64 __ro_after_init x86_amd_ls_cfg_base;
1088     u64 __ro_after_init x86_amd_ls_cfg_ssbd_mask;
1089    
1090     -/* Control conditional STIPB in switch_to() */
1091     +/* Control conditional STIBP in switch_to() */
1092     DEFINE_STATIC_KEY_FALSE(switch_to_cond_stibp);
1093     /* Control conditional IBPB in switch_mm() */
1094     DEFINE_STATIC_KEY_FALSE(switch_mm_cond_ibpb);
1095     @@ -580,7 +580,9 @@ early_param("nospectre_v1", nospectre_v1_cmdline);
1096     static enum spectre_v2_mitigation spectre_v2_enabled __ro_after_init =
1097     SPECTRE_V2_NONE;
1098    
1099     -static enum spectre_v2_user_mitigation spectre_v2_user __ro_after_init =
1100     +static enum spectre_v2_user_mitigation spectre_v2_user_stibp __ro_after_init =
1101     + SPECTRE_V2_USER_NONE;
1102     +static enum spectre_v2_user_mitigation spectre_v2_user_ibpb __ro_after_init =
1103     SPECTRE_V2_USER_NONE;
1104    
1105     #ifdef RETPOLINE
1106     @@ -632,10 +634,11 @@ enum spectre_v2_user_cmd {
1107     };
1108    
1109     static const char * const spectre_v2_user_strings[] = {
1110     - [SPECTRE_V2_USER_NONE] = "User space: Vulnerable",
1111     - [SPECTRE_V2_USER_STRICT] = "User space: Mitigation: STIBP protection",
1112     - [SPECTRE_V2_USER_PRCTL] = "User space: Mitigation: STIBP via prctl",
1113     - [SPECTRE_V2_USER_SECCOMP] = "User space: Mitigation: STIBP via seccomp and prctl",
1114     + [SPECTRE_V2_USER_NONE] = "User space: Vulnerable",
1115     + [SPECTRE_V2_USER_STRICT] = "User space: Mitigation: STIBP protection",
1116     + [SPECTRE_V2_USER_STRICT_PREFERRED] = "User space: Mitigation: STIBP always-on protection",
1117     + [SPECTRE_V2_USER_PRCTL] = "User space: Mitigation: STIBP via prctl",
1118     + [SPECTRE_V2_USER_SECCOMP] = "User space: Mitigation: STIBP via seccomp and prctl",
1119     };
1120    
1121     static const struct {
1122     @@ -747,23 +750,36 @@ spectre_v2_user_select_mitigation(enum spectre_v2_mitigation_cmd v2_cmd)
1123     pr_info("mitigation: Enabling %s Indirect Branch Prediction Barrier\n",
1124     static_key_enabled(&switch_mm_always_ibpb) ?
1125     "always-on" : "conditional");
1126     +
1127     + spectre_v2_user_ibpb = mode;
1128     }
1129    
1130     - /* If enhanced IBRS is enabled no STIPB required */
1131     - if (spectre_v2_enabled == SPECTRE_V2_IBRS_ENHANCED)
1132     + /*
1133     + * If enhanced IBRS is enabled or SMT impossible, STIBP is not
1134     + * required.
1135     + */
1136     + if (!smt_possible || spectre_v2_enabled == SPECTRE_V2_IBRS_ENHANCED)
1137     return;
1138    
1139     /*
1140     - * If SMT is not possible or STIBP is not available clear the STIPB
1141     - * mode.
1142     + * At this point, an STIBP mode other than "off" has been set.
1143     + * If STIBP support is not being forced, check if STIBP always-on
1144     + * is preferred.
1145     */
1146     - if (!smt_possible || !boot_cpu_has(X86_FEATURE_STIBP))
1147     + if (mode != SPECTRE_V2_USER_STRICT &&
1148     + boot_cpu_has(X86_FEATURE_AMD_STIBP_ALWAYS_ON))
1149     + mode = SPECTRE_V2_USER_STRICT_PREFERRED;
1150     +
1151     + /*
1152     + * If STIBP is not available, clear the STIBP mode.
1153     + */
1154     + if (!boot_cpu_has(X86_FEATURE_STIBP))
1155     mode = SPECTRE_V2_USER_NONE;
1156     +
1157     + spectre_v2_user_stibp = mode;
1158     +
1159     set_mode:
1160     - spectre_v2_user = mode;
1161     - /* Only print the STIBP mode when SMT possible */
1162     - if (smt_possible)
1163     - pr_info("%s\n", spectre_v2_user_strings[mode]);
1164     + pr_info("%s\n", spectre_v2_user_strings[mode]);
1165     }
1166    
1167     static const char * const spectre_v2_strings[] = {
1168     @@ -1003,10 +1019,11 @@ void arch_smt_update(void)
1169     {
1170     mutex_lock(&spec_ctrl_mutex);
1171    
1172     - switch (spectre_v2_user) {
1173     + switch (spectre_v2_user_stibp) {
1174     case SPECTRE_V2_USER_NONE:
1175     break;
1176     case SPECTRE_V2_USER_STRICT:
1177     + case SPECTRE_V2_USER_STRICT_PREFERRED:
1178     update_stibp_strict();
1179     break;
1180     case SPECTRE_V2_USER_PRCTL:
1181     @@ -1235,13 +1252,19 @@ static int ib_prctl_set(struct task_struct *task, unsigned long ctrl)
1182     {
1183     switch (ctrl) {
1184     case PR_SPEC_ENABLE:
1185     - if (spectre_v2_user == SPECTRE_V2_USER_NONE)
1186     + if (spectre_v2_user_ibpb == SPECTRE_V2_USER_NONE &&
1187     + spectre_v2_user_stibp == SPECTRE_V2_USER_NONE)
1188     return 0;
1189     /*
1190     * Indirect branch speculation is always disabled in strict
1191     - * mode.
1192     + * mode. It can neither be enabled if it was force-disabled
1193     + * by a previous prctl call.
1194     +
1195     */
1196     - if (spectre_v2_user == SPECTRE_V2_USER_STRICT)
1197     + if (spectre_v2_user_ibpb == SPECTRE_V2_USER_STRICT ||
1198     + spectre_v2_user_stibp == SPECTRE_V2_USER_STRICT ||
1199     + spectre_v2_user_stibp == SPECTRE_V2_USER_STRICT_PREFERRED ||
1200     + task_spec_ib_force_disable(task))
1201     return -EPERM;
1202     task_clear_spec_ib_disable(task);
1203     task_update_spec_tif(task);
1204     @@ -1252,9 +1275,12 @@ static int ib_prctl_set(struct task_struct *task, unsigned long ctrl)
1205     * Indirect branch speculation is always allowed when
1206     * mitigation is force disabled.
1207     */
1208     - if (spectre_v2_user == SPECTRE_V2_USER_NONE)
1209     + if (spectre_v2_user_ibpb == SPECTRE_V2_USER_NONE &&
1210     + spectre_v2_user_stibp == SPECTRE_V2_USER_NONE)
1211     return -EPERM;
1212     - if (spectre_v2_user == SPECTRE_V2_USER_STRICT)
1213     + if (spectre_v2_user_ibpb == SPECTRE_V2_USER_STRICT ||
1214     + spectre_v2_user_stibp == SPECTRE_V2_USER_STRICT ||
1215     + spectre_v2_user_stibp == SPECTRE_V2_USER_STRICT_PREFERRED)
1216     return 0;
1217     task_set_spec_ib_disable(task);
1218     if (ctrl == PR_SPEC_FORCE_DISABLE)
1219     @@ -1285,7 +1311,8 @@ void arch_seccomp_spec_mitigate(struct task_struct *task)
1220     {
1221     if (ssb_mode == SPEC_STORE_BYPASS_SECCOMP)
1222     ssb_prctl_set(task, PR_SPEC_FORCE_DISABLE);
1223     - if (spectre_v2_user == SPECTRE_V2_USER_SECCOMP)
1224     + if (spectre_v2_user_ibpb == SPECTRE_V2_USER_SECCOMP ||
1225     + spectre_v2_user_stibp == SPECTRE_V2_USER_SECCOMP)
1226     ib_prctl_set(task, PR_SPEC_FORCE_DISABLE);
1227     }
1228     #endif
1229     @@ -1314,21 +1341,24 @@ static int ib_prctl_get(struct task_struct *task)
1230     if (!boot_cpu_has_bug(X86_BUG_SPECTRE_V2))
1231     return PR_SPEC_NOT_AFFECTED;
1232    
1233     - switch (spectre_v2_user) {
1234     - case SPECTRE_V2_USER_NONE:
1235     + if (spectre_v2_user_ibpb == SPECTRE_V2_USER_NONE &&
1236     + spectre_v2_user_stibp == SPECTRE_V2_USER_NONE)
1237     return PR_SPEC_ENABLE;
1238     - case SPECTRE_V2_USER_PRCTL:
1239     - case SPECTRE_V2_USER_SECCOMP:
1240     + else if (spectre_v2_user_ibpb == SPECTRE_V2_USER_STRICT ||
1241     + spectre_v2_user_stibp == SPECTRE_V2_USER_STRICT ||
1242     + spectre_v2_user_stibp == SPECTRE_V2_USER_STRICT_PREFERRED)
1243     + return PR_SPEC_DISABLE;
1244     + else if (spectre_v2_user_ibpb == SPECTRE_V2_USER_PRCTL ||
1245     + spectre_v2_user_ibpb == SPECTRE_V2_USER_SECCOMP ||
1246     + spectre_v2_user_stibp == SPECTRE_V2_USER_PRCTL ||
1247     + spectre_v2_user_stibp == SPECTRE_V2_USER_SECCOMP) {
1248     if (task_spec_ib_force_disable(task))
1249     return PR_SPEC_PRCTL | PR_SPEC_FORCE_DISABLE;
1250     if (task_spec_ib_disable(task))
1251     return PR_SPEC_PRCTL | PR_SPEC_DISABLE;
1252     return PR_SPEC_PRCTL | PR_SPEC_ENABLE;
1253     - case SPECTRE_V2_USER_STRICT:
1254     - return PR_SPEC_DISABLE;
1255     - default:
1256     + } else
1257     return PR_SPEC_NOT_AFFECTED;
1258     - }
1259     }
1260    
1261     int arch_prctl_spec_ctrl_get(struct task_struct *task, unsigned long which)
1262     @@ -1569,11 +1599,13 @@ static char *stibp_state(void)
1263     if (spectre_v2_enabled == SPECTRE_V2_IBRS_ENHANCED)
1264     return "";
1265    
1266     - switch (spectre_v2_user) {
1267     + switch (spectre_v2_user_stibp) {
1268     case SPECTRE_V2_USER_NONE:
1269     return ", STIBP: disabled";
1270     case SPECTRE_V2_USER_STRICT:
1271     return ", STIBP: forced";
1272     + case SPECTRE_V2_USER_STRICT_PREFERRED:
1273     + return ", STIBP: always-on";
1274     case SPECTRE_V2_USER_PRCTL:
1275     case SPECTRE_V2_USER_SECCOMP:
1276     if (static_key_enabled(&switch_to_cond_stibp))
1277     diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c
1278     index 2e4eab22ca37..f58e4cc20c1c 100644
1279     --- a/arch/x86/kernel/process.c
1280     +++ b/arch/x86/kernel/process.c
1281     @@ -337,28 +337,20 @@ static __always_inline void __speculation_ctrl_update(unsigned long tifp,
1282     u64 msr = x86_spec_ctrl_base;
1283     bool updmsr = false;
1284    
1285     - /*
1286     - * If TIF_SSBD is different, select the proper mitigation
1287     - * method. Note that if SSBD mitigation is disabled or permanentely
1288     - * enabled this branch can't be taken because nothing can set
1289     - * TIF_SSBD.
1290     - */
1291     - if (tif_diff & _TIF_SSBD) {
1292     - if (static_cpu_has(X86_FEATURE_VIRT_SSBD)) {
1293     + /* Handle change of TIF_SSBD depending on the mitigation method. */
1294     + if (static_cpu_has(X86_FEATURE_VIRT_SSBD)) {
1295     + if (tif_diff & _TIF_SSBD)
1296     amd_set_ssb_virt_state(tifn);
1297     - } else if (static_cpu_has(X86_FEATURE_LS_CFG_SSBD)) {
1298     + } else if (static_cpu_has(X86_FEATURE_LS_CFG_SSBD)) {
1299     + if (tif_diff & _TIF_SSBD)
1300     amd_set_core_ssb_state(tifn);
1301     - } else if (static_cpu_has(X86_FEATURE_SPEC_CTRL_SSBD) ||
1302     - static_cpu_has(X86_FEATURE_AMD_SSBD)) {
1303     - msr |= ssbd_tif_to_spec_ctrl(tifn);
1304     - updmsr = true;
1305     - }
1306     + } else if (static_cpu_has(X86_FEATURE_SPEC_CTRL_SSBD) ||
1307     + static_cpu_has(X86_FEATURE_AMD_SSBD)) {
1308     + updmsr |= !!(tif_diff & _TIF_SSBD);
1309     + msr |= ssbd_tif_to_spec_ctrl(tifn);
1310     }
1311    
1312     - /*
1313     - * Only evaluate TIF_SPEC_IB if conditional STIBP is enabled,
1314     - * otherwise avoid the MSR write.
1315     - */
1316     + /* Only evaluate TIF_SPEC_IB if conditional STIBP is enabled. */
1317     if (IS_ENABLED(CONFIG_SMP) &&
1318     static_branch_unlikely(&switch_to_cond_stibp)) {
1319     updmsr |= !!(tif_diff & _TIF_SPEC_IB);
1320     diff --git a/arch/x86/kernel/process.h b/arch/x86/kernel/process.h
1321     index 898e97cf6629..320ab978fb1f 100644
1322     --- a/arch/x86/kernel/process.h
1323     +++ b/arch/x86/kernel/process.h
1324     @@ -19,7 +19,7 @@ static inline void switch_to_extra(struct task_struct *prev,
1325     if (IS_ENABLED(CONFIG_SMP)) {
1326     /*
1327     * Avoid __switch_to_xtra() invocation when conditional
1328     - * STIPB is disabled and the only different bit is
1329     + * STIBP is disabled and the only different bit is
1330     * TIF_SPEC_IB. For CONFIG_SMP=n TIF_SPEC_IB is not
1331     * in the TIF_WORK_CTXSW masks.
1332     */
1333     diff --git a/arch/x86/kernel/reboot.c b/arch/x86/kernel/reboot.c
1334     index c55b11fe8e9f..b427dc73ba27 100644
1335     --- a/arch/x86/kernel/reboot.c
1336     +++ b/arch/x86/kernel/reboot.c
1337     @@ -198,6 +198,14 @@ static struct dmi_system_id __initdata reboot_dmi_table[] = {
1338     DMI_MATCH(DMI_PRODUCT_NAME, "MacBook5"),
1339     },
1340     },
1341     + { /* Handle problems with rebooting on Apple MacBook6,1 */
1342     + .callback = set_pci_reboot,
1343     + .ident = "Apple MacBook6,1",
1344     + .matches = {
1345     + DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
1346     + DMI_MATCH(DMI_PRODUCT_NAME, "MacBook6,1"),
1347     + },
1348     + },
1349     { /* Handle problems with rebooting on Apple MacBookPro5 */
1350     .callback = set_pci_reboot,
1351     .ident = "Apple MacBookPro5",
1352     diff --git a/arch/x86/kernel/time.c b/arch/x86/kernel/time.c
1353     index 89d1190b9d94..5e5de7a7f38d 100644
1354     --- a/arch/x86/kernel/time.c
1355     +++ b/arch/x86/kernel/time.c
1356     @@ -23,10 +23,6 @@
1357     #include <asm/hpet.h>
1358     #include <asm/time.h>
1359    
1360     -#ifdef CONFIG_X86_64
1361     -__visible volatile unsigned long jiffies __cacheline_aligned_in_smp = INITIAL_JIFFIES;
1362     -#endif
1363     -
1364     unsigned long profile_pc(struct pt_regs *regs)
1365     {
1366     unsigned long pc = instruction_pointer(regs);
1367     diff --git a/arch/x86/kernel/vmlinux.lds.S b/arch/x86/kernel/vmlinux.lds.S
1368     index 55f04875293f..097268f85e4e 100644
1369     --- a/arch/x86/kernel/vmlinux.lds.S
1370     +++ b/arch/x86/kernel/vmlinux.lds.S
1371     @@ -34,13 +34,13 @@ OUTPUT_FORMAT(CONFIG_OUTPUT_FORMAT, CONFIG_OUTPUT_FORMAT, CONFIG_OUTPUT_FORMAT)
1372     #ifdef CONFIG_X86_32
1373     OUTPUT_ARCH(i386)
1374     ENTRY(phys_startup_32)
1375     -jiffies = jiffies_64;
1376     #else
1377     OUTPUT_ARCH(i386:x86-64)
1378     ENTRY(phys_startup_64)
1379     -jiffies_64 = jiffies;
1380     #endif
1381    
1382     +jiffies = jiffies_64;
1383     +
1384     #if defined(CONFIG_X86_64)
1385     /*
1386     * On 64-bit, align RODATA to 2MB so we retain large page mappings for
1387     diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
1388     index 1079228e4fef..29078eaf18c9 100644
1389     --- a/arch/x86/kvm/svm.c
1390     +++ b/arch/x86/kvm/svm.c
1391     @@ -2734,7 +2734,7 @@ static inline void copy_vmcb_control_area(struct vmcb *dst_vmcb, struct vmcb *fr
1392     dst->iopm_base_pa = from->iopm_base_pa;
1393     dst->msrpm_base_pa = from->msrpm_base_pa;
1394     dst->tsc_offset = from->tsc_offset;
1395     - dst->asid = from->asid;
1396     + /* asid not copied, it is handled manually for svm->vmcb. */
1397     dst->tlb_ctl = from->tlb_ctl;
1398     dst->int_ctl = from->int_ctl;
1399     dst->int_vector = from->int_vector;
1400     diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
1401     index b62886f10dc1..e7fe5974c81c 100644
1402     --- a/arch/x86/kvm/vmx.c
1403     +++ b/arch/x86/kvm/vmx.c
1404     @@ -8207,7 +8207,7 @@ static bool nested_vmx_exit_handled(struct kvm_vcpu *vcpu)
1405     return true;
1406     }
1407    
1408     - switch (exit_reason) {
1409     + switch ((u16)exit_reason) {
1410     case EXIT_REASON_EXCEPTION_NMI:
1411     if (is_nmi(intr_info))
1412     return false;
1413     diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
1414     index ce092a62fc5d..bc2455c2fcab 100644
1415     --- a/arch/x86/mm/init.c
1416     +++ b/arch/x86/mm/init.c
1417     @@ -110,8 +110,6 @@ __ref void *alloc_low_pages(unsigned int num)
1418     } else {
1419     pfn = pgt_buf_end;
1420     pgt_buf_end += num;
1421     - printk(KERN_DEBUG "BRK [%#010lx, %#010lx] PGTABLE\n",
1422     - pfn << PAGE_SHIFT, (pgt_buf_end << PAGE_SHIFT) - 1);
1423     }
1424    
1425     for (i = 0; i < num; i++) {
1426     diff --git a/arch/x86/pci/fixup.c b/arch/x86/pci/fixup.c
1427     index 62950ef7f84e..68e86d7cc94d 100644
1428     --- a/arch/x86/pci/fixup.c
1429     +++ b/arch/x86/pci/fixup.c
1430     @@ -571,6 +571,10 @@ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x2fc0, pci_invalid_bar);
1431     DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x6f60, pci_invalid_bar);
1432     DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x6fa0, pci_invalid_bar);
1433     DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x6fc0, pci_invalid_bar);
1434     +DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0xa1ec, pci_invalid_bar);
1435     +DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0xa1ed, pci_invalid_bar);
1436     +DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0xa26c, pci_invalid_bar);
1437     +DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0xa26d, pci_invalid_bar);
1438    
1439     /*
1440     * Device [1022:7914]
1441     diff --git a/block/blk-mq.c b/block/blk-mq.c
1442     index 58be2eaa5aaa..e0ed7317e98c 100644
1443     --- a/block/blk-mq.c
1444     +++ b/block/blk-mq.c
1445     @@ -2331,6 +2331,10 @@ void blk_mq_update_nr_hw_queues(struct blk_mq_tag_set *set, int nr_hw_queues)
1446    
1447     list_for_each_entry(q, &set->tag_list, tag_set_list)
1448     blk_mq_freeze_queue(q);
1449     + /*
1450     + * Sync with blk_mq_queue_tag_busy_iter.
1451     + */
1452     + synchronize_rcu();
1453    
1454     set->nr_hw_queues = nr_hw_queues;
1455     list_for_each_entry(q, &set->tag_list, tag_set_list) {
1456     @@ -2346,10 +2350,6 @@ void blk_mq_update_nr_hw_queues(struct blk_mq_tag_set *set, int nr_hw_queues)
1457    
1458     list_for_each_entry(q, &set->tag_list, tag_set_list)
1459     blk_mq_unfreeze_queue(q);
1460     - /*
1461     - * Sync with blk_mq_queue_tag_busy_iter.
1462     - */
1463     - synchronize_rcu();
1464     }
1465     EXPORT_SYMBOL_GPL(blk_mq_update_nr_hw_queues);
1466    
1467     diff --git a/drivers/acpi/cppc_acpi.c b/drivers/acpi/cppc_acpi.c
1468     index 9ec4618df533..318bdfb8703c 100644
1469     --- a/drivers/acpi/cppc_acpi.c
1470     +++ b/drivers/acpi/cppc_acpi.c
1471     @@ -793,8 +793,10 @@ int acpi_cppc_processor_probe(struct acpi_processor *pr)
1472    
1473     ret = kobject_init_and_add(&cpc_ptr->kobj, &cppc_ktype, &cpu_dev->kobj,
1474     "acpi_cppc");
1475     - if (ret)
1476     + if (ret) {
1477     + kobject_put(&cpc_ptr->kobj);
1478     goto out_free;
1479     + }
1480    
1481     kfree(output.pointer);
1482     return 0;
1483     diff --git a/drivers/acpi/device_pm.c b/drivers/acpi/device_pm.c
1484     index 245bcdb44c64..442aac84ab88 100644
1485     --- a/drivers/acpi/device_pm.c
1486     +++ b/drivers/acpi/device_pm.c
1487     @@ -171,7 +171,7 @@ int acpi_device_set_power(struct acpi_device *device, int state)
1488     * possibly drop references to the power resources in use.
1489     */
1490     state = ACPI_STATE_D3_HOT;
1491     - /* If _PR3 is not available, use D3hot as the target state. */
1492     + /* If D3cold is not supported, use D3hot as the target state. */
1493     if (!device->power.states[ACPI_STATE_D3_COLD].flags.valid)
1494     target_state = state;
1495     } else if (!device->power.states[state].flags.valid) {
1496     diff --git a/drivers/acpi/evged.c b/drivers/acpi/evged.c
1497     index 46f060356a22..339e6d3dba7c 100644
1498     --- a/drivers/acpi/evged.c
1499     +++ b/drivers/acpi/evged.c
1500     @@ -82,6 +82,8 @@ static acpi_status acpi_ged_request_interrupt(struct acpi_resource *ares,
1501     struct resource r;
1502     struct acpi_resource_irq *p = &ares->data.irq;
1503     struct acpi_resource_extended_irq *pext = &ares->data.extended_irq;
1504     + char ev_name[5];
1505     + u8 trigger;
1506    
1507     if (ares->type == ACPI_RESOURCE_TYPE_END_TAG)
1508     return AE_OK;
1509     @@ -90,14 +92,28 @@ static acpi_status acpi_ged_request_interrupt(struct acpi_resource *ares,
1510     dev_err(dev, "unable to parse IRQ resource\n");
1511     return AE_ERROR;
1512     }
1513     - if (ares->type == ACPI_RESOURCE_TYPE_IRQ)
1514     + if (ares->type == ACPI_RESOURCE_TYPE_IRQ) {
1515     gsi = p->interrupts[0];
1516     - else
1517     + trigger = p->triggering;
1518     + } else {
1519     gsi = pext->interrupts[0];
1520     + trigger = pext->triggering;
1521     + }
1522    
1523     irq = r.start;
1524    
1525     - if (ACPI_FAILURE(acpi_get_handle(handle, "_EVT", &evt_handle))) {
1526     + switch (gsi) {
1527     + case 0 ... 255:
1528     + sprintf(ev_name, "_%c%02hhX",
1529     + trigger == ACPI_EDGE_SENSITIVE ? 'E' : 'L', gsi);
1530     +
1531     + if (ACPI_SUCCESS(acpi_get_handle(handle, ev_name, &evt_handle)))
1532     + break;
1533     + /* fall through */
1534     + default:
1535     + if (ACPI_SUCCESS(acpi_get_handle(handle, "_EVT", &evt_handle)))
1536     + break;
1537     +
1538     dev_err(dev, "cannot locate _EVT method\n");
1539     return AE_ERROR;
1540     }
1541     diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
1542     index 0792ec5a9efc..9a7f017dda47 100644
1543     --- a/drivers/acpi/scan.c
1544     +++ b/drivers/acpi/scan.c
1545     @@ -927,12 +927,9 @@ static void acpi_bus_init_power_state(struct acpi_device *device, int state)
1546    
1547     if (buffer.length && package
1548     && package->type == ACPI_TYPE_PACKAGE
1549     - && package->package.count) {
1550     - int err = acpi_extract_power_resources(package, 0,
1551     - &ps->resources);
1552     - if (!err)
1553     - device->power.flags.power_resources = 1;
1554     - }
1555     + && package->package.count)
1556     + acpi_extract_power_resources(package, 0, &ps->resources);
1557     +
1558     ACPI_FREE(buffer.pointer);
1559     }
1560    
1561     @@ -979,14 +976,27 @@ static void acpi_bus_get_power_flags(struct acpi_device *device)
1562     acpi_bus_init_power_state(device, i);
1563    
1564     INIT_LIST_HEAD(&device->power.states[ACPI_STATE_D3_COLD].resources);
1565     - if (!list_empty(&device->power.states[ACPI_STATE_D3_HOT].resources))
1566     - device->power.states[ACPI_STATE_D3_COLD].flags.valid = 1;
1567    
1568     - /* Set defaults for D0 and D3hot states (always valid) */
1569     + /* Set the defaults for D0 and D3hot (always supported). */
1570     device->power.states[ACPI_STATE_D0].flags.valid = 1;
1571     device->power.states[ACPI_STATE_D0].power = 100;
1572     device->power.states[ACPI_STATE_D3_HOT].flags.valid = 1;
1573    
1574     + /*
1575     + * Use power resources only if the D0 list of them is populated, because
1576     + * some platforms may provide _PR3 only to indicate D3cold support and
1577     + * in those cases the power resources list returned by it may be bogus.
1578     + */
1579     + if (!list_empty(&device->power.states[ACPI_STATE_D0].resources)) {
1580     + device->power.flags.power_resources = 1;
1581     + /*
1582     + * D3cold is supported if the D3hot list of power resources is
1583     + * not empty.
1584     + */
1585     + if (!list_empty(&device->power.states[ACPI_STATE_D3_HOT].resources))
1586     + device->power.states[ACPI_STATE_D3_COLD].flags.valid = 1;
1587     + }
1588     +
1589     if (acpi_bus_init_power(device))
1590     device->flags.power_manageable = 0;
1591     }
1592     diff --git a/drivers/acpi/sysfs.c b/drivers/acpi/sysfs.c
1593     index a36d0739dbfe..7502441b1400 100644
1594     --- a/drivers/acpi/sysfs.c
1595     +++ b/drivers/acpi/sysfs.c
1596     @@ -898,8 +898,10 @@ void acpi_sysfs_add_hotplug_profile(struct acpi_hotplug_profile *hotplug,
1597    
1598     error = kobject_init_and_add(&hotplug->kobj,
1599     &acpi_hotplug_profile_ktype, hotplug_kobj, "%s", name);
1600     - if (error)
1601     + if (error) {
1602     + kobject_put(&hotplug->kobj);
1603     goto err_out;
1604     + }
1605    
1606     kobject_uevent(&hotplug->kobj, KOBJ_ADD);
1607     return;
1608     diff --git a/drivers/char/agp/intel-gtt.c b/drivers/char/agp/intel-gtt.c
1609     index a7cc5b7be598..871e7f4994e8 100644
1610     --- a/drivers/char/agp/intel-gtt.c
1611     +++ b/drivers/char/agp/intel-gtt.c
1612     @@ -845,6 +845,7 @@ void intel_gtt_insert_page(dma_addr_t addr,
1613     unsigned int flags)
1614     {
1615     intel_private.driver->write_entry(addr, pg, flags);
1616     + readl(intel_private.gtt + pg);
1617     if (intel_private.driver->chipset_flush)
1618     intel_private.driver->chipset_flush();
1619     }
1620     @@ -870,7 +871,7 @@ void intel_gtt_insert_sg_entries(struct sg_table *st,
1621     j++;
1622     }
1623     }
1624     - wmb();
1625     + readl(intel_private.gtt + j - 1);
1626     if (intel_private.driver->chipset_flush)
1627     intel_private.driver->chipset_flush();
1628     }
1629     @@ -1104,6 +1105,7 @@ static void i9xx_cleanup(void)
1630    
1631     static void i9xx_chipset_flush(void)
1632     {
1633     + wmb();
1634     if (intel_private.i9xx_flush_page)
1635     writel(1, intel_private.i9xx_flush_page);
1636     }
1637     diff --git a/drivers/clocksource/dw_apb_timer_of.c b/drivers/clocksource/dw_apb_timer_of.c
1638     index aee6c0d39a7c..024e6cc5025b 100644
1639     --- a/drivers/clocksource/dw_apb_timer_of.c
1640     +++ b/drivers/clocksource/dw_apb_timer_of.c
1641     @@ -146,10 +146,6 @@ static int num_called;
1642     static int __init dw_apb_timer_init(struct device_node *timer)
1643     {
1644     switch (num_called) {
1645     - case 0:
1646     - pr_debug("%s: found clockevent timer\n", __func__);
1647     - add_clockevent(timer);
1648     - break;
1649     case 1:
1650     pr_debug("%s: found clocksource timer\n", __func__);
1651     add_clocksource(timer);
1652     @@ -160,6 +156,8 @@ static int __init dw_apb_timer_init(struct device_node *timer)
1653     #endif
1654     break;
1655     default:
1656     + pr_debug("%s: found clockevent timer\n", __func__);
1657     + add_clockevent(timer);
1658     break;
1659     }
1660    
1661     diff --git a/drivers/cpuidle/sysfs.c b/drivers/cpuidle/sysfs.c
1662     index 9e98a5fbbc1d..e7e92ed34f0c 100644
1663     --- a/drivers/cpuidle/sysfs.c
1664     +++ b/drivers/cpuidle/sysfs.c
1665     @@ -412,7 +412,7 @@ static int cpuidle_add_state_sysfs(struct cpuidle_device *device)
1666     ret = kobject_init_and_add(&kobj->kobj, &ktype_state_cpuidle,
1667     &kdev->kobj, "state%d", i);
1668     if (ret) {
1669     - kfree(kobj);
1670     + kobject_put(&kobj->kobj);
1671     goto error_state;
1672     }
1673     kobject_uevent(&kobj->kobj, KOBJ_ADD);
1674     @@ -542,7 +542,7 @@ static int cpuidle_add_driver_sysfs(struct cpuidle_device *dev)
1675     ret = kobject_init_and_add(&kdrv->kobj, &ktype_driver_cpuidle,
1676     &kdev->kobj, "driver");
1677     if (ret) {
1678     - kfree(kdrv);
1679     + kobject_put(&kdrv->kobj);
1680     return ret;
1681     }
1682    
1683     @@ -636,7 +636,7 @@ int cpuidle_add_sysfs(struct cpuidle_device *dev)
1684     error = kobject_init_and_add(&kdev->kobj, &ktype_cpuidle, &cpu_dev->kobj,
1685     "cpuidle");
1686     if (error) {
1687     - kfree(kdev);
1688     + kobject_put(&kdev->kobj);
1689     return error;
1690     }
1691    
1692     diff --git a/drivers/crypto/talitos.c b/drivers/crypto/talitos.c
1693     index 8b383d3d21c2..059c2d4ad18f 100644
1694     --- a/drivers/crypto/talitos.c
1695     +++ b/drivers/crypto/talitos.c
1696     @@ -2636,7 +2636,6 @@ static struct talitos_alg_template driver_algs[] = {
1697     .cra_ablkcipher = {
1698     .min_keysize = AES_MIN_KEY_SIZE,
1699     .max_keysize = AES_MAX_KEY_SIZE,
1700     - .ivsize = AES_BLOCK_SIZE,
1701     }
1702     },
1703     .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
1704     @@ -2670,6 +2669,7 @@ static struct talitos_alg_template driver_algs[] = {
1705     .cra_ablkcipher = {
1706     .min_keysize = AES_MIN_KEY_SIZE,
1707     .max_keysize = AES_MAX_KEY_SIZE,
1708     + .ivsize = AES_BLOCK_SIZE,
1709     .setkey = ablkcipher_aes_setkey,
1710     }
1711     },
1712     diff --git a/drivers/firmware/efi/efivars.c b/drivers/firmware/efi/efivars.c
1713     index 1c65f5ac4368..6529addd1e82 100644
1714     --- a/drivers/firmware/efi/efivars.c
1715     +++ b/drivers/firmware/efi/efivars.c
1716     @@ -586,8 +586,10 @@ efivar_create_sysfs_entry(struct efivar_entry *new_var)
1717     ret = kobject_init_and_add(&new_var->kobj, &efivar_ktype,
1718     NULL, "%s", short_name);
1719     kfree(short_name);
1720     - if (ret)
1721     + if (ret) {
1722     + kobject_put(&new_var->kobj);
1723     return ret;
1724     + }
1725    
1726     kobject_uevent(&new_var->kobj, KOBJ_ADD);
1727     if (efivar_entry_add(new_var, &efivar_sysfs_list)) {
1728     diff --git a/drivers/macintosh/windfarm_pm112.c b/drivers/macintosh/windfarm_pm112.c
1729     index 96d16fca68b2..24e7152cd2bf 100644
1730     --- a/drivers/macintosh/windfarm_pm112.c
1731     +++ b/drivers/macintosh/windfarm_pm112.c
1732     @@ -13,6 +13,7 @@
1733     #include <linux/device.h>
1734     #include <linux/platform_device.h>
1735     #include <linux/reboot.h>
1736     +#include <linux/slab.h>
1737     #include <asm/prom.h>
1738     #include <asm/smu.h>
1739    
1740     @@ -133,14 +134,6 @@ static int create_cpu_loop(int cpu)
1741     s32 tmax;
1742     int fmin;
1743    
1744     - /* Get PID params from the appropriate SAT */
1745     - hdr = smu_sat_get_sdb_partition(chip, 0xC8 + core, NULL);
1746     - if (hdr == NULL) {
1747     - printk(KERN_WARNING"windfarm: can't get CPU PID fan config\n");
1748     - return -EINVAL;
1749     - }
1750     - piddata = (struct smu_sdbp_cpupiddata *)&hdr[1];
1751     -
1752     /* Get FVT params to get Tmax; if not found, assume default */
1753     hdr = smu_sat_get_sdb_partition(chip, 0xC4 + core, NULL);
1754     if (hdr) {
1755     @@ -153,6 +146,16 @@ static int create_cpu_loop(int cpu)
1756     if (tmax < cpu_all_tmax)
1757     cpu_all_tmax = tmax;
1758    
1759     + kfree(hdr);
1760     +
1761     + /* Get PID params from the appropriate SAT */
1762     + hdr = smu_sat_get_sdb_partition(chip, 0xC8 + core, NULL);
1763     + if (hdr == NULL) {
1764     + printk(KERN_WARNING"windfarm: can't get CPU PID fan config\n");
1765     + return -EINVAL;
1766     + }
1767     + piddata = (struct smu_sdbp_cpupiddata *)&hdr[1];
1768     +
1769     /*
1770     * Darwin has a minimum fan speed of 1000 rpm for the 4-way and
1771     * 515 for the 2-way. That appears to be overkill, so for now,
1772     @@ -175,6 +178,9 @@ static int create_cpu_loop(int cpu)
1773     pid.min = fmin;
1774    
1775     wf_cpu_pid_init(&cpu_pid[cpu], &pid);
1776     +
1777     + kfree(hdr);
1778     +
1779     return 0;
1780     }
1781    
1782     diff --git a/drivers/md/md.c b/drivers/md/md.c
1783     index da8708b65356..3485d2a79600 100644
1784     --- a/drivers/md/md.c
1785     +++ b/drivers/md/md.c
1786     @@ -7101,7 +7101,8 @@ static int md_open(struct block_device *bdev, fmode_t mode)
1787     */
1788     mddev_put(mddev);
1789     /* Wait until bdev->bd_disk is definitely gone */
1790     - flush_workqueue(md_misc_wq);
1791     + if (work_pending(&mddev->del_work))
1792     + flush_workqueue(md_misc_wq);
1793     /* Then retry the open from the top */
1794     return -ERESTARTSYS;
1795     }
1796     diff --git a/drivers/media/dvb-core/dvb_frontend.c b/drivers/media/dvb-core/dvb_frontend.c
1797     index 2f054db8807b..372057cabea4 100644
1798     --- a/drivers/media/dvb-core/dvb_frontend.c
1799     +++ b/drivers/media/dvb-core/dvb_frontend.c
1800     @@ -629,7 +629,7 @@ static int dvb_frontend_thread(void *data)
1801     struct dvb_frontend *fe = data;
1802     struct dtv_frontend_properties *c = &fe->dtv_property_cache;
1803     struct dvb_frontend_private *fepriv = fe->frontend_priv;
1804     - enum fe_status s;
1805     + enum fe_status s = FE_NONE;
1806     enum dvbfe_algo algo;
1807     bool re_tune = false;
1808     bool semheld = false;
1809     diff --git a/drivers/media/platform/rcar-fcp.c b/drivers/media/platform/rcar-fcp.c
1810     index f3a3f31cdfa9..8e9c3bd36d03 100644
1811     --- a/drivers/media/platform/rcar-fcp.c
1812     +++ b/drivers/media/platform/rcar-fcp.c
1813     @@ -12,6 +12,7 @@
1814     */
1815    
1816     #include <linux/device.h>
1817     +#include <linux/dma-mapping.h>
1818     #include <linux/list.h>
1819     #include <linux/module.h>
1820     #include <linux/mutex.h>
1821     @@ -24,6 +25,7 @@
1822     struct rcar_fcp_device {
1823     struct list_head list;
1824     struct device *dev;
1825     + struct device_dma_parameters dma_parms;
1826     };
1827    
1828     static LIST_HEAD(fcp_devices);
1829     @@ -140,6 +142,9 @@ static int rcar_fcp_probe(struct platform_device *pdev)
1830    
1831     fcp->dev = &pdev->dev;
1832    
1833     + fcp->dev->dma_parms = &fcp->dma_parms;
1834     + dma_set_max_seg_size(fcp->dev, DMA_BIT_MASK(32));
1835     +
1836     pm_runtime_enable(&pdev->dev);
1837    
1838     mutex_lock(&fcp_lock);
1839     diff --git a/drivers/media/tuners/si2157.c b/drivers/media/tuners/si2157.c
1840     index 57b250847cd3..72a47da0db2a 100644
1841     --- a/drivers/media/tuners/si2157.c
1842     +++ b/drivers/media/tuners/si2157.c
1843     @@ -84,24 +84,23 @@ static int si2157_init(struct dvb_frontend *fe)
1844     struct si2157_cmd cmd;
1845     const struct firmware *fw;
1846     const char *fw_name;
1847     - unsigned int uitmp, chip_id;
1848     + unsigned int chip_id, xtal_trim;
1849    
1850     dev_dbg(&client->dev, "\n");
1851    
1852     - /* Returned IF frequency is garbage when firmware is not running */
1853     - memcpy(cmd.args, "\x15\x00\x06\x07", 4);
1854     + /* Try to get Xtal trim property, to verify tuner still running */
1855     + memcpy(cmd.args, "\x15\x00\x04\x02", 4);
1856     cmd.wlen = 4;
1857     cmd.rlen = 4;
1858     ret = si2157_cmd_execute(client, &cmd);
1859     - if (ret)
1860     - goto err;
1861    
1862     - uitmp = cmd.args[2] << 0 | cmd.args[3] << 8;
1863     - dev_dbg(&client->dev, "if_frequency kHz=%u\n", uitmp);
1864     + xtal_trim = cmd.args[2] | (cmd.args[3] << 8);
1865    
1866     - if (uitmp == dev->if_frequency / 1000)
1867     + if (ret == 0 && xtal_trim < 16)
1868     goto warm;
1869    
1870     + dev->if_frequency = 0; /* we no longer know current tuner state */
1871     +
1872     /* power up */
1873     if (dev->chiptype == SI2157_CHIPTYPE_SI2146) {
1874     memcpy(cmd.args, "\xc0\x05\x01\x00\x00\x0b\x00\x00\x01", 9);
1875     diff --git a/drivers/media/usb/dvb-usb/dibusb-mb.c b/drivers/media/usb/dvb-usb/dibusb-mb.c
1876     index a0057641cc86..c55180912c3a 100644
1877     --- a/drivers/media/usb/dvb-usb/dibusb-mb.c
1878     +++ b/drivers/media/usb/dvb-usb/dibusb-mb.c
1879     @@ -84,7 +84,7 @@ static int dibusb_tuner_probe_and_attach(struct dvb_usb_adapter *adap)
1880    
1881     if (i2c_transfer(&adap->dev->i2c_adap, msg, 2) != 2) {
1882     err("tuner i2c write failed.");
1883     - ret = -EREMOTEIO;
1884     + return -EREMOTEIO;
1885     }
1886    
1887     if (adap->fe_adap[0].fe->ops.i2c_gate_ctrl)
1888     diff --git a/drivers/media/usb/go7007/snd-go7007.c b/drivers/media/usb/go7007/snd-go7007.c
1889     index 070871fb1fc4..6e1a85ff3fff 100644
1890     --- a/drivers/media/usb/go7007/snd-go7007.c
1891     +++ b/drivers/media/usb/go7007/snd-go7007.c
1892     @@ -243,22 +243,18 @@ int go7007_snd_init(struct go7007 *go)
1893     gosnd->capturing = 0;
1894     ret = snd_card_new(go->dev, index[dev], id[dev], THIS_MODULE, 0,
1895     &gosnd->card);
1896     - if (ret < 0) {
1897     - kfree(gosnd);
1898     - return ret;
1899     - }
1900     + if (ret < 0)
1901     + goto free_snd;
1902     +
1903     ret = snd_device_new(gosnd->card, SNDRV_DEV_LOWLEVEL, go,
1904     &go7007_snd_device_ops);
1905     - if (ret < 0) {
1906     - kfree(gosnd);
1907     - return ret;
1908     - }
1909     + if (ret < 0)
1910     + goto free_card;
1911     +
1912     ret = snd_pcm_new(gosnd->card, "go7007", 0, 0, 1, &gosnd->pcm);
1913     - if (ret < 0) {
1914     - snd_card_free(gosnd->card);
1915     - kfree(gosnd);
1916     - return ret;
1917     - }
1918     + if (ret < 0)
1919     + goto free_card;
1920     +
1921     strlcpy(gosnd->card->driver, "go7007", sizeof(gosnd->card->driver));
1922     strlcpy(gosnd->card->shortname, go->name, sizeof(gosnd->card->driver));
1923     strlcpy(gosnd->card->longname, gosnd->card->shortname,
1924     @@ -269,11 +265,8 @@ int go7007_snd_init(struct go7007 *go)
1925     &go7007_snd_capture_ops);
1926    
1927     ret = snd_card_register(gosnd->card);
1928     - if (ret < 0) {
1929     - snd_card_free(gosnd->card);
1930     - kfree(gosnd);
1931     - return ret;
1932     - }
1933     + if (ret < 0)
1934     + goto free_card;
1935    
1936     gosnd->substream = NULL;
1937     go->snd_context = gosnd;
1938     @@ -281,6 +274,12 @@ int go7007_snd_init(struct go7007 *go)
1939     ++dev;
1940    
1941     return 0;
1942     +
1943     +free_card:
1944     + snd_card_free(gosnd->card);
1945     +free_snd:
1946     + kfree(gosnd);
1947     + return ret;
1948     }
1949     EXPORT_SYMBOL(go7007_snd_init);
1950    
1951     diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c b/drivers/mmc/host/sdhci-esdhc-imx.c
1952     index 445fc47dc3e7..b4336534f628 100644
1953     --- a/drivers/mmc/host/sdhci-esdhc-imx.c
1954     +++ b/drivers/mmc/host/sdhci-esdhc-imx.c
1955     @@ -79,7 +79,7 @@
1956     #define ESDHC_STD_TUNING_EN (1 << 24)
1957     /* NOTE: the minimum valid tuning start tap for mx6sl is 1 */
1958     #define ESDHC_TUNING_START_TAP_DEFAULT 0x1
1959     -#define ESDHC_TUNING_START_TAP_MASK 0xff
1960     +#define ESDHC_TUNING_START_TAP_MASK 0x7f
1961     #define ESDHC_TUNING_STEP_MASK 0x00070000
1962     #define ESDHC_TUNING_STEP_SHIFT 16
1963    
1964     diff --git a/drivers/mtd/nand/brcmnand/brcmnand.c b/drivers/mtd/nand/brcmnand/brcmnand.c
1965     index ef9a6b22c9fa..1291492a1cef 100644
1966     --- a/drivers/mtd/nand/brcmnand/brcmnand.c
1967     +++ b/drivers/mtd/nand/brcmnand/brcmnand.c
1968     @@ -911,11 +911,14 @@ static int brcmnand_hamming_ooblayout_free(struct mtd_info *mtd, int section,
1969     if (!section) {
1970     /*
1971     * Small-page NAND use byte 6 for BBI while large-page
1972     - * NAND use byte 0.
1973     + * NAND use bytes 0 and 1.
1974     */
1975     - if (cfg->page_size > 512)
1976     - oobregion->offset++;
1977     - oobregion->length--;
1978     + if (cfg->page_size > 512) {
1979     + oobregion->offset += 2;
1980     + oobregion->length -= 2;
1981     + } else {
1982     + oobregion->length--;
1983     + }
1984     }
1985     }
1986    
1987     diff --git a/drivers/mtd/nand/pasemi_nand.c b/drivers/mtd/nand/pasemi_nand.c
1988     index 5de7591b0510..80c98eef44d9 100644
1989     --- a/drivers/mtd/nand/pasemi_nand.c
1990     +++ b/drivers/mtd/nand/pasemi_nand.c
1991     @@ -164,7 +164,7 @@ static int pasemi_nand_probe(struct platform_device *ofdev)
1992     if (mtd_device_register(pasemi_nand_mtd, NULL, 0)) {
1993     dev_err(dev, "Unable to register MTD device\n");
1994     err = -ENODEV;
1995     - goto out_lpc;
1996     + goto out_cleanup_nand;
1997     }
1998    
1999     dev_info(dev, "PA Semi NAND flash at %pR, control at I/O %x\n", &res,
2000     @@ -172,6 +172,8 @@ static int pasemi_nand_probe(struct platform_device *ofdev)
2001    
2002     return 0;
2003    
2004     + out_cleanup_nand:
2005     + nand_cleanup(chip);
2006     out_lpc:
2007     release_region(lpcctl, 4);
2008     out_ior:
2009     diff --git a/drivers/net/can/usb/kvaser_usb.c b/drivers/net/can/usb/kvaser_usb.c
2010     index 3a75352f632b..792a1afabf5d 100644
2011     --- a/drivers/net/can/usb/kvaser_usb.c
2012     +++ b/drivers/net/can/usb/kvaser_usb.c
2013     @@ -791,7 +791,7 @@ static int kvaser_usb_simple_msg_async(struct kvaser_usb_net_priv *priv,
2014     if (!urb)
2015     return -ENOMEM;
2016    
2017     - buf = kmalloc(sizeof(struct kvaser_msg), GFP_ATOMIC);
2018     + buf = kzalloc(sizeof(struct kvaser_msg), GFP_ATOMIC);
2019     if (!buf) {
2020     usb_free_urb(urb);
2021     return -ENOMEM;
2022     @@ -1459,7 +1459,7 @@ static int kvaser_usb_set_opt_mode(const struct kvaser_usb_net_priv *priv)
2023     struct kvaser_msg *msg;
2024     int rc;
2025    
2026     - msg = kmalloc(sizeof(*msg), GFP_KERNEL);
2027     + msg = kzalloc(sizeof(*msg), GFP_KERNEL);
2028     if (!msg)
2029     return -ENOMEM;
2030    
2031     @@ -1592,7 +1592,7 @@ static int kvaser_usb_flush_queue(struct kvaser_usb_net_priv *priv)
2032     struct kvaser_msg *msg;
2033     int rc;
2034    
2035     - msg = kmalloc(sizeof(*msg), GFP_KERNEL);
2036     + msg = kzalloc(sizeof(*msg), GFP_KERNEL);
2037     if (!msg)
2038     return -ENOMEM;
2039    
2040     diff --git a/drivers/net/ethernet/allwinner/sun4i-emac.c b/drivers/net/ethernet/allwinner/sun4i-emac.c
2041     index 6ffdff68bfc4..672a8212c8d9 100644
2042     --- a/drivers/net/ethernet/allwinner/sun4i-emac.c
2043     +++ b/drivers/net/ethernet/allwinner/sun4i-emac.c
2044     @@ -412,7 +412,7 @@ static void emac_timeout(struct net_device *dev)
2045     /* Hardware start transmission.
2046     * Send a packet to media from the upper layer.
2047     */
2048     -static int emac_start_xmit(struct sk_buff *skb, struct net_device *dev)
2049     +static netdev_tx_t emac_start_xmit(struct sk_buff *skb, struct net_device *dev)
2050     {
2051     struct emac_board_info *db = netdev_priv(dev);
2052     unsigned long channel;
2053     @@ -420,7 +420,7 @@ static int emac_start_xmit(struct sk_buff *skb, struct net_device *dev)
2054    
2055     channel = db->tx_fifo_stat & 3;
2056     if (channel == 3)
2057     - return 1;
2058     + return NETDEV_TX_BUSY;
2059    
2060     channel = (channel == 1 ? 1 : 0);
2061    
2062     diff --git a/drivers/net/ethernet/amazon/ena/ena_com.c b/drivers/net/ethernet/amazon/ena/ena_com.c
2063     index 905911f78693..e95f19e573a7 100644
2064     --- a/drivers/net/ethernet/amazon/ena/ena_com.c
2065     +++ b/drivers/net/ethernet/amazon/ena/ena_com.c
2066     @@ -2096,6 +2096,9 @@ int ena_com_get_hash_function(struct ena_com_dev *ena_dev,
2067     rss->hash_key;
2068     int rc;
2069    
2070     + if (unlikely(!func))
2071     + return -EINVAL;
2072     +
2073     rc = ena_com_get_feature_ex(ena_dev, &get_resp,
2074     ENA_ADMIN_RSS_HASH_FUNCTION,
2075     rss->hash_key_dma_addr,
2076     @@ -2108,8 +2111,7 @@ int ena_com_get_hash_function(struct ena_com_dev *ena_dev,
2077     if (rss->hash_func)
2078     rss->hash_func--;
2079    
2080     - if (func)
2081     - *func = rss->hash_func;
2082     + *func = rss->hash_func;
2083    
2084     if (key)
2085     memcpy(key, hash_key->key, (size_t)(hash_key->keys_num) << 2);
2086     diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
2087     index 897a87ae8655..20f7ab4aa2f1 100644
2088     --- a/drivers/net/ethernet/ibm/ibmvnic.c
2089     +++ b/drivers/net/ethernet/ibm/ibmvnic.c
2090     @@ -3362,12 +3362,10 @@ static void ibmvnic_handle_crq(union ibmvnic_crq *crq,
2091     dev_err(dev, "Error %ld in VERSION_EXCHG_RSP\n", rc);
2092     break;
2093     }
2094     - dev_info(dev, "Partner protocol version is %d\n",
2095     - crq->version_exchange_rsp.version);
2096     - if (be16_to_cpu(crq->version_exchange_rsp.version) <
2097     - ibmvnic_version)
2098     - ibmvnic_version =
2099     + ibmvnic_version =
2100     be16_to_cpu(crq->version_exchange_rsp.version);
2101     + dev_info(dev, "Partner protocol version is %d\n",
2102     + ibmvnic_version);
2103     send_cap_queries(adapter);
2104     break;
2105     case QUERY_CAPABILITY_RSP:
2106     diff --git a/drivers/net/ethernet/intel/e1000/e1000_main.c b/drivers/net/ethernet/intel/e1000/e1000_main.c
2107     index 39a09e18c1b7..3b16ee0de246 100644
2108     --- a/drivers/net/ethernet/intel/e1000/e1000_main.c
2109     +++ b/drivers/net/ethernet/intel/e1000/e1000_main.c
2110     @@ -3167,8 +3167,9 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,
2111     hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb);
2112     if (skb->data_len && hdr_len == len) {
2113     switch (hw->mac_type) {
2114     + case e1000_82544: {
2115     unsigned int pull_size;
2116     - case e1000_82544:
2117     +
2118     /* Make sure we have room to chop off 4 bytes,
2119     * and that the end alignment will work out to
2120     * this hardware's requirements
2121     @@ -3189,6 +3190,7 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,
2122     }
2123     len = skb_headlen(skb);
2124     break;
2125     + }
2126     default:
2127     /* do nothing */
2128     break;
2129     diff --git a/drivers/net/ethernet/intel/e1000e/e1000.h b/drivers/net/ethernet/intel/e1000e/e1000.h
2130     index 879cca47b021..62675938cb59 100644
2131     --- a/drivers/net/ethernet/intel/e1000e/e1000.h
2132     +++ b/drivers/net/ethernet/intel/e1000e/e1000.h
2133     @@ -589,7 +589,6 @@ static inline u32 __er32(struct e1000_hw *hw, unsigned long reg)
2134    
2135     #define er32(reg) __er32(hw, E1000_##reg)
2136    
2137     -s32 __ew32_prepare(struct e1000_hw *hw);
2138     void __ew32(struct e1000_hw *hw, unsigned long reg, u32 val);
2139    
2140     #define ew32(reg, val) __ew32(hw, E1000_##reg, (val))
2141     diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
2142     index a0f97c5ab6ef..be324b4761eb 100644
2143     --- a/drivers/net/ethernet/intel/e1000e/netdev.c
2144     +++ b/drivers/net/ethernet/intel/e1000e/netdev.c
2145     @@ -136,14 +136,12 @@ static const struct e1000_reg_info e1000_reg_info_tbl[] = {
2146     * has bit 24 set while ME is accessing MAC CSR registers, wait if it is set
2147     * and try again a number of times.
2148     **/
2149     -s32 __ew32_prepare(struct e1000_hw *hw)
2150     +static void __ew32_prepare(struct e1000_hw *hw)
2151     {
2152     s32 i = E1000_ICH_FWSM_PCIM2PCI_COUNT;
2153    
2154     while ((er32(FWSM) & E1000_ICH_FWSM_PCIM2PCI) && --i)
2155     udelay(50);
2156     -
2157     - return i;
2158     }
2159    
2160     void __ew32(struct e1000_hw *hw, unsigned long reg, u32 val)
2161     @@ -624,11 +622,11 @@ static void e1000e_update_rdt_wa(struct e1000_ring *rx_ring, unsigned int i)
2162     {
2163     struct e1000_adapter *adapter = rx_ring->adapter;
2164     struct e1000_hw *hw = &adapter->hw;
2165     - s32 ret_val = __ew32_prepare(hw);
2166    
2167     + __ew32_prepare(hw);
2168     writel(i, rx_ring->tail);
2169    
2170     - if (unlikely(!ret_val && (i != readl(rx_ring->tail)))) {
2171     + if (unlikely(i != readl(rx_ring->tail))) {
2172     u32 rctl = er32(RCTL);
2173    
2174     ew32(RCTL, rctl & ~E1000_RCTL_EN);
2175     @@ -641,11 +639,11 @@ static void e1000e_update_tdt_wa(struct e1000_ring *tx_ring, unsigned int i)
2176     {
2177     struct e1000_adapter *adapter = tx_ring->adapter;
2178     struct e1000_hw *hw = &adapter->hw;
2179     - s32 ret_val = __ew32_prepare(hw);
2180    
2181     + __ew32_prepare(hw);
2182     writel(i, tx_ring->tail);
2183    
2184     - if (unlikely(!ret_val && (i != readl(tx_ring->tail)))) {
2185     + if (unlikely(i != readl(tx_ring->tail))) {
2186     u32 tctl = er32(TCTL);
2187    
2188     ew32(TCTL, tctl & ~E1000_TCTL_EN);
2189     diff --git a/drivers/net/ethernet/intel/igb/igb_ethtool.c b/drivers/net/ethernet/intel/igb/igb_ethtool.c
2190     index 737b664d004c..b02e262ed76a 100644
2191     --- a/drivers/net/ethernet/intel/igb/igb_ethtool.c
2192     +++ b/drivers/net/ethernet/intel/igb/igb_ethtool.c
2193     @@ -153,7 +153,8 @@ static int igb_get_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)
2194     u32 status;
2195     u32 speed;
2196    
2197     - status = rd32(E1000_STATUS);
2198     + status = pm_runtime_suspended(&adapter->pdev->dev) ?
2199     + 0 : rd32(E1000_STATUS);
2200     if (hw->phy.media_type == e1000_media_type_copper) {
2201    
2202     ecmd->supported = (SUPPORTED_10baseT_Half |
2203     diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c
2204     index 0d2baec546e1..c17135b7fca7 100644
2205     --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c
2206     +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c
2207     @@ -2219,7 +2219,7 @@ s32 ixgbe_fc_enable_generic(struct ixgbe_hw *hw)
2208     }
2209    
2210     /* Configure pause time (2 TCs per register) */
2211     - reg = hw->fc.pause_time * 0x00010001;
2212     + reg = hw->fc.pause_time * 0x00010001U;
2213     for (i = 0; i < (MAX_TRAFFIC_CLASS / 2); i++)
2214     IXGBE_WRITE_REG(hw, IXGBE_FCTTV(i), reg);
2215    
2216     diff --git a/drivers/net/ethernet/nxp/lpc_eth.c b/drivers/net/ethernet/nxp/lpc_eth.c
2217     index 9fcaf1910633..9b98ec3dcb82 100644
2218     --- a/drivers/net/ethernet/nxp/lpc_eth.c
2219     +++ b/drivers/net/ethernet/nxp/lpc_eth.c
2220     @@ -845,7 +845,8 @@ static int lpc_mii_init(struct netdata_local *pldat)
2221     if (mdiobus_register(pldat->mii_bus))
2222     goto err_out_unregister_bus;
2223    
2224     - if (lpc_mii_probe(pldat->ndev) != 0)
2225     + err = lpc_mii_probe(pldat->ndev);
2226     + if (err)
2227     goto err_out_unregister_bus;
2228    
2229     return 0;
2230     diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c
2231     index 4f582ce929f2..9dda2dc6b5e7 100644
2232     --- a/drivers/net/macvlan.c
2233     +++ b/drivers/net/macvlan.c
2234     @@ -421,6 +421,10 @@ static rx_handler_result_t macvlan_handle_frame(struct sk_buff **pskb)
2235     int ret;
2236     rx_handler_result_t handle_res;
2237    
2238     + /* Packets from dev_loopback_xmit() do not have L2 header, bail out */
2239     + if (unlikely(skb->pkt_type == PACKET_LOOPBACK))
2240     + return RX_HANDLER_PASS;
2241     +
2242     port = macvlan_port_get_rcu(skb->dev);
2243     if (is_multicast_ether_addr(eth->h_dest)) {
2244     unsigned int hash;
2245     diff --git a/drivers/net/vmxnet3/vmxnet3_ethtool.c b/drivers/net/vmxnet3/vmxnet3_ethtool.c
2246     index aabc6ef366b4..d63b83605748 100644
2247     --- a/drivers/net/vmxnet3/vmxnet3_ethtool.c
2248     +++ b/drivers/net/vmxnet3/vmxnet3_ethtool.c
2249     @@ -691,6 +691,8 @@ vmxnet3_get_rss(struct net_device *netdev, u32 *p, u8 *key, u8 *hfunc)
2250     *hfunc = ETH_RSS_HASH_TOP;
2251     if (!p)
2252     return 0;
2253     + if (n > UPT1_RSS_MAX_IND_TABLE_SIZE)
2254     + return 0;
2255     while (n--)
2256     p[n] = rssConf->indTable[n];
2257     return 0;
2258     diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
2259     index 58ddb6c90418..b1470d30d079 100644
2260     --- a/drivers/net/vxlan.c
2261     +++ b/drivers/net/vxlan.c
2262     @@ -1521,6 +1521,10 @@ static struct sk_buff *vxlan_na_create(struct sk_buff *request,
2263     daddr = eth_hdr(request)->h_source;
2264     ns_olen = request->len - skb_transport_offset(request) - sizeof(*ns);
2265     for (i = 0; i < ns_olen-1; i += (ns->opt[i+1]<<3)) {
2266     + if (!ns->opt[i + 1]) {
2267     + kfree_skb(reply);
2268     + return NULL;
2269     + }
2270     if (ns->opt[i] == ND_OPT_SOURCE_LL_ADDR) {
2271     daddr = ns->opt + i + sizeof(struct nd_opt_hdr);
2272     break;
2273     diff --git a/drivers/net/wireless/ath/ath9k/hif_usb.c b/drivers/net/wireless/ath/ath9k/hif_usb.c
2274     index b5e12be73f2b..e27acccc3678 100644
2275     --- a/drivers/net/wireless/ath/ath9k/hif_usb.c
2276     +++ b/drivers/net/wireless/ath/ath9k/hif_usb.c
2277     @@ -610,6 +610,11 @@ static void ath9k_hif_usb_rx_stream(struct hif_device_usb *hif_dev,
2278     hif_dev->remain_skb = nskb;
2279     spin_unlock(&hif_dev->rx_lock);
2280     } else {
2281     + if (pool_index == MAX_PKT_NUM_IN_TRANSFER) {
2282     + dev_err(&hif_dev->udev->dev,
2283     + "ath9k_htc: over RX MAX_PKT_NUM\n");
2284     + goto err;
2285     + }
2286     nskb = __dev_alloc_skb(pkt_len + 32, GFP_ATOMIC);
2287     if (!nskb) {
2288     dev_err(&hif_dev->udev->dev,
2289     @@ -636,9 +641,9 @@ err:
2290    
2291     static void ath9k_hif_usb_rx_cb(struct urb *urb)
2292     {
2293     - struct sk_buff *skb = (struct sk_buff *) urb->context;
2294     - struct hif_device_usb *hif_dev =
2295     - usb_get_intfdata(usb_ifnum_to_if(urb->dev, 0));
2296     + struct rx_buf *rx_buf = (struct rx_buf *)urb->context;
2297     + struct hif_device_usb *hif_dev = rx_buf->hif_dev;
2298     + struct sk_buff *skb = rx_buf->skb;
2299     int ret;
2300    
2301     if (!skb)
2302     @@ -678,14 +683,15 @@ resubmit:
2303     return;
2304     free:
2305     kfree_skb(skb);
2306     + kfree(rx_buf);
2307     }
2308    
2309     static void ath9k_hif_usb_reg_in_cb(struct urb *urb)
2310     {
2311     - struct sk_buff *skb = (struct sk_buff *) urb->context;
2312     + struct rx_buf *rx_buf = (struct rx_buf *)urb->context;
2313     + struct hif_device_usb *hif_dev = rx_buf->hif_dev;
2314     + struct sk_buff *skb = rx_buf->skb;
2315     struct sk_buff *nskb;
2316     - struct hif_device_usb *hif_dev =
2317     - usb_get_intfdata(usb_ifnum_to_if(urb->dev, 0));
2318     int ret;
2319    
2320     if (!skb)
2321     @@ -743,6 +749,7 @@ resubmit:
2322     return;
2323     free:
2324     kfree_skb(skb);
2325     + kfree(rx_buf);
2326     urb->context = NULL;
2327     }
2328    
2329     @@ -788,7 +795,7 @@ static int ath9k_hif_usb_alloc_tx_urbs(struct hif_device_usb *hif_dev)
2330     init_usb_anchor(&hif_dev->mgmt_submitted);
2331    
2332     for (i = 0; i < MAX_TX_URB_NUM; i++) {
2333     - tx_buf = kzalloc(sizeof(struct tx_buf), GFP_KERNEL);
2334     + tx_buf = kzalloc(sizeof(*tx_buf), GFP_KERNEL);
2335     if (!tx_buf)
2336     goto err;
2337    
2338     @@ -825,8 +832,9 @@ static void ath9k_hif_usb_dealloc_rx_urbs(struct hif_device_usb *hif_dev)
2339    
2340     static int ath9k_hif_usb_alloc_rx_urbs(struct hif_device_usb *hif_dev)
2341     {
2342     - struct urb *urb = NULL;
2343     + struct rx_buf *rx_buf = NULL;
2344     struct sk_buff *skb = NULL;
2345     + struct urb *urb = NULL;
2346     int i, ret;
2347    
2348     init_usb_anchor(&hif_dev->rx_submitted);
2349     @@ -834,6 +842,12 @@ static int ath9k_hif_usb_alloc_rx_urbs(struct hif_device_usb *hif_dev)
2350    
2351     for (i = 0; i < MAX_RX_URB_NUM; i++) {
2352    
2353     + rx_buf = kzalloc(sizeof(*rx_buf), GFP_KERNEL);
2354     + if (!rx_buf) {
2355     + ret = -ENOMEM;
2356     + goto err_rxb;
2357     + }
2358     +
2359     /* Allocate URB */
2360     urb = usb_alloc_urb(0, GFP_KERNEL);
2361     if (urb == NULL) {
2362     @@ -848,11 +862,14 @@ static int ath9k_hif_usb_alloc_rx_urbs(struct hif_device_usb *hif_dev)
2363     goto err_skb;
2364     }
2365    
2366     + rx_buf->hif_dev = hif_dev;
2367     + rx_buf->skb = skb;
2368     +
2369     usb_fill_bulk_urb(urb, hif_dev->udev,
2370     usb_rcvbulkpipe(hif_dev->udev,
2371     USB_WLAN_RX_PIPE),
2372     skb->data, MAX_RX_BUF_SIZE,
2373     - ath9k_hif_usb_rx_cb, skb);
2374     + ath9k_hif_usb_rx_cb, rx_buf);
2375    
2376     /* Anchor URB */
2377     usb_anchor_urb(urb, &hif_dev->rx_submitted);
2378     @@ -878,6 +895,8 @@ err_submit:
2379     err_skb:
2380     usb_free_urb(urb);
2381     err_urb:
2382     + kfree(rx_buf);
2383     +err_rxb:
2384     ath9k_hif_usb_dealloc_rx_urbs(hif_dev);
2385     return ret;
2386     }
2387     @@ -889,14 +908,21 @@ static void ath9k_hif_usb_dealloc_reg_in_urbs(struct hif_device_usb *hif_dev)
2388    
2389     static int ath9k_hif_usb_alloc_reg_in_urbs(struct hif_device_usb *hif_dev)
2390     {
2391     - struct urb *urb = NULL;
2392     + struct rx_buf *rx_buf = NULL;
2393     struct sk_buff *skb = NULL;
2394     + struct urb *urb = NULL;
2395     int i, ret;
2396    
2397     init_usb_anchor(&hif_dev->reg_in_submitted);
2398    
2399     for (i = 0; i < MAX_REG_IN_URB_NUM; i++) {
2400    
2401     + rx_buf = kzalloc(sizeof(*rx_buf), GFP_KERNEL);
2402     + if (!rx_buf) {
2403     + ret = -ENOMEM;
2404     + goto err_rxb;
2405     + }
2406     +
2407     /* Allocate URB */
2408     urb = usb_alloc_urb(0, GFP_KERNEL);
2409     if (urb == NULL) {
2410     @@ -911,11 +937,14 @@ static int ath9k_hif_usb_alloc_reg_in_urbs(struct hif_device_usb *hif_dev)
2411     goto err_skb;
2412     }
2413    
2414     + rx_buf->hif_dev = hif_dev;
2415     + rx_buf->skb = skb;
2416     +
2417     usb_fill_int_urb(urb, hif_dev->udev,
2418     usb_rcvintpipe(hif_dev->udev,
2419     USB_REG_IN_PIPE),
2420     skb->data, MAX_REG_IN_BUF_SIZE,
2421     - ath9k_hif_usb_reg_in_cb, skb, 1);
2422     + ath9k_hif_usb_reg_in_cb, rx_buf, 1);
2423    
2424     /* Anchor URB */
2425     usb_anchor_urb(urb, &hif_dev->reg_in_submitted);
2426     @@ -941,6 +970,8 @@ err_submit:
2427     err_skb:
2428     usb_free_urb(urb);
2429     err_urb:
2430     + kfree(rx_buf);
2431     +err_rxb:
2432     ath9k_hif_usb_dealloc_reg_in_urbs(hif_dev);
2433     return ret;
2434     }
2435     @@ -971,7 +1002,7 @@ err:
2436     return -ENOMEM;
2437     }
2438    
2439     -static void ath9k_hif_usb_dealloc_urbs(struct hif_device_usb *hif_dev)
2440     +void ath9k_hif_usb_dealloc_urbs(struct hif_device_usb *hif_dev)
2441     {
2442     usb_kill_anchored_urbs(&hif_dev->regout_submitted);
2443     ath9k_hif_usb_dealloc_reg_in_urbs(hif_dev);
2444     @@ -1338,8 +1369,9 @@ static void ath9k_hif_usb_disconnect(struct usb_interface *interface)
2445    
2446     if (hif_dev->flags & HIF_USB_READY) {
2447     ath9k_htc_hw_deinit(hif_dev->htc_handle, unplugged);
2448     - ath9k_htc_hw_free(hif_dev->htc_handle);
2449     ath9k_hif_usb_dev_deinit(hif_dev);
2450     + ath9k_destoy_wmi(hif_dev->htc_handle->drv_priv);
2451     + ath9k_htc_hw_free(hif_dev->htc_handle);
2452     }
2453    
2454     usb_set_intfdata(interface, NULL);
2455     diff --git a/drivers/net/wireless/ath/ath9k/hif_usb.h b/drivers/net/wireless/ath/ath9k/hif_usb.h
2456     index 7c2ef7ecd98b..835264c36595 100644
2457     --- a/drivers/net/wireless/ath/ath9k/hif_usb.h
2458     +++ b/drivers/net/wireless/ath/ath9k/hif_usb.h
2459     @@ -84,6 +84,11 @@ struct tx_buf {
2460     struct list_head list;
2461     };
2462    
2463     +struct rx_buf {
2464     + struct sk_buff *skb;
2465     + struct hif_device_usb *hif_dev;
2466     +};
2467     +
2468     #define HIF_USB_TX_STOP BIT(0)
2469     #define HIF_USB_TX_FLUSH BIT(1)
2470    
2471     @@ -131,5 +136,6 @@ struct hif_device_usb {
2472    
2473     int ath9k_hif_usb_init(void);
2474     void ath9k_hif_usb_exit(void);
2475     +void ath9k_hif_usb_dealloc_urbs(struct hif_device_usb *hif_dev);
2476    
2477     #endif /* HTC_USB_H */
2478     diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_init.c b/drivers/net/wireless/ath/ath9k/htc_drv_init.c
2479     index b65c1b661ade..15a0036dcc6e 100644
2480     --- a/drivers/net/wireless/ath/ath9k/htc_drv_init.c
2481     +++ b/drivers/net/wireless/ath/ath9k/htc_drv_init.c
2482     @@ -931,8 +931,9 @@ err_init:
2483     int ath9k_htc_probe_device(struct htc_target *htc_handle, struct device *dev,
2484     u16 devid, char *product, u32 drv_info)
2485     {
2486     - struct ieee80211_hw *hw;
2487     + struct hif_device_usb *hif_dev;
2488     struct ath9k_htc_priv *priv;
2489     + struct ieee80211_hw *hw;
2490     int ret;
2491    
2492     hw = ieee80211_alloc_hw(sizeof(struct ath9k_htc_priv), &ath9k_htc_ops);
2493     @@ -967,7 +968,10 @@ int ath9k_htc_probe_device(struct htc_target *htc_handle, struct device *dev,
2494     return 0;
2495    
2496     err_init:
2497     - ath9k_deinit_wmi(priv);
2498     + ath9k_stop_wmi(priv);
2499     + hif_dev = (struct hif_device_usb *)htc_handle->hif_dev;
2500     + ath9k_hif_usb_dealloc_urbs(hif_dev);
2501     + ath9k_destoy_wmi(priv);
2502     err_free:
2503     ieee80211_free_hw(hw);
2504     return ret;
2505     @@ -982,7 +986,7 @@ void ath9k_htc_disconnect_device(struct htc_target *htc_handle, bool hotunplug)
2506     htc_handle->drv_priv->ah->ah_flags |= AH_UNPLUGGED;
2507    
2508     ath9k_deinit_device(htc_handle->drv_priv);
2509     - ath9k_deinit_wmi(htc_handle->drv_priv);
2510     + ath9k_stop_wmi(htc_handle->drv_priv);
2511     ieee80211_free_hw(htc_handle->drv_priv->hw);
2512     }
2513     }
2514     diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
2515     index 52b42ecee621..2eb169b204f8 100644
2516     --- a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
2517     +++ b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
2518     @@ -998,9 +998,9 @@ static bool ath9k_rx_prepare(struct ath9k_htc_priv *priv,
2519     * which are not PHY_ERROR (short radar pulses have a length of 3)
2520     */
2521     if (unlikely(!rs_datalen || (rs_datalen < 10 && !is_phyerr))) {
2522     - ath_warn(common,
2523     - "Short RX data len, dropping (dlen: %d)\n",
2524     - rs_datalen);
2525     + ath_dbg(common, ANY,
2526     + "Short RX data len, dropping (dlen: %d)\n",
2527     + rs_datalen);
2528     goto rx_next;
2529     }
2530    
2531     diff --git a/drivers/net/wireless/ath/ath9k/htc_hst.c b/drivers/net/wireless/ath/ath9k/htc_hst.c
2532     index fd85f996c554..257b6ee51e54 100644
2533     --- a/drivers/net/wireless/ath/ath9k/htc_hst.c
2534     +++ b/drivers/net/wireless/ath/ath9k/htc_hst.c
2535     @@ -114,6 +114,9 @@ static void htc_process_conn_rsp(struct htc_target *target,
2536    
2537     if (svc_rspmsg->status == HTC_SERVICE_SUCCESS) {
2538     epid = svc_rspmsg->endpoint_id;
2539     + if (epid < 0 || epid >= ENDPOINT_MAX)
2540     + return;
2541     +
2542     service_id = be16_to_cpu(svc_rspmsg->service_id);
2543     max_msglen = be16_to_cpu(svc_rspmsg->max_msg_len);
2544     endpoint = &target->endpoint[epid];
2545     diff --git a/drivers/net/wireless/ath/ath9k/wmi.c b/drivers/net/wireless/ath/ath9k/wmi.c
2546     index 9c16e2a6d185..8f14897ae5a3 100644
2547     --- a/drivers/net/wireless/ath/ath9k/wmi.c
2548     +++ b/drivers/net/wireless/ath/ath9k/wmi.c
2549     @@ -112,14 +112,17 @@ struct wmi *ath9k_init_wmi(struct ath9k_htc_priv *priv)
2550     return wmi;
2551     }
2552    
2553     -void ath9k_deinit_wmi(struct ath9k_htc_priv *priv)
2554     +void ath9k_stop_wmi(struct ath9k_htc_priv *priv)
2555     {
2556     struct wmi *wmi = priv->wmi;
2557    
2558     mutex_lock(&wmi->op_mutex);
2559     wmi->stopped = true;
2560     mutex_unlock(&wmi->op_mutex);
2561     +}
2562    
2563     +void ath9k_destoy_wmi(struct ath9k_htc_priv *priv)
2564     +{
2565     kfree(priv->wmi);
2566     }
2567    
2568     diff --git a/drivers/net/wireless/ath/ath9k/wmi.h b/drivers/net/wireless/ath/ath9k/wmi.h
2569     index 380175d5ecd7..d8b912206232 100644
2570     --- a/drivers/net/wireless/ath/ath9k/wmi.h
2571     +++ b/drivers/net/wireless/ath/ath9k/wmi.h
2572     @@ -179,7 +179,6 @@ struct wmi {
2573     };
2574    
2575     struct wmi *ath9k_init_wmi(struct ath9k_htc_priv *priv);
2576     -void ath9k_deinit_wmi(struct ath9k_htc_priv *priv);
2577     int ath9k_wmi_connect(struct htc_target *htc, struct wmi *wmi,
2578     enum htc_endpoint_id *wmi_ctrl_epid);
2579     int ath9k_wmi_cmd(struct wmi *wmi, enum wmi_cmd_id cmd_id,
2580     @@ -189,6 +188,8 @@ int ath9k_wmi_cmd(struct wmi *wmi, enum wmi_cmd_id cmd_id,
2581     void ath9k_wmi_event_tasklet(unsigned long data);
2582     void ath9k_fatal_work(struct work_struct *work);
2583     void ath9k_wmi_event_drain(struct ath9k_htc_priv *priv);
2584     +void ath9k_stop_wmi(struct ath9k_htc_priv *priv);
2585     +void ath9k_destoy_wmi(struct ath9k_htc_priv *priv);
2586    
2587     #define WMI_CMD(_wmi_cmd) \
2588     do { \
2589     diff --git a/drivers/net/wireless/ath/carl9170/fw.c b/drivers/net/wireless/ath/carl9170/fw.c
2590     index 88045f93a76c..62ed0977f32c 100644
2591     --- a/drivers/net/wireless/ath/carl9170/fw.c
2592     +++ b/drivers/net/wireless/ath/carl9170/fw.c
2593     @@ -351,9 +351,7 @@ static int carl9170_fw(struct ar9170 *ar, const __u8 *data, size_t len)
2594     ar->hw->wiphy->interface_modes |= BIT(NL80211_IFTYPE_ADHOC);
2595    
2596     if (SUPP(CARL9170FW_WLANTX_CAB)) {
2597     - if_comb_types |=
2598     - BIT(NL80211_IFTYPE_AP) |
2599     - BIT(NL80211_IFTYPE_P2P_GO);
2600     + if_comb_types |= BIT(NL80211_IFTYPE_AP);
2601    
2602     #ifdef CONFIG_MAC80211_MESH
2603     if_comb_types |=
2604     diff --git a/drivers/net/wireless/ath/carl9170/main.c b/drivers/net/wireless/ath/carl9170/main.c
2605     index ffb22a04beeb..202f421e0e37 100644
2606     --- a/drivers/net/wireless/ath/carl9170/main.c
2607     +++ b/drivers/net/wireless/ath/carl9170/main.c
2608     @@ -582,11 +582,10 @@ static int carl9170_init_interface(struct ar9170 *ar,
2609     ar->disable_offload |= ((vif->type != NL80211_IFTYPE_STATION) &&
2610     (vif->type != NL80211_IFTYPE_AP));
2611    
2612     - /* While the driver supports HW offload in a single
2613     - * P2P client configuration, it doesn't support HW
2614     - * offload in the favourit, concurrent P2P GO+CLIENT
2615     - * configuration. Hence, HW offload will always be
2616     - * disabled for P2P.
2617     + /* The driver used to have P2P GO+CLIENT support,
2618     + * but since this was dropped and we don't know if
2619     + * there are any gremlins lurking in the shadows,
2620     + * so best we keep HW offload disabled for P2P.
2621     */
2622     ar->disable_offload |= vif->p2p;
2623    
2624     @@ -639,18 +638,6 @@ static int carl9170_op_add_interface(struct ieee80211_hw *hw,
2625     if (vif->type == NL80211_IFTYPE_STATION)
2626     break;
2627    
2628     - /* P2P GO [master] use-case
2629     - * Because the P2P GO station is selected dynamically
2630     - * by all participating peers of a WIFI Direct network,
2631     - * the driver has be able to change the main interface
2632     - * operating mode on the fly.
2633     - */
2634     - if (main_vif->p2p && vif->p2p &&
2635     - vif->type == NL80211_IFTYPE_AP) {
2636     - old_main = main_vif;
2637     - break;
2638     - }
2639     -
2640     err = -EBUSY;
2641     rcu_read_unlock();
2642    
2643     diff --git a/drivers/net/wireless/broadcom/b43/main.c b/drivers/net/wireless/broadcom/b43/main.c
2644     index a635fc6b1722..e57a50cc1d87 100644
2645     --- a/drivers/net/wireless/broadcom/b43/main.c
2646     +++ b/drivers/net/wireless/broadcom/b43/main.c
2647     @@ -5596,7 +5596,7 @@ static struct b43_wl *b43_wireless_init(struct b43_bus_dev *dev)
2648     /* fill hw info */
2649     ieee80211_hw_set(hw, RX_INCLUDES_FCS);
2650     ieee80211_hw_set(hw, SIGNAL_DBM);
2651     -
2652     + ieee80211_hw_set(hw, MFP_CAPABLE);
2653     hw->wiphy->interface_modes =
2654     BIT(NL80211_IFTYPE_AP) |
2655     BIT(NL80211_IFTYPE_MESH_POINT) |
2656     diff --git a/drivers/net/wireless/broadcom/b43legacy/main.c b/drivers/net/wireless/broadcom/b43legacy/main.c
2657     index 9da8bd792702..fe658a9b53cb 100644
2658     --- a/drivers/net/wireless/broadcom/b43legacy/main.c
2659     +++ b/drivers/net/wireless/broadcom/b43legacy/main.c
2660     @@ -3835,6 +3835,7 @@ static int b43legacy_wireless_init(struct ssb_device *dev)
2661     /* fill hw info */
2662     ieee80211_hw_set(hw, RX_INCLUDES_FCS);
2663     ieee80211_hw_set(hw, SIGNAL_DBM);
2664     + ieee80211_hw_set(hw, MFP_CAPABLE); /* Allow WPA3 in software */
2665    
2666     hw->wiphy->interface_modes =
2667     BIT(NL80211_IFTYPE_AP) |
2668     diff --git a/drivers/net/wireless/broadcom/b43legacy/xmit.c b/drivers/net/wireless/broadcom/b43legacy/xmit.c
2669     index 35ccf400b02c..87045e30e585 100644
2670     --- a/drivers/net/wireless/broadcom/b43legacy/xmit.c
2671     +++ b/drivers/net/wireless/broadcom/b43legacy/xmit.c
2672     @@ -571,6 +571,7 @@ void b43legacy_rx(struct b43legacy_wldev *dev,
2673     default:
2674     b43legacywarn(dev->wl, "Unexpected value for chanstat (0x%X)\n",
2675     chanstat);
2676     + goto drop;
2677     }
2678    
2679     memcpy(IEEE80211_SKB_RXCB(skb), &status, sizeof(status));
2680     diff --git a/drivers/net/wireless/marvell/mwifiex/cfg80211.c b/drivers/net/wireless/marvell/mwifiex/cfg80211.c
2681     index 94901b0041ce..c597af69f48f 100644
2682     --- a/drivers/net/wireless/marvell/mwifiex/cfg80211.c
2683     +++ b/drivers/net/wireless/marvell/mwifiex/cfg80211.c
2684     @@ -1446,7 +1446,8 @@ mwifiex_cfg80211_dump_station(struct wiphy *wiphy, struct net_device *dev,
2685     int idx, u8 *mac, struct station_info *sinfo)
2686     {
2687     struct mwifiex_private *priv = mwifiex_netdev_get_priv(dev);
2688     - static struct mwifiex_sta_node *node;
2689     + struct mwifiex_sta_node *node;
2690     + int i;
2691    
2692     if ((GET_BSS_ROLE(priv) == MWIFIEX_BSS_ROLE_STA) &&
2693     priv->media_connected && idx == 0) {
2694     @@ -1456,13 +1457,10 @@ mwifiex_cfg80211_dump_station(struct wiphy *wiphy, struct net_device *dev,
2695     mwifiex_send_cmd(priv, HOST_CMD_APCMD_STA_LIST,
2696     HostCmd_ACT_GEN_GET, 0, NULL, true);
2697    
2698     - if (node && (&node->list == &priv->sta_list)) {
2699     - node = NULL;
2700     - return -ENOENT;
2701     - }
2702     -
2703     - node = list_prepare_entry(node, &priv->sta_list, list);
2704     - list_for_each_entry_continue(node, &priv->sta_list, list) {
2705     + i = 0;
2706     + list_for_each_entry(node, &priv->sta_list, list) {
2707     + if (i++ != idx)
2708     + continue;
2709     ether_addr_copy(mac, node->mac_addr);
2710     return mwifiex_dump_station_info(priv, node, sinfo);
2711     }
2712     diff --git a/drivers/net/wireless/realtek/rtlwifi/usb.c b/drivers/net/wireless/realtek/rtlwifi/usb.c
2713     index 1f02461de261..93b22a5b6878 100644
2714     --- a/drivers/net/wireless/realtek/rtlwifi/usb.c
2715     +++ b/drivers/net/wireless/realtek/rtlwifi/usb.c
2716     @@ -927,10 +927,8 @@ static struct urb *_rtl_usb_tx_urb_setup(struct ieee80211_hw *hw,
2717    
2718     WARN_ON(NULL == skb);
2719     _urb = usb_alloc_urb(0, GFP_ATOMIC);
2720     - if (!_urb) {
2721     - kfree_skb(skb);
2722     + if (!_urb)
2723     return NULL;
2724     - }
2725     _rtl_install_trx_info(rtlusb, skb, ep_num);
2726     usb_fill_bulk_urb(_urb, rtlusb->udev, usb_sndbulkpipe(rtlusb->udev,
2727     ep_num), skb->data, skb->len, _rtl_tx_complete, skb);
2728     @@ -945,7 +943,6 @@ static void _rtl_usb_transmit(struct ieee80211_hw *hw, struct sk_buff *skb,
2729     struct rtl_usb *rtlusb = rtl_usbdev(rtl_usbpriv(hw));
2730     u32 ep_num;
2731     struct urb *_urb = NULL;
2732     - struct sk_buff *_skb = NULL;
2733    
2734     WARN_ON(NULL == rtlusb->usb_tx_aggregate_hdl);
2735     if (unlikely(IS_USB_STOP(rtlusb))) {
2736     @@ -955,8 +952,7 @@ static void _rtl_usb_transmit(struct ieee80211_hw *hw, struct sk_buff *skb,
2737     return;
2738     }
2739     ep_num = rtlusb->ep_map.ep_mapping[qnum];
2740     - _skb = skb;
2741     - _urb = _rtl_usb_tx_urb_setup(hw, _skb, ep_num);
2742     + _urb = _rtl_usb_tx_urb_setup(hw, skb, ep_num);
2743     if (unlikely(!_urb)) {
2744     RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
2745     "Can't allocate urb. Drop skb!\n");
2746     diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
2747     index 16611cf3aba4..19658873b4c1 100644
2748     --- a/drivers/pci/probe.c
2749     +++ b/drivers/pci/probe.c
2750     @@ -1251,7 +1251,7 @@ int pci_setup_device(struct pci_dev *dev)
2751     /* device class may be changed after fixup */
2752     class = dev->class >> 8;
2753    
2754     - if (dev->non_compliant_bars) {
2755     + if (dev->non_compliant_bars && !dev->mmio_always_on) {
2756     pci_read_config_word(dev, PCI_COMMAND, &cmd);
2757     if (cmd & (PCI_COMMAND_IO | PCI_COMMAND_MEMORY)) {
2758     dev_info(&dev->dev, "device has non-compliant BARs; disabling IO/MEM decoding\n");
2759     @@ -1360,13 +1360,33 @@ static void pci_configure_mps(struct pci_dev *dev)
2760     struct pci_dev *bridge = pci_upstream_bridge(dev);
2761     int mps, p_mps, rc;
2762    
2763     - if (!pci_is_pcie(dev) || !bridge || !pci_is_pcie(bridge))
2764     + if (!pci_is_pcie(dev))
2765     return;
2766    
2767     /* MPS and MRRS fields are of type 'RsvdP' for VFs, short-circuit out */
2768     if (dev->is_virtfn)
2769     return;
2770    
2771     + /*
2772     + * For Root Complex Integrated Endpoints, program the maximum
2773     + * supported value unless limited by the PCIE_BUS_PEER2PEER case.
2774     + */
2775     + if (pci_pcie_type(dev) == PCI_EXP_TYPE_RC_END) {
2776     + if (pcie_bus_config == PCIE_BUS_PEER2PEER)
2777     + mps = 128;
2778     + else
2779     + mps = 128 << dev->pcie_mpss;
2780     + rc = pcie_set_mps(dev, mps);
2781     + if (rc) {
2782     + pci_warn(dev, "can't set Max Payload Size to %d; if necessary, use \"pci=pcie_bus_safe\" and report a bug\n",
2783     + mps);
2784     + }
2785     + return;
2786     + }
2787     +
2788     + if (!bridge || !pci_is_pcie(bridge))
2789     + return;
2790     +
2791     mps = pcie_get_mps(dev);
2792     p_mps = pcie_get_mps(bridge);
2793    
2794     diff --git a/drivers/pinctrl/samsung/pinctrl-exynos.c b/drivers/pinctrl/samsung/pinctrl-exynos.c
2795     index e8aee6d88a40..6a23136bc813 100644
2796     --- a/drivers/pinctrl/samsung/pinctrl-exynos.c
2797     +++ b/drivers/pinctrl/samsung/pinctrl-exynos.c
2798     @@ -289,6 +289,7 @@ struct exynos_eint_gpio_save {
2799     u32 eint_con;
2800     u32 eint_fltcon0;
2801     u32 eint_fltcon1;
2802     + u32 eint_mask;
2803     };
2804    
2805     /*
2806     @@ -585,10 +586,13 @@ static void exynos_pinctrl_suspend_bank(
2807     + 2 * bank->eint_offset);
2808     save->eint_fltcon1 = readl(regs + EXYNOS_GPIO_EFLTCON_OFFSET
2809     + 2 * bank->eint_offset + 4);
2810     + save->eint_mask = readl(regs + bank->irq_chip->eint_mask
2811     + + bank->eint_offset);
2812    
2813     pr_debug("%s: save con %#010x\n", bank->name, save->eint_con);
2814     pr_debug("%s: save fltcon0 %#010x\n", bank->name, save->eint_fltcon0);
2815     pr_debug("%s: save fltcon1 %#010x\n", bank->name, save->eint_fltcon1);
2816     + pr_debug("%s: save mask %#010x\n", bank->name, save->eint_mask);
2817     }
2818    
2819     static void exynos_pinctrl_suspend(struct samsung_pinctrl_drv_data *drvdata)
2820     @@ -617,6 +621,9 @@ static void exynos_pinctrl_resume_bank(
2821     pr_debug("%s: fltcon1 %#010x => %#010x\n", bank->name,
2822     readl(regs + EXYNOS_GPIO_EFLTCON_OFFSET
2823     + 2 * bank->eint_offset + 4), save->eint_fltcon1);
2824     + pr_debug("%s: mask %#010x => %#010x\n", bank->name,
2825     + readl(regs + bank->irq_chip->eint_mask
2826     + + bank->eint_offset), save->eint_mask);
2827    
2828     writel(save->eint_con, regs + EXYNOS_GPIO_ECON_OFFSET
2829     + bank->eint_offset);
2830     @@ -624,6 +631,8 @@ static void exynos_pinctrl_resume_bank(
2831     + 2 * bank->eint_offset);
2832     writel(save->eint_fltcon1, regs + EXYNOS_GPIO_EFLTCON_OFFSET
2833     + 2 * bank->eint_offset + 4);
2834     + writel(save->eint_mask, regs + bank->irq_chip->eint_mask
2835     + + bank->eint_offset);
2836     }
2837    
2838     static void exynos_pinctrl_resume(struct samsung_pinctrl_drv_data *drvdata)
2839     diff --git a/drivers/power/reset/vexpress-poweroff.c b/drivers/power/reset/vexpress-poweroff.c
2840     index e9e749f87517..8fb43c4438e6 100644
2841     --- a/drivers/power/reset/vexpress-poweroff.c
2842     +++ b/drivers/power/reset/vexpress-poweroff.c
2843     @@ -150,6 +150,7 @@ static struct platform_driver vexpress_reset_driver = {
2844     .driver = {
2845     .name = "vexpress-reset",
2846     .of_match_table = vexpress_reset_of_match,
2847     + .suppress_bind_attrs = true,
2848     },
2849     };
2850    
2851     diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
2852     index c7b770075caa..80341863caa5 100644
2853     --- a/drivers/scsi/scsi_lib.c
2854     +++ b/drivers/scsi/scsi_lib.c
2855     @@ -1029,10 +1029,10 @@ int scsi_init_io(struct scsi_cmnd *cmd)
2856     struct scsi_device *sdev = cmd->device;
2857     struct request *rq = cmd->request;
2858     bool is_mq = (rq->mq_ctx != NULL);
2859     - int error;
2860     + int error = BLKPREP_KILL;
2861    
2862     if (WARN_ON_ONCE(!rq->nr_phys_segments))
2863     - return -EINVAL;
2864     + goto err_exit;
2865    
2866     error = scsi_init_sgtable(rq, &cmd->sdb);
2867     if (error)
2868     diff --git a/drivers/spi/spi-bcm-qspi.c b/drivers/spi/spi-bcm-qspi.c
2869     index 63231760facc..1906b2319e5b 100644
2870     --- a/drivers/spi/spi-bcm-qspi.c
2871     +++ b/drivers/spi/spi-bcm-qspi.c
2872     @@ -698,7 +698,7 @@ static void read_from_hw(struct bcm_qspi *qspi, int slots)
2873     if (buf)
2874     buf[tp.byte] = read_rxram_slot_u8(qspi, slot);
2875     dev_dbg(&qspi->pdev->dev, "RD %02x\n",
2876     - buf ? buf[tp.byte] : 0xff);
2877     + buf ? buf[tp.byte] : 0x0);
2878     } else {
2879     u16 *buf = tp.trans->rx_buf;
2880    
2881     @@ -706,7 +706,7 @@ static void read_from_hw(struct bcm_qspi *qspi, int slots)
2882     buf[tp.byte / 2] = read_rxram_slot_u16(qspi,
2883     slot);
2884     dev_dbg(&qspi->pdev->dev, "RD %04x\n",
2885     - buf ? buf[tp.byte] : 0xffff);
2886     + buf ? buf[tp.byte / 2] : 0x0);
2887     }
2888    
2889     update_qspi_trans_byte_count(qspi, &tp,
2890     @@ -761,13 +761,13 @@ static int write_to_hw(struct bcm_qspi *qspi, struct spi_device *spi)
2891     while (!tstatus && slot < MSPI_NUM_CDRAM) {
2892     if (tp.trans->bits_per_word <= 8) {
2893     const u8 *buf = tp.trans->tx_buf;
2894     - u8 val = buf ? buf[tp.byte] : 0xff;
2895     + u8 val = buf ? buf[tp.byte] : 0x00;
2896    
2897     write_txram_slot_u8(qspi, slot, val);
2898     dev_dbg(&qspi->pdev->dev, "WR %02x\n", val);
2899     } else {
2900     const u16 *buf = tp.trans->tx_buf;
2901     - u16 val = buf ? buf[tp.byte / 2] : 0xffff;
2902     + u16 val = buf ? buf[tp.byte / 2] : 0x0000;
2903    
2904     write_txram_slot_u16(qspi, slot, val);
2905     dev_dbg(&qspi->pdev->dev, "WR %04x\n", val);
2906     diff --git a/drivers/spi/spi-bcm2835.c b/drivers/spi/spi-bcm2835.c
2907     index eab27d41ba83..df6abc75bc16 100644
2908     --- a/drivers/spi/spi-bcm2835.c
2909     +++ b/drivers/spi/spi-bcm2835.c
2910     @@ -793,7 +793,7 @@ static int bcm2835_spi_probe(struct platform_device *pdev)
2911     goto out_clk_disable;
2912     }
2913    
2914     - err = devm_spi_register_master(&pdev->dev, master);
2915     + err = spi_register_master(master);
2916     if (err) {
2917     dev_err(&pdev->dev, "could not register SPI master: %d\n", err);
2918     goto out_clk_disable;
2919     @@ -813,6 +813,8 @@ static int bcm2835_spi_remove(struct platform_device *pdev)
2920     struct spi_master *master = platform_get_drvdata(pdev);
2921     struct bcm2835_spi *bs = spi_master_get_devdata(master);
2922    
2923     + spi_unregister_master(master);
2924     +
2925     /* Clear FIFOs, and disable the HW block */
2926     bcm2835_wr(bs, BCM2835_SPI_CS,
2927     BCM2835_SPI_CS_CLEAR_RX | BCM2835_SPI_CS_CLEAR_TX);
2928     diff --git a/drivers/spi/spi-bcm2835aux.c b/drivers/spi/spi-bcm2835aux.c
2929     index e075712c501e..b7f78e6d9bec 100644
2930     --- a/drivers/spi/spi-bcm2835aux.c
2931     +++ b/drivers/spi/spi-bcm2835aux.c
2932     @@ -485,7 +485,7 @@ static int bcm2835aux_spi_probe(struct platform_device *pdev)
2933     goto out_clk_disable;
2934     }
2935    
2936     - err = devm_spi_register_master(&pdev->dev, master);
2937     + err = spi_register_master(master);
2938     if (err) {
2939     dev_err(&pdev->dev, "could not register SPI master: %d\n", err);
2940     goto out_clk_disable;
2941     @@ -505,6 +505,8 @@ static int bcm2835aux_spi_remove(struct platform_device *pdev)
2942     struct spi_master *master = platform_get_drvdata(pdev);
2943     struct bcm2835aux_spi *bs = spi_master_get_devdata(master);
2944    
2945     + spi_unregister_master(master);
2946     +
2947     bcm2835aux_spi_reset_hw(bs);
2948    
2949     /* disable the HW block by releasing the clock */
2950     diff --git a/drivers/spi/spi-dw-mid.c b/drivers/spi/spi-dw-mid.c
2951     index e31971f91475..c079ab36275f 100644
2952     --- a/drivers/spi/spi-dw-mid.c
2953     +++ b/drivers/spi/spi-dw-mid.c
2954     @@ -155,6 +155,7 @@ static struct dma_async_tx_descriptor *dw_spi_dma_prepare_tx(struct dw_spi *dws,
2955     if (!xfer->tx_buf)
2956     return NULL;
2957    
2958     + memset(&txconf, 0, sizeof(txconf));
2959     txconf.direction = DMA_MEM_TO_DEV;
2960     txconf.dst_addr = dws->dma_addr;
2961     txconf.dst_maxburst = 16;
2962     @@ -201,6 +202,7 @@ static struct dma_async_tx_descriptor *dw_spi_dma_prepare_rx(struct dw_spi *dws,
2963     if (!xfer->rx_buf)
2964     return NULL;
2965    
2966     + memset(&rxconf, 0, sizeof(rxconf));
2967     rxconf.direction = DMA_DEV_TO_MEM;
2968     rxconf.src_addr = dws->dma_addr;
2969     rxconf.src_maxburst = 16;
2970     @@ -226,19 +228,23 @@ static struct dma_async_tx_descriptor *dw_spi_dma_prepare_rx(struct dw_spi *dws,
2971    
2972     static int mid_spi_dma_setup(struct dw_spi *dws, struct spi_transfer *xfer)
2973     {
2974     - u16 dma_ctrl = 0;
2975     + u16 imr = 0, dma_ctrl = 0;
2976    
2977     dw_writel(dws, DW_SPI_DMARDLR, 0xf);
2978     dw_writel(dws, DW_SPI_DMATDLR, 0x10);
2979    
2980     - if (xfer->tx_buf)
2981     + if (xfer->tx_buf) {
2982     dma_ctrl |= SPI_DMA_TDMAE;
2983     - if (xfer->rx_buf)
2984     + imr |= SPI_INT_TXOI;
2985     + }
2986     + if (xfer->rx_buf) {
2987     dma_ctrl |= SPI_DMA_RDMAE;
2988     + imr |= SPI_INT_RXUI | SPI_INT_RXOI;
2989     + }
2990     dw_writel(dws, DW_SPI_DMACR, dma_ctrl);
2991    
2992     /* Set the interrupt mask */
2993     - spi_umask_intr(dws, SPI_INT_TXOI | SPI_INT_RXUI | SPI_INT_RXOI);
2994     + spi_umask_intr(dws, imr);
2995    
2996     dws->transfer_handler = dma_transfer;
2997    
2998     @@ -268,7 +274,7 @@ static int mid_spi_dma_transfer(struct dw_spi *dws, struct spi_transfer *xfer)
2999     dma_async_issue_pending(dws->txchan);
3000     }
3001    
3002     - return 0;
3003     + return 1;
3004     }
3005    
3006     static void mid_spi_dma_stop(struct dw_spi *dws)
3007     diff --git a/drivers/spi/spi-dw.c b/drivers/spi/spi-dw.c
3008     index babf0a337e96..91f44e3e1930 100644
3009     --- a/drivers/spi/spi-dw.c
3010     +++ b/drivers/spi/spi-dw.c
3011     @@ -384,11 +384,8 @@ static int dw_spi_transfer_one(struct spi_master *master,
3012    
3013     spi_enable_chip(dws, 1);
3014    
3015     - if (dws->dma_mapped) {
3016     - ret = dws->dma_ops->dma_transfer(dws, transfer);
3017     - if (ret < 0)
3018     - return ret;
3019     - }
3020     + if (dws->dma_mapped)
3021     + return dws->dma_ops->dma_transfer(dws, transfer);
3022    
3023     if (chip->poll_mode)
3024     return poll_transfer(dws);
3025     @@ -500,6 +497,8 @@ int dw_spi_add_host(struct device *dev, struct dw_spi *dws)
3026     snprintf(dws->name, sizeof(dws->name), "dw_spi%d", dws->bus_num);
3027     spin_lock_init(&dws->buf_lock);
3028    
3029     + spi_master_set_devdata(master, dws);
3030     +
3031     ret = request_irq(dws->irq, dw_spi_irq, IRQF_SHARED, dws->name, master);
3032     if (ret < 0) {
3033     dev_err(dev, "can not get IRQ\n");
3034     @@ -531,8 +530,7 @@ int dw_spi_add_host(struct device *dev, struct dw_spi *dws)
3035     }
3036     }
3037    
3038     - spi_master_set_devdata(master, dws);
3039     - ret = devm_spi_register_master(dev, master);
3040     + ret = spi_register_master(master);
3041     if (ret) {
3042     dev_err(&master->dev, "problem registering spi master\n");
3043     goto err_dma_exit;
3044     @@ -556,6 +554,8 @@ void dw_spi_remove_host(struct dw_spi *dws)
3045     {
3046     dw_spi_debugfs_remove(dws);
3047    
3048     + spi_unregister_master(dws->master);
3049     +
3050     if (dws->dma_ops && dws->dma_ops->dma_exit)
3051     dws->dma_ops->dma_exit(dws);
3052    
3053     diff --git a/drivers/spi/spi-pxa2xx.c b/drivers/spi/spi-pxa2xx.c
3054     index 2f84d7653afd..da3834fe5e57 100644
3055     --- a/drivers/spi/spi-pxa2xx.c
3056     +++ b/drivers/spi/spi-pxa2xx.c
3057     @@ -1774,7 +1774,7 @@ static int pxa2xx_spi_probe(struct platform_device *pdev)
3058    
3059     /* Register with the SPI framework */
3060     platform_set_drvdata(pdev, drv_data);
3061     - status = devm_spi_register_master(&pdev->dev, master);
3062     + status = spi_register_master(master);
3063     if (status != 0) {
3064     dev_err(&pdev->dev, "problem registering spi master\n");
3065     goto out_error_clock_enabled;
3066     @@ -1804,6 +1804,8 @@ static int pxa2xx_spi_remove(struct platform_device *pdev)
3067    
3068     pm_runtime_get_sync(&pdev->dev);
3069    
3070     + spi_unregister_master(drv_data->master);
3071     +
3072     /* Disable the SSP at the peripheral and SOC level */
3073     pxa2xx_spi_write(drv_data, SSCR0, 0);
3074     clk_disable_unprepare(ssp->clk);
3075     diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
3076     index d74d341f9890..3fadc564d781 100644
3077     --- a/drivers/spi/spi.c
3078     +++ b/drivers/spi/spi.c
3079     @@ -2025,18 +2025,17 @@ static int __unregister(struct device *dev, void *null)
3080     */
3081     void spi_unregister_master(struct spi_master *master)
3082     {
3083     - int dummy;
3084     -
3085     if (master->queued) {
3086     if (spi_destroy_queue(master))
3087     dev_err(&master->dev, "queue remove failed\n");
3088     }
3089    
3090     + device_for_each_child(&master->dev, NULL, __unregister);
3091     +
3092     mutex_lock(&board_lock);
3093     list_del(&master->list);
3094     mutex_unlock(&board_lock);
3095    
3096     - dummy = device_for_each_child(&master->dev, NULL, __unregister);
3097     device_unregister(&master->dev);
3098     }
3099     EXPORT_SYMBOL_GPL(spi_unregister_master);
3100     diff --git a/drivers/staging/android/ion/ion_heap.c b/drivers/staging/android/ion/ion_heap.c
3101     index c2a7cb95725b..4fc5de13582d 100644
3102     --- a/drivers/staging/android/ion/ion_heap.c
3103     +++ b/drivers/staging/android/ion/ion_heap.c
3104     @@ -105,12 +105,12 @@ int ion_heap_map_user(struct ion_heap *heap, struct ion_buffer *buffer,
3105    
3106     static int ion_heap_clear_pages(struct page **pages, int num, pgprot_t pgprot)
3107     {
3108     - void *addr = vm_map_ram(pages, num, -1, pgprot);
3109     + void *addr = vmap(pages, num, VM_MAP, pgprot);
3110    
3111     if (!addr)
3112     return -ENOMEM;
3113     memset(addr, 0, PAGE_SIZE * num);
3114     - vm_unmap_ram(addr, num);
3115     + vunmap(addr);
3116    
3117     return 0;
3118     }
3119     diff --git a/drivers/staging/greybus/sdio.c b/drivers/staging/greybus/sdio.c
3120     index 5649ef1e379d..82a1c2cf6687 100644
3121     --- a/drivers/staging/greybus/sdio.c
3122     +++ b/drivers/staging/greybus/sdio.c
3123     @@ -413,6 +413,7 @@ static int gb_sdio_command(struct gb_sdio_host *host, struct mmc_command *cmd)
3124     struct gb_sdio_command_request request = {0};
3125     struct gb_sdio_command_response response;
3126     struct mmc_data *data = host->mrq->data;
3127     + unsigned int timeout_ms;
3128     u8 cmd_flags;
3129     u8 cmd_type;
3130     int i;
3131     @@ -471,9 +472,12 @@ static int gb_sdio_command(struct gb_sdio_host *host, struct mmc_command *cmd)
3132     request.data_blksz = cpu_to_le16(data->blksz);
3133     }
3134    
3135     - ret = gb_operation_sync(host->connection, GB_SDIO_TYPE_COMMAND,
3136     - &request, sizeof(request), &response,
3137     - sizeof(response));
3138     + timeout_ms = cmd->busy_timeout ? cmd->busy_timeout :
3139     + GB_OPERATION_TIMEOUT_DEFAULT;
3140     +
3141     + ret = gb_operation_sync_timeout(host->connection, GB_SDIO_TYPE_COMMAND,
3142     + &request, sizeof(request), &response,
3143     + sizeof(response), timeout_ms);
3144     if (ret < 0)
3145     goto out;
3146    
3147     diff --git a/drivers/video/fbdev/w100fb.c b/drivers/video/fbdev/w100fb.c
3148     index 10951c82f6ed..7bd4c27cfb14 100644
3149     --- a/drivers/video/fbdev/w100fb.c
3150     +++ b/drivers/video/fbdev/w100fb.c
3151     @@ -583,6 +583,7 @@ static void w100fb_restore_vidmem(struct w100fb_par *par)
3152     memsize=par->mach->mem->size;
3153     memcpy_toio(remapped_fbuf + (W100_FB_BASE-MEM_WINDOW_BASE), par->saved_extmem, memsize);
3154     vfree(par->saved_extmem);
3155     + par->saved_extmem = NULL;
3156     }
3157     if (par->saved_intmem) {
3158     memsize=MEM_INT_SIZE;
3159     @@ -591,6 +592,7 @@ static void w100fb_restore_vidmem(struct w100fb_par *par)
3160     else
3161     memcpy_toio(remapped_fbuf + (W100_FB_BASE-MEM_WINDOW_BASE), par->saved_intmem, memsize);
3162     vfree(par->saved_intmem);
3163     + par->saved_intmem = NULL;
3164     }
3165     }
3166    
3167     diff --git a/drivers/w1/masters/omap_hdq.c b/drivers/w1/masters/omap_hdq.c
3168     index 86637fec4eaa..6bc6823f81fa 100644
3169     --- a/drivers/w1/masters/omap_hdq.c
3170     +++ b/drivers/w1/masters/omap_hdq.c
3171     @@ -204,7 +204,7 @@ static int hdq_write_byte(struct hdq_data *hdq_data, u8 val, u8 *status)
3172     /* check irqstatus */
3173     if (!(*status & OMAP_HDQ_INT_STATUS_TXCOMPLETE)) {
3174     dev_dbg(hdq_data->dev, "timeout waiting for"
3175     - " TXCOMPLETE/RXCOMPLETE, %x", *status);
3176     + " TXCOMPLETE/RXCOMPLETE, %x\n", *status);
3177     ret = -ETIMEDOUT;
3178     goto out;
3179     }
3180     @@ -215,7 +215,7 @@ static int hdq_write_byte(struct hdq_data *hdq_data, u8 val, u8 *status)
3181     OMAP_HDQ_FLAG_CLEAR, &tmp_status);
3182     if (ret) {
3183     dev_dbg(hdq_data->dev, "timeout waiting GO bit"
3184     - " return to zero, %x", tmp_status);
3185     + " return to zero, %x\n", tmp_status);
3186     }
3187    
3188     out:
3189     @@ -231,7 +231,7 @@ static irqreturn_t hdq_isr(int irq, void *_hdq)
3190     spin_lock_irqsave(&hdq_data->hdq_spinlock, irqflags);
3191     hdq_data->hdq_irqstatus = hdq_reg_in(hdq_data, OMAP_HDQ_INT_STATUS);
3192     spin_unlock_irqrestore(&hdq_data->hdq_spinlock, irqflags);
3193     - dev_dbg(hdq_data->dev, "hdq_isr: %x", hdq_data->hdq_irqstatus);
3194     + dev_dbg(hdq_data->dev, "hdq_isr: %x\n", hdq_data->hdq_irqstatus);
3195    
3196     if (hdq_data->hdq_irqstatus &
3197     (OMAP_HDQ_INT_STATUS_TXCOMPLETE | OMAP_HDQ_INT_STATUS_RXCOMPLETE
3198     @@ -339,7 +339,7 @@ static int omap_hdq_break(struct hdq_data *hdq_data)
3199     tmp_status = hdq_data->hdq_irqstatus;
3200     /* check irqstatus */
3201     if (!(tmp_status & OMAP_HDQ_INT_STATUS_TIMEOUT)) {
3202     - dev_dbg(hdq_data->dev, "timeout waiting for TIMEOUT, %x",
3203     + dev_dbg(hdq_data->dev, "timeout waiting for TIMEOUT, %x\n",
3204     tmp_status);
3205     ret = -ETIMEDOUT;
3206     goto out;
3207     @@ -366,7 +366,7 @@ static int omap_hdq_break(struct hdq_data *hdq_data)
3208     &tmp_status);
3209     if (ret)
3210     dev_dbg(hdq_data->dev, "timeout waiting INIT&GO bits"
3211     - " return to zero, %x", tmp_status);
3212     + " return to zero, %x\n", tmp_status);
3213    
3214     out:
3215     mutex_unlock(&hdq_data->hdq_mutex);
3216     diff --git a/fs/btrfs/file-item.c b/fs/btrfs/file-item.c
3217     index d0d571c47d33..4f919628137c 100644
3218     --- a/fs/btrfs/file-item.c
3219     +++ b/fs/btrfs/file-item.c
3220     @@ -779,10 +779,12 @@ again:
3221     nritems = btrfs_header_nritems(path->nodes[0]);
3222     if (!nritems || (path->slots[0] >= nritems - 1)) {
3223     ret = btrfs_next_leaf(root, path);
3224     - if (ret == 1)
3225     + if (ret < 0) {
3226     + goto out;
3227     + } else if (ret > 0) {
3228     found_next = 1;
3229     - if (ret != 0)
3230     goto insert;
3231     + }
3232     slot = path->slots[0];
3233     }
3234     btrfs_item_key_to_cpu(path->nodes[0], &found_key, slot);
3235     diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
3236     index 250c8403ec67..c425443c31fe 100644
3237     --- a/fs/btrfs/inode.c
3238     +++ b/fs/btrfs/inode.c
3239     @@ -8494,7 +8494,6 @@ static int btrfs_submit_direct_hook(struct btrfs_dio_private *dip,
3240     bio->bi_private = dip;
3241     bio->bi_end_io = btrfs_end_dio_bio;
3242     btrfs_io_bio(bio)->logical = file_offset;
3243     - atomic_inc(&dip->pending_bios);
3244    
3245     while (bvec <= (orig_bio->bi_io_vec + orig_bio->bi_vcnt - 1)) {
3246     nr_sectors = BTRFS_BYTES_TO_BLKS(root->fs_info, bvec->bv_len);
3247     @@ -8560,7 +8559,8 @@ submit:
3248     if (!ret)
3249     return 0;
3250    
3251     - bio_put(bio);
3252     + if (bio != orig_bio)
3253     + bio_put(bio);
3254     out_err:
3255     dip->errors = 1;
3256     /*
3257     @@ -8607,7 +8607,7 @@ static void btrfs_submit_direct(struct bio *dio_bio, struct inode *inode,
3258     io_bio->bi_private = dip;
3259     dip->orig_bio = io_bio;
3260     dip->dio_bio = dio_bio;
3261     - atomic_set(&dip->pending_bios, 0);
3262     + atomic_set(&dip->pending_bios, 1);
3263     btrfs_bio = btrfs_io_bio(io_bio);
3264     btrfs_bio->logical = file_offset;
3265    
3266     diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c
3267     index edfc7ba38b33..080b12d65b0c 100644
3268     --- a/fs/btrfs/send.c
3269     +++ b/fs/btrfs/send.c
3270     @@ -35,6 +35,7 @@
3271     #include "btrfs_inode.h"
3272     #include "transaction.h"
3273     #include "compression.h"
3274     +#include "xattr.h"
3275    
3276     /*
3277     * Maximum number of references an extent can have in order for us to attempt to
3278     @@ -4368,6 +4369,10 @@ static int __process_new_xattr(int num, struct btrfs_key *di_key,
3279     struct fs_path *p;
3280     struct posix_acl_xattr_header dummy_acl;
3281    
3282     + /* Capabilities are emitted by finish_inode_if_needed */
3283     + if (!strncmp(name, XATTR_NAME_CAPS, name_len))
3284     + return 0;
3285     +
3286     p = fs_path_alloc();
3287     if (!p)
3288     return -ENOMEM;
3289     @@ -4904,6 +4909,64 @@ static int send_extent_data(struct send_ctx *sctx,
3290     return 0;
3291     }
3292    
3293     +/*
3294     + * Search for a capability xattr related to sctx->cur_ino. If the capability is
3295     + * found, call send_set_xattr function to emit it.
3296     + *
3297     + * Return 0 if there isn't a capability, or when the capability was emitted
3298     + * successfully, or < 0 if an error occurred.
3299     + */
3300     +static int send_capabilities(struct send_ctx *sctx)
3301     +{
3302     + struct fs_path *fspath = NULL;
3303     + struct btrfs_path *path;
3304     + struct btrfs_dir_item *di;
3305     + struct extent_buffer *leaf;
3306     + unsigned long data_ptr;
3307     + char *buf = NULL;
3308     + int buf_len;
3309     + int ret = 0;
3310     +
3311     + path = alloc_path_for_send();
3312     + if (!path)
3313     + return -ENOMEM;
3314     +
3315     + di = btrfs_lookup_xattr(NULL, sctx->send_root, path, sctx->cur_ino,
3316     + XATTR_NAME_CAPS, strlen(XATTR_NAME_CAPS), 0);
3317     + if (!di) {
3318     + /* There is no xattr for this inode */
3319     + goto out;
3320     + } else if (IS_ERR(di)) {
3321     + ret = PTR_ERR(di);
3322     + goto out;
3323     + }
3324     +
3325     + leaf = path->nodes[0];
3326     + buf_len = btrfs_dir_data_len(leaf, di);
3327     +
3328     + fspath = fs_path_alloc();
3329     + buf = kmalloc(buf_len, GFP_KERNEL);
3330     + if (!fspath || !buf) {
3331     + ret = -ENOMEM;
3332     + goto out;
3333     + }
3334     +
3335     + ret = get_cur_path(sctx, sctx->cur_ino, sctx->cur_inode_gen, fspath);
3336     + if (ret < 0)
3337     + goto out;
3338     +
3339     + data_ptr = (unsigned long)(di + 1) + btrfs_dir_name_len(leaf, di);
3340     + read_extent_buffer(leaf, buf, data_ptr, buf_len);
3341     +
3342     + ret = send_set_xattr(sctx, fspath, XATTR_NAME_CAPS,
3343     + strlen(XATTR_NAME_CAPS), buf, buf_len);
3344     +out:
3345     + kfree(buf);
3346     + fs_path_free(fspath);
3347     + btrfs_free_path(path);
3348     + return ret;
3349     +}
3350     +
3351     static int clone_range(struct send_ctx *sctx,
3352     struct clone_root *clone_root,
3353     const u64 disk_byte,
3354     @@ -5615,6 +5678,10 @@ static int finish_inode_if_needed(struct send_ctx *sctx, int at_end)
3355     goto out;
3356     }
3357    
3358     + ret = send_capabilities(sctx);
3359     + if (ret < 0)
3360     + goto out;
3361     +
3362     /*
3363     * If other directory inodes depended on our current directory
3364     * inode's move/rename, now do their move/rename operations.
3365     diff --git a/fs/ext4/ext4_extents.h b/fs/ext4/ext4_extents.h
3366     index a284fb28944b..63291c265aa0 100644
3367     --- a/fs/ext4/ext4_extents.h
3368     +++ b/fs/ext4/ext4_extents.h
3369     @@ -169,10 +169,13 @@ struct ext4_ext_path {
3370     (EXT_FIRST_EXTENT((__hdr__)) + le16_to_cpu((__hdr__)->eh_entries) - 1)
3371     #define EXT_LAST_INDEX(__hdr__) \
3372     (EXT_FIRST_INDEX((__hdr__)) + le16_to_cpu((__hdr__)->eh_entries) - 1)
3373     -#define EXT_MAX_EXTENT(__hdr__) \
3374     - (EXT_FIRST_EXTENT((__hdr__)) + le16_to_cpu((__hdr__)->eh_max) - 1)
3375     +#define EXT_MAX_EXTENT(__hdr__) \
3376     + ((le16_to_cpu((__hdr__)->eh_max)) ? \
3377     + ((EXT_FIRST_EXTENT((__hdr__)) + le16_to_cpu((__hdr__)->eh_max) - 1)) \
3378     + : 0)
3379     #define EXT_MAX_INDEX(__hdr__) \
3380     - (EXT_FIRST_INDEX((__hdr__)) + le16_to_cpu((__hdr__)->eh_max) - 1)
3381     + ((le16_to_cpu((__hdr__)->eh_max)) ? \
3382     + ((EXT_FIRST_INDEX((__hdr__)) + le16_to_cpu((__hdr__)->eh_max) - 1)) : 0)
3383    
3384     static inline struct ext4_extent_header *ext_inode_hdr(struct inode *inode)
3385     {
3386     diff --git a/fs/ext4/fsync.c b/fs/ext4/fsync.c
3387     index 88effb1053c7..6dc0b89c7b55 100644
3388     --- a/fs/ext4/fsync.c
3389     +++ b/fs/ext4/fsync.c
3390     @@ -43,30 +43,28 @@
3391     */
3392     static int ext4_sync_parent(struct inode *inode)
3393     {
3394     - struct dentry *dentry = NULL;
3395     - struct inode *next;
3396     + struct dentry *dentry, *next;
3397     int ret = 0;
3398    
3399     if (!ext4_test_inode_state(inode, EXT4_STATE_NEWENTRY))
3400     return 0;
3401     - inode = igrab(inode);
3402     + dentry = d_find_any_alias(inode);
3403     + if (!dentry)
3404     + return 0;
3405     while (ext4_test_inode_state(inode, EXT4_STATE_NEWENTRY)) {
3406     ext4_clear_inode_state(inode, EXT4_STATE_NEWENTRY);
3407     - dentry = d_find_any_alias(inode);
3408     - if (!dentry)
3409     - break;
3410     - next = igrab(d_inode(dentry->d_parent));
3411     +
3412     + next = dget_parent(dentry);
3413     dput(dentry);
3414     - if (!next)
3415     - break;
3416     - iput(inode);
3417     - inode = next;
3418     + dentry = next;
3419     + inode = dentry->d_inode;
3420     +
3421     /*
3422     * The directory inode may have gone through rmdir by now. But
3423     * the inode itself and its blocks are still allocated (we hold
3424     - * a reference to the inode so it didn't go through
3425     - * ext4_evict_inode()) and so we are safe to flush metadata
3426     - * blocks and the inode.
3427     + * a reference to the inode via its dentry), so it didn't go
3428     + * through ext4_evict_inode()) and so we are safe to flush
3429     + * metadata blocks and the inode.
3430     */
3431     ret = sync_mapping_buffers(inode->i_mapping);
3432     if (ret)
3433     @@ -75,7 +73,7 @@ static int ext4_sync_parent(struct inode *inode)
3434     if (ret)
3435     break;
3436     }
3437     - iput(inode);
3438     + dput(dentry);
3439     return ret;
3440     }
3441    
3442     diff --git a/fs/fat/inode.c b/fs/fat/inode.c
3443     index f0387d040331..9af410142f78 100644
3444     --- a/fs/fat/inode.c
3445     +++ b/fs/fat/inode.c
3446     @@ -1512,6 +1512,12 @@ static int fat_read_bpb(struct super_block *sb, struct fat_boot_sector *b,
3447     goto out;
3448     }
3449    
3450     + if (bpb->fat_fat_length == 0 && bpb->fat32_length == 0) {
3451     + if (!silent)
3452     + fat_msg(sb, KERN_ERR, "bogus number of FAT sectors");
3453     + goto out;
3454     + }
3455     +
3456     error = 0;
3457    
3458     out:
3459     diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c
3460     index 882e9d6830df..5a1a6dbbc55f 100644
3461     --- a/fs/fs-writeback.c
3462     +++ b/fs/fs-writeback.c
3463     @@ -269,6 +269,7 @@ void __inode_attach_wb(struct inode *inode, struct page *page)
3464     if (unlikely(cmpxchg(&inode->i_wb, NULL, wb)))
3465     wb_put(wb);
3466     }
3467     +EXPORT_SYMBOL_GPL(__inode_attach_wb);
3468    
3469     /**
3470     * locked_inode_to_wb_and_lock_list - determine a locked inode's wb and lock it
3471     diff --git a/fs/nilfs2/segment.c b/fs/nilfs2/segment.c
3472     index 36362d4bc344..a92af0ed0e28 100644
3473     --- a/fs/nilfs2/segment.c
3474     +++ b/fs/nilfs2/segment.c
3475     @@ -2793,6 +2793,8 @@ int nilfs_attach_log_writer(struct super_block *sb, struct nilfs_root *root)
3476     if (!nilfs->ns_writer)
3477     return -ENOMEM;
3478    
3479     + inode_attach_wb(nilfs->ns_bdev->bd_inode, NULL);
3480     +
3481     err = nilfs_segctor_start_thread(nilfs->ns_writer);
3482     if (err) {
3483     kfree(nilfs->ns_writer);
3484     diff --git a/fs/overlayfs/copy_up.c b/fs/overlayfs/copy_up.c
3485     index 36795eed40b0..299dbf59f28f 100644
3486     --- a/fs/overlayfs/copy_up.c
3487     +++ b/fs/overlayfs/copy_up.c
3488     @@ -56,7 +56,7 @@ int ovl_copy_xattr(struct dentry *old, struct dentry *new)
3489     {
3490     ssize_t list_size, size, value_size = 0;
3491     char *buf, *name, *value = NULL;
3492     - int uninitialized_var(error);
3493     + int error = 0;
3494     size_t slen;
3495    
3496     if (!(old->d_inode->i_opflags & IOP_XATTR) ||
3497     diff --git a/fs/proc/inode.c b/fs/proc/inode.c
3498     index c2afe39f0b9e..a28934912530 100644
3499     --- a/fs/proc/inode.c
3500     +++ b/fs/proc/inode.c
3501     @@ -417,7 +417,7 @@ const struct inode_operations proc_link_inode_operations = {
3502    
3503     struct inode *proc_get_inode(struct super_block *sb, struct proc_dir_entry *de)
3504     {
3505     - struct inode *inode = new_inode_pseudo(sb);
3506     + struct inode *inode = new_inode(sb);
3507    
3508     if (inode) {
3509     inode->i_ino = de->low_ino;
3510     diff --git a/fs/proc/self.c b/fs/proc/self.c
3511     index 40245954c450..c8bbc1c84a39 100644
3512     --- a/fs/proc/self.c
3513     +++ b/fs/proc/self.c
3514     @@ -53,7 +53,7 @@ int proc_setup_self(struct super_block *s)
3515     inode_lock(root_inode);
3516     self = d_alloc_name(s->s_root, "self");
3517     if (self) {
3518     - struct inode *inode = new_inode_pseudo(s);
3519     + struct inode *inode = new_inode(s);
3520     if (inode) {
3521     inode->i_ino = self_inum;
3522     inode->i_mtime = inode->i_atime = inode->i_ctime = current_time(inode);
3523     diff --git a/fs/proc/thread_self.c b/fs/proc/thread_self.c
3524     index 595b90a9766c..02d1db8e9723 100644
3525     --- a/fs/proc/thread_self.c
3526     +++ b/fs/proc/thread_self.c
3527     @@ -55,7 +55,7 @@ int proc_setup_thread_self(struct super_block *s)
3528     inode_lock(root_inode);
3529     thread_self = d_alloc_name(s->s_root, "thread-self");
3530     if (thread_self) {
3531     - struct inode *inode = new_inode_pseudo(s);
3532     + struct inode *inode = new_inode(s);
3533     if (inode) {
3534     inode->i_ino = thread_self_inum;
3535     inode->i_mtime = inode->i_atime = inode->i_ctime = current_time(inode);
3536     diff --git a/include/linux/kgdb.h b/include/linux/kgdb.h
3537     index e465bb15912d..6be5545d3584 100644
3538     --- a/include/linux/kgdb.h
3539     +++ b/include/linux/kgdb.h
3540     @@ -317,7 +317,7 @@ extern void gdbstub_exit(int status);
3541     extern int kgdb_single_step;
3542     extern atomic_t kgdb_active;
3543     #define in_dbg_master() \
3544     - (raw_smp_processor_id() == atomic_read(&kgdb_active))
3545     + (irqs_disabled() && (smp_processor_id() == atomic_read(&kgdb_active)))
3546     extern bool dbg_is_early;
3547     extern void __init dbg_late_init(void);
3548     #else /* ! CONFIG_KGDB */
3549     diff --git a/include/linux/sunrpc/gss_api.h b/include/linux/sunrpc/gss_api.h
3550     index 68ec78c1aa48..bd8480ae82e9 100644
3551     --- a/include/linux/sunrpc/gss_api.h
3552     +++ b/include/linux/sunrpc/gss_api.h
3553     @@ -82,6 +82,7 @@ struct pf_desc {
3554     u32 service;
3555     char *name;
3556     char *auth_domain_name;
3557     + struct auth_domain *domain;
3558     bool datatouch;
3559     };
3560    
3561     diff --git a/include/linux/sunrpc/svcauth_gss.h b/include/linux/sunrpc/svcauth_gss.h
3562     index 726aff1a5201..213fa12f56fc 100644
3563     --- a/include/linux/sunrpc/svcauth_gss.h
3564     +++ b/include/linux/sunrpc/svcauth_gss.h
3565     @@ -20,7 +20,8 @@ int gss_svc_init(void);
3566     void gss_svc_shutdown(void);
3567     int gss_svc_init_net(struct net *net);
3568     void gss_svc_shutdown_net(struct net *net);
3569     -int svcauth_gss_register_pseudoflavor(u32 pseudoflavor, char * name);
3570     +struct auth_domain *svcauth_gss_register_pseudoflavor(u32 pseudoflavor,
3571     + char *name);
3572     u32 svcauth_gss_flavor(struct auth_domain *dom);
3573    
3574     #endif /* __KERNEL__ */
3575     diff --git a/include/uapi/linux/dvb/frontend.h b/include/uapi/linux/dvb/frontend.h
3576     index 00a20cd21ee2..afc3972b0879 100644
3577     --- a/include/uapi/linux/dvb/frontend.h
3578     +++ b/include/uapi/linux/dvb/frontend.h
3579     @@ -127,6 +127,7 @@ enum fe_sec_mini_cmd {
3580     * to reset DiSEqC, tone and parameters
3581     */
3582     enum fe_status {
3583     + FE_NONE = 0x00,
3584     FE_HAS_SIGNAL = 0x01,
3585     FE_HAS_CARRIER = 0x02,
3586     FE_HAS_VITERBI = 0x04,
3587     diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h
3588     index a0a365cbf3c9..0c02441d2cc9 100644
3589     --- a/include/uapi/linux/kvm.h
3590     +++ b/include/uapi/linux/kvm.h
3591     @@ -159,9 +159,11 @@ struct kvm_hyperv_exit {
3592     #define KVM_EXIT_HYPERV_SYNIC 1
3593     #define KVM_EXIT_HYPERV_HCALL 2
3594     __u32 type;
3595     + __u32 pad1;
3596     union {
3597     struct {
3598     __u32 msr;
3599     + __u32 pad2;
3600     __u64 control;
3601     __u64 evt_page;
3602     __u64 msg_page;
3603     diff --git a/kernel/cpu_pm.c b/kernel/cpu_pm.c
3604     index 009cc9a17d95..f1042d639eee 100644
3605     --- a/kernel/cpu_pm.c
3606     +++ b/kernel/cpu_pm.c
3607     @@ -97,7 +97,7 @@ EXPORT_SYMBOL_GPL(cpu_pm_unregister_notifier);
3608     */
3609     int cpu_pm_enter(void)
3610     {
3611     - int nr_calls;
3612     + int nr_calls = 0;
3613     int ret = 0;
3614    
3615     read_lock(&cpu_pm_notifier_lock);
3616     @@ -156,7 +156,7 @@ EXPORT_SYMBOL_GPL(cpu_pm_exit);
3617     */
3618     int cpu_cluster_pm_enter(void)
3619     {
3620     - int nr_calls;
3621     + int nr_calls = 0;
3622     int ret = 0;
3623    
3624     read_lock(&cpu_pm_notifier_lock);
3625     diff --git a/kernel/debug/debug_core.c b/kernel/debug/debug_core.c
3626     index 79517e5549f1..9c939c6bf21c 100644
3627     --- a/kernel/debug/debug_core.c
3628     +++ b/kernel/debug/debug_core.c
3629     @@ -443,6 +443,7 @@ static int kgdb_reenter_check(struct kgdb_state *ks)
3630    
3631     if (exception_level > 1) {
3632     dump_stack();
3633     + kgdb_io_module_registered = false;
3634     panic("Recursive entry to debugger");
3635     }
3636    
3637     diff --git a/kernel/events/core.c b/kernel/events/core.c
3638     index 1f27b73bd7d4..b562467d2d49 100644
3639     --- a/kernel/events/core.c
3640     +++ b/kernel/events/core.c
3641     @@ -90,11 +90,11 @@ static void remote_function(void *data)
3642     * @info: the function call argument
3643     *
3644     * Calls the function @func when the task is currently running. This might
3645     - * be on the current CPU, which just calls the function directly
3646     + * be on the current CPU, which just calls the function directly. This will
3647     + * retry due to any failures in smp_call_function_single(), such as if the
3648     + * task_cpu() goes offline concurrently.
3649     *
3650     - * returns: @func return value, or
3651     - * -ESRCH - when the process isn't running
3652     - * -EAGAIN - when the process moved away
3653     + * returns @func return value or -ESRCH when the process isn't running
3654     */
3655     static int
3656     task_function_call(struct task_struct *p, remote_function_f func, void *info)
3657     @@ -107,11 +107,16 @@ task_function_call(struct task_struct *p, remote_function_f func, void *info)
3658     };
3659     int ret;
3660    
3661     - do {
3662     - ret = smp_call_function_single(task_cpu(p), remote_function, &data, 1);
3663     - if (!ret)
3664     - ret = data.ret;
3665     - } while (ret == -EAGAIN);
3666     + for (;;) {
3667     + ret = smp_call_function_single(task_cpu(p), remote_function,
3668     + &data, 1);
3669     + ret = !ret ? data.ret : -EAGAIN;
3670     +
3671     + if (ret != -EAGAIN)
3672     + break;
3673     +
3674     + cond_resched();
3675     + }
3676    
3677     return ret;
3678     }
3679     diff --git a/kernel/exit.c b/kernel/exit.c
3680     index d9394fcd0e2c..27f4168eaeb1 100644
3681     --- a/kernel/exit.c
3682     +++ b/kernel/exit.c
3683     @@ -739,8 +739,12 @@ void __noreturn do_exit(long code)
3684     int group_dead;
3685     TASKS_RCU(int tasks_rcu_i);
3686    
3687     - profile_task_exit(tsk);
3688     - kcov_task_exit(tsk);
3689     + /*
3690     + * We can get here from a kernel oops, sometimes with preemption off.
3691     + * Start by checking for critical errors.
3692     + * Then fix up important state like USER_DS and preemption.
3693     + * Then do everything else.
3694     + */
3695    
3696     WARN_ON(blk_needs_flush_plug(tsk));
3697    
3698     @@ -758,6 +762,16 @@ void __noreturn do_exit(long code)
3699     */
3700     set_fs(USER_DS);
3701    
3702     + if (unlikely(in_atomic())) {
3703     + pr_info("note: %s[%d] exited with preempt_count %d\n",
3704     + current->comm, task_pid_nr(current),
3705     + preempt_count());
3706     + preempt_count_set(PREEMPT_ENABLED);
3707     + }
3708     +
3709     + profile_task_exit(tsk);
3710     + kcov_task_exit(tsk);
3711     +
3712     ptrace_event(PTRACE_EVENT_EXIT, code);
3713    
3714     validate_creds_for_do_exit(tsk);
3715     @@ -794,13 +808,6 @@ void __noreturn do_exit(long code)
3716     */
3717     raw_spin_unlock_wait(&tsk->pi_lock);
3718    
3719     - if (unlikely(in_atomic())) {
3720     - pr_info("note: %s[%d] exited with preempt_count %d\n",
3721     - current->comm, task_pid_nr(current),
3722     - preempt_count());
3723     - preempt_count_set(PREEMPT_ENABLED);
3724     - }
3725     -
3726     /* sync mm's RSS info before statistics gathering */
3727     if (tsk->mm)
3728     sync_mm_rss(tsk->mm);
3729     diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
3730     index 5e65c7eea872..8233032a2f01 100644
3731     --- a/kernel/sched/fair.c
3732     +++ b/kernel/sched/fair.c
3733     @@ -2542,7 +2542,7 @@ void task_tick_numa(struct rq *rq, struct task_struct *curr)
3734     /*
3735     * We don't care about NUMA placement if we don't have memory.
3736     */
3737     - if (!curr->mm || (curr->flags & PF_EXITING) || work->next != work)
3738     + if ((curr->flags & (PF_EXITING | PF_KTHREAD)) || work->next != work)
3739     return;
3740    
3741     /*
3742     diff --git a/lib/mpi/longlong.h b/lib/mpi/longlong.h
3743     index 8f383cca6bb1..623440d3d365 100644
3744     --- a/lib/mpi/longlong.h
3745     +++ b/lib/mpi/longlong.h
3746     @@ -671,7 +671,7 @@ do { \
3747     ************** MIPS/64 **************
3748     ***************************************/
3749     #if (defined(__mips) && __mips >= 3) && W_TYPE_SIZE == 64
3750     -#if defined(__mips_isa_rev) && __mips_isa_rev >= 6
3751     +#if defined(__mips_isa_rev) && __mips_isa_rev >= 6 && defined(CONFIG_CC_IS_GCC)
3752     /*
3753     * GCC ends up emitting a __multi3 intrinsic call for MIPS64r6 with the plain C
3754     * code below, so we special case MIPS64r6 until the compiler can do better.
3755     diff --git a/mm/huge_memory.c b/mm/huge_memory.c
3756     index 5fbd77d52602..cf4c0a61b370 100644
3757     --- a/mm/huge_memory.c
3758     +++ b/mm/huge_memory.c
3759     @@ -1755,6 +1755,8 @@ void __split_huge_pmd(struct vm_area_struct *vma, pmd_t *pmd,
3760     spinlock_t *ptl;
3761     struct mm_struct *mm = vma->vm_mm;
3762     unsigned long haddr = address & HPAGE_PMD_MASK;
3763     + bool was_locked = false;
3764     + pmd_t _pmd;
3765    
3766     mmu_notifier_invalidate_range_start(mm, haddr, haddr + HPAGE_PMD_SIZE);
3767     ptl = pmd_lock(mm, pmd);
3768     @@ -1764,11 +1766,32 @@ void __split_huge_pmd(struct vm_area_struct *vma, pmd_t *pmd,
3769     * pmd against. Otherwise we can end up replacing wrong page.
3770     */
3771     VM_BUG_ON(freeze && !page);
3772     - if (page && page != pmd_page(*pmd))
3773     - goto out;
3774     + if (page) {
3775     + VM_WARN_ON_ONCE(!PageLocked(page));
3776     + was_locked = true;
3777     + if (page != pmd_page(*pmd))
3778     + goto out;
3779     + }
3780    
3781     +repeat:
3782     if (pmd_trans_huge(*pmd)) {
3783     - page = pmd_page(*pmd);
3784     + if (!page) {
3785     + page = pmd_page(*pmd);
3786     + if (unlikely(!trylock_page(page))) {
3787     + get_page(page);
3788     + _pmd = *pmd;
3789     + spin_unlock(ptl);
3790     + lock_page(page);
3791     + spin_lock(ptl);
3792     + if (unlikely(!pmd_same(*pmd, _pmd))) {
3793     + unlock_page(page);
3794     + put_page(page);
3795     + page = NULL;
3796     + goto repeat;
3797     + }
3798     + put_page(page);
3799     + }
3800     + }
3801     if (PageMlocked(page))
3802     clear_page_mlock(page);
3803     } else if (!pmd_devmap(*pmd))
3804     @@ -1776,6 +1799,8 @@ void __split_huge_pmd(struct vm_area_struct *vma, pmd_t *pmd,
3805     __split_huge_pmd_locked(vma, pmd, haddr, freeze);
3806     out:
3807     spin_unlock(ptl);
3808     + if (!was_locked && page)
3809     + unlock_page(page);
3810     mmu_notifier_invalidate_range_end(mm, haddr, haddr + HPAGE_PMD_SIZE);
3811     }
3812    
3813     diff --git a/mm/slub.c b/mm/slub.c
3814     index 9b44423f1cf0..3d45713187a4 100644
3815     --- a/mm/slub.c
3816     +++ b/mm/slub.c
3817     @@ -5620,8 +5620,10 @@ static int sysfs_slab_add(struct kmem_cache *s)
3818    
3819     s->kobj.kset = cache_kset(s);
3820     err = kobject_init_and_add(&s->kobj, &slab_ktype, NULL, "%s", name);
3821     - if (err)
3822     + if (err) {
3823     + kobject_put(&s->kobj);
3824     goto out;
3825     + }
3826    
3827     err = sysfs_create_group(&s->kobj, &slab_attr_group);
3828     if (err)
3829     diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
3830     index 6f78489fdb13..a8aa3f29f2d6 100644
3831     --- a/net/bluetooth/hci_event.c
3832     +++ b/net/bluetooth/hci_event.c
3833     @@ -3775,6 +3775,7 @@ static void hci_sync_conn_complete_evt(struct hci_dev *hdev,
3834     case 0x11: /* Unsupported Feature or Parameter Value */
3835     case 0x1c: /* SCO interval rejected */
3836     case 0x1a: /* Unsupported Remote Feature */
3837     + case 0x1e: /* Invalid LMP Parameters */
3838     case 0x1f: /* Unspecified error */
3839     case 0x20: /* Unsupported LMP Parameter value */
3840     if (conn->out) {
3841     diff --git a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c
3842     index 455fa4a30353..2c770bba212c 100644
3843     --- a/net/ipv6/ipv6_sockglue.c
3844     +++ b/net/ipv6/ipv6_sockglue.c
3845     @@ -184,14 +184,15 @@ static int do_ipv6_setsockopt(struct sock *sk, int level, int optname,
3846     retv = -EBUSY;
3847     break;
3848     }
3849     - }
3850     - if (sk->sk_protocol == IPPROTO_TCP &&
3851     - sk->sk_prot != &tcpv6_prot) {
3852     - retv = -EBUSY;
3853     + } else if (sk->sk_protocol == IPPROTO_TCP) {
3854     + if (sk->sk_prot != &tcpv6_prot) {
3855     + retv = -EBUSY;
3856     + break;
3857     + }
3858     + } else {
3859     break;
3860     }
3861     - if (sk->sk_protocol != IPPROTO_TCP)
3862     - break;
3863     +
3864     if (sk->sk_state != TCP_ESTABLISHED) {
3865     retv = -ENOTCONN;
3866     break;
3867     diff --git a/net/netfilter/nft_nat.c b/net/netfilter/nft_nat.c
3868     index 4c48e9bb21e2..d2510e432c18 100644
3869     --- a/net/netfilter/nft_nat.c
3870     +++ b/net/netfilter/nft_nat.c
3871     @@ -135,7 +135,7 @@ static int nft_nat_init(const struct nft_ctx *ctx, const struct nft_expr *expr,
3872     priv->type = NF_NAT_MANIP_DST;
3873     break;
3874     default:
3875     - return -EINVAL;
3876     + return -EOPNOTSUPP;
3877     }
3878    
3879     err = nft_nat_validate(ctx, expr, NULL);
3880     @@ -206,7 +206,7 @@ static int nft_nat_init(const struct nft_ctx *ctx, const struct nft_expr *expr,
3881     if (tb[NFTA_NAT_FLAGS]) {
3882     priv->flags = ntohl(nla_get_be32(tb[NFTA_NAT_FLAGS]));
3883     if (priv->flags & ~NF_NAT_RANGE_MASK)
3884     - return -EINVAL;
3885     + return -EOPNOTSUPP;
3886     }
3887    
3888     return 0;
3889     diff --git a/net/sunrpc/auth_gss/gss_mech_switch.c b/net/sunrpc/auth_gss/gss_mech_switch.c
3890     index 5fec3abbe19b..c7d88f979c56 100644
3891     --- a/net/sunrpc/auth_gss/gss_mech_switch.c
3892     +++ b/net/sunrpc/auth_gss/gss_mech_switch.c
3893     @@ -61,6 +61,8 @@ gss_mech_free(struct gss_api_mech *gm)
3894    
3895     for (i = 0; i < gm->gm_pf_num; i++) {
3896     pf = &gm->gm_pfs[i];
3897     + if (pf->domain)
3898     + auth_domain_put(pf->domain);
3899     kfree(pf->auth_domain_name);
3900     pf->auth_domain_name = NULL;
3901     }
3902     @@ -83,6 +85,7 @@ make_auth_domain_name(char *name)
3903     static int
3904     gss_mech_svc_setup(struct gss_api_mech *gm)
3905     {
3906     + struct auth_domain *dom;
3907     struct pf_desc *pf;
3908     int i, status;
3909    
3910     @@ -92,10 +95,13 @@ gss_mech_svc_setup(struct gss_api_mech *gm)
3911     status = -ENOMEM;
3912     if (pf->auth_domain_name == NULL)
3913     goto out;
3914     - status = svcauth_gss_register_pseudoflavor(pf->pseudoflavor,
3915     - pf->auth_domain_name);
3916     - if (status)
3917     + dom = svcauth_gss_register_pseudoflavor(
3918     + pf->pseudoflavor, pf->auth_domain_name);
3919     + if (IS_ERR(dom)) {
3920     + status = PTR_ERR(dom);
3921     goto out;
3922     + }
3923     + pf->domain = dom;
3924     }
3925     return 0;
3926     out:
3927     diff --git a/net/sunrpc/auth_gss/svcauth_gss.c b/net/sunrpc/auth_gss/svcauth_gss.c
3928     index d7775ca2fbb9..fd897d900d12 100644
3929     --- a/net/sunrpc/auth_gss/svcauth_gss.c
3930     +++ b/net/sunrpc/auth_gss/svcauth_gss.c
3931     @@ -779,7 +779,7 @@ u32 svcauth_gss_flavor(struct auth_domain *dom)
3932    
3933     EXPORT_SYMBOL_GPL(svcauth_gss_flavor);
3934    
3935     -int
3936     +struct auth_domain *
3937     svcauth_gss_register_pseudoflavor(u32 pseudoflavor, char * name)
3938     {
3939     struct gss_domain *new;
3940     @@ -796,21 +796,23 @@ svcauth_gss_register_pseudoflavor(u32 pseudoflavor, char * name)
3941     new->h.flavour = &svcauthops_gss;
3942     new->pseudoflavor = pseudoflavor;
3943    
3944     - stat = 0;
3945     test = auth_domain_lookup(name, &new->h);
3946     - if (test != &new->h) { /* Duplicate registration */
3947     + if (test != &new->h) {
3948     + pr_warn("svc: duplicate registration of gss pseudo flavour %s.\n",
3949     + name);
3950     + stat = -EADDRINUSE;
3951     auth_domain_put(test);
3952     - kfree(new->h.name);
3953     - goto out_free_dom;
3954     + goto out_free_name;
3955     }
3956     - return 0;
3957     + return test;
3958    
3959     +out_free_name:
3960     + kfree(new->h.name);
3961     out_free_dom:
3962     kfree(new);
3963     out:
3964     - return stat;
3965     + return ERR_PTR(stat);
3966     }
3967     -
3968     EXPORT_SYMBOL_GPL(svcauth_gss_register_pseudoflavor);
3969    
3970     static inline int
3971     diff --git a/security/integrity/evm/evm_crypto.c b/security/integrity/evm/evm_crypto.c
3972     index e034dc21421e..b0440cf34970 100644
3973     --- a/security/integrity/evm/evm_crypto.c
3974     +++ b/security/integrity/evm/evm_crypto.c
3975     @@ -240,7 +240,7 @@ static int evm_calc_hmac_or_hash(struct dentry *dentry,
3976    
3977     /* Portable EVM signatures must include an IMA hash */
3978     if (type == EVM_XATTR_PORTABLE_DIGSIG && !ima_present)
3979     - return -EPERM;
3980     + error = -EPERM;
3981     out:
3982     kfree(xattr_value);
3983     kfree(desc);
3984     diff --git a/security/integrity/ima/ima.h b/security/integrity/ima/ima.h
3985     index df7834aa1b8f..5f2a0a07ceac 100644
3986     --- a/security/integrity/ima/ima.h
3987     +++ b/security/integrity/ima/ima.h
3988     @@ -36,7 +36,7 @@ enum tpm_pcrs { TPM_PCR0 = 0, TPM_PCR8 = 8 };
3989     #define IMA_DIGEST_SIZE SHA1_DIGEST_SIZE
3990     #define IMA_EVENT_NAME_LEN_MAX 255
3991    
3992     -#define IMA_HASH_BITS 9
3993     +#define IMA_HASH_BITS 10
3994     #define IMA_MEASURE_HTABLE_SIZE (1 << IMA_HASH_BITS)
3995    
3996     #define IMA_TEMPLATE_FIELD_ID_MAX_LEN 16
3997     @@ -136,9 +136,10 @@ struct ima_h_table {
3998     };
3999     extern struct ima_h_table ima_htable;
4000    
4001     -static inline unsigned long ima_hash_key(u8 *digest)
4002     +static inline unsigned int ima_hash_key(u8 *digest)
4003     {
4004     - return hash_long(*digest, IMA_HASH_BITS);
4005     + /* there is no point in taking a hash of part of a digest */
4006     + return (digest[0] | digest[1] << 8) % IMA_MEASURE_HTABLE_SIZE;
4007     }
4008    
4009     enum ima_hooks {
4010     diff --git a/security/integrity/ima/ima_policy.c b/security/integrity/ima/ima_policy.c
4011     index aed47b777a57..4926a5a1bc94 100644
4012     --- a/security/integrity/ima/ima_policy.c
4013     +++ b/security/integrity/ima/ima_policy.c
4014     @@ -150,7 +150,7 @@ static struct ima_rule_entry default_appraise_rules[] = {
4015     static LIST_HEAD(ima_default_rules);
4016     static LIST_HEAD(ima_policy_rules);
4017     static LIST_HEAD(ima_temp_rules);
4018     -static struct list_head *ima_rules;
4019     +static struct list_head *ima_rules = &ima_default_rules;
4020    
4021     static int ima_policy __initdata;
4022    
4023     @@ -429,7 +429,6 @@ void __init ima_init_policy(void)
4024     temp_ima_appraise |= IMA_APPRAISE_POLICY;
4025     }
4026    
4027     - ima_rules = &ima_default_rules;
4028     ima_update_policy_flag();
4029     }
4030    
4031     diff --git a/security/smack/smackfs.c b/security/smack/smackfs.c
4032     index 6492fe96cae4..3397b216bc6c 100644
4033     --- a/security/smack/smackfs.c
4034     +++ b/security/smack/smackfs.c
4035     @@ -901,11 +901,21 @@ static ssize_t smk_set_cipso(struct file *file, const char __user *buf,
4036     else
4037     rule += strlen(skp->smk_known) + 1;
4038    
4039     + if (rule > data + count) {
4040     + rc = -EOVERFLOW;
4041     + goto out;
4042     + }
4043     +
4044     ret = sscanf(rule, "%d", &maplevel);
4045     if (ret != 1 || maplevel > SMACK_CIPSO_MAXLEVEL)
4046     goto out;
4047    
4048     rule += SMK_DIGITLEN;
4049     + if (rule > data + count) {
4050     + rc = -EOVERFLOW;
4051     + goto out;
4052     + }
4053     +
4054     ret = sscanf(rule, "%d", &catlen);
4055     if (ret != 1 || catlen > SMACK_CIPSO_MAXCATNUM)
4056     goto out;
4057     diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c
4058     index 23e17a58651b..5c07c5be3142 100644
4059     --- a/sound/core/pcm_native.c
4060     +++ b/sound/core/pcm_native.c
4061     @@ -1836,6 +1836,11 @@ static int snd_pcm_link(struct snd_pcm_substream *substream, int fd)
4062     }
4063     pcm_file = f.file->private_data;
4064     substream1 = pcm_file->substream;
4065     + if (substream == substream1) {
4066     + res = -EINVAL;
4067     + goto _badf;
4068     + }
4069     +
4070     group = kmalloc(sizeof(*group), GFP_KERNEL);
4071     if (!group) {
4072     res = -ENOMEM;
4073     diff --git a/sound/isa/es1688/es1688.c b/sound/isa/es1688/es1688.c
4074     index 1901c2bb6c3b..a36e2121ef09 100644
4075     --- a/sound/isa/es1688/es1688.c
4076     +++ b/sound/isa/es1688/es1688.c
4077     @@ -284,8 +284,10 @@ static int snd_es968_pnp_detect(struct pnp_card_link *pcard,
4078     return error;
4079     }
4080     error = snd_es1688_probe(card, dev);
4081     - if (error < 0)
4082     + if (error < 0) {
4083     + snd_card_free(card);
4084     return error;
4085     + }
4086     pnp_set_card_drvdata(pcard, card);
4087     snd_es968_pnp_is_probed = 1;
4088     return 0;
4089     diff --git a/sound/usb/card.c b/sound/usb/card.c
4090     index 549b9b061694..023a36a4922b 100644
4091     --- a/sound/usb/card.c
4092     +++ b/sound/usb/card.c
4093     @@ -768,9 +768,6 @@ static int usb_audio_suspend(struct usb_interface *intf, pm_message_t message)
4094     if (chip == (void *)-1L)
4095     return 0;
4096    
4097     - chip->autosuspended = !!PMSG_IS_AUTO(message);
4098     - if (!chip->autosuspended)
4099     - snd_power_change_state(chip->card, SNDRV_CTL_POWER_D3hot);
4100     if (!chip->num_suspended_intf++) {
4101     list_for_each_entry(as, &chip->pcm_list, list) {
4102     snd_pcm_suspend_all(as->pcm);
4103     @@ -783,6 +780,11 @@ static int usb_audio_suspend(struct usb_interface *intf, pm_message_t message)
4104     snd_usb_mixer_suspend(mixer);
4105     }
4106    
4107     + if (!PMSG_IS_AUTO(message) && !chip->system_suspend) {
4108     + snd_power_change_state(chip->card, SNDRV_CTL_POWER_D3hot);
4109     + chip->system_suspend = chip->num_suspended_intf;
4110     + }
4111     +
4112     return 0;
4113     }
4114    
4115     @@ -795,10 +797,11 @@ static int __usb_audio_resume(struct usb_interface *intf, bool reset_resume)
4116    
4117     if (chip == (void *)-1L)
4118     return 0;
4119     - if (--chip->num_suspended_intf)
4120     - return 0;
4121    
4122     atomic_inc(&chip->active); /* avoid autopm */
4123     + if (chip->num_suspended_intf > 1)
4124     + goto out;
4125     +
4126     /*
4127     * ALSA leaves material resumption to user space
4128     * we just notify and restart the mixers
4129     @@ -813,9 +816,12 @@ static int __usb_audio_resume(struct usb_interface *intf, bool reset_resume)
4130     snd_usbmidi_resume(p);
4131     }
4132    
4133     - if (!chip->autosuspended)
4134     + out:
4135     + if (chip->num_suspended_intf == chip->system_suspend) {
4136     snd_power_change_state(chip->card, SNDRV_CTL_POWER_D0);
4137     - chip->autosuspended = 0;
4138     + chip->system_suspend = 0;
4139     + }
4140     + chip->num_suspended_intf--;
4141    
4142     err_out:
4143     atomic_dec(&chip->active); /* allow autopm after this point */
4144     diff --git a/sound/usb/usbaudio.h b/sound/usb/usbaudio.h
4145     index 4d5c89a7ba2b..f4ee83c8e0b2 100644
4146     --- a/sound/usb/usbaudio.h
4147     +++ b/sound/usb/usbaudio.h
4148     @@ -37,7 +37,7 @@ struct snd_usb_audio {
4149     struct usb_interface *pm_intf;
4150     u32 usb_id;
4151     struct mutex mutex;
4152     - unsigned int autosuspended:1;
4153     + unsigned int system_suspend;
4154     atomic_t active;
4155     atomic_t shutdown;
4156     atomic_t usage_count;
4157     diff --git a/tools/objtool/check.c b/tools/objtool/check.c
4158     index b0b8ba9b800c..c7399d7f4bc7 100644
4159     --- a/tools/objtool/check.c
4160     +++ b/tools/objtool/check.c
4161     @@ -778,6 +778,12 @@ static int add_special_section_alts(struct objtool_file *file)
4162     }
4163    
4164     if (special_alt->group) {
4165     + if (!special_alt->orig_len) {
4166     + WARN_FUNC("empty alternative entry",
4167     + orig_insn->sec, orig_insn->offset);
4168     + continue;
4169     + }
4170     +
4171     ret = handle_group_alt(file, special_alt, orig_insn,
4172     &new_insn);
4173     if (ret)
4174     diff --git a/tools/perf/builtin-probe.c b/tools/perf/builtin-probe.c
4175     index 2b420e7a92c0..929f0d0ea9da 100644
4176     --- a/tools/perf/builtin-probe.c
4177     +++ b/tools/perf/builtin-probe.c
4178     @@ -344,6 +344,9 @@ static int perf_add_probe_events(struct perf_probe_event *pevs, int npevs)
4179    
4180     for (k = 0; k < pev->ntevs; k++) {
4181     struct probe_trace_event *tev = &pev->tevs[k];
4182     + /* Skipped events have no event name */
4183     + if (!tev->event)
4184     + continue;
4185    
4186     /* We use tev's name for showing new events */
4187     show_perf_probe_event(tev->group, tev->event, pev,
4188     diff --git a/tools/perf/util/dso.c b/tools/perf/util/dso.c
4189     index 8bec05365aae..9be7c95bd1e1 100644
4190     --- a/tools/perf/util/dso.c
4191     +++ b/tools/perf/util/dso.c
4192     @@ -19,6 +19,7 @@ char dso__symtab_origin(const struct dso *dso)
4193     [DSO_BINARY_TYPE__BUILD_ID_CACHE] = 'B',
4194     [DSO_BINARY_TYPE__FEDORA_DEBUGINFO] = 'f',
4195     [DSO_BINARY_TYPE__UBUNTU_DEBUGINFO] = 'u',
4196     + [DSO_BINARY_TYPE__MIXEDUP_UBUNTU_DEBUGINFO] = 'x',
4197     [DSO_BINARY_TYPE__OPENEMBEDDED_DEBUGINFO] = 'o',
4198     [DSO_BINARY_TYPE__BUILDID_DEBUGINFO] = 'b',
4199     [DSO_BINARY_TYPE__SYSTEM_PATH_DSO] = 'd',
4200     @@ -77,6 +78,21 @@ int dso__read_binary_type_filename(const struct dso *dso,
4201     snprintf(filename + len, size - len, "%s", dso->long_name);
4202     break;
4203    
4204     + case DSO_BINARY_TYPE__MIXEDUP_UBUNTU_DEBUGINFO:
4205     + /*
4206     + * Ubuntu can mixup /usr/lib with /lib, putting debuginfo in
4207     + * /usr/lib/debug/lib when it is expected to be in
4208     + * /usr/lib/debug/usr/lib
4209     + */
4210     + if (strlen(dso->long_name) < 9 ||
4211     + strncmp(dso->long_name, "/usr/lib/", 9)) {
4212     + ret = -1;
4213     + break;
4214     + }
4215     + len = __symbol__join_symfs(filename, size, "/usr/lib/debug");
4216     + snprintf(filename + len, size - len, "%s", dso->long_name + 4);
4217     + break;
4218     +
4219     case DSO_BINARY_TYPE__OPENEMBEDDED_DEBUGINFO:
4220     {
4221     const char *last_slash;
4222     diff --git a/tools/perf/util/dso.h b/tools/perf/util/dso.h
4223     index ecc4bbd3f82e..b886720ffea0 100644
4224     --- a/tools/perf/util/dso.h
4225     +++ b/tools/perf/util/dso.h
4226     @@ -22,6 +22,7 @@ enum dso_binary_type {
4227     DSO_BINARY_TYPE__BUILD_ID_CACHE,
4228     DSO_BINARY_TYPE__FEDORA_DEBUGINFO,
4229     DSO_BINARY_TYPE__UBUNTU_DEBUGINFO,
4230     + DSO_BINARY_TYPE__MIXEDUP_UBUNTU_DEBUGINFO,
4231     DSO_BINARY_TYPE__BUILDID_DEBUGINFO,
4232     DSO_BINARY_TYPE__SYSTEM_PATH_DSO,
4233     DSO_BINARY_TYPE__GUEST_KMODULE,
4234     diff --git a/tools/perf/util/probe-finder.c b/tools/perf/util/probe-finder.c
4235     index 82e4f158c88e..7d0d44b4f3d5 100644
4236     --- a/tools/perf/util/probe-finder.c
4237     +++ b/tools/perf/util/probe-finder.c
4238     @@ -111,6 +111,7 @@ enum dso_binary_type distro_dwarf_types[] = {
4239     DSO_BINARY_TYPE__UBUNTU_DEBUGINFO,
4240     DSO_BINARY_TYPE__OPENEMBEDDED_DEBUGINFO,
4241     DSO_BINARY_TYPE__BUILDID_DEBUGINFO,
4242     + DSO_BINARY_TYPE__MIXEDUP_UBUNTU_DEBUGINFO,
4243     DSO_BINARY_TYPE__NOT_FOUND,
4244     };
4245    
4246     diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c
4247     index acde8e489352..4e27b868f774 100644
4248     --- a/tools/perf/util/symbol.c
4249     +++ b/tools/perf/util/symbol.c
4250     @@ -58,6 +58,7 @@ static enum dso_binary_type binary_type_symtab[] = {
4251     DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE,
4252     DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE_COMP,
4253     DSO_BINARY_TYPE__OPENEMBEDDED_DEBUGINFO,
4254     + DSO_BINARY_TYPE__MIXEDUP_UBUNTU_DEBUGINFO,
4255     DSO_BINARY_TYPE__NOT_FOUND,
4256     };
4257    
4258     @@ -1361,6 +1362,7 @@ static bool dso__is_compatible_symtab_type(struct dso *dso, bool kmod,
4259     case DSO_BINARY_TYPE__SYSTEM_PATH_DSO:
4260     case DSO_BINARY_TYPE__FEDORA_DEBUGINFO:
4261     case DSO_BINARY_TYPE__UBUNTU_DEBUGINFO:
4262     + case DSO_BINARY_TYPE__MIXEDUP_UBUNTU_DEBUGINFO:
4263     case DSO_BINARY_TYPE__BUILDID_DEBUGINFO:
4264     case DSO_BINARY_TYPE__OPENEMBEDDED_DEBUGINFO:
4265     return !kmod && dso->kernel == DSO_TYPE_USER;