|
@@ -1104,6 +1104,7 @@ int mlx4_QUERY_PORT(struct mlx4_dev *dev, int port, struct mlx4_port_cap *port_c
|
|
|
goto out;
|
|
|
|
|
|
MLX4_GET(field, outbox, QUERY_PORT_SUPPORTED_TYPE_OFFSET);
|
|
|
+ port_cap->link_state = (field & 0x80) >> 7;
|
|
|
port_cap->supported_port_types = field & 3;
|
|
|
port_cap->suggested_type = (field >> 3) & 1;
|
|
|
port_cap->default_sense = (field >> 4) & 1;
|
|
@@ -1310,6 +1311,15 @@ int mlx4_QUERY_PORT_wrapper(struct mlx4_dev *dev, int slave,
|
|
|
port_type |= MLX4_PORT_LINK_UP_MASK;
|
|
|
else if (IFLA_VF_LINK_STATE_DISABLE == admin_link_state)
|
|
|
port_type &= ~MLX4_PORT_LINK_UP_MASK;
|
|
|
+ else if (IFLA_VF_LINK_STATE_AUTO == admin_link_state && mlx4_is_bonded(dev)) {
|
|
|
+ int other_port = (port == 1) ? 2 : 1;
|
|
|
+ struct mlx4_port_cap port_cap;
|
|
|
+
|
|
|
+ err = mlx4_QUERY_PORT(dev, other_port, &port_cap);
|
|
|
+ if (err)
|
|
|
+ goto out;
|
|
|
+ port_type |= (port_cap.link_state << 7);
|
|
|
+ }
|
|
|
|
|
|
MLX4_PUT(outbox->buf, port_type,
|
|
|
QUERY_PORT_SUPPORTED_TYPE_OFFSET);
|
|
@@ -1325,7 +1335,7 @@ int mlx4_QUERY_PORT_wrapper(struct mlx4_dev *dev, int slave,
|
|
|
MLX4_PUT(outbox->buf, short_field,
|
|
|
QUERY_PORT_CUR_MAX_PKEY_OFFSET);
|
|
|
}
|
|
|
-
|
|
|
+out:
|
|
|
return err;
|
|
|
}
|
|
|
|