Add the support for defining and initializing percpu-rwlocks at compile time
for those users who would like to use percpu-rwlocks really early in the boot
process (even before dynamic per-CPU allocations can begin).

Cc: David Howells <dhowe...@redhat.com>
Signed-off-by: Srivatsa S. Bhat <srivatsa.b...@linux.vnet.ibm.com>
---

 include/linux/percpu-rwlock.h |   18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/include/linux/percpu-rwlock.h b/include/linux/percpu-rwlock.h
index cd5eab5..8dec8fe 100644
--- a/include/linux/percpu-rwlock.h
+++ b/include/linux/percpu-rwlock.h
@@ -45,6 +45,24 @@ extern int __percpu_init_rwlock(struct percpu_rwlock *,
 
 extern void percpu_free_rwlock(struct percpu_rwlock *);
 
+
+#define __PERCPU_RWLOCK_INIT(name)                                     \
+       {                                                               \
+               .reader_refcnt = &name##_reader_refcnt,                 \
+               .writer_signal = &name##_writer_signal,                 \
+               .global_rwlock = __RW_LOCK_UNLOCKED(name.global_rwlock) \
+       }
+
+#define DEFINE_PERCPU_RWLOCK(name)                                     \
+       static DEFINE_PER_CPU(unsigned long, name##_reader_refcnt);     \
+       static DEFINE_PER_CPU(bool, name##_writer_signal);              \
+       struct percpu_rwlock (name) = __PERCPU_RWLOCK_INIT(name);
+
+#define DEFINE_STATIC_PERCPU_RWLOCK(name)                              \
+       static DEFINE_PER_CPU(unsigned long, name##_reader_refcnt);     \
+       static DEFINE_PER_CPU(bool, name##_writer_signal);              \
+       static struct percpu_rwlock(name) = __PERCPU_RWLOCK_INIT(name);
+
 #define percpu_init_rwlock(pcpu_rwlock)                                        
\
 ({     static struct lock_class_key rwlock_key;                        \
        __percpu_init_rwlock(pcpu_rwlock, #pcpu_rwlock, &rwlock_key);   \

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to