Server IP : 13.213.54.232 / Your IP : 216.73.217.11 Web Server : Apache/2.4.52 (Ubuntu) System : Linux ip-172-31-17-110 6.8.0-1029-aws #31~22.04.1-Ubuntu SMP Thu Apr 24 21:16:18 UTC 2025 x86_64 User : www-data ( 33) PHP Version : 7.1.33-67+ubuntu22.04.1+deb.sury.org+1 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /lib/modules/6.8.0-1029-aws/build/arch/loongarch/include/asm/ |
Upload File : |
/* SPDX-License-Identifier: GPL-2.0 */ /* * Author: Qi Hu <huqi@loongson.cn> * Huacai Chen <chenhuacai@loongson.cn> * Copyright (C) 2020-2023 Loongson Technology Corporation Limited */ #ifndef _ASM_LBT_H #define _ASM_LBT_H #include <asm/cpu.h> #include <asm/current.h> #include <asm/loongarch.h> #include <asm/processor.h> extern void _init_lbt(void); extern void _save_lbt(struct loongarch_lbt *); extern void _restore_lbt(struct loongarch_lbt *); static inline int is_lbt_enabled(void) { if (!cpu_has_lbt) return 0; return (csr_read32(LOONGARCH_CSR_EUEN) & CSR_EUEN_LBTEN) ? 1 : 0; } static inline int is_lbt_owner(void) { return test_thread_flag(TIF_USEDLBT); } #ifdef CONFIG_CPU_HAS_LBT static inline void enable_lbt(void) { if (cpu_has_lbt) csr_xchg32(CSR_EUEN_LBTEN, CSR_EUEN_LBTEN, LOONGARCH_CSR_EUEN); } static inline void disable_lbt(void) { if (cpu_has_lbt) csr_xchg32(0, CSR_EUEN_LBTEN, LOONGARCH_CSR_EUEN); } static inline void __own_lbt(void) { enable_lbt(); set_thread_flag(TIF_USEDLBT); KSTK_EUEN(current) |= CSR_EUEN_LBTEN; } static inline void own_lbt_inatomic(int restore) { if (cpu_has_lbt && !is_lbt_owner()) { __own_lbt(); if (restore) _restore_lbt(¤t->thread.lbt); } } static inline void own_lbt(int restore) { preempt_disable(); own_lbt_inatomic(restore); preempt_enable(); } static inline void lose_lbt_inatomic(int save, struct task_struct *tsk) { if (cpu_has_lbt && is_lbt_owner()) { if (save) _save_lbt(&tsk->thread.lbt); disable_lbt(); clear_tsk_thread_flag(tsk, TIF_USEDLBT); } KSTK_EUEN(tsk) &= ~(CSR_EUEN_LBTEN); } static inline void lose_lbt(int save) { preempt_disable(); lose_lbt_inatomic(save, current); preempt_enable(); } static inline void init_lbt(void) { __own_lbt(); _init_lbt(); } #else static inline void own_lbt_inatomic(int restore) {} static inline void lose_lbt_inatomic(int save, struct task_struct *tsk) {} static inline void init_lbt(void) {} static inline void lose_lbt(int save) {} #endif static inline int thread_lbt_context_live(void) { if (!cpu_has_lbt) return 0; return test_thread_flag(TIF_LBT_CTX_LIVE); } #endif /* _ASM_LBT_H */