extcon: Add an API to get extcon device from dt node
[firefly-linux-kernel-4.4.55.git] / net / ipv4 / af_inet.c
index d01be2a3ae53170c1075a57a32f2b11e1e75885b..b4d0be2b7ce94ada2582bd6faf0d1dd29a8920f4 100644 (file)
@@ -1295,6 +1295,7 @@ static struct sk_buff *inet_gso_segment(struct sk_buff *skb,
                       SKB_GSO_GRE |
                       SKB_GSO_TCPV6 |
                       SKB_GSO_UDP_TUNNEL |
+                      SKB_GSO_MPLS |
                       0)))
                goto out;
 
@@ -1384,7 +1385,7 @@ static struct sk_buff **inet_gro_receive(struct sk_buff **head,
                goto out_unlock;
 
        id = ntohl(*(__be32 *)&iph->id);
-       flush = (u16)((ntohl(*(__be32 *)iph) ^ skb_gro_len(skb)) | (id IP_DF));
+       flush = (u16)((ntohl(*(__be32 *)iph) ^ skb_gro_len(skb)) | (id & ~IP_DF));
        id >>= 16;
 
        for (p = *head; p; p = p->next) {
@@ -1406,6 +1407,7 @@ static struct sk_buff **inet_gro_receive(struct sk_buff **head,
                NAPI_GRO_CB(p)->flush |=
                        (iph->ttl ^ iph2->ttl) |
                        (iph->tos ^ iph2->tos) |
+                       (__force int)((iph->frag_off ^ iph2->frag_off) & htons(IP_DF)) |
                        ((u16)(ntohs(iph2->id) + NAPI_GRO_CB(p)->count) ^ id);
 
                NAPI_GRO_CB(p)->flush |= flush;
@@ -1557,15 +1559,6 @@ static const struct net_protocol tcp_protocol = {
        .netns_ok       =       1,
 };
 
-static const struct net_offload tcp_offload = {
-       .callbacks = {
-               .gso_send_check =       tcp_v4_gso_send_check,
-               .gso_segment    =       tcp_tso_segment,
-               .gro_receive    =       tcp4_gro_receive,
-               .gro_complete   =       tcp4_gro_complete,
-       },
-};
-
 static const struct net_protocol udp_protocol = {
        .handler =      udp_rcv,
        .err_handler =  udp_err,
@@ -1573,13 +1566,6 @@ static const struct net_protocol udp_protocol = {
        .netns_ok =     1,
 };
 
-static const struct net_offload udp_offload = {
-       .callbacks = {
-               .gso_send_check = udp4_ufo_send_check,
-               .gso_segment = udp4_ufo_fragment,
-       },
-};
-
 static const struct net_protocol icmp_protocol = {
        .handler =      icmp_rcv,
        .err_handler =  icmp_err,
@@ -1679,10 +1665,10 @@ static int __init ipv4_offload_init(void)
        /*
         * Add offloads
         */
-       if (inet_add_offload(&udp_offload, IPPROTO_UDP) < 0)
+       if (udpv4_offload_init() < 0)
                pr_crit("%s: Cannot add UDP protocol offload\n", __func__);
-       if (inet_add_offload(&tcp_offload, IPPROTO_TCP) < 0)
-               pr_crit("%s: Cannot add TCP protocol offlaod\n", __func__);
+       if (tcpv4_offload_init() < 0)
+               pr_crit("%s: Cannot add TCP protocol offload\n", __func__);
 
        dev_add_offload(&ip_packet_offload);
        return 0;