Magellan Linux

Annotation of /trunk/kernel-magellan/patches-4.20/0102-4.20.3-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3279 - (hide annotations) (download)
Mon Mar 4 10:35:51 2019 UTC (5 years, 2 months ago) by niro
File size: 65079 byte(s)
linux-4.20.3
1 niro 3279 diff --git a/Makefile b/Makefile
2     index 4ba3dd0bf35d..3b9e4658d31f 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,7 +1,7 @@
6     # SPDX-License-Identifier: GPL-2.0
7     VERSION = 4
8     PATCHLEVEL = 20
9     -SUBLEVEL = 2
10     +SUBLEVEL = 3
11     EXTRAVERSION =
12     NAME = Shy Crocodile
13    
14     diff --git a/arch/arm/mach-davinci/board-da830-evm.c b/arch/arm/mach-davinci/board-da830-evm.c
15     index 7d8ab36ff83d..b3a3f5a59b5c 100644
16     --- a/arch/arm/mach-davinci/board-da830-evm.c
17     +++ b/arch/arm/mach-davinci/board-da830-evm.c
18     @@ -207,9 +207,9 @@ static struct gpiod_lookup_table mmc_gpios_table = {
19     .dev_id = "da830-mmc.0",
20     .table = {
21     /* gpio chip 1 contains gpio range 32-63 */
22     - GPIO_LOOKUP("davinci_gpio.0", DA830_MMCSD_CD_PIN, "cd",
23     + GPIO_LOOKUP("davinci_gpio", DA830_MMCSD_CD_PIN, "cd",
24     GPIO_ACTIVE_LOW),
25     - GPIO_LOOKUP("davinci_gpio.0", DA830_MMCSD_WP_PIN, "wp",
26     + GPIO_LOOKUP("davinci_gpio", DA830_MMCSD_WP_PIN, "wp",
27     GPIO_ACTIVE_LOW),
28     },
29     };
30     diff --git a/arch/arm/mach-davinci/board-da850-evm.c b/arch/arm/mach-davinci/board-da850-evm.c
31     index e1a949b47306..bf2549e1894b 100644
32     --- a/arch/arm/mach-davinci/board-da850-evm.c
33     +++ b/arch/arm/mach-davinci/board-da850-evm.c
34     @@ -780,9 +780,9 @@ static struct gpiod_lookup_table mmc_gpios_table = {
35     .dev_id = "da830-mmc.0",
36     .table = {
37     /* gpio chip 2 contains gpio range 64-95 */
38     - GPIO_LOOKUP("davinci_gpio.0", DA850_MMCSD_CD_PIN, "cd",
39     + GPIO_LOOKUP("davinci_gpio", DA850_MMCSD_CD_PIN, "cd",
40     GPIO_ACTIVE_LOW),
41     - GPIO_LOOKUP("davinci_gpio.0", DA850_MMCSD_WP_PIN, "wp",
42     + GPIO_LOOKUP("davinci_gpio", DA850_MMCSD_WP_PIN, "wp",
43     GPIO_ACTIVE_HIGH),
44     },
45     };
46     diff --git a/arch/arm/mach-davinci/board-dm355-evm.c b/arch/arm/mach-davinci/board-dm355-evm.c
47     index f53a461a606f..f7fa960c23e3 100644
48     --- a/arch/arm/mach-davinci/board-dm355-evm.c
49     +++ b/arch/arm/mach-davinci/board-dm355-evm.c
50     @@ -117,9 +117,9 @@ static struct platform_device davinci_nand_device = {
51     static struct gpiod_lookup_table i2c_recovery_gpiod_table = {
52     .dev_id = "i2c_davinci.1",
53     .table = {
54     - GPIO_LOOKUP("davinci_gpio.0", DM355_I2C_SDA_PIN, "sda",
55     + GPIO_LOOKUP("davinci_gpio", DM355_I2C_SDA_PIN, "sda",
56     GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN),
57     - GPIO_LOOKUP("davinci_gpio.0", DM355_I2C_SCL_PIN, "scl",
58     + GPIO_LOOKUP("davinci_gpio", DM355_I2C_SCL_PIN, "scl",
59     GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN),
60     },
61     };
62     diff --git a/arch/arm/mach-davinci/board-dm644x-evm.c b/arch/arm/mach-davinci/board-dm644x-evm.c
63     index e4a8f9225d16..f752d828e42f 100644
64     --- a/arch/arm/mach-davinci/board-dm644x-evm.c
65     +++ b/arch/arm/mach-davinci/board-dm644x-evm.c
66     @@ -638,9 +638,9 @@ static struct i2c_board_info __initdata i2c_info[] = {
67     static struct gpiod_lookup_table i2c_recovery_gpiod_table = {
68     .dev_id = "i2c_davinci.1",
69     .table = {
70     - GPIO_LOOKUP("davinci_gpio.0", DM644X_I2C_SDA_PIN, "sda",
71     + GPIO_LOOKUP("davinci_gpio", DM644X_I2C_SDA_PIN, "sda",
72     GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN),
73     - GPIO_LOOKUP("davinci_gpio.0", DM644X_I2C_SCL_PIN, "scl",
74     + GPIO_LOOKUP("davinci_gpio", DM644X_I2C_SCL_PIN, "scl",
75     GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN),
76     },
77     };
78     diff --git a/arch/arm/mach-davinci/board-omapl138-hawk.c b/arch/arm/mach-davinci/board-omapl138-hawk.c
79     index 8e8d51f4a276..94c4f126ef86 100644
80     --- a/arch/arm/mach-davinci/board-omapl138-hawk.c
81     +++ b/arch/arm/mach-davinci/board-omapl138-hawk.c
82     @@ -134,9 +134,9 @@ static const short hawk_mmcsd0_pins[] = {
83     static struct gpiod_lookup_table mmc_gpios_table = {
84     .dev_id = "da830-mmc.0",
85     .table = {
86     - GPIO_LOOKUP("davinci_gpio.0", DA850_HAWK_MMCSD_CD_PIN, "cd",
87     + GPIO_LOOKUP("davinci_gpio", DA850_HAWK_MMCSD_CD_PIN, "cd",
88     GPIO_ACTIVE_LOW),
89     - GPIO_LOOKUP("davinci_gpio.0", DA850_HAWK_MMCSD_WP_PIN, "wp",
90     + GPIO_LOOKUP("davinci_gpio", DA850_HAWK_MMCSD_WP_PIN, "wp",
91     GPIO_ACTIVE_LOW),
92     },
93     };
94     diff --git a/arch/powerpc/kernel/signal_32.c b/arch/powerpc/kernel/signal_32.c
95     index fd59fef9931b..1355fab5f676 100644
96     --- a/arch/powerpc/kernel/signal_32.c
97     +++ b/arch/powerpc/kernel/signal_32.c
98     @@ -1158,11 +1158,11 @@ SYSCALL_DEFINE0(rt_sigreturn)
99     {
100     struct rt_sigframe __user *rt_sf;
101     struct pt_regs *regs = current_pt_regs();
102     + int tm_restore = 0;
103     #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
104     struct ucontext __user *uc_transact;
105     unsigned long msr_hi;
106     unsigned long tmp;
107     - int tm_restore = 0;
108     #endif
109     /* Always make any pending restarted system calls return -EINTR */
110     current->restart_block.fn = do_no_restart_syscall;
111     @@ -1210,11 +1210,19 @@ SYSCALL_DEFINE0(rt_sigreturn)
112     goto bad;
113     }
114     }
115     - if (!tm_restore)
116     - /* Fall through, for non-TM restore */
117     + if (!tm_restore) {
118     + /*
119     + * Unset regs->msr because ucontext MSR TS is not
120     + * set, and recheckpoint was not called. This avoid
121     + * hitting a TM Bad thing at RFID
122     + */
123     + regs->msr &= ~MSR_TS_MASK;
124     + }
125     + /* Fall through, for non-TM restore */
126     #endif
127     - if (do_setcontext(&rt_sf->uc, regs, 1))
128     - goto bad;
129     + if (!tm_restore)
130     + if (do_setcontext(&rt_sf->uc, regs, 1))
131     + goto bad;
132    
133     /*
134     * It's not clear whether or why it is desirable to save the
135     diff --git a/arch/powerpc/kernel/signal_64.c b/arch/powerpc/kernel/signal_64.c
136     index bbd1c73243d7..6f70d1b4bf36 100644
137     --- a/arch/powerpc/kernel/signal_64.c
138     +++ b/arch/powerpc/kernel/signal_64.c
139     @@ -756,11 +756,23 @@ SYSCALL_DEFINE0(rt_sigreturn)
140     &uc_transact->uc_mcontext))
141     goto badframe;
142     }
143     - else
144     - /* Fall through, for non-TM restore */
145     #endif
146     - if (restore_sigcontext(current, NULL, 1, &uc->uc_mcontext))
147     - goto badframe;
148     + /* Fall through, for non-TM restore */
149     + if (!MSR_TM_ACTIVE(msr)) {
150     + /*
151     + * Unset MSR[TS] on the thread regs since MSR from user
152     + * context does not have MSR active, and recheckpoint was
153     + * not called since restore_tm_sigcontexts() was not called
154     + * also.
155     + *
156     + * If not unsetting it, the code can RFID to userspace with
157     + * MSR[TS] set, but without CPU in the proper state,
158     + * causing a TM bad thing.
159     + */
160     + current->thread.regs->msr &= ~MSR_TS_MASK;
161     + if (restore_sigcontext(current, NULL, 1, &uc->uc_mcontext))
162     + goto badframe;
163     + }
164    
165     if (restore_altstack(&uc->uc_stack))
166     goto badframe;
167     diff --git a/arch/x86/kernel/cpu/bugs.c b/arch/x86/kernel/cpu/bugs.c
168     index 362f3cde6a31..7b135796813f 100644
169     --- a/arch/x86/kernel/cpu/bugs.c
170     +++ b/arch/x86/kernel/cpu/bugs.c
171     @@ -213,7 +213,7 @@ static enum spectre_v2_mitigation spectre_v2_enabled __ro_after_init =
172     static enum spectre_v2_user_mitigation spectre_v2_user __ro_after_init =
173     SPECTRE_V2_USER_NONE;
174    
175     -#ifdef RETPOLINE
176     +#ifdef CONFIG_RETPOLINE
177     static bool spectre_v2_bad_module;
178    
179     bool retpoline_module_ok(bool has_retpoline)
180     diff --git a/drivers/acpi/arm64/iort.c b/drivers/acpi/arm64/iort.c
181     index 70f4e80b9246..a1a22e9c0328 100644
182     --- a/drivers/acpi/arm64/iort.c
183     +++ b/drivers/acpi/arm64/iort.c
184     @@ -951,9 +951,10 @@ static int rc_dma_get_range(struct device *dev, u64 *size)
185     {
186     struct acpi_iort_node *node;
187     struct acpi_iort_root_complex *rc;
188     + struct pci_bus *pbus = to_pci_dev(dev)->bus;
189    
190     node = iort_scan_node(ACPI_IORT_NODE_PCI_ROOT_COMPLEX,
191     - iort_match_node_callback, dev);
192     + iort_match_node_callback, &pbus->dev);
193     if (!node || node->revision < 1)
194     return -ENODEV;
195    
196     diff --git a/drivers/acpi/pmic/intel_pmic_xpower.c b/drivers/acpi/pmic/intel_pmic_xpower.c
197     index 2579675b7082..e7c0006e6602 100644
198     --- a/drivers/acpi/pmic/intel_pmic_xpower.c
199     +++ b/drivers/acpi/pmic/intel_pmic_xpower.c
200     @@ -20,8 +20,11 @@
201     #define GPI1_LDO_ON (3 << 0)
202     #define GPI1_LDO_OFF (4 << 0)
203    
204     -#define AXP288_ADC_TS_PIN_GPADC 0xf2
205     -#define AXP288_ADC_TS_PIN_ON 0xf3
206     +#define AXP288_ADC_TS_CURRENT_ON_OFF_MASK GENMASK(1, 0)
207     +#define AXP288_ADC_TS_CURRENT_OFF (0 << 0)
208     +#define AXP288_ADC_TS_CURRENT_ON_WHEN_CHARGING (1 << 0)
209     +#define AXP288_ADC_TS_CURRENT_ON_ONDEMAND (2 << 0)
210     +#define AXP288_ADC_TS_CURRENT_ON (3 << 0)
211    
212     static struct pmic_table power_table[] = {
213     {
214     @@ -212,22 +215,44 @@ out:
215     */
216     static int intel_xpower_pmic_get_raw_temp(struct regmap *regmap, int reg)
217     {
218     + int ret, adc_ts_pin_ctrl;
219     u8 buf[2];
220     - int ret;
221    
222     - ret = regmap_write(regmap, AXP288_ADC_TS_PIN_CTRL,
223     - AXP288_ADC_TS_PIN_GPADC);
224     + /*
225     + * The current-source used for the battery temp-sensor (TS) is shared
226     + * with the GPADC. For proper fuel-gauge and charger operation the TS
227     + * current-source needs to be permanently on. But to read the GPADC we
228     + * need to temporary switch the TS current-source to ondemand, so that
229     + * the GPADC can use it, otherwise we will always read an all 0 value.
230     + *
231     + * Note that the switching from on to on-ondemand is not necessary
232     + * when the TS current-source is off (this happens on devices which
233     + * do not use the TS-pin).
234     + */
235     + ret = regmap_read(regmap, AXP288_ADC_TS_PIN_CTRL, &adc_ts_pin_ctrl);
236     if (ret)
237     return ret;
238    
239     - /* After switching to the GPADC pin give things some time to settle */
240     - usleep_range(6000, 10000);
241     + if (adc_ts_pin_ctrl & AXP288_ADC_TS_CURRENT_ON_OFF_MASK) {
242     + ret = regmap_update_bits(regmap, AXP288_ADC_TS_PIN_CTRL,
243     + AXP288_ADC_TS_CURRENT_ON_OFF_MASK,
244     + AXP288_ADC_TS_CURRENT_ON_ONDEMAND);
245     + if (ret)
246     + return ret;
247     +
248     + /* Wait a bit after switching the current-source */
249     + usleep_range(6000, 10000);
250     + }
251    
252     ret = regmap_bulk_read(regmap, AXP288_GP_ADC_H, buf, 2);
253     if (ret == 0)
254     ret = (buf[0] << 4) + ((buf[1] >> 4) & 0x0f);
255    
256     - regmap_write(regmap, AXP288_ADC_TS_PIN_CTRL, AXP288_ADC_TS_PIN_ON);
257     + if (adc_ts_pin_ctrl & AXP288_ADC_TS_CURRENT_ON_OFF_MASK) {
258     + regmap_update_bits(regmap, AXP288_ADC_TS_PIN_CTRL,
259     + AXP288_ADC_TS_CURRENT_ON_OFF_MASK,
260     + AXP288_ADC_TS_CURRENT_ON);
261     + }
262    
263     return ret;
264     }
265     diff --git a/drivers/acpi/power.c b/drivers/acpi/power.c
266     index 1b475bc1ae16..665e93ca0b40 100644
267     --- a/drivers/acpi/power.c
268     +++ b/drivers/acpi/power.c
269     @@ -131,6 +131,23 @@ void acpi_power_resources_list_free(struct list_head *list)
270     }
271     }
272    
273     +static bool acpi_power_resource_is_dup(union acpi_object *package,
274     + unsigned int start, unsigned int i)
275     +{
276     + acpi_handle rhandle, dup;
277     + unsigned int j;
278     +
279     + /* The caller is expected to check the package element types */
280     + rhandle = package->package.elements[i].reference.handle;
281     + for (j = start; j < i; j++) {
282     + dup = package->package.elements[j].reference.handle;
283     + if (dup == rhandle)
284     + return true;
285     + }
286     +
287     + return false;
288     +}
289     +
290     int acpi_extract_power_resources(union acpi_object *package, unsigned int start,
291     struct list_head *list)
292     {
293     @@ -150,6 +167,11 @@ int acpi_extract_power_resources(union acpi_object *package, unsigned int start,
294     err = -ENODEV;
295     break;
296     }
297     +
298     + /* Some ACPI tables contain duplicate power resource references */
299     + if (acpi_power_resource_is_dup(package, start, i))
300     + continue;
301     +
302     err = acpi_add_power_resource(rhandle);
303     if (err)
304     break;
305     diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
306     index 8e5140bbf241..1e92b61d0bd5 100644
307     --- a/drivers/block/rbd.c
308     +++ b/drivers/block/rbd.c
309     @@ -5986,7 +5986,6 @@ static ssize_t do_rbd_remove(struct bus_type *bus,
310     struct list_head *tmp;
311     int dev_id;
312     char opt_buf[6];
313     - bool already = false;
314     bool force = false;
315     int ret;
316    
317     @@ -6019,13 +6018,13 @@ static ssize_t do_rbd_remove(struct bus_type *bus,
318     spin_lock_irq(&rbd_dev->lock);
319     if (rbd_dev->open_count && !force)
320     ret = -EBUSY;
321     - else
322     - already = test_and_set_bit(RBD_DEV_FLAG_REMOVING,
323     - &rbd_dev->flags);
324     + else if (test_and_set_bit(RBD_DEV_FLAG_REMOVING,
325     + &rbd_dev->flags))
326     + ret = -EINPROGRESS;
327     spin_unlock_irq(&rbd_dev->lock);
328     }
329     spin_unlock(&rbd_dev_list_lock);
330     - if (ret < 0 || already)
331     + if (ret)
332     return ret;
333    
334     if (force) {
335     diff --git a/drivers/cpufreq/scmi-cpufreq.c b/drivers/cpufreq/scmi-cpufreq.c
336     index 50b1551ba894..242c3370544e 100644
337     --- a/drivers/cpufreq/scmi-cpufreq.c
338     +++ b/drivers/cpufreq/scmi-cpufreq.c
339     @@ -52,9 +52,9 @@ scmi_cpufreq_set_target(struct cpufreq_policy *policy, unsigned int index)
340     int ret;
341     struct scmi_data *priv = policy->driver_data;
342     struct scmi_perf_ops *perf_ops = handle->perf_ops;
343     - u64 freq = policy->freq_table[index].frequency * 1000;
344     + u64 freq = policy->freq_table[index].frequency;
345    
346     - ret = perf_ops->freq_set(handle, priv->domain_id, freq, false);
347     + ret = perf_ops->freq_set(handle, priv->domain_id, freq * 1000, false);
348     if (!ret)
349     arch_set_freq_scale(policy->related_cpus, freq,
350     policy->cpuinfo.max_freq);
351     @@ -176,7 +176,7 @@ static int scmi_cpufreq_init(struct cpufreq_policy *policy)
352     out_free_priv:
353     kfree(priv);
354     out_free_opp:
355     - dev_pm_opp_cpumask_remove_table(policy->cpus);
356     + dev_pm_opp_remove_all_dynamic(cpu_dev);
357    
358     return ret;
359     }
360     @@ -188,7 +188,7 @@ static int scmi_cpufreq_exit(struct cpufreq_policy *policy)
361     cpufreq_cooling_unregister(priv->cdev);
362     dev_pm_opp_free_cpufreq_table(priv->cpu_dev, &policy->freq_table);
363     kfree(priv);
364     - dev_pm_opp_cpumask_remove_table(policy->related_cpus);
365     + dev_pm_opp_remove_all_dynamic(priv->cpu_dev);
366    
367     return 0;
368     }
369     diff --git a/drivers/cpufreq/scpi-cpufreq.c b/drivers/cpufreq/scpi-cpufreq.c
370     index 87a98ec77773..99449738faa4 100644
371     --- a/drivers/cpufreq/scpi-cpufreq.c
372     +++ b/drivers/cpufreq/scpi-cpufreq.c
373     @@ -177,7 +177,7 @@ out_free_cpufreq_table:
374     out_free_priv:
375     kfree(priv);
376     out_free_opp:
377     - dev_pm_opp_cpumask_remove_table(policy->cpus);
378     + dev_pm_opp_remove_all_dynamic(cpu_dev);
379    
380     return ret;
381     }
382     @@ -190,7 +190,7 @@ static int scpi_cpufreq_exit(struct cpufreq_policy *policy)
383     clk_put(priv->clk);
384     dev_pm_opp_free_cpufreq_table(priv->cpu_dev, &policy->freq_table);
385     kfree(priv);
386     - dev_pm_opp_cpumask_remove_table(policy->related_cpus);
387     + dev_pm_opp_remove_all_dynamic(priv->cpu_dev);
388    
389     return 0;
390     }
391     diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
392     index 74b611e8a1b1..c79517dc8804 100644
393     --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
394     +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
395     @@ -864,6 +864,7 @@ static const struct pci_device_id pciidlist[] = {
396     /* VEGAM */
397     {0x1002, 0x694C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VEGAM},
398     {0x1002, 0x694E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VEGAM},
399     + {0x1002, 0x694F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VEGAM},
400     /* Vega 10 */
401     {0x1002, 0x6860, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VEGA10},
402     {0x1002, 0x6861, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VEGA10},
403     diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
404     index 5a6edf65c9ea..3118ae0e7a87 100644
405     --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
406     +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
407     @@ -645,22 +645,36 @@ static void s3_handle_mst(struct drm_device *dev, bool suspend)
408     {
409     struct amdgpu_dm_connector *aconnector;
410     struct drm_connector *connector;
411     + struct drm_dp_mst_topology_mgr *mgr;
412     + int ret;
413     + bool need_hotplug = false;
414    
415     drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
416    
417     - list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
418     - aconnector = to_amdgpu_dm_connector(connector);
419     - if (aconnector->dc_link->type == dc_connection_mst_branch &&
420     - !aconnector->mst_port) {
421     + list_for_each_entry(connector, &dev->mode_config.connector_list,
422     + head) {
423     + aconnector = to_amdgpu_dm_connector(connector);
424     + if (aconnector->dc_link->type != dc_connection_mst_branch ||
425     + aconnector->mst_port)
426     + continue;
427    
428     - if (suspend)
429     - drm_dp_mst_topology_mgr_suspend(&aconnector->mst_mgr);
430     - else
431     - drm_dp_mst_topology_mgr_resume(&aconnector->mst_mgr);
432     - }
433     + mgr = &aconnector->mst_mgr;
434     +
435     + if (suspend) {
436     + drm_dp_mst_topology_mgr_suspend(mgr);
437     + } else {
438     + ret = drm_dp_mst_topology_mgr_resume(mgr);
439     + if (ret < 0) {
440     + drm_dp_mst_topology_mgr_set_mst(mgr, false);
441     + need_hotplug = true;
442     + }
443     + }
444     }
445    
446     drm_modeset_unlock(&dev->mode_config.connection_mutex);
447     +
448     + if (need_hotplug)
449     + drm_kms_helper_hotplug_event(dev);
450     }
451    
452     static int dm_hw_init(void *handle)
453     @@ -816,7 +830,6 @@ static int dm_resume(void *handle)
454     struct drm_plane_state *new_plane_state;
455     struct dm_plane_state *dm_new_plane_state;
456     enum dc_connection_type new_connection_type = dc_connection_none;
457     - int ret;
458     int i;
459    
460     /* power on hardware */
461     @@ -889,13 +902,13 @@ static int dm_resume(void *handle)
462     }
463     }
464    
465     - ret = drm_atomic_helper_resume(ddev, dm->cached_state);
466     + drm_atomic_helper_resume(ddev, dm->cached_state);
467    
468     dm->cached_state = NULL;
469    
470     amdgpu_dm_irq_resume_late(adev);
471    
472     - return ret;
473     + return 0;
474     }
475    
476     static const struct amd_ip_funcs amdgpu_dm_funcs = {
477     diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link.c b/drivers/gpu/drm/amd/display/dc/core/dc_link.c
478     index 5da2186b3615..5141c1401889 100644
479     --- a/drivers/gpu/drm/amd/display/dc/core/dc_link.c
480     +++ b/drivers/gpu/drm/amd/display/dc/core/dc_link.c
481     @@ -2617,11 +2617,11 @@ void core_link_disable_stream(struct pipe_ctx *pipe_ctx, int option)
482     {
483     struct dc *core_dc = pipe_ctx->stream->ctx->dc;
484    
485     + core_dc->hwss.blank_stream(pipe_ctx);
486     +
487     if (pipe_ctx->stream->signal == SIGNAL_TYPE_DISPLAY_PORT_MST)
488     deallocate_mst_payload(pipe_ctx);
489    
490     - core_dc->hwss.blank_stream(pipe_ctx);
491     -
492     core_dc->hwss.disable_stream(pipe_ctx, option);
493    
494     disable_link(pipe_ctx->stream->sink->link, pipe_ctx->stream->signal);
495     diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
496     index 9d64f874f965..b10ed61526a5 100644
497     --- a/drivers/gpu/drm/drm_fb_helper.c
498     +++ b/drivers/gpu/drm/drm_fb_helper.c
499     @@ -1621,6 +1621,64 @@ static bool drm_fb_pixel_format_equal(const struct fb_var_screeninfo *var_1,
500     var_1->transp.msb_right == var_2->transp.msb_right;
501     }
502    
503     +static void drm_fb_helper_fill_pixel_fmt(struct fb_var_screeninfo *var,
504     + u8 depth)
505     +{
506     + switch (depth) {
507     + case 8:
508     + var->red.offset = 0;
509     + var->green.offset = 0;
510     + var->blue.offset = 0;
511     + var->red.length = 8; /* 8bit DAC */
512     + var->green.length = 8;
513     + var->blue.length = 8;
514     + var->transp.offset = 0;
515     + var->transp.length = 0;
516     + break;
517     + case 15:
518     + var->red.offset = 10;
519     + var->green.offset = 5;
520     + var->blue.offset = 0;
521     + var->red.length = 5;
522     + var->green.length = 5;
523     + var->blue.length = 5;
524     + var->transp.offset = 15;
525     + var->transp.length = 1;
526     + break;
527     + case 16:
528     + var->red.offset = 11;
529     + var->green.offset = 5;
530     + var->blue.offset = 0;
531     + var->red.length = 5;
532     + var->green.length = 6;
533     + var->blue.length = 5;
534     + var->transp.offset = 0;
535     + break;
536     + case 24:
537     + var->red.offset = 16;
538     + var->green.offset = 8;
539     + var->blue.offset = 0;
540     + var->red.length = 8;
541     + var->green.length = 8;
542     + var->blue.length = 8;
543     + var->transp.offset = 0;
544     + var->transp.length = 0;
545     + break;
546     + case 32:
547     + var->red.offset = 16;
548     + var->green.offset = 8;
549     + var->blue.offset = 0;
550     + var->red.length = 8;
551     + var->green.length = 8;
552     + var->blue.length = 8;
553     + var->transp.offset = 24;
554     + var->transp.length = 8;
555     + break;
556     + default:
557     + break;
558     + }
559     +}
560     +
561     /**
562     * drm_fb_helper_check_var - implementation for &fb_ops.fb_check_var
563     * @var: screeninfo to check
564     @@ -1650,6 +1708,20 @@ int drm_fb_helper_check_var(struct fb_var_screeninfo *var,
565     return -EINVAL;
566     }
567    
568     + /*
569     + * Workaround for SDL 1.2, which is known to be setting all pixel format
570     + * fields values to zero in some cases. We treat this situation as a
571     + * kind of "use some reasonable autodetected values".
572     + */
573     + if (!var->red.offset && !var->green.offset &&
574     + !var->blue.offset && !var->transp.offset &&
575     + !var->red.length && !var->green.length &&
576     + !var->blue.length && !var->transp.length &&
577     + !var->red.msb_right && !var->green.msb_right &&
578     + !var->blue.msb_right && !var->transp.msb_right) {
579     + drm_fb_helper_fill_pixel_fmt(var, fb->format->depth);
580     + }
581     +
582     /*
583     * drm fbdev emulation doesn't support changing the pixel format at all,
584     * so reject all pixel format changing requests.
585     @@ -1961,59 +2033,7 @@ void drm_fb_helper_fill_var(struct fb_info *info, struct drm_fb_helper *fb_helpe
586     info->var.yoffset = 0;
587     info->var.activate = FB_ACTIVATE_NOW;
588    
589     - switch (fb->format->depth) {
590     - case 8:
591     - info->var.red.offset = 0;
592     - info->var.green.offset = 0;
593     - info->var.blue.offset = 0;
594     - info->var.red.length = 8; /* 8bit DAC */
595     - info->var.green.length = 8;
596     - info->var.blue.length = 8;
597     - info->var.transp.offset = 0;
598     - info->var.transp.length = 0;
599     - break;
600     - case 15:
601     - info->var.red.offset = 10;
602     - info->var.green.offset = 5;
603     - info->var.blue.offset = 0;
604     - info->var.red.length = 5;
605     - info->var.green.length = 5;
606     - info->var.blue.length = 5;
607     - info->var.transp.offset = 15;
608     - info->var.transp.length = 1;
609     - break;
610     - case 16:
611     - info->var.red.offset = 11;
612     - info->var.green.offset = 5;
613     - info->var.blue.offset = 0;
614     - info->var.red.length = 5;
615     - info->var.green.length = 6;
616     - info->var.blue.length = 5;
617     - info->var.transp.offset = 0;
618     - break;
619     - case 24:
620     - info->var.red.offset = 16;
621     - info->var.green.offset = 8;
622     - info->var.blue.offset = 0;
623     - info->var.red.length = 8;
624     - info->var.green.length = 8;
625     - info->var.blue.length = 8;
626     - info->var.transp.offset = 0;
627     - info->var.transp.length = 0;
628     - break;
629     - case 32:
630     - info->var.red.offset = 16;
631     - info->var.green.offset = 8;
632     - info->var.blue.offset = 0;
633     - info->var.red.length = 8;
634     - info->var.green.length = 8;
635     - info->var.blue.length = 8;
636     - info->var.transp.offset = 24;
637     - info->var.transp.length = 8;
638     - break;
639     - default:
640     - break;
641     - }
642     + drm_fb_helper_fill_pixel_fmt(&info->var, fb->format->depth);
643    
644     info->var.xres = fb_width;
645     info->var.yres = fb_height;
646     diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
647     index 07999fe09ad2..4fa1d2b146b1 100644
648     --- a/drivers/gpu/drm/i915/i915_gem_gtt.c
649     +++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
650     @@ -2117,6 +2117,7 @@ static struct i915_vma *pd_vma_create(struct gen6_hw_ppgtt *ppgtt, int size)
651     int gen6_ppgtt_pin(struct i915_hw_ppgtt *base)
652     {
653     struct gen6_hw_ppgtt *ppgtt = to_gen6_ppgtt(base);
654     + int err;
655    
656     /*
657     * Workaround the limited maximum vma->pin_count and the aliasing_ppgtt
658     @@ -2132,9 +2133,17 @@ int gen6_ppgtt_pin(struct i915_hw_ppgtt *base)
659     * allocator works in address space sizes, so it's multiplied by page
660     * size. We allocate at the top of the GTT to avoid fragmentation.
661     */
662     - return i915_vma_pin(ppgtt->vma,
663     - 0, GEN6_PD_ALIGN,
664     - PIN_GLOBAL | PIN_HIGH);
665     + err = i915_vma_pin(ppgtt->vma,
666     + 0, GEN6_PD_ALIGN,
667     + PIN_GLOBAL | PIN_HIGH);
668     + if (err)
669     + goto unpin;
670     +
671     + return 0;
672     +
673     +unpin:
674     + ppgtt->pin_count = 0;
675     + return err;
676     }
677    
678     void gen6_ppgtt_unpin(struct i915_hw_ppgtt *base)
679     diff --git a/drivers/i2c/i2c-dev.c b/drivers/i2c/i2c-dev.c
680     index 1aca742fde4a..ccd76c71af09 100644
681     --- a/drivers/i2c/i2c-dev.c
682     +++ b/drivers/i2c/i2c-dev.c
683     @@ -470,9 +470,15 @@ static long i2cdev_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
684     data_arg.data);
685     }
686     case I2C_RETRIES:
687     + if (arg > INT_MAX)
688     + return -EINVAL;
689     +
690     client->adapter->retries = arg;
691     break;
692     case I2C_TIMEOUT:
693     + if (arg > INT_MAX)
694     + return -EINVAL;
695     +
696     /* For historical reasons, user-space sets the timeout
697     * value in units of 10 ms.
698     */
699     diff --git a/drivers/mtd/nand/raw/qcom_nandc.c b/drivers/mtd/nand/raw/qcom_nandc.c
700     index 699d3cf49c6d..7c42a57aca1f 100644
701     --- a/drivers/mtd/nand/raw/qcom_nandc.c
702     +++ b/drivers/mtd/nand/raw/qcom_nandc.c
703     @@ -2833,6 +2833,16 @@ static int qcom_nand_host_init_and_register(struct qcom_nand_controller *nandc,
704     if (ret)
705     return ret;
706    
707     + if (nandc->props->is_bam) {
708     + free_bam_transaction(nandc);
709     + nandc->bam_txn = alloc_bam_transaction(nandc);
710     + if (!nandc->bam_txn) {
711     + dev_err(nandc->dev,
712     + "failed to allocate bam transaction\n");
713     + return -ENOMEM;
714     + }
715     + }
716     +
717     ret = mtd_device_register(mtd, NULL, 0);
718     if (ret)
719     nand_cleanup(chip);
720     @@ -2847,16 +2857,6 @@ static int qcom_probe_nand_devices(struct qcom_nand_controller *nandc)
721     struct qcom_nand_host *host;
722     int ret;
723    
724     - if (nandc->props->is_bam) {
725     - free_bam_transaction(nandc);
726     - nandc->bam_txn = alloc_bam_transaction(nandc);
727     - if (!nandc->bam_txn) {
728     - dev_err(nandc->dev,
729     - "failed to allocate bam transaction\n");
730     - return -ENOMEM;
731     - }
732     - }
733     -
734     for_each_available_child_of_node(dn, child) {
735     host = devm_kzalloc(dev, sizeof(*host), GFP_KERNEL);
736     if (!host) {
737     diff --git a/drivers/opp/core.c b/drivers/opp/core.c
738     index 2c2df4e4fc14..9280f51f1ce6 100644
739     --- a/drivers/opp/core.c
740     +++ b/drivers/opp/core.c
741     @@ -951,11 +951,9 @@ void _opp_free(struct dev_pm_opp *opp)
742     kfree(opp);
743     }
744    
745     -static void _opp_kref_release(struct kref *kref)
746     +static void _opp_kref_release(struct dev_pm_opp *opp,
747     + struct opp_table *opp_table)
748     {
749     - struct dev_pm_opp *opp = container_of(kref, struct dev_pm_opp, kref);
750     - struct opp_table *opp_table = opp->opp_table;
751     -
752     /*
753     * Notify the changes in the availability of the operable
754     * frequency/voltage list.
755     @@ -964,7 +962,22 @@ static void _opp_kref_release(struct kref *kref)
756     opp_debug_remove_one(opp);
757     list_del(&opp->node);
758     kfree(opp);
759     +}
760    
761     +static void _opp_kref_release_unlocked(struct kref *kref)
762     +{
763     + struct dev_pm_opp *opp = container_of(kref, struct dev_pm_opp, kref);
764     + struct opp_table *opp_table = opp->opp_table;
765     +
766     + _opp_kref_release(opp, opp_table);
767     +}
768     +
769     +static void _opp_kref_release_locked(struct kref *kref)
770     +{
771     + struct dev_pm_opp *opp = container_of(kref, struct dev_pm_opp, kref);
772     + struct opp_table *opp_table = opp->opp_table;
773     +
774     + _opp_kref_release(opp, opp_table);
775     mutex_unlock(&opp_table->lock);
776     }
777    
778     @@ -975,10 +988,16 @@ void dev_pm_opp_get(struct dev_pm_opp *opp)
779    
780     void dev_pm_opp_put(struct dev_pm_opp *opp)
781     {
782     - kref_put_mutex(&opp->kref, _opp_kref_release, &opp->opp_table->lock);
783     + kref_put_mutex(&opp->kref, _opp_kref_release_locked,
784     + &opp->opp_table->lock);
785     }
786     EXPORT_SYMBOL_GPL(dev_pm_opp_put);
787    
788     +static void dev_pm_opp_put_unlocked(struct dev_pm_opp *opp)
789     +{
790     + kref_put(&opp->kref, _opp_kref_release_unlocked);
791     +}
792     +
793     /**
794     * dev_pm_opp_remove() - Remove an OPP from OPP table
795     * @dev: device for which we do this operation
796     @@ -1022,6 +1041,40 @@ void dev_pm_opp_remove(struct device *dev, unsigned long freq)
797     }
798     EXPORT_SYMBOL_GPL(dev_pm_opp_remove);
799    
800     +/**
801     + * dev_pm_opp_remove_all_dynamic() - Remove all dynamically created OPPs
802     + * @dev: device for which we do this operation
803     + *
804     + * This function removes all dynamically created OPPs from the opp table.
805     + */
806     +void dev_pm_opp_remove_all_dynamic(struct device *dev)
807     +{
808     + struct opp_table *opp_table;
809     + struct dev_pm_opp *opp, *temp;
810     + int count = 0;
811     +
812     + opp_table = _find_opp_table(dev);
813     + if (IS_ERR(opp_table))
814     + return;
815     +
816     + mutex_lock(&opp_table->lock);
817     + list_for_each_entry_safe(opp, temp, &opp_table->opp_list, node) {
818     + if (opp->dynamic) {
819     + dev_pm_opp_put_unlocked(opp);
820     + count++;
821     + }
822     + }
823     + mutex_unlock(&opp_table->lock);
824     +
825     + /* Drop the references taken by dev_pm_opp_add() */
826     + while (count--)
827     + dev_pm_opp_put_opp_table(opp_table);
828     +
829     + /* Drop the reference taken by _find_opp_table() */
830     + dev_pm_opp_put_opp_table(opp_table);
831     +}
832     +EXPORT_SYMBOL_GPL(dev_pm_opp_remove_all_dynamic);
833     +
834     struct dev_pm_opp *_opp_allocate(struct opp_table *table)
835     {
836     struct dev_pm_opp *opp;
837     diff --git a/drivers/pci/controller/dwc/pcie-designware-host.c b/drivers/pci/controller/dwc/pcie-designware-host.c
838     index 29a05759a294..0fa9e8fdce66 100644
839     --- a/drivers/pci/controller/dwc/pcie-designware-host.c
840     +++ b/drivers/pci/controller/dwc/pcie-designware-host.c
841     @@ -99,9 +99,6 @@ irqreturn_t dw_handle_msi_irq(struct pcie_port *pp)
842     (i * MAX_MSI_IRQS_PER_CTRL) +
843     pos);
844     generic_handle_irq(irq);
845     - dw_pcie_wr_own_conf(pp, PCIE_MSI_INTR0_STATUS +
846     - (i * MSI_REG_CTRL_BLOCK_SIZE),
847     - 4, 1 << pos);
848     pos++;
849     }
850     }
851     @@ -168,8 +165,8 @@ static void dw_pci_bottom_mask(struct irq_data *data)
852     bit = data->hwirq % MAX_MSI_IRQS_PER_CTRL;
853    
854     pp->irq_status[ctrl] &= ~(1 << bit);
855     - dw_pcie_wr_own_conf(pp, PCIE_MSI_INTR0_ENABLE + res, 4,
856     - pp->irq_status[ctrl]);
857     + dw_pcie_wr_own_conf(pp, PCIE_MSI_INTR0_MASK + res, 4,
858     + ~pp->irq_status[ctrl]);
859     }
860    
861     raw_spin_unlock_irqrestore(&pp->lock, flags);
862     @@ -191,8 +188,8 @@ static void dw_pci_bottom_unmask(struct irq_data *data)
863     bit = data->hwirq % MAX_MSI_IRQS_PER_CTRL;
864    
865     pp->irq_status[ctrl] |= 1 << bit;
866     - dw_pcie_wr_own_conf(pp, PCIE_MSI_INTR0_ENABLE + res, 4,
867     - pp->irq_status[ctrl]);
868     + dw_pcie_wr_own_conf(pp, PCIE_MSI_INTR0_MASK + res, 4,
869     + ~pp->irq_status[ctrl]);
870     }
871    
872     raw_spin_unlock_irqrestore(&pp->lock, flags);
873     @@ -200,13 +197,22 @@ static void dw_pci_bottom_unmask(struct irq_data *data)
874    
875     static void dw_pci_bottom_ack(struct irq_data *d)
876     {
877     - struct msi_desc *msi = irq_data_get_msi_desc(d);
878     - struct pcie_port *pp;
879     + struct pcie_port *pp = irq_data_get_irq_chip_data(d);
880     + unsigned int res, bit, ctrl;
881     + unsigned long flags;
882     +
883     + ctrl = d->hwirq / MAX_MSI_IRQS_PER_CTRL;
884     + res = ctrl * MSI_REG_CTRL_BLOCK_SIZE;
885     + bit = d->hwirq % MAX_MSI_IRQS_PER_CTRL;
886     +
887     + raw_spin_lock_irqsave(&pp->lock, flags);
888    
889     - pp = msi_desc_to_pci_sysdata(msi);
890     + dw_pcie_wr_own_conf(pp, PCIE_MSI_INTR0_STATUS + res, 4, 1 << bit);
891    
892     if (pp->ops->msi_irq_ack)
893     pp->ops->msi_irq_ack(d->hwirq, pp);
894     +
895     + raw_spin_unlock_irqrestore(&pp->lock, flags);
896     }
897    
898     static struct irq_chip dw_pci_msi_bottom_irq_chip = {
899     @@ -658,10 +664,15 @@ void dw_pcie_setup_rc(struct pcie_port *pp)
900     num_ctrls = pp->num_vectors / MAX_MSI_IRQS_PER_CTRL;
901    
902     /* Initialize IRQ Status array */
903     - for (ctrl = 0; ctrl < num_ctrls; ctrl++)
904     - dw_pcie_rd_own_conf(pp, PCIE_MSI_INTR0_ENABLE +
905     + for (ctrl = 0; ctrl < num_ctrls; ctrl++) {
906     + dw_pcie_wr_own_conf(pp, PCIE_MSI_INTR0_MASK +
907     (ctrl * MSI_REG_CTRL_BLOCK_SIZE),
908     - 4, &pp->irq_status[ctrl]);
909     + 4, ~0);
910     + dw_pcie_wr_own_conf(pp, PCIE_MSI_INTR0_ENABLE +
911     + (ctrl * MSI_REG_CTRL_BLOCK_SIZE),
912     + 4, ~0);
913     + pp->irq_status[ctrl] = 0;
914     + }
915    
916     /* Setup RC BARs */
917     dw_pcie_writel_dbi(pci, PCI_BASE_ADDRESS_0, 0x00000004);
918     diff --git a/drivers/staging/rtl8188eu/core/rtw_security.c b/drivers/staging/rtl8188eu/core/rtw_security.c
919     index f7407632e80b..bab96c870042 100644
920     --- a/drivers/staging/rtl8188eu/core/rtw_security.c
921     +++ b/drivers/staging/rtl8188eu/core/rtw_security.c
922     @@ -154,7 +154,7 @@ void rtw_wep_encrypt(struct adapter *padapter, u8 *pxmitframe)
923    
924     pframe = ((struct xmit_frame *)pxmitframe)->buf_addr + hw_hdr_offset;
925    
926     - crypto_ops = try_then_request_module(lib80211_get_crypto_ops("WEP"), "lib80211_crypt_wep");
927     + crypto_ops = lib80211_get_crypto_ops("WEP");
928    
929     if (!crypto_ops)
930     return;
931     @@ -210,7 +210,7 @@ int rtw_wep_decrypt(struct adapter *padapter, u8 *precvframe)
932     void *crypto_private = NULL;
933     int status = _SUCCESS;
934     const int keyindex = prxattrib->key_index;
935     - struct lib80211_crypto_ops *crypto_ops = try_then_request_module(lib80211_get_crypto_ops("WEP"), "lib80211_crypt_wep");
936     + struct lib80211_crypto_ops *crypto_ops = lib80211_get_crypto_ops("WEP");
937     char iv[4], icv[4];
938    
939     if (!crypto_ops) {
940     @@ -1291,7 +1291,7 @@ u32 rtw_aes_decrypt(struct adapter *padapter, u8 *precvframe)
941     struct sk_buff *skb = ((struct recv_frame *)precvframe)->pkt;
942     void *crypto_private = NULL;
943     u8 *key, *pframe = skb->data;
944     - struct lib80211_crypto_ops *crypto_ops = try_then_request_module(lib80211_get_crypto_ops("CCMP"), "lib80211_crypt_ccmp");
945     + struct lib80211_crypto_ops *crypto_ops = lib80211_get_crypto_ops("CCMP");
946     struct security_priv *psecuritypriv = &padapter->securitypriv;
947     char iv[8], icv[8];
948    
949     diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
950     index ed8c62b2d9d1..739f8960811a 100644
951     --- a/drivers/usb/class/cdc-acm.c
952     +++ b/drivers/usb/class/cdc-acm.c
953     @@ -1865,6 +1865,13 @@ static const struct usb_device_id acm_ids[] = {
954     .driver_info = IGNORE_DEVICE,
955     },
956    
957     + { USB_DEVICE(0x1bc7, 0x0021), /* Telit 3G ACM only composition */
958     + .driver_info = SEND_ZERO_PACKET,
959     + },
960     + { USB_DEVICE(0x1bc7, 0x0023), /* Telit 3G ACM + ECM composition */
961     + .driver_info = SEND_ZERO_PACKET,
962     + },
963     +
964     /* control interfaces without any protocol set */
965     { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
966     USB_CDC_PROTO_NONE) },
967     diff --git a/drivers/usb/core/generic.c b/drivers/usb/core/generic.c
968     index 356b05c82dbc..f713cecc1f41 100644
969     --- a/drivers/usb/core/generic.c
970     +++ b/drivers/usb/core/generic.c
971     @@ -143,9 +143,12 @@ int usb_choose_configuration(struct usb_device *udev)
972     continue;
973     }
974    
975     - if (i > 0 && desc && is_audio(desc) && is_uac3_config(desc)) {
976     - best = c;
977     - break;
978     + if (i > 0 && desc && is_audio(desc)) {
979     + if (is_uac3_config(desc)) {
980     + best = c;
981     + break;
982     + }
983     + continue;
984     }
985    
986     /* From the remaining configs, choose the first one whose
987     diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
988     index 514c5214ddb2..8bc35d53408b 100644
989     --- a/drivers/usb/core/quirks.c
990     +++ b/drivers/usb/core/quirks.c
991     @@ -394,7 +394,8 @@ static const struct usb_device_id usb_quirk_list[] = {
992     { USB_DEVICE(0x1a40, 0x0101), .driver_info = USB_QUIRK_HUB_SLOW_RESET },
993    
994     /* Corsair K70 RGB */
995     - { USB_DEVICE(0x1b1c, 0x1b13), .driver_info = USB_QUIRK_DELAY_INIT },
996     + { USB_DEVICE(0x1b1c, 0x1b13), .driver_info = USB_QUIRK_DELAY_INIT |
997     + USB_QUIRK_DELAY_CTRL_MSG },
998    
999     /* Corsair Strafe */
1000     { USB_DEVICE(0x1b1c, 0x1b15), .driver_info = USB_QUIRK_DELAY_INIT |
1001     diff --git a/drivers/usb/storage/scsiglue.c b/drivers/usb/storage/scsiglue.c
1002     index e227bb5b794f..101ebac43c87 100644
1003     --- a/drivers/usb/storage/scsiglue.c
1004     +++ b/drivers/usb/storage/scsiglue.c
1005     @@ -235,8 +235,12 @@ static int slave_configure(struct scsi_device *sdev)
1006     if (!(us->fflags & US_FL_NEEDS_CAP16))
1007     sdev->try_rc_10_first = 1;
1008    
1009     - /* assume SPC3 or latter devices support sense size > 18 */
1010     - if (sdev->scsi_level > SCSI_SPC_2)
1011     + /*
1012     + * assume SPC3 or latter devices support sense size > 18
1013     + * unless US_FL_BAD_SENSE quirk is specified.
1014     + */
1015     + if (sdev->scsi_level > SCSI_SPC_2 &&
1016     + !(us->fflags & US_FL_BAD_SENSE))
1017     us->fflags |= US_FL_SANE_SENSE;
1018    
1019     /*
1020     diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h
1021     index f7f83b21dc74..ea0d27a94afe 100644
1022     --- a/drivers/usb/storage/unusual_devs.h
1023     +++ b/drivers/usb/storage/unusual_devs.h
1024     @@ -1265,6 +1265,18 @@ UNUSUAL_DEV( 0x090c, 0x1132, 0x0000, 0xffff,
1025     USB_SC_DEVICE, USB_PR_DEVICE, NULL,
1026     US_FL_FIX_CAPACITY ),
1027    
1028     +/*
1029     + * Reported by Icenowy Zheng <icenowy@aosc.io>
1030     + * The SMI SM3350 USB-UFS bridge controller will enter a wrong state
1031     + * that do not process read/write command if a long sense is requested,
1032     + * so force to use 18-byte sense.
1033     + */
1034     +UNUSUAL_DEV( 0x090c, 0x3350, 0x0000, 0xffff,
1035     + "SMI",
1036     + "SM3350 UFS-to-USB-Mass-Storage bridge",
1037     + USB_SC_DEVICE, USB_PR_DEVICE, NULL,
1038     + US_FL_BAD_SENSE ),
1039     +
1040     /*
1041     * Reported by Paul Hartman <paul.hartman+linux@gmail.com>
1042     * This card reader returns "Illegal Request, Logical Block Address
1043     diff --git a/drivers/vfio/vfio_iommu_type1.c b/drivers/vfio/vfio_iommu_type1.c
1044     index d9fd3188615d..64cbc2d007c9 100644
1045     --- a/drivers/vfio/vfio_iommu_type1.c
1046     +++ b/drivers/vfio/vfio_iommu_type1.c
1047     @@ -878,7 +878,7 @@ static int vfio_dma_do_unmap(struct vfio_iommu *iommu,
1048     return -EINVAL;
1049     if (!unmap->size || unmap->size & mask)
1050     return -EINVAL;
1051     - if (unmap->iova + unmap->size < unmap->iova ||
1052     + if (unmap->iova + unmap->size - 1 < unmap->iova ||
1053     unmap->size > SIZE_MAX)
1054     return -EINVAL;
1055    
1056     diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c
1057     index 99e7645ad94e..47f1183b3dbe 100644
1058     --- a/fs/btrfs/ctree.c
1059     +++ b/fs/btrfs/ctree.c
1060     @@ -1015,19 +1015,21 @@ static noinline int __btrfs_cow_block(struct btrfs_trans_handle *trans,
1061     parent_start = parent->start;
1062    
1063     /*
1064     - * If we are COWing a node/leaf from the extent, chunk or device trees,
1065     - * make sure that we do not finish block group creation of pending block
1066     - * groups. We do this to avoid a deadlock.
1067     + * If we are COWing a node/leaf from the extent, chunk, device or free
1068     + * space trees, make sure that we do not finish block group creation of
1069     + * pending block groups. We do this to avoid a deadlock.
1070     * COWing can result in allocation of a new chunk, and flushing pending
1071     * block groups (btrfs_create_pending_block_groups()) can be triggered
1072     * when finishing allocation of a new chunk. Creation of a pending block
1073     - * group modifies the extent, chunk and device trees, therefore we could
1074     - * deadlock with ourselves since we are holding a lock on an extent
1075     - * buffer that btrfs_create_pending_block_groups() may try to COW later.
1076     + * group modifies the extent, chunk, device and free space trees,
1077     + * therefore we could deadlock with ourselves since we are holding a
1078     + * lock on an extent buffer that btrfs_create_pending_block_groups() may
1079     + * try to COW later.
1080     */
1081     if (root == fs_info->extent_root ||
1082     root == fs_info->chunk_root ||
1083     - root == fs_info->dev_root)
1084     + root == fs_info->dev_root ||
1085     + root == fs_info->free_space_root)
1086     trans->can_flush_pending_bgs = false;
1087    
1088     cow = btrfs_alloc_tree_block(trans, root, parent_start,
1089     diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c
1090     index f70825af6438..9e419f6878c5 100644
1091     --- a/fs/btrfs/qgroup.c
1092     +++ b/fs/btrfs/qgroup.c
1093     @@ -1013,16 +1013,22 @@ out_add_root:
1094     btrfs_abort_transaction(trans, ret);
1095     goto out_free_path;
1096     }
1097     - spin_lock(&fs_info->qgroup_lock);
1098     - fs_info->quota_root = quota_root;
1099     - set_bit(BTRFS_FS_QUOTA_ENABLED, &fs_info->flags);
1100     - spin_unlock(&fs_info->qgroup_lock);
1101    
1102     ret = btrfs_commit_transaction(trans);
1103     trans = NULL;
1104     if (ret)
1105     goto out_free_path;
1106    
1107     + /*
1108     + * Set quota enabled flag after committing the transaction, to avoid
1109     + * deadlocks on fs_info->qgroup_ioctl_lock with concurrent snapshot
1110     + * creation.
1111     + */
1112     + spin_lock(&fs_info->qgroup_lock);
1113     + fs_info->quota_root = quota_root;
1114     + set_bit(BTRFS_FS_QUOTA_ENABLED, &fs_info->flags);
1115     + spin_unlock(&fs_info->qgroup_lock);
1116     +
1117     ret = qgroup_rescan_init(fs_info, 0, 1);
1118     if (!ret) {
1119     qgroup_rescan_zero_tracking(fs_info);
1120     diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
1121     index f435d397019e..c872adfc939e 100644
1122     --- a/fs/btrfs/volumes.c
1123     +++ b/fs/btrfs/volumes.c
1124     @@ -3724,6 +3724,7 @@ int btrfs_balance(struct btrfs_fs_info *fs_info,
1125     int ret;
1126     u64 num_devices;
1127     unsigned seq;
1128     + bool reducing_integrity;
1129    
1130     if (btrfs_fs_closing(fs_info) ||
1131     atomic_read(&fs_info->balance_pause_req) ||
1132     @@ -3803,24 +3804,30 @@ int btrfs_balance(struct btrfs_fs_info *fs_info,
1133     !(bctl->sys.target & allowed)) ||
1134     ((bctl->meta.flags & BTRFS_BALANCE_ARGS_CONVERT) &&
1135     (fs_info->avail_metadata_alloc_bits & allowed) &&
1136     - !(bctl->meta.target & allowed))) {
1137     - if (bctl->flags & BTRFS_BALANCE_FORCE) {
1138     - btrfs_info(fs_info,
1139     - "balance: force reducing metadata integrity");
1140     - } else {
1141     - btrfs_err(fs_info,
1142     - "balance: reduces metadata integrity, use --force if you want this");
1143     - ret = -EINVAL;
1144     - goto out;
1145     - }
1146     - }
1147     + !(bctl->meta.target & allowed)))
1148     + reducing_integrity = true;
1149     + else
1150     + reducing_integrity = false;
1151     +
1152     + /* if we're not converting, the target field is uninitialized */
1153     + meta_target = (bctl->meta.flags & BTRFS_BALANCE_ARGS_CONVERT) ?
1154     + bctl->meta.target : fs_info->avail_metadata_alloc_bits;
1155     + data_target = (bctl->data.flags & BTRFS_BALANCE_ARGS_CONVERT) ?
1156     + bctl->data.target : fs_info->avail_data_alloc_bits;
1157     } while (read_seqretry(&fs_info->profiles_lock, seq));
1158    
1159     - /* if we're not converting, the target field is uninitialized */
1160     - meta_target = (bctl->meta.flags & BTRFS_BALANCE_ARGS_CONVERT) ?
1161     - bctl->meta.target : fs_info->avail_metadata_alloc_bits;
1162     - data_target = (bctl->data.flags & BTRFS_BALANCE_ARGS_CONVERT) ?
1163     - bctl->data.target : fs_info->avail_data_alloc_bits;
1164     + if (reducing_integrity) {
1165     + if (bctl->flags & BTRFS_BALANCE_FORCE) {
1166     + btrfs_info(fs_info,
1167     + "balance: force reducing metadata integrity");
1168     + } else {
1169     + btrfs_err(fs_info,
1170     + "balance: reduces metadata integrity, use --force if you want this");
1171     + ret = -EINVAL;
1172     + goto out;
1173     + }
1174     + }
1175     +
1176     if (btrfs_get_num_tolerated_disk_barrier_failures(meta_target) <
1177     btrfs_get_num_tolerated_disk_barrier_failures(data_target)) {
1178     int meta_index = btrfs_bg_flags_to_raid_index(meta_target);
1179     diff --git a/fs/btrfs/xattr.c b/fs/btrfs/xattr.c
1180     index ea78c3d6dcfc..f141b45ce349 100644
1181     --- a/fs/btrfs/xattr.c
1182     +++ b/fs/btrfs/xattr.c
1183     @@ -11,6 +11,7 @@
1184     #include <linux/security.h>
1185     #include <linux/posix_acl_xattr.h>
1186     #include <linux/iversion.h>
1187     +#include <linux/sched/mm.h>
1188     #include "ctree.h"
1189     #include "btrfs_inode.h"
1190     #include "transaction.h"
1191     @@ -422,9 +423,15 @@ static int btrfs_initxattrs(struct inode *inode,
1192     {
1193     const struct xattr *xattr;
1194     struct btrfs_trans_handle *trans = fs_info;
1195     + unsigned int nofs_flag;
1196     char *name;
1197     int err = 0;
1198    
1199     + /*
1200     + * We're holding a transaction handle, so use a NOFS memory allocation
1201     + * context to avoid deadlock if reclaim happens.
1202     + */
1203     + nofs_flag = memalloc_nofs_save();
1204     for (xattr = xattr_array; xattr->name != NULL; xattr++) {
1205     name = kmalloc(XATTR_SECURITY_PREFIX_LEN +
1206     strlen(xattr->name) + 1, GFP_KERNEL);
1207     @@ -440,6 +447,7 @@ static int btrfs_initxattrs(struct inode *inode,
1208     if (err < 0)
1209     break;
1210     }
1211     + memalloc_nofs_restore(nofs_flag);
1212     return err;
1213     }
1214    
1215     diff --git a/fs/cifs/file.c b/fs/cifs/file.c
1216     index c23bf9da93d2..d5c3e0725849 100644
1217     --- a/fs/cifs/file.c
1218     +++ b/fs/cifs/file.c
1219     @@ -1131,10 +1131,10 @@ cifs_push_mandatory_locks(struct cifsFileInfo *cfile)
1220    
1221     /*
1222     * Accessing maxBuf is racy with cifs_reconnect - need to store value
1223     - * and check it for zero before using.
1224     + * and check it before using.
1225     */
1226     max_buf = tcon->ses->server->maxBuf;
1227     - if (!max_buf) {
1228     + if (max_buf < (sizeof(struct smb_hdr) + sizeof(LOCKING_ANDX_RANGE))) {
1229     free_xid(xid);
1230     return -EINVAL;
1231     }
1232     @@ -1471,10 +1471,10 @@ cifs_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock,
1233    
1234     /*
1235     * Accessing maxBuf is racy with cifs_reconnect - need to store value
1236     - * and check it for zero before using.
1237     + * and check it before using.
1238     */
1239     max_buf = tcon->ses->server->maxBuf;
1240     - if (!max_buf)
1241     + if (max_buf < (sizeof(struct smb_hdr) + sizeof(LOCKING_ANDX_RANGE)))
1242     return -EINVAL;
1243    
1244     max_num = (max_buf - sizeof(struct smb_hdr)) /
1245     diff --git a/fs/cifs/misc.c b/fs/cifs/misc.c
1246     index 8a41f4eba726..6f33253938cd 100644
1247     --- a/fs/cifs/misc.c
1248     +++ b/fs/cifs/misc.c
1249     @@ -111,21 +111,27 @@ struct cifs_tcon *
1250     tconInfoAlloc(void)
1251     {
1252     struct cifs_tcon *ret_buf;
1253     - ret_buf = kzalloc(sizeof(struct cifs_tcon), GFP_KERNEL);
1254     - if (ret_buf) {
1255     - atomic_inc(&tconInfoAllocCount);
1256     - ret_buf->tidStatus = CifsNew;
1257     - ++ret_buf->tc_count;
1258     - INIT_LIST_HEAD(&ret_buf->openFileList);
1259     - INIT_LIST_HEAD(&ret_buf->tcon_list);
1260     - spin_lock_init(&ret_buf->open_file_lock);
1261     - mutex_init(&ret_buf->crfid.fid_mutex);
1262     - ret_buf->crfid.fid = kzalloc(sizeof(struct cifs_fid),
1263     - GFP_KERNEL);
1264     - spin_lock_init(&ret_buf->stat_lock);
1265     - atomic_set(&ret_buf->num_local_opens, 0);
1266     - atomic_set(&ret_buf->num_remote_opens, 0);
1267     +
1268     + ret_buf = kzalloc(sizeof(*ret_buf), GFP_KERNEL);
1269     + if (!ret_buf)
1270     + return NULL;
1271     + ret_buf->crfid.fid = kzalloc(sizeof(*ret_buf->crfid.fid), GFP_KERNEL);
1272     + if (!ret_buf->crfid.fid) {
1273     + kfree(ret_buf);
1274     + return NULL;
1275     }
1276     +
1277     + atomic_inc(&tconInfoAllocCount);
1278     + ret_buf->tidStatus = CifsNew;
1279     + ++ret_buf->tc_count;
1280     + INIT_LIST_HEAD(&ret_buf->openFileList);
1281     + INIT_LIST_HEAD(&ret_buf->tcon_list);
1282     + spin_lock_init(&ret_buf->open_file_lock);
1283     + mutex_init(&ret_buf->crfid.fid_mutex);
1284     + spin_lock_init(&ret_buf->stat_lock);
1285     + atomic_set(&ret_buf->num_local_opens, 0);
1286     + atomic_set(&ret_buf->num_remote_opens, 0);
1287     +
1288     return ret_buf;
1289     }
1290    
1291     diff --git a/fs/cifs/smb2file.c b/fs/cifs/smb2file.c
1292     index 4ed10dd086e6..2fc3d31967ee 100644
1293     --- a/fs/cifs/smb2file.c
1294     +++ b/fs/cifs/smb2file.c
1295     @@ -122,10 +122,10 @@ smb2_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock,
1296    
1297     /*
1298     * Accessing maxBuf is racy with cifs_reconnect - need to store value
1299     - * and check it for zero before using.
1300     + * and check it before using.
1301     */
1302     max_buf = tcon->ses->server->maxBuf;
1303     - if (!max_buf)
1304     + if (max_buf < sizeof(struct smb2_lock_element))
1305     return -EINVAL;
1306    
1307     max_num = max_buf / sizeof(struct smb2_lock_element);
1308     diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c
1309     index 27f86537a5d1..836c59fca049 100644
1310     --- a/fs/cifs/smb2pdu.c
1311     +++ b/fs/cifs/smb2pdu.c
1312     @@ -3197,12 +3197,14 @@ smb2_async_readv(struct cifs_readdata *rdata)
1313     if (rdata->credits) {
1314     shdr->CreditCharge = cpu_to_le16(DIV_ROUND_UP(rdata->bytes,
1315     SMB2_MAX_BUFFER_SIZE));
1316     - shdr->CreditRequest = shdr->CreditCharge;
1317     + shdr->CreditRequest =
1318     + cpu_to_le16(le16_to_cpu(shdr->CreditCharge) + 1);
1319     spin_lock(&server->req_lock);
1320     server->credits += rdata->credits -
1321     le16_to_cpu(shdr->CreditCharge);
1322     spin_unlock(&server->req_lock);
1323     wake_up(&server->request_q);
1324     + rdata->credits = le16_to_cpu(shdr->CreditCharge);
1325     flags |= CIFS_HAS_CREDITS;
1326     }
1327    
1328     @@ -3474,12 +3476,14 @@ smb2_async_writev(struct cifs_writedata *wdata,
1329     if (wdata->credits) {
1330     shdr->CreditCharge = cpu_to_le16(DIV_ROUND_UP(wdata->bytes,
1331     SMB2_MAX_BUFFER_SIZE));
1332     - shdr->CreditRequest = shdr->CreditCharge;
1333     + shdr->CreditRequest =
1334     + cpu_to_le16(le16_to_cpu(shdr->CreditCharge) + 1);
1335     spin_lock(&server->req_lock);
1336     server->credits += wdata->credits -
1337     le16_to_cpu(shdr->CreditCharge);
1338     spin_unlock(&server->req_lock);
1339     wake_up(&server->request_q);
1340     + wdata->credits = le16_to_cpu(shdr->CreditCharge);
1341     flags |= CIFS_HAS_CREDITS;
1342     }
1343    
1344     diff --git a/fs/cifs/transport.c b/fs/cifs/transport.c
1345     index 83ff0c25710d..d51064c1ba42 100644
1346     --- a/fs/cifs/transport.c
1347     +++ b/fs/cifs/transport.c
1348     @@ -385,7 +385,7 @@ smbd_done:
1349     if (rc < 0 && rc != -EINTR)
1350     cifs_dbg(VFS, "Error %d sending data on socket to server\n",
1351     rc);
1352     - else
1353     + else if (rc > 0)
1354     rc = 0;
1355    
1356     return rc;
1357     @@ -793,7 +793,8 @@ compound_send_recv(const unsigned int xid, struct cifs_ses *ses,
1358     int i, j, rc = 0;
1359     int timeout, optype;
1360     struct mid_q_entry *midQ[MAX_COMPOUND];
1361     - unsigned int credits = 0;
1362     + bool cancelled_mid[MAX_COMPOUND] = {false};
1363     + unsigned int credits[MAX_COMPOUND] = {0};
1364     char *buf;
1365    
1366     timeout = flags & CIFS_TIMEOUT_MASK;
1367     @@ -811,13 +812,31 @@ compound_send_recv(const unsigned int xid, struct cifs_ses *ses,
1368     return -ENOENT;
1369    
1370     /*
1371     - * Ensure that we do not send more than 50 overlapping requests
1372     - * to the same server. We may make this configurable later or
1373     - * use ses->maxReq.
1374     + * Ensure we obtain 1 credit per request in the compound chain.
1375     + * It can be optimized further by waiting for all the credits
1376     + * at once but this can wait long enough if we don't have enough
1377     + * credits due to some heavy operations in progress or the server
1378     + * not granting us much, so a fallback to the current approach is
1379     + * needed anyway.
1380     */
1381     - rc = wait_for_free_request(ses->server, timeout, optype);
1382     - if (rc)
1383     - return rc;
1384     + for (i = 0; i < num_rqst; i++) {
1385     + rc = wait_for_free_request(ses->server, timeout, optype);
1386     + if (rc) {
1387     + /*
1388     + * We haven't sent an SMB packet to the server yet but
1389     + * we already obtained credits for i requests in the
1390     + * compound chain - need to return those credits back
1391     + * for future use. Note that we need to call add_credits
1392     + * multiple times to match the way we obtained credits
1393     + * in the first place and to account for in flight
1394     + * requests correctly.
1395     + */
1396     + for (j = 0; j < i; j++)
1397     + add_credits(ses->server, 1, optype);
1398     + return rc;
1399     + }
1400     + credits[i] = 1;
1401     + }
1402    
1403     /*
1404     * Make sure that we sign in the same order that we send on this socket
1405     @@ -833,8 +852,10 @@ compound_send_recv(const unsigned int xid, struct cifs_ses *ses,
1406     for (j = 0; j < i; j++)
1407     cifs_delete_mid(midQ[j]);
1408     mutex_unlock(&ses->server->srv_mutex);
1409     +
1410     /* Update # of requests on wire to server */
1411     - add_credits(ses->server, 1, optype);
1412     + for (j = 0; j < num_rqst; j++)
1413     + add_credits(ses->server, credits[j], optype);
1414     return PTR_ERR(midQ[i]);
1415     }
1416    
1417     @@ -881,19 +902,16 @@ compound_send_recv(const unsigned int xid, struct cifs_ses *ses,
1418     if (midQ[i]->mid_state == MID_REQUEST_SUBMITTED) {
1419     midQ[i]->mid_flags |= MID_WAIT_CANCELLED;
1420     midQ[i]->callback = DeleteMidQEntry;
1421     - spin_unlock(&GlobalMid_Lock);
1422     - add_credits(ses->server, 1, optype);
1423     - return rc;
1424     + cancelled_mid[i] = true;
1425     }
1426     spin_unlock(&GlobalMid_Lock);
1427     }
1428     }
1429    
1430     for (i = 0; i < num_rqst; i++)
1431     - if (midQ[i]->resp_buf)
1432     - credits += ses->server->ops->get_credits(midQ[i]);
1433     - if (!credits)
1434     - credits = 1;
1435     + if (!cancelled_mid[i] && midQ[i]->resp_buf
1436     + && (midQ[i]->mid_state == MID_RESPONSE_RECEIVED))
1437     + credits[i] = ses->server->ops->get_credits(midQ[i]);
1438    
1439     for (i = 0; i < num_rqst; i++) {
1440     if (rc < 0)
1441     @@ -901,8 +919,9 @@ compound_send_recv(const unsigned int xid, struct cifs_ses *ses,
1442    
1443     rc = cifs_sync_mid_result(midQ[i], ses->server);
1444     if (rc != 0) {
1445     - add_credits(ses->server, credits, optype);
1446     - return rc;
1447     + /* mark this mid as cancelled to not free it below */
1448     + cancelled_mid[i] = true;
1449     + goto out;
1450     }
1451    
1452     if (!midQ[i]->resp_buf ||
1453     @@ -949,9 +968,11 @@ out:
1454     * This is prevented above by using a noop callback that will not
1455     * wake this thread except for the very last PDU.
1456     */
1457     - for (i = 0; i < num_rqst; i++)
1458     - cifs_delete_mid(midQ[i]);
1459     - add_credits(ses->server, credits, optype);
1460     + for (i = 0; i < num_rqst; i++) {
1461     + if (!cancelled_mid[i])
1462     + cifs_delete_mid(midQ[i]);
1463     + add_credits(ses->server, credits[i], optype);
1464     + }
1465    
1466     return rc;
1467     }
1468     diff --git a/fs/ext4/fsync.c b/fs/ext4/fsync.c
1469     index 26a7fe5c4fd3..712f00995390 100644
1470     --- a/fs/ext4/fsync.c
1471     +++ b/fs/ext4/fsync.c
1472     @@ -116,8 +116,16 @@ int ext4_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
1473     goto out;
1474     }
1475    
1476     + ret = file_write_and_wait_range(file, start, end);
1477     + if (ret)
1478     + return ret;
1479     +
1480     if (!journal) {
1481     - ret = __generic_file_fsync(file, start, end, datasync);
1482     + struct writeback_control wbc = {
1483     + .sync_mode = WB_SYNC_ALL
1484     + };
1485     +
1486     + ret = ext4_write_inode(inode, &wbc);
1487     if (!ret)
1488     ret = ext4_sync_parent(inode);
1489     if (test_opt(inode->i_sb, BARRIER))
1490     @@ -125,9 +133,6 @@ int ext4_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
1491     goto out;
1492     }
1493    
1494     - ret = file_write_and_wait_range(file, start, end);
1495     - if (ret)
1496     - return ret;
1497     /*
1498     * data=writeback,ordered:
1499     * The caller's filemap_fdatawrite()/wait will sync the data.
1500     @@ -159,6 +164,9 @@ int ext4_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
1501     ret = err;
1502     }
1503     out:
1504     + err = file_check_and_advance_wb_err(file);
1505     + if (ret == 0)
1506     + ret = err;
1507     trace_ext4_sync_file_exit(inode, ret);
1508     return ret;
1509     }
1510     diff --git a/fs/ext4/inline.c b/fs/ext4/inline.c
1511     index 27373d88b5f0..56f6e1782d5f 100644
1512     --- a/fs/ext4/inline.c
1513     +++ b/fs/ext4/inline.c
1514     @@ -1890,12 +1890,12 @@ int ext4_inline_data_fiemap(struct inode *inode,
1515     physical += (char *)ext4_raw_inode(&iloc) - iloc.bh->b_data;
1516     physical += offsetof(struct ext4_inode, i_block);
1517    
1518     - if (physical)
1519     - error = fiemap_fill_next_extent(fieinfo, start, physical,
1520     - inline_len, flags);
1521     brelse(iloc.bh);
1522     out:
1523     up_read(&EXT4_I(inode)->xattr_sem);
1524     + if (physical)
1525     + error = fiemap_fill_next_extent(fieinfo, start, physical,
1526     + inline_len, flags);
1527     return (error < 0 ? error : 0);
1528     }
1529    
1530     diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
1531     index 9affabd07682..34d7e0703cc6 100644
1532     --- a/fs/ext4/inode.c
1533     +++ b/fs/ext4/inode.c
1534     @@ -2778,7 +2778,8 @@ static int ext4_writepages(struct address_space *mapping,
1535     * We may need to convert up to one extent per block in
1536     * the page and we may dirty the inode.
1537     */
1538     - rsv_blocks = 1 + (PAGE_SIZE >> inode->i_blkbits);
1539     + rsv_blocks = 1 + ext4_chunk_trans_blocks(inode,
1540     + PAGE_SIZE >> inode->i_blkbits);
1541     }
1542    
1543     /*
1544     @@ -4833,7 +4834,7 @@ struct inode *__ext4_iget(struct super_block *sb, unsigned long ino,
1545     gid_t i_gid;
1546     projid_t i_projid;
1547    
1548     - if (((flags & EXT4_IGET_NORMAL) &&
1549     + if ((!(flags & EXT4_IGET_SPECIAL) &&
1550     (ino < EXT4_FIRST_INO(sb) && ino != EXT4_ROOT_INO)) ||
1551     (ino < EXT4_ROOT_INO) ||
1552     (ino > le32_to_cpu(EXT4_SB(sb)->s_es->s_inodes_count))) {
1553     diff --git a/fs/ext4/super.c b/fs/ext4/super.c
1554     index 6641a1b8a6a5..521320de2017 100644
1555     --- a/fs/ext4/super.c
1556     +++ b/fs/ext4/super.c
1557     @@ -4905,7 +4905,7 @@ static int ext4_commit_super(struct super_block *sb, int sync)
1558     ext4_superblock_csum_set(sb);
1559     if (sync)
1560     lock_buffer(sbh);
1561     - if (buffer_write_io_error(sbh)) {
1562     + if (buffer_write_io_error(sbh) || !buffer_uptodate(sbh)) {
1563     /*
1564     * Oh, dear. A previous attempt to write the
1565     * superblock failed. This could happen because the
1566     diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h
1567     index 2010493e1040..977ddf2774f9 100644
1568     --- a/include/linux/compiler-gcc.h
1569     +++ b/include/linux/compiler-gcc.h
1570     @@ -68,7 +68,7 @@
1571     */
1572     #define uninitialized_var(x) x = x
1573    
1574     -#ifdef RETPOLINE
1575     +#ifdef CONFIG_RETPOLINE
1576     #define __noretpoline __attribute__((__indirect_branch__("keep")))
1577     #endif
1578    
1579     diff --git a/include/linux/module.h b/include/linux/module.h
1580     index fce6b4335e36..0c575f51fe57 100644
1581     --- a/include/linux/module.h
1582     +++ b/include/linux/module.h
1583     @@ -817,7 +817,7 @@ static inline void module_bug_finalize(const Elf_Ehdr *hdr,
1584     static inline void module_bug_cleanup(struct module *mod) {}
1585     #endif /* CONFIG_GENERIC_BUG */
1586    
1587     -#ifdef RETPOLINE
1588     +#ifdef CONFIG_RETPOLINE
1589     extern bool retpoline_module_ok(bool has_retpoline);
1590     #else
1591     static inline bool retpoline_module_ok(bool has_retpoline)
1592     diff --git a/include/linux/pm_opp.h b/include/linux/pm_opp.h
1593     index 5d399eeef172..f4f8840eab04 100644
1594     --- a/include/linux/pm_opp.h
1595     +++ b/include/linux/pm_opp.h
1596     @@ -108,6 +108,7 @@ void dev_pm_opp_put(struct dev_pm_opp *opp);
1597     int dev_pm_opp_add(struct device *dev, unsigned long freq,
1598     unsigned long u_volt);
1599     void dev_pm_opp_remove(struct device *dev, unsigned long freq);
1600     +void dev_pm_opp_remove_all_dynamic(struct device *dev);
1601    
1602     int dev_pm_opp_enable(struct device *dev, unsigned long freq);
1603    
1604     @@ -214,6 +215,10 @@ static inline void dev_pm_opp_remove(struct device *dev, unsigned long freq)
1605     {
1606     }
1607    
1608     +static inline void dev_pm_opp_remove_all_dynamic(struct device *dev)
1609     +{
1610     +}
1611     +
1612     static inline int dev_pm_opp_enable(struct device *dev, unsigned long freq)
1613     {
1614     return 0;
1615     diff --git a/include/linux/sunrpc/svc.h b/include/linux/sunrpc/svc.h
1616     index 73e130a840ce..fdb6b317d974 100644
1617     --- a/include/linux/sunrpc/svc.h
1618     +++ b/include/linux/sunrpc/svc.h
1619     @@ -295,9 +295,12 @@ struct svc_rqst {
1620     struct svc_cacherep * rq_cacherep; /* cache info */
1621     struct task_struct *rq_task; /* service thread */
1622     spinlock_t rq_lock; /* per-request lock */
1623     + struct net *rq_bc_net; /* pointer to backchannel's
1624     + * net namespace
1625     + */
1626     };
1627    
1628     -#define SVC_NET(svc_rqst) (svc_rqst->rq_xprt->xpt_net)
1629     +#define SVC_NET(rqst) (rqst->rq_xprt ? rqst->rq_xprt->xpt_net : rqst->rq_bc_net)
1630    
1631     /*
1632     * Rigorous type checking on sockaddr type conversions
1633     diff --git a/include/trace/events/sunrpc.h b/include/trace/events/sunrpc.h
1634     index 28e384186c35..8617f4fd6b70 100644
1635     --- a/include/trace/events/sunrpc.h
1636     +++ b/include/trace/events/sunrpc.h
1637     @@ -569,7 +569,8 @@ TRACE_EVENT(svc_process,
1638     __field(u32, vers)
1639     __field(u32, proc)
1640     __string(service, name)
1641     - __string(addr, rqst->rq_xprt->xpt_remotebuf)
1642     + __string(addr, rqst->rq_xprt ?
1643     + rqst->rq_xprt->xpt_remotebuf : "(null)")
1644     ),
1645    
1646     TP_fast_assign(
1647     @@ -577,7 +578,8 @@ TRACE_EVENT(svc_process,
1648     __entry->vers = rqst->rq_vers;
1649     __entry->proc = rqst->rq_proc;
1650     __assign_str(service, name);
1651     - __assign_str(addr, rqst->rq_xprt->xpt_remotebuf);
1652     + __assign_str(addr, rqst->rq_xprt ?
1653     + rqst->rq_xprt->xpt_remotebuf : "(null)");
1654     ),
1655    
1656     TP_printk("addr=%s xid=0x%08x service=%s vers=%u proc=%u",
1657     diff --git a/kernel/fork.c b/kernel/fork.c
1658     index 3c16bc490583..906cd0c13d15 100644
1659     --- a/kernel/fork.c
1660     +++ b/kernel/fork.c
1661     @@ -221,6 +221,7 @@ static unsigned long *alloc_thread_stack_node(struct task_struct *tsk, int node)
1662     memset(s->addr, 0, THREAD_SIZE);
1663    
1664     tsk->stack_vm_area = s;
1665     + tsk->stack = s->addr;
1666     return s->addr;
1667     }
1668    
1669     diff --git a/mm/memory.c b/mm/memory.c
1670     index 4ad2d293ddc2..59c00ae6b928 100644
1671     --- a/mm/memory.c
1672     +++ b/mm/memory.c
1673     @@ -2993,6 +2993,29 @@ static vm_fault_t __do_fault(struct vm_fault *vmf)
1674     struct vm_area_struct *vma = vmf->vma;
1675     vm_fault_t ret;
1676    
1677     + /*
1678     + * Preallocate pte before we take page_lock because this might lead to
1679     + * deadlocks for memcg reclaim which waits for pages under writeback:
1680     + * lock_page(A)
1681     + * SetPageWriteback(A)
1682     + * unlock_page(A)
1683     + * lock_page(B)
1684     + * lock_page(B)
1685     + * pte_alloc_pne
1686     + * shrink_page_list
1687     + * wait_on_page_writeback(A)
1688     + * SetPageWriteback(B)
1689     + * unlock_page(B)
1690     + * # flush A, B to clear the writeback
1691     + */
1692     + if (pmd_none(*vmf->pmd) && !vmf->prealloc_pte) {
1693     + vmf->prealloc_pte = pte_alloc_one(vmf->vma->vm_mm,
1694     + vmf->address);
1695     + if (!vmf->prealloc_pte)
1696     + return VM_FAULT_OOM;
1697     + smp_wmb(); /* See comment in __pte_alloc() */
1698     + }
1699     +
1700     ret = vma->vm_ops->fault(vmf);
1701     if (unlikely(ret & (VM_FAULT_ERROR | VM_FAULT_NOPAGE | VM_FAULT_RETRY |
1702     VM_FAULT_DONE_COW)))
1703     diff --git a/mm/slab.c b/mm/slab.c
1704     index 2a5654bb3b3f..9d5de959d9d9 100644
1705     --- a/mm/slab.c
1706     +++ b/mm/slab.c
1707     @@ -679,8 +679,10 @@ static struct alien_cache *__alloc_alien_cache(int node, int entries,
1708     struct alien_cache *alc = NULL;
1709    
1710     alc = kmalloc_node(memsize, gfp, node);
1711     - init_arraycache(&alc->ac, entries, batch);
1712     - spin_lock_init(&alc->lock);
1713     + if (alc) {
1714     + init_arraycache(&alc->ac, entries, batch);
1715     + spin_lock_init(&alc->lock);
1716     + }
1717     return alc;
1718     }
1719    
1720     diff --git a/mm/usercopy.c b/mm/usercopy.c
1721     index 852eb4e53f06..14faadcedd06 100644
1722     --- a/mm/usercopy.c
1723     +++ b/mm/usercopy.c
1724     @@ -247,7 +247,8 @@ static DEFINE_STATIC_KEY_FALSE_RO(bypass_usercopy_checks);
1725     /*
1726     * Validates that the given object is:
1727     * - not bogus address
1728     - * - known-safe heap or stack object
1729     + * - fully contained by stack (or stack frame, when available)
1730     + * - fully within SLAB object (or object whitelist area, when available)
1731     * - not in kernel text
1732     */
1733     void __check_object_size(const void *ptr, unsigned long n, bool to_user)
1734     @@ -262,9 +263,6 @@ void __check_object_size(const void *ptr, unsigned long n, bool to_user)
1735     /* Check for invalid addresses. */
1736     check_bogus_address((const unsigned long)ptr, n, to_user);
1737    
1738     - /* Check for bad heap object. */
1739     - check_heap_object(ptr, n, to_user);
1740     -
1741     /* Check for bad stack object. */
1742     switch (check_stack_object(ptr, n)) {
1743     case NOT_STACK:
1744     @@ -282,6 +280,9 @@ void __check_object_size(const void *ptr, unsigned long n, bool to_user)
1745     usercopy_abort("process stack", NULL, to_user, 0, n);
1746     }
1747    
1748     + /* Check for bad heap object. */
1749     + check_heap_object(ptr, n, to_user);
1750     +
1751     /* Check for object in kernel to avoid text exposure. */
1752     check_kernel_text_object((const unsigned long)ptr, n, to_user);
1753     }
1754     diff --git a/mm/util.c b/mm/util.c
1755     index 8bf08b5b5760..5c9c7359ee8a 100644
1756     --- a/mm/util.c
1757     +++ b/mm/util.c
1758     @@ -478,7 +478,7 @@ bool page_mapped(struct page *page)
1759     return true;
1760     if (PageHuge(page))
1761     return false;
1762     - for (i = 0; i < hpage_nr_pages(page); i++) {
1763     + for (i = 0; i < (1 << compound_order(page)); i++) {
1764     if (atomic_read(&page[i]._mapcount) >= 0)
1765     return true;
1766     }
1767     diff --git a/net/sunrpc/svc.c b/net/sunrpc/svc.c
1768     index d13e05f1a990..d65f8d35de87 100644
1769     --- a/net/sunrpc/svc.c
1770     +++ b/net/sunrpc/svc.c
1771     @@ -1144,6 +1144,8 @@ void svc_printk(struct svc_rqst *rqstp, const char *fmt, ...)
1772     static __printf(2,3) void svc_printk(struct svc_rqst *rqstp, const char *fmt, ...) {}
1773     #endif
1774    
1775     +extern void svc_tcp_prep_reply_hdr(struct svc_rqst *);
1776     +
1777     /*
1778     * Common routine for processing the RPC request.
1779     */
1780     @@ -1172,7 +1174,8 @@ svc_process_common(struct svc_rqst *rqstp, struct kvec *argv, struct kvec *resv)
1781     clear_bit(RQ_DROPME, &rqstp->rq_flags);
1782    
1783     /* Setup reply header */
1784     - rqstp->rq_xprt->xpt_ops->xpo_prep_reply_hdr(rqstp);
1785     + if (rqstp->rq_prot == IPPROTO_TCP)
1786     + svc_tcp_prep_reply_hdr(rqstp);
1787    
1788     svc_putu32(resv, rqstp->rq_xid);
1789    
1790     @@ -1244,7 +1247,7 @@ svc_process_common(struct svc_rqst *rqstp, struct kvec *argv, struct kvec *resv)
1791     * for lower versions. RPC_PROG_MISMATCH seems to be the closest
1792     * fit.
1793     */
1794     - if (versp->vs_need_cong_ctrl &&
1795     + if (versp->vs_need_cong_ctrl && rqstp->rq_xprt &&
1796     !test_bit(XPT_CONG_CTRL, &rqstp->rq_xprt->xpt_flags))
1797     goto err_bad_vers;
1798    
1799     @@ -1336,7 +1339,7 @@ svc_process_common(struct svc_rqst *rqstp, struct kvec *argv, struct kvec *resv)
1800     return 0;
1801    
1802     close:
1803     - if (test_bit(XPT_TEMP, &rqstp->rq_xprt->xpt_flags))
1804     + if (rqstp->rq_xprt && test_bit(XPT_TEMP, &rqstp->rq_xprt->xpt_flags))
1805     svc_close_xprt(rqstp->rq_xprt);
1806     dprintk("svc: svc_process close\n");
1807     return 0;
1808     @@ -1459,10 +1462,10 @@ bc_svc_process(struct svc_serv *serv, struct rpc_rqst *req,
1809     dprintk("svc: %s(%p)\n", __func__, req);
1810    
1811     /* Build the svc_rqst used by the common processing routine */
1812     - rqstp->rq_xprt = serv->sv_bc_xprt;
1813     rqstp->rq_xid = req->rq_xid;
1814     rqstp->rq_prot = req->rq_xprt->prot;
1815     rqstp->rq_server = serv;
1816     + rqstp->rq_bc_net = req->rq_xprt->xprt_net;
1817    
1818     rqstp->rq_addrlen = sizeof(req->rq_xprt->addr);
1819     memcpy(&rqstp->rq_addr, &req->rq_xprt->addr, rqstp->rq_addrlen);
1820     diff --git a/net/sunrpc/svc_xprt.c b/net/sunrpc/svc_xprt.c
1821     index 51d36230b6e3..bd42da287c26 100644
1822     --- a/net/sunrpc/svc_xprt.c
1823     +++ b/net/sunrpc/svc_xprt.c
1824     @@ -468,10 +468,11 @@ out:
1825     */
1826     void svc_reserve(struct svc_rqst *rqstp, int space)
1827     {
1828     + struct svc_xprt *xprt = rqstp->rq_xprt;
1829     +
1830     space += rqstp->rq_res.head[0].iov_len;
1831    
1832     - if (space < rqstp->rq_reserved) {
1833     - struct svc_xprt *xprt = rqstp->rq_xprt;
1834     + if (xprt && space < rqstp->rq_reserved) {
1835     atomic_sub((rqstp->rq_reserved - space), &xprt->xpt_reserved);
1836     rqstp->rq_reserved = space;
1837    
1838     diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c
1839     index b7e67310ec37..b90492c43711 100644
1840     --- a/net/sunrpc/svcsock.c
1841     +++ b/net/sunrpc/svcsock.c
1842     @@ -1173,7 +1173,7 @@ static int svc_tcp_sendto(struct svc_rqst *rqstp)
1843     /*
1844     * Setup response header. TCP has a 4B record length field.
1845     */
1846     -static void svc_tcp_prep_reply_hdr(struct svc_rqst *rqstp)
1847     +void svc_tcp_prep_reply_hdr(struct svc_rqst *rqstp)
1848     {
1849     struct kvec *resv = &rqstp->rq_res.head[0];
1850    
1851     diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
1852     index 0d998c54564d..5a5b3780456f 100644
1853     --- a/scripts/mod/modpost.c
1854     +++ b/scripts/mod/modpost.c
1855     @@ -2157,7 +2157,7 @@ static void add_intree_flag(struct buffer *b, int is_intree)
1856     /* Cannot check for assembler */
1857     static void add_retpoline(struct buffer *b)
1858     {
1859     - buf_printf(b, "\n#ifdef RETPOLINE\n");
1860     + buf_printf(b, "\n#ifdef CONFIG_RETPOLINE\n");
1861     buf_printf(b, "MODULE_INFO(retpoline, \"Y\");\n");
1862     buf_printf(b, "#endif\n");
1863     }
1864     diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
1865     index 54fc9c0f07de..0d95316d6dbd 100644
1866     --- a/sound/pci/hda/patch_realtek.c
1867     +++ b/sound/pci/hda/patch_realtek.c
1868     @@ -4102,6 +4102,7 @@ static void alc_headset_mode_unplugged(struct hda_codec *codec)
1869     case 0x10ec0295:
1870     case 0x10ec0289:
1871     case 0x10ec0299:
1872     + alc_process_coef_fw(codec, alc225_pre_hsmode);
1873     alc_process_coef_fw(codec, coef0225);
1874     break;
1875     case 0x10ec0867:
1876     @@ -5380,6 +5381,13 @@ static void alc285_fixup_invalidate_dacs(struct hda_codec *codec,
1877     snd_hda_override_wcaps(codec, 0x03, 0);
1878     }
1879    
1880     +static void alc_fixup_disable_mic_vref(struct hda_codec *codec,
1881     + const struct hda_fixup *fix, int action)
1882     +{
1883     + if (action == HDA_FIXUP_ACT_PRE_PROBE)
1884     + snd_hda_codec_set_pin_target(codec, 0x19, PIN_VREFHIZ);
1885     +}
1886     +
1887     /* for hda_fixup_thinkpad_acpi() */
1888     #include "thinkpad_helper.c"
1889    
1890     @@ -5492,6 +5500,7 @@ enum {
1891     ALC293_FIXUP_LENOVO_SPK_NOISE,
1892     ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY,
1893     ALC255_FIXUP_DELL_SPK_NOISE,
1894     + ALC225_FIXUP_DISABLE_MIC_VREF,
1895     ALC225_FIXUP_DELL1_MIC_NO_PRESENCE,
1896     ALC295_FIXUP_DISABLE_DAC3,
1897     ALC280_FIXUP_HP_HEADSET_MIC,
1898     @@ -6191,6 +6200,12 @@ static const struct hda_fixup alc269_fixups[] = {
1899     .chained = true,
1900     .chain_id = ALC255_FIXUP_DELL1_MIC_NO_PRESENCE
1901     },
1902     + [ALC225_FIXUP_DISABLE_MIC_VREF] = {
1903     + .type = HDA_FIXUP_FUNC,
1904     + .v.func = alc_fixup_disable_mic_vref,
1905     + .chained = true,
1906     + .chain_id = ALC269_FIXUP_DELL1_MIC_NO_PRESENCE
1907     + },
1908     [ALC225_FIXUP_DELL1_MIC_NO_PRESENCE] = {
1909     .type = HDA_FIXUP_VERBS,
1910     .v.verbs = (const struct hda_verb[]) {
1911     @@ -6200,7 +6215,7 @@ static const struct hda_fixup alc269_fixups[] = {
1912     {}
1913     },
1914     .chained = true,
1915     - .chain_id = ALC269_FIXUP_DELL1_MIC_NO_PRESENCE
1916     + .chain_id = ALC225_FIXUP_DISABLE_MIC_VREF
1917     },
1918     [ALC280_FIXUP_HP_HEADSET_MIC] = {
1919     .type = HDA_FIXUP_FUNC,
1920     @@ -6503,6 +6518,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
1921     SND_PCI_QUIRK(0x1028, 0x0871, "Dell Precision 3630", ALC255_FIXUP_DELL_HEADSET_MIC),
1922     SND_PCI_QUIRK(0x1028, 0x0872, "Dell Precision 3630", ALC255_FIXUP_DELL_HEADSET_MIC),
1923     SND_PCI_QUIRK(0x1028, 0x0873, "Dell Precision 3930", ALC255_FIXUP_DUMMY_LINEOUT_VERB),
1924     + SND_PCI_QUIRK(0x1028, 0x0935, "Dell", ALC274_FIXUP_DELL_AIO_LINEOUT_VERB),
1925     SND_PCI_QUIRK(0x1028, 0x164a, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
1926     SND_PCI_QUIRK(0x1028, 0x164b, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
1927     SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC2),