]> git.karo-electronics.de Git - linux-beck.git/commitdiff
netfilter: get rid of the grossness in netfilter.h
authorJan Engelhardt <jengelh@medozas.de>
Sat, 13 Jun 2009 02:13:26 +0000 (04:13 +0200)
committerJan Engelhardt <jengelh@medozas.de>
Mon, 15 Feb 2010 15:56:51 +0000 (16:56 +0100)
GCC is now smart enough to follow the inline trail correctly.
vmlinux size remain the same.

Signed-off-by: Jan Engelhardt <jengelh@medozas.de>
include/linux/netfilter.h

index 2f22816a5514c6ed6011320fa6ff366cda3dcfde..70079454ffd081c00dfa3ed02eb9af0a79a99583 100644 (file)
@@ -196,25 +196,36 @@ static inline int nf_hook(u_int8_t pf, unsigned int hook, struct sk_buff *skb,
    coders :)
 */
 
-/* This is gross, but inline doesn't cut it for avoiding the function
-   call in fast path: gcc doesn't inline (needs value tracking?). --RR */
-
-/* HX: It's slightly less gross now. */
-
-#define NF_HOOK_THRESH(pf, hook, skb, indev, outdev, okfn, thresh)            \
-({int __ret;                                                                  \
-if ((__ret=nf_hook_thresh(pf, hook, (skb), indev, outdev, okfn, thresh)) == 1)\
-       __ret = (okfn)(skb);                                                   \
-__ret;})
+static inline int
+NF_HOOK_THRESH(uint8_t pf, unsigned int hook, struct sk_buff *skb,
+              struct net_device *in, struct net_device *out,
+              int (*okfn)(struct sk_buff *), int thresh)
+{
+       int ret = nf_hook_thresh(pf, hook, skb, in, out, okfn, thresh);
+       if (ret == 1)
+               ret = okfn(skb);
+       return ret;
+}
 
-#define NF_HOOK_COND(pf, hook, skb, indev, outdev, okfn, cond)                \
-({int __ret;                                                                  \
-if ((cond) || (__ret = nf_hook_thresh(pf, hook, (skb), indev, outdev, okfn, INT_MIN)) == 1)\
-       __ret = (okfn)(skb);                                                   \
-__ret;})
+static inline int
+NF_HOOK_COND(uint8_t pf, unsigned int hook, struct sk_buff *skb,
+            struct net_device *in, struct net_device *out,
+            int (*okfn)(struct sk_buff *), bool cond)
+{
+       int ret = 1;
+       if (cond ||
+           (ret = nf_hook_thresh(pf, hook, skb, in, out, okfn, INT_MIN) == 1))
+               ret = okfn(skb);
+       return ret;
+}
 
-#define NF_HOOK(pf, hook, skb, indev, outdev, okfn) \
-       NF_HOOK_THRESH(pf, hook, skb, indev, outdev, okfn, INT_MIN)
+static inline int
+NF_HOOK(uint8_t pf, unsigned int hook, struct sk_buff *skb,
+       struct net_device *in, struct net_device *out,
+       int (*okfn)(struct sk_buff *))
+{
+       return NF_HOOK_THRESH(pf, hook, skb, in, out, okfn, INT_MIN);
+}
 
 /* Call setsockopt() */
 int nf_setsockopt(struct sock *sk, u_int8_t pf, int optval, char __user *opt,