Forráskód Böngészése

fix printing data requests in gdb

Samuel Thibault 9 éve
szülő
commit
b75b95b108
3 módosított fájl, 35 hozzáadás és 5 törlés
  1. 28 0
      src/common/prio_list.h
  2. 3 1
      src/datawizard/data_request.c
  3. 4 4
      tools/gdbinit

+ 28 - 0
src/common/prio_list.h

@@ -57,6 +57,8 @@
 #define PRIO_LIST_TYPE(ENAME, PRIOFIELD) \
 	PRIO_LIST_CREATE_TYPE(ENAME, PRIOFIELD)
 
+#ifndef STARPU_DEBUG
+
 #define PRIO_LIST_CREATE_TYPE(ENAME, PRIOFIELD) \
 	/* The main type: an RB binary tree */ \
 	struct ENAME##_prio_list { \
@@ -235,4 +237,30 @@
 		return 0; \
 	}
 
+#else
+
+/* gdbinit can't recurse in a tree. Use a mere list in debugging mode.  */
+#define PRIO_LIST_CREATE_TYPE(ENAME, PRIOFIELD) \
+	struct ENAME##_prio_list { struct ENAME##_list list; }; \
+	static inline void ENAME##_prio_list_init(struct ENAME##_prio_list *priolist) \
+	{ ENAME##_list_init(&(priolist)->list); } \
+	static inline void ENAME##_prio_list_deinit(struct ENAME##_prio_list *priolist) \
+	{ (void) (priolist); /* ENAME##_list_deinit(&(priolist)->list); */ } \
+	static inline void ENAME##_prio_list_push_back(struct ENAME##_prio_list *priolist, struct ENAME *e) \
+	{ ENAME##_list_push_back(&(priolist)->list, (e)); } \
+	static inline void ENAME##_prio_list_push_front(struct ENAME##_prio_list *priolist, struct ENAME *e) \
+	{ ENAME##_list_push_front(&(priolist)->list, (e)); } \
+	static inline int ENAME##_prio_list_empty(struct ENAME##_prio_list *priolist) \
+	{ return ENAME##_list_empty(&(priolist)->list); } \
+	static inline void ENAME##_prio_list_erase(struct ENAME##_prio_list *priolist, struct ENAME *e) \
+	{ ENAME##_list_erase(&(priolist)->list, (e)); } \
+	static inline struct ENAME *ENAME##_prio_list_pop_front(struct ENAME##_prio_list *priolist) \
+	{ return ENAME##_list_pop_front(&(priolist)->list); } \
+	static inline void ENAME##_prio_list_push_prio_list_back(struct ENAME##_prio_list *priolist, struct ENAME##_prio_list *priolist_toadd) \
+	{ ENAME##_list_push_list_back(&(priolist)->list, &(priolist_toadd)->list); } \
+	static inline int ENAME##_prio_list_ismember(struct ENAME##_prio_list *priolist, struct ENAME *e) \
+	{ return ENAME##_list_ismember(&(priolist)->list, (e)); } \
+
+#endif
+
 #endif // __PRIO_LIST_H__

+ 3 - 1
src/datawizard/data_request.c

@@ -1,6 +1,6 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
- * Copyright (C) 2009-2015  Université de Bordeaux
+ * Copyright (C) 2009-2016  Université de Bordeaux
  * Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015  CNRS
  *
  * StarPU is free software; you can redistribute it and/or modify
@@ -51,12 +51,14 @@ void _starpu_init_data_request_lists(void)
 		_starpu_data_request_prio_list_init(&prefetch_requests[i]);
 		_starpu_data_request_prio_list_init(&idle_requests[i]);
 
+#ifndef STARPU_DEBUG
 		/* Tell helgrind that we are fine with checking for list_empty
 		 * in _starpu_handle_node_data_requests, we will call it
 		 * periodically anyway */
 		STARPU_HG_DISABLE_CHECKING(data_requests[i].tree.root);
 		STARPU_HG_DISABLE_CHECKING(prefetch_requests[i].tree.root);
 		STARPU_HG_DISABLE_CHECKING(idle_requests[i].tree.root);
+#endif
 
 		STARPU_PTHREAD_MUTEX_INIT(&data_requests_list_mutex[i], NULL);
 

+ 4 - 4
tools/gdbinit

@@ -523,7 +523,7 @@ define starpu-print-requests
   set $node = 0
   while $node < _starpu_descr.nnodes
     printf "Node %u:\n", $node
-    set $request = data_requests[$node]._head
+    set $request = data_requests[$node].list._head
     while $request != 0
       printf " Request %p: handle %p ", $request, $request->handle
       starpu-print-mode $request->mode
@@ -539,7 +539,7 @@ define starpu-print-prequests
   while $node < _starpu_descr.nnodes
     printf "Node %u:\n", $node
     printf "%u pending requests\n", data_requests_npending[$node]
-    set $request = data_requests_pending[$node]._head
+    set $request = data_requests_pending[$node].list._head
     while $request != 0
       printf " Request %p: handle %p ", $request, $request->handle
       starpu-print-mode $request->mode
@@ -572,7 +572,7 @@ define starpu-print-frequests
   set $node = 0
   while $node < _starpu_descr.nnodes
     printf "Node %u:\n", $node
-    set $request = prefetch_requests[$node]._head
+    set $request = prefetch_requests[$node].list._head
     while $request != 0
       printf " Request %p: handle %p ", $request, $request->handle
       starpu-print-mode $request->mode
@@ -587,7 +587,7 @@ define starpu-print-irequests
   set $node = 0
   while $node < _starpu_descr.nnodes
     printf "Node %u:\n", $node
-    set $request = idle_requests[$node]._head
+    set $request = idle_requests[$node].list._head
     while $request != 0
       printf " Request %p: handle %p ", $request, $request->handle
       starpu-print-mode $request->mode