16) & 0xf; + blocked = 1U << (queue & 0x7); + } + } + if (spoofed != 0) + atomic_set_32(&sc->iov_spoof_pending, spoofed); + if (blocked != 0) + atomic_set_32(&sc->iov_blocked_pending, blocked); + } if (sc->hw.mac.type == e1000_i350 && (cause & IGB_I350_LVMMC_MAC_VLAN_SPOOF) != 0) { queue = (cause >> IGB_I350_LVMMC_LAST_Q_SHIFT) & @@ -1775,6 +1817,8 @@ igb_iov_initialize(struct e1000_softc *sc) atomic_readandclear_32(&sc->iov_mdd_cause); atomic_readandclear_32(&sc->iov_pending); atomic_readandclear_32(&sc->iov_spoof_pending); + atomic_readandclear_32(&sc->iov_blocked_pending); + /* Plain VMDq keeps every 82576 PF/VF pool on queue zero. */ E1000_WRITE_REG(hw, E1000_MRQC, E1000_MRQC_ENABLE_VMDQ); vt_ctl = E1000_READ_REG(hw, E1000_VT_CTL); @@ -1982,6 +2026,7 @@ igb_if_iov_uninit(if_ctx_t ctx) atomic_readandclear_32(&sc->iov_mdd_cause); atomic_readandclear_32(&sc->iov_pending); atomic_readandclear_32(&sc->iov_spoof_pending); + atomic_readandclear_32(&sc->iov_blocked_pending); atomic_store_rel_32(&sc->iov_teardown, 0); }