diff mbox

[ovs-dev,6/8] datapath: Add support for kernel 4.5

Message ID 1468808649-24552-7-git-send-email-pshelar@ovn.org
State Accepted
Headers show

Commit Message

Pravin Shelar July 18, 2016, 2:24 a.m. UTC
Signed-off-by: Pravin B Shelar <pshelar@ovn.org>
---
 acinclude.m4                                    |  8 ++++++--
 datapath/linux/compat/include/linux/netdevice.h | 17 +++++++++++++++--
 datapath/vport-netdev.c                         |  2 +-
 3 files changed, 22 insertions(+), 5 deletions(-)

Comments

Jesse Gross July 18, 2016, 6:32 p.m. UTC | #1
On Mon, Jul 18, 2016 at 4:24 AM, Pravin B Shelar <pshelar@ovn.org> wrote:
> Signed-off-by: Pravin B Shelar <pshelar@ovn.org>
> ---
>  acinclude.m4                                    |  8 ++++++--
>  datapath/linux/compat/include/linux/netdevice.h | 17 +++++++++++++++--
>  datapath/vport-netdev.c                         |  2 +-
>  3 files changed, 22 insertions(+), 5 deletions(-)
>
> diff --git a/acinclude.m4 b/acinclude.m4
> index 6b608ef..6b8d30f 100644
> --- a/acinclude.m4
> +++ b/acinclude.m4
> @@ -134,10 +134,10 @@ AC_DEFUN([OVS_CHECK_LINUX], [
>      AC_MSG_RESULT([$kversion])
>
>      if test "$version" -ge 4; then
> -       if test "$version" = 4 && test "$patchlevel" -le 4; then
> +       if test "$version" = 4 && test "$patchlevel" -le 5; then
>            : # Linux 4.x
>         else
> -          AC_ERROR([Linux kernel in $KBUILD is version $kversion, but version newer than 4.4.x is not supported (please refer to the FAQ for advice)])
> +          AC_ERROR([Linux kernel in $KBUILD is version $kversion, but version newer than 4.5.x is not supported (please refer to the FAQ for advice)])
>         fi
>      elif test "$version" = 3 && test "$patchlevel" -ge 10; then
>         : # Linux 3.x
> @@ -475,6 +475,10 @@ AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [
>                    [OVS_DEFINE([HAVE_UDP_OFFLOAD_ARG_UOFF])])
>    OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h], [gro_remcsum])
>    OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h], [IFF_PHONY_HEADROOM])
> +  OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h], [netdev_master_upper_dev_link])
> +  OVS_FIND_PARAM_IFELSE([$KSRC/include/linux/netdevice.h],
> +                        [netdev_master_upper_dev_link], [upper_priv],
> +                        [OVS_DEFINE([HAVE_NETDEV_MASTER_UPPER_DEV_LINK_PRIV])])

I think you don't need to first check that the function exists - it
should be safe to just directly use OVS_FIND_PARAM_IFELSE and if the
function isn't defined at all then it still won't define the symbol.

Acked-by: Jesse Gross <jesse@kernel.org>
diff mbox

Patch

diff --git a/acinclude.m4 b/acinclude.m4
index 6b608ef..6b8d30f 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -134,10 +134,10 @@  AC_DEFUN([OVS_CHECK_LINUX], [
     AC_MSG_RESULT([$kversion])
 
     if test "$version" -ge 4; then
-       if test "$version" = 4 && test "$patchlevel" -le 4; then
+       if test "$version" = 4 && test "$patchlevel" -le 5; then
           : # Linux 4.x
        else
-          AC_ERROR([Linux kernel in $KBUILD is version $kversion, but version newer than 4.4.x is not supported (please refer to the FAQ for advice)])
+          AC_ERROR([Linux kernel in $KBUILD is version $kversion, but version newer than 4.5.x is not supported (please refer to the FAQ for advice)])
        fi
     elif test "$version" = 3 && test "$patchlevel" -ge 10; then
        : # Linux 3.x
@@ -475,6 +475,10 @@  AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [
                   [OVS_DEFINE([HAVE_UDP_OFFLOAD_ARG_UOFF])])
   OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h], [gro_remcsum])
   OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h], [IFF_PHONY_HEADROOM])
+  OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h], [netdev_master_upper_dev_link])
+  OVS_FIND_PARAM_IFELSE([$KSRC/include/linux/netdevice.h],
+                        [netdev_master_upper_dev_link], [upper_priv],
+                        [OVS_DEFINE([HAVE_NETDEV_MASTER_UPPER_DEV_LINK_PRIV])])
 
   OVS_GREP_IFELSE([$KSRC/include/linux/netfilter.h], [nf_hook_state])
   OVS_GREP_IFELSE([$KSRC/include/linux/netfilter.h], [nf_register_net_hook])
diff --git a/datapath/linux/compat/include/linux/netdevice.h b/datapath/linux/compat/include/linux/netdevice.h
index 00eaa21..6b9ab1f 100644
--- a/datapath/linux/compat/include/linux/netdevice.h
+++ b/datapath/linux/compat/include/linux/netdevice.h
@@ -105,7 +105,9 @@  static inline bool netif_needs_gso(struct sk_buff *skb,
 }
 #endif
 
-#if LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0)
+#ifndef HAVE_NETDEV_MASTER_UPPER_DEV_LINK_PRIV
+
+#ifndef HAVE_NETDEV_MASTER_UPPER_DEV_LINK
 
 /* XEN dom0 networking assumes dev->master is bond device
  * and it tries to access bond private structure from dev->master
@@ -113,7 +115,8 @@  static inline bool netif_needs_gso(struct sk_buff *skb,
  * not to backport this API.
  **/
 static inline int netdev_master_upper_dev_link(struct net_device *dev,
-					       struct net_device *upper_dev)
+					       struct net_device *upper_dev,
+					       void *upper_priv, void *upper_info)
 {
 	return 0;
 }
@@ -127,6 +130,16 @@  static inline struct net_device *netdev_master_upper_dev_get(struct net_device *
 {
 	return NULL;
 }
+#else
+static inline int rpl_netdev_master_upper_dev_link(struct net_device *dev,
+					       struct net_device *upper_dev,
+					       void *upper_priv, void *upper_info)
+{
+	return netdev_master_upper_dev_link(dev, upper_dev);
+}
+#define netdev_master_upper_dev_link rpl_netdev_master_upper_dev_link
+
+#endif
 #endif
 
 #if LINUX_VERSION_CODE < KERNEL_VERSION(3,16,0)
diff --git a/datapath/vport-netdev.c b/datapath/vport-netdev.c
index 905b125..970f7d3 100644
--- a/datapath/vport-netdev.c
+++ b/datapath/vport-netdev.c
@@ -110,7 +110,7 @@  struct vport *ovs_netdev_link(struct vport *vport, const char *name)
 
 	rtnl_lock();
 	err = netdev_master_upper_dev_link(vport->dev,
-					   get_dpdev(vport->dp));
+					   get_dpdev(vport->dp), NULL, NULL);
 	if (err)
 		goto error_unlock;