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
5ca9305e
Commit
5ca9305e
authored
Jan 19, 2005
by
Russell King
Browse files
Options
Browse Files
Download
Plain Diff
Merge flint.arm.linux.org.uk:/usr/src/bk/linux-2.6-smp
into flint.arm.linux.org.uk:/usr/src/bk/linux-2.6-rmk
parents
431f94fb
a8af92ce
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
40 additions
and
50 deletions
+40
-50
arch/arm/kernel/smp.c
arch/arm/kernel/smp.c
+40
-50
No files found.
arch/arm/kernel/smp.c
View file @
5ca9305e
...
@@ -314,67 +314,57 @@ static void ipi_cpu_stop(unsigned int cpu)
...
@@ -314,67 +314,57 @@ static void ipi_cpu_stop(unsigned int cpu)
*
*
* Bit 0 - Inter-processor function call
* Bit 0 - Inter-processor function call
*/
*/
void
do_IPI
(
unsigned
int
ipimask
,
struct
pt_regs
*
regs
)
void
do_IPI
(
struct
pt_regs
*
regs
)
{
{
unsigned
int
cpu
=
smp_processor_id
();
unsigned
int
cpu
=
smp_processor_id
();
struct
ipi_data
*
ipi
=
&
per_cpu
(
ipi_data
,
cpu
);
struct
ipi_data
*
ipi
=
&
per_cpu
(
ipi_data
,
cpu
);
ipi
->
ipi_count
++
;
ipi
->
ipi_count
++
;
if
(
ipimask
&
(
1
<<
0
))
{
for
(;;)
{
for
(;;)
{
unsigned
long
msgs
;
unsigned
long
msgs
;
spin_lock
(
&
ipi
->
lock
);
spin_lock
(
&
ipi
->
lock
);
msgs
=
ipi
->
bits
;
msgs
=
ipi
->
bits
;
ipi
->
bits
=
0
;
ipi
->
bits
=
0
;
spin_unlock
(
&
ipi
->
lock
);
spin_unlock
(
&
ipi
->
lock
);
if
(
!
msgs
)
break
;
if
(
!
msgs
)
do
{
unsigned
nextmsg
;
nextmsg
=
msgs
&
-
msgs
;
msgs
&=
~
nextmsg
;
nextmsg
=
ffz
(
~
nextmsg
);
switch
(
nextmsg
)
{
case
IPI_TIMER
:
ipi_timer
(
regs
);
break
;
break
;
do
{
case
IPI_RESCHEDULE
:
unsigned
nextmsg
;
/*
* nothing more to do - eveything is
nextmsg
=
msgs
&
-
msgs
;
* done on the interrupt return path
msgs
&=
~
nextmsg
;
*/
nextmsg
=
ffz
(
~
nextmsg
);
break
;
switch
(
nextmsg
)
{
case
IPI_CALL_FUNC
:
case
IPI_TIMER
:
ipi_call_function
(
cpu
);
ipi_timer
(
regs
);
break
;
break
;
case
IPI_RESCHEDULE
:
/*
* nothing more to do - eveything is
* done on the interrupt return path
*/
break
;
case
IPI_CALL_FUNC
:
ipi_call_function
(
cpu
);
break
;
case
IPI_CPU_STOP
:
ipi_cpu_stop
(
cpu
);
break
;
default:
printk
(
KERN_CRIT
"CPU%u: Unknown IPI message 0x%x
\n
"
,
cpu
,
nextmsg
);
break
;
}
}
while
(
msgs
);
}
ipimask
&=
~
0x01
;
}
if
(
ipimask
)
{
case
IPI_CPU_STOP
:
printk
(
KERN_CRIT
"CPU %d: Unknown IPI signal %x!
\n
"
,
ipi_cpu_stop
(
cpu
);
cpu
,
ipimask
);
break
;
BUG
();
default:
printk
(
KERN_CRIT
"CPU%u: Unknown IPI message 0x%x
\n
"
,
cpu
,
nextmsg
);
break
;
}
}
while
(
msgs
);
}
}
}
}
...
...
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