Roland,

  I'm resending the patch again.
  I removed the num_srq (Maximum number of Shared Receive Queues) parameter 
here - it's initialized according to
  the device limit and we don't need to change it, most probably.

Regards,
   Leonid

On 5/30/06, Leonid Arsh <[EMAIL PROTECTED]> wrote:
> 
> Roland,
> 
> Further to our discussions I'm sending the fixed patch.
> This patch  implements the module parameters allowing the user to change the 
> HCA initialization values.
> I left only needed parameters and added the parameter validation.
> Now the set of the parameters is closest to the profile parameters used in 
> the old Mellanox driver.
> The parameters may be read from the sysfs, but cannot be changed.
> 
> Regards,
>     Leonid
> 


Signed-off-by: Leonid Arsh <[EMAIL PROTECTED]>

--- openib-1.0/src/linux-kernel/infiniband/hw/mthca/mthca_main.c.orig   
2006-05-31 20:28:28.000000000 +0300
+++ openib-1.0/src/linux-kernel/infiniband/hw/mthca/mthca_main.c.OK2    
2006-05-31 20:34:30.000000000 +0300
@@ -81,9 +81,6 @@
 module_param(tune_pci, int, 0444);
 MODULE_PARM_DESC(tune_pci, "increase PCI burst from the default set by BIOS if 
nonzero");
 
-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,
@@ -97,6 +94,107 @@
        .uarc_size         = 1 << 18,   /* Arbel only */
 };
 
+module_param_named(num_qp, default_profile.num_qp, int, 0444);
+MODULE_PARM_DESC(num_qp, "Maximum number of QPs available 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 Table 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 int __devinit mthca_validate_profile(struct mthca_dev     *mdev,
+                                           struct mthca_profile *profile)
+{
+
+       if(default_profile.num_qp & (default_profile.num_qp-1)) {
+               mthca_err(mdev, "Invalid num_qp parameter value (%d).\n",
+                         default_profile.num_qp); 
+               goto err_inval;
+       }
+
+       if(default_profile.rdb_per_qp & (default_profile.rdb_per_qp-1)) {
+               mthca_err(mdev, "Invalid rdb_per_qp parameter value (%d)\n",
+                         default_profile.rdb_per_qp); 
+               goto err_inval;
+       }
+
+       if(default_profile.num_cq & (default_profile.num_cq-1)) {
+               mthca_err(mdev, "Invalid num_cq parameter value (%d)\n",
+                         default_profile.num_cq); 
+               goto err_inval;
+       }
+
+       if(default_profile.num_mcg & (default_profile.num_mcg-1)) {
+               mthca_err(mdev, "Invalid num_mcg parameter value (%d)\n",
+                         default_profile.num_mcg); 
+               goto err_inval;
+       }
+       if(default_profile.num_mpt & (default_profile.num_mpt-1)) {
+               mthca_err(mdev, "Invalid num_mpt parameter value (%d)\n",
+                         default_profile.num_mpt); 
+               goto err_inval;
+       }
+
+       if(default_profile.num_mtt & (default_profile.num_mtt-1)) {
+               mthca_err(mdev, "Invalid num_mtt parameter value (%d)\n",
+                         default_profile.num_mtt); 
+               goto err_inval;
+       }
+
+       if (mthca_is_memfree(mdev)) {
+
+               if(default_profile.num_udav & (default_profile.num_udav-1)) {
+                       mthca_err(mdev, "Invalid num_udav parameter value 
(%d)\n",
+                                 default_profile.num_udav); 
+                       goto err_inval;
+               }
+
+               if(default_profile.fmr_reserved_mtts & 
(default_profile.fmr_reserved_mtts-1)) {
+                       mthca_err(mdev, "Invalid fmr_reserved_mtts parameter 
value (%d)\n",
+                                 default_profile.fmr_reserved_mtts); 
+                       goto err_inval;
+               } else 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;
+
+err_inval:
+       mthca_err(mdev, "This parameter must be power of two.\n");
+       return -EINVAL;
+
+}
+
 static int __devinit mthca_tune_pci(struct mthca_dev *mdev)
 {
        int cap;
@@ -994,6 +1092,7 @@
        printk(KERN_INFO PFX "Initializing %s\n",
               pci_name(pdev));
 
+
        if (id->driver_data >= ARRAY_SIZE(mthca_hca_table)) {
                printk(KERN_ERR PFX "%s has invalid driver data %lx\n",
                       pci_name(pdev), id->driver_data);
@@ -1095,6 +1194,10 @@
        if (err)
                goto err_cmd;
 
+       err = mthca_validate_profile(mdev, &default_profile);
+       if (err)
+               goto err_profile;
+
        err = mthca_init_hca(mdev);
        if (err)
                goto err_cmd;
@@ -1147,6 +1250,7 @@
        mthca_close_hca(mdev);
 
 err_cmd:
+err_profile:
        mthca_cmd_cleanup(mdev);
 
 err_free_dev:
_______________________________________________
openib-general mailing list
[email protected]
http://openib.org/mailman/listinfo/openib-general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to