Gentoo Archives: gentoo-commits

From: Mike Pagano <mpagano@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/linux-patches:5.10 commit in: /
Date: Sat, 09 Oct 2021 21:31:38
Message-Id: 1633815078.b2240d9c74060378b2e4577816eda3349e7db4dd.mpagano@gentoo
1 commit: b2240d9c74060378b2e4577816eda3349e7db4dd
2 Author: Mike Pagano <mpagano <AT> gentoo <DOT> org>
3 AuthorDate: Sat Oct 9 21:31:18 2021 +0000
4 Commit: Mike Pagano <mpagano <AT> gentoo <DOT> org>
5 CommitDate: Sat Oct 9 21:31:18 2021 +0000
6 URL: https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=b2240d9c
7
8 Linux patch 5.10.72
9
10 Signed-off-by: Mike Pagano <mpagano <AT> gentoo.org>
11
12 0000_README | 4 +
13 1071_linux-5.10.72.patch | 1114 ++++++++++++++++++++++++++++++++++++++++++++++
14 2 files changed, 1118 insertions(+)
15
16 diff --git a/0000_README b/0000_README
17 index ef33fa6..42e4628 100644
18 --- a/0000_README
19 +++ b/0000_README
20 @@ -327,6 +327,10 @@ Patch: 1070_linux-5.10.71.patch
21 From: http://www.kernel.org
22 Desc: Linux 5.10.71
23
24 +Patch: 1071_linux-5.10.72.patch
25 +From: http://www.kernel.org
26 +Desc: Linux 5.10.72
27 +
28 Patch: 1500_XATTR_USER_PREFIX.patch
29 From: https://bugs.gentoo.org/show_bug.cgi?id=470644
30 Desc: Support for namespace user.pax.* on tmpfs.
31
32 diff --git a/1071_linux-5.10.72.patch b/1071_linux-5.10.72.patch
33 new file mode 100644
34 index 0000000..229e951
35 --- /dev/null
36 +++ b/1071_linux-5.10.72.patch
37 @@ -0,0 +1,1114 @@
38 +diff --git a/Makefile b/Makefile
39 +index 1637ff7c1b751..48211c8503d4e 100644
40 +--- a/Makefile
41 ++++ b/Makefile
42 +@@ -1,7 +1,7 @@
43 + # SPDX-License-Identifier: GPL-2.0
44 + VERSION = 5
45 + PATCHLEVEL = 10
46 +-SUBLEVEL = 71
47 ++SUBLEVEL = 72
48 + EXTRAVERSION =
49 + NAME = Dare mighty things
50 +
51 +diff --git a/arch/sparc/lib/iomap.c b/arch/sparc/lib/iomap.c
52 +index c9da9f139694d..f3a8cd491ce0d 100644
53 +--- a/arch/sparc/lib/iomap.c
54 ++++ b/arch/sparc/lib/iomap.c
55 +@@ -19,8 +19,10 @@ void ioport_unmap(void __iomem *addr)
56 + EXPORT_SYMBOL(ioport_map);
57 + EXPORT_SYMBOL(ioport_unmap);
58 +
59 ++#ifdef CONFIG_PCI
60 + void pci_iounmap(struct pci_dev *dev, void __iomem * addr)
61 + {
62 + /* nothing to do */
63 + }
64 + EXPORT_SYMBOL(pci_iounmap);
65 ++#endif
66 +diff --git a/arch/x86/events/core.c b/arch/x86/events/core.c
67 +index e6db1a1f22d7d..1f5d96ba4866d 100644
68 +--- a/arch/x86/events/core.c
69 ++++ b/arch/x86/events/core.c
70 +@@ -2284,6 +2284,7 @@ static int x86_pmu_event_init(struct perf_event *event)
71 + if (err) {
72 + if (event->destroy)
73 + event->destroy(event);
74 ++ event->destroy = NULL;
75 + }
76 +
77 + if (READ_ONCE(x86_pmu.attr_rdpmc) &&
78 +diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c
79 +index 1c23aee3778c3..5e1d7396a6b8a 100644
80 +--- a/arch/x86/kvm/svm/svm.c
81 ++++ b/arch/x86/kvm/svm/svm.c
82 +@@ -1497,6 +1497,8 @@ static void svm_clear_vintr(struct vcpu_svm *svm)
83 + (svm->nested.ctl.int_ctl & V_TPR_MASK));
84 + svm->vmcb->control.int_ctl |= svm->nested.ctl.int_ctl &
85 + V_IRQ_INJECTION_BITS_MASK;
86 ++
87 ++ svm->vmcb->control.int_vector = svm->nested.ctl.int_vector;
88 + }
89 +
90 + vmcb_mark_dirty(svm->vmcb, VMCB_INTR);
91 +diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
92 +index d65da3b5837b2..b885063dc393f 100644
93 +--- a/arch/x86/kvm/x86.c
94 ++++ b/arch/x86/kvm/x86.c
95 +@@ -1250,6 +1250,13 @@ static const u32 msrs_to_save_all[] = {
96 + MSR_ARCH_PERFMON_EVENTSEL0 + 12, MSR_ARCH_PERFMON_EVENTSEL0 + 13,
97 + MSR_ARCH_PERFMON_EVENTSEL0 + 14, MSR_ARCH_PERFMON_EVENTSEL0 + 15,
98 + MSR_ARCH_PERFMON_EVENTSEL0 + 16, MSR_ARCH_PERFMON_EVENTSEL0 + 17,
99 ++
100 ++ MSR_K7_EVNTSEL0, MSR_K7_EVNTSEL1, MSR_K7_EVNTSEL2, MSR_K7_EVNTSEL3,
101 ++ MSR_K7_PERFCTR0, MSR_K7_PERFCTR1, MSR_K7_PERFCTR2, MSR_K7_PERFCTR3,
102 ++ MSR_F15H_PERF_CTL0, MSR_F15H_PERF_CTL1, MSR_F15H_PERF_CTL2,
103 ++ MSR_F15H_PERF_CTL3, MSR_F15H_PERF_CTL4, MSR_F15H_PERF_CTL5,
104 ++ MSR_F15H_PERF_CTR0, MSR_F15H_PERF_CTR1, MSR_F15H_PERF_CTR2,
105 ++ MSR_F15H_PERF_CTR3, MSR_F15H_PERF_CTR4, MSR_F15H_PERF_CTR5,
106 + };
107 +
108 + static u32 msrs_to_save[ARRAY_SIZE(msrs_to_save_all)];
109 +diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
110 +index 0e6e73b8023fc..8916163d508e0 100644
111 +--- a/drivers/ata/libata-core.c
112 ++++ b/drivers/ata/libata-core.c
113 +@@ -2199,6 +2199,25 @@ static void ata_dev_config_ncq_prio(struct ata_device *dev)
114 +
115 + }
116 +
117 ++static bool ata_dev_check_adapter(struct ata_device *dev,
118 ++ unsigned short vendor_id)
119 ++{
120 ++ struct pci_dev *pcidev = NULL;
121 ++ struct device *parent_dev = NULL;
122 ++
123 ++ for (parent_dev = dev->tdev.parent; parent_dev != NULL;
124 ++ parent_dev = parent_dev->parent) {
125 ++ if (dev_is_pci(parent_dev)) {
126 ++ pcidev = to_pci_dev(parent_dev);
127 ++ if (pcidev->vendor == vendor_id)
128 ++ return true;
129 ++ break;
130 ++ }
131 ++ }
132 ++
133 ++ return false;
134 ++}
135 ++
136 + static int ata_dev_config_ncq(struct ata_device *dev,
137 + char *desc, size_t desc_sz)
138 + {
139 +@@ -2217,6 +2236,13 @@ static int ata_dev_config_ncq(struct ata_device *dev,
140 + snprintf(desc, desc_sz, "NCQ (not used)");
141 + return 0;
142 + }
143 ++
144 ++ if (dev->horkage & ATA_HORKAGE_NO_NCQ_ON_ATI &&
145 ++ ata_dev_check_adapter(dev, PCI_VENDOR_ID_ATI)) {
146 ++ snprintf(desc, desc_sz, "NCQ (not used)");
147 ++ return 0;
148 ++ }
149 ++
150 + if (ap->flags & ATA_FLAG_NCQ) {
151 + hdepth = min(ap->scsi_host->can_queue, ATA_MAX_QUEUE);
152 + dev->flags |= ATA_DFLAG_NCQ;
153 +@@ -3951,9 +3977,11 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
154 + { "Samsung SSD 850*", NULL, ATA_HORKAGE_NO_NCQ_TRIM |
155 + ATA_HORKAGE_ZERO_AFTER_TRIM, },
156 + { "Samsung SSD 860*", NULL, ATA_HORKAGE_NO_NCQ_TRIM |
157 +- ATA_HORKAGE_ZERO_AFTER_TRIM, },
158 ++ ATA_HORKAGE_ZERO_AFTER_TRIM |
159 ++ ATA_HORKAGE_NO_NCQ_ON_ATI, },
160 + { "Samsung SSD 870*", NULL, ATA_HORKAGE_NO_NCQ_TRIM |
161 +- ATA_HORKAGE_ZERO_AFTER_TRIM, },
162 ++ ATA_HORKAGE_ZERO_AFTER_TRIM |
163 ++ ATA_HORKAGE_NO_NCQ_ON_ATI, },
164 + { "FCCT*M500*", NULL, ATA_HORKAGE_NO_NCQ_TRIM |
165 + ATA_HORKAGE_ZERO_AFTER_TRIM, },
166 +
167 +@@ -6108,6 +6136,8 @@ static int __init ata_parse_force_one(char **cur,
168 + { "ncq", .horkage_off = ATA_HORKAGE_NONCQ },
169 + { "noncqtrim", .horkage_on = ATA_HORKAGE_NO_NCQ_TRIM },
170 + { "ncqtrim", .horkage_off = ATA_HORKAGE_NO_NCQ_TRIM },
171 ++ { "noncqati", .horkage_on = ATA_HORKAGE_NO_NCQ_ON_ATI },
172 ++ { "ncqati", .horkage_off = ATA_HORKAGE_NO_NCQ_ON_ATI },
173 + { "dump_id", .horkage_on = ATA_HORKAGE_DUMP_ID },
174 + { "pio0", .xfer_mask = 1 << (ATA_SHIFT_PIO + 0) },
175 + { "pio1", .xfer_mask = 1 << (ATA_SHIFT_PIO + 1) },
176 +diff --git a/drivers/irqchip/irq-gic.c b/drivers/irqchip/irq-gic.c
177 +index 6053245a4754c..176f5f06432d1 100644
178 +--- a/drivers/irqchip/irq-gic.c
179 ++++ b/drivers/irqchip/irq-gic.c
180 +@@ -107,6 +107,8 @@ static DEFINE_RAW_SPINLOCK(cpu_map_lock);
181 +
182 + #endif
183 +
184 ++static DEFINE_STATIC_KEY_FALSE(needs_rmw_access);
185 ++
186 + /*
187 + * The GIC mapping of CPU interfaces does not necessarily match
188 + * the logical CPU numbering. Let's use a mapping as returned
189 +@@ -777,6 +779,25 @@ static int gic_pm_init(struct gic_chip_data *gic)
190 + #endif
191 +
192 + #ifdef CONFIG_SMP
193 ++static void rmw_writeb(u8 bval, void __iomem *addr)
194 ++{
195 ++ static DEFINE_RAW_SPINLOCK(rmw_lock);
196 ++ unsigned long offset = (unsigned long)addr & 3UL;
197 ++ unsigned long shift = offset * 8;
198 ++ unsigned long flags;
199 ++ u32 val;
200 ++
201 ++ raw_spin_lock_irqsave(&rmw_lock, flags);
202 ++
203 ++ addr -= offset;
204 ++ val = readl_relaxed(addr);
205 ++ val &= ~GENMASK(shift + 7, shift);
206 ++ val |= bval << shift;
207 ++ writel_relaxed(val, addr);
208 ++
209 ++ raw_spin_unlock_irqrestore(&rmw_lock, flags);
210 ++}
211 ++
212 + static int gic_set_affinity(struct irq_data *d, const struct cpumask *mask_val,
213 + bool force)
214 + {
215 +@@ -791,7 +812,10 @@ static int gic_set_affinity(struct irq_data *d, const struct cpumask *mask_val,
216 + if (cpu >= NR_GIC_CPU_IF || cpu >= nr_cpu_ids)
217 + return -EINVAL;
218 +
219 +- writeb_relaxed(gic_cpu_map[cpu], reg);
220 ++ if (static_branch_unlikely(&needs_rmw_access))
221 ++ rmw_writeb(gic_cpu_map[cpu], reg);
222 ++ else
223 ++ writeb_relaxed(gic_cpu_map[cpu], reg);
224 + irq_data_update_effective_affinity(d, cpumask_of(cpu));
225 +
226 + return IRQ_SET_MASK_OK_DONE;
227 +@@ -1384,6 +1408,30 @@ static bool gic_check_eoimode(struct device_node *node, void __iomem **base)
228 + return true;
229 + }
230 +
231 ++static bool gic_enable_rmw_access(void *data)
232 ++{
233 ++ /*
234 ++ * The EMEV2 class of machines has a broken interconnect, and
235 ++ * locks up on accesses that are less than 32bit. So far, only
236 ++ * the affinity setting requires it.
237 ++ */
238 ++ if (of_machine_is_compatible("renesas,emev2")) {
239 ++ static_branch_enable(&needs_rmw_access);
240 ++ return true;
241 ++ }
242 ++
243 ++ return false;
244 ++}
245 ++
246 ++static const struct gic_quirk gic_quirks[] = {
247 ++ {
248 ++ .desc = "broken byte access",
249 ++ .compatible = "arm,pl390",
250 ++ .init = gic_enable_rmw_access,
251 ++ },
252 ++ { },
253 ++};
254 ++
255 + static int gic_of_setup(struct gic_chip_data *gic, struct device_node *node)
256 + {
257 + if (!gic || !node)
258 +@@ -1400,6 +1448,8 @@ static int gic_of_setup(struct gic_chip_data *gic, struct device_node *node)
259 + if (of_property_read_u32(node, "cpu-offset", &gic->percpu_offset))
260 + gic->percpu_offset = 0;
261 +
262 ++ gic_enable_of_quirks(node, gic_quirks, gic);
263 ++
264 + return 0;
265 +
266 + error:
267 +diff --git a/drivers/misc/habanalabs/gaudi/gaudi_security.c b/drivers/misc/habanalabs/gaudi/gaudi_security.c
268 +index 2d7add0e5bcc0..9343a81d31221 100644
269 +--- a/drivers/misc/habanalabs/gaudi/gaudi_security.c
270 ++++ b/drivers/misc/habanalabs/gaudi/gaudi_security.c
271 +@@ -8,16 +8,21 @@
272 + #include "gaudiP.h"
273 + #include "../include/gaudi/asic_reg/gaudi_regs.h"
274 +
275 +-#define GAUDI_NUMBER_OF_RR_REGS 24
276 +-#define GAUDI_NUMBER_OF_LBW_RANGES 12
277 ++#define GAUDI_NUMBER_OF_LBW_RR_REGS 28
278 ++#define GAUDI_NUMBER_OF_HBW_RR_REGS 24
279 ++#define GAUDI_NUMBER_OF_LBW_RANGES 10
280 +
281 +-static u64 gaudi_rr_lbw_hit_aw_regs[GAUDI_NUMBER_OF_RR_REGS] = {
282 ++static u64 gaudi_rr_lbw_hit_aw_regs[GAUDI_NUMBER_OF_LBW_RR_REGS] = {
283 ++ mmDMA_IF_W_S_SOB_HIT_WPROT,
284 + mmDMA_IF_W_S_DMA0_HIT_WPROT,
285 + mmDMA_IF_W_S_DMA1_HIT_WPROT,
286 ++ mmDMA_IF_E_S_SOB_HIT_WPROT,
287 + mmDMA_IF_E_S_DMA0_HIT_WPROT,
288 + mmDMA_IF_E_S_DMA1_HIT_WPROT,
289 ++ mmDMA_IF_W_N_SOB_HIT_WPROT,
290 + mmDMA_IF_W_N_DMA0_HIT_WPROT,
291 + mmDMA_IF_W_N_DMA1_HIT_WPROT,
292 ++ mmDMA_IF_E_N_SOB_HIT_WPROT,
293 + mmDMA_IF_E_N_DMA0_HIT_WPROT,
294 + mmDMA_IF_E_N_DMA1_HIT_WPROT,
295 + mmSIF_RTR_0_LBW_RANGE_PROT_HIT_AW,
296 +@@ -38,13 +43,17 @@ static u64 gaudi_rr_lbw_hit_aw_regs[GAUDI_NUMBER_OF_RR_REGS] = {
297 + mmNIF_RTR_7_LBW_RANGE_PROT_HIT_AW,
298 + };
299 +
300 +-static u64 gaudi_rr_lbw_hit_ar_regs[GAUDI_NUMBER_OF_RR_REGS] = {
301 ++static u64 gaudi_rr_lbw_hit_ar_regs[GAUDI_NUMBER_OF_LBW_RR_REGS] = {
302 ++ mmDMA_IF_W_S_SOB_HIT_RPROT,
303 + mmDMA_IF_W_S_DMA0_HIT_RPROT,
304 + mmDMA_IF_W_S_DMA1_HIT_RPROT,
305 ++ mmDMA_IF_E_S_SOB_HIT_RPROT,
306 + mmDMA_IF_E_S_DMA0_HIT_RPROT,
307 + mmDMA_IF_E_S_DMA1_HIT_RPROT,
308 ++ mmDMA_IF_W_N_SOB_HIT_RPROT,
309 + mmDMA_IF_W_N_DMA0_HIT_RPROT,
310 + mmDMA_IF_W_N_DMA1_HIT_RPROT,
311 ++ mmDMA_IF_E_N_SOB_HIT_RPROT,
312 + mmDMA_IF_E_N_DMA0_HIT_RPROT,
313 + mmDMA_IF_E_N_DMA1_HIT_RPROT,
314 + mmSIF_RTR_0_LBW_RANGE_PROT_HIT_AR,
315 +@@ -65,13 +74,17 @@ static u64 gaudi_rr_lbw_hit_ar_regs[GAUDI_NUMBER_OF_RR_REGS] = {
316 + mmNIF_RTR_7_LBW_RANGE_PROT_HIT_AR,
317 + };
318 +
319 +-static u64 gaudi_rr_lbw_min_aw_regs[GAUDI_NUMBER_OF_RR_REGS] = {
320 ++static u64 gaudi_rr_lbw_min_aw_regs[GAUDI_NUMBER_OF_LBW_RR_REGS] = {
321 ++ mmDMA_IF_W_S_SOB_MIN_WPROT_0,
322 + mmDMA_IF_W_S_DMA0_MIN_WPROT_0,
323 + mmDMA_IF_W_S_DMA1_MIN_WPROT_0,
324 ++ mmDMA_IF_E_S_SOB_MIN_WPROT_0,
325 + mmDMA_IF_E_S_DMA0_MIN_WPROT_0,
326 + mmDMA_IF_E_S_DMA1_MIN_WPROT_0,
327 ++ mmDMA_IF_W_N_SOB_MIN_WPROT_0,
328 + mmDMA_IF_W_N_DMA0_MIN_WPROT_0,
329 + mmDMA_IF_W_N_DMA1_MIN_WPROT_0,
330 ++ mmDMA_IF_E_N_SOB_MIN_WPROT_0,
331 + mmDMA_IF_E_N_DMA0_MIN_WPROT_0,
332 + mmDMA_IF_E_N_DMA1_MIN_WPROT_0,
333 + mmSIF_RTR_0_LBW_RANGE_PROT_MIN_AW_0,
334 +@@ -92,13 +105,17 @@ static u64 gaudi_rr_lbw_min_aw_regs[GAUDI_NUMBER_OF_RR_REGS] = {
335 + mmNIF_RTR_7_LBW_RANGE_PROT_MIN_AW_0,
336 + };
337 +
338 +-static u64 gaudi_rr_lbw_max_aw_regs[GAUDI_NUMBER_OF_RR_REGS] = {
339 ++static u64 gaudi_rr_lbw_max_aw_regs[GAUDI_NUMBER_OF_LBW_RR_REGS] = {
340 ++ mmDMA_IF_W_S_SOB_MAX_WPROT_0,
341 + mmDMA_IF_W_S_DMA0_MAX_WPROT_0,
342 + mmDMA_IF_W_S_DMA1_MAX_WPROT_0,
343 ++ mmDMA_IF_E_S_SOB_MAX_WPROT_0,
344 + mmDMA_IF_E_S_DMA0_MAX_WPROT_0,
345 + mmDMA_IF_E_S_DMA1_MAX_WPROT_0,
346 ++ mmDMA_IF_W_N_SOB_MAX_WPROT_0,
347 + mmDMA_IF_W_N_DMA0_MAX_WPROT_0,
348 + mmDMA_IF_W_N_DMA1_MAX_WPROT_0,
349 ++ mmDMA_IF_E_N_SOB_MAX_WPROT_0,
350 + mmDMA_IF_E_N_DMA0_MAX_WPROT_0,
351 + mmDMA_IF_E_N_DMA1_MAX_WPROT_0,
352 + mmSIF_RTR_0_LBW_RANGE_PROT_MAX_AW_0,
353 +@@ -119,13 +136,17 @@ static u64 gaudi_rr_lbw_max_aw_regs[GAUDI_NUMBER_OF_RR_REGS] = {
354 + mmNIF_RTR_7_LBW_RANGE_PROT_MAX_AW_0,
355 + };
356 +
357 +-static u64 gaudi_rr_lbw_min_ar_regs[GAUDI_NUMBER_OF_RR_REGS] = {
358 ++static u64 gaudi_rr_lbw_min_ar_regs[GAUDI_NUMBER_OF_LBW_RR_REGS] = {
359 ++ mmDMA_IF_W_S_SOB_MIN_RPROT_0,
360 + mmDMA_IF_W_S_DMA0_MIN_RPROT_0,
361 + mmDMA_IF_W_S_DMA1_MIN_RPROT_0,
362 ++ mmDMA_IF_E_S_SOB_MIN_RPROT_0,
363 + mmDMA_IF_E_S_DMA0_MIN_RPROT_0,
364 + mmDMA_IF_E_S_DMA1_MIN_RPROT_0,
365 ++ mmDMA_IF_W_N_SOB_MIN_RPROT_0,
366 + mmDMA_IF_W_N_DMA0_MIN_RPROT_0,
367 + mmDMA_IF_W_N_DMA1_MIN_RPROT_0,
368 ++ mmDMA_IF_E_N_SOB_MIN_RPROT_0,
369 + mmDMA_IF_E_N_DMA0_MIN_RPROT_0,
370 + mmDMA_IF_E_N_DMA1_MIN_RPROT_0,
371 + mmSIF_RTR_0_LBW_RANGE_PROT_MIN_AR_0,
372 +@@ -146,13 +167,17 @@ static u64 gaudi_rr_lbw_min_ar_regs[GAUDI_NUMBER_OF_RR_REGS] = {
373 + mmNIF_RTR_7_LBW_RANGE_PROT_MIN_AR_0,
374 + };
375 +
376 +-static u64 gaudi_rr_lbw_max_ar_regs[GAUDI_NUMBER_OF_RR_REGS] = {
377 ++static u64 gaudi_rr_lbw_max_ar_regs[GAUDI_NUMBER_OF_LBW_RR_REGS] = {
378 ++ mmDMA_IF_W_S_SOB_MAX_RPROT_0,
379 + mmDMA_IF_W_S_DMA0_MAX_RPROT_0,
380 + mmDMA_IF_W_S_DMA1_MAX_RPROT_0,
381 ++ mmDMA_IF_E_S_SOB_MAX_RPROT_0,
382 + mmDMA_IF_E_S_DMA0_MAX_RPROT_0,
383 + mmDMA_IF_E_S_DMA1_MAX_RPROT_0,
384 ++ mmDMA_IF_W_N_SOB_MAX_RPROT_0,
385 + mmDMA_IF_W_N_DMA0_MAX_RPROT_0,
386 + mmDMA_IF_W_N_DMA1_MAX_RPROT_0,
387 ++ mmDMA_IF_E_N_SOB_MAX_RPROT_0,
388 + mmDMA_IF_E_N_DMA0_MAX_RPROT_0,
389 + mmDMA_IF_E_N_DMA1_MAX_RPROT_0,
390 + mmSIF_RTR_0_LBW_RANGE_PROT_MAX_AR_0,
391 +@@ -173,7 +198,7 @@ static u64 gaudi_rr_lbw_max_ar_regs[GAUDI_NUMBER_OF_RR_REGS] = {
392 + mmNIF_RTR_7_LBW_RANGE_PROT_MAX_AR_0,
393 + };
394 +
395 +-static u64 gaudi_rr_hbw_hit_aw_regs[GAUDI_NUMBER_OF_RR_REGS] = {
396 ++static u64 gaudi_rr_hbw_hit_aw_regs[GAUDI_NUMBER_OF_HBW_RR_REGS] = {
397 + mmDMA_IF_W_S_DOWN_CH0_RANGE_SEC_HIT_AW,
398 + mmDMA_IF_W_S_DOWN_CH1_RANGE_SEC_HIT_AW,
399 + mmDMA_IF_E_S_DOWN_CH0_RANGE_SEC_HIT_AW,
400 +@@ -200,7 +225,7 @@ static u64 gaudi_rr_hbw_hit_aw_regs[GAUDI_NUMBER_OF_RR_REGS] = {
401 + mmNIF_RTR_CTRL_7_RANGE_SEC_HIT_AW
402 + };
403 +
404 +-static u64 gaudi_rr_hbw_hit_ar_regs[GAUDI_NUMBER_OF_RR_REGS] = {
405 ++static u64 gaudi_rr_hbw_hit_ar_regs[GAUDI_NUMBER_OF_HBW_RR_REGS] = {
406 + mmDMA_IF_W_S_DOWN_CH0_RANGE_SEC_HIT_AR,
407 + mmDMA_IF_W_S_DOWN_CH1_RANGE_SEC_HIT_AR,
408 + mmDMA_IF_E_S_DOWN_CH0_RANGE_SEC_HIT_AR,
409 +@@ -227,7 +252,7 @@ static u64 gaudi_rr_hbw_hit_ar_regs[GAUDI_NUMBER_OF_RR_REGS] = {
410 + mmNIF_RTR_CTRL_7_RANGE_SEC_HIT_AR
411 + };
412 +
413 +-static u64 gaudi_rr_hbw_base_low_aw_regs[GAUDI_NUMBER_OF_RR_REGS] = {
414 ++static u64 gaudi_rr_hbw_base_low_aw_regs[GAUDI_NUMBER_OF_HBW_RR_REGS] = {
415 + mmDMA_IF_W_S_DOWN_CH0_RANGE_SEC_BASE_LOW_AW_0,
416 + mmDMA_IF_W_S_DOWN_CH1_RANGE_SEC_BASE_LOW_AW_0,
417 + mmDMA_IF_E_S_DOWN_CH0_RANGE_SEC_BASE_LOW_AW_0,
418 +@@ -254,7 +279,7 @@ static u64 gaudi_rr_hbw_base_low_aw_regs[GAUDI_NUMBER_OF_RR_REGS] = {
419 + mmNIF_RTR_CTRL_7_RANGE_SEC_BASE_LOW_AW_0
420 + };
421 +
422 +-static u64 gaudi_rr_hbw_base_high_aw_regs[GAUDI_NUMBER_OF_RR_REGS] = {
423 ++static u64 gaudi_rr_hbw_base_high_aw_regs[GAUDI_NUMBER_OF_HBW_RR_REGS] = {
424 + mmDMA_IF_W_S_DOWN_CH0_RANGE_SEC_BASE_HIGH_AW_0,
425 + mmDMA_IF_W_S_DOWN_CH1_RANGE_SEC_BASE_HIGH_AW_0,
426 + mmDMA_IF_E_S_DOWN_CH0_RANGE_SEC_BASE_HIGH_AW_0,
427 +@@ -281,7 +306,7 @@ static u64 gaudi_rr_hbw_base_high_aw_regs[GAUDI_NUMBER_OF_RR_REGS] = {
428 + mmNIF_RTR_CTRL_7_RANGE_SEC_BASE_HIGH_AW_0
429 + };
430 +
431 +-static u64 gaudi_rr_hbw_mask_low_aw_regs[GAUDI_NUMBER_OF_RR_REGS] = {
432 ++static u64 gaudi_rr_hbw_mask_low_aw_regs[GAUDI_NUMBER_OF_HBW_RR_REGS] = {
433 + mmDMA_IF_W_S_DOWN_CH0_RANGE_SEC_MASK_LOW_AW_0,
434 + mmDMA_IF_W_S_DOWN_CH1_RANGE_SEC_MASK_LOW_AW_0,
435 + mmDMA_IF_E_S_DOWN_CH0_RANGE_SEC_MASK_LOW_AW_0,
436 +@@ -308,7 +333,7 @@ static u64 gaudi_rr_hbw_mask_low_aw_regs[GAUDI_NUMBER_OF_RR_REGS] = {
437 + mmNIF_RTR_CTRL_7_RANGE_SEC_MASK_LOW_AW_0
438 + };
439 +
440 +-static u64 gaudi_rr_hbw_mask_high_aw_regs[GAUDI_NUMBER_OF_RR_REGS] = {
441 ++static u64 gaudi_rr_hbw_mask_high_aw_regs[GAUDI_NUMBER_OF_HBW_RR_REGS] = {
442 + mmDMA_IF_W_S_DOWN_CH0_RANGE_SEC_MASK_HIGH_AW_0,
443 + mmDMA_IF_W_S_DOWN_CH1_RANGE_SEC_MASK_HIGH_AW_0,
444 + mmDMA_IF_E_S_DOWN_CH0_RANGE_SEC_MASK_HIGH_AW_0,
445 +@@ -335,7 +360,7 @@ static u64 gaudi_rr_hbw_mask_high_aw_regs[GAUDI_NUMBER_OF_RR_REGS] = {
446 + mmNIF_RTR_CTRL_7_RANGE_SEC_MASK_HIGH_AW_0
447 + };
448 +
449 +-static u64 gaudi_rr_hbw_base_low_ar_regs[GAUDI_NUMBER_OF_RR_REGS] = {
450 ++static u64 gaudi_rr_hbw_base_low_ar_regs[GAUDI_NUMBER_OF_HBW_RR_REGS] = {
451 + mmDMA_IF_W_S_DOWN_CH0_RANGE_SEC_BASE_LOW_AR_0,
452 + mmDMA_IF_W_S_DOWN_CH1_RANGE_SEC_BASE_LOW_AR_0,
453 + mmDMA_IF_E_S_DOWN_CH0_RANGE_SEC_BASE_LOW_AR_0,
454 +@@ -362,7 +387,7 @@ static u64 gaudi_rr_hbw_base_low_ar_regs[GAUDI_NUMBER_OF_RR_REGS] = {
455 + mmNIF_RTR_CTRL_7_RANGE_SEC_BASE_LOW_AR_0
456 + };
457 +
458 +-static u64 gaudi_rr_hbw_base_high_ar_regs[GAUDI_NUMBER_OF_RR_REGS] = {
459 ++static u64 gaudi_rr_hbw_base_high_ar_regs[GAUDI_NUMBER_OF_HBW_RR_REGS] = {
460 + mmDMA_IF_W_S_DOWN_CH0_RANGE_SEC_BASE_HIGH_AR_0,
461 + mmDMA_IF_W_S_DOWN_CH1_RANGE_SEC_BASE_HIGH_AR_0,
462 + mmDMA_IF_E_S_DOWN_CH0_RANGE_SEC_BASE_HIGH_AR_0,
463 +@@ -389,7 +414,7 @@ static u64 gaudi_rr_hbw_base_high_ar_regs[GAUDI_NUMBER_OF_RR_REGS] = {
464 + mmNIF_RTR_CTRL_7_RANGE_SEC_BASE_HIGH_AR_0
465 + };
466 +
467 +-static u64 gaudi_rr_hbw_mask_low_ar_regs[GAUDI_NUMBER_OF_RR_REGS] = {
468 ++static u64 gaudi_rr_hbw_mask_low_ar_regs[GAUDI_NUMBER_OF_HBW_RR_REGS] = {
469 + mmDMA_IF_W_S_DOWN_CH0_RANGE_SEC_MASK_LOW_AR_0,
470 + mmDMA_IF_W_S_DOWN_CH1_RANGE_SEC_MASK_LOW_AR_0,
471 + mmDMA_IF_E_S_DOWN_CH0_RANGE_SEC_MASK_LOW_AR_0,
472 +@@ -416,7 +441,7 @@ static u64 gaudi_rr_hbw_mask_low_ar_regs[GAUDI_NUMBER_OF_RR_REGS] = {
473 + mmNIF_RTR_CTRL_7_RANGE_SEC_MASK_LOW_AR_0
474 + };
475 +
476 +-static u64 gaudi_rr_hbw_mask_high_ar_regs[GAUDI_NUMBER_OF_RR_REGS] = {
477 ++static u64 gaudi_rr_hbw_mask_high_ar_regs[GAUDI_NUMBER_OF_HBW_RR_REGS] = {
478 + mmDMA_IF_W_S_DOWN_CH0_RANGE_SEC_MASK_HIGH_AR_0,
479 + mmDMA_IF_W_S_DOWN_CH1_RANGE_SEC_MASK_HIGH_AR_0,
480 + mmDMA_IF_E_S_DOWN_CH0_RANGE_SEC_MASK_HIGH_AR_0,
481 +@@ -8870,50 +8895,44 @@ static void gaudi_init_range_registers_lbw(struct hl_device *hdev)
482 + u32 lbw_rng_end[GAUDI_NUMBER_OF_LBW_RANGES];
483 + int i, j;
484 +
485 +- lbw_rng_start[0] = (0xFBFE0000 & 0x3FFFFFF) - 1;
486 +- lbw_rng_end[0] = (0xFBFFF000 & 0x3FFFFFF) + 1;
487 ++ lbw_rng_start[0] = (0xFC0E8000 & 0x3FFFFFF) - 1; /* 0x000E7FFF */
488 ++ lbw_rng_end[0] = (0xFC11FFFF & 0x3FFFFFF) + 1; /* 0x00120000 */
489 +
490 +- lbw_rng_start[1] = (0xFC0E8000 & 0x3FFFFFF) - 1;
491 +- lbw_rng_end[1] = (0xFC120000 & 0x3FFFFFF) + 1;
492 ++ lbw_rng_start[1] = (0xFC1E8000 & 0x3FFFFFF) - 1; /* 0x001E7FFF */
493 ++ lbw_rng_end[1] = (0xFC48FFFF & 0x3FFFFFF) + 1; /* 0x00490000 */
494 +
495 +- lbw_rng_start[2] = (0xFC1E8000 & 0x3FFFFFF) - 1;
496 +- lbw_rng_end[2] = (0xFC48FFFF & 0x3FFFFFF) + 1;
497 ++ lbw_rng_start[2] = (0xFC600000 & 0x3FFFFFF) - 1; /* 0x005FFFFF */
498 ++ lbw_rng_end[2] = (0xFCC48FFF & 0x3FFFFFF) + 1; /* 0x00C49000 */
499 +
500 +- lbw_rng_start[3] = (0xFC600000 & 0x3FFFFFF) - 1;
501 +- lbw_rng_end[3] = (0xFCC48FFF & 0x3FFFFFF) + 1;
502 ++ lbw_rng_start[3] = (0xFCC4A000 & 0x3FFFFFF) - 1; /* 0x00C49FFF */
503 ++ lbw_rng_end[3] = (0xFCCDFFFF & 0x3FFFFFF) + 1; /* 0x00CE0000 */
504 +
505 +- lbw_rng_start[4] = (0xFCC4A000 & 0x3FFFFFF) - 1;
506 +- lbw_rng_end[4] = (0xFCCDFFFF & 0x3FFFFFF) + 1;
507 ++ lbw_rng_start[4] = (0xFCCE4000 & 0x3FFFFFF) - 1; /* 0x00CE3FFF */
508 ++ lbw_rng_end[4] = (0xFCD1FFFF & 0x3FFFFFF) + 1; /* 0x00D20000 */
509 +
510 +- lbw_rng_start[5] = (0xFCCE4000 & 0x3FFFFFF) - 1;
511 +- lbw_rng_end[5] = (0xFCD1FFFF & 0x3FFFFFF) + 1;
512 ++ lbw_rng_start[5] = (0xFCD24000 & 0x3FFFFFF) - 1; /* 0x00D23FFF */
513 ++ lbw_rng_end[5] = (0xFCD5FFFF & 0x3FFFFFF) + 1; /* 0x00D60000 */
514 +
515 +- lbw_rng_start[6] = (0xFCD24000 & 0x3FFFFFF) - 1;
516 +- lbw_rng_end[6] = (0xFCD5FFFF & 0x3FFFFFF) + 1;
517 ++ lbw_rng_start[6] = (0xFCD64000 & 0x3FFFFFF) - 1; /* 0x00D63FFF */
518 ++ lbw_rng_end[6] = (0xFCD9FFFF & 0x3FFFFFF) + 1; /* 0x00DA0000 */
519 +
520 +- lbw_rng_start[7] = (0xFCD64000 & 0x3FFFFFF) - 1;
521 +- lbw_rng_end[7] = (0xFCD9FFFF & 0x3FFFFFF) + 1;
522 ++ lbw_rng_start[7] = (0xFCDA4000 & 0x3FFFFFF) - 1; /* 0x00DA3FFF */
523 ++ lbw_rng_end[7] = (0xFCDDFFFF & 0x3FFFFFF) + 1; /* 0x00DE0000 */
524 +
525 +- lbw_rng_start[8] = (0xFCDA4000 & 0x3FFFFFF) - 1;
526 +- lbw_rng_end[8] = (0xFCDDFFFF & 0x3FFFFFF) + 1;
527 ++ lbw_rng_start[8] = (0xFCDE4000 & 0x3FFFFFF) - 1; /* 0x00DE3FFF */
528 ++ lbw_rng_end[8] = (0xFCE05FFF & 0x3FFFFFF) + 1; /* 0x00E06000 */
529 +
530 +- lbw_rng_start[9] = (0xFCDE4000 & 0x3FFFFFF) - 1;
531 +- lbw_rng_end[9] = (0xFCE05FFF & 0x3FFFFFF) + 1;
532 ++ lbw_rng_start[9] = (0xFCFC9000 & 0x3FFFFFF) - 1; /* 0x00FC8FFF */
533 ++ lbw_rng_end[9] = (0xFFFFFFFE & 0x3FFFFFF) + 1; /* 0x03FFFFFF */
534 +
535 +- lbw_rng_start[10] = (0xFEC43000 & 0x3FFFFFF) - 1;
536 +- lbw_rng_end[10] = (0xFEC43FFF & 0x3FFFFFF) + 1;
537 +-
538 +- lbw_rng_start[11] = (0xFE484000 & 0x3FFFFFF) - 1;
539 +- lbw_rng_end[11] = (0xFE484FFF & 0x3FFFFFF) + 1;
540 +-
541 +- for (i = 0 ; i < GAUDI_NUMBER_OF_RR_REGS ; i++) {
542 ++ for (i = 0 ; i < GAUDI_NUMBER_OF_LBW_RR_REGS ; i++) {
543 + WREG32(gaudi_rr_lbw_hit_aw_regs[i],
544 + (1 << GAUDI_NUMBER_OF_LBW_RANGES) - 1);
545 + WREG32(gaudi_rr_lbw_hit_ar_regs[i],
546 + (1 << GAUDI_NUMBER_OF_LBW_RANGES) - 1);
547 + }
548 +
549 +- for (i = 0 ; i < GAUDI_NUMBER_OF_RR_REGS ; i++)
550 ++ for (i = 0 ; i < GAUDI_NUMBER_OF_LBW_RR_REGS ; i++)
551 + for (j = 0 ; j < GAUDI_NUMBER_OF_LBW_RANGES ; j++) {
552 + WREG32(gaudi_rr_lbw_min_aw_regs[i] + (j << 2),
553 + lbw_rng_start[j]);
554 +@@ -8960,12 +8979,12 @@ static void gaudi_init_range_registers_hbw(struct hl_device *hdev)
555 + * 6th range is the host
556 + */
557 +
558 +- for (i = 0 ; i < GAUDI_NUMBER_OF_RR_REGS ; i++) {
559 ++ for (i = 0 ; i < GAUDI_NUMBER_OF_HBW_RR_REGS ; i++) {
560 + WREG32(gaudi_rr_hbw_hit_aw_regs[i], 0x1F);
561 + WREG32(gaudi_rr_hbw_hit_ar_regs[i], 0x1D);
562 + }
563 +
564 +- for (i = 0 ; i < GAUDI_NUMBER_OF_RR_REGS ; i++) {
565 ++ for (i = 0 ; i < GAUDI_NUMBER_OF_HBW_RR_REGS ; i++) {
566 + WREG32(gaudi_rr_hbw_base_low_aw_regs[i], dram_addr_lo);
567 + WREG32(gaudi_rr_hbw_base_low_ar_regs[i], dram_addr_lo);
568 +
569 +diff --git a/drivers/net/phy/mdio_device.c b/drivers/net/phy/mdio_device.c
570 +index 0837319a52d75..797c41f5590ef 100644
571 +--- a/drivers/net/phy/mdio_device.c
572 ++++ b/drivers/net/phy/mdio_device.c
573 +@@ -179,6 +179,16 @@ static int mdio_remove(struct device *dev)
574 + return 0;
575 + }
576 +
577 ++static void mdio_shutdown(struct device *dev)
578 ++{
579 ++ struct mdio_device *mdiodev = to_mdio_device(dev);
580 ++ struct device_driver *drv = mdiodev->dev.driver;
581 ++ struct mdio_driver *mdiodrv = to_mdio_driver(drv);
582 ++
583 ++ if (mdiodrv->shutdown)
584 ++ mdiodrv->shutdown(mdiodev);
585 ++}
586 ++
587 + /**
588 + * mdio_driver_register - register an mdio_driver with the MDIO layer
589 + * @drv: new mdio_driver to register
590 +@@ -193,6 +203,7 @@ int mdio_driver_register(struct mdio_driver *drv)
591 + mdiodrv->driver.bus = &mdio_bus_type;
592 + mdiodrv->driver.probe = mdio_probe;
593 + mdiodrv->driver.remove = mdio_remove;
594 ++ mdiodrv->driver.shutdown = mdio_shutdown;
595 +
596 + retval = driver_register(&mdiodrv->driver);
597 + if (retval) {
598 +diff --git a/drivers/net/xen-netback/netback.c b/drivers/net/xen-netback/netback.c
599 +index 986b569709616..b0cbc7fead745 100644
600 +--- a/drivers/net/xen-netback/netback.c
601 ++++ b/drivers/net/xen-netback/netback.c
602 +@@ -499,7 +499,7 @@ check_frags:
603 + * the header's copy failed, and they are
604 + * sharing a slot, send an error
605 + */
606 +- if (i == 0 && sharedslot)
607 ++ if (i == 0 && !first_shinfo && sharedslot)
608 + xenvif_idx_release(queue, pending_idx,
609 + XEN_NETIF_RSP_ERROR);
610 + else
611 +diff --git a/drivers/nvme/host/fc.c b/drivers/nvme/host/fc.c
612 +index a0bcec33b0208..906cab35afe7a 100644
613 +--- a/drivers/nvme/host/fc.c
614 ++++ b/drivers/nvme/host/fc.c
615 +@@ -2486,6 +2486,7 @@ __nvme_fc_abort_outstanding_ios(struct nvme_fc_ctrl *ctrl, bool start_queues)
616 + */
617 + if (ctrl->ctrl.queue_count > 1) {
618 + nvme_stop_queues(&ctrl->ctrl);
619 ++ nvme_sync_io_queues(&ctrl->ctrl);
620 + blk_mq_tagset_busy_iter(&ctrl->tag_set,
621 + nvme_fc_terminate_exchange, &ctrl->ctrl);
622 + blk_mq_tagset_wait_completed_request(&ctrl->tag_set);
623 +@@ -2509,6 +2510,7 @@ __nvme_fc_abort_outstanding_ios(struct nvme_fc_ctrl *ctrl, bool start_queues)
624 + * clean up the admin queue. Same thing as above.
625 + */
626 + blk_mq_quiesce_queue(ctrl->ctrl.admin_q);
627 ++ blk_sync_queue(ctrl->ctrl.admin_q);
628 + blk_mq_tagset_busy_iter(&ctrl->admin_tag_set,
629 + nvme_fc_terminate_exchange, &ctrl->ctrl);
630 + blk_mq_tagset_wait_completed_request(&ctrl->admin_tag_set);
631 +@@ -2952,14 +2954,6 @@ nvme_fc_recreate_io_queues(struct nvme_fc_ctrl *ctrl)
632 + if (ctrl->ctrl.queue_count == 1)
633 + return 0;
634 +
635 +- ret = nvme_fc_create_hw_io_queues(ctrl, ctrl->ctrl.sqsize + 1);
636 +- if (ret)
637 +- goto out_free_io_queues;
638 +-
639 +- ret = nvme_fc_connect_io_queues(ctrl, ctrl->ctrl.sqsize + 1);
640 +- if (ret)
641 +- goto out_delete_hw_queues;
642 +-
643 + if (prior_ioq_cnt != nr_io_queues) {
644 + dev_info(ctrl->ctrl.device,
645 + "reconnect: revising io queue count from %d to %d\n",
646 +@@ -2969,6 +2963,14 @@ nvme_fc_recreate_io_queues(struct nvme_fc_ctrl *ctrl)
647 + nvme_unfreeze(&ctrl->ctrl);
648 + }
649 +
650 ++ ret = nvme_fc_create_hw_io_queues(ctrl, ctrl->ctrl.sqsize + 1);
651 ++ if (ret)
652 ++ goto out_free_io_queues;
653 ++
654 ++ ret = nvme_fc_connect_io_queues(ctrl, ctrl->ctrl.sqsize + 1);
655 ++ if (ret)
656 ++ goto out_delete_hw_queues;
657 ++
658 + return 0;
659 +
660 + out_delete_hw_queues:
661 +diff --git a/drivers/platform/x86/touchscreen_dmi.c b/drivers/platform/x86/touchscreen_dmi.c
662 +index 99260915122c0..59b7e90cd5875 100644
663 +--- a/drivers/platform/x86/touchscreen_dmi.c
664 ++++ b/drivers/platform/x86/touchscreen_dmi.c
665 +@@ -100,10 +100,10 @@ static const struct ts_dmi_data chuwi_hi10_air_data = {
666 + };
667 +
668 + static const struct property_entry chuwi_hi10_plus_props[] = {
669 +- PROPERTY_ENTRY_U32("touchscreen-min-x", 0),
670 +- PROPERTY_ENTRY_U32("touchscreen-min-y", 5),
671 +- PROPERTY_ENTRY_U32("touchscreen-size-x", 1914),
672 +- PROPERTY_ENTRY_U32("touchscreen-size-y", 1283),
673 ++ PROPERTY_ENTRY_U32("touchscreen-min-x", 12),
674 ++ PROPERTY_ENTRY_U32("touchscreen-min-y", 10),
675 ++ PROPERTY_ENTRY_U32("touchscreen-size-x", 1908),
676 ++ PROPERTY_ENTRY_U32("touchscreen-size-y", 1270),
677 + PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-chuwi-hi10plus.fw"),
678 + PROPERTY_ENTRY_U32("silead,max-fingers", 10),
679 + PROPERTY_ENTRY_BOOL("silead,home-button"),
680 +@@ -111,6 +111,15 @@ static const struct property_entry chuwi_hi10_plus_props[] = {
681 + };
682 +
683 + static const struct ts_dmi_data chuwi_hi10_plus_data = {
684 ++ .embedded_fw = {
685 ++ .name = "silead/gsl1680-chuwi-hi10plus.fw",
686 ++ .prefix = { 0xf0, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00 },
687 ++ .length = 34056,
688 ++ .sha256 = { 0xfd, 0x0a, 0x08, 0x08, 0x3c, 0xa6, 0x34, 0x4e,
689 ++ 0x2c, 0x49, 0x9c, 0xcd, 0x7d, 0x44, 0x9d, 0x38,
690 ++ 0x10, 0x68, 0xb5, 0xbd, 0xb7, 0x2a, 0x63, 0xb5,
691 ++ 0x67, 0x0b, 0x96, 0xbd, 0x89, 0x67, 0x85, 0x09 },
692 ++ },
693 + .acpi_name = "MSSL0017:00",
694 + .properties = chuwi_hi10_plus_props,
695 + };
696 +@@ -141,6 +150,33 @@ static const struct ts_dmi_data chuwi_hi10_pro_data = {
697 + .properties = chuwi_hi10_pro_props,
698 + };
699 +
700 ++static const struct property_entry chuwi_hibook_props[] = {
701 ++ PROPERTY_ENTRY_U32("touchscreen-min-x", 30),
702 ++ PROPERTY_ENTRY_U32("touchscreen-min-y", 4),
703 ++ PROPERTY_ENTRY_U32("touchscreen-size-x", 1892),
704 ++ PROPERTY_ENTRY_U32("touchscreen-size-y", 1276),
705 ++ PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"),
706 ++ PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"),
707 ++ PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-chuwi-hibook.fw"),
708 ++ PROPERTY_ENTRY_U32("silead,max-fingers", 10),
709 ++ PROPERTY_ENTRY_BOOL("silead,home-button"),
710 ++ { }
711 ++};
712 ++
713 ++static const struct ts_dmi_data chuwi_hibook_data = {
714 ++ .embedded_fw = {
715 ++ .name = "silead/gsl1680-chuwi-hibook.fw",
716 ++ .prefix = { 0xf0, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00 },
717 ++ .length = 40392,
718 ++ .sha256 = { 0xf7, 0xc0, 0xe8, 0x5a, 0x6c, 0xf2, 0xeb, 0x8d,
719 ++ 0x12, 0xc4, 0x45, 0xbf, 0x55, 0x13, 0x4c, 0x1a,
720 ++ 0x13, 0x04, 0x31, 0x08, 0x65, 0x73, 0xf7, 0xa8,
721 ++ 0x1b, 0x7d, 0x59, 0xc9, 0xe6, 0x97, 0xf7, 0x38 },
722 ++ },
723 ++ .acpi_name = "MSSL0017:00",
724 ++ .properties = chuwi_hibook_props,
725 ++};
726 ++
727 + static const struct property_entry chuwi_vi8_props[] = {
728 + PROPERTY_ENTRY_U32("touchscreen-min-x", 4),
729 + PROPERTY_ENTRY_U32("touchscreen-min-y", 6),
730 +@@ -936,6 +972,16 @@ const struct dmi_system_id touchscreen_dmi_table[] = {
731 + DMI_MATCH(DMI_BOARD_NAME, "Cherry Trail CR"),
732 + },
733 + },
734 ++ {
735 ++ /* Chuwi HiBook (CWI514) */
736 ++ .driver_data = (void *)&chuwi_hibook_data,
737 ++ .matches = {
738 ++ DMI_MATCH(DMI_BOARD_VENDOR, "Hampoo"),
739 ++ DMI_MATCH(DMI_BOARD_NAME, "Cherry Trail CR"),
740 ++ /* Above matches are too generic, add bios-date match */
741 ++ DMI_MATCH(DMI_BIOS_DATE, "05/07/2016"),
742 ++ },
743 ++ },
744 + {
745 + /* Chuwi Vi8 (CWI506) */
746 + .driver_data = (void *)&chuwi_vi8_data,
747 +diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
748 +index f0c0935d79099..56e2917085874 100644
749 +--- a/drivers/scsi/sd.c
750 ++++ b/drivers/scsi/sd.c
751 +@@ -3443,15 +3443,16 @@ static int sd_probe(struct device *dev)
752 + }
753 +
754 + device_initialize(&sdkp->dev);
755 +- sdkp->dev.parent = dev;
756 ++ sdkp->dev.parent = get_device(dev);
757 + sdkp->dev.class = &sd_disk_class;
758 + dev_set_name(&sdkp->dev, "%s", dev_name(dev));
759 +
760 + error = device_add(&sdkp->dev);
761 +- if (error)
762 +- goto out_free_index;
763 ++ if (error) {
764 ++ put_device(&sdkp->dev);
765 ++ goto out;
766 ++ }
767 +
768 +- get_device(dev);
769 + dev_set_drvdata(dev, sdkp);
770 +
771 + gd->major = sd_major((index & 0xf0) >> 4);
772 +diff --git a/drivers/scsi/ses.c b/drivers/scsi/ses.c
773 +index c2afba2a5414d..43e682297fd5f 100644
774 +--- a/drivers/scsi/ses.c
775 ++++ b/drivers/scsi/ses.c
776 +@@ -87,9 +87,16 @@ static int ses_recv_diag(struct scsi_device *sdev, int page_code,
777 + 0
778 + };
779 + unsigned char recv_page_code;
780 ++ unsigned int retries = SES_RETRIES;
781 ++ struct scsi_sense_hdr sshdr;
782 ++
783 ++ do {
784 ++ ret = scsi_execute_req(sdev, cmd, DMA_FROM_DEVICE, buf, bufflen,
785 ++ &sshdr, SES_TIMEOUT, 1, NULL);
786 ++ } while (ret > 0 && --retries && scsi_sense_valid(&sshdr) &&
787 ++ (sshdr.sense_key == NOT_READY ||
788 ++ (sshdr.sense_key == UNIT_ATTENTION && sshdr.asc == 0x29)));
789 +
790 +- ret = scsi_execute_req(sdev, cmd, DMA_FROM_DEVICE, buf, bufflen,
791 +- NULL, SES_TIMEOUT, SES_RETRIES, NULL);
792 + if (unlikely(ret))
793 + return ret;
794 +
795 +@@ -121,9 +128,16 @@ static int ses_send_diag(struct scsi_device *sdev, int page_code,
796 + bufflen & 0xff,
797 + 0
798 + };
799 ++ struct scsi_sense_hdr sshdr;
800 ++ unsigned int retries = SES_RETRIES;
801 ++
802 ++ do {
803 ++ result = scsi_execute_req(sdev, cmd, DMA_TO_DEVICE, buf, bufflen,
804 ++ &sshdr, SES_TIMEOUT, 1, NULL);
805 ++ } while (result > 0 && --retries && scsi_sense_valid(&sshdr) &&
806 ++ (sshdr.sense_key == NOT_READY ||
807 ++ (sshdr.sense_key == UNIT_ATTENTION && sshdr.asc == 0x29)));
808 +
809 +- result = scsi_execute_req(sdev, cmd, DMA_TO_DEVICE, buf, bufflen,
810 +- NULL, SES_TIMEOUT, SES_RETRIES, NULL);
811 + if (result)
812 + sdev_printk(KERN_ERR, sdev, "SEND DIAGNOSTIC result: %8x\n",
813 + result);
814 +diff --git a/drivers/spi/spi-rockchip.c b/drivers/spi/spi-rockchip.c
815 +index 0aab37cd64e74..624273d0e727f 100644
816 +--- a/drivers/spi/spi-rockchip.c
817 ++++ b/drivers/spi/spi-rockchip.c
818 +@@ -582,6 +582,12 @@ static int rockchip_spi_transfer_one(
819 + int ret;
820 + bool use_dma;
821 +
822 ++ /* Zero length transfers won't trigger an interrupt on completion */
823 ++ if (!xfer->len) {
824 ++ spi_finalize_current_transfer(ctlr);
825 ++ return 1;
826 ++ }
827 ++
828 + WARN_ON(readl_relaxed(rs->regs + ROCKCHIP_SPI_SSIENR) &&
829 + (readl_relaxed(rs->regs + ROCKCHIP_SPI_SR) & SR_BUSY));
830 +
831 +diff --git a/drivers/thermal/qcom/tsens.c b/drivers/thermal/qcom/tsens.c
832 +index 3c4c0516e58ab..cb4f4b5224460 100644
833 +--- a/drivers/thermal/qcom/tsens.c
834 ++++ b/drivers/thermal/qcom/tsens.c
835 +@@ -415,7 +415,7 @@ static irqreturn_t tsens_critical_irq_thread(int irq, void *data)
836 + const struct tsens_sensor *s = &priv->sensor[i];
837 + u32 hw_id = s->hw_id;
838 +
839 +- if (IS_ERR(s->tzd))
840 ++ if (!s->tzd)
841 + continue;
842 + if (!tsens_threshold_violated(priv, hw_id, &d))
843 + continue;
844 +@@ -465,7 +465,7 @@ static irqreturn_t tsens_irq_thread(int irq, void *data)
845 + const struct tsens_sensor *s = &priv->sensor[i];
846 + u32 hw_id = s->hw_id;
847 +
848 +- if (IS_ERR(s->tzd))
849 ++ if (!s->tzd)
850 + continue;
851 + if (!tsens_threshold_violated(priv, hw_id, &d))
852 + continue;
853 +diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c
854 +index 6af1dcbc36564..30919f741b7fd 100644
855 +--- a/drivers/usb/dwc2/hcd.c
856 ++++ b/drivers/usb/dwc2/hcd.c
857 +@@ -5074,6 +5074,10 @@ int dwc2_hcd_init(struct dwc2_hsotg *hsotg)
858 + hcd->has_tt = 1;
859 +
860 + res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
861 ++ if (!res) {
862 ++ retval = -EINVAL;
863 ++ goto error1;
864 ++ }
865 + hcd->rsrc_start = res->start;
866 + hcd->rsrc_len = resource_size(res);
867 +
868 +diff --git a/fs/btrfs/file-item.c b/fs/btrfs/file-item.c
869 +index 48a2ea6d70921..2de1d8247494e 100644
870 +--- a/fs/btrfs/file-item.c
871 ++++ b/fs/btrfs/file-item.c
872 +@@ -568,7 +568,18 @@ blk_status_t btrfs_csum_one_bio(struct btrfs_inode *inode, struct bio *bio,
873 +
874 + if (!ordered) {
875 + ordered = btrfs_lookup_ordered_extent(inode, offset);
876 +- BUG_ON(!ordered); /* Logic error */
877 ++ /*
878 ++ * The bio range is not covered by any ordered extent,
879 ++ * must be a code logic error.
880 ++ */
881 ++ if (unlikely(!ordered)) {
882 ++ WARN(1, KERN_WARNING
883 ++ "no ordered extent for root %llu ino %llu offset %llu\n",
884 ++ inode->root->root_key.objectid,
885 ++ btrfs_ino(inode), offset);
886 ++ kvfree(sums);
887 ++ return BLK_STS_IOERR;
888 ++ }
889 + }
890 +
891 + nr_sectors = BTRFS_BYTES_TO_BLKS(fs_info,
892 +diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
893 +index d8b8764f5bd10..593e0c6d6b44e 100644
894 +--- a/fs/btrfs/volumes.c
895 ++++ b/fs/btrfs/volumes.c
896 +@@ -1147,6 +1147,19 @@ static void btrfs_close_one_device(struct btrfs_device *device)
897 + atomic_set(&device->dev_stats_ccnt, 0);
898 + extent_io_tree_release(&device->alloc_state);
899 +
900 ++ /*
901 ++ * Reset the flush error record. We might have a transient flush error
902 ++ * in this mount, and if so we aborted the current transaction and set
903 ++ * the fs to an error state, guaranteeing no super blocks can be further
904 ++ * committed. However that error might be transient and if we unmount the
905 ++ * filesystem and mount it again, we should allow the mount to succeed
906 ++ * (btrfs_check_rw_degradable() should not fail) - if after mounting the
907 ++ * filesystem again we still get flush errors, then we will again abort
908 ++ * any transaction and set the error state, guaranteeing no commits of
909 ++ * unsafe super blocks.
910 ++ */
911 ++ device->last_flush_error = 0;
912 ++
913 + /* Verify the device is back in a pristine state */
914 + ASSERT(!test_bit(BTRFS_DEV_STATE_FLUSH_SENT, &device->dev_state));
915 + ASSERT(!test_bit(BTRFS_DEV_STATE_REPLACE_TGT, &device->dev_state));
916 +diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c
917 +index ca5102773b72b..88554b640b0da 100644
918 +--- a/fs/cifs/smb2pdu.c
919 ++++ b/fs/cifs/smb2pdu.c
920 +@@ -2339,7 +2339,7 @@ create_sd_buf(umode_t mode, bool set_owner, unsigned int *len)
921 + buf->sd.OffsetDacl = cpu_to_le32(ptr - (__u8 *)&buf->sd);
922 + /* Ship the ACL for now. we will copy it into buf later. */
923 + aclptr = ptr;
924 +- ptr += sizeof(struct cifs_acl);
925 ++ ptr += sizeof(struct smb3_acl);
926 +
927 + /* create one ACE to hold the mode embedded in reserved special SID */
928 + acelen = setup_special_mode_ACE((struct cifs_ace *)ptr, (__u64)mode);
929 +@@ -2364,7 +2364,7 @@ create_sd_buf(umode_t mode, bool set_owner, unsigned int *len)
930 + acl.AclRevision = ACL_REVISION; /* See 2.4.4.1 of MS-DTYP */
931 + acl.AclSize = cpu_to_le16(acl_size);
932 + acl.AceCount = cpu_to_le16(ace_count);
933 +- memcpy(aclptr, &acl, sizeof(struct cifs_acl));
934 ++ memcpy(aclptr, &acl, sizeof(struct smb3_acl));
935 +
936 + buf->ccontext.DataLength = cpu_to_le32(ptr - (__u8 *)&buf->sd);
937 + *len = roundup(ptr - (__u8 *)buf, 8);
938 +diff --git a/fs/ext2/balloc.c b/fs/ext2/balloc.c
939 +index 1f3f4326bf3ce..c17ccc19b938e 100644
940 +--- a/fs/ext2/balloc.c
941 ++++ b/fs/ext2/balloc.c
942 +@@ -48,10 +48,9 @@ struct ext2_group_desc * ext2_get_group_desc(struct super_block * sb,
943 + struct ext2_sb_info *sbi = EXT2_SB(sb);
944 +
945 + if (block_group >= sbi->s_groups_count) {
946 +- ext2_error (sb, "ext2_get_group_desc",
947 +- "block_group >= groups_count - "
948 +- "block_group = %d, groups_count = %lu",
949 +- block_group, sbi->s_groups_count);
950 ++ WARN(1, "block_group >= groups_count - "
951 ++ "block_group = %d, groups_count = %lu",
952 ++ block_group, sbi->s_groups_count);
953 +
954 + return NULL;
955 + }
956 +@@ -59,10 +58,9 @@ struct ext2_group_desc * ext2_get_group_desc(struct super_block * sb,
957 + group_desc = block_group >> EXT2_DESC_PER_BLOCK_BITS(sb);
958 + offset = block_group & (EXT2_DESC_PER_BLOCK(sb) - 1);
959 + if (!sbi->s_group_desc[group_desc]) {
960 +- ext2_error (sb, "ext2_get_group_desc",
961 +- "Group descriptor not loaded - "
962 +- "block_group = %d, group_desc = %lu, desc = %lu",
963 +- block_group, group_desc, offset);
964 ++ WARN(1, "Group descriptor not loaded - "
965 ++ "block_group = %d, group_desc = %lu, desc = %lu",
966 ++ block_group, group_desc, offset);
967 + return NULL;
968 + }
969 +
970 +diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
971 +index 0313390fa4b44..1cdf7e0a5c22d 100644
972 +--- a/fs/nfsd/nfs4state.c
973 ++++ b/fs/nfsd/nfs4state.c
974 +@@ -3512,7 +3512,7 @@ static struct nfsd4_conn *__nfsd4_find_conn(struct svc_xprt *xpt, struct nfsd4_s
975 + }
976 +
977 + static __be32 nfsd4_match_existing_connection(struct svc_rqst *rqst,
978 +- struct nfsd4_session *session, u32 req)
979 ++ struct nfsd4_session *session, u32 req, struct nfsd4_conn **conn)
980 + {
981 + struct nfs4_client *clp = session->se_client;
982 + struct svc_xprt *xpt = rqst->rq_xprt;
983 +@@ -3535,6 +3535,8 @@ static __be32 nfsd4_match_existing_connection(struct svc_rqst *rqst,
984 + else
985 + status = nfserr_inval;
986 + spin_unlock(&clp->cl_lock);
987 ++ if (status == nfs_ok && conn)
988 ++ *conn = c;
989 + return status;
990 + }
991 +
992 +@@ -3559,8 +3561,16 @@ __be32 nfsd4_bind_conn_to_session(struct svc_rqst *rqstp,
993 + status = nfserr_wrong_cred;
994 + if (!nfsd4_mach_creds_match(session->se_client, rqstp))
995 + goto out;
996 +- status = nfsd4_match_existing_connection(rqstp, session, bcts->dir);
997 +- if (status == nfs_ok || status == nfserr_inval)
998 ++ status = nfsd4_match_existing_connection(rqstp, session,
999 ++ bcts->dir, &conn);
1000 ++ if (status == nfs_ok) {
1001 ++ if (bcts->dir == NFS4_CDFC4_FORE_OR_BOTH ||
1002 ++ bcts->dir == NFS4_CDFC4_BACK)
1003 ++ conn->cn_flags |= NFS4_CDFC4_BACK;
1004 ++ nfsd4_probe_callback(session->se_client);
1005 ++ goto out;
1006 ++ }
1007 ++ if (status == nfserr_inval)
1008 + goto out;
1009 + status = nfsd4_map_bcts_dir(&bcts->dir);
1010 + if (status)
1011 +diff --git a/include/linux/libata.h b/include/linux/libata.h
1012 +index 5f550eb27f811..57dffa0d58702 100644
1013 +--- a/include/linux/libata.h
1014 ++++ b/include/linux/libata.h
1015 +@@ -422,6 +422,7 @@ enum {
1016 + ATA_HORKAGE_NOTRIM = (1 << 24), /* don't use TRIM */
1017 + ATA_HORKAGE_MAX_SEC_1024 = (1 << 25), /* Limit max sects to 1024 */
1018 + ATA_HORKAGE_MAX_TRIM_128M = (1 << 26), /* Limit max trim size to 128M */
1019 ++ ATA_HORKAGE_NO_NCQ_ON_ATI = (1 << 27), /* Disable NCQ on ATI chipset */
1020 +
1021 + /* DMA mask for user DMA control: User visible values; DO NOT
1022 + renumber */
1023 +diff --git a/include/linux/mdio.h b/include/linux/mdio.h
1024 +index dbd69b3d170b4..de5fb4b333ce3 100644
1025 +--- a/include/linux/mdio.h
1026 ++++ b/include/linux/mdio.h
1027 +@@ -72,6 +72,9 @@ struct mdio_driver {
1028 +
1029 + /* Clears up any memory if needed */
1030 + void (*remove)(struct mdio_device *mdiodev);
1031 ++
1032 ++ /* Quiesces the device on system shutdown, turns off interrupts etc */
1033 ++ void (*shutdown)(struct mdio_device *mdiodev);
1034 + };
1035 + #define to_mdio_driver(d) \
1036 + container_of(to_mdio_common_driver(d), struct mdio_driver, mdiodrv)
1037 +diff --git a/tools/testing/selftests/kvm/steal_time.c b/tools/testing/selftests/kvm/steal_time.c
1038 +index fcc840088c919..7daedee3e7ee7 100644
1039 +--- a/tools/testing/selftests/kvm/steal_time.c
1040 ++++ b/tools/testing/selftests/kvm/steal_time.c
1041 +@@ -120,12 +120,12 @@ struct st_time {
1042 + uint64_t st_time;
1043 + };
1044 +
1045 +-static int64_t smccc(uint32_t func, uint32_t arg)
1046 ++static int64_t smccc(uint32_t func, uint64_t arg)
1047 + {
1048 + unsigned long ret;
1049 +
1050 + asm volatile(
1051 +- "mov x0, %1\n"
1052 ++ "mov w0, %w1\n"
1053 + "mov x1, %2\n"
1054 + "hvc #0\n"
1055 + "mov %0, x0\n"
1056 +diff --git a/tools/testing/selftests/kvm/x86_64/mmio_warning_test.c b/tools/testing/selftests/kvm/x86_64/mmio_warning_test.c
1057 +index e6480fd5c4bdc..8039e1eff9388 100644
1058 +--- a/tools/testing/selftests/kvm/x86_64/mmio_warning_test.c
1059 ++++ b/tools/testing/selftests/kvm/x86_64/mmio_warning_test.c
1060 +@@ -82,7 +82,8 @@ int get_warnings_count(void)
1061 + FILE *f;
1062 +
1063 + f = popen("dmesg | grep \"WARNING:\" | wc -l", "r");
1064 +- fscanf(f, "%d", &warnings);
1065 ++ if (fscanf(f, "%d", &warnings) < 1)
1066 ++ warnings = 0;
1067 + fclose(f);
1068 +
1069 + return warnings;
1070 +diff --git a/tools/testing/selftests/lib.mk b/tools/testing/selftests/lib.mk
1071 +index 0af84ad48aa77..b7217b5251f57 100644
1072 +--- a/tools/testing/selftests/lib.mk
1073 ++++ b/tools/testing/selftests/lib.mk
1074 +@@ -48,6 +48,7 @@ ARCH ?= $(SUBARCH)
1075 + # When local build is done, headers are installed in the default
1076 + # INSTALL_HDR_PATH usr/include.
1077 + .PHONY: khdr
1078 ++.NOTPARALLEL:
1079 + khdr:
1080 + ifndef KSFT_KHDR_INSTALL_DONE
1081 + ifeq (1,$(DEFAULT_INSTALL_HDR_PATH))
1082 +diff --git a/tools/usb/testusb.c b/tools/usb/testusb.c
1083 +index ee8208b2f9460..69c3ead25313d 100644
1084 +--- a/tools/usb/testusb.c
1085 ++++ b/tools/usb/testusb.c
1086 +@@ -265,12 +265,6 @@ nomem:
1087 + }
1088 +
1089 + entry->ifnum = ifnum;
1090 +-
1091 +- /* FIXME update USBDEVFS_CONNECTINFO so it tells about high speed etc */
1092 +-
1093 +- fprintf(stderr, "%s speed\t%s\t%u\n",
1094 +- speed(entry->speed), entry->name, entry->ifnum);
1095 +-
1096 + entry->next = testdevs;
1097 + testdevs = entry;
1098 + return 0;
1099 +@@ -299,6 +293,14 @@ static void *handle_testdev (void *arg)
1100 + return 0;
1101 + }
1102 +
1103 ++ status = ioctl(fd, USBDEVFS_GET_SPEED, NULL);
1104 ++ if (status < 0)
1105 ++ fprintf(stderr, "USBDEVFS_GET_SPEED failed %d\n", status);
1106 ++ else
1107 ++ dev->speed = status;
1108 ++ fprintf(stderr, "%s speed\t%s\t%u\n",
1109 ++ speed(dev->speed), dev->name, dev->ifnum);
1110 ++
1111 + restart:
1112 + for (i = 0; i < TEST_CASES; i++) {
1113 + if (dev->test != -1 && dev->test != i)
1114 +diff --git a/tools/vm/page-types.c b/tools/vm/page-types.c
1115 +index 0517c744b04e8..f62f10c988db1 100644
1116 +--- a/tools/vm/page-types.c
1117 ++++ b/tools/vm/page-types.c
1118 +@@ -1331,7 +1331,7 @@ int main(int argc, char *argv[])
1119 + if (opt_list && opt_list_mapcnt)
1120 + kpagecount_fd = checked_open(PROC_KPAGECOUNT, O_RDONLY);
1121 +
1122 +- if (opt_mark_idle && opt_file)
1123 ++ if (opt_mark_idle)
1124 + page_idle_fd = checked_open(SYS_KERNEL_MM_PAGE_IDLE, O_RDWR);
1125 +
1126 + if (opt_list && opt_pid)
1127 +diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
1128 +index 0e4310c415a8d..57c0c3b18bde7 100644
1129 +--- a/virt/kvm/kvm_main.c
1130 ++++ b/virt/kvm/kvm_main.c
1131 +@@ -2756,15 +2756,19 @@ out:
1132 +
1133 + static void shrink_halt_poll_ns(struct kvm_vcpu *vcpu)
1134 + {
1135 +- unsigned int old, val, shrink;
1136 ++ unsigned int old, val, shrink, grow_start;
1137 +
1138 + old = val = vcpu->halt_poll_ns;
1139 + shrink = READ_ONCE(halt_poll_ns_shrink);
1140 ++ grow_start = READ_ONCE(halt_poll_ns_grow_start);
1141 + if (shrink == 0)
1142 + val = 0;
1143 + else
1144 + val /= shrink;
1145 +
1146 ++ if (val < grow_start)
1147 ++ val = 0;
1148 ++
1149 + vcpu->halt_poll_ns = val;
1150 + trace_kvm_halt_poll_ns_shrink(vcpu->vcpu_id, val, old);
1151 + }