lkml.org 
[lkml]   [2009]   [Sep]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH] kthreads: Fix startup synchronization boot crash
    On 09/01, Ingo Molnar wrote:
    >
    > In fact i dont see any proper serialization here: there appears to
    > be a race between the initial task and the init task (which are not
    > one and the same). The race is possibly timing dependent as well,
    > hence the (in hindsight, false) dependency on the stackprotector
    > commit.

    Yes, this looks racy, and I think this was always racy.

    > I think the bug was introduced
    > via:
    >
    > cdd140b: kthreads: simplify the startup synchronization

    Cough ;) No, I don't think this patch introduced this bug. With or without
    this patch, kthread_create() assumes kthreadd_task != NULL, otherwise
    wake_up_process(kthreadd_task) is obviously can crash.

    > static DEFINE_SPINLOCK(kthread_create_lock);
    > static LIST_HEAD(kthread_create_list);
    > +
    > struct task_struct *kthreadd_task;
    > +DECLARE_COMPLETION(kthreadd_task_init_done);
    >
    > struct kthread_create_info
    > {
    > @@ -129,6 +131,9 @@ struct task_struct *kthread_create(int (*threadfn)(void *data),
    > list_add_tail(&create.list, &kthread_create_list);
    > spin_unlock(&kthread_create_lock);
    >
    > + if (unlikely(!kthreadd_task))
    > + wait_for_completion(&kthreadd_task_init_done);
    > +

    Yes, this should work. But I _think_ we can make the better fix...

    I'll try to make the patch soon. Afaics we don't need kthreadd_task_init_done.

    Oleg.



    \
     
     \ /
      Last update: 2009-09-01 15:15    [W:0.029 / U:0.608 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site