Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3472 - (hide 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 niro 3472 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: