1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _ASM_POWERPC_TASK_SIZE_64_H
3 #define _ASM_POWERPC_TASK_SIZE_64_H
4 
5 /*
6  * 64-bit user address space can have multiple limits
7  * For now supported values are:
8  */
9 #define TASK_SIZE_64TB  (0x0000400000000000UL)
10 #define TASK_SIZE_128TB (0x0000800000000000UL)
11 #define TASK_SIZE_512TB (0x0002000000000000UL)
12 #define TASK_SIZE_1PB   (0x0004000000000000UL)
13 #define TASK_SIZE_2PB   (0x0008000000000000UL)
14 
15 /*
16  * With 52 bits in the address we can support up to 4PB of range.
17  */
18 #define TASK_SIZE_4PB   (0x0010000000000000UL)
19 
20 /*
21  * For now 512TB is only supported with book3s and 64K linux page size.
22  */
23 #ifdef CONFIG_PPC_64K_PAGES
24 /*
25  * Max value currently used:
26  */
27 #define TASK_SIZE_USER64		TASK_SIZE_4PB
28 #define DEFAULT_MAP_WINDOW_USER64	TASK_SIZE_128TB
29 #define TASK_CONTEXT_SIZE		TASK_SIZE_512TB
30 #else
31 #define TASK_SIZE_USER64		TASK_SIZE_64TB
32 #define DEFAULT_MAP_WINDOW_USER64	TASK_SIZE_64TB
33 
34 /*
35  * We don't need to allocate extended context ids for 4K page size, because we
36  * limit the max effective address on this config to 64TB.
37  */
38 #define TASK_CONTEXT_SIZE TASK_SIZE_64TB
39 #endif
40 
41 /*
42  * 32-bit user address space is 4GB - 1 page
43  * (this 1 page is needed so referencing of 0xFFFFFFFF generates EFAULT
44  */
45 #define TASK_SIZE_USER32 (0x0000000100000000UL - (1 * PAGE_SIZE))
46 
47 #define TASK_SIZE_OF(tsk)						\
48 	(test_tsk_thread_flag(tsk, TIF_32BIT) ? TASK_SIZE_USER32 :	\
49 						TASK_SIZE_USER64)
50 
51 #define TASK_SIZE TASK_SIZE_OF(current)
52 
53 #define TASK_UNMAPPED_BASE_USER32 (PAGE_ALIGN(TASK_SIZE_USER32 / 4))
54 #define TASK_UNMAPPED_BASE_USER64 (PAGE_ALIGN(DEFAULT_MAP_WINDOW_USER64 / 4))
55 
56 /*
57  * This decides where the kernel will search for a free chunk of vm space during
58  * mmap's.
59  */
60 #define TASK_UNMAPPED_BASE	\
61 	((is_32bit_task()) ? TASK_UNMAPPED_BASE_USER32 : TASK_UNMAPPED_BASE_USER64)
62 
63 /*
64  * Initial task size value for user applications. For book3s 64 we start
65  * with 128TB and conditionally enable upto 512TB
66  */
67 #ifdef CONFIG_PPC_BOOK3S_64
68 #define DEFAULT_MAP_WINDOW	\
69 	((is_32bit_task()) ? TASK_SIZE_USER32 : DEFAULT_MAP_WINDOW_USER64)
70 #else
71 #define DEFAULT_MAP_WINDOW	TASK_SIZE
72 #endif
73 
74 #define STACK_TOP_USER64 DEFAULT_MAP_WINDOW_USER64
75 #define STACK_TOP_USER32 TASK_SIZE_USER32
76 #define STACK_TOP_MAX TASK_SIZE_USER64
77 #define STACK_TOP (is_32bit_task() ? STACK_TOP_USER32 : STACK_TOP_USER64)
78 
79 #endif /* _ASM_POWERPC_TASK_SIZE_64_H */
80