On 12-05-20, 15:53, Georgi Djakov wrote: > struct dev_pm_opp *_opp_allocate(struct opp_table *table) > { > struct dev_pm_opp *opp; > - int count, supply_size; > + int supply_count, supply_size, icc_size; > > /* Allocate space for at least one supply */ > - count = table->regulator_count > 0 ? table->regulator_count : 1; > - supply_size = sizeof(*opp->supplies) * count; > + supply_count = table->regulator_count > 0 ? table->regulator_count : 1; > + supply_size = sizeof(*opp->supplies) * supply_count; > + icc_size = sizeof(*opp->bandwidth) * table->path_count; > > /* allocate new OPP node and supplies structures */ > - opp = kzalloc(sizeof(*opp) + supply_size, GFP_KERNEL); > + opp = kzalloc(sizeof(*opp) + supply_size + icc_size, GFP_KERNEL); > + > if (!opp) > return NULL; > > /* Put the supplies at the end of the OPP structure as an empty array */ > opp->supplies = (struct dev_pm_opp_supply *)(opp + 1); > + opp->bandwidth = (struct dev_pm_opp_icc_bw *)(opp->supplies + supply_count); > INIT_LIST_HEAD(&opp->node); Added this delta here. diff --git a/drivers/opp/core.c b/drivers/opp/core.c index 7302f2631f8d..dfbd3d10410c 100644 --- a/drivers/opp/core.c +++ b/drivers/opp/core.c @@ -1330,7 +1330,8 @@ struct dev_pm_opp *_opp_allocate(struct opp_table *table) /* Put the supplies at the end of the OPP structure as an empty array */ opp->supplies = (struct dev_pm_opp_supply *)(opp + 1); - opp->bandwidth = (struct dev_pm_opp_icc_bw *)(opp->supplies + supply_count); + if (icc_size) + opp->bandwidth = (struct dev_pm_opp_icc_bw *)(opp->supplies + supply_count); INIT_LIST_HEAD(&opp->node); return opp; -- viresh