Skip to content

Commit bebe933

Browse files
glevanddavem330
authored andcommitted
net/ps3_gelic_net: Use dma_mapping_error
The current Gelic Etherenet driver was checking the return value of its dma_map_single call, and not using the dma_mapping_error() routine. Fixes runtime problems like these: DMA-API: ps3_gelic_driver sb_05: device driver failed to check map error WARNING: CPU: 0 PID: 0 at kernel/dma/debug.c:1027 .check_unmap+0x888/0x8dc Fixes: 02c1889 ("ps3: gigabit ethernet driver for PS3, take3") Reviewed-by: Alexander Duyck <[email protected]> Signed-off-by: Geoff Levand <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 19b3bb5 commit bebe933

File tree

1 file changed

+13
-11
lines changed

1 file changed

+13
-11
lines changed

drivers/net/ethernet/toshiba/ps3_gelic_net.c

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -317,15 +317,17 @@ static int gelic_card_init_chain(struct gelic_card *card,
317317

318318
/* set up the hardware pointers in each descriptor */
319319
for (i = 0; i < no; i++, descr++) {
320+
dma_addr_t cpu_addr;
321+
320322
gelic_descr_set_status(descr, GELIC_DESCR_DMA_NOT_IN_USE);
321-
descr->bus_addr =
322-
dma_map_single(ctodev(card), descr,
323-
GELIC_DESCR_SIZE,
324-
DMA_BIDIRECTIONAL);
325323

326-
if (!descr->bus_addr)
324+
cpu_addr = dma_map_single(ctodev(card), descr,
325+
GELIC_DESCR_SIZE, DMA_BIDIRECTIONAL);
326+
327+
if (dma_mapping_error(ctodev(card), cpu_addr))
327328
goto iommu_error;
328329

330+
descr->bus_addr = cpu_to_be32(cpu_addr);
329331
descr->next = descr + 1;
330332
descr->prev = descr - 1;
331333
}
@@ -375,6 +377,7 @@ static int gelic_descr_prepare_rx(struct gelic_card *card,
375377
static const unsigned int rx_skb_size =
376378
ALIGN(GELIC_NET_MAX_FRAME, GELIC_NET_RXBUF_ALIGN) +
377379
GELIC_NET_RXBUF_ALIGN - 1;
380+
dma_addr_t cpu_addr;
378381
int offset;
379382

380383
if (gelic_descr_get_status(descr) != GELIC_DESCR_DMA_NOT_IN_USE)
@@ -396,11 +399,10 @@ static int gelic_descr_prepare_rx(struct gelic_card *card,
396399
if (offset)
397400
skb_reserve(descr->skb, GELIC_NET_RXBUF_ALIGN - offset);
398401
/* io-mmu-map the skb */
399-
descr->buf_addr = cpu_to_be32(dma_map_single(ctodev(card),
400-
descr->skb->data,
401-
GELIC_NET_MAX_FRAME,
402-
DMA_FROM_DEVICE));
403-
if (!descr->buf_addr) {
402+
cpu_addr = dma_map_single(ctodev(card), descr->skb->data,
403+
GELIC_NET_MAX_FRAME, DMA_FROM_DEVICE);
404+
descr->buf_addr = cpu_to_be32(cpu_addr);
405+
if (dma_mapping_error(ctodev(card), cpu_addr)) {
404406
dev_kfree_skb_any(descr->skb);
405407
descr->skb = NULL;
406408
dev_info(ctodev(card),
@@ -780,7 +782,7 @@ static int gelic_descr_prepare_tx(struct gelic_card *card,
780782

781783
buf = dma_map_single(ctodev(card), skb->data, skb->len, DMA_TO_DEVICE);
782784

783-
if (!buf) {
785+
if (dma_mapping_error(ctodev(card), buf)) {
784786
dev_err(ctodev(card),
785787
"dma map 2 failed (%p, %i). Dropping packet\n",
786788
skb->data, skb->len);

0 commit comments

Comments
 (0)