From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (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 AF82843BDDB for ; Tue, 11 Aug 2026 10:18:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786443507; cv=none; b=u3HmIx3JiehmKzGojXDHrLbWQALKlN6Dp60FVpxYZmVMzaEErLMhVVX8lr9XuiAZkBbVktyb6zmATXh8vnTeo1K23GXFWNO9PVif0JSp6CaPhxdnesRwE+aX+5+D38k4TmH4xNfEjg90gGK16pLD/ENRwuCLOCVC7fBmZ0JGiM4= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786443507; c=relaxed/simple; bh=ZYp1BwFYi/2bMtugS7zfwiZcE/lz4o2JKqmO8xY3DZg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Qsu4GjbANnEKi5YasVRDRO4dZSk1uYS1oS7/N3Ny27FmV6o6BOvLgNGKESncev+VxyXH/t0jc69sdRgYpBbo1k+jIvbt4j0m5topVFJQydAk+BmuHLPBdwIF4mwWtQb+EgGGTDYSpaVZ9rv0dHqllqGqmEgA+KR6cSWfY0xfbao= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=OyN0CK2L; arc=none smtp.client-ip=148.251.105.195 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 (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="OyN0CK2L" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1786443474; bh=ZYp1BwFYi/2bMtugS7zfwiZcE/lz4o2JKqmO8xY3DZg=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=OyN0CK2L/BWmz56KZILZlyitqyDMV/7BudwMHU+mdbWnEGLWv7QgNKSptrjz6HYuH uIZpSpQi8YG5Gt4MgdkYPaGX80xuz+VNUPVDFMvV/1gX2gF1XXRDPiXHMr2GmyJx9Z nAjtDG5vBxw8AVP+hBt1X/k0tDjkghLZUQRu57lqW83G8VLo2eMguH8stu115Aq4lE OQykSiwqCJactx8eYLfi6UKaiJJ7r3S3r+MbfMAXc6rmlZXBN5afYpY3cvkJOwo2np 3KdRmQISEqro8fJeIBrnHamirNHJ9J2KAzUAJlu6kUU4CpRXKviiCaZFbACQN4BtCR j1ZqZ8wpG1d9Q== Received: from fedora-21.home (unknown [100.64.0.11]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: bbrezillon) by bali.collaboradmins.com (Postfix) with ESMTPSA id 116A817E121B; Tue, 11 Aug 2026 12:17:54 +0200 (CEST) From: Boris Brezillon Date: Tue, 11 Aug 2026 12:17:47 +0200 Subject: [PATCH v2 13/17] drm/panthor: Track user owned VMs 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: 7bit Message-Id: <20260811-panthor-unplug-fixes-v2-13-6b583e37f9ae@collabora.com> References: <20260811-panthor-unplug-fixes-v2-0-6b583e37f9ae@collabora.com> In-Reply-To: <20260811-panthor-unplug-fixes-v2-0-6b583e37f9ae@collabora.com> To: Steven Price , Liviu Dudau Cc: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Boris Brezillon X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1786443467; l=3118; i=boris.brezillon@collabora.com; s=20260429; h=from:subject:message-id; bh=ZYp1BwFYi/2bMtugS7zfwiZcE/lz4o2JKqmO8xY3DZg=; b=E6X2u1SlVbfXZJFr5NcQYVPfwjUJLGgjEPktcj/6ShDfxYzGNiPzJIGQSEkQPZebr4Ue0KB0c T/jfpramj//DGOWle0q1ERIqrh2HMWh6amKS3Hd7U+RP4DrTaxuyffA X-Developer-Key: i=boris.brezillon@collabora.com; a=ed25519; pk=eN+ORdOgQY7d5U+0kA8h5bf67XdD8bhKbjD/TCHexSY= We will soon need this to fix the unplug logic and make sure panthor_vm objects are not left behind after an unplug. Signed-off-by: Boris Brezillon --- drivers/gpu/drm/panthor/panthor_mmu.c | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/panthor/panthor_mmu.c b/drivers/gpu/drm/panthor/panthor_mmu.c index 93e9d55da783..5672d437d52d 100644 --- a/drivers/gpu/drm/panthor/panthor_mmu.c +++ b/drivers/gpu/drm/panthor/panthor_mmu.c @@ -107,12 +107,15 @@ struct panthor_mmu { /** @vm: VMs management fields */ struct { - /** @vm.lock: Lock protecting access to list. */ + /** @vm.lock: Lock protecting access to list and user_owned. */ struct mutex lock; /** @vm.list: List containing all VMs. */ struct list_head list; + /** @vm.list: List containing VMs with a valid handle. */ + struct list_head user_owned; + /** @vm.reset_in_progress: True if a reset is in progress. */ bool reset_in_progress; @@ -427,6 +430,9 @@ struct panthor_vm { /** @node: Used to insert the VM in the panthor_mmu::vm::list. */ struct list_head node; + /* @user_node: Used to insert the VM in the panthor_mmu::vm::user_owned list. */ + struct list_head user_node; + /** @for_mcu: True if this is the MCU VM. */ bool for_mcu; @@ -1669,10 +1675,19 @@ int panthor_vm_pool_create_vm(struct panthor_device *ptdev, drm_gem_object_get(&pool->dummy->base); vm->dummy = pool->dummy; + /* Insert in the list before xa_alloc() so we can't race with + * panthor_vm_pool_destroy_vm() have the VM inserted in the + * user_owned list after it's been destroyed. + */ + scoped_guard(mutex, &ptdev->mmu->vm.lock) + list_add_tail(&vm->user_node, &ptdev->mmu->vm.user_owned); + ret = xa_alloc(&pool->xa, &id, vm, XA_LIMIT(1, PANTHOR_MAX_VMS_PER_FILE), GFP_KERNEL); if (ret) { + scoped_guard(mutex, &ptdev->mmu->vm.lock) + list_del_init(&vm->user_node); panthor_vm_put(vm); return ret; } @@ -1727,13 +1742,19 @@ static void panthor_vm_destroy(struct panthor_vm *vm) */ int panthor_vm_pool_destroy_vm(struct panthor_vm_pool *pool, u32 handle) { + struct panthor_device *ptdev; struct panthor_vm *vm; vm = xa_erase(&pool->xa, handle); + if (!vm) + return -EINVAL; + + ptdev = container_of(vm->as->base.drm, struct panthor_device, base); + scoped_guard(mutex, &ptdev->mmu->vm.lock) + list_del_init(&vm->user_node); panthor_vm_destroy(vm); - - return vm ? 0 : -EINVAL; + return 0; } /** @@ -3118,6 +3139,7 @@ panthor_vm_create(struct panthor_device *ptdev, bool for_mcu, goto err_put_as; } + INIT_LIST_HEAD(&vm->user_node); vm->user_va_range = kernel_va_start; vm->as = as; mutex_init(&vm->heaps.lock); @@ -3626,6 +3648,7 @@ int panthor_mmu_init(struct panthor_device *ptdev) return ret; INIT_LIST_HEAD(&mmu->vm.list); + INIT_LIST_HEAD(&mmu->vm.user_owned); ret = drmm_mutex_init(&ptdev->base, &mmu->vm.lock); if (ret) return ret; -- 2.55.0