On Tue, Dec 13, 2022 at 01:22:40PM +0100, Christophe Leroy wrote: > From: Eric Dumazet <edumazet@xxxxxxxxxx> > > [ Upstream commit 62c07983bef9d3e78e71189441e1a470f0d1e653 ] > > Christophe Leroy reported a ~80ms latency spike > happening at first TCP connect() time. > > This is because __inet_hash_connect() uses get_random_once() > to populate a perturbation table which became quite big > after commit 4c2c8f03a5ab ("tcp: increase source port perturb table to 2^16") > > get_random_once() uses DO_ONCE(), which block hard irqs for the duration > of the operation. > > This patch adds DO_ONCE_SLOW() which uses a mutex instead of a spinlock > for operations where we prefer to stay in process context. > > Then __inet_hash_connect() can use get_random_slow_once() > to populate its perturbation table. > > Fixes: 4c2c8f03a5ab ("tcp: increase source port perturb table to 2^16") > Fixes: 190cc82489f4 ("tcp: change source port randomizarion at connect() time") > Reported-by: Christophe Leroy <christophe.leroy@xxxxxxxxxx> > Link: https://lore.kernel.org/netdev/CANn89iLAEYBaoYajy0Y9UmGFff5GPxDUoG-ErVB2jDdRNQ5Tug@xxxxxxxxxxxxxx/T/#t > Signed-off-by: Eric Dumazet <edumazet@xxxxxxxxxx> > Cc: Willy Tarreau <w@xxxxxx> > Tested-by: Christophe Leroy <christophe.leroy@xxxxxxxxxx> > Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx> > Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx> > Signed-off-by: Christophe Leroy <christophe.leroy@xxxxxxxxxx> > --- > include/linux/once.h | 28 ++++++++++++++++++++++++++++ > lib/once.c | 30 ++++++++++++++++++++++++++++++ > net/ipv4/inet_hashtables.c | 4 ++-- > 3 files changed, 60 insertions(+), 2 deletions(-) Now queued up, thanks. greg k-h