Message ID | 4F439EF3.8050702@mellanox.co.il |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
From: Yevgeny Petrilin <yevgenyp@mellanox.co.il> Date: Tue, 21 Feb 2012 15:41:07 +0200 > > In port type change flow, need to set the new port types only after > all interfaces have finished the unregister process. > Otherwise, during unregister, one of the interfaces might issue a SET_PORT > command with wrong port types, it can cause bad FW behavior. > > Signed-off-by: Yevgeny Petrilin <yevgenyp@mellanox.co.il> Applied. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/net/ethernet/mellanox/mlx4/main.c b/drivers/net/ethernet/mellanox/mlx4/main.c index 5c655a2..32f8799 100644 --- a/drivers/net/ethernet/mellanox/mlx4/main.c +++ b/drivers/net/ethernet/mellanox/mlx4/main.c @@ -531,15 +531,14 @@ int mlx4_change_port_types(struct mlx4_dev *dev, for (port = 0; port < dev->caps.num_ports; port++) { /* Change the port type only if the new type is different * from the current, and not set to Auto */ - if (port_types[port] != dev->caps.port_type[port + 1]) { + if (port_types[port] != dev->caps.port_type[port + 1]) change = 1; - dev->caps.port_type[port + 1] = port_types[port]; - } } if (change) { mlx4_unregister_device(dev); for (port = 1; port <= dev->caps.num_ports; port++) { mlx4_CLOSE_PORT(dev, port); + dev->caps.port_type[port + 1] = port_types[port]; err = mlx4_SET_PORT(dev, port); if (err) { mlx4_err(dev, "Failed to set port %d, "
In port type change flow, need to set the new port types only after all interfaces have finished the unregister process. Otherwise, during unregister, one of the interfaces might issue a SET_PORT command with wrong port types, it can cause bad FW behavior. Signed-off-by: Yevgeny Petrilin <yevgenyp@mellanox.co.il> --- drivers/net/ethernet/mellanox/mlx4/main.c | 5 ++--- 1 files changed, 2 insertions(+), 3 deletions(-)