Browse Source

IB/hfi1: Use non-atomic __test_and_clear_bit in hot path

qp->r_aflags is already protected by qp->r_lock, therefore,
test_and_clear_bit() doesn't need to be atomic. Profile
shows this function call is costly.

Change the test_and_clear_bit() call to use the non-atomic
variant.

Reviewed-by: Mike Marciniszyn <mike.marciniszyn@intel.com>
Signed-off-by: Sebastian Sanchez <sebastian.sanchez@intel.com>
Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
Sebastian Sanchez 8 years ago
parent
commit
53e91d264b
1 changed files with 1 additions and 1 deletions
  1. 1 1
      drivers/infiniband/hw/hfi1/rc.c

+ 1 - 1
drivers/infiniband/hw/hfi1/rc.c

@@ -2295,7 +2295,7 @@ send_last:
 		hfi1_copy_sge(&qp->r_sge, data, tlen, 1, copy_last);
 		hfi1_copy_sge(&qp->r_sge, data, tlen, 1, copy_last);
 		rvt_put_ss(&qp->r_sge);
 		rvt_put_ss(&qp->r_sge);
 		qp->r_msn++;
 		qp->r_msn++;
-		if (!test_and_clear_bit(RVT_R_WRID_VALID, &qp->r_aflags))
+		if (!__test_and_clear_bit(RVT_R_WRID_VALID, &qp->r_aflags))
 			break;
 			break;
 		wc.wr_id = qp->r_wr_id;
 		wc.wr_id = qp->r_wr_id;
 		wc.status = IB_WC_SUCCESS;
 		wc.status = IB_WC_SUCCESS;