Git-Url: http://git.frugalware.org/gitweb/gitweb.cgi?p=kernelbump.git;a=commitdiff;h=cf1a9e1eff9e6c1a0054193c81eadbec079e0577
commit cf1a9e1eff9e6c1a0054193c81eadbec079e0577 Author: DeX77 <[email protected]> Date: Tue Jan 30 10:40:31 2018 +0100 spl-0.7.5-11-x86_64 * fix build with kernel 4.15 diff --git a/source/base-extra/spl/FrugalBuild b/source/base-extra/spl/FrugalBuild index 4447ce7..4ac938a 100644 --- a/source/base-extra/spl/FrugalBuild +++ b/source/base-extra/spl/FrugalBuild @@ -10,10 +10,13 @@ depends=('glibc') groups=('base-extra') archs=('x86_64') up2date="Flasttar $url" -source=(https://github.com/zfsonlinux/$pkgname/archive/$pkgname-$pkgver$pkgextraver.tar.gz) -sha1sums=('0af4c4e7bf7bab70dd82ac3b4fbb116011170c51') +source=(https://github.com/zfsonlinux/$pkgname/archive/$pkgname-$pkgver$pkgextraver.tar.gz \ + kernel-4.15-compat.patch) +sha1sums=('0af4c4e7bf7bab70dd82ac3b4fbb116011170c51' \ + '7df94d698e5316e3f770a69c82f3f799171ead11') _F_cd_path="$pkgname-$pkgname-$pkgver$pkgextraver" Fconfopts=" --with-config=all" +_Fbuild_autoreconf=y Finclude kernel-module subpkgs=("$pkgname-source") diff --git a/source/base-extra/spl/kernel-4.15-compat.patch b/source/base-extra/spl/kernel-4.15-compat.patch new file mode 100644 index 0000000..8663a4e --- /dev/null +++ b/source/base-extra/spl/kernel-4.15-compat.patch @@ -0,0 +1,135 @@ +From c9821f1ccc647dfbd506f381b736c664d862d126 Mon Sep 17 00:00:00 2001 +From: Tony Hutter <[email protected]> +Date: Thu, 21 Dec 2017 10:56:32 -0800 +Subject: [PATCH] Linux 4.15 compat: timer updates + +Use timer_setup() macro and new timeout function definition. + +Reviewed-by: Brian Behlendorf <[email protected]> +Signed-off-by: Tony Hutter <[email protected]> +Closes #670 +Closes #671 +--- + config/spl-build.m4 | 34 ++++++++++++++++++++++++++++++++++ + module/spl/spl-taskq.c | 27 +++++++++++++++++++++++++-- + 2 files changed, 59 insertions(+), 2 deletions(-) + +diff --git a/config/spl-build.m4 b/config/spl-build.m4 +index 7b66f2c8..926abd5c 100644 +--- a/config/spl-build.m4 ++++ b/config/spl-build.m4 +@@ -54,6 +54,7 @@ AC_DEFUN([SPL_AC_CONFIG_KERNEL], [ + SPL_AC_WAIT_QUEUE_HEAD_ENTRY + SPL_AC_KERNEL_WRITE + SPL_AC_KERNEL_READ ++ SPL_AC_KERNEL_TIMER_FUNCTION_TIMER_LIST + ]) + + AC_DEFUN([SPL_AC_MODULE_SYMVERS], [ +@@ -1654,3 +1655,36 @@ AC_DEFUN([SPL_AC_KERNEL_READ], [ + ]) + EXTRA_KCFLAGS="$tmp_flags" + ]) ++ ++dnl # ++dnl # 4.15 API change ++dnl # https://lkml.org/lkml/2017/11/25/90 ++dnl # Check if timer_list.func get passed a timer_list or an unsigned long ++dnl # (older kernels). Also sanity check the from_timer() and timer_setup() ++dnl # macros are available as well, since they will be used in the same newer ++dnl # kernels that support the new timer_list.func signature. ++dnl # ++AC_DEFUN([SPL_AC_KERNEL_TIMER_FUNCTION_TIMER_LIST], [ ++ AC_MSG_CHECKING([whether timer_list.function gets a timer_list]) ++ tmp_flags="$EXTRA_KCFLAGS" ++ EXTRA_KCFLAGS="-Werror" ++ SPL_LINUX_TRY_COMPILE([ ++ #include <linux/timer.h> ++ void task_expire(struct timer_list *tl) {} ++ ],[ ++ #ifndef from_timer ++ #error "No from_timer() macro" ++ #endif ++ ++ struct timer_list timer; ++ timer.function = task_expire; ++ timer_setup(&timer, NULL, 0); ++ ],[ ++ AC_MSG_RESULT(yes) ++ AC_DEFINE(HAVE_KERNEL_TIMER_FUNCTION_TIMER_LIST, 1, ++ [timer_list.function gets a timer_list]) ++ ],[ ++ AC_MSG_RESULT(no) ++ ]) ++ EXTRA_KCFLAGS="$tmp_flags" ++]) +diff --git a/module/spl/spl-taskq.c b/module/spl/spl-taskq.c +index 50f6f520..ae26bdb2 100644 +--- a/module/spl/spl-taskq.c ++++ b/module/spl/spl-taskq.c +@@ -206,9 +206,9 @@ task_done(taskq_t *tq, taskq_ent_t *t) + * add it to the priority list in order for immediate processing. + */ + static void +-task_expire(unsigned long data) ++task_expire_impl(taskq_ent_t *t) + { +- taskq_ent_t *w, *t = (taskq_ent_t *)data; ++ taskq_ent_t *w; + taskq_t *tq = t->tqent_taskq; + struct list_head *l; + unsigned long flags; +@@ -242,6 +242,21 @@ task_expire(unsigned long data) + wake_up(&tq->tq_work_waitq); + } + ++#ifdef HAVE_KERNEL_TIMER_FUNCTION_TIMER_LIST ++static void ++task_expire(struct timer_list *tl) ++{ ++ taskq_ent_t *t = from_timer(t, tl, tqent_timer); ++ task_expire_impl(t); ++} ++#else ++static void ++task_expire(unsigned long data) ++{ ++ task_expire_impl((taskq_ent_t *)data); ++} ++#endif ++ + /* + * Returns the lowest incomplete taskqid_t. The taskqid_t may + * be queued on the pending list, on the priority list, on the +@@ -581,7 +596,9 @@ taskq_dispatch(taskq_t *tq, task_func_t func, void *arg, uint_t flags) + t->tqent_func = func; + t->tqent_arg = arg; + t->tqent_taskq = tq; ++#ifndef HAVE_KERNEL_TIMER_FUNCTION_TIMER_LIST + t->tqent_timer.data = 0; ++#endif + t->tqent_timer.function = NULL; + t->tqent_timer.expires = 0; + t->tqent_birth = jiffies; +@@ -631,7 +648,9 @@ taskq_dispatch_delay(taskq_t *tq, task_func_t func, void *arg, + t->tqent_func = func; + t->tqent_arg = arg; + t->tqent_taskq = tq; ++#ifndef HAVE_KERNEL_TIMER_FUNCTION_TIMER_LIST + t->tqent_timer.data = (unsigned long)t; ++#endif + t->tqent_timer.function = task_expire; + t->tqent_timer.expires = (unsigned long)expire_time; + add_timer(&t->tqent_timer); +@@ -723,7 +742,11 @@ taskq_init_ent(taskq_ent_t *t) + { + spin_lock_init(&t->tqent_lock); + init_waitqueue_head(&t->tqent_waitq); ++#ifdef HAVE_KERNEL_TIMER_FUNCTION_TIMER_LIST ++ timer_setup(&t->tqent_timer, NULL, 0); ++#else + init_timer(&t->tqent_timer); ++#endif + INIT_LIST_HEAD(&t->tqent_list); + t->tqent_id = 0; + t->tqent_func = NULL; _______________________________________________ Frugalware-git mailing list [email protected] http://frugalware.org/mailman/listinfo/frugalware-git
