73 lines
2.1 KiB
Diff
73 lines
2.1 KiB
Diff
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
|
|
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
|
|
|