From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (xvm-189-124.dc0.ghst.net [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 15E79A0524; Fri, 8 Jan 2021 17:31:14 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id ED65A140EB8; Fri, 8 Jan 2021 17:31:13 +0100 (CET) Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by mails.dpdk.org (Postfix) with ESMTP id 6A26C140EA9 for ; Fri, 8 Jan 2021 17:31:12 +0100 (CET) IronPort-SDR: D2KN7zgs/NZrUNHOgBKoj3qIESjGWG+81zQYJI/KqzrqXUpAtVjeuil1cF9Jo62TJjgM+ugBp/ 59JSpbcAn6HA== X-IronPort-AV: E=McAfee;i="6000,8403,9857"; a="177717511" X-IronPort-AV: E=Sophos;i="5.79,331,1602572400"; d="scan'208";a="177717511" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jan 2021 08:31:11 -0800 IronPort-SDR: UKs68H2cD17m/IlZHQ/ooAq6kobuF33E3HFBv/Lz5HO7z7fsgy79I1ULAWgmZozXo7ud+3TLVW ty4Ztdzwk4lg== X-IronPort-AV: E=Sophos;i="5.79,331,1602572400"; d="scan'208";a="422993618" Received: from aburakov-mobl.ger.corp.intel.com (HELO [10.213.237.8]) ([10.213.237.8]) by orsmga001-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jan 2021 08:31:08 -0800 To: Andrew Rybchenko , dev@dpdk.org Cc: Liang Ma , Thomas Monjalon , Ferruh Yigit , Ray Kinsella , Neil Horman , konstantin.ananyev@intel.com, gage.eads@intel.com, timothy.mcdaniel@intel.com, david.hunt@intel.com, bruce.richardson@intel.com, chris.macnamara@intel.com References: <8f06ba8347a3b464eba41ee4985b83934422c89a.1608213657.git.anatoly.burakov@intel.com> <01cc4862-244f-74b8-b482-6b7b08549d01@oktetlabs.ru> From: "Burakov, Anatoly" Message-ID: Date: Fri, 8 Jan 2021 16:30:54 +0000 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Thunderbird/68.12.0 MIME-Version: 1.0 In-Reply-To: <01cc4862-244f-74b8-b482-6b7b08549d01@oktetlabs.ru> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Subject: Re: [dpdk-dev] [PATCH v12 06/11] ethdev: add simple power management API 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 28-Dec-20 11:00 AM, Andrew Rybchenko wrote: > On 12/17/20 5:05 PM, Anatoly Burakov wrote: >> From: Liang Ma >> >> Add a simple API to allow getting the monitor conditions for >> power-optimized monitoring of the RX queues from the PMD, as well as >> release notes information. >> >> Signed-off-by: Liang Ma >> Signed-off-by: Anatoly Burakov >> Acked-by: Konstantin Ananyev >> --- Hi Andrew, Thanks for your review! >> @@ -55,6 +55,10 @@ New Features >> Also, make sure to start the actual text at the margin. >> ======================================================= >> >> +* **ethdev: added 1 new API for PMD power management** > > "1 new API" sounds a bit confusing. May be just "a new API"? > >> + >> + * ``rte_eth_get_monitor_addr()``, to be used in conjunction with >> + ``rte_power_monitor()`` to enable automatic power management for PMD's. > > Missing extra empty line here. > Will fix. >> >> Removed Items >> ------------- >> diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c >> index 17ddacc78d..58f68321ea 100644 >> --- a/lib/librte_ethdev/rte_ethdev.c >> +++ b/lib/librte_ethdev/rte_ethdev.c >> @@ -5115,6 +5115,34 @@ rte_eth_tx_burst_mode_get(uint16_t port_id, uint16_t queue_id, >> dev->dev_ops->tx_burst_mode_get(dev, queue_id, mode)); >> } >> >> +int >> +rte_eth_get_monitor_addr(uint16_t port_id, uint16_t queue_id, >> + struct rte_power_monitor_cond *pmc) >> +{ >> + struct rte_eth_dev *dev; >> + >> + RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV); >> + >> + dev = &rte_eth_devices[port_id]; >> + >> + RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->get_monitor_addr, -ENOTSUP); >> + >> + if (queue_id >= dev->data->nb_tx_queues) { >> + RTE_ETHDEV_LOG(ERR, "Invalid TX queue_id=%u\n", queue_id); > > Why is Tx queue checked and logged here, but Rx queue is used > below? I guess Rx should be used here as well. > > I.e. TX -> Rx > Yep, fixed already. >> + return -EINVAL; >> + } >> + >> + if (pmc == NULL) { >> + RTE_ETHDEV_LOG(ERR, "Invalid power monitor condition=%p\n", >> + pmc); >> + return -EINVAL; >> + } >> + >> + return eth_err(port_id, >> + dev->dev_ops->get_monitor_addr(dev->data->rx_queues[queue_id], >> + pmc)); >> +} >> + >> int >> rte_eth_dev_set_mc_addr_list(uint16_t port_id, >> struct rte_ether_addr *mc_addr_set, >> diff --git a/lib/librte_ethdev/rte_ethdev.h b/lib/librte_ethdev/rte_ethdev.h >> index f5f8919186..ca0f91312e 100644 >> --- a/lib/librte_ethdev/rte_ethdev.h >> +++ b/lib/librte_ethdev/rte_ethdev.h >> @@ -157,6 +157,7 @@ extern "C" { >> #include >> #include >> #include >> +#include >> >> #include "rte_ethdev_trace_fp.h" >> #include "rte_dev_info.h" >> @@ -4334,6 +4335,30 @@ __rte_experimental >> int rte_eth_tx_burst_mode_get(uint16_t port_id, uint16_t queue_id, >> struct rte_eth_burst_mode *mode); >> >> +/** >> + * @warning >> + * @b EXPERIMENTAL: this API may change without prior notice >> + * >> + * Retrieve the monitor condition for a given receive queue. >> + * >> + * @param port_id >> + * The port identifier of the Ethernet device. >> + * @param queue_id >> + * The Rx queue on the Ethernet device for which information >> + * will be retrieved. >> + * @param pmc >> + * The pointer point to power-optimized monitoring condition structure. >> + * >> + * @return >> + * - 0: Success. >> + * -ENOTSUP: Operation not supported. >> + * -EINVAL: Invalid parameters. >> + * -ENODEV: Invalid port ID. >> + */ >> +__rte_experimental >> +int rte_eth_get_monitor_addr(uint16_t port_id, uint16_t queue_id, >> + struct rte_power_monitor_cond *pmc); >> + >> /** >> * Retrieve device registers and register attributes (number of registers and >> * register size) >> diff --git a/lib/librte_ethdev/rte_ethdev_driver.h b/lib/librte_ethdev/rte_ethdev_driver.h >> index 0eacfd8425..ae4f152cf0 100644 >> --- a/lib/librte_ethdev/rte_ethdev_driver.h >> +++ b/lib/librte_ethdev/rte_ethdev_driver.h >> @@ -763,6 +763,26 @@ typedef int (*eth_hairpin_queue_peer_unbind_t) >> (struct rte_eth_dev *dev, uint16_t cur_queue, uint32_t direction); >> /**< @internal Unbind peer queue from the current queue. */ >> >> +/** >> + * @internal >> + * Get address of memory location whose contents will change whenever there is >> + * new data to be received on an RX queue. > > RX -> Rx > Will fix. >> + * >> + * @param rxq >> + * Ethdev queue pointer. >> + * @param pmc >> + * The pointer to power-optimized monitoring condition structure. >> + * @return >> + * Negative errno value on error, 0 on success. >> + * >> + * @retval 0 >> + * Success >> + * @retval -EINVAL >> + * Invalid parameters >> + */ >> +typedef int (*eth_get_monitor_addr_t)(void *rxq, >> + struct rte_power_monitor_cond *pmc); >> + >> /** >> * @internal A structure containing the functions exported by an Ethernet driver. >> */ >> @@ -917,6 +937,8 @@ struct eth_dev_ops { >> /**< Set up the connection between the pair of hairpin queues. */ >> eth_hairpin_queue_peer_unbind_t hairpin_queue_peer_unbind; >> /**< Disconnect the hairpin queues of a pair from each other. */ >> + eth_get_monitor_addr_t get_monitor_addr; >> + /**< Get next RX queue ring entry address. */ > > RX -> Rx > Will fix. >> }; >> >> /** >> diff --git a/lib/librte_ethdev/version.map b/lib/librte_ethdev/version.map >> index d3f5410806..a124e1e370 100644 >> --- a/lib/librte_ethdev/version.map >> +++ b/lib/librte_ethdev/version.map >> @@ -240,6 +240,9 @@ EXPERIMENTAL { >> rte_flow_get_restore_info; >> rte_flow_tunnel_action_decap_release; >> rte_flow_tunnel_item_release; >> + >> + # added in 21.02 >> + rte_eth_get_monitor_addr; >> }; >> >> INTERNAL { >> > -- Thanks, Anatoly