amd-xgbe: Free channel/ring structures later

The channel structure is freed before freeing the per channel
interrupts resulting in a kernel oops. Move the call to free
the channel structure to after the freeing of the per channel
interrupts.

Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Lendacky, Thomas 2014-11-06 17:02:13 -06:00 committed by David S. Miller
parent 6b798d70d0
commit e98c72c942
1 changed files with 3 additions and 3 deletions

View File

@ -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);