Skip to contentSkip to conversation

ARM64: implement TASK_SIZE_OF

PATCH In review Colin Cross 3 participants 4 messages Jun 18, 2014 – Jun 23, 2014

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 ARM64: implement TASK_SIZE_OF

include/linux/sched.h implements TASK_SIZE_OF as TASK_SIZE if it is not set by the architecture headers. TASK_SIZE uses the current task to determine the size of the virtual address space. On a 64-bit kernel this will cause reading /proc/pid/pagemap of a 64-bit process from a 32-bit process to return EOF when it reads past 0xffffffff.

Implement TASK_SIZE_OF exactly the same as TASK_SIZE with test_tsk_thread_flag instead of test_thread_flag.

Cc stable at vger.kernel.org
---
 arch/arm64/include/asm/memory.h | 2 ++
 1 file changed, 2 insertions(+)
arch/arm64/include/asm/memory.h +2 -0
index 993bce527b85..902eb708804a 100644
@@ -56,6 +56,8 @@
 #define TASK_SIZE_32		UL(0x100000000)
 #define TASK_SIZE		(test_thread_flag(TIF_32BIT) ? \
 				TASK_SIZE_32 : TASK_SIZE_64)
+#define TASK_SIZE_OF(tsk)	(test_tsk_thread_flag(tsk, TIF_32BIT) ? \
+				TASK_SIZE_32 : TASK_SIZE_64)
 #else
 #define TASK_SIZE		TASK_SIZE_64
 #endif /* CONFIG_COMPAT */
Signature · 1 line
2.0.0.526.g5318336
Acked-by on v1 1/1
#1 lore raw

Hi Colin,

Quoted 9 lines · Colin Cross

include/linux/sched.h implements TASK_SIZE_OF as TASK_SIZE if it is not set by the architecture headers. TASK_SIZE uses the current task to determine the size of the virtual address space. On a 64-bit kernel this will cause reading /proc/pid/pagemap of a 64-bit process from a 32-bit process to return EOF when it reads past 0xffffffff.

Implement TASK_SIZE_OF exactly the same as TASK_SIZE with test_tsk_thread_flag instead of test_thread_flag.

Looks sane to me.

I take it you're being bitten by this in real software, hence the CC stable tag?

Will

#2 lore raw
Quoted 13 lines · Will Deacon

Hi Colin,

Quoted 9 lines · Colin Cross

include/linux/sched.h implements TASK_SIZE_OF as TASK_SIZE if it is not set by the architecture headers. TASK_SIZE uses the current task to determine the size of the virtual address space. On a 64-bit kernel this will cause reading /proc/pid/pagemap of a 64-bit process from a 32-bit process to return EOF when it reads past 0xffffffff.

Implement TASK_SIZE_OF exactly the same as TASK_SIZE with test_tsk_thread_flag instead of test_thread_flag.

Quoted 8 lines

Looks sane to me.

I take it you're being bitten by this in real software, hence the CC stable tag?

Will

Yes, it causes memory statistics produced by Android's procrank tool to be completely wrong. It applies cleanly to at least 3.10.44, 3.12.22, and 3.14.8.

maintainer
#3 lore raw
In reply to Colin Cross
Quoted 7 lines · Colin Cross

include/linux/sched.h implements TASK_SIZE_OF as TASK_SIZE if it is not set by the architecture headers. TASK_SIZE uses the current task to determine the size of the virtual address space. On a 64-bit kernel this will cause reading /proc/pid/pagemap of a 64-bit process from a 32-bit process to return EOF when it reads past 0xffffffff.

Quoted 5 lines

Implement TASK_SIZE_OF exactly the same as TASK_SIZE with test_tsk_thread_flag instead of test_thread_flag.

Cc stable at vger.kernel.org

Thanks. Applied.

Signature · 1 line
Catalin