rtrs-srv.c 57 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314
  1. // SPDX-License-Identifier: GPL-2.0-or-later
  2. /*
  3. * RDMA Transport Layer
  4. *
  5. * Copyright (c) 2014 - 2018 ProfitBricks GmbH. All rights reserved.
  6. * Copyright (c) 2018 - 2019 1&1 IONOS Cloud GmbH. All rights reserved.
  7. * Copyright (c) 2019 - 2020 1&1 IONOS SE. All rights reserved.
  8. */
  9. #undef pr_fmt
  10. #define pr_fmt(fmt) KBUILD_MODNAME " L" __stringify(__LINE__) ": " fmt
  11. #include <linux/module.h>
  12. #include "rtrs-srv.h"
  13. #include "rtrs-log.h"
  14. #include <rdma/ib_cm.h>
  15. #include <rdma/ib_verbs.h>
  16. #include "rtrs-srv-trace.h"
  17. MODULE_DESCRIPTION("RDMA Transport Server");
  18. MODULE_LICENSE("GPL");
  19. /* Must be power of 2, see mask from mr->page_size in ib_sg_to_pages() */
  20. #define DEFAULT_MAX_CHUNK_SIZE (128 << 10)
  21. #define DEFAULT_SESS_QUEUE_DEPTH 512
  22. #define MAX_HDR_SIZE PAGE_SIZE
  23. static struct rtrs_rdma_dev_pd dev_pd;
  24. struct class *rtrs_dev_class;
  25. static struct rtrs_srv_ib_ctx ib_ctx;
  26. static int __read_mostly max_chunk_size = DEFAULT_MAX_CHUNK_SIZE;
  27. static int __read_mostly sess_queue_depth = DEFAULT_SESS_QUEUE_DEPTH;
  28. static bool always_invalidate = true;
  29. module_param(always_invalidate, bool, 0444);
  30. MODULE_PARM_DESC(always_invalidate,
  31. "Invalidate memory registration for contiguous memory regions before accessing.");
  32. module_param_named(max_chunk_size, max_chunk_size, int, 0444);
  33. MODULE_PARM_DESC(max_chunk_size,
  34. "Max size for each IO request, when change the unit is in byte (default: "
  35. __stringify(DEFAULT_MAX_CHUNK_SIZE) "KB)");
  36. module_param_named(sess_queue_depth, sess_queue_depth, int, 0444);
  37. MODULE_PARM_DESC(sess_queue_depth,
  38. "Number of buffers for pending I/O requests to allocate per session. Maximum: "
  39. __stringify(MAX_SESS_QUEUE_DEPTH) " (default: "
  40. __stringify(DEFAULT_SESS_QUEUE_DEPTH) ")");
  41. static cpumask_t cq_affinity_mask = { CPU_BITS_ALL };
  42. static struct workqueue_struct *rtrs_wq;
  43. static inline struct rtrs_srv_con *to_srv_con(struct rtrs_con *c)
  44. {
  45. return container_of(c, struct rtrs_srv_con, c);
  46. }
  47. static bool rtrs_srv_change_state(struct rtrs_srv_path *srv_path,
  48. enum rtrs_srv_state new_state)
  49. {
  50. enum rtrs_srv_state old_state;
  51. bool changed = false;
  52. unsigned long flags;
  53. spin_lock_irqsave(&srv_path->state_lock, flags);
  54. old_state = srv_path->state;
  55. switch (new_state) {
  56. case RTRS_SRV_CONNECTED:
  57. if (old_state == RTRS_SRV_CONNECTING)
  58. changed = true;
  59. break;
  60. case RTRS_SRV_CLOSING:
  61. if (old_state == RTRS_SRV_CONNECTING ||
  62. old_state == RTRS_SRV_CONNECTED)
  63. changed = true;
  64. break;
  65. case RTRS_SRV_CLOSED:
  66. if (old_state == RTRS_SRV_CLOSING)
  67. changed = true;
  68. break;
  69. default:
  70. break;
  71. }
  72. if (changed)
  73. srv_path->state = new_state;
  74. spin_unlock_irqrestore(&srv_path->state_lock, flags);
  75. return changed;
  76. }
  77. static void free_id(struct rtrs_srv_op *id)
  78. {
  79. if (!id)
  80. return;
  81. kfree(id);
  82. }
  83. static void rtrs_srv_free_ops_ids(struct rtrs_srv_path *srv_path)
  84. {
  85. struct rtrs_srv_sess *srv = srv_path->srv;
  86. int i;
  87. if (srv_path->ops_ids) {
  88. for (i = 0; i < srv->queue_depth; i++)
  89. free_id(srv_path->ops_ids[i]);
  90. kfree(srv_path->ops_ids);
  91. srv_path->ops_ids = NULL;
  92. }
  93. }
  94. static void rtrs_srv_rdma_done(struct ib_cq *cq, struct ib_wc *wc);
  95. static struct ib_cqe io_comp_cqe = {
  96. .done = rtrs_srv_rdma_done
  97. };
  98. static inline void rtrs_srv_inflight_ref_release(struct percpu_ref *ref)
  99. {
  100. struct rtrs_srv_path *srv_path = container_of(ref,
  101. struct rtrs_srv_path,
  102. ids_inflight_ref);
  103. percpu_ref_exit(&srv_path->ids_inflight_ref);
  104. complete(&srv_path->complete_done);
  105. }
  106. static int rtrs_srv_alloc_ops_ids(struct rtrs_srv_path *srv_path)
  107. {
  108. struct rtrs_srv_sess *srv = srv_path->srv;
  109. struct rtrs_srv_op *id;
  110. int i, ret;
  111. srv_path->ops_ids = kcalloc(srv->queue_depth,
  112. sizeof(*srv_path->ops_ids),
  113. GFP_KERNEL);
  114. if (!srv_path->ops_ids)
  115. goto err;
  116. for (i = 0; i < srv->queue_depth; ++i) {
  117. id = kzalloc(sizeof(*id), GFP_KERNEL);
  118. if (!id)
  119. goto err;
  120. srv_path->ops_ids[i] = id;
  121. }
  122. ret = percpu_ref_init(&srv_path->ids_inflight_ref,
  123. rtrs_srv_inflight_ref_release, 0, GFP_KERNEL);
  124. if (ret) {
  125. pr_err("Percpu reference init failed\n");
  126. goto err;
  127. }
  128. init_completion(&srv_path->complete_done);
  129. return 0;
  130. err:
  131. rtrs_srv_free_ops_ids(srv_path);
  132. return -ENOMEM;
  133. }
  134. static inline void rtrs_srv_get_ops_ids(struct rtrs_srv_path *srv_path)
  135. {
  136. percpu_ref_get(&srv_path->ids_inflight_ref);
  137. }
  138. static inline void rtrs_srv_put_ops_ids(struct rtrs_srv_path *srv_path)
  139. {
  140. percpu_ref_put(&srv_path->ids_inflight_ref);
  141. }
  142. static void rtrs_srv_reg_mr_done(struct ib_cq *cq, struct ib_wc *wc)
  143. {
  144. struct rtrs_srv_con *con = to_srv_con(wc->qp->qp_context);
  145. struct rtrs_path *s = con->c.path;
  146. struct rtrs_srv_path *srv_path = to_srv_path(s);
  147. if (wc->status != IB_WC_SUCCESS) {
  148. rtrs_err(s, "REG MR failed: %s\n",
  149. ib_wc_status_msg(wc->status));
  150. close_path(srv_path);
  151. return;
  152. }
  153. }
  154. static struct ib_cqe local_reg_cqe = {
  155. .done = rtrs_srv_reg_mr_done
  156. };
  157. static int rdma_write_sg(struct rtrs_srv_op *id)
  158. {
  159. struct rtrs_path *s = id->con->c.path;
  160. struct rtrs_srv_path *srv_path = to_srv_path(s);
  161. dma_addr_t dma_addr = srv_path->dma_addr[id->msg_id];
  162. struct rtrs_srv_mr *srv_mr;
  163. struct ib_send_wr inv_wr;
  164. struct ib_rdma_wr imm_wr;
  165. struct ib_rdma_wr *wr = NULL;
  166. enum ib_send_flags flags;
  167. size_t sg_cnt;
  168. int err, offset;
  169. bool need_inval;
  170. u32 rkey = 0;
  171. struct ib_reg_wr rwr;
  172. struct ib_sge *plist;
  173. struct ib_sge list;
  174. sg_cnt = le16_to_cpu(id->rd_msg->sg_cnt);
  175. need_inval = le16_to_cpu(id->rd_msg->flags) & RTRS_MSG_NEED_INVAL_F;
  176. if (sg_cnt != 1)
  177. return -EINVAL;
  178. offset = 0;
  179. wr = &id->tx_wr;
  180. plist = &id->tx_sg;
  181. plist->addr = dma_addr + offset;
  182. plist->length = le32_to_cpu(id->rd_msg->desc[0].len);
  183. /* WR will fail with length error
  184. * if this is 0
  185. */
  186. if (plist->length == 0) {
  187. rtrs_err(s, "Invalid RDMA-Write sg list length 0\n");
  188. return -EINVAL;
  189. }
  190. plist->lkey = srv_path->s.dev->ib_pd->local_dma_lkey;
  191. offset += plist->length;
  192. wr->wr.sg_list = plist;
  193. wr->wr.num_sge = 1;
  194. wr->remote_addr = le64_to_cpu(id->rd_msg->desc[0].addr);
  195. wr->rkey = le32_to_cpu(id->rd_msg->desc[0].key);
  196. if (rkey == 0)
  197. rkey = wr->rkey;
  198. else
  199. /* Only one key is actually used */
  200. WARN_ON_ONCE(rkey != wr->rkey);
  201. wr->wr.opcode = IB_WR_RDMA_WRITE;
  202. wr->wr.wr_cqe = &io_comp_cqe;
  203. wr->wr.ex.imm_data = 0;
  204. wr->wr.send_flags = 0;
  205. if (need_inval && always_invalidate) {
  206. wr->wr.next = &rwr.wr;
  207. rwr.wr.next = &inv_wr;
  208. inv_wr.next = &imm_wr.wr;
  209. } else if (always_invalidate) {
  210. wr->wr.next = &rwr.wr;
  211. rwr.wr.next = &imm_wr.wr;
  212. } else if (need_inval) {
  213. wr->wr.next = &inv_wr;
  214. inv_wr.next = &imm_wr.wr;
  215. } else {
  216. wr->wr.next = &imm_wr.wr;
  217. }
  218. /*
  219. * From time to time we have to post signaled sends,
  220. * or send queue will fill up and only QP reset can help.
  221. */
  222. flags = (atomic_inc_return(&id->con->c.wr_cnt) % s->signal_interval) ?
  223. 0 : IB_SEND_SIGNALED;
  224. if (need_inval) {
  225. inv_wr.sg_list = NULL;
  226. inv_wr.num_sge = 0;
  227. inv_wr.opcode = IB_WR_SEND_WITH_INV;
  228. inv_wr.wr_cqe = &io_comp_cqe;
  229. inv_wr.send_flags = 0;
  230. inv_wr.ex.invalidate_rkey = rkey;
  231. }
  232. imm_wr.wr.next = NULL;
  233. if (always_invalidate) {
  234. struct rtrs_msg_rkey_rsp *msg;
  235. srv_mr = &srv_path->mrs[id->msg_id];
  236. rwr.wr.opcode = IB_WR_REG_MR;
  237. rwr.wr.wr_cqe = &local_reg_cqe;
  238. rwr.wr.num_sge = 0;
  239. rwr.mr = srv_mr->mr;
  240. rwr.wr.send_flags = 0;
  241. rwr.key = srv_mr->mr->rkey;
  242. rwr.access = (IB_ACCESS_LOCAL_WRITE |
  243. IB_ACCESS_REMOTE_WRITE);
  244. msg = srv_mr->iu->buf;
  245. msg->buf_id = cpu_to_le16(id->msg_id);
  246. msg->type = cpu_to_le16(RTRS_MSG_RKEY_RSP);
  247. msg->rkey = cpu_to_le32(srv_mr->mr->rkey);
  248. list.addr = srv_mr->iu->dma_addr;
  249. list.length = sizeof(*msg);
  250. list.lkey = srv_path->s.dev->ib_pd->local_dma_lkey;
  251. imm_wr.wr.sg_list = &list;
  252. imm_wr.wr.num_sge = 1;
  253. imm_wr.wr.opcode = IB_WR_SEND_WITH_IMM;
  254. ib_dma_sync_single_for_device(srv_path->s.dev->ib_dev,
  255. srv_mr->iu->dma_addr,
  256. srv_mr->iu->size, DMA_TO_DEVICE);
  257. } else {
  258. imm_wr.wr.sg_list = NULL;
  259. imm_wr.wr.num_sge = 0;
  260. imm_wr.wr.opcode = IB_WR_RDMA_WRITE_WITH_IMM;
  261. }
  262. imm_wr.wr.send_flags = flags;
  263. imm_wr.wr.ex.imm_data = cpu_to_be32(rtrs_to_io_rsp_imm(id->msg_id,
  264. 0, need_inval));
  265. imm_wr.wr.wr_cqe = &io_comp_cqe;
  266. ib_dma_sync_single_for_device(srv_path->s.dev->ib_dev, dma_addr,
  267. offset, DMA_BIDIRECTIONAL);
  268. err = ib_post_send(id->con->c.qp, &id->tx_wr.wr, NULL);
  269. if (err)
  270. rtrs_err(s,
  271. "Posting RDMA-Write-Request to QP failed, err: %d\n",
  272. err);
  273. return err;
  274. }
  275. /**
  276. * send_io_resp_imm() - respond to client with empty IMM on failed READ/WRITE
  277. * requests or on successful WRITE request.
  278. * @con: the connection to send back result
  279. * @id: the id associated with the IO
  280. * @errno: the error number of the IO.
  281. *
  282. * Return 0 on success, errno otherwise.
  283. */
  284. static int send_io_resp_imm(struct rtrs_srv_con *con, struct rtrs_srv_op *id,
  285. int errno)
  286. {
  287. struct rtrs_path *s = con->c.path;
  288. struct rtrs_srv_path *srv_path = to_srv_path(s);
  289. struct ib_send_wr inv_wr, *wr = NULL;
  290. struct ib_rdma_wr imm_wr;
  291. struct ib_reg_wr rwr;
  292. struct rtrs_srv_mr *srv_mr;
  293. bool need_inval = false;
  294. enum ib_send_flags flags;
  295. u32 imm;
  296. int err;
  297. if (id->dir == READ) {
  298. struct rtrs_msg_rdma_read *rd_msg = id->rd_msg;
  299. size_t sg_cnt;
  300. need_inval = le16_to_cpu(rd_msg->flags) &
  301. RTRS_MSG_NEED_INVAL_F;
  302. sg_cnt = le16_to_cpu(rd_msg->sg_cnt);
  303. if (need_inval) {
  304. if (sg_cnt) {
  305. inv_wr.wr_cqe = &io_comp_cqe;
  306. inv_wr.sg_list = NULL;
  307. inv_wr.num_sge = 0;
  308. inv_wr.opcode = IB_WR_SEND_WITH_INV;
  309. inv_wr.send_flags = 0;
  310. /* Only one key is actually used */
  311. inv_wr.ex.invalidate_rkey =
  312. le32_to_cpu(rd_msg->desc[0].key);
  313. } else {
  314. WARN_ON_ONCE(1);
  315. need_inval = false;
  316. }
  317. }
  318. }
  319. trace_send_io_resp_imm(id, need_inval, always_invalidate, errno);
  320. if (need_inval && always_invalidate) {
  321. wr = &inv_wr;
  322. inv_wr.next = &rwr.wr;
  323. rwr.wr.next = &imm_wr.wr;
  324. } else if (always_invalidate) {
  325. wr = &rwr.wr;
  326. rwr.wr.next = &imm_wr.wr;
  327. } else if (need_inval) {
  328. wr = &inv_wr;
  329. inv_wr.next = &imm_wr.wr;
  330. } else {
  331. wr = &imm_wr.wr;
  332. }
  333. /*
  334. * From time to time we have to post signalled sends,
  335. * or send queue will fill up and only QP reset can help.
  336. */
  337. flags = (atomic_inc_return(&con->c.wr_cnt) % s->signal_interval) ?
  338. 0 : IB_SEND_SIGNALED;
  339. imm = rtrs_to_io_rsp_imm(id->msg_id, errno, need_inval);
  340. imm_wr.wr.next = NULL;
  341. if (always_invalidate) {
  342. struct ib_sge list;
  343. struct rtrs_msg_rkey_rsp *msg;
  344. srv_mr = &srv_path->mrs[id->msg_id];
  345. rwr.wr.next = &imm_wr.wr;
  346. rwr.wr.opcode = IB_WR_REG_MR;
  347. rwr.wr.wr_cqe = &local_reg_cqe;
  348. rwr.wr.num_sge = 0;
  349. rwr.wr.send_flags = 0;
  350. rwr.mr = srv_mr->mr;
  351. rwr.key = srv_mr->mr->rkey;
  352. rwr.access = (IB_ACCESS_LOCAL_WRITE |
  353. IB_ACCESS_REMOTE_WRITE);
  354. msg = srv_mr->iu->buf;
  355. msg->buf_id = cpu_to_le16(id->msg_id);
  356. msg->type = cpu_to_le16(RTRS_MSG_RKEY_RSP);
  357. msg->rkey = cpu_to_le32(srv_mr->mr->rkey);
  358. list.addr = srv_mr->iu->dma_addr;
  359. list.length = sizeof(*msg);
  360. list.lkey = srv_path->s.dev->ib_pd->local_dma_lkey;
  361. imm_wr.wr.sg_list = &list;
  362. imm_wr.wr.num_sge = 1;
  363. imm_wr.wr.opcode = IB_WR_SEND_WITH_IMM;
  364. ib_dma_sync_single_for_device(srv_path->s.dev->ib_dev,
  365. srv_mr->iu->dma_addr,
  366. srv_mr->iu->size, DMA_TO_DEVICE);
  367. } else {
  368. imm_wr.wr.sg_list = NULL;
  369. imm_wr.wr.num_sge = 0;
  370. imm_wr.wr.opcode = IB_WR_RDMA_WRITE_WITH_IMM;
  371. }
  372. imm_wr.wr.send_flags = flags;
  373. imm_wr.wr.wr_cqe = &io_comp_cqe;
  374. imm_wr.wr.ex.imm_data = cpu_to_be32(imm);
  375. err = ib_post_send(id->con->c.qp, wr, NULL);
  376. if (err)
  377. rtrs_err_rl(s, "Posting RDMA-Reply to QP failed, err: %d\n",
  378. err);
  379. return err;
  380. }
  381. void close_path(struct rtrs_srv_path *srv_path)
  382. {
  383. if (rtrs_srv_change_state(srv_path, RTRS_SRV_CLOSING))
  384. queue_work(rtrs_wq, &srv_path->close_work);
  385. WARN_ON(srv_path->state != RTRS_SRV_CLOSING);
  386. }
  387. static inline const char *rtrs_srv_state_str(enum rtrs_srv_state state)
  388. {
  389. switch (state) {
  390. case RTRS_SRV_CONNECTING:
  391. return "RTRS_SRV_CONNECTING";
  392. case RTRS_SRV_CONNECTED:
  393. return "RTRS_SRV_CONNECTED";
  394. case RTRS_SRV_CLOSING:
  395. return "RTRS_SRV_CLOSING";
  396. case RTRS_SRV_CLOSED:
  397. return "RTRS_SRV_CLOSED";
  398. default:
  399. return "UNKNOWN";
  400. }
  401. }
  402. /**
  403. * rtrs_srv_resp_rdma() - Finish an RDMA request
  404. *
  405. * @id: Internal RTRS operation identifier
  406. * @status: Response Code sent to the other side for this operation.
  407. * 0 = success, <=0 error
  408. * Context: any
  409. *
  410. * Finish a RDMA operation. A message is sent to the client and the
  411. * corresponding memory areas will be released.
  412. */
  413. bool rtrs_srv_resp_rdma(struct rtrs_srv_op *id, int status)
  414. {
  415. struct rtrs_srv_path *srv_path;
  416. struct rtrs_srv_con *con;
  417. struct rtrs_path *s;
  418. int err;
  419. if (WARN_ON(!id))
  420. return true;
  421. con = id->con;
  422. s = con->c.path;
  423. srv_path = to_srv_path(s);
  424. id->status = status;
  425. if (srv_path->state != RTRS_SRV_CONNECTED) {
  426. rtrs_err_rl(s,
  427. "Sending I/O response failed, server path %s is disconnected, path state %s\n",
  428. kobject_name(&srv_path->kobj),
  429. rtrs_srv_state_str(srv_path->state));
  430. goto out;
  431. }
  432. if (always_invalidate) {
  433. struct rtrs_srv_mr *mr = &srv_path->mrs[id->msg_id];
  434. ib_update_fast_reg_key(mr->mr, ib_inc_rkey(mr->mr->rkey));
  435. }
  436. if (atomic_sub_return(1, &con->c.sq_wr_avail) < 0) {
  437. rtrs_err(s, "IB send queue full: srv_path=%s cid=%d\n",
  438. kobject_name(&srv_path->kobj),
  439. con->c.cid);
  440. atomic_add(1, &con->c.sq_wr_avail);
  441. spin_lock(&con->rsp_wr_wait_lock);
  442. list_add_tail(&id->wait_list, &con->rsp_wr_wait_list);
  443. spin_unlock(&con->rsp_wr_wait_lock);
  444. return false;
  445. }
  446. if (status || id->dir == WRITE || !id->rd_msg->sg_cnt)
  447. err = send_io_resp_imm(con, id, status);
  448. else
  449. err = rdma_write_sg(id);
  450. if (err) {
  451. rtrs_err_rl(s, "IO response failed: %d: srv_path=%s\n", err,
  452. kobject_name(&srv_path->kobj));
  453. close_path(srv_path);
  454. }
  455. out:
  456. rtrs_srv_put_ops_ids(srv_path);
  457. return true;
  458. }
  459. EXPORT_SYMBOL(rtrs_srv_resp_rdma);
  460. /**
  461. * rtrs_srv_set_sess_priv() - Set private pointer in rtrs_srv.
  462. * @srv: Session pointer
  463. * @priv: The private pointer that is associated with the session.
  464. */
  465. void rtrs_srv_set_sess_priv(struct rtrs_srv_sess *srv, void *priv)
  466. {
  467. srv->priv = priv;
  468. }
  469. EXPORT_SYMBOL(rtrs_srv_set_sess_priv);
  470. static void unmap_cont_bufs(struct rtrs_srv_path *srv_path)
  471. {
  472. int i;
  473. for (i = 0; i < srv_path->mrs_num; i++) {
  474. struct rtrs_srv_mr *srv_mr;
  475. srv_mr = &srv_path->mrs[i];
  476. if (always_invalidate)
  477. rtrs_iu_free(srv_mr->iu, srv_path->s.dev->ib_dev, 1);
  478. ib_dereg_mr(srv_mr->mr);
  479. ib_dma_unmap_sg(srv_path->s.dev->ib_dev, srv_mr->sgt.sgl,
  480. srv_mr->sgt.nents, DMA_BIDIRECTIONAL);
  481. sg_free_table(&srv_mr->sgt);
  482. }
  483. kfree(srv_path->mrs);
  484. }
  485. static int map_cont_bufs(struct rtrs_srv_path *srv_path)
  486. {
  487. struct rtrs_srv_sess *srv = srv_path->srv;
  488. struct rtrs_path *ss = &srv_path->s;
  489. int i, mri, err, mrs_num;
  490. unsigned int chunk_bits;
  491. int chunks_per_mr = 1;
  492. /*
  493. * Here we map queue_depth chunks to MR. Firstly we have to
  494. * figure out how many chunks can we map per MR.
  495. */
  496. if (always_invalidate) {
  497. /*
  498. * in order to do invalidate for each chunks of memory, we needs
  499. * more memory regions.
  500. */
  501. mrs_num = srv->queue_depth;
  502. } else {
  503. chunks_per_mr =
  504. srv_path->s.dev->ib_dev->attrs.max_fast_reg_page_list_len;
  505. mrs_num = DIV_ROUND_UP(srv->queue_depth, chunks_per_mr);
  506. chunks_per_mr = DIV_ROUND_UP(srv->queue_depth, mrs_num);
  507. }
  508. srv_path->mrs = kcalloc(mrs_num, sizeof(*srv_path->mrs), GFP_KERNEL);
  509. if (!srv_path->mrs)
  510. return -ENOMEM;
  511. srv_path->mrs_num = mrs_num;
  512. for (mri = 0; mri < mrs_num; mri++) {
  513. struct rtrs_srv_mr *srv_mr = &srv_path->mrs[mri];
  514. struct sg_table *sgt = &srv_mr->sgt;
  515. struct scatterlist *s;
  516. struct ib_mr *mr;
  517. int nr, nr_sgt, chunks;
  518. chunks = chunks_per_mr * mri;
  519. if (!always_invalidate)
  520. chunks_per_mr = min_t(int, chunks_per_mr,
  521. srv->queue_depth - chunks);
  522. err = sg_alloc_table(sgt, chunks_per_mr, GFP_KERNEL);
  523. if (err)
  524. goto err;
  525. for_each_sg(sgt->sgl, s, chunks_per_mr, i)
  526. sg_set_page(s, srv->chunks[chunks + i],
  527. max_chunk_size, 0);
  528. nr_sgt = ib_dma_map_sg(srv_path->s.dev->ib_dev, sgt->sgl,
  529. sgt->nents, DMA_BIDIRECTIONAL);
  530. if (!nr_sgt) {
  531. err = -EINVAL;
  532. goto free_sg;
  533. }
  534. mr = ib_alloc_mr(srv_path->s.dev->ib_pd, IB_MR_TYPE_MEM_REG,
  535. nr_sgt);
  536. if (IS_ERR(mr)) {
  537. err = PTR_ERR(mr);
  538. goto unmap_sg;
  539. }
  540. nr = ib_map_mr_sg(mr, sgt->sgl, nr_sgt,
  541. NULL, max_chunk_size);
  542. if (nr < 0 || nr < sgt->nents) {
  543. err = nr < 0 ? nr : -EINVAL;
  544. goto dereg_mr;
  545. }
  546. if (always_invalidate) {
  547. srv_mr->iu = rtrs_iu_alloc(1,
  548. sizeof(struct rtrs_msg_rkey_rsp),
  549. GFP_KERNEL, srv_path->s.dev->ib_dev,
  550. DMA_TO_DEVICE, rtrs_srv_rdma_done);
  551. if (!srv_mr->iu) {
  552. err = -ENOMEM;
  553. rtrs_err(ss, "rtrs_iu_alloc(), err: %d\n", err);
  554. goto dereg_mr;
  555. }
  556. }
  557. /* Eventually dma addr for each chunk can be cached */
  558. for_each_sg(sgt->sgl, s, nr_sgt, i)
  559. srv_path->dma_addr[chunks + i] = sg_dma_address(s);
  560. ib_update_fast_reg_key(mr, ib_inc_rkey(mr->rkey));
  561. srv_mr->mr = mr;
  562. continue;
  563. err:
  564. while (mri--) {
  565. srv_mr = &srv_path->mrs[mri];
  566. sgt = &srv_mr->sgt;
  567. mr = srv_mr->mr;
  568. rtrs_iu_free(srv_mr->iu, srv_path->s.dev->ib_dev, 1);
  569. dereg_mr:
  570. ib_dereg_mr(mr);
  571. unmap_sg:
  572. ib_dma_unmap_sg(srv_path->s.dev->ib_dev, sgt->sgl,
  573. sgt->nents, DMA_BIDIRECTIONAL);
  574. free_sg:
  575. sg_free_table(sgt);
  576. }
  577. kfree(srv_path->mrs);
  578. return err;
  579. }
  580. chunk_bits = ilog2(srv->queue_depth - 1) + 1;
  581. srv_path->mem_bits = (MAX_IMM_PAYL_BITS - chunk_bits);
  582. return 0;
  583. }
  584. static void rtrs_srv_hb_err_handler(struct rtrs_con *c)
  585. {
  586. close_path(to_srv_path(c->path));
  587. }
  588. static void rtrs_srv_init_hb(struct rtrs_srv_path *srv_path)
  589. {
  590. rtrs_init_hb(&srv_path->s, &io_comp_cqe,
  591. RTRS_HB_INTERVAL_MS,
  592. RTRS_HB_MISSED_MAX,
  593. rtrs_srv_hb_err_handler,
  594. rtrs_wq);
  595. }
  596. static void rtrs_srv_start_hb(struct rtrs_srv_path *srv_path)
  597. {
  598. rtrs_start_hb(&srv_path->s);
  599. }
  600. static void rtrs_srv_stop_hb(struct rtrs_srv_path *srv_path)
  601. {
  602. rtrs_stop_hb(&srv_path->s);
  603. }
  604. static void rtrs_srv_info_rsp_done(struct ib_cq *cq, struct ib_wc *wc)
  605. {
  606. struct rtrs_srv_con *con = to_srv_con(wc->qp->qp_context);
  607. struct rtrs_path *s = con->c.path;
  608. struct rtrs_srv_path *srv_path = to_srv_path(s);
  609. struct rtrs_iu *iu;
  610. iu = container_of(wc->wr_cqe, struct rtrs_iu, cqe);
  611. rtrs_iu_free(iu, srv_path->s.dev->ib_dev, 1);
  612. if (wc->status != IB_WC_SUCCESS) {
  613. rtrs_err(s, "Sess info response send failed: %s\n",
  614. ib_wc_status_msg(wc->status));
  615. close_path(srv_path);
  616. return;
  617. }
  618. WARN_ON(wc->opcode != IB_WC_SEND);
  619. }
  620. static int rtrs_srv_path_up(struct rtrs_srv_path *srv_path)
  621. {
  622. struct rtrs_srv_sess *srv = srv_path->srv;
  623. struct rtrs_srv_ctx *ctx = srv->ctx;
  624. int up, ret = 0;
  625. mutex_lock(&srv->paths_ev_mutex);
  626. up = ++srv->paths_up;
  627. if (up == 1)
  628. ret = ctx->ops.link_ev(srv, RTRS_SRV_LINK_EV_CONNECTED, NULL);
  629. mutex_unlock(&srv->paths_ev_mutex);
  630. /* Mark session as established */
  631. if (!ret)
  632. srv_path->established = true;
  633. return ret;
  634. }
  635. static void rtrs_srv_path_down(struct rtrs_srv_path *srv_path)
  636. {
  637. struct rtrs_srv_sess *srv = srv_path->srv;
  638. struct rtrs_srv_ctx *ctx = srv->ctx;
  639. if (!srv_path->established)
  640. return;
  641. srv_path->established = false;
  642. mutex_lock(&srv->paths_ev_mutex);
  643. WARN_ON(!srv->paths_up);
  644. if (--srv->paths_up == 0)
  645. ctx->ops.link_ev(srv, RTRS_SRV_LINK_EV_DISCONNECTED, srv->priv);
  646. mutex_unlock(&srv->paths_ev_mutex);
  647. }
  648. static bool exist_pathname(struct rtrs_srv_ctx *ctx,
  649. const char *pathname, const uuid_t *path_uuid)
  650. {
  651. struct rtrs_srv_sess *srv;
  652. struct rtrs_srv_path *srv_path;
  653. bool found = false;
  654. mutex_lock(&ctx->srv_mutex);
  655. list_for_each_entry(srv, &ctx->srv_list, ctx_list) {
  656. mutex_lock(&srv->paths_mutex);
  657. /* when a client with same uuid and same sessname tried to add a path */
  658. if (uuid_equal(&srv->paths_uuid, path_uuid)) {
  659. mutex_unlock(&srv->paths_mutex);
  660. continue;
  661. }
  662. list_for_each_entry(srv_path, &srv->paths_list, s.entry) {
  663. if (strlen(srv_path->s.sessname) == strlen(pathname) &&
  664. !strcmp(srv_path->s.sessname, pathname)) {
  665. found = true;
  666. break;
  667. }
  668. }
  669. mutex_unlock(&srv->paths_mutex);
  670. if (found)
  671. break;
  672. }
  673. mutex_unlock(&ctx->srv_mutex);
  674. return found;
  675. }
  676. static int post_recv_path(struct rtrs_srv_path *srv_path);
  677. static int rtrs_rdma_do_reject(struct rdma_cm_id *cm_id, int errno);
  678. static int process_info_req(struct rtrs_srv_con *con,
  679. struct rtrs_msg_info_req *msg)
  680. {
  681. struct rtrs_path *s = con->c.path;
  682. struct rtrs_srv_path *srv_path = to_srv_path(s);
  683. struct ib_send_wr *reg_wr = NULL;
  684. struct rtrs_msg_info_rsp *rsp;
  685. struct rtrs_iu *tx_iu;
  686. struct ib_reg_wr *rwr;
  687. int mri, err;
  688. size_t tx_sz;
  689. err = post_recv_path(srv_path);
  690. if (err) {
  691. rtrs_err(s, "post_recv_path(), err: %d\n", err);
  692. return err;
  693. }
  694. if (strchr(msg->pathname, '/') || strchr(msg->pathname, '.')) {
  695. rtrs_err(s, "pathname cannot contain / and .\n");
  696. return -EINVAL;
  697. }
  698. if (exist_pathname(srv_path->srv->ctx,
  699. msg->pathname, &srv_path->srv->paths_uuid)) {
  700. rtrs_err(s, "pathname is duplicated: %s\n", msg->pathname);
  701. return -EPERM;
  702. }
  703. strscpy(srv_path->s.sessname, msg->pathname,
  704. sizeof(srv_path->s.sessname));
  705. rwr = kcalloc(srv_path->mrs_num, sizeof(*rwr), GFP_KERNEL);
  706. if (!rwr)
  707. return -ENOMEM;
  708. tx_sz = sizeof(*rsp);
  709. tx_sz += sizeof(rsp->desc[0]) * srv_path->mrs_num;
  710. tx_iu = rtrs_iu_alloc(1, tx_sz, GFP_KERNEL, srv_path->s.dev->ib_dev,
  711. DMA_TO_DEVICE, rtrs_srv_info_rsp_done);
  712. if (!tx_iu) {
  713. err = -ENOMEM;
  714. goto rwr_free;
  715. }
  716. rsp = tx_iu->buf;
  717. rsp->type = cpu_to_le16(RTRS_MSG_INFO_RSP);
  718. rsp->sg_cnt = cpu_to_le16(srv_path->mrs_num);
  719. for (mri = 0; mri < srv_path->mrs_num; mri++) {
  720. struct ib_mr *mr = srv_path->mrs[mri].mr;
  721. rsp->desc[mri].addr = cpu_to_le64(mr->iova);
  722. rsp->desc[mri].key = cpu_to_le32(mr->rkey);
  723. rsp->desc[mri].len = cpu_to_le32(mr->length);
  724. /*
  725. * Fill in reg MR request and chain them *backwards*
  726. */
  727. rwr[mri].wr.next = mri ? &rwr[mri - 1].wr : NULL;
  728. rwr[mri].wr.opcode = IB_WR_REG_MR;
  729. rwr[mri].wr.wr_cqe = &local_reg_cqe;
  730. rwr[mri].wr.num_sge = 0;
  731. rwr[mri].wr.send_flags = 0;
  732. rwr[mri].mr = mr;
  733. rwr[mri].key = mr->rkey;
  734. rwr[mri].access = (IB_ACCESS_LOCAL_WRITE |
  735. IB_ACCESS_REMOTE_WRITE);
  736. reg_wr = &rwr[mri].wr;
  737. }
  738. err = rtrs_srv_create_path_files(srv_path);
  739. if (err)
  740. goto iu_free;
  741. kobject_get(&srv_path->kobj);
  742. get_device(&srv_path->srv->dev);
  743. err = rtrs_srv_change_state(srv_path, RTRS_SRV_CONNECTED);
  744. if (!err) {
  745. rtrs_err(s, "rtrs_srv_change_state(), err: %d\n", err);
  746. goto iu_free;
  747. }
  748. rtrs_srv_start_hb(srv_path);
  749. /*
  750. * We do not account number of established connections at the current
  751. * moment, we rely on the client, which should send info request when
  752. * all connections are successfully established. Thus, simply notify
  753. * listener with a proper event if we are the first path.
  754. */
  755. err = rtrs_srv_path_up(srv_path);
  756. if (err) {
  757. rtrs_err(s, "rtrs_srv_path_up(), err: %d\n", err);
  758. goto iu_free;
  759. }
  760. ib_dma_sync_single_for_device(srv_path->s.dev->ib_dev,
  761. tx_iu->dma_addr,
  762. tx_iu->size, DMA_TO_DEVICE);
  763. /* Send info response */
  764. err = rtrs_iu_post_send(&con->c, tx_iu, tx_sz, reg_wr);
  765. if (err) {
  766. rtrs_err(s, "rtrs_iu_post_send(), err: %d\n", err);
  767. iu_free:
  768. rtrs_iu_free(tx_iu, srv_path->s.dev->ib_dev, 1);
  769. }
  770. rwr_free:
  771. kfree(rwr);
  772. return err;
  773. }
  774. static void rtrs_srv_info_req_done(struct ib_cq *cq, struct ib_wc *wc)
  775. {
  776. struct rtrs_srv_con *con = to_srv_con(wc->qp->qp_context);
  777. struct rtrs_path *s = con->c.path;
  778. struct rtrs_srv_path *srv_path = to_srv_path(s);
  779. struct rtrs_msg_info_req *msg;
  780. struct rtrs_iu *iu;
  781. int err;
  782. WARN_ON(con->c.cid);
  783. iu = container_of(wc->wr_cqe, struct rtrs_iu, cqe);
  784. if (wc->status != IB_WC_SUCCESS) {
  785. rtrs_err(s, "Sess info request receive failed: %s\n",
  786. ib_wc_status_msg(wc->status));
  787. goto close;
  788. }
  789. WARN_ON(wc->opcode != IB_WC_RECV);
  790. if (wc->byte_len < sizeof(*msg)) {
  791. rtrs_err(s, "Sess info request is malformed: size %d\n",
  792. wc->byte_len);
  793. goto close;
  794. }
  795. ib_dma_sync_single_for_cpu(srv_path->s.dev->ib_dev, iu->dma_addr,
  796. iu->size, DMA_FROM_DEVICE);
  797. msg = iu->buf;
  798. if (le16_to_cpu(msg->type) != RTRS_MSG_INFO_REQ) {
  799. rtrs_err(s, "Sess info request is malformed: type %d\n",
  800. le16_to_cpu(msg->type));
  801. goto close;
  802. }
  803. err = process_info_req(con, msg);
  804. if (err)
  805. goto close;
  806. out:
  807. rtrs_iu_free(iu, srv_path->s.dev->ib_dev, 1);
  808. return;
  809. close:
  810. close_path(srv_path);
  811. goto out;
  812. }
  813. static int post_recv_info_req(struct rtrs_srv_con *con)
  814. {
  815. struct rtrs_path *s = con->c.path;
  816. struct rtrs_srv_path *srv_path = to_srv_path(s);
  817. struct rtrs_iu *rx_iu;
  818. int err;
  819. rx_iu = rtrs_iu_alloc(1, sizeof(struct rtrs_msg_info_req),
  820. GFP_KERNEL, srv_path->s.dev->ib_dev,
  821. DMA_FROM_DEVICE, rtrs_srv_info_req_done);
  822. if (!rx_iu)
  823. return -ENOMEM;
  824. /* Prepare for getting info response */
  825. err = rtrs_iu_post_recv(&con->c, rx_iu);
  826. if (err) {
  827. rtrs_err(s, "rtrs_iu_post_recv(), err: %d\n", err);
  828. rtrs_iu_free(rx_iu, srv_path->s.dev->ib_dev, 1);
  829. return err;
  830. }
  831. return 0;
  832. }
  833. static int post_recv_io(struct rtrs_srv_con *con, size_t q_size)
  834. {
  835. int i, err;
  836. for (i = 0; i < q_size; i++) {
  837. err = rtrs_post_recv_empty(&con->c, &io_comp_cqe);
  838. if (err)
  839. return err;
  840. }
  841. return 0;
  842. }
  843. static int post_recv_path(struct rtrs_srv_path *srv_path)
  844. {
  845. struct rtrs_srv_sess *srv = srv_path->srv;
  846. struct rtrs_path *s = &srv_path->s;
  847. size_t q_size;
  848. int err, cid;
  849. for (cid = 0; cid < srv_path->s.con_num; cid++) {
  850. if (cid == 0)
  851. q_size = SERVICE_CON_QUEUE_DEPTH;
  852. else
  853. q_size = srv->queue_depth;
  854. err = post_recv_io(to_srv_con(srv_path->s.con[cid]), q_size);
  855. if (err) {
  856. rtrs_err(s, "post_recv_io(), err: %d\n", err);
  857. return err;
  858. }
  859. }
  860. return 0;
  861. }
  862. static void process_read(struct rtrs_srv_con *con,
  863. struct rtrs_msg_rdma_read *msg,
  864. u32 buf_id, u32 off)
  865. {
  866. struct rtrs_path *s = con->c.path;
  867. struct rtrs_srv_path *srv_path = to_srv_path(s);
  868. struct rtrs_srv_sess *srv = srv_path->srv;
  869. struct rtrs_srv_ctx *ctx = srv->ctx;
  870. struct rtrs_srv_op *id;
  871. size_t usr_len, data_len;
  872. void *data;
  873. int ret;
  874. if (srv_path->state != RTRS_SRV_CONNECTED) {
  875. rtrs_err_rl(s,
  876. "Processing read request failed, session is disconnected, sess state %s\n",
  877. rtrs_srv_state_str(srv_path->state));
  878. return;
  879. }
  880. if (msg->sg_cnt != 1 && msg->sg_cnt != 0) {
  881. rtrs_err_rl(s,
  882. "Processing read request failed, invalid message\n");
  883. return;
  884. }
  885. rtrs_srv_get_ops_ids(srv_path);
  886. rtrs_srv_update_rdma_stats(srv_path->stats, off, READ);
  887. id = srv_path->ops_ids[buf_id];
  888. id->con = con;
  889. id->dir = READ;
  890. id->msg_id = buf_id;
  891. id->rd_msg = msg;
  892. usr_len = le16_to_cpu(msg->usr_len);
  893. data_len = off - usr_len;
  894. data = page_address(srv->chunks[buf_id]);
  895. ret = ctx->ops.rdma_ev(srv->priv, id, data, data_len,
  896. data + data_len, usr_len);
  897. if (ret) {
  898. rtrs_err_rl(s,
  899. "Processing read request failed, user module cb reported for msg_id %d, err: %d\n",
  900. buf_id, ret);
  901. goto send_err_msg;
  902. }
  903. return;
  904. send_err_msg:
  905. ret = send_io_resp_imm(con, id, ret);
  906. if (ret < 0) {
  907. rtrs_err_rl(s,
  908. "Sending err msg for failed RDMA-Write-Req failed, msg_id %d, err: %d\n",
  909. buf_id, ret);
  910. close_path(srv_path);
  911. }
  912. rtrs_srv_put_ops_ids(srv_path);
  913. }
  914. static void process_write(struct rtrs_srv_con *con,
  915. struct rtrs_msg_rdma_write *req,
  916. u32 buf_id, u32 off)
  917. {
  918. struct rtrs_path *s = con->c.path;
  919. struct rtrs_srv_path *srv_path = to_srv_path(s);
  920. struct rtrs_srv_sess *srv = srv_path->srv;
  921. struct rtrs_srv_ctx *ctx = srv->ctx;
  922. struct rtrs_srv_op *id;
  923. size_t data_len, usr_len;
  924. void *data;
  925. int ret;
  926. if (srv_path->state != RTRS_SRV_CONNECTED) {
  927. rtrs_err_rl(s,
  928. "Processing write request failed, session is disconnected, sess state %s\n",
  929. rtrs_srv_state_str(srv_path->state));
  930. return;
  931. }
  932. rtrs_srv_get_ops_ids(srv_path);
  933. rtrs_srv_update_rdma_stats(srv_path->stats, off, WRITE);
  934. id = srv_path->ops_ids[buf_id];
  935. id->con = con;
  936. id->dir = WRITE;
  937. id->msg_id = buf_id;
  938. usr_len = le16_to_cpu(req->usr_len);
  939. data_len = off - usr_len;
  940. data = page_address(srv->chunks[buf_id]);
  941. ret = ctx->ops.rdma_ev(srv->priv, id, data, data_len,
  942. data + data_len, usr_len);
  943. if (ret) {
  944. rtrs_err_rl(s,
  945. "Processing write request failed, user module callback reports err: %d\n",
  946. ret);
  947. goto send_err_msg;
  948. }
  949. return;
  950. send_err_msg:
  951. ret = send_io_resp_imm(con, id, ret);
  952. if (ret < 0) {
  953. rtrs_err_rl(s,
  954. "Processing write request failed, sending I/O response failed, msg_id %d, err: %d\n",
  955. buf_id, ret);
  956. close_path(srv_path);
  957. }
  958. rtrs_srv_put_ops_ids(srv_path);
  959. }
  960. static void process_io_req(struct rtrs_srv_con *con, void *msg,
  961. u32 id, u32 off)
  962. {
  963. struct rtrs_path *s = con->c.path;
  964. struct rtrs_srv_path *srv_path = to_srv_path(s);
  965. struct rtrs_msg_rdma_hdr *hdr;
  966. unsigned int type;
  967. ib_dma_sync_single_for_cpu(srv_path->s.dev->ib_dev,
  968. srv_path->dma_addr[id],
  969. max_chunk_size, DMA_BIDIRECTIONAL);
  970. hdr = msg;
  971. type = le16_to_cpu(hdr->type);
  972. switch (type) {
  973. case RTRS_MSG_WRITE:
  974. process_write(con, msg, id, off);
  975. break;
  976. case RTRS_MSG_READ:
  977. process_read(con, msg, id, off);
  978. break;
  979. default:
  980. rtrs_err(s,
  981. "Processing I/O request failed, unknown message type received: 0x%02x\n",
  982. type);
  983. goto err;
  984. }
  985. return;
  986. err:
  987. close_path(srv_path);
  988. }
  989. static void rtrs_srv_inv_rkey_done(struct ib_cq *cq, struct ib_wc *wc)
  990. {
  991. struct rtrs_srv_mr *mr =
  992. container_of(wc->wr_cqe, typeof(*mr), inv_cqe);
  993. struct rtrs_srv_con *con = to_srv_con(wc->qp->qp_context);
  994. struct rtrs_path *s = con->c.path;
  995. struct rtrs_srv_path *srv_path = to_srv_path(s);
  996. struct rtrs_srv_sess *srv = srv_path->srv;
  997. u32 msg_id, off;
  998. void *data;
  999. if (wc->status != IB_WC_SUCCESS) {
  1000. rtrs_err(s, "Failed IB_WR_LOCAL_INV: %s\n",
  1001. ib_wc_status_msg(wc->status));
  1002. close_path(srv_path);
  1003. }
  1004. msg_id = mr->msg_id;
  1005. off = mr->msg_off;
  1006. data = page_address(srv->chunks[msg_id]) + off;
  1007. process_io_req(con, data, msg_id, off);
  1008. }
  1009. static int rtrs_srv_inv_rkey(struct rtrs_srv_con *con,
  1010. struct rtrs_srv_mr *mr)
  1011. {
  1012. struct ib_send_wr wr = {
  1013. .opcode = IB_WR_LOCAL_INV,
  1014. .wr_cqe = &mr->inv_cqe,
  1015. .send_flags = IB_SEND_SIGNALED,
  1016. .ex.invalidate_rkey = mr->mr->rkey,
  1017. };
  1018. mr->inv_cqe.done = rtrs_srv_inv_rkey_done;
  1019. return ib_post_send(con->c.qp, &wr, NULL);
  1020. }
  1021. static void rtrs_rdma_process_wr_wait_list(struct rtrs_srv_con *con)
  1022. {
  1023. spin_lock(&con->rsp_wr_wait_lock);
  1024. while (!list_empty(&con->rsp_wr_wait_list)) {
  1025. struct rtrs_srv_op *id;
  1026. int ret;
  1027. id = list_entry(con->rsp_wr_wait_list.next,
  1028. struct rtrs_srv_op, wait_list);
  1029. list_del(&id->wait_list);
  1030. spin_unlock(&con->rsp_wr_wait_lock);
  1031. ret = rtrs_srv_resp_rdma(id, id->status);
  1032. spin_lock(&con->rsp_wr_wait_lock);
  1033. if (!ret) {
  1034. list_add(&id->wait_list, &con->rsp_wr_wait_list);
  1035. break;
  1036. }
  1037. }
  1038. spin_unlock(&con->rsp_wr_wait_lock);
  1039. }
  1040. static void rtrs_srv_rdma_done(struct ib_cq *cq, struct ib_wc *wc)
  1041. {
  1042. struct rtrs_srv_con *con = to_srv_con(wc->qp->qp_context);
  1043. struct rtrs_path *s = con->c.path;
  1044. struct rtrs_srv_path *srv_path = to_srv_path(s);
  1045. struct rtrs_srv_sess *srv = srv_path->srv;
  1046. u32 imm_type, imm_payload;
  1047. int err;
  1048. if (wc->status != IB_WC_SUCCESS) {
  1049. if (wc->status != IB_WC_WR_FLUSH_ERR) {
  1050. rtrs_err(s,
  1051. "%s (wr_cqe: %p, type: %d, vendor_err: 0x%x, len: %u)\n",
  1052. ib_wc_status_msg(wc->status), wc->wr_cqe,
  1053. wc->opcode, wc->vendor_err, wc->byte_len);
  1054. close_path(srv_path);
  1055. }
  1056. return;
  1057. }
  1058. switch (wc->opcode) {
  1059. case IB_WC_RECV_RDMA_WITH_IMM:
  1060. /*
  1061. * post_recv() RDMA write completions of IO reqs (read/write)
  1062. * and hb
  1063. */
  1064. if (WARN_ON(wc->wr_cqe != &io_comp_cqe))
  1065. return;
  1066. err = rtrs_post_recv_empty(&con->c, &io_comp_cqe);
  1067. if (err) {
  1068. rtrs_err(s, "rtrs_post_recv(), err: %d\n", err);
  1069. close_path(srv_path);
  1070. break;
  1071. }
  1072. rtrs_from_imm(be32_to_cpu(wc->ex.imm_data),
  1073. &imm_type, &imm_payload);
  1074. if (imm_type == RTRS_IO_REQ_IMM) {
  1075. u32 msg_id, off;
  1076. void *data;
  1077. msg_id = imm_payload >> srv_path->mem_bits;
  1078. off = imm_payload & ((1 << srv_path->mem_bits) - 1);
  1079. if (msg_id >= srv->queue_depth || off >= max_chunk_size) {
  1080. rtrs_err(s, "Wrong msg_id %u, off %u\n",
  1081. msg_id, off);
  1082. close_path(srv_path);
  1083. return;
  1084. }
  1085. if (always_invalidate) {
  1086. struct rtrs_srv_mr *mr = &srv_path->mrs[msg_id];
  1087. mr->msg_off = off;
  1088. mr->msg_id = msg_id;
  1089. err = rtrs_srv_inv_rkey(con, mr);
  1090. if (err) {
  1091. rtrs_err(s, "rtrs_post_recv(), err: %d\n",
  1092. err);
  1093. close_path(srv_path);
  1094. break;
  1095. }
  1096. } else {
  1097. data = page_address(srv->chunks[msg_id]) + off;
  1098. process_io_req(con, data, msg_id, off);
  1099. }
  1100. } else if (imm_type == RTRS_HB_MSG_IMM) {
  1101. WARN_ON(con->c.cid);
  1102. rtrs_send_hb_ack(&srv_path->s);
  1103. } else if (imm_type == RTRS_HB_ACK_IMM) {
  1104. WARN_ON(con->c.cid);
  1105. srv_path->s.hb_missed_cnt = 0;
  1106. } else {
  1107. rtrs_wrn(s, "Unknown IMM type %u\n", imm_type);
  1108. }
  1109. break;
  1110. case IB_WC_RDMA_WRITE:
  1111. case IB_WC_SEND:
  1112. /*
  1113. * post_send() RDMA write completions of IO reqs (read/write)
  1114. * and hb.
  1115. */
  1116. atomic_add(s->signal_interval, &con->c.sq_wr_avail);
  1117. if (!list_empty_careful(&con->rsp_wr_wait_list))
  1118. rtrs_rdma_process_wr_wait_list(con);
  1119. break;
  1120. default:
  1121. rtrs_wrn(s, "Unexpected WC type: %d\n", wc->opcode);
  1122. return;
  1123. }
  1124. }
  1125. /**
  1126. * rtrs_srv_get_path_name() - Get rtrs_srv peer hostname.
  1127. * @srv: Session
  1128. * @pathname: Pathname buffer
  1129. * @len: Length of sessname buffer
  1130. */
  1131. int rtrs_srv_get_path_name(struct rtrs_srv_sess *srv, char *pathname,
  1132. size_t len)
  1133. {
  1134. struct rtrs_srv_path *srv_path;
  1135. int err = -ENOTCONN;
  1136. mutex_lock(&srv->paths_mutex);
  1137. list_for_each_entry(srv_path, &srv->paths_list, s.entry) {
  1138. if (srv_path->state != RTRS_SRV_CONNECTED)
  1139. continue;
  1140. strscpy(pathname, srv_path->s.sessname,
  1141. min_t(size_t, sizeof(srv_path->s.sessname), len));
  1142. err = 0;
  1143. break;
  1144. }
  1145. mutex_unlock(&srv->paths_mutex);
  1146. return err;
  1147. }
  1148. EXPORT_SYMBOL(rtrs_srv_get_path_name);
  1149. /**
  1150. * rtrs_srv_get_queue_depth() - Get rtrs_srv qdepth.
  1151. * @srv: Session
  1152. */
  1153. int rtrs_srv_get_queue_depth(struct rtrs_srv_sess *srv)
  1154. {
  1155. return srv->queue_depth;
  1156. }
  1157. EXPORT_SYMBOL(rtrs_srv_get_queue_depth);
  1158. static int find_next_bit_ring(struct rtrs_srv_path *srv_path)
  1159. {
  1160. struct ib_device *ib_dev = srv_path->s.dev->ib_dev;
  1161. int v;
  1162. v = cpumask_next(srv_path->cur_cq_vector, &cq_affinity_mask);
  1163. if (v >= nr_cpu_ids || v >= ib_dev->num_comp_vectors)
  1164. v = cpumask_first(&cq_affinity_mask);
  1165. return v;
  1166. }
  1167. static int rtrs_srv_get_next_cq_vector(struct rtrs_srv_path *srv_path)
  1168. {
  1169. srv_path->cur_cq_vector = find_next_bit_ring(srv_path);
  1170. return srv_path->cur_cq_vector;
  1171. }
  1172. static void rtrs_srv_dev_release(struct device *dev)
  1173. {
  1174. struct rtrs_srv_sess *srv = container_of(dev, struct rtrs_srv_sess,
  1175. dev);
  1176. kfree(srv);
  1177. }
  1178. static void free_srv(struct rtrs_srv_sess *srv)
  1179. {
  1180. int i;
  1181. WARN_ON(refcount_read(&srv->refcount));
  1182. for (i = 0; i < srv->queue_depth; i++)
  1183. __free_pages(srv->chunks[i], get_order(max_chunk_size));
  1184. kfree(srv->chunks);
  1185. mutex_destroy(&srv->paths_mutex);
  1186. mutex_destroy(&srv->paths_ev_mutex);
  1187. /* last put to release the srv structure */
  1188. put_device(&srv->dev);
  1189. }
  1190. static struct rtrs_srv_sess *get_or_create_srv(struct rtrs_srv_ctx *ctx,
  1191. const uuid_t *paths_uuid,
  1192. bool first_conn)
  1193. {
  1194. struct rtrs_srv_sess *srv;
  1195. int i;
  1196. mutex_lock(&ctx->srv_mutex);
  1197. list_for_each_entry(srv, &ctx->srv_list, ctx_list) {
  1198. if (uuid_equal(&srv->paths_uuid, paths_uuid) &&
  1199. refcount_inc_not_zero(&srv->refcount)) {
  1200. mutex_unlock(&ctx->srv_mutex);
  1201. return srv;
  1202. }
  1203. }
  1204. mutex_unlock(&ctx->srv_mutex);
  1205. /*
  1206. * If this request is not the first connection request from the
  1207. * client for this session then fail and return error.
  1208. */
  1209. if (!first_conn) {
  1210. pr_err_ratelimited("Error: Not the first connection request for this session\n");
  1211. return ERR_PTR(-ENXIO);
  1212. }
  1213. /* need to allocate a new srv */
  1214. srv = kzalloc(sizeof(*srv), GFP_KERNEL);
  1215. if (!srv)
  1216. return ERR_PTR(-ENOMEM);
  1217. INIT_LIST_HEAD(&srv->paths_list);
  1218. mutex_init(&srv->paths_mutex);
  1219. mutex_init(&srv->paths_ev_mutex);
  1220. uuid_copy(&srv->paths_uuid, paths_uuid);
  1221. srv->queue_depth = sess_queue_depth;
  1222. srv->ctx = ctx;
  1223. device_initialize(&srv->dev);
  1224. srv->dev.release = rtrs_srv_dev_release;
  1225. srv->chunks = kcalloc(srv->queue_depth, sizeof(*srv->chunks),
  1226. GFP_KERNEL);
  1227. if (!srv->chunks)
  1228. goto err_free_srv;
  1229. for (i = 0; i < srv->queue_depth; i++) {
  1230. srv->chunks[i] = alloc_pages(GFP_KERNEL,
  1231. get_order(max_chunk_size));
  1232. if (!srv->chunks[i])
  1233. goto err_free_chunks;
  1234. }
  1235. refcount_set(&srv->refcount, 1);
  1236. mutex_lock(&ctx->srv_mutex);
  1237. list_add(&srv->ctx_list, &ctx->srv_list);
  1238. mutex_unlock(&ctx->srv_mutex);
  1239. return srv;
  1240. err_free_chunks:
  1241. while (i--)
  1242. __free_pages(srv->chunks[i], get_order(max_chunk_size));
  1243. kfree(srv->chunks);
  1244. err_free_srv:
  1245. kfree(srv);
  1246. return ERR_PTR(-ENOMEM);
  1247. }
  1248. static void put_srv(struct rtrs_srv_sess *srv)
  1249. {
  1250. if (refcount_dec_and_test(&srv->refcount)) {
  1251. struct rtrs_srv_ctx *ctx = srv->ctx;
  1252. WARN_ON(srv->dev.kobj.state_in_sysfs);
  1253. mutex_lock(&ctx->srv_mutex);
  1254. list_del(&srv->ctx_list);
  1255. mutex_unlock(&ctx->srv_mutex);
  1256. free_srv(srv);
  1257. }
  1258. }
  1259. static void __add_path_to_srv(struct rtrs_srv_sess *srv,
  1260. struct rtrs_srv_path *srv_path)
  1261. {
  1262. list_add_tail(&srv_path->s.entry, &srv->paths_list);
  1263. srv->paths_num++;
  1264. WARN_ON(srv->paths_num >= MAX_PATHS_NUM);
  1265. }
  1266. static void del_path_from_srv(struct rtrs_srv_path *srv_path)
  1267. {
  1268. struct rtrs_srv_sess *srv = srv_path->srv;
  1269. if (WARN_ON(!srv))
  1270. return;
  1271. mutex_lock(&srv->paths_mutex);
  1272. list_del(&srv_path->s.entry);
  1273. WARN_ON(!srv->paths_num);
  1274. srv->paths_num--;
  1275. mutex_unlock(&srv->paths_mutex);
  1276. }
  1277. /* return true if addresses are the same, error other wise */
  1278. static int sockaddr_cmp(const struct sockaddr *a, const struct sockaddr *b)
  1279. {
  1280. switch (a->sa_family) {
  1281. case AF_IB:
  1282. return memcmp(&((struct sockaddr_ib *)a)->sib_addr,
  1283. &((struct sockaddr_ib *)b)->sib_addr,
  1284. sizeof(struct ib_addr)) &&
  1285. (b->sa_family == AF_IB);
  1286. case AF_INET:
  1287. return memcmp(&((struct sockaddr_in *)a)->sin_addr,
  1288. &((struct sockaddr_in *)b)->sin_addr,
  1289. sizeof(struct in_addr)) &&
  1290. (b->sa_family == AF_INET);
  1291. case AF_INET6:
  1292. return memcmp(&((struct sockaddr_in6 *)a)->sin6_addr,
  1293. &((struct sockaddr_in6 *)b)->sin6_addr,
  1294. sizeof(struct in6_addr)) &&
  1295. (b->sa_family == AF_INET6);
  1296. default:
  1297. return -ENOENT;
  1298. }
  1299. }
  1300. static bool __is_path_w_addr_exists(struct rtrs_srv_sess *srv,
  1301. struct rdma_addr *addr)
  1302. {
  1303. struct rtrs_srv_path *srv_path;
  1304. list_for_each_entry(srv_path, &srv->paths_list, s.entry)
  1305. if (!sockaddr_cmp((struct sockaddr *)&srv_path->s.dst_addr,
  1306. (struct sockaddr *)&addr->dst_addr) &&
  1307. !sockaddr_cmp((struct sockaddr *)&srv_path->s.src_addr,
  1308. (struct sockaddr *)&addr->src_addr))
  1309. return true;
  1310. return false;
  1311. }
  1312. static void free_path(struct rtrs_srv_path *srv_path)
  1313. {
  1314. if (srv_path->kobj.state_in_sysfs) {
  1315. kobject_del(&srv_path->kobj);
  1316. kobject_put(&srv_path->kobj);
  1317. } else {
  1318. free_percpu(srv_path->stats->rdma_stats);
  1319. kfree(srv_path->stats);
  1320. kfree(srv_path);
  1321. }
  1322. }
  1323. static void rtrs_srv_close_work(struct work_struct *work)
  1324. {
  1325. struct rtrs_srv_path *srv_path;
  1326. struct rtrs_srv_con *con;
  1327. int i;
  1328. srv_path = container_of(work, typeof(*srv_path), close_work);
  1329. rtrs_srv_stop_hb(srv_path);
  1330. for (i = 0; i < srv_path->s.con_num; i++) {
  1331. if (!srv_path->s.con[i])
  1332. continue;
  1333. con = to_srv_con(srv_path->s.con[i]);
  1334. rdma_disconnect(con->c.cm_id);
  1335. ib_drain_qp(con->c.qp);
  1336. }
  1337. /*
  1338. * Degrade ref count to the usual model with a single shared
  1339. * atomic_t counter
  1340. */
  1341. percpu_ref_kill(&srv_path->ids_inflight_ref);
  1342. /* Wait for all completion */
  1343. wait_for_completion(&srv_path->complete_done);
  1344. rtrs_srv_destroy_path_files(srv_path);
  1345. /* Notify upper layer if we are the last path */
  1346. rtrs_srv_path_down(srv_path);
  1347. unmap_cont_bufs(srv_path);
  1348. rtrs_srv_free_ops_ids(srv_path);
  1349. for (i = 0; i < srv_path->s.con_num; i++) {
  1350. if (!srv_path->s.con[i])
  1351. continue;
  1352. con = to_srv_con(srv_path->s.con[i]);
  1353. rtrs_cq_qp_destroy(&con->c);
  1354. rdma_destroy_id(con->c.cm_id);
  1355. kfree(con);
  1356. }
  1357. rtrs_ib_dev_put(srv_path->s.dev);
  1358. del_path_from_srv(srv_path);
  1359. put_srv(srv_path->srv);
  1360. srv_path->srv = NULL;
  1361. rtrs_srv_change_state(srv_path, RTRS_SRV_CLOSED);
  1362. kfree(srv_path->dma_addr);
  1363. kfree(srv_path->s.con);
  1364. free_path(srv_path);
  1365. }
  1366. static int rtrs_rdma_do_accept(struct rtrs_srv_path *srv_path,
  1367. struct rdma_cm_id *cm_id)
  1368. {
  1369. struct rtrs_srv_sess *srv = srv_path->srv;
  1370. struct rtrs_msg_conn_rsp msg;
  1371. struct rdma_conn_param param;
  1372. int err;
  1373. param = (struct rdma_conn_param) {
  1374. .rnr_retry_count = 7,
  1375. .private_data = &msg,
  1376. .private_data_len = sizeof(msg),
  1377. };
  1378. msg = (struct rtrs_msg_conn_rsp) {
  1379. .magic = cpu_to_le16(RTRS_MAGIC),
  1380. .version = cpu_to_le16(RTRS_PROTO_VER),
  1381. .queue_depth = cpu_to_le16(srv->queue_depth),
  1382. .max_io_size = cpu_to_le32(max_chunk_size - MAX_HDR_SIZE),
  1383. .max_hdr_size = cpu_to_le32(MAX_HDR_SIZE),
  1384. };
  1385. if (always_invalidate)
  1386. msg.flags = cpu_to_le32(RTRS_MSG_NEW_RKEY_F);
  1387. err = rdma_accept(cm_id, &param);
  1388. if (err)
  1389. pr_err("rdma_accept(), err: %d\n", err);
  1390. return err;
  1391. }
  1392. static int rtrs_rdma_do_reject(struct rdma_cm_id *cm_id, int errno)
  1393. {
  1394. struct rtrs_msg_conn_rsp msg;
  1395. int err;
  1396. msg = (struct rtrs_msg_conn_rsp) {
  1397. .magic = cpu_to_le16(RTRS_MAGIC),
  1398. .version = cpu_to_le16(RTRS_PROTO_VER),
  1399. .errno = cpu_to_le16(errno),
  1400. };
  1401. err = rdma_reject(cm_id, &msg, sizeof(msg), IB_CM_REJ_CONSUMER_DEFINED);
  1402. if (err)
  1403. pr_err("rdma_reject(), err: %d\n", err);
  1404. /* Bounce errno back */
  1405. return errno;
  1406. }
  1407. static struct rtrs_srv_path *
  1408. __find_path(struct rtrs_srv_sess *srv, const uuid_t *sess_uuid)
  1409. {
  1410. struct rtrs_srv_path *srv_path;
  1411. list_for_each_entry(srv_path, &srv->paths_list, s.entry) {
  1412. if (uuid_equal(&srv_path->s.uuid, sess_uuid))
  1413. return srv_path;
  1414. }
  1415. return NULL;
  1416. }
  1417. static int create_con(struct rtrs_srv_path *srv_path,
  1418. struct rdma_cm_id *cm_id,
  1419. unsigned int cid)
  1420. {
  1421. struct rtrs_srv_sess *srv = srv_path->srv;
  1422. struct rtrs_path *s = &srv_path->s;
  1423. struct rtrs_srv_con *con;
  1424. u32 cq_num, max_send_wr, max_recv_wr, wr_limit;
  1425. int err, cq_vector;
  1426. con = kzalloc(sizeof(*con), GFP_KERNEL);
  1427. if (!con) {
  1428. err = -ENOMEM;
  1429. goto err;
  1430. }
  1431. spin_lock_init(&con->rsp_wr_wait_lock);
  1432. INIT_LIST_HEAD(&con->rsp_wr_wait_list);
  1433. con->c.cm_id = cm_id;
  1434. con->c.path = &srv_path->s;
  1435. con->c.cid = cid;
  1436. atomic_set(&con->c.wr_cnt, 1);
  1437. wr_limit = srv_path->s.dev->ib_dev->attrs.max_qp_wr;
  1438. if (con->c.cid == 0) {
  1439. /*
  1440. * All receive and all send (each requiring invalidate)
  1441. * + 2 for drain and heartbeat
  1442. */
  1443. max_send_wr = min_t(int, wr_limit,
  1444. SERVICE_CON_QUEUE_DEPTH * 2 + 2);
  1445. max_recv_wr = max_send_wr;
  1446. s->signal_interval = min_not_zero(srv->queue_depth,
  1447. (size_t)SERVICE_CON_QUEUE_DEPTH);
  1448. } else {
  1449. /* when always_invlaidate enalbed, we need linv+rinv+mr+imm */
  1450. if (always_invalidate)
  1451. max_send_wr =
  1452. min_t(int, wr_limit,
  1453. srv->queue_depth * (1 + 4) + 1);
  1454. else
  1455. max_send_wr =
  1456. min_t(int, wr_limit,
  1457. srv->queue_depth * (1 + 2) + 1);
  1458. max_recv_wr = srv->queue_depth + 1;
  1459. /*
  1460. * If we have all receive requests posted and
  1461. * all write requests posted and each read request
  1462. * requires an invalidate request + drain
  1463. * and qp gets into error state.
  1464. */
  1465. }
  1466. cq_num = max_send_wr + max_recv_wr;
  1467. atomic_set(&con->c.sq_wr_avail, max_send_wr);
  1468. cq_vector = rtrs_srv_get_next_cq_vector(srv_path);
  1469. /* TODO: SOFTIRQ can be faster, but be careful with softirq context */
  1470. err = rtrs_cq_qp_create(&srv_path->s, &con->c, 1, cq_vector, cq_num,
  1471. max_send_wr, max_recv_wr,
  1472. IB_POLL_WORKQUEUE);
  1473. if (err) {
  1474. rtrs_err(s, "rtrs_cq_qp_create(), err: %d\n", err);
  1475. goto free_con;
  1476. }
  1477. if (con->c.cid == 0) {
  1478. err = post_recv_info_req(con);
  1479. if (err)
  1480. goto free_cqqp;
  1481. }
  1482. WARN_ON(srv_path->s.con[cid]);
  1483. srv_path->s.con[cid] = &con->c;
  1484. /*
  1485. * Change context from server to current connection. The other
  1486. * way is to use cm_id->qp->qp_context, which does not work on OFED.
  1487. */
  1488. cm_id->context = &con->c;
  1489. return 0;
  1490. free_cqqp:
  1491. rtrs_cq_qp_destroy(&con->c);
  1492. free_con:
  1493. kfree(con);
  1494. err:
  1495. return err;
  1496. }
  1497. static struct rtrs_srv_path *__alloc_path(struct rtrs_srv_sess *srv,
  1498. struct rdma_cm_id *cm_id,
  1499. unsigned int con_num,
  1500. unsigned int recon_cnt,
  1501. const uuid_t *uuid)
  1502. {
  1503. struct rtrs_srv_path *srv_path;
  1504. int err = -ENOMEM;
  1505. char str[NAME_MAX];
  1506. struct rtrs_addr path;
  1507. if (srv->paths_num >= MAX_PATHS_NUM) {
  1508. err = -ECONNRESET;
  1509. goto err;
  1510. }
  1511. if (__is_path_w_addr_exists(srv, &cm_id->route.addr)) {
  1512. err = -EEXIST;
  1513. pr_err("Path with same addr exists\n");
  1514. goto err;
  1515. }
  1516. srv_path = kzalloc(sizeof(*srv_path), GFP_KERNEL);
  1517. if (!srv_path)
  1518. goto err;
  1519. srv_path->stats = kzalloc(sizeof(*srv_path->stats), GFP_KERNEL);
  1520. if (!srv_path->stats)
  1521. goto err_free_sess;
  1522. srv_path->stats->rdma_stats = alloc_percpu(struct rtrs_srv_stats_rdma_stats);
  1523. if (!srv_path->stats->rdma_stats)
  1524. goto err_free_stats;
  1525. srv_path->stats->srv_path = srv_path;
  1526. srv_path->dma_addr = kcalloc(srv->queue_depth,
  1527. sizeof(*srv_path->dma_addr),
  1528. GFP_KERNEL);
  1529. if (!srv_path->dma_addr)
  1530. goto err_free_percpu;
  1531. srv_path->s.con = kcalloc(con_num, sizeof(*srv_path->s.con),
  1532. GFP_KERNEL);
  1533. if (!srv_path->s.con)
  1534. goto err_free_dma_addr;
  1535. srv_path->state = RTRS_SRV_CONNECTING;
  1536. srv_path->srv = srv;
  1537. srv_path->cur_cq_vector = -1;
  1538. srv_path->s.dst_addr = cm_id->route.addr.dst_addr;
  1539. srv_path->s.src_addr = cm_id->route.addr.src_addr;
  1540. /* temporary until receiving session-name from client */
  1541. path.src = &srv_path->s.src_addr;
  1542. path.dst = &srv_path->s.dst_addr;
  1543. rtrs_addr_to_str(&path, str, sizeof(str));
  1544. strscpy(srv_path->s.sessname, str, sizeof(srv_path->s.sessname));
  1545. srv_path->s.con_num = con_num;
  1546. srv_path->s.irq_con_num = con_num;
  1547. srv_path->s.recon_cnt = recon_cnt;
  1548. uuid_copy(&srv_path->s.uuid, uuid);
  1549. spin_lock_init(&srv_path->state_lock);
  1550. INIT_WORK(&srv_path->close_work, rtrs_srv_close_work);
  1551. rtrs_srv_init_hb(srv_path);
  1552. srv_path->s.dev = rtrs_ib_dev_find_or_add(cm_id->device, &dev_pd);
  1553. if (!srv_path->s.dev) {
  1554. err = -ENOMEM;
  1555. goto err_free_con;
  1556. }
  1557. err = map_cont_bufs(srv_path);
  1558. if (err)
  1559. goto err_put_dev;
  1560. err = rtrs_srv_alloc_ops_ids(srv_path);
  1561. if (err)
  1562. goto err_unmap_bufs;
  1563. __add_path_to_srv(srv, srv_path);
  1564. return srv_path;
  1565. err_unmap_bufs:
  1566. unmap_cont_bufs(srv_path);
  1567. err_put_dev:
  1568. rtrs_ib_dev_put(srv_path->s.dev);
  1569. err_free_con:
  1570. kfree(srv_path->s.con);
  1571. err_free_dma_addr:
  1572. kfree(srv_path->dma_addr);
  1573. err_free_percpu:
  1574. free_percpu(srv_path->stats->rdma_stats);
  1575. err_free_stats:
  1576. kfree(srv_path->stats);
  1577. err_free_sess:
  1578. kfree(srv_path);
  1579. err:
  1580. return ERR_PTR(err);
  1581. }
  1582. static int rtrs_rdma_connect(struct rdma_cm_id *cm_id,
  1583. const struct rtrs_msg_conn_req *msg,
  1584. size_t len)
  1585. {
  1586. struct rtrs_srv_ctx *ctx = cm_id->context;
  1587. struct rtrs_srv_path *srv_path;
  1588. struct rtrs_srv_sess *srv;
  1589. u16 version, con_num, cid;
  1590. u16 recon_cnt;
  1591. int err = -ECONNRESET;
  1592. if (len < sizeof(*msg)) {
  1593. pr_err("Invalid RTRS connection request\n");
  1594. goto reject_w_err;
  1595. }
  1596. if (le16_to_cpu(msg->magic) != RTRS_MAGIC) {
  1597. pr_err("Invalid RTRS magic\n");
  1598. goto reject_w_err;
  1599. }
  1600. version = le16_to_cpu(msg->version);
  1601. if (version >> 8 != RTRS_PROTO_VER_MAJOR) {
  1602. pr_err("Unsupported major RTRS version: %d, expected %d\n",
  1603. version >> 8, RTRS_PROTO_VER_MAJOR);
  1604. goto reject_w_err;
  1605. }
  1606. con_num = le16_to_cpu(msg->cid_num);
  1607. if (con_num > 4096) {
  1608. /* Sanity check */
  1609. pr_err("Too many connections requested: %d\n", con_num);
  1610. goto reject_w_err;
  1611. }
  1612. cid = le16_to_cpu(msg->cid);
  1613. if (cid >= con_num) {
  1614. /* Sanity check */
  1615. pr_err("Incorrect cid: %d >= %d\n", cid, con_num);
  1616. goto reject_w_err;
  1617. }
  1618. recon_cnt = le16_to_cpu(msg->recon_cnt);
  1619. srv = get_or_create_srv(ctx, &msg->paths_uuid, msg->first_conn);
  1620. if (IS_ERR(srv)) {
  1621. err = PTR_ERR(srv);
  1622. pr_err("get_or_create_srv(), error %d\n", err);
  1623. goto reject_w_err;
  1624. }
  1625. mutex_lock(&srv->paths_mutex);
  1626. srv_path = __find_path(srv, &msg->sess_uuid);
  1627. if (srv_path) {
  1628. struct rtrs_path *s = &srv_path->s;
  1629. /* Session already holds a reference */
  1630. put_srv(srv);
  1631. if (srv_path->state != RTRS_SRV_CONNECTING) {
  1632. rtrs_err(s, "Session in wrong state: %s\n",
  1633. rtrs_srv_state_str(srv_path->state));
  1634. mutex_unlock(&srv->paths_mutex);
  1635. goto reject_w_err;
  1636. }
  1637. /*
  1638. * Sanity checks
  1639. */
  1640. if (con_num != s->con_num || cid >= s->con_num) {
  1641. rtrs_err(s, "Incorrect request: %d, %d\n",
  1642. cid, con_num);
  1643. mutex_unlock(&srv->paths_mutex);
  1644. goto reject_w_err;
  1645. }
  1646. if (s->con[cid]) {
  1647. rtrs_err(s, "Connection already exists: %d\n",
  1648. cid);
  1649. mutex_unlock(&srv->paths_mutex);
  1650. goto reject_w_err;
  1651. }
  1652. } else {
  1653. srv_path = __alloc_path(srv, cm_id, con_num, recon_cnt,
  1654. &msg->sess_uuid);
  1655. if (IS_ERR(srv_path)) {
  1656. mutex_unlock(&srv->paths_mutex);
  1657. put_srv(srv);
  1658. err = PTR_ERR(srv_path);
  1659. pr_err("RTRS server session allocation failed: %d\n", err);
  1660. goto reject_w_err;
  1661. }
  1662. }
  1663. err = create_con(srv_path, cm_id, cid);
  1664. if (err) {
  1665. rtrs_err((&srv_path->s), "create_con(), error %d\n", err);
  1666. rtrs_rdma_do_reject(cm_id, err);
  1667. /*
  1668. * Since session has other connections we follow normal way
  1669. * through workqueue, but still return an error to tell cma.c
  1670. * to call rdma_destroy_id() for current connection.
  1671. */
  1672. goto close_and_return_err;
  1673. }
  1674. err = rtrs_rdma_do_accept(srv_path, cm_id);
  1675. if (err) {
  1676. rtrs_err((&srv_path->s), "rtrs_rdma_do_accept(), error %d\n", err);
  1677. rtrs_rdma_do_reject(cm_id, err);
  1678. /*
  1679. * Since current connection was successfully added to the
  1680. * session we follow normal way through workqueue to close the
  1681. * session, thus return 0 to tell cma.c we call
  1682. * rdma_destroy_id() ourselves.
  1683. */
  1684. err = 0;
  1685. goto close_and_return_err;
  1686. }
  1687. mutex_unlock(&srv->paths_mutex);
  1688. return 0;
  1689. reject_w_err:
  1690. return rtrs_rdma_do_reject(cm_id, err);
  1691. close_and_return_err:
  1692. mutex_unlock(&srv->paths_mutex);
  1693. close_path(srv_path);
  1694. return err;
  1695. }
  1696. static int rtrs_srv_rdma_cm_handler(struct rdma_cm_id *cm_id,
  1697. struct rdma_cm_event *ev)
  1698. {
  1699. struct rtrs_srv_path *srv_path = NULL;
  1700. struct rtrs_path *s = NULL;
  1701. if (ev->event != RDMA_CM_EVENT_CONNECT_REQUEST) {
  1702. struct rtrs_con *c = cm_id->context;
  1703. s = c->path;
  1704. srv_path = to_srv_path(s);
  1705. }
  1706. switch (ev->event) {
  1707. case RDMA_CM_EVENT_CONNECT_REQUEST:
  1708. /*
  1709. * In case of error cma.c will destroy cm_id,
  1710. * see cma_process_remove()
  1711. */
  1712. return rtrs_rdma_connect(cm_id, ev->param.conn.private_data,
  1713. ev->param.conn.private_data_len);
  1714. case RDMA_CM_EVENT_ESTABLISHED:
  1715. /* Nothing here */
  1716. break;
  1717. case RDMA_CM_EVENT_REJECTED:
  1718. case RDMA_CM_EVENT_CONNECT_ERROR:
  1719. case RDMA_CM_EVENT_UNREACHABLE:
  1720. rtrs_err(s, "CM error (CM event: %s, err: %d)\n",
  1721. rdma_event_msg(ev->event), ev->status);
  1722. fallthrough;
  1723. case RDMA_CM_EVENT_DISCONNECTED:
  1724. case RDMA_CM_EVENT_ADDR_CHANGE:
  1725. case RDMA_CM_EVENT_TIMEWAIT_EXIT:
  1726. case RDMA_CM_EVENT_DEVICE_REMOVAL:
  1727. close_path(srv_path);
  1728. break;
  1729. default:
  1730. pr_err("Ignoring unexpected CM event %s, err %d\n",
  1731. rdma_event_msg(ev->event), ev->status);
  1732. break;
  1733. }
  1734. return 0;
  1735. }
  1736. static struct rdma_cm_id *rtrs_srv_cm_init(struct rtrs_srv_ctx *ctx,
  1737. struct sockaddr *addr,
  1738. enum rdma_ucm_port_space ps)
  1739. {
  1740. struct rdma_cm_id *cm_id;
  1741. int ret;
  1742. cm_id = rdma_create_id(&init_net, rtrs_srv_rdma_cm_handler,
  1743. ctx, ps, IB_QPT_RC);
  1744. if (IS_ERR(cm_id)) {
  1745. ret = PTR_ERR(cm_id);
  1746. pr_err("Creating id for RDMA connection failed, err: %d\n",
  1747. ret);
  1748. goto err_out;
  1749. }
  1750. ret = rdma_bind_addr(cm_id, addr);
  1751. if (ret) {
  1752. pr_err("Binding RDMA address failed, err: %d\n", ret);
  1753. goto err_cm;
  1754. }
  1755. ret = rdma_listen(cm_id, 64);
  1756. if (ret) {
  1757. pr_err("Listening on RDMA connection failed, err: %d\n",
  1758. ret);
  1759. goto err_cm;
  1760. }
  1761. return cm_id;
  1762. err_cm:
  1763. rdma_destroy_id(cm_id);
  1764. err_out:
  1765. return ERR_PTR(ret);
  1766. }
  1767. static int rtrs_srv_rdma_init(struct rtrs_srv_ctx *ctx, u16 port)
  1768. {
  1769. struct sockaddr_in6 sin = {
  1770. .sin6_family = AF_INET6,
  1771. .sin6_addr = IN6ADDR_ANY_INIT,
  1772. .sin6_port = htons(port),
  1773. };
  1774. struct sockaddr_ib sib = {
  1775. .sib_family = AF_IB,
  1776. .sib_sid = cpu_to_be64(RDMA_IB_IP_PS_IB | port),
  1777. .sib_sid_mask = cpu_to_be64(0xffffffffffffffffULL),
  1778. .sib_pkey = cpu_to_be16(0xffff),
  1779. };
  1780. struct rdma_cm_id *cm_ip, *cm_ib;
  1781. int ret;
  1782. /*
  1783. * We accept both IPoIB and IB connections, so we need to keep
  1784. * two cm id's, one for each socket type and port space.
  1785. * If the cm initialization of one of the id's fails, we abort
  1786. * everything.
  1787. */
  1788. cm_ip = rtrs_srv_cm_init(ctx, (struct sockaddr *)&sin, RDMA_PS_TCP);
  1789. if (IS_ERR(cm_ip))
  1790. return PTR_ERR(cm_ip);
  1791. cm_ib = rtrs_srv_cm_init(ctx, (struct sockaddr *)&sib, RDMA_PS_IB);
  1792. if (IS_ERR(cm_ib)) {
  1793. ret = PTR_ERR(cm_ib);
  1794. goto free_cm_ip;
  1795. }
  1796. ctx->cm_id_ip = cm_ip;
  1797. ctx->cm_id_ib = cm_ib;
  1798. return 0;
  1799. free_cm_ip:
  1800. rdma_destroy_id(cm_ip);
  1801. return ret;
  1802. }
  1803. static struct rtrs_srv_ctx *alloc_srv_ctx(struct rtrs_srv_ops *ops)
  1804. {
  1805. struct rtrs_srv_ctx *ctx;
  1806. ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
  1807. if (!ctx)
  1808. return NULL;
  1809. ctx->ops = *ops;
  1810. mutex_init(&ctx->srv_mutex);
  1811. INIT_LIST_HEAD(&ctx->srv_list);
  1812. return ctx;
  1813. }
  1814. static void free_srv_ctx(struct rtrs_srv_ctx *ctx)
  1815. {
  1816. WARN_ON(!list_empty(&ctx->srv_list));
  1817. mutex_destroy(&ctx->srv_mutex);
  1818. kfree(ctx);
  1819. }
  1820. static int rtrs_srv_add_one(struct ib_device *device)
  1821. {
  1822. struct rtrs_srv_ctx *ctx;
  1823. int ret = 0;
  1824. mutex_lock(&ib_ctx.ib_dev_mutex);
  1825. if (ib_ctx.ib_dev_count)
  1826. goto out;
  1827. /*
  1828. * Since our CM IDs are NOT bound to any ib device we will create them
  1829. * only once
  1830. */
  1831. ctx = ib_ctx.srv_ctx;
  1832. ret = rtrs_srv_rdma_init(ctx, ib_ctx.port);
  1833. if (ret) {
  1834. /*
  1835. * We errored out here.
  1836. * According to the ib code, if we encounter an error here then the
  1837. * error code is ignored, and no more calls to our ops are made.
  1838. */
  1839. pr_err("Failed to initialize RDMA connection");
  1840. goto err_out;
  1841. }
  1842. out:
  1843. /*
  1844. * Keep a track on the number of ib devices added
  1845. */
  1846. ib_ctx.ib_dev_count++;
  1847. err_out:
  1848. mutex_unlock(&ib_ctx.ib_dev_mutex);
  1849. return ret;
  1850. }
  1851. static void rtrs_srv_remove_one(struct ib_device *device, void *client_data)
  1852. {
  1853. struct rtrs_srv_ctx *ctx;
  1854. mutex_lock(&ib_ctx.ib_dev_mutex);
  1855. ib_ctx.ib_dev_count--;
  1856. if (ib_ctx.ib_dev_count)
  1857. goto out;
  1858. /*
  1859. * Since our CM IDs are NOT bound to any ib device we will remove them
  1860. * only once, when the last device is removed
  1861. */
  1862. ctx = ib_ctx.srv_ctx;
  1863. rdma_destroy_id(ctx->cm_id_ip);
  1864. rdma_destroy_id(ctx->cm_id_ib);
  1865. out:
  1866. mutex_unlock(&ib_ctx.ib_dev_mutex);
  1867. }
  1868. static struct ib_client rtrs_srv_client = {
  1869. .name = "rtrs_server",
  1870. .add = rtrs_srv_add_one,
  1871. .remove = rtrs_srv_remove_one
  1872. };
  1873. /**
  1874. * rtrs_srv_open() - open RTRS server context
  1875. * @ops: callback functions
  1876. * @port: port to listen on
  1877. *
  1878. * Creates server context with specified callbacks.
  1879. *
  1880. * Return a valid pointer on success otherwise PTR_ERR.
  1881. */
  1882. struct rtrs_srv_ctx *rtrs_srv_open(struct rtrs_srv_ops *ops, u16 port)
  1883. {
  1884. struct rtrs_srv_ctx *ctx;
  1885. int err;
  1886. ctx = alloc_srv_ctx(ops);
  1887. if (!ctx)
  1888. return ERR_PTR(-ENOMEM);
  1889. mutex_init(&ib_ctx.ib_dev_mutex);
  1890. ib_ctx.srv_ctx = ctx;
  1891. ib_ctx.port = port;
  1892. err = ib_register_client(&rtrs_srv_client);
  1893. if (err) {
  1894. free_srv_ctx(ctx);
  1895. return ERR_PTR(err);
  1896. }
  1897. return ctx;
  1898. }
  1899. EXPORT_SYMBOL(rtrs_srv_open);
  1900. static void close_paths(struct rtrs_srv_sess *srv)
  1901. {
  1902. struct rtrs_srv_path *srv_path;
  1903. mutex_lock(&srv->paths_mutex);
  1904. list_for_each_entry(srv_path, &srv->paths_list, s.entry)
  1905. close_path(srv_path);
  1906. mutex_unlock(&srv->paths_mutex);
  1907. }
  1908. static void close_ctx(struct rtrs_srv_ctx *ctx)
  1909. {
  1910. struct rtrs_srv_sess *srv;
  1911. mutex_lock(&ctx->srv_mutex);
  1912. list_for_each_entry(srv, &ctx->srv_list, ctx_list)
  1913. close_paths(srv);
  1914. mutex_unlock(&ctx->srv_mutex);
  1915. flush_workqueue(rtrs_wq);
  1916. }
  1917. /**
  1918. * rtrs_srv_close() - close RTRS server context
  1919. * @ctx: pointer to server context
  1920. *
  1921. * Closes RTRS server context with all client sessions.
  1922. */
  1923. void rtrs_srv_close(struct rtrs_srv_ctx *ctx)
  1924. {
  1925. ib_unregister_client(&rtrs_srv_client);
  1926. mutex_destroy(&ib_ctx.ib_dev_mutex);
  1927. close_ctx(ctx);
  1928. free_srv_ctx(ctx);
  1929. }
  1930. EXPORT_SYMBOL(rtrs_srv_close);
  1931. static int check_module_params(void)
  1932. {
  1933. if (sess_queue_depth < 1 || sess_queue_depth > MAX_SESS_QUEUE_DEPTH) {
  1934. pr_err("Invalid sess_queue_depth value %d, has to be >= %d, <= %d.\n",
  1935. sess_queue_depth, 1, MAX_SESS_QUEUE_DEPTH);
  1936. return -EINVAL;
  1937. }
  1938. if (max_chunk_size < MIN_CHUNK_SIZE || !is_power_of_2(max_chunk_size)) {
  1939. pr_err("Invalid max_chunk_size value %d, has to be >= %d and should be power of two.\n",
  1940. max_chunk_size, MIN_CHUNK_SIZE);
  1941. return -EINVAL;
  1942. }
  1943. /*
  1944. * Check if IB immediate data size is enough to hold the mem_id and the
  1945. * offset inside the memory chunk
  1946. */
  1947. if ((ilog2(sess_queue_depth - 1) + 1) +
  1948. (ilog2(max_chunk_size - 1) + 1) > MAX_IMM_PAYL_BITS) {
  1949. pr_err("RDMA immediate size (%db) not enough to encode %d buffers of size %dB. Reduce 'sess_queue_depth' or 'max_chunk_size' parameters.\n",
  1950. MAX_IMM_PAYL_BITS, sess_queue_depth, max_chunk_size);
  1951. return -EINVAL;
  1952. }
  1953. return 0;
  1954. }
  1955. static int __init rtrs_server_init(void)
  1956. {
  1957. int err;
  1958. pr_info("Loading module %s, proto %s: (max_chunk_size: %d (pure IO %ld, headers %ld) , sess_queue_depth: %d, always_invalidate: %d)\n",
  1959. KBUILD_MODNAME, RTRS_PROTO_VER_STRING,
  1960. max_chunk_size, max_chunk_size - MAX_HDR_SIZE, MAX_HDR_SIZE,
  1961. sess_queue_depth, always_invalidate);
  1962. rtrs_rdma_dev_pd_init(0, &dev_pd);
  1963. err = check_module_params();
  1964. if (err) {
  1965. pr_err("Failed to load module, invalid module parameters, err: %d\n",
  1966. err);
  1967. return err;
  1968. }
  1969. rtrs_dev_class = class_create(THIS_MODULE, "rtrs-server");
  1970. if (IS_ERR(rtrs_dev_class)) {
  1971. err = PTR_ERR(rtrs_dev_class);
  1972. goto out_err;
  1973. }
  1974. rtrs_wq = alloc_workqueue("rtrs_server_wq", 0, 0);
  1975. if (!rtrs_wq) {
  1976. err = -ENOMEM;
  1977. goto out_dev_class;
  1978. }
  1979. return 0;
  1980. out_dev_class:
  1981. class_destroy(rtrs_dev_class);
  1982. out_err:
  1983. return err;
  1984. }
  1985. static void __exit rtrs_server_exit(void)
  1986. {
  1987. destroy_workqueue(rtrs_wq);
  1988. class_destroy(rtrs_dev_class);
  1989. rtrs_rdma_dev_pd_deinit(&dev_pd);
  1990. }
  1991. module_init(rtrs_server_init);
  1992. module_exit(rtrs_server_exit);