diff options
| author | Linus Torvalds <torvalds@g5.osdl.org> | 2006-04-19 14:52:30 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-04-19 14:52:30 -0400 |
| commit | 52824b6b5fa0533e2b2adc9df396d0e9ff6fb02a (patch) | |
| tree | 86b588fcd75715ed578f92c0abb3149d6cf617b5 /drivers | |
| parent | 949b211235cf301790ef4fb903af65d71be29b2a (diff) | |
| parent | 415dcd95b25b59631656f559570d1a973bf691a9 (diff) | |
Merge branch 'for-linus' of master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband
* 'for-linus' of master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband:
IB/mthca: make a function static
IB/ipath: Fix whitespace
IB/ipath: Make more names static
IB/mad: Fix RMPP version check during agent registration
IB/srp: Remove request from list when SCSI abort succeeds
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/infiniband/core/mad.c | 5 | ||||
| -rw-r--r-- | drivers/infiniband/hw/ipath/ipath_diag.c | 12 | ||||
| -rw-r--r-- | drivers/infiniband/hw/ipath/ipath_driver.c | 2 | ||||
| -rw-r--r-- | drivers/infiniband/hw/ipath/ipath_intr.c | 4 | ||||
| -rw-r--r-- | drivers/infiniband/hw/ipath/ipath_kernel.h | 1 | ||||
| -rw-r--r-- | drivers/infiniband/hw/ipath/ipath_layer.c | 2 | ||||
| -rw-r--r-- | drivers/infiniband/hw/ipath/ipath_pe800.c | 10 | ||||
| -rw-r--r-- | drivers/infiniband/hw/ipath/ipath_qp.c | 124 | ||||
| -rw-r--r-- | drivers/infiniband/hw/ipath/ipath_ud.c | 4 | ||||
| -rw-r--r-- | drivers/infiniband/hw/ipath/ipath_verbs.c | 118 | ||||
| -rw-r--r-- | drivers/infiniband/hw/ipath/ipath_verbs.h | 5 | ||||
| -rw-r--r-- | drivers/infiniband/hw/mthca/mthca_mad.c | 2 | ||||
| -rw-r--r-- | drivers/infiniband/ulp/srp/ib_srp.c | 18 |
13 files changed, 145 insertions, 162 deletions
diff --git a/drivers/infiniband/core/mad.c b/drivers/infiniband/core/mad.c index 3a702da83e41..469b6923a2e2 100644 --- a/drivers/infiniband/core/mad.c +++ b/drivers/infiniband/core/mad.c | |||
| @@ -228,10 +228,7 @@ struct ib_mad_agent *ib_register_mad_agent(struct ib_device *device, | |||
| 228 | goto error1; | 228 | goto error1; |
| 229 | } | 229 | } |
| 230 | /* Make sure class supplied is consistent with RMPP */ | 230 | /* Make sure class supplied is consistent with RMPP */ |
| 231 | if (ib_is_mad_class_rmpp(mad_reg_req->mgmt_class)) { | 231 | if (!ib_is_mad_class_rmpp(mad_reg_req->mgmt_class)) { |
| 232 | if (!rmpp_version) | ||
| 233 | goto error1; | ||
| 234 | } else { | ||
| 235 | if (rmpp_version) | 232 | if (rmpp_version) |
| 236 | goto error1; | 233 | goto error1; |
| 237 | } | 234 | } |
diff --git a/drivers/infiniband/hw/ipath/ipath_diag.c b/drivers/infiniband/hw/ipath/ipath_diag.c index cd533cf951c2..7d3fb6996b41 100644 --- a/drivers/infiniband/hw/ipath/ipath_diag.c +++ b/drivers/infiniband/hw/ipath/ipath_diag.c | |||
| @@ -365,15 +365,3 @@ static ssize_t ipath_diag_write(struct file *fp, const char __user *data, | |||
| 365 | bail: | 365 | bail: |
| 366 | return ret; | 366 | return ret; |
| 367 | } | 367 | } |
| 368 | |||
| 369 | void ipath_diag_bringup_link(struct ipath_devdata *dd) | ||
| 370 | { | ||
| 371 | if (diag_set_link || (dd->ipath_flags & IPATH_LINKACTIVE)) | ||
| 372 | return; | ||
| 373 | |||
| 374 | diag_set_link = 1; | ||
| 375 | ipath_cdbg(VERBOSE, "Trying to set to set link active for " | ||
| 376 | "diag pkt\n"); | ||
| 377 | ipath_layer_set_linkstate(dd, IPATH_IB_LINKARM); | ||
| 378 | ipath_layer_set_linkstate(dd, IPATH_IB_LINKACTIVE); | ||
| 379 | } | ||
diff --git a/drivers/infiniband/hw/ipath/ipath_driver.c b/drivers/infiniband/hw/ipath/ipath_driver.c index 58a94efb0070..e7617c3982ea 100644 --- a/drivers/infiniband/hw/ipath/ipath_driver.c +++ b/drivers/infiniband/hw/ipath/ipath_driver.c | |||
| @@ -1729,7 +1729,7 @@ void ipath_free_pddata(struct ipath_devdata *dd, u32 port, int freehdrq) | |||
| 1729 | } | 1729 | } |
| 1730 | } | 1730 | } |
| 1731 | 1731 | ||
| 1732 | int __init infinipath_init(void) | 1732 | static int __init infinipath_init(void) |
| 1733 | { | 1733 | { |
| 1734 | int ret; | 1734 | int ret; |
| 1735 | 1735 | ||
diff --git a/drivers/infiniband/hw/ipath/ipath_intr.c b/drivers/infiniband/hw/ipath/ipath_intr.c index 60f5f4108069..0bcb428041f3 100644 --- a/drivers/infiniband/hw/ipath/ipath_intr.c +++ b/drivers/infiniband/hw/ipath/ipath_intr.c | |||
| @@ -172,8 +172,8 @@ static void handle_e_ibstatuschanged(struct ipath_devdata *dd, | |||
| 172 | "was %s\n", dd->ipath_unit, | 172 | "was %s\n", dd->ipath_unit, |
| 173 | ib_linkstate(lstate), | 173 | ib_linkstate(lstate), |
| 174 | ib_linkstate((unsigned) | 174 | ib_linkstate((unsigned) |
| 175 | dd->ipath_lastibcstat | 175 | dd->ipath_lastibcstat |
| 176 | & IPATH_IBSTATE_MASK)); | 176 | & IPATH_IBSTATE_MASK)); |
| 177 | } | 177 | } |
| 178 | else { | 178 | else { |
| 179 | lstate = dd->ipath_lastibcstat & IPATH_IBSTATE_MASK; | 179 | lstate = dd->ipath_lastibcstat & IPATH_IBSTATE_MASK; |
diff --git a/drivers/infiniband/hw/ipath/ipath_kernel.h b/drivers/infiniband/hw/ipath/ipath_kernel.h index 159d0aed31a5..0ce5f19c9d62 100644 --- a/drivers/infiniband/hw/ipath/ipath_kernel.h +++ b/drivers/infiniband/hw/ipath/ipath_kernel.h | |||
| @@ -528,7 +528,6 @@ extern spinlock_t ipath_devs_lock; | |||
| 528 | extern struct ipath_devdata *ipath_lookup(int unit); | 528 | extern struct ipath_devdata *ipath_lookup(int unit); |
| 529 | 529 | ||
| 530 | extern u16 ipath_layer_rcv_opcode; | 530 | extern u16 ipath_layer_rcv_opcode; |
| 531 | extern int ipath_verbs_registered; | ||
| 532 | extern int __ipath_layer_intr(struct ipath_devdata *, u32); | 531 | extern int __ipath_layer_intr(struct ipath_devdata *, u32); |
| 533 | extern int ipath_layer_intr(struct ipath_devdata *, u32); | 532 | extern int ipath_layer_intr(struct ipath_devdata *, u32); |
| 534 | extern int __ipath_layer_rcv(struct ipath_devdata *, void *, | 533 | extern int __ipath_layer_rcv(struct ipath_devdata *, void *, |
diff --git a/drivers/infiniband/hw/ipath/ipath_layer.c b/drivers/infiniband/hw/ipath/ipath_layer.c index 2cabf6340572..69ed1100701a 100644 --- a/drivers/infiniband/hw/ipath/ipath_layer.c +++ b/drivers/infiniband/hw/ipath/ipath_layer.c | |||
| @@ -52,7 +52,7 @@ static int (*layer_rcv)(void *, void *, struct sk_buff *); | |||
| 52 | static int (*layer_rcv_lid)(void *, void *); | 52 | static int (*layer_rcv_lid)(void *, void *); |
| 53 | static int (*verbs_piobufavail)(void *); | 53 | static int (*verbs_piobufavail)(void *); |
| 54 | static void (*verbs_rcv)(void *, void *, void *, u32); | 54 | static void (*verbs_rcv)(void *, void *, void *, u32); |
| 55 | int ipath_verbs_registered; | 55 | static int ipath_verbs_registered; |
| 56 | 56 | ||
| 57 | static void *(*layer_add_one)(int, struct ipath_devdata *); | 57 | static void *(*layer_add_one)(int, struct ipath_devdata *); |
| 58 | static void (*layer_remove_one)(void *); | 58 | static void (*layer_remove_one)(void *); |
diff --git a/drivers/infiniband/hw/ipath/ipath_pe800.c b/drivers/infiniband/hw/ipath/ipath_pe800.c index e693a7a82667..e1dc4f757062 100644 --- a/drivers/infiniband/hw/ipath/ipath_pe800.c +++ b/drivers/infiniband/hw/ipath/ipath_pe800.c | |||
| @@ -305,8 +305,8 @@ static const struct ipath_cregs ipath_pe_cregs = { | |||
| 305 | * we'll print them and continue. We reuse the same message buffer as | 305 | * we'll print them and continue. We reuse the same message buffer as |
| 306 | * ipath_handle_errors() to avoid excessive stack usage. | 306 | * ipath_handle_errors() to avoid excessive stack usage. |
| 307 | */ | 307 | */ |
| 308 | void ipath_pe_handle_hwerrors(struct ipath_devdata *dd, char *msg, | 308 | static void ipath_pe_handle_hwerrors(struct ipath_devdata *dd, char *msg, |
| 309 | size_t msgl) | 309 | size_t msgl) |
| 310 | { | 310 | { |
| 311 | ipath_err_t hwerrs; | 311 | ipath_err_t hwerrs; |
| 312 | u32 bits, ctrl; | 312 | u32 bits, ctrl; |
| @@ -552,7 +552,7 @@ static int ipath_pe_boardname(struct ipath_devdata *dd, char *name, | |||
| 552 | * freeze mode), and enable hardware errors as errors (along with | 552 | * freeze mode), and enable hardware errors as errors (along with |
| 553 | * everything else) in errormask | 553 | * everything else) in errormask |
| 554 | */ | 554 | */ |
| 555 | void ipath_pe_init_hwerrors(struct ipath_devdata *dd) | 555 | static void ipath_pe_init_hwerrors(struct ipath_devdata *dd) |
| 556 | { | 556 | { |
| 557 | ipath_err_t val; | 557 | ipath_err_t val; |
| 558 | u64 extsval; | 558 | u64 extsval; |
| @@ -577,7 +577,7 @@ void ipath_pe_init_hwerrors(struct ipath_devdata *dd) | |||
| 577 | * ipath_pe_bringup_serdes - bring up the serdes | 577 | * ipath_pe_bringup_serdes - bring up the serdes |
| 578 | * @dd: the infinipath device | 578 | * @dd: the infinipath device |
| 579 | */ | 579 | */ |
| 580 | int ipath_pe_bringup_serdes(struct ipath_devdata *dd) | 580 | static int ipath_pe_bringup_serdes(struct ipath_devdata *dd) |
| 581 | { | 581 | { |
| 582 | u64 val, tmp, config1; | 582 | u64 val, tmp, config1; |
| 583 | int ret = 0, change = 0; | 583 | int ret = 0, change = 0; |
| @@ -694,7 +694,7 @@ int ipath_pe_bringup_serdes(struct ipath_devdata *dd) | |||
| 694 | * @dd: the infinipath device | 694 | * @dd: the infinipath device |
| 695 | * Called when driver is being unloaded | 695 | * Called when driver is being unloaded |
| 696 | */ | 696 | */ |
| 697 | void ipath_pe_quiet_serdes(struct ipath_devdata *dd) | 697 | static void ipath_pe_quiet_serdes(struct ipath_devdata *dd) |
| 698 | { | 698 | { |
| 699 | u64 val = ipath_read_kreg64(dd, dd->ipath_kregs->kr_serdesconfig0); | 699 | u64 val = ipath_read_kreg64(dd, dd->ipath_kregs->kr_serdesconfig0); |
| 700 | 700 | ||
diff --git a/drivers/infiniband/hw/ipath/ipath_qp.c b/drivers/infiniband/hw/ipath/ipath_qp.c index 6058d70d7577..18890716db1e 100644 --- a/drivers/infiniband/hw/ipath/ipath_qp.c +++ b/drivers/infiniband/hw/ipath/ipath_qp.c | |||
| @@ -188,8 +188,8 @@ static void free_qpn(struct ipath_qp_table *qpt, u32 qpn) | |||
| 188 | * Allocate the next available QPN and put the QP into the hash table. | 188 | * Allocate the next available QPN and put the QP into the hash table. |
| 189 | * The hash table holds a reference to the QP. | 189 | * The hash table holds a reference to the QP. |
| 190 | */ | 190 | */ |
| 191 | int ipath_alloc_qpn(struct ipath_qp_table *qpt, struct ipath_qp *qp, | 191 | static int ipath_alloc_qpn(struct ipath_qp_table *qpt, struct ipath_qp *qp, |
| 192 | enum ib_qp_type type) | 192 | enum ib_qp_type type) |
| 193 | { | 193 | { |
| 194 | unsigned long flags; | 194 | unsigned long flags; |
| 195 | u32 qpn; | 195 | u32 qpn; |
| @@ -232,7 +232,7 @@ bail: | |||
| 232 | * Remove the QP from the table so it can't be found asynchronously by | 232 | * Remove the QP from the table so it can't be found asynchronously by |
| 233 | * the receive interrupt routine. | 233 | * the receive interrupt routine. |
| 234 | */ | 234 | */ |
| 235 | void ipath_free_qp(struct ipath_qp_table *qpt, struct ipath_qp *qp) | 235 | static void ipath_free_qp(struct ipath_qp_table *qpt, struct ipath_qp *qp) |
| 236 | { | 236 | { |
| 237 | struct ipath_qp *q, **qpp; | 237 | struct ipath_qp *q, **qpp; |
| 238 | unsigned long flags; | 238 | unsigned long flags; |
| @@ -358,6 +358,65 @@ static void ipath_reset_qp(struct ipath_qp *qp) | |||
| 358 | } | 358 | } |
| 359 | 359 | ||
| 360 | /** | 360 | /** |
| 361 | * ipath_error_qp - put a QP into an error state | ||
| 362 | * @qp: the QP to put into an error state | ||
| 363 | * | ||
| 364 | * Flushes both send and receive work queues. | ||
| 365 | * QP r_rq.lock and s_lock should be held. | ||
| 366 | */ | ||
| 367 | |||
| 368 | static void ipath_error_qp(struct ipath_qp *qp) | ||
| 369 | { | ||
| 370 | struct ipath_ibdev *dev = to_idev(qp->ibqp.device); | ||
| 371 | struct ib_wc wc; | ||
| 372 | |||
| 373 | _VERBS_INFO("QP%d/%d in error state\n", | ||
| 374 | qp->ibqp.qp_num, qp->remote_qpn); | ||
| 375 | |||
| 376 | spin_lock(&dev->pending_lock); | ||
| 377 | /* XXX What if its already removed by the timeout code? */ | ||
| 378 | if (qp->timerwait.next != LIST_POISON1) | ||
| 379 | list_del(&qp->timerwait); | ||
| 380 | if (qp->piowait.next != LIST_POISON1) | ||
| 381 | list_del(&qp->piowait); | ||
| 382 | spin_unlock(&dev->pending_lock); | ||
| 383 | |||
| 384 | wc.status = IB_WC_WR_FLUSH_ERR; | ||
| 385 | wc.vendor_err = 0; | ||
| 386 | wc.byte_len = 0; | ||
| 387 | wc.imm_data = 0; | ||
| 388 | wc.qp_num = qp->ibqp.qp_num; | ||
| 389 | wc.src_qp = 0; | ||
| 390 | wc.wc_flags = 0; | ||
| 391 | wc.pkey_index = 0; | ||
| 392 | wc.slid = 0; | ||
| 393 | wc.sl = 0; | ||
| 394 | wc.dlid_path_bits = 0; | ||
| 395 | wc.port_num = 0; | ||
| 396 | |||
| 397 | while (qp->s_last != qp->s_head) { | ||
| 398 | struct ipath_swqe *wqe = get_swqe_ptr(qp, qp->s_last); | ||
| 399 | |||
| 400 | wc.wr_id = wqe->wr.wr_id; | ||
| 401 | wc.opcode = ib_ipath_wc_opcode[wqe->wr.opcode]; | ||
| 402 | if (++qp->s_last >= qp->s_size) | ||
| 403 | qp->s_last = 0; | ||
| 404 | ipath_cq_enter(to_icq(qp->ibqp.send_cq), &wc, 1); | ||
| 405 | } | ||
| 406 | qp->s_cur = qp->s_tail = qp->s_head; | ||
| 407 | qp->s_hdrwords = 0; | ||
| 408 | qp->s_ack_state = IB_OPCODE_RC_ACKNOWLEDGE; | ||
| 409 | |||
| 410 | wc.opcode = IB_WC_RECV; | ||
| 411 | while (qp->r_rq.tail != qp->r_rq.head) { | ||
| 412 | wc.wr_id = get_rwqe_ptr(&qp->r_rq, qp->r_rq.tail)->wr_id; | ||
| 413 | if (++qp->r_rq.tail >= qp->r_rq.size) | ||
| 414 | qp->r_rq.tail = 0; | ||
| 415 | ipath_cq_enter(to_icq(qp->ibqp.recv_cq), &wc, 1); | ||
| 416 | } | ||
| 417 | } | ||
| 418 | |||
| 419 | /** | ||
| 361 | * ipath_modify_qp - modify the attributes of a queue pair | 420 | * ipath_modify_qp - modify the attributes of a queue pair |
| 362 | * @ibqp: the queue pair who's attributes we're modifying | 421 | * @ibqp: the queue pair who's attributes we're modifying |
| 363 | * @attr: the new attributes | 422 | * @attr: the new attributes |
| @@ -821,65 +880,6 @@ void ipath_sqerror_qp(struct ipath_qp *qp, struct ib_wc *wc) | |||
| 821 | } | 880 | } |
| 822 | 881 | ||
| 823 | /** | 882 | /** |
| 824 | * ipath_error_qp - put a QP into an error state | ||
| 825 | * @qp: the QP to put into an error state | ||
| 826 | * | ||
| 827 | * Flushes both send and receive work queues. | ||
| 828 | * QP r_rq.lock and s_lock should be held. | ||
| 829 | */ | ||
| 830 | |||
| 831 | void ipath_error_qp(struct ipath_qp *qp) | ||
| 832 | { | ||
| 833 | struct ipath_ibdev *dev = to_idev(qp->ibqp.device); | ||
| 834 | struct ib_wc wc; | ||
| 835 | |||
| 836 | _VERBS_INFO("QP%d/%d in error state\n", | ||
| 837 | qp->ibqp.qp_num, qp->remote_qpn); | ||
| 838 | |||
| 839 | spin_lock(&dev->pending_lock); | ||
| 840 | /* XXX What if its already removed by the timeout code? */ | ||
| 841 | if (qp->timerwait.next != LIST_POISON1) | ||
| 842 | list_del(&qp->timerwait); | ||
| 843 | if (qp->piowait.next != LIST_POISON1) | ||
| 844 | list_del(&qp->piowait); | ||
| 845 | spin_unlock(&dev->pending_lock); | ||
| 846 | |||
| 847 | wc.status = IB_WC_WR_FLUSH_ERR; | ||
| 848 | wc.vendor_err = 0; | ||
| 849 | wc.byte_len = 0; | ||
| 850 | wc.imm_data = 0; | ||
| 851 | wc.qp_num = qp->ibqp.qp_num; | ||
| 852 | wc.src_qp = 0; | ||
| 853 | wc.wc_flags = 0; | ||
| 854 | wc.pkey_index = 0; | ||
| 855 | wc.slid = 0; | ||
| 856 | wc.sl = 0; | ||
| 857 | wc.dlid_path_bits = 0; | ||
| 858 | wc.port_num = 0; | ||
| 859 | |||
| 860 | while (qp->s_last != qp->s_head) { | ||
| 861 | struct ipath_swqe *wqe = get_swqe_ptr(qp, qp->s_last); | ||
| 862 | |||
| 863 | wc.wr_id = wqe->wr.wr_id; | ||
| 864 | wc.opcode = ib_ipath_wc_opcode[wqe->wr.opcode]; | ||
| 865 | if (++qp->s_last >= qp->s_size) | ||
| 866 | qp->s_last = 0; | ||
| 867 | ipath_cq_enter(to_icq(qp->ibqp.send_cq), &wc, 1); | ||
| 868 | } | ||
| 869 | qp->s_cur = qp->s_tail = qp->s_head; | ||
| 870 | qp->s_hdrwords = 0; | ||
| 871 | qp->s_ack_state = IB_OPCODE_RC_ACKNOWLEDGE; | ||
| 872 | |||
| 873 | wc.opcode = IB_WC_RECV; | ||
| 874 | while (qp->r_rq.tail != qp->r_rq.head) { | ||
| 875 | wc.wr_id = get_rwqe_ptr(&qp->r_rq, qp->r_rq.tail)->wr_id; | ||
| 876 | if (++qp->r_rq.tail >= qp->r_rq.size) | ||
| 877 | qp->r_rq.tail = 0; | ||
| 878 | ipath_cq_enter(to_icq(qp->ibqp.recv_cq), &wc, 1); | ||
| 879 | } | ||
| 880 | } | ||
| 881 | |||
| 882 | /** | ||
| 883 | * ipath_get_credit - flush the send work queue of a QP | 883 | * ipath_get_credit - flush the send work queue of a QP |
| 884 | * @qp: the qp who's send work queue to flush | 884 | * @qp: the qp who's send work queue to flush |
| 885 | * @aeth: the Acknowledge Extended Transport Header | 885 | * @aeth: the Acknowledge Extended Transport Header |
diff --git a/drivers/infiniband/hw/ipath/ipath_ud.c b/drivers/infiniband/hw/ipath/ipath_ud.c index 5ff3de6128b2..01cfb30ee160 100644 --- a/drivers/infiniband/hw/ipath/ipath_ud.c +++ b/drivers/infiniband/hw/ipath/ipath_ud.c | |||
| @@ -46,8 +46,8 @@ | |||
| 46 | * This is called from ipath_post_ud_send() to forward a WQE addressed | 46 | * This is called from ipath_post_ud_send() to forward a WQE addressed |
| 47 | * to the same HCA. | 47 | * to the same HCA. |
| 48 | */ | 48 | */ |
| 49 | void ipath_ud_loopback(struct ipath_qp *sqp, struct ipath_sge_state *ss, | 49 | static void ipath_ud_loopback(struct ipath_qp *sqp, struct ipath_sge_state *ss, |
| 50 | u32 length, struct ib_send_wr *wr, struct ib_wc *wc) | 50 | u32 length, struct ib_send_wr *wr, struct ib_wc *wc) |
| 51 | { | 51 | { |
| 52 | struct ipath_ibdev *dev = to_idev(sqp->ibqp.device); | 52 | struct ipath_ibdev *dev = to_idev(sqp->ibqp.device); |
| 53 | struct ipath_qp *qp; | 53 | struct ipath_qp *qp; |
diff --git a/drivers/infiniband/hw/ipath/ipath_verbs.c b/drivers/infiniband/hw/ipath/ipath_verbs.c index 9f27fd35cdbb..8d2558a01f35 100644 --- a/drivers/infiniband/hw/ipath/ipath_verbs.c +++ b/drivers/infiniband/hw/ipath/ipath_verbs.c | |||
| @@ -41,7 +41,7 @@ | |||
| 41 | /* Not static, because we don't want the compiler removing it */ | 41 | /* Not static, because we don't want the compiler removing it */ |
| 42 | const char ipath_verbs_version[] = "ipath_verbs " IPATH_IDSTR; | 42 | const char ipath_verbs_version[] = "ipath_verbs " IPATH_IDSTR; |
| 43 | 43 | ||
| 44 | unsigned int ib_ipath_qp_table_size = 251; | 44 | static unsigned int ib_ipath_qp_table_size = 251; |
| 45 | module_param_named(qp_table_size, ib_ipath_qp_table_size, uint, S_IRUGO); | 45 | module_param_named(qp_table_size, ib_ipath_qp_table_size, uint, S_IRUGO); |
| 46 | MODULE_PARM_DESC(qp_table_size, "QP table size"); | 46 | MODULE_PARM_DESC(qp_table_size, "QP table size"); |
| 47 | 47 | ||
| @@ -87,7 +87,7 @@ const enum ib_wc_opcode ib_ipath_wc_opcode[] = { | |||
| 87 | /* | 87 | /* |
| 88 | * System image GUID. | 88 | * System image GUID. |
| 89 | */ | 89 | */ |
| 90 | __be64 sys_image_guid; | 90 | static __be64 sys_image_guid; |
| 91 | 91 | ||
| 92 | /** | 92 | /** |
| 93 | * ipath_copy_sge - copy data to SGE memory | 93 | * ipath_copy_sge - copy data to SGE memory |
| @@ -1110,7 +1110,7 @@ static void ipath_unregister_ib_device(void *arg) | |||
| 1110 | ib_dealloc_device(ibdev); | 1110 | ib_dealloc_device(ibdev); |
| 1111 | } | 1111 | } |
| 1112 | 1112 | ||
| 1113 | int __init ipath_verbs_init(void) | 1113 | static int __init ipath_verbs_init(void) |
| 1114 | { | 1114 | { |
| 1115 | return ipath_verbs_register(ipath_register_ib_device, | 1115 | return ipath_verbs_register(ipath_register_ib_device, |
| 1116 | ipath_unregister_ib_device, | 1116 | ipath_unregister_ib_device, |
| @@ -1118,33 +1118,33 @@ int __init ipath_verbs_init(void) | |||
| 1118 | ipath_ib_timer); | 1118 | ipath_ib_timer); |
| 1119 | } | 1119 | } |
| 1120 | 1120 | ||
| 1121 | void __exit ipath_verbs_cleanup(void) | 1121 | static void __exit ipath_verbs_cleanup(void) |
| 1122 | { | 1122 | { |
| 1123 | ipath_verbs_unregister(); | 1123 | ipath_verbs_unregister(); |
| 1124 | } | 1124 | } |
| 1125 | 1125 | ||
| 1126 | static ssize_t show_rev(struct class_device *cdev, char *buf) | 1126 | static ssize_t show_rev(struct class_device *cdev, char *buf) |
| 1127 | { | 1127 | { |
| 1128 | struct ipath_ibdev *dev = | 1128 | struct ipath_ibdev *dev = |
| 1129 | container_of(cdev, struct ipath_ibdev, ibdev.class_dev); | 1129 | container_of(cdev, struct ipath_ibdev, ibdev.class_dev); |
| 1130 | int vendor, boardrev, majrev, minrev; | 1130 | int vendor, boardrev, majrev, minrev; |
| 1131 | 1131 | ||
| 1132 | ipath_layer_query_device(dev->dd, &vendor, &boardrev, | 1132 | ipath_layer_query_device(dev->dd, &vendor, &boardrev, |
| 1133 | &majrev, &minrev); | 1133 | &majrev, &minrev); |
| 1134 | return sprintf(buf, "%d.%d\n", majrev, minrev); | 1134 | return sprintf(buf, "%d.%d\n", majrev, minrev); |
| 1135 | } | 1135 | } |
| 1136 | 1136 | ||
| 1137 | static ssize_t show_hca(struct class_device *cdev, char *buf) | 1137 | static ssize_t show_hca(struct class_device *cdev, char *buf) |
| 1138 | { | 1138 | { |
| 1139 | struct ipath_ibdev *dev = | 1139 | struct ipath_ibdev *dev = |
| 1140 | container_of(cdev, struct ipath_ibdev, ibdev.class_dev); | 1140 | container_of(cdev, struct ipath_ibdev, ibdev.class_dev); |
| 1141 | int ret; | 1141 | int ret; |
| 1142 | 1142 | ||
| 1143 | ret = ipath_layer_get_boardname(dev->dd, buf, 128); | 1143 | ret = ipath_layer_get_boardname(dev->dd, buf, 128); |
| 1144 | if (ret < 0) | 1144 | if (ret < 0) |
| 1145 | goto bail; | 1145 | goto bail; |
| 1146 | strcat(buf, "\n"); | 1146 | strcat(buf, "\n"); |
| 1147 | ret = strlen(buf); | 1147 | ret = strlen(buf); |
| 1148 | 1148 | ||
| 1149 | bail: | 1149 | bail: |
| 1150 | return ret; | 1150 | return ret; |
| @@ -1152,40 +1152,40 @@ bail: | |||
| 1152 | 1152 | ||
| 1153 | static ssize_t show_stats(struct class_device *cdev, char *buf) | 1153 | static ssize_t show_stats(struct class_device *cdev, char *buf) |
| 1154 | { | 1154 | { |
| 1155 | struct ipath_ibdev *dev = | 1155 | struct ipath_ibdev *dev = |
| 1156 | container_of(cdev, struct ipath_ibdev, ibdev.class_dev); | 1156 | container_of(cdev, struct ipath_ibdev, ibdev.class_dev); |
| 1157 | int i; | 1157 | int i; |
| 1158 | int len; | 1158 | int len; |
| 1159 | 1159 | ||
| 1160 | len = sprintf(buf, | 1160 | len = sprintf(buf, |
| 1161 | "RC resends %d\n" | 1161 | "RC resends %d\n" |
| 1162 | "RC QACKs %d\n" | 1162 | "RC QACKs %d\n" |
| 1163 | "RC ACKs %d\n" | 1163 | "RC ACKs %d\n" |
| 1164 | "RC SEQ NAKs %d\n" | 1164 | "RC SEQ NAKs %d\n" |
| 1165 | "RC RDMA seq %d\n" | 1165 | "RC RDMA seq %d\n" |
| 1166 | "RC RNR NAKs %d\n" | 1166 | "RC RNR NAKs %d\n" |
| 1167 | "RC OTH NAKs %d\n" | 1167 | "RC OTH NAKs %d\n" |
| 1168 | "RC timeouts %d\n" | 1168 | "RC timeouts %d\n" |
| 1169 | "RC RDMA dup %d\n" | 1169 | "RC RDMA dup %d\n" |
| 1170 | "piobuf wait %d\n" | 1170 | "piobuf wait %d\n" |
| 1171 | "no piobuf %d\n" | 1171 | "no piobuf %d\n" |
| 1172 | "PKT drops %d\n" | 1172 | "PKT drops %d\n" |
| 1173 | "WQE errs %d\n", | 1173 | "WQE errs %d\n", |
| 1174 | dev->n_rc_resends, dev->n_rc_qacks, dev->n_rc_acks, | 1174 | dev->n_rc_resends, dev->n_rc_qacks, dev->n_rc_acks, |
| 1175 | dev->n_seq_naks, dev->n_rdma_seq, dev->n_rnr_naks, | 1175 | dev->n_seq_naks, dev->n_rdma_seq, dev->n_rnr_naks, |
| 1176 | dev->n_other_naks, dev->n_timeouts, | 1176 | dev->n_other_naks, dev->n_timeouts, |
| 1177 | dev->n_rdma_dup_busy, dev->n_piowait, | 1177 | dev->n_rdma_dup_busy, dev->n_piowait, |
| 1178 | dev->n_no_piobuf, dev->n_pkt_drops, dev->n_wqe_errs); | 1178 | dev->n_no_piobuf, dev->n_pkt_drops, dev->n_wqe_errs); |
| 1179 | for (i = 0; i < ARRAY_SIZE(dev->opstats); i++) { | 1179 | for (i = 0; i < ARRAY_SIZE(dev->opstats); i++) { |
| 1180 | const struct ipath_opcode_stats *si = &dev->opstats[i]; | 1180 | const struct ipath_opcode_stats *si = &dev->opstats[i]; |
| 1181 | 1181 | ||
| 1182 | if (!si->n_packets && !si->n_bytes) | 1182 | if (!si->n_packets && !si->n_bytes) |
| 1183 | continue; | 1183 | continue; |
| 1184 | len += sprintf(buf + len, "%02x %llu/%llu\n", i, | 1184 | len += sprintf(buf + len, "%02x %llu/%llu\n", i, |
| 1185 | (unsigned long long) si->n_packets, | 1185 | (unsigned long long) si->n_packets, |
| 1186 | (unsigned long long) si->n_bytes); | 1186 | (unsigned long long) si->n_bytes); |
| 1187 | } | 1187 | } |
| 1188 | return len; | 1188 | return len; |
| 1189 | } | 1189 | } |
| 1190 | 1190 | ||
| 1191 | static CLASS_DEVICE_ATTR(hw_rev, S_IRUGO, show_rev, NULL); | 1191 | static CLASS_DEVICE_ATTR(hw_rev, S_IRUGO, show_rev, NULL); |
| @@ -1194,25 +1194,25 @@ static CLASS_DEVICE_ATTR(board_id, S_IRUGO, show_hca, NULL); | |||
| 1194 | static CLASS_DEVICE_ATTR(stats, S_IRUGO, show_stats, NULL); | 1194 | static CLASS_DEVICE_ATTR(stats, S_IRUGO, show_stats, NULL); |
| 1195 | 1195 | ||
| 1196 | static struct class_device_attribute *ipath_class_attributes[] = { | 1196 | static struct class_device_attribute *ipath_class_attributes[] = { |
| 1197 | &class_device_attr_hw_rev, | 1197 | &class_device_attr_hw_rev, |
| 1198 | &class_device_attr_hca_type, | 1198 | &class_device_attr_hca_type, |
| 1199 | &class_device_attr_board_id, | 1199 | &class_device_attr_board_id, |
| 1200 | &class_device_attr_stats | 1200 | &class_device_attr_stats |
| 1201 | }; | 1201 | }; |
| 1202 | 1202 | ||
| 1203 | static int ipath_verbs_register_sysfs(struct ib_device *dev) | 1203 | static int ipath_verbs_register_sysfs(struct ib_device *dev) |
| 1204 | { | 1204 | { |
| 1205 | int i; | 1205 | int i; |
| 1206 | int ret; | 1206 | int ret; |
| 1207 | 1207 | ||
| 1208 | for (i = 0; i < ARRAY_SIZE(ipath_class_attributes); ++i) | 1208 | for (i = 0; i < ARRAY_SIZE(ipath_class_attributes); ++i) |
| 1209 | if (class_device_create_file(&dev->class_dev, | 1209 | if (class_device_create_file(&dev->class_dev, |
| 1210 | ipath_class_attributes[i])) { | 1210 | ipath_class_attributes[i])) { |
| 1211 | ret = 1; | 1211 | ret = 1; |
| 1212 | goto bail; | 1212 | goto bail; |
| 1213 | } | 1213 | } |
| 1214 | 1214 | ||
| 1215 | ret = 0; | 1215 | ret = 0; |
| 1216 | 1216 | ||
| 1217 | bail: | 1217 | bail: |
| 1218 | return ret; | 1218 | return ret; |
diff --git a/drivers/infiniband/hw/ipath/ipath_verbs.h b/drivers/infiniband/hw/ipath/ipath_verbs.h index b824632b2a8c..fcafbc7c9e71 100644 --- a/drivers/infiniband/hw/ipath/ipath_verbs.h +++ b/drivers/infiniband/hw/ipath/ipath_verbs.h | |||
| @@ -577,8 +577,6 @@ int ipath_init_qp_table(struct ipath_ibdev *idev, int size); | |||
| 577 | 577 | ||
| 578 | void ipath_sqerror_qp(struct ipath_qp *qp, struct ib_wc *wc); | 578 | void ipath_sqerror_qp(struct ipath_qp *qp, struct ib_wc *wc); |
| 579 | 579 | ||
| 580 | void ipath_error_qp(struct ipath_qp *qp); | ||
| 581 | |||
| 582 | void ipath_get_credit(struct ipath_qp *qp, u32 aeth); | 580 | void ipath_get_credit(struct ipath_qp *qp, u32 aeth); |
| 583 | 581 | ||
| 584 | void ipath_do_rc_send(unsigned long data); | 582 | void ipath_do_rc_send(unsigned long data); |
| @@ -607,9 +605,6 @@ void ipath_rc_rcv(struct ipath_ibdev *dev, struct ipath_ib_header *hdr, | |||
| 607 | 605 | ||
| 608 | void ipath_restart_rc(struct ipath_qp *qp, u32 psn, struct ib_wc *wc); | 606 | void ipath_restart_rc(struct ipath_qp *qp, u32 psn, struct ib_wc *wc); |
| 609 | 607 | ||
| 610 | void ipath_ud_loopback(struct ipath_qp *sqp, struct ipath_sge_state *ss, | ||
| 611 | u32 length, struct ib_send_wr *wr, struct ib_wc *wc); | ||
| 612 | |||
| 613 | int ipath_post_ud_send(struct ipath_qp *qp, struct ib_send_wr *wr); | 608 | int ipath_post_ud_send(struct ipath_qp *qp, struct ib_send_wr *wr); |
| 614 | 609 | ||
| 615 | void ipath_ud_rcv(struct ipath_ibdev *dev, struct ipath_ib_header *hdr, | 610 | void ipath_ud_rcv(struct ipath_ibdev *dev, struct ipath_ib_header *hdr, |
diff --git a/drivers/infiniband/hw/mthca/mthca_mad.c b/drivers/infiniband/hw/mthca/mthca_mad.c index f235c7ea42f0..4730863ece9a 100644 --- a/drivers/infiniband/hw/mthca/mthca_mad.c +++ b/drivers/infiniband/hw/mthca/mthca_mad.c | |||
| @@ -49,7 +49,7 @@ enum { | |||
| 49 | MTHCA_VENDOR_CLASS2 = 0xa | 49 | MTHCA_VENDOR_CLASS2 = 0xa |
| 50 | }; | 50 | }; |
| 51 | 51 | ||
| 52 | int mthca_update_rate(struct mthca_dev *dev, u8 port_num) | 52 | static int mthca_update_rate(struct mthca_dev *dev, u8 port_num) |
| 53 | { | 53 | { |
| 54 | struct ib_port_attr *tprops = NULL; | 54 | struct ib_port_attr *tprops = NULL; |
| 55 | int ret; | 55 | int ret; |
diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c index 5f2b3f6e4c47..5bb55742ada6 100644 --- a/drivers/infiniband/ulp/srp/ib_srp.c +++ b/drivers/infiniband/ulp/srp/ib_srp.c | |||
| @@ -617,6 +617,14 @@ static void srp_unmap_data(struct scsi_cmnd *scmnd, | |||
| 617 | scmnd->sc_data_direction); | 617 | scmnd->sc_data_direction); |
| 618 | } | 618 | } |
| 619 | 619 | ||
| 620 | static void srp_remove_req(struct srp_target_port *target, struct srp_request *req, | ||
| 621 | int index) | ||
| 622 | { | ||
| 623 | list_del(&req->list); | ||
| 624 | req->next = target->req_head; | ||
| 625 | target->req_head = index; | ||
| 626 | } | ||
| 627 | |||
| 620 | static void srp_process_rsp(struct srp_target_port *target, struct srp_rsp *rsp) | 628 | static void srp_process_rsp(struct srp_target_port *target, struct srp_rsp *rsp) |
| 621 | { | 629 | { |
| 622 | struct srp_request *req; | 630 | struct srp_request *req; |
| @@ -664,9 +672,7 @@ static void srp_process_rsp(struct srp_target_port *target, struct srp_rsp *rsp) | |||
| 664 | scmnd->host_scribble = (void *) -1L; | 672 | scmnd->host_scribble = (void *) -1L; |
| 665 | scmnd->scsi_done(scmnd); | 673 | scmnd->scsi_done(scmnd); |
| 666 | 674 | ||
| 667 | list_del(&req->list); | 675 | srp_remove_req(target, req, rsp->tag & ~SRP_TAG_TSK_MGMT); |
| 668 | req->next = target->req_head; | ||
| 669 | target->req_head = rsp->tag & ~SRP_TAG_TSK_MGMT; | ||
| 670 | } else | 676 | } else |
| 671 | req->cmd_done = 1; | 677 | req->cmd_done = 1; |
| 672 | } | 678 | } |
| @@ -1188,12 +1194,10 @@ static int srp_send_tsk_mgmt(struct scsi_cmnd *scmnd, u8 func) | |||
| 1188 | spin_lock_irq(target->scsi_host->host_lock); | 1194 | spin_lock_irq(target->scsi_host->host_lock); |
| 1189 | 1195 | ||
| 1190 | if (req->cmd_done) { | 1196 | if (req->cmd_done) { |
| 1191 | list_del(&req->list); | 1197 | srp_remove_req(target, req, req_index); |
| 1192 | req->next = target->req_head; | ||
| 1193 | target->req_head = req_index; | ||
| 1194 | |||
| 1195 | scmnd->scsi_done(scmnd); | 1198 | scmnd->scsi_done(scmnd); |
| 1196 | } else if (!req->tsk_status) { | 1199 | } else if (!req->tsk_status) { |
| 1200 | srp_remove_req(target, req, req_index); | ||
| 1197 | scmnd->result = DID_ABORT << 16; | 1201 | scmnd->result = DID_ABORT << 16; |
| 1198 | ret = SUCCESS; | 1202 | ret = SUCCESS; |
| 1199 | } | 1203 | } |
