diff --git a/drivers/gpu/msm/kgsl_vbo.c b/drivers/gpu/msm/kgsl_vbo.c
index 551822ba98daf1b11a835b35c47642924dadd280..c850a47f0fdbe3136bca7672559a4114d84109d0 100644
--- a/drivers/gpu/msm/kgsl_vbo.c
+++ b/drivers/gpu/msm/kgsl_vbo.c
@@ -12,6 +12,7 @@
 
 #include "kgsl_device.h"
 #include "kgsl_mmu.h"
+#include "kgsl_reclaim.h"
 #include "kgsl_sharedmem.h"
 #include "kgsl_trace.h"
 
@@ -371,6 +372,12 @@ kgsl_sharedmem_create_bind_op(struct kgsl_process_private *private,
 	op->nr_ops = ranges_nents;
 	op->target = target;
 
+	/* Make sure process is pinned in memory before proceeding */
+	atomic_inc(&private->cmd_count);
+	ret = kgsl_reclaim_to_pinned_state(private);
+	if (ret)
+		goto err;
+
 	for (i = 0; i < ranges_nents; i++) {
 		struct kgsl_gpumem_bind_range range;
 		struct kgsl_mem_entry *entry;
@@ -471,12 +478,14 @@ kgsl_sharedmem_create_bind_op(struct kgsl_process_private *private,
 		ranges += ranges_size;
 	}
 
+	atomic_dec(&private->cmd_count);
 	init_completion(&op->comp);
 	kref_init(&op->ref);
 
 	return op;
 
 err:
+	atomic_dec(&private->cmd_count);
 	kgsl_sharedmem_free_bind_op(op);
 	return ERR_PTR(ret);
 }