mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-14 16:23:51 +08:00
Merge branch 'sh_eth-dma-mapping-fixes'
Thomas Petazzoni says: ==================== net: sh_eth: DMA mapping API fixes Here are two patches that fix how the sh_eth driver is using the DMA mapping API: a bogus struct device is used in some places, or a NULL struct device is used. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
a6cec1f5de
@ -1149,7 +1149,8 @@ static int sh_eth_tx_free(struct net_device *ndev, bool sent_only)
|
||||
entry, le32_to_cpu(txdesc->status));
|
||||
/* Free the original skb. */
|
||||
if (mdp->tx_skbuff[entry]) {
|
||||
dma_unmap_single(&ndev->dev, le32_to_cpu(txdesc->addr),
|
||||
dma_unmap_single(&mdp->pdev->dev,
|
||||
le32_to_cpu(txdesc->addr),
|
||||
le32_to_cpu(txdesc->len) >> 16,
|
||||
DMA_TO_DEVICE);
|
||||
dev_kfree_skb_irq(mdp->tx_skbuff[entry]);
|
||||
@ -1179,14 +1180,14 @@ static void sh_eth_ring_free(struct net_device *ndev)
|
||||
if (mdp->rx_skbuff[i]) {
|
||||
struct sh_eth_rxdesc *rxdesc = &mdp->rx_ring[i];
|
||||
|
||||
dma_unmap_single(&ndev->dev,
|
||||
dma_unmap_single(&mdp->pdev->dev,
|
||||
le32_to_cpu(rxdesc->addr),
|
||||
ALIGN(mdp->rx_buf_sz, 32),
|
||||
DMA_FROM_DEVICE);
|
||||
}
|
||||
}
|
||||
ringsize = sizeof(struct sh_eth_rxdesc) * mdp->num_rx_ring;
|
||||
dma_free_coherent(NULL, ringsize, mdp->rx_ring,
|
||||
dma_free_coherent(&mdp->pdev->dev, ringsize, mdp->rx_ring,
|
||||
mdp->rx_desc_dma);
|
||||
mdp->rx_ring = NULL;
|
||||
}
|
||||
@ -1203,7 +1204,7 @@ static void sh_eth_ring_free(struct net_device *ndev)
|
||||
sh_eth_tx_free(ndev, false);
|
||||
|
||||
ringsize = sizeof(struct sh_eth_txdesc) * mdp->num_tx_ring;
|
||||
dma_free_coherent(NULL, ringsize, mdp->tx_ring,
|
||||
dma_free_coherent(&mdp->pdev->dev, ringsize, mdp->tx_ring,
|
||||
mdp->tx_desc_dma);
|
||||
mdp->tx_ring = NULL;
|
||||
}
|
||||
@ -1245,9 +1246,9 @@ static void sh_eth_ring_format(struct net_device *ndev)
|
||||
|
||||
/* The size of the buffer is a multiple of 32 bytes. */
|
||||
buf_len = ALIGN(mdp->rx_buf_sz, 32);
|
||||
dma_addr = dma_map_single(&ndev->dev, skb->data, buf_len,
|
||||
dma_addr = dma_map_single(&mdp->pdev->dev, skb->data, buf_len,
|
||||
DMA_FROM_DEVICE);
|
||||
if (dma_mapping_error(&ndev->dev, dma_addr)) {
|
||||
if (dma_mapping_error(&mdp->pdev->dev, dma_addr)) {
|
||||
kfree_skb(skb);
|
||||
break;
|
||||
}
|
||||
@ -1323,8 +1324,8 @@ static int sh_eth_ring_init(struct net_device *ndev)
|
||||
|
||||
/* Allocate all Rx descriptors. */
|
||||
rx_ringsize = sizeof(struct sh_eth_rxdesc) * mdp->num_rx_ring;
|
||||
mdp->rx_ring = dma_alloc_coherent(NULL, rx_ringsize, &mdp->rx_desc_dma,
|
||||
GFP_KERNEL);
|
||||
mdp->rx_ring = dma_alloc_coherent(&mdp->pdev->dev, rx_ringsize,
|
||||
&mdp->rx_desc_dma, GFP_KERNEL);
|
||||
if (!mdp->rx_ring)
|
||||
goto ring_free;
|
||||
|
||||
@ -1332,8 +1333,8 @@ static int sh_eth_ring_init(struct net_device *ndev)
|
||||
|
||||
/* Allocate all Tx descriptors. */
|
||||
tx_ringsize = sizeof(struct sh_eth_txdesc) * mdp->num_tx_ring;
|
||||
mdp->tx_ring = dma_alloc_coherent(NULL, tx_ringsize, &mdp->tx_desc_dma,
|
||||
GFP_KERNEL);
|
||||
mdp->tx_ring = dma_alloc_coherent(&mdp->pdev->dev, tx_ringsize,
|
||||
&mdp->tx_desc_dma, GFP_KERNEL);
|
||||
if (!mdp->tx_ring)
|
||||
goto ring_free;
|
||||
return 0;
|
||||
@ -1527,7 +1528,7 @@ static int sh_eth_rx(struct net_device *ndev, u32 intr_status, int *quota)
|
||||
mdp->rx_skbuff[entry] = NULL;
|
||||
if (mdp->cd->rpadir)
|
||||
skb_reserve(skb, NET_IP_ALIGN);
|
||||
dma_unmap_single(&ndev->dev, dma_addr,
|
||||
dma_unmap_single(&mdp->pdev->dev, dma_addr,
|
||||
ALIGN(mdp->rx_buf_sz, 32),
|
||||
DMA_FROM_DEVICE);
|
||||
skb_put(skb, pkt_len);
|
||||
@ -1555,9 +1556,9 @@ static int sh_eth_rx(struct net_device *ndev, u32 intr_status, int *quota)
|
||||
if (skb == NULL)
|
||||
break; /* Better luck next round. */
|
||||
sh_eth_set_receive_align(skb);
|
||||
dma_addr = dma_map_single(&ndev->dev, skb->data,
|
||||
dma_addr = dma_map_single(&mdp->pdev->dev, skb->data,
|
||||
buf_len, DMA_FROM_DEVICE);
|
||||
if (dma_mapping_error(&ndev->dev, dma_addr)) {
|
||||
if (dma_mapping_error(&mdp->pdev->dev, dma_addr)) {
|
||||
kfree_skb(skb);
|
||||
break;
|
||||
}
|
||||
@ -2441,9 +2442,9 @@ static int sh_eth_start_xmit(struct sk_buff *skb, struct net_device *ndev)
|
||||
/* soft swap. */
|
||||
if (!mdp->cd->hw_swap)
|
||||
sh_eth_soft_swap(PTR_ALIGN(skb->data, 4), skb->len + 2);
|
||||
dma_addr = dma_map_single(&ndev->dev, skb->data, skb->len,
|
||||
dma_addr = dma_map_single(&mdp->pdev->dev, skb->data, skb->len,
|
||||
DMA_TO_DEVICE);
|
||||
if (dma_mapping_error(&ndev->dev, dma_addr)) {
|
||||
if (dma_mapping_error(&mdp->pdev->dev, dma_addr)) {
|
||||
kfree_skb(skb);
|
||||
return NETDEV_TX_OK;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user