summaryrefslogtreecommitdiffstats
path: root/kernel/include
diff options
context:
space:
mode:
authorJozsef Kadlecsik <kadlec@blackhole.kfki.hu>2014-11-27 17:54:52 +0100
committerJozsef Kadlecsik <kadlec@blackhole.kfki.hu>2014-11-27 17:54:52 +0100
commit68ade8303ff94cc10586298997a0474b513ddc61 (patch)
treef95fdd2c94857cda9e4508ddef0664cd23d1033f /kernel/include
parent4e8fb0a84de38c6d06908fed2ec7eb3f7e6f66b6 (diff)
Remove unnecessary integer RCU handling and fix sparse warnings
Diffstat (limited to 'kernel/include')
-rw-r--r--kernel/include/linux/netfilter/ipset/ip_set.h77
-rw-r--r--kernel/include/linux/netfilter/ipset/ip_set_compat.h.in14
-rw-r--r--kernel/include/linux/netfilter/ipset/ip_set_timeout.h32
3 files changed, 41 insertions, 82 deletions
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__ */