Re: [PATCH 4/4] gdth: use generic DMA API
On Fri, Oct 19, 2018 at 09:42:28AM +1100, Finn Thain wrote: > On Thu, 18 Oct 2018, Christoph Hellwig wrote: > > > Switch from the legacy PCI DMA API to the generic DMA API. Also switch > > to dma_map_single from pci_map_page in one case where this makes the code > > simpler. > > > > Signed-off-by: Christoph Hellwig > > --- > > drivers/scsi/gdth.c | 111 +++ > > drivers/scsi/gdth_proc.c | 4 +- > > 2 files changed, 56 insertions(+), 59 deletions(-) > > > > diff --git a/drivers/scsi/gdth.c b/drivers/scsi/gdth.c > > index 7274d09b2a6c..3d856554b1b1 100644 > > --- a/drivers/scsi/gdth.c > > +++ b/drivers/scsi/gdth.c > > @@ -2518,9 +2518,9 @@ static int gdth_fill_cache_cmd(gdth_ha_str *ha, > > struct scsi_cmnd *scp, > > > > if (scsi_bufflen(scp)) { > > cmndinfo->dma_dir = (read_write == 1 ? > > -PCI_DMA_TODEVICE : PCI_DMA_FROMDEVICE); > > -sgcnt = pci_map_sg(ha->pdev, scsi_sglist(scp), > > scsi_sg_count(scp), > > - cmndinfo->dma_dir); > > +DMA_TO_DEVICE : DMA_FROM_DEVICE); > > +sgcnt = dma_map_sg(>pdev->dev, scsi_sglist(scp), > > + scsi_sg_count(scp), cmndinfo->dma_dir); > > if (mode64) { > > struct scatterlist *sl; > > > > @@ -2603,8 +2603,6 @@ static int gdth_fill_raw_cmd(gdth_ha_str *ha, struct > > scsi_cmnd *scp, u8 b) > > dma_addr_t sense_paddr; > > int cmd_index, sgcnt, mode64; > > u8 t,l; > > -struct page *page; > > -unsigned long offset; > > struct gdth_cmndinfo *cmndinfo; > > > > t = scp->device->id; > > @@ -2649,10 +2647,8 @@ static int gdth_fill_raw_cmd(gdth_ha_str *ha, struct > > scsi_cmnd *scp, u8 b) > > } > > > > } else { > > -page = virt_to_page(scp->sense_buffer); > > -offset = (unsigned long)scp->sense_buffer & ~PAGE_MASK; > > -sense_paddr = pci_map_page(ha->pdev,page,offset, > > - 16,PCI_DMA_FROMDEVICE); > > +sense_paddr = dma_map_single(>pdev->dev, scp->sense_buffer, 16, > > +DMA_FROM_DEVICE); > > > > cmndinfo->sense_paddr = sense_paddr; > > cmdp->OpCode = GDT_WRITE; /* always */ > > @@ -2693,9 +2689,9 @@ static int gdth_fill_raw_cmd(gdth_ha_str *ha, struct > > scsi_cmnd *scp, u8 b) > > } > > > > if (scsi_bufflen(scp)) { > > -cmndinfo->dma_dir = PCI_DMA_BIDIRECTIONAL; > > -sgcnt = pci_map_sg(ha->pdev, scsi_sglist(scp), > > scsi_sg_count(scp), > > - cmndinfo->dma_dir); > > +cmndinfo->dma_dir = DMA_BIDIRECTIONAL; > > +sgcnt = dma_map_sg(>pdev->dev, scsi_sglist(scp), > > + scsi_sg_count(scp), cmndinfo->dma_dir); > > if (mode64) { > > struct scatterlist *sl; > > > > @@ -3313,12 +3309,12 @@ static int gdth_sync_event(gdth_ha_str *ha, int > > service, u8 index, > > return 2; > > } > > if (scsi_bufflen(scp)) > > -pci_unmap_sg(ha->pdev, scsi_sglist(scp), scsi_sg_count(scp), > > +dma_unmap_sg(>pdev->dev, scsi_sglist(scp), > > scsi_sg_count(scp), > > cmndinfo->dma_dir); > > > > if (cmndinfo->sense_paddr) > > -pci_unmap_page(ha->pdev, cmndinfo->sense_paddr, 16, > > - > > PCI_DMA_FROMDEVICE); > > +dma_unmap_page(>pdev->dev, cmndinfo->sense_paddr, 16, > > + DMA_FROM_DEVICE); > > > > if (ha->status == S_OK) { > > cmndinfo->status = S_OK; > > @@ -4251,8 +4247,8 @@ static int ioc_general(void __user *arg, char *cmnd) > > if (gen.data_len + gen.sense_len == 0) > > goto execute; > > > > -buf = pci_alloc_consistent(ha->pdev, gen.data_len + gen.sense_len, > > - ); > > +buf = dma_alloc_coherent(>pdev->dev, gen.data_len + > > gen.sense_len, > > + , GFP_KERNEL); > > if (!buf) > > return -EFAULT; > > > > @@ -4292,7 +4288,8 @@ static int ioc_general(void __user *arg, char *cmnd) > > > > rval = 0; > > out_free_buf: > > - pci_free_consistent(ha->pdev, gen.data_len + gen.sense_len, buf, paddr); > > + dma_free_coherent(>pdev->dev, gen.data_len + gen.sense_len, buf, > > + paddr); > > return 0; > > } > > > > @@ -4749,22 +4746,22 @@ static int __init gdth_isa_probe_one(u32 isa_bios) > > > > error = -ENOMEM; > > > > - ha->pscratch = pci_alloc_consistent(ha->pdev, GDTH_SCRATCH, > > - _dma_handle); > > + ha->pscratch = dma_alloc_coherent(>pdev->dev, GDTH_SCRATCH, > > + _dma_handle, GFP_KERNEL); > > if (!ha->pscratch) > > goto
Re: [PATCH 4/4] gdth: use generic DMA API
On Thu, 18 Oct 2018, Christoph Hellwig wrote: > Switch from the legacy PCI DMA API to the generic DMA API. Also switch > to dma_map_single from pci_map_page in one case where this makes the code > simpler. > > Signed-off-by: Christoph Hellwig > --- > drivers/scsi/gdth.c | 111 +++ > drivers/scsi/gdth_proc.c | 4 +- > 2 files changed, 56 insertions(+), 59 deletions(-) > > diff --git a/drivers/scsi/gdth.c b/drivers/scsi/gdth.c > index 7274d09b2a6c..3d856554b1b1 100644 > --- a/drivers/scsi/gdth.c > +++ b/drivers/scsi/gdth.c > @@ -2518,9 +2518,9 @@ static int gdth_fill_cache_cmd(gdth_ha_str *ha, struct > scsi_cmnd *scp, > > if (scsi_bufflen(scp)) { > cmndinfo->dma_dir = (read_write == 1 ? > -PCI_DMA_TODEVICE : PCI_DMA_FROMDEVICE); > -sgcnt = pci_map_sg(ha->pdev, scsi_sglist(scp), > scsi_sg_count(scp), > - cmndinfo->dma_dir); > +DMA_TO_DEVICE : DMA_FROM_DEVICE); > +sgcnt = dma_map_sg(>pdev->dev, scsi_sglist(scp), > +scsi_sg_count(scp), cmndinfo->dma_dir); > if (mode64) { > struct scatterlist *sl; > > @@ -2603,8 +2603,6 @@ static int gdth_fill_raw_cmd(gdth_ha_str *ha, struct > scsi_cmnd *scp, u8 b) > dma_addr_t sense_paddr; > int cmd_index, sgcnt, mode64; > u8 t,l; > -struct page *page; > -unsigned long offset; > struct gdth_cmndinfo *cmndinfo; > > t = scp->device->id; > @@ -2649,10 +2647,8 @@ static int gdth_fill_raw_cmd(gdth_ha_str *ha, struct > scsi_cmnd *scp, u8 b) > } > > } else { > -page = virt_to_page(scp->sense_buffer); > -offset = (unsigned long)scp->sense_buffer & ~PAGE_MASK; > -sense_paddr = pci_map_page(ha->pdev,page,offset, > - 16,PCI_DMA_FROMDEVICE); > +sense_paddr = dma_map_single(>pdev->dev, scp->sense_buffer, 16, > + DMA_FROM_DEVICE); > > cmndinfo->sense_paddr = sense_paddr; > cmdp->OpCode = GDT_WRITE; /* always */ > @@ -2693,9 +2689,9 @@ static int gdth_fill_raw_cmd(gdth_ha_str *ha, struct > scsi_cmnd *scp, u8 b) > } > > if (scsi_bufflen(scp)) { > -cmndinfo->dma_dir = PCI_DMA_BIDIRECTIONAL; > -sgcnt = pci_map_sg(ha->pdev, scsi_sglist(scp), > scsi_sg_count(scp), > - cmndinfo->dma_dir); > +cmndinfo->dma_dir = DMA_BIDIRECTIONAL; > +sgcnt = dma_map_sg(>pdev->dev, scsi_sglist(scp), > +scsi_sg_count(scp), cmndinfo->dma_dir); > if (mode64) { > struct scatterlist *sl; > > @@ -3313,12 +3309,12 @@ static int gdth_sync_event(gdth_ha_str *ha, int > service, u8 index, > return 2; > } > if (scsi_bufflen(scp)) > -pci_unmap_sg(ha->pdev, scsi_sglist(scp), scsi_sg_count(scp), > +dma_unmap_sg(>pdev->dev, scsi_sglist(scp), > scsi_sg_count(scp), > cmndinfo->dma_dir); > > if (cmndinfo->sense_paddr) > -pci_unmap_page(ha->pdev, cmndinfo->sense_paddr, 16, > - > PCI_DMA_FROMDEVICE); > +dma_unmap_page(>pdev->dev, cmndinfo->sense_paddr, 16, > +DMA_FROM_DEVICE); > > if (ha->status == S_OK) { > cmndinfo->status = S_OK; > @@ -4251,8 +4247,8 @@ static int ioc_general(void __user *arg, char *cmnd) > if (gen.data_len + gen.sense_len == 0) > goto execute; > > -buf = pci_alloc_consistent(ha->pdev, gen.data_len + gen.sense_len, > - ); > +buf = dma_alloc_coherent(>pdev->dev, gen.data_len + > gen.sense_len, > + , GFP_KERNEL); > if (!buf) > return -EFAULT; > > @@ -4292,7 +4288,8 @@ static int ioc_general(void __user *arg, char *cmnd) > > rval = 0; > out_free_buf: > - pci_free_consistent(ha->pdev, gen.data_len + gen.sense_len, buf, paddr); > + dma_free_coherent(>pdev->dev, gen.data_len + gen.sense_len, buf, > + paddr); > return 0; > } > > @@ -4749,22 +4746,22 @@ static int __init gdth_isa_probe_one(u32 isa_bios) > > error = -ENOMEM; > > - ha->pscratch = pci_alloc_consistent(ha->pdev, GDTH_SCRATCH, > - _dma_handle); > + ha->pscratch = dma_alloc_coherent(>pdev->dev, GDTH_SCRATCH, > + _dma_handle, GFP_KERNEL); > if (!ha->pscratch) > goto out_dec_counters; > ha->scratch_phys = scratch_dma_handle; > > - ha->pmsg = pci_alloc_consistent(ha->pdev, sizeof(gdth_msg_str), > - _dma_handle); > + ha->pmsg = dma_alloc_coherent(>pdev->dev,
[PATCH 4/4] gdth: use generic DMA API
Switch from the legacy PCI DMA API to the generic DMA API. Also switch to dma_map_single from pci_map_page in one case where this makes the code simpler. Signed-off-by: Christoph Hellwig --- drivers/scsi/gdth.c | 111 +++ drivers/scsi/gdth_proc.c | 4 +- 2 files changed, 56 insertions(+), 59 deletions(-) diff --git a/drivers/scsi/gdth.c b/drivers/scsi/gdth.c index 7274d09b2a6c..3d856554b1b1 100644 --- a/drivers/scsi/gdth.c +++ b/drivers/scsi/gdth.c @@ -2518,9 +2518,9 @@ static int gdth_fill_cache_cmd(gdth_ha_str *ha, struct scsi_cmnd *scp, if (scsi_bufflen(scp)) { cmndinfo->dma_dir = (read_write == 1 ? -PCI_DMA_TODEVICE : PCI_DMA_FROMDEVICE); -sgcnt = pci_map_sg(ha->pdev, scsi_sglist(scp), scsi_sg_count(scp), - cmndinfo->dma_dir); +DMA_TO_DEVICE : DMA_FROM_DEVICE); +sgcnt = dma_map_sg(>pdev->dev, scsi_sglist(scp), + scsi_sg_count(scp), cmndinfo->dma_dir); if (mode64) { struct scatterlist *sl; @@ -2603,8 +2603,6 @@ static int gdth_fill_raw_cmd(gdth_ha_str *ha, struct scsi_cmnd *scp, u8 b) dma_addr_t sense_paddr; int cmd_index, sgcnt, mode64; u8 t,l; -struct page *page; -unsigned long offset; struct gdth_cmndinfo *cmndinfo; t = scp->device->id; @@ -2649,10 +2647,8 @@ static int gdth_fill_raw_cmd(gdth_ha_str *ha, struct scsi_cmnd *scp, u8 b) } } else { -page = virt_to_page(scp->sense_buffer); -offset = (unsigned long)scp->sense_buffer & ~PAGE_MASK; -sense_paddr = pci_map_page(ha->pdev,page,offset, - 16,PCI_DMA_FROMDEVICE); +sense_paddr = dma_map_single(>pdev->dev, scp->sense_buffer, 16, +DMA_FROM_DEVICE); cmndinfo->sense_paddr = sense_paddr; cmdp->OpCode = GDT_WRITE; /* always */ @@ -2693,9 +2689,9 @@ static int gdth_fill_raw_cmd(gdth_ha_str *ha, struct scsi_cmnd *scp, u8 b) } if (scsi_bufflen(scp)) { -cmndinfo->dma_dir = PCI_DMA_BIDIRECTIONAL; -sgcnt = pci_map_sg(ha->pdev, scsi_sglist(scp), scsi_sg_count(scp), - cmndinfo->dma_dir); +cmndinfo->dma_dir = DMA_BIDIRECTIONAL; +sgcnt = dma_map_sg(>pdev->dev, scsi_sglist(scp), + scsi_sg_count(scp), cmndinfo->dma_dir); if (mode64) { struct scatterlist *sl; @@ -3313,12 +3309,12 @@ static int gdth_sync_event(gdth_ha_str *ha, int service, u8 index, return 2; } if (scsi_bufflen(scp)) -pci_unmap_sg(ha->pdev, scsi_sglist(scp), scsi_sg_count(scp), +dma_unmap_sg(>pdev->dev, scsi_sglist(scp), scsi_sg_count(scp), cmndinfo->dma_dir); if (cmndinfo->sense_paddr) -pci_unmap_page(ha->pdev, cmndinfo->sense_paddr, 16, - PCI_DMA_FROMDEVICE); +dma_unmap_page(>pdev->dev, cmndinfo->sense_paddr, 16, + DMA_FROM_DEVICE); if (ha->status == S_OK) { cmndinfo->status = S_OK; @@ -4251,8 +4247,8 @@ static int ioc_general(void __user *arg, char *cmnd) if (gen.data_len + gen.sense_len == 0) goto execute; -buf = pci_alloc_consistent(ha->pdev, gen.data_len + gen.sense_len, - ); +buf = dma_alloc_coherent(>pdev->dev, gen.data_len + gen.sense_len, + , GFP_KERNEL); if (!buf) return -EFAULT; @@ -4292,7 +4288,8 @@ static int ioc_general(void __user *arg, char *cmnd) rval = 0; out_free_buf: - pci_free_consistent(ha->pdev, gen.data_len + gen.sense_len, buf, paddr); + dma_free_coherent(>pdev->dev, gen.data_len + gen.sense_len, buf, + paddr); return 0; } @@ -4749,22 +4746,22 @@ static int __init gdth_isa_probe_one(u32 isa_bios) error = -ENOMEM; - ha->pscratch = pci_alloc_consistent(ha->pdev, GDTH_SCRATCH, - _dma_handle); + ha->pscratch = dma_alloc_coherent(>pdev->dev, GDTH_SCRATCH, + _dma_handle, GFP_KERNEL); if (!ha->pscratch) goto out_dec_counters; ha->scratch_phys = scratch_dma_handle; - ha->pmsg = pci_alloc_consistent(ha->pdev, sizeof(gdth_msg_str), - _dma_handle); + ha->pmsg = dma_alloc_coherent(>pdev->dev, sizeof(gdth_msg_str), + _dma_handle, GFP_KERNEL); if (!ha->pmsg) goto out_free_pscratch; ha->msg_phys = scratch_dma_handle; #ifdef INT_COAL - ha->coal_stat =