Add heavy sig-handover tests
diff --git a/tests/sig-handover/smoke.cc b/tests/sig-handover/smoke.cc
index e047ffd..6500bbb 100644
--- a/tests/sig-handover/smoke.cc
+++ b/tests/sig-handover/smoke.cc
@@ -47,9 +47,10 @@
 #include "env.h"
 
 #if 1
-#define BBB 16
+#define BBB 0x10
 #else
 #define BBB 1
+#define BBB 0x100000
 #endif
 
 #define SZ (512*BBB)
@@ -683,3 +684,154 @@
 		EXEC(send_qp.send_2wr(this->strip_mr.sge(0,SZ), this->src_mr.sge()));
 	}
 }
+
+#ifndef SIG_MR_REUSE
+#define N 150
+#define M 15000
+
+TEST_F(sig_test_t10dif, b0) {
+	CHK_SUT(sig_handover);
+
+	for (long j = 0; j < M; j++) {
+		for (long i = 0; i < N; i++) {
+			EXEC(config_wr(this->insert_mr, this->src_mr.sge(), this->nosig(), this->sig()));
+			EXEC(config_wr(this->strip_mr, this->mid_mr.sge(), this->sig(), this->nosig()));
+			EXEC(send_qp.rdma_wr(this->mid_mr.sge(), this->insert_mr.sge(0,SZD(this->pi_size())), IBV_WR_RDMA_READ, 0));
+			EXEC(send_qp.rdma_wr(this->dst_mr.sge(), this->strip_mr.sge(0,SZ), IBV_WR_RDMA_READ));
+			EXEC(linv_wr(this->insert_mr));
+			EXEC(linv_wr(this->strip_mr));
+		}
+		EXEC(send_qp.post_all_wr());
+		for (long i = 0; i < N; i++)
+			EXEC(cq.poll());
+		EXEC(dst_mr.check());
+	}
+}
+
+TEST_F(sig_test_t10dif, b1) {
+	CHK_SUT(sig_handover);
+
+	for (long j = 0; j < M; j++) {
+		for (long i = 0; i < N; i++) {
+			EXEC(config_wr(this->insert_mr, this->src_mr.sge(), this->nosig(), this->sig()));
+			EXEC(config_wr(this->strip_mr, this->mid_mr.sge(), this->sig(), this->nosig()));
+			EXEC(send_qp.rdma_wr(this->insert_mr.sge(0,SZD(this->pi_size())), this->mid_mr.sge(), IBV_WR_RDMA_WRITE, 0));
+			EXEC(send_qp.rdma_wr(this->strip_mr.sge(0,SZ), this->dst_mr.sge(), IBV_WR_RDMA_WRITE));
+			EXEC(linv_wr(this->insert_mr));
+			EXEC(linv_wr(this->strip_mr));
+		}
+		EXEC(send_qp.post_all_wr());
+		for (long i = 0; i < N; i++)
+			EXEC(cq.poll());
+
+		EXEC(dst_mr.check());
+	}
+}
+
+TEST_F(sig_test_t10dif, b2) {
+	CHK_SUT(sig_handover);
+
+	for (long j = 0; j < M; j++) {
+		for (long i = 0; i < N; i++) {
+			EXEC(config_wr(this->insert_mr, this->mid_mr.sge(), this->sig(), this->nosig()));
+			EXEC(config_wr(this->strip_mr, this->dst_mr.sge(), this->nosig(), this->sig()));
+			EXEC(send_qp.rdma_wr(this->insert_mr.sge(0,SZ), this->src_mr.sge(), IBV_WR_RDMA_READ, 0));
+			EXEC(send_qp.rdma_wr(this->strip_mr.sge(0,SZD(this->pi_size())), this->mid_mr.sge(), IBV_WR_RDMA_READ));
+			EXEC(linv_wr(this->insert_mr));
+			EXEC(linv_wr(this->strip_mr));
+		}
+		EXEC(send_qp.post_all_wr());
+		for (long i = 0; i < N; i++)
+			EXEC(cq.poll());
+
+		EXEC(dst_mr.check());
+	}
+}
+
+TEST_F(sig_test_t10dif, b3) {
+	CHK_SUT(sig_handover);
+
+	for (long j = 0; j < M; j++) {
+		for (long i = 0; i < N; i++) {
+			EXEC(config_wr(this->insert_mr, this->mid_mr.sge(), this->sig(), this->nosig()));
+			EXEC(config_wr(this->strip_mr, this->dst_mr.sge(), this->nosig(), this->sig()));
+			EXEC(send_qp.rdma_wr(this->src_mr.sge(), this->insert_mr.sge(0,SZ), IBV_WR_RDMA_WRITE, 0));
+			EXEC(send_qp.rdma_wr(this->mid_mr.sge(), this->strip_mr.sge(0,SZD(this->pi_size())), IBV_WR_RDMA_WRITE));
+			EXEC(linv_wr(this->insert_mr));
+			EXEC(linv_wr(this->strip_mr));
+		}
+		EXEC(send_qp.post_all_wr());
+		for (long i = 0; i < N; i++)
+			EXEC(cq.poll());
+
+		EXEC(dst_mr.check());
+	}
+}
+
+TEST_F(sig_test_t10dif, b4) {
+	CHK_SUT(sig_handover);
+
+	for (long j = 0; j < M; j++) {
+		for (long i = 0; i < N; i++) {
+			EXEC(config_wr(this->insert_mr, this->mid_mr.sge(), this->sig(), this->nosig()));
+			EXEC(config_wr(this->strip_mr, this->dst_mr.sge(), this->nosig(), this->sig()));
+			if ((i ^ j) & 1) {
+				EXEC(send_qp.rdma_wr(this->src_mr.sge(), this->insert_mr.sge(0,SZ), IBV_WR_RDMA_WRITE, 0));
+				EXEC(send_qp.rdma_wr(this->strip_mr.sge(0,SZD(this->pi_size())), this->mid_mr.sge(), IBV_WR_RDMA_READ));
+			} else {
+				EXEC(send_qp.rdma_wr(this->insert_mr.sge(0,SZ), this->src_mr.sge(), IBV_WR_RDMA_READ, 0));
+				EXEC(send_qp.rdma_wr(this->mid_mr.sge(), this->strip_mr.sge(0,SZD(this->pi_size())), IBV_WR_RDMA_WRITE));
+			}
+			EXEC(linv_wr(this->insert_mr));
+			EXEC(linv_wr(this->strip_mr));
+		}
+		EXEC(send_qp.post_all_wr());
+		for (long i = 0; i < N; i++)
+			EXEC(cq.poll());
+
+		EXEC(dst_mr.check());
+	}
+}
+
+TEST_F(sig_test_t10dif, b5) {
+	CHK_SUT(sig_handover);
+
+	for (long j = 0; j < M; j++) {
+		for (long i = 0; i < N; i++) {
+			int offset = 0; //i & 1 ? 512 : 0;
+			EXEC(config_wr(this->insert_mr, this->mid_mr.sge(), this->sig(), this->nosig()));
+			EXEC(config_wr(this->strip_mr, this->mid_mr.sge(), this->sig(), this->nosig()));
+			EXEC(send_qp.rdma_wr(this->insert_mr.sge(offset,SZ), this->src_mr.sge(), IBV_WR_RDMA_READ, 0));
+			EXEC(send_qp.rdma_wr(this->dst_mr.sge(offset,SZ), this->strip_mr.sge(), IBV_WR_RDMA_READ, 0));
+			EXEC(linv_wr(this->insert_mr));
+			EXEC(linv_wr(this->strip_mr, 1));
+		}
+		EXEC(send_qp.post_all_wr());
+		for (long i = 0; i < N; i++)
+			EXEC(cq.poll());
+
+		EXEC(dst_mr.check());
+	}
+}
+
+TEST_F(sig_test_t10dif, b5o) {
+	CHK_SUT(sig_handover);
+
+	for (long j = 0; j < M; j++) {
+		for (long i = 0; i < N; i++) {
+			int offset = i & 1 ? 512 : 0;
+			EXEC(config_wr(this->insert_mr, this->mid_mr.sge(), this->sig(), this->nosig()));
+			EXEC(config_wr(this->strip_mr, this->mid_mr.sge(), this->sig(), this->nosig()));
+			EXEC(send_qp.rdma_wr(this->insert_mr.sge(offset,SZ), this->src_mr.sge(), IBV_WR_RDMA_READ, 0));
+			EXEC(send_qp.rdma_wr(this->dst_mr.sge(offset,SZ), this->strip_mr.sge(), IBV_WR_RDMA_READ, 0));
+			EXEC(linv_wr(this->insert_mr));
+			EXEC(linv_wr(this->strip_mr, 1));
+		}
+		EXEC(send_qp.post_all_wr());
+		for (long i = 0; i < N; i++)
+			EXEC(cq.poll());
+
+		EXEC(dst_mr.check());
+	}
+}
+#endif