Commit deb866f9 authored by Sakari Ailus's avatar Sakari Ailus Committed by Hans Verkuil
Browse files

media: mc: Check pad flag validity



Check the validity of pad flags on entity init. Exactly one of the flags
must be set.

Signed-off-by: default avatarSakari Ailus <sakari.ailus@linux.intel.com>
Reviewed-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
parent 4c812e33
Loading
Loading
Loading
Loading
+14 −1
Original line number Diff line number Diff line
@@ -197,6 +197,7 @@ int media_entity_pads_init(struct media_entity *entity, u16 num_pads,
	struct media_device *mdev = entity->graph_obj.mdev;
	struct media_pad *iter;
	unsigned int i = 0;
	int ret = 0;

	if (num_pads >= MEDIA_ENTITY_MAX_PADS)
		return -E2BIG;
@@ -210,15 +211,27 @@ int media_entity_pads_init(struct media_entity *entity, u16 num_pads,
	media_entity_for_each_pad(entity, iter) {
		iter->entity = entity;
		iter->index = i++;

		if (hweight32(iter->flags & (MEDIA_PAD_FL_SINK |
					     MEDIA_PAD_FL_SOURCE)) != 1) {
			ret = -EINVAL;
			break;
		}

		if (mdev)
			media_gobj_create(mdev, MEDIA_GRAPH_PAD,
					  &iter->graph_obj);
	}

	if (ret && mdev) {
		media_entity_for_each_pad(entity, iter)
			media_gobj_destroy(&iter->graph_obj);
	}

	if (mdev)
		mutex_unlock(&mdev->graph_mutex);

	return 0;
	return ret;
}
EXPORT_SYMBOL_GPL(media_entity_pads_init);