anchor.diff:        (return-from ata-write (values nil :too-many-sectors)))
       (when (eql count 0)
         (return-from ata-write t))
  -    (with-mutex ((ata-controller-command-lock controller))
  -      (with-mutex ((ata-controller-access-lock controller))
  -        (cond ((<= +physical-map-base+
  -                   mem-addr
  -                   ;; 4GB limit.
  -                   (+ +physical-map-base+ (* 4 1024 1024 1024)))
  -               (ata-write-dma controller device lba count (- mem-addr +physical-map-base+)))
  -              ((<= (* count (ata-device-block-size device)) +4k-page-size+)
  -               ;; Transfer is small enough that the bounce page can be used.
  -               (let* ((bounce-frame (ata-controller-bounce-buffer controller))
  -                      (bounce-phys (ash bounce-frame 12))
  -                      (bounce-virt (+ +physical-map-base+ bounce-phys)))
  -                 (%fast-page-copy bounce-virt mem-addr)
  -                 (ata-write-dma controller device lba count bounce-phys)))
  -              (t ;; Give up and do a slow PIO transfer.
  -               (ata-write-pio controller device lba count mem-addr))))))
  +    (with-mutex ((ata-controller-access-lock controller))
  +      (cond ((<= +physical-map-base+
  +                 mem-addr
  +                 ;; 4GB limit.
  +                 (+ +physical-map-base+ (* 4 1024 1024 1024)))
  +             (ata-write-dma controller device lba count (- mem-addr +physical-map-base+)))
  +            ((<= (* count (ata-device-block-size device)) +4k-page-size+)
  +             ;; Transfer is small enough that the bounce page can be used.
  +             (let* ((bounce-frame (ata-controller-bounce-buffer controller))
  +                    (bounce-phys (ash bounce-frame 12))
  +                    (bounce-virt (+ +physical-map-base+ bounce-phys)))
  +               (%fast-page-copy bounce-virt mem-addr)
  +               (ata-write-dma controller device lba count bounce-phys)))
  +            (t ;; Give up and do a slow PIO transfer.
  +             (ata-write-pio controller device lba count mem-addr)))))
     t)
   
   (defun ata-irq-handler (interrupt-frame irq)
  
positive.code:     (loop
         (condition-wait (ata-controller-irq-cvar controller)
                         (ata-controller-access-lock controller))
         (when (or (ata-controller-irq-delivered controller)
                   (ata-controller-hotunplug controller))
           (return)))))
  
  (defun ata-pio-data-in (device count mem-addr)
  
negative.code:   current-channel
    (irq-cvar (make-condition-variable "ATA IRQ Notifier"))
    irq-delivered
    bounce-buffer)
  
  (defstruct (ata-device
  