linux/arch/arc/include/asm/thread_info.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0-only */
   2/*
   3 * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
   4 *
   5 * Vineetg: Oct 2009
   6 *  No need for ARC specific thread_info allocator (kmalloc/free). This is
   7 *  anyways one page allocation, thus slab alloc can be short-circuited and
   8 *  the generic version (get_free_page) would be loads better.
   9 *
  10 * Sameer Dhavale: Codito Technologies 2004
  11 */
  12
  13#ifndef _ASM_THREAD_INFO_H
  14#define _ASM_THREAD_INFO_H
  15
  16#include <asm/page.h>
  17
  18#ifdef CONFIG_16KSTACKS
  19#define THREAD_SIZE_ORDER 1
  20#else
  21#define THREAD_SIZE_ORDER 0
  22#endif
  23
  24#define THREAD_SIZE     (PAGE_SIZE << THREAD_SIZE_ORDER)
  25#define THREAD_SHIFT    (PAGE_SHIFT << THREAD_SIZE_ORDER)
  26
  27#ifndef __ASSEMBLY__
  28
  29#include <linux/thread_info.h>
  30#include <asm/segment.h>
  31
  32/*
  33 * low level task data that entry.S needs immediate access to
  34 * - this struct should fit entirely inside of one cache line
  35 * - this struct shares the supervisor stack pages
  36 * - if the contents of this structure are changed, the assembly constants
  37 *   must also be changed
  38 */
  39struct thread_info {
  40        unsigned long flags;            /* low level flags */
  41        int preempt_count;              /* 0 => preemptable, <0 => BUG */
  42        struct task_struct *task;       /* main task structure */
  43        mm_segment_t addr_limit;        /* thread address space */
  44        __u32 cpu;                      /* current CPU */
  45        unsigned long thr_ptr;          /* TLS ptr */
  46};
  47
  48/*
  49 * macros/functions for gaining access to the thread information structure
  50 *
  51 * preempt_count needs to be 1 initially, until the scheduler is functional.
  52 */
  53#define INIT_THREAD_INFO(tsk)                   \
  54{                                               \
  55        .task       = &tsk,                     \
  56        .flags      = 0,                        \
  57        .cpu        = 0,                        \
  58        .preempt_count  = INIT_PREEMPT_COUNT,   \
  59        .addr_limit = KERNEL_DS,                \
  60}
  61
  62static inline __attribute_const__ struct thread_info *current_thread_info(void)
  63{
  64        register unsigned long sp asm("sp");
  65        return (struct thread_info *)(sp & ~(THREAD_SIZE - 1));
  66}
  67
  68#endif /* !__ASSEMBLY__ */
  69
  70/*
  71 * thread information flags
  72 * - these are process state flags that various assembly files may need to
  73 *   access
  74 * - pending work-to-be-done flags are in LSW
  75 * - other flags in MSW
  76 */
  77#define TIF_RESTORE_SIGMASK     0       /* restore sig mask in do_signal() */
  78#define TIF_NOTIFY_RESUME       1       /* resumption notification requested */
  79#define TIF_SIGPENDING          2       /* signal pending */
  80#define TIF_NEED_RESCHED        3       /* rescheduling necessary */
  81#define TIF_SYSCALL_AUDIT       4       /* syscall auditing active */
  82#define TIF_NOTIFY_SIGNAL       5       /* signal notifications exist */
  83#define TIF_SYSCALL_TRACE       15      /* syscall trace active */
  84
  85/* true if poll_idle() is polling TIF_NEED_RESCHED */
  86#define TIF_MEMDIE              16
  87
  88#define _TIF_SYSCALL_TRACE      (1<<TIF_SYSCALL_TRACE)
  89#define _TIF_NOTIFY_RESUME      (1<<TIF_NOTIFY_RESUME)
  90#define _TIF_SIGPENDING         (1<<TIF_SIGPENDING)
  91#define _TIF_NEED_RESCHED       (1<<TIF_NEED_RESCHED)
  92#define _TIF_SYSCALL_AUDIT      (1<<TIF_SYSCALL_AUDIT)
  93#define _TIF_NOTIFY_SIGNAL      (1<<TIF_NOTIFY_SIGNAL)
  94#define _TIF_MEMDIE             (1<<TIF_MEMDIE)
  95
  96/* work to do on interrupt/exception return */
  97#define _TIF_WORK_MASK          (_TIF_NEED_RESCHED | _TIF_SIGPENDING | \
  98                                 _TIF_NOTIFY_RESUME | _TIF_NOTIFY_SIGNAL)
  99
 100/*
 101 * _TIF_ALLWORK_MASK includes SYSCALL_TRACE, but we don't need it.
 102 * SYSCALL_TRACE is anyway seperately/unconditionally tested right after a
 103 * syscall, so all that reamins to be tested is _TIF_WORK_MASK
 104 */
 105
 106#endif /* _ASM_THREAD_INFO_H */
 107