}
 
        devm_kfree(&pdev->dev, priv->ring_data);
+       priv->ring_data = NULL;
        return ret;
 }
 
        struct hnae3_handle *h = priv->ae_handle;
        int i;
 
+       if (!priv->ring_data)
+               return;
+
        for (i = 0; i < h->kinfo.num_tqps; i++) {
                devm_kfree(priv->dev, priv->ring_data[i].ring);
                devm_kfree(priv->dev,
                           priv->ring_data[i + h->kinfo.num_tqps].ring);
        }
        devm_kfree(priv->dev, priv->ring_data);
+       priv->ring_data = NULL;
 }
 
 static int hns3_alloc_ring_memory(struct hns3_enet_ring *ring)
 
        hns3_dbg_uninit(handle);
 
-       priv->ring_data = NULL;
-
 out_netdev_free:
        free_netdev(netdev);
 }
        hns3_uninit_all_ring(priv);
 err_uninit_vector:
        hns3_nic_uninit_vector_data(priv);
-       priv->ring_data = NULL;
 err_dealloc_vector:
        hns3_nic_dealloc_vector_data(priv);
 err_put_ring:
        hns3_put_ring_config(priv);
-       priv->ring_data = NULL;
 
        return ret;
 }
                netdev_err(netdev, "uninit ring error\n");
 
        hns3_put_ring_config(priv);
-       priv->ring_data = NULL;
 
        return ret;
 }