/* * Based on arch/arm/include/asm/thread_info.h * * Copyright (C) 2002 Russell King. * Copyright (C) 2012 ARM Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #ifndef __ASM_THREAD_INFO_H #define __ASM_THREAD_INFO_H #ifdef __KERNEL__ #include <linux/compiler.h> #ifdef CONFIG_ARM64_4K_PAGES #define THREAD_SIZE_ORDER 2 #elif defined(CONFIG_ARM64_16K_PAGES) #define THREAD_SIZE_ORDER 0 #endif #define THREAD_SIZE 16384 #define THREAD_START_SP (THREAD_SIZE - 16) #ifndef __ASSEMBLY__ struct task_struct; #include <asm/types.h> typedef unsigned long mm_segment_t; /* * low level task data that entry.S needs immediate access to. * __switch_to() assumes cpu_context follows immediately after cpu_domain. */ struct thread_info { unsigned long flags; /* low level flags */ mm_segment_t addr_limit; /* address limit */ struct task_struct *task; /* main task structure */ int preempt_count; /* 0 => preemptable, <0 => bug */ int cpu; /* cpu */ }; #define INIT_THREAD_INFO(tsk) \ { \ .task = &tsk, \ .flags = 0, \ .preempt_count = INIT_PREEMPT_COUNT, \ .addr_limit = KERNEL_DS, \ } #define init_thread_info (init_thread_union.thread_info) #define init_stack (init_thread_union.stack) /* * how to get the current stack pointer from C */ register unsigned long current_stack_pointer asm ("sp"); /* * how to get the thread information struct from C */ static inline struct thread_info *current_thread_info(void) __attribute_const__; /* * struct thread_info can be accessed directly via sp_el0. */
static inline struct thread_info *current_thread_info(void) { unsigned long sp_el0; asm ("mrs %0, sp_el0" : "=r" (sp_el0)); return (struct thread_info *)sp_el0; }Contributors
| Person | Tokens | Prop | Commits | CommitProp | |
| catalin marinas | catalin marinas | 18 | 75.00% | 1 | 50.00% |
| jungseok lee | jungseok lee | 6 | 25.00% | 1 | 50.00% |
| Total | 24 | 100.00% | 2 | 100.00% |
| Person | Tokens | Prop | Commits | CommitProp | |
| catalin marinas | catalin marinas | 203 | 70.73% | 1 | 9.09% |
| akashi takahiro | akashi takahiro | 31 | 10.80% | 1 | 9.09% |
| suzuki k poulose | suzuki k poulose | 13 | 4.53% | 2 | 18.18% |
| behan webster | behan webster | 10 | 3.48% | 1 | 9.09% |
| ard biesheuvel | ard biesheuvel | 10 | 3.48% | 1 | 9.09% |
| larry bassel | larry bassel | 9 | 3.14% | 1 | 9.09% |
| jungseok lee | jungseok lee | 7 | 2.44% | 1 | 9.09% |
| feng kan | feng kan | 2 | 0.70% | 1 | 9.09% |
| linus torvalds | linus torvalds | 1 | 0.35% | 1 | 9.09% |
| richard weinberger | richard weinberger | 1 | 0.35% | 1 | 9.09% |
| Total | 287 | 100.00% | 11 | 100.00% |