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
ca374dc6
Commit
ca374dc6
authored
Dec 17, 2002
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://are.twiddle.net/axp-2.5
into home.transmeta.com:/home/torvalds/v2.5/linux
parents
7d09d324
747e0767
Changes
13
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
58 additions
and
124 deletions
+58
-124
arch/alpha/kernel/traps.c
arch/alpha/kernel/traps.c
+1
-1
arch/alpha/lib/clear_user.S
arch/alpha/lib/clear_user.S
+1
-2
arch/alpha/lib/copy_user.S
arch/alpha/lib/copy_user.S
+8
-9
arch/alpha/lib/ev6-clear_user.S
arch/alpha/lib/ev6-clear_user.S
+1
-4
arch/alpha/lib/ev6-copy_user.S
arch/alpha/lib/ev6-copy_user.S
+3
-6
arch/alpha/lib/ev6-strncpy_from_user.S
arch/alpha/lib/ev6-strncpy_from_user.S
+2
-3
arch/alpha/lib/ev67-strlen_user.S
arch/alpha/lib/ev67-strlen_user.S
+2
-4
arch/alpha/lib/strlen_user.S
arch/alpha/lib/strlen_user.S
+2
-3
arch/alpha/lib/strncpy_from_user.S
arch/alpha/lib/strncpy_from_user.S
+2
-4
arch/alpha/mm/extable.c
arch/alpha/mm/extable.c
+9
-61
arch/alpha/mm/fault.c
arch/alpha/mm/fault.c
+1
-1
include/asm-alpha/dma.h
include/asm-alpha/dma.h
+2
-2
include/asm-alpha/uaccess.h
include/asm-alpha/uaccess.h
+24
-24
No files found.
arch/alpha/kernel/traps.c
View file @
ca374dc6
...
@@ -638,7 +638,7 @@ do_entUna(void * va, unsigned long opcode, unsigned long reg,
...
@@ -638,7 +638,7 @@ do_entUna(void * va, unsigned long opcode, unsigned long reg,
got_exception:
got_exception:
/* Ok, we caught the exception, but we don't want it. Is there
/* Ok, we caught the exception, but we don't want it. Is there
someone to pass it along to? */
someone to pass it along to? */
if
((
fixup
=
search_exception_table
(
pc
,
regs
.
gp
))
!=
0
)
{
if
((
fixup
=
search_exception_table
(
pc
))
!=
0
)
{
unsigned
long
newpc
;
unsigned
long
newpc
;
newpc
=
fixup_exception
(
una_reg
,
fixup
,
pc
);
newpc
=
fixup_exception
(
una_reg
,
fixup
,
pc
);
...
...
arch/alpha/lib/clear_user.S
View file @
ca374dc6
...
@@ -29,7 +29,7 @@
...
@@ -29,7 +29,7 @@
#define EX(x,y...) \
#define EX(x,y...) \
99:
x
,##
y
; \
99:
x
,##
y
; \
.
section
__ex_table
,
"a"
; \
.
section
__ex_table
,
"a"
; \
.
gprel32
99
b
; \
.
long
99
b
-
.
; \
lda
$
31
,
$exception
-
99
b
(
$
31
)
; \
lda
$
31
,
$exception
-
99
b
(
$
31
)
; \
.
previous
.
previous
...
@@ -80,7 +80,6 @@ $tail:
...
@@ -80,7 +80,6 @@ $tail:
ret
$
31
,
(
$
28
),
1
#
..
e1
:
ret
$
31
,
(
$
28
),
1
#
..
e1
:
__do_clear_user
:
__do_clear_user
:
ldgp
$
29
,
0
(
$
27
)
#
we
do
exceptions
--
we
need
the
gp
.
and
$
6
,
7
,
$
4
#
e0
:
find
dest
misalignment
and
$
6
,
7
,
$
4
#
e0
:
find
dest
misalignment
beq
$
0
,
$zerolength
#
..
e1
:
beq
$
0
,
$zerolength
#
..
e1
:
addq
$
0
,
$
4
,
$
1
#
e0
:
bias
counter
addq
$
0
,
$
4
,
$
1
#
e0
:
bias
counter
...
...
arch/alpha/lib/copy_user.S
View file @
ca374dc6
...
@@ -30,29 +30,28 @@
...
@@ -30,29 +30,28 @@
#define EXI(x,y...) \
#define EXI(x,y...) \
99:
x
,##
y
; \
99:
x
,##
y
; \
.
section
__ex_table
,
"a"
; \
.
section
__ex_table
,
"a"
; \
.
gprel32
99
b
; \
.
long
99
b
-
.
; \
lda
$
31
,
$exitin
-
99
b
(
$
31
)
; \
lda
$
31
,
$exitin
-
99
b
(
$
31
)
; \
.
previous
.
previous
#define EXO(x,y...) \
#define EXO(x,y...) \
99:
x
,##
y
; \
99:
x
,##
y
; \
.
section
__ex_table
,
"a"
; \
.
section
__ex_table
,
"a"
; \
.
gprel32
99
b
; \
.
long
99
b
-
.
; \
lda
$
31
,
$exitout
-
99
b
(
$
31
)
; \
lda
$
31
,
$exitout
-
99
b
(
$
31
)
; \
.
previous
.
previous
.
set
noat
.
set
noat
.
align
3
.
align
4
.
globl
__copy_user
.
globl
__copy_user
.
ent
__copy_user
.
ent
__copy_user
__copy_user
:
__copy_user
:
ldgp
$
29
,
0
(
$
27
)
#
we
do
exceptions
--
we
need
the
gp
.
.
prologue
0
.
prologue
1
and
$
6
,
7
,
$
3
and
$
6
,
7
,
$
3
beq
$
0
,
$
35
beq
$
0
,
$
35
beq
$
3
,
$
36
beq
$
3
,
$
36
subq
$
3
,
8
,
$
3
subq
$
3
,
8
,
$
3
.
align
5
.
align
4
$
37
:
$
37
:
EXI
(
ldq_u
$
1
,
0
(
$
7
)
)
EXI
(
ldq_u
$
1
,
0
(
$
7
)
)
EXO
(
ldq_u
$
2
,
0
(
$
6
)
)
EXO
(
ldq_u
$
2
,
0
(
$
6
)
)
...
@@ -73,7 +72,7 @@ $36:
...
@@ -73,7 +72,7 @@ $36:
beq
$
1
,
$
43
beq
$
1
,
$
43
beq
$
4
,
$
48
beq
$
4
,
$
48
EXI
(
ldq_u
$
3
,
0
(
$
7
)
)
EXI
(
ldq_u
$
3
,
0
(
$
7
)
)
.
align
5
.
align
4
$
50
:
$
50
:
EXI
(
ldq_u
$
2
,
8
(
$
7
)
)
EXI
(
ldq_u
$
2
,
8
(
$
7
)
)
subq
$
4
,
8
,
$
4
subq
$
4
,
8
,
$
4
...
@@ -88,7 +87,7 @@ $50:
...
@@ -88,7 +87,7 @@ $50:
bne
$
4
,
$
50
bne
$
4
,
$
50
$
48
:
$
48
:
beq
$
0
,
$
41
beq
$
0
,
$
41
.
align
5
.
align
4
$
57
:
$
57
:
EXI
(
ldq_u
$
1
,
0
(
$
7
)
)
EXI
(
ldq_u
$
1
,
0
(
$
7
)
)
EXO
(
ldq_u
$
2
,
0
(
$
6
)
)
EXO
(
ldq_u
$
2
,
0
(
$
6
)
)
...
@@ -105,7 +104,7 @@ $57:
...
@@ -105,7 +104,7 @@ $57:
.
align
4
.
align
4
$
43
:
$
43
:
beq
$
4
,
$
65
beq
$
4
,
$
65
.
align
5
.
align
4
$
66
:
$
66
:
EXI
(
ldq
$
1
,
0
(
$
7
)
)
EXI
(
ldq
$
1
,
0
(
$
7
)
)
subq
$
4
,
8
,
$
4
subq
$
4
,
8
,
$
4
...
...
arch/alpha/lib/ev6-clear_user.S
View file @
ca374dc6
...
@@ -47,7 +47,7 @@
...
@@ -47,7 +47,7 @@
#define EX(x,y...) \
#define EX(x,y...) \
99:
x
,##
y
; \
99:
x
,##
y
; \
.
section
__ex_table
,
"a"
; \
.
section
__ex_table
,
"a"
; \
.
gprel32
99
b
; \
.
long
99
b
-
.
; \
lda
$
31
,
$exception
-
99
b
(
$
31
)
; \
lda
$
31
,
$exception
-
99
b
(
$
31
)
; \
.
previous
.
previous
...
@@ -62,9 +62,6 @@
...
@@ -62,9 +62,6 @@
#
Pipeline
info
:
Slotting
&
Comments
#
Pipeline
info
:
Slotting
&
Comments
__do_clear_user
:
__do_clear_user
:
ldgp
$
29
,
0
(
$
27
)
#
we
do
exceptions
--
we
need
the
gp
.
#
Macro
instruction
becomes
ldah
/
lda
#
..
..
E
E
:
and
$
6
,
7
,
$
4
#
..
E
..
..
:
find
dest
head
misalignment
and
$
6
,
7
,
$
4
#
..
E
..
..
:
find
dest
head
misalignment
beq
$
0
,
$zerolength
#
U
..
..
..
:
U
L
U
L
beq
$
0
,
$zerolength
#
U
..
..
..
:
U
L
U
L
...
...
arch/alpha/lib/ev6-copy_user.S
View file @
ca374dc6
...
@@ -41,14 +41,14 @@
...
@@ -41,14 +41,14 @@
#define EXI(x,y...) \
#define EXI(x,y...) \
99:
x
,##
y
; \
99:
x
,##
y
; \
.
section
__ex_table
,
"a"
; \
.
section
__ex_table
,
"a"
; \
.
gprel32
99
b
; \
.
long
99
b
-
.
; \
lda
$
31
,
$exitin
-
99
b
(
$
31
)
; \
lda
$
31
,
$exitin
-
99
b
(
$
31
)
; \
.
previous
.
previous
#define EXO(x,y...) \
#define EXO(x,y...) \
99:
x
,##
y
; \
99:
x
,##
y
; \
.
section
__ex_table
,
"a"
; \
.
section
__ex_table
,
"a"
; \
.
gprel32
99
b
; \
.
long
99
b
-
.
; \
lda
$
31
,
$exitout
-
99
b
(
$
31
)
; \
lda
$
31
,
$exitout
-
99
b
(
$
31
)
; \
.
previous
.
previous
...
@@ -58,10 +58,7 @@
...
@@ -58,10 +58,7 @@
.
ent
__copy_user
.
ent
__copy_user
#
Pipeline
info
:
Slotting
&
Comments
#
Pipeline
info
:
Slotting
&
Comments
__copy_user
:
__copy_user
:
ldgp
$
29
,
0
(
$
27
)
#
we
do
exceptions
--
we
need
the
gp
.
.
prologue
0
#
Macro
instruction
becomes
ldah
/
lda
#
..
..
E
E
.
prologue
1
subq
$
0
,
32
,
$
1
#
..
E
..
..
:
Is
this
going
to
be
a
small
copy
?
subq
$
0
,
32
,
$
1
#
..
E
..
..
:
Is
this
going
to
be
a
small
copy
?
beq
$
0
,
$zerolength
#
U
..
..
..
:
U
L
U
L
beq
$
0
,
$zerolength
#
U
..
..
..
:
U
L
U
L
...
...
arch/alpha/lib/ev6-strncpy_from_user.S
View file @
ca374dc6
...
@@ -34,7 +34,7 @@
...
@@ -34,7 +34,7 @@
#define EX(x,y...) \
#define EX(x,y...) \
99:
x
,##
y
; \
99:
x
,##
y
; \
.
section
__ex_table
,
"a"
; \
.
section
__ex_table
,
"a"
; \
.
gprel32
99
b
; \
.
long
99
b
-
.
; \
lda
$
31
,
$exception
-
99
b
(
$
0
)
; \
lda
$
31
,
$exception
-
99
b
(
$
0
)
; \
.
previous
.
previous
...
@@ -46,11 +46,10 @@
...
@@ -46,11 +46,10 @@
.
globl
__strncpy_from_user
.
globl
__strncpy_from_user
.
ent
__strncpy_from_user
.
ent
__strncpy_from_user
.
frame
$
30
,
0
,
$
26
.
frame
$
30
,
0
,
$
26
.
prologue
1
.
prologue
0
.
align
4
.
align
4
__strncpy_from_user
:
__strncpy_from_user
:
ldgp
$
29
,
0
(
$
27
)
#
E
E
:
becomes
2
instructions
(
for
exceptions
)
and
a0
,
7
,
t3
#
E
:
find
dest
misalignment
and
a0
,
7
,
t3
#
E
:
find
dest
misalignment
beq
a2
,
$zerolength
#
U
:
beq
a2
,
$zerolength
#
U
:
...
...
arch/alpha/lib/ev67-strlen_user.S
View file @
ca374dc6
...
@@ -30,7 +30,7 @@
...
@@ -30,7 +30,7 @@
#define EX(x,y...) \
#define EX(x,y...) \
99:
x
,##
y
; \
99:
x
,##
y
; \
.
section
__ex_table
,
"a"
; \
.
section
__ex_table
,
"a"
; \
.
gprel32
99
b
; \
.
long
99
b
-
.
; \
lda
v0
,
$exception
-
99
b
(
zero
)
; \
lda
v0
,
$exception
-
99
b
(
zero
)
; \
.
previous
.
previous
...
@@ -56,9 +56,7 @@ __strlen_user:
...
@@ -56,9 +56,7 @@ __strlen_user:
.
align
4
.
align
4
__strnlen_user
:
__strnlen_user
:
ldgp
$
29
,
0
(
$
27
)
#
E
E
:
we
do
exceptions
--
we
need
the
gp
.
.
prologue
0
/
*
Decomposes
into
lda
/
ldah
*/
.
prologue
1
EX
(
ldq_u
t0
,
0
(
a0
)
)
#
L
:
load
first
quadword
(
a0
may
be
misaligned
)
EX
(
ldq_u
t0
,
0
(
a0
)
)
#
L
:
load
first
quadword
(
a0
may
be
misaligned
)
lda
t1
,
-
1
(
zero
)
#
E
:
lda
t1
,
-
1
(
zero
)
#
E
:
...
...
arch/alpha/lib/strlen_user.S
View file @
ca374dc6
...
@@ -19,7 +19,7 @@
...
@@ -19,7 +19,7 @@
#define EX(x,y...) \
#define EX(x,y...) \
99:
x
,##
y
; \
99:
x
,##
y
; \
.
section
__ex_table
,
"a"
; \
.
section
__ex_table
,
"a"
; \
.
gprel32
99
b
; \
.
long
99
b
-
.
; \
lda
v0
,
$exception
-
99
b
(
zero
)
; \
lda
v0
,
$exception
-
99
b
(
zero
)
; \
.
previous
.
previous
...
@@ -42,8 +42,7 @@ __strlen_user:
...
@@ -42,8 +42,7 @@ __strlen_user:
.
align
3
.
align
3
__strnlen_user
:
__strnlen_user
:
ldgp
$
29
,
0
(
$
27
)
#
we
do
exceptions
--
we
need
the
gp
.
.
prologue
0
.
prologue
1
EX
(
ldq_u
t0
,
0
(
a0
)
)
#
load
first
quadword
(
a0
may
be
misaligned
)
EX
(
ldq_u
t0
,
0
(
a0
)
)
#
load
first
quadword
(
a0
may
be
misaligned
)
lda
t1
,
-
1
(
zero
)
lda
t1
,
-
1
(
zero
)
...
...
arch/alpha/lib/strncpy_from_user.S
View file @
ca374dc6
...
@@ -19,7 +19,7 @@
...
@@ -19,7 +19,7 @@
#define EX(x,y...) \
#define EX(x,y...) \
99:
x
,##
y
; \
99:
x
,##
y
; \
.
section
__ex_table
,
"a"
; \
.
section
__ex_table
,
"a"
; \
.
gprel32
99
b
; \
.
long
99
b
-
.
; \
lda
$
31
,
$exception
-
99
b
(
$
0
)
; \
lda
$
31
,
$exception
-
99
b
(
$
0
)
; \
.
previous
.
previous
...
@@ -31,7 +31,7 @@
...
@@ -31,7 +31,7 @@
.
globl
__strncpy_from_user
.
globl
__strncpy_from_user
.
ent
__strncpy_from_user
.
ent
__strncpy_from_user
.
frame
$
30
,
0
,
$
26
.
frame
$
30
,
0
,
$
26
.
prologue
1
.
prologue
0
.
align
3
.
align
3
$aligned
:
$aligned
:
...
@@ -100,8 +100,6 @@ $a_eoc:
...
@@ -100,8 +100,6 @@ $a_eoc:
/**
*
The
Function
Entry
Point
***/
/**
*
The
Function
Entry
Point
***/
.
align
3
.
align
3
__strncpy_from_user
:
__strncpy_from_user
:
ldgp
$
29
,
0
(
$
27
)
#
we
do
exceptions
--
we
need
the
gp
.
mov
a0
,
v0
#
save
the
string
start
mov
a0
,
v0
#
save
the
string
start
beq
a2
,
$zerolength
beq
a2
,
$zerolength
...
...
arch/alpha/mm/extable.c
View file @
ca374dc6
...
@@ -12,21 +12,17 @@ extern const struct exception_table_entry __stop___ex_table[];
...
@@ -12,21 +12,17 @@ extern const struct exception_table_entry __stop___ex_table[];
static
inline
unsigned
static
inline
unsigned
search_one_table
(
const
struct
exception_table_entry
*
first
,
search_one_table
(
const
struct
exception_table_entry
*
first
,
const
struct
exception_table_entry
*
last
,
const
struct
exception_table_entry
*
last
,
signed
long
value
)
un
signed
long
value
)
{
{
/* Abort early if the search value is out of range. */
if
(
value
!=
(
signed
int
)
value
)
return
0
;
while
(
first
<=
last
)
{
while
(
first
<=
last
)
{
const
struct
exception_table_entry
*
mid
;
const
struct
exception_table_entry
*
mid
;
long
diff
;
unsigned
long
mid_value
;
mid
=
(
last
-
first
)
/
2
+
first
;
mid
=
(
last
-
first
)
/
2
+
first
;
diff
=
mid
->
insn
-
value
;
mid_value
=
(
unsigned
long
)
&
mid
->
insn
+
mid
->
insn
;
if
(
diff
==
0
)
if
(
mid_value
==
value
)
return
mid
->
fixup
.
unit
;
return
mid
->
fixup
.
unit
;
else
if
(
diff
<
0
)
else
if
(
mid_value
<
value
)
first
=
mid
+
1
;
first
=
mid
+
1
;
else
else
last
=
mid
-
1
;
last
=
mid
-
1
;
...
@@ -34,48 +30,13 @@ search_one_table(const struct exception_table_entry *first,
...
@@ -34,48 +30,13 @@ search_one_table(const struct exception_table_entry *first,
return
0
;
return
0
;
}
}
register
unsigned
long
gp
__asm__
(
"$29"
);
static
unsigned
search_exception_table_without_gp
(
unsigned
long
addr
)
{
unsigned
ret
;
#ifndef CONFIG_MODULES
/* There is only the kernel to search. */
ret
=
search_one_table
(
__start___ex_table
,
__stop___ex_table
-
1
,
addr
-
gp
);
#else
extern
spinlock_t
modlist_lock
;
unsigned
long
flags
;
/* The kernel is the last "module" -- no need to treat it special. */
struct
module
*
mp
;
ret
=
0
;
spin_lock_irqsave
(
&
modlist_lock
,
flags
);
for
(
mp
=
module_list
;
mp
;
mp
=
mp
->
next
)
{
if
(
!
mp
->
ex_table_start
||
!
(
mp
->
flags
&
(
MOD_RUNNING
|
MOD_INITIALIZING
)))
continue
;
ret
=
search_one_table
(
mp
->
ex_table_start
,
mp
->
ex_table_end
-
1
,
addr
-
mp
->
gp
);
if
(
ret
)
break
;
}
spin_unlock_irqrestore
(
&
modlist_lock
,
flags
);
#endif
return
ret
;
}
unsigned
unsigned
search_exception_table
(
unsigned
long
addr
,
unsigned
long
exc_gp
)
search_exception_table
(
unsigned
long
addr
)
{
{
unsigned
ret
;
unsigned
ret
;
#ifndef CONFIG_MODULES
#ifndef CONFIG_MODULES
ret
=
search_one_table
(
__start___ex_table
,
__stop___ex_table
-
1
,
ret
=
search_one_table
(
__start___ex_table
,
__stop___ex_table
-
1
,
addr
);
addr
-
exc_gp
);
if
(
ret
)
return
ret
;
#else
#else
extern
spinlock_t
modlist_lock
;
extern
spinlock_t
modlist_lock
;
unsigned
long
flags
;
unsigned
long
flags
;
...
@@ -88,25 +49,12 @@ search_exception_table(unsigned long addr, unsigned long exc_gp)
...
@@ -88,25 +49,12 @@ search_exception_table(unsigned long addr, unsigned long exc_gp)
if
(
!
mp
->
ex_table_start
||
!
(
mp
->
flags
&
(
MOD_RUNNING
|
MOD_INITIALIZING
)))
if
(
!
mp
->
ex_table_start
||
!
(
mp
->
flags
&
(
MOD_RUNNING
|
MOD_INITIALIZING
)))
continue
;
continue
;
ret
=
search_one_table
(
mp
->
ex_table_start
,
ret
=
search_one_table
(
mp
->
ex_table_start
,
mp
->
ex_table_end
-
1
,
addr
-
exc_gp
);
mp
->
ex_table_end
-
1
,
addr
);
if
(
ret
)
if
(
ret
)
break
;
break
;
}
}
spin_unlock_irqrestore
(
&
modlist_lock
,
flags
);
spin_unlock_irqrestore
(
&
modlist_lock
,
flags
);
if
(
ret
)
return
ret
;
#endif
#endif
/*
return
ret
;
* The search failed with the exception gp. To be safe, try the
* old method before giving up.
*/
ret
=
search_exception_table_without_gp
(
addr
);
if
(
ret
)
{
printk
(
KERN_ALERT
"%s: [%lx] EX_TABLE search fail with"
"exc frame GP, success with raw GP
\n
"
,
current
->
comm
,
addr
);
return
ret
;
}
return
0
;
}
}
arch/alpha/mm/fault.c
View file @
ca374dc6
...
@@ -176,7 +176,7 @@ do_page_fault(unsigned long address, unsigned long mmcsr,
...
@@ -176,7 +176,7 @@ do_page_fault(unsigned long address, unsigned long mmcsr,
no_context:
no_context:
/* Are we prepared to handle this fault as an exception? */
/* Are we prepared to handle this fault as an exception? */
if
((
fixup
=
search_exception_table
(
regs
->
pc
,
regs
->
gp
))
!=
0
)
{
if
((
fixup
=
search_exception_table
(
regs
->
pc
))
!=
0
)
{
unsigned
long
newpc
;
unsigned
long
newpc
;
newpc
=
fixup_exception
(
dpf_reg
,
fixup
,
regs
->
pc
);
newpc
=
fixup_exception
(
dpf_reg
,
fixup
,
regs
->
pc
);
regs
->
pc
=
newpc
;
regs
->
pc
=
newpc
;
...
...
include/asm-alpha/dma.h
View file @
ca374dc6
...
@@ -112,9 +112,9 @@
...
@@ -112,9 +112,9 @@
# elif defined(CONFIG_ALPHA_RUFFIAN)
# elif defined(CONFIG_ALPHA_RUFFIAN)
# define MAX_ISA_DMA_ADDRESS ALPHA_RUFFIAN_MAX_ISA_DMA_ADDRESS
# define MAX_ISA_DMA_ADDRESS ALPHA_RUFFIAN_MAX_ISA_DMA_ADDRESS
# elif defined(CONFIG_ALPHA_SABLE)
# elif defined(CONFIG_ALPHA_SABLE)
# define MAX_ISA_DMA_ADDRESS ALPHA_SABLE_MAX_
DMA_IS
A_ADDRESS
# define MAX_ISA_DMA_ADDRESS ALPHA_SABLE_MAX_
ISA_DM
A_ADDRESS
# elif defined(CONFIG_ALPHA_ALCOR)
# elif defined(CONFIG_ALPHA_ALCOR)
# define MAX_ISA_DMA_ADDRESS ALPHA_ALCOR_MAX_
DMA_IS
A_ADDRESS
# define MAX_ISA_DMA_ADDRESS ALPHA_ALCOR_MAX_
ISA_DM
A_ADDRESS
# else
# else
# define MAX_ISA_DMA_ADDRESS ALPHA_MAX_ISA_DMA_ADDRESS
# define MAX_ISA_DMA_ADDRESS ALPHA_MAX_ISA_DMA_ADDRESS
# endif
# endif
...
...
include/asm-alpha/uaccess.h
View file @
ca374dc6
...
@@ -126,7 +126,7 @@ struct __large_struct { unsigned long buf[100]; };
...
@@ -126,7 +126,7 @@ struct __large_struct { unsigned long buf[100]; };
__asm__("1: ldq %0,%2\n" \
__asm__("1: ldq %0,%2\n" \
"2:\n" \
"2:\n" \
".section __ex_table,\"a\"\n" \
".section __ex_table,\"a\"\n" \
" .
gprel32 1b
\n" \
" .
long 1b - .
\n" \
" lda %0, 2b-1b(%1)\n" \
" lda %0, 2b-1b(%1)\n" \
".previous" \
".previous" \
: "=r"(__gu_val), "=r"(__gu_err) \
: "=r"(__gu_val), "=r"(__gu_err) \
...
@@ -136,7 +136,7 @@ struct __large_struct { unsigned long buf[100]; };
...
@@ -136,7 +136,7 @@ struct __large_struct { unsigned long buf[100]; };
__asm__("1: ldl %0,%2\n" \
__asm__("1: ldl %0,%2\n" \
"2:\n" \
"2:\n" \
".section __ex_table,\"a\"\n" \
".section __ex_table,\"a\"\n" \
" .
gprel32 1b
\n" \
" .
long 1b - .
\n" \
" lda %0, 2b-1b(%1)\n" \
" lda %0, 2b-1b(%1)\n" \
".previous" \
".previous" \
: "=r"(__gu_val), "=r"(__gu_err) \
: "=r"(__gu_val), "=r"(__gu_err) \
...
@@ -149,7 +149,7 @@ struct __large_struct { unsigned long buf[100]; };
...
@@ -149,7 +149,7 @@ struct __large_struct { unsigned long buf[100]; };
__asm__("1: ldwu %0,%2\n" \
__asm__("1: ldwu %0,%2\n" \
"2:\n" \
"2:\n" \
".section __ex_table,\"a\"\n" \
".section __ex_table,\"a\"\n" \
" .
gprel32 1b
\n" \
" .
long 1b - .
\n" \
" lda %0, 2b-1b(%1)\n" \
" lda %0, 2b-1b(%1)\n" \
".previous" \
".previous" \
: "=r"(__gu_val), "=r"(__gu_err) \
: "=r"(__gu_val), "=r"(__gu_err) \
...
@@ -159,7 +159,7 @@ struct __large_struct { unsigned long buf[100]; };
...
@@ -159,7 +159,7 @@ struct __large_struct { unsigned long buf[100]; };
__asm__("1: ldbu %0,%2\n" \
__asm__("1: ldbu %0,%2\n" \
"2:\n" \
"2:\n" \
".section __ex_table,\"a\"\n" \
".section __ex_table,\"a\"\n" \
" .
gprel32 1b
\n" \
" .
long 1b - .
\n" \
" lda %0, 2b-1b(%1)\n" \
" lda %0, 2b-1b(%1)\n" \
".previous" \
".previous" \
: "=r"(__gu_val), "=r"(__gu_err) \
: "=r"(__gu_val), "=r"(__gu_err) \
...
@@ -178,10 +178,10 @@ struct __large_struct { unsigned long buf[100]; };
...
@@ -178,10 +178,10 @@ struct __large_struct { unsigned long buf[100]; };
" or %0,%1,%0\n" \
" or %0,%1,%0\n" \
"3:\n" \
"3:\n" \
".section __ex_table,\"a\"\n" \
".section __ex_table,\"a\"\n" \
" .
gprel32 1b
\n" \
" .
long 1b - .
\n" \
" lda %0, 3b-1b(%2)\n" \
" lda %0, 3b-1b(%2)\n" \
" .
gprel32 2b
\n" \
" .
long 2b - .
\n" \
" lda %0,
2b-1
b(%2)\n" \
" lda %0,
3b-2
b(%2)\n" \
".previous" \
".previous" \
: "=&r"(__gu_val), "=&r"(__gu_tmp), "=r"(__gu_err) \
: "=&r"(__gu_val), "=&r"(__gu_tmp), "=r"(__gu_err) \
: "r"(addr), "2"(__gu_err)); \
: "r"(addr), "2"(__gu_err)); \
...
@@ -192,7 +192,7 @@ struct __large_struct { unsigned long buf[100]; };
...
@@ -192,7 +192,7 @@ struct __large_struct { unsigned long buf[100]; };
" extbl %0,%2,%0\n" \
" extbl %0,%2,%0\n" \
"2:\n" \
"2:\n" \
".section __ex_table,\"a\"\n" \
".section __ex_table,\"a\"\n" \
" .
gprel32 1b
\n" \
" .
long 1b - .
\n" \
" lda %0, 2b-1b(%1)\n" \
" lda %0, 2b-1b(%1)\n" \
".previous" \
".previous" \
: "=&r"(__gu_val), "=r"(__gu_err) \
: "=&r"(__gu_val), "=r"(__gu_err) \
...
@@ -240,7 +240,7 @@ extern void __put_user_unknown(void);
...
@@ -240,7 +240,7 @@ extern void __put_user_unknown(void);
__asm__ __volatile__("1: stq %r2,%1\n" \
__asm__ __volatile__("1: stq %r2,%1\n" \
"2:\n" \
"2:\n" \
".section __ex_table,\"a\"\n" \
".section __ex_table,\"a\"\n" \
" .
gprel32 1b
\n" \
" .
long 1b - .
\n" \
" lda $31,2b-1b(%0)\n" \
" lda $31,2b-1b(%0)\n" \
".previous" \
".previous" \
: "=r"(__pu_err) \
: "=r"(__pu_err) \
...
@@ -250,7 +250,7 @@ __asm__ __volatile__("1: stq %r2,%1\n" \
...
@@ -250,7 +250,7 @@ __asm__ __volatile__("1: stq %r2,%1\n" \
__asm__ __volatile__("1: stl %r2,%1\n" \
__asm__ __volatile__("1: stl %r2,%1\n" \
"2:\n" \
"2:\n" \
".section __ex_table,\"a\"\n" \
".section __ex_table,\"a\"\n" \
" .
gprel32 1b
\n" \
" .
long 1b - .
\n" \
" lda $31,2b-1b(%0)\n" \
" lda $31,2b-1b(%0)\n" \
".previous" \
".previous" \
: "=r"(__pu_err) \
: "=r"(__pu_err) \
...
@@ -263,7 +263,7 @@ __asm__ __volatile__("1: stl %r2,%1\n" \
...
@@ -263,7 +263,7 @@ __asm__ __volatile__("1: stl %r2,%1\n" \
__asm__ __volatile__("1: stw %r2,%1\n" \
__asm__ __volatile__("1: stw %r2,%1\n" \
"2:\n" \
"2:\n" \
".section __ex_table,\"a\"\n" \
".section __ex_table,\"a\"\n" \
" .
gprel32 1b
\n" \
" .
long 1b - .
\n" \
" lda $31,2b-1b(%0)\n" \
" lda $31,2b-1b(%0)\n" \
".previous" \
".previous" \
: "=r"(__pu_err) \
: "=r"(__pu_err) \
...
@@ -273,7 +273,7 @@ __asm__ __volatile__("1: stw %r2,%1\n" \
...
@@ -273,7 +273,7 @@ __asm__ __volatile__("1: stw %r2,%1\n" \
__asm__ __volatile__("1: stb %r2,%1\n" \
__asm__ __volatile__("1: stb %r2,%1\n" \
"2:\n" \
"2:\n" \
".section __ex_table,\"a\"\n" \
".section __ex_table,\"a\"\n" \
" .
gprel32 1b
\n" \
" .
long 1b - .
\n" \
" lda $31,2b-1b(%0)\n" \
" lda $31,2b-1b(%0)\n" \
".previous" \
".previous" \
: "=r"(__pu_err) \
: "=r"(__pu_err) \
...
@@ -298,13 +298,13 @@ __asm__ __volatile__("1: stb %r2,%1\n" \
...
@@ -298,13 +298,13 @@ __asm__ __volatile__("1: stb %r2,%1\n" \
"4: stq_u %1,0(%5)\n" \
"4: stq_u %1,0(%5)\n" \
"5:\n" \
"5:\n" \
".section __ex_table,\"a\"\n" \
".section __ex_table,\"a\"\n" \
" .
gprel32 1b
\n" \
" .
long 1b - .
\n" \
" lda $31, 5b-1b(%0)\n" \
" lda $31, 5b-1b(%0)\n" \
" .
gprel32 2b
\n" \
" .
long 2b - .
\n" \
" lda $31, 5b-2b(%0)\n" \
" lda $31, 5b-2b(%0)\n" \
" .
gprel32 3b
\n" \
" .
long 3b - .
\n" \
" lda $31, 5b-3b(%0)\n" \
" lda $31, 5b-3b(%0)\n" \
" .
gprel32 4b
\n" \
" .
long 4b - .
\n" \
" lda $31, 5b-4b(%0)\n" \
" lda $31, 5b-4b(%0)\n" \
".previous" \
".previous" \
: "=r"(__pu_err), "=&r"(__pu_tmp1), \
: "=r"(__pu_err), "=&r"(__pu_tmp1), \
...
@@ -324,9 +324,9 @@ __asm__ __volatile__("1: stb %r2,%1\n" \
...
@@ -324,9 +324,9 @@ __asm__ __volatile__("1: stb %r2,%1\n" \
"2: stq_u %1,0(%4)\n" \
"2: stq_u %1,0(%4)\n" \
"3:\n" \
"3:\n" \
".section __ex_table,\"a\"\n" \
".section __ex_table,\"a\"\n" \
" .
gprel32 1b
\n" \
" .
long 1b - .
\n" \
" lda $31, 3b-1b(%0)\n" \
" lda $31, 3b-1b(%0)\n" \
" .
gprel32 2b
\n" \
" .
long 2b - .
\n" \
" lda $31, 3b-2b(%0)\n" \
" lda $31, 3b-2b(%0)\n" \
".previous" \
".previous" \
: "=r"(__pu_err), \
: "=r"(__pu_err), \
...
@@ -356,7 +356,7 @@ __copy_tofrom_user_nocheck(void *to, const void *from, long len)
...
@@ -356,7 +356,7 @@ __copy_tofrom_user_nocheck(void *to, const void *from, long len)
register
long
__cu_len
__asm__
(
"$0"
)
=
len
;
register
long
__cu_len
__asm__
(
"$0"
)
=
len
;
__asm__
__volatile__
(
__asm__
__volatile__
(
"jsr $28,(%3),__copy_user
\n\t
ldgp $29,0($28)
"
"jsr $28,(%3),__copy_user"
:
"=r"
(
__cu_len
),
"=r"
(
__cu_from
),
"=r"
(
__cu_to
),
"=r"
(
pv
)
:
"=r"
(
__cu_len
),
"=r"
(
__cu_from
),
"=r"
(
__cu_to
),
"=r"
(
pv
)
:
"0"
(
__cu_len
),
"1"
(
__cu_from
),
"2"
(
__cu_to
),
"3"
(
pv
)
:
"0"
(
__cu_len
),
"1"
(
__cu_from
),
"2"
(
__cu_to
),
"3"
(
pv
)
:
"$1"
,
"$2"
,
"$3"
,
"$4"
,
"$5"
,
"$28"
,
"memory"
);
:
"$1"
,
"$2"
,
"$3"
,
"$4"
,
"$5"
,
"$28"
,
"memory"
);
...
@@ -373,7 +373,7 @@ __copy_tofrom_user(void *to, const void *from, long len, const void *validate)
...
@@ -373,7 +373,7 @@ __copy_tofrom_user(void *to, const void *from, long len, const void *validate)
register
const
void
*
__cu_from
__asm__
(
"$7"
)
=
from
;
register
const
void
*
__cu_from
__asm__
(
"$7"
)
=
from
;
register
long
__cu_len
__asm__
(
"$0"
)
=
len
;
register
long
__cu_len
__asm__
(
"$0"
)
=
len
;
__asm__
__volatile__
(
__asm__
__volatile__
(
"jsr $28,(%3),__copy_user
\n\t
ldgp $29,0($28)
"
"jsr $28,(%3),__copy_user"
:
"=r"
(
__cu_len
),
"=r"
(
__cu_from
),
"=r"
(
__cu_to
),
:
"=r"
(
__cu_len
),
"=r"
(
__cu_from
),
"=r"
(
__cu_to
),
"=r"
(
pv
)
"=r"
(
pv
)
:
"0"
(
__cu_len
),
"1"
(
__cu_from
),
"2"
(
__cu_to
),
:
"0"
(
__cu_len
),
"1"
(
__cu_from
),
"2"
(
__cu_to
),
...
@@ -413,7 +413,7 @@ __clear_user(void *to, long len)
...
@@ -413,7 +413,7 @@ __clear_user(void *to, long len)
register
void
*
__cl_to
__asm__
(
"$6"
)
=
to
;
register
void
*
__cl_to
__asm__
(
"$6"
)
=
to
;
register
long
__cl_len
__asm__
(
"$0"
)
=
len
;
register
long
__cl_len
__asm__
(
"$0"
)
=
len
;
__asm__
__volatile__
(
__asm__
__volatile__
(
"jsr $28,(%2),__do_clear_user
\n\t
ldgp $29,0($28)
"
"jsr $28,(%2),__do_clear_user"
:
"=r"
(
__cl_len
),
"=r"
(
__cl_to
),
"=r"
(
pv
)
:
"=r"
(
__cl_len
),
"=r"
(
__cl_to
),
"=r"
(
pv
)
:
"0"
(
__cl_len
),
"1"
(
__cl_to
),
"2"
(
pv
)
:
"0"
(
__cl_len
),
"1"
(
__cl_to
),
"2"
(
pv
)
:
"$1"
,
"$2"
,
"$3"
,
"$4"
,
"$5"
,
"$28"
,
"memory"
);
:
"$1"
,
"$2"
,
"$3"
,
"$4"
,
"$5"
,
"$28"
,
"memory"
);
...
@@ -428,7 +428,7 @@ clear_user(void *to, long len)
...
@@ -428,7 +428,7 @@ clear_user(void *to, long len)
register
void
*
__cl_to
__asm__
(
"$6"
)
=
to
;
register
void
*
__cl_to
__asm__
(
"$6"
)
=
to
;
register
long
__cl_len
__asm__
(
"$0"
)
=
len
;
register
long
__cl_len
__asm__
(
"$0"
)
=
len
;
__asm__
__volatile__
(
__asm__
__volatile__
(
"jsr $28,(%2),__do_clear_user
\n\t
ldgp $29,0($28)
"
"jsr $28,(%2),__do_clear_user"
:
"=r"
(
__cl_len
),
"=r"
(
__cl_to
),
"=r"
(
pv
)
:
"=r"
(
__cl_len
),
"=r"
(
__cl_to
),
"=r"
(
pv
)
:
"0"
(
__cl_len
),
"1"
(
__cl_to
),
"2"
(
pv
)
:
"0"
(
__cl_len
),
"1"
(
__cl_to
),
"2"
(
pv
)
:
"$1"
,
"$2"
,
"$3"
,
"$4"
,
"$5"
,
"$28"
,
"memory"
);
:
"$1"
,
"$2"
,
"$3"
,
"$4"
,
"$5"
,
"$28"
,
"memory"
);
...
@@ -471,7 +471,7 @@ extern inline long strnlen_user(const char *str, long n)
...
@@ -471,7 +471,7 @@ extern inline long strnlen_user(const char *str, long n)
/*
/*
* About the exception table:
* About the exception table:
*
*
* - insn is a 32-bit
offset off of the kernel's or module's gp
.
* - insn is a 32-bit
pc-relative offset from the faulting insn
.
* - nextinsn is a 16-bit offset off of the faulting instruction
* - nextinsn is a 16-bit offset off of the faulting instruction
* (not off of the *next* instruction as branches are).
* (not off of the *next* instruction as branches are).
* - errreg is the register in which to place -EFAULT.
* - errreg is the register in which to place -EFAULT.
...
@@ -502,7 +502,7 @@ struct exception_table_entry
...
@@ -502,7 +502,7 @@ struct exception_table_entry
};
};
/* Returns 0 if exception not found and fixup.unit otherwise. */
/* Returns 0 if exception not found and fixup.unit otherwise. */
extern
unsigned
search_exception_table
(
unsigned
long
,
unsigned
long
);
extern
unsigned
search_exception_table
(
unsigned
long
);
/* Returns the new pc */
/* Returns the new pc */
#define fixup_exception(map_reg, fixup_unit, pc) \
#define fixup_exception(map_reg, fixup_unit, pc) \
...
...
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