anchor.diff:    size
     avail-offset
     used-offset
  -  n-free-descriptors
  +  (n-free-descriptors (sys.int::make-semaphore :name "Virt-Queue n-free descriptors")
  +                      :read-only t)
     next-free-descriptor
     last-seen-used)
   
  
positive.code:                  (len (vring-used-elem-len tx-queue ring-entry)))
              #+nil(format t "TX ring entry: ~D  buffer: ~D  len ~D~%" ring-entry id len)
              ;; Packet sent. Add the descriptor back to the freelist.
              (push id (virtio-net-free-tx-buffers dev)))
            (setf (virtqueue-last-seen-used tx-queue)
                  (ldb (byte 16 0) (1+ (virtqueue-last-seen-used tx-queue))))))))
  
  (defun transmit-one (dev packet)
    ;; Allocate a free TX descriptor.
    (sys.int::process-wait "Virtio-Net TX descriptor"
                           (lambda ()
                             (virtio-net-free-tx-buffers dev)))
    (let* ((tx-queue (aref (virtio-device-virtqueues dev) +net-transmitq+))
           (hdr-desc (pop (virtio-net-free-tx-buffers dev)))
           ;; Bleah. Do a terrible phys->offset conversion.
  
negative.code:   rx-array
    tx-physical
    tx-array
    (n-free-tx-buffers (sys.int::make-semaphore :name "Virtio-Net free tx buffers" :area :static)
                       :read-only t)
    free-tx-buffers
    process
    (irq-semaphore (sys.int::make-semaphore :name "Virtio-Net interrupt" :area :static)
  