Lines Matching full:smc
3 * Shared Memory Communications over RDMA (SMC-R) and RoCE
15 #include "smc.h"
33 struct smc_sock *smc; in smc_cdc_tx_handler() local
37 smc = container_of(conn, struct smc_sock, conn); in smc_cdc_tx_handler()
38 bh_lock_sock(&smc->sk); in smc_cdc_tx_handler()
59 if (sock_owned_by_user(&smc->sk)) in smc_cdc_tx_handler()
69 smc_tx_sndbuf_nonfull(smc); in smc_cdc_tx_handler()
70 bh_unlock_sock(&smc->sk); in smc_cdc_tx_handler()
233 /* Send a SMC-D CDC header.
239 struct smc_sock *smc = container_of(conn, struct smc_sock, conn); in smcd_cdc_msg_send() local
277 smc_tx_sndbuf_nonfull(smc); in smcd_cdc_msg_send()
288 static void smc_cdc_handle_urg_data_arrival(struct smc_sock *smc, in smc_cdc_handle_urg_data_arrival() argument
291 struct smc_connection *conn = &smc->conn; in smc_cdc_handle_urg_data_arrival()
297 if (!sock_flag(&smc->sk, SOCK_URGINLINE)) in smc_cdc_handle_urg_data_arrival()
305 sk_send_sigurg(&smc->sk); in smc_cdc_handle_urg_data_arrival()
308 static void smc_cdc_msg_validate(struct smc_sock *smc, struct smc_cdc_msg *cdc, in smc_cdc_msg_validate() argument
311 struct smc_connection *conn = &smc->conn; in smc_cdc_msg_validate()
324 sock_hold(&smc->sk); /* sock_put in abort_work */ in smc_cdc_msg_validate()
326 sock_put(&smc->sk); in smc_cdc_msg_validate()
330 static void smc_cdc_msg_recv_action(struct smc_sock *smc, in smc_cdc_msg_recv_action() argument
334 struct smc_connection *conn = &smc->conn; in smc_cdc_msg_recv_action()
372 smc_tx_sndbuf_nonfull(smc); in smc_cdc_msg_recv_action()
380 smc_cdc_handle_urg_data_arrival(smc, &diff_prod); in smc_cdc_msg_recv_action()
386 smc->sk.sk_data_ready(&smc->sk); in smc_cdc_msg_recv_action()
389 smc->sk.sk_data_ready(&smc->sk); in smc_cdc_msg_recv_action()
398 if (!sock_owned_by_user(&smc->sk)) in smc_cdc_msg_recv_action()
408 smc->sk.sk_write_space(&smc->sk); in smc_cdc_msg_recv_action()
412 smc->sk.sk_err = ECONNRESET; in smc_cdc_msg_recv_action()
416 smc->sk.sk_shutdown |= RCV_SHUTDOWN; in smc_cdc_msg_recv_action()
417 if (smc->clcsock && smc->clcsock->sk) in smc_cdc_msg_recv_action()
418 smc->clcsock->sk->sk_shutdown |= RCV_SHUTDOWN; in smc_cdc_msg_recv_action()
419 smc_sock_set_flag(&smc->sk, SOCK_DONE); in smc_cdc_msg_recv_action()
420 sock_hold(&smc->sk); /* sock_put in close_work */ in smc_cdc_msg_recv_action()
422 sock_put(&smc->sk); in smc_cdc_msg_recv_action()
427 static void smc_cdc_msg_recv(struct smc_sock *smc, struct smc_cdc_msg *cdc) in smc_cdc_msg_recv() argument
429 sock_hold(&smc->sk); in smc_cdc_msg_recv()
430 bh_lock_sock(&smc->sk); in smc_cdc_msg_recv()
431 smc_cdc_msg_recv_action(smc, cdc); in smc_cdc_msg_recv()
432 bh_unlock_sock(&smc->sk); in smc_cdc_msg_recv()
433 sock_put(&smc->sk); /* no free sk in softirq-context */ in smc_cdc_msg_recv()
447 struct smc_sock *smc; in smcd_cdc_rx_tsklet() local
455 smc = container_of(conn, struct smc_sock, conn); in smcd_cdc_rx_tsklet()
456 smc_cdc_msg_recv(smc, (struct smc_cdc_msg *)&cdc); in smcd_cdc_rx_tsklet()
475 struct smc_sock *smc; in smc_cdc_rx_handler() local
489 smc = container_of(conn, struct smc_sock, conn); in smc_cdc_rx_handler()
492 smc_cdc_msg_validate(smc, cdc, link); in smc_cdc_rx_handler()
500 smc_cdc_msg_recv(smc, cdc); in smc_cdc_rx_handler()