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;

OK, the spin_unlock() wont let the load leak. Thus it is fine as is.


> +                     raw_spin_lock(&console_owner_lock);
> +                     owner = console_owner;
> +                     waiter = console_waiter;
> +                     if (!waiter && owner && owner != current) {

But Mathieu Desnoyers pointed out that usage of variables within a
spinlock may be an issue. Although, it shouldn't affect the code as is,
I think I'll add back READ/WRITE_ONCE() just to be on the safe side.

I may add the waiter = READ_ONCE(console_waiter) to the first one too,
more as documentation. It should cause any issues to add it.

-- Steve



> +                             console_waiter = true;
> +                             spin = true;
> +                     }
> +                     raw_spin_unlock(&console_owner_lock);

Reply via email to