|
@@ -1369,9 +1369,6 @@ static int xgbe_close(struct net_device *netdev)
|
|
/* Free the ring descriptors and buffers */
|
|
/* Free the ring descriptors and buffers */
|
|
desc_if->free_ring_resources(pdata);
|
|
desc_if->free_ring_resources(pdata);
|
|
|
|
|
|
- /* Free the channel and ring structures */
|
|
|
|
- xgbe_free_channels(pdata);
|
|
|
|
-
|
|
|
|
/* Release the interrupts */
|
|
/* Release the interrupts */
|
|
devm_free_irq(pdata->dev, pdata->dev_irq, pdata);
|
|
devm_free_irq(pdata->dev, pdata->dev_irq, pdata);
|
|
if (pdata->per_channel_irq) {
|
|
if (pdata->per_channel_irq) {
|
|
@@ -1380,6 +1377,9 @@ static int xgbe_close(struct net_device *netdev)
|
|
devm_free_irq(pdata->dev, channel->dma_irq, channel);
|
|
devm_free_irq(pdata->dev, channel->dma_irq, channel);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /* Free the channel and ring structures */
|
|
|
|
+ xgbe_free_channels(pdata);
|
|
|
|
+
|
|
/* Disable the clocks */
|
|
/* Disable the clocks */
|
|
clk_disable_unprepare(pdata->ptpclk);
|
|
clk_disable_unprepare(pdata->ptpclk);
|
|
clk_disable_unprepare(pdata->sysclk);
|
|
clk_disable_unprepare(pdata->sysclk);
|
|
@@ -1908,7 +1908,7 @@ read_again:
|
|
skb = xgbe_create_skb(pdata, rdata, &put_len);
|
|
skb = xgbe_create_skb(pdata, rdata, &put_len);
|
|
if (!skb) {
|
|
if (!skb) {
|
|
error = 1;
|
|
error = 1;
|
|
- goto read_again;
|
|
|
|
|
|
+ goto skip_data;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1926,10 +1926,10 @@ read_again:
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+skip_data:
|
|
if (incomplete || context_next)
|
|
if (incomplete || context_next)
|
|
goto read_again;
|
|
goto read_again;
|
|
|
|
|
|
- /* Stray Context Descriptor? */
|
|
|
|
if (!skb)
|
|
if (!skb)
|
|
goto next_packet;
|
|
goto next_packet;
|
|
|
|
|