提交 465822cf 编写于 作者: D David Rientjes 提交者: Ingo Molnar

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: NDavid Rientjes <rientjes@google.com>
Reviewed-by: NThomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/alpine.DEB.2.02.1402042354010.7839@chino.kir.corp.google.comSigned-off-by: NIngo Molnar <mingo@kernel.org>
上级 d3c63ae1
...@@ -351,7 +351,7 @@ struct apic { ...@@ -351,7 +351,7 @@ struct apic {
int trampoline_phys_low; int trampoline_phys_low;
int trampoline_phys_high; 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 (*smp_callin_clear_local_apic)(void);
void (*inquire_remote_apic)(int apicid); void (*inquire_remote_apic)(int apicid);
...@@ -517,12 +517,6 @@ extern int default_cpu_present_to_apicid(int mps_cpu); ...@@ -517,12 +517,6 @@ extern int default_cpu_present_to_apicid(int mps_cpu);
extern int default_check_phys_apicid_present(int phys_apicid); extern int default_check_phys_apicid_present(int phys_apicid);
#endif #endif
static inline void default_wait_for_init_deassert(atomic_t *deassert)
{
while (!atomic_read(deassert))
cpu_relax();
}
extern void generic_bigsmp_probe(void); extern void generic_bigsmp_probe(void);
......
...@@ -198,7 +198,7 @@ static struct apic apic_flat = { ...@@ -198,7 +198,7 @@ static struct apic apic_flat = {
.trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW, .trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW,
.trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH, .trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH,
.wait_for_init_deassert = NULL, .wait_for_init_deassert = false,
.smp_callin_clear_local_apic = NULL, .smp_callin_clear_local_apic = NULL,
.inquire_remote_apic = default_inquire_remote_apic, .inquire_remote_apic = default_inquire_remote_apic,
...@@ -314,7 +314,7 @@ static struct apic apic_physflat = { ...@@ -314,7 +314,7 @@ static struct apic apic_physflat = {
.trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW, .trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW,
.trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH, .trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH,
.wait_for_init_deassert = NULL, .wait_for_init_deassert = false,
.smp_callin_clear_local_apic = NULL, .smp_callin_clear_local_apic = NULL,
.inquire_remote_apic = default_inquire_remote_apic, .inquire_remote_apic = default_inquire_remote_apic,
......
...@@ -172,8 +172,7 @@ struct apic apic_noop = { ...@@ -172,8 +172,7 @@ struct apic apic_noop = {
.trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW, .trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW,
.trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH, .trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH,
.wait_for_init_deassert = NULL, .wait_for_init_deassert = false,
.smp_callin_clear_local_apic = NULL, .smp_callin_clear_local_apic = NULL,
.inquire_remote_apic = NULL, .inquire_remote_apic = NULL,
......
...@@ -248,7 +248,7 @@ static const struct apic apic_numachip __refconst = { ...@@ -248,7 +248,7 @@ static const struct apic apic_numachip __refconst = {
.wakeup_secondary_cpu = numachip_wakeup_secondary, .wakeup_secondary_cpu = numachip_wakeup_secondary,
.trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW, .trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW,
.trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH, .trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH,
.wait_for_init_deassert = NULL, .wait_for_init_deassert = false,
.smp_callin_clear_local_apic = NULL, .smp_callin_clear_local_apic = NULL,
.inquire_remote_apic = NULL, /* REMRD not supported */ .inquire_remote_apic = NULL, /* REMRD not supported */
......
...@@ -199,8 +199,7 @@ static struct apic apic_bigsmp = { ...@@ -199,8 +199,7 @@ static struct apic apic_bigsmp = {
.trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW, .trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW,
.trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH, .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, .smp_callin_clear_local_apic = NULL,
.inquire_remote_apic = default_inquire_remote_apic, .inquire_remote_apic = default_inquire_remote_apic,
......
...@@ -652,8 +652,7 @@ static struct apic __refdata apic_es7000_cluster = { ...@@ -652,8 +652,7 @@ static struct apic __refdata apic_es7000_cluster = {
.trampoline_phys_low = 0x467, .trampoline_phys_low = 0x467,
.trampoline_phys_high = 0x469, .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: */ /* Nothing to do for most platforms, since cleared by the INIT cycle: */
.smp_callin_clear_local_apic = NULL, .smp_callin_clear_local_apic = NULL,
.inquire_remote_apic = default_inquire_remote_apic, .inquire_remote_apic = default_inquire_remote_apic,
...@@ -716,8 +715,7 @@ static struct apic __refdata apic_es7000 = { ...@@ -716,8 +715,7 @@ static struct apic __refdata apic_es7000 = {
.trampoline_phys_low = 0x467, .trampoline_phys_low = 0x467,
.trampoline_phys_high = 0x469, .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: */ /* Nothing to do for most platforms, since cleared by the INIT cycle: */
.smp_callin_clear_local_apic = NULL, .smp_callin_clear_local_apic = NULL,
.inquire_remote_apic = default_inquire_remote_apic, .inquire_remote_apic = default_inquire_remote_apic,
......
...@@ -505,8 +505,7 @@ static struct apic __refdata apic_numaq = { ...@@ -505,8 +505,7 @@ static struct apic __refdata apic_numaq = {
.trampoline_phys_high = NUMAQ_TRAMPOLINE_PHYS_HIGH, .trampoline_phys_high = NUMAQ_TRAMPOLINE_PHYS_HIGH,
/* We don't do anything here because we use NMI's to boot instead */ /* 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, .smp_callin_clear_local_apic = numaq_smp_callin_clear_local_apic,
.inquire_remote_apic = NULL, .inquire_remote_apic = NULL,
......
...@@ -119,8 +119,7 @@ static struct apic apic_default = { ...@@ -119,8 +119,7 @@ static struct apic apic_default = {
.trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW, .trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW,
.trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH, .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, .smp_callin_clear_local_apic = NULL,
.inquire_remote_apic = default_inquire_remote_apic, .inquire_remote_apic = default_inquire_remote_apic,
......
...@@ -532,8 +532,7 @@ static struct apic apic_summit = { ...@@ -532,8 +532,7 @@ static struct apic apic_summit = {
.trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW, .trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW,
.trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH, .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, .smp_callin_clear_local_apic = NULL,
.inquire_remote_apic = default_inquire_remote_apic, .inquire_remote_apic = default_inquire_remote_apic,
......
...@@ -279,7 +279,7 @@ static struct apic apic_x2apic_cluster = { ...@@ -279,7 +279,7 @@ static struct apic apic_x2apic_cluster = {
.trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW, .trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW,
.trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH, .trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH,
.wait_for_init_deassert = NULL, .wait_for_init_deassert = false,
.smp_callin_clear_local_apic = NULL, .smp_callin_clear_local_apic = NULL,
.inquire_remote_apic = NULL, .inquire_remote_apic = NULL,
......
...@@ -133,7 +133,7 @@ static struct apic apic_x2apic_phys = { ...@@ -133,7 +133,7 @@ static struct apic apic_x2apic_phys = {
.trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW, .trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW,
.trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH, .trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH,
.wait_for_init_deassert = NULL, .wait_for_init_deassert = false,
.smp_callin_clear_local_apic = NULL, .smp_callin_clear_local_apic = NULL,
.inquire_remote_apic = NULL, .inquire_remote_apic = NULL,
......
...@@ -396,7 +396,7 @@ static struct apic __refdata apic_x2apic_uv_x = { ...@@ -396,7 +396,7 @@ static struct apic __refdata apic_x2apic_uv_x = {
.wakeup_secondary_cpu = uv_wakeup_secondary, .wakeup_secondary_cpu = uv_wakeup_secondary,
.trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW, .trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW,
.trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH, .trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH,
.wait_for_init_deassert = NULL, .wait_for_init_deassert = false,
.smp_callin_clear_local_apic = NULL, .smp_callin_clear_local_apic = NULL,
.inquire_remote_apic = NULL, .inquire_remote_apic = NULL,
......
...@@ -122,8 +122,9 @@ static void smp_callin(void) ...@@ -122,8 +122,9 @@ static void smp_callin(void)
* Since CPU0 is not wakened up by INIT, it doesn't wait for the IPI. * Since CPU0 is not wakened up by INIT, it doesn't wait for the IPI.
*/ */
cpuid = smp_processor_id(); cpuid = smp_processor_id();
if (apic->wait_for_init_deassert && cpuid != 0) if (apic->wait_for_init_deassert && cpuid)
apic->wait_for_init_deassert(&init_deasserted); while (!atomic_read(&init_deasserted))
cpu_relax();
/* /*
* (This works even if the APIC is not enabled.) * (This works even if the APIC is not enabled.)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册