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);