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 1C08CC7EE2A for ; Mon, 30 Jun 2025 04:51:40 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id AD9908D0008; Mon, 30 Jun 2025 00:51:39 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id A895C8D0001; Mon, 30 Jun 2025 00:51:39 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 9516C8D0008; Mon, 30 Jun 2025 00:51:39 -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 7D97D8D0001 for ; Mon, 30 Jun 2025 00:51:39 -0400 (EDT) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 3F8F6122EBC for ; Mon, 30 Jun 2025 04:51:39 +0000 (UTC) X-FDA: 83610843918.28.E88D0DD Received: from us-smtp-delivery-44.mimecast.com (us-smtp-delivery-44.mimecast.com [207.211.30.44]) by imf01.hostedemail.com (Postfix) with ESMTP id 59CF940003 for ; Mon, 30 Jun 2025 04:51:37 +0000 (UTC) Authentication-Results: imf01.hostedemail.com; dkim=none; dmarc=fail reason="No valid SPF, No valid DKIM" header.from=gmail.com (policy=none); spf=softfail (imf01.hostedemail.com: 207.211.30.44 is neither permitted nor denied by domain of airlied@gmail.com) smtp.mailfrom=airlied@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1751259097; a=rsa-sha256; cv=none; b=NZlN+gbyZUUaJxJfNSE6qMl2ag/x518HNNtjOHH8PNIXqdInApovV/iFlnERL0IDIqyS+g zl9vV5b/0ZCfKznYLn3In3qfPVgOGbSmFhs8BQpa+hXmNioKqdf+0AwuHG9XnXHmOTOw6n sXyp7MOqjwNyo7HeJdL8q/p9rwfzoh4= ARC-Authentication-Results: i=1; imf01.hostedemail.com; dkim=none; dmarc=fail reason="No valid SPF, No valid DKIM" header.from=gmail.com (policy=none); spf=softfail (imf01.hostedemail.com: 207.211.30.44 is neither permitted nor denied by domain of airlied@gmail.com) smtp.mailfrom=airlied@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1751259097; 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=c8GHv3XMcMOJhf7MmtSFz/6un0Sd8SUmQfeQmxsURN4=; b=PstKBZIsr3VIEWHEIBjz0sq+qxjkTyJsR8kmbZrEvDKBreAfO70u/O/LdOwpDUjXp89Um8 n3vNxfoADmBNgp/e+G9zaZ4SEFzOn52i43Lp5cp+E2UznziJq5fOdaJoApuZ8S9/2rZdOC 193IM3/rv2l3ltBFBDqEw2JslhMhREU= Received: from mx-prod-mc-06.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-597-1pjZJUuGML-ugJEIHJeBBA-1; Mon, 30 Jun 2025 00:51:32 -0400 X-MC-Unique: 1pjZJUuGML-ugJEIHJeBBA-1 X-Mimecast-MFC-AGG-ID: 1pjZJUuGML-ugJEIHJeBBA_1751259091 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (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-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 75004180028D; Mon, 30 Jun 2025 04:51:31 +0000 (UTC) Received: from dreadlord.redhat.com (unknown [10.67.24.96]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id A8B9019560AB; Mon, 30 Jun 2025 04:51:25 +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 10/17] ttm: add a memcg accounting flag to the alloc/populate APIs Date: Mon, 30 Jun 2025 14:49:29 +1000 Message-ID: <20250630045005.1337339-11-airlied@gmail.com> In-Reply-To: <20250630045005.1337339-1-airlied@gmail.com> References: <20250630045005.1337339-1-airlied@gmail.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: 6SyFYG3g5jSaePeS1aIPVz7O69Ijcjy58UkLyPnM-os_1751259091 X-Mimecast-Originator: gmail.com Content-Transfer-Encoding: quoted-printable content-type: text/plain; charset=WINDOWS-1252; x-default=true X-Rspam-User: X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: 59CF940003 X-Stat-Signature: ynppru4o43oha8iaxs4z3gu3xdq1w8qe X-HE-Tag: 1751259097-752352 X-HE-Meta: U2FsdGVkX18TRkoiLoXzSEj0Cks+WGwcVGqzL+7MiPOsRDQvm/bE3uwxe/tkzKfp1SOK1maAak+d5TCL5+kJWxB/3g3JOH0hnAM5aE5Q2F5Mc10GujqcqLQCB5cLGvFHgkwPAIyBs3V3gN6sJTOdcsKENhDjwlcHSZ0avyCUknC9FB8VGki5pHz9Kk2VqngiRLUC3aBK+dLD5SqmxLVCXOUTwmEHLv7+ncgXyxGuQPcOz9vqTf2L2OrzE7P82rIESp8kkcEGxTxw3EtBmgY9t8MLnCopHwGwz9kWDQtcwJ4ZXx7Jovm9eBiuDbPjGbN4CxdgqGezAdobi3j0y5IL1a71OGqtA3fbRuztlAcnwO8pnpZPt8CcZFZjVXMuj1K9gWGiUox+ThUI9a2VqSFWvMWXGdNf9s0zt5bQn8r1iZAODwBkLVjIcxchbygCaSlbeN8YBECbtl0lQMtTCsNqVYk/VE7LwxK5JjV2m7yZYL5lJLkS+N98PshbJr49u2CrBGsAt57x1+vYEAZnkd+b7jNdMu4N6IMml5vsQxUQcl/b0aZeQSjno8TADq+Vrhj4iUfp8NmBvvW0ZZq8VgoN5qC8s9QV2PbrMWFdzZLBBSF31RBrBLg9o1YWgVhboaUJgYbnIeJE8aPHw3YoBjWfOw3QtEPJnsl0CJz1Ze9J9KllmtlSu+7qq5p7Zfe5T3mjiU1rv0BM0RYBawb+uiGqN3554Eo/OoFGertk0hyAFBEg1+RkSeFoRI8pyDJwrZsrINIQzwhAfLbAvSkoSmxaOgD3nvSGBmnQVh/+Q6adVu6d/7i3Zrs6cO40eauSmG2nVOKLr02OcgqvJmkvhE2kRlK+hep+j2qP1Y5b4RTUumAndyXDINviBidIfaDfH8XV8N69C1a5ign7ULz8Drlr3oGrM63aCYvj1X3OnIFjlFSPn95iOJmMy1FMjA/cbLZZZQ8dYXV7otLiokcM4hV ctHn65fc VjGriyfWh6TNhd9DK4x3GO+kPj6dHOzNJwz35igdlt3nWtsE7oYcySRMheGTH721WIjbLx1EDnXRtnpRgxXhomuhp7M/1Hjh7Exm6mLRUvWPfwlbkupIe1VUYGZgS0+NO4SucZjcISeOomVhcYvJ1rZfQOWcNdr/ZjJzeRX4IzydE/pFpYW9SIbFu1Ktwfccxc1T4Oz7CTnTYdQT+DHkCpON58EV1xDqx3TWUUsuqoqAMDunzfAqK9jzoMoa986C/J7ekW/gBgGW/DC6ezZSs3RSW398gpTodR0HLx7wEf26rvH4Y169UmyljXaVM5tk8j0pJqYhFEnb5y99ZoiHiSVdyjbL6NCiV64MrCH31PQ7acaQxPrLw537Pe+m/HxnPrgQUJNrxwRd9Xm/Pvr3DRoEhgVrPFDKTIiSYEDP1OQdPsck= 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 flag does nothing yet, but this just changes the APIs to accept it in the future across all users. This flag will eventually be filled out with when to account a tt populate to a memcg. Signed-off-by: Dave Airlie --- drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 3 ++- drivers/gpu/drm/i915/gem/i915_gem_ttm.c | 5 +++-- drivers/gpu/drm/i915/gem/i915_gem_ttm_move.c | 2 +- drivers/gpu/drm/i915/gem/i915_gem_ttm_pm.c | 4 ++-- drivers/gpu/drm/loongson/lsdc_ttm.c | 3 ++- drivers/gpu/drm/nouveau/nouveau_bo.c | 6 ++++-- drivers/gpu/drm/radeon/radeon_ttm.c | 3 ++- drivers/gpu/drm/ttm/tests/ttm_bo_validate_test.c | 2 +- drivers/gpu/drm/ttm/tests/ttm_pool_test.c | 16 ++++++++-------- drivers/gpu/drm/ttm/tests/ttm_tt_test.c | 12 ++++++------ drivers/gpu/drm/ttm/ttm_bo.c | 5 +++-- drivers/gpu/drm/ttm/ttm_bo_util.c | 6 +++--- drivers/gpu/drm/ttm/ttm_bo_vm.c | 4 +++- drivers/gpu/drm/ttm/ttm_pool.c | 6 ++++-- drivers/gpu/drm/ttm/ttm_tt.c | 8 +++++--- drivers/gpu/drm/vmwgfx/vmwgfx_blit.c | 4 ++-- drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c | 7 ++++--- drivers/gpu/drm/xe/xe_bo.c | 3 ++- include/drm/ttm/ttm_bo.h | 1 + include/drm/ttm/ttm_device.h | 1 + include/drm/ttm/ttm_pool.h | 1 + include/drm/ttm/ttm_tt.h | 1 + 22 files changed, 61 insertions(+), 42 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/= amdgpu/amdgpu_ttm.c index 9c5df35f05b7..920b412156dd 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c @@ -1138,6 +1138,7 @@ static struct ttm_tt *amdgpu_ttm_tt_create(struct ttm= _buffer_object *bo, */ static int amdgpu_ttm_tt_populate(struct ttm_device *bdev, =09=09=09=09 struct ttm_tt *ttm, +=09=09=09=09 bool memcg_account, =09=09=09=09 struct ttm_operation_ctx *ctx) { =09struct amdgpu_device *adev =3D amdgpu_ttm_adev(bdev); @@ -1161,7 +1162,7 @@ static int amdgpu_ttm_tt_populate(struct ttm_device *= bdev, =09=09pool =3D &adev->mman.ttm_pools[gtt->pool_id]; =09else =09=09pool =3D &adev->mman.bdev.pool; -=09ret =3D ttm_pool_alloc(pool, ttm, ctx); +=09ret =3D ttm_pool_alloc(pool, ttm, memcg_account, ctx); =09if (ret) =09=09return ret; =20 diff --git a/drivers/gpu/drm/i915/gem/i915_gem_ttm.c b/drivers/gpu/drm/i915= /gem/i915_gem_ttm.c index 1f4814968868..6cdaf3696583 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_ttm.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_ttm.c @@ -314,6 +314,7 @@ static struct ttm_tt *i915_ttm_tt_create(struct ttm_buf= fer_object *bo, =20 static int i915_ttm_tt_populate(struct ttm_device *bdev, =09=09=09=09struct ttm_tt *ttm, +=09=09=09=09bool memcg_account, =09=09=09=09struct ttm_operation_ctx *ctx) { =09struct i915_ttm_tt *i915_tt =3D container_of(ttm, typeof(*i915_tt), ttm= ); @@ -321,7 +322,7 @@ static int i915_ttm_tt_populate(struct ttm_device *bdev= , =09if (i915_tt->is_shmem) =09=09return i915_ttm_tt_shmem_populate(bdev, ttm, ctx); =20 -=09return ttm_pool_alloc(&bdev->pool, ttm, ctx); +=09return ttm_pool_alloc(&bdev->pool, ttm, memcg_account, ctx); } =20 static void i915_ttm_tt_unpopulate(struct ttm_device *bdev, struct ttm_tt = *ttm) @@ -808,7 +809,7 @@ static int __i915_ttm_get_pages(struct drm_i915_gem_obj= ect *obj, =09} =20 =09if (bo->ttm && !ttm_tt_is_populated(bo->ttm)) { -=09=09ret =3D ttm_bo_populate(bo, &ctx); +=09=09ret =3D ttm_bo_populate(bo, false, &ctx); =09=09if (ret) =09=09=09return ret; =20 diff --git a/drivers/gpu/drm/i915/gem/i915_gem_ttm_move.c b/drivers/gpu/drm= /i915/gem/i915_gem_ttm_move.c index 2f6b33edb9c9..4ab1eb3e42bc 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_ttm_move.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_ttm_move.c @@ -624,7 +624,7 @@ int i915_ttm_move(struct ttm_buffer_object *bo, bool ev= ict, =20 =09/* Populate ttm with pages if needed. Typically system memory. */ =09if (ttm && (dst_man->use_tt || (ttm->page_flags & TTM_TT_FLAG_SWAPPED))= ) { -=09=09ret =3D ttm_bo_populate(bo, ctx); +=09=09ret =3D ttm_bo_populate(bo, false, ctx); =09=09if (ret) =09=09=09return ret; =09} diff --git a/drivers/gpu/drm/i915/gem/i915_gem_ttm_pm.c b/drivers/gpu/drm/i= 915/gem/i915_gem_ttm_pm.c index 61596cecce4d..0b555979d786 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_ttm_pm.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_ttm_pm.c @@ -90,7 +90,7 @@ static int i915_ttm_backup(struct i915_gem_apply_to_regio= n *apply, =09=09goto out_no_lock; =20 =09backup_bo =3D i915_gem_to_ttm(backup); -=09err =3D ttm_bo_populate(backup_bo, &ctx); +=09err =3D ttm_bo_populate(backup_bo, false, &ctx); =09if (err) =09=09goto out_no_populate; =20 @@ -189,7 +189,7 @@ static int i915_ttm_restore(struct i915_gem_apply_to_re= gion *apply, =09if (!backup_bo->resource) =09=09err =3D ttm_bo_validate(backup_bo, i915_ttm_sys_placement(), &ctx); =09if (!err) -=09=09err =3D ttm_bo_populate(backup_bo, &ctx); +=09=09err =3D ttm_bo_populate(backup_bo, false, &ctx); =09if (!err) { =09=09err =3D i915_gem_obj_copy_ttm(obj, backup, pm_apply->allow_gpu, =09=09=09=09=09 false); diff --git a/drivers/gpu/drm/loongson/lsdc_ttm.c b/drivers/gpu/drm/loongson= /lsdc_ttm.c index 2e42c6970c9f..6d8781506802 100644 --- a/drivers/gpu/drm/loongson/lsdc_ttm.c +++ b/drivers/gpu/drm/loongson/lsdc_ttm.c @@ -110,6 +110,7 @@ lsdc_ttm_tt_create(struct ttm_buffer_object *tbo, uint3= 2_t page_flags) =20 static int lsdc_ttm_tt_populate(struct ttm_device *bdev, =09=09=09=09struct ttm_tt *ttm, +=09=09=09=09bool memcg_account, =09=09=09=09struct ttm_operation_ctx *ctx) { =09bool slave =3D !!(ttm->page_flags & TTM_TT_FLAG_EXTERNAL); @@ -122,7 +123,7 @@ static int lsdc_ttm_tt_populate(struct ttm_device *bdev= , =09=09return 0; =09} =20 -=09return ttm_pool_alloc(&bdev->pool, ttm, ctx); +=09return ttm_pool_alloc(&bdev->pool, ttm, memcg_account, ctx); } =20 static void lsdc_ttm_tt_unpopulate(struct ttm_device *bdev, diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau= /nouveau_bo.c index b96f0555ca14..1f2b9f5f2bf8 100644 --- a/drivers/gpu/drm/nouveau/nouveau_bo.c +++ b/drivers/gpu/drm/nouveau/nouveau_bo.c @@ -1417,7 +1417,9 @@ vm_fault_t nouveau_ttm_fault_reserve_notify(struct tt= m_buffer_object *bo) =20 static int nouveau_ttm_tt_populate(struct ttm_device *bdev, -=09=09=09struct ttm_tt *ttm, struct ttm_operation_ctx *ctx) +=09=09=09struct ttm_tt *ttm, +=09=09=09bool memcg_account, +=09=09=09struct ttm_operation_ctx *ctx) { =09struct ttm_tt *ttm_dma =3D (void *)ttm; =09struct nouveau_drm *drm; @@ -1434,7 +1436,7 @@ nouveau_ttm_tt_populate(struct ttm_device *bdev, =20 =09drm =3D nouveau_bdev(bdev); =20 -=09return ttm_pool_alloc(&drm->ttm.bdev.pool, ttm, ctx); +=09return ttm_pool_alloc(&drm->ttm.bdev.pool, ttm, memcg_account, ctx); } =20 static void diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/r= adeon_ttm.c index 616d25c8c2de..8c4273239d16 100644 --- a/drivers/gpu/drm/radeon/radeon_ttm.c +++ b/drivers/gpu/drm/radeon/radeon_ttm.c @@ -526,6 +526,7 @@ static struct radeon_ttm_tt *radeon_ttm_tt_to_gtt(struc= t radeon_device *rdev, =20 static int radeon_ttm_tt_populate(struct ttm_device *bdev, =09=09=09=09 struct ttm_tt *ttm, +=09=09=09=09 bool memcg_account, =09=09=09=09 struct ttm_operation_ctx *ctx) { =09struct radeon_device *rdev =3D radeon_get_rdev(bdev); @@ -547,7 +548,7 @@ static int radeon_ttm_tt_populate(struct ttm_device *bd= ev, =09=09return 0; =09} =20 -=09return ttm_pool_alloc(&rdev->mman.bdev.pool, ttm, ctx); +=09return ttm_pool_alloc(&rdev->mman.bdev.pool, ttm, memcg_account, ctx); } =20 static void radeon_ttm_tt_unpopulate(struct ttm_device *bdev, struct ttm_t= t *ttm) diff --git a/drivers/gpu/drm/ttm/tests/ttm_bo_validate_test.c b/drivers/gpu= /drm/ttm/tests/ttm_bo_validate_test.c index 3148f5d3dbd6..b52e3c1089e6 100644 --- a/drivers/gpu/drm/ttm/tests/ttm_bo_validate_test.c +++ b/drivers/gpu/drm/ttm/tests/ttm_bo_validate_test.c @@ -538,7 +538,7 @@ static void ttm_bo_validate_no_placement_signaled(struc= t kunit *test) =20 =09if (params->with_ttm) { =09=09old_tt =3D priv->ttm_dev->funcs->ttm_tt_create(bo, 0); -=09=09ttm_pool_alloc(&priv->ttm_dev->pool, old_tt, &ctx); +=09=09ttm_pool_alloc(&priv->ttm_dev->pool, old_tt, false, &ctx); =09=09bo->ttm =3D old_tt; =09} =20 diff --git a/drivers/gpu/drm/ttm/tests/ttm_pool_test.c b/drivers/gpu/drm/tt= m/tests/ttm_pool_test.c index 39234a3e98c4..aaf152c2383d 100644 --- a/drivers/gpu/drm/ttm/tests/ttm_pool_test.c +++ b/drivers/gpu/drm/ttm/tests/ttm_pool_test.c @@ -88,7 +88,7 @@ static struct ttm_pool *ttm_pool_pre_populated(struct kun= it *test, =20 =09ttm_pool_init(pool, devs->dev, NUMA_NO_NODE, true, false); =20 -=09err =3D ttm_pool_alloc(pool, tt, &simple_ctx); +=09err =3D ttm_pool_alloc(pool, tt, false, &simple_ctx); =09KUNIT_ASSERT_EQ(test, err, 0); =20 =09ttm_pool_free(pool, tt); @@ -157,7 +157,7 @@ static void ttm_pool_alloc_basic(struct kunit *test) =09KUNIT_ASSERT_EQ(test, pool->nid, NUMA_NO_NODE); =09KUNIT_ASSERT_EQ(test, pool->use_dma_alloc, params->use_dma_alloc); =20 -=09err =3D ttm_pool_alloc(pool, tt, &simple_ctx); +=09err =3D ttm_pool_alloc(pool, tt, false, &simple_ctx); =09KUNIT_ASSERT_EQ(test, err, 0); =09KUNIT_ASSERT_EQ(test, tt->num_pages, expected_num_pages); =20 @@ -220,7 +220,7 @@ static void ttm_pool_alloc_basic_dma_addr(struct kunit = *test) =20 =09ttm_pool_init(pool, devs->dev, NUMA_NO_NODE, true, false); =20 -=09err =3D ttm_pool_alloc(pool, tt, &simple_ctx); +=09err =3D ttm_pool_alloc(pool, tt, false, &simple_ctx); =09KUNIT_ASSERT_EQ(test, err, 0); =09KUNIT_ASSERT_EQ(test, tt->num_pages, expected_num_pages); =20 @@ -253,7 +253,7 @@ static void ttm_pool_alloc_order_caching_match(struct k= unit *test) =09tt =3D ttm_tt_kunit_init(test, 0, caching, size); =09KUNIT_ASSERT_NOT_NULL(test, tt); =20 -=09err =3D ttm_pool_alloc(pool, tt, &simple_ctx); +=09err =3D ttm_pool_alloc(pool, tt, false, &simple_ctx); =09KUNIT_ASSERT_EQ(test, err, 0); =20 =09KUNIT_ASSERT_TRUE(test, !list_lru_count(&pt->pages)); @@ -285,7 +285,7 @@ static void ttm_pool_alloc_caching_mismatch(struct kuni= t *test) =09KUNIT_ASSERT_FALSE(test, !list_lru_count(&pt_pool->pages)); =09KUNIT_ASSERT_TRUE(test, !list_lru_count(&pt_tt->pages)); =20 -=09err =3D ttm_pool_alloc(pool, tt, &simple_ctx); +=09err =3D ttm_pool_alloc(pool, tt, false, &simple_ctx); =09KUNIT_ASSERT_EQ(test, err, 0); =20 =09ttm_pool_free(pool, tt); @@ -319,7 +319,7 @@ static void ttm_pool_alloc_order_mismatch(struct kunit = *test) =09KUNIT_ASSERT_FALSE(test, !list_lru_count(&pt_pool->pages)); =09KUNIT_ASSERT_TRUE(test, !list_lru_count(&pt_tt->pages)); =20 -=09err =3D ttm_pool_alloc(pool, tt, &simple_ctx); +=09err =3D ttm_pool_alloc(pool, tt, false, &simple_ctx); =09KUNIT_ASSERT_EQ(test, err, 0); =20 =09ttm_pool_free(pool, tt); @@ -349,7 +349,7 @@ static void ttm_pool_free_dma_alloc(struct kunit *test) =09KUNIT_ASSERT_NOT_NULL(test, pool); =20 =09ttm_pool_init(pool, devs->dev, NUMA_NO_NODE, true, false); -=09ttm_pool_alloc(pool, tt, &simple_ctx); +=09ttm_pool_alloc(pool, tt, false, &simple_ctx); =20 =09pt =3D &pool->caching[caching].orders[order]; =09KUNIT_ASSERT_TRUE(test, !list_lru_count(&pt->pages)); @@ -380,7 +380,7 @@ static void ttm_pool_free_no_dma_alloc(struct kunit *te= st) =09KUNIT_ASSERT_NOT_NULL(test, pool); =20 =09ttm_pool_init(pool, devs->dev, NUMA_NO_NODE, false, false); -=09ttm_pool_alloc(pool, tt, &simple_ctx); +=09ttm_pool_alloc(pool, tt, false, &simple_ctx); =20 =09pt =3D &pool->caching[caching].orders[order]; =09KUNIT_ASSERT_TRUE(test, list_lru_count(&pt->pages) =3D=3D 1); diff --git a/drivers/gpu/drm/ttm/tests/ttm_tt_test.c b/drivers/gpu/drm/ttm/= tests/ttm_tt_test.c index 61ec6f580b62..333c503e218b 100644 --- a/drivers/gpu/drm/ttm/tests/ttm_tt_test.c +++ b/drivers/gpu/drm/ttm/tests/ttm_tt_test.c @@ -262,7 +262,7 @@ static void ttm_tt_populate_null_ttm(struct kunit *test= ) =09struct ttm_operation_ctx ctx =3D { }; =09int err; =20 -=09err =3D ttm_tt_populate(devs->ttm_dev, NULL, &ctx); +=09err =3D ttm_tt_populate(devs->ttm_dev, NULL, false, &ctx); =09KUNIT_ASSERT_EQ(test, err, -EINVAL); } =20 @@ -283,11 +283,11 @@ static void ttm_tt_populate_populated_ttm(struct kuni= t *test) =09err =3D ttm_tt_init(tt, bo, 0, ttm_cached, 0); =09KUNIT_ASSERT_EQ(test, err, 0); =20 -=09err =3D ttm_tt_populate(devs->ttm_dev, tt, &ctx); +=09err =3D ttm_tt_populate(devs->ttm_dev, tt, false, &ctx); =09KUNIT_ASSERT_EQ(test, err, 0); =09populated_page =3D *tt->pages; =20 -=09err =3D ttm_tt_populate(devs->ttm_dev, tt, &ctx); +=09err =3D ttm_tt_populate(devs->ttm_dev, tt, false, &ctx); =09KUNIT_ASSERT_PTR_EQ(test, populated_page, *tt->pages); } =20 @@ -307,7 +307,7 @@ static void ttm_tt_unpopulate_basic(struct kunit *test) =09err =3D ttm_tt_init(tt, bo, 0, ttm_cached, 0); =09KUNIT_ASSERT_EQ(test, err, 0); =20 -=09err =3D ttm_tt_populate(devs->ttm_dev, tt, &ctx); +=09err =3D ttm_tt_populate(devs->ttm_dev, tt, false, &ctx); =09KUNIT_ASSERT_EQ(test, err, 0); =09KUNIT_ASSERT_TRUE(test, ttm_tt_is_populated(tt)); =20 @@ -351,7 +351,7 @@ static void ttm_tt_swapin_basic(struct kunit *test) =09err =3D ttm_tt_init(tt, bo, 0, ttm_cached, 0); =09KUNIT_ASSERT_EQ(test, err, 0); =20 -=09err =3D ttm_tt_populate(devs->ttm_dev, tt, &ctx); +=09err =3D ttm_tt_populate(devs->ttm_dev, tt, false, &ctx); =09KUNIT_ASSERT_EQ(test, err, 0); =09KUNIT_ASSERT_TRUE(test, ttm_tt_is_populated(tt)); =20 @@ -361,7 +361,7 @@ static void ttm_tt_swapin_basic(struct kunit *test) =09KUNIT_ASSERT_TRUE(test, tt->page_flags & TTM_TT_FLAG_SWAPPED); =20 =09/* Swapout depopulates TT, allocate pages and then swap them in */ -=09err =3D ttm_pool_alloc(&devs->ttm_dev->pool, tt, &ctx); +=09err =3D ttm_pool_alloc(&devs->ttm_dev->pool, tt, false, &ctx); =09KUNIT_ASSERT_EQ(test, err, 0); =20 =09err =3D ttm_tt_swapin(tt); diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c index f4d9e68b21e7..af04bb8e2c2a 100644 --- a/drivers/gpu/drm/ttm/ttm_bo.c +++ b/drivers/gpu/drm/ttm/ttm_bo.c @@ -142,7 +142,7 @@ static int ttm_bo_handle_move_mem(struct ttm_buffer_obj= ect *bo, =09=09=09goto out_err; =20 =09=09if (mem->mem_type !=3D TTM_PL_SYSTEM) { -=09=09=09ret =3D ttm_bo_populate(bo, ctx); +=09=09=09ret =3D ttm_bo_populate(bo, false, ctx); =09=09=09if (ret) =09=09=09=09goto out_err; =09=09} @@ -1256,6 +1256,7 @@ void ttm_bo_tt_destroy(struct ttm_buffer_object *bo) * is set to true. */ int ttm_bo_populate(struct ttm_buffer_object *bo, +=09=09 bool memcg_account, =09=09 struct ttm_operation_ctx *ctx) { =09struct ttm_tt *tt =3D bo->ttm; @@ -1268,7 +1269,7 @@ int ttm_bo_populate(struct ttm_buffer_object *bo, =09=09return 0; =20 =09swapped =3D ttm_tt_is_swapped(tt); -=09ret =3D ttm_tt_populate(bo->bdev, tt, ctx); +=09ret =3D ttm_tt_populate(bo->bdev, tt, memcg_account, ctx); =09if (ret) =09=09return ret; =20 diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c b/drivers/gpu/drm/ttm/ttm_bo= _util.c index 250675d56b1c..764d1cf1ecbe 100644 --- a/drivers/gpu/drm/ttm/ttm_bo_util.c +++ b/drivers/gpu/drm/ttm/ttm_bo_util.c @@ -167,7 +167,7 @@ int ttm_bo_move_memcpy(struct ttm_buffer_object *bo, =09src_man =3D ttm_manager_type(bdev, src_mem->mem_type); =09if (ttm && ((ttm->page_flags & TTM_TT_FLAG_SWAPPED) || =09=09 dst_man->use_tt)) { -=09=09ret =3D ttm_bo_populate(bo, ctx); +=09=09ret =3D ttm_bo_populate(bo, false, ctx); =09=09if (ret) =09=09=09return ret; =09} @@ -354,7 +354,7 @@ static int ttm_bo_kmap_ttm(struct ttm_buffer_object *bo= , =20 =09BUG_ON(!ttm); =20 -=09ret =3D ttm_bo_populate(bo, &ctx); +=09ret =3D ttm_bo_populate(bo, false, &ctx); =09if (ret) =09=09return ret; =20 @@ -511,7 +511,7 @@ int ttm_bo_vmap(struct ttm_buffer_object *bo, struct io= sys_map *map) =09=09pgprot_t prot; =09=09void *vaddr; =20 -=09=09ret =3D ttm_bo_populate(bo, &ctx); +=09=09ret =3D ttm_bo_populate(bo, false, &ctx); =09=09if (ret) =09=09=09return ret; =20 diff --git a/drivers/gpu/drm/ttm/ttm_bo_vm.c b/drivers/gpu/drm/ttm/ttm_bo_v= m.c index b47020fca199..c5ad447debe3 100644 --- a/drivers/gpu/drm/ttm/ttm_bo_vm.c +++ b/drivers/gpu/drm/ttm/ttm_bo_vm.c @@ -225,7 +225,9 @@ vm_fault_t ttm_bo_vm_fault_reserved(struct vm_fault *vm= f, =09=09}; =20 =09=09ttm =3D bo->ttm; -=09=09err =3D ttm_bo_populate(bo, &ctx); +=09=09err =3D ttm_bo_populate(bo, +=09=09=09=09 false, +=09=09=09=09 &ctx); =09=09if (err) { =09=09=09if (err =3D=3D -EINTR || err =3D=3D -ERESTARTSYS || =09=09=09 err =3D=3D -EAGAIN) diff --git a/drivers/gpu/drm/ttm/ttm_pool.c b/drivers/gpu/drm/ttm/ttm_pool.= c index c6192c915f0d..0526900366e5 100644 --- a/drivers/gpu/drm/ttm/ttm_pool.c +++ b/drivers/gpu/drm/ttm/ttm_pool.c @@ -744,6 +744,7 @@ static unsigned int ttm_pool_alloc_find_order(unsigned = int highest, } =20 static int __ttm_pool_alloc(struct ttm_pool *pool, struct ttm_tt *tt, +=09=09=09 bool memcg_account, =09=09=09 const struct ttm_operation_ctx *ctx, =09=09=09 struct ttm_pool_alloc_state *alloc, =09=09=09 struct ttm_pool_tt_restore *restore) @@ -854,6 +855,7 @@ static int __ttm_pool_alloc(struct ttm_pool *pool, stru= ct ttm_tt *tt, * Returns: 0 on successe, negative error code otherwise. */ int ttm_pool_alloc(struct ttm_pool *pool, struct ttm_tt *tt, +=09=09 bool memcg_account, =09=09 struct ttm_operation_ctx *ctx) { =09struct ttm_pool_alloc_state alloc; @@ -863,7 +865,7 @@ int ttm_pool_alloc(struct ttm_pool *pool, struct ttm_tt= *tt, =20 =09ttm_pool_alloc_state_init(tt, &alloc); =20 -=09return __ttm_pool_alloc(pool, tt, ctx, &alloc, NULL); +=09return __ttm_pool_alloc(pool, tt, memcg_account, ctx, &alloc, NULL); } EXPORT_SYMBOL(ttm_pool_alloc); =20 @@ -916,7 +918,7 @@ int ttm_pool_restore_and_alloc(struct ttm_pool *pool, s= truct ttm_tt *tt, =09=09=09return 0; =09} =20 -=09return __ttm_pool_alloc(pool, tt, ctx, &alloc, tt->restore); +=09return __ttm_pool_alloc(pool, tt, false, ctx, &alloc, tt->restore); } =20 /** diff --git a/drivers/gpu/drm/ttm/ttm_tt.c b/drivers/gpu/drm/ttm/ttm_tt.c index 506e257dfba8..8f38de3b2f1c 100644 --- a/drivers/gpu/drm/ttm/ttm_tt.c +++ b/drivers/gpu/drm/ttm/ttm_tt.c @@ -366,7 +366,9 @@ int ttm_tt_swapout(struct ttm_device *bdev, struct ttm_= tt *ttm, EXPORT_SYMBOL_FOR_TESTS_ONLY(ttm_tt_swapout); =20 int ttm_tt_populate(struct ttm_device *bdev, -=09=09 struct ttm_tt *ttm, struct ttm_operation_ctx *ctx) +=09=09 struct ttm_tt *ttm, +=09=09 bool memcg_account, +=09=09 struct ttm_operation_ctx *ctx) { =09int ret; =20 @@ -395,9 +397,9 @@ int ttm_tt_populate(struct ttm_device *bdev, =09} =20 =09if (bdev->funcs->ttm_tt_populate) -=09=09ret =3D bdev->funcs->ttm_tt_populate(bdev, ttm, ctx); +=09=09ret =3D bdev->funcs->ttm_tt_populate(bdev, ttm, memcg_account, ctx); =09else -=09=09ret =3D ttm_pool_alloc(&bdev->pool, ttm, ctx); +=09=09ret =3D ttm_pool_alloc(&bdev->pool, ttm, memcg_account, ctx); =09if (ret) =09=09goto error; =20 diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_blit.c b/drivers/gpu/drm/vmwgfx/= vmwgfx_blit.c index fa5841fda659..a4d4ebf585fe 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_blit.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_blit.c @@ -569,13 +569,13 @@ int vmw_bo_cpu_blit(struct vmw_bo *vmw_dst, =09=09dma_resv_assert_held(src->base.resv); =20 =09if (!ttm_tt_is_populated(dst->ttm)) { -=09=09ret =3D dst->bdev->funcs->ttm_tt_populate(dst->bdev, dst->ttm, &ctx)= ; +=09=09ret =3D dst->bdev->funcs->ttm_tt_populate(dst->bdev, dst->ttm, false= , &ctx); =09=09if (ret) =09=09=09return ret; =09} =20 =09if (!ttm_tt_is_populated(src->ttm)) { -=09=09ret =3D src->bdev->funcs->ttm_tt_populate(src->bdev, src->ttm, &ctx)= ; +=09=09ret =3D src->bdev->funcs->ttm_tt_populate(src->bdev, src->ttm, false= , &ctx); =09=09if (ret) =09=09=09return ret; =09} diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c b/drivers/gpu/drm/v= mwgfx/vmwgfx_ttm_buffer.c index 5553892d7c3e..2351dafc1c68 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c @@ -360,7 +360,8 @@ static void vmw_ttm_destroy(struct ttm_device *bdev, st= ruct ttm_tt *ttm) =20 =20 static int vmw_ttm_populate(struct ttm_device *bdev, -=09=09=09 struct ttm_tt *ttm, struct ttm_operation_ctx *ctx) +=09=09=09 struct ttm_tt *ttm, bool memcg_account, +=09=09=09 struct ttm_operation_ctx *ctx) { =09bool external =3D (ttm->page_flags & TTM_TT_FLAG_EXTERNAL) !=3D 0; =20 @@ -372,7 +373,7 @@ static int vmw_ttm_populate(struct ttm_device *bdev, =09=09=09=09=09=09 ttm->dma_address, =09=09=09=09=09=09 ttm->num_pages); =20 -=09return ttm_pool_alloc(&bdev->pool, ttm, ctx); +=09return ttm_pool_alloc(&bdev->pool, ttm, memcg_account, ctx); } =20 static void vmw_ttm_unpopulate(struct ttm_device *bdev, @@ -580,7 +581,7 @@ int vmw_bo_create_and_populate(struct vmw_private *dev_= priv, =09if (unlikely(ret !=3D 0)) =09=09return ret; =20 -=09ret =3D vmw_ttm_populate(vbo->tbo.bdev, vbo->tbo.ttm, &ctx); +=09ret =3D vmw_ttm_populate(vbo->tbo.bdev, vbo->tbo.ttm, false, &ctx); =09if (likely(ret =3D=3D 0)) { =09=09struct vmw_ttm_tt *vmw_tt =3D =09=09=09container_of(vbo->tbo.ttm, struct vmw_ttm_tt, dma_ttm); diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c index 7aa2c17825da..522cbff11563 100644 --- a/drivers/gpu/drm/xe/xe_bo.c +++ b/drivers/gpu/drm/xe/xe_bo.c @@ -504,6 +504,7 @@ static struct ttm_tt *xe_ttm_tt_create(struct ttm_buffe= r_object *ttm_bo, } =20 static int xe_ttm_tt_populate(struct ttm_device *ttm_dev, struct ttm_tt *t= t, +=09=09=09 bool memcg_account, =09=09=09 struct ttm_operation_ctx *ctx) { =09struct xe_ttm_tt *xe_tt =3D container_of(tt, struct xe_ttm_tt, ttm); @@ -521,7 +522,7 @@ static int xe_ttm_tt_populate(struct ttm_device *ttm_de= v, struct ttm_tt *tt, =09=09err =3D ttm_tt_restore(ttm_dev, tt, ctx); =09} else { =09=09ttm_tt_clear_backed_up(tt); -=09=09err =3D ttm_pool_alloc(&ttm_dev->pool, tt, ctx); +=09=09err =3D ttm_pool_alloc(&ttm_dev->pool, tt, memcg_account, ctx); =09} =09if (err) =09=09return err; diff --git a/include/drm/ttm/ttm_bo.h b/include/drm/ttm/ttm_bo.h index 894ff7ccd68e..099dc2604baa 100644 --- a/include/drm/ttm/ttm_bo.h +++ b/include/drm/ttm/ttm_bo.h @@ -464,6 +464,7 @@ pgprot_t ttm_io_prot(struct ttm_buffer_object *bo, stru= ct ttm_resource *res, =09=09 pgprot_t tmp); void ttm_bo_tt_destroy(struct ttm_buffer_object *bo); int ttm_bo_populate(struct ttm_buffer_object *bo, +=09=09 bool memcg_account, =09=09 struct ttm_operation_ctx *ctx); =20 /* Driver LRU walk helpers initially targeted for shrinking. */ diff --git a/include/drm/ttm/ttm_device.h b/include/drm/ttm/ttm_device.h index 39b8636b1845..903ca40ebf92 100644 --- a/include/drm/ttm/ttm_device.h +++ b/include/drm/ttm/ttm_device.h @@ -84,6 +84,7 @@ struct ttm_device_funcs { =09 */ =09int (*ttm_tt_populate)(struct ttm_device *bdev, =09=09=09 struct ttm_tt *ttm, +=09=09=09 bool memcg_account, =09=09=09 struct ttm_operation_ctx *ctx); =20 =09/** diff --git a/include/drm/ttm/ttm_pool.h b/include/drm/ttm/ttm_pool.h index df56527c4853..da5b94226203 100644 --- a/include/drm/ttm/ttm_pool.h +++ b/include/drm/ttm/ttm_pool.h @@ -79,6 +79,7 @@ struct ttm_pool { }; =20 int ttm_pool_alloc(struct ttm_pool *pool, struct ttm_tt *tt, +=09=09 bool memcg_account, =09=09 struct ttm_operation_ctx *ctx); void ttm_pool_free(struct ttm_pool *pool, struct ttm_tt *tt); =20 diff --git a/include/drm/ttm/ttm_tt.h b/include/drm/ttm/ttm_tt.h index 406437ad674b..15d4019685f6 100644 --- a/include/drm/ttm/ttm_tt.h +++ b/include/drm/ttm/ttm_tt.h @@ -250,6 +250,7 @@ int ttm_tt_swapout(struct ttm_device *bdev, struct ttm_= tt *ttm, * Calls the driver method to allocate pages for a ttm */ int ttm_tt_populate(struct ttm_device *bdev, struct ttm_tt *ttm, +=09=09 bool memcg_account, =09=09 struct ttm_operation_ctx *ctx); =20 /** --=20 2.49.0