|
@@ -224,16 +224,23 @@ int mlx4_init_resource_tracker(struct mlx4_dev *dev)
|
|
|
return 0 ;
|
|
|
}
|
|
|
|
|
|
-void mlx4_free_resource_tracker(struct mlx4_dev *dev)
|
|
|
+void mlx4_free_resource_tracker(struct mlx4_dev *dev,
|
|
|
+ enum mlx4_res_tracker_free_type type)
|
|
|
{
|
|
|
struct mlx4_priv *priv = mlx4_priv(dev);
|
|
|
int i;
|
|
|
|
|
|
if (priv->mfunc.master.res_tracker.slave_list) {
|
|
|
- for (i = 0 ; i < dev->num_slaves; i++)
|
|
|
- mlx4_delete_all_resources_for_slave(dev, i);
|
|
|
-
|
|
|
- kfree(priv->mfunc.master.res_tracker.slave_list);
|
|
|
+ if (type != RES_TR_FREE_STRUCTS_ONLY)
|
|
|
+ for (i = 0 ; i < dev->num_slaves; i++)
|
|
|
+ if (type == RES_TR_FREE_ALL ||
|
|
|
+ dev->caps.function != i)
|
|
|
+ mlx4_delete_all_resources_for_slave(dev, i);
|
|
|
+
|
|
|
+ if (type != RES_TR_FREE_SLAVES_ONLY) {
|
|
|
+ kfree(priv->mfunc.master.res_tracker.slave_list);
|
|
|
+ priv->mfunc.master.res_tracker.slave_list = NULL;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|