[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20240917-scoped-state-v1-1-b8ba3fbe5952@ideasonboard.com>
Date: Tue, 17 Sep 2024 17:09:29 +0300
From: Tomi Valkeinen <tomi.valkeinen@...asonboard.com>
To: Mauro Carvalho Chehab <mchehab@...nel.org>,
Niklas Söderlund <niklas.soderlund@...natech.se>,
Hans Verkuil <hverkuil-cisco@...all.nl>,
Sakari Ailus <sakari.ailus@...ux.intel.com>,
Laurent Pinchart <laurent.pinchart@...asonboard.com>
Cc: linux-media@...r.kernel.org, linux-kernel@...r.kernel.org,
linux-renesas-soc@...r.kernel.org,
Tomi Valkeinen <tomi.valkeinen+renesas@...asonboard.com>
Subject: [PATCH 1/4] media: v4l2-subdev: Add cleanup macros for active
state
From: Tomi Valkeinen <tomi.valkeinen+renesas@...asonboard.com>
Add cleanup macros for active state. These can be used to call
v4l2_subdev_lock_and_get_active_state() and manage the unlocking either
in unscoped or scoped fashion:
This locks the state, gets it to the 'state' variable, and unlocks when
exiting the surrounding scope:
CLASS(v4l2_subdev_lock_and_get_active_state, state)(subdev);
This does the same, but inside the given scope:
scoped_v4l2_subdev_lock_and_get_active_state(subdev) {
}
Signed-off-by: Tomi Valkeinen <tomi.valkeinen+renesas@...asonboard.com>
---
include/media/v4l2-subdev.h | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h
index bd235d325ff9..699007cfffd7 100644
--- a/include/media/v4l2-subdev.h
+++ b/include/media/v4l2-subdev.h
@@ -8,6 +8,7 @@
#ifndef _V4L2_SUBDEV_H
#define _V4L2_SUBDEV_H
+#include <linux/cleanup.h>
#include <linux/types.h>
#include <linux/v4l2-subdev.h>
#include <media/media-entity.h>
@@ -1854,6 +1855,15 @@ v4l2_subdev_lock_and_get_active_state(struct v4l2_subdev *sd)
return sd->active_state;
}
+DEFINE_CLASS(v4l2_subdev_lock_and_get_active_state, struct v4l2_subdev_state *,
+ v4l2_subdev_unlock_state(_T),
+ v4l2_subdev_lock_and_get_active_state(sd), struct v4l2_subdev *sd);
+
+#define scoped_v4l2_subdev_lock_and_get_active_state(sd) \
+ for (CLASS(v4l2_subdev_lock_and_get_active_state, state)(sd), \
+ *done = NULL; \
+ !done; done = (void *)1)
+
/**
* v4l2_subdev_init - initializes the sub-device struct
*
--
2.43.0
Powered by blists - more mailing lists