From patchwork Mon Dec 17 19:39:43 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: William Tu X-Patchwork-Id: 1014722 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="VEpCBFLR"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43JWjC26wFz9sB5 for ; Tue, 18 Dec 2018 06:40:47 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388368AbeLQTkp (ORCPT ); Mon, 17 Dec 2018 14:40:45 -0500 Received: from mail-pl1-f195.google.com ([209.85.214.195]:38062 "EHLO mail-pl1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726812AbeLQTkn (ORCPT ); Mon, 17 Dec 2018 14:40:43 -0500 Received: by mail-pl1-f195.google.com with SMTP id e5so6616444plb.5 for ; Mon, 17 Dec 2018 11:40:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references; bh=1Nk/gcmek+wupu+j4h2ijsw3KTTcYUi88FBqxaLRPws=; b=VEpCBFLRtFSN2VKdZGJh457tgWHB2wGwBJOM/slMNdv9nM1FGnohlf1oJO7mqqrTAN uCNcktQWPQ6HH2G/8HZ8Yly1/GZyz5Qp/lZZ55mSjM2CsgLIJ5vI0+m49zfEkz0fP1UH 0abuFYk/6j4alEB2YaNfsi9MZuiCHp+flLfyhLf/9ij6XHDXK62GkPxnDMWVZKLHMufk FZyWQHRL01rz7YSpwoNevwNNk4tjyj8DE+RtVd/T32D+MgflAkk6EMIwA5tf37YHGfiE cZvi8iGcR9VFa5Hw3WOX5+bxXG0VOV6bI8GARHTvuHWrK6dkqfm+MfCRh7k5EuZAis0K apjA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=1Nk/gcmek+wupu+j4h2ijsw3KTTcYUi88FBqxaLRPws=; b=RTn5gT/BXCcfXvnLMLlW4lPFgFNEs9SMTQBZHBgxo8BY+SXCoAZpeDXR27z/EoUYbx ANm6x3Z9b3gjqGhlPILD2lkzkuBM//Tg5vXFlkW5XZKsT1qwaXA5MppeXosgKNe/Q3M0 xilhDeA14UUJWAlbE4un2KuvXUD9ORc22a6765rC1rS79T/VphTA07d7zZKgLkTff9+O SigYn3G9SnDA94Diot9fUE62J1bNHsx+6Rb1QTmmBBfdCBC/Yzk6BOmICIU3s/wU6s4D gJeiSn9dFN1fgXWVxHLDDXEWQGYMMBq1WEbN+HMVeRgr1FQbHIb1aG+3j6i7BHI2NdPc 1a7g== X-Gm-Message-State: AA+aEWbI540I6ZcK/Q0I2KMDaBu2JvoUStOit6IUkLP3tL34dsUhCdWS GnKREJ7pIRXZLfgldFEppbw= X-Google-Smtp-Source: AFSGD/X3hqF+B+PhpT0gX3RCGgh2wgnXRa0vTrQ4PlGpSRkJTHfkIEs1duPE8fyrfcKZI1soB/HgxQ== X-Received: by 2002:a17:902:b78b:: with SMTP id e11mr13848257pls.90.1545075643075; Mon, 17 Dec 2018 11:40:43 -0800 (PST) Received: from sc9-mailhost3.vmware.com ([66.170.99.1]) by smtp.gmail.com with ESMTPSA id q75sm19965721pfa.38.2018.12.17.11.40.42 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 17 Dec 2018 11:40:42 -0800 (PST) From: William Tu To: bjorn.topel@gmail.com, magnus.karlsson@gmail.com, ast@kernel.org, daniel@iogearbox.net, netdev@vger.kernel.org, makita.toshiaki@lab.ntt.co.jp Subject: [bpf-next RFC 1/3] xsk: add xsk_umem_consume_tx_virtual. Date: Mon, 17 Dec 2018 11:39:43 -0800 Message-Id: <1545075585-27744-2-git-send-email-u9012063@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1545075585-27744-1-git-send-email-u9012063@gmail.com> References: <1545075585-27744-1-git-send-email-u9012063@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Currently the xsk_umem_consume_tx expects only the physical NICs so the api returns a dma address. This patch introduce the new function to return the virtual address, when XSK is used by a virtual device. Signed-off-by: William Tu --- include/net/xdp_sock.h | 7 +++++++ net/xdp/xsk.c | 24 ++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/include/net/xdp_sock.h b/include/net/xdp_sock.h index 13acb9803a6d..8de6b8456945 100644 --- a/include/net/xdp_sock.h +++ b/include/net/xdp_sock.h @@ -81,6 +81,7 @@ u64 *xsk_umem_peek_addr(struct xdp_umem *umem, u64 *addr); void xsk_umem_discard_addr(struct xdp_umem *umem); void xsk_umem_complete_tx(struct xdp_umem *umem, u32 nb_entries); bool xsk_umem_consume_tx(struct xdp_umem *umem, dma_addr_t *dma, u32 *len); +bool xsk_umem_consume_tx_virtual(struct xdp_umem *umem, char **addr, u32 *len); void xsk_umem_consume_tx_done(struct xdp_umem *umem); struct xdp_umem_fq_reuse *xsk_reuseq_prepare(u32 nentries); struct xdp_umem_fq_reuse *xsk_reuseq_swap(struct xdp_umem *umem, @@ -165,6 +166,12 @@ static inline bool xsk_umem_consume_tx(struct xdp_umem *umem, dma_addr_t *dma, return false; } +static inline bool xsk_umem_consume_tx_virtual(struct xdp_umem *umem, + char **dma, u32 *len) +{ + return false; +} + static inline void xsk_umem_consume_tx_done(struct xdp_umem *umem) { } diff --git a/net/xdp/xsk.c b/net/xdp/xsk.c index 07156f43d295..379f5e9d0c81 100644 --- a/net/xdp/xsk.c +++ b/net/xdp/xsk.c @@ -197,6 +197,30 @@ bool xsk_umem_consume_tx(struct xdp_umem *umem, dma_addr_t *dma, u32 *len) } EXPORT_SYMBOL(xsk_umem_consume_tx); +bool xsk_umem_consume_tx_virtual(struct xdp_umem *umem, char **addr, u32 *len) +{ + struct xdp_desc desc; + struct xdp_sock *xs; + + rcu_read_lock(); + list_for_each_entry_rcu(xs, &umem->xsk_list, list) { + if (!xskq_peek_desc(xs->tx, &desc)) + continue; + if (xskq_produce_addr_lazy(umem->cq, desc.addr)) + goto out; + + *addr = xdp_umem_get_data(umem, desc.addr); + *len = desc.len; + xskq_discard_desc(xs->tx); + rcu_read_unlock(); + return true; + } +out: + rcu_read_unlock(); + return false; +} +EXPORT_SYMBOL(xsk_umem_consume_tx_virtual); + static int xsk_zc_xmit(struct sock *sk) { struct xdp_sock *xs = xdp_sk(sk);