Magellan Linux

Contents of /trunk/kernel-alx-legacy/patches-4.9/0334-4.9.235-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3626 - (show annotations) (download)
Mon Sep 7 06:18:42 2020 UTC (3 years, 8 months ago) by niro
File size: 96262 byte(s)
-linux-4.9.235
1 diff --git a/Makefile b/Makefile
2 index e5a6f33e95de6..d21084a36bd4d 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,6 +1,6 @@
6 VERSION = 4
7 PATCHLEVEL = 9
8 -SUBLEVEL = 234
9 +SUBLEVEL = 235
10 EXTRAVERSION =
11 NAME = Roaring Lionus
12
13 diff --git a/arch/arm64/boot/dts/qcom/msm8916-pins.dtsi b/arch/arm64/boot/dts/qcom/msm8916-pins.dtsi
14 index fabc0cebe2aa2..1f9ff2cea2151 100644
15 --- a/arch/arm64/boot/dts/qcom/msm8916-pins.dtsi
16 +++ b/arch/arm64/boot/dts/qcom/msm8916-pins.dtsi
17 @@ -555,7 +555,7 @@
18 pins = "gpio63", "gpio64", "gpio65", "gpio66",
19 "gpio67", "gpio68";
20 drive-strength = <2>;
21 - bias-disable;
22 + bias-pull-down;
23 };
24 };
25 };
26 diff --git a/arch/arm64/kvm/hyp/switch.c b/arch/arm64/kvm/hyp/switch.c
27 index 115b0955715f3..ed7e3a288b4e5 100644
28 --- a/arch/arm64/kvm/hyp/switch.c
29 +++ b/arch/arm64/kvm/hyp/switch.c
30 @@ -412,7 +412,7 @@ static void __hyp_text __hyp_call_panic_nvhe(u64 spsr, u64 elr, u64 par,
31 * making sure it is a kernel address and not a PC-relative
32 * reference.
33 */
34 - asm volatile("ldr %0, =__hyp_panic_string" : "=r" (str_va));
35 + asm volatile("ldr %0, =%1" : "=r" (str_va) : "S" (__hyp_panic_string));
36
37 __hyp_do_panic(str_va,
38 spsr, elr,
39 diff --git a/arch/mips/vdso/genvdso.c b/arch/mips/vdso/genvdso.c
40 index 530a36f465ced..afcc86726448e 100644
41 --- a/arch/mips/vdso/genvdso.c
42 +++ b/arch/mips/vdso/genvdso.c
43 @@ -126,6 +126,7 @@ static void *map_vdso(const char *path, size_t *_size)
44 if (fstat(fd, &stat) != 0) {
45 fprintf(stderr, "%s: Failed to stat '%s': %s\n", program_name,
46 path, strerror(errno));
47 + close(fd);
48 return NULL;
49 }
50
51 @@ -134,6 +135,7 @@ static void *map_vdso(const char *path, size_t *_size)
52 if (addr == MAP_FAILED) {
53 fprintf(stderr, "%s: Failed to map '%s': %s\n", program_name,
54 path, strerror(errno));
55 + close(fd);
56 return NULL;
57 }
58
59 @@ -143,6 +145,7 @@ static void *map_vdso(const char *path, size_t *_size)
60 if (memcmp(ehdr->e_ident, ELFMAG, SELFMAG) != 0) {
61 fprintf(stderr, "%s: '%s' is not an ELF file\n", program_name,
62 path);
63 + close(fd);
64 return NULL;
65 }
66
67 @@ -154,6 +157,7 @@ static void *map_vdso(const char *path, size_t *_size)
68 default:
69 fprintf(stderr, "%s: '%s' has invalid ELF class\n",
70 program_name, path);
71 + close(fd);
72 return NULL;
73 }
74
75 @@ -165,6 +169,7 @@ static void *map_vdso(const char *path, size_t *_size)
76 default:
77 fprintf(stderr, "%s: '%s' has invalid ELF data order\n",
78 program_name, path);
79 + close(fd);
80 return NULL;
81 }
82
83 @@ -172,15 +177,18 @@ static void *map_vdso(const char *path, size_t *_size)
84 fprintf(stderr,
85 "%s: '%s' has invalid ELF machine (expected EM_MIPS)\n",
86 program_name, path);
87 + close(fd);
88 return NULL;
89 } else if (swap_uint16(ehdr->e_type) != ET_DYN) {
90 fprintf(stderr,
91 "%s: '%s' has invalid ELF type (expected ET_DYN)\n",
92 program_name, path);
93 + close(fd);
94 return NULL;
95 }
96
97 *_size = stat.st_size;
98 + close(fd);
99 return addr;
100 }
101
102 @@ -284,10 +292,12 @@ int main(int argc, char **argv)
103 /* Calculate and write symbol offsets to <output file> */
104 if (!get_symbols(dbg_vdso_path, dbg_vdso)) {
105 unlink(out_path);
106 + fclose(out_file);
107 return EXIT_FAILURE;
108 }
109
110 fprintf(out_file, "};\n");
111 + fclose(out_file);
112
113 return EXIT_SUCCESS;
114 }
115 diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c
116 index ba49ae6625f1b..a10b67df83bae 100644
117 --- a/arch/powerpc/perf/core-book3s.c
118 +++ b/arch/powerpc/perf/core-book3s.c
119 @@ -2042,6 +2042,10 @@ static void record_and_restart(struct perf_event *event, unsigned long val,
120
121 if (perf_event_overflow(event, &data, regs))
122 power_pmu_stop(event, 0);
123 + } else if (period) {
124 + /* Account for interrupt in case of invalid SIAR */
125 + if (perf_event_account_interrupt(event))
126 + power_pmu_stop(event, 0);
127 }
128 }
129
130 diff --git a/arch/powerpc/platforms/cell/Kconfig b/arch/powerpc/platforms/cell/Kconfig
131 index d9088f0b8fcc5..621be43433303 100644
132 --- a/arch/powerpc/platforms/cell/Kconfig
133 +++ b/arch/powerpc/platforms/cell/Kconfig
134 @@ -45,6 +45,7 @@ config SPU_FS
135 tristate "SPU file system"
136 default m
137 depends on PPC_CELL
138 + depends on COREDUMP
139 select SPU_BASE
140 select MEMORY_HOTPLUG
141 help
142 diff --git a/drivers/base/core.c b/drivers/base/core.c
143 index 69a71074dc65b..fe9f2aea84bd4 100644
144 --- a/drivers/base/core.c
145 +++ b/drivers/base/core.c
146 @@ -2348,9 +2348,9 @@ static inline bool fwnode_is_primary(struct fwnode_handle *fwnode)
147 */
148 void set_primary_fwnode(struct device *dev, struct fwnode_handle *fwnode)
149 {
150 - if (fwnode) {
151 - struct fwnode_handle *fn = dev->fwnode;
152 + struct fwnode_handle *fn = dev->fwnode;
153
154 + if (fwnode) {
155 if (fwnode_is_primary(fn))
156 fn = fn->secondary;
157
158 @@ -2360,8 +2360,12 @@ void set_primary_fwnode(struct device *dev, struct fwnode_handle *fwnode)
159 }
160 dev->fwnode = fwnode;
161 } else {
162 - dev->fwnode = fwnode_is_primary(dev->fwnode) ?
163 - dev->fwnode->secondary : NULL;
164 + if (fwnode_is_primary(fn)) {
165 + dev->fwnode = fn->secondary;
166 + fn->secondary = NULL;
167 + } else {
168 + dev->fwnode = NULL;
169 + }
170 }
171 }
172 EXPORT_SYMBOL_GPL(set_primary_fwnode);
173 diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c
174 index a2714890fe431..d707cd16ed014 100644
175 --- a/drivers/base/power/main.c
176 +++ b/drivers/base/power/main.c
177 @@ -1366,13 +1366,17 @@ static int __device_suspend(struct device *dev, pm_message_t state, bool async)
178 }
179
180 /*
181 - * If a device configured to wake up the system from sleep states
182 - * has been suspended at run time and there's a resume request pending
183 - * for it, this is equivalent to the device signaling wakeup, so the
184 - * system suspend operation should be aborted.
185 + * Wait for possible runtime PM transitions of the device in progress
186 + * to complete and if there's a runtime resume request pending for it,
187 + * resume it before proceeding with invoking the system-wide suspend
188 + * callbacks for it.
189 + *
190 + * If the system-wide suspend callbacks below change the configuration
191 + * of the device, they must disable runtime PM for it or otherwise
192 + * ensure that its runtime-resume callbacks will not be confused by that
193 + * change in case they are invoked going forward.
194 */
195 - if (pm_runtime_barrier(dev) && device_may_wakeup(dev))
196 - pm_wakeup_event(dev, 0);
197 + pm_runtime_barrier(dev);
198
199 if (pm_wakeup_pending()) {
200 dev->power.direct_complete = false;
201 diff --git a/drivers/edac/ie31200_edac.c b/drivers/edac/ie31200_edac.c
202 index 1c88d97074951..3438b98e60948 100644
203 --- a/drivers/edac/ie31200_edac.c
204 +++ b/drivers/edac/ie31200_edac.c
205 @@ -145,6 +145,8 @@
206 (n << (28 + (2 * skl) - PAGE_SHIFT))
207
208 static int nr_channels;
209 +static struct pci_dev *mci_pdev;
210 +static int ie31200_registered = 1;
211
212 struct ie31200_priv {
213 void __iomem *window;
214 @@ -512,12 +514,16 @@ fail_free:
215 static int ie31200_init_one(struct pci_dev *pdev,
216 const struct pci_device_id *ent)
217 {
218 - edac_dbg(0, "MC:\n");
219 + int rc;
220
221 + edac_dbg(0, "MC:\n");
222 if (pci_enable_device(pdev) < 0)
223 return -EIO;
224 + rc = ie31200_probe1(pdev, ent->driver_data);
225 + if (rc == 0 && !mci_pdev)
226 + mci_pdev = pci_dev_get(pdev);
227
228 - return ie31200_probe1(pdev, ent->driver_data);
229 + return rc;
230 }
231
232 static void ie31200_remove_one(struct pci_dev *pdev)
233 @@ -526,6 +532,8 @@ static void ie31200_remove_one(struct pci_dev *pdev)
234 struct ie31200_priv *priv;
235
236 edac_dbg(0, "\n");
237 + pci_dev_put(mci_pdev);
238 + mci_pdev = NULL;
239 mci = edac_mc_del_mc(&pdev->dev);
240 if (!mci)
241 return;
242 @@ -574,17 +582,53 @@ static struct pci_driver ie31200_driver = {
243
244 static int __init ie31200_init(void)
245 {
246 + int pci_rc, i;
247 +
248 edac_dbg(3, "MC:\n");
249 /* Ensure that the OPSTATE is set correctly for POLL or NMI */
250 opstate_init();
251
252 - return pci_register_driver(&ie31200_driver);
253 + pci_rc = pci_register_driver(&ie31200_driver);
254 + if (pci_rc < 0)
255 + goto fail0;
256 +
257 + if (!mci_pdev) {
258 + ie31200_registered = 0;
259 + for (i = 0; ie31200_pci_tbl[i].vendor != 0; i++) {
260 + mci_pdev = pci_get_device(ie31200_pci_tbl[i].vendor,
261 + ie31200_pci_tbl[i].device,
262 + NULL);
263 + if (mci_pdev)
264 + break;
265 + }
266 + if (!mci_pdev) {
267 + edac_dbg(0, "ie31200 pci_get_device fail\n");
268 + pci_rc = -ENODEV;
269 + goto fail1;
270 + }
271 + pci_rc = ie31200_init_one(mci_pdev, &ie31200_pci_tbl[i]);
272 + if (pci_rc < 0) {
273 + edac_dbg(0, "ie31200 init fail\n");
274 + pci_rc = -ENODEV;
275 + goto fail1;
276 + }
277 + }
278 + return 0;
279 +
280 +fail1:
281 + pci_unregister_driver(&ie31200_driver);
282 +fail0:
283 + pci_dev_put(mci_pdev);
284 +
285 + return pci_rc;
286 }
287
288 static void __exit ie31200_exit(void)
289 {
290 edac_dbg(3, "MC:\n");
291 pci_unregister_driver(&ie31200_driver);
292 + if (!ie31200_registered)
293 + ie31200_remove_one(mci_pdev);
294 }
295
296 module_init(ie31200_init);
297 diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
298 index e9311eb7b8d9f..694f631d9c90d 100644
299 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
300 +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
301 @@ -734,8 +734,10 @@ amdgpu_connector_lvds_detect(struct drm_connector *connector, bool force)
302
303 if (!drm_kms_helper_is_poll_worker()) {
304 r = pm_runtime_get_sync(connector->dev->dev);
305 - if (r < 0)
306 + if (r < 0) {
307 + pm_runtime_put_autosuspend(connector->dev->dev);
308 return connector_status_disconnected;
309 + }
310 }
311
312 if (encoder) {
313 @@ -872,8 +874,10 @@ amdgpu_connector_vga_detect(struct drm_connector *connector, bool force)
314
315 if (!drm_kms_helper_is_poll_worker()) {
316 r = pm_runtime_get_sync(connector->dev->dev);
317 - if (r < 0)
318 + if (r < 0) {
319 + pm_runtime_put_autosuspend(connector->dev->dev);
320 return connector_status_disconnected;
321 + }
322 }
323
324 encoder = amdgpu_connector_best_single_encoder(connector);
325 @@ -996,8 +1000,10 @@ amdgpu_connector_dvi_detect(struct drm_connector *connector, bool force)
326
327 if (!drm_kms_helper_is_poll_worker()) {
328 r = pm_runtime_get_sync(connector->dev->dev);
329 - if (r < 0)
330 + if (r < 0) {
331 + pm_runtime_put_autosuspend(connector->dev->dev);
332 return connector_status_disconnected;
333 + }
334 }
335
336 if (!force && amdgpu_connector_check_hpd_status_unchanged(connector)) {
337 @@ -1371,8 +1377,10 @@ amdgpu_connector_dp_detect(struct drm_connector *connector, bool force)
338
339 if (!drm_kms_helper_is_poll_worker()) {
340 r = pm_runtime_get_sync(connector->dev->dev);
341 - if (r < 0)
342 + if (r < 0) {
343 + pm_runtime_put_autosuspend(connector->dev->dev);
344 return connector_status_disconnected;
345 + }
346 }
347
348 if (!force && amdgpu_connector_check_hpd_status_unchanged(connector)) {
349 diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
350 index 15a2d8f3725d5..fdf7a18058881 100644
351 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
352 +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
353 @@ -268,7 +268,7 @@ int amdgpu_crtc_set_config(struct drm_mode_set *set)
354
355 ret = pm_runtime_get_sync(dev->dev);
356 if (ret < 0)
357 - return ret;
358 + goto out;
359
360 ret = drm_crtc_helper_set_config(set);
361
362 @@ -283,7 +283,7 @@ int amdgpu_crtc_set_config(struct drm_mode_set *set)
363 take the current one */
364 if (active && !adev->have_disp_power_ref) {
365 adev->have_disp_power_ref = true;
366 - return ret;
367 + goto out;
368 }
369 /* if we have no active crtcs, then drop the power ref
370 we got before */
371 @@ -292,6 +292,7 @@ int amdgpu_crtc_set_config(struct drm_mode_set *set)
372 adev->have_disp_power_ref = false;
373 }
374
375 +out:
376 /* drop the power reference we got coming in here */
377 pm_runtime_put_autosuspend(dev->dev);
378 return ret;
379 diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
380 index e0890deccb2fe..7cae10fec78de 100644
381 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
382 +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
383 @@ -633,11 +633,12 @@ long amdgpu_drm_ioctl(struct file *filp,
384 dev = file_priv->minor->dev;
385 ret = pm_runtime_get_sync(dev->dev);
386 if (ret < 0)
387 - return ret;
388 + goto out;
389
390 ret = drm_ioctl(filp, cmd, arg);
391
392 pm_runtime_mark_last_busy(dev->dev);
393 +out:
394 pm_runtime_put_autosuspend(dev->dev);
395 return ret;
396 }
397 diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
398 index ab5134d920d96..96fc1566f28e5 100644
399 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
400 +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
401 @@ -543,7 +543,7 @@ int amdgpu_driver_open_kms(struct drm_device *dev, struct drm_file *file_priv)
402
403 r = pm_runtime_get_sync(dev->dev);
404 if (r < 0)
405 - return r;
406 + goto pm_put;
407
408 fpriv = kzalloc(sizeof(*fpriv), GFP_KERNEL);
409 if (unlikely(!fpriv)) {
410 @@ -566,6 +566,7 @@ int amdgpu_driver_open_kms(struct drm_device *dev, struct drm_file *file_priv)
411
412 out_suspend:
413 pm_runtime_mark_last_busy(dev->dev);
414 +pm_put:
415 pm_runtime_put_autosuspend(dev->dev);
416
417 return r;
418 diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_topology.c b/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
419 index 8c6e47c5507fb..74221e096855d 100644
420 --- a/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
421 +++ b/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
422 @@ -841,8 +841,10 @@ static int kfd_build_sysfs_node_entry(struct kfd_topology_device *dev,
423
424 ret = kobject_init_and_add(dev->kobj_node, &node_type,
425 sys_props.kobj_nodes, "%d", id);
426 - if (ret < 0)
427 + if (ret < 0) {
428 + kobject_put(dev->kobj_node);
429 return ret;
430 + }
431
432 dev->kobj_mem = kobject_create_and_add("mem_banks", dev->kobj_node);
433 if (!dev->kobj_mem)
434 @@ -885,8 +887,10 @@ static int kfd_build_sysfs_node_entry(struct kfd_topology_device *dev,
435 return -ENOMEM;
436 ret = kobject_init_and_add(mem->kobj, &mem_type,
437 dev->kobj_mem, "%d", i);
438 - if (ret < 0)
439 + if (ret < 0) {
440 + kobject_put(mem->kobj);
441 return ret;
442 + }
443
444 mem->attr.name = "properties";
445 mem->attr.mode = KFD_SYSFS_FILE_MODE;
446 @@ -904,8 +908,10 @@ static int kfd_build_sysfs_node_entry(struct kfd_topology_device *dev,
447 return -ENOMEM;
448 ret = kobject_init_and_add(cache->kobj, &cache_type,
449 dev->kobj_cache, "%d", i);
450 - if (ret < 0)
451 + if (ret < 0) {
452 + kobject_put(cache->kobj);
453 return ret;
454 + }
455
456 cache->attr.name = "properties";
457 cache->attr.mode = KFD_SYSFS_FILE_MODE;
458 @@ -923,8 +929,10 @@ static int kfd_build_sysfs_node_entry(struct kfd_topology_device *dev,
459 return -ENOMEM;
460 ret = kobject_init_and_add(iolink->kobj, &iolink_type,
461 dev->kobj_iolink, "%d", i);
462 - if (ret < 0)
463 + if (ret < 0) {
464 + kobject_put(iolink->kobj);
465 return ret;
466 + }
467
468 iolink->attr.name = "properties";
469 iolink->attr.mode = KFD_SYSFS_FILE_MODE;
470 @@ -976,8 +984,10 @@ static int kfd_topology_update_sysfs(void)
471 ret = kobject_init_and_add(sys_props.kobj_topology,
472 &sysprops_type, &kfd_device->kobj,
473 "topology");
474 - if (ret < 0)
475 + if (ret < 0) {
476 + kobject_put(sys_props.kobj_topology);
477 return ret;
478 + }
479
480 sys_props.kobj_nodes = kobject_create_and_add("nodes",
481 sys_props.kobj_topology);
482 diff --git a/drivers/gpu/drm/nouveau/nouveau_connector.c b/drivers/gpu/drm/nouveau/nouveau_connector.c
483 index 5bfae1f972c74..0061deca290a4 100644
484 --- a/drivers/gpu/drm/nouveau/nouveau_connector.c
485 +++ b/drivers/gpu/drm/nouveau/nouveau_connector.c
486 @@ -281,8 +281,10 @@ nouveau_connector_detect(struct drm_connector *connector, bool force)
487 pm_runtime_get_noresume(dev->dev);
488 } else {
489 ret = pm_runtime_get_sync(dev->dev);
490 - if (ret < 0 && ret != -EACCES)
491 + if (ret < 0 && ret != -EACCES) {
492 + pm_runtime_put_autosuspend(dev->dev);
493 return conn_status;
494 + }
495 }
496
497 nv_encoder = nouveau_connector_ddc_detect(connector);
498 diff --git a/drivers/gpu/drm/nouveau/nouveau_fbcon.c b/drivers/gpu/drm/nouveau/nouveau_fbcon.c
499 index 275abc424ce25..40da9143f7220 100644
500 --- a/drivers/gpu/drm/nouveau/nouveau_fbcon.c
501 +++ b/drivers/gpu/drm/nouveau/nouveau_fbcon.c
502 @@ -183,8 +183,10 @@ nouveau_fbcon_open(struct fb_info *info, int user)
503 struct nouveau_fbdev *fbcon = info->par;
504 struct nouveau_drm *drm = nouveau_drm(fbcon->dev);
505 int ret = pm_runtime_get_sync(drm->dev->dev);
506 - if (ret < 0 && ret != -EACCES)
507 + if (ret < 0 && ret != -EACCES) {
508 + pm_runtime_put(drm->dev->dev);
509 return ret;
510 + }
511 return 0;
512 }
513
514 diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c
515 index efa875120071a..9e6c2be0cc7d4 100644
516 --- a/drivers/gpu/drm/radeon/radeon_connectors.c
517 +++ b/drivers/gpu/drm/radeon/radeon_connectors.c
518 @@ -892,8 +892,10 @@ radeon_lvds_detect(struct drm_connector *connector, bool force)
519
520 if (!drm_kms_helper_is_poll_worker()) {
521 r = pm_runtime_get_sync(connector->dev->dev);
522 - if (r < 0)
523 + if (r < 0) {
524 + pm_runtime_put_autosuspend(connector->dev->dev);
525 return connector_status_disconnected;
526 + }
527 }
528
529 if (encoder) {
530 @@ -1038,8 +1040,10 @@ radeon_vga_detect(struct drm_connector *connector, bool force)
531
532 if (!drm_kms_helper_is_poll_worker()) {
533 r = pm_runtime_get_sync(connector->dev->dev);
534 - if (r < 0)
535 + if (r < 0) {
536 + pm_runtime_put_autosuspend(connector->dev->dev);
537 return connector_status_disconnected;
538 + }
539 }
540
541 encoder = radeon_best_single_encoder(connector);
542 @@ -1176,8 +1180,10 @@ radeon_tv_detect(struct drm_connector *connector, bool force)
543
544 if (!drm_kms_helper_is_poll_worker()) {
545 r = pm_runtime_get_sync(connector->dev->dev);
546 - if (r < 0)
547 + if (r < 0) {
548 + pm_runtime_put_autosuspend(connector->dev->dev);
549 return connector_status_disconnected;
550 + }
551 }
552
553 encoder = radeon_best_single_encoder(connector);
554 @@ -1260,8 +1266,10 @@ radeon_dvi_detect(struct drm_connector *connector, bool force)
555
556 if (!drm_kms_helper_is_poll_worker()) {
557 r = pm_runtime_get_sync(connector->dev->dev);
558 - if (r < 0)
559 + if (r < 0) {
560 + pm_runtime_put_autosuspend(connector->dev->dev);
561 return connector_status_disconnected;
562 + }
563 }
564
565 if (radeon_connector->detected_hpd_without_ddc) {
566 @@ -1701,8 +1709,10 @@ radeon_dp_detect(struct drm_connector *connector, bool force)
567
568 if (!drm_kms_helper_is_poll_worker()) {
569 r = pm_runtime_get_sync(connector->dev->dev);
570 - if (r < 0)
571 + if (r < 0) {
572 + pm_runtime_put_autosuspend(connector->dev->dev);
573 return connector_status_disconnected;
574 + }
575 }
576
577 if (!force && radeon_check_hpd_status_unchanged(connector)) {
578 diff --git a/drivers/hid/i2c-hid/i2c-hid-core.c b/drivers/hid/i2c-hid/i2c-hid-core.c
579 index 850527d5fab1b..606fd875740c0 100644
580 --- a/drivers/hid/i2c-hid/i2c-hid-core.c
581 +++ b/drivers/hid/i2c-hid/i2c-hid-core.c
582 @@ -407,6 +407,19 @@ static int i2c_hid_set_power(struct i2c_client *client, int power_state)
583 dev_err(&client->dev, "failed to change power setting.\n");
584
585 set_pwr_exit:
586 +
587 + /*
588 + * The HID over I2C specification states that if a DEVICE needs time
589 + * after the PWR_ON request, it should utilise CLOCK stretching.
590 + * However, it has been observered that the Windows driver provides a
591 + * 1ms sleep between the PWR_ON and RESET requests.
592 + * According to Goodix Windows even waits 60 ms after (other?)
593 + * PWR_ON requests. Testing has confirmed that several devices
594 + * will not work properly without a delay after a PWR_ON request.
595 + */
596 + if (!ret && power_state == I2C_HID_PWR_ON)
597 + msleep(60);
598 +
599 return ret;
600 }
601
602 @@ -428,15 +441,6 @@ static int i2c_hid_hwreset(struct i2c_client *client)
603 if (ret)
604 goto out_unlock;
605
606 - /*
607 - * The HID over I2C specification states that if a DEVICE needs time
608 - * after the PWR_ON request, it should utilise CLOCK stretching.
609 - * However, it has been observered that the Windows driver provides a
610 - * 1ms sleep between the PWR_ON and RESET requests and that some devices
611 - * rely on this.
612 - */
613 - usleep_range(1000, 5000);
614 -
615 i2c_hid_dbg(ihid, "resetting...\n");
616
617 ret = i2c_hid_command(client, &hid_reset_cmd, NULL, 0);
618 diff --git a/drivers/hid/usbhid/hiddev.c b/drivers/hid/usbhid/hiddev.c
619 index dbdd265075daf..7bce23a43907e 100644
620 --- a/drivers/hid/usbhid/hiddev.c
621 +++ b/drivers/hid/usbhid/hiddev.c
622 @@ -554,12 +554,16 @@ static noinline int hiddev_ioctl_usage(struct hiddev *hiddev, unsigned int cmd,
623
624 switch (cmd) {
625 case HIDIOCGUSAGE:
626 + if (uref->usage_index >= field->report_count)
627 + goto inval;
628 uref->value = field->value[uref->usage_index];
629 if (copy_to_user(user_arg, uref, sizeof(*uref)))
630 goto fault;
631 goto goodreturn;
632
633 case HIDIOCSUSAGE:
634 + if (uref->usage_index >= field->report_count)
635 + goto inval;
636 field->value[uref->usage_index] = uref->value;
637 goto goodreturn;
638
639 diff --git a/drivers/i2c/busses/i2c-rcar.c b/drivers/i2c/busses/i2c-rcar.c
640 index 4231673435e7b..6be02da2ccc46 100644
641 --- a/drivers/i2c/busses/i2c-rcar.c
642 +++ b/drivers/i2c/busses/i2c-rcar.c
643 @@ -534,6 +534,7 @@ static bool rcar_i2c_slave_irq(struct rcar_i2c_priv *priv)
644 /* master sent stop */
645 if (ssr_filtered & SSR) {
646 i2c_slave_event(priv->slave, I2C_SLAVE_STOP, &value);
647 + rcar_i2c_write(priv, ICSCR, SIE | SDBS); /* clear our NACK */
648 rcar_i2c_write(priv, ICSIER, SAR);
649 rcar_i2c_write(priv, ICSSR, ~SSR & 0xff);
650 }
651 diff --git a/drivers/iommu/iova.c b/drivers/iommu/iova.c
652 index f106fd9782bfb..99c36a5438a75 100644
653 --- a/drivers/iommu/iova.c
654 +++ b/drivers/iommu/iova.c
655 @@ -676,7 +676,9 @@ iova_magazine_free_pfns(struct iova_magazine *mag, struct iova_domain *iovad)
656 for (i = 0 ; i < mag->size; ++i) {
657 struct iova *iova = private_find_iova(iovad, mag->pfns[i]);
658
659 - BUG_ON(!iova);
660 + if (WARN_ON(!iova))
661 + continue;
662 +
663 private_free_iova(iovad, iova);
664 }
665
666 diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c
667 index 29deda7aed040..2d3ff028f50c9 100644
668 --- a/drivers/md/dm-table.c
669 +++ b/drivers/md/dm-table.c
670 @@ -510,14 +510,14 @@ static int adjoin(struct dm_table *table, struct dm_target *ti)
671 * On the other hand, dm-switch needs to process bulk data using messages and
672 * excessive use of GFP_NOIO could cause trouble.
673 */
674 -static char **realloc_argv(unsigned *array_size, char **old_argv)
675 +static char **realloc_argv(unsigned *size, char **old_argv)
676 {
677 char **argv;
678 unsigned new_size;
679 gfp_t gfp;
680
681 - if (*array_size) {
682 - new_size = *array_size * 2;
683 + if (*size) {
684 + new_size = *size * 2;
685 gfp = GFP_KERNEL;
686 } else {
687 new_size = 8;
688 @@ -525,8 +525,8 @@ static char **realloc_argv(unsigned *array_size, char **old_argv)
689 }
690 argv = kmalloc(new_size * sizeof(*argv), gfp);
691 if (argv) {
692 - memcpy(argv, old_argv, *array_size * sizeof(*argv));
693 - *array_size = new_size;
694 + memcpy(argv, old_argv, *size * sizeof(*argv));
695 + *size = new_size;
696 }
697
698 kfree(old_argv);
699 diff --git a/drivers/media/pci/ttpci/av7110.c b/drivers/media/pci/ttpci/av7110.c
700 index 382caf200ba16..c313f51688f44 100644
701 --- a/drivers/media/pci/ttpci/av7110.c
702 +++ b/drivers/media/pci/ttpci/av7110.c
703 @@ -426,14 +426,15 @@ static void debiirq(unsigned long cookie)
704 case DATA_CI_GET:
705 {
706 u8 *data = av7110->debi_virt;
707 + u8 data_0 = data[0];
708
709 - if ((data[0] < 2) && data[2] == 0xff) {
710 + if (data_0 < 2 && data[2] == 0xff) {
711 int flags = 0;
712 if (data[5] > 0)
713 flags |= CA_CI_MODULE_PRESENT;
714 if (data[5] > 5)
715 flags |= CA_CI_MODULE_READY;
716 - av7110->ci_slot[data[0]].flags = flags;
717 + av7110->ci_slot[data_0].flags = flags;
718 } else
719 ci_get_data(&av7110->ci_rbuffer,
720 av7110->debi_virt,
721 diff --git a/drivers/media/platform/davinci/vpif_capture.c b/drivers/media/platform/davinci/vpif_capture.c
722 index 5104cc0ee40e3..a3c4cc025ed6f 100644
723 --- a/drivers/media/platform/davinci/vpif_capture.c
724 +++ b/drivers/media/platform/davinci/vpif_capture.c
725 @@ -1408,8 +1408,6 @@ probe_out:
726 /* Unregister video device */
727 video_unregister_device(&ch->video_dev);
728 }
729 - kfree(vpif_obj.sd);
730 - v4l2_device_unregister(&vpif_obj.v4l2_dev);
731
732 return err;
733 }
734 diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
735 index d52fd842ef1fe..8322129c3f987 100644
736 --- a/drivers/net/bonding/bond_main.c
737 +++ b/drivers/net/bonding/bond_main.c
738 @@ -1985,7 +1985,8 @@ static int bond_release_and_destroy(struct net_device *bond_dev,
739 int ret;
740
741 ret = bond_release(bond_dev, slave_dev);
742 - if (ret == 0 && !bond_has_slaves(bond)) {
743 + if (ret == 0 && !bond_has_slaves(bond) &&
744 + bond_dev->reg_state != NETREG_UNREGISTERING) {
745 bond_dev->priv_flags |= IFF_DISABLE_NETPOLL;
746 netdev_info(bond_dev, "Destroying bond %s\n",
747 bond_dev->name);
748 @@ -4131,13 +4132,23 @@ static netdev_tx_t bond_start_xmit(struct sk_buff *skb, struct net_device *dev)
749 return ret;
750 }
751
752 +static u32 bond_mode_bcast_speed(struct slave *slave, u32 speed)
753 +{
754 + if (speed == 0 || speed == SPEED_UNKNOWN)
755 + speed = slave->speed;
756 + else
757 + speed = min(speed, slave->speed);
758 +
759 + return speed;
760 +}
761 +
762 static int bond_ethtool_get_settings(struct net_device *bond_dev,
763 struct ethtool_cmd *ecmd)
764 {
765 struct bonding *bond = netdev_priv(bond_dev);
766 - unsigned long speed = 0;
767 struct list_head *iter;
768 struct slave *slave;
769 + u32 speed = 0;
770
771 ecmd->duplex = DUPLEX_UNKNOWN;
772 ecmd->port = PORT_OTHER;
773 @@ -4149,8 +4160,13 @@ static int bond_ethtool_get_settings(struct net_device *bond_dev,
774 */
775 bond_for_each_slave(bond, slave, iter) {
776 if (bond_slave_can_tx(slave)) {
777 - if (slave->speed != SPEED_UNKNOWN)
778 - speed += slave->speed;
779 + if (slave->speed != SPEED_UNKNOWN) {
780 + if (BOND_MODE(bond) == BOND_MODE_BROADCAST)
781 + speed = bond_mode_bcast_speed(slave,
782 + speed);
783 + else
784 + speed += slave->speed;
785 + }
786 if (ecmd->duplex == DUPLEX_UNKNOWN &&
787 slave->duplex != DUPLEX_UNKNOWN)
788 ecmd->duplex = slave->duplex;
789 diff --git a/drivers/net/ethernet/freescale/gianfar.c b/drivers/net/ethernet/freescale/gianfar.c
790 index b665d27f8e299..95ab44aa0eeab 100644
791 --- a/drivers/net/ethernet/freescale/gianfar.c
792 +++ b/drivers/net/ethernet/freescale/gianfar.c
793 @@ -844,8 +844,10 @@ static int gfar_of_init(struct platform_device *ofdev, struct net_device **pdev)
794 continue;
795
796 err = gfar_parse_group(child, priv, model);
797 - if (err)
798 + if (err) {
799 + of_node_put(child);
800 goto err_grp_init;
801 + }
802 }
803 } else { /* SQ_SG_MODE */
804 err = gfar_parse_group(np, priv, model);
805 diff --git a/drivers/net/ipvlan/ipvlan_main.c b/drivers/net/ipvlan/ipvlan_main.c
806 index 72f37e546ed24..ac757819cadb5 100644
807 --- a/drivers/net/ipvlan/ipvlan_main.c
808 +++ b/drivers/net/ipvlan/ipvlan_main.c
809 @@ -168,12 +168,21 @@ static void ipvlan_port_destroy(struct net_device *dev)
810 kfree_rcu(port, rcu);
811 }
812
813 +#define IPVLAN_ALWAYS_ON_OFLOADS \
814 + (NETIF_F_SG | NETIF_F_HW_CSUM | \
815 + NETIF_F_GSO_ROBUST | NETIF_F_GSO_SOFTWARE | NETIF_F_GSO_ENCAP_ALL)
816 +
817 +#define IPVLAN_ALWAYS_ON \
818 + (IPVLAN_ALWAYS_ON_OFLOADS | NETIF_F_LLTX | NETIF_F_VLAN_CHALLENGED)
819 +
820 #define IPVLAN_FEATURES \
821 (NETIF_F_SG | NETIF_F_HW_CSUM | NETIF_F_HIGHDMA | NETIF_F_FRAGLIST | \
822 NETIF_F_GSO | NETIF_F_TSO | NETIF_F_UFO | NETIF_F_GSO_ROBUST | \
823 NETIF_F_TSO_ECN | NETIF_F_TSO6 | NETIF_F_GRO | NETIF_F_RXCSUM | \
824 NETIF_F_HW_VLAN_CTAG_FILTER | NETIF_F_HW_VLAN_STAG_FILTER)
825
826 + /* NETIF_F_GSO_ENCAP_ALL NETIF_F_GSO_SOFTWARE Newly added */
827 +
828 #define IPVLAN_STATE_MASK \
829 ((1<<__LINK_STATE_NOCARRIER) | (1<<__LINK_STATE_DORMANT))
830
831 @@ -186,7 +195,9 @@ static int ipvlan_init(struct net_device *dev)
832 dev->state = (dev->state & ~IPVLAN_STATE_MASK) |
833 (phy_dev->state & IPVLAN_STATE_MASK);
834 dev->features = phy_dev->features & IPVLAN_FEATURES;
835 - dev->features |= NETIF_F_LLTX;
836 + dev->features |= IPVLAN_ALWAYS_ON;
837 + dev->vlan_features = phy_dev->vlan_features & IPVLAN_FEATURES;
838 + dev->vlan_features |= IPVLAN_ALWAYS_ON_OFLOADS;
839 dev->gso_max_size = phy_dev->gso_max_size;
840 dev->gso_max_segs = phy_dev->gso_max_segs;
841 dev->hard_header_len = phy_dev->hard_header_len;
842 @@ -274,7 +285,14 @@ static netdev_features_t ipvlan_fix_features(struct net_device *dev,
843 {
844 struct ipvl_dev *ipvlan = netdev_priv(dev);
845
846 - return features & (ipvlan->sfeatures | ~IPVLAN_FEATURES);
847 + features |= NETIF_F_ALL_FOR_ALL;
848 + features &= (ipvlan->sfeatures | ~IPVLAN_FEATURES);
849 + features = netdev_increment_features(ipvlan->phy_dev->features,
850 + features, features);
851 + features |= IPVLAN_ALWAYS_ON;
852 + features &= (IPVLAN_FEATURES | IPVLAN_ALWAYS_ON);
853 +
854 + return features;
855 }
856
857 static void ipvlan_change_rx_flags(struct net_device *dev, int change)
858 @@ -675,10 +693,9 @@ static int ipvlan_device_event(struct notifier_block *unused,
859
860 case NETDEV_FEAT_CHANGE:
861 list_for_each_entry(ipvlan, &port->ipvlans, pnode) {
862 - ipvlan->dev->features = dev->features & IPVLAN_FEATURES;
863 ipvlan->dev->gso_max_size = dev->gso_max_size;
864 ipvlan->dev->gso_max_segs = dev->gso_max_segs;
865 - netdev_features_change(ipvlan->dev);
866 + netdev_update_features(ipvlan->dev);
867 }
868 break;
869
870 diff --git a/drivers/net/wireless/ath/ath10k/hw.h b/drivers/net/wireless/ath/ath10k/hw.h
871 index 6038b7486f1db..e04e0260035ad 100644
872 --- a/drivers/net/wireless/ath/ath10k/hw.h
873 +++ b/drivers/net/wireless/ath/ath10k/hw.h
874 @@ -558,7 +558,7 @@ ath10k_rx_desc_get_l3_pad_bytes(struct ath10k_hw_params *hw,
875
876 #define TARGET_10_4_TX_DBG_LOG_SIZE 1024
877 #define TARGET_10_4_NUM_WDS_ENTRIES 32
878 -#define TARGET_10_4_DMA_BURST_SIZE 0
879 +#define TARGET_10_4_DMA_BURST_SIZE 1
880 #define TARGET_10_4_MAC_AGGR_DELIM 0
881 #define TARGET_10_4_RX_SKIP_DEFRAG_TIMEOUT_DUP_DETECTION_CHECK 1
882 #define TARGET_10_4_VOW_CONFIG 0
883 diff --git a/drivers/net/wireless/realtek/rtlwifi/usb.c b/drivers/net/wireless/realtek/rtlwifi/usb.c
884 index 93b22a5b6878e..e524573aa8a09 100644
885 --- a/drivers/net/wireless/realtek/rtlwifi/usb.c
886 +++ b/drivers/net/wireless/realtek/rtlwifi/usb.c
887 @@ -752,8 +752,11 @@ static int _rtl_usb_receive(struct ieee80211_hw *hw)
888
889 usb_anchor_urb(urb, &rtlusb->rx_submitted);
890 err = usb_submit_urb(urb, GFP_KERNEL);
891 - if (err)
892 + if (err) {
893 + usb_unanchor_urb(urb);
894 + usb_free_urb(urb);
895 goto err_out;
896 + }
897 usb_free_urb(urb);
898 }
899 return 0;
900 diff --git a/drivers/pci/slot.c b/drivers/pci/slot.c
901 index 429d34c348b9f..01a343ad7155c 100644
902 --- a/drivers/pci/slot.c
903 +++ b/drivers/pci/slot.c
904 @@ -303,13 +303,16 @@ placeholder:
905 slot_name = make_slot_name(name);
906 if (!slot_name) {
907 err = -ENOMEM;
908 + kfree(slot);
909 goto err;
910 }
911
912 err = kobject_init_and_add(&slot->kobj, &pci_slot_ktype, NULL,
913 "%s", slot_name);
914 - if (err)
915 + if (err) {
916 + kobject_put(&slot->kobj);
917 goto err;
918 + }
919
920 INIT_LIST_HEAD(&slot->list);
921 list_add(&slot->list, &parent->slots);
922 @@ -328,7 +331,6 @@ out:
923 mutex_unlock(&pci_slot_mutex);
924 return slot;
925 err:
926 - kfree(slot);
927 slot = ERR_PTR(err);
928 goto out;
929 }
930 diff --git a/drivers/s390/cio/css.c b/drivers/s390/cio/css.c
931 index 39a2b0cde9e42..d81fdcd6a1fe0 100644
932 --- a/drivers/s390/cio/css.c
933 +++ b/drivers/s390/cio/css.c
934 @@ -529,6 +529,11 @@ static int slow_eval_known_fn(struct subchannel *sch, void *data)
935 rc = css_evaluate_known_subchannel(sch, 1);
936 if (rc == -EAGAIN)
937 css_schedule_eval(sch->schid);
938 + /*
939 + * The loop might take long time for platforms with lots of
940 + * known devices. Allow scheduling here.
941 + */
942 + cond_resched();
943 }
944 return 0;
945 }
946 diff --git a/drivers/scsi/fcoe/fcoe_ctlr.c b/drivers/scsi/fcoe/fcoe_ctlr.c
947 index 3c2f34db937b6..f5f3a8113bc55 100644
948 --- a/drivers/scsi/fcoe/fcoe_ctlr.c
949 +++ b/drivers/scsi/fcoe/fcoe_ctlr.c
950 @@ -267,9 +267,9 @@ static void fcoe_sysfs_fcf_del(struct fcoe_fcf *new)
951 WARN_ON(!fcf_dev);
952 new->fcf_dev = NULL;
953 fcoe_fcf_device_delete(fcf_dev);
954 - kfree(new);
955 mutex_unlock(&cdev->lock);
956 }
957 + kfree(new);
958 }
959
960 /**
961 diff --git a/drivers/scsi/lpfc/lpfc_vport.c b/drivers/scsi/lpfc/lpfc_vport.c
962 index e18bbc66e83b1..77cb16d8dfd35 100644
963 --- a/drivers/scsi/lpfc/lpfc_vport.c
964 +++ b/drivers/scsi/lpfc/lpfc_vport.c
965 @@ -624,27 +624,16 @@ lpfc_vport_delete(struct fc_vport *fc_vport)
966 vport->port_state < LPFC_VPORT_READY)
967 return -EAGAIN;
968 }
969 +
970 /*
971 - * This is a bit of a mess. We want to ensure the shost doesn't get
972 - * torn down until we're done with the embedded lpfc_vport structure.
973 - *
974 - * Beyond holding a reference for this function, we also need a
975 - * reference for outstanding I/O requests we schedule during delete
976 - * processing. But once we scsi_remove_host() we can no longer obtain
977 - * a reference through scsi_host_get().
978 - *
979 - * So we take two references here. We release one reference at the
980 - * bottom of the function -- after delinking the vport. And we
981 - * release the other at the completion of the unreg_vpi that get's
982 - * initiated after we've disposed of all other resources associated
983 - * with the port.
984 + * Take early refcount for outstanding I/O requests we schedule during
985 + * delete processing for unreg_vpi. Always keep this before
986 + * scsi_remove_host() as we can no longer obtain a reference through
987 + * scsi_host_get() after scsi_host_remove as shost is set to SHOST_DEL.
988 */
989 if (!scsi_host_get(shost))
990 return VPORT_INVAL;
991 - if (!scsi_host_get(shost)) {
992 - scsi_host_put(shost);
993 - return VPORT_INVAL;
994 - }
995 +
996 lpfc_free_sysfs_attr(vport);
997
998 lpfc_debugfs_terminate(vport);
999 @@ -792,8 +781,9 @@ skip_logo:
1000 if (!(vport->vpi_state & LPFC_VPI_REGISTERED) ||
1001 lpfc_mbx_unreg_vpi(vport))
1002 scsi_host_put(shost);
1003 - } else
1004 + } else {
1005 scsi_host_put(shost);
1006 + }
1007
1008 lpfc_free_vpi(phba, vport->vpi);
1009 vport->work_port_events = 0;
1010 diff --git a/drivers/scsi/scsi_transport_iscsi.c b/drivers/scsi/scsi_transport_iscsi.c
1011 index 42b97f1196232..c2bce3f6eaace 100644
1012 --- a/drivers/scsi/scsi_transport_iscsi.c
1013 +++ b/drivers/scsi/scsi_transport_iscsi.c
1014 @@ -3191,7 +3191,7 @@ static int iscsi_set_flashnode_param(struct iscsi_transport *transport,
1015 pr_err("%s could not find host no %u\n",
1016 __func__, ev->u.set_flashnode.host_no);
1017 err = -ENODEV;
1018 - goto put_host;
1019 + goto exit_set_fnode;
1020 }
1021
1022 idx = ev->u.set_flashnode.flashnode_idx;
1023 diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
1024 index a7f520581cb0f..ad5f2e2b4cbaf 100644
1025 --- a/drivers/scsi/ufs/ufshcd.c
1026 +++ b/drivers/scsi/ufs/ufshcd.c
1027 @@ -659,6 +659,7 @@ unblock_reqs:
1028 int ufshcd_hold(struct ufs_hba *hba, bool async)
1029 {
1030 int rc = 0;
1031 + bool flush_result;
1032 unsigned long flags;
1033
1034 if (!ufshcd_is_clkgating_allowed(hba))
1035 @@ -690,7 +691,9 @@ start:
1036 break;
1037 }
1038 spin_unlock_irqrestore(hba->host->host_lock, flags);
1039 - flush_work(&hba->clk_gating.ungate_work);
1040 + flush_result = flush_work(&hba->clk_gating.ungate_work);
1041 + if (hba->clk_gating.is_suspended && !flush_result)
1042 + goto out;
1043 spin_lock_irqsave(hba->host->host_lock, flags);
1044 goto start;
1045 }
1046 @@ -4397,7 +4400,7 @@ static void ufshcd_sl_intr(struct ufs_hba *hba, u32 intr_status)
1047 */
1048 static irqreturn_t ufshcd_intr(int irq, void *__hba)
1049 {
1050 - u32 intr_status, enabled_intr_status;
1051 + u32 intr_status, enabled_intr_status = 0;
1052 irqreturn_t retval = IRQ_NONE;
1053 struct ufs_hba *hba = __hba;
1054 int retries = hba->nutrs;
1055 @@ -4411,7 +4414,7 @@ static irqreturn_t ufshcd_intr(int irq, void *__hba)
1056 * read, make sure we handle them by checking the interrupt status
1057 * again in a loop until we process all of the reqs before returning.
1058 */
1059 - do {
1060 + while (intr_status && retries--) {
1061 enabled_intr_status =
1062 intr_status & ufshcd_readl(hba, REG_INTERRUPT_ENABLE);
1063 if (intr_status)
1064 @@ -4422,7 +4425,7 @@ static irqreturn_t ufshcd_intr(int irq, void *__hba)
1065 }
1066
1067 intr_status = ufshcd_readl(hba, REG_INTERRUPT_STATUS);
1068 - } while (intr_status && --retries);
1069 + }
1070
1071 spin_unlock(hba->host->host_lock);
1072 return retval;
1073 diff --git a/drivers/staging/media/cec/cec-api.c b/drivers/staging/media/cec/cec-api.c
1074 index e274e2f223986..264bb7d1efcb8 100644
1075 --- a/drivers/staging/media/cec/cec-api.c
1076 +++ b/drivers/staging/media/cec/cec-api.c
1077 @@ -141,7 +141,13 @@ static long cec_adap_g_log_addrs(struct cec_adapter *adap,
1078 struct cec_log_addrs log_addrs;
1079
1080 mutex_lock(&adap->lock);
1081 - log_addrs = adap->log_addrs;
1082 + /*
1083 + * We use memcpy here instead of assignment since there is a
1084 + * hole at the end of struct cec_log_addrs that an assignment
1085 + * might ignore. So when we do copy_to_user() we could leak
1086 + * one byte of memory.
1087 + */
1088 + memcpy(&log_addrs, &adap->log_addrs, sizeof(log_addrs));
1089 if (!adap->is_configured)
1090 memset(log_addrs.log_addr, CEC_LOG_ADDR_INVALID,
1091 sizeof(log_addrs.log_addr));
1092 diff --git a/drivers/target/target_core_user.c b/drivers/target/target_core_user.c
1093 index 1a83456a65a00..693fbb2858404 100644
1094 --- a/drivers/target/target_core_user.c
1095 +++ b/drivers/target/target_core_user.c
1096 @@ -666,7 +666,14 @@ static unsigned int tcmu_handle_completions(struct tcmu_dev *udev)
1097 struct tcmu_cmd_entry *entry = (void *) mb + CMDR_OFF + udev->cmdr_last_cleaned;
1098 struct tcmu_cmd *cmd;
1099
1100 - tcmu_flush_dcache_range(entry, sizeof(*entry));
1101 + /*
1102 + * Flush max. up to end of cmd ring since current entry might
1103 + * be a padding that is shorter than sizeof(*entry)
1104 + */
1105 + size_t ring_left = head_to_end(udev->cmdr_last_cleaned,
1106 + udev->cmdr_size);
1107 + tcmu_flush_dcache_range(entry, ring_left < sizeof(*entry) ?
1108 + ring_left : sizeof(*entry));
1109
1110 if (tcmu_hdr_get_op(entry->hdr.len_op) == TCMU_OP_PAD) {
1111 UPDATE_HEAD(udev->cmdr_last_cleaned,
1112 diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c
1113 index c7a7574172fae..5641b877dca53 100644
1114 --- a/drivers/tty/serial/8250/8250_port.c
1115 +++ b/drivers/tty/serial/8250/8250_port.c
1116 @@ -2205,6 +2205,10 @@ int serial8250_do_startup(struct uart_port *port)
1117
1118 if (port->irq) {
1119 unsigned char iir1;
1120 +
1121 + if (port->irqflags & IRQF_SHARED)
1122 + disable_irq_nosync(port->irq);
1123 +
1124 /*
1125 * Test for UARTs that do not reassert THRE when the
1126 * transmitter is idle and the interrupt has already
1127 @@ -2214,8 +2218,6 @@ int serial8250_do_startup(struct uart_port *port)
1128 * allow register changes to become visible.
1129 */
1130 spin_lock_irqsave(&port->lock, flags);
1131 - if (up->port.irqflags & IRQF_SHARED)
1132 - disable_irq_nosync(port->irq);
1133
1134 wait_for_xmitr(up, UART_LSR_THRE);
1135 serial_port_out_sync(port, UART_IER, UART_IER_THRI);
1136 @@ -2227,9 +2229,10 @@ int serial8250_do_startup(struct uart_port *port)
1137 iir = serial_port_in(port, UART_IIR);
1138 serial_port_out(port, UART_IER, 0);
1139
1140 + spin_unlock_irqrestore(&port->lock, flags);
1141 +
1142 if (port->irqflags & IRQF_SHARED)
1143 enable_irq(port->irq);
1144 - spin_unlock_irqrestore(&port->lock, flags);
1145
1146 /*
1147 * If the interrupt is not reasserted, or we otherwise
1148 diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c
1149 index b3b9b3d2cddf9..6e27dee3876a4 100644
1150 --- a/drivers/tty/serial/amba-pl011.c
1151 +++ b/drivers/tty/serial/amba-pl011.c
1152 @@ -2249,9 +2249,8 @@ pl011_console_write(struct console *co, const char *s, unsigned int count)
1153 clk_disable(uap->clk);
1154 }
1155
1156 -static void __init
1157 -pl011_console_get_options(struct uart_amba_port *uap, int *baud,
1158 - int *parity, int *bits)
1159 +static void pl011_console_get_options(struct uart_amba_port *uap, int *baud,
1160 + int *parity, int *bits)
1161 {
1162 if (pl011_read(uap, REG_CR) & UART01x_CR_UARTEN) {
1163 unsigned int lcr_h, ibrd, fbrd;
1164 @@ -2284,7 +2283,7 @@ pl011_console_get_options(struct uart_amba_port *uap, int *baud,
1165 }
1166 }
1167
1168 -static int __init pl011_console_setup(struct console *co, char *options)
1169 +static int pl011_console_setup(struct console *co, char *options)
1170 {
1171 struct uart_amba_port *uap;
1172 int baud = 38400;
1173 @@ -2352,8 +2351,8 @@ static int __init pl011_console_setup(struct console *co, char *options)
1174 *
1175 * Returns 0 if console matches; otherwise non-zero to use default matching
1176 */
1177 -static int __init pl011_console_match(struct console *co, char *name, int idx,
1178 - char *options)
1179 +static int pl011_console_match(struct console *co, char *name, int idx,
1180 + char *options)
1181 {
1182 unsigned char iotype;
1183 resource_size_t addr;
1184 @@ -2533,7 +2532,7 @@ static int pl011_setup_port(struct device *dev, struct uart_amba_port *uap,
1185
1186 static int pl011_register_port(struct uart_amba_port *uap)
1187 {
1188 - int ret;
1189 + int ret, i;
1190
1191 /* Ensure interrupts from this UART are masked and cleared */
1192 pl011_write(0, uap, REG_IMSC);
1193 @@ -2544,6 +2543,9 @@ static int pl011_register_port(struct uart_amba_port *uap)
1194 if (ret < 0) {
1195 dev_err(uap->port.dev,
1196 "Failed to register AMBA-PL011 driver\n");
1197 + for (i = 0; i < ARRAY_SIZE(amba_ports); i++)
1198 + if (amba_ports[i] == uap)
1199 + amba_ports[i] = NULL;
1200 return ret;
1201 }
1202 }
1203 diff --git a/drivers/tty/serial/samsung.c b/drivers/tty/serial/samsung.c
1204 index 01ff8ec780237..4dfdb59061bea 100644
1205 --- a/drivers/tty/serial/samsung.c
1206 +++ b/drivers/tty/serial/samsung.c
1207 @@ -1725,9 +1725,11 @@ static int s3c24xx_serial_init_port(struct s3c24xx_uart_port *ourport,
1208 ourport->tx_irq = ret + 1;
1209 }
1210
1211 - ret = platform_get_irq(platdev, 1);
1212 - if (ret > 0)
1213 - ourport->tx_irq = ret;
1214 + if (!s3c24xx_serial_has_interrupt_mask(port)) {
1215 + ret = platform_get_irq(platdev, 1);
1216 + if (ret > 0)
1217 + ourport->tx_irq = ret;
1218 + }
1219 /*
1220 * DMA is currently supported only on DT platforms, if DMA properties
1221 * are specified.
1222 diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c
1223 index 3e5a3614fad03..1f00f42213c27 100644
1224 --- a/drivers/tty/vt/vt.c
1225 +++ b/drivers/tty/vt/vt.c
1226 @@ -868,7 +868,7 @@ static int vc_do_resize(struct tty_struct *tty, struct vc_data *vc,
1227 unsigned int old_rows, old_row_size;
1228 unsigned int new_cols, new_rows, new_row_size, new_screen_size;
1229 unsigned int user;
1230 - unsigned short *newscreen;
1231 + unsigned short *oldscreen, *newscreen;
1232
1233 WARN_CONSOLE_UNLOCKED();
1234
1235 @@ -950,10 +950,11 @@ static int vc_do_resize(struct tty_struct *tty, struct vc_data *vc,
1236 if (new_scr_end > new_origin)
1237 scr_memsetw((void *)new_origin, vc->vc_video_erase_char,
1238 new_scr_end - new_origin);
1239 - kfree(vc->vc_screenbuf);
1240 + oldscreen = vc->vc_screenbuf;
1241 vc->vc_screenbuf = newscreen;
1242 vc->vc_screenbuf_size = new_screen_size;
1243 set_origin(vc);
1244 + kfree(oldscreen);
1245
1246 /* do part of a reset_terminal() */
1247 vc->vc_top = 0;
1248 diff --git a/drivers/tty/vt/vt_ioctl.c b/drivers/tty/vt/vt_ioctl.c
1249 index 4ed0d77e59181..78a3b969cae71 100644
1250 --- a/drivers/tty/vt/vt_ioctl.c
1251 +++ b/drivers/tty/vt/vt_ioctl.c
1252 @@ -896,12 +896,22 @@ int vt_ioctl(struct tty_struct *tty,
1253 console_lock();
1254 vcp = vc_cons[i].d;
1255 if (vcp) {
1256 + int ret;
1257 + int save_scan_lines = vcp->vc_scan_lines;
1258 + int save_font_height = vcp->vc_font.height;
1259 +
1260 if (v.v_vlin)
1261 vcp->vc_scan_lines = v.v_vlin;
1262 if (v.v_clin)
1263 vcp->vc_font.height = v.v_clin;
1264 vcp->vc_resize_user = 1;
1265 - vc_resize(vcp, v.v_cols, v.v_rows);
1266 + ret = vc_resize(vcp, v.v_cols, v.v_rows);
1267 + if (ret) {
1268 + vcp->vc_scan_lines = save_scan_lines;
1269 + vcp->vc_font.height = save_font_height;
1270 + console_unlock();
1271 + return ret;
1272 + }
1273 }
1274 console_unlock();
1275 }
1276 diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
1277 index e6e0f786547bf..eed7c8d8e3d4f 100644
1278 --- a/drivers/usb/core/quirks.c
1279 +++ b/drivers/usb/core/quirks.c
1280 @@ -299,6 +299,8 @@ static const struct usb_device_id usb_quirk_list[] = {
1281
1282 { USB_DEVICE(0x2386, 0x3119), .driver_info = USB_QUIRK_NO_LPM },
1283
1284 + { USB_DEVICE(0x2386, 0x350e), .driver_info = USB_QUIRK_NO_LPM },
1285 +
1286 /* DJI CineSSD */
1287 { USB_DEVICE(0x2ca3, 0x0031), .driver_info = USB_QUIRK_NO_LPM },
1288
1289 diff --git a/drivers/usb/gadget/function/f_ncm.c b/drivers/usb/gadget/function/f_ncm.c
1290 index 6399923239e78..b69747367bd75 100644
1291 --- a/drivers/usb/gadget/function/f_ncm.c
1292 +++ b/drivers/usb/gadget/function/f_ncm.c
1293 @@ -1209,12 +1209,15 @@ static int ncm_unwrap_ntb(struct gether *port,
1294 int ndp_index;
1295 unsigned dg_len, dg_len2;
1296 unsigned ndp_len;
1297 + unsigned block_len;
1298 struct sk_buff *skb2;
1299 int ret = -EINVAL;
1300 - unsigned max_size = le32_to_cpu(ntb_parameters.dwNtbOutMaxSize);
1301 + unsigned ntb_max = le32_to_cpu(ntb_parameters.dwNtbOutMaxSize);
1302 + unsigned frame_max = le16_to_cpu(ecm_desc.wMaxSegmentSize);
1303 const struct ndp_parser_opts *opts = ncm->parser_opts;
1304 unsigned crc_len = ncm->is_crc ? sizeof(uint32_t) : 0;
1305 int dgram_counter;
1306 + bool ndp_after_header;
1307
1308 /* dwSignature */
1309 if (get_unaligned_le32(tmp) != opts->nth_sign) {
1310 @@ -1233,25 +1236,37 @@ static int ncm_unwrap_ntb(struct gether *port,
1311 }
1312 tmp++; /* skip wSequence */
1313
1314 + block_len = get_ncm(&tmp, opts->block_length);
1315 /* (d)wBlockLength */
1316 - if (get_ncm(&tmp, opts->block_length) > max_size) {
1317 + if (block_len > ntb_max) {
1318 INFO(port->func.config->cdev, "OUT size exceeded\n");
1319 goto err;
1320 }
1321
1322 ndp_index = get_ncm(&tmp, opts->ndp_index);
1323 + ndp_after_header = false;
1324
1325 /* Run through all the NDP's in the NTB */
1326 do {
1327 - /* NCM 3.2 */
1328 - if (((ndp_index % 4) != 0) &&
1329 - (ndp_index < opts->nth_size)) {
1330 + /*
1331 + * NCM 3.2
1332 + * dwNdpIndex
1333 + */
1334 + if (((ndp_index % 4) != 0) ||
1335 + (ndp_index < opts->nth_size) ||
1336 + (ndp_index > (block_len -
1337 + opts->ndp_size))) {
1338 INFO(port->func.config->cdev, "Bad index: %#X\n",
1339 ndp_index);
1340 goto err;
1341 }
1342 + if (ndp_index == opts->nth_size)
1343 + ndp_after_header = true;
1344
1345 - /* walk through NDP */
1346 + /*
1347 + * walk through NDP
1348 + * dwSignature
1349 + */
1350 tmp = (void *)(skb->data + ndp_index);
1351 if (get_unaligned_le32(tmp) != ncm->ndp_sign) {
1352 INFO(port->func.config->cdev, "Wrong NDP SIGN\n");
1353 @@ -1262,14 +1277,15 @@ static int ncm_unwrap_ntb(struct gether *port,
1354 ndp_len = get_unaligned_le16(tmp++);
1355 /*
1356 * NCM 3.3.1
1357 + * wLength
1358 * entry is 2 items
1359 * item size is 16/32 bits, opts->dgram_item_len * 2 bytes
1360 * minimal: struct usb_cdc_ncm_ndpX + normal entry + zero entry
1361 * Each entry is a dgram index and a dgram length.
1362 */
1363 if ((ndp_len < opts->ndp_size
1364 - + 2 * 2 * (opts->dgram_item_len * 2))
1365 - || (ndp_len % opts->ndplen_align != 0)) {
1366 + + 2 * 2 * (opts->dgram_item_len * 2)) ||
1367 + (ndp_len % opts->ndplen_align != 0)) {
1368 INFO(port->func.config->cdev, "Bad NDP length: %#X\n",
1369 ndp_len);
1370 goto err;
1371 @@ -1286,8 +1302,21 @@ static int ncm_unwrap_ntb(struct gether *port,
1372
1373 do {
1374 index = index2;
1375 + /* wDatagramIndex[0] */
1376 + if ((index < opts->nth_size) ||
1377 + (index > block_len - opts->dpe_size)) {
1378 + INFO(port->func.config->cdev,
1379 + "Bad index: %#X\n", index);
1380 + goto err;
1381 + }
1382 +
1383 dg_len = dg_len2;
1384 - if (dg_len < 14 + crc_len) { /* ethernet hdr + crc */
1385 + /*
1386 + * wDatagramLength[0]
1387 + * ethernet hdr + crc or larger than max frame size
1388 + */
1389 + if ((dg_len < 14 + crc_len) ||
1390 + (dg_len > frame_max)) {
1391 INFO(port->func.config->cdev,
1392 "Bad dgram length: %#X\n", dg_len);
1393 goto err;
1394 @@ -1311,6 +1340,37 @@ static int ncm_unwrap_ntb(struct gether *port,
1395 index2 = get_ncm(&tmp, opts->dgram_item_len);
1396 dg_len2 = get_ncm(&tmp, opts->dgram_item_len);
1397
1398 + if (index2 == 0 || dg_len2 == 0)
1399 + break;
1400 +
1401 + /* wDatagramIndex[1] */
1402 + if (ndp_after_header) {
1403 + if (index2 < opts->nth_size + opts->ndp_size) {
1404 + INFO(port->func.config->cdev,
1405 + "Bad index: %#X\n", index2);
1406 + goto err;
1407 + }
1408 + } else {
1409 + if (index2 < opts->nth_size + opts->dpe_size) {
1410 + INFO(port->func.config->cdev,
1411 + "Bad index: %#X\n", index2);
1412 + goto err;
1413 + }
1414 + }
1415 + if (index2 > block_len - opts->dpe_size) {
1416 + INFO(port->func.config->cdev,
1417 + "Bad index: %#X\n", index2);
1418 + goto err;
1419 + }
1420 +
1421 + /* wDatagramLength[1] */
1422 + if ((dg_len2 < 14 + crc_len) ||
1423 + (dg_len2 > frame_max)) {
1424 + INFO(port->func.config->cdev,
1425 + "Bad dgram length: %#X\n", dg_len);
1426 + goto err;
1427 + }
1428 +
1429 /*
1430 * Copy the data into a new skb.
1431 * This ensures the truesize is correct
1432 @@ -1327,9 +1387,6 @@ static int ncm_unwrap_ntb(struct gether *port,
1433 ndp_len -= 2 * (opts->dgram_item_len * 2);
1434
1435 dgram_counter++;
1436 -
1437 - if (index2 == 0 || dg_len2 == 0)
1438 - break;
1439 } while (ndp_len > 2 * (opts->dgram_item_len * 2));
1440 } while (ndp_index);
1441
1442 diff --git a/drivers/usb/gadget/function/f_tcm.c b/drivers/usb/gadget/function/f_tcm.c
1443 index d2351139342f6..7e8e262b36297 100644
1444 --- a/drivers/usb/gadget/function/f_tcm.c
1445 +++ b/drivers/usb/gadget/function/f_tcm.c
1446 @@ -751,12 +751,13 @@ static int uasp_alloc_stream_res(struct f_uas *fu, struct uas_stream *stream)
1447 goto err_sts;
1448
1449 return 0;
1450 +
1451 err_sts:
1452 - usb_ep_free_request(fu->ep_status, stream->req_status);
1453 - stream->req_status = NULL;
1454 -err_out:
1455 usb_ep_free_request(fu->ep_out, stream->req_out);
1456 stream->req_out = NULL;
1457 +err_out:
1458 + usb_ep_free_request(fu->ep_in, stream->req_in);
1459 + stream->req_in = NULL;
1460 out:
1461 return -ENOMEM;
1462 }
1463 diff --git a/drivers/usb/gadget/u_f.h b/drivers/usb/gadget/u_f.h
1464 index 2f03334c68741..d150a6795f481 100644
1465 --- a/drivers/usb/gadget/u_f.h
1466 +++ b/drivers/usb/gadget/u_f.h
1467 @@ -17,6 +17,7 @@
1468 #define __U_F_H__
1469
1470 #include <linux/usb/gadget.h>
1471 +#include <linux/overflow.h>
1472
1473 /* Variable Length Array Macros **********************************************/
1474 #define vla_group(groupname) size_t groupname##__next = 0
1475 @@ -24,21 +25,36 @@
1476
1477 #define vla_item(groupname, type, name, n) \
1478 size_t groupname##_##name##__offset = ({ \
1479 - size_t align_mask = __alignof__(type) - 1; \
1480 - size_t offset = (groupname##__next + align_mask) & ~align_mask;\
1481 - size_t size = (n) * sizeof(type); \
1482 - groupname##__next = offset + size; \
1483 + size_t offset = 0; \
1484 + if (groupname##__next != SIZE_MAX) { \
1485 + size_t align_mask = __alignof__(type) - 1; \
1486 + size_t size = array_size(n, sizeof(type)); \
1487 + offset = (groupname##__next + align_mask) & \
1488 + ~align_mask; \
1489 + if (check_add_overflow(offset, size, \
1490 + &groupname##__next)) { \
1491 + groupname##__next = SIZE_MAX; \
1492 + offset = 0; \
1493 + } \
1494 + } \
1495 offset; \
1496 })
1497
1498 #define vla_item_with_sz(groupname, type, name, n) \
1499 - size_t groupname##_##name##__sz = (n) * sizeof(type); \
1500 - size_t groupname##_##name##__offset = ({ \
1501 - size_t align_mask = __alignof__(type) - 1; \
1502 - size_t offset = (groupname##__next + align_mask) & ~align_mask;\
1503 - size_t size = groupname##_##name##__sz; \
1504 - groupname##__next = offset + size; \
1505 - offset; \
1506 + size_t groupname##_##name##__sz = array_size(n, sizeof(type)); \
1507 + size_t groupname##_##name##__offset = ({ \
1508 + size_t offset = 0; \
1509 + if (groupname##__next != SIZE_MAX) { \
1510 + size_t align_mask = __alignof__(type) - 1; \
1511 + offset = (groupname##__next + align_mask) & \
1512 + ~align_mask; \
1513 + if (check_add_overflow(offset, groupname##_##name##__sz,\
1514 + &groupname##__next)) { \
1515 + groupname##__next = SIZE_MAX; \
1516 + offset = 0; \
1517 + } \
1518 + } \
1519 + offset; \
1520 })
1521
1522 #define vla_ptr(ptr, groupname, name) \
1523 diff --git a/drivers/usb/host/ohci-exynos.c b/drivers/usb/host/ohci-exynos.c
1524 index 6865b919403f7..2ed062a2e93b4 100644
1525 --- a/drivers/usb/host/ohci-exynos.c
1526 +++ b/drivers/usb/host/ohci-exynos.c
1527 @@ -166,9 +166,8 @@ skip_phy:
1528 hcd->rsrc_len = resource_size(res);
1529
1530 irq = platform_get_irq(pdev, 0);
1531 - if (!irq) {
1532 - dev_err(&pdev->dev, "Failed to get IRQ\n");
1533 - err = -ENODEV;
1534 + if (irq < 0) {
1535 + err = irq;
1536 goto fail_io;
1537 }
1538
1539 diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c
1540 index 04d36fa607342..194ea29d7a57e 100644
1541 --- a/drivers/usb/host/xhci-hub.c
1542 +++ b/drivers/usb/host/xhci-hub.c
1543 @@ -623,15 +623,6 @@ static void xhci_hub_report_usb3_link_state(struct xhci_hcd *xhci,
1544 {
1545 u32 pls = status_reg & PORT_PLS_MASK;
1546
1547 - /* resume state is a xHCI internal state.
1548 - * Do not report it to usb core, instead, pretend to be U3,
1549 - * thus usb core knows it's not ready for transfer
1550 - */
1551 - if (pls == XDEV_RESUME) {
1552 - *status |= USB_SS_PORT_LS_U3;
1553 - return;
1554 - }
1555 -
1556 /* When the CAS bit is set then warm reset
1557 * should be performed on port
1558 */
1559 @@ -653,6 +644,16 @@ static void xhci_hub_report_usb3_link_state(struct xhci_hcd *xhci,
1560 */
1561 pls |= USB_PORT_STAT_CONNECTION;
1562 } else {
1563 + /*
1564 + * Resume state is an xHCI internal state. Do not report it to
1565 + * usb core, instead, pretend to be U3, thus usb core knows
1566 + * it's not ready for transfer.
1567 + */
1568 + if (pls == XDEV_RESUME) {
1569 + *status |= USB_SS_PORT_LS_U3;
1570 + return;
1571 + }
1572 +
1573 /*
1574 * If CAS bit isn't set but the Port is already at
1575 * Compliance Mode, fake a connection so the USB core
1576 diff --git a/drivers/usb/misc/lvstest.c b/drivers/usb/misc/lvstest.c
1577 index bd6e06ef88acd..5dfc58ac97f30 100644
1578 --- a/drivers/usb/misc/lvstest.c
1579 +++ b/drivers/usb/misc/lvstest.c
1580 @@ -392,7 +392,7 @@ static int lvs_rh_probe(struct usb_interface *intf,
1581 USB_DT_SS_HUB_SIZE, USB_CTRL_GET_TIMEOUT);
1582 if (ret < (USB_DT_HUB_NONVAR_SIZE + 2)) {
1583 dev_err(&hdev->dev, "wrong root hub descriptor read %d\n", ret);
1584 - return ret;
1585 + return ret < 0 ? ret : -EINVAL;
1586 }
1587
1588 /* submit urb to poll interrupt endpoint */
1589 diff --git a/drivers/usb/misc/sisusbvga/sisusb.c b/drivers/usb/misc/sisusbvga/sisusb.c
1590 index 895e8c0288cf9..30b3bdc4e6761 100644
1591 --- a/drivers/usb/misc/sisusbvga/sisusb.c
1592 +++ b/drivers/usb/misc/sisusbvga/sisusb.c
1593 @@ -762,7 +762,7 @@ static int sisusb_write_mem_bulk(struct sisusb_usb_data *sisusb, u32 addr,
1594 u8 swap8, fromkern = kernbuffer ? 1 : 0;
1595 u16 swap16;
1596 u32 swap32, flag = (length >> 28) & 1;
1597 - char buf[4];
1598 + u8 buf[4];
1599
1600 /* if neither kernbuffer not userbuffer are given, assume
1601 * data in obuf
1602 diff --git a/drivers/usb/misc/yurex.c b/drivers/usb/misc/yurex.c
1603 index 2350502f90540..1be1fa1b73770 100644
1604 --- a/drivers/usb/misc/yurex.c
1605 +++ b/drivers/usb/misc/yurex.c
1606 @@ -502,7 +502,7 @@ static ssize_t yurex_write(struct file *file, const char __user *user_buffer,
1607 prepare_to_wait(&dev->waitq, &wait, TASK_INTERRUPTIBLE);
1608 dev_dbg(&dev->interface->dev, "%s - submit %c\n", __func__,
1609 dev->cntl_buffer[0]);
1610 - retval = usb_submit_urb(dev->cntl_urb, GFP_KERNEL);
1611 + retval = usb_submit_urb(dev->cntl_urb, GFP_ATOMIC);
1612 if (retval >= 0)
1613 timeout = schedule_timeout(YUREX_WRITE_TIMEOUT);
1614 finish_wait(&dev->waitq, &wait);
1615 diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h
1616 index 46079468df426..4a94effb64f77 100644
1617 --- a/drivers/usb/storage/unusual_devs.h
1618 +++ b/drivers/usb/storage/unusual_devs.h
1619 @@ -2347,7 +2347,7 @@ UNUSUAL_DEV( 0x357d, 0x7788, 0x0114, 0x0114,
1620 "JMicron",
1621 "USB to ATA/ATAPI Bridge",
1622 USB_SC_DEVICE, USB_PR_DEVICE, NULL,
1623 - US_FL_BROKEN_FUA ),
1624 + US_FL_BROKEN_FUA | US_FL_IGNORE_UAS ),
1625
1626 /* Reported by Andrey Rahmatullin <wrar@altlinux.org> */
1627 UNUSUAL_DEV( 0x4102, 0x1020, 0x0100, 0x0100,
1628 diff --git a/drivers/usb/storage/unusual_uas.h b/drivers/usb/storage/unusual_uas.h
1629 index 4df15faa66d71..018b0663d6109 100644
1630 --- a/drivers/usb/storage/unusual_uas.h
1631 +++ b/drivers/usb/storage/unusual_uas.h
1632 @@ -41,6 +41,13 @@
1633 * and don't forget to CC: the USB development list <linux-usb@vger.kernel.org>
1634 */
1635
1636 +/* Reported-by: Till Dörges <doerges@pre-sense.de> */
1637 +UNUSUAL_DEV(0x054c, 0x087d, 0x0000, 0x9999,
1638 + "Sony",
1639 + "PSZ-HA*",
1640 + USB_SC_DEVICE, USB_PR_DEVICE, NULL,
1641 + US_FL_NO_REPORT_OPCODES),
1642 +
1643 /* Reported-by: Julian Groß <julian.g@posteo.de> */
1644 UNUSUAL_DEV(0x059f, 0x105f, 0x0000, 0x9999,
1645 "LaCie",
1646 @@ -156,6 +163,13 @@ UNUSUAL_DEV(0x152d, 0x0578, 0x0000, 0x9999,
1647 USB_SC_DEVICE, USB_PR_DEVICE, NULL,
1648 US_FL_BROKEN_FUA),
1649
1650 +/* Reported-by: Thinh Nguyen <thinhn@synopsys.com> */
1651 +UNUSUAL_DEV(0x154b, 0xf00d, 0x0000, 0x9999,
1652 + "PNY",
1653 + "Pro Elite SSD",
1654 + USB_SC_DEVICE, USB_PR_DEVICE, NULL,
1655 + US_FL_NO_ATA_1X),
1656 +
1657 /* Reported-by: Hans de Goede <hdegoede@redhat.com> */
1658 UNUSUAL_DEV(0x2109, 0x0711, 0x0000, 0x9999,
1659 "VIA",
1660 diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c
1661 index 178b507a6fe0c..dd6797e54e8ab 100644
1662 --- a/drivers/video/console/fbcon.c
1663 +++ b/drivers/video/console/fbcon.c
1664 @@ -2116,6 +2116,9 @@ static void updatescrollmode(struct display *p,
1665 }
1666 }
1667
1668 +#define PITCH(w) (((w) + 7) >> 3)
1669 +#define CALC_FONTSZ(h, p, c) ((h) * (p) * (c)) /* size = height * pitch * charcount */
1670 +
1671 static int fbcon_resize(struct vc_data *vc, unsigned int width,
1672 unsigned int height, unsigned int user)
1673 {
1674 @@ -2125,6 +2128,24 @@ static int fbcon_resize(struct vc_data *vc, unsigned int width,
1675 struct fb_var_screeninfo var = info->var;
1676 int x_diff, y_diff, virt_w, virt_h, virt_fw, virt_fh;
1677
1678 + if (ops->p && ops->p->userfont && FNTSIZE(vc->vc_font.data)) {
1679 + int size;
1680 + int pitch = PITCH(vc->vc_font.width);
1681 +
1682 + /*
1683 + * If user font, ensure that a possible change to user font
1684 + * height or width will not allow a font data out-of-bounds access.
1685 + * NOTE: must use original charcount in calculation as font
1686 + * charcount can change and cannot be used to determine the
1687 + * font data allocated size.
1688 + */
1689 + if (pitch <= 0)
1690 + return -EINVAL;
1691 + size = CALC_FONTSZ(vc->vc_font.height, pitch, FNTCHARCNT(vc->vc_font.data));
1692 + if (size > FNTSIZE(vc->vc_font.data))
1693 + return -EINVAL;
1694 + }
1695 +
1696 virt_w = FBCON_SWAP(ops->rotate, width, height);
1697 virt_h = FBCON_SWAP(ops->rotate, height, width);
1698 virt_fw = FBCON_SWAP(ops->rotate, vc->vc_font.width,
1699 @@ -2586,7 +2607,7 @@ static int fbcon_set_font(struct vc_data *vc, struct console_font *font, unsigne
1700 int size;
1701 int i, csum;
1702 u8 *new_data, *data = font->data;
1703 - int pitch = (font->width+7) >> 3;
1704 + int pitch = PITCH(font->width);
1705
1706 /* Is there a reason why fbconsole couldn't handle any charcount >256?
1707 * If not this check should be changed to charcount < 256 */
1708 @@ -2602,7 +2623,7 @@ static int fbcon_set_font(struct vc_data *vc, struct console_font *font, unsigne
1709 if (fbcon_invalid_charcount(info, charcount))
1710 return -EINVAL;
1711
1712 - size = h * pitch * charcount;
1713 + size = CALC_FONTSZ(h, pitch, charcount);
1714
1715 new_data = kmalloc(FONT_EXTRA_WORDS * sizeof(int) + size, GFP_USER);
1716
1717 diff --git a/drivers/video/fbdev/omap2/omapfb/dss/dispc.c b/drivers/video/fbdev/omap2/omapfb/dss/dispc.c
1718 index 7a75dfda98457..00f5a54aaf9b7 100644
1719 --- a/drivers/video/fbdev/omap2/omapfb/dss/dispc.c
1720 +++ b/drivers/video/fbdev/omap2/omapfb/dss/dispc.c
1721 @@ -531,8 +531,11 @@ int dispc_runtime_get(void)
1722 DSSDBG("dispc_runtime_get\n");
1723
1724 r = pm_runtime_get_sync(&dispc.pdev->dev);
1725 - WARN_ON(r < 0);
1726 - return r < 0 ? r : 0;
1727 + if (WARN_ON(r < 0)) {
1728 + pm_runtime_put_sync(&dispc.pdev->dev);
1729 + return r;
1730 + }
1731 + return 0;
1732 }
1733 EXPORT_SYMBOL(dispc_runtime_get);
1734
1735 diff --git a/drivers/video/fbdev/omap2/omapfb/dss/dsi.c b/drivers/video/fbdev/omap2/omapfb/dss/dsi.c
1736 index 30d49f3800b33..2bfd9063cdfc3 100644
1737 --- a/drivers/video/fbdev/omap2/omapfb/dss/dsi.c
1738 +++ b/drivers/video/fbdev/omap2/omapfb/dss/dsi.c
1739 @@ -1148,8 +1148,11 @@ static int dsi_runtime_get(struct platform_device *dsidev)
1740 DSSDBG("dsi_runtime_get\n");
1741
1742 r = pm_runtime_get_sync(&dsi->pdev->dev);
1743 - WARN_ON(r < 0);
1744 - return r < 0 ? r : 0;
1745 + if (WARN_ON(r < 0)) {
1746 + pm_runtime_put_sync(&dsi->pdev->dev);
1747 + return r;
1748 + }
1749 + return 0;
1750 }
1751
1752 static void dsi_runtime_put(struct platform_device *dsidev)
1753 diff --git a/drivers/video/fbdev/omap2/omapfb/dss/dss.c b/drivers/video/fbdev/omap2/omapfb/dss/dss.c
1754 index 4429ad37b64cd..acecee5b1c102 100644
1755 --- a/drivers/video/fbdev/omap2/omapfb/dss/dss.c
1756 +++ b/drivers/video/fbdev/omap2/omapfb/dss/dss.c
1757 @@ -778,8 +778,11 @@ int dss_runtime_get(void)
1758 DSSDBG("dss_runtime_get\n");
1759
1760 r = pm_runtime_get_sync(&dss.pdev->dev);
1761 - WARN_ON(r < 0);
1762 - return r < 0 ? r : 0;
1763 + if (WARN_ON(r < 0)) {
1764 + pm_runtime_put_sync(&dss.pdev->dev);
1765 + return r;
1766 + }
1767 + return 0;
1768 }
1769
1770 void dss_runtime_put(void)
1771 diff --git a/drivers/video/fbdev/omap2/omapfb/dss/hdmi4.c b/drivers/video/fbdev/omap2/omapfb/dss/hdmi4.c
1772 index 156a254705ea5..ab64bf0215e82 100644
1773 --- a/drivers/video/fbdev/omap2/omapfb/dss/hdmi4.c
1774 +++ b/drivers/video/fbdev/omap2/omapfb/dss/hdmi4.c
1775 @@ -50,9 +50,10 @@ static int hdmi_runtime_get(void)
1776 DSSDBG("hdmi_runtime_get\n");
1777
1778 r = pm_runtime_get_sync(&hdmi.pdev->dev);
1779 - WARN_ON(r < 0);
1780 - if (r < 0)
1781 + if (WARN_ON(r < 0)) {
1782 + pm_runtime_put_sync(&hdmi.pdev->dev);
1783 return r;
1784 + }
1785
1786 return 0;
1787 }
1788 diff --git a/drivers/video/fbdev/omap2/omapfb/dss/hdmi5.c b/drivers/video/fbdev/omap2/omapfb/dss/hdmi5.c
1789 index 4da36bcab9779..c6efaca3235a8 100644
1790 --- a/drivers/video/fbdev/omap2/omapfb/dss/hdmi5.c
1791 +++ b/drivers/video/fbdev/omap2/omapfb/dss/hdmi5.c
1792 @@ -54,9 +54,10 @@ static int hdmi_runtime_get(void)
1793 DSSDBG("hdmi_runtime_get\n");
1794
1795 r = pm_runtime_get_sync(&hdmi.pdev->dev);
1796 - WARN_ON(r < 0);
1797 - if (r < 0)
1798 + if (WARN_ON(r < 0)) {
1799 + pm_runtime_put_sync(&hdmi.pdev->dev);
1800 return r;
1801 + }
1802
1803 return 0;
1804 }
1805 diff --git a/drivers/video/fbdev/omap2/omapfb/dss/venc.c b/drivers/video/fbdev/omap2/omapfb/dss/venc.c
1806 index 392464da12e41..96714b4596d2d 100644
1807 --- a/drivers/video/fbdev/omap2/omapfb/dss/venc.c
1808 +++ b/drivers/video/fbdev/omap2/omapfb/dss/venc.c
1809 @@ -402,8 +402,11 @@ static int venc_runtime_get(void)
1810 DSSDBG("venc_runtime_get\n");
1811
1812 r = pm_runtime_get_sync(&venc.pdev->dev);
1813 - WARN_ON(r < 0);
1814 - return r < 0 ? r : 0;
1815 + if (WARN_ON(r < 0)) {
1816 + pm_runtime_put_sync(&venc.pdev->dev);
1817 + return r;
1818 + }
1819 + return 0;
1820 }
1821
1822 static void venc_runtime_put(void)
1823 diff --git a/drivers/xen/events/events_base.c b/drivers/xen/events/events_base.c
1824 index 4b0cc9d0ca537..0dadfabcfd80b 100644
1825 --- a/drivers/xen/events/events_base.c
1826 +++ b/drivers/xen/events/events_base.c
1827 @@ -155,7 +155,7 @@ int get_evtchn_to_irq(unsigned evtchn)
1828 /* Get info for IRQ */
1829 struct irq_info *info_for_irq(unsigned irq)
1830 {
1831 - return irq_get_handler_data(irq);
1832 + return irq_get_chip_data(irq);
1833 }
1834
1835 /* Constructors for packed IRQ information. */
1836 @@ -384,7 +384,7 @@ static void xen_irq_init(unsigned irq)
1837 info->type = IRQT_UNBOUND;
1838 info->refcnt = -1;
1839
1840 - irq_set_handler_data(irq, info);
1841 + irq_set_chip_data(irq, info);
1842
1843 list_add_tail(&info->list, &xen_irq_list_head);
1844 }
1845 @@ -433,14 +433,14 @@ static int __must_check xen_allocate_irq_gsi(unsigned gsi)
1846
1847 static void xen_free_irq(unsigned irq)
1848 {
1849 - struct irq_info *info = irq_get_handler_data(irq);
1850 + struct irq_info *info = irq_get_chip_data(irq);
1851
1852 if (WARN_ON(!info))
1853 return;
1854
1855 list_del(&info->list);
1856
1857 - irq_set_handler_data(irq, NULL);
1858 + irq_set_chip_data(irq, NULL);
1859
1860 WARN_ON(info->refcnt > 0);
1861
1862 @@ -610,7 +610,7 @@ EXPORT_SYMBOL_GPL(xen_irq_from_gsi);
1863 static void __unbind_from_irq(unsigned int irq)
1864 {
1865 int evtchn = evtchn_from_irq(irq);
1866 - struct irq_info *info = irq_get_handler_data(irq);
1867 + struct irq_info *info = irq_get_chip_data(irq);
1868
1869 if (info->refcnt > 0) {
1870 info->refcnt--;
1871 @@ -1114,7 +1114,7 @@ int bind_ipi_to_irqhandler(enum ipi_vector ipi,
1872
1873 void unbind_from_irqhandler(unsigned int irq, void *dev_id)
1874 {
1875 - struct irq_info *info = irq_get_handler_data(irq);
1876 + struct irq_info *info = irq_get_chip_data(irq);
1877
1878 if (WARN_ON(!info))
1879 return;
1880 @@ -1148,7 +1148,7 @@ int evtchn_make_refcounted(unsigned int evtchn)
1881 if (irq == -1)
1882 return -ENOENT;
1883
1884 - info = irq_get_handler_data(irq);
1885 + info = irq_get_chip_data(irq);
1886
1887 if (!info)
1888 return -ENOENT;
1889 @@ -1176,7 +1176,7 @@ int evtchn_get(unsigned int evtchn)
1890 if (irq == -1)
1891 goto done;
1892
1893 - info = irq_get_handler_data(irq);
1894 + info = irq_get_chip_data(irq);
1895
1896 if (!info)
1897 goto done;
1898 diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
1899 index d9909e2fc4c21..b100b8dae5884 100644
1900 --- a/fs/btrfs/disk-io.c
1901 +++ b/fs/btrfs/disk-io.c
1902 @@ -4432,6 +4432,7 @@ static void btrfs_cleanup_bg_io(struct btrfs_block_group_cache *cache)
1903 cache->io_ctl.inode = NULL;
1904 iput(inode);
1905 }
1906 + ASSERT(cache->io_ctl.pages == NULL);
1907 btrfs_put_block_group(cache);
1908 }
1909
1910 diff --git a/fs/btrfs/free-space-cache.c b/fs/btrfs/free-space-cache.c
1911 index 568ff2ee015be..8e93bd391b352 100644
1912 --- a/fs/btrfs/free-space-cache.c
1913 +++ b/fs/btrfs/free-space-cache.c
1914 @@ -1165,7 +1165,6 @@ int btrfs_wait_cache_io(struct btrfs_root *root,
1915 ret = update_cache_item(trans, root, inode, path, offset,
1916 io_ctl->entries, io_ctl->bitmaps);
1917 out:
1918 - io_ctl_free(io_ctl);
1919 if (ret) {
1920 invalidate_inode_pages2(inode->i_mapping);
1921 BTRFS_I(inode)->generation = 0;
1922 @@ -1314,6 +1313,7 @@ static int __btrfs_write_out_cache(struct btrfs_root *root, struct inode *inode,
1923 * them out later
1924 */
1925 io_ctl_drop_pages(io_ctl);
1926 + io_ctl_free(io_ctl);
1927
1928 unlock_extent_cached(&BTRFS_I(inode)->io_tree, 0,
1929 i_size_read(inode) - 1, &cached_state, GFP_NOFS);
1930 diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
1931 index c28ac9c464251..5bd1758f57b64 100644
1932 --- a/fs/btrfs/tree-log.c
1933 +++ b/fs/btrfs/tree-log.c
1934 @@ -3191,11 +3191,13 @@ fail:
1935 btrfs_free_path(path);
1936 out_unlock:
1937 mutex_unlock(&BTRFS_I(dir)->log_mutex);
1938 - if (ret == -ENOSPC) {
1939 + if (err == -ENOSPC) {
1940 btrfs_set_log_full_commit(root->fs_info, trans);
1941 - ret = 0;
1942 - } else if (ret < 0)
1943 - btrfs_abort_transaction(trans, ret);
1944 + err = 0;
1945 + } else if (err < 0 && err != -ENOENT) {
1946 + /* ENOENT can be returned if the entry hasn't been fsynced yet */
1947 + btrfs_abort_transaction(trans, err);
1948 + }
1949
1950 btrfs_end_log_trans(root);
1951
1952 diff --git a/fs/buffer.c b/fs/buffer.c
1953 index a89be9741d125..52f1a60417d1d 100644
1954 --- a/fs/buffer.c
1955 +++ b/fs/buffer.c
1956 @@ -3203,6 +3203,15 @@ int __sync_dirty_buffer(struct buffer_head *bh, int op_flags)
1957 WARN_ON(atomic_read(&bh->b_count) < 1);
1958 lock_buffer(bh);
1959 if (test_clear_buffer_dirty(bh)) {
1960 + /*
1961 + * The bh should be mapped, but it might not be if the
1962 + * device was hot-removed. Not much we can do but fail the I/O.
1963 + */
1964 + if (!buffer_mapped(bh)) {
1965 + unlock_buffer(bh);
1966 + return -EIO;
1967 + }
1968 +
1969 get_bh(bh);
1970 bh->b_end_io = end_buffer_write_sync;
1971 ret = submit_bh(REQ_OP_WRITE, op_flags, bh);
1972 diff --git a/fs/ceph/mds_client.c b/fs/ceph/mds_client.c
1973 index 3139fbd4c34e3..4ec5a109df82b 100644
1974 --- a/fs/ceph/mds_client.c
1975 +++ b/fs/ceph/mds_client.c
1976 @@ -3386,6 +3386,9 @@ static void delayed_work(struct work_struct *work)
1977 dout("mdsc delayed_work\n");
1978 ceph_check_delayed_caps(mdsc);
1979
1980 + if (mdsc->stopping)
1981 + return;
1982 +
1983 mutex_lock(&mdsc->mutex);
1984 renew_interval = mdsc->mdsmap->m_session_timeout >> 2;
1985 renew_caps = time_after_eq(jiffies, HZ*renew_interval +
1986 @@ -3717,7 +3720,16 @@ void ceph_mdsc_force_umount(struct ceph_mds_client *mdsc)
1987 static void ceph_mdsc_stop(struct ceph_mds_client *mdsc)
1988 {
1989 dout("stop\n");
1990 - cancel_delayed_work_sync(&mdsc->delayed_work); /* cancel timer */
1991 + /*
1992 + * Make sure the delayed work stopped before releasing
1993 + * the resources.
1994 + *
1995 + * Because the cancel_delayed_work_sync() will only
1996 + * guarantee that the work finishes executing. But the
1997 + * delayed work will re-arm itself again after that.
1998 + */
1999 + flush_delayed_work(&mdsc->delayed_work);
2000 +
2001 if (mdsc->mdsmap)
2002 ceph_mdsmap_destroy(mdsc->mdsmap);
2003 kfree(mdsc->sessions);
2004 diff --git a/fs/ext4/super.c b/fs/ext4/super.c
2005 index 370e4273042c5..472fa29c6f604 100644
2006 --- a/fs/ext4/super.c
2007 +++ b/fs/ext4/super.c
2008 @@ -4680,13 +4680,6 @@ static int ext4_commit_super(struct super_block *sb, int sync)
2009 if (!sbh || block_device_ejected(sb))
2010 return error;
2011
2012 - /*
2013 - * The superblock bh should be mapped, but it might not be if the
2014 - * device was hot-removed. Not much we can do but fail the I/O.
2015 - */
2016 - if (!buffer_mapped(sbh))
2017 - return error;
2018 -
2019 /*
2020 * If the file system is mounted read-only, don't update the
2021 * superblock write time. This avoids updating the superblock
2022 diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c
2023 index 5a1a6dbbc55fb..f978ae2bb846f 100644
2024 --- a/fs/fs-writeback.c
2025 +++ b/fs/fs-writeback.c
2026 @@ -45,7 +45,6 @@ struct wb_completion {
2027 struct wb_writeback_work {
2028 long nr_pages;
2029 struct super_block *sb;
2030 - unsigned long *older_than_this;
2031 enum writeback_sync_modes sync_mode;
2032 unsigned int tagged_writepages:1;
2033 unsigned int for_kupdate:1;
2034 @@ -160,7 +159,9 @@ static void inode_io_list_del_locked(struct inode *inode,
2035 struct bdi_writeback *wb)
2036 {
2037 assert_spin_locked(&wb->list_lock);
2038 + assert_spin_locked(&inode->i_lock);
2039
2040 + inode->i_state &= ~I_SYNC_QUEUED;
2041 list_del_init(&inode->i_io_list);
2042 wb_io_lists_depopulated(wb);
2043 }
2044 @@ -1039,7 +1040,9 @@ void inode_io_list_del(struct inode *inode)
2045 struct bdi_writeback *wb;
2046
2047 wb = inode_to_wb_and_lock_list(inode);
2048 + spin_lock(&inode->i_lock);
2049 inode_io_list_del_locked(inode, wb);
2050 + spin_unlock(&inode->i_lock);
2051 spin_unlock(&wb->list_lock);
2052 }
2053
2054 @@ -1088,8 +1091,10 @@ void sb_clear_inode_writeback(struct inode *inode)
2055 * the case then the inode must have been redirtied while it was being written
2056 * out and we don't reset its dirtied_when.
2057 */
2058 -static void redirty_tail(struct inode *inode, struct bdi_writeback *wb)
2059 +static void redirty_tail_locked(struct inode *inode, struct bdi_writeback *wb)
2060 {
2061 + assert_spin_locked(&inode->i_lock);
2062 +
2063 if (!list_empty(&wb->b_dirty)) {
2064 struct inode *tail;
2065
2066 @@ -1098,6 +1103,14 @@ static void redirty_tail(struct inode *inode, struct bdi_writeback *wb)
2067 inode->dirtied_when = jiffies;
2068 }
2069 inode_io_list_move_locked(inode, wb, &wb->b_dirty);
2070 + inode->i_state &= ~I_SYNC_QUEUED;
2071 +}
2072 +
2073 +static void redirty_tail(struct inode *inode, struct bdi_writeback *wb)
2074 +{
2075 + spin_lock(&inode->i_lock);
2076 + redirty_tail_locked(inode, wb);
2077 + spin_unlock(&inode->i_lock);
2078 }
2079
2080 /*
2081 @@ -1136,16 +1149,13 @@ static bool inode_dirtied_after(struct inode *inode, unsigned long t)
2082 #define EXPIRE_DIRTY_ATIME 0x0001
2083
2084 /*
2085 - * Move expired (dirtied before work->older_than_this) dirty inodes from
2086 + * Move expired (dirtied before dirtied_before) dirty inodes from
2087 * @delaying_queue to @dispatch_queue.
2088 */
2089 static int move_expired_inodes(struct list_head *delaying_queue,
2090 struct list_head *dispatch_queue,
2091 - int flags,
2092 - struct wb_writeback_work *work)
2093 + int flags, unsigned long dirtied_before)
2094 {
2095 - unsigned long *older_than_this = NULL;
2096 - unsigned long expire_time;
2097 LIST_HEAD(tmp);
2098 struct list_head *pos, *node;
2099 struct super_block *sb = NULL;
2100 @@ -1153,21 +1163,17 @@ static int move_expired_inodes(struct list_head *delaying_queue,
2101 int do_sb_sort = 0;
2102 int moved = 0;
2103
2104 - if ((flags & EXPIRE_DIRTY_ATIME) == 0)
2105 - older_than_this = work->older_than_this;
2106 - else if (!work->for_sync) {
2107 - expire_time = jiffies - (dirtytime_expire_interval * HZ);
2108 - older_than_this = &expire_time;
2109 - }
2110 while (!list_empty(delaying_queue)) {
2111 inode = wb_inode(delaying_queue->prev);
2112 - if (older_than_this &&
2113 - inode_dirtied_after(inode, *older_than_this))
2114 + if (inode_dirtied_after(inode, dirtied_before))
2115 break;
2116 list_move(&inode->i_io_list, &tmp);
2117 moved++;
2118 + spin_lock(&inode->i_lock);
2119 if (flags & EXPIRE_DIRTY_ATIME)
2120 - set_bit(__I_DIRTY_TIME_EXPIRED, &inode->i_state);
2121 + inode->i_state |= I_DIRTY_TIME_EXPIRED;
2122 + inode->i_state |= I_SYNC_QUEUED;
2123 + spin_unlock(&inode->i_lock);
2124 if (sb_is_blkdev_sb(inode->i_sb))
2125 continue;
2126 if (sb && sb != inode->i_sb)
2127 @@ -1205,18 +1211,22 @@ out:
2128 * |
2129 * +--> dequeue for IO
2130 */
2131 -static void queue_io(struct bdi_writeback *wb, struct wb_writeback_work *work)
2132 +static void queue_io(struct bdi_writeback *wb, struct wb_writeback_work *work,
2133 + unsigned long dirtied_before)
2134 {
2135 int moved;
2136 + unsigned long time_expire_jif = dirtied_before;
2137
2138 assert_spin_locked(&wb->list_lock);
2139 list_splice_init(&wb->b_more_io, &wb->b_io);
2140 - moved = move_expired_inodes(&wb->b_dirty, &wb->b_io, 0, work);
2141 + moved = move_expired_inodes(&wb->b_dirty, &wb->b_io, 0, dirtied_before);
2142 + if (!work->for_sync)
2143 + time_expire_jif = jiffies - dirtytime_expire_interval * HZ;
2144 moved += move_expired_inodes(&wb->b_dirty_time, &wb->b_io,
2145 - EXPIRE_DIRTY_ATIME, work);
2146 + EXPIRE_DIRTY_ATIME, time_expire_jif);
2147 if (moved)
2148 wb_io_lists_populated(wb);
2149 - trace_writeback_queue_io(wb, work, moved);
2150 + trace_writeback_queue_io(wb, work, dirtied_before, moved);
2151 }
2152
2153 static int write_inode(struct inode *inode, struct writeback_control *wbc)
2154 @@ -1310,7 +1320,7 @@ static void requeue_inode(struct inode *inode, struct bdi_writeback *wb,
2155 * writeback is not making progress due to locked
2156 * buffers. Skip this inode for now.
2157 */
2158 - redirty_tail(inode, wb);
2159 + redirty_tail_locked(inode, wb);
2160 return;
2161 }
2162
2163 @@ -1330,7 +1340,7 @@ static void requeue_inode(struct inode *inode, struct bdi_writeback *wb,
2164 * retrying writeback of the dirty page/inode
2165 * that cannot be performed immediately.
2166 */
2167 - redirty_tail(inode, wb);
2168 + redirty_tail_locked(inode, wb);
2169 }
2170 } else if (inode->i_state & I_DIRTY) {
2171 /*
2172 @@ -1338,10 +1348,11 @@ static void requeue_inode(struct inode *inode, struct bdi_writeback *wb,
2173 * such as delayed allocation during submission or metadata
2174 * updates after data IO completion.
2175 */
2176 - redirty_tail(inode, wb);
2177 + redirty_tail_locked(inode, wb);
2178 } else if (inode->i_state & I_DIRTY_TIME) {
2179 inode->dirtied_when = jiffies;
2180 inode_io_list_move_locked(inode, wb, &wb->b_dirty_time);
2181 + inode->i_state &= ~I_SYNC_QUEUED;
2182 } else {
2183 /* The inode is clean. Remove from writeback lists. */
2184 inode_io_list_del_locked(inode, wb);
2185 @@ -1585,8 +1596,8 @@ static long writeback_sb_inodes(struct super_block *sb,
2186 */
2187 spin_lock(&inode->i_lock);
2188 if (inode->i_state & (I_NEW | I_FREEING | I_WILL_FREE)) {
2189 + redirty_tail_locked(inode, wb);
2190 spin_unlock(&inode->i_lock);
2191 - redirty_tail(inode, wb);
2192 continue;
2193 }
2194 if ((inode->i_state & I_SYNC) && wbc.sync_mode != WB_SYNC_ALL) {
2195 @@ -1727,7 +1738,7 @@ static long writeback_inodes_wb(struct bdi_writeback *wb, long nr_pages,
2196 blk_start_plug(&plug);
2197 spin_lock(&wb->list_lock);
2198 if (list_empty(&wb->b_io))
2199 - queue_io(wb, &work);
2200 + queue_io(wb, &work, jiffies);
2201 __writeback_inodes_wb(wb, &work);
2202 spin_unlock(&wb->list_lock);
2203 blk_finish_plug(&plug);
2204 @@ -1747,7 +1758,7 @@ static long writeback_inodes_wb(struct bdi_writeback *wb, long nr_pages,
2205 * takes longer than a dirty_writeback_interval interval, then leave a
2206 * one-second gap.
2207 *
2208 - * older_than_this takes precedence over nr_to_write. So we'll only write back
2209 + * dirtied_before takes precedence over nr_to_write. So we'll only write back
2210 * all dirty pages if they are all attached to "old" mappings.
2211 */
2212 static long wb_writeback(struct bdi_writeback *wb,
2213 @@ -1755,14 +1766,11 @@ static long wb_writeback(struct bdi_writeback *wb,
2214 {
2215 unsigned long wb_start = jiffies;
2216 long nr_pages = work->nr_pages;
2217 - unsigned long oldest_jif;
2218 + unsigned long dirtied_before = jiffies;
2219 struct inode *inode;
2220 long progress;
2221 struct blk_plug plug;
2222
2223 - oldest_jif = jiffies;
2224 - work->older_than_this = &oldest_jif;
2225 -
2226 blk_start_plug(&plug);
2227 spin_lock(&wb->list_lock);
2228 for (;;) {
2229 @@ -1796,14 +1804,14 @@ static long wb_writeback(struct bdi_writeback *wb,
2230 * safe.
2231 */
2232 if (work->for_kupdate) {
2233 - oldest_jif = jiffies -
2234 + dirtied_before = jiffies -
2235 msecs_to_jiffies(dirty_expire_interval * 10);
2236 } else if (work->for_background)
2237 - oldest_jif = jiffies;
2238 + dirtied_before = jiffies;
2239
2240 trace_writeback_start(wb, work);
2241 if (list_empty(&wb->b_io))
2242 - queue_io(wb, work);
2243 + queue_io(wb, work, dirtied_before);
2244 if (work->sb)
2245 progress = writeback_sb_inodes(work->sb, wb, work);
2246 else
2247 @@ -2176,11 +2184,12 @@ void __mark_inode_dirty(struct inode *inode, int flags)
2248 inode->i_state |= flags;
2249
2250 /*
2251 - * If the inode is being synced, just update its dirty state.
2252 - * The unlocker will place the inode on the appropriate
2253 - * superblock list, based upon its state.
2254 + * If the inode is queued for writeback by flush worker, just
2255 + * update its dirty state. Once the flush worker is done with
2256 + * the inode it will place it on the appropriate superblock
2257 + * list, based upon its state.
2258 */
2259 - if (inode->i_state & I_SYNC)
2260 + if (inode->i_state & I_SYNC_QUEUED)
2261 goto out_unlock_inode;
2262
2263 /*
2264 diff --git a/fs/jbd2/transaction.c b/fs/jbd2/transaction.c
2265 index 8de458d64134a..cfbf5474bccab 100644
2266 --- a/fs/jbd2/transaction.c
2267 +++ b/fs/jbd2/transaction.c
2268 @@ -1896,6 +1896,9 @@ static void __jbd2_journal_temp_unlink_buffer(struct journal_head *jh)
2269 */
2270 static void __jbd2_journal_unfile_buffer(struct journal_head *jh)
2271 {
2272 + J_ASSERT_JH(jh, jh->b_transaction != NULL);
2273 + J_ASSERT_JH(jh, jh->b_next_transaction == NULL);
2274 +
2275 __jbd2_journal_temp_unlink_buffer(jh);
2276 jh->b_transaction = NULL;
2277 jbd2_journal_put_journal_head(jh);
2278 @@ -1987,6 +1990,7 @@ int jbd2_journal_try_to_free_buffers(journal_t *journal,
2279 {
2280 struct buffer_head *head;
2281 struct buffer_head *bh;
2282 + bool has_write_io_error = false;
2283 int ret = 0;
2284
2285 J_ASSERT(PageLocked(page));
2286 @@ -2011,11 +2015,26 @@ int jbd2_journal_try_to_free_buffers(journal_t *journal,
2287 jbd_unlock_bh_state(bh);
2288 if (buffer_jbd(bh))
2289 goto busy;
2290 +
2291 + /*
2292 + * If we free a metadata buffer which has been failed to
2293 + * write out, the jbd2 checkpoint procedure will not detect
2294 + * this failure and may lead to filesystem inconsistency
2295 + * after cleanup journal tail.
2296 + */
2297 + if (buffer_write_io_error(bh)) {
2298 + pr_err("JBD2: Error while async write back metadata bh %llu.",
2299 + (unsigned long long)bh->b_blocknr);
2300 + has_write_io_error = true;
2301 + }
2302 } while ((bh = bh->b_this_page) != head);
2303
2304 ret = try_to_free_buffers(page);
2305
2306 busy:
2307 + if (has_write_io_error)
2308 + jbd2_journal_abort(journal, -EIO);
2309 +
2310 return ret;
2311 }
2312
2313 @@ -2443,6 +2462,13 @@ void __jbd2_journal_refile_buffer(struct journal_head *jh)
2314
2315 was_dirty = test_clear_buffer_jbddirty(bh);
2316 __jbd2_journal_temp_unlink_buffer(jh);
2317 +
2318 + /*
2319 + * b_transaction must be set, otherwise the new b_transaction won't
2320 + * be holding jh reference
2321 + */
2322 + J_ASSERT_JH(jh, jh->b_transaction != NULL);
2323 +
2324 /*
2325 * We set b_transaction here because b_next_transaction will inherit
2326 * our jh reference and thus __jbd2_journal_file_buffer() must not
2327 diff --git a/include/linux/efi.h b/include/linux/efi.h
2328 index 02c4f16685b69..69605956beb85 100644
2329 --- a/include/linux/efi.h
2330 +++ b/include/linux/efi.h
2331 @@ -910,7 +910,11 @@ extern void *efi_get_pal_addr (void);
2332 extern void efi_map_pal_code (void);
2333 extern void efi_memmap_walk (efi_freemem_callback_t callback, void *arg);
2334 extern void efi_gettimeofday (struct timespec64 *ts);
2335 +#ifdef CONFIG_EFI
2336 extern void efi_enter_virtual_mode (void); /* switch EFI to virtual mode, if possible */
2337 +#else
2338 +static inline void efi_enter_virtual_mode (void) {}
2339 +#endif
2340 #ifdef CONFIG_X86
2341 extern void efi_late_init(void);
2342 extern void efi_free_boot_services(void);
2343 diff --git a/include/linux/fs.h b/include/linux/fs.h
2344 index 2d569738eb320..b8d65e0ab9341 100644
2345 --- a/include/linux/fs.h
2346 +++ b/include/linux/fs.h
2347 @@ -1954,6 +1954,10 @@ static inline bool HAS_UNMAPPED_ID(struct inode *inode)
2348 * wb stat updates to grab mapping->tree_lock. See
2349 * inode_switch_wb_work_fn() for details.
2350 *
2351 + * I_SYNC_QUEUED Inode is queued in b_io or b_more_io writeback lists.
2352 + * Used to detect that mark_inode_dirty() should not move
2353 + * inode between dirty lists.
2354 + *
2355 * Q: What is the difference between I_WILL_FREE and I_FREEING?
2356 */
2357 #define I_DIRTY_SYNC (1 << 0)
2358 @@ -1971,9 +1975,9 @@ static inline bool HAS_UNMAPPED_ID(struct inode *inode)
2359 #define I_DIO_WAKEUP (1 << __I_DIO_WAKEUP)
2360 #define I_LINKABLE (1 << 10)
2361 #define I_DIRTY_TIME (1 << 11)
2362 -#define __I_DIRTY_TIME_EXPIRED 12
2363 -#define I_DIRTY_TIME_EXPIRED (1 << __I_DIRTY_TIME_EXPIRED)
2364 +#define I_DIRTY_TIME_EXPIRED (1 << 12)
2365 #define I_WB_SWITCH (1 << 13)
2366 +#define I_SYNC_QUEUED (1 << 17)
2367
2368 #define I_DIRTY (I_DIRTY_SYNC | I_DIRTY_DATASYNC | I_DIRTY_PAGES)
2369 #define I_DIRTY_ALL (I_DIRTY | I_DIRTY_TIME)
2370 diff --git a/include/linux/overflow.h b/include/linux/overflow.h
2371 index d309788f4cd24..40b48e2133cb8 100644
2372 --- a/include/linux/overflow.h
2373 +++ b/include/linux/overflow.h
2374 @@ -233,4 +233,77 @@
2375 (*_d >> _to_shift) != _a); \
2376 })
2377
2378 +/**
2379 + * array_size() - Calculate size of 2-dimensional array.
2380 + *
2381 + * @a: dimension one
2382 + * @b: dimension two
2383 + *
2384 + * Calculates size of 2-dimensional array: @a * @b.
2385 + *
2386 + * Returns: number of bytes needed to represent the array or SIZE_MAX on
2387 + * overflow.
2388 + */
2389 +static inline __must_check size_t array_size(size_t a, size_t b)
2390 +{
2391 + size_t bytes;
2392 +
2393 + if (check_mul_overflow(a, b, &bytes))
2394 + return SIZE_MAX;
2395 +
2396 + return bytes;
2397 +}
2398 +
2399 +/**
2400 + * array3_size() - Calculate size of 3-dimensional array.
2401 + *
2402 + * @a: dimension one
2403 + * @b: dimension two
2404 + * @c: dimension three
2405 + *
2406 + * Calculates size of 3-dimensional array: @a * @b * @c.
2407 + *
2408 + * Returns: number of bytes needed to represent the array or SIZE_MAX on
2409 + * overflow.
2410 + */
2411 +static inline __must_check size_t array3_size(size_t a, size_t b, size_t c)
2412 +{
2413 + size_t bytes;
2414 +
2415 + if (check_mul_overflow(a, b, &bytes))
2416 + return SIZE_MAX;
2417 + if (check_mul_overflow(bytes, c, &bytes))
2418 + return SIZE_MAX;
2419 +
2420 + return bytes;
2421 +}
2422 +
2423 +static inline __must_check size_t __ab_c_size(size_t n, size_t size, size_t c)
2424 +{
2425 + size_t bytes;
2426 +
2427 + if (check_mul_overflow(n, size, &bytes))
2428 + return SIZE_MAX;
2429 + if (check_add_overflow(bytes, c, &bytes))
2430 + return SIZE_MAX;
2431 +
2432 + return bytes;
2433 +}
2434 +
2435 +/**
2436 + * struct_size() - Calculate size of structure with trailing array.
2437 + * @p: Pointer to the structure.
2438 + * @member: Name of the array member.
2439 + * @n: Number of elements in the array.
2440 + *
2441 + * Calculates size of memory needed for structure @p followed by an
2442 + * array of @n @member elements.
2443 + *
2444 + * Return: number of bytes needed or SIZE_MAX on overflow.
2445 + */
2446 +#define struct_size(p, member, n) \
2447 + __ab_c_size(n, \
2448 + sizeof(*(p)->member) + __must_be_array((p)->member),\
2449 + sizeof(*(p)))
2450 +
2451 #endif /* __LINUX_OVERFLOW_H */
2452 diff --git a/include/trace/events/writeback.h b/include/trace/events/writeback.h
2453 index 2ccd9ccbf9efe..ec964a924cd2f 100644
2454 --- a/include/trace/events/writeback.h
2455 +++ b/include/trace/events/writeback.h
2456 @@ -360,8 +360,9 @@ DEFINE_WBC_EVENT(wbc_writepage);
2457 TRACE_EVENT(writeback_queue_io,
2458 TP_PROTO(struct bdi_writeback *wb,
2459 struct wb_writeback_work *work,
2460 + unsigned long dirtied_before,
2461 int moved),
2462 - TP_ARGS(wb, work, moved),
2463 + TP_ARGS(wb, work, dirtied_before, moved),
2464 TP_STRUCT__entry(
2465 __array(char, name, 32)
2466 __field(unsigned long, older)
2467 @@ -371,19 +372,17 @@ TRACE_EVENT(writeback_queue_io,
2468 __field(unsigned int, cgroup_ino)
2469 ),
2470 TP_fast_assign(
2471 - unsigned long *older_than_this = work->older_than_this;
2472 strncpy(__entry->name, dev_name(wb->bdi->dev), 32);
2473 - __entry->older = older_than_this ? *older_than_this : 0;
2474 - __entry->age = older_than_this ?
2475 - (jiffies - *older_than_this) * 1000 / HZ : -1;
2476 + __entry->older = dirtied_before;
2477 + __entry->age = (jiffies - dirtied_before) * 1000 / HZ;
2478 __entry->moved = moved;
2479 __entry->reason = work->reason;
2480 __entry->cgroup_ino = __trace_wb_assign_cgroup(wb);
2481 ),
2482 TP_printk("bdi %s: older=%lu age=%ld enqueue=%d reason=%s cgroup_ino=%u",
2483 __entry->name,
2484 - __entry->older, /* older_than_this in jiffies */
2485 - __entry->age, /* older_than_this in relative milliseconds */
2486 + __entry->older, /* dirtied_before in jiffies */
2487 + __entry->age, /* dirtied_before in relative milliseconds */
2488 __entry->moved,
2489 __print_symbolic(__entry->reason, WB_WORK_REASON),
2490 __entry->cgroup_ino
2491 diff --git a/kernel/locking/lockdep_proc.c b/kernel/locking/lockdep_proc.c
2492 index 75d80809c48c9..09bad6cbb95cf 100644
2493 --- a/kernel/locking/lockdep_proc.c
2494 +++ b/kernel/locking/lockdep_proc.c
2495 @@ -425,7 +425,7 @@ static void seq_lock_time(struct seq_file *m, struct lock_time *lt)
2496 seq_time(m, lt->min);
2497 seq_time(m, lt->max);
2498 seq_time(m, lt->total);
2499 - seq_time(m, lt->nr ? div_s64(lt->total, lt->nr) : 0);
2500 + seq_time(m, lt->nr ? div64_u64(lt->total, lt->nr) : 0);
2501 }
2502
2503 static void seq_stats(struct seq_file *m, struct lock_stat_data *data)
2504 diff --git a/net/core/skbuff.c b/net/core/skbuff.c
2505 index 7164569c1ec80..e72775024c6af 100644
2506 --- a/net/core/skbuff.c
2507 +++ b/net/core/skbuff.c
2508 @@ -4591,8 +4591,8 @@ struct sk_buff *skb_vlan_untag(struct sk_buff *skb)
2509 skb = skb_share_check(skb, GFP_ATOMIC);
2510 if (unlikely(!skb))
2511 goto err_free;
2512 -
2513 - if (unlikely(!pskb_may_pull(skb, VLAN_HLEN)))
2514 + /* We may access the two bytes after vlan_hdr in vlan_set_encap_proto(). */
2515 + if (unlikely(!pskb_may_pull(skb, VLAN_HLEN + sizeof(unsigned short))))
2516 goto err_free;
2517
2518 vhdr = (struct vlan_hdr *)skb->data;
2519 diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c
2520 index ed795d50a8d2b..d9e60aa2ea1b2 100644
2521 --- a/net/ipv6/ip6_tunnel.c
2522 +++ b/net/ipv6/ip6_tunnel.c
2523 @@ -871,7 +871,15 @@ int ip6_tnl_rcv(struct ip6_tnl *t, struct sk_buff *skb,
2524 struct metadata_dst *tun_dst,
2525 bool log_ecn_err)
2526 {
2527 - return __ip6_tnl_rcv(t, skb, tpi, NULL, ip6ip6_dscp_ecn_decapsulate,
2528 + int (*dscp_ecn_decapsulate)(const struct ip6_tnl *t,
2529 + const struct ipv6hdr *ipv6h,
2530 + struct sk_buff *skb);
2531 +
2532 + dscp_ecn_decapsulate = ip6ip6_dscp_ecn_decapsulate;
2533 + if (tpi->proto == htons(ETH_P_IP))
2534 + dscp_ecn_decapsulate = ip4ip6_dscp_ecn_decapsulate;
2535 +
2536 + return __ip6_tnl_rcv(t, skb, tpi, NULL, dscp_ecn_decapsulate,
2537 log_ecn_err);
2538 }
2539 EXPORT_SYMBOL(ip6_tnl_rcv);
2540 diff --git a/net/tipc/netlink_compat.c b/net/tipc/netlink_compat.c
2541 index cdc49e680be4b..403be9bfd8d16 100644
2542 --- a/net/tipc/netlink_compat.c
2543 +++ b/net/tipc/netlink_compat.c
2544 @@ -250,8 +250,9 @@ err_out:
2545 static int tipc_nl_compat_dumpit(struct tipc_nl_compat_cmd_dump *cmd,
2546 struct tipc_nl_compat_msg *msg)
2547 {
2548 - int err;
2549 + struct nlmsghdr *nlh;
2550 struct sk_buff *arg;
2551 + int err;
2552
2553 if (msg->req_type && (!msg->req_size ||
2554 !TLV_CHECK_TYPE(msg->req, msg->req_type)))
2555 @@ -280,6 +281,15 @@ static int tipc_nl_compat_dumpit(struct tipc_nl_compat_cmd_dump *cmd,
2556 return -ENOMEM;
2557 }
2558
2559 + nlh = nlmsg_put(arg, 0, 0, tipc_genl_family.id, 0, NLM_F_MULTI);
2560 + if (!nlh) {
2561 + kfree_skb(arg);
2562 + kfree_skb(msg->rep);
2563 + msg->rep = NULL;
2564 + return -EMSGSIZE;
2565 + }
2566 + nlmsg_end(arg, nlh);
2567 +
2568 err = __tipc_nl_compat_dumpit(cmd, msg, arg);
2569 if (err) {
2570 kfree_skb(msg->rep);
2571 diff --git a/sound/pci/cs46xx/cs46xx_lib.c b/sound/pci/cs46xx/cs46xx_lib.c
2572 index 528102cc2d5d0..d824ff4ae3e3b 100644
2573 --- a/sound/pci/cs46xx/cs46xx_lib.c
2574 +++ b/sound/pci/cs46xx/cs46xx_lib.c
2575 @@ -780,7 +780,7 @@ static void snd_cs46xx_set_capture_sample_rate(struct snd_cs46xx *chip, unsigned
2576 rate = 48000 / 9;
2577
2578 /*
2579 - * We can not capture at at rate greater than the Input Rate (48000).
2580 + * We can not capture at a rate greater than the Input Rate (48000).
2581 * Return an error if an attempt is made to stray outside that limit.
2582 */
2583 if (rate > 48000)
2584 diff --git a/sound/pci/cs46xx/dsp_spos_scb_lib.c b/sound/pci/cs46xx/dsp_spos_scb_lib.c
2585 index 7488e1b7a7707..4e726d39b05d1 100644
2586 --- a/sound/pci/cs46xx/dsp_spos_scb_lib.c
2587 +++ b/sound/pci/cs46xx/dsp_spos_scb_lib.c
2588 @@ -1742,7 +1742,7 @@ int cs46xx_iec958_pre_open (struct snd_cs46xx *chip)
2589 struct dsp_spos_instance * ins = chip->dsp_spos_instance;
2590
2591 if ( ins->spdif_status_out & DSP_SPDIF_STATUS_OUTPUT_ENABLED ) {
2592 - /* remove AsynchFGTxSCB and and PCMSerialInput_II */
2593 + /* remove AsynchFGTxSCB and PCMSerialInput_II */
2594 cs46xx_dsp_disable_spdif_out (chip);
2595
2596 /* save state */
2597 diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
2598 index cbe0248225c1c..4e67614f15f8e 100644
2599 --- a/sound/pci/hda/hda_codec.c
2600 +++ b/sound/pci/hda/hda_codec.c
2601 @@ -3496,7 +3496,7 @@ EXPORT_SYMBOL_GPL(snd_hda_set_power_save);
2602 * @nid: NID to check / update
2603 *
2604 * Check whether the given NID is in the amp list. If it's in the list,
2605 - * check the current AMP status, and update the the power-status according
2606 + * check the current AMP status, and update the power-status according
2607 * to the mute status.
2608 *
2609 * This function is supposed to be set or called from the check_power_status
2610 diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c
2611 index 949c90a859fab..184089c5e8cbc 100644
2612 --- a/sound/pci/hda/hda_generic.c
2613 +++ b/sound/pci/hda/hda_generic.c
2614 @@ -820,7 +820,7 @@ static void activate_amp_in(struct hda_codec *codec, struct nid_path *path,
2615 }
2616 }
2617
2618 -/* sync power of each widget in the the given path */
2619 +/* sync power of each widget in the given path */
2620 static hda_nid_t path_power_update(struct hda_codec *codec,
2621 struct nid_path *path,
2622 bool allow_powerdown)
2623 diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
2624 index d1a6d20ace0da..80b72d0702c5e 100644
2625 --- a/sound/pci/hda/patch_sigmatel.c
2626 +++ b/sound/pci/hda/patch_sigmatel.c
2627 @@ -862,7 +862,7 @@ static int stac_auto_create_beep_ctls(struct hda_codec *codec,
2628 static struct snd_kcontrol_new beep_vol_ctl =
2629 HDA_CODEC_VOLUME(NULL, 0, 0, 0);
2630
2631 - /* check for mute support for the the amp */
2632 + /* check for mute support for the amp */
2633 if ((caps & AC_AMPCAP_MUTE) >> AC_AMPCAP_MUTE_SHIFT) {
2634 const struct snd_kcontrol_new *temp;
2635 if (spec->anabeep_nid == nid)
2636 diff --git a/sound/pci/ice1712/prodigy192.c b/sound/pci/ice1712/prodigy192.c
2637 index 3919aed39ca03..5e52086d7b986 100644
2638 --- a/sound/pci/ice1712/prodigy192.c
2639 +++ b/sound/pci/ice1712/prodigy192.c
2640 @@ -31,7 +31,7 @@
2641 * Experimentally I found out that only a combination of
2642 * OCKS0=1, OCKS1=1 (128fs, 64fs output) and ice1724 -
2643 * VT1724_MT_I2S_MCLK_128X=0 (256fs input) yields correct
2644 - * sampling rate. That means the the FPGA doubles the
2645 + * sampling rate. That means that the FPGA doubles the
2646 * MCK01 rate.
2647 *
2648 * Copyright (c) 2003 Takashi Iwai <tiwai@suse.de>
2649 diff --git a/sound/pci/oxygen/xonar_dg.c b/sound/pci/oxygen/xonar_dg.c
2650 index 4cf3200e988b0..df44135e1b0c9 100644
2651 --- a/sound/pci/oxygen/xonar_dg.c
2652 +++ b/sound/pci/oxygen/xonar_dg.c
2653 @@ -39,7 +39,7 @@
2654 * GPIO 4 <- headphone detect
2655 * GPIO 5 -> enable ADC analog circuit for the left channel
2656 * GPIO 6 -> enable ADC analog circuit for the right channel
2657 - * GPIO 7 -> switch green rear output jack between CS4245 and and the first
2658 + * GPIO 7 -> switch green rear output jack between CS4245 and the first
2659 * channel of CS4361 (mechanical relay)
2660 * GPIO 8 -> enable output to speakers
2661 *
2662 diff --git a/sound/soc/tegra/tegra30_ahub.c b/sound/soc/tegra/tegra30_ahub.c
2663 index fef3b9a21a667..e441e23a37e4f 100644
2664 --- a/sound/soc/tegra/tegra30_ahub.c
2665 +++ b/sound/soc/tegra/tegra30_ahub.c
2666 @@ -656,8 +656,10 @@ static int tegra30_ahub_resume(struct device *dev)
2667 int ret;
2668
2669 ret = pm_runtime_get_sync(dev);
2670 - if (ret < 0)
2671 + if (ret < 0) {
2672 + pm_runtime_put(dev);
2673 return ret;
2674 + }
2675 ret = regcache_sync(ahub->regmap_ahub);
2676 ret |= regcache_sync(ahub->regmap_apbif);
2677 pm_runtime_put(dev);
2678 diff --git a/sound/soc/tegra/tegra30_i2s.c b/sound/soc/tegra/tegra30_i2s.c
2679 index 8e55583aa104e..516f37896092c 100644
2680 --- a/sound/soc/tegra/tegra30_i2s.c
2681 +++ b/sound/soc/tegra/tegra30_i2s.c
2682 @@ -552,8 +552,10 @@ static int tegra30_i2s_resume(struct device *dev)
2683 int ret;
2684
2685 ret = pm_runtime_get_sync(dev);
2686 - if (ret < 0)
2687 + if (ret < 0) {
2688 + pm_runtime_put(dev);
2689 return ret;
2690 + }
2691 ret = regcache_sync(i2s->regmap);
2692 pm_runtime_put(dev);
2693
2694 diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h
2695 index 689fd3103e5b6..a917b7e02d312 100644
2696 --- a/sound/usb/quirks-table.h
2697 +++ b/sound/usb/quirks-table.h
2698 @@ -3331,8 +3331,8 @@ AU0828_DEVICE(0x2040, 0x7270, "Hauppauge", "HVR-950Q"),
2699 * they pretend to be 96kHz mono as a workaround for stereo being broken
2700 * by that...
2701 *
2702 - * They also have swapped L-R channels, but that's for userspace to deal
2703 - * with.
2704 + * They also have an issue with initial stream alignment that causes the
2705 + * channels to be swapped and out of phase, which is dealt with in quirks.c.
2706 */
2707 {
2708 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
2709 diff --git a/tools/testing/selftests/powerpc/pmu/ebb/back_to_back_ebbs_test.c b/tools/testing/selftests/powerpc/pmu/ebb/back_to_back_ebbs_test.c
2710 index 94110b1dcd3d8..031baa43646fb 100644
2711 --- a/tools/testing/selftests/powerpc/pmu/ebb/back_to_back_ebbs_test.c
2712 +++ b/tools/testing/selftests/powerpc/pmu/ebb/back_to_back_ebbs_test.c
2713 @@ -91,8 +91,6 @@ int back_to_back_ebbs(void)
2714 ebb_global_disable();
2715 ebb_freeze_pmcs();
2716
2717 - count_pmc(1, sample_period);
2718 -
2719 dump_ebb_state();
2720
2721 event_close(&event);
2722 diff --git a/tools/testing/selftests/powerpc/pmu/ebb/cycles_test.c b/tools/testing/selftests/powerpc/pmu/ebb/cycles_test.c
2723 index 7c57a8d79535d..361e0be9df9ae 100644
2724 --- a/tools/testing/selftests/powerpc/pmu/ebb/cycles_test.c
2725 +++ b/tools/testing/selftests/powerpc/pmu/ebb/cycles_test.c
2726 @@ -42,8 +42,6 @@ int cycles(void)
2727 ebb_global_disable();
2728 ebb_freeze_pmcs();
2729
2730 - count_pmc(1, sample_period);
2731 -
2732 dump_ebb_state();
2733
2734 event_close(&event);
2735 diff --git a/tools/testing/selftests/powerpc/pmu/ebb/cycles_with_freeze_test.c b/tools/testing/selftests/powerpc/pmu/ebb/cycles_with_freeze_test.c
2736 index ecf5ee3283a3e..fe7d0dc2a1a26 100644
2737 --- a/tools/testing/selftests/powerpc/pmu/ebb/cycles_with_freeze_test.c
2738 +++ b/tools/testing/selftests/powerpc/pmu/ebb/cycles_with_freeze_test.c
2739 @@ -99,8 +99,6 @@ int cycles_with_freeze(void)
2740 ebb_global_disable();
2741 ebb_freeze_pmcs();
2742
2743 - count_pmc(1, sample_period);
2744 -
2745 dump_ebb_state();
2746
2747 printf("EBBs while frozen %d\n", ebbs_while_frozen);
2748 diff --git a/tools/testing/selftests/powerpc/pmu/ebb/cycles_with_mmcr2_test.c b/tools/testing/selftests/powerpc/pmu/ebb/cycles_with_mmcr2_test.c
2749 index c0faba520b35c..b9b30f974b5ea 100644
2750 --- a/tools/testing/selftests/powerpc/pmu/ebb/cycles_with_mmcr2_test.c
2751 +++ b/tools/testing/selftests/powerpc/pmu/ebb/cycles_with_mmcr2_test.c
2752 @@ -71,8 +71,6 @@ int cycles_with_mmcr2(void)
2753 ebb_global_disable();
2754 ebb_freeze_pmcs();
2755
2756 - count_pmc(1, sample_period);
2757 -
2758 dump_ebb_state();
2759
2760 event_close(&event);
2761 diff --git a/tools/testing/selftests/powerpc/pmu/ebb/ebb.c b/tools/testing/selftests/powerpc/pmu/ebb/ebb.c
2762 index 46681fec549b8..2694ae161a84a 100644
2763 --- a/tools/testing/selftests/powerpc/pmu/ebb/ebb.c
2764 +++ b/tools/testing/selftests/powerpc/pmu/ebb/ebb.c
2765 @@ -396,8 +396,6 @@ int ebb_child(union pipe read_pipe, union pipe write_pipe)
2766 ebb_global_disable();
2767 ebb_freeze_pmcs();
2768
2769 - count_pmc(1, sample_period);
2770 -
2771 dump_ebb_state();
2772
2773 event_close(&event);
2774 diff --git a/tools/testing/selftests/powerpc/pmu/ebb/ebb_on_willing_child_test.c b/tools/testing/selftests/powerpc/pmu/ebb/ebb_on_willing_child_test.c
2775 index a991d2ea8d0a1..174e4f4dae6c0 100644
2776 --- a/tools/testing/selftests/powerpc/pmu/ebb/ebb_on_willing_child_test.c
2777 +++ b/tools/testing/selftests/powerpc/pmu/ebb/ebb_on_willing_child_test.c
2778 @@ -38,8 +38,6 @@ static int victim_child(union pipe read_pipe, union pipe write_pipe)
2779 ebb_global_disable();
2780 ebb_freeze_pmcs();
2781
2782 - count_pmc(1, sample_period);
2783 -
2784 dump_ebb_state();
2785
2786 FAIL_IF(ebb_state.stats.ebb_count == 0);
2787 diff --git a/tools/testing/selftests/powerpc/pmu/ebb/lost_exception_test.c b/tools/testing/selftests/powerpc/pmu/ebb/lost_exception_test.c
2788 index eb8acb78bc6c1..531083accfcad 100644
2789 --- a/tools/testing/selftests/powerpc/pmu/ebb/lost_exception_test.c
2790 +++ b/tools/testing/selftests/powerpc/pmu/ebb/lost_exception_test.c
2791 @@ -75,7 +75,6 @@ static int test_body(void)
2792 ebb_freeze_pmcs();
2793 ebb_global_disable();
2794
2795 - count_pmc(4, sample_period);
2796 mtspr(SPRN_PMC4, 0xdead);
2797
2798 dump_summary_ebb_state();
2799 diff --git a/tools/testing/selftests/powerpc/pmu/ebb/multi_counter_test.c b/tools/testing/selftests/powerpc/pmu/ebb/multi_counter_test.c
2800 index 6ff8c8ff27d66..035c02273cd49 100644
2801 --- a/tools/testing/selftests/powerpc/pmu/ebb/multi_counter_test.c
2802 +++ b/tools/testing/selftests/powerpc/pmu/ebb/multi_counter_test.c
2803 @@ -70,13 +70,6 @@ int multi_counter(void)
2804 ebb_global_disable();
2805 ebb_freeze_pmcs();
2806
2807 - count_pmc(1, sample_period);
2808 - count_pmc(2, sample_period);
2809 - count_pmc(3, sample_period);
2810 - count_pmc(4, sample_period);
2811 - count_pmc(5, sample_period);
2812 - count_pmc(6, sample_period);
2813 -
2814 dump_ebb_state();
2815
2816 for (i = 0; i < 6; i++)
2817 diff --git a/tools/testing/selftests/powerpc/pmu/ebb/multi_ebb_procs_test.c b/tools/testing/selftests/powerpc/pmu/ebb/multi_ebb_procs_test.c
2818 index 037cb6154f360..3e9d4ac965c85 100644
2819 --- a/tools/testing/selftests/powerpc/pmu/ebb/multi_ebb_procs_test.c
2820 +++ b/tools/testing/selftests/powerpc/pmu/ebb/multi_ebb_procs_test.c
2821 @@ -61,8 +61,6 @@ static int cycles_child(void)
2822 ebb_global_disable();
2823 ebb_freeze_pmcs();
2824
2825 - count_pmc(1, sample_period);
2826 -
2827 dump_summary_ebb_state();
2828
2829 event_close(&event);
2830 diff --git a/tools/testing/selftests/powerpc/pmu/ebb/pmae_handling_test.c b/tools/testing/selftests/powerpc/pmu/ebb/pmae_handling_test.c
2831 index c5fa64790c22e..d90891fe96a32 100644
2832 --- a/tools/testing/selftests/powerpc/pmu/ebb/pmae_handling_test.c
2833 +++ b/tools/testing/selftests/powerpc/pmu/ebb/pmae_handling_test.c
2834 @@ -82,8 +82,6 @@ static int test_body(void)
2835 ebb_global_disable();
2836 ebb_freeze_pmcs();
2837
2838 - count_pmc(1, sample_period);
2839 -
2840 dump_ebb_state();
2841
2842 if (mmcr0_mismatch)
2843 diff --git a/tools/testing/selftests/powerpc/pmu/ebb/pmc56_overflow_test.c b/tools/testing/selftests/powerpc/pmu/ebb/pmc56_overflow_test.c
2844 index 30e1ac62e8cb4..8ca92b9ee5b01 100644
2845 --- a/tools/testing/selftests/powerpc/pmu/ebb/pmc56_overflow_test.c
2846 +++ b/tools/testing/selftests/powerpc/pmu/ebb/pmc56_overflow_test.c
2847 @@ -76,8 +76,6 @@ int pmc56_overflow(void)
2848 ebb_global_disable();
2849 ebb_freeze_pmcs();
2850
2851 - count_pmc(2, sample_period);
2852 -
2853 dump_ebb_state();
2854
2855 printf("PMC5/6 overflow %d\n", pmc56_overflowed);