Re: mm: convert vma->vm_flags to 64bit

From: Russell King - ARM Linux
Date: Fri Nov 11 2011 - 03:52:55 EST


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.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/