RDMA/nes: Correct fast memory registration implementation
PATCH 4/9 RDMA/nes: Correct fast memory registration implementation
Replace alloc_fmr, unmap_fmr, dealloc_fmr and map_phys_fmr with alloc_fast_reg_mr, alloc_fast_reg_page_list, free_fast_reg_page_list.
Signed-off-by Chien Tung <[email protected]>
--- drivers/infiniband/hw/nes/nes_hw.c | 5 +- drivers/infiniband/hw/nes/nes_hw.h | 27 ++- drivers/infiniband/hw/nes/nes_user.h | 1 + drivers/infiniband/hw/nes/nes_verbs.c | 557 ++++++++++++++++----------------- 4 files changed, 299 insertions(+), 291 deletions(-)
drivers/infiniband/hw/nes/nes_hw.c +3 -2
@@ -424,8 +424,9 @@ struct nes_adapter *nes_init_adapter(struct nes_device *nesdev, u8 hw_rev) { nesadapter->base_pd =1 ; - nesadapter->device_cap_flags = -IB_DEVICE_LOCAL_DMA_LKEY |IB_DEVICE_MEM_WINDOW ; + nesadapter->device_cap_flags =IB_DEVICE_LOCAL_DMA_LKEY | +IB_DEVICE_MEM_WINDOW | +IB_DEVICE_MEM_MGT_EXTENSIONS ; nesadapter->allocated_qps = (unsigned long *)&(((unsigned char *)nesadapter) [(sizeof (struct nes_adapter )+(sizeof (unsigned long )-1 ))&(~(sizeof (unsigned long )-1 ))]);
drivers/infiniband/hw/nes/nes_hw.h +26 -1
@@ -546,11 +546,23 @@ enum nes_iwarp_sq_fmr_wqe_word_idx { NES_IWARP_SQ_FMR_WQE_PBL_LENGTH_IDX = 14, }; +enum nes_iwarp_sq_fmr_opcodes { +NES_IWARP_SQ_FMR_WQE_ZERO_BASED = (1 <<6 ), +NES_IWARP_SQ_FMR_WQE_PAGE_SIZE_4K = (0 <<7 ), +NES_IWARP_SQ_FMR_WQE_PAGE_SIZE_2M = (1 <<7 ), +NES_IWARP_SQ_FMR_WQE_RIGHTS_ENABLE_LOCAL_READ = (1 <<16 ), +NES_IWARP_SQ_FMR_WQE_RIGHTS_ENABLE_LOCAL_WRITE = (1 <<17 ), +NES_IWARP_SQ_FMR_WQE_RIGHTS_ENABLE_REMOTE_READ = (1 <<18 ), +NES_IWARP_SQ_FMR_WQE_RIGHTS_ENABLE_REMOTE_WRITE = (1 <<19 ), +NES_IWARP_SQ_FMR_WQE_RIGHTS_ENABLE_WINDOW_BIND = (1 <<20 ), +}; + +#define NES_IWARP_SQ_FMR_WQE_MR_LENGTH_HIGH_MASK 0xFF; +enum nes_iwarp_sq_locinv_wqe_word_idx {NES_IWARP_SQ_LOCINV_WQE_INV_STAG_IDX =6 , }; -enum nes_iwarp_rq_wqe_word_idx {NES_IWARP_RQ_WQE_TOTAL_PAYLOAD_IDX =1 ,NES_IWARP_RQ_WQE_COMP_CTX_LOW_IDX =2 ,
@@ -1153,6 +1165,19 @@ struct nes_pbl {/* TODO: need to add list for two level tables */ }; +#define NES_4K_PBL_CHUNK_SIZE 4096 + +struct nes_fast_mr_wqe_pbl { +u64 *kva; +dma_addr_t paddr; +}; + +struct nes_ib_fast_reg_page_list { +struct ib_fast_reg_page_list ibfrpl; +struct nes_fast_mr_wqe_pbl nes_wqe_pbl; +u64 pbl; +}; +struct nes_listener {struct work_struct work;struct workqueue_struct *wq;
drivers/infiniband/hw/nes/nes_user.h +1 -0
@@ -86,6 +86,7 @@ enum iwnes_memreg_type {IWNES_MEMREG_TYPE_CQ =0x0002 ,IWNES_MEMREG_TYPE_MW =0x0003 ,IWNES_MEMREG_TYPE_FMR =0x0004 , + IWNES_MEMREG_TYPE_FMEM = 0x0005, }; struct nes_mem_reg_req {
drivers/infiniband/hw/nes/nes_verbs.c +269 -288
633 lines not on this page · raw message
Signature · 6 lines
1.6.4.2 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html