Re: [PATCH 4/4] gdth: use generic DMA API

2018-11-09 Thread Christoph Hellwig
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

2018-10-18 Thread Finn Thain
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

2018-10-18 Thread Christoph Hellwig
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 =