From 240a23a21ba64ff51801c32adad6c2a6e8addc27 Mon Sep 17 00:00:00 2001 From: Dominique Martinet Date: Fri, 27 Jul 2018 14:49:06 +0900 Subject: [PATCH] arch-lock: tentative implementation of irqflags_can_interrupt for arm64 Change-Id: I814e02e757039cab8c142c0b774ad470154454c1 --- arch/arm64/kernel/include/arch-lock.h | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/arch/arm64/kernel/include/arch-lock.h b/arch/arm64/kernel/include/arch-lock.h index 10930016..e53f2532 100644 --- a/arch/arm64/kernel/include/arch-lock.h +++ b/arch/arm64/kernel/include/arch-lock.h @@ -607,8 +607,13 @@ __mcs_rwlock_reader_unlock(struct mcs_rwlock_lock *lock, struct mcs_rwlock_node_ static inline int irqflags_can_interrupt(unsigned long flags) { -#warning "arm64 irqflags_can_interrupt not implemented" - return true; +#ifdef CONFIG_HAS_NMI +#warning irqflags_can_interrupt needs testing/fixing on such a target + return flags > ICC_PMR_EL1_MASKED; +#else + // PSTATE.DAIF I bit clear means interrupt is possible + return !(flags & (1 << 7)); +#endif }