Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
fe00f943
K
Kernel
项目概览
openeuler
/
Kernel
1 年多 前同步成功
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
fe00f943
编写于
3月 01, 2005
作者:
R
Ralf Baechle
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Sparseify MIPS.
Signed-off-by:
N
Ralf Baechle
<
ralf@linux-mips.org
>
上级
14f18b7f
变更
21
展开全部
隐藏空白更改
内联
并排
Showing
21 changed file
with
607 addition
and
585 deletion
+607
-585
arch/mips/Makefile
arch/mips/Makefile
+15
-0
arch/mips/kernel/i8259.c
arch/mips/kernel/i8259.c
+1
-1
arch/mips/kernel/irixelf.c
arch/mips/kernel/irixelf.c
+7
-7
arch/mips/kernel/irixinv.c
arch/mips/kernel/irixinv.c
+4
-3
arch/mips/kernel/irixsig.c
arch/mips/kernel/irixsig.c
+215
-193
arch/mips/kernel/process.c
arch/mips/kernel/process.c
+0
-8
arch/mips/kernel/ptrace.c
arch/mips/kernel/ptrace.c
+2
-2
arch/mips/kernel/signal.c
arch/mips/kernel/signal.c
+8
-6
arch/mips/kernel/sysirix.c
arch/mips/kernel/sysirix.c
+235
-244
arch/mips/kernel/traps.c
arch/mips/kernel/traps.c
+12
-9
arch/mips/kernel/unaligned.c
arch/mips/kernel/unaligned.c
+5
-5
arch/mips/lib/csum_partial_copy.c
arch/mips/lib/csum_partial_copy.c
+1
-1
arch/mips/mm/c-r4k.c
arch/mips/mm/c-r4k.c
+4
-3
arch/mips/mm/cache.c
arch/mips/mm/cache.c
+5
-4
arch/mips/mm/fault.c
arch/mips/mm/fault.c
+2
-2
include/asm-mips/cacheflush.h
include/asm-mips/cacheflush.h
+2
-1
include/asm-mips/checksum.h
include/asm-mips/checksum.h
+3
-2
include/asm-mips/io.h
include/asm-mips/io.h
+14
-4
include/asm-mips/irq.h
include/asm-mips/irq.h
+1
-3
include/asm-mips/sibyte/sb1250.h
include/asm-mips/sibyte/sb1250.h
+1
-1
include/asm-mips/uaccess.h
include/asm-mips/uaccess.h
+70
-86
未找到文件。
arch/mips/Makefile
浏览文件 @
fe00f943
...
...
@@ -52,6 +52,21 @@ ifdef CONFIG_CROSSCOMPILE
CROSS_COMPILE
:=
$
(
tool-prefix
)
endif
CHECKFLAGS-y
+=
-D__linux__
-D__mips__
\
-D_ABIO32
=
1
\
-D_ABIN32
=
2
\
-D_ABI64
=
3
CHECKFLAGS-$(CONFIG_32BIT)
+=
-D_MIPS_SIM
=
_ABIO32
\
-D_MIPS_SZLONG
=
32
\
-D__PTRDIFF_TYPE__
=
int
CHECKFLAGS-$(CONFIG_64BIT)
+=
-m64
-D_MIPS_SIM
=
_ABI64
\
-D_MIPS_SZLONG
=
64
\
-D__PTRDIFF_TYPE__
=
"long int"
CHECKFLAGS-$(CONFIG_CPU_BIG_ENDIAN)
+=
-D__MIPSEB__
CHECKFLAGS-$(CONFIG_CPU_LITTLE_ENDIAN)
+=
-D__MIPSEL__
CHECKFLAGS
=
$
(
CHECKFLAGS-y
)
ifdef
CONFIG_BUILD_ELF64
gas-abi
=
64
ld-emul
=
$
(
64bit-emul
)
...
...
arch/mips/kernel/i8259.c
浏览文件 @
fe00f943
...
...
@@ -321,7 +321,7 @@ void __init init_i8259_irqs (void)
for
(
i
=
0
;
i
<
16
;
i
++
)
{
irq_desc
[
i
].
status
=
IRQ_DISABLED
;
irq_desc
[
i
].
action
=
0
;
irq_desc
[
i
].
action
=
NULL
;
irq_desc
[
i
].
depth
=
1
;
irq_desc
[
i
].
handler
=
&
i8259A_irq_type
;
}
...
...
arch/mips/kernel/irixelf.c
浏览文件 @
fe00f943
...
...
@@ -147,7 +147,7 @@ static void padzero(unsigned long elf_bss)
nbyte
=
elf_bss
&
(
PAGE_SIZE
-
1
);
if
(
nbyte
)
{
nbyte
=
PAGE_SIZE
-
nbyte
;
clear_user
((
void
*
)
elf_bss
,
nbyte
);
clear_user
((
void
__user
*
)
elf_bss
,
nbyte
);
}
}
...
...
@@ -878,10 +878,10 @@ static int load_irix_library(struct file *file)
* phdrs there are in the USER_PHDRP array. We return the vaddr the
* first phdr was successfully mapped to.
*/
unsigned
long
irix_mapelf
(
int
fd
,
struct
elf_phdr
*
user_phdrp
,
int
cnt
)
unsigned
long
irix_mapelf
(
int
fd
,
struct
elf_phdr
__user
*
user_phdrp
,
int
cnt
)
{
unsigned
long
type
,
vaddr
,
filesz
,
offset
,
flags
;
struct
elf_phdr
*
hp
;
struct
elf_phdr
__user
*
hp
;
struct
file
*
filp
;
int
i
,
retval
;
...
...
@@ -968,9 +968,9 @@ unsigned long irix_mapelf(int fd, struct elf_phdr *user_phdrp, int cnt)
/* These are the only things you should do on a core-file: use only these
* functions to write out all the necessary info.
*/
static
int
dump_write
(
struct
file
*
file
,
const
void
*
addr
,
int
nr
)
static
int
dump_write
(
struct
file
*
file
,
const
void
__user
*
addr
,
int
nr
)
{
return
file
->
f_op
->
write
(
file
,
(
const
char
*
)
addr
,
nr
,
&
file
->
f_pos
)
==
nr
;
return
file
->
f_op
->
write
(
file
,
(
const
char
__user
*
)
addr
,
nr
,
&
file
->
f_pos
)
==
nr
;
}
static
int
dump_seek
(
struct
file
*
file
,
off_t
off
)
...
...
@@ -1204,7 +1204,7 @@ static int irix_core_dump(long signr, struct pt_regs * regs, struct file *file)
len
=
current
->
mm
->
arg_end
-
current
->
mm
->
arg_start
;
len
=
len
>=
ELF_PRARGSZ
?
ELF_PRARGSZ
:
len
;
(
void
*
)
copy_from_user
(
&
psinfo
.
pr_psargs
,
(
const
char
*
)
current
->
mm
->
arg_start
,
len
);
(
const
char
__user
*
)
current
->
mm
->
arg_start
,
len
);
for
(
i
=
0
;
i
<
len
;
i
++
)
if
(
psinfo
.
pr_psargs
[
i
]
==
0
)
psinfo
.
pr_psargs
[
i
]
=
' '
;
...
...
@@ -1301,7 +1301,7 @@ static int irix_core_dump(long signr, struct pt_regs * regs, struct file *file)
#ifdef DEBUG
printk
(
"elf_core_dump: writing %08lx %lx
\n
"
,
addr
,
len
);
#endif
DUMP_WRITE
((
void
*
)
addr
,
len
);
DUMP_WRITE
((
void
__user
*
)
addr
,
len
);
}
if
((
off_t
)
file
->
f_pos
!=
offset
)
{
...
...
arch/mips/kernel/irixinv.c
浏览文件 @
fe00f943
...
...
@@ -30,10 +30,10 @@ void add_to_inventory (int class, int type, int controller, int unit, int state)
inventory_items
++
;
}
int
dump_inventory_to_user
(
void
*
userbuf
,
int
size
)
int
dump_inventory_to_user
(
void
__user
*
userbuf
,
int
size
)
{
inventory_t
*
inv
=
&
inventory
[
0
];
inventory_t
*
user
=
userbuf
;
inventory_t
__user
*
user
=
userbuf
;
int
v
;
if
(
!
access_ok
(
VERIFY_WRITE
,
userbuf
,
size
))
...
...
@@ -41,7 +41,8 @@ int dump_inventory_to_user (void *userbuf, int size)
for
(
v
=
0
;
v
<
inventory_items
;
v
++
){
inv
=
&
inventory
[
v
];
copy_to_user
(
user
,
inv
,
sizeof
(
inventory_t
));
if
(
copy_to_user
(
user
,
inv
,
sizeof
(
inventory_t
)))
return
-
EFAULT
;
user
++
;
}
return
inventory_items
*
sizeof
(
inventory_t
);
...
...
arch/mips/kernel/irixsig.c
浏览文件 @
fe00f943
此差异已折叠。
点击以展开。
arch/mips/kernel/process.c
浏览文件 @
fe00f943
...
...
@@ -38,14 +38,6 @@
#include <asm/isadep.h>
#include <asm/inst.h>
/*
* We use this if we don't have any better idle routine..
* (This to kill: kernel/platform.c.
*/
void
default_idle
(
void
)
{
}
/*
* The idle thread. There's no useful work to be done, so just try to conserve
* power and have a low exit latency (ie sit in a loop waiting for somebody to
...
...
arch/mips/kernel/ptrace.c
浏览文件 @
fe00f943
...
...
@@ -103,7 +103,7 @@ asmlinkage int sys_ptrace(long request, long pid, long addr, long data)
ret
=
-
EIO
;
if
(
copied
!=
sizeof
(
tmp
))
break
;
ret
=
put_user
(
tmp
,(
unsigned
long
*
)
data
);
ret
=
put_user
(
tmp
,(
unsigned
long
__user
*
)
data
);
break
;
}
...
...
@@ -180,7 +180,7 @@ asmlinkage int sys_ptrace(long request, long pid, long addr, long data)
ret
=
-
EIO
;
goto
out_tsk
;
}
ret
=
put_user
(
tmp
,
(
unsigned
long
*
)
data
);
ret
=
put_user
(
tmp
,
(
unsigned
long
__user
*
)
data
);
break
;
}
...
...
arch/mips/kernel/signal.c
浏览文件 @
fe00f943
...
...
@@ -47,9 +47,10 @@ save_static_function(sys_sigsuspend);
__attribute_used__
noinline
static
int
_sys_sigsuspend
(
nabi_no_regargs
struct
pt_regs
regs
)
{
sigset_t
*
uset
,
saveset
,
newset
;
sigset_t
saveset
,
newset
;
sigset_t
__user
*
uset
;
uset
=
(
sigset_t
*
)
regs
.
regs
[
4
];
uset
=
(
sigset_t
__user
*
)
regs
.
regs
[
4
];
if
(
copy_from_user
(
&
newset
,
uset
,
sizeof
(
sigset_t
)))
return
-
EFAULT
;
sigdelsetmask
(
&
newset
,
~
_BLOCKABLE
);
...
...
@@ -75,7 +76,8 @@ save_static_function(sys_rt_sigsuspend);
__attribute_used__
noinline
static
int
_sys_rt_sigsuspend
(
nabi_no_regargs
struct
pt_regs
regs
)
{
sigset_t
*
unewset
,
saveset
,
newset
;
sigset_t
saveset
,
newset
;
sigset_t
__user
*
unewset
;
size_t
sigsetsize
;
/* XXX Don't preclude handling different sized sigset_t's. */
...
...
@@ -83,7 +85,7 @@ _sys_rt_sigsuspend(nabi_no_regargs struct pt_regs regs)
if
(
sigsetsize
!=
sizeof
(
sigset_t
))
return
-
EINVAL
;
unewset
=
(
sigset_t
*
)
regs
.
regs
[
4
];
unewset
=
(
sigset_t
__user
*
)
regs
.
regs
[
4
];
if
(
copy_from_user
(
&
newset
,
unewset
,
sizeof
(
newset
)))
return
-
EFAULT
;
sigdelsetmask
(
&
newset
,
~
_BLOCKABLE
);
...
...
@@ -147,8 +149,8 @@ asmlinkage int sys_sigaction(int sig, const struct sigaction *act,
asmlinkage
int
sys_sigaltstack
(
nabi_no_regargs
struct
pt_regs
regs
)
{
const
stack_t
*
uss
=
(
const
stack_t
*
)
regs
.
regs
[
4
];
stack_t
*
uoss
=
(
stack_t
*
)
regs
.
regs
[
5
];
const
stack_t
__user
*
uss
=
(
const
stack_t
__user
*
)
regs
.
regs
[
4
];
stack_t
__user
*
uoss
=
(
stack_t
__user
*
)
regs
.
regs
[
5
];
unsigned
long
usp
=
regs
.
regs
[
29
];
return
do_sigaltstack
(
uss
,
uoss
,
usp
);
...
...
arch/mips/kernel/sysirix.c
浏览文件 @
fe00f943
此差异已折叠。
点击以展开。
arch/mips/kernel/traps.c
浏览文件 @
fe00f943
...
...
@@ -339,9 +339,9 @@ asmlinkage void do_be(struct pt_regs *regs)
static
inline
int
get_insn_opcode
(
struct
pt_regs
*
regs
,
unsigned
int
*
opcode
)
{
unsigned
int
*
epc
;
unsigned
int
__user
*
epc
;
epc
=
(
unsigned
int
*
)
regs
->
cp0_epc
+
epc
=
(
unsigned
int
__user
*
)
regs
->
cp0_epc
+
((
regs
->
cp0_cause
&
CAUSEF_BD
)
!=
0
);
if
(
!
get_user
(
*
opcode
,
epc
))
return
0
;
...
...
@@ -371,7 +371,7 @@ static struct task_struct *ll_task = NULL;
static
inline
void
simulate_ll
(
struct
pt_regs
*
regs
,
unsigned
int
opcode
)
{
unsigned
long
value
,
*
vaddr
;
unsigned
long
value
,
__user
*
vaddr
;
long
offset
;
int
signal
=
0
;
...
...
@@ -385,7 +385,8 @@ static inline void simulate_ll(struct pt_regs *regs, unsigned int opcode)
offset
<<=
16
;
offset
>>=
16
;
vaddr
=
(
unsigned
long
*
)((
long
)(
regs
->
regs
[(
opcode
&
BASE
)
>>
21
])
+
offset
);
vaddr
=
(
unsigned
long
__user
*
)
((
unsigned
long
)(
regs
->
regs
[(
opcode
&
BASE
)
>>
21
])
+
offset
);
if
((
unsigned
long
)
vaddr
&
3
)
{
signal
=
SIGBUS
;
...
...
@@ -418,7 +419,8 @@ static inline void simulate_ll(struct pt_regs *regs, unsigned int opcode)
static
inline
void
simulate_sc
(
struct
pt_regs
*
regs
,
unsigned
int
opcode
)
{
unsigned
long
*
vaddr
,
reg
;
unsigned
long
__user
*
vaddr
;
unsigned
long
reg
;
long
offset
;
int
signal
=
0
;
...
...
@@ -432,7 +434,8 @@ static inline void simulate_sc(struct pt_regs *regs, unsigned int opcode)
offset
<<=
16
;
offset
>>=
16
;
vaddr
=
(
unsigned
long
*
)((
long
)(
regs
->
regs
[(
opcode
&
BASE
)
>>
21
])
+
offset
);
vaddr
=
(
unsigned
long
__user
*
)
((
unsigned
long
)(
regs
->
regs
[(
opcode
&
BASE
)
>>
21
])
+
offset
);
reg
=
(
opcode
&
RT
)
>>
16
;
if
((
unsigned
long
)
vaddr
&
3
)
{
...
...
@@ -498,7 +501,7 @@ asmlinkage void do_ov(struct pt_regs *regs)
info
.
si_code
=
FPE_INTOVF
;
info
.
si_signo
=
SIGFPE
;
info
.
si_errno
=
0
;
info
.
si_addr
=
(
void
*
)
regs
->
cp0_epc
;
info
.
si_addr
=
(
void
__user
*
)
regs
->
cp0_epc
;
force_sig_info
(
SIGFPE
,
&
info
,
current
);
}
...
...
@@ -584,7 +587,7 @@ asmlinkage void do_bp(struct pt_regs *regs)
info
.
si_code
=
FPE_INTOVF
;
info
.
si_signo
=
SIGFPE
;
info
.
si_errno
=
0
;
info
.
si_addr
=
(
void
*
)
regs
->
cp0_epc
;
info
.
si_addr
=
(
void
__user
*
)
regs
->
cp0_epc
;
force_sig_info
(
SIGFPE
,
&
info
,
current
);
break
;
default:
...
...
@@ -621,7 +624,7 @@ asmlinkage void do_tr(struct pt_regs *regs)
info
.
si_code
=
FPE_INTOVF
;
info
.
si_signo
=
SIGFPE
;
info
.
si_errno
=
0
;
info
.
si_addr
=
(
void
*
)
regs
->
cp0_epc
;
info
.
si_addr
=
(
void
__user
*
)
regs
->
cp0_epc
;
force_sig_info
(
SIGFPE
,
&
info
,
current
);
break
;
default:
...
...
arch/mips/kernel/unaligned.c
浏览文件 @
fe00f943
...
...
@@ -94,7 +94,7 @@ unsigned long unaligned_instructions;
#endif
static
inline
int
emulate_load_store_insn
(
struct
pt_regs
*
regs
,
void
*
addr
,
unsigned
long
pc
,
void
__user
*
addr
,
unsigned
int
__user
*
pc
,
unsigned
long
**
regptr
,
unsigned
long
*
newvalue
)
{
union
mips_instruction
insn
;
...
...
@@ -107,7 +107,7 @@ static inline int emulate_load_store_insn(struct pt_regs *regs,
/*
* This load never faults.
*/
__get_user
(
insn
.
word
,
(
unsigned
int
*
)
pc
);
__get_user
(
insn
.
word
,
pc
);
switch
(
insn
.
i_format
.
opcode
)
{
/*
...
...
@@ -494,8 +494,8 @@ asmlinkage void do_ade(struct pt_regs *regs)
{
unsigned
long
*
regptr
,
newval
;
extern
int
do_dsemulret
(
struct
pt_regs
*
);
unsigned
int
__user
*
pc
;
mm_segment_t
seg
;
unsigned
long
pc
;
/*
* Address errors may be deliberately induced by the FPU emulator to
...
...
@@ -515,7 +515,7 @@ asmlinkage void do_ade(struct pt_regs *regs)
if
((
regs
->
cp0_badvaddr
==
regs
->
cp0_epc
)
||
(
regs
->
cp0_epc
&
0x1
))
goto
sigbus
;
pc
=
exception_epc
(
regs
);
pc
=
(
unsigned
int
__user
*
)
exception_epc
(
regs
);
if
((
current
->
thread
.
mflags
&
MF_FIXADE
)
==
0
)
goto
sigbus
;
...
...
@@ -526,7 +526,7 @@ asmlinkage void do_ade(struct pt_regs *regs)
seg
=
get_fs
();
if
(
!
user_mode
(
regs
))
set_fs
(
KERNEL_DS
);
if
(
!
emulate_load_store_insn
(
regs
,
(
void
*
)
regs
->
cp0_badvaddr
,
pc
,
if
(
!
emulate_load_store_insn
(
regs
,
(
void
__user
*
)
regs
->
cp0_badvaddr
,
pc
,
&
regptr
,
&
newval
))
{
compute_return_epc
(
regs
);
/*
...
...
arch/mips/lib/csum_partial_copy.c
浏览文件 @
fe00f943
...
...
@@ -33,7 +33,7 @@ unsigned int csum_partial_copy_nocheck(const unsigned char *src,
* Copy from userspace and compute checksum. If we catch an exception
* then zero the rest of the buffer.
*/
unsigned
int
csum_partial_copy_from_user
(
const
unsigned
char
*
src
,
unsigned
int
csum_partial_copy_from_user
(
const
unsigned
char
__user
*
src
,
unsigned
char
*
dst
,
int
len
,
unsigned
int
sum
,
int
*
err_ptr
)
{
int
missing
;
...
...
arch/mips/mm/c-r4k.c
浏览文件 @
fe00f943
...
...
@@ -456,8 +456,8 @@ static void r4k_flush_data_cache_page(unsigned long addr)
}
struct
flush_icache_range_args
{
unsigned
long
start
;
unsigned
long
end
;
unsigned
long
__user
start
;
unsigned
long
__user
end
;
};
static
inline
void
local_r4k_flush_icache_range
(
void
*
args
)
...
...
@@ -519,7 +519,8 @@ static inline void local_r4k_flush_icache_range(void *args)
}
}
static
void
r4k_flush_icache_range
(
unsigned
long
start
,
unsigned
long
end
)
static
void
r4k_flush_icache_range
(
unsigned
long
__user
start
,
unsigned
long
__user
end
)
{
struct
flush_icache_range_args
args
;
...
...
arch/mips/mm/cache.c
浏览文件 @
fe00f943
...
...
@@ -24,7 +24,8 @@ void (*flush_cache_mm)(struct mm_struct *mm);
void
(
*
flush_cache_range
)(
struct
vm_area_struct
*
vma
,
unsigned
long
start
,
unsigned
long
end
);
void
(
*
flush_cache_page
)(
struct
vm_area_struct
*
vma
,
unsigned
long
page
,
unsigned
long
pfn
);
void
(
*
flush_icache_range
)(
unsigned
long
start
,
unsigned
long
end
);
void
(
*
flush_icache_range
)(
unsigned
long
__user
start
,
unsigned
long
__user
end
);
void
(
*
flush_icache_page
)(
struct
vm_area_struct
*
vma
,
struct
page
*
page
);
/* MIPS specific cache operations */
...
...
@@ -49,10 +50,10 @@ EXPORT_SYMBOL(_dma_cache_inv);
* We could optimize the case where the cache argument is not BCACHE but
* that seems very atypical use ...
*/
asmlinkage
int
sys_cacheflush
(
unsigned
long
addr
,
unsigned
long
int
bytes
,
unsigned
int
cache
)
asmlinkage
int
sys_cacheflush
(
unsigned
long
__user
addr
,
unsigned
long
bytes
,
unsigned
int
cache
)
{
if
(
!
access_ok
(
VERIFY_WRITE
,
(
void
*
)
addr
,
bytes
))
if
(
!
access_ok
(
VERIFY_WRITE
,
(
void
__user
*
)
addr
,
bytes
))
return
-
EFAULT
;
flush_icache_range
(
addr
,
addr
+
bytes
);
...
...
arch/mips/mm/fault.c
浏览文件 @
fe00f943
...
...
@@ -141,7 +141,7 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long write,
info
.
si_signo
=
SIGSEGV
;
info
.
si_errno
=
0
;
/* info.si_code has been set above */
info
.
si_addr
=
(
void
*
)
address
;
info
.
si_addr
=
(
void
__user
*
)
address
;
force_sig_info
(
SIGSEGV
,
&
info
,
tsk
);
return
;
}
...
...
@@ -197,7 +197,7 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long write,
info
.
si_signo
=
SIGBUS
;
info
.
si_errno
=
0
;
info
.
si_code
=
BUS_ADRERR
;
info
.
si_addr
=
(
void
*
)
address
;
info
.
si_addr
=
(
void
__user
*
)
address
;
force_sig_info
(
SIGBUS
,
&
info
,
tsk
);
return
;
...
...
include/asm-mips/cacheflush.h
浏览文件 @
fe00f943
...
...
@@ -49,7 +49,8 @@ static inline void flush_dcache_page(struct page *page)
extern
void
(
*
flush_icache_page
)(
struct
vm_area_struct
*
vma
,
struct
page
*
page
);
extern
void
(
*
flush_icache_range
)(
unsigned
long
start
,
unsigned
long
end
);
extern
void
(
*
flush_icache_range
)(
unsigned
long
__user
start
,
unsigned
long
__user
end
);
#define flush_cache_vmap(start, end) flush_cache_all()
#define flush_cache_vunmap(start, end) flush_cache_all()
...
...
include/asm-mips/checksum.h
浏览文件 @
fe00f943
...
...
@@ -34,8 +34,9 @@ unsigned int csum_partial(const unsigned char *buff, int len, unsigned int sum);
* this is a new version of the above that records errors it finds in *errp,
* but continues and zeros the rest of the buffer.
*/
unsigned
int
csum_partial_copy_from_user
(
const
unsigned
char
*
src
,
unsigned
char
*
dst
,
int
len
,
unsigned
int
sum
,
int
*
errp
);
unsigned
int
csum_partial_copy_from_user
(
const
unsigned
char
__user
*
src
,
unsigned
char
*
dst
,
int
len
,
unsigned
int
sum
,
int
*
errp
);
/*
* Copy and checksum to user
...
...
include/asm-mips/io.h
浏览文件 @
fe00f943
...
...
@@ -25,6 +25,7 @@
#include <asm/page.h>
#include <asm/pgtable-bits.h>
#include <asm/processor.h>
#include <asm/string.h>
#include <mangle-port.h>
...
...
@@ -217,7 +218,7 @@ static inline void __iomem * __ioremap_mode(phys_t offset, unsigned long size,
*/
if
(
flags
==
_CACHE_UNCACHED
)
base
=
(
u64
)
IO_BASE
;
return
(
void
*
)
(
unsigned
long
)
(
base
+
offset
);
return
(
void
__iomem
*
)
(
unsigned
long
)
(
base
+
offset
);
}
return
__ioremap
(
offset
,
size
,
flags
);
...
...
@@ -486,9 +487,18 @@ BUILDSTRING(q, u64)
/* Depends on MIPS II instruction set */
#define mmiowb() asm volatile ("sync" ::: "memory")
#define memset_io(a,b,c) memset((void *)(a),(b),(c))
#define memcpy_fromio(a,b,c) memcpy((a),(void *)(b),(c))
#define memcpy_toio(a,b,c) memcpy((void *)(a),(b),(c))
static
inline
void
memset_io
(
volatile
void
__iomem
*
addr
,
unsigned
char
val
,
int
count
)
{
memset
((
void
__force
*
)
addr
,
val
,
count
);
}
static
inline
void
memcpy_fromio
(
void
*
dst
,
const
volatile
void
__iomem
*
src
,
int
count
)
{
memcpy
(
dst
,
(
void
__force
*
)
src
,
count
);
}
static
inline
void
memcpy_toio
(
volatile
void
__iomem
*
dst
,
const
void
*
src
,
int
count
)
{
memcpy
((
void
__force
*
)
dst
,
src
,
count
);
}
/*
* Memory Mapped I/O
...
...
include/asm-mips/irq.h
浏览文件 @
fe00f943
...
...
@@ -24,11 +24,9 @@ static inline int irq_canonicalize(int irq)
struct
pt_regs
;
#ifdef CONFIG_PREEMPT
extern
asmlinkage
unsigned
int
do_IRQ
(
unsigned
int
irq
,
struct
pt_regs
*
regs
);
#
else
#
ifdef CONFIG_PREEMPT
/*
* do_IRQ handles all normal device IRQ's (the special
...
...
include/asm-mips/sibyte/sb1250.h
浏览文件 @
fe00f943
...
...
@@ -58,6 +58,6 @@ extern void prom_printf(char *fmt, ...);
#endif
#define IOADDR(a) ((vo
id
*)(IO_BASE + (a)))
#define IOADDR(a) ((vo
latile void __iomem
*)(IO_BASE + (a)))
#endif
include/asm-mips/uaccess.h
浏览文件 @
fe00f943
...
...
@@ -196,63 +196,56 @@
__get_user_nocheck((x),(ptr),sizeof(*(ptr)))
struct
__large_struct
{
unsigned
long
buf
[
100
];
};
#define __m(x) (*(struct __large_struct *)(x))
#define __m(x) (*(struct __large_struct
__user
*)(x))
/*
* Yuck. We need two variants, one for 64bit operation and one
* for 32 bit mode and old iron.
*/
#ifdef __mips64
#define __GET_USER_DW(
__gu_err) __get_user_asm("ld", __gu_er
r)
#define __GET_USER_DW(
ptr) __get_user_asm("ld", pt
r)
#else
#define __GET_USER_DW(
__gu_err) __get_user_asm_ll32(__gu_er
r)
#define __GET_USER_DW(
ptr) __get_user_asm_ll32(pt
r)
#endif
#define __get_user_nocheck(x,ptr,size) \
({ \
__typeof(*(ptr)) __gu_val = 0; \
long __gu_addr; \
__typeof(*(ptr)) __gu_val = (__typeof(*(ptr))) 0; \
long __gu_err = 0; \
\
might_sleep(); \
__gu_addr = (long) (ptr); \
switch (size) { \
case 1: __get_user_asm("lb",
__gu_er
r); break; \
case 2: __get_user_asm("lh",
__gu_er
r); break; \
case 4: __get_user_asm("lw",
__gu_er
r); break; \
case 8: __GET_USER_DW(
__gu_er
r); break; \
case 1: __get_user_asm("lb",
pt
r); break; \
case 2: __get_user_asm("lh",
pt
r); break; \
case 4: __get_user_asm("lw",
pt
r); break; \
case 8: __GET_USER_DW(
pt
r); break; \
default: __get_user_unknown(); break; \
} \
x
= (__typeof__(*(ptr))) __gu_val; \
(x)
= (__typeof__(*(ptr))) __gu_val; \
__gu_err; \
})
#define __get_user_check(x,ptr,size) \
({ \
const __typeof__(*(ptr)) __user * __gu_addr = (ptr); \
__typeof__(*(ptr)) __gu_val = 0; \
long __gu_addr; \
long __gu_err; \
long __gu_err = -EFAULT; \
\
might_sleep(); \
__gu_addr = (long) (ptr); \
__gu_err = access_ok(VERIFY_READ, (void *) __gu_addr, size) \
? 0 : -EFAULT; \
\
if (likely(!__gu_err)) { \
if (likely(access_ok(VERIFY_READ, __gu_addr, size))) { \
switch (size) { \
case 1: __get_user_asm("lb", __gu_
er
r); break; \
case 2: __get_user_asm("lh", __gu_
er
r); break; \
case 4: __get_user_asm("lw", __gu_
er
r); break; \
case 8: __GET_USER_DW(__gu_
err); break;
\
case 1: __get_user_asm("lb", __gu_
add
r); break; \
case 2: __get_user_asm("lh", __gu_
add
r); break; \
case 4: __get_user_asm("lw", __gu_
add
r); break; \
case 8: __GET_USER_DW(__gu_
addr); break;
\
default: __get_user_unknown(); break; \
} \
} \
x
= (__typeof__(*(ptr))) __gu_val; \
(x)
= (__typeof__(*(ptr))) __gu_val; \
__gu_err; \
})
#define __get_user_asm(insn,
__gu_er
r) \
(
{ \
#define __get_user_asm(insn,
add
r) \
{ \
__asm__ __volatile__( \
"1: " insn " %1, %3 \n" \
"2: \n" \
...
...
@@ -264,20 +257,20 @@ struct __large_struct { unsigned long buf[100]; };
" "__UA_ADDR "\t1b, 3b \n" \
" .previous \n" \
: "=r" (__gu_err), "=r" (__gu_val) \
: "0" (
__gu_err), "o" (__m(__gu_addr)), "i" (-EFAULT));
\
}
)
: "0" (
0), "o" (__m(addr)), "i" (-EFAULT));
\
}
/*
* Get a long long 64 using 32 bit registers.
*/
#define __get_user_asm_ll32(
__gu_er
r) \
(
{ \
#define __get_user_asm_ll32(
add
r) \
{ \
__asm__ __volatile__( \
"1: lw %1,
%3
\n" \
"2: lw %D1,
%4
\n" \
"1: lw %1,
(%3)
\n" \
"2: lw %D1,
4(%3)
\n" \
" move %0, $0 \n" \
"3: .section .fixup,\"ax\" \n" \
"4: li %0, %
5
\n" \
"4: li %0, %
4
\n" \
" move %1, $0 \n" \
" move %D1, $0 \n" \
" j 3b \n" \
...
...
@@ -287,9 +280,8 @@ struct __large_struct { unsigned long buf[100]; };
" " __UA_ADDR " 2b, 4b \n" \
" .previous \n" \
: "=r" (__gu_err), "=&r" (__gu_val) \
: "0" (__gu_err), "o" (__m(__gu_addr)), \
"o" (__m(__gu_addr + 4)), "i" (-EFAULT)); \
})
: "0" (0), "r" (addr), "i" (-EFAULT)); \
}
extern
void
__get_user_unknown
(
void
);
...
...
@@ -298,25 +290,23 @@ extern void __get_user_unknown(void);
* for 32 bit mode and old iron.
*/
#ifdef __mips64
#define __PUT_USER_DW(
__pu_val) __put_user_asm("sd", __pu_val
)
#define __PUT_USER_DW(
ptr) __put_user_asm("sd", ptr
)
#else
#define __PUT_USER_DW(
__pu_val) __put_user_asm_ll32(__pu_val
)
#define __PUT_USER_DW(
ptr) __put_user_asm_ll32(ptr
)
#endif
#define __put_user_nocheck(x,ptr,size) \
({ \
__typeof__(*(ptr)) __pu_val; \
long __pu_addr; \
long __pu_err = 0; \
\
might_sleep(); \
__pu_val = (x); \
__pu_addr = (long) (ptr); \
switch (size) { \
case 1: __put_user_asm("sb",
__pu_val
); break; \
case 2: __put_user_asm("sh",
__pu_val
); break; \
case 4: __put_user_asm("sw",
__pu_val
); break; \
case 8: __PUT_USER_DW(
__pu_val
); break; \
case 1: __put_user_asm("sb",
ptr
); break; \
case 2: __put_user_asm("sh",
ptr
); break; \
case 4: __put_user_asm("sw",
ptr
); break; \
case 8: __PUT_USER_DW(
ptr
); break; \
default: __put_user_unknown(); break; \
} \
__pu_err; \
...
...
@@ -324,30 +314,24 @@ extern void __get_user_unknown(void);
#define __put_user_check(x,ptr,size) \
({ \
__typeof__(*(ptr)) __
pu_val;
\
long __pu_addr;
\
long __pu_err
;
\
__typeof__(*(ptr)) __
user *__pu_addr = (ptr);
\
__typeof__(*(ptr)) __pu_val = (x);
\
long __pu_err
= -EFAULT;
\
\
might_sleep(); \
__pu_val = (x); \
__pu_addr = (long) (ptr); \
__pu_err = access_ok(VERIFY_WRITE, (void *) __pu_addr, size) \
? 0 : -EFAULT; \
\
if (likely(!__pu_err)) { \
if (likely(access_ok(VERIFY_WRITE, __pu_addr, size))) { \
switch (size) { \
case 1: __put_user_asm("sb", __pu_
val
); break; \
case 2: __put_user_asm("sh", __pu_
val
); break; \
case 4: __put_user_asm("sw", __pu_
val
); break; \
case 8: __PUT_USER_DW(__pu_
val); break;
\
case 1: __put_user_asm("sb", __pu_
addr
); break; \
case 2: __put_user_asm("sh", __pu_
addr
); break; \
case 4: __put_user_asm("sw", __pu_
addr
); break; \
case 8: __PUT_USER_DW(__pu_
addr); break;
\
default: __put_user_unknown(); break; \
} \
} \
__pu_err; \
})
#define __put_user_asm(insn,
__pu_val
) \
(
{ \
#define __put_user_asm(insn,
ptr
) \
{ \
__asm__ __volatile__( \
"1: " insn " %z2, %3 # __put_user_asm\n" \
"2: \n" \
...
...
@@ -359,18 +343,18 @@ extern void __get_user_unknown(void);
" " __UA_ADDR " 1b, 3b \n" \
" .previous \n" \
: "=r" (__pu_err) \
: "0" (
__pu_err), "Jr" (__pu_val), "o" (__m(__pu_addr)),
\
: "0" (
0), "Jr" (__pu_val), "o" (__m(ptr)),
\
"i" (-EFAULT)); \
}
)
}
#define __put_user_asm_ll32(
__pu_val
) \
(
{ \
#define __put_user_asm_ll32(
ptr
) \
{ \
__asm__ __volatile__( \
"1: sw %2,
%3
# __put_user_asm_ll32 \n" \
"2: sw %D2,
%4
\n" \
"1: sw %2,
(%3)
# __put_user_asm_ll32 \n" \
"2: sw %D2,
4(%3)
\n" \
"3: \n" \
" .section .fixup,\"ax\" \n" \
"4: li %0, %
5
\n" \
"4: li %0, %
4
\n" \
" j 3b \n" \
" .previous \n" \
" .section __ex_table,\"a\" \n" \
...
...
@@ -378,9 +362,9 @@ extern void __get_user_unknown(void);
" " __UA_ADDR " 2b, 4b \n" \
" .previous" \
: "=r" (__pu_err) \
: "0" (
__pu_err), "r" (__pu_val), "o" (__m(__pu_addr)),
\
"
o" (__m(__pu_addr + 4)), "i" (-EFAULT));
\
}
)
: "0" (
0), "r" (__pu_val), "r" (ptr),
\
"
i" (-EFAULT));
\
}
extern
void
__put_user_unknown
(
void
);
...
...
@@ -403,7 +387,7 @@ extern size_t __copy_user(void *__to, const void *__from, size_t __n);
#define __invoke_copy_to_user(to,from,n) \
({ \
register void *__cu_to_r __asm__ ("$4"); \
register void
__user
*__cu_to_r __asm__ ("$4"); \
register const void *__cu_from_r __asm__ ("$5"); \
register long __cu_len_r __asm__ ("$6"); \
\
...
...
@@ -435,7 +419,7 @@ extern size_t __copy_user(void *__to, const void *__from, size_t __n);
*/
#define __copy_to_user(to,from,n) \
({ \
void
*__cu_to;
\
void
__user *__cu_to;
\
const void *__cu_from; \
long __cu_len; \
\
...
...
@@ -465,7 +449,7 @@ extern size_t __copy_user(void *__to, const void *__from, size_t __n);
*/
#define copy_to_user(to,from,n) \
({ \
void
*__cu_to;
\
void
__user *__cu_to;
\
const void *__cu_from; \
long __cu_len; \
\
...
...
@@ -482,7 +466,7 @@ extern size_t __copy_user(void *__to, const void *__from, size_t __n);
#define __invoke_copy_from_user(to,from,n) \
({ \
register void *__cu_to_r __asm__ ("$4"); \
register const void *__cu_from_r __asm__ ("$5"); \
register const void
__user
*__cu_from_r __asm__ ("$5"); \
register long __cu_len_r __asm__ ("$6"); \
\
__cu_to_r = (to); \
...
...
@@ -521,7 +505,7 @@ extern size_t __copy_user(void *__to, const void *__from, size_t __n);
#define __copy_from_user(to,from,n) \
({ \
void *__cu_to; \
const void
*__cu_from;
\
const void
__user *__cu_from;
\
long __cu_len; \
\
might_sleep(); \
...
...
@@ -552,7 +536,7 @@ extern size_t __copy_user(void *__to, const void *__from, size_t __n);
#define copy_from_user(to,from,n) \
({ \
void *__cu_to; \
const void
*__cu_from;
\
const void
__user *__cu_from;
\
long __cu_len; \
\
might_sleep(); \
...
...
@@ -569,8 +553,8 @@ extern size_t __copy_user(void *__to, const void *__from, size_t __n);
#define copy_in_user(to,from,n) \
({ \
void
*__cu_to;
\
const void
*__cu_from;
\
void
__user *__cu_to;
\
const void
__user *__cu_from;
\
long __cu_len; \
\
might_sleep(); \
...
...
@@ -596,7 +580,7 @@ extern size_t __copy_user(void *__to, const void *__from, size_t __n);
* On success, this will be zero.
*/
static
inline
__kernel_size_t
__clear_user
(
void
*
addr
,
__kernel_size_t
size
)
__clear_user
(
void
__user
*
addr
,
__kernel_size_t
size
)
{
__kernel_size_t
res
;
...
...
@@ -616,7 +600,7 @@ __clear_user(void *addr, __kernel_size_t size)
#define clear_user(addr,n) \
({ \
void
* __cl_addr = (addr);
\
void
__user * __cl_addr = (addr);
\
unsigned long __cl_size = (n); \
if (__cl_size && access_ok(VERIFY_WRITE, \
((unsigned long)(__cl_addr)), __cl_size)) \
...
...
@@ -645,7 +629,7 @@ __clear_user(void *addr, __kernel_size_t size)
* and returns @count.
*/
static
inline
long
__strncpy_from_user
(
char
*
__to
,
const
char
*
__from
,
long
__len
)
__strncpy_from_user
(
char
*
__to
,
const
char
__user
*
__from
,
long
__len
)
{
long
res
;
...
...
@@ -682,7 +666,7 @@ __strncpy_from_user(char *__to, const char *__from, long __len)
* and returns @count.
*/
static
inline
long
strncpy_from_user
(
char
*
__to
,
const
char
*
__from
,
long
__len
)
strncpy_from_user
(
char
*
__to
,
const
char
__user
*
__from
,
long
__len
)
{
long
res
;
...
...
@@ -701,7 +685,7 @@ strncpy_from_user(char *__to, const char *__from, long __len)
}
/* Returns: 0 if bad, string length+1 (memory size) of string if ok */
static
inline
long
__strlen_user
(
const
char
*
s
)
static
inline
long
__strlen_user
(
const
char
__user
*
s
)
{
long
res
;
...
...
@@ -731,7 +715,7 @@ static inline long __strlen_user(const char *s)
* If there is a limit on the length of a valid string, you may wish to
* consider using strnlen_user() instead.
*/
static
inline
long
strlen_user
(
const
char
*
s
)
static
inline
long
strlen_user
(
const
char
__user
*
s
)
{
long
res
;
...
...
@@ -748,7 +732,7 @@ static inline long strlen_user(const char *s)
}
/* Returns: 0 if bad, string length+1 (memory size) of string if ok */
static
inline
long
__strnlen_user
(
const
char
*
s
,
long
n
)
static
inline
long
__strnlen_user
(
const
char
__user
*
s
,
long
n
)
{
long
res
;
...
...
@@ -779,7 +763,7 @@ static inline long __strnlen_user(const char *s, long n)
* If there is a limit on the length of a valid string, you may wish to
* consider using strnlen_user() instead.
*/
static
inline
long
strnlen_user
(
const
char
*
s
,
long
n
)
static
inline
long
strnlen_user
(
const
char
__user
*
s
,
long
n
)
{
long
res
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录