IB/qib: Fix comparison error with qperf compare/swap test
authorMike Marciniszyn <mike.marciniszyn@intel.com>
Tue, 14 Nov 2017 12:34:52 +0000 (04:34 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 22 Feb 2018 14:42:14 +0000 (15:42 +0100)
commit 87b3524cb5058fdc7c2afdb92bdb2e079661ddc4 upstream.

This failure exists with qib:

ver_rc_compare_swap:
mismatch, sequence 2, expected 123456789abcdef, got 0

The request builder was using the incorrect inlines to
build the request header resulting in incorrect data
in the atomic header.

Fix by using the appropriate inlines to create the request.

Fixes: 261a4351844b ("IB/qib,IB/hfi: Use core common header file")
Reviewed-by: Michael J. Ruhl <michael.j.ruhl@intel.com>
Signed-off-by: Mike Marciniszyn <mike.marciniszyn@intel.com>
Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/infiniband/hw/qib/qib_rc.c

index e9a91736b12dbe281f6413afa47ccf320d1dc276..d80b61a71eb8ec26ee9579ba813fe481c49732a9 100644 (file)
@@ -434,13 +434,13 @@ no_flow_control:
                                qp->s_state = OP(COMPARE_SWAP);
                                put_ib_ateth_swap(wqe->atomic_wr.swap,
                                                  &ohdr->u.atomic_eth);
-                               put_ib_ateth_swap(wqe->atomic_wr.compare_add,
-                                                 &ohdr->u.atomic_eth);
+                               put_ib_ateth_compare(wqe->atomic_wr.compare_add,
+                                                    &ohdr->u.atomic_eth);
                        } else {
                                qp->s_state = OP(FETCH_ADD);
                                put_ib_ateth_swap(wqe->atomic_wr.compare_add,
                                                  &ohdr->u.atomic_eth);
-                               put_ib_ateth_swap(0, &ohdr->u.atomic_eth);
+                               put_ib_ateth_compare(0, &ohdr->u.atomic_eth);
                        }
                        put_ib_ateth_vaddr(wqe->atomic_wr.remote_addr,
                                           &ohdr->u.atomic_eth);