mm,x86: fix kmap_atomic_push vs ioremap_32.c
It appears i386 uses kmap_atomic infrastructure regardless of CONFIG_HIGHMEM which results in a compile error when highmem is disabled. Cure this by providing the needed few bits for both CONFIG_HIGHMEM and CONFIG_X86_32. Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Reported-by: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
		
							parent
							
								
									12ba8d1e92
								
							
						
					
					
						commit
						a8e23a2918
					
				| @ -37,27 +37,6 @@ extern unsigned long totalhigh_pages; | ||||
| 
 | ||||
| void kmap_flush_unused(void); | ||||
| 
 | ||||
| DECLARE_PER_CPU(int, __kmap_atomic_idx); | ||||
| 
 | ||||
| static inline int kmap_atomic_idx_push(void) | ||||
| { | ||||
| 	int idx = __get_cpu_var(__kmap_atomic_idx)++; | ||||
| #ifdef CONFIG_DEBUG_HIGHMEM | ||||
| 	WARN_ON_ONCE(in_irq() && !irqs_disabled()); | ||||
| 	BUG_ON(idx > KM_TYPE_NR); | ||||
| #endif | ||||
| 	return idx; | ||||
| } | ||||
| 
 | ||||
| static inline int kmap_atomic_idx_pop(void) | ||||
| { | ||||
| 	int idx = --__get_cpu_var(__kmap_atomic_idx); | ||||
| #ifdef CONFIG_DEBUG_HIGHMEM | ||||
| 	BUG_ON(idx < 0); | ||||
| #endif | ||||
| 	return idx; | ||||
| } | ||||
| 
 | ||||
| #else /* CONFIG_HIGHMEM */ | ||||
| 
 | ||||
| static inline unsigned int nr_free_highpages(void) { return 0; } | ||||
| @ -95,6 +74,31 @@ static inline void __kunmap_atomic(void *addr) | ||||
| 
 | ||||
| #endif /* CONFIG_HIGHMEM */ | ||||
| 
 | ||||
| #if defined(CONFIG_HIGHMEM) || defined(CONFIG_X86_32) | ||||
| 
 | ||||
| DECLARE_PER_CPU(int, __kmap_atomic_idx); | ||||
| 
 | ||||
| static inline int kmap_atomic_idx_push(void) | ||||
| { | ||||
| 	int idx = __get_cpu_var(__kmap_atomic_idx)++; | ||||
| #ifdef CONFIG_DEBUG_HIGHMEM | ||||
| 	WARN_ON_ONCE(in_irq() && !irqs_disabled()); | ||||
| 	BUG_ON(idx > KM_TYPE_NR); | ||||
| #endif | ||||
| 	return idx; | ||||
| } | ||||
| 
 | ||||
| static inline int kmap_atomic_idx_pop(void) | ||||
| { | ||||
| 	int idx = --__get_cpu_var(__kmap_atomic_idx); | ||||
| #ifdef CONFIG_DEBUG_HIGHMEM | ||||
| 	BUG_ON(idx < 0); | ||||
| #endif | ||||
| 	return idx; | ||||
| } | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * Make both: kmap_atomic(page, idx) and kmap_atomic(page) work. | ||||
|  */ | ||||
|  | ||||
| @ -29,6 +29,11 @@ | ||||
| #include <linux/kgdb.h> | ||||
| #include <asm/tlbflush.h> | ||||
| 
 | ||||
| 
 | ||||
| #if defined(CONFIG_HIGHMEM) || defined(CONFIG_X86_32) | ||||
| DEFINE_PER_CPU(int, __kmap_atomic_idx); | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * Virtual_count is not a pure "count". | ||||
|  *  0 means that it is not mapped, and has not been mapped | ||||
| @ -43,7 +48,6 @@ unsigned long totalhigh_pages __read_mostly; | ||||
| EXPORT_SYMBOL(totalhigh_pages); | ||||
| 
 | ||||
| 
 | ||||
| DEFINE_PER_CPU(int, __kmap_atomic_idx); | ||||
| EXPORT_PER_CPU_SYMBOL(__kmap_atomic_idx); | ||||
| 
 | ||||
| unsigned int nr_free_highpages (void) | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user