diff options
author | LCPD Auto Merger | 2017-05-14 17:10:05 -0500 |
---|---|---|
committer | LCPD Auto Merger | 2017-05-14 17:10:05 -0500 |
commit | c5a66910c41ba09e1d3715907d7649d3bd497216 (patch) | |
tree | a0f7cde49429b11ecd85862f007c8ad9afe8cd43 /sound | |
parent | 5f629b941cd7e243daa836a4838b97104c513f3c (diff) | |
parent | be90e260145c0463c7a5c80ced379adc2f4850cc (diff) | |
download | kernel-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.c | 13 |
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 | } |