On Wed, 6 Nov 2024 09:44:39 +0800, Jason Wang <jasowang@xxxxxxxxxx> wrote: > On Tue, Nov 5, 2024 at 2:53 PM Xuan Zhuo <xuanzhuo@xxxxxxxxxxxxxxxxx> wrote: > > > > On Tue, 5 Nov 2024 11:42:09 +0800, Jason Wang <jasowang@xxxxxxxxxx> wrote: > > > On Wed, Oct 30, 2024 at 4:25 PM Xuan Zhuo <xuanzhuo@xxxxxxxxxxxxxxxxx> wrote: > > > > > > > > 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@xxxxxxxxxxxxxxxxx> > > > > --- > > > > drivers/virtio/virtio_ring.c | 112 ++++++++++++++++------------------- > > > > 1 file changed, 52 insertions(+), 60 deletions(-) > > > > > > Do we have a performance impact for this patch? > > > > > > > > > > > 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. > > > > > > > > > > > }; > > > > > > [...] > > > > > 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. I see, we can do it in future. Thanks. > > Thanks >