diff mbox series

mips: vdso: Fix __arch_get_hw_counter()

Message ID 20191016134024.46671-1-vincenzo.frascino@arm.com (mailing list archive)
State Mainlined
Commit 8a1bef4193e81c8afae4d2f107f1c09c8ce89470
Delegated to: Paul Burton
Headers show
Series mips: vdso: Fix __arch_get_hw_counter() | expand

Commit Message

Vincenzo Frascino Oct. 16, 2019, 1:40 p.m. UTC
On some MIPS variants (e.g. MIPS r1), vDSO clock_mode is set to
VDSO_CLOCK_NONE.

When VDSO_CLOCK_NONE is set the expected kernel behavior is to fallback
on syscalls. To do that the generic vDSO library expects UULONG_MAX as
return value of __arch_get_hw_counter().

Fix __arch_get_hw_counter() on MIPS defining a __VDSO_USE_SYSCALL case
that addressed the described scenario.

Reported-by: Maxime Bizon <mbizon@freebox.fr>
Cc: Paul Burton <pburton@wavecomp.com>
Signed-off-by: Vincenzo Frascino <vincenzo.frascino@arm.com>
---
 arch/mips/include/asm/vdso/gettimeofday.h | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Comments

Maxime Bizon Oct. 16, 2019, 2:20 p.m. UTC | #1
On Wed, 2019-10-16 at 14:40 +0100, Vincenzo Frascino wrote:

> On some MIPS variants (e.g. MIPS r1), vDSO clock_mode is set to
> VDSO_CLOCK_NONE.
> 
> When VDSO_CLOCK_NONE is set the expected kernel behavior is to
> fallback
> on syscalls. To do that the generic vDSO library expects UULONG_MAX
> as
> return value of __arch_get_hw_counter().
> 
> Fix __arch_get_hw_counter() on MIPS defining a __VDSO_USE_SYSCALL
> case
> that addressed the described scenario.
> 
> Reported-by: Maxime Bizon <mbizon@freebox.fr>
> Cc: Paul Burton <pburton@wavecomp.com>
> Signed-off-by: Vincenzo Frascino <vincenzo.frascino@arm.com>

Tested-by: Maxime Bizon <mbizon@freebox.fr>

Thanks,
Paul Burton Oct. 18, 2019, 10:13 p.m. UTC | #2
Hello,

Vincenzo Frascino wrote:
> On some MIPS variants (e.g. MIPS r1), vDSO clock_mode is set to
> VDSO_CLOCK_NONE.
> 
> When VDSO_CLOCK_NONE is set the expected kernel behavior is to fallback
> on syscalls. To do that the generic vDSO library expects UULONG_MAX as
> return value of __arch_get_hw_counter().
> 
> Fix __arch_get_hw_counter() on MIPS defining a __VDSO_USE_SYSCALL case
> that addressed the described scenario.

Applied to mips-fixes.

> commit 8a1bef4193e8
> https://git.kernel.org/mips/c/8a1bef4193e8
> 
> Reported-by: Maxime Bizon <mbizon@freebox.fr>
> Signed-off-by: Vincenzo Frascino <vincenzo.frascino@arm.com>
> Tested-by: Maxime Bizon <mbizon@freebox.fr>
> Signed-off-by: Paul Burton <paulburton@kernel.org>

Thanks,
    Paul

[ This message was auto-generated; if you believe anything is incorrect
  then please email paulburton@kernel.org to report it. ]
diff mbox series

Patch

diff --git a/arch/mips/include/asm/vdso/gettimeofday.h b/arch/mips/include/asm/vdso/gettimeofday.h
index e78462e8ca2e..b08825531e9f 100644
--- a/arch/mips/include/asm/vdso/gettimeofday.h
+++ b/arch/mips/include/asm/vdso/gettimeofday.h
@@ -24,6 +24,8 @@ 
 
 #define VDSO_HAS_CLOCK_GETRES		1
 
+#define __VDSO_USE_SYSCALL		ULLONG_MAX
+
 #ifdef CONFIG_MIPS_CLOCK_VSYSCALL
 
 static __always_inline long gettimeofday_fallback(
@@ -205,7 +207,7 @@  static __always_inline u64 __arch_get_hw_counter(s32 clock_mode)
 		break;
 #endif
 	default:
-		cycle_now = 0;
+		cycle_now = __VDSO_USE_SYSCALL;
 		break;
 	}