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 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 67FF8C3ABBC for ; Mon, 12 May 2025 06:19:54 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id D59D210E2AD; Mon, 12 May 2025 06:19:53 +0000 (UTC) Received: from us-smtp-delivery-44.mimecast.com (us-smtp-delivery-44.mimecast.com [207.211.30.44]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0967310E2AC for ; Mon, 12 May 2025 06:19:51 +0000 (UTC) Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-671-z4hkNpxbP4mNgJZQpn-W3g-1; Mon, 12 May 2025 02:19:47 -0400 X-MC-Unique: z4hkNpxbP4mNgJZQpn-W3g-1 X-Mimecast-MFC-AGG-ID: z4hkNpxbP4mNgJZQpn-W3g_1747030786 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 3B8041800877; Mon, 12 May 2025 06:19:46 +0000 (UTC) Received: from dreadlord.redhat.com (unknown [10.64.136.70]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 6EF0E19560B0; Mon, 12 May 2025 06:19:40 +0000 (UTC) From: Dave Airlie To: dri-devel@lists.freedesktop.org, tj@kernel.org, christian.koenig@amd.com, Johannes Weiner , Michal Hocko , Roman Gushchin , Shakeel Butt , Muchun Song Cc: cgroups@vger.kernel.org, Waiman Long , simona@ffwll.ch Subject: [PATCH 4/7] memcg: add hooks for gpu memcg charging/uncharging. Date: Mon, 12 May 2025 16:12:10 +1000 Message-ID: <20250512061913.3522902-5-airlied@gmail.com> In-Reply-To: <20250512061913.3522902-1-airlied@gmail.com> References: <20250512061913.3522902-1-airlied@gmail.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.12 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: 92k0WUc2doxpgbu2iXWKgxQLtxSvi2ZJ7FDBEixOF5Q_1747030786 X-Mimecast-Originator: gmail.com Content-Transfer-Encoding: quoted-printable content-type: text/plain; charset=WINDOWS-1252; x-default=true 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" From: Dave Airlie As per the socket hooks, just adds two APIs to charge GPU pages to the memcg and uncharge them. Suggested by Waiman. Signed-off-by: Dave Airlie --- include/linux/memcontrol.h | 5 +++++ mm/memcontrol.c | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index 4058d4bd94ed..f74b7db89f00 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -1618,6 +1618,11 @@ struct sock; bool mem_cgroup_charge_skmem(struct mem_cgroup *memcg, unsigned int nr_pag= es, =09=09=09 gfp_t gfp_mask); void mem_cgroup_uncharge_skmem(struct mem_cgroup *memcg, unsigned int nr_p= ages); + +bool mem_cgroup_charge_gpu(struct mem_cgroup *memcg, unsigned int nr_pages= , +=09=09=09 gfp_t gfp_mask); +void mem_cgroup_uncharge_gpu(struct mem_cgroup *memcg, unsigned int nr_pag= es); + #ifdef CONFIG_MEMCG extern struct static_key_false memcg_sockets_enabled_key; #define mem_cgroup_sockets_enabled static_branch_unlikely(&memcg_sockets_e= nabled_key) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 25471a0fd0be..76a0ec34b7dc 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -4958,6 +4958,40 @@ void mem_cgroup_uncharge_skmem(struct mem_cgroup *me= mcg, unsigned int nr_pages) =09refill_stock(memcg, nr_pages); } =20 +/** + * mem_cgroup_charge_gpu - charge GPU memory + * @memcg: memcg to charge + * @nr_pages: number of pages to charge + * @gfp_mask: reclaim mode + * + * Charges @nr_pages to @memcg. Returns %true if the charge fit within + * @memcg's configured limit, %false if it doesn't. + */ +bool mem_cgroup_charge_gpu(struct mem_cgroup *memcg, unsigned int nr_pages= , +=09=09=09 gfp_t gfp_mask) +{ +=09if (try_charge_memcg(memcg, gfp_mask, nr_pages) =3D=3D 0) { +=09=09mod_memcg_state(memcg, MEMCG_GPU, nr_pages); +=09=09return true; +=09} + +=09return false; +} +EXPORT_SYMBOL_GPL(mem_cgroup_charge_gpu); + +/** + * mem_cgroup_uncharge_gpu - uncharge GPU memory + * @memcg: memcg to uncharge + * @nr_pages: number of pages to uncharge + */ +void mem_cgroup_uncharge_gpu(struct mem_cgroup *memcg, unsigned int nr_pag= es) +{ +=09mod_memcg_state(memcg, MEMCG_GPU, -nr_pages); + +=09refill_stock(memcg, nr_pages); +} +EXPORT_SYMBOL_GPL(mem_cgroup_uncharge_gpu); + static int __init cgroup_memory(char *s) { =09char *token; --=20 2.49.0