Re: [PATCH 13/31] media: au0828 fix au0828_create_media_graph() entity checks
From: Shuah Khan
Date: Thu Jan 28 2016 - 13:57:22 EST
On 01/28/2016 08:37 AM, Mauro Carvalho Chehab wrote:
> Em Wed, 6 Jan 2016 13:27:02 -0700
> Shuah Khan <shuahkh@xxxxxxxxxxxxxxx> escreveu:
>
>> au0828_create_media_graph() doesn't do any checks to determine,
>> if vbi_dev, vdev, and input entities have been registered prior
>> to creating pad links. Checking graph_obj.mdev field works as
>> the graph_obj.mdev field gets initialized in the entity register
>> interface. Fix it to check graph_obj.mdev field before creating
>> pad links.
>
>>
>> Signed-off-by: Shuah Khan <shuahkh@xxxxxxxxxxxxxxx>
>> ---
>> drivers/media/usb/au0828/au0828-core.c | 27 +++++++++++++++++----------
>> 1 file changed, 17 insertions(+), 10 deletions(-)
>>
>> diff --git a/drivers/media/usb/au0828/au0828-core.c b/drivers/media/usb/au0828/au0828-core.c
>> index f46fb43..8ef7c71 100644
>> --- a/drivers/media/usb/au0828/au0828-core.c
>> +++ b/drivers/media/usb/au0828/au0828-core.c
>> @@ -291,20 +291,27 @@ static int au0828_create_media_graph(struct au0828_dev *dev)
>> if (ret)
>> return ret;
>> }
>> - ret = media_create_pad_link(decoder, AU8522_PAD_VID_OUT,
>> - &dev->vdev.entity, 0,
>> - MEDIA_LNK_FL_ENABLED);
>> - if (ret)
>> - return ret;
>> - ret = media_create_pad_link(decoder, AU8522_PAD_VBI_OUT,
>> - &dev->vbi_dev.entity, 0,
>> - MEDIA_LNK_FL_ENABLED);
>> - if (ret)
>> - return ret;
>> + if (dev->vdev.entity.graph_obj.mdev) {
>> + ret = media_create_pad_link(decoder, AU8522_PAD_VID_OUT,
>> + &dev->vdev.entity, 0,
>> + MEDIA_LNK_FL_ENABLED);
>> + if (ret)
>> + return ret;
>> + }
>
> Those new if() doesn't look right. We can't continue if the entities
> weren't registered, as the graph would have troubles. The logic should
> ensure that the entities will always be created before running
> au0828_create_media_graph(). If this is not the case, some async
> logic is needed to ensure that.
There have been some changes in au0828 media init and
register sequence in 4.5-rc1. wau0828 does its graph
creation before it registers media_device.
I needed these checks before this above. It looks
like I might have simply rebased my patch over
without taking this change into account. I will
try without these checks.
Async method is already in place for snd-usb-audio
part of the graph. Please see patch 20 in the series.
thanks,
-- Shuah
>
>> + if (dev->vbi_dev.entity.graph_obj.mdev) {
>> + ret = media_create_pad_link(decoder, AU8522_PAD_VBI_OUT,
>> + &dev->vbi_dev.entity, 0,
>> + MEDIA_LNK_FL_ENABLED);
>> + if (ret)
>> + return ret;
>> + }
>>
>> for (i = 0; i < AU0828_MAX_INPUT; i++) {
>> struct media_entity *ent = &dev->input_ent[i];
>>
>> + if (!ent->graph_obj.mdev)
>> + continue;
>> +
>> if (AUVI_INPUT(i).type == AU0828_VMUX_UNDEFINED)
>> break;
>>
--
Shuah Khan
Sr. Linux Kernel Developer
Open Source Innovation Group
Samsung Research America (Silicon Valley)
shuahkh@xxxxxxxxxxxxxxx | (970) 217-8978