Print this page
4443 apic_intrmap_init comment could use an update
@@ -1497,17 +1497,30 @@
void
apic_intrmap_init(int apic_mode)
{
int suppress_brdcst_eoi = 0;
- if (psm_vt_ops != NULL) {
/*
- * Since X2APIC requires the use of interrupt remapping
- * (though this is not documented explicitly in the Intel
- * documentation (yet)), initialize interrupt remapping
- * support before initializing the X2APIC unit.
+ * Intel Software Developer's Manual 3A, 10.12.7:
+ *
+ * Routing of device interrupts to local APIC units operating in
+ * x2APIC mode requires use of the interrupt-remapping architecture
+ * specified in the Intel Virtualization Technology for Directed
+ * I/O, Revision 1.3. Because of this, BIOS must enumerate support
+ * for and software must enable this interrupt remapping with
+ * Extended Interrupt Mode Enabled before it enabling x2APIC mode in
+ * the local APIC units.
+ *
+ *
+ * In other words, to use the APIC in x2APIC mode, we need interrupt
+ * remapping. Since we don't start up the IOMMU by default, we
+ * won't be able to do any interrupt remapping and therefore have to
+ * use the APIC in traditional 'local APIC' mode with memory mapped
+ * I/O.
*/
+
+ if (psm_vt_ops != NULL) {
if (((apic_intrmap_ops_t *)psm_vt_ops)->
apic_intrmap_init(apic_mode) == DDI_SUCCESS) {
apic_vt_ops = psm_vt_ops;