Pass ib_ucontext to ib_umem_map so that KPROCESSOR_MODE can be used.

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\cq.c 
.\hw\mlx4\kernel\bus\ib\cq.c
--- c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\hw\mlx4\kernel\bus\ib\cq.c    
Thu Mar 29 00:15:28 2012
+++ .\hw\mlx4\kernel\bus\ib\cq.c        Sat Jun 23 14:15:09 2012
@@ -230,7 +230,7 @@ struct ib_cq *mlx4_ib_create_cq_internal
                // add mapping to user's arm_sn variable
                // we have no way pass the completion event to provider library
                // so we'll increment user's arm_sn in kernel
-               err = ib_umem_map( ucmd.arm_sn_addr, sizeof(int), 
+               err = ib_umem_map( context, ucmd.arm_sn_addr, sizeof(int),
                        IB_ACCESS_LOCAL_WRITE, &cq->mcq.mdl, 
&cq->mcq.p_u_arm_sn );
                if (err) {
                        MLX4_PRINT(TRACE_LEVEL_ERROR, MLX4_DBG_DRV,
diff -dwup3 -x *svn* -r 
c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\hw\mlx4\kernel\inc\l2w_umem.h 
.\hw\mlx4\kernel\inc\l2w_umem.h
--- c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\hw\mlx4\kernel\inc\l2w_umem.h 
Thu Mar 29 00:15:29 2012
+++ .\hw\mlx4\kernel\inc\l2w_umem.h     Wed May 23 15:14:37 2012
@@ -22,6 +22,7 @@ struct ib_umem {
 dma_addr_t ib_umem_get_dma(struct ib_umem *p_ib_umem);
 
 int ib_umem_map(
+       IN              struct ib_ucontext *context,
        IN              u64 va,
        IN              u64 size,
        IN              ib_access_t acc,
diff -dwup3 -x *svn* -r 
c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\hw\mlx4\kernel\l2w\l2w_umem.c 
.\hw\mlx4\kernel\l2w\l2w_umem.c
--- c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\hw\mlx4\kernel\l2w\l2w_umem.c 
Thu Mar 29 00:15:27 2012
+++ .\hw\mlx4\kernel\l2w\l2w_umem.c     Thu May 24 13:05:42 2012
@@ -124,6 +124,7 @@ dma_addr_t ib_umem_get_dma(struct ib_ume
 
 // Returns: 0 on success, -ENOMEM or -EACCESS or -EFAULT on error
 int ib_umem_map(
+       IN              struct ib_ucontext *context,
        IN              u64 va,
        IN              u64 size,
        IN              ib_access_t acc,
@@ -134,6 +135,13 @@ int ib_umem_map(
        int rc = 0;
        LOCK_OPERATION lock_op = (acc & IB_AC_LOCAL_WRITE) ? IoModifyAccess : 
IoReadAccess;
 
+       if( context->x.mode == KernelMode )
+       {
+               *kva = (volatile u32 *)(ULONG_PTR)va;
+               *mdl = NULL;
+               return 0;
+       }
+
        p_mdl = IoAllocateMdl( (PVOID)(ULONG_PTR)va, (ULONG)size, 
FALSE,FALSE,NULL);
        if (p_mdl == NULL) {
                rc = -ENOMEM;
@@ -174,7 +182,7 @@ void ib_umem_unmap(
        IN PMDL p_mdl,
        IN volatile u32 *kva)
 {
-       if (kva) {
+       if (p_mdl) {
                MmUnmapLockedPages( (PVOID)kva, p_mdl );
                MmUnlockPages(p_mdl);
                IoFreeMdl(p_mdl);

Attachment: ndv2.11.patch
Description: ndv2.11.patch

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

Reply via email to