mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
net/mlx4: always create the eth and ib auxiliary devices
Since commit7d22b1cb9d("mlx4: Connect the infiniband part to the auxiliary bus"), mlx4_core creates the "ib" auxiliary device only for an IB port or a device that advertises IBoE. Before it, each mlx4 interface was offered every device and decided in its own add callback. mlx4_ib_add() accepted Ethernet ports without IBoE and registered them for raw packet QPs only. ConnectX-3 VFs on Azure have an Ethernet port and no IBoE, so since v6.6 they get no RDMA device. DPDK's mlx4 PMD, which needs only raw packet QPs, then cannot open them: net_mlx4: cannot access device, is mlx4_ib loaded? Restore the old behaviour by creating both auxiliary devices for every device and letting mlx4_en and mlx4_ib decide in probe, as their add callbacks did. mlx4_ib_probe() returns -ENODEV when there are no usable ports, and mlx4_en_probe() binds a device without Ethernet ports but creates no netdevs, as mlx4_en_add() did. Tested on 6.12.111 on an Azure VM with two ConnectX-3 VFs: each gets an eth and an ib auxiliary device, and DPDK attaches both VFs and passes traffic through them. Fixes:7d22b1cb9d("mlx4: Connect the infiniband part to the auxiliary bus") Closes: https://lore.kernel.org/r/20261014133951.3219055-1-pdmorrow@gmail.com Suggested-by: Leon Romanovsky <leon@kernel.org> Assisted-by: LLM Signed-off-by: Peter Morrow <pdmorrow@gmail.com> Reviewed-by: Simon Horman <horms@kernel.org> Reviewed-by: Daniel Machon <daniel.machon@microchip.com> Acked-by: Tariq Toukan <tariqt@nvidia.com> Signed-off-by: Dave Miller <davem@davem-thinkpadp1gen8.ibmlond.csb>
This commit is contained in:
parent
5d7f3375cd
commit
557d801386
|
|
@ -43,23 +43,12 @@ static DEFINE_IDA(mlx4_adev_ida);
|
|||
|
||||
static bool is_eth_supported(struct mlx4_dev *dev)
|
||||
{
|
||||
for (int port = 1; port <= dev->caps.num_ports; port++)
|
||||
if (dev->caps.port_type[port] == MLX4_PORT_TYPE_ETH)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool is_ib_supported(struct mlx4_dev *dev)
|
||||
{
|
||||
for (int port = 1; port <= dev->caps.num_ports; port++)
|
||||
if (dev->caps.port_type[port] == MLX4_PORT_TYPE_IB)
|
||||
return true;
|
||||
|
||||
if (dev->caps.flags & MLX4_DEV_CAP_FLAG_IBOE)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
static const struct mlx4_adev_device {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user