Re: mthca and LinuxBIOS

Roland Dreier
2005-08-05T03:47:18Z

Hmm, that output all looks fine. Can you run with the patch below to
see exactly where the QP table initialization fails? (I haven't
actually compiled this patch so you may have to fix a typo or two)

I'm guessing that the CONF_SPECIAL_QP command is failing, but let's
make sure.

Thanks,
Roland

diff --git a/drivers/infiniband/hw/mthca/mthca_qp.c b/drivers/infiniband/hw/mthca/mthca_qp.c
--- a/drivers/infiniband/hw/mthca/mthca_qp.c
+++ b/drivers/infiniband/hw/mthca/mthca_qp.c
@@ -2214,13 +2214,16 @@ int __devinit mthca_init_qp_table(struct
(1 << 24) - 1,
dev->qp_table.sqp_start +
MTHCA_MAX_PORTS * 2);
- if (err)
+ if (err) {
+ mthca_err(dev, "mthca_init_qp_table: mthca_alloc_init failed (%d)\n", err);
return err;
+ }

err = mthca_array_init(&dev->qp_table.qp,
dev->limits.num_qps);
if (err) {
mthca_alloc_cleanup(&dev->qp_table.alloc);
+ mthca_err(dev, "mthca_init_qp_table: mthca_array_init failed (%d)\n", err);
return err;
}

@@ -2228,8 +2231,10 @@ int __devinit mthca_init_qp_table(struct
err = mthca_CONF_SPECIAL_QP(dev, i ? IB_QPT_GSI : IB_QPT_SMI,
dev->qp_table.sqp_start + i * 2,
&status);
- if (err)
+ if (err) {
+ mthca_err(dev, "mthca_init_qp_table: mthca_CONF_SPECIAL_QP failed for %d/%d (%d)\n", i, dev->qp_table.sqp_start + i * 2, err);
goto err_out;
+ }
if (status) {
mthca_warn(dev, "CONF_SPECIAL_QP returned "
"status %02x, aborting.\n",