[ovs-dev] [PATCH v3] porting: Add fixes to support kernel 4.15.x
Gregory Rose
gvrose8192 at gmail.com
Thu Aug 16 23:14:27 UTC 2018
On 8/16/2018 9:52 AM, Yifeng Sun wrote:
> This patch enables OVS kernel module to run on kernel 4.15.x.
> Two conntrack-related tests failed:
> - conntrack - multiple zones, local
> - conntrack - multi-stage pipeline, local
> This might be due to conntrack policy changes for packets coming
> from local ports on kernel 4.15. More survey will be done later.
>
> Signed-off-by: Greg Rose <gvrose8192 at gmail.com>
> Signed-off-by: Yifeng Sun <pkusunyifeng at gmail.com>
> Co-authored-by: Greg Rose <gvrose8192 at gmail.com>
> Co-authored-by: Yifeng Sun <pkusunyifeng at gmail.com>
You can also go ahead and add my tested by and reviewed by tags.
Thanks!
- Greg
> ---
> v1->v2: Add travis and documentation from Greg.
> v2->v3: Fix co-authored-by, thanks Ben.
>
> .travis.yml | 10 +++++-----
> Documentation/faq/releases.rst | 2 +-
> acinclude.m4 | 6 ++++--
> datapath/linux/compat/vxlan.c | 10 ++++++++++
> 4 files changed, 20 insertions(+), 8 deletions(-)
>
> diff --git a/.travis.yml b/.travis.yml
> index 4d7bbd8..998b33d 100644
> --- a/.travis.yml
> +++ b/.travis.yml
> @@ -35,11 +35,11 @@ env:
> - BUILD_ENV="-m32" OPTS="--disable-ssl"
> - KERNEL=3.16.54 DPDK=1
> - KERNEL=3.16.54 DPDK=1 OPTS="--enable-shared"
> - - KERNEL=4.14.47
> - - KERNEL=4.9.105
> - - KERNEL=4.4.135
> - - KERNEL=4.1.52
> - - KERNEL=3.16.56
> + - KERNEL=4.15.18
> + - KERNEL=4.14.63
> + - KERNEL=4.9.120
> + - KERNEL=4.4.148
> + - KERNEL=3.16.57
> - TESTSUITE=1 LIBS=-ljemalloc
>
> matrix:
> diff --git a/Documentation/faq/releases.rst b/Documentation/faq/releases.rst
> index 50ca5f6..54c4b54 100644
> --- a/Documentation/faq/releases.rst
> +++ b/Documentation/faq/releases.rst
> @@ -67,7 +67,7 @@ Q: What Linux kernel versions does each Open vSwitch release work with?
> 2.7.x 3.10 to 4.9
> 2.8.x 3.10 to 4.12
> 2.9.x 3.10 to 4.13
> - 2.10.x 3.10 to 4.14
> + 2.10.x 3.10 to 4.15
> ============ ==============
>
> Open vSwitch userspace should also work with the Linux kernel module built
> diff --git a/acinclude.m4 b/acinclude.m4
> index 6e7ea4c..9fffe9c 100644
> --- a/acinclude.m4
> +++ b/acinclude.m4
> @@ -151,10 +151,10 @@ AC_DEFUN([OVS_CHECK_LINUX], [
> AC_MSG_RESULT([$kversion])
>
> if test "$version" -ge 4; then
> - if test "$version" = 4 && test "$patchlevel" -le 14; then
> + if test "$version" = 4 && test "$patchlevel" -le 15; then
> : # Linux 4.x
> else
> - AC_ERROR([Linux kernel in $KBUILD is version $kversion, but version newer than 4.14.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.15.x is not supported (please refer to the FAQ for advice)])
> fi
> elif test "$version" = 3 && test "$patchlevel" -ge 10; then
> : # Linux 3.x
> @@ -883,6 +883,8 @@ AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [
> OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h],
> [void.*ndo_get_stats64],
> [OVS_DEFINE([HAVE_VOID_NDO_GET_STATS64])])
> + OVS_GREP_IFELSE([$KSRC/include/linux/timer.h], [init_timer_deferrable],
> + [OVS_DEFINE([HAVE_INIT_TIMER_DEFERRABLE])])
>
> if cmp -s datapath/linux/kcompat.h.new \
> datapath/linux/kcompat.h >/dev/null 2>&1; then
> diff --git a/datapath/linux/compat/vxlan.c b/datapath/linux/compat/vxlan.c
> index 8f5a921..b38a7be 100644
> --- a/datapath/linux/compat/vxlan.c
> +++ b/datapath/linux/compat/vxlan.c
> @@ -1275,9 +1275,15 @@ netdev_tx_t rpl_vxlan_xmit(struct sk_buff *skb)
> EXPORT_SYMBOL_GPL(rpl_vxlan_xmit);
>
> /* Walk the forwarding table and purge stale entries */
> +#ifdef HAVE_INIT_TIMER_DEFERRABLE
> static void vxlan_cleanup(unsigned long arg)
> {
> struct vxlan_dev *vxlan = (struct vxlan_dev *) arg;
> +#else
> +static void vxlan_cleanup(struct timer_list *t)
> +{
> + struct vxlan_dev *vxlan = from_timer(vxlan, t, age_timer);
> +#endif
> unsigned long next_timer = jiffies + FDB_AGE_INTERVAL;
> unsigned int h;
>
> @@ -1638,9 +1644,13 @@ static void vxlan_setup(struct net_device *dev)
> INIT_LIST_HEAD(&vxlan->next);
> spin_lock_init(&vxlan->hash_lock);
>
> +#ifdef HAVE_INIT_TIMER_DEFERRABLE
> init_timer_deferrable(&vxlan->age_timer);
> vxlan->age_timer.function = vxlan_cleanup;
> vxlan->age_timer.data = (unsigned long) vxlan;
> +#else
> + timer_setup(&vxlan->age_timer, vxlan_cleanup, TIMER_DEFERRABLE);
> +#endif
>
> vxlan->cfg.dst_port = htons(vxlan_port);
>
More information about the dev
mailing list