diff options
| -rw-r--r-- | drivers/infiniband/hw/hfi1/chip.c | 8 | ||||
| -rw-r--r-- | drivers/infiniband/hw/hfi1/file_ops.c | 2 | ||||
| -rw-r--r-- | drivers/infiniband/hw/hfi1/init.c | 9 |
3 files changed, 9 insertions, 10 deletions
diff --git a/drivers/infiniband/hw/hfi1/chip.c b/drivers/infiniband/hw/hfi1/chip.c index 68580cb2ae1e..f75080d63142 100644 --- a/drivers/infiniband/hw/hfi1/chip.c +++ b/drivers/infiniband/hw/hfi1/chip.c | |||
| @@ -6841,7 +6841,7 @@ static void rxe_kernel_unfreeze(struct hfi1_devdata *dd) | |||
| 6841 | } | 6841 | } |
| 6842 | rcvmask = HFI1_RCVCTRL_CTXT_ENB; | 6842 | rcvmask = HFI1_RCVCTRL_CTXT_ENB; |
| 6843 | /* HFI1_RCVCTRL_TAILUPD_[ENB|DIS] needs to be set explicitly */ | 6843 | /* HFI1_RCVCTRL_TAILUPD_[ENB|DIS] needs to be set explicitly */ |
| 6844 | rcvmask |= HFI1_CAP_KGET_MASK(rcd->flags, DMA_RTAIL) ? | 6844 | rcvmask |= rcd->rcvhdrtail_kvaddr ? |
| 6845 | HFI1_RCVCTRL_TAILUPD_ENB : HFI1_RCVCTRL_TAILUPD_DIS; | 6845 | HFI1_RCVCTRL_TAILUPD_ENB : HFI1_RCVCTRL_TAILUPD_DIS; |
| 6846 | hfi1_rcvctrl(dd, rcvmask, rcd); | 6846 | hfi1_rcvctrl(dd, rcvmask, rcd); |
| 6847 | hfi1_rcd_put(rcd); | 6847 | hfi1_rcd_put(rcd); |
| @@ -8367,7 +8367,7 @@ static inline int check_packet_present(struct hfi1_ctxtdata *rcd) | |||
| 8367 | u32 tail; | 8367 | u32 tail; |
| 8368 | int present; | 8368 | int present; |
| 8369 | 8369 | ||
| 8370 | if (!HFI1_CAP_IS_KSET(DMA_RTAIL)) | 8370 | if (!rcd->rcvhdrtail_kvaddr) |
| 8371 | present = (rcd->seq_cnt == | 8371 | present = (rcd->seq_cnt == |
| 8372 | rhf_rcv_seq(rhf_to_cpu(get_rhf_addr(rcd)))); | 8372 | rhf_rcv_seq(rhf_to_cpu(get_rhf_addr(rcd)))); |
| 8373 | else /* is RDMA rtail */ | 8373 | else /* is RDMA rtail */ |
| @@ -11843,7 +11843,7 @@ void hfi1_rcvctrl(struct hfi1_devdata *dd, unsigned int op, | |||
| 11843 | /* reset the tail and hdr addresses, and sequence count */ | 11843 | /* reset the tail and hdr addresses, and sequence count */ |
| 11844 | write_kctxt_csr(dd, ctxt, RCV_HDR_ADDR, | 11844 | write_kctxt_csr(dd, ctxt, RCV_HDR_ADDR, |
| 11845 | rcd->rcvhdrq_dma); | 11845 | rcd->rcvhdrq_dma); |
| 11846 | if (HFI1_CAP_KGET_MASK(rcd->flags, DMA_RTAIL)) | 11846 | if (rcd->rcvhdrtail_kvaddr) |
| 11847 | write_kctxt_csr(dd, ctxt, RCV_HDR_TAIL_ADDR, | 11847 | write_kctxt_csr(dd, ctxt, RCV_HDR_TAIL_ADDR, |
| 11848 | rcd->rcvhdrqtailaddr_dma); | 11848 | rcd->rcvhdrqtailaddr_dma); |
| 11849 | rcd->seq_cnt = 1; | 11849 | rcd->seq_cnt = 1; |
| @@ -11923,7 +11923,7 @@ void hfi1_rcvctrl(struct hfi1_devdata *dd, unsigned int op, | |||
| 11923 | rcvctrl |= RCV_CTXT_CTRL_INTR_AVAIL_SMASK; | 11923 | rcvctrl |= RCV_CTXT_CTRL_INTR_AVAIL_SMASK; |
| 11924 | if (op & HFI1_RCVCTRL_INTRAVAIL_DIS) | 11924 | if (op & HFI1_RCVCTRL_INTRAVAIL_DIS) |
| 11925 | rcvctrl &= ~RCV_CTXT_CTRL_INTR_AVAIL_SMASK; | 11925 | rcvctrl &= ~RCV_CTXT_CTRL_INTR_AVAIL_SMASK; |
| 11926 | if (op & HFI1_RCVCTRL_TAILUPD_ENB && rcd->rcvhdrqtailaddr_dma) | 11926 | if ((op & HFI1_RCVCTRL_TAILUPD_ENB) && rcd->rcvhdrtail_kvaddr) |
| 11927 | rcvctrl |= RCV_CTXT_CTRL_TAIL_UPD_SMASK; | 11927 | rcvctrl |= RCV_CTXT_CTRL_TAIL_UPD_SMASK; |
| 11928 | if (op & HFI1_RCVCTRL_TAILUPD_DIS) { | 11928 | if (op & HFI1_RCVCTRL_TAILUPD_DIS) { |
| 11929 | /* See comment on RcvCtxtCtrl.TailUpd above */ | 11929 | /* See comment on RcvCtxtCtrl.TailUpd above */ |
diff --git a/drivers/infiniband/hw/hfi1/file_ops.c b/drivers/infiniband/hw/hfi1/file_ops.c index c9d23c37a371..0fc4aa9455c3 100644 --- a/drivers/infiniband/hw/hfi1/file_ops.c +++ b/drivers/infiniband/hw/hfi1/file_ops.c | |||
| @@ -505,7 +505,7 @@ static int hfi1_file_mmap(struct file *fp, struct vm_area_struct *vma) | |||
| 505 | ret = -EINVAL; | 505 | ret = -EINVAL; |
| 506 | goto done; | 506 | goto done; |
| 507 | } | 507 | } |
| 508 | if (flags & VM_WRITE) { | 508 | if ((flags & VM_WRITE) || !uctxt->rcvhdrtail_kvaddr) { |
| 509 | ret = -EPERM; | 509 | ret = -EPERM; |
| 510 | goto done; | 510 | goto done; |
| 511 | } | 511 | } |
diff --git a/drivers/infiniband/hw/hfi1/init.c b/drivers/infiniband/hw/hfi1/init.c index 3feecf926322..4a478ee0a79b 100644 --- a/drivers/infiniband/hw/hfi1/init.c +++ b/drivers/infiniband/hw/hfi1/init.c | |||
| @@ -1853,7 +1853,6 @@ int hfi1_create_rcvhdrq(struct hfi1_devdata *dd, struct hfi1_ctxtdata *rcd) | |||
| 1853 | u64 reg; | 1853 | u64 reg; |
| 1854 | 1854 | ||
| 1855 | if (!rcd->rcvhdrq) { | 1855 | if (!rcd->rcvhdrq) { |
| 1856 | dma_addr_t dma_hdrqtail; | ||
| 1857 | gfp_t gfp_flags; | 1856 | gfp_t gfp_flags; |
| 1858 | 1857 | ||
| 1859 | /* | 1858 | /* |
| @@ -1878,13 +1877,13 @@ int hfi1_create_rcvhdrq(struct hfi1_devdata *dd, struct hfi1_ctxtdata *rcd) | |||
| 1878 | goto bail; | 1877 | goto bail; |
| 1879 | } | 1878 | } |
| 1880 | 1879 | ||
| 1881 | if (HFI1_CAP_KGET_MASK(rcd->flags, DMA_RTAIL)) { | 1880 | if (HFI1_CAP_KGET_MASK(rcd->flags, DMA_RTAIL) || |
| 1881 | HFI1_CAP_UGET_MASK(rcd->flags, DMA_RTAIL)) { | ||
| 1882 | rcd->rcvhdrtail_kvaddr = dma_zalloc_coherent( | 1882 | rcd->rcvhdrtail_kvaddr = dma_zalloc_coherent( |
| 1883 | &dd->pcidev->dev, PAGE_SIZE, &dma_hdrqtail, | 1883 | &dd->pcidev->dev, PAGE_SIZE, |
| 1884 | gfp_flags); | 1884 | &rcd->rcvhdrqtailaddr_dma, gfp_flags); |
| 1885 | if (!rcd->rcvhdrtail_kvaddr) | 1885 | if (!rcd->rcvhdrtail_kvaddr) |
| 1886 | goto bail_free; | 1886 | goto bail_free; |
| 1887 | rcd->rcvhdrqtailaddr_dma = dma_hdrqtail; | ||
| 1888 | } | 1887 | } |
| 1889 | 1888 | ||
| 1890 | rcd->rcvhdrq_size = amt; | 1889 | rcd->rcvhdrq_size = amt; |
