/* * Shared Memory Communications over RDMA (SMC-R) and RoCE * * AF_SMC protocol family socket handler keeping the AF_INET sock address type * applies to SOCK_STREAM sockets only * offers an alternative communication option for TCP-protocol sockets * applicable with RoCE-cards only * * Initial restrictions: * - support for alternate links postponed * - partial support for non-blocking sockets only * - support for urgent data postponed * * Copyright IBM Corp. 2016, 2018 * * Author(s): Ursula Braun <ubraun@linux.vnet.ibm.com> * based on prototype from Frank Blaschka */#define KMSG_COMPONENT "smc"#define pr_fmt(fmt) KMSG_COMPONENT ": " fmt#include<linux/module.h>#include<linux/socket.h>#include<linux/workqueue.h>#include<linux/in.h>#include<linux/sched/signal.h>#include<net/sock.h>#include<net/tcp.h>#include<net/smc.h>#include"smc.h"#include"smc_clc.h"#include"smc_llc.h"#include"smc_cdc.h"#include"smc_core.h"#include"smc_ib.h"#include"smc_pnet.h"#include"smc_tx.h"#include"smc_rx.h"#include"smc_close.h"staticDEFINE_MUTEX(smc_create_lgr_pending);/* serialize link group * creation */structsmc_lgr_listsmc_lgr_list={/* established link groups */.lock=__SPIN_LOCK_UNLOCKED(smc_lgr_list.