Xuan Zhuo
2023-Apr-11 06:11 UTC
[PATCH vhost v6 08/11] virtio_ring: introduce virtqueue_dma_dev()
On Tue, 11 Apr 2023 11:56:47 +0800, Jason Wang <jasowang at redhat.com> wrote:> On Tue, Apr 11, 2023 at 11:31?AM Christoph Hellwig <hch at infradead.org> wrote: > > > > On Tue, Apr 11, 2023 at 10:09:40AM +0800, Jason Wang wrote: > > > We want to support AF_XDP for virtio-net. It means AF_XDP needs to > > > know the dma device to perform DMA mapping. So we introduce a helper > > > to expose the dma dev of the virtio device. > > > > The whole virtio architecture is based around the core code doing > > the DMA mapping. I can't see how you can just export a helper to > > expose the dma device. You'd have to complete rework the layering > > of the virtio code if you want to do it in the upper level drivers. > > And why would you want to do this? The low-level code is the only > > piece that can actually know if you need to do a dma mapping. All > > the kernel subsystems that don't do it inside the low-level drivers > > or helpers closely associtated are a giant and hard to fix map > > (see usb for the prime exhibit). > > > > So the first question is: why do you want this for XF_ADP, > > Xuan, is it possible to set up the DMA mapping inside the virtio > driver itself? I vaguely remember at least the RX buffer mapping is > done by the driver. If this is true, we can avoid exposing DMA details > to the upper layer.NO, all dma maping is done inside xdp socket. That is done when setup. When adding to RX Ring, xdp socket will call DMA SYNC.> > > and > > the next question will be how to do that without making a complete > > mess. > > > > > This works fine as long as VIRTIO_F_ACCESS_PLATFORM is negotiated. But > > > when it is not, the virtio driver needs to use a physical address so > > > we want to expose the virtio device without dma_ops in the hope that > > > it will go for direct mapping where the physical address is used. But > > > it may not work on some specific setups (arches that assume an IOMMU > > > or have arch dma ops). > > > > The DMA device for virtio_pci is the underlying PCI device, always. > > !VIRTIO_F_ACCESS_PLATFORM means there is no dma device at all. Because > > of all these things you can't just expose a pointer to the dma_device > > as that is just a completely wrong way of thinking about the problem. > > Ok, so if there's no DMA at all we should avoid using the DMA API > completely. This means we should check dma_dev against NULL in > virtio_has_dma_quirk(). > > Thanks > > > > > _______________________________________________ > Virtualization mailing list > Virtualization at lists.linux-foundation.org > https://lists.linuxfoundation.org/mailman/listinfo/virtualization
Christoph Hellwig
2023-Apr-11 06:20 UTC
[PATCH vhost v6 08/11] virtio_ring: introduce virtqueue_dma_dev()
On Tue, Apr 11, 2023 at 02:11:17PM +0800, Xuan Zhuo wrote:> NO, all dma maping is done inside xdp socket. That is done > when setup.That is just completely broken, virtio or not. Highlevel code like sockets must never do dma mappings themselves.