Lines Matching refs:conn
30 struct smc_connection *conn = cdcpend->conn; in smc_cdc_tx_handler() local
34 if (!conn) in smc_cdc_tx_handler()
38 smc = container_of(conn, struct smc_sock, conn); in smc_cdc_tx_handler()
41 diff = smc_curs_diff(cdcpend->conn->sndbuf_desc->len, in smc_cdc_tx_handler()
42 &cdcpend->conn->tx_curs_fin, in smc_cdc_tx_handler()
46 atomic_add(diff, &cdcpend->conn->sndbuf_space); in smc_cdc_tx_handler()
49 smc_curs_copy(&conn->tx_curs_fin, &cdcpend->cursor, conn); in smc_cdc_tx_handler()
55 int smc_cdc_get_free_slot(struct smc_connection *conn, in smc_cdc_get_free_slot() argument
60 struct smc_link *link = &conn->lgr->lnk[SMC_SINGLE_LINK]; in smc_cdc_get_free_slot()
66 if (!conn->alert_token_local) in smc_cdc_get_free_slot()
72 static inline void smc_cdc_add_pending_send(struct smc_connection *conn, in smc_cdc_add_pending_send() argument
84 pend->conn = conn; in smc_cdc_add_pending_send()
85 pend->cursor = conn->tx_curs_sent; in smc_cdc_add_pending_send()
86 pend->p_cursor = conn->local_tx_ctrl.prod; in smc_cdc_add_pending_send()
87 pend->ctrl_seq = conn->tx_cdc_seq; in smc_cdc_add_pending_send()
90 int smc_cdc_msg_send(struct smc_connection *conn, in smc_cdc_msg_send() argument
98 link = &conn->lgr->lnk[SMC_SINGLE_LINK]; in smc_cdc_msg_send()
100 smc_cdc_add_pending_send(conn, pend); in smc_cdc_msg_send()
102 conn->tx_cdc_seq++; in smc_cdc_msg_send()
103 conn->local_tx_ctrl.seqno = conn->tx_cdc_seq; in smc_cdc_msg_send()
104 smc_host_msg_to_cdc((struct smc_cdc_msg *)wr_buf, conn, &cfed); in smc_cdc_msg_send()
107 smc_curs_copy(&conn->rx_curs_confirmed, &cfed, conn); in smc_cdc_msg_send()
108 conn->local_rx_ctrl.prod_flags.cons_curs_upd_req = 0; in smc_cdc_msg_send()
114 static int smcr_cdc_get_slot_and_msg_send(struct smc_connection *conn) in smcr_cdc_get_slot_and_msg_send() argument
120 rc = smc_cdc_get_free_slot(conn, &wr_buf, NULL, &pend); in smcr_cdc_get_slot_and_msg_send()
124 spin_lock_bh(&conn->send_lock); in smcr_cdc_get_slot_and_msg_send()
125 rc = smc_cdc_msg_send(conn, wr_buf, pend); in smcr_cdc_get_slot_and_msg_send()
126 spin_unlock_bh(&conn->send_lock); in smcr_cdc_get_slot_and_msg_send()
130 int smc_cdc_get_slot_and_msg_send(struct smc_connection *conn) in smc_cdc_get_slot_and_msg_send() argument
134 if (conn->lgr->is_smcd) { in smc_cdc_get_slot_and_msg_send()
135 spin_lock_bh(&conn->send_lock); in smc_cdc_get_slot_and_msg_send()
136 rc = smcd_cdc_msg_send(conn); in smc_cdc_get_slot_and_msg_send()
137 spin_unlock_bh(&conn->send_lock); in smc_cdc_get_slot_and_msg_send()
139 rc = smcr_cdc_get_slot_and_msg_send(conn); in smc_cdc_get_slot_and_msg_send()
148 struct smc_connection *conn = (struct smc_connection *)data; in smc_cdc_tx_filter() local
152 return cdc_pend->conn == conn; in smc_cdc_tx_filter()
160 cdc_pend->conn = NULL; in smc_cdc_tx_dismisser()
163 void smc_cdc_tx_dismiss_slots(struct smc_connection *conn) in smc_cdc_tx_dismiss_slots() argument
165 struct smc_link *link = &conn->lgr->lnk[SMC_SINGLE_LINK]; in smc_cdc_tx_dismiss_slots()
169 (unsigned long)conn); in smc_cdc_tx_dismiss_slots()
176 int smcd_cdc_msg_send(struct smc_connection *conn) in smcd_cdc_msg_send() argument
178 struct smc_sock *smc = container_of(conn, struct smc_sock, conn); in smcd_cdc_msg_send()
185 curs.acurs.counter = atomic64_read(&conn->local_tx_ctrl.prod.acurs); in smcd_cdc_msg_send()
188 curs.acurs.counter = atomic64_read(&conn->local_tx_ctrl.cons.acurs); in smcd_cdc_msg_send()
191 cdc.cons.prod_flags = conn->local_tx_ctrl.prod_flags; in smcd_cdc_msg_send()
192 cdc.cons.conn_state_flags = conn->local_tx_ctrl.conn_state_flags; in smcd_cdc_msg_send()
193 rc = smcd_tx_ism_write(conn, &cdc, sizeof(cdc), 0, 1); in smcd_cdc_msg_send()
196 smc_curs_copy(&conn->rx_curs_confirmed, &curs, conn); in smcd_cdc_msg_send()
197 conn->local_rx_ctrl.prod_flags.cons_curs_upd_req = 0; in smcd_cdc_msg_send()
199 diff = smc_curs_diff(conn->sndbuf_desc->len, &conn->tx_curs_fin, in smcd_cdc_msg_send()
200 &conn->tx_curs_sent); in smcd_cdc_msg_send()
203 atomic_add(diff, &conn->sndbuf_space); in smcd_cdc_msg_send()
206 smc_curs_copy(&conn->tx_curs_fin, &conn->tx_curs_sent, conn); in smcd_cdc_msg_send()
222 struct smc_connection *conn = &smc->conn; in smc_cdc_handle_urg_data_arrival() local
226 smc_curs_copy(&conn->urg_curs, &conn->local_rx_ctrl.prod, conn); in smc_cdc_handle_urg_data_arrival()
227 conn->urg_state = SMC_URG_VALID; in smc_cdc_handle_urg_data_arrival()
231 base = (char *)conn->rmb_desc->cpu_addr + conn->rx_off; in smc_cdc_handle_urg_data_arrival()
232 if (conn->urg_curs.count) in smc_cdc_handle_urg_data_arrival()
233 conn->urg_rx_byte = *(base + conn->urg_curs.count - 1); in smc_cdc_handle_urg_data_arrival()
235 conn->urg_rx_byte = *(base + conn->rmb_desc->len - 1); in smc_cdc_handle_urg_data_arrival()
243 struct smc_connection *conn = &smc->conn; in smc_cdc_msg_recv_action() local
246 smc_curs_copy(&prod_old, &conn->local_rx_ctrl.prod, conn); in smc_cdc_msg_recv_action()
247 smc_curs_copy(&cons_old, &conn->local_rx_ctrl.cons, conn); in smc_cdc_msg_recv_action()
248 smc_cdc_msg_to_host(&conn->local_rx_ctrl, cdc, conn); in smc_cdc_msg_recv_action()
250 diff_cons = smc_curs_diff(conn->peer_rmbe_size, &cons_old, in smc_cdc_msg_recv_action()
251 &conn->local_rx_ctrl.cons); in smc_cdc_msg_recv_action()
257 atomic_add(diff_cons, &conn->peer_rmbe_space); in smc_cdc_msg_recv_action()
262 diff_prod = smc_curs_diff(conn->rmb_desc->len, &prod_old, in smc_cdc_msg_recv_action()
263 &conn->local_rx_ctrl.prod); in smc_cdc_msg_recv_action()
265 if (conn->local_rx_ctrl.prod_flags.urg_data_present) in smc_cdc_msg_recv_action()
269 atomic_add(diff_prod, &conn->bytes_to_rcv); in smc_cdc_msg_recv_action()
274 if (conn->local_rx_ctrl.prod_flags.write_blocked) in smc_cdc_msg_recv_action()
276 if (conn->local_rx_ctrl.prod_flags.urg_data_pending) in smc_cdc_msg_recv_action()
277 conn->urg_state = SMC_URG_NOTYET; in smc_cdc_msg_recv_action()
281 if ((diff_cons && smc_tx_prepared_sends(conn)) || in smc_cdc_msg_recv_action()
282 conn->local_rx_ctrl.prod_flags.cons_curs_upd_req || in smc_cdc_msg_recv_action()
283 conn->local_rx_ctrl.prod_flags.urg_data_pending) in smc_cdc_msg_recv_action()
284 smc_tx_sndbuf_nonempty(conn); in smc_cdc_msg_recv_action()
286 if (diff_cons && conn->urg_tx_pend && in smc_cdc_msg_recv_action()
287 atomic_read(&conn->peer_rmbe_space) == conn->peer_rmbe_size) { in smc_cdc_msg_recv_action()
289 conn->urg_tx_pend = false; in smc_cdc_msg_recv_action()
293 if (conn->local_rx_ctrl.conn_state_flags.peer_conn_abort) { in smc_cdc_msg_recv_action()
295 conn->local_tx_ctrl.conn_state_flags.peer_conn_abort = 1; in smc_cdc_msg_recv_action()
297 if (smc_cdc_rxed_any_close_or_senddone(conn)) { in smc_cdc_msg_recv_action()
303 if (!schedule_work(&conn->close_work)) in smc_cdc_msg_recv_action()
326 struct smc_connection *conn = (struct smc_connection *)data; in smcd_cdc_rx_tsklet() local
331 if (!conn) in smcd_cdc_rx_tsklet()
334 data_cdc = (struct smcd_cdc_msg *)conn->rmb_desc->cpu_addr; in smcd_cdc_rx_tsklet()
335 smcd_curs_copy(&cdc.prod, &data_cdc->prod, conn); in smcd_cdc_rx_tsklet()
336 smcd_curs_copy(&cdc.cons, &data_cdc->cons, conn); in smcd_cdc_rx_tsklet()
337 smc = container_of(conn, struct smc_sock, conn); in smcd_cdc_rx_tsklet()
344 void smcd_cdc_rx_init(struct smc_connection *conn) in smcd_cdc_rx_init() argument
346 tasklet_init(&conn->rx_tsklet, smcd_cdc_rx_tsklet, (unsigned long)conn); in smcd_cdc_rx_init()
355 struct smc_connection *conn; in smc_cdc_rx_handler() local
367 conn = smc_lgr_find_conn(ntohl(cdc->token), lgr); in smc_cdc_rx_handler()
369 if (!conn) in smc_cdc_rx_handler()
371 smc = container_of(conn, struct smc_sock, conn); in smc_cdc_rx_handler()
375 conn->local_rx_ctrl.seqno)) in smc_cdc_rx_handler()