svn commit: r255972 - in head/sys/ofed: drivers/infiniband/core drivers/infiniband/hw/mlx4 include/rdma

Alfred Perlstein alfred at FreeBSD.org
Tue Oct 1 15:42:40 UTC 2013


Author: alfred
Date: Tue Oct  1 15:42:38 2013
New Revision: 255972
URL: http://svnweb.freebsd.org/changeset/base/255972

Log:
  Enable ib_dev.mmap function
  
  Removed the ifdef linux from this function.
  Added stub function for contiguous pages to avoid compilation
  errors.
  
  Submitted by:	Orit Moskovich (oritm mellanox.com)
  Approved by:	re

Modified:
  head/sys/ofed/drivers/infiniband/core/umem.c
  head/sys/ofed/drivers/infiniband/hw/mlx4/main.c
  head/sys/ofed/include/rdma/ib_umem.h

Modified: head/sys/ofed/drivers/infiniband/core/umem.c
==============================================================================
--- head/sys/ofed/drivers/infiniband/core/umem.c	Tue Oct  1 15:40:27 2013	(r255971)
+++ head/sys/ofed/drivers/infiniband/core/umem.c	Tue Oct  1 15:42:38 2013	(r255972)
@@ -530,3 +530,46 @@ int ib_umem_page_count(struct ib_umem *u
 	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);

Modified: head/sys/ofed/drivers/infiniband/hw/mlx4/main.c
==============================================================================
--- head/sys/ofed/drivers/infiniband/hw/mlx4/main.c	Tue Oct  1 15:40:27 2013	(r255971)
+++ head/sys/ofed/drivers/infiniband/hw/mlx4/main.c	Tue Oct  1 15:42:38 2013	(r255972)
@@ -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_uconte
 
 	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
 	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;

Modified: head/sys/ofed/include/rdma/ib_umem.h
==============================================================================
--- head/sys/ofed/include/rdma/ib_umem.h	Tue Oct  1 15:40:27 2013	(r255971)
+++ head/sys/ofed/include/rdma/ib_umem.h	Tue Oct  1 15:42:38 2013	(r255972)
@@ -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_uc
 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 */


More information about the svn-src-head mailing list