diff options
author | Ralf Baechle <ralf@linux-mips.org> | 2000-08-08 18:02:00 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2000-08-08 18:02:00 +0000 |
commit | 02f8110d6a247d53b489b29eec8a35c85e713c6b (patch) | |
tree | 9cb65032a35c2d1af581deaac73dfa2540b2fbdd /kernel | |
parent | b62a3d8e8a9d02ff6f9103358b7a9c2c3d56c653 (diff) |
Merge with Linux 2.4.0-test6-pre2.
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/kmod.c | 7 | ||||
-rw-r--r-- | kernel/sched.c | 1 | ||||
-rw-r--r-- | kernel/softirq.c | 11 | ||||
-rw-r--r-- | kernel/sysctl.c | 1 |
4 files changed, 15 insertions, 5 deletions
diff --git a/kernel/kmod.c b/kernel/kmod.c index 3f59386e5..8fc459453 100644 --- a/kernel/kmod.c +++ b/kernel/kmod.c @@ -108,7 +108,12 @@ int exec_usermodehelper(char *program_path, char *argv[], char *envp[]) } /* Drop the "current user" thing */ - free_uid(current); + { + struct user_struct *user = current->user; + current->user = INIT_USER; + atomic_inc(¤t->user->__count); + free_uid(user); + } /* Give kmod all effective privileges.. */ current->uid = current->euid = current->fsuid = 0; diff --git a/kernel/sched.c b/kernel/sched.c index 68d786e89..6d99e08ab 100644 --- a/kernel/sched.c +++ b/kernel/sched.c @@ -29,7 +29,6 @@ #include <asm/uaccess.h> #include <asm/mmu_context.h> - extern void timer_bh(void); extern void tqueue_bh(void); extern void immediate_bh(void); diff --git a/kernel/softirq.c b/kernel/softirq.c index e8afe0919..19e068c65 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c @@ -198,10 +198,15 @@ void tasklet_init(struct tasklet_struct *t, void tasklet_kill(struct tasklet_struct *t) { + if (in_interrupt()) + printk("Attempt to kill tasklet from interrupt\n"); + while (test_and_set_bit(TASKLET_STATE_SCHED, &t->state)) { - if (in_interrupt()) - panic("Attempt to kill tasklet from interrupt\n"); - schedule(); + current->state = TASK_RUNNING; + do { + current->policy |= SCHED_YIELD; + schedule(); + } while (test_bit(TASKLET_STATE_SCHED, &t->state)); } tasklet_unlock_wait(t); clear_bit(TASKLET_STATE_SCHED, &t->state); diff --git a/kernel/sysctl.c b/kernel/sysctl.c index 4290619d0..b475af7ed 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c @@ -46,6 +46,7 @@ extern int bdf_prm[], bdflush_min[], bdflush_max[]; extern int sysctl_overcommit_memory; extern int max_threads; extern int nr_queued_signals, max_queued_signals; +extern int sysrq_enabled; /* this is needed for the proc_dointvec_minmax for [fs_]overflow UID and GID */ static int maxolduid = 65535; |