kprintf: fix checking if interrupt is disabled

Change-Id: I2ee1a1e2438ae761c4136593953ede2738bc6f74
This commit is contained in:
Masamichi Takagi
2021-03-09 12:14:55 +09:00
committed by Masamichi Takagi
parent c94cf8e6f0
commit 3e00189de0
4 changed files with 24 additions and 7 deletions

View File

@ -912,7 +912,6 @@ unsigned long cpu_enable_interrupt_save(void)
return flags;
}
#ifdef ENABLE_FUGAKU_HACKS
int cpu_interrupt_disabled(void)
{
unsigned long flags;
@ -925,7 +924,6 @@ int cpu_interrupt_disabled(void)
: "memory");
return (flags == masked);
}
#endif
#else /* defined(CONFIG_HAS_NMI) */
@ -989,6 +987,18 @@ unsigned long cpu_enable_interrupt_save(void)
: "memory");
return flags;
}
int cpu_interrupt_disabled(void)
{
unsigned long flags;
asm volatile(
"mrs %0, daif // arch_local_irq_save\n"
: "=r" (flags)
:
: "memory");
return !!(flags & 0x2);
}
#endif /* defined(CONFIG_HAS_NMI) */
/* we not have "pause" instruction, instead "yield" instruction */

View File

@ -1273,6 +1273,15 @@ unsigned long cpu_enable_interrupt_save(void)
return flags;
}
int cpu_interrupt_disabled(void)
{
unsigned long flags;
asm volatile("pushf; pop %0" : "=r"(flags) : : "memory", "cc");
return !(flags & 0x200);
}
/*@
@ behavior valid_vector:
@ assumes 32 <= vector <= 255;