Magellan Linux

Annotation of /trunk/kernel-alx/patches-4.14/0126-4.14.27-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3238 - (hide annotations) (download)
Fri Nov 9 12:14:58 2018 UTC (5 years, 7 months ago) by niro
File size: 203769 byte(s)
-added up to patches-4.14.79
1 niro 3238 diff --git a/Documentation/devicetree/bindings/power/mti,mips-cpc.txt b/Documentation/devicetree/bindings/power/mti,mips-cpc.txt
2     new file mode 100644
3     index 000000000000..c6b82511ae8a
4     --- /dev/null
5     +++ b/Documentation/devicetree/bindings/power/mti,mips-cpc.txt
6     @@ -0,0 +1,8 @@
7     +Binding for MIPS Cluster Power Controller (CPC).
8     +
9     +This binding allows a system to specify where the CPC registers are
10     +located.
11     +
12     +Required properties:
13     +compatible : Should be "mti,mips-cpc".
14     +regs: Should describe the address & size of the CPC register region.
15     diff --git a/Documentation/sphinx/kerneldoc.py b/Documentation/sphinx/kerneldoc.py
16     index 39aa9e8697cc..fbedcc39460b 100644
17     --- a/Documentation/sphinx/kerneldoc.py
18     +++ b/Documentation/sphinx/kerneldoc.py
19     @@ -36,8 +36,7 @@ import glob
20    
21     from docutils import nodes, statemachine
22     from docutils.statemachine import ViewList
23     -from docutils.parsers.rst import directives
24     -from sphinx.util.compat import Directive
25     +from docutils.parsers.rst import directives, Directive
26     from sphinx.ext.autodoc import AutodocReporter
27    
28     __version__ = '1.0'
29     diff --git a/MAINTAINERS b/MAINTAINERS
30     index 76ea063d8083..546beb6b0176 100644
31     --- a/MAINTAINERS
32     +++ b/MAINTAINERS
33     @@ -9001,6 +9001,7 @@ MIPS GENERIC PLATFORM
34     M: Paul Burton <paul.burton@mips.com>
35     L: linux-mips@linux-mips.org
36     S: Supported
37     +F: Documentation/devicetree/bindings/power/mti,mips-cpc.txt
38     F: arch/mips/generic/
39     F: arch/mips/tools/generic-board-config.sh
40    
41     diff --git a/Makefile b/Makefile
42     index 666182dda187..00e969db94b8 100644
43     --- a/Makefile
44     +++ b/Makefile
45     @@ -1,7 +1,7 @@
46     # SPDX-License-Identifier: GPL-2.0
47     VERSION = 4
48     PATCHLEVEL = 14
49     -SUBLEVEL = 26
50     +SUBLEVEL = 27
51     EXTRAVERSION =
52     NAME = Petit Gorille
53    
54     @@ -11,6 +11,10 @@ NAME = Petit Gorille
55     # Comments in this file are targeted only to the developer, do not
56     # expect to learn how to build the kernel reading this file.
57    
58     +# That's our default target when none is given on the command line
59     +PHONY := _all
60     +_all:
61     +
62     # o Do not use make's built-in rules and variables
63     # (this increases performance and avoids hard-to-debug behaviour);
64     # o Look for make include files relative to root of kernel src
65     @@ -117,10 +121,6 @@ ifeq ("$(origin O)", "command line")
66     KBUILD_OUTPUT := $(O)
67     endif
68    
69     -# That's our default target when none is given on the command line
70     -PHONY := _all
71     -_all:
72     -
73     # Cancel implicit rules on top Makefile
74     $(CURDIR)/Makefile Makefile: ;
75    
76     @@ -187,15 +187,6 @@ ifeq ("$(origin M)", "command line")
77     KBUILD_EXTMOD := $(M)
78     endif
79    
80     -# If building an external module we do not care about the all: rule
81     -# but instead _all depend on modules
82     -PHONY += all
83     -ifeq ($(KBUILD_EXTMOD),)
84     -_all: all
85     -else
86     -_all: modules
87     -endif
88     -
89     ifeq ($(KBUILD_SRC),)
90     # building in the source tree
91     srctree := .
92     @@ -207,6 +198,9 @@ else
93     srctree := $(KBUILD_SRC)
94     endif
95     endif
96     +
97     +export KBUILD_CHECKSRC KBUILD_EXTMOD KBUILD_SRC
98     +
99     objtree := .
100     src := $(srctree)
101     obj := $(objtree)
102     @@ -215,6 +209,74 @@ VPATH := $(srctree)$(if $(KBUILD_EXTMOD),:$(KBUILD_EXTMOD))
103    
104     export srctree objtree VPATH
105    
106     +# To make sure we do not include .config for any of the *config targets
107     +# catch them early, and hand them over to scripts/kconfig/Makefile
108     +# It is allowed to specify more targets when calling make, including
109     +# mixing *config targets and build targets.
110     +# For example 'make oldconfig all'.
111     +# Detect when mixed targets is specified, and make a second invocation
112     +# of make so .config is not included in this case either (for *config).
113     +
114     +version_h := include/generated/uapi/linux/version.h
115     +old_version_h := include/linux/version.h
116     +
117     +no-dot-config-targets := clean mrproper distclean \
118     + cscope gtags TAGS tags help% %docs check% coccicheck \
119     + $(version_h) headers_% archheaders archscripts \
120     + kernelversion %src-pkg
121     +
122     +config-targets := 0
123     +mixed-targets := 0
124     +dot-config := 1
125     +
126     +ifneq ($(filter $(no-dot-config-targets), $(MAKECMDGOALS)),)
127     + ifeq ($(filter-out $(no-dot-config-targets), $(MAKECMDGOALS)),)
128     + dot-config := 0
129     + endif
130     +endif
131     +
132     +ifeq ($(KBUILD_EXTMOD),)
133     + ifneq ($(filter config %config,$(MAKECMDGOALS)),)
134     + config-targets := 1
135     + ifneq ($(words $(MAKECMDGOALS)),1)
136     + mixed-targets := 1
137     + endif
138     + endif
139     +endif
140     +# install and modules_install need also be processed one by one
141     +ifneq ($(filter install,$(MAKECMDGOALS)),)
142     + ifneq ($(filter modules_install,$(MAKECMDGOALS)),)
143     + mixed-targets := 1
144     + endif
145     +endif
146     +
147     +ifeq ($(mixed-targets),1)
148     +# ===========================================================================
149     +# We're called with mixed targets (*config and build targets).
150     +# Handle them one by one.
151     +
152     +PHONY += $(MAKECMDGOALS) __build_one_by_one
153     +
154     +$(filter-out __build_one_by_one, $(MAKECMDGOALS)): __build_one_by_one
155     + @:
156     +
157     +__build_one_by_one:
158     + $(Q)set -e; \
159     + for i in $(MAKECMDGOALS); do \
160     + $(MAKE) -f $(srctree)/Makefile $$i; \
161     + done
162     +
163     +else
164     +
165     +# We need some generic definitions (do not try to remake the file).
166     +scripts/Kbuild.include: ;
167     +include scripts/Kbuild.include
168     +
169     +# Read KERNELRELEASE from include/config/kernel.release (if it exists)
170     +KERNELRELEASE = $(shell cat include/config/kernel.release 2> /dev/null)
171     +KERNELVERSION = $(VERSION)$(if $(PATCHLEVEL),.$(PATCHLEVEL)$(if $(SUBLEVEL),.$(SUBLEVEL)))$(EXTRAVERSION)
172     +export VERSION PATCHLEVEL SUBLEVEL KERNELRELEASE KERNELVERSION
173     +
174     # SUBARCH tells the usermode build what the underlying arch is. That is set
175     # first, and if a usermode build is happening, the "ARCH=um" on the command
176     # line overrides the setting of ARCH below. If a native build is happening,
177     @@ -312,40 +374,6 @@ HOSTCFLAGS += -Wno-unused-value -Wno-unused-parameter \
178     -Wno-missing-field-initializers -fno-delete-null-pointer-checks
179     endif
180    
181     -# Decide whether to build built-in, modular, or both.
182     -# Normally, just do built-in.
183     -
184     -KBUILD_MODULES :=
185     -KBUILD_BUILTIN := 1
186     -
187     -# If we have only "make modules", don't compile built-in objects.
188     -# When we're building modules with modversions, we need to consider
189     -# the built-in objects during the descend as well, in order to
190     -# make sure the checksums are up to date before we record them.
191     -
192     -ifeq ($(MAKECMDGOALS),modules)
193     - KBUILD_BUILTIN := $(if $(CONFIG_MODVERSIONS),1)
194     -endif
195     -
196     -# If we have "make <whatever> modules", compile modules
197     -# in addition to whatever we do anyway.
198     -# Just "make" or "make all" shall build modules as well
199     -
200     -ifneq ($(filter all _all modules,$(MAKECMDGOALS)),)
201     - KBUILD_MODULES := 1
202     -endif
203     -
204     -ifeq ($(MAKECMDGOALS),)
205     - KBUILD_MODULES := 1
206     -endif
207     -
208     -export KBUILD_MODULES KBUILD_BUILTIN
209     -export KBUILD_CHECKSRC KBUILD_SRC KBUILD_EXTMOD
210     -
211     -# We need some generic definitions (do not try to remake the file).
212     -scripts/Kbuild.include: ;
213     -include scripts/Kbuild.include
214     -
215     # Make variables (CC, etc...)
216     AS = $(CROSS_COMPILE)as
217     LD = $(CROSS_COMPILE)ld
218     @@ -405,11 +433,6 @@ KBUILD_CFLAGS_MODULE := -DMODULE
219     KBUILD_LDFLAGS_MODULE := -T $(srctree)/scripts/module-common.lds
220     GCC_PLUGINS_CFLAGS :=
221    
222     -# Read KERNELRELEASE from include/config/kernel.release (if it exists)
223     -KERNELRELEASE = $(shell cat include/config/kernel.release 2> /dev/null)
224     -KERNELVERSION = $(VERSION)$(if $(PATCHLEVEL),.$(PATCHLEVEL)$(if $(SUBLEVEL),.$(SUBLEVEL)))$(EXTRAVERSION)
225     -
226     -export VERSION PATCHLEVEL SUBLEVEL KERNELRELEASE KERNELVERSION
227     export ARCH SRCARCH CONFIG_SHELL HOSTCC HOSTCFLAGS CROSS_COMPILE AS LD CC
228     export CPP AR NM STRIP OBJCOPY OBJDUMP HOSTLDFLAGS HOST_LOADLIBES
229     export MAKE AWK GENKSYMS INSTALLKERNEL PERL PYTHON UTS_MACHINE
230     @@ -459,73 +482,23 @@ ifneq ($(KBUILD_SRC),)
231     $(srctree) $(objtree) $(VERSION) $(PATCHLEVEL)
232     endif
233    
234     -# Support for using generic headers in asm-generic
235     -PHONY += asm-generic uapi-asm-generic
236     -asm-generic: uapi-asm-generic
237     - $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.asm-generic \
238     - src=asm obj=arch/$(SRCARCH)/include/generated/asm
239     -uapi-asm-generic:
240     - $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.asm-generic \
241     - src=uapi/asm obj=arch/$(SRCARCH)/include/generated/uapi/asm
242     -
243     -# To make sure we do not include .config for any of the *config targets
244     -# catch them early, and hand them over to scripts/kconfig/Makefile
245     -# It is allowed to specify more targets when calling make, including
246     -# mixing *config targets and build targets.
247     -# For example 'make oldconfig all'.
248     -# Detect when mixed targets is specified, and make a second invocation
249     -# of make so .config is not included in this case either (for *config).
250     -
251     -version_h := include/generated/uapi/linux/version.h
252     -old_version_h := include/linux/version.h
253     -
254     -no-dot-config-targets := clean mrproper distclean \
255     - cscope gtags TAGS tags help% %docs check% coccicheck \
256     - $(version_h) headers_% archheaders archscripts \
257     - kernelversion %src-pkg
258     -
259     -config-targets := 0
260     -mixed-targets := 0
261     -dot-config := 1
262     -
263     -ifneq ($(filter $(no-dot-config-targets), $(MAKECMDGOALS)),)
264     - ifeq ($(filter-out $(no-dot-config-targets), $(MAKECMDGOALS)),)
265     - dot-config := 0
266     - endif
267     +ifeq ($(cc-name),clang)
268     +ifneq ($(CROSS_COMPILE),)
269     +CLANG_TARGET := --target=$(notdir $(CROSS_COMPILE:%-=%))
270     +GCC_TOOLCHAIN := $(realpath $(dir $(shell which $(LD)))/..)
271     endif
272     -
273     -ifeq ($(KBUILD_EXTMOD),)
274     - ifneq ($(filter config %config,$(MAKECMDGOALS)),)
275     - config-targets := 1
276     - ifneq ($(words $(MAKECMDGOALS)),1)
277     - mixed-targets := 1
278     - endif
279     - endif
280     +ifneq ($(GCC_TOOLCHAIN),)
281     +CLANG_GCC_TC := --gcc-toolchain=$(GCC_TOOLCHAIN)
282     endif
283     -# install and modules_install need also be processed one by one
284     -ifneq ($(filter install,$(MAKECMDGOALS)),)
285     - ifneq ($(filter modules_install,$(MAKECMDGOALS)),)
286     - mixed-targets := 1
287     - endif
288     +KBUILD_CFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC)
289     +KBUILD_AFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC)
290     endif
291    
292     -ifeq ($(mixed-targets),1)
293     -# ===========================================================================
294     -# We're called with mixed targets (*config and build targets).
295     -# Handle them one by one.
296     -
297     -PHONY += $(MAKECMDGOALS) __build_one_by_one
298     +RETPOLINE_CFLAGS_GCC := -mindirect-branch=thunk-extern -mindirect-branch-register
299     +RETPOLINE_CFLAGS_CLANG := -mretpoline-external-thunk
300     +RETPOLINE_CFLAGS := $(call cc-option,$(RETPOLINE_CFLAGS_GCC),$(call cc-option,$(RETPOLINE_CFLAGS_CLANG)))
301     +export RETPOLINE_CFLAGS
302    
303     -$(filter-out __build_one_by_one, $(MAKECMDGOALS)): __build_one_by_one
304     - @:
305     -
306     -__build_one_by_one:
307     - $(Q)set -e; \
308     - for i in $(MAKECMDGOALS); do \
309     - $(MAKE) -f $(srctree)/Makefile $$i; \
310     - done
311     -
312     -else
313     ifeq ($(config-targets),1)
314     # ===========================================================================
315     # *config targets only - make sure prerequisites are updated, and descend
316     @@ -548,6 +521,44 @@ else
317     # Build targets only - this includes vmlinux, arch specific targets, clean
318     # targets and others. In general all targets except *config targets.
319    
320     +# If building an external module we do not care about the all: rule
321     +# but instead _all depend on modules
322     +PHONY += all
323     +ifeq ($(KBUILD_EXTMOD),)
324     +_all: all
325     +else
326     +_all: modules
327     +endif
328     +
329     +# Decide whether to build built-in, modular, or both.
330     +# Normally, just do built-in.
331     +
332     +KBUILD_MODULES :=
333     +KBUILD_BUILTIN := 1
334     +
335     +# If we have only "make modules", don't compile built-in objects.
336     +# When we're building modules with modversions, we need to consider
337     +# the built-in objects during the descend as well, in order to
338     +# make sure the checksums are up to date before we record them.
339     +
340     +ifeq ($(MAKECMDGOALS),modules)
341     + KBUILD_BUILTIN := $(if $(CONFIG_MODVERSIONS),1)
342     +endif
343     +
344     +# If we have "make <whatever> modules", compile modules
345     +# in addition to whatever we do anyway.
346     +# Just "make" or "make all" shall build modules as well
347     +
348     +ifneq ($(filter all _all modules,$(MAKECMDGOALS)),)
349     + KBUILD_MODULES := 1
350     +endif
351     +
352     +ifeq ($(MAKECMDGOALS),)
353     + KBUILD_MODULES := 1
354     +endif
355     +
356     +export KBUILD_MODULES KBUILD_BUILTIN
357     +
358     ifeq ($(KBUILD_EXTMOD),)
359     # Additional helpers built in scripts/
360     # Carefully list dependencies so we do not try to build scripts twice
361     @@ -699,15 +710,6 @@ endif
362     KBUILD_CFLAGS += $(stackp-flag)
363    
364     ifeq ($(cc-name),clang)
365     -ifneq ($(CROSS_COMPILE),)
366     -CLANG_TARGET := --target=$(notdir $(CROSS_COMPILE:%-=%))
367     -GCC_TOOLCHAIN := $(realpath $(dir $(shell which $(LD)))/..)
368     -endif
369     -ifneq ($(GCC_TOOLCHAIN),)
370     -CLANG_GCC_TC := --gcc-toolchain=$(GCC_TOOLCHAIN)
371     -endif
372     -KBUILD_CFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC)
373     -KBUILD_AFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC)
374     KBUILD_CPPFLAGS += $(call cc-option,-Qunused-arguments,)
375     KBUILD_CFLAGS += $(call cc-disable-warning, unused-variable)
376     KBUILD_CFLAGS += $(call cc-disable-warning, format-invalid-specifier)
377     @@ -1076,6 +1078,15 @@ prepare0: archprepare gcc-plugins
378     # All the preparing..
379     prepare: prepare0 prepare-objtool
380    
381     +# Support for using generic headers in asm-generic
382     +PHONY += asm-generic uapi-asm-generic
383     +asm-generic: uapi-asm-generic
384     + $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.asm-generic \
385     + src=asm obj=arch/$(SRCARCH)/include/generated/asm
386     +uapi-asm-generic:
387     + $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.asm-generic \
388     + src=uapi/asm obj=arch/$(SRCARCH)/include/generated/uapi/asm
389     +
390     PHONY += prepare-objtool
391     prepare-objtool: $(objtool_target)
392    
393     diff --git a/arch/arm/mach-omap2/omap-secure.c b/arch/arm/mach-omap2/omap-secure.c
394     index 9ff92050053c..fa7f308c9027 100644
395     --- a/arch/arm/mach-omap2/omap-secure.c
396     +++ b/arch/arm/mach-omap2/omap-secure.c
397     @@ -73,6 +73,7 @@ phys_addr_t omap_secure_ram_mempool_base(void)
398     return omap_secure_memblock_base;
399     }
400    
401     +#if defined(CONFIG_ARCH_OMAP3) && defined(CONFIG_PM)
402     u32 omap3_save_secure_ram(void __iomem *addr, int size)
403     {
404     u32 ret;
405     @@ -91,6 +92,7 @@ u32 omap3_save_secure_ram(void __iomem *addr, int size)
406    
407     return ret;
408     }
409     +#endif
410    
411     /**
412     * rx51_secure_dispatcher: Routine to dispatch secure PPA API calls
413     diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c
414     index fa20124c19d5..01bc0688d47d 100644
415     --- a/arch/arm64/mm/mmu.c
416     +++ b/arch/arm64/mm/mmu.c
417     @@ -107,7 +107,7 @@ static bool pgattr_change_is_safe(u64 old, u64 new)
418     * The following mapping attributes may be updated in live
419     * kernel mappings without the need for break-before-make.
420     */
421     - static const pteval_t mask = PTE_PXN | PTE_RDONLY | PTE_WRITE;
422     + static const pteval_t mask = PTE_PXN | PTE_RDONLY | PTE_WRITE | PTE_NG;
423    
424     /* creating or taking down mappings is always safe */
425     if (old == 0 || new == 0)
426     @@ -117,9 +117,9 @@ static bool pgattr_change_is_safe(u64 old, u64 new)
427     if ((old | new) & PTE_CONT)
428     return false;
429    
430     - /* Transitioning from Global to Non-Global is safe */
431     - if (((old ^ new) == PTE_NG) && (new & PTE_NG))
432     - return true;
433     + /* Transitioning from Non-Global to Global is unsafe */
434     + if (old & ~new & PTE_NG)
435     + return false;
436    
437     return ((old ^ new) & ~mask) == 0;
438     }
439     diff --git a/arch/mips/ath25/board.c b/arch/mips/ath25/board.c
440     index 9ab48ff80c1c..6d11ae581ea7 100644
441     --- a/arch/mips/ath25/board.c
442     +++ b/arch/mips/ath25/board.c
443     @@ -135,6 +135,8 @@ int __init ath25_find_config(phys_addr_t base, unsigned long size)
444     }
445    
446     board_data = kzalloc(BOARD_CONFIG_BUFSZ, GFP_KERNEL);
447     + if (!board_data)
448     + goto error;
449     ath25_board.config = (struct ath25_boarddata *)board_data;
450     memcpy_fromio(board_data, bcfg, 0x100);
451     if (broken_boarddata) {
452     diff --git a/arch/mips/cavium-octeon/octeon-irq.c b/arch/mips/cavium-octeon/octeon-irq.c
453     index 5b3a3f6a9ad3..d99f5242169e 100644
454     --- a/arch/mips/cavium-octeon/octeon-irq.c
455     +++ b/arch/mips/cavium-octeon/octeon-irq.c
456     @@ -2277,6 +2277,8 @@ static int __init octeon_irq_init_cib(struct device_node *ciu_node,
457     }
458    
459     host_data = kzalloc(sizeof(*host_data), GFP_KERNEL);
460     + if (!host_data)
461     + return -ENOMEM;
462     raw_spin_lock_init(&host_data->lock);
463    
464     addr = of_get_address(ciu_node, 0, NULL, NULL);
465     diff --git a/arch/mips/kernel/mips-cpc.c b/arch/mips/kernel/mips-cpc.c
466     index 19c88d770054..fcf9af492d60 100644
467     --- a/arch/mips/kernel/mips-cpc.c
468     +++ b/arch/mips/kernel/mips-cpc.c
469     @@ -10,6 +10,8 @@
470    
471     #include <linux/errno.h>
472     #include <linux/percpu.h>
473     +#include <linux/of.h>
474     +#include <linux/of_address.h>
475     #include <linux/spinlock.h>
476    
477     #include <asm/mips-cps.h>
478     @@ -22,6 +24,17 @@ static DEFINE_PER_CPU_ALIGNED(unsigned long, cpc_core_lock_flags);
479    
480     phys_addr_t __weak mips_cpc_default_phys_base(void)
481     {
482     + struct device_node *cpc_node;
483     + struct resource res;
484     + int err;
485     +
486     + cpc_node = of_find_compatible_node(of_root, NULL, "mti,mips-cpc");
487     + if (cpc_node) {
488     + err = of_address_to_resource(cpc_node, 0, &res);
489     + if (!err)
490     + return res.start;
491     + }
492     +
493     return 0;
494     }
495    
496     diff --git a/arch/mips/kernel/smp-bmips.c b/arch/mips/kernel/smp-bmips.c
497     index 87dcac2447c8..382d12eb88f0 100644
498     --- a/arch/mips/kernel/smp-bmips.c
499     +++ b/arch/mips/kernel/smp-bmips.c
500     @@ -168,11 +168,11 @@ static void bmips_prepare_cpus(unsigned int max_cpus)
501     return;
502     }
503    
504     - if (request_irq(IPI0_IRQ, bmips_ipi_interrupt, IRQF_PERCPU,
505     - "smp_ipi0", NULL))
506     + if (request_irq(IPI0_IRQ, bmips_ipi_interrupt,
507     + IRQF_PERCPU | IRQF_NO_SUSPEND, "smp_ipi0", NULL))
508     panic("Can't request IPI0 interrupt");
509     - if (request_irq(IPI1_IRQ, bmips_ipi_interrupt, IRQF_PERCPU,
510     - "smp_ipi1", NULL))
511     + if (request_irq(IPI1_IRQ, bmips_ipi_interrupt,
512     + IRQF_PERCPU | IRQF_NO_SUSPEND, "smp_ipi1", NULL))
513     panic("Can't request IPI1 interrupt");
514     }
515    
516     diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
517     index f4f12ecd0cec..0fa3a788dd20 100644
518     --- a/arch/s390/kvm/kvm-s390.c
519     +++ b/arch/s390/kvm/kvm-s390.c
520     @@ -2119,6 +2119,7 @@ static void sca_add_vcpu(struct kvm_vcpu *vcpu)
521     /* we still need the basic sca for the ipte control */
522     vcpu->arch.sie_block->scaoh = (__u32)(((__u64)sca) >> 32);
523     vcpu->arch.sie_block->scaol = (__u32)(__u64)sca;
524     + return;
525     }
526     read_lock(&vcpu->kvm->arch.sca_lock);
527     if (vcpu->kvm->arch.use_esca) {
528     diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
529     index 559b37bf5a2e..7483cd514c32 100644
530     --- a/arch/x86/Kconfig
531     +++ b/arch/x86/Kconfig
532     @@ -431,6 +431,7 @@ config GOLDFISH
533     config RETPOLINE
534     bool "Avoid speculative indirect branches in kernel"
535     default y
536     + select STACK_VALIDATION if HAVE_STACK_VALIDATION
537     help
538     Compile kernel with the retpoline compiler options to guard against
539     kernel-to-user data leaks by avoiding speculative indirect
540     diff --git a/arch/x86/Makefile b/arch/x86/Makefile
541     index fad55160dcb9..498c1b812300 100644
542     --- a/arch/x86/Makefile
543     +++ b/arch/x86/Makefile
544     @@ -232,10 +232,9 @@ KBUILD_CFLAGS += -fno-asynchronous-unwind-tables
545    
546     # Avoid indirect branches in kernel to deal with Spectre
547     ifdef CONFIG_RETPOLINE
548     - RETPOLINE_CFLAGS += $(call cc-option,-mindirect-branch=thunk-extern -mindirect-branch-register)
549     - ifneq ($(RETPOLINE_CFLAGS),)
550     - KBUILD_CFLAGS += $(RETPOLINE_CFLAGS) -DRETPOLINE
551     - endif
552     +ifneq ($(RETPOLINE_CFLAGS),)
553     + KBUILD_CFLAGS += $(RETPOLINE_CFLAGS) -DRETPOLINE
554     +endif
555     endif
556    
557     archscripts: scripts_basic
558     diff --git a/arch/x86/entry/calling.h b/arch/x86/entry/calling.h
559     index dce7092ab24a..5d10b7a85cad 100644
560     --- a/arch/x86/entry/calling.h
561     +++ b/arch/x86/entry/calling.h
562     @@ -97,7 +97,7 @@ For 32-bit we have the following conventions - kernel is built with
563    
564     #define SIZEOF_PTREGS 21*8
565    
566     -.macro PUSH_AND_CLEAR_REGS rdx=%rdx rax=%rax
567     +.macro PUSH_AND_CLEAR_REGS rdx=%rdx rax=%rax save_ret=0
568     /*
569     * Push registers and sanitize registers of values that a
570     * speculation attack might otherwise want to exploit. The
571     @@ -105,32 +105,41 @@ For 32-bit we have the following conventions - kernel is built with
572     * could be put to use in a speculative execution gadget.
573     * Interleave XOR with PUSH for better uop scheduling:
574     */
575     + .if \save_ret
576     + pushq %rsi /* pt_regs->si */
577     + movq 8(%rsp), %rsi /* temporarily store the return address in %rsi */
578     + movq %rdi, 8(%rsp) /* pt_regs->di (overwriting original return address) */
579     + .else
580     pushq %rdi /* pt_regs->di */
581     pushq %rsi /* pt_regs->si */
582     + .endif
583     pushq \rdx /* pt_regs->dx */
584     pushq %rcx /* pt_regs->cx */
585     pushq \rax /* pt_regs->ax */
586     pushq %r8 /* pt_regs->r8 */
587     - xorq %r8, %r8 /* nospec r8 */
588     + xorl %r8d, %r8d /* nospec r8 */
589     pushq %r9 /* pt_regs->r9 */
590     - xorq %r9, %r9 /* nospec r9 */
591     + xorl %r9d, %r9d /* nospec r9 */
592     pushq %r10 /* pt_regs->r10 */
593     - xorq %r10, %r10 /* nospec r10 */
594     + xorl %r10d, %r10d /* nospec r10 */
595     pushq %r11 /* pt_regs->r11 */
596     - xorq %r11, %r11 /* nospec r11*/
597     + xorl %r11d, %r11d /* nospec r11*/
598     pushq %rbx /* pt_regs->rbx */
599     xorl %ebx, %ebx /* nospec rbx*/
600     pushq %rbp /* pt_regs->rbp */
601     xorl %ebp, %ebp /* nospec rbp*/
602     pushq %r12 /* pt_regs->r12 */
603     - xorq %r12, %r12 /* nospec r12*/
604     + xorl %r12d, %r12d /* nospec r12*/
605     pushq %r13 /* pt_regs->r13 */
606     - xorq %r13, %r13 /* nospec r13*/
607     + xorl %r13d, %r13d /* nospec r13*/
608     pushq %r14 /* pt_regs->r14 */
609     - xorq %r14, %r14 /* nospec r14*/
610     + xorl %r14d, %r14d /* nospec r14*/
611     pushq %r15 /* pt_regs->r15 */
612     - xorq %r15, %r15 /* nospec r15*/
613     + xorl %r15d, %r15d /* nospec r15*/
614     UNWIND_HINT_REGS
615     + .if \save_ret
616     + pushq %rsi /* return address on top of stack */
617     + .endif
618     .endm
619    
620     .macro POP_REGS pop_rdi=1 skip_r11rcx=0
621     diff --git a/arch/x86/entry/entry_32.S b/arch/x86/entry/entry_32.S
622     index 2a35b1e0fb90..60c4c342316c 100644
623     --- a/arch/x86/entry/entry_32.S
624     +++ b/arch/x86/entry/entry_32.S
625     @@ -252,8 +252,7 @@ ENTRY(__switch_to_asm)
626     * exist, overwrite the RSB with entries which capture
627     * speculative execution to prevent attack.
628     */
629     - /* Clobbers %ebx */
630     - FILL_RETURN_BUFFER RSB_CLEAR_LOOPS, X86_FEATURE_RSB_CTXSW
631     + FILL_RETURN_BUFFER %ebx, RSB_CLEAR_LOOPS, X86_FEATURE_RSB_CTXSW
632     #endif
633    
634     /* restore callee-saved registers */
635     diff --git a/arch/x86/entry/entry_64.S b/arch/x86/entry/entry_64.S
636     index 68a2d76e4f8f..6f3cc15e0c73 100644
637     --- a/arch/x86/entry/entry_64.S
638     +++ b/arch/x86/entry/entry_64.S
639     @@ -360,8 +360,7 @@ ENTRY(__switch_to_asm)
640     * exist, overwrite the RSB with entries which capture
641     * speculative execution to prevent attack.
642     */
643     - /* Clobbers %rbx */
644     - FILL_RETURN_BUFFER RSB_CLEAR_LOOPS, X86_FEATURE_RSB_CTXSW
645     + FILL_RETURN_BUFFER %r12, RSB_CLEAR_LOOPS, X86_FEATURE_RSB_CTXSW
646     #endif
647    
648     /* restore callee-saved registers */
649     @@ -867,12 +866,8 @@ ENTRY(\sym)
650     pushq $-1 /* ORIG_RAX: no syscall to restart */
651     .endif
652    
653     - /* Save all registers in pt_regs */
654     - PUSH_AND_CLEAR_REGS
655     - ENCODE_FRAME_POINTER
656     -
657     .if \paranoid < 2
658     - testb $3, CS(%rsp) /* If coming from userspace, switch stacks */
659     + testb $3, CS-ORIG_RAX(%rsp) /* If coming from userspace, switch stacks */
660     jnz .Lfrom_usermode_switch_stack_\@
661     .endif
662    
663     @@ -1117,13 +1112,15 @@ idtentry machine_check do_mce has_error_code=0 paranoid=1
664     #endif
665    
666     /*
667     - * Switch gs if needed.
668     + * Save all registers in pt_regs, and switch gs if needed.
669     * Use slow, but surefire "are we in kernel?" check.
670     * Return: ebx=0: need swapgs on exit, ebx=1: otherwise
671     */
672     ENTRY(paranoid_entry)
673     UNWIND_HINT_FUNC
674     cld
675     + PUSH_AND_CLEAR_REGS save_ret=1
676     + ENCODE_FRAME_POINTER 8
677     movl $1, %ebx
678     movl $MSR_GS_BASE, %ecx
679     rdmsr
680     @@ -1168,12 +1165,14 @@ ENTRY(paranoid_exit)
681     END(paranoid_exit)
682    
683     /*
684     - * Switch gs if needed.
685     + * Save all registers in pt_regs, and switch GS if needed.
686     * Return: EBX=0: came from user mode; EBX=1: otherwise
687     */
688     ENTRY(error_entry)
689     - UNWIND_HINT_REGS offset=8
690     + UNWIND_HINT_FUNC
691     cld
692     + PUSH_AND_CLEAR_REGS save_ret=1
693     + ENCODE_FRAME_POINTER 8
694     testb $3, CS+8(%rsp)
695     jz .Lerror_kernelspace
696    
697     @@ -1564,8 +1563,6 @@ end_repeat_nmi:
698     * frame to point back to repeat_nmi.
699     */
700     pushq $-1 /* ORIG_RAX: no syscall to restart */
701     - PUSH_AND_CLEAR_REGS
702     - ENCODE_FRAME_POINTER
703    
704     /*
705     * Use paranoid_entry to handle SWAPGS, but no need to use paranoid_exit
706     diff --git a/arch/x86/entry/entry_64_compat.S b/arch/x86/entry/entry_64_compat.S
707     index fd65e016e413..364ea4a207be 100644
708     --- a/arch/x86/entry/entry_64_compat.S
709     +++ b/arch/x86/entry/entry_64_compat.S
710     @@ -85,25 +85,25 @@ ENTRY(entry_SYSENTER_compat)
711     pushq %rcx /* pt_regs->cx */
712     pushq $-ENOSYS /* pt_regs->ax */
713     pushq $0 /* pt_regs->r8 = 0 */
714     - xorq %r8, %r8 /* nospec r8 */
715     + xorl %r8d, %r8d /* nospec r8 */
716     pushq $0 /* pt_regs->r9 = 0 */
717     - xorq %r9, %r9 /* nospec r9 */
718     + xorl %r9d, %r9d /* nospec r9 */
719     pushq $0 /* pt_regs->r10 = 0 */
720     - xorq %r10, %r10 /* nospec r10 */
721     + xorl %r10d, %r10d /* nospec r10 */
722     pushq $0 /* pt_regs->r11 = 0 */
723     - xorq %r11, %r11 /* nospec r11 */
724     + xorl %r11d, %r11d /* nospec r11 */
725     pushq %rbx /* pt_regs->rbx */
726     xorl %ebx, %ebx /* nospec rbx */
727     pushq %rbp /* pt_regs->rbp (will be overwritten) */
728     xorl %ebp, %ebp /* nospec rbp */
729     pushq $0 /* pt_regs->r12 = 0 */
730     - xorq %r12, %r12 /* nospec r12 */
731     + xorl %r12d, %r12d /* nospec r12 */
732     pushq $0 /* pt_regs->r13 = 0 */
733     - xorq %r13, %r13 /* nospec r13 */
734     + xorl %r13d, %r13d /* nospec r13 */
735     pushq $0 /* pt_regs->r14 = 0 */
736     - xorq %r14, %r14 /* nospec r14 */
737     + xorl %r14d, %r14d /* nospec r14 */
738     pushq $0 /* pt_regs->r15 = 0 */
739     - xorq %r15, %r15 /* nospec r15 */
740     + xorl %r15d, %r15d /* nospec r15 */
741     cld
742    
743     /*
744     @@ -224,25 +224,25 @@ GLOBAL(entry_SYSCALL_compat_after_hwframe)
745     pushq %rbp /* pt_regs->cx (stashed in bp) */
746     pushq $-ENOSYS /* pt_regs->ax */
747     pushq $0 /* pt_regs->r8 = 0 */
748     - xorq %r8, %r8 /* nospec r8 */
749     + xorl %r8d, %r8d /* nospec r8 */
750     pushq $0 /* pt_regs->r9 = 0 */
751     - xorq %r9, %r9 /* nospec r9 */
752     + xorl %r9d, %r9d /* nospec r9 */
753     pushq $0 /* pt_regs->r10 = 0 */
754     - xorq %r10, %r10 /* nospec r10 */
755     + xorl %r10d, %r10d /* nospec r10 */
756     pushq $0 /* pt_regs->r11 = 0 */
757     - xorq %r11, %r11 /* nospec r11 */
758     + xorl %r11d, %r11d /* nospec r11 */
759     pushq %rbx /* pt_regs->rbx */
760     xorl %ebx, %ebx /* nospec rbx */
761     pushq %rbp /* pt_regs->rbp (will be overwritten) */
762     xorl %ebp, %ebp /* nospec rbp */
763     pushq $0 /* pt_regs->r12 = 0 */
764     - xorq %r12, %r12 /* nospec r12 */
765     + xorl %r12d, %r12d /* nospec r12 */
766     pushq $0 /* pt_regs->r13 = 0 */
767     - xorq %r13, %r13 /* nospec r13 */
768     + xorl %r13d, %r13d /* nospec r13 */
769     pushq $0 /* pt_regs->r14 = 0 */
770     - xorq %r14, %r14 /* nospec r14 */
771     + xorl %r14d, %r14d /* nospec r14 */
772     pushq $0 /* pt_regs->r15 = 0 */
773     - xorq %r15, %r15 /* nospec r15 */
774     + xorl %r15d, %r15d /* nospec r15 */
775    
776     /*
777     * User mode is traced as though IRQs are on, and SYSENTER
778     @@ -298,9 +298,9 @@ sysret32_from_system_call:
779     */
780     SWITCH_TO_USER_CR3_NOSTACK scratch_reg=%r8 scratch_reg2=%r9
781    
782     - xorq %r8, %r8
783     - xorq %r9, %r9
784     - xorq %r10, %r10
785     + xorl %r8d, %r8d
786     + xorl %r9d, %r9d
787     + xorl %r10d, %r10d
788     swapgs
789     sysretl
790     END(entry_SYSCALL_compat)
791     @@ -358,25 +358,25 @@ ENTRY(entry_INT80_compat)
792     pushq %rcx /* pt_regs->cx */
793     pushq $-ENOSYS /* pt_regs->ax */
794     pushq $0 /* pt_regs->r8 = 0 */
795     - xorq %r8, %r8 /* nospec r8 */
796     + xorl %r8d, %r8d /* nospec r8 */
797     pushq $0 /* pt_regs->r9 = 0 */
798     - xorq %r9, %r9 /* nospec r9 */
799     + xorl %r9d, %r9d /* nospec r9 */
800     pushq $0 /* pt_regs->r10 = 0 */
801     - xorq %r10, %r10 /* nospec r10 */
802     + xorl %r10d, %r10d /* nospec r10 */
803     pushq $0 /* pt_regs->r11 = 0 */
804     - xorq %r11, %r11 /* nospec r11 */
805     + xorl %r11d, %r11d /* nospec r11 */
806     pushq %rbx /* pt_regs->rbx */
807     xorl %ebx, %ebx /* nospec rbx */
808     pushq %rbp /* pt_regs->rbp */
809     xorl %ebp, %ebp /* nospec rbp */
810     pushq %r12 /* pt_regs->r12 */
811     - xorq %r12, %r12 /* nospec r12 */
812     + xorl %r12d, %r12d /* nospec r12 */
813     pushq %r13 /* pt_regs->r13 */
814     - xorq %r13, %r13 /* nospec r13 */
815     + xorl %r13d, %r13d /* nospec r13 */
816     pushq %r14 /* pt_regs->r14 */
817     - xorq %r14, %r14 /* nospec r14 */
818     + xorl %r14d, %r14d /* nospec r14 */
819     pushq %r15 /* pt_regs->r15 */
820     - xorq %r15, %r15 /* nospec r15 */
821     + xorl %r15d, %r15d /* nospec r15 */
822     cld
823    
824     /*
825     diff --git a/arch/x86/include/asm/apm.h b/arch/x86/include/asm/apm.h
826     index 4d4015ddcf26..c356098b6fb9 100644
827     --- a/arch/x86/include/asm/apm.h
828     +++ b/arch/x86/include/asm/apm.h
829     @@ -7,6 +7,8 @@
830     #ifndef _ASM_X86_MACH_DEFAULT_APM_H
831     #define _ASM_X86_MACH_DEFAULT_APM_H
832    
833     +#include <asm/nospec-branch.h>
834     +
835     #ifdef APM_ZERO_SEGS
836     # define APM_DO_ZERO_SEGS \
837     "pushl %%ds\n\t" \
838     @@ -32,6 +34,7 @@ static inline void apm_bios_call_asm(u32 func, u32 ebx_in, u32 ecx_in,
839     * N.B. We do NOT need a cld after the BIOS call
840     * because we always save and restore the flags.
841     */
842     + firmware_restrict_branch_speculation_start();
843     __asm__ __volatile__(APM_DO_ZERO_SEGS
844     "pushl %%edi\n\t"
845     "pushl %%ebp\n\t"
846     @@ -44,6 +47,7 @@ static inline void apm_bios_call_asm(u32 func, u32 ebx_in, u32 ecx_in,
847     "=S" (*esi)
848     : "a" (func), "b" (ebx_in), "c" (ecx_in)
849     : "memory", "cc");
850     + firmware_restrict_branch_speculation_end();
851     }
852    
853     static inline bool apm_bios_call_simple_asm(u32 func, u32 ebx_in,
854     @@ -56,6 +60,7 @@ static inline bool apm_bios_call_simple_asm(u32 func, u32 ebx_in,
855     * N.B. We do NOT need a cld after the BIOS call
856     * because we always save and restore the flags.
857     */
858     + firmware_restrict_branch_speculation_start();
859     __asm__ __volatile__(APM_DO_ZERO_SEGS
860     "pushl %%edi\n\t"
861     "pushl %%ebp\n\t"
862     @@ -68,6 +73,7 @@ static inline bool apm_bios_call_simple_asm(u32 func, u32 ebx_in,
863     "=S" (si)
864     : "a" (func), "b" (ebx_in), "c" (ecx_in)
865     : "memory", "cc");
866     + firmware_restrict_branch_speculation_end();
867     return error;
868     }
869    
870     diff --git a/arch/x86/include/asm/asm-prototypes.h b/arch/x86/include/asm/asm-prototypes.h
871     index 4d111616524b..1908214b9125 100644
872     --- a/arch/x86/include/asm/asm-prototypes.h
873     +++ b/arch/x86/include/asm/asm-prototypes.h
874     @@ -38,7 +38,4 @@ INDIRECT_THUNK(dx)
875     INDIRECT_THUNK(si)
876     INDIRECT_THUNK(di)
877     INDIRECT_THUNK(bp)
878     -asmlinkage void __fill_rsb(void);
879     -asmlinkage void __clear_rsb(void);
880     -
881     #endif /* CONFIG_RETPOLINE */
882     diff --git a/arch/x86/include/asm/cpufeatures.h b/arch/x86/include/asm/cpufeatures.h
883     index 73b5fff159a4..66c14347c502 100644
884     --- a/arch/x86/include/asm/cpufeatures.h
885     +++ b/arch/x86/include/asm/cpufeatures.h
886     @@ -211,6 +211,7 @@
887     #define X86_FEATURE_RSB_CTXSW ( 7*32+19) /* "" Fill RSB on context switches */
888    
889     #define X86_FEATURE_USE_IBPB ( 7*32+21) /* "" Indirect Branch Prediction Barrier enabled */
890     +#define X86_FEATURE_USE_IBRS_FW ( 7*32+22) /* "" Use IBRS during runtime firmware calls */
891    
892     /* Virtualization flags: Linux defined, word 8 */
893     #define X86_FEATURE_TPR_SHADOW ( 8*32+ 0) /* Intel TPR Shadow */
894     diff --git a/arch/x86/include/asm/efi.h b/arch/x86/include/asm/efi.h
895     index 85f6ccb80b91..a399c1ebf6f0 100644
896     --- a/arch/x86/include/asm/efi.h
897     +++ b/arch/x86/include/asm/efi.h
898     @@ -6,6 +6,7 @@
899     #include <asm/pgtable.h>
900     #include <asm/processor-flags.h>
901     #include <asm/tlb.h>
902     +#include <asm/nospec-branch.h>
903    
904     /*
905     * We map the EFI regions needed for runtime services non-contiguously,
906     @@ -36,8 +37,18 @@
907    
908     extern asmlinkage unsigned long efi_call_phys(void *, ...);
909    
910     -#define arch_efi_call_virt_setup() kernel_fpu_begin()
911     -#define arch_efi_call_virt_teardown() kernel_fpu_end()
912     +#define arch_efi_call_virt_setup() \
913     +({ \
914     + kernel_fpu_begin(); \
915     + firmware_restrict_branch_speculation_start(); \
916     +})
917     +
918     +#define arch_efi_call_virt_teardown() \
919     +({ \
920     + firmware_restrict_branch_speculation_end(); \
921     + kernel_fpu_end(); \
922     +})
923     +
924    
925     /*
926     * Wrap all the virtual calls in a way that forces the parameters on the stack.
927     @@ -73,6 +84,7 @@ struct efi_scratch {
928     efi_sync_low_kernel_mappings(); \
929     preempt_disable(); \
930     __kernel_fpu_begin(); \
931     + firmware_restrict_branch_speculation_start(); \
932     \
933     if (efi_scratch.use_pgd) { \
934     efi_scratch.prev_cr3 = __read_cr3(); \
935     @@ -91,6 +103,7 @@ struct efi_scratch {
936     __flush_tlb_all(); \
937     } \
938     \
939     + firmware_restrict_branch_speculation_end(); \
940     __kernel_fpu_end(); \
941     preempt_enable(); \
942     })
943     diff --git a/arch/x86/include/asm/mmu_context.h b/arch/x86/include/asm/mmu_context.h
944     index c931b88982a0..1de72ce514cd 100644
945     --- a/arch/x86/include/asm/mmu_context.h
946     +++ b/arch/x86/include/asm/mmu_context.h
947     @@ -74,6 +74,7 @@ static inline void *ldt_slot_va(int slot)
948     return (void *)(LDT_BASE_ADDR + LDT_SLOT_STRIDE * slot);
949     #else
950     BUG();
951     + return (void *)fix_to_virt(FIX_HOLE);
952     #endif
953     }
954    
955     diff --git a/arch/x86/include/asm/nospec-branch.h b/arch/x86/include/asm/nospec-branch.h
956     index 81a1be326571..d0dabeae0505 100644
957     --- a/arch/x86/include/asm/nospec-branch.h
958     +++ b/arch/x86/include/asm/nospec-branch.h
959     @@ -8,6 +8,50 @@
960     #include <asm/cpufeatures.h>
961     #include <asm/msr-index.h>
962    
963     +/*
964     + * Fill the CPU return stack buffer.
965     + *
966     + * Each entry in the RSB, if used for a speculative 'ret', contains an
967     + * infinite 'pause; lfence; jmp' loop to capture speculative execution.
968     + *
969     + * This is required in various cases for retpoline and IBRS-based
970     + * mitigations for the Spectre variant 2 vulnerability. Sometimes to
971     + * eliminate potentially bogus entries from the RSB, and sometimes
972     + * purely to ensure that it doesn't get empty, which on some CPUs would
973     + * allow predictions from other (unwanted!) sources to be used.
974     + *
975     + * We define a CPP macro such that it can be used from both .S files and
976     + * inline assembly. It's possible to do a .macro and then include that
977     + * from C via asm(".include <asm/nospec-branch.h>") but let's not go there.
978     + */
979     +
980     +#define RSB_CLEAR_LOOPS 32 /* To forcibly overwrite all entries */
981     +#define RSB_FILL_LOOPS 16 /* To avoid underflow */
982     +
983     +/*
984     + * Google experimented with loop-unrolling and this turned out to be
985     + * the optimal version — two calls, each with their own speculation
986     + * trap should their return address end up getting used, in a loop.
987     + */
988     +#define __FILL_RETURN_BUFFER(reg, nr, sp) \
989     + mov $(nr/2), reg; \
990     +771: \
991     + call 772f; \
992     +773: /* speculation trap */ \
993     + pause; \
994     + lfence; \
995     + jmp 773b; \
996     +772: \
997     + call 774f; \
998     +775: /* speculation trap */ \
999     + pause; \
1000     + lfence; \
1001     + jmp 775b; \
1002     +774: \
1003     + dec reg; \
1004     + jnz 771b; \
1005     + add $(BITS_PER_LONG/8) * nr, sp;
1006     +
1007     #ifdef __ASSEMBLY__
1008    
1009     /*
1010     @@ -23,6 +67,18 @@
1011     .popsection
1012     .endm
1013    
1014     +/*
1015     + * This should be used immediately before an indirect jump/call. It tells
1016     + * objtool the subsequent indirect jump/call is vouched safe for retpoline
1017     + * builds.
1018     + */
1019     +.macro ANNOTATE_RETPOLINE_SAFE
1020     + .Lannotate_\@:
1021     + .pushsection .discard.retpoline_safe
1022     + _ASM_PTR .Lannotate_\@
1023     + .popsection
1024     +.endm
1025     +
1026     /*
1027     * These are the bare retpoline primitives for indirect jmp and call.
1028     * Do not use these directly; they only exist to make the ALTERNATIVE
1029     @@ -59,9 +115,9 @@
1030     .macro JMP_NOSPEC reg:req
1031     #ifdef CONFIG_RETPOLINE
1032     ANNOTATE_NOSPEC_ALTERNATIVE
1033     - ALTERNATIVE_2 __stringify(jmp *\reg), \
1034     + ALTERNATIVE_2 __stringify(ANNOTATE_RETPOLINE_SAFE; jmp *\reg), \
1035     __stringify(RETPOLINE_JMP \reg), X86_FEATURE_RETPOLINE, \
1036     - __stringify(lfence; jmp *\reg), X86_FEATURE_RETPOLINE_AMD
1037     + __stringify(lfence; ANNOTATE_RETPOLINE_SAFE; jmp *\reg), X86_FEATURE_RETPOLINE_AMD
1038     #else
1039     jmp *\reg
1040     #endif
1041     @@ -70,18 +126,25 @@
1042     .macro CALL_NOSPEC reg:req
1043     #ifdef CONFIG_RETPOLINE
1044     ANNOTATE_NOSPEC_ALTERNATIVE
1045     - ALTERNATIVE_2 __stringify(call *\reg), \
1046     + ALTERNATIVE_2 __stringify(ANNOTATE_RETPOLINE_SAFE; call *\reg), \
1047     __stringify(RETPOLINE_CALL \reg), X86_FEATURE_RETPOLINE,\
1048     - __stringify(lfence; call *\reg), X86_FEATURE_RETPOLINE_AMD
1049     + __stringify(lfence; ANNOTATE_RETPOLINE_SAFE; call *\reg), X86_FEATURE_RETPOLINE_AMD
1050     #else
1051     call *\reg
1052     #endif
1053     .endm
1054    
1055     -/* This clobbers the BX register */
1056     -.macro FILL_RETURN_BUFFER nr:req ftr:req
1057     + /*
1058     + * A simpler FILL_RETURN_BUFFER macro. Don't make people use the CPP
1059     + * monstrosity above, manually.
1060     + */
1061     +.macro FILL_RETURN_BUFFER reg:req nr:req ftr:req
1062     #ifdef CONFIG_RETPOLINE
1063     - ALTERNATIVE "", "call __clear_rsb", \ftr
1064     + ANNOTATE_NOSPEC_ALTERNATIVE
1065     + ALTERNATIVE "jmp .Lskip_rsb_\@", \
1066     + __stringify(__FILL_RETURN_BUFFER(\reg,\nr,%_ASM_SP)) \
1067     + \ftr
1068     +.Lskip_rsb_\@:
1069     #endif
1070     .endm
1071    
1072     @@ -93,6 +156,12 @@
1073     ".long 999b - .\n\t" \
1074     ".popsection\n\t"
1075    
1076     +#define ANNOTATE_RETPOLINE_SAFE \
1077     + "999:\n\t" \
1078     + ".pushsection .discard.retpoline_safe\n\t" \
1079     + _ASM_PTR " 999b\n\t" \
1080     + ".popsection\n\t"
1081     +
1082     #if defined(CONFIG_X86_64) && defined(RETPOLINE)
1083    
1084     /*
1085     @@ -102,6 +171,7 @@
1086     # define CALL_NOSPEC \
1087     ANNOTATE_NOSPEC_ALTERNATIVE \
1088     ALTERNATIVE( \
1089     + ANNOTATE_RETPOLINE_SAFE \
1090     "call *%[thunk_target]\n", \
1091     "call __x86_indirect_thunk_%V[thunk_target]\n", \
1092     X86_FEATURE_RETPOLINE)
1093     @@ -156,26 +226,54 @@ extern char __indirect_thunk_end[];
1094     static inline void vmexit_fill_RSB(void)
1095     {
1096     #ifdef CONFIG_RETPOLINE
1097     - alternative_input("",
1098     - "call __fill_rsb",
1099     - X86_FEATURE_RETPOLINE,
1100     - ASM_NO_INPUT_CLOBBER(_ASM_BX, "memory"));
1101     + unsigned long loops;
1102     +
1103     + asm volatile (ANNOTATE_NOSPEC_ALTERNATIVE
1104     + ALTERNATIVE("jmp 910f",
1105     + __stringify(__FILL_RETURN_BUFFER(%0, RSB_CLEAR_LOOPS, %1)),
1106     + X86_FEATURE_RETPOLINE)
1107     + "910:"
1108     + : "=r" (loops), ASM_CALL_CONSTRAINT
1109     + : : "memory" );
1110     #endif
1111     }
1112    
1113     +#define alternative_msr_write(_msr, _val, _feature) \
1114     + asm volatile(ALTERNATIVE("", \
1115     + "movl %[msr], %%ecx\n\t" \
1116     + "movl %[val], %%eax\n\t" \
1117     + "movl $0, %%edx\n\t" \
1118     + "wrmsr", \
1119     + _feature) \
1120     + : : [msr] "i" (_msr), [val] "i" (_val) \
1121     + : "eax", "ecx", "edx", "memory")
1122     +
1123     static inline void indirect_branch_prediction_barrier(void)
1124     {
1125     - asm volatile(ALTERNATIVE("",
1126     - "movl %[msr], %%ecx\n\t"
1127     - "movl %[val], %%eax\n\t"
1128     - "movl $0, %%edx\n\t"
1129     - "wrmsr",
1130     - X86_FEATURE_USE_IBPB)
1131     - : : [msr] "i" (MSR_IA32_PRED_CMD),
1132     - [val] "i" (PRED_CMD_IBPB)
1133     - : "eax", "ecx", "edx", "memory");
1134     + alternative_msr_write(MSR_IA32_PRED_CMD, PRED_CMD_IBPB,
1135     + X86_FEATURE_USE_IBPB);
1136     }
1137    
1138     +/*
1139     + * With retpoline, we must use IBRS to restrict branch prediction
1140     + * before calling into firmware.
1141     + *
1142     + * (Implemented as CPP macros due to header hell.)
1143     + */
1144     +#define firmware_restrict_branch_speculation_start() \
1145     +do { \
1146     + preempt_disable(); \
1147     + alternative_msr_write(MSR_IA32_SPEC_CTRL, SPEC_CTRL_IBRS, \
1148     + X86_FEATURE_USE_IBRS_FW); \
1149     +} while (0)
1150     +
1151     +#define firmware_restrict_branch_speculation_end() \
1152     +do { \
1153     + alternative_msr_write(MSR_IA32_SPEC_CTRL, 0, \
1154     + X86_FEATURE_USE_IBRS_FW); \
1155     + preempt_enable(); \
1156     +} while (0)
1157     +
1158     #endif /* __ASSEMBLY__ */
1159    
1160     /*
1161     diff --git a/arch/x86/include/asm/paravirt.h b/arch/x86/include/asm/paravirt.h
1162     index 554841fab717..c83a2f418cea 100644
1163     --- a/arch/x86/include/asm/paravirt.h
1164     +++ b/arch/x86/include/asm/paravirt.h
1165     @@ -7,6 +7,7 @@
1166     #ifdef CONFIG_PARAVIRT
1167     #include <asm/pgtable_types.h>
1168     #include <asm/asm.h>
1169     +#include <asm/nospec-branch.h>
1170    
1171     #include <asm/paravirt_types.h>
1172    
1173     @@ -879,23 +880,27 @@ extern void default_banner(void);
1174    
1175     #define INTERRUPT_RETURN \
1176     PARA_SITE(PARA_PATCH(pv_cpu_ops, PV_CPU_iret), CLBR_NONE, \
1177     - jmp PARA_INDIRECT(pv_cpu_ops+PV_CPU_iret))
1178     + ANNOTATE_RETPOLINE_SAFE; \
1179     + jmp PARA_INDIRECT(pv_cpu_ops+PV_CPU_iret);)
1180    
1181     #define DISABLE_INTERRUPTS(clobbers) \
1182     PARA_SITE(PARA_PATCH(pv_irq_ops, PV_IRQ_irq_disable), clobbers, \
1183     PV_SAVE_REGS(clobbers | CLBR_CALLEE_SAVE); \
1184     + ANNOTATE_RETPOLINE_SAFE; \
1185     call PARA_INDIRECT(pv_irq_ops+PV_IRQ_irq_disable); \
1186     PV_RESTORE_REGS(clobbers | CLBR_CALLEE_SAVE);)
1187    
1188     #define ENABLE_INTERRUPTS(clobbers) \
1189     PARA_SITE(PARA_PATCH(pv_irq_ops, PV_IRQ_irq_enable), clobbers, \
1190     PV_SAVE_REGS(clobbers | CLBR_CALLEE_SAVE); \
1191     + ANNOTATE_RETPOLINE_SAFE; \
1192     call PARA_INDIRECT(pv_irq_ops+PV_IRQ_irq_enable); \
1193     PV_RESTORE_REGS(clobbers | CLBR_CALLEE_SAVE);)
1194    
1195     #ifdef CONFIG_X86_32
1196     #define GET_CR0_INTO_EAX \
1197     push %ecx; push %edx; \
1198     + ANNOTATE_RETPOLINE_SAFE; \
1199     call PARA_INDIRECT(pv_cpu_ops+PV_CPU_read_cr0); \
1200     pop %edx; pop %ecx
1201     #else /* !CONFIG_X86_32 */
1202     @@ -917,21 +922,25 @@ extern void default_banner(void);
1203     */
1204     #define SWAPGS \
1205     PARA_SITE(PARA_PATCH(pv_cpu_ops, PV_CPU_swapgs), CLBR_NONE, \
1206     - call PARA_INDIRECT(pv_cpu_ops+PV_CPU_swapgs) \
1207     + ANNOTATE_RETPOLINE_SAFE; \
1208     + call PARA_INDIRECT(pv_cpu_ops+PV_CPU_swapgs); \
1209     )
1210    
1211     #define GET_CR2_INTO_RAX \
1212     - call PARA_INDIRECT(pv_mmu_ops+PV_MMU_read_cr2)
1213     + ANNOTATE_RETPOLINE_SAFE; \
1214     + call PARA_INDIRECT(pv_mmu_ops+PV_MMU_read_cr2);
1215    
1216     #define USERGS_SYSRET64 \
1217     PARA_SITE(PARA_PATCH(pv_cpu_ops, PV_CPU_usergs_sysret64), \
1218     CLBR_NONE, \
1219     - jmp PARA_INDIRECT(pv_cpu_ops+PV_CPU_usergs_sysret64))
1220     + ANNOTATE_RETPOLINE_SAFE; \
1221     + jmp PARA_INDIRECT(pv_cpu_ops+PV_CPU_usergs_sysret64);)
1222    
1223     #ifdef CONFIG_DEBUG_ENTRY
1224     #define SAVE_FLAGS(clobbers) \
1225     PARA_SITE(PARA_PATCH(pv_irq_ops, PV_IRQ_save_fl), clobbers, \
1226     PV_SAVE_REGS(clobbers | CLBR_CALLEE_SAVE); \
1227     + ANNOTATE_RETPOLINE_SAFE; \
1228     call PARA_INDIRECT(pv_irq_ops+PV_IRQ_save_fl); \
1229     PV_RESTORE_REGS(clobbers | CLBR_CALLEE_SAVE);)
1230     #endif
1231     diff --git a/arch/x86/include/asm/paravirt_types.h b/arch/x86/include/asm/paravirt_types.h
1232     index f624f1f10316..180bc0bff0fb 100644
1233     --- a/arch/x86/include/asm/paravirt_types.h
1234     +++ b/arch/x86/include/asm/paravirt_types.h
1235     @@ -43,6 +43,7 @@
1236     #include <asm/desc_defs.h>
1237     #include <asm/kmap_types.h>
1238     #include <asm/pgtable_types.h>
1239     +#include <asm/nospec-branch.h>
1240    
1241     struct page;
1242     struct thread_struct;
1243     @@ -392,7 +393,9 @@ int paravirt_disable_iospace(void);
1244     * offset into the paravirt_patch_template structure, and can therefore be
1245     * freely converted back into a structure offset.
1246     */
1247     -#define PARAVIRT_CALL "call *%c[paravirt_opptr];"
1248     +#define PARAVIRT_CALL \
1249     + ANNOTATE_RETPOLINE_SAFE \
1250     + "call *%c[paravirt_opptr];"
1251    
1252     /*
1253     * These macros are intended to wrap calls through one of the paravirt
1254     diff --git a/arch/x86/include/asm/refcount.h b/arch/x86/include/asm/refcount.h
1255     index 4e44250e7d0d..d65171120e90 100644
1256     --- a/arch/x86/include/asm/refcount.h
1257     +++ b/arch/x86/include/asm/refcount.h
1258     @@ -67,13 +67,13 @@ static __always_inline __must_check
1259     bool refcount_sub_and_test(unsigned int i, refcount_t *r)
1260     {
1261     GEN_BINARY_SUFFIXED_RMWcc(LOCK_PREFIX "subl", REFCOUNT_CHECK_LT_ZERO,
1262     - r->refs.counter, "er", i, "%0", e);
1263     + r->refs.counter, "er", i, "%0", e, "cx");
1264     }
1265    
1266     static __always_inline __must_check bool refcount_dec_and_test(refcount_t *r)
1267     {
1268     GEN_UNARY_SUFFIXED_RMWcc(LOCK_PREFIX "decl", REFCOUNT_CHECK_LT_ZERO,
1269     - r->refs.counter, "%0", e);
1270     + r->refs.counter, "%0", e, "cx");
1271     }
1272    
1273     static __always_inline __must_check
1274     diff --git a/arch/x86/include/asm/rmwcc.h b/arch/x86/include/asm/rmwcc.h
1275     index f91c365e57c3..4914a3e7c803 100644
1276     --- a/arch/x86/include/asm/rmwcc.h
1277     +++ b/arch/x86/include/asm/rmwcc.h
1278     @@ -2,8 +2,7 @@
1279     #ifndef _ASM_X86_RMWcc
1280     #define _ASM_X86_RMWcc
1281    
1282     -#define __CLOBBERS_MEM "memory"
1283     -#define __CLOBBERS_MEM_CC_CX "memory", "cc", "cx"
1284     +#define __CLOBBERS_MEM(clb...) "memory", ## clb
1285    
1286     #if !defined(__GCC_ASM_FLAG_OUTPUTS__) && defined(CC_HAVE_ASM_GOTO)
1287    
1288     @@ -40,18 +39,19 @@ do { \
1289     #endif /* defined(__GCC_ASM_FLAG_OUTPUTS__) || !defined(CC_HAVE_ASM_GOTO) */
1290    
1291     #define GEN_UNARY_RMWcc(op, var, arg0, cc) \
1292     - __GEN_RMWcc(op " " arg0, var, cc, __CLOBBERS_MEM)
1293     + __GEN_RMWcc(op " " arg0, var, cc, __CLOBBERS_MEM())
1294    
1295     -#define GEN_UNARY_SUFFIXED_RMWcc(op, suffix, var, arg0, cc) \
1296     +#define GEN_UNARY_SUFFIXED_RMWcc(op, suffix, var, arg0, cc, clobbers...)\
1297     __GEN_RMWcc(op " " arg0 "\n\t" suffix, var, cc, \
1298     - __CLOBBERS_MEM_CC_CX)
1299     + __CLOBBERS_MEM(clobbers))
1300    
1301     #define GEN_BINARY_RMWcc(op, var, vcon, val, arg0, cc) \
1302     __GEN_RMWcc(op __BINARY_RMWcc_ARG arg0, var, cc, \
1303     - __CLOBBERS_MEM, vcon (val))
1304     + __CLOBBERS_MEM(), vcon (val))
1305    
1306     -#define GEN_BINARY_SUFFIXED_RMWcc(op, suffix, var, vcon, val, arg0, cc) \
1307     +#define GEN_BINARY_SUFFIXED_RMWcc(op, suffix, var, vcon, val, arg0, cc, \
1308     + clobbers...) \
1309     __GEN_RMWcc(op __BINARY_RMWcc_ARG arg0 "\n\t" suffix, var, cc, \
1310     - __CLOBBERS_MEM_CC_CX, vcon (val))
1311     + __CLOBBERS_MEM(clobbers), vcon (val))
1312    
1313     #endif /* _ASM_X86_RMWcc */
1314     diff --git a/arch/x86/include/asm/sections.h b/arch/x86/include/asm/sections.h
1315     index d6baf23782bc..5c019d23d06b 100644
1316     --- a/arch/x86/include/asm/sections.h
1317     +++ b/arch/x86/include/asm/sections.h
1318     @@ -10,6 +10,7 @@ extern struct exception_table_entry __stop___ex_table[];
1319    
1320     #if defined(CONFIG_X86_64)
1321     extern char __end_rodata_hpage_align[];
1322     +extern char __entry_trampoline_start[], __entry_trampoline_end[];
1323     #endif
1324    
1325     #endif /* _ASM_X86_SECTIONS_H */
1326     diff --git a/arch/x86/include/uapi/asm/mce.h b/arch/x86/include/uapi/asm/mce.h
1327     index 91723461dc1f..435db58a7bad 100644
1328     --- a/arch/x86/include/uapi/asm/mce.h
1329     +++ b/arch/x86/include/uapi/asm/mce.h
1330     @@ -30,6 +30,7 @@ struct mce {
1331     __u64 synd; /* MCA_SYND MSR: only valid on SMCA systems */
1332     __u64 ipid; /* MCA_IPID MSR: only valid on SMCA systems */
1333     __u64 ppin; /* Protected Processor Inventory Number */
1334     + __u32 microcode;/* Microcode revision */
1335     };
1336    
1337     #define MCE_GET_RECORD_LEN _IOR('M', 1, int)
1338     diff --git a/arch/x86/kernel/cpu/bugs.c b/arch/x86/kernel/cpu/bugs.c
1339     index d71c8b54b696..bfca937bdcc3 100644
1340     --- a/arch/x86/kernel/cpu/bugs.c
1341     +++ b/arch/x86/kernel/cpu/bugs.c
1342     @@ -300,6 +300,15 @@ static void __init spectre_v2_select_mitigation(void)
1343     setup_force_cpu_cap(X86_FEATURE_USE_IBPB);
1344     pr_info("Spectre v2 mitigation: Enabling Indirect Branch Prediction Barrier\n");
1345     }
1346     +
1347     + /*
1348     + * Retpoline means the kernel is safe because it has no indirect
1349     + * branches. But firmware isn't, so use IBRS to protect that.
1350     + */
1351     + if (boot_cpu_has(X86_FEATURE_IBRS)) {
1352     + setup_force_cpu_cap(X86_FEATURE_USE_IBRS_FW);
1353     + pr_info("Enabling Restricted Speculation for firmware calls\n");
1354     + }
1355     }
1356    
1357     #undef pr_fmt
1358     @@ -326,8 +335,9 @@ ssize_t cpu_show_spectre_v2(struct device *dev, struct device_attribute *attr, c
1359     if (!boot_cpu_has_bug(X86_BUG_SPECTRE_V2))
1360     return sprintf(buf, "Not affected\n");
1361    
1362     - return sprintf(buf, "%s%s%s\n", spectre_v2_strings[spectre_v2_enabled],
1363     + return sprintf(buf, "%s%s%s%s\n", spectre_v2_strings[spectre_v2_enabled],
1364     boot_cpu_has(X86_FEATURE_USE_IBPB) ? ", IBPB" : "",
1365     + boot_cpu_has(X86_FEATURE_USE_IBRS_FW) ? ", IBRS_FW" : "",
1366     spectre_v2_module_string());
1367     }
1368     #endif
1369     diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c
1370     index d19e903214b4..4aa9fd379390 100644
1371     --- a/arch/x86/kernel/cpu/intel.c
1372     +++ b/arch/x86/kernel/cpu/intel.c
1373     @@ -144,6 +144,13 @@ static bool bad_spectre_microcode(struct cpuinfo_x86 *c)
1374     {
1375     int i;
1376    
1377     + /*
1378     + * We know that the hypervisor lie to us on the microcode version so
1379     + * we may as well hope that it is running the correct version.
1380     + */
1381     + if (cpu_has(c, X86_FEATURE_HYPERVISOR))
1382     + return false;
1383     +
1384     for (i = 0; i < ARRAY_SIZE(spectre_bad_microcodes); i++) {
1385     if (c->x86_model == spectre_bad_microcodes[i].model &&
1386     c->x86_stepping == spectre_bad_microcodes[i].stepping)
1387     diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c
1388     index 73237aa271ea..e13d652fc30a 100644
1389     --- a/arch/x86/kernel/cpu/mcheck/mce.c
1390     +++ b/arch/x86/kernel/cpu/mcheck/mce.c
1391     @@ -57,6 +57,9 @@
1392    
1393     static DEFINE_MUTEX(mce_log_mutex);
1394    
1395     +/* sysfs synchronization */
1396     +static DEFINE_MUTEX(mce_sysfs_mutex);
1397     +
1398     #define CREATE_TRACE_POINTS
1399     #include <trace/events/mce.h>
1400    
1401     @@ -131,6 +134,8 @@ void mce_setup(struct mce *m)
1402    
1403     if (this_cpu_has(X86_FEATURE_INTEL_PPIN))
1404     rdmsrl(MSR_PPIN, m->ppin);
1405     +
1406     + m->microcode = boot_cpu_data.microcode;
1407     }
1408    
1409     DEFINE_PER_CPU(struct mce, injectm);
1410     @@ -263,7 +268,7 @@ static void __print_mce(struct mce *m)
1411     */
1412     pr_emerg(HW_ERR "PROCESSOR %u:%x TIME %llu SOCKET %u APIC %x microcode %x\n",
1413     m->cpuvendor, m->cpuid, m->time, m->socketid, m->apicid,
1414     - cpu_data(m->extcpu).microcode);
1415     + m->microcode);
1416     }
1417    
1418     static void print_mce(struct mce *m)
1419     @@ -2081,6 +2086,7 @@ static ssize_t set_ignore_ce(struct device *s,
1420     if (kstrtou64(buf, 0, &new) < 0)
1421     return -EINVAL;
1422    
1423     + mutex_lock(&mce_sysfs_mutex);
1424     if (mca_cfg.ignore_ce ^ !!new) {
1425     if (new) {
1426     /* disable ce features */
1427     @@ -2093,6 +2099,8 @@ static ssize_t set_ignore_ce(struct device *s,
1428     on_each_cpu(mce_enable_ce, (void *)1, 1);
1429     }
1430     }
1431     + mutex_unlock(&mce_sysfs_mutex);
1432     +
1433     return size;
1434     }
1435    
1436     @@ -2105,6 +2113,7 @@ static ssize_t set_cmci_disabled(struct device *s,
1437     if (kstrtou64(buf, 0, &new) < 0)
1438     return -EINVAL;
1439    
1440     + mutex_lock(&mce_sysfs_mutex);
1441     if (mca_cfg.cmci_disabled ^ !!new) {
1442     if (new) {
1443     /* disable cmci */
1444     @@ -2116,6 +2125,8 @@ static ssize_t set_cmci_disabled(struct device *s,
1445     on_each_cpu(mce_enable_ce, NULL, 1);
1446     }
1447     }
1448     + mutex_unlock(&mce_sysfs_mutex);
1449     +
1450     return size;
1451     }
1452    
1453     @@ -2123,8 +2134,19 @@ static ssize_t store_int_with_restart(struct device *s,
1454     struct device_attribute *attr,
1455     const char *buf, size_t size)
1456     {
1457     - ssize_t ret = device_store_int(s, attr, buf, size);
1458     + unsigned long old_check_interval = check_interval;
1459     + ssize_t ret = device_store_ulong(s, attr, buf, size);
1460     +
1461     + if (check_interval == old_check_interval)
1462     + return ret;
1463     +
1464     + if (check_interval < 1)
1465     + check_interval = 1;
1466     +
1467     + mutex_lock(&mce_sysfs_mutex);
1468     mce_restart();
1469     + mutex_unlock(&mce_sysfs_mutex);
1470     +
1471     return ret;
1472     }
1473    
1474     diff --git a/arch/x86/kernel/head_64.S b/arch/x86/kernel/head_64.S
1475     index 04a625f0fcda..0f545b3cf926 100644
1476     --- a/arch/x86/kernel/head_64.S
1477     +++ b/arch/x86/kernel/head_64.S
1478     @@ -23,6 +23,7 @@
1479     #include <asm/nops.h>
1480     #include "../entry/calling.h"
1481     #include <asm/export.h>
1482     +#include <asm/nospec-branch.h>
1483    
1484     #ifdef CONFIG_PARAVIRT
1485     #include <asm/asm-offsets.h>
1486     @@ -134,6 +135,7 @@ ENTRY(secondary_startup_64)
1487    
1488     /* Ensure I am executing from virtual addresses */
1489     movq $1f, %rax
1490     + ANNOTATE_RETPOLINE_SAFE
1491     jmp *%rax
1492     1:
1493     UNWIND_HINT_EMPTY
1494     diff --git a/arch/x86/kernel/kprobes/core.c b/arch/x86/kernel/kprobes/core.c
1495     index 0742491cbb73..ce06ec9c2323 100644
1496     --- a/arch/x86/kernel/kprobes/core.c
1497     +++ b/arch/x86/kernel/kprobes/core.c
1498     @@ -1149,10 +1149,18 @@ NOKPROBE_SYMBOL(longjmp_break_handler);
1499    
1500     bool arch_within_kprobe_blacklist(unsigned long addr)
1501     {
1502     + bool is_in_entry_trampoline_section = false;
1503     +
1504     +#ifdef CONFIG_X86_64
1505     + is_in_entry_trampoline_section =
1506     + (addr >= (unsigned long)__entry_trampoline_start &&
1507     + addr < (unsigned long)__entry_trampoline_end);
1508     +#endif
1509     return (addr >= (unsigned long)__kprobes_text_start &&
1510     addr < (unsigned long)__kprobes_text_end) ||
1511     (addr >= (unsigned long)__entry_text_start &&
1512     - addr < (unsigned long)__entry_text_end);
1513     + addr < (unsigned long)__entry_text_end) ||
1514     + is_in_entry_trampoline_section;
1515     }
1516    
1517     int __init arch_init_kprobes(void)
1518     diff --git a/arch/x86/kernel/vmlinux.lds.S b/arch/x86/kernel/vmlinux.lds.S
1519     index 9b138a06c1a4..b854ebf5851b 100644
1520     --- a/arch/x86/kernel/vmlinux.lds.S
1521     +++ b/arch/x86/kernel/vmlinux.lds.S
1522     @@ -118,9 +118,11 @@ SECTIONS
1523    
1524     #ifdef CONFIG_X86_64
1525     . = ALIGN(PAGE_SIZE);
1526     + VMLINUX_SYMBOL(__entry_trampoline_start) = .;
1527     _entry_trampoline = .;
1528     *(.entry_trampoline)
1529     . = ALIGN(PAGE_SIZE);
1530     + VMLINUX_SYMBOL(__entry_trampoline_end) = .;
1531     ASSERT(. - _entry_trampoline == PAGE_SIZE, "entry trampoline is too big");
1532     #endif
1533    
1534     diff --git a/arch/x86/lib/Makefile b/arch/x86/lib/Makefile
1535     index d0a3170e6804..d435c89875c1 100644
1536     --- a/arch/x86/lib/Makefile
1537     +++ b/arch/x86/lib/Makefile
1538     @@ -27,7 +27,6 @@ lib-$(CONFIG_RWSEM_XCHGADD_ALGORITHM) += rwsem.o
1539     lib-$(CONFIG_INSTRUCTION_DECODER) += insn.o inat.o
1540     lib-$(CONFIG_RANDOMIZE_BASE) += kaslr.o
1541     lib-$(CONFIG_RETPOLINE) += retpoline.o
1542     -OBJECT_FILES_NON_STANDARD_retpoline.o :=y
1543    
1544     obj-y += msr.o msr-reg.o msr-reg-export.o hweight.o
1545    
1546     diff --git a/arch/x86/lib/retpoline.S b/arch/x86/lib/retpoline.S
1547     index 480edc3a5e03..c909961e678a 100644
1548     --- a/arch/x86/lib/retpoline.S
1549     +++ b/arch/x86/lib/retpoline.S
1550     @@ -7,7 +7,6 @@
1551     #include <asm/alternative-asm.h>
1552     #include <asm/export.h>
1553     #include <asm/nospec-branch.h>
1554     -#include <asm/bitsperlong.h>
1555    
1556     .macro THUNK reg
1557     .section .text.__x86.indirect_thunk
1558     @@ -47,58 +46,3 @@ GENERATE_THUNK(r13)
1559     GENERATE_THUNK(r14)
1560     GENERATE_THUNK(r15)
1561     #endif
1562     -
1563     -/*
1564     - * Fill the CPU return stack buffer.
1565     - *
1566     - * Each entry in the RSB, if used for a speculative 'ret', contains an
1567     - * infinite 'pause; lfence; jmp' loop to capture speculative execution.
1568     - *
1569     - * This is required in various cases for retpoline and IBRS-based
1570     - * mitigations for the Spectre variant 2 vulnerability. Sometimes to
1571     - * eliminate potentially bogus entries from the RSB, and sometimes
1572     - * purely to ensure that it doesn't get empty, which on some CPUs would
1573     - * allow predictions from other (unwanted!) sources to be used.
1574     - *
1575     - * Google experimented with loop-unrolling and this turned out to be
1576     - * the optimal version - two calls, each with their own speculation
1577     - * trap should their return address end up getting used, in a loop.
1578     - */
1579     -.macro STUFF_RSB nr:req sp:req
1580     - mov $(\nr / 2), %_ASM_BX
1581     - .align 16
1582     -771:
1583     - call 772f
1584     -773: /* speculation trap */
1585     - pause
1586     - lfence
1587     - jmp 773b
1588     - .align 16
1589     -772:
1590     - call 774f
1591     -775: /* speculation trap */
1592     - pause
1593     - lfence
1594     - jmp 775b
1595     - .align 16
1596     -774:
1597     - dec %_ASM_BX
1598     - jnz 771b
1599     - add $((BITS_PER_LONG/8) * \nr), \sp
1600     -.endm
1601     -
1602     -#define RSB_FILL_LOOPS 16 /* To avoid underflow */
1603     -
1604     -ENTRY(__fill_rsb)
1605     - STUFF_RSB RSB_FILL_LOOPS, %_ASM_SP
1606     - ret
1607     -END(__fill_rsb)
1608     -EXPORT_SYMBOL_GPL(__fill_rsb)
1609     -
1610     -#define RSB_CLEAR_LOOPS 32 /* To forcibly overwrite all entries */
1611     -
1612     -ENTRY(__clear_rsb)
1613     - STUFF_RSB RSB_CLEAR_LOOPS, %_ASM_SP
1614     - ret
1615     -END(__clear_rsb)
1616     -EXPORT_SYMBOL_GPL(__clear_rsb)
1617     diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c
1618     index 9150fe2c9b26..4c155ee0f89e 100644
1619     --- a/arch/x86/mm/fault.c
1620     +++ b/arch/x86/mm/fault.c
1621     @@ -1252,10 +1252,6 @@ __do_page_fault(struct pt_regs *regs, unsigned long error_code,
1622     tsk = current;
1623     mm = tsk->mm;
1624    
1625     - /*
1626     - * Detect and handle instructions that would cause a page fault for
1627     - * both a tracked kernel page and a userspace page.
1628     - */
1629     prefetchw(&mm->mmap_sem);
1630    
1631     if (unlikely(kmmio_fault(regs, address)))
1632     diff --git a/arch/x86/mm/mem_encrypt_boot.S b/arch/x86/mm/mem_encrypt_boot.S
1633     index 01f682cf77a8..40a6085063d6 100644
1634     --- a/arch/x86/mm/mem_encrypt_boot.S
1635     +++ b/arch/x86/mm/mem_encrypt_boot.S
1636     @@ -15,6 +15,7 @@
1637     #include <asm/page.h>
1638     #include <asm/processor-flags.h>
1639     #include <asm/msr-index.h>
1640     +#include <asm/nospec-branch.h>
1641    
1642     .text
1643     .code64
1644     @@ -59,6 +60,7 @@ ENTRY(sme_encrypt_execute)
1645     movq %rax, %r8 /* Workarea encryption routine */
1646     addq $PAGE_SIZE, %r8 /* Workarea intermediate copy buffer */
1647    
1648     + ANNOTATE_RETPOLINE_SAFE
1649     call *%rax /* Call the encryption routine */
1650    
1651     pop %r12
1652     diff --git a/arch/x86/realmode/rm/trampoline_64.S b/arch/x86/realmode/rm/trampoline_64.S
1653     index de53bd15df5a..24bb7598774e 100644
1654     --- a/arch/x86/realmode/rm/trampoline_64.S
1655     +++ b/arch/x86/realmode/rm/trampoline_64.S
1656     @@ -102,7 +102,7 @@ ENTRY(startup_32)
1657     * don't we'll eventually crash trying to execute encrypted
1658     * instructions.
1659     */
1660     - bt $TH_FLAGS_SME_ACTIVE_BIT, pa_tr_flags
1661     + btl $TH_FLAGS_SME_ACTIVE_BIT, pa_tr_flags
1662     jnc .Ldone
1663     movl $MSR_K8_SYSCFG, %ecx
1664     rdmsr
1665     diff --git a/drivers/block/loop.c b/drivers/block/loop.c
1666     index a2a0dce5114e..19858a146f30 100644
1667     --- a/drivers/block/loop.c
1668     +++ b/drivers/block/loop.c
1669     @@ -266,7 +266,7 @@ static int lo_write_bvec(struct file *file, struct bio_vec *bvec, loff_t *ppos)
1670     struct iov_iter i;
1671     ssize_t bw;
1672    
1673     - iov_iter_bvec(&i, ITER_BVEC, bvec, 1, bvec->bv_len);
1674     + iov_iter_bvec(&i, ITER_BVEC | WRITE, bvec, 1, bvec->bv_len);
1675    
1676     file_start_write(file);
1677     bw = vfs_iter_write(file, &i, ppos, 0);
1678     diff --git a/drivers/char/tpm/tpm-interface.c b/drivers/char/tpm/tpm-interface.c
1679     index 3cec403a80b3..5294442505cb 100644
1680     --- a/drivers/char/tpm/tpm-interface.c
1681     +++ b/drivers/char/tpm/tpm-interface.c
1682     @@ -413,6 +413,9 @@ ssize_t tpm_transmit(struct tpm_chip *chip, struct tpm_space *space,
1683     if (chip->dev.parent)
1684     pm_runtime_get_sync(chip->dev.parent);
1685    
1686     + if (chip->ops->clk_enable != NULL)
1687     + chip->ops->clk_enable(chip, true);
1688     +
1689     /* Store the decision as chip->locality will be changed. */
1690     need_locality = chip->locality == -1;
1691    
1692     @@ -489,6 +492,9 @@ ssize_t tpm_transmit(struct tpm_chip *chip, struct tpm_space *space,
1693     chip->locality = -1;
1694     }
1695     out_no_locality:
1696     + if (chip->ops->clk_enable != NULL)
1697     + chip->ops->clk_enable(chip, false);
1698     +
1699     if (chip->dev.parent)
1700     pm_runtime_put_sync(chip->dev.parent);
1701    
1702     diff --git a/drivers/char/tpm/tpm_tis.c b/drivers/char/tpm/tpm_tis.c
1703     index ebd0e75a3e4d..50b59a69dc33 100644
1704     --- a/drivers/char/tpm/tpm_tis.c
1705     +++ b/drivers/char/tpm/tpm_tis.c
1706     @@ -132,93 +132,14 @@ static int check_acpi_tpm2(struct device *dev)
1707     }
1708     #endif
1709    
1710     -#ifdef CONFIG_X86
1711     -#define INTEL_LEGACY_BLK_BASE_ADDR 0xFED08000
1712     -#define ILB_REMAP_SIZE 0x100
1713     -#define LPC_CNTRL_REG_OFFSET 0x84
1714     -#define LPC_CLKRUN_EN (1 << 2)
1715     -
1716     -static void __iomem *ilb_base_addr;
1717     -
1718     -static inline bool is_bsw(void)
1719     -{
1720     - return ((boot_cpu_data.x86_model == INTEL_FAM6_ATOM_AIRMONT) ? 1 : 0);
1721     -}
1722     -
1723     -/**
1724     - * tpm_platform_begin_xfer() - clear LPC CLKRUN_EN i.e. clocks will be running
1725     - */
1726     -static void tpm_platform_begin_xfer(void)
1727     -{
1728     - u32 clkrun_val;
1729     -
1730     - if (!is_bsw())
1731     - return;
1732     -
1733     - clkrun_val = ioread32(ilb_base_addr + LPC_CNTRL_REG_OFFSET);
1734     -
1735     - /* Disable LPC CLKRUN# */
1736     - clkrun_val &= ~LPC_CLKRUN_EN;
1737     - iowrite32(clkrun_val, ilb_base_addr + LPC_CNTRL_REG_OFFSET);
1738     -
1739     - /*
1740     - * Write any random value on port 0x80 which is on LPC, to make
1741     - * sure LPC clock is running before sending any TPM command.
1742     - */
1743     - outb(0xCC, 0x80);
1744     -
1745     -}
1746     -
1747     -/**
1748     - * tpm_platform_end_xfer() - set LPC CLKRUN_EN i.e. clocks can be turned off
1749     - */
1750     -static void tpm_platform_end_xfer(void)
1751     -{
1752     - u32 clkrun_val;
1753     -
1754     - if (!is_bsw())
1755     - return;
1756     -
1757     - clkrun_val = ioread32(ilb_base_addr + LPC_CNTRL_REG_OFFSET);
1758     -
1759     - /* Enable LPC CLKRUN# */
1760     - clkrun_val |= LPC_CLKRUN_EN;
1761     - iowrite32(clkrun_val, ilb_base_addr + LPC_CNTRL_REG_OFFSET);
1762     -
1763     - /*
1764     - * Write any random value on port 0x80 which is on LPC, to make
1765     - * sure LPC clock is running before sending any TPM command.
1766     - */
1767     - outb(0xCC, 0x80);
1768     -
1769     -}
1770     -#else
1771     -static inline bool is_bsw(void)
1772     -{
1773     - return false;
1774     -}
1775     -
1776     -static void tpm_platform_begin_xfer(void)
1777     -{
1778     -}
1779     -
1780     -static void tpm_platform_end_xfer(void)
1781     -{
1782     -}
1783     -#endif
1784     -
1785     static int tpm_tcg_read_bytes(struct tpm_tis_data *data, u32 addr, u16 len,
1786     u8 *result)
1787     {
1788     struct tpm_tis_tcg_phy *phy = to_tpm_tis_tcg_phy(data);
1789    
1790     - tpm_platform_begin_xfer();
1791     -
1792     while (len--)
1793     *result++ = ioread8(phy->iobase + addr);
1794    
1795     - tpm_platform_end_xfer();
1796     -
1797     return 0;
1798     }
1799    
1800     @@ -227,13 +148,9 @@ static int tpm_tcg_write_bytes(struct tpm_tis_data *data, u32 addr, u16 len,
1801     {
1802     struct tpm_tis_tcg_phy *phy = to_tpm_tis_tcg_phy(data);
1803    
1804     - tpm_platform_begin_xfer();
1805     -
1806     while (len--)
1807     iowrite8(*value++, phy->iobase + addr);
1808    
1809     - tpm_platform_end_xfer();
1810     -
1811     return 0;
1812     }
1813    
1814     @@ -241,12 +158,8 @@ static int tpm_tcg_read16(struct tpm_tis_data *data, u32 addr, u16 *result)
1815     {
1816     struct tpm_tis_tcg_phy *phy = to_tpm_tis_tcg_phy(data);
1817    
1818     - tpm_platform_begin_xfer();
1819     -
1820     *result = ioread16(phy->iobase + addr);
1821    
1822     - tpm_platform_end_xfer();
1823     -
1824     return 0;
1825     }
1826    
1827     @@ -254,12 +167,8 @@ static int tpm_tcg_read32(struct tpm_tis_data *data, u32 addr, u32 *result)
1828     {
1829     struct tpm_tis_tcg_phy *phy = to_tpm_tis_tcg_phy(data);
1830    
1831     - tpm_platform_begin_xfer();
1832     -
1833     *result = ioread32(phy->iobase + addr);
1834    
1835     - tpm_platform_end_xfer();
1836     -
1837     return 0;
1838     }
1839    
1840     @@ -267,12 +176,8 @@ static int tpm_tcg_write32(struct tpm_tis_data *data, u32 addr, u32 value)
1841     {
1842     struct tpm_tis_tcg_phy *phy = to_tpm_tis_tcg_phy(data);
1843    
1844     - tpm_platform_begin_xfer();
1845     -
1846     iowrite32(value, phy->iobase + addr);
1847    
1848     - tpm_platform_end_xfer();
1849     -
1850     return 0;
1851     }
1852    
1853     @@ -460,11 +365,6 @@ static int __init init_tis(void)
1854     if (rc)
1855     goto err_force;
1856    
1857     -#ifdef CONFIG_X86
1858     - if (is_bsw())
1859     - ilb_base_addr = ioremap(INTEL_LEGACY_BLK_BASE_ADDR,
1860     - ILB_REMAP_SIZE);
1861     -#endif
1862     rc = platform_driver_register(&tis_drv);
1863     if (rc)
1864     goto err_platform;
1865     @@ -483,10 +383,6 @@ static int __init init_tis(void)
1866     err_platform:
1867     if (force_pdev)
1868     platform_device_unregister(force_pdev);
1869     -#ifdef CONFIG_X86
1870     - if (is_bsw())
1871     - iounmap(ilb_base_addr);
1872     -#endif
1873     err_force:
1874     return rc;
1875     }
1876     @@ -496,10 +392,6 @@ static void __exit cleanup_tis(void)
1877     pnp_unregister_driver(&tis_pnp_driver);
1878     platform_driver_unregister(&tis_drv);
1879    
1880     -#ifdef CONFIG_X86
1881     - if (is_bsw())
1882     - iounmap(ilb_base_addr);
1883     -#endif
1884     if (force_pdev)
1885     platform_device_unregister(force_pdev);
1886     }
1887     diff --git a/drivers/char/tpm/tpm_tis_core.c b/drivers/char/tpm/tpm_tis_core.c
1888     index 083578b2517e..a21e31c2b952 100644
1889     --- a/drivers/char/tpm/tpm_tis_core.c
1890     +++ b/drivers/char/tpm/tpm_tis_core.c
1891     @@ -31,6 +31,8 @@
1892     #include "tpm.h"
1893     #include "tpm_tis_core.h"
1894    
1895     +static void tpm_tis_clkrun_enable(struct tpm_chip *chip, bool value);
1896     +
1897     /* Before we attempt to access the TPM we must see that the valid bit is set.
1898     * The specification says that this bit is 0 at reset and remains 0 until the
1899     * 'TPM has gone through its self test and initialization and has established
1900     @@ -422,19 +424,28 @@ static bool tpm_tis_update_timeouts(struct tpm_chip *chip,
1901     int i, rc;
1902     u32 did_vid;
1903    
1904     + if (chip->ops->clk_enable != NULL)
1905     + chip->ops->clk_enable(chip, true);
1906     +
1907     rc = tpm_tis_read32(priv, TPM_DID_VID(0), &did_vid);
1908     if (rc < 0)
1909     - return rc;
1910     + goto out;
1911    
1912     for (i = 0; i != ARRAY_SIZE(vendor_timeout_overrides); i++) {
1913     if (vendor_timeout_overrides[i].did_vid != did_vid)
1914     continue;
1915     memcpy(timeout_cap, vendor_timeout_overrides[i].timeout_us,
1916     sizeof(vendor_timeout_overrides[i].timeout_us));
1917     - return true;
1918     + rc = true;
1919     }
1920    
1921     - return false;
1922     + rc = false;
1923     +
1924     +out:
1925     + if (chip->ops->clk_enable != NULL)
1926     + chip->ops->clk_enable(chip, false);
1927     +
1928     + return rc;
1929     }
1930    
1931     /*
1932     @@ -654,14 +665,73 @@ void tpm_tis_remove(struct tpm_chip *chip)
1933     u32 interrupt;
1934     int rc;
1935    
1936     + tpm_tis_clkrun_enable(chip, true);
1937     +
1938     rc = tpm_tis_read32(priv, reg, &interrupt);
1939     if (rc < 0)
1940     interrupt = 0;
1941    
1942     tpm_tis_write32(priv, reg, ~TPM_GLOBAL_INT_ENABLE & interrupt);
1943     +
1944     + tpm_tis_clkrun_enable(chip, false);
1945     +
1946     + if (priv->ilb_base_addr)
1947     + iounmap(priv->ilb_base_addr);
1948     }
1949     EXPORT_SYMBOL_GPL(tpm_tis_remove);
1950    
1951     +/**
1952     + * tpm_tis_clkrun_enable() - Keep clkrun protocol disabled for entire duration
1953     + * of a single TPM command
1954     + * @chip: TPM chip to use
1955     + * @value: 1 - Disable CLKRUN protocol, so that clocks are free running
1956     + * 0 - Enable CLKRUN protocol
1957     + * Call this function directly in tpm_tis_remove() in error or driver removal
1958     + * path, since the chip->ops is set to NULL in tpm_chip_unregister().
1959     + */
1960     +static void tpm_tis_clkrun_enable(struct tpm_chip *chip, bool value)
1961     +{
1962     + struct tpm_tis_data *data = dev_get_drvdata(&chip->dev);
1963     + u32 clkrun_val;
1964     +
1965     + if (!IS_ENABLED(CONFIG_X86) || !is_bsw() ||
1966     + !data->ilb_base_addr)
1967     + return;
1968     +
1969     + if (value) {
1970     + data->clkrun_enabled++;
1971     + if (data->clkrun_enabled > 1)
1972     + return;
1973     + clkrun_val = ioread32(data->ilb_base_addr + LPC_CNTRL_OFFSET);
1974     +
1975     + /* Disable LPC CLKRUN# */
1976     + clkrun_val &= ~LPC_CLKRUN_EN;
1977     + iowrite32(clkrun_val, data->ilb_base_addr + LPC_CNTRL_OFFSET);
1978     +
1979     + /*
1980     + * Write any random value on port 0x80 which is on LPC, to make
1981     + * sure LPC clock is running before sending any TPM command.
1982     + */
1983     + outb(0xCC, 0x80);
1984     + } else {
1985     + data->clkrun_enabled--;
1986     + if (data->clkrun_enabled)
1987     + return;
1988     +
1989     + clkrun_val = ioread32(data->ilb_base_addr + LPC_CNTRL_OFFSET);
1990     +
1991     + /* Enable LPC CLKRUN# */
1992     + clkrun_val |= LPC_CLKRUN_EN;
1993     + iowrite32(clkrun_val, data->ilb_base_addr + LPC_CNTRL_OFFSET);
1994     +
1995     + /*
1996     + * Write any random value on port 0x80 which is on LPC, to make
1997     + * sure LPC clock is running before sending any TPM command.
1998     + */
1999     + outb(0xCC, 0x80);
2000     + }
2001     +}
2002     +
2003     static const struct tpm_class_ops tpm_tis = {
2004     .flags = TPM_OPS_AUTO_STARTUP,
2005     .status = tpm_tis_status,
2006     @@ -674,6 +744,7 @@ static const struct tpm_class_ops tpm_tis = {
2007     .req_canceled = tpm_tis_req_canceled,
2008     .request_locality = request_locality,
2009     .relinquish_locality = release_locality,
2010     + .clk_enable = tpm_tis_clkrun_enable,
2011     };
2012    
2013     int tpm_tis_core_init(struct device *dev, struct tpm_tis_data *priv, int irq,
2014     @@ -681,6 +752,7 @@ int tpm_tis_core_init(struct device *dev, struct tpm_tis_data *priv, int irq,
2015     acpi_handle acpi_dev_handle)
2016     {
2017     u32 vendor, intfcaps, intmask;
2018     + u32 clkrun_val;
2019     u8 rid;
2020     int rc, probe;
2021     struct tpm_chip *chip;
2022     @@ -701,6 +773,23 @@ int tpm_tis_core_init(struct device *dev, struct tpm_tis_data *priv, int irq,
2023     priv->phy_ops = phy_ops;
2024     dev_set_drvdata(&chip->dev, priv);
2025    
2026     + if (is_bsw()) {
2027     + priv->ilb_base_addr = ioremap(INTEL_LEGACY_BLK_BASE_ADDR,
2028     + ILB_REMAP_SIZE);
2029     + if (!priv->ilb_base_addr)
2030     + return -ENOMEM;
2031     +
2032     + clkrun_val = ioread32(priv->ilb_base_addr + LPC_CNTRL_OFFSET);
2033     + /* Check if CLKRUN# is already not enabled in the LPC bus */
2034     + if (!(clkrun_val & LPC_CLKRUN_EN)) {
2035     + iounmap(priv->ilb_base_addr);
2036     + priv->ilb_base_addr = NULL;
2037     + }
2038     + }
2039     +
2040     + if (chip->ops->clk_enable != NULL)
2041     + chip->ops->clk_enable(chip, true);
2042     +
2043     if (wait_startup(chip, 0) != 0) {
2044     rc = -ENODEV;
2045     goto out_err;
2046     @@ -791,9 +880,20 @@ int tpm_tis_core_init(struct device *dev, struct tpm_tis_data *priv, int irq,
2047     }
2048     }
2049    
2050     - return tpm_chip_register(chip);
2051     + rc = tpm_chip_register(chip);
2052     + if (rc)
2053     + goto out_err;
2054     +
2055     + if (chip->ops->clk_enable != NULL)
2056     + chip->ops->clk_enable(chip, false);
2057     +
2058     + return 0;
2059     out_err:
2060     + if ((chip->ops != NULL) && (chip->ops->clk_enable != NULL))
2061     + chip->ops->clk_enable(chip, false);
2062     +
2063     tpm_tis_remove(chip);
2064     +
2065     return rc;
2066     }
2067     EXPORT_SYMBOL_GPL(tpm_tis_core_init);
2068     @@ -805,22 +905,31 @@ static void tpm_tis_reenable_interrupts(struct tpm_chip *chip)
2069     u32 intmask;
2070     int rc;
2071    
2072     + if (chip->ops->clk_enable != NULL)
2073     + chip->ops->clk_enable(chip, true);
2074     +
2075     /* reenable interrupts that device may have lost or
2076     * BIOS/firmware may have disabled
2077     */
2078     rc = tpm_tis_write8(priv, TPM_INT_VECTOR(priv->locality), priv->irq);
2079     if (rc < 0)
2080     - return;
2081     + goto out;
2082    
2083     rc = tpm_tis_read32(priv, TPM_INT_ENABLE(priv->locality), &intmask);
2084     if (rc < 0)
2085     - return;
2086     + goto out;
2087    
2088     intmask |= TPM_INTF_CMD_READY_INT
2089     | TPM_INTF_LOCALITY_CHANGE_INT | TPM_INTF_DATA_AVAIL_INT
2090     | TPM_INTF_STS_VALID_INT | TPM_GLOBAL_INT_ENABLE;
2091    
2092     tpm_tis_write32(priv, TPM_INT_ENABLE(priv->locality), intmask);
2093     +
2094     +out:
2095     + if (chip->ops->clk_enable != NULL)
2096     + chip->ops->clk_enable(chip, false);
2097     +
2098     + return;
2099     }
2100    
2101     int tpm_tis_resume(struct device *dev)
2102     diff --git a/drivers/char/tpm/tpm_tis_core.h b/drivers/char/tpm/tpm_tis_core.h
2103     index 6bbac319ff3b..d5c6a2e952b3 100644
2104     --- a/drivers/char/tpm/tpm_tis_core.h
2105     +++ b/drivers/char/tpm/tpm_tis_core.h
2106     @@ -79,6 +79,11 @@ enum tis_defaults {
2107     #define TPM_DID_VID(l) (0x0F00 | ((l) << 12))
2108     #define TPM_RID(l) (0x0F04 | ((l) << 12))
2109    
2110     +#define LPC_CNTRL_OFFSET 0x84
2111     +#define LPC_CLKRUN_EN (1 << 2)
2112     +#define INTEL_LEGACY_BLK_BASE_ADDR 0xFED08000
2113     +#define ILB_REMAP_SIZE 0x100
2114     +
2115     enum tpm_tis_flags {
2116     TPM_TIS_ITPM_WORKAROUND = BIT(0),
2117     };
2118     @@ -89,6 +94,8 @@ struct tpm_tis_data {
2119     int irq;
2120     bool irq_tested;
2121     unsigned int flags;
2122     + void __iomem *ilb_base_addr;
2123     + u16 clkrun_enabled;
2124     wait_queue_head_t int_queue;
2125     wait_queue_head_t read_queue;
2126     const struct tpm_tis_phy_ops *phy_ops;
2127     @@ -144,6 +151,15 @@ static inline int tpm_tis_write32(struct tpm_tis_data *data, u32 addr,
2128     return data->phy_ops->write32(data, addr, value);
2129     }
2130    
2131     +static inline bool is_bsw(void)
2132     +{
2133     +#ifdef CONFIG_X86
2134     + return ((boot_cpu_data.x86_model == INTEL_FAM6_ATOM_AIRMONT) ? 1 : 0);
2135     +#else
2136     + return false;
2137     +#endif
2138     +}
2139     +
2140     void tpm_tis_remove(struct tpm_chip *chip);
2141     int tpm_tis_core_init(struct device *dev, struct tpm_tis_data *priv, int irq,
2142     const struct tpm_tis_phy_ops *phy_ops,
2143     diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c
2144     index 57afad79f55d..8fa850a070e0 100644
2145     --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c
2146     +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c
2147     @@ -540,6 +540,9 @@ int amdgpu_acpi_pcie_performance_request(struct amdgpu_device *adev,
2148     size_t size;
2149     u32 retry = 3;
2150    
2151     + if (amdgpu_acpi_pcie_notify_device_ready(adev))
2152     + return -EINVAL;
2153     +
2154     /* Get the device handle */
2155     handle = ACPI_HANDLE(&adev->pdev->dev);
2156     if (!handle)
2157     diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
2158     index 8d1cf2d3e663..848242821ef3 100644
2159     --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
2160     +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
2161     @@ -739,9 +739,11 @@ amdgpu_connector_lvds_detect(struct drm_connector *connector, bool force)
2162     enum drm_connector_status ret = connector_status_disconnected;
2163     int r;
2164    
2165     - r = pm_runtime_get_sync(connector->dev->dev);
2166     - if (r < 0)
2167     - return connector_status_disconnected;
2168     + if (!drm_kms_helper_is_poll_worker()) {
2169     + r = pm_runtime_get_sync(connector->dev->dev);
2170     + if (r < 0)
2171     + return connector_status_disconnected;
2172     + }
2173    
2174     if (encoder) {
2175     struct amdgpu_encoder *amdgpu_encoder = to_amdgpu_encoder(encoder);
2176     @@ -760,8 +762,12 @@ amdgpu_connector_lvds_detect(struct drm_connector *connector, bool force)
2177     /* check acpi lid status ??? */
2178    
2179     amdgpu_connector_update_scratch_regs(connector, ret);
2180     - pm_runtime_mark_last_busy(connector->dev->dev);
2181     - pm_runtime_put_autosuspend(connector->dev->dev);
2182     +
2183     + if (!drm_kms_helper_is_poll_worker()) {
2184     + pm_runtime_mark_last_busy(connector->dev->dev);
2185     + pm_runtime_put_autosuspend(connector->dev->dev);
2186     + }
2187     +
2188     return ret;
2189     }
2190    
2191     @@ -871,9 +877,11 @@ amdgpu_connector_vga_detect(struct drm_connector *connector, bool force)
2192     enum drm_connector_status ret = connector_status_disconnected;
2193     int r;
2194    
2195     - r = pm_runtime_get_sync(connector->dev->dev);
2196     - if (r < 0)
2197     - return connector_status_disconnected;
2198     + if (!drm_kms_helper_is_poll_worker()) {
2199     + r = pm_runtime_get_sync(connector->dev->dev);
2200     + if (r < 0)
2201     + return connector_status_disconnected;
2202     + }
2203    
2204     encoder = amdgpu_connector_best_single_encoder(connector);
2205     if (!encoder)
2206     @@ -927,8 +935,10 @@ amdgpu_connector_vga_detect(struct drm_connector *connector, bool force)
2207     amdgpu_connector_update_scratch_regs(connector, ret);
2208    
2209     out:
2210     - pm_runtime_mark_last_busy(connector->dev->dev);
2211     - pm_runtime_put_autosuspend(connector->dev->dev);
2212     + if (!drm_kms_helper_is_poll_worker()) {
2213     + pm_runtime_mark_last_busy(connector->dev->dev);
2214     + pm_runtime_put_autosuspend(connector->dev->dev);
2215     + }
2216    
2217     return ret;
2218     }
2219     @@ -991,9 +1001,11 @@ amdgpu_connector_dvi_detect(struct drm_connector *connector, bool force)
2220     enum drm_connector_status ret = connector_status_disconnected;
2221     bool dret = false, broken_edid = false;
2222    
2223     - r = pm_runtime_get_sync(connector->dev->dev);
2224     - if (r < 0)
2225     - return connector_status_disconnected;
2226     + if (!drm_kms_helper_is_poll_worker()) {
2227     + r = pm_runtime_get_sync(connector->dev->dev);
2228     + if (r < 0)
2229     + return connector_status_disconnected;
2230     + }
2231    
2232     if (!force && amdgpu_connector_check_hpd_status_unchanged(connector)) {
2233     ret = connector->status;
2234     @@ -1118,8 +1130,10 @@ amdgpu_connector_dvi_detect(struct drm_connector *connector, bool force)
2235     amdgpu_connector_update_scratch_regs(connector, ret);
2236    
2237     exit:
2238     - pm_runtime_mark_last_busy(connector->dev->dev);
2239     - pm_runtime_put_autosuspend(connector->dev->dev);
2240     + if (!drm_kms_helper_is_poll_worker()) {
2241     + pm_runtime_mark_last_busy(connector->dev->dev);
2242     + pm_runtime_put_autosuspend(connector->dev->dev);
2243     + }
2244    
2245     return ret;
2246     }
2247     @@ -1362,9 +1376,11 @@ amdgpu_connector_dp_detect(struct drm_connector *connector, bool force)
2248     struct drm_encoder *encoder = amdgpu_connector_best_single_encoder(connector);
2249     int r;
2250    
2251     - r = pm_runtime_get_sync(connector->dev->dev);
2252     - if (r < 0)
2253     - return connector_status_disconnected;
2254     + if (!drm_kms_helper_is_poll_worker()) {
2255     + r = pm_runtime_get_sync(connector->dev->dev);
2256     + if (r < 0)
2257     + return connector_status_disconnected;
2258     + }
2259    
2260     if (!force && amdgpu_connector_check_hpd_status_unchanged(connector)) {
2261     ret = connector->status;
2262     @@ -1432,8 +1448,10 @@ amdgpu_connector_dp_detect(struct drm_connector *connector, bool force)
2263    
2264     amdgpu_connector_update_scratch_regs(connector, ret);
2265     out:
2266     - pm_runtime_mark_last_busy(connector->dev->dev);
2267     - pm_runtime_put_autosuspend(connector->dev->dev);
2268     + if (!drm_kms_helper_is_poll_worker()) {
2269     + pm_runtime_mark_last_busy(connector->dev->dev);
2270     + pm_runtime_put_autosuspend(connector->dev->dev);
2271     + }
2272    
2273     return ret;
2274     }
2275     diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
2276     index e19928dae8e3..17deca0f6255 100644
2277     --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
2278     +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
2279     @@ -293,12 +293,15 @@ int amdgpu_uvd_suspend(struct amdgpu_device *adev)
2280     if (adev->uvd.vcpu_bo == NULL)
2281     return 0;
2282    
2283     - for (i = 0; i < adev->uvd.max_handles; ++i)
2284     - if (atomic_read(&adev->uvd.handles[i]))
2285     - break;
2286     + /* only valid for physical mode */
2287     + if (adev->asic_type < CHIP_POLARIS10) {
2288     + for (i = 0; i < adev->uvd.max_handles; ++i)
2289     + if (atomic_read(&adev->uvd.handles[i]))
2290     + break;
2291    
2292     - if (i == AMDGPU_MAX_UVD_HANDLES)
2293     - return 0;
2294     + if (i == adev->uvd.max_handles)
2295     + return 0;
2296     + }
2297    
2298     cancel_delayed_work_sync(&adev->uvd.idle_work);
2299    
2300     diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
2301     index 00868764a0dd..6f76b2646465 100644
2302     --- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
2303     +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
2304     @@ -4387,34 +4387,8 @@ static void gfx_v7_0_gpu_early_init(struct amdgpu_device *adev)
2305     case CHIP_KAVERI:
2306     adev->gfx.config.max_shader_engines = 1;
2307     adev->gfx.config.max_tile_pipes = 4;
2308     - if ((adev->pdev->device == 0x1304) ||
2309     - (adev->pdev->device == 0x1305) ||
2310     - (adev->pdev->device == 0x130C) ||
2311     - (adev->pdev->device == 0x130F) ||
2312     - (adev->pdev->device == 0x1310) ||
2313     - (adev->pdev->device == 0x1311) ||
2314     - (adev->pdev->device == 0x131C)) {
2315     - adev->gfx.config.max_cu_per_sh = 8;
2316     - adev->gfx.config.max_backends_per_se = 2;
2317     - } else if ((adev->pdev->device == 0x1309) ||
2318     - (adev->pdev->device == 0x130A) ||
2319     - (adev->pdev->device == 0x130D) ||
2320     - (adev->pdev->device == 0x1313) ||
2321     - (adev->pdev->device == 0x131D)) {
2322     - adev->gfx.config.max_cu_per_sh = 6;
2323     - adev->gfx.config.max_backends_per_se = 2;
2324     - } else if ((adev->pdev->device == 0x1306) ||
2325     - (adev->pdev->device == 0x1307) ||
2326     - (adev->pdev->device == 0x130B) ||
2327     - (adev->pdev->device == 0x130E) ||
2328     - (adev->pdev->device == 0x1315) ||
2329     - (adev->pdev->device == 0x131B)) {
2330     - adev->gfx.config.max_cu_per_sh = 4;
2331     - adev->gfx.config.max_backends_per_se = 1;
2332     - } else {
2333     - adev->gfx.config.max_cu_per_sh = 3;
2334     - adev->gfx.config.max_backends_per_se = 1;
2335     - }
2336     + adev->gfx.config.max_cu_per_sh = 8;
2337     + adev->gfx.config.max_backends_per_se = 2;
2338     adev->gfx.config.max_sh_per_se = 1;
2339     adev->gfx.config.max_texture_channel_caches = 4;
2340     adev->gfx.config.max_gprs = 256;
2341     diff --git a/drivers/gpu/drm/amd/amdgpu/si.c b/drivers/gpu/drm/amd/amdgpu/si.c
2342     index 8284d5dbfc30..4c178feeb4bd 100644
2343     --- a/drivers/gpu/drm/amd/amdgpu/si.c
2344     +++ b/drivers/gpu/drm/amd/amdgpu/si.c
2345     @@ -31,6 +31,7 @@
2346     #include "amdgpu_uvd.h"
2347     #include "amdgpu_vce.h"
2348     #include "atom.h"
2349     +#include "amd_pcie.h"
2350     #include "amdgpu_powerplay.h"
2351     #include "sid.h"
2352     #include "si_ih.h"
2353     @@ -1461,8 +1462,8 @@ static void si_pcie_gen3_enable(struct amdgpu_device *adev)
2354     {
2355     struct pci_dev *root = adev->pdev->bus->self;
2356     int bridge_pos, gpu_pos;
2357     - u32 speed_cntl, mask, current_data_rate;
2358     - int ret, i;
2359     + u32 speed_cntl, current_data_rate;
2360     + int i;
2361     u16 tmp16;
2362    
2363     if (pci_is_root_bus(adev->pdev->bus))
2364     @@ -1474,23 +1475,20 @@ static void si_pcie_gen3_enable(struct amdgpu_device *adev)
2365     if (adev->flags & AMD_IS_APU)
2366     return;
2367    
2368     - ret = drm_pcie_get_speed_cap_mask(adev->ddev, &mask);
2369     - if (ret != 0)
2370     - return;
2371     -
2372     - if (!(mask & (DRM_PCIE_SPEED_50 | DRM_PCIE_SPEED_80)))
2373     + if (!(adev->pm.pcie_gen_mask & (CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2 |
2374     + CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3)))
2375     return;
2376    
2377     speed_cntl = RREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL);
2378     current_data_rate = (speed_cntl & LC_CURRENT_DATA_RATE_MASK) >>
2379     LC_CURRENT_DATA_RATE_SHIFT;
2380     - if (mask & DRM_PCIE_SPEED_80) {
2381     + if (adev->pm.pcie_gen_mask & CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3) {
2382     if (current_data_rate == 2) {
2383     DRM_INFO("PCIE gen 3 link speeds already enabled\n");
2384     return;
2385     }
2386     DRM_INFO("enabling PCIE gen 3 link speeds, disable with amdgpu.pcie_gen2=0\n");
2387     - } else if (mask & DRM_PCIE_SPEED_50) {
2388     + } else if (adev->pm.pcie_gen_mask & CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2) {
2389     if (current_data_rate == 1) {
2390     DRM_INFO("PCIE gen 2 link speeds already enabled\n");
2391     return;
2392     @@ -1506,7 +1504,7 @@ static void si_pcie_gen3_enable(struct amdgpu_device *adev)
2393     if (!gpu_pos)
2394     return;
2395    
2396     - if (mask & DRM_PCIE_SPEED_80) {
2397     + if (adev->pm.pcie_gen_mask & CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3) {
2398     if (current_data_rate != 2) {
2399     u16 bridge_cfg, gpu_cfg;
2400     u16 bridge_cfg2, gpu_cfg2;
2401     @@ -1589,9 +1587,9 @@ static void si_pcie_gen3_enable(struct amdgpu_device *adev)
2402    
2403     pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &tmp16);
2404     tmp16 &= ~0xf;
2405     - if (mask & DRM_PCIE_SPEED_80)
2406     + if (adev->pm.pcie_gen_mask & CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3)
2407     tmp16 |= 3;
2408     - else if (mask & DRM_PCIE_SPEED_50)
2409     + else if (adev->pm.pcie_gen_mask & CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2)
2410     tmp16 |= 2;
2411     else
2412     tmp16 |= 1;
2413     diff --git a/drivers/gpu/drm/amd/amdgpu/si_dpm.c b/drivers/gpu/drm/amd/amdgpu/si_dpm.c
2414     index a2aeb643ac51..abb0a2341a41 100644
2415     --- a/drivers/gpu/drm/amd/amdgpu/si_dpm.c
2416     +++ b/drivers/gpu/drm/amd/amdgpu/si_dpm.c
2417     @@ -26,6 +26,7 @@
2418     #include "amdgpu_pm.h"
2419     #include "amdgpu_dpm.h"
2420     #include "amdgpu_atombios.h"
2421     +#include "amd_pcie.h"
2422     #include "sid.h"
2423     #include "r600_dpm.h"
2424     #include "si_dpm.h"
2425     @@ -3332,29 +3333,6 @@ static void btc_apply_voltage_delta_rules(struct amdgpu_device *adev,
2426     }
2427     }
2428    
2429     -static enum amdgpu_pcie_gen r600_get_pcie_gen_support(struct amdgpu_device *adev,
2430     - u32 sys_mask,
2431     - enum amdgpu_pcie_gen asic_gen,
2432     - enum amdgpu_pcie_gen default_gen)
2433     -{
2434     - switch (asic_gen) {
2435     - case AMDGPU_PCIE_GEN1:
2436     - return AMDGPU_PCIE_GEN1;
2437     - case AMDGPU_PCIE_GEN2:
2438     - return AMDGPU_PCIE_GEN2;
2439     - case AMDGPU_PCIE_GEN3:
2440     - return AMDGPU_PCIE_GEN3;
2441     - default:
2442     - if ((sys_mask & DRM_PCIE_SPEED_80) && (default_gen == AMDGPU_PCIE_GEN3))
2443     - return AMDGPU_PCIE_GEN3;
2444     - else if ((sys_mask & DRM_PCIE_SPEED_50) && (default_gen == AMDGPU_PCIE_GEN2))
2445     - return AMDGPU_PCIE_GEN2;
2446     - else
2447     - return AMDGPU_PCIE_GEN1;
2448     - }
2449     - return AMDGPU_PCIE_GEN1;
2450     -}
2451     -
2452     static void r600_calculate_u_and_p(u32 i, u32 r_c, u32 p_b,
2453     u32 *p, u32 *u)
2454     {
2455     @@ -5028,10 +5006,11 @@ static int si_populate_smc_acpi_state(struct amdgpu_device *adev,
2456     table->ACPIState.levels[0].vddc.index,
2457     &table->ACPIState.levels[0].std_vddc);
2458     }
2459     - table->ACPIState.levels[0].gen2PCIE = (u8)r600_get_pcie_gen_support(adev,
2460     - si_pi->sys_pcie_mask,
2461     - si_pi->boot_pcie_gen,
2462     - AMDGPU_PCIE_GEN1);
2463     + table->ACPIState.levels[0].gen2PCIE =
2464     + (u8)amdgpu_get_pcie_gen_support(adev,
2465     + si_pi->sys_pcie_mask,
2466     + si_pi->boot_pcie_gen,
2467     + AMDGPU_PCIE_GEN1);
2468    
2469     if (si_pi->vddc_phase_shed_control)
2470     si_populate_phase_shedding_value(adev,
2471     @@ -7162,10 +7141,10 @@ static void si_parse_pplib_clock_info(struct amdgpu_device *adev,
2472     pl->vddc = le16_to_cpu(clock_info->si.usVDDC);
2473     pl->vddci = le16_to_cpu(clock_info->si.usVDDCI);
2474     pl->flags = le32_to_cpu(clock_info->si.ulFlags);
2475     - pl->pcie_gen = r600_get_pcie_gen_support(adev,
2476     - si_pi->sys_pcie_mask,
2477     - si_pi->boot_pcie_gen,
2478     - clock_info->si.ucPCIEGen);
2479     + pl->pcie_gen = amdgpu_get_pcie_gen_support(adev,
2480     + si_pi->sys_pcie_mask,
2481     + si_pi->boot_pcie_gen,
2482     + clock_info->si.ucPCIEGen);
2483    
2484     /* patch up vddc if necessary */
2485     ret = si_get_leakage_voltage_from_leakage_index(adev, pl->vddc,
2486     @@ -7320,7 +7299,6 @@ static int si_dpm_init(struct amdgpu_device *adev)
2487     struct si_power_info *si_pi;
2488     struct atom_clock_dividers dividers;
2489     int ret;
2490     - u32 mask;
2491    
2492     si_pi = kzalloc(sizeof(struct si_power_info), GFP_KERNEL);
2493     if (si_pi == NULL)
2494     @@ -7330,11 +7308,9 @@ static int si_dpm_init(struct amdgpu_device *adev)
2495     eg_pi = &ni_pi->eg;
2496     pi = &eg_pi->rv7xx;
2497    
2498     - ret = drm_pcie_get_speed_cap_mask(adev->ddev, &mask);
2499     - if (ret)
2500     - si_pi->sys_pcie_mask = 0;
2501     - else
2502     - si_pi->sys_pcie_mask = mask;
2503     + si_pi->sys_pcie_mask =
2504     + (adev->pm.pcie_gen_mask & CAIL_PCIE_LINK_SPEED_SUPPORT_MASK) >>
2505     + CAIL_PCIE_LINK_SPEED_SUPPORT_SHIFT;
2506     si_pi->force_pcie_gen = AMDGPU_PCIE_GEN_INVALID;
2507     si_pi->boot_pcie_gen = si_get_current_pcie_speed(adev);
2508    
2509     diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c
2510     index b526f49be65d..336fdd8c7db0 100644
2511     --- a/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c
2512     +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c
2513     @@ -2788,10 +2788,13 @@ static int smu7_apply_state_adjust_rules(struct pp_hwmgr *hwmgr,
2514     PHM_PlatformCaps_DisableMclkSwitchingForFrameLock);
2515    
2516    
2517     - disable_mclk_switching = ((1 < info.display_count) ||
2518     - disable_mclk_switching_for_frame_lock ||
2519     - smu7_vblank_too_short(hwmgr, mode_info.vblank_time_us) ||
2520     - (mode_info.refresh_rate > 120));
2521     + if (info.display_count == 0)
2522     + disable_mclk_switching = false;
2523     + else
2524     + disable_mclk_switching = ((1 < info.display_count) ||
2525     + disable_mclk_switching_for_frame_lock ||
2526     + smu7_vblank_too_short(hwmgr, mode_info.vblank_time_us) ||
2527     + (mode_info.refresh_rate > 120));
2528    
2529     sclk = smu7_ps->performance_levels[0].engine_clock;
2530     mclk = smu7_ps->performance_levels[0].memory_clock;
2531     @@ -4576,13 +4579,6 @@ static int smu7_set_power_profile_state(struct pp_hwmgr *hwmgr,
2532     int tmp_result, result = 0;
2533     uint32_t sclk_mask = 0, mclk_mask = 0;
2534    
2535     - if (hwmgr->chip_id == CHIP_FIJI) {
2536     - if (request->type == AMD_PP_GFX_PROFILE)
2537     - smu7_enable_power_containment(hwmgr);
2538     - else if (request->type == AMD_PP_COMPUTE_PROFILE)
2539     - smu7_disable_power_containment(hwmgr);
2540     - }
2541     -
2542     if (hwmgr->dpm_level != AMD_DPM_FORCED_LEVEL_AUTO)
2543     return -EINVAL;
2544    
2545     diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c
2546     index f8f02e70b8bc..ca232a9e2334 100644
2547     --- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c
2548     +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c
2549     @@ -3243,10 +3243,13 @@ static int vega10_apply_state_adjust_rules(struct pp_hwmgr *hwmgr,
2550     force_mclk_high = phm_cap_enabled(hwmgr->platform_descriptor.platformCaps,
2551     PHM_PlatformCaps_ForceMclkHigh);
2552    
2553     - disable_mclk_switching = (info.display_count > 1) ||
2554     - disable_mclk_switching_for_frame_lock ||
2555     - disable_mclk_switching_for_vr ||
2556     - force_mclk_high;
2557     + if (info.display_count == 0)
2558     + disable_mclk_switching = false;
2559     + else
2560     + disable_mclk_switching = (info.display_count > 1) ||
2561     + disable_mclk_switching_for_frame_lock ||
2562     + disable_mclk_switching_for_vr ||
2563     + force_mclk_high;
2564    
2565     sclk = vega10_ps->performance_levels[0].gfx_clock;
2566     mclk = vega10_ps->performance_levels[0].mem_clock;
2567     diff --git a/drivers/gpu/drm/drm_framebuffer.c b/drivers/gpu/drm/drm_framebuffer.c
2568     index af279844d7ce..dd4727489b84 100644
2569     --- a/drivers/gpu/drm/drm_framebuffer.c
2570     +++ b/drivers/gpu/drm/drm_framebuffer.c
2571     @@ -118,6 +118,10 @@ int drm_mode_addfb(struct drm_device *dev,
2572     r.pixel_format = drm_mode_legacy_fb_format(or->bpp, or->depth);
2573     r.handles[0] = or->handle;
2574    
2575     + if (r.pixel_format == DRM_FORMAT_XRGB2101010 &&
2576     + dev->driver->driver_features & DRIVER_PREFER_XBGR_30BPP)
2577     + r.pixel_format = DRM_FORMAT_XBGR2101010;
2578     +
2579     ret = drm_mode_addfb2(dev, &r, file_priv);
2580     if (ret)
2581     return ret;
2582     diff --git a/drivers/gpu/drm/drm_probe_helper.c b/drivers/gpu/drm/drm_probe_helper.c
2583     index 904966cde32b..d29fd8443fed 100644
2584     --- a/drivers/gpu/drm/drm_probe_helper.c
2585     +++ b/drivers/gpu/drm/drm_probe_helper.c
2586     @@ -671,6 +671,26 @@ static void output_poll_execute(struct work_struct *work)
2587     schedule_delayed_work(delayed_work, DRM_OUTPUT_POLL_PERIOD);
2588     }
2589    
2590     +/**
2591     + * drm_kms_helper_is_poll_worker - is %current task an output poll worker?
2592     + *
2593     + * Determine if %current task is an output poll worker. This can be used
2594     + * to select distinct code paths for output polling versus other contexts.
2595     + *
2596     + * One use case is to avoid a deadlock between the output poll worker and
2597     + * the autosuspend worker wherein the latter waits for polling to finish
2598     + * upon calling drm_kms_helper_poll_disable(), while the former waits for
2599     + * runtime suspend to finish upon calling pm_runtime_get_sync() in a
2600     + * connector ->detect hook.
2601     + */
2602     +bool drm_kms_helper_is_poll_worker(void)
2603     +{
2604     + struct work_struct *work = current_work();
2605     +
2606     + return work && work->func == output_poll_execute;
2607     +}
2608     +EXPORT_SYMBOL(drm_kms_helper_is_poll_worker);
2609     +
2610     /**
2611     * drm_kms_helper_poll_disable - disable output polling
2612     * @dev: drm_device
2613     diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
2614     index 5c5cb2ceee49..562220ec9d41 100644
2615     --- a/drivers/gpu/drm/i915/i915_drv.c
2616     +++ b/drivers/gpu/drm/i915/i915_drv.c
2617     @@ -1806,6 +1806,8 @@ static int i915_drm_resume_early(struct drm_device *dev)
2618     if (IS_GEN9_LP(dev_priv) ||
2619     !(dev_priv->suspended_to_idle && dev_priv->csr.dmc_payload))
2620     intel_power_domains_init_hw(dev_priv, true);
2621     + else
2622     + intel_display_set_init_power(dev_priv, true);
2623    
2624     i915_gem_sanitize(dev_priv);
2625    
2626     diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
2627     index 83876a1c8d98..de8ca5f1dd2e 100644
2628     --- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
2629     +++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
2630     @@ -499,6 +499,8 @@ eb_add_vma(struct i915_execbuffer *eb, unsigned int i, struct i915_vma *vma)
2631     list_add_tail(&vma->exec_link, &eb->unbound);
2632     if (drm_mm_node_allocated(&vma->node))
2633     err = i915_vma_unbind(vma);
2634     + if (unlikely(err))
2635     + vma->exec_flags = NULL;
2636     }
2637     return err;
2638     }
2639     @@ -2408,7 +2410,7 @@ i915_gem_do_execbuffer(struct drm_device *dev,
2640     if (out_fence) {
2641     if (err == 0) {
2642     fd_install(out_fence_fd, out_fence->file);
2643     - args->rsvd2 &= GENMASK_ULL(0, 31); /* keep in-fence */
2644     + args->rsvd2 &= GENMASK_ULL(31, 0); /* keep in-fence */
2645     args->rsvd2 |= (u64)out_fence_fd << 32;
2646     out_fence_fd = -1;
2647     } else {
2648     diff --git a/drivers/gpu/drm/i915/i915_perf.c b/drivers/gpu/drm/i915/i915_perf.c
2649     index 370b9d248fed..3e49317f3ec3 100644
2650     --- a/drivers/gpu/drm/i915/i915_perf.c
2651     +++ b/drivers/gpu/drm/i915/i915_perf.c
2652     @@ -1300,9 +1300,8 @@ static void i915_oa_stream_destroy(struct i915_perf_stream *stream)
2653     */
2654     mutex_lock(&dev_priv->drm.struct_mutex);
2655     dev_priv->perf.oa.exclusive_stream = NULL;
2656     - mutex_unlock(&dev_priv->drm.struct_mutex);
2657     -
2658     dev_priv->perf.oa.ops.disable_metric_set(dev_priv);
2659     + mutex_unlock(&dev_priv->drm.struct_mutex);
2660    
2661     free_oa_buffer(dev_priv);
2662    
2663     @@ -1754,22 +1753,13 @@ static int gen8_switch_to_updated_kernel_context(struct drm_i915_private *dev_pr
2664     * Note: it's only the RCS/Render context that has any OA state.
2665     */
2666     static int gen8_configure_all_contexts(struct drm_i915_private *dev_priv,
2667     - const struct i915_oa_config *oa_config,
2668     - bool interruptible)
2669     + const struct i915_oa_config *oa_config)
2670     {
2671     struct i915_gem_context *ctx;
2672     int ret;
2673     unsigned int wait_flags = I915_WAIT_LOCKED;
2674    
2675     - if (interruptible) {
2676     - ret = i915_mutex_lock_interruptible(&dev_priv->drm);
2677     - if (ret)
2678     - return ret;
2679     -
2680     - wait_flags |= I915_WAIT_INTERRUPTIBLE;
2681     - } else {
2682     - mutex_lock(&dev_priv->drm.struct_mutex);
2683     - }
2684     + lockdep_assert_held(&dev_priv->drm.struct_mutex);
2685    
2686     /* Switch away from any user context. */
2687     ret = gen8_switch_to_updated_kernel_context(dev_priv, oa_config);
2688     @@ -1817,8 +1807,6 @@ static int gen8_configure_all_contexts(struct drm_i915_private *dev_priv,
2689     }
2690    
2691     out:
2692     - mutex_unlock(&dev_priv->drm.struct_mutex);
2693     -
2694     return ret;
2695     }
2696    
2697     @@ -1862,7 +1850,7 @@ static int gen8_enable_metric_set(struct drm_i915_private *dev_priv,
2698     * to make sure all slices/subslices are ON before writing to NOA
2699     * registers.
2700     */
2701     - ret = gen8_configure_all_contexts(dev_priv, oa_config, true);
2702     + ret = gen8_configure_all_contexts(dev_priv, oa_config);
2703     if (ret)
2704     return ret;
2705    
2706     @@ -1877,7 +1865,7 @@ static int gen8_enable_metric_set(struct drm_i915_private *dev_priv,
2707     static void gen8_disable_metric_set(struct drm_i915_private *dev_priv)
2708     {
2709     /* Reset all contexts' slices/subslices configurations. */
2710     - gen8_configure_all_contexts(dev_priv, NULL, false);
2711     + gen8_configure_all_contexts(dev_priv, NULL);
2712    
2713     I915_WRITE(GDT_CHICKEN_BITS, (I915_READ(GDT_CHICKEN_BITS) &
2714     ~GT_NOA_ENABLE));
2715     @@ -2127,6 +2115,10 @@ static int i915_oa_stream_init(struct i915_perf_stream *stream,
2716     if (ret)
2717     goto err_oa_buf_alloc;
2718    
2719     + ret = i915_mutex_lock_interruptible(&dev_priv->drm);
2720     + if (ret)
2721     + goto err_lock;
2722     +
2723     ret = dev_priv->perf.oa.ops.enable_metric_set(dev_priv,
2724     stream->oa_config);
2725     if (ret)
2726     @@ -2134,23 +2126,17 @@ static int i915_oa_stream_init(struct i915_perf_stream *stream,
2727    
2728     stream->ops = &i915_oa_stream_ops;
2729    
2730     - /* Lock device for exclusive_stream access late because
2731     - * enable_metric_set() might lock as well on gen8+.
2732     - */
2733     - ret = i915_mutex_lock_interruptible(&dev_priv->drm);
2734     - if (ret)
2735     - goto err_lock;
2736     -
2737     dev_priv->perf.oa.exclusive_stream = stream;
2738    
2739     mutex_unlock(&dev_priv->drm.struct_mutex);
2740    
2741     return 0;
2742    
2743     -err_lock:
2744     +err_enable:
2745     dev_priv->perf.oa.ops.disable_metric_set(dev_priv);
2746     + mutex_unlock(&dev_priv->drm.struct_mutex);
2747    
2748     -err_enable:
2749     +err_lock:
2750     free_oa_buffer(dev_priv);
2751    
2752     err_oa_buf_alloc:
2753     diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
2754     index 059db50109bc..cf648c526e12 100644
2755     --- a/drivers/gpu/drm/i915/intel_display.c
2756     +++ b/drivers/gpu/drm/i915/intel_display.c
2757     @@ -14498,6 +14498,8 @@ static void sanitize_watermarks(struct drm_device *dev)
2758    
2759     cs->wm.need_postvbl_update = true;
2760     dev_priv->display.optimize_watermarks(intel_state, cs);
2761     +
2762     + to_intel_crtc_state(crtc->state)->wm = cs->wm;
2763     }
2764    
2765     put_state:
2766     diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
2767     index 3fed1d3ecded..1b292d5f1a68 100644
2768     --- a/drivers/gpu/drm/i915/intel_hdmi.c
2769     +++ b/drivers/gpu/drm/i915/intel_hdmi.c
2770     @@ -1563,12 +1563,20 @@ intel_hdmi_set_edid(struct drm_connector *connector)
2771     struct intel_hdmi *intel_hdmi = intel_attached_hdmi(connector);
2772     struct edid *edid;
2773     bool connected = false;
2774     + struct i2c_adapter *i2c;
2775    
2776     intel_display_power_get(dev_priv, POWER_DOMAIN_GMBUS);
2777    
2778     - edid = drm_get_edid(connector,
2779     - intel_gmbus_get_adapter(dev_priv,
2780     - intel_hdmi->ddc_bus));
2781     + i2c = intel_gmbus_get_adapter(dev_priv, intel_hdmi->ddc_bus);
2782     +
2783     + edid = drm_get_edid(connector, i2c);
2784     +
2785     + if (!edid && !intel_gmbus_is_forced_bit(i2c)) {
2786     + DRM_DEBUG_KMS("HDMI GMBUS EDID read failed, retry using GPIO bit-banging\n");
2787     + intel_gmbus_force_bit(i2c, true);
2788     + edid = drm_get_edid(connector, i2c);
2789     + intel_gmbus_force_bit(i2c, false);
2790     + }
2791    
2792     intel_hdmi_dp_dual_mode_detect(connector, edid != NULL);
2793    
2794     diff --git a/drivers/gpu/drm/i915/intel_runtime_pm.c b/drivers/gpu/drm/i915/intel_runtime_pm.c
2795     index 51cb5293bf43..bcccacba1ec6 100644
2796     --- a/drivers/gpu/drm/i915/intel_runtime_pm.c
2797     +++ b/drivers/gpu/drm/i915/intel_runtime_pm.c
2798     @@ -1844,6 +1844,7 @@ void intel_display_power_put(struct drm_i915_private *dev_priv,
2799     CNL_DISPLAY_POWERWELL_2_POWER_DOMAINS | \
2800     BIT_ULL(POWER_DOMAIN_MODESET) | \
2801     BIT_ULL(POWER_DOMAIN_AUX_A) | \
2802     + BIT_ULL(POWER_DOMAIN_GMBUS) | \
2803     BIT_ULL(POWER_DOMAIN_INIT))
2804    
2805     static const struct i915_power_well_ops i9xx_always_on_power_well_ops = {
2806     diff --git a/drivers/gpu/drm/nouveau/nouveau_connector.c b/drivers/gpu/drm/nouveau/nouveau_connector.c
2807     index 70d8e0d69ad5..c902a851eb51 100644
2808     --- a/drivers/gpu/drm/nouveau/nouveau_connector.c
2809     +++ b/drivers/gpu/drm/nouveau/nouveau_connector.c
2810     @@ -570,9 +570,15 @@ nouveau_connector_detect(struct drm_connector *connector, bool force)
2811     nv_connector->edid = NULL;
2812     }
2813    
2814     - ret = pm_runtime_get_sync(connector->dev->dev);
2815     - if (ret < 0 && ret != -EACCES)
2816     - return conn_status;
2817     + /* Outputs are only polled while runtime active, so acquiring a
2818     + * runtime PM ref here is unnecessary (and would deadlock upon
2819     + * runtime suspend because it waits for polling to finish).
2820     + */
2821     + if (!drm_kms_helper_is_poll_worker()) {
2822     + ret = pm_runtime_get_sync(connector->dev->dev);
2823     + if (ret < 0 && ret != -EACCES)
2824     + return conn_status;
2825     + }
2826    
2827     nv_encoder = nouveau_connector_ddc_detect(connector);
2828     if (nv_encoder && (i2c = nv_encoder->i2c) != NULL) {
2829     @@ -647,8 +653,10 @@ nouveau_connector_detect(struct drm_connector *connector, bool force)
2830    
2831     out:
2832    
2833     - pm_runtime_mark_last_busy(connector->dev->dev);
2834     - pm_runtime_put_autosuspend(connector->dev->dev);
2835     + if (!drm_kms_helper_is_poll_worker()) {
2836     + pm_runtime_mark_last_busy(connector->dev->dev);
2837     + pm_runtime_put_autosuspend(connector->dev->dev);
2838     + }
2839    
2840     return conn_status;
2841     }
2842     diff --git a/drivers/gpu/drm/nouveau/nv50_display.c b/drivers/gpu/drm/nouveau/nv50_display.c
2843     index fb47d46050ec..6e196bc01118 100644
2844     --- a/drivers/gpu/drm/nouveau/nv50_display.c
2845     +++ b/drivers/gpu/drm/nouveau/nv50_display.c
2846     @@ -4426,6 +4426,7 @@ nv50_display_create(struct drm_device *dev)
2847     nouveau_display(dev)->fini = nv50_display_fini;
2848     disp->disp = &nouveau_display(dev)->disp;
2849     dev->mode_config.funcs = &nv50_disp_func;
2850     + dev->driver->driver_features |= DRIVER_PREFER_XBGR_30BPP;
2851     if (nouveau_atomic)
2852     dev->driver->driver_features |= DRIVER_ATOMIC;
2853    
2854     diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c
2855     index 3cb6c55b268d..ce8b353b5753 100644
2856     --- a/drivers/gpu/drm/radeon/cik.c
2857     +++ b/drivers/gpu/drm/radeon/cik.c
2858     @@ -3229,35 +3229,8 @@ static void cik_gpu_init(struct radeon_device *rdev)
2859     case CHIP_KAVERI:
2860     rdev->config.cik.max_shader_engines = 1;
2861     rdev->config.cik.max_tile_pipes = 4;
2862     - if ((rdev->pdev->device == 0x1304) ||
2863     - (rdev->pdev->device == 0x1305) ||
2864     - (rdev->pdev->device == 0x130C) ||
2865     - (rdev->pdev->device == 0x130F) ||
2866     - (rdev->pdev->device == 0x1310) ||
2867     - (rdev->pdev->device == 0x1311) ||
2868     - (rdev->pdev->device == 0x131C)) {
2869     - rdev->config.cik.max_cu_per_sh = 8;
2870     - rdev->config.cik.max_backends_per_se = 2;
2871     - } else if ((rdev->pdev->device == 0x1309) ||
2872     - (rdev->pdev->device == 0x130A) ||
2873     - (rdev->pdev->device == 0x130D) ||
2874     - (rdev->pdev->device == 0x1313) ||
2875     - (rdev->pdev->device == 0x131D)) {
2876     - rdev->config.cik.max_cu_per_sh = 6;
2877     - rdev->config.cik.max_backends_per_se = 2;
2878     - } else if ((rdev->pdev->device == 0x1306) ||
2879     - (rdev->pdev->device == 0x1307) ||
2880     - (rdev->pdev->device == 0x130B) ||
2881     - (rdev->pdev->device == 0x130E) ||
2882     - (rdev->pdev->device == 0x1315) ||
2883     - (rdev->pdev->device == 0x1318) ||
2884     - (rdev->pdev->device == 0x131B)) {
2885     - rdev->config.cik.max_cu_per_sh = 4;
2886     - rdev->config.cik.max_backends_per_se = 1;
2887     - } else {
2888     - rdev->config.cik.max_cu_per_sh = 3;
2889     - rdev->config.cik.max_backends_per_se = 1;
2890     - }
2891     + rdev->config.cik.max_cu_per_sh = 8;
2892     + rdev->config.cik.max_backends_per_se = 2;
2893     rdev->config.cik.max_sh_per_se = 1;
2894     rdev->config.cik.max_texture_channel_caches = 4;
2895     rdev->config.cik.max_gprs = 256;
2896     diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c
2897     index 2f642cbefd8e..c0da44742988 100644
2898     --- a/drivers/gpu/drm/radeon/radeon_connectors.c
2899     +++ b/drivers/gpu/drm/radeon/radeon_connectors.c
2900     @@ -900,9 +900,11 @@ radeon_lvds_detect(struct drm_connector *connector, bool force)
2901     enum drm_connector_status ret = connector_status_disconnected;
2902     int r;
2903    
2904     - r = pm_runtime_get_sync(connector->dev->dev);
2905     - if (r < 0)
2906     - return connector_status_disconnected;
2907     + if (!drm_kms_helper_is_poll_worker()) {
2908     + r = pm_runtime_get_sync(connector->dev->dev);
2909     + if (r < 0)
2910     + return connector_status_disconnected;
2911     + }
2912    
2913     if (encoder) {
2914     struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
2915     @@ -925,8 +927,12 @@ radeon_lvds_detect(struct drm_connector *connector, bool force)
2916     /* check acpi lid status ??? */
2917    
2918     radeon_connector_update_scratch_regs(connector, ret);
2919     - pm_runtime_mark_last_busy(connector->dev->dev);
2920     - pm_runtime_put_autosuspend(connector->dev->dev);
2921     +
2922     + if (!drm_kms_helper_is_poll_worker()) {
2923     + pm_runtime_mark_last_busy(connector->dev->dev);
2924     + pm_runtime_put_autosuspend(connector->dev->dev);
2925     + }
2926     +
2927     return ret;
2928     }
2929    
2930     @@ -1040,9 +1046,11 @@ radeon_vga_detect(struct drm_connector *connector, bool force)
2931     enum drm_connector_status ret = connector_status_disconnected;
2932     int r;
2933    
2934     - r = pm_runtime_get_sync(connector->dev->dev);
2935     - if (r < 0)
2936     - return connector_status_disconnected;
2937     + if (!drm_kms_helper_is_poll_worker()) {
2938     + r = pm_runtime_get_sync(connector->dev->dev);
2939     + if (r < 0)
2940     + return connector_status_disconnected;
2941     + }
2942    
2943     encoder = radeon_best_single_encoder(connector);
2944     if (!encoder)
2945     @@ -1109,8 +1117,10 @@ radeon_vga_detect(struct drm_connector *connector, bool force)
2946     radeon_connector_update_scratch_regs(connector, ret);
2947    
2948     out:
2949     - pm_runtime_mark_last_busy(connector->dev->dev);
2950     - pm_runtime_put_autosuspend(connector->dev->dev);
2951     + if (!drm_kms_helper_is_poll_worker()) {
2952     + pm_runtime_mark_last_busy(connector->dev->dev);
2953     + pm_runtime_put_autosuspend(connector->dev->dev);
2954     + }
2955    
2956     return ret;
2957     }
2958     @@ -1174,9 +1184,11 @@ radeon_tv_detect(struct drm_connector *connector, bool force)
2959     if (!radeon_connector->dac_load_detect)
2960     return ret;
2961    
2962     - r = pm_runtime_get_sync(connector->dev->dev);
2963     - if (r < 0)
2964     - return connector_status_disconnected;
2965     + if (!drm_kms_helper_is_poll_worker()) {
2966     + r = pm_runtime_get_sync(connector->dev->dev);
2967     + if (r < 0)
2968     + return connector_status_disconnected;
2969     + }
2970    
2971     encoder = radeon_best_single_encoder(connector);
2972     if (!encoder)
2973     @@ -1188,8 +1200,12 @@ radeon_tv_detect(struct drm_connector *connector, bool force)
2974     if (ret == connector_status_connected)
2975     ret = radeon_connector_analog_encoder_conflict_solve(connector, encoder, ret, false);
2976     radeon_connector_update_scratch_regs(connector, ret);
2977     - pm_runtime_mark_last_busy(connector->dev->dev);
2978     - pm_runtime_put_autosuspend(connector->dev->dev);
2979     +
2980     + if (!drm_kms_helper_is_poll_worker()) {
2981     + pm_runtime_mark_last_busy(connector->dev->dev);
2982     + pm_runtime_put_autosuspend(connector->dev->dev);
2983     + }
2984     +
2985     return ret;
2986     }
2987    
2988     @@ -1252,9 +1268,11 @@ radeon_dvi_detect(struct drm_connector *connector, bool force)
2989     enum drm_connector_status ret = connector_status_disconnected;
2990     bool dret = false, broken_edid = false;
2991    
2992     - r = pm_runtime_get_sync(connector->dev->dev);
2993     - if (r < 0)
2994     - return connector_status_disconnected;
2995     + if (!drm_kms_helper_is_poll_worker()) {
2996     + r = pm_runtime_get_sync(connector->dev->dev);
2997     + if (r < 0)
2998     + return connector_status_disconnected;
2999     + }
3000    
3001     if (radeon_connector->detected_hpd_without_ddc) {
3002     force = true;
3003     @@ -1437,8 +1455,10 @@ radeon_dvi_detect(struct drm_connector *connector, bool force)
3004     }
3005    
3006     exit:
3007     - pm_runtime_mark_last_busy(connector->dev->dev);
3008     - pm_runtime_put_autosuspend(connector->dev->dev);
3009     + if (!drm_kms_helper_is_poll_worker()) {
3010     + pm_runtime_mark_last_busy(connector->dev->dev);
3011     + pm_runtime_put_autosuspend(connector->dev->dev);
3012     + }
3013    
3014     return ret;
3015     }
3016     @@ -1689,9 +1709,11 @@ radeon_dp_detect(struct drm_connector *connector, bool force)
3017     if (radeon_dig_connector->is_mst)
3018     return connector_status_disconnected;
3019    
3020     - r = pm_runtime_get_sync(connector->dev->dev);
3021     - if (r < 0)
3022     - return connector_status_disconnected;
3023     + if (!drm_kms_helper_is_poll_worker()) {
3024     + r = pm_runtime_get_sync(connector->dev->dev);
3025     + if (r < 0)
3026     + return connector_status_disconnected;
3027     + }
3028    
3029     if (!force && radeon_check_hpd_status_unchanged(connector)) {
3030     ret = connector->status;
3031     @@ -1778,8 +1800,10 @@ radeon_dp_detect(struct drm_connector *connector, bool force)
3032     }
3033    
3034     out:
3035     - pm_runtime_mark_last_busy(connector->dev->dev);
3036     - pm_runtime_put_autosuspend(connector->dev->dev);
3037     + if (!drm_kms_helper_is_poll_worker()) {
3038     + pm_runtime_mark_last_busy(connector->dev->dev);
3039     + pm_runtime_put_autosuspend(connector->dev->dev);
3040     + }
3041    
3042     return ret;
3043     }
3044     diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
3045     index ffc10cadcf34..32b577c776b9 100644
3046     --- a/drivers/gpu/drm/radeon/radeon_device.c
3047     +++ b/drivers/gpu/drm/radeon/radeon_device.c
3048     @@ -1397,6 +1397,10 @@ int radeon_device_init(struct radeon_device *rdev,
3049     if ((rdev->flags & RADEON_IS_PCI) &&
3050     (rdev->family <= CHIP_RS740))
3051     rdev->need_dma32 = true;
3052     +#ifdef CONFIG_PPC64
3053     + if (rdev->family == CHIP_CEDAR)
3054     + rdev->need_dma32 = true;
3055     +#endif
3056    
3057     dma_bits = rdev->need_dma32 ? 32 : 40;
3058     r = pci_set_dma_mask(rdev->pdev, DMA_BIT_MASK(dma_bits));
3059     diff --git a/drivers/gpu/drm/radeon/radeon_pm.c b/drivers/gpu/drm/radeon/radeon_pm.c
3060     index 326ad068c15a..4b6542538ff9 100644
3061     --- a/drivers/gpu/drm/radeon/radeon_pm.c
3062     +++ b/drivers/gpu/drm/radeon/radeon_pm.c
3063     @@ -47,7 +47,6 @@ static bool radeon_pm_in_vbl(struct radeon_device *rdev);
3064     static bool radeon_pm_debug_check_in_vbl(struct radeon_device *rdev, bool finish);
3065     static void radeon_pm_update_profile(struct radeon_device *rdev);
3066     static void radeon_pm_set_clocks(struct radeon_device *rdev);
3067     -static void radeon_pm_compute_clocks_dpm(struct radeon_device *rdev);
3068    
3069     int radeon_pm_get_type_index(struct radeon_device *rdev,
3070     enum radeon_pm_state_type ps_type,
3071     @@ -80,8 +79,6 @@ void radeon_pm_acpi_event_handler(struct radeon_device *rdev)
3072     radeon_dpm_enable_bapm(rdev, rdev->pm.dpm.ac_power);
3073     }
3074     mutex_unlock(&rdev->pm.mutex);
3075     - /* allow new DPM state to be picked */
3076     - radeon_pm_compute_clocks_dpm(rdev);
3077     } else if (rdev->pm.pm_method == PM_METHOD_PROFILE) {
3078     if (rdev->pm.profile == PM_PROFILE_AUTO) {
3079     mutex_lock(&rdev->pm.mutex);
3080     @@ -885,8 +882,7 @@ static struct radeon_ps *radeon_dpm_pick_power_state(struct radeon_device *rdev,
3081     dpm_state = POWER_STATE_TYPE_INTERNAL_3DPERF;
3082     /* balanced states don't exist at the moment */
3083     if (dpm_state == POWER_STATE_TYPE_BALANCED)
3084     - dpm_state = rdev->pm.dpm.ac_power ?
3085     - POWER_STATE_TYPE_PERFORMANCE : POWER_STATE_TYPE_BATTERY;
3086     + dpm_state = POWER_STATE_TYPE_PERFORMANCE;
3087    
3088     restart_search:
3089     /* Pick the best power state based on current conditions */
3090     diff --git a/drivers/infiniband/core/device.c b/drivers/infiniband/core/device.c
3091     index d7d042a20ab4..4dff06ab771e 100644
3092     --- a/drivers/infiniband/core/device.c
3093     +++ b/drivers/infiniband/core/device.c
3094     @@ -534,14 +534,14 @@ int ib_register_device(struct ib_device *device,
3095     ret = device->query_device(device, &device->attrs, &uhw);
3096     if (ret) {
3097     pr_warn("Couldn't query the device attributes\n");
3098     - goto cache_cleanup;
3099     + goto cg_cleanup;
3100     }
3101    
3102     ret = ib_device_register_sysfs(device, port_callback);
3103     if (ret) {
3104     pr_warn("Couldn't register device %s with driver model\n",
3105     device->name);
3106     - goto cache_cleanup;
3107     + goto cg_cleanup;
3108     }
3109    
3110     device->reg_state = IB_DEV_REGISTERED;
3111     @@ -557,6 +557,8 @@ int ib_register_device(struct ib_device *device,
3112     mutex_unlock(&device_mutex);
3113     return 0;
3114    
3115     +cg_cleanup:
3116     + ib_device_unregister_rdmacg(device);
3117     cache_cleanup:
3118     ib_cache_cleanup_one(device);
3119     ib_cache_release_one(device);
3120     diff --git a/drivers/infiniband/core/rdma_core.c b/drivers/infiniband/core/rdma_core.c
3121     index 4e1f76730855..9cb801d1fe54 100644
3122     --- a/drivers/infiniband/core/rdma_core.c
3123     +++ b/drivers/infiniband/core/rdma_core.c
3124     @@ -407,13 +407,13 @@ static int __must_check remove_commit_fd_uobject(struct ib_uobject *uobj,
3125     return ret;
3126     }
3127    
3128     -static void lockdep_check(struct ib_uobject *uobj, bool exclusive)
3129     +static void assert_uverbs_usecnt(struct ib_uobject *uobj, bool exclusive)
3130     {
3131     #ifdef CONFIG_LOCKDEP
3132     if (exclusive)
3133     - WARN_ON(atomic_read(&uobj->usecnt) > 0);
3134     + WARN_ON(atomic_read(&uobj->usecnt) != -1);
3135     else
3136     - WARN_ON(atomic_read(&uobj->usecnt) == -1);
3137     + WARN_ON(atomic_read(&uobj->usecnt) <= 0);
3138     #endif
3139     }
3140    
3141     @@ -452,7 +452,7 @@ int __must_check rdma_remove_commit_uobject(struct ib_uobject *uobj)
3142     WARN(true, "ib_uverbs: Cleanup is running while removing an uobject\n");
3143     return 0;
3144     }
3145     - lockdep_check(uobj, true);
3146     + assert_uverbs_usecnt(uobj, true);
3147     ret = _rdma_remove_commit_uobject(uobj, RDMA_REMOVE_DESTROY);
3148    
3149     up_read(&ucontext->cleanup_rwsem);
3150     @@ -482,7 +482,7 @@ int rdma_explicit_destroy(struct ib_uobject *uobject)
3151     WARN(true, "ib_uverbs: Cleanup is running while removing an uobject\n");
3152     return 0;
3153     }
3154     - lockdep_check(uobject, true);
3155     + assert_uverbs_usecnt(uobject, true);
3156     ret = uobject->type->type_class->remove_commit(uobject,
3157     RDMA_REMOVE_DESTROY);
3158     if (ret)
3159     @@ -569,7 +569,7 @@ static void lookup_put_fd_uobject(struct ib_uobject *uobj, bool exclusive)
3160    
3161     void rdma_lookup_put_uobject(struct ib_uobject *uobj, bool exclusive)
3162     {
3163     - lockdep_check(uobj, exclusive);
3164     + assert_uverbs_usecnt(uobj, exclusive);
3165     uobj->type->type_class->lookup_put(uobj, exclusive);
3166     /*
3167     * In order to unlock an object, either decrease its usecnt for
3168     diff --git a/drivers/infiniband/core/ucma.c b/drivers/infiniband/core/ucma.c
3169     index eb85b546e223..c8b3a45e9edc 100644
3170     --- a/drivers/infiniband/core/ucma.c
3171     +++ b/drivers/infiniband/core/ucma.c
3172     @@ -1148,6 +1148,9 @@ static ssize_t ucma_init_qp_attr(struct ucma_file *file,
3173     if (copy_from_user(&cmd, inbuf, sizeof(cmd)))
3174     return -EFAULT;
3175    
3176     + if (cmd.qp_state > IB_QPS_ERR)
3177     + return -EINVAL;
3178     +
3179     ctx = ucma_get_ctx(file, cmd.id);
3180     if (IS_ERR(ctx))
3181     return PTR_ERR(ctx);
3182     @@ -1293,6 +1296,9 @@ static ssize_t ucma_set_option(struct ucma_file *file, const char __user *inbuf,
3183     if (IS_ERR(ctx))
3184     return PTR_ERR(ctx);
3185    
3186     + if (unlikely(cmd.optval > KMALLOC_MAX_SIZE))
3187     + return -EINVAL;
3188     +
3189     optval = memdup_user((void __user *) (unsigned long) cmd.optval,
3190     cmd.optlen);
3191     if (IS_ERR(optval)) {
3192     diff --git a/drivers/infiniband/hw/mlx5/cq.c b/drivers/infiniband/hw/mlx5/cq.c
3193     index 2aa53f427685..faedc080a5e6 100644
3194     --- a/drivers/infiniband/hw/mlx5/cq.c
3195     +++ b/drivers/infiniband/hw/mlx5/cq.c
3196     @@ -1154,7 +1154,12 @@ static int resize_user(struct mlx5_ib_dev *dev, struct mlx5_ib_cq *cq,
3197     if (ucmd.reserved0 || ucmd.reserved1)
3198     return -EINVAL;
3199    
3200     - umem = ib_umem_get(context, ucmd.buf_addr, entries * ucmd.cqe_size,
3201     + /* check multiplication overflow */
3202     + if (ucmd.cqe_size && SIZE_MAX / ucmd.cqe_size <= entries - 1)
3203     + return -EINVAL;
3204     +
3205     + umem = ib_umem_get(context, ucmd.buf_addr,
3206     + (size_t)ucmd.cqe_size * entries,
3207     IB_ACCESS_LOCAL_WRITE, 1);
3208     if (IS_ERR(umem)) {
3209     err = PTR_ERR(umem);
3210     diff --git a/drivers/infiniband/hw/mlx5/mr.c b/drivers/infiniband/hw/mlx5/mr.c
3211     index 231b043e2806..000937fe53ec 100644
3212     --- a/drivers/infiniband/hw/mlx5/mr.c
3213     +++ b/drivers/infiniband/hw/mlx5/mr.c
3214     @@ -1813,7 +1813,6 @@ mlx5_ib_sg_to_klms(struct mlx5_ib_mr *mr,
3215    
3216     mr->ibmr.iova = sg_dma_address(sg) + sg_offset;
3217     mr->ibmr.length = 0;
3218     - mr->ndescs = sg_nents;
3219    
3220     for_each_sg(sgl, sg, sg_nents, i) {
3221     if (unlikely(i >= mr->max_descs))
3222     @@ -1825,6 +1824,7 @@ mlx5_ib_sg_to_klms(struct mlx5_ib_mr *mr,
3223    
3224     sg_offset = 0;
3225     }
3226     + mr->ndescs = i;
3227    
3228     if (sg_offset_p)
3229     *sg_offset_p = sg_offset;
3230     diff --git a/drivers/input/keyboard/matrix_keypad.c b/drivers/input/keyboard/matrix_keypad.c
3231     index 1f316d66e6f7..41614c185918 100644
3232     --- a/drivers/input/keyboard/matrix_keypad.c
3233     +++ b/drivers/input/keyboard/matrix_keypad.c
3234     @@ -218,8 +218,10 @@ static void matrix_keypad_stop(struct input_dev *dev)
3235     {
3236     struct matrix_keypad *keypad = input_get_drvdata(dev);
3237    
3238     + spin_lock_irq(&keypad->lock);
3239     keypad->stopped = true;
3240     - mb();
3241     + spin_unlock_irq(&keypad->lock);
3242     +
3243     flush_work(&keypad->work.work);
3244     /*
3245     * matrix_keypad_scan() will leave IRQs enabled;
3246     diff --git a/drivers/md/bcache/super.c b/drivers/md/bcache/super.c
3247     index 25bf003fb198..9417170f180a 100644
3248     --- a/drivers/md/bcache/super.c
3249     +++ b/drivers/md/bcache/super.c
3250     @@ -938,6 +938,7 @@ int bch_cached_dev_attach(struct cached_dev *dc, struct cache_set *c)
3251     uint32_t rtime = cpu_to_le32(get_seconds());
3252     struct uuid_entry *u;
3253     char buf[BDEVNAME_SIZE];
3254     + struct cached_dev *exist_dc, *t;
3255    
3256     bdevname(dc->bdev, buf);
3257    
3258     @@ -961,6 +962,16 @@ int bch_cached_dev_attach(struct cached_dev *dc, struct cache_set *c)
3259     return -EINVAL;
3260     }
3261    
3262     + /* Check whether already attached */
3263     + list_for_each_entry_safe(exist_dc, t, &c->cached_devs, list) {
3264     + if (!memcmp(dc->sb.uuid, exist_dc->sb.uuid, 16)) {
3265     + pr_err("Tried to attach %s but duplicate UUID already attached",
3266     + buf);
3267     +
3268     + return -EINVAL;
3269     + }
3270     + }
3271     +
3272     u = uuid_find(c, dc->sb.uuid);
3273    
3274     if (u &&
3275     @@ -1181,7 +1192,7 @@ static void register_bdev(struct cache_sb *sb, struct page *sb_page,
3276    
3277     return;
3278     err:
3279     - pr_notice("error opening %s: %s", bdevname(bdev, name), err);
3280     + pr_notice("error %s: %s", bdevname(bdev, name), err);
3281     bcache_device_stop(&dc->disk);
3282     }
3283    
3284     @@ -1849,6 +1860,8 @@ static int register_cache(struct cache_sb *sb, struct page *sb_page,
3285     const char *err = NULL; /* must be set for any error case */
3286     int ret = 0;
3287    
3288     + bdevname(bdev, name);
3289     +
3290     memcpy(&ca->sb, sb, sizeof(struct cache_sb));
3291     ca->bdev = bdev;
3292     ca->bdev->bd_holder = ca;
3293     @@ -1857,11 +1870,12 @@ static int register_cache(struct cache_sb *sb, struct page *sb_page,
3294     ca->sb_bio.bi_io_vec[0].bv_page = sb_page;
3295     get_page(sb_page);
3296    
3297     - if (blk_queue_discard(bdev_get_queue(ca->bdev)))
3298     + if (blk_queue_discard(bdev_get_queue(bdev)))
3299     ca->discard = CACHE_DISCARD(&ca->sb);
3300    
3301     ret = cache_alloc(ca);
3302     if (ret != 0) {
3303     + blkdev_put(bdev, FMODE_READ|FMODE_WRITE|FMODE_EXCL);
3304     if (ret == -ENOMEM)
3305     err = "cache_alloc(): -ENOMEM";
3306     else
3307     @@ -1884,14 +1898,14 @@ static int register_cache(struct cache_sb *sb, struct page *sb_page,
3308     goto out;
3309     }
3310    
3311     - pr_info("registered cache device %s", bdevname(bdev, name));
3312     + pr_info("registered cache device %s", name);
3313    
3314     out:
3315     kobject_put(&ca->kobj);
3316    
3317     err:
3318     if (err)
3319     - pr_notice("error opening %s: %s", bdevname(bdev, name), err);
3320     + pr_notice("error %s: %s", name, err);
3321    
3322     return ret;
3323     }
3324     @@ -1980,6 +1994,7 @@ static ssize_t register_bcache(struct kobject *k, struct kobj_attribute *attr,
3325     if (err)
3326     goto err_close;
3327    
3328     + err = "failed to register device";
3329     if (SB_IS_BDEV(sb)) {
3330     struct cached_dev *dc = kzalloc(sizeof(*dc), GFP_KERNEL);
3331     if (!dc)
3332     @@ -1994,7 +2009,7 @@ static ssize_t register_bcache(struct kobject *k, struct kobj_attribute *attr,
3333     goto err_close;
3334    
3335     if (register_cache(sb, sb_page, bdev, ca) != 0)
3336     - goto err_close;
3337     + goto err;
3338     }
3339     out:
3340     if (sb_page)
3341     @@ -2007,7 +2022,7 @@ static ssize_t register_bcache(struct kobject *k, struct kobj_attribute *attr,
3342     err_close:
3343     blkdev_put(bdev, FMODE_READ|FMODE_WRITE|FMODE_EXCL);
3344     err:
3345     - pr_info("error opening %s: %s", path, err);
3346     + pr_info("error %s: %s", path, err);
3347     ret = -EINVAL;
3348     goto out;
3349     }
3350     diff --git a/drivers/md/dm-bufio.c b/drivers/md/dm-bufio.c
3351     index 6d416fdc25cb..1e17e6421da3 100644
3352     --- a/drivers/md/dm-bufio.c
3353     +++ b/drivers/md/dm-bufio.c
3354     @@ -386,9 +386,6 @@ static void __cache_size_refresh(void)
3355     static void *alloc_buffer_data(struct dm_bufio_client *c, gfp_t gfp_mask,
3356     enum data_mode *data_mode)
3357     {
3358     - unsigned noio_flag;
3359     - void *ptr;
3360     -
3361     if (c->block_size <= DM_BUFIO_BLOCK_SIZE_SLAB_LIMIT) {
3362     *data_mode = DATA_MODE_SLAB;
3363     return kmem_cache_alloc(DM_BUFIO_CACHE(c), gfp_mask);
3364     @@ -412,16 +409,15 @@ static void *alloc_buffer_data(struct dm_bufio_client *c, gfp_t gfp_mask,
3365     * all allocations done by this process (including pagetables) are done
3366     * as if GFP_NOIO was specified.
3367     */
3368     + if (gfp_mask & __GFP_NORETRY) {
3369     + unsigned noio_flag = memalloc_noio_save();
3370     + void *ptr = __vmalloc(c->block_size, gfp_mask, PAGE_KERNEL);
3371    
3372     - if (gfp_mask & __GFP_NORETRY)
3373     - noio_flag = memalloc_noio_save();
3374     -
3375     - ptr = __vmalloc(c->block_size, gfp_mask, PAGE_KERNEL);
3376     -
3377     - if (gfp_mask & __GFP_NORETRY)
3378     memalloc_noio_restore(noio_flag);
3379     + return ptr;
3380     + }
3381    
3382     - return ptr;
3383     + return __vmalloc(c->block_size, gfp_mask, PAGE_KERNEL);
3384     }
3385    
3386     /*
3387     diff --git a/drivers/pci/dwc/pcie-designware-host.c b/drivers/pci/dwc/pcie-designware-host.c
3388     index 81e2157a7cfb..bc3e2d8d0cce 100644
3389     --- a/drivers/pci/dwc/pcie-designware-host.c
3390     +++ b/drivers/pci/dwc/pcie-designware-host.c
3391     @@ -607,7 +607,7 @@ void dw_pcie_setup_rc(struct pcie_port *pp)
3392     /* setup bus numbers */
3393     val = dw_pcie_readl_dbi(pci, PCI_PRIMARY_BUS);
3394     val &= 0xff000000;
3395     - val |= 0x00010100;
3396     + val |= 0x00ff0100;
3397     dw_pcie_writel_dbi(pci, PCI_PRIMARY_BUS, val);
3398    
3399     /* setup command register */
3400     diff --git a/drivers/regulator/stm32-vrefbuf.c b/drivers/regulator/stm32-vrefbuf.c
3401     index 72c8b3e1022b..e0a9c445ed67 100644
3402     --- a/drivers/regulator/stm32-vrefbuf.c
3403     +++ b/drivers/regulator/stm32-vrefbuf.c
3404     @@ -51,7 +51,7 @@ static int stm32_vrefbuf_enable(struct regulator_dev *rdev)
3405     * arbitrary timeout.
3406     */
3407     ret = readl_poll_timeout(priv->base + STM32_VREFBUF_CSR, val,
3408     - !(val & STM32_VRR), 650, 10000);
3409     + val & STM32_VRR, 650, 10000);
3410     if (ret) {
3411     dev_err(&rdev->dev, "stm32 vrefbuf timed out!\n");
3412     val = readl_relaxed(priv->base + STM32_VREFBUF_CSR);
3413     diff --git a/drivers/scsi/hosts.c b/drivers/scsi/hosts.c
3414     index 57bf43e34863..dd9464920456 100644
3415     --- a/drivers/scsi/hosts.c
3416     +++ b/drivers/scsi/hosts.c
3417     @@ -328,8 +328,6 @@ static void scsi_host_dev_release(struct device *dev)
3418     if (shost->work_q)
3419     destroy_workqueue(shost->work_q);
3420    
3421     - destroy_rcu_head(&shost->rcu);
3422     -
3423     if (shost->shost_state == SHOST_CREATED) {
3424     /*
3425     * Free the shost_dev device name here if scsi_host_alloc()
3426     @@ -404,7 +402,6 @@ struct Scsi_Host *scsi_host_alloc(struct scsi_host_template *sht, int privsize)
3427     INIT_LIST_HEAD(&shost->starved_list);
3428     init_waitqueue_head(&shost->host_wait);
3429     mutex_init(&shost->scan_mutex);
3430     - init_rcu_head(&shost->rcu);
3431    
3432     index = ida_simple_get(&host_index_ida, 0, 0, GFP_KERNEL);
3433     if (index < 0)
3434     diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h
3435     index 486c075998f6..67b305531ec3 100644
3436     --- a/drivers/scsi/qla2xxx/qla_def.h
3437     +++ b/drivers/scsi/qla2xxx/qla_def.h
3438     @@ -315,6 +315,29 @@ struct srb_cmd {
3439     /* To identify if a srb is of T10-CRC type. @sp => srb_t pointer */
3440     #define IS_PROT_IO(sp) (sp->flags & SRB_CRC_CTX_DSD_VALID)
3441    
3442     +/*
3443     + * 24 bit port ID type definition.
3444     + */
3445     +typedef union {
3446     + uint32_t b24 : 24;
3447     +
3448     + struct {
3449     +#ifdef __BIG_ENDIAN
3450     + uint8_t domain;
3451     + uint8_t area;
3452     + uint8_t al_pa;
3453     +#elif defined(__LITTLE_ENDIAN)
3454     + uint8_t al_pa;
3455     + uint8_t area;
3456     + uint8_t domain;
3457     +#else
3458     +#error "__BIG_ENDIAN or __LITTLE_ENDIAN must be defined!"
3459     +#endif
3460     + uint8_t rsvd_1;
3461     + } b;
3462     +} port_id_t;
3463     +#define INVALID_PORT_ID 0xFFFFFF
3464     +
3465     struct els_logo_payload {
3466     uint8_t opcode;
3467     uint8_t rsvd[3];
3468     @@ -332,6 +355,7 @@ struct ct_arg {
3469     u32 rsp_size;
3470     void *req;
3471     void *rsp;
3472     + port_id_t id;
3473     };
3474    
3475     /*
3476     @@ -480,6 +504,7 @@ typedef struct srb {
3477     const char *name;
3478     int iocbs;
3479     struct qla_qpair *qpair;
3480     + struct list_head elem;
3481     u32 gen1; /* scratch */
3482     u32 gen2; /* scratch */
3483     union {
3484     @@ -2144,28 +2169,6 @@ struct imm_ntfy_from_isp {
3485     #define REQUEST_ENTRY_SIZE (sizeof(request_t))
3486    
3487    
3488     -/*
3489     - * 24 bit port ID type definition.
3490     - */
3491     -typedef union {
3492     - uint32_t b24 : 24;
3493     -
3494     - struct {
3495     -#ifdef __BIG_ENDIAN
3496     - uint8_t domain;
3497     - uint8_t area;
3498     - uint8_t al_pa;
3499     -#elif defined(__LITTLE_ENDIAN)
3500     - uint8_t al_pa;
3501     - uint8_t area;
3502     - uint8_t domain;
3503     -#else
3504     -#error "__BIG_ENDIAN or __LITTLE_ENDIAN must be defined!"
3505     -#endif
3506     - uint8_t rsvd_1;
3507     - } b;
3508     -} port_id_t;
3509     -#define INVALID_PORT_ID 0xFFFFFF
3510    
3511     /*
3512     * Switch info gathering structure.
3513     @@ -4082,6 +4085,7 @@ typedef struct scsi_qla_host {
3514     #define LOOP_READY 5
3515     #define LOOP_DEAD 6
3516    
3517     + unsigned long relogin_jif;
3518     unsigned long dpc_flags;
3519     #define RESET_MARKER_NEEDED 0 /* Send marker to ISP. */
3520     #define RESET_ACTIVE 1
3521     @@ -4223,6 +4227,7 @@ typedef struct scsi_qla_host {
3522     wait_queue_head_t fcport_waitQ;
3523     wait_queue_head_t vref_waitq;
3524     uint8_t min_link_speed_feat;
3525     + struct list_head gpnid_list;
3526     } scsi_qla_host_t;
3527    
3528     struct qla27xx_image_status {
3529     diff --git a/drivers/scsi/qla2xxx/qla_gs.c b/drivers/scsi/qla2xxx/qla_gs.c
3530     index bc3db6abc9a0..59ecc4eda6cd 100644
3531     --- a/drivers/scsi/qla2xxx/qla_gs.c
3532     +++ b/drivers/scsi/qla2xxx/qla_gs.c
3533     @@ -175,6 +175,9 @@ qla2x00_chk_ms_status(scsi_qla_host_t *vha, ms_iocb_entry_t *ms_pkt,
3534     set_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags);
3535     }
3536     break;
3537     + case CS_TIMEOUT:
3538     + rval = QLA_FUNCTION_TIMEOUT;
3539     + /* drop through */
3540     default:
3541     ql_dbg(ql_dbg_disc, vha, 0x2033,
3542     "%s failed, completion status (%x) on port_id: "
3543     @@ -2833,7 +2836,7 @@ void qla24xx_handle_gidpn_event(scsi_qla_host_t *vha, struct event_arg *ea)
3544     }
3545     } else { /* fcport->d_id.b24 != ea->id.b24 */
3546     fcport->d_id.b24 = ea->id.b24;
3547     - if (fcport->deleted == QLA_SESS_DELETED) {
3548     + if (fcport->deleted != QLA_SESS_DELETED) {
3549     ql_dbg(ql_dbg_disc, vha, 0x2021,
3550     "%s %d %8phC post del sess\n",
3551     __func__, __LINE__, fcport->port_name);
3552     @@ -2889,9 +2892,22 @@ static void qla2x00_async_gidpn_sp_done(void *s, int res)
3553     ea.rc = res;
3554     ea.event = FCME_GIDPN_DONE;
3555    
3556     - ql_dbg(ql_dbg_disc, vha, 0x204f,
3557     - "Async done-%s res %x, WWPN %8phC ID %3phC \n",
3558     - sp->name, res, fcport->port_name, id);
3559     + if (res == QLA_FUNCTION_TIMEOUT) {
3560     + ql_dbg(ql_dbg_disc, sp->vha, 0xffff,
3561     + "Async done-%s WWPN %8phC timed out.\n",
3562     + sp->name, fcport->port_name);
3563     + qla24xx_post_gidpn_work(sp->vha, fcport);
3564     + sp->free(sp);
3565     + return;
3566     + } else if (res) {
3567     + ql_dbg(ql_dbg_disc, sp->vha, 0xffff,
3568     + "Async done-%s fail res %x, WWPN %8phC\n",
3569     + sp->name, res, fcport->port_name);
3570     + } else {
3571     + ql_dbg(ql_dbg_disc, vha, 0x204f,
3572     + "Async done-%s good WWPN %8phC ID %3phC\n",
3573     + sp->name, fcport->port_name, id);
3574     + }
3575    
3576     qla2x00_fcport_event_handler(vha, &ea);
3577    
3578     @@ -3205,11 +3221,18 @@ static void qla2x00_async_gpnid_sp_done(void *s, int res)
3579     (struct ct_sns_rsp *)sp->u.iocb_cmd.u.ctarg.rsp;
3580     struct event_arg ea;
3581     struct qla_work_evt *e;
3582     + unsigned long flags;
3583    
3584     - ql_dbg(ql_dbg_disc, vha, 0x2066,
3585     - "Async done-%s res %x ID %3phC. %8phC\n",
3586     - sp->name, res, ct_req->req.port_id.port_id,
3587     - ct_rsp->rsp.gpn_id.port_name);
3588     + if (res)
3589     + ql_dbg(ql_dbg_disc, vha, 0x2066,
3590     + "Async done-%s fail res %x rscn gen %d ID %3phC. %8phC\n",
3591     + sp->name, res, sp->gen1, ct_req->req.port_id.port_id,
3592     + ct_rsp->rsp.gpn_id.port_name);
3593     + else
3594     + ql_dbg(ql_dbg_disc, vha, 0x2066,
3595     + "Async done-%s good rscn gen %d ID %3phC. %8phC\n",
3596     + sp->name, sp->gen1, ct_req->req.port_id.port_id,
3597     + ct_rsp->rsp.gpn_id.port_name);
3598    
3599     memset(&ea, 0, sizeof(ea));
3600     memcpy(ea.port_name, ct_rsp->rsp.gpn_id.port_name, WWN_SIZE);
3601     @@ -3220,6 +3243,22 @@ static void qla2x00_async_gpnid_sp_done(void *s, int res)
3602     ea.rc = res;
3603     ea.event = FCME_GPNID_DONE;
3604    
3605     + spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags);
3606     + list_del(&sp->elem);
3607     + spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags);
3608     +
3609     + if (res) {
3610     + if (res == QLA_FUNCTION_TIMEOUT)
3611     + qla24xx_post_gpnid_work(sp->vha, &ea.id);
3612     + sp->free(sp);
3613     + return;
3614     + } else if (sp->gen1) {
3615     + /* There was anoter RSNC for this Nport ID */
3616     + qla24xx_post_gpnid_work(sp->vha, &ea.id);
3617     + sp->free(sp);
3618     + return;
3619     + }
3620     +
3621     qla2x00_fcport_event_handler(vha, &ea);
3622    
3623     e = qla2x00_alloc_work(vha, QLA_EVT_GPNID_DONE);
3624     @@ -3253,8 +3292,9 @@ int qla24xx_async_gpnid(scsi_qla_host_t *vha, port_id_t *id)
3625     {
3626     int rval = QLA_FUNCTION_FAILED;
3627     struct ct_sns_req *ct_req;
3628     - srb_t *sp;
3629     + srb_t *sp, *tsp;
3630     struct ct_sns_pkt *ct_sns;
3631     + unsigned long flags;
3632    
3633     if (!vha->flags.online)
3634     goto done;
3635     @@ -3265,8 +3305,22 @@ int qla24xx_async_gpnid(scsi_qla_host_t *vha, port_id_t *id)
3636    
3637     sp->type = SRB_CT_PTHRU_CMD;
3638     sp->name = "gpnid";
3639     + sp->u.iocb_cmd.u.ctarg.id = *id;
3640     + sp->gen1 = 0;
3641     qla2x00_init_timer(sp, qla2x00_get_async_timeout(vha) + 2);
3642    
3643     + spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags);
3644     + list_for_each_entry(tsp, &vha->gpnid_list, elem) {
3645     + if (tsp->u.iocb_cmd.u.ctarg.id.b24 == id->b24) {
3646     + tsp->gen1++;
3647     + spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags);
3648     + sp->free(sp);
3649     + goto done;
3650     + }
3651     + }
3652     + list_add_tail(&sp->elem, &vha->gpnid_list);
3653     + spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags);
3654     +
3655     sp->u.iocb_cmd.u.ctarg.req = dma_alloc_coherent(&vha->hw->pdev->dev,
3656     sizeof(struct ct_sns_pkt), &sp->u.iocb_cmd.u.ctarg.req_dma,
3657     GFP_KERNEL);
3658     diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
3659     index b5b48ddca962..9603886737b5 100644
3660     --- a/drivers/scsi/qla2xxx/qla_init.c
3661     +++ b/drivers/scsi/qla2xxx/qla_init.c
3662     @@ -864,6 +864,7 @@ void qla24xx_handle_gpdb_event(scsi_qla_host_t *vha, struct event_arg *ea)
3663     int rval = ea->rc;
3664     fc_port_t *fcport = ea->fcport;
3665     unsigned long flags;
3666     + u16 opt = ea->sp->u.iocb_cmd.u.mbx.out_mb[10];
3667    
3668     fcport->flags &= ~FCF_ASYNC_SENT;
3669    
3670     @@ -894,7 +895,8 @@ void qla24xx_handle_gpdb_event(scsi_qla_host_t *vha, struct event_arg *ea)
3671     }
3672    
3673     spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags);
3674     - ea->fcport->login_gen++;
3675     + if (opt != PDO_FORCE_ADISC)
3676     + ea->fcport->login_gen++;
3677     ea->fcport->deleted = 0;
3678     ea->fcport->logout_on_delete = 1;
3679    
3680     @@ -918,6 +920,13 @@ void qla24xx_handle_gpdb_event(scsi_qla_host_t *vha, struct event_arg *ea)
3681    
3682     qla24xx_post_gpsc_work(vha, fcport);
3683     }
3684     + } else if (ea->fcport->login_succ) {
3685     + /*
3686     + * We have an existing session. A late RSCN delivery
3687     + * must have triggered the session to be re-validate.
3688     + * session is still valid.
3689     + */
3690     + fcport->disc_state = DSC_LOGIN_COMPLETE;
3691     }
3692     spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags);
3693     } /* gpdb event */
3694     @@ -964,7 +973,7 @@ int qla24xx_fcport_handle_login(struct scsi_qla_host *vha, fc_port_t *fcport)
3695     ql_dbg(ql_dbg_disc, vha, 0x20bd,
3696     "%s %d %8phC post gnl\n",
3697     __func__, __LINE__, fcport->port_name);
3698     - qla24xx_async_gnl(vha, fcport);
3699     + qla24xx_post_gnl_work(vha, fcport);
3700     } else {
3701     ql_dbg(ql_dbg_disc, vha, 0x20bf,
3702     "%s %d %8phC post login\n",
3703     @@ -1133,7 +1142,7 @@ void qla24xx_handle_relogin_event(scsi_qla_host_t *vha,
3704     ql_dbg(ql_dbg_disc, vha, 0x20e9, "%s %d %8phC post gidpn\n",
3705     __func__, __LINE__, fcport->port_name);
3706    
3707     - qla24xx_async_gidpn(vha, fcport);
3708     + qla24xx_post_gidpn_work(vha, fcport);
3709     return;
3710     }
3711    
3712     @@ -1348,6 +1357,7 @@ qla24xx_abort_sp_done(void *ptr, int res)
3713     srb_t *sp = ptr;
3714     struct srb_iocb *abt = &sp->u.iocb_cmd;
3715    
3716     + del_timer(&sp->u.iocb_cmd.timer);
3717     complete(&abt->u.abt.comp);
3718     }
3719    
3720     @@ -1445,6 +1455,8 @@ static void
3721     qla24xx_handle_plogi_done_event(struct scsi_qla_host *vha, struct event_arg *ea)
3722     {
3723     port_id_t cid; /* conflict Nport id */
3724     + u16 lid;
3725     + struct fc_port *conflict_fcport;
3726    
3727     switch (ea->data[0]) {
3728     case MBS_COMMAND_COMPLETE:
3729     @@ -1460,8 +1472,12 @@ qla24xx_handle_plogi_done_event(struct scsi_qla_host *vha, struct event_arg *ea)
3730     qla24xx_post_prli_work(vha, ea->fcport);
3731     } else {
3732     ql_dbg(ql_dbg_disc, vha, 0x20ea,
3733     - "%s %d %8phC post gpdb\n",
3734     - __func__, __LINE__, ea->fcport->port_name);
3735     + "%s %d %8phC LoopID 0x%x in use with %06x. post gnl\n",
3736     + __func__, __LINE__, ea->fcport->port_name,
3737     + ea->fcport->loop_id, ea->fcport->d_id.b24);
3738     +
3739     + set_bit(ea->fcport->loop_id, vha->hw->loop_id_map);
3740     + ea->fcport->loop_id = FC_NO_LOOP_ID;
3741     ea->fcport->chip_reset = vha->hw->base_qpair->chip_reset;
3742     ea->fcport->logout_on_delete = 1;
3743     ea->fcport->send_els_logo = 0;
3744     @@ -1506,8 +1522,38 @@ qla24xx_handle_plogi_done_event(struct scsi_qla_host *vha, struct event_arg *ea)
3745     ea->fcport->d_id.b.domain, ea->fcport->d_id.b.area,
3746     ea->fcport->d_id.b.al_pa);
3747    
3748     - qla2x00_clear_loop_id(ea->fcport);
3749     - qla24xx_post_gidpn_work(vha, ea->fcport);
3750     + lid = ea->iop[1] & 0xffff;
3751     + qlt_find_sess_invalidate_other(vha,
3752     + wwn_to_u64(ea->fcport->port_name),
3753     + ea->fcport->d_id, lid, &conflict_fcport);
3754     +
3755     + if (conflict_fcport) {
3756     + /*
3757     + * Another fcport share the same loop_id/nport id.
3758     + * Conflict fcport needs to finish cleanup before this
3759     + * fcport can proceed to login.
3760     + */
3761     + conflict_fcport->conflict = ea->fcport;
3762     + ea->fcport->login_pause = 1;
3763     +
3764     + ql_dbg(ql_dbg_disc, vha, 0x20ed,
3765     + "%s %d %8phC NPortId %06x inuse with loopid 0x%x. post gidpn\n",
3766     + __func__, __LINE__, ea->fcport->port_name,
3767     + ea->fcport->d_id.b24, lid);
3768     + qla2x00_clear_loop_id(ea->fcport);
3769     + qla24xx_post_gidpn_work(vha, ea->fcport);
3770     + } else {
3771     + ql_dbg(ql_dbg_disc, vha, 0x20ed,
3772     + "%s %d %8phC NPortId %06x inuse with loopid 0x%x. sched delete\n",
3773     + __func__, __LINE__, ea->fcport->port_name,
3774     + ea->fcport->d_id.b24, lid);
3775     +
3776     + qla2x00_clear_loop_id(ea->fcport);
3777     + set_bit(lid, vha->hw->loop_id_map);
3778     + ea->fcport->loop_id = lid;
3779     + ea->fcport->keep_nport_handle = 0;
3780     + qlt_schedule_sess_for_deletion(ea->fcport, false);
3781     + }
3782     break;
3783     }
3784     return;
3785     @@ -8047,9 +8093,6 @@ int qla2xxx_delete_qpair(struct scsi_qla_host *vha, struct qla_qpair *qpair)
3786     int ret = QLA_FUNCTION_FAILED;
3787     struct qla_hw_data *ha = qpair->hw;
3788    
3789     - if (!vha->flags.qpairs_req_created && !vha->flags.qpairs_rsp_created)
3790     - goto fail;
3791     -
3792     qpair->delete_in_progress = 1;
3793     while (atomic_read(&qpair->ref_count))
3794     msleep(500);
3795     @@ -8057,6 +8100,7 @@ int qla2xxx_delete_qpair(struct scsi_qla_host *vha, struct qla_qpair *qpair)
3796     ret = qla25xx_delete_req_que(vha, qpair->req);
3797     if (ret != QLA_SUCCESS)
3798     goto fail;
3799     +
3800     ret = qla25xx_delete_rsp_que(vha, qpair->rsp);
3801     if (ret != QLA_SUCCESS)
3802     goto fail;
3803     diff --git a/drivers/scsi/qla2xxx/qla_iocb.c b/drivers/scsi/qla2xxx/qla_iocb.c
3804     index 2f94159186d7..63bea6a65d51 100644
3805     --- a/drivers/scsi/qla2xxx/qla_iocb.c
3806     +++ b/drivers/scsi/qla2xxx/qla_iocb.c
3807     @@ -2392,26 +2392,13 @@ qla2x00_els_dcmd_iocb_timeout(void *data)
3808     srb_t *sp = data;
3809     fc_port_t *fcport = sp->fcport;
3810     struct scsi_qla_host *vha = sp->vha;
3811     - struct qla_hw_data *ha = vha->hw;
3812     struct srb_iocb *lio = &sp->u.iocb_cmd;
3813     - unsigned long flags = 0;
3814    
3815     ql_dbg(ql_dbg_io, vha, 0x3069,
3816     "%s Timeout, hdl=%x, portid=%02x%02x%02x\n",
3817     sp->name, sp->handle, fcport->d_id.b.domain, fcport->d_id.b.area,
3818     fcport->d_id.b.al_pa);
3819    
3820     - /* Abort the exchange */
3821     - spin_lock_irqsave(&ha->hardware_lock, flags);
3822     - if (ha->isp_ops->abort_command(sp)) {
3823     - ql_dbg(ql_dbg_io, vha, 0x3070,
3824     - "mbx abort_command failed.\n");
3825     - } else {
3826     - ql_dbg(ql_dbg_io, vha, 0x3071,
3827     - "mbx abort_command success.\n");
3828     - }
3829     - spin_unlock_irqrestore(&ha->hardware_lock, flags);
3830     -
3831     complete(&lio->u.els_logo.comp);
3832     }
3833    
3834     diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c
3835     index 9d9668aac6f6..d95b879c2bca 100644
3836     --- a/drivers/scsi/qla2xxx/qla_isr.c
3837     +++ b/drivers/scsi/qla2xxx/qla_isr.c
3838     @@ -1569,7 +1569,7 @@ qla24xx_els_ct_entry(scsi_qla_host_t *vha, struct req_que *req,
3839     /* borrowing sts_entry_24xx.comp_status.
3840     same location as ct_entry_24xx.comp_status
3841     */
3842     - res = qla2x00_chk_ms_status(vha, (ms_iocb_entry_t *)pkt,
3843     + res = qla2x00_chk_ms_status(sp->vha, (ms_iocb_entry_t *)pkt,
3844     (struct ct_sns_rsp *)sp->u.iocb_cmd.u.ctarg.rsp,
3845     sp->name);
3846     sp->done(sp, res);
3847     @@ -2341,7 +2341,6 @@ qla2x00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt)
3848     int res = 0;
3849     uint16_t state_flags = 0;
3850     uint16_t retry_delay = 0;
3851     - uint8_t no_logout = 0;
3852    
3853     sts = (sts_entry_t *) pkt;
3854     sts24 = (struct sts_entry_24xx *) pkt;
3855     @@ -2612,7 +2611,6 @@ qla2x00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt)
3856     break;
3857    
3858     case CS_PORT_LOGGED_OUT:
3859     - no_logout = 1;
3860     case CS_PORT_CONFIG_CHG:
3861     case CS_PORT_BUSY:
3862     case CS_INCOMPLETE:
3863     @@ -2643,9 +2641,6 @@ qla2x00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt)
3864     port_state_str[atomic_read(&fcport->state)],
3865     comp_status);
3866    
3867     - if (no_logout)
3868     - fcport->logout_on_delete = 0;
3869     -
3870     qla2x00_mark_device_lost(fcport->vha, fcport, 1, 1);
3871     qlt_schedule_sess_for_deletion_lock(fcport);
3872     }
3873     diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c
3874     index 99502fa90810..2d909e12e23a 100644
3875     --- a/drivers/scsi/qla2xxx/qla_mbx.c
3876     +++ b/drivers/scsi/qla2xxx/qla_mbx.c
3877     @@ -6078,8 +6078,7 @@ int __qla24xx_parse_gpdb(struct scsi_qla_host *vha, fc_port_t *fcport,
3878     }
3879    
3880     /* Check for logged in state. */
3881     - if (current_login_state != PDS_PRLI_COMPLETE &&
3882     - last_login_state != PDS_PRLI_COMPLETE) {
3883     + if (current_login_state != PDS_PRLI_COMPLETE) {
3884     ql_dbg(ql_dbg_mbx, vha, 0x119a,
3885     "Unable to verify login-state (%x/%x) for loop_id %x.\n",
3886     current_login_state, last_login_state, fcport->loop_id);
3887     diff --git a/drivers/scsi/qla2xxx/qla_mid.c b/drivers/scsi/qla2xxx/qla_mid.c
3888     index c0f8f6c17b79..78df7cfca568 100644
3889     --- a/drivers/scsi/qla2xxx/qla_mid.c
3890     +++ b/drivers/scsi/qla2xxx/qla_mid.c
3891     @@ -343,15 +343,21 @@ qla2x00_do_dpc_vp(scsi_qla_host_t *vha)
3892     "FCPort update end.\n");
3893     }
3894    
3895     - if ((test_and_clear_bit(RELOGIN_NEEDED, &vha->dpc_flags)) &&
3896     - !test_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags) &&
3897     - atomic_read(&vha->loop_state) != LOOP_DOWN) {
3898     -
3899     - ql_dbg(ql_dbg_dpc, vha, 0x4018,
3900     - "Relogin needed scheduled.\n");
3901     - qla2x00_relogin(vha);
3902     - ql_dbg(ql_dbg_dpc, vha, 0x4019,
3903     - "Relogin needed end.\n");
3904     + if (test_bit(RELOGIN_NEEDED, &vha->dpc_flags) &&
3905     + !test_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags) &&
3906     + atomic_read(&vha->loop_state) != LOOP_DOWN) {
3907     +
3908     + if (!vha->relogin_jif ||
3909     + time_after_eq(jiffies, vha->relogin_jif)) {
3910     + vha->relogin_jif = jiffies + HZ;
3911     + clear_bit(RELOGIN_NEEDED, &vha->dpc_flags);
3912     +
3913     + ql_dbg(ql_dbg_dpc, vha, 0x4018,
3914     + "Relogin needed scheduled.\n");
3915     + qla2x00_relogin(vha);
3916     + ql_dbg(ql_dbg_dpc, vha, 0x4019,
3917     + "Relogin needed end.\n");
3918     + }
3919     }
3920    
3921     if (test_and_clear_bit(RESET_MARKER_NEEDED, &vha->dpc_flags) &&
3922     @@ -569,14 +575,15 @@ qla25xx_free_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp)
3923     int
3924     qla25xx_delete_req_que(struct scsi_qla_host *vha, struct req_que *req)
3925     {
3926     - int ret = -1;
3927     + int ret = QLA_SUCCESS;
3928    
3929     - if (req) {
3930     + if (req && vha->flags.qpairs_req_created) {
3931     req->options |= BIT_0;
3932     ret = qla25xx_init_req_que(vha, req);
3933     + if (ret != QLA_SUCCESS)
3934     + return QLA_FUNCTION_FAILED;
3935     }
3936     - if (ret == QLA_SUCCESS)
3937     - qla25xx_free_req_que(vha, req);
3938     + qla25xx_free_req_que(vha, req);
3939    
3940     return ret;
3941     }
3942     @@ -584,14 +591,15 @@ qla25xx_delete_req_que(struct scsi_qla_host *vha, struct req_que *req)
3943     int
3944     qla25xx_delete_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp)
3945     {
3946     - int ret = -1;
3947     + int ret = QLA_SUCCESS;
3948    
3949     - if (rsp) {
3950     + if (rsp && vha->flags.qpairs_rsp_created) {
3951     rsp->options |= BIT_0;
3952     ret = qla25xx_init_rsp_que(vha, rsp);
3953     + if (ret != QLA_SUCCESS)
3954     + return QLA_FUNCTION_FAILED;
3955     }
3956     - if (ret == QLA_SUCCESS)
3957     - qla25xx_free_rsp_que(vha, rsp);
3958     + qla25xx_free_rsp_que(vha, rsp);
3959    
3960     return ret;
3961     }
3962     diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
3963     index 6eaaa326e508..cfe7654f6bd3 100644
3964     --- a/drivers/scsi/qla2xxx/qla_os.c
3965     +++ b/drivers/scsi/qla2xxx/qla_os.c
3966     @@ -3003,9 +3003,6 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
3967     base_vha = qla2x00_create_host(sht, ha);
3968     if (!base_vha) {
3969     ret = -ENOMEM;
3970     - qla2x00_mem_free(ha);
3971     - qla2x00_free_req_que(ha, req);
3972     - qla2x00_free_rsp_que(ha, rsp);
3973     goto probe_hw_failed;
3974     }
3975    
3976     @@ -3066,7 +3063,7 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
3977     /* Set up the irqs */
3978     ret = qla2x00_request_irqs(ha, rsp);
3979     if (ret)
3980     - goto probe_init_failed;
3981     + goto probe_hw_failed;
3982    
3983     /* Alloc arrays of request and response ring ptrs */
3984     if (!qla2x00_alloc_queues(ha, req, rsp)) {
3985     @@ -3177,10 +3174,11 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
3986     host->can_queue, base_vha->req,
3987     base_vha->mgmt_svr_loop_id, host->sg_tablesize);
3988    
3989     + ha->wq = alloc_workqueue("qla2xxx_wq", WQ_MEM_RECLAIM, 0);
3990     +
3991     if (ha->mqenable) {
3992     bool mq = false;
3993     bool startit = false;
3994     - ha->wq = alloc_workqueue("qla2xxx_wq", WQ_MEM_RECLAIM, 0);
3995    
3996     if (QLA_TGT_MODE_ENABLED()) {
3997     mq = true;
3998     @@ -3374,6 +3372,9 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
3999     scsi_host_put(base_vha->host);
4000    
4001     probe_hw_failed:
4002     + qla2x00_mem_free(ha);
4003     + qla2x00_free_req_que(ha, req);
4004     + qla2x00_free_rsp_que(ha, rsp);
4005     qla2x00_clear_drv_active(ha);
4006    
4007     iospace_config_failed:
4008     @@ -4498,6 +4499,7 @@ struct scsi_qla_host *qla2x00_create_host(struct scsi_host_template *sht,
4009     INIT_LIST_HEAD(&vha->qp_list);
4010     INIT_LIST_HEAD(&vha->gnl.fcports);
4011     INIT_LIST_HEAD(&vha->nvme_rport_list);
4012     + INIT_LIST_HEAD(&vha->gpnid_list);
4013    
4014     spin_lock_init(&vha->work_lock);
4015     spin_lock_init(&vha->cmd_list_lock);
4016     @@ -4732,11 +4734,11 @@ void qla24xx_create_new_sess(struct scsi_qla_host *vha, struct qla_work_evt *e)
4017     } else {
4018     list_add_tail(&fcport->list, &vha->vp_fcports);
4019    
4020     - if (pla) {
4021     - qlt_plogi_ack_link(vha, pla, fcport,
4022     - QLT_PLOGI_LINK_SAME_WWN);
4023     - pla->ref_count--;
4024     - }
4025     + }
4026     + if (pla) {
4027     + qlt_plogi_ack_link(vha, pla, fcport,
4028     + QLT_PLOGI_LINK_SAME_WWN);
4029     + pla->ref_count--;
4030     }
4031     }
4032     spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags);
4033     @@ -4858,7 +4860,7 @@ void qla2x00_relogin(struct scsi_qla_host *vha)
4034     */
4035     if (atomic_read(&fcport->state) != FCS_ONLINE &&
4036     fcport->login_retry && !(fcport->flags & FCF_ASYNC_SENT)) {
4037     - fcport->login_retry--;
4038     +
4039     if (fcport->flags & FCF_FABRIC_DEVICE) {
4040     ql_dbg(ql_dbg_disc, fcport->vha, 0x2108,
4041     "%s %8phC DS %d LS %d\n", __func__,
4042     @@ -4869,6 +4871,7 @@ void qla2x00_relogin(struct scsi_qla_host *vha)
4043     ea.fcport = fcport;
4044     qla2x00_fcport_event_handler(vha, &ea);
4045     } else {
4046     + fcport->login_retry--;
4047     status = qla2x00_local_device_login(vha,
4048     fcport);
4049     if (status == QLA_SUCCESS) {
4050     @@ -5851,16 +5854,21 @@ qla2x00_do_dpc(void *data)
4051     }
4052    
4053     /* Retry each device up to login retry count */
4054     - if ((test_and_clear_bit(RELOGIN_NEEDED,
4055     - &base_vha->dpc_flags)) &&
4056     + if (test_bit(RELOGIN_NEEDED, &base_vha->dpc_flags) &&
4057     !test_bit(LOOP_RESYNC_NEEDED, &base_vha->dpc_flags) &&
4058     atomic_read(&base_vha->loop_state) != LOOP_DOWN) {
4059    
4060     - ql_dbg(ql_dbg_dpc, base_vha, 0x400d,
4061     - "Relogin scheduled.\n");
4062     - qla2x00_relogin(base_vha);
4063     - ql_dbg(ql_dbg_dpc, base_vha, 0x400e,
4064     - "Relogin end.\n");
4065     + if (!base_vha->relogin_jif ||
4066     + time_after_eq(jiffies, base_vha->relogin_jif)) {
4067     + base_vha->relogin_jif = jiffies + HZ;
4068     + clear_bit(RELOGIN_NEEDED, &base_vha->dpc_flags);
4069     +
4070     + ql_dbg(ql_dbg_dpc, base_vha, 0x400d,
4071     + "Relogin scheduled.\n");
4072     + qla2x00_relogin(base_vha);
4073     + ql_dbg(ql_dbg_dpc, base_vha, 0x400e,
4074     + "Relogin end.\n");
4075     + }
4076     }
4077     loop_resync_check:
4078     if (test_and_clear_bit(LOOP_RESYNC_NEEDED,
4079     @@ -6591,9 +6599,14 @@ qla83xx_disable_laser(scsi_qla_host_t *vha)
4080    
4081     static int qla2xxx_map_queues(struct Scsi_Host *shost)
4082     {
4083     + int rc;
4084     scsi_qla_host_t *vha = (scsi_qla_host_t *)shost->hostdata;
4085    
4086     - return blk_mq_pci_map_queues(&shost->tag_set, vha->hw->pdev);
4087     + if (USER_CTRL_IRQ(vha->hw))
4088     + rc = blk_mq_map_queues(&shost->tag_set);
4089     + else
4090     + rc = blk_mq_pci_map_queues(&shost->tag_set, vha->hw->pdev);
4091     + return rc;
4092     }
4093    
4094     static const struct pci_error_handlers qla2xxx_err_handler = {
4095     diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c
4096     index f05cfc83c9c8..040a76011ffa 100644
4097     --- a/drivers/scsi/qla2xxx/qla_target.c
4098     +++ b/drivers/scsi/qla2xxx/qla_target.c
4099     @@ -665,7 +665,7 @@ int qla24xx_async_notify_ack(scsi_qla_host_t *vha, fc_port_t *fcport,
4100     qla2x00_init_timer(sp, qla2x00_get_async_timeout(vha)+2);
4101    
4102     sp->u.iocb_cmd.u.nack.ntfy = ntfy;
4103     -
4104     + sp->u.iocb_cmd.timeout = qla2x00_async_iocb_timeout;
4105     sp->done = qla2x00_async_nack_sp_done;
4106    
4107     rval = qla2x00_start_sp(sp);
4108     @@ -974,7 +974,7 @@ static void qlt_free_session_done(struct work_struct *work)
4109     qlt_send_first_logo(vha, &logo);
4110     }
4111    
4112     - if (sess->logout_on_delete) {
4113     + if (sess->logout_on_delete && sess->loop_id != FC_NO_LOOP_ID) {
4114     int rc;
4115    
4116     rc = qla2x00_post_async_logout_work(vha, sess, NULL);
4117     @@ -1033,8 +1033,7 @@ static void qlt_free_session_done(struct work_struct *work)
4118     sess->login_succ = 0;
4119     }
4120    
4121     - if (sess->chip_reset != ha->base_qpair->chip_reset)
4122     - qla2x00_clear_loop_id(sess);
4123     + qla2x00_clear_loop_id(sess);
4124    
4125     if (sess->conflict) {
4126     sess->conflict->login_pause = 0;
4127     @@ -1205,7 +1204,8 @@ void qlt_schedule_sess_for_deletion(struct fc_port *sess,
4128     ql_dbg(ql_dbg_tgt, sess->vha, 0xe001,
4129     "Scheduling sess %p for deletion\n", sess);
4130    
4131     - schedule_work(&sess->del_work);
4132     + INIT_WORK(&sess->del_work, qla24xx_delete_sess_fn);
4133     + queue_work(sess->vha->hw->wq, &sess->del_work);
4134     }
4135    
4136     void qlt_schedule_sess_for_deletion_lock(struct fc_port *sess)
4137     @@ -1560,8 +1560,11 @@ static void qlt_release(struct qla_tgt *tgt)
4138    
4139     btree_destroy64(&tgt->lun_qpair_map);
4140    
4141     - if (ha->tgt.tgt_ops && ha->tgt.tgt_ops->remove_target)
4142     - ha->tgt.tgt_ops->remove_target(vha);
4143     + if (vha->vp_idx)
4144     + if (ha->tgt.tgt_ops &&
4145     + ha->tgt.tgt_ops->remove_target &&
4146     + vha->vha_tgt.target_lport_ptr)
4147     + ha->tgt.tgt_ops->remove_target(vha);
4148    
4149     vha->vha_tgt.qla_tgt = NULL;
4150    
4151     @@ -3708,7 +3711,7 @@ static int qlt_term_ctio_exchange(struct qla_qpair *qpair, void *ctio,
4152     term = 1;
4153    
4154     if (term)
4155     - qlt_term_ctio_exchange(qpair, ctio, cmd, status);
4156     + qlt_send_term_exchange(qpair, cmd, &cmd->atio, 1, 0);
4157    
4158     return term;
4159     }
4160     @@ -4584,9 +4587,9 @@ qlt_find_sess_invalidate_other(scsi_qla_host_t *vha, uint64_t wwn,
4161     "Invalidating sess %p loop_id %d wwn %llx.\n",
4162     other_sess, other_sess->loop_id, other_wwn);
4163    
4164     -
4165     other_sess->keep_nport_handle = 1;
4166     - *conflict_sess = other_sess;
4167     + if (other_sess->disc_state != DSC_DELETED)
4168     + *conflict_sess = other_sess;
4169     qlt_schedule_sess_for_deletion(other_sess,
4170     true);
4171     }
4172     @@ -5755,7 +5758,7 @@ static fc_port_t *qlt_get_port_database(struct scsi_qla_host *vha,
4173     unsigned long flags;
4174     u8 newfcport = 0;
4175    
4176     - fcport = kzalloc(sizeof(*fcport), GFP_KERNEL);
4177     + fcport = qla2x00_alloc_fcport(vha, GFP_KERNEL);
4178     if (!fcport) {
4179     ql_dbg(ql_dbg_tgt_mgt, vha, 0xf06f,
4180     "qla_target(%d): Allocation of tmp FC port failed",
4181     @@ -5784,6 +5787,7 @@ static fc_port_t *qlt_get_port_database(struct scsi_qla_host *vha,
4182     tfcp->port_type = fcport->port_type;
4183     tfcp->supported_classes = fcport->supported_classes;
4184     tfcp->flags |= fcport->flags;
4185     + tfcp->scan_state = QLA_FCPORT_FOUND;
4186    
4187     del = fcport;
4188     fcport = tfcp;
4189     diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c
4190     index fa504ba83ade..cf70f0bb8375 100644
4191     --- a/drivers/scsi/scsi_error.c
4192     +++ b/drivers/scsi/scsi_error.c
4193     @@ -222,7 +222,8 @@ static void scsi_eh_reset(struct scsi_cmnd *scmd)
4194    
4195     static void scsi_eh_inc_host_failed(struct rcu_head *head)
4196     {
4197     - struct Scsi_Host *shost = container_of(head, typeof(*shost), rcu);
4198     + struct scsi_cmnd *scmd = container_of(head, typeof(*scmd), rcu);
4199     + struct Scsi_Host *shost = scmd->device->host;
4200     unsigned long flags;
4201    
4202     spin_lock_irqsave(shost->host_lock, flags);
4203     @@ -258,7 +259,7 @@ void scsi_eh_scmd_add(struct scsi_cmnd *scmd)
4204     * Ensure that all tasks observe the host state change before the
4205     * host_failed change.
4206     */
4207     - call_rcu(&shost->rcu, scsi_eh_inc_host_failed);
4208     + call_rcu(&scmd->rcu, scsi_eh_inc_host_failed);
4209     }
4210    
4211     /**
4212     diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
4213     index 0d3696e9dddd..359386730523 100644
4214     --- a/drivers/scsi/scsi_lib.c
4215     +++ b/drivers/scsi/scsi_lib.c
4216     @@ -670,6 +670,7 @@ static bool scsi_end_request(struct request *req, blk_status_t error,
4217     if (!blk_rq_is_scsi(req)) {
4218     WARN_ON_ONCE(!(cmd->flags & SCMD_INITIALIZED));
4219     cmd->flags &= ~SCMD_INITIALIZED;
4220     + destroy_rcu_head(&cmd->rcu);
4221     }
4222    
4223     if (req->mq_ctx) {
4224     @@ -1150,6 +1151,7 @@ void scsi_initialize_rq(struct request *rq)
4225     struct scsi_cmnd *cmd = blk_mq_rq_to_pdu(rq);
4226    
4227     scsi_req_init(&cmd->req);
4228     + init_rcu_head(&cmd->rcu);
4229     cmd->jiffies_at_alloc = jiffies;
4230     cmd->retries = 0;
4231     }
4232     diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c
4233     index eb30f3e09a47..71458f493cf8 100644
4234     --- a/drivers/virtio/virtio_ring.c
4235     +++ b/drivers/virtio/virtio_ring.c
4236     @@ -428,8 +428,6 @@ static inline int virtqueue_add(struct virtqueue *_vq,
4237     i = virtio16_to_cpu(_vq->vdev, vq->vring.desc[i].next);
4238     }
4239    
4240     - vq->vq.num_free += total_sg;
4241     -
4242     if (indirect)
4243     kfree(desc);
4244    
4245     diff --git a/drivers/watchdog/hpwdt.c b/drivers/watchdog/hpwdt.c
4246     index 67fbe35ce7cf..b0a158073abd 100644
4247     --- a/drivers/watchdog/hpwdt.c
4248     +++ b/drivers/watchdog/hpwdt.c
4249     @@ -28,16 +28,7 @@
4250     #include <linux/types.h>
4251     #include <linux/uaccess.h>
4252     #include <linux/watchdog.h>
4253     -#ifdef CONFIG_HPWDT_NMI_DECODING
4254     -#include <linux/dmi.h>
4255     -#include <linux/spinlock.h>
4256     -#include <linux/nmi.h>
4257     -#include <linux/kdebug.h>
4258     -#include <linux/notifier.h>
4259     -#include <asm/set_memory.h>
4260     -#endif /* CONFIG_HPWDT_NMI_DECODING */
4261     #include <asm/nmi.h>
4262     -#include <asm/frame.h>
4263    
4264     #define HPWDT_VERSION "1.4.0"
4265     #define SECS_TO_TICKS(secs) ((secs) * 1000 / 128)
4266     @@ -48,10 +39,14 @@
4267     static unsigned int soft_margin = DEFAULT_MARGIN; /* in seconds */
4268     static unsigned int reload; /* the computed soft_margin */
4269     static bool nowayout = WATCHDOG_NOWAYOUT;
4270     +#ifdef CONFIG_HPWDT_NMI_DECODING
4271     +static unsigned int allow_kdump = 1;
4272     +#endif
4273     static char expect_release;
4274     static unsigned long hpwdt_is_open;
4275    
4276     static void __iomem *pci_mem_addr; /* the PCI-memory address */
4277     +static unsigned long __iomem *hpwdt_nmistat;
4278     static unsigned long __iomem *hpwdt_timer_reg;
4279     static unsigned long __iomem *hpwdt_timer_con;
4280    
4281     @@ -62,373 +57,6 @@ static const struct pci_device_id hpwdt_devices[] = {
4282     };
4283     MODULE_DEVICE_TABLE(pci, hpwdt_devices);
4284    
4285     -#ifdef CONFIG_HPWDT_NMI_DECODING
4286     -#define PCI_BIOS32_SD_VALUE 0x5F32335F /* "_32_" */
4287     -#define CRU_BIOS_SIGNATURE_VALUE 0x55524324
4288     -#define PCI_BIOS32_PARAGRAPH_LEN 16
4289     -#define PCI_ROM_BASE1 0x000F0000
4290     -#define ROM_SIZE 0x10000
4291     -
4292     -struct bios32_service_dir {
4293     - u32 signature;
4294     - u32 entry_point;
4295     - u8 revision;
4296     - u8 length;
4297     - u8 checksum;
4298     - u8 reserved[5];
4299     -};
4300     -
4301     -/* type 212 */
4302     -struct smbios_cru64_info {
4303     - u8 type;
4304     - u8 byte_length;
4305     - u16 handle;
4306     - u32 signature;
4307     - u64 physical_address;
4308     - u32 double_length;
4309     - u32 double_offset;
4310     -};
4311     -#define SMBIOS_CRU64_INFORMATION 212
4312     -
4313     -/* type 219 */
4314     -struct smbios_proliant_info {
4315     - u8 type;
4316     - u8 byte_length;
4317     - u16 handle;
4318     - u32 power_features;
4319     - u32 omega_features;
4320     - u32 reserved;
4321     - u32 misc_features;
4322     -};
4323     -#define SMBIOS_ICRU_INFORMATION 219
4324     -
4325     -
4326     -struct cmn_registers {
4327     - union {
4328     - struct {
4329     - u8 ral;
4330     - u8 rah;
4331     - u16 rea2;
4332     - };
4333     - u32 reax;
4334     - } u1;
4335     - union {
4336     - struct {
4337     - u8 rbl;
4338     - u8 rbh;
4339     - u8 reb2l;
4340     - u8 reb2h;
4341     - };
4342     - u32 rebx;
4343     - } u2;
4344     - union {
4345     - struct {
4346     - u8 rcl;
4347     - u8 rch;
4348     - u16 rec2;
4349     - };
4350     - u32 recx;
4351     - } u3;
4352     - union {
4353     - struct {
4354     - u8 rdl;
4355     - u8 rdh;
4356     - u16 red2;
4357     - };
4358     - u32 redx;
4359     - } u4;
4360     -
4361     - u32 resi;
4362     - u32 redi;
4363     - u16 rds;
4364     - u16 res;
4365     - u32 reflags;
4366     -} __attribute__((packed));
4367     -
4368     -static unsigned int hpwdt_nmi_decoding;
4369     -static unsigned int allow_kdump = 1;
4370     -static unsigned int is_icru;
4371     -static unsigned int is_uefi;
4372     -static DEFINE_SPINLOCK(rom_lock);
4373     -static void *cru_rom_addr;
4374     -static struct cmn_registers cmn_regs;
4375     -
4376     -extern asmlinkage void asminline_call(struct cmn_registers *pi86Regs,
4377     - unsigned long *pRomEntry);
4378     -
4379     -#ifdef CONFIG_X86_32
4380     -/* --32 Bit Bios------------------------------------------------------------ */
4381     -
4382     -#define HPWDT_ARCH 32
4383     -
4384     -asm(".text \n\t"
4385     - ".align 4 \n\t"
4386     - ".globl asminline_call \n"
4387     - "asminline_call: \n\t"
4388     - "pushl %ebp \n\t"
4389     - "movl %esp, %ebp \n\t"
4390     - "pusha \n\t"
4391     - "pushf \n\t"
4392     - "push %es \n\t"
4393     - "push %ds \n\t"
4394     - "pop %es \n\t"
4395     - "movl 8(%ebp),%eax \n\t"
4396     - "movl 4(%eax),%ebx \n\t"
4397     - "movl 8(%eax),%ecx \n\t"
4398     - "movl 12(%eax),%edx \n\t"
4399     - "movl 16(%eax),%esi \n\t"
4400     - "movl 20(%eax),%edi \n\t"
4401     - "movl (%eax),%eax \n\t"
4402     - "push %cs \n\t"
4403     - "call *12(%ebp) \n\t"
4404     - "pushf \n\t"
4405     - "pushl %eax \n\t"
4406     - "movl 8(%ebp),%eax \n\t"
4407     - "movl %ebx,4(%eax) \n\t"
4408     - "movl %ecx,8(%eax) \n\t"
4409     - "movl %edx,12(%eax) \n\t"
4410     - "movl %esi,16(%eax) \n\t"
4411     - "movl %edi,20(%eax) \n\t"
4412     - "movw %ds,24(%eax) \n\t"
4413     - "movw %es,26(%eax) \n\t"
4414     - "popl %ebx \n\t"
4415     - "movl %ebx,(%eax) \n\t"
4416     - "popl %ebx \n\t"
4417     - "movl %ebx,28(%eax) \n\t"
4418     - "pop %es \n\t"
4419     - "popf \n\t"
4420     - "popa \n\t"
4421     - "leave \n\t"
4422     - "ret \n\t"
4423     - ".previous");
4424     -
4425     -
4426     -/*
4427     - * cru_detect
4428     - *
4429     - * Routine Description:
4430     - * This function uses the 32-bit BIOS Service Directory record to
4431     - * search for a $CRU record.
4432     - *
4433     - * Return Value:
4434     - * 0 : SUCCESS
4435     - * <0 : FAILURE
4436     - */
4437     -static int cru_detect(unsigned long map_entry,
4438     - unsigned long map_offset)
4439     -{
4440     - void *bios32_map;
4441     - unsigned long *bios32_entrypoint;
4442     - unsigned long cru_physical_address;
4443     - unsigned long cru_length;
4444     - unsigned long physical_bios_base = 0;
4445     - unsigned long physical_bios_offset = 0;
4446     - int retval = -ENODEV;
4447     -
4448     - bios32_map = ioremap(map_entry, (2 * PAGE_SIZE));
4449     -
4450     - if (bios32_map == NULL)
4451     - return -ENODEV;
4452     -
4453     - bios32_entrypoint = bios32_map + map_offset;
4454     -
4455     - cmn_regs.u1.reax = CRU_BIOS_SIGNATURE_VALUE;
4456     -
4457     - set_memory_x((unsigned long)bios32_map, 2);
4458     - asminline_call(&cmn_regs, bios32_entrypoint);
4459     -
4460     - if (cmn_regs.u1.ral != 0) {
4461     - pr_warn("Call succeeded but with an error: 0x%x\n",
4462     - cmn_regs.u1.ral);
4463     - } else {
4464     - physical_bios_base = cmn_regs.u2.rebx;
4465     - physical_bios_offset = cmn_regs.u4.redx;
4466     - cru_length = cmn_regs.u3.recx;
4467     - cru_physical_address =
4468     - physical_bios_base + physical_bios_offset;
4469     -
4470     - /* If the values look OK, then map it in. */
4471     - if ((physical_bios_base + physical_bios_offset)) {
4472     - cru_rom_addr =
4473     - ioremap(cru_physical_address, cru_length);
4474     - if (cru_rom_addr) {
4475     - set_memory_x((unsigned long)cru_rom_addr & PAGE_MASK,
4476     - (cru_length + PAGE_SIZE - 1) >> PAGE_SHIFT);
4477     - retval = 0;
4478     - }
4479     - }
4480     -
4481     - pr_debug("CRU Base Address: 0x%lx\n", physical_bios_base);
4482     - pr_debug("CRU Offset Address: 0x%lx\n", physical_bios_offset);
4483     - pr_debug("CRU Length: 0x%lx\n", cru_length);
4484     - pr_debug("CRU Mapped Address: %p\n", &cru_rom_addr);
4485     - }
4486     - iounmap(bios32_map);
4487     - return retval;
4488     -}
4489     -
4490     -/*
4491     - * bios_checksum
4492     - */
4493     -static int bios_checksum(const char __iomem *ptr, int len)
4494     -{
4495     - char sum = 0;
4496     - int i;
4497     -
4498     - /*
4499     - * calculate checksum of size bytes. This should add up
4500     - * to zero if we have a valid header.
4501     - */
4502     - for (i = 0; i < len; i++)
4503     - sum += ptr[i];
4504     -
4505     - return ((sum == 0) && (len > 0));
4506     -}
4507     -
4508     -/*
4509     - * bios32_present
4510     - *
4511     - * Routine Description:
4512     - * This function finds the 32-bit BIOS Service Directory
4513     - *
4514     - * Return Value:
4515     - * 0 : SUCCESS
4516     - * <0 : FAILURE
4517     - */
4518     -static int bios32_present(const char __iomem *p)
4519     -{
4520     - struct bios32_service_dir *bios_32_ptr;
4521     - int length;
4522     - unsigned long map_entry, map_offset;
4523     -
4524     - bios_32_ptr = (struct bios32_service_dir *) p;
4525     -
4526     - /*
4527     - * Search for signature by checking equal to the swizzled value
4528     - * instead of calling another routine to perform a strcmp.
4529     - */
4530     - if (bios_32_ptr->signature == PCI_BIOS32_SD_VALUE) {
4531     - length = bios_32_ptr->length * PCI_BIOS32_PARAGRAPH_LEN;
4532     - if (bios_checksum(p, length)) {
4533     - /*
4534     - * According to the spec, we're looking for the
4535     - * first 4KB-aligned address below the entrypoint
4536     - * listed in the header. The Service Directory code
4537     - * is guaranteed to occupy no more than 2 4KB pages.
4538     - */
4539     - map_entry = bios_32_ptr->entry_point & ~(PAGE_SIZE - 1);
4540     - map_offset = bios_32_ptr->entry_point - map_entry;
4541     -
4542     - return cru_detect(map_entry, map_offset);
4543     - }
4544     - }
4545     - return -ENODEV;
4546     -}
4547     -
4548     -static int detect_cru_service(void)
4549     -{
4550     - char __iomem *p, *q;
4551     - int rc = -1;
4552     -
4553     - /*
4554     - * Search from 0x0f0000 through 0x0fffff, inclusive.
4555     - */
4556     - p = ioremap(PCI_ROM_BASE1, ROM_SIZE);
4557     - if (p == NULL)
4558     - return -ENOMEM;
4559     -
4560     - for (q = p; q < p + ROM_SIZE; q += 16) {
4561     - rc = bios32_present(q);
4562     - if (!rc)
4563     - break;
4564     - }
4565     - iounmap(p);
4566     - return rc;
4567     -}
4568     -/* ------------------------------------------------------------------------- */
4569     -#endif /* CONFIG_X86_32 */
4570     -#ifdef CONFIG_X86_64
4571     -/* --64 Bit Bios------------------------------------------------------------ */
4572     -
4573     -#define HPWDT_ARCH 64
4574     -
4575     -asm(".text \n\t"
4576     - ".align 4 \n\t"
4577     - ".globl asminline_call \n\t"
4578     - ".type asminline_call, @function \n\t"
4579     - "asminline_call: \n\t"
4580     - FRAME_BEGIN
4581     - "pushq %rax \n\t"
4582     - "pushq %rbx \n\t"
4583     - "pushq %rdx \n\t"
4584     - "pushq %r12 \n\t"
4585     - "pushq %r9 \n\t"
4586     - "movq %rsi, %r12 \n\t"
4587     - "movq %rdi, %r9 \n\t"
4588     - "movl 4(%r9),%ebx \n\t"
4589     - "movl 8(%r9),%ecx \n\t"
4590     - "movl 12(%r9),%edx \n\t"
4591     - "movl 16(%r9),%esi \n\t"
4592     - "movl 20(%r9),%edi \n\t"
4593     - "movl (%r9),%eax \n\t"
4594     - "call *%r12 \n\t"
4595     - "pushfq \n\t"
4596     - "popq %r12 \n\t"
4597     - "movl %eax, (%r9) \n\t"
4598     - "movl %ebx, 4(%r9) \n\t"
4599     - "movl %ecx, 8(%r9) \n\t"
4600     - "movl %edx, 12(%r9) \n\t"
4601     - "movl %esi, 16(%r9) \n\t"
4602     - "movl %edi, 20(%r9) \n\t"
4603     - "movq %r12, %rax \n\t"
4604     - "movl %eax, 28(%r9) \n\t"
4605     - "popq %r9 \n\t"
4606     - "popq %r12 \n\t"
4607     - "popq %rdx \n\t"
4608     - "popq %rbx \n\t"
4609     - "popq %rax \n\t"
4610     - FRAME_END
4611     - "ret \n\t"
4612     - ".previous");
4613     -
4614     -/*
4615     - * dmi_find_cru
4616     - *
4617     - * Routine Description:
4618     - * This function checks whether or not a SMBIOS/DMI record is
4619     - * the 64bit CRU info or not
4620     - */
4621     -static void dmi_find_cru(const struct dmi_header *dm, void *dummy)
4622     -{
4623     - struct smbios_cru64_info *smbios_cru64_ptr;
4624     - unsigned long cru_physical_address;
4625     -
4626     - if (dm->type == SMBIOS_CRU64_INFORMATION) {
4627     - smbios_cru64_ptr = (struct smbios_cru64_info *) dm;
4628     - if (smbios_cru64_ptr->signature == CRU_BIOS_SIGNATURE_VALUE) {
4629     - cru_physical_address =
4630     - smbios_cru64_ptr->physical_address +
4631     - smbios_cru64_ptr->double_offset;
4632     - cru_rom_addr = ioremap(cru_physical_address,
4633     - smbios_cru64_ptr->double_length);
4634     - set_memory_x((unsigned long)cru_rom_addr & PAGE_MASK,
4635     - smbios_cru64_ptr->double_length >> PAGE_SHIFT);
4636     - }
4637     - }
4638     -}
4639     -
4640     -static int detect_cru_service(void)
4641     -{
4642     - cru_rom_addr = NULL;
4643     -
4644     - dmi_walk(dmi_find_cru, NULL);
4645     -
4646     - /* if cru_rom_addr has been set then we found a CRU service */
4647     - return ((cru_rom_addr != NULL) ? 0 : -ENODEV);
4648     -}
4649     -/* ------------------------------------------------------------------------- */
4650     -#endif /* CONFIG_X86_64 */
4651     -#endif /* CONFIG_HPWDT_NMI_DECODING */
4652    
4653     /*
4654     * Watchdog operations
4655     @@ -475,32 +103,22 @@ static int hpwdt_time_left(void)
4656     }
4657    
4658     #ifdef CONFIG_HPWDT_NMI_DECODING
4659     +static int hpwdt_my_nmi(void)
4660     +{
4661     + return ioread8(hpwdt_nmistat) & 0x6;
4662     +}
4663     +
4664     /*
4665     * NMI Handler
4666     */
4667     static int hpwdt_pretimeout(unsigned int ulReason, struct pt_regs *regs)
4668     {
4669     - unsigned long rom_pl;
4670     - static int die_nmi_called;
4671     -
4672     - if (!hpwdt_nmi_decoding)
4673     + if ((ulReason == NMI_UNKNOWN) && !hpwdt_my_nmi())
4674     return NMI_DONE;
4675    
4676     - spin_lock_irqsave(&rom_lock, rom_pl);
4677     - if (!die_nmi_called && !is_icru && !is_uefi)
4678     - asminline_call(&cmn_regs, cru_rom_addr);
4679     - die_nmi_called = 1;
4680     - spin_unlock_irqrestore(&rom_lock, rom_pl);
4681     -
4682     if (allow_kdump)
4683     hpwdt_stop();
4684    
4685     - if (!is_icru && !is_uefi) {
4686     - if (cmn_regs.u1.ral == 0) {
4687     - nmi_panic(regs, "An NMI occurred, but unable to determine source.\n");
4688     - return NMI_HANDLED;
4689     - }
4690     - }
4691     nmi_panic(regs, "An NMI occurred. Depending on your system the reason "
4692     "for the NMI is logged in any one of the following "
4693     "resources:\n"
4694     @@ -666,84 +284,11 @@ static struct miscdevice hpwdt_miscdev = {
4695     * Init & Exit
4696     */
4697    
4698     -#ifdef CONFIG_HPWDT_NMI_DECODING
4699     -#ifdef CONFIG_X86_LOCAL_APIC
4700     -static void hpwdt_check_nmi_decoding(struct pci_dev *dev)
4701     -{
4702     - /*
4703     - * If nmi_watchdog is turned off then we can turn on
4704     - * our nmi decoding capability.
4705     - */
4706     - hpwdt_nmi_decoding = 1;
4707     -}
4708     -#else
4709     -static void hpwdt_check_nmi_decoding(struct pci_dev *dev)
4710     -{
4711     - dev_warn(&dev->dev, "NMI decoding is disabled. "
4712     - "Your kernel does not support a NMI Watchdog.\n");
4713     -}
4714     -#endif /* CONFIG_X86_LOCAL_APIC */
4715     -
4716     -/*
4717     - * dmi_find_icru
4718     - *
4719     - * Routine Description:
4720     - * This function checks whether or not we are on an iCRU-based server.
4721     - * This check is independent of architecture and needs to be made for
4722     - * any ProLiant system.
4723     - */
4724     -static void dmi_find_icru(const struct dmi_header *dm, void *dummy)
4725     -{
4726     - struct smbios_proliant_info *smbios_proliant_ptr;
4727     -
4728     - if (dm->type == SMBIOS_ICRU_INFORMATION) {
4729     - smbios_proliant_ptr = (struct smbios_proliant_info *) dm;
4730     - if (smbios_proliant_ptr->misc_features & 0x01)
4731     - is_icru = 1;
4732     - if (smbios_proliant_ptr->misc_features & 0x408)
4733     - is_uefi = 1;
4734     - }
4735     -}
4736    
4737     static int hpwdt_init_nmi_decoding(struct pci_dev *dev)
4738     {
4739     +#ifdef CONFIG_HPWDT_NMI_DECODING
4740     int retval;
4741     -
4742     - /*
4743     - * On typical CRU-based systems we need to map that service in
4744     - * the BIOS. For 32 bit Operating Systems we need to go through
4745     - * the 32 Bit BIOS Service Directory. For 64 bit Operating
4746     - * Systems we get that service through SMBIOS.
4747     - *
4748     - * On systems that support the new iCRU service all we need to
4749     - * do is call dmi_walk to get the supported flag value and skip
4750     - * the old cru detect code.
4751     - */
4752     - dmi_walk(dmi_find_icru, NULL);
4753     - if (!is_icru && !is_uefi) {
4754     -
4755     - /*
4756     - * We need to map the ROM to get the CRU service.
4757     - * For 32 bit Operating Systems we need to go through the 32 Bit
4758     - * BIOS Service Directory
4759     - * For 64 bit Operating Systems we get that service through SMBIOS.
4760     - */
4761     - retval = detect_cru_service();
4762     - if (retval < 0) {
4763     - dev_warn(&dev->dev,
4764     - "Unable to detect the %d Bit CRU Service.\n",
4765     - HPWDT_ARCH);
4766     - return retval;
4767     - }
4768     -
4769     - /*
4770     - * We know this is the only CRU call we need to make so lets keep as
4771     - * few instructions as possible once the NMI comes in.
4772     - */
4773     - cmn_regs.u1.rah = 0x0D;
4774     - cmn_regs.u1.ral = 0x02;
4775     - }
4776     -
4777     /*
4778     * Only one function can register for NMI_UNKNOWN
4779     */
4780     @@ -771,44 +316,25 @@ static int hpwdt_init_nmi_decoding(struct pci_dev *dev)
4781     dev_warn(&dev->dev,
4782     "Unable to register a die notifier (err=%d).\n",
4783     retval);
4784     - if (cru_rom_addr)
4785     - iounmap(cru_rom_addr);
4786     return retval;
4787     +#endif /* CONFIG_HPWDT_NMI_DECODING */
4788     + return 0;
4789     }
4790    
4791     static void hpwdt_exit_nmi_decoding(void)
4792     {
4793     +#ifdef CONFIG_HPWDT_NMI_DECODING
4794     unregister_nmi_handler(NMI_UNKNOWN, "hpwdt");
4795     unregister_nmi_handler(NMI_SERR, "hpwdt");
4796     unregister_nmi_handler(NMI_IO_CHECK, "hpwdt");
4797     - if (cru_rom_addr)
4798     - iounmap(cru_rom_addr);
4799     -}
4800     -#else /* !CONFIG_HPWDT_NMI_DECODING */
4801     -static void hpwdt_check_nmi_decoding(struct pci_dev *dev)
4802     -{
4803     -}
4804     -
4805     -static int hpwdt_init_nmi_decoding(struct pci_dev *dev)
4806     -{
4807     - return 0;
4808     +#endif
4809     }
4810    
4811     -static void hpwdt_exit_nmi_decoding(void)
4812     -{
4813     -}
4814     -#endif /* CONFIG_HPWDT_NMI_DECODING */
4815     -
4816     static int hpwdt_init_one(struct pci_dev *dev,
4817     const struct pci_device_id *ent)
4818     {
4819     int retval;
4820    
4821     - /*
4822     - * Check if we can do NMI decoding or not
4823     - */
4824     - hpwdt_check_nmi_decoding(dev);
4825     -
4826     /*
4827     * First let's find out if we are on an iLO2+ server. We will
4828     * not run on a legacy ASM box.
4829     @@ -842,6 +368,7 @@ static int hpwdt_init_one(struct pci_dev *dev,
4830     retval = -ENOMEM;
4831     goto error_pci_iomap;
4832     }
4833     + hpwdt_nmistat = pci_mem_addr + 0x6e;
4834     hpwdt_timer_reg = pci_mem_addr + 0x70;
4835     hpwdt_timer_con = pci_mem_addr + 0x72;
4836    
4837     @@ -912,6 +439,6 @@ MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default="
4838     #ifdef CONFIG_HPWDT_NMI_DECODING
4839     module_param(allow_kdump, int, 0);
4840     MODULE_PARM_DESC(allow_kdump, "Start a kernel dump after NMI occurs");
4841     -#endif /* !CONFIG_HPWDT_NMI_DECODING */
4842     +#endif /* CONFIG_HPWDT_NMI_DECODING */
4843    
4844     module_pci_driver(hpwdt_driver);
4845     diff --git a/fs/nfs/direct.c b/fs/nfs/direct.c
4846     index 8c10b0562e75..621c517b325c 100644
4847     --- a/fs/nfs/direct.c
4848     +++ b/fs/nfs/direct.c
4849     @@ -86,10 +86,10 @@ struct nfs_direct_req {
4850     struct nfs_direct_mirror mirrors[NFS_PAGEIO_DESCRIPTOR_MIRROR_MAX];
4851     int mirror_count;
4852    
4853     + loff_t io_start; /* Start offset for I/O */
4854     ssize_t count, /* bytes actually processed */
4855     max_count, /* max expected count */
4856     bytes_left, /* bytes left to be sent */
4857     - io_start, /* start of IO */
4858     error; /* any reported error */
4859     struct completion completion; /* wait for i/o completion */
4860    
4861     diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c
4862     index 5f2f852ef506..7b34534210ce 100644
4863     --- a/fs/nfs/pnfs.c
4864     +++ b/fs/nfs/pnfs.c
4865     @@ -292,8 +292,11 @@ pnfs_detach_layout_hdr(struct pnfs_layout_hdr *lo)
4866     void
4867     pnfs_put_layout_hdr(struct pnfs_layout_hdr *lo)
4868     {
4869     - struct inode *inode = lo->plh_inode;
4870     + struct inode *inode;
4871    
4872     + if (!lo)
4873     + return;
4874     + inode = lo->plh_inode;
4875     pnfs_layoutreturn_before_put_layout_hdr(lo);
4876    
4877     if (atomic_dec_and_lock(&lo->plh_refcount, &inode->i_lock)) {
4878     @@ -1223,10 +1226,12 @@ bool pnfs_roc(struct inode *ino,
4879     spin_lock(&ino->i_lock);
4880     lo = nfsi->layout;
4881     if (!lo || !pnfs_layout_is_valid(lo) ||
4882     - test_bit(NFS_LAYOUT_BULK_RECALL, &lo->plh_flags))
4883     + test_bit(NFS_LAYOUT_BULK_RECALL, &lo->plh_flags)) {
4884     + lo = NULL;
4885     goto out_noroc;
4886     + }
4887     + pnfs_get_layout_hdr(lo);
4888     if (test_bit(NFS_LAYOUT_RETURN_LOCK, &lo->plh_flags)) {
4889     - pnfs_get_layout_hdr(lo);
4890     spin_unlock(&ino->i_lock);
4891     wait_on_bit(&lo->plh_flags, NFS_LAYOUT_RETURN,
4892     TASK_UNINTERRUPTIBLE);
4893     @@ -1294,10 +1299,12 @@ bool pnfs_roc(struct inode *ino,
4894     struct pnfs_layoutdriver_type *ld = NFS_SERVER(ino)->pnfs_curr_ld;
4895     if (ld->prepare_layoutreturn)
4896     ld->prepare_layoutreturn(args);
4897     + pnfs_put_layout_hdr(lo);
4898     return true;
4899     }
4900     if (layoutreturn)
4901     pnfs_send_layoutreturn(lo, &stateid, iomode, true);
4902     + pnfs_put_layout_hdr(lo);
4903     return false;
4904     }
4905    
4906     diff --git a/fs/nfs/write.c b/fs/nfs/write.c
4907     index 76da415be39a..19e6ea89ad26 100644
4908     --- a/fs/nfs/write.c
4909     +++ b/fs/nfs/write.c
4910     @@ -1877,40 +1877,43 @@ int nfs_generic_commit_list(struct inode *inode, struct list_head *head,
4911     return status;
4912     }
4913    
4914     -int nfs_commit_inode(struct inode *inode, int how)
4915     +static int __nfs_commit_inode(struct inode *inode, int how,
4916     + struct writeback_control *wbc)
4917     {
4918     LIST_HEAD(head);
4919     struct nfs_commit_info cinfo;
4920     int may_wait = how & FLUSH_SYNC;
4921     - int error = 0;
4922     - int res;
4923     + int ret, nscan;
4924    
4925     nfs_init_cinfo_from_inode(&cinfo, inode);
4926     nfs_commit_begin(cinfo.mds);
4927     - res = nfs_scan_commit(inode, &head, &cinfo);
4928     - if (res)
4929     - error = nfs_generic_commit_list(inode, &head, how, &cinfo);
4930     + for (;;) {
4931     + ret = nscan = nfs_scan_commit(inode, &head, &cinfo);
4932     + if (ret <= 0)
4933     + break;
4934     + ret = nfs_generic_commit_list(inode, &head, how, &cinfo);
4935     + if (ret < 0)
4936     + break;
4937     + ret = 0;
4938     + if (wbc && wbc->sync_mode == WB_SYNC_NONE) {
4939     + if (nscan < wbc->nr_to_write)
4940     + wbc->nr_to_write -= nscan;
4941     + else
4942     + wbc->nr_to_write = 0;
4943     + }
4944     + if (nscan < INT_MAX)
4945     + break;
4946     + cond_resched();
4947     + }
4948     nfs_commit_end(cinfo.mds);
4949     - if (res == 0)
4950     - return res;
4951     - if (error < 0)
4952     - goto out_error;
4953     - if (!may_wait)
4954     - goto out_mark_dirty;
4955     - error = wait_on_commit(cinfo.mds);
4956     - if (error < 0)
4957     - return error;
4958     - return res;
4959     -out_error:
4960     - res = error;
4961     - /* Note: If we exit without ensuring that the commit is complete,
4962     - * we must mark the inode as dirty. Otherwise, future calls to
4963     - * sync_inode() with the WB_SYNC_ALL flag set will fail to ensure
4964     - * that the data is on the disk.
4965     - */
4966     -out_mark_dirty:
4967     - __mark_inode_dirty(inode, I_DIRTY_DATASYNC);
4968     - return res;
4969     + if (ret || !may_wait)
4970     + return ret;
4971     + return wait_on_commit(cinfo.mds);
4972     +}
4973     +
4974     +int nfs_commit_inode(struct inode *inode, int how)
4975     +{
4976     + return __nfs_commit_inode(inode, how, NULL);
4977     }
4978     EXPORT_SYMBOL_GPL(nfs_commit_inode);
4979    
4980     @@ -1920,11 +1923,11 @@ int nfs_write_inode(struct inode *inode, struct writeback_control *wbc)
4981     int flags = FLUSH_SYNC;
4982     int ret = 0;
4983    
4984     - /* no commits means nothing needs to be done */
4985     - if (!atomic_long_read(&nfsi->commit_info.ncommit))
4986     - return ret;
4987     -
4988     if (wbc->sync_mode == WB_SYNC_NONE) {
4989     + /* no commits means nothing needs to be done */
4990     + if (!atomic_long_read(&nfsi->commit_info.ncommit))
4991     + goto check_requests_outstanding;
4992     +
4993     /* Don't commit yet if this is a non-blocking flush and there
4994     * are a lot of outstanding writes for this mapping.
4995     */
4996     @@ -1935,16 +1938,16 @@ int nfs_write_inode(struct inode *inode, struct writeback_control *wbc)
4997     flags = 0;
4998     }
4999    
5000     - ret = nfs_commit_inode(inode, flags);
5001     - if (ret >= 0) {
5002     - if (wbc->sync_mode == WB_SYNC_NONE) {
5003     - if (ret < wbc->nr_to_write)
5004     - wbc->nr_to_write -= ret;
5005     - else
5006     - wbc->nr_to_write = 0;
5007     - }
5008     - return 0;
5009     - }
5010     + ret = __nfs_commit_inode(inode, flags, wbc);
5011     + if (!ret) {
5012     + if (flags & FLUSH_SYNC)
5013     + return 0;
5014     + } else if (atomic_long_read(&nfsi->commit_info.ncommit))
5015     + goto out_mark_dirty;
5016     +
5017     +check_requests_outstanding:
5018     + if (!atomic_read(&nfsi->commit_info.rpcs_out))
5019     + return ret;
5020     out_mark_dirty:
5021     __mark_inode_dirty(inode, I_DIRTY_DATASYNC);
5022     return ret;
5023     diff --git a/include/drm/drm_crtc_helper.h b/include/drm/drm_crtc_helper.h
5024     index 76e237bd989b..6914633037a5 100644
5025     --- a/include/drm/drm_crtc_helper.h
5026     +++ b/include/drm/drm_crtc_helper.h
5027     @@ -77,5 +77,6 @@ void drm_kms_helper_hotplug_event(struct drm_device *dev);
5028    
5029     void drm_kms_helper_poll_disable(struct drm_device *dev);
5030     void drm_kms_helper_poll_enable(struct drm_device *dev);
5031     +bool drm_kms_helper_is_poll_worker(void);
5032    
5033     #endif
5034     diff --git a/include/drm/drm_drv.h b/include/drm/drm_drv.h
5035     index 71bbaaec836d..305304965b89 100644
5036     --- a/include/drm/drm_drv.h
5037     +++ b/include/drm/drm_drv.h
5038     @@ -55,6 +55,7 @@ struct drm_mode_create_dumb;
5039     #define DRIVER_ATOMIC 0x10000
5040     #define DRIVER_KMS_LEGACY_CONTEXT 0x20000
5041     #define DRIVER_SYNCOBJ 0x40000
5042     +#define DRIVER_PREFER_XBGR_30BPP 0x80000
5043    
5044     /**
5045     * struct drm_driver - DRM driver structure
5046     diff --git a/include/linux/compiler-clang.h b/include/linux/compiler-clang.h
5047     index 3b609edffa8f..be3aef6839f6 100644
5048     --- a/include/linux/compiler-clang.h
5049     +++ b/include/linux/compiler-clang.h
5050     @@ -19,3 +19,8 @@
5051    
5052     #define randomized_struct_fields_start struct {
5053     #define randomized_struct_fields_end };
5054     +
5055     +/* Clang doesn't have a way to turn it off per-function, yet. */
5056     +#ifdef __noretpoline
5057     +#undef __noretpoline
5058     +#endif
5059     diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h
5060     index bf09213895f7..a1ffbf25873f 100644
5061     --- a/include/linux/compiler-gcc.h
5062     +++ b/include/linux/compiler-gcc.h
5063     @@ -93,6 +93,10 @@
5064     #define __weak __attribute__((weak))
5065     #define __alias(symbol) __attribute__((alias(#symbol)))
5066    
5067     +#ifdef RETPOLINE
5068     +#define __noretpoline __attribute__((indirect_branch("keep")))
5069     +#endif
5070     +
5071     /*
5072     * it doesn't make sense on ARM (currently the only user of __naked)
5073     * to trace naked functions because then mcount is called without
5074     diff --git a/include/linux/init.h b/include/linux/init.h
5075     index 943139a563e3..07cab8a053af 100644
5076     --- a/include/linux/init.h
5077     +++ b/include/linux/init.h
5078     @@ -6,10 +6,10 @@
5079     #include <linux/types.h>
5080    
5081     /* Built-in __init functions needn't be compiled with retpoline */
5082     -#if defined(RETPOLINE) && !defined(MODULE)
5083     -#define __noretpoline __attribute__((indirect_branch("keep")))
5084     +#if defined(__noretpoline) && !defined(MODULE)
5085     +#define __noinitretpoline __noretpoline
5086     #else
5087     -#define __noretpoline
5088     +#define __noinitretpoline
5089     #endif
5090    
5091     /* These macros are used to mark some functions or
5092     @@ -47,7 +47,7 @@
5093    
5094     /* These are for everybody (although not all archs will actually
5095     discard it in modules) */
5096     -#define __init __section(.init.text) __cold __inittrace __latent_entropy __noretpoline
5097     +#define __init __section(.init.text) __cold __inittrace __latent_entropy __noinitretpoline
5098     #define __initdata __section(.init.data)
5099     #define __initconst __section(.init.rodata)
5100     #define __exitdata __section(.exit.data)
5101     diff --git a/include/linux/nospec.h b/include/linux/nospec.h
5102     index 132e3f5a2e0d..e791ebc65c9c 100644
5103     --- a/include/linux/nospec.h
5104     +++ b/include/linux/nospec.h
5105     @@ -5,6 +5,7 @@
5106    
5107     #ifndef _LINUX_NOSPEC_H
5108     #define _LINUX_NOSPEC_H
5109     +#include <asm/barrier.h>
5110    
5111     /**
5112     * array_index_mask_nospec() - generate a ~0 mask when index < size, 0 otherwise
5113     @@ -29,26 +30,6 @@ static inline unsigned long array_index_mask_nospec(unsigned long index,
5114     }
5115     #endif
5116    
5117     -/*
5118     - * Warn developers about inappropriate array_index_nospec() usage.
5119     - *
5120     - * Even if the CPU speculates past the WARN_ONCE branch, the
5121     - * sign bit of @index is taken into account when generating the
5122     - * mask.
5123     - *
5124     - * This warning is compiled out when the compiler can infer that
5125     - * @index and @size are less than LONG_MAX.
5126     - */
5127     -#define array_index_mask_nospec_check(index, size) \
5128     -({ \
5129     - if (WARN_ONCE(index > LONG_MAX || size > LONG_MAX, \
5130     - "array_index_nospec() limited to range of [0, LONG_MAX]\n")) \
5131     - _mask = 0; \
5132     - else \
5133     - _mask = array_index_mask_nospec(index, size); \
5134     - _mask; \
5135     -})
5136     -
5137     /*
5138     * array_index_nospec - sanitize an array index after a bounds check
5139     *
5140     @@ -67,7 +48,7 @@ static inline unsigned long array_index_mask_nospec(unsigned long index,
5141     ({ \
5142     typeof(index) _i = (index); \
5143     typeof(size) _s = (size); \
5144     - unsigned long _mask = array_index_mask_nospec_check(_i, _s); \
5145     + unsigned long _mask = array_index_mask_nospec(_i, _s); \
5146     \
5147     BUILD_BUG_ON(sizeof(_i) > sizeof(long)); \
5148     BUILD_BUG_ON(sizeof(_s) > sizeof(long)); \
5149     diff --git a/include/linux/tpm.h b/include/linux/tpm.h
5150     index 5a090f5ab335..881312d85574 100644
5151     --- a/include/linux/tpm.h
5152     +++ b/include/linux/tpm.h
5153     @@ -50,6 +50,7 @@ struct tpm_class_ops {
5154     unsigned long *timeout_cap);
5155     int (*request_locality)(struct tpm_chip *chip, int loc);
5156     void (*relinquish_locality)(struct tpm_chip *chip, int loc);
5157     + void (*clk_enable)(struct tpm_chip *chip, bool value);
5158     };
5159    
5160     #if defined(CONFIG_TCG_TPM) || defined(CONFIG_TCG_TPM_MODULE)
5161     diff --git a/include/linux/workqueue.h b/include/linux/workqueue.h
5162     index 0eae11fc7a23..1c527abb1ae5 100644
5163     --- a/include/linux/workqueue.h
5164     +++ b/include/linux/workqueue.h
5165     @@ -467,6 +467,7 @@ extern bool cancel_delayed_work_sync(struct delayed_work *dwork);
5166    
5167     extern void workqueue_set_max_active(struct workqueue_struct *wq,
5168     int max_active);
5169     +extern struct work_struct *current_work(void);
5170     extern bool current_is_workqueue_rescuer(void);
5171     extern bool workqueue_congested(int cpu, struct workqueue_struct *wq);
5172     extern unsigned int work_busy(struct work_struct *work);
5173     diff --git a/include/scsi/scsi_cmnd.h b/include/scsi/scsi_cmnd.h
5174     index 7fb57e905526..7bc752fc98de 100644
5175     --- a/include/scsi/scsi_cmnd.h
5176     +++ b/include/scsi/scsi_cmnd.h
5177     @@ -69,6 +69,9 @@ struct scsi_cmnd {
5178     struct list_head list; /* scsi_cmnd participates in queue lists */
5179     struct list_head eh_entry; /* entry for the host eh_cmd_q */
5180     struct delayed_work abort_work;
5181     +
5182     + struct rcu_head rcu;
5183     +
5184     int eh_eflags; /* Used by error handlr */
5185    
5186     /*
5187     diff --git a/include/scsi/scsi_host.h b/include/scsi/scsi_host.h
5188     index 1a1df0d21ee3..a8b7bf879ced 100644
5189     --- a/include/scsi/scsi_host.h
5190     +++ b/include/scsi/scsi_host.h
5191     @@ -571,8 +571,6 @@ struct Scsi_Host {
5192     struct blk_mq_tag_set tag_set;
5193     };
5194    
5195     - struct rcu_head rcu;
5196     -
5197     atomic_t host_busy; /* commands actually active on low-level */
5198     atomic_t host_blocked;
5199    
5200     diff --git a/kernel/workqueue.c b/kernel/workqueue.c
5201     index 8365a52a74c5..d0c6b50792c8 100644
5202     --- a/kernel/workqueue.c
5203     +++ b/kernel/workqueue.c
5204     @@ -4184,6 +4184,22 @@ void workqueue_set_max_active(struct workqueue_struct *wq, int max_active)
5205     }
5206     EXPORT_SYMBOL_GPL(workqueue_set_max_active);
5207    
5208     +/**
5209     + * current_work - retrieve %current task's work struct
5210     + *
5211     + * Determine if %current task is a workqueue worker and what it's working on.
5212     + * Useful to find out the context that the %current task is running in.
5213     + *
5214     + * Return: work struct if %current task is a workqueue worker, %NULL otherwise.
5215     + */
5216     +struct work_struct *current_work(void)
5217     +{
5218     + struct worker *worker = current_wq_worker();
5219     +
5220     + return worker ? worker->current_work : NULL;
5221     +}
5222     +EXPORT_SYMBOL(current_work);
5223     +
5224     /**
5225     * current_is_workqueue_rescuer - is %current workqueue rescuer?
5226     *
5227     diff --git a/lib/bug.c b/lib/bug.c
5228     index 1e094408c893..d2c9a099561a 100644
5229     --- a/lib/bug.c
5230     +++ b/lib/bug.c
5231     @@ -150,6 +150,8 @@ enum bug_trap_type report_bug(unsigned long bugaddr, struct pt_regs *regs)
5232     return BUG_TRAP_TYPE_NONE;
5233    
5234     bug = find_bug(bugaddr);
5235     + if (!bug)
5236     + return BUG_TRAP_TYPE_NONE;
5237    
5238     file = NULL;
5239     line = 0;
5240     diff --git a/mm/memblock.c b/mm/memblock.c
5241     index 91205780e6b1..6dd303717a4d 100644
5242     --- a/mm/memblock.c
5243     +++ b/mm/memblock.c
5244     @@ -1107,7 +1107,7 @@ unsigned long __init_memblock memblock_next_valid_pfn(unsigned long pfn,
5245     struct memblock_type *type = &memblock.memory;
5246     unsigned int right = type->cnt;
5247     unsigned int mid, left = 0;
5248     - phys_addr_t addr = PFN_PHYS(pfn + 1);
5249     + phys_addr_t addr = PFN_PHYS(++pfn);
5250    
5251     do {
5252     mid = (right + left) / 2;
5253     @@ -1118,15 +1118,15 @@ unsigned long __init_memblock memblock_next_valid_pfn(unsigned long pfn,
5254     type->regions[mid].size))
5255     left = mid + 1;
5256     else {
5257     - /* addr is within the region, so pfn + 1 is valid */
5258     - return min(pfn + 1, max_pfn);
5259     + /* addr is within the region, so pfn is valid */
5260     + return pfn;
5261     }
5262     } while (left < right);
5263    
5264     if (right == type->cnt)
5265     - return max_pfn;
5266     + return -1UL;
5267     else
5268     - return min(PHYS_PFN(type->regions[right].base), max_pfn);
5269     + return PHYS_PFN(type->regions[right].base);
5270     }
5271    
5272     /**
5273     diff --git a/net/bridge/netfilter/ebt_among.c b/net/bridge/netfilter/ebt_among.c
5274     index 279527f8b1fe..59baaecd3e54 100644
5275     --- a/net/bridge/netfilter/ebt_among.c
5276     +++ b/net/bridge/netfilter/ebt_among.c
5277     @@ -172,18 +172,35 @@ ebt_among_mt(const struct sk_buff *skb, struct xt_action_param *par)
5278     return true;
5279     }
5280    
5281     +static bool poolsize_invalid(const struct ebt_mac_wormhash *w)
5282     +{
5283     + return w && w->poolsize >= (INT_MAX / sizeof(struct ebt_mac_wormhash_tuple));
5284     +}
5285     +
5286     static int ebt_among_mt_check(const struct xt_mtchk_param *par)
5287     {
5288     const struct ebt_among_info *info = par->matchinfo;
5289     const struct ebt_entry_match *em =
5290     container_of(par->matchinfo, const struct ebt_entry_match, data);
5291     - int expected_length = sizeof(struct ebt_among_info);
5292     + unsigned int expected_length = sizeof(struct ebt_among_info);
5293     const struct ebt_mac_wormhash *wh_dst, *wh_src;
5294     int err;
5295    
5296     + if (expected_length > em->match_size)
5297     + return -EINVAL;
5298     +
5299     wh_dst = ebt_among_wh_dst(info);
5300     - wh_src = ebt_among_wh_src(info);
5301     + if (poolsize_invalid(wh_dst))
5302     + return -EINVAL;
5303     +
5304     expected_length += ebt_mac_wormhash_size(wh_dst);
5305     + if (expected_length > em->match_size)
5306     + return -EINVAL;
5307     +
5308     + wh_src = ebt_among_wh_src(info);
5309     + if (poolsize_invalid(wh_src))
5310     + return -EINVAL;
5311     +
5312     expected_length += ebt_mac_wormhash_size(wh_src);
5313    
5314     if (em->match_size != EBT_ALIGN(expected_length)) {
5315     diff --git a/net/bridge/netfilter/ebtables.c b/net/bridge/netfilter/ebtables.c
5316     index 3b3dcf719e07..16eb99458df4 100644
5317     --- a/net/bridge/netfilter/ebtables.c
5318     +++ b/net/bridge/netfilter/ebtables.c
5319     @@ -2053,7 +2053,9 @@ static int ebt_size_mwt(struct compat_ebt_entry_mwt *match32,
5320     if (match_kern)
5321     match_kern->match_size = ret;
5322    
5323     - WARN_ON(type == EBT_COMPAT_TARGET && size_left);
5324     + if (WARN_ON(type == EBT_COMPAT_TARGET && size_left))
5325     + return -EINVAL;
5326     +
5327     match32 = (struct compat_ebt_entry_mwt *) buf;
5328     }
5329    
5330     @@ -2109,6 +2111,15 @@ static int size_entry_mwt(struct ebt_entry *entry, const unsigned char *base,
5331     *
5332     * offsets are relative to beginning of struct ebt_entry (i.e., 0).
5333     */
5334     + for (i = 0; i < 4 ; ++i) {
5335     + if (offsets[i] >= *total)
5336     + return -EINVAL;
5337     + if (i == 0)
5338     + continue;
5339     + if (offsets[i-1] > offsets[i])
5340     + return -EINVAL;
5341     + }
5342     +
5343     for (i = 0, j = 1 ; j < 4 ; j++, i++) {
5344     struct compat_ebt_entry_mwt *match32;
5345     unsigned int size;
5346     diff --git a/net/ipv4/netfilter/arp_tables.c b/net/ipv4/netfilter/arp_tables.c
5347     index 9e2770fd00be..aa4c3b7f7da4 100644
5348     --- a/net/ipv4/netfilter/arp_tables.c
5349     +++ b/net/ipv4/netfilter/arp_tables.c
5350     @@ -257,6 +257,10 @@ unsigned int arpt_do_table(struct sk_buff *skb,
5351     }
5352     if (table_base + v
5353     != arpt_next_entry(e)) {
5354     + if (unlikely(stackidx >= private->stacksize)) {
5355     + verdict = NF_DROP;
5356     + break;
5357     + }
5358     jumpstack[stackidx++] = e;
5359     }
5360    
5361     diff --git a/net/ipv4/netfilter/ip_tables.c b/net/ipv4/netfilter/ip_tables.c
5362     index 39286e543ee6..cadb82a906b8 100644
5363     --- a/net/ipv4/netfilter/ip_tables.c
5364     +++ b/net/ipv4/netfilter/ip_tables.c
5365     @@ -335,8 +335,13 @@ ipt_do_table(struct sk_buff *skb,
5366     continue;
5367     }
5368     if (table_base + v != ipt_next_entry(e) &&
5369     - !(e->ip.flags & IPT_F_GOTO))
5370     + !(e->ip.flags & IPT_F_GOTO)) {
5371     + if (unlikely(stackidx >= private->stacksize)) {
5372     + verdict = NF_DROP;
5373     + break;
5374     + }
5375     jumpstack[stackidx++] = e;
5376     + }
5377    
5378     e = get_entry(table_base, v);
5379     continue;
5380     diff --git a/net/ipv4/netfilter/ipt_CLUSTERIP.c b/net/ipv4/netfilter/ipt_CLUSTERIP.c
5381     index 24a8c2e63e3d..c07e9db95ccc 100644
5382     --- a/net/ipv4/netfilter/ipt_CLUSTERIP.c
5383     +++ b/net/ipv4/netfilter/ipt_CLUSTERIP.c
5384     @@ -107,12 +107,6 @@ clusterip_config_entry_put(struct net *net, struct clusterip_config *c)
5385    
5386     local_bh_disable();
5387     if (refcount_dec_and_lock(&c->entries, &cn->lock)) {
5388     - list_del_rcu(&c->list);
5389     - spin_unlock(&cn->lock);
5390     - local_bh_enable();
5391     -
5392     - unregister_netdevice_notifier(&c->notifier);
5393     -
5394     /* In case anyone still accesses the file, the open/close
5395     * functions are also incrementing the refcount on their own,
5396     * so it's safe to remove the entry even if it's in use. */
5397     @@ -120,6 +114,12 @@ clusterip_config_entry_put(struct net *net, struct clusterip_config *c)
5398     if (cn->procdir)
5399     proc_remove(c->pde);
5400     #endif
5401     + list_del_rcu(&c->list);
5402     + spin_unlock(&cn->lock);
5403     + local_bh_enable();
5404     +
5405     + unregister_netdevice_notifier(&c->notifier);
5406     +
5407     return;
5408     }
5409     local_bh_enable();
5410     diff --git a/net/ipv6/netfilter.c b/net/ipv6/netfilter.c
5411     index 39970e212ad5..9bf260459f83 100644
5412     --- a/net/ipv6/netfilter.c
5413     +++ b/net/ipv6/netfilter.c
5414     @@ -21,18 +21,19 @@
5415     int ip6_route_me_harder(struct net *net, struct sk_buff *skb)
5416     {
5417     const struct ipv6hdr *iph = ipv6_hdr(skb);
5418     + struct sock *sk = sk_to_full_sk(skb->sk);
5419     unsigned int hh_len;
5420     struct dst_entry *dst;
5421     struct flowi6 fl6 = {
5422     - .flowi6_oif = skb->sk ? skb->sk->sk_bound_dev_if : 0,
5423     + .flowi6_oif = sk ? sk->sk_bound_dev_if : 0,
5424     .flowi6_mark = skb->mark,
5425     - .flowi6_uid = sock_net_uid(net, skb->sk),
5426     + .flowi6_uid = sock_net_uid(net, sk),
5427     .daddr = iph->daddr,
5428     .saddr = iph->saddr,
5429     };
5430     int err;
5431    
5432     - dst = ip6_route_output(net, skb->sk, &fl6);
5433     + dst = ip6_route_output(net, sk, &fl6);
5434     err = dst->error;
5435     if (err) {
5436     IP6_INC_STATS(net, ip6_dst_idev(dst), IPSTATS_MIB_OUTNOROUTES);
5437     @@ -50,7 +51,7 @@ int ip6_route_me_harder(struct net *net, struct sk_buff *skb)
5438     if (!(IP6CB(skb)->flags & IP6SKB_XFRM_TRANSFORMED) &&
5439     xfrm_decode_session(skb, flowi6_to_flowi(&fl6), AF_INET6) == 0) {
5440     skb_dst_set(skb, NULL);
5441     - dst = xfrm_lookup(net, dst, flowi6_to_flowi(&fl6), skb->sk, 0);
5442     + dst = xfrm_lookup(net, dst, flowi6_to_flowi(&fl6), sk, 0);
5443     if (IS_ERR(dst))
5444     return PTR_ERR(dst);
5445     skb_dst_set(skb, dst);
5446     diff --git a/net/ipv6/netfilter/ip6_tables.c b/net/ipv6/netfilter/ip6_tables.c
5447     index 01bd3ee5ebc6..a0a31972fc75 100644
5448     --- a/net/ipv6/netfilter/ip6_tables.c
5449     +++ b/net/ipv6/netfilter/ip6_tables.c
5450     @@ -357,6 +357,10 @@ ip6t_do_table(struct sk_buff *skb,
5451     }
5452     if (table_base + v != ip6t_next_entry(e) &&
5453     !(e->ipv6.flags & IP6T_F_GOTO)) {
5454     + if (unlikely(stackidx >= private->stacksize)) {
5455     + verdict = NF_DROP;
5456     + break;
5457     + }
5458     jumpstack[stackidx++] = e;
5459     }
5460    
5461     diff --git a/net/ipv6/netfilter/nf_nat_l3proto_ipv6.c b/net/ipv6/netfilter/nf_nat_l3proto_ipv6.c
5462     index 46d6dba50698..c5053dbfc391 100644
5463     --- a/net/ipv6/netfilter/nf_nat_l3proto_ipv6.c
5464     +++ b/net/ipv6/netfilter/nf_nat_l3proto_ipv6.c
5465     @@ -99,6 +99,10 @@ static bool nf_nat_ipv6_manip_pkt(struct sk_buff *skb,
5466     !l4proto->manip_pkt(skb, &nf_nat_l3proto_ipv6, iphdroff, hdroff,
5467     target, maniptype))
5468     return false;
5469     +
5470     + /* must reload, offset might have changed */
5471     + ipv6h = (void *)skb->data + iphdroff;
5472     +
5473     manip_addr:
5474     if (maniptype == NF_NAT_MANIP_SRC)
5475     ipv6h->saddr = target->src.u3.in6;
5476     diff --git a/net/netfilter/nf_nat_proto_common.c b/net/netfilter/nf_nat_proto_common.c
5477     index fbce552a796e..7d7466dbf663 100644
5478     --- a/net/netfilter/nf_nat_proto_common.c
5479     +++ b/net/netfilter/nf_nat_proto_common.c
5480     @@ -41,7 +41,7 @@ void nf_nat_l4proto_unique_tuple(const struct nf_nat_l3proto *l3proto,
5481     const struct nf_conn *ct,
5482     u16 *rover)
5483     {
5484     - unsigned int range_size, min, i;
5485     + unsigned int range_size, min, max, i;
5486     __be16 *portptr;
5487     u_int16_t off;
5488    
5489     @@ -71,7 +71,10 @@ void nf_nat_l4proto_unique_tuple(const struct nf_nat_l3proto *l3proto,
5490     }
5491     } else {
5492     min = ntohs(range->min_proto.all);
5493     - range_size = ntohs(range->max_proto.all) - min + 1;
5494     + max = ntohs(range->max_proto.all);
5495     + if (unlikely(max < min))
5496     + swap(max, min);
5497     + range_size = max - min + 1;
5498     }
5499    
5500     if (range->flags & NF_NAT_RANGE_PROTO_RANDOM) {
5501     diff --git a/net/netfilter/xt_IDLETIMER.c b/net/netfilter/xt_IDLETIMER.c
5502     index daf45da448fa..bb5d6a058fb7 100644
5503     --- a/net/netfilter/xt_IDLETIMER.c
5504     +++ b/net/netfilter/xt_IDLETIMER.c
5505     @@ -147,11 +147,11 @@ static int idletimer_tg_create(struct idletimer_tg_info *info)
5506     (unsigned long) info->timer);
5507     info->timer->refcnt = 1;
5508    
5509     + INIT_WORK(&info->timer->work, idletimer_tg_work);
5510     +
5511     mod_timer(&info->timer->timer,
5512     msecs_to_jiffies(info->timeout * 1000) + jiffies);
5513    
5514     - INIT_WORK(&info->timer->work, idletimer_tg_work);
5515     -
5516     return 0;
5517    
5518     out_free_attr:
5519     @@ -192,7 +192,10 @@ static int idletimer_tg_checkentry(const struct xt_tgchk_param *par)
5520     pr_debug("timeout value is zero\n");
5521     return -EINVAL;
5522     }
5523     -
5524     + if (info->timeout >= INT_MAX / 1000) {
5525     + pr_debug("timeout value is too big\n");
5526     + return -EINVAL;
5527     + }
5528     if (info->label[0] == '\0' ||
5529     strnlen(info->label,
5530     MAX_IDLETIMER_LABEL_SIZE) == MAX_IDLETIMER_LABEL_SIZE) {
5531     diff --git a/net/netfilter/xt_LED.c b/net/netfilter/xt_LED.c
5532     index 3ba31c194cce..0858fe17e14a 100644
5533     --- a/net/netfilter/xt_LED.c
5534     +++ b/net/netfilter/xt_LED.c
5535     @@ -141,10 +141,11 @@ static int led_tg_check(const struct xt_tgchk_param *par)
5536     goto exit_alloc;
5537     }
5538    
5539     - /* See if we need to set up a timer */
5540     - if (ledinfo->delay > 0)
5541     - setup_timer(&ledinternal->timer, led_timeout_callback,
5542     - (unsigned long)ledinternal);
5543     + /* Since the letinternal timer can be shared between multiple targets,
5544     + * always set it up, even if the current target does not need it
5545     + */
5546     + setup_timer(&ledinternal->timer, led_timeout_callback,
5547     + (unsigned long)ledinternal);
5548    
5549     list_add_tail(&ledinternal->list, &xt_led_triggers);
5550    
5551     @@ -181,8 +182,7 @@ static void led_tg_destroy(const struct xt_tgdtor_param *par)
5552    
5553     list_del(&ledinternal->list);
5554    
5555     - if (ledinfo->delay > 0)
5556     - del_timer_sync(&ledinternal->timer);
5557     + del_timer_sync(&ledinternal->timer);
5558    
5559     led_trigger_unregister(&ledinternal->netfilter_led_trigger);
5560    
5561     diff --git a/net/netfilter/xt_hashlimit.c b/net/netfilter/xt_hashlimit.c
5562     index 5da8746f7b88..b8a3e740ffd4 100644
5563     --- a/net/netfilter/xt_hashlimit.c
5564     +++ b/net/netfilter/xt_hashlimit.c
5565     @@ -774,7 +774,7 @@ hashlimit_mt_common(const struct sk_buff *skb, struct xt_action_param *par,
5566     if (!dh->rateinfo.prev_window &&
5567     (dh->rateinfo.current_rate <= dh->rateinfo.burst)) {
5568     spin_unlock(&dh->lock);
5569     - rcu_read_unlock_bh();
5570     + local_bh_enable();
5571     return !(cfg->mode & XT_HASHLIMIT_INVERT);
5572     } else {
5573     goto overlimit;
5574     diff --git a/net/smc/af_smc.c b/net/smc/af_smc.c
5575     index 745f145d4c4d..a6d604fd9695 100644
5576     --- a/net/smc/af_smc.c
5577     +++ b/net/smc/af_smc.c
5578     @@ -1351,8 +1351,10 @@ static int smc_create(struct net *net, struct socket *sock, int protocol,
5579     smc->use_fallback = false; /* assume rdma capability first */
5580     rc = sock_create_kern(net, PF_INET, SOCK_STREAM,
5581     IPPROTO_TCP, &smc->clcsock);
5582     - if (rc)
5583     + if (rc) {
5584     sk_common_release(sk);
5585     + goto out;
5586     + }
5587     smc->sk.sk_sndbuf = max(smc->clcsock->sk->sk_sndbuf, SMC_BUF_MIN_SIZE);
5588     smc->sk.sk_rcvbuf = max(smc->clcsock->sk->sk_rcvbuf, SMC_BUF_MIN_SIZE);
5589    
5590     diff --git a/scripts/Makefile.build b/scripts/Makefile.build
5591     index 6bed45dc2cb1..7143da06d702 100644
5592     --- a/scripts/Makefile.build
5593     +++ b/scripts/Makefile.build
5594     @@ -261,6 +261,8 @@ __objtool_obj := $(objtree)/tools/objtool/objtool
5595    
5596     objtool_args = $(if $(CONFIG_UNWINDER_ORC),orc generate,check)
5597    
5598     +objtool_args += $(if $(part-of-module), --module,)
5599     +
5600     ifndef CONFIG_FRAME_POINTER
5601     objtool_args += --no-fp
5602     endif
5603     @@ -269,6 +271,12 @@ objtool_args += --no-unreachable
5604     else
5605     objtool_args += $(call cc-ifversion, -lt, 0405, --no-unreachable)
5606     endif
5607     +ifdef CONFIG_RETPOLINE
5608     +ifneq ($(RETPOLINE_CFLAGS),)
5609     + objtool_args += --retpoline
5610     +endif
5611     +endif
5612     +
5613    
5614     ifdef CONFIG_MODVERSIONS
5615     objtool_o = $(@D)/.tmp_$(@F)
5616     diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
5617     index 0b46136a91a8..aac94d962ed6 100644
5618     --- a/scripts/Makefile.lib
5619     +++ b/scripts/Makefile.lib
5620     @@ -294,11 +294,11 @@ cmd_dt_S_dtb= \
5621     echo '\#include <asm-generic/vmlinux.lds.h>'; \
5622     echo '.section .dtb.init.rodata,"a"'; \
5623     echo '.balign STRUCT_ALIGNMENT'; \
5624     - echo '.global __dtb_$(*F)_begin'; \
5625     - echo '__dtb_$(*F)_begin:'; \
5626     + echo '.global __dtb_$(subst -,_,$(*F))_begin'; \
5627     + echo '__dtb_$(subst -,_,$(*F))_begin:'; \
5628     echo '.incbin "$<" '; \
5629     - echo '__dtb_$(*F)_end:'; \
5630     - echo '.global __dtb_$(*F)_end'; \
5631     + echo '__dtb_$(subst -,_,$(*F))_end:'; \
5632     + echo '.global __dtb_$(subst -,_,$(*F))_end'; \
5633     echo '.balign STRUCT_ALIGNMENT'; \
5634     ) > $@
5635    
5636     diff --git a/sound/core/seq/seq_clientmgr.c b/sound/core/seq/seq_clientmgr.c
5637     index dea11d1babf5..1f3aa466ac9b 100644
5638     --- a/sound/core/seq/seq_clientmgr.c
5639     +++ b/sound/core/seq/seq_clientmgr.c
5640     @@ -906,7 +906,8 @@ int snd_seq_dispatch_event(struct snd_seq_event_cell *cell, int atomic, int hop)
5641     static int snd_seq_client_enqueue_event(struct snd_seq_client *client,
5642     struct snd_seq_event *event,
5643     struct file *file, int blocking,
5644     - int atomic, int hop)
5645     + int atomic, int hop,
5646     + struct mutex *mutexp)
5647     {
5648     struct snd_seq_event_cell *cell;
5649     int err;
5650     @@ -944,7 +945,8 @@ static int snd_seq_client_enqueue_event(struct snd_seq_client *client,
5651     return -ENXIO; /* queue is not allocated */
5652    
5653     /* allocate an event cell */
5654     - err = snd_seq_event_dup(client->pool, event, &cell, !blocking || atomic, file);
5655     + err = snd_seq_event_dup(client->pool, event, &cell, !blocking || atomic,
5656     + file, mutexp);
5657     if (err < 0)
5658     return err;
5659    
5660     @@ -1013,12 +1015,11 @@ static ssize_t snd_seq_write(struct file *file, const char __user *buf,
5661     return -ENXIO;
5662    
5663     /* allocate the pool now if the pool is not allocated yet */
5664     + mutex_lock(&client->ioctl_mutex);
5665     if (client->pool->size > 0 && !snd_seq_write_pool_allocated(client)) {
5666     - mutex_lock(&client->ioctl_mutex);
5667     err = snd_seq_pool_init(client->pool);
5668     - mutex_unlock(&client->ioctl_mutex);
5669     if (err < 0)
5670     - return -ENOMEM;
5671     + goto out;
5672     }
5673    
5674     /* only process whole events */
5675     @@ -1069,7 +1070,7 @@ static ssize_t snd_seq_write(struct file *file, const char __user *buf,
5676     /* ok, enqueue it */
5677     err = snd_seq_client_enqueue_event(client, &event, file,
5678     !(file->f_flags & O_NONBLOCK),
5679     - 0, 0);
5680     + 0, 0, &client->ioctl_mutex);
5681     if (err < 0)
5682     break;
5683    
5684     @@ -1080,6 +1081,8 @@ static ssize_t snd_seq_write(struct file *file, const char __user *buf,
5685     written += len;
5686     }
5687    
5688     + out:
5689     + mutex_unlock(&client->ioctl_mutex);
5690     return written ? written : err;
5691     }
5692    
5693     @@ -1834,6 +1837,9 @@ static int snd_seq_ioctl_set_client_pool(struct snd_seq_client *client,
5694     (! snd_seq_write_pool_allocated(client) ||
5695     info->output_pool != client->pool->size)) {
5696     if (snd_seq_write_pool_allocated(client)) {
5697     + /* is the pool in use? */
5698     + if (atomic_read(&client->pool->counter))
5699     + return -EBUSY;
5700     /* remove all existing cells */
5701     snd_seq_pool_mark_closing(client->pool);
5702     snd_seq_queue_client_leave_cells(client->number);
5703     @@ -2256,7 +2262,8 @@ static int kernel_client_enqueue(int client, struct snd_seq_event *ev,
5704     if (! cptr->accept_output)
5705     result = -EPERM;
5706     else /* send it */
5707     - result = snd_seq_client_enqueue_event(cptr, ev, file, blocking, atomic, hop);
5708     + result = snd_seq_client_enqueue_event(cptr, ev, file, blocking,
5709     + atomic, hop, NULL);
5710    
5711     snd_seq_client_unlock(cptr);
5712     return result;
5713     diff --git a/sound/core/seq/seq_fifo.c b/sound/core/seq/seq_fifo.c
5714     index a8c2822e0198..72c0302a55d2 100644
5715     --- a/sound/core/seq/seq_fifo.c
5716     +++ b/sound/core/seq/seq_fifo.c
5717     @@ -125,7 +125,7 @@ int snd_seq_fifo_event_in(struct snd_seq_fifo *f,
5718     return -EINVAL;
5719    
5720     snd_use_lock_use(&f->use_lock);
5721     - err = snd_seq_event_dup(f->pool, event, &cell, 1, NULL); /* always non-blocking */
5722     + err = snd_seq_event_dup(f->pool, event, &cell, 1, NULL, NULL); /* always non-blocking */
5723     if (err < 0) {
5724     if ((err == -ENOMEM) || (err == -EAGAIN))
5725     atomic_inc(&f->overflow);
5726     diff --git a/sound/core/seq/seq_memory.c b/sound/core/seq/seq_memory.c
5727     index f763682584a8..ab1112e90f88 100644
5728     --- a/sound/core/seq/seq_memory.c
5729     +++ b/sound/core/seq/seq_memory.c
5730     @@ -220,7 +220,8 @@ void snd_seq_cell_free(struct snd_seq_event_cell * cell)
5731     */
5732     static int snd_seq_cell_alloc(struct snd_seq_pool *pool,
5733     struct snd_seq_event_cell **cellp,
5734     - int nonblock, struct file *file)
5735     + int nonblock, struct file *file,
5736     + struct mutex *mutexp)
5737     {
5738     struct snd_seq_event_cell *cell;
5739     unsigned long flags;
5740     @@ -244,7 +245,11 @@ static int snd_seq_cell_alloc(struct snd_seq_pool *pool,
5741     set_current_state(TASK_INTERRUPTIBLE);
5742     add_wait_queue(&pool->output_sleep, &wait);
5743     spin_unlock_irq(&pool->lock);
5744     + if (mutexp)
5745     + mutex_unlock(mutexp);
5746     schedule();
5747     + if (mutexp)
5748     + mutex_lock(mutexp);
5749     spin_lock_irq(&pool->lock);
5750     remove_wait_queue(&pool->output_sleep, &wait);
5751     /* interrupted? */
5752     @@ -287,7 +292,7 @@ static int snd_seq_cell_alloc(struct snd_seq_pool *pool,
5753     */
5754     int snd_seq_event_dup(struct snd_seq_pool *pool, struct snd_seq_event *event,
5755     struct snd_seq_event_cell **cellp, int nonblock,
5756     - struct file *file)
5757     + struct file *file, struct mutex *mutexp)
5758     {
5759     int ncells, err;
5760     unsigned int extlen;
5761     @@ -304,7 +309,7 @@ int snd_seq_event_dup(struct snd_seq_pool *pool, struct snd_seq_event *event,
5762     if (ncells >= pool->total_elements)
5763     return -ENOMEM;
5764    
5765     - err = snd_seq_cell_alloc(pool, &cell, nonblock, file);
5766     + err = snd_seq_cell_alloc(pool, &cell, nonblock, file, mutexp);
5767     if (err < 0)
5768     return err;
5769    
5770     @@ -330,7 +335,8 @@ int snd_seq_event_dup(struct snd_seq_pool *pool, struct snd_seq_event *event,
5771     int size = sizeof(struct snd_seq_event);
5772     if (len < size)
5773     size = len;
5774     - err = snd_seq_cell_alloc(pool, &tmp, nonblock, file);
5775     + err = snd_seq_cell_alloc(pool, &tmp, nonblock, file,
5776     + mutexp);
5777     if (err < 0)
5778     goto __error;
5779     if (cell->event.data.ext.ptr == NULL)
5780     diff --git a/sound/core/seq/seq_memory.h b/sound/core/seq/seq_memory.h
5781     index 32f959c17786..3abe306c394a 100644
5782     --- a/sound/core/seq/seq_memory.h
5783     +++ b/sound/core/seq/seq_memory.h
5784     @@ -66,7 +66,8 @@ struct snd_seq_pool {
5785     void snd_seq_cell_free(struct snd_seq_event_cell *cell);
5786    
5787     int snd_seq_event_dup(struct snd_seq_pool *pool, struct snd_seq_event *event,
5788     - struct snd_seq_event_cell **cellp, int nonblock, struct file *file);
5789     + struct snd_seq_event_cell **cellp, int nonblock,
5790     + struct file *file, struct mutex *mutexp);
5791    
5792     /* return number of unused (free) cells */
5793     static inline int snd_seq_unused_cells(struct snd_seq_pool *pool)
5794     diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c
5795     index 37e1cf8218ff..5b4dbcec6de8 100644
5796     --- a/sound/pci/hda/patch_conexant.c
5797     +++ b/sound/pci/hda/patch_conexant.c
5798     @@ -957,6 +957,8 @@ static const struct snd_pci_quirk cxt5066_fixups[] = {
5799     SND_PCI_QUIRK(0x1025, 0x054c, "Acer Aspire 3830TG", CXT_FIXUP_ASPIRE_DMIC),
5800     SND_PCI_QUIRK(0x1025, 0x054f, "Acer Aspire 4830T", CXT_FIXUP_ASPIRE_DMIC),
5801     SND_PCI_QUIRK(0x103c, 0x8079, "HP EliteBook 840 G3", CXT_FIXUP_HP_DOCK),
5802     + SND_PCI_QUIRK(0x103c, 0x807C, "HP EliteBook 820 G3", CXT_FIXUP_HP_DOCK),
5803     + SND_PCI_QUIRK(0x103c, 0x80FD, "HP ProBook 640 G2", CXT_FIXUP_HP_DOCK),
5804     SND_PCI_QUIRK(0x103c, 0x8174, "HP Spectre x360", CXT_FIXUP_HP_SPECTRE),
5805     SND_PCI_QUIRK(0x103c, 0x8115, "HP Z1 Gen3", CXT_FIXUP_HP_GATE_MIC),
5806     SND_PCI_QUIRK(0x103c, 0x814f, "HP ZBook 15u G3", CXT_FIXUP_MUTE_LED_GPIO),
5807     diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
5808     index 454476b47b79..3d19efd2783a 100644
5809     --- a/sound/pci/hda/patch_realtek.c
5810     +++ b/sound/pci/hda/patch_realtek.c
5811     @@ -5129,6 +5129,16 @@ static void alc298_fixup_speaker_volume(struct hda_codec *codec,
5812     }
5813     }
5814    
5815     +/* disable DAC3 (0x06) selection on NID 0x17 as it has no volume amp control */
5816     +static void alc295_fixup_disable_dac3(struct hda_codec *codec,
5817     + const struct hda_fixup *fix, int action)
5818     +{
5819     + if (action == HDA_FIXUP_ACT_PRE_PROBE) {
5820     + hda_nid_t conn[2] = { 0x02, 0x03 };
5821     + snd_hda_override_conn_list(codec, 0x17, 2, conn);
5822     + }
5823     +}
5824     +
5825     /* Hook to update amp GPIO4 for automute */
5826     static void alc280_hp_gpio4_automute_hook(struct hda_codec *codec,
5827     struct hda_jack_callback *jack)
5828     @@ -5321,6 +5331,7 @@ enum {
5829     ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY,
5830     ALC255_FIXUP_DELL_SPK_NOISE,
5831     ALC225_FIXUP_DELL1_MIC_NO_PRESENCE,
5832     + ALC295_FIXUP_DISABLE_DAC3,
5833     ALC280_FIXUP_HP_HEADSET_MIC,
5834     ALC221_FIXUP_HP_FRONT_MIC,
5835     ALC292_FIXUP_TPT460,
5836     @@ -5335,10 +5346,12 @@ enum {
5837     ALC233_FIXUP_EAPD_COEF_AND_MIC_NO_PRESENCE,
5838     ALC233_FIXUP_LENOVO_MULTI_CODECS,
5839     ALC294_FIXUP_LENOVO_MIC_LOCATION,
5840     + ALC225_FIXUP_DELL_WYSE_MIC_NO_PRESENCE,
5841     ALC700_FIXUP_INTEL_REFERENCE,
5842     ALC274_FIXUP_DELL_BIND_DACS,
5843     ALC274_FIXUP_DELL_AIO_LINEOUT_VERB,
5844     ALC298_FIXUP_TPT470_DOCK,
5845     + ALC255_FIXUP_DUMMY_LINEOUT_VERB,
5846     };
5847    
5848     static const struct hda_fixup alc269_fixups[] = {
5849     @@ -6053,6 +6066,10 @@ static const struct hda_fixup alc269_fixups[] = {
5850     .chained = true,
5851     .chain_id = ALC298_FIXUP_DELL_AIO_MIC_NO_PRESENCE,
5852     },
5853     + [ALC295_FIXUP_DISABLE_DAC3] = {
5854     + .type = HDA_FIXUP_FUNC,
5855     + .v.func = alc295_fixup_disable_dac3,
5856     + },
5857     [ALC256_FIXUP_DELL_INSPIRON_7559_SUBWOOFER] = {
5858     .type = HDA_FIXUP_PINS,
5859     .v.pins = (const struct hda_pintbl[]) {
5860     @@ -6138,6 +6155,18 @@ static const struct hda_fixup alc269_fixups[] = {
5861     { }
5862     },
5863     },
5864     + [ALC225_FIXUP_DELL_WYSE_MIC_NO_PRESENCE] = {
5865     + .type = HDA_FIXUP_PINS,
5866     + .v.pins = (const struct hda_pintbl[]) {
5867     + { 0x16, 0x0101102f }, /* Rear Headset HP */
5868     + { 0x19, 0x02a1913c }, /* use as Front headset mic, without its own jack detect */
5869     + { 0x1a, 0x01a19030 }, /* Rear Headset MIC */
5870     + { 0x1b, 0x02011020 },
5871     + { }
5872     + },
5873     + .chained = true,
5874     + .chain_id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC
5875     + },
5876     [ALC700_FIXUP_INTEL_REFERENCE] = {
5877     .type = HDA_FIXUP_VERBS,
5878     .v.verbs = (const struct hda_verb[]) {
5879     @@ -6174,6 +6203,15 @@ static const struct hda_fixup alc269_fixups[] = {
5880     .chained = true,
5881     .chain_id = ALC293_FIXUP_LENOVO_SPK_NOISE
5882     },
5883     + [ALC255_FIXUP_DUMMY_LINEOUT_VERB] = {
5884     + .type = HDA_FIXUP_PINS,
5885     + .v.pins = (const struct hda_pintbl[]) {
5886     + { 0x14, 0x0201101f },
5887     + { }
5888     + },
5889     + .chained = true,
5890     + .chain_id = ALC255_FIXUP_DELL1_MIC_NO_PRESENCE
5891     + },
5892     };
5893    
5894     static const struct snd_pci_quirk alc269_fixup_tbl[] = {
5895     @@ -6222,10 +6260,13 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
5896     SND_PCI_QUIRK(0x1028, 0x0725, "Dell Inspiron 3162", ALC255_FIXUP_DELL_SPK_NOISE),
5897     SND_PCI_QUIRK(0x1028, 0x075b, "Dell XPS 13 9360", ALC256_FIXUP_DELL_XPS_13_HEADPHONE_NOISE),
5898     SND_PCI_QUIRK(0x1028, 0x075d, "Dell AIO", ALC298_FIXUP_SPK_VOLUME),
5899     + SND_PCI_QUIRK(0x1028, 0x07b0, "Dell Precision 7520", ALC295_FIXUP_DISABLE_DAC3),
5900     SND_PCI_QUIRK(0x1028, 0x0798, "Dell Inspiron 17 7000 Gaming", ALC256_FIXUP_DELL_INSPIRON_7559_SUBWOOFER),
5901     + SND_PCI_QUIRK(0x1028, 0x080c, "Dell WYSE", ALC225_FIXUP_DELL_WYSE_MIC_NO_PRESENCE),
5902     SND_PCI_QUIRK(0x1028, 0x082a, "Dell XPS 13 9360", ALC256_FIXUP_DELL_XPS_13_HEADPHONE_NOISE),
5903     SND_PCI_QUIRK(0x1028, 0x084b, "Dell", ALC274_FIXUP_DELL_AIO_LINEOUT_VERB),
5904     SND_PCI_QUIRK(0x1028, 0x084e, "Dell", ALC274_FIXUP_DELL_AIO_LINEOUT_VERB),
5905     + SND_PCI_QUIRK(0x1028, 0x0873, "Dell Precision 3930", ALC255_FIXUP_DUMMY_LINEOUT_VERB),
5906     SND_PCI_QUIRK(0x1028, 0x164a, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
5907     SND_PCI_QUIRK(0x1028, 0x164b, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
5908     SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC2),
5909     @@ -6363,9 +6404,11 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
5910     SND_PCI_QUIRK(0x17aa, 0x2245, "Thinkpad T470", ALC298_FIXUP_TPT470_DOCK),
5911     SND_PCI_QUIRK(0x17aa, 0x2246, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
5912     SND_PCI_QUIRK(0x17aa, 0x2247, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
5913     + SND_PCI_QUIRK(0x17aa, 0x2249, "Thinkpad", ALC292_FIXUP_TPT460),
5914     SND_PCI_QUIRK(0x17aa, 0x224b, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
5915     SND_PCI_QUIRK(0x17aa, 0x224c, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
5916     SND_PCI_QUIRK(0x17aa, 0x224d, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
5917     + SND_PCI_QUIRK(0x17aa, 0x225d, "Thinkpad T480", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
5918     SND_PCI_QUIRK(0x17aa, 0x30bb, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY),
5919     SND_PCI_QUIRK(0x17aa, 0x30e2, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY),
5920     SND_PCI_QUIRK(0x17aa, 0x310c, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION),
5921     @@ -6722,7 +6765,7 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
5922     {0x12, 0x90a60120},
5923     {0x14, 0x90170110},
5924     {0x21, 0x0321101f}),
5925     - SND_HDA_PIN_QUIRK(0x10ec0289, 0x1028, "Dell", ALC225_FIXUP_DELL1_MIC_NO_PRESENCE,
5926     + SND_HDA_PIN_QUIRK(0x10ec0289, 0x1028, "Dell", ALC269_FIXUP_DELL4_MIC_NO_PRESENCE,
5927     {0x12, 0xb7a60130},
5928     {0x14, 0x90170110},
5929     {0x21, 0x04211020}),
5930     diff --git a/sound/soc/intel/boards/kbl_rt5663_rt5514_max98927.c b/sound/soc/intel/boards/kbl_rt5663_rt5514_max98927.c
5931     index 88ff54220007..69ab55956492 100644
5932     --- a/sound/soc/intel/boards/kbl_rt5663_rt5514_max98927.c
5933     +++ b/sound/soc/intel/boards/kbl_rt5663_rt5514_max98927.c
5934     @@ -604,6 +604,8 @@ static int kabylake_card_late_probe(struct snd_soc_card *card)
5935    
5936     list_for_each_entry(pcm, &ctx->hdmi_pcm_list, head) {
5937     codec = pcm->codec_dai->codec;
5938     + snprintf(jack_name, sizeof(jack_name),
5939     + "HDMI/DP,pcm=%d Jack", pcm->device);
5940     err = snd_soc_card_jack_new(card, jack_name,
5941     SND_JACK_AVOUT, &ctx->kabylake_hdmi[i],
5942     NULL, 0);
5943     diff --git a/tools/objtool/builtin-check.c b/tools/objtool/builtin-check.c
5944     index 57254f5b2779..694abc628e9b 100644
5945     --- a/tools/objtool/builtin-check.c
5946     +++ b/tools/objtool/builtin-check.c
5947     @@ -29,7 +29,7 @@
5948     #include "builtin.h"
5949     #include "check.h"
5950    
5951     -bool no_fp, no_unreachable;
5952     +bool no_fp, no_unreachable, retpoline, module;
5953    
5954     static const char * const check_usage[] = {
5955     "objtool check [<options>] file.o",
5956     @@ -39,6 +39,8 @@ static const char * const check_usage[] = {
5957     const struct option check_options[] = {
5958     OPT_BOOLEAN('f', "no-fp", &no_fp, "Skip frame pointer validation"),
5959     OPT_BOOLEAN('u', "no-unreachable", &no_unreachable, "Skip 'unreachable instruction' warnings"),
5960     + OPT_BOOLEAN('r', "retpoline", &retpoline, "Validate retpoline assumptions"),
5961     + OPT_BOOLEAN('m', "module", &module, "Indicates the object will be part of a kernel module"),
5962     OPT_END(),
5963     };
5964    
5965     @@ -53,5 +55,5 @@ int cmd_check(int argc, const char **argv)
5966    
5967     objname = argv[0];
5968    
5969     - return check(objname, no_fp, no_unreachable, false);
5970     + return check(objname, false);
5971     }
5972     diff --git a/tools/objtool/builtin-orc.c b/tools/objtool/builtin-orc.c
5973     index 91e8e19ff5e0..77ea2b97117d 100644
5974     --- a/tools/objtool/builtin-orc.c
5975     +++ b/tools/objtool/builtin-orc.c
5976     @@ -25,7 +25,6 @@
5977     */
5978    
5979     #include <string.h>
5980     -#include <subcmd/parse-options.h>
5981     #include "builtin.h"
5982     #include "check.h"
5983    
5984     @@ -36,9 +35,6 @@ static const char *orc_usage[] = {
5985     NULL,
5986     };
5987    
5988     -extern const struct option check_options[];
5989     -extern bool no_fp, no_unreachable;
5990     -
5991     int cmd_orc(int argc, const char **argv)
5992     {
5993     const char *objname;
5994     @@ -54,7 +50,7 @@ int cmd_orc(int argc, const char **argv)
5995    
5996     objname = argv[0];
5997    
5998     - return check(objname, no_fp, no_unreachable, true);
5999     + return check(objname, true);
6000     }
6001    
6002     if (!strcmp(argv[0], "dump")) {
6003     diff --git a/tools/objtool/builtin.h b/tools/objtool/builtin.h
6004     index dd526067fed5..28ff40e19a14 100644
6005     --- a/tools/objtool/builtin.h
6006     +++ b/tools/objtool/builtin.h
6007     @@ -17,6 +17,11 @@
6008     #ifndef _BUILTIN_H
6009     #define _BUILTIN_H
6010    
6011     +#include <subcmd/parse-options.h>
6012     +
6013     +extern const struct option check_options[];
6014     +extern bool no_fp, no_unreachable, retpoline, module;
6015     +
6016     extern int cmd_check(int argc, const char **argv);
6017     extern int cmd_orc(int argc, const char **argv);
6018    
6019     diff --git a/tools/objtool/check.c b/tools/objtool/check.c
6020     index c7fb5c2392ee..9d01d0b1084e 100644
6021     --- a/tools/objtool/check.c
6022     +++ b/tools/objtool/check.c
6023     @@ -18,6 +18,7 @@
6024     #include <string.h>
6025     #include <stdlib.h>
6026    
6027     +#include "builtin.h"
6028     #include "check.h"
6029     #include "elf.h"
6030     #include "special.h"
6031     @@ -33,7 +34,6 @@ struct alternative {
6032     };
6033    
6034     const char *objname;
6035     -static bool no_fp;
6036     struct cfi_state initial_func_cfi;
6037    
6038     struct instruction *find_insn(struct objtool_file *file,
6039     @@ -496,6 +496,7 @@ static int add_jump_destinations(struct objtool_file *file)
6040     * disguise, so convert them accordingly.
6041     */
6042     insn->type = INSN_JUMP_DYNAMIC;
6043     + insn->retpoline_safe = true;
6044     continue;
6045     } else {
6046     /* sibling call */
6047     @@ -547,7 +548,8 @@ static int add_call_destinations(struct objtool_file *file)
6048     if (!insn->call_dest && !insn->ignore) {
6049     WARN_FUNC("unsupported intra-function call",
6050     insn->sec, insn->offset);
6051     - WARN("If this is a retpoline, please patch it in with alternatives and annotate it with ANNOTATE_NOSPEC_ALTERNATIVE.");
6052     + if (retpoline)
6053     + WARN("If this is a retpoline, please patch it in with alternatives and annotate it with ANNOTATE_NOSPEC_ALTERNATIVE.");
6054     return -1;
6055     }
6056    
6057     @@ -922,7 +924,11 @@ static struct rela *find_switch_table(struct objtool_file *file,
6058     if (find_symbol_containing(file->rodata, text_rela->addend))
6059     continue;
6060    
6061     - return find_rela_by_dest(file->rodata, text_rela->addend);
6062     + rodata_rela = find_rela_by_dest(file->rodata, text_rela->addend);
6063     + if (!rodata_rela)
6064     + continue;
6065     +
6066     + return rodata_rela;
6067     }
6068    
6069     return NULL;
6070     @@ -1107,6 +1113,41 @@ static int read_unwind_hints(struct objtool_file *file)
6071     return 0;
6072     }
6073    
6074     +static int read_retpoline_hints(struct objtool_file *file)
6075     +{
6076     + struct section *sec;
6077     + struct instruction *insn;
6078     + struct rela *rela;
6079     +
6080     + sec = find_section_by_name(file->elf, ".rela.discard.retpoline_safe");
6081     + if (!sec)
6082     + return 0;
6083     +
6084     + list_for_each_entry(rela, &sec->rela_list, list) {
6085     + if (rela->sym->type != STT_SECTION) {
6086     + WARN("unexpected relocation symbol type in %s", sec->name);
6087     + return -1;
6088     + }
6089     +
6090     + insn = find_insn(file, rela->sym->sec, rela->addend);
6091     + if (!insn) {
6092     + WARN("bad .discard.retpoline_safe entry");
6093     + return -1;
6094     + }
6095     +
6096     + if (insn->type != INSN_JUMP_DYNAMIC &&
6097     + insn->type != INSN_CALL_DYNAMIC) {
6098     + WARN_FUNC("retpoline_safe hint not an indirect jump/call",
6099     + insn->sec, insn->offset);
6100     + return -1;
6101     + }
6102     +
6103     + insn->retpoline_safe = true;
6104     + }
6105     +
6106     + return 0;
6107     +}
6108     +
6109     static int decode_sections(struct objtool_file *file)
6110     {
6111     int ret;
6112     @@ -1145,6 +1186,10 @@ static int decode_sections(struct objtool_file *file)
6113     if (ret)
6114     return ret;
6115    
6116     + ret = read_retpoline_hints(file);
6117     + if (ret)
6118     + return ret;
6119     +
6120     return 0;
6121     }
6122    
6123     @@ -1890,6 +1935,38 @@ static int validate_unwind_hints(struct objtool_file *file)
6124     return warnings;
6125     }
6126    
6127     +static int validate_retpoline(struct objtool_file *file)
6128     +{
6129     + struct instruction *insn;
6130     + int warnings = 0;
6131     +
6132     + for_each_insn(file, insn) {
6133     + if (insn->type != INSN_JUMP_DYNAMIC &&
6134     + insn->type != INSN_CALL_DYNAMIC)
6135     + continue;
6136     +
6137     + if (insn->retpoline_safe)
6138     + continue;
6139     +
6140     + /*
6141     + * .init.text code is ran before userspace and thus doesn't
6142     + * strictly need retpolines, except for modules which are
6143     + * loaded late, they very much do need retpoline in their
6144     + * .init.text
6145     + */
6146     + if (!strcmp(insn->sec->name, ".init.text") && !module)
6147     + continue;
6148     +
6149     + WARN_FUNC("indirect %s found in RETPOLINE build",
6150     + insn->sec, insn->offset,
6151     + insn->type == INSN_JUMP_DYNAMIC ? "jump" : "call");
6152     +
6153     + warnings++;
6154     + }
6155     +
6156     + return warnings;
6157     +}
6158     +
6159     static bool is_kasan_insn(struct instruction *insn)
6160     {
6161     return (insn->type == INSN_CALL &&
6162     @@ -2021,13 +2098,12 @@ static void cleanup(struct objtool_file *file)
6163     elf_close(file->elf);
6164     }
6165    
6166     -int check(const char *_objname, bool _no_fp, bool no_unreachable, bool orc)
6167     +int check(const char *_objname, bool orc)
6168     {
6169     struct objtool_file file;
6170     int ret, warnings = 0;
6171    
6172     objname = _objname;
6173     - no_fp = _no_fp;
6174    
6175     file.elf = elf_open(objname, orc ? O_RDWR : O_RDONLY);
6176     if (!file.elf)
6177     @@ -2051,6 +2127,13 @@ int check(const char *_objname, bool _no_fp, bool no_unreachable, bool orc)
6178     if (list_empty(&file.insn_list))
6179     goto out;
6180    
6181     + if (retpoline) {
6182     + ret = validate_retpoline(&file);
6183     + if (ret < 0)
6184     + return ret;
6185     + warnings += ret;
6186     + }
6187     +
6188     ret = validate_functions(&file);
6189     if (ret < 0)
6190     goto out;
6191     diff --git a/tools/objtool/check.h b/tools/objtool/check.h
6192     index 23a1d065cae1..c6b68fcb926f 100644
6193     --- a/tools/objtool/check.h
6194     +++ b/tools/objtool/check.h
6195     @@ -45,6 +45,7 @@ struct instruction {
6196     unsigned char type;
6197     unsigned long immediate;
6198     bool alt_group, visited, dead_end, ignore, hint, save, restore, ignore_alts;
6199     + bool retpoline_safe;
6200     struct symbol *call_dest;
6201     struct instruction *jump_dest;
6202     struct instruction *first_jump_src;
6203     @@ -63,7 +64,7 @@ struct objtool_file {
6204     bool ignore_unreachables, c_file, hints;
6205     };
6206    
6207     -int check(const char *objname, bool no_fp, bool no_unreachable, bool orc);
6208     +int check(const char *objname, bool orc);
6209    
6210     struct instruction *find_insn(struct objtool_file *file,
6211     struct section *sec, unsigned long offset);
6212     diff --git a/tools/perf/util/trigger.h b/tools/perf/util/trigger.h
6213     index 370138e7e35c..88223bc7c82b 100644
6214     --- a/tools/perf/util/trigger.h
6215     +++ b/tools/perf/util/trigger.h
6216     @@ -12,7 +12,7 @@
6217     * States and transits:
6218     *
6219     *
6220     - * OFF--(on)--> READY --(hit)--> HIT
6221     + * OFF--> ON --> READY --(hit)--> HIT
6222     * ^ |
6223     * | (ready)
6224     * | |
6225     @@ -27,8 +27,9 @@ struct trigger {
6226     volatile enum {
6227     TRIGGER_ERROR = -2,
6228     TRIGGER_OFF = -1,
6229     - TRIGGER_READY = 0,
6230     - TRIGGER_HIT = 1,
6231     + TRIGGER_ON = 0,
6232     + TRIGGER_READY = 1,
6233     + TRIGGER_HIT = 2,
6234     } state;
6235     const char *name;
6236     };
6237     @@ -50,7 +51,7 @@ static inline bool trigger_is_error(struct trigger *t)
6238     static inline void trigger_on(struct trigger *t)
6239     {
6240     TRIGGER_WARN_ONCE(t, TRIGGER_OFF);
6241     - t->state = TRIGGER_READY;
6242     + t->state = TRIGGER_ON;
6243     }
6244    
6245     static inline void trigger_ready(struct trigger *t)