Hello community,
here is the log from the commit of package libmlx4
checked in at Fri Aug 24 01:34:46 CEST 2007.
--------
--- libmlx4/libmlx4.changes 2007-08-20 00:25:46.000000000 +0200
+++ /mounts/work_src_done/STABLE/libmlx4/libmlx4.changes 2007-08-21 16:41:08.000000000 +0200
@@ -1,0 +2,5 @@
+Tue Aug 21 16:41:05 CEST 2007 - hvogel@suse.de
+
+- Update to version from OFED 1.2.5
+
+-------------------------------------------------------------------
New:
----
libmlx4_05_fix_max_cap.patch
libmlx4_10_sg_stamping.patch
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ libmlx4.spec ++++++
--- /var/tmp/diff_new_pack.k14663/_old 2007-08-24 01:34:37.000000000 +0200
+++ /var/tmp/diff_new_pack.k14663/_new 2007-08-24 01:34:37.000000000 +0200
@@ -12,12 +12,14 @@
Name: libmlx4
Summary: Mellanox InfiniBand HCA Userspace Driver
Version: 0.1
-Release: 2
+Release: 4
Group: System/Libraries
License: BSD 4-Clause, GPL v2 only
URL: http://www.openfabrics.org
Source: %name-%version.tar.bz2
Source1: rpmlintrc
+Patch0: libmlx4_05_fix_max_cap.patch
+Patch1: libmlx4_10_sg_stamping.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: libibverbs-devel
@@ -47,6 +49,8 @@
%prep
%setup -q
+%patch0 -p4
+%patch1 -p4
%build
%configure
@@ -71,6 +75,8 @@
%{_libdir}/libmlx4.so
%changelog
+* Tue Aug 21 2007 - hvogel@suse.de
+- Update to version from OFED 1.2.5
* Mon Aug 20 2007 - ro@suse.de
- add rpmlintrc (shlib-policy-name-error) for the moment
to fix build
++++++ libmlx4-0.1.tar.bz2 ++++++
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/libmlx4-0.1/src/mlx4.map new/libmlx4-0.1/src/mlx4.map
--- old/libmlx4-0.1/src/mlx4.map 2007-08-05 15:01:03.000000000 +0200
+++ new/libmlx4-0.1/src/mlx4.map 2007-08-14 17:37:56.000000000 +0200
@@ -1,6 +1,5 @@
{
global:
- ibv_driver_init;
openib_driver_init;
local: *;
};
++++++ libmlx4_05_fix_max_cap.patch ++++++
Need to adjust minimum qp capability values prior to size and max resource
calculations.
Correct rq values if have an srq afterwards, as before.
Signed-off-by: Jack Morgenstein
Index: new_connectx_user/src/userspace/libmlx4/src/verbs.c
===================================================================
--- new_connectx_user.orig/src/userspace/libmlx4/src/verbs.c 2007-06-18 09:33:04.000000000 +0300
+++ new_connectx_user/src/userspace/libmlx4/src/verbs.c 2007-06-19 09:47:10.000000000 +0300
@@ -355,6 +355,12 @@ struct ibv_qp *mlx4_create_qp(struct ibv
if (!qp)
return NULL;
+ /* adjust minimum cap values */
+ attr->cap.max_recv_wr = attr->cap.max_recv_wr ? attr->cap.max_recv_wr : 1;
+ attr->cap.max_recv_sge = attr->cap.max_recv_sge ? attr->cap.max_recv_sge : 1;
+ attr->cap.max_send_wr = attr->cap.max_send_wr ? attr->cap.max_send_wr : 1;
+ attr->cap.max_send_sge = attr->cap.max_send_sge ? attr->cap.max_send_sge : 1;
+
mlx4_calc_sq_wqe_size(&attr->cap, attr->qp_type, qp);
/*
@@ -366,9 +372,7 @@ struct ibv_qp *mlx4_create_qp(struct ibv
qp->rq.wqe_cnt = align_queue_size(attr->cap.max_recv_wr);
if (attr->srq)
- attr->cap.max_recv_wr = qp->rq.wqe_cnt = 0;
- else if (attr->cap.max_recv_sge < 1)
- attr->cap.max_recv_sge = 1;
+ attr->cap.max_recv_wr = attr->cap.max_recv_sge = qp->rq.wqe_cnt = 0;
if (mlx4_alloc_qp_buf(pd, &attr->cap, attr->qp_type, qp))
goto err;
++++++ libmlx4_10_sg_stamping.patch ++++++
Need to write s/g segments in reverse order into the WQE,
in order to guarantee that the first dword of all
cachelines is written last (overwriting the stamping pattern).
In this manner, all the data in that cacheline is valid when the stamping
pattern is overwritten.
The byte_count write requires a barrier to guarantee that the other data
in the s/g entry has already been written.
Signed-off-by: Jack Morgenstein
--- a/src/userspace/libmlx4/src/qp.c 2007-07-24 09:47:25.000000000 +0300
+++ b/src/userspace/libmlx4/src/qp.c 2007-07-24 09:47:53.000000000 +0300
@@ -311,10 +311,19 @@ int mlx4_post_send(struct ibv_qp *ibqp,
} else {
struct mlx4_wqe_data_seg *seg = wqe;
- for (i = 0; i < wr->num_sge; ++i) {
- seg[i].byte_count = htonl(wr->sg_list[i].length);
+ /*
+ * Write the s/g entries in reverse order, so that the
+ * first dword of all cachelines is written last.
+ */
+ for (i = wr->num_sge - 1; i >= 0; --i) {
seg[i].lkey = htonl(wr->sg_list[i].lkey);
seg[i].addr = htonll(wr->sg_list[i].addr);
+ /*
+ * This entry may start a new cacheline.
+ * See barrier comment above.
+ */
+ wmb();
+ seg[i].byte_count = htonl(wr->sg_list[i].length);
}
size += wr->num_sge * (sizeof *seg / 16);
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Remember to have fun...
---------------------------------------------------------------------
To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-commit+help@opensuse.org