aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/core/cache.c
diff options
context:
space:
mode:
authorParav Pandit <parav@mellanox.com>2017-11-14 07:52:05 -0500
committerJason Gunthorpe <jgg@mellanox.com>2017-12-18 17:37:08 -0500
commit151ed9d7009769207cd71065f64f58e7d73add65 (patch)
tree0a28daeba9b9f4ebc82f3349367b1c38d1c3b349 /drivers/infiniband/core/cache.c
parentb0dd0d335364a2a748a63413ca4812c9398bf2ae (diff)
IB/core: Refactor to avoid unnecessary check on GID lookup miss
Currently on every gid entry comparison miss found variable is checked; which is not needed as those two comparison fail already indicate that GID is not found yet. So refactor to avoid such check and copy the GID index when found. Signed-off-by: Parav Pandit <parav@mellanox.com> Reviewed-by: Daniel Jurgens <danielj@mellanox.com> Signed-off-by: Leon Romanovsky <leon@kernel.org> Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
Diffstat (limited to 'drivers/infiniband/core/cache.c')
-rw-r--r--drivers/infiniband/core/cache.c15
1 files changed, 6 insertions, 9 deletions
diff --git a/drivers/infiniband/core/cache.c b/drivers/infiniband/core/cache.c
index 77515638c55c..43300b8e6341 100644
--- a/drivers/infiniband/core/cache.c
+++ b/drivers/infiniband/core/cache.c
@@ -573,27 +573,24 @@ static int ib_cache_gid_find_by_filter(struct ib_device *ib_dev,
573 struct ib_gid_attr attr; 573 struct ib_gid_attr attr;
574 574
575 if (table->data_vec[i].props & GID_TABLE_ENTRY_INVALID) 575 if (table->data_vec[i].props & GID_TABLE_ENTRY_INVALID)
576 goto next; 576 continue;
577 577
578 if (memcmp(gid, &table->data_vec[i].gid, sizeof(*gid))) 578 if (memcmp(gid, &table->data_vec[i].gid, sizeof(*gid)))
579 goto next; 579 continue;
580 580
581 memcpy(&attr, &table->data_vec[i].attr, sizeof(attr)); 581 memcpy(&attr, &table->data_vec[i].attr, sizeof(attr));
582 582
583 if (filter(gid, &attr, context)) 583 if (filter(gid, &attr, context)) {
584 found = true; 584 found = true;
585 585 if (index)
586next: 586 *index = i;
587 if (found)
588 break; 587 break;
588 }
589 } 589 }
590 read_unlock_irqrestore(&table->rwlock, flags); 590 read_unlock_irqrestore(&table->rwlock, flags);
591 591
592 if (!found) 592 if (!found)
593 return -ENOENT; 593 return -ENOENT;
594
595 if (index)
596 *index = i;
597 return 0; 594 return 0;
598} 595}
599 596