[2/5] media: Always keep a graph walk large enough around
diff mbox

Message ID 1453902658-29783-3-git-send-email-sakari.ailus@iki.fi
State New
Headers show

Commit Message

Sakari Ailus Jan. 27, 2016, 1:50 p.m. UTC
Re-create the graph walk object as needed in order to have one large enough
available for all entities in the graph.

This enumeration is used for pipeline power management in the future.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
---
 drivers/media/media-device.c | 21 +++++++++++++++++++++
 include/media/media-device.h |  5 +++++
 2 files changed, 26 insertions(+)

Comments

kernel test robot Jan. 27, 2016, 2:33 p.m. UTC | #1
Hi Sakari,

[auto build test WARNING on linuxtv-media/master]
[also build test WARNING on v4.5-rc1 next-20160127]
[if your patch is applied to the wrong git tree, please drop us a note to help improving the system]

url:    https://github.com/0day-ci/linux/commits/Sakari-Ailus/Unify-MC-graph-power-management-code/20160127-215417
base:   git://linuxtv.org/media_tree.git master
config: xtensa-allyesconfig (attached as .config)
reproduce:
        wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        make.cross ARCH=xtensa 

All warnings (new ones prefixed by >>):

   drivers/media/media-device.c: In function 'media_device_register_entity':
>> drivers/media/media-device.c:583:10: warning: missing braces around initializer [-Wmissing-braces]
      struct media_entity_graph new = { 0 };
             ^
   drivers/media/media-device.c:583:10: warning: (near initialization for 'new.stack') [-Wmissing-braces]

vim +583 drivers/media/media-device.c

   567		mdev->entity_internal_idx_max =
   568			max(mdev->entity_internal_idx_max, entity->internal_idx);
   569	
   570		/* Initialize media_gobj embedded at the entity */
   571		media_gobj_create(mdev, MEDIA_GRAPH_ENTITY, &entity->graph_obj);
   572	
   573		/* Initialize objects at the pads */
   574		for (i = 0; i < entity->num_pads; i++)
   575			media_gobj_create(mdev, MEDIA_GRAPH_PAD,
   576				       &entity->pads[i].graph_obj);
   577	
   578		spin_unlock(&mdev->lock);
   579	
   580		mutex_lock(&mdev->graph_mutex);
   581		if (mdev->entity_internal_idx_max
   582		    >= mdev->pm_count_walk.ent_enum.idx_max) {
 > 583			struct media_entity_graph new = { 0 };
   584	
   585			/*
   586			 * Initialise the new graph walk before cleaning up
   587			 * the old one in order not to spoil the graph walk
   588			 * object of the media device if graph walk init fails.
   589			 */
   590			ret = media_entity_graph_walk_init(&new, mdev);
   591			if (ret) {

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Patch
diff mbox

diff --git a/drivers/media/media-device.c b/drivers/media/media-device.c
index 4d1c13d..52d7809 100644
--- a/drivers/media/media-device.c
+++ b/drivers/media/media-device.c
@@ -577,6 +577,26 @@  int __must_check media_device_register_entity(struct media_device *mdev,
 
 	spin_unlock(&mdev->lock);
 
+	mutex_lock(&mdev->graph_mutex);
+	if (mdev->entity_internal_idx_max
+	    >= mdev->pm_count_walk.ent_enum.idx_max) {
+		struct media_entity_graph new = { 0 };
+
+		/*
+		 * Initialise the new graph walk before cleaning up
+		 * the old one in order not to spoil the graph walk
+		 * object of the media device if graph walk init fails.
+		 */
+		ret = media_entity_graph_walk_init(&new, mdev);
+		if (ret) {
+			mutex_unlock(&mdev->graph_mutex);
+			return ret;
+		}
+		media_entity_graph_walk_cleanup(&mdev->pm_count_walk);
+		mdev->pm_count_walk = new;
+	}
+	mutex_unlock(&mdev->graph_mutex);
+
 	return 0;
 }
 EXPORT_SYMBOL_GPL(media_device_register_entity);
@@ -652,6 +672,7 @@  void media_device_cleanup(struct media_device *mdev)
 {
 	ida_destroy(&mdev->entity_internal_idx);
 	mdev->entity_internal_idx_max = 0;
+	media_entity_graph_walk_cleanup(&mdev->pm_count_walk);
 	mutex_destroy(&mdev->graph_mutex);
 }
 EXPORT_SYMBOL_GPL(media_device_cleanup);
diff --git a/include/media/media-device.h b/include/media/media-device.h
index d385589..dba3986 100644
--- a/include/media/media-device.h
+++ b/include/media/media-device.h
@@ -323,6 +323,11 @@  struct media_device {
 	spinlock_t lock;
 	/* Serializes graph operations. */
 	struct mutex graph_mutex;
+	/*
+	 * Graph walk for power state walk. Access serialised using
+	 * graph_mutex.
+	 */
+	struct media_entity_graph pm_count_walk;
 
 	int (*link_notify)(struct media_link *link, u32 flags,
 			   unsigned int notification);