IB/mlx5: Mmap the HCA's core clock register to user-space
In order to read the HCA's current cycles register, we need to map it to user-space. Add support to map this register via mmap command. Signed-off-by: Matan Barak <matanb@mellanox.com> Reviewed-by: Moshe Lazer <moshel@mellanox.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
parent
b368d7cb8c
commit
d69e3bcf79
@ -1023,6 +1023,34 @@ static int mlx5_ib_mmap(struct ib_ucontext *ibcontext, struct vm_area_struct *vm
|
|||||||
case MLX5_IB_MMAP_GET_CONTIGUOUS_PAGES:
|
case MLX5_IB_MMAP_GET_CONTIGUOUS_PAGES:
|
||||||
return -ENOSYS;
|
return -ENOSYS;
|
||||||
|
|
||||||
|
case MLX5_IB_MMAP_CORE_CLOCK:
|
||||||
|
{
|
||||||
|
phys_addr_t pfn;
|
||||||
|
|
||||||
|
if (vma->vm_end - vma->vm_start != PAGE_SIZE)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
if (vma->vm_flags & (VM_WRITE | VM_EXEC))
|
||||||
|
return -EPERM;
|
||||||
|
|
||||||
|
/* Don't expose to user-space information it shouldn't have */
|
||||||
|
if (PAGE_SIZE > 4096)
|
||||||
|
return -EOPNOTSUPP;
|
||||||
|
|
||||||
|
vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
|
||||||
|
pfn = (dev->mdev->iseg_base +
|
||||||
|
offsetof(struct mlx5_init_seg, internal_timer_h)) >>
|
||||||
|
PAGE_SHIFT;
|
||||||
|
if (io_remap_pfn_range(vma, vma->vm_start, pfn,
|
||||||
|
PAGE_SIZE, vma->vm_page_prot))
|
||||||
|
return -EAGAIN;
|
||||||
|
|
||||||
|
mlx5_ib_dbg(dev, "mapped internal timer at 0x%lx, PA 0x%llx\n",
|
||||||
|
vma->vm_start,
|
||||||
|
(unsigned long long)pfn << PAGE_SHIFT);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
@ -65,7 +65,9 @@ enum {
|
|||||||
|
|
||||||
enum mlx5_ib_mmap_cmd {
|
enum mlx5_ib_mmap_cmd {
|
||||||
MLX5_IB_MMAP_REGULAR_PAGE = 0,
|
MLX5_IB_MMAP_REGULAR_PAGE = 0,
|
||||||
MLX5_IB_MMAP_GET_CONTIGUOUS_PAGES = 1, /* always last */
|
MLX5_IB_MMAP_GET_CONTIGUOUS_PAGES = 1,
|
||||||
|
/* 5 is chosen in order to be compatible with old versions of libmlx5 */
|
||||||
|
MLX5_IB_MMAP_CORE_CLOCK = 5,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
|
Loading…
Reference in New Issue
Block a user