diff options
| author | Jeff Garzik <jeff@garzik.org> | 2006-09-04 06:42:01 -0400 |
|---|---|---|
| committer | Jeff Garzik <jeff@garzik.org> | 2006-09-04 06:42:01 -0400 |
| commit | fc851fad00d7fa1bf4ac7034d9ba8041bf482d50 (patch) | |
| tree | 779a8b572d1701ef2c46755df751d9275650cdf4 /kernel | |
| parent | 85cd7251b9112e3dabeac9fd3b175601ca607241 (diff) | |
| parent | f9bcda7760e1373615c9f6d9ce24209b0ab97de1 (diff) | |
Merge branch 'upstream' into pata-drivers
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/delayacct.c | 16 | ||||
| -rw-r--r-- | kernel/exit.c | 3 | ||||
| -rw-r--r-- | kernel/fork.c | 6 | ||||
| -rw-r--r-- | kernel/irq/handle.c | 5 |
4 files changed, 10 insertions, 20 deletions
diff --git a/kernel/delayacct.c b/kernel/delayacct.c index 57ca3730205d..36752f124c6a 100644 --- a/kernel/delayacct.c +++ b/kernel/delayacct.c | |||
| @@ -41,24 +41,11 @@ void delayacct_init(void) | |||
| 41 | 41 | ||
| 42 | void __delayacct_tsk_init(struct task_struct *tsk) | 42 | void __delayacct_tsk_init(struct task_struct *tsk) |
| 43 | { | 43 | { |
| 44 | spin_lock_init(&tsk->delays_lock); | ||
| 45 | /* No need to acquire tsk->delays_lock for allocation here unless | ||
| 46 | __delayacct_tsk_init called after tsk is attached to tasklist | ||
| 47 | */ | ||
| 48 | tsk->delays = kmem_cache_zalloc(delayacct_cache, SLAB_KERNEL); | 44 | tsk->delays = kmem_cache_zalloc(delayacct_cache, SLAB_KERNEL); |
| 49 | if (tsk->delays) | 45 | if (tsk->delays) |
| 50 | spin_lock_init(&tsk->delays->lock); | 46 | spin_lock_init(&tsk->delays->lock); |
| 51 | } | 47 | } |
| 52 | 48 | ||
| 53 | void __delayacct_tsk_exit(struct task_struct *tsk) | ||
| 54 | { | ||
| 55 | struct task_delay_info *delays = tsk->delays; | ||
| 56 | spin_lock(&tsk->delays_lock); | ||
| 57 | tsk->delays = NULL; | ||
| 58 | spin_unlock(&tsk->delays_lock); | ||
| 59 | kmem_cache_free(delayacct_cache, delays); | ||
| 60 | } | ||
| 61 | |||
| 62 | /* | 49 | /* |
| 63 | * Start accounting for a delay statistic using | 50 | * Start accounting for a delay statistic using |
| 64 | * its starting timestamp (@start) | 51 | * its starting timestamp (@start) |
| @@ -118,8 +105,6 @@ int __delayacct_add_tsk(struct taskstats *d, struct task_struct *tsk) | |||
| 118 | struct timespec ts; | 105 | struct timespec ts; |
| 119 | unsigned long t1,t2,t3; | 106 | unsigned long t1,t2,t3; |
| 120 | 107 | ||
| 121 | spin_lock(&tsk->delays_lock); | ||
| 122 | |||
| 123 | /* Though tsk->delays accessed later, early exit avoids | 108 | /* Though tsk->delays accessed later, early exit avoids |
| 124 | * unnecessary returning of other data | 109 | * unnecessary returning of other data |
| 125 | */ | 110 | */ |
| @@ -161,7 +146,6 @@ int __delayacct_add_tsk(struct taskstats *d, struct task_struct *tsk) | |||
| 161 | spin_unlock(&tsk->delays->lock); | 146 | spin_unlock(&tsk->delays->lock); |
| 162 | 147 | ||
| 163 | done: | 148 | done: |
| 164 | spin_unlock(&tsk->delays_lock); | ||
| 165 | return 0; | 149 | return 0; |
| 166 | } | 150 | } |
| 167 | 151 | ||
diff --git a/kernel/exit.c b/kernel/exit.c index dba194a8d416..d891883420f7 100644 --- a/kernel/exit.c +++ b/kernel/exit.c | |||
| @@ -908,7 +908,6 @@ fastcall NORET_TYPE void do_exit(long code) | |||
| 908 | audit_free(tsk); | 908 | audit_free(tsk); |
| 909 | taskstats_exit_send(tsk, tidstats, group_dead, mycpu); | 909 | taskstats_exit_send(tsk, tidstats, group_dead, mycpu); |
| 910 | taskstats_exit_free(tidstats); | 910 | taskstats_exit_free(tidstats); |
| 911 | delayacct_tsk_exit(tsk); | ||
| 912 | 911 | ||
| 913 | exit_mm(tsk); | 912 | exit_mm(tsk); |
| 914 | 913 | ||
| @@ -1054,7 +1053,7 @@ static int eligible_child(pid_t pid, int options, struct task_struct *p) | |||
| 1054 | * Do not consider thread group leaders that are | 1053 | * Do not consider thread group leaders that are |
| 1055 | * in a non-empty thread group: | 1054 | * in a non-empty thread group: |
| 1056 | */ | 1055 | */ |
| 1057 | if (current->tgid != p->tgid && delay_group_leader(p)) | 1056 | if (delay_group_leader(p)) |
| 1058 | return 2; | 1057 | return 2; |
| 1059 | 1058 | ||
| 1060 | if (security_task_wait(p)) | 1059 | if (security_task_wait(p)) |
diff --git a/kernel/fork.c b/kernel/fork.c index aa36c43783cc..f9b014e3e700 100644 --- a/kernel/fork.c +++ b/kernel/fork.c | |||
| @@ -117,6 +117,7 @@ void __put_task_struct(struct task_struct *tsk) | |||
| 117 | security_task_free(tsk); | 117 | security_task_free(tsk); |
| 118 | free_uid(tsk->user); | 118 | free_uid(tsk->user); |
| 119 | put_group_info(tsk->group_info); | 119 | put_group_info(tsk->group_info); |
| 120 | delayacct_tsk_free(tsk); | ||
| 120 | 121 | ||
| 121 | if (!profile_handoff_task(tsk)) | 122 | if (!profile_handoff_task(tsk)) |
| 122 | free_task(tsk); | 123 | free_task(tsk); |
| @@ -1011,7 +1012,7 @@ static struct task_struct *copy_process(unsigned long clone_flags, | |||
| 1011 | retval = -EFAULT; | 1012 | retval = -EFAULT; |
| 1012 | if (clone_flags & CLONE_PARENT_SETTID) | 1013 | if (clone_flags & CLONE_PARENT_SETTID) |
| 1013 | if (put_user(p->pid, parent_tidptr)) | 1014 | if (put_user(p->pid, parent_tidptr)) |
| 1014 | goto bad_fork_cleanup; | 1015 | goto bad_fork_cleanup_delays_binfmt; |
| 1015 | 1016 | ||
| 1016 | INIT_LIST_HEAD(&p->children); | 1017 | INIT_LIST_HEAD(&p->children); |
| 1017 | INIT_LIST_HEAD(&p->sibling); | 1018 | INIT_LIST_HEAD(&p->sibling); |
| @@ -1277,7 +1278,8 @@ bad_fork_cleanup_policy: | |||
| 1277 | bad_fork_cleanup_cpuset: | 1278 | bad_fork_cleanup_cpuset: |
| 1278 | #endif | 1279 | #endif |
| 1279 | cpuset_exit(p); | 1280 | cpuset_exit(p); |
| 1280 | bad_fork_cleanup: | 1281 | bad_fork_cleanup_delays_binfmt: |
| 1282 | delayacct_tsk_free(p); | ||
| 1281 | if (p->binfmt) | 1283 | if (p->binfmt) |
| 1282 | module_put(p->binfmt->module); | 1284 | module_put(p->binfmt->module); |
| 1283 | bad_fork_cleanup_put_domain: | 1285 | bad_fork_cleanup_put_domain: |
diff --git a/kernel/irq/handle.c b/kernel/irq/handle.c index fc4e906aedbd..48a53f68af96 100644 --- a/kernel/irq/handle.c +++ b/kernel/irq/handle.c | |||
| @@ -20,6 +20,11 @@ | |||
| 20 | 20 | ||
| 21 | /** | 21 | /** |
| 22 | * handle_bad_irq - handle spurious and unhandled irqs | 22 | * handle_bad_irq - handle spurious and unhandled irqs |
| 23 | * @irq: the interrupt number | ||
| 24 | * @desc: description of the interrupt | ||
| 25 | * @regs: pointer to a register structure | ||
| 26 | * | ||
| 27 | * Handles spurious and unhandled IRQ's. It also prints a debugmessage. | ||
| 23 | */ | 28 | */ |
| 24 | void fastcall | 29 | void fastcall |
| 25 | handle_bad_irq(unsigned int irq, struct irq_desc *desc, struct pt_regs *regs) | 30 | handle_bad_irq(unsigned int irq, struct irq_desc *desc, struct pt_regs *regs) |
