diff options
author | Ralf Baechle <ralf@linux-mips.org> | 1998-03-18 17:17:51 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 1998-03-18 17:17:51 +0000 |
commit | f1382dc4850bb459d24a81c6cb0ef93ea7bd4a79 (patch) | |
tree | 225271a3d5dcd4e9dea5ee393556abd754c964b1 /kernel/exit.c | |
parent | 135b00fc2e90e605ac2a96b20b0ebd93851a3f89 (diff) |
o Merge with Linux 2.1.90.
o Divide L1 cache sizes by 1024 before printing, makes the numbers a
bit more credible ...
Diffstat (limited to 'kernel/exit.c')
-rw-r--r-- | kernel/exit.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/kernel/exit.c b/kernel/exit.c index 9824f5806..2d5835ac8 100644 --- a/kernel/exit.c +++ b/kernel/exit.c @@ -27,7 +27,6 @@ #include <asm/mmu_context.h> extern void sem_exit (void); -extern void kerneld_exit(void); int getrusage(struct task_struct *, int, struct rusage *); @@ -44,8 +43,14 @@ void release(struct task_struct * p) charge_uid(p, -1); nr_tasks--; add_free_taskslot(p->tarray_ptr); - unhash_pid(p); - REMOVE_LINKS(p); + { + unsigned long flags; + + write_lock_irqsave(&tasklist_lock, flags); + unhash_pid(p); + REMOVE_LINKS(p); + write_unlock_irqrestore(&tasklist_lock, flags); + } release_thread(p); current->cmin_flt += p->min_flt + p->cmin_flt; current->cmaj_flt += p->maj_flt + p->cmaj_flt; @@ -157,7 +162,7 @@ static inline void close_files(struct files_struct * files) unsigned long set = files->open_fds.fds_bits[j]; i = j * __NFDBITS; j++; - if (i >= NR_OPEN) + if (i >= files->max_fds) break; while (set) { if (set & 1) { @@ -183,6 +188,13 @@ static inline void __exit_files(struct task_struct *tsk) tsk->files = NULL; if (!--files->count) { close_files(files); + /* + * Free the fd array as appropriate ... + */ + if (NR_OPEN * sizeof(struct file *) == PAGE_SIZE) + free_page((unsigned long) files->fd); + else + kfree(files->fd); kmem_cache_free(files_cachep, files); } } @@ -328,7 +340,6 @@ fake_volatile: acct_process(code); del_timer(¤t->real_timer); sem_exit(); - kerneld_exit(); __exit_mm(current); #if CONFIG_AP1000 exit_msc(current); |