Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux...
[firefly-linux-kernel-4.4.55.git] / net / core / timestamping.c
index 661b5a40ec1029016a4a2e70579c690c40110512..6521dfd8b7c8563aa5cc7ccea8e5d6da05a7a586 100644 (file)
 #include <linux/skbuff.h>
 #include <linux/export.h>
 
-static struct sock_filter ptp_filter[] = {
-       PTP_FILTER
-};
-
 static unsigned int classify(const struct sk_buff *skb)
 {
-       if (likely(skb->dev &&
-                  skb->dev->phydev &&
+       if (likely(skb->dev && skb->dev->phydev &&
                   skb->dev->phydev->drv))
-               return sk_run_filter(skb, ptp_filter);
+               return ptp_classify_raw(skb);
        else
                return PTP_CLASS_NONE;
 }
@@ -60,11 +55,13 @@ void skb_clone_tx_timestamp(struct sk_buff *skb)
                if (likely(phydev->drv->txtstamp)) {
                        if (!atomic_inc_not_zero(&sk->sk_refcnt))
                                return;
+
                        clone = skb_clone(skb, GFP_ATOMIC);
                        if (!clone) {
                                sock_put(sk);
                                return;
                        }
+
                        clone->sk = sk;
                        phydev->drv->txtstamp(phydev, clone, type);
                }
@@ -89,12 +86,15 @@ void skb_complete_tx_timestamp(struct sk_buff *skb,
        }
 
        *skb_hwtstamps(skb) = *hwtstamps;
+
        serr = SKB_EXT_ERR(skb);
        memset(serr, 0, sizeof(*serr));
        serr->ee.ee_errno = ENOMSG;
        serr->ee.ee_origin = SO_EE_ORIGIN_TIMESTAMPING;
        skb->sk = NULL;
+
        err = sock_queue_err_skb(sk, skb);
+
        sock_put(sk);
        if (err)
                kfree_skb(skb);
@@ -132,8 +132,3 @@ bool skb_defer_rx_timestamp(struct sk_buff *skb)
        return false;
 }
 EXPORT_SYMBOL_GPL(skb_defer_rx_timestamp);
-
-void __init skb_timestamping_init(void)
-{
-       BUG_ON(sk_chk_filter(ptp_filter, ARRAY_SIZE(ptp_filter)));
-}