|
@@ -1007,6 +1007,7 @@ static void dp83640_remove(struct phy_device *phydev)
|
|
struct dp83640_clock *clock;
|
|
struct dp83640_clock *clock;
|
|
struct list_head *this, *next;
|
|
struct list_head *this, *next;
|
|
struct dp83640_private *tmp, *dp83640 = phydev->priv;
|
|
struct dp83640_private *tmp, *dp83640 = phydev->priv;
|
|
|
|
+ struct sk_buff *skb;
|
|
|
|
|
|
if (phydev->addr == BROADCAST_ADDR)
|
|
if (phydev->addr == BROADCAST_ADDR)
|
|
return;
|
|
return;
|
|
@@ -1014,6 +1015,12 @@ static void dp83640_remove(struct phy_device *phydev)
|
|
enable_status_frames(phydev, false);
|
|
enable_status_frames(phydev, false);
|
|
cancel_work_sync(&dp83640->ts_work);
|
|
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);
|
|
clock = dp83640_clock_get(dp83640->clock);
|
|
|
|
|
|
if (dp83640 == clock->chosen) {
|
|
if (dp83640 == clock->chosen) {
|