Lines Matching refs:table
49 u16 table[0]; member
116 struct ib_gid_table *table, int ix, in write_gid() argument
129 write_lock_irqsave(&table->data_vec[ix].lock, flags); in write_gid()
132 table->data_vec[ix].props |= GID_TABLE_ENTRY_INVALID; in write_gid()
133 write_unlock_irqrestore(&table->data_vec[ix].lock, flags); in write_gid()
139 &table->data_vec[ix].context); in write_gid()
142 &table->data_vec[ix].context); in write_gid()
143 write_lock_irqsave(&table->data_vec[ix].lock, flags); in write_gid()
146 old_net_dev = table->data_vec[ix].attr.ndev; in write_gid()
153 table->data_vec[ix].context = NULL; in write_gid()
156 table->data_vec[ix].props |= GID_TABLE_ENTRY_DEFAULT; in write_gid()
157 memcpy(&table->data_vec[ix].gid, gid, sizeof(*gid)); in write_gid()
158 memcpy(&table->data_vec[ix].attr, attr, sizeof(*attr)); in write_gid()
159 if (table->data_vec[ix].attr.ndev && in write_gid()
160 table->data_vec[ix].attr.ndev != old_net_dev) in write_gid()
161 dev_hold(table->data_vec[ix].attr.ndev); in write_gid()
163 table->data_vec[ix].props &= ~GID_TABLE_ENTRY_INVALID; in write_gid()
165 write_unlock_irqrestore(&table->data_vec[ix].lock, flags); in write_gid()
180 struct ib_gid_table *table, int ix, in add_gid() argument
184 return write_gid(ib_dev, port, table, ix, gid, attr, in add_gid()
189 struct ib_gid_table *table, int ix, in modify_gid() argument
193 return write_gid(ib_dev, port, table, ix, gid, attr, in modify_gid()
198 struct ib_gid_table *table, int ix, in del_gid() argument
200 return write_gid(ib_dev, port, table, ix, &zgid, &zattr, in del_gid()
204 static int find_gid(struct ib_gid_table *table, const union ib_gid *gid, in find_gid() argument
210 for (i = 0; i < table->sz; i++) { in find_gid()
212 struct ib_gid_attr *attr = &table->data_vec[i].attr; in find_gid()
214 read_lock_irqsave(&table->data_vec[i].lock, flags); in find_gid()
216 if (table->data_vec[i].props & GID_TABLE_ENTRY_INVALID) in find_gid()
220 memcmp(gid, &table->data_vec[i].gid, sizeof(*gid))) in find_gid()
228 !!(table->data_vec[i].props & GID_TABLE_ENTRY_DEFAULT) != in find_gid()
232 read_unlock_irqrestore(&table->data_vec[i].lock, flags); in find_gid()
235 read_unlock_irqrestore(&table->data_vec[i].lock, flags); in find_gid()
251 struct ib_gid_table *table; in ib_cache_gid_add() local
256 table = ports_table[port - rdma_start_port(ib_dev)]; in ib_cache_gid_add()
277 mutex_lock(&table->lock); in ib_cache_gid_add()
279 ix = find_gid(table, gid, attr, false, GID_ATTR_FIND_MASK_GID | in ib_cache_gid_add()
284 ix = find_gid(table, &zgid, NULL, false, GID_ATTR_FIND_MASK_GID | in ib_cache_gid_add()
291 add_gid(ib_dev, port, table, ix, gid, attr, false); in ib_cache_gid_add()
294 mutex_unlock(&table->lock); in ib_cache_gid_add()
302 struct ib_gid_table *table; in ib_cache_gid_del() local
305 table = ports_table[port - rdma_start_port(ib_dev)]; in ib_cache_gid_del()
307 mutex_lock(&table->lock); in ib_cache_gid_del()
309 ix = find_gid(table, gid, attr, false, in ib_cache_gid_del()
316 del_gid(ib_dev, port, table, ix, false); in ib_cache_gid_del()
319 mutex_unlock(&table->lock); in ib_cache_gid_del()
327 struct ib_gid_table *table; in ib_cache_gid_del_all_netdev_gids() local
330 table = ports_table[port - rdma_start_port(ib_dev)]; in ib_cache_gid_del_all_netdev_gids()
332 mutex_lock(&table->lock); in ib_cache_gid_del_all_netdev_gids()
334 for (ix = 0; ix < table->sz; ix++) in ib_cache_gid_del_all_netdev_gids()
335 if (table->data_vec[ix].attr.ndev == ndev) in ib_cache_gid_del_all_netdev_gids()
336 del_gid(ib_dev, port, table, ix, false); in ib_cache_gid_del_all_netdev_gids()
338 mutex_unlock(&table->lock); in ib_cache_gid_del_all_netdev_gids()
346 struct ib_gid_table *table; in __ib_cache_gid_get() local
349 table = ports_table[port - rdma_start_port(ib_dev)]; in __ib_cache_gid_get()
351 if (index < 0 || index >= table->sz) in __ib_cache_gid_get()
354 read_lock_irqsave(&table->data_vec[index].lock, flags); in __ib_cache_gid_get()
355 if (table->data_vec[index].props & GID_TABLE_ENTRY_INVALID) { in __ib_cache_gid_get()
356 read_unlock_irqrestore(&table->data_vec[index].lock, flags); in __ib_cache_gid_get()
360 memcpy(gid, &table->data_vec[index].gid, sizeof(*gid)); in __ib_cache_gid_get()
362 memcpy(attr, &table->data_vec[index].attr, sizeof(*attr)); in __ib_cache_gid_get()
367 read_unlock_irqrestore(&table->data_vec[index].lock, flags); in __ib_cache_gid_get()
378 struct ib_gid_table *table; in _ib_cache_gid_table_find() local
383 table = ports_table[p]; in _ib_cache_gid_table_find()
384 local_index = find_gid(table, gid, val, false, mask); in _ib_cache_gid_table_find()
419 struct ib_gid_table *table; in ib_find_cached_gid_by_port() local
427 table = ports_table[port - rdma_start_port(ib_dev)]; in ib_find_cached_gid_by_port()
432 local_index = find_gid(table, gid, &val, false, mask); in ib_find_cached_gid_by_port()
473 struct ib_gid_table *table; in ib_cache_gid_find_by_filter() local
485 table = ports_table[port - rdma_start_port(ib_dev)]; in ib_cache_gid_find_by_filter()
487 for (i = 0; i < table->sz; i++) { in ib_cache_gid_find_by_filter()
491 read_lock_irqsave(&table->data_vec[i].lock, flags); in ib_cache_gid_find_by_filter()
492 if (table->data_vec[i].props & GID_TABLE_ENTRY_INVALID) in ib_cache_gid_find_by_filter()
495 if (memcmp(gid, &table->data_vec[i].gid, sizeof(*gid))) in ib_cache_gid_find_by_filter()
498 memcpy(&attr, &table->data_vec[i].attr, sizeof(attr)); in ib_cache_gid_find_by_filter()
504 read_unlock_irqrestore(&table->data_vec[i].lock, flags); in ib_cache_gid_find_by_filter()
521 struct ib_gid_table *table = in alloc_gid_table() local
523 if (!table) in alloc_gid_table()
526 table->data_vec = kcalloc(sz, sizeof(*table->data_vec), GFP_KERNEL); in alloc_gid_table()
527 if (!table->data_vec) in alloc_gid_table()
530 mutex_init(&table->lock); in alloc_gid_table()
532 table->sz = sz; in alloc_gid_table()
535 rwlock_init(&table->data_vec[i].lock); in alloc_gid_table()
537 return table; in alloc_gid_table()
540 kfree(table); in alloc_gid_table()
544 static void release_gid_table(struct ib_gid_table *table) in release_gid_table() argument
546 if (table) { in release_gid_table()
547 kfree(table->data_vec); in release_gid_table()
548 kfree(table); in release_gid_table()
553 struct ib_gid_table *table) in cleanup_gid_table_port() argument
557 if (!table) in cleanup_gid_table_port()
560 for (i = 0; i < table->sz; ++i) { in cleanup_gid_table_port()
561 if (memcmp(&table->data_vec[i].gid, &zgid, in cleanup_gid_table_port()
562 sizeof(table->data_vec[i].gid))) in cleanup_gid_table_port()
563 del_gid(ib_dev, port, table, i, in cleanup_gid_table_port()
564 table->data_vec[i].props & in cleanup_gid_table_port()
576 struct ib_gid_table *table; in ib_cache_gid_set_default_gid() local
581 table = ports_table[port - rdma_start_port(ib_dev)]; in ib_cache_gid_set_default_gid()
587 mutex_lock(&table->lock); in ib_cache_gid_set_default_gid()
588 ix = find_gid(table, NULL, NULL, true, GID_ATTR_FIND_MASK_DEFAULT); in ib_cache_gid_set_default_gid()
603 del_gid(ib_dev, port, table, ix, true)) { in ib_cache_gid_set_default_gid()
610 if (add_gid(ib_dev, port, table, ix, &gid, &gid_attr, true)) in ib_cache_gid_set_default_gid()
617 mutex_unlock(&table->lock); in ib_cache_gid_set_default_gid()
621 struct ib_gid_table *table) in gid_table_reserve_default() argument
624 struct ib_gid_table_entry *entry = &table->data_vec[0]; in gid_table_reserve_default()
635 struct ib_gid_table **table; in _gid_table_setup_one() local
638 table = kcalloc(ib_dev->phys_port_cnt, sizeof(*table), GFP_KERNEL); in _gid_table_setup_one()
640 if (!table) { in _gid_table_setup_one()
649 table[port] = in _gid_table_setup_one()
652 if (!table[port]) { in _gid_table_setup_one()
659 table[port]); in _gid_table_setup_one()
664 ib_dev->cache.gid_cache = table; in _gid_table_setup_one()
670 table[port]); in _gid_table_setup_one()
671 release_gid_table(table[port]); in _gid_table_setup_one()
674 kfree(table); in _gid_table_setup_one()
680 struct ib_gid_table **table = ib_dev->cache.gid_cache; in gid_table_release_one() local
683 if (!table) in gid_table_release_one()
687 release_gid_table(table[port]); in gid_table_release_one()
689 kfree(table); in gid_table_release_one()
695 struct ib_gid_table **table = ib_dev->cache.gid_cache; in gid_table_cleanup_one() local
698 if (!table) in gid_table_cleanup_one()
703 table[port]); in gid_table_cleanup_one()
785 *pkey = cache->table[index]; in ib_get_cached_pkey()
814 if ((cache->table[i] & 0x7fff) == (pkey & 0x7fff)) { in ib_find_cached_pkey()
815 if (cache->table[i] & 0x8000) { in ib_find_cached_pkey()
854 if (cache->table[i] == pkey) { in ib_find_exact_cached_pkey()
891 union ib_gid table[0]; in ib_cache_update() member
895 struct ib_gid_table *table; in ib_cache_update() local
903 table = ports_table[port - rdma_start_port(device)]; in ib_cache_update()
917 sizeof *pkey_cache->table, GFP_KERNEL); in ib_cache_update()
925 sizeof(*gid_cache->table), GFP_KERNEL); in ib_cache_update()
933 ret = ib_query_pkey(device, port, i, pkey_cache->table + i); in ib_cache_update()
944 gid_cache->table + i, NULL); in ib_cache_update()
960 modify_gid(device, port, table, i, gid_cache->table + i, in ib_cache_update()