Re: [Patch] export sched_setscheduler() for kernel module use

From: Dean Nelson (dcn_at_sgi.com)
Date: 12/09/04

  • Next message: Rui Nuno Capela: "Re: [patch] Real-Time Preemption, -RT-2.6.10-rc2-mm3-V0.7.32-12"
    Date:	Thu, 9 Dec 2004 08:36:32 -0600
    To: Chris Wright <chrisw@osdl.org>
    
    

    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/


  • Next message: Rui Nuno Capela: "Re: [patch] Real-Time Preemption, -RT-2.6.10-rc2-mm3-V0.7.32-12"

    Relevant Pages