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]

Reply via email to