From patchwork Sun Jun 10 16:02:17 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Toshiaki Makita X-Patchwork-Id: 927381 X-Patchwork-Delegate: bpf@iogearbox.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="K0NmpvKJ"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 413gsM0Pxsz9rvt for ; Mon, 11 Jun 2018 02:02:47 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932344AbeFJQCp (ORCPT ); Sun, 10 Jun 2018 12:02:45 -0400 Received: from mail-pg0-f66.google.com ([74.125.83.66]:36239 "EHLO mail-pg0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932295AbeFJQCn (ORCPT ); Sun, 10 Jun 2018 12:02:43 -0400 Received: by mail-pg0-f66.google.com with SMTP id m5-v6so8573834pgd.3 for ; Sun, 10 Jun 2018 09:02:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=drmQAioz3gaW/c7y1LHqoyxYyAoh/Y7K9gClsYtppj4=; b=K0NmpvKJoNSJCcmOox9vvmJ4YhXhoWZ338gb6Yw+RIhD91j33XJtuOl/3ffYrCfvYB deVVXKYJunLn077eOdHGefqndewCIiULsBmSX8iQd19BsVTdmxdCpqE1PJvEbJUfGpjP hi+k6+5+covehgZRdfWecZOm+oKYN4GN7Hc8bvLq5MNbl06OaNgyJY+E/hpCigARjFg3 eEi0TfYNB1Cyx03Fsk4rqi4KA2LWTha/ZIcp2UlC9zU3auBrvHc52DIddJU2mQZZxS9p plxv5Yda2JdN7tB5ercxLof3RWvV/PbcVv3hPi2jwEFpaxvPk+jpjMvlBZf9M6re3FwP ew4g== 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:in-reply-to :references; bh=drmQAioz3gaW/c7y1LHqoyxYyAoh/Y7K9gClsYtppj4=; b=P+wsiQUvYql4QAfxgg3WU0xZPSdeiq/9ZeL7fE481mcYF5gAEGE1sxH/lFyYSNvZGl U1S/Y3VxN3Nfq+pjbE0e29yKvN3oTIPYZiy4N4JQxiLvS7gqWm2N7w1wGRBTaNu89QIX Hcb36C/xUgrehrUXvQYE0tnIuaAOMysGXw2LBKvfBVIhYHRQP6A2vHLpq+YC78Pnoq+L uUZE/dlJmLXfkY1F4gEosjyEhhH/EF+ep/6QTIIuq+g4xZyvo6tFtO2jgtS6yIwz6qHs qR0N6w9ybjuozQiCf5AyKSO+i4JCcGDMIh5I9M6qaBVAfguGdsBy3DuqsG7HlJTmDbwb UuiA== X-Gm-Message-State: APt69E0RmefOC09izXFHpCZ79vQcdunlYBUHXVwrSDSPBM+OzeJe195D pbOxAmXH76XzvcFZ2baJXkpRhw== X-Google-Smtp-Source: ADUXVKKlEmq+UXVepIAnbd5hdvTuCCyddSteJ5B4bSmsyFrTxZPF1YTMQ/Ny2jvcioqY73zh9LJ1Hw== X-Received: by 2002:a63:7a07:: with SMTP id v7-v6mr11785226pgc.444.1528646562889; Sun, 10 Jun 2018 09:02:42 -0700 (PDT) Received: from localhost.localdomain (i153-145-22-9.s42.a013.ap.plala.or.jp. [153.145.22.9]) by smtp.gmail.com with ESMTPSA id o87-v6sm56068211pfa.106.2018.06.10.09.02.41 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sun, 10 Jun 2018 09:02:42 -0700 (PDT) From: Toshiaki Makita To: netdev@vger.kernel.org Cc: Toshiaki Makita , Jesper Dangaard Brouer , Alexei Starovoitov , Daniel Borkmann Subject: [PATCH RFC v2 9/9] veth: Bulk skb xmit for XDP path Date: Mon, 11 Jun 2018 01:02:17 +0900 Message-Id: <20180610160217.3146-10-toshiaki.makita1@gmail.com> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180610160217.3146-1-toshiaki.makita1@gmail.com> References: <20180610160217.3146-1-toshiaki.makita1@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Toshiaki Makita Aquire txq lock instead of rxq ptr_ring lock so we avoid per-packet lock when skb->xmit_more is true. We ensure that rxqs are always not less than txqs and txq to rxq is one to one mapping, so we can completely remove rxq side lock. Since we removed rxq side lock, this change does not increase the number of locking even when bulk sending is not possible, e.g. non-GSO packets. Signed-off-by: Toshiaki Makita --- drivers/net/veth.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/net/veth.c b/drivers/net/veth.c index 67debd3eafe6..376d70f983e5 100644 --- a/drivers/net/veth.c +++ b/drivers/net/veth.c @@ -138,7 +138,7 @@ static void __veth_xdp_flush(struct veth_rq *rq) static int veth_xdp_rx(struct veth_rq *rq, struct sk_buff *skb) { - if (unlikely(ptr_ring_produce(&rq->xdp_ring, skb))) { + if (unlikely(__ptr_ring_produce(&rq->xdp_ring, skb))) { dev_kfree_skb_any(skb); return NET_RX_DROP; } @@ -188,7 +188,7 @@ static netdev_tx_t veth_xmit(struct sk_buff *skb, struct net_device *dev) atomic64_inc(&priv->dropped); } - if (rcv_xdp) + if (rcv_xdp && !skb->xmit_more) __veth_xdp_flush(rq); rcu_read_unlock(); @@ -829,15 +829,21 @@ static netdev_features_t veth_fix_features(struct net_device *dev, { struct veth_priv *priv = netdev_priv(dev); struct net_device *peer; + bool xdp = false; peer = rtnl_dereference(priv->peer); if (peer) { struct veth_priv *peer_priv = netdev_priv(peer); if (rtnl_dereference(peer_priv->rq[0].xdp_prog)) - features &= ~NETIF_F_GSO_SOFTWARE; + xdp = true; } + if (xdp) + features &= ~(NETIF_F_GSO_SOFTWARE | NETIF_F_LLTX); + else + features |= NETIF_F_LLTX; + return features; }