Messages in this thread Patch in this message | | | Date | Thu, 28 Jan 2021 19:15:57 +0100 | From | Christoph Hellwig <> | Subject | Re: [PATCH 1/3] Adding page_offset_mask to device_dma_parameters |
| |
On Thu, Jan 28, 2021 at 05:27:25PM +0000, Robin Murphy wrote: > On 2021-01-28 00:38, Jianxiong Gao wrote: >> Some devices rely on the address offset in a page to function >> correctly (NVMe driver as an example). These devices may use >> a different page size than the Linux kernel. The address offset >> has to be preserved upon mapping, and in order to do so, we >> need to record the page_offset_mask first. >> >> Signed-off-by: Jianxiong Gao <jxgao@google.com> >> --- >> include/linux/device.h | 1 + >> include/linux/dma-mapping.h | 17 +++++++++++++++++ >> 2 files changed, 18 insertions(+) >> >> diff --git a/include/linux/device.h b/include/linux/device.h >> index 1779f90eeb4c..f44e0659fc66 100644 >> --- a/include/linux/device.h >> +++ b/include/linux/device.h >> @@ -292,6 +292,7 @@ struct device_dma_parameters { >> */ >> unsigned int max_segment_size; >> unsigned long segment_boundary_mask; >> + unsigned int page_offset_mask; > > Could we call this something more like "min_align_mask" (sorry, I can't > think of a name that's actually good and descriptive right now). > Essentially I worry that having "page" in there is going to be too easy to > misinterpret as having anything to do what "page" means almost everywhere > else (even before you throw IOMMU pages into the mix). > > Also note that of all the possible ways to pack two ints and a long, this > one is the worst ;)
The block layer uses virt_boundary for the related concept, but that is pretty horrible too.
| |