Skip to content

Commit d0ba913

Browse files
Sergei Shtylyovdavem330
authored andcommitted
sh_eth: advance 'rxdesc' later in sh_eth_ring_format()
Iff dma_map_single() fails, 'rxdesc' should point to the last filled RX descriptor, so that it can be marked as the last one, however the driver would have already advanced it by that time. In order to fix that, only fill an RX descriptor once all the data for it is ready. Signed-off-by: Sergei Shtylyov <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent c1b7fca commit d0ba913

File tree

1 file changed

+4
-3
lines changed

1 file changed

+4
-3
lines changed

drivers/net/ethernet/renesas/sh_eth.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1127,18 +1127,19 @@ static void sh_eth_ring_format(struct net_device *ndev)
11271127
break;
11281128
sh_eth_set_receive_align(skb);
11291129

1130-
/* RX descriptor */
1131-
rxdesc = &mdp->rx_ring[i];
11321130
/* The size of the buffer is a multiple of 32 bytes. */
11331131
buf_len = ALIGN(mdp->rx_buf_sz, 32);
1134-
rxdesc->len = cpu_to_le32(buf_len << 16);
11351132
dma_addr = dma_map_single(&ndev->dev, skb->data, buf_len,
11361133
DMA_FROM_DEVICE);
11371134
if (dma_mapping_error(&ndev->dev, dma_addr)) {
11381135
kfree_skb(skb);
11391136
break;
11401137
}
11411138
mdp->rx_skbuff[i] = skb;
1139+
1140+
/* RX descriptor */
1141+
rxdesc = &mdp->rx_ring[i];
1142+
rxdesc->len = cpu_to_le32(buf_len << 16);
11421143
rxdesc->addr = cpu_to_le32(dma_addr);
11431144
rxdesc->status = cpu_to_le32(RD_RACT | RD_RFP);
11441145

0 commit comments

Comments
 (0)