diff options
| author | William Lee Irwin III <wli@holomorphy.com> | 2002-11-20 19:31:19 -0200 |
|---|---|---|
| committer | Arnaldo Carvalho de Melo <acme@conectiva.com.br> | 2002-11-20 19:31:19 -0200 |
| commit | 1f7823767c19dc97d88ac899830417c3aa8d825d (patch) | |
| tree | b2589a72b7a672ee01238e4a5dd21b2fdd083832 /kernel | |
| parent | 3d4275173d5d7cc6406a3dd43ba2fef4c256a34e (diff) | |
sched: privatizes the sibling inlines to sched.c, the sole caller of them.
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/sched.c | 18 | ||||
| -rw-r--r-- | kernel/signal.c | 30 |
2 files changed, 48 insertions, 0 deletions
diff --git a/kernel/sched.c b/kernel/sched.c index 35373ad017f5..6d0ac320bcbc 100644 --- a/kernel/sched.c +++ b/kernel/sched.c @@ -1837,6 +1837,24 @@ out_unlock: return retval; } +static inline struct task_struct *eldest_child(struct task_struct *p) +{ + if (list_empty(&p->children)) return NULL; + return list_entry(p->children.next,struct task_struct,sibling); +} + +static inline struct task_struct *older_sibling(struct task_struct *p) +{ + if (p->sibling.prev==&p->parent->children) return NULL; + return list_entry(p->sibling.prev,struct task_struct,sibling); +} + +static inline struct task_struct *younger_sibling(struct task_struct *p) +{ + if (p->sibling.next==&p->parent->children) return NULL; + return list_entry(p->sibling.next,struct task_struct,sibling); +} + static void show_task(task_t * p) { unsigned long free = 0; diff --git a/kernel/signal.c b/kernel/signal.c index 961596dd16b2..1379e559bbf4 100644 --- a/kernel/signal.c +++ b/kernel/signal.c @@ -160,6 +160,36 @@ int max_queued_signals = 1024; static int __send_sig_info(int sig, struct siginfo *info, struct task_struct *p); +/* + * Re-calculate pending state from the set of locally pending + * signals, globally pending signals, and blocked signals. + */ +static inline int has_pending_signals(sigset_t *signal, sigset_t *blocked) +{ + unsigned long ready; + long i; + + switch (_NSIG_WORDS) { + default: + for (i = _NSIG_WORDS, ready = 0; --i >= 0 ;) + ready |= signal->sig[i] &~ blocked->sig[i]; + break; + + case 4: ready = signal->sig[3] &~ blocked->sig[3]; + ready |= signal->sig[2] &~ blocked->sig[2]; + ready |= signal->sig[1] &~ blocked->sig[1]; + ready |= signal->sig[0] &~ blocked->sig[0]; + break; + + case 2: ready = signal->sig[1] &~ blocked->sig[1]; + ready |= signal->sig[0] &~ blocked->sig[0]; + break; + + case 1: ready = signal->sig[0] &~ blocked->sig[0]; + } + return ready != 0; +} + #define PENDING(p,b) has_pending_signals(&(p)->signal, (b)) void recalc_sigpending_tsk(struct task_struct *t) |
