diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-01-25 17:41:24 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-01-25 17:41:24 -0500 |
commit | 99f1c97dbdb30e958edfd1ced0ae43df62504e07 (patch) | |
tree | cc61393c912b3c1b095a9c74322f8e1364ab9b3a /drivers/infiniband/hw/ipath/ipath_ruc.c | |
parent | b31fde6db2b76a9f7f59bf016652b46cff43f8da (diff) | |
parent | 8176d297c73a06e6076c9c31f6404047567f6324 (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband: (81 commits)
RDMA/cxgb3: Fix the T3A workaround checks
IB/ipath: Remove unnecessary cast
IPoIB: Constify seq_operations function pointer tables
RDMA/cxgb3: Mark QP as privileged based on user capabilities
RDMA/cxgb3: Fix page shift calculation in build_phys_page_list()
RDMA/cxgb3: Flush the receive queue when closing
IB/ipath: Trivial simplification of ipath_make_ud_req()
IB/mthca: Update latest "native Arbel" firmware revision
IPoIB: Remove redundant check of netif_queue_stopped() in xmit handler
IB/ipath: Add mappings from HW register to PortInfo port physical state
IB/ipath: Changes to support PIO bandwidth check on IBA7220
IB/ipath: Minor cleanup of unused fields and chip-specific errors
IB/ipath: New sysfs entries to control 7220 features
IB/ipath: Add new chip-specific functions to older chips, consistent init
IB/ipath: Remove unused MDIO interface code
IB/ehca: Prevent RDMA-related connection failures on some eHCA2 hardware
IB/ehca: Add "port connection autodetect mode"
IB/ehca: Define array to store SMI/GSI QPs
IB/ehca: Remove CQ-QP-link before destroying QP in error path of create_qp()
IB/iser: Add change_queue_depth method
...
Diffstat (limited to 'drivers/infiniband/hw/ipath/ipath_ruc.c')
-rw-r--r-- | drivers/infiniband/hw/ipath/ipath_ruc.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/drivers/infiniband/hw/ipath/ipath_ruc.c b/drivers/infiniband/hw/ipath/ipath_ruc.c index 54c61a972de2..a59bdbd0ed87 100644 --- a/drivers/infiniband/hw/ipath/ipath_ruc.c +++ b/drivers/infiniband/hw/ipath/ipath_ruc.c | |||
@@ -98,11 +98,15 @@ void ipath_insert_rnr_queue(struct ipath_qp *qp) | |||
98 | while (qp->s_rnr_timeout >= nqp->s_rnr_timeout) { | 98 | while (qp->s_rnr_timeout >= nqp->s_rnr_timeout) { |
99 | qp->s_rnr_timeout -= nqp->s_rnr_timeout; | 99 | qp->s_rnr_timeout -= nqp->s_rnr_timeout; |
100 | l = l->next; | 100 | l = l->next; |
101 | if (l->next == &dev->rnrwait) | 101 | if (l->next == &dev->rnrwait) { |
102 | nqp = NULL; | ||
102 | break; | 103 | break; |
104 | } | ||
103 | nqp = list_entry(l->next, struct ipath_qp, | 105 | nqp = list_entry(l->next, struct ipath_qp, |
104 | timerwait); | 106 | timerwait); |
105 | } | 107 | } |
108 | if (nqp) | ||
109 | nqp->s_rnr_timeout -= qp->s_rnr_timeout; | ||
106 | list_add(&qp->timerwait, l); | 110 | list_add(&qp->timerwait, l); |
107 | } | 111 | } |
108 | spin_unlock_irqrestore(&dev->pending_lock, flags); | 112 | spin_unlock_irqrestore(&dev->pending_lock, flags); |
@@ -479,9 +483,14 @@ done: | |||
479 | 483 | ||
480 | static void want_buffer(struct ipath_devdata *dd) | 484 | static void want_buffer(struct ipath_devdata *dd) |
481 | { | 485 | { |
482 | set_bit(IPATH_S_PIOINTBUFAVAIL, &dd->ipath_sendctrl); | 486 | unsigned long flags; |
487 | |||
488 | spin_lock_irqsave(&dd->ipath_sendctrl_lock, flags); | ||
489 | dd->ipath_sendctrl |= INFINIPATH_S_PIOINTBUFAVAIL; | ||
483 | ipath_write_kreg(dd, dd->ipath_kregs->kr_sendctrl, | 490 | ipath_write_kreg(dd, dd->ipath_kregs->kr_sendctrl, |
484 | dd->ipath_sendctrl); | 491 | dd->ipath_sendctrl); |
492 | ipath_read_kreg64(dd, dd->ipath_kregs->kr_scratch); | ||
493 | spin_unlock_irqrestore(&dd->ipath_sendctrl_lock, flags); | ||
485 | } | 494 | } |
486 | 495 | ||
487 | /** | 496 | /** |