OSDN Git Service

Blackfin: convert irq/process to asm-generic
authorMike Frysinger <vapier@gentoo.org>
Sat, 13 Jun 2009 15:32:34 +0000 (11:32 -0400)
committerMike Frysinger <vapier@gentoo.org>
Fri, 19 Jun 2009 01:41:56 +0000 (21:41 -0400)
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
arch/blackfin/include/asm/hardirq.h
arch/blackfin/include/asm/irq.h
arch/blackfin/include/asm/processor.h
arch/blackfin/kernel/process.c

index 717181a..cbd52f8 100644 (file)
@@ -1,47 +1,11 @@
 #ifndef __BFIN_HARDIRQ_H
 #define __BFIN_HARDIRQ_H
 
-#include <linux/cache.h>
-#include <linux/threads.h>
-#include <asm/irq.h>
-
-typedef struct {
-       unsigned int __softirq_pending;
-       unsigned int __syscall_count;
-       struct task_struct *__ksoftirqd_task;
-} ____cacheline_aligned irq_cpustat_t;
-
-#include <linux/irq_cpustat.h> /* Standard mappings for irq_cpustat_t above */
-
-/*
- * We put the hardirq and softirq counter into the preemption
- * counter. The bitmask has the following meaning:
- *
- * - bits 0-7 are the preemption count (max preemption depth: 256)
- * - bits 8-15 are the softirq count (max # of softirqs: 256)
- * - bits 16-23 are the hardirq count (max # of hardirqs: 256)
- *
- * - ( bit 26 is the PREEMPT_ACTIVE flag. )
- *
- * PREEMPT_MASK: 0x000000ff
- * HARDIRQ_MASK: 0x0000ff00
- * SOFTIRQ_MASK: 0x00ff0000
- */
-
-#if NR_IRQS > 256
-#define HARDIRQ_BITS   9
-#else
-#define HARDIRQ_BITS   8
-#endif
-
-#ifdef NR_IRQS
-# if (1 << HARDIRQ_BITS) < NR_IRQS
-# error HARDIRQ_BITS is too low!
-# endif
-#endif
-
 #define __ARCH_IRQ_EXIT_IRQS_DISABLED  1
 
 extern void ack_bad_irq(unsigned int irq);
+#define ack_bad_irq ack_bad_irq
+
+#include <asm-generic/hardirq.h>
 
 #endif
index 400bdd5..9a7f63a 100644 (file)
@@ -45,9 +45,6 @@
                : "d" (bfin_irq_flags) \
        )
 
-static inline int irq_canonicalize(int irq)
-{
-       return irq;
-}
+#include <asm-generic/irq.h>
 
 #endif                         /* _BFIN_IRQ_H_ */
index 3040415..d0be99b 100644 (file)
@@ -7,9 +7,8 @@
  */
 #define current_text_addr() ({ __label__ _l; _l: &&_l;})
 
+#include <asm/ptrace.h>
 #include <asm/blackfin.h>
-#include <asm/segment.h>
-#include <linux/compiler.h>
 
 static inline unsigned long rdusp(void)
 {
@@ -59,36 +58,8 @@ struct thread_struct {
        PS_S, 0, 0                                              \
 }
 
-/*
- * Do necessary setup to start up a newly executed thread.
- *
- * pass the data segment into user programs if it exists,
- * it can't hurt anything as far as I can tell
- */
-#ifndef CONFIG_SMP
-#define start_thread(_regs, _pc, _usp)                                 \
-do {                                                                   \
-       set_fs(USER_DS);                                                \
-       (_regs)->pc = (_pc);                                            \
-       if (current->mm)                                                \
-               (_regs)->p5 = current->mm->start_data;                  \
-       task_thread_info(current)->l1_task_info.stack_start             \
-               = (void *)current->mm->context.stack_start;             \
-       task_thread_info(current)->l1_task_info.lowest_sp = (void *)(_usp); \
-       memcpy(L1_SCRATCH_TASK_INFO, &task_thread_info(current)->l1_task_info, \
-               sizeof(*L1_SCRATCH_TASK_INFO));                         \
-       wrusp(_usp);                                                    \
-} while(0)
-#else
-#define start_thread(_regs, _pc, _usp)                                 \
-do {                                                                   \
-       set_fs(USER_DS);                                                \
-       (_regs)->pc = (_pc);                                            \
-       if (current->mm)                                                \
-               (_regs)->p5 = current->mm->start_data;                  \
-       wrusp(_usp);                                                    \
-} while (0)
-#endif
+extern void start_thread(struct pt_regs *regs, unsigned long new_ip,
+                                              unsigned long new_sp);
 
 /* Forward declaration, a strange C thing */
 struct task_struct;
index 30d0843..3e1d86e 100644 (file)
@@ -160,6 +160,29 @@ pid_t kernel_thread(int (*fn) (void *), void *arg, unsigned long flags)
 }
 EXPORT_SYMBOL(kernel_thread);
 
+/*
+ * Do necessary setup to start up a newly executed thread.
+ *
+ * pass the data segment into user programs if it exists,
+ * it can't hurt anything as far as I can tell
+ */
+void start_thread(struct pt_regs *regs, unsigned long new_ip, unsigned long new_sp)
+{
+       set_fs(USER_DS);
+       regs->pc = new_ip;
+       if (current->mm)
+               regs->p5 = current->mm->start_data;
+#ifdef CONFIG_SMP
+       task_thread_info(current)->l1_task_info.stack_start =
+               (void *)current->mm->context.stack_start;
+       task_thread_info(current)->l1_task_info.lowest_sp = (void *)new_sp;
+       memcpy(L1_SCRATCH_TASK_INFO, &task_thread_info(current)->l1_task_info,
+              sizeof(*L1_SCRATCH_TASK_INFO));
+#endif
+       wrusp(new_sp);
+}
+EXPORT_SYMBOL_GPL(start_thread);
+
 void flush_thread(void)
 {
 }