From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 5D27848BA1 for ; Tue, 25 Nov 2025 02:51:43 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 55DA1406B8; Tue, 25 Nov 2025 02:51:43 +0100 (CET) Received: from canpmsgout05.his.huawei.com (canpmsgout05.his.huawei.com [113.46.200.220]) by mails.dpdk.org (Postfix) with ESMTP id 48D91402A1 for ; Tue, 25 Nov 2025 02:51:39 +0100 (CET) dkim-signature: v=1; a=rsa-sha256; d=huawei.com; s=dkim; c=relaxed/relaxed; q=dns/txt; h=From; bh=4KyqYOsmqkq6LaUa3knufkVkVS/plDo5nK0wCeqCGac=; b=Pmw4lppYyUY4bkrzTUnj3XaUDwaY4ZDvmssm677FXwgZ1iXLpnpDEgwhLZS/PftbYBApE/kdi Z8H+NAy0MM3rqgfI1Megv3du6MRCXysXwWxVBlnckfi6l9L5hLXucY20YrTqmlLIcm99bFCU/xa C4l6h2YLy/Vn0KXjhO5C8uE= Received: from mail.maildlp.com (unknown [172.19.163.252]) by canpmsgout05.his.huawei.com (SkyGuard) with ESMTPS id 4dFlxx0sCrz12LJj; Tue, 25 Nov 2025 09:50:13 +0800 (CST) Received: from kwepemk500009.china.huawei.com (unknown [7.202.194.94]) by mail.maildlp.com (Postfix) with ESMTPS id 81F9D180B58; Tue, 25 Nov 2025 09:51:37 +0800 (CST) Received: from localhost.localdomain (10.50.163.32) by kwepemk500009.china.huawei.com (7.202.194.94) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.11; Tue, 25 Nov 2025 09:51:37 +0800 From: Chengwen Feng To: , CC: Subject: [PATCH 24.11 3/3] [PATCH 24.11] app/dma-perf: fix stopping device Date: Tue, 25 Nov 2025 09:51:30 +0800 Message-ID: <20251125015130.12867-4-fengchengwen@huawei.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20251125015130.12867-1-fengchengwen@huawei.com> References: <20251125015130.12867-1-fengchengwen@huawei.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.50.163.32] X-ClientProxiedBy: kwepems100001.china.huawei.com (7.221.188.238) To kwepemk500009.china.huawei.com (7.202.194.94) X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org [ upstream commit cca4c3bc3feb16226480ea9b3c1dc5e7f0116fee ] The benchmark do stop-dmadev at last, it has two problem: 1. it still invoke stop-dmadev when something wrong before config-dmadev. 2. the dmadev may working but the memory are freed. Fixes: 623dc9364dc6 ("app/dma-perf: introduce DMA performance test") Cc: stable@dpdk.org Signed-off-by: Chengwen Feng --- app/test-dma-perf/benchmark.c | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/app/test-dma-perf/benchmark.c b/app/test-dma-perf/benchmark.c index fc583725c4..537cc7618c 100644 --- a/app/test-dma-perf/benchmark.c +++ b/app/test-dma-perf/benchmark.c @@ -257,6 +257,25 @@ config_dmadevs(struct test_configure *cfg) return 0; } +static void +stop_dmadev(struct test_configure *cfg, bool *stopped) +{ + struct lcore_dma_map_t *lcore_dma_map; + uint32_t i; + + if (*stopped) + return; + + if (cfg->is_dma) { + for (i = 0; i < cfg->num_worker; i++) { + lcore_dma_map = &cfg->dma_config[i].lcore_dma_map; + printf("Stopping dmadev %d\n", lcore_dma_map->dma_id); + rte_dma_stop(lcore_dma_map->dma_id); + } + } + *stopped = true; +} + static void error_exit(int dev_id) { @@ -709,6 +728,7 @@ mem_copy_benchmark(struct test_configure *cfg) float memory = 0; uint32_t avg_cycles = 0; uint32_t avg_cycles_total; + bool dev_stopped = false; float mops, mops_total; float bandwidth, bandwidth_total; uint32_t nr_sgsrc = 0, nr_sgdst = 0; @@ -770,7 +790,7 @@ mem_copy_benchmark(struct test_configure *cfg) vchan_dev->tdir == RTE_DMA_DIR_MEM_TO_DEV) { if (attach_ext_buffer(vchan_dev, lcores[i], cfg->is_sg, (nr_sgsrc/nb_workers), (nr_sgdst/nb_workers)) < 0) - goto out; + goto stop_dmadev; } rte_eal_remote_launch(get_work_function(cfg), (void *)(lcores[i]), lcore_id); @@ -805,6 +825,8 @@ mem_copy_benchmark(struct test_configure *cfg) rte_eal_mp_wait_lcore(); + stop_dmadev(cfg, &dev_stopped); + for (k = 0; k < nb_workers; k++) { struct rte_mbuf **src_buf = NULL, **dst_buf = NULL; uint32_t nr_buf_pt = nr_buf / nb_workers; @@ -889,6 +911,8 @@ mem_copy_benchmark(struct test_configure *cfg) cfg->scenario_id, nr_buf, memory * nb_workers, (avg_cycles_total * (float) 1.0) / nb_workers, bandwidth_total, mops_total); +stop_dmadev: + stop_dmadev(cfg, &dev_stopped); out: for (k = 0; k < nb_workers; k++) { @@ -944,13 +968,5 @@ mem_copy_benchmark(struct test_configure *cfg) lcores[i] = NULL; } - if (cfg->is_dma) { - for (i = 0; i < nb_workers; i++) { - lcore_dma_map = &cfg->dma_config[i].lcore_dma_map; - printf("Stopping dmadev %d\n", lcore_dma_map->dma_id); - rte_dma_stop(lcore_dma_map->dma_id); - } - } - return ret; } -- 2.17.1