mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 14:53:58 -04:00
virtio_pci: support VIRTIO_F_RING_RESET
This patch implements virtio pci support for QUEUE RESET. Performing reset on a queue is divided into these steps: 1. notify the device to reset the queue 2. recycle the buffer submitted 3. reset the vring (may re-alloc) 4. mmap vring to device, and enable the queue This patch implements virtio_reset_vq(), virtio_enable_resetq() in the pci scenario. Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com> Acked-by: Jason Wang <jasowang@redhat.com> Message-Id: <20220801063902.129329-33-xuanzhuo@linux.alibaba.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
committed by
Michael S. Tsirkin
parent
56bdc06139
commit
04ca0b0b16
@@ -214,9 +214,15 @@ static void vp_del_vq(struct virtqueue *vq)
|
||||
struct virtio_pci_vq_info *info = vp_dev->vqs[vq->index];
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&vp_dev->lock, flags);
|
||||
list_del(&info->node);
|
||||
spin_unlock_irqrestore(&vp_dev->lock, flags);
|
||||
/*
|
||||
* If it fails during re-enable reset vq. This way we won't rejoin
|
||||
* info->node to the queue. Prevent unexpected irqs.
|
||||
*/
|
||||
if (!vq->reset) {
|
||||
spin_lock_irqsave(&vp_dev->lock, flags);
|
||||
list_del(&info->node);
|
||||
spin_unlock_irqrestore(&vp_dev->lock, flags);
|
||||
}
|
||||
|
||||
vp_dev->del_vq(info);
|
||||
kfree(info);
|
||||
|
||||
Reference in New Issue
Block a user