The logic looks good.  Patchcheck returns some warnings that may be
nice to fix up.
Otherwise,  Acked-by: Andy Zhou <az...@nicira.com>


WARNING: LINUX_VERSION_CODE should be avoided, code should be for the
version to which it is merged
#29: FILE: datapath/linux/compat/include/linux/netdev_features.h:12:
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0)

ERROR: space required after that ',' (ctx:VxV)
#29: FILE: datapath/linux/compat/include/linux/netdev_features.h:12:
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0)
                                          ^

ERROR: space required after that ',' (ctx:VxV)
#29: FILE: datapath/linux/compat/include/linux/netdev_features.h:12:
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0)
                                            ^

ERROR: code indent should use tabs where possible
#104: FILE: datapath/linux/compat/include/net/vxlan.h:13:
+                   struct rtable *rt, struct sk_buff *skb,$

WARNING: please, no spaces at the start of a line
#104: FILE: datapath/linux/compat/include/net/vxlan.h:13:
+                   struct rtable *rt, struct sk_buff *skb,$

ERROR: code indent should use tabs where possible
#105: FILE: datapath/linux/compat/include/net/vxlan.h:14:
+                   __be32 src, __be32 dst, __u8 tos, __u8 ttl, __be16 df,$

WARNING: please, no spaces at the start of a line
#105: FILE: datapath/linux/compat/include/net/vxlan.h:14:
+                   __be32 src, __be32 dst, __u8 tos, __u8 ttl, __be16 df,$

ERROR: code indent should use tabs where possible
#106: FILE: datapath/linux/compat/include/net/vxlan.h:15:
+                   __be16 src_port, __be16 dst_port, __be32 vni)$

WARNING: please, no spaces at the start of a line
#106: FILE: datapath/linux/compat/include/net/vxlan.h:15:
+                   __be16 src_port, __be16 dst_port, __be32 vni)$

WARNING: LINUX_VERSION_CODE should be avoided, code should be for the
version to which it is merged
#156: FILE: datapath/vport-internal_dev.c:168:
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0)

ERROR: space required after that ',' (ctx:VxV)
#156: FILE: datapath/vport-internal_dev.c:168:
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0)
                                           ^

ERROR: space required after that ',' (ctx:VxV)
#156: FILE: datapath/vport-internal_dev.c:168:
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0)
                                             ^

total: 7 errors, 5 warnings, 127 lines checked

NOTE: whitespace errors detected, you may wish to use scripts/cleanpatch or
      scripts/cleanfile

0001-datapath-Enable-tunnel-GSO-features.patch has style problems,
please review.

If any of these errors are false positives, please report
them to the maintainer, see CHECKPATCH in MAINTAINERS.

On Thu, Jul 3, 2014 at 11:38 AM, Pravin B Shelar <pshe...@nicira.com> wrote:
> Following patch enables all available tunnel GSO features for OVS
> bridge device so that ovs can use hardware offloads available to
> underling device.
>
> Signed-off-by: Pravin B Shelar <pshe...@nicira.com>
> ---
> v1-v2:
> This patch checks for kernel version rather than supported
> features.
> ---
>  .../linux/compat/include/linux/netdev_features.h   |   42 
> ++++++++++++++++++++
>  datapath/linux/compat/include/net/gre.h            |   11 +++++
>  datapath/linux/compat/include/net/vxlan.h          |   16 +++++++
>  datapath/vport-geneve.c                            |    5 ++
>  datapath/vport-internal_dev.c                      |    8 +++-
>  datapath/vport-lisp.c                              |    5 ++
>  6 files changed, 86 insertions(+), 1 deletions(-)
>
> diff --git a/datapath/linux/compat/include/linux/netdev_features.h 
> b/datapath/linux/compat/include/linux/netdev_features.h
> index 0259413..9f6331d 100644
> --- a/datapath/linux/compat/include/linux/netdev_features.h
> +++ b/datapath/linux/compat/include/linux/netdev_features.h
> @@ -9,4 +9,46 @@
>  #define NETIF_F_HW_VLAN_CTAG_TX NETIF_F_HW_VLAN_TX
>  #endif
>
> +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0)
> +#define NETIF_F_GSO_ENCAP_ALL   0
> +
> +#else
> +
> +#ifndef NETIF_F_GSO_GRE
> +#define NETIF_F_GSO_GRE 0
> +#endif
> +
> +#ifndef NETIF_F_GSO_GRE_CSUM
> +#define NETIF_F_GSO_GRE_CSUM 0
> +#endif
> +
> +#ifndef NETIF_F_GSO_IPIP
> +#define NETIF_F_GSO_IPIP 0
> +#endif
> +
> +#ifndef NETIF_F_GSO_SIT
> +#define NETIF_F_GSO_SIT 0
> +#endif
> +
> +#ifndef NETIF_F_GSO_UDP_TUNNEL
> +#define NETIF_F_GSO_UDP_TUNNEL 0
> +#endif
> +
> +#ifndef NETIF_F_GSO_UDP_TUNNEL_CSUM
> +#define NETIF_F_GSO_UDP_TUNNEL_CSUM 0
> +#endif
> +
> +#ifndef NETIF_F_GSO_MPLS
> +#define NETIF_F_GSO_MPLS 0
> +#endif
> +
> +#define NETIF_F_GSO_ENCAP_ALL  (NETIF_F_GSO_GRE |                      \
> +                                NETIF_F_GSO_GRE_CSUM |                 \
> +                                NETIF_F_GSO_IPIP |                     \
> +                                NETIF_F_GSO_SIT |                      \
> +                                NETIF_F_GSO_UDP_TUNNEL |               \
> +                                NETIF_F_GSO_UDP_TUNNEL_CSUM |          \
> +                                NETIF_F_GSO_MPLS)
> +#endif
> +
>  #endif
> diff --git a/datapath/linux/compat/include/net/gre.h 
> b/datapath/linux/compat/include/net/gre.h
> index dc03535..3c69e38 100644
> --- a/datapath/linux/compat/include/net/gre.h
> +++ b/datapath/linux/compat/include/net/gre.h
> @@ -103,6 +103,17 @@ static inline int ip_gre_calc_hlen(__be16 o_flags)
>                 addend += 4;
>         return addend;
>  }
> +#else
> +static inline struct sk_buff *rpl_gre_handle_offloads(struct sk_buff *skb,
> +                                                 bool gre_csum)
> +{
> +       if (skb->encapsulation && skb_is_gso(skb)) {
> +               kfree_skb(skb);
> +               return ERR_PTR(-ENOSYS);
> +       }
> +       return gre_handle_offloads(skb, gre_csum);
> +}
> +#define gre_handle_offloads rpl_gre_handle_offloads
>  #endif
>
>  #endif
> diff --git a/datapath/linux/compat/include/net/vxlan.h 
> b/datapath/linux/compat/include/net/vxlan.h
> index 414a497..d64630b 100644
> --- a/datapath/linux/compat/include/net/vxlan.h
> +++ b/datapath/linux/compat/include/net/vxlan.h
> @@ -8,6 +8,22 @@
>  #include <linux/version.h>
>  #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)
>  #include_next <net/vxlan.h>
> +
> +static inline int rpl_vxlan_xmit_skb(struct vxlan_sock *vs,
> +                   struct rtable *rt, struct sk_buff *skb,
> +                   __be32 src, __be32 dst, __u8 tos, __u8 ttl, __be16 df,
> +                   __be16 src_port, __be16 dst_port, __be32 vni)
> +{
> +       if (skb->encapsulation && skb_is_gso(skb)) {
> +               kfree_skb(skb);
> +               return -ENOSYS;
> +       }
> +
> +       return vxlan_xmit_skb(vs, rt, skb, src, dst, tos, ttl, df,
> +                             src_port, dst_port, vni);
> +}
> +
> +#define vxlan_xmit_skb rpl_vxlan_xmit_skb
>  #else
>
>  struct vxlan_sock;
> diff --git a/datapath/vport-geneve.c b/datapath/vport-geneve.c
> index 33047f2..99841d4 100644
> --- a/datapath/vport-geneve.c
> +++ b/datapath/vport-geneve.c
> @@ -333,6 +333,11 @@ static int handle_offloads(struct sk_buff *skb)
>  #else
>  static int handle_offloads(struct sk_buff *skb)
>  {
> +       if (skb->encapsulation && skb_is_gso(skb)) {
> +               kfree_skb(skb);
> +               return -ENOSYS;
> +       }
> +
>         if (skb_is_gso(skb)) {
>                 int err = skb_unclone(skb, GFP_ATOMIC);
>                 if (unlikely(err))
> diff --git a/datapath/vport-internal_dev.c b/datapath/vport-internal_dev.c
> index 637d712..3b0f9a7 100644
> --- a/datapath/vport-internal_dev.c
> +++ b/datapath/vport-internal_dev.c
> @@ -155,7 +155,8 @@ static void do_setup(struct net_device *netdev)
>         netdev->tx_queue_len = 0;
>
>         netdev->features = NETIF_F_LLTX | NETIF_F_SG | NETIF_F_FRAGLIST |
> -                          NETIF_F_HIGHDMA | NETIF_F_HW_CSUM | 
> NETIF_F_GSO_SOFTWARE;
> +                          NETIF_F_HIGHDMA | NETIF_F_HW_CSUM |
> +                          NETIF_F_GSO_SOFTWARE | NETIF_F_GSO_ENCAP_ALL;
>
>         netdev->vlan_features = netdev->features;
>         netdev->features |= NETIF_F_HW_VLAN_CTAG_TX;
> @@ -163,6 +164,11 @@ static void do_setup(struct net_device *netdev)
>  #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39)
>         netdev->hw_features = netdev->features & ~NETIF_F_LLTX;
>  #endif
> +
> +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0)
> +       netdev->hw_enc_features = netdev->features;
> +#endif
> +
>         eth_hw_addr_random(netdev);
>  }
>
> diff --git a/datapath/vport-lisp.c b/datapath/vport-lisp.c
> index c41e09e..81ecf92 100644
> --- a/datapath/vport-lisp.c
> +++ b/datapath/vport-lisp.c
> @@ -409,6 +409,11 @@ static int handle_offloads(struct sk_buff *skb)
>  #else
>  static int handle_offloads(struct sk_buff *skb)
>  {
> +       if (skb->encapsulation && skb_is_gso(skb)) {
> +               kfree_skb(skb);
> +               return -ENOSYS;
> +       }
> +
>         if (skb_is_gso(skb)) {
>                 int err = skb_unclone(skb, GFP_ATOMIC);
>                 if (unlikely(err))
> --
> 1.7.1
>
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to