mirror of https://gitee.com/openkylin/linux.git
ARM: dma-api: fix off-by-one error in __dma_supported()
When validating the mask against the amount of memory we have available (so that we can trap 32-bit DMA addresses with >32-bits memory), we had not taken account of the fact that max_pfn is the maximum PFN number plus one that would be in the system. There are several references in the code which bear this out: mm/page_owner.c: for (; pfn < max_pfn; pfn++) { } arch/x86/kernel/setup.c: high_memory = (void *)__va(max_pfn * PAGE_SIZE - 1) Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
c517d838eb
commit
8bf1268f48
|
@ -171,7 +171,7 @@ static int __dma_supported(struct device *dev, u64 mask, bool warn)
|
||||||
*/
|
*/
|
||||||
if (sizeof(mask) != sizeof(dma_addr_t) &&
|
if (sizeof(mask) != sizeof(dma_addr_t) &&
|
||||||
mask > (dma_addr_t)~0 &&
|
mask > (dma_addr_t)~0 &&
|
||||||
dma_to_pfn(dev, ~0) < max_pfn) {
|
dma_to_pfn(dev, ~0) < max_pfn - 1) {
|
||||||
if (warn) {
|
if (warn) {
|
||||||
dev_warn(dev, "Coherent DMA mask %#llx is larger than dma_addr_t allows\n",
|
dev_warn(dev, "Coherent DMA mask %#llx is larger than dma_addr_t allows\n",
|
||||||
mask);
|
mask);
|
||||||
|
|
Loading…
Reference in New Issue