[openib-general] [was: GIT PULL]

Or Gerlitz ogerlitz at voltaire.com
Thu Dec 14 00:19:13 PST 2006


Roland Dreier wrote:
>> you have CC-ed lkml at cisco.com on this email, is there a chance you
>> wanted to CC linux-kernel at vger.kernel.org instead ...

> Yep, a typo caused by my auto-expand not triggering.  No big deal though...

Indeed, I see now that Linus has pulled it

>> May i ask what prevented the v3 of the mthca profile patch (see
>> http://article.gmane.org/gmane.linux.drivers.openib/34005) to get in?

> The patch as posted is both ugly and wrong.  I still plan to fix it up
> and merge it for 2.6.20, but I didn't get a chance yet.

mmm, I understand all the comments raised during the review were fixed 
in the V3 post below, and now you say its both wrong and ugly... for 
example what's wrong here?

Or.

> Adds module parameters that enable settting some of the HCA
> profile values
> Signed-off-by: Leonid Arsh <leonida at voltaire.com>
> Signed-off-by: Moni Shoua <monis at voltaire.com>
> ---
>  mthca_main.c |  115 +++++++++++++++++++++++++++++++++++++++++++++++++++++------
>  1 file changed, 104 insertions(+), 11 deletions(-)
> diff --git a/drivers/infiniband/hw/mthca/mthca_main.c b/drivers/infiniband/hw/mthca/mthca_main.c
> index 47ea021..deb0289 100644
> --- a/drivers/infiniband/hw/mthca/mthca_main.c
> +++ b/drivers/infiniband/hw/mthca/mthca_main.c
> @@ -82,21 +82,110 @@ MODULE_PARM_DESC(tune_pci, "increase PCI
>  
>  struct mutex mthca_device_mutex;
>  
> +#define MTHCA_DEFAULT_NUM_QP            (1 << 16)
> +#define MTHCA_DEFAULT_RDB_PER_QP        (1 << 2)
> +#define MTHCA_DEFAULT_NUM_CQ            (1 << 16)
> +#define MTHCA_DEFAULT_NUM_MCG           (1 << 13)
> +#define MTHCA_DEFAULT_NUM_MPT           (1 << 17)
> +#define MTHCA_DEFAULT_NUM_MTT           (1 << 20)
> +#define MTHCA_DEFAULT_NUM_UDAV          (1 << 15)
> +#define MTHCA_DEFAULT_NUM_RESERVED_MTTS (1 << 18)
> +#define MTHCA_DEFAULT_NUM_UARC_SIZE     (1 << 18)
> +
> +static struct mthca_profile default_profile = {
> +	.num_qp             = MTHCA_DEFAULT_NUM_QP,
> +	.rdb_per_qp         = MTHCA_DEFAULT_RDB_PER_QP,
> +	.num_cq             = MTHCA_DEFAULT_NUM_CQ,
> +	.num_mcg            = MTHCA_DEFAULT_NUM_MCG,
> +	.num_mpt            = MTHCA_DEFAULT_NUM_MPT,
> +	.num_mtt            = MTHCA_DEFAULT_NUM_MTT,
> +	.num_udav           = MTHCA_DEFAULT_NUM_UDAV,          /* Tavor only */
> +	.fmr_reserved_mtts  = MTHCA_DEFAULT_NUM_RESERVED_MTTS, /* Tavor only */
> +	.uarc_size          = MTHCA_DEFAULT_NUM_UARC_SIZE,     /* Arbel only */
> +};
> +
> +module_param_named(num_qp, default_profile.num_qp, int, 0444);
> +MODULE_PARM_DESC(num_qp, "maximum number of available QPs per HCA");
> +
> +module_param_named(rdb_per_qp, default_profile.rdb_per_qp, int, 0444);
> +MODULE_PARM_DESC(rdb_per_qp, "number of RDB buffers per QP");
> +
> +module_param_named(num_cq, default_profile.num_cq, int, 0444);
> +MODULE_PARM_DESC(num_cq, "maximum number of CQs per HCA");
> +
> +module_param_named(num_mcg, default_profile.num_mcg, int, 0444);
> +MODULE_PARM_DESC(num_mcg, "maximum number of multicast groups per HCA");
> +
> +module_param_named(num_mpt, default_profile.num_mpt, int, 0444);
> +MODULE_PARM_DESC(num_mpt, 
> +		"maximum number of memory protection pable entries per HCA");
> +
> +module_param_named(num_mtt, default_profile.num_mtt, int, 0444);
> +MODULE_PARM_DESC(num_mtt,
> +		 "maximum number of memory translation table segments per HCA");
> +/* Tavor only */
> +module_param_named(num_udav, default_profile.num_udav, int, 0444);
> +MODULE_PARM_DESC(num_udav, "maximum number of UD address vectors per HCA");
> +
> +/* Tavor only */
> +module_param_named(fmr_reserved_mtts, default_profile.fmr_reserved_mtts, int, 0444);
> +MODULE_PARM_DESC(fmr_reserved_mtts,
> +		 "number of memory translation table segments reserved for FMR");
> +
>  static const char mthca_version[] __devinitdata =
>  	DRV_NAME ": Mellanox InfiniBand HCA driver v"
>  	DRV_VERSION " (" DRV_RELDATE ")\n";
>  
> -static struct mthca_profile default_profile = {
> -	.num_qp		   = 1 << 16,
> -	.rdb_per_qp	   = 4,
> -	.num_cq		   = 1 << 16,
> -	.num_mcg	   = 1 << 13,
> -	.num_mpt	   = 1 << 17,
> -	.num_mtt	   = 1 << 20,
> -	.num_udav	   = 1 << 15,	/* Tavor only */
> -	.fmr_reserved_mtts = 1 << 18,	/* Tavor only */
> -	.uarc_size	   = 1 << 18,	/* Arbel only */
> -};
> +
> +static int __devinit mthca_check_profile_value(int* pval, int pval_default){
> +	/* value must be positive and power of 2 */
> +	int old_pval = *pval;
> +
> +	if (old_pval <= 0)
> +		*pval = pval_default;
> +	else
> +		*pval = roundup_pow_of_two(old_pval);
> +
> +	return old_pval-*pval;
> +}
> +
> +#define mthca_check_profile_and_warn(name, var, defval) \
> +	if (mthca_check_profile_value(&var, defval)) \
> +		mthca_warn(mdev, "invalid %s passed. changed to %d.\n", #name, var); 
> +
> +static int __devinit mthca_validate_profile(struct mthca_dev *mdev,
> +                                            struct mthca_profile *profile)
> +{
> +
> +	mthca_check_profile_and_warn(num_qp, default_profile.num_qp,
> +						 MTHCA_DEFAULT_NUM_QP);
> +	mthca_check_profile_and_warn(rdb_per_qp, default_profile.rdb_per_qp,
> +						 MTHCA_DEFAULT_RDB_PER_QP);
> +	mthca_check_profile_and_warn(num_cq, default_profile.num_cq,
> +						 MTHCA_DEFAULT_NUM_CQ);
> +	mthca_check_profile_and_warn(num_mcg, default_profile.num_mcg,
> +						 MTHCA_DEFAULT_NUM_MCG);
> +	mthca_check_profile_and_warn(num_mpt, default_profile.num_mpt,
> +						 MTHCA_DEFAULT_NUM_MPT);
> +	mthca_check_profile_and_warn(num_mtt, default_profile.num_mtt,
> +						 MTHCA_DEFAULT_NUM_MTT);
> +
> +	if (!mthca_is_memfree(mdev)) {
> +		mthca_check_profile_and_warn(num_udav, default_profile.num_udav,
> +							 MTHCA_DEFAULT_NUM_UDAV);
> +		mthca_check_profile_and_warn(fmr_reserved_mtts, default_profile.fmr_reserved_mtts,
> +							 MTHCA_DEFAULT_NUM_RESERVED_MTTS);
> +
> +		if (default_profile.fmr_reserved_mtts >= default_profile.num_mtt ) {
> +			mthca_err(mdev, "Invalid fmr_reserved_mtts parameter" 
> +					  "value (%d). Must be lower then num_mtt (%d)\n",
> +					  default_profile.fmr_reserved_mtts,
> +					  default_profile.num_mtt ); 
> +			return -EINVAL;
> +		}
> +	}
> +	return 0;
> +}
>  
>  static int __devinit mthca_tune_pci(struct mthca_dev *mdev)
>  {
> @@ -1084,6 +1173,10 @@ static int __mthca_init_one(struct pci_d
>  	if (err)
>  		goto err_cmd;
>  
> +	err = mthca_validate_profile(mdev, &default_profile);
> +	if (err)
> +		goto err_cmd;
> +
>  	err = mthca_init_hca(mdev);
>  	if (err)
>  		goto err_cmd;





More information about the general mailing list