diff options
Diffstat (limited to 'drivers/infiniband/hw/mlx5/main.c')
-rw-r--r-- | drivers/infiniband/hw/mlx5/main.c | 12 |
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 | ||