svn commit: r318629 - stable/9/sys/ofed/drivers/net/mlx4

Hans Petter Selasky hselasky at FreeBSD.org
Mon May 22 08:20:52 UTC 2017


Author: hselasky
Date: Mon May 22 08:20:50 2017
New Revision: 318629
URL: https://svnweb.freebsd.org/changeset/base/318629

Log:
  MFC r318531:
  
  mlx4: Use the CQ quota for SRIOV when creating completion EQs
  
  When creating EQs to handle CQ completion events for the PF or for
  VFs, we create enough EQE entries to handle completions for the max
  number of CQs that can use that EQ.
  
  When SRIOV is activated, the max number of CQs a VF (or the PF) can
  obtain is its CQ quota (determined by the Hypervisor resource
  tracker).  Therefore, when creating an EQ, the number of EQE entries
  that the VF should request for that EQ is the CQ quota value (and not
  the total number of CQs available in the firmware).
  
  Under SRIOV, the PF, also must use its CQ quota, because the resource
  tracker also controls how many CQs the PF can obtain.
  
  Using the firmware total CQs instead of the CQ quota when creating EQs
  resulted wasting MTT entries, due to allocating more EQEs than were
  needed.
  
  Sponsored by:		Mellanox Technologies

Modified:
  stable/9/sys/ofed/drivers/net/mlx4/eq.c
  stable/9/sys/ofed/drivers/net/mlx4/main.c
Directory Properties:
  stable/9/sys/   (props changed)

Modified: stable/9/sys/ofed/drivers/net/mlx4/eq.c
==============================================================================
--- stable/9/sys/ofed/drivers/net/mlx4/eq.c	Mon May 22 08:19:08 2017	(r318628)
+++ stable/9/sys/ofed/drivers/net/mlx4/eq.c	Mon May 22 08:20:50 2017	(r318629)
@@ -1169,8 +1169,7 @@ int mlx4_init_eq_table(struct mlx4_dev *
 	}
 
 	for (i = 0; i < dev->caps.num_comp_vectors; ++i) {
-		err = mlx4_create_eq(dev, dev->caps.num_cqs -
-					  dev->caps.reserved_cqs +
+		err = mlx4_create_eq(dev, dev->quotas.cq +
 					  MLX4_NUM_SPARE_EQE,
 				     (dev->flags & MLX4_FLAG_MSI_X) ? i : 0,
 				     &priv->eq_table.eq[i]);
@@ -1190,8 +1189,7 @@ int mlx4_init_eq_table(struct mlx4_dev *
 	for (i = dev->caps.num_comp_vectors + 1;
 	      i < dev->caps.num_comp_vectors + dev->caps.comp_pool + 1; ++i) {
 
-		err = mlx4_create_eq(dev, dev->caps.num_cqs -
-					  dev->caps.reserved_cqs +
+		err = mlx4_create_eq(dev, dev->quotas.cq +
 					  MLX4_NUM_SPARE_EQE,
 				     (dev->flags & MLX4_FLAG_MSI_X) ? i : 0,
 				     &priv->eq_table.eq[i]);

Modified: stable/9/sys/ofed/drivers/net/mlx4/main.c
==============================================================================
--- stable/9/sys/ofed/drivers/net/mlx4/main.c	Mon May 22 08:19:08 2017	(r318628)
+++ stable/9/sys/ofed/drivers/net/mlx4/main.c	Mon May 22 08:20:50 2017	(r318629)
@@ -3448,6 +3448,8 @@ slave_start:
 			goto err_free_eq;
 	}
 
+	mlx4_init_quotas(dev);
+
 	err = mlx4_setup_hca(dev);
 	if (err == -EBUSY && (dev->flags & MLX4_FLAG_MSI_X) &&
 	    !mlx4_is_mfunc(dev)) {
@@ -3461,7 +3463,6 @@ slave_start:
 	if (err)
 		goto err_steer;
 
-	mlx4_init_quotas(dev);
 	mlx4_init_hca_info(dev);
 
 	for (port = 1; port <= dev->caps.num_ports; port++) {


More information about the svn-src-stable-9 mailing list