Skip to content

Commit ab574d1

Browse files
committed
ALSA: usb-audio: Don't try to submit URBs after disconnection
USB-audio driver can still submit URBs while the device is being disconnected, and it may result in spurious error messages like: usb 1-2: cannot submit urb (err = -19) usb 1-2: Unable to submit urb #0: -19 at snd_usb_queue_pending_output_urbs usb 1-2: cannot submit urb 0, error -19: no device Although those are harmless, they are just ugly. This patch tries to avoid spewing such error messages when the device is already at the disconnected state. It also skips the superfluous xfer notification, too. Link: https://lore.kernel.org/r/20230828101924.27107-1-tiwai@suse.de Signed-off-by: Takashi Iwai <tiwai@suse.de>
1 parent b94a62a commit ab574d1

File tree

1 file changed

+27
-13
lines changed

1 file changed

+27
-13
lines changed

sound/usb/endpoint.c

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -505,13 +505,18 @@ int snd_usb_queue_pending_output_urbs(struct snd_usb_endpoint *ep,
505505
return -EPIPE;
506506
}
507507

508-
err = usb_submit_urb(ctx->urb, GFP_ATOMIC);
508+
if (!atomic_read(&ep->chip->shutdown))
509+
err = usb_submit_urb(ctx->urb, GFP_ATOMIC);
510+
else
511+
err = -ENODEV;
509512
if (err < 0) {
510-
usb_audio_err(ep->chip,
511-
"Unable to submit urb #%d: %d at %s\n",
512-
ctx->index, err, __func__);
513-
if (!in_stream_lock)
514-
notify_xrun(ep);
513+
if (!atomic_read(&ep->chip->shutdown)) {
514+
usb_audio_err(ep->chip,
515+
"Unable to submit urb #%d: %d at %s\n",
516+
ctx->index, err, __func__);
517+
if (!in_stream_lock)
518+
notify_xrun(ep);
519+
}
515520
return -EPIPE;
516521
}
517522

@@ -575,12 +580,17 @@ static void snd_complete_urb(struct urb *urb)
575580
prepare_inbound_urb(ep, ctx);
576581
}
577582

578-
err = usb_submit_urb(urb, GFP_ATOMIC);
583+
if (!atomic_read(&ep->chip->shutdown))
584+
err = usb_submit_urb(urb, GFP_ATOMIC);
585+
else
586+
err = -ENODEV;
579587
if (err == 0)
580588
return;
581589

582-
usb_audio_err(ep->chip, "cannot submit urb (err = %d)\n", err);
583-
notify_xrun(ep);
590+
if (!atomic_read(&ep->chip->shutdown)) {
591+
usb_audio_err(ep->chip, "cannot submit urb (err = %d)\n", err);
592+
notify_xrun(ep);
593+
}
584594

585595
exit_clear:
586596
clear_bit(ctx->index, &ep->active_mask);
@@ -1603,11 +1613,15 @@ int snd_usb_endpoint_start(struct snd_usb_endpoint *ep)
16031613
goto __error;
16041614
}
16051615

1606-
err = usb_submit_urb(urb, GFP_ATOMIC);
1616+
if (!atomic_read(&ep->chip->shutdown))
1617+
err = usb_submit_urb(urb, GFP_ATOMIC);
1618+
else
1619+
err = -ENODEV;
16071620
if (err < 0) {
1608-
usb_audio_err(ep->chip,
1609-
"cannot submit urb %d, error %d: %s\n",
1610-
i, err, usb_error_string(err));
1621+
if (!atomic_read(&ep->chip->shutdown))
1622+
usb_audio_err(ep->chip,
1623+
"cannot submit urb %d, error %d: %s\n",
1624+
i, err, usb_error_string(err));
16111625
goto __error;
16121626
}
16131627
set_bit(i, &ep->active_mask);

0 commit comments

Comments
 (0)