Loading arch/blackfin/include/asm/hardirq.h +3 −39 Original line number Diff line number Diff line #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 arch/blackfin/include/asm/irq.h +1 −4 Original line number Diff line number Diff line Loading @@ -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_ */ arch/blackfin/include/asm/processor.h +3 −32 Original line number Diff line number Diff line Loading @@ -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) { Loading Loading @@ -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; Loading arch/blackfin/kernel/process.c +23 −0 Original line number Diff line number Diff line Loading @@ -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) { } Loading Loading
arch/blackfin/include/asm/hardirq.h +3 −39 Original line number Diff line number Diff line #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
arch/blackfin/include/asm/irq.h +1 −4 Original line number Diff line number Diff line Loading @@ -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_ */
arch/blackfin/include/asm/processor.h +3 −32 Original line number Diff line number Diff line Loading @@ -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) { Loading Loading @@ -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; Loading
arch/blackfin/kernel/process.c +23 −0 Original line number Diff line number Diff line Loading @@ -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) { } Loading