Messages in this thread | | | Date | Fri, 11 Nov 2011 08:52:39 +0000 | From | Russell King - ARM Linux <> | Subject | Re: 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.
| |