aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/infiniband/hw/hfi1/chip.c8
-rw-r--r--drivers/infiniband/hw/hfi1/file_ops.c2
-rw-r--r--drivers/infiniband/hw/hfi1/init.c9
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;