[dpdk-dev] [PATCH v5 4/8] Move common functions in eal_timer.c

2015-04-16 Thread Ravi Kerur
On Thu, Apr 16, 2015 at 1:46 AM, Thomas Monjalon 
wrote:

> 2015-04-09 12:40, Ravi Kerur:
> > Changes in v5
> > Rebase to latest code.
> >
> > Changes in v4
> > Removed extern declaration of eal_tsc_resolution_hz,
> > instead provided _set_ API.
> > Make set_tsc_freq_from_clock as wrapper function for BSD.
> >
> > Changes in v3
> > Changed subject to be more explicit on file name inclusion.
> >
> > Changes in v2
> > Use common function name set_tsc_freq_from_sysctl for BSD and Linux.
> > Update comments about its actuality in function declaration.
> >
> > Changes in v1
> > Move common functions in eal_timer.c to librte_eal/common/
> > eal_common_timer.c file.
> >
> > Following functions are  moved to eal_common_timer.c file
> >
> > void rte_delay_us(unsigned us);
> > uint64_t rte_get_tsc_hz(void);
> > static void set_tsc_freq_fallback(void);
> > void set_tsc_freq(void);
> >
> > Makefile changes to reflect new file added.
> > Fix checkpatch warnings and errors.
> >
> > Signed-off-by: Ravi Kerur 
>
> Seems good.
> Acked-by: Thomas Monjalon 
>
> Minor nit, a blank line is missing:
>

Will fix this in next version.


> > + *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
> DAMAGE.
> > + */
> > +#include 
>


[dpdk-dev] [PATCH v5 4/8] Move common functions in eal_timer.c

2015-04-16 Thread Thomas Monjalon
2015-04-09 12:40, Ravi Kerur:
> Changes in v5
> Rebase to latest code.
> 
> Changes in v4
> Removed extern declaration of eal_tsc_resolution_hz,
> instead provided _set_ API.
> Make set_tsc_freq_from_clock as wrapper function for BSD.
> 
> Changes in v3
> Changed subject to be more explicit on file name inclusion.
> 
> Changes in v2
> Use common function name set_tsc_freq_from_sysctl for BSD and Linux.
> Update comments about its actuality in function declaration.
> 
> Changes in v1
> Move common functions in eal_timer.c to librte_eal/common/
> eal_common_timer.c file.
> 
> Following functions are  moved to eal_common_timer.c file
> 
> void rte_delay_us(unsigned us);
> uint64_t rte_get_tsc_hz(void);
> static void set_tsc_freq_fallback(void);
> void set_tsc_freq(void);
> 
> Makefile changes to reflect new file added.
> Fix checkpatch warnings and errors.
> 
> Signed-off-by: Ravi Kerur 

Seems good.
Acked-by: Thomas Monjalon 

Minor nit, a blank line is missing:
> + *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> + */
> +#include 


[dpdk-dev] [PATCH v5 4/8] Move common functions in eal_timer.c

2015-04-09 Thread Ravi Kerur
Changes in v5
Rebase to latest code.

Changes in v4
Removed extern declaration of eal_tsc_resolution_hz,
instead provided _set_ API.
Make set_tsc_freq_from_clock as wrapper function for BSD.

Changes in v3
Changed subject to be more explicit on file name inclusion.

Changes in v2
Use common function name set_tsc_freq_from_sysctl for BSD and Linux.
Update comments about its actuality in function declaration.

Changes in v1
Move common functions in eal_timer.c to librte_eal/common/
eal_common_timer.c file.

Following functions are  moved to eal_common_timer.c file

void rte_delay_us(unsigned us);
uint64_t rte_get_tsc_hz(void);
static void set_tsc_freq_fallback(void);
void set_tsc_freq(void);

Makefile changes to reflect new file added.
Fix checkpatch warnings and errors.

Signed-off-by: Ravi Kerur 
---
 lib/librte_eal/bsdapp/eal/Makefile   |   1 +
 lib/librte_eal/bsdapp/eal/eal_timer.c|  52 +++-
 lib/librte_eal/common/eal_common_timer.c | 101 +++
 lib/librte_eal/common/eal_private.h  |  24 
 lib/librte_eal/linuxapp/eal/Makefile |   1 +
 lib/librte_eal/linuxapp/eal/eal_timer.c  |  55 ++---
 6 files changed, 139 insertions(+), 95 deletions(-)
 create mode 100644 lib/librte_eal/common/eal_common_timer.c

diff --git a/lib/librte_eal/bsdapp/eal/Makefile 
b/lib/librte_eal/bsdapp/eal/Makefile
index a28ead3..48ba39a 100644
--- a/lib/librte_eal/bsdapp/eal/Makefile
+++ b/lib/librte_eal/bsdapp/eal/Makefile
@@ -81,6 +81,7 @@ SRCS-$(CONFIG_RTE_LIBRTE_EAL_BSDAPP) += eal_common_thread.c
 SRCS-$(CONFIG_RTE_LIBRTE_EAL_BSDAPP) += eal_common_system.c
 SRCS-$(CONFIG_RTE_LIBRTE_EAL_BSDAPP) += eal_common_runtime.c
 SRCS-$(CONFIG_RTE_LIBRTE_EAL_BSDAPP) += eal_common_lcore.c
+SRCS-$(CONFIG_RTE_LIBRTE_EAL_BSDAPP) += eal_common_timer.c

 CFLAGS_eal.o := -D_GNU_SOURCE
 #CFLAGS_eal_thread.o := -D_GNU_SOURCE
diff --git a/lib/librte_eal/bsdapp/eal/eal_timer.c 
b/lib/librte_eal/bsdapp/eal/eal_timer.c
index 7147abe..ee7a5ac 100644
--- a/lib/librte_eal/bsdapp/eal/eal_timer.c
+++ b/lib/librte_eal/bsdapp/eal/eal_timer.c
@@ -55,29 +55,12 @@

 enum timer_source eal_timer_source = EAL_TIMER_TSC;

-/* The frequency of the RDTSC timer resolution */
-static uint64_t eal_tsc_resolution_hz = 0;
-
-void
-rte_delay_us(unsigned us)
-{
-   const uint64_t start = rte_get_timer_cycles();
-   const uint64_t ticks = (uint64_t)us * rte_get_timer_hz() / 1E6;
-   while ((rte_get_timer_cycles() - start) < ticks)
-   rte_pause();
-}
-
-uint64_t
-rte_get_tsc_hz(void)
-{
-   return eal_tsc_resolution_hz;
-}
-
 static int
 set_tsc_freq_from_sysctl(void)
 {
size_t sz;
int tmp;
+   uint64_t tsc_hz;

sz = sizeof(tmp);
tmp = 0;
@@ -94,42 +77,23 @@ set_tsc_freq_from_sysctl(void)
else if (tmp != 1)
RTE_LOG(WARNING, EAL, "TSC is not invariant\n");

-   sz = sizeof(eal_tsc_resolution_hz);
-   if (sysctlbyname("machdep.tsc_freq", &eal_tsc_resolution_hz, &sz, NULL, 
0)) {
+   sz = sizeof(tsc_hz);
+   if (sysctlbyname("machdep.tsc_freq", &tsc_hz, &sz, NULL, 0)) {
RTE_LOG(WARNING, EAL, "%s\n", strerror(errno));
return -1;
}
+   rte_set_tsc_hz(tsc_hz);

return 0;
 }

-static void
-set_tsc_freq_fallback(void)
-{
-   RTE_LOG(WARNING, EAL, "WARNING: clock_gettime cannot use "
-   "CLOCK_MONOTONIC_RAW and HPET is not available"
-   " - clock timings may be less accurate.\n");
-   /* assume that the sleep(1) will sleep for 1 second */
-   uint64_t start = rte_rdtsc();
-   sleep(1);
-   eal_tsc_resolution_hz = rte_rdtsc() - start;
-}
-
 /*
- * This function measures the TSC frequency. It uses a variety of approaches.
- *
- * 1. Read the TSC frequency value provided by the kernel
- * 2. If above does not work, just sleep for 1 second and tune off that,
- *printing a warning about inaccuracy of timing
+ * Wrapper function to get TSC frequency from sysctl.
  */
-static void
-set_tsc_freq(void)
+int
+set_tsc_freq_from_clock(void)
 {
-   if (set_tsc_freq_from_sysctl() < 0)
-   set_tsc_freq_fallback();
-
-   RTE_LOG(INFO, EAL, "TSC frequency is ~%"PRIu64" KHz\n",
-   eal_tsc_resolution_hz/1000);
+   return set_tsc_freq_from_sysctl();
 }

 int
diff --git a/lib/librte_eal/common/eal_common_timer.c 
b/lib/librte_eal/common/eal_common_timer.c
new file mode 100644
index 000..2a511d0
--- /dev/null
+++ b/lib/librte_eal/common/eal_common_timer.c
@@ -0,0 +1,101 @@
+/*-
+ *   BSD LICENSE
+ *
+ *   Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
+ *   All rights reserved.
+ *
+ *   Redistribution and use in source and binary forms, with or without
+ *   modification, are permitted provided that the following conditions
+ *   are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ *   notice, this list of condition