linux/arch/s390/pci
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
..
Makefile s390/pci: create zPCI bus 2020-04-28 13:49:46 +02:00
pci_bus.c s390/pci: fix PF/VF linking on hot plug 2020-08-17 13:17:34 +02:00
pci_bus.h s390/pci: fix PF/VF linking on hot plug 2020-08-17 13:17:34 +02:00
pci_clp.c s390/pci: Log new handle in clp_disable_fh() 2020-05-28 12:26:03 +02:00
pci_debug.c locking/atomic, s390/pci: Remove redundant casts 2019-06-03 12:32:57 +02:00
pci_dma.c dma-mapping: introduce dma_get_seg_boundary_nr_pages() 2020-09-03 18:12:15 +02:00
pci_event.c s390/pci: re-introduce zpci_remove_device() 2020-08-17 13:17:25 +02:00
pci_insn.c s390/pci: provide support for MIO instructions 2019-04-29 10:47:01 +02:00
pci_irq.c s390/pci: do not set affinity for floating irqs 2020-04-22 16:20:55 +02:00
pci_mmio.c s390/pci: clarify comment in s390_mmio_read/write 2020-07-27 10:33:24 +02:00
pci_sysfs.c s390/pci: create zPCI bus 2020-04-28 13:49:46 +02:00
pci.c s390/pci: fix PF/VF linking on hot plug 2020-08-17 13:17:34 +02:00