diff options
| author | Alfred Perlstein <alfred@FreeBSD.org> | 2013-10-01 15:42:38 +0000 |
|---|---|---|
| committer | Alfred Perlstein <alfred@FreeBSD.org> | 2013-10-01 15:42:38 +0000 |
| commit | e18c176d9d716d26803af005ff09e1889d35beba (patch) | |
| tree | 96f32f4a1c254cf5ffaf7a2f0d3f9738f963db15 /sys/ofed | |
| parent | 92c6196caadbcb648cd757d5f4b4e0b6426097f9 (diff) | |
Notes
Diffstat (limited to 'sys/ofed')
| -rw-r--r-- | sys/ofed/drivers/infiniband/core/umem.c | 43 | ||||
| -rw-r--r-- | sys/ofed/drivers/infiniband/hw/mlx4/main.c | 4 | ||||
| -rw-r--r-- | sys/ofed/include/rdma/ib_umem.h | 28 |
3 files changed, 73 insertions, 2 deletions
diff --git a/sys/ofed/drivers/infiniband/core/umem.c b/sys/ofed/drivers/infiniband/core/umem.c index 1d12367e8254..9d7640e74ebd 100644 --- a/sys/ofed/drivers/infiniband/core/umem.c +++ b/sys/ofed/drivers/infiniband/core/umem.c @@ -530,3 +530,46 @@ int ib_umem_page_count(struct ib_umem *umem) return n; } EXPORT_SYMBOL(ib_umem_page_count); + +/**********************************************/ +/* + * Stub functions for contiguous pages - + * We currently do not support this feature + */ +/**********************************************/ + +/** + * ib_cmem_release_contiguous_pages - release memory allocated by + * ib_cmem_alloc_contiguous_pages. + * @cmem: cmem struct to release + */ +void ib_cmem_release_contiguous_pages(struct ib_cmem *cmem) +{ +} +EXPORT_SYMBOL(ib_cmem_release_contiguous_pages); + +/** + * * ib_cmem_alloc_contiguous_pages - allocate contiguous pages + * * @context: userspace context to allocate memory for + * * @total_size: total required size for that allocation. + * * @page_size_order: order of one contiguous page. + * */ +struct ib_cmem *ib_cmem_alloc_contiguous_pages(struct ib_ucontext *context, + unsigned long total_size, + unsigned long page_size_order) +{ + return NULL; +} +EXPORT_SYMBOL(ib_cmem_alloc_contiguous_pages); + +/** + * * ib_cmem_map_contiguous_pages_to_vma - map contiguous pages into VMA + * * @ib_cmem: cmem structure returned by ib_cmem_alloc_contiguous_pages + * * @vma: VMA to inject pages into. + * */ +int ib_cmem_map_contiguous_pages_to_vma(struct ib_cmem *ib_cmem, + struct vm_area_struct *vma) +{ + return 0; +} +EXPORT_SYMBOL(ib_cmem_map_contiguous_pages_to_vma); diff --git a/sys/ofed/drivers/infiniband/hw/mlx4/main.c b/sys/ofed/drivers/infiniband/hw/mlx4/main.c index 72a1806cda7f..8713c41eb550 100644 --- a/sys/ofed/drivers/infiniband/hw/mlx4/main.c +++ b/sys/ofed/drivers/infiniband/hw/mlx4/main.c @@ -726,6 +726,7 @@ full_search: addr = ALIGN(vma->vm_end, 1 << page_size_order); } } +#endif static int mlx4_ib_mmap(struct ib_ucontext *context, struct vm_area_struct *vma) { @@ -780,7 +781,6 @@ static int mlx4_ib_mmap(struct ib_ucontext *context, struct vm_area_struct *vma) return 0; } -#endif static struct ib_pd *mlx4_ib_alloc_pd(struct ib_device *ibdev, struct ib_ucontext *context, @@ -1984,8 +1984,8 @@ static void *mlx4_ib_add(struct mlx4_dev *dev) ibdev->ib_dev.modify_port = mlx4_ib_modify_port; ibdev->ib_dev.alloc_ucontext = mlx4_ib_alloc_ucontext; ibdev->ib_dev.dealloc_ucontext = mlx4_ib_dealloc_ucontext; -#ifdef __linux__ ibdev->ib_dev.mmap = mlx4_ib_mmap; +#ifdef __linux__ ibdev->ib_dev.get_unmapped_area = mlx4_ib_get_unmapped_area; #endif ibdev->ib_dev.alloc_pd = mlx4_ib_alloc_pd; diff --git a/sys/ofed/include/rdma/ib_umem.h b/sys/ofed/include/rdma/ib_umem.h index afa09f9337f4..8cdaa5abbb67 100644 --- a/sys/ofed/include/rdma/ib_umem.h +++ b/sys/ofed/include/rdma/ib_umem.h @@ -57,6 +57,24 @@ struct ib_umem { unsigned long diff; }; +struct ib_cmem { + + struct ib_ucontext *context; + size_t length; + /* Link list of contiguous blocks being part of that cmem */ + struct list_head ib_cmem_block; + + /* Order of cmem block, 2^ block_order will equal number + of physical pages per block + */ + unsigned long block_order; + /* Refernce counter for that memory area + - When value became 0 pages will be returned to the kernel. + */ + struct kref refcount; +}; + + struct ib_umem_chunk { struct list_head list; int nents; @@ -70,4 +88,14 @@ struct ib_umem *ib_umem_get(struct ib_ucontext *context, unsigned long addr, void ib_umem_release(struct ib_umem *umem); int ib_umem_page_count(struct ib_umem *umem); +int ib_cmem_map_contiguous_pages_to_vma(struct ib_cmem *ib_cmem, + struct vm_area_struct *vma); +struct ib_cmem *ib_cmem_alloc_contiguous_pages(struct ib_ucontext *context, + unsigned long total_size, + unsigned long page_size_order); +void ib_cmem_release_contiguous_pages(struct ib_cmem *cmem); +int ib_umem_map_to_vma(struct ib_umem *umem, + struct vm_area_struct *vma); + + #endif /* IB_UMEM_H */ |
