From mboxrd@z Thu Jan 1 00:00:00 1970 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 3DE51C282DE for ; Mon, 10 Mar 2025 15:06:15 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 14034280005; Mon, 10 Mar 2025 11:06:12 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 0C954280004; Mon, 10 Mar 2025 11:06:12 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id EAD3A280005; Mon, 10 Mar 2025 11:06:11 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id C59A0280004 for ; Mon, 10 Mar 2025 11:06:11 -0400 (EDT) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id AB1AC1A11A7 for ; Mon, 10 Mar 2025 15:06:13 +0000 (UTC) X-FDA: 83205967026.11.FB7285B Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by imf23.hostedemail.com (Postfix) with ESMTP id 2481D14001C for ; Mon, 10 Mar 2025 15:06:07 +0000 (UTC) Authentication-Results: imf23.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=arm.com; spf=pass (imf23.hostedemail.com: domain of robin.murphy@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=robin.murphy@arm.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1741619168; 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; bh=/WVhZAhpyWZNxhTvQi0KIkMHB3hPrJNHUj4cUxOv8Rc=; b=wmq2y2nofvqcZNWukGp2skSCieiipdAMCjoY0GIwClvtSz7xYAVIuRLWb123gc4i4Vvj2X ZouCm+cP1c1i1b44Q4gHH8DENsD5zh7r5FDj9M4UfeE8U5xkL9BEXx9v1frIJ5+Vu3Y086 augm92cYVV0R1+nkfCrj9p1zgramF5I= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1741619168; a=rsa-sha256; cv=none; b=phUY+NT+Slz8XkVDb/LgU3jg2dbeeryJXub2IkatseDsB5vz8xvgN0XnEjFrI1xGKzjJY5 PSMbiqem3k8DpqSmZljRSlNXGp48B1YlJLmGuNnqvDIYMC30qqo4gFCHLVQfzhba+YBpnF 7zsVE7cyUNqn5aP7G7gX3blAgVjF4b4= ARC-Authentication-Results: i=1; imf23.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=arm.com; spf=pass (imf23.hostedemail.com: domain of robin.murphy@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=robin.murphy@arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 4E10516F2; Mon, 10 Mar 2025 08:06:18 -0700 (PDT) Received: from [10.57.39.174] (unknown [10.57.39.174]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id F15A23F5A1; Mon, 10 Mar 2025 08:06:02 -0700 (PDT) Message-ID: <8bb8dfcb-bc44-48f2-acdb-58e6d259d25b@arm.com> Date: Mon, 10 Mar 2025 15:06:00 +0000 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH RFC 11/12] drm/gem: Add cgroup memory accounting To: Maxime Ripard , Andrew Morton , Marek Szyprowski , 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 References: <20250310-dmem-cgroups-v1-0-2984c1bc9312@kernel.org> <20250310-dmem-cgroups-v1-11-2984c1bc9312@kernel.org> From: Robin Murphy Content-Language: en-GB In-Reply-To: <20250310-dmem-cgroups-v1-11-2984c1bc9312@kernel.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Stat-Signature: ot383sznjngqped3fdqjns86ff7dz5ba X-Rspam-User: X-Rspamd-Queue-Id: 2481D14001C X-Rspamd-Server: rspam04 X-HE-Tag: 1741619167-736497 X-HE-Meta: U2FsdGVkX1+LbdLWXQ9Un8Ndv9OXCfDgYNnYroHJYd3VRKyRSKHRKnFKOLSivIgawlZEA6sd54t9Ku9vqS5YRlHdm3L+L9UP7+EEjz39xc0HI9rmDf00RzdLd6ZgMM8ocioxKSfq+7zCYlHljzMa+420rTjo8EcYdICvRdBgZ6QVBZLHGyIV7o1UYUZ/zzu6k98eHhzccwwuMY8pUA1FK2jyCYTntsrbXPvkx+J3cnr7k1RRvFpUyIG++XDR5Lk+emIu6HX8VrcqrN4WgXIRLNY9FkfgpoUxnnA/Q2y6r4itoVlDQKFC8DQEOswdIBoc8cf14xTnkcXHwLlWb5mxNcjfUE2jjfE493jxpY9WshBnZbf7VtQ+OlFYJeeDA8oMr+lpeFbsxtfZNdRGR+S1p2XAQPq179pbl4FvFPjp7Zr1ru/Ozfo5xqt9APavPOh4AKZtAVjykxJED3cujDq0RX/9Qxxpp91wbQ9EaJyhOQsf9gXsNBTElSe2abZp3FwUb/C6Dxaw1FfcRv2HQRmORcDdaPhO4y0cBPIOmJ7KIcb1Ymw83Ez+IwuPGC4rfNLTkFnus0EVb4HutGNtmKaHhNC8zG8DeT9yOlai/ejBpATMVSbZeq6KelxJ2izx10anRTiSw43we59c2etd7+uE0iOrp7vvwsehkoFTv4ekBI4FznDJaVaVg6kh8+8CEBt1C9dLrsJzdBEzGpPrCmV22xNN5O7s8GUunZLioyo5BBs3IMNGkb5BAxDNwOt8nYwFSOKFBrLtLKFKPVrbbXI+sBbDWOGJJs3H/0OhvIoamfT6H5PifnPZUKhac2xAffXlSwGcWDeop6F8CKzlentD6AcLwFMGOPEveRiOzVAAM3TVYXYTj//YpaUn7ef80W2OnDImEMduMl7Dqbb1guHyukz7U2o6AeduUhdqrNqUrIWpt4c70Rxoh+uW2LLLxdIPKnxtEisF1J8oO3tCbrl j5YgJy1l g4tP0ZIBTK8MbA/18tEWuxgrHK427Ule2UT7fCpOlQEbCZqHkA3I8C2lpZQBWV035q7TEdny29rWWliJmI6jLQfKz0ElVpo/F6r6B7c1aTjwRrwHLbptbKnVpnSQMbCHKL/jsB1IQaPOIHzu782dpVBpkZFLSkYz3RyvTdlE9k0IqAn07aTlaHLgrD29s3U11A7gNeKh33BA/Nme+IE55iKUq+bhEUSyEtja1xriPF0Y7+roceUhz5gSEr79T+BNB7ns7WXpA/C9XYCdASWwWguJ6345kXsgivqOE 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: On 2025-03-10 12:06 pm, Maxime Ripard wrote: > 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; Doesn't that miss cleaning up gem_obj? However, surely you want the accounting before the allocation anyway, like in the other cases. Otherwise userspace is still able to allocate massive amounts of memory and incur some of the associated side-effects of that, it just doesn't get to keep said memory for very long :) Thanks, Robin. > + > 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 > * >