Commit 50660c51 authored by Mark Zhang's avatar Mark Zhang Committed by Leon Romanovsky
Browse files

RDMA/core: Create "issm*" device nodes only when SMI is supported



For an IB port create it's issm device node only when it has SMI
capability. In following patches mlx5 is going to support IB devices
without this cap.

Signed-off-by: default avatarMark Zhang <markzhang@nvidia.com>
Link: https://lore.kernel.org/r/359f73c9a388d5e3ae971e40d8507888b1ba6f93.1718553901.git.leon@kernel.org


Signed-off-by: default avatarLeon Romanovsky <leonro@nvidia.com>
parent 24943dcd
Loading
Loading
Loading
Loading
+18 −11
Original line number Diff line number Diff line
@@ -1321,6 +1321,7 @@ static int ib_umad_init_port(struct ib_device *device, int port_num,
	if (ret)
		goto err_cdev;

	if (rdma_cap_ib_smi(device, port_num)) {
		ib_umad_init_port_dev(&port->sm_dev, port, device);
		port->sm_dev.devt = base_issm;
		dev_set_name(&port->sm_dev, "issm%d", port->dev_num);
@@ -1330,6 +1331,7 @@ static int ib_umad_init_port(struct ib_device *device, int port_num,
		ret = cdev_device_add(&port->sm_cdev, &port->sm_dev);
		if (ret)
			goto err_dev;
	}

	return 0;

@@ -1345,9 +1347,13 @@ static int ib_umad_init_port(struct ib_device *device, int port_num,
static void ib_umad_kill_port(struct ib_umad_port *port)
{
	struct ib_umad_file *file;
	bool has_smi = false;
	int id;

	if (rdma_cap_ib_smi(port->ib_dev, port->port_num)) {
		cdev_device_del(&port->sm_cdev, &port->sm_dev);
		has_smi = true;
	}
	cdev_device_del(&port->cdev, &port->dev);

	mutex_lock(&port->file_mutex);
@@ -1373,6 +1379,7 @@ static void ib_umad_kill_port(struct ib_umad_port *port)
	ida_free(&umad_ida, port->dev_num);

	/* balances device_initialize() */
	if (has_smi)
		put_device(&port->sm_dev);
	put_device(&port->dev);
}