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 E890DA00C4; Sat, 22 Jan 2022 09:17:23 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 875DC4277A; Sat, 22 Jan 2022 09:17:23 +0100 (CET) Received: from shelob.oktetlabs.ru (shelob.oktetlabs.ru [91.220.146.113]) by mails.dpdk.org (Postfix) with ESMTP id 4EB9B40040 for ; Sat, 22 Jan 2022 09:17:22 +0100 (CET) Received: from [192.168.90.214] (unknown [188.170.77.254]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by shelob.oktetlabs.ru (Postfix) with ESMTPSA id 0FD6638; Sat, 22 Jan 2022 11:17:19 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 shelob.oktetlabs.ru 0FD6638 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=oktetlabs.ru; s=default; t=1642839440; bh=nI2QOKygZsNQ/jXD2xfUNrL1PZpC/QinFjl6oSQqPwM=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=cH1nuwcBMBab/HgSwH8iTdB4zCNGj6hS3VYEyzlg4RWHfkjdryjTGyyrvozR46F8a mqphnyih4mlrSagpCg0ehqpwx/UeyjPD9u1Px9FiyYnBYAMMHfFEXBUU+JkemisTiE t0vJKSUQU4av1+i3HkfLVfDVD/YAmDq7AVK6Y1g0= Message-ID: <59a25a9f-10bc-f295-ab8c-7ae97f511a31@oktetlabs.ru> Date: Sat, 22 Jan 2022 11:17:17 +0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.5.0 Subject: Re: [PATCH v2 2/4] ethdev: add dev op to set/get IP reassembly configuration Content-Language: en-US To: Akhil Goyal , dev@dpdk.org Cc: anoobj@marvell.com, radu.nicolau@intel.com, declan.doherty@intel.com, hemant.agrawal@nxp.com, matan@nvidia.com, konstantin.ananyev@intel.com, thomas@monjalon.net, ferruh.yigit@intel.com, olivier.matz@6wind.com, rosen.xu@intel.com, jerinj@marvell.com References: <20220103150813.1694888-1-gakhil@marvell.com> <20220120162627.4155695-1-gakhil@marvell.com> <20220120162627.4155695-3-gakhil@marvell.com> From: Andrew Rybchenko In-Reply-To: <20220120162627.4155695-3-gakhil@marvell.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit 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 On 1/20/22 19:26, Akhil Goyal wrote: > A new ethernet device op is added to give application control over ethernet -> Ethernet > the IP reassembly configuration. This operation is an optional > call from the application, default values are set by PMD and > exposed via rte_eth_dev_info. Are defaults or maximum support values exposed via rte_eth_dev_info? I guess it should be maximum. Defaults can be obtained using get without set. > Application should always first retrieve the capabilities from > rte_eth_dev_info and then set the fields accordingly. > User can get the currently set values using the get API. > > Signed-off-by: Akhil Goyal [snip] > +/** > + * @internal > + * Set configuration parameters for enabling IP reassembly offload in hardware. > + * > + * @param dev > + * Port (ethdev) handle > + * > + * @param[in] conf > + * Configuration parameters for IP reassembly. > + * > + * @return > + * Negative errno value on error, zero otherwise > + */ > +typedef int (*eth_ip_reassembly_conf_set_t)(struct rte_eth_dev *dev, > + struct rte_eth_ip_reass_params *conf); const [snip] > +int > +rte_eth_ip_reassembly_conf_get(uint16_t port_id, > + struct rte_eth_ip_reass_params *conf) Please, preserve order everywhere. If get comes first, it must be first everywhere. > +{ > + struct rte_eth_dev *dev; > + > + RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV); > + dev = &rte_eth_devices[port_id]; > + > + if (conf == NULL) { > + RTE_ETHDEV_LOG(ERR, "Cannot get reassembly info to NULL"); > + return -EINVAL; > + } Why is order of check different in set and get? > + > + if (dev->data->dev_configured == 0) { > + RTE_ETHDEV_LOG(ERR, > + "Device with port_id=%"PRIu16" is not configured.\n", > + port_id); > + return -EINVAL; > + } > + > + if ((dev->data->dev_conf.rxmode.offloads & > + RTE_ETH_RX_OFFLOAD_IP_REASSEMBLY) == 0) { > + RTE_ETHDEV_LOG(ERR, > + "The port (ID=%"PRIu16") is not configured for IP reassembly\n", > + port_id); > + return -EINVAL; > + } > + > + RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->ip_reassembly_conf_get, > + -ENOTSUP); > + memset(conf, 0, sizeof(struct rte_eth_ip_reass_params)); > + return eth_err(port_id, > + (*dev->dev_ops->ip_reassembly_conf_get)(dev, conf)); > +} > + > RTE_LOG_REGISTER_DEFAULT(rte_eth_dev_logtype, INFO); > > RTE_INIT(ethdev_init_telemetry) > diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h > index 11427b2e4d..53af158bcb 100644 > --- a/lib/ethdev/rte_ethdev.h > +++ b/lib/ethdev/rte_ethdev.h > @@ -5218,6 +5218,57 @@ int rte_eth_representor_info_get(uint16_t port_id, > __rte_experimental > int rte_eth_rx_metadata_negotiate(uint16_t port_id, uint64_t *features); > > +/** > + * @warning > + * @b EXPERIMENTAL: this API may change without prior notice > + * > + * Get IP reassembly configuration parameters currently set in PMD, > + * if device rx offload flag (RTE_ETH_RX_OFFLOAD_IP_REASSEMBLY) is rx -> Rx > + * enabled and the PMD supports IP reassembly offload. > + * > + * @param port_id > + * The port identifier of the device. > + * @param conf > + * A pointer to rte_eth_ip_reass_params structure. > + * @return > + * - (-ENOTSUP) if offload configuration is not supported by device. > + * - (-EINVAL) if offload is not enabled in rte_eth_conf. > + * - (-ENODEV) if *port_id* invalid. > + * - (-EIO) if device is removed. > + * - (0) on success. > + */ > +__rte_experimental > +int rte_eth_ip_reassembly_conf_get(uint16_t port_id, > + struct rte_eth_ip_reass_params *conf); > + > +/** > + * @warning > + * @b EXPERIMENTAL: this API may change without prior notice > + * > + * Set IP reassembly configuration parameters if device rx offload rx -> Rx > + * flag (RTE_ETH_RX_OFFLOAD_IP_REASSEMBLY) is enabled and the PMD > + * supports IP reassembly offload. User should first check the > + * reass_capa in rte_eth_dev_info before setting the configuration. > + * The values of configuration parameters must not exceed the device > + * capabilities. It sounds like set API should retrieve dev_info and check set values vs maximums. > The use of this API is optional and if called, it > + * should be called before rte_eth_dev_start(). It should be highlighted that the device must be already configured. > + * > + * @param port_id > + * The port identifier of the device. > + * @param conf > + * A pointer to rte_eth_ip_reass_params structure. > + * @return > + * - (-ENOTSUP) if offload configuration is not supported by device. > + * - (-EINVAL) if offload is not enabled in rte_eth_conf. > + * - (-ENODEV) if *port_id* invalid. > + * - (-EIO) if device is removed. > + * - (0) on success. > + */ > +__rte_experimental > +int rte_eth_ip_reassembly_conf_set(uint16_t port_id, > + struct rte_eth_ip_reass_params *conf); > + > + > #include > > /** > diff --git a/lib/ethdev/version.map b/lib/ethdev/version.map > index c2fb0669a4..ad829dd47e 100644 > --- a/lib/ethdev/version.map > +++ b/lib/ethdev/version.map > @@ -256,6 +256,10 @@ EXPERIMENTAL { > rte_flow_flex_item_create; > rte_flow_flex_item_release; > rte_flow_pick_transfer_proxy; > + > + #added in 22.03 > + rte_eth_ip_reassembly_conf_get; > + rte_eth_ip_reassembly_conf_set; > }; > > INTERNAL {