[v2,1/9] ASoC: qdsp6: audioreach: topology use idr_alloc_u32

Message ID 20221021165207.13220-2-srinivas.kandagatla@linaro.org
State New
Headers
Series ASoC: qdsp6: audioreach: add multi-port, SAL and MFC support |

Commit Message

Srinivas Kandagatla Oct. 21, 2022, 4:51 p.m. UTC
  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

Pierre-Louis Bossart Oct. 21, 2022, 5:09 p.m. UTC | #1
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."
  
Srinivas Kandagatla Oct. 26, 2022, 9:19 a.m. UTC | #2
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

> 
>
  
Pierre-Louis Bossart Oct. 26, 2022, 8:38 p.m. UTC | #3
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.
  

Patch

diff --git a/sound/soc/qcom/qdsp6/topology.c b/sound/soc/qcom/qdsp6/topology.c
index bd649c232a06..9a3d9e0eae53 100644
--- a/sound/soc/qcom/qdsp6/topology.c
+++ b/sound/soc/qcom/qdsp6/topology.c
@@ -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;