From patchwork Wed Dec 5 20:59:17 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Maciej_=C5=BBenczykowski?= X-Patchwork-Id: 1008462 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="Cx43f4tT"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 439B2K5jnPz9s6w for ; Thu, 6 Dec 2018 08:00:09 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728586AbeLEVAH (ORCPT ); Wed, 5 Dec 2018 16:00:07 -0500 Received: from mail-pf1-f194.google.com ([209.85.210.194]:36863 "EHLO mail-pf1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728423AbeLEVAH (ORCPT ); Wed, 5 Dec 2018 16:00:07 -0500 Received: by mail-pf1-f194.google.com with SMTP id b85so10617759pfc.3 for ; Wed, 05 Dec 2018 13:00:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=5gHvBMyHx56WwdLqHm0w+WWRSlzkOMWu8HMeWW9peG0=; b=Cx43f4tTZS+0gVDt7sittXB2dx9FySCSHspIUbIN6wM+FCgsSL8Y/nz/hK0olVEH2m gvTs2JVE/xBHdo6ojONP75nq4J1wLlyPjJo/XoQtBQ73N7dXHikayy9bim+cXSnLtSuo hOWLFG0ql8/NEALPlvdPQG+6F4ePPf5vKKWohaB3Sm2CVyX/d8MMqR2A5aK4/T4ZmTpK Tep3LcH/b8tdgiuRFPtZdFlDDsj3u/D9uAOgSBcUdZ5tRhE5SKPRaktuquBfkii9TIKH 3+fWuRl3dNLAnMb3Fel+io5yWQAyULVAk6j8DxwKHF0gxQQxQxGDwTH4Y7co4sxnTxAK H/yg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=5gHvBMyHx56WwdLqHm0w+WWRSlzkOMWu8HMeWW9peG0=; b=FThE0woqfgfjH3+B0mKvOXGgXhRqeoMRVd2dDRMurJCY4fXeecFgrte5HZUVpW3ZNy /RG3K5Gb/CreiwgOP2Lwn69dzcH5NK4RD6BNLzWXKa1kLDP8iHHE2XnhLlsWU54vg8Gj t0KkttjI37kQk0jHuu6rjSBW/yQNDHuwdlD38u3lq+UjkoB0LNX6osObXAAAfrehfI9/ A6N9OUmsVFx6Ue03VOEJ3kEgGoDJH77C2YfLbNAy9WoEDYzrRnWIvviMqF30LIjP+i4p 7gs3SrFuRO9kEQXJuUDY9rBnKvKNVHxTyNtcFvpe4ihcPoaTHipK6SBJuXYkZss89j04 bBiA== X-Gm-Message-State: AA+aEWZCJwDp9B6AFnDsv8Cxli89G9yiRLcMFonm73bs6bkC/8goBsZY 0Mw23o5zqLj3nXttv6Rfrr2diIQj X-Google-Smtp-Source: AFSGD/VFp0+2uxZddO4aFZsO78w53q/ds86wzRu2jXdLfcREe+korIXlc7nVOyNbNdXTM+ptvroN7g== X-Received: by 2002:a65:55ca:: with SMTP id k10mr21540814pgs.448.1544043606359; Wed, 05 Dec 2018 13:00:06 -0800 (PST) Received: from athina.mtv.corp.google.com ([2620:0:1000:1601:d7a4:903f:6d6b:ec10]) by smtp.gmail.com with ESMTPSA id h74sm31259244pfd.35.2018.12.05.13.00.05 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 05 Dec 2018 13:00:05 -0800 (PST) From: =?utf-8?q?Maciej_=C5=BBenczykowski?= To: =?utf-8?q?Maciej_=C5=BBenczykowski?= , "David S . Miller" , Eric Dumazet Cc: netdev@vger.kernel.org Subject: [PATCH] net-udp: deprioritize cpu match for udp socket lookup Date: Wed, 5 Dec 2018 12:59:17 -0800 Message-Id: <20181205205917.169177-1-zenczykowski@gmail.com> X-Mailer: git-send-email 2.20.0.rc1.387.gf8505762e3-goog MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Maciej Żenczykowski During udp socket lookup cpu match should be lowest priority, hence it should increase score by only 1. The next priority is delivering v4 to v4 sockets, and v6 to v6 sockets. The v6 code path doesn't have to deal with this so it always gets a score of '4'. The v4 code path uses '4' or '2' depending on whether we're delivering to a v4 socket or a dualstack v6 socket. This is more important than cpu match, so has to be greater than the '1' bump in score from cpu match. All other matches (src/dst ip, src port) are even *more* important, so need to bump score by 4 for ipv4. For ipv6 we could simply bump by 2, but let's keep the two code paths as similar as possible. (also, while at it, remove two unnecessary unconditional score bumps) Signed-off-by: Maciej Żenczykowski --- net/ipv4/udp.c | 3 +-- net/ipv6/udp.c | 9 ++++----- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index aff2a8e99e01..0c0ab0383cec 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c @@ -380,7 +380,7 @@ static int compute_score(struct sock *sk, struct net *net, ipv6_only_sock(sk)) return -1; - score = (sk->sk_family == PF_INET) ? 2 : 1; + score = (sk->sk_family == PF_INET) ? 4 : 2; inet = inet_sk(sk); if (inet->inet_rcv_saddr) { @@ -405,7 +405,6 @@ static int compute_score(struct sock *sk, struct net *net, dif, sdif); if (!dev_match) return -1; - score += 4; if (sk->sk_incoming_cpu == raw_smp_processor_id()) score++; diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c index 09cba4cfe31f..5441062d7d5e 100644 --- a/net/ipv6/udp.c +++ b/net/ipv6/udp.c @@ -125,31 +125,30 @@ static int compute_score(struct sock *sk, struct net *net, sk->sk_family != PF_INET6) return -1; - score = 0; + score = 4; inet = inet_sk(sk); if (inet->inet_dport) { if (inet->inet_dport != sport) return -1; - score++; + score += 4; } if (!ipv6_addr_any(&sk->sk_v6_rcv_saddr)) { if (!ipv6_addr_equal(&sk->sk_v6_rcv_saddr, daddr)) return -1; - score++; + score += 4; } if (!ipv6_addr_any(&sk->sk_v6_daddr)) { if (!ipv6_addr_equal(&sk->sk_v6_daddr, saddr)) return -1; - score++; + score += 4; } dev_match = udp_sk_bound_dev_eq(net, sk->sk_bound_dev_if, dif, sdif); if (!dev_match) return -1; - score++; if (sk->sk_incoming_cpu == raw_smp_processor_id()) score++;