aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/hw/mlx5/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/infiniband/hw/mlx5/main.c')
-rw-r--r--drivers/infiniband/hw/mlx5/main.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c
index 0845e95d2d11..347e3cac254e 100644
--- a/drivers/infiniband/hw/mlx5/main.c
+++ b/drivers/infiniband/hw/mlx5/main.c
@@ -1119,6 +1119,8 @@ static int mlx5_ib_query_device(struct ib_device *ibdev,
1119 if (MLX5_CAP_GEN(mdev, qp_packet_based)) 1119 if (MLX5_CAP_GEN(mdev, qp_packet_based))
1120 resp.flags |= 1120 resp.flags |=
1121 MLX5_IB_QUERY_DEV_RESP_PACKET_BASED_CREDIT_MODE; 1121 MLX5_IB_QUERY_DEV_RESP_PACKET_BASED_CREDIT_MODE;
1122
1123 resp.flags |= MLX5_IB_QUERY_DEV_RESP_FLAGS_SCAT2CQE_DCT;
1122 } 1124 }
1123 1125
1124 if (field_avail(typeof(resp), sw_parsing_caps, 1126 if (field_avail(typeof(resp), sw_parsing_caps,
@@ -2066,6 +2068,7 @@ static int mlx5_ib_mmap_clock_info_page(struct mlx5_ib_dev *dev,
2066 2068
2067 if (vma->vm_flags & VM_WRITE) 2069 if (vma->vm_flags & VM_WRITE)
2068 return -EPERM; 2070 return -EPERM;
2071 vma->vm_flags &= ~VM_MAYWRITE;
2069 2072
2070 if (!dev->mdev->clock_info_page) 2073 if (!dev->mdev->clock_info_page)
2071 return -EOPNOTSUPP; 2074 return -EOPNOTSUPP;
@@ -2231,19 +2234,18 @@ static int mlx5_ib_mmap(struct ib_ucontext *ibcontext, struct vm_area_struct *vm
2231 2234
2232 if (vma->vm_flags & VM_WRITE) 2235 if (vma->vm_flags & VM_WRITE)
2233 return -EPERM; 2236 return -EPERM;
2237 vma->vm_flags &= ~VM_MAYWRITE;
2234 2238
2235 /* Don't expose to user-space information it shouldn't have */ 2239 /* Don't expose to user-space information it shouldn't have */
2236 if (PAGE_SIZE > 4096) 2240 if (PAGE_SIZE > 4096)
2237 return -EOPNOTSUPP; 2241 return -EOPNOTSUPP;
2238 2242
2239 vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
2240 pfn = (dev->mdev->iseg_base + 2243 pfn = (dev->mdev->iseg_base +
2241 offsetof(struct mlx5_init_seg, internal_timer_h)) >> 2244 offsetof(struct mlx5_init_seg, internal_timer_h)) >>
2242 PAGE_SHIFT; 2245 PAGE_SHIFT;
2243 if (io_remap_pfn_range(vma, vma->vm_start, pfn, 2246 return rdma_user_mmap_io(&context->ibucontext, vma, pfn,
2244 PAGE_SIZE, vma->vm_page_prot)) 2247 PAGE_SIZE,
2245 return -EAGAIN; 2248 pgprot_noncached(vma->vm_page_prot));
2246 break;
2247 case MLX5_IB_MMAP_CLOCK_INFO: 2249 case MLX5_IB_MMAP_CLOCK_INFO:
2248 return mlx5_ib_mmap_clock_info_page(dev, vma, context); 2250 return mlx5_ib_mmap_clock_info_page(dev, vma, context);
2249 2251