[aqc1xx] Free outstanding receive I/O buffers on close atl_close() freed the descriptor rings but left the posted receive I/O buffers allocated, leaking them and tripping an assertion on the next open. Free any outstanding receive I/O buffers in atl_close(). Signed-off-by: Animesh Bhatt <animeshb@marvell.com>
diff --git a/src/drivers/net/marvell/aqc1xx.c b/src/drivers/net/marvell/aqc1xx.c index 59445ba..0ee574f 100644 --- a/src/drivers/net/marvell/aqc1xx.c +++ b/src/drivers/net/marvell/aqc1xx.c
@@ -262,6 +262,7 @@ */ static void atl_close ( struct net_device *netdev ) { struct atl_nic *nic = netdev->priv; + unsigned int i; nic->hw_ops->stop ( nic ); /* rpb global ctrl */ @@ -282,6 +283,13 @@ atl_ring_free ( &nic->tx_ring ); atl_ring_free ( &nic->rx_ring ); + + /* Discard any outstanding receive I/O buffers */ + for ( i = 0 ; i < ATL_RING_SIZE ; i++ ) { + if ( nic->iobufs[i] ) + free_rx_iob ( nic->iobufs[i] ); + nic->iobufs[i] = NULL; + } } /**