x86/apic: Switch wait_for_init_deassert() to a bool flag
Now that there is only a single wait_for_init_deassert() function, just convert the member of struct apic to a bool to determine whether we need to wait for init_deassert to become non-zero. There are no more callers of default_wait_for_init_deassert(), so fold it into the caller. Signed-off-by: David Rientjes <rientjes@google.com> Reviewed-by: Thomas Gleixner <tglx@linutronix.de> Link: http://lkml.kernel.org/r/alpine.DEB.2.02.1402042354010.7839@chino.kir.corp.google.com Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
Родитель
d3c63ae1e2
Коммит
465822cfc8
|
@ -351,7 +351,7 @@ struct apic {
|
|||
int trampoline_phys_low;
|
||||
int trampoline_phys_high;
|
||||
|
||||
void (*wait_for_init_deassert)(atomic_t *deassert);
|
||||
bool wait_for_init_deassert;
|
||||
void (*smp_callin_clear_local_apic)(void);
|
||||
void (*inquire_remote_apic)(int apicid);
|
||||
|
||||
|
@ -517,12 +517,6 @@ extern int default_cpu_present_to_apicid(int mps_cpu);
|
|||
extern int default_check_phys_apicid_present(int phys_apicid);
|
||||
#endif
|
||||
|
||||
static inline void default_wait_for_init_deassert(atomic_t *deassert)
|
||||
{
|
||||
while (!atomic_read(deassert))
|
||||
cpu_relax();
|
||||
}
|
||||
|
||||
extern void generic_bigsmp_probe(void);
|
||||
|
||||
|
||||
|
|
|
@ -198,7 +198,7 @@ static struct apic apic_flat = {
|
|||
|
||||
.trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW,
|
||||
.trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH,
|
||||
.wait_for_init_deassert = NULL,
|
||||
.wait_for_init_deassert = false,
|
||||
.smp_callin_clear_local_apic = NULL,
|
||||
.inquire_remote_apic = default_inquire_remote_apic,
|
||||
|
||||
|
@ -314,7 +314,7 @@ static struct apic apic_physflat = {
|
|||
|
||||
.trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW,
|
||||
.trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH,
|
||||
.wait_for_init_deassert = NULL,
|
||||
.wait_for_init_deassert = false,
|
||||
.smp_callin_clear_local_apic = NULL,
|
||||
.inquire_remote_apic = default_inquire_remote_apic,
|
||||
|
||||
|
|
|
@ -172,8 +172,7 @@ struct apic apic_noop = {
|
|||
.trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW,
|
||||
.trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH,
|
||||
|
||||
.wait_for_init_deassert = NULL,
|
||||
|
||||
.wait_for_init_deassert = false,
|
||||
.smp_callin_clear_local_apic = NULL,
|
||||
.inquire_remote_apic = NULL,
|
||||
|
||||
|
|
|
@ -248,7 +248,7 @@ static const struct apic apic_numachip __refconst = {
|
|||
.wakeup_secondary_cpu = numachip_wakeup_secondary,
|
||||
.trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW,
|
||||
.trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH,
|
||||
.wait_for_init_deassert = NULL,
|
||||
.wait_for_init_deassert = false,
|
||||
.smp_callin_clear_local_apic = NULL,
|
||||
.inquire_remote_apic = NULL, /* REMRD not supported */
|
||||
|
||||
|
|
|
@ -199,8 +199,7 @@ static struct apic apic_bigsmp = {
|
|||
.trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW,
|
||||
.trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH,
|
||||
|
||||
.wait_for_init_deassert = default_wait_for_init_deassert,
|
||||
|
||||
.wait_for_init_deassert = true,
|
||||
.smp_callin_clear_local_apic = NULL,
|
||||
.inquire_remote_apic = default_inquire_remote_apic,
|
||||
|
||||
|
|
|
@ -652,8 +652,7 @@ static struct apic __refdata apic_es7000_cluster = {
|
|||
.trampoline_phys_low = 0x467,
|
||||
.trampoline_phys_high = 0x469,
|
||||
|
||||
.wait_for_init_deassert = NULL,
|
||||
|
||||
.wait_for_init_deassert = false,
|
||||
/* Nothing to do for most platforms, since cleared by the INIT cycle: */
|
||||
.smp_callin_clear_local_apic = NULL,
|
||||
.inquire_remote_apic = default_inquire_remote_apic,
|
||||
|
@ -716,8 +715,7 @@ static struct apic __refdata apic_es7000 = {
|
|||
.trampoline_phys_low = 0x467,
|
||||
.trampoline_phys_high = 0x469,
|
||||
|
||||
.wait_for_init_deassert = default_wait_for_init_deassert,
|
||||
|
||||
.wait_for_init_deassert = true,
|
||||
/* Nothing to do for most platforms, since cleared by the INIT cycle: */
|
||||
.smp_callin_clear_local_apic = NULL,
|
||||
.inquire_remote_apic = default_inquire_remote_apic,
|
||||
|
|
|
@ -505,8 +505,7 @@ static struct apic __refdata apic_numaq = {
|
|||
.trampoline_phys_high = NUMAQ_TRAMPOLINE_PHYS_HIGH,
|
||||
|
||||
/* We don't do anything here because we use NMI's to boot instead */
|
||||
.wait_for_init_deassert = NULL,
|
||||
|
||||
.wait_for_init_deassert = false,
|
||||
.smp_callin_clear_local_apic = numaq_smp_callin_clear_local_apic,
|
||||
.inquire_remote_apic = NULL,
|
||||
|
||||
|
|
|
@ -119,8 +119,7 @@ static struct apic apic_default = {
|
|||
.trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW,
|
||||
.trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH,
|
||||
|
||||
.wait_for_init_deassert = default_wait_for_init_deassert,
|
||||
|
||||
.wait_for_init_deassert = true,
|
||||
.smp_callin_clear_local_apic = NULL,
|
||||
.inquire_remote_apic = default_inquire_remote_apic,
|
||||
|
||||
|
|
|
@ -532,8 +532,7 @@ static struct apic apic_summit = {
|
|||
.trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW,
|
||||
.trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH,
|
||||
|
||||
.wait_for_init_deassert = default_wait_for_init_deassert,
|
||||
|
||||
.wait_for_init_deassert = true,
|
||||
.smp_callin_clear_local_apic = NULL,
|
||||
.inquire_remote_apic = default_inquire_remote_apic,
|
||||
|
||||
|
|
|
@ -279,7 +279,7 @@ static struct apic apic_x2apic_cluster = {
|
|||
|
||||
.trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW,
|
||||
.trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH,
|
||||
.wait_for_init_deassert = NULL,
|
||||
.wait_for_init_deassert = false,
|
||||
.smp_callin_clear_local_apic = NULL,
|
||||
.inquire_remote_apic = NULL,
|
||||
|
||||
|
|
|
@ -133,7 +133,7 @@ static struct apic apic_x2apic_phys = {
|
|||
|
||||
.trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW,
|
||||
.trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH,
|
||||
.wait_for_init_deassert = NULL,
|
||||
.wait_for_init_deassert = false,
|
||||
.smp_callin_clear_local_apic = NULL,
|
||||
.inquire_remote_apic = NULL,
|
||||
|
||||
|
|
|
@ -396,7 +396,7 @@ static struct apic __refdata apic_x2apic_uv_x = {
|
|||
.wakeup_secondary_cpu = uv_wakeup_secondary,
|
||||
.trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW,
|
||||
.trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH,
|
||||
.wait_for_init_deassert = NULL,
|
||||
.wait_for_init_deassert = false,
|
||||
.smp_callin_clear_local_apic = NULL,
|
||||
.inquire_remote_apic = NULL,
|
||||
|
||||
|
|
|
@ -122,8 +122,9 @@ static void smp_callin(void)
|
|||
* Since CPU0 is not wakened up by INIT, it doesn't wait for the IPI.
|
||||
*/
|
||||
cpuid = smp_processor_id();
|
||||
if (apic->wait_for_init_deassert && cpuid != 0)
|
||||
apic->wait_for_init_deassert(&init_deasserted);
|
||||
if (apic->wait_for_init_deassert && cpuid)
|
||||
while (!atomic_read(&init_deasserted))
|
||||
cpu_relax();
|
||||
|
||||
/*
|
||||
* (This works even if the APIC is not enabled.)
|
||||
|
|
Загрузка…
Ссылка в новой задаче