Hi,
I'm proposing a better fix.  see below.

On Mon, Oct 03, 2005 at 06:13:51PM +0200, Roland Dreier wrote:
> Seems reasonable.  However, looking back at the chip documentation, it
> seems that the max CQEs should really be 0x1ffff rather than 0xffff as
> I had it.  Can you confirm?
> 
> Thanks,
>   Roland
--------------------------------------------------
Best to take the actual max cqes from QUERY_DEV_LIMS -- new patch below.
The "- 1" is there because the cq needs one spare cqe (circular list logic).

Jack


Signed-off-by: Jack Morgenstein <[EMAIL PROTECTED]>

Index: linux-kernel/infiniband/hw/mthca/mthca_dev.h
===================================================================
--- linux-kernel/infiniband/hw/mthca/mthca_dev.h        (revision 3632)
+++ linux-kernel/infiniband/hw/mthca/mthca_dev.h        (working copy)
@@ -134,6 +134,7 @@
        int      num_eecs;
        int      reserved_eecs;
        int      num_cqs;
+       int      max_cqes;
        int      reserved_cqs;
        int      num_eqs;
        int      reserved_eqs;
Index: linux-kernel/infiniband/hw/mthca/mthca_main.c
===================================================================
--- linux-kernel/infiniband/hw/mthca/mthca_main.c       (revision 3632)
+++ linux-kernel/infiniband/hw/mthca/mthca_main.c       (working copy)
@@ -173,6 +173,7 @@
        mdev->limits.reserved_pds       = dev_lim->reserved_pds;
        mdev->limits.port_width_cap     = dev_lim->max_port_width;
        mdev->limits.flags              = dev_lim->flags;
+       mdev->limits.max_cqes           = dev_lim->max_cq_sz - 1;
 
        /* IB_DEVICE_RESIZE_MAX_WR not supported by driver.
           May be doable since hardware supports it for SRQ.
Index: linux-kernel/infiniband/hw/mthca/mthca_provider.c
===================================================================
--- linux-kernel/infiniband/hw/mthca/mthca_provider.c   (revision 3632)
+++ linux-kernel/infiniband/hw/mthca/mthca_provider.c   (working copy)
@@ -93,7 +93,7 @@
        props->max_qp_wr           = 0xffff;
        props->max_sge             = mdev->limits.max_sg;
        props->max_cq              = mdev->limits.num_cqs - 
mdev->limits.reserved_cqs;
-       props->max_cqe             = 0xffff;
+       props->max_cqe             = mdev->limits.max_cqes;
        props->max_mr              = mdev->limits.num_mpts - 
mdev->limits.reserved_mrws;
        props->max_pd              = mdev->limits.num_pds - 
mdev->limits.reserved_pds;
        props->max_qp_rd_atom      = 1 << mdev->qp_table.rdb_shift;
@@ -639,7 +639,11 @@
        struct mthca_cq *cq;
        int nent;
        int err;
+       struct mthca_dev* mdev = to_mdev(ibdev);
 
+       if (mdev->limits.max_cqes < entries || entries < 0)
+               return ERR_PTR(-EINVAL);
+       
        if (context) {
                if (ib_copy_from_udata(&ucmd, udata, sizeof ucmd))
                        return ERR_PTR(-EFAULT);
_______________________________________________
openib-general mailing list
openib-general@openib.org
http://openib.org/mailman/listinfo/openib-general

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

Reply via email to