On Wed, Feb 05, 2025 at 06:27:38PM +0000, Raviteja Laggyshetty wrote: > The current interconnect framework relies on static IDs for node > creation and registration, which limits topologies with multiple > instances of the same interconnect provider. To address this, update > the interconnect framework APIs icc_node_create() and icc_link_create() > APIs to dynamically allocate IDs for interconnect nodes during creation. > This change removes the dependency on static IDs, allowing multiple > instances of the same hardware, such as EPSS L3. > > Signed-off-by: Raviteja Laggyshetty <quic_rlaggysh@xxxxxxxxxxx> > --- > drivers/interconnect/core.c | 13 ++++++++++++- > 1 file changed, 12 insertions(+), 1 deletion(-) > > diff --git a/drivers/interconnect/core.c b/drivers/interconnect/core.c > index 9d5404a07e8a..40700246f1b6 100644 > --- a/drivers/interconnect/core.c > +++ b/drivers/interconnect/core.c > @@ -20,6 +20,8 @@ > > #include "internal.h" > > +#define ICC_DYN_ID_START 10000 > + > #define CREATE_TRACE_POINTS > #include "trace.h" > > @@ -826,7 +828,12 @@ static struct icc_node *icc_node_create_nolock(int id) > if (!node) > return ERR_PTR(-ENOMEM); > > - id = idr_alloc(&icc_idr, node, id, id + 1, GFP_KERNEL); > + /* negative id indicates dynamic id allocation */ > + if (id < 0) Nit: I think it might be better to add an explicit define for that and to decline all other negatdive values. Please leave us some room for future expansion. > + id = idr_alloc(&icc_idr, node, ICC_DYN_ID_START, 0, GFP_KERNEL); > + else > + id = idr_alloc(&icc_idr, node, id, id + 1, GFP_KERNEL); > + > if (id < 0) { > WARN(1, "%s: couldn't get idr\n", __func__); > kfree(node); > @@ -962,6 +969,10 @@ void icc_node_add(struct icc_node *node, struct icc_provider *provider) > node->avg_bw = node->init_avg; > node->peak_bw = node->init_peak; > > + if (node->id >= ICC_DYN_ID_START) > + node->name = devm_kasprintf(provider->dev, GFP_KERNEL, "%s@%s", > + node->name, dev_name(provider->dev)); > + > if (node->avg_bw || node->peak_bw) { > if (provider->pre_aggregate) > provider->pre_aggregate(node); > -- > 2.39.2 > -- With best wishes Dmitry