From 68ade8303ff94cc10586298997a0474b513ddc61 Mon Sep 17 00:00:00 2001 From: Jozsef Kadlecsik Date: Thu, 27 Nov 2014 17:54:52 +0100 Subject: Remove unnecessary integer RCU handling and fix sparse warnings --- kernel/include/linux/netfilter/ipset/ip_set.h | 77 ++++++---------------- .../linux/netfilter/ipset/ip_set_compat.h.in | 14 +++- .../include/linux/netfilter/ipset/ip_set_timeout.h | 32 +++------ 3 files changed, 41 insertions(+), 82 deletions(-) (limited to 'kernel/include') diff --git a/kernel/include/linux/netfilter/ipset/ip_set.h b/kernel/include/linux/netfilter/ipset/ip_set.h index e640c62..08dd689 100644 --- a/kernel/include/linux/netfilter/ipset/ip_set.h +++ b/kernel/include/linux/netfilter/ipset/ip_set.h @@ -114,10 +114,10 @@ struct ip_set_comment { }; struct ip_set_skbinfo { - u32 __rcu skbmark; - u32 __rcu skbmarkmask; - u32 __rcu skbprio; - u16 __rcu skbqueue; + u32 skbmark; + u32 skbmarkmask; + u32 skbprio; + u16 skbqueue; }; struct ip_set; @@ -326,38 +326,6 @@ ip_set_update_counter(struct ip_set_counter *counter, } } -/* RCU-safe assign value */ -#define IP_SET_RCU_ASSIGN(ptr, value) \ -do { \ - /* Safe assign numeric types */ \ - smp_wmb(); \ - *(ptr) = value; \ -} while (0) - -static inline void -ip_set_rcu_assign_ulong(unsigned long *v, unsigned long value) -{ - IP_SET_RCU_ASSIGN(v, value); -} - -static inline void -ip_set_rcu_assign_u32(u32 *v, u32 value) -{ - IP_SET_RCU_ASSIGN(v, value); -} - -static inline void -ip_set_rcu_assign_u16(u16 *v, u16 value) -{ - IP_SET_RCU_ASSIGN(v, value); -} - -static inline void -ip_set_rcu_assign_u8(u8 *v, u8 value) -{ - IP_SET_RCU_ASSIGN(v, value); -} - #define ip_set_rcu_deref(t) \ rcu_dereference_index_check(t, \ rcu_read_lock_held() || rcu_read_lock_bh_held()) @@ -367,32 +335,25 @@ ip_set_get_skbinfo(struct ip_set_skbinfo *skbinfo, const struct ip_set_ext *ext, struct ip_set_ext *mext, u32 flags) { - mext->skbmark = ip_set_rcu_deref(skbinfo->skbmark); - mext->skbmarkmask = ip_set_rcu_deref(skbinfo->skbmarkmask); - mext->skbprio = ip_set_rcu_deref(skbinfo->skbprio); - mext->skbqueue = ip_set_rcu_deref(skbinfo->skbqueue); + mext->skbmark = skbinfo->skbmark; + mext->skbmarkmask = skbinfo->skbmarkmask; + mext->skbprio = skbinfo->skbprio; + mext->skbqueue = skbinfo->skbqueue; } static inline bool ip_set_put_skbinfo(struct sk_buff *skb, struct ip_set_skbinfo *skbinfo) { - u32 skbmark, skbmarkmask, skbprio; - u16 skbqueue; - - skbmark = ip_set_rcu_deref(skbinfo->skbmark); - skbmarkmask = ip_set_rcu_deref(skbinfo->skbmarkmask); - skbprio = ip_set_rcu_deref(skbinfo->skbprio); - skbqueue = ip_set_rcu_deref(skbinfo->skbqueue); /* Send nonzero parameters only */ - return ((skbmark || skbmarkmask) && + return ((skbinfo->skbmark || skbinfo->skbmarkmask) && nla_put_net64(skb, IPSET_ATTR_SKBMARK, - cpu_to_be64((u64)skbmark << 32 | - skbmarkmask))) || - (skbprio && + cpu_to_be64((u64)skbinfo->skbmark << 32 | + skbinfo->skbmarkmask))) || + (skbinfo->skbprio && nla_put_net32(skb, IPSET_ATTR_SKBPRIO, - cpu_to_be32(skbprio))) || - (skbqueue && + cpu_to_be32(skbinfo->skbprio))) || + (skbinfo->skbqueue && nla_put_net16(skb, IPSET_ATTR_SKBQUEUE, - cpu_to_be16(skbqueue))); + cpu_to_be16(skbinfo->skbqueue))); } @@ -400,10 +361,10 @@ static inline void ip_set_init_skbinfo(struct ip_set_skbinfo *skbinfo, const struct ip_set_ext *ext) { - ip_set_rcu_assign_u32(&skbinfo->skbmark, ext->skbmark); - ip_set_rcu_assign_u32(&skbinfo->skbmarkmask, ext->skbmarkmask); - ip_set_rcu_assign_u32(&skbinfo->skbprio, ext->skbprio); - ip_set_rcu_assign_u16(&skbinfo->skbqueue, ext->skbqueue); + skbinfo->skbmark = ext->skbmark; + skbinfo->skbmarkmask = ext->skbmarkmask; + skbinfo->skbprio = ext->skbprio; + skbinfo->skbqueue = ext->skbqueue; } static inline bool 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 862504b..375a18a 100644 --- a/kernel/include/linux/netfilter/ipset/ip_set_compat.h.in +++ b/kernel/include/linux/netfilter/ipset/ip_set_compat.h.in @@ -53,13 +53,25 @@ #endif #ifndef rcu_dereference_protected -#define rcu_dereference_protected(p, c) rcu_dereference(p) +#define rcu_dereference_protected(p, c) (p) +#endif + +#ifndef rcu_dereference_bh_check +#define rcu_dereference_bh_check(p, c) rcu_dereference_bh(p) #endif #ifndef __rcu #define __rcu #endif +#ifndef RCU_INITIALIZER +#define RCU_INITIALIZER(v) (typeof(*(v)) __force __rcu *)(v) +#define RCU_INIT_POINTER(p, v) \ + do { \ + p = RCU_INITIALIZER(v); \ + } while (0) +#endif + #ifdef CHECK_KCONFIG #ifndef CONFIG_SPARSE_RCU_POINTER #error "CONFIG_SPARSE_RCU_POINTER must be enabled" diff --git a/kernel/include/linux/netfilter/ipset/ip_set_timeout.h b/kernel/include/linux/netfilter/ipset/ip_set_timeout.h index 9e30031..cfe8a3f 100644 --- a/kernel/include/linux/netfilter/ipset/ip_set_timeout.h +++ b/kernel/include/linux/netfilter/ipset/ip_set_timeout.h @@ -40,23 +40,9 @@ ip_set_timeout_uget(struct nlattr *tb) } static inline bool -__ip_set_timeout_expired(unsigned long t) +ip_set_timeout_expired(unsigned long *t) { - return t != IPSET_ELEM_PERMANENT && time_is_before_jiffies(t); -} - -static inline bool -ip_set_timeout_expired_rcu(unsigned long *timeout) -{ - unsigned long t = ip_set_rcu_deref(*timeout); - - return __ip_set_timeout_expired(t); -} - -static inline bool -ip_set_timeout_expired(unsigned long *timeout) -{ - return __ip_set_timeout_expired(*timeout); + return *t != IPSET_ELEM_PERMANENT && time_is_before_jiffies(*t); } static inline void @@ -64,23 +50,23 @@ ip_set_timeout_set(unsigned long *timeout, u32 value) { unsigned long t; - if (!value) - return ip_set_rcu_assign_ulong(timeout, IPSET_ELEM_PERMANENT); + if (!value) { + *timeout = IPSET_ELEM_PERMANENT; + return; + } t = msecs_to_jiffies(value * 1000) + jiffies; if (t == IPSET_ELEM_PERMANENT) /* Bingo! :-) */ t--; - ip_set_rcu_assign_ulong(timeout, t); + *timeout = t; } static inline u32 ip_set_timeout_get(unsigned long *timeout) { - unsigned long t = ip_set_rcu_deref(*timeout); - - return t == IPSET_ELEM_PERMANENT ? 0 : - jiffies_to_msecs(t - jiffies)/1000; + return *timeout == IPSET_ELEM_PERMANENT ? 0 : + jiffies_to_msecs(*timeout - jiffies)/1000; } #endif /* __KERNEL__ */ -- cgit v1.2.3