Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

drm/msm: Reject MAP_NULL op if no PRR

We need PRR support in order to implement MAP_NULL. Userspace shouldn't
be trying to use this if it is unsupported.

Reported-by: Valentine Burley <valentine.burley@collabora.com>
Link: https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/37935#note_3153730
Signed-off-by: Rob Clark <robin.clark@oss.qualcomm.com>
Tested-by: Valentine Burley <valentine.burley@collabora.com>
Patchwork: https://patchwork.freedesktop.org/patch/682941/
Message-ID: <20251022222051.10030-1-robin.clark@oss.qualcomm.com>

Rob Clark 73b7e48a 7f9335f2

+17 -7
-7
drivers/gpu/drm/msm/adreno/adreno_gpu.c
··· 348 348 return 0; 349 349 } 350 350 351 - static bool 352 - adreno_smmu_has_prr(struct msm_gpu *gpu) 353 - { 354 - struct adreno_smmu_priv *adreno_smmu = dev_get_drvdata(&gpu->pdev->dev); 355 - return adreno_smmu && adreno_smmu->set_prr_addr; 356 - } 357 - 358 351 int adreno_get_param(struct msm_gpu *gpu, struct msm_context *ctx, 359 352 uint32_t param, uint64_t *value, uint32_t *len) 360 353 {
+6
drivers/gpu/drm/msm/msm_gem_vma.c
··· 964 964 lookup_op(struct msm_vm_bind_job *job, const struct drm_msm_vm_bind_op *op) 965 965 { 966 966 struct drm_device *dev = job->vm->drm; 967 + struct msm_drm_private *priv = dev->dev_private; 967 968 int i = job->nr_ops++; 968 969 int ret = 0; 969 970 ··· 1009 1008 default: 1010 1009 ret = UERR(EINVAL, dev, "invalid op: %u\n", op->op); 1011 1010 break; 1011 + } 1012 + 1013 + if ((op->op == MSM_VM_BIND_OP_MAP_NULL) && 1014 + !adreno_smmu_has_prr(priv->gpu)) { 1015 + ret = UERR(EINVAL, dev, "PRR not supported\n"); 1012 1016 } 1013 1017 1014 1018 return ret;
+11
drivers/gpu/drm/msm/msm_gpu.h
··· 299 299 return container_of(adreno_smmu, struct msm_gpu, adreno_smmu); 300 300 } 301 301 302 + static inline bool 303 + adreno_smmu_has_prr(struct msm_gpu *gpu) 304 + { 305 + struct adreno_smmu_priv *adreno_smmu = dev_get_drvdata(&gpu->pdev->dev); 306 + 307 + if (!adreno_smmu) 308 + return false; 309 + 310 + return adreno_smmu && adreno_smmu->set_prr_addr; 311 + } 312 + 302 313 /* It turns out that all targets use the same ringbuffer size */ 303 314 #define MSM_GPU_RINGBUFFER_SZ SZ_32K 304 315 #define MSM_GPU_RINGBUFFER_BLKSIZE 32