Message ID | 1430972952-16303-1-git-send-email-wni@nvidia.com (mailing list archive) |
---|---|
State | Rejected |
Delegated to: | Zhang Rui |
Headers | show |
Wei Ni <wni@nvidia.com> writes: > The THERMAL_NO_LIMIT is defined as -1UL, when it is set in DT, > the of-thermal will use of_parse_phandle_with_args() to parse it. > Since the args is uint32_t, so in 32bit system, the of framework > will read it as 0xffffffff, it's the expected value "-1". > But in 64bit system, this value is read as 0x00000000ffffffff, > it's not a negative value, it will cause problems. > > This change can fix this issue. If I understand the issue correctly, a patch fixing this is already merged. Does "commit a940cb34f: thermal: Fix cdev registration with THERMAL_NO_LIMIT on 64bit" not work for you? > > Signed-off-by: Wei Ni <wni@nvidia.com> > --- > drivers/thermal/of-thermal.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/drivers/thermal/of-thermal.c b/drivers/thermal/of-thermal.c > index 9e8c614103ef..8d6b4070dea3 100644 > --- a/drivers/thermal/of-thermal.c > +++ b/drivers/thermal/of-thermal.c > @@ -613,8 +613,10 @@ static int thermal_of_populate_bind_params(struct device_node *np, > } > __tbp->cooling_device = cooling_spec.np; > if (cooling_spec.args_count >= 2) { /* at least min and max */ > - __tbp->min = cooling_spec.args[0]; > - __tbp->max = cooling_spec.args[1]; > + __tbp->min = cooling_spec.args[0] == -1U ? > + THERMAL_NO_LIMIT : cooling_spec.args[0]; > + __tbp->max = cooling_spec.args[1] == -1U ? > + THERMAL_NO_LIMIT : cooling_spec.args[1]; > } else { > pr_err("wrong reference to cooling device, missing limits\n"); > } -- To unsubscribe from this list: send the line "unsubscribe linux-pm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 2015?05?07? 17:51, Punit Agrawal wrote: > Wei Ni <wni@nvidia.com> writes: > >> The THERMAL_NO_LIMIT is defined as -1UL, when it is set in DT, >> the of-thermal will use of_parse_phandle_with_args() to parse it. >> Since the args is uint32_t, so in 32bit system, the of framework >> will read it as 0xffffffff, it's the expected value "-1". >> But in 64bit system, this value is read as 0x00000000ffffffff, >> it's not a negative value, it will cause problems. >> >> This change can fix this issue. > > If I understand the issue correctly, a patch fixing this is already > merged. Does "commit a940cb34f: thermal: Fix cdev registration with > THERMAL_NO_LIMIT on 64bit" not work for you? Hmm, yes, this fix can work for me. I made a mistake, and didn't notice this change. Sorry, please ignore my patch. Wei. > >> >> Signed-off-by: Wei Ni <wni@nvidia.com> >> --- >> drivers/thermal/of-thermal.c | 6 ++++-- >> 1 file changed, 4 insertions(+), 2 deletions(-) >> >> diff --git a/drivers/thermal/of-thermal.c b/drivers/thermal/of-thermal.c >> index 9e8c614103ef..8d6b4070dea3 100644 >> --- a/drivers/thermal/of-thermal.c >> +++ b/drivers/thermal/of-thermal.c >> @@ -613,8 +613,10 @@ static int thermal_of_populate_bind_params(struct device_node *np, >> } >> __tbp->cooling_device = cooling_spec.np; >> if (cooling_spec.args_count >= 2) { /* at least min and max */ >> - __tbp->min = cooling_spec.args[0]; >> - __tbp->max = cooling_spec.args[1]; >> + __tbp->min = cooling_spec.args[0] == -1U ? >> + THERMAL_NO_LIMIT : cooling_spec.args[0]; >> + __tbp->max = cooling_spec.args[1] == -1U ? >> + THERMAL_NO_LIMIT : cooling_spec.args[1]; >> } else { >> pr_err("wrong reference to cooling device, missing limits\n"); >> } ----------------------------------------------------------------------------------- This email message is for the sole use of the intended recipient(s) and may contain confidential information. Any unauthorized review, use, disclosure or distribution is prohibited. If you are not the intended recipient, please contact the sender by reply email and destroy all copies of the original message. ----------------------------------------------------------------------------------- -- To unsubscribe from this list: send the line "unsubscribe linux-pm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/thermal/of-thermal.c b/drivers/thermal/of-thermal.c index 9e8c614103ef..8d6b4070dea3 100644 --- a/drivers/thermal/of-thermal.c +++ b/drivers/thermal/of-thermal.c @@ -613,8 +613,10 @@ static int thermal_of_populate_bind_params(struct device_node *np, } __tbp->cooling_device = cooling_spec.np; if (cooling_spec.args_count >= 2) { /* at least min and max */ - __tbp->min = cooling_spec.args[0]; - __tbp->max = cooling_spec.args[1]; + __tbp->min = cooling_spec.args[0] == -1U ? + THERMAL_NO_LIMIT : cooling_spec.args[0]; + __tbp->max = cooling_spec.args[1] == -1U ? + THERMAL_NO_LIMIT : cooling_spec.args[1]; } else { pr_err("wrong reference to cooling device, missing limits\n"); }
The THERMAL_NO_LIMIT is defined as -1UL, when it is set in DT, the of-thermal will use of_parse_phandle_with_args() to parse it. Since the args is uint32_t, so in 32bit system, the of framework will read it as 0xffffffff, it's the expected value "-1". But in 64bit system, this value is read as 0x00000000ffffffff, it's not a negative value, it will cause problems. This change can fix this issue. Signed-off-by: Wei Ni <wni@nvidia.com> --- drivers/thermal/of-thermal.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)