On 04/10, Eric W. Biederman wrote: > > +int kthreadd(void *unused) > +{ > + /* Setup a clean context for our children to inherit. */ > + kthreadd_setup(); > + > + current->flags |= PF_NOFREEZE; > + > + for (;;) { > + wait_event(kthread_create_work, > + !list_empty(&kthread_create_list)); > + > + spin_lock(&kthread_create_lock); > + while (!list_empty(&kthread_create_list)) {
Do we need to check the condition under lock? We can miss an event, but then it will be noticed by wait_event() above. > + struct kthread_create_info *create; > + > + create = list_entry(kthread_create_list.next, > + struct kthread_create_info, list); > + list_del_init(&create->list); > + spin_unlock(&kthread_create_lock); > + > + create_kthread(create); > + > + spin_lock(&kthread_create_lock); > + } > + spin_unlock(&kthread_create_lock); > + } IOW, for (;;) { wait_event(kthread_create_work, !list_empty(&kthread_create_list)); while (!list_empty(&kthread_create_list)) { struct kthread_create_info *create; spin_lock(&kthread_create_lock); create = list_entry(kthread_create_list.next, struct kthread_create_info, list); list_del_init(&create->list); spin_unlock(&kthread_create_lock); create_kthread(create); } } Oleg. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/