summaryrefslogtreecommitdiffstats
path: root/src/plugins/rdma
AgeCommit message (Expand)AuthorFilesLines
2020-05-27ethernet: fix DMAC check and skip unnecessary ones (VPP-1868)John Lo1-4/+13
2020-05-07rdma: fix alignment issueDamjan Marion1-2/+2
2020-05-06rdma: fix clang buildBenoît Ganne1-2/+9
2020-04-27rdma: tx: interleave prefetchesBenoît Ganne1-24/+13
2020-03-31rdma: print device info from PCI VPD in 'show hardware' outputDamjan Marion1-0/+14
2020-03-20rdma: ring db only once per vector on txBenoît Ganne1-28/+44
2020-03-16rdma: optimize tx wqe_initDamjan Marion3-13/+33
2020-03-16rdma: introduce direct verb for Cx4/5 txBenoît Ganne4-73/+549
2020-03-16rdma: add Mellanox mlx5 Direct Verbs receive supportDamjan Marion6-37/+843
2020-03-02rdma: improve rx loopDamjan Marion1-38/+16
2020-03-02rdma: improve refillDamjan Marion1-65/+57
2020-03-02rdma: use per-thread buffer templateDamjan Marion3-5/+25
2020-02-18rdma: fix bug related to ring bufferElias Rudberg1-2/+2
2020-01-08rdma: api: prepare support for direct verbBenoît Ganne7-10/+79
2020-01-08rdma: add FEATURE.yamlBenoît Ganne1-0/+8
2019-12-12rdma: add explicit types in apiOle Troan1-2/+3
2019-11-08rdma: fix next node rx redirectBenoît Ganne1-8/+2
2019-11-08rdma: fix name auto-generation on createBenoît Ganne1-1/+5
2019-10-23rdma: build: fix ibverb compilation testBenoît Ganne1-5/+3
2019-10-16rdma: add rdma APIBenoît Ganne8-29/+401
2019-10-07rdma: fix crash when failing to read pci addr on createBenoît Ganne1-0/+3
2019-10-07rdma: fix crash when failing to detect numa node on createBenoît Ganne1-0/+5
2019-10-06rdma: prevent loopback of broadcast packetsBenoît Ganne1-4/+9
2019-10-05rdma: make sure pci subsystem is initializedBenoît Ganne1-1/+6
2019-10-01rdma: fix non-NULL terminated C-string overflowBenoît Ganne2-3/+3
2019-09-24vlib: add flag to explicitelly mark nodes which can init per-node packet traceDamjan Marion1-0/+1
2019-08-27rdma: fix pending packets check on txBenoît Ganne1-1/+1
2019-08-26rdma: use rings for buffers managementBenoît Ganne5-203/+243
2019-08-19rdma: add support for MAC changesBenoît Ganne2-1/+35
2019-08-19rdma: add support for input feature arcsBenoît Ganne1-29/+35
2019-08-07rdma: add missing symbolsBenoît Ganne1-2/+4
2019-08-06rdma: fix double-free in rdma-txBenoît Ganne2-9/+10
2019-07-23api: binary api cleanupDave Barach1-1/+1
2019-07-18vlib: convert frame_index into real pointersAndreas Schultz1-1/+1
2019-05-24rdma: add support for promiscuous modeBenoît Ganne2-71/+145
2019-05-14rdma: update MAINTAINERS and add docBenoît Ganne1-0/+51
2019-05-03plugins: clean up plugin descriptionsDave Wallace1-1/+1
2019-04-09rdma: add multiqueue supportBenoît Ganne4-76/+170
2019-04-05rdma: more batching, compile rdma-core in release modeBenoît Ganne3-101/+299
2019-04-03rdma: tx: fix stats and add batchingBenoît Ganne1-61/+88
2019-03-29rdma: add option to specify inteface nameDamjan Marion4-2/+12
2019-03-28cmake: add vpp_plugin_find_library macroDamjan Marion1-10/+10
2019-03-28Add RDMA ibverb driver pluginBenoît Ganne8-0/+1401
">vlib_get_buffer (vm, buffer_index); vlib_prefetch_buffer_header (b, STORE); CLIB_PREFETCH (b->data, CLIB_CACHE_LINE_BYTES, STORE); } #if NSTAGES == 2 static STAGE_INLINE uword dispatch_pipeline (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) { u32 *from = vlib_frame_vector_args (frame); u32 n_left_from, n_left_to_next, *to_next, next_index, next0; int pi, pi_limit; n_left_from = frame->n_vectors; next_index = node->cached_next_index; while (n_left_from > 0) { vlib_get_next_frame (vm, node, next_index, to_next, n_left_to_next); pi_limit = clib_min (n_left_from, n_left_to_next); for (pi = 0; pi < NSTAGES - 1; pi++) { if (pi == pi_limit) break; stage0 (vm, node, from[pi]); } for (; pi < pi_limit; pi++) { stage0 (vm, node, from[pi]); to_next[0] = from[pi - 1]; to_next++; n_left_to_next--; next0 = last_stage (vm, node, from[pi - 1]); vlib_validate_buffer_enqueue_x1 (vm, node, next_index, to_next, n_left_to_next, from[pi - 1], next0); n_left_from--; if ((int) n_left_to_next < 0 && n_left_from > 0) vlib_get_next_frame (vm, node, next_index, to_next, n_left_to_next); } for (; pi < (pi_limit + (NSTAGES - 1)); pi++) { if (((pi - 1) >= 0) && ((pi - 1) < pi_limit)) { to_next[0] = from[pi - 1]; to_next++; n_left_to_next--; next0 = last_stage (vm, node, from[pi - 1]); vlib_validate_buffer_enqueue_x1 (vm, node, next_index, to_next, n_left_to_next, from[pi - 1], next0); n_left_from--; if ((int) n_left_to_next < 0 && n_left_from > 0) vlib_get_next_frame (vm, node, next_index, to_next, n_left_to_next); } } vlib_put_next_frame (vm, node, next_index, n_left_to_next); from += pi_limit; } return frame->n_vectors; } #endif #if NSTAGES == 3 static STAGE_INLINE uword dispatch_pipeline (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) { u32 *from = vlib_frame_vector_args (frame); u32 n_left_from, n_left_to_next, *to_next, next_index, next0; int pi, pi_limit; n_left_from = frame->n_vectors; next_index = node->cached_next_index; while (n_left_from > 0) { vlib_get_next_frame (vm, node, next_index, to_next, n_left_to_next); pi_limit = clib_min (n_left_from, n_left_to_next); for (pi = 0; pi < NSTAGES - 1; pi++) { if (pi == pi_limit) break; stage0 (vm, node, from[pi]); if (pi - 1 >= 0) stage1 (vm, node, from[pi - 1]); } for (; pi < pi_limit; pi++) { stage0 (vm, node, from[pi]); stage1 (vm, node, from[pi - 1]); to_next[0] = from[pi - 2]; to_next++; n_left_to_next--; next0 = last_stage (vm, node, from[pi - 2]); vlib_validate_buffer_enqueue_x1 (vm, node, next_index, to_next, n_left_to_next, from[pi - 2], next0); n_left_from--; if ((int) n_left_to_next < 0 && n_left_from > 0) vlib_get_next_frame (vm, node, next_index, to_next, n_left_to_next); } for (; pi < (pi_limit + (NSTAGES - 1)); pi++) { if (((pi - 1) >= 0) && ((pi - 1) < pi_limit)) stage1 (vm, node, from[pi - 1]); if (((pi - 2) >= 0) && ((pi - 2) < pi_limit)) { to_next[0] = from[pi - 2]; to_next++; n_left_to_next--; next0 = last_stage (vm, node, from[pi - 2]); vlib_validate_buffer_enqueue_x1 (vm, node, next_index, to_next, n_left_to_next, from[pi - 2], next0); n_left_from--; if ((int) n_left_to_next < 0 && n_left_from > 0) vlib_get_next_frame (vm, node, next_index, to_next, n_left_to_next); } } vlib_put_next_frame (vm, node, next_index, n_left_to_next); from += pi_limit; } return frame->n_vectors; } #endif #if NSTAGES == 4 static STAGE_INLINE uword dispatch_pipeline (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) { u32 *from = vlib_frame_vector_args (frame); u32 n_left_from, n_left_to_next, *to_next, next_index, next0; int pi, pi_limit; n_left_from = frame->n_vectors; next_index = node->cached_next_index; while (n_left_from > 0) { vlib_get_next_frame (vm, node, next_index, to_next, n_left_to_next); pi_limit = clib_min (n_left_from, n_left_to_next); for (pi = 0; pi < NSTAGES - 1; pi++) { if (pi == pi_limit) break; stage0 (vm, node, from[pi]); if (pi - 1 >= 0) stage1 (vm, node, from[pi - 1]); if (pi - 2 >= 0) stage2 (vm, node, from[pi - 2]); } for (; pi < pi_limit; pi++) { stage0 (vm, node, from[pi]); stage1 (vm, node, from[pi - 1]); stage2 (vm, node, from[pi - 2]); to_next[0] = from[pi - 3]; to_next++; n_left_to_next--; next0 = last_stage (vm, node, from[pi - 3]); vlib_validate_buffer_enqueue_x1 (vm, node, next_index, to_next, n_left_to_next, from[pi - 3], next0); n_left_from--; if ((int) n_left_to_next < 0 && n_left_from > 0) vlib_get_next_frame (vm, node, next_index, to_next, n_left_to_next); } for (; pi < (pi_limit + (NSTAGES - 1)); pi++) { if (((pi - 1) >= 0) && ((pi - 1) < pi_limit)) stage1 (vm, node, from[pi - 1]); if (((pi - 2) >= 0) && ((pi - 2) < pi_limit)) stage2 (vm, node, from[pi - 2]); if (((pi - 3) >= 0) && ((pi - 3) < pi_limit)) { to_next[0] = from[pi - 3]; to_next++; n_left_to_next--; next0 = last_stage (vm, node, from[pi - 3]); vlib_validate_buffer_enqueue_x1 (vm, node, next_index, to_next, n_left_to_next, from[pi - 3], next0); n_left_from--; if ((int) n_left_to_next < 0 && n_left_from > 0) vlib_get_next_frame (vm, node, next_index, to_next, n_left_to_next); } } vlib_put_next_frame (vm, node, next_index, n_left_to_next); from += pi_limit; } return frame->n_vectors; } #endif #if NSTAGES == 5 static STAGE_INLINE uword dispatch_pipeline (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) { u32 *from = vlib_frame_vector_args (frame); u32 n_left_from, n_left_to_next, *to_next, next_index, next0; int pi, pi_limit; n_left_from = frame->n_vectors; next_index = node->cached_next_index; while (n_left_from > 0) { vlib_get_next_frame (vm, node, next_index, to_next, n_left_to_next); pi_limit = clib_min (n_left_from, n_left_to_next); for (pi = 0; pi < NSTAGES - 1; pi++) { if (pi == pi_limit) break; stage0 (vm, node, from[pi]); if (pi - 1 >= 0) stage1 (vm, node, from[pi - 1]); if (pi - 2 >= 0) stage2 (vm, node, from[pi - 2]); if (pi - 3 >= 0) stage3 (vm, node, from[pi - 3]); } for (; pi < pi_limit; pi++) { stage0 (vm, node, from[pi]); stage1 (vm, node, from[pi - 1]); stage2 (vm, node, from[pi - 2]); stage3 (vm, node, from[pi - 3]); to_next[0] = from[pi - 4]; to_next++; n_left_to_next--; next0 = last_stage (vm, node, from[pi - 4]); vlib_validate_buffer_enqueue_x1 (vm, node, next_index, to_next, n_left_to_next, from[pi - 4], next0); n_left_from--; if ((int) n_left_to_next < 0 && n_left_from > 0) vlib_get_next_frame (vm, node, next_index, to_next, n_left_to_next); } for (; pi < (pi_limit + (NSTAGES - 1)); pi++) { if (((pi - 1) >= 0) && ((pi - 1) < pi_limit)) stage1 (vm, node, from[pi - 1]); if (((pi - 2) >= 0) && ((pi - 2) < pi_limit)) stage2 (vm, node, from[pi - 2]); if (((pi - 3) >= 0) && ((pi - 3) < pi_limit)) stage3 (vm, node, from[pi - 3]); if (((pi - 4) >= 0) && ((pi - 4) < pi_limit)) { to_next[0] = from[pi - 4]; to_next++; n_left_to_next--; next0 = last_stage (vm, node, from[pi - 4]); vlib_validate_buffer_enqueue_x1 (vm, node, next_index, to_next, n_left_to_next, from[pi - 4], next0); n_left_from--; if ((int) n_left_to_next < 0 && n_left_from > 0) vlib_get_next_frame (vm, node, next_index, to_next, n_left_to_next); } } vlib_put_next_frame (vm, node, next_index, n_left_to_next); from += pi_limit; } return frame->n_vectors; } #endif #if NSTAGES == 6 static STAGE_INLINE uword dispatch_pipeline (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) { u32 *from = vlib_frame_vector_args (frame); u32 n_left_from, n_left_to_next, *to_next, next_index, next0; int pi, pi_limit; n_left_from = frame->n_vectors; next_index = node->cached_next_index; while (n_left_from > 0) { vlib_get_next_frame (vm, node, next_index, to_next, n_left_to_next); pi_limit = clib_min (n_left_from, n_left_to_next); for (pi = 0; pi < NSTAGES - 1; pi++) { if (pi == pi_limit) break; stage0 (vm, node, from[pi]); if (pi - 1 >= 0) stage1 (vm, node, from[pi - 1]); if (pi - 2 >= 0) stage2 (vm, node, from[pi - 2]); if (pi - 3 >= 0) stage3 (vm, node, from[pi - 3]); if (pi - 4 >= 0) stage4 (vm, node, from[pi - 4]); } for (; pi < pi_limit; pi++) { stage0 (vm, node, from[pi]); stage1 (vm, node, from[pi - 1]); stage2 (vm, node, from[pi - 2]); stage3 (vm, node, from[pi - 3]); stage4 (vm, node, from[pi - 4]); to_next[0] = from[pi - 5]; to_next++; n_left_to_next--; next0 = last_stage (vm, node, from[pi - 5]); vlib_validate_buffer_enqueue_x1 (vm, node, next_index, to_next, n_left_to_next, from[pi - 5], next0); n_left_from--; if ((int) n_left_to_next < 0 && n_left_from > 0) vlib_get_next_frame (vm, node, next_index, to_next, n_left_to_next); } for (; pi < (pi_limit + (NSTAGES - 1)); pi++) { if (((pi - 1) >= 0) && ((pi - 1) < pi_limit)) stage1 (vm, node, from[pi - 1]); if (((pi - 2) >= 0) && ((pi - 2) < pi_limit)) stage2 (vm, node, from[pi - 2]); if (((pi - 3) >= 0) && ((pi - 3) < pi_limit)) stage3 (vm, node, from[pi - 3]); if (((pi - 4) >= 0) && ((pi - 4) < pi_limit)) stage4 (vm, node, from[pi - 4]); if (((pi - 5) >= 0) && ((pi - 5) < pi_limit)) { to_next[0] = from[pi - 5]; to_next++; n_left_to_next--; next0 = last_stage (vm, node, from[pi - 5]); vlib_validate_buffer_enqueue_x1 (vm, node, next_index, to_next, n_left_to_next, from[pi - 5], next0); n_left_from--; if ((int) n_left_to_next < 0 && n_left_from > 0) vlib_get_next_frame (vm, node, next_index, to_next, n_left_to_next); } } vlib_put_next_frame (vm, node, next_index, n_left_to_next); from += pi_limit; } return frame->n_vectors; } #endif /* * fd.io coding-style-patch-verification: ON * * Local Variables: * eval: (c-set-style "gnu") * End: */