Gitweb: http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=c59fd9ebc46da8d48b76955d4d48e3597f8c8726 Commit: c59fd9ebc46da8d48b76955d4d48e3597f8c8726 Parent: d4bd4cd0630060a64681590b9405b87e43c11f14 Author: FUJITA Tomonori <[EMAIL PROTECTED]> AuthorDate: Wed Jul 4 06:03:11 2007 -0700 Committer: James Bottomley <[EMAIL PROTECTED]> CommitDate: Sat Jul 14 17:13:02 2007 -0500
[SCSI] lpfc: fix NPIV mapping problems This patch uses dma_map_sg with phba->pcidev->dev instead of scsi_dma_map. scsi_dma_map doesn't work for NPIV since fc_vport->dev isn't fully initialized. check_addr() in arch/x86_64/kernel/pci-nommu.c leads to the crash since dev->dma_mask is NULL. For more details: http://marc.info/?l=linux-scsi&m=118312448030633&w=2 Signed-off-by: FUJITA Tomonori <[EMAIL PROTECTED]> Acked-by: James Smart <[EMAIL PROTECTED]> Signed-off-by: James Bottomley <[EMAIL PROTECTED]> --- drivers/scsi/lpfc/lpfc_scsi.c | 11 +++++++---- 1 files changed, 7 insertions(+), 4 deletions(-) diff --git a/drivers/scsi/lpfc/lpfc_scsi.c b/drivers/scsi/lpfc/lpfc_scsi.c index 3d35eae..8f45bbc 100644 --- a/drivers/scsi/lpfc/lpfc_scsi.c +++ b/drivers/scsi/lpfc/lpfc_scsi.c @@ -332,8 +332,7 @@ lpfc_scsi_prep_dma_buf(struct lpfc_hba *phba, struct lpfc_scsi_buf *lpfc_cmd) * data bde entry. */ bpl += 2; - nseg = scsi_dma_map(scsi_cmnd); - if (nseg > 0) { + if (scsi_sg_count(scsi_cmnd)) { /* * The driver stores the segment count returned from pci_map_sg * because this a count of dma-mappings used to map the use_sg @@ -341,6 +340,11 @@ lpfc_scsi_prep_dma_buf(struct lpfc_hba *phba, struct lpfc_scsi_buf *lpfc_cmd) * architectures that implement an IOMMU. */ + nseg = dma_map_sg(&phba->pcidev->dev, scsi_sglist(scsi_cmnd), + scsi_sg_count(scsi_cmnd), datadir); + if (unlikely(!nseg)) + return 1; + lpfc_cmd->seg_cnt = nseg; if (lpfc_cmd->seg_cnt > phba->cfg_sg_seg_cnt) { printk(KERN_ERR "%s: Too many sg segments from " @@ -370,8 +374,7 @@ lpfc_scsi_prep_dma_buf(struct lpfc_hba *phba, struct lpfc_scsi_buf *lpfc_cmd) bpl++; num_bde++; } - } else if (nseg < 0) - return 1; + } /* * Finish initializing those IOCB fields that are dependent on the - To unsubscribe from this list: send the line "unsubscribe git-commits-head" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html