Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
76580237
Commit
76580237
authored
Sep 04, 2016
by
Al Viro
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
xtensa: split uaccess.h into C and asm sides
Signed-off-by:
Al Viro
<
viro@zeniv.linux.org.uk
>
parent
4ad41c1e
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
162 additions
and
144 deletions
+162
-144
arch/xtensa/include/asm/asm-uaccess.h
arch/xtensa/include/asm/asm-uaccess.h
+160
-0
arch/xtensa/include/asm/uaccess.h
arch/xtensa/include/asm/uaccess.h
+0
-142
arch/xtensa/kernel/coprocessor.S
arch/xtensa/kernel/coprocessor.S
+1
-1
arch/xtensa/kernel/entry.S
arch/xtensa/kernel/entry.S
+1
-1
No files found.
arch/xtensa/include/asm/asm-uaccess.h
0 → 100644
View file @
76580237
/*
* include/asm-xtensa/uaccess.h
*
* User space memory access functions
*
* These routines provide basic accessing functions to the user memory
* space for the kernel. This header file provides functions such as:
*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file "COPYING" in the main directory of this archive
* for more details.
*
* Copyright (C) 2001 - 2005 Tensilica Inc.
*/
#ifndef _XTENSA_ASM_UACCESS_H
#define _XTENSA_ASM_UACCESS_H
#include <linux/errno.h>
#include <asm/types.h>
#define VERIFY_READ 0
#define VERIFY_WRITE 1
#include <asm/current.h>
#include <asm/asm-offsets.h>
#include <asm/processor.h>
/*
* These assembly macros mirror the C macros in asm/uaccess.h. They
* should always have identical functionality. See
* arch/xtensa/kernel/sys.S for usage.
*/
#define KERNEL_DS 0
#define USER_DS 1
#define get_ds (KERNEL_DS)
/*
* get_fs reads current->thread.current_ds into a register.
* On Entry:
* <ad> anything
* <sp> stack
* On Exit:
* <ad> contains current->thread.current_ds
*/
.
macro
get_fs
ad
,
sp
GET_CURRENT
(
\
ad
,
\
sp
)
#if THREAD_CURRENT_DS > 1020
addi
\
ad
,
\
ad
,
TASK_THREAD
l32i
\
ad
,
\
ad
,
THREAD_CURRENT_DS
-
TASK_THREAD
#else
l32i
\
ad
,
\
ad
,
THREAD_CURRENT_DS
#endif
.
endm
/*
* set_fs sets current->thread.current_ds to some value.
* On Entry:
* <at> anything (temp register)
* <av> value to write
* <sp> stack
* On Exit:
* <at> destroyed (actually, current)
* <av> preserved, value to write
*/
.
macro
set_fs
at
,
av
,
sp
GET_CURRENT
(
\
at
,
\
sp
)
s32i
\
av
,
\
at
,
THREAD_CURRENT_DS
.
endm
/*
* kernel_ok determines whether we should bypass addr/size checking.
* See the equivalent C-macro version below for clarity.
* On success, kernel_ok branches to a label indicated by parameter
* <success>. This implies that the macro falls through to the next
* insruction on an error.
*
* Note that while this macro can be used independently, we designed
* in for optimal use in the access_ok macro below (i.e., we fall
* through on error).
*
* On Entry:
* <at> anything (temp register)
* <success> label to branch to on success; implies
* fall-through macro on error
* <sp> stack pointer
* On Exit:
* <at> destroyed (actually, current->thread.current_ds)
*/
#if ((KERNEL_DS != 0) || (USER_DS == 0))
# error Assembly macro kernel_ok fails
#endif
.
macro
kernel_ok
at
,
sp
,
success
get_fs
\
at
,
\
sp
beqz
\
at
,
\
success
.
endm
/*
* user_ok determines whether the access to user-space memory is allowed.
* See the equivalent C-macro version below for clarity.
*
* On error, user_ok branches to a label indicated by parameter
* <error>. This implies that the macro falls through to the next
* instruction on success.
*
* Note that while this macro can be used independently, we designed
* in for optimal use in the access_ok macro below (i.e., we fall
* through on success).
*
* On Entry:
* <aa> register containing memory address
* <as> register containing memory size
* <at> temp register
* <error> label to branch to on error; implies fall-through
* macro on success
* On Exit:
* <aa> preserved
* <as> preserved
* <at> destroyed (actually, (TASK_SIZE + 1 - size))
*/
.
macro
user_ok
aa
,
as
,
at
,
error
movi
\
at
,
__XTENSA_UL_CONST
(
TASK_SIZE
)
bgeu
\
as
,
\
at
,
\
error
sub
\
at
,
\
at
,
\
as
bgeu
\
aa
,
\
at
,
\
error
.
endm
/*
* access_ok determines whether a memory access is allowed. See the
* equivalent C-macro version below for clarity.
*
* On error, access_ok branches to a label indicated by parameter
* <error>. This implies that the macro falls through to the next
* instruction on success.
*
* Note that we assume success is the common case, and we optimize the
* branch fall-through case on success.
*
* On Entry:
* <aa> register containing memory address
* <as> register containing memory size
* <at> temp register
* <sp>
* <error> label to branch to on error; implies fall-through
* macro on success
* On Exit:
* <aa> preserved
* <as> preserved
* <at> destroyed
*/
.
macro
access_ok
aa
,
as
,
at
,
sp
,
error
kernel_ok
\
at
,
\
sp
,
.
Laccess_ok_
\@
user_ok
\
aa
,
\
as
,
\
at
,
\
error
.
Laccess_ok_
\@
:
.
endm
#endif
/* _XTENSA_ASM_UACCESS_H */
arch/xtensa/include/asm/uaccess.h
View file @
76580237
...
...
@@ -17,153 +17,12 @@
#define _XTENSA_UACCESS_H
#include <linux/errno.h>
#ifndef __ASSEMBLY__
#include <linux/prefetch.h>
#endif
#include <asm/types.h>
#define VERIFY_READ 0
#define VERIFY_WRITE 1
#ifdef __ASSEMBLY__
#include <asm/current.h>
#include <asm/asm-offsets.h>
#include <asm/processor.h>
/*
* These assembly macros mirror the C macros that follow below. They
* should always have identical functionality. See
* arch/xtensa/kernel/sys.S for usage.
*/
#define KERNEL_DS 0
#define USER_DS 1
#define get_ds (KERNEL_DS)
/*
* get_fs reads current->thread.current_ds into a register.
* On Entry:
* <ad> anything
* <sp> stack
* On Exit:
* <ad> contains current->thread.current_ds
*/
.
macro
get_fs
ad
,
sp
GET_CURRENT
(
\
ad
,
\
sp
)
#if THREAD_CURRENT_DS > 1020
addi
\
ad
,
\
ad
,
TASK_THREAD
l32i
\
ad
,
\
ad
,
THREAD_CURRENT_DS
-
TASK_THREAD
#else
l32i
\
ad
,
\
ad
,
THREAD_CURRENT_DS
#endif
.
endm
/*
* set_fs sets current->thread.current_ds to some value.
* On Entry:
* <at> anything (temp register)
* <av> value to write
* <sp> stack
* On Exit:
* <at> destroyed (actually, current)
* <av> preserved, value to write
*/
.
macro
set_fs
at
,
av
,
sp
GET_CURRENT
(
\
at
,
\
sp
)
s32i
\
av
,
\
at
,
THREAD_CURRENT_DS
.
endm
/*
* kernel_ok determines whether we should bypass addr/size checking.
* See the equivalent C-macro version below for clarity.
* On success, kernel_ok branches to a label indicated by parameter
* <success>. This implies that the macro falls through to the next
* insruction on an error.
*
* Note that while this macro can be used independently, we designed
* in for optimal use in the access_ok macro below (i.e., we fall
* through on error).
*
* On Entry:
* <at> anything (temp register)
* <success> label to branch to on success; implies
* fall-through macro on error
* <sp> stack pointer
* On Exit:
* <at> destroyed (actually, current->thread.current_ds)
*/
#if ((KERNEL_DS != 0) || (USER_DS == 0))
# error Assembly macro kernel_ok fails
#endif
.
macro
kernel_ok
at
,
sp
,
success
get_fs
\
at
,
\
sp
beqz
\
at
,
\
success
.
endm
/*
* user_ok determines whether the access to user-space memory is allowed.
* See the equivalent C-macro version below for clarity.
*
* On error, user_ok branches to a label indicated by parameter
* <error>. This implies that the macro falls through to the next
* instruction on success.
*
* Note that while this macro can be used independently, we designed
* in for optimal use in the access_ok macro below (i.e., we fall
* through on success).
*
* On Entry:
* <aa> register containing memory address
* <as> register containing memory size
* <at> temp register
* <error> label to branch to on error; implies fall-through
* macro on success
* On Exit:
* <aa> preserved
* <as> preserved
* <at> destroyed (actually, (TASK_SIZE + 1 - size))
*/
.
macro
user_ok
aa
,
as
,
at
,
error
movi
\
at
,
__XTENSA_UL_CONST
(
TASK_SIZE
)
bgeu
\
as
,
\
at
,
\
error
sub
\
at
,
\
at
,
\
as
bgeu
\
aa
,
\
at
,
\
error
.
endm
/*
* access_ok determines whether a memory access is allowed. See the
* equivalent C-macro version below for clarity.
*
* On error, access_ok branches to a label indicated by parameter
* <error>. This implies that the macro falls through to the next
* instruction on success.
*
* Note that we assume success is the common case, and we optimize the
* branch fall-through case on success.
*
* On Entry:
* <aa> register containing memory address
* <as> register containing memory size
* <at> temp register
* <sp>
* <error> label to branch to on error; implies fall-through
* macro on success
* On Exit:
* <aa> preserved
* <as> preserved
* <at> destroyed
*/
.
macro
access_ok
aa
,
as
,
at
,
sp
,
error
kernel_ok
\
at
,
\
sp
,
.
Laccess_ok_
\@
user_ok
\
aa
,
\
as
,
\
at
,
\
error
.
Laccess_ok_
\@
:
.
endm
#else
/* __ASSEMBLY__ not defined */
#include <linux/sched.h>
/*
...
...
@@ -495,5 +354,4 @@ struct exception_table_entry
unsigned
long
insn
,
fixup
;
};
#endif
/* __ASSEMBLY__ */
#endif
/* _XTENSA_UACCESS_H */
arch/xtensa/kernel/coprocessor.S
View file @
76580237
...
...
@@ -17,7 +17,7 @@
#include <asm/processor.h>
#include <asm/coprocessor.h>
#include <asm/thread_info.h>
#include <asm/uaccess.h>
#include <asm/
asm-
uaccess.h>
#include <asm/unistd.h>
#include <asm/ptrace.h>
#include <asm/current.h>
...
...
arch/xtensa/kernel/entry.S
View file @
76580237
...
...
@@ -17,7 +17,7 @@
#include <asm/processor.h>
#include <asm/coprocessor.h>
#include <asm/thread_info.h>
#include <asm/uaccess.h>
#include <asm/
asm-
uaccess.h>
#include <asm/unistd.h>
#include <asm/ptrace.h>
#include <asm/current.h>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment