diff options
Diffstat (limited to 'drivers/infiniband/ulp/isert/ib_isert.h')
| -rw-r--r-- | drivers/infiniband/ulp/isert/ib_isert.h | 63 | 
1 files changed, 46 insertions, 17 deletions
diff --git a/drivers/infiniband/ulp/isert/ib_isert.h b/drivers/infiniband/ulp/isert/ib_isert.h index 631f2090f0b..04f51f7bf61 100644 --- a/drivers/infiniband/ulp/isert/ib_isert.h +++ b/drivers/infiniband/ulp/isert/ib_isert.h @@ -6,6 +6,7 @@  #define ISERT_RDMA_LISTEN_BACKLOG	10  #define ISCSI_ISER_SG_TABLESIZE		256 +#define ISER_FASTREG_LI_WRID		0xffffffffffffffffULL  enum isert_desc_type {  	ISCSI_TX_CONTROL, @@ -43,14 +44,41 @@ struct iser_tx_desc {  	struct ib_sge	tx_sg[2];  	int		num_sge;  	struct isert_cmd *isert_cmd; +	struct llist_node *comp_llnode_batch; +	struct llist_node comp_llnode; +	bool		llnode_active;  	struct ib_send_wr send_wr;  } __packed; +enum isert_indicator { +	ISERT_PROTECTED		= 1 << 0, +	ISERT_DATA_KEY_VALID	= 1 << 1, +	ISERT_PROT_KEY_VALID	= 1 << 2, +	ISERT_SIG_KEY_VALID	= 1 << 3, +}; + +struct pi_context { +	struct ib_mr		       *prot_mr; +	struct ib_fast_reg_page_list   *prot_frpl; +	struct ib_mr		       *sig_mr; +}; +  struct fast_reg_descriptor { -	struct list_head	list; -	struct ib_mr		*data_mr; -	struct ib_fast_reg_page_list	*data_frpl; -	bool			valid; +	struct list_head		list; +	struct ib_mr		       *data_mr; +	struct ib_fast_reg_page_list   *data_frpl; +	u8				ind; +	struct pi_context	       *pi_ctx; +}; + +struct isert_data_buf { +	struct scatterlist     *sg; +	int			nents; +	u32			sg_off; +	u32			len; /* cur_rdma_length */ +	u32			offset; +	unsigned int		dma_nents; +	enum dma_data_direction dma_dir;  };  struct isert_rdma_wr { @@ -59,12 +87,11 @@ struct isert_rdma_wr {  	enum iser_ib_op_code	iser_ib_op;  	struct ib_sge		*ib_sge;  	struct ib_sge		s_ib_sge; -	int			num_sge; -	struct scatterlist	*sge;  	int			send_wr_num;  	struct ib_send_wr	*send_wr;  	struct ib_send_wr	s_send_wr; -	u32			cur_rdma_length; +	struct isert_data_buf	data; +	struct isert_data_buf	prot;  	struct fast_reg_descriptor *fr_desc;  }; @@ -89,7 +116,6 @@ struct isert_device;  struct isert_conn {  	enum iser_conn_state	state; -	bool			logout_posted;  	int			post_recv_buf_count;  	atomic_t		post_send_buf_count;  	u32			responder_resources; @@ -114,13 +140,17 @@ struct isert_conn {  	struct isert_device	*conn_device;  	struct work_struct	conn_logout_work;  	struct mutex		conn_mutex; -	wait_queue_head_t	conn_wait; -	wait_queue_head_t	conn_wait_comp_err; +	struct completion	conn_wait; +	struct completion	conn_wait_comp_err;  	struct kref		conn_kref; -	struct list_head	conn_frwr_pool; -	int			conn_frwr_pool_size; -	/* lock to protect frwr_pool */ +	struct list_head	conn_fr_pool; +	int			conn_fr_pool_size; +	/* lock to protect fastreg pool */  	spinlock_t		conn_lock; +#define ISERT_COMP_BATCH_COUNT	8 +	int			conn_comp_batch; +	struct llist_head	conn_comp_llist; +	bool                    disconnect;  };  #define ISERT_MAX_CQ 64 @@ -133,13 +163,12 @@ struct isert_cq_desc {  };  struct isert_device { -	int			use_frwr; +	int			use_fastreg; +	bool			pi_capable;  	int			cqs_used;  	int			refcount;  	int			cq_active_qps[ISERT_MAX_CQ];  	struct ib_device	*ib_device; -	struct ib_pd		*dev_pd; -	struct ib_mr		*dev_mr;  	struct ib_cq		*dev_rx_cq[ISERT_MAX_CQ];  	struct ib_cq		*dev_tx_cq[ISERT_MAX_CQ];  	struct isert_cq_desc	*cq_desc; @@ -153,7 +182,7 @@ struct isert_device {  };  struct isert_np { -	wait_queue_head_t	np_accept_wq; +	struct semaphore	np_sem;  	struct rdma_cm_id	*np_cm_id;  	struct mutex		np_accept_mutex;  	struct list_head	np_accept_list;  | 
