Magellan Linux

Annotation of /trunk/kernel-magellan/patches-4.20/0110-4.20.11-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3287 - (hide annotations) (download)
Mon Mar 4 10:38:36 2019 UTC (5 years, 3 months ago) by niro
File size: 119145 byte(s)
linux-4.20.11
1 niro 3287 diff --git a/Documentation/devicetree/bindings/eeprom/at24.txt b/Documentation/devicetree/bindings/eeprom/at24.txt
2     index aededdbc262b..f9a7c984274c 100644
3     --- a/Documentation/devicetree/bindings/eeprom/at24.txt
4     +++ b/Documentation/devicetree/bindings/eeprom/at24.txt
5     @@ -27,6 +27,7 @@ Required properties:
6     "atmel,24c256",
7     "atmel,24c512",
8     "atmel,24c1024",
9     + "atmel,24c2048",
10    
11     If <manufacturer> is not "atmel", then a fallback must be used
12     with the same <model> and "atmel" as manufacturer.
13     diff --git a/Makefile b/Makefile
14     index 6f7a8172de44..193cfe3a3d70 100644
15     --- a/Makefile
16     +++ b/Makefile
17     @@ -1,7 +1,7 @@
18     # SPDX-License-Identifier: GPL-2.0
19     VERSION = 4
20     PATCHLEVEL = 20
21     -SUBLEVEL = 10
22     +SUBLEVEL = 11
23     EXTRAVERSION =
24     NAME = Shy Crocodile
25    
26     diff --git a/arch/alpha/include/asm/irq.h b/arch/alpha/include/asm/irq.h
27     index 4d17cacd1462..432402c8e47f 100644
28     --- a/arch/alpha/include/asm/irq.h
29     +++ b/arch/alpha/include/asm/irq.h
30     @@ -56,15 +56,15 @@
31    
32     #elif defined(CONFIG_ALPHA_DP264) || \
33     defined(CONFIG_ALPHA_LYNX) || \
34     - defined(CONFIG_ALPHA_SHARK) || \
35     - defined(CONFIG_ALPHA_EIGER)
36     + defined(CONFIG_ALPHA_SHARK)
37     # define NR_IRQS 64
38    
39     #elif defined(CONFIG_ALPHA_TITAN)
40     #define NR_IRQS 80
41    
42     #elif defined(CONFIG_ALPHA_RAWHIDE) || \
43     - defined(CONFIG_ALPHA_TAKARA)
44     + defined(CONFIG_ALPHA_TAKARA) || \
45     + defined(CONFIG_ALPHA_EIGER)
46     # define NR_IRQS 128
47    
48     #elif defined(CONFIG_ALPHA_WILDFIRE)
49     diff --git a/arch/alpha/mm/fault.c b/arch/alpha/mm/fault.c
50     index d73dc473fbb9..188fc9256baf 100644
51     --- a/arch/alpha/mm/fault.c
52     +++ b/arch/alpha/mm/fault.c
53     @@ -78,7 +78,7 @@ __load_new_mm_context(struct mm_struct *next_mm)
54     /* Macro for exception fixup code to access integer registers. */
55     #define dpf_reg(r) \
56     (((unsigned long *)regs)[(r) <= 8 ? (r) : (r) <= 15 ? (r)-16 : \
57     - (r) <= 18 ? (r)+8 : (r)-10])
58     + (r) <= 18 ? (r)+10 : (r)-10])
59    
60     asmlinkage void
61     do_page_fault(unsigned long address, unsigned long mmcsr,
62     diff --git a/arch/arm/boot/dts/da850-evm.dts b/arch/arm/boot/dts/da850-evm.dts
63     index a3c9b346721d..f04bc3e15332 100644
64     --- a/arch/arm/boot/dts/da850-evm.dts
65     +++ b/arch/arm/boot/dts/da850-evm.dts
66     @@ -94,6 +94,28 @@
67     regulator-boot-on;
68     };
69    
70     + baseboard_3v3: fixedregulator-3v3 {
71     + /* TPS73701DCQ */
72     + compatible = "regulator-fixed";
73     + regulator-name = "baseboard_3v3";
74     + regulator-min-microvolt = <3300000>;
75     + regulator-max-microvolt = <3300000>;
76     + vin-supply = <&vbat>;
77     + regulator-always-on;
78     + regulator-boot-on;
79     + };
80     +
81     + baseboard_1v8: fixedregulator-1v8 {
82     + /* TPS73701DCQ */
83     + compatible = "regulator-fixed";
84     + regulator-name = "baseboard_1v8";
85     + regulator-min-microvolt = <1800000>;
86     + regulator-max-microvolt = <1800000>;
87     + vin-supply = <&vbat>;
88     + regulator-always-on;
89     + regulator-boot-on;
90     + };
91     +
92     backlight_lcd: backlight-regulator {
93     compatible = "regulator-fixed";
94     regulator-name = "lcd_backlight_pwr";
95     @@ -105,7 +127,7 @@
96    
97     sound {
98     compatible = "simple-audio-card";
99     - simple-audio-card,name = "DA850/OMAP-L138 EVM";
100     + simple-audio-card,name = "DA850-OMAPL138 EVM";
101     simple-audio-card,widgets =
102     "Line", "Line In",
103     "Line", "Line Out";
104     @@ -210,10 +232,9 @@
105    
106     /* Regulators */
107     IOVDD-supply = <&vdcdc2_reg>;
108     - /* Derived from VBAT: Baseboard 3.3V / 1.8V */
109     - AVDD-supply = <&vbat>;
110     - DRVDD-supply = <&vbat>;
111     - DVDD-supply = <&vbat>;
112     + AVDD-supply = <&baseboard_3v3>;
113     + DRVDD-supply = <&baseboard_3v3>;
114     + DVDD-supply = <&baseboard_1v8>;
115     };
116     tca6416: gpio@20 {
117     compatible = "ti,tca6416";
118     diff --git a/arch/arm/boot/dts/da850-lcdk.dts b/arch/arm/boot/dts/da850-lcdk.dts
119     index 0177e3ed20fe..3a2fa6e035a3 100644
120     --- a/arch/arm/boot/dts/da850-lcdk.dts
121     +++ b/arch/arm/boot/dts/da850-lcdk.dts
122     @@ -39,9 +39,39 @@
123     };
124     };
125    
126     + vcc_5vd: fixedregulator-vcc_5vd {
127     + compatible = "regulator-fixed";
128     + regulator-name = "vcc_5vd";
129     + regulator-min-microvolt = <5000000>;
130     + regulator-max-microvolt = <5000000>;
131     + regulator-boot-on;
132     + };
133     +
134     + vcc_3v3d: fixedregulator-vcc_3v3d {
135     + /* TPS650250 - VDCDC1 */
136     + compatible = "regulator-fixed";
137     + regulator-name = "vcc_3v3d";
138     + regulator-min-microvolt = <3300000>;
139     + regulator-max-microvolt = <3300000>;
140     + vin-supply = <&vcc_5vd>;
141     + regulator-always-on;
142     + regulator-boot-on;
143     + };
144     +
145     + vcc_1v8d: fixedregulator-vcc_1v8d {
146     + /* TPS650250 - VDCDC2 */
147     + compatible = "regulator-fixed";
148     + regulator-name = "vcc_1v8d";
149     + regulator-min-microvolt = <1800000>;
150     + regulator-max-microvolt = <1800000>;
151     + vin-supply = <&vcc_5vd>;
152     + regulator-always-on;
153     + regulator-boot-on;
154     + };
155     +
156     sound {
157     compatible = "simple-audio-card";
158     - simple-audio-card,name = "DA850/OMAP-L138 LCDK";
159     + simple-audio-card,name = "DA850-OMAPL138 LCDK";
160     simple-audio-card,widgets =
161     "Line", "Line In",
162     "Line", "Line Out";
163     @@ -221,6 +251,12 @@
164     compatible = "ti,tlv320aic3106";
165     reg = <0x18>;
166     status = "okay";
167     +
168     + /* Regulators */
169     + IOVDD-supply = <&vcc_3v3d>;
170     + AVDD-supply = <&vcc_3v3d>;
171     + DRVDD-supply = <&vcc_3v3d>;
172     + DVDD-supply = <&vcc_1v8d>;
173     };
174     };
175    
176     diff --git a/arch/arm/boot/dts/kirkwood-dnskw.dtsi b/arch/arm/boot/dts/kirkwood-dnskw.dtsi
177     index cbaf06f2f78e..eb917462b219 100644
178     --- a/arch/arm/boot/dts/kirkwood-dnskw.dtsi
179     +++ b/arch/arm/boot/dts/kirkwood-dnskw.dtsi
180     @@ -36,8 +36,8 @@
181     compatible = "gpio-fan";
182     pinctrl-0 = <&pmx_fan_high_speed &pmx_fan_low_speed>;
183     pinctrl-names = "default";
184     - gpios = <&gpio1 14 GPIO_ACTIVE_LOW
185     - &gpio1 13 GPIO_ACTIVE_LOW>;
186     + gpios = <&gpio1 14 GPIO_ACTIVE_HIGH
187     + &gpio1 13 GPIO_ACTIVE_HIGH>;
188     gpio-fan,speed-map = <0 0
189     3000 1
190     6000 2>;
191     diff --git a/arch/arm/boot/dts/omap5-board-common.dtsi b/arch/arm/boot/dts/omap5-board-common.dtsi
192     index bf7ca00f4c21..c2dc4199b4ec 100644
193     --- a/arch/arm/boot/dts/omap5-board-common.dtsi
194     +++ b/arch/arm/boot/dts/omap5-board-common.dtsi
195     @@ -317,7 +317,8 @@
196    
197     palmas_sys_nirq_pins: pinmux_palmas_sys_nirq_pins {
198     pinctrl-single,pins = <
199     - OMAP5_IOPAD(0x068, PIN_INPUT_PULLUP | MUX_MODE0) /* sys_nirq1 */
200     + /* sys_nirq1 is pulled down as the SoC is inverting it for GIC */
201     + OMAP5_IOPAD(0x068, PIN_INPUT_PULLUP | MUX_MODE0)
202     >;
203     };
204    
205     @@ -385,7 +386,8 @@
206    
207     palmas: palmas@48 {
208     compatible = "ti,palmas";
209     - interrupts = <GIC_SPI 7 IRQ_TYPE_NONE>; /* IRQ_SYS_1N */
210     + /* sys_nirq/ext_sys_irq pins get inverted at mpuss wakeupgen */
211     + interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_LOW>;
212     reg = <0x48>;
213     interrupt-controller;
214     #interrupt-cells = <2>;
215     @@ -651,7 +653,8 @@
216     pinctrl-names = "default";
217     pinctrl-0 = <&twl6040_pins>;
218    
219     - interrupts = <GIC_SPI 119 IRQ_TYPE_NONE>; /* IRQ_SYS_2N cascaded to gic */
220     + /* sys_nirq/ext_sys_irq pins get inverted at mpuss wakeupgen */
221     + interrupts = <GIC_SPI 119 IRQ_TYPE_LEVEL_LOW>;
222    
223     /* audpwron gpio defined in the board specific dts */
224    
225     diff --git a/arch/arm/boot/dts/omap5-cm-t54.dts b/arch/arm/boot/dts/omap5-cm-t54.dts
226     index 5e21fb430a65..e78d3718f145 100644
227     --- a/arch/arm/boot/dts/omap5-cm-t54.dts
228     +++ b/arch/arm/boot/dts/omap5-cm-t54.dts
229     @@ -181,6 +181,13 @@
230     OMAP5_IOPAD(0x0042, PIN_INPUT_PULLDOWN | MUX_MODE6) /* llib_wakereqin.gpio1_wk15 */
231     >;
232     };
233     +
234     + palmas_sys_nirq_pins: pinmux_palmas_sys_nirq_pins {
235     + pinctrl-single,pins = <
236     + /* sys_nirq1 is pulled down as the SoC is inverting it for GIC */
237     + OMAP5_IOPAD(0x068, PIN_INPUT_PULLUP | MUX_MODE0)
238     + >;
239     + };
240     };
241    
242     &omap5_pmx_core {
243     @@ -414,8 +421,11 @@
244    
245     palmas: palmas@48 {
246     compatible = "ti,palmas";
247     - interrupts = <GIC_SPI 7 IRQ_TYPE_NONE>; /* IRQ_SYS_1N */
248     reg = <0x48>;
249     + pinctrl-0 = <&palmas_sys_nirq_pins>;
250     + pinctrl-names = "default";
251     + /* sys_nirq/ext_sys_irq pins get inverted at mpuss wakeupgen */
252     + interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_LOW>;
253     interrupt-controller;
254     #interrupt-cells = <2>;
255     ti,system-power-controller;
256     diff --git a/arch/arm/mach-integrator/impd1.c b/arch/arm/mach-integrator/impd1.c
257     index a109f6482413..0f916c245a2e 100644
258     --- a/arch/arm/mach-integrator/impd1.c
259     +++ b/arch/arm/mach-integrator/impd1.c
260     @@ -393,7 +393,11 @@ static int __ref impd1_probe(struct lm_device *dev)
261     sizeof(*lookup) + 3 * sizeof(struct gpiod_lookup),
262     GFP_KERNEL);
263     chipname = devm_kstrdup(&dev->dev, devname, GFP_KERNEL);
264     - mmciname = kasprintf(GFP_KERNEL, "lm%x:00700", dev->id);
265     + mmciname = devm_kasprintf(&dev->dev, GFP_KERNEL,
266     + "lm%x:00700", dev->id);
267     + if (!lookup || !chipname || !mmciname)
268     + return -ENOMEM;
269     +
270     lookup->dev_id = mmciname;
271     /*
272     * Offsets on GPIO block 1:
273     diff --git a/arch/arm/mach-omap2/omap-wakeupgen.c b/arch/arm/mach-omap2/omap-wakeupgen.c
274     index fc5fb776a710..17558be4bf0a 100644
275     --- a/arch/arm/mach-omap2/omap-wakeupgen.c
276     +++ b/arch/arm/mach-omap2/omap-wakeupgen.c
277     @@ -50,6 +50,9 @@
278     #define OMAP4_NR_BANKS 4
279     #define OMAP4_NR_IRQS 128
280    
281     +#define SYS_NIRQ1_EXT_SYS_IRQ_1 7
282     +#define SYS_NIRQ2_EXT_SYS_IRQ_2 119
283     +
284     static void __iomem *wakeupgen_base;
285     static void __iomem *sar_base;
286     static DEFINE_RAW_SPINLOCK(wakeupgen_lock);
287     @@ -153,6 +156,37 @@ static void wakeupgen_unmask(struct irq_data *d)
288     irq_chip_unmask_parent(d);
289     }
290    
291     +/*
292     + * The sys_nirq pins bypass peripheral modules and are wired directly
293     + * to MPUSS wakeupgen. They get automatically inverted for GIC.
294     + */
295     +static int wakeupgen_irq_set_type(struct irq_data *d, unsigned int type)
296     +{
297     + bool inverted = false;
298     +
299     + switch (type) {
300     + case IRQ_TYPE_LEVEL_LOW:
301     + type &= ~IRQ_TYPE_LEVEL_MASK;
302     + type |= IRQ_TYPE_LEVEL_HIGH;
303     + inverted = true;
304     + break;
305     + case IRQ_TYPE_EDGE_FALLING:
306     + type &= ~IRQ_TYPE_EDGE_BOTH;
307     + type |= IRQ_TYPE_EDGE_RISING;
308     + inverted = true;
309     + break;
310     + default:
311     + break;
312     + }
313     +
314     + if (inverted && d->hwirq != SYS_NIRQ1_EXT_SYS_IRQ_1 &&
315     + d->hwirq != SYS_NIRQ2_EXT_SYS_IRQ_2)
316     + pr_warn("wakeupgen: irq%li polarity inverted in dts\n",
317     + d->hwirq);
318     +
319     + return irq_chip_set_type_parent(d, type);
320     +}
321     +
322     #ifdef CONFIG_HOTPLUG_CPU
323     static DEFINE_PER_CPU(u32 [MAX_NR_REG_BANKS], irqmasks);
324    
325     @@ -446,7 +480,7 @@ static struct irq_chip wakeupgen_chip = {
326     .irq_mask = wakeupgen_mask,
327     .irq_unmask = wakeupgen_unmask,
328     .irq_retrigger = irq_chip_retrigger_hierarchy,
329     - .irq_set_type = irq_chip_set_type_parent,
330     + .irq_set_type = wakeupgen_irq_set_type,
331     .flags = IRQCHIP_SKIP_SET_WAKE | IRQCHIP_MASK_ON_SUSPEND,
332     #ifdef CONFIG_SMP
333     .irq_set_affinity = irq_chip_set_affinity_parent,
334     diff --git a/arch/arm64/boot/dts/rockchip/rk3328-rock64.dts b/arch/arm64/boot/dts/rockchip/rk3328-rock64.dts
335     index dc20145dd393..c6509a02480d 100644
336     --- a/arch/arm64/boot/dts/rockchip/rk3328-rock64.dts
337     +++ b/arch/arm64/boot/dts/rockchip/rk3328-rock64.dts
338     @@ -40,6 +40,7 @@
339     pinctrl-0 = <&usb30_host_drv>;
340     regulator-name = "vcc_host_5v";
341     regulator-always-on;
342     + regulator-boot-on;
343     vin-supply = <&vcc_sys>;
344     };
345    
346     @@ -51,6 +52,7 @@
347     pinctrl-0 = <&usb20_host_drv>;
348     regulator-name = "vcc_host1_5v";
349     regulator-always-on;
350     + regulator-boot-on;
351     vin-supply = <&vcc_sys>;
352     };
353    
354     diff --git a/arch/csky/include/asm/io.h b/arch/csky/include/asm/io.h
355     index ecae6b358f95..c1dfa9c10e36 100644
356     --- a/arch/csky/include/asm/io.h
357     +++ b/arch/csky/include/asm/io.h
358     @@ -15,6 +15,31 @@ extern void iounmap(void *addr);
359     extern int remap_area_pages(unsigned long address, phys_addr_t phys_addr,
360     size_t size, unsigned long flags);
361    
362     +/*
363     + * I/O memory access primitives. Reads are ordered relative to any
364     + * following Normal memory access. Writes are ordered relative to any prior
365     + * Normal memory access.
366     + *
367     + * For CACHEV1 (807, 810), store instruction could fast retire, so we need
368     + * another mb() to prevent st fast retire.
369     + *
370     + * For CACHEV2 (860), store instruction with PAGE_ATTR_NO_BUFFERABLE won't
371     + * fast retire.
372     + */
373     +#define readb(c) ({ u8 __v = readb_relaxed(c); rmb(); __v; })
374     +#define readw(c) ({ u16 __v = readw_relaxed(c); rmb(); __v; })
375     +#define readl(c) ({ u32 __v = readl_relaxed(c); rmb(); __v; })
376     +
377     +#ifdef CONFIG_CPU_HAS_CACHEV2
378     +#define writeb(v,c) ({ wmb(); writeb_relaxed((v),(c)); })
379     +#define writew(v,c) ({ wmb(); writew_relaxed((v),(c)); })
380     +#define writel(v,c) ({ wmb(); writel_relaxed((v),(c)); })
381     +#else
382     +#define writeb(v,c) ({ wmb(); writeb_relaxed((v),(c)); mb(); })
383     +#define writew(v,c) ({ wmb(); writew_relaxed((v),(c)); mb(); })
384     +#define writel(v,c) ({ wmb(); writel_relaxed((v),(c)); mb(); })
385     +#endif
386     +
387     #define ioremap_nocache(phy, sz) ioremap(phy, sz)
388     #define ioremap_wc ioremap_nocache
389     #define ioremap_wt ioremap_nocache
390     diff --git a/arch/csky/kernel/module.c b/arch/csky/kernel/module.c
391     index 65abab0c7a47..b5ad7d9de18c 100644
392     --- a/arch/csky/kernel/module.c
393     +++ b/arch/csky/kernel/module.c
394     @@ -12,7 +12,7 @@
395     #include <linux/spinlock.h>
396     #include <asm/pgtable.h>
397    
398     -#if defined(__CSKYABIV2__)
399     +#ifdef CONFIG_CPU_CK810
400     #define IS_BSR32(hi16, lo16) (((hi16) & 0xFC00) == 0xE000)
401     #define IS_JSRI32(hi16, lo16) ((hi16) == 0xEAE0)
402    
403     @@ -25,6 +25,26 @@
404     *(uint16_t *)(addr) = 0xE8Fa; \
405     *((uint16_t *)(addr) + 1) = 0x0000; \
406     } while (0)
407     +
408     +static void jsri_2_lrw_jsr(uint32_t *location)
409     +{
410     + uint16_t *location_tmp = (uint16_t *)location;
411     +
412     + if (IS_BSR32(*location_tmp, *(location_tmp + 1)))
413     + return;
414     +
415     + if (IS_JSRI32(*location_tmp, *(location_tmp + 1))) {
416     + /* jsri 0x... --> lrw r26, 0x... */
417     + CHANGE_JSRI_TO_LRW(location);
418     + /* lsli r0, r0 --> jsr r26 */
419     + SET_JSR32_R26(location + 1);
420     + }
421     +}
422     +#else
423     +static void inline jsri_2_lrw_jsr(uint32_t *location)
424     +{
425     + return;
426     +}
427     #endif
428    
429     int apply_relocate_add(Elf32_Shdr *sechdrs, const char *strtab,
430     @@ -35,9 +55,6 @@ int apply_relocate_add(Elf32_Shdr *sechdrs, const char *strtab,
431     Elf32_Sym *sym;
432     uint32_t *location;
433     short *temp;
434     -#if defined(__CSKYABIV2__)
435     - uint16_t *location_tmp;
436     -#endif
437    
438     for (i = 0; i < sechdrs[relsec].sh_size / sizeof(*rel); i++) {
439     /* This is where to make the change */
440     @@ -59,18 +76,7 @@ int apply_relocate_add(Elf32_Shdr *sechdrs, const char *strtab,
441     case R_CSKY_PCRELJSR_IMM11BY2:
442     break;
443     case R_CSKY_PCRELJSR_IMM26BY2:
444     -#if defined(__CSKYABIV2__)
445     - location_tmp = (uint16_t *)location;
446     - if (IS_BSR32(*location_tmp, *(location_tmp + 1)))
447     - break;
448     -
449     - if (IS_JSRI32(*location_tmp, *(location_tmp + 1))) {
450     - /* jsri 0x... --> lrw r26, 0x... */
451     - CHANGE_JSRI_TO_LRW(location);
452     - /* lsli r0, r0 --> jsr r26 */
453     - SET_JSR32_R26(location + 1);
454     - }
455     -#endif
456     + jsri_2_lrw_jsr(location);
457     break;
458     case R_CSKY_ADDR_HI16:
459     temp = ((short *)location) + 1;
460     diff --git a/arch/powerpc/include/asm/book3s/64/pgtable.h b/arch/powerpc/include/asm/book3s/64/pgtable.h
461     index db706ffc4ca9..5ff63d53b31c 100644
462     --- a/arch/powerpc/include/asm/book3s/64/pgtable.h
463     +++ b/arch/powerpc/include/asm/book3s/64/pgtable.h
464     @@ -904,7 +904,7 @@ static inline int pud_none(pud_t pud)
465    
466     static inline int pud_present(pud_t pud)
467     {
468     - return (pud_raw(pud) & cpu_to_be64(_PAGE_PRESENT));
469     + return !!(pud_raw(pud) & cpu_to_be64(_PAGE_PRESENT));
470     }
471    
472     extern struct page *pud_page(pud_t pud);
473     @@ -951,7 +951,7 @@ static inline int pgd_none(pgd_t pgd)
474    
475     static inline int pgd_present(pgd_t pgd)
476     {
477     - return (pgd_raw(pgd) & cpu_to_be64(_PAGE_PRESENT));
478     + return !!(pgd_raw(pgd) & cpu_to_be64(_PAGE_PRESENT));
479     }
480    
481     static inline pte_t pgd_pte(pgd_t pgd)
482     diff --git a/arch/riscv/include/asm/pgtable-bits.h b/arch/riscv/include/asm/pgtable-bits.h
483     index 2fa2942be221..470755cb7558 100644
484     --- a/arch/riscv/include/asm/pgtable-bits.h
485     +++ b/arch/riscv/include/asm/pgtable-bits.h
486     @@ -35,6 +35,12 @@
487     #define _PAGE_SPECIAL _PAGE_SOFT
488     #define _PAGE_TABLE _PAGE_PRESENT
489    
490     +/*
491     + * _PAGE_PROT_NONE is set on not-present pages (and ignored by the hardware) to
492     + * distinguish them from swapped out pages
493     + */
494     +#define _PAGE_PROT_NONE _PAGE_READ
495     +
496     #define _PAGE_PFN_SHIFT 10
497    
498     /* Set of bits to preserve across pte_modify() */
499     diff --git a/arch/riscv/include/asm/pgtable.h b/arch/riscv/include/asm/pgtable.h
500     index 16301966d65b..a8179a8c1491 100644
501     --- a/arch/riscv/include/asm/pgtable.h
502     +++ b/arch/riscv/include/asm/pgtable.h
503     @@ -44,7 +44,7 @@
504     /* Page protection bits */
505     #define _PAGE_BASE (_PAGE_PRESENT | _PAGE_ACCESSED | _PAGE_USER)
506    
507     -#define PAGE_NONE __pgprot(0)
508     +#define PAGE_NONE __pgprot(_PAGE_PROT_NONE)
509     #define PAGE_READ __pgprot(_PAGE_BASE | _PAGE_READ)
510     #define PAGE_WRITE __pgprot(_PAGE_BASE | _PAGE_READ | _PAGE_WRITE)
511     #define PAGE_EXEC __pgprot(_PAGE_BASE | _PAGE_EXEC)
512     @@ -98,7 +98,7 @@ extern unsigned long empty_zero_page[PAGE_SIZE / sizeof(unsigned long)];
513    
514     static inline int pmd_present(pmd_t pmd)
515     {
516     - return (pmd_val(pmd) & _PAGE_PRESENT);
517     + return (pmd_val(pmd) & (_PAGE_PRESENT | _PAGE_PROT_NONE));
518     }
519    
520     static inline int pmd_none(pmd_t pmd)
521     @@ -178,7 +178,7 @@ static inline pte_t *pte_offset_kernel(pmd_t *pmd, unsigned long addr)
522    
523     static inline int pte_present(pte_t pte)
524     {
525     - return (pte_val(pte) & _PAGE_PRESENT);
526     + return (pte_val(pte) & (_PAGE_PRESENT | _PAGE_PROT_NONE));
527     }
528    
529     static inline int pte_none(pte_t pte)
530     @@ -380,7 +380,7 @@ static inline int ptep_clear_flush_young(struct vm_area_struct *vma,
531     *
532     * Format of swap PTE:
533     * bit 0: _PAGE_PRESENT (zero)
534     - * bit 1: reserved for future use (zero)
535     + * bit 1: _PAGE_PROT_NONE (zero)
536     * bits 2 to 6: swap type
537     * bits 7 to XLEN-1: swap offset
538     */
539     diff --git a/arch/riscv/kernel/ptrace.c b/arch/riscv/kernel/ptrace.c
540     index 60f1e02eed36..6c898d540d9d 100644
541     --- a/arch/riscv/kernel/ptrace.c
542     +++ b/arch/riscv/kernel/ptrace.c
543     @@ -172,6 +172,6 @@ void do_syscall_trace_exit(struct pt_regs *regs)
544    
545     #ifdef CONFIG_HAVE_SYSCALL_TRACEPOINTS
546     if (test_thread_flag(TIF_SYSCALL_TRACEPOINT))
547     - trace_sys_exit(regs, regs->regs[0]);
548     + trace_sys_exit(regs, regs_return_value(regs));
549     #endif
550     }
551     diff --git a/arch/s390/kernel/swsusp.S b/arch/s390/kernel/swsusp.S
552     index 537f97fde37f..b6796e616812 100644
553     --- a/arch/s390/kernel/swsusp.S
554     +++ b/arch/s390/kernel/swsusp.S
555     @@ -30,10 +30,10 @@
556     .section .text
557     ENTRY(swsusp_arch_suspend)
558     lg %r1,__LC_NODAT_STACK
559     - aghi %r1,-STACK_FRAME_OVERHEAD
560     stmg %r6,%r15,__SF_GPRS(%r1)
561     + aghi %r1,-STACK_FRAME_OVERHEAD
562     stg %r15,__SF_BACKCHAIN(%r1)
563     - lgr %r1,%r15
564     + lgr %r15,%r1
565    
566     /* Store FPU registers */
567     brasl %r14,save_fpu_regs
568     diff --git a/arch/x86/events/core.c b/arch/x86/events/core.c
569     index 374a19712e20..b684f0294f35 100644
570     --- a/arch/x86/events/core.c
571     +++ b/arch/x86/events/core.c
572     @@ -2278,6 +2278,19 @@ void perf_check_microcode(void)
573     x86_pmu.check_microcode();
574     }
575    
576     +static int x86_pmu_check_period(struct perf_event *event, u64 value)
577     +{
578     + if (x86_pmu.check_period && x86_pmu.check_period(event, value))
579     + return -EINVAL;
580     +
581     + if (value && x86_pmu.limit_period) {
582     + if (x86_pmu.limit_period(event, value) > value)
583     + return -EINVAL;
584     + }
585     +
586     + return 0;
587     +}
588     +
589     static struct pmu pmu = {
590     .pmu_enable = x86_pmu_enable,
591     .pmu_disable = x86_pmu_disable,
592     @@ -2302,6 +2315,7 @@ static struct pmu pmu = {
593     .event_idx = x86_pmu_event_idx,
594     .sched_task = x86_pmu_sched_task,
595     .task_ctx_size = sizeof(struct x86_perf_task_context),
596     + .check_period = x86_pmu_check_period,
597     };
598    
599     void arch_perf_update_userpage(struct perf_event *event,
600     diff --git a/arch/x86/events/intel/core.c b/arch/x86/events/intel/core.c
601     index 90b6718ff861..ede20c44cc69 100644
602     --- a/arch/x86/events/intel/core.c
603     +++ b/arch/x86/events/intel/core.c
604     @@ -3587,6 +3587,11 @@ static void intel_pmu_sched_task(struct perf_event_context *ctx,
605     intel_pmu_lbr_sched_task(ctx, sched_in);
606     }
607    
608     +static int intel_pmu_check_period(struct perf_event *event, u64 value)
609     +{
610     + return intel_pmu_has_bts_period(event, value) ? -EINVAL : 0;
611     +}
612     +
613     PMU_FORMAT_ATTR(offcore_rsp, "config1:0-63");
614    
615     PMU_FORMAT_ATTR(ldlat, "config1:0-15");
616     @@ -3667,6 +3672,8 @@ static __initconst const struct x86_pmu core_pmu = {
617     .cpu_starting = intel_pmu_cpu_starting,
618     .cpu_dying = intel_pmu_cpu_dying,
619     .cpu_dead = intel_pmu_cpu_dead,
620     +
621     + .check_period = intel_pmu_check_period,
622     };
623    
624     static struct attribute *intel_pmu_attrs[];
625     @@ -3711,6 +3718,8 @@ static __initconst const struct x86_pmu intel_pmu = {
626    
627     .guest_get_msrs = intel_guest_get_msrs,
628     .sched_task = intel_pmu_sched_task,
629     +
630     + .check_period = intel_pmu_check_period,
631     };
632    
633     static __init void intel_clovertown_quirk(void)
634     diff --git a/arch/x86/events/perf_event.h b/arch/x86/events/perf_event.h
635     index 78d7b7031bfc..d46fd6754d92 100644
636     --- a/arch/x86/events/perf_event.h
637     +++ b/arch/x86/events/perf_event.h
638     @@ -646,6 +646,11 @@ struct x86_pmu {
639     * Intel host/guest support (KVM)
640     */
641     struct perf_guest_switch_msr *(*guest_get_msrs)(int *nr);
642     +
643     + /*
644     + * Check period value for PERF_EVENT_IOC_PERIOD ioctl.
645     + */
646     + int (*check_period) (struct perf_event *event, u64 period);
647     };
648    
649     struct x86_perf_task_context {
650     @@ -857,7 +862,7 @@ static inline int amd_pmu_init(void)
651    
652     #ifdef CONFIG_CPU_SUP_INTEL
653    
654     -static inline bool intel_pmu_has_bts(struct perf_event *event)
655     +static inline bool intel_pmu_has_bts_period(struct perf_event *event, u64 period)
656     {
657     struct hw_perf_event *hwc = &event->hw;
658     unsigned int hw_event, bts_event;
659     @@ -868,7 +873,14 @@ static inline bool intel_pmu_has_bts(struct perf_event *event)
660     hw_event = hwc->config & INTEL_ARCH_EVENT_MASK;
661     bts_event = x86_pmu.event_map(PERF_COUNT_HW_BRANCH_INSTRUCTIONS);
662    
663     - return hw_event == bts_event && hwc->sample_period == 1;
664     + return hw_event == bts_event && period == 1;
665     +}
666     +
667     +static inline bool intel_pmu_has_bts(struct perf_event *event)
668     +{
669     + struct hw_perf_event *hwc = &event->hw;
670     +
671     + return intel_pmu_has_bts_period(event, hwc->sample_period);
672     }
673    
674     int intel_pmu_save_and_restart(struct perf_event *event);
675     diff --git a/arch/x86/ia32/ia32_aout.c b/arch/x86/ia32/ia32_aout.c
676     index 8e02b30cf08e..3ebd77770f98 100644
677     --- a/arch/x86/ia32/ia32_aout.c
678     +++ b/arch/x86/ia32/ia32_aout.c
679     @@ -51,7 +51,7 @@ static unsigned long get_dr(int n)
680     /*
681     * fill in the user structure for a core dump..
682     */
683     -static void dump_thread32(struct pt_regs *regs, struct user32 *dump)
684     +static void fill_dump(struct pt_regs *regs, struct user32 *dump)
685     {
686     u32 fs, gs;
687     memset(dump, 0, sizeof(*dump));
688     @@ -157,10 +157,12 @@ static int aout_core_dump(struct coredump_params *cprm)
689     fs = get_fs();
690     set_fs(KERNEL_DS);
691     has_dumped = 1;
692     +
693     + fill_dump(cprm->regs, &dump);
694     +
695     strncpy(dump.u_comm, current->comm, sizeof(current->comm));
696     dump.u_ar0 = offsetof(struct user32, regs);
697     dump.signal = cprm->siginfo->si_signo;
698     - dump_thread32(cprm->regs, &dump);
699    
700     /*
701     * If the size of the dump file exceeds the rlimit, then see
702     diff --git a/arch/x86/include/asm/uv/bios.h b/arch/x86/include/asm/uv/bios.h
703     index e652a7cc6186..3f697a9e3f59 100644
704     --- a/arch/x86/include/asm/uv/bios.h
705     +++ b/arch/x86/include/asm/uv/bios.h
706     @@ -48,7 +48,8 @@ enum {
707     BIOS_STATUS_SUCCESS = 0,
708     BIOS_STATUS_UNIMPLEMENTED = -ENOSYS,
709     BIOS_STATUS_EINVAL = -EINVAL,
710     - BIOS_STATUS_UNAVAIL = -EBUSY
711     + BIOS_STATUS_UNAVAIL = -EBUSY,
712     + BIOS_STATUS_ABORT = -EINTR,
713     };
714    
715     /* Address map parameters */
716     @@ -167,4 +168,9 @@ extern long system_serial_number;
717    
718     extern struct kobject *sgi_uv_kobj; /* /sys/firmware/sgi_uv */
719    
720     +/*
721     + * EFI runtime lock; cf. firmware/efi/runtime-wrappers.c for details
722     + */
723     +extern struct semaphore __efi_uv_runtime_lock;
724     +
725     #endif /* _ASM_X86_UV_BIOS_H */
726     diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
727     index 11641d9e7f6f..13baba9d1cc1 100644
728     --- a/arch/x86/kvm/svm.c
729     +++ b/arch/x86/kvm/svm.c
730     @@ -6255,6 +6255,9 @@ static int sev_guest_init(struct kvm *kvm, struct kvm_sev_cmd *argp)
731     int asid, ret;
732    
733     ret = -EBUSY;
734     + if (unlikely(sev->active))
735     + return ret;
736     +
737     asid = sev_asid_new();
738     if (asid < 0)
739     return ret;
740     diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
741     index 4ce6595e454c..bbd0520867a8 100644
742     --- a/arch/x86/kvm/vmx.c
743     +++ b/arch/x86/kvm/vmx.c
744     @@ -2779,7 +2779,8 @@ static void add_atomic_switch_msr(struct vcpu_vmx *vmx, unsigned msr,
745     if (!entry_only)
746     j = find_msr(&m->host, msr);
747    
748     - if (i == NR_AUTOLOAD_MSRS || j == NR_AUTOLOAD_MSRS) {
749     + if ((i < 0 && m->guest.nr == NR_AUTOLOAD_MSRS) ||
750     + (j < 0 && m->host.nr == NR_AUTOLOAD_MSRS)) {
751     printk_once(KERN_WARNING "Not enough msr switch entries. "
752     "Can't add msr %x\n", msr);
753     return;
754     @@ -3620,9 +3621,11 @@ static void nested_vmx_setup_ctls_msrs(struct nested_vmx_msrs *msrs, bool apicv)
755     * secondary cpu-based controls. Do not include those that
756     * depend on CPUID bits, they are added later by vmx_cpuid_update.
757     */
758     - rdmsr(MSR_IA32_VMX_PROCBASED_CTLS2,
759     - msrs->secondary_ctls_low,
760     - msrs->secondary_ctls_high);
761     + if (msrs->procbased_ctls_high & CPU_BASED_ACTIVATE_SECONDARY_CONTROLS)
762     + rdmsr(MSR_IA32_VMX_PROCBASED_CTLS2,
763     + msrs->secondary_ctls_low,
764     + msrs->secondary_ctls_high);
765     +
766     msrs->secondary_ctls_low = 0;
767     msrs->secondary_ctls_high &=
768     SECONDARY_EXEC_DESC |
769     diff --git a/arch/x86/platform/uv/bios_uv.c b/arch/x86/platform/uv/bios_uv.c
770     index 4a6a5a26c582..eb33432f2f24 100644
771     --- a/arch/x86/platform/uv/bios_uv.c
772     +++ b/arch/x86/platform/uv/bios_uv.c
773     @@ -29,7 +29,8 @@
774    
775     struct uv_systab *uv_systab;
776    
777     -s64 uv_bios_call(enum uv_bios_cmd which, u64 a1, u64 a2, u64 a3, u64 a4, u64 a5)
778     +static s64 __uv_bios_call(enum uv_bios_cmd which, u64 a1, u64 a2, u64 a3,
779     + u64 a4, u64 a5)
780     {
781     struct uv_systab *tab = uv_systab;
782     s64 ret;
783     @@ -51,6 +52,19 @@ s64 uv_bios_call(enum uv_bios_cmd which, u64 a1, u64 a2, u64 a3, u64 a4, u64 a5)
784    
785     return ret;
786     }
787     +
788     +s64 uv_bios_call(enum uv_bios_cmd which, u64 a1, u64 a2, u64 a3, u64 a4, u64 a5)
789     +{
790     + s64 ret;
791     +
792     + if (down_interruptible(&__efi_uv_runtime_lock))
793     + return BIOS_STATUS_ABORT;
794     +
795     + ret = __uv_bios_call(which, a1, a2, a3, a4, a5);
796     + up(&__efi_uv_runtime_lock);
797     +
798     + return ret;
799     +}
800     EXPORT_SYMBOL_GPL(uv_bios_call);
801    
802     s64 uv_bios_call_irqsave(enum uv_bios_cmd which, u64 a1, u64 a2, u64 a3,
803     @@ -59,10 +73,15 @@ s64 uv_bios_call_irqsave(enum uv_bios_cmd which, u64 a1, u64 a2, u64 a3,
804     unsigned long bios_flags;
805     s64 ret;
806    
807     + if (down_interruptible(&__efi_uv_runtime_lock))
808     + return BIOS_STATUS_ABORT;
809     +
810     local_irq_save(bios_flags);
811     - ret = uv_bios_call(which, a1, a2, a3, a4, a5);
812     + ret = __uv_bios_call(which, a1, a2, a3, a4, a5);
813     local_irq_restore(bios_flags);
814    
815     + up(&__efi_uv_runtime_lock);
816     +
817     return ret;
818     }
819    
820     diff --git a/block/blk-flush.c b/block/blk-flush.c
821     index 8b44b86779da..87fc49daa2b4 100644
822     --- a/block/blk-flush.c
823     +++ b/block/blk-flush.c
824     @@ -424,7 +424,7 @@ static void mq_flush_data_end_io(struct request *rq, blk_status_t error)
825     blk_flush_complete_seq(rq, fq, REQ_FSEQ_DATA, error);
826     spin_unlock_irqrestore(&fq->mq_flush_lock, flags);
827    
828     - blk_mq_run_hw_queue(hctx, true);
829     + blk_mq_sched_restart(hctx);
830     }
831    
832     /**
833     diff --git a/drivers/acpi/numa.c b/drivers/acpi/numa.c
834     index 274699463b4f..7bbbf8256a41 100644
835     --- a/drivers/acpi/numa.c
836     +++ b/drivers/acpi/numa.c
837     @@ -146,9 +146,9 @@ acpi_table_print_srat_entry(struct acpi_subtable_header *header)
838     {
839     struct acpi_srat_mem_affinity *p =
840     (struct acpi_srat_mem_affinity *)header;
841     - pr_debug("SRAT Memory (0x%lx length 0x%lx) in proximity domain %d %s%s%s\n",
842     - (unsigned long)p->base_address,
843     - (unsigned long)p->length,
844     + pr_debug("SRAT Memory (0x%llx length 0x%llx) in proximity domain %d %s%s%s\n",
845     + (unsigned long long)p->base_address,
846     + (unsigned long long)p->length,
847     p->proximity_domain,
848     (p->flags & ACPI_SRAT_MEM_ENABLED) ?
849     "enabled" : "disabled",
850     diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
851     index 7aa3dcad2175..df34a12a388f 100644
852     --- a/drivers/cpufreq/cpufreq.c
853     +++ b/drivers/cpufreq/cpufreq.c
854     @@ -1530,17 +1530,16 @@ static unsigned int __cpufreq_get(struct cpufreq_policy *policy)
855     {
856     unsigned int ret_freq = 0;
857    
858     - if (!cpufreq_driver->get)
859     + if (unlikely(policy_is_inactive(policy)) || !cpufreq_driver->get)
860     return ret_freq;
861    
862     ret_freq = cpufreq_driver->get(policy->cpu);
863    
864     /*
865     - * Updating inactive policies is invalid, so avoid doing that. Also
866     - * if fast frequency switching is used with the given policy, the check
867     + * If fast frequency switching is used with the given policy, the check
868     * against policy->cur is pointless, so skip it in that case too.
869     */
870     - if (unlikely(policy_is_inactive(policy)) || policy->fast_switch_enabled)
871     + if (policy->fast_switch_enabled)
872     return ret_freq;
873    
874     if (ret_freq && policy->cur &&
875     @@ -1569,10 +1568,7 @@ unsigned int cpufreq_get(unsigned int cpu)
876    
877     if (policy) {
878     down_read(&policy->rwsem);
879     -
880     - if (!policy_is_inactive(policy))
881     - ret_freq = __cpufreq_get(policy);
882     -
883     + ret_freq = __cpufreq_get(policy);
884     up_read(&policy->rwsem);
885    
886     cpufreq_cpu_put(policy);
887     diff --git a/drivers/crypto/ccree/cc_driver.c b/drivers/crypto/ccree/cc_driver.c
888     index 1ff229c2aeab..186a2536fb8b 100644
889     --- a/drivers/crypto/ccree/cc_driver.c
890     +++ b/drivers/crypto/ccree/cc_driver.c
891     @@ -364,7 +364,7 @@ static int init_cc_resources(struct platform_device *plat_dev)
892     rc = cc_ivgen_init(new_drvdata);
893     if (rc) {
894     dev_err(dev, "cc_ivgen_init failed\n");
895     - goto post_power_mgr_err;
896     + goto post_buf_mgr_err;
897     }
898    
899     /* Allocate crypto algs */
900     @@ -387,6 +387,9 @@ static int init_cc_resources(struct platform_device *plat_dev)
901     goto post_hash_err;
902     }
903    
904     + /* All set, we can allow autosuspend */
905     + cc_pm_go(new_drvdata);
906     +
907     /* If we got here and FIPS mode is enabled
908     * it means all FIPS test passed, so let TEE
909     * know we're good.
910     @@ -401,8 +404,6 @@ post_cipher_err:
911     cc_cipher_free(new_drvdata);
912     post_ivgen_err:
913     cc_ivgen_fini(new_drvdata);
914     -post_power_mgr_err:
915     - cc_pm_fini(new_drvdata);
916     post_buf_mgr_err:
917     cc_buffer_mgr_fini(new_drvdata);
918     post_req_mgr_err:
919     diff --git a/drivers/crypto/ccree/cc_pm.c b/drivers/crypto/ccree/cc_pm.c
920     index d990f472e89f..6ff7e75ad90e 100644
921     --- a/drivers/crypto/ccree/cc_pm.c
922     +++ b/drivers/crypto/ccree/cc_pm.c
923     @@ -100,20 +100,19 @@ int cc_pm_put_suspend(struct device *dev)
924    
925     int cc_pm_init(struct cc_drvdata *drvdata)
926     {
927     - int rc = 0;
928     struct device *dev = drvdata_to_dev(drvdata);
929    
930     /* must be before the enabling to avoid resdundent suspending */
931     pm_runtime_set_autosuspend_delay(dev, CC_SUSPEND_TIMEOUT);
932     pm_runtime_use_autosuspend(dev);
933     /* activate the PM module */
934     - rc = pm_runtime_set_active(dev);
935     - if (rc)
936     - return rc;
937     - /* enable the PM module*/
938     - pm_runtime_enable(dev);
939     + return pm_runtime_set_active(dev);
940     +}
941    
942     - return rc;
943     +/* enable the PM module*/
944     +void cc_pm_go(struct cc_drvdata *drvdata)
945     +{
946     + pm_runtime_enable(drvdata_to_dev(drvdata));
947     }
948    
949     void cc_pm_fini(struct cc_drvdata *drvdata)
950     diff --git a/drivers/crypto/ccree/cc_pm.h b/drivers/crypto/ccree/cc_pm.h
951     index 020a5403c58b..f62624357020 100644
952     --- a/drivers/crypto/ccree/cc_pm.h
953     +++ b/drivers/crypto/ccree/cc_pm.h
954     @@ -16,6 +16,7 @@
955     extern const struct dev_pm_ops ccree_pm;
956    
957     int cc_pm_init(struct cc_drvdata *drvdata);
958     +void cc_pm_go(struct cc_drvdata *drvdata);
959     void cc_pm_fini(struct cc_drvdata *drvdata);
960     int cc_pm_suspend(struct device *dev);
961     int cc_pm_resume(struct device *dev);
962     @@ -29,6 +30,8 @@ static inline int cc_pm_init(struct cc_drvdata *drvdata)
963     return 0;
964     }
965    
966     +static void cc_pm_go(struct cc_drvdata *drvdata) {}
967     +
968     static inline void cc_pm_fini(struct cc_drvdata *drvdata) {}
969    
970     static inline int cc_pm_suspend(struct device *dev)
971     diff --git a/drivers/firmware/efi/runtime-wrappers.c b/drivers/firmware/efi/runtime-wrappers.c
972     index 8903b9ccfc2b..e2abfdb5cee6 100644
973     --- a/drivers/firmware/efi/runtime-wrappers.c
974     +++ b/drivers/firmware/efi/runtime-wrappers.c
975     @@ -146,6 +146,13 @@ void efi_call_virt_check_flags(unsigned long flags, const char *call)
976     */
977     static DEFINE_SEMAPHORE(efi_runtime_lock);
978    
979     +/*
980     + * Expose the EFI runtime lock to the UV platform
981     + */
982     +#ifdef CONFIG_X86_UV
983     +extern struct semaphore __efi_uv_runtime_lock __alias(efi_runtime_lock);
984     +#endif
985     +
986     /*
987     * Calls the appropriate efi_runtime_service() with the appropriate
988     * arguments.
989     diff --git a/drivers/gpio/gpio-mxc.c b/drivers/gpio/gpio-mxc.c
990     index 995cf0b9e0b1..2d1dfa1e0745 100644
991     --- a/drivers/gpio/gpio-mxc.c
992     +++ b/drivers/gpio/gpio-mxc.c
993     @@ -17,6 +17,7 @@
994     #include <linux/irqchip/chained_irq.h>
995     #include <linux/platform_device.h>
996     #include <linux/slab.h>
997     +#include <linux/syscore_ops.h>
998     #include <linux/gpio/driver.h>
999     #include <linux/of.h>
1000     #include <linux/of_device.h>
1001     @@ -550,33 +551,38 @@ static void mxc_gpio_restore_regs(struct mxc_gpio_port *port)
1002     writel(port->gpio_saved_reg.dr, port->base + GPIO_DR);
1003     }
1004    
1005     -static int __maybe_unused mxc_gpio_noirq_suspend(struct device *dev)
1006     +static int mxc_gpio_syscore_suspend(void)
1007     {
1008     - struct platform_device *pdev = to_platform_device(dev);
1009     - struct mxc_gpio_port *port = platform_get_drvdata(pdev);
1010     + struct mxc_gpio_port *port;
1011    
1012     - mxc_gpio_save_regs(port);
1013     - clk_disable_unprepare(port->clk);
1014     + /* walk through all ports */
1015     + list_for_each_entry(port, &mxc_gpio_ports, node) {
1016     + mxc_gpio_save_regs(port);
1017     + clk_disable_unprepare(port->clk);
1018     + }
1019    
1020     return 0;
1021     }
1022    
1023     -static int __maybe_unused mxc_gpio_noirq_resume(struct device *dev)
1024     +static void mxc_gpio_syscore_resume(void)
1025     {
1026     - struct platform_device *pdev = to_platform_device(dev);
1027     - struct mxc_gpio_port *port = platform_get_drvdata(pdev);
1028     + struct mxc_gpio_port *port;
1029     int ret;
1030    
1031     - ret = clk_prepare_enable(port->clk);
1032     - if (ret)
1033     - return ret;
1034     - mxc_gpio_restore_regs(port);
1035     -
1036     - return 0;
1037     + /* walk through all ports */
1038     + list_for_each_entry(port, &mxc_gpio_ports, node) {
1039     + ret = clk_prepare_enable(port->clk);
1040     + if (ret) {
1041     + pr_err("mxc: failed to enable gpio clock %d\n", ret);
1042     + return;
1043     + }
1044     + mxc_gpio_restore_regs(port);
1045     + }
1046     }
1047    
1048     -static const struct dev_pm_ops mxc_gpio_dev_pm_ops = {
1049     - SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(mxc_gpio_noirq_suspend, mxc_gpio_noirq_resume)
1050     +static struct syscore_ops mxc_gpio_syscore_ops = {
1051     + .suspend = mxc_gpio_syscore_suspend,
1052     + .resume = mxc_gpio_syscore_resume,
1053     };
1054    
1055     static struct platform_driver mxc_gpio_driver = {
1056     @@ -584,7 +590,6 @@ static struct platform_driver mxc_gpio_driver = {
1057     .name = "gpio-mxc",
1058     .of_match_table = mxc_gpio_dt_ids,
1059     .suppress_bind_attrs = true,
1060     - .pm = &mxc_gpio_dev_pm_ops,
1061     },
1062     .probe = mxc_gpio_probe,
1063     .id_table = mxc_gpio_devtype,
1064     @@ -592,6 +597,8 @@ static struct platform_driver mxc_gpio_driver = {
1065    
1066     static int __init gpio_mxc_init(void)
1067     {
1068     + register_syscore_ops(&mxc_gpio_syscore_ops);
1069     +
1070     return platform_driver_register(&mxc_gpio_driver);
1071     }
1072     subsys_initcall(gpio_mxc_init);
1073     diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
1074     index 30bc345d6fdf..8547fdaf8273 100644
1075     --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
1076     +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
1077     @@ -1684,8 +1684,10 @@ static int amdgpu_device_ip_init(struct amdgpu_device *adev)
1078     amdgpu_xgmi_add_device(adev);
1079     amdgpu_amdkfd_device_init(adev);
1080    
1081     - if (amdgpu_sriov_vf(adev))
1082     + if (amdgpu_sriov_vf(adev)) {
1083     + amdgpu_virt_init_data_exchange(adev);
1084     amdgpu_virt_release_full_gpu(adev, true);
1085     + }
1086    
1087     return 0;
1088     }
1089     @@ -2597,9 +2599,6 @@ fence_driver_init:
1090     goto failed;
1091     }
1092    
1093     - if (amdgpu_sriov_vf(adev))
1094     - amdgpu_virt_init_data_exchange(adev);
1095     -
1096     amdgpu_fbdev_init(adev);
1097    
1098     r = amdgpu_pm_sysfs_init(adev);
1099     @@ -3271,6 +3270,7 @@ static int amdgpu_device_reset_sriov(struct amdgpu_device *adev,
1100     r = amdgpu_ib_ring_tests(adev);
1101    
1102     error:
1103     + amdgpu_virt_init_data_exchange(adev);
1104     amdgpu_virt_release_full_gpu(adev, true);
1105     if (!r && adev->virt.gim_feature & AMDGIM_FEATURE_GIM_FLR_VRAMLOST) {
1106     atomic_inc(&adev->vram_lost_counter);
1107     diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
1108     index 0877ff9a9594..8c9abaa7601a 100644
1109     --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
1110     +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
1111     @@ -850,9 +850,6 @@ static void amdgpu_vm_bo_param(struct amdgpu_device *adev, struct amdgpu_vm *vm,
1112     bp->size = amdgpu_vm_bo_size(adev, level);
1113     bp->byte_align = AMDGPU_GPU_PAGE_SIZE;
1114     bp->domain = AMDGPU_GEM_DOMAIN_VRAM;
1115     - if (bp->size <= PAGE_SIZE && adev->asic_type >= CHIP_VEGA10 &&
1116     - adev->flags & AMD_IS_APU)
1117     - bp->domain |= AMDGPU_GEM_DOMAIN_GTT;
1118     bp->domain = amdgpu_bo_get_preferred_pin_domain(adev, bp->domain);
1119     bp->flags = AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS |
1120     AMDGPU_GEM_CREATE_CPU_GTT_USWC;
1121     diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
1122     index 21363b2b2ee5..88ed064b3585 100644
1123     --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
1124     +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
1125     @@ -112,7 +112,10 @@ static const struct soc15_reg_golden golden_settings_gc_9_0[] =
1126     SOC15_REG_GOLDEN_VALUE(GC, 0, mmTCP_CHAN_STEER_HI, 0xffffffff, 0x4a2c0e68),
1127     SOC15_REG_GOLDEN_VALUE(GC, 0, mmTCP_CHAN_STEER_LO, 0xffffffff, 0xb5d3f197),
1128     SOC15_REG_GOLDEN_VALUE(GC, 0, mmVGT_CACHE_INVALIDATION, 0x3fff3af3, 0x19200000),
1129     - SOC15_REG_GOLDEN_VALUE(GC, 0, mmVGT_GS_MAX_WAVE_ID, 0x00000fff, 0x000003ff)
1130     + SOC15_REG_GOLDEN_VALUE(GC, 0, mmVGT_GS_MAX_WAVE_ID, 0x00000fff, 0x000003ff),
1131     + SOC15_REG_GOLDEN_VALUE(GC, 0, mmCP_MEC1_F32_INT_DIS, 0x00000000, 0x00000800),
1132     + SOC15_REG_GOLDEN_VALUE(GC, 0, mmCP_MEC2_F32_INT_DIS, 0x00000000, 0x00000800),
1133     + SOC15_REG_GOLDEN_VALUE(GC, 0, mmCP_DEBUG, 0x00000000, 0x00008000)
1134     };
1135    
1136     static const struct soc15_reg_golden golden_settings_gc_9_0_vg10[] =
1137     @@ -134,10 +137,7 @@ static const struct soc15_reg_golden golden_settings_gc_9_0_vg10[] =
1138     SOC15_REG_GOLDEN_VALUE(GC, 0, mmRMI_UTCL1_CNTL2, 0x00030000, 0x00020000),
1139     SOC15_REG_GOLDEN_VALUE(GC, 0, mmSPI_CONFIG_CNTL_1, 0x0000000f, 0x01000107),
1140     SOC15_REG_GOLDEN_VALUE(GC, 0, mmTD_CNTL, 0x00001800, 0x00000800),
1141     - SOC15_REG_GOLDEN_VALUE(GC, 0, mmWD_UTCL1_CNTL, 0x08000000, 0x08000080),
1142     - SOC15_REG_GOLDEN_VALUE(GC, 0, mmCP_MEC1_F32_INT_DIS, 0x00000000, 0x00000800),
1143     - SOC15_REG_GOLDEN_VALUE(GC, 0, mmCP_MEC2_F32_INT_DIS, 0x00000000, 0x00000800),
1144     - SOC15_REG_GOLDEN_VALUE(GC, 0, mmCP_DEBUG, 0x00000000, 0x00008000)
1145     + SOC15_REG_GOLDEN_VALUE(GC, 0, mmWD_UTCL1_CNTL, 0x08000000, 0x08000080)
1146     };
1147    
1148     static const struct soc15_reg_golden golden_settings_gc_9_0_vg20[] =
1149     diff --git a/drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c b/drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c
1150     index 8cbb4655896a..b11a1c17a7f2 100644
1151     --- a/drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c
1152     +++ b/drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c
1153     @@ -174,7 +174,7 @@ static int xgpu_ai_send_access_requests(struct amdgpu_device *adev,
1154     return r;
1155     }
1156     /* Retrieve checksum from mailbox2 */
1157     - if (req == IDH_REQ_GPU_INIT_ACCESS) {
1158     + if (req == IDH_REQ_GPU_INIT_ACCESS || req == IDH_REQ_GPU_RESET_ACCESS) {
1159     adev->virt.fw_reserve.checksum_key =
1160     RREG32_NO_KIQ(SOC15_REG_OFFSET(NBIO, 0,
1161     mmBIF_BX_PF0_MAILBOX_MSGBUF_RCV_DW2));
1162     diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
1163     index 7a8c9172d30a..86d5dc5f8887 100644
1164     --- a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
1165     +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
1166     @@ -73,7 +73,6 @@ static const struct soc15_reg_golden golden_settings_sdma_4[] = {
1167     SOC15_REG_GOLDEN_VALUE(SDMA0, 0, mmSDMA0_RLC1_RB_WPTR_POLL_CNTL, 0x0000fff0, 0x00403000),
1168     SOC15_REG_GOLDEN_VALUE(SDMA0, 0, mmSDMA0_UTCL1_PAGE, 0x000003ff, 0x000003c0),
1169     SOC15_REG_GOLDEN_VALUE(SDMA0, 0, mmSDMA0_UTCL1_WATERMK, 0xfc000000, 0x00000000),
1170     - SOC15_REG_GOLDEN_VALUE(SDMA1, 0, mmSDMA1_CHICKEN_BITS, 0xfe931f07, 0x02831f07),
1171     SOC15_REG_GOLDEN_VALUE(SDMA1, 0, mmSDMA1_CLK_CTRL, 0xffffffff, 0x3f000100),
1172     SOC15_REG_GOLDEN_VALUE(SDMA1, 0, mmSDMA1_GFX_IB_CNTL, 0x800f0100, 0x00000100),
1173     SOC15_REG_GOLDEN_VALUE(SDMA1, 0, mmSDMA1_GFX_RB_WPTR_POLL_CNTL, 0x0000fff0, 0x00403000),
1174     @@ -91,6 +90,7 @@ static const struct soc15_reg_golden golden_settings_sdma_4[] = {
1175     static const struct soc15_reg_golden golden_settings_sdma_vg10[] = {
1176     SOC15_REG_GOLDEN_VALUE(SDMA0, 0, mmSDMA0_GB_ADDR_CONFIG, 0x0018773f, 0x00104002),
1177     SOC15_REG_GOLDEN_VALUE(SDMA0, 0, mmSDMA0_GB_ADDR_CONFIG_READ, 0x0018773f, 0x00104002),
1178     + SOC15_REG_GOLDEN_VALUE(SDMA1, 0, mmSDMA1_CHICKEN_BITS, 0xfe931f07, 0x02831d07),
1179     SOC15_REG_GOLDEN_VALUE(SDMA1, 0, mmSDMA1_GB_ADDR_CONFIG, 0x0018773f, 0x00104002),
1180     SOC15_REG_GOLDEN_VALUE(SDMA1, 0, mmSDMA1_GB_ADDR_CONFIG_READ, 0x0018773f, 0x00104002)
1181     };
1182     @@ -98,6 +98,7 @@ static const struct soc15_reg_golden golden_settings_sdma_vg10[] = {
1183     static const struct soc15_reg_golden golden_settings_sdma_vg12[] = {
1184     SOC15_REG_GOLDEN_VALUE(SDMA0, 0, mmSDMA0_GB_ADDR_CONFIG, 0x0018773f, 0x00104001),
1185     SOC15_REG_GOLDEN_VALUE(SDMA0, 0, mmSDMA0_GB_ADDR_CONFIG_READ, 0x0018773f, 0x00104001),
1186     + SOC15_REG_GOLDEN_VALUE(SDMA1, 0, mmSDMA1_CHICKEN_BITS, 0xfe931f07, 0x02831d07),
1187     SOC15_REG_GOLDEN_VALUE(SDMA1, 0, mmSDMA1_GB_ADDR_CONFIG, 0x0018773f, 0x00104001),
1188     SOC15_REG_GOLDEN_VALUE(SDMA1, 0, mmSDMA1_GB_ADDR_CONFIG_READ, 0x0018773f, 0x00104001)
1189     };
1190     diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c
1191     index 3b7fce5d7258..b9e19b0eb905 100644
1192     --- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c
1193     +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c
1194     @@ -2244,6 +2244,13 @@ static int vega20_force_clock_level(struct pp_hwmgr *hwmgr,
1195     soft_min_level = mask ? (ffs(mask) - 1) : 0;
1196     soft_max_level = mask ? (fls(mask) - 1) : 0;
1197    
1198     + if (soft_max_level >= data->dpm_table.gfx_table.count) {
1199     + pr_err("Clock level specified %d is over max allowed %d\n",
1200     + soft_max_level,
1201     + data->dpm_table.gfx_table.count - 1);
1202     + return -EINVAL;
1203     + }
1204     +
1205     data->dpm_table.gfx_table.dpm_state.soft_min_level =
1206     data->dpm_table.gfx_table.dpm_levels[soft_min_level].value;
1207     data->dpm_table.gfx_table.dpm_state.soft_max_level =
1208     @@ -2264,6 +2271,13 @@ static int vega20_force_clock_level(struct pp_hwmgr *hwmgr,
1209     soft_min_level = mask ? (ffs(mask) - 1) : 0;
1210     soft_max_level = mask ? (fls(mask) - 1) : 0;
1211    
1212     + if (soft_max_level >= data->dpm_table.mem_table.count) {
1213     + pr_err("Clock level specified %d is over max allowed %d\n",
1214     + soft_max_level,
1215     + data->dpm_table.mem_table.count - 1);
1216     + return -EINVAL;
1217     + }
1218     +
1219     data->dpm_table.mem_table.dpm_state.soft_min_level =
1220     data->dpm_table.mem_table.dpm_levels[soft_min_level].value;
1221     data->dpm_table.mem_table.dpm_state.soft_max_level =
1222     diff --git a/drivers/gpu/drm/bridge/tc358767.c b/drivers/gpu/drm/bridge/tc358767.c
1223     index 8e28e738cb52..391547358756 100644
1224     --- a/drivers/gpu/drm/bridge/tc358767.c
1225     +++ b/drivers/gpu/drm/bridge/tc358767.c
1226     @@ -98,6 +98,8 @@
1227     #define DP0_STARTVAL 0x064c
1228     #define DP0_ACTIVEVAL 0x0650
1229     #define DP0_SYNCVAL 0x0654
1230     +#define SYNCVAL_HS_POL_ACTIVE_LOW (1 << 15)
1231     +#define SYNCVAL_VS_POL_ACTIVE_LOW (1 << 31)
1232     #define DP0_MISC 0x0658
1233     #define TU_SIZE_RECOMMENDED (63) /* LSCLK cycles per TU */
1234     #define BPC_6 (0 << 5)
1235     @@ -142,6 +144,8 @@
1236     #define DP0_LTLOOPCTRL 0x06d8
1237     #define DP0_SNKLTCTRL 0x06e4
1238    
1239     +#define DP1_SRCCTRL 0x07a0
1240     +
1241     /* PHY */
1242     #define DP_PHY_CTRL 0x0800
1243     #define DP_PHY_RST BIT(28) /* DP PHY Global Soft Reset */
1244     @@ -150,6 +154,7 @@
1245     #define PHY_M1_RST BIT(12) /* Reset PHY1 Main Channel */
1246     #define PHY_RDY BIT(16) /* PHY Main Channels Ready */
1247     #define PHY_M0_RST BIT(8) /* Reset PHY0 Main Channel */
1248     +#define PHY_2LANE BIT(2) /* PHY Enable 2 lanes */
1249     #define PHY_A0_EN BIT(1) /* PHY Aux Channel0 Enable */
1250     #define PHY_M0_EN BIT(0) /* PHY Main Channel0 Enable */
1251    
1252     @@ -540,6 +545,7 @@ static int tc_aux_link_setup(struct tc_data *tc)
1253     unsigned long rate;
1254     u32 value;
1255     int ret;
1256     + u32 dp_phy_ctrl;
1257    
1258     rate = clk_get_rate(tc->refclk);
1259     switch (rate) {
1260     @@ -564,7 +570,10 @@ static int tc_aux_link_setup(struct tc_data *tc)
1261     value |= SYSCLK_SEL_LSCLK | LSCLK_DIV_2;
1262     tc_write(SYS_PLLPARAM, value);
1263    
1264     - tc_write(DP_PHY_CTRL, BGREN | PWR_SW_EN | BIT(2) | PHY_A0_EN);
1265     + dp_phy_ctrl = BGREN | PWR_SW_EN | PHY_A0_EN;
1266     + if (tc->link.base.num_lanes == 2)
1267     + dp_phy_ctrl |= PHY_2LANE;
1268     + tc_write(DP_PHY_CTRL, dp_phy_ctrl);
1269    
1270     /*
1271     * Initially PLLs are in bypass. Force PLL parameter update,
1272     @@ -719,7 +728,9 @@ static int tc_set_video_mode(struct tc_data *tc, struct drm_display_mode *mode)
1273    
1274     tc_write(DP0_ACTIVEVAL, (mode->vdisplay << 16) | (mode->hdisplay));
1275    
1276     - tc_write(DP0_SYNCVAL, (vsync_len << 16) | (hsync_len << 0));
1277     + tc_write(DP0_SYNCVAL, (vsync_len << 16) | (hsync_len << 0) |
1278     + ((mode->flags & DRM_MODE_FLAG_NHSYNC) ? SYNCVAL_HS_POL_ACTIVE_LOW : 0) |
1279     + ((mode->flags & DRM_MODE_FLAG_NVSYNC) ? SYNCVAL_VS_POL_ACTIVE_LOW : 0));
1280    
1281     tc_write(DPIPXLFMT, VS_POL_ACTIVE_LOW | HS_POL_ACTIVE_LOW |
1282     DE_POL_ACTIVE_HIGH | SUB_CFG_TYPE_CONFIG1 | DPI_BPP_RGB888);
1283     @@ -829,12 +840,11 @@ static int tc_main_link_setup(struct tc_data *tc)
1284     if (!tc->mode)
1285     return -EINVAL;
1286    
1287     - /* from excel file - DP0_SrcCtrl */
1288     - tc_write(DP0_SRCCTRL, DP0_SRCCTRL_SCRMBLDIS | DP0_SRCCTRL_EN810B |
1289     - DP0_SRCCTRL_LANESKEW | DP0_SRCCTRL_LANES_2 |
1290     - DP0_SRCCTRL_BW27 | DP0_SRCCTRL_AUTOCORRECT);
1291     - /* from excel file - DP1_SrcCtrl */
1292     - tc_write(0x07a0, 0x00003083);
1293     + tc_write(DP0_SRCCTRL, tc_srcctrl(tc));
1294     + /* SSCG and BW27 on DP1 must be set to the same as on DP0 */
1295     + tc_write(DP1_SRCCTRL,
1296     + (tc->link.spread ? DP0_SRCCTRL_SSCG : 0) |
1297     + ((tc->link.base.rate != 162000) ? DP0_SRCCTRL_BW27 : 0));
1298    
1299     rate = clk_get_rate(tc->refclk);
1300     switch (rate) {
1301     @@ -855,8 +865,11 @@ static int tc_main_link_setup(struct tc_data *tc)
1302     }
1303     value |= SYSCLK_SEL_LSCLK | LSCLK_DIV_2;
1304     tc_write(SYS_PLLPARAM, value);
1305     +
1306     /* Setup Main Link */
1307     - dp_phy_ctrl = BGREN | PWR_SW_EN | BIT(2) | PHY_A0_EN | PHY_M0_EN;
1308     + dp_phy_ctrl = BGREN | PWR_SW_EN | PHY_A0_EN | PHY_M0_EN;
1309     + if (tc->link.base.num_lanes == 2)
1310     + dp_phy_ctrl |= PHY_2LANE;
1311     tc_write(DP_PHY_CTRL, dp_phy_ctrl);
1312     msleep(100);
1313    
1314     @@ -1105,10 +1118,20 @@ static bool tc_bridge_mode_fixup(struct drm_bridge *bridge,
1315     static enum drm_mode_status tc_connector_mode_valid(struct drm_connector *connector,
1316     struct drm_display_mode *mode)
1317     {
1318     + struct tc_data *tc = connector_to_tc(connector);
1319     + u32 req, avail;
1320     + u32 bits_per_pixel = 24;
1321     +
1322     /* DPI interface clock limitation: upto 154 MHz */
1323     if (mode->clock > 154000)
1324     return MODE_CLOCK_HIGH;
1325    
1326     + req = mode->clock * bits_per_pixel / 8;
1327     + avail = tc->link.base.num_lanes * tc->link.base.rate;
1328     +
1329     + if (req > avail)
1330     + return MODE_BAD;
1331     +
1332     return MODE_OK;
1333     }
1334    
1335     @@ -1195,6 +1218,10 @@ static int tc_bridge_attach(struct drm_bridge *bridge)
1336    
1337     drm_display_info_set_bus_formats(&tc->connector.display_info,
1338     &bus_format, 1);
1339     + tc->connector.display_info.bus_flags =
1340     + DRM_BUS_FLAG_DE_HIGH |
1341     + DRM_BUS_FLAG_PIXDATA_NEGEDGE |
1342     + DRM_BUS_FLAG_SYNC_NEGEDGE;
1343     drm_connector_attach_encoder(&tc->connector, tc->bridge.encoder);
1344    
1345     return 0;
1346     diff --git a/drivers/gpu/drm/drm_lease.c b/drivers/gpu/drm/drm_lease.c
1347     index c61680ad962d..6e59789e3316 100644
1348     --- a/drivers/gpu/drm/drm_lease.c
1349     +++ b/drivers/gpu/drm/drm_lease.c
1350     @@ -521,7 +521,8 @@ int drm_mode_create_lease_ioctl(struct drm_device *dev,
1351    
1352     object_count = cl->object_count;
1353    
1354     - object_ids = memdup_user(u64_to_user_ptr(cl->object_ids), object_count * sizeof(__u32));
1355     + object_ids = memdup_user(u64_to_user_ptr(cl->object_ids),
1356     + array_size(object_count, sizeof(__u32)));
1357     if (IS_ERR(object_ids))
1358     return PTR_ERR(object_ids);
1359    
1360     diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
1361     index 6ae9a6080cc8..296f9c0fe19b 100644
1362     --- a/drivers/gpu/drm/i915/i915_gem.c
1363     +++ b/drivers/gpu/drm/i915/i915_gem.c
1364     @@ -1826,6 +1826,16 @@ i915_gem_sw_finish_ioctl(struct drm_device *dev, void *data,
1365     return 0;
1366     }
1367    
1368     +static inline bool
1369     +__vma_matches(struct vm_area_struct *vma, struct file *filp,
1370     + unsigned long addr, unsigned long size)
1371     +{
1372     + if (vma->vm_file != filp)
1373     + return false;
1374     +
1375     + return vma->vm_start == addr && (vma->vm_end - vma->vm_start) == size;
1376     +}
1377     +
1378     /**
1379     * i915_gem_mmap_ioctl - Maps the contents of an object, returning the address
1380     * it is mapped to.
1381     @@ -1884,7 +1894,7 @@ i915_gem_mmap_ioctl(struct drm_device *dev, void *data,
1382     return -EINTR;
1383     }
1384     vma = find_vma(mm, addr);
1385     - if (vma)
1386     + if (vma && __vma_matches(vma, obj->base.filp, addr, args->size))
1387     vma->vm_page_prot =
1388     pgprot_writecombine(vm_get_page_prot(vma->vm_flags));
1389     else
1390     diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
1391     index db6fa1d0cbda..f35139b3ebc5 100644
1392     --- a/drivers/gpu/drm/i915/intel_drv.h
1393     +++ b/drivers/gpu/drm/i915/intel_drv.h
1394     @@ -209,6 +209,16 @@ struct intel_fbdev {
1395     unsigned long vma_flags;
1396     async_cookie_t cookie;
1397     int preferred_bpp;
1398     +
1399     + /* Whether or not fbdev hpd processing is temporarily suspended */
1400     + bool hpd_suspended : 1;
1401     + /* Set when a hotplug was received while HPD processing was
1402     + * suspended
1403     + */
1404     + bool hpd_waiting : 1;
1405     +
1406     + /* Protects hpd_suspended */
1407     + struct mutex hpd_lock;
1408     };
1409    
1410     struct intel_encoder {
1411     diff --git a/drivers/gpu/drm/i915/intel_fbdev.c b/drivers/gpu/drm/i915/intel_fbdev.c
1412     index f99332972b7a..9e2e998b198f 100644
1413     --- a/drivers/gpu/drm/i915/intel_fbdev.c
1414     +++ b/drivers/gpu/drm/i915/intel_fbdev.c
1415     @@ -679,6 +679,7 @@ int intel_fbdev_init(struct drm_device *dev)
1416     if (ifbdev == NULL)
1417     return -ENOMEM;
1418    
1419     + mutex_init(&ifbdev->hpd_lock);
1420     drm_fb_helper_prepare(dev, &ifbdev->helper, &intel_fb_helper_funcs);
1421    
1422     if (!intel_fbdev_init_bios(dev, ifbdev))
1423     @@ -752,6 +753,26 @@ void intel_fbdev_fini(struct drm_i915_private *dev_priv)
1424     intel_fbdev_destroy(ifbdev);
1425     }
1426    
1427     +/* Suspends/resumes fbdev processing of incoming HPD events. When resuming HPD
1428     + * processing, fbdev will perform a full connector reprobe if a hotplug event
1429     + * was received while HPD was suspended.
1430     + */
1431     +static void intel_fbdev_hpd_set_suspend(struct intel_fbdev *ifbdev, int state)
1432     +{
1433     + bool send_hpd = false;
1434     +
1435     + mutex_lock(&ifbdev->hpd_lock);
1436     + ifbdev->hpd_suspended = state == FBINFO_STATE_SUSPENDED;
1437     + send_hpd = !ifbdev->hpd_suspended && ifbdev->hpd_waiting;
1438     + ifbdev->hpd_waiting = false;
1439     + mutex_unlock(&ifbdev->hpd_lock);
1440     +
1441     + if (send_hpd) {
1442     + DRM_DEBUG_KMS("Handling delayed fbcon HPD event\n");
1443     + drm_fb_helper_hotplug_event(&ifbdev->helper);
1444     + }
1445     +}
1446     +
1447     void intel_fbdev_set_suspend(struct drm_device *dev, int state, bool synchronous)
1448     {
1449     struct drm_i915_private *dev_priv = to_i915(dev);
1450     @@ -773,6 +794,7 @@ void intel_fbdev_set_suspend(struct drm_device *dev, int state, bool synchronous
1451     */
1452     if (state != FBINFO_STATE_RUNNING)
1453     flush_work(&dev_priv->fbdev_suspend_work);
1454     +
1455     console_lock();
1456     } else {
1457     /*
1458     @@ -800,17 +822,26 @@ void intel_fbdev_set_suspend(struct drm_device *dev, int state, bool synchronous
1459    
1460     drm_fb_helper_set_suspend(&ifbdev->helper, state);
1461     console_unlock();
1462     +
1463     + intel_fbdev_hpd_set_suspend(ifbdev, state);
1464     }
1465    
1466     void intel_fbdev_output_poll_changed(struct drm_device *dev)
1467     {
1468     struct intel_fbdev *ifbdev = to_i915(dev)->fbdev;
1469     + bool send_hpd;
1470    
1471     if (!ifbdev)
1472     return;
1473    
1474     intel_fbdev_sync(ifbdev);
1475     - if (ifbdev->vma || ifbdev->helper.deferred_setup)
1476     +
1477     + mutex_lock(&ifbdev->hpd_lock);
1478     + send_hpd = !ifbdev->hpd_suspended;
1479     + ifbdev->hpd_waiting = true;
1480     + mutex_unlock(&ifbdev->hpd_lock);
1481     +
1482     + if (send_hpd && (ifbdev->vma || ifbdev->helper.deferred_setup))
1483     drm_fb_helper_hotplug_event(&ifbdev->helper);
1484     }
1485    
1486     diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/falcon.c b/drivers/gpu/drm/nouveau/nvkm/engine/falcon.c
1487     index 816ccaedfc73..8675613e142b 100644
1488     --- a/drivers/gpu/drm/nouveau/nvkm/engine/falcon.c
1489     +++ b/drivers/gpu/drm/nouveau/nvkm/engine/falcon.c
1490     @@ -22,6 +22,7 @@
1491     #include <engine/falcon.h>
1492    
1493     #include <core/gpuobj.h>
1494     +#include <subdev/mc.h>
1495     #include <subdev/timer.h>
1496     #include <engine/fifo.h>
1497    
1498     @@ -107,8 +108,10 @@ nvkm_falcon_fini(struct nvkm_engine *engine, bool suspend)
1499     }
1500     }
1501    
1502     - nvkm_mask(device, base + 0x048, 0x00000003, 0x00000000);
1503     - nvkm_wr32(device, base + 0x014, 0xffffffff);
1504     + if (nvkm_mc_enabled(device, engine->subdev.index)) {
1505     + nvkm_mask(device, base + 0x048, 0x00000003, 0x00000000);
1506     + nvkm_wr32(device, base + 0x014, 0xffffffff);
1507     + }
1508     return 0;
1509     }
1510    
1511     diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/therm/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/therm/base.c
1512     index 3695cde669f8..07914e36939e 100644
1513     --- a/drivers/gpu/drm/nouveau/nvkm/subdev/therm/base.c
1514     +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/therm/base.c
1515     @@ -132,11 +132,12 @@ nvkm_therm_update(struct nvkm_therm *therm, int mode)
1516     duty = nvkm_therm_update_linear(therm);
1517     break;
1518     case NVBIOS_THERM_FAN_OTHER:
1519     - if (therm->cstate)
1520     + if (therm->cstate) {
1521     duty = therm->cstate;
1522     - else
1523     + poll = false;
1524     + } else {
1525     duty = nvkm_therm_update_linear_fallback(therm);
1526     - poll = false;
1527     + }
1528     break;
1529     }
1530     immd = false;
1531     diff --git a/drivers/gpu/drm/scheduler/sched_entity.c b/drivers/gpu/drm/scheduler/sched_entity.c
1532     index 3e22a54a99c2..2c02f5b03db8 100644
1533     --- a/drivers/gpu/drm/scheduler/sched_entity.c
1534     +++ b/drivers/gpu/drm/scheduler/sched_entity.c
1535     @@ -434,13 +434,10 @@ struct drm_sched_job *drm_sched_entity_pop_job(struct drm_sched_entity *entity)
1536    
1537     while ((entity->dependency =
1538     sched->ops->dependency(sched_job, entity))) {
1539     + trace_drm_sched_job_wait_dep(sched_job, entity->dependency);
1540    
1541     - if (drm_sched_entity_add_dependency_cb(entity)) {
1542     -
1543     - trace_drm_sched_job_wait_dep(sched_job,
1544     - entity->dependency);
1545     + if (drm_sched_entity_add_dependency_cb(entity))
1546     return NULL;
1547     - }
1548     }
1549    
1550     /* skip jobs from entity that marked guilty */
1551     diff --git a/drivers/gpu/drm/vkms/vkms_crc.c b/drivers/gpu/drm/vkms/vkms_crc.c
1552     index 9d9e8146db90..d7b409a3c0f8 100644
1553     --- a/drivers/gpu/drm/vkms/vkms_crc.c
1554     +++ b/drivers/gpu/drm/vkms/vkms_crc.c
1555     @@ -1,4 +1,5 @@
1556     -// SPDX-License-Identifier: GPL-2.0
1557     +// SPDX-License-Identifier: GPL-2.0+
1558     +
1559     #include "vkms_drv.h"
1560     #include <linux/crc32.h>
1561     #include <drm/drm_atomic.h>
1562     diff --git a/drivers/gpu/drm/vkms/vkms_crtc.c b/drivers/gpu/drm/vkms/vkms_crtc.c
1563     index 177bbcb38306..eb56ee893761 100644
1564     --- a/drivers/gpu/drm/vkms/vkms_crtc.c
1565     +++ b/drivers/gpu/drm/vkms/vkms_crtc.c
1566     @@ -1,10 +1,4 @@
1567     -// SPDX-License-Identifier: GPL-2.0
1568     -/*
1569     - * This program is free software; you can redistribute it and/or modify
1570     - * it under the terms of the GNU General Public License as published by
1571     - * the Free Software Foundation; either version 2 of the License, or
1572     - * (at your option) any later version.
1573     - */
1574     +// SPDX-License-Identifier: GPL-2.0+
1575    
1576     #include "vkms_drv.h"
1577     #include <drm/drm_atomic_helper.h>
1578     diff --git a/drivers/gpu/drm/vkms/vkms_drv.c b/drivers/gpu/drm/vkms/vkms_drv.c
1579     index 07cfde1b4132..8048b2486b0e 100644
1580     --- a/drivers/gpu/drm/vkms/vkms_drv.c
1581     +++ b/drivers/gpu/drm/vkms/vkms_drv.c
1582     @@ -1,9 +1,4 @@
1583     -/*
1584     - * This program is free software; you can redistribute it and/or modify
1585     - * it under the terms of the GNU General Public License as published by
1586     - * the Free Software Foundation; either version 2 of the License, or
1587     - * (at your option) any later version.
1588     - */
1589     +// SPDX-License-Identifier: GPL-2.0+
1590    
1591     /**
1592     * DOC: vkms (Virtual Kernel Modesetting)
1593     diff --git a/drivers/gpu/drm/vkms/vkms_drv.h b/drivers/gpu/drm/vkms/vkms_drv.h
1594     index 1c93990693e3..5adbc6fca41b 100644
1595     --- a/drivers/gpu/drm/vkms/vkms_drv.h
1596     +++ b/drivers/gpu/drm/vkms/vkms_drv.h
1597     @@ -1,3 +1,5 @@
1598     +/* SPDX-License-Identifier: GPL-2.0+ */
1599     +
1600     #ifndef _VKMS_DRV_H_
1601     #define _VKMS_DRV_H_
1602    
1603     diff --git a/drivers/gpu/drm/vkms/vkms_gem.c b/drivers/gpu/drm/vkms/vkms_gem.c
1604     index d04e988b4cbe..8310b96d4a9c 100644
1605     --- a/drivers/gpu/drm/vkms/vkms_gem.c
1606     +++ b/drivers/gpu/drm/vkms/vkms_gem.c
1607     @@ -1,10 +1,4 @@
1608     -// SPDX-License-Identifier: GPL-2.0
1609     -/*
1610     - * This program is free software; you can redistribute it and/or modify
1611     - * it under the terms of the GNU General Public License as published by
1612     - * the Free Software Foundation; either version 2 of the License, or
1613     - * (at your option) any later version.
1614     - */
1615     +// SPDX-License-Identifier: GPL-2.0+
1616    
1617     #include <linux/shmem_fs.h>
1618    
1619     diff --git a/drivers/gpu/drm/vkms/vkms_output.c b/drivers/gpu/drm/vkms/vkms_output.c
1620     index 271a0eb9042c..4173e4f48334 100644
1621     --- a/drivers/gpu/drm/vkms/vkms_output.c
1622     +++ b/drivers/gpu/drm/vkms/vkms_output.c
1623     @@ -1,10 +1,4 @@
1624     -// SPDX-License-Identifier: GPL-2.0
1625     -/*
1626     - * This program is free software; you can redistribute it and/or modify
1627     - * it under the terms of the GNU General Public License as published by
1628     - * the Free Software Foundation; either version 2 of the License, or
1629     - * (at your option) any later version.
1630     - */
1631     +// SPDX-License-Identifier: GPL-2.0+
1632    
1633     #include "vkms_drv.h"
1634     #include <drm/drm_crtc_helper.h>
1635     diff --git a/drivers/gpu/drm/vkms/vkms_plane.c b/drivers/gpu/drm/vkms/vkms_plane.c
1636     index e3bcea4b4891..8ffc1dad6485 100644
1637     --- a/drivers/gpu/drm/vkms/vkms_plane.c
1638     +++ b/drivers/gpu/drm/vkms/vkms_plane.c
1639     @@ -1,10 +1,4 @@
1640     -// SPDX-License-Identifier: GPL-2.0
1641     -/*
1642     - * This program is free software; you can redistribute it and/or modify
1643     - * it under the terms of the GNU General Public License as published by
1644     - * the Free Software Foundation; either version 2 of the License, or
1645     - * (at your option) any later version.
1646     - */
1647     +// SPDX-License-Identifier: GPL-2.0+
1648    
1649     #include "vkms_drv.h"
1650     #include <drm/drm_plane_helper.h>
1651     diff --git a/drivers/input/misc/bma150.c b/drivers/input/misc/bma150.c
1652     index 1efcfdf9f8a8..dd9dd4e40827 100644
1653     --- a/drivers/input/misc/bma150.c
1654     +++ b/drivers/input/misc/bma150.c
1655     @@ -481,13 +481,14 @@ static int bma150_register_input_device(struct bma150_data *bma150)
1656     idev->close = bma150_irq_close;
1657     input_set_drvdata(idev, bma150);
1658    
1659     + bma150->input = idev;
1660     +
1661     error = input_register_device(idev);
1662     if (error) {
1663     input_free_device(idev);
1664     return error;
1665     }
1666    
1667     - bma150->input = idev;
1668     return 0;
1669     }
1670    
1671     @@ -510,15 +511,15 @@ static int bma150_register_polled_device(struct bma150_data *bma150)
1672    
1673     bma150_init_input_device(bma150, ipoll_dev->input);
1674    
1675     + bma150->input_polled = ipoll_dev;
1676     + bma150->input = ipoll_dev->input;
1677     +
1678     error = input_register_polled_device(ipoll_dev);
1679     if (error) {
1680     input_free_polled_device(ipoll_dev);
1681     return error;
1682     }
1683    
1684     - bma150->input_polled = ipoll_dev;
1685     - bma150->input = ipoll_dev->input;
1686     -
1687     return 0;
1688     }
1689    
1690     diff --git a/drivers/input/mouse/elan_i2c_core.c b/drivers/input/mouse/elan_i2c_core.c
1691     index f322a1768fbb..225ae6980182 100644
1692     --- a/drivers/input/mouse/elan_i2c_core.c
1693     +++ b/drivers/input/mouse/elan_i2c_core.c
1694     @@ -1336,7 +1336,6 @@ MODULE_DEVICE_TABLE(i2c, elan_id);
1695     static const struct acpi_device_id elan_acpi_id[] = {
1696     { "ELAN0000", 0 },
1697     { "ELAN0100", 0 },
1698     - { "ELAN0501", 0 },
1699     { "ELAN0600", 0 },
1700     { "ELAN0602", 0 },
1701     { "ELAN0605", 0 },
1702     @@ -1346,6 +1345,7 @@ static const struct acpi_device_id elan_acpi_id[] = {
1703     { "ELAN060C", 0 },
1704     { "ELAN0611", 0 },
1705     { "ELAN0612", 0 },
1706     + { "ELAN0617", 0 },
1707     { "ELAN0618", 0 },
1708     { "ELAN061C", 0 },
1709     { "ELAN061D", 0 },
1710     diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c
1711     index 9fe075c137dc..a7f8b1614559 100644
1712     --- a/drivers/input/mouse/elantech.c
1713     +++ b/drivers/input/mouse/elantech.c
1714     @@ -1119,6 +1119,8 @@ static int elantech_get_resolution_v4(struct psmouse *psmouse,
1715     * Asus UX31 0x361f00 20, 15, 0e clickpad
1716     * Asus UX32VD 0x361f02 00, 15, 0e clickpad
1717     * Avatar AVIU-145A2 0x361f00 ? clickpad
1718     + * Fujitsu CELSIUS H760 0x570f02 40, 14, 0c 3 hw buttons (**)
1719     + * Fujitsu CELSIUS H780 0x5d0f02 41, 16, 0d 3 hw buttons (**)
1720     * Fujitsu LIFEBOOK E544 0x470f00 d0, 12, 09 2 hw buttons
1721     * Fujitsu LIFEBOOK E546 0x470f00 50, 12, 09 2 hw buttons
1722     * Fujitsu LIFEBOOK E547 0x470f00 50, 12, 09 2 hw buttons
1723     @@ -1171,6 +1173,13 @@ static const struct dmi_system_id elantech_dmi_has_middle_button[] = {
1724     DMI_MATCH(DMI_PRODUCT_NAME, "CELSIUS H760"),
1725     },
1726     },
1727     + {
1728     + /* Fujitsu H780 also has a middle button */
1729     + .matches = {
1730     + DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
1731     + DMI_MATCH(DMI_PRODUCT_NAME, "CELSIUS H780"),
1732     + },
1733     + },
1734     #endif
1735     { }
1736     };
1737     diff --git a/drivers/irqchip/irq-csky-apb-intc.c b/drivers/irqchip/irq-csky-apb-intc.c
1738     index 2543baba8b1f..5a2ec43b7ddd 100644
1739     --- a/drivers/irqchip/irq-csky-apb-intc.c
1740     +++ b/drivers/irqchip/irq-csky-apb-intc.c
1741     @@ -95,7 +95,7 @@ static inline void setup_irq_channel(u32 magic, void __iomem *reg_addr)
1742    
1743     /* Setup 64 channel slots */
1744     for (i = 0; i < INTC_IRQS; i += 4)
1745     - writel_relaxed(build_channel_val(i, magic), reg_addr + i);
1746     + writel(build_channel_val(i, magic), reg_addr + i);
1747     }
1748    
1749     static int __init
1750     @@ -135,16 +135,10 @@ ck_intc_init_comm(struct device_node *node, struct device_node *parent)
1751     static inline bool handle_irq_perbit(struct pt_regs *regs, u32 hwirq,
1752     u32 irq_base)
1753     {
1754     - u32 irq;
1755     -
1756     if (hwirq == 0)
1757     return 0;
1758    
1759     - while (hwirq) {
1760     - irq = __ffs(hwirq);
1761     - hwirq &= ~BIT(irq);
1762     - handle_domain_irq(root_domain, irq_base + irq, regs);
1763     - }
1764     + handle_domain_irq(root_domain, irq_base + __fls(hwirq), regs);
1765    
1766     return 1;
1767     }
1768     @@ -154,12 +148,16 @@ static void gx_irq_handler(struct pt_regs *regs)
1769     {
1770     bool ret;
1771    
1772     - do {
1773     - ret = handle_irq_perbit(regs,
1774     - readl_relaxed(reg_base + GX_INTC_PEN31_00), 0);
1775     - ret |= handle_irq_perbit(regs,
1776     - readl_relaxed(reg_base + GX_INTC_PEN63_32), 32);
1777     - } while (ret);
1778     +retry:
1779     + ret = handle_irq_perbit(regs,
1780     + readl(reg_base + GX_INTC_PEN63_32), 32);
1781     + if (ret)
1782     + goto retry;
1783     +
1784     + ret = handle_irq_perbit(regs,
1785     + readl(reg_base + GX_INTC_PEN31_00), 0);
1786     + if (ret)
1787     + goto retry;
1788     }
1789    
1790     static int __init
1791     @@ -174,14 +172,14 @@ gx_intc_init(struct device_node *node, struct device_node *parent)
1792     /*
1793     * Initial enable reg to disable all interrupts
1794     */
1795     - writel_relaxed(0x0, reg_base + GX_INTC_NEN31_00);
1796     - writel_relaxed(0x0, reg_base + GX_INTC_NEN63_32);
1797     + writel(0x0, reg_base + GX_INTC_NEN31_00);
1798     + writel(0x0, reg_base + GX_INTC_NEN63_32);
1799    
1800     /*
1801     * Initial mask reg with all unmasked, because we only use enalbe reg
1802     */
1803     - writel_relaxed(0x0, reg_base + GX_INTC_NMASK31_00);
1804     - writel_relaxed(0x0, reg_base + GX_INTC_NMASK63_32);
1805     + writel(0x0, reg_base + GX_INTC_NMASK31_00);
1806     + writel(0x0, reg_base + GX_INTC_NMASK63_32);
1807    
1808     setup_irq_channel(0x03020100, reg_base + GX_INTC_SOURCE);
1809    
1810     @@ -204,20 +202,29 @@ static void ck_irq_handler(struct pt_regs *regs)
1811     void __iomem *reg_pen_lo = reg_base + CK_INTC_PEN31_00;
1812     void __iomem *reg_pen_hi = reg_base + CK_INTC_PEN63_32;
1813    
1814     - do {
1815     - /* handle 0 - 31 irqs */
1816     - ret = handle_irq_perbit(regs, readl_relaxed(reg_pen_lo), 0);
1817     - ret |= handle_irq_perbit(regs, readl_relaxed(reg_pen_hi), 32);
1818     +retry:
1819     + /* handle 0 - 63 irqs */
1820     + ret = handle_irq_perbit(regs, readl(reg_pen_hi), 32);
1821     + if (ret)
1822     + goto retry;
1823    
1824     - if (nr_irq == INTC_IRQS)
1825     - continue;
1826     + ret = handle_irq_perbit(regs, readl(reg_pen_lo), 0);
1827     + if (ret)
1828     + goto retry;
1829     +
1830     + if (nr_irq == INTC_IRQS)
1831     + return;
1832    
1833     - /* handle 64 - 127 irqs */
1834     - ret |= handle_irq_perbit(regs,
1835     - readl_relaxed(reg_pen_lo + CK_INTC_DUAL_BASE), 64);
1836     - ret |= handle_irq_perbit(regs,
1837     - readl_relaxed(reg_pen_hi + CK_INTC_DUAL_BASE), 96);
1838     - } while (ret);
1839     + /* handle 64 - 127 irqs */
1840     + ret = handle_irq_perbit(regs,
1841     + readl(reg_pen_hi + CK_INTC_DUAL_BASE), 96);
1842     + if (ret)
1843     + goto retry;
1844     +
1845     + ret = handle_irq_perbit(regs,
1846     + readl(reg_pen_lo + CK_INTC_DUAL_BASE), 64);
1847     + if (ret)
1848     + goto retry;
1849     }
1850    
1851     static int __init
1852     @@ -230,11 +237,11 @@ ck_intc_init(struct device_node *node, struct device_node *parent)
1853     return ret;
1854    
1855     /* Initial enable reg to disable all interrupts */
1856     - writel_relaxed(0, reg_base + CK_INTC_NEN31_00);
1857     - writel_relaxed(0, reg_base + CK_INTC_NEN63_32);
1858     + writel(0, reg_base + CK_INTC_NEN31_00);
1859     + writel(0, reg_base + CK_INTC_NEN63_32);
1860    
1861     /* Enable irq intc */
1862     - writel_relaxed(BIT(31), reg_base + CK_INTC_ICR);
1863     + writel(BIT(31), reg_base + CK_INTC_ICR);
1864    
1865     ck_set_gc(node, reg_base, CK_INTC_NEN31_00, 0);
1866     ck_set_gc(node, reg_base, CK_INTC_NEN63_32, 32);
1867     @@ -260,8 +267,8 @@ ck_dual_intc_init(struct device_node *node, struct device_node *parent)
1868     return ret;
1869    
1870     /* Initial enable reg to disable all interrupts */
1871     - writel_relaxed(0, reg_base + CK_INTC_NEN31_00 + CK_INTC_DUAL_BASE);
1872     - writel_relaxed(0, reg_base + CK_INTC_NEN63_32 + CK_INTC_DUAL_BASE);
1873     + writel(0, reg_base + CK_INTC_NEN31_00 + CK_INTC_DUAL_BASE);
1874     + writel(0, reg_base + CK_INTC_NEN63_32 + CK_INTC_DUAL_BASE);
1875    
1876     ck_set_gc(node, reg_base + CK_INTC_DUAL_BASE, CK_INTC_NEN31_00, 64);
1877     ck_set_gc(node, reg_base + CK_INTC_DUAL_BASE, CK_INTC_NEN63_32, 96);
1878     diff --git a/drivers/md/dm-crypt.c b/drivers/md/dm-crypt.c
1879     index 1ef828575fae..9fc5423f83c1 100644
1880     --- a/drivers/md/dm-crypt.c
1881     +++ b/drivers/md/dm-crypt.c
1882     @@ -932,7 +932,7 @@ static int dm_crypt_integrity_io_alloc(struct dm_crypt_io *io, struct bio *bio)
1883     if (IS_ERR(bip))
1884     return PTR_ERR(bip);
1885    
1886     - tag_len = io->cc->on_disk_tag_size * bio_sectors(bio);
1887     + tag_len = io->cc->on_disk_tag_size * (bio_sectors(bio) >> io->cc->sector_shift);
1888    
1889     bip->bip_iter.bi_size = tag_len;
1890     bip->bip_iter.bi_sector = io->cc->start + io->sector;
1891     diff --git a/drivers/md/dm-thin.c b/drivers/md/dm-thin.c
1892     index ca8af21bf644..e83b63608262 100644
1893     --- a/drivers/md/dm-thin.c
1894     +++ b/drivers/md/dm-thin.c
1895     @@ -257,6 +257,7 @@ struct pool {
1896    
1897     spinlock_t lock;
1898     struct bio_list deferred_flush_bios;
1899     + struct bio_list deferred_flush_completions;
1900     struct list_head prepared_mappings;
1901     struct list_head prepared_discards;
1902     struct list_head prepared_discards_pt2;
1903     @@ -956,6 +957,39 @@ static void process_prepared_mapping_fail(struct dm_thin_new_mapping *m)
1904     mempool_free(m, &m->tc->pool->mapping_pool);
1905     }
1906    
1907     +static void complete_overwrite_bio(struct thin_c *tc, struct bio *bio)
1908     +{
1909     + struct pool *pool = tc->pool;
1910     + unsigned long flags;
1911     +
1912     + /*
1913     + * If the bio has the REQ_FUA flag set we must commit the metadata
1914     + * before signaling its completion.
1915     + */
1916     + if (!bio_triggers_commit(tc, bio)) {
1917     + bio_endio(bio);
1918     + return;
1919     + }
1920     +
1921     + /*
1922     + * Complete bio with an error if earlier I/O caused changes to the
1923     + * metadata that can't be committed, e.g, due to I/O errors on the
1924     + * metadata device.
1925     + */
1926     + if (dm_thin_aborted_changes(tc->td)) {
1927     + bio_io_error(bio);
1928     + return;
1929     + }
1930     +
1931     + /*
1932     + * Batch together any bios that trigger commits and then issue a
1933     + * single commit for them in process_deferred_bios().
1934     + */
1935     + spin_lock_irqsave(&pool->lock, flags);
1936     + bio_list_add(&pool->deferred_flush_completions, bio);
1937     + spin_unlock_irqrestore(&pool->lock, flags);
1938     +}
1939     +
1940     static void process_prepared_mapping(struct dm_thin_new_mapping *m)
1941     {
1942     struct thin_c *tc = m->tc;
1943     @@ -988,7 +1022,7 @@ static void process_prepared_mapping(struct dm_thin_new_mapping *m)
1944     */
1945     if (bio) {
1946     inc_remap_and_issue_cell(tc, m->cell, m->data_block);
1947     - bio_endio(bio);
1948     + complete_overwrite_bio(tc, bio);
1949     } else {
1950     inc_all_io_entry(tc->pool, m->cell->holder);
1951     remap_and_issue(tc, m->cell->holder, m->data_block);
1952     @@ -2317,7 +2351,7 @@ static void process_deferred_bios(struct pool *pool)
1953     {
1954     unsigned long flags;
1955     struct bio *bio;
1956     - struct bio_list bios;
1957     + struct bio_list bios, bio_completions;
1958     struct thin_c *tc;
1959    
1960     tc = get_first_thin(pool);
1961     @@ -2328,26 +2362,36 @@ static void process_deferred_bios(struct pool *pool)
1962     }
1963    
1964     /*
1965     - * If there are any deferred flush bios, we must commit
1966     - * the metadata before issuing them.
1967     + * If there are any deferred flush bios, we must commit the metadata
1968     + * before issuing them or signaling their completion.
1969     */
1970     bio_list_init(&bios);
1971     + bio_list_init(&bio_completions);
1972     +
1973     spin_lock_irqsave(&pool->lock, flags);
1974     bio_list_merge(&bios, &pool->deferred_flush_bios);
1975     bio_list_init(&pool->deferred_flush_bios);
1976     +
1977     + bio_list_merge(&bio_completions, &pool->deferred_flush_completions);
1978     + bio_list_init(&pool->deferred_flush_completions);
1979     spin_unlock_irqrestore(&pool->lock, flags);
1980    
1981     - if (bio_list_empty(&bios) &&
1982     + if (bio_list_empty(&bios) && bio_list_empty(&bio_completions) &&
1983     !(dm_pool_changed_this_transaction(pool->pmd) && need_commit_due_to_time(pool)))
1984     return;
1985    
1986     if (commit(pool)) {
1987     + bio_list_merge(&bios, &bio_completions);
1988     +
1989     while ((bio = bio_list_pop(&bios)))
1990     bio_io_error(bio);
1991     return;
1992     }
1993     pool->last_commit_jiffies = jiffies;
1994    
1995     + while ((bio = bio_list_pop(&bio_completions)))
1996     + bio_endio(bio);
1997     +
1998     while ((bio = bio_list_pop(&bios)))
1999     generic_make_request(bio);
2000     }
2001     @@ -2954,6 +2998,7 @@ static struct pool *pool_create(struct mapped_device *pool_md,
2002     INIT_DELAYED_WORK(&pool->no_space_timeout, do_no_space_timeout);
2003     spin_lock_init(&pool->lock);
2004     bio_list_init(&pool->deferred_flush_bios);
2005     + bio_list_init(&pool->deferred_flush_completions);
2006     INIT_LIST_HEAD(&pool->prepared_mappings);
2007     INIT_LIST_HEAD(&pool->prepared_discards);
2008     INIT_LIST_HEAD(&pool->prepared_discards_pt2);
2009     diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
2010     index 1d54109071cc..fa47249fa3e4 100644
2011     --- a/drivers/md/raid1.c
2012     +++ b/drivers/md/raid1.c
2013     @@ -1863,6 +1863,20 @@ static void end_sync_read(struct bio *bio)
2014     reschedule_retry(r1_bio);
2015     }
2016    
2017     +static void abort_sync_write(struct mddev *mddev, struct r1bio *r1_bio)
2018     +{
2019     + sector_t sync_blocks = 0;
2020     + sector_t s = r1_bio->sector;
2021     + long sectors_to_go = r1_bio->sectors;
2022     +
2023     + /* make sure these bits don't get cleared. */
2024     + do {
2025     + md_bitmap_end_sync(mddev->bitmap, s, &sync_blocks, 1);
2026     + s += sync_blocks;
2027     + sectors_to_go -= sync_blocks;
2028     + } while (sectors_to_go > 0);
2029     +}
2030     +
2031     static void end_sync_write(struct bio *bio)
2032     {
2033     int uptodate = !bio->bi_status;
2034     @@ -1874,15 +1888,7 @@ static void end_sync_write(struct bio *bio)
2035     struct md_rdev *rdev = conf->mirrors[find_bio_disk(r1_bio, bio)].rdev;
2036    
2037     if (!uptodate) {
2038     - sector_t sync_blocks = 0;
2039     - sector_t s = r1_bio->sector;
2040     - long sectors_to_go = r1_bio->sectors;
2041     - /* make sure these bits doesn't get cleared. */
2042     - do {
2043     - md_bitmap_end_sync(mddev->bitmap, s, &sync_blocks, 1);
2044     - s += sync_blocks;
2045     - sectors_to_go -= sync_blocks;
2046     - } while (sectors_to_go > 0);
2047     + abort_sync_write(mddev, r1_bio);
2048     set_bit(WriteErrorSeen, &rdev->flags);
2049     if (!test_and_set_bit(WantReplacement, &rdev->flags))
2050     set_bit(MD_RECOVERY_NEEDED, &
2051     @@ -2172,8 +2178,10 @@ static void sync_request_write(struct mddev *mddev, struct r1bio *r1_bio)
2052     (i == r1_bio->read_disk ||
2053     !test_bit(MD_RECOVERY_SYNC, &mddev->recovery))))
2054     continue;
2055     - if (test_bit(Faulty, &conf->mirrors[i].rdev->flags))
2056     + if (test_bit(Faulty, &conf->mirrors[i].rdev->flags)) {
2057     + abort_sync_write(mddev, r1_bio);
2058     continue;
2059     + }
2060    
2061     bio_set_op_attrs(wbio, REQ_OP_WRITE, 0);
2062     if (test_bit(FailFast, &conf->mirrors[i].rdev->flags))
2063     diff --git a/drivers/misc/eeprom/Kconfig b/drivers/misc/eeprom/Kconfig
2064     index fe7a1d27a017..a846faefa210 100644
2065     --- a/drivers/misc/eeprom/Kconfig
2066     +++ b/drivers/misc/eeprom/Kconfig
2067     @@ -13,7 +13,7 @@ config EEPROM_AT24
2068     ones like at24c64, 24lc02 or fm24c04:
2069    
2070     24c00, 24c01, 24c02, spd (readonly 24c02), 24c04, 24c08,
2071     - 24c16, 24c32, 24c64, 24c128, 24c256, 24c512, 24c1024
2072     + 24c16, 24c32, 24c64, 24c128, 24c256, 24c512, 24c1024, 24c2048
2073    
2074     Unless you like data loss puzzles, always be sure that any chip
2075     you configure as a 24c32 (32 kbit) or larger is NOT really a
2076     diff --git a/drivers/misc/eeprom/at24.c b/drivers/misc/eeprom/at24.c
2077     index 636ed7149793..ddfcf4ade7bf 100644
2078     --- a/drivers/misc/eeprom/at24.c
2079     +++ b/drivers/misc/eeprom/at24.c
2080     @@ -156,6 +156,7 @@ AT24_CHIP_DATA(at24_data_24c128, 131072 / 8, AT24_FLAG_ADDR16);
2081     AT24_CHIP_DATA(at24_data_24c256, 262144 / 8, AT24_FLAG_ADDR16);
2082     AT24_CHIP_DATA(at24_data_24c512, 524288 / 8, AT24_FLAG_ADDR16);
2083     AT24_CHIP_DATA(at24_data_24c1024, 1048576 / 8, AT24_FLAG_ADDR16);
2084     +AT24_CHIP_DATA(at24_data_24c2048, 2097152 / 8, AT24_FLAG_ADDR16);
2085     /* identical to 24c08 ? */
2086     AT24_CHIP_DATA(at24_data_INT3499, 8192 / 8, 0);
2087    
2088     @@ -182,6 +183,7 @@ static const struct i2c_device_id at24_ids[] = {
2089     { "24c256", (kernel_ulong_t)&at24_data_24c256 },
2090     { "24c512", (kernel_ulong_t)&at24_data_24c512 },
2091     { "24c1024", (kernel_ulong_t)&at24_data_24c1024 },
2092     + { "24c2048", (kernel_ulong_t)&at24_data_24c2048 },
2093     { "at24", 0 },
2094     { /* END OF LIST */ }
2095     };
2096     @@ -210,6 +212,7 @@ static const struct of_device_id at24_of_match[] = {
2097     { .compatible = "atmel,24c256", .data = &at24_data_24c256 },
2098     { .compatible = "atmel,24c512", .data = &at24_data_24c512 },
2099     { .compatible = "atmel,24c1024", .data = &at24_data_24c1024 },
2100     + { .compatible = "atmel,24c2048", .data = &at24_data_24c2048 },
2101     { /* END OF LIST */ },
2102     };
2103     MODULE_DEVICE_TABLE(of, at24_of_match);
2104     diff --git a/drivers/mmc/core/block.c b/drivers/mmc/core/block.c
2105     index 111934838da2..4f1912a1e071 100644
2106     --- a/drivers/mmc/core/block.c
2107     +++ b/drivers/mmc/core/block.c
2108     @@ -2114,7 +2114,7 @@ static void mmc_blk_mq_req_done(struct mmc_request *mrq)
2109     if (waiting)
2110     wake_up(&mq->wait);
2111     else
2112     - kblockd_schedule_work(&mq->complete_work);
2113     + queue_work(mq->card->complete_wq, &mq->complete_work);
2114    
2115     return;
2116     }
2117     @@ -2928,6 +2928,13 @@ static int mmc_blk_probe(struct mmc_card *card)
2118    
2119     mmc_fixup_device(card, mmc_blk_fixups);
2120    
2121     + card->complete_wq = alloc_workqueue("mmc_complete",
2122     + WQ_MEM_RECLAIM | WQ_HIGHPRI, 0);
2123     + if (unlikely(!card->complete_wq)) {
2124     + pr_err("Failed to create mmc completion workqueue");
2125     + return -ENOMEM;
2126     + }
2127     +
2128     md = mmc_blk_alloc(card);
2129     if (IS_ERR(md))
2130     return PTR_ERR(md);
2131     @@ -2991,6 +2998,7 @@ static void mmc_blk_remove(struct mmc_card *card)
2132     pm_runtime_put_noidle(&card->dev);
2133     mmc_blk_remove_req(md);
2134     dev_set_drvdata(&card->dev, NULL);
2135     + destroy_workqueue(card->complete_wq);
2136     }
2137    
2138     static int _mmc_blk_suspend(struct mmc_card *card)
2139     diff --git a/drivers/mmc/host/sunxi-mmc.c b/drivers/mmc/host/sunxi-mmc.c
2140     index 279e326e397e..70fadc976795 100644
2141     --- a/drivers/mmc/host/sunxi-mmc.c
2142     +++ b/drivers/mmc/host/sunxi-mmc.c
2143     @@ -1399,13 +1399,37 @@ static int sunxi_mmc_probe(struct platform_device *pdev)
2144     mmc->caps |= MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED |
2145     MMC_CAP_ERASE | MMC_CAP_SDIO_IRQ;
2146    
2147     - if (host->cfg->clk_delays || host->use_new_timings)
2148     + /*
2149     + * Some H5 devices do not have signal traces precise enough to
2150     + * use HS DDR mode for their eMMC chips.
2151     + *
2152     + * We still enable HS DDR modes for all the other controller
2153     + * variants that support them.
2154     + */
2155     + if ((host->cfg->clk_delays || host->use_new_timings) &&
2156     + !of_device_is_compatible(pdev->dev.of_node,
2157     + "allwinner,sun50i-h5-emmc"))
2158     mmc->caps |= MMC_CAP_1_8V_DDR | MMC_CAP_3_3V_DDR;
2159    
2160     ret = mmc_of_parse(mmc);
2161     if (ret)
2162     goto error_free_dma;
2163    
2164     + /*
2165     + * If we don't support delay chains in the SoC, we can't use any
2166     + * of the higher speed modes. Mask them out in case the device
2167     + * tree specifies the properties for them, which gets added to
2168     + * the caps by mmc_of_parse() above.
2169     + */
2170     + if (!(host->cfg->clk_delays || host->use_new_timings)) {
2171     + mmc->caps &= ~(MMC_CAP_3_3V_DDR | MMC_CAP_1_8V_DDR |
2172     + MMC_CAP_1_2V_DDR | MMC_CAP_UHS);
2173     + mmc->caps2 &= ~MMC_CAP2_HS200;
2174     + }
2175     +
2176     + /* TODO: This driver doesn't support HS400 mode yet */
2177     + mmc->caps2 &= ~MMC_CAP2_HS400;
2178     +
2179     ret = sunxi_mmc_init_host(host);
2180     if (ret)
2181     goto error_free_dma;
2182     diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
2183     index 962012135b62..5f9a5ef93969 100644
2184     --- a/drivers/nvme/host/core.c
2185     +++ b/drivers/nvme/host/core.c
2186     @@ -2084,18 +2084,20 @@ static void nvme_init_subnqn(struct nvme_subsystem *subsys, struct nvme_ctrl *ct
2187     size_t nqnlen;
2188     int off;
2189    
2190     - nqnlen = strnlen(id->subnqn, NVMF_NQN_SIZE);
2191     - if (nqnlen > 0 && nqnlen < NVMF_NQN_SIZE) {
2192     - strlcpy(subsys->subnqn, id->subnqn, NVMF_NQN_SIZE);
2193     - return;
2194     - }
2195     + if(!(ctrl->quirks & NVME_QUIRK_IGNORE_DEV_SUBNQN)) {
2196     + nqnlen = strnlen(id->subnqn, NVMF_NQN_SIZE);
2197     + if (nqnlen > 0 && nqnlen < NVMF_NQN_SIZE) {
2198     + strlcpy(subsys->subnqn, id->subnqn, NVMF_NQN_SIZE);
2199     + return;
2200     + }
2201    
2202     - if (ctrl->vs >= NVME_VS(1, 2, 1))
2203     - dev_warn(ctrl->device, "missing or invalid SUBNQN field.\n");
2204     + if (ctrl->vs >= NVME_VS(1, 2, 1))
2205     + dev_warn(ctrl->device, "missing or invalid SUBNQN field.\n");
2206     + }
2207    
2208     /* Generate a "fake" NQN per Figure 254 in NVMe 1.3 + ECN 001 */
2209     off = snprintf(subsys->subnqn, NVMF_NQN_SIZE,
2210     - "nqn.2014.08.org.nvmexpress:%4x%4x",
2211     + "nqn.2014.08.org.nvmexpress:%04x%04x",
2212     le16_to_cpu(id->vid), le16_to_cpu(id->ssvid));
2213     memcpy(subsys->subnqn + off, id->sn, sizeof(id->sn));
2214     off += sizeof(id->sn);
2215     diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c
2216     index 9901afd804ce..2b1d1f066efa 100644
2217     --- a/drivers/nvme/host/multipath.c
2218     +++ b/drivers/nvme/host/multipath.c
2219     @@ -586,6 +586,7 @@ int nvme_mpath_init(struct nvme_ctrl *ctrl, struct nvme_id_ctrl *id)
2220     return 0;
2221     out_free_ana_log_buf:
2222     kfree(ctrl->ana_log_buf);
2223     + ctrl->ana_log_buf = NULL;
2224     out:
2225     return error;
2226     }
2227     @@ -593,5 +594,6 @@ out:
2228     void nvme_mpath_uninit(struct nvme_ctrl *ctrl)
2229     {
2230     kfree(ctrl->ana_log_buf);
2231     + ctrl->ana_log_buf = NULL;
2232     }
2233    
2234     diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h
2235     index 081cbdcce880..6ffa99a10a60 100644
2236     --- a/drivers/nvme/host/nvme.h
2237     +++ b/drivers/nvme/host/nvme.h
2238     @@ -90,6 +90,11 @@ enum nvme_quirks {
2239     * Set MEDIUM priority on SQ creation
2240     */
2241     NVME_QUIRK_MEDIUM_PRIO_SQ = (1 << 7),
2242     +
2243     + /*
2244     + * Ignore device provided subnqn.
2245     + */
2246     + NVME_QUIRK_IGNORE_DEV_SUBNQN = (1 << 8),
2247     };
2248    
2249     /*
2250     diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c
2251     index c33bb201b884..c0d01048ce4d 100644
2252     --- a/drivers/nvme/host/pci.c
2253     +++ b/drivers/nvme/host/pci.c
2254     @@ -913,9 +913,11 @@ static void nvme_complete_cqes(struct nvme_queue *nvmeq, u16 start, u16 end)
2255    
2256     static inline void nvme_update_cq_head(struct nvme_queue *nvmeq)
2257     {
2258     - if (++nvmeq->cq_head == nvmeq->q_depth) {
2259     + if (nvmeq->cq_head == nvmeq->q_depth - 1) {
2260     nvmeq->cq_head = 0;
2261     nvmeq->cq_phase = !nvmeq->cq_phase;
2262     + } else {
2263     + nvmeq->cq_head++;
2264     }
2265     }
2266    
2267     @@ -1748,8 +1750,9 @@ static void nvme_free_host_mem(struct nvme_dev *dev)
2268     struct nvme_host_mem_buf_desc *desc = &dev->host_mem_descs[i];
2269     size_t size = le32_to_cpu(desc->size) * dev->ctrl.page_size;
2270    
2271     - dma_free_coherent(dev->dev, size, dev->host_mem_desc_bufs[i],
2272     - le64_to_cpu(desc->addr));
2273     + dma_free_attrs(dev->dev, size, dev->host_mem_desc_bufs[i],
2274     + le64_to_cpu(desc->addr),
2275     + DMA_ATTR_NO_KERNEL_MAPPING | DMA_ATTR_NO_WARN);
2276     }
2277    
2278     kfree(dev->host_mem_desc_bufs);
2279     @@ -1815,8 +1818,9 @@ out_free_bufs:
2280     while (--i >= 0) {
2281     size_t size = le32_to_cpu(descs[i].size) * dev->ctrl.page_size;
2282    
2283     - dma_free_coherent(dev->dev, size, bufs[i],
2284     - le64_to_cpu(descs[i].addr));
2285     + dma_free_attrs(dev->dev, size, bufs[i],
2286     + le64_to_cpu(descs[i].addr),
2287     + DMA_ATTR_NO_KERNEL_MAPPING | DMA_ATTR_NO_WARN);
2288     }
2289    
2290     kfree(bufs);
2291     @@ -2696,6 +2700,8 @@ static const struct pci_device_id nvme_id_table[] = {
2292     { PCI_VDEVICE(INTEL, 0xf1a5), /* Intel 600P/P3100 */
2293     .driver_data = NVME_QUIRK_NO_DEEPEST_PS |
2294     NVME_QUIRK_MEDIUM_PRIO_SQ },
2295     + { PCI_VDEVICE(INTEL, 0xf1a6), /* Intel 760p/Pro 7600p */
2296     + .driver_data = NVME_QUIRK_IGNORE_DEV_SUBNQN, },
2297     { PCI_VDEVICE(INTEL, 0x5845), /* Qemu emulated controller */
2298     .driver_data = NVME_QUIRK_IDENTIFY_CNS, },
2299     { PCI_DEVICE(0x1bb1, 0x0100), /* Seagate Nytro Flash Storage */
2300     diff --git a/drivers/s390/crypto/ap_bus.c b/drivers/s390/crypto/ap_bus.c
2301     index 9f5a201c4c87..02b52cacde33 100644
2302     --- a/drivers/s390/crypto/ap_bus.c
2303     +++ b/drivers/s390/crypto/ap_bus.c
2304     @@ -248,7 +248,8 @@ static inline int ap_test_config(unsigned int *field, unsigned int nr)
2305     static inline int ap_test_config_card_id(unsigned int id)
2306     {
2307     if (!ap_configuration) /* QCI not supported */
2308     - return 1;
2309     + /* only ids 0...3F may be probed */
2310     + return id < 0x40 ? 1 : 0;
2311     return ap_test_config(ap_configuration->apm, id);
2312     }
2313    
2314     diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
2315     index ba4b8b3ce8cf..c0e21433b1d8 100644
2316     --- a/drivers/scsi/sd.c
2317     +++ b/drivers/scsi/sd.c
2318     @@ -2960,9 +2960,6 @@ static void sd_read_block_characteristics(struct scsi_disk *sdkp)
2319     if (rot == 1) {
2320     blk_queue_flag_set(QUEUE_FLAG_NONROT, q);
2321     blk_queue_flag_clear(QUEUE_FLAG_ADD_RANDOM, q);
2322     - } else {
2323     - blk_queue_flag_clear(QUEUE_FLAG_NONROT, q);
2324     - blk_queue_flag_set(QUEUE_FLAG_ADD_RANDOM, q);
2325     }
2326    
2327     if (sdkp->device->type == TYPE_ZBC) {
2328     @@ -3099,6 +3096,15 @@ static int sd_revalidate_disk(struct gendisk *disk)
2329     if (sdkp->media_present) {
2330     sd_read_capacity(sdkp, buffer);
2331    
2332     + /*
2333     + * set the default to rotational. All non-rotational devices
2334     + * support the block characteristics VPD page, which will
2335     + * cause this to be updated correctly and any device which
2336     + * doesn't support it should be treated as rotational.
2337     + */
2338     + blk_queue_flag_clear(QUEUE_FLAG_NONROT, q);
2339     + blk_queue_flag_set(QUEUE_FLAG_ADD_RANDOM, q);
2340     +
2341     if (scsi_device_supports_vpd(sdp)) {
2342     sd_read_block_provisioning(sdkp);
2343     sd_read_block_limits(sdkp);
2344     diff --git a/drivers/soc/renesas/r8a774c0-sysc.c b/drivers/soc/renesas/r8a774c0-sysc.c
2345     index e1ac4c0f6640..11050e17ea81 100644
2346     --- a/drivers/soc/renesas/r8a774c0-sysc.c
2347     +++ b/drivers/soc/renesas/r8a774c0-sysc.c
2348     @@ -28,19 +28,6 @@ static struct rcar_sysc_area r8a774c0_areas[] __initdata = {
2349     { "3dg-b", 0x100, 1, R8A774C0_PD_3DG_B, R8A774C0_PD_3DG_A },
2350     };
2351    
2352     -static void __init rcar_sysc_fix_parent(struct rcar_sysc_area *areas,
2353     - unsigned int num_areas, u8 id,
2354     - int new_parent)
2355     -{
2356     - unsigned int i;
2357     -
2358     - for (i = 0; i < num_areas; i++)
2359     - if (areas[i].isr_bit == id) {
2360     - areas[i].parent = new_parent;
2361     - return;
2362     - }
2363     -}
2364     -
2365     /* Fixups for RZ/G2E ES1.0 revision */
2366     static const struct soc_device_attribute r8a774c0[] __initconst = {
2367     { .soc_id = "r8a774c0", .revision = "ES1.0" },
2368     @@ -50,12 +37,10 @@ static const struct soc_device_attribute r8a774c0[] __initconst = {
2369     static int __init r8a774c0_sysc_init(void)
2370     {
2371     if (soc_device_match(r8a774c0)) {
2372     - rcar_sysc_fix_parent(r8a774c0_areas,
2373     - ARRAY_SIZE(r8a774c0_areas),
2374     - R8A774C0_PD_3DG_A, R8A774C0_PD_3DG_B);
2375     - rcar_sysc_fix_parent(r8a774c0_areas,
2376     - ARRAY_SIZE(r8a774c0_areas),
2377     - R8A774C0_PD_3DG_B, R8A774C0_PD_ALWAYS_ON);
2378     + /* Fix incorrect 3DG hierarchy */
2379     + swap(r8a774c0_areas[6], r8a774c0_areas[7]);
2380     + r8a774c0_areas[6].parent = R8A774C0_PD_ALWAYS_ON;
2381     + r8a774c0_areas[7].parent = R8A774C0_PD_3DG_B;
2382     }
2383    
2384     return 0;
2385     diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h
2386     index 38ab0fca49e1..373639199291 100644
2387     --- a/fs/cifs/cifsglob.h
2388     +++ b/fs/cifs/cifsglob.h
2389     @@ -1426,6 +1426,7 @@ struct mid_q_entry {
2390     int mid_state; /* wish this were enum but can not pass to wait_event */
2391     unsigned int mid_flags;
2392     __le16 command; /* smb command code */
2393     + unsigned int optype; /* operation type */
2394     bool large_buf:1; /* if valid response, is pointer to large buf */
2395     bool multiRsp:1; /* multiple trans2 responses for one request */
2396     bool multiEnd:1; /* both received */
2397     @@ -1562,6 +1563,25 @@ static inline void free_dfs_info_array(struct dfs_info3_param *param,
2398     kfree(param);
2399     }
2400    
2401     +static inline bool is_interrupt_error(int error)
2402     +{
2403     + switch (error) {
2404     + case -EINTR:
2405     + case -ERESTARTSYS:
2406     + case -ERESTARTNOHAND:
2407     + case -ERESTARTNOINTR:
2408     + return true;
2409     + }
2410     + return false;
2411     +}
2412     +
2413     +static inline bool is_retryable_error(int error)
2414     +{
2415     + if (is_interrupt_error(error) || error == -EAGAIN)
2416     + return true;
2417     + return false;
2418     +}
2419     +
2420     #define MID_FREE 0
2421     #define MID_REQUEST_ALLOCATED 1
2422     #define MID_REQUEST_SUBMITTED 2
2423     diff --git a/fs/cifs/cifssmb.c b/fs/cifs/cifssmb.c
2424     index fce610f6cd24..327a101f7894 100644
2425     --- a/fs/cifs/cifssmb.c
2426     +++ b/fs/cifs/cifssmb.c
2427     @@ -2043,7 +2043,7 @@ cifs_writev_requeue(struct cifs_writedata *wdata)
2428    
2429     for (j = 0; j < nr_pages; j++) {
2430     unlock_page(wdata2->pages[j]);
2431     - if (rc != 0 && rc != -EAGAIN) {
2432     + if (rc != 0 && !is_retryable_error(rc)) {
2433     SetPageError(wdata2->pages[j]);
2434     end_page_writeback(wdata2->pages[j]);
2435     put_page(wdata2->pages[j]);
2436     @@ -2052,7 +2052,7 @@ cifs_writev_requeue(struct cifs_writedata *wdata)
2437    
2438     if (rc) {
2439     kref_put(&wdata2->refcount, cifs_writedata_release);
2440     - if (rc == -EAGAIN)
2441     + if (is_retryable_error(rc))
2442     continue;
2443     break;
2444     }
2445     @@ -2061,7 +2061,8 @@ cifs_writev_requeue(struct cifs_writedata *wdata)
2446     i += nr_pages;
2447     } while (i < wdata->nr_pages);
2448    
2449     - mapping_set_error(inode->i_mapping, rc);
2450     + if (rc != 0 && !is_retryable_error(rc))
2451     + mapping_set_error(inode->i_mapping, rc);
2452     kref_put(&wdata->refcount, cifs_writedata_release);
2453     }
2454    
2455     diff --git a/fs/cifs/file.c b/fs/cifs/file.c
2456     index 8431854b129f..c13effbaadba 100644
2457     --- a/fs/cifs/file.c
2458     +++ b/fs/cifs/file.c
2459     @@ -732,7 +732,8 @@ reopen_success:
2460    
2461     if (can_flush) {
2462     rc = filemap_write_and_wait(inode->i_mapping);
2463     - mapping_set_error(inode->i_mapping, rc);
2464     + if (!is_interrupt_error(rc))
2465     + mapping_set_error(inode->i_mapping, rc);
2466    
2467     if (tcon->unix_ext)
2468     rc = cifs_get_inode_info_unix(&inode, full_path,
2469     @@ -1139,6 +1140,10 @@ cifs_push_mandatory_locks(struct cifsFileInfo *cfile)
2470     return -EINVAL;
2471     }
2472    
2473     + BUILD_BUG_ON(sizeof(struct smb_hdr) + sizeof(LOCKING_ANDX_RANGE) >
2474     + PAGE_SIZE);
2475     + max_buf = min_t(unsigned int, max_buf - sizeof(struct smb_hdr),
2476     + PAGE_SIZE);
2477     max_num = (max_buf - sizeof(struct smb_hdr)) /
2478     sizeof(LOCKING_ANDX_RANGE);
2479     buf = kcalloc(max_num, sizeof(LOCKING_ANDX_RANGE), GFP_KERNEL);
2480     @@ -1477,6 +1482,10 @@ cifs_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock,
2481     if (max_buf < (sizeof(struct smb_hdr) + sizeof(LOCKING_ANDX_RANGE)))
2482     return -EINVAL;
2483    
2484     + BUILD_BUG_ON(sizeof(struct smb_hdr) + sizeof(LOCKING_ANDX_RANGE) >
2485     + PAGE_SIZE);
2486     + max_buf = min_t(unsigned int, max_buf - sizeof(struct smb_hdr),
2487     + PAGE_SIZE);
2488     max_num = (max_buf - sizeof(struct smb_hdr)) /
2489     sizeof(LOCKING_ANDX_RANGE);
2490     buf = kcalloc(max_num, sizeof(LOCKING_ANDX_RANGE), GFP_KERNEL);
2491     @@ -2109,6 +2118,7 @@ static int cifs_writepages(struct address_space *mapping,
2492     pgoff_t end, index;
2493     struct cifs_writedata *wdata;
2494     int rc = 0;
2495     + int saved_rc = 0;
2496     unsigned int xid;
2497    
2498     /*
2499     @@ -2137,8 +2147,10 @@ retry:
2500    
2501     rc = server->ops->wait_mtu_credits(server, cifs_sb->wsize,
2502     &wsize, &credits);
2503     - if (rc)
2504     + if (rc != 0) {
2505     + done = true;
2506     break;
2507     + }
2508    
2509     tofind = min((wsize / PAGE_SIZE) - 1, end - index) + 1;
2510    
2511     @@ -2146,6 +2158,7 @@ retry:
2512     &found_pages);
2513     if (!wdata) {
2514     rc = -ENOMEM;
2515     + done = true;
2516     add_credits_and_wake_if(server, credits, 0);
2517     break;
2518     }
2519     @@ -2174,7 +2187,7 @@ retry:
2520     if (rc != 0) {
2521     add_credits_and_wake_if(server, wdata->credits, 0);
2522     for (i = 0; i < nr_pages; ++i) {
2523     - if (rc == -EAGAIN)
2524     + if (is_retryable_error(rc))
2525     redirty_page_for_writepage(wbc,
2526     wdata->pages[i]);
2527     else
2528     @@ -2182,7 +2195,7 @@ retry:
2529     end_page_writeback(wdata->pages[i]);
2530     put_page(wdata->pages[i]);
2531     }
2532     - if (rc != -EAGAIN)
2533     + if (!is_retryable_error(rc))
2534     mapping_set_error(mapping, rc);
2535     }
2536     kref_put(&wdata->refcount, cifs_writedata_release);
2537     @@ -2192,6 +2205,15 @@ retry:
2538     continue;
2539     }
2540    
2541     + /* Return immediately if we received a signal during writing */
2542     + if (is_interrupt_error(rc)) {
2543     + done = true;
2544     + break;
2545     + }
2546     +
2547     + if (rc != 0 && saved_rc == 0)
2548     + saved_rc = rc;
2549     +
2550     wbc->nr_to_write -= nr_pages;
2551     if (wbc->nr_to_write <= 0)
2552     done = true;
2553     @@ -2209,6 +2231,9 @@ retry:
2554     goto retry;
2555     }
2556    
2557     + if (saved_rc != 0)
2558     + rc = saved_rc;
2559     +
2560     if (wbc->range_cyclic || (range_whole && wbc->nr_to_write > 0))
2561     mapping->writeback_index = index;
2562    
2563     @@ -2241,8 +2266,8 @@ cifs_writepage_locked(struct page *page, struct writeback_control *wbc)
2564     set_page_writeback(page);
2565     retry_write:
2566     rc = cifs_partialpagewrite(page, 0, PAGE_SIZE);
2567     - if (rc == -EAGAIN) {
2568     - if (wbc->sync_mode == WB_SYNC_ALL)
2569     + if (is_retryable_error(rc)) {
2570     + if (wbc->sync_mode == WB_SYNC_ALL && rc == -EAGAIN)
2571     goto retry_write;
2572     redirty_page_for_writepage(wbc, page);
2573     } else if (rc != 0) {
2574     diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c
2575     index a81a9df997c1..84d51ca91ef7 100644
2576     --- a/fs/cifs/inode.c
2577     +++ b/fs/cifs/inode.c
2578     @@ -2261,6 +2261,11 @@ cifs_setattr_unix(struct dentry *direntry, struct iattr *attrs)
2579     * the flush returns error?
2580     */
2581     rc = filemap_write_and_wait(inode->i_mapping);
2582     + if (is_interrupt_error(rc)) {
2583     + rc = -ERESTARTSYS;
2584     + goto out;
2585     + }
2586     +
2587     mapping_set_error(inode->i_mapping, rc);
2588     rc = 0;
2589    
2590     @@ -2404,6 +2409,11 @@ cifs_setattr_nounix(struct dentry *direntry, struct iattr *attrs)
2591     * the flush returns error?
2592     */
2593     rc = filemap_write_and_wait(inode->i_mapping);
2594     + if (is_interrupt_error(rc)) {
2595     + rc = -ERESTARTSYS;
2596     + goto cifs_setattr_exit;
2597     + }
2598     +
2599     mapping_set_error(inode->i_mapping, rc);
2600     rc = 0;
2601    
2602     diff --git a/fs/cifs/smb2file.c b/fs/cifs/smb2file.c
2603     index 2fc3d31967ee..b204e84b87fb 100644
2604     --- a/fs/cifs/smb2file.c
2605     +++ b/fs/cifs/smb2file.c
2606     @@ -128,6 +128,8 @@ smb2_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock,
2607     if (max_buf < sizeof(struct smb2_lock_element))
2608     return -EINVAL;
2609    
2610     + BUILD_BUG_ON(sizeof(struct smb2_lock_element) > PAGE_SIZE);
2611     + max_buf = min_t(unsigned int, max_buf, PAGE_SIZE);
2612     max_num = max_buf / sizeof(struct smb2_lock_element);
2613     buf = kcalloc(max_num, sizeof(struct smb2_lock_element), GFP_KERNEL);
2614     if (!buf)
2615     @@ -264,6 +266,8 @@ smb2_push_mandatory_locks(struct cifsFileInfo *cfile)
2616     return -EINVAL;
2617     }
2618    
2619     + BUILD_BUG_ON(sizeof(struct smb2_lock_element) > PAGE_SIZE);
2620     + max_buf = min_t(unsigned int, max_buf, PAGE_SIZE);
2621     max_num = max_buf / sizeof(struct smb2_lock_element);
2622     buf = kcalloc(max_num, sizeof(struct smb2_lock_element), GFP_KERNEL);
2623     if (!buf) {
2624     diff --git a/fs/cifs/smb2inode.c b/fs/cifs/smb2inode.c
2625     index a8999f930b22..057d2034209f 100644
2626     --- a/fs/cifs/smb2inode.c
2627     +++ b/fs/cifs/smb2inode.c
2628     @@ -294,6 +294,8 @@ smb2_query_path_info(const unsigned int xid, struct cifs_tcon *tcon,
2629     int rc;
2630     struct smb2_file_all_info *smb2_data;
2631     __u32 create_options = 0;
2632     + struct cifs_fid fid;
2633     + bool no_cached_open = tcon->nohandlecache;
2634    
2635     *adjust_tz = false;
2636     *symlink = false;
2637     @@ -302,6 +304,21 @@ smb2_query_path_info(const unsigned int xid, struct cifs_tcon *tcon,
2638     GFP_KERNEL);
2639     if (smb2_data == NULL)
2640     return -ENOMEM;
2641     +
2642     + /* If it is a root and its handle is cached then use it */
2643     + if (!strlen(full_path) && !no_cached_open) {
2644     + rc = open_shroot(xid, tcon, &fid);
2645     + if (rc)
2646     + goto out;
2647     + rc = SMB2_query_info(xid, tcon, fid.persistent_fid,
2648     + fid.volatile_fid, smb2_data);
2649     + close_shroot(&tcon->crfid);
2650     + if (rc)
2651     + goto out;
2652     + move_smb2_info_to_cifs(data, smb2_data);
2653     + goto out;
2654     + }
2655     +
2656     if (backup_cred(cifs_sb))
2657     create_options |= CREATE_OPEN_BACKUP_INTENT;
2658    
2659     diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c
2660     index d7dd7d38fad6..aa71e620f3cd 100644
2661     --- a/fs/cifs/smb2ops.c
2662     +++ b/fs/cifs/smb2ops.c
2663     @@ -154,7 +154,11 @@ smb2_get_credits(struct mid_q_entry *mid)
2664     {
2665     struct smb2_sync_hdr *shdr = (struct smb2_sync_hdr *)mid->resp_buf;
2666    
2667     - return le16_to_cpu(shdr->CreditRequest);
2668     + if (mid->mid_state == MID_RESPONSE_RECEIVED
2669     + || mid->mid_state == MID_RESPONSE_MALFORMED)
2670     + return le16_to_cpu(shdr->CreditRequest);
2671     +
2672     + return 0;
2673     }
2674    
2675     static int
2676     diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c
2677     index c393ac255af7..28712080add9 100644
2678     --- a/fs/cifs/smb2pdu.c
2679     +++ b/fs/cifs/smb2pdu.c
2680     @@ -2826,9 +2826,10 @@ smb2_echo_callback(struct mid_q_entry *mid)
2681     {
2682     struct TCP_Server_Info *server = mid->callback_data;
2683     struct smb2_echo_rsp *rsp = (struct smb2_echo_rsp *)mid->resp_buf;
2684     - unsigned int credits_received = 1;
2685     + unsigned int credits_received = 0;
2686    
2687     - if (mid->mid_state == MID_RESPONSE_RECEIVED)
2688     + if (mid->mid_state == MID_RESPONSE_RECEIVED
2689     + || mid->mid_state == MID_RESPONSE_MALFORMED)
2690     credits_received = le16_to_cpu(rsp->sync_hdr.CreditRequest);
2691    
2692     DeleteMidQEntry(mid);
2693     @@ -3085,7 +3086,7 @@ smb2_readv_callback(struct mid_q_entry *mid)
2694     struct TCP_Server_Info *server = tcon->ses->server;
2695     struct smb2_sync_hdr *shdr =
2696     (struct smb2_sync_hdr *)rdata->iov[0].iov_base;
2697     - unsigned int credits_received = 1;
2698     + unsigned int credits_received = 0;
2699     struct smb_rqst rqst = { .rq_iov = rdata->iov,
2700     .rq_nvec = 2,
2701     .rq_pages = rdata->pages,
2702     @@ -3124,6 +3125,9 @@ smb2_readv_callback(struct mid_q_entry *mid)
2703     task_io_account_read(rdata->got_bytes);
2704     cifs_stats_bytes_read(tcon, rdata->got_bytes);
2705     break;
2706     + case MID_RESPONSE_MALFORMED:
2707     + credits_received = le16_to_cpu(shdr->CreditRequest);
2708     + /* fall through */
2709     default:
2710     if (rdata->result != -ENODATA)
2711     rdata->result = -EIO;
2712     @@ -3317,7 +3321,7 @@ smb2_writev_callback(struct mid_q_entry *mid)
2713     struct cifs_tcon *tcon = tlink_tcon(wdata->cfile->tlink);
2714     unsigned int written;
2715     struct smb2_write_rsp *rsp = (struct smb2_write_rsp *)mid->resp_buf;
2716     - unsigned int credits_received = 1;
2717     + unsigned int credits_received = 0;
2718    
2719     switch (mid->mid_state) {
2720     case MID_RESPONSE_RECEIVED:
2721     @@ -3345,6 +3349,9 @@ smb2_writev_callback(struct mid_q_entry *mid)
2722     case MID_RETRY_NEEDED:
2723     wdata->result = -EAGAIN;
2724     break;
2725     + case MID_RESPONSE_MALFORMED:
2726     + credits_received = le16_to_cpu(rsp->sync_hdr.CreditRequest);
2727     + /* fall through */
2728     default:
2729     wdata->result = -EIO;
2730     break;
2731     diff --git a/fs/cifs/transport.c b/fs/cifs/transport.c
2732     index d51064c1ba42..6f937e826910 100644
2733     --- a/fs/cifs/transport.c
2734     +++ b/fs/cifs/transport.c
2735     @@ -781,8 +781,25 @@ cifs_setup_request(struct cifs_ses *ses, struct smb_rqst *rqst)
2736     }
2737    
2738     static void
2739     -cifs_noop_callback(struct mid_q_entry *mid)
2740     +cifs_compound_callback(struct mid_q_entry *mid)
2741     {
2742     + struct TCP_Server_Info *server = mid->server;
2743     +
2744     + add_credits(server, server->ops->get_credits(mid), mid->optype);
2745     +}
2746     +
2747     +static void
2748     +cifs_compound_last_callback(struct mid_q_entry *mid)
2749     +{
2750     + cifs_compound_callback(mid);
2751     + cifs_wake_up_task(mid);
2752     +}
2753     +
2754     +static void
2755     +cifs_cancelled_callback(struct mid_q_entry *mid)
2756     +{
2757     + cifs_compound_callback(mid);
2758     + DeleteMidQEntry(mid);
2759     }
2760    
2761     int
2762     @@ -860,12 +877,16 @@ compound_send_recv(const unsigned int xid, struct cifs_ses *ses,
2763     }
2764    
2765     midQ[i]->mid_state = MID_REQUEST_SUBMITTED;
2766     + midQ[i]->optype = optype;
2767     /*
2768     - * We don't invoke the callback compounds unless it is the last
2769     - * request.
2770     + * Invoke callback for every part of the compound chain
2771     + * to calculate credits properly. Wake up this thread only when
2772     + * the last element is received.
2773     */
2774     if (i < num_rqst - 1)
2775     - midQ[i]->callback = cifs_noop_callback;
2776     + midQ[i]->callback = cifs_compound_callback;
2777     + else
2778     + midQ[i]->callback = cifs_compound_last_callback;
2779     }
2780     cifs_in_send_inc(ses->server);
2781     rc = smb_send_rqst(ses->server, num_rqst, rqst, flags);
2782     @@ -879,8 +900,20 @@ compound_send_recv(const unsigned int xid, struct cifs_ses *ses,
2783    
2784     mutex_unlock(&ses->server->srv_mutex);
2785    
2786     - if (rc < 0)
2787     + if (rc < 0) {
2788     + /* Sending failed for some reason - return credits back */
2789     + for (i = 0; i < num_rqst; i++)
2790     + add_credits(ses->server, credits[i], optype);
2791     goto out;
2792     + }
2793     +
2794     + /*
2795     + * At this point the request is passed to the network stack - we assume
2796     + * that any credits taken from the server structure on the client have
2797     + * been spent and we can't return them back. Once we receive responses
2798     + * we will collect credits granted by the server in the mid callbacks
2799     + * and add those credits to the server structure.
2800     + */
2801    
2802     /*
2803     * Compounding is never used during session establish.
2804     @@ -894,25 +927,25 @@ compound_send_recv(const unsigned int xid, struct cifs_ses *ses,
2805    
2806     for (i = 0; i < num_rqst; i++) {
2807     rc = wait_for_response(ses->server, midQ[i]);
2808     - if (rc != 0) {
2809     + if (rc != 0)
2810     + break;
2811     + }
2812     + if (rc != 0) {
2813     + for (; i < num_rqst; i++) {
2814     cifs_dbg(VFS, "Cancelling wait for mid %llu cmd: %d\n",
2815     midQ[i]->mid, le16_to_cpu(midQ[i]->command));
2816     send_cancel(ses->server, &rqst[i], midQ[i]);
2817     spin_lock(&GlobalMid_Lock);
2818     if (midQ[i]->mid_state == MID_REQUEST_SUBMITTED) {
2819     midQ[i]->mid_flags |= MID_WAIT_CANCELLED;
2820     - midQ[i]->callback = DeleteMidQEntry;
2821     + midQ[i]->callback = cifs_cancelled_callback;
2822     cancelled_mid[i] = true;
2823     + credits[i] = 0;
2824     }
2825     spin_unlock(&GlobalMid_Lock);
2826     }
2827     }
2828    
2829     - for (i = 0; i < num_rqst; i++)
2830     - if (!cancelled_mid[i] && midQ[i]->resp_buf
2831     - && (midQ[i]->mid_state == MID_RESPONSE_RECEIVED))
2832     - credits[i] = ses->server->ops->get_credits(midQ[i]);
2833     -
2834     for (i = 0; i < num_rqst; i++) {
2835     if (rc < 0)
2836     goto out;
2837     @@ -971,7 +1004,6 @@ out:
2838     for (i = 0; i < num_rqst; i++) {
2839     if (!cancelled_mid[i])
2840     cifs_delete_mid(midQ[i]);
2841     - add_credits(ses->server, credits[i], optype);
2842     }
2843    
2844     return rc;
2845     diff --git a/fs/inode.c b/fs/inode.c
2846     index 35d2108d567c..9e198f00b64c 100644
2847     --- a/fs/inode.c
2848     +++ b/fs/inode.c
2849     @@ -730,11 +730,8 @@ static enum lru_status inode_lru_isolate(struct list_head *item,
2850     return LRU_REMOVED;
2851     }
2852    
2853     - /*
2854     - * Recently referenced inodes and inodes with many attached pages
2855     - * get one more pass.
2856     - */
2857     - if (inode->i_state & I_REFERENCED || inode->i_data.nrpages > 1) {
2858     + /* recently referenced inodes get one more pass */
2859     + if (inode->i_state & I_REFERENCED) {
2860     inode->i_state &= ~I_REFERENCED;
2861     spin_unlock(&inode->i_lock);
2862     return LRU_ROTATE;
2863     diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c
2864     index b33f9785b756..72a7681f4046 100644
2865     --- a/fs/nfsd/nfsctl.c
2866     +++ b/fs/nfsd/nfsctl.c
2867     @@ -1239,8 +1239,8 @@ static __net_init int nfsd_init_net(struct net *net)
2868     retval = nfsd_idmap_init(net);
2869     if (retval)
2870     goto out_idmap_error;
2871     - nn->nfsd4_lease = 45; /* default lease time */
2872     - nn->nfsd4_grace = 45;
2873     + nn->nfsd4_lease = 90; /* default lease time */
2874     + nn->nfsd4_grace = 90;
2875     nn->somebody_reclaimed = false;
2876     nn->clverifier_counter = prandom_u32();
2877     nn->clientid_counter = prandom_u32();
2878     diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
2879     index 47c3764c469b..7bcf5714ca24 100644
2880     --- a/fs/proc/task_mmu.c
2881     +++ b/fs/proc/task_mmu.c
2882     @@ -423,7 +423,7 @@ struct mem_size_stats {
2883     };
2884    
2885     static void smaps_account(struct mem_size_stats *mss, struct page *page,
2886     - bool compound, bool young, bool dirty)
2887     + bool compound, bool young, bool dirty, bool locked)
2888     {
2889     int i, nr = compound ? 1 << compound_order(page) : 1;
2890     unsigned long size = nr * PAGE_SIZE;
2891     @@ -450,24 +450,31 @@ static void smaps_account(struct mem_size_stats *mss, struct page *page,
2892     else
2893     mss->private_clean += size;
2894     mss->pss += (u64)size << PSS_SHIFT;
2895     + if (locked)
2896     + mss->pss_locked += (u64)size << PSS_SHIFT;
2897     return;
2898     }
2899    
2900     for (i = 0; i < nr; i++, page++) {
2901     int mapcount = page_mapcount(page);
2902     + unsigned long pss = (PAGE_SIZE << PSS_SHIFT);
2903    
2904     if (mapcount >= 2) {
2905     if (dirty || PageDirty(page))
2906     mss->shared_dirty += PAGE_SIZE;
2907     else
2908     mss->shared_clean += PAGE_SIZE;
2909     - mss->pss += (PAGE_SIZE << PSS_SHIFT) / mapcount;
2910     + mss->pss += pss / mapcount;
2911     + if (locked)
2912     + mss->pss_locked += pss / mapcount;
2913     } else {
2914     if (dirty || PageDirty(page))
2915     mss->private_dirty += PAGE_SIZE;
2916     else
2917     mss->private_clean += PAGE_SIZE;
2918     - mss->pss += PAGE_SIZE << PSS_SHIFT;
2919     + mss->pss += pss;
2920     + if (locked)
2921     + mss->pss_locked += pss;
2922     }
2923     }
2924     }
2925     @@ -490,6 +497,7 @@ static void smaps_pte_entry(pte_t *pte, unsigned long addr,
2926     {
2927     struct mem_size_stats *mss = walk->private;
2928     struct vm_area_struct *vma = walk->vma;
2929     + bool locked = !!(vma->vm_flags & VM_LOCKED);
2930     struct page *page = NULL;
2931    
2932     if (pte_present(*pte)) {
2933     @@ -532,7 +540,7 @@ static void smaps_pte_entry(pte_t *pte, unsigned long addr,
2934     if (!page)
2935     return;
2936    
2937     - smaps_account(mss, page, false, pte_young(*pte), pte_dirty(*pte));
2938     + smaps_account(mss, page, false, pte_young(*pte), pte_dirty(*pte), locked);
2939     }
2940    
2941     #ifdef CONFIG_TRANSPARENT_HUGEPAGE
2942     @@ -541,6 +549,7 @@ static void smaps_pmd_entry(pmd_t *pmd, unsigned long addr,
2943     {
2944     struct mem_size_stats *mss = walk->private;
2945     struct vm_area_struct *vma = walk->vma;
2946     + bool locked = !!(vma->vm_flags & VM_LOCKED);
2947     struct page *page;
2948    
2949     /* FOLL_DUMP will return -EFAULT on huge zero page */
2950     @@ -555,7 +564,7 @@ static void smaps_pmd_entry(pmd_t *pmd, unsigned long addr,
2951     /* pass */;
2952     else
2953     VM_BUG_ON_PAGE(1, page);
2954     - smaps_account(mss, page, true, pmd_young(*pmd), pmd_dirty(*pmd));
2955     + smaps_account(mss, page, true, pmd_young(*pmd), pmd_dirty(*pmd), locked);
2956     }
2957     #else
2958     static void smaps_pmd_entry(pmd_t *pmd, unsigned long addr,
2959     @@ -737,11 +746,8 @@ static void smap_gather_stats(struct vm_area_struct *vma,
2960     }
2961     }
2962     #endif
2963     -
2964     /* mmap_sem is held in m_start */
2965     walk_page_vma(vma, &smaps_walk);
2966     - if (vma->vm_flags & VM_LOCKED)
2967     - mss->pss_locked += mss->pss;
2968     }
2969    
2970     #define SEQ_PUT_DEC(str, val) \
2971     diff --git a/include/linux/mmc/card.h b/include/linux/mmc/card.h
2972     index de7377815b6b..8ef330027b13 100644
2973     --- a/include/linux/mmc/card.h
2974     +++ b/include/linux/mmc/card.h
2975     @@ -308,6 +308,7 @@ struct mmc_card {
2976     unsigned int nr_parts;
2977    
2978     unsigned int bouncesz; /* Bounce buffer size */
2979     + struct workqueue_struct *complete_wq; /* Private workqueue */
2980     };
2981    
2982     static inline bool mmc_large_sector(struct mmc_card *card)
2983     diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
2984     index 53c500f0ca79..c2876e740514 100644
2985     --- a/include/linux/perf_event.h
2986     +++ b/include/linux/perf_event.h
2987     @@ -447,6 +447,11 @@ struct pmu {
2988     * Filter events for PMU-specific reasons.
2989     */
2990     int (*filter_match) (struct perf_event *event); /* optional */
2991     +
2992     + /*
2993     + * Check period value for PERF_EVENT_IOC_PERIOD ioctl.
2994     + */
2995     + int (*check_period) (struct perf_event *event, u64 value); /* optional */
2996     };
2997    
2998     enum perf_addr_filter_action_t {
2999     diff --git a/kernel/events/core.c b/kernel/events/core.c
3000     index 84530ab358c3..699bc25d6204 100644
3001     --- a/kernel/events/core.c
3002     +++ b/kernel/events/core.c
3003     @@ -4963,6 +4963,11 @@ static void __perf_event_period(struct perf_event *event,
3004     }
3005     }
3006    
3007     +static int perf_event_check_period(struct perf_event *event, u64 value)
3008     +{
3009     + return event->pmu->check_period(event, value);
3010     +}
3011     +
3012     static int perf_event_period(struct perf_event *event, u64 __user *arg)
3013     {
3014     u64 value;
3015     @@ -4979,6 +4984,9 @@ static int perf_event_period(struct perf_event *event, u64 __user *arg)
3016     if (event->attr.freq && value > sysctl_perf_event_sample_rate)
3017     return -EINVAL;
3018    
3019     + if (perf_event_check_period(event, value))
3020     + return -EINVAL;
3021     +
3022     event_function_call(event, __perf_event_period, &value);
3023    
3024     return 0;
3025     @@ -9391,6 +9399,11 @@ static int perf_pmu_nop_int(struct pmu *pmu)
3026     return 0;
3027     }
3028    
3029     +static int perf_event_nop_int(struct perf_event *event, u64 value)
3030     +{
3031     + return 0;
3032     +}
3033     +
3034     static DEFINE_PER_CPU(unsigned int, nop_txn_flags);
3035    
3036     static void perf_pmu_start_txn(struct pmu *pmu, unsigned int flags)
3037     @@ -9691,6 +9704,9 @@ got_cpu_context:
3038     pmu->pmu_disable = perf_pmu_nop_void;
3039     }
3040    
3041     + if (!pmu->check_period)
3042     + pmu->check_period = perf_event_nop_int;
3043     +
3044     if (!pmu->event_idx)
3045     pmu->event_idx = perf_event_idx_default;
3046    
3047     diff --git a/kernel/events/ring_buffer.c b/kernel/events/ring_buffer.c
3048     index 309ef5a64af5..5ab4fe3b1dcc 100644
3049     --- a/kernel/events/ring_buffer.c
3050     +++ b/kernel/events/ring_buffer.c
3051     @@ -734,7 +734,7 @@ struct ring_buffer *rb_alloc(int nr_pages, long watermark, int cpu, int flags)
3052     size = sizeof(struct ring_buffer);
3053     size += nr_pages * sizeof(void *);
3054    
3055     - if (order_base_2(size) >= MAX_ORDER)
3056     + if (order_base_2(size) >= PAGE_SHIFT+MAX_ORDER)
3057     goto fail;
3058    
3059     rb = kzalloc(size, GFP_KERNEL);
3060     diff --git a/kernel/signal.c b/kernel/signal.c
3061     index cf4cf68c3ea8..ac969af3e9a0 100644
3062     --- a/kernel/signal.c
3063     +++ b/kernel/signal.c
3064     @@ -2436,9 +2436,12 @@ relock:
3065     }
3066    
3067     /* Has this task already been marked for death? */
3068     - ksig->info.si_signo = signr = SIGKILL;
3069     - if (signal_group_exit(signal))
3070     + if (signal_group_exit(signal)) {
3071     + ksig->info.si_signo = signr = SIGKILL;
3072     + sigdelset(&current->pending.signal, SIGKILL);
3073     + recalc_sigpending();
3074     goto fatal;
3075     + }
3076    
3077     for (;;) {
3078     struct k_sigaction *ka;
3079     diff --git a/kernel/trace/trace_probe_tmpl.h b/kernel/trace/trace_probe_tmpl.h
3080     index 5c56afc17cf8..4737bb8c07a3 100644
3081     --- a/kernel/trace/trace_probe_tmpl.h
3082     +++ b/kernel/trace/trace_probe_tmpl.h
3083     @@ -180,10 +180,12 @@ store_trace_args(void *data, struct trace_probe *tp, struct pt_regs *regs,
3084     if (unlikely(arg->dynamic))
3085     *dl = make_data_loc(maxlen, dyndata - base);
3086     ret = process_fetch_insn(arg->code, regs, dl, base);
3087     - if (unlikely(ret < 0 && arg->dynamic))
3088     + if (unlikely(ret < 0 && arg->dynamic)) {
3089     *dl = make_data_loc(0, dyndata - base);
3090     - else
3091     + } else {
3092     dyndata += ret;
3093     + maxlen -= ret;
3094     + }
3095     }
3096     }
3097    
3098     diff --git a/mm/vmscan.c b/mm/vmscan.c
3099     index 62ac0c488624..8e377bbac3a6 100644
3100     --- a/mm/vmscan.c
3101     +++ b/mm/vmscan.c
3102     @@ -487,16 +487,6 @@ static unsigned long do_shrink_slab(struct shrink_control *shrinkctl,
3103     delta = freeable / 2;
3104     }
3105    
3106     - /*
3107     - * Make sure we apply some minimal pressure on default priority
3108     - * even on small cgroups. Stale objects are not only consuming memory
3109     - * by themselves, but can also hold a reference to a dying cgroup,
3110     - * preventing it from being reclaimed. A dying cgroup with all
3111     - * corresponding structures like per-cpu stats and kmem caches
3112     - * can be really big, so it may lead to a significant waste of memory.
3113     - */
3114     - delta = max_t(unsigned long long, delta, min(freeable, batch_size));
3115     -
3116     total_scan += delta;
3117     if (total_scan < 0) {
3118     pr_err("shrink_slab: %pF negative objects to delete nr=%ld\n",
3119     diff --git a/net/sunrpc/auth_gss/gss_krb5_seqnum.c b/net/sunrpc/auth_gss/gss_krb5_seqnum.c
3120     index fb6656295204..507105127095 100644
3121     --- a/net/sunrpc/auth_gss/gss_krb5_seqnum.c
3122     +++ b/net/sunrpc/auth_gss/gss_krb5_seqnum.c
3123     @@ -44,7 +44,7 @@ krb5_make_rc4_seq_num(struct krb5_ctx *kctx, int direction, s32 seqnum,
3124     unsigned char *cksum, unsigned char *buf)
3125     {
3126     struct crypto_sync_skcipher *cipher;
3127     - unsigned char plain[8];
3128     + unsigned char *plain;
3129     s32 code;
3130    
3131     dprintk("RPC: %s:\n", __func__);
3132     @@ -52,6 +52,10 @@ krb5_make_rc4_seq_num(struct krb5_ctx *kctx, int direction, s32 seqnum,
3133     if (IS_ERR(cipher))
3134     return PTR_ERR(cipher);
3135    
3136     + plain = kmalloc(8, GFP_NOFS);
3137     + if (!plain)
3138     + return -ENOMEM;
3139     +
3140     plain[0] = (unsigned char) ((seqnum >> 24) & 0xff);
3141     plain[1] = (unsigned char) ((seqnum >> 16) & 0xff);
3142     plain[2] = (unsigned char) ((seqnum >> 8) & 0xff);
3143     @@ -67,6 +71,7 @@ krb5_make_rc4_seq_num(struct krb5_ctx *kctx, int direction, s32 seqnum,
3144    
3145     code = krb5_encrypt(cipher, cksum, plain, buf, 8);
3146     out:
3147     + kfree(plain);
3148     crypto_free_sync_skcipher(cipher);
3149     return code;
3150     }
3151     @@ -77,12 +82,17 @@ krb5_make_seq_num(struct krb5_ctx *kctx,
3152     u32 seqnum,
3153     unsigned char *cksum, unsigned char *buf)
3154     {
3155     - unsigned char plain[8];
3156     + unsigned char *plain;
3157     + s32 code;
3158    
3159     if (kctx->enctype == ENCTYPE_ARCFOUR_HMAC)
3160     return krb5_make_rc4_seq_num(kctx, direction, seqnum,
3161     cksum, buf);
3162    
3163     + plain = kmalloc(8, GFP_NOFS);
3164     + if (!plain)
3165     + return -ENOMEM;
3166     +
3167     plain[0] = (unsigned char) (seqnum & 0xff);
3168     plain[1] = (unsigned char) ((seqnum >> 8) & 0xff);
3169     plain[2] = (unsigned char) ((seqnum >> 16) & 0xff);
3170     @@ -93,7 +103,9 @@ krb5_make_seq_num(struct krb5_ctx *kctx,
3171     plain[6] = direction;
3172     plain[7] = direction;
3173    
3174     - return krb5_encrypt(key, cksum, plain, buf, 8);
3175     + code = krb5_encrypt(key, cksum, plain, buf, 8);
3176     + kfree(plain);
3177     + return code;
3178     }
3179    
3180     static s32
3181     @@ -101,7 +113,7 @@ krb5_get_rc4_seq_num(struct krb5_ctx *kctx, unsigned char *cksum,
3182     unsigned char *buf, int *direction, s32 *seqnum)
3183     {
3184     struct crypto_sync_skcipher *cipher;
3185     - unsigned char plain[8];
3186     + unsigned char *plain;
3187     s32 code;
3188    
3189     dprintk("RPC: %s:\n", __func__);
3190     @@ -113,20 +125,28 @@ krb5_get_rc4_seq_num(struct krb5_ctx *kctx, unsigned char *cksum,
3191     if (code)
3192     goto out;
3193    
3194     + plain = kmalloc(8, GFP_NOFS);
3195     + if (!plain) {
3196     + code = -ENOMEM;
3197     + goto out;
3198     + }
3199     +
3200     code = krb5_decrypt(cipher, cksum, buf, plain, 8);
3201     if (code)
3202     - goto out;
3203     + goto out_plain;
3204    
3205     if ((plain[4] != plain[5]) || (plain[4] != plain[6])
3206     || (plain[4] != plain[7])) {
3207     code = (s32)KG_BAD_SEQ;
3208     - goto out;
3209     + goto out_plain;
3210     }
3211    
3212     *direction = plain[4];
3213    
3214     *seqnum = ((plain[0] << 24) | (plain[1] << 16) |
3215     (plain[2] << 8) | (plain[3]));
3216     +out_plain:
3217     + kfree(plain);
3218     out:
3219     crypto_free_sync_skcipher(cipher);
3220     return code;
3221     @@ -139,7 +159,7 @@ krb5_get_seq_num(struct krb5_ctx *kctx,
3222     int *direction, u32 *seqnum)
3223     {
3224     s32 code;
3225     - unsigned char plain[8];
3226     + unsigned char *plain;
3227     struct crypto_sync_skcipher *key = kctx->seq;
3228    
3229     dprintk("RPC: krb5_get_seq_num:\n");
3230     @@ -147,18 +167,25 @@ krb5_get_seq_num(struct krb5_ctx *kctx,
3231     if (kctx->enctype == ENCTYPE_ARCFOUR_HMAC)
3232     return krb5_get_rc4_seq_num(kctx, cksum, buf,
3233     direction, seqnum);
3234     + plain = kmalloc(8, GFP_NOFS);
3235     + if (!plain)
3236     + return -ENOMEM;
3237    
3238     if ((code = krb5_decrypt(key, cksum, buf, plain, 8)))
3239     - return code;
3240     + goto out;
3241    
3242     if ((plain[4] != plain[5]) || (plain[4] != plain[6]) ||
3243     - (plain[4] != plain[7]))
3244     - return (s32)KG_BAD_SEQ;
3245     + (plain[4] != plain[7])) {
3246     + code = (s32)KG_BAD_SEQ;
3247     + goto out;
3248     + }
3249    
3250     *direction = plain[4];
3251    
3252     *seqnum = ((plain[0]) |
3253     (plain[1] << 8) | (plain[2] << 16) | (plain[3] << 24));
3254    
3255     - return 0;
3256     +out:
3257     + kfree(plain);
3258     + return code;
3259     }
3260     diff --git a/sound/core/pcm_lib.c b/sound/core/pcm_lib.c
3261     index 6c99fa8ac5fa..6c0b30391ba9 100644
3262     --- a/sound/core/pcm_lib.c
3263     +++ b/sound/core/pcm_lib.c
3264     @@ -2112,13 +2112,6 @@ int pcm_lib_apply_appl_ptr(struct snd_pcm_substream *substream,
3265     return 0;
3266     }
3267    
3268     -/* allow waiting for a capture stream that hasn't been started */
3269     -#if IS_ENABLED(CONFIG_SND_PCM_OSS)
3270     -#define wait_capture_start(substream) ((substream)->oss.oss)
3271     -#else
3272     -#define wait_capture_start(substream) false
3273     -#endif
3274     -
3275     /* the common loop for read/write data */
3276     snd_pcm_sframes_t __snd_pcm_lib_xfer(struct snd_pcm_substream *substream,
3277     void *data, bool interleaved,
3278     @@ -2184,16 +2177,11 @@ snd_pcm_sframes_t __snd_pcm_lib_xfer(struct snd_pcm_substream *substream,
3279     snd_pcm_update_hw_ptr(substream);
3280    
3281     if (!is_playback &&
3282     - runtime->status->state == SNDRV_PCM_STATE_PREPARED) {
3283     - if (size >= runtime->start_threshold) {
3284     - err = snd_pcm_start(substream);
3285     - if (err < 0)
3286     - goto _end_unlock;
3287     - } else if (!wait_capture_start(substream)) {
3288     - /* nothing to do */
3289     - err = 0;
3290     + runtime->status->state == SNDRV_PCM_STATE_PREPARED &&
3291     + size >= runtime->start_threshold) {
3292     + err = snd_pcm_start(substream);
3293     + if (err < 0)
3294     goto _end_unlock;
3295     - }
3296     }
3297    
3298     avail = snd_pcm_avail(substream);
3299     diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c
3300     index 152f54137082..a4ee7656d9ee 100644
3301     --- a/sound/pci/hda/patch_conexant.c
3302     +++ b/sound/pci/hda/patch_conexant.c
3303     @@ -924,6 +924,7 @@ static const struct snd_pci_quirk cxt5066_fixups[] = {
3304     SND_PCI_QUIRK(0x103c, 0x807C, "HP EliteBook 820 G3", CXT_FIXUP_HP_DOCK),
3305     SND_PCI_QUIRK(0x103c, 0x80FD, "HP ProBook 640 G2", CXT_FIXUP_HP_DOCK),
3306     SND_PCI_QUIRK(0x103c, 0x828c, "HP EliteBook 840 G4", CXT_FIXUP_HP_DOCK),
3307     + SND_PCI_QUIRK(0x103c, 0x83b2, "HP EliteBook 840 G5", CXT_FIXUP_HP_DOCK),
3308     SND_PCI_QUIRK(0x103c, 0x83b3, "HP EliteBook 830 G5", CXT_FIXUP_HP_DOCK),
3309     SND_PCI_QUIRK(0x103c, 0x83d3, "HP ProBook 640 G4", CXT_FIXUP_HP_DOCK),
3310     SND_PCI_QUIRK(0x103c, 0x8174, "HP Spectre x360", CXT_FIXUP_HP_SPECTRE),
3311     diff --git a/sound/soc/codecs/hdmi-codec.c b/sound/soc/codecs/hdmi-codec.c
3312     index d00734d31e04..e5b6769b9797 100644
3313     --- a/sound/soc/codecs/hdmi-codec.c
3314     +++ b/sound/soc/codecs/hdmi-codec.c
3315     @@ -795,6 +795,8 @@ static int hdmi_codec_probe(struct platform_device *pdev)
3316     if (hcd->spdif)
3317     hcp->daidrv[i] = hdmi_spdif_dai;
3318    
3319     + dev_set_drvdata(dev, hcp);
3320     +
3321     ret = devm_snd_soc_register_component(dev, &hdmi_driver, hcp->daidrv,
3322     dai_count);
3323     if (ret) {
3324     @@ -802,8 +804,6 @@ static int hdmi_codec_probe(struct platform_device *pdev)
3325     __func__, ret);
3326     return ret;
3327     }
3328     -
3329     - dev_set_drvdata(dev, hcp);
3330     return 0;
3331     }
3332    
3333     diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c
3334     index 382847154227..db114f3977e0 100644
3335     --- a/sound/usb/pcm.c
3336     +++ b/sound/usb/pcm.c
3337     @@ -314,6 +314,9 @@ static int search_roland_implicit_fb(struct usb_device *dev, int ifnum,
3338     return 0;
3339     }
3340    
3341     +/* Setup an implicit feedback endpoint from a quirk. Returns 0 if no quirk
3342     + * applies. Returns 1 if a quirk was found.
3343     + */
3344     static int set_sync_ep_implicit_fb_quirk(struct snd_usb_substream *subs,
3345     struct usb_device *dev,
3346     struct usb_interface_descriptor *altsd,
3347     @@ -384,7 +387,7 @@ add_sync_ep:
3348    
3349     subs->data_endpoint->sync_master = subs->sync_endpoint;
3350    
3351     - return 0;
3352     + return 1;
3353     }
3354    
3355     static int set_sync_endpoint(struct snd_usb_substream *subs,
3356     @@ -423,6 +426,10 @@ static int set_sync_endpoint(struct snd_usb_substream *subs,
3357     if (err < 0)
3358     return err;
3359    
3360     + /* endpoint set by quirk */
3361     + if (err > 0)
3362     + return 0;
3363     +
3364     if (altsd->bNumEndpoints < 2)
3365     return 0;
3366    
3367     diff --git a/tools/arch/riscv/include/uapi/asm/bitsperlong.h b/tools/arch/riscv/include/uapi/asm/bitsperlong.h
3368     new file mode 100644
3369     index 000000000000..0b3cb52fd29d
3370     --- /dev/null
3371     +++ b/tools/arch/riscv/include/uapi/asm/bitsperlong.h
3372     @@ -0,0 +1,25 @@
3373     +/*
3374     + * Copyright (C) 2012 ARM Ltd.
3375     + * Copyright (C) 2015 Regents of the University of California
3376     + *
3377     + * This program is free software; you can redistribute it and/or modify
3378     + * it under the terms of the GNU General Public License version 2 as
3379     + * published by the Free Software Foundation.
3380     + *
3381     + * This program is distributed in the hope that it will be useful,
3382     + * but WITHOUT ANY WARRANTY; without even the implied warranty of
3383     + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3384     + * GNU General Public License for more details.
3385     + *
3386     + * You should have received a copy of the GNU General Public License
3387     + * along with this program. If not, see <http://www.gnu.org/licenses/>.
3388     + */
3389     +
3390     +#ifndef _UAPI_ASM_RISCV_BITSPERLONG_H
3391     +#define _UAPI_ASM_RISCV_BITSPERLONG_H
3392     +
3393     +#define __BITS_PER_LONG (__SIZEOF_POINTER__ * 8)
3394     +
3395     +#include <asm-generic/bitsperlong.h>
3396     +
3397     +#endif /* _UAPI_ASM_RISCV_BITSPERLONG_H */
3398     diff --git a/tools/include/uapi/asm/bitsperlong.h b/tools/include/uapi/asm/bitsperlong.h
3399     index 8dd6aefdafa4..57aaeaf8e192 100644
3400     --- a/tools/include/uapi/asm/bitsperlong.h
3401     +++ b/tools/include/uapi/asm/bitsperlong.h
3402     @@ -13,6 +13,10 @@
3403     #include "../../arch/mips/include/uapi/asm/bitsperlong.h"
3404     #elif defined(__ia64__)
3405     #include "../../arch/ia64/include/uapi/asm/bitsperlong.h"
3406     +#elif defined(__riscv)
3407     +#include "../../arch/riscv/include/uapi/asm/bitsperlong.h"
3408     +#elif defined(__alpha__)
3409     +#include "../../arch/alpha/include/uapi/asm/bitsperlong.h"
3410     #else
3411     #include <asm-generic/bitsperlong.h>
3412     #endif
3413     diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
3414     index 1410d66192f7..63a3afc7f32b 100644
3415     --- a/tools/perf/builtin-stat.c
3416     +++ b/tools/perf/builtin-stat.c
3417     @@ -561,7 +561,8 @@ try_again:
3418     break;
3419     }
3420     }
3421     - wait4(child_pid, &status, 0, &stat_config.ru_data);
3422     + if (child_pid != -1)
3423     + wait4(child_pid, &status, 0, &stat_config.ru_data);
3424    
3425     if (workload_exec_errno) {
3426     const char *emsg = str_error_r(workload_exec_errno, msg, sizeof(msg));
3427     diff --git a/tools/perf/tests/shell/lib/probe_vfs_getname.sh b/tools/perf/tests/shell/lib/probe_vfs_getname.sh
3428     index 1c16e56cd93e..7cb99b433888 100644
3429     --- a/tools/perf/tests/shell/lib/probe_vfs_getname.sh
3430     +++ b/tools/perf/tests/shell/lib/probe_vfs_getname.sh
3431     @@ -13,7 +13,8 @@ add_probe_vfs_getname() {
3432     local verbose=$1
3433     if [ $had_vfs_getname -eq 1 ] ; then
3434     line=$(perf probe -L getname_flags 2>&1 | egrep 'result.*=.*filename;' | sed -r 's/[[:space:]]+([[:digit:]]+)[[:space:]]+result->uptr.*/\1/')
3435     - perf probe $verbose "vfs_getname=getname_flags:${line} pathname=result->name:string"
3436     + perf probe -q "vfs_getname=getname_flags:${line} pathname=result->name:string" || \
3437     + perf probe $verbose "vfs_getname=getname_flags:${line} pathname=filename:string"
3438     fi
3439     }
3440    
3441     diff --git a/tools/perf/util/callchain.c b/tools/perf/util/callchain.c
3442     index 32ef7bdca1cf..dc2212e12184 100644
3443     --- a/tools/perf/util/callchain.c
3444     +++ b/tools/perf/util/callchain.c
3445     @@ -766,6 +766,7 @@ static enum match_result match_chain(struct callchain_cursor_node *node,
3446     cnode->cycles_count += node->branch_flags.cycles;
3447     cnode->iter_count += node->nr_loop_iter;
3448     cnode->iter_cycles += node->iter_cycles;
3449     + cnode->from_count++;
3450     }
3451     }
3452    
3453     @@ -1345,10 +1346,10 @@ static int branch_to_str(char *bf, int bfsize,
3454     static int branch_from_str(char *bf, int bfsize,
3455     u64 branch_count,
3456     u64 cycles_count, u64 iter_count,
3457     - u64 iter_cycles)
3458     + u64 iter_cycles, u64 from_count)
3459     {
3460     int printed = 0, i = 0;
3461     - u64 cycles;
3462     + u64 cycles, v = 0;
3463    
3464     cycles = cycles_count / branch_count;
3465     if (cycles) {
3466     @@ -1357,14 +1358,16 @@ static int branch_from_str(char *bf, int bfsize,
3467     bf + printed, bfsize - printed);
3468     }
3469    
3470     - if (iter_count) {
3471     - printed += count_pri64_printf(i++, "iter",
3472     - iter_count,
3473     - bf + printed, bfsize - printed);
3474     + if (iter_count && from_count) {
3475     + v = iter_count / from_count;
3476     + if (v) {
3477     + printed += count_pri64_printf(i++, "iter",
3478     + v, bf + printed, bfsize - printed);
3479    
3480     - printed += count_pri64_printf(i++, "avg_cycles",
3481     - iter_cycles / iter_count,
3482     - bf + printed, bfsize - printed);
3483     + printed += count_pri64_printf(i++, "avg_cycles",
3484     + iter_cycles / iter_count,
3485     + bf + printed, bfsize - printed);
3486     + }
3487     }
3488    
3489     if (i)
3490     @@ -1377,6 +1380,7 @@ static int counts_str_build(char *bf, int bfsize,
3491     u64 branch_count, u64 predicted_count,
3492     u64 abort_count, u64 cycles_count,
3493     u64 iter_count, u64 iter_cycles,
3494     + u64 from_count,
3495     struct branch_type_stat *brtype_stat)
3496     {
3497     int printed;
3498     @@ -1389,7 +1393,8 @@ static int counts_str_build(char *bf, int bfsize,
3499     predicted_count, abort_count, brtype_stat);
3500     } else {
3501     printed = branch_from_str(bf, bfsize, branch_count,
3502     - cycles_count, iter_count, iter_cycles);
3503     + cycles_count, iter_count, iter_cycles,
3504     + from_count);
3505     }
3506    
3507     if (!printed)
3508     @@ -1402,13 +1407,14 @@ static int callchain_counts_printf(FILE *fp, char *bf, int bfsize,
3509     u64 branch_count, u64 predicted_count,
3510     u64 abort_count, u64 cycles_count,
3511     u64 iter_count, u64 iter_cycles,
3512     + u64 from_count,
3513     struct branch_type_stat *brtype_stat)
3514     {
3515     char str[256];
3516    
3517     counts_str_build(str, sizeof(str), branch_count,
3518     predicted_count, abort_count, cycles_count,
3519     - iter_count, iter_cycles, brtype_stat);
3520     + iter_count, iter_cycles, from_count, brtype_stat);
3521    
3522     if (fp)
3523     return fprintf(fp, "%s", str);
3524     @@ -1422,6 +1428,7 @@ int callchain_list_counts__printf_value(struct callchain_list *clist,
3525     u64 branch_count, predicted_count;
3526     u64 abort_count, cycles_count;
3527     u64 iter_count, iter_cycles;
3528     + u64 from_count;
3529    
3530     branch_count = clist->branch_count;
3531     predicted_count = clist->predicted_count;
3532     @@ -1429,11 +1436,12 @@ int callchain_list_counts__printf_value(struct callchain_list *clist,
3533     cycles_count = clist->cycles_count;
3534     iter_count = clist->iter_count;
3535     iter_cycles = clist->iter_cycles;
3536     + from_count = clist->from_count;
3537    
3538     return callchain_counts_printf(fp, bf, bfsize, branch_count,
3539     predicted_count, abort_count,
3540     cycles_count, iter_count, iter_cycles,
3541     - &clist->brtype_stat);
3542     + from_count, &clist->brtype_stat);
3543     }
3544    
3545     static void free_callchain_node(struct callchain_node *node)
3546     diff --git a/tools/perf/util/callchain.h b/tools/perf/util/callchain.h
3547     index 154560b1eb65..99d38ac019b8 100644
3548     --- a/tools/perf/util/callchain.h
3549     +++ b/tools/perf/util/callchain.h
3550     @@ -118,6 +118,7 @@ struct callchain_list {
3551     bool has_children;
3552     };
3553     u64 branch_count;
3554     + u64 from_count;
3555     u64 predicted_count;
3556     u64 abort_count;
3557     u64 cycles_count;
3558     diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c
3559     index 9397e3f2444d..ea228dd0a187 100644
3560     --- a/tools/perf/util/machine.c
3561     +++ b/tools/perf/util/machine.c
3562     @@ -2005,7 +2005,7 @@ static void save_iterations(struct iterations *iter,
3563     {
3564     int i;
3565    
3566     - iter->nr_loop_iter = nr;
3567     + iter->nr_loop_iter++;
3568     iter->cycles = 0;
3569    
3570     for (i = 0; i < nr; i++)