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 03F67C83F26 for ; Tue, 22 Jul 2025 01:51:21 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 974536B00A4; Mon, 21 Jul 2025 21:51:20 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 924E56B00A5; Mon, 21 Jul 2025 21:51:20 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 814896B00A7; Mon, 21 Jul 2025 21:51:20 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 6E2986B00A4 for ; Mon, 21 Jul 2025 21:51:20 -0400 (EDT) Received: from smtpin04.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 4681DB6B4E for ; Tue, 22 Jul 2025 01:51:20 +0000 (UTC) X-FDA: 83690223120.04.DAA7FF1 Received: from us-smtp-delivery-44.mimecast.com (us-smtp-delivery-44.mimecast.com [207.211.30.44]) by imf19.hostedemail.com (Postfix) with ESMTP id 891FC1A0005 for ; Tue, 22 Jul 2025 01:51:18 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=none; spf=softfail (imf19.hostedemail.com: 207.211.30.44 is neither permitted nor denied by domain of airlied@gmail.com) smtp.mailfrom=airlied@gmail.com; dmarc=fail reason="No valid SPF, No valid DKIM" header.from=gmail.com (policy=none) ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1753149078; 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=cr1/IBE9qJF/adnUURO/L7mzpRGG/7ebUn8XxXtRK10=; b=T4kY1jf9Jm+dKJRUSbSw+FZ9JH1D4Y0ZA8F8IJUgXKc8QytgRqGFA9MtJqCxN74ASlaRzx trbBzyV00rFc3YLOtuhp8PUo9JfwVW7xx04PqNyVq1u3dvvRf3gFwNX2Hwli/FUFh3KOsR 4a866fnCkqDhjOH+mtOkRg/3Dn3OBmA= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=none; spf=softfail (imf19.hostedemail.com: 207.211.30.44 is neither permitted nor denied by domain of airlied@gmail.com) smtp.mailfrom=airlied@gmail.com; dmarc=fail reason="No valid SPF, No valid DKIM" header.from=gmail.com (policy=none) ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1753149078; a=rsa-sha256; cv=none; b=psNZwIoqw3EqVkOmTL8jqriTmK1hpwxfqTo7fS70N3LLEhyXAQPanU+WqTyWB/BKqLxTAW EvjHkz9LWr/aDEUft+T+iA2AQE7r8tbtZTdMfOdy0ZNufa1fLAv1fihMnrY5qdRUlnQKMO RfIsawofaugWHsy0vaaQPAHqmj9mA7w= Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-483-u27LP2rOO2yuSOYVIUlimw-1; Mon, 21 Jul 2025 21:51:14 -0400 X-MC-Unique: u27LP2rOO2yuSOYVIUlimw-1 X-Mimecast-MFC-AGG-ID: u27LP2rOO2yuSOYVIUlimw_1753149073 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-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 7161E195FD02; Tue, 22 Jul 2025 01:51:13 +0000 (UTC) Received: from dreadlord.redhat.com (unknown [10.67.32.7]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 488FC19560A3; Tue, 22 Jul 2025 01:51:08 +0000 (UTC) From: Dave Airlie To: dri-devel@lists.freedesktop.org, linux-mm@kvack.org, Johannes Weiner , Christian Koenig Cc: Dave Chinner , Kairui Song , Dave Airlie Subject: [PATCH 15/15] ttm: add support for a module option to disable memcg integration Date: Tue, 22 Jul 2025 11:43:28 +1000 Message-ID: <20250722014942.1878844-16-airlied@gmail.com> In-Reply-To: <20250722014942.1878844-1-airlied@gmail.com> References: <20250722014942.1878844-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: LftguH5XuJ4sbp6LGKiTQQZ4CD951_JcANCpX-SiID4_1753149073 X-Mimecast-Originator: gmail.com Content-Transfer-Encoding: quoted-printable content-type: text/plain; charset=WINDOWS-1252; x-default=true X-Stat-Signature: qgogzo8egwy9gim5o4b454iy1boc177u X-Rspamd-Server: rspam01 X-Rspamd-Queue-Id: 891FC1A0005 X-Rspam-User: X-HE-Tag: 1753149078-103143 X-HE-Meta: U2FsdGVkX18mJ2+JJPN9I02rsSyuk1r8qVXWT8tmbGe0uzFTAzCsDRjaKwRes+59ZBlmrtOmFZxMp9V3VN+NQB5O7rcZSx+sPkTH7np431d+NexklPYjz8SGvKqlBsn26Zr4j2AXGwL+GVx26eXYZK0D/Mo8sedLU9eKo6Uh/dBn053CMOzstquSJ42N2nsD1gmhXoRmLrr2nq8iRH9H7grVF76gMblDVpq9Nb6Wbt7YvuYxB4K2/0rfKIgKZjdf8RVSTZvMDFpJcOUoe8rYzM8+tZQkaODvuebbJ6Lbd/dVkUtuPyKoMp6mOzGRgCxlQyz3iWVimhUjeFEkVwwZ+YGW+8UwR9rxT28dfKvJ//QPYMIvrTt0QAdP2HaZdayRW4OKaolm3otOVbSHaKTkgFWJ3V4URpJ5+M6mk0Xx71SK2nhrGcpkjjLGeDVYS/KeaGcAcQe2MsZ1t3ODZM55TxOboR6Saf2fMr0oLZqLpEhKNlLLNj2WMHgvIMsIOzvucuS2jhYKzeg6WGcZHkOsElxug+h1FOsFbO8O302QhIZFac3HXU+a+7h9OaBEedOGcYXdTxBZx/xKEH4PrOe4v/6Rs3X4MUsEtYmM2cx0fn+OJtoSDWj3mZ42FAuQAk2r4qMU3z9uatf//jnNWuMnKImg2sv76tBZuRjAFVozjuxmRSL4f4bB4VOGstZOqg6T+LFjUn2prluPF8E29lHfJM1uApP4N/S5SBn4fwzm738Es7IHULNOc6Cb4rzeXh7TimnIIFa8+ETpSUXSuToXWNmugPHyDcaHs8/Mwsdt+zYk3DdDqkHJBHwH80bDWMZhAGjIQBQ3HOTWv/LR/TiI6xkVXBk7IqgK7zbJ98pCHd7ZYPKNOz1HXrZ5ToaXiYKV9m+aEOGyDtwB0WIUrH+bgdPfXIdmgqhAX1+SroByQlkggQWWWYqPyahsekELajjjtbo9Llx+kZonB6jzCbC p+w== 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: From: Dave Airlie This adds a kconfig and a module option to turn off ttm memcg integration completely. When this is used, no object will ever end up using memcg aware paths. There is an existing workload that cgroup support might regress, the systems are setup to allocate 1GB of uncached pages at system startup to prime the pool, then any further users will take them from the pool. The current cgroup code might handle that, but it also may regress, so add an option to ttm to avoid using memcg for the pool pages. Signed-off-by: Dave Airlie --- drivers/gpu/drm/Kconfig | 7 +++++++ drivers/gpu/drm/ttm/ttm_pool.c | 24 +++++++++++++++++++++--- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig index f7ea8e895c0c..4a1501b05e7c 100644 --- a/drivers/gpu/drm/Kconfig +++ b/drivers/gpu/drm/Kconfig @@ -239,6 +239,13 @@ config DRM_TTM_HELPER =09help =09 Helpers for ttm-based gem objects =20 +config DRM_TTM_MEMCG +=09bool "Enable TTM mem cgroup by default" +=09depends on DRM_TTM +=09depends on MEMCG +=09help +=09 Enable the memcg intergration by default + config DRM_GEM_DMA_HELPER =09tristate =09depends on DRM diff --git a/drivers/gpu/drm/ttm/ttm_pool.c b/drivers/gpu/drm/ttm/ttm_pool.= c index 1e6da2cc1f06..375858b84fb2 100644 --- a/drivers/gpu/drm/ttm/ttm_pool.c +++ b/drivers/gpu/drm/ttm/ttm_pool.c @@ -118,6 +118,24 @@ static unsigned long page_pool_size; MODULE_PARM_DESC(page_pool_size, "Number of pages in the WC/UC/DMA pool pe= r NUMA node"); module_param(page_pool_size, ulong, 0644); =20 +/* + * Don't use the memcg aware lru for pooled pages. + * + * There are use-cases where for example one application in a cgroup will = preallocate 1GB + * of uncached pages, and immediately release them into the pool, for othe= r consumers + * to use. This use-case could be handled with a proper cgroup hierarchy, = but to allow + * that use case to continue to operate as-is, add a module option. + * + * This still stores the pages in the list_lru, it just doesn't use the me= mcg when + * adding/removing them. + */ +#define DEFAULT_TTM_MEMCG CONFIG_DRM_TTM_MEMCG +static bool ttm_memcg =3D DEFAULT_TTM_MEMCG; + +MODULE_PARM_DESC(ttm_memcg, "Allow using cgroups with TTM " +=09=09 "[default=3D" __stringify(DEFAULT_TTM_MEMCG) "])"); +module_param(ttm_memcg, bool, 0444); + static unsigned long pool_node_limit[MAX_NUMNODES]; static atomic_long_t allocated_pages[MAX_NUMNODES]; =20 @@ -305,7 +323,7 @@ static void ttm_pool_type_give(struct ttm_pool_type *pt= , struct page *p) =20 =09INIT_LIST_HEAD(&p->lru); =09rcu_read_lock(); -=09list_lru_add(&pt->pages, &p->lru, nid, page_memcg_check(p)); +=09list_lru_add(&pt->pages, &p->lru, nid, ttm_memcg ? page_memcg_check(p) = : NULL); =09rcu_read_unlock(); =20 =09atomic_long_add(num_pages, &allocated_pages[nid]); @@ -354,7 +372,7 @@ static struct page *ttm_pool_type_take(struct ttm_pool_= type *pt, int nid, =09struct page *page_out =3D NULL; =09int ret; =09struct mem_cgroup *orig_memcg =3D orig_objcg ? get_mem_cgroup_from_objc= g(orig_objcg) : NULL; -=09struct mem_cgroup *memcg =3D orig_memcg; +=09struct mem_cgroup *memcg =3D ttm_memcg ? orig_memcg : NULL; =20 =09/* =09 * Attempt to get a page from the current memcg, but if it hasn't got a= ny in it's level, @@ -824,7 +842,7 @@ static int __ttm_pool_alloc(struct ttm_pool *pool, stru= ct ttm_tt *tt, =09bool allow_pools; =09struct page *p; =09int r; -=09struct obj_cgroup *objcg =3D memcg_account ? tt->objcg : NULL; +=09struct obj_cgroup *objcg =3D (ttm_memcg && memcg_account) ? tt->objcg := NULL; =20 =09WARN_ON(!alloc->remaining_pages || ttm_tt_is_populated(tt)); =09WARN_ON(alloc->dma_addr && !pool->dev); --=20 2.49.0