mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
synced 2025-09-04 18:49:41 +00:00

While the GCC and Clang compilers already define __ASSEMBLER__ automatically when compiling assembly code, __ASSEMBLY__ is a macro that only gets defined by the Makefiles in the kernel. This can be very confusing when switching between userspace and kernelspace coding, or when dealing with uapi headers that rather should use __ASSEMBLER__ instead. So let's standardize on the __ASSEMBLER__ macro that is provided by the compilers now. This is a completely mechanical patch (done with a simple "sed -i" statement). Cc: linux-snps-arc@lists.infradead.org Signed-off-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Vineet Gupta <vgupta@kernel.org>
107 lines
3.4 KiB
C
107 lines
3.4 KiB
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
/*
|
|
* Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
|
|
*
|
|
* 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)
|
|
#define THREAD_SHIFT (PAGE_SHIFT << THREAD_SIZE_ORDER)
|
|
|
|
#ifndef __ASSEMBLER__
|
|
|
|
#include <linux/thread_info.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 */
|
|
unsigned long ksp; /* kernel mode stack top in __switch_to */
|
|
int preempt_count; /* 0 => preemptible, <0 => BUG */
|
|
int cpu; /* current CPU */
|
|
unsigned long thr_ptr; /* TLS ptr */
|
|
struct task_struct *task; /* main task structure */
|
|
};
|
|
|
|
/*
|
|
* initilaize thread_info for any @tsk
|
|
* - this is not related to init_task per se
|
|
*/
|
|
#define INIT_THREAD_INFO(tsk) \
|
|
{ \
|
|
.task = &tsk, \
|
|
.flags = 0, \
|
|
.cpu = 0, \
|
|
.preempt_count = INIT_PREEMPT_COUNT, \
|
|
}
|
|
|
|
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 /* !__ASSEMBLER__ */
|
|
|
|
/*
|
|
* 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_NOTIFY_SIGNAL 5 /* signal notifications exist */
|
|
#define TIF_SYSCALL_TRACE 15 /* syscall trace active */
|
|
/* true if poll_idle() is polling TIF_NEED_RESCHED */
|
|
#define TIF_MEMDIE 16
|
|
#define TIF_SYSCALL_TRACEPOINT 17 /* syscall tracepoint instrumentation */
|
|
|
|
#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_NOTIFY_SIGNAL (1<<TIF_NOTIFY_SIGNAL)
|
|
#define _TIF_MEMDIE (1<<TIF_MEMDIE)
|
|
#define _TIF_SYSCALL_TRACEPOINT (1<<TIF_SYSCALL_TRACEPOINT)
|
|
|
|
/* work to do on interrupt/exception return */
|
|
#define _TIF_WORK_MASK (_TIF_NEED_RESCHED | _TIF_SIGPENDING | \
|
|
_TIF_NOTIFY_RESUME | _TIF_NOTIFY_SIGNAL)
|
|
|
|
#define _TIF_SYSCALL_WORK (_TIF_SYSCALL_TRACE | _TIF_SYSCALL_TRACEPOINT)
|
|
|
|
/*
|
|
* _TIF_ALLWORK_MASK includes SYSCALL_TRACE, but we don't need it.
|
|
* SYSCALL_TRACE is anyway separately/unconditionally tested right after a
|
|
* syscall, so all that remains to be tested is _TIF_WORK_MASK
|
|
*/
|
|
|
|
#endif /* _ASM_THREAD_INFO_H */
|