diff options
-rw-r--r-- | configure.ac | 10 | ||||
-rw-r--r-- | kernel/include/linux/netfilter/ipset/ip_set_compat.h.in | 12 |
2 files changed, 22 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac index e0025df..ced2880 100644 --- a/configure.ac +++ b/configure.ac @@ -333,6 +333,16 @@ else AC_SUBST(HAVE_IPV6_SKIP_EXTHDR_ARGS, 3) fi +AC_MSG_CHECKING([kernel source for cond_resched_rcu]) +if test -f $ksourcedir/include/linux/sched.h && \ + $AWK '/( |\t)cond_resched_rcu\(/,/\)/' $ksourcedir/include/linux/sched.h | $GREP -q 'cond_resched_rcu'; then + AC_MSG_RESULT(yes) + AC_SUBST(HAVE_COND_RESCHED_RCU, define) +else + AC_MSG_RESULT(no) + AC_SUBST(HAVE_COND_RESCHED_RCU, undef) +fi + AC_MSG_CHECKING([kernel source for bool checkentry function prototype]) if test -f $ksourcedir/include/linux/netfilter/x_tables.h && \ $GREP -q 'bool .\*checkentry.' $ksourcedir/include/linux/netfilter/x_tables.h; then diff --git a/kernel/include/linux/netfilter/ipset/ip_set_compat.h.in b/kernel/include/linux/netfilter/ipset/ip_set_compat.h.in index 5f12ad8..f4d7acc 100644 --- a/kernel/include/linux/netfilter/ipset/ip_set_compat.h.in +++ b/kernel/include/linux/netfilter/ipset/ip_set_compat.h.in @@ -50,6 +50,7 @@ #@HAVE_STRSCPY@ HAVE_STRSCPY #@HAVE_SYNCHRONIZE_RCU_BH@ HAVE_SYNCHRONIZE_RCU_BH #@HAVE_LOCKDEP_NFNL_IS_HELD@ HAVE_LOCKDEP_NFNL_IS_HELD +#@HAVE_COND_RESCHED_RCU@ HAVE_COND_RESCHED_RCU #ifdef HAVE_EXPORT_SYMBOL_GPL_IN_MODULE_H #include <linux/module.h> @@ -148,6 +149,17 @@ do { \ #endif #endif +#ifndef HAVE_COND_RESCHED_RCU +static inline void cond_resched_rcu(void) +{ +#if defined(CONFIG_DEBUG_ATOMIC_SLEEP) || !defined(CONFIG_PREEMPT_RCU) + rcu_read_unlock(); + cond_resched(); + rcu_read_lock(); +#endif +} +#endif + #if defined(CONFIG_NETFILTER_NETLINK) || defined(CONFIG_NETFILTER_NETLINK_MODULE) #else #error "NETFILTER_NETLINK must be enabled: select NFACCT/NFQUEUE/LOG over NFNETLINK" |