--- x/sound/usb/card.c +++ y/sound/usb/card.c @@ -932,10 +932,14 @@ static int usb_audio_probe(struct usb_in __error_no_register: if (chip) { + struct list_head *p; /* chip->active is inside the chip->card object, * decrement before memory is possibly returned. */ atomic_dec(&chip->active); + list_for_each(p, &chip->midi_list) { + snd_usbmidi_disconnect(p); + } if (!chip->num_interfaces) snd_card_free(chip->card); }