The Pedigree Project 0.1
Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes | List of all members
IrqDiagnosticSnapshotStore< LineCount > Class Template Reference

#include <IrqDiagnosticSnapshotStore.h>

+ Inheritance diagram for IrqDiagnosticSnapshotStore< LineCount >:
+ Collaboration diagram for IrqDiagnosticSnapshotStore< LineCount >:

Public Member Functions

IrqLineDiagnosticSnapshotbeginPublication (size_t line, size_t &targetBank)
 
void finishPublication (size_t line, size_t targetBank)
 
bool snapshot (size_t line, IrqLineDiagnosticSnapshot &out) const
 
size_t missedPublications (size_t line) const
 
void recordMissedPublication (size_t line)
 
bool consumeDirty (size_t line)
 

Private Member Functions

void missed (size_t line)
 

Private Attributes

IrqLineDiagnosticSnapshot m_Banks [LineCount][BankCount]
 
size_t m_Publications [LineCount]
 
size_t m_BankClaims [LineCount][BankCount]
 
size_t m_WriterAdmissions [LineCount]
 
size_t m_MissedPublications [LineCount]
 
size_t m_Dirty [LineCount]
 

Static Private Attributes

static constexpr size_t BankCount = 3
 
static constexpr size_t BankBits = 2
 
static constexpr size_t BankMask = (1U << BankBits) - 1
 
static constexpr size_t SnapshotAttempts = 4
 
static constexpr size_t WriterClaim = static_cast<size_t>(1) << ((sizeof(size_t) * 8) - 1)
 

Detailed Description

template<size_t LineCount>
class IrqDiagnosticSnapshotStore< LineCount >

Per-line immutable snapshot publication for stopped-world debuggers and best-effort live readers.

A reader claims one of three banks before copying it. A writer makes one nonblocking attempt to claim an inactive, unclaimed bank; diagnostics are allowed to remain stale rather than becoming an IRQ liveness dependency.

Definition at line 26 of file IrqDiagnosticSnapshotStore.h.

Constructor & Destructor Documentation

◆ IrqDiagnosticSnapshotStore()

template<size_t LineCount>
IrqDiagnosticSnapshotStore< LineCount >::IrqDiagnosticSnapshotStore ( )
inline

Definition at line 28 of file IrqDiagnosticSnapshotStore.h.

Member Function Documentation

◆ beginPublication()

template<size_t LineCount>
IrqLineDiagnosticSnapshot * IrqDiagnosticSnapshotStore< LineCount >::beginPublication ( size_t  line,
size_t &  targetBank 
)
inline

Begins one nonblocking publication, returning its private bank.

Definition at line 44 of file IrqDiagnosticSnapshotStore.h.

◆ consumeDirty()

template<size_t LineCount>
bool IrqDiagnosticSnapshotStore< LineCount >::consumeDirty ( size_t  line)
inline

Reports and clears a missed writer rendezvous for bounded refresh.

Definition at line 176 of file IrqDiagnosticSnapshotStore.h.

◆ finishPublication()

template<size_t LineCount>
void IrqDiagnosticSnapshotStore< LineCount >::finishPublication ( size_t  line,
size_t  targetBank 
)
inline

Makes a completely populated private bank visible to readers.

Definition at line 75 of file IrqDiagnosticSnapshotStore.h.

◆ missed()

template<size_t LineCount>
void IrqDiagnosticSnapshotStore< LineCount >::missed ( size_t  line)
inlineprivate

Definition at line 188 of file IrqDiagnosticSnapshotStore.h.

◆ missedPublications()

template<size_t LineCount>
size_t IrqDiagnosticSnapshotStore< LineCount >::missedPublications ( size_t  line) const
inline

Definition at line 164 of file IrqDiagnosticSnapshotStore.h.

◆ recordMissedPublication()

template<size_t LineCount>
void IrqDiagnosticSnapshotStore< LineCount >::recordMissedPublication ( size_t  line)
inline

Records a bounded publication which could not obtain coherent input.

Definition at line 169 of file IrqDiagnosticSnapshotStore.h.

◆ snapshot()

template<size_t LineCount>
bool IrqDiagnosticSnapshotStore< LineCount >::snapshot ( size_t  line,
IrqLineDiagnosticSnapshot out 
) const
inline

Copies one bank without waiting for a publisher or taking a lock.

Definition at line 95 of file IrqDiagnosticSnapshotStore.h.

Referenced by Pic::snapshotIrqLines().

+ Here is the caller graph for this function:

Member Data Documentation

◆ BankBits

template<size_t LineCount>
constexpr size_t IrqDiagnosticSnapshotStore< LineCount >::BankBits = 2
staticconstexprprivate

Definition at line 183 of file IrqDiagnosticSnapshotStore.h.

◆ BankCount

template<size_t LineCount>
constexpr size_t IrqDiagnosticSnapshotStore< LineCount >::BankCount = 3
staticconstexprprivate

Definition at line 182 of file IrqDiagnosticSnapshotStore.h.

◆ BankMask

template<size_t LineCount>
constexpr size_t IrqDiagnosticSnapshotStore< LineCount >::BankMask = (1U << BankBits) - 1
staticconstexprprivate

Definition at line 184 of file IrqDiagnosticSnapshotStore.h.

◆ m_BankClaims

template<size_t LineCount>
size_t IrqDiagnosticSnapshotStore< LineCount >::m_BankClaims[LineCount][BankCount]
mutableprivate

Definition at line 195 of file IrqDiagnosticSnapshotStore.h.

◆ m_Banks

template<size_t LineCount>
IrqLineDiagnosticSnapshot IrqDiagnosticSnapshotStore< LineCount >::m_Banks[LineCount][BankCount]
private

Definition at line 193 of file IrqDiagnosticSnapshotStore.h.

◆ m_Dirty

template<size_t LineCount>
size_t IrqDiagnosticSnapshotStore< LineCount >::m_Dirty[LineCount]
private

Definition at line 198 of file IrqDiagnosticSnapshotStore.h.

◆ m_MissedPublications

template<size_t LineCount>
size_t IrqDiagnosticSnapshotStore< LineCount >::m_MissedPublications[LineCount]
private

Definition at line 197 of file IrqDiagnosticSnapshotStore.h.

◆ m_Publications

template<size_t LineCount>
size_t IrqDiagnosticSnapshotStore< LineCount >::m_Publications[LineCount]
private

Definition at line 194 of file IrqDiagnosticSnapshotStore.h.

◆ m_WriterAdmissions

template<size_t LineCount>
size_t IrqDiagnosticSnapshotStore< LineCount >::m_WriterAdmissions[LineCount]
private

Definition at line 196 of file IrqDiagnosticSnapshotStore.h.

◆ SnapshotAttempts

template<size_t LineCount>
constexpr size_t IrqDiagnosticSnapshotStore< LineCount >::SnapshotAttempts = 4
staticconstexprprivate

Definition at line 185 of file IrqDiagnosticSnapshotStore.h.

◆ WriterClaim

template<size_t LineCount>
constexpr size_t IrqDiagnosticSnapshotStore< LineCount >::WriterClaim = static_cast<size_t>(1) << ((sizeof(size_t) * 8) - 1)
staticconstexprprivate

Definition at line 186 of file IrqDiagnosticSnapshotStore.h.


The documentation for this class was generated from the following file: