Hello community, here is the log from the commit of package rdma-core for openSUSE:Factory checked in at 2019-11-28 10:12:44 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/rdma-core (Old) and /work/SRC/openSUSE:Factory/.rdma-core.new.26869 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "rdma-core" Thu Nov 28 10:12:44 2019 rev:35 rq:750978 version:26.1 Changes: -------- --- /work/SRC/openSUSE:Factory/rdma-core/rdma-core.changes 2019-11-15 22:31:56.220082268 +0100 +++ /work/SRC/openSUSE:Factory/.rdma-core.new.26869/rdma-core.changes 2019-11-28 10:13:19.571636683 +0100 @@ -1,0 +2,7 @@ +Mon Nov 25 15:59:01 UTC 2019 - Nicolas Morey-Chaisemartin <[email protected]> + +- Update to rdma-core v26.1 (jsc#SLE-8388, jsc#SLE-8394, jsc#SLE-8463, jsc#SLE-8399, + jsc#SLE-8254, jsc#SLE-9840, jsc#SLE-9763, jsc#SLE-9925, jsc#SLE-9846, jsc#SLE-9913, + jsc#SLE-9729, jsc#SLE-8666) + +------------------------------------------------------------------- Old: ---- rdma-core-25.1.0.1841d48eec9d.tar.gz New: ---- rdma-core-26.1.0.9f820de9ca7d.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ rdma-core.spec ++++++ --- /var/tmp/diff_new_pack.RaBYpF/_old 2019-11-28 10:13:20.039636688 +0100 +++ /var/tmp/diff_new_pack.RaBYpF/_new 2019-11-28 10:13:20.043636688 +0100 @@ -1,7 +1,7 @@ # # spec file for package rdma-core # -# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2019 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -21,9 +21,9 @@ %define with_static 0 %define with_pyverbs 1 -%define git_ver .0.1841d48eec9d +%define git_ver .0.9f820de9ca7d Name: rdma-core -Version: 25.1 +Version: 26.1 Release: 0 Summary: RDMA core userspace libraries and daemons License: GPL-2.0-only OR BSD-2-Clause @@ -53,7 +53,7 @@ # providers/ipathverbs/ Dual licensed using a BSD license with an extra patent clause # providers/rxe/ Incorporates code from ipathverbs and contains the patent clause # providers/hfi1verbs Uses the 3 Clause BSD license -Url: https://github.com/linux-rdma/rdma-core +URL: https://github.com/linux-rdma/rdma-core Source: rdma-core-%{version}%{git_ver}.tar.gz Source1: baselibs.conf Source2: post_download.sh ++++++ _service ++++++ --- /var/tmp/diff_new_pack.RaBYpF/_old 2019-11-28 10:13:20.063636689 +0100 +++ /var/tmp/diff_new_pack.RaBYpF/_new 2019-11-28 10:13:20.063636689 +0100 @@ -8,7 +8,7 @@ <param name="versionformat">@PARENT_TAG@.@TAG_OFFSET@.%h</param> <param name="versionrewrite-pattern">v(.*)</param> <param name="versionrewrite-replacement">\1</param> - <param name="revision">1841d48eec9d845daef961ac21795e5493a376ff</param> + <param name="revision">9f820de9ca7d6e315be92bc830d354afad3e7960</param> <param name="extract">suse/rdma-core.spec</param> </service> <service name="recompress" mode="disabled"> ++++++ prebuilt-pandoc.tgz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pandoc-prebuilt/1f29cba8dff53abad8ec97b9d45e06dd2bef8845 new/pandoc-prebuilt/1f29cba8dff53abad8ec97b9d45e06dd2bef8845 --- old/pandoc-prebuilt/1f29cba8dff53abad8ec97b9d45e06dd2bef8845 2019-09-26 16:11:43.775549954 +0200 +++ new/pandoc-prebuilt/1f29cba8dff53abad8ec97b9d45e06dd2bef8845 1970-01-01 01:00:00.000000000 +0100 @@ -1,451 +0,0 @@ -.\"t -.\" Automatically generated by Pandoc 2.7.3 -.\" -.TH "IBV_WR API" "3" "2018-11-27" "libibverbs" "Libibverbs Programmer\[cq]s Manual" -.hy -.SH NAME -.PP -ibv_wr_abort, ibv_wr_complete, ibv_wr_start - Manage regions allowed to -post work -.PP -ibv_wr_atomic_cmp_swp, ibv_wr_atomic_fetch_add - Post remote atomic -operation work requests -.PP -ibv_wr_bind_mw, ibv_wr_local_inv - Post work requests for memory windows -.PP -ibv_wr_rdma_read, ibv_wr_rdma_write, ibv_wr_rdma_write_imm - Post RDMA -work requests -.PP -ibv_wr_send, ibv_wr_send_imm, ibv_wr_send_inv - Post send work requests -.PP -ibv_wr_send_tso - Post segmentation offload work requests -.PP -ibv_wr_set_inline_data, ibv_wr_set_inline_data_list - Attach inline data -to the last work request -.PP -ibv_wr_set_sge, ibv_wr_set_sge_list - Attach data to the last work -request -.PP -ibv_wr_set_ud_addr - Attach UD addressing info to the last work request -.PP -ibv_wr_set_xrc_srqn - Attach an XRC SRQN to the last work request -.SH SYNOPSIS -.IP -.nf -\f[C] -#include <infiniband/verbs.h> - -void ibv_wr_abort(struct ibv_qp_ex *qp); -int ibv_wr_complete(struct ibv_qp_ex *qp); -void ibv_wr_start(struct ibv_qp_ex *qp); - -void ibv_wr_atomic_cmp_swp(struct ibv_qp_ex *qp, uint32_t rkey, - uint64_t remote_addr, uint64_t compare, - uint64_t swap); -void ibv_wr_atomic_fetch_add(struct ibv_qp_ex *qp, uint32_t rkey, - uint64_t remote_addr, uint64_t add); - -void ibv_wr_bind_mw(struct ibv_qp_ex *qp, struct ibv_mw *mw, uint32_t rkey, - const struct ibv_mw_bind_info *bind_info); -void ibv_wr_local_inv(struct ibv_qp_ex *qp, uint32_t invalidate_rkey); - -void ibv_wr_rdma_read(struct ibv_qp_ex *qp, uint32_t rkey, - uint64_t remote_addr); -void ibv_wr_rdma_write(struct ibv_qp_ex *qp, uint32_t rkey, - uint64_t remote_addr); -void ibv_wr_rdma_write_imm(struct ibv_qp_ex *qp, uint32_t rkey, - uint64_t remote_addr, __be32 imm_data); - -void ibv_wr_send(struct ibv_qp_ex *qp); -void ibv_wr_send_imm(struct ibv_qp_ex *qp, __be32 imm_data); -void ibv_wr_send_inv(struct ibv_qp_ex *qp, uint32_t invalidate_rkey); -void ibv_wr_send_tso(struct ibv_qp_ex *qp, void *hdr, uint16_t hdr_sz, - uint16_t mss); - -void ibv_wr_set_inline_data(struct ibv_qp_ex *qp, void *addr, size_t length); -void ibv_wr_set_inline_data_list(struct ibv_qp_ex *qp, size_t num_buf, - const struct ibv_data_buf *buf_list); -void ibv_wr_set_sge(struct ibv_qp_ex *qp, uint32_t lkey, uint64_t addr, - uint32_t length); -void ibv_wr_set_sge_list(struct ibv_qp_ex *qp, size_t num_sge, - const struct ibv_sge *sg_list); - -void ibv_wr_set_ud_addr(struct ibv_qp_ex *qp, struct ibv_ah *ah, - uint32_t remote_qpn, uint32_t remote_qkey); -void ibv_wr_set_xrc_srqn(struct ibv_qp_ex *qp, uint32_t remote_srqn); -\f[R] -.fi -.SH DESCRIPTION -.PP -The verbs work request API (ibv_wr_*) allows efficient posting of work -to a send queue using function calls instead of the struct based -\f[I]ibv_post_send()\f[R] scheme. -This approach is designed to minimize CPU branching and locking during -the posting process. -.PP -This API is intended to be used to access additional functionality -beyond what is provided by \f[I]ibv_post_send()\f[R]. -.PP -WRs batches of \f[I]ibv_post_send()\f[R] and this API WRs batches can -interleave together just if they are not posted within the critical -region of each other. -(A critical region in this API formed by \f[I]ibv_wr_start()\f[R] and -\f[I]ibv_wr_complete()\f[R]/\f[I]ibv_wr_abort()\f[R]) -.SH USAGE -.PP -To use these APIs the QP must be created using ibv_create_qp_ex() which -allows setting the \f[B]IBV_QP_INIT_ATTR_SEND_OPS_FLAGS\f[R] in -\f[I]comp_mask\f[R]. -The \f[I]send_ops_flags\f[R] should be set to the OR of the work request -types that will be posted to the QP. -.PP -If the QP does not support all the requested work request types then QP -creation will fail. -.PP -Posting work requests to the QP is done within the critical region -formed by \f[I]ibv_wr_start()\f[R] and -\f[I]ibv_wr_complete()\f[R]/\f[I]ibv_wr_abort()\f[R] (see CONCURRENCY -below). -.PP -Each work request is created by calling a WR builder function (see the -table column WR builder below) to start creating the work request, -followed by allowed/required setter functions described below. -.PP -The WR builder and setter combination can be called multiple times to -efficiently post multiple work requests within a single critical region. -.PP -Each WR builder will use the \f[I]wr_id\f[R] member of \f[I]struct -ibv_qp_ex\f[R] to set the value to be returned in the completion. -Some operations will also use the \f[I]wr_flags\f[R] member to influence -operation (see Flags below). -These values should be set before invoking the WR builder function. -.PP -For example a simple send could be formed as follows: -.IP -.nf -\f[C] -qpx->wr_id = 1; -ibv_wr_send(qpx); -ibv_wr_set_sge(qpx, lkey, &data, sizeof(data)); -\f[R] -.fi -.PP -The section WORK REQUESTS describes the various WR builders and setters -in details. -.PP -Posting work is completed by calling \f[I]ibv_wr_complete()\f[R] or -\f[I]ibv_wr_abort()\f[R]. -No work is executed to the queue until \f[I]ibv_wr_complete()\f[R] -returns success. -\f[I]ibv_wr_abort()\f[R] will discard all work prepared since -\f[I]ibv_wr_start()\f[R]. -.SH WORK REQUESTS -.PP -Many of the operations match the opcodes available for -\f[I]ibv_post_send()\f[R]. -Each operation has a WR builder function, a list of allowed setters, and -a flag bit to request the operation with \f[I]send_ops_flags\f[R] in -\f[I]struct ibv_qp_init_attr_ex\f[R] (see the EXAMPLE below). -.PP -.TS -tab(@); -l l l l. -T{ -Operation -T}@T{ -WR builder -T}@T{ -QP Type Supported -T}@T{ -setters -T} -_ -T{ -ATOMIC_CMP_AND_SWP -T}@T{ -ibv_wr_atomic_cmp_swp() -T}@T{ -RC, XRC_SEND -T}@T{ -DATA, QP -T} -T{ -ATOMIC_FETCH_AND_ADD -T}@T{ -ibv_wr_atomic_fetch_add() -T}@T{ -RC, XRC_SEND -T}@T{ -DATA, QP -T} -T{ -BIND_MW -T}@T{ -ibv_wr_bind_mw() -T}@T{ -UC, RC, XRC_SEND -T}@T{ -NONE -T} -T{ -LOCAL_INV -T}@T{ -ibv_wr_local_inv() -T}@T{ -UC, RC, XRC_SEND -T}@T{ -NONE -T} -T{ -RDMA_READ -T}@T{ -ibv_wr_rdma_read() -T}@T{ -RC, XRC_SEND -T}@T{ -DATA, QP -T} -T{ -RDMA_WRITE -T}@T{ -ibv_wr_rdma_write() -T}@T{ -UC, RC, XRC_SEND -T}@T{ -DATA, QP -T} -T{ -RDMA_WRITE_WITH_IMM -T}@T{ -ibv_wr_rdma_write_imm() -T}@T{ -UC, RC, XRC_SEND -T}@T{ -DATA, QP -T} -T{ -SEND -T}@T{ -ibv_wr_send() -T}@T{ -UD, UC, RC, XRC_SEND, RAW_PACKET -T}@T{ -DATA, QP -T} -T{ -SEND_WITH_IMM -T}@T{ -ibv_wr_send_imm() -T}@T{ -UD, UC, RC, SRC SEND -T}@T{ -DATA, QP -T} -T{ -SEND_WITH_INV -T}@T{ -ibv_wr_send_inv() -T}@T{ -UC, RC, XRC_SEND -T}@T{ -DATA, QP -T} -T{ -TSO -T}@T{ -ibv_wr_send_tso() -T}@T{ -UD, RAW_PACKET -T}@T{ -DATA, QP -T} -.TE -.SS Atomic operations -.PP -Atomic operations are only atomic so long as all writes to memory go -only through the same RDMA hardware. -It is not atomic with writes performed by the CPU, or by other RDMA -hardware in the system. -.TP -.B \f[I]ibv_wr_atomic_cmp_swp()\f[R] -If the remote 64 bit memory location specified by \f[I]rkey\f[R] and -\f[I]remote_addr\f[R] equals \f[I]compare\f[R] then set it to -\f[I]swap\f[R]. -.TP -.B \f[I]ibv_wr_atomic_fetch_add()\f[R] -Add \f[I]add\f[R] to the 64 bit memory location specified \f[I]rkey\f[R] -and \f[I]remote_addr\f[R]. -.SS Memory Windows -.PP -Memory window type 2 operations (See man page for ibv_alloc_mw). -.TP -.B \f[I]ibv_wr_bind_mw()\f[R] -Bind a MW type 2 specified by \f[B]mw\f[R], set a new \f[B]rkey\f[R] and -set its properties by \f[B]bind_info\f[R]. -.TP -.B \f[I]ibv_wr_local_inv()\f[R] -Invalidate a MW type 2 which is associated with \f[B]rkey\f[R]. -.SS RDMA -.TP -.B \f[I]ibv_wr_rdma_read()\f[R] -Read from the remote memory location specified \f[I]rkey\f[R] and -\f[I]remote_addr\f[R]. -The number of bytes to read, and the local location to store the data, -is determined by the DATA buffers set after this call. -.TP -.B \f[I]ibv_wr_rdma_write()\f[R], \f[I]ibv_wr_rdma_write_imm()\f[R] -Write to the remote memory location specified \f[I]rkey\f[R] and -\f[I]remote_addr\f[R]. -The number of bytes to read, and the local location to get the data, is -determined by the DATA buffers set after this call. -.RS -.PP -The _imm version causes the remote side to get a -IBV_WC_RECV_RDMA_WITH_IMM containing the 32 bits of immediate data. -.RE -.SS Message Send -.TP -.B \f[I]ibv_wr_send()\f[R], \f[I]ibv_wr_send_imm()\f[R] -Send a message. -The number of bytes to send, and the local location to get the data, is -determined by the DATA buffers set after this call. -.RS -.PP -The _imm version causes the remote side to get a -IBV_WC_RECV_RDMA_WITH_IMM containing the 32 bits of immediate data. -.RE -.TP -.B \f[I]ibv_wr_send_inv()\f[R] -The data transfer is the same as for \f[I]ibv_wr_send()\f[R], however -the remote side will invalidate the MR specified by -\f[I]invalidate_rkey\f[R] before delivering a completion. -.TP -.B \f[I]ibv_wr_send_tso()\f[R] -Produce multiple SEND messages using TCP Segmentation Offload. -The SGE points to a TCP Stream buffer which will be segmented into MSS -size SENDs. -The hdr includes the entire network headers up to and including the TCP -header and is prefixed before each segment. -.SS QP Specific setters -.PP -Certain QP types require each post to be accompanied by additional -setters, these setters are mandatory for any operation listing a QP -setter in the above table. -.TP -.B \f[I]UD\f[R] QPs -\f[I]ibv_wr_set_ud_addr()\f[R] must be called to set the destination -address of the work. -.TP -.B \f[I]XRC_SEND\f[R] QPs -\f[I]ibv_wr_set_xrc_srqn()\f[R] must be called to set the destination -SRQN field. -.SS DATA transfer setters -.PP -For work that requires to transfer data one of the following setters -should be called once after the WR builder: -.TP -.B \f[I]ibv_wr_set_sge()\f[R] -Transfer data to/from a single buffer given by the lkey, addr and -length. -This is equivalent to \f[I]ibv_wr_set_sge_list()\f[R] with a single -element. -.TP -.B \f[I]ibv_wr_set_sge_list()\f[R] -Transfer data to/from a list of buffers, logically concatenated -together. -Each buffer is specified by an element in an array of \f[I]struct -ibv_sge\f[R]. -.PP -Inline setters will copy the send data during the setter and allows the -caller to immediately re-use the buffer. -This behavior is identical to the IBV_SEND_INLINE flag. -Generally this copy is done in a way that optimizes SEND latency and is -suitable for small messages. -The provider will limit the amount of data it can support in a single -operation. -This limit is requested in the \f[I]max_inline_data\f[R] member of -\f[I]struct ibv_qp_init_attr\f[R]. -Valid only for SEND and RDMA_WRITE. -.TP -.B \f[I]ibv_wr_set_inline_data()\f[R] -Copy send data from a single buffer given by the addr and length. -This is equivalent to \f[I]ibv_wr_set_inline_data_list()\f[R] with a -single element. -.TP -.B \f[I]ibv_wr_set_inline_data_list()\f[R] -Copy send data from a list of buffers, logically concatenated together. -Each buffer is specified by an element in an array of \f[I]struct -ibv_inl_data\f[R]. -.SS Flags -.PP -A bit mask of flags may be specified in \f[I]wr_flags\f[R] to control -the behavior of the work request. -.TP -.B \f[B]IBV_SEND_FENCE\f[R] -Do not start this work request until prior work has completed. -.TP -.B \f[B]IBV_SEND_IP_CSUM\f[R] -Offload the IPv4 and TCP/UDP checksum calculation -.TP -.B \f[B]IBV_SEND_SIGNALED\f[R] -A completion will be generated in the completion queue for the -operation. -.TP -.B \f[B]IBV_SEND_SOLICTED\f[R] -Set the solicted bit in the RDMA packet. -This informs the other side to generate a completion event upon -receiving the RDMA operation. -.SH CONCURRENCY -.PP -The provider will provide locking to ensure that -\f[I]ibv_wr_start()\f[R] and \f[I]ibv_wr_complete()/abort()\f[R] form a -per-QP critical section where no other threads can enter. -.PP -If an \f[I]ibv_td\f[R] is provided during QP creation then no locking -will be performed and it is up to the caller to ensure that only one -thread can be within the critical region at a time. -.SH RETURN VALUE -.PP -Applications should use this API in a way that does not create failures. -The individual APIs do not return a failure indication to avoid -branching. -.PP -If a failure is detected during operation, for instance due to an -invalid argument, then \f[I]ibv_wr_complete()\f[R] will return failure -and the entire posting will be aborted. -.SH EXAMPLE -.IP -.nf -\f[C] -/* create RC QP type and specify the required send opcodes */ -qp_init_attr_ex.qp_type = IBV_QPT_RC; -qp_init_attr_ex.comp_mask |= IBV_QP_INIT_ATTR_SEND_OPS_FLAGS; -qp_init_attr_ex.send_ops_flags |= IBV_QP_EX_WITH_RDMA_WRITE; -qp_init_attr_ex.send_ops_flags |= IBV_QP_EX_WITH_RDMA_WRITE_WITH_IMM; - -ibv_qp *qp = ibv_create_qp_ex(ctx, qp_init_attr_ex); -ibv_qp_ex *qpx = ibv_qp_to_qp_ex(qp); - -ibv_wr_start(qpx); - -/* create 1st WRITE WR entry */ -qpx->wr_id = my_wr_id_1; -ibv_wr_rdma_write(qpx, rkey, remote_addr_1); -ibv_wr_set_sge(qpx, lkey, local_addr_1, length_1); - -/* create 2nd WRITE_WITH_IMM WR entry */ -qpx->wr_id = my_wr_id_2; -qpx->send_flags = IBV_SEND_SIGNALED; -ibv_wr_rdma_write_imm(qpx, rkey, remote_addr_2, htonl(0x1234)); -ibv_set_wr_sge(qpx, lkey, local_addr_2, length_2); - -/* Begin processing WRs */ -ret = ibv_wr_complete(qpx); -\f[R] -.fi -.SH SEE ALSO -.PP -\f[B]ibv_post_send\f[R](3), \f[B]ibv_create_qp_ex(3)\f[R]. -.SH AUTHOR -.PP -Jason Gunthorpe <[email protected]> Guy Levi <[email protected]> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pandoc-prebuilt/42f038a5f87713ae1079c61615b27d0a41336faa new/pandoc-prebuilt/42f038a5f87713ae1079c61615b27d0a41336faa --- old/pandoc-prebuilt/42f038a5f87713ae1079c61615b27d0a41336faa 1970-01-01 01:00:00.000000000 +0100 +++ new/pandoc-prebuilt/42f038a5f87713ae1079c61615b27d0a41336faa 2019-11-26 10:18:32.983504177 +0100 @@ -0,0 +1,451 @@ +.\"t +.\" Automatically generated by Pandoc 2.7.3 +.\" +.TH "IBV_WR API" "3" "2018-11-27" "libibverbs" "Libibverbs Programmer\[cq]s Manual" +.hy +.SH NAME +.PP +ibv_wr_abort, ibv_wr_complete, ibv_wr_start - Manage regions allowed to +post work +.PP +ibv_wr_atomic_cmp_swp, ibv_wr_atomic_fetch_add - Post remote atomic +operation work requests +.PP +ibv_wr_bind_mw, ibv_wr_local_inv - Post work requests for memory windows +.PP +ibv_wr_rdma_read, ibv_wr_rdma_write, ibv_wr_rdma_write_imm - Post RDMA +work requests +.PP +ibv_wr_send, ibv_wr_send_imm, ibv_wr_send_inv - Post send work requests +.PP +ibv_wr_send_tso - Post segmentation offload work requests +.PP +ibv_wr_set_inline_data, ibv_wr_set_inline_data_list - Attach inline data +to the last work request +.PP +ibv_wr_set_sge, ibv_wr_set_sge_list - Attach data to the last work +request +.PP +ibv_wr_set_ud_addr - Attach UD addressing info to the last work request +.PP +ibv_wr_set_xrc_srqn - Attach an XRC SRQN to the last work request +.SH SYNOPSIS +.IP +.nf +\f[C] +#include <infiniband/verbs.h> + +void ibv_wr_abort(struct ibv_qp_ex *qp); +int ibv_wr_complete(struct ibv_qp_ex *qp); +void ibv_wr_start(struct ibv_qp_ex *qp); + +void ibv_wr_atomic_cmp_swp(struct ibv_qp_ex *qp, uint32_t rkey, + uint64_t remote_addr, uint64_t compare, + uint64_t swap); +void ibv_wr_atomic_fetch_add(struct ibv_qp_ex *qp, uint32_t rkey, + uint64_t remote_addr, uint64_t add); + +void ibv_wr_bind_mw(struct ibv_qp_ex *qp, struct ibv_mw *mw, uint32_t rkey, + const struct ibv_mw_bind_info *bind_info); +void ibv_wr_local_inv(struct ibv_qp_ex *qp, uint32_t invalidate_rkey); + +void ibv_wr_rdma_read(struct ibv_qp_ex *qp, uint32_t rkey, + uint64_t remote_addr); +void ibv_wr_rdma_write(struct ibv_qp_ex *qp, uint32_t rkey, + uint64_t remote_addr); +void ibv_wr_rdma_write_imm(struct ibv_qp_ex *qp, uint32_t rkey, + uint64_t remote_addr, __be32 imm_data); + +void ibv_wr_send(struct ibv_qp_ex *qp); +void ibv_wr_send_imm(struct ibv_qp_ex *qp, __be32 imm_data); +void ibv_wr_send_inv(struct ibv_qp_ex *qp, uint32_t invalidate_rkey); +void ibv_wr_send_tso(struct ibv_qp_ex *qp, void *hdr, uint16_t hdr_sz, + uint16_t mss); + +void ibv_wr_set_inline_data(struct ibv_qp_ex *qp, void *addr, size_t length); +void ibv_wr_set_inline_data_list(struct ibv_qp_ex *qp, size_t num_buf, + const struct ibv_data_buf *buf_list); +void ibv_wr_set_sge(struct ibv_qp_ex *qp, uint32_t lkey, uint64_t addr, + uint32_t length); +void ibv_wr_set_sge_list(struct ibv_qp_ex *qp, size_t num_sge, + const struct ibv_sge *sg_list); + +void ibv_wr_set_ud_addr(struct ibv_qp_ex *qp, struct ibv_ah *ah, + uint32_t remote_qpn, uint32_t remote_qkey); +void ibv_wr_set_xrc_srqn(struct ibv_qp_ex *qp, uint32_t remote_srqn); +\f[R] +.fi +.SH DESCRIPTION +.PP +The verbs work request API (ibv_wr_*) allows efficient posting of work +to a send queue using function calls instead of the struct based +\f[I]ibv_post_send()\f[R] scheme. +This approach is designed to minimize CPU branching and locking during +the posting process. +.PP +This API is intended to be used to access additional functionality +beyond what is provided by \f[I]ibv_post_send()\f[R]. +.PP +WRs batches of \f[I]ibv_post_send()\f[R] and this API WRs batches can +interleave together just if they are not posted within the critical +region of each other. +(A critical region in this API formed by \f[I]ibv_wr_start()\f[R] and +\f[I]ibv_wr_complete()\f[R]/\f[I]ibv_wr_abort()\f[R]) +.SH USAGE +.PP +To use these APIs the QP must be created using ibv_create_qp_ex() which +allows setting the \f[B]IBV_QP_INIT_ATTR_SEND_OPS_FLAGS\f[R] in +\f[I]comp_mask\f[R]. +The \f[I]send_ops_flags\f[R] should be set to the OR of the work request +types that will be posted to the QP. +.PP +If the QP does not support all the requested work request types then QP +creation will fail. +.PP +Posting work requests to the QP is done within the critical region +formed by \f[I]ibv_wr_start()\f[R] and +\f[I]ibv_wr_complete()\f[R]/\f[I]ibv_wr_abort()\f[R] (see CONCURRENCY +below). +.PP +Each work request is created by calling a WR builder function (see the +table column WR builder below) to start creating the work request, +followed by allowed/required setter functions described below. +.PP +The WR builder and setter combination can be called multiple times to +efficiently post multiple work requests within a single critical region. +.PP +Each WR builder will use the \f[I]wr_id\f[R] member of \f[I]struct +ibv_qp_ex\f[R] to set the value to be returned in the completion. +Some operations will also use the \f[I]wr_flags\f[R] member to influence +operation (see Flags below). +These values should be set before invoking the WR builder function. +.PP +For example a simple send could be formed as follows: +.IP +.nf +\f[C] +qpx->wr_id = 1; +ibv_wr_send(qpx); +ibv_wr_set_sge(qpx, lkey, &data, sizeof(data)); +\f[R] +.fi +.PP +The section WORK REQUESTS describes the various WR builders and setters +in details. +.PP +Posting work is completed by calling \f[I]ibv_wr_complete()\f[R] or +\f[I]ibv_wr_abort()\f[R]. +No work is executed to the queue until \f[I]ibv_wr_complete()\f[R] +returns success. +\f[I]ibv_wr_abort()\f[R] will discard all work prepared since +\f[I]ibv_wr_start()\f[R]. +.SH WORK REQUESTS +.PP +Many of the operations match the opcodes available for +\f[I]ibv_post_send()\f[R]. +Each operation has a WR builder function, a list of allowed setters, and +a flag bit to request the operation with \f[I]send_ops_flags\f[R] in +\f[I]struct ibv_qp_init_attr_ex\f[R] (see the EXAMPLE below). +.PP +.TS +tab(@); +l l l l. +T{ +Operation +T}@T{ +WR builder +T}@T{ +QP Type Supported +T}@T{ +setters +T} +_ +T{ +ATOMIC_CMP_AND_SWP +T}@T{ +ibv_wr_atomic_cmp_swp() +T}@T{ +RC, XRC_SEND +T}@T{ +DATA, QP +T} +T{ +ATOMIC_FETCH_AND_ADD +T}@T{ +ibv_wr_atomic_fetch_add() +T}@T{ +RC, XRC_SEND +T}@T{ +DATA, QP +T} +T{ +BIND_MW +T}@T{ +ibv_wr_bind_mw() +T}@T{ +UC, RC, XRC_SEND +T}@T{ +NONE +T} +T{ +LOCAL_INV +T}@T{ +ibv_wr_local_inv() +T}@T{ +UC, RC, XRC_SEND +T}@T{ +NONE +T} +T{ +RDMA_READ +T}@T{ +ibv_wr_rdma_read() +T}@T{ +RC, XRC_SEND +T}@T{ +DATA, QP +T} +T{ +RDMA_WRITE +T}@T{ +ibv_wr_rdma_write() +T}@T{ +UC, RC, XRC_SEND +T}@T{ +DATA, QP +T} +T{ +RDMA_WRITE_WITH_IMM +T}@T{ +ibv_wr_rdma_write_imm() +T}@T{ +UC, RC, XRC_SEND +T}@T{ +DATA, QP +T} +T{ +SEND +T}@T{ +ibv_wr_send() +T}@T{ +UD, UC, RC, XRC_SEND, RAW_PACKET +T}@T{ +DATA, QP +T} +T{ +SEND_WITH_IMM +T}@T{ +ibv_wr_send_imm() +T}@T{ +UD, UC, RC, SRC SEND +T}@T{ +DATA, QP +T} +T{ +SEND_WITH_INV +T}@T{ +ibv_wr_send_inv() +T}@T{ +UC, RC, XRC_SEND +T}@T{ +DATA, QP +T} +T{ +TSO +T}@T{ +ibv_wr_send_tso() +T}@T{ +UD, RAW_PACKET +T}@T{ +DATA, QP +T} +.TE +.SS Atomic operations +.PP +Atomic operations are only atomic so long as all writes to memory go +only through the same RDMA hardware. +It is not atomic with writes performed by the CPU, or by other RDMA +hardware in the system. +.TP +.B \f[I]ibv_wr_atomic_cmp_swp()\f[R] +If the remote 64 bit memory location specified by \f[I]rkey\f[R] and +\f[I]remote_addr\f[R] equals \f[I]compare\f[R] then set it to +\f[I]swap\f[R]. +.TP +.B \f[I]ibv_wr_atomic_fetch_add()\f[R] +Add \f[I]add\f[R] to the 64 bit memory location specified \f[I]rkey\f[R] +and \f[I]remote_addr\f[R]. +.SS Memory Windows +.PP +Memory window type 2 operations (See man page for ibv_alloc_mw). +.TP +.B \f[I]ibv_wr_bind_mw()\f[R] +Bind a MW type 2 specified by \f[B]mw\f[R], set a new \f[B]rkey\f[R] and +set its properties by \f[B]bind_info\f[R]. +.TP +.B \f[I]ibv_wr_local_inv()\f[R] +Invalidate a MW type 2 which is associated with \f[B]rkey\f[R]. +.SS RDMA +.TP +.B \f[I]ibv_wr_rdma_read()\f[R] +Read from the remote memory location specified \f[I]rkey\f[R] and +\f[I]remote_addr\f[R]. +The number of bytes to read, and the local location to store the data, +is determined by the DATA buffers set after this call. +.TP +.B \f[I]ibv_wr_rdma_write()\f[R], \f[I]ibv_wr_rdma_write_imm()\f[R] +Write to the remote memory location specified \f[I]rkey\f[R] and +\f[I]remote_addr\f[R]. +The number of bytes to read, and the local location to get the data, is +determined by the DATA buffers set after this call. +.RS +.PP +The _imm version causes the remote side to get a +IBV_WC_RECV_RDMA_WITH_IMM containing the 32 bits of immediate data. +.RE +.SS Message Send +.TP +.B \f[I]ibv_wr_send()\f[R], \f[I]ibv_wr_send_imm()\f[R] +Send a message. +The number of bytes to send, and the local location to get the data, is +determined by the DATA buffers set after this call. +.RS +.PP +The _imm version causes the remote side to get a +IBV_WC_RECV_RDMA_WITH_IMM containing the 32 bits of immediate data. +.RE +.TP +.B \f[I]ibv_wr_send_inv()\f[R] +The data transfer is the same as for \f[I]ibv_wr_send()\f[R], however +the remote side will invalidate the MR specified by +\f[I]invalidate_rkey\f[R] before delivering a completion. +.TP +.B \f[I]ibv_wr_send_tso()\f[R] +Produce multiple SEND messages using TCP Segmentation Offload. +The SGE points to a TCP Stream buffer which will be segmented into MSS +size SENDs. +The hdr includes the entire network headers up to and including the TCP +header and is prefixed before each segment. +.SS QP Specific setters +.PP +Certain QP types require each post to be accompanied by additional +setters, these setters are mandatory for any operation listing a QP +setter in the above table. +.TP +.B \f[I]UD\f[R] QPs +\f[I]ibv_wr_set_ud_addr()\f[R] must be called to set the destination +address of the work. +.TP +.B \f[I]XRC_SEND\f[R] QPs +\f[I]ibv_wr_set_xrc_srqn()\f[R] must be called to set the destination +SRQN field. +.SS DATA transfer setters +.PP +For work that requires to transfer data one of the following setters +should be called once after the WR builder: +.TP +.B \f[I]ibv_wr_set_sge()\f[R] +Transfer data to/from a single buffer given by the lkey, addr and +length. +This is equivalent to \f[I]ibv_wr_set_sge_list()\f[R] with a single +element. +.TP +.B \f[I]ibv_wr_set_sge_list()\f[R] +Transfer data to/from a list of buffers, logically concatenated +together. +Each buffer is specified by an element in an array of \f[I]struct +ibv_sge\f[R]. +.PP +Inline setters will copy the send data during the setter and allows the +caller to immediately re-use the buffer. +This behavior is identical to the IBV_SEND_INLINE flag. +Generally this copy is done in a way that optimizes SEND latency and is +suitable for small messages. +The provider will limit the amount of data it can support in a single +operation. +This limit is requested in the \f[I]max_inline_data\f[R] member of +\f[I]struct ibv_qp_init_attr\f[R]. +Valid only for SEND and RDMA_WRITE. +.TP +.B \f[I]ibv_wr_set_inline_data()\f[R] +Copy send data from a single buffer given by the addr and length. +This is equivalent to \f[I]ibv_wr_set_inline_data_list()\f[R] with a +single element. +.TP +.B \f[I]ibv_wr_set_inline_data_list()\f[R] +Copy send data from a list of buffers, logically concatenated together. +Each buffer is specified by an element in an array of \f[I]struct +ibv_inl_data\f[R]. +.SS Flags +.PP +A bit mask of flags may be specified in \f[I]wr_flags\f[R] to control +the behavior of the work request. +.TP +.B \f[B]IBV_SEND_FENCE\f[R] +Do not start this work request until prior work has completed. +.TP +.B \f[B]IBV_SEND_IP_CSUM\f[R] +Offload the IPv4 and TCP/UDP checksum calculation +.TP +.B \f[B]IBV_SEND_SIGNALED\f[R] +A completion will be generated in the completion queue for the +operation. +.TP +.B \f[B]IBV_SEND_SOLICTED\f[R] +Set the solicted bit in the RDMA packet. +This informs the other side to generate a completion event upon +receiving the RDMA operation. +.SH CONCURRENCY +.PP +The provider will provide locking to ensure that +\f[I]ibv_wr_start()\f[R] and \f[I]ibv_wr_complete()/abort()\f[R] form a +per-QP critical section where no other threads can enter. +.PP +If an \f[I]ibv_td\f[R] is provided during QP creation then no locking +will be performed and it is up to the caller to ensure that only one +thread can be within the critical region at a time. +.SH RETURN VALUE +.PP +Applications should use this API in a way that does not create failures. +The individual APIs do not return a failure indication to avoid +branching. +.PP +If a failure is detected during operation, for instance due to an +invalid argument, then \f[I]ibv_wr_complete()\f[R] will return failure +and the entire posting will be aborted. +.SH EXAMPLE +.IP +.nf +\f[C] +/* create RC QP type and specify the required send opcodes */ +qp_init_attr_ex.qp_type = IBV_QPT_RC; +qp_init_attr_ex.comp_mask |= IBV_QP_INIT_ATTR_SEND_OPS_FLAGS; +qp_init_attr_ex.send_ops_flags |= IBV_QP_EX_WITH_RDMA_WRITE; +qp_init_attr_ex.send_ops_flags |= IBV_QP_EX_WITH_RDMA_WRITE_WITH_IMM; + +ibv_qp *qp = ibv_create_qp_ex(ctx, qp_init_attr_ex); +ibv_qp_ex *qpx = ibv_qp_to_qp_ex(qp); + +ibv_wr_start(qpx); + +/* create 1st WRITE WR entry */ +qpx->wr_id = my_wr_id_1; +ibv_wr_rdma_write(qpx, rkey, remote_addr_1); +ibv_wr_set_sge(qpx, lkey, local_addr_1, length_1); + +/* create 2nd WRITE_WITH_IMM WR entry */ +qpx->wr_id = my_wr_id_2; +qpx->wr_flags = IBV_SEND_SIGNALED; +ibv_wr_rdma_write_imm(qpx, rkey, remote_addr_2, htonl(0x1234)); +ibv_set_wr_sge(qpx, lkey, local_addr_2, length_2); + +/* Begin processing WRs */ +ret = ibv_wr_complete(qpx); +\f[R] +.fi +.SH SEE ALSO +.PP +\f[B]ibv_post_send\f[R](3), \f[B]ibv_create_qp_ex(3)\f[R]. +.SH AUTHOR +.PP +Jason Gunthorpe <[email protected]> Guy Levi <[email protected]> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pandoc-prebuilt/748b4d49f7873d149abf564a84bb58ce0c61461a new/pandoc-prebuilt/748b4d49f7873d149abf564a84bb58ce0c61461a --- old/pandoc-prebuilt/748b4d49f7873d149abf564a84bb58ce0c61461a 1970-01-01 01:00:00.000000000 +0100 +++ new/pandoc-prebuilt/748b4d49f7873d149abf564a84bb58ce0c61461a 2019-11-26 10:18:38.611546883 +0100 @@ -0,0 +1,99 @@ +.\" Automatically generated by Pandoc 2.7.3 +.\" +.TH "mlx5dv_create_flow_matcher" "3" "2018-9-19" "mlx5" "mlx5 Programmer\[cq]s Manual" +.hy +.SH NAME +.PP +mlx5dv_create_flow_matcher - creates a matcher to be used with +\f[I]mlx5dv_create_flow(3)\f[R] +.SH SYNOPSIS +.IP +.nf +\f[C] +#include <infiniband/mlx5dv.h> + +struct mlx5dv_flow_matcher * +mlx5dv_create_flow_matcher(struct ibv_context *context, + struct mlx5dv_flow_matcher_attr *attr) +\f[R] +.fi +.SH DESCRIPTION +.PP +\f[B]mlx5dv_create_flow_matcher()\f[R] creates a flow matcher (mask) to +be used with \f[I]mlx5dv_create_flow(3)\f[R]. +.SH ARGUMENTS +.PP +Please see \f[I]ibv_open_device(3)\f[R] for \f[I]context\f[R]. +.SS \f[I]attr\f[R] +.IP +.nf +\f[C] +struct mlx5dv_flow_matcher_attr { + enum ibv_flow_attr_type type; + uint32_t flags; /* From enum ibv_flow_flags */ + uint16_t priority; + uint8_t match_criteria_enable; /* Device spec format */ + struct mlx5dv_flow_match_parameters *match_mask; + uint64_t comp_mask; + enum mlx5dv_flow_table_type ft_type; +}; +\f[R] +.fi +.TP +.B \f[I]type\f[R] +Type of matcher to be created: IBV_FLOW_ATTR_NORMAL: Normal rule +according to specification. +.TP +.B \f[I]flags\f[R] +special flags to control rule: 0: Nothing or zero value means matcher +will store ingress flow rules. +IBV_FLOW_ATTR_FLAGS_EGRESS: Specified this matcher will store egress +flow rules. +.TP +.B \f[I]priority\f[R] +See \f[I]ibv_create_flow(3)\f[R]. +.TP +.B \f[I]match_criteria_enable\f[R] +What match criteria is configured in \f[I]match_mask\f[R], passed in +device spec format. +.SS \f[I]match_mask\f[R] +.IP +.nf +\f[C] +struct mlx5dv_flow_match_parameters { + size_t match_sz; + uint64_t match_buf[]; /* Device spec format */ +}; +\f[R] +.fi +.TP +.B \f[I]match_sz\f[R] +Size in bytes of \f[I]match_buf\f[R]. +.TP +.B \f[I]match_buf\f[R] +Set which mask to be used, passed in device spec format. +.TP +.B \f[I]comp_mask\f[R] +MLX5DV_FLOW_MATCHER_MASK_FT_TYPE for \f[I]ft_type\f[R] +.SS \f[I]ft_type\f[R] +.PP +Specified in which flow table type, the matcher will store the flow +rules: MLX5DV_FLOW_TABLE_TYPE_NIC_RX: Specified this matcher will store +ingress flow rules. +MLX5DV_FLOW_TABLE_TYPE_NIC_TX Specified this matcher will store egress +flow rules. +MLX5DV_FLOW_TABLE_TYPE_FDB : Specified this matcher will store FDB +rules. +MLX5DV_FLOW_TABLE_TYPE_RDMA_RX: Specified this matcher will store +ingress RDMA flow rules. +.SH RETURN VALUE +.PP +\f[B]mlx5dv_create_flow_matcher\f[R] returns a pointer to +\f[I]mlx5dv_flow_matcher\f[R], on error NULL will be returned and errno +will be set. +.SH SEE ALSO +.PP +\f[I]ibv_open_device(3)\f[R], \f[I]ibv_create_flow(3)\f[R] +.SH AUTHOR +.PP +Mark Bloch <[email protected]> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pandoc-prebuilt/d137b1ee0cb6220d1020f1ea76af2d7742643feb new/pandoc-prebuilt/d137b1ee0cb6220d1020f1ea76af2d7742643feb --- old/pandoc-prebuilt/d137b1ee0cb6220d1020f1ea76af2d7742643feb 2019-09-26 16:11:43.783550023 +0200 +++ new/pandoc-prebuilt/d137b1ee0cb6220d1020f1ea76af2d7742643feb 1970-01-01 01:00:00.000000000 +0100 @@ -1,97 +0,0 @@ -.\" Automatically generated by Pandoc 2.7.3 -.\" -.TH "mlx5dv_create_flow_matcher" "3" "2018-9-19" "mlx5" "mlx5 Programmer\[cq]s Manual" -.hy -.SH NAME -.PP -mlx5dv_create_flow_matcher - creates a matcher to be used with -\f[I]mlx5dv_create_flow(3)\f[R] -.SH SYNOPSIS -.IP -.nf -\f[C] -#include <infiniband/mlx5dv.h> - -struct mlx5dv_flow_matcher * -mlx5dv_create_flow_matcher(struct ibv_context *context, - struct mlx5dv_flow_matcher_attr *attr) -\f[R] -.fi -.SH DESCRIPTION -.PP -\f[B]mlx5dv_create_flow_matcher()\f[R] creates a flow matcher (mask) to -be used with \f[I]mlx5dv_create_flow(3)\f[R]. -.SH ARGUMENTS -.PP -Please see \f[I]ibv_open_device(3)\f[R] for \f[I]context\f[R]. -.SS \f[I]attr\f[R] -.IP -.nf -\f[C] -struct mlx5dv_flow_matcher_attr { - enum ibv_flow_attr_type type; - uint32_t flags; /* From enum ibv_flow_flags */ - uint16_t priority; - uint8_t match_criteria_enable; /* Device spec format */ - struct mlx5dv_flow_match_parameters *match_mask; - uint64_t comp_mask; - enum mlx5dv_flow_table_type ft_type; -}; -\f[R] -.fi -.TP -.B \f[I]type\f[R] -Type of matcher to be created: IBV_FLOW_ATTR_NORMAL: Normal rule -according to specification. -.TP -.B \f[I]flags\f[R] -special flags to control rule: 0: Nothing or zero value means matcher -will store ingress flow rules. -IBV_FLOW_ATTR_FLAGS_EGRESS: Specified this matcher will store egress -flow rules. -.TP -.B \f[I]priority\f[R] -See \f[I]ibv_create_flow(3)\f[R]. -.TP -.B \f[I]match_criteria_enable\f[R] -What match criteria is configured in \f[I]match_mask\f[R], passed in -device spec format. -.SS \f[I]match_mask\f[R] -.IP -.nf -\f[C] -struct mlx5dv_flow_match_parameters { - size_t match_sz; - uint64_t match_buf[]; /* Device spec format */ -}; -\f[R] -.fi -.TP -.B \f[I]match_sz\f[R] -Size in bytes of \f[I]match_buf\f[R]. -.TP -.B \f[I]match_buf\f[R] -Set which mask to be used, passed in device spec format. -.TP -.B \f[I]comp_mask\f[R] -MLX5DV_FLOW_MATCHER_MASK_FT_TYPE for \f[I]ft_type\f[R] -.SS \f[I]ft_type\f[R] -.PP -Specified in which flow table type, the matcher will store the flow -rules: MLX5DV_FLOW_TABLE_TYPE_NIC_RX: Specified this matcher will store -ingress flow rules. -MLX5DV_FLOW_TABLE_TYPE_NIC_TX Specified this matcher will store egress -flow rules. -MLX5DV_FLOW_TABLE_TYPE_FDB : Specified this matcher will store FDB -rules. -.SH RETURN VALUE -.PP -\f[B]mlx5dv_create_flow_matcher\f[R] returns a pointer to -\f[I]mlx5dv_flow_matcher\f[R], on error NULL will be returned and errno -will be set. -.SH SEE ALSO -.PP -\f[I]ibv_open_device(3)\f[R], \f[I]ibv_create_flow(3)\f[R] -.SH AUTHOR -.PP -Mark Bloch <[email protected]> ++++++ rdma-core-25.1.0.1841d48eec9d.tar.gz -> rdma-core-26.1.0.9f820de9ca7d.tar.gz ++++++ ++++ 85581 lines of diff (skipped)
