
PROC dum$verify_page_queue_list, verify_page_queue_list, verpql (
  pqlep: integer = $required
  xpft_p: integer = 0
  output,o: file = $output
  status)

  crev s kind=status
  crev field_offset integer
  crev field_length integer
  delf out status=s
  setfa out fc=list

  mmt$page_frame_table_entry field=queue_id offset=field_offset length=field_length
  queue_id_offset = field_offset / 8
  mmt$page_frame_table_entry field=ijl_ordinal offset=field_offset length=field_length
  ijlo_offset = field_offset / 8
  mmt$page_frame_table_entry field=pti offset=field_offset length=field_length
  pti_offset = field_offset / 8
  mmt$page_frame_table_entry field=sva offset=field_offset length=field_length
  sva_offset = field_offset / 8

  IF $value(xpft_p) = 0 THEN
    pftp = $sa(mmv$pft_p)
  ELSE
    pftp = $value(xpft_p)
  IFEND
  pft_entry_size = $mem($sa(mmv$pft_p)+14 4)
  pft = $mem(pftp 6)
  pftlb = $mem(pftp+10 4)
  pftub = $mem(pftp+6 4) / $mem(pftp+14 4) + pftlb
  prev = 0
  pfti = $mem($value(pqlep)+2 2)
  pftep = pft + (pfti - pftlb) * pft_entry_size
  qid = $mem(pftep+queue_id_offset 1)
  ijlo = $mem(pftep+ijlo_offset 2)
  count = 0
  putl ' VERIFY PAGE QUEUE LIST ' o=out.$eoi
  WHILE pfti > 0 DO
    count = count + 1
    pftep = pft + (pfti - pftlb) * pft_entry_size
    fwd = $mem(pftep+2 2)
    bkw = $mem(pftep 2)
    putl ' '//$strrep(pfti 16)//'  '//$strrep($mem(pftep+sva_offset 6) 16) o=out.$eoi
    pti = $mem(pftep+pti_offset 3)
    IF qid <> $mem(pftep+queue_id_offset 1) THEN
      putl ' Bad queue id' o=out.$eoi
    IFEND
    IF ijlo <> $mem(pftep+ijlo_offset 2) THEN
      putl ' Bad ijlo' o=out.$eoi
    IFEND
    IF ($mem(pti*8+5 3) * 512 / 4096 <> pfti) OR ($mod($mem(pti*8 3)/16 65536) <> $mem(pftep+sva_offset 2)) THEN
      putl ' PFT.PTI doesnt point to valid entry' o=out.$eoi
    IFEND
    IF bkw <> prev THEN
      putl ' Backward pointer BAD' o=out.$eoi
    IFEND
    prev = pfti
    pfti = fwd
  WHILEND
  IF prev <> $mem($value(pqlep) 2) THEN
    putl ' PQL backward pfti is bad' o=out.$eoi
  IFEND
  c = $mem($value(pqlep)+4 2)
  IF count <> c THEN
    putl ' Bad queue count, found '//$strrep(count)//', expected '//$strrep(c) o=out.$eoi
  IFEND
  copf out $value(output)

PROCEND dum$verify_page_queue_list
