Merge "disp: msm: sde: avoid VMID_TVM check during buf import in trusted-vm"

This commit is contained in:
qctecmdr
2023-03-12 08:29:59 -07:00
gecommit door Gerrit - the friendly Code Review server
bovenliggende c6dd1a40a9 428a27027d
commit 7e688d492e
3 gewijzigde bestanden met toevoegingen van 32 en 13 verwijderingen

Bestand weergeven

@@ -157,19 +157,22 @@ struct drm_gem_object *msm_gem_prime_import(struct drm_device *dev,
}
#if (KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE)
ret = mem_buf_dma_buf_copy_vmperm(dma_buf, &vmid_list, &perms_list, &nelems);
if (ret) {
DRM_ERROR("get vmid list failure, ret:%d", ret);
goto fail_put;
/* avoid VMID checks in trusted-vm */
if (!kms->funcs->in_trusted_vm || !kms->funcs->in_trusted_vm(kms)) {
ret = mem_buf_dma_buf_copy_vmperm(dma_buf, &vmid_list, &perms_list, &nelems);
if (ret) {
DRM_ERROR("get vmid list failure, ret:%d", ret);
goto fail_put;
}
for (i = 0; i < nelems; i++)
if (vmid_list[i] == VMID_TVM)
is_nested_sec_vmid = true;
/* mem_buf_dma_buf_copy_vmperm uses kmemdup, do kfree to free up the memory */
kfree(vmid_list);
kfree(perms_list);
}
for (i = 0; i < nelems; i++)
if (vmid_list[i] == VMID_TVM)
is_nested_sec_vmid = true;
/* mem_buf_dma_buf_copy_vmperm uses kmemdup, do kfree to free up the memory */
kfree(vmid_list);
kfree(perms_list);
#endif
/*

Bestand weergeven

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2016-2021, The Linux Foundation. All rights reserved.
* Copyright (C) 2013 Red Hat
* Author: Rob Clark <robdclark@gmail.com>
@@ -140,6 +140,7 @@ struct msm_kms_funcs {
/* topology dsc information */
int (*get_dsc_count)(const struct msm_kms *kms,
u32 hdisplay, u32 *num_dsc);
bool (*in_trusted_vm)(const struct msm_kms *kms);
};
struct msm_kms {

Bestand weergeven

@@ -3857,6 +3857,20 @@ static int sde_kms_get_dsc_count(const struct msm_kms *kms,
return 0;
}
static bool sde_kms_in_trusted_vm(const struct msm_kms *kms)
{
struct sde_kms *sde_kms;
if (!kms) {
SDE_ERROR("invalid kms\n");
return false;
}
sde_kms = to_sde_kms(kms);
return sde_in_trusted_vm(sde_kms);
}
static int _sde_kms_null_commit(struct drm_device *dev,
struct drm_encoder *enc)
{
@@ -4295,6 +4309,7 @@ static const struct msm_kms_funcs kms_funcs = {
.trigger_null_flush = sde_kms_trigger_null_flush,
.get_mixer_count = sde_kms_get_mixer_count,
.get_dsc_count = sde_kms_get_dsc_count,
.in_trusted_vm = sde_kms_in_trusted_vm,
};
static int _sde_kms_mmu_destroy(struct sde_kms *sde_kms)