On 5/2/19 11:49 AM, nadav.amit@xxxxxxxxx wrote:
From: Nadav Amit <nadav.amit@xxxxxxxxx>
There is no guarantee that a self-IPI would be delivered immediately.
io_delay() is called after self-IPI is generated but does nothing.
Instead, change io_delay() to wait for 10000 cycles, which should be
enough on any system whatsoever.
Signed-off-by: Nadav Amit <nadav.amit@xxxxxxxxx>
---
x86/eventinj.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/x86/eventinj.c b/x86/eventinj.c
index 8064eb9..250537b 100644
--- a/x86/eventinj.c
+++ b/x86/eventinj.c
@@ -18,6 +18,11 @@ void do_pf_tss(void);
static inline void io_delay(void)
{
+ u64 start = rdtsc();
+
+ do {
+ pause();
+ } while (rdtsc() - start < 10000);
}
static void apic_self_ipi(u8 v)
Perhaps call delay() (in delay.c) inside of io_delay() OR perhaps
replace all instances of io_delay() with delay() ?