if (!mqprio->qopt.num_tc) {
                adapter->strict_priority_enable = false;
+               igc_fpe_clear_preempt_queue(adapter);
                netdev_reset_tc(adapter->netdev);
                goto apply;
        }
                return -EOPNOTSUPP;
        }
 
-       /* Preemption is not supported yet. */
-       if (mqprio->preemptible_tcs) {
-               NL_SET_ERR_MSG_MOD(mqprio->extack,
-                                  "Preemption is not supported yet");
-               return -EOPNOTSUPP;
-       }
-
        igc_save_mqprio_params(adapter, mqprio->qopt.num_tc,
                               mqprio->qopt.offset);
 
                adapter->queue_per_tc[i] = i;
 
        mqprio->qopt.hw = TC_MQPRIO_HW_OFFLOAD_TCS;
+       igc_fpe_save_preempt_queue(adapter, mqprio);
 
 apply:
        return igc_tsn_offload_apply(adapter);
 
        ethtool_mmsv_init(&adapter->fpe.mmsv, adapter->netdev, &igc_mmsv_ops);
 }
 
+void igc_fpe_clear_preempt_queue(struct igc_adapter *adapter)
+{
+       for (int i = 0; i < adapter->num_tx_queues; i++) {
+               struct igc_ring *tx_ring = adapter->tx_ring[i];
+
+               tx_ring->preemptible = false;
+       }
+}
+
 static u32 igc_fpe_map_preempt_tc_to_queue(const struct igc_adapter *adapter,
                                           unsigned long preemptible_tcs)
 {
 
 DECLARE_STATIC_KEY_FALSE(igc_fpe_enabled);
 
 void igc_fpe_init(struct igc_adapter *adapter);
+void igc_fpe_clear_preempt_queue(struct igc_adapter *adapter);
 void igc_fpe_save_preempt_queue(struct igc_adapter *adapter,
                                const struct tc_mqprio_qopt_offload *mqprio);
 u32 igc_fpe_get_supported_frag_size(u32 frag_size);