summaryrefslogtreecommitdiffstats
path: root/sbin/sysctl
diff options
context:
space:
mode:
authorroyger <royger@FreeBSD.org>2015-10-23 15:39:59 +0000
committerroyger <royger@FreeBSD.org>2015-10-23 15:39:59 +0000
commitc24a22103b562414262f25bf5a00d62fcfdbf28a (patch)
treebf17f8dd710ed5ad42bec7f409bd6b853488b280 /sbin/sysctl
parentc9a1277fcf843fdfd32ade76c187d1ac052bdbfa (diff)
downloadFreeBSD-src-c24a22103b562414262f25bf5a00d62fcfdbf28a.zip
FreeBSD-src-c24a22103b562414262f25bf5a00d62fcfdbf28a.tar.gz
x86/dma_bounce: rework _bus_dmamap_load_ma implementation
The implementation of bus_dmamap_load_ma_triv currently calls _bus_dmamap_load_phys on each page that is part of the passed in buffer. Since each page is treated as an individual buffer, the resulting behaviour is different from the behaviour of _bus_dmamap_load_buffer. This breaks certain drivers, like Xen blkfront. If an unmapped buffer of size 4096 that starts at offset 13 into the first page is passed to the current _bus_dmamap_load_ma implementation (so the ma array contains two pages), the result is that two segments are created, one with a size of 4083 and the other with size 13 (because two independant calls to _bus_dmamap_load_phys are performed, one for each physical page). If the same is done with a mapped buffer and calling _bus_dmamap_load_buffer the result is that only one segment is created, with a size of 4096. This patch relegates the usage of bus_dmamap_load_ma_triv in x86 bounce buffer code to drivers requesting BUS_DMA_KEEP_PG_OFFSET and implements _bus_dmamap_load_ma so that it's behaviour is the same as the mapped version (_bus_dmamap_load_buffer). This patch only modifies the x86 bounce buffer code, other arches are left untouched. Reviewed by: kib, jah Differential Revision: https://reviews.freebsd.org/D888 Sponsored by: Citrix Systems R&D
Diffstat (limited to 'sbin/sysctl')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud