[linux-yocto] [PATCH 45/57] arm/mm: Backport of 3159f372354e8e1f5dee714663d70
Bruce Ashfield
bruce.ashfield at windriver.com
Thu Mar 20 01:42:52 PDT 2014
As a matter of convention, mainline backports should have exactly the
same shortlog and long log as the original commit with:
commit <foo> upstream
added after the shorlog.
So in this case:
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>
Cheers,
Bruce
On 14-03-18 12:56 AM, Charlie Paul wrote:
> From: Jonas Svennebring <jonas.svennebring at lsi.com>
>
> ARM: 7840/1: LPAE: don't reject mapping /dev/mem above 4GB
>
> 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.
>
> Signed-off-by: Jonas Svennebring <jonas.svennebring at lsi.com>
> ---
> arch/arm/mm/mmap.c | 8 +++-----
> 1 file changed, 3 insertions(+), 5 deletions(-)
>
> diff --git a/arch/arm/mm/mmap.c b/arch/arm/mm/mmap.c
> index f0ef2f7..2db5d2d 100644
> --- a/arch/arm/mm/mmap.c
> +++ b/arch/arm/mm/mmap.c
> @@ -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