[PATCH Dovetail 01/13] cobalt/thread: pipeline: abstract threadinfo accessor

Philippe Gerum rpm at xenomai.org
Sat Jan 2 10:33:41 CET 2021


From: Philippe Gerum <rpm at xenomai.org>

The I-pipe and Dovetail access the per-thread information block
differently. Abstract this kernel interface.

No functional change is introduced.

Signed-off-by: Philippe Gerum <rpm at xenomai.org>
---
 include/cobalt/kernel/ipipe/pipeline/thread.h | 26 +++++++++++++++++++
 include/cobalt/kernel/thread.h                |  5 ++--
 kernel/cobalt/ipipe/kevents.c                 |  6 ++---
 kernel/cobalt/posix/process.c                 |  4 +--
 kernel/cobalt/posix/process.h                 |  5 ++--
 kernel/cobalt/thread.c                        |  4 +--
 6 files changed, 39 insertions(+), 11 deletions(-)
 create mode 100644 include/cobalt/kernel/ipipe/pipeline/thread.h

diff --git a/include/cobalt/kernel/ipipe/pipeline/thread.h b/include/cobalt/kernel/ipipe/pipeline/thread.h
new file mode 100644
index 000000000..a62e622c4
--- /dev/null
+++ b/include/cobalt/kernel/ipipe/pipeline/thread.h
@@ -0,0 +1,26 @@
+/*
+ * SPDX-License-Identifier: GPL-2.0
+ *
+ * Copyright (C) 2019 Philippe Gerum  <rpm at xenomai.org>
+ */
+
+#ifndef _COBALT_KERNEL_IPIPE_THREAD_H
+#define _COBALT_KERNEL_IPIPE_THREAD_H
+
+#include <linux/ipipe.h>
+
+struct xnthread;
+
+#define cobalt_threadinfo ipipe_threadinfo
+
+static inline struct cobalt_threadinfo *pipeline_current(void)
+{
+	return ipipe_current_threadinfo();
+}
+
+static inline struct xnthread *pipeline_thread_from_task(struct task_struct *p)
+{
+	return ipipe_task_threadinfo(p)->thread;
+}
+
+#endif /* !_COBALT_KERNEL_IPIPE_THREAD_H */
diff --git a/include/cobalt/kernel/thread.h b/include/cobalt/kernel/thread.h
index 21a8603b4..2d57b8398 100644
--- a/include/cobalt/kernel/thread.h
+++ b/include/cobalt/kernel/thread.h
@@ -22,6 +22,7 @@
 #include <linux/wait.h>
 #include <linux/sched.h>
 #include <linux/sched/rt.h>
+#include <pipeline/thread.h>
 #include <cobalt/kernel/list.h>
 #include <cobalt/kernel/stat.h>
 #include <cobalt/kernel/timer.h>
@@ -372,7 +373,7 @@ void __xnthread_discard(struct xnthread *thread);
  */
 static inline struct xnthread *xnthread_current(void)
 {
-	return ipipe_current_threadinfo()->thread;
+	return pipeline_current()->thread;
 }
 
 /**
@@ -388,7 +389,7 @@ static inline struct xnthread *xnthread_current(void)
  */
 static inline struct xnthread *xnthread_from_task(struct task_struct *p)
 {
-	return ipipe_task_threadinfo(p)->thread;
+	return pipeline_thread_from_task(p);
 }
 
 /**
diff --git a/kernel/cobalt/ipipe/kevents.c b/kernel/cobalt/ipipe/kevents.c
index ba584677c..e0d4a1288 100644
--- a/kernel/cobalt/ipipe/kevents.c
+++ b/kernel/cobalt/ipipe/kevents.c
@@ -831,16 +831,16 @@ static inline int get_mayday_prot(void)
 
 void pipeline_attach_current(struct xnthread *thread)
 {
-	struct ipipe_threadinfo *p;
+	struct cobalt_threadinfo *p;
 
-	p = ipipe_current_threadinfo();
+	p = pipeline_current();
 	p->thread = thread;
 	p->process = cobalt_search_process(current->mm);
 }
 
 static void detach_current(void)
 {
-	struct ipipe_threadinfo *p = ipipe_current_threadinfo();
+	struct cobalt_threadinfo *p = pipeline_current();
 	p->thread = NULL;
 	p->process = NULL;
 }
diff --git a/kernel/cobalt/posix/process.c b/kernel/cobalt/posix/process.c
index 9bc6082d0..accd989ca 100644
--- a/kernel/cobalt/posix/process.c
+++ b/kernel/cobalt/posix/process.c
@@ -463,7 +463,7 @@ EXPORT_SYMBOL_GPL(cobalt_unregister_personality);
 struct xnthread_personality *
 cobalt_push_personality(int xid)
 {
-	struct ipipe_threadinfo *p = ipipe_current_threadinfo();
+	struct cobalt_threadinfo *p = pipeline_current();
 	struct xnthread_personality *prev, *next;
 	struct xnthread *thread = p->thread;
 
@@ -504,7 +504,7 @@ EXPORT_SYMBOL_GPL(cobalt_push_personality);
  */
 void cobalt_pop_personality(struct xnthread_personality *prev)
 {
-	struct ipipe_threadinfo *p = ipipe_current_threadinfo();
+	struct cobalt_threadinfo *p = pipeline_current();
 	struct xnthread *thread = p->thread;
 
 	secondary_mode_only();
diff --git a/kernel/cobalt/posix/process.h b/kernel/cobalt/posix/process.h
index 3a38ae639..a2f4ec591 100644
--- a/kernel/cobalt/posix/process.h
+++ b/kernel/cobalt/posix/process.h
@@ -20,6 +20,7 @@
 
 #include <linux/list.h>
 #include <linux/bitmap.h>
+#include <pipeline/thread.h>
 #include <cobalt/kernel/ppd.h>
 
 #define KEVENT_PROPAGATE   0
@@ -94,13 +95,13 @@ extern struct cobalt_resources cobalt_global_resources;
 
 static inline struct cobalt_process *cobalt_current_process(void)
 {
-	return ipipe_current_threadinfo()->process;
+	return pipeline_current()->process;
 }
 
 static inline struct cobalt_process *
 cobalt_set_process(struct cobalt_process *process)
 {
-	struct ipipe_threadinfo *p = ipipe_current_threadinfo();
+	struct cobalt_threadinfo *p = pipeline_current();
 	struct cobalt_process *old;
 
 	old = p->process;
diff --git a/kernel/cobalt/thread.c b/kernel/cobalt/thread.c
index a882bcc45..b871e6069 100644
--- a/kernel/cobalt/thread.c
+++ b/kernel/cobalt/thread.c
@@ -2452,9 +2452,9 @@ static inline void wakeup_parent(struct completion *done)
 
 static inline void init_kthread_info(struct xnthread *thread)
 {
-	struct ipipe_threadinfo *p;
+	struct cobalt_threadinfo *p;
 
-	p = ipipe_current_threadinfo();
+	p = pipeline_current();
 	p->thread = thread;
 	p->process = NULL;
 }
-- 
2.26.2




More information about the Xenomai mailing list