dtab 69 kernel/bpf/devmap.c struct bpf_dtab *dtab; dtab 104 kernel/bpf/devmap.c static inline struct hlist_head *dev_map_index_hash(struct bpf_dtab *dtab, dtab 107 kernel/bpf/devmap.c return &dtab->dev_index_head[idx & (dtab->n_buckets - 1)]; dtab 110 kernel/bpf/devmap.c static int dev_map_init_map(struct bpf_dtab *dtab, union bpf_attr *attr) dtab 126 kernel/bpf/devmap.c bpf_map_init_from_attr(&dtab->map, attr); dtab 132 kernel/bpf/devmap.c dtab->n_buckets = roundup_pow_of_two(dtab->map.max_entries); dtab 134 kernel/bpf/devmap.c if (!dtab->n_buckets) /* Overflow check */ dtab 136 kernel/bpf/devmap.c cost += (u64) sizeof(struct hlist_head) * dtab->n_buckets; dtab 138 kernel/bpf/devmap.c cost += (u64) dtab->map.max_entries * sizeof(struct bpf_dtab_netdev *); dtab 142 kernel/bpf/devmap.c err = bpf_map_charge_init(&dtab->map.memory, cost); dtab 146 kernel/bpf/devmap.c dtab->flush_list = alloc_percpu(struct list_head); dtab 147 kernel/bpf/devmap.c if (!dtab->flush_list) dtab 151 kernel/bpf/devmap.c INIT_LIST_HEAD(per_cpu_ptr(dtab->flush_list, cpu)); dtab 154 kernel/bpf/devmap.c dtab->dev_index_head = dev_map_create_hash(dtab->n_buckets); dtab 155 kernel/bpf/devmap.c if (!dtab->dev_index_head) dtab 158 kernel/bpf/devmap.c spin_lock_init(&dtab->index_lock); dtab 160 kernel/bpf/devmap.c dtab->netdev_map = bpf_map_area_alloc(dtab->map.max_entries * dtab 162 kernel/bpf/devmap.c dtab->map.numa_node); dtab 163 kernel/bpf/devmap.c if (!dtab->netdev_map) dtab 170 kernel/bpf/devmap.c free_percpu(dtab->flush_list); dtab 172 kernel/bpf/devmap.c bpf_map_charge_finish(&dtab->map.memory); dtab 178 kernel/bpf/devmap.c struct bpf_dtab *dtab; dtab 184 kernel/bpf/devmap.c dtab = kzalloc(sizeof(*dtab), GFP_USER); dtab 185 kernel/bpf/devmap.c if (!dtab) dtab 188 kernel/bpf/devmap.c err = dev_map_init_map(dtab, attr); dtab 190 kernel/bpf/devmap.c kfree(dtab); dtab 195 kernel/bpf/devmap.c list_add_tail_rcu(&dtab->list, &dev_map_list); dtab 198 kernel/bpf/devmap.c return &dtab->map; dtab 203 kernel/bpf/devmap.c struct bpf_dtab *dtab = container_of(map, struct bpf_dtab, map); dtab 215 kernel/bpf/devmap.c list_del_rcu(&dtab->list); dtab 230 kernel/bpf/devmap.c struct list_head *flush_list = per_cpu_ptr(dtab->flush_list, cpu); dtab 236 kernel/bpf/devmap.c if (dtab->map.map_type == BPF_MAP_TYPE_DEVMAP_HASH) { dtab 237 kernel/bpf/devmap.c for (i = 0; i < dtab->n_buckets; i++) { dtab 242 kernel/bpf/devmap.c head = dev_map_index_hash(dtab, i); dtab 252 kernel/bpf/devmap.c kfree(dtab->dev_index_head); dtab 254 kernel/bpf/devmap.c for (i = 0; i < dtab->map.max_entries; i++) { dtab 257 kernel/bpf/devmap.c dev = dtab->netdev_map[i]; dtab 266 kernel/bpf/devmap.c bpf_map_area_free(dtab->netdev_map); dtab 269 kernel/bpf/devmap.c free_percpu(dtab->flush_list); dtab 270 kernel/bpf/devmap.c kfree(dtab); dtab 275 kernel/bpf/devmap.c struct bpf_dtab *dtab = container_of(map, struct bpf_dtab, map); dtab 279 kernel/bpf/devmap.c if (index >= dtab->map.max_entries) { dtab 284 kernel/bpf/devmap.c if (index == dtab->map.max_entries - 1) dtab 292 kernel/bpf/devmap.c struct bpf_dtab *dtab = container_of(map, struct bpf_dtab, map); dtab 293 kernel/bpf/devmap.c struct hlist_head *head = dev_map_index_hash(dtab, key); dtab 297 kernel/bpf/devmap.c lockdep_is_held(&dtab->index_lock)) dtab 307 kernel/bpf/devmap.c struct bpf_dtab *dtab = container_of(map, struct bpf_dtab, map); dtab 330 kernel/bpf/devmap.c i = idx & (dtab->n_buckets - 1); dtab 334 kernel/bpf/devmap.c for (; i < dtab->n_buckets; i++) { dtab 335 kernel/bpf/devmap.c head = dev_map_index_hash(dtab, i); dtab 376 kernel/bpf/devmap.c trace_xdp_devmap_xmit(&obj->dtab->map, obj->idx, dtab 407 kernel/bpf/devmap.c struct bpf_dtab *dtab = container_of(map, struct bpf_dtab, map); dtab 408 kernel/bpf/devmap.c struct list_head *flush_list = this_cpu_ptr(dtab->flush_list); dtab 423 kernel/bpf/devmap.c struct bpf_dtab *dtab = container_of(map, struct bpf_dtab, map); dtab 429 kernel/bpf/devmap.c obj = READ_ONCE(dtab->netdev_map[key]); dtab 440 kernel/bpf/devmap.c struct list_head *flush_list = this_cpu_ptr(obj->dtab->flush_list); dtab 541 kernel/bpf/devmap.c struct bpf_dtab *dtab = container_of(map, struct bpf_dtab, map); dtab 556 kernel/bpf/devmap.c old_dev = xchg(&dtab->netdev_map[k], NULL); dtab 564 kernel/bpf/devmap.c struct bpf_dtab *dtab = container_of(map, struct bpf_dtab, map); dtab 570 kernel/bpf/devmap.c spin_lock_irqsave(&dtab->index_lock, flags); dtab 574 kernel/bpf/devmap.c dtab->items--; dtab 579 kernel/bpf/devmap.c spin_unlock_irqrestore(&dtab->index_lock, flags); dtab 585 kernel/bpf/devmap.c struct bpf_dtab *dtab, dtab 594 kernel/bpf/devmap.c dev = kmalloc_node(sizeof(*dev), gfp, dtab->map.numa_node); dtab 618 kernel/bpf/devmap.c dev->dtab = dtab; dtab 626 kernel/bpf/devmap.c struct bpf_dtab *dtab = container_of(map, struct bpf_dtab, map); dtab 633 kernel/bpf/devmap.c if (unlikely(i >= dtab->map.max_entries)) dtab 641 kernel/bpf/devmap.c dev = __dev_map_alloc_node(net, dtab, ifindex, i); dtab 650 kernel/bpf/devmap.c old_dev = xchg(&dtab->netdev_map[i], dev); dtab 667 kernel/bpf/devmap.c struct bpf_dtab *dtab = container_of(map, struct bpf_dtab, map); dtab 677 kernel/bpf/devmap.c spin_lock_irqsave(&dtab->index_lock, flags); dtab 683 kernel/bpf/devmap.c dev = __dev_map_alloc_node(net, dtab, ifindex, idx); dtab 692 kernel/bpf/devmap.c if (dtab->items >= dtab->map.max_entries) { dtab 693 kernel/bpf/devmap.c spin_unlock_irqrestore(&dtab->index_lock, flags); dtab 697 kernel/bpf/devmap.c dtab->items++; dtab 701 kernel/bpf/devmap.c dev_map_index_hash(dtab, idx)); dtab 702 kernel/bpf/devmap.c spin_unlock_irqrestore(&dtab->index_lock, flags); dtab 710 kernel/bpf/devmap.c spin_unlock_irqrestore(&dtab->index_lock, flags); dtab 741 kernel/bpf/devmap.c static void dev_map_hash_remove_netdev(struct bpf_dtab *dtab, dtab 747 kernel/bpf/devmap.c spin_lock_irqsave(&dtab->index_lock, flags); dtab 748 kernel/bpf/devmap.c for (i = 0; i < dtab->n_buckets; i++) { dtab 753 kernel/bpf/devmap.c head = dev_map_index_hash(dtab, i); dtab 759 kernel/bpf/devmap.c dtab->items--; dtab 764 kernel/bpf/devmap.c spin_unlock_irqrestore(&dtab->index_lock, flags); dtab 771 kernel/bpf/devmap.c struct bpf_dtab *dtab; dtab 782 kernel/bpf/devmap.c list_for_each_entry_rcu(dtab, &dev_map_list, list) { dtab 783 kernel/bpf/devmap.c if (dtab->map.map_type == BPF_MAP_TYPE_DEVMAP_HASH) { dtab 784 kernel/bpf/devmap.c dev_map_hash_remove_netdev(dtab, netdev); dtab 788 kernel/bpf/devmap.c for (i = 0; i < dtab->map.max_entries; i++) { dtab 791 kernel/bpf/devmap.c dev = READ_ONCE(dtab->netdev_map[i]); dtab 794 kernel/bpf/devmap.c odev = cmpxchg(&dtab->netdev_map[i], dev, NULL);