lkml.org 
[lkml]   [2014]   [Oct]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH 3/7] wait.[ch]: Introduce the simple waitqueue (swait) implementation
On Fri, Oct 17, 2014 at 08:22:58PM -0400, Paul Gortmaker wrote:
> @@ -75,6 +123,32 @@ static void __cwake_up_common(struct cwait_head *q, unsigned int mode,
> }
> }
>
> +static void __swake_up_common(struct swait_head *q, unsigned int mode,
> + int nr_exclusive)
> +{
> + struct swait *curr, *next;
> + int woken = 0;
> +
> + list_for_each_entry_safe(curr, next, &q->task_list, node) {
> + if (wake_up_state(curr->task, mode)) { /* <-- calls ttwu() */
> + __remove_swait(q, curr);
> + curr->task = NULL;
> + /*
> + * The waiting task can free the waiter as
> + * soon as curr->task = NULL is written,
> + * without taking any locks. A memory barrier
> + * is required here to prevent the following
> + * store to curr->task from getting ahead of
> + * the dequeue operation.
> + */
> + smp_wmb();
> + if (++woken == nr_exclusive)
> + break;
> + }
> +
> + }
> +}
> +
> /**
> * __cwake_up - wake up threads blocked on a waitqueue.
> * @q: the complex waitqueue
> @@ -96,6 +170,19 @@ void __cwake_up(struct cwait_head *q, unsigned int mode, int nr_exclusive,
> }
> EXPORT_SYMBOL(__cwake_up);
>
> +void __swake_up(struct swait_head *q, unsigned int mode, int nr_exclusive)
> +{
> + unsigned long flags;
> +
> + if (!swait_active(q))
> + return;
> +
> + raw_spin_lock_irqsave(&q->lock, flags);
> + __swake_up_common(q, mode, nr_exclusive);
> + raw_spin_unlock_irqrestore(&q->lock, flags);
> +}
> +EXPORT_SYMBOL(__swake_up);

Same comment as before, that is an unbounded loop in a non preemptible
section and therefore violates RT design principles.

We actually did talk about ways of fixing that.

Also, I'm not entirely sure we want to do the cwait thing, it looks
painful.


\
 
 \ /
  Last update: 2014-10-19 00:01    [W:0.079 / U:0.856 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site