mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-02 07:13:54 -06:00
linux-user: Add support for adjtimex() syscall
This patch implements Qemu user mode adjtimex() syscall support. Syscall adjtimex() reads and optionally sets parameters for a clock adjustment algorithm used in network synchonization or similar scenarios. Its declaration is: int adjtimex(struct timex *buf); The correspondent source code in the Linux kernel is at kernel/time.c, line 206. The Qemu implementation is based on invocation of host's adjtimex(), and its key part is in the "TARGET_NR_adjtimex" case segment of the the main switch statement of the function do_syscall(), in linux-user/syscalls.c. All necessary conversions of the data structures from target to host and from host to target are covered. Two new functions, target_to_host_timex() and host_to_target_timex(), are provided for the purpose of such conversions. For that purpose, the support for related structure "timex" had tp be added to the file linux-user/syscall_defs.h, based on its definition in Linux kernel. Also, the relevant support for "-strace" Qemu option is included in files linux-user/strace.c and linux-user/strace.list. This patch also fixes failures of LTP tests adjtimex01 and adjtimex02, if executed in Qemu user mode. Signed-off-by: Aleksandar Rikalo <aleksandar.rikalo@imgtec.com> Signed-off-by: Aleksandar Markovic <aleksandar.markovic@imgtec.com> Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
This commit is contained in:
parent
da158a86c4
commit
19f59bcef9
4 changed files with 162 additions and 2 deletions
|
@ -207,6 +207,34 @@ struct target_itimerspec {
|
|||
struct target_timespec it_value;
|
||||
};
|
||||
|
||||
struct target_timex {
|
||||
abi_uint modes; /* Mode selector */
|
||||
abi_long offset; /* Time offset */
|
||||
abi_long freq; /* Frequency offset */
|
||||
abi_long maxerror; /* Maximum error (microseconds) */
|
||||
abi_long esterror; /* Estimated error (microseconds) */
|
||||
abi_int status; /* Clock command/status */
|
||||
abi_long constant; /* PLL (phase-locked loop) time constant */
|
||||
abi_long precision; /* Clock precision (microseconds, ro) */
|
||||
abi_long tolerance; /* Clock freq. tolerance (ppm, ro) */
|
||||
struct target_timeval time; /* Current time */
|
||||
abi_long tick; /* Microseconds between clock ticks */
|
||||
abi_long ppsfreq; /* PPS (pulse per second) frequency */
|
||||
abi_long jitter; /* PPS jitter (ro); nanoseconds */
|
||||
abi_int shift; /* PPS interval duration (seconds) */
|
||||
abi_long stabil; /* PPS stability */
|
||||
abi_long jitcnt; /* PPS jitter limit exceeded (ro) */
|
||||
abi_long calcnt; /* PPS calibration intervals */
|
||||
abi_long errcnt; /* PPS calibration errors */
|
||||
abi_long stbcnt; /* PPS stability limit exceeded */
|
||||
abi_int tai; /* TAI offset */
|
||||
|
||||
/* Further padding bytes to allow for future expansion */
|
||||
abi_int:32; abi_int:32; abi_int:32; abi_int:32;
|
||||
abi_int:32; abi_int:32; abi_int:32; abi_int:32;
|
||||
abi_int:32; abi_int:32; abi_int:32;
|
||||
};
|
||||
|
||||
typedef abi_long target_clock_t;
|
||||
|
||||
#define TARGET_HZ 100
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue