Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ea1075ed authored by Jason Gunthorpe's avatar Jason Gunthorpe
Browse files

RDMA: Add and use rdma_for_each_port



We have many loops iterating over all of the end port numbers on a struct
ib_device, simplify them with a for_each helper.

Reviewed-by: default avatarParav Pandit <parav@mellanox.com>
Signed-off-by: default avatarJason Gunthorpe <jgg@mellanox.com>
parent f2a0e45f
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -361,6 +361,7 @@ ForEachMacros:
  - 'radix_tree_for_each_slot'
  - 'radix_tree_for_each_tagged'
  - 'rbtree_postorder_for_each_entry_safe'
  - 'rdma_for_each_port'
  - 'resource_list_for_each_entry'
  - 'resource_list_for_each_entry_safe'
  - 'rhl_for_each_entry_rcu'
+3 −3
Original line number Diff line number Diff line
@@ -1428,7 +1428,7 @@ static void ib_cache_event(struct ib_event_handler *handler,

int ib_cache_setup_one(struct ib_device *device)
{
	int p;
	unsigned int p;
	int err;

	rwlock_init(&device->cache.lock);
@@ -1447,8 +1447,8 @@ int ib_cache_setup_one(struct ib_device *device)
		return err;
	}

	for (p = 0; p <= rdma_end_port(device) - rdma_start_port(device); ++p)
		ib_cache_update(device, p + rdma_start_port(device), true);
	rdma_for_each_port (device, p)
		ib_cache_update(device, p, true);

	INIT_IB_EVENT_HANDLER(&device->cache.event_handler,
			      device, ib_cache_event);
+3 −4
Original line number Diff line number Diff line
@@ -659,7 +659,7 @@ static int cma_acquire_dev_by_src_ip(struct rdma_id_private *id_priv)
	struct cma_device *cma_dev;
	enum ib_gid_type gid_type;
	int ret = -ENODEV;
	u8 port;
	unsigned int port;

	if (dev_addr->dev_type != ARPHRD_INFINIBAND &&
	    id_priv->id.ps == RDMA_PS_IPOIB)
@@ -673,8 +673,7 @@ static int cma_acquire_dev_by_src_ip(struct rdma_id_private *id_priv)

	mutex_lock(&lock);
	list_for_each_entry(cma_dev, &dev_list, list) {
		for (port = rdma_start_port(cma_dev->device);
		     port <= rdma_end_port(cma_dev->device); port++) {
		rdma_for_each_port (cma_dev->device, port) {
			gidp = rdma_protocol_roce(cma_dev->device, port) ?
			       &iboe_gid : &gid;
			gid_type = cma_dev->default_gid_type[port - 1];
@@ -4548,7 +4547,7 @@ static void cma_add_one(struct ib_device *device)
	if (!cma_dev->default_roce_tos)
		goto free_gid_type;

	for (i = rdma_start_port(device); i <= rdma_end_port(device); i++) {
	rdma_for_each_port (device, i) {
		supported_gids = roce_gid_type_mask_support(device, i);
		WARN_ON(!supported_gids);
		if (supported_gids & (1 << CMA_PREFERRED_ROCE_GID_TYPE))
+12 −14
Original line number Diff line number Diff line
@@ -470,10 +470,8 @@ static int verify_immutable(const struct ib_device *dev, u8 port)

static int read_port_immutable(struct ib_device *device)
{
	unsigned int port;
	int ret;
	u8 start_port = rdma_start_port(device);
	u8 end_port = rdma_end_port(device);
	u8 port;

	/**
	 * device->port_immutable is indexed directly by the port number to make
@@ -482,13 +480,13 @@ static int read_port_immutable(struct ib_device *device)
	 * Therefore port_immutable is declared as a 1 based array with
	 * potential empty slots at the beginning.
	 */
	device->port_immutable = kcalloc(end_port + 1,
					 sizeof(*device->port_immutable),
					 GFP_KERNEL);
	device->port_immutable =
		kcalloc(rdma_end_port(device) + 1,
			sizeof(*device->port_immutable), GFP_KERNEL);
	if (!device->port_immutable)
		return -ENOMEM;

	for (port = start_port; port <= end_port; ++port) {
	rdma_for_each_port (device, port) {
		ret = device->ops.get_port_immutable(
			device, port, &device->port_immutable[port]);
		if (ret)
@@ -540,9 +538,9 @@ static void ib_policy_change_task(struct work_struct *work)

	down_read(&devices_rwsem);
	xa_for_each_marked (&devices, index, dev, DEVICE_REGISTERED) {
		int i;
		unsigned int i;

		for (i = rdma_start_port(dev); i <= rdma_end_port(dev); i++) {
		rdma_for_each_port (dev, i) {
			u64 sp;
			int ret = ib_get_cached_subnet_prefix(dev,
							      i,
@@ -1060,10 +1058,9 @@ void ib_enum_roce_netdev(struct ib_device *ib_dev,
			 roce_netdev_callback cb,
			 void *cookie)
{
	u8 port;
	unsigned int port;

	for (port = rdma_start_port(ib_dev); port <= rdma_end_port(ib_dev);
	     port++)
	rdma_for_each_port (ib_dev, port)
		if (rdma_protocol_roce(ib_dev, port)) {
			struct net_device *idev = NULL;

@@ -1217,9 +1214,10 @@ int ib_find_gid(struct ib_device *device, union ib_gid *gid,
		u8 *port_num, u16 *index)
{
	union ib_gid tmp_gid;
	int ret, port, i;
	unsigned int port;
	int ret, i;

	for (port = rdma_start_port(device); port <= rdma_end_port(device); ++port) {
	rdma_for_each_port (device, port) {
		if (!rdma_protocol_ib(device, port))
			continue;

+2 −2
Original line number Diff line number Diff line
@@ -3326,9 +3326,9 @@ static void ib_mad_init_device(struct ib_device *device)

static void ib_mad_remove_device(struct ib_device *device, void *client_data)
{
	int i;
	unsigned int i;

	for (i = rdma_start_port(device); i <= rdma_end_port(device); i++) {
	rdma_for_each_port (device, i) {
		if (!rdma_cap_ib_mad(device, i))
			continue;

Loading