clear-pkgs-linux-iot-lts2018/1138-media-intel-ipu4-VIRT-...

73 lines
2.1 KiB
Diff
Raw Normal View History

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: "Yew, Chang Ching" <chang.ching.yew@intel.com>
Date: Sun, 28 Jul 2019 02:58:49 +0800
Subject: [PATCH] media: intel-ipu4: [VIRT] Reorder vbk_reset and
ipu_vbk_hash_del
In vbk_release or vbs_reset_ioctl, client_id passed to
ipu_vbk_hash_del() is invalid due to ipu->dev object freed in
vbk_reset.
vbk_reset is moved after vbk_hash_del to resolve issue
Tracked-On: OAM-83283
Tracked-On: HSD-1507332652
Tracked-On: PKT-2253
Signed-off-by: Yew, Chang Ching <chang.ching.yew@intel.com>
---
.../pci/intel/virtio/intel-ipu4-virtio-be.c | 17 +++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)
diff --git a/drivers/media/pci/intel/virtio/intel-ipu4-virtio-be.c b/drivers/media/pci/intel/virtio/intel-ipu4-virtio-be.c
2020-10-27 02:14:06 +08:00
index 75e93e47fa83..4aa722216ae7 100644
--- a/drivers/media/pci/intel/virtio/intel-ipu4-virtio-be.c
+++ b/drivers/media/pci/intel/virtio/intel-ipu4-virtio-be.c
@@ -318,9 +318,6 @@ static int ipu_vbk_release(struct inode *inode, struct file *f)
for (i = 0; i < IPU_VIRTIO_QUEUE_MAX; i++)
virtio_vq_reset(&(priv->vqs[i]));
- /* device specific release */
- ipu_vbk_reset(priv);
-
pr_debug("ipu_vbk_connection cnt is %d\n",
ipu_vbk_connection_cnt);
@@ -331,6 +328,9 @@ static int ipu_vbk_release(struct inode *inode, struct file *f)
ipu_vbk_hash_del_all();
}
+ /* device specific release */
+ ipu_vbk_reset(priv);
+
kfree(priv);
ipu4_virtio_be_req_queue_free();
@@ -390,11 +390,6 @@ static long ipu_vbk_ioctl(struct file *f, unsigned int ioctl,
ipu_vbk_connection_cnt++;
return r;
case VBS_RESET_DEV:
- r = ipu_vbk_reset(priv);
- if (r < 0) {
- pr_err("VBS_RESET_DEV: virtio_vqs_ioctl failed!\n");
- return -EFAULT;
- }
pr_debug("ipu_vbk_connection cnt is %d\n",
ipu_vbk_connection_cnt);
@@ -405,6 +400,12 @@ static long ipu_vbk_ioctl(struct file *f, unsigned int ioctl,
ipu_vbk_hash_del_all();
}
+ r = ipu_vbk_reset(priv);
+ if (r < 0) {
+ pr_err("VBS_RESET_DEV: virtio_vqs_ioctl failed!\n");
+ return -EFAULT;
+ }
+
return r;
default:
/*mutex_lock(&n->dev.mutex);*/
--
https://clearlinux.org