Skip to content

Commit 5e9c51b

Browse files
committed
Merge branch 'net-DMA-API'
Christoph Hellwig says: ==================== net: don't pass a NULL struct device to DMA API functions v2 We still have a few drivers which pass a NULL struct device pointer to DMA API functions, which generally is a bad idea as the API implementations rely on the device not only for ops selection, but also the dma mask and various other attributes. This series contains all easy conversions to pass a struct device, besides that there also is some arch code that needs separate handling, a driver that should not use the DMA API at all, and one that is a complete basket case to be deal with separately. Changes since v1: - fix an inverted ifdef in CAIF - update the smc911x changelog - split the series, this only contains the networking patches ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
2 parents 99e1311 + 0eb1645 commit 5e9c51b

File tree

9 files changed

+59
-43
lines changed

9 files changed

+59
-43
lines changed

drivers/net/caif/caif_spi.c

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -73,35 +73,37 @@ MODULE_PARM_DESC(spi_down_tail_align, "SPI downlink tail alignment.");
7373
#define LOW_WATER_MARK 100
7474
#define HIGH_WATER_MARK (LOW_WATER_MARK*5)
7575

76-
#ifdef CONFIG_UML
76+
#ifndef CONFIG_HAS_DMA
7777

7878
/*
7979
* We sometimes use UML for debugging, but it cannot handle
8080
* dma_alloc_coherent so we have to wrap it.
8181
*/
82-
static inline void *dma_alloc(dma_addr_t *daddr)
82+
static inline void *dma_alloc(struct cfspi *cfspi, dma_addr_t *daddr)
8383
{
8484
return kmalloc(SPI_DMA_BUF_LEN, GFP_KERNEL);
8585
}
8686

87-
static inline void dma_free(void *cpu_addr, dma_addr_t handle)
87+
static inline void dma_free(struct cfspi *cfspi, void *cpu_addr,
88+
dma_addr_t handle)
8889
{
8990
kfree(cpu_addr);
9091
}
9192

9293
#else
9394

94-
static inline void *dma_alloc(dma_addr_t *daddr)
95+
static inline void *dma_alloc(struct cfspi *cfspi, dma_addr_t *daddr)
9596
{
96-
return dma_alloc_coherent(NULL, SPI_DMA_BUF_LEN, daddr,
97+
return dma_alloc_coherent(&cfspi->pdev->dev, SPI_DMA_BUF_LEN, daddr,
9798
GFP_KERNEL);
9899
}
99100

100-
static inline void dma_free(void *cpu_addr, dma_addr_t handle)
101+
static inline void dma_free(struct cfspi *cfspi, void *cpu_addr,
102+
dma_addr_t handle)
101103
{
102-
dma_free_coherent(NULL, SPI_DMA_BUF_LEN, cpu_addr, handle);
104+
dma_free_coherent(&cfspi->pdev->dev, SPI_DMA_BUF_LEN, cpu_addr, handle);
103105
}
104-
#endif /* CONFIG_UML */
106+
#endif /* CONFIG_HAS_DMA */
105107

106108
#ifdef CONFIG_DEBUG_FS
107109

@@ -610,13 +612,13 @@ static int cfspi_init(struct net_device *dev)
610612
}
611613

612614
/* Allocate DMA buffers. */
613-
cfspi->xfer.va_tx[0] = dma_alloc(&cfspi->xfer.pa_tx[0]);
615+
cfspi->xfer.va_tx[0] = dma_alloc(cfspi, &cfspi->xfer.pa_tx[0]);
614616
if (!cfspi->xfer.va_tx[0]) {
615617
res = -ENODEV;
616618
goto err_dma_alloc_tx_0;
617619
}
618620

619-
cfspi->xfer.va_rx = dma_alloc(&cfspi->xfer.pa_rx);
621+
cfspi->xfer.va_rx = dma_alloc(cfspi, &cfspi->xfer.pa_rx);
620622

621623
if (!cfspi->xfer.va_rx) {
622624
res = -ENODEV;
@@ -665,9 +667,9 @@ static int cfspi_init(struct net_device *dev)
665667
return 0;
666668

667669
err_create_wq:
668-
dma_free(cfspi->xfer.va_rx, cfspi->xfer.pa_rx);
670+
dma_free(cfspi, cfspi->xfer.va_rx, cfspi->xfer.pa_rx);
669671
err_dma_alloc_rx:
670-
dma_free(cfspi->xfer.va_tx[0], cfspi->xfer.pa_tx[0]);
672+
dma_free(cfspi, cfspi->xfer.va_tx[0], cfspi->xfer.pa_tx[0]);
671673
err_dma_alloc_tx_0:
672674
return res;
673675
}
@@ -683,8 +685,8 @@ static void cfspi_uninit(struct net_device *dev)
683685

684686
cfspi->ndev = NULL;
685687
/* Free DMA buffers. */
686-
dma_free(cfspi->xfer.va_rx, cfspi->xfer.pa_rx);
687-
dma_free(cfspi->xfer.va_tx[0], cfspi->xfer.pa_tx[0]);
688+
dma_free(cfspi, cfspi->xfer.va_rx, cfspi->xfer.pa_rx);
689+
dma_free(cfspi, cfspi->xfer.va_tx[0], cfspi->xfer.pa_tx[0]);
688690
set_bit(SPI_TERMINATE, &cfspi->state);
689691
wake_up_interruptible(&cfspi->wait);
690692
destroy_workqueue(cfspi->wq);

drivers/net/ethernet/amd/au1000_eth.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1167,7 +1167,7 @@ static int au1000_probe(struct platform_device *pdev)
11671167
/* Allocate the data buffers
11681168
* Snooping works fine with eth on all au1xxx
11691169
*/
1170-
aup->vaddr = (u32)dma_alloc_attrs(NULL, MAX_BUF_SIZE *
1170+
aup->vaddr = (u32)dma_alloc_attrs(&pdev->dev, MAX_BUF_SIZE *
11711171
(NUM_TX_BUFFS + NUM_RX_BUFFS),
11721172
&aup->dma_addr, 0,
11731173
DMA_ATTR_NON_CONSISTENT);
@@ -1349,7 +1349,7 @@ static int au1000_probe(struct platform_device *pdev)
13491349
err_remap2:
13501350
iounmap(aup->mac);
13511351
err_remap1:
1352-
dma_free_attrs(NULL, MAX_BUF_SIZE * (NUM_TX_BUFFS + NUM_RX_BUFFS),
1352+
dma_free_attrs(&pdev->dev, MAX_BUF_SIZE * (NUM_TX_BUFFS + NUM_RX_BUFFS),
13531353
(void *)aup->vaddr, aup->dma_addr,
13541354
DMA_ATTR_NON_CONSISTENT);
13551355
err_vaddr:
@@ -1383,7 +1383,7 @@ static int au1000_remove(struct platform_device *pdev)
13831383
if (aup->tx_db_inuse[i])
13841384
au1000_ReleaseDB(aup, aup->tx_db_inuse[i]);
13851385

1386-
dma_free_attrs(NULL, MAX_BUF_SIZE * (NUM_TX_BUFFS + NUM_RX_BUFFS),
1386+
dma_free_attrs(&pdev->dev, MAX_BUF_SIZE * (NUM_TX_BUFFS + NUM_RX_BUFFS),
13871387
(void *)aup->vaddr, aup->dma_addr,
13881388
DMA_ATTR_NON_CONSISTENT);
13891389

drivers/net/ethernet/cadence/macb_main.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3673,9 +3673,9 @@ static netdev_tx_t at91ether_start_xmit(struct sk_buff *skb,
36733673
/* Store packet information (to free when Tx completed) */
36743674
lp->skb = skb;
36753675
lp->skb_length = skb->len;
3676-
lp->skb_physaddr = dma_map_single(NULL, skb->data, skb->len,
3677-
DMA_TO_DEVICE);
3678-
if (dma_mapping_error(NULL, lp->skb_physaddr)) {
3676+
lp->skb_physaddr = dma_map_single(&lp->pdev->dev, skb->data,
3677+
skb->len, DMA_TO_DEVICE);
3678+
if (dma_mapping_error(&lp->pdev->dev, lp->skb_physaddr)) {
36793679
dev_kfree_skb_any(skb);
36803680
dev->stats.tx_dropped++;
36813681
netdev_err(dev, "%s: DMA mapping error\n", __func__);
@@ -3765,7 +3765,7 @@ static irqreturn_t at91ether_interrupt(int irq, void *dev_id)
37653765
if (lp->skb) {
37663766
dev_kfree_skb_irq(lp->skb);
37673767
lp->skb = NULL;
3768-
dma_unmap_single(NULL, lp->skb_physaddr,
3768+
dma_unmap_single(&lp->pdev->dev, lp->skb_physaddr,
37693769
lp->skb_length, DMA_TO_DEVICE);
37703770
dev->stats.tx_packets++;
37713771
dev->stats.tx_bytes += lp->skb_length;

drivers/net/ethernet/lantiq_etop.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,10 +112,12 @@ struct ltq_etop_priv {
112112
static int
113113
ltq_etop_alloc_skb(struct ltq_etop_chan *ch)
114114
{
115+
struct ltq_etop_priv *priv = netdev_priv(ch->netdev);
116+
115117
ch->skb[ch->dma.desc] = netdev_alloc_skb(ch->netdev, MAX_DMA_DATA_LEN);
116118
if (!ch->skb[ch->dma.desc])
117119
return -ENOMEM;
118-
ch->dma.desc_base[ch->dma.desc].addr = dma_map_single(NULL,
120+
ch->dma.desc_base[ch->dma.desc].addr = dma_map_single(&priv->pdev->dev,
119121
ch->skb[ch->dma.desc]->data, MAX_DMA_DATA_LEN,
120122
DMA_FROM_DEVICE);
121123
ch->dma.desc_base[ch->dma.desc].addr =
@@ -487,7 +489,7 @@ ltq_etop_tx(struct sk_buff *skb, struct net_device *dev)
487489
netif_trans_update(dev);
488490

489491
spin_lock_irqsave(&priv->lock, flags);
490-
desc->addr = ((unsigned int) dma_map_single(NULL, skb->data, len,
492+
desc->addr = ((unsigned int) dma_map_single(&priv->pdev->dev, skb->data, len,
491493
DMA_TO_DEVICE)) - byte_offset;
492494
wmb();
493495
desc->ctl = LTQ_DMA_OWN | LTQ_DMA_SOP | LTQ_DMA_EOP |

drivers/net/ethernet/marvell/pxa168_eth.c

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,7 @@ struct tx_desc {
201201
};
202202

203203
struct pxa168_eth_private {
204+
struct platform_device *pdev;
204205
int port_num; /* User Ethernet port number */
205206
int phy_addr;
206207
int phy_speed;
@@ -331,7 +332,7 @@ static void rxq_refill(struct net_device *dev)
331332
used_rx_desc = pep->rx_used_desc_q;
332333
p_used_rx_desc = &pep->p_rx_desc_area[used_rx_desc];
333334
size = skb_end_pointer(skb) - skb->data;
334-
p_used_rx_desc->buf_ptr = dma_map_single(NULL,
335+
p_used_rx_desc->buf_ptr = dma_map_single(&pep->pdev->dev,
335336
skb->data,
336337
size,
337338
DMA_FROM_DEVICE);
@@ -743,7 +744,7 @@ static int txq_reclaim(struct net_device *dev, int force)
743744
netdev_err(dev, "Error in TX\n");
744745
dev->stats.tx_errors++;
745746
}
746-
dma_unmap_single(NULL, addr, count, DMA_TO_DEVICE);
747+
dma_unmap_single(&pep->pdev->dev, addr, count, DMA_TO_DEVICE);
747748
if (skb)
748749
dev_kfree_skb_irq(skb);
749750
released++;
@@ -805,7 +806,7 @@ static int rxq_process(struct net_device *dev, int budget)
805806
if (rx_next_curr_desc == rx_used_desc)
806807
pep->rx_resource_err = 1;
807808
pep->rx_desc_count--;
808-
dma_unmap_single(NULL, rx_desc->buf_ptr,
809+
dma_unmap_single(&pep->pdev->dev, rx_desc->buf_ptr,
809810
rx_desc->buf_size,
810811
DMA_FROM_DEVICE);
811812
received_packets++;
@@ -1274,7 +1275,8 @@ pxa168_eth_start_xmit(struct sk_buff *skb, struct net_device *dev)
12741275
length = skb->len;
12751276
pep->tx_skb[tx_index] = skb;
12761277
desc->byte_cnt = length;
1277-
desc->buf_ptr = dma_map_single(NULL, skb->data, length, DMA_TO_DEVICE);
1278+
desc->buf_ptr = dma_map_single(&pep->pdev->dev, skb->data, length,
1279+
DMA_TO_DEVICE);
12781280

12791281
skb_tx_timestamp(skb);
12801282

@@ -1528,6 +1530,7 @@ static int pxa168_eth_probe(struct platform_device *pdev)
15281530
if (err)
15291531
goto err_free_mdio;
15301532

1533+
pep->pdev = pdev;
15311534
SET_NETDEV_DEV(dev, &pdev->dev);
15321535
pxa168_init_hw(pep);
15331536
err = register_netdev(dev);

drivers/net/ethernet/moxa/moxart_ether.c

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -81,11 +81,13 @@ static void moxart_mac_free_memory(struct net_device *ndev)
8181
priv->rx_buf_size, DMA_FROM_DEVICE);
8282

8383
if (priv->tx_desc_base)
84-
dma_free_coherent(NULL, TX_REG_DESC_SIZE * TX_DESC_NUM,
84+
dma_free_coherent(&priv->pdev->dev,
85+
TX_REG_DESC_SIZE * TX_DESC_NUM,
8586
priv->tx_desc_base, priv->tx_base);
8687

8788
if (priv->rx_desc_base)
88-
dma_free_coherent(NULL, RX_REG_DESC_SIZE * RX_DESC_NUM,
89+
dma_free_coherent(&priv->pdev->dev,
90+
RX_REG_DESC_SIZE * RX_DESC_NUM,
8991
priv->rx_desc_base, priv->rx_base);
9092

9193
kfree(priv->tx_buf_base);
@@ -476,6 +478,7 @@ static int moxart_mac_probe(struct platform_device *pdev)
476478

477479
priv = netdev_priv(ndev);
478480
priv->ndev = ndev;
481+
priv->pdev = pdev;
479482

480483
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
481484
ndev->base_addr = res->start;
@@ -491,15 +494,15 @@ static int moxart_mac_probe(struct platform_device *pdev)
491494
priv->tx_buf_size = TX_BUF_SIZE;
492495
priv->rx_buf_size = RX_BUF_SIZE;
493496

494-
priv->tx_desc_base = dma_alloc_coherent(NULL, TX_REG_DESC_SIZE *
497+
priv->tx_desc_base = dma_alloc_coherent(&pdev->dev, TX_REG_DESC_SIZE *
495498
TX_DESC_NUM, &priv->tx_base,
496499
GFP_DMA | GFP_KERNEL);
497500
if (!priv->tx_desc_base) {
498501
ret = -ENOMEM;
499502
goto init_fail;
500503
}
501504

502-
priv->rx_desc_base = dma_alloc_coherent(NULL, RX_REG_DESC_SIZE *
505+
priv->rx_desc_base = dma_alloc_coherent(&pdev->dev, RX_REG_DESC_SIZE *
503506
RX_DESC_NUM, &priv->rx_base,
504507
GFP_DMA | GFP_KERNEL);
505508
if (!priv->rx_desc_base) {

drivers/net/ethernet/moxa/moxart_ether.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,7 @@
292292
#define LINK_STATUS 0x4
293293

294294
struct moxart_mac_priv_t {
295+
struct platform_device *pdev;
295296
void __iomem *base;
296297
unsigned int reg_maccr;
297298
unsigned int reg_imr;

drivers/net/ethernet/sgi/meth.c

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ module_param(timeout, int, 0);
6868
* packets in and out, so there is place for a packet
6969
*/
7070
struct meth_private {
71+
struct platform_device *pdev;
72+
7173
/* in-memory copy of MAC Control register */
7274
u64 mac_ctrl;
7375

@@ -211,8 +213,8 @@ static void meth_check_link(struct net_device *dev)
211213
static int meth_init_tx_ring(struct meth_private *priv)
212214
{
213215
/* Init TX ring */
214-
priv->tx_ring = dma_alloc_coherent(NULL, TX_RING_BUFFER_SIZE,
215-
&priv->tx_ring_dma, GFP_ATOMIC);
216+
priv->tx_ring = dma_alloc_coherent(&priv->pdev->dev,
217+
TX_RING_BUFFER_SIZE, &priv->tx_ring_dma, GFP_KERNEL);
216218
if (!priv->tx_ring)
217219
return -ENOMEM;
218220

@@ -236,7 +238,7 @@ static int meth_init_rx_ring(struct meth_private *priv)
236238
priv->rx_ring[i]=(rx_packet*)(priv->rx_skbs[i]->head);
237239
/* I'll need to re-sync it after each RX */
238240
priv->rx_ring_dmas[i] =
239-
dma_map_single(NULL, priv->rx_ring[i],
241+
dma_map_single(&priv->pdev->dev, priv->rx_ring[i],
240242
METH_RX_BUFF_SIZE, DMA_FROM_DEVICE);
241243
mace->eth.rx_fifo = priv->rx_ring_dmas[i];
242244
}
@@ -253,7 +255,7 @@ static void meth_free_tx_ring(struct meth_private *priv)
253255
dev_kfree_skb(priv->tx_skbs[i]);
254256
priv->tx_skbs[i] = NULL;
255257
}
256-
dma_free_coherent(NULL, TX_RING_BUFFER_SIZE, priv->tx_ring,
258+
dma_free_coherent(&priv->pdev->dev, TX_RING_BUFFER_SIZE, priv->tx_ring,
257259
priv->tx_ring_dma);
258260
}
259261

@@ -263,7 +265,7 @@ static void meth_free_rx_ring(struct meth_private *priv)
263265
int i;
264266

265267
for (i = 0; i < RX_RING_ENTRIES; i++) {
266-
dma_unmap_single(NULL, priv->rx_ring_dmas[i],
268+
dma_unmap_single(&priv->pdev->dev, priv->rx_ring_dmas[i],
267269
METH_RX_BUFF_SIZE, DMA_FROM_DEVICE);
268270
priv->rx_ring[i] = 0;
269271
priv->rx_ring_dmas[i] = 0;
@@ -393,7 +395,8 @@ static void meth_rx(struct net_device* dev, unsigned long int_status)
393395
fifo_rptr = (fifo_rptr - 1) & 0x0f;
394396
}
395397
while (priv->rx_write != fifo_rptr) {
396-
dma_unmap_single(NULL, priv->rx_ring_dmas[priv->rx_write],
398+
dma_unmap_single(&priv->pdev->dev,
399+
priv->rx_ring_dmas[priv->rx_write],
397400
METH_RX_BUFF_SIZE, DMA_FROM_DEVICE);
398401
status = priv->rx_ring[priv->rx_write]->status.raw;
399402
#if MFE_DEBUG
@@ -454,7 +457,8 @@ static void meth_rx(struct net_device* dev, unsigned long int_status)
454457
priv->rx_ring[priv->rx_write] = (rx_packet*)skb->head;
455458
priv->rx_ring[priv->rx_write]->status.raw = 0;
456459
priv->rx_ring_dmas[priv->rx_write] =
457-
dma_map_single(NULL, priv->rx_ring[priv->rx_write],
460+
dma_map_single(&priv->pdev->dev,
461+
priv->rx_ring[priv->rx_write],
458462
METH_RX_BUFF_SIZE, DMA_FROM_DEVICE);
459463
mace->eth.rx_fifo = priv->rx_ring_dmas[priv->rx_write];
460464
ADVANCE_RX_PTR(priv->rx_write);
@@ -637,7 +641,7 @@ static void meth_tx_1page_prepare(struct meth_private *priv,
637641
}
638642

639643
/* first page */
640-
catbuf = dma_map_single(NULL, buffer_data, buffer_len,
644+
catbuf = dma_map_single(&priv->pdev->dev, buffer_data, buffer_len,
641645
DMA_TO_DEVICE);
642646
desc->data.cat_buf[0].form.start_addr = catbuf >> 3;
643647
desc->data.cat_buf[0].form.len = buffer_len - 1;
@@ -663,12 +667,12 @@ static void meth_tx_2page_prepare(struct meth_private *priv,
663667
}
664668

665669
/* first page */
666-
catbuf1 = dma_map_single(NULL, buffer1_data, buffer1_len,
670+
catbuf1 = dma_map_single(&priv->pdev->dev, buffer1_data, buffer1_len,
667671
DMA_TO_DEVICE);
668672
desc->data.cat_buf[0].form.start_addr = catbuf1 >> 3;
669673
desc->data.cat_buf[0].form.len = buffer1_len - 1;
670674
/* second page */
671-
catbuf2 = dma_map_single(NULL, buffer2_data, buffer2_len,
675+
catbuf2 = dma_map_single(&priv->pdev->dev, buffer2_data, buffer2_len,
672676
DMA_TO_DEVICE);
673677
desc->data.cat_buf[1].form.start_addr = catbuf2 >> 3;
674678
desc->data.cat_buf[1].form.len = buffer2_len - 1;
@@ -840,6 +844,7 @@ static int meth_probe(struct platform_device *pdev)
840844
memcpy(dev->dev_addr, o2meth_eaddr, ETH_ALEN);
841845

842846
priv = netdev_priv(dev);
847+
priv->pdev = pdev;
843848
spin_lock_init(&priv->meth_lock);
844849
SET_NETDEV_DEV(dev, &pdev->dev);
845850

drivers/net/ethernet/smsc/smc911x.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1188,7 +1188,7 @@ smc911x_tx_dma_irq(void *data)
11881188

11891189
DBG(SMC_DEBUG_TX | SMC_DEBUG_DMA, dev, "TX DMA irq handler\n");
11901190
BUG_ON(skb == NULL);
1191-
dma_unmap_single(NULL, tx_dmabuf, tx_dmalen, DMA_TO_DEVICE);
1191+
dma_unmap_single(lp->dev, tx_dmabuf, tx_dmalen, DMA_TO_DEVICE);
11921192
netif_trans_update(dev);
11931193
dev_kfree_skb_irq(skb);
11941194
lp->current_tx_skb = NULL;
@@ -1219,7 +1219,7 @@ smc911x_rx_dma_irq(void *data)
12191219

12201220
DBG(SMC_DEBUG_FUNC, dev, "--> %s\n", __func__);
12211221
DBG(SMC_DEBUG_RX | SMC_DEBUG_DMA, dev, "RX DMA irq handler\n");
1222-
dma_unmap_single(NULL, rx_dmabuf, rx_dmalen, DMA_FROM_DEVICE);
1222+
dma_unmap_single(lp->dev, rx_dmabuf, rx_dmalen, DMA_FROM_DEVICE);
12231223
BUG_ON(skb == NULL);
12241224
lp->current_rx_skb = NULL;
12251225
PRINT_PKT(skb->data, skb->len);

0 commit comments

Comments
 (0)