Re: [RFC PATCH 1/2] lib/percpu-list: Per-cpu list with associated per-cpu locks
From: Waiman Long
Date: Wed Feb 17 2016 - 11:16:31 EST
On 02/17/2016 06:05 AM, Peter Zijlstra wrote:
On Wed, Feb 17, 2016 at 12:00:40PM +0100, Peter Zijlstra wrote:
On Wed, Feb 17, 2016 at 08:53:18PM +1100, Dave Chinner wrote:
+/**
+ * for_all_percpu_list_entries - iterate over all the per-cpu list with locking
But the locking is 'pointless'. You only lock one per-cpu sublist at a
time, therefore the list can be modified concurrently anyhow.
For each per-cpu list, there can be only 1 task allowed to make changes.
If you are talking about all the per-cpu lists within the group,
operations can happen in parallel.
So why not use RCU for the list iteration and avoid potentially large
lock hold times?
I know we can use RCU for singly linked list, but I don't think we can
use that for doubly linked list as there is no easy way to make atomic
changes to both prev and next pointers simultaneously unless you are
taking about 16b cmpxchg which is only supported in some architecture.
Cheers,
Longman