Re: [RFC PATCH v2 01/10] CPU hotplug: Provide APIs for "light" atomic readers to prevent CPU offline
From: Srivatsa S. Bhat <hidden>
Date: 2012-12-05 18:55:06
Also in:
lkml
Replaying what Tejun wrote: Hello, Oleg.
Replaying what Oleg wrote: Hi, Sorry I don't understand the context and I can't find this thread anywhere, so I am not sure I understand...
Weird, lkml cc is missing. Srivatsa? [Now fixed. This thread has lkml CC]
quoted
Replaying what Tejun wrote: So, we basically need percpu_rwlock. We already have percpu_rwsem.Yes, and with -mm patches it becomes reader-friendly. In particular see http://marc.info/?l=linux-mm-commits&m=135240650828875quoted
Oleg, it seems CPU hotplug needs big-reader rwlock, ideas on how to proceed?I am going to convert get_online_cpus() to use percpu_down_read(), this looks simple. We already discussed this with Paul, see http://marc.info/?l=linux-kernel&m=135248463226031 and the whole thread. In short, all we need is percpu_down_write_recursive_readers() and afaics the only complication is lockdep, we need down_read_no_lockdep() which (like __up_read) doesn't do rwsem_acquire_read().
So, it's a different thing. There are two mechanism protecting against cpu hotplug - get_online_cpus() and preempt_disable(). The former can be used by ones which can sleep and need to protect against the whole up/down process (DOWN_PREPARE and so on). The latter protects the last step and can be used when the caller can't sleep. Replacing get_online_cpus() w/ percpu_rwsem is great but this thread is about replacing preempt_disable with something finer grained and less heavy on the writer side - IOW, percpu_rwlock as opposed to percpu_rwsem, so, I think the end result would be that CPU hotplug will be protected by percpu_rwsem for the whole part and by percpu_rwlock for the last commit stage. The problem seems that we don't have percpu_rwlock yet. It shouldn't be too difficult to implement, right? Thanks. -- tejun