Re: [PATCH 4/9] ocrdma: Driver for Emulex OneConnect RDMA adapter

2 messages, 2 authors, 2012-03-21 · open the first message on its own page

Re: [PATCH 4/9] ocrdma: Driver for Emulex OneConnect RDMA adapter

From: Roland Dreier <hidden>
Date: 2012-03-21 16:34:10

PiAraW50IG9jcmRtYV9xcF9zdGF0ZV9tYWNoaW5lKHN0cnVjdCBvY3JkbWFfcXAgKnFwLCBlbnVtIGliX3FwX3N0YXRlIG5ld19pYl9zdGF0ZSwKPiArIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgZW51bSBpYl9xcF9zdGF0ZSAqb2xkX2liX3N0YXRlKQo+ICt7Cj4gKyCgIKAgoCB1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICsgoCCgIKAgaW50IHN0YXR1cyA9IDA7Cj4gKyCgIKAgoCBlbnVtIG9jcmRtYV9xcF9zdGF0ZSBuZXdfc3RhdGU7Cj4gKyCgIKAgoCBuZXdfc3RhdGUgPSBnZXRfb2NyZG1hX3FwX3N0YXRlKG5ld19pYl9zdGF0ZSk7Cj4gKwo+ICsgoCCgIKAgLyogc3luYyB3aXRoIHdxZSBhbmQgcnFlIHBvc3RpbmcgKi8KPiArIKAgoCCgIHNwaW5fbG9ja19pcnFzYXZlKCZxcC0+cV9sb2NrLCBmbGFncyk7Cj4gKwo+ICsgoCCgIKAgaWYgKG9sZF9pYl9zdGF0ZSkKPiArIKAgoCCgIKAgoCCgIKAgKm9sZF9pYl9zdGF0ZSA9IGdldF9pYnFwX3N0YXRlKHFwLT5zdGF0ZSk7Cj4gKyCgIKAgoCBpZiAobmV3X3N0YXRlID09IHFwLT5zdGF0ZSkgewo+ICsgoCCgIKAgoCCgIKAgoCBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxcC0+cV9sb2NrLCBmbGFncyk7Cj4gKyCgIKAgoCCgIKAgoCCgIHJldHVybiAxOwo+ICsgoCCgIKAgfQo+ICsKPiArIKAgoCCgIHN3aXRjaCAocXAtPnN0YXRlKSB7Cj4gKyCgIKAgoCBjYXNlIE9DUkRNQV9RUFNfUlNUOgo+ICsgoCCgIKAgoCCgIKAgoCBzd2l0Y2ggKG5ld19zdGF0ZSkgewo+ICsgoCCgIKAgoCCgIKAgoCBjYXNlIE9DUkRNQV9RUFNfUlNUOgo+ICsgoCCgIKAgoCCgIKAgoCBjYXNlIE9DUkRNQV9RUFNfSU5JVDoKPiArIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCBicmVhazsKPiArIKAgoCCgIKAgoCCgIKAgZGVmYXVsdDoKPiArIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCBzdGF0dXMgPSAtRUlOVkFMOwo+ICsgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIGJyZWFrOwo+ICsgoCCgIKAgoCCgIKAgoCB9Owo+ICsgoCCgIKAgoCCgIKAgoCBicmVhazsKPiArIKAgoCCgIGNhc2UgT0NSRE1BX1FQU19JTklUOgo+ICsgoCCgIKAgoCCgIKAgoCAvKiBxcHM6IElOSVQtPlhYWCAqLwo+ICsgoCCgIKAgoCCgIKAgoCBzd2l0Y2ggKG5ld19zdGF0ZSkgewo+ICsgoCCgIKAgoCCgIKAgoCBjYXNlIE9DUkRNQV9RUFNfSU5JVDoKPiArIKAgoCCgIKAgoCCgIKAgY2FzZSBPQ1JETUFfUVBTX1JUUjoKPiArIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCBicmVhazsKPiArIKAgoCCgIKAgoCCgIKAgY2FzZSBPQ1JETUFfUVBTX0VSUjoKPiArIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCBvY3JkbWFfZmx1c2hfcXAocXApOwo+ICsgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIGJyZWFrOwo+ICsgoCCgIKAgoCCgIKAgoCBkZWZhdWx0Ogo+ICsgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIHN0YXR1cyA9IC1FSU5WQUw7Cj4gKyCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgYnJlYWs7Cj4gKyCgIKAgoCCgIKAgoCCgIH07Cj4gKyCgIKAgoCCgIKAgoCCgIGJyZWFrOwo+ICsgoCCgIKAgY2FzZSBPQ1JETUFfUVBTX1JUUjoKPiArIKAgoCCgIKAgoCCgIKAgLyogcXBzOiBSVFMtPlhYWCAqLwo+ICsgoCCgIKAgoCCgIKAgoCBzd2l0Y2ggKG5ld19zdGF0ZSkgewo+ICsgoCCgIKAgoCCgIKAgoCBjYXNlIE9DUkRNQV9RUFNfUlRTOgo+ICsgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIGJyZWFrOwo+ICsgoCCgIKAgoCCgIKAgoCBjYXNlIE9DUkRNQV9RUFNfRVJSOgo+ICsgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIG9jcmRtYV9mbHVzaF9xcChxcCk7Cj4gKyCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgYnJlYWs7Cj4gKyCgIKAgoCCgIKAgoCCgIGRlZmF1bHQ6Cj4gKyCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgc3RhdHVzID0gLUVJTlZBTDsKPiArIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCBicmVhazsKPiArIKAgoCCgIKAgoCCgIKAgfTsKPiArIKAgoCCgIKAgoCCgIKAgYnJlYWs7Cj4gKyCgIKAgoCBjYXNlIE9DUkRNQV9RUFNfUlRTOgo+ICsgoCCgIKAgoCCgIKAgoCAvKiBxcHM6IFJUUy0+WFhYICovCj4gKyCgIKAgoCCgIKAgoCCgIHN3aXRjaCAobmV3X3N0YXRlKSB7Cj4gKyCgIKAgoCCgIKAgoCCgIGNhc2UgT0NSRE1BX1FQU19TUUQ6Cj4gKyCgIKAgoCCgIKAgoCCgIGNhc2UgT0NSRE1BX1FQU19TUUU6Cj4gKyCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgYnJlYWs7Cj4gKyCgIKAgoCCgIKAgoCCgIGNhc2UgT0NSRE1BX1FQU19FUlI6Cj4gKyCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgb2NyZG1hX2ZsdXNoX3FwKHFwKTsKPiArIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCBicmVhazsKPiArIKAgoCCgIKAgoCCgIKAgZGVmYXVsdDoKPiArIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCBzdGF0dXMgPSAtRUlOVkFMOwo+ICsgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIGJyZWFrOwo+ICsgoCCgIKAgoCCgIKAgoCB9Owo+ICsgoCCgIKAgoCCgIKAgoCBicmVhazsKPiArIKAgoCCgIGNhc2UgT0NSRE1BX1FQU19TUUQ6Cj4gKyCgIKAgoCCgIKAgoCCgIC8qIHFwczogU1FELT5YWFggKi8KPiArIKAgoCCgIKAgoCCgIKAgc3dpdGNoIChuZXdfc3RhdGUpIHsKPiArIKAgoCCgIKAgoCCgIKAgY2FzZSBPQ1JETUFfUVBTX1JUUzoKPiArIKAgoCCgIKAgoCCgIKAgY2FzZSBPQ1JETUFfUVBTX1NRRToKPiArIKAgoCCgIKAgoCCgIKAgY2FzZSBPQ1JETUFfUVBTX0VSUjoKPiArIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCBicmVhazsKPiArIKAgoCCgIKAgoCCgIKAgZGVmYXVsdDoKPiArIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCBzdGF0dXMgPSAtRUlOVkFMOwo+ICsgoCCgIKAgoCCgIKAgoCCgIKAgoCCgIGJyZWFrOwo+ICsgoCCgIKAgoCCgIKAgoCB9Owo+ICsgoCCgIKAgoCCgIKAgoCBicmVhazsKPiArIKAgoCCgIGNhc2UgT0NSRE1BX1FQU19TUUU6Cj4gKyCgIKAgoCCgIKAgoCCgIHN3aXRjaCAobmV3X3N0YXRlKSB7Cj4gKyCgIKAgoCCgIKAgoCCgIGNhc2UgT0NSRE1BX1FQU19SVFM6Cj4gKyCgIKAgoCCgIKAgoCCgIGNhc2UgT0NSRE1BX1FQU19FUlI6Cj4gKyCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgYnJlYWs7Cj4gKyCgIKAgoCCgIKAgoCCgIGRlZmF1bHQ6Cj4gKyCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgc3RhdHVzID0gLUVJTlZBTDsKPiArIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCBicmVhazsKPiArIKAgoCCgIKAgoCCgIKAgfTsKPiArIKAgoCCgIKAgoCCgIKAgYnJlYWs7Cj4gKyCgIKAgoCBjYXNlIE9DUkRNQV9RUFNfRVJSOgo+ICsgoCCgIKAgoCCgIKAgoCAvKiBxcHM6IEVSUi0+WFhYICovCj4gKyCgIKAgoCCgIKAgoCCgIHN3aXRjaCAobmV3X3N0YXRlKSB7Cj4gKyCgIKAgoCCgIKAgoCCgIGNhc2UgT0NSRE1BX1FQU19SU1Q6Cj4gKyCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgYnJlYWs7Cj4gKyCgIKAgoCCgIKAgoCCgIGRlZmF1bHQ6Cj4gKyCgIKAgoCCgIKAgoCCgIKAgoCCgIKAgc3RhdHVzID0gLUVJTlZBTDsKPiArIKAgoCCgIKAgoCCgIKAgoCCgIKAgoCBicmVhazsKPiArIKAgoCCgIKAgoCCgIKAgfTsKPiArIKAgoCCgIKAgoCCgIKAgYnJlYWs7Cj4gKyCgIKAgoCBkZWZhdWx0Ogo+ICsgoCCgIKAgoCCgIKAgoCBzdGF0dXMgPSAtRUlOVkFMOwo+ICsgoCCgIKAgoCCgIKAgoCBicmVhazsKPiArIKAgoCCgIH07Cj4gKyCgIKAgoCBpZiAoIXN0YXR1cykKPiArIKAgoCCgIKAgoCCgIKAgcXAtPnN0YXRlID0gbmV3X3N0YXRlOwo+ICsKPiArIKAgoCCgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFwLT5xX2xvY2ssIGZsYWdzKTsKPiArIKAgoCCgIHJldHVybiBzdGF0dXM7Cj4gK30KClRoZSBzd2l0Y2ggc3RhdGVtZW50IGhlcmUgc2VlbXMgdG8gbGFyZ2VseSByZWltcGxpbWVudCBpYl9tb2RpZnlfcXBfaXNfb2soKQood2hpY2ggaXMgZXhwb3J0ZWQgZnJvbSB0aGUgcmRtYSBtaWRsYXllcikuICBJcyB0aGVyZSBzb21lIHJlYXNvbiB0aGF0IGRvZXNuJ3QKd29yayBmb3IgeW91ciBkcml2ZXI/ICBJJ2QgcmF0aGVyIGZpeCAvIGdlbmVyYWxpemUgdGhlIGNvcmUgaGVscGVyCmZ1bmN0aW9uIGluc3RlYWQKb2YgaGF2aW5nIHNvbWV0aGluZyBtb3N0bHkgZHVwbGljYXRlIGluIGEgaGFyZHdhcmUgZHJpdmVyLgo=--To unsubscribe from this list: send the line "unsubscribe linux-rdma" inthe body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.orgMore majordomo info at  http://vger.kernel.org/majordomo-info.html

RE: [PATCH 4/9] ocrdma: Driver for Emulex OneConnect RDMA adapter

From: <hidden>
Date: 2012-03-21 19:09:32

-----Original Message-----
From: Roland Dreier [mailto:roland@purestorage.com]
Sent: Wednesday, March 21, 2012 10:04 PM
To: Pandit, Parav
Cc: linux-rdma@vger.kernel.org; netdev@vger.kernel.org
Subject: Re: [PATCH 4/9] ocrdma: Driver for Emulex OneConnect RDMA
adapter
quoted
+int ocrdma_qp_state_machine(struct ocrdma_qp *qp, enum ib_qp_state
+new_ib_state,
+                           enum ib_qp_state *old_ib_state) {
+       unsigned long flags;
+       int status = 0;
+       enum ocrdma_qp_state new_state;
+       new_state = get_ocrdma_qp_state(new_ib_state);
+
+       /* sync with wqe and rqe posting */
+       spin_lock_irqsave(&qp->q_lock, flags);
+
+       if (old_ib_state)
+               *old_ib_state = get_ibqp_state(qp->state);
+       if (new_state == qp->state) {
+               spin_unlock_irqrestore(&qp->q_lock, flags);
+               return 1;
+       }
+
+       switch (qp->state) {
+       case OCRDMA_QPS_RST:
+               switch (new_state) {
+               case OCRDMA_QPS_RST:
+               case OCRDMA_QPS_INIT:
+                       break;
+               default:
+                       status = -EINVAL;
+                       break;
+               };
+               break;
+       case OCRDMA_QPS_INIT:
+               /* qps: INIT->XXX */
+               switch (new_state) {
+               case OCRDMA_QPS_INIT:
+               case OCRDMA_QPS_RTR:
+                       break;
+               case OCRDMA_QPS_ERR:
+                       ocrdma_flush_qp(qp);
+                       break;
+               default:
+                       status = -EINVAL;
+                       break;
+               };
+               break;
+       case OCRDMA_QPS_RTR:
+               /* qps: RTS->XXX */
+               switch (new_state) {
+               case OCRDMA_QPS_RTS:
+                       break;
+               case OCRDMA_QPS_ERR:
+                       ocrdma_flush_qp(qp);
+                       break;
+               default:
+                       status = -EINVAL;
+                       break;
+               };
+               break;
+       case OCRDMA_QPS_RTS:
+               /* qps: RTS->XXX */
+               switch (new_state) {
+               case OCRDMA_QPS_SQD:
+               case OCRDMA_QPS_SQE:
+                       break;
+               case OCRDMA_QPS_ERR:
+                       ocrdma_flush_qp(qp);
+                       break;
+               default:
+                       status = -EINVAL;
+                       break;
+               };
+               break;
+       case OCRDMA_QPS_SQD:
+               /* qps: SQD->XXX */
+               switch (new_state) {
+               case OCRDMA_QPS_RTS:
+               case OCRDMA_QPS_SQE:
+               case OCRDMA_QPS_ERR:
+                       break;
+               default:
+                       status = -EINVAL;
+                       break;
+               };
+               break;
+       case OCRDMA_QPS_SQE:
+               switch (new_state) {
+               case OCRDMA_QPS_RTS:
+               case OCRDMA_QPS_ERR:
+                       break;
+               default:
+                       status = -EINVAL;
+                       break;
+               };
+               break;
+       case OCRDMA_QPS_ERR:
+               /* qps: ERR->XXX */
+               switch (new_state) {
+               case OCRDMA_QPS_RST:
+                       break;
+               default:
+                       status = -EINVAL;
+                       break;
+               };
+               break;
+       default:
+               status = -EINVAL;
+               break;
+       };
+       if (!status)
+               qp->state = new_state;
+
+       spin_unlock_irqrestore(&qp->q_lock, flags);
+       return status;
+}
The switch statement here seems to largely reimpliment
ib_modify_qp_is_ok() (which is exported from the rdma midlayer).  Is there
some reason that doesn't work for your driver?  I'd rather fix / generalize the
core helper function instead of having something mostly duplicate in a
hardware driver.
Yes. Driver needs to put QP to flush state. So that appropriate CQEs can be returned during poll_cq() phase.
So state machine is implemented above.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help