Commit 2ffb1116 authored by Eric Piel's avatar Eric Piel Committed by David Mosberger

[PATCH] ia64: POSIX timer fixes

Here is a patch to have the POSIX timer interface completly integrated
in ia64 (2.5.64). The programs in userland can now access the siginfo
structure. With that patch the test programs of the high resolution
timers pass without error but one which seems to also be triggered on
ix86: nanosleeps too short.
parent 969c79c7
...@@ -148,6 +148,11 @@ copy_siginfo_to_user32 (siginfo_t32 *to, siginfo_t *from) ...@@ -148,6 +148,11 @@ copy_siginfo_to_user32 (siginfo_t32 *to, siginfo_t *from)
err |= __put_user(from->si_band, &to->si_band); err |= __put_user(from->si_band, &to->si_band);
err |= __put_user(from->si_fd, &to->si_fd); err |= __put_user(from->si_fd, &to->si_fd);
break; break;
case __SI_TIMER >> 16:
err |= __put_user(from->si_tid, &to->si_tid);
err |= __put_user(from->si_overrun, &to->si_overrun);
err |= __put_user(from->si_ptr, &to->si_ptr); /*XXX eric: not sure the size is correct because it contains pointer*/
break;
/* case __SI_RT: This is not generated by the kernel as of now. */ /* case __SI_RT: This is not generated by the kernel as of now. */
} }
} }
......
...@@ -533,15 +533,15 @@ fsyscall_table: ...@@ -533,15 +533,15 @@ fsyscall_table:
data8 fsys_fallback_syscall // epoll_wait // 1245 data8 fsys_fallback_syscall // epoll_wait // 1245
data8 fsys_fallback_syscall // restart_syscall data8 fsys_fallback_syscall // restart_syscall
data8 fsys_fallback_syscall // semtimedop data8 fsys_fallback_syscall // semtimedop
data8 fsys_fallback_syscall data8 fsys_fallback_syscall // timer_create
data8 fsys_fallback_syscall data8 fsys_fallback_syscall // timer_settime
data8 fsys_fallback_syscall // 1250 data8 fsys_fallback_syscall // timer_gettime // 1250
data8 fsys_fallback_syscall data8 fsys_fallback_syscall // timer_getoverrun
data8 fsys_fallback_syscall data8 fsys_fallback_syscall // timer_delete
data8 fsys_fallback_syscall data8 fsys_fallback_syscall // clock_settime
data8 fsys_fallback_syscall data8 fsys_fallback_syscall // clock_gettime
data8 fsys_fallback_syscall // 1255 data8 fsys_fallback_syscall // clock_getres // 1255
data8 fsys_fallback_syscall data8 fsys_fallback_syscall // clock_nanosleep
data8 fsys_fallback_syscall data8 fsys_fallback_syscall
data8 fsys_fallback_syscall data8 fsys_fallback_syscall
data8 fsys_fallback_syscall data8 fsys_fallback_syscall
......
...@@ -191,6 +191,10 @@ copy_siginfo_to_user (siginfo_t *to, siginfo_t *from) ...@@ -191,6 +191,10 @@ copy_siginfo_to_user (siginfo_t *to, siginfo_t *from)
err |= __put_user(from->si_pfm_ovfl[2], &to->si_pfm_ovfl[2]); err |= __put_user(from->si_pfm_ovfl[2], &to->si_pfm_ovfl[2]);
err |= __put_user(from->si_pfm_ovfl[3], &to->si_pfm_ovfl[3]); err |= __put_user(from->si_pfm_ovfl[3], &to->si_pfm_ovfl[3]);
} }
case __SI_TIMER >> 16:
err |= __put_user(from->si_tid, &to->si_tid);
err |= __put_user(from->si_overrun, &to->si_overrun);
err |= __put_user(from->si_value, &to->si_value);
break; break;
default: default:
err |= __put_user(from->si_uid, &to->si_uid); err |= __put_user(from->si_uid, &to->si_uid);
......
...@@ -113,6 +113,7 @@ do_settimeofday (struct timeval *tv) ...@@ -113,6 +113,7 @@ do_settimeofday (struct timeval *tv)
time_esterror = NTP_PHASE_LIMIT; time_esterror = NTP_PHASE_LIMIT;
} }
write_sequnlock_irq(&xtime_lock); write_sequnlock_irq(&xtime_lock);
clock_was_set();
} }
void void
......
...@@ -214,8 +214,11 @@ typedef struct siginfo32 { ...@@ -214,8 +214,11 @@ typedef struct siginfo32 {
/* POSIX.1b timers */ /* POSIX.1b timers */
struct { struct {
unsigned int _timer1; timer_t _tid; /* timer id */
unsigned int _timer2; int _overrun; /* overrun count */
char _pad[sizeof(unsigned int) - sizeof(int)];
sigval_t32 _sigval; /* same as below */
int _sys_private; /* not to be passed to user */
} _timer; } _timer;
/* POSIX.1b signals */ /* POSIX.1b signals */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment