提交 f67fbeae 编写于 作者: B Brian Vazquez 提交者: Jakub Kicinski

net: use indirect call helpers for dst_mtu

This patch avoids the indirect call for the common case:
ip6_mtu and ipv4_mtu
Signed-off-by: NBrian Vazquez <brianvv@google.com>
Signed-off-by: NJakub Kicinski <kuba@kernel.org>
上级 6585d7dc
...@@ -194,9 +194,11 @@ dst_feature(const struct dst_entry *dst, u32 feature) ...@@ -194,9 +194,11 @@ dst_feature(const struct dst_entry *dst, u32 feature)
return dst_metric(dst, RTAX_FEATURES) & feature; return dst_metric(dst, RTAX_FEATURES) & feature;
} }
INDIRECT_CALLABLE_DECLARE(unsigned int ip6_mtu(const struct dst_entry *));
INDIRECT_CALLABLE_DECLARE(unsigned int ipv4_mtu(const struct dst_entry *));
static inline u32 dst_mtu(const struct dst_entry *dst) static inline u32 dst_mtu(const struct dst_entry *dst)
{ {
return dst->ops->mtu(dst); return INDIRECT_CALL_INET(dst->ops->mtu, ip6_mtu, ipv4_mtu, dst);
} }
/* RTT metrics are stored in milliseconds for user ABI, but used as jiffies */ /* RTT metrics are stored in milliseconds for user ABI, but used as jiffies */
......
...@@ -135,7 +135,8 @@ static int ip_rt_gc_timeout __read_mostly = RT_GC_TIMEOUT; ...@@ -135,7 +135,8 @@ static int ip_rt_gc_timeout __read_mostly = RT_GC_TIMEOUT;
static struct dst_entry *ipv4_dst_check(struct dst_entry *dst, u32 cookie); static struct dst_entry *ipv4_dst_check(struct dst_entry *dst, u32 cookie);
static unsigned int ipv4_default_advmss(const struct dst_entry *dst); static unsigned int ipv4_default_advmss(const struct dst_entry *dst);
static unsigned int ipv4_mtu(const struct dst_entry *dst); INDIRECT_CALLABLE_SCOPE
unsigned int ipv4_mtu(const struct dst_entry *dst);
static struct dst_entry *ipv4_negative_advice(struct dst_entry *dst); static struct dst_entry *ipv4_negative_advice(struct dst_entry *dst);
static void ipv4_link_failure(struct sk_buff *skb); static void ipv4_link_failure(struct sk_buff *skb);
static void ip_rt_update_pmtu(struct dst_entry *dst, struct sock *sk, static void ip_rt_update_pmtu(struct dst_entry *dst, struct sock *sk,
...@@ -1311,7 +1312,7 @@ static unsigned int ipv4_default_advmss(const struct dst_entry *dst) ...@@ -1311,7 +1312,7 @@ static unsigned int ipv4_default_advmss(const struct dst_entry *dst)
return min(advmss, IPV4_MAX_PMTU - header_size); return min(advmss, IPV4_MAX_PMTU - header_size);
} }
static unsigned int ipv4_mtu(const struct dst_entry *dst) INDIRECT_CALLABLE_SCOPE unsigned int ipv4_mtu(const struct dst_entry *dst)
{ {
const struct rtable *rt = (const struct rtable *)dst; const struct rtable *rt = (const struct rtable *)dst;
unsigned int mtu = rt->rt_pmtu; unsigned int mtu = rt->rt_pmtu;
...@@ -1333,6 +1334,7 @@ static unsigned int ipv4_mtu(const struct dst_entry *dst) ...@@ -1333,6 +1334,7 @@ static unsigned int ipv4_mtu(const struct dst_entry *dst)
return mtu - lwtunnel_headroom(dst->lwtstate, mtu); return mtu - lwtunnel_headroom(dst->lwtstate, mtu);
} }
EXPORT_SYMBOL(ipv4_mtu);
static void ip_del_fnhe(struct fib_nh_common *nhc, __be32 daddr) static void ip_del_fnhe(struct fib_nh_common *nhc, __be32 daddr)
{ {
......
...@@ -83,7 +83,8 @@ enum rt6_nud_state { ...@@ -83,7 +83,8 @@ enum rt6_nud_state {
static struct dst_entry *ip6_dst_check(struct dst_entry *dst, u32 cookie); static struct dst_entry *ip6_dst_check(struct dst_entry *dst, u32 cookie);
static unsigned int ip6_default_advmss(const struct dst_entry *dst); static unsigned int ip6_default_advmss(const struct dst_entry *dst);
static unsigned int ip6_mtu(const struct dst_entry *dst); INDIRECT_CALLABLE_SCOPE
unsigned int ip6_mtu(const struct dst_entry *dst);
static struct dst_entry *ip6_negative_advice(struct dst_entry *); static struct dst_entry *ip6_negative_advice(struct dst_entry *);
static void ip6_dst_destroy(struct dst_entry *); static void ip6_dst_destroy(struct dst_entry *);
static void ip6_dst_ifdown(struct dst_entry *, static void ip6_dst_ifdown(struct dst_entry *,
...@@ -3089,7 +3090,7 @@ static unsigned int ip6_default_advmss(const struct dst_entry *dst) ...@@ -3089,7 +3090,7 @@ static unsigned int ip6_default_advmss(const struct dst_entry *dst)
return mtu; return mtu;
} }
static unsigned int ip6_mtu(const struct dst_entry *dst) INDIRECT_CALLABLE_SCOPE unsigned int ip6_mtu(const struct dst_entry *dst)
{ {
struct inet6_dev *idev; struct inet6_dev *idev;
unsigned int mtu; unsigned int mtu;
...@@ -3111,6 +3112,7 @@ static unsigned int ip6_mtu(const struct dst_entry *dst) ...@@ -3111,6 +3112,7 @@ static unsigned int ip6_mtu(const struct dst_entry *dst)
return mtu - lwtunnel_headroom(dst->lwtstate, mtu); return mtu - lwtunnel_headroom(dst->lwtstate, mtu);
} }
EXPORT_SYMBOL(ip6_mtu);
/* MTU selection: /* MTU selection:
* 1. mtu on route is locked - use it * 1. mtu on route is locked - use it
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册