From nobody Sat Jun 13 08:03:30 2026 Received: from mail-qk1-f182.google.com (mail-qk1-f182.google.com [209.85.222.182]) (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 C210136C588 for ; Fri, 8 May 2026 18:05:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778263524; cv=none; b=JmNuQHXzC1ha8rZJAI5btFX5gK838YeBsIrl25ksOyE9+tgt3goFwabjvkfzIXWtL5yiTvcNYrSrvgcE4YF8IAhvV14RVTj9gnByE97IR3kYJQg8WpXirSyvzWsHBuQa+6KXRkU1zttph/0Fa/rawtigm8SCUgp7aRTBTsKEj4Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778263524; c=relaxed/simple; bh=dbC2MH5cDSt5sUdiHWif63MYNb0id1rxKuUhGOTsLWw=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=CHMQXi9u/y4en8Fk/Nhj6bna7gUC28WNv+fzY0gfSbx9v55vl5KGWaT9P/D6gEZHNO9fkbXAlmGbErdl0ILfDxkzxTcfTqipZtqc9t3B+i8ANDB4Hfvk0tsvG2ErvovfgfyZgr4L3JZPUhkGXuKNZ/DFFkKCRfxH75r5sqhDbWQ= 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=Ia4D853G; arc=none smtp.client-ip=209.85.222.182 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="Ia4D853G" Received: by mail-qk1-f182.google.com with SMTP id af79cd13be357-8d6d5e45c43so254685985a.3 for ; Fri, 08 May 2026 11:05:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778263522; x=1778868322; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=9oUEHji2HuAH1Squ/e2hO3APLsVoXtI85k3zSv3ekYQ=; b=Ia4D853GmtVsrilw58tVp4/ygMQ7fZMOrROAVRrVrTHDOh6TPbSnS8osismvy3AUh4 WTlHaqg3txg1h1C/4K9FSWZ3QYcmaNmtCrhlL3OkHw05SG6J52eygvGmTclJPAs/LWVU sWdYaoO8g4pEOcNs5AJ1h4uKoZ0hW3dyCgh1XTBHIabJbZdsDUAjuAtQ6AZnp/fIMkrj i5zovMbUN/9c/EjI3UYGjDXPFyn/IsZtnf8Oltuno7hB7e1wsYbOZl8hv2CnQvUHSuHU qeahD3m9Rj/k0HG1Mqiz5VNtR6aeW0+JXfaQe3BVoJkC0OtqpnKNNX/Xo5NdSoF9D5m2 ldTw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778263522; x=1778868322; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=9oUEHji2HuAH1Squ/e2hO3APLsVoXtI85k3zSv3ekYQ=; b=VcLqy8KHKKHQLoZc1fI4M1vK3JvkbpCo+nIfL8CWlKMNoTIXf88RTcnx5hFmIm+kvX G2FbgzdkwmzpkZtG3fmJisVRdR9K3XqlDDi1S6s0DRb1Q7kh49q/csnSSybjuuDLdg2w 3wKiBQsLOfA9jLLgOhNuNEci+qtfLY3PP2QSHCvx1M2VdTwTbCwBKDoRDDIjEVDftQf0 7V8O0Qy2ApZp/u4Y3ck0qNam3rBRXn0hpIX/qTXai/nEMxhlfj679IFrfT758lyFumeo rpUMDvVRBzjQlFAthPL7eZYogK56MQxH5iZM9fXyk58rnU4xCP65O8z8YZH1NxiG+qyM +45Q== X-Forwarded-Encrypted: i=1; AFNElJ98Iq63KZxoSbWFrt53baRb5eWcj/Ll0Q+n6gGfPg1UdKNvvjVR/k6pN+VBPZeeJ8mZEPA+HPmyt1R9yo0=@vger.kernel.org X-Gm-Message-State: AOJu0YyxWN8hZ/qjhXmbgfmI3RrrQJT296/nl/y5uwxxTihGNVQvfjN5 RdB/qGxXbp2Ff0Ugukaf7aZsoU9asLjUSoTn2xqhgwgDZD0hYoEjd0Dz X-Gm-Gg: AeBDiev3YB8tDm+5pWiDisvZD2tcvkfb0GxF6iAcyxpmsX34WR9CmDYUV1wwMG0HSZ/ fsboc5gImsueyo1q4ZwgaUTeHunhuXYcAs+Il3JOQ8q6fUwxchIR9u3mzIh+reTB8UQjnWiG1n/ 3hTvm16SRz65al8C+QApA+h0mhEAMjHybZRLatfp3+8m8nuQp8czprgaLpdtfLQP0wR0hgU+nl8 rmHwkqD1GTQiwLOWmCGZfy1HNOXZJlaTIJw0SrTsHVxqJMS4JsgGeLTMo74FGj/TLhh9+SrFAYB yy61ah94crzDz/vRvPMyE4H8+bWSYjeoQutYbF3wn7wzd+w47BgeVumiO/K9zGqWDvKq7ly8l+m 9lX7E4KJEr5nvw2nvdbu6vp2NwrqXQxOHELpGtrNSUipe/mULm/T/TfNarEs7dUb4iJt89cL/E+ Fzcn7jT6JpPFNsyTH0CB+UUBxH/vUuTBStF+9wdhaO+UG3mlchAwGPxkWmluzPC5Ah9BMW6FQoQ t+iu3AD8CGsMhbpdHM5WFSVdB+3PwWCc4phT7J2mB4= X-Received: by 2002:a05:620a:1991:b0:8ef:3953:7ab with SMTP id af79cd13be357-907badfb1b2mr550343985a.40.1778263521386; Fri, 08 May 2026 11:05:21 -0700 (PDT) Received: from security.cs.northwestern.edu (security.cs.northwestern.edu. [165.124.184.136]) by smtp.gmail.com with ESMTPSA id af79cd13be357-907b9c542cdsm265592085a.0.2026.05.08.11.05.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 May 2026 11:05:21 -0700 (PDT) From: Ziyi Guo X-Google-Original-From: Ziyi Guo To: l.stach@pengutronix.de Cc: linux+etnaviv@armlinux.org.uk, christian.gmeiner@gmail.com, airlied@gmail.com, simona@ffwll.ch, etnaviv@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Ziyi Guo Subject: [PATCH] drm/etnaviv: Honor userptr read-only at the GPU MMU Date: Fri, 8 May 2026 18:05:18 +0000 Message-Id: <20260508180518.1417371-1-n7l8m4@u.northwestern.edu> X-Mailer: git-send-email 2.34.1 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The IOMMU mapping for a userptr BO was installed with a hard-coded ETNAVIV_PROT_READ | ETNAVIV_PROT_WRITE, ignoring the read-only attribute set when the BO was created without ETNA_USERPTR_WRITE. Build the prot mask from etnaviv_obj->userptr.ro so MMUv2 clears MMUv2_PTE_WRITEABLE for read-only userptr BOs. MMUv1 PTEs carry no R/W bits and its fast path skips the MMU, so read-only cannot be enforced there; refuse such a mapping with -ENODEV. Fixes: a8c21a5451d8 ("drm/etnaviv: add initial etnaviv DRM driver") Signed-off-by: Ziyi Guo --- drivers/gpu/drm/etnaviv/etnaviv_mmu.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/etnaviv/etnaviv_mmu.c b/drivers/gpu/drm/etnavi= v/etnaviv_mmu.c index e3572461b599..28f26d60ac05 100644 --- a/drivers/gpu/drm/etnaviv/etnaviv_mmu.c +++ b/drivers/gpu/drm/etnaviv/etnaviv_mmu.c @@ -269,10 +269,18 @@ int etnaviv_iommu_map_gem(struct etnaviv_iommu_contex= t *context, { struct sg_table *sgt =3D etnaviv_obj->sgt; struct drm_mm_node *node; + int prot =3D ETNAVIV_PROT_READ; int ret; =20 lockdep_assert_held(&etnaviv_obj->lock); =20 + if (!etnaviv_obj->userptr.ptr || !etnaviv_obj->userptr.ro) + prot |=3D ETNAVIV_PROT_WRITE; + + if (etnaviv_obj->userptr.ptr && etnaviv_obj->userptr.ro && + context->global->version =3D=3D ETNAVIV_IOMMU_V1) + return -ENODEV; + mutex_lock(&context->lock); =20 /* v1 MMU can optimize single entry (contiguous) scatterlists */ @@ -301,7 +309,7 @@ int etnaviv_iommu_map_gem(struct etnaviv_iommu_context = *context, =20 mapping->iova =3D node->start; ret =3D etnaviv_iommu_map(context, node->start, etnaviv_obj->size, sgt, - ETNAVIV_PROT_READ | ETNAVIV_PROT_WRITE); + prot); =20 if (ret < 0) { drm_mm_remove_node(node); --=20 2.34.1