From patchwork Sun Jul 22 15:13:06 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Toshiaki Makita X-Patchwork-Id: 947479 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="RKNpjAmm"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41YSnC5BBgz9s4Z for ; Mon, 23 Jul 2018 01:13:35 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729862AbeGVQKd (ORCPT ); Sun, 22 Jul 2018 12:10:33 -0400 Received: from mail-pl0-f67.google.com ([209.85.160.67]:43278 "EHLO mail-pl0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728394AbeGVQKd (ORCPT ); Sun, 22 Jul 2018 12:10:33 -0400 Received: by mail-pl0-f67.google.com with SMTP id o7-v6so7147468plk.10 for ; Sun, 22 Jul 2018 08:13:33 -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=2nzcyJeVttL2IwH2+ztuTUDWWCC4+d2p170/bZF+Ll4=; b=RKNpjAmm9252ciGjHQ9ZCeGGJpPVq/0/MxvrXtqwRYfrzI4I/3R9WZsmxRzkOpmYyD /t8JBlQBn9hhQrDRIIG9dYFvZE3T+e+1C8hFdYm92P0t4sH7ygPd7DHnHIO6OIU1MIGd 1zRo9F5SBqgk8s6COgXS/b2XJF6VggHx8KOJc3S8QqVV+GuYKRPj0tZ4HKwzT7cA8eUn EquLGjyARlBJ6XfcIAWILZl12JCJ8jk0zqfG/YAfp0j6dvvfEiEAXGRbq0ezjA03QZK0 1qnwDSS0CW/8q/WchFqJBI9imZrUVg4yvG/DI+qJ0S+tRNpecZ5cK9Ip8jQerij4OQLa lsyw== 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=2nzcyJeVttL2IwH2+ztuTUDWWCC4+d2p170/bZF+Ll4=; b=R+DDNjKjek4mBsQ/hmtRT0aXdLfggrPHnNjvqkS9TvM43NILYgRAbv9L5rlRZN8/Ol WPeD1pMN5so2QFlY2NqalIFBaz544YdMbydLwodTpHdxpBodjQ9UvjNZiHIGNs+8c7qM UOfDjT1igD+ygxbdyRMqQYFFEbFpKYVP3jhI4Jjm+rDfd+32V5Gkob7KW5cTC8tKgKcy YAl4XvHeZdTaYJy11Xxx1AuXRj1n1bXTzbLwpbrJ+5Ff5jvmeoFBLRE9CEKs5njDUyPX Mff/3IroOfTGTiZ6OtjpScNodILDsMPuVYZKE5xO2xSH/oOQRNnqJuu0i1IVOnhnP/zs b6SQ== X-Gm-Message-State: AOUpUlHaWAEKijBCbget1MovWLscJVRgjRtaRa8Om20ruXWL+vSFDuDW drN0kS/9aS7h4wpsQptU0pj/NCfK X-Google-Smtp-Source: AAOMgpcqAlniKKA7O8PXPTQ83Dq7g0637oZYZfnAEn4RqaEg0OV+5yw9ifgWWMHh/XSJ8FIBQHLV+Q== X-Received: by 2002:a17:902:44a4:: with SMTP id l33-v6mr9435801pld.134.1532272413202; Sun, 22 Jul 2018 08:13:33 -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 v6-v6sm12092940pfa.28.2018.07.22.08.13.31 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sun, 22 Jul 2018 08:13:32 -0700 (PDT) From: Toshiaki Makita To: netdev@vger.kernel.org, Alexei Starovoitov , Daniel Borkmann Cc: Toshiaki Makita , Jesper Dangaard Brouer Subject: [PATCH v3 bpf-next 6/8] xdp: Add a flag for disabling napi_direct of xdp_return_frame in xdp_mem_info Date: Mon, 23 Jul 2018 00:13:06 +0900 Message-Id: <20180722151308.5480-7-toshiaki.makita1@gmail.com> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180722151308.5480-1-toshiaki.makita1@gmail.com> References: <20180722151308.5480-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 We need some mechanism to disable napi_direct on calling xdp_return_frame_rx_napi() from some context. When veth gets support of XDP_REDIRECT, it will redirects packets which are redirected from other devices. On redirection veth will reuse xdp_mem_info of the redirection source device to make return_frame work. But in this case .ndo_xdp_xmit() called from veth redirection uses xdp_mem_info which is not guarded by NAPI, because the .ndo_xdp_xmit is not called directly from the rxq which owns the xdp_mem_info. This approach introduces a flag in xdp_mem_info to indicate that napi_direct should be disabled even when _rx_napi variant is used. Signed-off-by: Toshiaki Makita --- include/net/xdp.h | 4 ++++ net/core/xdp.c | 6 ++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/include/net/xdp.h b/include/net/xdp.h index fcb033f51d8c..1d1bc6553ff2 100644 --- a/include/net/xdp.h +++ b/include/net/xdp.h @@ -41,6 +41,9 @@ enum xdp_mem_type { MEM_TYPE_MAX, }; +/* XDP flags for xdp_mem_info */ +#define XDP_MEM_RF_NO_DIRECT BIT(0) /* don't use napi_direct */ + /* XDP flags for ndo_xdp_xmit */ #define XDP_XMIT_FLUSH (1U << 0) /* doorbell signal consumer */ #define XDP_XMIT_FLAGS_MASK XDP_XMIT_FLUSH @@ -48,6 +51,7 @@ enum xdp_mem_type { struct xdp_mem_info { u32 type; /* enum xdp_mem_type, but known size type */ u32 id; + u32 flags; }; struct page_pool; diff --git a/net/core/xdp.c b/net/core/xdp.c index 57285383ed00..1426c608fd75 100644 --- a/net/core/xdp.c +++ b/net/core/xdp.c @@ -330,10 +330,12 @@ static void __xdp_return(void *data, struct xdp_mem_info *mem, bool napi_direct, /* mem->id is valid, checked in xdp_rxq_info_reg_mem_model() */ xa = rhashtable_lookup(mem_id_ht, &mem->id, mem_id_rht_params); page = virt_to_head_page(data); - if (xa) + if (xa) { + napi_direct &= !(mem->flags & XDP_MEM_RF_NO_DIRECT); page_pool_put_page(xa->page_pool, page, napi_direct); - else + } else { put_page(page); + } rcu_read_unlock(); break; case MEM_TYPE_PAGE_SHARED: