Print this page
8620 pcplusmp shouldn't support x2APIC mode
Reviewed by: Robert Mustacchi <rm@joyent.com>
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>

*** 21,31 **** /* * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. */ /* ! * Copyright (c) 2013, Joyent, Inc. All rights reserved. * Copyright (c) 2016 by Delphix. All rights reserved. */ /* * PSMI 1.1 extensions are supported only in 2.6 and later versions. --- 21,31 ---- /* * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. */ /* ! * Copyright (c) 2017, Joyent, Inc. All rights reserved. * Copyright (c) 2016 by Delphix. All rights reserved. */ /* * PSMI 1.1 extensions are supported only in 2.6 and later versions.
*** 126,137 **** extern void cmi_cmci_trap(void); kmutex_t cmci_cpu_setup_lock; /* protects cmci_cpu_setup_registered */ int cmci_cpu_setup_registered; - /* number of CPUs in power-on transition state */ - static int apic_poweron_cnt = 0; lock_t apic_mode_switch_lock; /* * Patchable global variables. */ --- 126,135 ----
*** 1454,1502 **** ASSERT((apic_cpus[acid].aci_status & flag) != 0); return (acid); } - /* - * Switch between safe and x2APIC IPI sending method. - * CPU may power on in xapic mode or x2apic mode. If CPU needs to send IPI to - * other CPUs before entering x2APIC mode, it still needs to xAPIC method. - * Before sending StartIPI to target CPU, psm_send_ipi will be changed to - * apic_common_send_ipi, which detects current local APIC mode and use right - * method to send IPI. If some CPUs fail to start up, apic_poweron_cnt - * won't return to zero, so apic_common_send_ipi will always be used. - * psm_send_ipi can't be simply changed back to x2apic_send_ipi if some CPUs - * failed to start up because those failed CPUs may recover itself later at - * unpredictable time. - */ - void - apic_switch_ipi_callback(boolean_t enter) - { - ulong_t iflag; - struct psm_ops *pops = psmops; - - iflag = intr_clear(); - lock_set(&apic_mode_switch_lock); - if (enter) { - ASSERT(apic_poweron_cnt >= 0); - if (apic_poweron_cnt == 0) { - pops->psm_send_ipi = apic_common_send_ipi; - send_dirintf = pops->psm_send_ipi; - } - apic_poweron_cnt++; - } else { - ASSERT(apic_poweron_cnt > 0); - apic_poweron_cnt--; - if (apic_poweron_cnt == 0) { - pops->psm_send_ipi = x2apic_send_ipi; - send_dirintf = pops->psm_send_ipi; - } - } - lock_clear(&apic_mode_switch_lock); - intr_restore(iflag); - } - void apic_intrmap_init(int apic_mode) { int suppress_brdcst_eoi = 0; --- 1452,1461 ----