aboutsummaryrefslogtreecommitdiffstats
path: root/sound
diff options
context:
space:
mode:
authorLCPD Auto Merger2017-05-14 17:10:05 -0500
committerLCPD Auto Merger2017-05-14 17:10:05 -0500
commitc5a66910c41ba09e1d3715907d7649d3bd497216 (patch)
treea0f7cde49429b11ecd85862f007c8ad9afe8cd43 /sound
parent5f629b941cd7e243daa836a4838b97104c513f3c (diff)
parentbe90e260145c0463c7a5c80ced379adc2f4850cc (diff)
downloadkernel-omap-c5a66910c41ba09e1d3715907d7649d3bd497216.tar.gz
kernel-omap-c5a66910c41ba09e1d3715907d7649d3bd497216.tar.xz
kernel-omap-c5a66910c41ba09e1d3715907d7649d3bd497216.zip
Merge tag 'v4.4.68' of http://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable into ti-linux-4.4.y
This is the 4.4.68 stable release * tag 'v4.4.68' of http://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable: (59 commits) Linux 4.4.68 block: get rid of blk_integrity_revalidate() drm/ttm: fix use-after-free races in vm fault handling f2fs: sanity check segment count bnxt_en: allocate enough space for ->ntp_fltr_bmap ipv6: reorder ip6_route_dev_notifier after ipv6_dev_notf ipv6: initialize route null entry in addrconf_init() rtnetlink: NUL-terminate IFLA_PHYS_PORT_NAME string ipv4, ipv6: ensure raw socket message is big enough to hold an IP header tcp: do not inherit fastopen_req from parent tcp: fix wraparound issue in tcp_lp bpf, arm64: fix jit branch offset related to ldimm64 tcp: do not underestimate skb->truesize in tcp_trim_head() ALSA: hda - Fix deadlock of controller device lock at unbinding staging: emxx_udc: remove incorrect __init annotations staging: wlan-ng: add missing byte order conversion brcmfmac: Make skb header writable before use brcmfmac: Ensure pointer correctly set if skb data location changes MIPS: R2-on-R6 MULTU/MADDU/MSUBU emulation bugfix scsi: mac_scsi: Fix MAC_SCSI=m option when SCSI=m ... Signed-off-by: LCPD Auto Merger <lcpd_integration@list.ti.com>
Diffstat (limited to 'sound')
-rw-r--r--sound/pci/hda/hda_intel.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
index 8f3e5e9d8bdb..e6de496bffbe 100644
--- a/sound/pci/hda/hda_intel.c
+++ b/sound/pci/hda/hda_intel.c
@@ -2166,7 +2166,20 @@ static void azx_remove(struct pci_dev *pci)
2166 /* cancel the pending probing work */ 2166 /* cancel the pending probing work */
2167 chip = card->private_data; 2167 chip = card->private_data;
2168 hda = container_of(chip, struct hda_intel, chip); 2168 hda = container_of(chip, struct hda_intel, chip);
2169 /* FIXME: below is an ugly workaround.
2170 * Both device_release_driver() and driver_probe_device()
2171 * take *both* the device's and its parent's lock before
2172 * calling the remove() and probe() callbacks. The codec
2173 * probe takes the locks of both the codec itself and its
2174 * parent, i.e. the PCI controller dev. Meanwhile, when
2175 * the PCI controller is unbound, it takes its lock, too
2176 * ==> ouch, a deadlock!
2177 * As a workaround, we unlock temporarily here the controller
2178 * device during cancel_work_sync() call.
2179 */
2180 device_unlock(&pci->dev);
2169 cancel_work_sync(&hda->probe_work); 2181 cancel_work_sync(&hda->probe_work);
2182 device_lock(&pci->dev);
2170 2183
2171 snd_card_free(card); 2184 snd_card_free(card);
2172 } 2185 }