diff options
author | mav <mav@FreeBSD.org> | 2016-08-18 09:39:51 +0000 |
---|---|---|
committer | mav <mav@FreeBSD.org> | 2016-08-18 09:39:51 +0000 |
commit | d513f362d2c28b2b5216ccd54762bc3a86699d77 (patch) | |
tree | 4d7296dd9dee28faab33f69ccc87250327b20846 /sys | |
parent | f541d8f99e61e03719391b92ef600dfa21109940 (diff) | |
download | FreeBSD-src-d513f362d2c28b2b5216ccd54762bc3a86699d77.zip FreeBSD-src-d513f362d2c28b2b5216ccd54762bc3a86699d77.tar.gz |
MFC r303554, r303561:
Block MSIX negotiation until SMP started and IRQ reshuffled.
Diffstat (limited to 'sys')
-rw-r--r-- | sys/dev/ntb/ntb_hw/ntb_hw.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/sys/dev/ntb/ntb_hw/ntb_hw.c b/sys/dev/ntb/ntb_hw/ntb_hw.c index 9962cb2..dac3699 100644 --- a/sys/dev/ntb/ntb_hw/ntb_hw.c +++ b/sys/dev/ntb/ntb_hw/ntb_hw.c @@ -2605,6 +2605,19 @@ intel_ntb_user_mw_to_idx(struct ntb_softc *ntb, unsigned uidx) return (uidx); } +#ifndef EARLY_AP_STARTUP +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); +#endif + static void intel_ntb_exchange_msix(void *ctx) { @@ -2619,6 +2632,12 @@ intel_ntb_exchange_msix(void *ctx) if (ntb->peer_msix_done) goto msix_done; +#ifndef EARLY_AP_STARTUP + /* Block MSIX negotiation until SMP started and IRQ reshuffled. */ + if (!msix_ready) + goto reschedule; +#endif + 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, |