From patchwork Wed Apr 24 20:35:53 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tony Nguyen X-Patchwork-Id: 13642494 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 04D02C10F15 for ; Wed, 24 Apr 2024 20:36:36 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D4D538D002C; Wed, 24 Apr 2024 16:36:27 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id CD6896B02FE; Wed, 24 Apr 2024 16:36:27 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B014C8D002C; Wed, 24 Apr 2024 16:36:27 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 850116B02FD for ; Wed, 24 Apr 2024 16:36:27 -0400 (EDT) Received: from smtpin03.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 0520EC0F00 for ; Wed, 24 Apr 2024 20:36:26 +0000 (UTC) X-FDA: 82045583214.03.E6672AE Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.17]) by imf05.hostedemail.com (Postfix) with ESMTP id DD20C100014 for ; Wed, 24 Apr 2024 20:36:24 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=oGJzgQ6Z; spf=pass (imf05.hostedemail.com: domain of anthony.l.nguyen@intel.com designates 192.198.163.17 as permitted sender) smtp.mailfrom=anthony.l.nguyen@intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1713990985; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=Ka8JAISHeRU5+AxZ+Kgq2R/59nn/LYSWaGVYHi8sspc=; b=vGiasZrqg1IKgcShuBTc0T4O4PdC3H69In3uLTkFOhAuf5d3xX3aua+lnolXJpnsfukKz8 8MriDkmbn8L8ne5h1zSeGEyHsY7YU5DAzmjThBpevwwdfry18V4/uDYwkjZfvH6YBZsHVG 7//4jzqDGz/4898hbr92Un0uWZ27VOw= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=oGJzgQ6Z; spf=pass (imf05.hostedemail.com: domain of anthony.l.nguyen@intel.com designates 192.198.163.17 as permitted sender) smtp.mailfrom=anthony.l.nguyen@intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1713990985; a=rsa-sha256; cv=none; b=aQXuHZGe3zhJzRUOVD7IM8AQqg2sI7JLuxtMvAjvl9tgsjDiOrg83V2pOoHSZDGNG5d2/C rVF/n2RGMFNxcm9xvAtkGpgqhbAz6ViinVKRw3NTk0ayVochNrBMbziEvyA5oKAaPO2joY +ZEUBToLdyHoz66+wzE11YL5an50/Ww= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1713990985; x=1745526985; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=Wvi02HNh2hrm+wyxbuaUHtlFc/Lbovf6JCYmO1OYEWE=; b=oGJzgQ6Z8C06gRx2DFdDH/3WqNTNN2i8e4SU/3SKgWjDVTFLAAC+zKpR JuOM6rqq2tJDbcxU/6PJMDcjgEVs2lXu4V4R/Vg4TPxxbHrGCjInUpu8n 9eOwm+2lNx2JuGKHVLa1Z+O+M+Kh91g1qPeQCeHkUiQR7Gnqeu02jNUDT GOIqQ4Q/lwqJhJFBOGThNzMhT5uxDIY7rCLjMNEVGajIZhQKMQ0hhwVLA 6wfuaDOBA9bBc5zaJvAo+JBcJdGpvCmDDoxKqoZdNKf7SrHyEj4rc/Hnb VP5Iz5z3Q5ghA8TDh1/ThT1D1BdIpkYaUlBVdJ1Wkgq8uG2VR8E25NIls g==; X-CSE-ConnectionGUID: irCSSuWrQq6msc7GbVssRw== X-CSE-MsgGUID: o+rsRbiVQVG52bP9q/ITMA== X-IronPort-AV: E=McAfee;i="6600,9927,11054"; a="9511951" X-IronPort-AV: E=Sophos;i="6.07,227,1708416000"; d="scan'208";a="9511951" Received: from fmviesa003.fm.intel.com ([10.60.135.143]) by fmvoesa111.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Apr 2024 13:36:20 -0700 X-CSE-ConnectionGUID: E+r5NoRCQlysfC2wtLM+VQ== X-CSE-MsgGUID: KxPWp1YKSQiC4YjhzCtlcQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.07,227,1708416000"; d="scan'208";a="29314992" Received: from anguy11-upstream.jf.intel.com ([10.166.9.133]) by fmviesa003.fm.intel.com with ESMTP; 24 Apr 2024 13:36:19 -0700 From: Tony Nguyen To: davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com, netdev@vger.kernel.org Cc: Alexander Lobakin , anthony.l.nguyen@intel.com, hawk@kernel.org, linux-mm@kvack.org, przemyslaw.kitszel@intel.com, alexanderduyck@fb.com, ilias.apalodimas@linaro.org, linux-kernel@vger.kernel.org, linyunsheng@huawei.com, nex.sw.ncis.osdt.itp.upstreaming@intel.com, cl@linux.com, akpm@linux-foundation.org, vbabka@suse.cz Subject: [PATCH net-next v11 06/10] page_pool: add DMA-sync-for-CPU inline helper Date: Wed, 24 Apr 2024 13:35:53 -0700 Message-ID: <20240424203559.3420468-7-anthony.l.nguyen@intel.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20240424203559.3420468-1-anthony.l.nguyen@intel.com> References: <20240424203559.3420468-1-anthony.l.nguyen@intel.com> MIME-Version: 1.0 X-Stat-Signature: 91c3pqwzysreszidktx5oqcykairtgaj X-Rspamd-Queue-Id: DD20C100014 X-Rspamd-Server: rspam02 X-Rspam-User: X-HE-Tag: 1713990984-268719 X-HE-Meta: U2FsdGVkX18ZkJUOHQHYoCrJQS9NkVqRSw6VYSgDuRvH43SjH6jsl3BgjU98feofG6c0VVWj1E5afPMM9bAKQ6skzS8ur6+nIjlpIQcU1wlD1fbMpO4qL7SBEOezNnCEoICCOFDb+jDdm08N5dVxpgxwe4tpryYr9mlcvlL+RG5/itP5pFbO00Yo3645LL7G+FcWFeQyG1/L3OT0OUNVRnVfDKAtiq9TAGJY3oKvqzKSXjfR9b0ezTXbJLA9A4lMZYWj5RE9BX9SggM8ZJlPJS58+vmZjlTMyyQ5opEJiBekKP8OfAPBkAjgYujB/WtRzLi0z+SIt6KM9LS/WHETIcDYYq9nyF6RnlgPA98jY6PT22Ak3HIsB0l1FBxHy73Adp9VUohIfXEHgV4F38jl+kNrG3QkwNmYiVrndnoy4uTG4WMkFGEACj2w4uVVTXUkMseyWyy5TX4WLrntdtHDZtjKoe0aoOapz5Ik5AmYkIT6s3fFwK54f7KjVWRNwigrrjNwhCo+1yy5XQuekSoYQVs8M/R6WcnAtQKVzvcmagW5ZRKPbAb/40Fu184iK7QsRPqRYhzLfGXjflu8Y1RnnKqd5ktSRxOkrnD6mX7/Chx6p6SocgfLYGa7FKJ6lp6iRoZEMh+d4pUt2EYIMyPGrdRCv1xN9AKv3ghUTPySm6KmOZu2kidAzkGpo9uPB76AAXPvRxouKsjPLE1c+29BfpF03y6+qqbJUg7mNRJStSTIm5f4GLh1u7XpYFaTDM+LqFK1iIpsPnpQeI0SpDUBPIx/SO5fl5ci9O5LB541X/JDZlSHUL0NfUXAtB1QSQj3ufDaAa9/1fGLfzFpO/c45gHoS1dwPuINtXhJ+8JjxqIlYbS29laSm1uPW2M8Vh9n0pBpV6CM16RGR5f47vAepb+AWjr+C2F7dv0pu7BnQWnlk1QyqbymkFEdu7nHU0AqX9b7mtn8jKx63KtlXAY PPPmoIk+ ut/mPeiunLsrCo7wO/PD4GcJzSd3XALTOsFOzmdrwwOB8C/MLhzMaUzbtpgendyuZ/Vbs595egWMb7JxWgnqJWeXRFbjVDYneSsOVYs+KnAiTMA4seYzmBUkep2YsLk6uNQGUROtWTdVlXhWEVFhLIr6Uxw5ii6YuTVjf/xLWWrCdTXPOfY6R3CH4rhyQXKoM6cqAWipPvErL4ckdSMAhC2lc2M5S5gR83gi+VMyd4zz6vZ1FHq3ffzU0TpOS1Y8WBSahXOMayCRGptA= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: From: Alexander Lobakin Each driver is responsible for syncing buffers written by HW for CPU before accessing them. Almost each PP-enabled driver uses the same pattern, which could be shorthanded into a static inline to make driver code a little bit more compact. Introduce a simple helper which performs DMA synchronization for the size passed from the driver. It can be used even when the pool doesn't manage DMA-syncs-for-device, just make sure the page has a correct DMA address set via page_pool_set_dma_addr(). Signed-off-by: Alexander Lobakin Reviewed-by: Ilias Apalodimas Signed-off-by: Tony Nguyen --- include/net/page_pool/helpers.h | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/include/net/page_pool/helpers.h b/include/net/page_pool/helpers.h index c7bb06750e85..873631c79ab1 100644 --- a/include/net/page_pool/helpers.h +++ b/include/net/page_pool/helpers.h @@ -52,6 +52,8 @@ #ifndef _NET_PAGE_POOL_HELPERS_H #define _NET_PAGE_POOL_HELPERS_H +#include + #include #ifdef CONFIG_PAGE_POOL_STATS @@ -395,6 +397,28 @@ static inline bool page_pool_set_dma_addr(struct page *page, dma_addr_t addr) return false; } +/** + * page_pool_dma_sync_for_cpu - sync Rx page for CPU after it's written by HW + * @pool: &page_pool the @page belongs to + * @page: page to sync + * @offset: offset from page start to "hard" start if using PP frags + * @dma_sync_size: size of the data written to the page + * + * Can be used as a shorthand to sync Rx pages before accessing them in the + * driver. Caller must ensure the pool was created with ``PP_FLAG_DMA_MAP``. + * Note that this version performs DMA sync unconditionally, even if the + * associated PP doesn't perform sync-for-device. + */ +static inline void page_pool_dma_sync_for_cpu(const struct page_pool *pool, + const struct page *page, + u32 offset, u32 dma_sync_size) +{ + dma_sync_single_range_for_cpu(pool->p.dev, + page_pool_get_dma_addr(page), + offset + pool->p.offset, dma_sync_size, + page_pool_get_dma_dir(pool)); +} + static inline bool page_pool_put(struct page_pool *pool) { return refcount_dec_and_test(&pool->user_cnt);