mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	ARM: 7805/1: mm: change max*pfn to include the physical offset of memory
Most of the kernel code assumes that max*pfn is maximum pfns because the physical start of memory is expected to be PFN0. Since this assumption is not true on ARM architectures, the meaning of max*pfn is number of memory pages. This is done to keep drivers happy which are making use of of these variable to calculate the dma bounce limit using dma_mask. Now since we have a architecture override possibility for DMAable maximum pfns, lets make meaning of max*pfns as maximum pnfs on ARM as well. Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Will Deacon <will.deacon@arm.com> Cc: Nicolas Pitre <nicolas.pitre@linaro.org> Signed-off-by: Santosh Shilimkar <santosh.shilimkar@ti.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
		
							parent
							
								
									8e0cb8a1f6
								
							
						
					
					
						commit
						26ba47b183
					
				
					 2 changed files with 12 additions and 6 deletions
				
			
		| 
						 | 
				
			
			@ -64,6 +64,7 @@ static inline dma_addr_t virt_to_dma(struct device *dev, void *addr)
 | 
			
		|||
{
 | 
			
		||||
	return (dma_addr_t)__virt_to_bus((unsigned long)(addr));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
static inline dma_addr_t pfn_to_dma(struct device *dev, unsigned long pfn)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -86,6 +87,13 @@ static inline dma_addr_t virt_to_dma(struct device *dev, void *addr)
 | 
			
		|||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* The ARM override for dma_max_pfn() */
 | 
			
		||||
static inline unsigned long dma_max_pfn(struct device *dev)
 | 
			
		||||
{
 | 
			
		||||
	return PHYS_PFN_OFFSET + dma_to_pfn(dev, *dev->dma_mask);
 | 
			
		||||
}
 | 
			
		||||
#define dma_max_pfn(dev) dma_max_pfn(dev)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * DMA errors are defined by all-bits-set in the DMA address.
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -426,12 +426,10 @@ void __init bootmem_init(void)
 | 
			
		|||
	 * This doesn't seem to be used by the Linux memory manager any
 | 
			
		||||
	 * more, but is used by ll_rw_block.  If we can get rid of it, we
 | 
			
		||||
	 * also get rid of some of the stuff above as well.
 | 
			
		||||
	 *
 | 
			
		||||
	 * Note: max_low_pfn and max_pfn reflect the number of _pages_ in
 | 
			
		||||
	 * the system, not the maximum PFN.
 | 
			
		||||
	 */
 | 
			
		||||
	max_low_pfn = max_low - PHYS_PFN_OFFSET;
 | 
			
		||||
	max_pfn = max_high - PHYS_PFN_OFFSET;
 | 
			
		||||
	min_low_pfn = min;
 | 
			
		||||
	max_low_pfn = max_low;
 | 
			
		||||
	max_pfn = max_high;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
| 
						 | 
				
			
			@ -537,7 +535,7 @@ static inline void free_area_high(unsigned long pfn, unsigned long end)
 | 
			
		|||
static void __init free_highpages(void)
 | 
			
		||||
{
 | 
			
		||||
#ifdef CONFIG_HIGHMEM
 | 
			
		||||
	unsigned long max_low = max_low_pfn + PHYS_PFN_OFFSET;
 | 
			
		||||
	unsigned long max_low = max_low_pfn;
 | 
			
		||||
	struct memblock_region *mem, *res;
 | 
			
		||||
 | 
			
		||||
	/* set highmem page free */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue