Message ID | 20240130114224.86536-1-xuanzhuo@linux.alibaba.com (mailing list archive) |
---|---|
Headers | show |
Series | virtio: drivers maintain dma info for premapped vq | expand |
在 2024/1/30 19:42, Xuan Zhuo 写道: > As discussed: > http://lore.kernel.org/all/CACGkMEvq0No8QGC46U4mGsMtuD44fD_cfLcPaVmJ3rHYqRZxYg@mail.gmail.com > > If the virtio is premapped mode, the driver should manage the dma info by self. > So the virtio core should not store the dma info. > So we can release the memory used to store the dma info. > > But if the desc_extra has not dma info, we face a new question, > it is hard to get the dma info of the desc with indirect flag. > For split mode, that is easy from desc, but for the packed mode, > it is hard to get the dma info from the desc. And for hardening > the dma unmap is saft, we should store the dma info of indirect > descs. > > So I introduce the "structure the indirect desc table" to > allocate space to store dma info with the desc table. > > On the other side, we mix the descs with indirect flag > with other descs together to share the unmap api. That > is complex. I found if we we distinguish the descs with > VRING_DESC_F_INDIRECT before unmap, thing will be clearer. > > Because of the dma array is allocated in the find_vqs(), > so I introduce a new parameter to find_vqs(). > > Please review. > > Thanks > > Xuan Zhuo (17): > virtio_ring: introduce vring_need_unmap_buffer > virtio_ring: packed: remove double check of the unmap ops > virtio_ring: packed: structure the indirect desc table > virtio_ring: split: remove double check of the unmap ops > virtio_ring: split: structure the indirect desc table > virtio_ring: no store dma info when unmap is not needed > virtio: find_vqs: pass struct instead of multi parameters > virtio: vring_new_virtqueue(): pass struct instead of multi parameters > virtio_ring: reuse the parameter struct of find_vqs() > virtio: find_vqs: add new parameter premapped > virtio_ring: export premapped to driver by struct virtqueue > virtio_net: set premapped mode by find_vqs() > virtio_ring: remove api of setting vq premapped > virtio_ring: introduce dma map api for page > virtio_net: unify the code for recycling the xmit ptr > virtio_net: rename free_old_xmit_skbs to free_old_xmit > virtio_net: sq support premapped mode The above can not be cleanly merged into kernel 6.8-rc2. Perhaps a base-commit is needed. About base-commit, please see the link https://people.kernel.org/monsieuricon/all-patches-must-include-base-commit-info Zhu Yanjun > > arch/um/drivers/virtio_uml.c | 29 +- > drivers/net/virtio_net.c | 298 +++++++--- > drivers/platform/mellanox/mlxbf-tmfifo.c | 24 +- > drivers/remoteproc/remoteproc_virtio.c | 31 +- > drivers/s390/virtio/virtio_ccw.c | 33 +- > drivers/virtio/virtio_mmio.c | 30 +- > drivers/virtio/virtio_pci_common.c | 59 +- > drivers/virtio/virtio_pci_common.h | 9 +- > drivers/virtio/virtio_pci_legacy.c | 16 +- > drivers/virtio/virtio_pci_modern.c | 24 +- > drivers/virtio/virtio_ring.c | 660 ++++++++++++----------- > drivers/virtio/virtio_vdpa.c | 33 +- > include/linux/virtio.h | 10 +- > include/linux/virtio_config.h | 48 +- > include/linux/virtio_ring.h | 82 +-- > tools/virtio/virtio_test.c | 4 +- > tools/virtio/vringh_test.c | 32 +- > 17 files changed, 812 insertions(+), 610 deletions(-) > > -- > 2.32.0.3.g01195cf9f >
On Thu, 1 Feb 2024 15:43:51 +0800, Zhu Yanjun <yanjun.zhu@linux.dev> wrote: > 在 2024/1/30 19:42, Xuan Zhuo 写道: > > As discussed: > > http://lore.kernel.org/all/CACGkMEvq0No8QGC46U4mGsMtuD44fD_cfLcPaVmJ3rHYqRZxYg@mail.gmail.com > > > > If the virtio is premapped mode, the driver should manage the dma info by self. > > So the virtio core should not store the dma info. > > So we can release the memory used to store the dma info. > > > > But if the desc_extra has not dma info, we face a new question, > > it is hard to get the dma info of the desc with indirect flag. > > For split mode, that is easy from desc, but for the packed mode, > > it is hard to get the dma info from the desc. And for hardening > > the dma unmap is saft, we should store the dma info of indirect > > descs. > > > > So I introduce the "structure the indirect desc table" to > > allocate space to store dma info with the desc table. > > > > On the other side, we mix the descs with indirect flag > > with other descs together to share the unmap api. That > > is complex. I found if we we distinguish the descs with > > VRING_DESC_F_INDIRECT before unmap, thing will be clearer. > > > > Because of the dma array is allocated in the find_vqs(), > > so I introduce a new parameter to find_vqs(). > > > > Please review. > > > > Thanks > > > > Xuan Zhuo (17): > > virtio_ring: introduce vring_need_unmap_buffer > > virtio_ring: packed: remove double check of the unmap ops > > virtio_ring: packed: structure the indirect desc table > > virtio_ring: split: remove double check of the unmap ops > > virtio_ring: split: structure the indirect desc table > > virtio_ring: no store dma info when unmap is not needed > > virtio: find_vqs: pass struct instead of multi parameters > > virtio: vring_new_virtqueue(): pass struct instead of multi parameters > > virtio_ring: reuse the parameter struct of find_vqs() > > virtio: find_vqs: add new parameter premapped > > virtio_ring: export premapped to driver by struct virtqueue > > virtio_net: set premapped mode by find_vqs() > > virtio_ring: remove api of setting vq premapped > > virtio_ring: introduce dma map api for page > > virtio_net: unify the code for recycling the xmit ptr > > virtio_net: rename free_old_xmit_skbs to free_old_xmit > > virtio_net: sq support premapped mode > > The above can not be cleanly merged into kernel 6.8-rc2. > > Perhaps a base-commit is needed. About base-commit, please see the link > https://people.kernel.org/monsieuricon/all-patches-must-include-base-commit-info The target branch is Michael's vhost. https://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost.git/log/?h=linux-next Thanks. > > Zhu Yanjun > > > > > arch/um/drivers/virtio_uml.c | 29 +- > > drivers/net/virtio_net.c | 298 +++++++--- > > drivers/platform/mellanox/mlxbf-tmfifo.c | 24 +- > > drivers/remoteproc/remoteproc_virtio.c | 31 +- > > drivers/s390/virtio/virtio_ccw.c | 33 +- > > drivers/virtio/virtio_mmio.c | 30 +- > > drivers/virtio/virtio_pci_common.c | 59 +- > > drivers/virtio/virtio_pci_common.h | 9 +- > > drivers/virtio/virtio_pci_legacy.c | 16 +- > > drivers/virtio/virtio_pci_modern.c | 24 +- > > drivers/virtio/virtio_ring.c | 660 ++++++++++++----------- > > drivers/virtio/virtio_vdpa.c | 33 +- > > include/linux/virtio.h | 10 +- > > include/linux/virtio_config.h | 48 +- > > include/linux/virtio_ring.h | 82 +-- > > tools/virtio/virtio_test.c | 4 +- > > tools/virtio/vringh_test.c | 32 +- > > 17 files changed, 812 insertions(+), 610 deletions(-) > > > > -- > > 2.32.0.3.g01195cf9f > > >