clear-pkgs-linux-iot-lts2018/1086-media-intel-ipu4-ICI-V...

101 lines
3.8 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: spoluri <sarat.chandra.poluri@intel.com>
Date: Wed, 8 May 2019 15:49:44 -0700
Subject: [PATCH] media: intel-ipu4: [ICI/VIRT] Use proper locks for protecting
buf list.
Fix buf list locks
Change-Id: I49217ceba155b76070262611cf39be63e5d2fb01
Tracked-On: PKT-2287
Tracked-On: HSDES-1409362467
Signed-off-by: spoluri <sarat.chandra.poluri@intel.com>
---
drivers/media/pci/intel/ici/ici-isys-csi2.c | 1 -
drivers/media/pci/intel/ici/ici-isys-frame-buf.c | 1 -
drivers/media/pci/intel/ici/ici-isys-frame-buf.h | 1 -
drivers/media/pci/intel/virtio/intel-ipu4-para-virt-drv.c | 8 +++++---
4 files changed, 5 insertions(+), 6 deletions(-)
diff --git a/drivers/media/pci/intel/ici/ici-isys-csi2.c b/drivers/media/pci/intel/ici/ici-isys-csi2.c
index 65416dd6d83b..e03417b349df 100644
--- a/drivers/media/pci/intel/ici/ici-isys-csi2.c
+++ b/drivers/media/pci/intel/ici/ici-isys-csi2.c
@@ -11,7 +11,6 @@
#include "./ici/ici-isys-csi2.h"
#include "isysapi/interface/ia_css_isysapi_fw_types.h"
#include "ipu-platform-isys-csi2-reg.h"
-//#include "intel-ipu-isys-csi2-common.h"
#define CSI2_ACCINV 8
diff --git a/drivers/media/pci/intel/ici/ici-isys-frame-buf.c b/drivers/media/pci/intel/ici/ici-isys-frame-buf.c
index c8451b28e8d5..1dc8899e5e7b 100644
--- a/drivers/media/pci/intel/ici/ici-isys-frame-buf.c
+++ b/drivers/media/pci/intel/ici/ici-isys-frame-buf.c
@@ -1042,7 +1042,6 @@ int ici_isys_frame_buf_init(
struct ici_isys_frame_buf_list* buf_list)
{
buf_list->drv_priv = NULL;
- mutex_init(&buf_list->mutex);
spin_lock_init(&buf_list->lock);
spin_lock_init(&buf_list->short_packet_queue_lock);
INIT_LIST_HEAD(&buf_list->getbuf_list);
diff --git a/drivers/media/pci/intel/ici/ici-isys-frame-buf.h b/drivers/media/pci/intel/ici/ici-isys-frame-buf.h
index 771967ce5360..5072e925e4ba 100644
--- a/drivers/media/pci/intel/ici/ici-isys-frame-buf.h
+++ b/drivers/media/pci/intel/ici/ici-isys-frame-buf.h
@@ -75,7 +75,6 @@ struct ici_frame_short_buf {
struct ici_isys_frame_buf_list {
void *drv_priv;
- struct mutex mutex;
struct list_head getbuf_list;
struct list_head putbuf_list;
diff --git a/drivers/media/pci/intel/virtio/intel-ipu4-para-virt-drv.c b/drivers/media/pci/intel/virtio/intel-ipu4-para-virt-drv.c
index 5b4bac23f089..3a210dd5c17e 100644
--- a/drivers/media/pci/intel/virtio/intel-ipu4-para-virt-drv.c
+++ b/drivers/media/pci/intel/virtio/intel-ipu4-para-virt-drv.c
@@ -290,6 +290,7 @@ struct ici_frame_buf_wrapper *get_buf(struct virtual_stream *vstream, struct ici
int res;
unsigned i;
struct ici_frame_buf_wrapper *buf;
+ unsigned long flags = 0;
struct ici_kframe_plane *kframe_plane;
struct ici_isys_frame_buf_list *buf_list = &vstream->buf_list;
@@ -347,10 +348,10 @@ struct ici_frame_buf_wrapper *get_buf(struct virtual_stream *vstream, struct ici
break;
}
- mutex_lock(&buf_list->mutex);
+ spin_lock_irqsave(&buf_list->lock, flags);
buf->state = ICI_BUF_PREPARED;
list_add_tail(&buf->uos_node, &buf_list->getbuf_list);
- mutex_unlock(&buf_list->mutex);
+ spin_unlock_irqrestore(&buf_list->lock, flags);
return buf;
}
@@ -620,6 +621,8 @@ static unsigned int stream_fop_poll(struct file *file, struct ici_stream_device
return rval;
}
+ //For error cases we set the return value in backend to 0.
+ //0 on the CameraHAL side causes the timeout error.
rval = req->func_ret;
ipu4_virtio_fe_req_queue_put(req);
@@ -875,7 +878,6 @@ static void base_device_release(struct device *sd)
int virt_frame_buf_init(struct ici_isys_frame_buf_list *buf_list)
{
buf_list->drv_priv = NULL;
- mutex_init(&buf_list->mutex);
spin_lock_init(&buf_list->lock);
spin_lock_init(&buf_list->short_packet_queue_lock);
INIT_LIST_HEAD(&buf_list->getbuf_list);
--
https://clearlinux.org