From nobody Sat Jun 13 17:07:04 2026 Received: from sender4-pp-f112.zoho.com (sender4-pp-f112.zoho.com [136.143.188.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F0A8B1DB95E; Wed, 6 May 2026 10:46:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778064394; cv=pass; b=j9Op9/TDJmhERrzdKIV1aNoDdspCN9P5mJoK86G2Rbx/O7fi8ITUFarDrrHwFk6yEdNNhrCBP32u7fqIWT6r2RDoo0mLOPRgjDdHfSCWf8NjEjtPvf0ZsxH/zFE9v7nue23AxoMTAXsi0WBSONyN2SCGCGdLAIvCqW5W85jWNHE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778064394; c=relaxed/simple; bh=6b83ueALaK2PAhKhXJAmPol0le11nNh+/BLIAcSBX34=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=tg0nWu5tjkzYJxuvJLmRCpZUE4WKNLNwAi+jxlWG43KAE+VCoydhdGQiKmN8jtqI5CFM6/yTwBjKB2Qf7NEVvyOe0FmZDVhub5J7e9KY9vM9zysi9YHUx/z3BObyMAmL6vzAA5teSlWHLK6dUwbeIS81cPLw2WhHca5ojGJN66Q= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b=IOA5/8Iw; arc=pass smtp.client-ip=136.143.188.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b="IOA5/8Iw" ARC-Seal: i=1; a=rsa-sha256; t=1778064379; cv=none; d=zohomail.com; s=zohoarc; b=IVWSXEZF3uZBLaxOj/wmmnUcU0sCjnQh+GzXRg16wFKOCLxfunm3huP0GPGuyxQ7ZFTwk3ZzrUAySsAvSmIrbKyRNziaAwLHowiTzEx/zx5Rq5S1YbIA2VI24xN9OByRuXiQ8XNODm2EYNVyYWH6Ywme+ArUCbKHYrtjL2mU77g= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778064379; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=969bjndru/0e943CKf2AcnAwdyybQY7U20RliwhKKNA=; b=ZXKPiv6m5lW6gONyDU+FP85ot6TfpdLvKSMXqH0XH7q3TSFPRszITAT+sbSttviXQnA0NctVOvc5DEGCXh+1AYPvmUJlskmwM4BmAxeOdsbTi1elVp7Zix6j3ip0SgoIViNcl6IBUl/p6xjjq9dKdtXknIqO4rxYhD4C4jpbUXs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=nicolas.frattaroli@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1778064379; s=zohomail; d=collabora.com; i=nicolas.frattaroli@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:References:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=969bjndru/0e943CKf2AcnAwdyybQY7U20RliwhKKNA=; b=IOA5/8IwcHx9uIpY7kBQjXFY6BE6bHyjlcapLhHf9H5qHrOtn1jhhTUmXe/V3ff6 BmbQi2OH0yjc2vSD+DLn/Jxk8l5LY0yzs/uAwgcbDcoMJRGpUO2w5D6e/Fv9vcZ6o6v YIQD28ZaFGIg2VVltqm7lK6ytB7tzIBeOSTwVFB4= Received: by mx.zohomail.com with SMTPS id 1778064377137162.00190677417413; Wed, 6 May 2026 03:46:17 -0700 (PDT) From: Nicolas Frattaroli Date: Wed, 06 May 2026 12:45:56 +0200 Subject: [PATCH 1/4] drm/panthor: Add freed_sz parameter to reclaim_priv_bos Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260506-panthor-explicit-reclaim-v1-1-44f82ac147ce@collabora.com> References: <20260506-panthor-explicit-reclaim-v1-0-44f82ac147ce@collabora.com> In-Reply-To: <20260506-panthor-explicit-reclaim-v1-0-44f82ac147ce@collabora.com> To: Boris Brezillon , Steven Price , Liviu Dudau , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Sumit Semwal , =?utf-8?q?Christian_K=C3=B6nig?= Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, linaro-mm-sig@lists.linaro.org, Nicolas Frattaroli X-Mailer: b4 0.15.2 panthor_mmu_reclaim_priv_bos returns the number of freed pages. However, how many bytes of freed memory this translates to can't generally be deduced from the number of pages, as the page size is a per-VM property. It may be useful to know the exact number of bytes that have been freed for observability and debugging purposes. To that end, add a new parameter "freed_sz", which is a pointer to a size_t where this information will be stored. It may be NULL, in which case the information isn't stored at all. Signed-off-by: Nicolas Frattaroli --- drivers/gpu/drm/panthor/panthor_gem.c | 3 ++- drivers/gpu/drm/panthor/panthor_mmu.c | 12 ++++++++++-- drivers/gpu/drm/panthor/panthor_mmu.h | 1 + 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/panthor/panthor_gem.c b/drivers/gpu/drm/pantho= r/panthor_gem.c index 13295d7a593d..80e82238f3c5 100644 --- a/drivers/gpu/drm/panthor/panthor_gem.c +++ b/drivers/gpu/drm/panthor/panthor_gem.c @@ -1511,7 +1511,8 @@ panthor_gem_shrinker_scan(struct shrinker *shrinker, = struct shrink_control *sc) goto out; =20 freed +=3D panthor_mmu_reclaim_priv_bos(ptdev, sc->nr_to_scan - freed, - &remaining, panthor_gem_try_evict); + &remaining, NULL, + panthor_gem_try_evict); if (freed >=3D sc->nr_to_scan) goto out; =20 diff --git a/drivers/gpu/drm/panthor/panthor_mmu.c b/drivers/gpu/drm/pantho= r/panthor_mmu.c index a7ee14986849..b81388b35a58 100644 --- a/drivers/gpu/drm/panthor/panthor_mmu.c +++ b/drivers/gpu/drm/panthor/panthor_mmu.c @@ -3127,13 +3127,18 @@ int panthor_vm_prepare_mapped_bos_resvs(struct drm_= exec *exec, struct panthor_vm unsigned long panthor_mmu_reclaim_priv_bos(struct panthor_device *ptdev, unsigned int nr_to_scan, unsigned long *remaining, + size_t *freed_sz, bool (*shrink)(struct drm_gem_object *, struct ww_acquire_ctx *)) { + unsigned long newly_freed; unsigned long freed =3D 0; LIST_HEAD(remaining_vms); LIST_HEAD(vms); =20 + if (freed_sz) + *freed_sz =3D 0; + mutex_lock(&ptdev->reclaim.lock); list_splice_init(&ptdev->reclaim.vms, &vms); =20 @@ -3152,8 +3157,11 @@ panthor_mmu_reclaim_priv_bos(struct panthor_device *= ptdev, =20 mutex_unlock(&ptdev->reclaim.lock); =20 - freed +=3D drm_gem_lru_scan(&vm->reclaim.lru, nr_to_scan - freed, - remaining, shrink, NULL); + newly_freed =3D drm_gem_lru_scan(&vm->reclaim.lru, nr_to_scan - freed, + remaining, shrink, NULL); + if (freed_sz) + *freed_sz +=3D panthor_vm_page_size(vm) * newly_freed; + freed +=3D newly_freed; =20 mutex_lock(&ptdev->reclaim.lock); =20 diff --git a/drivers/gpu/drm/panthor/panthor_mmu.h b/drivers/gpu/drm/pantho= r/panthor_mmu.h index 3522fbbce369..12b18b5f90e1 100644 --- a/drivers/gpu/drm/panthor/panthor_mmu.h +++ b/drivers/gpu/drm/panthor/panthor_mmu.h @@ -52,6 +52,7 @@ int panthor_vm_evict_bo_mappings_locked(struct panthor_ge= m_object *bo); unsigned long panthor_mmu_reclaim_priv_bos(struct panthor_device *ptdev, unsigned int nr_to_scan, unsigned long *remaining, + size_t *freed_sz, bool (*shrink)(struct drm_gem_object *, struct ww_acquire_ctx *)); int panthor_vm_prepare_mapped_bos_resvs(struct drm_exec *exec, --=20 2.54.0 From nobody Sat Jun 13 17:07:04 2026 Received: from sender4-pp-f112.zoho.com (sender4-pp-f112.zoho.com [136.143.188.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7AD943EC2D1; Wed, 6 May 2026 10:46:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778064396; cv=pass; b=EdQTNSM2QOzM+DZOptFxH0jJu2HSTCInmg+MP0Y0/BQwZOqEjQTc+/iug4axNB7IKCd2IF/k3Y2jB1imxQ1bDCgReyzxnj+URgL6/2KsU0r7vuEKxEBxNiioRKfQM7FEp9SnlvwoV9WYMw10oFlNBzqyCgNwjGd2XzLq9Dvx95c= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778064396; c=relaxed/simple; bh=IXS8AagFB5uEUzgfkUufkI8CieTT0tZ3O4YpKaIG7+I=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=hPPhImYu2keqI+qHL/W1UXbbVUhOG78Nkhf8XMaXt4aanLRQgE2+IfOItgWYwWbh4YwUCMgfQVegYnYg0dfssPygsnLWHgtx6+uxUhOoarRv8yjvW6wtv/P40zU36MpFWQ45YhNXHIwR2pbFjoNLmcXVi2X0gJXEMorEEHXb6rA= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b=gdiLGp9e; arc=pass smtp.client-ip=136.143.188.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b="gdiLGp9e" ARC-Seal: i=1; a=rsa-sha256; t=1778064381; cv=none; d=zohomail.com; s=zohoarc; b=dpvv8pdSOOd1BjbNj8a4iqQWdomPGUC4xTqFODGC2E7FGH8MRh7hSdQS5INXbg2+O1UTOOmmqLXVL0t8JG0p28bCMqcvspm8AEQaS5JDFFEaK/pNClkj3+0fWBMwGS2rCKUWN1sCN44hQKNzctjcL+UmAPw1Sf8IM4L7EZpG5aQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778064381; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=Qn58wMHVc3ob5XjE31HftB0EDXlEBgCVeJ0UOumM8HU=; b=n7QPLgsn2WeCRCkVXyrlhhLZhZp8mM/5z1PxsF/KEZEzytmQ89csPEdoLg1k8h1ISeY5m6k2+XEaMoSqGmwzYIaYVI1Pkk0UU+SHQ0Nvj820d6OtGU3GMJosVenAkbDD3PnCQszzyUYeWdIumGAk3a5fYaMIZocSvPOxSkaMqtY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=nicolas.frattaroli@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1778064381; s=zohomail; d=collabora.com; i=nicolas.frattaroli@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:References:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=Qn58wMHVc3ob5XjE31HftB0EDXlEBgCVeJ0UOumM8HU=; b=gdiLGp9eCzBgfAbWVMNpFc4oxolD/ywraicOuolhFGvm0QcC+HCV0HEFIoe+ls87 /beKPkLAb+hhUBmeC0x+P98guSH/cyFhd4VW+NECVer32x2jwxr4KPMUO+UnHcS+myG pUs+Kc+yA2qZGVvIGHSD2UYnnsMnCKUuaE5TCWAo= Received: by mx.zohomail.com with SMTPS id 1778064380452287.4553281654578; Wed, 6 May 2026 03:46:20 -0700 (PDT) From: Nicolas Frattaroli Date: Wed, 06 May 2026 12:45:57 +0200 Subject: [PATCH 2/4] MAINTAINERS: Add sysfs ABI docs to list of panthor files Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260506-panthor-explicit-reclaim-v1-2-44f82ac147ce@collabora.com> References: <20260506-panthor-explicit-reclaim-v1-0-44f82ac147ce@collabora.com> In-Reply-To: <20260506-panthor-explicit-reclaim-v1-0-44f82ac147ce@collabora.com> To: Boris Brezillon , Steven Price , Liviu Dudau , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Sumit Semwal , =?utf-8?q?Christian_K=C3=B6nig?= Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, linaro-mm-sig@lists.linaro.org, Nicolas Frattaroli X-Mailer: b4 0.15.2 While the ABI documentation in Documentation/ABI/ does include a contact person for each bit of ABI, this contact is not necessarily the same as the maintainers for the driver it touches. Add panthor-specific sysfs ABI as tracked files to MAINTAINERS for panthor, to ensure that any changes to these files also go through the panthor maintainers. Signed-off-by: Nicolas Frattaroli --- MAINTAINERS | 1 + 1 file changed, 1 insertion(+) diff --git a/MAINTAINERS b/MAINTAINERS index 5b897e9f4c73..f006ea21d99c 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2205,6 +2205,7 @@ M: Liviu Dudau L: dri-devel@lists.freedesktop.org S: Supported T: git https://gitlab.freedesktop.org/drm/misc/kernel.git +F: Documentation/ABI/*/sysfs-driver-panthor-* F: Documentation/devicetree/bindings/gpu/arm,mali-valhall-csf.yaml F: drivers/gpu/drm/ci/xfails/panthor* F: drivers/gpu/drm/panthor/ --=20 2.54.0 From nobody Sat Jun 13 17:07:04 2026 Received: from sender4-pp-f112.zoho.com (sender4-pp-f112.zoho.com [136.143.188.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9ACEF7260D; Wed, 6 May 2026 10:46:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778064399; cv=pass; b=hRw4jP9ZULBA1pGbIkPSWuXJKKzWll4OkEsBOjxW0X3jUf0x9H6sdpeEeu6O/jiHj9wU5oqNeBytwrEBjwr3PLYKh6Igwdgk7hgdrkV+kAZDh923z+fIdEC76l++/Q5rlW4mBDV3a2oS+49OxW0IkVGVh513XsC4hDm70DJA+Jw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778064399; c=relaxed/simple; bh=g03dKKT1ZjNdoyf6Q5IfLskA0CS5qfa4z+kHJb10XSI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=lrqmv/qgG+vwoM7cWQYw0zR0qaxmYTPz+bKiPsmLQ1GMhTcMYuMwxgl8HyLLuAYqOu0Gy+utyF4xFgiorUjoKIc/K7jIlq02l8Ko3240YXfh/iAgyhMlut2e38AEkTlguXCq1Da9hJ31f6iaX1GJGK2+pE80DzAb6Ap1Lc8vD18= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b=FpF3u8K2; arc=pass smtp.client-ip=136.143.188.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b="FpF3u8K2" ARC-Seal: i=1; a=rsa-sha256; t=1778064385; cv=none; d=zohomail.com; s=zohoarc; b=ToBYWr2rfPrx8OdcrtbsFqU3uBI2K19G16251aaDLeh/esreR80A+kvs+s26mEtHsbuhttJLzJmIa3kHwYaw+nefLxA879hC9IkyCT2miZJqgCtnR1Zd+QEn3XzEFNg8EBdYz/9V9LP4cj5r0N4GyLbm+SlgUBOyc9BMJXe7Elg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778064385; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=vC5Ti96d2pHAA98KqlsOt+8u7IhA9j3QH0f3efMfNJI=; b=NR/ktKsP6BmE2Cm4WiCNBi1Axq2E8p33FNZKZwZhPxLF3S3r3hApKbWaJ4cf3x2TvQAyifr4auZzVcdNmo4IpXD5+xJBMuEOyxvjp32i9RJUixHG7RUVUrWU3ihwCewW+T3sqXRcP63nc9vXFL51v+otib/Qctq6EZtzIsRdtjE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=nicolas.frattaroli@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1778064385; s=zohomail; d=collabora.com; i=nicolas.frattaroli@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:References:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=vC5Ti96d2pHAA98KqlsOt+8u7IhA9j3QH0f3efMfNJI=; b=FpF3u8K2IeD13Tcp4UvT9hz46SpsmnD607gkQuDQTvsa0QCu7HpzP+oDBUyzqjjD K3NaLk2fJnDkmVRn8HEQmgRJ/s+5FU6eOYDVaOrwX4A00kHcTtCgZwA/yZWergrKdox /ut1z/b8w3TZvj+9Mxe9AVHJk0BdzcMppkKSogVY= Received: by mx.zohomail.com with SMTPS id 1778064383726461.6157625485929; Wed, 6 May 2026 03:46:23 -0700 (PDT) From: Nicolas Frattaroli Date: Wed, 06 May 2026 12:45:58 +0200 Subject: [PATCH 3/4] drm/panthor: Add explicit memory reclaim sysfs knob Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260506-panthor-explicit-reclaim-v1-3-44f82ac147ce@collabora.com> References: <20260506-panthor-explicit-reclaim-v1-0-44f82ac147ce@collabora.com> In-Reply-To: <20260506-panthor-explicit-reclaim-v1-0-44f82ac147ce@collabora.com> To: Boris Brezillon , Steven Price , Liviu Dudau , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Sumit Semwal , =?utf-8?q?Christian_K=C3=B6nig?= Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, linaro-mm-sig@lists.linaro.org, Nicolas Frattaroli X-Mailer: b4 0.15.2 For deployments of systems with very tight memory and a system resource manager process that can make well-founded decisions on trade-offs, a way to tell panthor's GEM shrinker to run a reclaim on a specific process immediately is of interest. Make it possible to do this by adding a new sysfs file, called "mem_reclaim", which kicks off a reclaim for private BOs owned by the process whose TGID is written to the file. Processes may trigger an explicit reclaim on themselves, but triggering it on other processes requires the CAP_SYS_RESOURCE capability. Signed-off-by: Nicolas Frattaroli --- Documentation/ABI/testing/sysfs-driver-panthor-mem | 17 ++++++ drivers/gpu/drm/panthor/panthor_drv.c | 67 ++++++++++++++++++= ++++ drivers/gpu/drm/panthor/panthor_gem.c | 4 +- drivers/gpu/drm/panthor/panthor_gem.h | 1 + drivers/gpu/drm/panthor/panthor_mmu.c | 33 +++++++++++ drivers/gpu/drm/panthor/panthor_mmu.h | 2 + 6 files changed, 122 insertions(+), 2 deletions(-) diff --git a/Documentation/ABI/testing/sysfs-driver-panthor-mem b/Documenta= tion/ABI/testing/sysfs-driver-panthor-mem new file mode 100644 index 000000000000..6639394abed2 --- /dev/null +++ b/Documentation/ABI/testing/sysfs-driver-panthor-mem @@ -0,0 +1,17 @@ +What: /sys/bus/platform/drivers/panthor/.../mem_reclaim +Date: May 2026 +Contact: Nicolas Frattaroli +Description: + (WO) Writing to this file will trigger a GPU memory reclaim run for all + panthor GPU contexts associated with the TGID written to it. The write + completes when the reclaim operation has finished. + + To run a reclaim on a TGID other than its own, a process requires the + CAP_SYS_RESOURCE capability. + + Possible error codes: + * -ERANGE: given TGID is too large/small for the TGID type. + * -EINVAL: given TGID could not be parsed. + * -EPERM: insufficient permissions to run a reclaim on given TGID + * -EINTR: interrupted by signal + * -ESRCH: given TGID is not using panthor, and might not exist at all diff --git a/drivers/gpu/drm/panthor/panthor_drv.c b/drivers/gpu/drm/pantho= r/panthor_drv.c index 66996c9147c2..7d19b8785ea3 100644 --- a/drivers/gpu/drm/panthor/panthor_drv.c +++ b/drivers/gpu/drm/panthor/panthor_drv.c @@ -1858,8 +1858,75 @@ static ssize_t profiling_store(struct device *dev, =20 static DEVICE_ATTR_RW(profiling); =20 +/** + * panthor_run_on_pfiles_of_tgid - Run function on each panthor_file of pr= ocess + * @ptdev: pointer to the &struct panthor_device + * @tgid: The TGID of the process to look for + * @func: function pointer to run on every &struct panthor_file opened by = @tgid + * + * Searches through the list of all panthor DRM files for ones that are op= ened + * by a process with TGID @tgid. For every match found, runs @func with the + * associated &struct panthor_file. + * + * Returns: negative errno on error, number of files matching @tgid otherw= ise. + */ +static int panthor_run_on_pfiles_of_tgid(struct panthor_device *ptdev, pid= _t tgid, + void (*func)(struct panthor_file *pf)) +{ + struct drm_file *file; + int found =3D 0; + + scoped_cond_guard(mutex_intr, return -EINTR, &ptdev->base.filelist_mutex)= { + list_for_each_entry(file, &ptdev->base.filelist, lhead) { + struct task_struct *task; + struct pid *file_pid; + + rcu_read_lock(); + file_pid =3D rcu_dereference(file->pid); + task =3D pid_task(file_pid, PIDTYPE_TGID); + if (!task || task->tgid !=3D tgid) { + rcu_read_unlock(); + continue; + } + rcu_read_unlock(); + found++; + /* func needs to run outside RCU lock */ + func(file->driver_priv); + } + } + + return found; +} + +static ssize_t mem_reclaim_store(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t len) +{ + struct panthor_device *ptdev =3D dev_get_drvdata(dev); + pid_t tgid; + int ret; + + ret =3D kstrtoint(buf, 0, &tgid); + if (ret) + return ret; + + if (tgid !=3D current->tgid && !capable(CAP_SYS_RESOURCE)) + return -EPERM; + + ret =3D panthor_run_on_pfiles_of_tgid(ptdev, tgid, panthor_mmu_force_recl= aim); + if (ret < 0) + return ret; + else if (!ret) + return -ESRCH; + + return len; +} + +static DEVICE_ATTR_WO(mem_reclaim); + static struct attribute *panthor_attrs[] =3D { &dev_attr_profiling.attr, + &dev_attr_mem_reclaim.attr, NULL, }; =20 diff --git a/drivers/gpu/drm/panthor/panthor_gem.c b/drivers/gpu/drm/pantho= r/panthor_gem.c index 80e82238f3c5..5780fd51170c 100644 --- a/drivers/gpu/drm/panthor/panthor_gem.c +++ b/drivers/gpu/drm/panthor/panthor_gem.c @@ -1473,8 +1473,8 @@ static bool panthor_gem_try_evict_no_resv_wait(struct= drm_gem_object *obj, return ret =3D=3D 0; } =20 -static bool panthor_gem_try_evict(struct drm_gem_object *obj, - struct ww_acquire_ctx *ticket) +bool panthor_gem_try_evict(struct drm_gem_object *obj, + struct ww_acquire_ctx *ticket) { struct panthor_gem_object *bo =3D to_panthor_bo(obj); =20 diff --git a/drivers/gpu/drm/panthor/panthor_gem.h b/drivers/gpu/drm/pantho= r/panthor_gem.h index ae0491d0b121..593d8e7b7aaf 100644 --- a/drivers/gpu/drm/panthor/panthor_gem.h +++ b/drivers/gpu/drm/panthor/panthor_gem.h @@ -254,6 +254,7 @@ panthor_gem_get_dev_sgt(struct panthor_gem_object *bo); int panthor_gem_pin(struct panthor_gem_object *bo); void panthor_gem_unpin(struct panthor_gem_object *bo); int panthor_gem_swapin_locked(struct panthor_gem_object *bo); +bool panthor_gem_try_evict(struct drm_gem_object *obj, struct ww_acquire_c= tx *ticket); void panthor_gem_update_reclaim_state_locked(struct panthor_gem_object *bo, enum panthor_gem_reclaim_state *old_state); int panthor_gem_shrinker_init(struct panthor_device *ptdev); diff --git a/drivers/gpu/drm/panthor/panthor_mmu.c b/drivers/gpu/drm/pantho= r/panthor_mmu.c index b81388b35a58..e185787f5657 100644 --- a/drivers/gpu/drm/panthor/panthor_mmu.c +++ b/drivers/gpu/drm/panthor/panthor_mmu.c @@ -3199,6 +3199,39 @@ panthor_mmu_reclaim_priv_bos(struct panthor_device *= ptdev, return freed; } =20 +/** + * panthor_mmu_force_reclaim - Run a reclaim on all VMs associated with a = file + * @pfile: pointer to the &struct panthor_file to reclaim memory on + * + * Attempt to evict all private BOs of VMs associated with @pfile. In other + * words, attempt to swap out as much GPU memory of the context associated= with + * @pfile as possible. + */ +void panthor_mmu_force_reclaim(struct panthor_file *pfile) +{ + struct panthor_device *ptdev =3D pfile->ptdev; + unsigned long i, remaining, freed; + unsigned int nr_to_scan =3D 0; + struct panthor_vm *vm; + size_t freed_sz; + + scoped_guard(mutex, &ptdev->reclaim.lock) { + xa_for_each(&pfile->vms->xa, i, vm) { + /* Skip VMs that already aren't backed by any pages */ + if (!vm->reclaim.lru.count) + continue; + + nr_to_scan +=3D vm->reclaim.lru.count; + list_move(&vm->reclaim.lru_node, &ptdev->reclaim.vms); + } + } + freed =3D panthor_mmu_reclaim_priv_bos(ptdev, nr_to_scan, &remaining, + &freed_sz, panthor_gem_try_evict); + drm_dbg(&ptdev->base, + "Reclaimed %lu pages (%zu bytes) out of %u scanned, with %lu remaining\n= ", + freed, freed_sz, nr_to_scan, remaining); +} + /** * panthor_mmu_unplug() - Unplug the MMU logic * @ptdev: Device. diff --git a/drivers/gpu/drm/panthor/panthor_mmu.h b/drivers/gpu/drm/pantho= r/panthor_mmu.h index 12b18b5f90e1..34adca4b4e95 100644 --- a/drivers/gpu/drm/panthor/panthor_mmu.h +++ b/drivers/gpu/drm/panthor/panthor_mmu.h @@ -11,6 +11,7 @@ struct drm_exec; struct drm_sched_job; struct drm_memory_stats; +struct panthor_file; struct panthor_gem_object; struct panthor_heap_pool; struct panthor_vm; @@ -23,6 +24,7 @@ void panthor_mmu_pre_reset(struct panthor_device *ptdev); void panthor_mmu_post_reset(struct panthor_device *ptdev); void panthor_mmu_suspend(struct panthor_device *ptdev); void panthor_mmu_resume(struct panthor_device *ptdev); +void panthor_mmu_force_reclaim(struct panthor_file *pfile); =20 int panthor_vm_map_bo_range(struct panthor_vm *vm, struct panthor_gem_obje= ct *bo, u64 offset, u64 size, u64 va, u32 flags); --=20 2.54.0 From nobody Sat Jun 13 17:07:04 2026 Received: from sender4-pp-f112.zoho.com (sender4-pp-f112.zoho.com [136.143.188.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 37A344218BD; Wed, 6 May 2026 10:46:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778064403; cv=pass; b=eWdKBttRIE9zMZDW4HcvwGUR8KnIwNc8UtEtors9dx7BaKCHapKP6crk3PmVVxIgr5VeCGdgYNBTK3/qC09EyZEw0XpnqNNsozQP6slFdsjFVliDMwpDxLCAAeznQu3IjSxI4HC8qVH6C3h4SHhX3A2QZRGDCqLRtgFJdSFRcw8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778064403; c=relaxed/simple; bh=/NoSZTu0bz7MhVzEJGZziO9zDn4PJq5WX5oiu+aJ3po=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DPzHR7ojRTfmge6ALFbYh2g9vXP3GEJhP2accb1SHTSykpsxAQL/DQXxZnlMAQzLj7CMQVRtBxgEJgzE+w362tDsXhIy0KvSCCKCl/3p4DBLeaxY9PFS4DVWy4iU0RbKp8GUz8HRPeW+yyiBUKgnC3bCvxEOveb4/+DdKhlmWPQ= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b=QhqfmTaP; arc=pass smtp.client-ip=136.143.188.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b="QhqfmTaP" ARC-Seal: i=1; a=rsa-sha256; t=1778064389; cv=none; d=zohomail.com; s=zohoarc; b=D6FvrL7zivCavhxW8V2B+snCL/+ZyPrMVjOuZTJ5+vuT5yLGKlMTwva55lG5KxCbQQq9glD0auJwFpSMsMrQx3HwOa57ksvTBCR80HT5APctDxjLB6BUGyEo5KKMs1JwxvCoDXHGbMlzdc9XUX+1F2DugRUQDIGokBr8GbDx73A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778064389; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=vwfdhxDnYiWIt6VTFU0ct626I1R9RrLO+rBMwge8DiU=; b=hfCoArjp6Ukm2x/5P78YSbMfuiGxPt4M60o2+Ta9bEvu3gr+pxbH7hdj+VQDzevvf7ONGijqZl3kGRiXFUYTI9+uQPrw5Lg1O5JBT1YjnYeCeJMOrDcxI1dCpHK5wzRNq5Dz50uTw4FgkBmk3RQBhW+BjWdNhuGVG7r2O7CqH6E= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=nicolas.frattaroli@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1778064389; s=zohomail; d=collabora.com; i=nicolas.frattaroli@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:References:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=vwfdhxDnYiWIt6VTFU0ct626I1R9RrLO+rBMwge8DiU=; b=QhqfmTaPibZSRPSq2JTdt8BPbfh2ZtO9l0qmBkLgG7wLpO8pELsGDi8q86/rNFWM IpcmWF7QuenR0odLEn/EA+Fw6M6l3QhaJGh8ev0yL16rPY++8RpOCv5IaMnIiIqYdey LiVbvgBRYhn9RUi1xiEx81f6I0Xf6I5sRocHgkI4= Received: by mx.zohomail.com with SMTPS id 177806438704319.20442345053607; Wed, 6 May 2026 03:46:27 -0700 (PDT) From: Nicolas Frattaroli Date: Wed, 06 May 2026 12:45:59 +0200 Subject: [PATCH 4/4] drm/panthor: Add explicit memory claim sysfs knob Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260506-panthor-explicit-reclaim-v1-4-44f82ac147ce@collabora.com> References: <20260506-panthor-explicit-reclaim-v1-0-44f82ac147ce@collabora.com> In-Reply-To: <20260506-panthor-explicit-reclaim-v1-0-44f82ac147ce@collabora.com> To: Boris Brezillon , Steven Price , Liviu Dudau , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Sumit Semwal , =?utf-8?q?Christian_K=C3=B6nig?= Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, linaro-mm-sig@lists.linaro.org, Nicolas Frattaroli X-Mailer: b4 0.15.2 For deployments of systems with very tight memory and a system resource manager process that can make well-founded decisions on trade-offs, a way to tell panthor that all of a process' swapped-out GPU memory should be swapped back in without touching every page manually is of interest. Make it possible to do this by adding a new sysfs file, called "mem_claim". Writing a TGID to it will cause panthor to search through all panthor_files associated with that process, and bring all its buffers back from swap. Doing this requires the writer to have the CAP_SYS_RESOURCE capability, even when operating on themselves. Signed-off-by: Nicolas Frattaroli --- Documentation/ABI/testing/sysfs-driver-panthor-mem | 17 ++++++++++++++ drivers/gpu/drm/panthor/panthor_drv.c | 26 ++++++++++++++++++= ++++ drivers/gpu/drm/panthor/panthor_mmu.c | 25 ++++++++++++++++++= +++ drivers/gpu/drm/panthor/panthor_mmu.h | 1 + 4 files changed, 69 insertions(+) diff --git a/Documentation/ABI/testing/sysfs-driver-panthor-mem b/Documenta= tion/ABI/testing/sysfs-driver-panthor-mem index 6639394abed2..41e2c18f641d 100644 --- a/Documentation/ABI/testing/sysfs-driver-panthor-mem +++ b/Documentation/ABI/testing/sysfs-driver-panthor-mem @@ -15,3 +15,20 @@ Description: * -EPERM: insufficient permissions to run a reclaim on given TGID * -EINTR: interrupted by signal * -ESRCH: given TGID is not using panthor, and might not exist at all + +What: /sys/bus/platform/drivers/panthor/.../mem_claim +Date: May 2026 +Contact: Nicolas Frattaroli +Description: + (WO) Writing to this file will cause GPU memory for all panthor GPU + contexts associated with the TGID that's written to it to be brought + back from swap. The write completes when the operation has finished. + + The writing process requires the CAP_SYS_RESOURCE capability. + + Possible error codes: + * -ERANGE: given TGID is too large/small for the TGID type. + * -EINVAL: given TGID could not be parsed. + * -EPERM: insufficient permissions + * -EINTR: interrupted by signal + * -ESRCH: given TGID is not using panthor, and might not exist at all diff --git a/drivers/gpu/drm/panthor/panthor_drv.c b/drivers/gpu/drm/pantho= r/panthor_drv.c index 7d19b8785ea3..fb2172b0439c 100644 --- a/drivers/gpu/drm/panthor/panthor_drv.c +++ b/drivers/gpu/drm/panthor/panthor_drv.c @@ -1924,9 +1924,35 @@ static ssize_t mem_reclaim_store(struct device *dev, =20 static DEVICE_ATTR_WO(mem_reclaim); =20 +static ssize_t mem_claim_store(struct device *dev, struct device_attribute= *attr, + const char *buf, size_t len) +{ + struct panthor_device *ptdev =3D dev_get_drvdata(dev); + pid_t tgid; + int ret; + + ret =3D kstrtoint(buf, 0, &tgid); + if (ret) + return ret; + + if (!capable(CAP_SYS_RESOURCE)) + return -EPERM; + + ret =3D panthor_run_on_pfiles_of_tgid(ptdev, tgid, panthor_mmu_force_clai= m); + if (ret < 0) + return ret; + else if (!ret) + return -ESRCH; + + return len; +} + +static DEVICE_ATTR_WO(mem_claim); + static struct attribute *panthor_attrs[] =3D { &dev_attr_profiling.attr, &dev_attr_mem_reclaim.attr, + &dev_attr_mem_claim.attr, NULL, }; =20 diff --git a/drivers/gpu/drm/panthor/panthor_mmu.c b/drivers/gpu/drm/pantho= r/panthor_mmu.c index e185787f5657..7130ba4a24da 100644 --- a/drivers/gpu/drm/panthor/panthor_mmu.c +++ b/drivers/gpu/drm/panthor/panthor_mmu.c @@ -3232,6 +3232,31 @@ void panthor_mmu_force_reclaim(struct panthor_file *= pfile) freed, freed_sz, nr_to_scan, remaining); } =20 +/** + * panthor_mmu_force_claim - Swap in all VMs associated with a file + * @pfile: pointer to the &struct panthor_file whose memory to swap in + * + * Attempt to get all GPU memory of @pfile swapped back in. + */ +void panthor_mmu_force_claim(struct panthor_file *pfile) +{ + struct panthor_vm *vm; + unsigned long i; + int ret; + + xa_for_each(&pfile->vms->xa, i, vm) { + struct dma_resv *resv =3D drm_gpuvm_resv(&vm->base); + + dma_resv_lock(resv, NULL); + ret =3D drm_gpuvm_validate(&vm->base, NULL); + if (ret) + drm_dbg(&vm->ptdev->base, "drm_gpuvm_validate failed: %pe\n", + ERR_PTR(ret)); + + dma_resv_unlock(resv); + } +} + /** * panthor_mmu_unplug() - Unplug the MMU logic * @ptdev: Device. diff --git a/drivers/gpu/drm/panthor/panthor_mmu.h b/drivers/gpu/drm/pantho= r/panthor_mmu.h index 34adca4b4e95..460f83eb22a9 100644 --- a/drivers/gpu/drm/panthor/panthor_mmu.h +++ b/drivers/gpu/drm/panthor/panthor_mmu.h @@ -25,6 +25,7 @@ void panthor_mmu_post_reset(struct panthor_device *ptdev); void panthor_mmu_suspend(struct panthor_device *ptdev); void panthor_mmu_resume(struct panthor_device *ptdev); void panthor_mmu_force_reclaim(struct panthor_file *pfile); +void panthor_mmu_force_claim(struct panthor_file *pfile); =20 int panthor_vm_map_bo_range(struct panthor_vm *vm, struct panthor_gem_obje= ct *bo, u64 offset, u64 size, u64 va, u32 flags); --=20 2.54.0