diff options
Diffstat (limited to 'arch/um/os-Linux/time.c')
| -rw-r--r-- | arch/um/os-Linux/time.c | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/arch/um/os-Linux/time.c b/arch/um/os-Linux/time.c index 4ae73c0e5485..38be096e750f 100644 --- a/arch/um/os-Linux/time.c +++ b/arch/um/os-Linux/time.c | |||
| @@ -17,20 +17,25 @@ | |||
| 17 | #include "kern_constants.h" | 17 | #include "kern_constants.h" |
| 18 | #include "os.h" | 18 | #include "os.h" |
| 19 | 19 | ||
| 20 | static void set_interval(int timer_type) | 20 | int set_interval(int is_virtual) |
| 21 | { | 21 | { |
| 22 | int usec = 1000000/hz(); | 22 | int usec = 1000000/hz(); |
| 23 | int timer_type = is_virtual ? ITIMER_VIRTUAL : ITIMER_REAL; | ||
| 23 | struct itimerval interval = ((struct itimerval) { { 0, usec }, | 24 | struct itimerval interval = ((struct itimerval) { { 0, usec }, |
| 24 | { 0, usec } }); | 25 | { 0, usec } }); |
| 25 | 26 | ||
| 26 | if(setitimer(timer_type, &interval, NULL) == -1) | 27 | if(setitimer(timer_type, &interval, NULL) == -1) |
| 27 | panic("setitimer failed - errno = %d\n", errno); | 28 | return -errno; |
| 29 | |||
| 30 | return 0; | ||
| 28 | } | 31 | } |
| 29 | 32 | ||
| 33 | #ifdef CONFIG_MODE_TT | ||
| 30 | void enable_timer(void) | 34 | void enable_timer(void) |
| 31 | { | 35 | { |
| 32 | set_interval(ITIMER_VIRTUAL); | 36 | set_interval(1); |
| 33 | } | 37 | } |
| 38 | #endif | ||
| 34 | 39 | ||
| 35 | void disable_timer(void) | 40 | void disable_timer(void) |
| 36 | { | 41 | { |
| @@ -40,8 +45,8 @@ void disable_timer(void) | |||
| 40 | printk("disnable_timer - setitimer failed, errno = %d\n", | 45 | printk("disnable_timer - setitimer failed, errno = %d\n", |
| 41 | errno); | 46 | errno); |
| 42 | /* If there are signals already queued, after unblocking ignore them */ | 47 | /* If there are signals already queued, after unblocking ignore them */ |
| 43 | set_handler(SIGALRM, SIG_IGN, 0, -1); | 48 | signal(SIGALRM, SIG_IGN); |
| 44 | set_handler(SIGVTALRM, SIG_IGN, 0, -1); | 49 | signal(SIGVTALRM, SIG_IGN); |
| 45 | } | 50 | } |
| 46 | 51 | ||
| 47 | void switch_timers(int to_real) | 52 | void switch_timers(int to_real) |
| @@ -74,7 +79,7 @@ void uml_idle_timer(void) | |||
| 74 | 79 | ||
| 75 | set_handler(SIGALRM, (__sighandler_t) alarm_handler, | 80 | set_handler(SIGALRM, (__sighandler_t) alarm_handler, |
| 76 | SA_RESTART, SIGUSR1, SIGIO, SIGWINCH, SIGVTALRM, -1); | 81 | SA_RESTART, SIGUSR1, SIGIO, SIGWINCH, SIGVTALRM, -1); |
| 77 | set_interval(ITIMER_REAL); | 82 | set_interval(0); |
| 78 | } | 83 | } |
| 79 | #endif | 84 | #endif |
| 80 | 85 | ||
| @@ -94,8 +99,3 @@ void idle_sleep(int secs) | |||
| 94 | ts.tv_nsec = 0; | 99 | ts.tv_nsec = 0; |
| 95 | nanosleep(&ts, NULL); | 100 | nanosleep(&ts, NULL); |
| 96 | } | 101 | } |
| 97 | |||
| 98 | void user_time_init(void) | ||
| 99 | { | ||
| 100 | set_interval(ITIMER_VIRTUAL); | ||
| 101 | } | ||
