diff --git a/src/core/lib/surface/completion_queue.c b/src/core/lib/surface/completion_queue.c
index 346ea18d5ae5b165351917972c0e34969ac09d22..e48d2f8f468342d6304f6d18ff2a6963747eef91 100644
--- a/src/core/lib/surface/completion_queue.c
+++ b/src/core/lib/surface/completion_queue.c
@@ -227,7 +227,7 @@ struct grpc_completion_queue {
   /* TODO: sreek - This will no longer be needed. Use polling_type set */
   int is_non_listening_server_cq;
   int num_pluckers;
-  gpr_atm num_polls;
+  int num_polls;
   plucker pluckers[GRPC_MAX_COMPLETION_QUEUE_PLUCKERS];
   grpc_closure pollset_shutdown_done;
 
@@ -293,7 +293,7 @@ grpc_completion_queue *grpc_completion_queue_create_internal(
   cc->is_server_cq = 0;
   cc->is_non_listening_server_cq = 0;
   cc->num_pluckers = 0;
-  gpr_atm_no_barrier_store(&cc->num_polls, 0);
+  cc->num_polls = 0;
   gpr_atm_no_barrier_store(&cc->things_queued_ever, 0);
 #ifndef NDEBUG
   cc->outstanding_tag_count = 0;
@@ -311,7 +311,11 @@ grpc_cq_completion_type grpc_get_cq_completion_type(grpc_completion_queue *cc) {
 }
 
 gpr_atm grpc_get_cq_poll_num(grpc_completion_queue *cc) {
-  return gpr_atm_no_barrier_load(&cc->num_polls);
+  int cur_num_polls;
+  gpr_mu_lock(cc->mu);
+  cur_num_polls = cc->num_polls;
+  gpr_mu_unlock(cc->mu);
+  return cur_num_polls;
 }
 
 #ifdef GRPC_CQ_REF_COUNT_DEBUG
@@ -598,7 +602,7 @@ grpc_event grpc_completion_queue_next(grpc_completion_queue *cc,
       gpr_mu_lock(cc->mu);
       continue;
     } else {
-      gpr_atm_no_barrier_fetch_add(&cc->num_polls, 1);
+      cc->num_polls++;
       grpc_error *err = cc->poller_vtable->work(&exec_ctx, POLLSET_FROM_CQ(cc),
                                                 NULL, now, iteration_deadline);
       if (err != GRPC_ERROR_NONE) {
@@ -791,7 +795,7 @@ grpc_event grpc_completion_queue_pluck(grpc_completion_queue *cc, void *tag,
       grpc_exec_ctx_flush(&exec_ctx);
       gpr_mu_lock(cc->mu);
     } else {
-      gpr_atm_no_barrier_fetch_add(&cc->num_polls, 1);
+      cc->num_polls++;
       grpc_error *err = cc->poller_vtable->work(
           &exec_ctx, POLLSET_FROM_CQ(cc), &worker, now, iteration_deadline);
       if (err != GRPC_ERROR_NONE) {
diff --git a/test/cpp/qps/client.h b/test/cpp/qps/client.h
index 8006cacedd7bc30b3268385ffcea886f5593b0d7..c8a60bce50a37e520edc33ec6a5d1944cb5371fc 100644
--- a/test/cpp/qps/client.h
+++ b/test/cpp/qps/client.h
@@ -54,6 +54,10 @@
 #include "test/cpp/qps/usage_timer.h"
 #include "test/cpp/util/create_test_channel.h"
 
+extern "C" {
+#include "src/core/lib/surface/completion_queue.h"
+}
+
 namespace grpc {
 namespace testing {
 
diff --git a/test/cpp/qps/client_async.cc b/test/cpp/qps/client_async.cc
index 63da1e719d3ef88c439d9180adcf65d4115ebc56..d9cda9fb0713418c26f6b06deb74a06c68a8bc65 100644
--- a/test/cpp/qps/client_async.cc
+++ b/test/cpp/qps/client_async.cc
@@ -54,10 +54,6 @@
 #include "test/cpp/qps/usage_timer.h"
 #include "test/cpp/util/create_test_channel.h"
 
-extern "C" {
-#include "src/core/lib/surface/completion_queue.h"
-}
-
 namespace grpc {
 namespace testing {
 
diff --git a/test/cpp/qps/server.h b/test/cpp/qps/server.h
index d75f37957662b10465585a375d08a4aed6a1bf02..007770421ae92a9fc2c4fe17f0fd1e31bd7de60f 100644
--- a/test/cpp/qps/server.h
+++ b/test/cpp/qps/server.h
@@ -44,6 +44,10 @@
 #include "test/core/util/port.h"
 #include "test/cpp/qps/usage_timer.h"
 
+extern "C" {
+#include "src/core/lib/surface/completion_queue.h"
+}
+
 namespace grpc {
 namespace testing {
 
diff --git a/test/cpp/qps/server_async.cc b/test/cpp/qps/server_async.cc
index 57f45d325feb156ab98f99c16c0dc2fcd49fd3c5..4f0b1f54d7f825bdd719e2db1c3521e7e182ade9 100644
--- a/test/cpp/qps/server_async.cc
+++ b/test/cpp/qps/server_async.cc
@@ -53,10 +53,6 @@
 #include "test/core/util/test_config.h"
 #include "test/cpp/qps/server.h"
 
-extern "C" {
-#include "src/core/lib/surface/completion_queue.h"
-}
-
 namespace grpc {
 namespace testing {