mirror of
https://github.com/torvalds/linux.git
synced 2024-12-28 22:02:28 +00:00
virtio_ring: split: __vring_new_virtqueue() accept struct vring_virtqueue_split
__vring_new_virtqueue() instead accepts struct vring_virtqueue_split. The purpose of this is to pass more information into __vring_new_virtqueue() to make the code simpler and the structure cleaner. Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com> Acked-by: Jason Wang <jasowang@redhat.com> Message-Id: <20220801063902.129329-9-xuanzhuo@linux.alibaba.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
07d9629d49
commit
cd4c812acb
@ -205,7 +205,7 @@ struct vring_virtqueue {
|
||||
};
|
||||
|
||||
static struct virtqueue *__vring_new_virtqueue(unsigned int index,
|
||||
struct vring vring,
|
||||
struct vring_virtqueue_split *vring_split,
|
||||
struct virtio_device *vdev,
|
||||
bool weak_barriers,
|
||||
bool context,
|
||||
@ -949,6 +949,7 @@ static struct virtqueue *vring_create_virtqueue_split(
|
||||
void (*callback)(struct virtqueue *),
|
||||
const char *name)
|
||||
{
|
||||
struct vring_virtqueue_split vring_split = {};
|
||||
struct virtqueue *vq;
|
||||
void *queue = NULL;
|
||||
dma_addr_t dma_addr;
|
||||
@ -984,10 +985,10 @@ static struct virtqueue *vring_create_virtqueue_split(
|
||||
return NULL;
|
||||
|
||||
queue_size_in_bytes = vring_size(num, vring_align);
|
||||
vring_init(&vring, num, queue, vring_align);
|
||||
vring_init(&vring_split.vring, num, queue, vring_align);
|
||||
|
||||
vq = __vring_new_virtqueue(index, vring, vdev, weak_barriers, context,
|
||||
notify, callback, name);
|
||||
vq = __vring_new_virtqueue(index, &vring_split, vdev, weak_barriers,
|
||||
context, notify, callback, name);
|
||||
if (!vq) {
|
||||
vring_free_queue(vdev, queue_size_in_bytes, queue,
|
||||
dma_addr);
|
||||
@ -2204,7 +2205,7 @@ EXPORT_SYMBOL_GPL(vring_interrupt);
|
||||
|
||||
/* Only available for split ring */
|
||||
static struct virtqueue *__vring_new_virtqueue(unsigned int index,
|
||||
struct vring vring,
|
||||
struct vring_virtqueue_split *vring_split,
|
||||
struct virtio_device *vdev,
|
||||
bool weak_barriers,
|
||||
bool context,
|
||||
@ -2246,7 +2247,7 @@ static struct virtqueue *__vring_new_virtqueue(unsigned int index,
|
||||
vq->split.queue_dma_addr = 0;
|
||||
vq->split.queue_size_in_bytes = 0;
|
||||
|
||||
vq->split.vring = vring;
|
||||
vq->split.vring = vring_split->vring;
|
||||
vq->split.avail_flags_shadow = 0;
|
||||
vq->split.avail_idx_shadow = 0;
|
||||
|
||||
@ -2258,21 +2259,21 @@ static struct virtqueue *__vring_new_virtqueue(unsigned int index,
|
||||
vq->split.avail_flags_shadow);
|
||||
}
|
||||
|
||||
vq->split.desc_state = kmalloc_array(vring.num,
|
||||
vq->split.desc_state = kmalloc_array(vring_split->vring.num,
|
||||
sizeof(struct vring_desc_state_split), GFP_KERNEL);
|
||||
if (!vq->split.desc_state)
|
||||
goto err_state;
|
||||
|
||||
vq->split.desc_extra = vring_alloc_desc_extra(vring.num);
|
||||
vq->split.desc_extra = vring_alloc_desc_extra(vring_split->vring.num);
|
||||
if (!vq->split.desc_extra)
|
||||
goto err_extra;
|
||||
|
||||
/* Put everything in free lists. */
|
||||
vq->free_head = 0;
|
||||
memset(vq->split.desc_state, 0, vring.num *
|
||||
memset(vq->split.desc_state, 0, vring_split->vring.num *
|
||||
sizeof(struct vring_desc_state_split));
|
||||
|
||||
virtqueue_init(vq, vring.num);
|
||||
virtqueue_init(vq, vring_split->vring.num);
|
||||
|
||||
spin_lock(&vdev->vqs_list_lock);
|
||||
list_add_tail(&vq->vq.list, &vdev->vqs);
|
||||
@ -2322,14 +2323,14 @@ struct virtqueue *vring_new_virtqueue(unsigned int index,
|
||||
void (*callback)(struct virtqueue *vq),
|
||||
const char *name)
|
||||
{
|
||||
struct vring vring;
|
||||
struct vring_virtqueue_split vring_split = {};
|
||||
|
||||
if (virtio_has_feature(vdev, VIRTIO_F_RING_PACKED))
|
||||
return NULL;
|
||||
|
||||
vring_init(&vring, num, pages, vring_align);
|
||||
return __vring_new_virtqueue(index, vring, vdev, weak_barriers, context,
|
||||
notify, callback, name);
|
||||
vring_init(&vring_split.vring, num, pages, vring_align);
|
||||
return __vring_new_virtqueue(index, &vring_split, vdev, weak_barriers,
|
||||
context, notify, callback, name);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(vring_new_virtqueue);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user