diff --git a/runtime/linux/runtime_defines.h b/runtime/linux/runtime_defines.h
index e69de29..6b44e0d 100644
--- a/runtime/linux/runtime_defines.h
+++ b/runtime/linux/runtime_defines.h
@@ -0,0 +1,4 @@
+#include <linux/gfp.h>
+#ifndef __GFP_WAIT
+#define __GFP_WAIT __GFP_RECLAIM
+#endif
diff --git a/runtime/stp_utrace.c b/runtime/stp_utrace.c
index c69dec1..a8afc0d 100644
--- a/runtime/stp_utrace.c
+++ b/runtime/stp_utrace.c
@@ -511,7 +511,8 @@ static struct utrace *__task_utrace_struct(struct task_struct *task)
  */
 static bool utrace_task_alloc(struct task_struct *task)
 {
-	struct utrace *utrace = kmem_cache_zalloc(utrace_cachep, GFP_IOFS);
+	struct utrace *utrace = kmem_cache_zalloc(utrace_cachep,
+						  STP_ALLOC_FLAGS);
 	struct utrace *u;
 
 	if (unlikely(!utrace))
@@ -782,7 +783,7 @@ static struct utrace_engine *utrace_attach_task(
 		utrace = task_utrace_struct(target);
 	}
 
-	engine = kmem_cache_alloc(utrace_engine_cachep, GFP_IOFS);
+	engine = kmem_cache_alloc(utrace_engine_cachep, STP_ALLOC_FLAGS);
 	if (unlikely(!engine))
 		return ERR_PTR(-ENOMEM);
 
-- 
1.7.1