Received: by 2002:a05:7412:8d10:b0:f3:1519:9f41 with SMTP id bj16csp2217137rdb; Fri, 8 Dec 2023 01:28:37 -0800 (PST) X-Google-Smtp-Source: AGHT+IGewGKeAYLra/JDV53UXOuCnD4fQX42sqnRkMjFvxZ0/ZXWxJU1aaZf33rwaRmuJKmOiFkE X-Received: by 2002:a17:903:2346:b0:1cf:662b:4523 with SMTP id c6-20020a170903234600b001cf662b4523mr945464plh.34.1702027716742; Fri, 08 Dec 2023 01:28:36 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702027716; cv=none; d=google.com; s=arc-20160816; b=vOwxDWHMs13fwIJ5XNIoHFcUzC5cJ7B56PTHnlCO1p1gTGztRv9lcifQRoetT6MWeg +w5Xmk/ZQhUN+SUP8ZmYBiE+h5Oyk4wJomK7kVGHtZVSYPwgRzz2faV7BSGiNzfiZlQ/ k2ZfBG+keF+xwutk2w+HF8ek6CczCFBiEAgb53KqhwtHbmVdal7MBJOvYqjBK66udk2l eAW2rff7vopIEw+Hyq+3PBDL8fL7x/RuJBZcqn760w3nPJhSBtlvbNIvEJw0uZUVFJ9v 9peGUUdMjZZOJTsCk/3J+iVxjSCxGE9seL0Xr3CBa3JdOI1JqysKDqAWfbZwE/isu01h u9gQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:content-language :in-reply-to:mime-version:user-agent:date:message-id:from:references :cc:to:subject; bh=9BSz37nKqZpFqD4UFk2TED4hxMfNKlw3EkvjW1VkMLI=; fh=ViJZPlUnsmDftCUB263Ts0kc3VhL7hfuAIADeVj8VQg=; b=D+BrenGpSi1d9g2oOieETI08p4ZNOJaLOOM0W6YHvC9/khC++zx3+viIK5Ark+433v QXQIFbK1AiQPahfJclQDXxpS/n2Vj+oTyGPLI+mdbSsK8ivh439YhZNAt8UDDBzlyToG H+I3Ei/fpIkHfcL+3hwMCKeCs8Q0eZKTElU1BkMHmU+DD0MEZ/axfICutKzfipLOYTzr 2zdBJXGlLzGqoEyXSerMHOroKlXrz14b03EmU7PouczosJWy5ym4yCPx/FE+4K8l61gF DrhpdHwmWBbNh//R56LXdkOlkvOHfWnMqAOt9pCC61zDkoZICDNUQ7SZHZDua3PUeZFX vF2Q== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.31 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=huawei.com Return-Path: Received: from morse.vger.email (morse.vger.email. [23.128.96.31]) by mx.google.com with ESMTPS id c17-20020a170902d49100b001d054a8f128si1362368plg.451.2023.12.08.01.28.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Dec 2023 01:28:36 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.31 as permitted sender) client-ip=23.128.96.31; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.31 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=huawei.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by morse.vger.email (Postfix) with ESMTP id ADBF583741C8; Fri, 8 Dec 2023 01:28:34 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at morse.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235840AbjLHJ2W (ORCPT + 99 others); Fri, 8 Dec 2023 04:28:22 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55414 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235867AbjLHJ2T (ORCPT ); Fri, 8 Dec 2023 04:28:19 -0500 Received: from szxga08-in.huawei.com (szxga08-in.huawei.com [45.249.212.255]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6D79F1735; Fri, 8 Dec 2023 01:28:24 -0800 (PST) Received: from dggpemm500005.china.huawei.com (unknown [172.30.72.53]) by szxga08-in.huawei.com (SkyGuard) with ESMTP id 4Smm1X2YcFz1Q6QK; Fri, 8 Dec 2023 17:24:32 +0800 (CST) Received: from [10.69.30.204] (10.69.30.204) by dggpemm500005.china.huawei.com (7.185.36.74) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Fri, 8 Dec 2023 17:28:21 +0800 Subject: Re: [PATCH net-next v6 08/12] libie: add Rx buffer management (via Page Pool) To: Alexander Lobakin , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni CC: Maciej Fijalkowski , Michal Kubiak , Larysa Zaremba , Alexander Duyck , David Christensen , Jesper Dangaard Brouer , Ilias Apalodimas , Paul Menzel , , , References: <20231207172010.1441468-1-aleksander.lobakin@intel.com> <20231207172010.1441468-9-aleksander.lobakin@intel.com> From: Yunsheng Lin Message-ID: <1103fe8f-04c8-8cc4-8f1b-ff45cea22b54@huawei.com> Date: Fri, 8 Dec 2023 17:28:21 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.2.0 MIME-Version: 1.0 In-Reply-To: <20231207172010.1441468-9-aleksander.lobakin@intel.com> Content-Type: text/plain; charset="utf-8" Content-Language: en-US Content-Transfer-Encoding: 7bit X-Originating-IP: [10.69.30.204] X-ClientProxiedBy: dggems702-chm.china.huawei.com (10.3.19.179) To dggpemm500005.china.huawei.com (7.185.36.74) X-CFilter-Loop: Reflected X-Spam-Status: No, score=-2.9 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on morse.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (morse.vger.email [0.0.0.0]); Fri, 08 Dec 2023 01:28:34 -0800 (PST) On 2023/12/8 1:20, Alexander Lobakin wrote: ... > + > +/** > + * libie_rx_page_pool_create - create a PP with the default libie settings > + * @bq: buffer queue struct to fill > + * @napi: &napi_struct covering this PP (no usage outside its poll loops) > + * > + * Return: 0 on success, -errno on failure. > + */ > +int libie_rx_page_pool_create(struct libie_buf_queue *bq, > + struct napi_struct *napi) > +{ > + struct page_pool_params pp = { > + .flags = PP_FLAG_DMA_MAP | PP_FLAG_DMA_SYNC_DEV, > + .order = LIBIE_RX_PAGE_ORDER, > + .pool_size = bq->count, > + .nid = NUMA_NO_NODE, Is there a reason the NUMA_NO_NODE is used here instead of dev_to_node(napi->dev->dev.parent)? > + .dev = napi->dev->dev.parent, > + .netdev = napi->dev, > + .napi = napi, > + .dma_dir = DMA_FROM_DEVICE, > + .offset = LIBIE_SKB_HEADROOM, > + }; > + > + /* HW-writeable / syncable length per one page */ > + pp.max_len = LIBIE_RX_BUF_LEN(pp.offset); > + > + /* HW-writeable length per buffer */ > + bq->rx_buf_len = libie_rx_hw_len(&pp); > + /* Buffer size to allocate */ > + bq->truesize = roundup_pow_of_two(SKB_HEAD_ALIGN(pp.offset + > + bq->rx_buf_len)); > + > + bq->pp = page_pool_create(&pp); > + > + return PTR_ERR_OR_ZERO(bq->pp); > +} > +EXPORT_SYMBOL_NS_GPL(libie_rx_page_pool_create, LIBIE); > + ... > +/** > + * libie_rx_sync_for_cpu - synchronize or recycle buffer post DMA > + * @buf: buffer to process > + * @len: frame length from the descriptor > + * > + * Process the buffer after it's written by HW. The regular path is to > + * synchronize DMA for CPU, but in case of no data it will be immediately > + * recycled back to its PP. > + * > + * Return: true when there's data to process, false otherwise. > + */ > +static inline bool libie_rx_sync_for_cpu(const struct libie_rx_buffer *buf, > + u32 len) > +{ > + struct page *page = buf->page; > + > + /* Very rare, but possible case. The most common reason: > + * the last fragment contained FCS only, which was then > + * stripped by the HW. > + */ > + if (unlikely(!len)) { > + page_pool_recycle_direct(page->pp, page); > + return false; > + } > + > + page_pool_dma_sync_for_cpu(page->pp, page, buf->offset, len); Is there a reason why page_pool_dma_sync_for_cpu() is still used when page_pool_create() is called with PP_FLAG_DMA_SYNC_DEV flag? Isn't syncing already handled in page_pool core when when PP_FLAG_DMA_SYNC_DEV flag is set? > + > + return true; > +} > > /* O(1) converting i40e/ice/iavf's 8/10-bit hardware packet type to a parsed > * bitfield struct. >