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

gecommit door
Gerrit - the friendly Code Review server

commit
7e688d492e
@@ -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
|
||||
|
||||
/*
|
||||
|
@@ -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 {
|
||||
|
@@ -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)
|
||||
|
Verwijs in nieuw issue
Block a user