anchor.diff:    control
     irq
     current-channel
  -  (irq-cvar (make-condition-variable "ATA IRQ Notifier")))
  +  (irq-cvar (make-condition-variable "ATA IRQ Notifier"))
  +  irq-delivered)
   
   (defstruct (ata-device
                (:area :wired))
  
positive.code:       (return-from ata-read nil))
      (when (eql count 0)
        (return-from ata-read t))
      (with-mutex ((ata-controller-use-lock controller))
        (with-mutex ((ata-controller-access-lock controller))
          (when (not (ata-issue-lba28-command device lba count +ata-command-read-sectors+))
            (return-from ata-read nil))
  
negative.code: 
  (defun ata-irq-handler (irq)
    (dolist (drive *ata-devices*)
      (let ((controller (ata-device-controller drive)))
        (when (eql (ata-controller-irq controller) irq)
          (with-mutex ((ata-controller-access-lock controller))
            ;; Read the status register to clear the interrupt pending state.
            (sys.int::io-port/8 (+ (ata-controller-command controller)
                                   +ata-register-status+))
            (setf (ata-controller-irq-delivered controller) t)
            (condition-notify (ata-controller-irq-cvar controller)))))))
  
  (defun init-ata-controller (command-base control-base irq)
    (let ((controller (make-ata-controller :command command-base
  