in lldbmacros/init.py [0:0]
def GetKwqSummary(kwq):
format = "{:<#20x} {:<#20x} {:<10s} {:<6s} {:<6s} {:<8d} {:<8d} {:<8d} {:<8d}\n"
kwq = Cast(kwq, "ksyn_wait_queue_t")
kwqtype = ""
if kwq.kw_type & 0xff == 0x01:
kwqtype = "mtx"
if kwq.kw_type & 0xff == 0x02:
kwqtype = "cvar"
if kwq.kw_type & 0xff == 0x04:
kwqtype = "rwl"
if kwq.kw_type & 0xff == 0x05:
kwqtype = "sema"
if kwq.kw_type & 0x1000 == 0x1000:
kwqtype += "W" # INWAIT
if kwq.kw_type & 0x2000 == 0x2000:
kwqtype += "D" # INDROP
pflags = ""
if kwq.kw_pflags & 0x2:
pflags += "H" # INHASH
if kwq.kw_pflags & 0x4:
pflags += "S" # SHARED
if kwq.kw_pflags & 0x8:
pflags += "W" # WAITING
if kwq.kw_pflags & 0x10:
pflags += "F" # FREELIST
kflags = ""
if kwq.kw_kflags & 0x1:
kflags += "C" # INITCLEARED
if kwq.kw_kflags & 0x2:
kflags += "Z" # ZEROED
if kwq.kw_kflags & 0x4:
kflags += "Q" # QOS APPLIED
if kwq.kw_kflags & 0x8:
kflags += "O" # OVERLAP
rs = format.format(kwq, kwq.kw_addr, kwqtype, pflags, kflags, kwq.kw_iocount, kwq.kw_dropcount, kwq.kw_inqueue, kwq.kw_fakecount)
rs += "\t{:<10s} {:<10s} {:<10s} {:<10s} {:<10s} {:<10s} {:<10s}\n".format('lowest', 'highest', 'lword', 'uword', 'sword', 'last', 'next')
rs += "\t{:<10d} {:<10d} {:<10s} {:<10d} {:<10s} {:<10s} {:<10s}\n".format(
GetSeqCount(kwq.kw_lowseq), GetSeqCount(kwq.kw_highseq),
GetLSeqSummary(kwq.kw_lword), GetSeqCount(kwq.kw_uword),
GetSSeqSummary(kwq.kw_sword), GetSSeqSummary(kwq.kw_lastseqword),
GetSSeqSummary(kwq.kw_nextseqword))
rs += "\t{:<10s} {:<10s} {:<10s} {:<10s} {:<10s} {:<10s} {:<10s}\n".format(
'pposts', 'lseq', 'sseq', 'intr', 'count', 'seq', 'bits')
intr_type = "NONE"
if kwq.kw_intr.type == 0x1:
intr_type = "READ"
elif kwq.kw_intr.type == 0x2:
intr_type = "WRITE"
rs += "\t{:<10d} {:<10s} {:<10s} {:<10s} {:<10d} {:<10s} {:<10s}\n".format(
kwq.kw_prepost.count,
GetLSeqSummary(kwq.kw_prepost.lseq), GetSSeqSummary(kwq.kw_prepost.sseq),
intr_type, kwq.kw_intr.count,
GetSSeqSummary(kwq.kw_intr.seq), GetSSeqSummary(kwq.kw_intr.returnbits))
rs += "\twaiting readers:\n"
for kwe in IterateTAILQ_HEAD(kwq.kw_ksynqueues[0].ksynq_kwelist, 'kwe_list'):
rs += "\t" + GetKweSummary.header + "\n"
rs += "\t" + GetKweSummary(kwe) + "\n"
rs += "\twaiting writers:\n"
for kwe in IterateTAILQ_HEAD(kwq.kw_ksynqueues[1].ksynq_kwelist, 'kwe_list'):
rs += "\t" + GetKweSummary.header + "\n"
rs += "\t" + GetKweSummary(kwe) + "\n"
if kwq.kw_turnstile:
rs += GetTurnstileSummary.header + "\n"
rs += GetTurnstileSummary(Cast(kwq.kw_turnstile, "struct turnstile *"))
return rs