Re: 2.3.47-pre6 panics aic7xxx near pci_map_single() (direction = PCI_DMA_NONE)

From: David S. Miller (davem@redhat.com)
Date: Sat Feb 19 2000 - 07:02:48 EST

  • Next message: Alex Buell: "Re: Of removable devices"

    Please try this patch:

    --- drivers/scsi/aic7xxx.c.~1~ Fri Feb 18 11:59:12 2000
    +++ drivers/scsi/aic7xxx.c Sat Feb 19 04:00:04 2000
    @@ -719,6 +719,11 @@
     #define aic7xxx_position(cmd) ((cmd)->SCp.have_data_in)
     
     /*
    + * The stored DMA mapping for single-buffer data transfers.
    + */
    +#define aic7xxx_mapping(cmd) ((cmd)->SCp.phase)
    +
    +/*
      * So we can keep track of our host structs
      */
     static struct aic7xxx_host *first_aic7xxx = NULL;
    @@ -2902,9 +2907,16 @@
         pci_unmap_sg(p->pdev, sg, cmd->use_sg, scsi_to_pci_dma_dir(cmd->sc_data_direction));
       }
       else if (cmd->request_bufflen)
    - pci_unmap_single(p->pdev, le32_to_cpu(scb->sg_list[0].address),
    - le32_to_cpu(scb->sg_list[0].length),
    + pci_unmap_single(p->pdev, aic7xxx_mapping(cmd),
    + cmd->request_bufflen,
                          scsi_to_pci_dma_dir(cmd->sc_data_direction));
    + if (scb->flags & SCB_SENSE)
    + {
    + pci_unmap_single(p->pdev,
    + le32_to_cpu(scb->sg_list[0].address),
    + sizeof(cmd->sense_buffer),
    + PCI_DMA_FROMDEVICE);
    + }
       if (scb->flags & SCB_RECOVERY_SCB)
       {
         p->flags &= ~AHC_ABORT_PENDING;
    @@ -4889,7 +4901,7 @@
                     scb->sg_list[0].address =
                             cpu_to_le32(pci_map_single(p->pdev, sense_buffer,
                                                        sizeof(cmd->sense_buffer),
    - scsi_to_pci_dma_dir(cmd->sc_data_direction)));
    + PCI_DMA_FROMDEVICE));
                     hscb->data_pointer = scb->sg_list[0].address;
     
                     scb->flags |= SCB_SENSE;
    @@ -10986,6 +10998,7 @@
           unsigned int address = pci_map_single(p->pdev, cmd->request_buffer,
                                                 cmd->request_bufflen,
                                                 scsi_to_pci_dma_dir(cmd->sc_data_direction));
    + aic7xxx_mapping(cmd) = address;
           scb->sg_list[0].address = cpu_to_le32(address);
           scb->sg_list[0].length = cpu_to_le32(cmd->request_bufflen);
           scb->sg_count = 1;

    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.rutgers.edu
    Please read the FAQ at http://www.tux.org/lkml/



    This archive was generated by hypermail 2b29 : Sat Feb 19 2000 - 07:17:22 EST