Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a1450df4 authored by Yashwanth's avatar Yashwanth
Browse files

disp: msm: remap dmabuf attach during secure transitions



During secure cb detach, gem objects stored in the aspace
active list are not cleaned up properly leading to crash
when secure cb attaches again. This change remaps dma
buffer for those gem objects.

Change-Id: I7626e87ab60a61261c802a7e7763982546c4c2e7
Signed-off-by: default avatarYashwanth <yvulapu@codeaurora.org>
parent 2ce4335f
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
/*
 * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
 * Copyright (c) 2018-2020, The Linux Foundation. All rights reserved.
 * Copyright (C) 2013 Red Hat
 * Author: Rob Clark <robdclark@gmail.com>
 *
@@ -427,8 +427,9 @@ int msm_gem_get_iova(struct drm_gem_object *obj,
		bool reattach = false;

		dev = msm_gem_get_aspace_device(aspace);
		if (dev && obj->import_attach &&
				(dev != obj->import_attach->dev)) {
		if ((dev && obj->import_attach) &&
				((dev != obj->import_attach->dev) ||
				msm_obj->obj_dirty)) {
			dmabuf = obj->import_attach->dmabuf;

			DRM_DEBUG("detach nsec-dev:%pK attach sec-dev:%pK\n",
@@ -446,6 +447,7 @@ int msm_gem_get_iova(struct drm_gem_object *obj,
						PTR_ERR(obj->import_attach));
				goto unlock;
			}
			msm_obj->obj_dirty = false;
			reattach = true;
		}

@@ -558,6 +560,7 @@ void msm_gem_aspace_domain_attach_detach_update(
			if (obj->import_attach) {
				mutex_lock(&msm_obj->lock);
				put_iova(obj);
				msm_obj->obj_dirty = true;
				mutex_unlock(&msm_obj->lock);
			}
		}
@@ -1005,6 +1008,7 @@ static int msm_gem_new_impl(struct drm_device *dev,
	INIT_LIST_HEAD(&msm_obj->iova_list);
	msm_obj->aspace = NULL;
	msm_obj->in_active_list = false;
	msm_obj->obj_dirty = false;

	if (struct_mutex_locked) {
		WARN_ON(!mutex_is_locked(&dev->struct_mutex));
+5 −0
Original line number Diff line number Diff line
@@ -136,6 +136,11 @@ struct msm_gem_object {

	struct msm_gem_address_space *aspace;
	bool in_active_list;

	/* Indicates whether object  needs to request for
	 * new pagetables due to cb switch
	 */
	bool obj_dirty;
};
#define to_msm_bo(x) container_of(x, struct msm_gem_object, base)