def GetKwqSummary()

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