u16 ucdef_id;
        u16 bcast_id;
        u16 mcdef_id;
+/* Whether in multicast promiscuous mode when last changed */
+       bool mc_promisc_last;
 };
 
 /* An arbitrary search limit for the software hash table */
        table->ucdef_id = EFX_EF10_FILTER_ID_INVALID;
        table->bcast_id = EFX_EF10_FILTER_ID_INVALID;
        table->mcdef_id = EFX_EF10_FILTER_ID_INVALID;
+       table->mc_promisc_last = false;
 
        efx->filter_state = table;
        init_waitqueue_head(&table->waitq);
        /* If changing promiscuous state with cascaded multicast filters, remove
         * old filters first, so that packets are dropped rather than duplicated
         */
-       if (nic_data->workaround_26807 && efx->mc_promisc != mc_promisc)
+       if (nic_data->workaround_26807 && table->mc_promisc_last != mc_promisc)
                efx_ef10_filter_remove_old(efx);
        if (mc_promisc) {
                if (nic_data->workaround_26807) {
        }
 
        efx_ef10_filter_remove_old(efx);
-       efx->mc_promisc = mc_promisc;
+       table->mc_promisc_last = mc_promisc;
 }
 
 static int efx_ef10_set_mac_address(struct efx_nic *efx)
 
  * @stats_lock: Statistics update lock. Must be held when calling
  *     efx_nic_type::{update,start,stop}_stats.
  * @n_rx_noskb_drops: Count of RX packets dropped due to failure to allocate an skb
- * @mc_promisc: Whether in multicast promiscuous mode when last changed
  *
  * This is stored in the private area of the &struct net_device.
  */
        int last_irq_cpu;
        spinlock_t stats_lock;
        atomic_t n_rx_noskb_drops;
-       bool mc_promisc;
 };
 
 static inline int efx_dev_registered(struct efx_nic *efx)