powerpc: Avoid circular header inclusion in mmu-hash.h
When activating CONFIG_THREAD_INFO_IN_TASK, linux/sched.h includes asm/current.h. This generates a circular dependency. To avoid that, asm/processor.h shall not be included in mmu-hash.h. In order to do that, this patch moves into a new header called asm/task_size_64/32.h all the TASK_SIZE related constants, which can then be included in mmu-hash.h directly. Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr> Reviewed-by: Nicholas Piggin <npiggin@gmail.com> [mpe: Split out all the TASK_SIZE constants not just 64-bit ones] Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
parent
c8e409a33c
commit
92ab45c5f2
|
@ -23,7 +23,7 @@
|
|||
*/
|
||||
#include <asm/book3s/64/pgtable.h>
|
||||
#include <asm/bug.h>
|
||||
#include <asm/processor.h>
|
||||
#include <asm/task_size_64.h>
|
||||
#include <asm/cpu_has_feature.h>
|
||||
|
||||
/*
|
||||
|
|
|
@ -77,106 +77,16 @@ extern int _chrp_type;
|
|||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#ifdef CONFIG_PPC64
|
||||
#include <asm/task_size_64.h>
|
||||
#else
|
||||
#include <asm/task_size_32.h>
|
||||
#endif
|
||||
|
||||
struct task_struct;
|
||||
void start_thread(struct pt_regs *regs, unsigned long fdptr, unsigned long sp);
|
||||
void release_thread(struct task_struct *);
|
||||
|
||||
#ifdef CONFIG_PPC32
|
||||
|
||||
#if CONFIG_TASK_SIZE > CONFIG_KERNEL_START
|
||||
#error User TASK_SIZE overlaps with KERNEL_START address
|
||||
#endif
|
||||
#define TASK_SIZE (CONFIG_TASK_SIZE)
|
||||
|
||||
/* This decides where the kernel will search for a free chunk of vm
|
||||
* space during mmap's.
|
||||
*/
|
||||
#define TASK_UNMAPPED_BASE (TASK_SIZE / 8 * 3)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PPC64
|
||||
/*
|
||||
* 64-bit user address space can have multiple limits
|
||||
* For now supported values are:
|
||||
*/
|
||||
#define TASK_SIZE_64TB (0x0000400000000000UL)
|
||||
#define TASK_SIZE_128TB (0x0000800000000000UL)
|
||||
#define TASK_SIZE_512TB (0x0002000000000000UL)
|
||||
#define TASK_SIZE_1PB (0x0004000000000000UL)
|
||||
#define TASK_SIZE_2PB (0x0008000000000000UL)
|
||||
/*
|
||||
* With 52 bits in the address we can support
|
||||
* upto 4PB of range.
|
||||
*/
|
||||
#define TASK_SIZE_4PB (0x0010000000000000UL)
|
||||
|
||||
/*
|
||||
* For now 512TB is only supported with book3s and 64K linux page size.
|
||||
*/
|
||||
#if defined(CONFIG_PPC_BOOK3S_64) && defined(CONFIG_PPC_64K_PAGES)
|
||||
/*
|
||||
* Max value currently used:
|
||||
*/
|
||||
#define TASK_SIZE_USER64 TASK_SIZE_4PB
|
||||
#define DEFAULT_MAP_WINDOW_USER64 TASK_SIZE_128TB
|
||||
#define TASK_CONTEXT_SIZE TASK_SIZE_512TB
|
||||
#else
|
||||
#define TASK_SIZE_USER64 TASK_SIZE_64TB
|
||||
#define DEFAULT_MAP_WINDOW_USER64 TASK_SIZE_64TB
|
||||
/*
|
||||
* We don't need to allocate extended context ids for 4K page size, because
|
||||
* we limit the max effective address on this config to 64TB.
|
||||
*/
|
||||
#define TASK_CONTEXT_SIZE TASK_SIZE_64TB
|
||||
#endif
|
||||
|
||||
/*
|
||||
* 32-bit user address space is 4GB - 1 page
|
||||
* (this 1 page is needed so referencing of 0xFFFFFFFF generates EFAULT
|
||||
*/
|
||||
#define TASK_SIZE_USER32 (0x0000000100000000UL - (1*PAGE_SIZE))
|
||||
|
||||
#define TASK_SIZE_OF(tsk) (test_tsk_thread_flag(tsk, TIF_32BIT) ? \
|
||||
TASK_SIZE_USER32 : TASK_SIZE_USER64)
|
||||
#define TASK_SIZE TASK_SIZE_OF(current)
|
||||
/* This decides where the kernel will search for a free chunk of vm
|
||||
* space during mmap's.
|
||||
*/
|
||||
#define TASK_UNMAPPED_BASE_USER32 (PAGE_ALIGN(TASK_SIZE_USER32 / 4))
|
||||
#define TASK_UNMAPPED_BASE_USER64 (PAGE_ALIGN(DEFAULT_MAP_WINDOW_USER64 / 4))
|
||||
|
||||
#define TASK_UNMAPPED_BASE ((is_32bit_task()) ? \
|
||||
TASK_UNMAPPED_BASE_USER32 : TASK_UNMAPPED_BASE_USER64 )
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Initial task size value for user applications. For book3s 64 we start
|
||||
* with 128TB and conditionally enable upto 512TB
|
||||
*/
|
||||
#ifdef CONFIG_PPC_BOOK3S_64
|
||||
#define DEFAULT_MAP_WINDOW ((is_32bit_task()) ? \
|
||||
TASK_SIZE_USER32 : DEFAULT_MAP_WINDOW_USER64)
|
||||
#else
|
||||
#define DEFAULT_MAP_WINDOW TASK_SIZE
|
||||
#endif
|
||||
|
||||
#ifdef __powerpc64__
|
||||
|
||||
#define STACK_TOP_USER64 DEFAULT_MAP_WINDOW_USER64
|
||||
#define STACK_TOP_USER32 TASK_SIZE_USER32
|
||||
|
||||
#define STACK_TOP (is_32bit_task() ? \
|
||||
STACK_TOP_USER32 : STACK_TOP_USER64)
|
||||
|
||||
#define STACK_TOP_MAX TASK_SIZE_USER64
|
||||
|
||||
#else /* __powerpc64__ */
|
||||
|
||||
#define STACK_TOP TASK_SIZE
|
||||
#define STACK_TOP_MAX STACK_TOP
|
||||
|
||||
#endif /* __powerpc64__ */
|
||||
|
||||
typedef struct {
|
||||
unsigned long seg;
|
||||
} mm_segment_t;
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#ifndef _ASM_POWERPC_TASK_SIZE_32_H
|
||||
#define _ASM_POWERPC_TASK_SIZE_32_H
|
||||
|
||||
#if CONFIG_TASK_SIZE > CONFIG_KERNEL_START
|
||||
#error User TASK_SIZE overlaps with KERNEL_START address
|
||||
#endif
|
||||
|
||||
#define TASK_SIZE (CONFIG_TASK_SIZE)
|
||||
|
||||
/*
|
||||
* This decides where the kernel will search for a free chunk of vm space during
|
||||
* mmap's.
|
||||
*/
|
||||
#define TASK_UNMAPPED_BASE (TASK_SIZE / 8 * 3)
|
||||
|
||||
#define DEFAULT_MAP_WINDOW TASK_SIZE
|
||||
#define STACK_TOP TASK_SIZE
|
||||
#define STACK_TOP_MAX STACK_TOP
|
||||
|
||||
#endif /* _ASM_POWERPC_TASK_SIZE_32_H */
|
|
@ -0,0 +1,79 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#ifndef _ASM_POWERPC_TASK_SIZE_64_H
|
||||
#define _ASM_POWERPC_TASK_SIZE_64_H
|
||||
|
||||
/*
|
||||
* 64-bit user address space can have multiple limits
|
||||
* For now supported values are:
|
||||
*/
|
||||
#define TASK_SIZE_64TB (0x0000400000000000UL)
|
||||
#define TASK_SIZE_128TB (0x0000800000000000UL)
|
||||
#define TASK_SIZE_512TB (0x0002000000000000UL)
|
||||
#define TASK_SIZE_1PB (0x0004000000000000UL)
|
||||
#define TASK_SIZE_2PB (0x0008000000000000UL)
|
||||
|
||||
/*
|
||||
* With 52 bits in the address we can support up to 4PB of range.
|
||||
*/
|
||||
#define TASK_SIZE_4PB (0x0010000000000000UL)
|
||||
|
||||
/*
|
||||
* For now 512TB is only supported with book3s and 64K linux page size.
|
||||
*/
|
||||
#if defined(CONFIG_PPC_BOOK3S_64) && defined(CONFIG_PPC_64K_PAGES)
|
||||
/*
|
||||
* Max value currently used:
|
||||
*/
|
||||
#define TASK_SIZE_USER64 TASK_SIZE_4PB
|
||||
#define DEFAULT_MAP_WINDOW_USER64 TASK_SIZE_128TB
|
||||
#define TASK_CONTEXT_SIZE TASK_SIZE_512TB
|
||||
#else
|
||||
#define TASK_SIZE_USER64 TASK_SIZE_64TB
|
||||
#define DEFAULT_MAP_WINDOW_USER64 TASK_SIZE_64TB
|
||||
|
||||
/*
|
||||
* We don't need to allocate extended context ids for 4K page size, because we
|
||||
* limit the max effective address on this config to 64TB.
|
||||
*/
|
||||
#define TASK_CONTEXT_SIZE TASK_SIZE_64TB
|
||||
#endif
|
||||
|
||||
/*
|
||||
* 32-bit user address space is 4GB - 1 page
|
||||
* (this 1 page is needed so referencing of 0xFFFFFFFF generates EFAULT
|
||||
*/
|
||||
#define TASK_SIZE_USER32 (0x0000000100000000UL - (1 * PAGE_SIZE))
|
||||
|
||||
#define TASK_SIZE_OF(tsk) \
|
||||
(test_tsk_thread_flag(tsk, TIF_32BIT) ? TASK_SIZE_USER32 : \
|
||||
TASK_SIZE_USER64)
|
||||
|
||||
#define TASK_SIZE TASK_SIZE_OF(current)
|
||||
|
||||
#define TASK_UNMAPPED_BASE_USER32 (PAGE_ALIGN(TASK_SIZE_USER32 / 4))
|
||||
#define TASK_UNMAPPED_BASE_USER64 (PAGE_ALIGN(DEFAULT_MAP_WINDOW_USER64 / 4))
|
||||
|
||||
/*
|
||||
* This decides where the kernel will search for a free chunk of vm space during
|
||||
* mmap's.
|
||||
*/
|
||||
#define TASK_UNMAPPED_BASE \
|
||||
((is_32bit_task()) ? TASK_UNMAPPED_BASE_USER32 : TASK_UNMAPPED_BASE_USER64)
|
||||
|
||||
/*
|
||||
* Initial task size value for user applications. For book3s 64 we start
|
||||
* with 128TB and conditionally enable upto 512TB
|
||||
*/
|
||||
#ifdef CONFIG_PPC_BOOK3S_64
|
||||
#define DEFAULT_MAP_WINDOW \
|
||||
((is_32bit_task()) ? TASK_SIZE_USER32 : DEFAULT_MAP_WINDOW_USER64)
|
||||
#else
|
||||
#define DEFAULT_MAP_WINDOW TASK_SIZE
|
||||
#endif
|
||||
|
||||
#define STACK_TOP_USER64 DEFAULT_MAP_WINDOW_USER64
|
||||
#define STACK_TOP_USER32 TASK_SIZE_USER32
|
||||
#define STACK_TOP_MAX TASK_SIZE_USER64
|
||||
#define STACK_TOP (is_32bit_task() ? STACK_TOP_USER32 : STACK_TOP_USER64)
|
||||
|
||||
#endif /* _ASM_POWERPC_TASK_SIZE_64_H */
|
|
@ -24,6 +24,7 @@
|
|||
#include <linux/compiler.h>
|
||||
#include <asm/paca.h>
|
||||
#include <asm/hmi.h>
|
||||
#include <asm/processor.h>
|
||||
|
||||
void wait_for_subcore_guest_exit(void)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue