Magellan Linux

Contents of /trunk/kernel-alx/patches-4.9/0184-4.9.85-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3204 - (show annotations) (download)
Wed Aug 8 14:26:08 2018 UTC (5 years, 8 months ago) by niro
File size: 48522 byte(s)
-linux-4.9.85
1 diff --git a/Makefile b/Makefile
2 index db13b13cdcc2..77deaa395d69 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,6 +1,6 @@
6 VERSION = 4
7 PATCHLEVEL = 9
8 -SUBLEVEL = 84
9 +SUBLEVEL = 85
10 EXTRAVERSION =
11 NAME = Roaring Lionus
12
13 diff --git a/arch/arm64/kernel/traps.c b/arch/arm64/kernel/traps.c
14 index c743d1fd8286..5963be2e05f0 100644
15 --- a/arch/arm64/kernel/traps.c
16 +++ b/arch/arm64/kernel/traps.c
17 @@ -50,7 +50,7 @@ static const char *handler[]= {
18 "Error"
19 };
20
21 -int show_unhandled_signals = 1;
22 +int show_unhandled_signals = 0;
23
24 /*
25 * Dump out the contents of some kernel memory nicely...
26 diff --git a/arch/x86/entry/entry_64.S b/arch/x86/entry/entry_64.S
27 index db5009ce065a..8d7e4d48db0d 100644
28 --- a/arch/x86/entry/entry_64.S
29 +++ b/arch/x86/entry/entry_64.S
30 @@ -176,13 +176,26 @@ GLOBAL(entry_SYSCALL_64_after_swapgs)
31 pushq %r8 /* pt_regs->r8 */
32 pushq %r9 /* pt_regs->r9 */
33 pushq %r10 /* pt_regs->r10 */
34 + /*
35 + * Clear extra registers that a speculation attack might
36 + * otherwise want to exploit. Interleave XOR with PUSH
37 + * for better uop scheduling:
38 + */
39 + xorq %r10, %r10 /* nospec r10 */
40 pushq %r11 /* pt_regs->r11 */
41 + xorq %r11, %r11 /* nospec r11 */
42 pushq %rbx /* pt_regs->rbx */
43 + xorl %ebx, %ebx /* nospec rbx */
44 pushq %rbp /* pt_regs->rbp */
45 + xorl %ebp, %ebp /* nospec rbp */
46 pushq %r12 /* pt_regs->r12 */
47 + xorq %r12, %r12 /* nospec r12 */
48 pushq %r13 /* pt_regs->r13 */
49 + xorq %r13, %r13 /* nospec r13 */
50 pushq %r14 /* pt_regs->r14 */
51 + xorq %r14, %r14 /* nospec r14 */
52 pushq %r15 /* pt_regs->r15 */
53 + xorq %r15, %r15 /* nospec r15 */
54
55 /* IRQs are off. */
56 movq %rsp, %rdi
57 diff --git a/arch/x86/oprofile/nmi_int.c b/arch/x86/oprofile/nmi_int.c
58 index 28c04123b6dd..842ca3cab6b3 100644
59 --- a/arch/x86/oprofile/nmi_int.c
60 +++ b/arch/x86/oprofile/nmi_int.c
61 @@ -472,7 +472,7 @@ static int nmi_setup(void)
62 goto fail;
63
64 for_each_possible_cpu(cpu) {
65 - if (!cpu)
66 + if (!IS_ENABLED(CONFIG_SMP) || !cpu)
67 continue;
68
69 memcpy(per_cpu(cpu_msrs, cpu).counters,
70 diff --git a/arch/xtensa/mm/init.c b/arch/xtensa/mm/init.c
71 index 80e4cfb2471a..d5abdf8878fe 100644
72 --- a/arch/xtensa/mm/init.c
73 +++ b/arch/xtensa/mm/init.c
74 @@ -77,19 +77,75 @@ void __init zones_init(void)
75 free_area_init_node(0, zones_size, ARCH_PFN_OFFSET, NULL);
76 }
77
78 +#ifdef CONFIG_HIGHMEM
79 +static void __init free_area_high(unsigned long pfn, unsigned long end)
80 +{
81 + for (; pfn < end; pfn++)
82 + free_highmem_page(pfn_to_page(pfn));
83 +}
84 +
85 +static void __init free_highpages(void)
86 +{
87 + unsigned long max_low = max_low_pfn;
88 + struct memblock_region *mem, *res;
89 +
90 + reset_all_zones_managed_pages();
91 + /* set highmem page free */
92 + for_each_memblock(memory, mem) {
93 + unsigned long start = memblock_region_memory_base_pfn(mem);
94 + unsigned long end = memblock_region_memory_end_pfn(mem);
95 +
96 + /* Ignore complete lowmem entries */
97 + if (end <= max_low)
98 + continue;
99 +
100 + if (memblock_is_nomap(mem))
101 + continue;
102 +
103 + /* Truncate partial highmem entries */
104 + if (start < max_low)
105 + start = max_low;
106 +
107 + /* Find and exclude any reserved regions */
108 + for_each_memblock(reserved, res) {
109 + unsigned long res_start, res_end;
110 +
111 + res_start = memblock_region_reserved_base_pfn(res);
112 + res_end = memblock_region_reserved_end_pfn(res);
113 +
114 + if (res_end < start)
115 + continue;
116 + if (res_start < start)
117 + res_start = start;
118 + if (res_start > end)
119 + res_start = end;
120 + if (res_end > end)
121 + res_end = end;
122 + if (res_start != start)
123 + free_area_high(start, res_start);
124 + start = res_end;
125 + if (start == end)
126 + break;
127 + }
128 +
129 + /* And now free anything which remains */
130 + if (start < end)
131 + free_area_high(start, end);
132 + }
133 +}
134 +#else
135 +static void __init free_highpages(void)
136 +{
137 +}
138 +#endif
139 +
140 /*
141 * Initialize memory pages.
142 */
143
144 void __init mem_init(void)
145 {
146 -#ifdef CONFIG_HIGHMEM
147 - unsigned long tmp;
148 -
149 - reset_all_zones_managed_pages();
150 - for (tmp = max_low_pfn; tmp < max_pfn; tmp++)
151 - free_highmem_page(pfn_to_page(tmp));
152 -#endif
153 + free_highpages();
154
155 max_mapnr = max_pfn - ARCH_PFN_OFFSET;
156 high_memory = (void *)__va(max_low_pfn << PAGE_SHIFT);
157 diff --git a/crypto/asymmetric_keys/pkcs7_verify.c b/crypto/asymmetric_keys/pkcs7_verify.c
158 index 5a37962d2199..df1bde273bba 100644
159 --- a/crypto/asymmetric_keys/pkcs7_verify.c
160 +++ b/crypto/asymmetric_keys/pkcs7_verify.c
161 @@ -261,7 +261,7 @@ static int pkcs7_verify_sig_chain(struct pkcs7_message *pkcs7,
162 sinfo->index);
163 return 0;
164 }
165 - ret = public_key_verify_signature(p->pub, p->sig);
166 + ret = public_key_verify_signature(p->pub, x509->sig);
167 if (ret < 0)
168 return ret;
169 x509->signer = p;
170 diff --git a/crypto/asymmetric_keys/public_key.c b/crypto/asymmetric_keys/public_key.c
171 index 4955eb66e361..8525fe474abd 100644
172 --- a/crypto/asymmetric_keys/public_key.c
173 +++ b/crypto/asymmetric_keys/public_key.c
174 @@ -93,9 +93,11 @@ int public_key_verify_signature(const struct public_key *pkey,
175
176 BUG_ON(!pkey);
177 BUG_ON(!sig);
178 - BUG_ON(!sig->digest);
179 BUG_ON(!sig->s);
180
181 + if (!sig->digest)
182 + return -ENOPKG;
183 +
184 alg_name = sig->pkey_algo;
185 if (strcmp(sig->pkey_algo, "rsa") == 0) {
186 /* The data wangled by the RSA algorithm is typically padded
187 diff --git a/crypto/asymmetric_keys/restrict.c b/crypto/asymmetric_keys/restrict.c
188 index 19d1afb9890f..09b1374dc619 100644
189 --- a/crypto/asymmetric_keys/restrict.c
190 +++ b/crypto/asymmetric_keys/restrict.c
191 @@ -66,8 +66,9 @@ __setup("ca_keys=", ca_keys_setup);
192 *
193 * Returns 0 if the new certificate was accepted, -ENOKEY if we couldn't find a
194 * matching parent certificate in the trusted list, -EKEYREJECTED if the
195 - * signature check fails or the key is blacklisted and some other error if
196 - * there is a matching certificate but the signature check cannot be performed.
197 + * signature check fails or the key is blacklisted, -ENOPKG if the signature
198 + * uses unsupported crypto, or some other error if there is a matching
199 + * certificate but the signature check cannot be performed.
200 */
201 int restrict_link_by_signature(struct key *trust_keyring,
202 const struct key_type *type,
203 @@ -86,6 +87,8 @@ int restrict_link_by_signature(struct key *trust_keyring,
204 return -EOPNOTSUPP;
205
206 sig = payload->data[asym_auth];
207 + if (!sig)
208 + return -ENOPKG;
209 if (!sig->auth_ids[0] && !sig->auth_ids[1])
210 return -ENOKEY;
211
212 diff --git a/drivers/android/binder.c b/drivers/android/binder.c
213 index 3b6ac80b2127..49199bd2ab93 100644
214 --- a/drivers/android/binder.c
215 +++ b/drivers/android/binder.c
216 @@ -2628,8 +2628,10 @@ static unsigned int binder_poll(struct file *filp,
217 binder_lock(__func__);
218
219 thread = binder_get_thread(proc);
220 - if (!thread)
221 + if (!thread) {
222 + binder_unlock(__func__);
223 return POLLERR;
224 + }
225
226 wait_for_proc_work = thread->transaction_stack == NULL &&
227 list_empty(&thread->todo) && thread->return_error == BR_OK;
228 diff --git a/drivers/dax/dax.c b/drivers/dax/dax.c
229 index 40be3747724d..473b44c008dd 100644
230 --- a/drivers/dax/dax.c
231 +++ b/drivers/dax/dax.c
232 @@ -453,9 +453,21 @@ static int dax_dev_pmd_fault(struct vm_area_struct *vma, unsigned long addr,
233 return rc;
234 }
235
236 +static int dax_dev_split(struct vm_area_struct *vma, unsigned long addr)
237 +{
238 + struct file *filp = vma->vm_file;
239 + struct dax_dev *dax_dev = filp->private_data;
240 + struct dax_region *dax_region = dax_dev->region;
241 +
242 + if (!IS_ALIGNED(addr, dax_region->align))
243 + return -EINVAL;
244 + return 0;
245 +}
246 +
247 static const struct vm_operations_struct dax_dev_vm_ops = {
248 .fault = dax_dev_fault,
249 .pmd_fault = dax_dev_pmd_fault,
250 + .split = dax_dev_split,
251 };
252
253 static int dax_mmap(struct file *filp, struct vm_area_struct *vma)
254 diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c
255 index 6c343a933182..0e8f8972a160 100644
256 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c
257 +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c
258 @@ -14,6 +14,16 @@
259
260 #include "amd_acpi.h"
261
262 +#define AMDGPU_PX_QUIRK_FORCE_ATPX (1 << 0)
263 +
264 +struct amdgpu_px_quirk {
265 + u32 chip_vendor;
266 + u32 chip_device;
267 + u32 subsys_vendor;
268 + u32 subsys_device;
269 + u32 px_quirk_flags;
270 +};
271 +
272 struct amdgpu_atpx_functions {
273 bool px_params;
274 bool power_cntl;
275 @@ -35,6 +45,7 @@ struct amdgpu_atpx {
276 static struct amdgpu_atpx_priv {
277 bool atpx_detected;
278 bool bridge_pm_usable;
279 + unsigned int quirks;
280 /* handle for device - and atpx */
281 acpi_handle dhandle;
282 acpi_handle other_handle;
283 @@ -205,13 +216,19 @@ static int amdgpu_atpx_validate(struct amdgpu_atpx *atpx)
284
285 atpx->is_hybrid = false;
286 if (valid_bits & ATPX_MS_HYBRID_GFX_SUPPORTED) {
287 - printk("ATPX Hybrid Graphics\n");
288 - /*
289 - * Disable legacy PM methods only when pcie port PM is usable,
290 - * otherwise the device might fail to power off or power on.
291 - */
292 - atpx->functions.power_cntl = !amdgpu_atpx_priv.bridge_pm_usable;
293 - atpx->is_hybrid = true;
294 + if (amdgpu_atpx_priv.quirks & AMDGPU_PX_QUIRK_FORCE_ATPX) {
295 + printk("ATPX Hybrid Graphics, forcing to ATPX\n");
296 + atpx->functions.power_cntl = true;
297 + atpx->is_hybrid = false;
298 + } else {
299 + printk("ATPX Hybrid Graphics\n");
300 + /*
301 + * Disable legacy PM methods only when pcie port PM is usable,
302 + * otherwise the device might fail to power off or power on.
303 + */
304 + atpx->functions.power_cntl = !amdgpu_atpx_priv.bridge_pm_usable;
305 + atpx->is_hybrid = true;
306 + }
307 }
308
309 atpx->dgpu_req_power_for_displays = false;
310 @@ -547,6 +564,31 @@ static const struct vga_switcheroo_handler amdgpu_atpx_handler = {
311 .get_client_id = amdgpu_atpx_get_client_id,
312 };
313
314 +static const struct amdgpu_px_quirk amdgpu_px_quirk_list[] = {
315 + /* HG _PR3 doesn't seem to work on this A+A weston board */
316 + { 0x1002, 0x6900, 0x1002, 0x0124, AMDGPU_PX_QUIRK_FORCE_ATPX },
317 + { 0x1002, 0x6900, 0x1028, 0x0812, AMDGPU_PX_QUIRK_FORCE_ATPX },
318 + { 0x1002, 0x6900, 0x1028, 0x0813, AMDGPU_PX_QUIRK_FORCE_ATPX },
319 + { 0, 0, 0, 0, 0 },
320 +};
321 +
322 +static void amdgpu_atpx_get_quirks(struct pci_dev *pdev)
323 +{
324 + const struct amdgpu_px_quirk *p = amdgpu_px_quirk_list;
325 +
326 + /* Apply PX quirks */
327 + while (p && p->chip_device != 0) {
328 + if (pdev->vendor == p->chip_vendor &&
329 + pdev->device == p->chip_device &&
330 + pdev->subsystem_vendor == p->subsys_vendor &&
331 + pdev->subsystem_device == p->subsys_device) {
332 + amdgpu_atpx_priv.quirks |= p->px_quirk_flags;
333 + break;
334 + }
335 + ++p;
336 + }
337 +}
338 +
339 /**
340 * amdgpu_atpx_detect - detect whether we have PX
341 *
342 @@ -570,6 +612,7 @@ static bool amdgpu_atpx_detect(void)
343
344 parent_pdev = pci_upstream_bridge(pdev);
345 d3_supported |= parent_pdev && parent_pdev->bridge_d3;
346 + amdgpu_atpx_get_quirks(pdev);
347 }
348
349 while ((pdev = pci_get_class(PCI_CLASS_DISPLAY_OTHER << 8, pdev)) != NULL) {
350 @@ -579,6 +622,7 @@ static bool amdgpu_atpx_detect(void)
351
352 parent_pdev = pci_upstream_bridge(pdev);
353 d3_supported |= parent_pdev && parent_pdev->bridge_d3;
354 + amdgpu_atpx_get_quirks(pdev);
355 }
356
357 if (has_atpx && vga_count == 2) {
358 diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
359 index ce9797b6f9c7..50f18f666d67 100644
360 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
361 +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
362 @@ -1678,8 +1678,6 @@ int amdgpu_device_init(struct amdgpu_device *adev,
363 * ignore it */
364 vga_client_register(adev->pdev, adev, NULL, amdgpu_vga_set_decode);
365
366 - if (amdgpu_runtime_pm == 1)
367 - runtime = true;
368 if (amdgpu_device_is_px(ddev))
369 runtime = true;
370 vga_switcheroo_register_client(adev->pdev, &amdgpu_switcheroo_ops, runtime);
371 diff --git a/drivers/gpu/drm/amd/amdgpu/si_dpm.c b/drivers/gpu/drm/amd/amdgpu/si_dpm.c
372 index 4cb347e88cf0..002862be2df6 100644
373 --- a/drivers/gpu/drm/amd/amdgpu/si_dpm.c
374 +++ b/drivers/gpu/drm/amd/amdgpu/si_dpm.c
375 @@ -3507,6 +3507,11 @@ static void si_apply_state_adjust_rules(struct amdgpu_device *adev,
376 max_sclk = 75000;
377 max_mclk = 80000;
378 }
379 + if ((adev->pdev->revision == 0xC3) ||
380 + (adev->pdev->device == 0x6665)) {
381 + max_sclk = 60000;
382 + max_mclk = 80000;
383 + }
384 } else if (adev->asic_type == CHIP_OLAND) {
385 if ((adev->pdev->revision == 0xC7) ||
386 (adev->pdev->revision == 0x80) ||
387 diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
388 index 0151ed2de770..c6b281aa762f 100644
389 --- a/drivers/gpu/drm/drm_edid.c
390 +++ b/drivers/gpu/drm/drm_edid.c
391 @@ -107,6 +107,9 @@ static const struct edid_quirk {
392 /* AEO model 0 reports 8 bpc, but is a 6 bpc panel */
393 { "AEO", 0, EDID_QUIRK_FORCE_6BPC },
394
395 + /* CPT panel of Asus UX303LA reports 8 bpc, but is a 6 bpc panel */
396 + { "CPT", 0x17df, EDID_QUIRK_FORCE_6BPC },
397 +
398 /* Belinea 10 15 55 */
399 { "MAX", 1516, EDID_QUIRK_PREFER_LARGE_60 },
400 { "MAX", 0x77e, EDID_QUIRK_PREFER_LARGE_60 },
401 diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
402 index 03cac5731afc..49406e106cee 100644
403 --- a/drivers/hid/hid-core.c
404 +++ b/drivers/hid/hid-core.c
405 @@ -2443,6 +2443,9 @@ static const struct hid_device_id hid_ignore_list[] = {
406 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MICROCASSYTIME) },
407 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MICROCASSYTEMPERATURE) },
408 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MICROCASSYPH) },
409 + { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_POWERANALYSERCASSY) },
410 + { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_CONVERTERCONTROLLERCASSY) },
411 + { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MACHINETESTCASSY) },
412 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_JWM) },
413 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_DMMP) },
414 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_UMIP) },
415 diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
416 index 244b97c1b74e..9347b37a1303 100644
417 --- a/drivers/hid/hid-ids.h
418 +++ b/drivers/hid/hid-ids.h
419 @@ -608,6 +608,9 @@
420 #define USB_DEVICE_ID_LD_MICROCASSYTIME 0x1033
421 #define USB_DEVICE_ID_LD_MICROCASSYTEMPERATURE 0x1035
422 #define USB_DEVICE_ID_LD_MICROCASSYPH 0x1038
423 +#define USB_DEVICE_ID_LD_POWERANALYSERCASSY 0x1040
424 +#define USB_DEVICE_ID_LD_CONVERTERCONTROLLERCASSY 0x1042
425 +#define USB_DEVICE_ID_LD_MACHINETESTCASSY 0x1043
426 #define USB_DEVICE_ID_LD_JWM 0x1080
427 #define USB_DEVICE_ID_LD_DMMP 0x1081
428 #define USB_DEVICE_ID_LD_UMIP 0x1090
429 diff --git a/drivers/iio/imu/adis_trigger.c b/drivers/iio/imu/adis_trigger.c
430 index f53e9a803a0e..93b99bd93738 100644
431 --- a/drivers/iio/imu/adis_trigger.c
432 +++ b/drivers/iio/imu/adis_trigger.c
433 @@ -47,6 +47,10 @@ int adis_probe_trigger(struct adis *adis, struct iio_dev *indio_dev)
434 if (adis->trig == NULL)
435 return -ENOMEM;
436
437 + adis->trig->dev.parent = &adis->spi->dev;
438 + adis->trig->ops = &adis_trigger_ops;
439 + iio_trigger_set_drvdata(adis->trig, adis);
440 +
441 ret = request_irq(adis->spi->irq,
442 &iio_trigger_generic_data_rdy_poll,
443 IRQF_TRIGGER_RISING,
444 @@ -55,9 +59,6 @@ int adis_probe_trigger(struct adis *adis, struct iio_dev *indio_dev)
445 if (ret)
446 goto error_free_trig;
447
448 - adis->trig->dev.parent = &adis->spi->dev;
449 - adis->trig->ops = &adis_trigger_ops;
450 - iio_trigger_set_drvdata(adis->trig, adis);
451 ret = iio_trigger_register(adis->trig);
452
453 indio_dev->trig = iio_trigger_get(adis->trig);
454 diff --git a/drivers/iio/industrialio-buffer.c b/drivers/iio/industrialio-buffer.c
455 index 158aaf44dd95..5d05c38c4ba9 100644
456 --- a/drivers/iio/industrialio-buffer.c
457 +++ b/drivers/iio/industrialio-buffer.c
458 @@ -174,7 +174,7 @@ unsigned int iio_buffer_poll(struct file *filp,
459 struct iio_dev *indio_dev = filp->private_data;
460 struct iio_buffer *rb = indio_dev->buffer;
461
462 - if (!indio_dev->info)
463 + if (!indio_dev->info || rb == NULL)
464 return 0;
465
466 poll_wait(filp, &rb->pollq, wait);
467 diff --git a/drivers/infiniband/core/umem.c b/drivers/infiniband/core/umem.c
468 index c22fde6207d1..8e973a2993a6 100644
469 --- a/drivers/infiniband/core/umem.c
470 +++ b/drivers/infiniband/core/umem.c
471 @@ -193,7 +193,7 @@ struct ib_umem *ib_umem_get(struct ib_ucontext *context, unsigned long addr,
472 sg_list_start = umem->sg_head.sgl;
473
474 while (npages) {
475 - ret = get_user_pages(cur_base,
476 + ret = get_user_pages_longterm(cur_base,
477 min_t(unsigned long, npages,
478 PAGE_SIZE / sizeof (struct page *)),
479 gup_flags, page_list, vma_list);
480 diff --git a/drivers/infiniband/core/uverbs_main.c b/drivers/infiniband/core/uverbs_main.c
481 index 44b1104eb168..c5e921bf9130 100644
482 --- a/drivers/infiniband/core/uverbs_main.c
483 +++ b/drivers/infiniband/core/uverbs_main.c
484 @@ -735,12 +735,21 @@ static int verify_command_mask(struct ib_device *ib_dev, __u32 command)
485 return -1;
486 }
487
488 +static bool verify_command_idx(u32 command, bool extended)
489 +{
490 + if (extended)
491 + return command < ARRAY_SIZE(uverbs_ex_cmd_table);
492 +
493 + return command < ARRAY_SIZE(uverbs_cmd_table);
494 +}
495 +
496 static ssize_t ib_uverbs_write(struct file *filp, const char __user *buf,
497 size_t count, loff_t *pos)
498 {
499 struct ib_uverbs_file *file = filp->private_data;
500 struct ib_device *ib_dev;
501 struct ib_uverbs_cmd_hdr hdr;
502 + bool extended_command;
503 __u32 command;
504 __u32 flags;
505 int srcu_key;
506 @@ -770,6 +779,15 @@ static ssize_t ib_uverbs_write(struct file *filp, const char __user *buf,
507 }
508
509 command = hdr.command & IB_USER_VERBS_CMD_COMMAND_MASK;
510 + flags = (hdr.command &
511 + IB_USER_VERBS_CMD_FLAGS_MASK) >> IB_USER_VERBS_CMD_FLAGS_SHIFT;
512 +
513 + extended_command = flags & IB_USER_VERBS_CMD_FLAG_EXTENDED;
514 + if (!verify_command_idx(command, extended_command)) {
515 + ret = -EINVAL;
516 + goto out;
517 + }
518 +
519 if (verify_command_mask(ib_dev, command)) {
520 ret = -EOPNOTSUPP;
521 goto out;
522 @@ -781,12 +799,8 @@ static ssize_t ib_uverbs_write(struct file *filp, const char __user *buf,
523 goto out;
524 }
525
526 - flags = (hdr.command &
527 - IB_USER_VERBS_CMD_FLAGS_MASK) >> IB_USER_VERBS_CMD_FLAGS_SHIFT;
528 -
529 if (!flags) {
530 - if (command >= ARRAY_SIZE(uverbs_cmd_table) ||
531 - !uverbs_cmd_table[command]) {
532 + if (!uverbs_cmd_table[command]) {
533 ret = -EINVAL;
534 goto out;
535 }
536 @@ -807,8 +821,7 @@ static ssize_t ib_uverbs_write(struct file *filp, const char __user *buf,
537 struct ib_udata uhw;
538 size_t written_count = count;
539
540 - if (command >= ARRAY_SIZE(uverbs_ex_cmd_table) ||
541 - !uverbs_ex_cmd_table[command]) {
542 + if (!uverbs_ex_cmd_table[command]) {
543 ret = -ENOSYS;
544 goto out;
545 }
546 diff --git a/drivers/irqchip/irq-gic-v3.c b/drivers/irqchip/irq-gic-v3.c
547 index a37576a1798d..fd4a78296b48 100644
548 --- a/drivers/irqchip/irq-gic-v3.c
549 +++ b/drivers/irqchip/irq-gic-v3.c
550 @@ -616,7 +616,7 @@ static void gic_raise_softirq(const struct cpumask *mask, unsigned int irq)
551 * Ensure that stores to Normal memory are visible to the
552 * other CPUs before issuing the IPI.
553 */
554 - smp_wmb();
555 + wmb();
556
557 for_each_cpu(cpu, mask) {
558 unsigned long cluster_id = cpu_logical_map(cpu) & ~0xffUL;
559 diff --git a/drivers/media/v4l2-core/videobuf-dma-sg.c b/drivers/media/v4l2-core/videobuf-dma-sg.c
560 index 1db0af6c7f94..b6189a4958c5 100644
561 --- a/drivers/media/v4l2-core/videobuf-dma-sg.c
562 +++ b/drivers/media/v4l2-core/videobuf-dma-sg.c
563 @@ -185,12 +185,13 @@ static int videobuf_dma_init_user_locked(struct videobuf_dmabuf *dma,
564 dprintk(1, "init user [0x%lx+0x%lx => %d pages]\n",
565 data, size, dma->nr_pages);
566
567 - err = get_user_pages(data & PAGE_MASK, dma->nr_pages,
568 + err = get_user_pages_longterm(data & PAGE_MASK, dma->nr_pages,
569 flags, dma->pages, NULL);
570
571 if (err != dma->nr_pages) {
572 dma->nr_pages = (err >= 0) ? err : 0;
573 - dprintk(1, "get_user_pages: err=%d [%d]\n", err, dma->nr_pages);
574 + dprintk(1, "get_user_pages_longterm: err=%d [%d]\n", err,
575 + dma->nr_pages);
576 return err < 0 ? err : -EINVAL;
577 }
578 return 0;
579 diff --git a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
580 index 9e073fb6870a..6fd3be69ff21 100644
581 --- a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
582 +++ b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
583 @@ -2596,7 +2596,6 @@ void t4_get_regs(struct adapter *adap, void *buf, size_t buf_size)
584 }
585
586 #define EEPROM_STAT_ADDR 0x7bfc
587 -#define VPD_SIZE 0x800
588 #define VPD_BASE 0x400
589 #define VPD_BASE_OLD 0
590 #define VPD_LEN 1024
591 @@ -2634,15 +2633,6 @@ int t4_get_raw_vpd_params(struct adapter *adapter, struct vpd_params *p)
592 if (!vpd)
593 return -ENOMEM;
594
595 - /* We have two VPD data structures stored in the adapter VPD area.
596 - * By default, Linux calculates the size of the VPD area by traversing
597 - * the first VPD area at offset 0x0, so we need to tell the OS what
598 - * our real VPD size is.
599 - */
600 - ret = pci_set_vpd_size(adapter->pdev, VPD_SIZE);
601 - if (ret < 0)
602 - goto out;
603 -
604 /* Card information normally starts at VPD_BASE but early cards had
605 * it at 0.
606 */
607 diff --git a/drivers/nvdimm/bus.c b/drivers/nvdimm/bus.c
608 index 0392eb8a0dea..8311a93cabd8 100644
609 --- a/drivers/nvdimm/bus.c
610 +++ b/drivers/nvdimm/bus.c
611 @@ -812,16 +812,17 @@ static int __nd_ioctl(struct nvdimm_bus *nvdimm_bus, struct nvdimm *nvdimm,
612 int read_only, unsigned int ioctl_cmd, unsigned long arg)
613 {
614 struct nvdimm_bus_descriptor *nd_desc = nvdimm_bus->nd_desc;
615 - size_t buf_len = 0, in_len = 0, out_len = 0;
616 static char out_env[ND_CMD_MAX_ENVELOPE];
617 static char in_env[ND_CMD_MAX_ENVELOPE];
618 const struct nd_cmd_desc *desc = NULL;
619 unsigned int cmd = _IOC_NR(ioctl_cmd);
620 void __user *p = (void __user *) arg;
621 struct device *dev = &nvdimm_bus->dev;
622 - struct nd_cmd_pkg pkg;
623 const char *cmd_name, *dimm_name;
624 + u32 in_len = 0, out_len = 0;
625 unsigned long cmd_mask;
626 + struct nd_cmd_pkg pkg;
627 + u64 buf_len = 0;
628 void *buf;
629 int rc, i;
630
631 @@ -882,7 +883,7 @@ static int __nd_ioctl(struct nvdimm_bus *nvdimm_bus, struct nvdimm *nvdimm,
632 }
633
634 if (cmd == ND_CMD_CALL) {
635 - dev_dbg(dev, "%s:%s, idx: %llu, in: %zu, out: %zu, len %zu\n",
636 + dev_dbg(dev, "%s:%s, idx: %llu, in: %u, out: %u, len %llu\n",
637 __func__, dimm_name, pkg.nd_command,
638 in_len, out_len, buf_len);
639
640 @@ -912,9 +913,9 @@ static int __nd_ioctl(struct nvdimm_bus *nvdimm_bus, struct nvdimm *nvdimm,
641 out_len += out_size;
642 }
643
644 - buf_len = out_len + in_len;
645 + buf_len = (u64) out_len + (u64) in_len;
646 if (buf_len > ND_IOCTL_MAX_BUFLEN) {
647 - dev_dbg(dev, "%s:%s cmd: %s buf_len: %zu > %d\n", __func__,
648 + dev_dbg(dev, "%s:%s cmd: %s buf_len: %llu > %d\n", __func__,
649 dimm_name, cmd_name, buf_len,
650 ND_IOCTL_MAX_BUFLEN);
651 return -EINVAL;
652 diff --git a/drivers/nvdimm/pfn_devs.c b/drivers/nvdimm/pfn_devs.c
653 index 42abdd2391c9..d6aa59ca68b9 100644
654 --- a/drivers/nvdimm/pfn_devs.c
655 +++ b/drivers/nvdimm/pfn_devs.c
656 @@ -563,6 +563,12 @@ static struct vmem_altmap *__nvdimm_setup_pfn(struct nd_pfn *nd_pfn,
657 return altmap;
658 }
659
660 +static u64 phys_pmem_align_down(struct nd_pfn *nd_pfn, u64 phys)
661 +{
662 + return min_t(u64, PHYS_SECTION_ALIGN_DOWN(phys),
663 + ALIGN_DOWN(phys, nd_pfn->align));
664 +}
665 +
666 static int nd_pfn_init(struct nd_pfn *nd_pfn)
667 {
668 u32 dax_label_reserve = is_nd_dax(&nd_pfn->dev) ? SZ_128K : 0;
669 @@ -618,13 +624,16 @@ static int nd_pfn_init(struct nd_pfn *nd_pfn)
670 start = nsio->res.start;
671 size = PHYS_SECTION_ALIGN_UP(start + size) - start;
672 if (region_intersects(start, size, IORESOURCE_SYSTEM_RAM,
673 - IORES_DESC_NONE) == REGION_MIXED) {
674 + IORES_DESC_NONE) == REGION_MIXED
675 + || !IS_ALIGNED(start + resource_size(&nsio->res),
676 + nd_pfn->align)) {
677 size = resource_size(&nsio->res);
678 - end_trunc = start + size - PHYS_SECTION_ALIGN_DOWN(start + size);
679 + end_trunc = start + size - phys_pmem_align_down(nd_pfn,
680 + start + size);
681 }
682
683 if (start_pad + end_trunc)
684 - dev_info(&nd_pfn->dev, "%s section collision, truncate %d bytes\n",
685 + dev_info(&nd_pfn->dev, "%s alignment collision, truncate %d bytes\n",
686 dev_name(&ndns->dev), start_pad + end_trunc);
687
688 /*
689 diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
690 index 98eba9127a0b..0c9edc9d7c44 100644
691 --- a/drivers/pci/quirks.c
692 +++ b/drivers/pci/quirks.c
693 @@ -3369,22 +3369,29 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PORT_RIDGE,
694
695 static void quirk_chelsio_extend_vpd(struct pci_dev *dev)
696 {
697 - pci_set_vpd_size(dev, 8192);
698 -}
699 -
700 -DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x20, quirk_chelsio_extend_vpd);
701 -DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x21, quirk_chelsio_extend_vpd);
702 -DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x22, quirk_chelsio_extend_vpd);
703 -DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x23, quirk_chelsio_extend_vpd);
704 -DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x24, quirk_chelsio_extend_vpd);
705 -DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x25, quirk_chelsio_extend_vpd);
706 -DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x26, quirk_chelsio_extend_vpd);
707 -DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x30, quirk_chelsio_extend_vpd);
708 -DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x31, quirk_chelsio_extend_vpd);
709 -DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x32, quirk_chelsio_extend_vpd);
710 -DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x35, quirk_chelsio_extend_vpd);
711 -DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x36, quirk_chelsio_extend_vpd);
712 -DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x37, quirk_chelsio_extend_vpd);
713 + int chip = (dev->device & 0xf000) >> 12;
714 + int func = (dev->device & 0x0f00) >> 8;
715 + int prod = (dev->device & 0x00ff) >> 0;
716 +
717 + /*
718 + * If this is a T3-based adapter, there's a 1KB VPD area at offset
719 + * 0xc00 which contains the preferred VPD values. If this is a T4 or
720 + * later based adapter, the special VPD is at offset 0x400 for the
721 + * Physical Functions (the SR-IOV Virtual Functions have no VPD
722 + * Capabilities). The PCI VPD Access core routines will normally
723 + * compute the size of the VPD by parsing the VPD Data Structure at
724 + * offset 0x000. This will result in silent failures when attempting
725 + * to accesses these other VPD areas which are beyond those computed
726 + * limits.
727 + */
728 + if (chip == 0x0 && prod >= 0x20)
729 + pci_set_vpd_size(dev, 8192);
730 + else if (chip >= 0x4 && func < 0x8)
731 + pci_set_vpd_size(dev, 2048);
732 +}
733 +
734 +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, PCI_ANY_ID,
735 + quirk_chelsio_extend_vpd);
736
737 #ifdef CONFIG_ACPI
738 /*
739 diff --git a/drivers/scsi/ibmvscsi/ibmvfc.h b/drivers/scsi/ibmvscsi/ibmvfc.h
740 index 9a0696f68f37..b81a53c4a9a8 100644
741 --- a/drivers/scsi/ibmvscsi/ibmvfc.h
742 +++ b/drivers/scsi/ibmvscsi/ibmvfc.h
743 @@ -367,7 +367,7 @@ enum ibmvfc_fcp_rsp_info_codes {
744 };
745
746 struct ibmvfc_fcp_rsp_info {
747 - __be16 reserved;
748 + u8 reserved[3];
749 u8 rsp_code;
750 u8 reserved2[4];
751 }__attribute__((packed, aligned (2)));
752 diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
753 index c05c4f877750..774c97bb1c08 100644
754 --- a/drivers/usb/core/quirks.c
755 +++ b/drivers/usb/core/quirks.c
756 @@ -225,6 +225,9 @@ static const struct usb_device_id usb_quirk_list[] = {
757 { USB_DEVICE(0x1a0a, 0x0200), .driver_info =
758 USB_QUIRK_LINEAR_UFRAME_INTR_BINTERVAL },
759
760 + /* Corsair K70 RGB */
761 + { USB_DEVICE(0x1b1c, 0x1b13), .driver_info = USB_QUIRK_DELAY_INIT },
762 +
763 /* Corsair Strafe RGB */
764 { USB_DEVICE(0x1b1c, 0x1b20), .driver_info = USB_QUIRK_DELAY_INIT },
765
766 diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
767 index f483c3b1e971..26efe8c7535f 100644
768 --- a/drivers/usb/dwc3/gadget.c
769 +++ b/drivers/usb/dwc3/gadget.c
770 @@ -2528,6 +2528,8 @@ static void dwc3_gadget_conndone_interrupt(struct dwc3 *dwc)
771 break;
772 }
773
774 + dwc->eps[1]->endpoint.maxpacket = dwc->gadget.ep0->maxpacket;
775 +
776 /* Enable USB2 LPM Capability */
777
778 if ((dwc->revision > DWC3_REVISION_194A) &&
779 diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c
780 index d90bf57ba30e..48f52138bb1a 100644
781 --- a/drivers/usb/gadget/function/f_fs.c
782 +++ b/drivers/usb/gadget/function/f_fs.c
783 @@ -2956,10 +2956,8 @@ static int _ffs_func_bind(struct usb_configuration *c,
784 struct ffs_data *ffs = func->ffs;
785
786 const int full = !!func->ffs->fs_descs_count;
787 - const int high = gadget_is_dualspeed(func->gadget) &&
788 - func->ffs->hs_descs_count;
789 - const int super = gadget_is_superspeed(func->gadget) &&
790 - func->ffs->ss_descs_count;
791 + const int high = !!func->ffs->hs_descs_count;
792 + const int super = !!func->ffs->ss_descs_count;
793
794 int fs_len, hs_len, ss_len, ret, i;
795 struct ffs_ep *eps_ptr;
796 diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c
797 index f6c7a2744e5c..a646ca3b0d00 100644
798 --- a/drivers/usb/host/ohci-hcd.c
799 +++ b/drivers/usb/host/ohci-hcd.c
800 @@ -73,6 +73,7 @@ static const char hcd_name [] = "ohci_hcd";
801
802 #define STATECHANGE_DELAY msecs_to_jiffies(300)
803 #define IO_WATCHDOG_DELAY msecs_to_jiffies(275)
804 +#define IO_WATCHDOG_OFF 0xffffff00
805
806 #include "ohci.h"
807 #include "pci-quirks.h"
808 @@ -230,7 +231,7 @@ static int ohci_urb_enqueue (
809 }
810
811 /* Start up the I/O watchdog timer, if it's not running */
812 - if (!timer_pending(&ohci->io_watchdog) &&
813 + if (ohci->prev_frame_no == IO_WATCHDOG_OFF &&
814 list_empty(&ohci->eds_in_use) &&
815 !(ohci->flags & OHCI_QUIRK_QEMU)) {
816 ohci->prev_frame_no = ohci_frame_no(ohci);
817 @@ -501,6 +502,7 @@ static int ohci_init (struct ohci_hcd *ohci)
818
819 setup_timer(&ohci->io_watchdog, io_watchdog_func,
820 (unsigned long) ohci);
821 + ohci->prev_frame_no = IO_WATCHDOG_OFF;
822
823 ohci->hcca = dma_alloc_coherent (hcd->self.controller,
824 sizeof(*ohci->hcca), &ohci->hcca_dma, GFP_KERNEL);
825 @@ -730,7 +732,7 @@ static void io_watchdog_func(unsigned long _ohci)
826 u32 head;
827 struct ed *ed;
828 struct td *td, *td_start, *td_next;
829 - unsigned frame_no;
830 + unsigned frame_no, prev_frame_no = IO_WATCHDOG_OFF;
831 unsigned long flags;
832
833 spin_lock_irqsave(&ohci->lock, flags);
834 @@ -835,7 +837,7 @@ static void io_watchdog_func(unsigned long _ohci)
835 }
836 }
837 if (!list_empty(&ohci->eds_in_use)) {
838 - ohci->prev_frame_no = frame_no;
839 + prev_frame_no = frame_no;
840 ohci->prev_wdh_cnt = ohci->wdh_cnt;
841 ohci->prev_donehead = ohci_readl(ohci,
842 &ohci->regs->donehead);
843 @@ -845,6 +847,7 @@ static void io_watchdog_func(unsigned long _ohci)
844 }
845
846 done:
847 + ohci->prev_frame_no = prev_frame_no;
848 spin_unlock_irqrestore(&ohci->lock, flags);
849 }
850
851 @@ -973,6 +976,7 @@ static void ohci_stop (struct usb_hcd *hcd)
852 if (quirk_nec(ohci))
853 flush_work(&ohci->nec_work);
854 del_timer_sync(&ohci->io_watchdog);
855 + ohci->prev_frame_no = IO_WATCHDOG_OFF;
856
857 ohci_writel (ohci, OHCI_INTR_MIE, &ohci->regs->intrdisable);
858 ohci_usb_reset(ohci);
859 diff --git a/drivers/usb/host/ohci-hub.c b/drivers/usb/host/ohci-hub.c
860 index ed678c17c4ea..798b2d25dda9 100644
861 --- a/drivers/usb/host/ohci-hub.c
862 +++ b/drivers/usb/host/ohci-hub.c
863 @@ -310,8 +310,10 @@ static int ohci_bus_suspend (struct usb_hcd *hcd)
864 rc = ohci_rh_suspend (ohci, 0);
865 spin_unlock_irq (&ohci->lock);
866
867 - if (rc == 0)
868 + if (rc == 0) {
869 del_timer_sync(&ohci->io_watchdog);
870 + ohci->prev_frame_no = IO_WATCHDOG_OFF;
871 + }
872 return rc;
873 }
874
875 diff --git a/drivers/usb/host/ohci-q.c b/drivers/usb/host/ohci-q.c
876 index 641fed609911..24edb7674710 100644
877 --- a/drivers/usb/host/ohci-q.c
878 +++ b/drivers/usb/host/ohci-q.c
879 @@ -1018,6 +1018,8 @@ static void finish_unlinks(struct ohci_hcd *ohci)
880 * have modified this list. normally it's just prepending
881 * entries (which we'd ignore), but paranoia won't hurt.
882 */
883 + *last = ed->ed_next;
884 + ed->ed_next = NULL;
885 modified = 0;
886
887 /* unlink urbs as requested, but rescan the list after
888 @@ -1076,21 +1078,22 @@ static void finish_unlinks(struct ohci_hcd *ohci)
889 goto rescan_this;
890
891 /*
892 - * If no TDs are queued, take ED off the ed_rm_list.
893 + * If no TDs are queued, ED is now idle.
894 * Otherwise, if the HC is running, reschedule.
895 - * If not, leave it on the list for further dequeues.
896 + * If the HC isn't running, add ED back to the
897 + * start of the list for later processing.
898 */
899 if (list_empty(&ed->td_list)) {
900 - *last = ed->ed_next;
901 - ed->ed_next = NULL;
902 ed->state = ED_IDLE;
903 list_del(&ed->in_use_list);
904 } else if (ohci->rh_state == OHCI_RH_RUNNING) {
905 - *last = ed->ed_next;
906 - ed->ed_next = NULL;
907 ed_schedule(ohci, ed);
908 } else {
909 - last = &ed->ed_next;
910 + ed->ed_next = ohci->ed_rm_list;
911 + ohci->ed_rm_list = ed;
912 + /* Don't loop on the same ED */
913 + if (last == &ohci->ed_rm_list)
914 + last = &ed->ed_next;
915 }
916
917 if (modified)
918 diff --git a/drivers/usb/misc/ldusb.c b/drivers/usb/misc/ldusb.c
919 index 9ca595632f17..c5e3032a4d6b 100644
920 --- a/drivers/usb/misc/ldusb.c
921 +++ b/drivers/usb/misc/ldusb.c
922 @@ -46,6 +46,9 @@
923 #define USB_DEVICE_ID_LD_MICROCASSYTIME 0x1033 /* USB Product ID of Micro-CASSY Time (reserved) */
924 #define USB_DEVICE_ID_LD_MICROCASSYTEMPERATURE 0x1035 /* USB Product ID of Micro-CASSY Temperature */
925 #define USB_DEVICE_ID_LD_MICROCASSYPH 0x1038 /* USB Product ID of Micro-CASSY pH */
926 +#define USB_DEVICE_ID_LD_POWERANALYSERCASSY 0x1040 /* USB Product ID of Power Analyser CASSY */
927 +#define USB_DEVICE_ID_LD_CONVERTERCONTROLLERCASSY 0x1042 /* USB Product ID of Converter Controller CASSY */
928 +#define USB_DEVICE_ID_LD_MACHINETESTCASSY 0x1043 /* USB Product ID of Machine Test CASSY */
929 #define USB_DEVICE_ID_LD_JWM 0x1080 /* USB Product ID of Joule and Wattmeter */
930 #define USB_DEVICE_ID_LD_DMMP 0x1081 /* USB Product ID of Digital Multimeter P (reserved) */
931 #define USB_DEVICE_ID_LD_UMIP 0x1090 /* USB Product ID of UMI P */
932 @@ -88,6 +91,9 @@ static const struct usb_device_id ld_usb_table[] = {
933 { USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MICROCASSYTIME) },
934 { USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MICROCASSYTEMPERATURE) },
935 { USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MICROCASSYPH) },
936 + { USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_POWERANALYSERCASSY) },
937 + { USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_CONVERTERCONTROLLERCASSY) },
938 + { USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MACHINETESTCASSY) },
939 { USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_JWM) },
940 { USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_DMMP) },
941 { USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_UMIP) },
942 diff --git a/drivers/usb/musb/musb_host.c b/drivers/usb/musb/musb_host.c
943 index 55c624f2a8c0..43033895e8f6 100644
944 --- a/drivers/usb/musb/musb_host.c
945 +++ b/drivers/usb/musb/musb_host.c
946 @@ -418,13 +418,7 @@ static void musb_advance_schedule(struct musb *musb, struct urb *urb,
947 }
948 }
949
950 - /*
951 - * The pipe must be broken if current urb->status is set, so don't
952 - * start next urb.
953 - * TODO: to minimize the risk of regression, only check urb->status
954 - * for RX, until we have a test case to understand the behavior of TX.
955 - */
956 - if ((!status || !is_in) && qh && qh->is_ready) {
957 + if (qh != NULL && qh->is_ready) {
958 musb_dbg(musb, "... next ep%d %cX urb %p",
959 hw_ep->epnum, is_in ? 'R' : 'T', next_urb(qh));
960 musb_start_urb(musb, is_in, qh);
961 diff --git a/drivers/usb/renesas_usbhs/fifo.c b/drivers/usb/renesas_usbhs/fifo.c
962 index 6c6a3a8df07a..968ade5a35f5 100644
963 --- a/drivers/usb/renesas_usbhs/fifo.c
964 +++ b/drivers/usb/renesas_usbhs/fifo.c
965 @@ -1001,6 +1001,10 @@ static int usbhsf_dma_prepare_pop_with_usb_dmac(struct usbhs_pkt *pkt,
966 if ((uintptr_t)pkt->buf & (USBHS_USB_DMAC_XFER_SIZE - 1))
967 goto usbhsf_pio_prepare_pop;
968
969 + /* return at this time if the pipe is running */
970 + if (usbhs_pipe_is_running(pipe))
971 + return 0;
972 +
973 usbhs_pipe_config_change_bfre(pipe, 1);
974
975 ret = usbhsf_fifo_select(pipe, fifo, 0);
976 @@ -1191,6 +1195,7 @@ static int usbhsf_dma_pop_done_with_usb_dmac(struct usbhs_pkt *pkt,
977 usbhsf_fifo_clear(pipe, fifo);
978 pkt->actual = usbhs_dma_calc_received_size(pkt, chan, rcv_len);
979
980 + usbhs_pipe_running(pipe, 0);
981 usbhsf_dma_stop(pipe, fifo);
982 usbhsf_dma_unmap(pkt);
983 usbhsf_fifo_unselect(pipe, pipe->fifo);
984 diff --git a/fs/dax.c b/fs/dax.c
985 index 800748f10b3d..71f87d74afe1 100644
986 --- a/fs/dax.c
987 +++ b/fs/dax.c
988 @@ -785,6 +785,7 @@ int dax_writeback_mapping_range(struct address_space *mapping,
989 if (ret < 0)
990 return ret;
991 }
992 + start_index = indices[pvec.nr - 1] + 1;
993 }
994 return 0;
995 }
996 diff --git a/include/linux/dax.h b/include/linux/dax.h
997 index add6c4bc568f..ed9cf2f5cd06 100644
998 --- a/include/linux/dax.h
999 +++ b/include/linux/dax.h
1000 @@ -61,11 +61,6 @@ static inline int dax_pmd_fault(struct vm_area_struct *vma, unsigned long addr,
1001 int dax_pfn_mkwrite(struct vm_area_struct *, struct vm_fault *);
1002 #define dax_mkwrite(vma, vmf, gb) dax_fault(vma, vmf, gb)
1003
1004 -static inline bool vma_is_dax(struct vm_area_struct *vma)
1005 -{
1006 - return vma->vm_file && IS_DAX(vma->vm_file->f_mapping->host);
1007 -}
1008 -
1009 static inline bool dax_mapping(struct address_space *mapping)
1010 {
1011 return mapping->host && IS_DAX(mapping->host);
1012 diff --git a/include/linux/fs.h b/include/linux/fs.h
1013 index d705ae084edd..745ea1b2e02c 100644
1014 --- a/include/linux/fs.h
1015 +++ b/include/linux/fs.h
1016 @@ -18,6 +18,7 @@
1017 #include <linux/bug.h>
1018 #include <linux/mutex.h>
1019 #include <linux/rwsem.h>
1020 +#include <linux/mm_types.h>
1021 #include <linux/capability.h>
1022 #include <linux/semaphore.h>
1023 #include <linux/fiemap.h>
1024 @@ -3033,6 +3034,25 @@ static inline bool io_is_direct(struct file *filp)
1025 return (filp->f_flags & O_DIRECT) || IS_DAX(filp->f_mapping->host);
1026 }
1027
1028 +static inline bool vma_is_dax(struct vm_area_struct *vma)
1029 +{
1030 + return vma->vm_file && IS_DAX(vma->vm_file->f_mapping->host);
1031 +}
1032 +
1033 +static inline bool vma_is_fsdax(struct vm_area_struct *vma)
1034 +{
1035 + struct inode *inode;
1036 +
1037 + if (!vma->vm_file)
1038 + return false;
1039 + if (!vma_is_dax(vma))
1040 + return false;
1041 + inode = file_inode(vma->vm_file);
1042 + if (inode->i_mode == S_IFCHR)
1043 + return false; /* device-dax */
1044 + return true;
1045 +}
1046 +
1047 static inline int iocb_flags(struct file *file)
1048 {
1049 int res = 0;
1050 diff --git a/include/linux/kernel.h b/include/linux/kernel.h
1051 index bc6ed52a39b9..61054f12be7c 100644
1052 --- a/include/linux/kernel.h
1053 +++ b/include/linux/kernel.h
1054 @@ -46,6 +46,7 @@
1055 #define REPEAT_BYTE(x) ((~0ul / 0xff) * (x))
1056
1057 #define ALIGN(x, a) __ALIGN_KERNEL((x), (a))
1058 +#define ALIGN_DOWN(x, a) __ALIGN_KERNEL((x) - ((a) - 1), (a))
1059 #define __ALIGN_MASK(x, mask) __ALIGN_KERNEL_MASK((x), (mask))
1060 #define PTR_ALIGN(p, a) ((typeof(p))ALIGN((unsigned long)(p), (a)))
1061 #define IS_ALIGNED(x, a) (((x) & ((typeof(x))(a) - 1)) == 0)
1062 diff --git a/include/linux/mm.h b/include/linux/mm.h
1063 index 2217e2f18247..8e506783631b 100644
1064 --- a/include/linux/mm.h
1065 +++ b/include/linux/mm.h
1066 @@ -1288,6 +1288,19 @@ long __get_user_pages_unlocked(struct task_struct *tsk, struct mm_struct *mm,
1067 struct page **pages, unsigned int gup_flags);
1068 long get_user_pages_unlocked(unsigned long start, unsigned long nr_pages,
1069 struct page **pages, unsigned int gup_flags);
1070 +#ifdef CONFIG_FS_DAX
1071 +long get_user_pages_longterm(unsigned long start, unsigned long nr_pages,
1072 + unsigned int gup_flags, struct page **pages,
1073 + struct vm_area_struct **vmas);
1074 +#else
1075 +static inline long get_user_pages_longterm(unsigned long start,
1076 + unsigned long nr_pages, unsigned int gup_flags,
1077 + struct page **pages, struct vm_area_struct **vmas)
1078 +{
1079 + return get_user_pages(start, nr_pages, gup_flags, pages, vmas);
1080 +}
1081 +#endif /* CONFIG_FS_DAX */
1082 +
1083 int get_user_pages_fast(unsigned long start, int nr_pages, int write,
1084 struct page **pages);
1085
1086 diff --git a/kernel/memremap.c b/kernel/memremap.c
1087 index 426547a21a0c..f61a8c387c3e 100644
1088 --- a/kernel/memremap.c
1089 +++ b/kernel/memremap.c
1090 @@ -194,7 +194,7 @@ void put_zone_device_page(struct page *page)
1091 }
1092 EXPORT_SYMBOL(put_zone_device_page);
1093
1094 -static void pgmap_radix_release(struct resource *res)
1095 +static void pgmap_radix_release(struct resource *res, resource_size_t end_key)
1096 {
1097 resource_size_t key, align_start, align_size, align_end;
1098
1099 @@ -203,8 +203,11 @@ static void pgmap_radix_release(struct resource *res)
1100 align_end = align_start + align_size - 1;
1101
1102 mutex_lock(&pgmap_lock);
1103 - for (key = res->start; key <= res->end; key += SECTION_SIZE)
1104 + for (key = res->start; key <= res->end; key += SECTION_SIZE) {
1105 + if (key >= end_key)
1106 + break;
1107 radix_tree_delete(&pgmap_radix, key >> PA_SECTION_SHIFT);
1108 + }
1109 mutex_unlock(&pgmap_lock);
1110 }
1111
1112 @@ -255,7 +258,7 @@ static void devm_memremap_pages_release(struct device *dev, void *data)
1113 unlock_device_hotplug();
1114
1115 untrack_pfn(NULL, PHYS_PFN(align_start), align_size);
1116 - pgmap_radix_release(res);
1117 + pgmap_radix_release(res, -1);
1118 dev_WARN_ONCE(dev, pgmap->altmap && pgmap->altmap->alloc,
1119 "%s: failed to free all reserved pages\n", __func__);
1120 }
1121 @@ -289,7 +292,7 @@ struct dev_pagemap *find_dev_pagemap(resource_size_t phys)
1122 void *devm_memremap_pages(struct device *dev, struct resource *res,
1123 struct percpu_ref *ref, struct vmem_altmap *altmap)
1124 {
1125 - resource_size_t key, align_start, align_size, align_end;
1126 + resource_size_t key = 0, align_start, align_size, align_end;
1127 pgprot_t pgprot = PAGE_KERNEL;
1128 struct dev_pagemap *pgmap;
1129 struct page_map *page_map;
1130 @@ -392,7 +395,7 @@ void *devm_memremap_pages(struct device *dev, struct resource *res,
1131 untrack_pfn(NULL, PHYS_PFN(align_start), align_size);
1132 err_pfn_remap:
1133 err_radix:
1134 - pgmap_radix_release(res);
1135 + pgmap_radix_release(res, key);
1136 devres_free(page_map);
1137 return ERR_PTR(error);
1138 }
1139 diff --git a/mm/frame_vector.c b/mm/frame_vector.c
1140 index db77dcb38afd..375a103d7a56 100644
1141 --- a/mm/frame_vector.c
1142 +++ b/mm/frame_vector.c
1143 @@ -52,6 +52,18 @@ int get_vaddr_frames(unsigned long start, unsigned int nr_frames,
1144 ret = -EFAULT;
1145 goto out;
1146 }
1147 +
1148 + /*
1149 + * While get_vaddr_frames() could be used for transient (kernel
1150 + * controlled lifetime) pinning of memory pages all current
1151 + * users establish long term (userspace controlled lifetime)
1152 + * page pinning. Treat get_vaddr_frames() like
1153 + * get_user_pages_longterm() and disallow it for filesystem-dax
1154 + * mappings.
1155 + */
1156 + if (vma_is_fsdax(vma))
1157 + return -EOPNOTSUPP;
1158 +
1159 if (!(vma->vm_flags & (VM_IO | VM_PFNMAP))) {
1160 vec->got_ref = true;
1161 vec->is_pfns = false;
1162 diff --git a/mm/gup.c b/mm/gup.c
1163 index c63a0341ae38..6c3b4e822946 100644
1164 --- a/mm/gup.c
1165 +++ b/mm/gup.c
1166 @@ -982,6 +982,70 @@ long get_user_pages(unsigned long start, unsigned long nr_pages,
1167 }
1168 EXPORT_SYMBOL(get_user_pages);
1169
1170 +#ifdef CONFIG_FS_DAX
1171 +/*
1172 + * This is the same as get_user_pages() in that it assumes we are
1173 + * operating on the current task's mm, but it goes further to validate
1174 + * that the vmas associated with the address range are suitable for
1175 + * longterm elevated page reference counts. For example, filesystem-dax
1176 + * mappings are subject to the lifetime enforced by the filesystem and
1177 + * we need guarantees that longterm users like RDMA and V4L2 only
1178 + * establish mappings that have a kernel enforced revocation mechanism.
1179 + *
1180 + * "longterm" == userspace controlled elevated page count lifetime.
1181 + * Contrast this to iov_iter_get_pages() usages which are transient.
1182 + */
1183 +long get_user_pages_longterm(unsigned long start, unsigned long nr_pages,
1184 + unsigned int gup_flags, struct page **pages,
1185 + struct vm_area_struct **vmas_arg)
1186 +{
1187 + struct vm_area_struct **vmas = vmas_arg;
1188 + struct vm_area_struct *vma_prev = NULL;
1189 + long rc, i;
1190 +
1191 + if (!pages)
1192 + return -EINVAL;
1193 +
1194 + if (!vmas) {
1195 + vmas = kcalloc(nr_pages, sizeof(struct vm_area_struct *),
1196 + GFP_KERNEL);
1197 + if (!vmas)
1198 + return -ENOMEM;
1199 + }
1200 +
1201 + rc = get_user_pages(start, nr_pages, gup_flags, pages, vmas);
1202 +
1203 + for (i = 0; i < rc; i++) {
1204 + struct vm_area_struct *vma = vmas[i];
1205 +
1206 + if (vma == vma_prev)
1207 + continue;
1208 +
1209 + vma_prev = vma;
1210 +
1211 + if (vma_is_fsdax(vma))
1212 + break;
1213 + }
1214 +
1215 + /*
1216 + * Either get_user_pages() failed, or the vma validation
1217 + * succeeded, in either case we don't need to put_page() before
1218 + * returning.
1219 + */
1220 + if (i >= rc)
1221 + goto out;
1222 +
1223 + for (i = 0; i < rc; i++)
1224 + put_page(pages[i]);
1225 + rc = -EOPNOTSUPP;
1226 +out:
1227 + if (vmas != vmas_arg)
1228 + kfree(vmas);
1229 + return rc;
1230 +}
1231 +EXPORT_SYMBOL(get_user_pages_longterm);
1232 +#endif /* CONFIG_FS_DAX */
1233 +
1234 /**
1235 * populate_vma_page_range() - populate a range of pages in the vma.
1236 * @vma: target vma
1237 diff --git a/mm/memory.c b/mm/memory.c
1238 index e2e68767a373..d2db2c4eb0a4 100644
1239 --- a/mm/memory.c
1240 +++ b/mm/memory.c
1241 @@ -2848,6 +2848,17 @@ static int __do_fault(struct fault_env *fe, pgoff_t pgoff,
1242 return ret;
1243 }
1244
1245 +/*
1246 + * The ordering of these checks is important for pmds with _PAGE_DEVMAP set.
1247 + * If we check pmd_trans_unstable() first we will trip the bad_pmd() check
1248 + * inside of pmd_none_or_trans_huge_or_clear_bad(). This will end up correctly
1249 + * returning 1 but not before it spams dmesg with the pmd_clear_bad() output.
1250 + */
1251 +static int pmd_devmap_trans_unstable(pmd_t *pmd)
1252 +{
1253 + return pmd_devmap(*pmd) || pmd_trans_unstable(pmd);
1254 +}
1255 +
1256 static int pte_alloc_one_map(struct fault_env *fe)
1257 {
1258 struct vm_area_struct *vma = fe->vma;
1259 @@ -2871,18 +2882,27 @@ static int pte_alloc_one_map(struct fault_env *fe)
1260 map_pte:
1261 /*
1262 * If a huge pmd materialized under us just retry later. Use
1263 - * pmd_trans_unstable() instead of pmd_trans_huge() to ensure the pmd
1264 - * didn't become pmd_trans_huge under us and then back to pmd_none, as
1265 - * a result of MADV_DONTNEED running immediately after a huge pmd fault
1266 - * in a different thread of this mm, in turn leading to a misleading
1267 - * pmd_trans_huge() retval. All we have to ensure is that it is a
1268 - * regular pmd that we can walk with pte_offset_map() and we can do that
1269 - * through an atomic read in C, which is what pmd_trans_unstable()
1270 - * provides.
1271 + * pmd_trans_unstable() via pmd_devmap_trans_unstable() instead of
1272 + * pmd_trans_huge() to ensure the pmd didn't become pmd_trans_huge
1273 + * under us and then back to pmd_none, as a result of MADV_DONTNEED
1274 + * running immediately after a huge pmd fault in a different thread of
1275 + * this mm, in turn leading to a misleading pmd_trans_huge() retval.
1276 + * All we have to ensure is that it is a regular pmd that we can walk
1277 + * with pte_offset_map() and we can do that through an atomic read in
1278 + * C, which is what pmd_trans_unstable() provides.
1279 */
1280 - if (pmd_trans_unstable(fe->pmd) || pmd_devmap(*fe->pmd))
1281 + if (pmd_devmap_trans_unstable(fe->pmd))
1282 return VM_FAULT_NOPAGE;
1283
1284 + /*
1285 + * At this point we know that our vmf->pmd points to a page of ptes
1286 + * and it cannot become pmd_none(), pmd_devmap() or pmd_trans_huge()
1287 + * for the duration of the fault. If a racing MADV_DONTNEED runs and
1288 + * we zap the ptes pointed to by our vmf->pmd, the vmf->ptl will still
1289 + * be valid and we will re-check to make sure the vmf->pte isn't
1290 + * pte_none() under vmf->ptl protection when we return to
1291 + * alloc_set_pte().
1292 + */
1293 fe->pte = pte_offset_map_lock(vma->vm_mm, fe->pmd, fe->address,
1294 &fe->ptl);
1295 return 0;
1296 @@ -3456,7 +3476,7 @@ static int handle_pte_fault(struct fault_env *fe)
1297 fe->pte = NULL;
1298 } else {
1299 /* See comment in pte_alloc_one_map() */
1300 - if (pmd_trans_unstable(fe->pmd) || pmd_devmap(*fe->pmd))
1301 + if (pmd_devmap_trans_unstable(fe->pmd))
1302 return 0;
1303 /*
1304 * A regular pmd is established and it can't morph into a huge
1305 diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c
1306 index bf62fa487262..fd1e6b8562e0 100644
1307 --- a/net/ipv4/ip_sockglue.c
1308 +++ b/net/ipv4/ip_sockglue.c
1309 @@ -1552,10 +1552,7 @@ int ip_getsockopt(struct sock *sk, int level,
1310 if (get_user(len, optlen))
1311 return -EFAULT;
1312
1313 - lock_sock(sk);
1314 - err = nf_getsockopt(sk, PF_INET, optname, optval,
1315 - &len);
1316 - release_sock(sk);
1317 + err = nf_getsockopt(sk, PF_INET, optname, optval, &len);
1318 if (err >= 0)
1319 err = put_user(len, optlen);
1320 return err;
1321 @@ -1587,9 +1584,7 @@ int compat_ip_getsockopt(struct sock *sk, int level, int optname,
1322 if (get_user(len, optlen))
1323 return -EFAULT;
1324
1325 - lock_sock(sk);
1326 err = compat_nf_getsockopt(sk, PF_INET, optname, optval, &len);
1327 - release_sock(sk);
1328 if (err >= 0)
1329 err = put_user(len, optlen);
1330 return err;
1331 diff --git a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c
1332 index 493a32f6a5f2..c66b9a87e995 100644
1333 --- a/net/ipv6/ipv6_sockglue.c
1334 +++ b/net/ipv6/ipv6_sockglue.c
1335 @@ -1343,10 +1343,7 @@ int ipv6_getsockopt(struct sock *sk, int level, int optname,
1336 if (get_user(len, optlen))
1337 return -EFAULT;
1338
1339 - lock_sock(sk);
1340 - err = nf_getsockopt(sk, PF_INET6, optname, optval,
1341 - &len);
1342 - release_sock(sk);
1343 + err = nf_getsockopt(sk, PF_INET6, optname, optval, &len);
1344 if (err >= 0)
1345 err = put_user(len, optlen);
1346 }
1347 @@ -1385,10 +1382,7 @@ int compat_ipv6_getsockopt(struct sock *sk, int level, int optname,
1348 if (get_user(len, optlen))
1349 return -EFAULT;
1350
1351 - lock_sock(sk);
1352 - err = compat_nf_getsockopt(sk, PF_INET6,
1353 - optname, optval, &len);
1354 - release_sock(sk);
1355 + err = compat_nf_getsockopt(sk, PF_INET6, optname, optval, &len);
1356 if (err >= 0)
1357 err = put_user(len, optlen);
1358 }
1359 diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
1360 index 07001b6d36cc..dee60428c78c 100644
1361 --- a/net/mac80211/cfg.c
1362 +++ b/net/mac80211/cfg.c
1363 @@ -2792,7 +2792,7 @@ cfg80211_beacon_dup(struct cfg80211_beacon_data *beacon)
1364 }
1365 if (beacon->probe_resp_len) {
1366 new_beacon->probe_resp_len = beacon->probe_resp_len;
1367 - beacon->probe_resp = pos;
1368 + new_beacon->probe_resp = pos;
1369 memcpy(pos, beacon->probe_resp, beacon->probe_resp_len);
1370 pos += beacon->probe_resp_len;
1371 }