Annotation of /trunk/kernel-alx-legacy/patches-4.9/0329-4.9.230-all-fixes.patch
Parent Directory | Revision Log
Revision 3608 -
(hide annotations)
(download)
Fri Aug 14 07:34:29 2020 UTC (3 years, 10 months ago) by niro
File size: 37602 byte(s)
Fri Aug 14 07:34:29 2020 UTC (3 years, 10 months ago) by niro
File size: 37602 byte(s)
-added kerenl-alx-legacy pkg
1 | niro | 3608 | diff --git a/Makefile b/Makefile |
2 | index a8a9704a6e2e..e426d0c90188 100644 | ||
3 | --- a/Makefile | ||
4 | +++ b/Makefile | ||
5 | @@ -1,6 +1,6 @@ | ||
6 | VERSION = 4 | ||
7 | PATCHLEVEL = 9 | ||
8 | -SUBLEVEL = 229 | ||
9 | +SUBLEVEL = 230 | ||
10 | EXTRAVERSION = | ||
11 | NAME = Roaring Lionus | ||
12 | |||
13 | diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c | ||
14 | index 8e0749665934..5f717473d08e 100644 | ||
15 | --- a/arch/mips/kernel/traps.c | ||
16 | +++ b/arch/mips/kernel/traps.c | ||
17 | @@ -2137,6 +2137,7 @@ static void configure_status(void) | ||
18 | |||
19 | change_c0_status(ST0_CU|ST0_MX|ST0_RE|ST0_FR|ST0_BEV|ST0_TS|ST0_KX|ST0_SX|ST0_UX, | ||
20 | status_set); | ||
21 | + back_to_back_c0_hazard(); | ||
22 | } | ||
23 | |||
24 | unsigned int hwrena; | ||
25 | diff --git a/crypto/af_alg.c b/crypto/af_alg.c | ||
26 | index cf3975ee4fd8..c48ddeb6c328 100644 | ||
27 | --- a/crypto/af_alg.c | ||
28 | +++ b/crypto/af_alg.c | ||
29 | @@ -130,21 +130,15 @@ EXPORT_SYMBOL_GPL(af_alg_release); | ||
30 | void af_alg_release_parent(struct sock *sk) | ||
31 | { | ||
32 | struct alg_sock *ask = alg_sk(sk); | ||
33 | - unsigned int nokey = ask->nokey_refcnt; | ||
34 | - bool last = nokey && !ask->refcnt; | ||
35 | + unsigned int nokey = atomic_read(&ask->nokey_refcnt); | ||
36 | |||
37 | sk = ask->parent; | ||
38 | ask = alg_sk(sk); | ||
39 | |||
40 | - local_bh_disable(); | ||
41 | - bh_lock_sock(sk); | ||
42 | - ask->nokey_refcnt -= nokey; | ||
43 | - if (!last) | ||
44 | - last = !--ask->refcnt; | ||
45 | - bh_unlock_sock(sk); | ||
46 | - local_bh_enable(); | ||
47 | + if (nokey) | ||
48 | + atomic_dec(&ask->nokey_refcnt); | ||
49 | |||
50 | - if (last) | ||
51 | + if (atomic_dec_and_test(&ask->refcnt)) | ||
52 | sock_put(sk); | ||
53 | } | ||
54 | EXPORT_SYMBOL_GPL(af_alg_release_parent); | ||
55 | @@ -189,7 +183,7 @@ static int alg_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len) | ||
56 | |||
57 | err = -EBUSY; | ||
58 | lock_sock(sk); | ||
59 | - if (ask->refcnt | ask->nokey_refcnt) | ||
60 | + if (atomic_read(&ask->refcnt)) | ||
61 | goto unlock; | ||
62 | |||
63 | swap(ask->type, type); | ||
64 | @@ -238,7 +232,7 @@ static int alg_setsockopt(struct socket *sock, int level, int optname, | ||
65 | int err = -EBUSY; | ||
66 | |||
67 | lock_sock(sk); | ||
68 | - if (ask->refcnt) | ||
69 | + if (atomic_read(&ask->refcnt) != atomic_read(&ask->nokey_refcnt)) | ||
70 | goto unlock; | ||
71 | |||
72 | type = ask->type; | ||
73 | @@ -305,12 +299,14 @@ int af_alg_accept(struct sock *sk, struct socket *newsock) | ||
74 | |||
75 | sk2->sk_family = PF_ALG; | ||
76 | |||
77 | - if (nokey || !ask->refcnt++) | ||
78 | + if (atomic_inc_return_relaxed(&ask->refcnt) == 1) | ||
79 | sock_hold(sk); | ||
80 | - ask->nokey_refcnt += nokey; | ||
81 | + if (nokey) { | ||
82 | + atomic_inc(&ask->nokey_refcnt); | ||
83 | + atomic_set(&alg_sk(sk2)->nokey_refcnt, 1); | ||
84 | + } | ||
85 | alg_sk(sk2)->parent = sk; | ||
86 | alg_sk(sk2)->type = type; | ||
87 | - alg_sk(sk2)->nokey_refcnt = nokey; | ||
88 | |||
89 | newsock->ops = type->ops; | ||
90 | newsock->state = SS_CONNECTED; | ||
91 | diff --git a/crypto/algif_aead.c b/crypto/algif_aead.c | ||
92 | index 6c11537ca404..d38f098350f6 100644 | ||
93 | --- a/crypto/algif_aead.c | ||
94 | +++ b/crypto/algif_aead.c | ||
95 | @@ -747,7 +747,7 @@ static int aead_check_key(struct socket *sock) | ||
96 | struct alg_sock *ask = alg_sk(sk); | ||
97 | |||
98 | lock_sock(sk); | ||
99 | - if (ask->refcnt) | ||
100 | + if (!atomic_read(&ask->nokey_refcnt)) | ||
101 | goto unlock_child; | ||
102 | |||
103 | psk = ask->parent; | ||
104 | @@ -759,11 +759,8 @@ static int aead_check_key(struct socket *sock) | ||
105 | if (!tfm->has_key) | ||
106 | goto unlock; | ||
107 | |||
108 | - if (!pask->refcnt++) | ||
109 | - sock_hold(psk); | ||
110 | - | ||
111 | - ask->refcnt = 1; | ||
112 | - sock_put(psk); | ||
113 | + atomic_dec(&pask->nokey_refcnt); | ||
114 | + atomic_set(&ask->nokey_refcnt, 0); | ||
115 | |||
116 | err = 0; | ||
117 | |||
118 | diff --git a/crypto/algif_hash.c b/crypto/algif_hash.c | ||
119 | index 731b5fb8567b..7ae4f79cc839 100644 | ||
120 | --- a/crypto/algif_hash.c | ||
121 | +++ b/crypto/algif_hash.c | ||
122 | @@ -308,7 +308,7 @@ static int hash_check_key(struct socket *sock) | ||
123 | struct alg_sock *ask = alg_sk(sk); | ||
124 | |||
125 | lock_sock(sk); | ||
126 | - if (ask->refcnt) | ||
127 | + if (!atomic_read(&ask->nokey_refcnt)) | ||
128 | goto unlock_child; | ||
129 | |||
130 | psk = ask->parent; | ||
131 | @@ -320,11 +320,8 @@ static int hash_check_key(struct socket *sock) | ||
132 | if (crypto_ahash_get_flags(tfm) & CRYPTO_TFM_NEED_KEY) | ||
133 | goto unlock; | ||
134 | |||
135 | - if (!pask->refcnt++) | ||
136 | - sock_hold(psk); | ||
137 | - | ||
138 | - ask->refcnt = 1; | ||
139 | - sock_put(psk); | ||
140 | + atomic_dec(&pask->nokey_refcnt); | ||
141 | + atomic_set(&ask->nokey_refcnt, 0); | ||
142 | |||
143 | err = 0; | ||
144 | |||
145 | diff --git a/crypto/algif_skcipher.c b/crypto/algif_skcipher.c | ||
146 | index b28f45aca2ef..931a777a4ec4 100644 | ||
147 | --- a/crypto/algif_skcipher.c | ||
148 | +++ b/crypto/algif_skcipher.c | ||
149 | @@ -774,7 +774,7 @@ static int skcipher_check_key(struct socket *sock) | ||
150 | struct alg_sock *ask = alg_sk(sk); | ||
151 | |||
152 | lock_sock(sk); | ||
153 | - if (ask->refcnt) | ||
154 | + if (!atomic_read(&ask->nokey_refcnt)) | ||
155 | goto unlock_child; | ||
156 | |||
157 | psk = ask->parent; | ||
158 | @@ -786,11 +786,8 @@ static int skcipher_check_key(struct socket *sock) | ||
159 | if (!tfm->has_key) | ||
160 | goto unlock; | ||
161 | |||
162 | - if (!pask->refcnt++) | ||
163 | - sock_hold(psk); | ||
164 | - | ||
165 | - ask->refcnt = 1; | ||
166 | - sock_put(psk); | ||
167 | + atomic_dec(&pask->nokey_refcnt); | ||
168 | + atomic_set(&ask->nokey_refcnt, 0); | ||
169 | |||
170 | err = 0; | ||
171 | |||
172 | diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c | ||
173 | index f287eec36b28..e57a1f6e39d5 100644 | ||
174 | --- a/drivers/block/virtio_blk.c | ||
175 | +++ b/drivers/block/virtio_blk.c | ||
176 | @@ -749,6 +749,7 @@ out_put_disk: | ||
177 | put_disk(vblk->disk); | ||
178 | out_free_vq: | ||
179 | vdev->config->del_vqs(vdev); | ||
180 | + kfree(vblk->vqs); | ||
181 | out_free_vblk: | ||
182 | kfree(vblk); | ||
183 | out_free_index: | ||
184 | diff --git a/drivers/edac/amd64_edac.c b/drivers/edac/amd64_edac.c | ||
185 | index 1c5f23224b3c..020dd07d1c23 100644 | ||
186 | --- a/drivers/edac/amd64_edac.c | ||
187 | +++ b/drivers/edac/amd64_edac.c | ||
188 | @@ -243,6 +243,8 @@ static int get_scrub_rate(struct mem_ctl_info *mci) | ||
189 | |||
190 | if (pvt->model == 0x60) | ||
191 | amd64_read_pci_cfg(pvt->F2, F15H_M60H_SCRCTRL, &scrubval); | ||
192 | + else | ||
193 | + amd64_read_pci_cfg(pvt->F3, SCRCTRL, &scrubval); | ||
194 | } else | ||
195 | amd64_read_pci_cfg(pvt->F3, SCRCTRL, &scrubval); | ||
196 | |||
197 | diff --git a/drivers/firmware/efi/Kconfig b/drivers/firmware/efi/Kconfig | ||
198 | index c981be17d3c0..8ebc6f8bf9b9 100644 | ||
199 | --- a/drivers/firmware/efi/Kconfig | ||
200 | +++ b/drivers/firmware/efi/Kconfig | ||
201 | @@ -129,6 +129,17 @@ config EFI_TEST | ||
202 | Say Y here to enable the runtime services support via /dev/efi_test. | ||
203 | If unsure, say N. | ||
204 | |||
205 | +config EFI_CUSTOM_SSDT_OVERLAYS | ||
206 | + bool "Load custom ACPI SSDT overlay from an EFI variable" | ||
207 | + depends on EFI_VARS && ACPI | ||
208 | + default ACPI_TABLE_UPGRADE | ||
209 | + help | ||
210 | + Allow loading of an ACPI SSDT overlay from an EFI variable specified | ||
211 | + by a kernel command line option. | ||
212 | + | ||
213 | + See Documentation/admin-guide/acpi/ssdt-overlays.rst for more | ||
214 | + information. | ||
215 | + | ||
216 | endmenu | ||
217 | |||
218 | config UEFI_CPER | ||
219 | diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c | ||
220 | index d89457d62a24..6e6a590b8388 100644 | ||
221 | --- a/drivers/firmware/efi/efi.c | ||
222 | +++ b/drivers/firmware/efi/efi.c | ||
223 | @@ -198,7 +198,7 @@ static void generic_ops_unregister(void) | ||
224 | efivars_unregister(&generic_efivars); | ||
225 | } | ||
226 | |||
227 | -#if IS_ENABLED(CONFIG_ACPI) | ||
228 | +#ifdef CONFIG_EFI_CUSTOM_SSDT_OVERLAYS | ||
229 | #define EFIVAR_SSDT_NAME_MAX 16 | ||
230 | static char efivar_ssdt[EFIVAR_SSDT_NAME_MAX] __initdata; | ||
231 | static int __init efivar_ssdt_setup(char *str) | ||
232 | diff --git a/drivers/hwmon/acpi_power_meter.c b/drivers/hwmon/acpi_power_meter.c | ||
233 | index e27f7e12c05b..9b4ad6c74041 100644 | ||
234 | --- a/drivers/hwmon/acpi_power_meter.c | ||
235 | +++ b/drivers/hwmon/acpi_power_meter.c | ||
236 | @@ -895,7 +895,7 @@ static int acpi_power_meter_add(struct acpi_device *device) | ||
237 | |||
238 | res = setup_attrs(resource); | ||
239 | if (res) | ||
240 | - goto exit_free; | ||
241 | + goto exit_free_capability; | ||
242 | |||
243 | resource->hwmon_dev = hwmon_device_register(&device->dev); | ||
244 | if (IS_ERR(resource->hwmon_dev)) { | ||
245 | @@ -908,6 +908,8 @@ static int acpi_power_meter_add(struct acpi_device *device) | ||
246 | |||
247 | exit_remove: | ||
248 | remove_attrs(resource); | ||
249 | +exit_free_capability: | ||
250 | + free_capabilities(resource); | ||
251 | exit_free: | ||
252 | kfree(resource); | ||
253 | exit: | ||
254 | diff --git a/drivers/hwmon/max6697.c b/drivers/hwmon/max6697.c | ||
255 | index f03a71722849..d4bb3d6aaf18 100644 | ||
256 | --- a/drivers/hwmon/max6697.c | ||
257 | +++ b/drivers/hwmon/max6697.c | ||
258 | @@ -46,8 +46,9 @@ static const u8 MAX6697_REG_CRIT[] = { | ||
259 | * Map device tree / platform data register bit map to chip bit map. | ||
260 | * Applies to alert register and over-temperature register. | ||
261 | */ | ||
262 | -#define MAX6697_MAP_BITS(reg) ((((reg) & 0x7e) >> 1) | \ | ||
263 | +#define MAX6697_ALERT_MAP_BITS(reg) ((((reg) & 0x7e) >> 1) | \ | ||
264 | (((reg) & 0x01) << 6) | ((reg) & 0x80)) | ||
265 | +#define MAX6697_OVERT_MAP_BITS(reg) (((reg) >> 1) | (((reg) & 0x01) << 7)) | ||
266 | |||
267 | #define MAX6697_REG_STAT(n) (0x44 + (n)) | ||
268 | |||
269 | @@ -586,12 +587,12 @@ static int max6697_init_chip(struct max6697_data *data, | ||
270 | return ret; | ||
271 | |||
272 | ret = i2c_smbus_write_byte_data(client, MAX6697_REG_ALERT_MASK, | ||
273 | - MAX6697_MAP_BITS(pdata->alert_mask)); | ||
274 | + MAX6697_ALERT_MAP_BITS(pdata->alert_mask)); | ||
275 | if (ret < 0) | ||
276 | return ret; | ||
277 | |||
278 | ret = i2c_smbus_write_byte_data(client, MAX6697_REG_OVERT_MASK, | ||
279 | - MAX6697_MAP_BITS(pdata->over_temperature_mask)); | ||
280 | + MAX6697_OVERT_MAP_BITS(pdata->over_temperature_mask)); | ||
281 | if (ret < 0) | ||
282 | return ret; | ||
283 | |||
284 | diff --git a/drivers/i2c/algos/i2c-algo-pca.c b/drivers/i2c/algos/i2c-algo-pca.c | ||
285 | index e370804ec8bc..3a9db4626cb6 100644 | ||
286 | --- a/drivers/i2c/algos/i2c-algo-pca.c | ||
287 | +++ b/drivers/i2c/algos/i2c-algo-pca.c | ||
288 | @@ -326,7 +326,8 @@ static int pca_xfer(struct i2c_adapter *i2c_adap, | ||
289 | DEB2("BUS ERROR - SDA Stuck low\n"); | ||
290 | pca_reset(adap); | ||
291 | goto out; | ||
292 | - case 0x90: /* Bus error - SCL stuck low */ | ||
293 | + case 0x78: /* Bus error - SCL stuck low (PCA9665) */ | ||
294 | + case 0x90: /* Bus error - SCL stuck low (PCA9564) */ | ||
295 | DEB2("BUS ERROR - SCL Stuck low\n"); | ||
296 | pca_reset(adap); | ||
297 | goto out; | ||
298 | diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_u32.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_u32.c | ||
299 | index 49d2debb334e..6afad4d3385a 100644 | ||
300 | --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_u32.c | ||
301 | +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_u32.c | ||
302 | @@ -47,7 +47,7 @@ static int fill_match_fields(struct adapter *adap, | ||
303 | bool next_header) | ||
304 | { | ||
305 | unsigned int i, j; | ||
306 | - u32 val, mask; | ||
307 | + __be32 val, mask; | ||
308 | int off, err; | ||
309 | bool found; | ||
310 | |||
311 | @@ -217,7 +217,7 @@ int cxgb4_config_knode(struct net_device *dev, __be16 protocol, | ||
312 | const struct cxgb4_next_header *next; | ||
313 | bool found = false; | ||
314 | unsigned int i, j; | ||
315 | - u32 val, mask; | ||
316 | + __be32 val, mask; | ||
317 | int off; | ||
318 | |||
319 | if (t->table[link_uhtid - 1].link_handle) { | ||
320 | @@ -231,10 +231,10 @@ int cxgb4_config_knode(struct net_device *dev, __be16 protocol, | ||
321 | |||
322 | /* Try to find matches that allow jumps to next header. */ | ||
323 | for (i = 0; next[i].jump; i++) { | ||
324 | - if (next[i].offoff != cls->knode.sel->offoff || | ||
325 | - next[i].shift != cls->knode.sel->offshift || | ||
326 | - next[i].mask != cls->knode.sel->offmask || | ||
327 | - next[i].offset != cls->knode.sel->off) | ||
328 | + if (next[i].sel.offoff != cls->knode.sel->offoff || | ||
329 | + next[i].sel.offshift != cls->knode.sel->offshift || | ||
330 | + next[i].sel.offmask != cls->knode.sel->offmask || | ||
331 | + next[i].sel.off != cls->knode.sel->off) | ||
332 | continue; | ||
333 | |||
334 | /* Found a possible candidate. Find a key that | ||
335 | @@ -246,9 +246,9 @@ int cxgb4_config_knode(struct net_device *dev, __be16 protocol, | ||
336 | val = cls->knode.sel->keys[j].val; | ||
337 | mask = cls->knode.sel->keys[j].mask; | ||
338 | |||
339 | - if (next[i].match_off == off && | ||
340 | - next[i].match_val == val && | ||
341 | - next[i].match_mask == mask) { | ||
342 | + if (next[i].key.off == off && | ||
343 | + next[i].key.val == val && | ||
344 | + next[i].key.mask == mask) { | ||
345 | found = true; | ||
346 | break; | ||
347 | } | ||
348 | diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_u32_parse.h b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_u32_parse.h | ||
349 | index a4b99edcc339..141085e159e5 100644 | ||
350 | --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_u32_parse.h | ||
351 | +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_u32_parse.h | ||
352 | @@ -38,12 +38,12 @@ | ||
353 | struct cxgb4_match_field { | ||
354 | int off; /* Offset from the beginning of the header to match */ | ||
355 | /* Fill the value/mask pair in the spec if matched */ | ||
356 | - int (*val)(struct ch_filter_specification *f, u32 val, u32 mask); | ||
357 | + int (*val)(struct ch_filter_specification *f, __be32 val, __be32 mask); | ||
358 | }; | ||
359 | |||
360 | /* IPv4 match fields */ | ||
361 | static inline int cxgb4_fill_ipv4_tos(struct ch_filter_specification *f, | ||
362 | - u32 val, u32 mask) | ||
363 | + __be32 val, __be32 mask) | ||
364 | { | ||
365 | f->val.tos = (ntohl(val) >> 16) & 0x000000FF; | ||
366 | f->mask.tos = (ntohl(mask) >> 16) & 0x000000FF; | ||
367 | @@ -52,7 +52,7 @@ static inline int cxgb4_fill_ipv4_tos(struct ch_filter_specification *f, | ||
368 | } | ||
369 | |||
370 | static inline int cxgb4_fill_ipv4_frag(struct ch_filter_specification *f, | ||
371 | - u32 val, u32 mask) | ||
372 | + __be32 val, __be32 mask) | ||
373 | { | ||
374 | u32 mask_val; | ||
375 | u8 frag_val; | ||
376 | @@ -74,7 +74,7 @@ static inline int cxgb4_fill_ipv4_frag(struct ch_filter_specification *f, | ||
377 | } | ||
378 | |||
379 | static inline int cxgb4_fill_ipv4_proto(struct ch_filter_specification *f, | ||
380 | - u32 val, u32 mask) | ||
381 | + __be32 val, __be32 mask) | ||
382 | { | ||
383 | f->val.proto = (ntohl(val) >> 16) & 0x000000FF; | ||
384 | f->mask.proto = (ntohl(mask) >> 16) & 0x000000FF; | ||
385 | @@ -83,7 +83,7 @@ static inline int cxgb4_fill_ipv4_proto(struct ch_filter_specification *f, | ||
386 | } | ||
387 | |||
388 | static inline int cxgb4_fill_ipv4_src_ip(struct ch_filter_specification *f, | ||
389 | - u32 val, u32 mask) | ||
390 | + __be32 val, __be32 mask) | ||
391 | { | ||
392 | memcpy(&f->val.fip[0], &val, sizeof(u32)); | ||
393 | memcpy(&f->mask.fip[0], &mask, sizeof(u32)); | ||
394 | @@ -92,7 +92,7 @@ static inline int cxgb4_fill_ipv4_src_ip(struct ch_filter_specification *f, | ||
395 | } | ||
396 | |||
397 | static inline int cxgb4_fill_ipv4_dst_ip(struct ch_filter_specification *f, | ||
398 | - u32 val, u32 mask) | ||
399 | + __be32 val, __be32 mask) | ||
400 | { | ||
401 | memcpy(&f->val.lip[0], &val, sizeof(u32)); | ||
402 | memcpy(&f->mask.lip[0], &mask, sizeof(u32)); | ||
403 | @@ -111,7 +111,7 @@ static const struct cxgb4_match_field cxgb4_ipv4_fields[] = { | ||
404 | |||
405 | /* IPv6 match fields */ | ||
406 | static inline int cxgb4_fill_ipv6_tos(struct ch_filter_specification *f, | ||
407 | - u32 val, u32 mask) | ||
408 | + __be32 val, __be32 mask) | ||
409 | { | ||
410 | f->val.tos = (ntohl(val) >> 20) & 0x000000FF; | ||
411 | f->mask.tos = (ntohl(mask) >> 20) & 0x000000FF; | ||
412 | @@ -120,7 +120,7 @@ static inline int cxgb4_fill_ipv6_tos(struct ch_filter_specification *f, | ||
413 | } | ||
414 | |||
415 | static inline int cxgb4_fill_ipv6_proto(struct ch_filter_specification *f, | ||
416 | - u32 val, u32 mask) | ||
417 | + __be32 val, __be32 mask) | ||
418 | { | ||
419 | f->val.proto = (ntohl(val) >> 8) & 0x000000FF; | ||
420 | f->mask.proto = (ntohl(mask) >> 8) & 0x000000FF; | ||
421 | @@ -129,7 +129,7 @@ static inline int cxgb4_fill_ipv6_proto(struct ch_filter_specification *f, | ||
422 | } | ||
423 | |||
424 | static inline int cxgb4_fill_ipv6_src_ip0(struct ch_filter_specification *f, | ||
425 | - u32 val, u32 mask) | ||
426 | + __be32 val, __be32 mask) | ||
427 | { | ||
428 | memcpy(&f->val.fip[0], &val, sizeof(u32)); | ||
429 | memcpy(&f->mask.fip[0], &mask, sizeof(u32)); | ||
430 | @@ -138,7 +138,7 @@ static inline int cxgb4_fill_ipv6_src_ip0(struct ch_filter_specification *f, | ||
431 | } | ||
432 | |||
433 | static inline int cxgb4_fill_ipv6_src_ip1(struct ch_filter_specification *f, | ||
434 | - u32 val, u32 mask) | ||
435 | + __be32 val, __be32 mask) | ||
436 | { | ||
437 | memcpy(&f->val.fip[4], &val, sizeof(u32)); | ||
438 | memcpy(&f->mask.fip[4], &mask, sizeof(u32)); | ||
439 | @@ -147,7 +147,7 @@ static inline int cxgb4_fill_ipv6_src_ip1(struct ch_filter_specification *f, | ||
440 | } | ||
441 | |||
442 | static inline int cxgb4_fill_ipv6_src_ip2(struct ch_filter_specification *f, | ||
443 | - u32 val, u32 mask) | ||
444 | + __be32 val, __be32 mask) | ||
445 | { | ||
446 | memcpy(&f->val.fip[8], &val, sizeof(u32)); | ||
447 | memcpy(&f->mask.fip[8], &mask, sizeof(u32)); | ||
448 | @@ -156,7 +156,7 @@ static inline int cxgb4_fill_ipv6_src_ip2(struct ch_filter_specification *f, | ||
449 | } | ||
450 | |||
451 | static inline int cxgb4_fill_ipv6_src_ip3(struct ch_filter_specification *f, | ||
452 | - u32 val, u32 mask) | ||
453 | + __be32 val, __be32 mask) | ||
454 | { | ||
455 | memcpy(&f->val.fip[12], &val, sizeof(u32)); | ||
456 | memcpy(&f->mask.fip[12], &mask, sizeof(u32)); | ||
457 | @@ -165,7 +165,7 @@ static inline int cxgb4_fill_ipv6_src_ip3(struct ch_filter_specification *f, | ||
458 | } | ||
459 | |||
460 | static inline int cxgb4_fill_ipv6_dst_ip0(struct ch_filter_specification *f, | ||
461 | - u32 val, u32 mask) | ||
462 | + __be32 val, __be32 mask) | ||
463 | { | ||
464 | memcpy(&f->val.lip[0], &val, sizeof(u32)); | ||
465 | memcpy(&f->mask.lip[0], &mask, sizeof(u32)); | ||
466 | @@ -174,7 +174,7 @@ static inline int cxgb4_fill_ipv6_dst_ip0(struct ch_filter_specification *f, | ||
467 | } | ||
468 | |||
469 | static inline int cxgb4_fill_ipv6_dst_ip1(struct ch_filter_specification *f, | ||
470 | - u32 val, u32 mask) | ||
471 | + __be32 val, __be32 mask) | ||
472 | { | ||
473 | memcpy(&f->val.lip[4], &val, sizeof(u32)); | ||
474 | memcpy(&f->mask.lip[4], &mask, sizeof(u32)); | ||
475 | @@ -183,7 +183,7 @@ static inline int cxgb4_fill_ipv6_dst_ip1(struct ch_filter_specification *f, | ||
476 | } | ||
477 | |||
478 | static inline int cxgb4_fill_ipv6_dst_ip2(struct ch_filter_specification *f, | ||
479 | - u32 val, u32 mask) | ||
480 | + __be32 val, __be32 mask) | ||
481 | { | ||
482 | memcpy(&f->val.lip[8], &val, sizeof(u32)); | ||
483 | memcpy(&f->mask.lip[8], &mask, sizeof(u32)); | ||
484 | @@ -192,7 +192,7 @@ static inline int cxgb4_fill_ipv6_dst_ip2(struct ch_filter_specification *f, | ||
485 | } | ||
486 | |||
487 | static inline int cxgb4_fill_ipv6_dst_ip3(struct ch_filter_specification *f, | ||
488 | - u32 val, u32 mask) | ||
489 | + __be32 val, __be32 mask) | ||
490 | { | ||
491 | memcpy(&f->val.lip[12], &val, sizeof(u32)); | ||
492 | memcpy(&f->mask.lip[12], &mask, sizeof(u32)); | ||
493 | @@ -216,7 +216,7 @@ static const struct cxgb4_match_field cxgb4_ipv6_fields[] = { | ||
494 | |||
495 | /* TCP/UDP match */ | ||
496 | static inline int cxgb4_fill_l4_ports(struct ch_filter_specification *f, | ||
497 | - u32 val, u32 mask) | ||
498 | + __be32 val, __be32 mask) | ||
499 | { | ||
500 | f->val.fport = ntohl(val) >> 16; | ||
501 | f->mask.fport = ntohl(mask) >> 16; | ||
502 | @@ -237,19 +237,13 @@ static const struct cxgb4_match_field cxgb4_udp_fields[] = { | ||
503 | }; | ||
504 | |||
505 | struct cxgb4_next_header { | ||
506 | - unsigned int offset; /* Offset to next header */ | ||
507 | - /* offset, shift, and mask added to offset above | ||
508 | + /* Offset, shift, and mask added to beginning of the header | ||
509 | * to get to next header. Useful when using a header | ||
510 | * field's value to jump to next header such as IHL field | ||
511 | * in IPv4 header. | ||
512 | */ | ||
513 | - unsigned int offoff; | ||
514 | - u32 shift; | ||
515 | - u32 mask; | ||
516 | - /* match criteria to make this jump */ | ||
517 | - unsigned int match_off; | ||
518 | - u32 match_val; | ||
519 | - u32 match_mask; | ||
520 | + struct tc_u32_sel sel; | ||
521 | + struct tc_u32_key key; | ||
522 | /* location of jump to make */ | ||
523 | const struct cxgb4_match_field *jump; | ||
524 | }; | ||
525 | @@ -258,26 +252,74 @@ struct cxgb4_next_header { | ||
526 | * IPv4 header. | ||
527 | */ | ||
528 | static const struct cxgb4_next_header cxgb4_ipv4_jumps[] = { | ||
529 | - { .offset = 0, .offoff = 0, .shift = 6, .mask = 0xF, | ||
530 | - .match_off = 8, .match_val = 0x600, .match_mask = 0xFF00, | ||
531 | - .jump = cxgb4_tcp_fields }, | ||
532 | - { .offset = 0, .offoff = 0, .shift = 6, .mask = 0xF, | ||
533 | - .match_off = 8, .match_val = 0x1100, .match_mask = 0xFF00, | ||
534 | - .jump = cxgb4_udp_fields }, | ||
535 | - { .jump = NULL } | ||
536 | + { | ||
537 | + /* TCP Jump */ | ||
538 | + .sel = { | ||
539 | + .off = 0, | ||
540 | + .offoff = 0, | ||
541 | + .offshift = 6, | ||
542 | + .offmask = cpu_to_be16(0x0f00), | ||
543 | + }, | ||
544 | + .key = { | ||
545 | + .off = 8, | ||
546 | + .val = cpu_to_be32(0x00060000), | ||
547 | + .mask = cpu_to_be32(0x00ff0000), | ||
548 | + }, | ||
549 | + .jump = cxgb4_tcp_fields, | ||
550 | + }, | ||
551 | + { | ||
552 | + /* UDP Jump */ | ||
553 | + .sel = { | ||
554 | + .off = 0, | ||
555 | + .offoff = 0, | ||
556 | + .offshift = 6, | ||
557 | + .offmask = cpu_to_be16(0x0f00), | ||
558 | + }, | ||
559 | + .key = { | ||
560 | + .off = 8, | ||
561 | + .val = cpu_to_be32(0x00110000), | ||
562 | + .mask = cpu_to_be32(0x00ff0000), | ||
563 | + }, | ||
564 | + .jump = cxgb4_udp_fields, | ||
565 | + }, | ||
566 | + { .jump = NULL }, | ||
567 | }; | ||
568 | |||
569 | /* Accept a rule with a jump directly past the 40 Bytes of IPv6 fixed header | ||
570 | * to get to transport layer header. | ||
571 | */ | ||
572 | static const struct cxgb4_next_header cxgb4_ipv6_jumps[] = { | ||
573 | - { .offset = 0x28, .offoff = 0, .shift = 0, .mask = 0, | ||
574 | - .match_off = 4, .match_val = 0x60000, .match_mask = 0xFF0000, | ||
575 | - .jump = cxgb4_tcp_fields }, | ||
576 | - { .offset = 0x28, .offoff = 0, .shift = 0, .mask = 0, | ||
577 | - .match_off = 4, .match_val = 0x110000, .match_mask = 0xFF0000, | ||
578 | - .jump = cxgb4_udp_fields }, | ||
579 | - { .jump = NULL } | ||
580 | + { | ||
581 | + /* TCP Jump */ | ||
582 | + .sel = { | ||
583 | + .off = 40, | ||
584 | + .offoff = 0, | ||
585 | + .offshift = 0, | ||
586 | + .offmask = 0, | ||
587 | + }, | ||
588 | + .key = { | ||
589 | + .off = 4, | ||
590 | + .val = cpu_to_be32(0x00000600), | ||
591 | + .mask = cpu_to_be32(0x0000ff00), | ||
592 | + }, | ||
593 | + .jump = cxgb4_tcp_fields, | ||
594 | + }, | ||
595 | + { | ||
596 | + /* UDP Jump */ | ||
597 | + .sel = { | ||
598 | + .off = 40, | ||
599 | + .offoff = 0, | ||
600 | + .offshift = 0, | ||
601 | + .offmask = 0, | ||
602 | + }, | ||
603 | + .key = { | ||
604 | + .off = 4, | ||
605 | + .val = cpu_to_be32(0x00001100), | ||
606 | + .mask = cpu_to_be32(0x0000ff00), | ||
607 | + }, | ||
608 | + .jump = cxgb4_udp_fields, | ||
609 | + }, | ||
610 | + { .jump = NULL }, | ||
611 | }; | ||
612 | |||
613 | struct cxgb4_link { | ||
614 | diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c | ||
615 | index e719ecd69d01..6852ebafd4d3 100644 | ||
616 | --- a/drivers/net/usb/smsc95xx.c | ||
617 | +++ b/drivers/net/usb/smsc95xx.c | ||
618 | @@ -1327,7 +1327,7 @@ static void smsc95xx_unbind(struct usbnet *dev, struct usb_interface *intf) | ||
619 | struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); | ||
620 | |||
621 | if (pdata) { | ||
622 | - cancel_delayed_work(&pdata->carrier_check); | ||
623 | + cancel_delayed_work_sync(&pdata->carrier_check); | ||
624 | netif_dbg(dev, ifdown, dev->net, "free pdata\n"); | ||
625 | kfree(pdata); | ||
626 | pdata = NULL; | ||
627 | diff --git a/drivers/usb/misc/usbtest.c b/drivers/usb/misc/usbtest.c | ||
628 | index e31f72b3a22c..54b8e8645e0b 100644 | ||
629 | --- a/drivers/usb/misc/usbtest.c | ||
630 | +++ b/drivers/usb/misc/usbtest.c | ||
631 | @@ -2771,6 +2771,7 @@ static void usbtest_disconnect(struct usb_interface *intf) | ||
632 | |||
633 | usb_set_intfdata(intf, NULL); | ||
634 | dev_dbg(&intf->dev, "disconnect\n"); | ||
635 | + kfree(dev->buf); | ||
636 | kfree(dev); | ||
637 | } | ||
638 | |||
639 | diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c | ||
640 | index a83f353e4418..c0033a0d0078 100644 | ||
641 | --- a/fs/btrfs/extent-tree.c | ||
642 | +++ b/fs/btrfs/extent-tree.c | ||
643 | @@ -10645,7 +10645,7 @@ int btrfs_remove_block_group(struct btrfs_trans_handle *trans, | ||
644 | path = btrfs_alloc_path(); | ||
645 | if (!path) { | ||
646 | ret = -ENOMEM; | ||
647 | - goto out_put_group; | ||
648 | + goto out; | ||
649 | } | ||
650 | |||
651 | /* | ||
652 | @@ -10684,7 +10684,7 @@ int btrfs_remove_block_group(struct btrfs_trans_handle *trans, | ||
653 | ret = btrfs_orphan_add(trans, inode); | ||
654 | if (ret) { | ||
655 | btrfs_add_delayed_iput(inode); | ||
656 | - goto out_put_group; | ||
657 | + goto out; | ||
658 | } | ||
659 | clear_nlink(inode); | ||
660 | /* One for the block groups ref */ | ||
661 | @@ -10707,13 +10707,13 @@ int btrfs_remove_block_group(struct btrfs_trans_handle *trans, | ||
662 | |||
663 | ret = btrfs_search_slot(trans, tree_root, &key, path, -1, 1); | ||
664 | if (ret < 0) | ||
665 | - goto out_put_group; | ||
666 | + goto out; | ||
667 | if (ret > 0) | ||
668 | btrfs_release_path(path); | ||
669 | if (ret == 0) { | ||
670 | ret = btrfs_del_item(trans, tree_root, path); | ||
671 | if (ret) | ||
672 | - goto out_put_group; | ||
673 | + goto out; | ||
674 | btrfs_release_path(path); | ||
675 | } | ||
676 | |||
677 | @@ -10722,6 +10722,9 @@ int btrfs_remove_block_group(struct btrfs_trans_handle *trans, | ||
678 | &root->fs_info->block_group_cache_tree); | ||
679 | RB_CLEAR_NODE(&block_group->cache_node); | ||
680 | |||
681 | + /* Once for the block groups rbtree */ | ||
682 | + btrfs_put_block_group(block_group); | ||
683 | + | ||
684 | if (root->fs_info->first_logical_byte == block_group->key.objectid) | ||
685 | root->fs_info->first_logical_byte = (u64)-1; | ||
686 | spin_unlock(&root->fs_info->block_group_cache_lock); | ||
687 | @@ -10871,10 +10874,7 @@ int btrfs_remove_block_group(struct btrfs_trans_handle *trans, | ||
688 | |||
689 | ret = remove_block_group_free_space(trans, root->fs_info, block_group); | ||
690 | if (ret) | ||
691 | - goto out_put_group; | ||
692 | - | ||
693 | - /* Once for the block groups rbtree */ | ||
694 | - btrfs_put_block_group(block_group); | ||
695 | + goto out; | ||
696 | |||
697 | ret = btrfs_search_slot(trans, root, &key, path, -1, 1); | ||
698 | if (ret > 0) | ||
699 | @@ -10884,10 +10884,9 @@ int btrfs_remove_block_group(struct btrfs_trans_handle *trans, | ||
700 | |||
701 | ret = btrfs_del_item(trans, root, path); | ||
702 | |||
703 | -out_put_group: | ||
704 | +out: | ||
705 | /* Once for the lookup reference */ | ||
706 | btrfs_put_block_group(block_group); | ||
707 | -out: | ||
708 | btrfs_free_path(path); | ||
709 | return ret; | ||
710 | } | ||
711 | diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c | ||
712 | index c425443c31fe..dfc0b3adf57a 100644 | ||
713 | --- a/fs/btrfs/inode.c | ||
714 | +++ b/fs/btrfs/inode.c | ||
715 | @@ -947,7 +947,7 @@ static noinline int cow_file_range(struct inode *inode, | ||
716 | u64 alloc_hint = 0; | ||
717 | u64 num_bytes; | ||
718 | unsigned long ram_size; | ||
719 | - u64 disk_num_bytes; | ||
720 | + u64 min_alloc_size; | ||
721 | u64 cur_alloc_size; | ||
722 | u64 blocksize = root->sectorsize; | ||
723 | struct btrfs_key ins; | ||
724 | @@ -963,7 +963,6 @@ static noinline int cow_file_range(struct inode *inode, | ||
725 | |||
726 | num_bytes = ALIGN(end - start + 1, blocksize); | ||
727 | num_bytes = max(blocksize, num_bytes); | ||
728 | - disk_num_bytes = num_bytes; | ||
729 | |||
730 | /* if this is a small write inside eof, kick off defrag */ | ||
731 | if (num_bytes < SZ_64K && | ||
732 | @@ -992,18 +991,33 @@ static noinline int cow_file_range(struct inode *inode, | ||
733 | } | ||
734 | } | ||
735 | |||
736 | - BUG_ON(disk_num_bytes > | ||
737 | - btrfs_super_total_bytes(root->fs_info->super_copy)); | ||
738 | + BUG_ON(num_bytes > btrfs_super_total_bytes(root->fs_info->super_copy)); | ||
739 | |||
740 | alloc_hint = get_extent_allocation_hint(inode, start, num_bytes); | ||
741 | btrfs_drop_extent_cache(inode, start, start + num_bytes - 1, 0); | ||
742 | |||
743 | - while (disk_num_bytes > 0) { | ||
744 | + /* | ||
745 | + * Relocation relies on the relocated extents to have exactly the same | ||
746 | + * size as the original extents. Normally writeback for relocation data | ||
747 | + * extents follows a NOCOW path because relocation preallocates the | ||
748 | + * extents. However, due to an operation such as scrub turning a block | ||
749 | + * group to RO mode, it may fallback to COW mode, so we must make sure | ||
750 | + * an extent allocated during COW has exactly the requested size and can | ||
751 | + * not be split into smaller extents, otherwise relocation breaks and | ||
752 | + * fails during the stage where it updates the bytenr of file extent | ||
753 | + * items. | ||
754 | + */ | ||
755 | + if (root->root_key.objectid == BTRFS_DATA_RELOC_TREE_OBJECTID) | ||
756 | + min_alloc_size = num_bytes; | ||
757 | + else | ||
758 | + min_alloc_size = root->sectorsize; | ||
759 | + | ||
760 | + while (num_bytes > 0) { | ||
761 | unsigned long op; | ||
762 | |||
763 | - cur_alloc_size = disk_num_bytes; | ||
764 | + cur_alloc_size = num_bytes; | ||
765 | ret = btrfs_reserve_extent(root, cur_alloc_size, cur_alloc_size, | ||
766 | - root->sectorsize, 0, alloc_hint, | ||
767 | + min_alloc_size, 0, alloc_hint, | ||
768 | &ins, 1, 1); | ||
769 | if (ret < 0) | ||
770 | goto out_unlock; | ||
771 | @@ -1058,7 +1072,7 @@ static noinline int cow_file_range(struct inode *inode, | ||
772 | |||
773 | btrfs_dec_block_group_reservations(root->fs_info, ins.objectid); | ||
774 | |||
775 | - if (disk_num_bytes < cur_alloc_size) | ||
776 | + if (num_bytes < cur_alloc_size) | ||
777 | break; | ||
778 | |||
779 | /* we're not doing compressed IO, don't unlock the first | ||
780 | @@ -1076,8 +1090,10 @@ static noinline int cow_file_range(struct inode *inode, | ||
781 | delalloc_end, locked_page, | ||
782 | EXTENT_LOCKED | EXTENT_DELALLOC, | ||
783 | op); | ||
784 | - disk_num_bytes -= cur_alloc_size; | ||
785 | - num_bytes -= cur_alloc_size; | ||
786 | + if (num_bytes < cur_alloc_size) | ||
787 | + num_bytes = 0; | ||
788 | + else | ||
789 | + num_bytes -= cur_alloc_size; | ||
790 | alloc_hint = ins.objectid + ins.offset; | ||
791 | start += cur_alloc_size; | ||
792 | } | ||
793 | diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c | ||
794 | index 3545b237187a..df8fab6fc2ca 100644 | ||
795 | --- a/fs/cifs/connect.c | ||
796 | +++ b/fs/cifs/connect.c | ||
797 | @@ -4213,9 +4213,12 @@ cifs_construct_tcon(struct cifs_sb_info *cifs_sb, kuid_t fsuid) | ||
798 | vol_info->retry = master_tcon->retry; | ||
799 | vol_info->nocase = master_tcon->nocase; | ||
800 | vol_info->local_lease = master_tcon->local_lease; | ||
801 | + vol_info->resilient = master_tcon->use_resilient; | ||
802 | + vol_info->persistent = master_tcon->use_persistent; | ||
803 | vol_info->no_linux_ext = !master_tcon->unix_ext; | ||
804 | vol_info->sectype = master_tcon->ses->sectype; | ||
805 | vol_info->sign = master_tcon->ses->sign; | ||
806 | + vol_info->seal = master_tcon->seal; | ||
807 | |||
808 | rc = cifs_set_vol_auth(vol_info, master_tcon->ses); | ||
809 | if (rc) { | ||
810 | diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c | ||
811 | index dfa85ad5b481..3dad943da956 100644 | ||
812 | --- a/fs/cifs/inode.c | ||
813 | +++ b/fs/cifs/inode.c | ||
814 | @@ -1770,6 +1770,7 @@ cifs_rename2(struct inode *source_dir, struct dentry *source_dentry, | ||
815 | FILE_UNIX_BASIC_INFO *info_buf_target; | ||
816 | unsigned int xid; | ||
817 | int rc, tmprc; | ||
818 | + bool new_target = d_really_is_negative(target_dentry); | ||
819 | |||
820 | if (flags & ~RENAME_NOREPLACE) | ||
821 | return -EINVAL; | ||
822 | @@ -1846,8 +1847,13 @@ cifs_rename2(struct inode *source_dir, struct dentry *source_dentry, | ||
823 | */ | ||
824 | |||
825 | unlink_target: | ||
826 | - /* Try unlinking the target dentry if it's not negative */ | ||
827 | - if (d_really_is_positive(target_dentry) && (rc == -EACCES || rc == -EEXIST)) { | ||
828 | + /* | ||
829 | + * If the target dentry was created during the rename, try | ||
830 | + * unlinking it if it's not negative | ||
831 | + */ | ||
832 | + if (new_target && | ||
833 | + d_really_is_positive(target_dentry) && | ||
834 | + (rc == -EACCES || rc == -EEXIST)) { | ||
835 | if (d_is_dir(target_dentry)) | ||
836 | tmprc = cifs_rmdir(target_dir, target_dentry); | ||
837 | else | ||
838 | diff --git a/include/crypto/if_alg.h b/include/crypto/if_alg.h | ||
839 | index a2bfd7843f18..4bb6b98782e9 100644 | ||
840 | --- a/include/crypto/if_alg.h | ||
841 | +++ b/include/crypto/if_alg.h | ||
842 | @@ -30,8 +30,8 @@ struct alg_sock { | ||
843 | |||
844 | struct sock *parent; | ||
845 | |||
846 | - unsigned int refcnt; | ||
847 | - unsigned int nokey_refcnt; | ||
848 | + atomic_t refcnt; | ||
849 | + atomic_t nokey_refcnt; | ||
850 | |||
851 | const struct af_alg_type *type; | ||
852 | void *private; | ||
853 | diff --git a/include/linux/sched/sysctl.h b/include/linux/sched/sysctl.h | ||
854 | index 05e8b6e4edcb..debcd4bf2295 100644 | ||
855 | --- a/include/linux/sched/sysctl.h | ||
856 | +++ b/include/linux/sched/sysctl.h | ||
857 | @@ -60,6 +60,7 @@ extern unsigned int sysctl_sched_cfs_bandwidth_slice; | ||
858 | extern unsigned int sysctl_sched_autogroup_enabled; | ||
859 | #endif | ||
860 | |||
861 | +extern int sysctl_sched_rr_timeslice; | ||
862 | extern int sched_rr_timeslice; | ||
863 | |||
864 | extern int sched_rr_handler(struct ctl_table *table, int write, | ||
865 | diff --git a/kernel/debug/debug_core.c b/kernel/debug/debug_core.c | ||
866 | index 9c939c6bf21c..321ccdbb7364 100644 | ||
867 | --- a/kernel/debug/debug_core.c | ||
868 | +++ b/kernel/debug/debug_core.c | ||
869 | @@ -488,6 +488,7 @@ static int kgdb_cpu_enter(struct kgdb_state *ks, struct pt_regs *regs, | ||
870 | arch_kgdb_ops.disable_hw_break(regs); | ||
871 | |||
872 | acquirelock: | ||
873 | + rcu_read_lock(); | ||
874 | /* | ||
875 | * Interrupts will be restored by the 'trap return' code, except when | ||
876 | * single stepping. | ||
877 | @@ -542,6 +543,7 @@ return_normal: | ||
878 | atomic_dec(&slaves_in_kgdb); | ||
879 | dbg_touch_watchdogs(); | ||
880 | local_irq_restore(flags); | ||
881 | + rcu_read_unlock(); | ||
882 | return 0; | ||
883 | } | ||
884 | cpu_relax(); | ||
885 | @@ -560,6 +562,7 @@ return_normal: | ||
886 | raw_spin_unlock(&dbg_master_lock); | ||
887 | dbg_touch_watchdogs(); | ||
888 | local_irq_restore(flags); | ||
889 | + rcu_read_unlock(); | ||
890 | |||
891 | goto acquirelock; | ||
892 | } | ||
893 | @@ -677,6 +680,7 @@ kgdb_restore: | ||
894 | raw_spin_unlock(&dbg_master_lock); | ||
895 | dbg_touch_watchdogs(); | ||
896 | local_irq_restore(flags); | ||
897 | + rcu_read_unlock(); | ||
898 | |||
899 | return kgdb_info[cpu].ret_state; | ||
900 | } | ||
901 | diff --git a/kernel/sched/core.c b/kernel/sched/core.c | ||
902 | index 870d802c46f9..c7c7ba8807f8 100644 | ||
903 | --- a/kernel/sched/core.c | ||
904 | +++ b/kernel/sched/core.c | ||
905 | @@ -8389,8 +8389,9 @@ int sched_rr_handler(struct ctl_table *table, int write, | ||
906 | /* make sure that internally we keep jiffies */ | ||
907 | /* also, writing zero resets timeslice to default */ | ||
908 | if (!ret && write) { | ||
909 | - sched_rr_timeslice = sched_rr_timeslice <= 0 ? | ||
910 | - RR_TIMESLICE : msecs_to_jiffies(sched_rr_timeslice); | ||
911 | + sched_rr_timeslice = | ||
912 | + sysctl_sched_rr_timeslice <= 0 ? RR_TIMESLICE : | ||
913 | + msecs_to_jiffies(sysctl_sched_rr_timeslice); | ||
914 | } | ||
915 | mutex_unlock(&mutex); | ||
916 | return ret; | ||
917 | diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c | ||
918 | index 9ab4d73e9cc9..5034c41a5313 100644 | ||
919 | --- a/kernel/sched/rt.c | ||
920 | +++ b/kernel/sched/rt.c | ||
921 | @@ -9,6 +9,7 @@ | ||
922 | #include <linux/irq_work.h> | ||
923 | |||
924 | int sched_rr_timeslice = RR_TIMESLICE; | ||
925 | +int sysctl_sched_rr_timeslice = (MSEC_PER_SEC / HZ) * RR_TIMESLICE; | ||
926 | |||
927 | static int do_sched_rt_period_timer(struct rt_bandwidth *rt_b, int overrun); | ||
928 | |||
929 | diff --git a/kernel/sysctl.c b/kernel/sysctl.c | ||
930 | index 34449ec0689d..513e6da318c4 100644 | ||
931 | --- a/kernel/sysctl.c | ||
932 | +++ b/kernel/sysctl.c | ||
933 | @@ -426,7 +426,7 @@ static struct ctl_table kern_table[] = { | ||
934 | }, | ||
935 | { | ||
936 | .procname = "sched_rr_timeslice_ms", | ||
937 | - .data = &sched_rr_timeslice, | ||
938 | + .data = &sysctl_sched_rr_timeslice, | ||
939 | .maxlen = sizeof(int), | ||
940 | .mode = 0644, | ||
941 | .proc_handler = sched_rr_handler, | ||
942 | diff --git a/mm/slub.c b/mm/slub.c | ||
943 | index 3d45713187a4..454c1d550ad2 100644 | ||
944 | --- a/mm/slub.c | ||
945 | +++ b/mm/slub.c | ||
946 | @@ -624,6 +624,20 @@ static void slab_fix(struct kmem_cache *s, char *fmt, ...) | ||
947 | va_end(args); | ||
948 | } | ||
949 | |||
950 | +static bool freelist_corrupted(struct kmem_cache *s, struct page *page, | ||
951 | + void *freelist, void *nextfree) | ||
952 | +{ | ||
953 | + if ((s->flags & SLAB_CONSISTENCY_CHECKS) && | ||
954 | + !check_valid_pointer(s, page, nextfree)) { | ||
955 | + object_err(s, page, freelist, "Freechain corrupt"); | ||
956 | + freelist = NULL; | ||
957 | + slab_fix(s, "Isolate corrupted freechain"); | ||
958 | + return true; | ||
959 | + } | ||
960 | + | ||
961 | + return false; | ||
962 | +} | ||
963 | + | ||
964 | static void print_trailer(struct kmem_cache *s, struct page *page, u8 *p) | ||
965 | { | ||
966 | unsigned int off; /* Offset of last byte */ | ||
967 | @@ -1305,6 +1319,11 @@ static inline void inc_slabs_node(struct kmem_cache *s, int node, | ||
968 | static inline void dec_slabs_node(struct kmem_cache *s, int node, | ||
969 | int objects) {} | ||
970 | |||
971 | +static bool freelist_corrupted(struct kmem_cache *s, struct page *page, | ||
972 | + void *freelist, void *nextfree) | ||
973 | +{ | ||
974 | + return false; | ||
975 | +} | ||
976 | #endif /* CONFIG_SLUB_DEBUG */ | ||
977 | |||
978 | /* | ||
979 | @@ -2016,6 +2035,14 @@ static void deactivate_slab(struct kmem_cache *s, struct page *page, | ||
980 | void *prior; | ||
981 | unsigned long counters; | ||
982 | |||
983 | + /* | ||
984 | + * If 'nextfree' is invalid, it is possible that the object at | ||
985 | + * 'freelist' is already corrupted. So isolate all objects | ||
986 | + * starting at 'freelist'. | ||
987 | + */ | ||
988 | + if (freelist_corrupted(s, page, freelist, nextfree)) | ||
989 | + break; | ||
990 | + | ||
991 | do { | ||
992 | prior = page->freelist; | ||
993 | counters = page->counters; | ||
994 | @@ -5499,7 +5526,8 @@ static void memcg_propagate_slab_attrs(struct kmem_cache *s) | ||
995 | */ | ||
996 | if (buffer) | ||
997 | buf = buffer; | ||
998 | - else if (root_cache->max_attr_size < ARRAY_SIZE(mbuf)) | ||
999 | + else if (root_cache->max_attr_size < ARRAY_SIZE(mbuf) && | ||
1000 | + !IS_ENABLED(CONFIG_SLUB_STATS)) | ||
1001 | buf = mbuf; | ||
1002 | else { | ||
1003 | buffer = (char *) get_zeroed_page(GFP_KERNEL); | ||
1004 | diff --git a/mm/swap_state.c b/mm/swap_state.c | ||
1005 | index 35d7e0ee1c77..f5cb6b23ceda 100644 | ||
1006 | --- a/mm/swap_state.c | ||
1007 | +++ b/mm/swap_state.c | ||
1008 | @@ -19,6 +19,7 @@ | ||
1009 | #include <linux/migrate.h> | ||
1010 | |||
1011 | #include <asm/pgtable.h> | ||
1012 | +#include "internal.h" | ||
1013 | |||
1014 | /* | ||
1015 | * swapper_space is a fiction, retained to simplify the path through | ||
1016 | @@ -326,7 +327,7 @@ struct page *__read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask, | ||
1017 | /* | ||
1018 | * call radix_tree_preload() while we can wait. | ||
1019 | */ | ||
1020 | - err = radix_tree_maybe_preload(gfp_mask & GFP_KERNEL); | ||
1021 | + err = radix_tree_maybe_preload(gfp_mask & GFP_RECLAIM_MASK); | ||
1022 | if (err) | ||
1023 | break; | ||
1024 | |||
1025 | diff --git a/net/netfilter/nf_conntrack_h323_main.c b/net/netfilter/nf_conntrack_h323_main.c | ||
1026 | index f65d93639d12..29fe1e7eac88 100644 | ||
1027 | --- a/net/netfilter/nf_conntrack_h323_main.c | ||
1028 | +++ b/net/netfilter/nf_conntrack_h323_main.c | ||
1029 | @@ -1225,6 +1225,7 @@ static struct nf_conntrack_helper nf_conntrack_helper_q931[] __read_mostly = { | ||
1030 | { | ||
1031 | .name = "Q.931", | ||
1032 | .me = THIS_MODULE, | ||
1033 | + .data_len = sizeof(struct nf_ct_h323_master), | ||
1034 | .tuple.src.l3num = AF_INET6, | ||
1035 | .tuple.src.u.tcp.port = cpu_to_be16(Q931_PORT), | ||
1036 | .tuple.dst.protonum = IPPROTO_TCP, | ||
1037 | diff --git a/sound/usb/card.h b/sound/usb/card.h | ||
1038 | index c4599cf0ddc9..111b0f009afa 100644 | ||
1039 | --- a/sound/usb/card.h | ||
1040 | +++ b/sound/usb/card.h | ||
1041 | @@ -80,10 +80,6 @@ struct snd_usb_endpoint { | ||
1042 | dma_addr_t sync_dma; /* DMA address of syncbuf */ | ||
1043 | |||
1044 | unsigned int pipe; /* the data i/o pipe */ | ||
1045 | - unsigned int framesize[2]; /* small/large frame sizes in samples */ | ||
1046 | - unsigned int sample_rem; /* remainder from division fs/fps */ | ||
1047 | - unsigned int sample_accum; /* sample accumulator */ | ||
1048 | - unsigned int fps; /* frames per second */ | ||
1049 | unsigned int freqn; /* nominal sampling rate in fs/fps in Q16.16 format */ | ||
1050 | unsigned int freqm; /* momentary sampling rate in fs/fps in Q16.16 format */ | ||
1051 | int freqshift; /* how much to shift the feedback value to get Q16.16 */ | ||
1052 | diff --git a/sound/usb/endpoint.c b/sound/usb/endpoint.c | ||
1053 | index b5207e71ed72..30aa5f2df6da 100644 | ||
1054 | --- a/sound/usb/endpoint.c | ||
1055 | +++ b/sound/usb/endpoint.c | ||
1056 | @@ -137,12 +137,12 @@ int snd_usb_endpoint_implicit_feedback_sink(struct snd_usb_endpoint *ep) | ||
1057 | |||
1058 | /* | ||
1059 | * For streaming based on information derived from sync endpoints, | ||
1060 | - * prepare_outbound_urb_sizes() will call slave_next_packet_size() to | ||
1061 | + * prepare_outbound_urb_sizes() will call next_packet_size() to | ||
1062 | * determine the number of samples to be sent in the next packet. | ||
1063 | * | ||
1064 | - * For implicit feedback, slave_next_packet_size() is unused. | ||
1065 | + * For implicit feedback, next_packet_size() is unused. | ||
1066 | */ | ||
1067 | -int snd_usb_endpoint_slave_next_packet_size(struct snd_usb_endpoint *ep) | ||
1068 | +int snd_usb_endpoint_next_packet_size(struct snd_usb_endpoint *ep) | ||
1069 | { | ||
1070 | unsigned long flags; | ||
1071 | int ret; | ||
1072 | @@ -159,29 +159,6 @@ int snd_usb_endpoint_slave_next_packet_size(struct snd_usb_endpoint *ep) | ||
1073 | return ret; | ||
1074 | } | ||
1075 | |||
1076 | -/* | ||
1077 | - * For adaptive and synchronous endpoints, prepare_outbound_urb_sizes() | ||
1078 | - * will call next_packet_size() to determine the number of samples to be | ||
1079 | - * sent in the next packet. | ||
1080 | - */ | ||
1081 | -int snd_usb_endpoint_next_packet_size(struct snd_usb_endpoint *ep) | ||
1082 | -{ | ||
1083 | - int ret; | ||
1084 | - | ||
1085 | - if (ep->fill_max) | ||
1086 | - return ep->maxframesize; | ||
1087 | - | ||
1088 | - ep->sample_accum += ep->sample_rem; | ||
1089 | - if (ep->sample_accum >= ep->fps) { | ||
1090 | - ep->sample_accum -= ep->fps; | ||
1091 | - ret = ep->framesize[1]; | ||
1092 | - } else { | ||
1093 | - ret = ep->framesize[0]; | ||
1094 | - } | ||
1095 | - | ||
1096 | - return ret; | ||
1097 | -} | ||
1098 | - | ||
1099 | static void retire_outbound_urb(struct snd_usb_endpoint *ep, | ||
1100 | struct snd_urb_ctx *urb_ctx) | ||
1101 | { | ||
1102 | @@ -226,8 +203,6 @@ static void prepare_silent_urb(struct snd_usb_endpoint *ep, | ||
1103 | |||
1104 | if (ctx->packet_size[i]) | ||
1105 | counts = ctx->packet_size[i]; | ||
1106 | - else if (ep->sync_master) | ||
1107 | - counts = snd_usb_endpoint_slave_next_packet_size(ep); | ||
1108 | else | ||
1109 | counts = snd_usb_endpoint_next_packet_size(ep); | ||
1110 | |||
1111 | @@ -900,17 +875,10 @@ int snd_usb_endpoint_set_params(struct snd_usb_endpoint *ep, | ||
1112 | ep->maxpacksize = fmt->maxpacksize; | ||
1113 | ep->fill_max = !!(fmt->attributes & UAC_EP_CS_ATTR_FILL_MAX); | ||
1114 | |||
1115 | - if (snd_usb_get_speed(ep->chip->dev) == USB_SPEED_FULL) { | ||
1116 | + if (snd_usb_get_speed(ep->chip->dev) == USB_SPEED_FULL) | ||
1117 | ep->freqn = get_usb_full_speed_rate(rate); | ||
1118 | - ep->fps = 1000; | ||
1119 | - } else { | ||
1120 | + else | ||
1121 | ep->freqn = get_usb_high_speed_rate(rate); | ||
1122 | - ep->fps = 8000; | ||
1123 | - } | ||
1124 | - | ||
1125 | - ep->sample_rem = rate % ep->fps; | ||
1126 | - ep->framesize[0] = rate / ep->fps; | ||
1127 | - ep->framesize[1] = (rate + (ep->fps - 1)) / ep->fps; | ||
1128 | |||
1129 | /* calculate the frequency in 16.16 format */ | ||
1130 | ep->freqm = ep->freqn; | ||
1131 | @@ -969,7 +937,6 @@ int snd_usb_endpoint_start(struct snd_usb_endpoint *ep) | ||
1132 | ep->active_mask = 0; | ||
1133 | ep->unlink_mask = 0; | ||
1134 | ep->phase = 0; | ||
1135 | - ep->sample_accum = 0; | ||
1136 | |||
1137 | snd_usb_endpoint_start_quirk(ep); | ||
1138 | |||
1139 | diff --git a/sound/usb/endpoint.h b/sound/usb/endpoint.h | ||
1140 | index 4aad49cbeb5f..584f295d7c77 100644 | ||
1141 | --- a/sound/usb/endpoint.h | ||
1142 | +++ b/sound/usb/endpoint.h | ||
1143 | @@ -27,7 +27,6 @@ void snd_usb_endpoint_release(struct snd_usb_endpoint *ep); | ||
1144 | void snd_usb_endpoint_free(struct snd_usb_endpoint *ep); | ||
1145 | |||
1146 | int snd_usb_endpoint_implicit_feedback_sink(struct snd_usb_endpoint *ep); | ||
1147 | -int snd_usb_endpoint_slave_next_packet_size(struct snd_usb_endpoint *ep); | ||
1148 | int snd_usb_endpoint_next_packet_size(struct snd_usb_endpoint *ep); | ||
1149 | |||
1150 | void snd_usb_handle_sync_urb(struct snd_usb_endpoint *ep, | ||
1151 | diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c | ||
1152 | index 615213aeda33..9bc995f9b4e1 100644 | ||
1153 | --- a/sound/usb/pcm.c | ||
1154 | +++ b/sound/usb/pcm.c | ||
1155 | @@ -1483,8 +1483,6 @@ static void prepare_playback_urb(struct snd_usb_substream *subs, | ||
1156 | for (i = 0; i < ctx->packets; i++) { | ||
1157 | if (ctx->packet_size[i]) | ||
1158 | counts = ctx->packet_size[i]; | ||
1159 | - else if (ep->sync_master) | ||
1160 | - counts = snd_usb_endpoint_slave_next_packet_size(ep); | ||
1161 | else | ||
1162 | counts = snd_usb_endpoint_next_packet_size(ep); | ||
1163 |