On Thu, 2 Nov 2017 13:06:05 -0400
Steven Rostedt <[email protected]> wrote:

> +             raw_spin_lock(&console_owner_lock);
> +             waiter = console_waiter;
> +             console_owner = NULL;
> +             raw_spin_unlock(&console_owner_lock);
> +
> +             /*
> +              * If there is a waiter waiting for us, then pass the
> +              * rest of the work load over to that waiter.
> +              */
> +             if (waiter)
> +                     break;
> +

Hmm, do I need a READ_ONCE() here?

Can gcc do the load of console_waiter outside the spin lock where 
if (waiter) is done?

Although it doesn't really matter, but it just makes the code more
fragile if it can. Should this be:

                raw_spin_lock(&console_owner_lock);
                waiter = READ_ONCE(console_waiter);
                console_owner = NULL;
                raw_spin_unlock(&console_owner_lock);

                /*
                 * If there is a waiter waiting for us, then pass the
                 * rest of the work load over to that waiter.
                 */
                if (waiter)
                        break;

 ?

-- Steve

Reply via email to