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
nexedi
linux
Commits
4a4cf779
Commit
4a4cf779
authored
Nov 06, 2006
by
Ralf Baechle
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[MIPS] Make irq number allocator generally available for fixing EV64120.
Signed-off-by:
Ralf Baechle
<
ralf@linux-mips.org
>
parent
325d08d1
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
46 additions
and
25 deletions
+46
-25
arch/mips/kernel/irq.c
arch/mips/kernel/irq.c
+42
-0
arch/mips/sgi-ip27/ip27-irq.c
arch/mips/sgi-ip27/ip27-irq.c
+0
-23
arch/mips/sgi-ip27/ip27-timer.c
arch/mips/sgi-ip27/ip27-timer.c
+0
-2
include/asm-mips/irq.h
include/asm-mips/irq.h
+4
-0
No files found.
arch/mips/kernel/irq.c
View file @
4a4cf779
...
...
@@ -26,6 +26,48 @@
#include <asm/system.h>
#include <asm/uaccess.h>
static
unsigned
long
irq_map
[
NR_IRQS
/
BITS_PER_LONG
];
int
__devinit
allocate_irqno
(
void
)
{
int
irq
;
again:
irq
=
find_first_zero_bit
(
irq_map
,
NR_IRQS
);
if
(
irq
>=
NR_IRQS
)
return
-
ENOSPC
;
if
(
test_and_set_bit
(
irq
,
irq_map
))
goto
again
;
return
irq
;
}
EXPORT_SYMBOL_GPL
(
allocate_irqno
);
/*
* Allocate the 16 legacy interrupts for i8259 devices. This happens early
* in the kernel initialization so treating allocation failure as BUG() is
* ok.
*/
void
__init
alloc_legacy_irqno
(
void
)
{
int
i
;
for
(
i
=
0
;
i
<=
16
;
i
++
)
BUG_ON
(
test_and_set_bit
(
i
,
irq_map
));
}
void
__devinit
free_irqno
(
unsigned
int
irq
)
{
smp_mb__before_clear_bit
();
clear_bit
(
irq
,
irq_map
);
smp_mb__after_clear_bit
();
}
EXPORT_SYMBOL_GPL
(
free_irqno
);
/*
* 'what should we do if we get a hw irq event on an illegal vector'.
* each architecture has to answer this themselves.
...
...
arch/mips/sgi-ip27/ip27-irq.c
View file @
4a4cf779
...
...
@@ -354,29 +354,6 @@ static struct irq_chip bridge_irq_type = {
.
end
=
end_bridge_irq
,
};
static
unsigned
long
irq_map
[
NR_IRQS
/
BITS_PER_LONG
];
int
allocate_irqno
(
void
)
{
int
irq
;
again:
irq
=
find_first_zero_bit
(
irq_map
,
NR_IRQS
);
if
(
irq
>=
NR_IRQS
)
return
-
ENOSPC
;
if
(
test_and_set_bit
(
irq
,
irq_map
))
goto
again
;
return
irq
;
}
void
free_irqno
(
unsigned
int
irq
)
{
clear_bit
(
irq
,
irq_map
);
}
void
__devinit
register_bridge_irq
(
unsigned
int
irq
)
{
irq_desc
[
irq
].
status
=
IRQ_DISABLED
;
...
...
arch/mips/sgi-ip27/ip27-timer.c
View file @
4a4cf779
...
...
@@ -214,8 +214,6 @@ static struct irqaction rt_irqaction = {
.
name
=
"timer"
};
extern
int
allocate_irqno
(
void
);
void
__init
plat_timer_setup
(
struct
irqaction
*
irq
)
{
int
irqno
=
allocate_irqno
();
...
...
include/asm-mips/irq.h
View file @
4a4cf779
...
...
@@ -74,4 +74,8 @@ extern int setup_irq_smtc(unsigned int irq, struct irqaction * new,
unsigned
long
hwmask
);
#endif
/* CONFIG_MIPS_MT_SMTC */
extern
int
allocate_irqno
(
void
);
extern
void
alloc_legacy_irqno
(
void
);
extern
void
free_irqno
(
unsigned
int
irq
);
#endif
/* _ASM_IRQ_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