[linux-yocto] [PATCH 30/39] arm/mm: Backport of 3159f372354e8e1f5dee714663d70
Bruce Ashfield
bruce.ashfield at windriver.com
Sat Apr 12 21:06:43 PDT 2014
If you recall, I commented on the format of the upstream backported
fixes and the commit header format .. this one appears to have the
same issues as before.
Bruce
On 2014-04-11, 5:13 PM, Charlie Paul wrote:
> From: Jonas Svennebring <jonas.svennebring at lsi.com>
>
> ARM: 7840/1: LPAE: don't reject mapping /dev/mem above 4GB
>
> commit 3159f372354e8e1f5dee714663d70 upstream
>
> With LPAE enabled, physical address space is larger than 4GB. Allow mapping any
> part of it via /dev/mem by using PHYS_MASK to determine valid range.
>
> PHYS_MASK covers 40 bits with LPAE enabled and 32 bits otherwise.
>
> Reported-by: Vassili Karpov <av1474 at comtv.ru>
> Signed-off-by: Sergey Dyasly <dserrg at gmail.com>
> Acked-by: Catalin Marinas <catalin.marinas at arm.com>
> Signed-off-by: Russell King <rmk+kernel at arm.linux.org.uk>
> Signed-off-by: Jonas Svennebring <jonas.svennebring at lsi.com>
> ---
> arch/arm/mm/mmap.c | 10 ++++------
> 1 file changed, 4 insertions(+), 6 deletions(-)
>
> diff --git a/arch/arm/mm/mmap.c b/arch/arm/mm/mmap.c
> index f0ef2f7..18d6aeb 100644
> --- a/arch/arm/mm/mmap.c
> +++ b/arch/arm/mm/mmap.c
> @@ -11,7 +11,7 @@
> #include <linux/random.h>
> #include <asm/cachetype.h>
>
> -#define COLOUR_ALIGN(addr,pgoff) \
> +#define COLOUR_ALIGN(addr, pgoff) \
> ((((addr)+SHMLBA-1)&~(SHMLBA-1)) + \
> (((pgoff)<<PAGE_SHIFT) & (SHMLBA-1)))
>
> @@ -146,7 +146,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
>
> info.flags = VM_UNMAPPED_AREA_TOPDOWN;
> info.length = len;
> - info.low_limit = FIRST_USER_ADDRESS;
> + info.low_limit = PAGE_SIZE;
> info.high_limit = mm->mmap_base;
> info.align_mask = do_align ? (PAGE_MASK & (SHMLBA - 1)) : 0;
> info.align_offset = pgoff << PAGE_SHIFT;
> @@ -204,13 +204,11 @@ int valid_phys_addr_range(phys_addr_t addr, size_t size)
> }
>
> /*
> - * We don't use supersection mappings for mmap() on /dev/mem, which
> - * means that we can't map the memory area above the 4G barrier into
> - * userspace.
> + * Do not allow /dev/mem mappings beyond the supported physical range.
> */
> int valid_mmap_phys_addr_range(unsigned long pfn, size_t size)
> {
> - return !(pfn + (size >> PAGE_SHIFT) > 0x00100000);
> + return (pfn + (size >> PAGE_SHIFT)) <= (1 + (PHYS_MASK >> PAGE_SHIFT));
> }
>
> #ifdef CONFIG_STRICT_DEVMEM
>
More information about the linux-yocto
mailing list