Gentoo Archives: gentoo-commits

From: Mike Pagano <mpagano@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/linux-patches:4.1 commit in: /
Date: Sun, 31 Jul 2016 16:02:05
Message-Id: 1469980903.1f9b6e4fcf4c1ec883981ad2404d0361ea65643d.mpagano@gentoo
1 commit: 1f9b6e4fcf4c1ec883981ad2404d0361ea65643d
2 Author: Mike Pagano <mpagano <AT> gentoo <DOT> org>
3 AuthorDate: Sun Jul 31 16:01:43 2016 +0000
4 Commit: Mike Pagano <mpagano <AT> gentoo <DOT> org>
5 CommitDate: Sun Jul 31 16:01:43 2016 +0000
6 URL: https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=1f9b6e4f
7
8 Linux kernel 4.1.29
9
10 0000_README | 4 +
11 1028_linux-4.1.29.patch | 456 ++++++++++++++++++++++++++++++++++++++++++++++++
12 2 files changed, 460 insertions(+)
13
14 diff --git a/0000_README b/0000_README
15 index 88ef9f3..a9101d3 100644
16 --- a/0000_README
17 +++ b/0000_README
18 @@ -155,6 +155,10 @@ Patch: 1027_linux-4.1.28.patch
19 From: http://www.kernel.org
20 Desc: Linux 4.1.28
21
22 +Patch: 1028_linux-4.1.29.patch
23 +From: http://www.kernel.org
24 +Desc: Linux 4.1.29
25 +
26 Patch: 1500_XATTR_USER_PREFIX.patch
27 From: https://bugs.gentoo.org/show_bug.cgi?id=470644
28 Desc: Support for namespace user.pax.* on tmpfs.
29
30 diff --git a/1028_linux-4.1.29.patch b/1028_linux-4.1.29.patch
31 new file mode 100644
32 index 0000000..998db23
33 --- /dev/null
34 +++ b/1028_linux-4.1.29.patch
35 @@ -0,0 +1,456 @@
36 +diff --git a/Makefile b/Makefile
37 +index 241237cd4ca6..76fa21fa16b8 100644
38 +--- a/Makefile
39 ++++ b/Makefile
40 +@@ -1,6 +1,6 @@
41 + VERSION = 4
42 + PATCHLEVEL = 1
43 +-SUBLEVEL = 28
44 ++SUBLEVEL = 29
45 + EXTRAVERSION =
46 + NAME = Series 4800
47 +
48 +diff --git a/arch/mips/include/asm/pgtable.h b/arch/mips/include/asm/pgtable.h
49 +index f33206e27d8d..2b697db33ca6 100644
50 +--- a/arch/mips/include/asm/pgtable.h
51 ++++ b/arch/mips/include/asm/pgtable.h
52 +@@ -603,7 +603,8 @@ static inline struct page *pmd_page(pmd_t pmd)
53 +
54 + static inline pmd_t pmd_modify(pmd_t pmd, pgprot_t newprot)
55 + {
56 +- pmd_val(pmd) = (pmd_val(pmd) & _PAGE_CHG_MASK) | pgprot_val(newprot);
57 ++ pmd_val(pmd) = (pmd_val(pmd) & (_PAGE_CHG_MASK | _PAGE_HUGE)) |
58 ++ (pgprot_val(newprot) & ~_PAGE_CHG_MASK);
59 + return pmd;
60 + }
61 +
62 +diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c
63 +index 28dbbb0d12c4..9b19d96e9562 100644
64 +--- a/arch/powerpc/kernel/prom.c
65 ++++ b/arch/powerpc/kernel/prom.c
66 +@@ -166,8 +166,7 @@ static struct ibm_pa_feature {
67 + * we don't want to turn on TM here, so we use the *_COMP versions
68 + * which are 0 if the kernel doesn't support TM.
69 + */
70 +- {CPU_FTR_TM_COMP, 0, 0,
71 +- PPC_FEATURE2_HTM_COMP|PPC_FEATURE2_HTM_NOSC_COMP, 22, 0, 0},
72 ++ {CPU_FTR_TM_COMP, 0, 0, PPC_FEATURE2_HTM_COMP, 22, 0, 0},
73 + };
74 +
75 + static void __init scan_features(unsigned long node, const unsigned char *ftrs,
76 +diff --git a/arch/x86/kernel/amd_nb.c b/arch/x86/kernel/amd_nb.c
77 +index 5caed1dd7ccf..80bb8c0349a7 100644
78 +--- a/arch/x86/kernel/amd_nb.c
79 ++++ b/arch/x86/kernel/amd_nb.c
80 +@@ -71,8 +71,8 @@ int amd_cache_northbridges(void)
81 + while ((misc = next_northbridge(misc, amd_nb_misc_ids)) != NULL)
82 + i++;
83 +
84 +- if (i == 0)
85 +- return 0;
86 ++ if (!i)
87 ++ return -ENODEV;
88 +
89 + nb = kzalloc(i * sizeof(struct amd_northbridge), GFP_KERNEL);
90 + if (!nb)
91 +diff --git a/block/ioprio.c b/block/ioprio.c
92 +index 31666c92b46a..563435684c3c 100644
93 +--- a/block/ioprio.c
94 ++++ b/block/ioprio.c
95 +@@ -149,8 +149,10 @@ static int get_task_ioprio(struct task_struct *p)
96 + if (ret)
97 + goto out;
98 + ret = IOPRIO_PRIO_VALUE(IOPRIO_CLASS_NONE, IOPRIO_NORM);
99 ++ task_lock(p);
100 + if (p->io_context)
101 + ret = p->io_context->ioprio;
102 ++ task_unlock(p);
103 + out:
104 + return ret;
105 + }
106 +diff --git a/drivers/gpio/gpio-sch.c b/drivers/gpio/gpio-sch.c
107 +index b72906f5b999..2d4766bd61c3 100644
108 +--- a/drivers/gpio/gpio-sch.c
109 ++++ b/drivers/gpio/gpio-sch.c
110 +@@ -63,9 +63,8 @@ static unsigned sch_gpio_bit(struct sch_gpio *sch, unsigned gpio)
111 + return gpio % 8;
112 + }
113 +
114 +-static int sch_gpio_reg_get(struct gpio_chip *gc, unsigned gpio, unsigned reg)
115 ++static int sch_gpio_reg_get(struct sch_gpio *sch, unsigned gpio, unsigned reg)
116 + {
117 +- struct sch_gpio *sch = to_sch_gpio(gc);
118 + unsigned short offset, bit;
119 + u8 reg_val;
120 +
121 +@@ -77,10 +76,9 @@ static int sch_gpio_reg_get(struct gpio_chip *gc, unsigned gpio, unsigned reg)
122 + return reg_val;
123 + }
124 +
125 +-static void sch_gpio_reg_set(struct gpio_chip *gc, unsigned gpio, unsigned reg,
126 ++static void sch_gpio_reg_set(struct sch_gpio *sch, unsigned gpio, unsigned reg,
127 + int val)
128 + {
129 +- struct sch_gpio *sch = to_sch_gpio(gc);
130 + unsigned short offset, bit;
131 + u8 reg_val;
132 +
133 +@@ -100,14 +98,15 @@ static int sch_gpio_direction_in(struct gpio_chip *gc, unsigned gpio_num)
134 + struct sch_gpio *sch = to_sch_gpio(gc);
135 +
136 + spin_lock(&sch->lock);
137 +- sch_gpio_reg_set(gc, gpio_num, GIO, 1);
138 ++ sch_gpio_reg_set(sch, gpio_num, GIO, 1);
139 + spin_unlock(&sch->lock);
140 + return 0;
141 + }
142 +
143 + static int sch_gpio_get(struct gpio_chip *gc, unsigned gpio_num)
144 + {
145 +- return sch_gpio_reg_get(gc, gpio_num, GLV);
146 ++ struct sch_gpio *sch = to_sch_gpio(gc);
147 ++ return sch_gpio_reg_get(sch, gpio_num, GLV);
148 + }
149 +
150 + static void sch_gpio_set(struct gpio_chip *gc, unsigned gpio_num, int val)
151 +@@ -115,7 +114,7 @@ static void sch_gpio_set(struct gpio_chip *gc, unsigned gpio_num, int val)
152 + struct sch_gpio *sch = to_sch_gpio(gc);
153 +
154 + spin_lock(&sch->lock);
155 +- sch_gpio_reg_set(gc, gpio_num, GLV, val);
156 ++ sch_gpio_reg_set(sch, gpio_num, GLV, val);
157 + spin_unlock(&sch->lock);
158 + }
159 +
160 +@@ -125,7 +124,7 @@ static int sch_gpio_direction_out(struct gpio_chip *gc, unsigned gpio_num,
161 + struct sch_gpio *sch = to_sch_gpio(gc);
162 +
163 + spin_lock(&sch->lock);
164 +- sch_gpio_reg_set(gc, gpio_num, GIO, 0);
165 ++ sch_gpio_reg_set(sch, gpio_num, GIO, 0);
166 + spin_unlock(&sch->lock);
167 +
168 + /*
169 +@@ -184,13 +183,13 @@ static int sch_gpio_probe(struct platform_device *pdev)
170 + * GPIO7 is configured by the CMC as SLPIOVR
171 + * Enable GPIO[9:8] core powered gpios explicitly
172 + */
173 +- sch_gpio_reg_set(&sch->chip, 8, GEN, 1);
174 +- sch_gpio_reg_set(&sch->chip, 9, GEN, 1);
175 ++ sch_gpio_reg_set(sch, 8, GEN, 1);
176 ++ sch_gpio_reg_set(sch, 9, GEN, 1);
177 + /*
178 + * SUS_GPIO[2:0] enabled by default
179 + * Enable SUS_GPIO3 resume powered gpio explicitly
180 + */
181 +- sch_gpio_reg_set(&sch->chip, 13, GEN, 1);
182 ++ sch_gpio_reg_set(sch, 13, GEN, 1);
183 + break;
184 +
185 + case PCI_DEVICE_ID_INTEL_ITC_LPC:
186 +diff --git a/drivers/s390/net/qeth_l2_main.c b/drivers/s390/net/qeth_l2_main.c
187 +index 0ea0869120cf..187bea44d123 100644
188 +--- a/drivers/s390/net/qeth_l2_main.c
189 ++++ b/drivers/s390/net/qeth_l2_main.c
190 +@@ -902,6 +902,7 @@ static void qeth_l2_remove_device(struct ccwgroup_device *cgdev)
191 + qeth_l2_set_offline(cgdev);
192 +
193 + if (card->dev) {
194 ++ netif_napi_del(&card->napi);
195 + unregister_netdev(card->dev);
196 + card->dev = NULL;
197 + }
198 +diff --git a/drivers/s390/net/qeth_l3_main.c b/drivers/s390/net/qeth_l3_main.c
199 +index 04e42c649134..3f94738feb45 100644
200 +--- a/drivers/s390/net/qeth_l3_main.c
201 ++++ b/drivers/s390/net/qeth_l3_main.c
202 +@@ -3362,6 +3362,7 @@ static void qeth_l3_remove_device(struct ccwgroup_device *cgdev)
203 + qeth_l3_set_offline(cgdev);
204 +
205 + if (card->dev) {
206 ++ netif_napi_del(&card->napi);
207 + unregister_netdev(card->dev);
208 + card->dev = NULL;
209 + }
210 +diff --git a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c
211 +index cccab6188328..cd52c070701b 100644
212 +--- a/drivers/scsi/ipr.c
213 ++++ b/drivers/scsi/ipr.c
214 +@@ -9966,6 +9966,7 @@ static int ipr_probe_ioa(struct pci_dev *pdev,
215 + ioa_cfg->intr_flag = IPR_USE_MSI;
216 + else {
217 + ioa_cfg->intr_flag = IPR_USE_LSI;
218 ++ ioa_cfg->clear_isr = 1;
219 + ioa_cfg->nvectors = 1;
220 + dev_info(&pdev->dev, "Cannot enable MSI.\n");
221 + }
222 +diff --git a/drivers/xen/xen-acpi-processor.c b/drivers/xen/xen-acpi-processor.c
223 +index 59fc190f1e92..b96e207bf250 100644
224 +--- a/drivers/xen/xen-acpi-processor.c
225 ++++ b/drivers/xen/xen-acpi-processor.c
226 +@@ -423,36 +423,7 @@ upload:
227 +
228 + return 0;
229 + }
230 +-static int __init check_prereq(void)
231 +-{
232 +- struct cpuinfo_x86 *c = &cpu_data(0);
233 +-
234 +- if (!xen_initial_domain())
235 +- return -ENODEV;
236 +-
237 +- if (!acpi_gbl_FADT.smi_command)
238 +- return -ENODEV;
239 +-
240 +- if (c->x86_vendor == X86_VENDOR_INTEL) {
241 +- if (!cpu_has(c, X86_FEATURE_EST))
242 +- return -ENODEV;
243 +
244 +- return 0;
245 +- }
246 +- if (c->x86_vendor == X86_VENDOR_AMD) {
247 +- /* Copied from powernow-k8.h, can't include ../cpufreq/powernow
248 +- * as we get compile warnings for the static functions.
249 +- */
250 +-#define CPUID_FREQ_VOLT_CAPABILITIES 0x80000007
251 +-#define USE_HW_PSTATE 0x00000080
252 +- u32 eax, ebx, ecx, edx;
253 +- cpuid(CPUID_FREQ_VOLT_CAPABILITIES, &eax, &ebx, &ecx, &edx);
254 +- if ((edx & USE_HW_PSTATE) != USE_HW_PSTATE)
255 +- return -ENODEV;
256 +- return 0;
257 +- }
258 +- return -ENODEV;
259 +-}
260 + /* acpi_perf_data is a pointer to percpu data. */
261 + static struct acpi_processor_performance __percpu *acpi_perf_data;
262 +
263 +@@ -509,10 +480,10 @@ struct notifier_block xen_acpi_processor_resume_nb = {
264 + static int __init xen_acpi_processor_init(void)
265 + {
266 + unsigned int i;
267 +- int rc = check_prereq();
268 ++ int rc;
269 +
270 +- if (rc)
271 +- return rc;
272 ++ if (!xen_initial_domain())
273 ++ return -ENODEV;
274 +
275 + nr_acpi_bits = get_max_acpi_id() + 1;
276 + acpi_ids_done = kcalloc(BITS_TO_LONGS(nr_acpi_bits), sizeof(unsigned long), GFP_KERNEL);
277 +diff --git a/drivers/xen/xenbus/xenbus_dev_frontend.c b/drivers/xen/xenbus/xenbus_dev_frontend.c
278 +index 9433e46518c8..531e76474983 100644
279 +--- a/drivers/xen/xenbus/xenbus_dev_frontend.c
280 ++++ b/drivers/xen/xenbus/xenbus_dev_frontend.c
281 +@@ -316,11 +316,18 @@ static int xenbus_write_transaction(unsigned msg_type,
282 + rc = -ENOMEM;
283 + goto out;
284 + }
285 ++ } else {
286 ++ list_for_each_entry(trans, &u->transactions, list)
287 ++ if (trans->handle.id == u->u.msg.tx_id)
288 ++ break;
289 ++ if (&trans->list == &u->transactions)
290 ++ return -ESRCH;
291 + }
292 +
293 + reply = xenbus_dev_request_and_reply(&u->u.msg);
294 + if (IS_ERR(reply)) {
295 +- kfree(trans);
296 ++ if (msg_type == XS_TRANSACTION_START)
297 ++ kfree(trans);
298 + rc = PTR_ERR(reply);
299 + goto out;
300 + }
301 +@@ -333,12 +340,7 @@ static int xenbus_write_transaction(unsigned msg_type,
302 + list_add(&trans->list, &u->transactions);
303 + }
304 + } else if (u->u.msg.type == XS_TRANSACTION_END) {
305 +- list_for_each_entry(trans, &u->transactions, list)
306 +- if (trans->handle.id == u->u.msg.tx_id)
307 +- break;
308 +- BUG_ON(&trans->list == &u->transactions);
309 + list_del(&trans->list);
310 +-
311 + kfree(trans);
312 + }
313 +
314 +diff --git a/drivers/xen/xenbus/xenbus_xs.c b/drivers/xen/xenbus/xenbus_xs.c
315 +index ba804f3d8278..ce65591b4168 100644
316 +--- a/drivers/xen/xenbus/xenbus_xs.c
317 ++++ b/drivers/xen/xenbus/xenbus_xs.c
318 +@@ -250,9 +250,6 @@ void *xenbus_dev_request_and_reply(struct xsd_sockmsg *msg)
319 +
320 + mutex_unlock(&xs_state.request_mutex);
321 +
322 +- if (IS_ERR(ret))
323 +- return ret;
324 +-
325 + if ((msg->type == XS_TRANSACTION_END) ||
326 + ((req_msg.type == XS_TRANSACTION_START) &&
327 + (msg->type == XS_ERROR)))
328 +diff --git a/fs/ecryptfs/file.c b/fs/ecryptfs/file.c
329 +index 72afcc629d7b..f56a4216d081 100644
330 +--- a/fs/ecryptfs/file.c
331 ++++ b/fs/ecryptfs/file.c
332 +@@ -170,6 +170,19 @@ out:
333 + return rc;
334 + }
335 +
336 ++static int ecryptfs_mmap(struct file *file, struct vm_area_struct *vma)
337 ++{
338 ++ struct file *lower_file = ecryptfs_file_to_lower(file);
339 ++ /*
340 ++ * Don't allow mmap on top of file systems that don't support it
341 ++ * natively. If FILESYSTEM_MAX_STACK_DEPTH > 2 or ecryptfs
342 ++ * allows recursive mounting, this will need to be extended.
343 ++ */
344 ++ if (!lower_file->f_op->mmap)
345 ++ return -ENODEV;
346 ++ return generic_file_mmap(file, vma);
347 ++}
348 ++
349 + /**
350 + * ecryptfs_open
351 + * @inode: inode speciying file to open
352 +@@ -365,7 +378,7 @@ const struct file_operations ecryptfs_main_fops = {
353 + #ifdef CONFIG_COMPAT
354 + .compat_ioctl = ecryptfs_compat_ioctl,
355 + #endif
356 +- .mmap = generic_file_mmap,
357 ++ .mmap = ecryptfs_mmap,
358 + .open = ecryptfs_open,
359 + .flush = ecryptfs_flush,
360 + .release = ecryptfs_release,
361 +diff --git a/fs/ecryptfs/kthread.c b/fs/ecryptfs/kthread.c
362 +index e818f5ac7a26..866bb18efefe 100644
363 +--- a/fs/ecryptfs/kthread.c
364 ++++ b/fs/ecryptfs/kthread.c
365 +@@ -25,7 +25,6 @@
366 + #include <linux/slab.h>
367 + #include <linux/wait.h>
368 + #include <linux/mount.h>
369 +-#include <linux/file.h>
370 + #include "ecryptfs_kernel.h"
371 +
372 + struct ecryptfs_open_req {
373 +@@ -148,7 +147,7 @@ int ecryptfs_privileged_open(struct file **lower_file,
374 + flags |= IS_RDONLY(d_inode(lower_dentry)) ? O_RDONLY : O_RDWR;
375 + (*lower_file) = dentry_open(&req.path, flags, cred);
376 + if (!IS_ERR(*lower_file))
377 +- goto have_file;
378 ++ goto out;
379 + if ((flags & O_ACCMODE) == O_RDONLY) {
380 + rc = PTR_ERR((*lower_file));
381 + goto out;
382 +@@ -166,16 +165,8 @@ int ecryptfs_privileged_open(struct file **lower_file,
383 + mutex_unlock(&ecryptfs_kthread_ctl.mux);
384 + wake_up(&ecryptfs_kthread_ctl.wait);
385 + wait_for_completion(&req.done);
386 +- if (IS_ERR(*lower_file)) {
387 ++ if (IS_ERR(*lower_file))
388 + rc = PTR_ERR(*lower_file);
389 +- goto out;
390 +- }
391 +-have_file:
392 +- if ((*lower_file)->f_op->mmap == NULL) {
393 +- fput(*lower_file);
394 +- *lower_file = NULL;
395 +- rc = -EMEDIUMTYPE;
396 +- }
397 + out:
398 + return rc;
399 + }
400 +diff --git a/mm/swap.c b/mm/swap.c
401 +index b523f0a4cbfb..ab3b9c2dd783 100644
402 +--- a/mm/swap.c
403 ++++ b/mm/swap.c
404 +@@ -631,7 +631,7 @@ static void __lru_cache_add(struct page *page)
405 + struct pagevec *pvec = &get_cpu_var(lru_add_pvec);
406 +
407 + page_cache_get(page);
408 +- if (!pagevec_space(pvec) || PageCompound(page))
409 ++ if (!pagevec_add(pvec, page) || PageCompound(page))
410 + __pagevec_lru_add(pvec);
411 + put_cpu_var(lru_add_pvec);
412 + }
413 +diff --git a/sound/core/timer.c b/sound/core/timer.c
414 +index 1782555fcaca..7e3020c1e9d3 100644
415 +--- a/sound/core/timer.c
416 ++++ b/sound/core/timer.c
417 +@@ -1961,6 +1961,7 @@ static ssize_t snd_timer_user_read(struct file *file, char __user *buffer,
418 +
419 + qhead = tu->qhead++;
420 + tu->qhead %= tu->queue_size;
421 ++ tu->qused--;
422 + spin_unlock_irq(&tu->qlock);
423 +
424 + if (tu->tread) {
425 +@@ -1974,7 +1975,6 @@ static ssize_t snd_timer_user_read(struct file *file, char __user *buffer,
426 + }
427 +
428 + spin_lock_irq(&tu->qlock);
429 +- tu->qused--;
430 + if (err < 0)
431 + goto _error;
432 + result += unit;
433 +diff --git a/sound/pci/au88x0/au88x0_core.c b/sound/pci/au88x0/au88x0_core.c
434 +index 4667c3232b7f..74177189063c 100644
435 +--- a/sound/pci/au88x0/au88x0_core.c
436 ++++ b/sound/pci/au88x0/au88x0_core.c
437 +@@ -1444,9 +1444,8 @@ static int vortex_wtdma_bufshift(vortex_t * vortex, int wtdma)
438 + int page, p, pp, delta, i;
439 +
440 + page =
441 +- (hwread(vortex->mmio, VORTEX_WTDMA_STAT + (wtdma << 2)) &
442 +- WT_SUBBUF_MASK)
443 +- >> WT_SUBBUF_SHIFT;
444 ++ (hwread(vortex->mmio, VORTEX_WTDMA_STAT + (wtdma << 2))
445 ++ >> WT_SUBBUF_SHIFT) & WT_SUBBUF_MASK;
446 + if (dma->nr_periods >= 4)
447 + delta = (page - dma->period_real) & 3;
448 + else {
449 +diff --git a/sound/pci/echoaudio/echoaudio.c b/sound/pci/echoaudio/echoaudio.c
450 +index 862db9a0b041..f3e5cfa4f25d 100644
451 +--- a/sound/pci/echoaudio/echoaudio.c
452 ++++ b/sound/pci/echoaudio/echoaudio.c
453 +@@ -2200,11 +2200,11 @@ static int snd_echo_resume(struct device *dev)
454 + u32 pipe_alloc_mask;
455 + int err;
456 +
457 +- commpage_bak = kmalloc(sizeof(struct echoaudio), GFP_KERNEL);
458 ++ commpage_bak = kmalloc(sizeof(*commpage), GFP_KERNEL);
459 + if (commpage_bak == NULL)
460 + return -ENOMEM;
461 + commpage = chip->comm_page;
462 +- memcpy(commpage_bak, commpage, sizeof(struct comm_page));
463 ++ memcpy(commpage_bak, commpage, sizeof(*commpage));
464 +
465 + err = init_hw(chip, chip->pci->device, chip->pci->subsystem_device);
466 + if (err < 0) {
467 +diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c
468 +index 16e0ebacbdb0..0fda7b4901dd 100644
469 +--- a/sound/pci/hda/hda_generic.c
470 ++++ b/sound/pci/hda/hda_generic.c
471 +@@ -3992,6 +3992,8 @@ static hda_nid_t set_path_power(struct hda_codec *codec, hda_nid_t nid,
472 +
473 + for (n = 0; n < spec->paths.used; n++) {
474 + path = snd_array_elem(&spec->paths, n);
475 ++ if (!path->depth)
476 ++ continue;
477 + if (path->path[0] == nid ||
478 + path->path[path->depth - 1] == nid) {
479 + bool pin_old = path->pin_enabled;
480 +diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
481 +index abf8d342f1f4..707bc5405d9f 100644
482 +--- a/sound/pci/hda/patch_realtek.c
483 ++++ b/sound/pci/hda/patch_realtek.c
484 +@@ -5505,6 +5505,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
485 + SND_PCI_QUIRK(0x17aa, 0x504a, "ThinkPad X260", ALC292_FIXUP_TPT440_DOCK),
486 + SND_PCI_QUIRK(0x17aa, 0x504b, "Thinkpad", ALC293_FIXUP_LENOVO_SPK_NOISE),
487 + SND_PCI_QUIRK(0x17aa, 0x5050, "Thinkpad T560p", ALC292_FIXUP_TPT460),
488 ++ SND_PCI_QUIRK(0x17aa, 0x5051, "Thinkpad L460", ALC292_FIXUP_TPT460),
489 + SND_PCI_QUIRK(0x17aa, 0x5053, "Thinkpad T460", ALC292_FIXUP_TPT460),
490 + SND_PCI_QUIRK(0x17aa, 0x5109, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
491 + SND_PCI_QUIRK(0x17aa, 0x3bf8, "Quanta FL1", ALC269_FIXUP_PCM_44K),