[4/5] lib/power: modify return of queue_stopped

Message ID 20210910130548.127017-5-miao.li@intel.com (mailing list archive)
State Superseded, archived
Delegated to: Maxime Coquelin
Headers
Series CPU Enabling: Implement rte_power_monitor API in virtio/vhost PMD |

Checks

Context Check Description
ci/checkpatch success coding style OK

Commit Message

Li, Miao Sept. 10, 2021, 1:05 p.m. UTC
  Since some vdevs like virtio and vhost do not support rxq_info_get and
queue state inquiry, the error return value -ENOTSUP need to be ignored
when queue_stopped cannot get rx queue information and rx queue state.
This patch changes the return value of queue_stopped when
rte_eth_rx_queue_info_get return ENOTSUP to support vdevs which cannot
provide rx queue information and rx queue state enable power management.

Signed-off-by: Miao Li <miao.li@intel.com>
---
 lib/power/rte_power_pmd_mgmt.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)
  

Comments

Anatoly Burakov Sept. 10, 2021, 1:15 p.m. UTC | #1
On 10-Sep-21 2:05 PM, Miao Li wrote:
> Since some vdevs like virtio and vhost do not support rxq_info_get and
> queue state inquiry, the error return value -ENOTSUP need to be ignored
> when queue_stopped cannot get rx queue information and rx queue state.
> This patch changes the return value of queue_stopped when
> rte_eth_rx_queue_info_get return ENOTSUP to support vdevs which cannot
> provide rx queue information and rx queue state enable power management.
> 
> Signed-off-by: Miao Li <miao.li@intel.com>
> ---
>   lib/power/rte_power_pmd_mgmt.c | 9 +++++++--
>   1 file changed, 7 insertions(+), 2 deletions(-)
> 
> diff --git a/lib/power/rte_power_pmd_mgmt.c b/lib/power/rte_power_pmd_mgmt.c
> index 0ce40f0875..39a2b4cd23 100644
> --- a/lib/power/rte_power_pmd_mgmt.c
> +++ b/lib/power/rte_power_pmd_mgmt.c
> @@ -382,8 +382,13 @@ queue_stopped(const uint16_t port_id, const uint16_t queue_id)
>   {
>   	struct rte_eth_rxq_info qinfo;
>   
> -	if (rte_eth_rx_queue_info_get(port_id, queue_id, &qinfo) < 0)
> -		return -1;
> +	int ret = rte_eth_rx_queue_info_get(port_id, queue_id, &qinfo);
> +	if (ret < 0) {
> +		if (ret == -ENOTSUP)
> +			return 1;
> +		else
> +			return -1;
> +	}
>   
>   	return qinfo.queue_state == RTE_ETH_QUEUE_STATE_STOPPED;
>   }
> 

This seems like a deficiency in the original implementation, good catch.

Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>
  

Patch

diff --git a/lib/power/rte_power_pmd_mgmt.c b/lib/power/rte_power_pmd_mgmt.c
index 0ce40f0875..39a2b4cd23 100644
--- a/lib/power/rte_power_pmd_mgmt.c
+++ b/lib/power/rte_power_pmd_mgmt.c
@@ -382,8 +382,13 @@  queue_stopped(const uint16_t port_id, const uint16_t queue_id)
 {
 	struct rte_eth_rxq_info qinfo;
 
-	if (rte_eth_rx_queue_info_get(port_id, queue_id, &qinfo) < 0)
-		return -1;
+	int ret = rte_eth_rx_queue_info_get(port_id, queue_id, &qinfo);
+	if (ret < 0) {
+		if (ret == -ENOTSUP)
+			return 1;
+		else
+			return -1;
+	}
 
 	return qinfo.queue_state == RTE_ETH_QUEUE_STATE_STOPPED;
 }