[PATCH 07/16] mm/arm: use vm_flags_t for vma flags
From: akpm@linux-foundation.org (Andrew Morton)
Date: 2012-03-22 21:21:13
Also in:
linux-mm, lkml
From: akpm@linux-foundation.org (Andrew Morton)
Date: 2012-03-22 21:21:13
Also in:
linux-mm, lkml
On Wed, 21 Mar 2012 10:56:42 +0400 Konstantin Khlebnikov [off-list ref] wrote:
Cast vm_flags to unsigned int for __cpuc_flush_user_range(), because its vm_flags argument declared as unsigned int. Asssembler code wants to test VM_EXEC bit on vma->vm_flags, but for big-endian we should get upper word for this. ...--- a/arch/arm/include/asm/cacheflush.h +++ b/arch/arm/include/asm/cacheflush.h@@ -217,7 +217,7 @@ vivt_flush_cache_range(struct vm_area_struct *vma, unsigned long start, unsigned { if (cpumask_test_cpu(smp_processor_id(), mm_cpumask(vma->vm_mm))) __cpuc_flush_user_range(start & PAGE_MASK, PAGE_ALIGN(end), - vma->vm_flags); + (__force unsigned int)vma->vm_flags); }
This won't work if a later version of __cpuc_flush_user_range() needs access to newly-added flags in the upper 32 bits. I guess we don't have to do anything about it at this stage, and that if we do ever hit this problem, we'll need to put those newly-added flags into the lower 32 bits of the vm_flags_t.