Remove udata parameter from ibv_reg_mr functions.  Add a new flag, 
IB_ACCESS_ADDR_IS_MDL, to support passing an MDL as input.

Signed-off-by: Fab Tillier <[email protected]>

diff -dwup3 -x *svn* -r 
c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\hw\mlx4\kernel\bus\ib\mlx4_ib.h 
.\hw\mlx4\kernel\bus\ib\mlx4_ib.h
--- 
c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\hw\mlx4\kernel\bus\ib\mlx4_ib.h   
    Thu Mar 29 00:15:28 2012
+++ .\hw\mlx4\kernel\bus\ib\mlx4_ib.h   Thu Jul 26 15:31:14 2012
@@ -379,8 +379,7 @@ struct ib_mr *mlx4_ib_get_dma_mr(struct 
 int mlx4_ib_umem_write_mtt(struct mlx4_ib_dev *dev, struct mlx4_mtt *mtt,
                           struct ib_umem *umem);
 struct ib_mr *mlx4_ib_reg_user_mr(struct ib_pd *pd, u64 start, u64 length,
-                                 u64 virt_addr, int access_flags,
-                                 struct ib_udata *udata);
+                                 u64 virt_addr, int access_flags);
 struct ib_mr *mlx4_ib_reg_krnl_mr(struct ib_pd *pd, PMDL p_mdl, u64 length,
                                  int access_flags);
 
diff -dwup3 -x *svn* -r 
c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\hw\mlx4\kernel\bus\ib\mr.c 
.\hw\mlx4\kernel\bus\ib\mr.c
--- c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\hw\mlx4\kernel\bus\ib\mr.c    
Thu Mar 29 00:15:28 2012
+++ .\hw\mlx4\kernel\bus\ib\mr.c        Wed May 23 15:14:37 2012
@@ -126,8 +126,7 @@ out:
 }
 
 struct ib_mr *mlx4_ib_reg_user_mr(struct ib_pd *pd, u64 start, u64 length,
-                                 u64 virt_addr, int access_flags,
-                                 struct ib_udata *udata)
+                                 u64 virt_addr, int access_flags)
 {
        struct mlx4_ib_dev *dev = to_mdev(pd->device);
        struct mlx4_ib_mr *mr;
@@ -135,8 +134,6 @@ struct ib_mr *mlx4_ib_reg_user_mr(struct
        int err;
        int n;
 
-       UNUSED_PARAM(udata);
-
        if (mlx4_is_barred(pd->device->dma_device))
                return (ib_mr *)ERR_PTR(-EFAULT);
        
diff -dwup3 -x *svn* -r 
c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\hw\mlx4\kernel\bus\inc\ib_verbs.h 
.\hw\mlx4\kernel\bus\inc\ib_verbs.h
--- 
c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\hw\mlx4\kernel\bus\inc\ib_verbs.h 
    Thu May 31 11:22:18 2012
+++ .\hw\mlx4\kernel\bus\inc\ib_verbs.h Thu Jul 26 15:31:14 2012
@@ -784,6 +784,7 @@ enum ib_access_flags {
        IB_ACCESS_REMOTE_READ   = (1<<2),
        IB_ACCESS_REMOTE_ATOMIC = (1<<3),
        IB_ACCESS_MW_BIND           = (1<<4),
+       IB_ACCESS_ADDR_IS_MDL   = (1<<5),
        IB_ACCESS_NO_SECURE     = (1<<31)
 };
 
@@ -1100,8 +1101,7 @@ struct ib_device {
        struct ib_mr *             (*reg_user_mr)(struct ib_pd *pd,
                                                  u64 start, u64 length,
                                                  u64 virt_addr,
-                                                 int mr_access_flags,
-                                                 struct ib_udata *udata);
+                                                 int mr_access_flags);
        int                        (*query_mr)(struct ib_mr *mr,
                                               struct ib_mr_attr *mr_attr);
        int                        (*dereg_mr)(struct ib_mr *mr);
diff -dwup3 -x *svn* -r 
c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\hw\mlx4\kernel\hca\hverbs.c 
.\hw\mlx4\kernel\hca\hverbs.c
--- c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\hw\mlx4\kernel\hca\hverbs.c   
Thu May 31 11:22:19 2012
+++ .\hw\mlx4\kernel\hca\hverbs.c       Thu Jul 26 15:31:14 2012
@@ -69,11 +69,13 @@ struct ib_mr *ib_reg_phys_mr(struct ib_p
 {
        struct ib_mr *mr;
 
-       if ( pd->device->reg_phys_mr )
+       if ( pd->device->reg_phys_mr ) {
                mr = pd->device->reg_phys_mr(pd, phys_buf_array, num_phys_buf,
                        mr_access_flags, iova_start);
-       else
+    }
+       else {
                mr = ERR_PTR(-ENOSYS);
+    }
 
        if (!IS_ERR(mr)) {
                mr->device  = pd->device;
@@ -92,20 +94,14 @@ struct ib_mr *ib_reg_phys_mr(struct ib_p
  struct ib_mr *ibv_reg_mr(struct ib_pd *pd, 
        u64 start, u64 length,
        u64 virt_addr,
-       int mr_access_flags,
-       ci_umv_buf_t* const p_umv_buf )
+       int mr_access_flags)
 {
        struct ib_mr *ib_mr;
        int err;
        HCA_ENTER(HCA_DBG_MEMORY);
 
-       if (p_umv_buf) {
+       if ((mr_access_flags & IB_ACCESS_ADDR_IS_MDL) == 0) {
-               /* user space call */
-               if (p_umv_buf->command) {
-                       err = -ENOSYS;
-                       goto err_not_supported;
-               }
-               ib_mr = pd->device->reg_user_mr(pd, start, length, virt_addr, 
mr_access_flags, NULL);
+               ib_mr = pd->device->reg_user_mr(pd, start, length, virt_addr, 
mr_access_flags);
        }
        else {
                /* kernel space call */
@@ -128,7 +124,6 @@ struct ib_mr *ib_reg_phys_mr(struct ib_p
        return ib_mr;
 
 err_reg_user_mr:
-err_not_supported:
        HCA_EXIT(HCA_DBG_MEMORY);
        return ERR_PTR(err);
 }
diff -dwup3 -x *svn* -r 
c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\hw\mlx4\kernel\hca\hverbs.h 
.\hw\mlx4\kernel\hca\hverbs.h
--- c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\hw\mlx4\kernel\hca\hverbs.h   
Thu May 31 11:22:19 2012
+++ .\hw\mlx4\kernel\hca\hverbs.h       Wed May 23 18:26:47 2012
@@ -43,8 +43,7 @@
 struct ib_mr *ibv_reg_mr(struct ib_pd *pd, 
        u64 start, u64 length,
        u64 virt_addr,
-       int mr_access_flags,
-       ci_umv_buf_t* const p_umv_buf );
+       int mr_access_flags);
 
 struct ib_mr *ib_alloc_fast_reg_mr(struct ib_pd *pd, int max_page_list_len);
 
diff -dwup3 -x *svn* -r 
c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\hw\mlx4\kernel\hca\mr.c 
.\hw\mlx4\kernel\hca\mr.c
--- c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\hw\mlx4\kernel\hca\mr.c       
Thu May 31 11:22:19 2012
+++ .\hw\mlx4\kernel\hca\mr.c   Thu May 31 12:35:11 2012
@@ -54,7 +54,7 @@ mlnx_register_mr (
        int err;
        struct ib_mr *p_ib_mr;
        struct ib_pd *p_ib_pd = (struct ib_pd *)h_pd;
-       ci_umv_buf_t umv_buf = { 0, 0, 0, 0, 0 };
+       int access_ctrl;
 
        HCA_ENTER(HCA_DBG_MEMORY);
 
@@ -81,10 +81,15 @@ mlnx_register_mr (
                goto err_invalid_access; 
        }
 
+       access_ctrl = to_qp_acl(p_mr_create->access_ctrl);
+       if (um_call == FALSE) {
+               access_ctrl |= IB_ACCESS_ADDR_IS_MDL;
+       }
+
        // register mr 
        p_ib_mr = ibv_reg_mr(p_ib_pd, (ULONG_PTR)p_mr_create->vaddr, 
                p_mr_create->length, (ULONG_PTR)p_mr_create->vaddr, 
-               to_qp_acl(p_mr_create->access_ctrl), um_call ? &umv_buf : NULL 
);
+               access_ctrl);
        if (IS_ERR(p_ib_mr)) {
                err = PTR_ERR(p_ib_mr);
                HCA_PRINT(TRACE_LEVEL_ERROR, HCA_DBG_MEMORY,
@@ -96,7 +101,7 @@ mlnx_register_mr (
        // results
        *p_lkey = p_ib_mr->lkey;
        *p_rkey = cl_hton32( p_ib_mr->rkey );
-       if (ph_mr)      *ph_mr = (ib_mr_handle_t)p_ib_mr;
+       *ph_mr = (ib_mr_handle_t)p_ib_mr;
        status = IB_SUCCESS;
 
 err_reg_mr:

Attachment: ndv2.9.patch
Description: ndv2.9.patch

_______________________________________________
ofw mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ofw

Reply via email to