svn commit: r289834 - head/sys/x86/x86
Roger Pau Monné
roger.pau at citrix.com
Fri Oct 23 15:46:32 UTC 2015
El 23/10/15 a les 17.39, Roger Pau Monné ha escrit:
> Author: royger
> Date: Fri Oct 23 15:39:59 2015
> New Revision: 289834
> URL: https://svnweb.freebsd.org/changeset/base/289834
>
> Log:
> 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
Forgot to add:
MFC after: 2 weeks
Roger.
More information about the svn-src-all
mailing list