bug-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: RFC: [PATCH] Fix setpriority calling __task_priority() for processes


From: Svante Signell
Subject: Re: RFC: [PATCH] Fix setpriority calling __task_priority() for processes instead of threads.
Date: Thu, 01 Sep 2016 12:44:04 +0200

On Wed, 2016-08-31 at 14:16 +0200, Samuel Thibault wrote:
> Svante Signell, on Wed 31 Aug 2016 14:10:22 +0200, wrote:
> > 
>
> > I would expect values [-20,19] to be OK converted to [5,44] with
> > #define NICE_TO_MACH_PRIORITY(nice) ((nice) + 25) from hurd/hurd/resource.h
> > and 
> > #define invalid_pri(pri) (((pri) < 0) || ((pri) >= NRQS)), where NRQS = 50
> > from kern/sched.h.
> > to work.
> Yes, but see the code changing thread priorities (since that's what is
> posing problem)

Digging a little further shows that tasks and threads are created with
BASEPRI_USER=25 (NICE_TO_MACH_PRIORITY(0)=25). On the other hand kernel threads
has a max priority of BASEPRI_SYSTEM=6 (NICE_TO_MACH_PRIORITY(-19)=6). 
(is -20 not possible as for Linux??)

In the code kern/task.c:task_priority() we have
if (change_threads) {
...
if (thread_priority(thread, priority, TRUE)!= KERN_SUCCESS) ret = KERN_FAILURE;
and in kern/thread.c:thread_priority():
if (priority < thread->max_priority) {ret = KERN_FAILURE;}
irrespective of being root or not. Should code be added to check for root(how)
in task-priority() and call kern/thread.c:thread_max_priority() for all threads
in the task? Or are tasks created by root different in gnumach?



reply via email to

[Prev in Thread] Current Thread [Next in Thread]