summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorWilliam Lee Irwin III <wli@holomorphy.com>2002-11-20 19:31:19 -0200
committerArnaldo Carvalho de Melo <acme@conectiva.com.br>2002-11-20 19:31:19 -0200
commit1f7823767c19dc97d88ac899830417c3aa8d825d (patch)
treeb2589a72b7a672ee01238e4a5dd21b2fdd083832 /kernel
parent3d4275173d5d7cc6406a3dd43ba2fef4c256a34e (diff)
sched: privatizes the sibling inlines to sched.c, the sole caller of them.
Diffstat (limited to 'kernel')
-rw-r--r--kernel/sched.c18
-rw-r--r--kernel/signal.c30
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)