From patchwork Wed Dec 19 01:04:51 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: William Tu X-Patchwork-Id: 1015776 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="kcte1mcf"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43KGdl6lKWz9s3Z for ; Wed, 19 Dec 2018 11:55:23 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727201AbeLSAzO (ORCPT ); Tue, 18 Dec 2018 19:55:14 -0500 Received: from mail-pg1-f193.google.com ([209.85.215.193]:43871 "EHLO mail-pg1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726629AbeLSAzO (ORCPT ); Tue, 18 Dec 2018 19:55:14 -0500 Received: by mail-pg1-f193.google.com with SMTP id v28so8610101pgk.10 for ; Tue, 18 Dec 2018 16:55:13 -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=jOstfbjtAxNawOiZh1MSt3i0YqYJFmWM3pu2A6FDbnU=; b=kcte1mcfAOuIXUnEH5FYNRC25SCDKjSzbzUQHfWTSFVKCjL+XxBgOruD/jDPmpXMU1 cKDAOi0E92EIjWSc5RIMsJlU/zxx1tVko+t6FbnSlBuJX31viXCgBkCFDxkxbEDEa4zu 6mUIaQbM4u1dp2Y5caBfe+S9WTNd8/aCplgWWE3rejgoKMmYcXIJucQBT7PA5VVWXaYm 7Ffum2AGZuMUZX8rThZA07fBUeE0OYwfAZ/gNG+++vHbecCWSctTqCNfL5qrNPMFKJn9 wDtedvD2tHxkd+hu1TgvavOkUb6L6YhNpqtb1BipUakcENwPK32H1+d8jVcUU7AoIPj/ YhNA== 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=jOstfbjtAxNawOiZh1MSt3i0YqYJFmWM3pu2A6FDbnU=; b=J4hrq0UQHZjXnC9Uj9xLNVP7WG3pq2SJowP2gvfD3VNyCuMaMg+Eb5VwSIfHff+Qe0 1If6bR+kUNqbyN6eioWqVKKPBhXOExpb0XoAIssxTZnlAtKPaja75ynpaxpBbGo0SMho 3fHZxZ02z4SerTb8V0FZQGrhiq83GWCG6NqBvgpEefLynv5iroheDqIfWuj+YisiQRbu aOzyN2SszcS+a+UhKsiWWOuf0mhiyVJLmdTzIkqQlNkzgBmxlZyfpocluHEBf92mmdkP NQyLjox0XSFSHSAgpOY60fLKZdBcGTNvvbPqE3tuzA+HZfkA+GJwCtf/3BHiMte9eacK gzZw== X-Gm-Message-State: AA+aEWamwucPM8qBF6MK38aONPjhGyB0qqZ008UrlAjP2MgDasW+wznu y+4scz1nXxx356j1KW+zMt8= X-Google-Smtp-Source: AFSGD/VtTLfASzDt1A7mXuEVKNl8otSngBEcEPjZpajBgndRFb+q4dUF5CbT9qEd076c7lCZlRxNww== X-Received: by 2002:a63:1f1c:: with SMTP id f28mr5223600pgf.193.1545180913093; Tue, 18 Dec 2018 16:55:13 -0800 (PST) Received: from sc9-mailhost2.vmware.com ([66.170.99.1]) by smtp.gmail.com with ESMTPSA id c13sm38964804pfe.93.2018.12.18.16.55.12 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 18 Dec 2018 16:55:12 -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, yihung.wei@gmail.com Subject: [bpf-next RFCv2 1/3] xsk: add xsk_umem_consume_tx_virtual. Date: Tue, 18 Dec 2018 17:04:51 -0800 Message-Id: <1545181493-8743-2-git-send-email-u9012063@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1545181493-8743-1-git-send-email-u9012063@gmail.com> References: <1545181493-8743-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/xdp_umem.c | 1 + net/xdp/xsk.c | 21 +++++++++++++++++++-- 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/include/net/xdp_sock.h b/include/net/xdp_sock.h index 13acb9803a6d..7fefe74f7fb5 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, void **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, + void **vaddr, u32 *len) +{ + return false; +} + static inline void xsk_umem_consume_tx_done(struct xdp_umem *umem) { } diff --git a/net/xdp/xdp_umem.c b/net/xdp/xdp_umem.c index a264cf2accd0..424ae2538f9f 100644 --- a/net/xdp/xdp_umem.c +++ b/net/xdp/xdp_umem.c @@ -60,6 +60,7 @@ struct xdp_umem *xdp_get_umem_from_qid(struct net_device *dev, return NULL; } +EXPORT_SYMBOL(xdp_get_umem_from_qid); static void xdp_clear_umem_at_qid(struct net_device *dev, u16 queue_id) { diff --git a/net/xdp/xsk.c b/net/xdp/xsk.c index 07156f43d295..a6ca0c0f0330 100644 --- a/net/xdp/xsk.c +++ b/net/xdp/xsk.c @@ -170,7 +170,8 @@ void xsk_umem_consume_tx_done(struct xdp_umem *umem) } EXPORT_SYMBOL(xsk_umem_consume_tx_done); -bool xsk_umem_consume_tx(struct xdp_umem *umem, dma_addr_t *dma, u32 *len) +static bool __xsk_umem_consume_tx(struct xdp_umem *umem, dma_addr_t *dma, + void **vaddr, u32 *len) { struct xdp_desc desc; struct xdp_sock *xs; @@ -183,7 +184,12 @@ bool xsk_umem_consume_tx(struct xdp_umem *umem, dma_addr_t *dma, u32 *len) if (xskq_produce_addr_lazy(umem->cq, desc.addr)) goto out; - *dma = xdp_umem_get_dma(umem, desc.addr); + if (dma) + *dma = xdp_umem_get_dma(umem, desc.addr); + + if (vaddr) + *vaddr = xdp_umem_get_data(umem, desc.addr); + *len = desc.len; xskq_discard_desc(xs->tx); @@ -195,8 +201,19 @@ bool xsk_umem_consume_tx(struct xdp_umem *umem, dma_addr_t *dma, u32 *len) rcu_read_unlock(); return false; } + +bool xsk_umem_consume_tx(struct xdp_umem *umem, dma_addr_t *dma, u32 *len) +{ + return __xsk_umem_consume_tx(umem, dma, NULL, len); +} EXPORT_SYMBOL(xsk_umem_consume_tx); +bool xsk_umem_consume_tx_virtual(struct xdp_umem *umem, void **addr, u32 *len) +{ + return __xsk_umem_consume_tx(umem, NULL, addr, len); +} +EXPORT_SYMBOL(xsk_umem_consume_tx_virtual); + static int xsk_zc_xmit(struct sock *sk) { struct xdp_sock *xs = xdp_sk(sk);