Message ID | 20211204220249.591482-1-arnd@kernel.org |
---|---|
State | New |
Headers | show |
Series | power: reset: ltc2952: fix float conversion error | expand |
On Sat, Dec 4, 2021 at 2:02 PM Arnd Bergmann <arnd@kernel.org> wrote: > > From: Arnd Bergmann <arnd@arndb.de> > > clang-14 does not like the way this driver converts a 'long double' > to an integer when the target architecture disables floating point > support: > > drivers/power/reset/ltc2952-poweroff.c:162:28: error: expression requires 'long double' type support, but target 'x86_64-unknown-linux' does not support it > data->wde_interval = 300L * 1E6L; > ^ > > Turn this into pure integer math and make it more readable at the > same time using the NSEC_PER_MSEC macro instead. > > Fixes: 6647156c00cc ("power: reset: add LTC2952 poweroff driver") > Signed-off-by: Arnd Bergmann <arnd@arndb.de> Thanks for the patch! The change in clang-14 (ToT) that triggered this has had another patch on top reverting these diagnostics. https://reviews.llvm.org/D114162 That said, this change is still worthwhile for the improved semantics, IMO. Link: https://github.com/ClangBuiltLinux/linux/issues/1497 Reviewed-by: Nick Desaulniers <ndesaulniers@google.com> > --- > drivers/power/reset/ltc2952-poweroff.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/power/reset/ltc2952-poweroff.c b/drivers/power/reset/ltc2952-poweroff.c > index fbb344353fe4..9fc88a9f244c 100644 > --- a/drivers/power/reset/ltc2952-poweroff.c > +++ b/drivers/power/reset/ltc2952-poweroff.c > @@ -159,8 +159,8 @@ static void ltc2952_poweroff_kill(void) > > static void ltc2952_poweroff_default(struct ltc2952_poweroff *data) > { > - data->wde_interval = 300L * 1E6L; > - data->trigger_delay = ktime_set(2, 500L*1E6L); > + data->wde_interval = 300 * NSEC_PER_MSEC; > + data->trigger_delay = ktime_set(2, 500 * NSEC_PER_MSEC); > > hrtimer_init(&data->timer_trigger, CLOCK_MONOTONIC, HRTIMER_MODE_REL); > data->timer_trigger.function = ltc2952_poweroff_timer_trigger; > -- > 2.29.2 >
On Tue, Dec 7, 2021 at 10:41 AM Nick Desaulniers <ndesaulniers@google.com> wrote: > > On Sat, Dec 4, 2021 at 2:02 PM Arnd Bergmann <arnd@kernel.org> wrote: > > > > From: Arnd Bergmann <arnd@arndb.de> > > > > clang-14 does not like the way this driver converts a 'long double' > > to an integer when the target architecture disables floating point > > support: > > > > drivers/power/reset/ltc2952-poweroff.c:162:28: error: expression requires 'long double' type support, but target 'x86_64-unknown-linux' does not support it > > data->wde_interval = 300L * 1E6L; > > ^ > > > > Turn this into pure integer math and make it more readable at the > > same time using the NSEC_PER_MSEC macro instead. > > > > Fixes: 6647156c00cc ("power: reset: add LTC2952 poweroff driver") > > Signed-off-by: Arnd Bergmann <arnd@arndb.de> > > Thanks for the patch! The change in clang-14 (ToT) that triggered this > has had another patch on top reverting these diagnostics. > https://reviews.llvm.org/D114162 > > That said, this change is still worthwhile for the improved semantics, IMO. > > Link: https://github.com/ClangBuiltLinux/linux/issues/1497 > Reviewed-by: Nick Desaulniers <ndesaulniers@google.com> Ah, a fix has already been picked up: https://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power-supply.git/commit/?id=644106cdb89844be2496b21175b7c0c2e0fab381 > > > --- > > drivers/power/reset/ltc2952-poweroff.c | 4 ++-- > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > > diff --git a/drivers/power/reset/ltc2952-poweroff.c b/drivers/power/reset/ltc2952-poweroff.c > > index fbb344353fe4..9fc88a9f244c 100644 > > --- a/drivers/power/reset/ltc2952-poweroff.c > > +++ b/drivers/power/reset/ltc2952-poweroff.c > > @@ -159,8 +159,8 @@ static void ltc2952_poweroff_kill(void) > > > > static void ltc2952_poweroff_default(struct ltc2952_poweroff *data) > > { > > - data->wde_interval = 300L * 1E6L; > > - data->trigger_delay = ktime_set(2, 500L*1E6L); > > + data->wde_interval = 300 * NSEC_PER_MSEC; > > + data->trigger_delay = ktime_set(2, 500 * NSEC_PER_MSEC); > > > > hrtimer_init(&data->timer_trigger, CLOCK_MONOTONIC, HRTIMER_MODE_REL); > > data->timer_trigger.function = ltc2952_poweroff_timer_trigger; > > -- > > 2.29.2 > > > > > -- > Thanks, > ~Nick Desaulniers
On Tue, Dec 07, 2021 at 10:41:24AM -0800, Nick Desaulniers wrote: > On Sat, Dec 4, 2021 at 2:02 PM Arnd Bergmann <arnd@kernel.org> wrote: > > > > From: Arnd Bergmann <arnd@arndb.de> > > > > clang-14 does not like the way this driver converts a 'long double' > > to an integer when the target architecture disables floating point > > support: > > > > drivers/power/reset/ltc2952-poweroff.c:162:28: error: expression requires 'long double' type support, but target 'x86_64-unknown-linux' does not support it > > data->wde_interval = 300L * 1E6L; > > ^ > > > > Turn this into pure integer math and make it more readable at the > > same time using the NSEC_PER_MSEC macro instead. > > > > Fixes: 6647156c00cc ("power: reset: add LTC2952 poweroff driver") > > Signed-off-by: Arnd Bergmann <arnd@arndb.de> > > Thanks for the patch! The change in clang-14 (ToT) that triggered this > has had another patch on top reverting these diagnostics. > https://reviews.llvm.org/D114162 I can still reproduce this failure on current ToT (33e3554ea33d) on x86_64 allmodconfig; it seems like that patch only fixes it for 32-bit x86. > That said, this change is still worthwhile for the improved semantics, IMO. > > Link: https://github.com/ClangBuiltLinux/linux/issues/1497 > Reviewed-by: Nick Desaulniers <ndesaulniers@google.com> My patch appears to be accepted in Sebastian's branch already, it seems like it just needs to be sent to Linus (it also looks like that branch doesn't flow into -next, it probably should): https://git.kernel.org/sre/linux-power-supply/c/644106cdb89844be2496b21175b7c0c2e0fab381 Cheers, Nathan > > --- > > drivers/power/reset/ltc2952-poweroff.c | 4 ++-- > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > > diff --git a/drivers/power/reset/ltc2952-poweroff.c b/drivers/power/reset/ltc2952-poweroff.c > > index fbb344353fe4..9fc88a9f244c 100644 > > --- a/drivers/power/reset/ltc2952-poweroff.c > > +++ b/drivers/power/reset/ltc2952-poweroff.c > > @@ -159,8 +159,8 @@ static void ltc2952_poweroff_kill(void) > > > > static void ltc2952_poweroff_default(struct ltc2952_poweroff *data) > > { > > - data->wde_interval = 300L * 1E6L; > > - data->trigger_delay = ktime_set(2, 500L*1E6L); > > + data->wde_interval = 300 * NSEC_PER_MSEC; > > + data->trigger_delay = ktime_set(2, 500 * NSEC_PER_MSEC); > > > > hrtimer_init(&data->timer_trigger, CLOCK_MONOTONIC, HRTIMER_MODE_REL); > > data->timer_trigger.function = ltc2952_poweroff_timer_trigger; > > -- > > 2.29.2 > > > > > -- > Thanks, > ~Nick Desaulniers
diff --git a/drivers/power/reset/ltc2952-poweroff.c b/drivers/power/reset/ltc2952-poweroff.c index fbb344353fe4..9fc88a9f244c 100644 --- a/drivers/power/reset/ltc2952-poweroff.c +++ b/drivers/power/reset/ltc2952-poweroff.c @@ -159,8 +159,8 @@ static void ltc2952_poweroff_kill(void) static void ltc2952_poweroff_default(struct ltc2952_poweroff *data) { - data->wde_interval = 300L * 1E6L; - data->trigger_delay = ktime_set(2, 500L*1E6L); + data->wde_interval = 300 * NSEC_PER_MSEC; + data->trigger_delay = ktime_set(2, 500 * NSEC_PER_MSEC); hrtimer_init(&data->timer_trigger, CLOCK_MONOTONIC, HRTIMER_MODE_REL); data->timer_trigger.function = ltc2952_poweroff_timer_trigger;