Port-arm archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
bus_dma issue with wm(4) on arm
Hi!
Due to rx performance issues with onboard awge(4) I tried to plug a PCI
express wm(4) card into an aarch64 host.
It hits a KASSERT in bus_dmamap_sync:
panic: kernel diagnostic assertion
"(va & PAGE_MASK) == (pa & PAGE_MASK)" failed:
file "/work/src/sys/arch/arm/arm32/bus_dma.c", line 811
va 0xffff0000ee2d2802 pa 0xee2d2800
_bus_dmamap_sync_segment.isra.3()
_bus_dmamap_sync_segment.isra.3+0x194
_bus_dmamap_sync()
wm_rxeof()
the 2 in the lower bits of the va comes from wm's sc_align_tweak:
wm_init_rxdesc() {
...
m->m_data = m->m_ext.ext_buf + sc->sc_align_tweak;
...
}
Setting sc_align_tweak to 0 does seem to make the problem go away.
Now the question is if this is a bug in wm(4) or in the MD bus_dma
implementation? I guess what happens is:
1) bus_dmamap_load_mbuf() sets up DMA segment
2) wm adjusts m_data
3) wm calls bus_dmamap_sync() but mbuf previously loaded and DMA
segment now point to slightly different locations
Kind regards,
-Tobias
Home |
Main Index |
Thread Index |
Old Index