u8 tc = mqprio_qopt->qopt.num_tc;
        u16 mode = mqprio_qopt->mode;
        u8 hw = mqprio_qopt->qopt.hw;
-       bool if_running;
        int ret;
 
        if (!((hw == TC_MQPRIO_HW_OFFLOAD_TCS &&
        if (!netdev)
                return -EINVAL;
 
-       if_running = netif_running(netdev);
-       if (if_running) {
-               hns3_nic_net_stop(netdev);
-               msleep(100);
-       }
-
        ret = (kinfo->dcb_ops && kinfo->dcb_ops->setup_tc) ?
                kinfo->dcb_ops->setup_tc(h, tc, prio_tc) : -EOPNOTSUPP;
        if (ret)
-               goto out;
-
-       ret = hns3_nic_set_real_num_queue(netdev);
-
-out:
-       if (if_running)
-               hns3_nic_net_open(netdev);
+               return ret;
 
-       return ret;
+       return hns3_nic_set_real_num_queue(netdev);
 }
 
 static int hns3_nic_setup_tc(struct net_device *dev, enum tc_setup_type type,
 
        if (ret)
                return -EINVAL;
 
+       ret = hclge_notify_client(hdev, HNAE3_DOWN_CLIENT);
+       if (ret)
+               return ret;
+
+       ret = hclge_notify_client(hdev, HNAE3_UNINIT_CLIENT);
+       if (ret)
+               return ret;
+
        hclge_tm_schd_info_update(hdev, tc);
        hclge_tm_prio_tc_info_update(hdev, prio_tc);
 
        ret = hclge_tm_init_hw(hdev, false);
-       if (ret)
+       if (ret) {
+               if (hclge_notify_client(hdev, HNAE3_INIT_CLIENT))
+                       return ret;
+
+               hclge_notify_client(hdev, HNAE3_UP_CLIENT);
                return ret;
+       }
 
        hdev->flag &= ~HCLGE_FLAG_DCB_ENABLE;
 
        else
                hdev->flag &= ~HCLGE_FLAG_MQPRIO_ENABLE;
 
-       return 0;
+       ret = hclge_notify_client(hdev, HNAE3_INIT_CLIENT);
+       if (ret)
+               return ret;
+
+       return hclge_notify_client(hdev, HNAE3_UP_CLIENT);
 }
 
 static const struct hnae3_dcb_ops hns3_dcb_ops = {