search for: virtqueue_use_indirect

Displaying 20 results from an estimated 58 matches for "virtqueue_use_indirect".

2023 Mar 15
2
[PATCH v2 3/3] virtio_ring: Use const to annotate read-only pointer params
...s/virtio/virtio_ring.c +++ b/drivers/virtio/virtio_ring.c @@ -231,9 +231,9 @@ static void vring_free(struct virtqueue *_vq); * Helpers. */ -#define to_vvq(_vq) container_of(_vq, struct vring_virtqueue, vq) +#define to_vvq(_vq) container_of_const(_vq, struct vring_virtqueue, vq) -static bool virtqueue_use_indirect(struct vring_virtqueue *vq, +static bool virtqueue_use_indirect(const struct vring_virtqueue *vq, unsigned int total_sg) { /* @@ -269,7 +269,7 @@ static bool virtqueue_use_indirect(struct vring_virtqueue *vq, * unconditionally on data path. */ -static bool vring_use_dma_api(struct...
2023 Mar 07
3
[PATCH 0/3] virtio_ring: Clean up code for virtio ring and pci
This patch series performs a clean up of the code in virtio_ring and virtio_pci, modifying it to conform with the Linux kernel coding style guidance [1]. The modifications ensure the code easy to read and understand. This small series does few short cleanups in the code. Patch-1 Remove unnecessary num zero check, which performs in power_of_2. Patch-2 Avoid using inline for small functions.
2023 Mar 15
4
[PATCH v2 0/3] virtio_ring: Clean up code for virtio ring and pci
This patch series performs a clean up of the code in virtio_ring and virtio_pci, modifying it to conform with the Linux kernel coding style guidance [1]. The modifications ensure the code easy to read and understand. This small series does few short cleanups in the code. Patch-1 Allow non power of 2 sizes for packed virtqueues. Patch-2 Avoid using inline for small functions. Patch-3 Use const to
2023 Mar 10
4
[PATCH v2 0/3] virtio_ring: Clean up code for virtio ring and pci
This patch series performs a clean up of the code in virtio_ring and virtio_pci, modifying it to conform with the Linux kernel coding style guidance [1]. The modifications ensure the code easy to read and understand. This small series does few short cleanups in the code. Patch-1 Allow non power of 2 sizes for virtqueues Patch-2 Avoid using inline for small functions. Patch-3 Use const to annotate
2023 Mar 10
0
[PATCH v2 3/3] virtio_ring: Use const to annotate read-only pointer params
...s/virtio/virtio_ring.c +++ b/drivers/virtio/virtio_ring.c @@ -231,9 +231,9 @@ static void vring_free(struct virtqueue *_vq); * Helpers. */ -#define to_vvq(_vq) container_of(_vq, struct vring_virtqueue, vq) +#define to_vvq(_vq) container_of_const(_vq, struct vring_virtqueue, vq) -static bool virtqueue_use_indirect(struct vring_virtqueue *vq, +static bool virtqueue_use_indirect(const struct vring_virtqueue *vq, unsigned int total_sg) { /* @@ -269,7 +269,7 @@ static bool virtqueue_use_indirect(struct vring_virtqueue *vq, * unconditionally on data path. */ -static bool vring_use_dma_api(struct...
2019 Sep 01
3
[PATCH v4 1/5] vsock/virtio: limit the memory used per-socket
...pointed by the iov_iter. The guest allocates an iovec with 2 > > buffers, one for the header and one for the payload (4KB). > > BTW at the moment that forces another kmalloc within virtio core. Maybe > vsock needs a flag to skip allocation in this case. Worth benchmarking. > See virtqueue_use_indirect which just does total_sg > 1. > > > > > > > if (nbytes != pkt->len) { > > > > virtio_transport_free_pkt(pkt); > > > > vq_err(vq, "Faulted on copying pkt buf\n"); > > > > break; > > > > } > > &g...
2019 Sep 01
3
[PATCH v4 1/5] vsock/virtio: limit the memory used per-socket
...pointed by the iov_iter. The guest allocates an iovec with 2 > > buffers, one for the header and one for the payload (4KB). > > BTW at the moment that forces another kmalloc within virtio core. Maybe > vsock needs a flag to skip allocation in this case. Worth benchmarking. > See virtqueue_use_indirect which just does total_sg > 1. > > > > > > > if (nbytes != pkt->len) { > > > > virtio_transport_free_pkt(pkt); > > > > vq_err(vq, "Faulted on copying pkt buf\n"); > > > > break; > > > > } > > &g...
2019 Sep 02
0
[PATCH v4 1/5] vsock/virtio: limit the memory used per-socket
...The guest allocates an iovec with 2 > > > buffers, one for the header and one for the payload (4KB). > > > > BTW at the moment that forces another kmalloc within virtio core. Maybe > > vsock needs a flag to skip allocation in this case. Worth benchmarking. > > See virtqueue_use_indirect which just does total_sg > 1. Okay, I'll take a look at virtqueue_use_indirect and I'll do some benchmarking. > > > > > > > > > > if (nbytes != pkt->len) { > > > > > virtio_transport_free_pkt(pkt); > > > > > vq_er...
2018 Apr 25
0
[RFC v3 3/5] virtio_ring: add packed ring support
...Indirect descriptor, if any. */ + void *indir_desc; /* Indirect descriptor, if any. */ + int num; /* Descriptor list length. */ }; struct vring_virtqueue { @@ -142,6 +143,16 @@ struct vring_virtqueue { #define to_vvq(_vq) container_of(_vq, struct vring_virtqueue, vq) +static inline bool virtqueue_use_indirect(struct virtqueue *_vq, + unsigned int total_sg) +{ + struct vring_virtqueue *vq = to_vvq(_vq); + + /* If the host supports indirect descriptor tables, and we have multiple + * buffers, then go indirect. FIXME: tune this threshold */ + return (vq->indirect && total_sg > 1 &&...
2018 May 16
0
[RFC v4 3/5] virtio_ring: add packed ring support
...ast written value to driver->flags in * guest byte order. */ u16 event_flags_shadow; + + /* ID allocation. */ + struct idr buffer_id; }; }; @@ -142,6 +146,16 @@ struct vring_virtqueue { #define to_vvq(_vq) container_of(_vq, struct vring_virtqueue, vq) +static inline bool virtqueue_use_indirect(struct virtqueue *_vq, + unsigned int total_sg) +{ + struct vring_virtqueue *vq = to_vvq(_vq); + + /* If the host supports indirect descriptor tables, and we have multiple + * buffers, then go indirect. FIXME: tune this threshold */ + return (vq->indirect && total_sg > 1 &&...
2018 May 16
2
[RFC v4 3/5] virtio_ring: add packed ring support
...e critical case here. Need to measure its performance impact, especially if we have few unused slots. > }; > }; > > @@ -142,6 +146,16 @@ struct vring_virtqueue { > > #define to_vvq(_vq) container_of(_vq, struct vring_virtqueue, vq) > > +static inline bool virtqueue_use_indirect(struct virtqueue *_vq, > + unsigned int total_sg) > +{ > + struct vring_virtqueue *vq = to_vvq(_vq); > + > + /* If the host supports indirect descriptor tables, and we have multiple > + * buffers, then go indirect. FIXME: tune this threshold */ > + return (vq->indirec...
2018 May 16
2
[RFC v4 3/5] virtio_ring: add packed ring support
...e critical case here. Need to measure its performance impact, especially if we have few unused slots. > }; > }; > > @@ -142,6 +146,16 @@ struct vring_virtqueue { > > #define to_vvq(_vq) container_of(_vq, struct vring_virtqueue, vq) > > +static inline bool virtqueue_use_indirect(struct virtqueue *_vq, > + unsigned int total_sg) > +{ > + struct vring_virtqueue *vq = to_vvq(_vq); > + > + /* If the host supports indirect descriptor tables, and we have multiple > + * buffers, then go indirect. FIXME: tune this threshold */ > + return (vq->indirec...
2018 Sep 07
2
[virtio-dev] Re: [PATCH net-next v2 0/5] virtio: support packed ring
...> > - Track used wrap counter; > > > > RFC v3 -> RFC v4: > > - Make ID allocation support out-of-order (Jason); > > - Various fixes for EVENT_IDX support; > > > > RFC v2 -> RFC v3: > > - Split into small patches (Jason); > > - Add helper virtqueue_use_indirect() (Jason); > > - Just set id for the last descriptor of a list (Jason); > > - Calculate the prev in virtqueue_add_packed() (Jason); > > - Fix/improve desc suppression code (Jason/MST); > > - Refine the code layout for XXX_split/packed and wrappers (MST); > > - Fix the...
2023 Mar 02
1
[PATCH vhost v1 01/12] virtio_ring: split: refactor virtqueue_add_split() for premapped
...escs_used; BUG_ON(data == NULL); BUG_ON(ctx && vq->indirect); - if (unlikely(vq->broken)) { - END_USE(vq); - return -EIO; - } + if (unlikely(vq->broken)) + return ERR_PTR(-EIO); LAST_ADD_TIME_UPDATE(vq); BUG_ON(total_sg == 0); - head = vq->free_head; - if (virtqueue_use_indirect(vq, total_sg)) - desc = alloc_indirect_split(_vq, total_sg, gfp); + desc = alloc_indirect_split(&vq->vq, total_sg, gfp); else { desc = NULL; WARN_ON_ONCE(total_sg > vq->split.vring.num && !vq->indirect); } - if (desc) { - /* Use a single buffer which doesn'...
2019 Aug 01
2
[PATCH v4 1/5] vsock/virtio: limit the memory used per-socket
On Thu, Aug 01, 2019 at 09:21:15AM -0400, Michael S. Tsirkin wrote: > On Thu, Aug 01, 2019 at 12:47:54PM +0200, Stefano Garzarella wrote: > > On Tue, Jul 30, 2019 at 04:42:25PM -0400, Michael S. Tsirkin wrote: > > > On Tue, Jul 30, 2019 at 11:35:39AM +0200, Stefano Garzarella wrote: > > > > (...) > > > > > > > > > > The problem here is
2019 Aug 01
2
[PATCH v4 1/5] vsock/virtio: limit the memory used per-socket
On Thu, Aug 01, 2019 at 09:21:15AM -0400, Michael S. Tsirkin wrote: > On Thu, Aug 01, 2019 at 12:47:54PM +0200, Stefano Garzarella wrote: > > On Tue, Jul 30, 2019 at 04:42:25PM -0400, Michael S. Tsirkin wrote: > > > On Tue, Jul 30, 2019 at 11:35:39AM +0200, Stefano Garzarella wrote: > > > > (...) > > > > > > > > > > The problem here is
2018 Sep 10
3
[virtio-dev] Re: [PATCH net-next v2 0/5] virtio: support packed ring
...C v3 -> RFC v4: > > > > - Make ID allocation support out-of-order (Jason); > > > > - Various fixes for EVENT_IDX support; > > > > > > > > RFC v2 -> RFC v3: > > > > - Split into small patches (Jason); > > > > - Add helper virtqueue_use_indirect() (Jason); > > > > - Just set id for the last descriptor of a list (Jason); > > > > - Calculate the prev in virtqueue_add_packed() (Jason); > > > > - Fix/improve desc suppression code (Jason/MST); > > > > - Refine the code layout for XXX_split/packed...
2023 Feb 20
2
[PATCH vhost 01/10] virtio_ring: split: refactor virtqueue_add_split() for premapped
...->broken)) { > - END_USE(vq); > return -EIO; > } > > @@ -550,27 +604,17 @@ static inline int virtqueue_add_split(struct virtqueue *_vq, > > BUG_ON(total_sg == 0); > > - head = vq->free_head; > - > if (virtqueue_use_indirect(vq, total_sg)) > - desc = alloc_indirect_split(_vq, total_sg, gfp); > + desc = alloc_indirect_split(&vq->vq, total_sg, gfp); > else { > desc = NULL; > WARN_ON_ONCE(total_sg > vq->split.vring.num &&am...
2020 Jun 24
0
[PATCH v2 2/2] virtio: virtio_has_iommu_quirk -> virtio_has_dma_quirk
...irtio_gpu_object_shmem *shmem = to_virtio_gpu_shmem(bo); if (use_dma_api) diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c index a1a5c2a91426..34253cb69cb8 100644 --- a/drivers/virtio/virtio_ring.c +++ b/drivers/virtio/virtio_ring.c @@ -240,7 +240,7 @@ static inline bool virtqueue_use_indirect(struct virtqueue *_vq, static bool vring_use_dma_api(struct virtio_device *vdev) { - if (!virtio_has_iommu_quirk(vdev)) + if (!virtio_has_dma_quirk(vdev)) return true; /* Otherwise, we are left to guess. */ diff --git a/include/linux/virtio_config.h b/include/linux/virtio_config.h index...
2019 Sep 01
0
[PATCH v4 1/5] vsock/virtio: limit the memory used per-socket
...he guest RX > buffers pointed by the iov_iter. The guest allocates an iovec with 2 > buffers, one for the header and one for the payload (4KB). BTW at the moment that forces another kmalloc within virtio core. Maybe vsock needs a flag to skip allocation in this case. Worth benchmarking. See virtqueue_use_indirect which just does total_sg > 1. > > > > if (nbytes != pkt->len) { > > > virtio_transport_free_pkt(pkt); > > > vq_err(vq, "Faulted on copying pkt buf\n"); > > > break; > > > } > > > ... > > > } > >...