projects
/
powerpc.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'work'
[powerpc.git]
/
fs
/
exec.c
diff --git
a/fs/exec.c
b/fs/exec.c
index
c466fec
..
62b40af
100644
(file)
--- a/
fs/exec.c
+++ b/
fs/exec.c
@@
-306,9
+306,6
@@
void install_arg_page(struct vm_area_struct *vma,
struct page *page, unsigned long address)
{
struct mm_struct *mm = vma->vm_mm;
struct page *page, unsigned long address)
{
struct mm_struct *mm = vma->vm_mm;
- pgd_t * pgd;
- pud_t * pud;
- pmd_t * pmd;
pte_t * pte;
spinlock_t *ptl;
pte_t * pte;
spinlock_t *ptl;
@@
-316,14
+313,7
@@
void install_arg_page(struct vm_area_struct *vma,
goto out;
flush_dcache_page(page);
goto out;
flush_dcache_page(page);
- pgd = pgd_offset(mm, address);
- pud = pud_alloc(mm, pgd, address);
- if (!pud)
- goto out;
- pmd = pmd_alloc(mm, pud, address);
- if (!pmd)
- goto out;
- pte = pte_alloc_map_lock(mm, pmd, address, &ptl);
+ pte = get_locked_pte(mm, address, &ptl);
if (!pte)
goto out;
if (!pte_none(*pte)) {
if (!pte)
goto out;
if (!pte_none(*pte)) {
@@
-334,7
+324,7
@@
void install_arg_page(struct vm_area_struct *vma,
lru_cache_add_active(page);
set_pte_at(mm, address, pte, pte_mkdirty(pte_mkwrite(mk_pte(
page, vma->vm_page_prot))));
lru_cache_add_active(page);
set_pte_at(mm, address, pte, pte_mkdirty(pte_mkwrite(mk_pte(
page, vma->vm_page_prot))));
- page_add_anon_rmap(page, vma, address);
+ page_add_
new_
anon_rmap(page, vma, address);
pte_unmap_unlock(pte, ptl);
/* no need for flush_tlb */
pte_unmap_unlock(pte, ptl);
/* no need for flush_tlb */
@@
-585,7
+575,7
@@
static int exec_mmap(struct mm_struct *mm)
* disturbing other processes. (Other processes might share the signal
* table via the CLONE_SIGHAND option to clone().)
*/
* disturbing other processes. (Other processes might share the signal
* table via the CLONE_SIGHAND option to clone().)
*/
-static in
line in
t de_thread(struct task_struct *tsk)
+static int de_thread(struct task_struct *tsk)
{
struct signal_struct *sig = tsk->signal;
struct sighand_struct *newsighand, *oldsighand = tsk->sighand;
{
struct signal_struct *sig = tsk->signal;
struct sighand_struct *newsighand, *oldsighand = tsk->sighand;
@@
-642,10
+632,10
@@
static inline int de_thread(struct task_struct *tsk)
* synchronize with any firing (by calling del_timer_sync)
* before we can safely let the old group leader die.
*/
* synchronize with any firing (by calling del_timer_sync)
* before we can safely let the old group leader die.
*/
- sig->real_timer.data =
(unsigned long)
current;
+ sig->real_timer.data = current;
spin_unlock_irq(lock);
spin_unlock_irq(lock);
- if (
del_timer_sync
(&sig->real_timer))
-
add_timer
(&sig->real_timer);
+ if (
hrtimer_cancel
(&sig->real_timer))
+
hrtimer_restart
(&sig->real_timer);
spin_lock_irq(lock);
}
while (atomic_read(&sig->count) > count) {
spin_lock_irq(lock);
}
while (atomic_read(&sig->count) > count) {
@@
-668,7
+658,7
@@
static inline int de_thread(struct task_struct *tsk)
if (!thread_group_leader(current)) {
struct task_struct *parent;
struct dentry *proc_dentry1, *proc_dentry2;
if (!thread_group_leader(current)) {
struct task_struct *parent;
struct dentry *proc_dentry1, *proc_dentry2;
- unsigned long
exit_state,
ptrace;
+ unsigned long ptrace;
/*
* Wait for the thread group leader to be a zombie.
/*
* Wait for the thread group leader to be a zombie.
@@
-726,15
+716,15
@@
static inline int de_thread(struct task_struct *tsk)
list_del(¤t->tasks);
list_add_tail(¤t->tasks, &init_task.tasks);
current->exit_signal = SIGCHLD;
list_del(¤t->tasks);
list_add_tail(¤t->tasks, &init_task.tasks);
current->exit_signal = SIGCHLD;
- exit_state = leader->exit_state;
+
+ BUG_ON(leader->exit_state != EXIT_ZOMBIE);
+ leader->exit_state = EXIT_DEAD;
write_unlock_irq(&tasklist_lock);
spin_unlock(&leader->proc_lock);
spin_unlock(¤t->proc_lock);
proc_pid_flush(proc_dentry1);
proc_pid_flush(proc_dentry2);
write_unlock_irq(&tasklist_lock);
spin_unlock(&leader->proc_lock);
spin_unlock(¤t->proc_lock);
proc_pid_flush(proc_dentry1);
proc_pid_flush(proc_dentry2);
-
- BUG_ON(exit_state != EXIT_ZOMBIE);
}
/*
}
/*
@@
-770,7
+760,7
@@
no_thread_group:
spin_lock(&oldsighand->siglock);
spin_lock(&newsighand->siglock);
spin_lock(&oldsighand->siglock);
spin_lock(&newsighand->siglock);
-
current->sighand = newsighand
;
+
rcu_assign_pointer(current->sighand, newsighand)
;
recalc_sigpending();
spin_unlock(&newsighand->siglock);
recalc_sigpending();
spin_unlock(&newsighand->siglock);
@@
-778,7
+768,7
@@
no_thread_group:
write_unlock_irq(&tasklist_lock);
if (atomic_dec_and_test(&oldsighand->count))
write_unlock_irq(&tasklist_lock);
if (atomic_dec_and_test(&oldsighand->count))
-
kmem_cache_free(sighand_cachep,
oldsighand);
+
sighand_free(
oldsighand);
}
BUG_ON(!thread_group_leader(current));
}
BUG_ON(!thread_group_leader(current));
@@
-790,7
+780,7
@@
no_thread_group:
* so that a new one can be started
*/
* so that a new one can be started
*/
-static
inline
void flush_old_files(struct files_struct * files)
+static void flush_old_files(struct files_struct * files)
{
long j = -1;
struct fdtable *fdt;
{
long j = -1;
struct fdtable *fdt;
@@
-974,7
+964,7
@@
int prepare_binprm(struct linux_binprm *bprm)
EXPORT_SYMBOL(prepare_binprm);
EXPORT_SYMBOL(prepare_binprm);
-static in
line in
t unsafe_exec(struct task_struct *p)
+static int unsafe_exec(struct task_struct *p)
{
int unsafe = 0;
if (p->ptrace & PT_PTRACED) {
{
int unsafe = 0;
if (p->ptrace & PT_PTRACED) {
@@
-1472,6
+1462,7
@@
int do_coredump(long signr, int exit_code, struct pt_regs * regs)
if (!(current->signal->flags & SIGNAL_GROUP_EXIT)) {
current->signal->flags = SIGNAL_GROUP_EXIT;
current->signal->group_exit_code = exit_code;
if (!(current->signal->flags & SIGNAL_GROUP_EXIT)) {
current->signal->flags = SIGNAL_GROUP_EXIT;
current->signal->group_exit_code = exit_code;
+ current->signal->group_stop_count = 0;
retval = 0;
}
spin_unlock_irq(¤t->sighand->siglock);
retval = 0;
}
spin_unlock_irq(¤t->sighand->siglock);
@@
-1487,7
+1478,6
@@
int do_coredump(long signr, int exit_code, struct pt_regs * regs)
* Clear any false indication of pending signals that might
* be seen by the filesystem code called to write the core file.
*/
* Clear any false indication of pending signals that might
* be seen by the filesystem code called to write the core file.
*/
- current->signal->group_stop_count = 0;
clear_thread_flag(TIF_SIGPENDING);
if (current->signal->rlim[RLIMIT_CORE].rlim_cur < binfmt->min_coredump)
clear_thread_flag(TIF_SIGPENDING);
if (current->signal->rlim[RLIMIT_CORE].rlim_cur < binfmt->min_coredump)
@@
-1515,7
+1505,7
@@
int do_coredump(long signr, int exit_code, struct pt_regs * regs)
goto close_fail;
if (!file->f_op->write)
goto close_fail;
goto close_fail;
if (!file->f_op->write)
goto close_fail;
- if (do_truncate(file->f_dentry, 0, file) != 0)
+ if (do_truncate(file->f_dentry, 0,
0,
file) != 0)
goto close_fail;
retval = binfmt->core_dump(signr, regs, file);
goto close_fail;
retval = binfmt->core_dump(signr, regs, file);