summaryrefslogtreecommitdiffstats
path: root/src/include
diff options
context:
space:
mode:
authorPatrick Williams <iawillia@us.ibm.com>2010-06-09 13:54:08 -0500
committerPatrick Williams <iawillia@us.ibm.com>2010-06-09 13:54:08 -0500
commitcbbd9e5b225e743ee3b4688ac6a3b69a9876926a (patch)
treeac9ccc37c35855edeeecbf3ebe1cb55d3c2f6f89 /src/include
parent9a4698af6ee4c095a97b8800d2d5f0a4bb282b15 (diff)
downloadtalos-hostboot-cbbd9e5b225e743ee3b4688ac6a3b69a9876926a.tar.gz
talos-hostboot-cbbd9e5b225e743ee3b4688ac6a3b69a9876926a.zip
Refactor task-manager tid counter to generic lockfree algorithm.
Diffstat (limited to 'src/include')
-rw-r--r--src/include/kernel/taskmgr.H6
-rw-r--r--src/include/util/lockfree/counter.H23
2 files changed, 26 insertions, 3 deletions
diff --git a/src/include/kernel/taskmgr.H b/src/include/kernel/taskmgr.H
index 2bdb39c16..3cf036f37 100644
--- a/src/include/kernel/taskmgr.H
+++ b/src/include/kernel/taskmgr.H
@@ -2,6 +2,7 @@
#define __KENREL_TASKMGR_H
#include <kernel/types.h>
+#include <util/lockfree/counter.H>
class TaskManager
{
@@ -20,9 +21,8 @@ class TaskManager
static task_t* createIdleTask();
private:
- tid_t getNextTid();
-
- tid_t iv_nextTid;
+ tid_t getNextTid() { return iv_nextTid.next(); };
+ Util::Lockfree::Counter<tid_t> iv_nextTid;
static void idleTaskLoop(void*);
task_t* _createIdleTask();
diff --git a/src/include/util/lockfree/counter.H b/src/include/util/lockfree/counter.H
new file mode 100644
index 000000000..1ff61fc77
--- /dev/null
+++ b/src/include/util/lockfree/counter.H
@@ -0,0 +1,23 @@
+#ifndef __UTIL_LOCKFREE_COUNTER_H
+#define __UTIL_LOCKFREE_COUNTER_H
+
+namespace Util
+{
+ namespace Lockfree
+ {
+ template <typename _T>
+ class Counter
+ {
+ public:
+ Counter() : value(_T()) {};
+
+ _T next() { return __sync_fetch_and_add(&value, 1); };
+
+ private:
+ _T value;
+ };
+ };
+};
+
+
+#endif
OpenPOWER on IntegriCloud