mirror of
https://github.com/torvalds/linux.git
synced 2026-08-15 12:00:16 +02:00
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>
|
||
|---|---|---|
| .. | ||
| asp.c | ||
| ccio-dma.c | ||
| dino.c | ||
| eisa_eeprom.c | ||
| eisa_enumerator.c | ||
| eisa.c | ||
| gsc.c | ||
| gsc.h | ||
| hppb.c | ||
| iommu-helpers.h | ||
| iommu.h | ||
| iosapic_private.h | ||
| iosapic.c | ||
| Kconfig | ||
| lasi.c | ||
| lba_pci.c | ||
| led.c | ||
| Makefile | ||
| pdc_stable.c | ||
| power.c | ||
| README.dino | ||
| sba_iommu.c | ||
| superio.c | ||
| wax.c | ||
/* ** HP VISUALIZE Workstation PCI Bus Defect ** ** "HP has discovered a potential system defect that can affect ** the behavior of five models of HP VISUALIZE workstations when ** equipped with third-party or customer-installed PCI I/O expansion ** cards. The defect is limited to the HP C180, C160, C160L, B160L, ** and B132L VISUALIZE workstations, and will only be encountered ** when data is transmitted through PCI I/O expansion cards on the ** PCI bus. HP-supplied graphics cards that utilize the PCI bus are ** not affected." ** ** http://h20000.www2.hp.com/bizsupport/TechSupport/Home.jsp?locale=en_US&prodTypeId=12454&prodSeriesId=44443 ** ** Product First Good Serial Number ** C200/C240 (US) US67350000 **B132L+/B180 (US) US67390000 ** C200 (Europe) 3713G01000 ** B180L (Europe) 3720G01000 ** ** Note that many boards were fixed/replaced under a free replacement ** program. Assume a machine is only "suspect" until proven otherwise. ** ** "The pci_check program will also be available as application ** patch PHSS_12295" */