ARC: Fundamental ARCH data-types/defines
* L1_CACHE_SHIFT
* PAGE_SIZE, PAGE_OFFSET
* struct pt_regs, struct user_regs_struct
* struct thread_struct, cpu_relax(), task_pt_regs(), start_thread(), ...
* struct thread_info, THREAD_SIZE, INIT_THREAD_INFO(), TIF_*, ...
* BUG()
* ELF_*
* Elf_*
To disallow user-space visibility into some of the core kernel data-types
such as struct pt_regs, #ifdef __KERNEL__ which also makes the UAPI header
spit (further patch in the series) to NOT export it to asm/uapi/ptrace.h
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
Cc: Jonas Bonn <jonas.bonn@gmail.com>
Cc: Al Viro <viro@ZenIV.linux.org.uk>
Acked-by: Arnd Bergmann <arnd@arndb.de>
2013-01-18 15:12:17 +05:30
/*
* Copyright ( C ) 2004 , 2007 - 2010 , 2011 - 2012 Synopsys , Inc . ( www . synopsys . com )
*
* 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 .
*
* Vineetg : Oct 2009
* No need for ARC specific thread_info allocator ( kmalloc / free ) . This is
* anyways one page allocation , thus slab alloc can be short - circuited and
* the generic version ( get_free_page ) would be loads better .
*
* Sameer Dhavale : Codito Technologies 2004
*/
# ifndef _ASM_THREAD_INFO_H
# define _ASM_THREAD_INFO_H
# include <asm/page.h>
# ifdef CONFIG_16KSTACKS
# define THREAD_SIZE_ORDER 1
# else
# define THREAD_SIZE_ORDER 0
# endif
# define THREAD_SIZE (PAGE_SIZE << THREAD_SIZE_ORDER)
ARCv2: Support for ARCv2 ISA and HS38x cores
The notable features are:
- SMP configurations of upto 4 cores with coherency
- Optional L2 Cache and IO-Coherency
- Revised Interrupt Architecture (multiple priorites, reg banks,
auto stack switch, auto regfile save/restore)
- MMUv4 (PIPT dcache, Huge Pages)
- Instructions for
* 64bit load/store: LDD, STD
* Hardware assisted divide/remainder: DIV, REM
* Function prologue/epilogue: ENTER_S, LEAVE_S
* IRQ enable/disable: CLRI, SETI
* pop count: FFS, FLS
* SETcc, BMSKN, XBFU...
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
2013-05-13 18:30:41 +05:30
# define THREAD_SHIFT (PAGE_SHIFT << THREAD_SIZE_ORDER)
ARC: Fundamental ARCH data-types/defines
* L1_CACHE_SHIFT
* PAGE_SIZE, PAGE_OFFSET
* struct pt_regs, struct user_regs_struct
* struct thread_struct, cpu_relax(), task_pt_regs(), start_thread(), ...
* struct thread_info, THREAD_SIZE, INIT_THREAD_INFO(), TIF_*, ...
* BUG()
* ELF_*
* Elf_*
To disallow user-space visibility into some of the core kernel data-types
such as struct pt_regs, #ifdef __KERNEL__ which also makes the UAPI header
spit (further patch in the series) to NOT export it to asm/uapi/ptrace.h
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
Cc: Jonas Bonn <jonas.bonn@gmail.com>
Cc: Al Viro <viro@ZenIV.linux.org.uk>
Acked-by: Arnd Bergmann <arnd@arndb.de>
2013-01-18 15:12:17 +05:30
# ifndef __ASSEMBLY__
# include <linux/thread_info.h>
# include <asm/segment.h>
/*
* low level task data that entry . S needs immediate access to
* - this struct should fit entirely inside of one cache line
* - this struct shares the supervisor stack pages
* - if the contents of this structure are changed , the assembly constants
* must also be changed
*/
struct thread_info {
unsigned long flags ; /* low level flags */
int preempt_count ; /* 0 => preemptable, <0 => BUG */
struct task_struct * task ; /* main task structure */
mm_segment_t addr_limit ; /* thread address space */
__u32 cpu ; /* current CPU */
unsigned long thr_ptr ; /* TLS ptr */
} ;
/*
* macros / functions for gaining access to the thread information structure
*
* preempt_count needs to be 1 initially , until the scheduler is functional .
*/
# define INIT_THREAD_INFO(tsk) \
{ \
. task = & tsk , \
. flags = 0 , \
. cpu = 0 , \
. preempt_count = INIT_PREEMPT_COUNT , \
. addr_limit = KERNEL_DS , \
}
static inline __attribute_const__ struct thread_info * current_thread_info ( void )
{
register unsigned long sp asm ( " sp " ) ;
return ( struct thread_info * ) ( sp & ~ ( THREAD_SIZE - 1 ) ) ;
}
# endif /* !__ASSEMBLY__ */
/*
* thread information flags
* - these are process state flags that various assembly files may need to
* access
* - pending work - to - be - done flags are in LSW
* - other flags in MSW
*/
# define TIF_RESTORE_SIGMASK 0 /* restore sig mask in do_signal() */
# define TIF_NOTIFY_RESUME 1 /* resumption notification requested */
# define TIF_SIGPENDING 2 /* signal pending */
# define TIF_NEED_RESCHED 3 /* rescheduling necessary */
# define TIF_SYSCALL_AUDIT 4 /* syscall auditing active */
# define TIF_SYSCALL_TRACE 15 /* syscall trace active */
/* true if poll_idle() is polling TIF_NEED_RESCHED */
# define TIF_MEMDIE 16
# define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE)
# define _TIF_NOTIFY_RESUME (1<<TIF_NOTIFY_RESUME)
# define _TIF_SIGPENDING (1<<TIF_SIGPENDING)
# define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED)
# define _TIF_SYSCALL_AUDIT (1<<TIF_SYSCALL_AUDIT)
# define _TIF_MEMDIE (1<<TIF_MEMDIE)
/* work to do on interrupt/exception return */
# define _TIF_WORK_MASK (_TIF_NEED_RESCHED | _TIF_SIGPENDING | \
_TIF_NOTIFY_RESUME )
/*
* _TIF_ALLWORK_MASK includes SYSCALL_TRACE , but we don ' t need it .
2016-05-21 13:45:35 +02:00
* SYSCALL_TRACE is anyway seperately / unconditionally tested right after a
ARC: Fundamental ARCH data-types/defines
* L1_CACHE_SHIFT
* PAGE_SIZE, PAGE_OFFSET
* struct pt_regs, struct user_regs_struct
* struct thread_struct, cpu_relax(), task_pt_regs(), start_thread(), ...
* struct thread_info, THREAD_SIZE, INIT_THREAD_INFO(), TIF_*, ...
* BUG()
* ELF_*
* Elf_*
To disallow user-space visibility into some of the core kernel data-types
such as struct pt_regs, #ifdef __KERNEL__ which also makes the UAPI header
spit (further patch in the series) to NOT export it to asm/uapi/ptrace.h
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
Cc: Jonas Bonn <jonas.bonn@gmail.com>
Cc: Al Viro <viro@ZenIV.linux.org.uk>
Acked-by: Arnd Bergmann <arnd@arndb.de>
2013-01-18 15:12:17 +05:30
* syscall , so all that reamins to be tested is _TIF_WORK_MASK
*/
# endif /* _ASM_THREAD_INFO_H */