[v2,1/9] ASoC: qdsp6: audioreach: topology use idr_alloc_u32
Commit Message
SubGraph and Module Instance ids take 32 bits, so use idr_alloc_u32
instead of idr_alloc to able to accomdate valid ranges.
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
---
sound/soc/qcom/qdsp6/topology.c | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
Comments
On 10/21/22 11:51, Srinivas Kandagatla wrote:
> SubGraph and Module Instance ids take 32 bits, so use idr_alloc_u32
> instead of idr_alloc to able to accomdate valid ranges.
typo: accommodate.
Also worth checking https://www.kernel.org/doc/html/latest/core-api/idr.html
"The IDR interface is deprecated; please use the XArray instead."
Thanks Pierre,
On 21/10/2022 18:09, Pierre-Louis Bossart wrote:
>
>
> On 10/21/22 11:51, Srinivas Kandagatla wrote:
>> SubGraph and Module Instance ids take 32 bits, so use idr_alloc_u32
>> instead of idr_alloc to able to accomdate valid ranges.
>
> typo: accommodate.
>
will fix it in next version
> Also worth checking https://www.kernel.org/doc/html/latest/core-api/idr.html
> "The IDR interface is deprecated; please use the XArray instead."
Thanks for this hit, this looks really good and specially lookups
without Locking, this could cleanup the code a bit.
Having said that I would still like this patch go as it is with idr for
now, and I can plan to rework on converting idr to xa later, as there
are few more Qcom Audio drivers that have usage of idr.
thanks,
srini
>
>
On 10/26/22 04:19, Srinivas Kandagatla wrote:
> Thanks Pierre,
>
> On 21/10/2022 18:09, Pierre-Louis Bossart wrote:
>>
>>
>> On 10/21/22 11:51, Srinivas Kandagatla wrote:
>>> SubGraph and Module Instance ids take 32 bits, so use idr_alloc_u32
>>> instead of idr_alloc to able to accomdate valid ranges.
>>
>> typo: accommodate.
>>
> will fix it in next version
>
>> Also worth checking
>> https://www.kernel.org/doc/html/latest/core-api/idr.html
>> "The IDR interface is deprecated; please use the XArray instead."
> Thanks for this hit, this looks really good and specially lookups
> without Locking, this could cleanup the code a bit.
>
> Having said that I would still like this patch go as it is with idr for
> now, and I can plan to rework on converting idr to xa later, as there
> are few more Qcom Audio drivers that have usage of idr.
sounds good.
@@ -44,7 +44,7 @@ static struct audioreach_graph_info *audioreach_tplg_alloc_graph_info(struct q6a
INIT_LIST_HEAD(&info->sg_list);
mutex_lock(&apm->lock);
- ret = idr_alloc(&apm->graph_info_idr, info, graph_id, graph_id + 1, GFP_KERNEL);
+ ret = idr_alloc_u32(&apm->graph_info_idr, info, &graph_id, graph_id, GFP_KERNEL);
mutex_unlock(&apm->lock);
if (ret < 0) {
@@ -53,7 +53,7 @@ static struct audioreach_graph_info *audioreach_tplg_alloc_graph_info(struct q6a
return ERR_PTR(ret);
}
- info->id = ret;
+ info->id = graph_id;
return info;
}
@@ -94,7 +94,7 @@ static struct audioreach_sub_graph *audioreach_tplg_alloc_sub_graph(struct q6apm
INIT_LIST_HEAD(&sg->container_list);
mutex_lock(&apm->lock);
- ret = idr_alloc(&apm->sub_graphs_idr, sg, sub_graph_id, sub_graph_id + 1, GFP_KERNEL);
+ ret = idr_alloc_u32(&apm->sub_graphs_idr, sg, &sub_graph_id, sub_graph_id, GFP_KERNEL);
mutex_unlock(&apm->lock);
if (ret < 0) {
@@ -103,7 +103,7 @@ static struct audioreach_sub_graph *audioreach_tplg_alloc_sub_graph(struct q6apm
return ERR_PTR(ret);
}
- sg->sub_graph_id = ret;
+ sg->sub_graph_id = sub_graph_id;
return sg;
}
@@ -136,7 +136,7 @@ static struct audioreach_container *audioreach_tplg_alloc_container(struct q6apm
INIT_LIST_HEAD(&cont->modules_list);
mutex_lock(&apm->lock);
- ret = idr_alloc(&apm->containers_idr, cont, container_id, container_id + 1, GFP_KERNEL);
+ ret = idr_alloc_u32(&apm->containers_idr, cont, &container_id, container_id, GFP_KERNEL);
mutex_unlock(&apm->lock);
if (ret < 0) {
@@ -145,7 +145,7 @@ static struct audioreach_container *audioreach_tplg_alloc_container(struct q6apm
return ERR_PTR(ret);
}
- cont->container_id = ret;
+ cont->container_id = container_id;
cont->sub_graph = sg;
/* add to container list */
list_add_tail(&cont->node, &sg->container_list);
@@ -181,7 +181,7 @@ static struct audioreach_module *audioreach_tplg_alloc_module(struct q6apm *apm,
AR_MODULE_DYNAMIC_INSTANCE_ID_START,
AR_MODULE_DYNAMIC_INSTANCE_ID_END, GFP_KERNEL);
} else {
- ret = idr_alloc(&apm->modules_idr, mod, module_id, module_id + 1, GFP_KERNEL);
+ ret = idr_alloc_u32(&apm->modules_idr, mod, &module_id, module_id, GFP_KERNEL);
}
mutex_unlock(&apm->lock);
@@ -191,7 +191,7 @@ static struct audioreach_module *audioreach_tplg_alloc_module(struct q6apm *apm,
return ERR_PTR(ret);
}
- mod->instance_id = ret;
+ mod->instance_id = module_id;
/* add to module list */
list_add_tail(&mod->node, &cont->modules_list);
mod->container = cont;