diff options
author | David S. Miller <davem@davemloft.net> | 2017-10-22 08:36:53 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-10-22 08:39:14 -0400 |
commit | f8ddadc4db6c7b7029b6d0e0d9af24f74ad27ca2 (patch) | |
tree | 0a6432aba336bae42313613f4c891bcfce02bd4e /sound/usb/mixer.c | |
parent | bdd091bab8c631bd2801af838e344fad34566410 (diff) | |
parent | b5ac3beb5a9f0ef0ea64cd85faf94c0dc4de0e42 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
There were quite a few overlapping sets of changes here.
Daniel's bug fix for off-by-ones in the new BPF branch instructions,
along with the added allowances for "data_end > ptr + x" forms
collided with the metadata additions.
Along with those three changes came veritifer test cases, which in
their final form I tried to group together properly. If I had just
trimmed GIT's conflict tags as-is, this would have split up the
meta tests unnecessarily.
In the socketmap code, a set of preemption disabling changes
overlapped with the rename of bpf_compute_data_end() to
bpf_compute_data_pointers().
Changes were made to the mv88e6060.c driver set addr method
which got removed in net-next.
The hyperv transport socket layer had a locking change in 'net'
which overlapped with a change of socket state macro usage
in 'net-next'.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'sound/usb/mixer.c')
-rw-r--r-- | sound/usb/mixer.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c index 9732edf77f86..91bc8f18791e 100644 --- a/sound/usb/mixer.c +++ b/sound/usb/mixer.c | |||
@@ -2234,6 +2234,9 @@ static int parse_audio_unit(struct mixer_build *state, int unitid) | |||
2234 | 2234 | ||
2235 | static void snd_usb_mixer_free(struct usb_mixer_interface *mixer) | 2235 | static void snd_usb_mixer_free(struct usb_mixer_interface *mixer) |
2236 | { | 2236 | { |
2237 | /* kill pending URBs */ | ||
2238 | snd_usb_mixer_disconnect(mixer); | ||
2239 | |||
2237 | kfree(mixer->id_elems); | 2240 | kfree(mixer->id_elems); |
2238 | if (mixer->urb) { | 2241 | if (mixer->urb) { |
2239 | kfree(mixer->urb->transfer_buffer); | 2242 | kfree(mixer->urb->transfer_buffer); |
@@ -2584,8 +2587,13 @@ _error: | |||
2584 | 2587 | ||
2585 | void snd_usb_mixer_disconnect(struct usb_mixer_interface *mixer) | 2588 | void snd_usb_mixer_disconnect(struct usb_mixer_interface *mixer) |
2586 | { | 2589 | { |
2587 | usb_kill_urb(mixer->urb); | 2590 | if (mixer->disconnected) |
2588 | usb_kill_urb(mixer->rc_urb); | 2591 | return; |
2592 | if (mixer->urb) | ||
2593 | usb_kill_urb(mixer->urb); | ||
2594 | if (mixer->rc_urb) | ||
2595 | usb_kill_urb(mixer->rc_urb); | ||
2596 | mixer->disconnected = true; | ||
2589 | } | 2597 | } |
2590 | 2598 | ||
2591 | #ifdef CONFIG_PM | 2599 | #ifdef CONFIG_PM |