Gentoo Archives: gentoo-commits

From: Mike Pagano <mpagano@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/linux-patches:4.9 commit in: /
Date: Mon, 28 Mar 2022 11:01:05
Message-Id: 1648465249.f6d73d4df37a38d2fa90f4d70cda52c2d450438d.mpagano@gentoo
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;