On Thu Dec 18 00:02:59 2025 +0200, Sakari Ailus wrote:
> {get,put}_streams_opened() aren't needed anymore. Drop them. This also
> requires acquiring isys->stream_mutex for system suspend.
>
> Signed-off-by: Sakari Ailus <[email protected]>
> Reviewed-by: Antti Laakso <[email protected]>
Patch committed.
Thanks,
Sakari Ailus
drivers/media/pci/intel/ipu6/ipu6-isys-video.c | 37 ++++----------------------
drivers/media/pci/intel/ipu6/ipu6-isys.c | 4 ++-
drivers/media/pci/intel/ipu6/ipu6-isys.h | 1 -
3 files changed, 8 insertions(+), 34 deletions(-)
---
diff --git a/drivers/media/pci/intel/ipu6/ipu6-isys-video.c
b/drivers/media/pci/intel/ipu6/ipu6-isys-video.c
index 1bb91627c7db..cea37442866e 100644
--- a/drivers/media/pci/intel/ipu6/ipu6-isys-video.c
+++ b/drivers/media/pci/intel/ipu6/ipu6-isys-video.c
@@ -432,24 +432,6 @@ unlock:
return ret;
}
-static void get_stream_opened(struct ipu6_isys *isys)
-{
- unsigned long flags;
-
- spin_lock_irqsave(&isys->streams_lock, flags);
- isys->stream_opened++;
- spin_unlock_irqrestore(&isys->streams_lock, flags);
-}
-
-static void put_stream_opened(struct ipu6_isys *isys)
-{
- unsigned long flags;
-
- spin_lock_irqsave(&isys->streams_lock, flags);
- isys->stream_opened--;
- spin_unlock_irqrestore(&isys->streams_lock, flags);
-}
-
int ipu6_isys_fw_pins_prepare(struct ipu6_isys_stream *stream,
struct v4l2_mbus_frame_desc *desc,
int (*fw_pin_cfg)(struct ipu6_isys_video *av,
@@ -527,8 +509,6 @@ int ipu6_isys_start_stream_firmware(struct ipu6_isys_stream
*stream,
return ret;
}
- get_stream_opened(stream->isys);
-
tout = wait_for_completion_timeout(&stream->stream_open_completion,
IPU6_FW_CALL_TIMEOUT_JIFFIES);
@@ -536,21 +516,19 @@ int ipu6_isys_start_stream_firmware(struct
ipu6_isys_stream *stream,
if (!tout) {
dev_err(dev, "stream open time out\n");
- ret = -ETIMEDOUT;
- goto out_put_stream_opened;
+ return -ETIMEDOUT;
}
if (stream->error) {
dev_err(dev, "stream open error: %d\n", stream->error);
- ret = -EIO;
- goto out_put_stream_opened;
+ return -EIO;
}
dev_dbg(dev, "start stream: open complete\n");
msg = ipu6_get_fw_msg_buf(stream);
if (!msg) {
- ret = -ENOMEM;
- goto out_put_stream_opened;
+ return -ENOMEM;
}
+
fw_ops->prepare_buf_set(msg, stream, bl);
ipu6_isys_buffer_list_queue(bl, IPU6_ISYS_BUFFER_LIST_FL_ACTIVE, 0);
@@ -585,7 +563,7 @@ out_stream_close:
retout = fw_ops->stream_close(stream->isys, stream->stream_handle);
if (retout < 0) {
dev_dbg(dev, "can't close stream (%d)\n", retout);
- goto out_put_stream_opened;
+ return retout;
}
tout = wait_for_completion_timeout(&stream->stream_close_completion,
@@ -597,9 +575,6 @@ out_stream_close:
else
dev_dbg(dev, "stream close complete\n");
-out_put_stream_opened:
- put_stream_opened(stream->isys);
-
return ret;
}
@@ -653,8 +628,6 @@ void ipu6_isys_close_stream_firmware(struct
ipu6_isys_stream *stream)
else
dev_dbg(dev, "close stream: complete\n");
- put_stream_opened(stream->isys);
-
scoped_guard(spinlock_irqsave, &stream->isys->power_lock) {
stream->isys->streams_by_handle[stream->stream_handle] = NULL;
csi2->streams_by_vc[stream->vc] = NULL;
diff --git a/drivers/media/pci/intel/ipu6/ipu6-isys.c
b/drivers/media/pci/intel/ipu6/ipu6-isys.c
index d7a1f89ab56c..5d220138cf37 100644
--- a/drivers/media/pci/intel/ipu6/ipu6-isys.c
+++ b/drivers/media/pci/intel/ipu6/ipu6-isys.c
@@ -814,8 +814,10 @@ static int isys_suspend(struct device *dev)
{
struct ipu6_isys *isys = dev_get_drvdata(dev);
+ guard(mutex)(&isys->stream_mutex);
+
/* If stream is open, refuse to suspend */
- if (isys->stream_opened)
+ if (!ida_is_empty(&isys->streams))
return -EBUSY;
return 0;
diff --git a/drivers/media/pci/intel/ipu6/ipu6-isys.h
b/drivers/media/pci/intel/ipu6/ipu6-isys.h
index 8a618ded1ef9..d7d211ad5a54 100644
--- a/drivers/media/pci/intel/ipu6/ipu6-isys.h
+++ b/drivers/media/pci/intel/ipu6/ipu6-isys.h
@@ -114,7 +114,6 @@ struct ipu6_isys {
bool csi2_cse_ipc_not_supported;
bool iwake_watermark_enabled;
unsigned int ref_count;
- unsigned int stream_opened;
unsigned int sensor_type;
struct mutex mutex;
_______________________________________________
linuxtv-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]