From patchwork Mon Mar 10 12:06:07 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Ripard X-Patchwork-Id: 14009764 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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 94F1DC282DE for ; Mon, 10 Mar 2025 12:06:37 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id E0E9710E3FE; Mon, 10 Mar 2025 12:06:31 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=kernel.org header.i=@kernel.org header.b="c80JmNrl"; dkim-atps=neutral Received: from nyc.source.kernel.org (nyc.source.kernel.org [147.75.193.91]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3B26610E290 for ; Mon, 10 Mar 2025 12:06:23 +0000 (UTC) Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by nyc.source.kernel.org (Postfix) with ESMTP id A8CD1A45A9B; Mon, 10 Mar 2025 12:00:51 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 298F9C4CEE5; Mon, 10 Mar 2025 12:06:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1741608381; bh=puYqO1ssZSB45zTuCROfUk1S84tNyfEdp3lei2L6VhM=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=c80JmNrlsGJu+gfhNVupnj0VWlns+4/pVC3RM86KgB8KiTDIDjyOrmWfyN7yFImN8 D6sLjtXhwC8KZTSCgFwwOxxJ3hNFK/jbduYa9iB4I8Q1aOwbZS04rJqv3dxTRkO2BQ dMT3I6EpHbyEVI0Fkp/ZotA5TSglVBTxOyiMnerpv4wvuscaQ8bxgw2WZiDIMI6KAB bDvqXJZI26oybrcgKHJNt+Tgvn6Yy2rVurTL0ZzCKW+hPmFZX6lh6XWrbyj2UyBxWW Q5TZ9vZ5QecLw/zLuCdRP1IiehVa/M0mFyHsQ0iWaoQkz+1O32/BHyZnOnVMuniHI8 Gvw70tpiJo1hw== From: Maxime Ripard Date: Mon, 10 Mar 2025 13:06:07 +0100 Subject: [PATCH RFC 01/12] cma: Register dmem region for each cma region MIME-Version: 1.0 Message-Id: <20250310-dmem-cgroups-v1-1-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=2737; i=mripard@kernel.org; h=from:subject:message-id; bh=puYqO1ssZSB45zTuCROfUk1S84tNyfEdp3lei2L6VhM=; b=owGbwMvMwCX2+D1vfrpE4FHG02pJDOnnrm6QcLoZ+FMqrfl2ctqrL9OmXf+s871rqqPODINHk U8ldk/k6ChlYRDjYpAVU2SJETZfEndq1utONr55MHNYmUCGMHBxCsBErN8x/Hd9+sB2ccFetYu7 5+yPf/TV+aFc2Z/Zq+583HJu8v6FJzxmMzJsY3/16NtzE+Nb2dtWXe3Yb3b/v2PZ5QiZFqXqziO PK9/xAwA= X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Now that the dmem cgroup has been merged, we need to create memory regions for each allocator devices might allocate DMA memory from. Since CMA is one of these allocators, we need to create such a region. CMA can deal with multiple regions though, so we'll need to create a dmem region per CMA region. Signed-off-by: Maxime Ripard --- mm/cma.c | 14 +++++++++++++- mm/cma.h | 3 +++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/mm/cma.c b/mm/cma.c index de5bc0c81fc232bf82cd7ef22f6097059ab605e2..41a9ae907dcf69a73e963830d2c5f589dfc44f22 100644 --- a/mm/cma.c +++ b/mm/cma.c @@ -21,10 +21,11 @@ #include #include #include #include #include +#include #include #include #include #include @@ -89,16 +90,25 @@ static void cma_clear_bitmap(struct cma *cma, unsigned long pfn, spin_unlock_irqrestore(&cma->lock, flags); } static void __init cma_activate_area(struct cma *cma) { + struct dmem_cgroup_region *region; unsigned long base_pfn = cma->base_pfn, pfn; struct zone *zone; + region = dmem_cgroup_register_region(cma_get_size(cma), "cma/%s", cma->name); + if (IS_ERR(region)) + goto out_error; + +#ifdef CONFIG_CGROUP_DMEM + cma->dmem_cgrp_region = region; +#endif + cma->bitmap = bitmap_zalloc(cma_bitmap_maxno(cma), GFP_KERNEL); if (!cma->bitmap) - goto out_error; + goto unreg_dmem; /* * alloc_contig_range() requires the pfn range specified to be in the * same zone. Simplify by forcing the entire CMA resv range to be in the * same zone. @@ -124,10 +134,12 @@ static void __init cma_activate_area(struct cma *cma) return; not_in_zone: bitmap_free(cma->bitmap); +unreg_dmem: + dmem_cgroup_unregister_region(region); out_error: /* Expose all pages to the buddy, they are useless for CMA. */ if (!cma->reserve_pages_on_error) { for (pfn = base_pfn; pfn < base_pfn + cma->count; pfn++) free_reserved_page(pfn_to_page(pfn)); diff --git a/mm/cma.h b/mm/cma.h index 8485ef893e99d8da5ee41eb03194b5b00ff088ba..e05d3eb7c173f3fe75ad7808968925c77d190c80 100644 --- a/mm/cma.h +++ b/mm/cma.h @@ -29,10 +29,13 @@ struct cma { atomic64_t nr_pages_failed; /* the number of CMA page released */ atomic64_t nr_pages_released; /* kobject requires dynamic object */ struct cma_kobject *cma_kobj; +#endif +#ifdef CONFIG_CGROUP_DMEM + struct dmem_cgroup_region *dmem_cgrp_region; #endif bool reserve_pages_on_error; }; extern struct cma cma_areas[MAX_CMA_AREAS]; From patchwork Mon Mar 10 12:06:08 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Ripard X-Patchwork-Id: 14009763 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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 5A273C28B2E for ; Mon, 10 Mar 2025 12:06:36 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id CACE510E3F8; Mon, 10 Mar 2025 12:06:31 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=kernel.org header.i=@kernel.org header.b="qjqmtDkn"; dkim-atps=neutral Received: from nyc.source.kernel.org (nyc.source.kernel.org [147.75.193.91]) by gabe.freedesktop.org (Postfix) with ESMTPS id 66F0210E3FD for ; Mon, 10 Mar 2025 12:06:25 +0000 (UTC) Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by nyc.source.kernel.org (Postfix) with ESMTP id 5D5C5A45A99; Mon, 10 Mar 2025 12:00:54 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id D605EC4CEEA; Mon, 10 Mar 2025 12:06:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1741608384; bh=2YzE4b+Qi+V9hV6O5UCs1RYDTh6ddyq+BV8GpU5GQUE=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=qjqmtDknv7QUg/iDumEaO9V3eXLQMkJoagsIq89SSs+1N7acbPZXWD17ldw1M3TKe PMliu5u6NwaMsA3bT6dLrX1yjvUMkL0oA80IjJJi+hypDgd7j5qAw1hgGQZOFzqnnQ ZInbEz/FbqYH2OiTTl6wgDaSimir6JW+oaipvFPaSPGfPzNZcQJFhuNQjx2PxWGM71 byt+Kceqio0vbEhIzd9qn2qVk4H5w0YpfWJ3v9GO7/gbbjyEBPL1Gt9VJhZEXA0uy3 h0vVv5EM1AXM3tM05QphZ64QctN82e6k9D5EqX4V2bEzy/jSs9ncUhvlHxQevCbp3o FnRn1MYeFwzGA== From: Maxime Ripard Date: Mon, 10 Mar 2025 13:06:08 +0100 Subject: [PATCH RFC 02/12] cma: Provide accessor to cma dmem region MIME-Version: 1.0 Message-Id: <20250310-dmem-cgroups-v1-2-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=1700; i=mripard@kernel.org; h=from:subject:message-id; bh=2YzE4b+Qi+V9hV6O5UCs1RYDTh6ddyq+BV8GpU5GQUE=; b=owGbwMvMwCX2+D1vfrpE4FHG02pJDOnnrm5cH1a87eYU773J9zyPXm56VvU+f61h0oRf0qv/s ur96Ku/31HCwiDGxSArpsgSI2y+JO7UrNedbHzzYOawMoEMYeDiFICJBKgwfM87LWv75/xvll/+ 5bx9sb0aNRxHUvaX7arWY/y6UinlPSPDzmh9kYQtsY85Fz4RDTOKPGBzTFnnmvzZJDFRv3YRq1Z +AA== X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Consumers of the CMA API will have to know which CMA 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/cma.h | 9 +++++++++ mm/cma.c | 7 +++++++ 2 files changed, 16 insertions(+) diff --git a/include/linux/cma.h b/include/linux/cma.h index d15b64f51336df18d17a4097e27961fd1ac8d79f..d7b2f13918e536aeb8bccebc1934d36f2f0b4cf4 100644 --- a/include/linux/cma.h +++ b/include/linux/cma.h @@ -66,6 +66,15 @@ static inline bool cma_free_folio(struct cma *cma, const struct folio *folio) { return false; } #endif +#if IS_ENABLED(CONFIG_CGROUP_DMEM) +struct dmem_cgroup_region *cma_get_dmem_cgroup_region(struct cma *cma); +#else /* CONFIG_CGROUP_DMEM */ +static inline struct dmem_cgroup_region *cma_get_dmem_cgroup_region(struct cma *cma) +{ + return NULL; +} +#endif /* CONFIG_CGROUP_DMEM */ + #endif diff --git a/mm/cma.c b/mm/cma.c index 41a9ae907dcf69a73e963830d2c5f589dfc44f22..4973a8c6bacb9d4924f4969be07757cf631304b8 100644 --- a/mm/cma.c +++ b/mm/cma.c @@ -49,10 +49,17 @@ unsigned long cma_get_size(const struct cma *cma) const char *cma_get_name(const struct cma *cma) { return cma->name; } +#if IS_ENABLED(CONFIG_CGROUP_DMEM) +struct dmem_cgroup_region *cma_get_dmem_cgroup_region(struct cma *cma) +{ + return cma->dmem_cgrp_region; +} +#endif /* CONFIG_CGROUP_DMEM */ + static unsigned long cma_bitmap_aligned_mask(const struct cma *cma, unsigned int align_order) { if (align_order <= cma->order_per_bit) return 0; From patchwork Mon Mar 10 12:06:09 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Ripard X-Patchwork-Id: 14009761 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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 61964C2BA1B for ; Mon, 10 Mar 2025 12:06:32 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id CAAC710E3FD; Mon, 10 Mar 2025 12:06:30 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=kernel.org header.i=@kernel.org header.b="h1Zf+ZM4"; dkim-atps=neutral Received: from nyc.source.kernel.org (nyc.source.kernel.org [147.75.193.91]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2213F10E3FE for ; Mon, 10 Mar 2025 12:06:28 +0000 (UTC) Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by nyc.source.kernel.org (Postfix) with ESMTP id 173FFA45AB9; Mon, 10 Mar 2025 12:00:57 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 94331C4CEEE; Mon, 10 Mar 2025 12:06:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1741608387; bh=/UAL0ad49jcngOkD0mAWDzGa0d7QjTxM4lCTP33f5+4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=h1Zf+ZM4Dqtwu1U4J20iOEAVrrphW+yhBnDr5d+g3qRKv+nXi4+U4z+zGiscHqgIJ jDUbDDfaU0xN3s3IiJ5iYy/hVOmEzoC1iGGqEHNpCp8k0y3nWsV/3ZM9vHvXRwVPo1 2fPoTnlS3G3ZT7vefqxhxsjm0yC480gMCoBAP0CQzdHflDKowuMalbQpcBBFbJZR64 fHQHlaX7dk9rale95FWC1Laqog0FtGsZ3ujKmR1n5j79GfIaWO7FkejT1/Y5sUk/61 WwaKkKvQBPqb1WZjg6GrWJF4c5AgBt/pcVmc1nSiiEMRyE4HaNlngnYtHlQ3A2gPmA h8d4CfRauzyXQ== From: Maxime Ripard Date: Mon, 10 Mar 2025 13:06:09 +0100 Subject: [PATCH RFC 03/12] dma: coherent: Register dmem region for each coherent region MIME-Version: 1.0 Message-Id: <20250310-dmem-cgroups-v1-3-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=1940; i=mripard@kernel.org; h=from:subject:message-id; bh=/UAL0ad49jcngOkD0mAWDzGa0d7QjTxM4lCTP33f5+4=; b=owGbwMvMwCX2+D1vfrpE4FHG02pJDOnnrm7clPp7wa7PzbMebqtakmhdV8Nk65B7SrPty7XjK 546TVoQ31HKwiDGxSArpsgSI2y+JO7UrNedbHzzYOawMoEMYeDiFICJ6D9lZLjvfGnBE4fJ51rT XGQSXjNW8Zds/rg3XKTr0/Zcla3x38sZ/nsuda/5n79f3Cd/QfOtqvsy1hW2Zwvk/Y8uXZIpX33 FnAkA X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" There can be several coherent memory region in the system, and all of them might end up being used to allocate a DMA buffer. Let's register a dmem region for each of them to make sure we can track those allocations. Signed-off-by: Maxime Ripard --- kernel/dma/coherent.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/kernel/dma/coherent.c b/kernel/dma/coherent.c index 3b2bdca9f1d4b0274bf4874892b94730cd05c5df..2a2d515e43acbdef19c14d8840ed90e48e7ebb43 100644 --- a/kernel/dma/coherent.c +++ b/kernel/dma/coherent.c @@ -5,10 +5,11 @@ */ #include #include #include #include +#include #include #include struct dma_coherent_mem { void *virt_base; @@ -16,10 +17,12 @@ struct dma_coherent_mem { unsigned long pfn_base; int size; unsigned long *bitmap; spinlock_t spinlock; bool use_dev_dma_pfn_offset; + + struct dmem_cgroup_region *dmem_cgroup_region; }; static inline struct dma_coherent_mem *dev_get_coherent_memory(struct device *dev) { if (dev && dev->dma_mem) @@ -335,16 +338,25 @@ static phys_addr_t dma_reserved_default_memory_size __initdata; #endif static int rmem_dma_device_init(struct reserved_mem *rmem, struct device *dev) { if (!rmem->priv) { + struct dmem_cgroup_region *region; struct dma_coherent_mem *mem; mem = dma_init_coherent_memory(rmem->base, rmem->base, rmem->size, true); if (IS_ERR(mem)) return PTR_ERR(mem); + + region = dmem_cgroup_register_region(rmem->size, + "dma/coherent/%s", + rmem->name); + if (IS_ERR(region)) + return PTR_ERR(region); + + mem->dmem_cgroup_region = region; rmem->priv = mem; } dma_assign_coherent_memory(dev, rmem->priv); return 0; } 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: 14009767 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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 45733C28B2E for ; Mon, 10 Mar 2025 12:06:42 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 8CA7A10E405; Mon, 10 Mar 2025 12:06:41 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=kernel.org header.i=@kernel.org header.b="Fd8MwOI6"; dkim-atps=neutral Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by gabe.freedesktop.org (Postfix) with ESMTPS id 29AEC10E3FF for ; Mon, 10 Mar 2025 12:06:34 +0000 (UTC) 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-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" 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)); From patchwork Mon Mar 10 12:06:11 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Ripard X-Patchwork-Id: 14009765 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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id DF9A9C28B2E for ; Mon, 10 Mar 2025 12:06:38 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id E989610E290; Mon, 10 Mar 2025 12:06:36 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=kernel.org header.i=@kernel.org header.b="D51WTw1v"; dkim-atps=neutral Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2987B10E290 for ; Mon, 10 Mar 2025 12:06:34 +0000 (UTC) Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id 2F23F5C5FD8; Mon, 10 Mar 2025 12:04:16 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1D876C4CEF2; Mon, 10 Mar 2025 12:06:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1741608392; bh=Qro4bxDwIqe16ab1F2sB7BE0N7tDo7mzmoJ4I8TRdJo=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=D51WTw1vtvstBl3vA6JvF9mJlq8j1sR8WR9qqmKOGz+7DJOVHwT2Kyu8P57f2urTP CcYglBYtnuHm740POtZsbS+c/avUeR+UJF6Dm89rG4q/w96U7nc3KllbLk3dYYAbcm 7aVwrst/8lH5sL1VUq7gavKQxdqv4Mk/P5S/KKkTbQ2XeEY6Cf7iqmRIp8G7/jsn1G e2aM8hRmquBs3cACUrGaYZkeX0oqiLvQqGDvMp5TTuJpMfP1ECtFpniPlTgDzMm9da 30WiRVu14OryQa/TWUpQxatBX+kELTV279o/nPrT/8j5qdqoMbFDSDO8ckXUVJZGDO LopwJfsypVydw== From: Maxime Ripard Date: Mon, 10 Mar 2025 13:06:11 +0100 Subject: [PATCH RFC 05/12] dma: contiguous: Provide accessor to dmem region MIME-Version: 1.0 Message-Id: <20250310-dmem-cgroups-v1-5-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=1928; i=mripard@kernel.org; h=from:subject:message-id; bh=Qro4bxDwIqe16ab1F2sB7BE0N7tDo7mzmoJ4I8TRdJo=; b=owGbwMvMwCX2+D1vfrpE4FHG02pJDOnnrm6qvuS1X/e7kHRZT3uA1u0ltrJ7v62s3zidrfnc4 uvXokTKO0pZGMS4GGTFFFlihM2XxJ2a9bqTjW8ezBxWJpAhDFycAjCR1EhGht8NTNPURafMNOm7 kfjSL08gJ6V+/YO0W5df7s09yXj3x1SG/xXZzw7vC5rw1We/aXFph+FWnjcK3376mE4Ly39l8N1 SlhkA X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Consumers of the DMA contiguous API will have to know which region their device allocates 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 | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/include/linux/dma-map-ops.h b/include/linux/dma-map-ops.h index a2c10ed186efb6e08f64df0954b4d389589b6e35..bfc928d3bac37f3eece93d152abd57da513a1cc8 100644 --- a/include/linux/dma-map-ops.h +++ b/include/linux/dma-map-ops.h @@ -4,10 +4,11 @@ * It should not be included in drivers just using the DMA API. */ #ifndef _LINUX_DMA_MAP_OPS_H #define _LINUX_DMA_MAP_OPS_H +#include #include #include #include struct cma; @@ -153,10 +154,30 @@ static inline void dma_free_contiguous(struct device *dev, struct page *page, { __free_pages(page, get_order(size)); } #endif /* CONFIG_DMA_CMA*/ +#if IS_ENABLED(CONFIG_DMA_CMA) && IS_ENABLED(CONFIG_CGROUP_DMEM) + +static inline struct dmem_cgroup_region * +dma_contiguous_get_dmem_cgroup_region(struct device *dev) +{ + struct cma *cma = dev_get_cma_area(dev); + + return cma_get_dmem_cgroup_region(cma); +} + +#else /* IS_ENABLED(CONFIG_DMA_CMA) && IS_ENABLED(CONFIG_CGROUP_DMEM) */ + +static inline struct dmem_cgroup_region * +dma_contiguous_get_dmem_cgroup_region(struct device *dev) +{ + return NULL; +} + +#endif /* IS_ENABLED(CONFIG_DMA_CMA) && IS_ENABLED(CONFIG_CGROUP_DMEM) */ + #ifdef CONFIG_DMA_DECLARE_COHERENT int dma_declare_coherent_memory(struct device *dev, phys_addr_t phys_addr, dma_addr_t device_addr, size_t size); void dma_release_coherent_memory(struct device *dev); int dma_alloc_from_dev_coherent(struct device *dev, ssize_t size, From patchwork Mon Mar 10 12:06:12 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Ripard X-Patchwork-Id: 14009766 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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id EAE0EC28B30 for ; Mon, 10 Mar 2025 12:06:39 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 8A1C610E401; Mon, 10 Mar 2025 12:06:37 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=kernel.org header.i=@kernel.org header.b="rRGd3NeX"; dkim-atps=neutral Received: from nyc.source.kernel.org (nyc.source.kernel.org [147.75.193.91]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4F01710E290 for ; Mon, 10 Mar 2025 12:06:36 +0000 (UTC) Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by nyc.source.kernel.org (Postfix) with ESMTP id 4111DA44D04; Mon, 10 Mar 2025 12:01:05 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id C35B6C4CEE5; Mon, 10 Mar 2025 12:06:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1741608395; bh=jQ2wdxZs5p2NIjuWMi3iLvjazVfM2vh7CYHqVqwc7/c=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=rRGd3NeXpx61Qk2kJA4Y5n2Q3ZA+BJvtEjFQ3Vr+CVpbqcP/8rR3AFkNjG5P45Zt8 mwe1DdNAP/4Bqr1vSdvdznL2CKdgaOrx2ud+6b9yARnq+o3eVlAXcYdzeaU38WPwr8 tMD14rstWeRf+Do2zeMBh6cJpNroiToDa1JKS573TJz0Yu/ga6T3LdyW7e36vOnxOp 7qe4zpzJOGa/KZfrbsbB7RrHcwdsUMEmuT6zlhf44Zn3eip3+5xNdNri1TdoGPFJDT 8/Pu3aN1MFxGhOtHOzj3SAbtUOl585CZjt/LN6bsZz/TnrFv9JQbi8sBpZ12Ieulol iydyIfDrVutiA== From: Maxime Ripard Date: Mon, 10 Mar 2025 13:06:12 +0100 Subject: [PATCH RFC 06/12] dma: direct: Provide accessor to dmem region MIME-Version: 1.0 Message-Id: <20250310-dmem-cgroups-v1-6-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=1829; i=mripard@kernel.org; h=from:subject:message-id; bh=jQ2wdxZs5p2NIjuWMi3iLvjazVfM2vh7CYHqVqwc7/c=; b=owGbwMvMwCX2+D1vfrpE4FHG02pJDOnnrm7+1Z2lL3v925ULPVvvNW2MV9R68lgvc6ZXb1V9y MPHMR5sHaUsDGJcDLJiiiwxwuZL4k7Net3JxjcPZg4rE8gQBi5OAZhI33OGv8In5v5Qr3yoO5lx ifL90vVOjxitSlwP1Z7ymRN1r1hYgoeR4ey/JcGrjt25K8HcMWF/mZH/+8z3FSrbnUVY4tkXtC/ NYQUA X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Consumers of the direct DMA API will have to know which 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-direct.h | 2 ++ kernel/dma/direct.c | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/include/linux/dma-direct.h b/include/linux/dma-direct.h index d7e30d4f7503a898a456df8eedf6a2cd284c35ff..2dd7cbccfaeed81c18c67aae877417fe89f2f2f5 100644 --- a/include/linux/dma-direct.h +++ b/include/linux/dma-direct.h @@ -145,6 +145,8 @@ void dma_direct_free_pages(struct device *dev, size_t size, enum dma_data_direction dir); int dma_direct_supported(struct device *dev, u64 mask); dma_addr_t dma_direct_map_resource(struct device *dev, phys_addr_t paddr, size_t size, enum dma_data_direction dir, unsigned long attrs); +struct dmem_cgroup_region *dma_direct_get_dmem_cgroup_region(struct device *dev); + #endif /* _LINUX_DMA_DIRECT_H */ diff --git a/kernel/dma/direct.c b/kernel/dma/direct.c index 5b4e6d3bf7bcca8930877ba078aed4ce26828f06..ece1361077b6efeec5b202d838750afd967d473f 100644 --- a/kernel/dma/direct.c +++ b/kernel/dma/direct.c @@ -42,10 +42,18 @@ u64 dma_direct_get_required_mask(struct device *dev) u64 max_dma = phys_to_dma_direct(dev, phys); return (1ULL << (fls64(max_dma) - 1)) * 2 - 1; } +#if IS_ENABLED(CONFIG_CGROUP_DMEM) +struct dmem_cgroup_region * +dma_direct_get_dmem_cgroup_region(struct device *dev) +{ + return dma_contiguous_get_dmem_cgroup_region(dev); +} +#endif + static gfp_t dma_direct_optimal_gfp_mask(struct device *dev, u64 *phys_limit) { u64 dma_limit = min_not_zero( dev->coherent_dma_mask, dev->bus_dma_limit); From patchwork Mon Mar 10 12:06:13 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Ripard X-Patchwork-Id: 14009768 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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id C1DA3C2BA1B for ; Mon, 10 Mar 2025 12:06:43 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id E91CF10E408; Mon, 10 Mar 2025 12:06:42 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=kernel.org header.i=@kernel.org header.b="mYulIu1z"; dkim-atps=neutral Received: from nyc.source.kernel.org (nyc.source.kernel.org [147.75.193.91]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9F37B10E403 for ; Mon, 10 Mar 2025 12:06:39 +0000 (UTC) Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by nyc.source.kernel.org (Postfix) with ESMTP id 81425A45AAF; Mon, 10 Mar 2025 12:01:08 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 97C23C4CEF0; Mon, 10 Mar 2025 12:06:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1741608398; bh=WpLKbe0/o+ohbkFGUscUlJWaO731RUjLbL+Wu9pvI1U=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=mYulIu1z9ZEz5XkKZ5ATnLojzzD1yagpF3IUFzymoYKt1M64RhIURBCwQz6UGL9jx dk6SmnsmVNg7Ya2ZC8vhkX5HICDga1QdItNg2jKcZmRbM3Dvf6zEZ6FlXL88g4Pxhe 9hCpWzILTutINy+exPSa+BRv3t1IjGB1EMZy+SOiEXOEAm2vXSiaC0D7npv0EN+FS7 cyc49Rq6YCERbGqwe/I2kU3FX6yw62UbzY5H/PP2Smt77flePvWsu/3tOiRNiJzE+0 ASC5Nns3DUof7bktIcF4B6u3Z9uLN8X4wCyQfupoMhCvY37rSccXvJ5zGeZt/RfBI3 agHoPHP+GrWlA== From: Maxime Ripard Date: Mon, 10 Mar 2025 13:06:13 +0100 Subject: [PATCH RFC 07/12] dma: Create default dmem region for DMA allocations MIME-Version: 1.0 Message-Id: <20250310-dmem-cgroups-v1-7-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=2077; i=mripard@kernel.org; h=from:subject:message-id; bh=WpLKbe0/o+ohbkFGUscUlJWaO731RUjLbL+Wu9pvI1U=; b=owGbwMvMwCX2+D1vfrpE4FHG02pJDOnnrm6xM/5i39P7QfPABed6dt2fzyxeLHihdV/S9tw9B dnH5m/EOkpZGMS4GGTFFFlihM2XxJ2a9bqTjW8ezBxWJpAhDFycAjCRTeUM/73LJk6x+PrwzCb3 CAWZ6DNLu2dcEL352d8z2iVgslmKngEjwxudlx/MBE50LEqRPi0r8LcjVG/iNCV3ptV2gT4ydX2 m/AA= X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Some DMA allocations are not going to be performed through dedicated sub-allocators but using the default path. We need to create a default region to track those as well. Signed-off-by: Maxime Ripard --- kernel/dma/mapping.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/kernel/dma/mapping.c b/kernel/dma/mapping.c index cda127027e48a757f2d9fb04a49249d2b0238871..7bc3957512fd84e0bf3a89c210338be72457b5c9 100644 --- a/kernel/dma/mapping.c +++ b/kernel/dma/mapping.c @@ -5,10 +5,11 @@ * Copyright (c) 2006 SUSE Linux Products GmbH * Copyright (c) 2006 Tejun Heo */ #include /* for max_pfn */ #include +#include #include #include #include #include #include @@ -25,10 +26,14 @@ defined(CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU) || \ defined(CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU_ALL) bool dma_default_coherent = IS_ENABLED(CONFIG_ARCH_DMA_DEFAULT_COHERENT); #endif +#if IS_ENABLED(CONFIG_CGROUP_DMEM) +static struct dmem_cgroup_region *default_dmem_cgroup_region; +#endif + /* * Managed DMA API */ struct dma_devres { size_t size; @@ -587,10 +592,28 @@ u64 dma_get_required_mask(struct device *dev) */ return DMA_BIT_MASK(32); } EXPORT_SYMBOL_GPL(dma_get_required_mask); +#if IS_ENABLED(CONFIG_CGROUP_DMEM) +static int __init dma_init_dmem_cgroup(void) +{ + struct dmem_cgroup_region *region; + + if (default_dmem_cgroup_region) + return -EBUSY; + + region = dmem_cgroup_register_region(U64_MAX, "dma/global"); + if (IS_ERR(region)) + return PTR_ERR(region); + + default_dmem_cgroup_region = region; + return 0; +} +core_initcall(dma_init_dmem_cgroup); +#endif + void *dma_alloc_attrs(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t flag, unsigned long attrs) { const struct dma_map_ops *ops = get_dma_ops(dev); void *cpu_addr; From patchwork Mon Mar 10 12:06:14 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Ripard X-Patchwork-Id: 14009769 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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 9BC83C28B30 for ; Mon, 10 Mar 2025 12:06:43 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id E913B10E406; Mon, 10 Mar 2025 12:06:42 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=kernel.org header.i=@kernel.org header.b="jYajrhN2"; dkim-atps=neutral Received: from nyc.source.kernel.org (nyc.source.kernel.org [147.75.193.91]) by gabe.freedesktop.org (Postfix) with ESMTPS id B56C810E406 for ; Mon, 10 Mar 2025 12:06:41 +0000 (UTC) Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by nyc.source.kernel.org (Postfix) with ESMTP id B1B80A45AF0; Mon, 10 Mar 2025 12:01:10 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 41403C4CEE5; Mon, 10 Mar 2025 12:06:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1741608400; bh=2NdYbFXqIu49ZMyAqVsyt9MyeVTM3FWe9Y2AJpwIrVQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=jYajrhN2FOK3TJWdSOSKnA5oMw9VDNtRvtBCins3Bmp0nNI7ucd/hvhBSHpBuqXnB DZxNW1+a2aHyxnK0A9Fhi801grDQHgLQbP9q6YSvN3TyjhiipsaoEXi4iVGNfQITLV z/f4jxpJmEAmk5mySweb9jjh8hKeTrCnr+SrE/WTTFy9N0QcT8yeoI77qcDcyCyy2E vRAFsOF5L80KPBdeA+eL3rszThdAdsNd0ShRgdkd4DQaIabptpC91PIrJzNzl6Pr0F DOm2EIZIbujiQev4qPzWpV6fKuoappVRYnSB2WD0v78u+e0i5g1HBvmQMQ9KMJUWuR zRSpjxAyz59eg== From: Maxime Ripard Date: Mon, 10 Mar 2025 13:06:14 +0100 Subject: [PATCH RFC 08/12] dma: Provide accessor to dmem region MIME-Version: 1.0 Message-Id: <20250310-dmem-cgroups-v1-8-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=2370; i=mripard@kernel.org; h=from:subject:message-id; bh=2NdYbFXqIu49ZMyAqVsyt9MyeVTM3FWe9Y2AJpwIrVQ=; b=owGbwMvMwCX2+D1vfrpE4FHG02pJDOnnrm75peFiuvT/C+0FG88Ve/+4tJ7nMofXWwHp6uCju 0uFJq8621HKwiDGxSArpsgSI2y+JO7UrNedbHzzYOawMoEMYeDiFICJHOhgZPi5Vj9p5r1FnYXK 4WFVDrwO+/8m2DX4nU/0zHXaXl8cMIuR4VS1X+61qKWurquOzrrzfObMiw++peSIhMTvsi6Keiw jzAUA X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Consumers of the DMA API will have to know which DMA 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-mapping.h | 11 +++++++++++ kernel/dma/mapping.c | 16 ++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h index b79925b1c4333ce25e66c57d8ac1dae5c7b7fe37..75f5ca1d11a6297720742cea1359c7f28c23d741 100644 --- a/include/linux/dma-mapping.h +++ b/include/linux/dma-mapping.h @@ -351,10 +351,21 @@ static inline bool dma_need_sync(struct device *dev, dma_addr_t dma_addr) { return false; } #endif /* !CONFIG_HAS_DMA || !CONFIG_DMA_NEED_SYNC */ +#if IS_ENABLED(CONFIG_HAS_DMA) && IS_ENABLED(CONFIG_CGROUP_DMEM) +struct dmem_cgroup_region * +dma_get_dmem_cgroup_region(struct device *dev); +#else +static inline struct dmem_cgroup_region * +dma_get_dmem_cgroup_region(struct device *dev) +{ + return NULL; +} +#endif + struct page *dma_alloc_pages(struct device *dev, size_t size, dma_addr_t *dma_handle, enum dma_data_direction dir, gfp_t gfp); void dma_free_pages(struct device *dev, size_t size, struct page *page, dma_addr_t dma_handle, enum dma_data_direction dir); int dma_mmap_pages(struct device *dev, struct vm_area_struct *vma, diff --git a/kernel/dma/mapping.c b/kernel/dma/mapping.c index 7bc3957512fd84e0bf3a89c210338be72457b5c9..e45d63700183acb03c779f969ae33803dcf5cf1b 100644 --- a/kernel/dma/mapping.c +++ b/kernel/dma/mapping.c @@ -608,10 +608,26 @@ static int __init dma_init_dmem_cgroup(void) default_dmem_cgroup_region = region; return 0; } core_initcall(dma_init_dmem_cgroup); + +struct dmem_cgroup_region * +dma_get_dmem_cgroup_region(struct device *dev) +{ + struct dmem_cgroup_region *region; + + region = dma_coherent_get_dmem_cgroup_region(dev); + if (region) + return region; + + if (dma_alloc_direct(dev, get_dma_ops(dev))) + return dma_direct_get_dmem_cgroup_region(dev); + + return default_dmem_cgroup_region; +} +EXPORT_SYMBOL(dma_get_dmem_cgroup_region); #endif void *dma_alloc_attrs(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t flag, unsigned long attrs) { From patchwork Mon Mar 10 12:06:15 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Ripard X-Patchwork-Id: 14009770 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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id B69D7C2BA1B for ; Mon, 10 Mar 2025 12:06:48 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 1EDD910E3FF; Mon, 10 Mar 2025 12:06:48 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=kernel.org header.i=@kernel.org header.b="c4uygRPz"; dkim-atps=neutral Received: from nyc.source.kernel.org (nyc.source.kernel.org [147.75.193.91]) by gabe.freedesktop.org (Postfix) with ESMTPS id 98F0010E40A for ; Mon, 10 Mar 2025 12:06:44 +0000 (UTC) Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by nyc.source.kernel.org (Postfix) with ESMTP id 7F3D6A458B2; Mon, 10 Mar 2025 12:01:13 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id D3DF7C4CEED; Mon, 10 Mar 2025 12:06:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1741608403; bh=bMCIvn+7jf6RMiYjEqkNRC/cCXSSxQerkW6ogfdek4M=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=c4uygRPz6bHzOv7JaNd0BKTZdiJEeNNcAfN7JlO1sp451josGYGwOPeVSWBgd+N12 QOw5/LBuUY8o2XXn8mk3aPWeFcHLDfF4dARIrSn4peA4LCdlIglwRYGe80L9TOm5Nh fvWbAvaafZU7hsRYue9WrYK6wXtSF1uVl//tLeDIrXiOtET1ST1idAgk0sOcpN66Qo XMSEACHHxWrEhXDsq2mFwDakCRpfhdwUZuF+V9Ym0SbSNxk+GszSTQGzQutE5uF9Dj 6rEwFHnGHfJlI3b/8CaV0AU7g2mk6SMB2CX3lBmI1fBYXzaIJa5H7iLWESsMAH0nBP iQ7NEvKYLtyYw== From: Maxime Ripard Date: Mon, 10 Mar 2025 13:06:15 +0100 Subject: [PATCH RFC 09/12] dma-buf: Clear cgroup accounting on release MIME-Version: 1.0 Message-Id: <20250310-dmem-cgroups-v1-9-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=1990; i=mripard@kernel.org; h=from:subject:message-id; bh=bMCIvn+7jf6RMiYjEqkNRC/cCXSSxQerkW6ogfdek4M=; b=owGbwMvMwCX2+D1vfrpE4FHG02pJDOnnrm5t/yVnmCnbdWIBb4tvabPfyl9udfO64jiO/quN4 GNJyz/dUcrCIMbFICumyBIjbL4k7tSs151sfPNg5rAygQxh4OIUgInsOsLIcPDV65S2uVZWc348 +bw4wjdK8HDKtbceyZUZ2688natTF8zI8LhqgYHRIbd71bsl7t4JEb5RWWed883UeuOfx6vX9BW 8ZwUA X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" In order to clean thing up when dma-heaps will allocate and register buffers in the dev cgroup, let's uncharge a released buffer for any (optional) cgroup controller. Signed-off-by: Maxime Ripard --- drivers/dma-buf/dma-buf.c | 7 +++++++ include/linux/dma-buf.h | 5 +++++ 2 files changed, 12 insertions(+) diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c index 5baa83b855156516a0a766bee0789b122473efb3..a95eef17f193454b018dc8177ddfd434d7b64473 100644 --- a/drivers/dma-buf/dma-buf.c +++ b/drivers/dma-buf/dma-buf.c @@ -11,10 +11,11 @@ * refining of this idea. */ #include #include +#include #include #include #include #include #include @@ -97,10 +98,16 @@ static void dma_buf_release(struct dentry *dentry) * * dmabuf->cb_in/out.active are non-0 despite no pending fence callback */ BUG_ON(dmabuf->cb_in.active || dmabuf->cb_out.active); dma_buf_stats_teardown(dmabuf); + +#ifdef CONFIG_CGROUP_DMEM + if (dmabuf->cgroup_pool) + dmem_cgroup_uncharge(dmabuf->cgroup_pool, dmabuf->size); +#endif + dmabuf->ops->release(dmabuf); if (dmabuf->resv == (struct dma_resv *)&dmabuf[1]) dma_resv_fini(dmabuf->resv); diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h index 36216d28d8bdc01a9c9c47e27c392413f7f6c5fb..111ca5a738ae0a816ba1551313dfb0a958720b6c 100644 --- a/include/linux/dma-buf.h +++ b/include/linux/dma-buf.h @@ -437,10 +437,15 @@ struct dma_buf { struct dma_fence_cb cb; wait_queue_head_t *poll; __poll_t active; } cb_in, cb_out; + +#ifdef CONFIG_CGROUP_DMEM + struct dmem_cgroup_pool_state *cgroup_pool; +#endif + #ifdef CONFIG_DMABUF_SYSFS_STATS /** * @sysfs_entry: * * For exposing information about this buffer in sysfs. See also From patchwork Mon Mar 10 12:06:16 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Ripard X-Patchwork-Id: 14009771 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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 010DDC28B2E for ; Mon, 10 Mar 2025 12:06:50 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 5F9AF10E40A; Mon, 10 Mar 2025 12:06:50 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=kernel.org header.i=@kernel.org header.b="qP1HaEej"; dkim-atps=neutral Received: from nyc.source.kernel.org (nyc.source.kernel.org [147.75.193.91]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3908710E3FF for ; Mon, 10 Mar 2025 12:06:47 +0000 (UTC) Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by nyc.source.kernel.org (Postfix) with ESMTP id 342E6A4599F; Mon, 10 Mar 2025 12:01:16 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 881E4C4CEF1; Mon, 10 Mar 2025 12:06:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1741608406; bh=NXKrlxOk8nYj3oekFD8GiKq9/u4PNdR9ojkDiIpqr8Y=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=qP1HaEejl3XbM+OS0ZKFaaD86jNWg/27gajc0J541SsR7ZFPhKVTG3ZBJjpoQMliu NOawWgEwaEwZ01wa9RTULuZgGivrBBZtKlDVAMzRxJDPnZAoKrNIUz/OMqTxQf68MV oyaDfZg98cxeS9aToEfD74iRQdNbpy6aqcpqBlADSmFpsqUKq0cg/k6/MaH2vfGyKW 6HCbzZuIqVzOOtJXoG2bQpZofznzIf+76AEZdiodRQm3L1e2cymwgusOb2W1/8vrC2 M1i0C9qr6qkLBJrKtljZQ4kUeY/hyStMuDlAMt7Sh2OLM1pXA2nCBEzZQs2jdbpcFl hz5IMtNseNp+g== From: Maxime Ripard Date: Mon, 10 Mar 2025 13:06:16 +0100 Subject: [PATCH RFC 10/12] dma-buf: cma: Account for allocations in dmem cgroup MIME-Version: 1.0 Message-Id: <20250310-dmem-cgroups-v1-10-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=2422; i=mripard@kernel.org; h=from:subject:message-id; bh=NXKrlxOk8nYj3oekFD8GiKq9/u4PNdR9ojkDiIpqr8Y=; b=owGbwMvMwCX2+D1vfrpE4FHG02pJDOnnrm7790W4odtyuqKjtsCfpWvTZgqvnjx9dp4mw4Vnx om7O58YdpSyMIhxMciKKbLECJsviTs163UnG988mDmsTCBDGLg4BWAi4sUM/+OM1uZ9mxg4/6n9 j+bjKyIYp3zkEPha/IbRz9lBedkrhq0M/5Pe2ZUEOkbWVapK+j80WiT1S7Ppivsji5iFe/Z+XWB nwgEA X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Now that we have a DMEM region per CMA region, we can track the allocations of the CMA heap through DMEM. Signed-off-by: Maxime Ripard --- drivers/dma-buf/heaps/cma_heap.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/drivers/dma-buf/heaps/cma_heap.c b/drivers/dma-buf/heaps/cma_heap.c index 9512d050563a9ad0a735230c4870c3d3b3b01b25..4951c41db3ba0cbd903b6d62787f51b83f4a1e7e 100644 --- a/drivers/dma-buf/heaps/cma_heap.c +++ b/drivers/dma-buf/heaps/cma_heap.c @@ -7,10 +7,11 @@ * * Also utilizing parts of Andrew Davis' SRAM heap: * Copyright (C) 2019 Texas Instruments Incorporated - http://www.ti.com/ * Andrew F. Davis */ +#include #include #include #include #include #include @@ -276,23 +277,31 @@ static struct dma_buf *cma_heap_allocate(struct dma_heap *heap, unsigned long len, u32 fd_flags, u64 heap_flags) { struct cma_heap *cma_heap = dma_heap_get_drvdata(heap); + struct dmem_cgroup_pool_state *pool; struct cma_heap_buffer *buffer; DEFINE_DMA_BUF_EXPORT_INFO(exp_info); size_t size = PAGE_ALIGN(len); pgoff_t pagecount = size >> PAGE_SHIFT; unsigned long align = get_order(size); struct page *cma_pages; struct dma_buf *dmabuf; int ret = -ENOMEM; pgoff_t pg; + ret = dmem_cgroup_try_charge(cma_get_dmem_cgroup_region(cma_heap->cma), + size, &pool, NULL); + if (ret) + return ERR_PTR(ret); + buffer = kzalloc(sizeof(*buffer), GFP_KERNEL); - if (!buffer) - return ERR_PTR(-ENOMEM); + if (!buffer) { + ret = -ENOMEM; + goto uncharge_cgroup; + } INIT_LIST_HEAD(&buffer->attachments); mutex_init(&buffer->lock); buffer->len = size; @@ -348,18 +357,23 @@ static struct dma_buf *cma_heap_allocate(struct dma_heap *heap, dmabuf = dma_buf_export(&exp_info); if (IS_ERR(dmabuf)) { ret = PTR_ERR(dmabuf); goto free_pages; } + + dmabuf->cgroup_pool = pool; + return dmabuf; free_pages: kfree(buffer->pages); free_cma: cma_release(cma_heap->cma, cma_pages, pagecount); free_buffer: kfree(buffer); +uncharge_cgroup: + dmem_cgroup_uncharge(pool, len); return ERR_PTR(ret); } static const struct dma_heap_ops cma_heap_ops = { From patchwork Mon Mar 10 12:06:17 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Ripard X-Patchwork-Id: 14009772 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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 34C8CC282DE for ; Mon, 10 Mar 2025 12:06:54 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 9B7EB10E403; Mon, 10 Mar 2025 12:06:53 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=kernel.org header.i=@kernel.org header.b="JvjKiebn"; dkim-atps=neutral Received: from nyc.source.kernel.org (nyc.source.kernel.org [147.75.193.91]) by gabe.freedesktop.org (Postfix) with ESMTPS id 622CE10E40C for ; Mon, 10 Mar 2025 12:06:50 +0000 (UTC) Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by nyc.source.kernel.org (Postfix) with ESMTP id 50BE0A45AEF; Mon, 10 Mar 2025 12:01:19 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6AC88C4CEE5; Mon, 10 Mar 2025 12:06:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1741608408; bh=Qsf/4cmIwOEBWG+KEjMk+VXbjNJ+CMnPc++S7Uaux44=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=JvjKiebn6NPadaYopEROu2Wk78rdDJEvtjKTS7MkrdREUkAJTHFkGfSG4VjpCAIxq ttK+MqSZtwngZd9TC+nTvymEMN2Z1f0hr3lqfy10jJxQB3UHQr0XgrNUnK9i23DUrF zc1zrnOde4h44bOj69AwItqo98bkHzWaQhTwoWTxr+M2rJUk3HZWf07AceA84I0hfb 2drmUOmf6Ggo0nxrxKKe7iAypbLa5169lUFwKDmlZJPUPxw1F+kK0y3X8xeKel9j2a h6BqBn4N7fH7hWDFgvGuFE6oAcgmi2G1iKoh52DDhw/HW4x6dTT39dvzW4+xn6sBHC nr6zPuPrdq+aQ== From: Maxime Ripard Date: Mon, 10 Mar 2025 13:06:17 +0100 Subject: [PATCH RFC 11/12] drm/gem: Add cgroup memory accounting MIME-Version: 1.0 Message-Id: <20250310-dmem-cgroups-v1-11-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=3032; i=mripard@kernel.org; h=from:subject:message-id; bh=Qsf/4cmIwOEBWG+KEjMk+VXbjNJ+CMnPc++S7Uaux44=; b=owGbwMvMwCX2+D1vfrpE4FHG02pJDOnnrm7L3LlrwvOPawsFQufNnL1sEuPDM1N2vlzGOm3i9 7c1F51fc3aUsjCIcTHIiimyxAibL4k7Net1JxvfPJg5rEwgQxi4OAVgIpn+jAwNq5b4NK817Srv kizRirktpJJcwtdd9bHHKpDL4wLbQmlGhifBexJPKh1i3RB2LvSO9UxWBz/dvOu+Ovv4ZRNaNvt LMwEA X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" In order to support any device using the GEM support, let's charge any GEM DMA allocation into the dmem cgroup. Signed-off-by: Maxime Ripard --- drivers/gpu/drm/drm_gem.c | 5 +++++ drivers/gpu/drm/drm_gem_dma_helper.c | 6 ++++++ include/drm/drm_device.h | 1 + include/drm/drm_gem.h | 2 ++ 4 files changed, 14 insertions(+) diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c index ee811764c3df4b4e9c377a66afd4967512ba2001..e04733cb49353cf3ff9672d883b106a083f80d86 100644 --- a/drivers/gpu/drm/drm_gem.c +++ b/drivers/gpu/drm/drm_gem.c @@ -108,10 +108,11 @@ drm_gem_init(struct drm_device *dev) dev->vma_offset_manager = vma_offset_manager; drm_vma_offset_manager_init(vma_offset_manager, DRM_FILE_PAGE_OFFSET_START, DRM_FILE_PAGE_OFFSET_SIZE); + return drmm_add_action(dev, drm_gem_init_release, NULL); } /** * drm_gem_object_init_with_mnt - initialize an allocated shmem-backed GEM @@ -973,10 +974,14 @@ drm_gem_release(struct drm_device *dev, struct drm_file *file_private) * drm_gem_object_init(). */ void drm_gem_object_release(struct drm_gem_object *obj) { + + if (obj->cgroup_pool_state) + dmem_cgroup_uncharge(obj->cgroup_pool_state, obj->size); + if (obj->filp) fput(obj->filp); drm_gem_private_object_fini(obj); diff --git a/drivers/gpu/drm/drm_gem_dma_helper.c b/drivers/gpu/drm/drm_gem_dma_helper.c index 16988d316a6dc702310fa44c15c92dc67b82802b..6236feb67ddd6338f0f597a0606377e0352ca6ed 100644 --- a/drivers/gpu/drm/drm_gem_dma_helper.c +++ b/drivers/gpu/drm/drm_gem_dma_helper.c @@ -104,10 +104,16 @@ __drm_gem_dma_create(struct drm_device *drm, size_t size, bool private) if (ret) { drm_gem_object_release(gem_obj); goto error; } + ret = dmem_cgroup_try_charge(dma_get_dmem_cgroup_region(drm->dev), + size, + &dma_obj->base.cgroup_pool_state, NULL); + if (ret) + goto error; + return dma_obj; error: kfree(dma_obj); return ERR_PTR(ret); diff --git a/include/drm/drm_device.h b/include/drm/drm_device.h index c91f87b5242d7a499917eb4aeb6ca8350f856eb3..58987f39ba8718eb768f6261fb0a1fbf16b38549 100644 --- a/include/drm/drm_device.h +++ b/include/drm/drm_device.h @@ -1,8 +1,9 @@ #ifndef _DRM_DEVICE_H_ #define _DRM_DEVICE_H_ +#include #include #include #include #include diff --git a/include/drm/drm_gem.h b/include/drm/drm_gem.h index fdae947682cd0b7b06db5e35e120f049a0f30179..95fe8ed48a26204020bb47d6074689829c410465 100644 --- a/include/drm/drm_gem.h +++ b/include/drm/drm_gem.h @@ -430,10 +430,12 @@ struct drm_gem_object { * @lru: * * The current LRU list that the GEM object is on. */ struct drm_gem_lru *lru; + + struct dmem_cgroup_pool_state *cgroup_pool_state; }; /** * DRM_GEM_FOPS - Default drm GEM file operations * From patchwork Mon Mar 10 12:06:18 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Ripard X-Patchwork-Id: 14009773 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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id CB919C2BA1B for ; Mon, 10 Mar 2025 12:06:55 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 2CFF710E414; Mon, 10 Mar 2025 12:06:55 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=kernel.org header.i=@kernel.org header.b="oEVjNg3f"; dkim-atps=neutral Received: from nyc.source.kernel.org (nyc.source.kernel.org [147.75.193.91]) by gabe.freedesktop.org (Postfix) with ESMTPS id A80EB10E403 for ; Mon, 10 Mar 2025 12:06:52 +0000 (UTC) Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by nyc.source.kernel.org (Postfix) with ESMTP id A4F2BA4599F; Mon, 10 Mar 2025 12:01:21 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0B990C4CEE5; Mon, 10 Mar 2025 12:06:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1741608411; bh=7pH3VC/kTZvZyXEwWyZXDmfZRfenpkkRjJncy/YaV3A=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=oEVjNg3fibaFagVdlIbk1zBQgRtK4seXDgW44TGzwkQ40PmG4N59lYT+i2hjQ5l03 NA6f1fLNP8lcsn9t2x7thW/+0wFqWl1lNQwn5emhsN+Qm5+zGTO8TqmVCBlLiZNaiF OgPH/VIaPn14p9iOs4NrV5TAKskCUJoMdusz5wcDhMolyNdyGa1OnKb1njCHwNN+Wn BtXSC8CYNyCjeNV/fE609L74FQslohr/mle3ggF1fH8TF2nA4YnRFcGyCVPmS4+Plf xK+5UbDA3sytdfkGm4HmEcfHeLQdRJwFr4I+93ghEJCXwvZi1+K+ouJwqyEt/fcySB tFZezpIY8/SOg== From: Maxime Ripard Date: Mon, 10 Mar 2025 13:06:18 +0100 Subject: [PATCH RFC 12/12] media: videobuf2: Track buffer allocations through the dmem cgroup MIME-Version: 1.0 Message-Id: <20250310-dmem-cgroups-v1-12-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=3070; i=mripard@kernel.org; h=from:subject:message-id; bh=7pH3VC/kTZvZyXEwWyZXDmfZRfenpkkRjJncy/YaV3A=; b=owGbwMvMwCX2+D1vfrpE4FHG02pJDOnnrm6/ZsdQ+MWVYVbt25WiJm9cVq1kbvIv1+nqNj8Uw cQw8Zh/RykLgxgXg6yYIkuMsPmSuFOzXney8c2DmcPKBDKEgYtTACaiH8jI8G9RwTMV4c9c83xf z/EMmLjgxVIR86M37d8sdLg43++uTQbDf9/VGd8tpSbXPHmhXr3q3hpj4wk3k392pC04ujVyhVh VDjsA X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" The dmem cgroup allows to track any DMA memory allocation made by the userspace. Let's charge our allocations in videobuf2 to enable proper memory tracking. Signed-off-by: Maxime Ripard --- drivers/media/common/videobuf2/videobuf2-dma-contig.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/drivers/media/common/videobuf2/videobuf2-dma-contig.c b/drivers/media/common/videobuf2/videobuf2-dma-contig.c index a13ec569c82f6da2d977222b94af32e74c6c6c82..48384e18030812f4f89f1c225c38def2ac6aa3ca 100644 --- a/drivers/media/common/videobuf2/videobuf2-dma-contig.c +++ b/drivers/media/common/videobuf2/videobuf2-dma-contig.c @@ -8,10 +8,11 @@ * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation. */ +#include #include #include #include #include #include @@ -40,10 +41,14 @@ struct vb2_dc_buf { struct sg_table *sgt_base; /* DMABUF related */ struct dma_buf_attachment *db_attach; +#ifdef CONFIG_CGROUP_DMEM + struct dmem_cgroup_pool_state *cgroup_pool_state; +#endif + struct vb2_buffer *vb; bool non_coherent_mem; }; /*********************************************/ @@ -169,10 +174,14 @@ static void vb2_dc_put(void *buf_priv) struct vb2_dc_buf *buf = buf_priv; if (!refcount_dec_and_test(&buf->refcount)) return; +#ifdef CONFIG_CGROUP_DMEM + dmem_cgroup_uncharge(buf->cgroup_pool_state, buf->size); +#endif + if (buf->non_coherent_mem) { if (buf->vaddr) dma_vunmap_noncontiguous(buf->dev, buf->vaddr); dma_free_noncontiguous(buf->dev, buf->size, buf->dma_sgt, buf->dma_dir); @@ -230,10 +239,11 @@ static int vb2_dc_alloc_non_coherent(struct vb2_dc_buf *buf) static void *vb2_dc_alloc(struct vb2_buffer *vb, struct device *dev, unsigned long size) { + struct dmem_cgroup_pool_state *pool; struct vb2_dc_buf *buf; int ret; if (WARN_ON(!dev)) return ERR_PTR(-EINVAL); @@ -249,25 +259,34 @@ static void *vb2_dc_alloc(struct vb2_buffer *vb, buf->size = size; /* Prevent the device from being released while the buffer is used */ buf->dev = get_device(dev); + ret = dmem_cgroup_try_charge(dma_get_dmem_cgroup_region(dev), size, &pool, NULL); + if (ret) + return ret; + if (buf->non_coherent_mem) ret = vb2_dc_alloc_non_coherent(buf); else ret = vb2_dc_alloc_coherent(buf); if (ret) { dev_err(dev, "dma alloc of size %lu failed\n", size); + dmem_cgroup_uncharge(pool, size); kfree(buf); return ERR_PTR(-ENOMEM); } buf->handler.refcount = &buf->refcount; buf->handler.put = vb2_dc_put; buf->handler.arg = buf; +#ifdef CONFIG_CGROUP_DMEM + buf->cgroup_pool_state = pool; +#endif + refcount_set(&buf->refcount, 1); return buf; }