diff --git a/onic_netdev.c b/onic_netdev.c index a39a5ab..e477cf5 100644 --- a/onic_netdev.c +++ b/onic_netdev.c @@ -412,8 +412,8 @@ static void onic_clear_rx_queue(struct onic_private *priv, u16 qid) { struct onic_rx_queue *q = priv->rx_queue[qid]; struct onic_ring *ring; - u32 size; - int real_count; + u32 size, real_count; + int i; if (!q) return; @@ -441,6 +441,11 @@ static void onic_clear_rx_queue(struct onic_private *priv, u16 qid) dma_free_coherent(&priv->pdev->dev, size, ring->desc, ring->dma_addr); + for (i = 0; i < real_count; ++i) { + struct page *pg = q->buffer[i].pg; + __free_pages(pg, 0); + } + kfree(q->buffer); kfree(q); priv->rx_queue[qid] = NULL;