diff options
Diffstat (limited to 'drivers/infiniband')
-rw-r--r-- | drivers/infiniband/core/cm_msgs.h | 1 | ||||
-rw-r--r-- | drivers/infiniband/core/cma.c | 6 | ||||
-rw-r--r-- | drivers/infiniband/core/ucm.c | 3 | ||||
-rw-r--r-- | drivers/infiniband/core/uverbs_cmd.c | 6 | ||||
-rw-r--r-- | drivers/infiniband/hw/mlx4/ah.c | 2 | ||||
-rw-r--r-- | drivers/infiniband/hw/mlx4/cq.c | 6 | ||||
-rw-r--r-- | drivers/infiniband/hw/mlx4/qp.c | 4 | ||||
-rw-r--r-- | drivers/infiniband/hw/nes/nes_cm.c | 1 | ||||
-rw-r--r-- | drivers/infiniband/hw/nes/nes_hw.c | 6 | ||||
-rw-r--r-- | drivers/infiniband/hw/nes/nes_utils.c | 2 | ||||
-rw-r--r-- | drivers/infiniband/hw/qib/qib_7220.h | 2 | ||||
-rw-r--r-- | drivers/infiniband/hw/qib/qib_driver.c | 3 | ||||
-rw-r--r-- | drivers/infiniband/hw/qib/qib_iba6120.c | 4 | ||||
-rw-r--r-- | drivers/infiniband/hw/qib/qib_iba7220.c | 10 | ||||
-rw-r--r-- | drivers/infiniband/hw/qib/qib_iba7322.c | 40 | ||||
-rw-r--r-- | drivers/infiniband/hw/qib/qib_init.c | 2 | ||||
-rw-r--r-- | drivers/infiniband/hw/qib/qib_pcie.c | 4 | ||||
-rw-r--r-- | drivers/infiniband/hw/qib/qib_qsfp.h | 2 | ||||
-rw-r--r-- | drivers/infiniband/hw/qib/qib_sd7220.c | 2 | ||||
-rw-r--r-- | drivers/infiniband/hw/qib/qib_sysfs.c | 2 | ||||
-rw-r--r-- | drivers/infiniband/hw/qib/qib_verbs.c | 43 |
21 files changed, 88 insertions, 63 deletions
diff --git a/drivers/infiniband/core/cm_msgs.h b/drivers/infiniband/core/cm_msgs.h index 505db2a59e7f..7da9b2102341 100644 --- a/drivers/infiniband/core/cm_msgs.h +++ b/drivers/infiniband/core/cm_msgs.h | |||
@@ -799,6 +799,7 @@ struct cm_apr_msg { | |||
799 | 799 | ||
800 | u8 info_length; | 800 | u8 info_length; |
801 | u8 ap_status; | 801 | u8 ap_status; |
802 | __be16 rsvd; | ||
802 | u8 info[IB_CM_APR_INFO_LENGTH]; | 803 | u8 info[IB_CM_APR_INFO_LENGTH]; |
803 | 804 | ||
804 | u8 private_data[IB_CM_APR_PRIVATE_DATA_SIZE]; | 805 | u8 private_data[IB_CM_APR_PRIVATE_DATA_SIZE]; |
diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c index d0d4aa9f4802..fdd8ef8dad32 100644 --- a/drivers/infiniband/core/cma.c +++ b/drivers/infiniband/core/cma.c | |||
@@ -1110,7 +1110,7 @@ static struct rdma_id_private *cma_new_conn_id(struct rdma_cm_id *listen_id, | |||
1110 | if (cma_any_addr((struct sockaddr *) &rt->addr.src_addr)) { | 1110 | if (cma_any_addr((struct sockaddr *) &rt->addr.src_addr)) { |
1111 | rt->addr.dev_addr.dev_type = ARPHRD_INFINIBAND; | 1111 | rt->addr.dev_addr.dev_type = ARPHRD_INFINIBAND; |
1112 | rdma_addr_set_sgid(&rt->addr.dev_addr, &rt->path_rec[0].sgid); | 1112 | rdma_addr_set_sgid(&rt->addr.dev_addr, &rt->path_rec[0].sgid); |
1113 | ib_addr_set_pkey(&rt->addr.dev_addr, rt->path_rec[0].pkey); | 1113 | ib_addr_set_pkey(&rt->addr.dev_addr, be16_to_cpu(rt->path_rec[0].pkey)); |
1114 | } else { | 1114 | } else { |
1115 | ret = rdma_translate_ip((struct sockaddr *) &rt->addr.src_addr, | 1115 | ret = rdma_translate_ip((struct sockaddr *) &rt->addr.src_addr, |
1116 | &rt->addr.dev_addr); | 1116 | &rt->addr.dev_addr); |
@@ -2926,7 +2926,7 @@ static int cma_ib_mc_handler(int status, struct ib_sa_multicast *multicast) | |||
2926 | mutex_lock(&id_priv->qp_mutex); | 2926 | mutex_lock(&id_priv->qp_mutex); |
2927 | if (!status && id_priv->id.qp) | 2927 | if (!status && id_priv->id.qp) |
2928 | status = ib_attach_mcast(id_priv->id.qp, &multicast->rec.mgid, | 2928 | status = ib_attach_mcast(id_priv->id.qp, &multicast->rec.mgid, |
2929 | multicast->rec.mlid); | 2929 | be16_to_cpu(multicast->rec.mlid)); |
2930 | mutex_unlock(&id_priv->qp_mutex); | 2930 | mutex_unlock(&id_priv->qp_mutex); |
2931 | 2931 | ||
2932 | memset(&event, 0, sizeof event); | 2932 | memset(&event, 0, sizeof event); |
@@ -3187,7 +3187,7 @@ void rdma_leave_multicast(struct rdma_cm_id *id, struct sockaddr *addr) | |||
3187 | if (id->qp) | 3187 | if (id->qp) |
3188 | ib_detach_mcast(id->qp, | 3188 | ib_detach_mcast(id->qp, |
3189 | &mc->multicast.ib->rec.mgid, | 3189 | &mc->multicast.ib->rec.mgid, |
3190 | mc->multicast.ib->rec.mlid); | 3190 | be16_to_cpu(mc->multicast.ib->rec.mlid)); |
3191 | if (rdma_node_get_transport(id_priv->cma_dev->device->node_type) == RDMA_TRANSPORT_IB) { | 3191 | if (rdma_node_get_transport(id_priv->cma_dev->device->node_type) == RDMA_TRANSPORT_IB) { |
3192 | switch (rdma_port_get_link_layer(id->device, id->port_num)) { | 3192 | switch (rdma_port_get_link_layer(id->device, id->port_num)) { |
3193 | case IB_LINK_LAYER_INFINIBAND: | 3193 | case IB_LINK_LAYER_INFINIBAND: |
diff --git a/drivers/infiniband/core/ucm.c b/drivers/infiniband/core/ucm.c index b8a0b4a7811b..06f08713f487 100644 --- a/drivers/infiniband/core/ucm.c +++ b/drivers/infiniband/core/ucm.c | |||
@@ -106,9 +106,6 @@ enum { | |||
106 | IB_UCM_MAX_DEVICES = 32 | 106 | IB_UCM_MAX_DEVICES = 32 |
107 | }; | 107 | }; |
108 | 108 | ||
109 | /* ib_cm and ib_user_cm modules share /sys/class/infiniband_cm */ | ||
110 | extern struct class cm_class; | ||
111 | |||
112 | #define IB_UCM_BASE_DEV MKDEV(IB_UCM_MAJOR, IB_UCM_BASE_MINOR) | 109 | #define IB_UCM_BASE_DEV MKDEV(IB_UCM_MAJOR, IB_UCM_BASE_MINOR) |
113 | 110 | ||
114 | static void ib_ucm_add_one(struct ib_device *device); | 111 | static void ib_ucm_add_one(struct ib_device *device); |
diff --git a/drivers/infiniband/core/uverbs_cmd.c b/drivers/infiniband/core/uverbs_cmd.c index e3db8ef4fe4e..b930da4c0c63 100644 --- a/drivers/infiniband/core/uverbs_cmd.c +++ b/drivers/infiniband/core/uverbs_cmd.c | |||
@@ -2459,9 +2459,9 @@ out_put: | |||
2459 | return ret ? ret : in_len; | 2459 | return ret ? ret : in_len; |
2460 | } | 2460 | } |
2461 | 2461 | ||
2462 | int __uverbs_create_xsrq(struct ib_uverbs_file *file, | 2462 | static int __uverbs_create_xsrq(struct ib_uverbs_file *file, |
2463 | struct ib_uverbs_create_xsrq *cmd, | 2463 | struct ib_uverbs_create_xsrq *cmd, |
2464 | struct ib_udata *udata) | 2464 | struct ib_udata *udata) |
2465 | { | 2465 | { |
2466 | struct ib_uverbs_create_srq_resp resp; | 2466 | struct ib_uverbs_create_srq_resp resp; |
2467 | struct ib_usrq_object *obj; | 2467 | struct ib_usrq_object *obj; |
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); | |||
56 | u32 mh_detected; | 56 | u32 mh_detected; |
57 | u32 mh_pauses_sent; | 57 | u32 mh_pauses_sent; |
58 | 58 | ||
59 | u32 nes_set_pau(struct nes_device *nesdev) | 59 | static 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) | |||
2076 | static void qib_update_6120_usrhead(struct qib_ctxtdata *rcd, u64 hd, | 2076 | static 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 | ||
2084 | static u32 qib_6120_hdrqempty(struct qib_ctxtdata *rcd) | 2086 | static 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) | |||
1051 | static void handle_7220_chase(struct qib_pportdata *ppd, u64 ibcst) | 1051 | static 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) | |||
2725 | static void qib_update_7220_usrhead(struct qib_ctxtdata *rcd, u64 hd, | 2725 | static 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 | ||
2733 | static u32 qib_7220_hdrqempty(struct qib_ctxtdata *rcd) | 2735 | static 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 | ||
1675 | static void disable_chase(struct qib_pportdata *ppd, u64 tnow, u8 ibclt) | 1675 | static 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) | |||
1688 | static void handle_serdes_issues(struct qib_pportdata *ppd, u64 ibcst) | 1689 | static 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 | ||
4091 | static u32 qib_7322_hdrqempty(struct qib_ctxtdata *rcd) | 4094 | static 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 | ||
7507 | static int serdes_7322_init_new(struct qib_pportdata *ppd) | 7509 | static 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 | ||
1018 | static const struct pci_device_id qib_pci_tbl[] = { | 1018 | static 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 | */ |
563 | static int qib_pcie_caps; | 563 | static int qib_pcie_caps = 0x51; |
564 | module_param_named(pcie_caps, qib_pcie_caps, int, S_IRUGO); | 564 | module_param_named(pcie_caps, qib_pcie_caps, int, S_IRUGO); |
565 | MODULE_PARM_DESC(pcie_caps, "Max PCIe tuning: Payload (4lsb), ReadReq (D4..7)"); | 565 | MODULE_PARM_DESC(pcie_caps, "Max PCIe tuning: Payload (0..3), ReadReq (4..7)"); |
566 | 566 | ||
567 | static int qib_tune_pcie_caps(struct qib_devdata *dd) | 567 | static 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 | ||
302 | static void qib_sd_trimdone_monitor(struct qib_devdata *dd, | 302 | static 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 | */ |
153 | static const char *qib_status_str[] = { | 153 | static 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 | ||
916 | static struct qib_verbs_txreq *get_txreq(struct qib_ibdev *dev, | 916 | static 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); | 947 | static 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++; |
1196 | bail: | 1216 | bail: |
1197 | return ret; | 1217 | return ret; |
1218 | bail_tx: | ||
1219 | ret = PTR_ERR(tx); | ||
1220 | goto bail; | ||
1198 | } | 1221 | } |
1199 | 1222 | ||
1200 | /* | 1223 | /* |