mirror of
https://github.com/adulau/aha.git
synced 2024-12-29 12:16:20 +00:00
ia64: don't alias VMALLOC_END to vmalloc_end
If CONFIG_VIRTUAL_MEM_MAP is enabled, ia64 defines macro VMALLOC_END as unsigned long variable vmalloc_end which is adjusted to prepare room for vmemmap. This becomes probnlematic if a local variables vmalloc_end is defined in some function (not very unlikely) and VMALLOC_END is used in the function - the function thinks its referencing the global VMALLOC_END value but would be referencing its own local vmalloc_end variable. There's no reason VMALLOC_END should be a macro. Just define it as an unsigned long variable if CONFIG_VIRTUAL_MEM_MAP is set to avoid nasty surprises. Signed-off-by: Tejun Heo <tj@kernel.org> Acked-by: Tony Luck <tony.luck@intel.com> Cc: Fenghua Yu <fenghua.yu@intel.com> Cc: linux-ia64 <linux-ia64@vger.kernel.org> Cc: Christoph Lameter <cl@linux-foundation.org>
This commit is contained in:
parent
0efe5e32c8
commit
126b3fcdec
5 changed files with 8 additions and 9 deletions
|
@ -61,7 +61,7 @@ extern int register_active_ranges(u64 start, u64 len, int nid);
|
||||||
|
|
||||||
#ifdef CONFIG_VIRTUAL_MEM_MAP
|
#ifdef CONFIG_VIRTUAL_MEM_MAP
|
||||||
# define LARGE_GAP 0x40000000 /* Use virtual mem map if hole is > than this */
|
# define LARGE_GAP 0x40000000 /* Use virtual mem map if hole is > than this */
|
||||||
extern unsigned long vmalloc_end;
|
extern unsigned long VMALLOC_END;
|
||||||
extern struct page *vmem_map;
|
extern struct page *vmem_map;
|
||||||
extern int find_largest_hole(u64 start, u64 end, void *arg);
|
extern int find_largest_hole(u64 start, u64 end, void *arg);
|
||||||
extern int create_mem_map_page_table(u64 start, u64 end, void *arg);
|
extern int create_mem_map_page_table(u64 start, u64 end, void *arg);
|
||||||
|
|
|
@ -228,8 +228,7 @@ ia64_phys_addr_valid (unsigned long addr)
|
||||||
#define VMALLOC_START (RGN_BASE(RGN_GATE) + 0x200000000UL)
|
#define VMALLOC_START (RGN_BASE(RGN_GATE) + 0x200000000UL)
|
||||||
#ifdef CONFIG_VIRTUAL_MEM_MAP
|
#ifdef CONFIG_VIRTUAL_MEM_MAP
|
||||||
# define VMALLOC_END_INIT (RGN_BASE(RGN_GATE) + (1UL << (4*PAGE_SHIFT - 9)))
|
# define VMALLOC_END_INIT (RGN_BASE(RGN_GATE) + (1UL << (4*PAGE_SHIFT - 9)))
|
||||||
# define VMALLOC_END vmalloc_end
|
extern unsigned long VMALLOC_END;
|
||||||
extern unsigned long vmalloc_end;
|
|
||||||
#else
|
#else
|
||||||
#if defined(CONFIG_SPARSEMEM) && defined(CONFIG_SPARSEMEM_VMEMMAP)
|
#if defined(CONFIG_SPARSEMEM) && defined(CONFIG_SPARSEMEM_VMEMMAP)
|
||||||
/* SPARSEMEM_VMEMMAP uses half of vmalloc... */
|
/* SPARSEMEM_VMEMMAP uses half of vmalloc... */
|
||||||
|
|
|
@ -270,8 +270,8 @@ paging_init (void)
|
||||||
|
|
||||||
map_size = PAGE_ALIGN(ALIGN(max_low_pfn, MAX_ORDER_NR_PAGES) *
|
map_size = PAGE_ALIGN(ALIGN(max_low_pfn, MAX_ORDER_NR_PAGES) *
|
||||||
sizeof(struct page));
|
sizeof(struct page));
|
||||||
vmalloc_end -= map_size;
|
VMALLOC_END -= map_size;
|
||||||
vmem_map = (struct page *) vmalloc_end;
|
vmem_map = (struct page *) VMALLOC_END;
|
||||||
efi_memmap_walk(create_mem_map_page_table, NULL);
|
efi_memmap_walk(create_mem_map_page_table, NULL);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -666,9 +666,9 @@ void __init paging_init(void)
|
||||||
sparse_init();
|
sparse_init();
|
||||||
|
|
||||||
#ifdef CONFIG_VIRTUAL_MEM_MAP
|
#ifdef CONFIG_VIRTUAL_MEM_MAP
|
||||||
vmalloc_end -= PAGE_ALIGN(ALIGN(max_low_pfn, MAX_ORDER_NR_PAGES) *
|
VMALLOC_END -= PAGE_ALIGN(ALIGN(max_low_pfn, MAX_ORDER_NR_PAGES) *
|
||||||
sizeof(struct page));
|
sizeof(struct page));
|
||||||
vmem_map = (struct page *) vmalloc_end;
|
vmem_map = (struct page *) VMALLOC_END;
|
||||||
efi_memmap_walk(create_mem_map_page_table, NULL);
|
efi_memmap_walk(create_mem_map_page_table, NULL);
|
||||||
printk("Virtual mem_map starts at 0x%p\n", vmem_map);
|
printk("Virtual mem_map starts at 0x%p\n", vmem_map);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -44,8 +44,8 @@ extern void ia64_tlb_init (void);
|
||||||
unsigned long MAX_DMA_ADDRESS = PAGE_OFFSET + 0x100000000UL;
|
unsigned long MAX_DMA_ADDRESS = PAGE_OFFSET + 0x100000000UL;
|
||||||
|
|
||||||
#ifdef CONFIG_VIRTUAL_MEM_MAP
|
#ifdef CONFIG_VIRTUAL_MEM_MAP
|
||||||
unsigned long vmalloc_end = VMALLOC_END_INIT;
|
unsigned long VMALLOC_END = VMALLOC_END_INIT;
|
||||||
EXPORT_SYMBOL(vmalloc_end);
|
EXPORT_SYMBOL(VMALLOC_END);
|
||||||
struct page *vmem_map;
|
struct page *vmem_map;
|
||||||
EXPORT_SYMBOL(vmem_map);
|
EXPORT_SYMBOL(vmem_map);
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue