Skip to contentSkip to conversation

clocksource: arch_timer: Only use the virtual counter (CNTVCT) on arm64

PATCH New Catalin Marinas 3 participants 5 messages Dec 10, 2014 – Dec 15, 2014

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 clocksource: arch_timer: Only use the virtual counter (CNTVCT) on arm64

Commit 0b46b8a718c6 (clocksource: arch_timer: Fix code to use physical timers when requested) introduces the use of physical counters in the ARM architected timer driver. However, he arm64 kernel uses CNTVCT in VDSO. When booting in EL2, the kernel switches to the physical timers to make things easier for KVM but it continues to use the virtual counter both in user and kernel. While in such scenario CNTVCT == CNTPCT (since CNTVOFF is initialised by the kernel to 0), we want to spot firmware bugs corrupting CNTVOFF early (which would affect CNTVCT).

---

Daniel,

Do you plan to take this patch and push into mainline (ideally before -rc1)? Otherwise we can push it via the arm64 tree.

Thanks,

Catalin

 drivers/clocksource/arm_arch_timer.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/clocksource/arm_arch_timer.c +1 -1
index 6a79fc4f900c..095c1774592c 100644
@@ -462,7 +462,7 @@ static void __init arch_counter_register(unsigned type)
 
 	/* Register the CP15 based counter if we have one */
 	if (type & ARCH_CP15_TIMER) {
-		if (arch_timer_use_virtual)
+		if (IS_ENABLED(CONFIG_ARM64) || arch_timer_use_virtual)
 			arch_timer_read_counter = arch_counter_get_cntvct;
 		else
 			arch_timer_read_counter = arch_counter_get_cntpct;
#1 lore raw

PATCH 1/1 clocksource: arch_timer: Only use the virtual counter (CNTVCT) on arm64

Quoted 12 lines · Catalin Marinas

Commit 0b46b8a718c6 (clocksource: arch_timer: Fix code to use physical timers when requested) introduces the use of physical counters in the ARM architected timer driver. However, he arm64 kernel uses CNTVCT in VDSO. When booting in EL2, the kernel switches to the physical timers to make things easier for KVM but it continues to use the virtual counter both in user and kernel. While in such scenario CNTVCT == CNTPCT (since CNTVOFF is initialised by the kernel to 0), we want to spot firmware bugs corrupting CNTVOFF early (which would affect CNTVCT).

Quoted 6 lines

---

Daniel,

Do you plan to take this patch and push into mainline (ideally before -rc1)? Otherwise we can push it via the arm64 tree.

I will take care of it.

Thanks !

-- Daniel

Quoted 23 lines

Thanks,

Catalin

  drivers/clocksource/arm_arch_timer.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
drivers/clocksource/arm_arch_timer.c +1 -1
index 6a79fc4f900c..095c1774592c 100644
@@ -462,7 +462,7 @@ static void __init arch_counter_register(unsigned type)
 
  	/* Register the CP15 based counter if we have one */
  	if (type & ARCH_CP15_TIMER) {
-		if (arch_timer_use_virtual)
+		if (IS_ENABLED(CONFIG_ARM64) || arch_timer_use_virtual)
  			arch_timer_read_counter = arch_counter_get_cntvct;
  		else
  			arch_timer_read_counter = arch_counter_get_cntpct;
Signature · 5 lines
  <http://www.linaro.org/> Linaro.org ? Open source software for ARM SoCs

Follow Linaro:  <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog
#2 lore raw

PATCH 1/1 clocksource: arch_timer: Only use the virtual counter (CNTVCT) on arm64

Quoted 15 lines · Daniel Lezcano
Quoted 14 lines · Catalin Marinas

Commit 0b46b8a718c6 (clocksource: arch_timer: Fix code to use physical timers when requested) introduces the use of physical counters in the ARM architected timer driver. However, he arm64 kernel uses CNTVCT in VDSO. When booting in EL2, the kernel switches to the physical timers to make things easier for KVM but it continues to use the virtual counter both in user and kernel. While in such scenario CNTVCT == CNTPCT (since CNTVOFF is initialised by the kernel to 0), we want to spot firmware bugs corrupting CNTVOFF early (which would affect CNTVCT).

---

Quoted 6 lines
Quoted 4 lines

Daniel,

Do you plan to take this patch and push into mainline (ideally before -rc1)? Otherwise we can push it via the arm64 tree.

I will take care of it.

Thanks.

Signature · 1 line
Catalin
maintainer
#3 lore raw

PATCH 1/1 clocksource: arch_timer: Only use the virtual counter (CNTVCT) on arm64

In reply to Daniel Lezcano

Hi Daniel,

Quoted 17 lines · Daniel Lezcano
Quoted 16 lines · Catalin Marinas

Commit 0b46b8a718c6 (clocksource: arch_timer: Fix code to use physical timers when requested) introduces the use of physical counters in the ARM architected timer driver. However, he arm64 kernel uses CNTVCT in VDSO. When booting in EL2, the kernel switches to the physical timers to make things easier for KVM but it continues to use the virtual counter both in user and kernel. While in such scenario CNTVCT == CNTPCT (since CNTVOFF is initialised by the kernel to 0), we want to spot firmware bugs corrupting CNTVOFF early (which would affect CNTVCT).

---

Daniel,

Quoted 8 lines
Quoted 2 lines

Do you plan to take this patch and push into mainline (ideally before -rc1)? Otherwise we can push it via the arm64 tree.

I will take care of it.

Thanks !

-- Daniel

What's the state of this patch?

It doesn't seem to be in linux-next (next-20141215), which is failing to boot for me due to hitting the BUG in the arm64 arch_counter_get_cntpct.

Thanks,
Mark.

Quoted 38 lines
Quoted 24 lines

Thanks,

Catalin

  drivers/clocksource/arm_arch_timer.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
drivers/clocksource/arm_arch_timer.c +1 -1
index 6a79fc4f900c..095c1774592c 100644
@@ -462,7 +462,7 @@ static void __init arch_counter_register(unsigned type)
 
  	/* Register the CP15 based counter if we have one */
  	if (type & ARCH_CP15_TIMER) {
-		if (arch_timer_use_virtual)
+		if (IS_ENABLED(CONFIG_ARM64) || arch_timer_use_virtual)
  			arch_timer_read_counter = arch_counter_get_cntvct;
  		else
  			arch_timer_read_counter = arch_counter_get_cntpct;
Signature · 11 lines
  <http://www.linaro.org/> Linaro.org ? Open source software for ARM SoCs

Follow Linaro:  <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel at lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
#4 lore raw

PATCH 1/1 clocksource: arch_timer: Only use the virtual counter (CNTVCT) on arm64

Hi Olof, Arnd,

Do you mind to apply this patch ?

I was about to take care of it but it depends on the commit:

https://git.kernel.org/cgit/linux/kernel/git/arm/arm-soc.git/commit/drivers/clocksource?h=for-next&id=0b46b8a718c6e90910a1b1b0fe797be3c167e186

Thanks
-- Daniel

Quoted 75 lines · Mark Rutland

Hi Daniel,

Quoted 17 lines · Daniel Lezcano
Quoted 16 lines · Catalin Marinas

Commit 0b46b8a718c6 (clocksource: arch_timer: Fix code to use physical timers when requested) introduces the use of physical counters in the ARM architected timer driver. However, he arm64 kernel uses CNTVCT in VDSO. When booting in EL2, the kernel switches to the physical timers to make things easier for KVM but it continues to use the virtual counter both in user and kernel. While in such scenario CNTVCT == CNTPCT (since CNTVOFF is initialised by the kernel to 0), we want to spot firmware bugs corrupting CNTVOFF early (which would affect CNTVCT).

---

Daniel,

Quoted 8 lines
Quoted 2 lines

Do you plan to take this patch and push into mainline (ideally before -rc1)? Otherwise we can push it via the arm64 tree.

I will take care of it.

Thanks !

-- Daniel

What's the state of this patch?

It doesn't seem to be in linux-next (next-20141215), which is failing to boot for me due to hitting the BUG in the arm64 arch_counter_get_cntpct.

Thanks,
Mark.

Quoted 38 lines
Quoted 16 lines

Thanks,

Catalin

   drivers/clocksource/arm_arch_timer.c | 2 +-
   1 file changed, 1 insertion(+), 1 deletion(-)
drivers/clocksource/arm_arch_timer.c +0 -0
index 6a79fc4f900c..095c1774592c 100644

drivers/clocksource/arm_arch_timer.c static void __init arch_counter_register(unsigned type) · line 468

Quoted 8 lines
drivers/clocksource/arm_arch_timer.c +1 -1
@@ -462,7 +462,7 @@ static void __init arch_counter_register(unsigned type)
 
   	/* Register the CP15 based counter if we have one */
   	if (type & ARCH_CP15_TIMER) {
-		if (arch_timer_use_virtual)
+		if (IS_ENABLED(CONFIG_ARM64) || arch_timer_use_virtual)
   			arch_timer_read_counter = arch_counter_get_cntvct;
   		else
   			arch_timer_read_counter = arch_counter_get_cntpct;

--
<http://www.linaro.org/> Linaro.org ? Open source software for ARM SoCs

Follow Linaro: <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel at lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

Signature · 5 lines
  <http://www.linaro.org/> Linaro.org ? Open source software for ARM SoCs

Follow Linaro:  <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog