summaryrefslogtreecommitdiffstats
path: root/kernel/sched.c
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>1997-12-16 05:34:03 +0000
committerRalf Baechle <ralf@linux-mips.org>1997-12-16 05:34:03 +0000
commit967c65a99059fd459b956c1588ce0ba227912c4e (patch)
tree8224d013ff5d255420713d05610c7efebd204d2a /kernel/sched.c
parente20c1cc1656a66a2773bca4591a895cbc12696ff (diff)
Merge with Linux 2.1.72, part 1.
Diffstat (limited to 'kernel/sched.c')
-rw-r--r--kernel/sched.c55
1 files changed, 24 insertions, 31 deletions
diff --git a/kernel/sched.c b/kernel/sched.c
index 1d07cbc72..cfaea2116 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -50,8 +50,12 @@
int securelevel = 0; /* system security level */
long tick = (1000000 + HZ/2) / HZ; /* timer interrupt period */
-volatile struct timeval xtime __attribute__ ((aligned (8))); /* The current time */
-int tickadj = 500/HZ; /* microsecs */
+
+/* The current time */
+volatile struct timeval xtime __attribute__ ((aligned (16)));
+
+/* Don't completely fail for HZ > 500. */
+int tickadj = 500/HZ ? : 1; /* microsecs */
DECLARE_TASK_QUEUE(tq_timer);
DECLARE_TASK_QUEUE(tq_immediate);
@@ -80,13 +84,11 @@ long time_adjust_step = 0;
int need_resched = 0;
unsigned long event = 0;
-extern int _setitimer(int, struct itimerval *, struct itimerval *);
+extern int do_setitimer(int, struct itimerval *, struct itimerval *);
unsigned int * prof_buffer = NULL;
unsigned long prof_len = 0;
unsigned long prof_shift = 0;
-#define _S(nr) (1<<((nr)-1))
-
extern void mem_use(void);
unsigned long volatile jiffies=0;
@@ -1116,7 +1118,7 @@ asmlinkage unsigned int sys_alarm(unsigned int seconds)
it_new.it_interval.tv_sec = it_new.it_interval.tv_usec = 0;
it_new.it_value.tv_sec = seconds;
it_new.it_value.tv_usec = 0;
- _setitimer(ITIMER_REAL, &it_new, &it_old);
+ do_setitimer(ITIMER_REAL, &it_new, &it_old);
oldalarm = it_old.it_value.tv_sec;
/* ehhh.. We can't return 0 if we have an alarm pending.. */
/* And we'd better return too much than too little anyway */
@@ -1419,28 +1421,6 @@ asmlinkage int sys_sched_rr_get_interval(pid_t pid, struct timespec *interval)
return 0;
}
-/*
- * change timeval to jiffies, trying to avoid the
- * most obvious overflows..
- */
-static unsigned long timespectojiffies(struct timespec *value)
-{
- unsigned long sec = (unsigned) value->tv_sec;
- long nsec = value->tv_nsec;
-
- if (sec > (LONG_MAX / HZ))
- return LONG_MAX;
- nsec += 1000000000L / HZ - 1;
- nsec /= 1000000000L / HZ;
- return HZ * sec + nsec;
-}
-
-static void jiffiestotimespec(unsigned long jiffies, struct timespec *value)
-{
- value->tv_nsec = (jiffies % HZ) * (1000000000L / HZ);
- value->tv_sec = jiffies / HZ;
-}
-
asmlinkage int sys_nanosleep(struct timespec *rqtp, struct timespec *rmtp)
{
struct timespec t;
@@ -1466,7 +1446,7 @@ asmlinkage int sys_nanosleep(struct timespec *rqtp, struct timespec *rmtp)
return 0;
}
- expire = timespectojiffies(&t) + (t.tv_sec || t.tv_nsec) + jiffies;
+ expire = timespec_to_jiffies(&t) + (t.tv_sec || t.tv_nsec) + jiffies;
current->timeout = expire;
current->state = TASK_INTERRUPTIBLE;
@@ -1474,8 +1454,8 @@ asmlinkage int sys_nanosleep(struct timespec *rqtp, struct timespec *rmtp)
if (expire > jiffies) {
if (rmtp) {
- jiffiestotimespec(expire - jiffies -
- (expire > jiffies + 1), &t);
+ jiffies_to_timespec(expire - jiffies -
+ (expire > jiffies + 1), &t);
if (copy_to_user(rmtp, &t, sizeof(struct timespec)))
return -EFAULT;
}
@@ -1524,6 +1504,19 @@ static void show_task(int nr,struct task_struct * p)
printk(" %5d\n", p->p_osptr->pid);
else
printk("\n");
+
+ {
+ extern char * render_sigset_t(sigset_t *set, char *buffer);
+ struct signal_queue *q;
+ char s[sizeof(sigset_t)*2+1], b[sizeof(sigset_t)*2+1];
+
+ render_sigset_t(&p->signal, s);
+ render_sigset_t(&p->blocked, b);
+ printk(" sig: %d %s %s :", signal_pending(p), s, b);
+ for (q = p->sigqueue; q ; q = q->next)
+ printk(" %d", q->info.si_signo);
+ printk(" X\n");
+ }
}
void show_state(void)