Message ID | s5hsihxu8hp.wl-tiwai@suse.de (mailing list archive) |
---|---|
State | Accepted |
Commit | 0725dda207e95ff25f1aa01432250323e0ec49d6 |
Delegated to: | Takashi Iwai |
Headers | show |
At Wed, 05 Nov 2014 13:39:30 +0100, 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.) The patch was confirmed to fix, at least, for 3.14 kernel: https://bugzilla.kernel.org/show_bug.cgi?id=80931 I'll resubmit a proper patch to ML. Takashi
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); >
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);