Skip to content

Commit

Permalink
dp83640: free packet queues on remove
Browse files Browse the repository at this point in the history
If the PHY should disappear (for example, on an USB Ethernet MAC), then
the driver would leak any undelivered time stamp packets. This commit
fixes the issue by calling the appropriate functions to free any packets
left in the transmit and receive queues.

The driver first appeared in v3.0.

Signed-off-by: Richard Cochran <richard.cochran@omicron.at>
Acked-by: Eric Dumazet <eric.dumazet@gmail.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Richard Cochran authored and David S. Miller committed Oct 24, 2011
1 parent f5ff7cd commit 8b3408f
Showing 1 changed file with 7 additions and 0 deletions.
7 changes: 7 additions & 0 deletions drivers/net/phy/dp83640.c
Original file line number Diff line number Diff line change
Expand Up @@ -1007,13 +1007,20 @@ static void dp83640_remove(struct phy_device *phydev)
struct dp83640_clock *clock;
struct list_head *this, *next;
struct dp83640_private *tmp, *dp83640 = phydev->priv;
struct sk_buff *skb;

if (phydev->addr == BROADCAST_ADDR)
return;

enable_status_frames(phydev, false);
cancel_work_sync(&dp83640->ts_work);

while ((skb = skb_dequeue(&dp83640->rx_queue)) != NULL)
kfree_skb(skb);

while ((skb = skb_dequeue(&dp83640->tx_queue)) != NULL)
skb_complete_tx_timestamp(skb, NULL);

clock = dp83640_clock_get(dp83640->clock);

if (dp83640 == clock->chosen) {
Expand Down

0 comments on commit 8b3408f

Please sign in to comment.