diff options
Diffstat (limited to 'usr/src/uts/i86pc/io/apix/apix.c')
| -rw-r--r-- | usr/src/uts/i86pc/io/apix/apix.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/usr/src/uts/i86pc/io/apix/apix.c b/usr/src/uts/i86pc/io/apix/apix.c index d02ffe8096..0e8d4f5fd1 100644 --- a/usr/src/uts/i86pc/io/apix/apix.c +++ b/usr/src/uts/i86pc/io/apix/apix.c @@ -25,9 +25,7 @@ /* * Copyright (c) 2010, Intel Corporation. * All rights reserved. - */ -/* - * Copyright (c) 2017, Joyent, Inc. All rights reserved. + * Copyright 2018 Joyent, Inc. */ /* @@ -167,6 +165,9 @@ static struct psm_ops apix_ops = { apix_intr_ops, /* Advanced DDI Interrupt framework */ apic_state, /* save, restore apic state for S3 */ apic_cpu_ops, /* CPU control interface. */ + + apic_get_pir_ipivect, + apic_send_pir_ipi, }; struct psm_ops *psmops = &apix_ops; @@ -384,6 +385,8 @@ apix_init() apic_have_32bit_cr8 = 1; #endif + apic_pir_vect = apix_get_ipivect(XC_CPUPOKE_PIL, -1); + /* * Initialize IRM pool parameters */ @@ -1127,9 +1130,11 @@ x2apic_update_psm() * being apix_foo as opposed to apic_foo and x2apic_foo. */ pops->psm_send_ipi = x2apic_send_ipi; - send_dirintf = pops->psm_send_ipi; + pops->psm_send_pir_ipi = x2apic_send_pir_ipi; + psm_send_pir_ipi = pops->psm_send_pir_ipi; + apic_mode = LOCAL_X2APIC; apic_change_ops(); } @@ -2588,6 +2593,8 @@ apic_switch_ipi_callback(boolean_t enter) if (apic_poweron_cnt == 0) { pops->psm_send_ipi = apic_common_send_ipi; send_dirintf = pops->psm_send_ipi; + pops->psm_send_pir_ipi = apic_common_send_pir_ipi; + psm_send_pir_ipi = pops->psm_send_pir_ipi; } apic_poweron_cnt++; } else { @@ -2596,6 +2603,8 @@ apic_switch_ipi_callback(boolean_t enter) if (apic_poweron_cnt == 0) { pops->psm_send_ipi = x2apic_send_ipi; send_dirintf = pops->psm_send_ipi; + pops->psm_send_pir_ipi = x2apic_send_pir_ipi; + psm_send_pir_ipi = pops->psm_send_pir_ipi; } } lock_clear(&apic_mode_switch_lock); |
