Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/1375814/?format=api
{ "id": 1375814, "url": "http://patchwork.ozlabs.org/api/patches/1375814/?format=api", "web_url": "http://patchwork.ozlabs.org/project/netdev/patch/94ff09e2b8bf01eade7ae73d3cb0984423d3abe9.1601648734.git.lorenzo@kernel.org/", "project": { "id": 7, "url": "http://patchwork.ozlabs.org/api/projects/7/?format=api", "name": "Linux network development", "link_name": "netdev", "list_id": "netdev.vger.kernel.org", "list_email": "netdev@vger.kernel.org", "web_url": null, "scm_url": null, "webscm_url": null, "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<94ff09e2b8bf01eade7ae73d3cb0984423d3abe9.1601648734.git.lorenzo@kernel.org>", "list_archive_url": null, "date": "2020-10-02T14:42:11", "name": "[v4,bpf-next,13/13] bpf: cpumap: introduce xdp multi-buff support", "commit_ref": null, "pull_url": null, "state": "changes-requested", "archived": false, "hash": "75b2bb282ab0290da4a8ffb89f0a5903f4535e56", "submitter": { "id": 76007, "url": "http://patchwork.ozlabs.org/api/people/76007/?format=api", "name": "Lorenzo Bianconi", "email": "lorenzo@kernel.org" }, "delegate": { "id": 77147, "url": "http://patchwork.ozlabs.org/api/users/77147/?format=api", "username": "bpf", "first_name": "BPF", "last_name": "Maintainers", "email": "bpf@iogearbox.net" }, "mbox": "http://patchwork.ozlabs.org/project/netdev/patch/94ff09e2b8bf01eade7ae73d3cb0984423d3abe9.1601648734.git.lorenzo@kernel.org/mbox/", "series": [ { "id": 205635, "url": "http://patchwork.ozlabs.org/api/series/205635/?format=api", "web_url": "http://patchwork.ozlabs.org/project/netdev/list/?series=205635", "date": "2020-10-02T14:41:58", "name": "mvneta: introduce XDP multi-buffer support", "version": 4, "mbox": "http://patchwork.ozlabs.org/series/205635/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/1375814/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/1375814/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<netdev-owner@vger.kernel.org>", "X-Original-To": "patchwork-incoming-netdev@ozlabs.org", "Delivered-To": "patchwork-incoming-netdev@ozlabs.org", "Authentication-Results": [ "ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=23.128.96.18; helo=vger.kernel.org;\n envelope-from=netdev-owner@vger.kernel.org; receiver=<UNKNOWN>)", "ozlabs.org;\n dmarc=pass (p=none dis=none) header.from=kernel.org", "ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256\n header.s=default header.b=pEQUqqJu;\n\tdkim-atps=neutral" ], "Received": [ "from vger.kernel.org (vger.kernel.org [23.128.96.18])\n\tby ozlabs.org (Postfix) with ESMTP id 4C2t5j3ClDz9s1t\n\tfor <patchwork-incoming-netdev@ozlabs.org>;\n Sat, 3 Oct 2020 00:43:21 +1000 (AEST)", "(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n id S2388248AbgJBOnU (ORCPT\n <rfc822;patchwork-incoming-netdev@ozlabs.org>);\n Fri, 2 Oct 2020 10:43:20 -0400", "from mail.kernel.org ([198.145.29.99]:32926 \"EHLO mail.kernel.org\"\n rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP\n id S2388016AbgJBOnT (ORCPT <rfc822;netdev@vger.kernel.org>);\n Fri, 2 Oct 2020 10:43:19 -0400", "from lore-desk.redhat.com (unknown [176.207.245.61])\n (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n (No client certificate requested)\n by mail.kernel.org (Postfix) with ESMTPSA id C65532074B;\n Fri, 2 Oct 2020 14:43:16 +0000 (UTC)" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;\n s=default; t=1601649799;\n bh=X2lmksPI9nQGFdNp2KO6XfRfikz0sJW9YQmr7+W2m0s=;\n h=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n b=pEQUqqJuqx7p7XIZ6+r+zOGFkrQuivzVp4kcEpDVq9NW+j/RKCkpJyH8rWvW8GVg1\n az4qE3/3OHytiT0gCY/RF6RhTPujZBKLkNGnR/hF5q9HqT9uEfJNzUu6KC8mZCpeXu\n 7FQ9G1gvJU8t48BtOU9nw38RG5dx5nnTU6akzp10=", "From": "Lorenzo Bianconi <lorenzo@kernel.org>", "To": "bpf@vger.kernel.org, netdev@vger.kernel.org", "Cc": "davem@davemloft.net, kuba@kernel.org, ast@kernel.org,\n daniel@iogearbox.net, shayagr@amazon.com, sameehj@amazon.com,\n john.fastabend@gmail.com, dsahern@kernel.org, brouer@redhat.com,\n lorenzo.bianconi@redhat.com, echaudro@redhat.com", "Subject": "[PATCH v4 bpf-next 13/13] bpf: cpumap: introduce xdp multi-buff\n support", "Date": "Fri, 2 Oct 2020 16:42:11 +0200", "Message-Id": "\n <94ff09e2b8bf01eade7ae73d3cb0984423d3abe9.1601648734.git.lorenzo@kernel.org>", "X-Mailer": "git-send-email 2.26.2", "In-Reply-To": "<cover.1601648734.git.lorenzo@kernel.org>", "References": "<cover.1601648734.git.lorenzo@kernel.org>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "Precedence": "bulk", "List-ID": "<netdev.vger.kernel.org>", "X-Mailing-List": "netdev@vger.kernel.org" }, "content": "Introduce __xdp_build_skb_from_frame and xdp_build_skb_from_frame\nutility routines to build the skb from xdp_frame.\nAdd xdp multi-buff support to cpumap\n\nSigned-off-by: Lorenzo Bianconi <lorenzo@kernel.org>\n---\n include/net/xdp.h | 5 ++++\n kernel/bpf/cpumap.c | 45 +------------------------------\n net/core/xdp.c | 64 +++++++++++++++++++++++++++++++++++++++++++++\n 3 files changed, 70 insertions(+), 44 deletions(-)", "diff": "diff --git a/include/net/xdp.h b/include/net/xdp.h\nindex 4d47076546ff..8d9224ef75ee 100644\n--- a/include/net/xdp.h\n+++ b/include/net/xdp.h\n@@ -134,6 +134,11 @@ void xdp_warn(const char *msg, const char *func, const int line);\n #define XDP_WARN(msg) xdp_warn(msg, __func__, __LINE__)\n \n struct xdp_frame *xdp_convert_zc_to_xdp_frame(struct xdp_buff *xdp);\n+struct sk_buff *__xdp_build_skb_from_frame(struct xdp_frame *xdpf,\n+\t\t\t\t\t struct sk_buff *skb,\n+\t\t\t\t\t struct net_device *dev);\n+struct sk_buff *xdp_build_skb_from_frame(struct xdp_frame *xdpf,\n+\t\t\t\t\t struct net_device *dev);\n \n static inline\n void xdp_convert_frame_to_buff(struct xdp_frame *frame, struct xdp_buff *xdp)\ndiff --git a/kernel/bpf/cpumap.c b/kernel/bpf/cpumap.c\nindex c61a23b564aa..fa07b4226836 100644\n--- a/kernel/bpf/cpumap.c\n+++ b/kernel/bpf/cpumap.c\n@@ -155,49 +155,6 @@ static void cpu_map_kthread_stop(struct work_struct *work)\n \tkthread_stop(rcpu->kthread);\n }\n \n-static struct sk_buff *cpu_map_build_skb(struct xdp_frame *xdpf,\n-\t\t\t\t\t struct sk_buff *skb)\n-{\n-\tunsigned int hard_start_headroom;\n-\tunsigned int frame_size;\n-\tvoid *pkt_data_start;\n-\n-\t/* Part of headroom was reserved to xdpf */\n-\thard_start_headroom = sizeof(struct xdp_frame) + xdpf->headroom;\n-\n-\t/* Memory size backing xdp_frame data already have reserved\n-\t * room for build_skb to place skb_shared_info in tailroom.\n-\t */\n-\tframe_size = xdpf->frame_sz;\n-\n-\tpkt_data_start = xdpf->data - hard_start_headroom;\n-\tskb = build_skb_around(skb, pkt_data_start, frame_size);\n-\tif (unlikely(!skb))\n-\t\treturn NULL;\n-\n-\tskb_reserve(skb, hard_start_headroom);\n-\t__skb_put(skb, xdpf->len);\n-\tif (xdpf->metasize)\n-\t\tskb_metadata_set(skb, xdpf->metasize);\n-\n-\t/* Essential SKB info: protocol and skb->dev */\n-\tskb->protocol = eth_type_trans(skb, xdpf->dev_rx);\n-\n-\t/* Optional SKB info, currently missing:\n-\t * - HW checksum info\t\t(skb->ip_summed)\n-\t * - HW RX hash\t\t\t(skb_set_hash)\n-\t * - RX ring dev queue index\t(skb_record_rx_queue)\n-\t */\n-\n-\t/* Until page_pool get SKB return path, release DMA here */\n-\txdp_release_frame(xdpf);\n-\n-\t/* Allow SKB to reuse area used by xdp_frame */\n-\txdp_scrub_frame(xdpf);\n-\n-\treturn skb;\n-}\n-\n static void __cpu_map_ring_cleanup(struct ptr_ring *ring)\n {\n \t/* The tear-down procedure should have made sure that queue is\n@@ -364,7 +321,7 @@ static int cpu_map_kthread_run(void *data)\n \t\t\tstruct sk_buff *skb = skbs[i];\n \t\t\tint ret;\n \n-\t\t\tskb = cpu_map_build_skb(xdpf, skb);\n+\t\t\tskb = __xdp_build_skb_from_frame(xdpf, skb, xdpf->dev_rx);\n \t\t\tif (!skb) {\n \t\t\t\txdp_return_frame(xdpf);\n \t\t\t\tcontinue;\ndiff --git a/net/core/xdp.c b/net/core/xdp.c\nindex 6d4fd4dddb00..a6bdefed92e6 100644\n--- a/net/core/xdp.c\n+++ b/net/core/xdp.c\n@@ -507,3 +507,67 @@ void xdp_warn(const char *msg, const char *func, const int line)\n \tWARN(1, \"XDP_WARN: %s(line:%d): %s\\n\", func, line, msg);\n };\n EXPORT_SYMBOL_GPL(xdp_warn);\n+\n+struct sk_buff *__xdp_build_skb_from_frame(struct xdp_frame *xdpf,\n+\t\t\t\t\t struct sk_buff *skb,\n+\t\t\t\t\t struct net_device *dev)\n+{\n+\tstruct skb_shared_info *sinfo = xdp_get_shared_info_from_frame(xdpf);\n+\tunsigned int headroom = sizeof(*xdpf) + xdpf->headroom;\n+\tint i, num_frags = xdpf->mb ? sinfo->nr_frags : 0;\n+\tvoid *hard_start = xdpf->data - headroom;\n+\n+\tskb = build_skb_around(skb, hard_start, xdpf->frame_sz);\n+\tif (unlikely(!skb))\n+\t\treturn NULL;\n+\n+\tskb_reserve(skb, headroom);\n+\t__skb_put(skb, xdpf->len);\n+\tif (xdpf->metasize)\n+\t\tskb_metadata_set(skb, xdpf->metasize);\n+\n+\tif (likely(!num_frags))\n+\t\tgoto out;\n+\n+\tfor (i = 0; i < num_frags; i++) {\n+\t\tskb_frag_t *frag = &sinfo->frags[i];\n+\n+\t\tskb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags,\n+\t\t\t\tskb_frag_page(frag), skb_frag_off(frag),\n+\t\t\t\tskb_frag_size(frag), xdpf->frame_sz);\n+\t}\n+\n+out:\n+\t/* Essential SKB info: protocol and skb->dev */\n+\tskb->protocol = eth_type_trans(skb, dev);\n+\n+\t/* Optional SKB info, currently missing:\n+\t * - HW checksum info\t\t(skb->ip_summed)\n+\t * - HW RX hash\t\t\t(skb_set_hash)\n+\t * - RX ring dev queue index\t(skb_record_rx_queue)\n+\t */\n+\n+\t/* Until page_pool get SKB return path, release DMA here */\n+\txdp_release_frame(xdpf);\n+\n+\t/* Allow SKB to reuse area used by xdp_frame */\n+\txdp_scrub_frame(xdpf);\n+\n+\treturn skb;\n+}\n+EXPORT_SYMBOL_GPL(__xdp_build_skb_from_frame);\n+\n+struct sk_buff *xdp_build_skb_from_frame(struct xdp_frame *xdpf,\n+\t\t\t\t\t struct net_device *dev)\n+{\n+\tstruct sk_buff *skb;\n+\n+\tskb = kmem_cache_alloc(skbuff_head_cache, GFP_ATOMIC);\n+\tif (unlikely(!skb))\n+\t\treturn NULL;\n+\n+\tmemset(skb, 0, offsetof(struct sk_buff, tail));\n+\n+\treturn __xdp_build_skb_from_frame(xdpf, skb, dev);\n+}\n+EXPORT_SYMBOL_GPL(xdp_build_skb_from_frame);\n", "prefixes": [ "v4", "bpf-next", "13/13" ] }