ARM: use ARM_DMA_ZONE_SIZE to adjust the zone sizes
Rather than each platform providing its own function to adjust the zone sizes, use the new ARM_DMA_ZONE_SIZE definition to perform this adjustment. This ensures that the actual DMA zone size and the ISA_DMA_THRESHOLD/MAX_DMA_ADDRESS definitions are consistent with each other, and moves this complexity out of the platform code. Acked-by: Nicolas Pitre <nicolas.pitre@linaro.org> Acked-by: Catalin Marinas <catalin.marinas@arm.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
@@ -201,6 +201,20 @@ static void __init arm_bootmem_init(unsigned long start_pfn,
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef CONFIG_ZONE_DMA
|
||||
static void __init arm_adjust_dma_zone(unsigned long *size, unsigned long *hole,
|
||||
unsigned long dma_size)
|
||||
{
|
||||
if (size[0] <= dma_size)
|
||||
return;
|
||||
|
||||
size[ZONE_NORMAL] = size[0] - dma_size;
|
||||
size[ZONE_DMA] = dma_size;
|
||||
hole[ZONE_NORMAL] = hole[0];
|
||||
hole[ZONE_DMA] = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static void __init arm_bootmem_free(unsigned long min, unsigned long max_low,
|
||||
unsigned long max_high)
|
||||
{
|
||||
@@ -243,11 +257,18 @@ static void __init arm_bootmem_free(unsigned long min, unsigned long max_low,
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef ARM_DMA_ZONE_SIZE
|
||||
#ifndef CONFIG_ZONE_DMA
|
||||
#error ARM_DMA_ZONE_SIZE set but no DMA zone to limit allocations
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Adjust the sizes according to any special requirements for
|
||||
* this machine type.
|
||||
*/
|
||||
arch_adjust_zones(zone_size, zhole_size);
|
||||
arm_adjust_dma_zone(zone_size, zhole_size,
|
||||
ARM_DMA_ZONE_SIZE >> PAGE_SHIFT);
|
||||
#endif
|
||||
|
||||
free_area_init_node(0, zone_size, min, zhole_size);
|
||||
}
|
||||
|
Reference in New Issue
Block a user