diff options
Diffstat (limited to 'include/linux/mlx5')
| -rw-r--r-- | include/linux/mlx5/driver.h | 18 | 
1 files changed, 15 insertions, 3 deletions
| diff --git a/include/linux/mlx5/driver.h b/include/linux/mlx5/driver.h index 80cbb7fdce4a..83957920653a 100644 --- a/include/linux/mlx5/driver.h +++ b/include/linux/mlx5/driver.h @@ -358,6 +358,7 @@ struct mlx5_frag_buf_ctrl {  	struct mlx5_frag_buf	frag_buf;  	u32			sz_m1;  	u32			frag_sz_m1; +	u32			strides_offset;  	u8			log_sz;  	u8			log_stride;  	u8			log_frag_strides; @@ -983,14 +984,22 @@ static inline u32 mlx5_base_mkey(const u32 key)  	return key & 0xffffff00u;  } -static inline void mlx5_fill_fbc(u8 log_stride, u8 log_sz, -				 struct mlx5_frag_buf_ctrl *fbc) +static inline void mlx5_fill_fbc_offset(u8 log_stride, u8 log_sz, +					u32 strides_offset, +					struct mlx5_frag_buf_ctrl *fbc)  {  	fbc->log_stride = log_stride;  	fbc->log_sz     = log_sz;  	fbc->sz_m1	= (1 << fbc->log_sz) - 1;  	fbc->log_frag_strides = PAGE_SHIFT - fbc->log_stride;  	fbc->frag_sz_m1	= (1 << fbc->log_frag_strides) - 1; +	fbc->strides_offset = strides_offset; +} + +static inline void mlx5_fill_fbc(u8 log_stride, u8 log_sz, +				 struct mlx5_frag_buf_ctrl *fbc) +{ +	mlx5_fill_fbc_offset(log_stride, log_sz, 0, fbc);  }  static inline void mlx5_core_init_cq_frag_buf(struct mlx5_frag_buf_ctrl *fbc, @@ -1004,7 +1013,10 @@ static inline void mlx5_core_init_cq_frag_buf(struct mlx5_frag_buf_ctrl *fbc,  static inline void *mlx5_frag_buf_get_wqe(struct mlx5_frag_buf_ctrl *fbc,  					  u32 ix)  { -	unsigned int frag = (ix >> fbc->log_frag_strides); +	unsigned int frag; + +	ix  += fbc->strides_offset; +	frag = ix >> fbc->log_frag_strides;  	return fbc->frag_buf.frags[frag].buf +  		((fbc->frag_sz_m1 & ix) << fbc->log_stride); |