From patchwork Mon Mar 10 12:06:10 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Ripard X-Patchwork-Id: 14009716 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 7B585C35FF2 for ; Mon, 10 Mar 2025 12:06:37 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A1B26280011; Mon, 10 Mar 2025 08:06:34 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 97C07280009; Mon, 10 Mar 2025 08:06:34 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7F91D280011; Mon, 10 Mar 2025 08:06:34 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 54104280009 for ; Mon, 10 Mar 2025 08:06:34 -0400 (EDT) Received: from smtpin19.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id E09FC120E50 for ; Mon, 10 Mar 2025 12:06:33 +0000 (UTC) X-FDA: 83205514308.19.56F3F93 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf18.hostedemail.com (Postfix) with ESMTP id 382BC1C0027 for ; Mon, 10 Mar 2025 12:06:31 +0000 (UTC) Authentication-Results: imf18.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=Fd8MwOI6; dmarc=pass (policy=quarantine) header.from=kernel.org; spf=pass (imf18.hostedemail.com: domain of mripard@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=mripard@kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1741608391; 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-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=enKjx+OOWBoUwDdFUerVAXIloV7XG+PNFVgoBGlQRtA=; b=CZ05iDUEqYHNAAuQdZiA1Ib0RaHDXc5+3VsVMjgTHJgzakQb3VcU0OEi55ndqpl3dQnI2r KcHlL4C7VuaV8+8DDZ9qS3ZnKqMO8IxzUjmtnsrE8xj6iESt4ssO+KUQBrmzxxaYh7pNW1 rqCdY7z7mfCpJnbDkodnAq4Qv6KBYNI= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1741608391; a=rsa-sha256; cv=none; b=dQdP8UrjcPGjD8rNRQXtNoaBx4krbl+4VQAB+mvX5o3heG7BVd9un11KQku95f/nSOBrpB ml5Saf7Ni+h80gbXZH0T6tGSQaU5QUxJXl2cWG36UqzelH0Cs6o6yjlgEptBlKeP48i2fl Rc93iLDbY4DWBHFt0JvgRUni+kty5hc= ARC-Authentication-Results: i=1; imf18.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=Fd8MwOI6; dmarc=pass (policy=quarantine) header.from=kernel.org; spf=pass (imf18.hostedemail.com: domain of mripard@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=mripard@kernel.org Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id 64EAB5C6122; Mon, 10 Mar 2025 12:04:13 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 59344C4CEED; Mon, 10 Mar 2025 12:06:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1741608389; bh=MHX69KTowxgUBaIq2U0nJk1Dh2Qpf931EJ3Gm20lDzU=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Fd8MwOI6Gr4g8BxyrBDoPe5CkR6LxWSS86cWJnaVKQOIKhwpyInBkAsVLEqZkg+Wb 92kysW/uU1DvJxhXvHDYryxQcl3F3RW8iCg7E3r49YcFoC0joeuTsIlwEf2tyc1CNQ bm5BMdZG6Wdemat7usQFs9xfPoIcoavti+dtm/KPA+l8DVWGohgUkhECakNgp7YyGk skf2qKyhtWb0v7FHzEEToVkb+KYzmvqOptZkOO/efesCe/PhU/vWxW3fznUnDzM+TC 4fJfyO59HAxcIcLLolGaqV65cB2wXS0MRBKmBdOFpi+X98F+pVQCGw+kCDg250k8t5 HlmHQEHBVHCbQ== From: Maxime Ripard Date: Mon, 10 Mar 2025 13:06:10 +0100 Subject: [PATCH RFC 04/12] dma: coherent: Provide accessor to dmem region MIME-Version: 1.0 Message-Id: <20250310-dmem-cgroups-v1-4-2984c1bc9312@kernel.org> References: <20250310-dmem-cgroups-v1-0-2984c1bc9312@kernel.org> In-Reply-To: <20250310-dmem-cgroups-v1-0-2984c1bc9312@kernel.org> To: Andrew Morton , Marek Szyprowski , Robin Murphy , Sumit Semwal , =?utf-8?q?Christian_K=C3=B6nig?= , Benjamin Gaignard , Brian Starkey , John Stultz , "T.J. Mercier" , Maarten Lankhorst , Thomas Zimmermann , David Airlie , Simona Vetter , Tomasz Figa , Mauro Carvalho Chehab Cc: Hans Verkuil , Laurent Pinchart , linux-mm@kvack.org, linux-kernel@vger.kernel.org, iommu@lists.linux.dev, linux-media@vger.kernel.org, dri-devel@lists.freedesktop.org, linaro-mm-sig@lists.linaro.org, Maxime Ripard X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2413; i=mripard@kernel.org; h=from:subject:message-id; bh=MHX69KTowxgUBaIq2U0nJk1Dh2Qpf931EJ3Gm20lDzU=; b=owGbwMvMwCX2+D1vfrpE4FHG02pJDOnnrm56E/7yxj4HNfHYzFPqWVsnsExuXHlz2uHEp0wf5 4tcjNRa11HCwiDGxSArpsgSI2y+JO7UrNedbHzzYOawMoEMYeDiFICJCF9k+B899/qseSLBUSsv u3VNuPdaYHmEpcNpV5fGg7++GJWmq6sx/LgUnqF8xVvbKyHQrUnf1ZLllVSE0cWvT9SnbvsRnOj NCAA= X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D X-Stat-Signature: gdx3qibryq3jfpehq353fimjfy47zf9d X-Rspam-User: X-Rspamd-Queue-Id: 382BC1C0027 X-Rspamd-Server: rspam04 X-HE-Tag: 1741608390-391908 X-HE-Meta: U2FsdGVkX1+C9TjQZxCYnpllVTrx762mosiVxQ9Iv4454iXK9tSNsEJqiwpVIqWzZfMXlwOgcDl3HxAS3uAlCJyla+DssPQxbuqmM912/aQkuBlPeqYZhrLQGNqYrnfuuVZ9z+PMGy2PInqDVjBeNtu5TdfqmLmYZuBRiXyxQhk2XO2dZXK8VUwHqGUb7ct+lRQdwp88w5zQJNv6Gm1sDaHJng6YwXcyjyde9tfagY2pKqtertgkywne9Vincnn2lnfbBWHSxndy3PnTF75HijGK0i0a05+0FfEoha58uPXvUy9han7sFvsqiOpjslJ0jlxWQUZNP5j1ONwthayMwxIfRup8l7mTayDElJq9w2meEMUC1isrBpqforAbjD7q9MYERQbe9JEhX8WScrUiTJ2wavriIqVsFuZ9JYApPWKCTpH4Pz9u/ilcF4+iMqD+ACpxLfGVcLy8QOAmyI4gyCUM5M5hdnZtSQaWEAun9mNwcdYuzHImpOfPaAODC2UkihJ9mXpOBmtaJA6MPET7zzc5JHfWZSEfaSedWiNFbr2LCI608e9XP/gOw00YrVIUuqZdOKeVSrWAcIvXHBmYBzoNJwPbEbm+JVPw0EUFukXb2dZAYncWbH7N5QeQo4Ijt1LCQYtTUPHFgEm0yfqSKItRmIoY2TlvBPdXeiIRgUaXv6RscozQU18jGhH7VHoD2QXGzhk0rw1S1whnLNIH0DkUt/kOf1H05nY3z8fsJ69XOO9xUpfqqC693XWALmtqEvQl0vMjO75N2nzBBgAKxS/GvuTU1QRqNe296twXLMj5NGrKn44ec2CQ1Ed83bfAMCJDgX4R04phvZS1YCsg6jsEkRn/4TdDZCZTnOzMiKa0EttmADVoN0R8ZQF1/DdBR9j1HixH92XQOX58BEMM8Rj3C7O4DEOu5/q6p8Ajs+RwaHPXU1OEkwIeWnli1Y8zFivZkhRHKIj1cWqU6Qp pJaph1Li H11ob/4iL2Er/esOglbevIa08VCEFKHaKVRSJK2IamHbMlAArKu5mi3ZW+LOHn2z2CPoJnaEFbGkZVuebFczhusDpOiweO7d94r2VemIbVrG5A/2TOtZB8o19EzWZv8vNozU+hcI8pxd0IT5wSFf1o1Q+F5PeAEz3WJ+rFnDt9eh+WbKYVCXlbg04QgT74Qi+3He8qoUYDc6yYhHStBjQsdX7Nmg9GYLyn14HfdbkLYBTC2mnrFaZG1ZMuuychL8KIjbyWKnpylZv0VAFy0QghE20UZufb1idVRiUVd9hJK+WIJj6ouM8YwlPOyMhNrmfE/xiy5Or9l6QLVA= 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: Consumers of the coherent DMA API will have to know which coherent region their device allocate from in order for them to charge the memory allocation in the right one. Let's provide an accessor for that region. Signed-off-by: Maxime Ripard --- include/linux/dma-map-ops.h | 11 +++++++++++ kernel/dma/coherent.c | 14 ++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/include/linux/dma-map-ops.h b/include/linux/dma-map-ops.h index e172522cd93651594607e16461fac56e4d67cbce..a2c10ed186efb6e08f64df0954b4d389589b6e35 100644 --- a/include/linux/dma-map-ops.h +++ b/include/linux/dma-map-ops.h @@ -199,10 +199,21 @@ static inline int dma_mmap_from_global_coherent(struct vm_area_struct *vma, { return 0; } #endif /* CONFIG_DMA_GLOBAL_POOL */ +#if IS_ENABLED(CONFIG_CGROUP_DMEM) && IS_ENABLED(CONFIG_DMA_DECLARE_COHERENT) +struct dmem_cgroup_region * +dma_coherent_get_dmem_cgroup_region(struct device *dev); +#else /* CONFIG_CGROUP_DMEM && CONFIG_DMA_DECLARE_COHERENT */ +static inline struct dmem_cgroup_region * +dma_coherent_get_dmem_cgroup_region(struct device *dev) +{ + return NULL; +} +#endif /* CONFIG_CGROUP_DMEM && CONFIG_DMA_DECLARE_COHERENT */ + int dma_common_get_sgtable(struct device *dev, struct sg_table *sgt, void *cpu_addr, dma_addr_t dma_addr, size_t size, unsigned long attrs); int dma_common_mmap(struct device *dev, struct vm_area_struct *vma, void *cpu_addr, dma_addr_t dma_addr, size_t size, diff --git a/kernel/dma/coherent.c b/kernel/dma/coherent.c index 2a2d515e43acbdef19c14d8840ed90e48e7ebb43..74c5ff5105110487770c1b73812eefe8b3d7eb3c 100644 --- a/kernel/dma/coherent.c +++ b/kernel/dma/coherent.c @@ -28,10 +28,24 @@ static inline struct dma_coherent_mem *dev_get_coherent_memory(struct device *de if (dev && dev->dma_mem) return dev->dma_mem; return NULL; } +#if IS_ENABLED(CONFIG_CGROUP_DMEM) +struct dmem_cgroup_region * +dma_coherent_get_dmem_cgroup_region(struct device *dev) +{ + struct dma_coherent_mem *mem; + + mem = dev_get_coherent_memory(dev); + if (!mem) + return NULL; + + return mem->dmem_cgroup_region; +} +#endif + static inline dma_addr_t dma_get_device_base(struct device *dev, struct dma_coherent_mem * mem) { if (mem->use_dev_dma_pfn_offset) return phys_to_dma(dev, PFN_PHYS(mem->pfn_base));