diff options
author | Wei Wang <wvw@google.com> | 2018-01-11 23:51:43 +0000 |
---|---|---|
committer | Android Partner Code Review <android-gerrit-partner@google.com> | 2018-01-11 23:51:43 +0000 |
commit | 796a90d274918b1e33c604e4239a1a8e91cdb862 (patch) | |
tree | 5357e6f0e21020af44e15d7a776dbcfc09de7169 | |
parent | 84d48f2dfea6161e5cf1e1e72d5f78d9595de9be (diff) | |
parent | 765d5ae683205cb20020c32e1165aed58b8da092 (diff) | |
download | tegra-android-tegra-dragon-3.18-oreo-mr1-s1.tar.gz |
Merge "UPSTREAM: ALSA: usb-audio: Kill stray URB at exiting" into android-chromeos-dragon-3.18android-8.1.0_r0.33android-tegra-dragon-3.18-oreo-mr1-s1
-rw-r--r-- | sound/usb/mixer.c | 12 | ||||
-rw-r--r-- | sound/usb/mixer.h | 1 |
2 files changed, 11 insertions, 2 deletions
diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c index 7191a7a225f0..ea7aa1de0e1b 100644 --- a/sound/usb/mixer.c +++ b/sound/usb/mixer.c @@ -2154,6 +2154,9 @@ static int parse_audio_unit(struct mixer_build *state, int unitid) static void snd_usb_mixer_free(struct usb_mixer_interface *mixer) { + /* kill pending URBs */ + snd_usb_mixer_disconnect(&mixer->list); + kfree(mixer->id_elems); if (mixer->urb) { kfree(mixer->urb->transfer_buffer); @@ -2490,8 +2493,13 @@ void snd_usb_mixer_disconnect(struct list_head *p) struct usb_mixer_interface *mixer; mixer = list_entry(p, struct usb_mixer_interface, list); - usb_kill_urb(mixer->urb); - usb_kill_urb(mixer->rc_urb); + if (mixer->disconnected) + return; + if (mixer->urb) + usb_kill_urb(mixer->urb); + if (mixer->rc_urb) + usb_kill_urb(mixer->rc_urb); + mixer->disconnected = true; } #ifdef CONFIG_PM diff --git a/sound/usb/mixer.h b/sound/usb/mixer.h index 73b1f649447b..cdff31de12d4 100644 --- a/sound/usb/mixer.h +++ b/sound/usb/mixer.h @@ -23,6 +23,7 @@ struct usb_mixer_interface { u8 audigy2nx_leds[3]; u8 xonar_u1_status; + bool disconnected; }; #define MAX_CHANNELS 16 /* max logical channels */ |