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/

Reply via email to