* [PATCH v2 0/2] topology: Fix for handling widgets' references
@ 2016-07-22 1:46 mengdong.lin
2016-07-22 1:46 ` [PATCH v2 1/2] topology: Fix inaccurate message on failure to find a widgets's reference mengdong.lin
2016-07-22 1:47 ` [PATCH v2 2/2] topology: Fix the missing referenced elem ptr when merging private data mengdong.lin
0 siblings, 2 replies; 7+ messages in thread
From: mengdong.lin @ 2016-07-22 1:46 UTC (permalink / raw)
To: alsa-devel, broonie
Cc: tiwai, mengdong.lin, Mengdong Lin, liam.r.girdwood, shreyas.nc
From: Mengdong Lin <mengdong.lin@linux.intel.com>
This series fixes an error when merging a widget's private data and an
inaccurate output message.
History:
v2: Split v1 into 2 patches. And set the valid reference element value
only on success.
Mengdong Lin (2):
topology: Fix inaccurate message on failure to find a widgets's
reference
topology: Fix the missing referenced elem ptr when merging private
data
src/topology/dapm.c | 2 +-
src/topology/data.c | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)
--
2.5.0
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v2 1/2] topology: Fix inaccurate message on failure to find a widgets's reference
2016-07-22 1:46 [PATCH v2 0/2] topology: Fix for handling widgets' references mengdong.lin
@ 2016-07-22 1:46 ` mengdong.lin
2016-07-22 1:47 ` [PATCH v2 2/2] topology: Fix the missing referenced elem ptr when merging private data mengdong.lin
1 sibling, 0 replies; 7+ messages in thread
From: mengdong.lin @ 2016-07-22 1:46 UTC (permalink / raw)
To: alsa-devel, broonie
Cc: tiwai, mengdong.lin, Mengdong Lin, liam.r.girdwood, shreyas.nc
From: Mengdong Lin <mengdong.lin@linux.intel.com>
A widget may have references to control or data elements. So the message
should not only use "control" here.
Signed-off-by: Mengdong Lin <mengdong.lin@linux.intel.com>
diff --git a/src/topology/dapm.c b/src/topology/dapm.c
index 4d343b2..e3c90d8 100644
--- a/src/topology/dapm.c
+++ b/src/topology/dapm.c
@@ -201,7 +201,7 @@ static int tplg_build_widget(snd_tplg_t *tplg,
}
if (!ref->elem) {
- SNDERR("error: cannot find control '%s'"
+ SNDERR("error: cannot find '%s'"
" referenced by widget '%s'\n",
ref->id, elem->id);
return -EINVAL;
--
2.5.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v2 2/2] topology: Fix the missing referenced elem ptr when merging private data
2016-07-22 1:46 [PATCH v2 0/2] topology: Fix for handling widgets' references mengdong.lin
2016-07-22 1:46 ` [PATCH v2 1/2] topology: Fix inaccurate message on failure to find a widgets's reference mengdong.lin
@ 2016-07-22 1:47 ` mengdong.lin
2016-07-22 2:16 ` Takashi Sakamoto
1 sibling, 1 reply; 7+ messages in thread
From: mengdong.lin @ 2016-07-22 1:47 UTC (permalink / raw)
To: alsa-devel, broonie
Cc: tiwai, mengdong.lin, Mengdong Lin, liam.r.girdwood, shreyas.nc
From: Mengdong Lin <mengdong.lin@linux.intel.com>
tplg_copy_data() should set the valid referenced data element pointer
on success. The caller will double check this pointer for all kinds of
references, including controls and data.
Signed-off-by: Mengdong Lin <mengdong.lin@linux.intel.com>
diff --git a/src/topology/data.c b/src/topology/data.c
index 768fc27..e7793b2 100644
--- a/src/topology/data.c
+++ b/src/topology/data.c
@@ -1078,6 +1078,8 @@ int tplg_copy_data(snd_tplg_t *tplg, struct tplg_elem *elem,
ref_elem->compound_elem = 1;
memcpy(priv->data + old_priv_data_size,
ref_elem->data->data, priv_data_size);
+
+ ref->elem = ref_elem;
return 0;
}
--
2.5.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v2 2/2] topology: Fix the missing referenced elem ptr when merging private data
2016-07-22 1:47 ` [PATCH v2 2/2] topology: Fix the missing referenced elem ptr when merging private data mengdong.lin
@ 2016-07-22 2:16 ` Takashi Sakamoto
2016-07-22 2:39 ` Lin, Mengdong
0 siblings, 1 reply; 7+ messages in thread
From: Takashi Sakamoto @ 2016-07-22 2:16 UTC (permalink / raw)
To: mengdong.lin, alsa-devel, broonie
Cc: tiwai, mengdong.lin, liam.r.girdwood, shreyas.nc
On Jul 22 2016 10:47, mengdong.lin@linux.intel.com wrote:
> From: Mengdong Lin <mengdong.lin@linux.intel.com>
>
> tplg_copy_data() should set the valid referenced data element pointer
> on success. The caller will double check this pointer for all kinds of
> references, including controls and data.
>
> Signed-off-by: Mengdong Lin <mengdong.lin@linux.intel.com>
>
> diff --git a/src/topology/data.c b/src/topology/data.c
> index 768fc27..e7793b2 100644
> --- a/src/topology/data.c
> +++ b/src/topology/data.c
> @@ -1078,6 +1078,8 @@ int tplg_copy_data(snd_tplg_t *tplg, struct tplg_elem *elem,
> ref_elem->compound_elem = 1;
> memcpy(priv->data + old_priv_data_size,
> ref_elem->data->data, priv_data_size);
> +
> + ref->elem = ref_elem;
> return 0;
> }
Is this really OK when the found topology element has no private data?
In this case, ref->elem has no assignment at return.
ref_elem = tplg_elem_lookup(&tplg->pdata_list,
ref->id, SND_TPLG_TYPE_DATA);
...
/* overlook empty private data */
if (!ref_elem->data || !ref_elem->data->size)
return 0;
...
ref->elem = ref_elem;
return 0;
Regards
Takashi Sakamoto
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 2/2] topology: Fix the missing referenced elem ptr when merging private data
2016-07-22 2:16 ` Takashi Sakamoto
@ 2016-07-22 2:39 ` Lin, Mengdong
2016-07-22 3:28 ` Takashi Sakamoto
0 siblings, 1 reply; 7+ messages in thread
From: Lin, Mengdong @ 2016-07-22 2:39 UTC (permalink / raw)
To: Takashi Sakamoto, mengdong.lin@linux.intel.com,
alsa-devel@alsa-project.org, broonie@kernel.org
Cc: tiwai@suse.de, Girdwood, Liam R, Nc, Shreyas
> -----Original Message-----
> From: Takashi Sakamoto [mailto:o-takashi@sakamocchi.jp]
> Sent: Friday, July 22, 2016 10:16 AM
> To: mengdong.lin@linux.intel.com; alsa-devel@alsa-project.org;
> broonie@kernel.org
> Cc: tiwai@suse.de; Lin, Mengdong; Girdwood, Liam R; Nc, Shreyas
> Subject: Re: [PATCH v2 2/2] topology: Fix the missing referenced elem ptr
> when merging private data
>
> On Jul 22 2016 10:47, mengdong.lin@linux.intel.com wrote:
> > From: Mengdong Lin <mengdong.lin@linux.intel.com>
> >
> > tplg_copy_data() should set the valid referenced data element pointer
> > on success. The caller will double check this pointer for all kinds of
> > references, including controls and data.
> >
> > Signed-off-by: Mengdong Lin <mengdong.lin@linux.intel.com>
> >
> > diff --git a/src/topology/data.c b/src/topology/data.c index
> > 768fc27..e7793b2 100644
> > --- a/src/topology/data.c
> > +++ b/src/topology/data.c
> > @@ -1078,6 +1078,8 @@ int tplg_copy_data(snd_tplg_t *tplg, struct
> tplg_elem *elem,
> > ref_elem->compound_elem = 1;
> > memcpy(priv->data + old_priv_data_size,
> > ref_elem->data->data, priv_data_size);
> > +
> > + ref->elem = ref_elem;
> > return 0;
> > }
>
> Is this really OK when the found topology element has no private data?
> In this case, ref->elem has no assignment at return.
No. This is my mistake. Thanks for finding this bug.
ref->elem should still be assigned for this case. I will make it like this:
/* overlook empty private data */
if (!ref_elem->data || !ref_elem->data->size) {
ref->elem = ref_elem;
return 0;
}
Thanks
Mengdong
> /* overlook empty private data */
> if (!ref_elem->data || !ref_elem->data->size)
> return 0;
>
> ref_elem = tplg_elem_lookup(&tplg->pdata_list,
> ref->id, SND_TPLG_TYPE_DATA); ...
> /* overlook empty private data */
> if (!ref_elem->data || !ref_elem->data->size)
> return 0;
> ...
> ref->elem = ref_elem;
> return 0;
>
>
> Regards
>
> Takashi Sakamoto
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 2/2] topology: Fix the missing referenced elem ptr when merging private data
2016-07-22 2:39 ` Lin, Mengdong
@ 2016-07-22 3:28 ` Takashi Sakamoto
2016-07-27 8:57 ` Mengdong Lin
0 siblings, 1 reply; 7+ messages in thread
From: Takashi Sakamoto @ 2016-07-22 3:28 UTC (permalink / raw)
To: Lin, Mengdong, mengdong.lin@linux.intel.com,
alsa-devel@alsa-project.org, broonie@kernel.org
Cc: tiwai@suse.de, Girdwood, Liam R, Nc, Shreyas
On Jul 22 2016 11:39, Lin, Mengdong wrote:
>> -----Original Message-----
>> From: Takashi Sakamoto [mailto:o-takashi@sakamocchi.jp]
>> Sent: Friday, July 22, 2016 10:16 AM
>> To: mengdong.lin@linux.intel.com; alsa-devel@alsa-project.org;
>> broonie@kernel.org
>> Cc: tiwai@suse.de; Lin, Mengdong; Girdwood, Liam R; Nc, Shreyas
>> Subject: Re: [PATCH v2 2/2] topology: Fix the missing referenced elem ptr
>> when merging private data
>>
>> On Jul 22 2016 10:47, mengdong.lin@linux.intel.com wrote:
>>> From: Mengdong Lin <mengdong.lin@linux.intel.com>
>>>
>>> tplg_copy_data() should set the valid referenced data element pointer
>>> on success. The caller will double check this pointer for all kinds of
>>> references, including controls and data.
>>>
>>> Signed-off-by: Mengdong Lin <mengdong.lin@linux.intel.com>
>>>
>>> diff --git a/src/topology/data.c b/src/topology/data.c index
>>> 768fc27..e7793b2 100644
>>> --- a/src/topology/data.c
>>> +++ b/src/topology/data.c
>>> @@ -1078,6 +1078,8 @@ int tplg_copy_data(snd_tplg_t *tplg, struct
>> tplg_elem *elem,
>>> ref_elem->compound_elem = 1;
>>> memcpy(priv->data + old_priv_data_size,
>>> ref_elem->data->data, priv_data_size);
>>> +
>>> + ref->elem = ref_elem;
>>> return 0;
>>> }
>>
>> Is this really OK when the found topology element has no private data?
>> In this case, ref->elem has no assignment at return.
>
> No. This is my mistake. Thanks for finding this bug.
>
> ref->elem should still be assigned for this case. I will make it like this:
>
> /* overlook empty private data */
> if (!ref_elem->data || !ref_elem->data->size) {
> ref->elem = ref_elem;
> return 0;
> }
Let us split data merging code to an explicit function? Then:
if (ref_elem->data != NULL && ref_elem->data->size > 0) {
err = merge_private_data(elem, ref_elem);
if (err < 0)
return err;
}
ref->elem = ref_elem;
return 0;
(Here, I expect compiler optimization to merge the new function to
caller implicitly.)
Regards
Takashi Sakamoto
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 2/2] topology: Fix the missing referenced elem ptr when merging private data
2016-07-22 3:28 ` Takashi Sakamoto
@ 2016-07-27 8:57 ` Mengdong Lin
0 siblings, 0 replies; 7+ messages in thread
From: Mengdong Lin @ 2016-07-27 8:57 UTC (permalink / raw)
To: Takashi Sakamoto, Lin, Mengdong, alsa-devel@alsa-project.org,
broonie@kernel.org
Cc: tiwai@suse.de, Girdwood, Liam R, Nc, Shreyas
Hi,
I submitted a new v4 patch to solve this issue, which will return
-EINVAL right after a failure to find an element's reference. I hope
will make the code more clear to read. So there is no need to modify
tplg_copy_data() now, checking its return value is enough.
The new patch name is [PATCH v4] topology: Return -EINVAL at once on
failure to find a reference. Please review.
Thanks
Mengdong
On 07/22/2016 11:28 AM, Takashi Sakamoto wrote:
> On Jul 22 2016 11:39, Lin, Mengdong wrote:
>>> -----Original Message-----
>>> From: Takashi Sakamoto [mailto:o-takashi@sakamocchi.jp]
>>> Sent: Friday, July 22, 2016 10:16 AM
>>> To: mengdong.lin@linux.intel.com; alsa-devel@alsa-project.org;
>>> broonie@kernel.org
>>> Cc: tiwai@suse.de; Lin, Mengdong; Girdwood, Liam R; Nc, Shreyas
>>> Subject: Re: [PATCH v2 2/2] topology: Fix the missing referenced elem
>>> ptr
>>> when merging private data
>>>
>>> On Jul 22 2016 10:47, mengdong.lin@linux.intel.com wrote:
>>>> From: Mengdong Lin <mengdong.lin@linux.intel.com>
>>>>
>>>> tplg_copy_data() should set the valid referenced data element pointer
>>>> on success. The caller will double check this pointer for all kinds of
>>>> references, including controls and data.
>>>>
>>>> Signed-off-by: Mengdong Lin <mengdong.lin@linux.intel.com>
>>>>
>>>> diff --git a/src/topology/data.c b/src/topology/data.c index
>>>> 768fc27..e7793b2 100644
>>>> --- a/src/topology/data.c
>>>> +++ b/src/topology/data.c
>>>> @@ -1078,6 +1078,8 @@ int tplg_copy_data(snd_tplg_t *tplg, struct
>>> tplg_elem *elem,
>>>> ref_elem->compound_elem = 1;
>>>> memcpy(priv->data + old_priv_data_size,
>>>> ref_elem->data->data, priv_data_size);
>>>> +
>>>> + ref->elem = ref_elem;
>>>> return 0;
>>>> }
>>>
>>> Is this really OK when the found topology element has no private data?
>>> In this case, ref->elem has no assignment at return.
>>
>> No. This is my mistake. Thanks for finding this bug.
>>
>> ref->elem should still be assigned for this case. I will make it like
>> this:
>>
>> /* overlook empty private data */
>> if (!ref_elem->data || !ref_elem->data->size) {
>> ref->elem = ref_elem;
>> return 0;
>> }
>
> Let us split data merging code to an explicit function? Then:
>
> if (ref_elem->data != NULL && ref_elem->data->size > 0) {
> err = merge_private_data(elem, ref_elem);
> if (err < 0)
> return err;
> }
> ref->elem = ref_elem;
> return 0;
>
> (Here, I expect compiler optimization to merge the new function to
> caller implicitly.)
>
>
> Regards
>
> Takashi Sakamoto
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel@alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
>
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2016-07-27 8:52 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-07-22 1:46 [PATCH v2 0/2] topology: Fix for handling widgets' references mengdong.lin
2016-07-22 1:46 ` [PATCH v2 1/2] topology: Fix inaccurate message on failure to find a widgets's reference mengdong.lin
2016-07-22 1:47 ` [PATCH v2 2/2] topology: Fix the missing referenced elem ptr when merging private data mengdong.lin
2016-07-22 2:16 ` Takashi Sakamoto
2016-07-22 2:39 ` Lin, Mengdong
2016-07-22 3:28 ` Takashi Sakamoto
2016-07-27 8:57 ` Mengdong Lin
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).