RDMA/ocrdma: Dont use PD 0 for userpace CQ DB
Create_CQ verb doesn't provide a PD pointer. So, until now we are creating all (both userspace and kernel) CQ DB regions from PD0. This will result in mmapping PD0 to applications. A rogue userspace application can mess things up. Also more serious issues is even the be2net NIC uses PD0. This patch addresses this problem by: 1) Create a PD page for every userspace application when the alloc_ucontext is called. This will be destroyed in dealloc_ucontext. 2) All CQs for that context will use the PD allocated in ucontext. 3) The first create_PD call from application will result in returning the PD address from its ucontext (no new PD will be created). 4) For subsecquent create_pd calls from application, we create new PDs for the application. Signed-off-by: Naresh Gottumukkala <bgottumukkala@emulex.com> Signed-off-by: Roland Dreier <roland@purestorage.com>
This commit is contained in:

committed by
Roland Dreier

orang tua
2b51a9b9eb
melakukan
cffce99051
@@ -547,6 +547,7 @@ enum {
|
||||
|
||||
enum {
|
||||
OCRDMA_CREATE_CQ_VER2 = 2,
|
||||
OCRDMA_CREATE_CQ_VER3 = 3,
|
||||
|
||||
OCRDMA_CREATE_CQ_PAGE_CNT_MASK = 0xFFFF,
|
||||
OCRDMA_CREATE_CQ_PAGE_SIZE_SHIFT = 16,
|
||||
@@ -580,7 +581,8 @@ struct ocrdma_create_cq_cmd {
|
||||
u32 pgsz_pgcnt;
|
||||
u32 ev_cnt_flags;
|
||||
u32 eqn;
|
||||
u32 cqe_count;
|
||||
u16 cqe_count;
|
||||
u16 pd_id;
|
||||
u32 rsvd6;
|
||||
struct ocrdma_pa pa[OCRDMA_CREATE_CQ_MAX_PAGES];
|
||||
};
|
||||
|
Reference in New Issue
Block a user