Messages in this thread | | | Date | Thu, 9 Dec 2004 08:36:32 -0600 | From | Dean Nelson <> | Subject | Re: [Patch] export sched_setscheduler() for kernel module use |
| |
On Mon, Nov 15, 2004 at 01:27:49PM -0800, Chris Wright wrote: > * Dean Nelson (dcn@sgi.com) wrote: > > On Mon, Nov 15, 2004 at 10:58:01AM -0800, Chris Wright wrote: > > > * Dean Nelson (dcn@sgi.com) wrote: > > > > +int do_sched_setscheduler(pid_t pid, int policy, struct sched_param __user *param) > > > > > > this should be static. > > > > You're right. I made another change in that one now passes the task_struct > > pointer to sched_setscheduler() instead of the pid. This requires that > > the caller of sched_setscheduler() hold the tasklist_lock. The new patch > > for people's feedback follows. > > This now means callers of sched_setscheduler hold tasklist_lock, also > with irq off. I think it's safer to let the core function do that. > It's a touchy area that's ripe for deadlock.
After some further investigation, I think I was mistaken in saying that the caller of sched_setscheduler() must hold the tasklist_lock.
If you look at the example of sys_setpriority() and sys_nice(), both of which call set_user_nice(), the first one does so via set_one_prio() while holding the tasklist_lock, the second one does so while not holding the tasklist_lock. The difference seems to be whether the caller was operating against a task_struct located by way of pid or uid (like calling find_task_by_pid()), which is the case for sys_setpriority(), whereas sys_nice() operates against the current task_struct.
Now my proposed sched_setscheduler() is very similar to set_user_nice(). And sys_sched_setscheduler()/do_sched_setscheduler() is very similar to sys_setpriority()/set_one_prio(). And the kernel module (XPC) that I'm attempting to get accepted by the community would be analagous to sys_nice() in that its call to sched_setscheduler() would be against the current task.
So if there is a problem with my proposed patch in regards to the tasklist_lock, then it would seem to me that there is a problem with the exiting sys_setpriority(), set_one_prio(), sys_nice(), set_user_nice() code.
Or am I missing something?
Thanks, Dean
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |