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
3927368b
Commit
3927368b
authored
Apr 13, 2022
by
Thomas Gleixner
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'smp/urgent' into smp/core
Pick up the hotplug fix for dependent changes.
parents
c7dfb259
b7ba6d8d
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
19 additions
and
19 deletions
+19
-19
kernel/cpu.c
kernel/cpu.c
+18
-18
kernel/smp.c
kernel/smp.c
+1
-1
No files found.
kernel/cpu.c
View file @
3927368b
...
...
@@ -71,7 +71,6 @@ struct cpuhp_cpu_state {
bool
rollback
;
bool
single
;
bool
bringup
;
int
cpu
;
struct
hlist_node
*
node
;
struct
hlist_node
*
last
;
enum
cpuhp_state
cb_state
;
...
...
@@ -475,7 +474,7 @@ static inline bool cpu_smt_allowed(unsigned int cpu) { return true; }
#endif
static
inline
enum
cpuhp_state
cpuhp_set_state
(
struct
cpuhp_cpu_state
*
st
,
enum
cpuhp_state
target
)
cpuhp_set_state
(
int
cpu
,
struct
cpuhp_cpu_state
*
st
,
enum
cpuhp_state
target
)
{
enum
cpuhp_state
prev_state
=
st
->
state
;
bool
bringup
=
st
->
state
<
target
;
...
...
@@ -486,14 +485,15 @@ cpuhp_set_state(struct cpuhp_cpu_state *st, enum cpuhp_state target)
st
->
target
=
target
;
st
->
single
=
false
;
st
->
bringup
=
bringup
;
if
(
cpu_dying
(
st
->
cpu
)
!=
!
bringup
)
set_cpu_dying
(
st
->
cpu
,
!
bringup
);
if
(
cpu_dying
(
cpu
)
!=
!
bringup
)
set_cpu_dying
(
cpu
,
!
bringup
);
return
prev_state
;
}
static
inline
void
cpuhp_reset_state
(
struct
cpuhp_cpu_state
*
st
,
enum
cpuhp_state
prev_state
)
cpuhp_reset_state
(
int
cpu
,
struct
cpuhp_cpu_state
*
st
,
enum
cpuhp_state
prev_state
)
{
bool
bringup
=
!
st
->
bringup
;
...
...
@@ -520,8 +520,8 @@ cpuhp_reset_state(struct cpuhp_cpu_state *st, enum cpuhp_state prev_state)
}
st
->
bringup
=
bringup
;
if
(
cpu_dying
(
st
->
cpu
)
!=
!
bringup
)
set_cpu_dying
(
st
->
cpu
,
!
bringup
);
if
(
cpu_dying
(
cpu
)
!=
!
bringup
)
set_cpu_dying
(
cpu
,
!
bringup
);
}
/* Regular hotplug invocation of the AP hotplug thread */
...
...
@@ -541,15 +541,16 @@ static void __cpuhp_kick_ap(struct cpuhp_cpu_state *st)
wait_for_ap_thread
(
st
,
st
->
bringup
);
}
static
int
cpuhp_kick_ap
(
struct
cpuhp_cpu_state
*
st
,
enum
cpuhp_state
target
)
static
int
cpuhp_kick_ap
(
int
cpu
,
struct
cpuhp_cpu_state
*
st
,
enum
cpuhp_state
target
)
{
enum
cpuhp_state
prev_state
;
int
ret
;
prev_state
=
cpuhp_set_state
(
st
,
target
);
prev_state
=
cpuhp_set_state
(
cpu
,
st
,
target
);
__cpuhp_kick_ap
(
st
);
if
((
ret
=
st
->
result
))
{
cpuhp_reset_state
(
st
,
prev_state
);
cpuhp_reset_state
(
cpu
,
st
,
prev_state
);
__cpuhp_kick_ap
(
st
);
}
...
...
@@ -581,7 +582,7 @@ static int bringup_wait_for_ap(unsigned int cpu)
if
(
st
->
target
<=
CPUHP_AP_ONLINE_IDLE
)
return
0
;
return
cpuhp_kick_ap
(
st
,
st
->
target
);
return
cpuhp_kick_ap
(
cpu
,
st
,
st
->
target
);
}
static
int
bringup_cpu
(
unsigned
int
cpu
)
...
...
@@ -704,7 +705,7 @@ static int cpuhp_up_callbacks(unsigned int cpu, struct cpuhp_cpu_state *st,
ret
,
cpu
,
cpuhp_get_step
(
st
->
state
)
->
name
,
st
->
state
);
cpuhp_reset_state
(
st
,
prev_state
);
cpuhp_reset_state
(
cpu
,
st
,
prev_state
);
if
(
can_rollback_cpu
(
st
))
WARN_ON
(
cpuhp_invoke_callback_range
(
false
,
cpu
,
st
,
prev_state
));
...
...
@@ -721,7 +722,6 @@ static void cpuhp_create(unsigned int cpu)
init_completion
(
&
st
->
done_up
);
init_completion
(
&
st
->
done_down
);
st
->
cpu
=
cpu
;
}
static
int
cpuhp_should_run
(
unsigned
int
cpu
)
...
...
@@ -875,7 +875,7 @@ static int cpuhp_kick_ap_work(unsigned int cpu)
cpuhp_lock_release
(
true
);
trace_cpuhp_enter
(
cpu
,
st
->
target
,
prev_state
,
cpuhp_kick_ap_work
);
ret
=
cpuhp_kick_ap
(
st
,
st
->
target
);
ret
=
cpuhp_kick_ap
(
cpu
,
st
,
st
->
target
);
trace_cpuhp_exit
(
cpu
,
st
->
state
,
prev_state
,
ret
);
return
ret
;
...
...
@@ -1107,7 +1107,7 @@ static int cpuhp_down_callbacks(unsigned int cpu, struct cpuhp_cpu_state *st,
ret
,
cpu
,
cpuhp_get_step
(
st
->
state
)
->
name
,
st
->
state
);
cpuhp_reset_state
(
st
,
prev_state
);
cpuhp_reset_state
(
cpu
,
st
,
prev_state
);
if
(
st
->
state
<
prev_state
)
WARN_ON
(
cpuhp_invoke_callback_range
(
true
,
cpu
,
st
,
...
...
@@ -1134,7 +1134,7 @@ static int __ref _cpu_down(unsigned int cpu, int tasks_frozen,
cpuhp_tasks_frozen
=
tasks_frozen
;
prev_state
=
cpuhp_set_state
(
st
,
target
);
prev_state
=
cpuhp_set_state
(
cpu
,
st
,
target
);
/*
* If the current CPU state is in the range of the AP hotplug thread,
* then we need to kick the thread.
...
...
@@ -1165,7 +1165,7 @@ static int __ref _cpu_down(unsigned int cpu, int tasks_frozen,
ret
=
cpuhp_down_callbacks
(
cpu
,
st
,
target
);
if
(
ret
&&
st
->
state
<
prev_state
)
{
if
(
st
->
state
==
CPUHP_TEARDOWN_CPU
)
{
cpuhp_reset_state
(
st
,
prev_state
);
cpuhp_reset_state
(
cpu
,
st
,
prev_state
);
__cpuhp_kick_ap
(
st
);
}
else
{
WARN
(
1
,
"DEAD callback error for CPU%d"
,
cpu
);
...
...
@@ -1352,7 +1352,7 @@ static int _cpu_up(unsigned int cpu, int tasks_frozen, enum cpuhp_state target)
cpuhp_tasks_frozen
=
tasks_frozen
;
cpuhp_set_state
(
st
,
target
);
cpuhp_set_state
(
cpu
,
st
,
target
);
/*
* If the current CPU state is in the range of the AP hotplug thread,
* then we need to kick the thread once more.
...
...
kernel/smp.c
View file @
3927368b
...
...
@@ -579,7 +579,7 @@ static void flush_smp_call_function_queue(bool warn_cpu_offline)
/* There shouldn't be any pending callbacks on an offline CPU. */
if
(
unlikely
(
warn_cpu_offline
&&
!
cpu_online
(
smp_processor_id
())
&&
!
warned
&&
!
llist_empty
(
head
)
))
{
!
warned
&&
entry
!=
NULL
))
{
warned
=
true
;
WARN
(
1
,
"IPI on offline CPU %d
\n
"
,
smp_processor_id
());
...
...
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