NetBSD-Bugs archive

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

Re: kern/60144: virtio(4) cache coherence issue



At Mon, 30 Mar 2026 03:47:22 +0000,
Taylor R Campbell wrote:
> > I think that vq_sync_uring_header(sc, vq, BUS_DMASYNC_PREREAD) is
> > necessary to invalidate the cache line before reading fresh
> > vq->vq_used->idx (at line 610) ?
> 
> I believe you have got the usage model of the preread vs postread
> wrong -- it is confusing, because `PREREAD' does not mean `before we
> read from the buffer' but rather `before the device does a DMA read
> operation to initialize the buffer'.
(snip)

Thank you for explanation!
It's confusing...

> If some kind of cache invalidation must happen between the interrupt
> delivery or DMA_STATUS_REG read at (3), and the use of the data in the
> buffer at (5), then the m68k and virt68k bus_dmamap_sync logic might
> be missing something for BUS_DMAMAP_POSTREAD -- it seems to have cases
> only for BUS_DMAMAP_PREWRITE and BUS_DMAMAP_PREREAD:
> 
> https://nxr.NetBSD.org/xref/src/sys/arch/m68k/m68k/bus_dma.c?r=1.41#491
> https://nxr.NetBSD.org/xref/src/sys/arch/virt68k/virt68k/bus_dma.c?r=1.4#476
> 
> Perhaps m68k needs new POSTREAD logic to be written, or perhaps there
> was a mistake and the PREREAD logic should have been for POSTREAD?

Hmm, that's it... Thanks!

sys/arch/virt68k/virt68k/bus_dma.c:
  429 void
  430 _bus_dmamap_sync_030(bus_dma_tag_t t, bus_dmamap_t map, bus_addr_t offset,
  431     bus_size_t len, int ops)
  432 {
  433
  434     /* Nothing yet */
  435 }

I try to implement (and test) it.
Or would someone take this?
---
Tetsuya Isaki <isaki%pastel-flower.jp@localhost / isaki%NetBSD.org@localhost>



Home | Main Index | Thread Index | Old Index