1. 04 Apr, 2007 1 commit
    • Mark Lord's avatar
      2.6.21 fix lba48 bug in libata fill_result_tf() · 4742d54f
      Mark Lord authored
      Current 2.6.21 libata does the following:
      
      void ata_tf_read(struct ata_port *ap, struct ata_taskfile *tf)
      {
              struct ata_ioports *ioaddr = &ap->ioaddr;
      
              tf->command = ata_check_status(ap);
      	...
              if (tf->flags & ATA_TFLAG_LBA48) {
                      iowrite8(tf->ctl | ATA_HOB, ioaddr->ctl_addr);
                      tf->hob_feature = ioread8(ioaddr->error_addr);
                      ...
              }
      }
      ...
      static void fill_result_tf(struct ata_queued_cmd *qc)
      {
              struct ata_port *ap = qc->ap;
      
              ap->ops->tf_read(ap, &qc->result_tf);
              qc->result_tf.flags = qc->tf.flags;
      }
      
      Based on this, those last two statements fill_result_tf()
      appear to me to be in the wrong order, in that the tf->flags
      are uninitialized at the point where tf_read() is invoked.
      So for lba48 commands, tf_read() won't be reading back the
      full lba48 register contents..
      
      Correct?
      
      This patch corrects fill_result_tf() so that the flags
      get copied to result_tf before they are used by tf_read().
      Signed-off-by: default avatarMark Lord <mlord@pobox.com>
      Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
      4742d54f
  2. 02 Apr, 2007 30 commits
  3. 01 Apr, 2007 6 commits
  4. 31 Mar, 2007 3 commits