Messages in this thread | | | Date | Wed, 11 Apr 2007 16:04:31 +0400 | From | Oleg Nesterov <> | Subject | Re: [PATCH] kthread: Don't depend on work queues |
| |
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 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/
| |