mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-16 10:20:30 +00:00
Revert a part of the previous commits to these files that made the NMI
IPI_STOP handling code use atomic_readandclear() to execute the restart function on the first CPU to resume and restore the behavior of always executing the restart function on the BSP since this is in fact what the non-NMI IPI_STOP handler does. I did add back in a statement to clear the restart function pointer after it is executed to match the behavior of the non-NMI IPI_STOP handler.
This commit is contained in:
parent
1c570dff3d
commit
db477d6cc8
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=152531
@ -1072,7 +1072,6 @@ ipi_nmi_handler()
|
||||
{
|
||||
int cpu = PCPU_GET(cpuid);
|
||||
int cpumask = PCPU_GET(cpumask);
|
||||
void (*restartfunc)(void);
|
||||
|
||||
if (!(ipi_nmi_pending & cpumask))
|
||||
return 1;
|
||||
@ -1091,10 +1090,10 @@ ipi_nmi_handler()
|
||||
atomic_clear_int(&started_cpus, cpumask);
|
||||
atomic_clear_int(&stopped_cpus, cpumask);
|
||||
|
||||
restartfunc = (void (*)(void))atomic_readandclear_long(
|
||||
(u_long *)&cpustop_restartfunc);
|
||||
if (restartfunc != NULL)
|
||||
restartfunc();
|
||||
if (cpu == 0 && cpustop_restartfunc != NULL) {
|
||||
cpustop_restartfunc();
|
||||
cpustop_restartfunc = NULL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -1311,7 +1311,6 @@ ipi_nmi_handler()
|
||||
{
|
||||
int cpu = PCPU_GET(cpuid);
|
||||
int cpumask = PCPU_GET(cpumask);
|
||||
void (*restartfunc)(void);
|
||||
|
||||
if (!(ipi_nmi_pending & cpumask))
|
||||
return 1;
|
||||
@ -1330,10 +1329,10 @@ ipi_nmi_handler()
|
||||
atomic_clear_int(&started_cpus, cpumask);
|
||||
atomic_clear_int(&stopped_cpus, cpumask);
|
||||
|
||||
restartfunc = (void (*)(void))atomic_readandclear_int(
|
||||
(u_int *)&cpustop_restartfunc);
|
||||
if (restartfunc != NULL)
|
||||
restartfunc();
|
||||
if (cpu == 0 && cpustop_restartfunc != NULL) {
|
||||
cpustop_restartfunc();
|
||||
cpustop_restartfunc = NULL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user