Lines Matching refs:table
49 u16 table[] __counted_by(table_len);
170 static bool is_gid_index_default(const struct ib_gid_table *table, in is_gid_index_default() argument
173 return index < 32 && (BIT(index) & table->default_gid_indices); in is_gid_index_default()
241 struct ib_gid_table *table = rdma_gid_table(device, port_num); in free_gid_entry_locked() local
246 write_lock_irq(&table->rwlock); in free_gid_entry_locked()
254 if (entry == table->data_vec[entry->attr.index]) in free_gid_entry_locked()
255 table->data_vec[entry->attr.index] = NULL; in free_gid_entry_locked()
257 write_unlock_irq(&table->rwlock); in free_gid_entry_locked()
286 struct ib_gid_table *table = rdma_gid_table(device, port_num); in free_gid_work() local
288 mutex_lock(&table->lock); in free_gid_work()
290 mutex_unlock(&table->lock); in free_gid_work()
320 static void store_gid_entry(struct ib_gid_table *table, in store_gid_entry() argument
329 lockdep_assert_held(&table->lock); in store_gid_entry()
330 write_lock_irq(&table->rwlock); in store_gid_entry()
331 table->data_vec[entry->attr.index] = entry; in store_gid_entry()
332 write_unlock_irq(&table->rwlock); in store_gid_entry()
382 struct ib_gid_table *table, int ix) in del_gid() argument
387 lockdep_assert_held(&table->lock); in del_gid()
390 ix, table->data_vec[ix]->attr.gid.raw); in del_gid()
392 write_lock_irq(&table->rwlock); in del_gid()
393 entry = table->data_vec[ix]; in del_gid()
399 table->data_vec[ix] = NULL; in del_gid()
400 write_unlock_irq(&table->rwlock); in del_gid()
425 static int add_modify_gid(struct ib_gid_table *table, in add_modify_gid() argument
435 if (is_gid_entry_valid(table->data_vec[attr->index])) in add_modify_gid()
436 del_gid(attr->device, attr->port_num, table, attr->index); in add_modify_gid()
456 store_gid_entry(table, entry); in add_modify_gid()
465 static int find_gid(struct ib_gid_table *table, const union ib_gid *gid, in find_gid() argument
473 while (i < table->sz && (found < 0 || empty < 0)) { in find_gid()
474 struct ib_gid_table_entry *data = table->data_vec[i]; in find_gid()
488 is_gid_index_default(table, curr_index)) { in find_gid()
527 is_gid_index_default(table, curr_index) != default_gid) in find_gid()
549 struct ib_gid_table *table; in __ib_cache_gid_add() local
561 table = rdma_gid_table(ib_dev, port); in __ib_cache_gid_add()
563 mutex_lock(&table->lock); in __ib_cache_gid_add()
565 ix = find_gid(table, gid, attr, default_gid, mask, &empty); in __ib_cache_gid_add()
577 ret = add_modify_gid(table, attr); in __ib_cache_gid_add()
582 mutex_unlock(&table->lock); in __ib_cache_gid_add()
604 struct ib_gid_table *table; in _ib_cache_gid_del() local
608 table = rdma_gid_table(ib_dev, port); in _ib_cache_gid_del()
610 mutex_lock(&table->lock); in _ib_cache_gid_del()
612 ix = find_gid(table, gid, attr, default_gid, mask, NULL); in _ib_cache_gid_del()
618 del_gid(ib_dev, port, table, ix); in _ib_cache_gid_del()
622 mutex_unlock(&table->lock); in _ib_cache_gid_del()
643 struct ib_gid_table *table; in ib_cache_gid_del_all_netdev_gids() local
647 table = rdma_gid_table(ib_dev, port); in ib_cache_gid_del_all_netdev_gids()
649 mutex_lock(&table->lock); in ib_cache_gid_del_all_netdev_gids()
651 for (ix = 0; ix < table->sz; ix++) { in ib_cache_gid_del_all_netdev_gids()
652 if (is_gid_entry_valid(table->data_vec[ix]) && in ib_cache_gid_del_all_netdev_gids()
653 table->data_vec[ix]->attr.ndev == ndev) { in ib_cache_gid_del_all_netdev_gids()
654 del_gid(ib_dev, port, table, ix); in ib_cache_gid_del_all_netdev_gids()
659 mutex_unlock(&table->lock); in ib_cache_gid_del_all_netdev_gids()
688 struct ib_gid_table *table; in rdma_find_gid_by_port() local
698 table = rdma_gid_table(ib_dev, port); in rdma_find_gid_by_port()
703 read_lock_irqsave(&table->rwlock, flags); in rdma_find_gid_by_port()
704 local_index = find_gid(table, gid, &val, false, mask, NULL); in rdma_find_gid_by_port()
706 get_gid_entry(table->data_vec[local_index]); in rdma_find_gid_by_port()
707 attr = &table->data_vec[local_index]->attr; in rdma_find_gid_by_port()
708 read_unlock_irqrestore(&table->rwlock, flags); in rdma_find_gid_by_port()
712 read_unlock_irqrestore(&table->rwlock, flags); in rdma_find_gid_by_port()
742 struct ib_gid_table *table; in rdma_find_gid_by_filter() local
749 table = rdma_gid_table(ib_dev, port); in rdma_find_gid_by_filter()
751 read_lock_irqsave(&table->rwlock, flags); in rdma_find_gid_by_filter()
752 for (i = 0; i < table->sz; i++) { in rdma_find_gid_by_filter()
753 struct ib_gid_table_entry *entry = table->data_vec[i]; in rdma_find_gid_by_filter()
767 read_unlock_irqrestore(&table->rwlock, flags); in rdma_find_gid_by_filter()
773 struct ib_gid_table *table = kzalloc_flex(*table, data_vec, sz); in alloc_gid_table() local
775 if (!table) in alloc_gid_table()
778 table->sz = sz; in alloc_gid_table()
780 mutex_init(&table->lock); in alloc_gid_table()
781 rwlock_init(&table->rwlock); in alloc_gid_table()
782 return table; in alloc_gid_table()
786 struct ib_gid_table *table) in release_gid_table() argument
790 if (!table) in release_gid_table()
793 for (i = 0; i < table->sz; i++) { in release_gid_table()
794 if (is_gid_entry_free(table->data_vec[i])) in release_gid_table()
800 kref_read(&table->data_vec[i]->kref)); in release_gid_table()
803 mutex_destroy(&table->lock); in release_gid_table()
804 kfree(table); in release_gid_table()
808 struct ib_gid_table *table) in cleanup_gid_table_port() argument
812 if (!table) in cleanup_gid_table_port()
815 mutex_lock(&table->lock); in cleanup_gid_table_port()
816 for (i = 0; i < table->sz; ++i) { in cleanup_gid_table_port()
817 if (is_gid_entry_valid(table->data_vec[i])) in cleanup_gid_table_port()
818 del_gid(ib_dev, port, table, i); in cleanup_gid_table_port()
820 mutex_unlock(&table->lock); in cleanup_gid_table_port()
857 struct ib_gid_table *table) in gid_table_reserve_default() argument
866 for (i = 0; i < num_default_gids && i < table->sz; i++) in gid_table_reserve_default()
867 table->default_gid_indices |= BIT(i); in gid_table_reserve_default()
883 struct ib_gid_table *table; in _gid_table_setup_one() local
887 table = alloc_gid_table( in _gid_table_setup_one()
889 if (!table) in _gid_table_setup_one()
892 gid_table_reserve_default(ib_dev, rdma_port, table); in _gid_table_setup_one()
893 ib_dev->port_data[rdma_port].cache.gid = table; in _gid_table_setup_one()
949 struct ib_gid_table *table; in rdma_query_gid() local
956 table = rdma_gid_table(device, port_num); in rdma_query_gid()
957 read_lock_irqsave(&table->rwlock, flags); in rdma_query_gid()
959 if (index < 0 || index >= table->sz) { in rdma_query_gid()
964 if (!is_gid_entry_valid(table->data_vec[index])) { in rdma_query_gid()
969 memcpy(gid, &table->data_vec[index]->attr.gid, sizeof(*gid)); in rdma_query_gid()
973 read_unlock_irqrestore(&table->rwlock, flags); in rdma_query_gid()
1022 struct ib_gid_table *table; in rdma_find_gid() local
1026 table = device->port_data[p].cache.gid; in rdma_find_gid()
1027 read_lock_irqsave(&table->rwlock, flags); in rdma_find_gid()
1028 index = find_gid(table, gid, &gid_attr_val, false, mask, NULL); in rdma_find_gid()
1032 get_gid_entry(table->data_vec[index]); in rdma_find_gid()
1033 attr = &table->data_vec[index]->attr; in rdma_find_gid()
1034 read_unlock_irqrestore(&table->rwlock, flags); in rdma_find_gid()
1037 read_unlock_irqrestore(&table->rwlock, flags); in rdma_find_gid()
1063 *pkey = cache->table[index]; in ib_get_cached_pkey()
1105 if ((cache->table[i] & 0x7fff) == (pkey & 0x7fff)) { in ib_find_cached_pkey()
1106 if (cache->table[i] & 0x8000) { in ib_find_cached_pkey()
1180 struct ib_gid_table *table; in rdma_get_gid_attr() local
1186 table = rdma_gid_table(device, port_num); in rdma_get_gid_attr()
1187 if (index < 0 || index >= table->sz) in rdma_get_gid_attr()
1190 read_lock_irqsave(&table->rwlock, flags); in rdma_get_gid_attr()
1191 if (!is_gid_entry_valid(table->data_vec[index])) in rdma_get_gid_attr()
1194 get_gid_entry(table->data_vec[index]); in rdma_get_gid_attr()
1195 attr = &table->data_vec[index]->attr; in rdma_get_gid_attr()
1197 read_unlock_irqrestore(&table->rwlock, flags); in rdma_get_gid_attr()
1217 struct ib_gid_table *table; in rdma_query_gid_table() local
1223 table = rdma_gid_table(device, port_num); in rdma_query_gid_table()
1224 read_lock_irqsave(&table->rwlock, flags); in rdma_query_gid_table()
1225 for (i = 0; i < table->sz; i++) { in rdma_query_gid_table()
1226 if (!is_gid_entry_valid(table->data_vec[i])) in rdma_query_gid_table()
1233 gid_attr = &table->data_vec[i]->attr; in rdma_query_gid_table()
1242 lockdep_is_held(&table->rwlock)); in rdma_query_gid_table()
1249 read_unlock_irqrestore(&table->rwlock, flags); in rdma_query_gid_table()
1254 read_unlock_irqrestore(&table->rwlock, flags); in rdma_query_gid_table()
1317 struct ib_gid_table *table; in rdma_read_gid_attr_ndev_rcu() local
1321 table = rdma_gid_table(device, port_num); in rdma_read_gid_attr_ndev_rcu()
1323 read_lock_irqsave(&table->rwlock, flags); in rdma_read_gid_attr_ndev_rcu()
1324 valid = is_gid_entry_valid(table->data_vec[attr->index]); in rdma_read_gid_attr_ndev_rcu()
1330 read_unlock_irqrestore(&table->rwlock, flags); in rdma_read_gid_attr_ndev_rcu()
1399 struct ib_gid_table *table; in config_non_roce_gid_cache() local
1405 table = rdma_gid_table(device, port); in config_non_roce_gid_cache()
1407 mutex_lock(&table->lock); in config_non_roce_gid_cache()
1432 add_modify_gid(table, &gid_attr); in config_non_roce_gid_cache()
1435 mutex_unlock(&table->lock); in config_non_roce_gid_cache()
1472 pkey_cache = kmalloc_flex(*pkey_cache, table, in ib_cache_update()
1483 pkey_cache->table + i); in ib_cache_update()