aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/hw
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/infiniband/hw')
-rw-r--r--drivers/infiniband/hw/mlx4/ah.c2
-rw-r--r--drivers/infiniband/hw/mlx4/cq.c6
-rw-r--r--drivers/infiniband/hw/mlx4/qp.c4
-rw-r--r--drivers/infiniband/hw/nes/nes_cm.c1
-rw-r--r--drivers/infiniband/hw/nes/nes_hw.c6
-rw-r--r--drivers/infiniband/hw/nes/nes_utils.c2
-rw-r--r--drivers/infiniband/hw/qib/qib_7220.h2
-rw-r--r--drivers/infiniband/hw/qib/qib_driver.c3
-rw-r--r--drivers/infiniband/hw/qib/qib_iba6120.c4
-rw-r--r--drivers/infiniband/hw/qib/qib_iba7220.c10
-rw-r--r--drivers/infiniband/hw/qib/qib_iba7322.c40
-rw-r--r--drivers/infiniband/hw/qib/qib_init.c2
-rw-r--r--drivers/infiniband/hw/qib/qib_pcie.c4
-rw-r--r--drivers/infiniband/hw/qib/qib_qsfp.h2
-rw-r--r--drivers/infiniband/hw/qib/qib_sd7220.c2
-rw-r--r--drivers/infiniband/hw/qib/qib_sysfs.c2
-rw-r--r--drivers/infiniband/hw/qib/qib_verbs.c43
17 files changed, 81 insertions, 54 deletions
diff --git a/drivers/infiniband/hw/mlx4/ah.c b/drivers/infiniband/hw/mlx4/ah.c
index 4b8f9c49397e..a251becdaa98 100644
--- a/drivers/infiniband/hw/mlx4/ah.c
+++ b/drivers/infiniband/hw/mlx4/ah.c
@@ -126,7 +126,7 @@ static struct ib_ah *create_iboe_ah(struct ib_pd *pd, struct ib_ah_attr *ah_attr
126 ah->av.ib.dlid = cpu_to_be16(0xc000); 126 ah->av.ib.dlid = cpu_to_be16(0xc000);
127 127
128 memcpy(ah->av.eth.dgid, ah_attr->grh.dgid.raw, 16); 128 memcpy(ah->av.eth.dgid, ah_attr->grh.dgid.raw, 16);
129 ah->av.eth.sl_tclass_flowlabel = cpu_to_be32(ah_attr->sl << 28); 129 ah->av.eth.sl_tclass_flowlabel = cpu_to_be32(ah_attr->sl << 29);
130 130
131 return &ah->ibah; 131 return &ah->ibah;
132} 132}
diff --git a/drivers/infiniband/hw/mlx4/cq.c b/drivers/infiniband/hw/mlx4/cq.c
index e8df155bc3b0..5ecf38d97269 100644
--- a/drivers/infiniband/hw/mlx4/cq.c
+++ b/drivers/infiniband/hw/mlx4/cq.c
@@ -715,13 +715,17 @@ repoll:
715 } 715 }
716 716
717 wc->slid = be16_to_cpu(cqe->rlid); 717 wc->slid = be16_to_cpu(cqe->rlid);
718 wc->sl = be16_to_cpu(cqe->sl_vid) >> 12;
719 g_mlpath_rqpn = be32_to_cpu(cqe->g_mlpath_rqpn); 718 g_mlpath_rqpn = be32_to_cpu(cqe->g_mlpath_rqpn);
720 wc->src_qp = g_mlpath_rqpn & 0xffffff; 719 wc->src_qp = g_mlpath_rqpn & 0xffffff;
721 wc->dlid_path_bits = (g_mlpath_rqpn >> 24) & 0x7f; 720 wc->dlid_path_bits = (g_mlpath_rqpn >> 24) & 0x7f;
722 wc->wc_flags |= g_mlpath_rqpn & 0x80000000 ? IB_WC_GRH : 0; 721 wc->wc_flags |= g_mlpath_rqpn & 0x80000000 ? IB_WC_GRH : 0;
723 wc->pkey_index = be32_to_cpu(cqe->immed_rss_invalid) & 0x7f; 722 wc->pkey_index = be32_to_cpu(cqe->immed_rss_invalid) & 0x7f;
724 wc->csum_ok = mlx4_ib_ipoib_csum_ok(cqe->status, cqe->checksum); 723 wc->csum_ok = mlx4_ib_ipoib_csum_ok(cqe->status, cqe->checksum);
724 if (rdma_port_get_link_layer(wc->qp->device,
725 (*cur_qp)->port) == IB_LINK_LAYER_ETHERNET)
726 wc->sl = be16_to_cpu(cqe->sl_vid) >> 13;
727 else
728 wc->sl = be16_to_cpu(cqe->sl_vid) >> 12;
725 } 729 }
726 730
727 return 0; 731 return 0;
diff --git a/drivers/infiniband/hw/mlx4/qp.c b/drivers/infiniband/hw/mlx4/qp.c
index a16f0c8e6f3f..aa2aefa4236c 100644
--- a/drivers/infiniband/hw/mlx4/qp.c
+++ b/drivers/infiniband/hw/mlx4/qp.c
@@ -962,7 +962,7 @@ static int mlx4_set_path(struct mlx4_ib_dev *dev, const struct ib_ah_attr *ah,
962 962
963 if (is_eth) { 963 if (is_eth) {
964 path->sched_queue = MLX4_IB_DEFAULT_SCHED_QUEUE | 964 path->sched_queue = MLX4_IB_DEFAULT_SCHED_QUEUE |
965 ((port - 1) << 6) | ((ah->sl & 7) << 3) | ((ah->sl & 8) >> 1); 965 ((port - 1) << 6) | ((ah->sl & 7) << 3);
966 966
967 if (!(ah->ah_flags & IB_AH_GRH)) 967 if (!(ah->ah_flags & IB_AH_GRH))
968 return -1; 968 return -1;
@@ -1437,7 +1437,7 @@ static int build_mlx_header(struct mlx4_ib_sqp *sqp, struct ib_send_wr *wr,
1437 u16 pcp; 1437 u16 pcp;
1438 1438
1439 sqp->ud_header.vlan.type = cpu_to_be16(MLX4_IB_IBOE_ETHERTYPE); 1439 sqp->ud_header.vlan.type = cpu_to_be16(MLX4_IB_IBOE_ETHERTYPE);
1440 pcp = (be32_to_cpu(ah->av.ib.sl_tclass_flowlabel) >> 27 & 3) << 13; 1440 pcp = (be32_to_cpu(ah->av.ib.sl_tclass_flowlabel) >> 29) << 13;
1441 sqp->ud_header.vlan.tag = cpu_to_be16(vlan | pcp); 1441 sqp->ud_header.vlan.tag = cpu_to_be16(vlan | pcp);
1442 } 1442 }
1443 } else { 1443 } else {
diff --git a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c
index 0a52d72371ee..db0831dc533c 100644
--- a/drivers/infiniband/hw/nes/nes_cm.c
+++ b/drivers/infiniband/hw/nes/nes_cm.c
@@ -2838,6 +2838,7 @@ static int nes_cm_disconn_true(struct nes_qp *nesqp)
2838 issue_disconn = 1; 2838 issue_disconn = 1;
2839 issue_close = 1; 2839 issue_close = 1;
2840 nesqp->cm_id = NULL; 2840 nesqp->cm_id = NULL;
2841 del_timer(&nesqp->terminate_timer);
2841 if (nesqp->flush_issued == 0) { 2842 if (nesqp->flush_issued == 0) {
2842 nesqp->flush_issued = 1; 2843 nesqp->flush_issued = 1;
2843 issue_flush = 1; 2844 issue_flush = 1;
diff --git a/drivers/infiniband/hw/nes/nes_hw.c b/drivers/infiniband/hw/nes/nes_hw.c
index 7c0ff19ce382..055f4b545df0 100644
--- a/drivers/infiniband/hw/nes/nes_hw.c
+++ b/drivers/infiniband/hw/nes/nes_hw.c
@@ -1529,7 +1529,7 @@ int nes_init_phy(struct nes_device *nesdev)
1529 } else { 1529 } else {
1530 /* setup 10G MDIO operation */ 1530 /* setup 10G MDIO operation */
1531 tx_config &= 0xFFFFFFE3; 1531 tx_config &= 0xFFFFFFE3;
1532 tx_config |= 0x15; 1532 tx_config |= 0x1D;
1533 } 1533 }
1534 nes_write_indexed(nesdev, NES_IDX_MAC_TX_CONFIG, tx_config); 1534 nes_write_indexed(nesdev, NES_IDX_MAC_TX_CONFIG, tx_config);
1535 1535
@@ -3619,10 +3619,6 @@ static void nes_process_iwarp_aeqe(struct nes_device *nesdev,
3619 } 3619 }
3620 break; 3620 break;
3621 case NES_AEQE_AEID_LLP_CLOSE_COMPLETE: 3621 case NES_AEQE_AEID_LLP_CLOSE_COMPLETE:
3622 if (nesqp->term_flags) {
3623 nes_terminate_done(nesqp, 0);
3624 return;
3625 }
3626 spin_lock_irqsave(&nesqp->lock, flags); 3622 spin_lock_irqsave(&nesqp->lock, flags);
3627 nesqp->hw_iwarp_state = iwarp_state; 3623 nesqp->hw_iwarp_state = iwarp_state;
3628 nesqp->hw_tcp_state = tcp_state; 3624 nesqp->hw_tcp_state = tcp_state;
diff --git a/drivers/infiniband/hw/nes/nes_utils.c b/drivers/infiniband/hw/nes/nes_utils.c
index cd10968bfa22..8b4c2ff54888 100644
--- a/drivers/infiniband/hw/nes/nes_utils.c
+++ b/drivers/infiniband/hw/nes/nes_utils.c
@@ -56,7 +56,7 @@ static u16 nes_read16_eeprom(void __iomem *addr, u16 offset);
56u32 mh_detected; 56u32 mh_detected;
57u32 mh_pauses_sent; 57u32 mh_pauses_sent;
58 58
59u32 nes_set_pau(struct nes_device *nesdev) 59static u32 nes_set_pau(struct nes_device *nesdev)
60{ 60{
61 u32 ret = 0; 61 u32 ret = 0;
62 u32 counter; 62 u32 counter;
diff --git a/drivers/infiniband/hw/qib/qib_7220.h b/drivers/infiniband/hw/qib/qib_7220.h
index 21f374aa0631..a5356cb4252e 100644
--- a/drivers/infiniband/hw/qib/qib_7220.h
+++ b/drivers/infiniband/hw/qib/qib_7220.h
@@ -97,7 +97,7 @@ struct qib_chippport_specific {
97 u64 iblnkerrsnap; 97 u64 iblnkerrsnap;
98 u64 ibcctrl; /* kr_ibcctrl shadow */ 98 u64 ibcctrl; /* kr_ibcctrl shadow */
99 u64 ibcddrctrl; /* kr_ibcddrctrl shadow */ 99 u64 ibcddrctrl; /* kr_ibcddrctrl shadow */
100 u64 chase_end; 100 unsigned long chase_end;
101 u32 last_delay_mult; 101 u32 last_delay_mult;
102}; 102};
103 103
diff --git a/drivers/infiniband/hw/qib/qib_driver.c b/drivers/infiniband/hw/qib/qib_driver.c
index c90a55f4120f..6fc9365ba8a6 100644
--- a/drivers/infiniband/hw/qib/qib_driver.c
+++ b/drivers/infiniband/hw/qib/qib_driver.c
@@ -371,9 +371,8 @@ static u32 qib_rcv_hdrerr(struct qib_ctxtdata *rcd, struct qib_pportdata *ppd,
371 lnh == QIB_LRH_GRH, 371 lnh == QIB_LRH_GRH,
372 qp, 372 qp,
373 be32_to_cpu(ohdr->bth[0])); 373 be32_to_cpu(ohdr->bth[0]));
374 if (ruc_res) { 374 if (ruc_res)
375 goto unlock; 375 goto unlock;
376 }
377 376
378 /* Only deal with RDMA Writes for now */ 377 /* Only deal with RDMA Writes for now */
379 if (opcode < 378 if (opcode <
diff --git a/drivers/infiniband/hw/qib/qib_iba6120.c b/drivers/infiniband/hw/qib/qib_iba6120.c
index 781a802a321f..4f18e2d332df 100644
--- a/drivers/infiniband/hw/qib/qib_iba6120.c
+++ b/drivers/infiniband/hw/qib/qib_iba6120.c
@@ -2076,9 +2076,11 @@ static void qib_6120_config_ctxts(struct qib_devdata *dd)
2076static void qib_update_6120_usrhead(struct qib_ctxtdata *rcd, u64 hd, 2076static void qib_update_6120_usrhead(struct qib_ctxtdata *rcd, u64 hd,
2077 u32 updegr, u32 egrhd, u32 npkts) 2077 u32 updegr, u32 egrhd, u32 npkts)
2078{ 2078{
2079 qib_write_ureg(rcd->dd, ur_rcvhdrhead, hd, rcd->ctxt);
2080 if (updegr) 2079 if (updegr)
2081 qib_write_ureg(rcd->dd, ur_rcvegrindexhead, egrhd, rcd->ctxt); 2080 qib_write_ureg(rcd->dd, ur_rcvegrindexhead, egrhd, rcd->ctxt);
2081 mmiowb();
2082 qib_write_ureg(rcd->dd, ur_rcvhdrhead, hd, rcd->ctxt);
2083 mmiowb();
2082} 2084}
2083 2085
2084static u32 qib_6120_hdrqempty(struct qib_ctxtdata *rcd) 2086static u32 qib_6120_hdrqempty(struct qib_ctxtdata *rcd)
diff --git a/drivers/infiniband/hw/qib/qib_iba7220.c b/drivers/infiniband/hw/qib/qib_iba7220.c
index 439d3c503cd5..3c722f79d6f6 100644
--- a/drivers/infiniband/hw/qib/qib_iba7220.c
+++ b/drivers/infiniband/hw/qib/qib_iba7220.c
@@ -1051,7 +1051,7 @@ static void reenable_7220_chase(unsigned long opaque)
1051static void handle_7220_chase(struct qib_pportdata *ppd, u64 ibcst) 1051static void handle_7220_chase(struct qib_pportdata *ppd, u64 ibcst)
1052{ 1052{
1053 u8 ibclt; 1053 u8 ibclt;
1054 u64 tnow; 1054 unsigned long tnow;
1055 1055
1056 ibclt = (u8)SYM_FIELD(ibcst, IBCStatus, LinkTrainingState); 1056 ibclt = (u8)SYM_FIELD(ibcst, IBCStatus, LinkTrainingState);
1057 1057
@@ -1066,9 +1066,9 @@ static void handle_7220_chase(struct qib_pportdata *ppd, u64 ibcst)
1066 case IB_7220_LT_STATE_CFGWAITRMT: 1066 case IB_7220_LT_STATE_CFGWAITRMT:
1067 case IB_7220_LT_STATE_TXREVLANES: 1067 case IB_7220_LT_STATE_TXREVLANES:
1068 case IB_7220_LT_STATE_CFGENH: 1068 case IB_7220_LT_STATE_CFGENH:
1069 tnow = get_jiffies_64(); 1069 tnow = jiffies;
1070 if (ppd->cpspec->chase_end && 1070 if (ppd->cpspec->chase_end &&
1071 time_after64(tnow, ppd->cpspec->chase_end)) { 1071 time_after(tnow, ppd->cpspec->chase_end)) {
1072 ppd->cpspec->chase_end = 0; 1072 ppd->cpspec->chase_end = 0;
1073 qib_set_ib_7220_lstate(ppd, 1073 qib_set_ib_7220_lstate(ppd,
1074 QLOGIC_IB_IBCC_LINKCMD_DOWN, 1074 QLOGIC_IB_IBCC_LINKCMD_DOWN,
@@ -2725,9 +2725,11 @@ static int qib_7220_set_loopback(struct qib_pportdata *ppd, const char *what)
2725static void qib_update_7220_usrhead(struct qib_ctxtdata *rcd, u64 hd, 2725static void qib_update_7220_usrhead(struct qib_ctxtdata *rcd, u64 hd,
2726 u32 updegr, u32 egrhd, u32 npkts) 2726 u32 updegr, u32 egrhd, u32 npkts)
2727{ 2727{
2728 qib_write_ureg(rcd->dd, ur_rcvhdrhead, hd, rcd->ctxt);
2729 if (updegr) 2728 if (updegr)
2730 qib_write_ureg(rcd->dd, ur_rcvegrindexhead, egrhd, rcd->ctxt); 2729 qib_write_ureg(rcd->dd, ur_rcvegrindexhead, egrhd, rcd->ctxt);
2730 mmiowb();
2731 qib_write_ureg(rcd->dd, ur_rcvhdrhead, hd, rcd->ctxt);
2732 mmiowb();
2731} 2733}
2732 2734
2733static u32 qib_7220_hdrqempty(struct qib_ctxtdata *rcd) 2735static u32 qib_7220_hdrqempty(struct qib_ctxtdata *rcd)
diff --git a/drivers/infiniband/hw/qib/qib_iba7322.c b/drivers/infiniband/hw/qib/qib_iba7322.c
index 1d5895941e19..41e92089e41b 100644
--- a/drivers/infiniband/hw/qib/qib_iba7322.c
+++ b/drivers/infiniband/hw/qib/qib_iba7322.c
@@ -615,8 +615,8 @@ struct qib_chippport_specific {
615 u64 ibmalfsnap; 615 u64 ibmalfsnap;
616 u64 ibcctrl_a; /* krp_ibcctrl_a shadow */ 616 u64 ibcctrl_a; /* krp_ibcctrl_a shadow */
617 u64 ibcctrl_b; /* krp_ibcctrl_b shadow */ 617 u64 ibcctrl_b; /* krp_ibcctrl_b shadow */
618 u64 qdr_dfe_time; 618 unsigned long qdr_dfe_time;
619 u64 chase_end; 619 unsigned long chase_end;
620 u32 autoneg_tries; 620 u32 autoneg_tries;
621 u32 recovery_init; 621 u32 recovery_init;
622 u32 qdr_dfe_on; 622 u32 qdr_dfe_on;
@@ -1672,7 +1672,8 @@ static void reenable_chase(unsigned long opaque)
1672 QLOGIC_IB_IBCC_LINKINITCMD_POLL); 1672 QLOGIC_IB_IBCC_LINKINITCMD_POLL);
1673} 1673}
1674 1674
1675static void disable_chase(struct qib_pportdata *ppd, u64 tnow, u8 ibclt) 1675static void disable_chase(struct qib_pportdata *ppd, unsigned long tnow,
1676 u8 ibclt)
1676{ 1677{
1677 ppd->cpspec->chase_end = 0; 1678 ppd->cpspec->chase_end = 0;
1678 1679
@@ -1688,7 +1689,7 @@ static void disable_chase(struct qib_pportdata *ppd, u64 tnow, u8 ibclt)
1688static void handle_serdes_issues(struct qib_pportdata *ppd, u64 ibcst) 1689static void handle_serdes_issues(struct qib_pportdata *ppd, u64 ibcst)
1689{ 1690{
1690 u8 ibclt; 1691 u8 ibclt;
1691 u64 tnow; 1692 unsigned long tnow;
1692 1693
1693 ibclt = (u8)SYM_FIELD(ibcst, IBCStatusA_0, LinkTrainingState); 1694 ibclt = (u8)SYM_FIELD(ibcst, IBCStatusA_0, LinkTrainingState);
1694 1695
@@ -1703,9 +1704,9 @@ static void handle_serdes_issues(struct qib_pportdata *ppd, u64 ibcst)
1703 case IB_7322_LT_STATE_CFGWAITRMT: 1704 case IB_7322_LT_STATE_CFGWAITRMT:
1704 case IB_7322_LT_STATE_TXREVLANES: 1705 case IB_7322_LT_STATE_TXREVLANES:
1705 case IB_7322_LT_STATE_CFGENH: 1706 case IB_7322_LT_STATE_CFGENH:
1706 tnow = get_jiffies_64(); 1707 tnow = jiffies;
1707 if (ppd->cpspec->chase_end && 1708 if (ppd->cpspec->chase_end &&
1708 time_after64(tnow, ppd->cpspec->chase_end)) 1709 time_after(tnow, ppd->cpspec->chase_end))
1709 disable_chase(ppd, tnow, ibclt); 1710 disable_chase(ppd, tnow, ibclt);
1710 else if (!ppd->cpspec->chase_end) 1711 else if (!ppd->cpspec->chase_end)
1711 ppd->cpspec->chase_end = tnow + QIB_CHASE_TIME; 1712 ppd->cpspec->chase_end = tnow + QIB_CHASE_TIME;
@@ -2714,7 +2715,7 @@ static noinline void unknown_7322_gpio_intr(struct qib_devdata *dd)
2714 pins >>= SYM_LSB(EXTStatus, GPIOIn); 2715 pins >>= SYM_LSB(EXTStatus, GPIOIn);
2715 if (!(pins & mask)) { 2716 if (!(pins & mask)) {
2716 ++handled; 2717 ++handled;
2717 qd->t_insert = get_jiffies_64(); 2718 qd->t_insert = jiffies;
2718 queue_work(ib_wq, &qd->work); 2719 queue_work(ib_wq, &qd->work);
2719 } 2720 }
2720 } 2721 }
@@ -3602,7 +3603,7 @@ static void qib_7322_config_ctxts(struct qib_devdata *dd)
3602 if (qib_rcvhdrcnt) 3603 if (qib_rcvhdrcnt)
3603 dd->rcvhdrcnt = max(dd->cspec->rcvegrcnt, qib_rcvhdrcnt); 3604 dd->rcvhdrcnt = max(dd->cspec->rcvegrcnt, qib_rcvhdrcnt);
3604 else 3605 else
3605 dd->rcvhdrcnt = max(dd->cspec->rcvegrcnt, 3606 dd->rcvhdrcnt = 2 * max(dd->cspec->rcvegrcnt,
3606 dd->num_pports > 1 ? 1024U : 2048U); 3607 dd->num_pports > 1 ? 1024U : 2048U);
3607} 3608}
3608 3609
@@ -4082,10 +4083,12 @@ static void qib_update_7322_usrhead(struct qib_ctxtdata *rcd, u64 hd,
4082 */ 4083 */
4083 if (hd >> IBA7322_HDRHEAD_PKTINT_SHIFT) 4084 if (hd >> IBA7322_HDRHEAD_PKTINT_SHIFT)
4084 adjust_rcv_timeout(rcd, npkts); 4085 adjust_rcv_timeout(rcd, npkts);
4085 qib_write_ureg(rcd->dd, ur_rcvhdrhead, hd, rcd->ctxt);
4086 qib_write_ureg(rcd->dd, ur_rcvhdrhead, hd, rcd->ctxt);
4087 if (updegr) 4086 if (updegr)
4088 qib_write_ureg(rcd->dd, ur_rcvegrindexhead, egrhd, rcd->ctxt); 4087 qib_write_ureg(rcd->dd, ur_rcvegrindexhead, egrhd, rcd->ctxt);
4088 mmiowb();
4089 qib_write_ureg(rcd->dd, ur_rcvhdrhead, hd, rcd->ctxt);
4090 qib_write_ureg(rcd->dd, ur_rcvhdrhead, hd, rcd->ctxt);
4091 mmiowb();
4089} 4092}
4090 4093
4091static u32 qib_7322_hdrqempty(struct qib_ctxtdata *rcd) 4094static u32 qib_7322_hdrqempty(struct qib_ctxtdata *rcd)
@@ -4794,7 +4797,7 @@ static void qib_get_7322_faststats(unsigned long opaque)
4794 (ppd->lflags & (QIBL_LINKINIT | QIBL_LINKARMED | 4797 (ppd->lflags & (QIBL_LINKINIT | QIBL_LINKARMED |
4795 QIBL_LINKACTIVE)) && 4798 QIBL_LINKACTIVE)) &&
4796 ppd->cpspec->qdr_dfe_time && 4799 ppd->cpspec->qdr_dfe_time &&
4797 time_after64(get_jiffies_64(), ppd->cpspec->qdr_dfe_time)) { 4800 time_is_before_jiffies(ppd->cpspec->qdr_dfe_time)) {
4798 ppd->cpspec->qdr_dfe_on = 0; 4801 ppd->cpspec->qdr_dfe_on = 0;
4799 4802
4800 qib_write_kreg_port(ppd, krp_static_adapt_dis(2), 4803 qib_write_kreg_port(ppd, krp_static_adapt_dis(2),
@@ -5240,7 +5243,7 @@ static int qib_7322_ib_updown(struct qib_pportdata *ppd, int ibup, u64 ibcs)
5240 /* schedule the qsfp refresh which should turn the link 5243 /* schedule the qsfp refresh which should turn the link
5241 off */ 5244 off */
5242 if (ppd->dd->flags & QIB_HAS_QSFP) { 5245 if (ppd->dd->flags & QIB_HAS_QSFP) {
5243 qd->t_insert = get_jiffies_64(); 5246 qd->t_insert = jiffies;
5244 queue_work(ib_wq, &qd->work); 5247 queue_work(ib_wq, &qd->work);
5245 } 5248 }
5246 spin_lock_irqsave(&ppd->sdma_lock, flags); 5249 spin_lock_irqsave(&ppd->sdma_lock, flags);
@@ -5592,7 +5595,7 @@ static void qsfp_7322_event(struct work_struct *work)
5592{ 5595{
5593 struct qib_qsfp_data *qd; 5596 struct qib_qsfp_data *qd;
5594 struct qib_pportdata *ppd; 5597 struct qib_pportdata *ppd;
5595 u64 pwrup; 5598 unsigned long pwrup;
5596 unsigned long flags; 5599 unsigned long flags;
5597 int ret; 5600 int ret;
5598 u32 le2; 5601 u32 le2;
@@ -5620,8 +5623,7 @@ static void qsfp_7322_event(struct work_struct *work)
5620 * to insertion. 5623 * to insertion.
5621 */ 5624 */
5622 while (1) { 5625 while (1) {
5623 u64 now = get_jiffies_64(); 5626 if (time_is_before_jiffies(pwrup))
5624 if (time_after64(now, pwrup))
5625 break; 5627 break;
5626 msleep(20); 5628 msleep(20);
5627 } 5629 }
@@ -7506,7 +7508,7 @@ static int serdes_7322_init_old(struct qib_pportdata *ppd)
7506 7508
7507static int serdes_7322_init_new(struct qib_pportdata *ppd) 7509static int serdes_7322_init_new(struct qib_pportdata *ppd)
7508{ 7510{
7509 u64 tstart; 7511 unsigned long tend;
7510 u32 le_val, rxcaldone; 7512 u32 le_val, rxcaldone;
7511 int chan, chan_done = (1 << SERDES_CHANS) - 1; 7513 int chan, chan_done = (1 << SERDES_CHANS) - 1;
7512 7514
@@ -7611,10 +7613,8 @@ static int serdes_7322_init_new(struct qib_pportdata *ppd)
7611 msleep(20); 7613 msleep(20);
7612 /* Start Calibration */ 7614 /* Start Calibration */
7613 ibsd_wr_allchans(ppd, 4, (1 << 10), BMASK(10, 10)); 7615 ibsd_wr_allchans(ppd, 4, (1 << 10), BMASK(10, 10));
7614 tstart = get_jiffies_64(); 7616 tend = jiffies + msecs_to_jiffies(500);
7615 while (chan_done && 7617 while (chan_done && !time_is_before_jiffies(tend)) {
7616 !time_after64(get_jiffies_64(),
7617 tstart + msecs_to_jiffies(500))) {
7618 msleep(20); 7618 msleep(20);
7619 for (chan = 0; chan < SERDES_CHANS; ++chan) { 7619 for (chan = 0; chan < SERDES_CHANS; ++chan) {
7620 rxcaldone = ahb_mod(ppd->dd, IBSD(ppd->hw_pidx), 7620 rxcaldone = ahb_mod(ppd->dd, IBSD(ppd->hw_pidx),
diff --git a/drivers/infiniband/hw/qib/qib_init.c b/drivers/infiniband/hw/qib/qib_init.c
index 58b0f8ad4a29..cf0cd30adc8d 100644
--- a/drivers/infiniband/hw/qib/qib_init.c
+++ b/drivers/infiniband/hw/qib/qib_init.c
@@ -1015,7 +1015,7 @@ static int __devinit qib_init_one(struct pci_dev *,
1015#define DRIVER_LOAD_MSG "QLogic " QIB_DRV_NAME " loaded: " 1015#define DRIVER_LOAD_MSG "QLogic " QIB_DRV_NAME " loaded: "
1016#define PFX QIB_DRV_NAME ": " 1016#define PFX QIB_DRV_NAME ": "
1017 1017
1018static const struct pci_device_id qib_pci_tbl[] = { 1018static DEFINE_PCI_DEVICE_TABLE(qib_pci_tbl) = {
1019 { PCI_DEVICE(PCI_VENDOR_ID_PATHSCALE, PCI_DEVICE_ID_QLOGIC_IB_6120) }, 1019 { PCI_DEVICE(PCI_VENDOR_ID_PATHSCALE, PCI_DEVICE_ID_QLOGIC_IB_6120) },
1020 { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_IB_7220) }, 1020 { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_IB_7220) },
1021 { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_IB_7322) }, 1021 { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_IB_7322) },
diff --git a/drivers/infiniband/hw/qib/qib_pcie.c b/drivers/infiniband/hw/qib/qib_pcie.c
index 97a8bdf68e60..f695061d688e 100644
--- a/drivers/infiniband/hw/qib/qib_pcie.c
+++ b/drivers/infiniband/hw/qib/qib_pcie.c
@@ -560,9 +560,9 @@ static int qib_tune_pcie_coalesce(struct qib_devdata *dd)
560 * BIOS may not set PCIe bus-utilization parameters for best performance. 560 * BIOS may not set PCIe bus-utilization parameters for best performance.
561 * Check and optionally adjust them to maximize our throughput. 561 * Check and optionally adjust them to maximize our throughput.
562 */ 562 */
563static int qib_pcie_caps; 563static int qib_pcie_caps = 0x51;
564module_param_named(pcie_caps, qib_pcie_caps, int, S_IRUGO); 564module_param_named(pcie_caps, qib_pcie_caps, int, S_IRUGO);
565MODULE_PARM_DESC(pcie_caps, "Max PCIe tuning: Payload (4lsb), ReadReq (D4..7)"); 565MODULE_PARM_DESC(pcie_caps, "Max PCIe tuning: Payload (0..3), ReadReq (4..7)");
566 566
567static int qib_tune_pcie_caps(struct qib_devdata *dd) 567static int qib_tune_pcie_caps(struct qib_devdata *dd)
568{ 568{
diff --git a/drivers/infiniband/hw/qib/qib_qsfp.h b/drivers/infiniband/hw/qib/qib_qsfp.h
index 46002a9417c0..91908f533a2b 100644
--- a/drivers/infiniband/hw/qib/qib_qsfp.h
+++ b/drivers/infiniband/hw/qib/qib_qsfp.h
@@ -177,7 +177,7 @@ struct qib_qsfp_data {
177 struct qib_pportdata *ppd; 177 struct qib_pportdata *ppd;
178 struct work_struct work; 178 struct work_struct work;
179 struct qib_qsfp_cache cache; 179 struct qib_qsfp_cache cache;
180 u64 t_insert; 180 unsigned long t_insert;
181 u8 modpresent; 181 u8 modpresent;
182}; 182};
183 183
diff --git a/drivers/infiniband/hw/qib/qib_sd7220.c b/drivers/infiniband/hw/qib/qib_sd7220.c
index de1a4b2f33c0..ac065dd6b693 100644
--- a/drivers/infiniband/hw/qib/qib_sd7220.c
+++ b/drivers/infiniband/hw/qib/qib_sd7220.c
@@ -300,7 +300,7 @@ bail:
300} 300}
301 301
302static void qib_sd_trimdone_monitor(struct qib_devdata *dd, 302static void qib_sd_trimdone_monitor(struct qib_devdata *dd,
303 const char *where) 303 const char *where)
304{ 304{
305 int ret, chn, baduns; 305 int ret, chn, baduns;
306 u64 val; 306 u64 val;
diff --git a/drivers/infiniband/hw/qib/qib_sysfs.c b/drivers/infiniband/hw/qib/qib_sysfs.c
index 78fbd56879d4..dae51604cfcd 100644
--- a/drivers/infiniband/hw/qib/qib_sysfs.c
+++ b/drivers/infiniband/hw/qib/qib_sysfs.c
@@ -150,7 +150,7 @@ static ssize_t show_status(struct qib_pportdata *ppd, char *buf)
150 * For userland compatibility, these offsets must remain fixed. 150 * For userland compatibility, these offsets must remain fixed.
151 * They are strings for QIB_STATUS_* 151 * They are strings for QIB_STATUS_*
152 */ 152 */
153static const char *qib_status_str[] = { 153static const char * const qib_status_str[] = {
154 "Initted", 154 "Initted",
155 "", 155 "",
156 "", 156 "",
diff --git a/drivers/infiniband/hw/qib/qib_verbs.c b/drivers/infiniband/hw/qib/qib_verbs.c
index a894762da462..7b6c3bffa9d9 100644
--- a/drivers/infiniband/hw/qib/qib_verbs.c
+++ b/drivers/infiniband/hw/qib/qib_verbs.c
@@ -913,8 +913,8 @@ static void copy_io(u32 __iomem *piobuf, struct qib_sge_state *ss,
913 __raw_writel(last, piobuf); 913 __raw_writel(last, piobuf);
914} 914}
915 915
916static struct qib_verbs_txreq *get_txreq(struct qib_ibdev *dev, 916static noinline struct qib_verbs_txreq *__get_txreq(struct qib_ibdev *dev,
917 struct qib_qp *qp, int *retp) 917 struct qib_qp *qp)
918{ 918{
919 struct qib_verbs_txreq *tx; 919 struct qib_verbs_txreq *tx;
920 unsigned long flags; 920 unsigned long flags;
@@ -926,8 +926,9 @@ static struct qib_verbs_txreq *get_txreq(struct qib_ibdev *dev,
926 struct list_head *l = dev->txreq_free.next; 926 struct list_head *l = dev->txreq_free.next;
927 927
928 list_del(l); 928 list_del(l);
929 spin_unlock(&dev->pending_lock);
930 spin_unlock_irqrestore(&qp->s_lock, flags);
929 tx = list_entry(l, struct qib_verbs_txreq, txreq.list); 931 tx = list_entry(l, struct qib_verbs_txreq, txreq.list);
930 *retp = 0;
931 } else { 932 } else {
932 if (ib_qib_state_ops[qp->state] & QIB_PROCESS_RECV_OK && 933 if (ib_qib_state_ops[qp->state] & QIB_PROCESS_RECV_OK &&
933 list_empty(&qp->iowait)) { 934 list_empty(&qp->iowait)) {
@@ -935,14 +936,33 @@ static struct qib_verbs_txreq *get_txreq(struct qib_ibdev *dev,
935 qp->s_flags |= QIB_S_WAIT_TX; 936 qp->s_flags |= QIB_S_WAIT_TX;
936 list_add_tail(&qp->iowait, &dev->txwait); 937 list_add_tail(&qp->iowait, &dev->txwait);
937 } 938 }
938 tx = NULL;
939 qp->s_flags &= ~QIB_S_BUSY; 939 qp->s_flags &= ~QIB_S_BUSY;
940 *retp = -EBUSY; 940 spin_unlock(&dev->pending_lock);
941 spin_unlock_irqrestore(&qp->s_lock, flags);
942 tx = ERR_PTR(-EBUSY);
941 } 943 }
944 return tx;
945}
942 946
943 spin_unlock(&dev->pending_lock); 947static inline struct qib_verbs_txreq *get_txreq(struct qib_ibdev *dev,
944 spin_unlock_irqrestore(&qp->s_lock, flags); 948 struct qib_qp *qp)
949{
950 struct qib_verbs_txreq *tx;
951 unsigned long flags;
945 952
953 spin_lock_irqsave(&dev->pending_lock, flags);
954 /* assume the list non empty */
955 if (likely(!list_empty(&dev->txreq_free))) {
956 struct list_head *l = dev->txreq_free.next;
957
958 list_del(l);
959 spin_unlock_irqrestore(&dev->pending_lock, flags);
960 tx = list_entry(l, struct qib_verbs_txreq, txreq.list);
961 } else {
962 /* call slow path to get the extra lock */
963 spin_unlock_irqrestore(&dev->pending_lock, flags);
964 tx = __get_txreq(dev, qp);
965 }
946 return tx; 966 return tx;
947} 967}
948 968
@@ -1122,9 +1142,9 @@ static int qib_verbs_send_dma(struct qib_qp *qp, struct qib_ib_header *hdr,
1122 goto bail; 1142 goto bail;
1123 } 1143 }
1124 1144
1125 tx = get_txreq(dev, qp, &ret); 1145 tx = get_txreq(dev, qp);
1126 if (!tx) 1146 if (IS_ERR(tx))
1127 goto bail; 1147 goto bail_tx;
1128 1148
1129 control = dd->f_setpbc_control(ppd, plen, qp->s_srate, 1149 control = dd->f_setpbc_control(ppd, plen, qp->s_srate,
1130 be16_to_cpu(hdr->lrh[0]) >> 12); 1150 be16_to_cpu(hdr->lrh[0]) >> 12);
@@ -1195,6 +1215,9 @@ unaligned:
1195 ibp->n_unaligned++; 1215 ibp->n_unaligned++;
1196bail: 1216bail:
1197 return ret; 1217 return ret;
1218bail_tx:
1219 ret = PTR_ERR(tx);
1220 goto bail;
1198} 1221}
1199 1222
1200/* 1223/*