linux/arch/ia64
Nicolin Chen 1e9d90dbed dma-mapping: introduce dma_get_seg_boundary_nr_pages()
We found that callers of dma_get_seg_boundary mostly do an ALIGN
with page mask and then do a page shift to get number of pages:
    ALIGN(boundary + 1, 1 << shift) >> shift

However, the boundary might be as large as ULONG_MAX, which means
that a device has no specific boundary limit. So either "+ 1" or
passing it to ALIGN() would potentially overflow.

According to kernel defines:
    #define ALIGN_MASK(x, mask) (((x) + (mask)) & ~(mask))
    #define ALIGN(x, a)	ALIGN_MASK(x, (typeof(x))(a) - 1)

We can simplify the logic here into a helper function doing:
  ALIGN(boundary + 1, 1 << shift) >> shift
= ALIGN_MASK(b + 1, (1 << s) - 1) >> s
= {[b + 1 + (1 << s) - 1] & ~[(1 << s) - 1]} >> s
= [b + 1 + (1 << s) - 1] >> s
= [b + (1 << s)] >> s
= (b >> s) + 1

This patch introduces and applies dma_get_seg_boundary_nr_pages()
as an overflow-free helper for the dma_get_seg_boundary() callers
to get numbers of pages. It also takes care of the NULL dev case
for non-DMA API callers.

Suggested-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Nicolin Chen <nicoleotsuka@gmail.com>
Acked-by: Niklas Schnelle <schnelle@linux.ibm.com>
Acked-by: Michael Ellerman <mpe@ellerman.id.au> (powerpc)
Signed-off-by: Christoph Hellwig <hch@lst.de>
2020-09-03 18:12:15 +02:00
..
configs Char/Misc driver patches for 5.7-rc1 2020-04-03 13:22:40 -07:00
hp/common dma-mapping: introduce dma_get_seg_boundary_nr_pages() 2020-09-03 18:12:15 +02:00
include arch/ia64: Restore arch-specific pgd_offset_k implementation 2020-08-17 21:50:54 +03:00
kernel treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
lib fix a braino in ia64 uaccess csum changes 2020-06-03 16:18:09 -04:00
mm mm/ia64: use general page fault accounting 2020-08-12 10:58:03 -07:00
oprofile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
pci ia64: remove support for machvecs 2019-08-16 14:32:26 -07:00
scripts ia64: convert unwcheck.py to python3 2018-03-05 14:35:01 -08:00
uv ia64: remove support for machvecs 2019-08-16 14:32:26 -07:00
install.sh
Kconfig dma-mapping: make support for dma ops optional 2020-07-19 09:29:23 +02:00
Kconfig.debug ia64: remove support for machvecs 2019-08-16 14:32:26 -07:00
Makefile kbuild: fix broken builds because of GZIP,BZIP2,LZOP variables 2020-06-11 20:14:41 +09:00
module.lds License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00