Disable SB01BASE_LOCKUP workaround when split BARs disabled.

For some reason hack with sending MSI-X interrupts by writing to remote
LAPIC memory works only for 32-bit BARs, that are available only if split
BARs mode is enabled in BIOS.  If it is not, complain loudly and fall back
to less efficient workaround.
This commit is contained in:
Alexander Motin 2016-07-09 23:22:44 +00:00
parent ca1ef36cf4
commit eeed92a759

View File

@ -450,7 +450,7 @@ ntb_vm_memattr_to_str(vm_memattr_t pat)
}
}
static int g_ntb_msix_idx = 0;
static int g_ntb_msix_idx = 1;
SYSCTL_INT(_hw_ntb, OID_AUTO, msix_mw_idx, CTLFLAG_RDTUN, &g_ntb_msix_idx,
0, "Use this memory window to access the peer MSIX message complex on "
"certain Xeon-based NTB systems, as a workaround for a hardware errata. "
@ -1440,6 +1440,16 @@ ntb_detect_xeon(struct ntb_softc *ntb)
if ((ppd & XEON_PPD_SPLIT_BAR) != 0)
ntb->features |= NTB_SPLIT_BAR;
if (HAS_FEATURE(ntb, NTB_SB01BASE_LOCKUP) &&
!HAS_FEATURE(ntb, NTB_SPLIT_BAR)) {
device_printf(ntb->device,
"Can not apply SB01BASE_LOCKUP workaround "
"with split BARs disabled!\n");
device_printf(ntb->device,
"Expect system hangs under heavy NTB traffic!\n");
ntb->features &= ~NTB_SB01BASE_LOCKUP;
}
/*
* SDOORBELL errata workaround gets in the way of SB01BASE_LOCKUP
* errata workaround; only do one at a time.