diff options
| -rw-r--r-- | drivers/infiniband/hw/cxgb4/cm.c | 4 | ||||
| -rw-r--r-- | drivers/infiniband/hw/cxgb4/cq.c | 2 | ||||
| -rw-r--r-- | drivers/infiniband/hw/qib/qib_iba7322.c | 18 | ||||
| -rw-r--r-- | drivers/infiniband/hw/qib/qib_qsfp.c | 12 | ||||
| -rw-r--r-- | drivers/infiniband/ulp/ipoib/ipoib_ib.c | 13 | ||||
| -rw-r--r-- | drivers/infiniband/ulp/ipoib/ipoib_main.c | 2 | ||||
| -rw-r--r-- | drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 7 |
7 files changed, 27 insertions, 31 deletions
diff --git a/drivers/infiniband/hw/cxgb4/cm.c b/drivers/infiniband/hw/cxgb4/cm.c index 75b57bee6622..0747004313ad 100644 --- a/drivers/infiniband/hw/cxgb4/cm.c +++ b/drivers/infiniband/hw/cxgb4/cm.c | |||
| @@ -542,8 +542,10 @@ static void send_mpa_req(struct c4iw_ep *ep, struct sk_buff *skb, | |||
| 542 | (mpa_rev_to_use == 2 ? MPA_ENHANCED_RDMA_CONN : 0); | 542 | (mpa_rev_to_use == 2 ? MPA_ENHANCED_RDMA_CONN : 0); |
| 543 | mpa->private_data_size = htons(ep->plen); | 543 | mpa->private_data_size = htons(ep->plen); |
| 544 | mpa->revision = mpa_rev_to_use; | 544 | mpa->revision = mpa_rev_to_use; |
| 545 | if (mpa_rev_to_use == 1) | 545 | if (mpa_rev_to_use == 1) { |
| 546 | ep->tried_with_mpa_v1 = 1; | 546 | ep->tried_with_mpa_v1 = 1; |
| 547 | ep->retry_with_mpa_v1 = 0; | ||
| 548 | } | ||
| 547 | 549 | ||
| 548 | if (mpa_rev_to_use == 2) { | 550 | if (mpa_rev_to_use == 2) { |
| 549 | mpa->private_data_size += | 551 | mpa->private_data_size += |
diff --git a/drivers/infiniband/hw/cxgb4/cq.c b/drivers/infiniband/hw/cxgb4/cq.c index f35a935267e7..0f1607c8325a 100644 --- a/drivers/infiniband/hw/cxgb4/cq.c +++ b/drivers/infiniband/hw/cxgb4/cq.c | |||
| @@ -311,7 +311,7 @@ void c4iw_count_rcqes(struct t4_cq *cq, struct t4_wq *wq, int *count) | |||
| 311 | while (ptr != cq->sw_pidx) { | 311 | while (ptr != cq->sw_pidx) { |
| 312 | cqe = &cq->sw_queue[ptr]; | 312 | cqe = &cq->sw_queue[ptr]; |
| 313 | if (RQ_TYPE(cqe) && (CQE_OPCODE(cqe) != FW_RI_READ_RESP) && | 313 | if (RQ_TYPE(cqe) && (CQE_OPCODE(cqe) != FW_RI_READ_RESP) && |
| 314 | (CQE_QPID(cqe) == wq->rq.qid) && cqe_completes_wr(cqe, wq)) | 314 | (CQE_QPID(cqe) == wq->sq.qid) && cqe_completes_wr(cqe, wq)) |
| 315 | (*count)++; | 315 | (*count)++; |
| 316 | if (++ptr == cq->size) | 316 | if (++ptr == cq->size) |
| 317 | ptr = 0; | 317 | ptr = 0; |
diff --git a/drivers/infiniband/hw/qib/qib_iba7322.c b/drivers/infiniband/hw/qib/qib_iba7322.c index 5bd2162b95dc..1d5895941e19 100644 --- a/drivers/infiniband/hw/qib/qib_iba7322.c +++ b/drivers/infiniband/hw/qib/qib_iba7322.c | |||
| @@ -2307,19 +2307,11 @@ static int qib_7322_bringup_serdes(struct qib_pportdata *ppd) | |||
| 2307 | SYM_LSB(IBCCtrlA_0, MaxPktLen); | 2307 | SYM_LSB(IBCCtrlA_0, MaxPktLen); |
| 2308 | ppd->cpspec->ibcctrl_a = ibc; /* without linkcmd or linkinitcmd! */ | 2308 | ppd->cpspec->ibcctrl_a = ibc; /* without linkcmd or linkinitcmd! */ |
| 2309 | 2309 | ||
| 2310 | /* initially come up waiting for TS1, without sending anything. */ | ||
| 2311 | val = ppd->cpspec->ibcctrl_a | (QLOGIC_IB_IBCC_LINKINITCMD_DISABLE << | ||
| 2312 | QLOGIC_IB_IBCC_LINKINITCMD_SHIFT); | ||
| 2313 | |||
| 2314 | ppd->cpspec->ibcctrl_a = val; | ||
| 2315 | /* | 2310 | /* |
| 2316 | * Reset the PCS interface to the serdes (and also ibc, which is still | 2311 | * Reset the PCS interface to the serdes (and also ibc, which is still |
| 2317 | * in reset from above). Writes new value of ibcctrl_a as last step. | 2312 | * in reset from above). Writes new value of ibcctrl_a as last step. |
| 2318 | */ | 2313 | */ |
| 2319 | qib_7322_mini_pcs_reset(ppd); | 2314 | qib_7322_mini_pcs_reset(ppd); |
| 2320 | qib_write_kreg(dd, kr_scratch, 0ULL); | ||
| 2321 | /* clear the linkinit cmds */ | ||
| 2322 | ppd->cpspec->ibcctrl_a &= ~SYM_MASK(IBCCtrlA_0, LinkInitCmd); | ||
| 2323 | 2315 | ||
| 2324 | if (!ppd->cpspec->ibcctrl_b) { | 2316 | if (!ppd->cpspec->ibcctrl_b) { |
| 2325 | unsigned lse = ppd->link_speed_enabled; | 2317 | unsigned lse = ppd->link_speed_enabled; |
| @@ -2385,6 +2377,14 @@ static int qib_7322_bringup_serdes(struct qib_pportdata *ppd) | |||
| 2385 | ppd->cpspec->ibcctrl_a |= SYM_MASK(IBCCtrlA_0, IBLinkEn); | 2377 | ppd->cpspec->ibcctrl_a |= SYM_MASK(IBCCtrlA_0, IBLinkEn); |
| 2386 | set_vls(ppd); | 2378 | set_vls(ppd); |
| 2387 | 2379 | ||
| 2380 | /* initially come up DISABLED, without sending anything. */ | ||
| 2381 | val = ppd->cpspec->ibcctrl_a | (QLOGIC_IB_IBCC_LINKINITCMD_DISABLE << | ||
| 2382 | QLOGIC_IB_IBCC_LINKINITCMD_SHIFT); | ||
| 2383 | qib_write_kreg_port(ppd, krp_ibcctrl_a, val); | ||
| 2384 | qib_write_kreg(dd, kr_scratch, 0ULL); | ||
| 2385 | /* clear the linkinit cmds */ | ||
| 2386 | ppd->cpspec->ibcctrl_a = val & ~SYM_MASK(IBCCtrlA_0, LinkInitCmd); | ||
| 2387 | |||
| 2388 | /* be paranoid against later code motion, etc. */ | 2388 | /* be paranoid against later code motion, etc. */ |
| 2389 | spin_lock_irqsave(&dd->cspec->rcvmod_lock, flags); | 2389 | spin_lock_irqsave(&dd->cspec->rcvmod_lock, flags); |
| 2390 | ppd->p_rcvctrl |= SYM_MASK(RcvCtrl_0, RcvIBPortEnable); | 2390 | ppd->p_rcvctrl |= SYM_MASK(RcvCtrl_0, RcvIBPortEnable); |
| @@ -5241,7 +5241,7 @@ static int qib_7322_ib_updown(struct qib_pportdata *ppd, int ibup, u64 ibcs) | |||
| 5241 | off */ | 5241 | off */ |
| 5242 | if (ppd->dd->flags & QIB_HAS_QSFP) { | 5242 | if (ppd->dd->flags & QIB_HAS_QSFP) { |
| 5243 | qd->t_insert = get_jiffies_64(); | 5243 | qd->t_insert = get_jiffies_64(); |
| 5244 | schedule_work(&qd->work); | 5244 | queue_work(ib_wq, &qd->work); |
| 5245 | } | 5245 | } |
| 5246 | spin_lock_irqsave(&ppd->sdma_lock, flags); | 5246 | spin_lock_irqsave(&ppd->sdma_lock, flags); |
| 5247 | if (__qib_sdma_running(ppd)) | 5247 | if (__qib_sdma_running(ppd)) |
diff --git a/drivers/infiniband/hw/qib/qib_qsfp.c b/drivers/infiniband/hw/qib/qib_qsfp.c index e06c4ed383f1..fa71b1e666c5 100644 --- a/drivers/infiniband/hw/qib/qib_qsfp.c +++ b/drivers/infiniband/hw/qib/qib_qsfp.c | |||
| @@ -480,18 +480,6 @@ void qib_qsfp_init(struct qib_qsfp_data *qd, | |||
| 480 | udelay(20); /* Generous RST dwell */ | 480 | udelay(20); /* Generous RST dwell */ |
| 481 | 481 | ||
| 482 | dd->f_gpio_mod(dd, mask, mask, mask); | 482 | dd->f_gpio_mod(dd, mask, mask, mask); |
| 483 | /* Spec says module can take up to two seconds! */ | ||
| 484 | mask = QSFP_GPIO_MOD_PRS_N; | ||
| 485 | if (qd->ppd->hw_pidx) | ||
| 486 | mask <<= QSFP_GPIO_PORT2_SHIFT; | ||
| 487 | |||
| 488 | /* Do not try to wait here. Better to let event handle it */ | ||
| 489 | if (!qib_qsfp_mod_present(qd->ppd)) | ||
| 490 | goto bail; | ||
| 491 | /* We see a module, but it may be unwise to look yet. Just schedule */ | ||
| 492 | qd->t_insert = get_jiffies_64(); | ||
| 493 | queue_work(ib_wq, &qd->work); | ||
| 494 | bail: | ||
| 495 | return; | 483 | return; |
| 496 | } | 484 | } |
| 497 | 485 | ||
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_ib.c b/drivers/infiniband/ulp/ipoib/ipoib_ib.c index 0ef9af94997d..4115be54ba3b 100644 --- a/drivers/infiniband/ulp/ipoib/ipoib_ib.c +++ b/drivers/infiniband/ulp/ipoib/ipoib_ib.c | |||
| @@ -57,21 +57,24 @@ struct ipoib_ah *ipoib_create_ah(struct net_device *dev, | |||
| 57 | struct ib_pd *pd, struct ib_ah_attr *attr) | 57 | struct ib_pd *pd, struct ib_ah_attr *attr) |
| 58 | { | 58 | { |
| 59 | struct ipoib_ah *ah; | 59 | struct ipoib_ah *ah; |
| 60 | struct ib_ah *vah; | ||
| 60 | 61 | ||
| 61 | ah = kmalloc(sizeof *ah, GFP_KERNEL); | 62 | ah = kmalloc(sizeof *ah, GFP_KERNEL); |
| 62 | if (!ah) | 63 | if (!ah) |
| 63 | return NULL; | 64 | return ERR_PTR(-ENOMEM); |
| 64 | 65 | ||
| 65 | ah->dev = dev; | 66 | ah->dev = dev; |
| 66 | ah->last_send = 0; | 67 | ah->last_send = 0; |
| 67 | kref_init(&ah->ref); | 68 | kref_init(&ah->ref); |
| 68 | 69 | ||
| 69 | ah->ah = ib_create_ah(pd, attr); | 70 | vah = ib_create_ah(pd, attr); |
| 70 | if (IS_ERR(ah->ah)) { | 71 | if (IS_ERR(vah)) { |
| 71 | kfree(ah); | 72 | kfree(ah); |
| 72 | ah = NULL; | 73 | ah = (struct ipoib_ah *)vah; |
| 73 | } else | 74 | } else { |
| 75 | ah->ah = vah; | ||
| 74 | ipoib_dbg(netdev_priv(dev), "Created ah %p\n", ah->ah); | 76 | ipoib_dbg(netdev_priv(dev), "Created ah %p\n", ah->ah); |
| 77 | } | ||
| 75 | 78 | ||
| 76 | return ah; | 79 | return ah; |
| 77 | } | 80 | } |
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c index ef38848d1b0e..83695b48b010 100644 --- a/drivers/infiniband/ulp/ipoib/ipoib_main.c +++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c | |||
| @@ -432,7 +432,7 @@ static void path_rec_completion(int status, | |||
| 432 | 432 | ||
| 433 | spin_lock_irqsave(&priv->lock, flags); | 433 | spin_lock_irqsave(&priv->lock, flags); |
| 434 | 434 | ||
| 435 | if (ah) { | 435 | if (!IS_ERR_OR_NULL(ah)) { |
| 436 | path->pathrec = *pathrec; | 436 | path->pathrec = *pathrec; |
| 437 | 437 | ||
| 438 | old_ah = path->ah; | 438 | old_ah = path->ah; |
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c index cad1894594a8..873bff97e69e 100644 --- a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c +++ b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c | |||
| @@ -240,8 +240,11 @@ static int ipoib_mcast_join_finish(struct ipoib_mcast *mcast, | |||
| 240 | av.grh.dgid = mcast->mcmember.mgid; | 240 | av.grh.dgid = mcast->mcmember.mgid; |
| 241 | 241 | ||
| 242 | ah = ipoib_create_ah(dev, priv->pd, &av); | 242 | ah = ipoib_create_ah(dev, priv->pd, &av); |
| 243 | if (!ah) { | 243 | if (IS_ERR(ah)) { |
| 244 | ipoib_warn(priv, "ib_address_create failed\n"); | 244 | ipoib_warn(priv, "ib_address_create failed %ld\n", |
| 245 | -PTR_ERR(ah)); | ||
| 246 | /* use original error */ | ||
| 247 | return PTR_ERR(ah); | ||
| 245 | } else { | 248 | } else { |
| 246 | spin_lock_irq(&priv->lock); | 249 | spin_lock_irq(&priv->lock); |
| 247 | mcast->ah = ah; | 250 | mcast->ah = ah; |
