On Wed, Mar 27, 2024 at 7:14 PM Xuan Zhuo <xuanzhuo@xxxxxxxxxxxxxxxxx> wrote: > > As discussed: > http://lore.kernel.org/all/CACGkMEug-=C+VQhkMYSgUKMC==04m7-uem_yC21bgGkKZh845w@xxxxxxxxxxxxxx > > When the vq is premapped mode, the driver manages the dma > info is a good way. > > So this commit make the virtio core not to store the dma > info and release the memory which is used to store the dma > info. > > If the use_dma_api is false, the memory is also not allocated. > > Signed-off-by: Xuan Zhuo <xuanzhuo@xxxxxxxxxxxxxxxxx> > --- > drivers/virtio/virtio_ring.c | 120 ++++++++++++++++++++++++++++------- > 1 file changed, 97 insertions(+), 23 deletions(-) > > diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c > index 1f7c96543d58..08e4f6e1d722 100644 > --- a/drivers/virtio/virtio_ring.c > +++ b/drivers/virtio/virtio_ring.c > @@ -69,23 +69,26 @@ > > struct vring_desc_state_split { > void *data; /* Data for callback. */ > - struct vring_desc_extra *indir_desc; /* Indirect descriptor, if any. */ > + struct vring_desc_dma *indir_desc; /* Indirect descriptor, if any. */ > }; > > struct vring_desc_state_packed { > void *data; /* Data for callback. */ > - struct vring_desc_extra *indir_desc; /* Indirect descriptor, if any. */ > + struct vring_desc_dma *indir_desc; /* Indirect descriptor, if any. */ > u16 num; /* Descriptor list length. */ > u16 last; /* The last desc state in a list. */ > }; > > struct vring_desc_extra { > - dma_addr_t addr; /* Descriptor DMA addr. */ > - u32 len; /* Descriptor length. */ > u16 flags; /* Descriptor flags. */ > u16 next; /* The next desc state in a list. */ > }; > > +struct vring_desc_dma { > + dma_addr_t addr; /* Descriptor DMA addr. */ > + u32 len; /* Descriptor length. */ This seems to be odd, flag should be part of dma info. To reduce the changeset, I would split out next. Thank