* [PATCH] fio: fix cycles_start build issue
@ 2015-02-27 8:31 Christian Ehrhardt
2015-02-27 15:20 ` Jens Axboe
0 siblings, 1 reply; 3+ messages in thread
From: Christian Ehrhardt @ 2015-02-27 8:31 UTC (permalink / raw)
To: fio@vger.kernel.org, Christian Ehrhardt
Hi,
a recent checkout of fio-git revealed a build issue on s390.
For whatever reason my git send-email setup is broken so I paste it in
the mail and hope it doesn't get mangled, let me know if that fails.
---
Subject: [PATCH] fio: fix cycles_start build issue
From: Christian Ehrhardt <ehrhardt@linux.vnet.ibm.com>
There is an issue introduced with "commit 73df3e07 gettime: offset CPU cycle
counter by initial value". For architectures which define
ARCH_CPU_CLOCK_CYCLES_PER_USEC (currently only s390) this causes a build
error
gettime.c:174:11: error: ‘cycles_start’ undeclared (first use in this
function)
if (t < cycles_start && !cycles_wrap)
To make sure variables and code are only compiled in the same cases I
added a
clock definition called ARCH_CPU_CLOCK_WRAPS. We could merge
ARCH_CPU_CLOCK_WRAPS and the existing ARCH_CPU_CLOCK_CYCLES_PER_USEC
into one
if you prefer, so far nobody else uses it.
To avoid cluttering all architecture headers I enabled it by default in
arch-generic.h, so any arch not needing the wrap handling can undef
ARCH_CPU_CLOCK_WRAPS later in their headers.
Signed-off-by: Christian Ehrhardt <ehrhardt@linux.vnet.ibm.com>
---
[diffstat]
arch/arch-generic.h | 1 +
arch/arch-s390.h | 1 +
gettime.c | 7 +++++++
3 files changed, 9 insertions(+)
[diff]
diff --git a/arch/arch-generic.h b/arch/arch-generic.h
index a0b71f8..825a829 100644
--- a/arch/arch-generic.h
+++ b/arch/arch-generic.h
@@ -2,6 +2,7 @@
#define ARCH_GENERIC_H
#define FIO_ARCH (arch_generic)
+#define ARCH_CPU_CLOCK_WRAPS
#define nop do { } while (0)
#define read_barrier() __asm__ __volatile__("": : :"memory")
diff --git a/arch/arch-s390.h b/arch/arch-s390.h
index 169282b..0c93424 100644
--- a/arch/arch-s390.h
+++ b/arch/arch-s390.h
@@ -39,6 +39,7 @@ static inline unsigned long long get_cpu_clock(void)
}
#define ARCH_CPU_CLOCK_CYCLES_PER_USEC 1
+#undef ARCH_CPU_CLOCK_WRAPS
#define ARCH_HAVE_CPU_CLOCK
#define ARCH_HAVE_INIT
diff --git a/gettime.c b/gettime.c
index 6863ce3..29884a1 100644
--- a/gettime.c
+++ b/gettime.c
@@ -17,6 +17,8 @@
static unsigned long cycles_per_usec;
static unsigned long inv_cycles_per_usec;
static uint64_t max_cycles_for_mult;
+#endif
+#ifdef ARCH_CPU_CLOCK_WRAPS
static unsigned long long cycles_start, cycles_wrap;
#endif
int tsc_reliable = 0;
@@ -171,6 +173,7 @@ static void __fio_gettime(struct timeval *tp)
#endif
t = get_cpu_clock();
+#ifdef ARCH_CPU_CLOCK_WRAPS
if (t < cycles_start && !cycles_wrap)
cycles_wrap = 1;
else if (cycles_wrap && t >= cycles_start && !tv->warned) {
@@ -179,6 +182,8 @@ static void __fio_gettime(struct timeval *tp)
}
t -= cycles_start;
+#endif
+
tv->last_cycles = t;
tv->last_tv_valid = 1;
#ifdef ARCH_CPU_CLOCK_CYCLES_PER_USEC
@@ -311,8 +316,10 @@ static int calibrate_cpu_clock(void)
inv_cycles_per_usec = 16777216UL / cycles_per_usec;
max_cycles_for_mult = ~0ULL / inv_cycles_per_usec;
dprint(FD_TIME, "inv_cycles_per_usec=%lu\n", inv_cycles_per_usec);
+#ifdef ARCH_CPU_CLOCK_WRAPS
cycles_start = get_cpu_clock();
dprint(FD_TIME, "cycles_start=%llu\n", cycles_start);
+#endif
return 0;
}
#else
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] fio: fix cycles_start build issue
2015-02-27 8:31 [PATCH] fio: fix cycles_start build issue Christian Ehrhardt
@ 2015-02-27 15:20 ` Jens Axboe
2015-03-02 8:22 ` Christian Ehrhardt
0 siblings, 1 reply; 3+ messages in thread
From: Jens Axboe @ 2015-02-27 15:20 UTC (permalink / raw)
To: Christian Ehrhardt, fio@vger.kernel.org
On 02/27/2015 01:31 AM, Christian Ehrhardt wrote:
> Hi,
> a recent checkout of fio-git revealed a build issue on s390.
> For whatever reason my git send-email setup is broken so I paste it in
> the mail and hope it doesn't get mangled, let me know if that fails.
It mangled it horribly, but I just hand applied it. One issue, though:
> diff --git a/arch/arch-generic.h b/arch/arch-generic.h
> index a0b71f8..825a829 100644
> --- a/arch/arch-generic.h
> +++ b/arch/arch-generic.h
> @@ -2,6 +2,7 @@
> #define ARCH_GENERIC_H
>
> #define FIO_ARCH (arch_generic)
> +#define ARCH_CPU_CLOCK_WRAPS
This wont work like I suspect you think it does. This define needs to go
in the arch.h header, if you want all archs to catch it.
--
Jens Axboe
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] fio: fix cycles_start build issue
2015-02-27 15:20 ` Jens Axboe
@ 2015-03-02 8:22 ` Christian Ehrhardt
0 siblings, 0 replies; 3+ messages in thread
From: Christian Ehrhardt @ 2015-03-02 8:22 UTC (permalink / raw)
To: Jens Axboe, fio@vger.kernel.org
On 27/02/15 16:20, Jens Axboe wrote:
> On 02/27/2015 01:31 AM, Christian Ehrhardt wrote:
>> Hi,
>> a recent checkout of fio-git revealed a build issue on s390.
>> For whatever reason my git send-email setup is broken so I paste it in
>> the mail and hope it doesn't get mangled, let me know if that fails.
>
> It mangled it horribly, but I just hand applied it. One issue, though:
>
>> diff --git a/arch/arch-generic.h b/arch/arch-generic.h
>> index a0b71f8..825a829 100644
>> --- a/arch/arch-generic.h
>> +++ b/arch/arch-generic.h
>> @@ -2,6 +2,7 @@
>> #define ARCH_GENERIC_H
>>
>> #define FIO_ARCH (arch_generic)
>> +#define ARCH_CPU_CLOCK_WRAPS
>
> This wont work like I suspect you think it does. This define needs to go
> in the arch.h header, if you want all archs to catch it.
>
I can only agree and thank you for unmangling the content.
Thanks !
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2015-03-02 8:22 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-02-27 8:31 [PATCH] fio: fix cycles_start build issue Christian Ehrhardt
2015-02-27 15:20 ` Jens Axboe
2015-03-02 8:22 ` Christian Ehrhardt
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox