mirror of
https://github.com/torvalds/linux.git
synced 2026-09-23 22:14:03 +02:00
ALSA: virtio: reset device before deleting virtqueues
virtsnd_remove() and virtsnd_freeze() delete the virtqueues before resetting the device. del_vqs() frees the vring backing, but does not provide a generic device quiesce operation. In particular, modern virtio-pci keeps enabled queues active until the device is reset. Reset the device before deleting the virtqueues so it can no longer access the vring memory when that memory is released. This also covers probe failures after DRIVER_OK, which unwind through virtsnd_remove(). Fixes:de3a9980d8("ALSA: virtio: add virtio sound driver") Fixes:575483e90a("ALSA: virtio: introduce device suspend/resume support") Cc: stable@vger.kernel.org Signed-off-by: Yuho Choi <oss.patchbox@gmail.com> Link: https://patch.msgid.link/20260911031121.1542502-1-oss.patchbox@gmail.com Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
fd95e68df6
commit
6c05d00af3
|
|
@ -354,8 +354,8 @@ static void virtsnd_remove(struct virtio_device *vdev)
|
|||
if (snd->card)
|
||||
snd_card_free(snd->card);
|
||||
|
||||
vdev->config->del_vqs(vdev);
|
||||
virtio_reset_device(vdev);
|
||||
vdev->config->del_vqs(vdev);
|
||||
|
||||
for (i = 0; snd->substreams && i < snd->nsubstreams; ++i) {
|
||||
struct virtio_pcm_substream *vss = &snd->substreams[i];
|
||||
|
|
@ -383,8 +383,8 @@ static int virtsnd_freeze(struct virtio_device *vdev)
|
|||
virtsnd_disable_event_vq(snd);
|
||||
virtsnd_ctl_msg_cancel_all(snd);
|
||||
|
||||
vdev->config->del_vqs(vdev);
|
||||
virtio_reset_device(vdev);
|
||||
vdev->config->del_vqs(vdev);
|
||||
|
||||
for (i = 0; i < snd->nsubstreams; ++i)
|
||||
cancel_work_sync(&snd->substreams[i].elapsed_period);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user