Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable
This commit is contained in:
commit
73829af71f
|
@ -51,15 +51,14 @@ ffc00000 ffefffff DMA memory mapping region. Memory returned
|
|||
ff000000 ffbfffff Reserved for future expansion of DMA
|
||||
mapping region.
|
||||
|
||||
VMALLOC_END feffffff Free for platform use, recommended.
|
||||
VMALLOC_END must be aligned to a 2MB
|
||||
boundary.
|
||||
|
||||
VMALLOC_START VMALLOC_END-1 vmalloc() / ioremap() space.
|
||||
Memory returned by vmalloc/ioremap will
|
||||
be dynamically placed in this region.
|
||||
VMALLOC_START may be based upon the value
|
||||
of the high_memory variable.
|
||||
Machine specific static mappings are also
|
||||
located here through iotable_init().
|
||||
VMALLOC_START is based upon the value
|
||||
of the high_memory variable, and VMALLOC_END
|
||||
is equal to 0xff000000.
|
||||
|
||||
PAGE_OFFSET high_memory-1 Kernel direct-mapped RAM region.
|
||||
This maps the platforms RAM, and typically
|
||||
|
|
|
@ -21,7 +21,6 @@
|
|||
#else
|
||||
|
||||
#include <asm/memory.h>
|
||||
#include <mach/vmalloc.h>
|
||||
#include <asm/pgtable-hwdef.h>
|
||||
|
||||
#include <asm/pgtable-2level.h>
|
||||
|
@ -33,14 +32,16 @@
|
|||
* any out-of-bounds memory accesses will hopefully be caught.
|
||||
* The vmalloc() routines leaves a hole of 4kB between each vmalloced
|
||||
* area for the same reason. ;)
|
||||
*
|
||||
* Note that platforms may override VMALLOC_START, but they must provide
|
||||
* VMALLOC_END. VMALLOC_END defines the (exclusive) limit of this space,
|
||||
* which may not overlap IO space.
|
||||
*/
|
||||
#ifndef VMALLOC_START
|
||||
#define VMALLOC_OFFSET (8*1024*1024)
|
||||
#define VMALLOC_START (((unsigned long)high_memory + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1))
|
||||
#define VMALLOC_END 0xff000000UL
|
||||
|
||||
/* This is a temporary hack until shmobile's DMA area size is sorted out */
|
||||
#ifdef CONFIG_ARCH_SHMOBILE
|
||||
#warning "SH-Mobile's consistent DMA size conflicts with VMALLOC_END by 144MB"
|
||||
#undef VMALLOC_END
|
||||
#define VMALLOC_END 0xF6000000UL
|
||||
#endif
|
||||
|
||||
#define LIBRARY_TEXT_START 0x0c000000
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
#include <linux/memblock.h>
|
||||
#include <linux/bug.h>
|
||||
#include <linux/compiler.h>
|
||||
#include <linux/sort.h>
|
||||
|
||||
#include <asm/unified.h>
|
||||
#include <asm/cpu.h>
|
||||
|
@ -890,6 +891,12 @@ static struct machine_desc * __init setup_machine_tags(unsigned int nr)
|
|||
return mdesc;
|
||||
}
|
||||
|
||||
static int __init meminfo_cmp(const void *_a, const void *_b)
|
||||
{
|
||||
const struct membank *a = _a, *b = _b;
|
||||
long cmp = bank_pfn_start(a) - bank_pfn_start(b);
|
||||
return cmp < 0 ? -1 : cmp > 0 ? 1 : 0;
|
||||
}
|
||||
|
||||
void __init setup_arch(char **cmdline_p)
|
||||
{
|
||||
|
@ -918,6 +925,7 @@ void __init setup_arch(char **cmdline_p)
|
|||
|
||||
parse_early_param();
|
||||
|
||||
sort(&meminfo.bank, meminfo.nr_banks, sizeof(meminfo.bank[0]), meminfo_cmp, NULL);
|
||||
sanity_check_meminfo();
|
||||
arm_memblock_init(&meminfo, mdesc);
|
||||
|
||||
|
|
|
@ -30,14 +30,6 @@
|
|||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
#ifndef CONFIG_ARCH_AT91X40
|
||||
#define __arch_ioremap at91_ioremap
|
||||
#define __arch_iounmap at91_iounmap
|
||||
#endif
|
||||
|
||||
void __iomem *at91_ioremap(unsigned long phys, size_t size, unsigned int type);
|
||||
void at91_iounmap(volatile void __iomem *addr);
|
||||
|
||||
static inline unsigned int at91_sys_read(unsigned int reg_offset)
|
||||
{
|
||||
void __iomem *addr = (void __iomem *)AT91_VA_BASE_SYS;
|
||||
|
|
|
@ -1,28 +0,0 @@
|
|||
/*
|
||||
* arch/arm/mach-at91/include/mach/vmalloc.h
|
||||
*
|
||||
* Copyright (C) 2003 SAN People
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#ifndef __ASM_ARCH_VMALLOC_H
|
||||
#define __ASM_ARCH_VMALLOC_H
|
||||
|
||||
#include <mach/hardware.h>
|
||||
|
||||
#define VMALLOC_END (AT91_VIRT_BASE & PGDIR_MASK)
|
||||
|
||||
#endif
|
|
@ -73,24 +73,6 @@ static struct map_desc at91_io_desc __initdata = {
|
|||
.type = MT_DEVICE,
|
||||
};
|
||||
|
||||
void __iomem *at91_ioremap(unsigned long p, size_t size, unsigned int type)
|
||||
{
|
||||
if (p >= AT91_BASE_SYS && p <= (AT91_BASE_SYS + SZ_16K - 1))
|
||||
return (void __iomem *)AT91_IO_P2V(p);
|
||||
|
||||
return __arm_ioremap_caller(p, size, type, __builtin_return_address(0));
|
||||
}
|
||||
EXPORT_SYMBOL(at91_ioremap);
|
||||
|
||||
void at91_iounmap(volatile void __iomem *addr)
|
||||
{
|
||||
unsigned long virt = (unsigned long)addr;
|
||||
|
||||
if (virt >= VMALLOC_START && virt < VMALLOC_END)
|
||||
__iounmap(addr);
|
||||
}
|
||||
EXPORT_SYMBOL(at91_iounmap);
|
||||
|
||||
#define AT91_DBGU0 0xfffff200
|
||||
#define AT91_DBGU1 0xffffee00
|
||||
|
||||
|
|
|
@ -1615,7 +1615,7 @@ DMA_MemType_t dma_mem_type(void *addr)
|
|||
{
|
||||
unsigned long addrVal = (unsigned long)addr;
|
||||
|
||||
if (addrVal >= VMALLOC_END) {
|
||||
if (addrVal >= CONSISTENT_BASE) {
|
||||
/* NOTE: DMA virtual memory space starts at 0xFFxxxxxx */
|
||||
|
||||
/* dma_alloc_xxx pages are physically and virtually contiguous */
|
||||
|
|
|
@ -1,25 +0,0 @@
|
|||
/*
|
||||
*
|
||||
* Copyright (C) 2000 Russell King.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
/*
|
||||
* Move VMALLOC_END to 0xf0000000 so that the vm space can range from
|
||||
* 0xe0000000 to 0xefffffff. This gives us 256 MB of vm space and handles
|
||||
* larger physical memory designs better.
|
||||
*/
|
||||
#define VMALLOC_END 0xf0000000UL
|
|
@ -1,20 +0,0 @@
|
|||
/*
|
||||
* arch/arm/mach-clps711x/include/mach/vmalloc.h
|
||||
*
|
||||
* Copyright (C) 2000 Deep Blue Solutions Ltd.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
#define VMALLOC_END 0xd0000000UL
|
|
@ -1,11 +0,0 @@
|
|||
/*
|
||||
* Copyright 2000 Russell King.
|
||||
* Copyright 2003 ARM Limited
|
||||
* Copyright 2008 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#define VMALLOC_END 0xd8000000UL
|
|
@ -4,7 +4,7 @@
|
|||
#
|
||||
|
||||
# Common objects
|
||||
obj-y := time.o clock.o serial.o io.o psc.o \
|
||||
obj-y := time.o clock.o serial.o psc.o \
|
||||
dma.o usb.o common.o sram.o aemif.o
|
||||
|
||||
obj-$(CONFIG_DAVINCI_MUX) += mux.o
|
||||
|
|
|
@ -21,12 +21,4 @@
|
|||
#define __mem_pci(a) (a)
|
||||
#define __mem_isa(a) (a)
|
||||
|
||||
#ifndef __ASSEMBLER__
|
||||
#define __arch_ioremap davinci_ioremap
|
||||
#define __arch_iounmap davinci_iounmap
|
||||
|
||||
void __iomem *davinci_ioremap(unsigned long phys, size_t size,
|
||||
unsigned int type);
|
||||
void davinci_iounmap(volatile void __iomem *addr);
|
||||
#endif
|
||||
#endif /* __ASM_ARCH_IO_H */
|
||||
|
|
|
@ -1,14 +0,0 @@
|
|||
/*
|
||||
* DaVinci vmalloc definitions
|
||||
*
|
||||
* Author: Kevin Hilman, MontaVista Software, Inc. <source@mvista.com>
|
||||
*
|
||||
* 2007 (c) MontaVista Software, Inc. This file is licensed under
|
||||
* the terms of the GNU General Public License version 2. This program
|
||||
* is licensed "as is" without any warranty of any kind, whether express
|
||||
* or implied.
|
||||
*/
|
||||
#include <mach/hardware.h>
|
||||
|
||||
/* Allow vmalloc range until the IO virtual range minus a 2M "hole" */
|
||||
#define VMALLOC_END (IO_VIRT - (2<<20))
|
|
@ -1,48 +0,0 @@
|
|||
/*
|
||||
* DaVinci I/O mapping code
|
||||
*
|
||||
* Copyright (C) 2005-2006 Texas Instruments
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#include <asm/tlb.h>
|
||||
#include <asm/mach/map.h>
|
||||
|
||||
#include <mach/common.h>
|
||||
|
||||
/*
|
||||
* Intercept ioremap() requests for addresses in our fixed mapping regions.
|
||||
*/
|
||||
void __iomem *davinci_ioremap(unsigned long p, size_t size, unsigned int type)
|
||||
{
|
||||
struct map_desc *desc = davinci_soc_info.io_desc;
|
||||
int desc_num = davinci_soc_info.io_desc_num;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < desc_num; i++, desc++) {
|
||||
unsigned long iophys = __pfn_to_phys(desc->pfn);
|
||||
unsigned long iosize = desc->length;
|
||||
|
||||
if (p >= iophys && (p + size) <= (iophys + iosize))
|
||||
return __io(desc->virtual + p - iophys);
|
||||
}
|
||||
|
||||
return __arm_ioremap_caller(p, size, type,
|
||||
__builtin_return_address(0));
|
||||
}
|
||||
EXPORT_SYMBOL(davinci_ioremap);
|
||||
|
||||
void davinci_iounmap(volatile void __iomem *addr)
|
||||
{
|
||||
unsigned long virt = (unsigned long)addr;
|
||||
|
||||
if (virt >= VMALLOC_START && virt < VMALLOC_END)
|
||||
__iounmap(addr);
|
||||
}
|
||||
EXPORT_SYMBOL(davinci_iounmap);
|
|
@ -11,8 +11,6 @@
|
|||
#ifndef __ASM_ARCH_DOVE_H
|
||||
#define __ASM_ARCH_DOVE_H
|
||||
|
||||
#include <mach/vmalloc.h>
|
||||
|
||||
/*
|
||||
* Marvell Dove address maps.
|
||||
*
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
/*
|
||||
* arch/arm/mach-dove/include/mach/vmalloc.h
|
||||
*/
|
||||
|
||||
#define VMALLOC_END 0xfd800000UL
|
|
@ -1,10 +0,0 @@
|
|||
/*
|
||||
* arch/arm/mach-ebsa110/include/mach/vmalloc.h
|
||||
*
|
||||
* Copyright (C) 1998 Russell King
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
#define VMALLOC_END 0xdf000000UL
|
|
@ -1,5 +0,0 @@
|
|||
/*
|
||||
* arch/arm/mach-ep93xx/include/mach/vmalloc.h
|
||||
*/
|
||||
|
||||
#define VMALLOC_END 0xfe800000UL
|
|
@ -1,22 +0,0 @@
|
|||
/* linux/arch/arm/mach-exynos4/include/mach/vmalloc.h
|
||||
*
|
||||
* Copyright (c) 2010-2011 Samsung Electronics Co., Ltd.
|
||||
* http://www.samsung.com
|
||||
*
|
||||
* Copyright 2010 Ben Dooks <ben-linux@fluff.org>
|
||||
*
|
||||
* Based on arch/arm/mach-s5p6440/include/mach/vmalloc.h
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* EXYNOS4 vmalloc definition
|
||||
*/
|
||||
|
||||
#ifndef __ASM_ARCH_VMALLOC_H
|
||||
#define __ASM_ARCH_VMALLOC_H __FILE__
|
||||
|
||||
#define VMALLOC_END 0xF6000000UL
|
||||
|
||||
#endif /* __ASM_ARCH_VMALLOC_H */
|
|
@ -1,10 +0,0 @@
|
|||
/*
|
||||
* arch/arm/mach-footbridge/include/mach/vmalloc.h
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
|
||||
#define VMALLOC_END 0xf0000000UL
|
|
@ -1,10 +0,0 @@
|
|||
/*
|
||||
* Copyright (C) 2008-2009 Paulius Zaleckas <paulius.zaleckas@teltonika.lt>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*/
|
||||
|
||||
#define VMALLOC_END 0xf0000000UL
|
|
@ -1,10 +0,0 @@
|
|||
/*
|
||||
* arch/arm/mach-h720x/include/mach/vmalloc.h
|
||||
*/
|
||||
|
||||
#ifndef __ARCH_ARM_VMALLOC_H
|
||||
#define __ARCH_ARM_VMALLOC_H
|
||||
|
||||
#define VMALLOC_END 0xd0000000UL
|
||||
|
||||
#endif
|
|
@ -1 +0,0 @@
|
|||
#define VMALLOC_END 0xFEE00000UL
|
|
@ -1,20 +0,0 @@
|
|||
/*
|
||||
* arch/arm/mach-integrator/include/mach/vmalloc.h
|
||||
*
|
||||
* Copyright (C) 2000 Russell King.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
#define VMALLOC_END 0xd0000000UL
|
|
@ -1,4 +0,0 @@
|
|||
#ifndef _VMALLOC_H_
|
||||
#define _VMALLOC_H_
|
||||
#define VMALLOC_END 0xfa000000UL
|
||||
#endif
|
|
@ -13,15 +13,8 @@
|
|||
|
||||
#include <asm/hardware/iop3xx.h>
|
||||
|
||||
extern void __iomem *__iop3xx_ioremap(unsigned long cookie, size_t size,
|
||||
unsigned int mtype);
|
||||
extern void __iop3xx_iounmap(void __iomem *addr);
|
||||
|
||||
#define IO_SPACE_LIMIT 0xffffffff
|
||||
#define __io(p) ((void __iomem *)IOP3XX_PCI_IO_PHYS_TO_VIRT(p))
|
||||
#define __mem_pci(a) (a)
|
||||
|
||||
#define __arch_ioremap __iop3xx_ioremap
|
||||
#define __arch_iounmap __iop3xx_iounmap
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
/*
|
||||
* arch/arm/mach-iop32x/include/mach/vmalloc.h
|
||||
*/
|
||||
|
||||
#define VMALLOC_END 0xfe000000UL
|
|
@ -13,15 +13,8 @@
|
|||
|
||||
#include <asm/hardware/iop3xx.h>
|
||||
|
||||
extern void __iomem *__iop3xx_ioremap(unsigned long cookie, size_t size,
|
||||
unsigned int mtype);
|
||||
extern void __iop3xx_iounmap(void __iomem *addr);
|
||||
|
||||
#define IO_SPACE_LIMIT 0xffffffff
|
||||
#define __io(p) ((void __iomem *)IOP3XX_PCI_IO_PHYS_TO_VIRT(p))
|
||||
#define __mem_pci(a) (a)
|
||||
|
||||
#define __arch_ioremap __iop3xx_ioremap
|
||||
#define __arch_iounmap __iop3xx_iounmap
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
/*
|
||||
* arch/arm/mach-iop33x/include/mach/vmalloc.h
|
||||
*/
|
||||
|
||||
#define VMALLOC_END 0xfe000000UL
|
|
@ -1,20 +0,0 @@
|
|||
/*
|
||||
* arch/arm/mach-ixp2000/include/mach/vmalloc.h
|
||||
*
|
||||
* Author: Naeem Afzal <naeem.m.afzal@intel.com>
|
||||
*
|
||||
* Copyright 2002 Intel Corp.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
* Free Software Foundation; either version 2 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* Just any arbitrary offset to the start of the vmalloc VM area: the
|
||||
* current 8MB value just means that there will be a 8MB "hole" after the
|
||||
* physical memory until the kernel virtual memory starts. That means that
|
||||
* any out-of-bounds memory accesses will hopefully be caught.
|
||||
* The vmalloc() routines leaves a hole of 4kB between each vmalloced
|
||||
* area for the same reason. ;)
|
||||
*/
|
||||
#define VMALLOC_END 0xfb000000UL
|
|
@ -20,33 +20,4 @@
|
|||
#define __io(p) ((void __iomem*)((p) + IXP23XX_PCI_IO_VIRT))
|
||||
#define __mem_pci(a) (a)
|
||||
|
||||
static inline void __iomem *
|
||||
ixp23xx_ioremap(unsigned long addr, unsigned long size, unsigned int mtype)
|
||||
{
|
||||
if (addr >= IXP23XX_PCI_MEM_START &&
|
||||
addr <= IXP23XX_PCI_MEM_START + IXP23XX_PCI_MEM_SIZE) {
|
||||
if (addr + size > IXP23XX_PCI_MEM_START + IXP23XX_PCI_MEM_SIZE)
|
||||
return NULL;
|
||||
|
||||
return (void __iomem *)
|
||||
((addr - IXP23XX_PCI_MEM_START) + IXP23XX_PCI_MEM_VIRT);
|
||||
}
|
||||
|
||||
return __arm_ioremap(addr, size, mtype);
|
||||
}
|
||||
|
||||
static inline void
|
||||
ixp23xx_iounmap(void __iomem *addr)
|
||||
{
|
||||
if ((((u32)addr) >= IXP23XX_PCI_MEM_VIRT) &&
|
||||
(((u32)addr) < IXP23XX_PCI_MEM_VIRT + IXP23XX_PCI_MEM_SIZE))
|
||||
return;
|
||||
|
||||
__iounmap(addr);
|
||||
}
|
||||
|
||||
#define __arch_ioremap ixp23xx_ioremap
|
||||
#define __arch_iounmap ixp23xx_iounmap
|
||||
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,10 +0,0 @@
|
|||
/*
|
||||
* arch/arm/mach-ixp23xx/include/mach/vmalloc.h
|
||||
*
|
||||
* Copyright (c) 2005 MontaVista Software, Inc.
|
||||
*
|
||||
* NPU mappings end at 0xf0000000 and we allocate 64MB for board
|
||||
* specific static I/O.
|
||||
*/
|
||||
|
||||
#define VMALLOC_END (0xec000000UL)
|
|
@ -1,5 +0,0 @@
|
|||
/*
|
||||
* arch/arm/mach-ixp4xx/include/mach/vmalloc.h
|
||||
*/
|
||||
#define VMALLOC_END (0xff000000UL)
|
||||
|
|
@ -19,31 +19,6 @@ static inline void __iomem *__io(unsigned long addr)
|
|||
+ KIRKWOOD_PCIE_IO_VIRT_BASE);
|
||||
}
|
||||
|
||||
static inline void __iomem *
|
||||
__arch_ioremap(unsigned long paddr, size_t size, unsigned int mtype)
|
||||
{
|
||||
void __iomem *retval;
|
||||
unsigned long offs = paddr - KIRKWOOD_REGS_PHYS_BASE;
|
||||
if (mtype == MT_DEVICE && size && offs < KIRKWOOD_REGS_SIZE &&
|
||||
size <= KIRKWOOD_REGS_SIZE && offs + size <= KIRKWOOD_REGS_SIZE) {
|
||||
retval = (void __iomem *)KIRKWOOD_REGS_VIRT_BASE + offs;
|
||||
} else {
|
||||
retval = __arm_ioremap(paddr, size, mtype);
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
static inline void
|
||||
__arch_iounmap(void __iomem *addr)
|
||||
{
|
||||
if (addr < (void __iomem *)KIRKWOOD_REGS_VIRT_BASE ||
|
||||
addr >= (void __iomem *)(KIRKWOOD_REGS_VIRT_BASE + KIRKWOOD_REGS_SIZE))
|
||||
__iounmap(addr);
|
||||
}
|
||||
|
||||
#define __arch_ioremap __arch_ioremap
|
||||
#define __arch_iounmap __arch_iounmap
|
||||
#define __io(a) __io(a)
|
||||
#define __mem_pci(a) (a)
|
||||
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
/*
|
||||
* arch/arm/mach-kirkwood/include/mach/vmalloc.h
|
||||
*/
|
||||
|
||||
#define VMALLOC_END 0xfe800000UL
|
|
@ -1,19 +0,0 @@
|
|||
/*
|
||||
* arch/arm/mach-ks8695/include/mach/vmalloc.h
|
||||
*
|
||||
* Copyright (C) 2006 Ben Dooks
|
||||
* Copyright (C) 2006 Simtec Electronics <linux@simtec.co.uk>
|
||||
*
|
||||
* KS8695 vmalloc definition
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#ifndef __ASM_ARCH_VMALLOC_H
|
||||
#define __ASM_ARCH_VMALLOC_H
|
||||
|
||||
#define VMALLOC_END (KS8695_IO_VA & PGDIR_MASK)
|
||||
|
||||
#endif
|
|
@ -1,24 +0,0 @@
|
|||
/*
|
||||
* arch/arm/mach-lpc32xx/include/mach/vmalloc.h
|
||||
*
|
||||
* Author: Kevin Wells <kevin.wells@nxp.com>
|
||||
*
|
||||
* Copyright (C) 2010 NXP Semiconductors
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#ifndef __ASM_ARCH_VMALLOC_H
|
||||
#define __ASM_ARCH_VMALLOC_H
|
||||
|
||||
#define VMALLOC_END 0xF0000000UL
|
||||
|
||||
#endif
|
|
@ -1,5 +0,0 @@
|
|||
/*
|
||||
* linux/arch/arm/mach-mmp/include/mach/vmalloc.h
|
||||
*/
|
||||
|
||||
#define VMALLOC_END 0xfe000000UL
|
|
@ -1,22 +0,0 @@
|
|||
/* arch/arm/mach-msm/include/mach/vmalloc.h
|
||||
*
|
||||
* Copyright (C) 2007 Google, Inc.
|
||||
*
|
||||
* This software is licensed under the terms of the GNU General Public
|
||||
* License version 2, as published by the Free Software Foundation, and
|
||||
* may be copied, distributed, and modified under those terms.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __ASM_ARCH_MSM_VMALLOC_H
|
||||
#define __ASM_ARCH_MSM_VMALLOC_H
|
||||
|
||||
#define VMALLOC_END 0xd0000000UL
|
||||
|
||||
#endif
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
/*
|
||||
* arch/arm/mach-mv78xx0/include/mach/vmalloc.h
|
||||
*/
|
||||
|
||||
#define VMALLOC_END 0xfe000000UL
|
|
@ -1,22 +0,0 @@
|
|||
/*
|
||||
* Copyright (C) 2000 Russell King.
|
||||
* Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#ifndef __MACH_MXS_VMALLOC_H__
|
||||
#define __MACH_MXS_VMALLOC_H__
|
||||
|
||||
/* vmalloc ending address */
|
||||
#define VMALLOC_END 0xf4000000UL
|
||||
|
||||
#endif /* __MACH_MXS_VMALLOC_H__ */
|
|
@ -1,19 +0,0 @@
|
|||
/*
|
||||
* arch/arm/mach-netx/include/mach/vmalloc.h
|
||||
*
|
||||
* Copyright (C) 2005 Sascha Hauer <s.hauer@pengutronix.de>, Pengutronix
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
#define VMALLOC_END 0xd0000000UL
|
|
@ -1,2 +0,0 @@
|
|||
|
||||
#define VMALLOC_END 0xe8000000UL
|
|
@ -1,20 +0,0 @@
|
|||
/*
|
||||
* arch/arm/mach-omap1/include/mach/vmalloc.h
|
||||
*
|
||||
* Copyright (C) 2000 Russell King.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
#define VMALLOC_END 0xd8000000UL
|
|
@ -121,7 +121,6 @@ void __init omap16xx_map_io(void)
|
|||
void omap1_init_early(void)
|
||||
{
|
||||
omap_check_revision();
|
||||
omap_ioremap_init();
|
||||
|
||||
/* REVISIT: Refer to OMAP5910 Errata, Advisory SYS_1: "Timeout Abort
|
||||
* on a Posted Write in the TIPB Bridge".
|
||||
|
|
|
@ -1,20 +0,0 @@
|
|||
/*
|
||||
* arch/arm/plat-omap/include/mach/vmalloc.h
|
||||
*
|
||||
* Copyright (C) 2000 Russell King.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
#define VMALLOC_END 0xf8000000UL
|
|
@ -319,7 +319,6 @@ static int _set_hwmod_postsetup_state(struct omap_hwmod *oh, void *data)
|
|||
static void __init omap_common_init_early(void)
|
||||
{
|
||||
omap2_check_revision();
|
||||
omap_ioremap_init();
|
||||
omap_init_consistent_dma_size();
|
||||
}
|
||||
|
||||
|
|
|
@ -15,31 +15,6 @@
|
|||
|
||||
#define IO_SPACE_LIMIT 0xffffffff
|
||||
|
||||
static inline void __iomem *
|
||||
__arch_ioremap(unsigned long paddr, size_t size, unsigned int mtype)
|
||||
{
|
||||
void __iomem *retval;
|
||||
unsigned long offs = paddr - ORION5X_REGS_PHYS_BASE;
|
||||
if (mtype == MT_DEVICE && size && offs < ORION5X_REGS_SIZE &&
|
||||
size <= ORION5X_REGS_SIZE && offs + size <= ORION5X_REGS_SIZE) {
|
||||
retval = (void __iomem *)ORION5X_REGS_VIRT_BASE + offs;
|
||||
} else {
|
||||
retval = __arm_ioremap(paddr, size, mtype);
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
static inline void
|
||||
__arch_iounmap(void __iomem *addr)
|
||||
{
|
||||
if (addr < (void __iomem *)ORION5X_REGS_VIRT_BASE ||
|
||||
addr >= (void __iomem *)(ORION5X_REGS_VIRT_BASE + ORION5X_REGS_SIZE))
|
||||
__iounmap(addr);
|
||||
}
|
||||
|
||||
#define __arch_ioremap __arch_ioremap
|
||||
#define __arch_iounmap __arch_iounmap
|
||||
#define __io(a) __typesafe_io(a)
|
||||
#define __mem_pci(a) (a)
|
||||
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
/*
|
||||
* arch/arm/mach-orion5x/include/mach/vmalloc.h
|
||||
*/
|
||||
|
||||
#define VMALLOC_END 0xfd800000UL
|
|
@ -1,14 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2011 Picochip Ltd., Jamie Iles
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
#define VMALLOC_END 0xfe000000UL
|
|
@ -1,20 +0,0 @@
|
|||
/*
|
||||
* arch/arm/mach-pnx4008/include/mach/vmalloc.h
|
||||
*
|
||||
* Author: Vitaly Wool <source@mvista.com>
|
||||
*
|
||||
* 2006 (c) MontaVista Software, Inc. This file is licensed under
|
||||
* the terms of the GNU General Public License version 2. This program
|
||||
* is licensed "as is" without any warranty of any kind, whether express
|
||||
* or implied.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Just any arbitrary offset to the start of the vmalloc VM area: the
|
||||
* current 8MB value just means that there will be a 8MB "hole" after the
|
||||
* physical memory until the kernel virtual memory starts. That means that
|
||||
* any out-of-bounds memory accesses will hopefully be caught.
|
||||
* The vmalloc() routines leaves a hole of 4kB between each vmalloced
|
||||
* area for the same reason. ;)
|
||||
*/
|
||||
#define VMALLOC_END 0xd0000000UL
|
|
@ -9,8 +9,10 @@
|
|||
#ifndef __MACH_PRIMA2_MAP_H__
|
||||
#define __MACH_PRIMA2_MAP_H__
|
||||
|
||||
#include <mach/vmalloc.h>
|
||||
#include <linux/const.h>
|
||||
|
||||
#define SIRFSOC_VA(x) (VMALLOC_END + ((x) & 0x00FFF000))
|
||||
#define SIRFSOC_VA_BASE _AC(0xFEC00000, UL)
|
||||
|
||||
#define SIRFSOC_VA(x) (SIRFSOC_VA_BASE + ((x) & 0x00FFF000))
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,16 +0,0 @@
|
|||
/*
|
||||
* arch/arm/ach-prima2/include/mach/vmalloc.h
|
||||
*
|
||||
* Copyright (c) 2010 – 2011 Cambridge Silicon Radio Limited, a CSR plc group company.
|
||||
*
|
||||
* Licensed under GPLv2 or later.
|
||||
*/
|
||||
|
||||
#ifndef __MACH_VMALLOC_H
|
||||
#define __MACH_VMALLOC_H
|
||||
|
||||
#include <linux/const.h>
|
||||
|
||||
#define VMALLOC_END _AC(0xFEC00000, UL)
|
||||
|
||||
#endif
|
|
@ -1,11 +0,0 @@
|
|||
/*
|
||||
* arch/arm/mach-pxa/include/mach/vmalloc.h
|
||||
*
|
||||
* Author: Nicolas Pitre
|
||||
* Copyright: (C) 2001 MontaVista Software Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
#define VMALLOC_END (0xe8000000UL)
|
|
@ -1,21 +0,0 @@
|
|||
/*
|
||||
* arch/arm/mach-realview/include/mach/vmalloc.h
|
||||
*
|
||||
* Copyright (C) 2003 ARM Limited
|
||||
* Copyright (C) 2000 Russell King.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
#define VMALLOC_END 0xf8000000UL
|
|
@ -91,8 +91,8 @@ static struct map_desc realview_eb_io_desc[] __initdata = {
|
|||
|
||||
static struct map_desc realview_eb11mp_io_desc[] __initdata = {
|
||||
{
|
||||
.virtual = IO_ADDRESS(REALVIEW_EB11MP_GIC_CPU_BASE),
|
||||
.pfn = __phys_to_pfn(REALVIEW_EB11MP_GIC_CPU_BASE),
|
||||
.virtual = IO_ADDRESS(REALVIEW_EB11MP_SCU_BASE),
|
||||
.pfn = __phys_to_pfn(REALVIEW_EB11MP_SCU_BASE),
|
||||
.length = SZ_4K,
|
||||
.type = MT_DEVICE,
|
||||
}, {
|
||||
|
|
|
@ -98,8 +98,8 @@ static struct map_desc realview_pbx_io_desc[] __initdata = {
|
|||
|
||||
static struct map_desc realview_local_io_desc[] __initdata = {
|
||||
{
|
||||
.virtual = IO_ADDRESS(REALVIEW_PBX_TILE_GIC_CPU_BASE),
|
||||
.pfn = __phys_to_pfn(REALVIEW_PBX_TILE_GIC_CPU_BASE),
|
||||
.virtual = IO_ADDRESS(REALVIEW_PBX_TILE_SCU_BASE),
|
||||
.pfn = __phys_to_pfn(REALVIEW_PBX_TILE_SCU_BASE),
|
||||
.length = SZ_4K,
|
||||
.type = MT_DEVICE,
|
||||
}, {
|
||||
|
|
|
@ -1,10 +0,0 @@
|
|||
/*
|
||||
* arch/arm/mach-rpc/include/mach/vmalloc.h
|
||||
*
|
||||
* Copyright (C) 1997 Russell King
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
#define VMALLOC_END 0xdc000000UL
|
|
@ -1,20 +0,0 @@
|
|||
/* arch/arm/mach-s3c2410/include/mach/vmalloc.h
|
||||
*
|
||||
* from arch/arm/mach-iop3xx/include/mach/vmalloc.h
|
||||
*
|
||||
* Copyright (c) 2003 Simtec Electronics <linux@simtec.co.uk>
|
||||
* http://www.simtec.co.uk/products/SWLINUX/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* S3C2410 vmalloc definition
|
||||
*/
|
||||
|
||||
#ifndef __ASM_ARCH_VMALLOC_H
|
||||
#define __ASM_ARCH_VMALLOC_H
|
||||
|
||||
#define VMALLOC_END 0xF6000000UL
|
||||
|
||||
#endif /* __ASM_ARCH_VMALLOC_H */
|
|
@ -1,20 +0,0 @@
|
|||
/* arch/arm/mach-s3c64xx/include/mach/vmalloc.h
|
||||
*
|
||||
* from arch/arm/mach-iop3xx/include/mach/vmalloc.h
|
||||
*
|
||||
* Copyright (c) 2003 Simtec Electronics <linux@simtec.co.uk>
|
||||
* http://www.simtec.co.uk/products/SWLINUX/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* S3C6400 vmalloc definition
|
||||
*/
|
||||
|
||||
#ifndef __ASM_ARCH_VMALLOC_H
|
||||
#define __ASM_ARCH_VMALLOC_H
|
||||
|
||||
#define VMALLOC_END 0xF6000000UL
|
||||
|
||||
#endif /* __ASM_ARCH_VMALLOC_H */
|
|
@ -1,20 +0,0 @@
|
|||
/* linux/arch/arm/mach-s5p64x0/include/mach/vmalloc.h
|
||||
*
|
||||
* Copyright (c) 2010 Samsung Electronics Co., Ltd.
|
||||
* http://www.samsung.com
|
||||
*
|
||||
* Copyright 2010 Ben Dooks <ben-linux@fluff.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* S3C6400 vmalloc definition
|
||||
*/
|
||||
|
||||
#ifndef __ASM_ARCH_VMALLOC_H
|
||||
#define __ASM_ARCH_VMALLOC_H
|
||||
|
||||
#define VMALLOC_END 0xF6000000UL
|
||||
|
||||
#endif /* __ASM_ARCH_VMALLOC_H */
|
|
@ -1,17 +0,0 @@
|
|||
/* arch/arm/mach-s5pc100/include/mach/vmalloc.h
|
||||
*
|
||||
* Copyright 2010 Ben Dooks <ben-linux@fluff.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* S3C6400 vmalloc definition
|
||||
*/
|
||||
|
||||
#ifndef __ASM_ARCH_VMALLOC_H
|
||||
#define __ASM_ARCH_VMALLOC_H
|
||||
|
||||
#define VMALLOC_END 0xF6000000UL
|
||||
|
||||
#endif /* __ASM_ARCH_VMALLOC_H */
|
|
@ -1,22 +0,0 @@
|
|||
/* linux/arch/arm/mach-s5p6442/include/mach/vmalloc.h
|
||||
*
|
||||
* Copyright 2010 Ben Dooks <ben-linux@fluff.org>
|
||||
*
|
||||
* Copyright (c) 2010 Samsung Electronics Co., Ltd.
|
||||
* http://www.samsung.com/
|
||||
*
|
||||
* Based on arch/arm/mach-s5p6442/include/mach/vmalloc.h
|
||||
*
|
||||
* S5PV210 vmalloc definition
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#ifndef __ASM_ARCH_VMALLOC_H
|
||||
#define __ASM_ARCH_VMALLOC_H __FILE__
|
||||
|
||||
#define VMALLOC_END 0xF6000000UL
|
||||
|
||||
#endif /* __ASM_ARCH_VMALLOC_H */
|
|
@ -1,4 +0,0 @@
|
|||
/*
|
||||
* arch/arm/mach-sa1100/include/mach/vmalloc.h
|
||||
*/
|
||||
#define VMALLOC_END (0xe8000000UL)
|
|
@ -1,4 +0,0 @@
|
|||
/*
|
||||
* arch/arm/mach-shark/include/mach/vmalloc.h
|
||||
*/
|
||||
#define VMALLOC_END 0xd0000000UL
|
|
@ -1,7 +0,0 @@
|
|||
#ifndef __ASM_MACH_VMALLOC_H
|
||||
#define __ASM_MACH_VMALLOC_H
|
||||
|
||||
/* Vmalloc at ... - 0xe5ffffff */
|
||||
#define VMALLOC_END 0xe6000000UL
|
||||
|
||||
#endif /* __ASM_MACH_VMALLOC_H */
|
|
@ -1,19 +0,0 @@
|
|||
/*
|
||||
* arch/arm/mach-spear3xx/include/mach/vmalloc.h
|
||||
*
|
||||
* Defining Vmalloc area for SPEAr3xx machine family
|
||||
*
|
||||
* Copyright (C) 2009 ST Microelectronics
|
||||
* Viresh Kumar<viresh.kumar@st.com>
|
||||
*
|
||||
* This file is licensed under the terms of the GNU General Public
|
||||
* License version 2. This program is licensed "as is" without any
|
||||
* warranty of any kind, whether express or implied.
|
||||
*/
|
||||
|
||||
#ifndef __MACH_VMALLOC_H
|
||||
#define __MACH_VMALLOC_H
|
||||
|
||||
#include <plat/vmalloc.h>
|
||||
|
||||
#endif /* __MACH_VMALLOC_H */
|
|
@ -1,19 +0,0 @@
|
|||
/*
|
||||
* arch/arm/mach-spear6xx/include/mach/vmalloc.h
|
||||
*
|
||||
* Defining Vmalloc area for SPEAr6xx machine family
|
||||
*
|
||||
* Copyright (C) 2009 ST Microelectronics
|
||||
* Rajeev Kumar<rajeev-dlh.kumar@st.com>
|
||||
*
|
||||
* This file is licensed under the terms of the GNU General Public
|
||||
* License version 2. This program is licensed "as is" without any
|
||||
* warranty of any kind, whether express or implied.
|
||||
*/
|
||||
|
||||
#ifndef __MACH_VMALLOC_H
|
||||
#define __MACH_VMALLOC_H
|
||||
|
||||
#include <plat/vmalloc.h>
|
||||
|
||||
#endif /* __MACH_VMALLOC_H */
|
|
@ -71,12 +71,6 @@
|
|||
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
#define __arch_ioremap tegra_ioremap
|
||||
#define __arch_iounmap tegra_iounmap
|
||||
|
||||
void __iomem *tegra_ioremap(unsigned long phys, size_t size, unsigned int type);
|
||||
void tegra_iounmap(volatile void __iomem *addr);
|
||||
|
||||
#define IO_ADDRESS(n) (IO_TO_VIRT(n))
|
||||
|
||||
#ifdef CONFIG_TEGRA_PCI
|
||||
|
|
|
@ -1,28 +0,0 @@
|
|||
/*
|
||||
* arch/arm/mach-tegra/include/mach/vmalloc.h
|
||||
*
|
||||
* Copyright (C) 2010 Google, Inc.
|
||||
*
|
||||
* Author:
|
||||
* Colin Cross <ccross@google.com>
|
||||
* Erik Gilling <konkers@google.com>
|
||||
*
|
||||
* This software is licensed under the terms of the GNU General Public
|
||||
* License version 2, as published by the Free Software Foundation, and
|
||||
* may be copied, distributed, and modified under those terms.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __MACH_TEGRA_VMALLOC_H
|
||||
#define __MACH_TEGRA_VMALLOC_H
|
||||
|
||||
#include <asm/sizes.h>
|
||||
|
||||
#define VMALLOC_END 0xFE000000UL
|
||||
|
||||
#endif
|
|
@ -60,24 +60,3 @@ void __init tegra_map_common_io(void)
|
|||
{
|
||||
iotable_init(tegra_io_desc, ARRAY_SIZE(tegra_io_desc));
|
||||
}
|
||||
|
||||
/*
|
||||
* Intercept ioremap() requests for addresses in our fixed mapping regions.
|
||||
*/
|
||||
void __iomem *tegra_ioremap(unsigned long p, size_t size, unsigned int type)
|
||||
{
|
||||
void __iomem *v = IO_ADDRESS(p);
|
||||
if (v == NULL)
|
||||
v = __arm_ioremap(p, size, type);
|
||||
return v;
|
||||
}
|
||||
EXPORT_SYMBOL(tegra_ioremap);
|
||||
|
||||
void tegra_iounmap(volatile void __iomem *addr)
|
||||
{
|
||||
unsigned long virt = (unsigned long)addr;
|
||||
|
||||
if (virt >= VMALLOC_START && virt < VMALLOC_END)
|
||||
__iounmap(addr);
|
||||
}
|
||||
EXPORT_SYMBOL(tegra_iounmap);
|
||||
|
|
|
@ -1,12 +0,0 @@
|
|||
/*
|
||||
*
|
||||
* arch/arm/mach-u300/include/mach/vmalloc.h
|
||||
*
|
||||
*
|
||||
* Copyright (C) 2006-2009 ST-Ericsson AB
|
||||
* License terms: GNU General Public License (GPL) version 2
|
||||
* Virtual memory allocations
|
||||
* End must be above the I/O registers and on an even 2MiB boundary.
|
||||
* Author: Linus Walleij <linus.walleij@stericsson.com>
|
||||
*/
|
||||
#define VMALLOC_END 0xfe800000UL
|
|
@ -1,18 +0,0 @@
|
|||
/*
|
||||
* Copyright (C) 2009 ST-Ericsson
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
#define VMALLOC_END 0xf0000000UL
|
|
@ -141,11 +141,6 @@ static struct map_desc versatile_io_desc[] __initdata = {
|
|||
},
|
||||
#ifdef CONFIG_MACH_VERSATILE_AB
|
||||
{
|
||||
.virtual = IO_ADDRESS(VERSATILE_GPIO0_BASE),
|
||||
.pfn = __phys_to_pfn(VERSATILE_GPIO0_BASE),
|
||||
.length = SZ_4K,
|
||||
.type = MT_DEVICE
|
||||
}, {
|
||||
.virtual = IO_ADDRESS(VERSATILE_IB2_BASE),
|
||||
.pfn = __phys_to_pfn(VERSATILE_IB2_BASE),
|
||||
.length = SZ_64M,
|
||||
|
|
|
@ -1,21 +0,0 @@
|
|||
/*
|
||||
* arch/arm/mach-versatile/include/mach/vmalloc.h
|
||||
*
|
||||
* Copyright (C) 2003 ARM Limited
|
||||
* Copyright (C) 2000 Russell King.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
#define VMALLOC_END 0xd8000000UL
|
|
@ -1,21 +0,0 @@
|
|||
/*
|
||||
* arch/arm/mach-vexpress/include/mach/vmalloc.h
|
||||
*
|
||||
* Copyright (C) 2003 ARM Limited
|
||||
* Copyright (C) 2000 Russell King.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
#define VMALLOC_END 0xf8000000UL
|
|
@ -1,20 +0,0 @@
|
|||
/*
|
||||
* arch/arm/mach-vt8500/include/mach/vmalloc.h
|
||||
*
|
||||
* Copyright (C) 2000 Russell King.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
#define VMALLOC_END 0xd0000000UL
|
|
@ -1,23 +0,0 @@
|
|||
/*
|
||||
* arch/arm/mach-w90x900/include/mach/vmalloc.h
|
||||
*
|
||||
* Copyright (c) 2008 Nuvoton technology corporation
|
||||
* All rights reserved.
|
||||
*
|
||||
* Wan ZongShun <mcuos.com@gmail.com>
|
||||
*
|
||||
* Based on arch/arm/mach-s3c2410/include/mach/vmalloc.h
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __ASM_ARCH_VMALLOC_H
|
||||
#define __ASM_ARCH_VMALLOC_H
|
||||
|
||||
#define VMALLOC_END (0xe0000000UL)
|
||||
|
||||
#endif /* __ASM_ARCH_VMALLOC_H */
|
|
@ -1,20 +0,0 @@
|
|||
/* arch/arm/mach-zynq/include/mach/vmalloc.h
|
||||
*
|
||||
* Copyright (C) 2011 Xilinx
|
||||
*
|
||||
* This software is licensed under the terms of the GNU General Public
|
||||
* License version 2, as published by the Free Software Foundation, and
|
||||
* may be copied, distributed, and modified under those terms.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#ifndef __MACH_VMALLOC_H__
|
||||
#define __MACH_VMALLOC_H__
|
||||
|
||||
#define VMALLOC_END 0xE0000000UL
|
||||
|
||||
#endif
|
|
@ -20,7 +20,6 @@
|
|||
#include <linux/highmem.h>
|
||||
#include <linux/gfp.h>
|
||||
#include <linux/memblock.h>
|
||||
#include <linux/sort.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/prom.h>
|
||||
|
@ -134,30 +133,18 @@ void show_mem(unsigned int filter)
|
|||
}
|
||||
|
||||
static void __init find_limits(unsigned long *min, unsigned long *max_low,
|
||||
unsigned long *max_high)
|
||||
unsigned long *max_high)
|
||||
{
|
||||
struct meminfo *mi = &meminfo;
|
||||
int i;
|
||||
|
||||
*min = -1UL;
|
||||
*max_low = *max_high = 0;
|
||||
|
||||
for_each_bank (i, mi) {
|
||||
struct membank *bank = &mi->bank[i];
|
||||
unsigned long start, end;
|
||||
|
||||
start = bank_pfn_start(bank);
|
||||
end = bank_pfn_end(bank);
|
||||
|
||||
if (*min > start)
|
||||
*min = start;
|
||||
if (*max_high < end)
|
||||
*max_high = end;
|
||||
if (bank->highmem)
|
||||
continue;
|
||||
if (*max_low < end)
|
||||
*max_low = end;
|
||||
}
|
||||
/* This assumes the meminfo array is properly sorted */
|
||||
*min = bank_pfn_start(&mi->bank[0]);
|
||||
for_each_bank (i, mi)
|
||||
if (mi->bank[i].highmem)
|
||||
break;
|
||||
*max_low = bank_pfn_end(&mi->bank[i - 1]);
|
||||
*max_high = bank_pfn_end(&mi->bank[mi->nr_banks - 1]);
|
||||
}
|
||||
|
||||
static void __init arm_bootmem_init(unsigned long start_pfn,
|
||||
|
@ -319,19 +306,10 @@ static void arm_memory_present(void)
|
|||
}
|
||||
#endif
|
||||
|
||||
static int __init meminfo_cmp(const void *_a, const void *_b)
|
||||
{
|
||||
const struct membank *a = _a, *b = _b;
|
||||
long cmp = bank_pfn_start(a) - bank_pfn_start(b);
|
||||
return cmp < 0 ? -1 : cmp > 0 ? 1 : 0;
|
||||
}
|
||||
|
||||
void __init arm_memblock_init(struct meminfo *mi, struct machine_desc *mdesc)
|
||||
{
|
||||
int i;
|
||||
|
||||
sort(&meminfo.bank, meminfo.nr_banks, sizeof(meminfo.bank[0]), meminfo_cmp, NULL);
|
||||
|
||||
memblock_init();
|
||||
for (i = 0; i < mi->nr_banks; i++)
|
||||
memblock_add(mi->bank[i].start, mi->bank[i].size);
|
||||
|
@ -403,8 +381,6 @@ void __init bootmem_init(void)
|
|||
*/
|
||||
arm_bootmem_free(min, max_low, max_high);
|
||||
|
||||
high_memory = __va(((phys_addr_t)max_low << PAGE_SHIFT) - 1) + 1;
|
||||
|
||||
/*
|
||||
* 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
|
||||
|
|
|
@ -36,12 +36,6 @@
|
|||
#include <asm/mach/map.h>
|
||||
#include "mm.h"
|
||||
|
||||
/*
|
||||
* Used by ioremap() and iounmap() code to mark (super)section-mapped
|
||||
* I/O regions in vm_struct->flags field.
|
||||
*/
|
||||
#define VM_ARM_SECTION_MAPPING 0x80000000
|
||||
|
||||
int ioremap_page(unsigned long virt, unsigned long phys,
|
||||
const struct mem_type *mtype)
|
||||
{
|
||||
|
@ -201,12 +195,6 @@ void __iomem * __arm_ioremap_pfn_caller(unsigned long pfn,
|
|||
if (pfn >= 0x100000 && (__pfn_to_phys(pfn) & ~SUPERSECTION_MASK))
|
||||
return NULL;
|
||||
|
||||
/*
|
||||
* Don't allow RAM to be mapped - this causes problems with ARMv6+
|
||||
*/
|
||||
if (WARN_ON(pfn_valid(pfn)))
|
||||
return NULL;
|
||||
|
||||
type = get_mem_type(mtype);
|
||||
if (!type)
|
||||
return NULL;
|
||||
|
@ -216,6 +204,34 @@ void __iomem * __arm_ioremap_pfn_caller(unsigned long pfn,
|
|||
*/
|
||||
size = PAGE_ALIGN(offset + size);
|
||||
|
||||
/*
|
||||
* Try to reuse one of the static mapping whenever possible.
|
||||
*/
|
||||
read_lock(&vmlist_lock);
|
||||
for (area = vmlist; area; area = area->next) {
|
||||
if (!size || (sizeof(phys_addr_t) == 4 && pfn >= 0x100000))
|
||||
break;
|
||||
if (!(area->flags & VM_ARM_STATIC_MAPPING))
|
||||
continue;
|
||||
if ((area->flags & VM_ARM_MTYPE_MASK) != VM_ARM_MTYPE(mtype))
|
||||
continue;
|
||||
if (__phys_to_pfn(area->phys_addr) > pfn ||
|
||||
__pfn_to_phys(pfn) + size-1 > area->phys_addr + area->size-1)
|
||||
continue;
|
||||
/* we can drop the lock here as we know *area is static */
|
||||
read_unlock(&vmlist_lock);
|
||||
addr = (unsigned long)area->addr;
|
||||
addr += __pfn_to_phys(pfn) - area->phys_addr;
|
||||
return (void __iomem *) (offset + addr);
|
||||
}
|
||||
read_unlock(&vmlist_lock);
|
||||
|
||||
/*
|
||||
* Don't allow RAM to be mapped - this causes problems with ARMv6+
|
||||
*/
|
||||
if (WARN_ON(pfn_valid(pfn)))
|
||||
return NULL;
|
||||
|
||||
area = get_vm_area_caller(size, VM_IOREMAP, caller);
|
||||
if (!area)
|
||||
return NULL;
|
||||
|
@ -313,28 +329,34 @@ __arm_ioremap_exec(unsigned long phys_addr, size_t size, bool cached)
|
|||
void __iounmap(volatile void __iomem *io_addr)
|
||||
{
|
||||
void *addr = (void *)(PAGE_MASK & (unsigned long)io_addr);
|
||||
#ifndef CONFIG_SMP
|
||||
struct vm_struct **p, *tmp;
|
||||
struct vm_struct *vm;
|
||||
|
||||
/*
|
||||
* If this is a section based mapping we need to handle it
|
||||
* specially as the VM subsystem does not know how to handle
|
||||
* such a beast. We need the lock here b/c we need to clear
|
||||
* all the mappings before the area can be reclaimed
|
||||
* by someone else.
|
||||
*/
|
||||
write_lock(&vmlist_lock);
|
||||
for (p = &vmlist ; (tmp = *p) ; p = &tmp->next) {
|
||||
if ((tmp->flags & VM_IOREMAP) && (tmp->addr == addr)) {
|
||||
if (tmp->flags & VM_ARM_SECTION_MAPPING) {
|
||||
unmap_area_sections((unsigned long)tmp->addr,
|
||||
tmp->size);
|
||||
}
|
||||
read_lock(&vmlist_lock);
|
||||
for (vm = vmlist; vm; vm = vm->next) {
|
||||
if (vm->addr > addr)
|
||||
break;
|
||||
if (!(vm->flags & VM_IOREMAP))
|
||||
continue;
|
||||
/* If this is a static mapping we must leave it alone */
|
||||
if ((vm->flags & VM_ARM_STATIC_MAPPING) &&
|
||||
(vm->addr <= addr) && (vm->addr + vm->size > addr)) {
|
||||
read_unlock(&vmlist_lock);
|
||||
return;
|
||||
}
|
||||
#ifndef CONFIG_SMP
|
||||
/*
|
||||
* If this is a section based mapping we need to handle it
|
||||
* specially as the VM subsystem does not know how to handle
|
||||
* such a beast.
|
||||
*/
|
||||
if ((vm->addr == addr) &&
|
||||
(vm->flags & VM_ARM_SECTION_MAPPING)) {
|
||||
unmap_area_sections((unsigned long)vm->addr, vm->size);
|
||||
break;
|
||||
}
|
||||
}
|
||||
write_unlock(&vmlist_lock);
|
||||
#endif
|
||||
}
|
||||
read_unlock(&vmlist_lock);
|
||||
|
||||
vunmap(addr);
|
||||
}
|
||||
|
|
|
@ -21,6 +21,20 @@ const struct mem_type *get_mem_type(unsigned int type);
|
|||
|
||||
extern void __flush_dcache_page(struct address_space *mapping, struct page *page);
|
||||
|
||||
/*
|
||||
* ARM specific vm_struct->flags bits.
|
||||
*/
|
||||
|
||||
/* (super)section-mapped I/O regions used by ioremap()/iounmap() */
|
||||
#define VM_ARM_SECTION_MAPPING 0x80000000
|
||||
|
||||
/* permanent static mappings from iotable_init() */
|
||||
#define VM_ARM_STATIC_MAPPING 0x40000000
|
||||
|
||||
/* mapping type (attributes) for permanent static mappings */
|
||||
#define VM_ARM_MTYPE(mt) ((mt) << 20)
|
||||
#define VM_ARM_MTYPE_MASK (0x1f << 20)
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ZONE_DMA
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
#include <linux/nodemask.h>
|
||||
#include <linux/memblock.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/vmalloc.h>
|
||||
|
||||
#include <asm/cputype.h>
|
||||
#include <asm/sections.h>
|
||||
|
@ -529,13 +530,18 @@ EXPORT_SYMBOL(phys_mem_access_prot);
|
|||
|
||||
#define vectors_base() (vectors_high() ? 0xffff0000 : 0)
|
||||
|
||||
static void __init *early_alloc(unsigned long sz)
|
||||
static void __init *early_alloc_aligned(unsigned long sz, unsigned long align)
|
||||
{
|
||||
void *ptr = __va(memblock_alloc(sz, sz));
|
||||
void *ptr = __va(memblock_alloc(sz, align));
|
||||
memset(ptr, 0, sz);
|
||||
return ptr;
|
||||
}
|
||||
|
||||
static void __init *early_alloc(unsigned long sz)
|
||||
{
|
||||
return early_alloc_aligned(sz, sz);
|
||||
}
|
||||
|
||||
static pte_t * __init early_pte_alloc(pmd_t *pmd, unsigned long addr, unsigned long prot)
|
||||
{
|
||||
if (pmd_none(*pmd)) {
|
||||
|
@ -685,9 +691,10 @@ static void __init create_mapping(struct map_desc *md)
|
|||
}
|
||||
|
||||
if ((md->type == MT_DEVICE || md->type == MT_ROM) &&
|
||||
md->virtual >= PAGE_OFFSET && md->virtual < VMALLOC_END) {
|
||||
md->virtual >= PAGE_OFFSET &&
|
||||
(md->virtual < VMALLOC_START || md->virtual >= VMALLOC_END)) {
|
||||
printk(KERN_WARNING "BUG: mapping for 0x%08llx"
|
||||
" at 0x%08lx overlaps vmalloc space\n",
|
||||
" at 0x%08lx out of vmalloc space\n",
|
||||
(long long)__pfn_to_phys((u64)md->pfn), md->virtual);
|
||||
}
|
||||
|
||||
|
@ -729,18 +736,33 @@ static void __init create_mapping(struct map_desc *md)
|
|||
*/
|
||||
void __init iotable_init(struct map_desc *io_desc, int nr)
|
||||
{
|
||||
int i;
|
||||
struct map_desc *md;
|
||||
struct vm_struct *vm;
|
||||
|
||||
for (i = 0; i < nr; i++)
|
||||
create_mapping(io_desc + i);
|
||||
if (!nr)
|
||||
return;
|
||||
|
||||
vm = early_alloc_aligned(sizeof(*vm) * nr, __alignof__(*vm));
|
||||
|
||||
for (md = io_desc; nr; md++, nr--) {
|
||||
create_mapping(md);
|
||||
vm->addr = (void *)(md->virtual & PAGE_MASK);
|
||||
vm->size = PAGE_ALIGN(md->length + (md->virtual & ~PAGE_MASK));
|
||||
vm->phys_addr = __pfn_to_phys(md->pfn);
|
||||
vm->flags = VM_IOREMAP | VM_ARM_STATIC_MAPPING;
|
||||
vm->flags |= VM_ARM_MTYPE(md->type);
|
||||
vm->caller = iotable_init;
|
||||
vm_area_add_early(vm++);
|
||||
}
|
||||
}
|
||||
|
||||
static void * __initdata vmalloc_min = (void *)(VMALLOC_END - SZ_128M);
|
||||
static void * __initdata vmalloc_min =
|
||||
(void *)(VMALLOC_END - (240 << 20) - VMALLOC_OFFSET);
|
||||
|
||||
/*
|
||||
* vmalloc=size forces the vmalloc area to be exactly 'size'
|
||||
* bytes. This can be used to increase (or decrease) the vmalloc
|
||||
* area - the default is 128m.
|
||||
* area - the default is 240m.
|
||||
*/
|
||||
static int __init early_vmalloc(char *arg)
|
||||
{
|
||||
|
@ -860,6 +882,7 @@ void __init sanity_check_meminfo(void)
|
|||
}
|
||||
#endif
|
||||
meminfo.nr_banks = j;
|
||||
high_memory = __va(lowmem_limit - 1) + 1;
|
||||
memblock_set_current_limit(lowmem_limit);
|
||||
}
|
||||
|
||||
|
@ -890,10 +913,10 @@ static inline void prepare_page_table(void)
|
|||
|
||||
/*
|
||||
* Clear out all the kernel space mappings, except for the first
|
||||
* memory bank, up to the end of the vmalloc region.
|
||||
* memory bank, up to the vmalloc region.
|
||||
*/
|
||||
for (addr = __phys_to_virt(end);
|
||||
addr < VMALLOC_END; addr += PMD_SIZE)
|
||||
addr < VMALLOC_START; addr += PMD_SIZE)
|
||||
pmd_clear(pmd_off_k(addr));
|
||||
}
|
||||
|
||||
|
@ -920,8 +943,8 @@ void __init arm_mm_memblock_reserve(void)
|
|||
}
|
||||
|
||||
/*
|
||||
* Set up device the mappings. Since we clear out the page tables for all
|
||||
* mappings above VMALLOC_END, we will remove any debug device mappings.
|
||||
* Set up the device mappings. Since we clear out the page tables for all
|
||||
* mappings above VMALLOC_START, we will remove any debug device mappings.
|
||||
* This means you have to be careful how you debug this function, or any
|
||||
* called function. This means you can't use any function or debugging
|
||||
* method which may touch any device, otherwise the kernel _will_ crash.
|
||||
|
@ -936,7 +959,7 @@ static void __init devicemaps_init(struct machine_desc *mdesc)
|
|||
*/
|
||||
vectors_page = early_alloc(PAGE_SIZE);
|
||||
|
||||
for (addr = VMALLOC_END; addr; addr += PMD_SIZE)
|
||||
for (addr = VMALLOC_START; addr; addr += PMD_SIZE)
|
||||
pmd_clear(pmd_off_k(addr));
|
||||
|
||||
/*
|
||||
|
|
|
@ -29,6 +29,8 @@ void __init arm_mm_memblock_reserve(void)
|
|||
|
||||
void __init sanity_check_meminfo(void)
|
||||
{
|
||||
phys_addr_t end = bank_phys_end(&meminfo.bank[meminfo.nr_banks - 1]);
|
||||
high_memory = __va(end - 1) + 1;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -10,7 +10,6 @@ obj-$(CONFIG_ARCH_IOP32X) += i2c.o
|
|||
obj-$(CONFIG_ARCH_IOP32X) += pci.o
|
||||
obj-$(CONFIG_ARCH_IOP32X) += setup.o
|
||||
obj-$(CONFIG_ARCH_IOP32X) += time.o
|
||||
obj-$(CONFIG_ARCH_IOP32X) += io.o
|
||||
obj-$(CONFIG_ARCH_IOP32X) += cp6.o
|
||||
obj-$(CONFIG_ARCH_IOP32X) += adma.o
|
||||
obj-$(CONFIG_ARCH_IOP32X) += pmu.o
|
||||
|
@ -21,7 +20,6 @@ obj-$(CONFIG_ARCH_IOP33X) += i2c.o
|
|||
obj-$(CONFIG_ARCH_IOP33X) += pci.o
|
||||
obj-$(CONFIG_ARCH_IOP33X) += setup.o
|
||||
obj-$(CONFIG_ARCH_IOP33X) += time.o
|
||||
obj-$(CONFIG_ARCH_IOP33X) += io.o
|
||||
obj-$(CONFIG_ARCH_IOP33X) += cp6.o
|
||||
obj-$(CONFIG_ARCH_IOP33X) += adma.o
|
||||
obj-$(CONFIG_ARCH_IOP33X) += pmu.o
|
||||
|
|
|
@ -1,59 +0,0 @@
|
|||
/*
|
||||
* iop3xx custom ioremap implementation
|
||||
* Copyright (c) 2006, Intel Corporation.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms and conditions of the GNU General Public License,
|
||||
* version 2, as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program; if not, write to the Free Software Foundation, Inc., 59 Temple
|
||||
* Place - Suite 330, Boston, MA 02111-1307 USA.
|
||||
*
|
||||
*/
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/io.h>
|
||||
#include <mach/hardware.h>
|
||||
|
||||
void * __iomem __iop3xx_ioremap(unsigned long cookie, size_t size,
|
||||
unsigned int mtype)
|
||||
{
|
||||
void __iomem * retval;
|
||||
|
||||
switch (cookie) {
|
||||
case IOP3XX_PCI_LOWER_IO_PA ... IOP3XX_PCI_UPPER_IO_PA:
|
||||
retval = (void *) IOP3XX_PCI_IO_PHYS_TO_VIRT(cookie);
|
||||
break;
|
||||
case IOP3XX_PERIPHERAL_PHYS_BASE ... IOP3XX_PERIPHERAL_UPPER_PA:
|
||||
retval = (void *) IOP3XX_PMMR_PHYS_TO_VIRT(cookie);
|
||||
break;
|
||||
default:
|
||||
retval = __arm_ioremap_caller(cookie, size, mtype,
|
||||
__builtin_return_address(0));
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
EXPORT_SYMBOL(__iop3xx_ioremap);
|
||||
|
||||
void __iop3xx_iounmap(void __iomem *addr)
|
||||
{
|
||||
extern void __iounmap(volatile void __iomem *addr);
|
||||
|
||||
switch ((u32) addr) {
|
||||
case IOP3XX_PCI_LOWER_IO_VA ... IOP3XX_PCI_UPPER_IO_VA:
|
||||
case IOP3XX_PERIPHERAL_VIRT_BASE ... IOP3XX_PERIPHERAL_UPPER_VA:
|
||||
goto skip;
|
||||
}
|
||||
__iounmap(addr);
|
||||
|
||||
skip:
|
||||
return;
|
||||
}
|
||||
EXPORT_SYMBOL(__iop3xx_iounmap);
|
|
@ -12,8 +12,6 @@
|
|||
#ifndef __MACH_MX1_H__
|
||||
#define __MACH_MX1_H__
|
||||
|
||||
#include <mach/vmalloc.h>
|
||||
|
||||
/*
|
||||
* Memory map
|
||||
*/
|
||||
|
|
|
@ -1,22 +0,0 @@
|
|||
/*
|
||||
* Copyright (C) 2000 Russell King.
|
||||
* Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#ifndef __ASM_ARCH_MXC_VMALLOC_H__
|
||||
#define __ASM_ARCH_MXC_VMALLOC_H__
|
||||
|
||||
/* vmalloc ending address */
|
||||
#define VMALLOC_END 0xf4000000UL
|
||||
|
||||
#endif /* __ASM_ARCH_MXC_VMALLOC_H__ */
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
# Common support
|
||||
obj-y := common.o sram.o clock.o devices.o dma.o mux.o \
|
||||
usb.o fb.o io.o counter_32k.o
|
||||
usb.o fb.o counter_32k.o
|
||||
obj-m :=
|
||||
obj-n :=
|
||||
obj- :=
|
||||
|
|
|
@ -66,3 +66,10 @@ void __init omap_reserve(void)
|
|||
omap_vram_reserve_sdram_memblock();
|
||||
omap_dsp_reserve_sdram_memblock();
|
||||
}
|
||||
|
||||
void __init omap_init_consistent_dma_size(void)
|
||||
{
|
||||
#ifdef CONFIG_FB_OMAP_CONSISTENT_DMA_SIZE
|
||||
init_consistent_dma_size(CONFIG_FB_OMAP_CONSISTENT_DMA_SIZE << 20);
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -247,8 +247,6 @@
|
|||
* NOTE: Please use ioremap + __raw_read/write where possible instead of these
|
||||
*/
|
||||
|
||||
void omap_ioremap_init(void);
|
||||
|
||||
extern u8 omap_readb(u32 pa);
|
||||
extern u16 omap_readw(u32 pa);
|
||||
extern u32 omap_readl(u32 pa);
|
||||
|
@ -260,12 +258,6 @@ struct omap_sdrc_params;
|
|||
extern void omap_sdrc_init(struct omap_sdrc_params *sdrc_cs0,
|
||||
struct omap_sdrc_params *sdrc_cs1);
|
||||
|
||||
#define __arch_ioremap omap_ioremap
|
||||
#define __arch_iounmap omap_iounmap
|
||||
|
||||
void __iomem *omap_ioremap(unsigned long phys, size_t size, unsigned int type);
|
||||
void omap_iounmap(volatile void __iomem *addr);
|
||||
|
||||
extern void __init omap_init_consistent_dma_size(void);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,159 +0,0 @@
|
|||
/*
|
||||
* Common io.c file
|
||||
* This file is created by Russell King <rmk+kernel@arm.linux.org.uk>
|
||||
*
|
||||
* Copyright (C) 2009 Texas Instruments
|
||||
* Added OMAP4 support - Santosh Shilimkar <santosh.shilimkar@ti.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
#include <linux/module.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
|
||||
#include <plat/omap7xx.h>
|
||||
#include <plat/omap1510.h>
|
||||
#include <plat/omap16xx.h>
|
||||
#include <plat/omap24xx.h>
|
||||
#include <plat/omap34xx.h>
|
||||
#include <plat/omap44xx.h>
|
||||
|
||||
#define BETWEEN(p,st,sz) ((p) >= (st) && (p) < ((st) + (sz)))
|
||||
#define XLATE(p,pst,vst) ((void __iomem *)((p) - (pst) + (vst)))
|
||||
|
||||
static int initialized;
|
||||
|
||||
/*
|
||||
* Intercept ioremap() requests for addresses in our fixed mapping regions.
|
||||
*/
|
||||
void __iomem *omap_ioremap(unsigned long p, size_t size, unsigned int type)
|
||||
{
|
||||
|
||||
WARN(!initialized, "Do not use ioremap before init_early\n");
|
||||
|
||||
#ifdef CONFIG_ARCH_OMAP1
|
||||
if (cpu_class_is_omap1()) {
|
||||
if (BETWEEN(p, OMAP1_IO_PHYS, OMAP1_IO_SIZE))
|
||||
return XLATE(p, OMAP1_IO_PHYS, OMAP1_IO_VIRT);
|
||||
}
|
||||
if (cpu_is_omap7xx()) {
|
||||
if (BETWEEN(p, OMAP7XX_DSP_BASE, OMAP7XX_DSP_SIZE))
|
||||
return XLATE(p, OMAP7XX_DSP_BASE, OMAP7XX_DSP_START);
|
||||
|
||||
if (BETWEEN(p, OMAP7XX_DSPREG_BASE, OMAP7XX_DSPREG_SIZE))
|
||||
return XLATE(p, OMAP7XX_DSPREG_BASE,
|
||||
OMAP7XX_DSPREG_START);
|
||||
}
|
||||
if (cpu_is_omap15xx()) {
|
||||
if (BETWEEN(p, OMAP1510_DSP_BASE, OMAP1510_DSP_SIZE))
|
||||
return XLATE(p, OMAP1510_DSP_BASE, OMAP1510_DSP_START);
|
||||
|
||||
if (BETWEEN(p, OMAP1510_DSPREG_BASE, OMAP1510_DSPREG_SIZE))
|
||||
return XLATE(p, OMAP1510_DSPREG_BASE,
|
||||
OMAP1510_DSPREG_START);
|
||||
}
|
||||
if (cpu_is_omap16xx()) {
|
||||
if (BETWEEN(p, OMAP16XX_DSP_BASE, OMAP16XX_DSP_SIZE))
|
||||
return XLATE(p, OMAP16XX_DSP_BASE, OMAP16XX_DSP_START);
|
||||
|
||||
if (BETWEEN(p, OMAP16XX_DSPREG_BASE, OMAP16XX_DSPREG_SIZE))
|
||||
return XLATE(p, OMAP16XX_DSPREG_BASE,
|
||||
OMAP16XX_DSPREG_START);
|
||||
}
|
||||
#endif
|
||||
#ifdef CONFIG_ARCH_OMAP2
|
||||
if (cpu_is_omap24xx()) {
|
||||
if (BETWEEN(p, L3_24XX_PHYS, L3_24XX_SIZE))
|
||||
return XLATE(p, L3_24XX_PHYS, L3_24XX_VIRT);
|
||||
if (BETWEEN(p, L4_24XX_PHYS, L4_24XX_SIZE))
|
||||
return XLATE(p, L4_24XX_PHYS, L4_24XX_VIRT);
|
||||
}
|
||||
if (cpu_is_omap2420()) {
|
||||
if (BETWEEN(p, DSP_MEM_2420_PHYS, DSP_MEM_2420_SIZE))
|
||||
return XLATE(p, DSP_MEM_2420_PHYS, DSP_MEM_2420_VIRT);
|
||||
if (BETWEEN(p, DSP_IPI_2420_PHYS, DSP_IPI_2420_SIZE))
|
||||
return XLATE(p, DSP_IPI_2420_PHYS, DSP_IPI_2420_SIZE);
|
||||
if (BETWEEN(p, DSP_MMU_2420_PHYS, DSP_MMU_2420_SIZE))
|
||||
return XLATE(p, DSP_MMU_2420_PHYS, DSP_MMU_2420_VIRT);
|
||||
}
|
||||
if (cpu_is_omap2430()) {
|
||||
if (BETWEEN(p, L4_WK_243X_PHYS, L4_WK_243X_SIZE))
|
||||
return XLATE(p, L4_WK_243X_PHYS, L4_WK_243X_VIRT);
|
||||
if (BETWEEN(p, OMAP243X_GPMC_PHYS, OMAP243X_GPMC_SIZE))
|
||||
return XLATE(p, OMAP243X_GPMC_PHYS, OMAP243X_GPMC_VIRT);
|
||||
if (BETWEEN(p, OMAP243X_SDRC_PHYS, OMAP243X_SDRC_SIZE))
|
||||
return XLATE(p, OMAP243X_SDRC_PHYS, OMAP243X_SDRC_VIRT);
|
||||
if (BETWEEN(p, OMAP243X_SMS_PHYS, OMAP243X_SMS_SIZE))
|
||||
return XLATE(p, OMAP243X_SMS_PHYS, OMAP243X_SMS_VIRT);
|
||||
}
|
||||
#endif
|
||||
#ifdef CONFIG_ARCH_OMAP3
|
||||
if (cpu_is_ti816x()) {
|
||||
if (BETWEEN(p, L4_34XX_PHYS, L4_34XX_SIZE))
|
||||
return XLATE(p, L4_34XX_PHYS, L4_34XX_VIRT);
|
||||
} else if (cpu_is_omap34xx()) {
|
||||
if (BETWEEN(p, L3_34XX_PHYS, L3_34XX_SIZE))
|
||||
return XLATE(p, L3_34XX_PHYS, L3_34XX_VIRT);
|
||||
if (BETWEEN(p, L4_34XX_PHYS, L4_34XX_SIZE))
|
||||
return XLATE(p, L4_34XX_PHYS, L4_34XX_VIRT);
|
||||
if (BETWEEN(p, OMAP34XX_GPMC_PHYS, OMAP34XX_GPMC_SIZE))
|
||||
return XLATE(p, OMAP34XX_GPMC_PHYS, OMAP34XX_GPMC_VIRT);
|
||||
if (BETWEEN(p, OMAP343X_SMS_PHYS, OMAP343X_SMS_SIZE))
|
||||
return XLATE(p, OMAP343X_SMS_PHYS, OMAP343X_SMS_VIRT);
|
||||
if (BETWEEN(p, OMAP343X_SDRC_PHYS, OMAP343X_SDRC_SIZE))
|
||||
return XLATE(p, OMAP343X_SDRC_PHYS, OMAP343X_SDRC_VIRT);
|
||||
if (BETWEEN(p, L4_PER_34XX_PHYS, L4_PER_34XX_SIZE))
|
||||
return XLATE(p, L4_PER_34XX_PHYS, L4_PER_34XX_VIRT);
|
||||
if (BETWEEN(p, L4_EMU_34XX_PHYS, L4_EMU_34XX_SIZE))
|
||||
return XLATE(p, L4_EMU_34XX_PHYS, L4_EMU_34XX_VIRT);
|
||||
}
|
||||
#endif
|
||||
#ifdef CONFIG_ARCH_OMAP4
|
||||
if (cpu_is_omap44xx()) {
|
||||
if (BETWEEN(p, L3_44XX_PHYS, L3_44XX_SIZE))
|
||||
return XLATE(p, L3_44XX_PHYS, L3_44XX_VIRT);
|
||||
if (BETWEEN(p, L4_44XX_PHYS, L4_44XX_SIZE))
|
||||
return XLATE(p, L4_44XX_PHYS, L4_44XX_VIRT);
|
||||
if (BETWEEN(p, OMAP44XX_GPMC_PHYS, OMAP44XX_GPMC_SIZE))
|
||||
return XLATE(p, OMAP44XX_GPMC_PHYS, OMAP44XX_GPMC_VIRT);
|
||||
if (BETWEEN(p, OMAP44XX_EMIF1_PHYS, OMAP44XX_EMIF1_SIZE))
|
||||
return XLATE(p, OMAP44XX_EMIF1_PHYS, \
|
||||
OMAP44XX_EMIF1_VIRT);
|
||||
if (BETWEEN(p, OMAP44XX_EMIF2_PHYS, OMAP44XX_EMIF2_SIZE))
|
||||
return XLATE(p, OMAP44XX_EMIF2_PHYS, \
|
||||
OMAP44XX_EMIF2_VIRT);
|
||||
if (BETWEEN(p, OMAP44XX_DMM_PHYS, OMAP44XX_DMM_SIZE))
|
||||
return XLATE(p, OMAP44XX_DMM_PHYS, OMAP44XX_DMM_VIRT);
|
||||
if (BETWEEN(p, L4_PER_44XX_PHYS, L4_PER_44XX_SIZE))
|
||||
return XLATE(p, L4_PER_44XX_PHYS, L4_PER_44XX_VIRT);
|
||||
if (BETWEEN(p, L4_EMU_44XX_PHYS, L4_EMU_44XX_SIZE))
|
||||
return XLATE(p, L4_EMU_44XX_PHYS, L4_EMU_44XX_VIRT);
|
||||
}
|
||||
#endif
|
||||
return __arm_ioremap_caller(p, size, type, __builtin_return_address(0));
|
||||
}
|
||||
EXPORT_SYMBOL(omap_ioremap);
|
||||
|
||||
void omap_iounmap(volatile void __iomem *addr)
|
||||
{
|
||||
unsigned long virt = (unsigned long)addr;
|
||||
|
||||
if (virt >= VMALLOC_START && virt < VMALLOC_END)
|
||||
__iounmap(addr);
|
||||
}
|
||||
EXPORT_SYMBOL(omap_iounmap);
|
||||
|
||||
void __init omap_init_consistent_dma_size(void)
|
||||
{
|
||||
#ifdef CONFIG_FB_OMAP_CONSISTENT_DMA_SIZE
|
||||
init_consistent_dma_size(CONFIG_FB_OMAP_CONSISTENT_DMA_SIZE << 20);
|
||||
#endif
|
||||
}
|
||||
|
||||
void __init omap_ioremap_init(void)
|
||||
{
|
||||
initialized++;
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
/*
|
||||
* arch/arm/plat-spear/include/plat/vmalloc.h
|
||||
*
|
||||
* Defining Vmalloc area for SPEAr platform
|
||||
*
|
||||
* Copyright (C) 2009 ST Microelectronics
|
||||
* Viresh Kumar<viresh.kumar@st.com>
|
||||
*
|
||||
* This file is licensed under the terms of the GNU General Public
|
||||
* License version 2. This program is licensed "as is" without any
|
||||
* warranty of any kind, whether express or implied.
|
||||
*/
|
||||
|
||||
#ifndef __PLAT_VMALLOC_H
|
||||
#define __PLAT_VMALLOC_H
|
||||
|
||||
#define VMALLOC_END 0xF0000000UL
|
||||
|
||||
#endif /* __PLAT_VMALLOC_H */
|
|
@ -1,10 +0,0 @@
|
|||
/*
|
||||
* Author: <linux@telechips.com>
|
||||
* Created: June 10, 2008
|
||||
*
|
||||
* Copyright (C) 2000 Russell King.
|
||||
* Copyright (C) 2008-2009 Telechips
|
||||
*
|
||||
* Licensed under the terms of the GPL v2.
|
||||
*/
|
||||
#define VMALLOC_END 0xf0000000UL
|
|
@ -131,6 +131,7 @@ extern long vwrite(char *buf, char *addr, unsigned long count);
|
|||
*/
|
||||
extern rwlock_t vmlist_lock;
|
||||
extern struct vm_struct *vmlist;
|
||||
extern __init void vm_area_add_early(struct vm_struct *vm);
|
||||
extern __init void vm_area_register_early(struct vm_struct *vm, size_t align);
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
|
|
29
mm/vmalloc.c
29
mm/vmalloc.c
|
@ -1117,6 +1117,32 @@ void *vm_map_ram(struct page **pages, unsigned int count, int node, pgprot_t pro
|
|||
}
|
||||
EXPORT_SYMBOL(vm_map_ram);
|
||||
|
||||
/**
|
||||
* vm_area_add_early - add vmap area early during boot
|
||||
* @vm: vm_struct to add
|
||||
*
|
||||
* This function is used to add fixed kernel vm area to vmlist before
|
||||
* vmalloc_init() is called. @vm->addr, @vm->size, and @vm->flags
|
||||
* should contain proper values and the other fields should be zero.
|
||||
*
|
||||
* DO NOT USE THIS FUNCTION UNLESS YOU KNOW WHAT YOU'RE DOING.
|
||||
*/
|
||||
void __init vm_area_add_early(struct vm_struct *vm)
|
||||
{
|
||||
struct vm_struct *tmp, **p;
|
||||
|
||||
BUG_ON(vmap_initialized);
|
||||
for (p = &vmlist; (tmp = *p) != NULL; p = &tmp->next) {
|
||||
if (tmp->addr >= vm->addr) {
|
||||
BUG_ON(tmp->addr < vm->addr + vm->size);
|
||||
break;
|
||||
} else
|
||||
BUG_ON(tmp->addr + tmp->size > vm->addr);
|
||||
}
|
||||
vm->next = *p;
|
||||
*p = vm;
|
||||
}
|
||||
|
||||
/**
|
||||
* vm_area_register_early - register vmap area early during boot
|
||||
* @vm: vm_struct to register
|
||||
|
@ -1139,8 +1165,7 @@ void __init vm_area_register_early(struct vm_struct *vm, size_t align)
|
|||
|
||||
vm->addr = (void *)addr;
|
||||
|
||||
vm->next = vmlist;
|
||||
vmlist = vm;
|
||||
vm_area_add_early(vm);
|
||||
}
|
||||
|
||||
void __init vmalloc_init(void)
|
||||
|
|
Loading…
Reference in New Issue