From: Jeff Dike The patch below brings UML up to date with interface changes and the like irq.c includes profile.h to bring in a missing definition use the cpu_{set,clear} interface use the new get_signal_to_deliver interface define instruction_pointer Signed-off-by: Andrew Morton --- 25-akpm/arch/um/kernel/irq.c | 1 + 25-akpm/arch/um/kernel/process_kern.c | 7 ++++--- 25-akpm/arch/um/kernel/signal_kern.c | 10 +++++----- 25-akpm/include/asm-um/ptrace-generic.h | 2 ++ 4 files changed, 12 insertions(+), 8 deletions(-) diff -puN arch/um/kernel/irq.c~uml-updates arch/um/kernel/irq.c --- 25/arch/um/kernel/irq.c~uml-updates 2004-08-15 15:08:26.292565088 -0700 +++ 25-akpm/arch/um/kernel/irq.c 2004-08-15 15:08:26.300563872 -0700 @@ -18,6 +18,7 @@ #include "linux/proc_fs.h" #include "linux/init.h" #include "linux/seq_file.h" +#include "linux/profile.h" #include "asm/irq.h" #include "asm/hw_irq.h" #include "asm/hardirq.h" diff -puN arch/um/kernel/process_kern.c~uml-updates arch/um/kernel/process_kern.c --- 25/arch/um/kernel/process_kern.c~uml-updates 2004-08-15 15:08:26.293564936 -0700 +++ 25-akpm/arch/um/kernel/process_kern.c 2004-08-15 15:08:26.301563720 -0700 @@ -114,10 +114,11 @@ int kernel_thread(int (*fn)(void *), voi void switch_mm(struct mm_struct *prev, struct mm_struct *next, struct task_struct *tsk) { - unsigned cpu = smp_processor_id(); + int cpu = smp_processor_id(); + if (prev != next) - clear_bit(cpu, &prev->cpu_vm_mask); - set_bit(cpu, &next->cpu_vm_mask); + cpu_clear(cpu, prev->cpu_vm_mask); + cpu_set(cpu, next->cpu_vm_mask); } void set_current(void *t) diff -puN arch/um/kernel/signal_kern.c~uml-updates arch/um/kernel/signal_kern.c --- 25/arch/um/kernel/signal_kern.c~uml-updates 2004-08-15 15:08:26.294564784 -0700 +++ 25-akpm/arch/um/kernel/signal_kern.c 2004-08-15 15:08:26.301563720 -0700 @@ -130,21 +130,21 @@ static int handle_signal(struct pt_regs static int kern_do_signal(struct pt_regs *regs, sigset_t *oldset, int error) { + struct k_sigaction ka_copy; siginfo_t info; - struct k_sigaction *ka; int err, sig; if (!oldset) oldset = ¤t->blocked; - sig = get_signal_to_deliver(&info, regs, NULL); + sig = get_signal_to_deliver(&info, &ka_copy, regs, NULL); if(sig == 0) return(0); /* Whee! Actually deliver the signal. */ - ka = ¤t->sighand->action[sig -1 ]; - err = handle_signal(regs, sig, ka, &info, oldset, error); - if(!err) return(1); + err = handle_signal(regs, sig, &ka_copy, &info, oldset, error); + if(!err) + return(1); /* Did we come from a system call? */ if(PT_REGS_SYSCALL_NR(regs) >= 0){ diff -puN include/asm-um/ptrace-generic.h~uml-updates include/asm-um/ptrace-generic.h --- 25/include/asm-um/ptrace-generic.h~uml-updates 2004-08-15 15:08:26.296564480 -0700 +++ 25-akpm/include/asm-um/ptrace-generic.h 2004-08-15 15:08:26.302563568 -0700 @@ -45,6 +45,8 @@ struct pt_regs { #define PT_REGS_SC(r) UPT_SC(&(r)->regs) +#define instruction_pointer(regs) PT_REGS_IP(regs) + struct task_struct; extern unsigned long getreg(struct task_struct *child, int regno); _