Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci
Commits
d3c60047
Commit
d3c60047
authored
Oct 16, 2008
by
Thomas Gleixner
Committed by
Ingo Molnar
Oct 16, 2008
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
genirq: cleanup the sparseirq modifications
Signed-off-by:
Thomas Gleixner
<
tglx@linutronix.de
>
parent
a1aca5de
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
48 additions
and
55 deletions
+48
-55
kernel/irq/chip.c
kernel/irq/chip.c
+13
-30
kernel/irq/handle.c
kernel/irq/handle.c
+1
-2
kernel/irq/manage.c
kernel/irq/manage.c
+23
-15
kernel/irq/proc.c
kernel/irq/proc.c
+1
-0
kernel/irq/spurious.c
kernel/irq/spurious.c
+10
-8
No files found.
kernel/irq/chip.c
View file @
d3c60047
...
...
@@ -24,11 +24,9 @@
*/
void
dynamic_irq_init
(
unsigned
int
irq
)
{
struct
irq_desc
*
desc
;
struct
irq_desc
*
desc
=
irq_to_desc
(
irq
)
;
unsigned
long
flags
;
/* first time to use this irq_desc */
desc
=
irq_to_desc
(
irq
);
if
(
!
desc
)
{
WARN
(
1
,
KERN_ERR
"Trying to initialize invalid IRQ%d
\n
"
,
irq
);
return
;
...
...
@@ -58,10 +56,9 @@ void dynamic_irq_init(unsigned int irq)
*/
void
dynamic_irq_cleanup
(
unsigned
int
irq
)
{
struct
irq_desc
*
desc
;
struct
irq_desc
*
desc
=
irq_to_desc
(
irq
)
;
unsigned
long
flags
;
desc
=
irq_to_desc
(
irq
);
if
(
!
desc
)
{
WARN
(
1
,
KERN_ERR
"Trying to cleanup invalid IRQ%d
\n
"
,
irq
);
return
;
...
...
@@ -90,10 +87,9 @@ void dynamic_irq_cleanup(unsigned int irq)
*/
int
set_irq_chip
(
unsigned
int
irq
,
struct
irq_chip
*
chip
)
{
struct
irq_desc
*
desc
;
struct
irq_desc
*
desc
=
irq_to_desc
(
irq
)
;
unsigned
long
flags
;
desc
=
irq_to_desc
(
irq
);
if
(
!
desc
)
{
WARN
(
1
,
KERN_ERR
"Trying to install chip for IRQ%d
\n
"
,
irq
);
return
-
EINVAL
;
...
...
@@ -118,11 +114,10 @@ EXPORT_SYMBOL(set_irq_chip);
*/
int
set_irq_type
(
unsigned
int
irq
,
unsigned
int
type
)
{
struct
irq_desc
*
desc
;
struct
irq_desc
*
desc
=
irq_to_desc
(
irq
)
;
unsigned
long
flags
;
int
ret
=
-
ENXIO
;
desc
=
irq_to_desc
(
irq
);
if
(
!
desc
)
{
printk
(
KERN_ERR
"Trying to set irq type for IRQ%d
\n
"
,
irq
);
return
-
ENODEV
;
...
...
@@ -147,10 +142,9 @@ EXPORT_SYMBOL(set_irq_type);
*/
int
set_irq_data
(
unsigned
int
irq
,
void
*
data
)
{
struct
irq_desc
*
desc
;
struct
irq_desc
*
desc
=
irq_to_desc
(
irq
)
;
unsigned
long
flags
;
desc
=
irq_to_desc
(
irq
);
if
(
!
desc
)
{
printk
(
KERN_ERR
"Trying to install controller data for IRQ%d
\n
"
,
irq
);
...
...
@@ -173,10 +167,9 @@ EXPORT_SYMBOL(set_irq_data);
*/
int
set_irq_msi
(
unsigned
int
irq
,
struct
msi_desc
*
entry
)
{
struct
irq_desc
*
desc
;
struct
irq_desc
*
desc
=
irq_to_desc
(
irq
)
;
unsigned
long
flags
;
desc
=
irq_to_desc
(
irq
);
if
(
!
desc
)
{
printk
(
KERN_ERR
"Trying to install msi data for IRQ%d
\n
"
,
irq
);
...
...
@@ -200,10 +193,9 @@ int set_irq_msi(unsigned int irq, struct msi_desc *entry)
*/
int
set_irq_chip_data
(
unsigned
int
irq
,
void
*
data
)
{
struct
irq_desc
*
desc
;
struct
irq_desc
*
desc
=
irq_to_desc
(
irq
)
;
unsigned
long
flags
;
desc
=
irq_to_desc
(
irq
);
if
(
!
desc
)
{
printk
(
KERN_ERR
"Trying to install chip data for IRQ%d
\n
"
,
irq
);
...
...
@@ -228,9 +220,8 @@ EXPORT_SYMBOL(set_irq_chip_data);
*/
static
void
default_enable
(
unsigned
int
irq
)
{
struct
irq_desc
*
desc
;
struct
irq_desc
*
desc
=
irq_to_desc
(
irq
)
;
desc
=
irq_to_desc
(
irq
);
desc
->
chip
->
unmask
(
irq
);
desc
->
status
&=
~
IRQ_MASKED
;
}
...
...
@@ -247,11 +238,9 @@ static void default_disable(unsigned int irq)
*/
static
unsigned
int
default_startup
(
unsigned
int
irq
)
{
struct
irq_desc
*
desc
;
struct
irq_desc
*
desc
=
irq_to_desc
(
irq
)
;
desc
=
irq_to_desc
(
irq
);
desc
->
chip
->
enable
(
irq
);
return
0
;
}
...
...
@@ -260,9 +249,8 @@ static unsigned int default_startup(unsigned int irq)
*/
static
void
default_shutdown
(
unsigned
int
irq
)
{
struct
irq_desc
*
desc
;
struct
irq_desc
*
desc
=
irq_to_desc
(
irq
)
;
desc
=
irq_to_desc
(
irq
);
desc
->
chip
->
mask
(
irq
);
desc
->
status
|=
IRQ_MASKED
;
}
...
...
@@ -550,10 +538,9 @@ void
__set_irq_handler
(
unsigned
int
irq
,
irq_flow_handler_t
handle
,
int
is_chained
,
const
char
*
name
)
{
struct
irq_desc
*
desc
;
struct
irq_desc
*
desc
=
irq_to_desc
(
irq
)
;
unsigned
long
flags
;
desc
=
irq_to_desc
(
irq
);
if
(
!
desc
)
{
printk
(
KERN_ERR
"Trying to install type control for IRQ%d
\n
"
,
irq
);
...
...
@@ -614,13 +601,11 @@ set_irq_chip_and_handler_name(unsigned int irq, struct irq_chip *chip,
void
__init
set_irq_noprobe
(
unsigned
int
irq
)
{
struct
irq_desc
*
desc
;
struct
irq_desc
*
desc
=
irq_to_desc
(
irq
)
;
unsigned
long
flags
;
desc
=
irq_to_desc
(
irq
);
if
(
!
desc
)
{
printk
(
KERN_ERR
"Trying to mark IRQ%d non-probeable
\n
"
,
irq
);
return
;
}
...
...
@@ -631,13 +616,11 @@ void __init set_irq_noprobe(unsigned int irq)
void
__init
set_irq_probe
(
unsigned
int
irq
)
{
struct
irq_desc
*
desc
;
struct
irq_desc
*
desc
=
irq_to_desc
(
irq
)
;
unsigned
long
flags
;
desc
=
irq_to_desc
(
irq
);
if
(
!
desc
)
{
printk
(
KERN_ERR
"Trying to mark IRQ%d probeable
\n
"
,
irq
);
return
;
}
...
...
kernel/irq/handle.c
View file @
d3c60047
...
...
@@ -68,9 +68,8 @@ struct irq_desc irq_desc[NR_IRQS] __cacheline_aligned_in_smp = {
*/
static
void
ack_bad
(
unsigned
int
irq
)
{
struct
irq_desc
*
desc
;
struct
irq_desc
*
desc
=
irq_to_desc
(
irq
)
;
desc
=
irq_to_desc
(
irq
);
print_irq_desc
(
irq
,
desc
);
ack_bad_irq
(
irq
);
}
...
...
kernel/irq/manage.c
View file @
d3c60047
...
...
@@ -140,10 +140,9 @@ int irq_select_affinity(unsigned int irq)
*/
void
disable_irq_nosync
(
unsigned
int
irq
)
{
struct
irq_desc
*
desc
;
struct
irq_desc
*
desc
=
irq_to_desc
(
irq
)
;
unsigned
long
flags
;
desc
=
irq_to_desc
(
irq
);
if
(
!
desc
)
return
;
...
...
@@ -170,9 +169,8 @@ EXPORT_SYMBOL(disable_irq_nosync);
*/
void
disable_irq
(
unsigned
int
irq
)
{
struct
irq_desc
*
desc
;
struct
irq_desc
*
desc
=
irq_to_desc
(
irq
)
;
desc
=
irq_to_desc
(
irq
);
if
(
!
desc
)
return
;
...
...
@@ -213,10 +211,9 @@ static void __enable_irq(struct irq_desc *desc, unsigned int irq)
*/
void
enable_irq
(
unsigned
int
irq
)
{
struct
irq_desc
*
desc
;
struct
irq_desc
*
desc
=
irq_to_desc
(
irq
)
;
unsigned
long
flags
;
desc
=
irq_to_desc
(
irq
);
if
(
!
desc
)
return
;
...
...
@@ -291,10 +288,9 @@ EXPORT_SYMBOL(set_irq_wake);
*/
int
can_request_irq
(
unsigned
int
irq
,
unsigned
long
irqflags
)
{
struct
irq_desc
*
desc
;
struct
irq_desc
*
desc
=
irq_to_desc
(
irq
)
;
struct
irqaction
*
action
;
desc
=
irq_to_desc
(
irq
);
if
(
!
desc
)
return
0
;
...
...
@@ -355,16 +351,15 @@ int __irq_set_trigger(struct irq_desc *desc, unsigned int irq,
* Internal function to register an irqaction - typically used to
* allocate special interrupts that are part of the architecture.
*/
int
setup_irq
(
unsigned
int
irq
,
struct
irqaction
*
new
)
static
int
__setup_irq
(
unsigned
int
irq
,
struct
irq_desc
*
desc
,
struct
irqaction
*
new
)
{
struct
irq_desc
*
desc
;
struct
irqaction
*
old
,
**
p
;
const
char
*
old_name
=
NULL
;
unsigned
long
flags
;
int
shared
=
0
;
int
ret
;
desc
=
irq_to_desc
(
irq
);
if
(
!
desc
)
return
-
EINVAL
;
...
...
@@ -503,6 +498,20 @@ mismatch:
return
-
EBUSY
;
}
/**
* setup_irq - setup an interrupt
* @irq: Interrupt line to setup
* @act: irqaction for the interrupt
*
* Used to statically setup interrupts in the early boot process.
*/
int
setup_irq
(
unsigned
int
irq
,
struct
irqaction
*
act
)
{
struct
irq_desc
*
desc
=
irq_to_desc
(
irq
);
return
__setup_irq
(
irq
,
desc
,
act
);
}
/**
* free_irq - free an interrupt
* @irq: Interrupt line to free
...
...
@@ -519,13 +528,12 @@ mismatch:
*/
void
free_irq
(
unsigned
int
irq
,
void
*
dev_id
)
{
struct
irq_desc
*
desc
;
struct
irq_desc
*
desc
=
irq_to_desc
(
irq
)
;
struct
irqaction
**
p
;
unsigned
long
flags
;
WARN_ON
(
in_interrupt
());
desc
=
irq_to_desc
(
irq
);
if
(
!
desc
)
return
;
...
...
@@ -624,8 +632,8 @@ int request_irq(unsigned int irq, irq_handler_t handler,
unsigned
long
irqflags
,
const
char
*
devname
,
void
*
dev_id
)
{
struct
irqaction
*
action
;
int
retval
;
struct
irq_desc
*
desc
;
int
retval
;
#ifdef CONFIG_LOCKDEP
/*
...
...
@@ -662,7 +670,7 @@ int request_irq(unsigned int irq, irq_handler_t handler,
action
->
next
=
NULL
;
action
->
dev_id
=
dev_id
;
retval
=
setup_irq
(
irq
,
action
);
retval
=
__setup_irq
(
irq
,
desc
,
action
);
if
(
retval
)
kfree
(
action
);
...
...
kernel/irq/proc.c
View file @
d3c60047
...
...
@@ -215,6 +215,7 @@ void unregister_handler_proc(unsigned int irq, struct irqaction *action)
{
if
(
action
->
dir
)
{
struct
irq_desc
*
desc
=
irq_to_desc
(
irq
);
remove_proc_entry
(
action
->
dir
->
name
,
desc
->
dir
);
}
}
...
...
kernel/irq/spurious.c
View file @
d3c60047
...
...
@@ -26,8 +26,7 @@ static DEFINE_TIMER(poll_spurious_irq_timer, poll_spurious_irqs, 0, 0);
static
int
try_one_irq
(
int
irq
,
struct
irq_desc
*
desc
)
{
struct
irqaction
*
action
;
int
ok
=
0
;
int
work
=
0
;
/* Did we do work for a real IRQ */
int
ok
=
0
,
work
=
0
;
spin_lock
(
&
desc
->
lock
);
/* Already running on another processor */
...
...
@@ -88,9 +87,8 @@ static int try_one_irq(int irq, struct irq_desc *desc)
static
int
misrouted_irq
(
int
irq
)
{
int
i
;
int
ok
=
0
;
struct
irq_desc
*
desc
;
int
i
,
ok
=
0
;
for_each_irq_desc
(
i
,
desc
)
{
if
(
!
i
)
...
...
@@ -108,8 +106,8 @@ static int misrouted_irq(int irq)
static
void
poll_spurious_irqs
(
unsigned
long
dummy
)
{
int
i
;
struct
irq_desc
*
desc
;
int
i
;
for_each_irq_desc
(
i
,
desc
)
{
unsigned
int
status
;
...
...
@@ -126,7 +124,8 @@ static void poll_spurious_irqs(unsigned long dummy)
try_one_irq
(
i
,
desc
);
}
mod_timer
(
&
poll_spurious_irq_timer
,
jiffies
+
POLL_SPURIOUS_IRQ_INTERVAL
);
mod_timer
(
&
poll_spurious_irq_timer
,
jiffies
+
POLL_SPURIOUS_IRQ_INTERVAL
);
}
/*
...
...
@@ -177,7 +176,9 @@ report_bad_irq(unsigned int irq, struct irq_desc *desc, irqreturn_t action_ret)
}
}
static
inline
int
try_misrouted_irq
(
unsigned
int
irq
,
struct
irq_desc
*
desc
,
irqreturn_t
action_ret
)
static
inline
int
try_misrouted_irq
(
unsigned
int
irq
,
struct
irq_desc
*
desc
,
irqreturn_t
action_ret
)
{
struct
irqaction
*
action
;
...
...
@@ -253,7 +254,8 @@ void note_interrupt(unsigned int irq, struct irq_desc *desc,
desc
->
depth
++
;
desc
->
chip
->
disable
(
irq
);
mod_timer
(
&
poll_spurious_irq_timer
,
jiffies
+
POLL_SPURIOUS_IRQ_INTERVAL
);
mod_timer
(
&
poll_spurious_irq_timer
,
jiffies
+
POLL_SPURIOUS_IRQ_INTERVAL
);
}
desc
->
irqs_unhandled
=
0
;
}
...
...
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