From: Sylwester Nawrocki <s.nawrocki@samsung.com>
To: Sakari Ailus <sakari.ailus@iki.fi>
Cc: linux-media@vger.kernel.org, laurent.pinchart@ideasonboard.com,
sw0312.kim@samsung.com, a.hajda@samsung.com,
Kyungmin Park <kyungmin.park@samsung.com>
Subject: Re: [RFC PATCH v2 1/2] media: Add function removing all media entity links
Date: Mon, 10 Jun 2013 12:35:49 +0200 [thread overview]
Message-ID: <51B5AC05.7080507@samsung.com> (raw)
In-Reply-To: <51B5A9E6.20903@samsung.com>
On 06/10/2013 12:26 PM, Sylwester Nawrocki wrote:
> Hi Sakari,
>
> On 06/10/2013 12:15 AM, Sakari Ailus wrote:
>> Sylwester Nawrocki wrote:
>> ...
>>>>> diff --git a/drivers/media/media-entity.c b/drivers/media/media-entity.c
>>>>> index e1cd132..bd85dc3 100644
>>>>> --- a/drivers/media/media-entity.c
>>>>> +++ b/drivers/media/media-entity.c
>>>>> @@ -429,6 +429,57 @@ media_entity_create_link(struct media_entity
>>>>> *source, u16 source_pad,
>>>>> }
>>>>> EXPORT_SYMBOL_GPL(media_entity_create_link);
>>>>>
>>>>> +void __media_entity_remove_links(struct media_entity *entity)
>>>>> +{
>>>>> + int i, r;
>>>>
>>>> u16? r can be defined inside the loop.
>>>
>>> I would argue 'unsigned int' would be more optimal type for i in most
>>> cases. Will move r inside the loop.
>>>
>>>>> + for (i = 0; i< entity->num_links; i++) {
>>>>> + struct media_link *link =&entity->links[i];
>>>>> + struct media_entity *remote;
>>>>> + int num_links;
>>>>
>>>> num_links is u16 in struct media_entity. I'd use the same type.
>>>
>>> I would go with 'unsigned int', as a more natural type for the CPU in
>>> most cases. It's a minor issue, but I can't see how u16 would have been
>>> more optimal than unsigned int for a local variable like this, while
>>> this code is mostly used on 32-bit systems at least.
>>>
>>>>> + if (link->source->entity == entity)
>>>>> + remote = link->sink->entity;
>>>>> + else
>>>>> + remote = link->source->entity;
>>>>> +
>>>>> + num_links = remote->num_links;
>>>>> +
>>>>> + for (r = 0; r< num_links; r++) {
>>>>
>>>> Is caching remote->num_links needed, or do I miss something?
>>>
>>> Yes, it is needed, remote->num_links is decremented inside the loop.
>>
>> Oh, forgot this one... yes, remote->num_links is decremented, but so is
>> r it's compared to. So I don't think it's necessary to cache it, but
>> it's neither an error to do so.
>
> Indeed, it seems more correct to not cache it, thanks.
>
>>>>> + struct media_link *rlink =&remote->links[r];
>>>>> +
>>>>> + if (rlink != link->reverse)
>>>>> + continue;
>>>>> +
>>>>> + if (link->source->entity == entity)
>>>>> + remote->num_backlinks--;
>>>>> +
>>>>> + remote->num_links--;
>>>>> +
>>>>> + if (remote->num_links< 1)
>>>>
>>>> How about: if (!remote->num_links) ?
>>>
>>> Hmm, perhaps squashing the above two lines to:
>>>
>>> if (--remote->num_links == 0)
>>>
>>> ?
>>
>> I'm not too fond of --/++ operators as part of more complex structures
>> so I'd keep it separate. Fewer lines doesn't always equate to more
>> readable code. :-)
>
> In general I agree, however it's quite simple statement in this case -
> only decrement and test, it's often only one instruction even in the
> assembly language...
>
> I'm going to squash following to this patch:
>
> diff --git a/drivers/media/media-entity.c b/drivers/media/media-entity.c
> index f5ea82e..1fb619d 100644
> --- a/drivers/media/media-entity.c
> +++ b/drivers/media/media-entity.c
> @@ -436,18 +436,18 @@ void __media_entity_remove_links(struct media_entity *entity)
> for (i = 0; i < entity->num_links; i++) {
> struct media_link *link = &entity->links[i];
> struct media_entity *remote;
> - unsigned int r, num_links;
> + unsigned int r;
Should have been:
unsigned int r = 0;
Thanks,
Sylwester
next prev parent reply other threads:[~2013-06-10 10:35 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-05-09 12:29 [RFC PATCH 0/2] Media entity links handling Sylwester Nawrocki
2013-05-09 12:29 ` [RFC PATCH 1/2] media: Add function removing all media entity links Sylwester Nawrocki
2013-05-10 10:00 ` [RFC PATCH v2 " Sylwester Nawrocki
2013-06-06 19:41 ` Sakari Ailus
2013-06-09 18:38 ` Sylwester Nawrocki
2013-06-09 22:15 ` Sakari Ailus
2013-06-10 10:26 ` Sylwester Nawrocki
2013-06-10 10:35 ` Sylwester Nawrocki [this message]
2013-05-09 12:29 ` [RFC PATCH 2/2] V4L: Remove all links of a media entity when unregistering subdev Sylwester Nawrocki
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=51B5AC05.7080507@samsung.com \
--to=s.nawrocki@samsung.com \
--cc=a.hajda@samsung.com \
--cc=kyungmin.park@samsung.com \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-media@vger.kernel.org \
--cc=sakari.ailus@iki.fi \
--cc=sw0312.kim@samsung.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox