Lines Matching refs:table
49 u16 table[0]; member
156 static bool is_gid_index_default(const struct ib_gid_table *table, in is_gid_index_default() argument
159 return index < 32 && (BIT(index) & table->default_gid_indices); in is_gid_index_default()
213 struct ib_gid_table *table = rdma_gid_table(device, port_num); in free_gid_entry_locked() local
223 write_lock_irq(&table->rwlock); in free_gid_entry_locked()
231 if (entry == table->data_vec[entry->attr.index]) in free_gid_entry_locked()
232 table->data_vec[entry->attr.index] = NULL; in free_gid_entry_locked()
234 write_unlock_irq(&table->rwlock); in free_gid_entry_locked()
263 struct ib_gid_table *table = rdma_gid_table(device, port_num); in free_gid_work() local
265 mutex_lock(&table->lock); in free_gid_work()
267 mutex_unlock(&table->lock); in free_gid_work()
287 static void store_gid_entry(struct ib_gid_table *table, in store_gid_entry() argument
296 lockdep_assert_held(&table->lock); in store_gid_entry()
297 write_lock_irq(&table->rwlock); in store_gid_entry()
298 table->data_vec[entry->attr.index] = entry; in store_gid_entry()
299 write_unlock_irq(&table->rwlock); in store_gid_entry()
350 struct ib_gid_table *table, int ix) in del_gid() argument
354 lockdep_assert_held(&table->lock); in del_gid()
358 table->data_vec[ix]->attr.gid.raw); in del_gid()
360 write_lock_irq(&table->rwlock); in del_gid()
361 entry = table->data_vec[ix]; in del_gid()
367 table->data_vec[ix] = NULL; in del_gid()
368 write_unlock_irq(&table->rwlock); in del_gid()
383 static int add_modify_gid(struct ib_gid_table *table, in add_modify_gid() argument
393 if (is_gid_entry_valid(table->data_vec[attr->index])) in add_modify_gid()
394 del_gid(attr->device, attr->port_num, table, attr->index); in add_modify_gid()
414 store_gid_entry(table, entry); in add_modify_gid()
423 static int find_gid(struct ib_gid_table *table, const union ib_gid *gid, in find_gid() argument
431 while (i < table->sz && (found < 0 || empty < 0)) { in find_gid()
432 struct ib_gid_table_entry *data = table->data_vec[i]; in find_gid()
446 is_gid_index_default(table, curr_index)) { in find_gid()
485 is_gid_index_default(table, curr_index) != default_gid) in find_gid()
507 struct ib_gid_table *table; in __ib_cache_gid_add() local
519 table = rdma_gid_table(ib_dev, port); in __ib_cache_gid_add()
521 mutex_lock(&table->lock); in __ib_cache_gid_add()
523 ix = find_gid(table, gid, attr, default_gid, mask, &empty); in __ib_cache_gid_add()
535 ret = add_modify_gid(table, attr); in __ib_cache_gid_add()
540 mutex_unlock(&table->lock); in __ib_cache_gid_add()
583 struct ib_gid_table *table; in _ib_cache_gid_del() local
587 table = rdma_gid_table(ib_dev, port); in _ib_cache_gid_del()
589 mutex_lock(&table->lock); in _ib_cache_gid_del()
591 ix = find_gid(table, gid, attr, default_gid, mask, NULL); in _ib_cache_gid_del()
597 del_gid(ib_dev, port, table, ix); in _ib_cache_gid_del()
601 mutex_unlock(&table->lock); in _ib_cache_gid_del()
622 struct ib_gid_table *table; in ib_cache_gid_del_all_netdev_gids() local
626 table = rdma_gid_table(ib_dev, port); in ib_cache_gid_del_all_netdev_gids()
628 mutex_lock(&table->lock); in ib_cache_gid_del_all_netdev_gids()
630 for (ix = 0; ix < table->sz; ix++) { in ib_cache_gid_del_all_netdev_gids()
631 if (is_gid_entry_valid(table->data_vec[ix]) && in ib_cache_gid_del_all_netdev_gids()
632 table->data_vec[ix]->attr.ndev == ndev) { in ib_cache_gid_del_all_netdev_gids()
633 del_gid(ib_dev, port, table, ix); in ib_cache_gid_del_all_netdev_gids()
638 mutex_unlock(&table->lock); in ib_cache_gid_del_all_netdev_gids()
668 struct ib_gid_table *table; in rdma_find_gid_by_port() local
678 table = rdma_gid_table(ib_dev, port); in rdma_find_gid_by_port()
683 read_lock_irqsave(&table->rwlock, flags); in rdma_find_gid_by_port()
684 local_index = find_gid(table, gid, &val, false, mask, NULL); in rdma_find_gid_by_port()
686 get_gid_entry(table->data_vec[local_index]); in rdma_find_gid_by_port()
687 attr = &table->data_vec[local_index]->attr; in rdma_find_gid_by_port()
688 read_unlock_irqrestore(&table->rwlock, flags); in rdma_find_gid_by_port()
692 read_unlock_irqrestore(&table->rwlock, flags); in rdma_find_gid_by_port()
721 struct ib_gid_table *table; in rdma_find_gid_by_filter() local
728 table = rdma_gid_table(ib_dev, port); in rdma_find_gid_by_filter()
730 read_lock_irqsave(&table->rwlock, flags); in rdma_find_gid_by_filter()
731 for (i = 0; i < table->sz; i++) { in rdma_find_gid_by_filter()
732 struct ib_gid_table_entry *entry = table->data_vec[i]; in rdma_find_gid_by_filter()
746 read_unlock_irqrestore(&table->rwlock, flags); in rdma_find_gid_by_filter()
752 struct ib_gid_table *table = kzalloc(sizeof(*table), GFP_KERNEL); in alloc_gid_table() local
754 if (!table) in alloc_gid_table()
757 table->data_vec = kcalloc(sz, sizeof(*table->data_vec), GFP_KERNEL); in alloc_gid_table()
758 if (!table->data_vec) in alloc_gid_table()
761 mutex_init(&table->lock); in alloc_gid_table()
763 table->sz = sz; in alloc_gid_table()
764 rwlock_init(&table->rwlock); in alloc_gid_table()
765 return table; in alloc_gid_table()
768 kfree(table); in alloc_gid_table()
773 struct ib_gid_table *table) in release_gid_table() argument
778 if (!table) in release_gid_table()
781 for (i = 0; i < table->sz; i++) { in release_gid_table()
782 if (is_gid_entry_free(table->data_vec[i])) in release_gid_table()
784 if (kref_read(&table->data_vec[i]->kref) > 1) { in release_gid_table()
787 kref_read(&table->data_vec[i]->kref)); in release_gid_table()
794 kfree(table->data_vec); in release_gid_table()
795 kfree(table); in release_gid_table()
799 struct ib_gid_table *table) in cleanup_gid_table_port() argument
804 if (!table) in cleanup_gid_table_port()
807 mutex_lock(&table->lock); in cleanup_gid_table_port()
808 for (i = 0; i < table->sz; ++i) { in cleanup_gid_table_port()
809 if (is_gid_entry_valid(table->data_vec[i])) { in cleanup_gid_table_port()
810 del_gid(ib_dev, port, table, i); in cleanup_gid_table_port()
814 mutex_unlock(&table->lock); in cleanup_gid_table_port()
854 struct ib_gid_table *table) in gid_table_reserve_default() argument
863 for (i = 0; i < num_default_gids && i < table->sz; i++) in gid_table_reserve_default()
864 table->default_gid_indices |= BIT(i); in gid_table_reserve_default()
870 struct ib_gid_table *table; in gid_table_release_one() local
874 table = ib_dev->cache.ports[port].gid; in gid_table_release_one()
875 release_gid_table(ib_dev, port, table); in gid_table_release_one()
883 struct ib_gid_table *table; in _gid_table_setup_one() local
888 table = alloc_gid_table( in _gid_table_setup_one()
890 if (!table) in _gid_table_setup_one()
893 gid_table_reserve_default(ib_dev, rdma_port, table); in _gid_table_setup_one()
894 ib_dev->cache.ports[port].gid = table; in _gid_table_setup_one()
905 struct ib_gid_table *table; in gid_table_cleanup_one() local
909 table = ib_dev->cache.ports[port].gid; in gid_table_cleanup_one()
911 table); in gid_table_cleanup_one()
946 struct ib_gid_table *table; in rdma_query_gid() local
953 table = rdma_gid_table(device, port_num); in rdma_query_gid()
954 read_lock_irqsave(&table->rwlock, flags); in rdma_query_gid()
956 if (index < 0 || index >= table->sz || in rdma_query_gid()
957 !is_gid_entry_valid(table->data_vec[index])) in rdma_query_gid()
960 memcpy(gid, &table->data_vec[index]->attr.gid, sizeof(*gid)); in rdma_query_gid()
964 read_unlock_irqrestore(&table->rwlock, flags); in rdma_query_gid()
996 struct ib_gid_table *table; in rdma_find_gid() local
1000 table = device->cache.ports[p].gid; in rdma_find_gid()
1001 read_lock_irqsave(&table->rwlock, flags); in rdma_find_gid()
1002 index = find_gid(table, gid, &gid_attr_val, false, mask, NULL); in rdma_find_gid()
1006 get_gid_entry(table->data_vec[index]); in rdma_find_gid()
1007 attr = &table->data_vec[index]->attr; in rdma_find_gid()
1008 read_unlock_irqrestore(&table->rwlock, flags); in rdma_find_gid()
1011 read_unlock_irqrestore(&table->rwlock, flags); in rdma_find_gid()
1037 *pkey = cache->table[index]; in ib_get_cached_pkey()
1085 if ((cache->table[i] & 0x7fff) == (pkey & 0x7fff)) { in ib_find_cached_pkey()
1086 if (cache->table[i] & 0x8000) { in ib_find_cached_pkey()
1125 if (cache->table[i] == pkey) { in ib_find_exact_cached_pkey()
1194 struct ib_gid_table *table; in rdma_get_gid_attr() local
1200 table = rdma_gid_table(device, port_num); in rdma_get_gid_attr()
1201 if (index < 0 || index >= table->sz) in rdma_get_gid_attr()
1204 read_lock_irqsave(&table->rwlock, flags); in rdma_get_gid_attr()
1205 if (!is_gid_entry_valid(table->data_vec[index])) in rdma_get_gid_attr()
1208 get_gid_entry(table->data_vec[index]); in rdma_get_gid_attr()
1209 attr = &table->data_vec[index]->attr; in rdma_get_gid_attr()
1211 read_unlock_irqrestore(&table->rwlock, flags); in rdma_get_gid_attr()
1259 struct ib_gid_table *table; in config_non_roce_gid_cache() local
1265 table = rdma_gid_table(device, port); in config_non_roce_gid_cache()
1267 mutex_lock(&table->lock); in config_non_roce_gid_cache()
1278 add_modify_gid(table, &gid_attr); in config_non_roce_gid_cache()
1281 mutex_unlock(&table->lock); in config_non_roce_gid_cache()
1315 pkey_cache = kmalloc(struct_size(pkey_cache, table, in ib_cache_update()
1324 ret = ib_query_pkey(device, port, i, pkey_cache->table + i); in ib_cache_update()