[PATCH 0/3] rculist: Fix list_entry_rcu to read ptr with, rcu_dereference_raw
From: Patrick Marlier
Date: Tue Mar 24 2015 - 06:31:42 EST
Hi Paul and Josh,
While running some benchmarks with rcu, I noticed that rculist had a
performance issue compared to the non-rcu list.
Having a closer look at the rlulist, I found that there is a bad usage
of rcu_dereference_raw in list_entry_rcu().
Indeed, "typeof (*ptr) *__ptr = ptr;" reads ptr and
"rcu_dereference_raw(__ptr)" forces read on the stack variable __ptr.
However, ptr should be read with rcu_dereference_raw not the __ptr.
This was introduced some years ago with commit 67bdbffd (2010-02-25).
I am proposing to revert this part of the patch but probably this can be
fixed differently.
Fixing this showed 2 problems in the usage of list_entry_rcu.
Since it touches other parts of kernel, I guess it requires ack from
other maintainers.
Thanks.
PS: I will Cc the others maintainers when somebody confirms the problem.
Signed-off-by: Patrick Marlier <patrick.marlier@xxxxxxxxx>
Cc: "Paul E. McKenney" <paulmck@xxxxxxxxxxxxxxxxxx>
Cc: Josh Triplett <josh@xxxxxxxxxxxxxxxx>
Cc: Arnd Bergmann <arnd@xxxxxxxx>
--
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/