Gentoo Archives: gentoo-commits

From: Alice Ferrazzi <alicef@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/linux-patches:4.4 commit in: /
Date: Sat, 30 Jan 2021 13:11:25
Message-Id: 1612012025.9ec7fb52fe84cea9b16afa0e4ace05f848f335c9.alicef@gentoo
1 commit: 9ec7fb52fe84cea9b16afa0e4ace05f848f335c9
2 Author: Alice Ferrazzi <alicef <AT> gentoo <DOT> org>
3 AuthorDate: Sat Jan 30 13:04:54 2021 +0000
4 Commit: Alice Ferrazzi <alicef <AT> gentoo <DOT> org>
5 CommitDate: Sat Jan 30 13:07:05 2021 +0000
6 URL: https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=9ec7fb52
7
8 Linux patch 4.4.254
9
10 Signed-off-by: Alice Ferrazzi <alicef <AT> gentoo.org>
11
12 0000_README | 4 +
13 1253_linux-4.4.254.patch | 444 +++++++++++++++++++++++++++++++++++++++++++++++
14 2 files changed, 448 insertions(+)
15
16 diff --git a/0000_README b/0000_README
17 index 5c74575..1150ccd 100644
18 --- a/0000_README
19 +++ b/0000_README
20 @@ -1055,6 +1055,10 @@ Patch: 1252_linux-4.4.253.patch
21 From: http://www.kernel.org
22 Desc: Linux 4.4.253
23
24 +Patch: 1253_linux-4.4.254.patch
25 +From: http://www.kernel.org
26 +Desc: Linux 4.4.254
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/1253_linux-4.4.254.patch b/1253_linux-4.4.254.patch
33 new file mode 100644
34 index 0000000..add57e6
35 --- /dev/null
36 +++ b/1253_linux-4.4.254.patch
37 @@ -0,0 +1,444 @@
38 +diff --git a/Makefile b/Makefile
39 +index 8175b77e51052..5abb21c7d852e 100644
40 +--- a/Makefile
41 ++++ b/Makefile
42 +@@ -1,6 +1,6 @@
43 + VERSION = 4
44 + PATCHLEVEL = 4
45 +-SUBLEVEL = 253
46 ++SUBLEVEL = 254
47 + EXTRAVERSION =
48 + NAME = Blurry Fish Butt
49 +
50 +diff --git a/arch/sh/drivers/dma/Kconfig b/arch/sh/drivers/dma/Kconfig
51 +index 78bc97b1d0270..ac834e9e0e0a4 100644
52 +--- a/arch/sh/drivers/dma/Kconfig
53 ++++ b/arch/sh/drivers/dma/Kconfig
54 +@@ -62,8 +62,7 @@ config PVR2_DMA
55 +
56 + config G2_DMA
57 + tristate "G2 Bus DMA support"
58 +- depends on SH_DREAMCAST
59 +- select SH_DMA_API
60 ++ depends on SH_DREAMCAST && SH_DMA_API
61 + help
62 + This enables support for the DMA controller for the Dreamcast's
63 + G2 bus. Drivers that want this will generally enable this on
64 +diff --git a/arch/x86/boot/compressed/Makefile b/arch/x86/boot/compressed/Makefile
65 +index bf0c7b6b00c38..01eafd8aeec6c 100644
66 +--- a/arch/x86/boot/compressed/Makefile
67 ++++ b/arch/x86/boot/compressed/Makefile
68 +@@ -31,6 +31,8 @@ KBUILD_CFLAGS += -mno-mmx -mno-sse
69 + KBUILD_CFLAGS += $(call cc-option,-ffreestanding)
70 + KBUILD_CFLAGS += $(call cc-option,-fno-stack-protector)
71 + KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member)
72 ++# Disable relocation relaxation in case the link is not PIE.
73 ++KBUILD_CFLAGS += $(call as-option,-Wa$(comma)-mrelax-relocations=no)
74 +
75 + KBUILD_AFLAGS := $(KBUILD_CFLAGS) -D__ASSEMBLY__
76 + GCOV_PROFILE := n
77 +diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
78 +index 2ab4568aadddc..90ed17aacaa7b 100644
79 +--- a/drivers/acpi/scan.c
80 ++++ b/drivers/acpi/scan.c
81 +@@ -564,6 +564,8 @@ static int acpi_get_device_data(acpi_handle handle, struct acpi_device **device,
82 + if (!device)
83 + return -EINVAL;
84 +
85 ++ *device = NULL;
86 ++
87 + status = acpi_get_data_full(handle, acpi_scan_drop_device,
88 + (void **)device, callback);
89 + if (ACPI_FAILURE(status) || !*device) {
90 +diff --git a/drivers/block/xen-blkback/xenbus.c b/drivers/block/xen-blkback/xenbus.c
91 +index 823f3480ebd19..f974ed7c33b5d 100644
92 +--- a/drivers/block/xen-blkback/xenbus.c
93 ++++ b/drivers/block/xen-blkback/xenbus.c
94 +@@ -219,6 +219,7 @@ static int xen_blkif_disconnect(struct xen_blkif *blkif)
95 +
96 + if (blkif->xenblkd) {
97 + kthread_stop(blkif->xenblkd);
98 ++ blkif->xenblkd = NULL;
99 + wake_up(&blkif->shutdown_wq);
100 + }
101 +
102 +diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadow.c b/drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadow.c
103 +index 7deb81b6dbac6..4b571cc6bc70f 100644
104 +--- a/drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadow.c
105 ++++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadow.c
106 +@@ -75,7 +75,7 @@ shadow_image(struct nvkm_bios *bios, int idx, u32 offset, struct shadow *mthd)
107 + nvkm_debug(subdev, "%08x: type %02x, %d bytes\n",
108 + image.base, image.type, image.size);
109 +
110 +- if (!shadow_fetch(bios, mthd, image.size)) {
111 ++ if (!shadow_fetch(bios, mthd, image.base + image.size)) {
112 + nvkm_debug(subdev, "%08x: fetch failed\n", image.base);
113 + return 0;
114 + }
115 +diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/auxgm204.c b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/auxgm204.c
116 +index 7cac8fe372b6b..a3cede8df4fd9 100644
117 +--- a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/auxgm204.c
118 ++++ b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/auxgm204.c
119 +@@ -33,7 +33,7 @@ static void
120 + gm204_i2c_aux_fini(struct gm204_i2c_aux *aux)
121 + {
122 + struct nvkm_device *device = aux->base.pad->i2c->subdev.device;
123 +- nvkm_mask(device, 0x00d954 + (aux->ch * 0x50), 0x00310000, 0x00000000);
124 ++ nvkm_mask(device, 0x00d954 + (aux->ch * 0x50), 0x00710000, 0x00000000);
125 + }
126 +
127 + static int
128 +@@ -54,10 +54,10 @@ gm204_i2c_aux_init(struct gm204_i2c_aux *aux)
129 + AUX_ERR(&aux->base, "begin idle timeout %08x", ctrl);
130 + return -EBUSY;
131 + }
132 +- } while (ctrl & 0x03010000);
133 ++ } while (ctrl & 0x07010000);
134 +
135 + /* set some magic, and wait up to 1ms for it to appear */
136 +- nvkm_mask(device, 0x00d954 + (aux->ch * 0x50), 0x00300000, ureq);
137 ++ nvkm_mask(device, 0x00d954 + (aux->ch * 0x50), 0x00700000, ureq);
138 + timeout = 1000;
139 + do {
140 + ctrl = nvkm_rd32(device, 0x00d954 + (aux->ch * 0x50));
141 +@@ -67,7 +67,7 @@ gm204_i2c_aux_init(struct gm204_i2c_aux *aux)
142 + gm204_i2c_aux_fini(aux);
143 + return -EBUSY;
144 + }
145 +- } while ((ctrl & 0x03000000) != urep);
146 ++ } while ((ctrl & 0x07000000) != urep);
147 +
148 + return 0;
149 + }
150 +diff --git a/drivers/iio/dac/ad5504.c b/drivers/iio/dac/ad5504.c
151 +index 4e4c20d6d8b57..0367641aed072 100644
152 +--- a/drivers/iio/dac/ad5504.c
153 ++++ b/drivers/iio/dac/ad5504.c
154 +@@ -189,9 +189,9 @@ static ssize_t ad5504_write_dac_powerdown(struct iio_dev *indio_dev,
155 + return ret;
156 +
157 + if (pwr_down)
158 +- st->pwr_down_mask |= (1 << chan->channel);
159 +- else
160 + st->pwr_down_mask &= ~(1 << chan->channel);
161 ++ else
162 ++ st->pwr_down_mask |= (1 << chan->channel);
163 +
164 + ret = ad5504_spi_write(st, AD5504_ADDR_CTRL,
165 + AD5504_DAC_PWRDWN_MODE(st->pwr_down_mode) |
166 +diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c
167 +index 8eed39dc2036a..a5a6c7f073af7 100644
168 +--- a/drivers/md/dm-table.c
169 ++++ b/drivers/md/dm-table.c
170 +@@ -393,14 +393,23 @@ int dm_get_device(struct dm_target *ti, const char *path, fmode_t mode,
171 + {
172 + int r;
173 + dev_t dev;
174 ++ unsigned int major, minor;
175 ++ char dummy;
176 + struct dm_dev_internal *dd;
177 + struct dm_table *t = ti->table;
178 +
179 + BUG_ON(!t);
180 +
181 +- dev = dm_get_dev_t(path);
182 +- if (!dev)
183 +- return -ENODEV;
184 ++ if (sscanf(path, "%u:%u%c", &major, &minor, &dummy) == 2) {
185 ++ /* Extract the major/minor numbers */
186 ++ dev = MKDEV(major, minor);
187 ++ if (MAJOR(dev) != major || MINOR(dev) != minor)
188 ++ return -EOVERFLOW;
189 ++ } else {
190 ++ dev = dm_get_dev_t(path);
191 ++ if (!dev)
192 ++ return -ENODEV;
193 ++ }
194 +
195 + dd = find_device(&t->devices, dev);
196 + if (!dd) {
197 +diff --git a/drivers/net/can/dev.c b/drivers/net/can/dev.c
198 +index 52110017fd401..45f15ac6b1015 100644
199 +--- a/drivers/net/can/dev.c
200 ++++ b/drivers/net/can/dev.c
201 +@@ -525,11 +525,11 @@ static void can_restart(struct net_device *dev)
202 + }
203 + cf->can_id |= CAN_ERR_RESTARTED;
204 +
205 +- netif_rx_ni(skb);
206 +-
207 + stats->rx_packets++;
208 + stats->rx_bytes += cf->can_dlc;
209 +
210 ++ netif_rx_ni(skb);
211 ++
212 + restart:
213 + netdev_dbg(dev, "restarted\n");
214 + priv->can_stats.restarts++;
215 +diff --git a/drivers/net/ethernet/renesas/sh_eth.c b/drivers/net/ethernet/renesas/sh_eth.c
216 +index 8413f93f5cd94..614b83c7ce817 100644
217 +--- a/drivers/net/ethernet/renesas/sh_eth.c
218 ++++ b/drivers/net/ethernet/renesas/sh_eth.c
219 +@@ -2507,10 +2507,10 @@ static int sh_eth_close(struct net_device *ndev)
220 + /* Free all the skbuffs in the Rx queue and the DMA buffer. */
221 + sh_eth_ring_free(ndev);
222 +
223 +- pm_runtime_put_sync(&mdp->pdev->dev);
224 +-
225 + mdp->is_opened = 0;
226 +
227 ++ pm_runtime_put(&mdp->pdev->dev);
228 ++
229 + return 0;
230 + }
231 +
232 +diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
233 +index e37f6db0dd156..5e1d922e9a6ff 100644
234 +--- a/drivers/scsi/ufs/ufshcd.c
235 ++++ b/drivers/scsi/ufs/ufshcd.c
236 +@@ -3818,19 +3818,16 @@ static int ufshcd_eh_device_reset_handler(struct scsi_cmnd *cmd)
237 + {
238 + struct Scsi_Host *host;
239 + struct ufs_hba *hba;
240 +- unsigned int tag;
241 + u32 pos;
242 + int err;
243 +- u8 resp = 0xF;
244 +- struct ufshcd_lrb *lrbp;
245 ++ u8 resp = 0xF, lun;
246 + unsigned long flags;
247 +
248 + host = cmd->device->host;
249 + hba = shost_priv(host);
250 +- tag = cmd->request->tag;
251 +
252 +- lrbp = &hba->lrb[tag];
253 +- err = ufshcd_issue_tm_cmd(hba, lrbp->lun, 0, UFS_LOGICAL_RESET, &resp);
254 ++ lun = ufshcd_scsi_to_upiu_lun(cmd->device->lun);
255 ++ err = ufshcd_issue_tm_cmd(hba, lun, 0, UFS_LOGICAL_RESET, &resp);
256 + if (err || resp != UPIU_TASK_MANAGEMENT_FUNC_COMPL) {
257 + if (!err)
258 + err = resp;
259 +@@ -3839,7 +3836,7 @@ static int ufshcd_eh_device_reset_handler(struct scsi_cmnd *cmd)
260 +
261 + /* clear the commands that were pending for corresponding LUN */
262 + for_each_set_bit(pos, &hba->outstanding_reqs, hba->nutrs) {
263 +- if (hba->lrb[pos].lun == lrbp->lun) {
264 ++ if (hba->lrb[pos].lun == lun) {
265 + err = ufshcd_clear_cmd(hba, pos);
266 + if (err)
267 + break;
268 +diff --git a/drivers/usb/gadget/udc/bdc/Kconfig b/drivers/usb/gadget/udc/bdc/Kconfig
269 +index 0d7b8c9f72fda..778df4badf888 100644
270 +--- a/drivers/usb/gadget/udc/bdc/Kconfig
271 ++++ b/drivers/usb/gadget/udc/bdc/Kconfig
272 +@@ -14,7 +14,7 @@ if USB_BDC_UDC
273 + comment "Platform Support"
274 + config USB_BDC_PCI
275 + tristate "BDC support for PCIe based platforms"
276 +- depends on PCI
277 ++ depends on PCI && BROKEN
278 + default USB_BDC_UDC
279 + help
280 + Enable support for platforms which have BDC connected through PCIe, such as Lego3 FPGA platform.
281 +diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
282 +index 330e05acf5f75..b9ad19d1b400c 100644
283 +--- a/drivers/usb/host/ehci-hcd.c
284 ++++ b/drivers/usb/host/ehci-hcd.c
285 +@@ -575,6 +575,7 @@ static int ehci_run (struct usb_hcd *hcd)
286 + struct ehci_hcd *ehci = hcd_to_ehci (hcd);
287 + u32 temp;
288 + u32 hcc_params;
289 ++ int rc;
290 +
291 + hcd->uses_new_polling = 1;
292 +
293 +@@ -630,9 +631,20 @@ static int ehci_run (struct usb_hcd *hcd)
294 + down_write(&ehci_cf_port_reset_rwsem);
295 + ehci->rh_state = EHCI_RH_RUNNING;
296 + ehci_writel(ehci, FLAG_CF, &ehci->regs->configured_flag);
297 ++
298 ++ /* Wait until HC become operational */
299 + ehci_readl(ehci, &ehci->regs->command); /* unblock posted writes */
300 + msleep(5);
301 ++ rc = ehci_handshake(ehci, &ehci->regs->status, STS_HALT, 0, 100 * 1000);
302 ++
303 + up_write(&ehci_cf_port_reset_rwsem);
304 ++
305 ++ if (rc) {
306 ++ ehci_err(ehci, "USB %x.%x, controller refused to start: %d\n",
307 ++ ((ehci->sbrn & 0xf0)>>4), (ehci->sbrn & 0x0f), rc);
308 ++ return rc;
309 ++ }
310 ++
311 + ehci->last_periodic_enable = ktime_get_real();
312 +
313 + temp = HC_VERSION(ehci, ehci_readl(ehci, &ehci->caps->hc_capbase));
314 +diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
315 +index 536251c6149d0..a39b7a49b7cf1 100644
316 +--- a/drivers/usb/host/xhci-ring.c
317 ++++ b/drivers/usb/host/xhci-ring.c
318 +@@ -2840,6 +2840,8 @@ static void queue_trb(struct xhci_hcd *xhci, struct xhci_ring *ring,
319 + trb->field[0] = cpu_to_le32(field1);
320 + trb->field[1] = cpu_to_le32(field2);
321 + trb->field[2] = cpu_to_le32(field3);
322 ++ /* make sure TRB is fully written before giving it to the controller */
323 ++ wmb();
324 + trb->field[3] = cpu_to_le32(field4);
325 + inc_enq(xhci, ring, more_trbs_coming);
326 + }
327 +diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h
328 +index af8b4a8799349..9485abe76b687 100644
329 +--- a/include/linux/compiler-gcc.h
330 ++++ b/include/linux/compiler-gcc.h
331 +@@ -145,6 +145,12 @@
332 +
333 + #if GCC_VERSION < 30200
334 + # error Sorry, your compiler is too old - please upgrade it.
335 ++#elif defined(CONFIG_ARM64) && GCC_VERSION < 50100 && !defined(__clang__)
336 ++/*
337 ++ * https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63293
338 ++ * https://lore.kernel.org/r/20210107111841.GN1551@××××××××××××××××××.uk
339 ++ */
340 ++# error Sorry, your version of GCC is too old - please use 5.1 or newer.
341 + #endif
342 +
343 + #if GCC_VERSION < 30300
344 +diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
345 +index 547a3a5ac57b5..1ec760f6bf58b 100644
346 +--- a/kernel/trace/ring_buffer.c
347 ++++ b/kernel/trace/ring_buffer.c
348 +@@ -4294,6 +4294,8 @@ void ring_buffer_reset_cpu(struct ring_buffer *buffer, int cpu)
349 +
350 + if (!cpumask_test_cpu(cpu, buffer->cpumask))
351 + return;
352 ++ /* prevent another thread from changing buffer sizes */
353 ++ mutex_lock(&buffer->mutex);
354 +
355 + atomic_inc(&buffer->resize_disabled);
356 + atomic_inc(&cpu_buffer->record_disabled);
357 +@@ -4317,6 +4319,8 @@ void ring_buffer_reset_cpu(struct ring_buffer *buffer, int cpu)
358 +
359 + atomic_dec(&cpu_buffer->record_disabled);
360 + atomic_dec(&buffer->resize_disabled);
361 ++
362 ++ mutex_unlock(&buffer->mutex);
363 + }
364 + EXPORT_SYMBOL_GPL(ring_buffer_reset_cpu);
365 +
366 +diff --git a/mm/slub.c b/mm/slub.c
367 +index 48ff01d22d18e..18d1622144afe 100644
368 +--- a/mm/slub.c
369 ++++ b/mm/slub.c
370 +@@ -5425,10 +5425,8 @@ static int sysfs_slab_add(struct kmem_cache *s)
371 +
372 + s->kobj.kset = cache_kset(s);
373 + err = kobject_init_and_add(&s->kobj, &slab_ktype, NULL, "%s", name);
374 +- if (err) {
375 +- kobject_put(&s->kobj);
376 ++ if (err)
377 + goto out;
378 +- }
379 +
380 + err = sysfs_create_group(&s->kobj, &slab_attr_group);
381 + if (err)
382 +diff --git a/net/core/skbuff.c b/net/core/skbuff.c
383 +index 011c2cf4d041c..171f81ce81d03 100644
384 +--- a/net/core/skbuff.c
385 ++++ b/net/core/skbuff.c
386 +@@ -419,7 +419,11 @@ struct sk_buff *__netdev_alloc_skb(struct net_device *dev, unsigned int len,
387 +
388 + len += NET_SKB_PAD;
389 +
390 +- if ((len > SKB_WITH_OVERHEAD(PAGE_SIZE)) ||
391 ++ /* If requested length is either too small or too big,
392 ++ * we use kmalloc() for skb->head allocation.
393 ++ */
394 ++ if (len <= SKB_WITH_OVERHEAD(1024) ||
395 ++ len > SKB_WITH_OVERHEAD(PAGE_SIZE) ||
396 + (gfp_mask & (__GFP_DIRECT_RECLAIM | GFP_DMA))) {
397 + skb = __alloc_skb(len, gfp_mask, SKB_ALLOC_RX, NUMA_NO_NODE);
398 + if (!skb)
399 +diff --git a/net/ipv4/netfilter/ipt_rpfilter.c b/net/ipv4/netfilter/ipt_rpfilter.c
400 +index 78cc64eddfc18..32a363465e0a4 100644
401 +--- a/net/ipv4/netfilter/ipt_rpfilter.c
402 ++++ b/net/ipv4/netfilter/ipt_rpfilter.c
403 +@@ -92,7 +92,7 @@ static bool rpfilter_mt(const struct sk_buff *skb, struct xt_action_param *par)
404 + flow.saddr = rpfilter_get_saddr(iph->daddr);
405 + flow.flowi4_oif = 0;
406 + flow.flowi4_mark = info->flags & XT_RPFILTER_VALID_MARK ? skb->mark : 0;
407 +- flow.flowi4_tos = RT_TOS(iph->tos);
408 ++ flow.flowi4_tos = iph->tos & IPTOS_RT_MASK;
409 + flow.flowi4_scope = RT_SCOPE_UNIVERSE;
410 +
411 + return rpfilter_lookup_reverse(par->net, &flow, par->in, info->flags) ^ invert;
412 +diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
413 +index 583765a330fff..392fc8ac4c6ae 100644
414 +--- a/net/ipv6/addrconf.c
415 ++++ b/net/ipv6/addrconf.c
416 +@@ -2238,6 +2238,7 @@ static void addrconf_add_mroute(struct net_device *dev)
417 + .fc_dst_len = 8,
418 + .fc_flags = RTF_UP,
419 + .fc_nlinfo.nl_net = dev_net(dev),
420 ++ .fc_protocol = RTPROT_KERNEL,
421 + };
422 +
423 + ipv6_addr_set(&cfg.fc_dst, htonl(0xFF000000), 0, 0, 0);
424 +diff --git a/net/sched/cls_tcindex.c b/net/sched/cls_tcindex.c
425 +index 755e9ff40fca6..3d891b11c0770 100644
426 +--- a/net/sched/cls_tcindex.c
427 ++++ b/net/sched/cls_tcindex.c
428 +@@ -273,9 +273,13 @@ tcindex_set_parms(struct net *net, struct tcf_proto *tp, unsigned long base,
429 + if (tb[TCA_TCINDEX_MASK])
430 + cp->mask = nla_get_u16(tb[TCA_TCINDEX_MASK]);
431 +
432 +- if (tb[TCA_TCINDEX_SHIFT])
433 ++ if (tb[TCA_TCINDEX_SHIFT]) {
434 + cp->shift = nla_get_u32(tb[TCA_TCINDEX_SHIFT]);
435 +-
436 ++ if (cp->shift > 16) {
437 ++ err = -EINVAL;
438 ++ goto errout;
439 ++ }
440 ++ }
441 + if (!cp->hash) {
442 + /* Hash not specified, use perfect hash if the upper limit
443 + * of the hashing index is below the threshold.
444 +diff --git a/sound/core/seq/oss/seq_oss_synth.c b/sound/core/seq/oss/seq_oss_synth.c
445 +index df5b984bb33f7..48b3398e9e9d3 100644
446 +--- a/sound/core/seq/oss/seq_oss_synth.c
447 ++++ b/sound/core/seq/oss/seq_oss_synth.c
448 +@@ -624,7 +624,8 @@ snd_seq_oss_synth_make_info(struct seq_oss_devinfo *dp, int dev, struct synth_in
449 +
450 + if (info->is_midi) {
451 + struct midi_info minf;
452 +- snd_seq_oss_midi_make_info(dp, info->midi_mapped, &minf);
453 ++ if (snd_seq_oss_midi_make_info(dp, info->midi_mapped, &minf))
454 ++ return -ENXIO;
455 + inf->synth_type = SYNTH_TYPE_MIDI;
456 + inf->synth_subtype = 0;
457 + inf->nr_voices = 16;
458 +diff --git a/sound/pci/hda/patch_via.c b/sound/pci/hda/patch_via.c
459 +index fc30d1e8aa76a..9dd104c308e1d 100644
460 +--- a/sound/pci/hda/patch_via.c
461 ++++ b/sound/pci/hda/patch_via.c
462 +@@ -135,6 +135,7 @@ static struct via_spec *via_new_spec(struct hda_codec *codec)
463 + spec->codec_type = VT1708S;
464 + spec->gen.indep_hp = 1;
465 + spec->gen.keep_eapd_on = 1;
466 ++ spec->gen.dac_min_mute = 1;
467 + spec->gen.pcm_playback_hook = via_playback_pcm_hook;
468 + spec->gen.add_stereo_mix_input = HDA_HINT_STEREO_MIX_AUTO;
469 + codec->power_save_node = 1;
470 +diff --git a/sound/soc/intel/boards/haswell.c b/sound/soc/intel/boards/haswell.c
471 +index de955c2e8c4e3..a0e67d5f59683 100644
472 +--- a/sound/soc/intel/boards/haswell.c
473 ++++ b/sound/soc/intel/boards/haswell.c
474 +@@ -197,6 +197,7 @@ static struct platform_driver haswell_audio = {
475 + .probe = haswell_audio_probe,
476 + .driver = {
477 + .name = "haswell-audio",
478 ++ .pm = &snd_soc_pm_ops,
479 + },
480 + };
481 +