| /* SPDX-License-Identifier: GPL-2.0 */ |
| /* |
| * S390 version |
| * Copyright IBM Corp. 1999 |
| * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com) |
| * |
| * Derived from "include/asm-i386/current.h" |
| */ |
| |
| #ifndef _S390_CURRENT_H |
| #define _S390_CURRENT_H |
| |
| #include <asm/lowcore.h> |
| #include <asm/machine.h> |
| |
| struct task_struct; |
| |
| static __always_inline struct task_struct *get_current(void) |
| { |
| unsigned long ptr, lc_current; |
| |
| lc_current = offsetof(struct lowcore, current_task); |
| asm_inline( |
| ALTERNATIVE(" lg %[ptr],%[offzero](%%r0)\n", |
| " lg %[ptr],%[offalt](%%r0)\n", |
| ALT_FEATURE(MFEATURE_LOWCORE)) |
| : [ptr] "=d" (ptr) |
| : [offzero] "i" (lc_current), |
| [offalt] "i" (lc_current + LOWCORE_ALT_ADDRESS)); |
| return (struct task_struct *)ptr; |
| } |
| |
| #define current get_current() |
| |
| #endif /* !(_S390_CURRENT_H) */ |