int entries, u16 *hash_list, u32 vf)
 {
        struct vf_data_storage *vfinfo = &adapter->vfinfo[vf];
+       struct ixgbe_hw *hw = &adapter->hw;
        int i;
+       u32 vector_bit;
+       u32 vector_reg;
+       u32 mta_reg;
 
        /* only so many hash values supported */
        entries = min(entries, IXGBE_MAX_VF_MC_ENTRIES);
                vfinfo->vf_mc_hashes[i] = hash_list[i];;
        }
 
-       /* Flush and reset the mta with the new values */
-       ixgbe_set_rx_mode(adapter->netdev);
+       for (i = 0; i < vfinfo->num_vf_mc_hashes; i++) {
+               vector_reg = (vfinfo->vf_mc_hashes[i] >> 5) & 0x7F;
+               vector_bit = vfinfo->vf_mc_hashes[i] & 0x1F;
+               mta_reg = IXGBE_READ_REG(hw, IXGBE_MTA(vector_reg));
+               mta_reg |= (1 << vector_bit);
+               IXGBE_WRITE_REG(hw, IXGBE_MTA(vector_reg), mta_reg);
+       }
 
        return 0;
 }