On Mon, 17 Apr 2023 18:19:50 -0700, Jakub Kicinski <kuba@xxxxxxxxxx> wrote: > On Tue, 18 Apr 2023 09:07:30 +0800 Jason Wang wrote: > > > > Would you mind explaining this a bit more to folks like me who are not > > > > familiar with VirtIO? DMA API is supposed to hide the DMA mapping > > > > details from the stack, why is it not sufficient here. > > > > The reason is that legacy virtio device don't use DMA(vring_use_dma_api()). > > > > The AF_XDP assumes DMA for netdev doesn't work in this case. We need a > > way to make it work. > > Can we not push this down to be bus level? virtio has its own bus it > can plug in whatever magic it wants into dma ops. It is actually not possible. [1] https://lore.kernel.org/virtualization/ZDUCDeYLqAwQVJe7@xxxxxxxxxxxxx/ > > Doesn't have to be super fast for af_xdp's sake - for af_xdp dma mapping > is on the control path. You can keep using the if (vring_use_dma_api()) > elsewhere for now if there is a perf concern. Sorry, I don't particularly understand this passage. Now, the question is if vring_use_dma_api() is false, then we cannot use DMA API in AF_XDP. The good news is that except for some of sync's operations, they are in the control path. I think it is very small effect on performance. Because in most case the sync is unnecessary. > > Otherwise it really seems like we're bubbling up a virtio hack into > generic code :( Can we understand the purpose of this matter to back the DMA operation to the driver? Although I don't know if there are other drivers with similar requirements. Thanks.