+struct c2_mr {
+       struct ib_mr ibmr;
+       struct c2_pd *pd;
+};

ib_mr references the ib_pd, which can get you to the c2_pd. You may be able to eliminate the c2_mr structure.

+struct c2_ah {
+       struct ib_ah ibah;
+};

Can we eliminate c2_ah?  I don't have a strong preference here though.

+int c2_llp_service_destroy(struct iw_cm_id *cm_id)

Are the functions in this file exported, or could they be static?

{snip}

+       /*
+        * reference the request struct.  dereferenced in the int handler.
+        */
+       vq_req_get(c2dev, vq_req);
+
+       /*
+        * Send WR to adapter
+        */
+       err = vq_send_wr(c2dev, (union c2wr *) & wr);
+       if (err) {
+               vq_req_put(c2dev, vq_req);
+               goto bail0;
+       }
+
+       /*
+        * Wait for reply from adapter
+        */
+       err = vq_wait_for_reply(c2dev, vq_req);
+       if (err)
+               goto bail0;
+
+       /*
+ * Process reply + */
+       reply = (struct c2wr_cr_reject_rep *) (unsigned long) vq_req->reply_msg;
+       if (!reply) {
+               err = -ENOMEM;
+               goto bail0;
+       }
+       err = c2_errno(reply);

The basic code fragment above is repeated a couple of times.

+static int c2_connect(struct iw_cm_id *cm_id, const void *pdata, u8 pdata_len)
+static int c2_disconnect(struct iw_cm_id *cm_id, int abrupt)
+static int c2_accept(struct iw_cm_id *cm_id, const void *pdata, u8 pdata_len)
+static int c2_reject(struct iw_cm_id *cm_id, const void *pdata, u8 pdata_len)
+static int c2_service_create(struct iw_cm_id *cm_id, int backlog)
+static int c2_service_destroy(struct iw_cm_id *cm_id)

These are almost just wrappers around other calls. I'm not familiar with the driver architecture at this point, but could these be merged with the underlying calls?

+int c2_pd_alloc(struct c2_dev *dev, int privileged, struct c2_pd *pd)
+void c2_pd_free(struct c2_dev *dev, struct c2_pd *pd)
+int __devinit c2_init_pd_table(struct c2_dev *dev)
+void __devexit c2_cleanup_pd_table(struct c2_dev *dev)

Same comment as previous.

+static int
+move_sgl(struct c2_data_addr * dst, struct ib_sge *src, int count, u32 * p_len,
+        u8 * actual_count)
+{
+       u32 tot = 0;            /* running total */
+       u8 acount = 0;          /* running total non-0 len sge's */
+
+       while (count > 0) {
+               /*
+                * If the addition of this SGE causes the
+                * total SGL length to exceed 2^32-1, then
+                * fail-n-bail.
+                *
+                * If the current total plus the next element length
+                * wraps, then it will go negative and be less than the
+                * current total...
+                */
+               if ((tot + src->length) < tot) {
+                       return -EINVAL;
+               }
+               /*
+                * Bug: 1456 (as well as 1498 & 1643)
+                * Skip over any sge's supplied with len=0
+                */
+               if (src->length) {
+                       tot += src->length;
+                       dst->stag = cpu_to_be32(src->lkey);
+                       dst->to = cpu_to_be64(src->addr);
+                       dst->length = cpu_to_be32(src->length);
+                       dst++;
+                       acount++;
+               }
+               src++;
+               count--;
+       }
+
+       if (acount == 0) {
+               /*
+                * Bug: 1476 (as well as 1498, 1456 and 1643)

nit: the bug numbers don't make much sense to me.

+                * Setup the SGL in the WR to make it easier for the RNIC.
+                * This way, the FW doesn't have to deal with special cases.
+                * Setting length=0 should be sufficient.
+                */
+               dst->stag = 0;
+               dst->to = 0;
+               dst->length = 0;
+       }
+
+       *p_len = tot;
+       *actual_count = acount;
+       return 0;
+}

+/*
+ * Function: c2_activity (private function)
+ *
+ * Description: + * Post an mq index to the host->adapter activity fifo.
+ *
+ * IN: + * c2dev - ptr to c2dev structure
+ * mq_index    - mq index to post
+ * shared - value most recently written to shared + * + * OUT: + * + * Return: + * none
+ */

Probably want to use docbook format for defining functions here and elsewhere.

- Sean
_______________________________________________
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