Lines Matching refs:xfer_state
36 struct xfer_state { struct
52 struct xfer_state *xfer_state; argument
59 static void xfer_complete(struct xfer_state *xfer_state) in xfer_complete() argument
61 const struct mlx5_fpga_transaction *xfer = xfer_state->xfer; in xfer_complete()
62 u8 status = xfer_state->status; in xfer_complete()
64 kfree(xfer_state); in xfer_complete()
69 static int exec_more(struct xfer_state *xfer_state) in exec_more() argument
77 ddr_base = mlx5_fpga_ddr_base_get(xfer_state->xfer->conn->fdev); in exec_more()
78 page_size = (xfer_state->xfer->addr + xfer_state->pos < ddr_base) ? in exec_more()
82 if (xfer_state->status != IB_WC_SUCCESS) { in exec_more()
87 left = xfer_state->xfer->size - xfer_state->pos; in exec_more()
97 pos_addr = xfer_state->xfer->addr + xfer_state->pos; in exec_more()
98 pos_data = xfer_state->xfer->data + xfer_state->pos; in exec_more()
107 xfer_trans->xfer_state = xfer_state; in exec_more()
110 xfer_trans->transaction.conn = xfer_state->xfer->conn; in exec_more()
112 xfer_trans->transaction.direction = xfer_state->xfer->direction; in exec_more()
115 xfer_state->start_count++; in exec_more()
116 xfer_state->inflight_count++; in exec_more()
117 …mlx5_fpga_dbg(xfer_state->xfer->conn->fdev, "Starting %zu bytes at %p done; %u started %u inflight… in exec_more()
120 xfer_state->start_count, in exec_more()
121 xfer_state->inflight_count, in exec_more()
122 xfer_state->done_count, in exec_more()
123 xfer_state->error_count); in exec_more()
126 xfer_state->start_count--; in exec_more()
127 xfer_state->inflight_count--; in exec_more()
132 …mlx5_fpga_warn(xfer_state->xfer->conn->fdev, "Transfer failed to start transaction: %d. %u started… in exec_more()
133 ret, xfer_state->start_count, in exec_more()
134 xfer_state->done_count, in exec_more()
135 xfer_state->error_count); in exec_more()
136 xfer_state->status = IB_WC_GENERAL_ERR; in exec_more()
141 xfer_state->pos += cur_size; in exec_more()
142 if (xfer_state->inflight_count >= xfer_state->budget) in exec_more()
153 struct xfer_state *xfer_state; in trans_complete() local
160 xfer_state = xfer_trans->xfer_state; in trans_complete()
164 xfer_state->start_count, xfer_state->inflight_count, in trans_complete()
165 xfer_state->done_count, xfer_state->error_count); in trans_complete()
168 spin_lock_irqsave(&xfer_state->lock, flags); in trans_complete()
171 xfer_state->error_count++; in trans_complete()
173 xfer_state->start_count, in trans_complete()
174 xfer_state->inflight_count, in trans_complete()
175 xfer_state->done_count, xfer_state->error_count); in trans_complete()
176 if (xfer_state->status == IB_WC_SUCCESS) in trans_complete()
177 xfer_state->status = status; in trans_complete()
179 xfer_state->done_count++; in trans_complete()
181 ret = exec_more(xfer_state); in trans_complete()
183 xfer_state->inflight_count--; in trans_complete()
184 if (!xfer_state->inflight_count) in trans_complete()
187 spin_unlock_irqrestore(&xfer_state->lock, flags); in trans_complete()
190 xfer_complete(xfer_state); in trans_complete()
197 struct xfer_state *xfer_state; in mlx5_fpga_xfer_exec() local
226 xfer_state = kzalloc(sizeof(*xfer_state), GFP_KERNEL); in mlx5_fpga_xfer_exec()
227 xfer_state->xfer = xfer; in mlx5_fpga_xfer_exec()
228 xfer_state->status = IB_WC_SUCCESS; in mlx5_fpga_xfer_exec()
229 xfer_state->budget = 7; in mlx5_fpga_xfer_exec()
230 spin_lock_init(&xfer_state->lock); in mlx5_fpga_xfer_exec()
231 spin_lock_irqsave(&xfer_state->lock, flags); in mlx5_fpga_xfer_exec()
233 ret = exec_more(xfer_state); in mlx5_fpga_xfer_exec()
234 if (ret && (xfer_state->start_count == 0)) in mlx5_fpga_xfer_exec()
237 spin_unlock_irqrestore(&xfer_state->lock, flags); in mlx5_fpga_xfer_exec()
240 xfer_complete(xfer_state); in mlx5_fpga_xfer_exec()