| From: John Ogness <john.ogness@linutronix.de> |
| Date: Tue, 12 Feb 2019 15:29:41 +0100 |
| Subject: [PATCH 03/25] printk-rb: define ring buffer struct and initializer |
| |
| See Documentation/printk-ringbuffer.txt for details about the |
| initializer arguments. |
| |
| Signed-off-by: John Ogness <john.ogness@linutronix.de> |
| Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> |
| --- |
| include/linux/printk_ringbuffer.h | 28 ++++++++++++++++++++++++++++ |
| 1 file changed, 28 insertions(+) |
| |
| --- 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); |