cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

task_size_64.h (2630B)


      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 (is_32bit_task() ? TASK_SIZE_USER32 : TASK_SIZE_USER64)
     48
     49#define TASK_UNMAPPED_BASE_USER32 (PAGE_ALIGN(TASK_SIZE_USER32 / 4))
     50#define TASK_UNMAPPED_BASE_USER64 (PAGE_ALIGN(DEFAULT_MAP_WINDOW_USER64 / 4))
     51
     52/*
     53 * This decides where the kernel will search for a free chunk of vm space during
     54 * mmap's.
     55 */
     56#define TASK_UNMAPPED_BASE	\
     57	((is_32bit_task()) ? TASK_UNMAPPED_BASE_USER32 : TASK_UNMAPPED_BASE_USER64)
     58
     59/*
     60 * Initial task size value for user applications. For book3s 64 we start
     61 * with 128TB and conditionally enable upto 512TB
     62 */
     63#ifdef CONFIG_PPC_BOOK3S_64
     64#define DEFAULT_MAP_WINDOW	\
     65	((is_32bit_task()) ? TASK_SIZE_USER32 : DEFAULT_MAP_WINDOW_USER64)
     66#else
     67#define DEFAULT_MAP_WINDOW	TASK_SIZE
     68#endif
     69
     70#define STACK_TOP_USER64 DEFAULT_MAP_WINDOW_USER64
     71#define STACK_TOP_USER32 TASK_SIZE_USER32
     72#define STACK_TOP_MAX TASK_SIZE_USER64
     73#define STACK_TOP (is_32bit_task() ? STACK_TOP_USER32 : STACK_TOP_USER64)
     74
     75#define arch_get_mmap_base(addr, base) \
     76	(((addr) > DEFAULT_MAP_WINDOW) ? (base) + TASK_SIZE - DEFAULT_MAP_WINDOW : (base))
     77
     78#define arch_get_mmap_end(addr, len, flags) \
     79	(((addr) > DEFAULT_MAP_WINDOW) || \
     80	 (((flags) & MAP_FIXED) && ((addr) + (len) > DEFAULT_MAP_WINDOW)) ? TASK_SIZE : \
     81									    DEFAULT_MAP_WINDOW)
     82
     83#endif /* _ASM_POWERPC_TASK_SIZE_64_H */