From patchwork Mon Mar 10 12:06:06 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Ripard X-Patchwork-Id: 14009712 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 694DFC282DE for ; Mon, 10 Mar 2025 12:06:23 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C99BF28000C; Mon, 10 Mar 2025 08:06:22 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id C4836280009; Mon, 10 Mar 2025 08:06:22 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id AE89F28000C; Mon, 10 Mar 2025 08:06:22 -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 92FE4280009 for ; Mon, 10 Mar 2025 08:06:22 -0400 (EDT) Received: from smtpin19.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 379631A0EF2 for ; Mon, 10 Mar 2025 12:06:22 +0000 (UTC) X-FDA: 83205513804.19.126FFDA Received: from nyc.source.kernel.org (nyc.source.kernel.org [147.75.193.91]) by imf06.hostedemail.com (Postfix) with ESMTP id 2608F180003 for ; Mon, 10 Mar 2025 12:06:19 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=BLAyd9RZ; spf=pass (imf06.hostedemail.com: domain of mripard@kernel.org designates 147.75.193.91 as permitted sender) smtp.mailfrom=mripard@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1741608380; 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: references:dkim-signature; bh=s/T+RSx67GjH1CVSbq2WsoFh1U1Z/NHJ+REBnU4Vn30=; b=Rs9jfaHUZUEl2WBadC6J7f02AlpruXRIHyX9blqGxB8MlziNK18TCNSqN56A2HjTuegNmT mpvpyI+oS/YiaZdHfadsxSE4A8LxtXIZGI+ZPPP/g/xdmsUEzYzKzlTd5v3SYKRIQnz26J 6qfks0uXKE7vqu1EUaA8Q2X3hsov1xs= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1741608380; a=rsa-sha256; cv=none; b=JQWhn6NzzgxpSXVkel4ONaatWlOe+6+WwZ10fgQlsesebc6tksFSI8VlQHgpc0dK+JjDf6 13Gw9Kj+sEWo021vf6SmuxkjmxBVbaeYdlNOR9/19oz1TNi8lGRvORPHFeHbDdxqinRLYH ClNBz5JvO8LqO3yhN18TIUZhN28S74c= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=BLAyd9RZ; spf=pass (imf06.hostedemail.com: domain of mripard@kernel.org designates 147.75.193.91 as permitted sender) smtp.mailfrom=mripard@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by nyc.source.kernel.org (Postfix) with ESMTP id 2D4BCA458B2; Mon, 10 Mar 2025 12:00:49 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 82263C4CEE5; Mon, 10 Mar 2025 12:06:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1741608379; bh=KGA4bM77hVjjtDjQ2JV/Z0dy4gGhmqSc97R1mS2xb1M=; h=From:Subject:Date:To:Cc:From; b=BLAyd9RZHbM20BHFMAOkhZ1xa4HAbPJAgTsUShkU4nH4oDrB2KmmeYB+TR6U6cxMG wBygh8fTKR/2TFFLZ8pe1DWUALnlAtu6yIyWC/nh0ppRJTiEZJ+kaUfOjb11zcmHQi Wk6onFaab8DVOe544ZyTkqAe4HjkH46O4GTw6177WJXEsw+awOBXpu+koebZAHMYoR 0tNtAM/khWFx6/vOxn33GavtH/yiEtFDTs2Wtcu9ERwB7HlvErFPsbxPTcwEBn1ZWZ KaJJzb5mTP6uUbgl9G+pXzX8omVq8hnmFE/ytak+/zCfJ6GHkz67siXkpCStPjDdWL WxMWzUYLd5fTA== From: Maxime Ripard Subject: [PATCH RFC 00/12] dma: Enable dmem cgroup tracking Date: Mon, 10 Mar 2025 13:06:06 +0100 Message-Id: <20250310-dmem-cgroups-v1-0-2984c1bc9312@kernel.org> MIME-Version: 1.0 X-B4-Tracking: v=1; b=H4sIAK7VzmcC/6tWKk4tykwtVrJSqFYqSi3LLM7MzwNyDHUUlJIzE vPSU3UzU4B8JSMDI1MDYwNz3ZTc1Fzd5PSi/NKCYl1z47TUpOTUFANLC0sloJaCotS0zAqwcdF KQW7OSrG1tQBhlpIoYwAAAA== X-Change-ID: 20250307-dmem-cgroups-73febced0989 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=3616; i=mripard@kernel.org; h=from:subject:message-id; bh=KGA4bM77hVjjtDjQ2JV/Z0dy4gGhmqSc97R1mS2xb1M=; b=owGbwMvMwCX2+D1vfrpE4FHG02pJDOnnrm6I3B71zO3k9rdXbl4P0CvZEZRvHjKx739T6+WGh 7uZq74bdpSyMIhxMciKKbLECJsviTs163UnG988mDmsTCBDGLg4BWAigkoM/zM5ImbmNqrYlUix LTn14GPJ3H2q8saW91X6ly6U3v7bczEjwwLhfe77V07sVM6Z9HWjtPdGbctV/8zYn2tYvBSK/cW +ihUA X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D X-Rspamd-Server: rspam12 X-Rspam-User: X-Rspamd-Queue-Id: 2608F180003 X-Stat-Signature: x5pnbyzwk7idmsg5dr8sri5wtdxrfibn X-HE-Tag: 1741608379-831990 X-HE-Meta: U2FsdGVkX19RJMEUAGBRsu4dFTxYsIruY6+D0sPIEijrnew+vPT1PNFJcqyJTKQz70ilScnH5NPZZd9CGDWZx6/Pq1cvXgc0Y3PqHmipm6BfOKe3YY0halJ818CEfNZi8PDSyb+ULPnlcpd2Bb257sc1Hn8R7OMcmrl6/m7CXFsOwJNm3Iu23Kq6Gg39g28EAyJiz/9XHKOSefS20cmD5ZbZkd+jxIkQiDsf9/x652BegLCzBKQRDZgZBrb72Sv1p51DwAFfybWyzYVL2dINMkwvbq26db/RM2vjCQC4EkSx60iQ5KoR4gYOQn7hxNNm4RfUehpJyuqavY5BPQoBFur2PL8COKYtxxP5fmHmIM76sFLs618+mt9H5Y1cyUn2OEnMshtQPmpC+eyZ63VUi1yZOh/AkNBynhiobqRDj56skjBXmxpGKx99rwNkcaIS+nDqYOhXlHDO1kGkVOHO2FT4nBAA9RHXpqcLjWHO0THGnuCyYnqD2l7ZYeylBhMnrD7MqA2fLg7VJJ0Pn3K+xsg96olq/E0roEK6UKmVkK3GF9olUPnMf2mWdys4AaZFGF4s70tZJ0oanr8BFPT465IkQ4qDH1oKd/fstnw+hmnJU4qSbeKhDPGfU4nNWp05v+pbyTW6vm2NHK8qUyqv6mU5yPOu/RgDVH5KveHeOe4KquSu6qFPo+nGSW0IFbnC8A7A7eNwOpJJuJxt8sMu8s2cHFU3iZNvQGIx9UEwEPa5x9RjLLLaPJvxCUEFoeBISAo+y3QABmOoWnBn8p/+y3qsUY6re+e94gSr0cmF118byDgVrfePJSUBxh4s5mfy+EILFv0bvMhePRBpL2Bl7JXKk4uo8gKuap2F2+TivToJQaIo03NXTfqxOxSP5TI1jKiM7b+vKRmv3ptglGa4X8e1EtmN6mZNb123wfgENMGjf7gdX6lS0e+J6mUpVi32+sfAcVWPwJ4x5ia+QeY wMhjcq46 6Q3/Qf0snSHvhqvJ8RErQa/wokohkE+M4/oJcJKeWw6iUawXrMZpw8f6kEvJTX2TuoSZXkL0rHac59vcv0KdT+FVFtaqf0UKRGt7A6SsTFsd7N1LikW4m/2AakjtjGCVbeT01xQGRWODgEgDJIF45As/GoPgNNPKDpb4FuQKkp3O9RWwvIjmWQ9GehhED6VeQJEoOV4THmguT0CzbUsq8NvLyE3IVK+08jYuZZdD/oEHa0ydu6lcWIMivOhX10Zpw6UkVB/n5I8meggFBw09N1/lkOdHaBeFXAcxHPMSWq1fH8ubdm8Wm7lBMJSnhvOdLsPkx 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: Hi, Here's preliminary work to enable dmem tracking for heavy users of DMA allocations on behalf of userspace: v4l2, DRM, and dma-buf heaps. It's not really meant for inclusion at the moment, because I really don't like it that much, and would like to discuss solutions on how to make it nicer. In particular, the dma dmem region accessors don't feel that great to me. It duplicates the logic to select the proper accessor in dma_alloc_attrs(), and it looks fragile and potentially buggy to me. One solution I tried is to do the accounting in dma_alloc_attrs() directly, depending on a flag being set, similar to what __GFP_ACCOUNT is doing. It didn't work because dmem initialises a state pointer when charging an allocation to a region, and expects that state pointer to be passed back when uncharging. Since dma_alloc_attrs() returns a void pointer to the allocated buffer, we need to put that state into a higher-level structure, such as drm_gem_object, or dma_buf. Since we can't share the region selection logic, we need to get the region through some other mean. Another thing I consider was to return the region as part of the allocated buffer (through struct page or folio), but those are lost across the calls and dma_alloc_attrs() will only get a void pointer. So that's not doable without some heavy rework, if it's a good idea at all. So yeah, I went for the dumbest possible solution with the accessors, hoping you could suggest a much smarter idea :) Thanks, Maxime Signed-off-by: Maxime Ripard --- Maxime Ripard (12): cma: Register dmem region for each cma region cma: Provide accessor to cma dmem region dma: coherent: Register dmem region for each coherent region dma: coherent: Provide accessor to dmem region dma: contiguous: Provide accessor to dmem region dma: direct: Provide accessor to dmem region dma: Create default dmem region for DMA allocations dma: Provide accessor to dmem region dma-buf: Clear cgroup accounting on release dma-buf: cma: Account for allocations in dmem cgroup drm/gem: Add cgroup memory accounting media: videobuf2: Track buffer allocations through the dmem cgroup drivers/dma-buf/dma-buf.c | 7 ++++ drivers/dma-buf/heaps/cma_heap.c | 18 ++++++++-- drivers/gpu/drm/drm_gem.c | 5 +++ drivers/gpu/drm/drm_gem_dma_helper.c | 6 ++++ .../media/common/videobuf2/videobuf2-dma-contig.c | 19 +++++++++++ include/drm/drm_device.h | 1 + include/drm/drm_gem.h | 2 ++ include/linux/cma.h | 9 +++++ include/linux/dma-buf.h | 5 +++ include/linux/dma-direct.h | 2 ++ include/linux/dma-map-ops.h | 32 ++++++++++++++++++ include/linux/dma-mapping.h | 11 ++++++ kernel/dma/coherent.c | 26 +++++++++++++++ kernel/dma/direct.c | 8 +++++ kernel/dma/mapping.c | 39 ++++++++++++++++++++++ mm/cma.c | 21 +++++++++++- mm/cma.h | 3 ++ 17 files changed, 211 insertions(+), 3 deletions(-) --- base-commit: 55a2aa61ba59c138bd956afe0376ec412a7004cf change-id: 20250307-dmem-cgroups-73febced0989 Best regards,