[PATCH 07/16] mm/arm: use vm_flags_t for vma flags
Andrew Morton
akpm at linux-foundation.org
Thu Mar 22 17:21:06 EDT 2012
On Wed, 21 Mar 2012 10:56:42 +0400
Konstantin Khlebnikov <khlebnikov at openvz.org> 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.
More information about the linux-arm-kernel
mailing list