From 60e68d170b122d86c1c49cc51078db461542a26b Mon Sep 17 00:00:00 2001 From: Tianfei Zhang Date: Sun, 23 Jan 2022 22:50:05 -0500 Subject: [PATCH] raw/ifpga: fix thread closing When we want to close a thread, we should set a flag to notify thread handler function. Fixes: 9c006c45d0c5 ("raw/ifpga: scan PCIe BDF device tree") Cc: stable@dpdk.org Signed-off-by: Tianfei Zhang Acked-by: Rosen Xu --- drivers/raw/ifpga/ifpga_rawdev.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/raw/ifpga/ifpga_rawdev.c b/drivers/raw/ifpga/ifpga_rawdev.c index 0eae0c9477..fdf3c23d2c 100644 --- a/drivers/raw/ifpga/ifpga_rawdev.c +++ b/drivers/raw/ifpga/ifpga_rawdev.c @@ -497,7 +497,7 @@ ifpga_rawdev_gsd_handle(__rte_unused void *param) int gsd_enable, ret; #define MS 1000 - while (1) { + while (__atomic_load_n(&ifpga_monitor_start, __ATOMIC_RELAXED)) { gsd_enable = 0; for (i = 0; i < IFPGA_RAWDEV_NUM; i++) { ifpga_rdev = &ifpga_rawdevices[i]; @@ -525,7 +525,7 @@ ifpga_monitor_start_func(void) { int ret; - if (ifpga_monitor_start == 0) { + if (!__atomic_load_n(&ifpga_monitor_start, __ATOMIC_RELAXED)) { ret = rte_ctrl_thread_create(&ifpga_monitor_start_thread, "ifpga-monitor", NULL, ifpga_rawdev_gsd_handle, NULL); @@ -534,7 +534,7 @@ ifpga_monitor_start_func(void) "Fail to create ifpga monitor thread"); return -1; } - ifpga_monitor_start = 1; + __atomic_store_n(&ifpga_monitor_start, 1, __ATOMIC_RELAXED); } return 0; @@ -544,7 +544,9 @@ ifpga_monitor_stop_func(void) { int ret; - if (ifpga_monitor_start == 1) { + if (__atomic_load_n(&ifpga_monitor_start, __ATOMIC_RELAXED)) { + __atomic_store_n(&ifpga_monitor_start, 0, __ATOMIC_RELAXED); + ret = pthread_cancel(ifpga_monitor_start_thread); if (ret) IFPGA_RAWDEV_PMD_ERR("Can't cancel the thread"); @@ -553,8 +555,6 @@ ifpga_monitor_stop_func(void) if (ret) IFPGA_RAWDEV_PMD_ERR("Can't join the thread"); - ifpga_monitor_start = 0; - return ret; } -- 2.39.5