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 104C3A0A03; Tue, 19 Jan 2021 09:03:20 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 8A524140D21; Tue, 19 Jan 2021 09:03:19 +0100 (CET) Received: from shelob.oktetlabs.ru (shelob.oktetlabs.ru [91.220.146.113]) by mails.dpdk.org (Postfix) with ESMTP id E6E30140D1E for ; Tue, 19 Jan 2021 09:03:17 +0100 (CET) Received: from [192.168.38.17] (aros.oktetlabs.ru [192.168.38.17]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by shelob.oktetlabs.ru (Postfix) with ESMTPSA id 94D467F4AC; Tue, 19 Jan 2021 11:03:17 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 shelob.oktetlabs.ru 94D467F4AC DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=oktetlabs.ru; s=default; t=1611043397; bh=CGN1KcTBYPcl2vfa1nY07PUTiLgZmzsWr3ZJEWYWfBo=; h=Subject:To:Cc:References:From:Date:In-Reply-To; b=jvZ2zUixKmSmRtVfEBcrpD1gJ7m6ZwggfDB1FOSbhtCEQFahuL/C2ZB8tLCe5ObAX +q/KoXFcfklMLmoOurBbVU+y+OINYASw5LG8XKZloJ6oPo0kYs+kgL2WU6ZWPn/qW1 MYBfE/MpVLTwD5BYxt4jjIO+VxoNCTGT1gFjpJLA= To: Xueming Li Cc: dev@dpdk.org, Viacheslav Ovsiienko , Asaf Penso , Bruce Richardson , Thomas Monjalon , Ferruh Yigit References: <1611040501-11666-1-git-send-email-xuemingl@nvidia.com> <1611040501-11666-6-git-send-email-xuemingl@nvidia.com> From: Andrew Rybchenko Organization: OKTET Labs Message-ID: <9d27443a-85c2-44e0-7222-00caa70296b4@oktetlabs.ru> Date: Tue, 19 Jan 2021 11:03:17 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.6.0 MIME-Version: 1.0 In-Reply-To: <1611040501-11666-6-git-send-email-xuemingl@nvidia.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Subject: Re: [dpdk-dev] [PATCH v5 6/9] ethdev: support multi-host in representor X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 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" On 1/19/21 10:14 AM, Xueming Li wrote: > The NIC can have multiple PCIe links and can be attached to the multiple > hosts, for example the same single NIC can be shared for multiple server > units in the rack. On each PCIe link NIC can provide multiple PFs and > VFs/SFs based on these ones. To provide the unambiguous identification > of the PCIe function the controller index is added. The full representor > identifier consists of three indices - controller index, PF index, and > VF or SF index (if any). > > This patch introduces controller index to ethdev representor syntax, > examples: > > [[c#]pf#]vf#: VF port representor/s, example: pf0vf1 > [[c#]pf#]sf#: SF port representor/s, example: c1pf1sf[0-3] > > c# is controller(host) ID/range in case of multi-host, optional. > > For user application (e.g. OVS), PMD is responsible to interpret and > locate representor device based on controller ID, PF ID and VF/SF ID in > representor syntax. > > Signed-off-by: Xueming Li > Acked-by: Viacheslav Ovsiienko > Acked-by: Thomas Monjalon > --- > config/rte_config.h | 1 + > lib/librte_ethdev/ethdev_private.c | 12 ++++++++++-- > lib/librte_ethdev/rte_ethdev_driver.h | 4 ++++ > 3 files changed, 15 insertions(+), 2 deletions(-) > > diff --git a/config/rte_config.h b/config/rte_config.h > index a0b5160ff2..23d02d51ef 100644 > --- a/config/rte_config.h > +++ b/config/rte_config.h > @@ -58,6 +58,7 @@ > #define RTE_MAX_QUEUES_PER_PORT 1024 > #define RTE_ETHDEV_QUEUE_STAT_CNTRS 16 /* max 256 */ > #define RTE_ETHDEV_RXTX_CALLBACKS 1 > +#define RTE_MAX_MULTI_HOST_CTRLS 4 > > /* cryptodev defines */ > #define RTE_CRYPTO_MAX_DEVS 64 > diff --git a/lib/librte_ethdev/ethdev_private.c b/lib/librte_ethdev/ethdev_private.c > index b9fdbd0f72..9a0945c22e 100644 > --- a/lib/librte_ethdev/ethdev_private.c > +++ b/lib/librte_ethdev/ethdev_private.c > @@ -120,8 +120,8 @@ rte_eth_devargs_process_list(char *str, uint16_t *list, uint16_t *len_list, > * > * Representor format: > * #: range or single number of VF representor - legacy > - * [pf#]vf#: VF port representor/s > - * [pf#]sf#: SF port representor/s > + * [[c#]pf#]vf#: VF port representor/s > + * [[c#]pf#]sf#: SF port representor/s > * > * Examples of #: > * 2 - single > @@ -133,6 +133,14 @@ rte_eth_devargs_parse_representor_ports(char *str, void *data) > { > struct rte_eth_devargs *eth_da = data; > > + if (str[0] == 'c') { > + str += 1; > + str = rte_eth_devargs_process_list(str, eth_da->mh_controllers, > + ð_da->nb_mh_controllers, > + RTE_DIM(eth_da->mh_controllers)); > + if (str == NULL) > + goto err; The parser must enforce pf to follow. I.e. should not allow c1vf3. At least above syntax description in comments says so. > + } > if (str[0] == 'p' && str[1] == 'f') { > eth_da->type = RTE_ETH_REPRESENTOR_PF; > str += 2; > diff --git a/lib/librte_ethdev/rte_ethdev_driver.h b/lib/librte_ethdev/rte_ethdev_driver.h > index cd33184f17..b01f118965 100644 > --- a/lib/librte_ethdev/rte_ethdev_driver.h > +++ b/lib/librte_ethdev/rte_ethdev_driver.h > @@ -1203,6 +1203,10 @@ enum rte_eth_representor_type { > > /** Generic Ethernet device arguments */ > struct rte_eth_devargs { > + uint16_t mh_controllers[RTE_MAX_MULTI_HOST_CTRLS]; > + /** controller/s number in case of multi-host */ > + uint16_t nb_mh_controllers; > + /** number of controllers in multi-host controllers field */ > uint16_t ports[RTE_MAX_ETHPORTS]; > /** port/s number to enable on a multi-port single function */ > uint16_t nb_ports; >