Block MSIX negotiation until SMP started and IRQ reshuffled.

This commit is contained in:
Alexander Motin 2016-07-30 15:56:36 +00:00
parent 8260941c76
commit a8ec75016f

View File

@ -2605,6 +2605,17 @@ intel_ntb_user_mw_to_idx(struct ntb_softc *ntb, unsigned uidx)
return (uidx);
}
static int msix_ready;
static void
intel_ntb_msix_ready(void *arg __unused)
{
msix_ready = 1;
}
SYSINIT(intel_ntb_msix_ready, SI_SUB_SMP, SI_ORDER_ANY,
intel_ntb_msix_ready, NULL);
static void
intel_ntb_exchange_msix(void *ctx)
{
@ -2619,6 +2630,10 @@ intel_ntb_exchange_msix(void *ctx)
if (ntb->peer_msix_done)
goto msix_done;
/* Block MSIX negotiation until SMP started and IRQ reshuffled. */
if (!msix_ready)
goto reschedule;
intel_ntb_get_msix_info(ntb);
for (i = 0; i < XEON_NONLINK_DB_MSIX_BITS; i++) {
intel_ntb_peer_spad_write(ntb->device, NTB_MSIX_DATA0 + i,