[alsa-devel] [PATCH v2] Scarlett mixer interface inclusion
Chris J Arges
chris.j.arges at canonical.com
Wed Nov 5 15:30:21 CET 2014
On 11/05/2014 06:39 AM, Takashi Iwai wrote:
> At Wed, 05 Nov 2014 12:33:37 +0100,
> Takashi Iwai wrote:
>>
>> At Wed, 22 Oct 2014 08:36:50 +0200,
>> Takashi Iwai wrote:
>>>
>>>> 2) When unloading a device there are numerous sysfs_remove_group issues:
>>>> usb 1-1.1: USB disconnect, device number 6
>>>> ------------[ cut here ]------------
>>>> WARNING: CPU: 0 PID: 54 at /build/buildd/linux-3.16.0/fs/sysfs/group.c:219 sysfs_remove_group+0x99/0xa0()
>>>> sysfs group ffffffff82cbd6e0 not found for kobject 'midi1'
>>> (snip)
>>>> However this issue occured even without the patch applied.
>>>
>>> Yes, there was a similar report, but we couldn't reproduce here.
>>> It's a Oops coming from OSS midi device. This is fairly harmless, but
>>> annoying. Could you give your kernel config? Maybe there's some
>>> difference.
>>
>> I'm now checking this issue again, and I still couldn't reproduce it
>> on my local machines. Could you give your kernel config if this still
>> happens?
>>
>> Also, as a blind shot: does the patch below give any difference?
>
> Try the one below instead. This is for 3.18 but should be applicable
> to older kernels, too. (It's not applicable to for-next branch due to
> the recent cleanups, though.)
I've tested this against 3.18-rc3 on my laptop and it no longer produces
any warnings on disconnection!
Thanks,
--chris
>
>
> Takashi
>
> ---
> diff --git a/sound/usb/card.c b/sound/usb/card.c
> index 7ecd0e8a5c51..f61ebb17cc64 100644
> --- a/sound/usb/card.c
> +++ b/sound/usb/card.c
> @@ -591,18 +591,19 @@ static void snd_usb_audio_disconnect(struct usb_device *dev,
> {
> struct snd_card *card;
> struct list_head *p;
> + bool was_shutdown;
>
> if (chip == (void *)-1L)
> return;
>
> card = chip->card;
> down_write(&chip->shutdown_rwsem);
> + was_shutdown = chip->shutdown;
> chip->shutdown = 1;
> up_write(&chip->shutdown_rwsem);
>
> mutex_lock(®ister_mutex);
> - chip->num_interfaces--;
> - if (chip->num_interfaces <= 0) {
> + if (!was_shutdown) {
> struct snd_usb_endpoint *ep;
>
> snd_card_disconnect(card);
> @@ -622,6 +623,10 @@ static void snd_usb_audio_disconnect(struct usb_device *dev,
> list_for_each(p, &chip->mixer_list) {
> snd_usb_mixer_disconnect(p);
> }
> + }
> +
> + chip->num_interfaces--;
> + if (chip->num_interfaces <= 0) {
> usb_chip[chip->index] = NULL;
> mutex_unlock(®ister_mutex);
> snd_card_free_when_closed(card);
>
More information about the Alsa-devel
mailing list