Message ID | 20220406034346.74409-6-xuanzhuo@linux.alibaba.com (mailing list archive) |
---|---|
State | Not Applicable |
Headers | show |
Series | virtio pci support VIRTIO_F_RING_RESET (refactor vring) | expand |
在 2022/4/6 上午11:43, Xuan Zhuo 写道: > Introduce vring_free() to free the vring of vq. > > Subsequent patches will use vring_free() alone. > > Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com> Acked-by: Jason Wang <jasowang@redhat.com> > --- > drivers/virtio/virtio_ring.c | 18 +++++++++++++----- > 1 file changed, 13 insertions(+), 5 deletions(-) > > diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c > index cb6010750a94..33fddfb907a6 100644 > --- a/drivers/virtio/virtio_ring.c > +++ b/drivers/virtio/virtio_ring.c > @@ -2301,14 +2301,10 @@ struct virtqueue *vring_new_virtqueue(unsigned int index, > } > EXPORT_SYMBOL_GPL(vring_new_virtqueue); > > -void vring_del_virtqueue(struct virtqueue *_vq) > +static void vring_free(struct virtqueue *_vq) > { > struct vring_virtqueue *vq = to_vvq(_vq); > > - spin_lock(&vq->vq.vdev->vqs_list_lock); > - list_del(&_vq->list); > - spin_unlock(&vq->vq.vdev->vqs_list_lock); > - > if (vq->we_own_ring) { > if (vq->packed_ring) { > vring_free_queue(vq->vq.vdev, > @@ -2339,6 +2335,18 @@ void vring_del_virtqueue(struct virtqueue *_vq) > kfree(vq->split.desc_state); > kfree(vq->split.desc_extra); > } > +} > + > +void vring_del_virtqueue(struct virtqueue *_vq) > +{ > + struct vring_virtqueue *vq = to_vvq(_vq); > + > + spin_lock(&vq->vq.vdev->vqs_list_lock); > + list_del(&_vq->list); > + spin_unlock(&vq->vq.vdev->vqs_list_lock); > + > + vring_free(_vq); > + > kfree(vq); > } > EXPORT_SYMBOL_GPL(vring_del_virtqueue);
diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c index cb6010750a94..33fddfb907a6 100644 --- a/drivers/virtio/virtio_ring.c +++ b/drivers/virtio/virtio_ring.c @@ -2301,14 +2301,10 @@ struct virtqueue *vring_new_virtqueue(unsigned int index, } EXPORT_SYMBOL_GPL(vring_new_virtqueue); -void vring_del_virtqueue(struct virtqueue *_vq) +static void vring_free(struct virtqueue *_vq) { struct vring_virtqueue *vq = to_vvq(_vq); - spin_lock(&vq->vq.vdev->vqs_list_lock); - list_del(&_vq->list); - spin_unlock(&vq->vq.vdev->vqs_list_lock); - if (vq->we_own_ring) { if (vq->packed_ring) { vring_free_queue(vq->vq.vdev, @@ -2339,6 +2335,18 @@ void vring_del_virtqueue(struct virtqueue *_vq) kfree(vq->split.desc_state); kfree(vq->split.desc_extra); } +} + +void vring_del_virtqueue(struct virtqueue *_vq) +{ + struct vring_virtqueue *vq = to_vvq(_vq); + + spin_lock(&vq->vq.vdev->vqs_list_lock); + list_del(&_vq->list); + spin_unlock(&vq->vq.vdev->vqs_list_lock); + + vring_free(_vq); + kfree(vq); } EXPORT_SYMBOL_GPL(vring_del_virtqueue);
Introduce vring_free() to free the vring of vq. Subsequent patches will use vring_free() alone. Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com> --- drivers/virtio/virtio_ring.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-)