From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wr1-f41.google.com (mail-wr1-f41.google.com [209.85.221.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A3C183C4B9A for ; Fri, 10 Jul 2026 12:03:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.41 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783685030; cv=none; b=AWSnfmG5DiHQb0KYk4yBC+SuT4dM9haKGlQVNlG0QxSEyk2mwBs+cha6CD9EJEjvQ5NBw6F7ndGPN8uupDPjpRN6kyeq+p4kEaLMhEMar8BhsOmE2rSBERWguwj64z/WwiaaPXo0yP6W8iuKP5RTiLolL7v8w+H6Jq0sS2xZbwY= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783685030; c=relaxed/simple; bh=JATrW61bRY9dGDHzPhc5noQeaPHurL2NgwKCX7yU2wA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=d/KMgEt5tAqny/SBVGdkPpZBafYCk61oW/+YYVZbusWo1iFD3OOp9gfk+MBSQFasfsp/GcHp2LmmML+Cc2tBKNROBWLGdIQKEF9Hpa1VtunuQ/0ejt58NXSh4Nee7wbLIGL4ecAHOvBp7dkHhOMPqRWXnM4ZDjb8kGgANq93Rd0= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=PQt88hLI; arc=none smtp.client-ip=209.85.221.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="PQt88hLI" Received: by mail-wr1-f41.google.com with SMTP id ffacd0b85a97d-472326ca506so659716f8f.2 for ; Fri, 10 Jul 2026 05:03:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783685027; x=1784289827; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=yd1dFdW3DE1YeT+fprMXo0jAXkdXd9jG5OHl8Qzt964=; b=PQt88hLIr1lJE9tDVo4RjaN7oUo8FUG6M6T+EqKko5SWLDCkshWuunM2CFHsWvUHVT crtVplkk2hUtJRH3/FIUFNs1ct+NW3xu/j/nBl23ErqnDEkpMekEh/URtKvfTa6bPo60 U3QVCyd0DX7Os1HwAsrInSJ5TYLa8A0+77A0vk44Wamwt15cHhAZXUPB8E6fTR6wYVCH MphA4Bg8Rog8u2XGs3NEGk1Mx1+9oQYrolkrKdhHw80ZnhCzi/ppG0B1JEsMy1NRB3Fr o5ZsuLJ/eh5g8+d2cEx49jwJPbSQL5RqT88PO77n6IyVDpmi/VcERM44FIMuBRfl/lH6 4hNg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783685027; x=1784289827; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=yd1dFdW3DE1YeT+fprMXo0jAXkdXd9jG5OHl8Qzt964=; b=P1wAt03p8ij4zgrYnkNYVINulXodkpDqeHCWabglzDxtwL3ZS2n3FvAW7aBYLfJoHE rTB1zNe9ZZtyzKRaZy+NRXsZ0a3GJIxQwzbAGVlhgWhMp8sOqQDI/6+b/iqXoDd2Gydr GjE8w1nWDyit5zXagbjBpBGDouQrJ0UbwDbzGAw+yIvJYhd/q2wo/qpXrMb8ofvVBEZD a3y+wCYu66VOzAzksdnI08wwI8X/R9LD2/I+S/4/TCXbc0MACyfsjPpgfENV3vls23uA +gd9R/thp0Y5h6N5eZgDZG19vLNg30pgK8+NsjSXmyqgfk2b4LSMy9wx8xOk8ExRcnJh Wb5g== X-Forwarded-Encrypted: i=1; AHgh+Ro/7XlmBC5kym5C7M1CoruZPSb3r0ttOH/U54S0ZHtRgAUajyB2kPXSEGjMsDCDYL1QI92PNExBnEm7EVo=@vger.kernel.org X-Gm-Message-State: AOJu0Ywu3uL708To6aFSge3pBU0X05hJsgoBM9pzGk9JklM4bGtNp8Oa aSZhzI7Zu2QCkU3FVd5Ic3/eIOqqK1pxGQrjsu4S1iy+zOMuw5V7vyqykqY+yn92 X-Gm-Gg: AfdE7cnFfMexgsiRyeF4pT/Yg1UiHHfpAa5RzooaHTBWsU7zBm6tfmUvTmf7Lg5wHLn c72k7cJJZ3sn2lvpbM245SwRRmS21QK127EXJgbYcieCa5dDel/CTG+xjSBTFizTnQgFbrzovDJ KZxYKCaWDtk183ysG3QW76E13ZHs0veFAda4lfKIySgEAExuk1FyjAQllOZAhgsa/Rb3RqeaZXF 6zMWftnq1cXL5aUyekU4lFPz+OZ5MByYreBlmYnQTnj6G1SyATgAx0A6tYhJQVs1zfUoeyvxfb7 8DIKoXYIvQzXr4ibCZrYnpzoZuHHMHHq3BeIkCq03pKXIsHCI7g5PM4ozBcuJK7Nz3OR86egzd5 GTOgA+yr9eq0dUjAdRliEwYPyCH3EOUrFutCZdnWVQl/X7szDD2PUzty94WchQziQl+bf4x3Z+j VQuGwOc56mJa06gcpi5zuPDIFKRmbdFgDXOOUmMbNzuBTk5sMe8BmNoOQujfUwkVJoileIjgx6V X/f2czC592TI29CRVy6VAKsWCTStyMiJw== X-Received: by 2002:a05:6000:41ee:b0:46e:6210:ad4a with SMTP id ffacd0b85a97d-47df071e518mr11370482f8f.5.1783685026628; Fri, 10 Jul 2026 05:03:46 -0700 (PDT) Received: from localhost.localdomain (62-178-82-42.cable.dynamic.surfer.at. [62.178.82.42]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-47a9e4d83bdsm59637487f8f.13.2026.07.10.05.03.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Jul 2026 05:03:46 -0700 (PDT) From: Christian Gmeiner Date: Fri, 10 Jul 2026 14:03:42 +0200 Subject: [PATCH v3 1/2] drm/etnaviv: Reference count struct etnaviv_file_private 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: <20260710-etnaviv-reset-notification-v3-1-7a145c8a1d01@igalia.com> References: <20260710-etnaviv-reset-notification-v3-0-7a145c8a1d01@igalia.com> In-Reply-To: <20260710-etnaviv-reset-notification-v3-0-7a145c8a1d01@igalia.com> To: Lucas Stach , Russell King , Christian Gmeiner , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann Cc: etnaviv@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, kernel-dev@igalia.com, Christian Gmeiner X-Mailer: b4 0.14.3 From: Christian Gmeiner The next commit updates per-context data from the GPU reset path, which runs in the scheduler timeout worker. This can race with closing the DRM file: drm_sched_entity_flush() only waits until the entity queue is empty, it does not wait for jobs still running on the hardware. So the context can already be freed while the reset path still needs it. Reference count the context and let every submit hold a reference, the same way a submit already keeps its mmu context and pid alive. No functional change. Signed-off-by: Christian Gmeiner --- drivers/gpu/drm/etnaviv/etnaviv_drv.c | 17 ++++++++++++++++- drivers/gpu/drm/etnaviv/etnaviv_drv.h | 11 +++++++++++ drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c | 5 ++++- 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/etnaviv/etnaviv_drv.c b/drivers/gpu/drm/etnaviv/etnaviv_drv.c index 08aca9035fc1..a27ed014fb4e 100644 --- a/drivers/gpu/drm/etnaviv/etnaviv_drv.c +++ b/drivers/gpu/drm/etnaviv/etnaviv_drv.c @@ -60,6 +60,19 @@ static void load_gpu(struct drm_device *dev) } } +static void etnaviv_file_private_release(struct kref *kref) +{ + struct etnaviv_file_private *ctx = + container_of(kref, struct etnaviv_file_private, refcount); + + kfree(ctx); +} + +void etnaviv_file_private_put(struct etnaviv_file_private *ctx) +{ + kref_put(&ctx->refcount, etnaviv_file_private_release); +} + static int etnaviv_open(struct drm_device *dev, struct drm_file *file) { struct etnaviv_drm_private *priv = dev->dev_private; @@ -70,6 +83,8 @@ static int etnaviv_open(struct drm_device *dev, struct drm_file *file) if (!ctx) return -ENOMEM; + kref_init(&ctx->refcount); + ret = xa_alloc_cyclic(&priv->active_contexts, &ctx->id, ctx, xa_limit_32b, &priv->next_context_id, GFP_KERNEL); if (ret < 0) @@ -120,7 +135,7 @@ static void etnaviv_postclose(struct drm_device *dev, struct drm_file *file) xa_erase(&priv->active_contexts, ctx->id); - kfree(ctx); + etnaviv_file_private_put(ctx); } /* diff --git a/drivers/gpu/drm/etnaviv/etnaviv_drv.h b/drivers/gpu/drm/etnaviv/etnaviv_drv.h index 55a9e745604d..cba4323ae589 100644 --- a/drivers/gpu/drm/etnaviv/etnaviv_drv.h +++ b/drivers/gpu/drm/etnaviv/etnaviv_drv.h @@ -7,6 +7,7 @@ #define __ETNAVIV_DRV_H__ #include +#include #include #include #include @@ -29,6 +30,7 @@ struct etnaviv_iommu_global; #define ETNAVIV_SOFTPIN_START_ADDRESS SZ_4M /* must be >= SUBALLOC_SIZE */ struct etnaviv_file_private { + struct kref refcount; int id; struct etnaviv_iommu_context *mmu; struct drm_sched_entity sched_entity[ETNA_MAX_PIPES]; @@ -53,6 +55,15 @@ struct etnaviv_drm_private { struct etnaviv_cmdbuf *flop_reset_data_ppu; }; +void etnaviv_file_private_put(struct etnaviv_file_private *ctx); + +static inline struct etnaviv_file_private * +etnaviv_file_private_get(struct etnaviv_file_private *ctx) +{ + kref_get(&ctx->refcount); + return ctx; +} + int etnaviv_ioctl_gem_submit(struct drm_device *dev, void *data, struct drm_file *file); diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c b/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c index 1a77a09b3377..98f1f59a8b05 100644 --- a/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c +++ b/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c @@ -398,6 +398,9 @@ static void submit_cleanup(struct kref *kref) put_pid(submit->pid); + if (submit->ctx) + etnaviv_file_private_put(submit->ctx); + kfree(submit->pmrs); kfree(submit); } @@ -526,7 +529,7 @@ int etnaviv_ioctl_gem_submit(struct drm_device *dev, void *data, if (ret) goto err_submit_put; - submit->ctx = file->driver_priv; + submit->ctx = etnaviv_file_private_get(file->driver_priv); submit->mmu_context = etnaviv_iommu_context_get(submit->ctx->mmu); submit->exec_state = args->exec_state; submit->flags = args->flags; -- 2.54.0