Re: [PATCH net-next v2 02/13] virtio_ring: split: record extras for indirect buffers
From: Jason Wang <jasowang@redhat.com>
Date: 2024-11-06 01:44:54
Also in:
bpf, virtualization
On Tue, Nov 5, 2024 at 2:53 PM Xuan Zhuo [off-list ref] wrote:
On Tue, 5 Nov 2024 11:42:09 +0800, Jason Wang [off-list ref] wrote:quoted
On Wed, Oct 30, 2024 at 4:25 PM Xuan Zhuo [off-list ref] wrote:quoted
The subsequent commit needs to know whether every indirect buffer is premapped or not. So we need to introduce an extra struct for every indirect buffer to record this info. Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com> --- drivers/virtio/virtio_ring.c | 112 ++++++++++++++++------------------- 1 file changed, 52 insertions(+), 60 deletions(-)Do we have a performance impact for this patch?quoted
diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c index 97590c201aa2..dca093744fe1 100644 --- a/drivers/virtio/virtio_ring.c +++ b/drivers/virtio/virtio_ring.c@@ -69,7 +69,11 @@ struct vring_desc_state_split { void *data; /* Data for callback. */ - struct vring_desc *indir_desc; /* Indirect descriptor, if any. */ + + /* Indirect extra table and desc table, if any. These two will be + * allocated together. So we won't stress more to the memory allocator. + */ + struct vring_desc *indir_desc;So it looks like we put a descriptor table after the extra table. Can this lead to more crossing page mappings for the indirect descriptors? If yes, it seems expensive so we probably need to make the descriptor table come first.No, the descriptors are before extra table.
Well, you need then tweak the above comment, it said "Indirect extra table and desc table".
So, there is not performance impact.quoted
quoted
};
[...]
quoted
quoted
while (vq->split.vring.desc[i].flags & nextflag) { - vring_unmap_one_split(vq, i); + vring_unmap_one_split(vq, &extra[i]);Not sure if I've asked this before. But this part seems to deserve an independent fix for -stable.What fix?
I meant for hardening we need to check the flags stored in the extra instead of the descriptor itself as it could be mangled by the device. Thanks