[RFC,2/2] net/i40e: update requested queue pair num check for rounding

Message ID 20190305163039.16790-2-ktraynor@redhat.com (mailing list archive)
State Accepted, archived
Delegated to: Qi Zhang
Headers
Series [1/2] net/i40e: fix negative check on unsigned queue pairs |

Checks

Context Check Description
ci/Intel-compilation success Compilation OK

Commit Message

Kevin Traynor March 5, 2019, 4:30 p.m. UTC
  Since rounding up the requested queue pairs to allow the vf to
request a non-aligned number was added, it may happen that the
requested number is less than the available num of queues but the
rounded up number is greater. In this case, it is not caught with
the usual checks but later when there is a reset and failed setup.

By rounding earlier the checks can be done before a failed reset
occurs, and a rounded max amount of available queues can be returned
to the vf.

Cc: zhirun.yan@intel.com
Signed-off-by: Kevin Traynor <ktraynor@redhat.com>
---
 drivers/net/i40e/i40e_pf.c | 20 +++++++++++---------
 1 file changed, 11 insertions(+), 9 deletions(-)
  

Comments

Qi Zhang March 11, 2019, 2:18 a.m. UTC | #1
> -----Original Message-----
> From: Kevin Traynor [mailto:ktraynor@redhat.com]
> Sent: Wednesday, March 6, 2019 12:31 AM
> To: Zhang, Qi Z <qi.z.zhang@intel.com>
> Cc: dev@dpdk.org; Kevin Traynor <ktraynor@redhat.com>; Yan, Zhirun
> <zhirun.yan@intel.com>
> Subject: [RFC 2/2] net/i40e: update requested queue pair num check for
> rounding
> 
> Since rounding up the requested queue pairs to allow the vf to request a
> non-aligned number was added, it may happen that the requested number is
> less than the available num of queues but the rounded up number is greater. In
> this case, it is not caught with the usual checks but later when there is a reset and
> failed setup.
> 
> By rounding earlier the checks can be done before a failed reset occurs, and a
> rounded max amount of available queues can be returned to the vf.
> 
> Cc: zhirun.yan@intel.com
> Signed-off-by: Kevin Traynor <ktraynor@redhat.com>

Acked-by: Qi Zhang <qi.z.zhang@intel.com>

Applied to dpdk-next-net-intel.

Thanks
Qi
  
Ferruh Yigit March 11, 2019, 12:35 p.m. UTC | #2
On 3/11/2019 2:18 AM, Zhang, Qi Z wrote:
> 
> 
>> -----Original Message-----
>> From: Kevin Traynor [mailto:ktraynor@redhat.com]
>> Sent: Wednesday, March 6, 2019 12:31 AM
>> To: Zhang, Qi Z <qi.z.zhang@intel.com>
>> Cc: dev@dpdk.org; Kevin Traynor <ktraynor@redhat.com>; Yan, Zhirun
>> <zhirun.yan@intel.com>
>> Subject: [RFC 2/2] net/i40e: update requested queue pair num check for
>> rounding
>>
>> Since rounding up the requested queue pairs to allow the vf to request a
>> non-aligned number was added, it may happen that the requested number is
>> less than the available num of queues but the rounded up number is greater. In
>> this case, it is not caught with the usual checks but later when there is a reset and
>> failed setup.
>>
>> By rounding earlier the checks can be done before a failed reset occurs, and a
>> rounded max amount of available queues can be returned to the vf.
>>
>> Cc: zhirun.yan@intel.com
>> Signed-off-by: Kevin Traynor <ktraynor@redhat.com>
> 
> Acked-by: Qi Zhang <qi.z.zhang@intel.com>
> 
> Applied to dpdk-next-net-intel.
> 

These were checkpatch warnings because of whitespace (spaces before tabs), fixed
while merging to next-net.
  
Kevin Traynor March 11, 2019, 6:38 p.m. UTC | #3
On 11/03/2019 12:35, Ferruh Yigit wrote:
> On 3/11/2019 2:18 AM, Zhang, Qi Z wrote:
>>
>>
>>> -----Original Message-----
>>> From: Kevin Traynor [mailto:ktraynor@redhat.com]
>>> Sent: Wednesday, March 6, 2019 12:31 AM
>>> To: Zhang, Qi Z <qi.z.zhang@intel.com>
>>> Cc: dev@dpdk.org; Kevin Traynor <ktraynor@redhat.com>; Yan, Zhirun
>>> <zhirun.yan@intel.com>
>>> Subject: [RFC 2/2] net/i40e: update requested queue pair num check for
>>> rounding
>>>
>>> Since rounding up the requested queue pairs to allow the vf to request a
>>> non-aligned number was added, it may happen that the requested number is
>>> less than the available num of queues but the rounded up number is greater. In
>>> this case, it is not caught with the usual checks but later when there is a reset and
>>> failed setup.
>>>
>>> By rounding earlier the checks can be done before a failed reset occurs, and a
>>> rounded max amount of available queues can be returned to the vf.
>>>
>>> Cc: zhirun.yan@intel.com
>>> Signed-off-by: Kevin Traynor <ktraynor@redhat.com>
>>
>> Acked-by: Qi Zhang <qi.z.zhang@intel.com>
>>
>> Applied to dpdk-next-net-intel.
>>
> 
> These were checkpatch warnings because of whitespace (spaces before tabs), fixed
> while merging to next-net.
> 

Thanks Ferruh. Not spaces before tabs, but using spaces for alignment
where there was room for an additional tab. I misinterpreted "spaces for
alignment" in the CS note. Maybe it's clear for others, but I'll send a
small clarification so I'll remember next time :-)
  

Patch

diff --git a/drivers/net/i40e/i40e_pf.c b/drivers/net/i40e/i40e_pf.c
index 0c4bdbcd1..651c56bb2 100644
--- a/drivers/net/i40e/i40e_pf.c
+++ b/drivers/net/i40e/i40e_pf.c
@@ -1251,4 +1251,7 @@  i40e_pf_host_process_cmd_request_queues(struct i40e_pf_vf *vf, uint8_t *msg)
 	pf = vf->pf;
 
+	if (!rte_is_power_of_2(req_pairs))
+		req_pairs = i40e_align_floor(req_pairs) << 1;
+
 	if (req_pairs == 0) {
 		PMD_DRV_LOG(ERR, "VF %d tried to request 0 queues. Ignoring.\n",
@@ -1261,17 +1264,16 @@  i40e_pf_host_process_cmd_request_queues(struct i40e_pf_vf *vf, uint8_t *msg)
 		vfres->num_queue_pairs = I40E_MAX_QP_NUM_PER_VF;
 	} else if (req_pairs > cur_pairs + pf->qp_pool.num_free) {
-		PMD_DRV_LOG(ERR,
-			    "VF %d requested %d more queues, but only %d left\n",
+		PMD_DRV_LOG(ERR, "VF %d requested %d queues (rounded to %d) "
+			         "but only %d available\n",
 			    vf->vf_idx,
-			    req_pairs - cur_pairs,
-			    pf->qp_pool.num_free);
-		vfres->num_queue_pairs = pf->qp_pool.num_free + cur_pairs;
+			    vfres->num_queue_pairs,
+			    req_pairs,
+			    cur_pairs + pf->qp_pool.num_free);
+		vfres->num_queue_pairs = i40e_align_floor(pf->qp_pool.num_free +
+			                                  cur_pairs);
 	} else {
 		i40e_vc_notify_vf_reset(vf);
 		vf->vsi->nb_qps = req_pairs;
-		if (rte_is_power_of_2(req_pairs))
-			pf->vf_nb_qps = req_pairs;
-		else
-			pf->vf_nb_qps = i40e_align_floor(req_pairs) << 1;
+		pf->vf_nb_qps = req_pairs;
 		i40e_pf_host_process_cmd_reset_vf(vf);