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
192ef366
Commit
192ef366
authored
Jul 07, 2006
by
Ralf Baechle
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[MIPS] TRACE_IRQFLAGS_SUPPORT support.
Signed-off-by:
Ralf Baechle
<
ralf@linux-mips.org
>
parent
8d197f3d
Changes
15
Show whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
91 additions
and
39 deletions
+91
-39
arch/mips/Kconfig.debug
arch/mips/Kconfig.debug
+4
-0
arch/mips/kernel/entry.S
arch/mips/kernel/entry.S
+15
-0
arch/mips/kernel/gdb-low.S
arch/mips/kernel/gdb-low.S
+2
-0
arch/mips/kernel/genex.S
arch/mips/kernel/genex.S
+6
-0
arch/mips/kernel/head.S
arch/mips/kernel/head.S
+2
-1
arch/mips/kernel/scall32-o32.S
arch/mips/kernel/scall32-o32.S
+14
-1
arch/mips/kernel/scall64-64.S
arch/mips/kernel/scall64-64.S
+2
-0
arch/mips/kernel/scall64-n32.S
arch/mips/kernel/scall64-n32.S
+2
-0
arch/mips/kernel/scall64-o32.S
arch/mips/kernel/scall64-o32.S
+2
-0
arch/mips/kernel/smtc-asm.S
arch/mips/kernel/smtc-asm.S
+1
-0
include/asm-mips/atomic.h
include/asm-mips/atomic.h
+1
-1
include/asm-mips/bitops.h
include/asm-mips/bitops.h
+1
-1
include/asm-mips/irqflags.h
include/asm-mips/irqflags.h
+37
-33
include/asm-mips/mipsregs.h
include/asm-mips/mipsregs.h
+1
-1
include/asm-mips/system.h
include/asm-mips/system.h
+1
-1
No files found.
arch/mips/Kconfig.debug
View file @
192ef366
menu "Kernel hacking"
config TRACE_IRQFLAGS_SUPPORT
bool
default y
source "lib/Kconfig.debug"
config CROSSCOMPILE
...
...
arch/mips/kernel/entry.S
View file @
192ef366
...
...
@@ -113,6 +113,21 @@ FEXPORT(restore_all) # restore full frame
RESTORE_AT
RESTORE_STATIC
FEXPORT
(
restore_partial
)
#
restore
partial
frame
#ifdef CONFIG_TRACE_IRQFLAGS
SAVE_STATIC
SAVE_AT
SAVE_TEMP
LONG_L
v0
,
PT_STATUS
(
sp
)
and
v0
,
1
beqz
v0
,
1
f
jal
trace_hardirqs_on
b
2
f
1
:
jal
trace_hardirqs_off
2
:
RESTORE_TEMP
RESTORE_AT
RESTORE_STATIC
#endif
RESTORE_SOME
RESTORE_SP_AND_RET
.
set
at
...
...
arch/mips/kernel/gdb-low.S
View file @
192ef366
...
...
@@ -7,6 +7,7 @@
#include <asm/asm.h>
#include <asm/errno.h>
#include <asm/irqflags.h>
#include <asm/mipsregs.h>
#include <asm/regdef.h>
#include <asm/stackframe.h>
...
...
@@ -120,6 +121,7 @@
LONG_S
$
31
,
GDB_FR_REG31
(
sp
)
CLI
/*
disable
interrupts
*/
TRACE_IRQS_OFF
/*
*
Followed
by
the
floating
point
registers
...
...
arch/mips/kernel/genex.S
View file @
192ef366
...
...
@@ -13,6 +13,7 @@
#include <asm/asm.h>
#include <asm/asmmacro.h>
#include <asm/cacheops.h>
#include <asm/irqflags.h>
#include <asm/regdef.h>
#include <asm/fpregdef.h>
#include <asm/mipsregs.h>
...
...
@@ -128,6 +129,7 @@ handle_vcei:
NESTED
(
handle_int
,
PT_SIZE
,
sp
)
SAVE_ALL
CLI
TRACE_IRQS_OFF
PTR_LA
ra
,
ret_from_irq
move
a0
,
sp
...
...
@@ -216,6 +218,7 @@ NESTED(except_vec_vi_handler, 0, sp)
_ehb
#endif /* CONFIG_MIPS_MT_SMTC */
CLI
TRACE_IRQS_OFF
move
a0
,
sp
jalr
v0
j
ret_from_irq
...
...
@@ -288,11 +291,13 @@ NESTED(nmi_handler, PT_SIZE, sp)
.
endm
.
macro
__build_clear_sti
TRACE_IRQS_ON
STI
.
endm
.
macro
__build_clear_cli
CLI
TRACE_IRQS_OFF
.
endm
.
macro
__build_clear_fpe
...
...
@@ -300,6 +305,7 @@ NESTED(nmi_handler, PT_SIZE, sp)
li
a2
,
~
(
0x3f
<<
12
)
and
a2
,
a1
ctc1
a2
,
fcr31
TRACE_IRQS_ON
STI
.
endm
...
...
arch/mips/kernel/head.S
View file @
192ef366
...
...
@@ -5,7 +5,7 @@
*
*
Copyright
(
C
)
1994
,
1995
Waldorf
Electronics
*
Written
by
Ralf
Baechle
and
Andreas
Busse
*
Copyright
(
C
)
1994
,
95
,
96
,
97
,
98
,
99
,
2003
Ralf
Baechle
*
Copyright
(
C
)
1994
-
99
,
2003
,
06
Ralf
Baechle
*
Copyright
(
C
)
1996
Paul
M
.
Antoine
*
Modified
for
DECStation
and
hence
R3000
support
by
Paul
M
.
Antoine
*
Further
modifications
by
David
S
.
Miller
and
Harald
Koerfgen
...
...
@@ -18,6 +18,7 @@
#include <asm/asm.h>
#include <asm/asmmacro.h>
#include <asm/irqflags.h>
#include <asm/regdef.h>
#include <asm/page.h>
#include <asm/mipsregs.h>
...
...
arch/mips/kernel/scall32-o32.S
View file @
192ef366
...
...
@@ -3,13 +3,14 @@
*
License
.
See
the
file
"COPYING"
in
the
main
directory
of
this
archive
*
for
more
details
.
*
*
Copyright
(
C
)
1995
,
96
,
97
,
98
,
99
,
2000
,
01
,
02
by
Ralf
Baechle
*
Copyright
(
C
)
1995
-
99
,
2000
-
02
,
06
Ralf
Baechle
<
ralf
@
linux
-
mips
.
org
>
*
Copyright
(
C
)
2001
MIPS
Technologies
,
Inc
.
*
Copyright
(
C
)
2004
Thiemo
Seufer
*/
#include <linux/errno.h>
#include <asm/asm.h>
#include <asm/asmmacro.h>
#include <asm/irqflags.h>
#include <asm/mipsregs.h>
#include <asm/regdef.h>
#include <asm/stackframe.h>
...
...
@@ -27,6 +28,18 @@
NESTED
(
handle_sys
,
PT_SIZE
,
sp
)
.
set
noat
SAVE_SOME
#ifdef CONFIG_TRACE_IRQFLAGS
TRACE_IRQS_ON
#ifdef CONFIG_64BIT
LONG_L
$
8
,
PT_R8
(
sp
)
LONG_L
$
9
,
PT_R9
(
sp
)
#endif
LONG_L
$
7
,
PT_R7
(
sp
)
LONG_L
$
6
,
PT_R6
(
sp
)
LONG_L
$
5
,
PT_R5
(
sp
)
LONG_L
$
4
,
PT_R4
(
sp
)
LONG_L
$
2
,
PT_R2
(
sp
)
#endif
STI
.
set
at
...
...
arch/mips/kernel/scall64-64.S
View file @
192ef366
...
...
@@ -10,6 +10,7 @@
#include <linux/errno.h>
#include <asm/asm.h>
#include <asm/asmmacro.h>
#include <asm/irqflags.h>
#include <asm/mipsregs.h>
#include <asm/regdef.h>
#include <asm/stackframe.h>
...
...
@@ -33,6 +34,7 @@ NESTED(handle_sys64, PT_SIZE, sp)
*/
.
set
noat
SAVE_SOME
TRACE_IRQS_ON
STI
.
set
at
#endif
...
...
arch/mips/kernel/scall64-n32.S
View file @
192ef366
...
...
@@ -10,6 +10,7 @@
#include <linux/errno.h>
#include <asm/asm.h>
#include <asm/asmmacro.h>
#include <asm/irqflags.h>
#include <asm/mipsregs.h>
#include <asm/regdef.h>
#include <asm/stackframe.h>
...
...
@@ -32,6 +33,7 @@ NESTED(handle_sysn32, PT_SIZE, sp)
#ifndef CONFIG_MIPS32_O32
.
set
noat
SAVE_SOME
TRACE_IRQS_ON
STI
.
set
at
#endif
...
...
arch/mips/kernel/scall64-o32.S
View file @
192ef366
...
...
@@ -16,6 +16,7 @@
#include <linux/errno.h>
#include <asm/asm.h>
#include <asm/asmmacro.h>
#include <asm/irqflags.h>
#include <asm/mipsregs.h>
#include <asm/regdef.h>
#include <asm/stackframe.h>
...
...
@@ -27,6 +28,7 @@
NESTED
(
handle_sys
,
PT_SIZE
,
sp
)
.
set
noat
SAVE_SOME
TRACE_IRQS_ON
STI
.
set
at
ld
t1
,
PT_EPC
(
sp
)
#
skip
syscall
on
return
...
...
arch/mips/kernel/smtc-asm.S
View file @
192ef366
...
...
@@ -96,6 +96,7 @@ FEXPORT(__smtc_ipi_vector)
/
*
Save
all
will
redundantly
recompute
the
SP
,
but
use
it
for
now
*/
SAVE_ALL
CLI
TRACE_IRQS_OFF
move
a0
,
sp
/
*
Function
to
be
invoked
passed
stack
pad
slot
5
*/
lw
t0
,
PT_PADSLOT5
(
sp
)
...
...
include/asm-mips/atomic.h
View file @
192ef366
...
...
@@ -22,8 +22,8 @@
#ifndef _ASM_ATOMIC_H
#define _ASM_ATOMIC_H
#include <linux/irqflags.h>
#include <asm/cpu-features.h>
#include <asm/interrupt.h>
#include <asm/war.h>
typedef
struct
{
volatile
int
counter
;
}
atomic_t
;
...
...
include/asm-mips/bitops.h
View file @
192ef366
...
...
@@ -31,7 +31,7 @@
#ifdef __KERNEL__
#include <
asm/interrupt
.h>
#include <
linux/irqflags
.h>
#include <asm/sgidefs.h>
#include <asm/war.h>
...
...
include/asm-mips/i
nterrupt
.h
→
include/asm-mips/i
rqflags
.h
View file @
192ef366
...
...
@@ -8,13 +8,15 @@
* Copyright (C) 1999 Silicon Graphics
* Copyright (C) 2000 MIPS Technologies, Inc.
*/
#ifndef _ASM_INTERRUPT_H
#define _ASM_INTERRUPT_H
#ifndef _ASM_IRQFLAGS_H
#define _ASM_IRQFLAGS_H
#ifndef __ASSEMBLY__
#include <asm/hazards.h>
__asm__
(
" .macro local_irq_enable
\n
"
" .macro
raw_
local_irq_enable
\n
"
" .set push
\n
"
" .set reorder
\n
"
" .set noat
\n
"
...
...
@@ -35,10 +37,10 @@ __asm__ (
" .set pop
\n
"
" .endm"
);
static
inline
void
local_irq_enable
(
void
)
static
inline
void
raw_
local_irq_enable
(
void
)
{
__asm__
__volatile__
(
"local_irq_enable"
"
raw_
local_irq_enable"
:
/* no outputs */
:
/* no inputs */
:
"memory"
);
...
...
@@ -63,7 +65,7 @@ static inline void local_irq_enable(void)
* Workaround: mask EXL bit of the result or place a nop before mfc0.
*/
__asm__
(
" .macro local_irq_disable
\n
"
" .macro
raw_
local_irq_disable
\n
"
" .set push
\n
"
" .set noat
\n
"
#ifdef CONFIG_MIPS_MT_SMTC
...
...
@@ -84,17 +86,17 @@ __asm__ (
" .set pop
\n
"
" .endm
\n
"
);
static
inline
void
local_irq_disable
(
void
)
static
inline
void
raw_
local_irq_disable
(
void
)
{
__asm__
__volatile__
(
"local_irq_disable"
"
raw_
local_irq_disable"
:
/* no outputs */
:
/* no inputs */
:
"memory"
);
}
__asm__
(
" .macro
local_save_flags flags
\n
"
" .macro
raw_local_save_flags flags
\n
"
" .set push
\n
"
" .set reorder
\n
"
#ifdef CONFIG_MIPS_MT_SMTC
...
...
@@ -105,13 +107,13 @@ __asm__ (
" .set pop
\n
"
" .endm
\n
"
);
#define local_save_flags(x) \
#define
raw_
local_save_flags(x) \
__asm__ __volatile__( \
"
local_save_flags %0"
\
"
raw_local_save_flags %0"
\
: "=r" (x))
__asm__
(
" .macro
local_irq_save result
\n
"
" .macro
raw_local_irq_save result
\n
"
" .set push
\n
"
" .set reorder
\n
"
" .set noat
\n
"
...
...
@@ -135,15 +137,15 @@ __asm__ (
" .set pop
\n
"
" .endm
\n
"
);
#define local_irq_save(x) \
#define
raw_
local_irq_save(x) \
__asm__ __volatile__( \
"
local_irq_save\t%0"
\
"
raw_local_irq_save\t%0"
\
: "=r" (x) \
:
/* no inputs */
\
: "memory")
__asm__
(
" .macro
local_irq_restore flags
\n
"
" .macro
raw_local_irq_restore flags
\n
"
" .set push
\n
"
" .set noreorder
\n
"
" .set noat
\n
"
...
...
@@ -182,40 +184,42 @@ __asm__ (
" .set pop
\n
"
" .endm
\n
"
);
#define local_irq_restore(flags) \
#define
raw_
local_irq_restore(flags) \
do { \
unsigned long __tmp1; \
\
__asm__ __volatile__( \
"
local_irq_restore\t%0"
\
"
raw_local_irq_restore\t%0"
\
: "=r" (__tmp1) \
: "0" (flags) \
: "memory"); \
} while(0)
static
inline
int
irqs_disabled
(
void
)
static
inline
int
raw_irqs_disabled_flags
(
unsigned
long
flags
)
{
#ifdef CONFIG_MIPS_MT_SMTC
/*
* SMTC model uses TCStatus.IXMT to disable interrupts for a thread/CPU
*/
unsigned
long
__result
;
__asm__
__volatile__
(
" .set noreorder
\n
"
" mfc0 %0, $2, 1
\n
"
" andi %0, 0x400
\n
"
" slt %0, $0, %0
\n
"
" .set reorder
\n
"
:
"=r"
(
__result
));
return
__result
;
return
flags
&
0x400
;
#else
unsigned
long
flags
;
local_save_flags
(
flags
);
return
!
(
flags
&
1
);
#endif
}
#endif
/* _ASM_INTERRUPT_H */
#endif
/*
* Do the CPU's IRQ-state tracing from assembly code.
*/
#ifdef CONFIG_TRACE_IRQFLAGS
# define TRACE_IRQS_ON \
jal trace_hardirqs_on
# define TRACE_IRQS_OFF \
jal trace_hardirqs_off
#else
# define TRACE_IRQS_ON
# define TRACE_IRQS_OFF
#endif
#endif
/* _ASM_IRQFLAGS_H */
include/asm-mips/mipsregs.h
View file @
192ef366
...
...
@@ -1417,7 +1417,7 @@ change_c0_##name(unsigned int change, unsigned int new) \
#else
/* SMTC versions that manage MT scheduling */
#include <
asm/interrupt
.h>
#include <
linux/irqflags
.h>
/*
* This is a duplicate of dmt() in mipsmtregs.h to avoid problems with
...
...
include/asm-mips/system.h
View file @
192ef366
...
...
@@ -13,13 +13,13 @@
#define _ASM_SYSTEM_H
#include <linux/types.h>
#include <linux/irqflags.h>
#include <asm/addrspace.h>
#include <asm/cpu-features.h>
#include <asm/dsp.h>
#include <asm/ptrace.h>
#include <asm/war.h>
#include <asm/interrupt.h>
/*
* read_barrier_depends - Flush all pending reads that subsequents reads
...
...
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