linux/arch/hexagon/include/asm/thread_info.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0-only */
   2/*
   3 * Thread support for the Hexagon architecture
   4 *
   5 * Copyright (c) 2010-2011, The Linux Foundation. All rights reserved.
   6 */
   7
   8#ifndef _ASM_THREAD_INFO_H
   9#define _ASM_THREAD_INFO_H
  10
  11#ifdef __KERNEL__
  12
  13#ifndef __ASSEMBLY__
  14#include <asm/processor.h>
  15#include <asm/registers.h>
  16#include <asm/page.h>
  17#endif
  18
  19#define THREAD_SHIFT            12
  20#define THREAD_SIZE             (1<<THREAD_SHIFT)
  21#define THREAD_SIZE_ORDER       (THREAD_SHIFT - PAGE_SHIFT)
  22
  23#ifndef __ASSEMBLY__
  24
  25typedef struct {
  26        unsigned long seg;
  27} mm_segment_t;
  28
  29/*
  30 * This is union'd with the "bottom" of the kernel stack.
  31 * It keeps track of thread info which is handy for routines
  32 * to access quickly.
  33 */
  34
  35struct thread_info {
  36        struct task_struct      *task;          /* main task structure */
  37        unsigned long           flags;          /* low level flags */
  38        __u32                   cpu;            /* current cpu */
  39        int                     preempt_count;  /* 0=>preemptible,<0=>BUG */
  40        mm_segment_t            addr_limit;     /* segmentation sux */
  41        /*
  42         * used for syscalls somehow;
  43         * seems to have a function pointer and four arguments
  44         */
  45        /* Points to the current pt_regs frame  */
  46        struct pt_regs          *regs;
  47        /*
  48         * saved kernel sp at switch_to time;
  49         * not sure if this is used (it's not in the VM model it seems;
  50         * see thread_struct)
  51         */
  52        unsigned long           sp;
  53};
  54
  55#else /* !__ASSEMBLY__ */
  56
  57#include <asm/asm-offsets.h>
  58
  59#endif  /* __ASSEMBLY__  */
  60
  61#ifndef __ASSEMBLY__
  62
  63#define INIT_THREAD_INFO(tsk)                   \
  64{                                               \
  65        .task           = &tsk,                 \
  66        .flags          = 0,                    \
  67        .cpu            = 0,                    \
  68        .preempt_count  = 1,                    \
  69        .addr_limit     = KERNEL_DS,            \
  70        .sp = 0,                                \
  71        .regs = NULL,                   \
  72}
  73
  74/* Tacky preprocessor trickery */
  75#define qqstr(s) qstr(s)
  76#define qstr(s) #s
  77#define QUOTED_THREADINFO_REG qqstr(THREADINFO_REG)
  78
  79register struct thread_info *__current_thread_info asm(QUOTED_THREADINFO_REG);
  80#define current_thread_info()  __current_thread_info
  81
  82#endif /* __ASSEMBLY__ */
  83
  84/*
  85 * thread information flags
  86 * - these are process state flags that various assembly files
  87 *   may need to access
  88 * - pending work-to-be-done flags are in LSW
  89 * - other flags in MSW
  90 */
  91
  92#define TIF_SYSCALL_TRACE       0       /* syscall trace active */
  93#define TIF_NOTIFY_RESUME       1       /* resumption notification requested */
  94#define TIF_SIGPENDING          2       /* signal pending */
  95#define TIF_NEED_RESCHED        3       /* rescheduling necessary */
  96#define TIF_SINGLESTEP          4       /* restore ss @ return to usr mode */
  97#define TIF_RESTORE_SIGMASK     6       /* restore sig mask in do_signal() */
  98#define TIF_NOTIFY_SIGNAL       7       /* signal notifications exist */
  99/* true if poll_idle() is polling TIF_NEED_RESCHED */
 100#define TIF_MEMDIE              17      /* OOM killer killed process */
 101
 102#define _TIF_SYSCALL_TRACE      (1 << TIF_SYSCALL_TRACE)
 103#define _TIF_NOTIFY_RESUME      (1 << TIF_NOTIFY_RESUME)
 104#define _TIF_SIGPENDING         (1 << TIF_SIGPENDING)
 105#define _TIF_NEED_RESCHED       (1 << TIF_NEED_RESCHED)
 106#define _TIF_SINGLESTEP         (1 << TIF_SINGLESTEP)
 107#define _TIF_NOTIFY_SIGNAL      (1 << TIF_NOTIFY_SIGNAL)
 108
 109/* work to do on interrupt/exception return - All but TIF_SYSCALL_TRACE */
 110#define _TIF_WORK_MASK          (0x0000FFFF & ~_TIF_SYSCALL_TRACE)
 111
 112/* work to do on any return to u-space */
 113#define _TIF_ALLWORK_MASK       0x0000FFFF
 114
 115#endif /* __KERNEL__ */
 116
 117#endif
 118