Magellan Linux

Contents of /trunk/kernel-alx/patches-5.4/0150-5.4.51-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3544 - (show annotations) (download)
Wed Jul 15 07:48:05 2020 UTC (3 years, 9 months ago) by niro
File size: 80373 byte(s)
-linux-5.4.51
1 diff --git a/Makefile b/Makefile
2 index 380e398b2995..6ac83669e073 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,7 +1,7 @@
6 # SPDX-License-Identifier: GPL-2.0
7 VERSION = 5
8 PATCHLEVEL = 4
9 -SUBLEVEL = 50
10 +SUBLEVEL = 51
11 EXTRAVERSION =
12 NAME = Kleptomaniac Octopus
13
14 diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c
15 index 342e41de9d64..6a2536460026 100644
16 --- a/arch/mips/kernel/traps.c
17 +++ b/arch/mips/kernel/traps.c
18 @@ -2126,6 +2126,7 @@ static void configure_status(void)
19
20 change_c0_status(ST0_CU|ST0_MX|ST0_RE|ST0_FR|ST0_BEV|ST0_TS|ST0_KX|ST0_SX|ST0_UX,
21 status_set);
22 + back_to_back_c0_hazard();
23 }
24
25 unsigned int hwrena;
26 diff --git a/arch/mips/lantiq/xway/sysctrl.c b/arch/mips/lantiq/xway/sysctrl.c
27 index 156a95ac5c72..2ee68d6e8bb9 100644
28 --- a/arch/mips/lantiq/xway/sysctrl.c
29 +++ b/arch/mips/lantiq/xway/sysctrl.c
30 @@ -514,8 +514,8 @@ void __init ltq_soc_init(void)
31 clkdev_add_pmu("1e10b308.eth", NULL, 0, 0, PMU_SWITCH |
32 PMU_PPE_DP | PMU_PPE_TC);
33 clkdev_add_pmu("1da00000.usif", "NULL", 1, 0, PMU_USIF);
34 - clkdev_add_pmu("1e108000.gswip", "gphy0", 0, 0, PMU_GPHY);
35 - clkdev_add_pmu("1e108000.gswip", "gphy1", 0, 0, PMU_GPHY);
36 + clkdev_add_pmu("1e108000.switch", "gphy0", 0, 0, PMU_GPHY);
37 + clkdev_add_pmu("1e108000.switch", "gphy1", 0, 0, PMU_GPHY);
38 clkdev_add_pmu("1e103100.deu", NULL, 1, 0, PMU_DEU);
39 clkdev_add_pmu("1e116000.mei", "afe", 1, 2, PMU_ANALOG_DSL_AFE);
40 clkdev_add_pmu("1e116000.mei", "dfe", 1, 0, PMU_DFE);
41 @@ -538,8 +538,8 @@ void __init ltq_soc_init(void)
42 PMU_SWITCH | PMU_PPE_DPLUS | PMU_PPE_DPLUM |
43 PMU_PPE_EMA | PMU_PPE_TC | PMU_PPE_SLL01 |
44 PMU_PPE_QSB | PMU_PPE_TOP);
45 - clkdev_add_pmu("1e108000.gswip", "gphy0", 0, 0, PMU_GPHY);
46 - clkdev_add_pmu("1e108000.gswip", "gphy1", 0, 0, PMU_GPHY);
47 + clkdev_add_pmu("1e108000.switch", "gphy0", 0, 0, PMU_GPHY);
48 + clkdev_add_pmu("1e108000.switch", "gphy1", 0, 0, PMU_GPHY);
49 clkdev_add_pmu("1e103000.sdio", NULL, 1, 0, PMU_SDIO);
50 clkdev_add_pmu("1e103100.deu", NULL, 1, 0, PMU_DEU);
51 clkdev_add_pmu("1e116000.mei", "dfe", 1, 0, PMU_DFE);
52 diff --git a/arch/s390/kernel/debug.c b/arch/s390/kernel/debug.c
53 index 6d321f5f101d..7184d55d87aa 100644
54 --- a/arch/s390/kernel/debug.c
55 +++ b/arch/s390/kernel/debug.c
56 @@ -198,9 +198,10 @@ static debug_entry_t ***debug_areas_alloc(int pages_per_area, int nr_areas)
57 if (!areas)
58 goto fail_malloc_areas;
59 for (i = 0; i < nr_areas; i++) {
60 + /* GFP_NOWARN to avoid user triggerable WARN, we handle fails */
61 areas[i] = kmalloc_array(pages_per_area,
62 sizeof(debug_entry_t *),
63 - GFP_KERNEL);
64 + GFP_KERNEL | __GFP_NOWARN);
65 if (!areas[i])
66 goto fail_malloc_areas2;
67 for (j = 0; j < pages_per_area; j++) {
68 diff --git a/arch/x86/kernel/cpu/resctrl/core.c b/arch/x86/kernel/cpu/resctrl/core.c
69 index d8cc5223b7ce..87a34b6e06a2 100644
70 --- a/arch/x86/kernel/cpu/resctrl/core.c
71 +++ b/arch/x86/kernel/cpu/resctrl/core.c
72 @@ -260,6 +260,7 @@ static bool __get_mem_config_intel(struct rdt_resource *r)
73 r->num_closid = edx.split.cos_max + 1;
74 r->membw.max_delay = eax.split.max_delay + 1;
75 r->default_ctrl = MAX_MBA_BW;
76 + r->membw.mbm_width = MBM_CNTR_WIDTH;
77 if (ecx & MBA_IS_LINEAR) {
78 r->membw.delay_linear = true;
79 r->membw.min_bw = MAX_MBA_BW - r->membw.max_delay;
80 @@ -289,6 +290,7 @@ static bool __rdt_get_mem_config_amd(struct rdt_resource *r)
81 /* AMD does not use delay */
82 r->membw.delay_linear = false;
83
84 + r->membw.mbm_width = MBM_CNTR_WIDTH_AMD;
85 r->membw.min_bw = 0;
86 r->membw.bw_gran = 1;
87 /* Max value is 2048, Data width should be 4 in decimal */
88 diff --git a/arch/x86/kernel/cpu/resctrl/internal.h b/arch/x86/kernel/cpu/resctrl/internal.h
89 index 3dd13f3a8b23..17095435c875 100644
90 --- a/arch/x86/kernel/cpu/resctrl/internal.h
91 +++ b/arch/x86/kernel/cpu/resctrl/internal.h
92 @@ -32,6 +32,7 @@
93 #define CQM_LIMBOCHECK_INTERVAL 1000
94
95 #define MBM_CNTR_WIDTH 24
96 +#define MBM_CNTR_WIDTH_AMD 44
97 #define MBM_OVERFLOW_INTERVAL 1000
98 #define MAX_MBA_BW 100u
99 #define MBA_IS_LINEAR 0x4
100 @@ -368,6 +369,7 @@ struct rdt_cache {
101 * @min_bw: Minimum memory bandwidth percentage user can request
102 * @bw_gran: Granularity at which the memory bandwidth is allocated
103 * @delay_linear: True if memory B/W delay is in linear scale
104 + * @mbm_width: memory B/W monitor counter width
105 * @mba_sc: True if MBA software controller(mba_sc) is enabled
106 * @mb_map: Mapping of memory B/W percentage to memory B/W delay
107 */
108 @@ -376,6 +378,7 @@ struct rdt_membw {
109 u32 min_bw;
110 u32 bw_gran;
111 u32 delay_linear;
112 + u32 mbm_width;
113 bool mba_sc;
114 u32 *mb_map;
115 };
116 diff --git a/arch/x86/kernel/cpu/resctrl/monitor.c b/arch/x86/kernel/cpu/resctrl/monitor.c
117 index 773124b0e18a..0cf4f87f6012 100644
118 --- a/arch/x86/kernel/cpu/resctrl/monitor.c
119 +++ b/arch/x86/kernel/cpu/resctrl/monitor.c
120 @@ -216,8 +216,9 @@ void free_rmid(u32 rmid)
121
122 static u64 mbm_overflow_count(u64 prev_msr, u64 cur_msr)
123 {
124 - u64 shift = 64 - MBM_CNTR_WIDTH, chunks;
125 + u64 shift, chunks;
126
127 + shift = 64 - rdt_resources_all[RDT_RESOURCE_MBA].membw.mbm_width;
128 chunks = (cur_msr << shift) - (prev_msr << shift);
129 return chunks >>= shift;
130 }
131 diff --git a/crypto/af_alg.c b/crypto/af_alg.c
132 index 3d8e53010cda..a3b9df99af6d 100644
133 --- a/crypto/af_alg.c
134 +++ b/crypto/af_alg.c
135 @@ -128,21 +128,15 @@ EXPORT_SYMBOL_GPL(af_alg_release);
136 void af_alg_release_parent(struct sock *sk)
137 {
138 struct alg_sock *ask = alg_sk(sk);
139 - unsigned int nokey = ask->nokey_refcnt;
140 - bool last = nokey && !ask->refcnt;
141 + unsigned int nokey = atomic_read(&ask->nokey_refcnt);
142
143 sk = ask->parent;
144 ask = alg_sk(sk);
145
146 - local_bh_disable();
147 - bh_lock_sock(sk);
148 - ask->nokey_refcnt -= nokey;
149 - if (!last)
150 - last = !--ask->refcnt;
151 - bh_unlock_sock(sk);
152 - local_bh_enable();
153 + if (nokey)
154 + atomic_dec(&ask->nokey_refcnt);
155
156 - if (last)
157 + if (atomic_dec_and_test(&ask->refcnt))
158 sock_put(sk);
159 }
160 EXPORT_SYMBOL_GPL(af_alg_release_parent);
161 @@ -187,7 +181,7 @@ static int alg_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
162
163 err = -EBUSY;
164 lock_sock(sk);
165 - if (ask->refcnt | ask->nokey_refcnt)
166 + if (atomic_read(&ask->refcnt))
167 goto unlock;
168
169 swap(ask->type, type);
170 @@ -236,7 +230,7 @@ static int alg_setsockopt(struct socket *sock, int level, int optname,
171 int err = -EBUSY;
172
173 lock_sock(sk);
174 - if (ask->refcnt)
175 + if (atomic_read(&ask->refcnt) != atomic_read(&ask->nokey_refcnt))
176 goto unlock;
177
178 type = ask->type;
179 @@ -301,12 +295,14 @@ int af_alg_accept(struct sock *sk, struct socket *newsock, bool kern)
180 if (err)
181 goto unlock;
182
183 - if (nokey || !ask->refcnt++)
184 + if (atomic_inc_return_relaxed(&ask->refcnt) == 1)
185 sock_hold(sk);
186 - ask->nokey_refcnt += nokey;
187 + if (nokey) {
188 + atomic_inc(&ask->nokey_refcnt);
189 + atomic_set(&alg_sk(sk2)->nokey_refcnt, 1);
190 + }
191 alg_sk(sk2)->parent = sk;
192 alg_sk(sk2)->type = type;
193 - alg_sk(sk2)->nokey_refcnt = nokey;
194
195 newsock->ops = type->ops;
196 newsock->state = SS_CONNECTED;
197 diff --git a/crypto/algif_aead.c b/crypto/algif_aead.c
198 index eb1910b6d434..0ae000a61c7f 100644
199 --- a/crypto/algif_aead.c
200 +++ b/crypto/algif_aead.c
201 @@ -384,7 +384,7 @@ static int aead_check_key(struct socket *sock)
202 struct alg_sock *ask = alg_sk(sk);
203
204 lock_sock(sk);
205 - if (ask->refcnt)
206 + if (!atomic_read(&ask->nokey_refcnt))
207 goto unlock_child;
208
209 psk = ask->parent;
210 @@ -396,11 +396,8 @@ static int aead_check_key(struct socket *sock)
211 if (crypto_aead_get_flags(tfm->aead) & CRYPTO_TFM_NEED_KEY)
212 goto unlock;
213
214 - if (!pask->refcnt++)
215 - sock_hold(psk);
216 -
217 - ask->refcnt = 1;
218 - sock_put(psk);
219 + atomic_dec(&pask->nokey_refcnt);
220 + atomic_set(&ask->nokey_refcnt, 0);
221
222 err = 0;
223
224 diff --git a/crypto/algif_hash.c b/crypto/algif_hash.c
225 index 178f4cd75ef1..8673ac8828e9 100644
226 --- a/crypto/algif_hash.c
227 +++ b/crypto/algif_hash.c
228 @@ -301,7 +301,7 @@ static int hash_check_key(struct socket *sock)
229 struct alg_sock *ask = alg_sk(sk);
230
231 lock_sock(sk);
232 - if (ask->refcnt)
233 + if (!atomic_read(&ask->nokey_refcnt))
234 goto unlock_child;
235
236 psk = ask->parent;
237 @@ -313,11 +313,8 @@ static int hash_check_key(struct socket *sock)
238 if (crypto_ahash_get_flags(tfm) & CRYPTO_TFM_NEED_KEY)
239 goto unlock;
240
241 - if (!pask->refcnt++)
242 - sock_hold(psk);
243 -
244 - ask->refcnt = 1;
245 - sock_put(psk);
246 + atomic_dec(&pask->nokey_refcnt);
247 + atomic_set(&ask->nokey_refcnt, 0);
248
249 err = 0;
250
251 diff --git a/crypto/algif_skcipher.c b/crypto/algif_skcipher.c
252 index 4c3bdffe0c3a..ec5567c87a6d 100644
253 --- a/crypto/algif_skcipher.c
254 +++ b/crypto/algif_skcipher.c
255 @@ -211,7 +211,7 @@ static int skcipher_check_key(struct socket *sock)
256 struct alg_sock *ask = alg_sk(sk);
257
258 lock_sock(sk);
259 - if (ask->refcnt)
260 + if (!atomic_read(&ask->nokey_refcnt))
261 goto unlock_child;
262
263 psk = ask->parent;
264 @@ -223,11 +223,8 @@ static int skcipher_check_key(struct socket *sock)
265 if (crypto_skcipher_get_flags(tfm) & CRYPTO_TFM_NEED_KEY)
266 goto unlock;
267
268 - if (!pask->refcnt++)
269 - sock_hold(psk);
270 -
271 - ask->refcnt = 1;
272 - sock_put(psk);
273 + atomic_dec(&pask->nokey_refcnt);
274 + atomic_set(&ask->nokey_refcnt, 0);
275
276 err = 0;
277
278 diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c
279 index 0cf2fe290230..c1de270046bf 100644
280 --- a/drivers/block/virtio_blk.c
281 +++ b/drivers/block/virtio_blk.c
282 @@ -990,6 +990,7 @@ out_put_disk:
283 put_disk(vblk->disk);
284 out_free_vq:
285 vdev->config->del_vqs(vdev);
286 + kfree(vblk->vqs);
287 out_free_vblk:
288 kfree(vblk);
289 out_free_index:
290 diff --git a/drivers/char/tpm/tpm-dev-common.c b/drivers/char/tpm/tpm-dev-common.c
291 index 87f449340202..1784530b8387 100644
292 --- a/drivers/char/tpm/tpm-dev-common.c
293 +++ b/drivers/char/tpm/tpm-dev-common.c
294 @@ -189,15 +189,6 @@ ssize_t tpm_common_write(struct file *file, const char __user *buf,
295 goto out;
296 }
297
298 - /* atomic tpm command send and result receive. We only hold the ops
299 - * lock during this period so that the tpm can be unregistered even if
300 - * the char dev is held open.
301 - */
302 - if (tpm_try_get_ops(priv->chip)) {
303 - ret = -EPIPE;
304 - goto out;
305 - }
306 -
307 priv->response_length = 0;
308 priv->response_read = false;
309 *off = 0;
310 @@ -211,11 +202,19 @@ ssize_t tpm_common_write(struct file *file, const char __user *buf,
311 if (file->f_flags & O_NONBLOCK) {
312 priv->command_enqueued = true;
313 queue_work(tpm_dev_wq, &priv->async_work);
314 - tpm_put_ops(priv->chip);
315 mutex_unlock(&priv->buffer_mutex);
316 return size;
317 }
318
319 + /* atomic tpm command send and result receive. We only hold the ops
320 + * lock during this period so that the tpm can be unregistered even if
321 + * the char dev is held open.
322 + */
323 + if (tpm_try_get_ops(priv->chip)) {
324 + ret = -EPIPE;
325 + goto out;
326 + }
327 +
328 ret = tpm_dev_transmit(priv->chip, priv->space, priv->data_buffer,
329 sizeof(priv->data_buffer));
330 tpm_put_ops(priv->chip);
331 diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
332 index adc88e1dc999..cf65a47310c3 100644
333 --- a/drivers/dma-buf/dma-buf.c
334 +++ b/drivers/dma-buf/dma-buf.c
335 @@ -54,37 +54,11 @@ static char *dmabuffs_dname(struct dentry *dentry, char *buffer, int buflen)
336 dentry->d_name.name, ret > 0 ? name : "");
337 }
338
339 -static const struct dentry_operations dma_buf_dentry_ops = {
340 - .d_dname = dmabuffs_dname,
341 -};
342 -
343 -static struct vfsmount *dma_buf_mnt;
344 -
345 -static int dma_buf_fs_init_context(struct fs_context *fc)
346 -{
347 - struct pseudo_fs_context *ctx;
348 -
349 - ctx = init_pseudo(fc, DMA_BUF_MAGIC);
350 - if (!ctx)
351 - return -ENOMEM;
352 - ctx->dops = &dma_buf_dentry_ops;
353 - return 0;
354 -}
355 -
356 -static struct file_system_type dma_buf_fs_type = {
357 - .name = "dmabuf",
358 - .init_fs_context = dma_buf_fs_init_context,
359 - .kill_sb = kill_anon_super,
360 -};
361 -
362 -static int dma_buf_release(struct inode *inode, struct file *file)
363 +static void dma_buf_release(struct dentry *dentry)
364 {
365 struct dma_buf *dmabuf;
366
367 - if (!is_dma_buf_file(file))
368 - return -EINVAL;
369 -
370 - dmabuf = file->private_data;
371 + dmabuf = dentry->d_fsdata;
372
373 BUG_ON(dmabuf->vmapping_counter);
374
375 @@ -110,9 +84,32 @@ static int dma_buf_release(struct inode *inode, struct file *file)
376 module_put(dmabuf->owner);
377 kfree(dmabuf->name);
378 kfree(dmabuf);
379 +}
380 +
381 +static const struct dentry_operations dma_buf_dentry_ops = {
382 + .d_dname = dmabuffs_dname,
383 + .d_release = dma_buf_release,
384 +};
385 +
386 +static struct vfsmount *dma_buf_mnt;
387 +
388 +static int dma_buf_fs_init_context(struct fs_context *fc)
389 +{
390 + struct pseudo_fs_context *ctx;
391 +
392 + ctx = init_pseudo(fc, DMA_BUF_MAGIC);
393 + if (!ctx)
394 + return -ENOMEM;
395 + ctx->dops = &dma_buf_dentry_ops;
396 return 0;
397 }
398
399 +static struct file_system_type dma_buf_fs_type = {
400 + .name = "dmabuf",
401 + .init_fs_context = dma_buf_fs_init_context,
402 + .kill_sb = kill_anon_super,
403 +};
404 +
405 static int dma_buf_mmap_internal(struct file *file, struct vm_area_struct *vma)
406 {
407 struct dma_buf *dmabuf;
408 @@ -412,7 +409,6 @@ static void dma_buf_show_fdinfo(struct seq_file *m, struct file *file)
409 }
410
411 static const struct file_operations dma_buf_fops = {
412 - .release = dma_buf_release,
413 .mmap = dma_buf_mmap_internal,
414 .llseek = dma_buf_llseek,
415 .poll = dma_buf_poll,
416 diff --git a/drivers/edac/amd64_edac.c b/drivers/edac/amd64_edac.c
417 index ad7d2bce91cd..125a44d5a69e 100644
418 --- a/drivers/edac/amd64_edac.c
419 +++ b/drivers/edac/amd64_edac.c
420 @@ -265,6 +265,8 @@ static int get_scrub_rate(struct mem_ctl_info *mci)
421
422 if (pvt->model == 0x60)
423 amd64_read_pci_cfg(pvt->F2, F15H_M60H_SCRCTRL, &scrubval);
424 + else
425 + amd64_read_pci_cfg(pvt->F3, SCRCTRL, &scrubval);
426 break;
427
428 case 0x17:
429 diff --git a/drivers/firmware/efi/Kconfig b/drivers/firmware/efi/Kconfig
430 index b248870a9806..6a6b412206ec 100644
431 --- a/drivers/firmware/efi/Kconfig
432 +++ b/drivers/firmware/efi/Kconfig
433 @@ -219,3 +219,14 @@ config EFI_EARLYCON
434 depends on SERIAL_EARLYCON && !ARM && !IA64
435 select FONT_SUPPORT
436 select ARCH_USE_MEMREMAP_PROT
437 +
438 +config EFI_CUSTOM_SSDT_OVERLAYS
439 + bool "Load custom ACPI SSDT overlay from an EFI variable"
440 + depends on EFI_VARS && ACPI
441 + default ACPI_TABLE_UPGRADE
442 + help
443 + Allow loading of an ACPI SSDT overlay from an EFI variable specified
444 + by a kernel command line option.
445 +
446 + See Documentation/admin-guide/acpi/ssdt-overlays.rst for more
447 + information.
448 diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c
449 index e3861d267d9a..c1167ef5d2b3 100644
450 --- a/drivers/firmware/efi/efi.c
451 +++ b/drivers/firmware/efi/efi.c
452 @@ -217,7 +217,7 @@ static void generic_ops_unregister(void)
453 efivars_unregister(&generic_efivars);
454 }
455
456 -#if IS_ENABLED(CONFIG_ACPI)
457 +#ifdef CONFIG_EFI_CUSTOM_SSDT_OVERLAYS
458 #define EFIVAR_SSDT_NAME_MAX 16
459 static char efivar_ssdt[EFIVAR_SSDT_NAME_MAX] __initdata;
460 static int __init efivar_ssdt_setup(char *str)
461 diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
462 index daf687428cdb..663314f807fa 100644
463 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
464 +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
465 @@ -150,6 +150,7 @@ int amdgpu_atomfirmware_get_vram_width(struct amdgpu_device *adev)
466 (mode_info->atom_context->bios + data_offset);
467 switch (crev) {
468 case 11:
469 + case 12:
470 mem_channel_number = igp_info->v11.umachannelnumber;
471 /* channel width is 64 */
472 return mem_channel_number * 64;
473 diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
474 index d1d2372ab7ca..3f744e72912f 100644
475 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
476 +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
477 @@ -2101,7 +2101,7 @@ static ssize_t amdgpu_hwmon_show_sclk(struct device *dev,
478 if (r)
479 return r;
480
481 - return snprintf(buf, PAGE_SIZE, "%d\n", sclk * 10 * 1000);
482 + return snprintf(buf, PAGE_SIZE, "%u\n", sclk * 10 * 1000);
483 }
484
485 static ssize_t amdgpu_hwmon_show_sclk_label(struct device *dev,
486 @@ -2131,7 +2131,7 @@ static ssize_t amdgpu_hwmon_show_mclk(struct device *dev,
487 if (r)
488 return r;
489
490 - return snprintf(buf, PAGE_SIZE, "%d\n", mclk * 10 * 1000);
491 + return snprintf(buf, PAGE_SIZE, "%u\n", mclk * 10 * 1000);
492 }
493
494 static ssize_t amdgpu_hwmon_show_mclk_label(struct device *dev,
495 diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c
496 index 47e7d11ca0c9..68d56a91d44b 100644
497 --- a/drivers/gpu/drm/amd/display/dc/core/dc.c
498 +++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
499 @@ -2226,10 +2226,12 @@ void dc_commit_updates_for_stream(struct dc *dc,
500
501 copy_stream_update_to_stream(dc, context, stream, stream_update);
502
503 - if (!dc->res_pool->funcs->validate_bandwidth(dc, context, false)) {
504 - DC_ERROR("Mode validation failed for stream update!\n");
505 - dc_release_state(context);
506 - return;
507 + if (update_type > UPDATE_TYPE_FAST) {
508 + if (!dc->res_pool->funcs->validate_bandwidth(dc, context, false)) {
509 + DC_ERROR("Mode validation failed for stream update!\n");
510 + dc_release_state(context);
511 + return;
512 + }
513 }
514
515 commit_planes_for_stream(
516 diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
517 index d82ea994063f..edf7989d7a8e 100644
518 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
519 +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
520 @@ -2232,7 +2232,7 @@ struct drm_encoder *dpu_encoder_init(struct drm_device *dev,
521
522 dpu_enc = devm_kzalloc(dev->dev, sizeof(*dpu_enc), GFP_KERNEL);
523 if (!dpu_enc)
524 - return ERR_PTR(ENOMEM);
525 + return ERR_PTR(-ENOMEM);
526
527 rc = drm_encoder_init(dev, &dpu_enc->base, &dpu_encoder_funcs,
528 drm_enc_mode, NULL);
529 diff --git a/drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c b/drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c
530 index 9c3bdfd20337..63b4de81686a 100644
531 --- a/drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c
532 +++ b/drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c
533 @@ -262,9 +262,8 @@ sun4i_hdmi_connector_detect(struct drm_connector *connector, bool force)
534 struct sun4i_hdmi *hdmi = drm_connector_to_sun4i_hdmi(connector);
535 unsigned long reg;
536
537 - if (readl_poll_timeout(hdmi->base + SUN4I_HDMI_HPD_REG, reg,
538 - reg & SUN4I_HDMI_HPD_HIGH,
539 - 0, 500000)) {
540 + reg = readl(hdmi->base + SUN4I_HDMI_HPD_REG);
541 + if (reg & SUN4I_HDMI_HPD_HIGH) {
542 cec_phys_addr_invalidate(hdmi->cec_adap);
543 return connector_status_disconnected;
544 }
545 diff --git a/drivers/hwmon/acpi_power_meter.c b/drivers/hwmon/acpi_power_meter.c
546 index 4cf25458f0b9..740ac0a1b726 100644
547 --- a/drivers/hwmon/acpi_power_meter.c
548 +++ b/drivers/hwmon/acpi_power_meter.c
549 @@ -883,7 +883,7 @@ static int acpi_power_meter_add(struct acpi_device *device)
550
551 res = setup_attrs(resource);
552 if (res)
553 - goto exit_free;
554 + goto exit_free_capability;
555
556 resource->hwmon_dev = hwmon_device_register(&device->dev);
557 if (IS_ERR(resource->hwmon_dev)) {
558 @@ -896,6 +896,8 @@ static int acpi_power_meter_add(struct acpi_device *device)
559
560 exit_remove:
561 remove_attrs(resource);
562 +exit_free_capability:
563 + free_capabilities(resource);
564 exit_free:
565 kfree(resource);
566 exit:
567 diff --git a/drivers/hwmon/max6697.c b/drivers/hwmon/max6697.c
568 index 743752a2467a..64122eb38060 100644
569 --- a/drivers/hwmon/max6697.c
570 +++ b/drivers/hwmon/max6697.c
571 @@ -38,8 +38,9 @@ static const u8 MAX6697_REG_CRIT[] = {
572 * Map device tree / platform data register bit map to chip bit map.
573 * Applies to alert register and over-temperature register.
574 */
575 -#define MAX6697_MAP_BITS(reg) ((((reg) & 0x7e) >> 1) | \
576 +#define MAX6697_ALERT_MAP_BITS(reg) ((((reg) & 0x7e) >> 1) | \
577 (((reg) & 0x01) << 6) | ((reg) & 0x80))
578 +#define MAX6697_OVERT_MAP_BITS(reg) (((reg) >> 1) | (((reg) & 0x01) << 7))
579
580 #define MAX6697_REG_STAT(n) (0x44 + (n))
581
582 @@ -562,12 +563,12 @@ static int max6697_init_chip(struct max6697_data *data,
583 return ret;
584
585 ret = i2c_smbus_write_byte_data(client, MAX6697_REG_ALERT_MASK,
586 - MAX6697_MAP_BITS(pdata->alert_mask));
587 + MAX6697_ALERT_MAP_BITS(pdata->alert_mask));
588 if (ret < 0)
589 return ret;
590
591 ret = i2c_smbus_write_byte_data(client, MAX6697_REG_OVERT_MASK,
592 - MAX6697_MAP_BITS(pdata->over_temperature_mask));
593 + MAX6697_OVERT_MAP_BITS(pdata->over_temperature_mask));
594 if (ret < 0)
595 return ret;
596
597 diff --git a/drivers/i2c/algos/i2c-algo-pca.c b/drivers/i2c/algos/i2c-algo-pca.c
598 index 5ac93f41bfec..8ea850eed18f 100644
599 --- a/drivers/i2c/algos/i2c-algo-pca.c
600 +++ b/drivers/i2c/algos/i2c-algo-pca.c
601 @@ -314,7 +314,8 @@ static int pca_xfer(struct i2c_adapter *i2c_adap,
602 DEB2("BUS ERROR - SDA Stuck low\n");
603 pca_reset(adap);
604 goto out;
605 - case 0x90: /* Bus error - SCL stuck low */
606 + case 0x78: /* Bus error - SCL stuck low (PCA9665) */
607 + case 0x90: /* Bus error - SCL stuck low (PCA9564) */
608 DEB2("BUS ERROR - SCL Stuck low\n");
609 pca_reset(adap);
610 goto out;
611 diff --git a/drivers/i2c/busses/i2c-mlxcpld.c b/drivers/i2c/busses/i2c-mlxcpld.c
612 index 2fd717d8dd30..71d7bae2cbca 100644
613 --- a/drivers/i2c/busses/i2c-mlxcpld.c
614 +++ b/drivers/i2c/busses/i2c-mlxcpld.c
615 @@ -337,9 +337,9 @@ static int mlxcpld_i2c_wait_for_tc(struct mlxcpld_i2c_priv *priv)
616 if (priv->smbus_block && (val & MLXCPLD_I2C_SMBUS_BLK_BIT)) {
617 mlxcpld_i2c_read_comm(priv, MLXCPLD_LPCI2C_NUM_DAT_REG,
618 &datalen, 1);
619 - if (unlikely(datalen > (I2C_SMBUS_BLOCK_MAX + 1))) {
620 + if (unlikely(datalen > I2C_SMBUS_BLOCK_MAX)) {
621 dev_err(priv->dev, "Incorrect smbus block read message len\n");
622 - return -E2BIG;
623 + return -EPROTO;
624 }
625 } else {
626 datalen = priv->xfer.data_len;
627 diff --git a/drivers/infiniband/core/counters.c b/drivers/infiniband/core/counters.c
628 index 46dd50ff7c85..11210bf7fd61 100644
629 --- a/drivers/infiniband/core/counters.c
630 +++ b/drivers/infiniband/core/counters.c
631 @@ -195,7 +195,7 @@ static int __rdma_counter_unbind_qp(struct ib_qp *qp)
632 return ret;
633 }
634
635 -static void counter_history_stat_update(const struct rdma_counter *counter)
636 +static void counter_history_stat_update(struct rdma_counter *counter)
637 {
638 struct ib_device *dev = counter->device;
639 struct rdma_port_counter *port_counter;
640 @@ -205,6 +205,8 @@ static void counter_history_stat_update(const struct rdma_counter *counter)
641 if (!port_counter->hstats)
642 return;
643
644 + rdma_counter_query_stats(counter);
645 +
646 for (i = 0; i < counter->stats->num_counters; i++)
647 port_counter->hstats->value[i] += counter->stats->value[i];
648 }
649 diff --git a/drivers/irqchip/irq-gic.c b/drivers/irqchip/irq-gic.c
650 index 30ab623343d3..882204d1ef4f 100644
651 --- a/drivers/irqchip/irq-gic.c
652 +++ b/drivers/irqchip/irq-gic.c
653 @@ -329,10 +329,8 @@ static int gic_irq_set_vcpu_affinity(struct irq_data *d, void *vcpu)
654 static int gic_set_affinity(struct irq_data *d, const struct cpumask *mask_val,
655 bool force)
656 {
657 - void __iomem *reg = gic_dist_base(d) + GIC_DIST_TARGET + (gic_irq(d) & ~3);
658 - unsigned int cpu, shift = (gic_irq(d) % 4) * 8;
659 - u32 val, mask, bit;
660 - unsigned long flags;
661 + void __iomem *reg = gic_dist_base(d) + GIC_DIST_TARGET + gic_irq(d);
662 + unsigned int cpu;
663
664 if (!force)
665 cpu = cpumask_any_and(mask_val, cpu_online_mask);
666 @@ -342,13 +340,7 @@ static int gic_set_affinity(struct irq_data *d, const struct cpumask *mask_val,
667 if (cpu >= NR_GIC_CPU_IF || cpu >= nr_cpu_ids)
668 return -EINVAL;
669
670 - gic_lock_irqsave(flags);
671 - mask = 0xff << shift;
672 - bit = gic_cpu_map[cpu] << shift;
673 - val = readl_relaxed(reg) & ~mask;
674 - writel_relaxed(val | bit, reg);
675 - gic_unlock_irqrestore(flags);
676 -
677 + writeb_relaxed(gic_cpu_map[cpu], reg);
678 irq_data_update_effective_affinity(d, cpumask_of(cpu));
679
680 return IRQ_SET_MASK_OK_DONE;
681 diff --git a/drivers/md/dm-zoned-target.c b/drivers/md/dm-zoned-target.c
682 index 03267609b515..6e4f3ef2dd50 100644
683 --- a/drivers/md/dm-zoned-target.c
684 +++ b/drivers/md/dm-zoned-target.c
685 @@ -790,7 +790,7 @@ static int dmz_ctr(struct dm_target *ti, unsigned int argc, char **argv)
686 }
687
688 /* Set target (no write same support) */
689 - ti->max_io_len = dev->zone_nr_sectors << 9;
690 + ti->max_io_len = dev->zone_nr_sectors;
691 ti->num_flush_bios = 1;
692 ti->num_discard_bios = 1;
693 ti->num_write_zeroes_bios = 1;
694 diff --git a/drivers/net/ethernet/chelsio/cxgb4/cudbg_lib.c b/drivers/net/ethernet/chelsio/cxgb4/cudbg_lib.c
695 index 7bcdce182ee5..e26ae298a080 100644
696 --- a/drivers/net/ethernet/chelsio/cxgb4/cudbg_lib.c
697 +++ b/drivers/net/ethernet/chelsio/cxgb4/cudbg_lib.c
698 @@ -1980,7 +1980,6 @@ int cudbg_collect_dump_context(struct cudbg_init *pdbg_init,
699 u8 mem_type[CTXT_INGRESS + 1] = { 0 };
700 struct cudbg_buffer temp_buff = { 0 };
701 struct cudbg_ch_cntxt *buff;
702 - u64 *dst_off, *src_off;
703 u8 *ctx_buf;
704 u8 i, k;
705 int rc;
706 @@ -2049,8 +2048,11 @@ int cudbg_collect_dump_context(struct cudbg_init *pdbg_init,
707 }
708
709 for (j = 0; j < max_ctx_qid; j++) {
710 + __be64 *dst_off;
711 + u64 *src_off;
712 +
713 src_off = (u64 *)(ctx_buf + j * SGE_CTXT_SIZE);
714 - dst_off = (u64 *)buff->data;
715 + dst_off = (__be64 *)buff->data;
716
717 /* The data is stored in 64-bit cpu order. Convert it
718 * to big endian before parsing.
719 diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_filter.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_filter.c
720 index 43b0f8c57da7..375e1be6a2d8 100644
721 --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_filter.c
722 +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_filter.c
723 @@ -165,6 +165,9 @@ static void set_nat_params(struct adapter *adap, struct filter_entry *f,
724 unsigned int tid, bool dip, bool sip, bool dp,
725 bool sp)
726 {
727 + u8 *nat_lp = (u8 *)&f->fs.nat_lport;
728 + u8 *nat_fp = (u8 *)&f->fs.nat_fport;
729 +
730 if (dip) {
731 if (f->fs.type) {
732 set_tcb_field(adap, f, tid, TCB_SND_UNA_RAW_W,
733 @@ -236,8 +239,9 @@ static void set_nat_params(struct adapter *adap, struct filter_entry *f,
734 }
735
736 set_tcb_field(adap, f, tid, TCB_PDU_HDR_LEN_W, WORD_MASK,
737 - (dp ? f->fs.nat_lport : 0) |
738 - (sp ? f->fs.nat_fport << 16 : 0), 1);
739 + (dp ? (nat_lp[1] | nat_lp[0] << 8) : 0) |
740 + (sp ? (nat_fp[1] << 16 | nat_fp[0] << 24) : 0),
741 + 1);
742 }
743
744 /* Validate filter spec against configuration done on the card. */
745 @@ -656,6 +660,9 @@ int set_filter_wr(struct adapter *adapter, int fidx)
746 fwr->fpm = htons(f->fs.mask.fport);
747
748 if (adapter->params.filter2_wr_support) {
749 + u8 *nat_lp = (u8 *)&f->fs.nat_lport;
750 + u8 *nat_fp = (u8 *)&f->fs.nat_fport;
751 +
752 fwr->natmode_to_ulp_type =
753 FW_FILTER2_WR_ULP_TYPE_V(f->fs.nat_mode ?
754 ULP_MODE_TCPDDP :
755 @@ -663,8 +670,8 @@ int set_filter_wr(struct adapter *adapter, int fidx)
756 FW_FILTER2_WR_NATMODE_V(f->fs.nat_mode);
757 memcpy(fwr->newlip, f->fs.nat_lip, sizeof(fwr->newlip));
758 memcpy(fwr->newfip, f->fs.nat_fip, sizeof(fwr->newfip));
759 - fwr->newlport = htons(f->fs.nat_lport);
760 - fwr->newfport = htons(f->fs.nat_fport);
761 + fwr->newlport = htons(nat_lp[1] | nat_lp[0] << 8);
762 + fwr->newfport = htons(nat_fp[1] | nat_fp[0] << 8);
763 }
764
765 /* Mark the filter as "pending" and ship off the Filter Work Request.
766 @@ -832,16 +839,16 @@ static bool is_addr_all_mask(u8 *ipmask, int family)
767 struct in_addr *addr;
768
769 addr = (struct in_addr *)ipmask;
770 - if (addr->s_addr == 0xffffffff)
771 + if (ntohl(addr->s_addr) == 0xffffffff)
772 return true;
773 } else if (family == AF_INET6) {
774 struct in6_addr *addr6;
775
776 addr6 = (struct in6_addr *)ipmask;
777 - if (addr6->s6_addr32[0] == 0xffffffff &&
778 - addr6->s6_addr32[1] == 0xffffffff &&
779 - addr6->s6_addr32[2] == 0xffffffff &&
780 - addr6->s6_addr32[3] == 0xffffffff)
781 + if (ntohl(addr6->s6_addr32[0]) == 0xffffffff &&
782 + ntohl(addr6->s6_addr32[1]) == 0xffffffff &&
783 + ntohl(addr6->s6_addr32[2]) == 0xffffffff &&
784 + ntohl(addr6->s6_addr32[3]) == 0xffffffff)
785 return true;
786 }
787 return false;
788 diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
789 index 069a51847885..deb1c1f30107 100644
790 --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
791 +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
792 @@ -2504,7 +2504,7 @@ int cxgb4_create_server_filter(const struct net_device *dev, unsigned int stid,
793
794 /* Clear out filter specifications */
795 memset(&f->fs, 0, sizeof(struct ch_filter_specification));
796 - f->fs.val.lport = cpu_to_be16(sport);
797 + f->fs.val.lport = be16_to_cpu(sport);
798 f->fs.mask.lport = ~0;
799 val = (u8 *)&sip;
800 if ((val[0] | val[1] | val[2] | val[3]) != 0) {
801 diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c
802 index e447976bdd3e..16a939f9b04d 100644
803 --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c
804 +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c
805 @@ -58,10 +58,6 @@ static struct ch_tc_pedit_fields pedits[] = {
806 PEDIT_FIELDS(IP6_, DST_63_32, 4, nat_lip, 4),
807 PEDIT_FIELDS(IP6_, DST_95_64, 4, nat_lip, 8),
808 PEDIT_FIELDS(IP6_, DST_127_96, 4, nat_lip, 12),
809 - PEDIT_FIELDS(TCP_, SPORT, 2, nat_fport, 0),
810 - PEDIT_FIELDS(TCP_, DPORT, 2, nat_lport, 0),
811 - PEDIT_FIELDS(UDP_, SPORT, 2, nat_fport, 0),
812 - PEDIT_FIELDS(UDP_, DPORT, 2, nat_lport, 0),
813 };
814
815 static struct ch_tc_flower_entry *allocate_flower_entry(void)
816 @@ -156,14 +152,14 @@ static void cxgb4_process_flow_match(struct net_device *dev,
817 struct flow_match_ports match;
818
819 flow_rule_match_ports(rule, &match);
820 - fs->val.lport = cpu_to_be16(match.key->dst);
821 - fs->mask.lport = cpu_to_be16(match.mask->dst);
822 - fs->val.fport = cpu_to_be16(match.key->src);
823 - fs->mask.fport = cpu_to_be16(match.mask->src);
824 + fs->val.lport = be16_to_cpu(match.key->dst);
825 + fs->mask.lport = be16_to_cpu(match.mask->dst);
826 + fs->val.fport = be16_to_cpu(match.key->src);
827 + fs->mask.fport = be16_to_cpu(match.mask->src);
828
829 /* also initialize nat_lport/fport to same values */
830 - fs->nat_lport = cpu_to_be16(match.key->dst);
831 - fs->nat_fport = cpu_to_be16(match.key->src);
832 + fs->nat_lport = fs->val.lport;
833 + fs->nat_fport = fs->val.fport;
834 }
835
836 if (flow_rule_match_key(rule, FLOW_DISSECTOR_KEY_IP)) {
837 @@ -354,12 +350,9 @@ static void process_pedit_field(struct ch_filter_specification *fs, u32 val,
838 switch (offset) {
839 case PEDIT_TCP_SPORT_DPORT:
840 if (~mask & PEDIT_TCP_UDP_SPORT_MASK)
841 - offload_pedit(fs, cpu_to_be32(val) >> 16,
842 - cpu_to_be32(mask) >> 16,
843 - TCP_SPORT);
844 + fs->nat_fport = val;
845 else
846 - offload_pedit(fs, cpu_to_be32(val),
847 - cpu_to_be32(mask), TCP_DPORT);
848 + fs->nat_lport = val >> 16;
849 }
850 fs->nat_mode = NAT_MODE_ALL;
851 break;
852 @@ -367,12 +360,9 @@ static void process_pedit_field(struct ch_filter_specification *fs, u32 val,
853 switch (offset) {
854 case PEDIT_UDP_SPORT_DPORT:
855 if (~mask & PEDIT_TCP_UDP_SPORT_MASK)
856 - offload_pedit(fs, cpu_to_be32(val) >> 16,
857 - cpu_to_be32(mask) >> 16,
858 - UDP_SPORT);
859 + fs->nat_fport = val;
860 else
861 - offload_pedit(fs, cpu_to_be32(val),
862 - cpu_to_be32(mask), UDP_DPORT);
863 + fs->nat_lport = val >> 16;
864 }
865 fs->nat_mode = NAT_MODE_ALL;
866 }
867 diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_u32.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_u32.c
868 index 02fc63fa7f25..b3a342561a96 100644
869 --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_u32.c
870 +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_u32.c
871 @@ -47,7 +47,7 @@ static int fill_match_fields(struct adapter *adap,
872 bool next_header)
873 {
874 unsigned int i, j;
875 - u32 val, mask;
876 + __be32 val, mask;
877 int off, err;
878 bool found;
879
880 @@ -216,7 +216,7 @@ int cxgb4_config_knode(struct net_device *dev, struct tc_cls_u32_offload *cls)
881 const struct cxgb4_next_header *next;
882 bool found = false;
883 unsigned int i, j;
884 - u32 val, mask;
885 + __be32 val, mask;
886 int off;
887
888 if (t->table[link_uhtid - 1].link_handle) {
889 @@ -230,10 +230,10 @@ int cxgb4_config_knode(struct net_device *dev, struct tc_cls_u32_offload *cls)
890
891 /* Try to find matches that allow jumps to next header. */
892 for (i = 0; next[i].jump; i++) {
893 - if (next[i].offoff != cls->knode.sel->offoff ||
894 - next[i].shift != cls->knode.sel->offshift ||
895 - next[i].mask != cls->knode.sel->offmask ||
896 - next[i].offset != cls->knode.sel->off)
897 + if (next[i].sel.offoff != cls->knode.sel->offoff ||
898 + next[i].sel.offshift != cls->knode.sel->offshift ||
899 + next[i].sel.offmask != cls->knode.sel->offmask ||
900 + next[i].sel.off != cls->knode.sel->off)
901 continue;
902
903 /* Found a possible candidate. Find a key that
904 @@ -245,9 +245,9 @@ int cxgb4_config_knode(struct net_device *dev, struct tc_cls_u32_offload *cls)
905 val = cls->knode.sel->keys[j].val;
906 mask = cls->knode.sel->keys[j].mask;
907
908 - if (next[i].match_off == off &&
909 - next[i].match_val == val &&
910 - next[i].match_mask == mask) {
911 + if (next[i].key.off == off &&
912 + next[i].key.val == val &&
913 + next[i].key.mask == mask) {
914 found = true;
915 break;
916 }
917 diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_u32_parse.h b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_u32_parse.h
918 index a4b99edcc339..141085e159e5 100644
919 --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_u32_parse.h
920 +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_u32_parse.h
921 @@ -38,12 +38,12 @@
922 struct cxgb4_match_field {
923 int off; /* Offset from the beginning of the header to match */
924 /* Fill the value/mask pair in the spec if matched */
925 - int (*val)(struct ch_filter_specification *f, u32 val, u32 mask);
926 + int (*val)(struct ch_filter_specification *f, __be32 val, __be32 mask);
927 };
928
929 /* IPv4 match fields */
930 static inline int cxgb4_fill_ipv4_tos(struct ch_filter_specification *f,
931 - u32 val, u32 mask)
932 + __be32 val, __be32 mask)
933 {
934 f->val.tos = (ntohl(val) >> 16) & 0x000000FF;
935 f->mask.tos = (ntohl(mask) >> 16) & 0x000000FF;
936 @@ -52,7 +52,7 @@ static inline int cxgb4_fill_ipv4_tos(struct ch_filter_specification *f,
937 }
938
939 static inline int cxgb4_fill_ipv4_frag(struct ch_filter_specification *f,
940 - u32 val, u32 mask)
941 + __be32 val, __be32 mask)
942 {
943 u32 mask_val;
944 u8 frag_val;
945 @@ -74,7 +74,7 @@ static inline int cxgb4_fill_ipv4_frag(struct ch_filter_specification *f,
946 }
947
948 static inline int cxgb4_fill_ipv4_proto(struct ch_filter_specification *f,
949 - u32 val, u32 mask)
950 + __be32 val, __be32 mask)
951 {
952 f->val.proto = (ntohl(val) >> 16) & 0x000000FF;
953 f->mask.proto = (ntohl(mask) >> 16) & 0x000000FF;
954 @@ -83,7 +83,7 @@ static inline int cxgb4_fill_ipv4_proto(struct ch_filter_specification *f,
955 }
956
957 static inline int cxgb4_fill_ipv4_src_ip(struct ch_filter_specification *f,
958 - u32 val, u32 mask)
959 + __be32 val, __be32 mask)
960 {
961 memcpy(&f->val.fip[0], &val, sizeof(u32));
962 memcpy(&f->mask.fip[0], &mask, sizeof(u32));
963 @@ -92,7 +92,7 @@ static inline int cxgb4_fill_ipv4_src_ip(struct ch_filter_specification *f,
964 }
965
966 static inline int cxgb4_fill_ipv4_dst_ip(struct ch_filter_specification *f,
967 - u32 val, u32 mask)
968 + __be32 val, __be32 mask)
969 {
970 memcpy(&f->val.lip[0], &val, sizeof(u32));
971 memcpy(&f->mask.lip[0], &mask, sizeof(u32));
972 @@ -111,7 +111,7 @@ static const struct cxgb4_match_field cxgb4_ipv4_fields[] = {
973
974 /* IPv6 match fields */
975 static inline int cxgb4_fill_ipv6_tos(struct ch_filter_specification *f,
976 - u32 val, u32 mask)
977 + __be32 val, __be32 mask)
978 {
979 f->val.tos = (ntohl(val) >> 20) & 0x000000FF;
980 f->mask.tos = (ntohl(mask) >> 20) & 0x000000FF;
981 @@ -120,7 +120,7 @@ static inline int cxgb4_fill_ipv6_tos(struct ch_filter_specification *f,
982 }
983
984 static inline int cxgb4_fill_ipv6_proto(struct ch_filter_specification *f,
985 - u32 val, u32 mask)
986 + __be32 val, __be32 mask)
987 {
988 f->val.proto = (ntohl(val) >> 8) & 0x000000FF;
989 f->mask.proto = (ntohl(mask) >> 8) & 0x000000FF;
990 @@ -129,7 +129,7 @@ static inline int cxgb4_fill_ipv6_proto(struct ch_filter_specification *f,
991 }
992
993 static inline int cxgb4_fill_ipv6_src_ip0(struct ch_filter_specification *f,
994 - u32 val, u32 mask)
995 + __be32 val, __be32 mask)
996 {
997 memcpy(&f->val.fip[0], &val, sizeof(u32));
998 memcpy(&f->mask.fip[0], &mask, sizeof(u32));
999 @@ -138,7 +138,7 @@ static inline int cxgb4_fill_ipv6_src_ip0(struct ch_filter_specification *f,
1000 }
1001
1002 static inline int cxgb4_fill_ipv6_src_ip1(struct ch_filter_specification *f,
1003 - u32 val, u32 mask)
1004 + __be32 val, __be32 mask)
1005 {
1006 memcpy(&f->val.fip[4], &val, sizeof(u32));
1007 memcpy(&f->mask.fip[4], &mask, sizeof(u32));
1008 @@ -147,7 +147,7 @@ static inline int cxgb4_fill_ipv6_src_ip1(struct ch_filter_specification *f,
1009 }
1010
1011 static inline int cxgb4_fill_ipv6_src_ip2(struct ch_filter_specification *f,
1012 - u32 val, u32 mask)
1013 + __be32 val, __be32 mask)
1014 {
1015 memcpy(&f->val.fip[8], &val, sizeof(u32));
1016 memcpy(&f->mask.fip[8], &mask, sizeof(u32));
1017 @@ -156,7 +156,7 @@ static inline int cxgb4_fill_ipv6_src_ip2(struct ch_filter_specification *f,
1018 }
1019
1020 static inline int cxgb4_fill_ipv6_src_ip3(struct ch_filter_specification *f,
1021 - u32 val, u32 mask)
1022 + __be32 val, __be32 mask)
1023 {
1024 memcpy(&f->val.fip[12], &val, sizeof(u32));
1025 memcpy(&f->mask.fip[12], &mask, sizeof(u32));
1026 @@ -165,7 +165,7 @@ static inline int cxgb4_fill_ipv6_src_ip3(struct ch_filter_specification *f,
1027 }
1028
1029 static inline int cxgb4_fill_ipv6_dst_ip0(struct ch_filter_specification *f,
1030 - u32 val, u32 mask)
1031 + __be32 val, __be32 mask)
1032 {
1033 memcpy(&f->val.lip[0], &val, sizeof(u32));
1034 memcpy(&f->mask.lip[0], &mask, sizeof(u32));
1035 @@ -174,7 +174,7 @@ static inline int cxgb4_fill_ipv6_dst_ip0(struct ch_filter_specification *f,
1036 }
1037
1038 static inline int cxgb4_fill_ipv6_dst_ip1(struct ch_filter_specification *f,
1039 - u32 val, u32 mask)
1040 + __be32 val, __be32 mask)
1041 {
1042 memcpy(&f->val.lip[4], &val, sizeof(u32));
1043 memcpy(&f->mask.lip[4], &mask, sizeof(u32));
1044 @@ -183,7 +183,7 @@ static inline int cxgb4_fill_ipv6_dst_ip1(struct ch_filter_specification *f,
1045 }
1046
1047 static inline int cxgb4_fill_ipv6_dst_ip2(struct ch_filter_specification *f,
1048 - u32 val, u32 mask)
1049 + __be32 val, __be32 mask)
1050 {
1051 memcpy(&f->val.lip[8], &val, sizeof(u32));
1052 memcpy(&f->mask.lip[8], &mask, sizeof(u32));
1053 @@ -192,7 +192,7 @@ static inline int cxgb4_fill_ipv6_dst_ip2(struct ch_filter_specification *f,
1054 }
1055
1056 static inline int cxgb4_fill_ipv6_dst_ip3(struct ch_filter_specification *f,
1057 - u32 val, u32 mask)
1058 + __be32 val, __be32 mask)
1059 {
1060 memcpy(&f->val.lip[12], &val, sizeof(u32));
1061 memcpy(&f->mask.lip[12], &mask, sizeof(u32));
1062 @@ -216,7 +216,7 @@ static const struct cxgb4_match_field cxgb4_ipv6_fields[] = {
1063
1064 /* TCP/UDP match */
1065 static inline int cxgb4_fill_l4_ports(struct ch_filter_specification *f,
1066 - u32 val, u32 mask)
1067 + __be32 val, __be32 mask)
1068 {
1069 f->val.fport = ntohl(val) >> 16;
1070 f->mask.fport = ntohl(mask) >> 16;
1071 @@ -237,19 +237,13 @@ static const struct cxgb4_match_field cxgb4_udp_fields[] = {
1072 };
1073
1074 struct cxgb4_next_header {
1075 - unsigned int offset; /* Offset to next header */
1076 - /* offset, shift, and mask added to offset above
1077 + /* Offset, shift, and mask added to beginning of the header
1078 * to get to next header. Useful when using a header
1079 * field's value to jump to next header such as IHL field
1080 * in IPv4 header.
1081 */
1082 - unsigned int offoff;
1083 - u32 shift;
1084 - u32 mask;
1085 - /* match criteria to make this jump */
1086 - unsigned int match_off;
1087 - u32 match_val;
1088 - u32 match_mask;
1089 + struct tc_u32_sel sel;
1090 + struct tc_u32_key key;
1091 /* location of jump to make */
1092 const struct cxgb4_match_field *jump;
1093 };
1094 @@ -258,26 +252,74 @@ struct cxgb4_next_header {
1095 * IPv4 header.
1096 */
1097 static const struct cxgb4_next_header cxgb4_ipv4_jumps[] = {
1098 - { .offset = 0, .offoff = 0, .shift = 6, .mask = 0xF,
1099 - .match_off = 8, .match_val = 0x600, .match_mask = 0xFF00,
1100 - .jump = cxgb4_tcp_fields },
1101 - { .offset = 0, .offoff = 0, .shift = 6, .mask = 0xF,
1102 - .match_off = 8, .match_val = 0x1100, .match_mask = 0xFF00,
1103 - .jump = cxgb4_udp_fields },
1104 - { .jump = NULL }
1105 + {
1106 + /* TCP Jump */
1107 + .sel = {
1108 + .off = 0,
1109 + .offoff = 0,
1110 + .offshift = 6,
1111 + .offmask = cpu_to_be16(0x0f00),
1112 + },
1113 + .key = {
1114 + .off = 8,
1115 + .val = cpu_to_be32(0x00060000),
1116 + .mask = cpu_to_be32(0x00ff0000),
1117 + },
1118 + .jump = cxgb4_tcp_fields,
1119 + },
1120 + {
1121 + /* UDP Jump */
1122 + .sel = {
1123 + .off = 0,
1124 + .offoff = 0,
1125 + .offshift = 6,
1126 + .offmask = cpu_to_be16(0x0f00),
1127 + },
1128 + .key = {
1129 + .off = 8,
1130 + .val = cpu_to_be32(0x00110000),
1131 + .mask = cpu_to_be32(0x00ff0000),
1132 + },
1133 + .jump = cxgb4_udp_fields,
1134 + },
1135 + { .jump = NULL },
1136 };
1137
1138 /* Accept a rule with a jump directly past the 40 Bytes of IPv6 fixed header
1139 * to get to transport layer header.
1140 */
1141 static const struct cxgb4_next_header cxgb4_ipv6_jumps[] = {
1142 - { .offset = 0x28, .offoff = 0, .shift = 0, .mask = 0,
1143 - .match_off = 4, .match_val = 0x60000, .match_mask = 0xFF0000,
1144 - .jump = cxgb4_tcp_fields },
1145 - { .offset = 0x28, .offoff = 0, .shift = 0, .mask = 0,
1146 - .match_off = 4, .match_val = 0x110000, .match_mask = 0xFF0000,
1147 - .jump = cxgb4_udp_fields },
1148 - { .jump = NULL }
1149 + {
1150 + /* TCP Jump */
1151 + .sel = {
1152 + .off = 40,
1153 + .offoff = 0,
1154 + .offshift = 0,
1155 + .offmask = 0,
1156 + },
1157 + .key = {
1158 + .off = 4,
1159 + .val = cpu_to_be32(0x00000600),
1160 + .mask = cpu_to_be32(0x0000ff00),
1161 + },
1162 + .jump = cxgb4_tcp_fields,
1163 + },
1164 + {
1165 + /* UDP Jump */
1166 + .sel = {
1167 + .off = 40,
1168 + .offoff = 0,
1169 + .offshift = 0,
1170 + .offmask = 0,
1171 + },
1172 + .key = {
1173 + .off = 4,
1174 + .val = cpu_to_be32(0x00001100),
1175 + .mask = cpu_to_be32(0x0000ff00),
1176 + },
1177 + .jump = cxgb4_udp_fields,
1178 + },
1179 + { .jump = NULL },
1180 };
1181
1182 struct cxgb4_link {
1183 diff --git a/drivers/net/ethernet/chelsio/cxgb4/sge.c b/drivers/net/ethernet/chelsio/cxgb4/sge.c
1184 index 3a45ac8f0e01..506170fe3a8b 100644
1185 --- a/drivers/net/ethernet/chelsio/cxgb4/sge.c
1186 +++ b/drivers/net/ethernet/chelsio/cxgb4/sge.c
1187 @@ -2816,7 +2816,7 @@ static noinline int t4_systim_to_hwstamp(struct adapter *adapter,
1188
1189 hwtstamps = skb_hwtstamps(skb);
1190 memset(hwtstamps, 0, sizeof(*hwtstamps));
1191 - hwtstamps->hwtstamp = ns_to_ktime(be64_to_cpu(*((u64 *)data)));
1192 + hwtstamps->hwtstamp = ns_to_ktime(get_unaligned_be64(data));
1193
1194 return RX_PTP_PKT_SUC;
1195 }
1196 diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c
1197 index 355be77f4241..3cf4dc3433f9 100644
1198 --- a/drivers/net/usb/smsc95xx.c
1199 +++ b/drivers/net/usb/smsc95xx.c
1200 @@ -1324,7 +1324,7 @@ static void smsc95xx_unbind(struct usbnet *dev, struct usb_interface *intf)
1201 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]);
1202
1203 if (pdata) {
1204 - cancel_delayed_work(&pdata->carrier_check);
1205 + cancel_delayed_work_sync(&pdata->carrier_check);
1206 netif_dbg(dev, ifdown, dev->net, "free pdata\n");
1207 kfree(pdata);
1208 pdata = NULL;
1209 diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
1210 index d4b388793f40..071b63146d4b 100644
1211 --- a/drivers/nvme/host/core.c
1212 +++ b/drivers/nvme/host/core.c
1213 @@ -1088,10 +1088,16 @@ static int nvme_identify_ns_descs(struct nvme_ctrl *ctrl, unsigned nsid,
1214 dev_warn(ctrl->device,
1215 "Identify Descriptors failed (%d)\n", status);
1216 /*
1217 - * Don't treat an error as fatal, as we potentially already
1218 - * have a NGUID or EUI-64.
1219 + * Don't treat non-retryable errors as fatal, as we potentially
1220 + * already have a NGUID or EUI-64. If we failed with DNR set,
1221 + * we want to silently ignore the error as we can still
1222 + * identify the device, but if the status has DNR set, we want
1223 + * to propagate the error back specifically for the disk
1224 + * revalidation flow to make sure we don't abandon the
1225 + * device just because of a temporal retry-able error (such
1226 + * as path of transport errors).
1227 */
1228 - if (status > 0 && !(status & NVME_SC_DNR))
1229 + if (status > 0 && (status & NVME_SC_DNR))
1230 status = 0;
1231 goto free_data;
1232 }
1233 diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c
1234 index 772eb05e57af..5433aa2f7601 100644
1235 --- a/drivers/nvme/host/multipath.c
1236 +++ b/drivers/nvme/host/multipath.c
1237 @@ -3,6 +3,7 @@
1238 * Copyright (c) 2017-2018 Christoph Hellwig.
1239 */
1240
1241 +#include <linux/backing-dev.h>
1242 #include <linux/moduleparam.h>
1243 #include <trace/events/block.h>
1244 #include "nvme.h"
1245 @@ -416,11 +417,11 @@ static void nvme_mpath_set_live(struct nvme_ns *ns)
1246 if (!head->disk)
1247 return;
1248
1249 - mutex_lock(&head->lock);
1250 - if (!(head->disk->flags & GENHD_FL_UP))
1251 + if (!test_and_set_bit(NVME_NSHEAD_DISK_LIVE, &head->flags))
1252 device_add_disk(&head->subsys->dev, head->disk,
1253 nvme_ns_id_attr_groups);
1254
1255 + mutex_lock(&head->lock);
1256 if (nvme_path_is_optimized(ns)) {
1257 int node, srcu_idx;
1258
1259 @@ -638,30 +639,46 @@ static ssize_t ana_state_show(struct device *dev, struct device_attribute *attr,
1260 }
1261 DEVICE_ATTR_RO(ana_state);
1262
1263 -static int nvme_set_ns_ana_state(struct nvme_ctrl *ctrl,
1264 +static int nvme_lookup_ana_group_desc(struct nvme_ctrl *ctrl,
1265 struct nvme_ana_group_desc *desc, void *data)
1266 {
1267 - struct nvme_ns *ns = data;
1268 + struct nvme_ana_group_desc *dst = data;
1269
1270 - if (ns->ana_grpid == le32_to_cpu(desc->grpid)) {
1271 - nvme_update_ns_ana_state(desc, ns);
1272 - return -ENXIO; /* just break out of the loop */
1273 - }
1274 + if (desc->grpid != dst->grpid)
1275 + return 0;
1276
1277 - return 0;
1278 + *dst = *desc;
1279 + return -ENXIO; /* just break out of the loop */
1280 }
1281
1282 void nvme_mpath_add_disk(struct nvme_ns *ns, struct nvme_id_ns *id)
1283 {
1284 if (nvme_ctrl_use_ana(ns->ctrl)) {
1285 + struct nvme_ana_group_desc desc = {
1286 + .grpid = id->anagrpid,
1287 + .state = 0,
1288 + };
1289 +
1290 mutex_lock(&ns->ctrl->ana_lock);
1291 ns->ana_grpid = le32_to_cpu(id->anagrpid);
1292 - nvme_parse_ana_log(ns->ctrl, ns, nvme_set_ns_ana_state);
1293 + nvme_parse_ana_log(ns->ctrl, &desc, nvme_lookup_ana_group_desc);
1294 mutex_unlock(&ns->ctrl->ana_lock);
1295 + if (desc.state) {
1296 + /* found the group desc: update */
1297 + nvme_update_ns_ana_state(&desc, ns);
1298 + }
1299 } else {
1300 ns->ana_state = NVME_ANA_OPTIMIZED;
1301 nvme_mpath_set_live(ns);
1302 }
1303 +
1304 + if (bdi_cap_stable_pages_required(ns->queue->backing_dev_info)) {
1305 + struct gendisk *disk = ns->head->disk;
1306 +
1307 + if (disk)
1308 + disk->queue->backing_dev_info->capabilities |=
1309 + BDI_CAP_STABLE_WRITES;
1310 + }
1311 }
1312
1313 void nvme_mpath_remove_disk(struct nvme_ns_head *head)
1314 @@ -675,6 +692,14 @@ void nvme_mpath_remove_disk(struct nvme_ns_head *head)
1315 kblockd_schedule_work(&head->requeue_work);
1316 flush_work(&head->requeue_work);
1317 blk_cleanup_queue(head->disk->queue);
1318 + if (!test_bit(NVME_NSHEAD_DISK_LIVE, &head->flags)) {
1319 + /*
1320 + * if device_add_disk wasn't called, prevent
1321 + * disk release to put a bogus reference on the
1322 + * request queue
1323 + */
1324 + head->disk->queue = NULL;
1325 + }
1326 put_disk(head->disk);
1327 }
1328
1329 diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h
1330 index 22e8401352c2..ed02260862cb 100644
1331 --- a/drivers/nvme/host/nvme.h
1332 +++ b/drivers/nvme/host/nvme.h
1333 @@ -345,6 +345,8 @@ struct nvme_ns_head {
1334 spinlock_t requeue_lock;
1335 struct work_struct requeue_work;
1336 struct mutex lock;
1337 + unsigned long flags;
1338 +#define NVME_NSHEAD_DISK_LIVE 0
1339 struct nvme_ns __rcu *current_path[];
1340 #endif
1341 };
1342 diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c
1343 index 68e33457c814..9a06818d2816 100644
1344 --- a/drivers/spi/spi-fsl-dspi.c
1345 +++ b/drivers/spi/spi-fsl-dspi.c
1346 @@ -901,6 +901,8 @@ static int dspi_suspend(struct device *dev)
1347 struct spi_controller *ctlr = dev_get_drvdata(dev);
1348 struct fsl_dspi *dspi = spi_controller_get_devdata(ctlr);
1349
1350 + if (dspi->irq)
1351 + disable_irq(dspi->irq);
1352 spi_controller_suspend(ctlr);
1353 clk_disable_unprepare(dspi->clk);
1354
1355 @@ -921,6 +923,8 @@ static int dspi_resume(struct device *dev)
1356 if (ret)
1357 return ret;
1358 spi_controller_resume(ctlr);
1359 + if (dspi->irq)
1360 + enable_irq(dspi->irq);
1361
1362 return 0;
1363 }
1364 @@ -1108,8 +1112,8 @@ static int dspi_probe(struct platform_device *pdev)
1365 goto poll_mode;
1366 }
1367
1368 - ret = devm_request_irq(&pdev->dev, dspi->irq, dspi_interrupt,
1369 - IRQF_SHARED, pdev->name, dspi);
1370 + ret = request_threaded_irq(dspi->irq, dspi_interrupt, NULL,
1371 + IRQF_SHARED, pdev->name, dspi);
1372 if (ret < 0) {
1373 dev_err(&pdev->dev, "Unable to attach DSPI interrupt\n");
1374 goto out_clk_put;
1375 @@ -1122,7 +1126,7 @@ poll_mode:
1376 ret = dspi_request_dma(dspi, res->start);
1377 if (ret < 0) {
1378 dev_err(&pdev->dev, "can't get dma channels\n");
1379 - goto out_clk_put;
1380 + goto out_free_irq;
1381 }
1382 }
1383
1384 @@ -1134,11 +1138,14 @@ poll_mode:
1385 ret = spi_register_controller(ctlr);
1386 if (ret != 0) {
1387 dev_err(&pdev->dev, "Problem registering DSPI ctlr\n");
1388 - goto out_clk_put;
1389 + goto out_free_irq;
1390 }
1391
1392 return ret;
1393
1394 +out_free_irq:
1395 + if (dspi->irq)
1396 + free_irq(dspi->irq, dspi);
1397 out_clk_put:
1398 clk_disable_unprepare(dspi->clk);
1399 out_ctlr_put:
1400 @@ -1154,6 +1161,8 @@ static int dspi_remove(struct platform_device *pdev)
1401
1402 /* Disconnect from the SPI framework */
1403 dspi_release_dma(dspi);
1404 + if (dspi->irq)
1405 + free_irq(dspi->irq, dspi);
1406 clk_disable_unprepare(dspi->clk);
1407 spi_unregister_controller(dspi->ctlr);
1408
1409 diff --git a/drivers/thermal/mtk_thermal.c b/drivers/thermal/mtk_thermal.c
1410 index acf4854cbb8b..d6fabd0a7da6 100644
1411 --- a/drivers/thermal/mtk_thermal.c
1412 +++ b/drivers/thermal/mtk_thermal.c
1413 @@ -211,6 +211,9 @@ enum {
1414 /* The total number of temperature sensors in the MT8183 */
1415 #define MT8183_NUM_SENSORS 6
1416
1417 +/* The number of banks in the MT8183 */
1418 +#define MT8183_NUM_ZONES 1
1419 +
1420 /* The number of sensing points per bank */
1421 #define MT8183_NUM_SENSORS_PER_ZONE 6
1422
1423 @@ -498,7 +501,7 @@ static const struct mtk_thermal_data mt7622_thermal_data = {
1424
1425 static const struct mtk_thermal_data mt8183_thermal_data = {
1426 .auxadc_channel = MT8183_TEMP_AUXADC_CHANNEL,
1427 - .num_banks = MT8183_NUM_SENSORS_PER_ZONE,
1428 + .num_banks = MT8183_NUM_ZONES,
1429 .num_sensors = MT8183_NUM_SENSORS,
1430 .vts_index = mt8183_vts_index,
1431 .cali_val = MT8183_CALIBRATION,
1432 diff --git a/drivers/thermal/rcar_gen3_thermal.c b/drivers/thermal/rcar_gen3_thermal.c
1433 index 755d2b5bd2c2..1ab2ffff4e7c 100644
1434 --- a/drivers/thermal/rcar_gen3_thermal.c
1435 +++ b/drivers/thermal/rcar_gen3_thermal.c
1436 @@ -169,7 +169,7 @@ static int rcar_gen3_thermal_get_temp(void *devdata, int *temp)
1437 {
1438 struct rcar_gen3_thermal_tsc *tsc = devdata;
1439 int mcelsius, val;
1440 - u32 reg;
1441 + int reg;
1442
1443 /* Read register and convert to mili Celsius */
1444 reg = rcar_gen3_thermal_read(tsc, REG_GEN3_TEMP) & CTEMP_MASK;
1445 diff --git a/drivers/usb/misc/usbtest.c b/drivers/usb/misc/usbtest.c
1446 index 98ada1a3425c..bae88893ee8e 100644
1447 --- a/drivers/usb/misc/usbtest.c
1448 +++ b/drivers/usb/misc/usbtest.c
1449 @@ -2873,6 +2873,7 @@ static void usbtest_disconnect(struct usb_interface *intf)
1450
1451 usb_set_intfdata(intf, NULL);
1452 dev_dbg(&intf->dev, "disconnect\n");
1453 + kfree(dev->buf);
1454 kfree(dev);
1455 }
1456
1457 diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
1458 index 947c4aad5d6a..f5df2a4195c2 100644
1459 --- a/fs/cifs/connect.c
1460 +++ b/fs/cifs/connect.c
1461 @@ -5281,9 +5281,15 @@ cifs_construct_tcon(struct cifs_sb_info *cifs_sb, kuid_t fsuid)
1462 vol_info->nocase = master_tcon->nocase;
1463 vol_info->nohandlecache = master_tcon->nohandlecache;
1464 vol_info->local_lease = master_tcon->local_lease;
1465 + vol_info->no_lease = master_tcon->no_lease;
1466 + vol_info->resilient = master_tcon->use_resilient;
1467 + vol_info->persistent = master_tcon->use_persistent;
1468 + vol_info->handle_timeout = master_tcon->handle_timeout;
1469 vol_info->no_linux_ext = !master_tcon->unix_ext;
1470 + vol_info->linux_ext = master_tcon->posix_extensions;
1471 vol_info->sectype = master_tcon->ses->sectype;
1472 vol_info->sign = master_tcon->ses->sign;
1473 + vol_info->seal = master_tcon->seal;
1474
1475 rc = cifs_set_vol_auth(vol_info, master_tcon->ses);
1476 if (rc) {
1477 @@ -5309,10 +5315,6 @@ cifs_construct_tcon(struct cifs_sb_info *cifs_sb, kuid_t fsuid)
1478 goto out;
1479 }
1480
1481 - /* if new SMB3.11 POSIX extensions are supported do not remap / and \ */
1482 - if (tcon->posix_extensions)
1483 - cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_POSIX_PATHS;
1484 -
1485 if (cap_unix(ses))
1486 reset_cifs_unix_caps(0, tcon, NULL, vol_info);
1487
1488 diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c
1489 index 5e6bc8fa4e46..6045b4868275 100644
1490 --- a/fs/cifs/inode.c
1491 +++ b/fs/cifs/inode.c
1492 @@ -1791,6 +1791,7 @@ cifs_rename2(struct inode *source_dir, struct dentry *source_dentry,
1493 FILE_UNIX_BASIC_INFO *info_buf_target;
1494 unsigned int xid;
1495 int rc, tmprc;
1496 + bool new_target = d_really_is_negative(target_dentry);
1497
1498 if (flags & ~RENAME_NOREPLACE)
1499 return -EINVAL;
1500 @@ -1867,8 +1868,13 @@ cifs_rename2(struct inode *source_dir, struct dentry *source_dentry,
1501 */
1502
1503 unlink_target:
1504 - /* Try unlinking the target dentry if it's not negative */
1505 - if (d_really_is_positive(target_dentry) && (rc == -EACCES || rc == -EEXIST)) {
1506 + /*
1507 + * If the target dentry was created during the rename, try
1508 + * unlinking it if it's not negative
1509 + */
1510 + if (new_target &&
1511 + d_really_is_positive(target_dentry) &&
1512 + (rc == -EACCES || rc == -EEXIST)) {
1513 if (d_is_dir(target_dentry))
1514 tmprc = cifs_rmdir(target_dir, target_dentry);
1515 else
1516 diff --git a/fs/io_uring.c b/fs/io_uring.c
1517 index 7fa3cd3fff4d..e0200406765c 100644
1518 --- a/fs/io_uring.c
1519 +++ b/fs/io_uring.c
1520 @@ -267,6 +267,9 @@ struct io_ring_ctx {
1521 #if defined(CONFIG_UNIX)
1522 struct socket *ring_sock;
1523 #endif
1524 +
1525 + struct list_head task_list;
1526 + spinlock_t task_lock;
1527 };
1528
1529 struct sqe_submit {
1530 @@ -331,14 +334,18 @@ struct io_kiocb {
1531 #define REQ_F_ISREG 2048 /* regular file */
1532 #define REQ_F_MUST_PUNT 4096 /* must be punted even for NONBLOCK */
1533 #define REQ_F_TIMEOUT_NOSEQ 8192 /* no timeout sequence */
1534 +#define REQ_F_CANCEL 16384 /* cancel request */
1535 unsigned long fsize;
1536 u64 user_data;
1537 u32 result;
1538 u32 sequence;
1539 + struct task_struct *task;
1540
1541 struct fs_struct *fs;
1542
1543 struct work_struct work;
1544 + struct task_struct *work_task;
1545 + struct list_head task_list;
1546 };
1547
1548 #define IO_PLUG_THRESHOLD 2
1549 @@ -425,6 +432,8 @@ static struct io_ring_ctx *io_ring_ctx_alloc(struct io_uring_params *p)
1550 INIT_LIST_HEAD(&ctx->cancel_list);
1551 INIT_LIST_HEAD(&ctx->defer_list);
1552 INIT_LIST_HEAD(&ctx->timeout_list);
1553 + INIT_LIST_HEAD(&ctx->task_list);
1554 + spin_lock_init(&ctx->task_lock);
1555 return ctx;
1556 }
1557
1558 @@ -492,6 +501,7 @@ static void __io_commit_cqring(struct io_ring_ctx *ctx)
1559 static inline void io_queue_async_work(struct io_ring_ctx *ctx,
1560 struct io_kiocb *req)
1561 {
1562 + unsigned long flags;
1563 int rw = 0;
1564
1565 if (req->submit.sqe) {
1566 @@ -503,6 +513,13 @@ static inline void io_queue_async_work(struct io_ring_ctx *ctx,
1567 }
1568 }
1569
1570 + req->task = current;
1571 +
1572 + spin_lock_irqsave(&ctx->task_lock, flags);
1573 + list_add(&req->task_list, &ctx->task_list);
1574 + req->work_task = NULL;
1575 + spin_unlock_irqrestore(&ctx->task_lock, flags);
1576 +
1577 queue_work(ctx->sqo_wq[rw], &req->work);
1578 }
1579
1580 @@ -2201,6 +2218,8 @@ static void io_sq_wq_submit_work(struct work_struct *work)
1581
1582 old_cred = override_creds(ctx->creds);
1583 async_list = io_async_list_from_sqe(ctx, req->submit.sqe);
1584 +
1585 + allow_kernel_signal(SIGINT);
1586 restart:
1587 do {
1588 struct sqe_submit *s = &req->submit;
1589 @@ -2232,6 +2251,12 @@ restart:
1590 }
1591
1592 if (!ret) {
1593 + req->work_task = current;
1594 + if (req->flags & REQ_F_CANCEL) {
1595 + ret = -ECANCELED;
1596 + goto end_req;
1597 + }
1598 +
1599 s->has_user = cur_mm != NULL;
1600 s->needs_lock = true;
1601 do {
1602 @@ -2246,6 +2271,12 @@ restart:
1603 break;
1604 cond_resched();
1605 } while (1);
1606 +end_req:
1607 + if (!list_empty(&req->task_list)) {
1608 + spin_lock_irq(&ctx->task_lock);
1609 + list_del_init(&req->task_list);
1610 + spin_unlock_irq(&ctx->task_lock);
1611 + }
1612 }
1613
1614 /* drop submission reference */
1615 @@ -2311,6 +2342,7 @@ restart:
1616 }
1617
1618 out:
1619 + disallow_signal(SIGINT);
1620 if (cur_mm) {
1621 set_fs(old_fs);
1622 unuse_mm(cur_mm);
1623 @@ -3675,12 +3707,32 @@ static int io_uring_fasync(int fd, struct file *file, int on)
1624 return fasync_helper(fd, file, on, &ctx->cq_fasync);
1625 }
1626
1627 +static void io_cancel_async_work(struct io_ring_ctx *ctx,
1628 + struct task_struct *task)
1629 +{
1630 + if (list_empty(&ctx->task_list))
1631 + return;
1632 +
1633 + spin_lock_irq(&ctx->task_lock);
1634 + while (!list_empty(&ctx->task_list)) {
1635 + struct io_kiocb *req;
1636 +
1637 + req = list_first_entry(&ctx->task_list, struct io_kiocb, task_list);
1638 + list_del_init(&req->task_list);
1639 + req->flags |= REQ_F_CANCEL;
1640 + if (req->work_task && (!task || req->task == task))
1641 + send_sig(SIGINT, req->work_task, 1);
1642 + }
1643 + spin_unlock_irq(&ctx->task_lock);
1644 +}
1645 +
1646 static void io_ring_ctx_wait_and_kill(struct io_ring_ctx *ctx)
1647 {
1648 mutex_lock(&ctx->uring_lock);
1649 percpu_ref_kill(&ctx->refs);
1650 mutex_unlock(&ctx->uring_lock);
1651
1652 + io_cancel_async_work(ctx, NULL);
1653 io_kill_timeouts(ctx);
1654 io_poll_remove_all(ctx);
1655 io_iopoll_reap_events(ctx);
1656 @@ -3688,6 +3740,16 @@ static void io_ring_ctx_wait_and_kill(struct io_ring_ctx *ctx)
1657 io_ring_ctx_free(ctx);
1658 }
1659
1660 +static int io_uring_flush(struct file *file, void *data)
1661 +{
1662 + struct io_ring_ctx *ctx = file->private_data;
1663 +
1664 + if (fatal_signal_pending(current) || (current->flags & PF_EXITING))
1665 + io_cancel_async_work(ctx, current);
1666 +
1667 + return 0;
1668 +}
1669 +
1670 static int io_uring_release(struct inode *inode, struct file *file)
1671 {
1672 struct io_ring_ctx *ctx = file->private_data;
1673 @@ -3792,6 +3854,7 @@ out_fput:
1674
1675 static const struct file_operations io_uring_fops = {
1676 .release = io_uring_release,
1677 + .flush = io_uring_flush,
1678 .mmap = io_uring_mmap,
1679 .poll = io_uring_poll,
1680 .fasync = io_uring_fasync,
1681 diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
1682 index 8650a97e2ba9..9af9b673f292 100644
1683 --- a/fs/nfsd/nfs4state.c
1684 +++ b/fs/nfsd/nfs4state.c
1685 @@ -7705,9 +7705,14 @@ nfs4_state_start_net(struct net *net)
1686 struct nfsd_net *nn = net_generic(net, nfsd_net_id);
1687 int ret;
1688
1689 - ret = nfs4_state_create_net(net);
1690 + ret = get_nfsdfs(net);
1691 if (ret)
1692 return ret;
1693 + ret = nfs4_state_create_net(net);
1694 + if (ret) {
1695 + mntput(nn->nfsd_mnt);
1696 + return ret;
1697 + }
1698 locks_start_grace(net, &nn->nfsd4_manager);
1699 nfsd4_client_tracking_init(net);
1700 if (nn->track_reclaim_completes && nn->reclaim_str_hashtbl_size == 0)
1701 @@ -7776,6 +7781,7 @@ nfs4_state_shutdown_net(struct net *net)
1702
1703 nfsd4_client_tracking_exit(net);
1704 nfs4_state_destroy_net(net);
1705 + mntput(nn->nfsd_mnt);
1706 }
1707
1708 void
1709 diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c
1710 index 159feae6af8b..be418fccc9d8 100644
1711 --- a/fs/nfsd/nfsctl.c
1712 +++ b/fs/nfsd/nfsctl.c
1713 @@ -1335,6 +1335,7 @@ void nfsd_client_rmdir(struct dentry *dentry)
1714 WARN_ON_ONCE(ret);
1715 fsnotify_rmdir(dir, dentry);
1716 d_delete(dentry);
1717 + dput(dentry);
1718 inode_unlock(dir);
1719 }
1720
1721 @@ -1424,6 +1425,18 @@ static struct file_system_type nfsd_fs_type = {
1722 };
1723 MODULE_ALIAS_FS("nfsd");
1724
1725 +int get_nfsdfs(struct net *net)
1726 +{
1727 + struct nfsd_net *nn = net_generic(net, nfsd_net_id);
1728 + struct vfsmount *mnt;
1729 +
1730 + mnt = vfs_kern_mount(&nfsd_fs_type, SB_KERNMOUNT, "nfsd", NULL);
1731 + if (IS_ERR(mnt))
1732 + return PTR_ERR(mnt);
1733 + nn->nfsd_mnt = mnt;
1734 + return 0;
1735 +}
1736 +
1737 #ifdef CONFIG_PROC_FS
1738 static int create_proc_exports_entry(void)
1739 {
1740 @@ -1452,7 +1465,6 @@ unsigned int nfsd_net_id;
1741 static __net_init int nfsd_init_net(struct net *net)
1742 {
1743 int retval;
1744 - struct vfsmount *mnt;
1745 struct nfsd_net *nn = net_generic(net, nfsd_net_id);
1746
1747 retval = nfsd_export_init(net);
1748 @@ -1479,16 +1491,8 @@ static __net_init int nfsd_init_net(struct net *net)
1749 init_waitqueue_head(&nn->ntf_wq);
1750 seqlock_init(&nn->boot_lock);
1751
1752 - mnt = vfs_kern_mount(&nfsd_fs_type, SB_KERNMOUNT, "nfsd", NULL);
1753 - if (IS_ERR(mnt)) {
1754 - retval = PTR_ERR(mnt);
1755 - goto out_mount_err;
1756 - }
1757 - nn->nfsd_mnt = mnt;
1758 return 0;
1759
1760 -out_mount_err:
1761 - nfsd_reply_cache_shutdown(nn);
1762 out_drc_error:
1763 nfsd_idmap_shutdown(net);
1764 out_idmap_error:
1765 @@ -1501,7 +1505,6 @@ static __net_exit void nfsd_exit_net(struct net *net)
1766 {
1767 struct nfsd_net *nn = net_generic(net, nfsd_net_id);
1768
1769 - mntput(nn->nfsd_mnt);
1770 nfsd_reply_cache_shutdown(nn);
1771 nfsd_idmap_shutdown(net);
1772 nfsd_export_shutdown(net);
1773 diff --git a/fs/nfsd/nfsd.h b/fs/nfsd/nfsd.h
1774 index af2947551e9c..4ff0c5318a02 100644
1775 --- a/fs/nfsd/nfsd.h
1776 +++ b/fs/nfsd/nfsd.h
1777 @@ -87,6 +87,8 @@ int nfsd_pool_stats_release(struct inode *, struct file *);
1778
1779 void nfsd_destroy(struct net *net);
1780
1781 +int get_nfsdfs(struct net *);
1782 +
1783 struct nfsdfs_client {
1784 struct kref cl_ref;
1785 void (*cl_release)(struct kref *kref);
1786 @@ -97,6 +99,7 @@ struct dentry *nfsd_client_mkdir(struct nfsd_net *nn,
1787 struct nfsdfs_client *ncl, u32 id, const struct tree_descr *);
1788 void nfsd_client_rmdir(struct dentry *dentry);
1789
1790 +
1791 #if defined(CONFIG_NFSD_V2_ACL) || defined(CONFIG_NFSD_V3_ACL)
1792 #ifdef CONFIG_NFSD_V2_ACL
1793 extern const struct svc_version nfsd_acl_version2;
1794 diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c
1795 index 005d1802ab40..b6f4b552c9af 100644
1796 --- a/fs/nfsd/vfs.c
1797 +++ b/fs/nfsd/vfs.c
1798 @@ -1184,6 +1184,9 @@ nfsd_create_locked(struct svc_rqst *rqstp, struct svc_fh *fhp,
1799 iap->ia_mode = 0;
1800 iap->ia_mode = (iap->ia_mode & S_IALLUGO) | type;
1801
1802 + if (!IS_POSIXACL(dirp))
1803 + iap->ia_mode &= ~current_umask();
1804 +
1805 err = 0;
1806 host_err = 0;
1807 switch (type) {
1808 @@ -1416,6 +1419,9 @@ do_nfsd_create(struct svc_rqst *rqstp, struct svc_fh *fhp,
1809 goto out;
1810 }
1811
1812 + if (!IS_POSIXACL(dirp))
1813 + iap->ia_mode &= ~current_umask();
1814 +
1815 host_err = vfs_create(dirp, dchild, iap->ia_mode, true);
1816 if (host_err < 0) {
1817 fh_drop_write(fhp);
1818 diff --git a/include/crypto/if_alg.h b/include/crypto/if_alg.h
1819 index 24cfa96f98ea..864849e942c4 100644
1820 --- a/include/crypto/if_alg.h
1821 +++ b/include/crypto/if_alg.h
1822 @@ -29,8 +29,8 @@ struct alg_sock {
1823
1824 struct sock *parent;
1825
1826 - unsigned int refcnt;
1827 - unsigned int nokey_refcnt;
1828 + atomic_t refcnt;
1829 + atomic_t nokey_refcnt;
1830
1831 const struct af_alg_type *type;
1832 void *private;
1833 diff --git a/kernel/debug/debug_core.c b/kernel/debug/debug_core.c
1834 index 7d54c7c28054..2222f3225e53 100644
1835 --- a/kernel/debug/debug_core.c
1836 +++ b/kernel/debug/debug_core.c
1837 @@ -546,6 +546,7 @@ static int kgdb_cpu_enter(struct kgdb_state *ks, struct pt_regs *regs,
1838 arch_kgdb_ops.disable_hw_break(regs);
1839
1840 acquirelock:
1841 + rcu_read_lock();
1842 /*
1843 * Interrupts will be restored by the 'trap return' code, except when
1844 * single stepping.
1845 @@ -602,6 +603,7 @@ return_normal:
1846 atomic_dec(&slaves_in_kgdb);
1847 dbg_touch_watchdogs();
1848 local_irq_restore(flags);
1849 + rcu_read_unlock();
1850 return 0;
1851 }
1852 cpu_relax();
1853 @@ -620,6 +622,7 @@ return_normal:
1854 raw_spin_unlock(&dbg_master_lock);
1855 dbg_touch_watchdogs();
1856 local_irq_restore(flags);
1857 + rcu_read_unlock();
1858
1859 goto acquirelock;
1860 }
1861 @@ -743,6 +746,7 @@ kgdb_restore:
1862 raw_spin_unlock(&dbg_master_lock);
1863 dbg_touch_watchdogs();
1864 local_irq_restore(flags);
1865 + rcu_read_unlock();
1866
1867 return kgdb_info[cpu].ret_state;
1868 }
1869 diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c
1870 index f7e4579e746c..c4b702fe1d73 100644
1871 --- a/kernel/sched/debug.c
1872 +++ b/kernel/sched/debug.c
1873 @@ -258,7 +258,7 @@ sd_alloc_ctl_domain_table(struct sched_domain *sd)
1874 set_table_entry(&table[2], "busy_factor", &sd->busy_factor, sizeof(int), 0644, proc_dointvec_minmax);
1875 set_table_entry(&table[3], "imbalance_pct", &sd->imbalance_pct, sizeof(int), 0644, proc_dointvec_minmax);
1876 set_table_entry(&table[4], "cache_nice_tries", &sd->cache_nice_tries, sizeof(int), 0644, proc_dointvec_minmax);
1877 - set_table_entry(&table[5], "flags", &sd->flags, sizeof(int), 0644, proc_dointvec_minmax);
1878 + set_table_entry(&table[5], "flags", &sd->flags, sizeof(int), 0444, proc_dointvec_minmax);
1879 set_table_entry(&table[6], "max_newidle_lb_cost", &sd->max_newidle_lb_cost, sizeof(long), 0644, proc_doulongvec_minmax);
1880 set_table_entry(&table[7], "name", sd->name, CORENAME_MAX_SIZE, 0444, proc_dostring);
1881 /* &table[8] is terminator */
1882 diff --git a/mm/compaction.c b/mm/compaction.c
1883 index 672d3c78c6ab..92470625f0b1 100644
1884 --- a/mm/compaction.c
1885 +++ b/mm/compaction.c
1886 @@ -2310,16 +2310,26 @@ static enum compact_result compact_zone_order(struct zone *zone, int order,
1887 .page = NULL,
1888 };
1889
1890 - if (capture)
1891 - current->capture_control = &capc;
1892 + /*
1893 + * Make sure the structs are really initialized before we expose the
1894 + * capture control, in case we are interrupted and the interrupt handler
1895 + * frees a page.
1896 + */
1897 + barrier();
1898 + WRITE_ONCE(current->capture_control, &capc);
1899
1900 ret = compact_zone(&cc, &capc);
1901
1902 VM_BUG_ON(!list_empty(&cc.freepages));
1903 VM_BUG_ON(!list_empty(&cc.migratepages));
1904
1905 - *capture = capc.page;
1906 - current->capture_control = NULL;
1907 + /*
1908 + * Make sure we hide capture control first before we read the captured
1909 + * page pointer, otherwise an interrupt could free and capture a page
1910 + * and we would leak it.
1911 + */
1912 + WRITE_ONCE(current->capture_control, NULL);
1913 + *capture = READ_ONCE(capc.page);
1914
1915 return ret;
1916 }
1917 @@ -2333,6 +2343,7 @@ int sysctl_extfrag_threshold = 500;
1918 * @alloc_flags: The allocation flags of the current allocation
1919 * @ac: The context of current allocation
1920 * @prio: Determines how hard direct compaction should try to succeed
1921 + * @capture: Pointer to free page created by compaction will be stored here
1922 *
1923 * This is the main entry point for direct page compaction.
1924 */
1925 diff --git a/mm/slub.c b/mm/slub.c
1926 index fca33abd6c42..709e31002504 100644
1927 --- a/mm/slub.c
1928 +++ b/mm/slub.c
1929 @@ -644,6 +644,20 @@ static void slab_fix(struct kmem_cache *s, char *fmt, ...)
1930 va_end(args);
1931 }
1932
1933 +static bool freelist_corrupted(struct kmem_cache *s, struct page *page,
1934 + void *freelist, void *nextfree)
1935 +{
1936 + if ((s->flags & SLAB_CONSISTENCY_CHECKS) &&
1937 + !check_valid_pointer(s, page, nextfree)) {
1938 + object_err(s, page, freelist, "Freechain corrupt");
1939 + freelist = NULL;
1940 + slab_fix(s, "Isolate corrupted freechain");
1941 + return true;
1942 + }
1943 +
1944 + return false;
1945 +}
1946 +
1947 static void print_trailer(struct kmem_cache *s, struct page *page, u8 *p)
1948 {
1949 unsigned int off; /* Offset of last byte */
1950 @@ -1379,6 +1393,11 @@ static inline void inc_slabs_node(struct kmem_cache *s, int node,
1951 static inline void dec_slabs_node(struct kmem_cache *s, int node,
1952 int objects) {}
1953
1954 +static bool freelist_corrupted(struct kmem_cache *s, struct page *page,
1955 + void *freelist, void *nextfree)
1956 +{
1957 + return false;
1958 +}
1959 #endif /* CONFIG_SLUB_DEBUG */
1960
1961 /*
1962 @@ -2062,6 +2081,14 @@ static void deactivate_slab(struct kmem_cache *s, struct page *page,
1963 void *prior;
1964 unsigned long counters;
1965
1966 + /*
1967 + * If 'nextfree' is invalid, it is possible that the object at
1968 + * 'freelist' is already corrupted. So isolate all objects
1969 + * starting at 'freelist'.
1970 + */
1971 + if (freelist_corrupted(s, page, freelist, nextfree))
1972 + break;
1973 +
1974 do {
1975 prior = page->freelist;
1976 counters = page->counters;
1977 @@ -5621,7 +5648,8 @@ static void memcg_propagate_slab_attrs(struct kmem_cache *s)
1978 */
1979 if (buffer)
1980 buf = buffer;
1981 - else if (root_cache->max_attr_size < ARRAY_SIZE(mbuf))
1982 + else if (root_cache->max_attr_size < ARRAY_SIZE(mbuf) &&
1983 + !IS_ENABLED(CONFIG_SLUB_STATS))
1984 buf = mbuf;
1985 else {
1986 buffer = (char *) get_zeroed_page(GFP_KERNEL);
1987 diff --git a/mm/swap_state.c b/mm/swap_state.c
1988 index 8e7ce9a9bc5e..4ce014dc4571 100644
1989 --- a/mm/swap_state.c
1990 +++ b/mm/swap_state.c
1991 @@ -23,6 +23,7 @@
1992 #include <linux/huge_mm.h>
1993
1994 #include <asm/pgtable.h>
1995 +#include "internal.h"
1996
1997 /*
1998 * swapper_space is a fiction, retained to simplify the path through
1999 @@ -418,7 +419,8 @@ struct page *__read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask,
2000 /* May fail (-ENOMEM) if XArray node allocation failed. */
2001 __SetPageLocked(new_page);
2002 __SetPageSwapBacked(new_page);
2003 - err = add_to_swap_cache(new_page, entry, gfp_mask & GFP_KERNEL);
2004 + err = add_to_swap_cache(new_page, entry,
2005 + gfp_mask & GFP_RECLAIM_MASK);
2006 if (likely(!err)) {
2007 /* Initiate read into locked page */
2008 SetPageWorkingset(new_page);
2009 diff --git a/net/rxrpc/call_event.c b/net/rxrpc/call_event.c
2010 index 2a65ac41055f..9ff85ee8337c 100644
2011 --- a/net/rxrpc/call_event.c
2012 +++ b/net/rxrpc/call_event.c
2013 @@ -248,7 +248,18 @@ static void rxrpc_resend(struct rxrpc_call *call, unsigned long now_j)
2014 if (anno_type != RXRPC_TX_ANNO_RETRANS)
2015 continue;
2016
2017 + /* We need to reset the retransmission state, but we need to do
2018 + * so before we drop the lock as a new ACK/NAK may come in and
2019 + * confuse things
2020 + */
2021 + annotation &= ~RXRPC_TX_ANNO_MASK;
2022 + annotation |= RXRPC_TX_ANNO_UNACK | RXRPC_TX_ANNO_RESENT;
2023 + call->rxtx_annotations[ix] = annotation;
2024 +
2025 skb = call->rxtx_buffer[ix];
2026 + if (!skb)
2027 + continue;
2028 +
2029 rxrpc_get_skb(skb, rxrpc_skb_got);
2030 spin_unlock_bh(&call->lock);
2031
2032 @@ -262,24 +273,6 @@ static void rxrpc_resend(struct rxrpc_call *call, unsigned long now_j)
2033
2034 rxrpc_free_skb(skb, rxrpc_skb_freed);
2035 spin_lock_bh(&call->lock);
2036 -
2037 - /* We need to clear the retransmit state, but there are two
2038 - * things we need to be aware of: A new ACK/NAK might have been
2039 - * received and the packet might have been hard-ACK'd (in which
2040 - * case it will no longer be in the buffer).
2041 - */
2042 - if (after(seq, call->tx_hard_ack)) {
2043 - annotation = call->rxtx_annotations[ix];
2044 - anno_type = annotation & RXRPC_TX_ANNO_MASK;
2045 - if (anno_type == RXRPC_TX_ANNO_RETRANS ||
2046 - anno_type == RXRPC_TX_ANNO_NAK) {
2047 - annotation &= ~RXRPC_TX_ANNO_MASK;
2048 - annotation |= RXRPC_TX_ANNO_UNACK;
2049 - }
2050 - annotation |= RXRPC_TX_ANNO_RESENT;
2051 - call->rxtx_annotations[ix] = annotation;
2052 - }
2053 -
2054 if (after(call->tx_hard_ack, seq))
2055 seq = call->tx_hard_ack;
2056 }
2057 diff --git a/samples/vfs/test-statx.c b/samples/vfs/test-statx.c
2058 index a3d68159fb51..507f09c38b49 100644
2059 --- a/samples/vfs/test-statx.c
2060 +++ b/samples/vfs/test-statx.c
2061 @@ -23,6 +23,8 @@
2062 #include <linux/fcntl.h>
2063 #define statx foo
2064 #define statx_timestamp foo_timestamp
2065 +struct statx;
2066 +struct statx_timestamp;
2067 #include <sys/stat.h>
2068 #undef statx
2069 #undef statx_timestamp
2070 diff --git a/sound/usb/card.h b/sound/usb/card.h
2071 index d6219fba9699..f39f23e3525d 100644
2072 --- a/sound/usb/card.h
2073 +++ b/sound/usb/card.h
2074 @@ -84,10 +84,6 @@ struct snd_usb_endpoint {
2075 dma_addr_t sync_dma; /* DMA address of syncbuf */
2076
2077 unsigned int pipe; /* the data i/o pipe */
2078 - unsigned int framesize[2]; /* small/large frame sizes in samples */
2079 - unsigned int sample_rem; /* remainder from division fs/fps */
2080 - unsigned int sample_accum; /* sample accumulator */
2081 - unsigned int fps; /* frames per second */
2082 unsigned int freqn; /* nominal sampling rate in fs/fps in Q16.16 format */
2083 unsigned int freqm; /* momentary sampling rate in fs/fps in Q16.16 format */
2084 int freqshift; /* how much to shift the feedback value to get Q16.16 */
2085 diff --git a/sound/usb/endpoint.c b/sound/usb/endpoint.c
2086 index 9bea7d3f99f8..87cc249a31b9 100644
2087 --- a/sound/usb/endpoint.c
2088 +++ b/sound/usb/endpoint.c
2089 @@ -124,12 +124,12 @@ int snd_usb_endpoint_implicit_feedback_sink(struct snd_usb_endpoint *ep)
2090
2091 /*
2092 * For streaming based on information derived from sync endpoints,
2093 - * prepare_outbound_urb_sizes() will call slave_next_packet_size() to
2094 + * prepare_outbound_urb_sizes() will call next_packet_size() to
2095 * determine the number of samples to be sent in the next packet.
2096 *
2097 - * For implicit feedback, slave_next_packet_size() is unused.
2098 + * For implicit feedback, next_packet_size() is unused.
2099 */
2100 -int snd_usb_endpoint_slave_next_packet_size(struct snd_usb_endpoint *ep)
2101 +int snd_usb_endpoint_next_packet_size(struct snd_usb_endpoint *ep)
2102 {
2103 unsigned long flags;
2104 int ret;
2105 @@ -146,29 +146,6 @@ int snd_usb_endpoint_slave_next_packet_size(struct snd_usb_endpoint *ep)
2106 return ret;
2107 }
2108
2109 -/*
2110 - * For adaptive and synchronous endpoints, prepare_outbound_urb_sizes()
2111 - * will call next_packet_size() to determine the number of samples to be
2112 - * sent in the next packet.
2113 - */
2114 -int snd_usb_endpoint_next_packet_size(struct snd_usb_endpoint *ep)
2115 -{
2116 - int ret;
2117 -
2118 - if (ep->fill_max)
2119 - return ep->maxframesize;
2120 -
2121 - ep->sample_accum += ep->sample_rem;
2122 - if (ep->sample_accum >= ep->fps) {
2123 - ep->sample_accum -= ep->fps;
2124 - ret = ep->framesize[1];
2125 - } else {
2126 - ret = ep->framesize[0];
2127 - }
2128 -
2129 - return ret;
2130 -}
2131 -
2132 static void retire_outbound_urb(struct snd_usb_endpoint *ep,
2133 struct snd_urb_ctx *urb_ctx)
2134 {
2135 @@ -213,8 +190,6 @@ static void prepare_silent_urb(struct snd_usb_endpoint *ep,
2136
2137 if (ctx->packet_size[i])
2138 counts = ctx->packet_size[i];
2139 - else if (ep->sync_master)
2140 - counts = snd_usb_endpoint_slave_next_packet_size(ep);
2141 else
2142 counts = snd_usb_endpoint_next_packet_size(ep);
2143
2144 @@ -1086,17 +1061,10 @@ int snd_usb_endpoint_set_params(struct snd_usb_endpoint *ep,
2145 ep->maxpacksize = fmt->maxpacksize;
2146 ep->fill_max = !!(fmt->attributes & UAC_EP_CS_ATTR_FILL_MAX);
2147
2148 - if (snd_usb_get_speed(ep->chip->dev) == USB_SPEED_FULL) {
2149 + if (snd_usb_get_speed(ep->chip->dev) == USB_SPEED_FULL)
2150 ep->freqn = get_usb_full_speed_rate(rate);
2151 - ep->fps = 1000;
2152 - } else {
2153 + else
2154 ep->freqn = get_usb_high_speed_rate(rate);
2155 - ep->fps = 8000;
2156 - }
2157 -
2158 - ep->sample_rem = rate % ep->fps;
2159 - ep->framesize[0] = rate / ep->fps;
2160 - ep->framesize[1] = (rate + (ep->fps - 1)) / ep->fps;
2161
2162 /* calculate the frequency in 16.16 format */
2163 ep->freqm = ep->freqn;
2164 @@ -1155,7 +1123,6 @@ int snd_usb_endpoint_start(struct snd_usb_endpoint *ep)
2165 ep->active_mask = 0;
2166 ep->unlink_mask = 0;
2167 ep->phase = 0;
2168 - ep->sample_accum = 0;
2169
2170 snd_usb_endpoint_start_quirk(ep);
2171
2172 diff --git a/sound/usb/endpoint.h b/sound/usb/endpoint.h
2173 index d23fa0a8c11b..63a39d4fa8d8 100644
2174 --- a/sound/usb/endpoint.h
2175 +++ b/sound/usb/endpoint.h
2176 @@ -28,7 +28,6 @@ void snd_usb_endpoint_release(struct snd_usb_endpoint *ep);
2177 void snd_usb_endpoint_free(struct snd_usb_endpoint *ep);
2178
2179 int snd_usb_endpoint_implicit_feedback_sink(struct snd_usb_endpoint *ep);
2180 -int snd_usb_endpoint_slave_next_packet_size(struct snd_usb_endpoint *ep);
2181 int snd_usb_endpoint_next_packet_size(struct snd_usb_endpoint *ep);
2182
2183 void snd_usb_handle_sync_urb(struct snd_usb_endpoint *ep,
2184 diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c
2185 index b971d9aaa64a..426c55b45e79 100644
2186 --- a/sound/usb/pcm.c
2187 +++ b/sound/usb/pcm.c
2188 @@ -1581,8 +1581,6 @@ static void prepare_playback_urb(struct snd_usb_substream *subs,
2189 for (i = 0; i < ctx->packets; i++) {
2190 if (ctx->packet_size[i])
2191 counts = ctx->packet_size[i];
2192 - else if (ep->sync_master)
2193 - counts = snd_usb_endpoint_slave_next_packet_size(ep);
2194 else
2195 counts = snd_usb_endpoint_next_packet_size(ep);
2196
2197 diff --git a/tools/lib/traceevent/event-parse.c b/tools/lib/traceevent/event-parse.c
2198 index d948475585ce..798284f511f1 100644
2199 --- a/tools/lib/traceevent/event-parse.c
2200 +++ b/tools/lib/traceevent/event-parse.c
2201 @@ -1425,13 +1425,28 @@ static unsigned int type_size(const char *name)
2202 return 0;
2203 }
2204
2205 +static int append(char **buf, const char *delim, const char *str)
2206 +{
2207 + char *new_buf;
2208 +
2209 + new_buf = realloc(*buf, strlen(*buf) + strlen(delim) + strlen(str) + 1);
2210 + if (!new_buf)
2211 + return -1;
2212 + strcat(new_buf, delim);
2213 + strcat(new_buf, str);
2214 + *buf = new_buf;
2215 + return 0;
2216 +}
2217 +
2218 static int event_read_fields(struct tep_event *event, struct tep_format_field **fields)
2219 {
2220 struct tep_format_field *field = NULL;
2221 enum tep_event_type type;
2222 char *token;
2223 char *last_token;
2224 + char *delim = " ";
2225 int count = 0;
2226 + int ret;
2227
2228 do {
2229 unsigned int size_dynamic = 0;
2230 @@ -1490,24 +1505,51 @@ static int event_read_fields(struct tep_event *event, struct tep_format_field **
2231 field->flags |= TEP_FIELD_IS_POINTER;
2232
2233 if (field->type) {
2234 - char *new_type;
2235 - new_type = realloc(field->type,
2236 - strlen(field->type) +
2237 - strlen(last_token) + 2);
2238 - if (!new_type) {
2239 - free(last_token);
2240 - goto fail;
2241 - }
2242 - field->type = new_type;
2243 - strcat(field->type, " ");
2244 - strcat(field->type, last_token);
2245 + ret = append(&field->type, delim, last_token);
2246 free(last_token);
2247 + if (ret < 0)
2248 + goto fail;
2249 } else
2250 field->type = last_token;
2251 last_token = token;
2252 + delim = " ";
2253 continue;
2254 }
2255
2256 + /* Handle __attribute__((user)) */
2257 + if ((type == TEP_EVENT_DELIM) &&
2258 + strcmp("__attribute__", last_token) == 0 &&
2259 + token[0] == '(') {
2260 + int depth = 1;
2261 + int ret;
2262 +
2263 + ret = append(&field->type, " ", last_token);
2264 + ret |= append(&field->type, "", "(");
2265 + if (ret < 0)
2266 + goto fail;
2267 +
2268 + delim = " ";
2269 + while ((type = read_token(&token)) != TEP_EVENT_NONE) {
2270 + if (type == TEP_EVENT_DELIM) {
2271 + if (token[0] == '(')
2272 + depth++;
2273 + else if (token[0] == ')')
2274 + depth--;
2275 + if (!depth)
2276 + break;
2277 + ret = append(&field->type, "", token);
2278 + delim = "";
2279 + } else {
2280 + ret = append(&field->type, delim, token);
2281 + delim = " ";
2282 + }
2283 + if (ret < 0)
2284 + goto fail;
2285 + free(last_token);
2286 + last_token = token;
2287 + }
2288 + continue;
2289 + }
2290 break;
2291 }
2292
2293 @@ -1523,8 +1565,6 @@ static int event_read_fields(struct tep_event *event, struct tep_format_field **
2294 if (strcmp(token, "[") == 0) {
2295 enum tep_event_type last_type = type;
2296 char *brackets = token;
2297 - char *new_brackets;
2298 - int len;
2299
2300 field->flags |= TEP_FIELD_IS_ARRAY;
2301
2302 @@ -1536,29 +1576,27 @@ static int event_read_fields(struct tep_event *event, struct tep_format_field **
2303 field->arraylen = 0;
2304
2305 while (strcmp(token, "]") != 0) {
2306 + const char *delim;
2307 +
2308 if (last_type == TEP_EVENT_ITEM &&
2309 type == TEP_EVENT_ITEM)
2310 - len = 2;
2311 + delim = " ";
2312 else
2313 - len = 1;
2314 + delim = "";
2315 +
2316 last_type = type;
2317
2318 - new_brackets = realloc(brackets,
2319 - strlen(brackets) +
2320 - strlen(token) + len);
2321 - if (!new_brackets) {
2322 + ret = append(&brackets, delim, token);
2323 + if (ret < 0) {
2324 free(brackets);
2325 goto fail;
2326 }
2327 - brackets = new_brackets;
2328 - if (len == 2)
2329 - strcat(brackets, " ");
2330 - strcat(brackets, token);
2331 /* We only care about the last token */
2332 field->arraylen = strtoul(token, NULL, 0);
2333 free_token(token);
2334 type = read_token(&token);
2335 if (type == TEP_EVENT_NONE) {
2336 + free(brackets);
2337 do_warning_event(event, "failed to find token");
2338 goto fail;
2339 }
2340 @@ -1566,13 +1604,11 @@ static int event_read_fields(struct tep_event *event, struct tep_format_field **
2341
2342 free_token(token);
2343
2344 - new_brackets = realloc(brackets, strlen(brackets) + 2);
2345 - if (!new_brackets) {
2346 + ret = append(&brackets, "", "]");
2347 + if (ret < 0) {
2348 free(brackets);
2349 goto fail;
2350 }
2351 - brackets = new_brackets;
2352 - strcat(brackets, "]");
2353
2354 /* add brackets to type */
2355
2356 @@ -1582,34 +1618,23 @@ static int event_read_fields(struct tep_event *event, struct tep_format_field **
2357 * the format: type [] item;
2358 */
2359 if (type == TEP_EVENT_ITEM) {
2360 - char *new_type;
2361 - new_type = realloc(field->type,
2362 - strlen(field->type) +
2363 - strlen(field->name) +
2364 - strlen(brackets) + 2);
2365 - if (!new_type) {
2366 + ret = append(&field->type, " ", field->name);
2367 + if (ret < 0) {
2368 free(brackets);
2369 goto fail;
2370 }
2371 - field->type = new_type;
2372 - strcat(field->type, " ");
2373 - strcat(field->type, field->name);
2374 + ret = append(&field->type, "", brackets);
2375 +
2376 size_dynamic = type_size(field->name);
2377 free_token(field->name);
2378 - strcat(field->type, brackets);
2379 field->name = field->alias = token;
2380 type = read_token(&token);
2381 } else {
2382 - char *new_type;
2383 - new_type = realloc(field->type,
2384 - strlen(field->type) +
2385 - strlen(brackets) + 1);
2386 - if (!new_type) {
2387 + ret = append(&field->type, "", brackets);
2388 + if (ret < 0) {
2389 free(brackets);
2390 goto fail;
2391 }
2392 - field->type = new_type;
2393 - strcat(field->type, brackets);
2394 }
2395 free(brackets);
2396 }
2397 @@ -2046,19 +2071,16 @@ process_op(struct tep_event *event, struct tep_print_arg *arg, char **tok)
2398 /* could just be a type pointer */
2399 if ((strcmp(arg->op.op, "*") == 0) &&
2400 type == TEP_EVENT_DELIM && (strcmp(token, ")") == 0)) {
2401 - char *new_atom;
2402 + int ret;
2403
2404 if (left->type != TEP_PRINT_ATOM) {
2405 do_warning_event(event, "bad pointer type");
2406 goto out_free;
2407 }
2408 - new_atom = realloc(left->atom.atom,
2409 - strlen(left->atom.atom) + 3);
2410 - if (!new_atom)
2411 + ret = append(&left->atom.atom, " ", "*");
2412 + if (ret < 0)
2413 goto out_warn_free;
2414
2415 - left->atom.atom = new_atom;
2416 - strcat(left->atom.atom, " *");
2417 free(arg->op.op);
2418 *arg = *left;
2419 free(left);
2420 @@ -3151,18 +3173,15 @@ process_arg_token(struct tep_event *event, struct tep_print_arg *arg,
2421 }
2422 /* atoms can be more than one token long */
2423 while (type == TEP_EVENT_ITEM) {
2424 - char *new_atom;
2425 - new_atom = realloc(atom,
2426 - strlen(atom) + strlen(token) + 2);
2427 - if (!new_atom) {
2428 + int ret;
2429 +
2430 + ret = append(&atom, " ", token);
2431 + if (ret < 0) {
2432 free(atom);
2433 *tok = NULL;
2434 free_token(token);
2435 return TEP_EVENT_ERROR;
2436 }
2437 - atom = new_atom;
2438 - strcat(atom, " ");
2439 - strcat(atom, token);
2440 free_token(token);
2441 type = read_token_item(&token);
2442 }
2443 diff --git a/tools/testing/selftests/tpm2/test_smoke.sh b/tools/testing/selftests/tpm2/test_smoke.sh
2444 index 80521d46220c..31fb8265f643 100755
2445 --- a/tools/testing/selftests/tpm2/test_smoke.sh
2446 +++ b/tools/testing/selftests/tpm2/test_smoke.sh
2447 @@ -1,4 +1,4 @@
2448 -#!/bin/bash
2449 +#!/bin/sh
2450 # SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause)
2451
2452 python -m unittest -v tpm2_tests.SmokeTest
2453 diff --git a/tools/testing/selftests/tpm2/test_space.sh b/tools/testing/selftests/tpm2/test_space.sh
2454 index a6f5e346635e..3ded3011b642 100755
2455 --- a/tools/testing/selftests/tpm2/test_space.sh
2456 +++ b/tools/testing/selftests/tpm2/test_space.sh
2457 @@ -1,4 +1,4 @@
2458 -#!/bin/bash
2459 +#!/bin/sh
2460 # SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause)
2461
2462 python -m unittest -v tpm2_tests.SpaceTest