From: Jens Axboe Date: Sun, 24 Feb 2008 20:36:00 +0000 (+0100) Subject: Move syslet/indirect bits into the OS specific directory X-Git-Tag: fio-1.20-rc1~37 X-Git-Url: https://git.kernel.dk/?p=fio.git;a=commitdiff_plain;h=f3de88a7a8806016ebb27af3f4be1fced172122e;hp=6ae1f57f2cb8661b97b770372eeb3694f6d5a744 Move syslet/indirect bits into the OS specific directory Signed-off-by: Jens Axboe --- diff --git a/engines/syslet-rw.c b/engines/syslet-rw.c index 7bb1be83..0fdf7522 100644 --- a/engines/syslet-rw.c +++ b/engines/syslet-rw.c @@ -14,8 +14,6 @@ #include #include "../fio.h" -#include "../indirect.h" -#include "../syslet.h" #include "../fls.h" #ifdef FIO_HAVE_SYSLET diff --git a/indirect.h b/indirect.h deleted file mode 100644 index fba6b6be..00000000 --- a/indirect.h +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef _INDIRECT_H_ -#define _INDIRECT_H_ - -#include "syslet.h" - -union indirect_params { - struct { - u32 flags; - } file_flags; - struct syslet_args syslet; -}; - -#ifdef __x86_64__ -# define __NR_indirect 286 -struct indirect_registers { - u64 rax; - u64 rdi; - u64 rsi; - u64 rdx; - u64 r10; - u64 r8; - u64 r9; -}; -#elif defined __i386__ -# define __NR_indirect 325 -struct indirect_registers { - u32 eax; - u32 ebx; - u32 ecx; - u32 edx; - u32 esi; - u32 edi; - u32 ebp; -}; -#endif - -#define FILL_IN(var, values...) \ - (var) = (struct indirect_registers) { values, } - -#endif diff --git a/kcompat.h b/kcompat.h deleted file mode 100644 index 9ef1f33c..00000000 --- a/kcompat.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef _KCOMPAT_H_ -#define _KCOMPAT_H_ - -#include - -#define u64 uint64_t -#define u32 uint32_t - -#endif diff --git a/os/indirect.h b/os/indirect.h new file mode 100644 index 00000000..fba6b6be --- /dev/null +++ b/os/indirect.h @@ -0,0 +1,40 @@ +#ifndef _INDIRECT_H_ +#define _INDIRECT_H_ + +#include "syslet.h" + +union indirect_params { + struct { + u32 flags; + } file_flags; + struct syslet_args syslet; +}; + +#ifdef __x86_64__ +# define __NR_indirect 286 +struct indirect_registers { + u64 rax; + u64 rdi; + u64 rsi; + u64 rdx; + u64 r10; + u64 r8; + u64 r9; +}; +#elif defined __i386__ +# define __NR_indirect 325 +struct indirect_registers { + u32 eax; + u32 ebx; + u32 ecx; + u32 edx; + u32 esi; + u32 edi; + u32 ebp; +}; +#endif + +#define FILL_IN(var, values...) \ + (var) = (struct indirect_registers) { values, } + +#endif diff --git a/os/kcompat.h b/os/kcompat.h new file mode 100644 index 00000000..9ef1f33c --- /dev/null +++ b/os/kcompat.h @@ -0,0 +1,9 @@ +#ifndef _KCOMPAT_H_ +#define _KCOMPAT_H_ + +#include + +#define u64 uint64_t +#define u32 uint32_t + +#endif diff --git a/os/os-linux.h b/os/os-linux.h index ed195537..e7c0e47c 100644 --- a/os/os-linux.h +++ b/os/os-linux.h @@ -10,6 +10,8 @@ #include #include +#include "indirect.h" + #define FIO_HAVE_LIBAIO #define FIO_HAVE_POSIXAIO #define FIO_HAVE_FADVISE diff --git a/os/syslet.h b/os/syslet.h new file mode 100644 index 00000000..095cc134 --- /dev/null +++ b/os/syslet.h @@ -0,0 +1,50 @@ +#ifndef _SYSLET_H_ +#define _SYSLET_H_ + +#include "kcompat.h" + +struct syslet_frame { + u64 ip; + u64 sp; +}; + +struct syslet_args { + u64 ring_ptr; + u64 caller_data; + struct syslet_frame frame; +}; + +struct syslet_completion { + u64 status; + u64 caller_data; +}; + +struct syslet_ring { + u32 kernel_head; + u32 user_tail; + u32 elements; + u32 wait_group; + struct syslet_completion comp[0]; +}; + +#ifdef __x86_64__ +#define __NR_syslet_ring_wait 287 +#elif defined __i386__ +#define __NR_syslet_ring_wait 326 +#endif + +#define ESYSLETPENDING 132 + +typedef void (*syslet_return_func_t)(void); + +static inline void fill_syslet_args(struct syslet_args *args, + struct syslet_ring *ring, uint64_t caller_data, + syslet_return_func_t func, void *stack) +{ + args->ring_ptr = (u64)(unsigned long)ring; + args->caller_data = caller_data; + args->frame.ip = (u64)(unsigned long)func; + args->frame.sp = (u64)(unsigned long)stack; +} + +#endif diff --git a/syslet.h b/syslet.h deleted file mode 100644 index 16f81d2f..00000000 --- a/syslet.h +++ /dev/null @@ -1,50 +0,0 @@ -#ifndef _SYSLET_H_ -#define _SYSLET_H_ - -#include "kcompat.h" - -struct syslet_frame { - u64 ip; - u64 sp; -}; - -struct syslet_args { - u64 ring_ptr; - u64 caller_data; - struct syslet_frame frame; -}; - -struct syslet_completion { - u64 status; - u64 caller_data; -}; - -struct syslet_ring { - u32 kernel_head; - u32 user_tail; - u32 elements; - u32 wait_group; - struct syslet_completion comp[0]; -}; - -#ifdef __x86_64__ -#define __NR_syslet_ring_wait 287 -#elif defined __i386__ -#define __NR_syslet_ring_wait 326 -#endif - -#define ESYSLETPENDING 132 - -typedef void (*syslet_return_func_t)(void); - -void fill_syslet_args(struct syslet_args *args, struct syslet_ring *ring, - uint64_t caller_data, syslet_return_func_t func, - void *stack) -{ - args->ring_ptr = (u64)(unsigned long)ring; - args->caller_data = caller_data; - args->frame.ip = (u64)(unsigned long)func; - args->frame.sp = (u64)(unsigned long)stack; -} - -#endif