Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland...
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 26 May 2011 19:13:57 +0000 (12:13 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 26 May 2011 19:13:57 +0000 (12:13 -0700)
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband:
  RDMA/cma: Save PID of ID's owner
  RDMA/cma: Add support for netlink statistics export
  RDMA/cma: Pass QP type into rdma_create_id()
  RDMA: Update exported headers list
  RDMA/cma: Export enum cma_state in <rdma/rdma_cm.h>
  RDMA/nes: Add a check for strict_strtoul()
  RDMA/cxgb3: Don't post zero-byte read if endpoint is going away
  RDMA/cxgb4: Use completion objects for event blocking
  IB/srp: Fix integer -> pointer cast warnings
  IB: Add devnode methods to cm_class and umad_class
  IB/mad: Return EPROTONOSUPPORT when an RDMA device lacks the QP required
  IB/uverbs: Add devnode method to set path/mode
  RDMA/ucma: Add .nodename/.mode to tell userspace where to create device node
  RDMA: Add netlink infrastructure
  RDMA: Add error handling to ib_core_init()

1  2 
drivers/infiniband/hw/cxgb3/iwch_cm.c
net/9p/trans_rdma.c
net/sunrpc/xprtrdma/svc_rdma_transport.c

index 2391841389944f914c3d4bc224f136b27f170fa3,ad998c0b51e259e09a65ffef5c783b7380bea554..0a5008fbebac553e90dae527f88549eb90210936
@@@ -338,9 -338,8 +338,9 @@@ static struct rtable *find_route(struc
                                 __be16 peer_port, u8 tos)
  {
        struct rtable *rt;
 +      struct flowi4 fl4;
  
 -      rt = ip_route_output_ports(&init_net, NULL, peer_ip, local_ip,
 +      rt = ip_route_output_ports(&init_net, &fl4, NULL, peer_ip, local_ip,
                                   peer_port, local_port, IPPROTO_TCP,
                                   tos, 0);
        if (IS_ERR(rt))
@@@ -914,7 -913,7 +914,7 @@@ static void process_mpa_reply(struct iw
                goto err;
  
        if (peer2peer && iwch_rqes_posted(ep->com.qp) == 0) {
-               iwch_post_zb_read(ep->com.qp);
+               iwch_post_zb_read(ep);
        }
  
        goto out;
@@@ -1078,6 -1077,8 +1078,8 @@@ static int tx_ack(struct t3cdev *tdev, 
        struct iwch_ep *ep = ctx;
        struct cpl_wr_ack *hdr = cplhdr(skb);
        unsigned int credits = ntohs(hdr->credits);
+       unsigned long flags;
+       int post_zb = 0;
  
        PDBG("%s ep %p credits %u\n", __func__, ep, credits);
  
                return CPL_RET_BUF_DONE;
        }
  
+       spin_lock_irqsave(&ep->com.lock, flags);
        BUG_ON(credits != 1);
        dst_confirm(ep->dst);
        if (!ep->mpa_skb) {
                PDBG("%s rdma_init wr_ack ep %p state %u\n",
-                       __func__, ep, state_read(&ep->com));
+                       __func__, ep, ep->com.state);
                if (ep->mpa_attr.initiator) {
                        PDBG("%s initiator ep %p state %u\n",
-                               __func__, ep, state_read(&ep->com));
-                       if (peer2peer)
-                               iwch_post_zb_read(ep->com.qp);
+                               __func__, ep, ep->com.state);
+                       if (peer2peer && ep->com.state == FPDU_MODE)
+                               post_zb = 1;
                } else {
                        PDBG("%s responder ep %p state %u\n",
-                               __func__, ep, state_read(&ep->com));
-                       ep->com.rpl_done = 1;
-                       wake_up(&ep->com.waitq);
+                               __func__, ep, ep->com.state);
+                       if (ep->com.state == MPA_REQ_RCVD) {
+                               ep->com.rpl_done = 1;
+                               wake_up(&ep->com.waitq);
+                       }
                }
        } else {
                PDBG("%s lsm ack ep %p state %u freeing skb\n",
-                       __func__, ep, state_read(&ep->com));
+                       __func__, ep, ep->com.state);
                kfree_skb(ep->mpa_skb);
                ep->mpa_skb = NULL;
        }
+       spin_unlock_irqrestore(&ep->com.lock, flags);
+       if (post_zb)
+               iwch_post_zb_read(ep);
        return CPL_RET_BUF_DONE;
  }
  
diff --combined net/9p/trans_rdma.c
index 844a7a5607e3d2ee985f80b18577ac2b6ff4be62,3640e83eef8f10afdb5a9a5bff18a7ae3d639151..159c50f1c6bf672c24b0d13f8e4f52dd40a18589
@@@ -167,6 -167,7 +167,6 @@@ static int parse_opts(char *params, str
        substring_t args[MAX_OPT_ARGS];
        int option;
        char *options, *tmp_options;
 -      int ret;
  
        opts->port = P9_PORT;
        opts->sq_depth = P9_RDMA_SQ_DEPTH;
                if (r < 0) {
                        P9_DPRINTK(P9_DEBUG_ERROR,
                                   "integer field, but no integer?\n");
 -                      ret = r;
                        continue;
                }
                switch (token) {
@@@ -589,7 -591,8 +589,8 @@@ rdma_create_trans(struct p9_client *cli
                return -ENOMEM;
  
        /* Create the RDMA CM ID */
-       rdma->cm_id = rdma_create_id(p9_cm_event_handler, client, RDMA_PS_TCP);
+       rdma->cm_id = rdma_create_id(p9_cm_event_handler, client, RDMA_PS_TCP,
+                                    IB_QPT_RC);
        if (IS_ERR(rdma->cm_id))
                goto error;
  
index 6c014dd3a20bf235c5ccb32408ed7f2c726406be,afff475642cae0274445063fb3d81ed0815e2b14..c3c232a88d94daa8a9facb1c9cbd3a3025d0354e
@@@ -333,7 -333,7 +333,7 @@@ static void rq_cq_reap(struct svcxprt_r
  }
  
  /*
 - * Processs a completion context
 + * Process a completion context
   */
  static void process_context(struct svcxprt_rdma *xprt,
                            struct svc_rdma_op_ctxt *ctxt)
@@@ -695,7 -695,8 +695,8 @@@ static struct svc_xprt *svc_rdma_create
                return ERR_PTR(-ENOMEM);
        xprt = &cma_xprt->sc_xprt;
  
-       listen_id = rdma_create_id(rdma_listen_handler, cma_xprt, RDMA_PS_TCP);
+       listen_id = rdma_create_id(rdma_listen_handler, cma_xprt, RDMA_PS_TCP,
+                                  IB_QPT_RC);
        if (IS_ERR(listen_id)) {
                ret = PTR_ERR(listen_id);
                dprintk("svcrdma: rdma_create_id failed = %d\n", ret);