diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-05-14 16:32:43 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-05-14 16:32:43 -0400 |
| commit | dd286422fefdcff784e8d336deeb88ce817e14db (patch) | |
| tree | 3d3c13ebab12e7e5768c062a31b3a6c7aa72f004 | |
| parent | 4717df58304b60ac26cdb157d57f39ae1e3a336f (diff) | |
| parent | a58e58fafdff4c25949221e46132e86f709d0b79 (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:
RDMA/cxgb3: Wrap the software send queue pointer as needed on flush
IB/ipath: Change ipath_devdata.ipath_sdma_status to be unsigned long
IB/ipath: Make ipath_portdata work with struct pid * not pid_t
IB/ipath: Fix RDMA read response sequence checking
IB/ipath: Fix many locking issues when switching to error state
IB/ipath: Fix RC and UC error handling
RDMA/nes: Fix up nes_lro_max_aggr module parameter
| -rw-r--r-- | drivers/infiniband/hw/cxgb3/cxio_hal.c | 4 | ||||
| -rw-r--r-- | drivers/infiniband/hw/ipath/ipath_driver.c | 20 | ||||
| -rw-r--r-- | drivers/infiniband/hw/ipath/ipath_file_ops.c | 19 | ||||
| -rw-r--r-- | drivers/infiniband/hw/ipath/ipath_kernel.h | 10 | ||||
| -rw-r--r-- | drivers/infiniband/hw/ipath/ipath_qp.c | 237 | ||||
| -rw-r--r-- | drivers/infiniband/hw/ipath/ipath_rc.c | 285 | ||||
| -rw-r--r-- | drivers/infiniband/hw/ipath/ipath_ruc.c | 329 | ||||
| -rw-r--r-- | drivers/infiniband/hw/ipath/ipath_uc.c | 57 | ||||
| -rw-r--r-- | drivers/infiniband/hw/ipath/ipath_ud.c | 66 | ||||
| -rw-r--r-- | drivers/infiniband/hw/ipath/ipath_user_sdma.h | 2 | ||||
| -rw-r--r-- | drivers/infiniband/hw/ipath/ipath_verbs.c | 176 | ||||
| -rw-r--r-- | drivers/infiniband/hw/ipath/ipath_verbs.h | 64 | ||||
| -rw-r--r-- | drivers/infiniband/hw/nes/nes.c | 4 | ||||
| -rw-r--r-- | drivers/infiniband/hw/nes/nes.h | 1 | ||||
| -rw-r--r-- | drivers/infiniband/hw/nes/nes_hw.c | 6 |
15 files changed, 725 insertions, 555 deletions
diff --git a/drivers/infiniband/hw/cxgb3/cxio_hal.c b/drivers/infiniband/hw/cxgb3/cxio_hal.c index ebf9d3043f80..3f441fc57c17 100644 --- a/drivers/infiniband/hw/cxgb3/cxio_hal.c +++ b/drivers/infiniband/hw/cxgb3/cxio_hal.c | |||
| @@ -405,11 +405,11 @@ int cxio_flush_sq(struct t3_wq *wq, struct t3_cq *cq, int count) | |||
| 405 | struct t3_swsq *sqp = wq->sq + Q_PTR2IDX(wq->sq_rptr, wq->sq_size_log2); | 405 | struct t3_swsq *sqp = wq->sq + Q_PTR2IDX(wq->sq_rptr, wq->sq_size_log2); |
| 406 | 406 | ||
| 407 | ptr = wq->sq_rptr + count; | 407 | ptr = wq->sq_rptr + count; |
| 408 | sqp += count; | 408 | sqp = wq->sq + Q_PTR2IDX(ptr, wq->sq_size_log2); |
| 409 | while (ptr != wq->sq_wptr) { | 409 | while (ptr != wq->sq_wptr) { |
| 410 | insert_sq_cqe(wq, cq, sqp); | 410 | insert_sq_cqe(wq, cq, sqp); |
| 411 | sqp++; | ||
| 412 | ptr++; | 411 | ptr++; |
| 412 | sqp = wq->sq + Q_PTR2IDX(ptr, wq->sq_size_log2); | ||
| 413 | flushed++; | 413 | flushed++; |
| 414 | } | 414 | } |
| 415 | return flushed; | 415 | return flushed; |
diff --git a/drivers/infiniband/hw/ipath/ipath_driver.c b/drivers/infiniband/hw/ipath/ipath_driver.c index ce7b7c34360e..daad09a45910 100644 --- a/drivers/infiniband/hw/ipath/ipath_driver.c +++ b/drivers/infiniband/hw/ipath/ipath_driver.c | |||
| @@ -1894,7 +1894,7 @@ void ipath_cancel_sends(struct ipath_devdata *dd, int restore_sendctrl) | |||
| 1894 | */ | 1894 | */ |
| 1895 | if (dd->ipath_flags & IPATH_HAS_SEND_DMA) { | 1895 | if (dd->ipath_flags & IPATH_HAS_SEND_DMA) { |
| 1896 | int skip_cancel; | 1896 | int skip_cancel; |
| 1897 | u64 *statp = &dd->ipath_sdma_status; | 1897 | unsigned long *statp = &dd->ipath_sdma_status; |
| 1898 | 1898 | ||
| 1899 | spin_lock_irqsave(&dd->ipath_sdma_lock, flags); | 1899 | spin_lock_irqsave(&dd->ipath_sdma_lock, flags); |
| 1900 | skip_cancel = | 1900 | skip_cancel = |
| @@ -2616,7 +2616,7 @@ int ipath_reset_device(int unit) | |||
| 2616 | ipath_dbg("unit %u port %d is in use " | 2616 | ipath_dbg("unit %u port %d is in use " |
| 2617 | "(PID %u cmd %s), can't reset\n", | 2617 | "(PID %u cmd %s), can't reset\n", |
| 2618 | unit, i, | 2618 | unit, i, |
| 2619 | dd->ipath_pd[i]->port_pid, | 2619 | pid_nr(dd->ipath_pd[i]->port_pid), |
| 2620 | dd->ipath_pd[i]->port_comm); | 2620 | dd->ipath_pd[i]->port_comm); |
| 2621 | ret = -EBUSY; | 2621 | ret = -EBUSY; |
| 2622 | goto bail; | 2622 | goto bail; |
| @@ -2654,19 +2654,21 @@ bail: | |||
| 2654 | static int ipath_signal_procs(struct ipath_devdata *dd, int sig) | 2654 | static int ipath_signal_procs(struct ipath_devdata *dd, int sig) |
| 2655 | { | 2655 | { |
| 2656 | int i, sub, any = 0; | 2656 | int i, sub, any = 0; |
| 2657 | pid_t pid; | 2657 | struct pid *pid; |
| 2658 | 2658 | ||
| 2659 | if (!dd->ipath_pd) | 2659 | if (!dd->ipath_pd) |
| 2660 | return 0; | 2660 | return 0; |
| 2661 | for (i = 1; i < dd->ipath_cfgports; i++) { | 2661 | for (i = 1; i < dd->ipath_cfgports; i++) { |
| 2662 | if (!dd->ipath_pd[i] || !dd->ipath_pd[i]->port_cnt || | 2662 | if (!dd->ipath_pd[i] || !dd->ipath_pd[i]->port_cnt) |
| 2663 | !dd->ipath_pd[i]->port_pid) | ||
| 2664 | continue; | 2663 | continue; |
| 2665 | pid = dd->ipath_pd[i]->port_pid; | 2664 | pid = dd->ipath_pd[i]->port_pid; |
| 2665 | if (!pid) | ||
| 2666 | continue; | ||
| 2667 | |||
| 2666 | dev_info(&dd->pcidev->dev, "context %d in use " | 2668 | dev_info(&dd->pcidev->dev, "context %d in use " |
| 2667 | "(PID %u), sending signal %d\n", | 2669 | "(PID %u), sending signal %d\n", |
| 2668 | i, pid, sig); | 2670 | i, pid_nr(pid), sig); |
| 2669 | kill_proc(pid, sig, 1); | 2671 | kill_pid(pid, sig, 1); |
| 2670 | any++; | 2672 | any++; |
| 2671 | for (sub = 0; sub < INFINIPATH_MAX_SUBPORT; sub++) { | 2673 | for (sub = 0; sub < INFINIPATH_MAX_SUBPORT; sub++) { |
| 2672 | pid = dd->ipath_pd[i]->port_subpid[sub]; | 2674 | pid = dd->ipath_pd[i]->port_subpid[sub]; |
| @@ -2674,8 +2676,8 @@ static int ipath_signal_procs(struct ipath_devdata *dd, int sig) | |||
| 2674 | continue; | 2676 | continue; |
| 2675 | dev_info(&dd->pcidev->dev, "sub-context " | 2677 | dev_info(&dd->pcidev->dev, "sub-context " |
| 2676 | "%d:%d in use (PID %u), sending " | 2678 | "%d:%d in use (PID %u), sending " |
| 2677 | "signal %d\n", i, sub, pid, sig); | 2679 | "signal %d\n", i, sub, pid_nr(pid), sig); |
| 2678 | kill_proc(pid, sig, 1); | 2680 | kill_pid(pid, sig, 1); |
| 2679 | any++; | 2681 | any++; |
| 2680 | } | 2682 | } |
| 2681 | } | 2683 | } |
diff --git a/drivers/infiniband/hw/ipath/ipath_file_ops.c b/drivers/infiniband/hw/ipath/ipath_file_ops.c index 3295177c937e..b472b15637f0 100644 --- a/drivers/infiniband/hw/ipath/ipath_file_ops.c +++ b/drivers/infiniband/hw/ipath/ipath_file_ops.c | |||
| @@ -555,7 +555,7 @@ static int ipath_tid_free(struct ipath_portdata *pd, unsigned subport, | |||
| 555 | p = dd->ipath_pageshadow[porttid + tid]; | 555 | p = dd->ipath_pageshadow[porttid + tid]; |
| 556 | dd->ipath_pageshadow[porttid + tid] = NULL; | 556 | dd->ipath_pageshadow[porttid + tid] = NULL; |
| 557 | ipath_cdbg(VERBOSE, "PID %u freeing TID %u\n", | 557 | ipath_cdbg(VERBOSE, "PID %u freeing TID %u\n", |
| 558 | pd->port_pid, tid); | 558 | pid_nr(pd->port_pid), tid); |
| 559 | dd->ipath_f_put_tid(dd, &tidbase[tid], | 559 | dd->ipath_f_put_tid(dd, &tidbase[tid], |
| 560 | RCVHQ_RCV_TYPE_EXPECTED, | 560 | RCVHQ_RCV_TYPE_EXPECTED, |
| 561 | dd->ipath_tidinvalid); | 561 | dd->ipath_tidinvalid); |
| @@ -1609,7 +1609,7 @@ static int try_alloc_port(struct ipath_devdata *dd, int port, | |||
| 1609 | port); | 1609 | port); |
| 1610 | pd->port_cnt = 1; | 1610 | pd->port_cnt = 1; |
| 1611 | port_fp(fp) = pd; | 1611 | port_fp(fp) = pd; |
| 1612 | pd->port_pid = current->pid; | 1612 | pd->port_pid = get_pid(task_pid(current)); |
| 1613 | strncpy(pd->port_comm, current->comm, sizeof(pd->port_comm)); | 1613 | strncpy(pd->port_comm, current->comm, sizeof(pd->port_comm)); |
| 1614 | ipath_stats.sps_ports++; | 1614 | ipath_stats.sps_ports++; |
| 1615 | ret = 0; | 1615 | ret = 0; |
| @@ -1793,14 +1793,15 @@ static int find_shared_port(struct file *fp, | |||
| 1793 | } | 1793 | } |
| 1794 | port_fp(fp) = pd; | 1794 | port_fp(fp) = pd; |
| 1795 | subport_fp(fp) = pd->port_cnt++; | 1795 | subport_fp(fp) = pd->port_cnt++; |
| 1796 | pd->port_subpid[subport_fp(fp)] = current->pid; | 1796 | pd->port_subpid[subport_fp(fp)] = |
| 1797 | get_pid(task_pid(current)); | ||
| 1797 | tidcursor_fp(fp) = 0; | 1798 | tidcursor_fp(fp) = 0; |
| 1798 | pd->active_slaves |= 1 << subport_fp(fp); | 1799 | pd->active_slaves |= 1 << subport_fp(fp); |
| 1799 | ipath_cdbg(PROC, | 1800 | ipath_cdbg(PROC, |
| 1800 | "%s[%u] %u sharing %s[%u] unit:port %u:%u\n", | 1801 | "%s[%u] %u sharing %s[%u] unit:port %u:%u\n", |
| 1801 | current->comm, current->pid, | 1802 | current->comm, current->pid, |
| 1802 | subport_fp(fp), | 1803 | subport_fp(fp), |
| 1803 | pd->port_comm, pd->port_pid, | 1804 | pd->port_comm, pid_nr(pd->port_pid), |
| 1804 | dd->ipath_unit, pd->port_port); | 1805 | dd->ipath_unit, pd->port_port); |
| 1805 | ret = 1; | 1806 | ret = 1; |
| 1806 | goto done; | 1807 | goto done; |
| @@ -2066,7 +2067,8 @@ static int ipath_close(struct inode *in, struct file *fp) | |||
| 2066 | * the slave(s) don't wait for receive data forever. | 2067 | * the slave(s) don't wait for receive data forever. |
| 2067 | */ | 2068 | */ |
| 2068 | pd->active_slaves &= ~(1 << fd->subport); | 2069 | pd->active_slaves &= ~(1 << fd->subport); |
| 2069 | pd->port_subpid[fd->subport] = 0; | 2070 | put_pid(pd->port_subpid[fd->subport]); |
| 207 | |||
