![](https://seccdn.libravatar.org/avatar/e2145bc5cf53dda95c308a3c75e8fef3.jpg?s=120&d=mm&r=g)
Hello community, here is the log from the commit of package rdma-core for openSUSE:Factory checked in at 2018-12-27 00:23:42 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/rdma-core (Old) and /work/SRC/openSUSE:Factory/.rdma-core.new.28833 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "rdma-core" Thu Dec 27 00:23:42 2018 rev:26 rq:657867 version:21 Changes: -------- --- /work/SRC/openSUSE:Factory/rdma-core/rdma-core.changes 2018-11-06 14:13:20.814745678 +0100 +++ /work/SRC/openSUSE:Factory/.rdma-core.new.28833/rdma-core.changes 2018-12-27 00:23:43.819940610 +0100 @@ -1,0 +2,6 @@ +Fri Nov 30 06:54:33 UTC 2018 - nmoreychaisemartin@suse.com + +- Update to rdma-core v21 (fate#325939, fate#326991) + * No release notes available + +------------------------------------------------------------------- Old: ---- rdma-core-20.1.0.222fa83a789c.tar.gz New: ---- rdma-core-21.0.a4b744d2cd6e.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ rdma-core.spec ++++++ --- /var/tmp/diff_new_pack.RnAG15/_old 2018-12-27 00:23:44.399940137 +0100 +++ /var/tmp/diff_new_pack.RnAG15/_new 2018-12-27 00:23:44.399940137 +0100 @@ -17,9 +17,12 @@ %bcond_without systemd -%define git_ver .0.222fa83a789c +# Do not build static libs by default. +%define with_static %{?_with_static: 1} %{?!_with_static: 0} + +%define git_ver .0.a4b744d2cd6e Name: rdma-core -Version: 20.1 +Version: 21 Release: 0 Summary: RDMA core userspace libraries and daemons License: GPL-2.0-only OR BSD-2-Clause @@ -144,6 +147,13 @@ #Requires: ibacm = %%{version}-%%{release} Provides: ibacm-devel = %{version}-%{release} Obsoletes: ibacm-devel < %{version}-%{release} +%if %{with_static} +# Since our pkg-config files include private references to these packages they +# need to have their .pc files installed too, even for dynamic linking, or +# pkg-config breaks. +BuildRequires: pkgconfig(libnl-3.0) +BuildRequires: pkgconfig(libnl-route-3.0) +%endif %description devel RDMA core development libraries and headers. @@ -351,6 +361,9 @@ -DCMAKE_INSTALL_RUNDIR:PATH=%{_rundir} \ -DCMAKE_INSTALL_DOCDIR:PATH=%{_docdir}/%{name}-%{version} \ -DCMAKE_INSTALL_UDEV_RULESDIR:PATH=%{_udevrulesdir} \ +%if %{with_static} + -DENABLE_STATIC=1 \ +%endif %{EXTRA_CMAKE_FLAGS} %make_jobs @@ -529,6 +542,9 @@ %dir %{_includedir}/rdma %{_includedir}/infiniband/* %{_includedir}/rdma/* +%if %{with_static} +%{_libdir}/lib*.a +%endif %{_libdir}/lib*.so %{_libdir}/pkgconfig/*.pc %{_mandir}/man3/ibv_* ++++++ _service ++++++ --- /var/tmp/diff_new_pack.RnAG15/_old 2018-12-27 00:23:44.427940113 +0100 +++ /var/tmp/diff_new_pack.RnAG15/_new 2018-12-27 00:23:44.427940113 +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">222fa83a789cd24a1e0900389587d47812fba086</param> + <param name="revision">a4b744d2cd6e5ccb0c9e60ebaf681184dadb6da0</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/0113b8e7282fb498b6027aebc1cf2148def1e1c6 new/pandoc-prebuilt/0113b8e7282fb498b6027aebc1cf2148def1e1c6 --- old/pandoc-prebuilt/0113b8e7282fb498b6027aebc1cf2148def1e1c6 1970-01-01 01:00:00.000000000 +0100 +++ new/pandoc-prebuilt/0113b8e7282fb498b6027aebc1cf2148def1e1c6 2018-12-13 17:08:13.760673762 +0100 @@ -0,0 +1,101 @@ +.\" Automatically generated by Pandoc 1.19.2.1 +.\" +.TH "mlx5dv_create_qp" "3" "2018\-9\-1" "mlx5" "mlx5 Programmer\[aq]s Manual" +.hy +.SH NAME +.PP +mlx5dv_create_qp \- creates a queue pair (QP) +.SH SYNOPSIS +.IP +.nf +\f[C] +#include\ <infiniband/mlx5dv.h> + +struct\ ibv_qp\ *mlx5dv_create_qp(struct\ ibv_context\ \ \ \ \ \ \ \ \ *context, +\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ struct\ ibv_qp_init_attr_ex\ *qp_attr, +\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ struct\ mlx5dv_qp_init_attr\ *mlx5_qp_attr) +\f[] +.fi +.SH DESCRIPTION +.PP +\f[B]mlx5dv_create_qp()\f[] creates a queue pair (QP) with specific +driver properties. +.SH ARGUMENTS +.PP +Please see \f[I]ibv_create_qp_ex(3)\f[] man page for \f[I]context\f[] +and \f[I]qp_attr\f[]. +.SS mlx5_qp_attr +.IP +.nf +\f[C] +struct\ mlx5dv_qp_init_attr\ { +\ \ \ \ uint64_t\ comp_mask; +\ \ \ \ uint32_t\ create_flags; +\ \ \ \ struct\ mlx5dv_dc_init_attr\ \ dc_init_attr; +}; +\f[] +.fi +.TP +.B \f[I]comp_mask\f[] +Bitmask specifying what fields in the structure are valid: +MLX5DV_QP_INIT_ATTR_MASK_QP_CREATE_FLAGS: valid values in +\f[I]create_flags\f[] MLX5DV_QP_INIT_ATTR_MASK_DC: valid values in +\f[I]dc_init_attr\f[] +.RS +.RE +.TP +.B \f[I]create_flags\f[] +A bitwise OR of the various values described below. +.RS +.PP +MLX5DV_QP_CREATE_TUNNEL_OFFLOADS: Enable offloading such as checksum and +LRO for incoming tunneling traffic. +.PP +MLX5DV_QP_CREATE_TIR_ALLOW_SELF_LOOPBACK_UC: Allow receiving loopback +unicast traffic. +.PP +MLX5DV_QP_CREATE_TIR_ALLOW_SELF_LOOPBACK_MC: Allow receiving loopback +multicast traffic. +.PP +MLX5DV_QP_CREATE_DISABLE_SCATTER_TO_CQE: Disable scatter to CQE feature +which is enabled by default. +.PP +MLX5DV_QP_CREATE_ALLOW_SCATTER_TO_CQE: Allow scatter to CQE for +requester even if the qp was not configured to signal all WRs. +.RE +.TP +.B \f[I]dc_init_attr\f[] +DC init attributes. +.RS +.RE +.SS \f[I]dc_init_attr\f[] +.IP +.nf +\f[C] +struct\ mlx5dv_dc_init_attr\ { +\ \ \ \ enum\ mlx5dv_dc_type\ dc_type; +\ \ \ \ uint64_t\ dct_access_key; +}; +\f[] +.fi +.TP +.B \f[I]dc_type\f[] +MLX5DV_DCTYPE_DCT QP type: Target DC. +MLX5DV_DCTYPE_DCI QP type: Initiator DC. +.RS +.RE +.TP +.B \f[I]dct_access_key\f[] +used to create a DCT QP. +.RS +.RE +.SH RETURN VALUE +.PP +\f[B]mlx5dv_create_qp()\f[] returns a pointer to the created QP, on +error NULL will be returned and errno will be set. +.SH SEE ALSO +.PP +\f[B]ibv_query_device_ex\f[](3), \f[B]ibv_create_qp_ex\f[](3), +.SH AUTHOR +.PP +Yonatan Cohen <yonatanc@mellanox.com> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pandoc-prebuilt/23660644c7d16519530ca5d9fe12f0f800e1f1c0 new/pandoc-prebuilt/23660644c7d16519530ca5d9fe12f0f800e1f1c0 --- old/pandoc-prebuilt/23660644c7d16519530ca5d9fe12f0f800e1f1c0 1970-01-01 01:00:00.000000000 +0100 +++ new/pandoc-prebuilt/23660644c7d16519530ca5d9fe12f0f800e1f1c0 2018-12-13 17:08:14.396678152 +0100 @@ -0,0 +1,69 @@ +.\" Automatically generated by Pandoc 1.19.2.1 +.\" +.TH "mlx5dv_open_device" "3" "" "" "" +.hy +.SH NAME +.PP +mlx5dv_open_device \- Open an RDMA device context for the mlx5 provider +.SH SYNOPSIS +.IP +.nf +\f[C] +#include\ <infiniband/mlx5dv.h> + +struct\ ibv_context\ * +mlx5dv_open_device(struct\ ibv_device\ *device,\ struct\ mlx5dv_context_attr\ *attr); +\f[] +.fi +.SH DESCRIPTION +.PP +Open an RDMA device context with specific mlx5 provider attributes. +.SH ARGUMENTS +.TP +.B \f[I]device\f[] +RDMA device to open. +.RS +.RE +.SS \f[I]attr\f[] argument +.IP +.nf +\f[C] +struct\ mlx5dv_context_attr\ { +\ \ \ \ \ \ \ \ uint32_t\ flags; +\ \ \ \ \ \ \ \ uint64_t\ comp_mask; +}; +\f[] +.fi +.TP +.B \f[I]flags\f[] +.IP +.nf +\f[C] +A\ bitwise\ OR\ of\ the\ various\ values\ described\ below. + +*MLX5DV_CONTEXT_FLAGS_DEVX*: +Allocate\ a\ DEVX\ context +\f[] +.fi +.RS +.RE +.TP +.B \f[I]comp_mask\f[] +.IP +.nf +\f[C] +Bitmask\ specifying\ what\ fields\ in\ the\ structure\ are\ valid +\f[] +.fi +.RS +.RE +.SH RETURN VALUE +.PP +Returns a pointer to the allocated device context, or NULL if the +request fails. +.SH SEE ALSO +.PP +\f[I]ibv_open_device(3)\f[] +.SH AUTHOR +.PP +Yishai Hadas <yishaih@mellanox.com> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pandoc-prebuilt/30d9cd1dec073db27c4661daf57bb6df7e42aec1 new/pandoc-prebuilt/30d9cd1dec073db27c4661daf57bb6df7e42aec1 --- old/pandoc-prebuilt/30d9cd1dec073db27c4661daf57bb6df7e42aec1 1970-01-01 01:00:00.000000000 +0100 +++ new/pandoc-prebuilt/30d9cd1dec073db27c4661daf57bb6df7e42aec1 2018-12-13 17:08:13.508672021 +0100 @@ -0,0 +1,59 @@ +.\" Automatically generated by Pandoc 1.19.2.1 +.\" +.TH "mlx5dv_create_flow_action_modify_header" "3" "" "" "" +.hy +.SH NAME +.PP +mlx5dv_create_flow_action_modify_header \- Flow action modify header for +mlx5 provider +.SH SYNOPSIS +.IP +.nf +\f[C] +#include\ <infiniband/mlx5dv.h> + +struct\ ibv_flow_action\ * +mlx5dv_create_flow_action_modify_header(struct\ ibv_context\ *ctx, +\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ size_t\ actions_sz, +\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ uint64_t\ actions[], +\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ enum\ mlx5dv_flow_table_type\ ft_type) +\f[] +.fi +.SH DESCRIPTION +.PP +Create a modify header flow steering action, it allows to mutate a +packet header. +.SH ARGUMENTS +.TP +.B \f[I]ctx\f[] +RDMA device context to create the action on. +.RS +.RE +.TP +.B \f[I]actions_sz\f[] +The size of \f[I]actions\f[] buffer in bytes. +.RS +.RE +.TP +.B \f[I]actions\f[] +A buffer which contains modify actions provided in device spec format. +.RS +.RE +.TP +.B \f[I]ft_type\f[] +Defines the flow table type to which the modify header action will be +attached. +.RS +.PP +MLX5DV_FLOW_TABLE_TYPE_NIC_RX: RX FLOW TABLE +.PP +MLX5DV_FLOW_TABLE_TYPE_NIC_TX: TX FLOW TABLE +.RE +.SH RETURN VALUE +.PP +Upon success \f[I]mlx5dv_create_flow_action_modify_header\f[] will +return a new \f[I]struct ibv_flow_action\f[] object, on error NULL will +be returned and errno will be set. +.SH SEE ALSO +.PP +\f[I]ibv_create_flow(3)\f[], \f[I]ibv_create_flow_action(3)\f[] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pandoc-prebuilt/41a00e0ef76c440627f23d42860b02ee6aba1e75 new/pandoc-prebuilt/41a00e0ef76c440627f23d42860b02ee6aba1e75 --- old/pandoc-prebuilt/41a00e0ef76c440627f23d42860b02ee6aba1e75 1970-01-01 01:00:00.000000000 +0100 +++ new/pandoc-prebuilt/41a00e0ef76c440627f23d42860b02ee6aba1e75 2018-12-13 17:08:14.016675528 +0100 @@ -0,0 +1,85 @@ +.\" Automatically generated by Pandoc 1.19.2.1 +.\" +.TH "mlx5dv_devx_alloc_uar / mlx5dv_devx_free_uar" "3" "" "" "" +.hy +.SH NAME +.PP +mlx5dv_devx_alloc_uar \- Allocates a DEVX UAR +.PP +mlx5dv_devx_free_uar \- Frees a DEVX UAR +.SH SYNOPSIS +.IP +.nf +\f[C] +#include\ <infiniband/mlx5dv.h> + +struct\ mlx5dv_devx_uar\ *mlx5dv_devx_alloc_uar(struct\ ibv_context\ *context, +\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ uint32_t\ flags); + +void\ mlx5dv_devx_free_uar(struct\ mlx5dv_devx_uar\ *devx_uar); +\f[] +.fi +.SH DESCRIPTION +.PP +Create / free a DEVX UAR which is needed for other device commands over +the DEVX interface. +.PP +The DEVX API enables direct access from the user space area to the mlx5 +device driver, the UAR information is needed for few commands as of QP +creation. +.SH ARGUMENTS +.TP +.B \f[I]context\f[] +RDMA device context to work on. +.RS +.RE +.TP +.B \f[I]flags\f[] +Allocation flags for the UAR. +.RS +.RE +.SS devx_uar +.IP +.nf +\f[C] +struct\ mlx5dv_devx_uar\ { +\ \ \ \ void\ *reg_addr; +\ \ \ \ void\ *base_addr; +\ \ \ \ uint32_t\ page_id; +\ \ \ \ off_t\ mmap_off; +\ \ \ \ uint64_t\ comp_mask; +}; +\f[] +.fi +.TP +.B \f[I]reg_addr\f[] +The write address of DB/BF. +.RS +.RE +.TP +.B \f[I]base_addr\f[] +The base address of the UAR. +.RS +.RE +.TP +.B \f[I]page_id\f[] +The device page id to be used. +.RS +.RE +.TP +.B \f[I]mmap_off\f[] +The mmap offset parameter to be used for re\-mapping, to be used by a +secondary process. +.RS +.RE +.SH RETURN VALUE +.PP +Upon success \f[I]mlx5dv_devx_alloc_uar\f[] will return a new +\f[I]struct mlx5dv_devx_uar\f[], on error NULL will be returned and +errno will be set. +.SH SEE ALSO +.PP +\f[B]mlx5dv_open_device\f[], \f[B]mlx5dv_devx_obj_create\f[] +.SH AUTHOR +.PP +Yishai Hadas <yishaih@mellanox.com> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pandoc-prebuilt/68e20aac6935f699d0003079337cb40c23d1b827 new/pandoc-prebuilt/68e20aac6935f699d0003079337cb40c23d1b827 --- old/pandoc-prebuilt/68e20aac6935f699d0003079337cb40c23d1b827 1970-01-01 01:00:00.000000000 +0100 +++ new/pandoc-prebuilt/68e20aac6935f699d0003079337cb40c23d1b827 2018-12-13 17:08:13.636672905 +0100 @@ -0,0 +1,126 @@ +.\" Automatically generated by Pandoc 1.19.2.1 +.\" +.TH "mlx5dv_devx_obj_create / destroy / modify /query / general" "3" "" "" "" +.hy +.SH NAME +.PP +mlx5dv_devx_obj_create \- Creates a devx object +.PP +mlx5dv_devx_obj_destroy \- Destroys a devx object +.PP +mlx5dv_devx_obj_modify \- Modifies a devx object +.PP +mlx5dv_devx_obj_query \- Queries a devx object +.PP +mlx5dv_devx_general_cmd \- Issues a general command over the devx +interface +.SH SYNOPSIS +.IP +.nf +\f[C] +#include\ <infiniband/mlx5dv.h> + +struct\ mlx5dv_devx_obj\ * +mlx5dv_devx_obj_create(struct\ ibv_context\ *context,\ const\ void\ *in,\ size_t\ inlen, +\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ void\ *out,\ size_t\ outlen); +int\ mlx5dv_devx_obj_query(struct\ mlx5dv_devx_obj\ *obj,\ const\ void\ *in,\ size_t\ inlen, +\ \ \ \ \ \ \ \ \ \ \ \ \ \ void\ *out,\ size_t\ outlen); +int\ mlx5dv_devx_obj_modify(struct\ mlx5dv_devx_obj\ *obj,\ const\ void\ *in,\ size_t\ inlen, +\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ void\ *out,\ size_t\ outlen); +int\ mlx5dv_devx_obj_destroy(struct\ mlx5dv_devx_obj\ *obj); +int\ mlx5dv_devx_general_cmd(struct\ ibv_context\ *context,\ const\ void\ *in,\ size_t\ inlen, +\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ void\ *out,\ size_t\ outlen); +\f[] +.fi +.SH DESCRIPTION +.PP +Create / destroy / modify / query a devx object, issue a general command +over the devx interface. +.PP +The DEVX API enables direct access from the user space area to the mlx5 +device driver by using the KABI mechanism. +The main purpose is to make the user space driver as independent as +possible from the kernel so that future device functionality and +commands can be activated with minimal to none kernel changes. +.PP +A DEVX object represents some underlay firmware object, the input +command to create it is some raw data given by the user application +which should match the device specification. +Upon successful creation the output buffer includes the raw data from +the device according to its specification, this data can be used as part +of related firmware commands to this object. +.PP +Once the DEVX object is created it can be queried/modified/destroyed by +the matching mlx5dv_devx_obj_xxx() API. +Both the input and the output for those APIs need to match the device +specification as well. +.PP +The mlx5dv_devx_general_cmd() API enables issuing some general command +which is not related to an object such as query device capabilities. +.PP +An application can gradually migrate to use DEVX according to its needs, +it is not all or nothing. +For example it can create an ibv_cq via ibv_create_cq() verb and then +use the returned cqn to create a DEVX QP object by the +mlx5dv_devx_obj_create() API which needs that cqn. +.PP +The above example can enable an application to create a QP with some +driver specific attributes that are not exposed in the ibv_create_qp() +API, in that case no user or kernel change may be needed at all as the +command input reaches directly to the firmware. +.PP +The expected users for the DEVX APIs are application that use the mlx5 +DV APIs and are familiar with the device specification in both control +and data path. +.PP +To successfully create a DEVX object and work on, a DEVX context must be +created, this is done by the mlx5dv_open_device() API with the +\f[I]MLX5DV_CONTEXT_FLAGS_DEVX\f[] flag. +.SH ARGUMENTS +.TP +.B \f[I]context\f[] +RDMA device context to create the action on. +.RS +.RE +.TP +.B \f[I]in\f[] +A buffer which contains the command\[aq]s input data provided in a +device specification format. +.RS +.RE +.TP +.B \f[I]inlen\f[] +The size of \f[I]in\f[] buffer in bytes. +.RS +.RE +.TP +.B \f[I]out\f[] +A buffer which contains the command\[aq]s output data according to the +device specification format. +.RS +.RE +.TP +.B \f[I]outlen\f[] +The size of \f[I]out\f[] buffer in bytes. +.RS +.RE +.TP +.B \f[I]obj\f[] +For query, modify, destroy: the devx object to work on. +.RS +.RE +.SH RETURN VALUE +.PP +Upon success \f[I]mlx5dv_devx_create_obj\f[] will return a new +\f[I]struct mlx5dv_devx_obj\f[] on error NULL will be returned and errno +will be set. +.PP +Upon success query, modify, destroy, general commands, 0 is returned or +the value of errno on a failure. +.SH SEE ALSO +.PP +\f[B]mlx5dv_open_device\f[] +.PP +AUTHOR +.PP +Yishai Hadas <yishaih@mellanox.com> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pandoc-prebuilt/77e091fce9252614b7c6136f15917606746eac44 new/pandoc-prebuilt/77e091fce9252614b7c6136f15917606746eac44 --- old/pandoc-prebuilt/77e091fce9252614b7c6136f15917606746eac44 1970-01-01 01:00:00.000000000 +0100 +++ new/pandoc-prebuilt/77e091fce9252614b7c6136f15917606746eac44 2018-12-13 17:08:14.272677296 +0100 @@ -0,0 +1,51 @@ +.\" Automatically generated by Pandoc 1.19.2.1 +.\" +.TH "mlx5dv_devx_query_eqn" "3" "" "" "" +.hy +.SH NAME +.PP +mlx5dv_devx_query_eqn \- Query EQN for a given vector id. +.SH SYNOPSIS +.IP +.nf +\f[C] +#include\ <infiniband/mlx5dv.h> + +int\ mlx5dv_devx_query_eqn(struct\ ibv_context\ *context,\ uint32_t\ vector, +\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ uint32_t\ *eqn); +\f[] +.fi +.SH DESCRIPTION +.PP +Query EQN for a given input vector, the EQN is needed for other device +commands over the DEVX interface. +.PP +The DEVX API enables direct access from the user space area to the mlx5 +device driver, the EQN information is needed for few commands such as CQ +creation. +.SH ARGUMENTS +.TP +.B \f[I]context\f[] +RDMA device context to work on. +.RS +.RE +.TP +.B \f[I]vector\f[] +Completion vector number. +.RS +.RE +.TP +.B \f[I]eqn\f[] +The device EQ number which relates to the given input vector. +.RS +.RE +.SH RETURN VALUE +.PP +returns 0 on success, or the value of errno on failure (which indicates +the failure reason). +.SH SEE ALSO +.PP +\f[B]mlx5dv_open_device\f[], \f[B]mlx5dv_devx_obj_create\f[] +.SH AUTHOR +.PP +Yishai Hadas <yishaih@mellanox.com> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pandoc-prebuilt/7d5e462c408c439a395f9d4413bad29e7d20379b new/pandoc-prebuilt/7d5e462c408c439a395f9d4413bad29e7d20379b --- old/pandoc-prebuilt/7d5e462c408c439a395f9d4413bad29e7d20379b 1970-01-01 01:00:00.000000000 +0100 +++ new/pandoc-prebuilt/7d5e462c408c439a395f9d4413bad29e7d20379b 2018-12-13 17:08:13.252670255 +0100 @@ -0,0 +1,101 @@ +.\" Automatically generated by Pandoc 1.19.2.1 +.\" +.TH "mlx5dv_create_flow_action_packet_reformat" "3" "" "" "" +.hy +.SH NAME +.PP +mlx5dv_create_flow_action_packet_reformat \- Flow action reformat packet +for mlx5 provider +.SH SYNOPSIS +.IP +.nf +\f[C] +#include\ <infiniband/mlx5dv.h> + +struct\ ibv_flow_action\ * +mlx5dv_create_flow_action_packet_reformat(struct\ ibv_context\ *ctx, +\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ size_t\ data_sz, +\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ void\ *data, +\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ enum\ mlx5dv_flow_action_packet_reformat_type\ reformat_type, +\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ enum\ mlx5dv_flow_table_type\ ft_type) +\f[] +.fi +.SH DESCRIPTION +.PP +Create a packet reformat flow steering action. +It allows to add/remove packet headers. +.SH ARGUMENTS +.TP +.B \f[I]ctx\f[] +.IP +.nf +\f[C] +RDMA\ device\ context\ to\ create\ the\ action\ on. +\f[] +.fi +.RS +.RE +.TP +.B \f[I]data_sz\f[] +.IP +.nf +\f[C] +The\ size\ of\ *data*\ buffer. +\f[] +.fi +.RS +.RE +.TP +.B \f[I]data\f[] +.IP +.nf +\f[C] +A\ buffer\ which\ contains\ headers\ in\ case\ the\ actions\ requires\ them. +\f[] +.fi +.RS +.RE +.TP +.B \f[I]reformat_type\f[] +.IP +.nf +\f[C] +The\ reformat\ type\ to\ be\ create.\ Use\ enum\ mlx5dv_flow_action_packet_reformat_type. +\f[] +.fi +.RS +.PP +MLX5DV_FLOW_ACTION_PACKET_REFORMAT_TYPE_L2_TUNNEL_TO_L2: Decap a generic +L2 tunneled packet upto inner L2. +.PP +MLX5DV_FLOW_ACTION_PACKET_REFORMAT_TYPE_L2_TO_L2_TUNNEL: Generic encap, +\f[I]data\f[] should contain the encapsulating headers. +.PP +MLX5DV_FLOW_ACTION_PACKET_REFORMAT_TYPE_L3_TUNNEL_TO_L2: Will do decap +where the inner packet starts from L3. +\f[I]data\f[] should be MAC or MAC + vlan (14 or 18 bytes) to be +appended to the packet after the decap action. +.PP +MLX5DV_FLOW_ACTION_PACKET_REFORMAT_TYPE_L2_TO_L3_TUNNEL: Will do encap +where is L2 of the original packet will not be included. +\f[I]data\f[] should be the encapsulating header. +.RE +.TP +.B \f[I]ft_type\f[] +.IP +.nf +\f[C] +It\ defines\ the\ flow\ table\ type\ to\ which\ the\ packet\ reformat\ action +\f[] +.fi +.RS +will be attached. +.RE +.SH RETURN VALUE +.PP +Upon success \f[I]mlx5dv_create_flow_action_packet_reformat\f[] will +return a new \f[I]struct ibv_flow_action\f[] object, on error NULL will +be returned and errno will be set. +.SH SEE ALSO +.PP +\f[I]ibv_create_flow(3)\f[], \f[I]ibv_create_flow_action(3)\f[] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pandoc-prebuilt/9fcf3f165ed59609a3e94199a5b963ba461c423a new/pandoc-prebuilt/9fcf3f165ed59609a3e94199a5b963ba461c423a --- old/pandoc-prebuilt/9fcf3f165ed59609a3e94199a5b963ba461c423a 1970-01-01 01:00:00.000000000 +0100 +++ new/pandoc-prebuilt/9fcf3f165ed59609a3e94199a5b963ba461c423a 2018-12-13 17:08:11.556658546 +0100 @@ -0,0 +1,91 @@ +.\" Automatically generated by Pandoc 1.19.2.1 +.\" +.TH "IBV_GET_DEVICE_LIST" "3" "2006\-10\-31" "libibverbs" "Libibverbs Programmer\[aq]s Manual" +.hy +.SH NAME +.PP +ibv_get_device_list, ibv_free_device_list \- get and release list of +available RDMA devices +.SH SYNOPSIS +.IP +.nf +\f[C] +#include\ <infiniband/verbs.h> + +struct\ ibv_device\ **ibv_get_device_list(int\ *num_devices); + +void\ ibv_free_device_list(struct\ ibv_device\ **list); +\f[] +.fi +.SH DESCRIPTION +.PP +\f[B]ibv_get_device_list()\f[] returns a NULL\-terminated array of RDMA +devices currently available. +The argument \f[I]num_devices\f[] is optional; if not NULL, it is set to +the number of devices returned in the array. +.PP +\f[B]ibv_free_device_list()\f[] frees the array of devices \f[I]list\f[] +returned by \f[B]ibv_get_device_list()\f[]. +.SH RETURN VALUE +.PP +\f[B]ibv_get_device_list()\f[] returns the array of available RDMA +devices, or sets \f[I]errno\f[] and returns NULL if the request fails. +If no devices are found then \f[I]num_devices\f[] is set to 0, and +non\-NULL is returned. +.PP +\f[B]ibv_free_device_list()\f[] returns no value. +.SH ERRORS +.TP +.B \f[B]EPERM\f[] +Permission denied. +.RS +.RE +.TP +.B \f[B]ENOSYS\f[] +No kernel support for RDMA. +.RS +.RE +.TP +.B \f[B]ENOMEM\f[] +Insufficient memory to complete the operation. +.RS +.RE +.SH NOTES +.PP +Client code should open all the devices it intends to use with +\f[B]ibv_open_device()\f[] before calling +\f[B]ibv_free_device_list()\f[]. +Once it frees the array with \f[B]ibv_free_device_list()\f[], it will be +able to use only the open devices; pointers to unopened devices will no +longer be valid. +.PP +Setting the environment variable \f[B]IBV_SHOW_WARNINGS\f[] will cause +warnings to be emitted to stderr if a kernel verbs device is discovered, +but no corresponding userspace driver can be found for it. +.SH STATIC LINKING +.PP +If \f[B]libibverbs\f[] is statically linked to the application then all +provider drivers must also be statically linked. +The library will not load dynamic providers when static linking is used. +.PP +To link the providers set the \f[B]RDMA_STATIC_PROVIDERS\f[] define to +the comma separated list of desired providers when compiling the +application. +The special keyword \[aq]all\[aq] will statically link all supported +\f[B]libibverbs\f[] providers. +.PP +This is intended to be used along with \f[B]pkg\-config(1)\f[] to setup +the proper flags for \f[B]libibverbs\f[] linking. +.PP +If this is not done then \f[B]ibv_get_device_list\f[] will always return +an empty list. +.PP +Using only dynamic linking for \f[B]libibverbs\f[] applications is +strongly recommended. +.SH SEE ALSO +.PP +\f[B]ibv_fork_init\f[](3), \f[B]ibv_get_device_guid\f[](3), +\f[B]ibv_get_device_name\f[](3), \f[B]ibv_open_device\f[](3) +.SH AUTHOR +.PP +Dotan Barak <dotanba@gmail.com> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pandoc-prebuilt/b43db7d0f792e732b32d21f1de3da3d59d06bcfd new/pandoc-prebuilt/b43db7d0f792e732b32d21f1de3da3d59d06bcfd --- old/pandoc-prebuilt/b43db7d0f792e732b32d21f1de3da3d59d06bcfd 1970-01-01 01:00:00.000000000 +0100 +++ new/pandoc-prebuilt/b43db7d0f792e732b32d21f1de3da3d59d06bcfd 2018-12-13 17:08:13.888674645 +0100 @@ -0,0 +1,91 @@ +.\" Automatically generated by Pandoc 1.19.2.1 +.\" +.TH "mlx5dv_create_flow" "3" "2018\-9\-19" "mlx5" "mlx5 Programmer\[aq]s Manual" +.hy +.SH NAME +.PP +mlx5dv_create_flow \- creates a steering flow rule +.SH SYNOPSIS +.IP +.nf +\f[C] +#include\ <infiniband/mlx5dv.h> + +struct\ ibv_flow\ * +mlx5dv_create_flow(struct\ mlx5dv_flow_matcher\ *flow_matcher, +\ \ \ \ \ \ \ \ \ \ \ struct\ mlx5dv_flow_match_parameters\ *match_value, +\ \ \ \ \ \ \ \ \ \ \ size_t\ num_actions, +\ \ \ \ \ \ \ \ \ \ \ struct\ mlx5dv_flow_action_attr\ actions_attr[]) +\f[] +.fi +.SH DESCRIPTION +.PP +\f[B]mlx5dv_create_flow()\f[] creates a steering flow rule with the +ability to specify specific driver properties. +.SH ARGUMENTS +.PP +Please see \f[I]mlx5dv_create_flow_matcher(3)\f[] for +\f[I]flow_matcher\f[] and \f[I]match_value\f[]. +.TP +.B \f[I]num_actions\f[] +Specifies how many actions are passed in \f[I]actions_attr\f[] +.RS +.RE +.SS \f[I]actions_attr\f[] +.IP +.nf +\f[C] +struct\ mlx5dv_flow_action_attr\ { +\ \ \ \ enum\ mlx5dv_flow_action_type\ type; +\ \ \ \ union\ { +\ \ \ \ \ \ \ \ struct\ ibv_qp\ *qp; +\ \ \ \ \ \ \ \ struct\ ibv_counters\ *counter; +\ \ \ \ \ \ \ \ struct\ ibv_flow_action\ *action; +\ \ \ \ \ \ \ \ uint32_t\ tag_value; +\ \ \ \ }; +}; +\f[] +.fi +.TP +.B \f[I]type\f[] +MLX5DV_FLOW_ACTION_DEST_IBV_QP The QP passed will receive the matched +packets. +MLX5DV_FLOW_ACTION_IBV_FLOW_ACTION The flow action to be applied. +MLX5DV_FLOW_ACTION_TAG Flow tag to be provided in work completion. +.RS +.RE +.TP +.B \f[I]qp\f[] +QP passed, to be used with \f[I]type\f[] +\f[I]MLX5DV_FLOW_ACTION_DEST_IBV_QP\f[]. +.RS +.RE +.TP +.B \f[I]action\f[] +Flow action, to be used with \f[I]type\f[] +\f[I]MLX5DV_FLOW_ACTION_IBV_FLOW_ACTION\f[] see +\f[I]mlx5dv_create_flow_action_modify_header(3)\f[] and +\f[I]mlx5dv_create_flow_action_packet_reformat(3)\f[]. +.RS +.RE +.TP +.B \f[I]tag_value\f[] +tag value to be passed in the work completion, to be used with +\f[I]type\f[] \f[I]MLX5DV_FLOW_ACTION_TAG\f[] see +\f[I]ibv_create_cq_ex(3)\f[]. +.RS +.RE +.SH RETURN VALUE +.PP +\f[B]mlx5dv_create_flow\f[] returns a pointer to the created flow rule, +on error NULL will be returned and errno will be set. +.SH SEE ALSO +.PP +\f[I]mlx5dv_create_flow_action_modify_header(3)\f[], +\f[I]mlx5dv_create_flow_action_packet_reformat(3)\f[], +\f[I]mlx5dv_create_flow_matcher(3)\f[], \f[I]mlx5dv_create_qp(3)\f[], +\f[I]ibv_create_qp_ex(3)\f[] \f[I]ibv_create_cq_ex(3)\f[] +\f[I]ibv_create_counters(3)\f[] +.SH AUTHOR +.PP +Mark Bloch <marb@mellanox.com> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pandoc-prebuilt/c5799cc135c1891b06d6842bfccdb0855b0d0fac new/pandoc-prebuilt/c5799cc135c1891b06d6842bfccdb0855b0d0fac --- old/pandoc-prebuilt/c5799cc135c1891b06d6842bfccdb0855b0d0fac 1970-01-01 01:00:00.000000000 +0100 +++ new/pandoc-prebuilt/c5799cc135c1891b06d6842bfccdb0855b0d0fac 2018-12-13 17:08:14.144676412 +0100 @@ -0,0 +1,96 @@ +.\" Automatically generated by Pandoc 1.19.2.1 +.\" +.TH "mlx5dv_create_flow_matcher" "3" "2018\-9\-19" "mlx5" "mlx5 Programmer\[aq]s Manual" +.hy +.SH NAME +.PP +mlx5dv_create_flow_matcher \- creates a matcher to be used with +\f[I]mlx5dv_create_flow(3)\f[] +.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[] +.fi +.SH DESCRIPTION +.PP +\f[B]mlx5dv_create_flow_matcher()\f[] creates a flow matcher (mask) to +be used with \f[I]mlx5dv_create_flow(3)\f[]. +.SH ARGUMENTS +.PP +Please see \f[I]ibv_open_device(3)\f[] for \f[I]context\f[]. +.SS \f[I]attr\f[] +.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; +}; +\f[] +.fi +.TP +.B \f[I]type\f[] +Type of matcher to be created: IBV_FLOW_ATTR_NORMAL: Normal rule +according to specification. +.RS +.RE +.TP +.B \f[I]flags\f[] +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. +.RS +.RE +.TP +.B \f[I]priority\f[] +See \f[I]ibv_create_flow(3)\f[]. +.RS +.RE +.TP +.B \f[I]match_criteria_enable\f[] +What match criteria is configured in \f[I]match_mask\f[], passed in +device spec format. +.RS +.RE +.SS \f[I]match_mask\f[] +.IP +.nf +\f[C] +struct\ mlx5dv_flow_match_parameters\ { +\ \ \ \ size_t\ match_sz; +\ \ \ \ uint64_t\ match_buf[];\ /*\ Device\ spec\ format\ */ +}; +\f[] +.fi +.TP +.B \f[I]match_sz\f[] +Size in bytes of \f[I]match_buf\f[]. +.RS +.RE +.TP +.B \f[I]match_buf\f[] +Set which mask to be used, passed in device spec format. +.RS +.RE +.SH RETURN VALUE +.PP +\f[B]mlx5dv_create_flow_matcher\f[] returns a pointer to +\f[I]mlx5dv_flow_matcher\f[], on error NULL will be returned and errno +will be set. +.SH SEE ALSO +.PP +\f[I]ibv_open_device(3)\f[], \f[I]ibv_create_flow(3)\f[] +.SH AUTHOR +.PP +Mark Bloch <markb@mellanox.com> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pandoc-prebuilt/cf4e4cd11a7895e2b33c4b3e1625393ebf105452 new/pandoc-prebuilt/cf4e4cd11a7895e2b33c4b3e1625393ebf105452 --- old/pandoc-prebuilt/cf4e4cd11a7895e2b33c4b3e1625393ebf105452 1970-01-01 01:00:00.000000000 +0100 +++ new/pandoc-prebuilt/cf4e4cd11a7895e2b33c4b3e1625393ebf105452 2018-12-13 17:08:13.376671110 +0100 @@ -0,0 +1,85 @@ +.\" Automatically generated by Pandoc 1.19.2.1 +.\" +.TH "mlx5dv_create_cq" "3" "2018\-9\-1" "mlx5" "mlx5 Programmer\[aq]s Manual" +.hy +.SH NAME +.PP +mlx5dv_create_cq \- creates a completion queue (CQ) +.SH SYNOPSIS +.IP +.nf +\f[C] +#include\ <infiniband/mlx5dv.h> + +struct\ ibv_cq_ex\ *mlx5dv_create_cq(struct\ ibv_context\ *context, +\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ struct\ ibv_cq_init_attr_ex\ *cq_attr, +\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ struct\ mlx5dv_cq_init_attr\ *mlx5_cq_attr); +\f[] +.fi +.SH DESCRIPTION +.PP +\f[B]mlx5dv_create_cq()\f[] creates a completion queue (CQ) with +specific driver properties. +.SH ARGUMENTS +.PP +Please see \f[B]ibv_create_cq_ex(3)\f[] man page for \f[B]context\f[] +and \f[B]cq_attr\f[] +.SS mlx5_cq_attr +.IP +.nf +\f[C] +struct\ mlx5dv_cq_init_attr\ { +\ \ \ \ uint64_t\ comp_mask; +\ \ \ \ uint8_t\ \ cqe_comp_res_format; +\ \ \ \ uint32_t\ flags; +\ \ \ \ uint16_t\ cqe_size; +}; +\f[] +.fi +.TP +.B \f[I]comp_mask\f[] +Bitmask specifying what fields in the structure are valid: +.RS +.PP +MLX5DV_CQ_INIT_ATTR_MASK_COMPRESSED_CQE enables creating a CQ in a mode +that few CQEs may be compressed into a single CQE, valid values in +\f[I]cqe_comp_res_format\f[] +.PP +MLX5DV_CQ_INIT_ATTR_MASK_FLAGS valid values in \f[I]flags\f[] +.PP +MLX5DV_CQ_INIT_ATTR_MASK_CQE_SIZE valid values in \f[I]cqe_size\f[] +.RE +.TP +.B \f[I]cqe_comp_res_format\f[] +A bitwise OR of the various CQE response formats of the responder side: +.RS +.PP +MLX5DV_CQE_RES_FORMAT_HASH CQE compression with hash +.PP +MLX5DV_CQE_RES_FORMAT_CSUM CQE compression with RX checksum +.PP +MLX5DV_CQE_RES_FORMAT_CSUM_STRIDX CQE compression with stride index +.RE +.TP +.B \f[I]flags\f[] +A bitwise OR of the various values described below: +.RS +.PP +MLX5DV_CQ_INIT_ATTR_FLAGS_CQE_PAD create a padded 128B CQE +.RE +.TP +.B \f[I]cqe_size\f[] +configure the CQE size to be 64 or 128 bytes other values will fail +mlx5dv_create_cq. +.RS +.RE +.SH RETURN VALUE +.PP +\f[B]mlx5dv_create_cq()\f[] returns a pointer to the created CQ, or NULL +if the request fails and errno will be set. +.SH SEE ALSO +.PP +\f[B]ibv_create_cq_ex\f[](3), +.SH AUTHOR +.PP +Yonatan Cohen <yonatanc@mellanox.com> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pandoc-prebuilt/fa29d88a48409a61841ea15857c81feb01fd166d new/pandoc-prebuilt/fa29d88a48409a61841ea15857c81feb01fd166d --- old/pandoc-prebuilt/fa29d88a48409a61841ea15857c81feb01fd166d 1970-01-01 01:00:00.000000000 +0100 +++ new/pandoc-prebuilt/fa29d88a48409a61841ea15857c81feb01fd166d 2018-12-13 17:08:10.288649791 +0100 @@ -0,0 +1,88 @@ +.\" Automatically generated by Pandoc 1.19.2.1 +.\" +.TH "mlx5dv_devx_umem_reg, mlx5dv_devx_umem_dereg" "3" "" "" "" +.hy +.SH NAME +.PP +mlx5dv_devx_umem_reg \- Register a user memory to be used by the devx +interface +.PP +mlx5dv_devx_umem_dereg \- Deregister a devx umem object +.SH SYNOPSIS +.IP +.nf +\f[C] +#include\ <infiniband/mlx5dv.h> + +struct\ mlx5dv_devx_umem\ { +\ \ \ \ uint32_t\ umem_id; +}; + +struct\ mlx5dv_devx_umem\ * +mlx5dv_devx_umem_reg(struct\ ibv_context\ *context,\ void\ *addr,\ size_t\ size, +\ \ \ \ \ \ \ \ \ \ \ \ \ uint32_t\ access) + +int\ mlx5dv_devx_umem_dereg(struct\ mlx5dv_devx_umem\ *dv_devx_umem) +\f[] +.fi +.SH DESCRIPTION +.PP +Register or deregister a user memory to be used by the devx interface. +.PP +The register verb exposes a UMEM DEVX object for user memory +registration for DMA. +The API to register the user memory gets as input the user address, +length and access flags, and provides to the user as output an object +which holds the UMEM ID returned by the firmware to this registered +memory. +.PP +The user will use that UMEM ID in device direct commands that use this +memory instead of the physical addresses list, for example upon +\f[I]mlx5dv_devx_obj_create\f[] to create a QP. +.SH ARGUMENTS +.TP +.B \f[I]context\f[] +.IP +.nf +\f[C] +RDMA\ device\ context\ to\ create\ the\ action\ on. +\f[] +.fi +.RS +.RE +.TP +.B \f[I]addr\f[] +The memory start address to register. +.RS +.RE +.TP +.B \f[I]size\f[] +.IP +.nf +\f[C] +The\ size\ of\ *addr*\ buffer. +\f[] +.fi +.RS +.RE +.TP +.B \f[I]access\f[] +The desired memory protection attributes; it is either 0 or the bitwise +OR of one or more of \f[I]enum ibv_access_flags\f[]. +.RS +.RE +.SH RETURN VALUE +.PP +Upon success \f[I]mlx5dv_devx_umem_reg\f[] will return a new \f[I]struct +mlx5dv_devx_umem\f[] object, on error NULL will be returned and errno +will be set. +.PP +\f[I]mlx5dv_devx_umem_dereg\f[] returns 0 on success, or the value of +errno on failure (which indicates the failure reason). +.SH SEE ALSO +.PP +\f[I]mlx5dv_open_device(3)\f[], \f[I]ibv_reg_mr(3)\f[], +\f[I]mlx5dv_devx_obj_create(3)\f[] +.SH AUTHOR +.PP +Yishai Hadas <yishaih@mellanox.com> ++++++ rdma-core-20.1.0.222fa83a789c.tar.gz -> rdma-core-21.0.a4b744d2cd6e.tar.gz ++++++ ++++ 39322 lines of diff (skipped)