CVSROOT: /cvs Module name: src Changes by: d...@cvs.openbsd.org 2015/01/25 04:36:41
Modified files: sys/arch/landisk/landisk: bus_dma.c Log message: refactor loading of dmamaps. bus_dmama_load and bus_dmamap_load mbuf figure out the physical addresses of the memory theyre given and then hand it to _bus_dmamap_load_paddr to store in the dmamaps sg lists. unfortunately bus_dmamap_load_mbuf assumes it is only given memory from the kernels direct mapped region, and blindly translates anything its given into phys addresses to hand to _load_paddr. i recently committed change to pool asking them to allocate large pages, which meant uvm allocated mbufs outside the direct map, which meant bus_dmamap_load_mbuf was handing out bogus physical addresses. the pool change got backed out until i could debug this. now _load and _load_mbuf now call _bus_dmamap_load_vaddr for every buffer theyve been given, which properly determines if the addresses are in the direct map or via the tlb. _load_vaddr then feeds the physical addresses into _bus_dmamap_load_paddr to store them in the dmamap. tldr; _load_mbuf doesnt make naive assumptions about its addresses now. ok miod@ kettenis@