Magellan Linux

Annotation of /trunk/kernel-alx/patches-5.4/0183-5.4.84-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3637 - (hide annotations) (download)
Mon Oct 24 12:40:44 2022 UTC (18 months, 3 weeks ago) by niro
File size: 41130 byte(s)
-add missing
1 niro 3637 diff --git a/Makefile b/Makefile
2     index eee1aa092ede8..fe0ab15cfd835 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,7 +1,7 @@
6     # SPDX-License-Identifier: GPL-2.0
7     VERSION = 5
8     PATCHLEVEL = 4
9     -SUBLEVEL = 83
10     +SUBLEVEL = 84
11     EXTRAVERSION =
12     NAME = Kleptomaniac Octopus
13    
14     @@ -802,8 +802,11 @@ DEBUG_CFLAGS += -gsplit-dwarf
15     else
16     DEBUG_CFLAGS += -g
17     endif
18     +ifneq ($(LLVM_IAS),1)
19     KBUILD_AFLAGS += -Wa,-gdwarf-2
20     endif
21     +endif
22     +
23     ifdef CONFIG_DEBUG_INFO_DWARF4
24     DEBUG_CFLAGS += -gdwarf-4
25     endif
26     diff --git a/arch/arc/kernel/stacktrace.c b/arch/arc/kernel/stacktrace.c
27     index fc65d2921e3bd..fc3054c34db19 100644
28     --- a/arch/arc/kernel/stacktrace.c
29     +++ b/arch/arc/kernel/stacktrace.c
30     @@ -38,15 +38,15 @@
31    
32     #ifdef CONFIG_ARC_DW2_UNWIND
33    
34     -static void seed_unwind_frame_info(struct task_struct *tsk,
35     - struct pt_regs *regs,
36     - struct unwind_frame_info *frame_info)
37     +static int
38     +seed_unwind_frame_info(struct task_struct *tsk, struct pt_regs *regs,
39     + struct unwind_frame_info *frame_info)
40     {
41     /*
42     * synchronous unwinding (e.g. dump_stack)
43     * - uses current values of SP and friends
44     */
45     - if (tsk == NULL && regs == NULL) {
46     + if (regs == NULL && (tsk == NULL || tsk == current)) {
47     unsigned long fp, sp, blink, ret;
48     frame_info->task = current;
49    
50     @@ -65,11 +65,15 @@ static void seed_unwind_frame_info(struct task_struct *tsk,
51     frame_info->call_frame = 0;
52     } else if (regs == NULL) {
53     /*
54     - * Asynchronous unwinding of sleeping task
55     - * - Gets SP etc from task's pt_regs (saved bottom of kernel
56     - * mode stack of task)
57     + * Asynchronous unwinding of a likely sleeping task
58     + * - first ensure it is actually sleeping
59     + * - if so, it will be in __switch_to, kernel mode SP of task
60     + * is safe-kept and BLINK at a well known location in there
61     */
62    
63     + if (tsk->state == TASK_RUNNING)
64     + return -1;
65     +
66     frame_info->task = tsk;
67    
68     frame_info->regs.r27 = TSK_K_FP(tsk);
69     @@ -103,6 +107,8 @@ static void seed_unwind_frame_info(struct task_struct *tsk,
70     frame_info->regs.r63 = regs->ret;
71     frame_info->call_frame = 0;
72     }
73     +
74     + return 0;
75     }
76    
77     #endif
78     @@ -116,7 +122,8 @@ arc_unwind_core(struct task_struct *tsk, struct pt_regs *regs,
79     unsigned int address;
80     struct unwind_frame_info frame_info;
81    
82     - seed_unwind_frame_info(tsk, regs, &frame_info);
83     + if (seed_unwind_frame_info(tsk, regs, &frame_info))
84     + return 0;
85    
86     while (1) {
87     address = UNW_PC(&frame_info);
88     diff --git a/arch/arm64/boot/dts/broadcom/stingray/stingray-usb.dtsi b/arch/arm64/boot/dts/broadcom/stingray/stingray-usb.dtsi
89     index 55259f973b5a9..aef8f2b00778d 100644
90     --- a/arch/arm64/boot/dts/broadcom/stingray/stingray-usb.dtsi
91     +++ b/arch/arm64/boot/dts/broadcom/stingray/stingray-usb.dtsi
92     @@ -5,20 +5,20 @@
93     usb {
94     compatible = "simple-bus";
95     dma-ranges;
96     - #address-cells = <1>;
97     - #size-cells = <1>;
98     - ranges = <0x0 0x0 0x68500000 0x00400000>;
99     + #address-cells = <2>;
100     + #size-cells = <2>;
101     + ranges = <0x0 0x0 0x0 0x68500000 0x0 0x00400000>;
102    
103     usbphy0: usb-phy@0 {
104     compatible = "brcm,sr-usb-combo-phy";
105     - reg = <0x00000000 0x100>;
106     + reg = <0x0 0x00000000 0x0 0x100>;
107     #phy-cells = <1>;
108     status = "disabled";
109     };
110    
111     xhci0: usb@1000 {
112     compatible = "generic-xhci";
113     - reg = <0x00001000 0x1000>;
114     + reg = <0x0 0x00001000 0x0 0x1000>;
115     interrupts = <GIC_SPI 256 IRQ_TYPE_LEVEL_HIGH>;
116     phys = <&usbphy0 1>, <&usbphy0 0>;
117     phy-names = "phy0", "phy1";
118     @@ -28,7 +28,7 @@
119    
120     bdc0: usb@2000 {
121     compatible = "brcm,bdc-v0.16";
122     - reg = <0x00002000 0x1000>;
123     + reg = <0x0 0x00002000 0x0 0x1000>;
124     interrupts = <GIC_SPI 259 IRQ_TYPE_LEVEL_HIGH>;
125     phys = <&usbphy0 0>, <&usbphy0 1>;
126     phy-names = "phy0", "phy1";
127     @@ -38,21 +38,21 @@
128    
129     usbphy1: usb-phy@10000 {
130     compatible = "brcm,sr-usb-combo-phy";
131     - reg = <0x00010000 0x100>;
132     + reg = <0x0 0x00010000 0x0 0x100>;
133     #phy-cells = <1>;
134     status = "disabled";
135     };
136    
137     usbphy2: usb-phy@20000 {
138     compatible = "brcm,sr-usb-hs-phy";
139     - reg = <0x00020000 0x100>;
140     + reg = <0x0 0x00020000 0x0 0x100>;
141     #phy-cells = <0>;
142     status = "disabled";
143     };
144    
145     xhci1: usb@11000 {
146     compatible = "generic-xhci";
147     - reg = <0x00011000 0x1000>;
148     + reg = <0x0 0x00011000 0x0 0x1000>;
149     interrupts = <GIC_SPI 263 IRQ_TYPE_LEVEL_HIGH>;
150     phys = <&usbphy1 1>, <&usbphy2>, <&usbphy1 0>;
151     phy-names = "phy0", "phy1", "phy2";
152     @@ -62,7 +62,7 @@
153    
154     bdc1: usb@21000 {
155     compatible = "brcm,bdc-v0.16";
156     - reg = <0x00021000 0x1000>;
157     + reg = <0x0 0x00021000 0x0 0x1000>;
158     interrupts = <GIC_SPI 266 IRQ_TYPE_LEVEL_HIGH>;
159     phys = <&usbphy2>;
160     phy-names = "phy0";
161     diff --git a/arch/arm64/boot/dts/nvidia/tegra186-p2771-0000.dts b/arch/arm64/boot/dts/nvidia/tegra186-p2771-0000.dts
162     index bdace01561bab..9df4782c90f35 100644
163     --- a/arch/arm64/boot/dts/nvidia/tegra186-p2771-0000.dts
164     +++ b/arch/arm64/boot/dts/nvidia/tegra186-p2771-0000.dts
165     @@ -10,18 +10,6 @@
166     model = "NVIDIA Jetson TX2 Developer Kit";
167     compatible = "nvidia,p2771-0000", "nvidia,tegra186";
168    
169     - aconnect {
170     - status = "okay";
171     -
172     - dma-controller@2930000 {
173     - status = "okay";
174     - };
175     -
176     - interrupt-controller@2a40000 {
177     - status = "okay";
178     - };
179     - };
180     -
181     i2c@3160000 {
182     power-monitor@42 {
183     compatible = "ti,ina3221";
184     diff --git a/arch/arm64/boot/dts/rockchip/rk3399.dtsi b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
185     index c5d8d1c582913..bb7d0aac6b9db 100644
186     --- a/arch/arm64/boot/dts/rockchip/rk3399.dtsi
187     +++ b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
188     @@ -29,6 +29,9 @@
189     i2c6 = &i2c6;
190     i2c7 = &i2c7;
191     i2c8 = &i2c8;
192     + mmc0 = &sdio0;
193     + mmc1 = &sdmmc;
194     + mmc2 = &sdhci;
195     serial0 = &uart0;
196     serial1 = &uart1;
197     serial2 = &uart2;
198     diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
199     index 37ac731a556b8..9f73fb6b1cc91 100644
200     --- a/arch/powerpc/Makefile
201     +++ b/arch/powerpc/Makefile
202     @@ -250,7 +250,6 @@ KBUILD_CFLAGS += $(call cc-option,-mno-string)
203    
204     cpu-as-$(CONFIG_4xx) += -Wa,-m405
205     cpu-as-$(CONFIG_ALTIVEC) += $(call as-option,-Wa$(comma)-maltivec)
206     -cpu-as-$(CONFIG_E200) += -Wa,-me200
207     cpu-as-$(CONFIG_E500) += -Wa,-me500
208    
209     # When using '-many -mpower4' gas will first try and find a matching power4
210     diff --git a/arch/x86/include/asm/pgtable_types.h b/arch/x86/include/asm/pgtable_types.h
211     index 8267dd426b152..ff77f561e11f0 100644
212     --- a/arch/x86/include/asm/pgtable_types.h
213     +++ b/arch/x86/include/asm/pgtable_types.h
214     @@ -147,6 +147,7 @@ enum page_cache_mode {
215     #endif
216    
217     #define _PAGE_CACHE_MASK (_PAGE_PAT | _PAGE_PCD | _PAGE_PWT)
218     +#define _PAGE_LARGE_CACHE_MASK (_PAGE_PWT | _PAGE_PCD | _PAGE_PAT_LARGE)
219     #define _PAGE_NOCACHE (cachemode2protval(_PAGE_CACHE_MODE_UC))
220     #define _PAGE_CACHE_WP (cachemode2protval(_PAGE_CACHE_MODE_WP))
221    
222     diff --git a/arch/x86/include/asm/sync_core.h b/arch/x86/include/asm/sync_core.h
223     index c67caafd33817..43b5e02a7b4b9 100644
224     --- a/arch/x86/include/asm/sync_core.h
225     +++ b/arch/x86/include/asm/sync_core.h
226     @@ -16,12 +16,13 @@ static inline void sync_core_before_usermode(void)
227     /* With PTI, we unconditionally serialize before running user code. */
228     if (static_cpu_has(X86_FEATURE_PTI))
229     return;
230     +
231     /*
232     - * Return from interrupt and NMI is done through iret, which is core
233     - * serializing.
234     + * Even if we're in an interrupt, we might reschedule before returning,
235     + * in which case we could switch to a different thread in the same mm
236     + * and return using SYSRET or SYSEXIT. Instead of trying to keep
237     + * track of our need to sync the core, just sync right away.
238     */
239     - if (in_irq() || in_nmi())
240     - return;
241     sync_core();
242     }
243    
244     diff --git a/arch/x86/kernel/apic/vector.c b/arch/x86/kernel/apic/vector.c
245     index c8203694d9ce4..bf6662d37a334 100644
246     --- a/arch/x86/kernel/apic/vector.c
247     +++ b/arch/x86/kernel/apic/vector.c
248     @@ -272,20 +272,24 @@ static int assign_irq_vector_any_locked(struct irq_data *irqd)
249     const struct cpumask *affmsk = irq_data_get_affinity_mask(irqd);
250     int node = irq_data_get_node(irqd);
251    
252     - if (node == NUMA_NO_NODE)
253     - goto all;
254     - /* Try the intersection of @affmsk and node mask */
255     - cpumask_and(vector_searchmask, cpumask_of_node(node), affmsk);
256     - if (!assign_vector_locked(irqd, vector_searchmask))
257     - return 0;
258     - /* Try the node mask */
259     - if (!assign_vector_locked(irqd, cpumask_of_node(node)))
260     - return 0;
261     -all:
262     + if (node != NUMA_NO_NODE) {
263     + /* Try the intersection of @affmsk and node mask */
264     + cpumask_and(vector_searchmask, cpumask_of_node(node), affmsk);
265     + if (!assign_vector_locked(irqd, vector_searchmask))
266     + return 0;
267     + }
268     +
269     /* Try the full affinity mask */
270     cpumask_and(vector_searchmask, affmsk, cpu_online_mask);
271     if (!assign_vector_locked(irqd, vector_searchmask))
272     return 0;
273     +
274     + if (node != NUMA_NO_NODE) {
275     + /* Try the node mask */
276     + if (!assign_vector_locked(irqd, cpumask_of_node(node)))
277     + return 0;
278     + }
279     +
280     /* Try the full online mask */
281     return assign_vector_locked(irqd, cpu_online_mask);
282     }
283     diff --git a/arch/x86/lib/memcpy_64.S b/arch/x86/lib/memcpy_64.S
284     index 92748660ba512..dc2fb886db2bc 100644
285     --- a/arch/x86/lib/memcpy_64.S
286     +++ b/arch/x86/lib/memcpy_64.S
287     @@ -15,8 +15,6 @@
288     * to a jmp to memcpy_erms which does the REP; MOVSB mem copy.
289     */
290    
291     -.weak memcpy
292     -
293     /*
294     * memcpy - Copy a memory block.
295     *
296     @@ -29,7 +27,7 @@
297     * rax original destination
298     */
299     ENTRY(__memcpy)
300     -ENTRY(memcpy)
301     +SYM_FUNC_START_WEAK(memcpy)
302     ALTERNATIVE_2 "jmp memcpy_orig", "", X86_FEATURE_REP_GOOD, \
303     "jmp memcpy_erms", X86_FEATURE_ERMS
304    
305     diff --git a/arch/x86/lib/memmove_64.S b/arch/x86/lib/memmove_64.S
306     index bbec69d8223bf..b292445467b6c 100644
307     --- a/arch/x86/lib/memmove_64.S
308     +++ b/arch/x86/lib/memmove_64.S
309     @@ -24,9 +24,7 @@
310     * Output:
311     * rax: dest
312     */
313     -.weak memmove
314     -
315     -ENTRY(memmove)
316     +SYM_FUNC_START_WEAK(memmove)
317     ENTRY(__memmove)
318    
319     /* Handle more 32 bytes in loop */
320     diff --git a/arch/x86/lib/memset_64.S b/arch/x86/lib/memset_64.S
321     index 9bc861c71e754..e3376c7d4c97e 100644
322     --- a/arch/x86/lib/memset_64.S
323     +++ b/arch/x86/lib/memset_64.S
324     @@ -6,8 +6,6 @@
325     #include <asm/alternative-asm.h>
326     #include <asm/export.h>
327    
328     -.weak memset
329     -
330     /*
331     * ISO C memset - set a memory block to a byte value. This function uses fast
332     * string to get better performance than the original function. The code is
333     @@ -19,7 +17,7 @@
334     *
335     * rax original destination
336     */
337     -ENTRY(memset)
338     +SYM_FUNC_START_WEAK(memset)
339     ENTRY(__memset)
340     /*
341     * Some CPUs support enhanced REP MOVSB/STOSB feature. It is recommended
342     diff --git a/arch/x86/mm/mem_encrypt_identity.c b/arch/x86/mm/mem_encrypt_identity.c
343     index e2b0e2ac07bb6..84cda5dc03870 100644
344     --- a/arch/x86/mm/mem_encrypt_identity.c
345     +++ b/arch/x86/mm/mem_encrypt_identity.c
346     @@ -45,8 +45,8 @@
347     #define PMD_FLAGS_LARGE (__PAGE_KERNEL_LARGE_EXEC & ~_PAGE_GLOBAL)
348    
349     #define PMD_FLAGS_DEC PMD_FLAGS_LARGE
350     -#define PMD_FLAGS_DEC_WP ((PMD_FLAGS_DEC & ~_PAGE_CACHE_MASK) | \
351     - (_PAGE_PAT | _PAGE_PWT))
352     +#define PMD_FLAGS_DEC_WP ((PMD_FLAGS_DEC & ~_PAGE_LARGE_CACHE_MASK) | \
353     + (_PAGE_PAT_LARGE | _PAGE_PWT))
354    
355     #define PMD_FLAGS_ENC (PMD_FLAGS_LARGE | _PAGE_ENC)
356    
357     diff --git a/arch/x86/mm/tlb.c b/arch/x86/mm/tlb.c
358     index e6a9edc5baaf0..851359b7edc57 100644
359     --- a/arch/x86/mm/tlb.c
360     +++ b/arch/x86/mm/tlb.c
361     @@ -327,8 +327,14 @@ void switch_mm_irqs_off(struct mm_struct *prev, struct mm_struct *next,
362     /*
363     * The membarrier system call requires a full memory barrier and
364     * core serialization before returning to user-space, after
365     - * storing to rq->curr. Writing to CR3 provides that full
366     - * memory barrier and core serializing instruction.
367     + * storing to rq->curr, when changing mm. This is because
368     + * membarrier() sends IPIs to all CPUs that are in the target mm
369     + * to make them issue memory barriers. However, if another CPU
370     + * switches to/from the target mm concurrently with
371     + * membarrier(), it can cause that CPU not to receive an IPI
372     + * when it really should issue a memory barrier. Writing to CR3
373     + * provides that full memory barrier and core serializing
374     + * instruction.
375     */
376     if (real_prev == next) {
377     VM_WARN_ON(this_cpu_read(cpu_tlbstate.ctxs[prev_asid].ctx_id) !=
378     diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
379     index 2efc317c90dfa..c2fccf97f7a42 100644
380     --- a/drivers/gpu/drm/i915/display/intel_dp.c
381     +++ b/drivers/gpu/drm/i915/display/intel_dp.c
382     @@ -567,7 +567,7 @@ static u8 intel_dp_dsc_get_slice_count(struct intel_dp *intel_dp,
383     return 0;
384     }
385     /* Also take into account max slice width */
386     - min_slice_count = min_t(u8, min_slice_count,
387     + min_slice_count = max_t(u8, min_slice_count,
388     DIV_ROUND_UP(mode_hdisplay,
389     max_slice_width));
390    
391     diff --git a/drivers/input/misc/cm109.c b/drivers/input/misc/cm109.c
392     index c09b9628ad34a..c872ba579b039 100644
393     --- a/drivers/input/misc/cm109.c
394     +++ b/drivers/input/misc/cm109.c
395     @@ -568,12 +568,15 @@ static int cm109_input_open(struct input_dev *idev)
396     dev->ctl_data->byte[HID_OR2] = dev->keybit;
397     dev->ctl_data->byte[HID_OR3] = 0x00;
398    
399     + dev->ctl_urb_pending = 1;
400     error = usb_submit_urb(dev->urb_ctl, GFP_KERNEL);
401     - if (error)
402     + if (error) {
403     + dev->ctl_urb_pending = 0;
404     dev_err(&dev->intf->dev, "%s: usb_submit_urb (urb_ctl) failed %d\n",
405     __func__, error);
406     - else
407     + } else {
408     dev->open = 1;
409     + }
410    
411     mutex_unlock(&dev->pm_mutex);
412    
413     diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h
414     index 837911a15e443..eca931da76c3a 100644
415     --- a/drivers/input/serio/i8042-x86ia64io.h
416     +++ b/drivers/input/serio/i8042-x86ia64io.h
417     @@ -611,6 +611,48 @@ static const struct dmi_system_id __initconst i8042_dmi_reset_table[] = {
418     DMI_MATCH(DMI_PRODUCT_NAME, "AOA150"),
419     },
420     },
421     + {
422     + .matches = {
423     + DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
424     + DMI_MATCH(DMI_PRODUCT_NAME, "Aspire A114-31"),
425     + },
426     + },
427     + {
428     + .matches = {
429     + DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
430     + DMI_MATCH(DMI_PRODUCT_NAME, "Aspire A314-31"),
431     + },
432     + },
433     + {
434     + .matches = {
435     + DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
436     + DMI_MATCH(DMI_PRODUCT_NAME, "Aspire A315-31"),
437     + },
438     + },
439     + {
440     + .matches = {
441     + DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
442     + DMI_MATCH(DMI_PRODUCT_NAME, "Aspire ES1-132"),
443     + },
444     + },
445     + {
446     + .matches = {
447     + DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
448     + DMI_MATCH(DMI_PRODUCT_NAME, "Aspire ES1-332"),
449     + },
450     + },
451     + {
452     + .matches = {
453     + DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
454     + DMI_MATCH(DMI_PRODUCT_NAME, "Aspire ES1-432"),
455     + },
456     + },
457     + {
458     + .matches = {
459     + DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
460     + DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate Spin B118-RN"),
461     + },
462     + },
463     {
464     /* Advent 4211 */
465     .matches = {
466     diff --git a/drivers/interconnect/qcom/qcs404.c b/drivers/interconnect/qcom/qcs404.c
467     index 8e0735a870400..3a3ce6ea65ff2 100644
468     --- a/drivers/interconnect/qcom/qcs404.c
469     +++ b/drivers/interconnect/qcom/qcs404.c
470     @@ -157,8 +157,8 @@ struct qcom_icc_desc {
471     }
472    
473     DEFINE_QNODE(mas_apps_proc, QCS404_MASTER_AMPSS_M0, 8, 0, -1, QCS404_SLAVE_EBI_CH0, QCS404_BIMC_SNOC_SLV);
474     -DEFINE_QNODE(mas_oxili, QCS404_MASTER_GRAPHICS_3D, 8, 6, -1, QCS404_SLAVE_EBI_CH0, QCS404_BIMC_SNOC_SLV);
475     -DEFINE_QNODE(mas_mdp, QCS404_MASTER_MDP_PORT0, 8, 8, -1, QCS404_SLAVE_EBI_CH0, QCS404_BIMC_SNOC_SLV);
476     +DEFINE_QNODE(mas_oxili, QCS404_MASTER_GRAPHICS_3D, 8, -1, -1, QCS404_SLAVE_EBI_CH0, QCS404_BIMC_SNOC_SLV);
477     +DEFINE_QNODE(mas_mdp, QCS404_MASTER_MDP_PORT0, 8, -1, -1, QCS404_SLAVE_EBI_CH0, QCS404_BIMC_SNOC_SLV);
478     DEFINE_QNODE(mas_snoc_bimc_1, QCS404_SNOC_BIMC_1_MAS, 8, 76, -1, QCS404_SLAVE_EBI_CH0);
479     DEFINE_QNODE(mas_tcu_0, QCS404_MASTER_TCU_0, 8, -1, -1, QCS404_SLAVE_EBI_CH0, QCS404_BIMC_SNOC_SLV);
480     DEFINE_QNODE(mas_spdm, QCS404_MASTER_SPDM, 4, -1, -1, QCS404_PNOC_INT_3);
481     diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c
482     index 7966b19ceba79..f298313b87ac7 100644
483     --- a/drivers/irqchip/irq-gic-v3-its.c
484     +++ b/drivers/irqchip/irq-gic-v3-its.c
485     @@ -40,7 +40,6 @@
486     #define ITS_FLAGS_CMDQ_NEEDS_FLUSHING (1ULL << 0)
487     #define ITS_FLAGS_WORKAROUND_CAVIUM_22375 (1ULL << 1)
488     #define ITS_FLAGS_WORKAROUND_CAVIUM_23144 (1ULL << 2)
489     -#define ITS_FLAGS_SAVE_SUSPEND_STATE (1ULL << 3)
490    
491     #define RDIST_FLAGS_PROPBASE_NEEDS_FLUSHING (1 << 0)
492     #define RDIST_FLAGS_RD_TABLES_PREALLOCATED (1 << 1)
493     @@ -3367,9 +3366,6 @@ static int its_save_disable(void)
494     list_for_each_entry(its, &its_nodes, entry) {
495     void __iomem *base;
496    
497     - if (!(its->flags & ITS_FLAGS_SAVE_SUSPEND_STATE))
498     - continue;
499     -
500     base = its->base;
501     its->ctlr_save = readl_relaxed(base + GITS_CTLR);
502     err = its_force_quiescent(base);
503     @@ -3388,9 +3384,6 @@ err:
504     list_for_each_entry_continue_reverse(its, &its_nodes, entry) {
505     void __iomem *base;
506    
507     - if (!(its->flags & ITS_FLAGS_SAVE_SUSPEND_STATE))
508     - continue;
509     -
510     base = its->base;
511     writel_relaxed(its->ctlr_save, base + GITS_CTLR);
512     }
513     @@ -3410,9 +3403,6 @@ static void its_restore_enable(void)
514     void __iomem *base;
515     int i;
516    
517     - if (!(its->flags & ITS_FLAGS_SAVE_SUSPEND_STATE))
518     - continue;
519     -
520     base = its->base;
521    
522     /*
523     @@ -3420,7 +3410,10 @@ static void its_restore_enable(void)
524     * don't restore it since writing to CBASER or BASER<n>
525     * registers is undefined according to the GIC v3 ITS
526     * Specification.
527     + *
528     + * Firmware resuming with the ITS enabled is terminally broken.
529     */
530     + WARN_ON(readl_relaxed(base + GITS_CTLR) & GITS_CTLR_ENABLE);
531     ret = its_force_quiescent(base);
532     if (ret) {
533     pr_err("ITS@%pa: failed to quiesce on resume: %d\n",
534     @@ -3687,9 +3680,6 @@ static int __init its_probe_one(struct resource *res,
535     ctlr |= GITS_CTLR_ImDe;
536     writel_relaxed(ctlr, its->base + GITS_CTLR);
537    
538     - if (GITS_TYPER_HCC(typer))
539     - its->flags |= ITS_FLAGS_SAVE_SUSPEND_STATE;
540     -
541     err = its_init_domain(handle, its);
542     if (err)
543     goto out_free_tables;
544     diff --git a/drivers/mmc/core/block.c b/drivers/mmc/core/block.c
545     index 7f480c6b19810..63e838ec8af84 100644
546     --- a/drivers/mmc/core/block.c
547     +++ b/drivers/mmc/core/block.c
548     @@ -630,7 +630,7 @@ static int __mmc_blk_ioctl_cmd(struct mmc_card *card, struct mmc_blk_data *md,
549    
550     memcpy(&(idata->ic.response), cmd.resp, sizeof(cmd.resp));
551    
552     - if (idata->rpmb || (cmd.flags & MMC_RSP_R1B)) {
553     + if (idata->rpmb || (cmd.flags & MMC_RSP_R1B) == MMC_RSP_R1B) {
554     /*
555     * Ensure RPMB/R1B command has completed by polling CMD13
556     * "Send Status".
557     diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c
558     index f9a2a9ecbac9e..c84114b44ee07 100644
559     --- a/drivers/net/can/m_can/m_can.c
560     +++ b/drivers/net/can/m_can/m_can.c
561     @@ -1337,6 +1337,8 @@ static int m_can_dev_setup(struct m_can_classdev *m_can_dev)
562     &m_can_data_bittiming_const_31X;
563     break;
564     case 32:
565     + case 33:
566     + /* Support both MCAN version v3.2.x and v3.3.0 */
567     m_can_dev->can.bittiming_const = m_can_dev->bit_timing ?
568     m_can_dev->bit_timing : &m_can_bittiming_const_31X;
569    
570     diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
571     index 7056419461e7b..47b8ce7822c09 100644
572     --- a/drivers/net/ethernet/ibm/ibmvnic.c
573     +++ b/drivers/net/ethernet/ibm/ibmvnic.c
574     @@ -2266,6 +2266,12 @@ static void ibmvnic_tx_timeout(struct net_device *dev)
575     {
576     struct ibmvnic_adapter *adapter = netdev_priv(dev);
577    
578     + if (test_bit(0, &adapter->resetting)) {
579     + netdev_err(adapter->netdev,
580     + "Adapter is resetting, skip timeout reset\n");
581     + return;
582     + }
583     +
584     ibmvnic_reset(adapter, VNIC_RESET_TIMEOUT);
585     }
586    
587     diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-csr.h b/drivers/net/wireless/intel/iwlwifi/iwl-csr.h
588     index 695bbaa86273d..12ef3a0420515 100644
589     --- a/drivers/net/wireless/intel/iwlwifi/iwl-csr.h
590     +++ b/drivers/net/wireless/intel/iwlwifi/iwl-csr.h
591     @@ -147,6 +147,16 @@
592     #define CSR_MAC_SHADOW_REG_CTL2 (CSR_BASE + 0x0AC)
593     #define CSR_MAC_SHADOW_REG_CTL2_RX_WAKE 0xFFFF
594    
595     +/* LTR control (since IWL_DEVICE_FAMILY_22000) */
596     +#define CSR_LTR_LONG_VAL_AD (CSR_BASE + 0x0D4)
597     +#define CSR_LTR_LONG_VAL_AD_NO_SNOOP_REQ 0x80000000
598     +#define CSR_LTR_LONG_VAL_AD_NO_SNOOP_SCALE 0x1c000000
599     +#define CSR_LTR_LONG_VAL_AD_NO_SNOOP_VAL 0x03ff0000
600     +#define CSR_LTR_LONG_VAL_AD_SNOOP_REQ 0x00008000
601     +#define CSR_LTR_LONG_VAL_AD_SNOOP_SCALE 0x00001c00
602     +#define CSR_LTR_LONG_VAL_AD_SNOOP_VAL 0x000003ff
603     +#define CSR_LTR_LONG_VAL_AD_SCALE_USEC 2
604     +
605     /* GIO Chicken Bits (PCI Express bus link power management) */
606     #define CSR_GIO_CHICKEN_BITS (CSR_BASE+0x100)
607    
608     diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
609     index 73b8bf0fbf16f..daae86cd61140 100644
610     --- a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
611     +++ b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
612     @@ -3022,7 +3022,7 @@ static int iwl_mvm_mac_sta_state(struct ieee80211_hw *hw,
613    
614     /* this would be a mac80211 bug ... but don't crash */
615     if (WARN_ON_ONCE(!mvmvif->phy_ctxt))
616     - return -EINVAL;
617     + return test_bit(IWL_MVM_STATUS_HW_RESTART_REQUESTED, &mvm->status) ? 0 : -EINVAL;
618    
619     /*
620     * If we are in a STA removal flow and in DQA mode:
621     diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/ctxt-info-gen3.c b/drivers/net/wireless/intel/iwlwifi/pcie/ctxt-info-gen3.c
622     index 74980382e64c8..7a5b024a6d384 100644
623     --- a/drivers/net/wireless/intel/iwlwifi/pcie/ctxt-info-gen3.c
624     +++ b/drivers/net/wireless/intel/iwlwifi/pcie/ctxt-info-gen3.c
625     @@ -180,6 +180,26 @@ int iwl_pcie_ctxt_info_gen3_init(struct iwl_trans *trans,
626    
627     iwl_set_bit(trans, CSR_CTXT_INFO_BOOT_CTRL,
628     CSR_AUTO_FUNC_BOOT_ENA);
629     +
630     + if (trans->trans_cfg->device_family == IWL_DEVICE_FAMILY_AX210) {
631     + /*
632     + * The firmware initializes this again later (to a smaller
633     + * value), but for the boot process initialize the LTR to
634     + * ~250 usec.
635     + */
636     + u32 val = CSR_LTR_LONG_VAL_AD_NO_SNOOP_REQ |
637     + u32_encode_bits(CSR_LTR_LONG_VAL_AD_SCALE_USEC,
638     + CSR_LTR_LONG_VAL_AD_NO_SNOOP_SCALE) |
639     + u32_encode_bits(250,
640     + CSR_LTR_LONG_VAL_AD_NO_SNOOP_VAL) |
641     + CSR_LTR_LONG_VAL_AD_SNOOP_REQ |
642     + u32_encode_bits(CSR_LTR_LONG_VAL_AD_SCALE_USEC,
643     + CSR_LTR_LONG_VAL_AD_SNOOP_SCALE) |
644     + u32_encode_bits(250, CSR_LTR_LONG_VAL_AD_SNOOP_VAL);
645     +
646     + iwl_write32(trans, CSR_LTR_LONG_VAL_AD, val);
647     + }
648     +
649     if (trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_AX210)
650     iwl_write_umac_prph(trans, UREG_CPU_INIT_RUN, 1);
651     else
652     diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
653     index c76d26708e659..ef5a8ecabc60a 100644
654     --- a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
655     +++ b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
656     @@ -2178,18 +2178,36 @@ static int iwl_trans_pcie_read_mem(struct iwl_trans *trans, u32 addr,
657     void *buf, int dwords)
658     {
659     unsigned long flags;
660     - int offs, ret = 0;
661     + int offs = 0;
662     u32 *vals = buf;
663    
664     - if (iwl_trans_grab_nic_access(trans, &flags)) {
665     - iwl_write32(trans, HBUS_TARG_MEM_RADDR, addr);
666     - for (offs = 0; offs < dwords; offs++)
667     - vals[offs] = iwl_read32(trans, HBUS_TARG_MEM_RDAT);
668     - iwl_trans_release_nic_access(trans, &flags);
669     - } else {
670     - ret = -EBUSY;
671     + while (offs < dwords) {
672     + /* limit the time we spin here under lock to 1/2s */
673     + ktime_t timeout = ktime_add_us(ktime_get(), 500 * USEC_PER_MSEC);
674     +
675     + if (iwl_trans_grab_nic_access(trans, &flags)) {
676     + iwl_write32(trans, HBUS_TARG_MEM_RADDR,
677     + addr + 4 * offs);
678     +
679     + while (offs < dwords) {
680     + vals[offs] = iwl_read32(trans,
681     + HBUS_TARG_MEM_RDAT);
682     + offs++;
683     +
684     + /* calling ktime_get is expensive so
685     + * do it once in 128 reads
686     + */
687     + if (offs % 128 == 0 && ktime_after(ktime_get(),
688     + timeout))
689     + break;
690     + }
691     + iwl_trans_release_nic_access(trans, &flags);
692     + } else {
693     + return -EBUSY;
694     + }
695     }
696     - return ret;
697     +
698     + return 0;
699     }
700    
701     static int iwl_trans_pcie_write_mem(struct iwl_trans *trans, u32 addr,
702     diff --git a/drivers/pinctrl/pinctrl-amd.c b/drivers/pinctrl/pinctrl-amd.c
703     index 12b2707296b64..a85c679b6276c 100644
704     --- a/drivers/pinctrl/pinctrl-amd.c
705     +++ b/drivers/pinctrl/pinctrl-amd.c
706     @@ -435,7 +435,6 @@ static int amd_gpio_irq_set_type(struct irq_data *d, unsigned int type)
707     pin_reg &= ~BIT(LEVEL_TRIG_OFF);
708     pin_reg &= ~(ACTIVE_LEVEL_MASK << ACTIVE_LEVEL_OFF);
709     pin_reg |= ACTIVE_HIGH << ACTIVE_LEVEL_OFF;
710     - pin_reg |= DB_TYPE_REMOVE_GLITCH << DB_CNTRL_OFF;
711     irq_set_handler_locked(d, handle_edge_irq);
712     break;
713    
714     @@ -443,7 +442,6 @@ static int amd_gpio_irq_set_type(struct irq_data *d, unsigned int type)
715     pin_reg &= ~BIT(LEVEL_TRIG_OFF);
716     pin_reg &= ~(ACTIVE_LEVEL_MASK << ACTIVE_LEVEL_OFF);
717     pin_reg |= ACTIVE_LOW << ACTIVE_LEVEL_OFF;
718     - pin_reg |= DB_TYPE_REMOVE_GLITCH << DB_CNTRL_OFF;
719     irq_set_handler_locked(d, handle_edge_irq);
720     break;
721    
722     @@ -451,7 +449,6 @@ static int amd_gpio_irq_set_type(struct irq_data *d, unsigned int type)
723     pin_reg &= ~BIT(LEVEL_TRIG_OFF);
724     pin_reg &= ~(ACTIVE_LEVEL_MASK << ACTIVE_LEVEL_OFF);
725     pin_reg |= BOTH_EADGE << ACTIVE_LEVEL_OFF;
726     - pin_reg |= DB_TYPE_REMOVE_GLITCH << DB_CNTRL_OFF;
727     irq_set_handler_locked(d, handle_edge_irq);
728     break;
729    
730     @@ -459,8 +456,6 @@ static int amd_gpio_irq_set_type(struct irq_data *d, unsigned int type)
731     pin_reg |= LEVEL_TRIGGER << LEVEL_TRIG_OFF;
732     pin_reg &= ~(ACTIVE_LEVEL_MASK << ACTIVE_LEVEL_OFF);
733     pin_reg |= ACTIVE_HIGH << ACTIVE_LEVEL_OFF;
734     - pin_reg &= ~(DB_CNTRl_MASK << DB_CNTRL_OFF);
735     - pin_reg |= DB_TYPE_PRESERVE_LOW_GLITCH << DB_CNTRL_OFF;
736     irq_set_handler_locked(d, handle_level_irq);
737     break;
738    
739     @@ -468,8 +463,6 @@ static int amd_gpio_irq_set_type(struct irq_data *d, unsigned int type)
740     pin_reg |= LEVEL_TRIGGER << LEVEL_TRIG_OFF;
741     pin_reg &= ~(ACTIVE_LEVEL_MASK << ACTIVE_LEVEL_OFF);
742     pin_reg |= ACTIVE_LOW << ACTIVE_LEVEL_OFF;
743     - pin_reg &= ~(DB_CNTRl_MASK << DB_CNTRL_OFF);
744     - pin_reg |= DB_TYPE_PRESERVE_HIGH_GLITCH << DB_CNTRL_OFF;
745     irq_set_handler_locked(d, handle_level_irq);
746     break;
747    
748     diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wmi.c
749     index 60c18f21588dd..7fa27e7536917 100644
750     --- a/drivers/platform/x86/acer-wmi.c
751     +++ b/drivers/platform/x86/acer-wmi.c
752     @@ -111,6 +111,7 @@ static const struct key_entry acer_wmi_keymap[] __initconst = {
753     {KE_KEY, 0x64, {KEY_SWITCHVIDEOMODE} }, /* Display Switch */
754     {KE_IGNORE, 0x81, {KEY_SLEEP} },
755     {KE_KEY, 0x82, {KEY_TOUCHPAD_TOGGLE} }, /* Touch Pad Toggle */
756     + {KE_IGNORE, 0x84, {KEY_KBDILLUMTOGGLE} }, /* Automatic Keyboard background light toggle */
757     {KE_KEY, KEY_TOUCHPAD_ON, {KEY_TOUCHPAD_ON} },
758     {KE_KEY, KEY_TOUCHPAD_OFF, {KEY_TOUCHPAD_OFF} },
759     {KE_IGNORE, 0x83, {KEY_TOUCHPAD_TOGGLE} },
760     diff --git a/drivers/platform/x86/intel-vbtn.c b/drivers/platform/x86/intel-vbtn.c
761     index 5c103614a409a..701d1ddda4b11 100644
762     --- a/drivers/platform/x86/intel-vbtn.c
763     +++ b/drivers/platform/x86/intel-vbtn.c
764     @@ -197,6 +197,12 @@ static const struct dmi_system_id dmi_switches_allow_list[] = {
765     DMI_MATCH(DMI_PRODUCT_NAME, "HP Stream x360 Convertible PC 11"),
766     },
767     },
768     + {
769     + .matches = {
770     + DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
771     + DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion 13 x360 PC"),
772     + },
773     + },
774     {} /* Array terminator */
775     };
776    
777     diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
778     index 5081048f2356e..8c54d3707fba3 100644
779     --- a/drivers/platform/x86/thinkpad_acpi.c
780     +++ b/drivers/platform/x86/thinkpad_acpi.c
781     @@ -3232,7 +3232,14 @@ static int hotkey_init_tablet_mode(void)
782    
783     in_tablet_mode = hotkey_gmms_get_tablet_mode(res,
784     &has_tablet_mode);
785     - if (has_tablet_mode)
786     + /*
787     + * The Yoga 11e series has 2 accelerometers described by a
788     + * BOSC0200 ACPI node. This setup relies on a Windows service
789     + * which calls special ACPI methods on this node to report
790     + * the laptop/tent/tablet mode to the EC. The bmc150 iio driver
791     + * does not support this, so skip the hotkey on these models.
792     + */
793     + if (has_tablet_mode && !acpi_dev_present("BOSC0200", "1", -1))
794     tp_features.hotkey_tablet = TP_HOTKEY_TABLET_USES_GMMS;
795     type = "GMMS";
796     } else if (acpi_evalf(hkey_handle, &res, "MHKG", "qd")) {
797     @@ -9690,6 +9697,7 @@ static const struct tpacpi_quirk battery_quirk_table[] __initconst = {
798     TPACPI_Q_LNV3('R', '0', 'B', true), /* Thinkpad 11e gen 3 */
799     TPACPI_Q_LNV3('R', '0', 'C', true), /* Thinkpad 13 */
800     TPACPI_Q_LNV3('R', '0', 'J', true), /* Thinkpad 13 gen 2 */
801     + TPACPI_Q_LNV3('R', '0', 'K', true), /* Thinkpad 11e gen 4 celeron BIOS */
802     };
803    
804     static int __init tpacpi_battery_init(struct ibm_init_struct *ibm)
805     diff --git a/drivers/platform/x86/touchscreen_dmi.c b/drivers/platform/x86/touchscreen_dmi.c
806     index 1c7d8324ff5c2..1e072dbba30d6 100644
807     --- a/drivers/platform/x86/touchscreen_dmi.c
808     +++ b/drivers/platform/x86/touchscreen_dmi.c
809     @@ -264,6 +264,21 @@ static const struct ts_dmi_data irbis_tw90_data = {
810     .properties = irbis_tw90_props,
811     };
812    
813     +static const struct property_entry irbis_tw118_props[] = {
814     + PROPERTY_ENTRY_U32("touchscreen-min-x", 20),
815     + PROPERTY_ENTRY_U32("touchscreen-min-y", 30),
816     + PROPERTY_ENTRY_U32("touchscreen-size-x", 1960),
817     + PROPERTY_ENTRY_U32("touchscreen-size-y", 1510),
818     + PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-irbis-tw118.fw"),
819     + PROPERTY_ENTRY_U32("silead,max-fingers", 10),
820     + { }
821     +};
822     +
823     +static const struct ts_dmi_data irbis_tw118_data = {
824     + .acpi_name = "MSSL1680:00",
825     + .properties = irbis_tw118_props,
826     +};
827     +
828     static const struct property_entry itworks_tw891_props[] = {
829     PROPERTY_ENTRY_U32("touchscreen-min-x", 1),
830     PROPERTY_ENTRY_U32("touchscreen-min-y", 5),
831     @@ -758,6 +773,14 @@ static const struct dmi_system_id touchscreen_dmi_table[] = {
832     DMI_MATCH(DMI_PRODUCT_NAME, "TW90"),
833     },
834     },
835     + {
836     + /* Irbis TW118 */
837     + .driver_data = (void *)&irbis_tw118_data,
838     + .matches = {
839     + DMI_MATCH(DMI_SYS_VENDOR, "IRBIS"),
840     + DMI_MATCH(DMI_PRODUCT_NAME, "TW118"),
841     + },
842     + },
843     {
844     /* I.T.Works TW891 */
845     .driver_data = (void *)&itworks_tw891_data,
846     diff --git a/drivers/scsi/be2iscsi/be_main.c b/drivers/scsi/be2iscsi/be_main.c
847     index 0fa455357594e..0760d0bd8a10b 100644
848     --- a/drivers/scsi/be2iscsi/be_main.c
849     +++ b/drivers/scsi/be2iscsi/be_main.c
850     @@ -3020,7 +3020,6 @@ static int beiscsi_create_eqs(struct beiscsi_hba *phba,
851     goto create_eq_error;
852     }
853    
854     - mem->dma = paddr;
855     mem->va = eq_vaddress;
856     ret = be_fill_queue(eq, phba->params.num_eq_entries,
857     sizeof(struct be_eq_entry), eq_vaddress);
858     @@ -3030,6 +3029,7 @@ static int beiscsi_create_eqs(struct beiscsi_hba *phba,
859     goto create_eq_error;
860     }
861    
862     + mem->dma = paddr;
863     ret = beiscsi_cmd_eq_create(&phba->ctrl, eq,
864     BEISCSI_EQ_DELAY_DEF);
865     if (ret) {
866     @@ -3086,7 +3086,6 @@ static int beiscsi_create_cqs(struct beiscsi_hba *phba,
867     goto create_cq_error;
868     }
869    
870     - mem->dma = paddr;
871     ret = be_fill_queue(cq, phba->params.num_cq_entries,
872     sizeof(struct sol_cqe), cq_vaddress);
873     if (ret) {
874     @@ -3096,6 +3095,7 @@ static int beiscsi_create_cqs(struct beiscsi_hba *phba,
875     goto create_cq_error;
876     }
877    
878     + mem->dma = paddr;
879     ret = beiscsi_cmd_cq_create(&phba->ctrl, cq, eq, false,
880     false, 0);
881     if (ret) {
882     diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
883     index b6ce880ddd153..675e16e61ebdd 100644
884     --- a/drivers/scsi/ufs/ufshcd.c
885     +++ b/drivers/scsi/ufs/ufshcd.c
886     @@ -1257,8 +1257,15 @@ static int ufshcd_devfreq_target(struct device *dev,
887     }
888     spin_unlock_irqrestore(hba->host->host_lock, irq_flags);
889    
890     + pm_runtime_get_noresume(hba->dev);
891     + if (!pm_runtime_active(hba->dev)) {
892     + pm_runtime_put_noidle(hba->dev);
893     + ret = -EAGAIN;
894     + goto out;
895     + }
896     start = ktime_get();
897     ret = ufshcd_devfreq_scale(hba, scale_up);
898     + pm_runtime_put(hba->dev);
899    
900     trace_ufshcd_profile_clk_scaling(dev_name(hba->dev),
901     (scale_up ? "up" : "down"),
902     diff --git a/drivers/soc/fsl/dpio/dpio-driver.c b/drivers/soc/fsl/dpio/dpio-driver.c
903     index 7b642c330977f..7f397b4ad878d 100644
904     --- a/drivers/soc/fsl/dpio/dpio-driver.c
905     +++ b/drivers/soc/fsl/dpio/dpio-driver.c
906     @@ -95,7 +95,6 @@ static int register_dpio_irq_handlers(struct fsl_mc_device *dpio_dev, int cpu)
907     {
908     int error;
909     struct fsl_mc_device_irq *irq;
910     - cpumask_t mask;
911    
912     irq = dpio_dev->irqs[0];
913     error = devm_request_irq(&dpio_dev->dev,
914     @@ -112,9 +111,7 @@ static int register_dpio_irq_handlers(struct fsl_mc_device *dpio_dev, int cpu)
915     }
916    
917     /* set the affinity hint */
918     - cpumask_clear(&mask);
919     - cpumask_set_cpu(cpu, &mask);
920     - if (irq_set_affinity_hint(irq->msi_desc->irq, &mask))
921     + if (irq_set_affinity_hint(irq->msi_desc->irq, cpumask_of(cpu)))
922     dev_err(&dpio_dev->dev,
923     "irq_set_affinity failed irq %d cpu %d\n",
924     irq->msi_desc->irq, cpu);
925     diff --git a/drivers/spi/spi-nxp-fspi.c b/drivers/spi/spi-nxp-fspi.c
926     index 28ae5229f889f..efd9e908e2248 100644
927     --- a/drivers/spi/spi-nxp-fspi.c
928     +++ b/drivers/spi/spi-nxp-fspi.c
929     @@ -948,6 +948,7 @@ static int nxp_fspi_probe(struct platform_device *pdev)
930     struct resource *res;
931     struct nxp_fspi *f;
932     int ret;
933     + u32 reg;
934    
935     ctlr = spi_alloc_master(&pdev->dev, sizeof(*f));
936     if (!ctlr)
937     @@ -974,6 +975,12 @@ static int nxp_fspi_probe(struct platform_device *pdev)
938     goto err_put_ctrl;
939     }
940    
941     + /* Clear potential interrupts */
942     + reg = fspi_readl(f, f->iobase + FSPI_INTR);
943     + if (reg)
944     + fspi_writel(f, reg, f->iobase + FSPI_INTR);
945     +
946     +
947     /* find the resources - controller memory mapped space */
948     res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "fspi_mmap");
949     f->ahb_addr = devm_ioremap_resource(dev, res);
950     diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
951     index 9442631fd4afc..f51dadd1ce431 100644
952     --- a/fs/proc/task_mmu.c
953     +++ b/fs/proc/task_mmu.c
954     @@ -1567,11 +1567,15 @@ static ssize_t pagemap_read(struct file *file, char __user *buf,
955    
956     src = *ppos;
957     svpfn = src / PM_ENTRY_BYTES;
958     - start_vaddr = svpfn << PAGE_SHIFT;
959     end_vaddr = mm->task_size;
960    
961     /* watch out for wraparound */
962     - if (svpfn > mm->task_size >> PAGE_SHIFT)
963     + start_vaddr = end_vaddr;
964     + if (svpfn <= (ULONG_MAX >> PAGE_SHIFT))
965     + start_vaddr = untagged_addr(svpfn << PAGE_SHIFT);
966     +
967     + /* Ensure the address is inside the task */
968     + if (start_vaddr > mm->task_size)
969     start_vaddr = end_vaddr;
970    
971     /*
972     diff --git a/include/linux/build_bug.h b/include/linux/build_bug.h
973     index 0fe5426f2bdcf..1fb55c0ad78ab 100644
974     --- a/include/linux/build_bug.h
975     +++ b/include/linux/build_bug.h
976     @@ -77,4 +77,9 @@
977     #define static_assert(expr, ...) __static_assert(expr, ##__VA_ARGS__, #expr)
978     #define __static_assert(expr, msg, ...) _Static_assert(expr, msg)
979    
980     +#ifdef __GENKSYMS__
981     +/* genksyms gets confused by _Static_assert */
982     +#define _Static_assert(expr, ...)
983     +#endif
984     +
985     #endif /* _LINUX_BUILD_BUG_H */
986     diff --git a/include/linux/compiler-clang.h b/include/linux/compiler-clang.h
987     index 333a6695a918c..0e06df20928c4 100644
988     --- a/include/linux/compiler-clang.h
989     +++ b/include/linux/compiler-clang.h
990     @@ -36,9 +36,3 @@
991     __has_builtin(__builtin_sub_overflow)
992     #define COMPILER_HAS_GENERIC_BUILTIN_OVERFLOW 1
993     #endif
994     -
995     -/* The following are for compatibility with GCC, from compiler-gcc.h,
996     - * and may be redefined here because they should not be shared with other
997     - * compilers, like ICC.
998     - */
999     -#define barrier() __asm__ __volatile__("" : : : "memory")
1000     diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h
1001     index e8579412ad214..d8fab3ecf5120 100644
1002     --- a/include/linux/compiler-gcc.h
1003     +++ b/include/linux/compiler-gcc.h
1004     @@ -14,25 +14,6 @@
1005     # error Sorry, your compiler is too old - please upgrade it.
1006     #endif
1007    
1008     -/* Optimization barrier */
1009     -
1010     -/* The "volatile" is due to gcc bugs */
1011     -#define barrier() __asm__ __volatile__("": : :"memory")
1012     -/*
1013     - * This version is i.e. to prevent dead stores elimination on @ptr
1014     - * where gcc and llvm may behave differently when otherwise using
1015     - * normal barrier(): while gcc behavior gets along with a normal
1016     - * barrier(), llvm needs an explicit input variable to be assumed
1017     - * clobbered. The issue is as follows: while the inline asm might
1018     - * access any memory it wants, the compiler could have fit all of
1019     - * @ptr into memory registers instead, and since @ptr never escaped
1020     - * from that, it proved that the inline asm wasn't touching any of
1021     - * it. This version works well with both compilers, i.e. we're telling
1022     - * the compiler that the inline asm absolutely may see the contents
1023     - * of @ptr. See also: https://llvm.org/bugs/show_bug.cgi?id=15495
1024     - */
1025     -#define barrier_data(ptr) __asm__ __volatile__("": :"r"(ptr) :"memory")
1026     -
1027     /*
1028     * This macro obfuscates arithmetic on a variable address so that gcc
1029     * shouldn't recognize the original var, and make assumptions about it.
1030     diff --git a/include/linux/compiler.h b/include/linux/compiler.h
1031     index 448c91bf543b7..f164a9b12813f 100644
1032     --- a/include/linux/compiler.h
1033     +++ b/include/linux/compiler.h
1034     @@ -80,11 +80,25 @@ void ftrace_likely_update(struct ftrace_likely_data *f, int val,
1035    
1036     /* Optimization barrier */
1037     #ifndef barrier
1038     -# define barrier() __memory_barrier()
1039     +/* The "volatile" is due to gcc bugs */
1040     +# define barrier() __asm__ __volatile__("": : :"memory")
1041     #endif
1042    
1043     #ifndef barrier_data
1044     -# define barrier_data(ptr) barrier()
1045     +/*
1046     + * This version is i.e. to prevent dead stores elimination on @ptr
1047     + * where gcc and llvm may behave differently when otherwise using
1048     + * normal barrier(): while gcc behavior gets along with a normal
1049     + * barrier(), llvm needs an explicit input variable to be assumed
1050     + * clobbered. The issue is as follows: while the inline asm might
1051     + * access any memory it wants, the compiler could have fit all of
1052     + * @ptr into memory registers instead, and since @ptr never escaped
1053     + * from that, it proved that the inline asm wasn't touching any of
1054     + * it. This version works well with both compilers, i.e. we're telling
1055     + * the compiler that the inline asm absolutely may see the contents
1056     + * of @ptr. See also: https://llvm.org/bugs/show_bug.cgi?id=15495
1057     + */
1058     +# define barrier_data(ptr) __asm__ __volatile__("": :"r"(ptr) :"memory")
1059     #endif
1060    
1061     /* workaround for GCC PR82365 if needed */
1062     diff --git a/include/linux/zsmalloc.h b/include/linux/zsmalloc.h
1063     index 2219cce81ca48..4807ca4d52e03 100644
1064     --- a/include/linux/zsmalloc.h
1065     +++ b/include/linux/zsmalloc.h
1066     @@ -20,7 +20,6 @@
1067     * zsmalloc mapping modes
1068     *
1069     * NOTE: These only make a difference when a mapped object spans pages.
1070     - * They also have no effect when PGTABLE_MAPPING is selected.
1071     */
1072     enum zs_mapmode {
1073     ZS_MM_RW, /* normal read-write mapping */
1074     diff --git a/mm/Kconfig b/mm/Kconfig
1075     index a5dae9a7eb510..fbdc5c70e4873 100644
1076     --- a/mm/Kconfig
1077     +++ b/mm/Kconfig
1078     @@ -576,19 +576,6 @@ config ZSMALLOC
1079     returned by an alloc(). This handle must be mapped in order to
1080     access the allocated space.
1081    
1082     -config PGTABLE_MAPPING
1083     - bool "Use page table mapping to access object in zsmalloc"
1084     - depends on ZSMALLOC
1085     - help
1086     - By default, zsmalloc uses a copy-based object mapping method to
1087     - access allocations that span two pages. However, if a particular
1088     - architecture (ex, ARM) performs VM mapping faster than copying,
1089     - then you should select this. This causes zsmalloc to use page table
1090     - mapping rather than copying for object mapping.
1091     -
1092     - You can check speed with zsmalloc benchmark:
1093     - https://github.com/spartacus06/zsmapbench
1094     -
1095     config ZSMALLOC_STAT
1096     bool "Export zsmalloc statistics"
1097     depends on ZSMALLOC
1098     diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c
1099     index 22d17ecfe7df4..8a72a3b3837b4 100644
1100     --- a/mm/zsmalloc.c
1101     +++ b/mm/zsmalloc.c
1102     @@ -293,11 +293,7 @@ struct zspage {
1103     };
1104    
1105     struct mapping_area {
1106     -#ifdef CONFIG_PGTABLE_MAPPING
1107     - struct vm_struct *vm; /* vm area for mapping object that span pages */
1108     -#else
1109     char *vm_buf; /* copy buffer for objects that span pages */
1110     -#endif
1111     char *vm_addr; /* address of kmap_atomic()'ed pages */
1112     enum zs_mapmode vm_mm; /* mapping mode */
1113     };
1114     @@ -1113,46 +1109,6 @@ static struct zspage *find_get_zspage(struct size_class *class)
1115     return zspage;
1116     }
1117    
1118     -#ifdef CONFIG_PGTABLE_MAPPING
1119     -static inline int __zs_cpu_up(struct mapping_area *area)
1120     -{
1121     - /*
1122     - * Make sure we don't leak memory if a cpu UP notification
1123     - * and zs_init() race and both call zs_cpu_up() on the same cpu
1124     - */
1125     - if (area->vm)
1126     - return 0;
1127     - area->vm = alloc_vm_area(PAGE_SIZE * 2, NULL);
1128     - if (!area->vm)
1129     - return -ENOMEM;
1130     - return 0;
1131     -}
1132     -
1133     -static inline void __zs_cpu_down(struct mapping_area *area)
1134     -{
1135     - if (area->vm)
1136     - free_vm_area(area->vm);
1137     - area->vm = NULL;
1138     -}
1139     -
1140     -static inline void *__zs_map_object(struct mapping_area *area,
1141     - struct page *pages[2], int off, int size)
1142     -{
1143     - BUG_ON(map_vm_area(area->vm, PAGE_KERNEL, pages));
1144     - area->vm_addr = area->vm->addr;
1145     - return area->vm_addr + off;
1146     -}
1147     -
1148     -static inline void __zs_unmap_object(struct mapping_area *area,
1149     - struct page *pages[2], int off, int size)
1150     -{
1151     - unsigned long addr = (unsigned long)area->vm_addr;
1152     -
1153     - unmap_kernel_range(addr, PAGE_SIZE * 2);
1154     -}
1155     -
1156     -#else /* CONFIG_PGTABLE_MAPPING */
1157     -
1158     static inline int __zs_cpu_up(struct mapping_area *area)
1159     {
1160     /*
1161     @@ -1233,8 +1189,6 @@ out:
1162     pagefault_enable();
1163     }
1164    
1165     -#endif /* CONFIG_PGTABLE_MAPPING */
1166     -
1167     static int zs_cpu_prepare(unsigned int cpu)
1168     {
1169     struct mapping_area *area;
1170     diff --git a/tools/testing/ktest/ktest.pl b/tools/testing/ktest/ktest.pl
1171     index 42b6cd41d2ea4..6c4f21db5fbad 100755
1172     --- a/tools/testing/ktest/ktest.pl
1173     +++ b/tools/testing/ktest/ktest.pl
1174     @@ -2008,7 +2008,7 @@ sub reboot_to {
1175    
1176     if ($reboot_type eq "grub") {
1177     run_ssh "'(echo \"savedefault --default=$grub_number --once\" | grub --batch)'";
1178     - } elsif ($reboot_type eq "grub2") {
1179     + } elsif (($reboot_type eq "grub2") or ($reboot_type eq "grub2bls")) {
1180     run_ssh "$grub_reboot $grub_number";
1181     } elsif ($reboot_type eq "syslinux") {
1182     run_ssh "$syslinux --once \\\"$syslinux_label\\\" $syslinux_path";