From 2a559a43afcc7066c4b9bf14d9a4b539278a9927 Mon Sep 17 00:00:00 2001 From: Curt Bruns Date: Fri, 24 Jun 2022 09:07:58 -0700 Subject: [PATCH] test: update multi-process Async Event Report test Updated the existing nvme aer test to remove a race condition where the aer_cb is executed and the g_temperature_done variable is incremented just before it is reset back to 0, which causes the test to loop indefinitely. Also changed the reset_ctrlr call to check for non-zero instead of < 0 to check for failure. Fixes #2559 Signed-off-by: Curt Bruns Change-Id: Ib0679917684cdbd4c8038279426c6ec368be5f11 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/13467 Tested-by: SPDK CI Jenkins Reviewed-by: Ben Walker Reviewed-by: Paul Luse Reviewed-by: Jim Harris --- test/nvme/aer/aer.c | 13 +++++++------ test/nvme/nvme.sh | 5 ++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/test/nvme/aer/aer.c b/test/nvme/aer/aer.c index d2a29edb1..697ebec62 100644 --- a/test/nvme/aer/aer.c +++ b/test/nvme/aer/aer.c @@ -223,8 +223,10 @@ aer_cb(void *arg, const struct spdk_nvme_cpl *cpl) ((aen_event_info == SPDK_NVME_ASYNC_EVENT_TEMPERATURE_THRESHOLD) || \ (aen_event_info == SPDK_NVME_ASYNC_EVENT_SPARE_BELOW_THRESHOLD))) { /* Set the temperature threshold back to the original value to stop triggering */ - AER_PRINTF("aer_cb - Resetting Temp Threshold for device: %s\n", dev->name); - set_temp_threshold(dev, dev->orig_temp_threshold); + if (g_parent_process) { + AER_PRINTF("aer_cb - Resetting Temp Threshold for device: %s\n", dev->name); + set_temp_threshold(dev, dev->orig_temp_threshold); + } get_health_log_page(dev); } else if (log_page_id == SPDK_NVME_LOG_CHANGED_NS_LIST) { AER_PRINTF("aer_cb - Changed Namespace\n"); @@ -452,7 +454,6 @@ spdk_aer_temperature_test(void) spdk_nvme_ctrlr_process_admin_completions(dev->ctrlr); } } - g_temperature_done = 0; if (g_failed) { return g_failed; @@ -464,8 +465,8 @@ spdk_aer_temperature_test(void) if (!g_parent_process) { sem_post(g_sem_child_id); } - /* Waiting for AEN to be occur here */ - while (!g_failed && (g_aer_done < g_num_devs || g_temperature_done < g_num_devs)) { + /* Waiting for AEN to be occur here. Each device will increment g_aer_done on an AEN */ + while (!g_failed && (g_aer_done < g_num_devs)) { foreach_dev(dev) { spdk_nvme_ctrlr_process_admin_completions(dev->ctrlr); } @@ -628,7 +629,7 @@ main(int argc, char **argv) if (g_parent_process && g_enable_temp_test) { AER_PRINTF("Reset controller to setup AER completions for this process\n"); foreach_dev(dev) { - if (spdk_nvme_ctrlr_reset(dev->ctrlr) < 0) { + if (spdk_nvme_ctrlr_reset(dev->ctrlr) != 0) { AER_FPRINTF(stderr, "nvme reset failed.\n"); return -1; } diff --git a/test/nvme/nvme.sh b/test/nvme/nvme.sh index bac029066..eda3a9025 100755 --- a/test/nvme/nvme.sh +++ b/test/nvme/nvme.sh @@ -133,11 +133,10 @@ run_test "nvme_reserve" $testdir/reserve/reserve run_test "nvme_err_injection" $testdir/err_injection/err_injection run_test "nvme_overhead" $testdir/overhead/overhead -s 4096 -t 1 -H -i 0 run_test "nvme_arbitration" $SPDK_EXAMPLE_DIR/arbitration -t 3 -i 0 -#run_test "nvme_single_aen" $testdir/aer/aer -T -i 0 -L log -#NOTE: Disabling aen tests for now due to issue #2559 +run_test "nvme_single_aen" $testdir/aer/aer -T -i 0 -L log if [ $(uname) != "FreeBSD" ]; then - #run_test "nvme_multi_aen" $testdir/aer/aer -m -T -i 0 -L log + run_test "nvme_multi_aen" $testdir/aer/aer -m -T -i 0 -L log run_test "nvme_startup" $testdir/startup/startup -t 1000000 run_test "nvme_multi_secondary" nvme_multi_secondary trap - SIGINT SIGTERM EXIT