]> git.hungrycats.org Git - linux/commitdiff
[ARM] 2.5.34 update
authorRussell King <rmk@flint.arm.linux.org.uk>
Sun, 29 Sep 2002 18:12:05 +0000 (19:12 +0100)
committerRussell King <rmk@flint.arm.linux.org.uk>
Sun, 29 Sep 2002 18:12:05 +0000 (19:12 +0100)
Update for changes in mainline 2.5.3[01234].

arch/arm/kernel/armksyms.c
arch/arm/kernel/init_task.c
arch/arm/kernel/setup.c
arch/arm/kernel/signal.c
arch/arm/kernel/sys_arm.c
arch/arm/mach-rpc/riscpc.c
include/asm-arm/cache.h
include/asm-arm/ide.h
include/asm-arm/system.h

index 246601aea6a7bf76b9ce3f97d45958731e1a6a07..fc107e93f404953e7c46d51ac20bda67de44f1e7 100644 (file)
@@ -275,7 +275,3 @@ EXPORT_SYMBOL_NOVERS(__down_trylock_failed);
 EXPORT_SYMBOL_NOVERS(__up_wakeup);
 
 EXPORT_SYMBOL(get_wchan);
-
-#ifdef CONFIG_PREEMPT
-EXPORT_SYMBOL(kernel_flag);
-#endif
index 0cdc608bd8622eb64aa9026182f7c4cfc673a05e..e1c830d099d51ce1dba9bbc2e082cda3aeebd27d 100644 (file)
@@ -12,7 +12,7 @@
 
 static struct fs_struct init_fs = INIT_FS;
 static struct files_struct init_files = INIT_FILES;
-static struct signal_struct init_signals = INIT_SIGNALS;
+static struct signal_struct init_signals = INIT_SIGNALS(init_signals);
 struct mm_struct init_mm = INIT_MM(init_mm);
 
 /*
index 7c23b75e5e2962b8f1f6f8d05931346457d59288..cf6c528b3947a1969797009d848a2ef6d1990ee1 100644 (file)
 #define MEM_SIZE       (16*1024*1024)
 #endif
 
-#ifdef CONFIG_PREEMPT
-spinlock_t kernel_flag __cacheline_aligned_in_smp = SPIN_LOCK_UNLOCKED;
-#endif
-
 #if defined(CONFIG_FPE_NWFPE) || defined(CONFIG_FPE_FASTFPE)
 char fpe_type[8];
 
index 6efd090309cea3ad28bcce98b3391e8dee89ce12..6f6701c99712031e1eaaa0de6d9f882737bb3880 100644 (file)
@@ -373,7 +373,7 @@ setup_return(struct pt_regs *regs, struct k_sigaction *ka,
        regs->ARM_r0 = usig;
        regs->ARM_sp = (unsigned long)frame;
        regs->ARM_lr = retcode;
-       regs->ARM_pc = handler & (thumb ? ~1 : ~3);
+       regs->ARM_pc = handler;
 
 #ifdef CONFIG_CPU_32
        regs->ARM_cpsr = cpsr;
@@ -503,7 +503,6 @@ handle_signal(unsigned long sig, struct k_sigaction *ka,
  */
 static int do_signal(sigset_t *oldset, struct pt_regs *regs, int syscall)
 {
-       struct k_sigaction *ka;
        siginfo_t info;
        int single_stepping;
 
@@ -519,11 +518,22 @@ static int do_signal(sigset_t *oldset, struct pt_regs *regs, int syscall)
        single_stepping = ptrace_cancel_bpt(current);
 
        for (;;) {
-               unsigned long signr;
-
-               spin_lock_irq (&current->sigmask_lock);
-               signr = dequeue_signal(&current->blocked, &info);
-               spin_unlock_irq (&current->sigmask_lock);
+               unsigned long signr = 0;
+               struct k_sigaction *ka;
+               sigset_t *mask = &current->blocked;
+
+               local_irq_disable();
+               if (current->sig->shared_pending.head) {
+                       spin_lock(&current->sig->siglock);
+                       signr = dequeue_signal(&current->sig->shared_pending, mask, &info);
+                       spin_unlock(&current->sig->siglock);
+               }
+               if (!signr) {
+                       spin_lock(&current->sigmask_lock);
+                       signr = dequeue_signal(&current->pending, mask, &info);
+                       spin_unlock(&current->sigmask_lock);
+               }
+               local_irq_enable();
 
                if (!signr)
                        break;
@@ -531,13 +541,14 @@ static int do_signal(sigset_t *oldset, struct pt_regs *regs, int syscall)
                if ((current->ptrace & PT_PTRACED) && signr != SIGKILL) {
                        /* Let the debugger run.  */
                        current->exit_code = signr;
-                       current->state = TASK_STOPPED;
+                       set_current_state(TASK_STOPPED);
                        notify_parent(current, SIGCHLD);
                        schedule();
                        single_stepping |= ptrace_cancel_bpt(current);
 
                        /* We're back.  Did the debugger cancel the sig?  */
-                       if (!(signr = current->exit_code))
+                       signr = current->exit_code;
+                       if (signr == 0)
                                continue;
                        current->exit_code = 0;
 
@@ -589,7 +600,7 @@ static int do_signal(sigset_t *oldset, struct pt_regs *regs, int syscall)
 
                        case SIGSTOP: {
                                struct signal_struct *sig;
-                               current->state = TASK_STOPPED;
+                               set_current_state(TASK_STOPPED);
                                current->exit_code = signr;
                                sig = current->parent->sig;
                                if (sig && !(sig->action[SIGCHLD-1].sa.sa_flags & SA_NOCLDSTOP))
index 34713adaf4dca43a5abace0940119c278fabba43..47f4ff685a190492a0743460f550fa6d7af0f68d 100644 (file)
@@ -239,7 +239,7 @@ asmlinkage int sys_ipc (uint call, int first, int second, int third, void *ptr,
 asmlinkage int sys_fork(struct pt_regs *regs)
 {
        struct task_struct *p;
-       p = do_fork(SIGCHLD, regs->ARM_sp, regs, 0);
+       p = do_fork(SIGCHLD, regs->ARM_sp, regs, 0, NULL);
        return IS_ERR(p) ? PTR_ERR(p) : p->pid;
 }
 
@@ -249,16 +249,25 @@ asmlinkage int sys_fork(struct pt_regs *regs)
 asmlinkage int sys_clone(unsigned long clone_flags, unsigned long newsp, struct pt_regs *regs)
 {
        struct task_struct *p;
+
+       /*
+        * We don't support SETTID / CLEARTID
+        */
+       if (clone_flags & (CLONE_SETTID | CLONE_CLEARTID))
+               return -EINVAL;
+
        if (!newsp)
                newsp = regs->ARM_sp;
-       p = do_fork(clone_flags & ~CLONE_IDLETASK, newsp, regs, 0);
+
+       p = do_fork(clone_flags & ~CLONE_IDLETASK, newsp, regs, 0, NULL);
+
        return IS_ERR(p) ? PTR_ERR(p) : p->pid;
 }
 
 asmlinkage int sys_vfork(struct pt_regs *regs)
 {
        struct task_struct *p;
-       p = do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, regs->ARM_sp, regs, 0);
+       p = do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, regs->ARM_sp, regs, 0, NULL);
        return IS_ERR(p) ? PTR_ERR(p) : p->pid;
 }
 
index e62acc952e6846400f51804e7f26bf3e34638fe9..8c1538aaacd02d1884ec20167ccd763b7988ee78 100644 (file)
@@ -16,6 +16,7 @@
 #include <linux/init.h>
 
 #include <asm/elf.h>
+#include <asm/io.h>
 #include <asm/setup.h>
 #include <asm/mach-types.h>
 #include <asm/hardware.h>
@@ -71,6 +72,11 @@ void __init rpc_map_io(void)
 {
        iotable_init(rpc_io_desc, ARRAY_SIZE(rpc_io_desc));
 
+       /*
+        * Turn off floppy.
+        */
+       outb(0xc, 0x3f2);
+
        /*
         * RiscPC can't handle half-word loads and stores
         */
index a56ffb7c214e427891e65455f1739a0493611fb2..ce375d2d0f2f90ff108727faad6dd1470d523651 100644 (file)
@@ -16,4 +16,6 @@
                 __section__(".data.cacheline_aligned")))
 #endif
 
+#define L1_CACHE_SHIFT_MAX 5   /* largest L1 which this arch supports */
+
 #endif
index 741b223b06f0d57e8d26d150b261d5c245eab666..3b9c4c18c6af42436ad56471246fc49c5ab2bc30 100644 (file)
 #define ide_default_io_base(i)         ((ide_ioreg_t)0)
 #define ide_default_irq(b)             (0)
 
+#define ide_request_irq(irq,hand,flg,dev,id)   request_irq((irq),(hand),(flg),(dev),(id))
+#define ide_free_irq(irq,dev_id)               free_irq((irq), (dev_id))
+#define ide_check_region(from,extent)          check_region((from), (extent))
+#define ide_request_region(from,extent,name)   request_region((from), (extent), (name))
+#define ide_release_region(from,extent)                release_region((from), (extent))
+
+/*
+ * The following are not needed for the non-m68k ports
+ */
+#define ide_ack_intr(hwif)             (1)
+#define ide_fix_driveid(id)            do {} while (0)
+#define ide_release_lock(lock)         do {} while (0)
+#define ide_get_lock(lock, hdlr, data) do {} while (0)
+
 #endif /* __KERNEL__ */
 
 #endif /* __ASMARM_IDE_H */
index 25b6975fbceb9b3217a6a32840ca8b049bcae4bc..698ad721f426a554f5155c2129549d9740651e67 100644 (file)
@@ -86,6 +86,13 @@ extern struct task_struct *__switch_to(struct thread_info *, struct thread_info
 #define clf()                  __clf()
 #define stf()                  __stf()
 
+#define irqs_disabled()                        \
+({                                     \
+       unsigned long flags;            \
+       local_save_flags(flags);        \
+       flags & PSR_I_BIT;              \
+})
+
 #endif /* CONFIG_SMP */
 
 #endif /* __KERNEL__ */