[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 04/15] tests:ipmi: Fix IPMI BT tests
From: |
minyard |
Subject: |
[PATCH 04/15] tests:ipmi: Fix IPMI BT tests |
Date: |
Thu, 19 Sep 2019 16:39:13 -0500 |
From: Corey Minyard <address@hidden>
The IPMI BT tests had a race condition, if it receive an IPMI command
to enable interrupt, it would write the message to enable interrupts
after it wrote the command response. So the test code could
receive the command response and issue the next command before the
device handled the interrupt enable command, and thus no interrupt.
So send the message to enable interrupt before the command response.
Also add some sleeps to give qemu time to handle responses, there was
no delay before, and it could result in an invalid timeout.
And re-enable the tests, as hopefully they are fixed now.
Note that I was unable to reproduce this even with the instructions
Peter gave me, but hopefully this fixes the issue.
Cc: Peter Maydell <address@hidden>
Signed-off-by: Corey Minyard <address@hidden>
---
tests/Makefile.include | 3 +--
tests/ipmi-bt-test.c | 6 ++++--
2 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/tests/Makefile.include b/tests/Makefile.include
index 793632ca72..479664f899 100644
--- a/tests/Makefile.include
+++ b/tests/Makefile.include
@@ -170,8 +170,7 @@ check-qtest-i386-$(CONFIG_SGA) +=
tests/boot-serial-test$(EXESUF)
check-qtest-i386-$(CONFIG_SLIRP) += tests/pxe-test$(EXESUF)
check-qtest-i386-y += tests/rtc-test$(EXESUF)
check-qtest-i386-$(CONFIG_ISA_IPMI_KCS) += tests/ipmi-kcs-test$(EXESUF)
-# Disabled temporarily as it fails intermittently especially under NetBSD VM
-# check-qtest-i386-$(CONFIG_ISA_IPMI_BT) += tests/ipmi-bt-test$(EXESUF)
+check-qtest-i386-$(CONFIG_ISA_IPMI_BT) += tests/ipmi-bt-test$(EXESUF)
check-qtest-i386-y += tests/i440fx-test$(EXESUF)
check-qtest-i386-y += tests/fw_cfg-test$(EXESUF)
check-qtest-i386-y += tests/device-plug-test$(EXESUF)
diff --git a/tests/ipmi-bt-test.c b/tests/ipmi-bt-test.c
index fc4c83b5db..a42207d416 100644
--- a/tests/ipmi-bt-test.c
+++ b/tests/ipmi-bt-test.c
@@ -30,7 +30,7 @@
#include <netinet/tcp.h>
-#include "libqtest.h"
+#include "libqtest-single.h"
#include "qemu-common.h"
#define IPMI_IRQ 5
@@ -99,6 +99,7 @@ static void bt_wait_b_busy(void)
unsigned int count = 1000;
while (IPMI_BT_CTLREG_GET_B_BUSY() != 0) {
g_assert(--count != 0);
+ usleep(100);
}
}
@@ -107,6 +108,7 @@ static void bt_wait_b2h_atn(void)
unsigned int count = 1000;
while (IPMI_BT_CTLREG_GET_B2H_ATN() == 0) {
g_assert(--count != 0);
+ usleep(100);
}
}
@@ -240,13 +242,13 @@ static void emu_msg_handler(void)
write_emu_msg(msg, msg_len);
} else if ((msg[1] == set_bmc_globals_cmd[0]) &&
(msg[2] == set_bmc_globals_cmd[1])) {
+ write_emu_msg(enable_irq_cmd, sizeof(enable_irq_cmd));
memcpy(msg + 1, set_bmc_globals_rsp, sizeof(set_bmc_globals_rsp));
msg_len = sizeof(set_bmc_globals_rsp) + 1;
msg[msg_len] = -ipmb_checksum(msg, msg_len, 0);
msg_len++;
msg[msg_len++] = 0xa0;
write_emu_msg(msg, msg_len);
- write_emu_msg(enable_irq_cmd, sizeof(enable_irq_cmd));
} else {
g_assert(0);
}
--
2.17.1
- [PATCH 00/15] ipmi: Bug fixes, add new interfaces, minyard, 2019/09/19
- [PATCH 03/15] ipmi: Generate an interrupt on watchdog pretimeout expiry, minyard, 2019/09/19
- [PATCH 04/15] tests:ipmi: Fix IPMI BT tests,
minyard <=
- [PATCH 05/15] qdev: Add a no default uuid property, minyard, 2019/09/19
- [PATCH 02/15] ipmi: Fix the get watchdog command, minyard, 2019/09/19
- [PATCH 06/15] ipmi: Add a UUID device property, minyard, 2019/09/19
- [PATCH 09/15] ipmi: Allow a size value to be passed for I/O space, minyard, 2019/09/19
- [PATCH 07/15] ipmi: Split out KCS-specific code from ISA KCS code, minyard, 2019/09/19
- [PATCH 11/15] ipmi: Add PCI IPMI interfaces, minyard, 2019/09/19
- [PATCH 14/15] ipmi: Fix SSIF ACPI handling to use the right CRS, minyard, 2019/09/19