diff options
author | Jack Morgenstein <jackm@dev.mellanox.co.il> | 2013-01-23 20:54:17 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-01-28 00:13:57 -0500 |
commit | f356fcbe12c1174713e83651b630330f8f0f8415 (patch) | |
tree | 8e5582ef389f5567b764806f175477162415f50c /drivers/net/ethernet/mellanox/mlx4/main.c | |
parent | dbd501a80671180a8f3cdf93ca465959031fef18 (diff) |
net/mlx4_core: Return proper error code when __mlx4_add_one fails
Returning 0 (success) when in fact we are aborting the load, leads to kernel
panic when unloading the module. Fix that by returning the actual error code.
Signed-off-by: Jack Morgenstein <jackm@dev.mellanox.co.il>
Signed-off-by: Eugenia Emantayev <eugenia@mellanox.com>
Signed-off-by: Amir Vadai <amirv@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/mellanox/mlx4/main.c')
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/main.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx4/main.c b/drivers/net/ethernet/mellanox/mlx4/main.c index e1bafffbc3b1..983fd3d62bce 100644 --- a/drivers/net/ethernet/mellanox/mlx4/main.c +++ b/drivers/net/ethernet/mellanox/mlx4/main.c | |||
@@ -2169,7 +2169,8 @@ slave_start: | |||
2169 | dev->num_slaves = MLX4_MAX_NUM_SLAVES; | 2169 | dev->num_slaves = MLX4_MAX_NUM_SLAVES; |
2170 | else { | 2170 | else { |
2171 | dev->num_slaves = 0; | 2171 | dev->num_slaves = 0; |
2172 | if (mlx4_multi_func_init(dev)) { | 2172 | err = mlx4_multi_func_init(dev); |
2173 | if (err) { | ||
2173 | mlx4_err(dev, "Failed to init slave mfunc" | 2174 | mlx4_err(dev, "Failed to init slave mfunc" |
2174 | " interface, aborting.\n"); | 2175 | " interface, aborting.\n"); |
2175 | goto err_cmd; | 2176 | goto err_cmd; |
@@ -2193,7 +2194,8 @@ slave_start: | |||
2193 | /* In master functions, the communication channel must be initialized | 2194 | /* In master functions, the communication channel must be initialized |
2194 | * after obtaining its address from fw */ | 2195 | * after obtaining its address from fw */ |
2195 | if (mlx4_is_master(dev)) { | 2196 | if (mlx4_is_master(dev)) { |
2196 | if (mlx4_multi_func_init(dev)) { | 2197 | err = mlx4_multi_func_init(dev); |
2198 | if (err) { | ||
2197 | mlx4_err(dev, "Failed to init master mfunc" | 2199 | mlx4_err(dev, "Failed to init master mfunc" |
2198 | "interface, aborting.\n"); | 2200 | "interface, aborting.\n"); |
2199 | goto err_close; | 2201 | goto err_close; |
@@ -2210,6 +2212,7 @@ slave_start: | |||
2210 | mlx4_enable_msi_x(dev); | 2212 | mlx4_enable_msi_x(dev); |
2211 | if ((mlx4_is_mfunc(dev)) && | 2213 | if ((mlx4_is_mfunc(dev)) && |
2212 | !(dev->flags & MLX4_FLAG_MSI_X)) { | 2214 | !(dev->flags & MLX4_FLAG_MSI_X)) { |
2215 | err = -ENOSYS; | ||
2213 | mlx4_err(dev, "INTx is not supported in multi-function mode." | 2216 | mlx4_err(dev, "INTx is not supported in multi-function mode." |
2214 | " aborting.\n"); | 2217 | " aborting.\n"); |
2215 | goto err_free_eq; | 2218 | goto err_free_eq; |