Magellan Linux

Contents of /trunk/kernel-alx/patches-4.19/0175-4.19.76-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3472 - (show annotations) (download)
Tue Oct 29 10:31:32 2019 UTC (4 years, 6 months ago) by niro
File size: 84518 byte(s)
-linux-4.19.76
1 diff --git a/Makefile b/Makefile
2 index 4bf6f24916bf..9cb471a75a1b 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,7 +1,7 @@
6 # SPDX-License-Identifier: GPL-2.0
7 VERSION = 4
8 PATCHLEVEL = 19
9 -SUBLEVEL = 75
10 +SUBLEVEL = 76
11 EXTRAVERSION =
12 NAME = "People's Front"
13
14 diff --git a/arch/powerpc/include/asm/opal.h b/arch/powerpc/include/asm/opal.h
15 index ff3866473afe..d8d886dee54e 100644
16 --- a/arch/powerpc/include/asm/opal.h
17 +++ b/arch/powerpc/include/asm/opal.h
18 @@ -275,7 +275,7 @@ int64_t opal_xive_get_vp_info(uint64_t vp,
19 int64_t opal_xive_set_vp_info(uint64_t vp,
20 uint64_t flags,
21 uint64_t report_cl_pair);
22 -int64_t opal_xive_allocate_irq(uint32_t chip_id);
23 +int64_t opal_xive_allocate_irq_raw(uint32_t chip_id);
24 int64_t opal_xive_free_irq(uint32_t girq);
25 int64_t opal_xive_sync(uint32_t type, uint32_t id);
26 int64_t opal_xive_dump(uint32_t type, uint32_t id);
27 diff --git a/arch/powerpc/platforms/powernv/opal-wrappers.S b/arch/powerpc/platforms/powernv/opal-wrappers.S
28 index f4875fe3f8ff..74215ebda142 100644
29 --- a/arch/powerpc/platforms/powernv/opal-wrappers.S
30 +++ b/arch/powerpc/platforms/powernv/opal-wrappers.S
31 @@ -303,7 +303,7 @@ OPAL_CALL(opal_xive_set_queue_info, OPAL_XIVE_SET_QUEUE_INFO);
32 OPAL_CALL(opal_xive_donate_page, OPAL_XIVE_DONATE_PAGE);
33 OPAL_CALL(opal_xive_alloc_vp_block, OPAL_XIVE_ALLOCATE_VP_BLOCK);
34 OPAL_CALL(opal_xive_free_vp_block, OPAL_XIVE_FREE_VP_BLOCK);
35 -OPAL_CALL(opal_xive_allocate_irq, OPAL_XIVE_ALLOCATE_IRQ);
36 +OPAL_CALL(opal_xive_allocate_irq_raw, OPAL_XIVE_ALLOCATE_IRQ);
37 OPAL_CALL(opal_xive_free_irq, OPAL_XIVE_FREE_IRQ);
38 OPAL_CALL(opal_xive_get_vp_info, OPAL_XIVE_GET_VP_INFO);
39 OPAL_CALL(opal_xive_set_vp_info, OPAL_XIVE_SET_VP_INFO);
40 diff --git a/arch/powerpc/sysdev/xive/native.c b/arch/powerpc/sysdev/xive/native.c
41 index 5b20a678d755..6d5b28022452 100644
42 --- a/arch/powerpc/sysdev/xive/native.c
43 +++ b/arch/powerpc/sysdev/xive/native.c
44 @@ -235,6 +235,17 @@ static bool xive_native_match(struct device_node *node)
45 return of_device_is_compatible(node, "ibm,opal-xive-vc");
46 }
47
48 +static s64 opal_xive_allocate_irq(u32 chip_id)
49 +{
50 + s64 irq = opal_xive_allocate_irq_raw(chip_id);
51 +
52 + /*
53 + * Old versions of skiboot can incorrectly return 0xffffffff to
54 + * indicate no space, fix it up here.
55 + */
56 + return irq == 0xffffffff ? OPAL_RESOURCE : irq;
57 +}
58 +
59 #ifdef CONFIG_SMP
60 static int xive_native_get_ipi(unsigned int cpu, struct xive_cpu *xc)
61 {
62 diff --git a/block/blk-core.c b/block/blk-core.c
63 index af635f878f96..074ae9376189 100644
64 --- a/block/blk-core.c
65 +++ b/block/blk-core.c
66 @@ -1165,7 +1165,7 @@ int blk_init_allocated_queue(struct request_queue *q)
67 {
68 WARN_ON_ONCE(q->mq_ops);
69
70 - q->fq = blk_alloc_flush_queue(q, NUMA_NO_NODE, q->cmd_size);
71 + q->fq = blk_alloc_flush_queue(q, NUMA_NO_NODE, q->cmd_size, GFP_KERNEL);
72 if (!q->fq)
73 return -ENOMEM;
74
75 diff --git a/block/blk-flush.c b/block/blk-flush.c
76 index 76487948a27f..87fc49daa2b4 100644
77 --- a/block/blk-flush.c
78 +++ b/block/blk-flush.c
79 @@ -566,12 +566,12 @@ int blkdev_issue_flush(struct block_device *bdev, gfp_t gfp_mask,
80 EXPORT_SYMBOL(blkdev_issue_flush);
81
82 struct blk_flush_queue *blk_alloc_flush_queue(struct request_queue *q,
83 - int node, int cmd_size)
84 + int node, int cmd_size, gfp_t flags)
85 {
86 struct blk_flush_queue *fq;
87 int rq_sz = sizeof(struct request);
88
89 - fq = kzalloc_node(sizeof(*fq), GFP_KERNEL, node);
90 + fq = kzalloc_node(sizeof(*fq), flags, node);
91 if (!fq)
92 goto fail;
93
94 @@ -579,7 +579,7 @@ struct blk_flush_queue *blk_alloc_flush_queue(struct request_queue *q,
95 spin_lock_init(&fq->mq_flush_lock);
96
97 rq_sz = round_up(rq_sz + cmd_size, cache_line_size());
98 - fq->flush_rq = kzalloc_node(rq_sz, GFP_KERNEL, node);
99 + fq->flush_rq = kzalloc_node(rq_sz, flags, node);
100 if (!fq->flush_rq)
101 goto fail_rq;
102
103 diff --git a/block/blk-mq.c b/block/blk-mq.c
104 index 455fda99255a..7ea85ec52026 100644
105 --- a/block/blk-mq.c
106 +++ b/block/blk-mq.c
107 @@ -2198,12 +2198,12 @@ static int blk_mq_init_hctx(struct request_queue *q,
108 * runtime
109 */
110 hctx->ctxs = kmalloc_array_node(nr_cpu_ids, sizeof(void *),
111 - GFP_KERNEL, node);
112 + GFP_NOIO | __GFP_NOWARN | __GFP_NORETRY, node);
113 if (!hctx->ctxs)
114 goto unregister_cpu_notifier;
115
116 - if (sbitmap_init_node(&hctx->ctx_map, nr_cpu_ids, ilog2(8), GFP_KERNEL,
117 - node))
118 + if (sbitmap_init_node(&hctx->ctx_map, nr_cpu_ids, ilog2(8),
119 + GFP_NOIO | __GFP_NOWARN | __GFP_NORETRY, node))
120 goto free_ctxs;
121
122 hctx->nr_ctx = 0;
123 @@ -2216,7 +2216,8 @@ static int blk_mq_init_hctx(struct request_queue *q,
124 set->ops->init_hctx(hctx, set->driver_data, hctx_idx))
125 goto free_bitmap;
126
127 - hctx->fq = blk_alloc_flush_queue(q, hctx->numa_node, set->cmd_size);
128 + hctx->fq = blk_alloc_flush_queue(q, hctx->numa_node, set->cmd_size,
129 + GFP_NOIO | __GFP_NOWARN | __GFP_NORETRY);
130 if (!hctx->fq)
131 goto exit_hctx;
132
133 @@ -2460,8 +2461,6 @@ void blk_mq_release(struct request_queue *q)
134 struct blk_mq_hw_ctx *hctx;
135 unsigned int i;
136
137 - cancel_delayed_work_sync(&q->requeue_work);
138 -
139 /* hctx kobj stays in hctx */
140 queue_for_each_hw_ctx(q, hctx, i) {
141 if (!hctx)
142 @@ -2530,12 +2529,14 @@ static void blk_mq_realloc_hw_ctxs(struct blk_mq_tag_set *set,
143
144 node = blk_mq_hw_queue_to_node(q->mq_map, i);
145 hctxs[i] = kzalloc_node(blk_mq_hw_ctx_size(set),
146 - GFP_KERNEL, node);
147 + GFP_NOIO | __GFP_NOWARN | __GFP_NORETRY,
148 + node);
149 if (!hctxs[i])
150 break;
151
152 - if (!zalloc_cpumask_var_node(&hctxs[i]->cpumask, GFP_KERNEL,
153 - node)) {
154 + if (!zalloc_cpumask_var_node(&hctxs[i]->cpumask,
155 + GFP_NOIO | __GFP_NOWARN | __GFP_NORETRY,
156 + node)) {
157 kfree(hctxs[i]);
158 hctxs[i] = NULL;
159 break;
160 diff --git a/block/blk-sysfs.c b/block/blk-sysfs.c
161 index 3772671cf2bc..bab47a17b96f 100644
162 --- a/block/blk-sysfs.c
163 +++ b/block/blk-sysfs.c
164 @@ -836,6 +836,9 @@ static void __blk_release_queue(struct work_struct *work)
165
166 blk_free_queue_stats(q->stats);
167
168 + if (q->mq_ops)
169 + cancel_delayed_work_sync(&q->requeue_work);
170 +
171 blk_exit_rl(q, &q->root_rl);
172
173 if (q->queue_tags)
174 diff --git a/block/blk.h b/block/blk.h
175 index 977d4b5d968d..11e4ca2f2cd4 100644
176 --- a/block/blk.h
177 +++ b/block/blk.h
178 @@ -124,7 +124,7 @@ static inline void __blk_get_queue(struct request_queue *q)
179 }
180
181 struct blk_flush_queue *blk_alloc_flush_queue(struct request_queue *q,
182 - int node, int cmd_size);
183 + int node, int cmd_size, gfp_t flags);
184 void blk_free_flush_queue(struct blk_flush_queue *q);
185
186 int blk_init_rl(struct request_list *rl, struct request_queue *q,
187 diff --git a/drivers/acpi/acpi_video.c b/drivers/acpi/acpi_video.c
188 index d73afb562ad9..1a23e7aa74df 100644
189 --- a/drivers/acpi/acpi_video.c
190 +++ b/drivers/acpi/acpi_video.c
191 @@ -73,6 +73,12 @@ module_param(report_key_events, int, 0644);
192 MODULE_PARM_DESC(report_key_events,
193 "0: none, 1: output changes, 2: brightness changes, 3: all");
194
195 +static int hw_changes_brightness = -1;
196 +module_param(hw_changes_brightness, int, 0644);
197 +MODULE_PARM_DESC(hw_changes_brightness,
198 + "Set this to 1 on buggy hw which changes the brightness itself when "
199 + "a hotkey is pressed: -1: auto, 0: normal 1: hw-changes-brightness");
200 +
201 /*
202 * Whether the struct acpi_video_device_attrib::device_id_scheme bit should be
203 * assumed even if not actually set.
204 @@ -418,6 +424,14 @@ static int video_set_report_key_events(const struct dmi_system_id *id)
205 return 0;
206 }
207
208 +static int video_hw_changes_brightness(
209 + const struct dmi_system_id *d)
210 +{
211 + if (hw_changes_brightness == -1)
212 + hw_changes_brightness = 1;
213 + return 0;
214 +}
215 +
216 static const struct dmi_system_id video_dmi_table[] = {
217 /*
218 * Broken _BQC workaround http://bugzilla.kernel.org/show_bug.cgi?id=13121
219 @@ -542,6 +556,21 @@ static const struct dmi_system_id video_dmi_table[] = {
220 DMI_MATCH(DMI_PRODUCT_NAME, "Vostro V131"),
221 },
222 },
223 + /*
224 + * Some machines change the brightness themselves when a brightness
225 + * hotkey gets pressed, despite us telling them not to. In this case
226 + * acpi_video_device_notify() should only call backlight_force_update(
227 + * BACKLIGHT_UPDATE_HOTKEY) and not do anything else.
228 + */
229 + {
230 + /* https://bugzilla.kernel.org/show_bug.cgi?id=204077 */
231 + .callback = video_hw_changes_brightness,
232 + .ident = "Packard Bell EasyNote MZ35",
233 + .matches = {
234 + DMI_MATCH(DMI_SYS_VENDOR, "Packard Bell"),
235 + DMI_MATCH(DMI_PRODUCT_NAME, "EasyNote MZ35"),
236 + },
237 + },
238 {}
239 };
240
241 @@ -1625,6 +1654,14 @@ static void acpi_video_device_notify(acpi_handle handle, u32 event, void *data)
242 bus = video_device->video;
243 input = bus->input;
244
245 + if (hw_changes_brightness > 0) {
246 + if (video_device->backlight)
247 + backlight_force_update(video_device->backlight,
248 + BACKLIGHT_UPDATE_HOTKEY);
249 + acpi_notifier_call_chain(device, event, 0);
250 + return;
251 + }
252 +
253 switch (event) {
254 case ACPI_VIDEO_NOTIFY_CYCLE_BRIGHTNESS: /* Cycle brightness */
255 brightness_switch_event(video_device, event);
256 diff --git a/drivers/bluetooth/btrtl.c b/drivers/bluetooth/btrtl.c
257 index 1342f8e6025c..8d1cd2479e36 100644
258 --- a/drivers/bluetooth/btrtl.c
259 +++ b/drivers/bluetooth/btrtl.c
260 @@ -639,6 +639,26 @@ int btrtl_setup_realtek(struct hci_dev *hdev)
261 }
262 EXPORT_SYMBOL_GPL(btrtl_setup_realtek);
263
264 +int btrtl_shutdown_realtek(struct hci_dev *hdev)
265 +{
266 + struct sk_buff *skb;
267 + int ret;
268 +
269 + /* According to the vendor driver, BT must be reset on close to avoid
270 + * firmware crash.
271 + */
272 + skb = __hci_cmd_sync(hdev, HCI_OP_RESET, 0, NULL, HCI_INIT_TIMEOUT);
273 + if (IS_ERR(skb)) {
274 + ret = PTR_ERR(skb);
275 + bt_dev_err(hdev, "HCI reset during shutdown failed");
276 + return ret;
277 + }
278 + kfree_skb(skb);
279 +
280 + return 0;
281 +}
282 +EXPORT_SYMBOL_GPL(btrtl_shutdown_realtek);
283 +
284 static unsigned int btrtl_convert_baudrate(u32 device_baudrate)
285 {
286 switch (device_baudrate) {
287 diff --git a/drivers/bluetooth/btrtl.h b/drivers/bluetooth/btrtl.h
288 index f5e36f3993a8..852f27d4ee28 100644
289 --- a/drivers/bluetooth/btrtl.h
290 +++ b/drivers/bluetooth/btrtl.h
291 @@ -65,6 +65,7 @@ void btrtl_free(struct btrtl_device_info *btrtl_dev);
292 int btrtl_download_firmware(struct hci_dev *hdev,
293 struct btrtl_device_info *btrtl_dev);
294 int btrtl_setup_realtek(struct hci_dev *hdev);
295 +int btrtl_shutdown_realtek(struct hci_dev *hdev);
296 int btrtl_get_uart_settings(struct hci_dev *hdev,
297 struct btrtl_device_info *btrtl_dev,
298 unsigned int *controller_baudrate,
299 @@ -93,6 +94,11 @@ static inline int btrtl_setup_realtek(struct hci_dev *hdev)
300 return -EOPNOTSUPP;
301 }
302
303 +static inline int btrtl_shutdown_realtek(struct hci_dev *hdev)
304 +{
305 + return -EOPNOTSUPP;
306 +}
307 +
308 static inline int btrtl_get_uart_settings(struct hci_dev *hdev,
309 struct btrtl_device_info *btrtl_dev,
310 unsigned int *controller_baudrate,
311 diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
312 index 09c83dc2ef67..08936bf696d3 100644
313 --- a/drivers/bluetooth/btusb.c
314 +++ b/drivers/bluetooth/btusb.c
315 @@ -391,6 +391,9 @@ static const struct usb_device_id blacklist_table[] = {
316 { USB_DEVICE(0x13d3, 0x3526), .driver_info = BTUSB_REALTEK },
317 { USB_DEVICE(0x0b05, 0x185c), .driver_info = BTUSB_REALTEK },
318
319 + /* Additional Realtek 8822CE Bluetooth devices */
320 + { USB_DEVICE(0x04ca, 0x4005), .driver_info = BTUSB_REALTEK },
321 +
322 /* Silicon Wave based devices */
323 { USB_DEVICE(0x0c10, 0x0000), .driver_info = BTUSB_SWAVE },
324
325 @@ -3128,6 +3131,7 @@ static int btusb_probe(struct usb_interface *intf,
326 #ifdef CONFIG_BT_HCIBTUSB_RTL
327 if (id->driver_info & BTUSB_REALTEK) {
328 hdev->setup = btrtl_setup_realtek;
329 + hdev->shutdown = btrtl_shutdown_realtek;
330
331 /* Realtek devices lose their updated firmware over suspend,
332 * but the USB hub doesn't notice any status change.
333 diff --git a/drivers/crypto/talitos.c b/drivers/crypto/talitos.c
334 index 064315edd289..634ae487c372 100644
335 --- a/drivers/crypto/talitos.c
336 +++ b/drivers/crypto/talitos.c
337 @@ -3124,6 +3124,7 @@ static int talitos_remove(struct platform_device *ofdev)
338 break;
339 case CRYPTO_ALG_TYPE_AEAD:
340 crypto_unregister_aead(&t_alg->algt.alg.aead);
341 + break;
342 case CRYPTO_ALG_TYPE_AHASH:
343 crypto_unregister_ahash(&t_alg->algt.alg.hash);
344 break;
345 diff --git a/drivers/gpu/drm/amd/display/dc/calcs/Makefile b/drivers/gpu/drm/amd/display/dc/calcs/Makefile
346 index 95f332ee3e7e..16614d73a5fc 100644
347 --- a/drivers/gpu/drm/amd/display/dc/calcs/Makefile
348 +++ b/drivers/gpu/drm/amd/display/dc/calcs/Makefile
349 @@ -32,6 +32,10 @@ endif
350
351 calcs_ccflags := -mhard-float -msse $(cc_stack_align)
352
353 +ifdef CONFIG_CC_IS_CLANG
354 +calcs_ccflags += -msse2
355 +endif
356 +
357 CFLAGS_dcn_calcs.o := $(calcs_ccflags)
358 CFLAGS_dcn_calc_auto.o := $(calcs_ccflags)
359 CFLAGS_dcn_calc_math.o := $(calcs_ccflags) -Wno-tautological-compare
360 diff --git a/drivers/gpu/drm/amd/display/dc/dml/Makefile b/drivers/gpu/drm/amd/display/dc/dml/Makefile
361 index d97ca6528f9d..934ffe1b4b00 100644
362 --- a/drivers/gpu/drm/amd/display/dc/dml/Makefile
363 +++ b/drivers/gpu/drm/amd/display/dc/dml/Makefile
364 @@ -32,6 +32,10 @@ endif
365
366 dml_ccflags := -mhard-float -msse $(cc_stack_align)
367
368 +ifdef CONFIG_CC_IS_CLANG
369 +dml_ccflags += -msse2
370 +endif
371 +
372 CFLAGS_display_mode_lib.o := $(dml_ccflags)
373 CFLAGS_display_pipe_clocks.o := $(dml_ccflags)
374 CFLAGS_dml1_display_rq_dlg_calc.o := $(dml_ccflags)
375 diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/smu8_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/smu8_hwmgr.c
376 index c9a15baf2c10..0adfc5392cd3 100644
377 --- a/drivers/gpu/drm/amd/powerplay/hwmgr/smu8_hwmgr.c
378 +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/smu8_hwmgr.c
379 @@ -1222,17 +1222,14 @@ static int smu8_dpm_force_dpm_level(struct pp_hwmgr *hwmgr,
380
381 static int smu8_dpm_powerdown_uvd(struct pp_hwmgr *hwmgr)
382 {
383 - if (PP_CAP(PHM_PlatformCaps_UVDPowerGating)) {
384 - smu8_nbdpm_pstate_enable_disable(hwmgr, true, true);
385 + if (PP_CAP(PHM_PlatformCaps_UVDPowerGating))
386 return smum_send_msg_to_smc(hwmgr, PPSMC_MSG_UVDPowerOFF);
387 - }
388 return 0;
389 }
390
391 static int smu8_dpm_powerup_uvd(struct pp_hwmgr *hwmgr)
392 {
393 if (PP_CAP(PHM_PlatformCaps_UVDPowerGating)) {
394 - smu8_nbdpm_pstate_enable_disable(hwmgr, false, true);
395 return smum_send_msg_to_smc_with_parameter(
396 hwmgr,
397 PPSMC_MSG_UVDPowerON,
398 diff --git a/drivers/gpu/drm/drm_probe_helper.c b/drivers/gpu/drm/drm_probe_helper.c
399 index d18b7e27ef64..c0b26135dbd5 100644
400 --- a/drivers/gpu/drm/drm_probe_helper.c
401 +++ b/drivers/gpu/drm/drm_probe_helper.c
402 @@ -581,6 +581,9 @@ static void output_poll_execute(struct work_struct *work)
403 enum drm_connector_status old_status;
404 bool repoll = false, changed;
405
406 + if (!dev->mode_config.poll_enabled)
407 + return;
408 +
409 /* Pick up any changes detected by the probe functions. */
410 changed = dev->mode_config.delayed_event;
411 dev->mode_config.delayed_event = false;
412 @@ -735,7 +738,11 @@ EXPORT_SYMBOL(drm_kms_helper_poll_init);
413 */
414 void drm_kms_helper_poll_fini(struct drm_device *dev)
415 {
416 - drm_kms_helper_poll_disable(dev);
417 + if (!dev->mode_config.poll_enabled)
418 + return;
419 +
420 + dev->mode_config.poll_enabled = false;
421 + cancel_delayed_work_sync(&dev->mode_config.output_poll_work);
422 }
423 EXPORT_SYMBOL(drm_kms_helper_poll_fini);
424
425 diff --git a/drivers/gpu/drm/nouveau/dispnv50/head.c b/drivers/gpu/drm/nouveau/dispnv50/head.c
426 index d81a99bb2ac3..b041ffb3af27 100644
427 --- a/drivers/gpu/drm/nouveau/dispnv50/head.c
428 +++ b/drivers/gpu/drm/nouveau/dispnv50/head.c
429 @@ -169,14 +169,34 @@ nv50_head_atomic_check_view(struct nv50_head_atom *armh,
430 */
431 switch (mode) {
432 case DRM_MODE_SCALE_CENTER:
433 - asyh->view.oW = min((u16)umode->hdisplay, asyh->view.oW);
434 - asyh->view.oH = min((u16)umode_vdisplay, asyh->view.oH);
435 - /* fall-through */
436 + /* NOTE: This will cause scaling when the input is
437 + * larger than the output.
438 + */
439 + asyh->view.oW = min(asyh->view.iW, asyh->view.oW);
440 + asyh->view.oH = min(asyh->view.iH, asyh->view.oH);
441 + break;
442 case DRM_MODE_SCALE_ASPECT:
443 - if (asyh->view.oH < asyh->view.oW) {
444 + /* Determine whether the scaling should be on width or on
445 + * height. This is done by comparing the aspect ratios of the
446 + * sizes. If the output AR is larger than input AR, that means
447 + * we want to change the width (letterboxed on the
448 + * left/right), otherwise on the height (letterboxed on the
449 + * top/bottom).
450 + *
451 + * E.g. 4:3 (1.333) AR image displayed on a 16:10 (1.6) AR
452 + * screen will have letterboxes on the left/right. However a
453 + * 16:9 (1.777) AR image on that same screen will have
454 + * letterboxes on the top/bottom.
455 + *
456 + * inputAR = iW / iH; outputAR = oW / oH
457 + * outputAR > inputAR is equivalent to oW * iH > iW * oH
458 + */
459 + if (asyh->view.oW * asyh->view.iH > asyh->view.iW * asyh->view.oH) {
460 + /* Recompute output width, i.e. left/right letterbox */
461 u32 r = (asyh->view.iW << 19) / asyh->view.iH;
462 asyh->view.oW = ((asyh->view.oH * r) + (r / 2)) >> 19;
463 } else {
464 + /* Recompute output height, i.e. top/bottom letterbox */
465 u32 r = (asyh->view.iH << 19) / asyh->view.iW;
466 asyh->view.oH = ((asyh->view.oW * r) + (r / 2)) >> 19;
467 }
468 diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
469 index 4a2fa57ddcb8..0eeb273fb73d 100644
470 --- a/drivers/hid/hid-ids.h
471 +++ b/drivers/hid/hid-ids.h
472 @@ -559,6 +559,7 @@
473 #define USB_PRODUCT_ID_HP_LOGITECH_OEM_USB_OPTICAL_MOUSE_0B4A 0x0b4a
474 #define USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE 0x134a
475 #define USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE_094A 0x094a
476 +#define USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE_0941 0x0941
477 #define USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE_0641 0x0641
478
479 #define USB_VENDOR_ID_HUION 0x256c
480 diff --git a/drivers/hid/hid-lg.c b/drivers/hid/hid-lg.c
481 index 596227ddb6e0..17d6123f7930 100644
482 --- a/drivers/hid/hid-lg.c
483 +++ b/drivers/hid/hid-lg.c
484 @@ -763,7 +763,7 @@ static int lg_probe(struct hid_device *hdev, const struct hid_device_id *id)
485
486 if (!buf) {
487 ret = -ENOMEM;
488 - goto err_free;
489 + goto err_stop;
490 }
491
492 ret = hid_hw_raw_request(hdev, buf[0], buf, sizeof(cbuf),
493 @@ -795,9 +795,12 @@ static int lg_probe(struct hid_device *hdev, const struct hid_device_id *id)
494 ret = lg4ff_init(hdev);
495
496 if (ret)
497 - goto err_free;
498 + goto err_stop;
499
500 return 0;
501 +
502 +err_stop:
503 + hid_hw_stop(hdev);
504 err_free:
505 kfree(drv_data);
506 return ret;
507 @@ -808,8 +811,7 @@ static void lg_remove(struct hid_device *hdev)
508 struct lg_drv_data *drv_data = hid_get_drvdata(hdev);
509 if (drv_data->quirks & LG_FF4)
510 lg4ff_deinit(hdev);
511 - else
512 - hid_hw_stop(hdev);
513 + hid_hw_stop(hdev);
514 kfree(drv_data);
515 }
516
517 diff --git a/drivers/hid/hid-lg4ff.c b/drivers/hid/hid-lg4ff.c
518 index 512d67e1aae3..4b26928cb2b6 100644
519 --- a/drivers/hid/hid-lg4ff.c
520 +++ b/drivers/hid/hid-lg4ff.c
521 @@ -1483,7 +1483,6 @@ int lg4ff_deinit(struct hid_device *hid)
522 }
523 }
524 #endif
525 - hid_hw_stop(hid);
526 drv_data->device_props = NULL;
527
528 kfree(entry);
529 diff --git a/drivers/hid/hid-prodikeys.c b/drivers/hid/hid-prodikeys.c
530 index 87eda34ea2f8..d3773251b374 100644
531 --- a/drivers/hid/hid-prodikeys.c
532 +++ b/drivers/hid/hid-prodikeys.c
533 @@ -555,10 +555,14 @@ static void pcmidi_setup_extra_keys(
534
535 static int pcmidi_set_operational(struct pcmidi_snd *pm)
536 {
537 + int rc;
538 +
539 if (pm->ifnum != 1)
540 return 0; /* only set up ONCE for interace 1 */
541
542 - pcmidi_get_output_report(pm);
543 + rc = pcmidi_get_output_report(pm);
544 + if (rc < 0)
545 + return rc;
546 pcmidi_submit_output_report(pm, 0xc1);
547 return 0;
548 }
549 @@ -687,7 +691,11 @@ static int pcmidi_snd_initialise(struct pcmidi_snd *pm)
550 spin_lock_init(&pm->rawmidi_in_lock);
551
552 init_sustain_timers(pm);
553 - pcmidi_set_operational(pm);
554 + err = pcmidi_set_operational(pm);
555 + if (err < 0) {
556 + pk_error("failed to find output report\n");
557 + goto fail_register;
558 + }
559
560 /* register it */
561 err = snd_card_register(card);
562 diff --git a/drivers/hid/hid-quirks.c b/drivers/hid/hid-quirks.c
563 index e553f6fae7a4..a407fd2399ff 100644
564 --- a/drivers/hid/hid-quirks.c
565 +++ b/drivers/hid/hid-quirks.c
566 @@ -94,6 +94,7 @@ static const struct hid_device_id hid_quirks[] = {
567 { HID_USB_DEVICE(USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_LOGITECH_OEM_USB_OPTICAL_MOUSE_0B4A), HID_QUIRK_ALWAYS_POLL },
568 { HID_USB_DEVICE(USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE), HID_QUIRK_ALWAYS_POLL },
569 { HID_USB_DEVICE(USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE_094A), HID_QUIRK_ALWAYS_POLL },
570 + { HID_USB_DEVICE(USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE_0941), HID_QUIRK_ALWAYS_POLL },
571 { HID_USB_DEVICE(USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE_0641), HID_QUIRK_ALWAYS_POLL },
572 { HID_USB_DEVICE(USB_VENDOR_ID_IDEACOM, USB_DEVICE_ID_IDEACOM_IDC6680), HID_QUIRK_MULTI_INPUT },
573 { HID_USB_DEVICE(USB_VENDOR_ID_INNOMEDIA, USB_DEVICE_ID_INNEX_GENESIS_ATARI), HID_QUIRK_MULTI_INPUT },
574 diff --git a/drivers/hid/hid-sony.c b/drivers/hid/hid-sony.c
575 index 31f1023214d3..09f2c617b09f 100644
576 --- a/drivers/hid/hid-sony.c
577 +++ b/drivers/hid/hid-sony.c
578 @@ -2806,7 +2806,6 @@ err_stop:
579 sony_cancel_work_sync(sc);
580 sony_remove_dev_list(sc);
581 sony_release_device_id(sc);
582 - hid_hw_stop(hdev);
583 return ret;
584 }
585
586 @@ -2868,6 +2867,7 @@ static int sony_probe(struct hid_device *hdev, const struct hid_device_id *id)
587 */
588 if (!(hdev->claimed & HID_CLAIMED_INPUT)) {
589 hid_err(hdev, "failed to claim input\n");
590 + hid_hw_stop(hdev);
591 return -ENODEV;
592 }
593
594 diff --git a/drivers/hid/hidraw.c b/drivers/hid/hidraw.c
595 index 4a44e48e08b2..c7cff929b419 100644
596 --- a/drivers/hid/hidraw.c
597 +++ b/drivers/hid/hidraw.c
598 @@ -378,7 +378,7 @@ static long hidraw_ioctl(struct file *file, unsigned int cmd,
599
600 mutex_lock(&minors_lock);
601 dev = hidraw_table[minor];
602 - if (!dev) {
603 + if (!dev || !dev->exist) {
604 ret = -ENODEV;
605 goto out;
606 }
607 diff --git a/drivers/infiniband/core/cq.c b/drivers/infiniband/core/cq.c
608 index af5ad6a56ae4..9271f7290005 100644
609 --- a/drivers/infiniband/core/cq.c
610 +++ b/drivers/infiniband/core/cq.c
611 @@ -112,12 +112,12 @@ static void ib_cq_poll_work(struct work_struct *work)
612 IB_POLL_BATCH);
613 if (completed >= IB_POLL_BUDGET_WORKQUEUE ||
614 ib_req_notify_cq(cq, IB_POLL_FLAGS) > 0)
615 - queue_work(ib_comp_wq, &cq->work);
616 + queue_work(cq->comp_wq, &cq->work);
617 }
618
619 static void ib_cq_completion_workqueue(struct ib_cq *cq, void *private)
620 {
621 - queue_work(ib_comp_wq, &cq->work);
622 + queue_work(cq->comp_wq, &cq->work);
623 }
624
625 /**
626 @@ -175,9 +175,12 @@ struct ib_cq *__ib_alloc_cq(struct ib_device *dev, void *private,
627 ib_req_notify_cq(cq, IB_CQ_NEXT_COMP);
628 break;
629 case IB_POLL_WORKQUEUE:
630 + case IB_POLL_UNBOUND_WORKQUEUE:
631 cq->comp_handler = ib_cq_completion_workqueue;
632 INIT_WORK(&cq->work, ib_cq_poll_work);
633 ib_req_notify_cq(cq, IB_CQ_NEXT_COMP);
634 + cq->comp_wq = (cq->poll_ctx == IB_POLL_WORKQUEUE) ?
635 + ib_comp_wq : ib_comp_unbound_wq;
636 break;
637 default:
638 ret = -EINVAL;
639 @@ -213,6 +216,7 @@ void ib_free_cq(struct ib_cq *cq)
640 irq_poll_disable(&cq->iop);
641 break;
642 case IB_POLL_WORKQUEUE:
643 + case IB_POLL_UNBOUND_WORKQUEUE:
644 cancel_work_sync(&cq->work);
645 break;
646 default:
647 diff --git a/drivers/infiniband/core/device.c b/drivers/infiniband/core/device.c
648 index db3b6271f09d..6d8ac51a39cc 100644
649 --- a/drivers/infiniband/core/device.c
650 +++ b/drivers/infiniband/core/device.c
651 @@ -61,6 +61,7 @@ struct ib_client_data {
652 };
653
654 struct workqueue_struct *ib_comp_wq;
655 +struct workqueue_struct *ib_comp_unbound_wq;
656 struct workqueue_struct *ib_wq;
657 EXPORT_SYMBOL_GPL(ib_wq);
658
659 @@ -1166,10 +1167,19 @@ static int __init ib_core_init(void)
660 goto err;
661 }
662
663 + ib_comp_unbound_wq =
664 + alloc_workqueue("ib-comp-unb-wq",
665 + WQ_UNBOUND | WQ_HIGHPRI | WQ_MEM_RECLAIM |
666 + WQ_SYSFS, WQ_UNBOUND_MAX_ACTIVE);
667 + if (!ib_comp_unbound_wq) {
668 + ret = -ENOMEM;
669 + goto err_comp;
670 + }
671 +
672 ret = class_register(&ib_class);
673 if (ret) {
674 pr_warn("Couldn't create InfiniBand device class\n");
675 - goto err_comp;
676 + goto err_comp_unbound;
677 }
678
679 ret = rdma_nl_init();
680 @@ -1218,6 +1228,8 @@ err_ibnl:
681 rdma_nl_exit();
682 err_sysfs:
683 class_unregister(&ib_class);
684 +err_comp_unbound:
685 + destroy_workqueue(ib_comp_unbound_wq);
686 err_comp:
687 destroy_workqueue(ib_comp_wq);
688 err:
689 @@ -1236,6 +1248,7 @@ static void __exit ib_core_cleanup(void)
690 addr_cleanup();
691 rdma_nl_exit();
692 class_unregister(&ib_class);
693 + destroy_workqueue(ib_comp_unbound_wq);
694 destroy_workqueue(ib_comp_wq);
695 /* Make sure that any pending umem accounting work is done. */
696 destroy_workqueue(ib_wq);
697 diff --git a/drivers/infiniband/core/mad.c b/drivers/infiniband/core/mad.c
698 index 7586c1dd73f1..74aa3e651bc3 100644
699 --- a/drivers/infiniband/core/mad.c
700 +++ b/drivers/infiniband/core/mad.c
701 @@ -3190,7 +3190,7 @@ static int ib_mad_port_open(struct ib_device *device,
702 }
703
704 port_priv->cq = ib_alloc_cq(port_priv->device, port_priv, cq_size, 0,
705 - IB_POLL_WORKQUEUE);
706 + IB_POLL_UNBOUND_WORKQUEUE);
707 if (IS_ERR(port_priv->cq)) {
708 dev_err(&device->dev, "Couldn't create ib_mad CQ\n");
709 ret = PTR_ERR(port_priv->cq);
710 diff --git a/drivers/infiniband/core/restrack.c b/drivers/infiniband/core/restrack.c
711 index f67fa24b3aff..279f0ae65912 100644
712 --- a/drivers/infiniband/core/restrack.c
713 +++ b/drivers/infiniband/core/restrack.c
714 @@ -225,7 +225,9 @@ void rdma_restrack_del(struct rdma_restrack_entry *res)
715 up_write(&dev->res.rwsem);
716
717 out:
718 - if (res->task)
719 + if (res->task) {
720 put_task_struct(res->task);
721 + res->task = NULL;
722 + }
723 }
724 EXPORT_SYMBOL(rdma_restrack_del);
725 diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c
726 index 9ba73e11757d..e7549a2b1482 100644
727 --- a/drivers/irqchip/irq-gic-v3-its.c
728 +++ b/drivers/irqchip/irq-gic-v3-its.c
729 @@ -2514,14 +2514,13 @@ static void its_irq_domain_free(struct irq_domain *domain, unsigned int virq,
730 struct its_node *its = its_dev->its;
731 int i;
732
733 + bitmap_release_region(its_dev->event_map.lpi_map,
734 + its_get_event_id(irq_domain_get_irq_data(domain, virq)),
735 + get_count_order(nr_irqs));
736 +
737 for (i = 0; i < nr_irqs; i++) {
738 struct irq_data *data = irq_domain_get_irq_data(domain,
739 virq + i);
740 - u32 event = its_get_event_id(data);
741 -
742 - /* Mark interrupt index as unused */
743 - clear_bit(event, its_dev->event_map.lpi_map);
744 -
745 /* Nuke the entry in the domain */
746 irq_domain_reset_irq_data(data);
747 }
748 diff --git a/drivers/md/bcache/super.c b/drivers/md/bcache/super.c
749 index e6c7a84bb1df..2321643974da 100644
750 --- a/drivers/md/bcache/super.c
751 +++ b/drivers/md/bcache/super.c
752 @@ -1768,7 +1768,6 @@ static int run_cache_set(struct cache_set *c)
753 set_gc_sectors(c);
754
755 if (CACHE_SYNC(&c->sb)) {
756 - LIST_HEAD(journal);
757 struct bkey *k;
758 struct jset *j;
759
760 diff --git a/drivers/md/dm-zoned-target.c b/drivers/md/dm-zoned-target.c
761 index 1030c42add05..3dd668f69405 100644
762 --- a/drivers/md/dm-zoned-target.c
763 +++ b/drivers/md/dm-zoned-target.c
764 @@ -133,8 +133,6 @@ static int dmz_submit_bio(struct dmz_target *dmz, struct dm_zone *zone,
765
766 atomic_inc(&bioctx->ref);
767 generic_make_request(clone);
768 - if (clone->bi_status == BLK_STS_IOERR)
769 - return -EIO;
770
771 if (bio_op(bio) == REQ_OP_WRITE && dmz_is_seq(zone))
772 zone->wp_block += nr_blocks;
773 diff --git a/drivers/media/i2c/tvp5150.c b/drivers/media/i2c/tvp5150.c
774 index 8b450fc53202..15a5e98b3d45 100644
775 --- a/drivers/media/i2c/tvp5150.c
776 +++ b/drivers/media/i2c/tvp5150.c
777 @@ -828,7 +828,7 @@ static int tvp5150_s_ctrl(struct v4l2_ctrl *ctrl)
778 return 0;
779 case V4L2_CID_HUE:
780 tvp5150_write(sd, TVP5150_HUE_CTL, ctrl->val);
781 - break;
782 + return 0;
783 case V4L2_CID_TEST_PATTERN:
784 decoder->enable = ctrl->val ? false : true;
785 tvp5150_selmux(sd);
786 diff --git a/drivers/mtd/chips/cfi_cmdset_0002.c b/drivers/mtd/chips/cfi_cmdset_0002.c
787 index 72428b6bfc47..ba44ea6d497e 100644
788 --- a/drivers/mtd/chips/cfi_cmdset_0002.c
789 +++ b/drivers/mtd/chips/cfi_cmdset_0002.c
790 @@ -1627,29 +1627,35 @@ static int __xipram do_write_oneword(struct map_info *map, struct flchip *chip,
791 continue;
792 }
793
794 - if (time_after(jiffies, timeo) && !chip_ready(map, adr)){
795 + /*
796 + * We check "time_after" and "!chip_good" before checking
797 + * "chip_good" to avoid the failure due to scheduling.
798 + */
799 + if (time_after(jiffies, timeo) && !chip_good(map, adr, datum)) {
800 xip_enable(map, chip, adr);
801 printk(KERN_WARNING "MTD %s(): software timeout\n", __func__);
802 xip_disable(map, chip, adr);
803 + ret = -EIO;
804 break;
805 }
806
807 - if (chip_ready(map, adr))
808 + if (chip_good(map, adr, datum))
809 break;
810
811 /* Latency issues. Drop the lock, wait a while and retry */
812 UDELAY(map, chip, adr, 1);
813 }
814 +
815 /* Did we succeed? */
816 - if (!chip_good(map, adr, datum)) {
817 + if (ret) {
818 /* reset on all failures. */
819 map_write(map, CMD(0xF0), chip->start);
820 /* FIXME - should have reset delay before continuing */
821
822 - if (++retry_cnt <= MAX_RETRIES)
823 + if (++retry_cnt <= MAX_RETRIES) {
824 + ret = 0;
825 goto retry;
826 -
827 - ret = -EIO;
828 + }
829 }
830 xip_enable(map, chip, adr);
831 op_done:
832 diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
833 index 5a57be66a487..aa067a7a72d4 100644
834 --- a/drivers/net/ethernet/ibm/ibmvnic.c
835 +++ b/drivers/net/ethernet/ibm/ibmvnic.c
836 @@ -1999,8 +1999,11 @@ static void __ibmvnic_reset(struct work_struct *work)
837 rwi = get_next_rwi(adapter);
838 while (rwi) {
839 if (adapter->state == VNIC_REMOVING ||
840 - adapter->state == VNIC_REMOVED)
841 - goto out;
842 + adapter->state == VNIC_REMOVED) {
843 + kfree(rwi);
844 + rc = EBUSY;
845 + break;
846 + }
847
848 if (adapter->force_reset_recovery) {
849 adapter->force_reset_recovery = false;
850 @@ -2026,7 +2029,7 @@ static void __ibmvnic_reset(struct work_struct *work)
851 netdev_dbg(adapter->netdev, "Reset failed\n");
852 free_all_rwi(adapter);
853 }
854 -out:
855 +
856 adapter->resetting = false;
857 if (we_lock_rtnl)
858 rtnl_unlock();
859 diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en.h b/drivers/net/ethernet/mellanox/mlx5/core/en.h
860 index da52e60d4437..d79e177f8990 100644
861 --- a/drivers/net/ethernet/mellanox/mlx5/core/en.h
862 +++ b/drivers/net/ethernet/mellanox/mlx5/core/en.h
863 @@ -210,6 +210,7 @@ static const char mlx5e_priv_flags[][ETH_GSTRING_LEN] = {
864 "tx_cqe_moder",
865 "rx_cqe_compress",
866 "rx_striding_rq",
867 + "rx_no_csum_complete",
868 };
869
870 enum mlx5e_priv_flag {
871 @@ -217,6 +218,7 @@ enum mlx5e_priv_flag {
872 MLX5E_PFLAG_TX_CQE_BASED_MODER = (1 << 1),
873 MLX5E_PFLAG_RX_CQE_COMPRESS = (1 << 2),
874 MLX5E_PFLAG_RX_STRIDING_RQ = (1 << 3),
875 + MLX5E_PFLAG_RX_NO_CSUM_COMPLETE = (1 << 4),
876 };
877
878 #define MLX5E_SET_PFLAG(params, pflag, enable) \
879 @@ -298,6 +300,7 @@ struct mlx5e_dcbx_dp {
880 enum {
881 MLX5E_RQ_STATE_ENABLED,
882 MLX5E_RQ_STATE_AM,
883 + MLX5E_RQ_STATE_NO_CSUM_COMPLETE,
884 };
885
886 struct mlx5e_cq {
887 diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
888 index 2b9350f4c752..10d72c83714d 100644
889 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
890 +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
891 @@ -1510,6 +1510,28 @@ static int set_pflag_rx_striding_rq(struct net_device *netdev, bool enable)
892 return 0;
893 }
894
895 +static int set_pflag_rx_no_csum_complete(struct net_device *netdev, bool enable)
896 +{
897 + struct mlx5e_priv *priv = netdev_priv(netdev);
898 + struct mlx5e_channels *channels = &priv->channels;
899 + struct mlx5e_channel *c;
900 + int i;
901 +
902 + if (!test_bit(MLX5E_STATE_OPENED, &priv->state) ||
903 + priv->channels.params.xdp_prog)
904 + return 0;
905 +
906 + for (i = 0; i < channels->num; i++) {
907 + c = channels->c[i];
908 + if (enable)
909 + __set_bit(MLX5E_RQ_STATE_NO_CSUM_COMPLETE, &c->rq.state);
910 + else
911 + __clear_bit(MLX5E_RQ_STATE_NO_CSUM_COMPLETE, &c->rq.state);
912 + }
913 +
914 + return 0;
915 +}
916 +
917 static int mlx5e_handle_pflag(struct net_device *netdev,
918 u32 wanted_flags,
919 enum mlx5e_priv_flag flag,
920 @@ -1561,6 +1583,12 @@ static int mlx5e_set_priv_flags(struct net_device *netdev, u32 pflags)
921 err = mlx5e_handle_pflag(netdev, pflags,
922 MLX5E_PFLAG_RX_STRIDING_RQ,
923 set_pflag_rx_striding_rq);
924 + if (err)
925 + goto out;
926 +
927 + err = mlx5e_handle_pflag(netdev, pflags,
928 + MLX5E_PFLAG_RX_NO_CSUM_COMPLETE,
929 + set_pflag_rx_no_csum_complete);
930
931 out:
932 mutex_unlock(&priv->state_lock);
933 diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
934 index 83ab2c0e6b61..7e6706333fa8 100644
935 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
936 +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
937 @@ -934,6 +934,13 @@ static int mlx5e_open_rq(struct mlx5e_channel *c,
938 if (params->rx_dim_enabled)
939 __set_bit(MLX5E_RQ_STATE_AM, &c->rq.state);
940
941 + /* We disable csum_complete when XDP is enabled since
942 + * XDP programs might manipulate packets which will render
943 + * skb->checksum incorrect.
944 + */
945 + if (MLX5E_GET_PFLAG(params, MLX5E_PFLAG_RX_NO_CSUM_COMPLETE) || c->xdp)
946 + __set_bit(MLX5E_RQ_STATE_NO_CSUM_COMPLETE, &c->rq.state);
947 +
948 return 0;
949
950 err_destroy_rq:
951 @@ -4533,6 +4540,7 @@ void mlx5e_build_nic_params(struct mlx5_core_dev *mdev,
952 params->rx_cqe_compress_def = slow_pci_heuristic(mdev);
953
954 MLX5E_SET_PFLAG(params, MLX5E_PFLAG_RX_CQE_COMPRESS, params->rx_cqe_compress_def);
955 + MLX5E_SET_PFLAG(params, MLX5E_PFLAG_RX_NO_CSUM_COMPLETE, false);
956
957 /* RQ */
958 /* Prefer Striding RQ, unless any of the following holds:
959 diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c b/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c
960 index d3f794d4fb96..df49dc143c47 100644
961 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c
962 +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c
963 @@ -37,6 +37,7 @@
964 #include <net/busy_poll.h>
965 #include <net/ip6_checksum.h>
966 #include <net/page_pool.h>
967 +#include <net/inet_ecn.h>
968 #include "en.h"
969 #include "en_tc.h"
970 #include "eswitch.h"
971 @@ -688,27 +689,110 @@ static inline void mlx5e_skb_set_hash(struct mlx5_cqe64 *cqe,
972 skb_set_hash(skb, be32_to_cpu(cqe->rss_hash_result), ht);
973 }
974
975 -static inline bool is_last_ethertype_ip(struct sk_buff *skb, int *network_depth)
976 +static inline bool is_last_ethertype_ip(struct sk_buff *skb, int *network_depth,
977 + __be16 *proto)
978 {
979 - __be16 ethertype = ((struct ethhdr *)skb->data)->h_proto;
980 + *proto = ((struct ethhdr *)skb->data)->h_proto;
981 + *proto = __vlan_get_protocol(skb, *proto, network_depth);
982
983 - ethertype = __vlan_get_protocol(skb, ethertype, network_depth);
984 - return (ethertype == htons(ETH_P_IP) || ethertype == htons(ETH_P_IPV6));
985 + if (*proto == htons(ETH_P_IP))
986 + return pskb_may_pull(skb, *network_depth + sizeof(struct iphdr));
987 +
988 + if (*proto == htons(ETH_P_IPV6))
989 + return pskb_may_pull(skb, *network_depth + sizeof(struct ipv6hdr));
990 +
991 + return false;
992 }
993
994 -static u32 mlx5e_get_fcs(const struct sk_buff *skb)
995 +static inline void mlx5e_enable_ecn(struct mlx5e_rq *rq, struct sk_buff *skb)
996 {
997 - const void *fcs_bytes;
998 - u32 _fcs_bytes;
999 + int network_depth = 0;
1000 + __be16 proto;
1001 + void *ip;
1002 + int rc;
1003
1004 - fcs_bytes = skb_header_pointer(skb, skb->len - ETH_FCS_LEN,
1005 - ETH_FCS_LEN, &_fcs_bytes);
1006 + if (unlikely(!is_last_ethertype_ip(skb, &network_depth, &proto)))
1007 + return;
1008 +
1009 + ip = skb->data + network_depth;
1010 + rc = ((proto == htons(ETH_P_IP)) ? IP_ECN_set_ce((struct iphdr *)ip) :
1011 + IP6_ECN_set_ce(skb, (struct ipv6hdr *)ip));
1012 +
1013 + rq->stats->ecn_mark += !!rc;
1014 +}
1015 +
1016 +static u8 get_ip_proto(struct sk_buff *skb, int network_depth, __be16 proto)
1017 +{
1018 + void *ip_p = skb->data + network_depth;
1019
1020 - return __get_unaligned_cpu32(fcs_bytes);
1021 + return (proto == htons(ETH_P_IP)) ? ((struct iphdr *)ip_p)->protocol :
1022 + ((struct ipv6hdr *)ip_p)->nexthdr;
1023 }
1024
1025 #define short_frame(size) ((size) <= ETH_ZLEN + ETH_FCS_LEN)
1026
1027 +#define MAX_PADDING 8
1028 +
1029 +static void
1030 +tail_padding_csum_slow(struct sk_buff *skb, int offset, int len,
1031 + struct mlx5e_rq_stats *stats)
1032 +{
1033 + stats->csum_complete_tail_slow++;
1034 + skb->csum = csum_block_add(skb->csum,
1035 + skb_checksum(skb, offset, len, 0),
1036 + offset);
1037 +}
1038 +
1039 +static void
1040 +tail_padding_csum(struct sk_buff *skb, int offset,
1041 + struct mlx5e_rq_stats *stats)
1042 +{
1043 + u8 tail_padding[MAX_PADDING];
1044 + int len = skb->len - offset;
1045 + void *tail;
1046 +
1047 + if (unlikely(len > MAX_PADDING)) {
1048 + tail_padding_csum_slow(skb, offset, len, stats);
1049 + return;
1050 + }
1051 +
1052 + tail = skb_header_pointer(skb, offset, len, tail_padding);
1053 + if (unlikely(!tail)) {
1054 + tail_padding_csum_slow(skb, offset, len, stats);
1055 + return;
1056 + }
1057 +
1058 + stats->csum_complete_tail++;
1059 + skb->csum = csum_block_add(skb->csum, csum_partial(tail, len, 0), offset);
1060 +}
1061 +
1062 +static void
1063 +mlx5e_skb_padding_csum(struct sk_buff *skb, int network_depth, __be16 proto,
1064 + struct mlx5e_rq_stats *stats)
1065 +{
1066 + struct ipv6hdr *ip6;
1067 + struct iphdr *ip4;
1068 + int pkt_len;
1069 +
1070 + switch (proto) {
1071 + case htons(ETH_P_IP):
1072 + ip4 = (struct iphdr *)(skb->data + network_depth);
1073 + pkt_len = network_depth + ntohs(ip4->tot_len);
1074 + break;
1075 + case htons(ETH_P_IPV6):
1076 + ip6 = (struct ipv6hdr *)(skb->data + network_depth);
1077 + pkt_len = network_depth + sizeof(*ip6) + ntohs(ip6->payload_len);
1078 + break;
1079 + default:
1080 + return;
1081 + }
1082 +
1083 + if (likely(pkt_len >= skb->len))
1084 + return;
1085 +
1086 + tail_padding_csum(skb, pkt_len, stats);
1087 +}
1088 +
1089 static inline void mlx5e_handle_csum(struct net_device *netdev,
1090 struct mlx5_cqe64 *cqe,
1091 struct mlx5e_rq *rq,
1092 @@ -717,6 +801,7 @@ static inline void mlx5e_handle_csum(struct net_device *netdev,
1093 {
1094 struct mlx5e_rq_stats *stats = rq->stats;
1095 int network_depth = 0;
1096 + __be16 proto;
1097
1098 if (unlikely(!(netdev->features & NETIF_F_RXCSUM)))
1099 goto csum_none;
1100 @@ -727,6 +812,10 @@ static inline void mlx5e_handle_csum(struct net_device *netdev,
1101 return;
1102 }
1103
1104 + /* True when explicitly set via priv flag, or XDP prog is loaded */
1105 + if (test_bit(MLX5E_RQ_STATE_NO_CSUM_COMPLETE, &rq->state))
1106 + goto csum_unnecessary;
1107 +
1108 /* CQE csum doesn't cover padding octets in short ethernet
1109 * frames. And the pad field is appended prior to calculating
1110 * and appending the FCS field.
1111 @@ -738,7 +827,10 @@ static inline void mlx5e_handle_csum(struct net_device *netdev,
1112 if (short_frame(skb->len))
1113 goto csum_unnecessary;
1114
1115 - if (likely(is_last_ethertype_ip(skb, &network_depth))) {
1116 + if (likely(is_last_ethertype_ip(skb, &network_depth, &proto))) {
1117 + if (unlikely(get_ip_proto(skb, network_depth, proto) == IPPROTO_SCTP))
1118 + goto csum_unnecessary;
1119 +
1120 skb->ip_summed = CHECKSUM_COMPLETE;
1121 skb->csum = csum_unfold((__force __sum16)cqe->check_sum);
1122 if (network_depth > ETH_HLEN)
1123 @@ -749,10 +841,8 @@ static inline void mlx5e_handle_csum(struct net_device *netdev,
1124 skb->csum = csum_partial(skb->data + ETH_HLEN,
1125 network_depth - ETH_HLEN,
1126 skb->csum);
1127 - if (unlikely(netdev->features & NETIF_F_RXFCS))
1128 - skb->csum = csum_block_add(skb->csum,
1129 - (__force __wsum)mlx5e_get_fcs(skb),
1130 - skb->len - ETH_FCS_LEN);
1131 +
1132 + mlx5e_skb_padding_csum(skb, network_depth, proto, stats);
1133 stats->csum_complete++;
1134 return;
1135 }
1136 @@ -775,6 +865,8 @@ csum_none:
1137 stats->csum_none++;
1138 }
1139
1140 +#define MLX5E_CE_BIT_MASK 0x80
1141 +
1142 static inline void mlx5e_build_rx_skb(struct mlx5_cqe64 *cqe,
1143 u32 cqe_bcnt,
1144 struct mlx5e_rq *rq,
1145 @@ -819,6 +911,10 @@ static inline void mlx5e_build_rx_skb(struct mlx5_cqe64 *cqe,
1146 skb->mark = be32_to_cpu(cqe->sop_drop_qpn) & MLX5E_TC_FLOW_ID_MASK;
1147
1148 mlx5e_handle_csum(netdev, cqe, rq, skb, !!lro_num_seg);
1149 + /* checking CE bit in cqe - MSB in ml_path field */
1150 + if (unlikely(cqe->ml_path & MLX5E_CE_BIT_MASK))
1151 + mlx5e_enable_ecn(rq, skb);
1152 +
1153 skb->protocol = eth_type_trans(skb, netdev);
1154 }
1155
1156 diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_stats.c b/drivers/net/ethernet/mellanox/mlx5/core/en_stats.c
1157 index 7047cc293545..8255d797ea94 100644
1158 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_stats.c
1159 +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_stats.c
1160 @@ -53,10 +53,13 @@ static const struct counter_desc sw_stats_desc[] = {
1161
1162 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_lro_packets) },
1163 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_lro_bytes) },
1164 + { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_ecn_mark) },
1165 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_removed_vlan_packets) },
1166 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_csum_unnecessary) },
1167 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_csum_none) },
1168 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_csum_complete) },
1169 + { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_csum_complete_tail) },
1170 + { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_csum_complete_tail_slow) },
1171 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_csum_unnecessary_inner) },
1172 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_xdp_drop) },
1173 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_xdp_redirect) },
1174 @@ -144,9 +147,12 @@ void mlx5e_grp_sw_update_stats(struct mlx5e_priv *priv)
1175 s->rx_bytes += rq_stats->bytes;
1176 s->rx_lro_packets += rq_stats->lro_packets;
1177 s->rx_lro_bytes += rq_stats->lro_bytes;
1178 + s->rx_ecn_mark += rq_stats->ecn_mark;
1179 s->rx_removed_vlan_packets += rq_stats->removed_vlan_packets;
1180 s->rx_csum_none += rq_stats->csum_none;
1181 s->rx_csum_complete += rq_stats->csum_complete;
1182 + s->rx_csum_complete_tail += rq_stats->csum_complete_tail;
1183 + s->rx_csum_complete_tail_slow += rq_stats->csum_complete_tail_slow;
1184 s->rx_csum_unnecessary += rq_stats->csum_unnecessary;
1185 s->rx_csum_unnecessary_inner += rq_stats->csum_unnecessary_inner;
1186 s->rx_xdp_drop += rq_stats->xdp_drop;
1187 @@ -1137,6 +1143,8 @@ static const struct counter_desc rq_stats_desc[] = {
1188 { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, packets) },
1189 { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, bytes) },
1190 { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, csum_complete) },
1191 + { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, csum_complete_tail) },
1192 + { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, csum_complete_tail_slow) },
1193 { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, csum_unnecessary) },
1194 { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, csum_unnecessary_inner) },
1195 { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, csum_none) },
1196 @@ -1144,6 +1152,7 @@ static const struct counter_desc rq_stats_desc[] = {
1197 { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, xdp_redirect) },
1198 { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, lro_packets) },
1199 { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, lro_bytes) },
1200 + { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, ecn_mark) },
1201 { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, removed_vlan_packets) },
1202 { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, wqe_err) },
1203 { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, mpwqe_filler_cqes) },
1204 diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_stats.h b/drivers/net/ethernet/mellanox/mlx5/core/en_stats.h
1205 index 0ad7a165443a..3ea8033ed6bd 100644
1206 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_stats.h
1207 +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_stats.h
1208 @@ -66,10 +66,13 @@ struct mlx5e_sw_stats {
1209 u64 tx_nop;
1210 u64 rx_lro_packets;
1211 u64 rx_lro_bytes;
1212 + u64 rx_ecn_mark;
1213 u64 rx_removed_vlan_packets;
1214 u64 rx_csum_unnecessary;
1215 u64 rx_csum_none;
1216 u64 rx_csum_complete;
1217 + u64 rx_csum_complete_tail;
1218 + u64 rx_csum_complete_tail_slow;
1219 u64 rx_csum_unnecessary_inner;
1220 u64 rx_xdp_drop;
1221 u64 rx_xdp_redirect;
1222 @@ -179,11 +182,14 @@ struct mlx5e_rq_stats {
1223 u64 packets;
1224 u64 bytes;
1225 u64 csum_complete;
1226 + u64 csum_complete_tail;
1227 + u64 csum_complete_tail_slow;
1228 u64 csum_unnecessary;
1229 u64 csum_unnecessary_inner;
1230 u64 csum_none;
1231 u64 lro_packets;
1232 u64 lro_bytes;
1233 + u64 ecn_mark;
1234 u64 removed_vlan_packets;
1235 u64 xdp_drop;
1236 u64 xdp_redirect;
1237 diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/rs-fw.c b/drivers/net/wireless/intel/iwlwifi/mvm/rs-fw.c
1238 index d1c1a8069c7e..5e1e671d2002 100644
1239 --- a/drivers/net/wireless/intel/iwlwifi/mvm/rs-fw.c
1240 +++ b/drivers/net/wireless/intel/iwlwifi/mvm/rs-fw.c
1241 @@ -315,7 +315,7 @@ out:
1242 }
1243
1244 void rs_fw_rate_init(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
1245 - enum nl80211_band band)
1246 + enum nl80211_band band, bool update)
1247 {
1248 struct ieee80211_hw *hw = mvm->hw;
1249 struct iwl_mvm_sta *mvmsta = iwl_mvm_sta_from_mac80211(sta);
1250 @@ -324,7 +324,8 @@ void rs_fw_rate_init(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
1251 struct ieee80211_supported_band *sband;
1252 struct iwl_tlc_config_cmd cfg_cmd = {
1253 .sta_id = mvmsta->sta_id,
1254 - .max_ch_width = rs_fw_bw_from_sta_bw(sta),
1255 + .max_ch_width = update ?
1256 + rs_fw_bw_from_sta_bw(sta) : RATE_MCS_CHAN_WIDTH_20,
1257 .flags = cpu_to_le16(rs_fw_set_config_flags(mvm, sta)),
1258 .chains = rs_fw_set_active_chains(iwl_mvm_get_valid_tx_ant(mvm)),
1259 .max_mpdu_len = cpu_to_le16(sta->max_amsdu_len),
1260 diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/rs.c b/drivers/net/wireless/intel/iwlwifi/mvm/rs.c
1261 index 6b9c670fcef8..6f4508d62a97 100644
1262 --- a/drivers/net/wireless/intel/iwlwifi/mvm/rs.c
1263 +++ b/drivers/net/wireless/intel/iwlwifi/mvm/rs.c
1264 @@ -4113,7 +4113,7 @@ void iwl_mvm_rs_rate_init(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
1265 enum nl80211_band band, bool update)
1266 {
1267 if (iwl_mvm_has_tlc_offload(mvm))
1268 - rs_fw_rate_init(mvm, sta, band);
1269 + rs_fw_rate_init(mvm, sta, band, update);
1270 else
1271 rs_drv_rate_init(mvm, sta, band, update);
1272 }
1273 diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/rs.h b/drivers/net/wireless/intel/iwlwifi/mvm/rs.h
1274 index 8e7f993e2911..d0f47899f284 100644
1275 --- a/drivers/net/wireless/intel/iwlwifi/mvm/rs.h
1276 +++ b/drivers/net/wireless/intel/iwlwifi/mvm/rs.h
1277 @@ -461,7 +461,7 @@ void rs_remove_sta_debugfs(void *mvm, void *mvm_sta);
1278
1279 void iwl_mvm_rs_add_sta(struct iwl_mvm *mvm, struct iwl_mvm_sta *mvmsta);
1280 void rs_fw_rate_init(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
1281 - enum nl80211_band band);
1282 + enum nl80211_band band, bool update);
1283 int rs_fw_tx_protection(struct iwl_mvm *mvm, struct iwl_mvm_sta *mvmsta,
1284 bool enable);
1285 void iwl_mvm_tlc_update_notif(struct iwl_mvm *mvm,
1286 diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
1287 index ffae299c3492..5615ce55cef5 100644
1288 --- a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
1289 +++ b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
1290 @@ -671,7 +671,7 @@ int iwl_mvm_tx_skb_non_sta(struct iwl_mvm *mvm, struct sk_buff *skb)
1291 if (info.control.vif->type == NL80211_IFTYPE_P2P_DEVICE ||
1292 info.control.vif->type == NL80211_IFTYPE_AP ||
1293 info.control.vif->type == NL80211_IFTYPE_ADHOC) {
1294 - if (info.control.vif->type == NL80211_IFTYPE_P2P_DEVICE)
1295 + if (!ieee80211_is_data(hdr->frame_control))
1296 sta_id = mvmvif->bcast_sta.sta_id;
1297 else
1298 sta_id = mvmvif->mcast_sta.sta_id;
1299 diff --git a/drivers/pci/controller/pci-hyperv.c b/drivers/pci/controller/pci-hyperv.c
1300 index 5dadc964ad3b..5c2849846641 100644
1301 --- a/drivers/pci/controller/pci-hyperv.c
1302 +++ b/drivers/pci/controller/pci-hyperv.c
1303 @@ -2706,8 +2706,8 @@ static int hv_pci_remove(struct hv_device *hdev)
1304 /* Remove the bus from PCI's point of view. */
1305 pci_lock_rescan_remove();
1306 pci_stop_root_bus(hbus->pci_bus);
1307 - pci_remove_root_bus(hbus->pci_bus);
1308 hv_pci_remove_slots(hbus);
1309 + pci_remove_root_bus(hbus->pci_bus);
1310 pci_unlock_rescan_remove();
1311 hbus->state = hv_pcibus_removed;
1312 }
1313 diff --git a/drivers/pinctrl/sprd/pinctrl-sprd.c b/drivers/pinctrl/sprd/pinctrl-sprd.c
1314 index 78c2f548b25f..8f3468d9f848 100644
1315 --- a/drivers/pinctrl/sprd/pinctrl-sprd.c
1316 +++ b/drivers/pinctrl/sprd/pinctrl-sprd.c
1317 @@ -159,10 +159,8 @@ struct sprd_pinctrl {
1318 struct sprd_pinctrl_soc_info *info;
1319 };
1320
1321 -enum sprd_pinconf_params {
1322 - SPRD_PIN_CONFIG_CONTROL = PIN_CONFIG_END + 1,
1323 - SPRD_PIN_CONFIG_SLEEP_MODE = PIN_CONFIG_END + 2,
1324 -};
1325 +#define SPRD_PIN_CONFIG_CONTROL (PIN_CONFIG_END + 1)
1326 +#define SPRD_PIN_CONFIG_SLEEP_MODE (PIN_CONFIG_END + 2)
1327
1328 static int sprd_pinctrl_get_id_by_name(struct sprd_pinctrl *sprd_pctl,
1329 const char *name)
1330 diff --git a/drivers/power/supply/power_supply_sysfs.c b/drivers/power/supply/power_supply_sysfs.c
1331 index 5a2757a7f408..5358a80d854f 100644
1332 --- a/drivers/power/supply/power_supply_sysfs.c
1333 +++ b/drivers/power/supply/power_supply_sysfs.c
1334 @@ -131,7 +131,8 @@ static ssize_t power_supply_show_property(struct device *dev,
1335 dev_dbg(dev, "driver has no data for `%s' property\n",
1336 attr->attr.name);
1337 else if (ret != -ENODEV && ret != -EAGAIN)
1338 - dev_err(dev, "driver failed to report `%s' property: %zd\n",
1339 + dev_err_ratelimited(dev,
1340 + "driver failed to report `%s' property: %zd\n",
1341 attr->attr.name, ret);
1342 return ret;
1343 }
1344 diff --git a/drivers/scsi/qla2xxx/qla_gs.c b/drivers/scsi/qla2xxx/qla_gs.c
1345 index fc08e46a93ca..34ff4bbc8de1 100644
1346 --- a/drivers/scsi/qla2xxx/qla_gs.c
1347 +++ b/drivers/scsi/qla2xxx/qla_gs.c
1348 @@ -4045,6 +4045,41 @@ out:
1349 }
1350 }
1351
1352 +static int qla2x00_post_gnnft_gpnft_done_work(struct scsi_qla_host *vha,
1353 + srb_t *sp, int cmd)
1354 +{
1355 + struct qla_work_evt *e;
1356 +
1357 + if (cmd != QLA_EVT_GPNFT_DONE && cmd != QLA_EVT_GNNFT_DONE)
1358 + return QLA_PARAMETER_ERROR;
1359 +
1360 + e = qla2x00_alloc_work(vha, cmd);
1361 + if (!e)
1362 + return QLA_FUNCTION_FAILED;
1363 +
1364 + e->u.iosb.sp = sp;
1365 +
1366 + return qla2x00_post_work(vha, e);
1367 +}
1368 +
1369 +static int qla2x00_post_nvme_gpnft_done_work(struct scsi_qla_host *vha,
1370 + srb_t *sp, int cmd)
1371 +{
1372 + struct qla_work_evt *e;
1373 +
1374 + if (cmd != QLA_EVT_GPNFT)
1375 + return QLA_PARAMETER_ERROR;
1376 +
1377 + e = qla2x00_alloc_work(vha, cmd);
1378 + if (!e)
1379 + return QLA_FUNCTION_FAILED;
1380 +
1381 + e->u.gpnft.fc4_type = FC4_TYPE_NVME;
1382 + e->u.gpnft.sp = sp;
1383 +
1384 + return qla2x00_post_work(vha, e);
1385 +}
1386 +
1387 static void qla2x00_find_free_fcp_nvme_slot(struct scsi_qla_host *vha,
1388 struct srb *sp)
1389 {
1390 @@ -4145,22 +4180,36 @@ static void qla2x00_async_gpnft_gnnft_sp_done(void *s, int res)
1391 {
1392 struct srb *sp = s;
1393 struct scsi_qla_host *vha = sp->vha;
1394 - struct qla_work_evt *e;
1395 struct ct_sns_req *ct_req =
1396 (struct ct_sns_req *)sp->u.iocb_cmd.u.ctarg.req;
1397 u16 cmd = be16_to_cpu(ct_req->command);
1398 u8 fc4_type = sp->gen2;
1399 unsigned long flags;
1400 + int rc;
1401
1402 /* gen2 field is holding the fc4type */
1403 ql_dbg(ql_dbg_disc, vha, 0xffff,
1404 "Async done-%s res %x FC4Type %x\n",
1405 sp->name, res, sp->gen2);
1406
1407 + sp->rc = res;
1408 if (res) {
1409 unsigned long flags;
1410 + const char *name = sp->name;
1411 +
1412 + /*
1413 + * We are in an Interrupt context, queue up this
1414 + * sp for GNNFT_DONE work. This will allow all
1415 + * the resource to get freed up.
1416 + */
1417 + rc = qla2x00_post_gnnft_gpnft_done_work(vha, sp,
1418 + QLA_EVT_GNNFT_DONE);
1419 + if (rc) {
1420 + /* Cleanup here to prevent memory leak */
1421 + qla24xx_sp_unmap(vha, sp);
1422 + sp->free(sp);
1423 + }
1424
1425 - sp->free(sp);
1426 spin_lock_irqsave(&vha->work_lock, flags);
1427 vha->scan.scan_flags &= ~SF_SCANNING;
1428 vha->scan.scan_retry++;
1429 @@ -4171,9 +4220,9 @@ static void qla2x00_async_gpnft_gnnft_sp_done(void *s, int res)
1430 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags);
1431 qla2xxx_wake_dpc(vha);
1432 } else {
1433 - ql_dbg(ql_dbg_disc, sp->vha, 0xffff,
1434 - "Async done-%s rescan failed on all retries\n",
1435 - sp->name);
1436 + ql_dbg(ql_dbg_disc, vha, 0xffff,
1437 + "Async done-%s rescan failed on all retries.\n",
1438 + name);
1439 }
1440 return;
1441 }
1442 @@ -4188,77 +4237,31 @@ static void qla2x00_async_gpnft_gnnft_sp_done(void *s, int res)
1443 vha->scan.scan_flags &= ~SF_SCANNING;
1444 spin_unlock_irqrestore(&vha->work_lock, flags);
1445
1446 - e = qla2x00_alloc_work(vha, QLA_EVT_GPNFT);
1447 - if (!e) {
1448 - /*
1449 - * please ignore kernel warning. Otherwise,
1450 - * we have mem leak.
1451 - */
1452 - if (sp->u.iocb_cmd.u.ctarg.req) {
1453 - dma_free_coherent(&vha->hw->pdev->dev,
1454 - sp->u.iocb_cmd.u.ctarg.req_allocated_size,
1455 - sp->u.iocb_cmd.u.ctarg.req,
1456 - sp->u.iocb_cmd.u.ctarg.req_dma);
1457 - sp->u.iocb_cmd.u.ctarg.req = NULL;
1458 - }
1459 - if (sp->u.iocb_cmd.u.ctarg.rsp) {
1460 - dma_free_coherent(&vha->hw->pdev->dev,
1461 - sp->u.iocb_cmd.u.ctarg.rsp_allocated_size,
1462 - sp->u.iocb_cmd.u.ctarg.rsp,
1463 - sp->u.iocb_cmd.u.ctarg.rsp_dma);
1464 - sp->u.iocb_cmd.u.ctarg.rsp = NULL;
1465 - }
1466 -
1467 - ql_dbg(ql_dbg_disc, vha, 0xffff,
1468 - "Async done-%s unable to alloc work element\n",
1469 - sp->name);
1470 - sp->free(sp);
1471 + sp->rc = res;
1472 + rc = qla2x00_post_nvme_gpnft_done_work(vha, sp, QLA_EVT_GPNFT);
1473 + if (!rc) {
1474 + qla24xx_sp_unmap(vha, sp);
1475 set_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags);
1476 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags);
1477 return;
1478 }
1479 - e->u.gpnft.fc4_type = FC4_TYPE_NVME;
1480 - sp->rc = res;
1481 - e->u.gpnft.sp = sp;
1482 -
1483 - qla2x00_post_work(vha, e);
1484 - return;
1485 }
1486
1487 - if (cmd == GPN_FT_CMD)
1488 - e = qla2x00_alloc_work(vha, QLA_EVT_GPNFT_DONE);
1489 - else
1490 - e = qla2x00_alloc_work(vha, QLA_EVT_GNNFT_DONE);
1491 - if (!e) {
1492 - /* please ignore kernel warning. Otherwise, we have mem leak. */
1493 - if (sp->u.iocb_cmd.u.ctarg.req) {
1494 - dma_free_coherent(&vha->hw->pdev->dev,
1495 - sp->u.iocb_cmd.u.ctarg.req_allocated_size,
1496 - sp->u.iocb_cmd.u.ctarg.req,
1497 - sp->u.iocb_cmd.u.ctarg.req_dma);
1498 - sp->u.iocb_cmd.u.ctarg.req = NULL;
1499 - }
1500 - if (sp->u.iocb_cmd.u.ctarg.rsp) {
1501 - dma_free_coherent(&vha->hw->pdev->dev,
1502 - sp->u.iocb_cmd.u.ctarg.rsp_allocated_size,
1503 - sp->u.iocb_cmd.u.ctarg.rsp,
1504 - sp->u.iocb_cmd.u.ctarg.rsp_dma);
1505 - sp->u.iocb_cmd.u.ctarg.rsp = NULL;
1506 - }
1507 + if (cmd == GPN_FT_CMD) {
1508 + del_timer(&sp->u.iocb_cmd.timer);
1509 + rc = qla2x00_post_gnnft_gpnft_done_work(vha, sp,
1510 + QLA_EVT_GPNFT_DONE);
1511 + } else {
1512 + rc = qla2x00_post_gnnft_gpnft_done_work(vha, sp,
1513 + QLA_EVT_GNNFT_DONE);
1514 + }
1515
1516 - ql_dbg(ql_dbg_disc, vha, 0xffff,
1517 - "Async done-%s unable to alloc work element\n",
1518 - sp->name);
1519 - sp->free(sp);
1520 + if (rc) {
1521 + qla24xx_sp_unmap(vha, sp);
1522 set_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags);
1523 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags);
1524 return;
1525 }
1526 -
1527 - sp->rc = res;
1528 - e->u.iosb.sp = sp;
1529 -
1530 - qla2x00_post_work(vha, e);
1531 }
1532
1533 /*
1534 @@ -4357,7 +4360,6 @@ void qla24xx_async_gpnft_done(scsi_qla_host_t *vha, srb_t *sp)
1535 {
1536 ql_dbg(ql_dbg_disc, vha, 0xffff,
1537 "%s enter\n", __func__);
1538 - del_timer(&sp->u.iocb_cmd.timer);
1539 qla24xx_async_gnnft(vha, sp, sp->gen2);
1540 }
1541
1542 diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
1543 index 39a8f4a671aa..7c1f36b69bdc 100644
1544 --- a/drivers/scsi/qla2xxx/qla_init.c
1545 +++ b/drivers/scsi/qla2xxx/qla_init.c
1546 @@ -54,7 +54,7 @@ qla2x00_sp_timeout(struct timer_list *t)
1547 unsigned long flags;
1548 struct qla_hw_data *ha = sp->vha->hw;
1549
1550 - WARN_ON(irqs_disabled());
1551 + WARN_ON_ONCE(irqs_disabled());
1552 spin_lock_irqsave(&ha->hardware_lock, flags);
1553 req = sp->qpair->req;
1554 req->outstanding_cmds[sp->handle] = NULL;
1555 @@ -796,6 +796,9 @@ qla24xx_async_gnl_sp_done(void *s, int res)
1556 sp->name, res, sp->u.iocb_cmd.u.mbx.in_mb[1],
1557 sp->u.iocb_cmd.u.mbx.in_mb[2]);
1558
1559 + if (res == QLA_FUNCTION_TIMEOUT)
1560 + return;
1561 +
1562 memset(&ea, 0, sizeof(ea));
1563 ea.sp = sp;
1564 ea.rc = res;
1565 @@ -979,17 +982,13 @@ void qla24xx_async_gpdb_sp_done(void *s, int res)
1566 "Async done-%s res %x, WWPN %8phC mb[1]=%x mb[2]=%x \n",
1567 sp->name, res, fcport->port_name, mb[1], mb[2]);
1568
1569 - fcport->flags &= ~(FCF_ASYNC_SENT | FCF_ASYNC_ACTIVE);
1570 -
1571 - if (res == QLA_FUNCTION_TIMEOUT)
1572 - return;
1573 -
1574 if (res == QLA_FUNCTION_TIMEOUT) {
1575 dma_pool_free(sp->vha->hw->s_dma_pool, sp->u.iocb_cmd.u.mbx.in,
1576 sp->u.iocb_cmd.u.mbx.in_dma);
1577 return;
1578 }
1579
1580 + fcport->flags &= ~(FCF_ASYNC_SENT | FCF_ASYNC_ACTIVE);
1581 memset(&ea, 0, sizeof(ea));
1582 ea.event = FCME_GPDB_DONE;
1583 ea.fcport = fcport;
1584 diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c
1585 index cc9e846a3865..094be406cde4 100644
1586 --- a/fs/cifs/smb2ops.c
1587 +++ b/fs/cifs/smb2ops.c
1588 @@ -553,7 +553,50 @@ int open_shroot(unsigned int xid, struct cifs_tcon *tcon, struct cifs_fid *pfid)
1589 oparams.fid = pfid;
1590 oparams.reconnect = false;
1591
1592 + /*
1593 + * We do not hold the lock for the open because in case
1594 + * SMB2_open needs to reconnect, it will end up calling
1595 + * cifs_mark_open_files_invalid() which takes the lock again
1596 + * thus causing a deadlock
1597 + */
1598 + mutex_unlock(&tcon->crfid.fid_mutex);
1599 rc = SMB2_open(xid, &oparams, &srch_path, &oplock, NULL, NULL, NULL);
1600 + mutex_lock(&tcon->crfid.fid_mutex);
1601 +
1602 + /*
1603 + * Now we need to check again as the cached root might have
1604 + * been successfully re-opened from a concurrent process
1605 + */
1606 +
1607 + if (tcon->crfid.is_valid) {
1608 + /* work was already done */
1609 +
1610 + /* stash fids for close() later */
1611 + struct cifs_fid fid = {
1612 + .persistent_fid = pfid->persistent_fid,
1613 + .volatile_fid = pfid->volatile_fid,
1614 + };
1615 +
1616 + /*
1617 + * Caller expects this func to set pfid to a valid
1618 + * cached root, so we copy the existing one and get a
1619 + * reference
1620 + */
1621 + memcpy(pfid, tcon->crfid.fid, sizeof(*pfid));
1622 + kref_get(&tcon->crfid.refcount);
1623 +
1624 + mutex_unlock(&tcon->crfid.fid_mutex);
1625 +
1626 + if (rc == 0) {
1627 + /* close extra handle outside of critical section */
1628 + SMB2_close(xid, tcon, fid.persistent_fid,
1629 + fid.volatile_fid);
1630 + }
1631 + return 0;
1632 + }
1633 +
1634 + /* Cached root is still invalid, continue normaly */
1635 +
1636 if (rc == 0) {
1637 memcpy(tcon->crfid.fid, pfid, sizeof(struct cifs_fid));
1638 tcon->crfid.tcon = tcon;
1639 @@ -561,6 +604,7 @@ int open_shroot(unsigned int xid, struct cifs_tcon *tcon, struct cifs_fid *pfid)
1640 kref_init(&tcon->crfid.refcount);
1641 kref_get(&tcon->crfid.refcount);
1642 }
1643 +
1644 mutex_unlock(&tcon->crfid.fid_mutex);
1645 return rc;
1646 }
1647 diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
1648 index 59d0472013f4..388500eec729 100644
1649 --- a/fs/f2fs/checkpoint.c
1650 +++ b/fs/f2fs/checkpoint.c
1651 @@ -849,6 +849,7 @@ int f2fs_get_valid_checkpoint(struct f2fs_sb_info *sbi)
1652 unsigned int cp_blks = 1 + __cp_payload(sbi);
1653 block_t cp_blk_no;
1654 int i;
1655 + int err;
1656
1657 sbi->ckpt = f2fs_kzalloc(sbi, array_size(blk_size, cp_blks),
1658 GFP_KERNEL);
1659 @@ -876,6 +877,7 @@ int f2fs_get_valid_checkpoint(struct f2fs_sb_info *sbi)
1660 } else if (cp2) {
1661 cur_page = cp2;
1662 } else {
1663 + err = -EFSCORRUPTED;
1664 goto fail_no_cp;
1665 }
1666
1667 @@ -888,8 +890,10 @@ int f2fs_get_valid_checkpoint(struct f2fs_sb_info *sbi)
1668 sbi->cur_cp_pack = 2;
1669
1670 /* Sanity checking of checkpoint */
1671 - if (f2fs_sanity_check_ckpt(sbi))
1672 + if (f2fs_sanity_check_ckpt(sbi)) {
1673 + err = -EFSCORRUPTED;
1674 goto free_fail_no_cp;
1675 + }
1676
1677 if (cp_blks <= 1)
1678 goto done;
1679 @@ -903,8 +907,10 @@ int f2fs_get_valid_checkpoint(struct f2fs_sb_info *sbi)
1680 unsigned char *ckpt = (unsigned char *)sbi->ckpt;
1681
1682 cur_page = f2fs_get_meta_page(sbi, cp_blk_no + i);
1683 - if (IS_ERR(cur_page))
1684 + if (IS_ERR(cur_page)) {
1685 + err = PTR_ERR(cur_page);
1686 goto free_fail_no_cp;
1687 + }
1688 sit_bitmap_ptr = page_address(cur_page);
1689 memcpy(ckpt + i * blk_size, sit_bitmap_ptr, blk_size);
1690 f2fs_put_page(cur_page, 1);
1691 @@ -919,7 +925,7 @@ free_fail_no_cp:
1692 f2fs_put_page(cp2, 1);
1693 fail_no_cp:
1694 kfree(sbi->ckpt);
1695 - return -EINVAL;
1696 + return err;
1697 }
1698
1699 static void __add_dirty_inode(struct inode *inode, enum inode_type type)
1700 diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
1701 index 4d02e76b648a..9511466bc785 100644
1702 --- a/fs/f2fs/data.c
1703 +++ b/fs/f2fs/data.c
1704 @@ -449,7 +449,7 @@ int f2fs_submit_page_bio(struct f2fs_io_info *fio)
1705
1706 if (!f2fs_is_valid_blkaddr(fio->sbi, fio->new_blkaddr,
1707 __is_meta_io(fio) ? META_GENERIC : DATA_GENERIC))
1708 - return -EFAULT;
1709 + return -EFSCORRUPTED;
1710
1711 trace_f2fs_submit_page_bio(page, fio);
1712 f2fs_trace_ios(fio, 0);
1713 @@ -1071,7 +1071,7 @@ next_block:
1714
1715 if (__is_valid_data_blkaddr(blkaddr) &&
1716 !f2fs_is_valid_blkaddr(sbi, blkaddr, DATA_GENERIC)) {
1717 - err = -EFAULT;
1718 + err = -EFSCORRUPTED;
1719 goto sync_out;
1720 }
1721
1722 @@ -1755,7 +1755,7 @@ int f2fs_do_write_data_page(struct f2fs_io_info *fio)
1723
1724 if (!f2fs_is_valid_blkaddr(fio->sbi, fio->old_blkaddr,
1725 DATA_GENERIC))
1726 - return -EFAULT;
1727 + return -EFSCORRUPTED;
1728
1729 ipu_force = true;
1730 fio->need_lock = LOCK_DONE;
1731 @@ -1781,7 +1781,7 @@ got_it:
1732 if (__is_valid_data_blkaddr(fio->old_blkaddr) &&
1733 !f2fs_is_valid_blkaddr(fio->sbi, fio->old_blkaddr,
1734 DATA_GENERIC)) {
1735 - err = -EFAULT;
1736 + err = -EFSCORRUPTED;
1737 goto out_writepage;
1738 }
1739 /*
1740 diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
1741 index 44ea7ac69ef4..fb216488d67a 100644
1742 --- a/fs/f2fs/f2fs.h
1743 +++ b/fs/f2fs/f2fs.h
1744 @@ -3487,3 +3487,7 @@ extern void f2fs_build_fault_attr(struct f2fs_sb_info *sbi, unsigned int rate,
1745 #endif
1746
1747 #endif
1748 +
1749 +#define EFSBADCRC EBADMSG /* Bad CRC detected */
1750 +#define EFSCORRUPTED EUCLEAN /* Filesystem is corrupted */
1751 +
1752 diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c
1753 index d44b57a363ff..dd29a49143f5 100644
1754 --- a/fs/f2fs/gc.c
1755 +++ b/fs/f2fs/gc.c
1756 @@ -636,7 +636,7 @@ static int ra_data_block(struct inode *inode, pgoff_t index)
1757
1758 if (unlikely(!f2fs_is_valid_blkaddr(sbi, dn.data_blkaddr,
1759 DATA_GENERIC))) {
1760 - err = -EFAULT;
1761 + err = -EFSCORRUPTED;
1762 goto put_page;
1763 }
1764 got_it:
1765 diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c
1766 index 92703efde36e..6bbb5f6801e2 100644
1767 --- a/fs/f2fs/inline.c
1768 +++ b/fs/f2fs/inline.c
1769 @@ -146,7 +146,7 @@ int f2fs_convert_inline_page(struct dnode_of_data *dn, struct page *page)
1770 "%s: corrupted inline inode ino=%lx, i_addr[0]:0x%x, "
1771 "run fsck to fix.",
1772 __func__, dn->inode->i_ino, dn->data_blkaddr);
1773 - return -EINVAL;
1774 + return -EFSCORRUPTED;
1775 }
1776
1777 f2fs_bug_on(F2FS_P_SB(page), PageWriteback(page));
1778 @@ -389,7 +389,7 @@ static int f2fs_move_inline_dirents(struct inode *dir, struct page *ipage,
1779 "%s: corrupted inline inode ino=%lx, i_addr[0]:0x%x, "
1780 "run fsck to fix.",
1781 __func__, dir->i_ino, dn.data_blkaddr);
1782 - err = -EINVAL;
1783 + err = -EFSCORRUPTED;
1784 goto out;
1785 }
1786
1787 diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
1788 index 0f31df01e36c..540d45759621 100644
1789 --- a/fs/f2fs/inode.c
1790 +++ b/fs/f2fs/inode.c
1791 @@ -76,7 +76,7 @@ static int __written_first_block(struct f2fs_sb_info *sbi,
1792 if (!__is_valid_data_blkaddr(addr))
1793 return 1;
1794 if (!f2fs_is_valid_blkaddr(sbi, addr, DATA_GENERIC))
1795 - return -EFAULT;
1796 + return -EFSCORRUPTED;
1797 return 0;
1798 }
1799
1800 @@ -361,7 +361,7 @@ static int do_read_inode(struct inode *inode)
1801
1802 if (!sanity_check_inode(inode, node_page)) {
1803 f2fs_put_page(node_page, 1);
1804 - return -EINVAL;
1805 + return -EFSCORRUPTED;
1806 }
1807
1808 /* check data exist */
1809 diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
1810 index e2d9edad758c..aa8f19e1bdb3 100644
1811 --- a/fs/f2fs/node.c
1812 +++ b/fs/f2fs/node.c
1813 @@ -40,7 +40,7 @@ int f2fs_check_nid_range(struct f2fs_sb_info *sbi, nid_t nid)
1814 f2fs_msg(sbi->sb, KERN_WARNING,
1815 "%s: out-of-range nid=%x, run fsck to fix.",
1816 __func__, nid);
1817 - return -EINVAL;
1818 + return -EFSCORRUPTED;
1819 }
1820 return 0;
1821 }
1822 @@ -1284,7 +1284,7 @@ static int read_node_page(struct page *page, int op_flags)
1823 if (PageUptodate(page)) {
1824 if (!f2fs_inode_chksum_verify(sbi, page)) {
1825 ClearPageUptodate(page);
1826 - return -EBADMSG;
1827 + return -EFSBADCRC;
1828 }
1829 return LOCKED_PAGE;
1830 }
1831 @@ -1370,7 +1370,7 @@ repeat:
1832 }
1833
1834 if (!f2fs_inode_chksum_verify(sbi, page)) {
1835 - err = -EBADMSG;
1836 + err = -EFSBADCRC;
1837 goto out_err;
1838 }
1839 page_hit:
1840 diff --git a/fs/f2fs/recovery.c b/fs/f2fs/recovery.c
1841 index bf5c5f4fa77e..0b224f4a4a65 100644
1842 --- a/fs/f2fs/recovery.c
1843 +++ b/fs/f2fs/recovery.c
1844 @@ -491,7 +491,7 @@ retry_dn:
1845 "Inconsistent ofs_of_node, ino:%lu, ofs:%u, %u",
1846 inode->i_ino, ofs_of_node(dn.node_page),
1847 ofs_of_node(page));
1848 - err = -EFAULT;
1849 + err = -EFSCORRUPTED;
1850 goto err;
1851 }
1852
1853 diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
1854 index 92f72bb5aff4..10d5dcdb34be 100644
1855 --- a/fs/f2fs/segment.c
1856 +++ b/fs/f2fs/segment.c
1857 @@ -2657,7 +2657,7 @@ int f2fs_trim_fs(struct f2fs_sb_info *sbi, struct fstrim_range *range)
1858 if (is_sbi_flag_set(sbi, SBI_NEED_FSCK)) {
1859 f2fs_msg(sbi->sb, KERN_WARNING,
1860 "Found FS corruption, run fsck to fix.");
1861 - return -EIO;
1862 + return -EFSCORRUPTED;
1863 }
1864
1865 /* start/end segment number in main_area */
1866 @@ -3079,7 +3079,7 @@ int f2fs_inplace_write_data(struct f2fs_io_info *fio)
1867
1868 if (!IS_DATASEG(get_seg_entry(sbi, segno)->type)) {
1869 set_sbi_flag(sbi, SBI_NEED_FSCK);
1870 - return -EFAULT;
1871 + return -EFSCORRUPTED;
1872 }
1873
1874 stat_inc_inplace_blocks(fio->sbi);
1875 @@ -3261,11 +3261,6 @@ static int read_compacted_summaries(struct f2fs_sb_info *sbi)
1876 seg_i = CURSEG_I(sbi, i);
1877 segno = le32_to_cpu(ckpt->cur_data_segno[i]);
1878 blk_off = le16_to_cpu(ckpt->cur_data_blkoff[i]);
1879 - if (blk_off > ENTRIES_IN_SUM) {
1880 - f2fs_bug_on(sbi, 1);
1881 - f2fs_put_page(page, 1);
1882 - return -EFAULT;
1883 - }
1884 seg_i->next_segno = segno;
1885 reset_curseg(sbi, i, 0);
1886 seg_i->alloc_type = ckpt->alloc_type[i];
1887 @@ -3971,7 +3966,7 @@ static int build_sit_entries(struct f2fs_sb_info *sbi)
1888 "Wrong journal entry on segno %u",
1889 start);
1890 set_sbi_flag(sbi, SBI_NEED_FSCK);
1891 - err = -EINVAL;
1892 + err = -EFSCORRUPTED;
1893 break;
1894 }
1895
1896 @@ -4012,7 +4007,7 @@ static int build_sit_entries(struct f2fs_sb_info *sbi)
1897 "SIT is corrupted node# %u vs %u",
1898 total_node_blocks, valid_node_count(sbi));
1899 set_sbi_flag(sbi, SBI_NEED_FSCK);
1900 - err = -EINVAL;
1901 + err = -EFSCORRUPTED;
1902 }
1903
1904 return err;
1905 @@ -4103,6 +4098,41 @@ static int build_dirty_segmap(struct f2fs_sb_info *sbi)
1906 return init_victim_secmap(sbi);
1907 }
1908
1909 +static int sanity_check_curseg(struct f2fs_sb_info *sbi)
1910 +{
1911 + int i;
1912 +
1913 + /*
1914 + * In LFS/SSR curseg, .next_blkoff should point to an unused blkaddr;
1915 + * In LFS curseg, all blkaddr after .next_blkoff should be unused.
1916 + */
1917 + for (i = 0; i < NO_CHECK_TYPE; i++) {
1918 + struct curseg_info *curseg = CURSEG_I(sbi, i);
1919 + struct seg_entry *se = get_seg_entry(sbi, curseg->segno);
1920 + unsigned int blkofs = curseg->next_blkoff;
1921 +
1922 + if (f2fs_test_bit(blkofs, se->cur_valid_map))
1923 + goto out;
1924 +
1925 + if (curseg->alloc_type == SSR)
1926 + continue;
1927 +
1928 + for (blkofs += 1; blkofs < sbi->blocks_per_seg; blkofs++) {
1929 + if (!f2fs_test_bit(blkofs, se->cur_valid_map))
1930 + continue;
1931 +out:
1932 + f2fs_msg(sbi->sb, KERN_ERR,
1933 + "Current segment's next free block offset is "
1934 + "inconsistent with bitmap, logtype:%u, "
1935 + "segno:%u, type:%u, next_blkoff:%u, blkofs:%u",
1936 + i, curseg->segno, curseg->alloc_type,
1937 + curseg->next_blkoff, blkofs);
1938 + return -EFSCORRUPTED;
1939 + }
1940 + }
1941 + return 0;
1942 +}
1943 +
1944 /*
1945 * Update min, max modified time for cost-benefit GC algorithm
1946 */
1947 @@ -4198,6 +4228,10 @@ int f2fs_build_segment_manager(struct f2fs_sb_info *sbi)
1948 if (err)
1949 return err;
1950
1951 + err = sanity_check_curseg(sbi);
1952 + if (err)
1953 + return err;
1954 +
1955 init_min_max_mtime(sbi);
1956 return 0;
1957 }
1958 diff --git a/fs/f2fs/segment.h b/fs/f2fs/segment.h
1959 index 5079532cb176..9c2a55ad61bc 100644
1960 --- a/fs/f2fs/segment.h
1961 +++ b/fs/f2fs/segment.h
1962 @@ -684,7 +684,7 @@ static inline int check_block_count(struct f2fs_sb_info *sbi,
1963 "Mismatch valid blocks %d vs. %d",
1964 GET_SIT_VBLOCKS(raw_sit), valid_blocks);
1965 set_sbi_flag(sbi, SBI_NEED_FSCK);
1966 - return -EINVAL;
1967 + return -EFSCORRUPTED;
1968 }
1969
1970 /* check segment usage, and check boundary of a given segment number */
1971 @@ -694,7 +694,7 @@ static inline int check_block_count(struct f2fs_sb_info *sbi,
1972 "Wrong valid blocks %d or segno %u",
1973 GET_SIT_VBLOCKS(raw_sit), segno);
1974 set_sbi_flag(sbi, SBI_NEED_FSCK);
1975 - return -EINVAL;
1976 + return -EFSCORRUPTED;
1977 }
1978 return 0;
1979 }
1980 diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
1981 index 1871031e2d5e..fdafcfd8b20e 100644
1982 --- a/fs/f2fs/super.c
1983 +++ b/fs/f2fs/super.c
1984 @@ -2413,11 +2413,11 @@ int f2fs_sanity_check_ckpt(struct f2fs_sb_info *sbi)
1985 }
1986 }
1987 for (i = 0; i < NR_CURSEG_NODE_TYPE; i++) {
1988 - for (j = i; j < NR_CURSEG_DATA_TYPE; j++) {
1989 + for (j = 0; j < NR_CURSEG_DATA_TYPE; j++) {
1990 if (le32_to_cpu(ckpt->cur_node_segno[i]) ==
1991 le32_to_cpu(ckpt->cur_data_segno[j])) {
1992 f2fs_msg(sbi->sb, KERN_ERR,
1993 - "Data segment (%u) and Data segment (%u)"
1994 + "Node segment (%u) and Data segment (%u)"
1995 " has the same segno: %u", i, j,
1996 le32_to_cpu(ckpt->cur_node_segno[i]));
1997 return 1;
1998 @@ -2616,7 +2616,7 @@ static int read_raw_super_block(struct f2fs_sb_info *sbi,
1999 f2fs_msg(sb, KERN_ERR,
2000 "Can't find valid F2FS filesystem in %dth superblock",
2001 block + 1);
2002 - err = -EINVAL;
2003 + err = -EFSCORRUPTED;
2004 brelse(bh);
2005 continue;
2006 }
2007 diff --git a/fs/f2fs/xattr.c b/fs/f2fs/xattr.c
2008 index 88e30f7cf9e1..1dae74f7ccca 100644
2009 --- a/fs/f2fs/xattr.c
2010 +++ b/fs/f2fs/xattr.c
2011 @@ -349,7 +349,7 @@ static int lookup_all_xattrs(struct inode *inode, struct page *ipage,
2012
2013 *xe = __find_xattr(cur_addr, last_txattr_addr, index, len, name);
2014 if (!*xe) {
2015 - err = -EFAULT;
2016 + err = -EFSCORRUPTED;
2017 goto out;
2018 }
2019 check:
2020 @@ -625,7 +625,7 @@ static int __f2fs_setxattr(struct inode *inode, int index,
2021 /* find entry with wanted name. */
2022 here = __find_xattr(base_addr, last_base_addr, index, len, name);
2023 if (!here) {
2024 - error = -EFAULT;
2025 + error = -EFSCORRUPTED;
2026 goto exit;
2027 }
2028
2029 diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c
2030 index 06a7da8dbda5..38dc0b43c366 100644
2031 --- a/fs/xfs/libxfs/xfs_bmap.c
2032 +++ b/fs/xfs/libxfs/xfs_bmap.c
2033 @@ -3841,15 +3841,28 @@ xfs_bmapi_read(
2034 XFS_STATS_INC(mp, xs_blk_mapr);
2035
2036 ifp = XFS_IFORK_PTR(ip, whichfork);
2037 + if (!ifp) {
2038 + /* No CoW fork? Return a hole. */
2039 + if (whichfork == XFS_COW_FORK) {
2040 + mval->br_startoff = bno;
2041 + mval->br_startblock = HOLESTARTBLOCK;
2042 + mval->br_blockcount = len;
2043 + mval->br_state = XFS_EXT_NORM;
2044 + *nmap = 1;
2045 + return 0;
2046 + }
2047
2048 - /* No CoW fork? Return a hole. */
2049 - if (whichfork == XFS_COW_FORK && !ifp) {
2050 - mval->br_startoff = bno;
2051 - mval->br_startblock = HOLESTARTBLOCK;
2052 - mval->br_blockcount = len;
2053 - mval->br_state = XFS_EXT_NORM;
2054 - *nmap = 1;
2055 - return 0;
2056 + /*
2057 + * A missing attr ifork implies that the inode says we're in
2058 + * extents or btree format but failed to pass the inode fork
2059 + * verifier while trying to load it. Treat that as a file
2060 + * corruption too.
2061 + */
2062 +#ifdef DEBUG
2063 + xfs_alert(mp, "%s: inode %llu missing fork %d",
2064 + __func__, ip->i_ino, whichfork);
2065 +#endif /* DEBUG */
2066 + return -EFSCORRUPTED;
2067 }
2068
2069 if (!(ifp->if_flags & XFS_IFEXTENTS)) {
2070 diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h
2071 index 412c2820626d..b7d63c3970d1 100644
2072 --- a/include/rdma/ib_verbs.h
2073 +++ b/include/rdma/ib_verbs.h
2074 @@ -71,6 +71,7 @@
2075
2076 extern struct workqueue_struct *ib_wq;
2077 extern struct workqueue_struct *ib_comp_wq;
2078 +extern struct workqueue_struct *ib_comp_unbound_wq;
2079
2080 union ib_gid {
2081 u8 raw[16];
2082 @@ -1576,9 +1577,10 @@ struct ib_ah {
2083 typedef void (*ib_comp_handler)(struct ib_cq *cq, void *cq_context);
2084
2085 enum ib_poll_context {
2086 - IB_POLL_DIRECT, /* caller context, no hw completions */
2087 - IB_POLL_SOFTIRQ, /* poll from softirq context */
2088 - IB_POLL_WORKQUEUE, /* poll from workqueue */
2089 + IB_POLL_DIRECT, /* caller context, no hw completions */
2090 + IB_POLL_SOFTIRQ, /* poll from softirq context */
2091 + IB_POLL_WORKQUEUE, /* poll from workqueue */
2092 + IB_POLL_UNBOUND_WORKQUEUE, /* poll from unbound workqueue */
2093 };
2094
2095 struct ib_cq {
2096 @@ -1595,6 +1597,7 @@ struct ib_cq {
2097 struct irq_poll iop;
2098 struct work_struct work;
2099 };
2100 + struct workqueue_struct *comp_wq;
2101 /*
2102 * Implementation details of the RDMA core, don't use in drivers:
2103 */
2104 diff --git a/init/initramfs.c b/init/initramfs.c
2105 index cd5fb00fcb54..dab8d63459f6 100644
2106 --- a/init/initramfs.c
2107 +++ b/init/initramfs.c
2108 @@ -524,7 +524,7 @@ static void __init free_initrd(void)
2109 unsigned long crashk_start = (unsigned long)__va(crashk_res.start);
2110 unsigned long crashk_end = (unsigned long)__va(crashk_res.end);
2111 #endif
2112 - if (do_retain_initrd)
2113 + if (do_retain_initrd || !initrd_start)
2114 goto skip;
2115
2116 #ifdef CONFIG_KEXEC_CORE
2117 diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c
2118 index e810e8cb17e1..1e272f6a01e7 100644
2119 --- a/kernel/locking/lockdep.c
2120 +++ b/kernel/locking/lockdep.c
2121 @@ -3605,6 +3605,9 @@ static int __lock_downgrade(struct lockdep_map *lock, unsigned long ip)
2122 unsigned int depth;
2123 int i;
2124
2125 + if (unlikely(!debug_locks))
2126 + return 0;
2127 +
2128 depth = curr->lockdep_depth;
2129 /*
2130 * This function is about (re)setting the class of a held lock,
2131 diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
2132 index 0adcddb211fa..3e7badb3ac2d 100644
2133 --- a/net/bluetooth/hci_event.c
2134 +++ b/net/bluetooth/hci_event.c
2135 @@ -5545,11 +5545,6 @@ static void hci_le_remote_conn_param_req_evt(struct hci_dev *hdev,
2136 return send_conn_param_neg_reply(hdev, handle,
2137 HCI_ERROR_UNKNOWN_CONN_ID);
2138
2139 - if (min < hcon->le_conn_min_interval ||
2140 - max > hcon->le_conn_max_interval)
2141 - return send_conn_param_neg_reply(hdev, handle,
2142 - HCI_ERROR_INVALID_LL_PARAMS);
2143 -
2144 if (hci_check_conn_params(min, max, latency, timeout))
2145 return send_conn_param_neg_reply(hdev, handle,
2146 HCI_ERROR_INVALID_LL_PARAMS);
2147 diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
2148 index a54dadf4a6ca..260ef5426e0c 100644
2149 --- a/net/bluetooth/l2cap_core.c
2150 +++ b/net/bluetooth/l2cap_core.c
2151 @@ -5287,14 +5287,7 @@ static inline int l2cap_conn_param_update_req(struct l2cap_conn *conn,
2152
2153 memset(&rsp, 0, sizeof(rsp));
2154
2155 - if (min < hcon->le_conn_min_interval ||
2156 - max > hcon->le_conn_max_interval) {
2157 - BT_DBG("requested connection interval exceeds current bounds.");
2158 - err = -EINVAL;
2159 - } else {
2160 - err = hci_check_conn_params(min, max, latency, to_multiplier);
2161 - }
2162 -
2163 + err = hci_check_conn_params(min, max, latency, to_multiplier);
2164 if (err)
2165 rsp.result = cpu_to_le16(L2CAP_CONN_PARAM_REJECTED);
2166 else
2167 diff --git a/net/ipv4/raw_diag.c b/net/ipv4/raw_diag.c
2168 index c200065ef9a5..6367ecdf76c4 100644
2169 --- a/net/ipv4/raw_diag.c
2170 +++ b/net/ipv4/raw_diag.c
2171 @@ -23,9 +23,6 @@ raw_get_hashinfo(const struct inet_diag_req_v2 *r)
2172 return &raw_v6_hashinfo;
2173 #endif
2174 } else {
2175 - pr_warn_once("Unexpected inet family %d\n",
2176 - r->sdiag_family);
2177 - WARN_ON_ONCE(1);
2178 return ERR_PTR(-EINVAL);
2179 }
2180 }
2181 diff --git a/net/netfilter/nft_socket.c b/net/netfilter/nft_socket.c
2182 index d7f3776dfd71..637ce3e8c575 100644
2183 --- a/net/netfilter/nft_socket.c
2184 +++ b/net/netfilter/nft_socket.c
2185 @@ -47,9 +47,6 @@ static void nft_socket_eval(const struct nft_expr *expr,
2186 return;
2187 }
2188
2189 - /* So that subsequent socket matching not to require other lookups. */
2190 - skb->sk = sk;
2191 -
2192 switch(priv->key) {
2193 case NFT_SOCKET_TRANSPARENT:
2194 nft_reg_store8(dest, inet_sk_transparent(sk));
2195 @@ -66,6 +63,9 @@ static void nft_socket_eval(const struct nft_expr *expr,
2196 WARN_ON(1);
2197 regs->verdict.code = NFT_BREAK;
2198 }
2199 +
2200 + if (sk != skb->sk)
2201 + sock_gen_put(sk);
2202 }
2203
2204 static const struct nla_policy nft_socket_policy[NFTA_SOCKET_MAX + 1] = {
2205 diff --git a/net/rds/bind.c b/net/rds/bind.c
2206 index 0f4398e7f2a7..93e336535d3b 100644
2207 --- a/net/rds/bind.c
2208 +++ b/net/rds/bind.c
2209 @@ -1,5 +1,5 @@
2210 /*
2211 - * Copyright (c) 2006, 2018 Oracle and/or its affiliates. All rights reserved.
2212 + * Copyright (c) 2006, 2019 Oracle and/or its affiliates. All rights reserved.
2213 *
2214 * This software is available to you under a choice of one of two
2215 * licenses. You may choose to be licensed under the terms of the GNU
2216 @@ -239,34 +239,33 @@ int rds_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
2217 goto out;
2218 }
2219
2220 - sock_set_flag(sk, SOCK_RCU_FREE);
2221 - ret = rds_add_bound(rs, binding_addr, &port, scope_id);
2222 - if (ret)
2223 - goto out;
2224 -
2225 - if (rs->rs_transport) { /* previously bound */
2226 + /* The transport can be set using SO_RDS_TRANSPORT option before the
2227 + * socket is bound.
2228 + */
2229 + if (rs->rs_transport) {
2230 trans = rs->rs_transport;
2231 - if (trans->laddr_check(sock_net(sock->sk),
2232 + if (!trans->laddr_check ||
2233 + trans->laddr_check(sock_net(sock->sk),
2234 binding_addr, scope_id) != 0) {
2235 ret = -ENOPROTOOPT;
2236 - rds_remove_bound(rs);
2237 - } else {
2238 - ret = 0;
2239 + goto out;
2240 }
2241 - goto out;
2242 - }
2243 - trans = rds_trans_get_preferred(sock_net(sock->sk), binding_addr,
2244 - scope_id);
2245 - if (!trans) {
2246 - ret = -EADDRNOTAVAIL;
2247 - rds_remove_bound(rs);
2248 - pr_info_ratelimited("RDS: %s could not find a transport for %pI6c, load rds_tcp or rds_rdma?\n",
2249 - __func__, binding_addr);
2250 - goto out;
2251 + } else {
2252 + trans = rds_trans_get_preferred(sock_net(sock->sk),
2253 + binding_addr, scope_id);
2254 + if (!trans) {
2255 + ret = -EADDRNOTAVAIL;
2256 + pr_info_ratelimited("RDS: %s could not find a transport for %pI6c, load rds_tcp or rds_rdma?\n",
2257 + __func__, binding_addr);
2258 + goto out;
2259 + }
2260 + rs->rs_transport = trans;
2261 }
2262
2263 - rs->rs_transport = trans;
2264 - ret = 0;
2265 + sock_set_flag(sk, SOCK_RCU_FREE);
2266 + ret = rds_add_bound(rs, binding_addr, &port, scope_id);
2267 + if (ret)
2268 + rs->rs_transport = NULL;
2269
2270 out:
2271 release_sock(sk);
2272 diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c
2273 index be7cd140b2a3..b06cc5e50412 100644
2274 --- a/net/sched/sch_api.c
2275 +++ b/net/sched/sch_api.c
2276 @@ -1831,6 +1831,8 @@ static void tc_bind_tclass(struct Qdisc *q, u32 portid, u32 clid,
2277 cl = cops->find(q, portid);
2278 if (!cl)
2279 return;
2280 + if (!cops->tcf_block)
2281 + return;
2282 block = cops->tcf_block(q, cl, NULL);
2283 if (!block)
2284 return;
2285 diff --git a/sound/firewire/dice/dice-alesis.c b/sound/firewire/dice/dice-alesis.c
2286 index 218292bdace6..f5b325263b67 100644
2287 --- a/sound/firewire/dice/dice-alesis.c
2288 +++ b/sound/firewire/dice/dice-alesis.c
2289 @@ -15,7 +15,7 @@ alesis_io14_tx_pcm_chs[MAX_STREAMS][SND_DICE_RATE_MODE_COUNT] = {
2290
2291 static const unsigned int
2292 alesis_io26_tx_pcm_chs[MAX_STREAMS][SND_DICE_RATE_MODE_COUNT] = {
2293 - {10, 10, 8}, /* Tx0 = Analog + S/PDIF. */
2294 + {10, 10, 4}, /* Tx0 = Analog + S/PDIF. */
2295 {16, 8, 0}, /* Tx1 = ADAT1 + ADAT2. */
2296 };
2297
2298 diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
2299 index c3e3d80ff720..0b24c5ce2fd6 100644
2300 --- a/sound/pci/hda/hda_intel.c
2301 +++ b/sound/pci/hda/hda_intel.c
2302 @@ -2662,8 +2662,7 @@ static const struct pci_device_id azx_ids[] = {
2303 AZX_DCAPS_PM_RUNTIME },
2304 /* AMD Raven */
2305 { PCI_DEVICE(0x1022, 0x15e3),
2306 - .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_SB |
2307 - AZX_DCAPS_PM_RUNTIME },
2308 + .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_AMD_SB },
2309 /* ATI HDMI */
2310 { PCI_DEVICE(0x1002, 0x0002),
2311 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS },
2312 diff --git a/sound/pci/hda/patch_analog.c b/sound/pci/hda/patch_analog.c
2313 index fd476fb40e1b..677dcc0aca97 100644
2314 --- a/sound/pci/hda/patch_analog.c
2315 +++ b/sound/pci/hda/patch_analog.c
2316 @@ -370,6 +370,7 @@ static const struct hda_fixup ad1986a_fixups[] = {
2317
2318 static const struct snd_pci_quirk ad1986a_fixup_tbl[] = {
2319 SND_PCI_QUIRK(0x103c, 0x30af, "HP B2800", AD1986A_FIXUP_LAPTOP_IMIC),
2320 + SND_PCI_QUIRK(0x1043, 0x1153, "ASUS M9V", AD1986A_FIXUP_LAPTOP_IMIC),
2321 SND_PCI_QUIRK(0x1043, 0x1443, "ASUS Z99He", AD1986A_FIXUP_EAPD),
2322 SND_PCI_QUIRK(0x1043, 0x1447, "ASUS A8JN", AD1986A_FIXUP_EAPD),
2323 SND_PCI_QUIRK_MASK(0x1043, 0xff00, 0x8100, "ASUS P5", AD1986A_FIXUP_3STACK),
2324 diff --git a/sound/soc/fsl/fsl_ssi.c b/sound/soc/fsl/fsl_ssi.c
2325 index 0a648229e643..09b2967befd9 100644
2326 --- a/sound/soc/fsl/fsl_ssi.c
2327 +++ b/sound/soc/fsl/fsl_ssi.c
2328 @@ -1439,8 +1439,10 @@ static int fsl_ssi_probe_from_dt(struct fsl_ssi *ssi)
2329 * different name to register the device.
2330 */
2331 if (!ssi->card_name[0] && of_get_property(np, "codec-handle", NULL)) {
2332 - sprop = of_get_property(of_find_node_by_path("/"),
2333 - "compatible", NULL);
2334 + struct device_node *root = of_find_node_by_path("/");
2335 +
2336 + sprop = of_get_property(root, "compatible", NULL);
2337 + of_node_put(root);
2338 /* Strip "fsl," in the compatible name if applicable */
2339 p = strrchr(sprop, ',');
2340 if (p)
2341 diff --git a/sound/soc/intel/boards/cht_bsw_max98090_ti.c b/sound/soc/intel/boards/cht_bsw_max98090_ti.c
2342 index 08a5152e635a..e7620017e725 100644
2343 --- a/sound/soc/intel/boards/cht_bsw_max98090_ti.c
2344 +++ b/sound/soc/intel/boards/cht_bsw_max98090_ti.c
2345 @@ -42,6 +42,7 @@ struct cht_mc_private {
2346 struct clk *mclk;
2347 struct snd_soc_jack jack;
2348 bool ts3a227e_present;
2349 + int quirks;
2350 };
2351
2352 static int platform_clock_control(struct snd_soc_dapm_widget *w,
2353 @@ -53,6 +54,10 @@ static int platform_clock_control(struct snd_soc_dapm_widget *w,
2354 struct cht_mc_private *ctx = snd_soc_card_get_drvdata(card);
2355 int ret;
2356
2357 + /* See the comment in snd_cht_mc_probe() */
2358 + if (ctx->quirks & QUIRK_PMC_PLT_CLK_0)
2359 + return 0;
2360 +
2361 codec_dai = snd_soc_card_get_codec_dai(card, CHT_CODEC_DAI);
2362 if (!codec_dai) {
2363 dev_err(card->dev, "Codec dai not found; Unable to set platform clock\n");
2364 @@ -222,6 +227,10 @@ static int cht_codec_init(struct snd_soc_pcm_runtime *runtime)
2365 "jack detection gpios not added, error %d\n", ret);
2366 }
2367
2368 + /* See the comment in snd_cht_mc_probe() */
2369 + if (ctx->quirks & QUIRK_PMC_PLT_CLK_0)
2370 + return 0;
2371 +
2372 /*
2373 * The firmware might enable the clock at
2374 * boot (this information may or may not
2375 @@ -420,16 +429,15 @@ static int snd_cht_mc_probe(struct platform_device *pdev)
2376 int ret_val = 0;
2377 struct cht_mc_private *drv;
2378 const char *mclk_name;
2379 - int quirks = 0;
2380 -
2381 - dmi_id = dmi_first_match(cht_max98090_quirk_table);
2382 - if (dmi_id)
2383 - quirks = (unsigned long)dmi_id->driver_data;
2384
2385 drv = devm_kzalloc(&pdev->dev, sizeof(*drv), GFP_KERNEL);
2386 if (!drv)
2387 return -ENOMEM;
2388
2389 + dmi_id = dmi_first_match(cht_max98090_quirk_table);
2390 + if (dmi_id)
2391 + drv->quirks = (unsigned long)dmi_id->driver_data;
2392 +
2393 drv->ts3a227e_present = acpi_dev_found("104C227E");
2394 if (!drv->ts3a227e_present) {
2395 /* no need probe TI jack detection chip */
2396 @@ -446,7 +454,7 @@ static int snd_cht_mc_probe(struct platform_device *pdev)
2397 snd_soc_card_cht.dev = &pdev->dev;
2398 snd_soc_card_set_drvdata(&snd_soc_card_cht, drv);
2399
2400 - if (quirks & QUIRK_PMC_PLT_CLK_0)
2401 + if (drv->quirks & QUIRK_PMC_PLT_CLK_0)
2402 mclk_name = "pmc_plt_clk_0";
2403 else
2404 mclk_name = "pmc_plt_clk_3";
2405 @@ -459,6 +467,21 @@ static int snd_cht_mc_probe(struct platform_device *pdev)
2406 return PTR_ERR(drv->mclk);
2407 }
2408
2409 + /*
2410 + * Boards which have the MAX98090's clk connected to clk_0 do not seem
2411 + * to like it if we muck with the clock. If we disable the clock when
2412 + * it is unused we get "max98090 i2c-193C9890:00: PLL unlocked" errors
2413 + * and the PLL never seems to lock again.
2414 + * So for these boards we enable it here once and leave it at that.
2415 + */
2416 + if (drv->quirks & QUIRK_PMC_PLT_CLK_0) {
2417 + ret_val = clk_prepare_enable(drv->mclk);
2418 + if (ret_val < 0) {
2419 + dev_err(&pdev->dev, "MCLK enable error: %d\n", ret_val);
2420 + return ret_val;
2421 + }
2422 + }
2423 +
2424 ret_val = devm_snd_soc_register_card(&pdev->dev, &snd_soc_card_cht);
2425 if (ret_val) {
2426 dev_err(&pdev->dev,
2427 @@ -469,11 +492,23 @@ static int snd_cht_mc_probe(struct platform_device *pdev)
2428 return ret_val;
2429 }
2430
2431 +static int snd_cht_mc_remove(struct platform_device *pdev)
2432 +{
2433 + struct snd_soc_card *card = platform_get_drvdata(pdev);
2434 + struct cht_mc_private *ctx = snd_soc_card_get_drvdata(card);
2435 +
2436 + if (ctx->quirks & QUIRK_PMC_PLT_CLK_0)
2437 + clk_disable_unprepare(ctx->mclk);
2438 +
2439 + return 0;
2440 +}
2441 +
2442 static struct platform_driver snd_cht_mc_driver = {
2443 .driver = {
2444 .name = "cht-bsw-max98090",
2445 },
2446 .probe = snd_cht_mc_probe,
2447 + .remove = snd_cht_mc_remove,
2448 };
2449
2450 module_platform_driver(snd_cht_mc_driver)
2451 diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
2452 index d71e01954975..60d00091f64b 100644
2453 --- a/sound/usb/quirks.c
2454 +++ b/sound/usb/quirks.c
2455 @@ -1449,6 +1449,8 @@ u64 snd_usb_interface_dsd_format_quirks(struct snd_usb_audio *chip,
2456 case 0x152a: /* Thesycon devices */
2457 case 0x25ce: /* Mytek devices */
2458 case 0x2ab6: /* T+A devices */
2459 + case 0x3842: /* EVGA */
2460 + case 0xc502: /* HiBy devices */
2461 if (fp->dsd_raw)
2462 return SNDRV_PCM_FMTBIT_DSD_U32_BE;
2463 break;
2464 diff --git a/tools/lib/bpf/bpf.c b/tools/lib/bpf/bpf.c
2465 index dd0b68d1f4be..482025b72839 100644
2466 --- a/tools/lib/bpf/bpf.c
2467 +++ b/tools/lib/bpf/bpf.c
2468 @@ -75,6 +75,17 @@ static inline int sys_bpf(enum bpf_cmd cmd, union bpf_attr *attr,
2469 return syscall(__NR_bpf, cmd, attr, size);
2470 }
2471
2472 +static inline int sys_bpf_prog_load(union bpf_attr *attr, unsigned int size)
2473 +{
2474 + int fd;
2475 +
2476 + do {
2477 + fd = sys_bpf(BPF_PROG_LOAD, attr, size);
2478 + } while (fd < 0 && errno == EAGAIN);
2479 +
2480 + return fd;
2481 +}
2482 +
2483 int bpf_create_map_xattr(const struct bpf_create_map_attr *create_attr)
2484 {
2485 __u32 name_len = create_attr->name ? strlen(create_attr->name) : 0;
2486 @@ -218,7 +229,7 @@ int bpf_load_program_xattr(const struct bpf_load_program_attr *load_attr,
2487 memcpy(attr.prog_name, load_attr->name,
2488 min(name_len, BPF_OBJ_NAME_LEN - 1));
2489
2490 - fd = sys_bpf(BPF_PROG_LOAD, &attr, sizeof(attr));
2491 + fd = sys_bpf_prog_load(&attr, sizeof(attr));
2492 if (fd >= 0 || !log_buf || !log_buf_sz)
2493 return fd;
2494
2495 @@ -227,7 +238,7 @@ int bpf_load_program_xattr(const struct bpf_load_program_attr *load_attr,
2496 attr.log_size = log_buf_sz;
2497 attr.log_level = 1;
2498 log_buf[0] = 0;
2499 - return sys_bpf(BPF_PROG_LOAD, &attr, sizeof(attr));
2500 + return sys_bpf_prog_load(&attr, sizeof(attr));
2501 }
2502
2503 int bpf_load_program(enum bpf_prog_type type, const struct bpf_insn *insns,
2504 @@ -268,7 +279,7 @@ int bpf_verify_program(enum bpf_prog_type type, const struct bpf_insn *insns,
2505 attr.kern_version = kern_version;
2506 attr.prog_flags = strict_alignment ? BPF_F_STRICT_ALIGNMENT : 0;
2507
2508 - return sys_bpf(BPF_PROG_LOAD, &attr, sizeof(attr));
2509 + return sys_bpf_prog_load(&attr, sizeof(attr));
2510 }
2511
2512 int bpf_map_update_elem(int fd, const void *key, const void *value,
2513 diff --git a/tools/objtool/Makefile b/tools/objtool/Makefile
2514 index 88158239622b..20f67fcf378d 100644
2515 --- a/tools/objtool/Makefile
2516 +++ b/tools/objtool/Makefile
2517 @@ -35,7 +35,7 @@ INCLUDES := -I$(srctree)/tools/include \
2518 -I$(srctree)/tools/arch/$(HOSTARCH)/include/uapi \
2519 -I$(srctree)/tools/objtool/arch/$(ARCH)/include
2520 WARNINGS := $(EXTRA_WARNINGS) -Wno-switch-default -Wno-switch-enum -Wno-packed
2521 -CFLAGS += -Werror $(WARNINGS) $(KBUILD_HOSTCFLAGS) -g $(INCLUDES) $(LIBELF_FLAGS)
2522 +CFLAGS := -Werror $(WARNINGS) $(KBUILD_HOSTCFLAGS) -g $(INCLUDES) $(LIBELF_FLAGS)
2523 LDFLAGS += $(LIBELF_LIBS) $(LIBSUBCMD) $(KBUILD_HOSTLDFLAGS)
2524
2525 # Allow old libelf to be used: