Messages in this thread | | | Subject | Re: [RFC v4 3/5] virtio_ring: add packed ring support | From | Jason Wang <> | Date | Wed, 16 May 2018 20:51:43 +0800 |
| |
On 2018年05月16日 20:39, Tiwei Bie wrote: > On Wed, May 16, 2018 at 07:50:16PM +0800, Jason Wang wrote: >> On 2018年05月16日 16:37, Tiwei Bie wrote: > [...] >>> struct vring_virtqueue { >>> @@ -116,6 +117,9 @@ struct vring_virtqueue { >>> /* Last written value to driver->flags in >>> * guest byte order. */ >>> u16 event_flags_shadow; >>> + >>> + /* ID allocation. */ >>> + struct idr buffer_id; >> I'm not sure idr is fit for the performance critical case here. Need to >> measure its performance impact, especially if we have few unused slots. > I'm also not sure.. But fortunately, it should be quite easy > to replace it with something else without changing other code. > If it will really hurt the performance, I'll change it.
We may want to do some benchmarking/profiling to see.
> >>> }; >>> }; > [...] >>> +static void detach_buf_packed(struct vring_virtqueue *vq, unsigned int head, >>> + unsigned int id, void **ctx) >>> +{ >>> + struct vring_packed_desc *desc; >>> + unsigned int i, j; >>> + >>> + /* Clear data ptr. */ >>> + vq->desc_state[id].data = NULL; >>> + >>> + i = head; >>> + >>> + for (j = 0; j < vq->desc_state[id].num; j++) { >>> + desc = &vq->vring_packed.desc[i]; >>> + vring_unmap_one_packed(vq, desc); >> As mentioned in previous discussion, this probably won't work for the case >> of out of order completion since it depends on the information in the >> descriptor ring. We probably need to extend ctx to record such information. > Above code doesn't depend on the information in the descriptor > ring. The vq->desc_state[] is the extended ctx. > > Best regards, > Tiwei Bie
Yes, but desc is a pointer to descriptor ring I think so vring_unmap_one_packed() still depends on the content of descriptor ring?
Thanks
| |