• John Ogness's avatar
    printk: ringbuffer: add finalization/extension support · 4cfc7258
    John Ogness authored
    Add support for extending the newest data block. For this, introduce
    a new finalization state (desc_finalized) denoting a committed
    descriptor that cannot be extended.
    
    Until a record is finalized, a writer can reopen that record to
    append new data. Reopening a record means transitioning from the
    desc_committed state back to the desc_reserved state.
    
    A writer can explicitly finalize a record if there is no intention
    of extending it. Also, records are automatically finalized when a
    new record is reserved. This relieves writers of needing to
    explicitly finalize while also making such records available to
    readers sooner. (Readers can only traverse finalized records.)
    
    Four new memory barrier pairs are introduced. Two of them are
    insignificant additions (data_realloc:A/desc_read:D and
    data_realloc:A/data_push_tail:B) because they are alternate path
    memory barriers that exactly match the purpose, pairing, and
    context of the two existing memory barrier pairs they provide an
    alternate path for. The other two new memory barrier pairs are
    significant additions:
    
    desc_reopen_last:A / _prb_commit:B - When reopening a descriptor,
        ensure the state transitions back to desc_reserved before
        fully trusting the descriptor data.
    
    _prb_commit:B / desc_reserve:D - When committing a descriptor,
        ensure the state transitions to desc_committed before checking
        the head ID to see if the descriptor needs to be finalized.
    Signed-off-by: default avatarJohn Ogness <john.ogness@linutronix.de>
    Reviewed-by: default avatarPetr Mladek <pmladek@suse.com>
    Signed-off-by: default avatarPetr Mladek <pmladek@suse.com>
    Link: https://lore.kernel.org/r/20200914123354.832-6-john.ogness@linutronix.de
    4cfc7258
gdbmacros.txt 8.69 KB