aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/mellanox/mlx4/mlx4.h
diff options
context:
space:
mode:
authorJack Morgenstein <jackm@dev.mellanox.co.il>2012-05-15 06:35:02 -0400
committerDavid S. Miller <davem@davemloft.net>2012-05-16 00:56:58 -0400
commitb8924951f633a0bb78972ef583d58ca8c26d8e73 (patch)
treef6be7601a92a408ae78aa18bea863d6f82a0e56c /drivers/net/ethernet/mellanox/mlx4/mlx4.h
parent681372a7a37d4226261e2be2faf3aec5b9e022c2 (diff)
net/mlx4_core: Fix potential kernel Oops in res tracker during Dom0 driver unload
Currently the slave and master resources are deleted after master freed all bitmaps. If any resources were not properly cleaned up during the shutdown process, an Oops would result. Fix so that delete slave (only) resources during cleanup. Master resources are cleaned up during unload process, and need not separately be cleaned. Note that during cleanup, we need to split the resource-tracker freeing functionality. Before removing all the bitmaps, we free any leftover slave resources. However, we can only remove the resource tracker linked list after all bitmap frees, since some of the freeing functions (e.g., mlx4_cleanup_eq_table) use paravirtualized FW commands which expect the resource tracker linked list to be present. Found-by: Aviad Yehezkel <aviadye@mellanox.com> Signed-off-by: Jack Morgenstein <jackm@dev.mellanox.co.il> Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/mellanox/mlx4/mlx4.h')
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/mlx4.h8
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx4/mlx4.h b/drivers/net/ethernet/mellanox/mlx4/mlx4.h
index cd56f1aea4b5..8767fbfdce34 100644
--- a/drivers/net/ethernet/mellanox/mlx4/mlx4.h
+++ b/drivers/net/ethernet/mellanox/mlx4/mlx4.h
@@ -146,6 +146,11 @@ enum mlx4_alloc_mode {
146 RES_OP_MAP_ICM, 146 RES_OP_MAP_ICM,
147}; 147};
148 148
149enum mlx4_res_tracker_free_type {
150 RES_TR_FREE_ALL,
151 RES_TR_FREE_SLAVES_ONLY,
152 RES_TR_FREE_STRUCTS_ONLY,
153};
149 154
150/* 155/*
151 *Virtual HCR structures. 156 *Virtual HCR structures.
@@ -1027,7 +1032,8 @@ int mlx4_get_slave_from_resource_id(struct mlx4_dev *dev,
1027void mlx4_delete_all_resources_for_slave(struct mlx4_dev *dev, int slave_id); 1032void mlx4_delete_all_resources_for_slave(struct mlx4_dev *dev, int slave_id);
1028int mlx4_init_resource_tracker(struct mlx4_dev *dev); 1033int mlx4_init_resource_tracker(struct mlx4_dev *dev);
1029 1034
1030void mlx4_free_resource_tracker(struct mlx4_dev *dev); 1035void mlx4_free_resource_tracker(struct mlx4_dev *dev,
1036 enum mlx4_res_tracker_free_type type);
1031 1037
1032int mlx4_SET_PORT_wrapper(struct mlx4_dev *dev, int slave, 1038int mlx4_SET_PORT_wrapper(struct mlx4_dev *dev, int slave,
1033 struct mlx4_vhcr *vhcr, 1039 struct mlx4_vhcr *vhcr,