atm: remove deprecated use of pci api
Subsystems (3)
PATCH v2 1/1 atm: remove deprecated use of pci api
Replace occurences of the pci api by appropriate call to the dma api.
A simplified version of the semantic patch that finds this problem is as
follows: (http://coccinelle.lip6.fr)
@deprecated@
idexpression id;
position p;
@@
(
pci_dma_supported@p ( id, ...)
|
pci_alloc_consistent@p ( id, ...)
)
@bad1@
idexpression id;
position deprecated.p;
@@
...when != &id->dev
when != pci_get_drvdata ( id )
when != pci_enable_device ( id )
(
pci_dma_supported@p ( id, ...)
|
pci_alloc_consistent@p ( id, ...)
)
@depends on !bad1@
idexpression id;
expression direction;
position deprecated.p;
@@
(
- pci_dma_supported@p ( id,
+ dma_supported ( &id->dev,
...
+ , GFP_ATOMIC
)
|
- pci_alloc_consistent@p ( id,
+ dma_alloc_coherent ( &id->dev,
...
+ , GFP_ATOMIC
)
)
--- drivers/atm/eni.c | 8 +++++--- drivers/atm/he.c | 2 +- drivers/atm/lanai.c | 9 +++++---- drivers/atm/nicstar.c | 4 ++-- drivers/atm/solos-pci.c | 2 +- drivers/atm/zatm.c | 8 +++++--- 6 files changed, 19 insertions(+), 14 deletions(-)
drivers/atm/eni.c +5 -3
@@ -2246,7 +2246,8 @@ static int eni_init_one(struct pci_dev *pci_dev, goto err_disable; zero = &eni_dev->zero; - zero->addr =pci_alloc_consistent (pci_dev,ENI_ZEROES_SIZE , &zero->dma); + zero->addr =dma_alloc_coherent (&pci_dev->dev,ENI_ZEROES_SIZE , + &zero->dma,GFP_ATOMIC );if (!zero->addr) goto err_kfree;
@@ -2277,7 +2278,8 @@ err_eni_release: err_unregister:atm_dev_deregister (dev); err_free_consistent: -pci_free_consistent (pci_dev,ENI_ZEROES_SIZE , zero->addr, zero->dma); +dma_free_coherent (&pci_dev->dev,ENI_ZEROES_SIZE , zero->addr, + zero->dma); err_kfree:kfree (eni_dev); err_disable:
@@ -2302,7 +2304,7 @@ static void eni_remove_one(struct pci_dev *pdev)eni_do_release (dev);atm_dev_deregister (dev); -pci_free_consistent (pdev,ENI_ZEROES_SIZE , zero->addr, zero->dma); +dma_free_coherent (&pdev->dev,ENI_ZEROES_SIZE , zero->addr, zero->dma);kfree (ed);pci_disable_device (pdev); }
drivers/atm/he.c +1 -1
@@ -359,7 +359,7 @@ static int he_init_one(struct pci_dev *pci_dev,if (pci_enable_device (pci_dev))return -EIO ; -if (pci_set_dma_mask (pci_dev,DMA_BIT_MASK (32 )) !=0 ) { +if (dma_set_mask (&pci_dev->dev,DMA_BIT_MASK (32 )) !=0 ) {printk (KERN_WARNING "he: no suitable dma available\n" ); err = -EIO ; goto init_one_failure;
drivers/atm/lanai.c +5 -4
@@ -346,7 +346,8 @@ static void lanai_buf_allocate(struct lanai_buffer *buf,* everything, but the way the lanai uses DMA memory would * make that a terrific pain. This is much simpler. */ - buf->start =pci_alloc_consistent (pci, size, &buf->dmaaddr); + buf->start =dma_alloc_coherent (&pci->dev, size, &buf->dmaaddr, +GFP_ATOMIC );if (buf->start !=NULL ) {/* Success */ /* Lanai requires 256-byte alignment of DMA bufs */ APRINTK((buf->dmaaddr & ~0xFFFFFF00) == 0,
@@ -372,7 +373,7 @@ static void lanai_buf_deallocate(struct lanai_buffer *buf, struct pci_dev *pci) {if (buf->start !=NULL ) { -pci_free_consistent (pci,lanai_buf_size (buf), +dma_free_coherent (&pci->dev,lanai_buf_size (buf), buf->start, buf->dmaaddr); buf->start = buf->end = buf->ptr =NULL ; }
@@ -1953,12 +1954,12 @@ static int lanai_pci_start(struct lanai_dev *lanai)return -ENXIO ; }pci_set_master (pci); -if (pci_set_dma_mask (pci,DMA_BIT_MASK (32 )) !=0 ) { +if (dma_set_mask (&pci->dev,DMA_BIT_MASK (32 )) !=0 ) { printk(KERN_WARNING DEV_LABEL "(itf %d): No suitable DMA available.\n", lanai->number);return -EBUSY ; } -if (pci_set_consistent_dma_mask (pci,DMA_BIT_MASK (32 )) !=0 ) { +if (dma_set_coherent_mask (&pci->dev,DMA_BIT_MASK (32 )) !=0 ) { printk(KERN_WARNING DEV_LABEL "(itf %d): No suitable DMA available.\n", lanai->number);return -EBUSY ;
drivers/atm/nicstar.c +2 -2
@@ -370,8 +370,8 @@ static int ns_init_card(int i, struct pci_dev *pcidev)ns_init_card_error (card, error);return error; } -if ((pci_set_dma_mask (pcidev,DMA_BIT_MASK (32 )) !=0 ) || - (pci_set_consistent_dma_mask (pcidev,DMA_BIT_MASK (32 )) !=0 )) { +if ((dma_set_mask (&pcidev->dev,DMA_BIT_MASK (32 )) !=0 ) || + (dma_set_coherent_mask (&pcidev->dev,DMA_BIT_MASK (32 )) !=0 )) {printk (KERN_WARNING "nicstar%d: No suitable DMA available.\n" , i); error =2 ;
drivers/atm/solos-pci.c +1 -1
@@ -1210,7 +1210,7 @@ static int fpga_probe(struct pci_dev *dev, const struct pci_device_id *id) goto out; } - err =pci_set_dma_mask (dev,DMA_BIT_MASK (32 )); + err =dma_set_mask (&dev->dev,DMA_BIT_MASK (32 ));if (err) {dev_warn (&dev->dev,"Failed to set 32-bit DMA mask\n" ); goto out;
drivers/atm/zatm.c +5 -3
@@ -1306,7 +1306,8 @@ static int zatm_start(struct atm_dev *dev)if (!mbx_entries[i])continue ; - mbx =pci_alloc_consistent (pdev,2 *MBX_SIZE (i), &mbx_dma); + mbx =dma_alloc_coherent (&pdev->dev,2 *MBX_SIZE (i), &mbx_dma, +GFP_ATOMIC );if (!mbx) { error = -ENOMEM ; goto out;
@@ -1318,7 +1319,8 @@ static int zatm_start(struct atm_dev *dev)if (((unsigned long )mbx ^ mbx_dma) &0xffff ) { printk(KERN_ERR DEV_LABEL "(itf %d): system " "bus incompatible with driver\n", dev->number); -pci_free_consistent (pdev,2 *MBX_SIZE (i), mbx, mbx_dma); +dma_free_coherent (&pdev->dev,2 *MBX_SIZE (i), mbx, + mbx_dma); error = -ENODEV ; goto out; }
@@ -1354,7 +1356,7 @@ out_tx:kfree (zatm_dev->tx_map); out:while (i-- >0 ) { -pci_free_consistent (pdev,2 *MBX_SIZE (i), +dma_free_coherent (&pdev->dev,2 *MBX_SIZE (i), (void *)zatm_dev->mbx_start[i], zatm_dev->mbx_dma[i]); }
Signature · 1 line
1.9.1
David Miller
maintainerFrom: Quentin Lambert <[email protected]>
Date: Mon, 12 Jan 2015 17:10:42 +0100
drivers/atm/eni.c static int eni_init_one(struct pci_dev *pci_dev, · line 2253
Quoted 10 lines
drivers/atm/eni.c +2
-1@@ -2246,7 +2246,8 @@ static int eni_init_one(struct pci_dev *pci_dev, goto err_disable; zero = &eni_dev->zero; - zero->addr =pci_alloc_consistent (pci_dev,ENI_ZEROES_SIZE , &zero->dma); + zero->addr =dma_alloc_coherent (&pci_dev->dev,ENI_ZEROES_SIZE , + &zero->dma,GFP_ATOMIC );if (!zero->addr) goto err_kfree;
I really would like you to look at these locations and see if GFP_KERNEL can be used instead of GFP_ATOMIC. I bet that nearly all of these can, and it is preferred.
Thanks.
Quoted 18 lines · On Tue, 13 Jan 2015 21:59:44 -0500 (EST) David Miller <[email protected]>…
From: Quentin Lambert <[email protected]>
Date: Mon, 12 Jan 2015 17:10:42 +0100drivers/atm/eni.c static int eni_init_one(struct pci_dev *pci_dev, · line 2253
Quoted 10 lines
drivers/atm/eni.c +2
-1@@ -2246,7 +2246,8 @@ static int eni_init_one(struct pci_dev *pci_dev, goto err_disable; zero = &eni_dev->zero; - zero->addr =pci_alloc_consistent (pci_dev,ENI_ZEROES_SIZE , &zero->dma); + zero->addr =dma_alloc_coherent (&pci_dev->dev,ENI_ZEROES_SIZE , + &zero->dma,GFP_ATOMIC );if (!zero->addr) goto err_kfree;I really would like you to look at these locations and see if
GFP_KERNELcan be used instead ofGFP_ATOMIC. I bet that nearly all of these can, and it is preferred.
Quoted 1 line
Thanks.
I think I would like to go through and just fix all the usages of the older pci interface. This patch isn't very complete due to its automated nature.
I will make some time this weekend.
Quoted 5 lines · chas williams - CONTRACTOR
I think I would like to go through and just fix all the usages of the older pci interface. This patch isn't very complete due to its automated nature.
I will make some time this weekend.
It was my original intent to produce a complete patch, I obviously misused the tool and forgot a significant number of cases.
But I am ok with fixing that and submitting a complete version of this patch if you like.
From: David Miller
Quoted 6 lines
From: Quentin Lambert <[email protected]>
Date: Mon, 12 Jan 2015 17:10:42 +0100Quoted 3 lines
drivers/atm/eni.c +0
-0@@ -2246,7 +2246,8 @@ static int eni_init_one(struct pci_dev *pci_dev, goto err_disable;
Quoted 11 lines
drivers/atm/eni.c static int eni_init_one(struct pci_dev *pci_dev, · line 2253
Quoted 7 lines
drivers/atm/eni.c +2
-1zero = &eni_dev->zero; - zero->addr =pci_alloc_consistent (pci_dev,ENI_ZEROES_SIZE , &zero->dma); + zero->addr =dma_alloc_coherent (&pci_dev->dev,ENI_ZEROES_SIZE , + &zero->dma,GFP_ATOMIC );if (!zero->addr) goto err_kfree;I really would like you to look at these locations and see if
GFP_KERNELcan be used instead ofGFP_ATOMIC. I bet that nearly all of these can, and it is preferred.
And there isn't much point inlining the wrapper until that has been done. Not only that, the corresponding pci_free_consistent() calls need changing at (much) the same time.
David
PATCH v3 1/1 atm: remove deprecated use of pci api
--- drivers/atm/eni.c | 33 +++++++------ drivers/atm/fore200e.c | 22 +++++---- drivers/atm/he.c | 125 +++++++++++++++++++++++++----------------------- drivers/atm/he.h | 4 +- drivers/atm/idt77252.c | 107 ++++++++++++++++++++++------------------- drivers/atm/iphase.c | 54 +++++++++++---------- drivers/atm/lanai.c | 14 ++---- drivers/atm/nicstar.c | 60 +++++++++++------------ drivers/atm/solos-pci.c | 26 +++++----- drivers/atm/zatm.c | 17 ++++--- 10 files changed, 243 insertions(+), 219 deletions(-)
drivers/atm/eni.c +19 -14
@@ -354,9 +354,9 @@ static int do_rx_dma(struct atm_vcc *vcc,struct sk_buff *skb, eni_vcc =ENI_VCC (vcc); paddr =0 ;/* GCC, shut up */ if (skb) { - paddr =pci_map_single (eni_dev->pci_dev,skb->data,skb->len, -PCI_DMA_FROMDEVICE ); -if (pci_dma_mapping_error (eni_dev->pci_dev, paddr)) + paddr =dma_map_single (&eni_dev->pci_dev->dev,skb->data,skb->len, +DMA_FROM_DEVICE ); +if (dma_mapping_error (&eni_dev->pci_dev->dev, paddr)) goto dma_map_error;ENI_PRV_PADDR (skb) = paddr;if (paddr &3 )
@@ -481,8 +481,8 @@ rx_enqueued++; trouble:if (paddr) -pci_unmap_single (eni_dev->pci_dev,paddr,skb->len, -PCI_DMA_FROMDEVICE ); +dma_unmap_single (&eni_dev->pci_dev->dev,paddr,skb->len, +DMA_FROM_DEVICE ); dma_map_error:if (skb)dev_kfree_skb_irq (skb);return -1 ;
@@ -758,8 +758,8 @@ rx_dequeued++; } eni_vcc->rxing--; eni_vcc->rx_pos =ENI_PRV_POS (skb) & (eni_vcc->words-1 ); -pci_unmap_single (eni_dev->pci_dev,ENI_PRV_PADDR (skb),skb->len, -PCI_DMA_TODEVICE ); +dma_unmap_single (&eni_dev->pci_dev->dev,ENI_PRV_PADDR (skb),skb->len, +DMA_TO_DEVICE );if (!skb->len)dev_kfree_skb_irq (skb);else {EVENT ("pushing (len=%ld)\n" ,skb->len,0 );
@@ -1112,8 +1112,8 @@ DPRINTK("iovcnt = %d\n",skb_shinfo(skb)->nr_frags); vcc->dev->number);return enq_jam; } - paddr =pci_map_single (eni_dev->pci_dev,skb->data,skb->len, -PCI_DMA_TODEVICE ); + paddr =dma_map_single (&eni_dev->pci_dev->dev,skb->data,skb->len, +DMA_TO_DEVICE );ENI_PRV_PADDR (skb) = paddr;/* prepare DMA queue entries */ j =0 ;
@@ -1226,8 +1226,8 @@ static void dequeue_tx(struct atm_dev *dev)break ; }ENI_VCC (vcc)->txing -=ENI_PRV_SIZE (skb); -pci_unmap_single (eni_dev->pci_dev,ENI_PRV_PADDR (skb),skb->len, -PCI_DMA_TODEVICE ); +dma_unmap_single (&eni_dev->pci_dev->dev,ENI_PRV_PADDR (skb),skb->len, +DMA_TO_DEVICE );if (vcc->pop) vcc->pop (vcc,skb);else dev_kfree_skb_irq (skb);atomic_inc (&vcc->stats->tx);
@@ -2240,13 +2240,18 @@ static int eni_init_one(struct pci_dev *pci_dev,if (rc <0 ) goto out; + rc =dma_set_mask_and_coherent (&pci_dev->dev,DMA_BIT_MASK (32 )); +if (rc <0 ) + goto out; + rc = -ENOMEM ; eni_dev =kmalloc (sizeof (struct eni_dev ),GFP_KERNEL );if (!eni_dev) goto err_disable; zero = &eni_dev->zero; - zero->addr =pci_alloc_consistent (pci_dev,ENI_ZEROES_SIZE , &zero->dma); + zero->addr =dma_alloc_coherent (&pci_dev->dev, +ENI_ZEROES_SIZE , &zero->dma,GFP_KERNEL );if (!zero->addr) goto err_kfree;
@@ -2277,7 +2282,7 @@ err_eni_release: err_unregister:atm_dev_deregister (dev); err_free_consistent: -pci_free_consistent (pci_dev,ENI_ZEROES_SIZE , zero->addr, zero->dma); +dma_free_coherent (&pci_dev->dev,ENI_ZEROES_SIZE , zero->addr, zero->dma); err_kfree:kfree (eni_dev); err_disable:
@@ -2302,7 +2307,7 @@ static void eni_remove_one(struct pci_dev *pdev)eni_do_release (dev);atm_dev_deregister (dev); -pci_free_consistent (pdev,ENI_ZEROES_SIZE , zero->addr, zero->dma); +dma_free_coherent (&pdev->dev,ENI_ZEROES_SIZE , zero->addr, zero->dma);kfree (ed);pci_disable_device (pdev); }
drivers/atm/fore200e.c +14 -8
@@ -425,7 +425,7 @@ static void fore200e_pca_write(u32 val, volatile u32 __iomem *addr)static u32 fore200e_pca_dma_map (struct fore200e * fore200e,void * virt_addr,int size,int direction) { -u32 dma_addr =pci_map_single ((struct pci_dev *)fore200e->bus_dev, virt_addr, size, direction); +u32 dma_addr =dma_map_single (&((struct pci_dev *) fore200e->bus_dev)->dev, virt_addr, size, direction);DPRINTK (3 ,"PCI DVMA mapping: virt_addr = 0x%p, size = %d, direction = %d, --> dma_addr = 0x%08x\n" , virt_addr, size, direction, dma_addr);
@@ -440,7 +440,7 @@ fore200e_pca_dma_unmap(struct fore200e* fore200e, u32 dma_addr, int size, int diDPRINTK (3 ,"PCI DVMA unmapping: dma_addr = 0x%08x, size = %d, direction = %d\n" , dma_addr, size, direction); -pci_unmap_single ((struct pci_dev *)fore200e->bus_dev, dma_addr, size, direction); +dma_unmap_single (&((struct pci_dev *) fore200e->bus_dev)->dev, dma_addr, size, direction); }
@@ -449,7 +449,7 @@ fore200e_pca_dma_sync_for_cpu(struct fore200e* fore200e, u32 dma_addr, int size, {DPRINTK (3 ,"PCI DVMA sync: dma_addr = 0x%08x, size = %d, direction = %d\n" , dma_addr, size, direction); -pci_dma_sync_single_for_cpu ((struct pci_dev *)fore200e->bus_dev, dma_addr, size, direction); +dma_sync_single_for_cpu (&((struct pci_dev *) fore200e->bus_dev)->dev, dma_addr, size, direction); } static void
@@ -457,7 +457,7 @@ fore200e_pca_dma_sync_for_device(struct fore200e* fore200e, u32 dma_addr, int si {DPRINTK (3 ,"PCI DVMA sync: dma_addr = 0x%08x, size = %d, direction = %d\n" , dma_addr, size, direction); -pci_dma_sync_single_for_device ((struct pci_dev *)fore200e->bus_dev, dma_addr, size, direction); +dma_sync_single_for_device (&((struct pci_dev *) fore200e->bus_dev)->dev, dma_addr, size, direction); }
@@ -470,9 +470,10 @@ fore200e_pca_dma_chunk_alloc(struct fore200e* fore200e, struct chunk* chunk, {/* returned chunks are page-aligned */ chunk->alloc_size = size * nbr; - chunk->alloc_addr =pci_alloc_consistent ((struct pci_dev *)fore200e->bus_dev, - chunk->alloc_size, - &chunk->dma_addr); + chunk->alloc_addr =dma_alloc_coherent (&((struct pci_dev *) fore200e->bus_dev)->dev, + chunk->alloc_size, + &chunk->dma_addr, +GFP_KERNEL );if ((chunk->alloc_addr ==NULL ) || (chunk->dma_addr ==0 ))return -ENOMEM ;
@@ -488,7 +489,7 @@ fore200e_pca_dma_chunk_alloc(struct fore200e* fore200e, struct chunk* chunk,static void fore200e_pca_dma_chunk_free (struct fore200e * fore200e,struct chunk * chunk) { -pci_free_consistent ((struct pci_dev *)fore200e->bus_dev, +dma_free_coherent (&((struct pci_dev *) fore200e->bus_dev)->dev, chunk->alloc_size, chunk->alloc_addr, chunk->dma_addr);
@@ -2707,6 +2708,11 @@ static int fore200e_pca_detect(struct pci_dev *pci_dev, err = -EINVAL ; goto out; } + +if (dma_set_mask_and_coherent (&pci_dev->dev,DMA_BIT_MASK (32 ))) { + err = -EINVAL ; + goto out; + } fore200e =kzalloc (sizeof (struct fore200e ),GFP_KERNEL );if (fore200e ==NULL ) {
drivers/atm/he.c +64 -61
293 lines not on this page · raw message
drivers/atm/he.h +2 -2
@@ -281,7 +281,7 @@ struct he_dev {int irq_peak;struct tasklet_struct tasklet; -struct pci_pool *tpd_pool; +struct dma_pool *tpd_pool;struct list_head outstanding_tpds;dma_addr_t tpdrq_phys;
@@ -296,7 +296,7 @@ struct he_dev {struct he_buff **rbpl_virt;unsigned long *rbpl_table;unsigned long rbpl_hint; -struct pci_pool *rbpl_pool; +struct dma_pool *rbpl_pool;dma_addr_t rbpl_phys;struct he_rbp *rbpl_base, *rbpl_tail;struct list_head rbpl_outstanding;
drivers/atm/idt77252.c +57 -50
244 lines not on this page · raw message
drivers/atm/iphase.c +28 -26
126 lines not on this page · raw message
drivers/atm/lanai.c +5 -9
@@ -346,7 +346,8 @@ static void lanai_buf_allocate(struct lanai_buffer *buf,* everything, but the way the lanai uses DMA memory would * make that a terrific pain. This is much simpler. */ - buf->start =pci_alloc_consistent (pci, size, &buf->dmaaddr); + buf->start =dma_alloc_coherent (&pci->dev, + size, &buf->dmaaddr,GFP_KERNEL );if (buf->start !=NULL ) {/* Success */ /* Lanai requires 256-byte alignment of DMA bufs */ APRINTK((buf->dmaaddr & ~0xFFFFFF00) == 0,
@@ -372,8 +373,8 @@ static void lanai_buf_deallocate(struct lanai_buffer *buf, struct pci_dev *pci) {if (buf->start !=NULL ) { -pci_free_consistent (pci,lanai_buf_size (buf), - buf->start, buf->dmaaddr); +dma_free_coherent (&pci->dev,lanai_buf_size (buf), + buf->start, buf->dmaaddr); buf->start = buf->end = buf->ptr =NULL ; } }
@@ -1953,12 +1954,7 @@ static int lanai_pci_start(struct lanai_dev *lanai)return -ENXIO ; }pci_set_master (pci); -if (pci_set_dma_mask (pci,DMA_BIT_MASK (32 )) !=0 ) { - printk(KERN_WARNING DEV_LABEL - "(itf %d): No suitable DMA available.\n", lanai->number); -return -EBUSY ; - } -if (pci_set_consistent_dma_mask (pci,DMA_BIT_MASK (32 )) !=0 ) { +if (dma_set_mask_and_coherent (&pci->dev,DMA_BIT_MASK (32 )) !=0 ) { printk(KERN_WARNING DEV_LABEL "(itf %d): No suitable DMA available.\n", lanai->number);return -EBUSY ;
drivers/atm/nicstar.c +30 -30
128 lines not on this page · raw message
drivers/atm/solos-pci.c +13 -13
@@ -785,8 +785,8 @@ static void solos_bh(unsigned long card_arg) skb = card->rx_skb[port]; card->rx_skb[port] =NULL ; -pci_unmap_single (card->dev,SKB_CB (skb)->dma_addr, -RX_DMA_SIZE ,PCI_DMA_FROMDEVICE ); +dma_unmap_single (&card->dev->dev,SKB_CB (skb)->dma_addr, +RX_DMA_SIZE ,DMA_FROM_DEVICE ); header = (void *)skb->data; size =le16_to_cpu (header->size);
@@ -872,8 +872,8 @@ static void solos_bh(unsigned long card_arg)struct sk_buff *skb =alloc_skb (RX_DMA_SIZE ,GFP_ATOMIC );if (skb) {SKB_CB (skb)->dma_addr = -pci_map_single (card->dev, skb->data, -RX_DMA_SIZE ,PCI_DMA_FROMDEVICE ); +dma_map_single (&card->dev->dev, skb->data, +RX_DMA_SIZE ,DMA_FROM_DEVICE );iowrite32 (SKB_CB (skb)->dma_addr, card->config_regs +RX_DMA_ADDR (port)); card->rx_skb[port] = skb;
@@ -1069,8 +1069,8 @@ static uint32_t fpga_tx(struct solos_card *card)if (tx_pending &1 ) {struct sk_buff *oldskb = card->tx_skb[port];if (oldskb) { -pci_unmap_single (card->dev,SKB_CB (oldskb)->dma_addr, - oldskb->len,PCI_DMA_TODEVICE ); +dma_unmap_single (&card->dev->dev,SKB_CB (oldskb)->dma_addr, + oldskb->len,DMA_TO_DEVICE ); card->tx_skb[port] =NULL ; }spin_lock (&card->tx_queue_lock);
@@ -1089,8 +1089,8 @@ static uint32_t fpga_tx(struct solos_card *card) data = card->dma_bounce + (BUF_SIZE * port);memcpy (data, skb->data, skb->len); } -SKB_CB (skb)->dma_addr =pci_map_single (card->dev, data, - skb->len,PCI_DMA_TODEVICE ); +SKB_CB (skb)->dma_addr =dma_map_single (&card->dev->dev, data, + skb->len,DMA_TO_DEVICE ); card->tx_skb[port] = skb;iowrite32 (SKB_CB (skb)->dma_addr, card->config_regs +TX_DMA_ADDR (port));
@@ -1210,7 +1210,7 @@ static int fpga_probe(struct pci_dev *dev, const struct pci_device_id *id) goto out; } - err =pci_set_dma_mask (dev,DMA_BIT_MASK (32 )); + err =dma_set_mask_and_coherent (&dev->dev,DMA_BIT_MASK (32 ));if (err) {dev_warn (&dev->dev,"Failed to set 32-bit DMA mask\n" ); goto out;
@@ -1411,14 +1411,14 @@ static void atm_remove(struct solos_card *card) skb = card->rx_skb[i];if (skb) { -pci_unmap_single (card->dev,SKB_CB (skb)->dma_addr, -RX_DMA_SIZE ,PCI_DMA_FROMDEVICE ); +dma_unmap_single (&card->dev->dev,SKB_CB (skb)->dma_addr, +RX_DMA_SIZE ,DMA_FROM_DEVICE );dev_kfree_skb (skb); } skb = card->tx_skb[i];if (skb) { -pci_unmap_single (card->dev,SKB_CB (skb)->dma_addr, - skb->len,PCI_DMA_TODEVICE ); +dma_unmap_single (&card->dev->dev,SKB_CB (skb)->dma_addr, + skb->len,DMA_TO_DEVICE );dev_kfree_skb (skb); }while ((skb =skb_dequeue (&card->tx_queue[i])))
drivers/atm/zatm.c +11 -6
@@ -1306,19 +1306,20 @@ static int zatm_start(struct atm_dev *dev)if (!mbx_entries[i])continue ; - mbx =pci_alloc_consistent (pdev,2 *MBX_SIZE (i), &mbx_dma); + mbx =dma_alloc_coherent (&pdev->dev, +2 *MBX_SIZE (i), &mbx_dma,GFP_KERNEL );if (!mbx) { error = -ENOMEM ; goto out; }/* -* Alignment provided by pci_alloc_consistent() isn't enough +* Alignment provided by dma_alloc_coherent() isn't enough * for this device. */ if (((unsigned long )mbx ^ mbx_dma) &0xffff ) { printk(KERN_ERR DEV_LABEL "(itf %d): system " "bus incompatible with driver\n", dev->number); -pci_free_consistent (pdev,2 *MBX_SIZE (i), mbx, mbx_dma); +dma_free_coherent (&pdev->dev,2 *MBX_SIZE (i), mbx, mbx_dma); error = -ENODEV ; goto out; }
@@ -1354,9 +1355,9 @@ out_tx:kfree (zatm_dev->tx_map); out:while (i-- >0 ) { -pci_free_consistent (pdev,2 *MBX_SIZE (i), - (void *)zatm_dev->mbx_start[i], - zatm_dev->mbx_dma[i]); +dma_free_coherent (&pdev->dev,2 *MBX_SIZE (i), + (void *)zatm_dev->mbx_start[i], + zatm_dev->mbx_dma[i]); }free_irq (zatm_dev->irq, dev); goto done;
@@ -1608,6 +1609,10 @@ static int zatm_init_one(struct pci_dev *pci_dev,if (ret <0 ) goto out_disable; + ret =dma_set_mask_and_coherent (&pci_dev->dev,DMA_BIT_MASK (32 )); +if (ret <0 ) + goto out_disable; + zatm_dev->pci_dev = pci_dev; dev->dev_data = zatm_dev; zatm_dev->copper = (int )ent->driver_data;
Signature · 1 line
1.9.3
Quoted 15 lines · chas williams - CONTRACTOR
Signed-off-by Chas Williams - CONTRACTOR <[email protected]>--- drivers/atm/eni.c | 33 +++++++------ drivers/atm/fore200e.c | 22 +++++---- drivers/atm/he.c | 125 +++++++++++++++++++++++++----------------------- drivers/atm/he.h | 4 +- drivers/atm/idt77252.c | 107 ++++++++++++++++++++++------------------- drivers/atm/iphase.c | 54 +++++++++++---------- drivers/atm/lanai.c | 14 ++---- drivers/atm/nicstar.c | 60 +++++++++++------------ drivers/atm/solos-pci.c | 26 +++++----- drivers/atm/zatm.c | 17 ++++--- 10 files changed, 243 insertions(+), 219 deletions(-)
[]
Quoted 6 lines
drivers/atm/fore200e.c +0
-0
drivers/atm/fore200e.c static void fore200e_pca_write(u32 val, volatile u32 __iomem *addr) · line 431
Quoted 8 lines
drivers/atm/fore200e.c +1
-1@@ -425,7 +425,7 @@ static void fore200e_pca_write(u32 val, volatile u32 __iomem *addr)static u32 fore200e_pca_dma_map (struct fore200e * fore200e,void * virt_addr,int size,int direction) { -u32 dma_addr =pci_map_single ((struct pci_dev *)fore200e->bus_dev, virt_addr, size, direction); +u32 dma_addr =dma_map_single (&((struct pci_dev *) fore200e->bus_dev)->dev, virt_addr, size, direction);DPRINTK (3 ,"PCI DVMA mapping: virt_addr = 0x%p, size = %d, direction = %d, --> dma_addr = 0x%08x\n" , virt_addr, size, direction, dma_addr);
[]
I am going try to make similar changes in some other part of the kernel and I was wondering if you could explain how you decided it wasn't necessary to check for "((struct pci_dev *) fore200e->bus_dev" nullity for instance.
Thanks,
Quentin
Quoted 11 lines · On Fri, 16 Jan 2015 15:10:25 +0100 Quentin Lambert <[email protected]>…
drivers/atm/fore200e.c static void fore200e_pca_write(u32 val, volatile u32 __iomem *addr) · line 431
Quoted 6 lines
drivers/atm/fore200e.c +1
-1-u32 dma_addr =pci_map_single ((struct pci_dev *)fore200e->bus_dev, virt_addr, size, direction); +u32 dma_addr =dma_map_single (&((struct pci_dev *) fore200e->bus_dev)->dev, virt_addr, size, direction);DPRINTK (3 ,"PCI DVMA mapping: virt_addr = 0x%p, size = %d, direction = %d, --> dma_addr = 0x%08x\n" , virt_addr, size, direction, dma_addr);[]
I am going try to make similar changes in some other part of the kernel and I was wondering if you could explain how you decided it wasn't necessary to check for "((struct
pci_dev*)fore200e->bus_dev" nullity for instance.
This gets set up in fore200e_pca_detect() which is pretty early in the intialization process. We don't get as far as using any of the "DVMA" stubs unless pci_enable_device() succeeds, meaning pci_dev is good, and fore200e->bus_dev is assigned to pci_dev (around line 2724).
fore200e->bus_dev is never cleared back to NULL, but obviously you shouldn't be using any of the DMA routines after disabling the pci device. Hopefully the driver shuts down in an orderly fashion such that all DMA is over by the time the driver disables the pci device.
Quoted 20 lines · chas williams - CONTRACTOR
Quoted 11 lines · On Fri, 16 Jan 2015 15:10:25 +0100 Quentin Lambert <[email protected]>…
drivers/atm/fore200e.c static void fore200e_pca_write(u32 val, volatile u32 __iomem *addr) · line 431
Quoted 6 lines
drivers/atm/fore200e.c +1
-1-u32 dma_addr =pci_map_single ((struct pci_dev *)fore200e->bus_dev, virt_addr, size, direction); +u32 dma_addr =dma_map_single (&((struct pci_dev *) fore200e->bus_dev)->dev, virt_addr, size, direction);DPRINTK (3 ,"PCI DVMA mapping: virt_addr = 0x%p, size = %d, direction = %d, --> dma_addr = 0x%08x\n" , virt_addr, size, direction, dma_addr);[]
I am going try to make similar changes in some other part of the kernel and I was wondering if you could explain how you decided it wasn't necessary to check for "((struct
pci_dev*)fore200e->bus_dev" nullity for instance.This gets set up in
fore200e_pca_detect()which is pretty early in the intialization process. We don't get as far as using any of the "DVMA" stubs unlesspci_enable_device()succeeds, meaningpci_devis good, andfore200e->bus_devis assigned topci_dev(around line 2724).
Quoted 4 lines
fore200e->bus_devis never cleared back to NULL, but obviously you shouldn't be using any of the DMA routines after disabling the pci device. Hopefully the driver shuts down in an orderly fashion such that all DMA is over by the time the driver disables the pci device.
Thank you
From: chas williams - CONTRACTOR <[email protected]>
Date: Fri, 16 Jan 2015 08:57:21 -0500
Quoted 1 line
Signed-off-by Chas Williams - CONTRACTOR <[email protected]>
Applied, thanks Chas.