@@ -43,8 +43,10 @@ static void release_registered_pages(struct tee_shm *shm)
}
}
-static void tee_shm_release(struct tee_device *teedev, struct tee_shm *shm)
+static void tee_shm_release(struct tee_shm *shm)
{
+ struct tee_device *teedev = shm->teedev;
+
if (shm->flags & TEE_SHM_POOL) {
teedev->pool->ops->free(teedev->pool, shm);
} else if (shm->flags & TEE_SHM_DYNAMIC) {
@@ -89,6 +91,7 @@ static struct tee_shm *shm_alloc_helper(struct tee_context *ctx, size_t size,
refcount_set(&shm->refcount, 1);
shm->flags = flags;
+ shm->teedev = teedev;
shm->id = id;
/*
@@ -298,6 +301,7 @@ register_shm_helper(struct tee_context *ctx, struct iov_iter *iter, u32 flags,
refcount_set(&shm->refcount, 1);
shm->flags = flags;
+ shm->teedev = teedev;
shm->ctx = ctx;
shm->id = id;
addr = untagged_addr((unsigned long)iter_iov_addr(iter));
@@ -560,7 +564,7 @@ EXPORT_SYMBOL_GPL(tee_shm_get_from_id);
*/
void tee_shm_put(struct tee_shm *shm)
{
- struct tee_device *teedev = shm->ctx->teedev;
+ struct tee_device *teedev = shm->teedev;
bool do_release = false;
mutex_lock(&teedev->mutex);
@@ -578,6 +582,6 @@ void tee_shm_put(struct tee_shm *shm)
mutex_unlock(&teedev->mutex);
if (do_release)
- tee_shm_release(teedev, shm);
+ tee_shm_release(shm);
}
EXPORT_SYMBOL_GPL(tee_shm_put);
@@ -47,6 +47,7 @@ struct tee_context {
/**
* struct tee_shm - shared memory object
+ * @teedev: device used to allocate the object
* @ctx: context using the object
* @paddr: physical address of the shared memory
* @kaddr: virtual address of the shared memory
@@ -63,6 +64,7 @@ struct tee_context {
* used by all drivers
*/
struct tee_shm {
+ struct tee_device *teedev;
struct tee_context *ctx;
phys_addr_t paddr;
void *kaddr;
In commit 5271b2011e44 ("tee: remove redundant teedev in struct tee_shm"), the reference to teedev was removed following the change in commit 217e0250cccb ("tee: use reference counting for tee_context"). This change ensured that the ctx in tee_shm remains valid as long as the shared buffer is valid, and teedev is accessible from ctx. It made teedev in tee_shm redundant. Reintroduce teedev to tee_shm to facilitate the introduction of orphan shared memory, which may not be linked to the context it was originally associated with. Signed-off-by: Amirreza Zarrabi <quic_azarrabi@quicinc.com> --- drivers/tee/tee_shm.c | 10 +++++++--- include/linux/tee_drv.h | 2 ++ 2 files changed, 9 insertions(+), 3 deletions(-)