summaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>2000-08-08 18:02:00 +0000
committerRalf Baechle <ralf@linux-mips.org>2000-08-08 18:02:00 +0000
commit02f8110d6a247d53b489b29eec8a35c85e713c6b (patch)
tree9cb65032a35c2d1af581deaac73dfa2540b2fbdd /kernel
parentb62a3d8e8a9d02ff6f9103358b7a9c2c3d56c653 (diff)
Merge with Linux 2.4.0-test6-pre2.
Diffstat (limited to 'kernel')
-rw-r--r--kernel/kmod.c7
-rw-r--r--kernel/sched.c1
-rw-r--r--kernel/softirq.c11
-rw-r--r--kernel/sysctl.c1
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(&current->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;