Commit 53b8b3ff authored by Roland Dreier's avatar Roland Dreier Committed by Linus Torvalds

[PATCH] IB uverbs: add mthca mmap support

Add support for mmap() method to mthca, so that userspace can get access to
doorbell registers.  This allows userspace to get direct access to the HCA for
data path operations.

Each userspace context gets its own copy of the doorbell registers and is only
allowed to use resources that the kernel has given it access to.  In other
words, this is safe.
Signed-off-by: default avatarRoland Dreier <rolandd@cisco.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 5e0b537c
...@@ -35,6 +35,7 @@ ...@@ -35,6 +35,7 @@
*/ */
#include <ib_smi.h> #include <ib_smi.h>
#include <linux/mm.h>
#include "mthca_dev.h" #include "mthca_dev.h"
#include "mthca_cmd.h" #include "mthca_cmd.h"
...@@ -340,6 +341,22 @@ static int mthca_dealloc_ucontext(struct ib_ucontext *context) ...@@ -340,6 +341,22 @@ static int mthca_dealloc_ucontext(struct ib_ucontext *context)
return 0; return 0;
} }
static int mthca_mmap_uar(struct ib_ucontext *context,
struct vm_area_struct *vma)
{
if (vma->vm_end - vma->vm_start != PAGE_SIZE)
return -EINVAL;
vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
if (remap_pfn_range(vma, vma->vm_start,
to_mucontext(context)->uar.pfn,
PAGE_SIZE, vma->vm_page_prot))
return -EAGAIN;
return 0;
}
static struct ib_pd *mthca_alloc_pd(struct ib_device *ibdev, static struct ib_pd *mthca_alloc_pd(struct ib_device *ibdev,
struct ib_ucontext *context, struct ib_ucontext *context,
struct ib_udata *udata) struct ib_udata *udata)
...@@ -766,6 +783,7 @@ int mthca_register_device(struct mthca_dev *dev) ...@@ -766,6 +783,7 @@ int mthca_register_device(struct mthca_dev *dev)
dev->ib_dev.query_gid = mthca_query_gid; dev->ib_dev.query_gid = mthca_query_gid;
dev->ib_dev.alloc_ucontext = mthca_alloc_ucontext; dev->ib_dev.alloc_ucontext = mthca_alloc_ucontext;
dev->ib_dev.dealloc_ucontext = mthca_dealloc_ucontext; dev->ib_dev.dealloc_ucontext = mthca_dealloc_ucontext;
dev->ib_dev.mmap = mthca_mmap_uar;
dev->ib_dev.alloc_pd = mthca_alloc_pd; dev->ib_dev.alloc_pd = mthca_alloc_pd;
dev->ib_dev.dealloc_pd = mthca_dealloc_pd; dev->ib_dev.dealloc_pd = mthca_dealloc_pd;
dev->ib_dev.create_ah = mthca_ah_create; dev->ib_dev.create_ah = mthca_ah_create;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment