search for: free_head

Displaying 20 results from an estimated 253 matches for "free_head".

2013 Apr 05
1
Bug in SeaBIOS virtio-ring handling bug with vhost-scsi-pci
...ci at i0cf8/*@4/*@0/*@0,0 virtio_scsi_cmd, using vring_add_buf for out_num: 1 in_num: 2 virtio_scsi_cmd, using vring_add_buf vr: 0x000ed404 vr->num: 128 vring_add_buf, vr: 0x000ed404 vr->num: 128 vring_add_buf, head: 0, index: 0 vring_add_buf, setting desc[prev=2].flags vring_add_buf, setting free_head: 3 vring_add_buf, setting q->vdata[head=0] vring_add_buf, setting q->ring[av=0] virtio_scsi_cmd, after vring_add_buf vr: 0x000ed404 vr->num: 128 virtio_scsi_cmd, after vring_kick vr: 0x000ed404 vr->num: 128 virtio_scsi_cmd, after vring_more_used #4 vr: 0x000ed404 vr->num: 1...
2013 Apr 05
1
Bug in SeaBIOS virtio-ring handling bug with vhost-scsi-pci
...ci at i0cf8/*@4/*@0/*@0,0 virtio_scsi_cmd, using vring_add_buf for out_num: 1 in_num: 2 virtio_scsi_cmd, using vring_add_buf vr: 0x000ed404 vr->num: 128 vring_add_buf, vr: 0x000ed404 vr->num: 128 vring_add_buf, head: 0, index: 0 vring_add_buf, setting desc[prev=2].flags vring_add_buf, setting free_head: 3 vring_add_buf, setting q->vdata[head=0] vring_add_buf, setting q->ring[av=0] virtio_scsi_cmd, after vring_add_buf vr: 0x000ed404 vr->num: 128 virtio_scsi_cmd, after vring_kick vr: 0x000ed404 vr->num: 128 virtio_scsi_cmd, after vring_more_used #4 vr: 0x000ed404 vr->num: 1...
2018 Mar 16
2
[PATCH RFC 2/2] virtio_ring: support packed ring
...free -= descs_used; >>> + >>> + /* Update free pointer */ >>> + if (indirect) { >>> + n = head + 1; >>> + if (n >= vq->vring_packed.num) { >>> + n = 0; >>> + vq->wrap_counter ^= 1; >>> + } >>> + vq->free_head = n; >> detach_buf_packed() does not even touch free_head here, so need to explain >> its meaning for packed ring. > Above code is for indirect support which isn't really > implemented in this patch yet. > > For your question, free_head stores the index of the > next...
2018 Mar 16
2
[PATCH RFC 2/2] virtio_ring: support packed ring
...free -= descs_used; >>> + >>> + /* Update free pointer */ >>> + if (indirect) { >>> + n = head + 1; >>> + if (n >= vq->vring_packed.num) { >>> + n = 0; >>> + vq->wrap_counter ^= 1; >>> + } >>> + vq->free_head = n; >> detach_buf_packed() does not even touch free_head here, so need to explain >> its meaning for packed ring. > Above code is for indirect support which isn't really > implemented in this patch yet. > > For your question, free_head stores the index of the > next...
2017 Jul 12
0
[virtio-dev] Re: [PATCH v11 6/6] virtio-balloon: VIRTIO_BALLOON_F_CMD_VQ
..., >> unsigned int *idx) { >> >> ... >> uint16_t desc_flags = in ? VRING_DESC_F_NEXT | VRING_DESC_F_WRITE : >> VRING_DESC_F_NEXT; >> >> vq->vring.desc[vq->free_head].addr = addr; >> vq->vring.desc[vq->free_head].len = len; >> vq->vring.desc[vq->free_head].flags = cpu_to_virtio16(_vq->vdev, flags); >> /* return to the caller the desc id */ >> *idx = vq->free_head; >> ... >> } >&gt...
2012 Oct 16
6
[PATCH 1/5] virtio: move queue_index and num_free fields into core struct virtqueue.
...ndex e639584..335dcec 100644 --- a/drivers/virtio/virtio_ring.c +++ b/drivers/virtio/virtio_ring.c @@ -93,8 +93,6 @@ struct vring_virtqueue /* Host publishes avail event idx */ bool event; - /* Number of free buffers */ - unsigned int num_free; /* Head of free buffer list. */ unsigned int free_head; /* Number we've added since last sync. */ @@ -106,9 +104,6 @@ struct vring_virtqueue /* How to notify other side. FIXME: commonalize hcalls! */ void (*notify)(struct virtqueue *vq); - /* Index of the queue */ - int queue_index; - #ifdef DEBUG /* They're supposed to lock for us....
2012 Oct 16
6
[PATCH 1/5] virtio: move queue_index and num_free fields into core struct virtqueue.
...ndex e639584..335dcec 100644 --- a/drivers/virtio/virtio_ring.c +++ b/drivers/virtio/virtio_ring.c @@ -93,8 +93,6 @@ struct vring_virtqueue /* Host publishes avail event idx */ bool event; - /* Number of free buffers */ - unsigned int num_free; /* Head of free buffer list. */ unsigned int free_head; /* Number we've added since last sync. */ @@ -106,9 +104,6 @@ struct vring_virtqueue /* How to notify other side. FIXME: commonalize hcalls! */ void (*notify)(struct virtqueue *vq); - /* Index of the queue */ - int queue_index; - #ifdef DEBUG /* They're supposed to lock for us....
2018 Mar 16
2
[PATCH RFC 2/2] virtio_ring: support packed ring
...ate free pointer */ >>>>> + if (indirect) { >>>>> + n = head + 1; >>>>> + if (n >= vq->vring_packed.num) { >>>>> + n = 0; >>>>> + vq->wrap_counter ^= 1; >>>>> + } >>>>> + vq->free_head = n; >>>> detach_buf_packed() does not even touch free_head here, so need to explain >>>> its meaning for packed ring. >>> Above code is for indirect support which isn't really >>> implemented in this patch yet. >>> >>> For your questi...
2018 Mar 16
2
[PATCH RFC 2/2] virtio_ring: support packed ring
...ate free pointer */ >>>>> + if (indirect) { >>>>> + n = head + 1; >>>>> + if (n >= vq->vring_packed.num) { >>>>> + n = 0; >>>>> + vq->wrap_counter ^= 1; >>>>> + } >>>>> + vq->free_head = n; >>>> detach_buf_packed() does not even touch free_head here, so need to explain >>>> its meaning for packed ring. >>> Above code is for indirect support which isn't really >>> implemented in this patch yet. >>> >>> For your questi...
2014 Sep 03
0
[PATCH 3/3] virtio_ring: unify direct/indirect code paths.
...xt = i+1; - i++; - } - } - BUG_ON(i != total_sg); - - /* Last one doesn't continue. */ - desc[i-1].flags &= ~VRING_DESC_F_NEXT; - desc[i-1].next = 0; - - /* We're about to use a buffer */ - vq->vq.num_free--; - - /* Use a single buffer which doesn't continue */ - head = vq->free_head; - vq->vring.desc[head].flags = VRING_DESC_F_INDIRECT; - vq->vring.desc[head].addr = virt_to_phys(desc); - /* kmemleak gives a false positive, as it's hidden by virt_to_phys */ - kmemleak_ignore(desc); - vq->vring.desc[head].len = i * sizeof(struct vring_desc); - - /* Update free point...
2018 Mar 16
0
[PATCH RFC 2/2] virtio_ring: support packed ring
.../* Update free pointer */ > > > > + if (indirect) { > > > > + n = head + 1; > > > > + if (n >= vq->vring_packed.num) { > > > > + n = 0; > > > > + vq->wrap_counter ^= 1; > > > > + } > > > > + vq->free_head = n; > > > detach_buf_packed() does not even touch free_head here, so need to explain > > > its meaning for packed ring. > > Above code is for indirect support which isn't really > > implemented in this patch yet. > > > > For your question, free_head s...
2016 May 15
0
[PATCH] tools/virtio: add inorder option
...ER are mutually exclusive" +#endif /* how much padding is needed to avoid false cache sharing */ #define HOST_GUEST_PADDING 0x80 @@ -35,7 +43,11 @@ struct guest { unsigned short last_used_idx; unsigned short num_free; unsigned short kicked_avail_idx; +#ifndef INORDER unsigned short free_head; +#else + unsigned short reserved_free_head; +#endif unsigned char reserved[HOST_GUEST_PADDING - 10]; } guest; @@ -66,8 +78,10 @@ void alloc_ring(void) guest.avail_idx = 0; guest.kicked_avail_idx = -1; guest.last_used_idx = 0; +#ifndef INORDER /* Put everything in free lists. */ gues...
2016 May 15
0
[PATCH] tools/virtio: add inorder option
...ER are mutually exclusive" +#endif /* how much padding is needed to avoid false cache sharing */ #define HOST_GUEST_PADDING 0x80 @@ -35,7 +43,11 @@ struct guest { unsigned short last_used_idx; unsigned short num_free; unsigned short kicked_avail_idx; +#ifndef INORDER unsigned short free_head; +#else + unsigned short reserved_free_head; +#endif unsigned char reserved[HOST_GUEST_PADDING - 10]; } guest; @@ -66,8 +78,10 @@ void alloc_ring(void) guest.avail_idx = 0; guest.kicked_avail_idx = -1; guest.last_used_idx = 0; +#ifndef INORDER /* Put everything in free lists. */ gues...
2017 Jun 20
2
[PATCH v11 6/6] virtio-balloon: VIRTIO_BALLOON_F_CMD_VQ
On Fri, Jun 09, 2017 at 06:41:41PM +0800, Wei Wang wrote: > - if (!virtqueue_indirect_desc_table_add(vq, desc, num)) { > + if (!virtqueue_indirect_desc_table_add(vq, desc, *num)) { > virtqueue_kick(vq); > - wait_event(vb->acked, virtqueue_get_buf(vq, &len)); > - vb->balloon_page_chunk.chunk_num = 0; > + if (busy_wait) > + while (!virtqueue_get_buf(vq,
2017 Jun 20
2
[PATCH v11 6/6] virtio-balloon: VIRTIO_BALLOON_F_CMD_VQ
On Fri, Jun 09, 2017 at 06:41:41PM +0800, Wei Wang wrote: > - if (!virtqueue_indirect_desc_table_add(vq, desc, num)) { > + if (!virtqueue_indirect_desc_table_add(vq, desc, *num)) { > virtqueue_kick(vq); > - wait_event(vb->acked, virtqueue_get_buf(vq, &len)); > - vb->balloon_page_chunk.chunk_num = 0; > + if (busy_wait) > + while (!virtqueue_get_buf(vq,
2023 Mar 02
1
[PATCH vhost v1 01/12] virtio_ring: split: refactor virtqueue_add_split() for premapped
...); + unsigned int descs_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...
2018 Mar 16
0
[PATCH RFC 2/2] virtio_ring: support packed ring
...t) { > > > > > > + n = head + 1; > > > > > > + if (n >= vq->vring_packed.num) { > > > > > > + n = 0; > > > > > > + vq->wrap_counter ^= 1; > > > > > > + } > > > > > > + vq->free_head = n; > > > > > detach_buf_packed() does not even touch free_head here, so need to explain > > > > > its meaning for packed ring. > > > > Above code is for indirect support which isn't really > > > > implemented in this patch yet. > > &...
2014 Sep 05
1
[PATCH 3/3] virtio_ring: unify direct/indirect code paths.
...ext = i+1; > + return desc; > } Would it make sense to keep a cache of a few (say) 8- or 16-element indirect descriptors? You'd only have to do this ugly (and slowish) for loop on the first allocation. Also, since this is mostly an aesthetic patch, > + if (indirect) > + vq->free_head = vq->vring.desc[head].next; > + else > + vq->free_head = i; I'd move the indirect case above, where the vring.desc[head] is actually allocated. Paolo
2014 Sep 05
1
[PATCH 3/3] virtio_ring: unify direct/indirect code paths.
...ext = i+1; > + return desc; > } Would it make sense to keep a cache of a few (say) 8- or 16-element indirect descriptors? You'd only have to do this ugly (and slowish) for loop on the first allocation. Also, since this is mostly an aesthetic patch, > + if (indirect) > + vq->free_head = vq->vring.desc[head].next; > + else > + vq->free_head = i; I'd move the indirect case above, where the vring.desc[head] is actually allocated. Paolo
2014 Nov 27
0
[PATCH v6 09/46] virtio_ring: switch to new memory access APIs
...i = desc[i].next; + i = virtio16_to_cpu(_vq->vdev, desc[i].next); } } /* Last one doesn't continue. */ - desc[prev].flags &= ~VRING_DESC_F_NEXT; + desc[prev].flags &= cpu_to_virtio16(_vq->vdev, ~VRING_DESC_F_NEXT); /* Update free pointer */ if (indirect) - vq->free_head = vq->vring.desc[head].next; + vq->free_head = virtio16_to_cpu(_vq->vdev, vq->vring.desc[head].next); else vq->free_head = i; @@ -235,13 +236,13 @@ static inline int virtqueue_add(struct virtqueue *_vq, /* Put entry in available array (but don't update avail->idx u...