lkml.org 
[lkml]   [2011]   [Nov]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: mm: convert vma->vm_flags to 64bit
On Wed, Nov 09, 2011 at 08:49:58PM -0800, David Rientjes wrote:
> On Thu, 10 Nov 2011, Nai Xia wrote:
>
> > Did this patch get merged at last, or on this way being merged, or
> > just dropped ?
> >
>
> I thought we were waiting to find out if it caused a problem on arm.
> Either Russell should be able to clarify that or a couple months in
> linux-next.

As I said last time, these flags are passed into assembly on ARM. For
example, we pass a pointer to the VMA, and the assembly code them loads
the vma flags to check whether VM_EXEC is set, so it knows whether it
needs to flush the instruction TLB.

Making this a 64-bit quantity then means we have to deal with the host
endian issues and the position of the VM_EXEC bit inside that 64-bit
quantity. Remembering that ARM is 32-bit, that needs additional
complexity to sort out, something like:

#ifdef __ARMEB__
#define VM_FLAGS_LOWWORD 4
#else
#define VM_FLAGS_LOWWORD 0
#endif

#if VM_EXEC >= 1<<32
#define VM_FLAG_EXEC (VM_EXEC >> 32)
#define VM_FLAG_EXECWORD 4
#else
#define VM_FLAG_EXEC VM_EXEC
#define VM_FLAG_EXECWORD 0
#endif

ldr rd, [rn, #VMA_VM_FLAGS + (VM_FLAGS_LOWWORD ^ VM_FLAG_EXECWORD)]
...
tst rd, #VM_FLAG_EXEC

which is not only rather horrible, but I also wonder whether VM_EXEC >> 32
will provide the right answer with a binutils targetting 32-bit.


\
 
 \ /
  Last update: 2011-11-11 09:55    [W:0.166 / U:0.124 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site