See Documentation/printk-ringbuffer.txt for details about the
initializer arguments.

Signed-off-by: John Ogness <john.ogn...@linutronix.de>
---
 include/linux/printk_ringbuffer.h | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/include/linux/printk_ringbuffer.h 
b/include/linux/printk_ringbuffer.h
index 75f5708ea902..0e6e8dd0d01e 100644
--- a/include/linux/printk_ringbuffer.h
+++ b/include/linux/printk_ringbuffer.h
@@ -10,6 +10,20 @@ struct prb_cpulock {
        unsigned long __percpu *irqflags;
 };
 
+struct printk_ringbuffer {
+       void *buffer;
+       unsigned int size_bits;
+
+       u64 seq;
+
+       atomic_long_t tail;
+       atomic_long_t head;
+       atomic_long_t reserve;
+
+       struct prb_cpulock *cpulock;
+       atomic_t ctx;
+};
+
 #define DECLARE_STATIC_PRINTKRB_CPULOCK(name)                          \
 static DEFINE_PER_CPU(unsigned long, _##name##_percpu_irqflags);       \
 static struct prb_cpulock name = {                                     \
@@ -17,6 +31,20 @@ static struct prb_cpulock name = {                           
        \
        .irqflags = &_##name##_percpu_irqflags,                         \
 }
 
+#define DECLARE_STATIC_PRINTKRB(name, szbits, cpulockptr)              \
+static char _##name##_buffer[1 << (szbits)]                            \
+       __aligned(__alignof__(long));                                   \
+static struct printk_ringbuffer name = {                               \
+       .buffer = &_##name##_buffer[0],                                 \
+       .size_bits = szbits,                                            \
+       .seq = 0,                                                       \
+       .tail = ATOMIC_LONG_INIT(-111 * sizeof(long)),                  \
+       .head = ATOMIC_LONG_INIT(-111 * sizeof(long)),                  \
+       .reserve = ATOMIC_LONG_INIT(-111 * sizeof(long)),               \
+       .cpulock = cpulockptr,                                          \
+       .ctx = ATOMIC_INIT(0),                                          \
+}
+
 /* utility functions */
 void prb_lock(struct prb_cpulock *cpu_lock, unsigned int *cpu_store);
 void prb_unlock(struct prb_cpulock *cpu_lock, unsigned int cpu_store);
-- 
2.11.0

Reply via email to