1 |
commit: f6d73d4df37a38d2fa90f4d70cda52c2d450438d |
2 |
Author: Mike Pagano <mpagano <AT> gentoo <DOT> org> |
3 |
AuthorDate: Mon Mar 28 11:00:49 2022 +0000 |
4 |
Commit: Mike Pagano <mpagano <AT> gentoo <DOT> org> |
5 |
CommitDate: Mon Mar 28 11:00:49 2022 +0000 |
6 |
URL: https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=f6d73d4d |
7 |
|
8 |
Linux patch 4.9.309 |
9 |
|
10 |
Signed-off-by: Mike Pagano <mpagano <AT> gentoo.org> |
11 |
|
12 |
0000_README | 4 + |
13 |
1308_linux-4.9.309.patch | 487 +++++++++++++++++++++++++++++++++++++++++++++++ |
14 |
2 files changed, 491 insertions(+) |
15 |
|
16 |
diff --git a/0000_README b/0000_README |
17 |
index fd25525d..009859f9 100644 |
18 |
--- a/0000_README |
19 |
+++ b/0000_README |
20 |
@@ -1275,6 +1275,10 @@ Patch: 1307_linux-4.9.308.patch |
21 |
From: http://www.kernel.org |
22 |
Desc: Linux 4.9.308 |
23 |
|
24 |
+Patch: 1308_linux-4.9.309.patch |
25 |
+From: http://www.kernel.org |
26 |
+Desc: Linux 4.9.309 |
27 |
+ |
28 |
Patch: 1500_XATTR_USER_PREFIX.patch |
29 |
From: https://bugs.gentoo.org/show_bug.cgi?id=470644 |
30 |
Desc: Support for namespace user.pax.* on tmpfs. |
31 |
|
32 |
diff --git a/1308_linux-4.9.309.patch b/1308_linux-4.9.309.patch |
33 |
new file mode 100644 |
34 |
index 00000000..a88bbe75 |
35 |
--- /dev/null |
36 |
+++ b/1308_linux-4.9.309.patch |
37 |
@@ -0,0 +1,487 @@ |
38 |
+diff --git a/Makefile b/Makefile |
39 |
+index ecf06e17c3c88..c1d4ddadbcb51 100644 |
40 |
+--- a/Makefile |
41 |
++++ b/Makefile |
42 |
+@@ -1,6 +1,6 @@ |
43 |
+ VERSION = 4 |
44 |
+ PATCHLEVEL = 9 |
45 |
+-SUBLEVEL = 308 |
46 |
++SUBLEVEL = 309 |
47 |
+ EXTRAVERSION = |
48 |
+ NAME = Roaring Lionus |
49 |
+ |
50 |
+diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c |
51 |
+index c3fba8b527530..28e241e635675 100644 |
52 |
+--- a/arch/x86/kernel/acpi/boot.c |
53 |
++++ b/arch/x86/kernel/acpi/boot.c |
54 |
+@@ -1324,6 +1324,17 @@ static int __init disable_acpi_pci(const struct dmi_system_id *d) |
55 |
+ return 0; |
56 |
+ } |
57 |
+ |
58 |
++static int __init disable_acpi_xsdt(const struct dmi_system_id *d) |
59 |
++{ |
60 |
++ if (!acpi_force) { |
61 |
++ pr_notice("%s detected: force use of acpi=rsdt\n", d->ident); |
62 |
++ acpi_gbl_do_not_use_xsdt = TRUE; |
63 |
++ } else { |
64 |
++ pr_notice("Warning: DMI blacklist says broken, but acpi XSDT forced\n"); |
65 |
++ } |
66 |
++ return 0; |
67 |
++} |
68 |
++ |
69 |
+ static int __init dmi_disable_acpi(const struct dmi_system_id *d) |
70 |
+ { |
71 |
+ if (!acpi_force) { |
72 |
+@@ -1444,6 +1455,19 @@ static struct dmi_system_id __initdata acpi_dmi_table[] = { |
73 |
+ DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 360"), |
74 |
+ }, |
75 |
+ }, |
76 |
++ /* |
77 |
++ * Boxes that need ACPI XSDT use disabled due to corrupted tables |
78 |
++ */ |
79 |
++ { |
80 |
++ .callback = disable_acpi_xsdt, |
81 |
++ .ident = "Advantech DAC-BJ01", |
82 |
++ .matches = { |
83 |
++ DMI_MATCH(DMI_SYS_VENDOR, "NEC"), |
84 |
++ DMI_MATCH(DMI_PRODUCT_NAME, "Bearlake CRB Board"), |
85 |
++ DMI_MATCH(DMI_BIOS_VERSION, "V1.12"), |
86 |
++ DMI_MATCH(DMI_BIOS_DATE, "02/01/2011"), |
87 |
++ }, |
88 |
++ }, |
89 |
+ {} |
90 |
+ }; |
91 |
+ |
92 |
+diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c |
93 |
+index 69c6f02f16b5b..ee300bbe88310 100644 |
94 |
+--- a/drivers/acpi/battery.c |
95 |
++++ b/drivers/acpi/battery.c |
96 |
+@@ -88,6 +88,10 @@ enum acpi_battery_files { |
97 |
+ |
98 |
+ static const struct acpi_device_id battery_device_ids[] = { |
99 |
+ {"PNP0C0A", 0}, |
100 |
++ |
101 |
++ /* Microsoft Surface Go 3 */ |
102 |
++ {"MSHW0146", 0}, |
103 |
++ |
104 |
+ {"", 0}, |
105 |
+ }; |
106 |
+ |
107 |
+@@ -1153,6 +1157,14 @@ static const struct dmi_system_id bat_dmi_table[] __initconst = { |
108 |
+ DMI_MATCH(DMI_PRODUCT_NAME, "Aspire V5-573G"), |
109 |
+ }, |
110 |
+ }, |
111 |
++ { |
112 |
++ /* Microsoft Surface Go 3 */ |
113 |
++ .callback = battery_notification_delay_quirk, |
114 |
++ .matches = { |
115 |
++ DMI_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"), |
116 |
++ DMI_MATCH(DMI_PRODUCT_NAME, "Surface Go 3"), |
117 |
++ }, |
118 |
++ }, |
119 |
+ {}, |
120 |
+ }; |
121 |
+ |
122 |
+diff --git a/drivers/acpi/video_detect.c b/drivers/acpi/video_detect.c |
123 |
+index ec2f77a471501..2837b2f982135 100644 |
124 |
+--- a/drivers/acpi/video_detect.c |
125 |
++++ b/drivers/acpi/video_detect.c |
126 |
+@@ -135,6 +135,81 @@ static const struct dmi_system_id video_detect_dmi_table[] = { |
127 |
+ DMI_MATCH(DMI_PRODUCT_NAME, "UL30A"), |
128 |
+ }, |
129 |
+ }, |
130 |
++ /* |
131 |
++ * Clevo NL5xRU and NL5xNU/TUXEDO Aura 15 Gen1 and Gen2 have both a |
132 |
++ * working native and video interface. However the default detection |
133 |
++ * mechanism first registers the video interface before unregistering |
134 |
++ * it again and switching to the native interface during boot. This |
135 |
++ * results in a dangling SBIOS request for backlight change for some |
136 |
++ * reason, causing the backlight to switch to ~2% once per boot on the |
137 |
++ * first power cord connect or disconnect event. Setting the native |
138 |
++ * interface explicitly circumvents this buggy behaviour, by avoiding |
139 |
++ * the unregistering process. |
140 |
++ */ |
141 |
++ { |
142 |
++ .callback = video_detect_force_native, |
143 |
++ .ident = "Clevo NL5xRU", |
144 |
++ .matches = { |
145 |
++ DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), |
146 |
++ DMI_MATCH(DMI_BOARD_NAME, "NL5xRU"), |
147 |
++ }, |
148 |
++ }, |
149 |
++ { |
150 |
++ .callback = video_detect_force_native, |
151 |
++ .ident = "Clevo NL5xRU", |
152 |
++ .matches = { |
153 |
++ DMI_MATCH(DMI_SYS_VENDOR, "SchenkerTechnologiesGmbH"), |
154 |
++ DMI_MATCH(DMI_BOARD_NAME, "NL5xRU"), |
155 |
++ }, |
156 |
++ }, |
157 |
++ { |
158 |
++ .callback = video_detect_force_native, |
159 |
++ .ident = "Clevo NL5xRU", |
160 |
++ .matches = { |
161 |
++ DMI_MATCH(DMI_SYS_VENDOR, "Notebook"), |
162 |
++ DMI_MATCH(DMI_BOARD_NAME, "NL5xRU"), |
163 |
++ }, |
164 |
++ }, |
165 |
++ { |
166 |
++ .callback = video_detect_force_native, |
167 |
++ .ident = "Clevo NL5xRU", |
168 |
++ .matches = { |
169 |
++ DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), |
170 |
++ DMI_MATCH(DMI_BOARD_NAME, "AURA1501"), |
171 |
++ }, |
172 |
++ }, |
173 |
++ { |
174 |
++ .callback = video_detect_force_native, |
175 |
++ .ident = "Clevo NL5xRU", |
176 |
++ .matches = { |
177 |
++ DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), |
178 |
++ DMI_MATCH(DMI_BOARD_NAME, "EDUBOOK1502"), |
179 |
++ }, |
180 |
++ }, |
181 |
++ { |
182 |
++ .callback = video_detect_force_native, |
183 |
++ .ident = "Clevo NL5xNU", |
184 |
++ .matches = { |
185 |
++ DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), |
186 |
++ DMI_MATCH(DMI_BOARD_NAME, "NL5xNU"), |
187 |
++ }, |
188 |
++ }, |
189 |
++ { |
190 |
++ .callback = video_detect_force_native, |
191 |
++ .ident = "Clevo NL5xNU", |
192 |
++ .matches = { |
193 |
++ DMI_MATCH(DMI_SYS_VENDOR, "SchenkerTechnologiesGmbH"), |
194 |
++ DMI_MATCH(DMI_BOARD_NAME, "NL5xNU"), |
195 |
++ }, |
196 |
++ }, |
197 |
++ { |
198 |
++ .callback = video_detect_force_native, |
199 |
++ .ident = "Clevo NL5xNU", |
200 |
++ .matches = { |
201 |
++ DMI_MATCH(DMI_SYS_VENDOR, "Notebook"), |
202 |
++ DMI_MATCH(DMI_BOARD_NAME, "NL5xNU"), |
203 |
++ }, |
204 |
++ }, |
205 |
+ |
206 |
+ /* |
207 |
+ * These models have a working acpi_video backlight control, and using |
208 |
+diff --git a/drivers/crypto/qat/qat_common/qat_crypto.c b/drivers/crypto/qat/qat_common/qat_crypto.c |
209 |
+index 3852d31ce0a4b..37a9f969c59cd 100644 |
210 |
+--- a/drivers/crypto/qat/qat_common/qat_crypto.c |
211 |
++++ b/drivers/crypto/qat/qat_common/qat_crypto.c |
212 |
+@@ -170,6 +170,14 @@ int qat_crypto_dev_config(struct adf_accel_dev *accel_dev) |
213 |
+ goto err; |
214 |
+ if (adf_cfg_section_add(accel_dev, "Accelerator0")) |
215 |
+ goto err; |
216 |
++ |
217 |
++ /* Temporarily set the number of crypto instances to zero to avoid |
218 |
++ * registering the crypto algorithms. |
219 |
++ * This will be removed when the algorithms will support the |
220 |
++ * CRYPTO_TFM_REQ_MAY_BACKLOG flag |
221 |
++ */ |
222 |
++ instances = 0; |
223 |
++ |
224 |
+ for (i = 0; i < instances; i++) { |
225 |
+ val = i; |
226 |
+ snprintf(key, sizeof(key), ADF_CY "%d" ADF_RING_BANK_NUM, i); |
227 |
+diff --git a/drivers/nfc/st21nfca/se.c b/drivers/nfc/st21nfca/se.c |
228 |
+index eac608a457f03..475f8a67856d0 100644 |
229 |
+--- a/drivers/nfc/st21nfca/se.c |
230 |
++++ b/drivers/nfc/st21nfca/se.c |
231 |
+@@ -330,6 +330,11 @@ int st21nfca_connectivity_event_received(struct nfc_hci_dev *hdev, u8 host, |
232 |
+ return -ENOMEM; |
233 |
+ |
234 |
+ transaction->aid_len = skb->data[1]; |
235 |
++ |
236 |
++ /* Checking if the length of the AID is valid */ |
237 |
++ if (transaction->aid_len > sizeof(transaction->aid)) |
238 |
++ return -EINVAL; |
239 |
++ |
240 |
+ memcpy(transaction->aid, &skb->data[2], |
241 |
+ transaction->aid_len); |
242 |
+ |
243 |
+@@ -339,6 +344,11 @@ int st21nfca_connectivity_event_received(struct nfc_hci_dev *hdev, u8 host, |
244 |
+ return -EPROTO; |
245 |
+ |
246 |
+ transaction->params_len = skb->data[transaction->aid_len + 3]; |
247 |
++ |
248 |
++ /* Total size is allocated (skb->len - 2) minus fixed array members */ |
249 |
++ if (transaction->params_len > ((skb->len - 2) - sizeof(struct nfc_evt_transaction))) |
250 |
++ return -EINVAL; |
251 |
++ |
252 |
+ memcpy(transaction->params, skb->data + |
253 |
+ transaction->aid_len + 4, transaction->params_len); |
254 |
+ |
255 |
+diff --git a/drivers/staging/fbtft/fb_st7789v.c b/drivers/staging/fbtft/fb_st7789v.c |
256 |
+index 085e9872c46d4..93bfde68f5452 100644 |
257 |
+--- a/drivers/staging/fbtft/fb_st7789v.c |
258 |
++++ b/drivers/staging/fbtft/fb_st7789v.c |
259 |
+@@ -85,6 +85,8 @@ enum st7789v_command { |
260 |
+ */ |
261 |
+ static int init_display(struct fbtft_par *par) |
262 |
+ { |
263 |
++ par->fbtftops.reset(par); |
264 |
++ |
265 |
+ /* turn off sleep mode */ |
266 |
+ write_reg(par, MIPI_DCS_EXIT_SLEEP_MODE); |
267 |
+ mdelay(120); |
268 |
+diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c |
269 |
+index 55be18cae35ba..775901abe678f 100644 |
270 |
+--- a/net/ipv6/ip6_output.c |
271 |
++++ b/net/ipv6/ip6_output.c |
272 |
+@@ -1329,8 +1329,8 @@ static int __ip6_append_data(struct sock *sk, |
273 |
+ sizeof(struct frag_hdr) : 0) + |
274 |
+ rt->rt6i_nfheader_len; |
275 |
+ |
276 |
+- if (mtu < fragheaderlen || |
277 |
+- ((mtu - fragheaderlen) & ~7) + fragheaderlen < sizeof(struct frag_hdr)) |
278 |
++ if (mtu <= fragheaderlen || |
279 |
++ ((mtu - fragheaderlen) & ~7) + fragheaderlen <= sizeof(struct frag_hdr)) |
280 |
+ goto emsgsize; |
281 |
+ |
282 |
+ maxfraglen = ((mtu - fragheaderlen) & ~7) + fragheaderlen - |
283 |
+diff --git a/net/llc/af_llc.c b/net/llc/af_llc.c |
284 |
+index a8866455e8b2a..b6dbec793ebbd 100644 |
285 |
+--- a/net/llc/af_llc.c |
286 |
++++ b/net/llc/af_llc.c |
287 |
+@@ -274,6 +274,7 @@ static int llc_ui_autobind(struct socket *sock, struct sockaddr_llc *addr) |
288 |
+ { |
289 |
+ struct sock *sk = sock->sk; |
290 |
+ struct llc_sock *llc = llc_sk(sk); |
291 |
++ struct net_device *dev = NULL; |
292 |
+ struct llc_sap *sap; |
293 |
+ int rc = -EINVAL; |
294 |
+ |
295 |
+@@ -285,14 +286,14 @@ static int llc_ui_autobind(struct socket *sock, struct sockaddr_llc *addr) |
296 |
+ goto out; |
297 |
+ rc = -ENODEV; |
298 |
+ if (sk->sk_bound_dev_if) { |
299 |
+- llc->dev = dev_get_by_index(&init_net, sk->sk_bound_dev_if); |
300 |
+- if (llc->dev && addr->sllc_arphrd != llc->dev->type) { |
301 |
+- dev_put(llc->dev); |
302 |
+- llc->dev = NULL; |
303 |
++ dev = dev_get_by_index(&init_net, sk->sk_bound_dev_if); |
304 |
++ if (dev && addr->sllc_arphrd != dev->type) { |
305 |
++ dev_put(dev); |
306 |
++ dev = NULL; |
307 |
+ } |
308 |
+ } else |
309 |
+- llc->dev = dev_getfirstbyhwtype(&init_net, addr->sllc_arphrd); |
310 |
+- if (!llc->dev) |
311 |
++ dev = dev_getfirstbyhwtype(&init_net, addr->sllc_arphrd); |
312 |
++ if (!dev) |
313 |
+ goto out; |
314 |
+ rc = -EUSERS; |
315 |
+ llc->laddr.lsap = llc_ui_autoport(); |
316 |
+@@ -302,6 +303,11 @@ static int llc_ui_autobind(struct socket *sock, struct sockaddr_llc *addr) |
317 |
+ sap = llc_sap_open(llc->laddr.lsap, NULL); |
318 |
+ if (!sap) |
319 |
+ goto out; |
320 |
++ |
321 |
++ /* Note: We do not expect errors from this point. */ |
322 |
++ llc->dev = dev; |
323 |
++ dev = NULL; |
324 |
++ |
325 |
+ memcpy(llc->laddr.mac, llc->dev->dev_addr, IFHWADDRLEN); |
326 |
+ memcpy(&llc->addr, addr, sizeof(llc->addr)); |
327 |
+ /* assign new connection to its SAP */ |
328 |
+@@ -309,6 +315,7 @@ static int llc_ui_autobind(struct socket *sock, struct sockaddr_llc *addr) |
329 |
+ sock_reset_flag(sk, SOCK_ZAPPED); |
330 |
+ rc = 0; |
331 |
+ out: |
332 |
++ dev_put(dev); |
333 |
+ return rc; |
334 |
+ } |
335 |
+ |
336 |
+@@ -331,6 +338,7 @@ static int llc_ui_bind(struct socket *sock, struct sockaddr *uaddr, int addrlen) |
337 |
+ struct sockaddr_llc *addr = (struct sockaddr_llc *)uaddr; |
338 |
+ struct sock *sk = sock->sk; |
339 |
+ struct llc_sock *llc = llc_sk(sk); |
340 |
++ struct net_device *dev = NULL; |
341 |
+ struct llc_sap *sap; |
342 |
+ int rc = -EINVAL; |
343 |
+ |
344 |
+@@ -347,25 +355,26 @@ static int llc_ui_bind(struct socket *sock, struct sockaddr *uaddr, int addrlen) |
345 |
+ rc = -ENODEV; |
346 |
+ rcu_read_lock(); |
347 |
+ if (sk->sk_bound_dev_if) { |
348 |
+- llc->dev = dev_get_by_index_rcu(&init_net, sk->sk_bound_dev_if); |
349 |
+- if (llc->dev) { |
350 |
++ dev = dev_get_by_index_rcu(&init_net, sk->sk_bound_dev_if); |
351 |
++ if (dev) { |
352 |
+ if (is_zero_ether_addr(addr->sllc_mac)) |
353 |
+- memcpy(addr->sllc_mac, llc->dev->dev_addr, |
354 |
++ memcpy(addr->sllc_mac, dev->dev_addr, |
355 |
+ IFHWADDRLEN); |
356 |
+- if (addr->sllc_arphrd != llc->dev->type || |
357 |
++ if (addr->sllc_arphrd != dev->type || |
358 |
+ !ether_addr_equal(addr->sllc_mac, |
359 |
+- llc->dev->dev_addr)) { |
360 |
++ dev->dev_addr)) { |
361 |
+ rc = -EINVAL; |
362 |
+- llc->dev = NULL; |
363 |
++ dev = NULL; |
364 |
+ } |
365 |
+ } |
366 |
+- } else |
367 |
+- llc->dev = dev_getbyhwaddr_rcu(&init_net, addr->sllc_arphrd, |
368 |
++ } else { |
369 |
++ dev = dev_getbyhwaddr_rcu(&init_net, addr->sllc_arphrd, |
370 |
+ addr->sllc_mac); |
371 |
+- if (llc->dev) |
372 |
+- dev_hold(llc->dev); |
373 |
++ } |
374 |
++ if (dev) |
375 |
++ dev_hold(dev); |
376 |
+ rcu_read_unlock(); |
377 |
+- if (!llc->dev) |
378 |
++ if (!dev) |
379 |
+ goto out; |
380 |
+ if (!addr->sllc_sap) { |
381 |
+ rc = -EUSERS; |
382 |
+@@ -398,6 +407,11 @@ static int llc_ui_bind(struct socket *sock, struct sockaddr *uaddr, int addrlen) |
383 |
+ goto out_put; |
384 |
+ } |
385 |
+ } |
386 |
++ |
387 |
++ /* Note: We do not expect errors from this point. */ |
388 |
++ llc->dev = dev; |
389 |
++ dev = NULL; |
390 |
++ |
391 |
+ llc->laddr.lsap = addr->sllc_sap; |
392 |
+ memcpy(llc->laddr.mac, addr->sllc_mac, IFHWADDRLEN); |
393 |
+ memcpy(&llc->addr, addr, sizeof(llc->addr)); |
394 |
+@@ -408,6 +422,7 @@ static int llc_ui_bind(struct socket *sock, struct sockaddr *uaddr, int addrlen) |
395 |
+ out_put: |
396 |
+ llc_sap_put(sap); |
397 |
+ out: |
398 |
++ dev_put(dev); |
399 |
+ release_sock(sk); |
400 |
+ return rc; |
401 |
+ } |
402 |
+diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c |
403 |
+index f37fbc71fc1db..091ac3a7b186f 100644 |
404 |
+--- a/net/mac80211/cfg.c |
405 |
++++ b/net/mac80211/cfg.c |
406 |
+@@ -1776,13 +1776,11 @@ static int copy_mesh_setup(struct ieee80211_if_mesh *ifmsh, |
407 |
+ const struct mesh_setup *setup) |
408 |
+ { |
409 |
+ u8 *new_ie; |
410 |
+- const u8 *old_ie; |
411 |
+ struct ieee80211_sub_if_data *sdata = container_of(ifmsh, |
412 |
+ struct ieee80211_sub_if_data, u.mesh); |
413 |
+ |
414 |
+ /* allocate information elements */ |
415 |
+ new_ie = NULL; |
416 |
+- old_ie = ifmsh->ie; |
417 |
+ |
418 |
+ if (setup->ie_len) { |
419 |
+ new_ie = kmemdup(setup->ie, setup->ie_len, |
420 |
+@@ -1792,7 +1790,6 @@ static int copy_mesh_setup(struct ieee80211_if_mesh *ifmsh, |
421 |
+ } |
422 |
+ ifmsh->ie_len = setup->ie_len; |
423 |
+ ifmsh->ie = new_ie; |
424 |
+- kfree(old_ie); |
425 |
+ |
426 |
+ /* now copy the rest of the setup parameters */ |
427 |
+ ifmsh->mesh_id_len = setup->mesh_id_len; |
428 |
+diff --git a/net/netfilter/nf_tables_core.c b/net/netfilter/nf_tables_core.c |
429 |
+index 9d593ecd8e870..fb14082151ce8 100644 |
430 |
+--- a/net/netfilter/nf_tables_core.c |
431 |
++++ b/net/netfilter/nf_tables_core.c |
432 |
+@@ -127,7 +127,7 @@ nft_do_chain(struct nft_pktinfo *pkt, void *priv) |
433 |
+ const struct net *net = pkt->net; |
434 |
+ const struct nft_rule *rule; |
435 |
+ const struct nft_expr *expr, *last; |
436 |
+- struct nft_regs regs; |
437 |
++ struct nft_regs regs = {}; |
438 |
+ unsigned int stackptr = 0; |
439 |
+ struct nft_jumpstack jumpstack[NFT_JUMP_STACK_SIZE]; |
440 |
+ struct nft_stats *stats; |
441 |
+diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c |
442 |
+index 5c07c5be31423..a70026f42a316 100644 |
443 |
+--- a/sound/core/pcm_native.c |
444 |
++++ b/sound/core/pcm_native.c |
445 |
+@@ -1489,21 +1489,25 @@ static int snd_pcm_do_reset(struct snd_pcm_substream *substream, int state) |
446 |
+ int err = substream->ops->ioctl(substream, SNDRV_PCM_IOCTL1_RESET, NULL); |
447 |
+ if (err < 0) |
448 |
+ return err; |
449 |
++ snd_pcm_stream_lock_irq(substream); |
450 |
+ runtime->hw_ptr_base = 0; |
451 |
+ runtime->hw_ptr_interrupt = runtime->status->hw_ptr - |
452 |
+ runtime->status->hw_ptr % runtime->period_size; |
453 |
+ runtime->silence_start = runtime->status->hw_ptr; |
454 |
+ runtime->silence_filled = 0; |
455 |
++ snd_pcm_stream_unlock_irq(substream); |
456 |
+ return 0; |
457 |
+ } |
458 |
+ |
459 |
+ static void snd_pcm_post_reset(struct snd_pcm_substream *substream, int state) |
460 |
+ { |
461 |
+ struct snd_pcm_runtime *runtime = substream->runtime; |
462 |
++ snd_pcm_stream_lock_irq(substream); |
463 |
+ runtime->control->appl_ptr = runtime->status->hw_ptr; |
464 |
+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK && |
465 |
+ runtime->silence_size > 0) |
466 |
+ snd_pcm_playback_silence(substream, ULONG_MAX); |
467 |
++ snd_pcm_stream_unlock_irq(substream); |
468 |
+ } |
469 |
+ |
470 |
+ static const struct action_ops snd_pcm_action_reset = { |
471 |
+diff --git a/sound/pci/ac97/ac97_codec.c b/sound/pci/ac97/ac97_codec.c |
472 |
+index c4840fda44b40..a7f1e4ef3f887 100644 |
473 |
+--- a/sound/pci/ac97/ac97_codec.c |
474 |
++++ b/sound/pci/ac97/ac97_codec.c |
475 |
+@@ -958,8 +958,8 @@ static int snd_ac97_ad18xx_pcm_get_volume(struct snd_kcontrol *kcontrol, struct |
476 |
+ int codec = kcontrol->private_value & 3; |
477 |
+ |
478 |
+ mutex_lock(&ac97->page_mutex); |
479 |
+- ucontrol->value.integer.value[0] = 31 - ((ac97->spec.ad18xx.pcmreg[codec] >> 0) & 31); |
480 |
+- ucontrol->value.integer.value[1] = 31 - ((ac97->spec.ad18xx.pcmreg[codec] >> 8) & 31); |
481 |
++ ucontrol->value.integer.value[0] = 31 - ((ac97->spec.ad18xx.pcmreg[codec] >> 8) & 31); |
482 |
++ ucontrol->value.integer.value[1] = 31 - ((ac97->spec.ad18xx.pcmreg[codec] >> 0) & 31); |
483 |
+ mutex_unlock(&ac97->page_mutex); |
484 |
+ return 0; |
485 |
+ } |
486 |
+diff --git a/sound/pci/cmipci.c b/sound/pci/cmipci.c |
487 |
+index 73f593526b2d7..0024145a7b5be 100644 |
488 |
+--- a/sound/pci/cmipci.c |
489 |
++++ b/sound/pci/cmipci.c |
490 |
+@@ -315,7 +315,6 @@ MODULE_PARM_DESC(joystick_port, "Joystick port address."); |
491 |
+ #define CM_MICGAINZ 0x01 /* mic boost */ |
492 |
+ #define CM_MICGAINZ_SHIFT 0 |
493 |
+ |
494 |
+-#define CM_REG_MIXER3 0x24 |
495 |
+ #define CM_REG_AUX_VOL 0x26 |
496 |
+ #define CM_VAUXL_MASK 0xf0 |
497 |
+ #define CM_VAUXR_MASK 0x0f |
498 |
+@@ -3323,7 +3322,7 @@ static void snd_cmipci_remove(struct pci_dev *pci) |
499 |
+ */ |
500 |
+ static unsigned char saved_regs[] = { |
501 |
+ CM_REG_FUNCTRL1, CM_REG_CHFORMAT, CM_REG_LEGACY_CTRL, CM_REG_MISC_CTRL, |
502 |
+- CM_REG_MIXER0, CM_REG_MIXER1, CM_REG_MIXER2, CM_REG_MIXER3, CM_REG_PLL, |
503 |
++ CM_REG_MIXER0, CM_REG_MIXER1, CM_REG_MIXER2, CM_REG_AUX_VOL, CM_REG_PLL, |
504 |
+ CM_REG_CH0_FRAME1, CM_REG_CH0_FRAME2, |
505 |
+ CM_REG_CH1_FRAME1, CM_REG_CH1_FRAME2, CM_REG_EXT_MISC, |
506 |
+ CM_REG_INT_STATUS, CM_REG_INT_HLDCLR, CM_REG_FUNCTRL0, |
507 |
+diff --git a/sound/usb/mixer_quirks.c b/sound/usb/mixer_quirks.c |
508 |
+index 1f2c69e599d9c..c94068874ea84 100644 |
509 |
+--- a/sound/usb/mixer_quirks.c |
510 |
++++ b/sound/usb/mixer_quirks.c |
511 |
+@@ -1879,9 +1879,10 @@ void snd_usb_mixer_fu_apply_quirk(struct usb_mixer_interface *mixer, |
512 |
+ if (unitid == 7 && cval->control == UAC_FU_VOLUME) |
513 |
+ snd_dragonfly_quirk_db_scale(mixer, cval, kctl); |
514 |
+ break; |
515 |
+- /* lowest playback value is muted on C-Media devices */ |
516 |
+- case USB_ID(0x0d8c, 0x000c): |
517 |
+- case USB_ID(0x0d8c, 0x0014): |
518 |
++ /* lowest playback value is muted on some devices */ |
519 |
++ case USB_ID(0x0d8c, 0x000c): /* C-Media */ |
520 |
++ case USB_ID(0x0d8c, 0x0014): /* C-Media */ |
521 |
++ case USB_ID(0x19f7, 0x0003): /* RODE NT-USB */ |
522 |
+ if (strstr(kctl->id.name, "Playback")) |
523 |
+ cval->min_mute = 1; |
524 |
+ break; |