[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v3 3/5] xentrace: Timestamp support for ARM platform



Hello Benjamin,

On 04/04/16 19:48, Benjamin Sanda wrote:
Moved get_cycles() to time.c and modified to return the core timestamp
tick count for use by the trace buffer timestamping routines in
xentrace. get_cycles() was moved to the C file to avoid including the
register specific header file in time.h and to commonize it with the
get_s_time() function. Also defined cycles_t as uint64_t to simplify
casting.

I'm not sure what you mean by "simplify casting".

The type cycles_t is not correctly defined for ARM32 because "unsigned long" is always 32-bits. However, the physical count register (CNTPCT) is always 64-bits. So the number of cycles would have been truncated.

The rest of the patch looks good to me.

get_s_time() was also modified to now use the updated get_cycles() to
retrieve the tick count instead of directly reading it.

Signed-off-by: Benjamin Sanda <ben.sanda@xxxxxxxxxxxxxxx>

---
Changed since v2:
   * Combined v2 patches 7 and 6 into one patch in v3. No code change.

---
Changed since v1:
   * Moved get_cycles() to time.c
   * Added function prototype for get_cycles()
---
  xen/arch/arm/time.c        |  9 ++++++++-
  xen/include/asm-arm/time.h | 11 +++++------
  2 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/xen/arch/arm/time.c b/xen/arch/arm/time.c
index 7dae28b..9aface3 100644
--- a/xen/arch/arm/time.c
+++ b/xen/arch/arm/time.c
@@ -192,10 +192,17 @@ int __init init_xen_time(void)
  /* Return number of nanoseconds since boot */
  s_time_t get_s_time(void)
  {
-    uint64_t ticks = READ_SYSREG64(CNTPCT_EL0) - boot_count;
+    cycles_t ticks = get_cycles();
      return ticks_to_ns(ticks);
  }

+/* Return the number of ticks since boot */
+cycles_t get_cycles(void)
+{
+        /* return raw tick count of main timer */
+        return READ_SYSREG64(CNTPCT_EL0) - boot_count;
+}
+
  /* Set the timer to wake us up at a particular time.
   * Timeout is a Xen system time (nanoseconds since boot); 0 disables the 
timer.
   * Returns 1 on success; 0 if the timeout is too soon or is in the past. */
diff --git a/xen/include/asm-arm/time.h b/xen/include/asm-arm/time.h
index 5b9a31d..b57f4c1 100644
--- a/xen/include/asm-arm/time.h
+++ b/xen/include/asm-arm/time.h
@@ -5,12 +5,8 @@
      DT_MATCH_COMPATIBLE("arm,armv7-timer"), \
      DT_MATCH_COMPATIBLE("arm,armv8-timer")

-typedef unsigned long cycles_t;
-
-static inline cycles_t get_cycles (void)
-{
-        return 0;
-}
+/* Tick count type */
+typedef uint64_t cycles_t;

  /* List of timer's IRQ */
  enum timer_ppi
@@ -37,6 +33,9 @@ extern void init_timer_interrupt(void);
  /* Counter value at boot time */
  extern uint64_t boot_count;

+/* Get raw system tick count */
+cycles_t get_cycles(void);
+
  extern s_time_t ticks_to_ns(uint64_t ticks);
  extern uint64_t ns_to_ticks(s_time_t ns);



Regards,

--
Julien Grall

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.