[PATCH gnumach v1 1/4] initialise max_priority to BASEPRI_SYSTEM

[email protected]
Newsgroups gmane.os.hurd.bugs
Message-ID <4e12206b99f7a62ec6ae7074d32085aa01938582.1778373360.git.dnietoc@gmail.com>
From: Diego Nieto Cid <[email protected]>

Set the default thread and processor set max priority to
that of system threads to allow privileged task to raise
its own priority.

  * kern/processor.c: modify pset_init to set the initial
                      max_priority to BASEPRI_SYSTE.
  * kern/thread.c: set the thread template max_priority to
                   BASEPRI_SYSTEM.
---
 kern/processor.c |  6 +++---
 kern/thread.c    | 12 +++++++++++-
 2 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/kern/processor.c b/kern/processor.c
index ee1f7694..485eb51b 100644
--- a/kern/processor.c
+++ b/kern/processor.c
@@ -91,8 +91,8 @@ void pset_sys_bootstrap(void)
 	default_pset.active = TRUE;
 
 	/*
-	 *	Note: the default_pset has a max_priority of BASEPRI_USER.
-	 *	Internal kernel threads override this in kernel_thread.
+	 *	Note: the default_pset has a max_priority of BASEPRI_SYSTEM
+	 *	so that privileged tasks can raise its priority later on.
 	 */
 }
 
@@ -160,7 +160,7 @@ void pset_init(
 	simple_lock_init(&pset->lock);
 	pset->pset_self = IP_NULL;
 	pset->pset_name_self = IP_NULL;
-	pset->max_priority = BASEPRI_USER;
+	pset->max_priority = BASEPRI_SYSTEM;
 #if	MACH_FIXPRI
 	pset->policies = POLICY_TIMESHARE;
 #endif	/* MACH_FIXPRI */
diff --git a/kern/thread.c b/kern/thread.c
index deb9688d..5a0989ae 100644
--- a/kern/thread.c
+++ b/kern/thread.c
@@ -335,7 +335,11 @@ void thread_init(void)
 	thread_template.swap_func = thread_bootstrap_return;
 
 /*	thread_template.priority (later) */
-	thread_template.max_priority = BASEPRI_USER;
+	/*
+	 *	Set an a priori max priority, but avoid going
+	 *	higher than SYSTEM threads.
+	 */
+	thread_template.max_priority = BASEPRI_SYSTEM;
 /*	thread_template.sched_pri (later - compute_priority) */
 #if	MACH_FIXPRI
 	thread_template.sched_data = 0;
@@ -1736,6 +1740,12 @@ thread_t kernel_thread(
 	 *	The swapin mechanism might not be operational yet.
 	 */
 	thread_doswapin(thread);
+	/*
+	 *	task_create above, computed the max_priority from
+	 *	the task and processor set's max_priority.
+	 *	Since this is a kernel thread, set its max_priority
+	 *	to BASEPRI_SYSTEM.
+	 */
 	thread->max_priority = BASEPRI_SYSTEM;
 	thread->priority = BASEPRI_SYSTEM;
 	thread->sched_pri = BASEPRI_SYSTEM;
-- 
2.53.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.