summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWei Wang <wvw@google.com>2018-01-11 23:51:43 +0000
committerAndroid Partner Code Review <android-gerrit-partner@google.com>2018-01-11 23:51:43 +0000
commit796a90d274918b1e33c604e4239a1a8e91cdb862 (patch)
tree5357e6f0e21020af44e15d7a776dbcfc09de7169
parent84d48f2dfea6161e5cf1e1e72d5f78d9595de9be (diff)
parent765d5ae683205cb20020c32e1165aed58b8da092 (diff)
downloadtegra-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.c12
-rw-r--r--sound/usb/mixer.h1
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 */