mirror of https://gitee.com/openkylin/linux.git
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
This commit is contained in:
commit
464662b916
|
@ -1,6 +1,8 @@
|
|||
#ifndef _ASM_MICROBLAZE_CMPXCHG_H
|
||||
#define _ASM_MICROBLAZE_CMPXCHG_H
|
||||
|
||||
#include <linux/irqflags.h>
|
||||
|
||||
void __bad_xchg(volatile void *ptr, int size);
|
||||
|
||||
static inline unsigned long __xchg(unsigned long x, volatile void *ptr,
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
.word 1b,4b,2b,4b; \
|
||||
.previous;" \
|
||||
: "=&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;
|
|||
/* Do necessary setup to start up a newly executed thread. */
|
||||
void start_thread(struct pt_regs *regs, unsigned long pc, unsigned long usp);
|
||||
|
||||
extern void ret_from_fork(void);
|
||||
|
||||
# endif /* __ASSEMBLY__ */
|
||||
|
||||
# ifndef CONFIG_MMU
|
||||
|
@ -143,8 +145,6 @@ static inline void exit_thread(void)
|
|||
|
||||
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! */
|
||||
# define KERNEL_STACK_SIZE 0x2000
|
||||
|
||||
|
|
|
@ -176,6 +176,7 @@ void __init remap_early_printk(void)
|
|||
base_addr = (u32) ioremap(base_addr, PAGE_SIZE);
|
||||
printk(KERN_CONT "0x%x\n", base_addr);
|
||||
|
||||
#ifdef CONFIG_MMU
|
||||
/*
|
||||
* Early console is on the top of skipped TLB entries
|
||||
* decrease tlb_skip size ensure that hardcoded TLB entry will be
|
||||
|
@ -189,6 +190,7 @@ void __init remap_early_printk(void)
|
|||
* cmp rX, orig_base_addr
|
||||
*/
|
||||
tlb_skip -= 1;
|
||||
#endif
|
||||
}
|
||||
|
||||
void __init disable_early_printk(void)
|
||||
|
|
|
@ -206,6 +206,7 @@ static int microblaze_debugfs_init(void)
|
|||
}
|
||||
arch_initcall(microblaze_debugfs_init);
|
||||
|
||||
# ifdef CONFIG_MMU
|
||||
static int __init debugfs_tlb(void)
|
||||
{
|
||||
struct dentry *d;
|
||||
|
@ -218,6 +219,7 @@ static int __init debugfs_tlb(void)
|
|||
return -ENOMEM;
|
||||
}
|
||||
device_initcall(debugfs_tlb);
|
||||
# endif
|
||||
#endif
|
||||
|
||||
static int dflt_bus_notify(struct notifier_block *nb,
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#include <asm/sections.h>
|
||||
#include <asm/exceptions.h>
|
||||
#include <asm/unwind.h>
|
||||
#include <asm/switch_to.h>
|
||||
|
||||
struct stack_trace;
|
||||
|
||||
|
|
|
@ -122,22 +122,22 @@ __strnlen_user:
|
|||
15: swi r24, r5, 0x0018 + offset; \
|
||||
16: swi r25, r5, 0x001C + offset; \
|
||||
.section __ex_table,"a"; \
|
||||
.word 1b, 0f; \
|
||||
.word 2b, 0f; \
|
||||
.word 3b, 0f; \
|
||||
.word 4b, 0f; \
|
||||
.word 5b, 0f; \
|
||||
.word 6b, 0f; \
|
||||
.word 7b, 0f; \
|
||||
.word 8b, 0f; \
|
||||
.word 9b, 0f; \
|
||||
.word 10b, 0f; \
|
||||
.word 11b, 0f; \
|
||||
.word 12b, 0f; \
|
||||
.word 13b, 0f; \
|
||||
.word 14b, 0f; \
|
||||
.word 15b, 0f; \
|
||||
.word 16b, 0f; \
|
||||
.word 1b, 33f; \
|
||||
.word 2b, 33f; \
|
||||
.word 3b, 33f; \
|
||||
.word 4b, 33f; \
|
||||
.word 5b, 33f; \
|
||||
.word 6b, 33f; \
|
||||
.word 7b, 33f; \
|
||||
.word 8b, 33f; \
|
||||
.word 9b, 33f; \
|
||||
.word 10b, 33f; \
|
||||
.word 11b, 33f; \
|
||||
.word 12b, 33f; \
|
||||
.word 13b, 33f; \
|
||||
.word 14b, 33f; \
|
||||
.word 15b, 33f; \
|
||||
.word 16b, 33f; \
|
||||
.text
|
||||
|
||||
#define COPY_80(offset) \
|
||||
|
@ -190,14 +190,17 @@ w2: sw r4, r5, r3
|
|||
|
||||
.align 4 /* Alignment is important to keep icache happy */
|
||||
page: /* Create room on stack and save registers for storign values */
|
||||
addik r1, r1, -32
|
||||
swi r19, r1, 4
|
||||
swi r20, r1, 8
|
||||
swi r21, r1, 12
|
||||
swi r22, r1, 16
|
||||
swi r23, r1, 20
|
||||
swi r24, r1, 24
|
||||
swi r25, r1, 28
|
||||
addik r1, r1, -40
|
||||
swi r5, r1, 0
|
||||
swi r6, r1, 4
|
||||
swi r7, r1, 8
|
||||
swi r19, r1, 12
|
||||
swi r20, r1, 16
|
||||
swi r21, r1, 20
|
||||
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 unrolling to get performance boost */
|
||||
COPY_80(0x000);
|
||||
|
@ -205,21 +208,44 @@ loop: /* r4, r19, r20, r21, r22, r23, r24, r25 are used for storing values */
|
|||
COPY_80(0x100);
|
||||
COPY_80(0x180);
|
||||
/* copy loop */
|
||||
addik r6, r6, 0x200
|
||||
addik r7, r7, -0x200
|
||||
bneid r7, loop
|
||||
addik r5, r5, 0x200
|
||||
addik r6, r6, 0x200
|
||||
addik r7, r7, -0x200
|
||||
bneid r7, loop
|
||||
addik r5, r5, 0x200
|
||||
|
||||
/* Restore register content */
|
||||
lwi r19, r1, 4
|
||||
lwi r20, r1, 8
|
||||
lwi r21, r1, 12
|
||||
lwi r22, r1, 16
|
||||
lwi r23, r1, 20
|
||||
lwi r24, r1, 24
|
||||
lwi r25, r1, 28
|
||||
addik r1, r1, 32
|
||||
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 */
|
||||
addik r3, r0, 0
|
||||
rtsd r15, 8
|
||||
nop
|
||||
|
||||
/* Fault case - return temp count */
|
||||
33:
|
||||
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
|
||||
nop
|
||||
|
||||
|
|
Loading…
Reference in New Issue