Skip to content

Commit

Permalink
porting: Add fixes to support kernel 4.15.x
Browse files Browse the repository at this point in the history
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@gmail.com>
Signed-off-by: Yifeng Sun <pkusunyifeng@gmail.com>
Co-authored-by: Greg Rose <gvrose8192@gmail.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
Tested-by: Gregory Rose <gvrose8192@gmail.com>
Reviewed-by: Gregory Rose <gvrose8192@gmail.com>
  • Loading branch information
2 people authored and blp committed Aug 17, 2018
1 parent ad2ad69 commit fdcdc5e
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 8 deletions.
10 changes: 5 additions & 5 deletions .travis.yml
Expand Up @@ -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:
Expand Down
2 changes: 1 addition & 1 deletion Documentation/faq/releases.rst
Expand Up @@ -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
Expand Down
6 changes: 4 additions & 2 deletions acinclude.m4
Expand Up @@ -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
Expand Down Expand Up @@ -882,6 +882,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
Expand Down
10 changes: 10 additions & 0 deletions datapath/linux/compat/vxlan.c
Expand Up @@ -1245,9 +1245,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;

Expand Down Expand Up @@ -1582,9 +1588,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);

Expand Down

0 comments on commit fdcdc5e

Please sign in to comment.