Message ID | 1375207217-4433-3-git-send-email-Sudeep.KarkadaNagesha@arm.com (mailing list archive) |
---|---|
State | RFC, archived |
Headers | show |
On 07/30/2013 01:00 PM, Sudeep KarkadaNagesha wrote: > From: Sudeep KarkadaNagesha <sudeep.karkadanagesha@arm.com> > > CPUs are registered as devices and their OPPs can be initialised from > the device tree. Whenever CPUs can be hotplugged out, the corresponding > cpu devices are not removed. As a result all their OPPs remain intact > even when they are offlined. > > But when they are hotplugged back-in, the cpufreq along with other cpu > related subsystem gets re-initialised. Since its almost same as secondary > cpu being brought up, no special consideration is taken in the hotplug > path. This may result in cpufreq trying to initialise the OPPs again though > the cpu device already contains the OPPs. > > This patch checks if there exist an OPP list associated with the device, > before attempting to initialise it. > > Cc: Rob Herring <rob.herring@calxeda.com> > Cc: Pawel Moll <pawel.moll@arm.com> > Cc: Mark Rutland <mark.rutland@arm.com> > Cc: Stephen Warren <swarren@wwwdotorg.org> > Cc: "Rafael J. Wysocki" <rjw@sisk.pl> > Cc: Nishanth Menon <nm@ti.com> > Signed-off-by: Sudeep KarkadaNagesha <sudeep.karkadanagesha@arm.com> > --- > drivers/base/power/opp.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/drivers/base/power/opp.c b/drivers/base/power/opp.c > index 9ac3c93..8a9d138 100644 > --- a/drivers/base/power/opp.c > +++ b/drivers/base/power/opp.c > @@ -708,9 +708,15 @@ int of_init_opp_table(struct device *dev) > { > const struct property *prop; > struct device_node *opp_node; > + struct device_opp *dev_opp; > const __be32 *val; > int nr; > > + /* Check for existing list for 'dev' */ > + dev_opp = find_device_opp(dev); > + if (!IS_ERR(dev_opp)) > + return -EEXIST; /* Device OPP already initialized */ > + > opp_node = of_parse_phandle(dev->of_node, > "operating-points-phandle", 0); > if (!opp_node) /* if no OPP phandle, search for OPPs in current node */ > Acked-by: Nishanth Menon <nm@ti.com>
diff --git a/drivers/base/power/opp.c b/drivers/base/power/opp.c index 9ac3c93..8a9d138 100644 --- a/drivers/base/power/opp.c +++ b/drivers/base/power/opp.c @@ -708,9 +708,15 @@ int of_init_opp_table(struct device *dev) { const struct property *prop; struct device_node *opp_node; + struct device_opp *dev_opp; const __be32 *val; int nr; + /* Check for existing list for 'dev' */ + dev_opp = find_device_opp(dev); + if (!IS_ERR(dev_opp)) + return -EEXIST; /* Device OPP already initialized */ + opp_node = of_parse_phandle(dev->of_node, "operating-points-phandle", 0); if (!opp_node) /* if no OPP phandle, search for OPPs in current node */