Commit 77df4f86 authored by Wei Li's avatar Wei Li Committed by Zheng Zengkai
Browse files

arm64: Fix wrong logic in gic_arch_restore_irqs()

hulk inclusion
category: bugfix
bugzilla: 186819 https://gitee.com/openeuler/kernel/issues/I58L00



--------------------------------

The gic_arch_restore_irqs() depends on commit e7e6a881 ("arm64:
irqflags: fix incomplete save & restore"). While it is reverted in commit
2e680920 ("Revert "arm64: irqflags: fix incomplete save & restore""),
we should update the logic here too.

Currently the upper 32 bits of 'flags' is always zero, change to use
'GIC_PRIO_PSR_I_SET' to indicate the interrupt enabling status.

Fixes: abde6b94 ("stop_machine: mask pseudo nmi before running the callback")
Signed-off-by: default avatarWei Li <liwei391@huawei.com>
Reviewed-by: default avatarCheng Jian <cj.chengjian@huawei.com>
Signed-off-by: default avatarZheng Zengkai <zhengzengkai@huawei.com>
parent 87be4989
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -191,9 +191,8 @@ static inline void gic_arch_disable_irqs(void)

static inline void gic_arch_restore_irqs(unsigned long flags)
{
	if (gic_supports_nmi())
		asm volatile ("msr	daif, %0" : : "r" (flags >> 32)
					: "memory");
	if (gic_supports_nmi() && !(flags & GIC_PRIO_PSR_I_SET))
		gic_arch_enable_irqs();
}
#endif /* __ASSEMBLY__ */
#endif /* __ASM_ARCH_GICV3_H */