Received: by 2002:a05:6a10:2726:0:0:0:0 with SMTP id ib38csp1074749pxb; Wed, 6 Apr 2022 08:08:01 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxzNl5C8dYq3vEICubgKBczBcHQFHJ8l+R0ieRn5KoIq9/dcqby7oziLH9aABhJmcuhORBe X-Received: by 2002:a63:1141:0:b0:39c:b664:c508 with SMTP id 1-20020a631141000000b0039cb664c508mr1524117pgr.49.1649257681660; Wed, 06 Apr 2022 08:08:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1649257681; cv=none; d=google.com; s=arc-20160816; b=uX+A1gGmNJIliOusN6wE/j7p7CWaN1yXf+T++IyXiPwucHmXn8r4LKjHWsvc5vtH2b vWOOpJ91c3nhNGhhxg+SBfX8K/jg27SUooBzx/XXIJt56Xf8gH+S7BxacshK2CAYWyhc 5n5AUaT/el6t3/UZfGlGWOkUP787RNdShC4Sj0q6WQcmqnNS2cBF0xB/oRTeHoF1cAqw xjkXLx4f9YUp6aysdkprKJMjHLtAPjty+GtMiQU7vKOBxKO02VmzcjdSEJ2OtjK44Dvv kOB+RMJM2JRAqEBB+SBpapNpTWK64dnc/gXqJbGY3UmhcfLAVOM1A7ZFqhhWrazYyPeY /5Gg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=Be87EGvm/2YcfdyUqOUsxJhotnkhkhsAzi0Boy2wrpY=; b=xB5quVvqQXIq3B+ASlahxdXM7M/2GsxtcGpAnitDhKkvs7OMFcXU9j5pTH+oAm8+0d M8U1BpopQVlup1Ak3CyU916IoRUtiQ0I1IfwLP2ZHQAKTm2kcQ0CafAwZI+KV/W98zul 58XiKQUygiDjbSZTeMtJ6mofRsJw8bdUNOCiJFzeKSuDbjclU5nYex8vUwrDOCB2POQK Am6QXA01a/s4H6pZePW0LQSTREansTlSm72lm0YTcxLAczg41rBVItQu3XlRzVfqyENW JQUU+0SSbl+0HJWxPaF7LmXzZWzut04Aqg4kzsIvGd9XE6y6ZvhF6Gqc670AijkJGFPQ HmzQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=Znc3WUF3; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [23.128.96.19]) by mx.google.com with ESMTPS id d15-20020a631d4f000000b003816043f108si17156245pgm.765.2022.04.06.08.08.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 Apr 2022 08:08:01 -0700 (PDT) Received-SPF: softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) client-ip=23.128.96.19; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=Znc3WUF3; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 022362438F9; Wed, 6 Apr 2022 05:57:17 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236460AbiDEWZk (ORCPT + 99 others); Tue, 5 Apr 2022 18:25:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50656 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1358041AbiDEK15 (ORCPT ); Tue, 5 Apr 2022 06:27:57 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [145.40.68.75]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 310D818B04; Tue, 5 Apr 2022 03:13:32 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id D6B01B81C88; Tue, 5 Apr 2022 10:13:30 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2F2D9C385A0; Tue, 5 Apr 2022 10:13:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1649153609; bh=WyeADXdrlcdcxuQs7Rbvfpn+khMbsrZAVeSDN+p9oSc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Znc3WUF3UbjAk7DTFvRM1IwjadMuH9P2ps5B/B+08AVwPxg08LC74xTdYk/LiZY/o bO60xhqZM2zdC8PHqndI5Ul7ocjQRPiGp85iuyK98esc0okoYBrl/P6lF5WW/hw8fU pHa/3xOvCL3lWPdGIoeRfN2tGlm94ITo+EkALWLE= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Jesper Dangaard Brouer , Maciej Fijalkowski , Alexander Lobakin , Michal Swiatkowski , Kiran Bhandare , Tony Nguyen , Sasha Levin Subject: [PATCH 5.10 281/599] i40e: respect metadata on XSK Rx to skb Date: Tue, 5 Apr 2022 09:29:35 +0200 Message-Id: <20220405070307.197428318@linuxfoundation.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220405070258.802373272@linuxfoundation.org> References: <20220405070258.802373272@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Alexander Lobakin [ Upstream commit 6dba29537c0f639b482bd8f8bbd50ab4ae74b48d ] For now, if the XDP prog returns XDP_PASS on XSK, the metadata will be lost as it doesn't get copied to the skb. Copy it along with the frame headers. Account its size on skb allocation, and when copying just treat it as a part of the frame and do a pull after to "move" it to the "reserved" zone. net_prefetch() xdp->data_meta and align the copy size to speed-up memcpy() a little and better match i40e_construct_skb(). Fixes: 0a714186d3c0 ("i40e: add AF_XDP zero-copy Rx support") Suggested-by: Jesper Dangaard Brouer Suggested-by: Maciej Fijalkowski Signed-off-by: Alexander Lobakin Reviewed-by: Michal Swiatkowski Tested-by: Kiran Bhandare Signed-off-by: Tony Nguyen Signed-off-by: Sasha Levin --- drivers/net/ethernet/intel/i40e/i40e_xsk.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/intel/i40e/i40e_xsk.c b/drivers/net/ethernet/intel/i40e/i40e_xsk.c index d444e38360c1..75e4a698c3db 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_xsk.c +++ b/drivers/net/ethernet/intel/i40e/i40e_xsk.c @@ -247,19 +247,25 @@ bool i40e_alloc_rx_buffers_zc(struct i40e_ring *rx_ring, u16 count) static struct sk_buff *i40e_construct_skb_zc(struct i40e_ring *rx_ring, struct xdp_buff *xdp) { + unsigned int totalsize = xdp->data_end - xdp->data_meta; unsigned int metasize = xdp->data - xdp->data_meta; - unsigned int datasize = xdp->data_end - xdp->data; struct sk_buff *skb; + net_prefetch(xdp->data_meta); + /* allocate a skb to store the frags */ - skb = __napi_alloc_skb(&rx_ring->q_vector->napi, datasize, + skb = __napi_alloc_skb(&rx_ring->q_vector->napi, totalsize, GFP_ATOMIC | __GFP_NOWARN); if (unlikely(!skb)) return NULL; - memcpy(__skb_put(skb, datasize), xdp->data, datasize); - if (metasize) + memcpy(__skb_put(skb, totalsize), xdp->data_meta, + ALIGN(totalsize, sizeof(long))); + + if (metasize) { skb_metadata_set(skb, metasize); + __skb_pull(skb, metasize); + } xsk_buff_free(xdp); return skb; -- 2.34.1