Re: [PATCH v2] ipc/msg: Implement lockless pipelined wakeups

From: Peter Zijlstra
Date: Wed Nov 04 2015 - 07:02:37 EST


On Tue, Nov 03, 2015 at 04:03:29PM +0100, Sebastian Andrzej Siewior wrote:
> @@ -932,58 +924,26 @@ long do_msgrcv(int msqid, void __user *buf, size_t bufsz, long msgtyp, int msgfl
> rcu_read_lock();
>
> /* Lockless receive, part 2:

This is a broken comment style, please fix that while you're there
anyway.

Also, the comment above ("Lockless receive, part 1:") is broken
too, not only in style, but it refers to rcu_read_unlock() as disabling
preemption, and avoiding preemption, which is false.

> + * The work in pipelined_send() and expunge_all():
> + * - Set pointer to message
> + * - Queue the receiver task for later wakeup
> + * - Wake up the process after the lock is dropped.
> *
> + * Should the process wake up before this wakeup (due to a
> + * signal) it will either see the message and continue ...
> */
>
> + msg = msr_d.r_msg;

Since this is a lockless read, it should very much be READ_ONCE(), esp.
since you killed the volatile on its type.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/