Merge branch 'next/fixes' of git://git.linaro.org/people/arnd/arm-soc
[pandora-kernel.git] / drivers / net / phy / dp83640.c
index c588a16..9663e0b 100644 (file)
@@ -1007,6 +1007,7 @@ 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;
@@ -1014,6 +1015,12 @@ static void dp83640_remove(struct phy_device *phydev)
        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) {
@@ -1192,7 +1199,7 @@ static void dp83640_txtstamp(struct phy_device *phydev,
 
        case HWTSTAMP_TX_ONESTEP_SYNC:
                if (is_sync(skb, type)) {
-                       kfree_skb(skb);
+                       skb_complete_tx_timestamp(skb, NULL);
                        return;
                }
                /* fall through */
@@ -1203,7 +1210,7 @@ static void dp83640_txtstamp(struct phy_device *phydev,
 
        case HWTSTAMP_TX_OFF:
        default:
-               kfree_skb(skb);
+               skb_complete_tx_timestamp(skb, NULL);
                break;
        }
 }