diff options
author | Jakub Kicinski <kuba@kernel.org> | 2020-11-14 16:09:59 -0800 |
---|---|---|
committer | Jakub Kicinski <kuba@kernel.org> | 2020-11-14 16:09:59 -0800 |
commit | 405ac7fd394c07f57d7cc9b85aec33e1d9b5c24e (patch) | |
tree | 24d9730863bc25b558c6ae1ca8e08672b5a29dfc /net/ipv4 | |
parent | ae8cb93286e50ece1e45674661cbefcafe8b811c (diff) | |
parent | 1c5f2ced136a7196c41ca2c16b8c2646e9b042ce (diff) |
Merge branch 'tcp-avoid-indirect-call-in-__sk_stream_memory_free'
Eric Dumazet says:
====================
tcp: avoid indirect call in __sk_stream_memory_free()
Small improvement for CONFIG_RETPOLINE=y, when dealing with TCP sockets.
====================
Link: https://lore.kernel.org/r/20201113150809.3443527-1-eric.dumazet@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'net/ipv4')
-rw-r--r-- | net/ipv4/tcp_ipv4.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c index 7352c097ae48..c2d5132c523c 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c @@ -2740,6 +2740,20 @@ void tcp4_proc_exit(void) } #endif /* CONFIG_PROC_FS */ +/* @wake is one when sk_stream_write_space() calls us. + * This sends EPOLLOUT only if notsent_bytes is half the limit. + * This mimics the strategy used in sock_def_write_space(). + */ +bool tcp_stream_memory_free(const struct sock *sk, int wake) +{ + const struct tcp_sock *tp = tcp_sk(sk); + u32 notsent_bytes = READ_ONCE(tp->write_seq) - + READ_ONCE(tp->snd_nxt); + + return (notsent_bytes << wake) < tcp_notsent_lowat(tp); +} +EXPORT_SYMBOL(tcp_stream_memory_free); + struct proto tcp_prot = { .name = "TCP", .owner = THIS_MODULE, |