From patchwork Mon Dec 2 15:41:46 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Marchand X-Patchwork-Id: 63504 X-Patchwork-Delegate: david.marchand@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 75A09A04B5; Mon, 2 Dec 2019 16:42:04 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 46D291BE83; Mon, 2 Dec 2019 16:42:04 +0100 (CET) Received: from us-smtp-delivery-1.mimecast.com (us-smtp-2.mimecast.com [207.211.31.81]) by dpdk.org (Postfix) with ESMTP id D045C1B9B7 for ; Mon, 2 Dec 2019 16:42:02 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1575301322; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=CeF+CjR51GGyKB9W+Sav3deyxrn+JSL1kVPSO3depL4=; b=W83VFS+87/u3gLIDC/iAZsLCQcNnvvf8khIIVxLMx7h5XY5U8CUEc2S0+yxTcPWnGLQyuk SNfOkYR3xIXTQJifiLNHFBDTDUduGlwjX78xnwKHcIbY1OGmZA4cPxh9ZlhwJ90EkcOIrR Wm/BRFP5ZO0ecsA3CxFUFnL2oEMeYo8= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-25-EkYGFuxeN2GZGOm1DUvyCA-1; Mon, 02 Dec 2019 10:41:59 -0500 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id E546564A90; Mon, 2 Dec 2019 15:41:57 +0000 (UTC) Received: from dmarchan.remote.csb (ovpn-205-88.brq.redhat.com [10.40.205.88]) by smtp.corp.redhat.com (Postfix) with ESMTP id 883BB60C05; Mon, 2 Dec 2019 15:41:55 +0000 (UTC) From: David Marchand To: dev@dpdk.org Cc: aconole@redhat.com, stable@dpdk.org, Harini Ramakrishnan , Omar Cardona , Anand Rawat , Ranjit Menon Date: Mon, 2 Dec 2019 16:41:46 +0100 Message-Id: <20191202154146.10600-1-david.marchand@redhat.com> In-Reply-To: <20191202153559.9709-1-david.marchand@redhat.com> References: <20191202153559.9709-1-david.marchand@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-MC-Unique: EkYGFuxeN2GZGOm1DUvyCA-1 X-Mimecast-Spam-Score: 0 Subject: [dpdk-dev] [PATCH 1/4] eal/windows: fix cpuset macro name X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Fix the name of CPU_SETSIZE in hope we can reuse it in other parts of the dpdk manipulating some rte_cpuset_t. Fixes: 4dc2b4d2a4cd ("eal/windows: add headers for compatibility") Cc: stable@dpdk.org Signed-off-by: David Marchand --- lib/librte_eal/windows/eal/include/sched.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/librte_eal/windows/eal/include/sched.h b/lib/librte_eal/windows/eal/include/sched.h index 257060594c..29868c93d1 100644 --- a/lib/librte_eal/windows/eal/include/sched.h +++ b/lib/librte_eal/windows/eal/include/sched.h @@ -14,8 +14,8 @@ extern "C" { #endif -#ifndef CPU_SET_SIZE -#define CPU_SET_SIZE RTE_MAX_LCORE +#ifndef CPU_SETSIZE +#define CPU_SETSIZE RTE_MAX_LCORE #endif #define _BITS_PER_SET (sizeof(long long) * 8) @@ -26,7 +26,7 @@ extern "C" { #define _WHICH_BIT(b) ((b) & (_BITS_PER_SET - 1)) typedef struct _rte_cpuset_s { - long long _bits[_NUM_SETS(CPU_SET_SIZE)]; + long long _bits[_NUM_SETS(CPU_SETSIZE)]; } rte_cpuset_t; #define CPU_SET(b, s) ((s)->_bits[_WHICH_SET(b)] |= (1LL << _WHICH_BIT(b))) @@ -35,7 +35,7 @@ typedef struct _rte_cpuset_s { do { \ unsigned int _i; \ \ - for (_i = 0; _i < _NUM_SETS(CPU_SET_SIZE); _i++) \ + for (_i = 0; _i < _NUM_SETS(CPU_SETSIZE); _i++) \ (s)->_bits[_i] = 0LL; \ } while (0) From patchwork Mon Dec 2 15:42:01 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Marchand X-Patchwork-Id: 63505 X-Patchwork-Delegate: david.marchand@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 64794A04B5; Mon, 2 Dec 2019 16:42:11 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 025451BDFD; Mon, 2 Dec 2019 16:42:11 +0100 (CET) Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [207.211.31.120]) by dpdk.org (Postfix) with ESMTP id DEC091BDFD for ; Mon, 2 Dec 2019 16:42:09 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1575301329; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=RIHeK1j4oXPi6ZvVIBfd7V7RyeHhAv+KgjUpHAcFENA=; b=gQHZ/iB5Rb9aF4l+6CV+nOqudQnRgfHqvKG1bpLxUf/VDSUn5Do2OuMrQiRDNLqMv/rO1v AbVdP24IzIRhZ/sagd+sh0SFktkK6uX0MJDbRz+fYZ8YJ4ssIus+eLHX8viWExhfBGkJyd 9n64E3sN8bcd2VnY9J0iBZoEZ7OKY4c= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-305-VCzHXVXpMEGFXzs7-hk_dA-1; Mon, 02 Dec 2019 10:42:08 -0500 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 703531099BAF for ; Mon, 2 Dec 2019 15:42:07 +0000 (UTC) Received: from dmarchan.remote.csb (ovpn-205-88.brq.redhat.com [10.40.205.88]) by smtp.corp.redhat.com (Postfix) with ESMTP id 4ACDE5DA2C; Mon, 2 Dec 2019 15:42:05 +0000 (UTC) From: David Marchand To: dev@dpdk.org Cc: aconole@redhat.com Date: Mon, 2 Dec 2019 16:42:01 +0100 Message-Id: <20191202154201.10721-1-david.marchand@redhat.com> In-Reply-To: <20191202153559.9709-1-david.marchand@redhat.com> References: <20191202153559.9709-1-david.marchand@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-MC-Unique: VCzHXVXpMEGFXzs7-hk_dA-1 X-Mimecast-Spam-Score: 0 Subject: [dpdk-dev] [PATCH 2/4] eal: do not cache lcore detection state X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" We use this state in control path only for services cores and -c/-l options. The value is not updated when using --lcores. Use the internal helper where needed. Signed-off-by: David Marchand --- lib/librte_eal/common/eal_common_lcore.c | 4 +--- lib/librte_eal/common/eal_common_options.c | 10 +++++----- lib/librte_eal/common/eal_private.h | 1 - 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/lib/librte_eal/common/eal_common_lcore.c b/lib/librte_eal/common/eal_common_lcore.c index 39efadef1a..1d16fb2156 100644 --- a/lib/librte_eal/common/eal_common_lcore.c +++ b/lib/librte_eal/common/eal_common_lcore.c @@ -139,9 +139,7 @@ rte_eal_cpu_init(void) socket_id = eal_cpu_socket_id(lcore_id); lcore_to_socket_id[lcore_id] = socket_id; - /* in 1:1 mapping, record related cpu detected state */ - lcore_config[lcore_id].detected = eal_cpu_detected(lcore_id); - if (lcore_config[lcore_id].detected == 0) { + if (eal_cpu_detected(lcore_id) == 0) { config->lcore_role[lcore_id] = ROLE_OFF; lcore_config[lcore_id].core_index = -1; continue; diff --git a/lib/librte_eal/common/eal_common_options.c b/lib/librte_eal/common/eal_common_options.c index a7f9c5f9bd..68f7d1cd73 100644 --- a/lib/librte_eal/common/eal_common_options.c +++ b/lib/librte_eal/common/eal_common_options.c @@ -373,7 +373,7 @@ eal_parse_service_coremask(const char *coremask) return -1; } - if (!lcore_config[idx].detected) { + if (eal_cpu_detected(idx) == 0) { RTE_LOG(ERR, EAL, "lcore %u unavailable\n", idx); return -1; @@ -429,7 +429,7 @@ update_lcore_config(int *cores) for (i = 0; i < RTE_MAX_LCORE; i++) { if (cores[i] != -1) { - if (!lcore_config[i].detected) { + if (eal_cpu_detected(i) == 0) { RTE_LOG(ERR, EAL, "lcore %u unavailable\n", i); ret = -1; continue; @@ -785,7 +785,7 @@ convert_to_cpuset(rte_cpuset_t *cpusetp, if (!set[idx]) continue; - if (!lcore_config[idx].detected) { + if (eal_cpu_detected(idx) == 0) { RTE_LOG(ERR, EAL, "core %u " "unavailable\n", idx); return -1; @@ -1138,7 +1138,7 @@ available_cores(void) /* find the first available cpu */ for (idx = 0; idx < RTE_MAX_LCORE; idx++) { - if (!lcore_config[idx].detected) + if (eal_cpu_detected(idx) == 0) continue; break; } @@ -1152,7 +1152,7 @@ available_cores(void) sequence = 0; for (idx++ ; idx < RTE_MAX_LCORE; idx++) { - if (!lcore_config[idx].detected) + if (eal_cpu_detected(idx) == 0) continue; if (idx == previous + 1) { diff --git a/lib/librte_eal/common/eal_private.h b/lib/librte_eal/common/eal_private.h index 8a9d493f0c..ddcfbe2e44 100644 --- a/lib/librte_eal/common/eal_private.h +++ b/lib/librte_eal/common/eal_private.h @@ -29,7 +29,6 @@ struct lcore_config { unsigned int core_id; /**< core number on socket for this lcore */ int core_index; /**< relative index, starting from 0 */ uint8_t core_role; /**< role of core eg: OFF, RTE, SERVICE */ - uint8_t detected; /**< true if lcore was detected */ rte_cpuset_t cpuset; /**< cpu set which the lcore affinity to */ }; From patchwork Mon Dec 2 15:42:10 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Marchand X-Patchwork-Id: 63506 X-Patchwork-Delegate: david.marchand@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 8EF61A04B5; Mon, 2 Dec 2019 16:42:20 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 719051BE3D; Mon, 2 Dec 2019 16:42:20 +0100 (CET) Received: from us-smtp-delivery-1.mimecast.com (us-smtp-1.mimecast.com [205.139.110.61]) by dpdk.org (Postfix) with ESMTP id 803851BE3D for ; Mon, 2 Dec 2019 16:42:18 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1575301338; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ziPQrN0/eev7S2nwq9z4NKxVwAv428fZRgRx1k1TynY=; b=D8qjCMiJWYGh+F0LYt63ykRNkn7KyqIlQtPb3/SZ0ZHrxRtIw4CS+cau9p8JNzj3hciYCc XhbOO9QDMt7cQiZGQKRVr7Xmsqt2vPBVwbkNBCdcWRhxL3EJnSN99/XquraShXjAKFr4t1 V1+5lY4xPa74Eng2ryGPX8P/sUZGoao= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-382-E6-I7UFeNbu6MQPKkxYO2w-1; Mon, 02 Dec 2019 10:42:17 -0500 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 0D8F81099BB1 for ; Mon, 2 Dec 2019 15:42:16 +0000 (UTC) Received: from dmarchan.remote.csb (ovpn-205-88.brq.redhat.com [10.40.205.88]) by smtp.corp.redhat.com (Postfix) with ESMTP id B3768600C8; Mon, 2 Dec 2019 15:42:14 +0000 (UTC) From: David Marchand To: dev@dpdk.org Cc: aconole@redhat.com Date: Mon, 2 Dec 2019 16:42:10 +0100 Message-Id: <20191202154210.10837-1-david.marchand@redhat.com> In-Reply-To: <20191202153559.9709-1-david.marchand@redhat.com> References: <20191202153559.9709-1-david.marchand@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-MC-Unique: E6-I7UFeNbu6MQPKkxYO2w-1 X-Mimecast-Spam-Score: 0 Subject: [dpdk-dev] [PATCH 3/4] eal: display all detected cores at startup X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Add debug logs to have a trace of unused cores for -c/-l options on systems with more cores than RTE_MAX_LCORE. Signed-off-by: David Marchand --- lib/librte_eal/common/eal_common_lcore.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/librte_eal/common/eal_common_lcore.c b/lib/librte_eal/common/eal_common_lcore.c index 1d16fb2156..5404922a87 100644 --- a/lib/librte_eal/common/eal_common_lcore.c +++ b/lib/librte_eal/common/eal_common_lcore.c @@ -159,6 +159,14 @@ rte_eal_cpu_init(void) lcore_config[lcore_id].socket_id); count++; } + for (; lcore_id < CPU_SETSIZE; lcore_id++) { + if (eal_cpu_detected(lcore_id) == 0) + continue; + RTE_LOG(DEBUG, EAL, "Skipped lcore %u as core %u on socket %u\n", + lcore_id, eal_cpu_core_id(lcore_id), + eal_cpu_socket_id(lcore_id)); + } + /* Set the count of enabled logical cores of the EAL configuration */ config->lcore_count = count; RTE_LOG(DEBUG, EAL, From patchwork Mon Dec 2 15:42:20 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Marchand X-Patchwork-Id: 63507 X-Patchwork-Delegate: david.marchand@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 3337BA04B5; Mon, 2 Dec 2019 16:42:33 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 093C01BF78; Mon, 2 Dec 2019 16:42:33 +0100 (CET) Received: from us-smtp-delivery-1.mimecast.com (us-smtp-1.mimecast.com [207.211.31.81]) by dpdk.org (Postfix) with ESMTP id 257371BF72 for ; Mon, 2 Dec 2019 16:42:32 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1575301351; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=jYnFyHDBht+CJgkN5pbSW/A2KzHaEuShXZwrAkdHwoA=; b=Wjbrz+h9J/M+W/W3AF2zl4xMAZWfU7RgqCDkZt/JXMfVmdE6UZrdIZYj7L5og14/HINAw9 0yOO6YO3ioIN1FBrog/G/3DlChutZD9sTCOLpVSB7wxPuObAkK9bHaIxvnkHxWWyxw5iG1 U32muM3Gxda404T8Z0D1I9vOD8huiZs= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-299-8QOJUvRaMGueyaoUusLzJw-1; Mon, 02 Dec 2019 10:42:28 -0500 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 9C632804901; Mon, 2 Dec 2019 15:42:27 +0000 (UTC) Received: from dmarchan.remote.csb (ovpn-205-88.brq.redhat.com [10.40.205.88]) by smtp.corp.redhat.com (Postfix) with ESMTP id 2960C5D6A0; Mon, 2 Dec 2019 15:42:25 +0000 (UTC) From: David Marchand To: dev@dpdk.org Cc: aconole@redhat.com, Hemant Agrawal , Sachin Saxena Date: Mon, 2 Dec 2019 16:42:20 +0100 Message-Id: <20191202154221.10942-1-david.marchand@redhat.com> In-Reply-To: <20191202153559.9709-1-david.marchand@redhat.com> References: <20191202153559.9709-1-david.marchand@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-MC-Unique: 8QOJUvRaMGueyaoUusLzJw-1 X-Mimecast-Spam-Score: 0 Subject: [dpdk-dev] [PATCH 4/4] eal: remove limitation on cpuset with --lcores X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Contrary to the -c/-l options, where a logical core runs on the same physical core in a 1:1 fashion (example: lcore 0 runs on core 0, lcore 16 runs on core 16), the --lcores option makes it possible to select the physical cores on which runs a logical core. However the current parsing code still limits the cpuset to the [0, RTE_MAX_LCORE] range. Example, before the patch, on a 24 cores system with RTE_MAX_LCORE == 16: $ ./master/app/testpmd --no-huge --no-pci -m 512 --log-level *:debug \ --lcores 0@16,1@17 -- -i --total-num-mbufs 2048 EAL: Detected lcore 0 as core 0 on socket 0 EAL: Detected lcore 1 as core 1 on socket 0 EAL: Detected lcore 2 as core 2 on socket 0 EAL: Detected lcore 3 as core 3 on socket 0 EAL: Detected lcore 4 as core 4 on socket 0 EAL: Detected lcore 5 as core 5 on socket 0 EAL: Detected lcore 6 as core 6 on socket 0 EAL: Detected lcore 7 as core 8 on socket 0 EAL: Detected lcore 8 as core 9 on socket 0 EAL: Detected lcore 9 as core 10 on socket 0 EAL: Detected lcore 10 as core 11 on socket 0 EAL: Detected lcore 11 as core 12 on socket 0 EAL: Detected lcore 12 as core 13 on socket 0 EAL: Detected lcore 13 as core 14 on socket 0 EAL: Detected lcore 14 as core 0 on socket 0 EAL: Detected lcore 15 as core 1 on socket 0 EAL: Skipped lcore 16 as core 2 on socket 0 EAL: Skipped lcore 17 as core 3 on socket 0 EAL: Skipped lcore 18 as core 4 on socket 0 EAL: Skipped lcore 19 as core 5 on socket 0 EAL: Skipped lcore 20 as core 6 on socket 0 EAL: Skipped lcore 21 as core 8 on socket 0 EAL: Skipped lcore 22 as core 9 on socket 0 EAL: Skipped lcore 23 as core 10 on socket 0 EAL: Skipped lcore 24 as core 11 on socket 0 EAL: Skipped lcore 25 as core 12 on socket 0 EAL: Skipped lcore 26 as core 13 on socket 0 EAL: Skipped lcore 27 as core 14 on socket 0 EAL: Support maximum 16 logical core(s) by configuration. EAL: Detected 16 lcore(s) EAL: Detected 1 NUMA nodes EAL: invalid parameter for --lcores We can remove this limitation by using a cpuset_t (which is a more natural type since this is what gets passed to pthread_setaffinity* in the end). After the patch: $ ./master/app/testpmd --no-huge --no-pci -m 512 --log-level *:debug \ --lcores 0@16,1@17 -- -i --total-num-mbufs 2048 [...] EAL: Master lcore 0 is ready (tid=7f94217bbc00;cpuset=[16]) EAL: lcore 1 is ready (tid=7f941f491700;cpuset=[17]) Signed-off-by: David Marchand --- drivers/bus/fslmc/portal/dpaa2_hw_dpio.c | 31 ++++++----- lib/librte_eal/common/eal_common_options.c | 63 +++++++++++----------- lib/librte_eal/common/eal_common_thread.c | 4 +- 3 files changed, 50 insertions(+), 48 deletions(-) diff --git a/drivers/bus/fslmc/portal/dpaa2_hw_dpio.c b/drivers/bus/fslmc/portal/dpaa2_hw_dpio.c index 3ca3ae4f51..739ce434ba 100644 --- a/drivers/bus/fslmc/portal/dpaa2_hw_dpio.c +++ b/drivers/bus/fslmc/portal/dpaa2_hw_dpio.c @@ -365,20 +365,25 @@ dpaa2_check_lcore_cpuset(void) dpaa2_cpu[lcore_id] = 0xffffffff; for (lcore_id = 0; lcore_id < RTE_MAX_LCORE; lcore_id++) { - for (i = 0; i < RTE_MAX_LCORE; i++) { - rte_cpuset_t cpuset = rte_lcore_cpuset(lcore_id); - - if (CPU_ISSET(i, &cpuset)) { - RTE_LOG(DEBUG, EAL, "lcore id = %u cpu=%u\n", - lcore_id, i); - if (dpaa2_cpu[lcore_id] != 0xffffffff) { - DPAA2_BUS_ERR( - "ERR:lcore map to multi-cpu not supported"); - ret = -1; - } else { - dpaa2_cpu[lcore_id] = i; - } + rte_cpuset_t cpuset = rte_lcore_cpuset(lcore_id); + + for (i = 0; i < CPU_SETSIZE; i++) { + if (!CPU_ISSET(i, &cpuset)) + continue; + if (i >= RTE_MAX_LCORE) { + DPAA2_BUS_ERR("ERR:lcore map to core %u (>= %u) not supported", + i, RTE_MAX_LCORE); + ret = -1; + continue; } + RTE_LOG(DEBUG, EAL, "lcore id = %u cpu=%u\n", + lcore_id, i); + if (dpaa2_cpu[lcore_id] != 0xffffffff) { + DPAA2_BUS_ERR("ERR:lcore map to multi-cpu not supported"); + ret = -1; + continue; + } + dpaa2_cpu[lcore_id] = i; } } return ret; diff --git a/lib/librte_eal/common/eal_common_options.c b/lib/librte_eal/common/eal_common_options.c index 68f7d1cd73..5920233bcd 100644 --- a/lib/librte_eal/common/eal_common_options.c +++ b/lib/librte_eal/common/eal_common_options.c @@ -658,14 +658,14 @@ eal_parse_master_lcore(const char *arg) * ',' used for a single number. */ static int -eal_parse_set(const char *input, uint16_t set[], unsigned num) +eal_parse_set(const char *input, rte_cpuset_t *set) { unsigned idx; const char *str = input; char *end = NULL; unsigned min, max; - memset(set, 0, num * sizeof(uint16_t)); + CPU_ZERO(set); while (isblank(*str)) str++; @@ -678,7 +678,7 @@ eal_parse_set(const char *input, uint16_t set[], unsigned num) if (*str != '(') { errno = 0; idx = strtoul(str, &end, 10); - if (errno || end == NULL || idx >= num) + if (errno || end == NULL || idx >= CPU_SETSIZE) return -1; else { while (isblank(*end)) @@ -696,7 +696,7 @@ eal_parse_set(const char *input, uint16_t set[], unsigned num) errno = 0; idx = strtoul(end, &end, 10); - if (errno || end == NULL || idx >= num) + if (errno || end == NULL || idx >= CPU_SETSIZE) return -1; max = idx; while (isblank(*end)) @@ -711,7 +711,7 @@ eal_parse_set(const char *input, uint16_t set[], unsigned num) for (idx = RTE_MIN(min, max); idx <= RTE_MAX(min, max); idx++) - set[idx] = 1; + CPU_SET(idx, set); return end - input; } @@ -736,7 +736,7 @@ eal_parse_set(const char *input, uint16_t set[], unsigned num) /* get the digit value */ errno = 0; idx = strtoul(str, &end, 10); - if (errno || end == NULL || idx >= num) + if (errno || end == NULL || idx >= CPU_SETSIZE) return -1; /* go ahead to separator '-',',' and ')' */ @@ -753,7 +753,7 @@ eal_parse_set(const char *input, uint16_t set[], unsigned num) min = idx; for (idx = RTE_MIN(min, max); idx <= RTE_MAX(min, max); idx++) - set[idx] = 1; + CPU_SET(idx, set); min = RTE_MAX_LCORE; } else @@ -772,17 +772,13 @@ eal_parse_set(const char *input, uint16_t set[], unsigned num) return str - input; } -/* convert from set array to cpuset bitmap */ static int -convert_to_cpuset(rte_cpuset_t *cpusetp, - uint16_t *set, unsigned num) +check_cpuset(rte_cpuset_t *set) { - unsigned idx; - - CPU_ZERO(cpusetp); + unsigned int idx; - for (idx = 0; idx < num; idx++) { - if (!set[idx]) + for (idx = 0; idx < CPU_SETSIZE; idx++) { + if (!CPU_ISSET(idx, set)) continue; if (eal_cpu_detected(idx) == 0) { @@ -790,10 +786,7 @@ convert_to_cpuset(rte_cpuset_t *cpusetp, "unavailable\n", idx); return -1; } - - CPU_SET(idx, cpusetp); } - return 0; } @@ -815,7 +808,8 @@ static int eal_parse_lcores(const char *lcores) { struct rte_config *cfg = rte_eal_get_configuration(); - static uint16_t set[RTE_MAX_LCORE]; + rte_cpuset_t lcore_set; + unsigned int set_count; unsigned idx = 0; unsigned count = 0; const char *lcore_start = NULL; @@ -864,18 +858,13 @@ eal_parse_lcores(const char *lcores) lcores += strcspn(lcores, "@,"); if (*lcores == '@') { - /* explicit assign cpu_set */ - offset = eal_parse_set(lcores + 1, set, RTE_DIM(set)); + /* explicit assign cpuset and update the end cursor */ + offset = eal_parse_set(lcores + 1, &cpuset); if (offset < 0) goto err; - - /* prepare cpu_set and update the end cursor */ - if (0 > convert_to_cpuset(&cpuset, - set, RTE_DIM(set))) - goto err; end = lcores + 1 + offset; } else { /* ',' or '\0' */ - /* haven't given cpu_set, current loop done */ + /* haven't given cpuset, current loop done */ end = lcores; /* go back to check - */ @@ -889,18 +878,19 @@ eal_parse_lcores(const char *lcores) goto err; /* parse lcore_set from start point */ - if (0 > eal_parse_set(lcore_start, set, RTE_DIM(set))) + if (eal_parse_set(lcore_start, &lcore_set) < 0) goto err; - /* without '@', by default using lcore_set as cpu_set */ - if (*lcores != '@' && - 0 > convert_to_cpuset(&cpuset, set, RTE_DIM(set))) - goto err; + /* without '@', by default using lcore_set as cpuset */ + if (*lcores != '@') + rte_memcpy(&cpuset, &lcore_set, sizeof(cpuset)); + set_count = CPU_COUNT(&lcore_set); /* start to update lcore_set */ for (idx = 0; idx < RTE_MAX_LCORE; idx++) { - if (!set[idx]) + if (!CPU_ISSET(idx, &lcore_set)) continue; + set_count--; if (cfg->lcore_role[idx] != ROLE_RTE) { lcore_config[idx].core_index = count; @@ -912,10 +902,17 @@ eal_parse_lcores(const char *lcores) CPU_ZERO(&cpuset); CPU_SET(idx, &cpuset); } + + if (check_cpuset(&cpuset) < 0) + goto err; rte_memcpy(&lcore_config[idx].cpuset, &cpuset, sizeof(rte_cpuset_t)); } + /* some cores from the lcore_set can't be handled by EAL */ + if (set_count != 0) + goto err; + lcores = end + 1; } while (*end != '\0'); diff --git a/lib/librte_eal/common/eal_common_thread.c b/lib/librte_eal/common/eal_common_thread.c index f9a8cf14d2..78581753c0 100644 --- a/lib/librte_eal/common/eal_common_thread.c +++ b/lib/librte_eal/common/eal_common_thread.c @@ -61,7 +61,7 @@ eal_cpuset_socket_id(rte_cpuset_t *cpusetp) break; } - } while (++cpu < RTE_MAX_LCORE); + } while (++cpu < CPU_SETSIZE); return socket_id; } @@ -118,7 +118,7 @@ eal_thread_dump_affinity(char *str, unsigned size) rte_thread_get_affinity(&cpuset); - for (cpu = 0; cpu < RTE_MAX_LCORE; cpu++) { + for (cpu = 0; cpu < CPU_SETSIZE; cpu++) { if (!CPU_ISSET(cpu, &cpuset)) continue;