Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e293a26f authored by Chien Tung's avatar Chien Tung Committed by Roland Dreier
Browse files

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: default avatarChien Tung <chien.tin.tung@intel.com>
Signed-off-by: default avatarRoland Dreier <rolandd@cisco.com>
parent 649fe4ae
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -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))]);
+26 −1
Original line number Diff line number Diff line
@@ -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;
+1 −0
Original line number Diff line number Diff line
@@ -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 {
+269 −288

File changed.

Preview size limit exceeded, changes collapsed.