Lines Matching refs:ha

28 	struct netdev_hw_addr *ha;
31 alloc_size = sizeof(*ha);
34 ha = kmalloc(alloc_size, GFP_ATOMIC);
35 if (!ha)
37 memcpy(ha->addr, addr, addr_len);
38 ha->type = addr_type;
39 ha->refcount = 1;
40 ha->global_use = global;
41 ha->synced = sync ? 1 : 0;
42 ha->sync_cnt = 0;
43 list_add_tail_rcu(&ha->list, &list->list);
54 struct netdev_hw_addr *ha;
59 list_for_each_entry(ha, &list->list, list) {
60 if (!memcmp(ha->addr, addr, addr_len) &&
61 ha->type == addr_type) {
64 if (ha->global_use)
67 ha->global_use = true;
70 if (ha->synced && sync_count)
73 ha->synced++;
75 ha->refcount++;
93 struct netdev_hw_addr *ha, bool global,
96 if (global && !ha->global_use)
99 if (sync && !ha->synced)
103 ha->global_use = false;
106 ha->synced--;
108 if (--ha->refcount)
110 list_del_rcu(&ha->list);
111 kfree_rcu(ha, rcu_head);
120 struct netdev_hw_addr *ha;
122 list_for_each_entry(ha, &list->list, list) {
123 if (!memcmp(ha->addr, addr, addr_len) &&
124 (ha->type == addr_type || !addr_type))
125 return __hw_addr_del_entry(list, ha, global, sync);
138 struct netdev_hw_addr *ha,
143 err = __hw_addr_add_ex(to_list, ha->addr, addr_len, ha->type,
144 false, true, ha->sync_cnt);
149 ha->sync_cnt++;
150 ha->refcount++;
158 struct netdev_hw_addr *ha,
163 err = __hw_addr_del_ex(to_list, ha->addr, addr_len, ha->type,
167 ha->sync_cnt--;
169 __hw_addr_del_entry(from_list, ha, false, false);
177 struct netdev_hw_addr *ha, *tmp;
179 list_for_each_entry_safe(ha, tmp, &from_list->list, list) {
180 if (ha->sync_cnt == ha->refcount) {
181 __hw_addr_unsync_one(to_list, from_list, ha, addr_len);
183 err = __hw_addr_sync_one(to_list, ha, addr_len);
201 struct netdev_hw_addr *ha, *tmp;
203 list_for_each_entry_safe(ha, tmp, &from_list->list, list) {
204 if (!ha->sync_cnt) {
205 err = __hw_addr_sync_one(to_list, ha, addr_len);
208 } else if (ha->refcount == 1)
209 __hw_addr_unsync_one(to_list, from_list, ha, addr_len);
219 struct netdev_hw_addr *ha, *tmp;
221 list_for_each_entry_safe(ha, tmp, &from_list->list, list) {
222 if (ha->sync_cnt)
223 __hw_addr_unsync_one(to_list, from_list, ha, addr_len);
247 struct netdev_hw_addr *ha, *tmp;
251 list_for_each_entry_safe(ha, tmp, &list->list, list) {
252 if (!ha->sync_cnt || ha->refcount != 1)
256 if (unsync && unsync(dev, ha->addr))
259 ha->sync_cnt--;
260 __hw_addr_del_entry(list, ha, false, false);
264 list_for_each_entry_safe(ha, tmp, &list->list, list) {
265 if (ha->sync_cnt)
268 err = sync(dev, ha->addr);
272 ha->sync_cnt++;
273 ha->refcount++;
297 struct netdev_hw_addr *ha, *tmp;
299 list_for_each_entry_safe(ha, tmp, &list->list, list) {
300 if (!ha->sync_cnt)
304 if (unsync && unsync(dev, ha->addr))
307 ha->sync_cnt--;
308 __hw_addr_del_entry(list, ha, false, false);
315 struct netdev_hw_addr *ha, *tmp;
317 list_for_each_entry_safe(ha, tmp, &list->list, list) {
318 list_del_rcu(&ha->list);
319 kfree_rcu(ha, rcu_head);
364 struct netdev_hw_addr *ha;
378 ha = list_first_entry(&dev->dev_addrs.list,
380 dev->dev_addr = ha->addr;
426 struct netdev_hw_addr *ha;
434 ha = list_first_entry(&dev->dev_addrs.list,
436 if (!memcmp(ha->addr, addr, dev->addr_len) &&
437 ha->type == addr_type && ha->refcount == 1)
459 struct netdev_hw_addr *ha;
463 list_for_each_entry(ha, &dev->uc.list, list) {
464 if (!memcmp(ha->addr, addr, dev->addr_len) &&
465 ha->type == NETDEV_HW_ADDR_T_UNICAST) {
643 struct netdev_hw_addr *ha;
647 list_for_each_entry(ha, &dev->mc.list, list) {
648 if (!memcmp(ha->addr, addr, dev->addr_len) &&
649 ha->type == NETDEV_HW_ADDR_T_MULTICAST) {