提交 464662b9 编写于 作者: L Linus Torvalds

Merge branch 'next' of git://git.monstr.eu/linux-2.6-microblaze

Pull arch/microblaze fixes from Michal Simek.

* 'next' of git://git.monstr.eu/linux-2.6-microblaze:
  microblaze: Fix ret_from_fork declaration
  microblaze: Do not use tlb_skip in early_printk
  microblaze: Add missing headers caused by disintegration asm/system.h
  microblaze: Fix stack usage in PAGE_SIZE copy_tofrom_user
  microblaze: Fix tlb_skip variable on noMMU system
  microblaze: Fix __futex_atomic_op macro register usage
#ifndef _ASM_MICROBLAZE_CMPXCHG_H #ifndef _ASM_MICROBLAZE_CMPXCHG_H
#define _ASM_MICROBLAZE_CMPXCHG_H #define _ASM_MICROBLAZE_CMPXCHG_H
#include <linux/irqflags.h>
void __bad_xchg(volatile void *ptr, int size); void __bad_xchg(volatile void *ptr, int size);
static inline unsigned long __xchg(unsigned long x, volatile void *ptr, static inline unsigned long __xchg(unsigned long x, volatile void *ptr,
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
.word 1b,4b,2b,4b; \ .word 1b,4b,2b,4b; \
.previous;" \ .previous;" \
: "=&r" (oldval), "=&r" (ret) \ : "=&r" (oldval), "=&r" (ret) \
: "b" (uaddr), "i" (-EFAULT), "r" (oparg) \ : "r" (uaddr), "i" (-EFAULT), "r" (oparg) \
); \ ); \
}) })
......
...@@ -31,6 +31,8 @@ extern const struct seq_operations cpuinfo_op; ...@@ -31,6 +31,8 @@ extern const struct seq_operations cpuinfo_op;
/* Do necessary setup to start up a newly executed thread. */ /* Do necessary setup to start up a newly executed thread. */
void start_thread(struct pt_regs *regs, unsigned long pc, unsigned long usp); void start_thread(struct pt_regs *regs, unsigned long pc, unsigned long usp);
extern void ret_from_fork(void);
# endif /* __ASSEMBLY__ */ # endif /* __ASSEMBLY__ */
# ifndef CONFIG_MMU # ifndef CONFIG_MMU
...@@ -143,8 +145,6 @@ static inline void exit_thread(void) ...@@ -143,8 +145,6 @@ static inline void exit_thread(void)
unsigned long get_wchan(struct task_struct *p); unsigned long get_wchan(struct task_struct *p);
extern void ret_from_fork(void);
/* The size allocated for kernel stacks. This _must_ be a power of two! */ /* The size allocated for kernel stacks. This _must_ be a power of two! */
# define KERNEL_STACK_SIZE 0x2000 # define KERNEL_STACK_SIZE 0x2000
......
...@@ -176,6 +176,7 @@ void __init remap_early_printk(void) ...@@ -176,6 +176,7 @@ void __init remap_early_printk(void)
base_addr = (u32) ioremap(base_addr, PAGE_SIZE); base_addr = (u32) ioremap(base_addr, PAGE_SIZE);
printk(KERN_CONT "0x%x\n", base_addr); printk(KERN_CONT "0x%x\n", base_addr);
#ifdef CONFIG_MMU
/* /*
* Early console is on the top of skipped TLB entries * Early console is on the top of skipped TLB entries
* decrease tlb_skip size ensure that hardcoded TLB entry will be * decrease tlb_skip size ensure that hardcoded TLB entry will be
...@@ -189,6 +190,7 @@ void __init remap_early_printk(void) ...@@ -189,6 +190,7 @@ void __init remap_early_printk(void)
* cmp rX, orig_base_addr * cmp rX, orig_base_addr
*/ */
tlb_skip -= 1; tlb_skip -= 1;
#endif
} }
void __init disable_early_printk(void) void __init disable_early_printk(void)
......
...@@ -206,6 +206,7 @@ static int microblaze_debugfs_init(void) ...@@ -206,6 +206,7 @@ static int microblaze_debugfs_init(void)
} }
arch_initcall(microblaze_debugfs_init); arch_initcall(microblaze_debugfs_init);
# ifdef CONFIG_MMU
static int __init debugfs_tlb(void) static int __init debugfs_tlb(void)
{ {
struct dentry *d; struct dentry *d;
...@@ -218,6 +219,7 @@ static int __init debugfs_tlb(void) ...@@ -218,6 +219,7 @@ static int __init debugfs_tlb(void)
return -ENOMEM; return -ENOMEM;
} }
device_initcall(debugfs_tlb); device_initcall(debugfs_tlb);
# endif
#endif #endif
static int dflt_bus_notify(struct notifier_block *nb, static int dflt_bus_notify(struct notifier_block *nb,
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include <asm/sections.h> #include <asm/sections.h>
#include <asm/exceptions.h> #include <asm/exceptions.h>
#include <asm/unwind.h> #include <asm/unwind.h>
#include <asm/switch_to.h>
struct stack_trace; struct stack_trace;
......
...@@ -122,22 +122,22 @@ __strnlen_user: ...@@ -122,22 +122,22 @@ __strnlen_user:
15: swi r24, r5, 0x0018 + offset; \ 15: swi r24, r5, 0x0018 + offset; \
16: swi r25, r5, 0x001C + offset; \ 16: swi r25, r5, 0x001C + offset; \
.section __ex_table,"a"; \ .section __ex_table,"a"; \
.word 1b, 0f; \ .word 1b, 33f; \
.word 2b, 0f; \ .word 2b, 33f; \
.word 3b, 0f; \ .word 3b, 33f; \
.word 4b, 0f; \ .word 4b, 33f; \
.word 5b, 0f; \ .word 5b, 33f; \
.word 6b, 0f; \ .word 6b, 33f; \
.word 7b, 0f; \ .word 7b, 33f; \
.word 8b, 0f; \ .word 8b, 33f; \
.word 9b, 0f; \ .word 9b, 33f; \
.word 10b, 0f; \ .word 10b, 33f; \
.word 11b, 0f; \ .word 11b, 33f; \
.word 12b, 0f; \ .word 12b, 33f; \
.word 13b, 0f; \ .word 13b, 33f; \
.word 14b, 0f; \ .word 14b, 33f; \
.word 15b, 0f; \ .word 15b, 33f; \
.word 16b, 0f; \ .word 16b, 33f; \
.text .text
#define COPY_80(offset) \ #define COPY_80(offset) \
...@@ -190,14 +190,17 @@ w2: sw r4, r5, r3 ...@@ -190,14 +190,17 @@ w2: sw r4, r5, r3
.align 4 /* Alignment is important to keep icache happy */ .align 4 /* Alignment is important to keep icache happy */
page: /* Create room on stack and save registers for storign values */ page: /* Create room on stack and save registers for storign values */
addik r1, r1, -32 addik r1, r1, -40
swi r19, r1, 4 swi r5, r1, 0
swi r20, r1, 8 swi r6, r1, 4
swi r21, r1, 12 swi r7, r1, 8
swi r22, r1, 16 swi r19, r1, 12
swi r23, r1, 20 swi r20, r1, 16
swi r24, r1, 24 swi r21, r1, 20
swi r25, r1, 28 swi r22, r1, 24
swi r23, r1, 28
swi r24, r1, 32
swi r25, r1, 36
loop: /* r4, r19, r20, r21, r22, r23, r24, r25 are used for storing values */ loop: /* r4, r19, r20, r21, r22, r23, r24, r25 are used for storing values */
/* Loop unrolling to get performance boost */ /* Loop unrolling to get performance boost */
COPY_80(0x000); COPY_80(0x000);
...@@ -209,17 +212,40 @@ loop: /* r4, r19, r20, r21, r22, r23, r24, r25 are used for storing values */ ...@@ -209,17 +212,40 @@ loop: /* r4, r19, r20, r21, r22, r23, r24, r25 are used for storing values */
addik r7, r7, -0x200 addik r7, r7, -0x200
bneid r7, loop bneid r7, loop
addik r5, r5, 0x200 addik r5, r5, 0x200
/* Restore register content */ /* Restore register content */
lwi r19, r1, 4 lwi r5, r1, 0
lwi r20, r1, 8 lwi r6, r1, 4
lwi r21, r1, 12 lwi r7, r1, 8
lwi r22, r1, 16 lwi r19, r1, 12
lwi r23, r1, 20 lwi r20, r1, 16
lwi r24, r1, 24 lwi r21, r1, 20
lwi r25, r1, 28 lwi r22, r1, 24
addik r1, r1, 32 lwi r23, r1, 28
lwi r24, r1, 32
lwi r25, r1, 36
addik r1, r1, 40
/* return back */ /* return back */
addik r3, r0, 0
rtsd r15, 8
nop
/* Fault case - return temp count */
33:
addik r3, r7, 0 addik r3, r7, 0
/* Restore register content */
lwi r5, r1, 0
lwi r6, r1, 4
lwi r7, r1, 8
lwi r19, r1, 12
lwi r20, r1, 16
lwi r21, r1, 20
lwi r22, r1, 24
lwi r23, r1, 28
lwi r24, r1, 32
lwi r25, r1, 36
addik r1, r1, 40
/* return back */
rtsd r15, 8 rtsd r15, 8
nop nop
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册