RE: [PATCH vhost] virtio_ring: fix syncs DMA memory with different direction

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




> From: Xuan Zhuo <xuanzhuo@xxxxxxxxxxxxxxxxx>
> Sent: Friday, December 1, 2023 9:03 AM
>
> Now the APIs virtqueue_dma_sync_single_range_for_{cpu,device} ignore the
> parameter 'dir', that is a mistake.
>
> [    6.101666] ------------[ cut here ]------------
> [    6.102079] DMA-API: virtio-pci 0000:00:04.0: device driver syncs DMA
> memory with different direction [device address=0x00000000ae010000]
> [size=32752 bytes] [mapped with DMA_FROM_DEVICE] [synced with
> DMA_BIDIRECTIONAL]
> [    6.103630] WARNING: CPU: 6 PID: 0 at kernel/dma/debug.c:1125
> check_sync+0x53e/0x6c0
> [    6.107420] CPU: 6 PID: 0 Comm: swapper/6 Tainted: G            E      6.6.0+
> #290
> [    6.108030] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS
> rel-1.16.0-0-gd239552ce722-prebuilt.qemu.org 04/01/2014
> [    6.108936] RIP: 0010:check_sync+0x53e/0x6c0
> [    6.109289] Code: 24 10 e8 f5 d9 74 00 4c 8b 4c 24 10 4c 8b 44 24 18 48 8b
> 4c 24 20 48 89 c6 41 56 4c 89 ea 48 c7 c7 b0 f1 50 82 e8 32 fc f3 ff <0f> 0b 48
> c7 c7 48 4b 4a 82 e8 74 d9 fc ff 8b 73 4c 48 8d 7b 50 31
> [    6.110750] RSP: 0018:ffffc90000180cd8 EFLAGS: 00010092
> [    6.111178] RAX: 00000000000000ce RBX: ffff888100aa5900 RCX:
> 0000000000000000
> [    6.111744] RDX: 0000000000000104 RSI: ffffffff824c3208 RDI:
> 00000000ffffffff
> [    6.112316] RBP: ffffc90000180d40 R08: 0000000000000000 R09:
> 00000000fffeffff
> [    6.112893] R10: ffffc90000180b98 R11: ffffffff82f63308 R12: ffffffff83d5af00
> [    6.113460] R13: ffff888100998200 R14: ffffffff824a4b5f R15:
> 0000000000000286
> [    6.114027] FS:  0000000000000000(0000) GS:ffff88842fd80000(0000)
> knlGS:0000000000000000
> [    6.114665] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> [    6.115128] CR2: 00007f10f1e03030 CR3: 0000000108272004 CR4:
> 0000000000770ee0
> [    6.115701] DR0: 0000000000000000 DR1: 0000000000000000 DR2:
> 0000000000000000
> [    6.116272] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7:
> 0000000000000400
> [    6.116842] PKRU: 55555554
> [    6.117069] Call Trace:
> [    6.117275]  <IRQ>
> [    6.117452]  ? __warn+0x84/0x140
> [    6.117727]  ? check_sync+0x53e/0x6c0
> [    6.118034]  ? __report_bug+0xea/0x100
> [    6.118353]  ? check_sync+0x53e/0x6c0
> [    6.118653]  ? report_bug+0x41/0xc0
> [    6.118944]  ? handle_bug+0x3c/0x70
> [    6.119237]  ? exc_invalid_op+0x18/0x70
> [    6.119551]  ? asm_exc_invalid_op+0x1a/0x20
> [    6.119900]  ? check_sync+0x53e/0x6c0
> [    6.120199]  ? check_sync+0x53e/0x6c0
> [    6.120499]  debug_dma_sync_single_for_cpu+0x5c/0x70
> [    6.120906]  ? dma_sync_single_for_cpu+0xb7/0x100
> [    6.121291]  virtnet_rq_unmap+0x158/0x170 [virtio_net]
> [    6.121716]  virtnet_receive+0x196/0x220 [virtio_net]
> [    6.122135]  virtnet_poll+0x48/0x1b0 [virtio_net]
> [    6.122524]  __napi_poll+0x29/0x1b0
> [    6.123083]  net_rx_action+0x282/0x360
> [    6.123612]  __do_softirq+0xf3/0x2fb
> [    6.124138]  __irq_exit_rcu+0x8e/0xf0
> [    6.124663]  common_interrupt+0xbc/0xe0
> [    6.125202]  </IRQ>
>
> We need to enable CONFIG_DMA_API_DEBUG and work with need sync
> mode(such as swiotlb) to reproduce this warn.
>
> Fixes: 8bd2f71054bd ("virtio_ring: introduce dma sync api for virtqueue")
> Reported-by: "Ning, Hongyu" <hongyu.ning@xxxxxxxxxxxxxxx>
> Closes:
> https://lore.k/
> ernel.org%2Fall%2Ff37cb55a-6fc8-4e21-8789-
> 46d468325eea%40linux.intel.com%2F&data=05%7C01%7Cparav%40nvidia.co
> m%7C97b0fd5c2bb445e452ce08dbf21e45dd%7C43083d15727340c1b7db39e
> fd9ccc17a%7C0%7C0%7C638369984097407804%7CUnknown%7CTWFpbGZs
> b3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn
> 0%3D%7C3000%7C%7C%7C&sdata=JGLTh%2B0zAW9bAI7tNEEOUlBVvDgM15
> vmAKGtkELCB%2BI%3D&reserved=0
> Suggested-by: Jason Wang <jasowang@xxxxxxxxxx>
> Signed-off-by: Xuan Zhuo <xuanzhuo@xxxxxxxxxxxxxxxxx>
> ---
>  drivers/virtio/virtio_ring.c | 6 ++----
>  1 file changed, 2 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c index
> 51d8f3299c10..49299b1f9ec7 100644
> --- a/drivers/virtio/virtio_ring.c
> +++ b/drivers/virtio/virtio_ring.c
> @@ -3219,8 +3219,7 @@ void
> virtqueue_dma_sync_single_range_for_cpu(struct virtqueue *_vq,
>       if (!vq->use_dma_api)
>               return;
>
> -     dma_sync_single_range_for_cpu(dev, addr, offset, size,
> -                                   DMA_BIDIRECTIONAL);
> +     dma_sync_single_range_for_cpu(dev, addr, offset, size, dir);
>  }
>  EXPORT_SYMBOL_GPL(virtqueue_dma_sync_single_range_for_cpu);
>
> @@ -3246,8 +3245,7 @@ void
> virtqueue_dma_sync_single_range_for_device(struct virtqueue *_vq,
>       if (!vq->use_dma_api)
>               return;
>
> -     dma_sync_single_range_for_device(dev, addr, offset, size,
> -                                      DMA_BIDIRECTIONAL);
> +     dma_sync_single_range_for_device(dev, addr, offset, size, dir);
>  }
>  EXPORT_SYMBOL_GPL(virtqueue_dma_sync_single_range_for_device);
>
> --
> 2.32.0.3.g01195cf9f
>
Reviewed-by: Parav Pandit <parav@xxxxxxxxxx>





[Index of Archives]     [KVM Development]     [Libvirt Development]     [Libvirt Users]     [CentOS Virtualization]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux