Lines Matching refs:mdev
32 struct mctp_dev *mdev = rcu_dereference(dev->mctp_ptr); in __mctp_dev_get() local
37 if (mdev) in __mctp_dev_get()
38 if (!refcount_inc_not_zero(&mdev->refs)) in __mctp_dev_get()
40 return mdev; in __mctp_dev_get()
61 struct mctp_dev *mdev, mctp_eid_t eid, in mctp_fill_addrinfo() argument
77 hdr->ifa_index = mdev->dev->ifindex; in mctp_fill_addrinfo()
94 static int mctp_dump_dev_addrinfo(struct mctp_dev *mdev, struct sk_buff *skb, in mctp_dump_dev_addrinfo() argument
103 for (; mcb->a_idx < mdev->num_addrs; mcb->a_idx++) { in mctp_dump_dev_addrinfo()
104 rc = mctp_fill_addrinfo(skb, mdev, mdev->addrs[mcb->a_idx], in mctp_dump_dev_addrinfo()
119 struct mctp_dev *mdev; in mctp_dump_addrinfo() local
137 mdev = __mctp_dev_get(dev); in mctp_dump_addrinfo()
138 if (!mdev) in mctp_dump_addrinfo()
140 rc = mctp_dump_dev_addrinfo(mdev, skb, cb); in mctp_dump_addrinfo()
141 mctp_dev_put(mdev); in mctp_dump_addrinfo()
151 static void mctp_addr_notify(struct mctp_dev *mdev, mctp_eid_t eid, int msg_type, in mctp_addr_notify() argument
155 struct net *net = dev_net(mdev->dev); in mctp_addr_notify()
163 rc = mctp_fill_addrinfo(skb, mdev, eid, msg_type, in mctp_addr_notify()
189 struct mctp_dev *mdev; in mctp_rtm_newaddr() local
214 mdev = mctp_dev_get_rtnl(dev); in mctp_rtm_newaddr()
215 if (!mdev) in mctp_rtm_newaddr()
222 if (memchr(mdev->addrs, addr->s_addr, mdev->num_addrs)) in mctp_rtm_newaddr()
225 tmp_addrs = kmalloc(mdev->num_addrs + 1, GFP_KERNEL); in mctp_rtm_newaddr()
228 memcpy(tmp_addrs, mdev->addrs, mdev->num_addrs); in mctp_rtm_newaddr()
229 tmp_addrs[mdev->num_addrs] = addr->s_addr; in mctp_rtm_newaddr()
232 spin_lock_irqsave(&mdev->addrs_lock, flags); in mctp_rtm_newaddr()
233 mdev->num_addrs++; in mctp_rtm_newaddr()
234 swap(mdev->addrs, tmp_addrs); in mctp_rtm_newaddr()
235 spin_unlock_irqrestore(&mdev->addrs_lock, flags); in mctp_rtm_newaddr()
239 mctp_addr_notify(mdev, addr->s_addr, RTM_NEWADDR, skb, nlh); in mctp_rtm_newaddr()
240 mctp_route_add_local(mdev, addr->s_addr); in mctp_rtm_newaddr()
252 struct mctp_dev *mdev; in mctp_rtm_deladdr() local
277 mdev = mctp_dev_get_rtnl(dev); in mctp_rtm_deladdr()
278 if (!mdev) in mctp_rtm_deladdr()
281 pos = memchr(mdev->addrs, addr->s_addr, mdev->num_addrs); in mctp_rtm_deladdr()
285 rc = mctp_route_remove_local(mdev, addr->s_addr); in mctp_rtm_deladdr()
290 spin_lock_irqsave(&mdev->addrs_lock, flags); in mctp_rtm_deladdr()
291 memmove(pos, pos + 1, mdev->num_addrs - 1 - (pos - mdev->addrs)); in mctp_rtm_deladdr()
292 mdev->num_addrs--; in mctp_rtm_deladdr()
293 spin_unlock_irqrestore(&mdev->addrs_lock, flags); in mctp_rtm_deladdr()
295 mctp_addr_notify(mdev, addr->s_addr, RTM_DELADDR, skb, nlh); in mctp_rtm_deladdr()
300 void mctp_dev_hold(struct mctp_dev *mdev) in mctp_dev_hold() argument
302 refcount_inc(&mdev->refs); in mctp_dev_hold()
305 void mctp_dev_put(struct mctp_dev *mdev) in mctp_dev_put() argument
307 if (mdev && refcount_dec_and_test(&mdev->refs)) { in mctp_dev_put()
308 kfree(mdev->addrs); in mctp_dev_put()
309 dev_put(mdev->dev); in mctp_dev_put()
310 kfree_rcu(mdev, rcu); in mctp_dev_put()
334 struct mctp_dev *mdev; in mctp_add_dev() local
338 mdev = kzalloc(sizeof(*mdev), GFP_KERNEL); in mctp_add_dev()
339 if (!mdev) in mctp_add_dev()
342 spin_lock_init(&mdev->addrs_lock); in mctp_add_dev()
344 mdev->net = mctp_default_net(dev_net(dev)); in mctp_add_dev()
347 refcount_set(&mdev->refs, 1); in mctp_add_dev()
348 rcu_assign_pointer(dev->mctp_ptr, mdev); in mctp_add_dev()
351 mdev->dev = dev; in mctp_add_dev()
353 return mdev; in mctp_add_dev()
359 struct mctp_dev *mdev; in mctp_fill_link_af() local
361 mdev = mctp_dev_get_rtnl(dev); in mctp_fill_link_af()
362 if (!mdev) in mctp_fill_link_af()
364 if (nla_put_u32(skb, IFLA_MCTP_NET, mdev->net)) in mctp_fill_link_af()
366 if (nla_put_u8(skb, IFLA_MCTP_PHYS_BINDING, mdev->binding)) in mctp_fill_link_af()
374 struct mctp_dev *mdev; in mctp_get_link_af_size() local
378 mdev = __mctp_dev_get(dev); in mctp_get_link_af_size()
379 if (!mdev) in mctp_get_link_af_size()
383 mctp_dev_put(mdev); in mctp_get_link_af_size()
395 struct mctp_dev *mdev; in mctp_set_link_af() local
403 mdev = mctp_dev_get_rtnl(dev); in mctp_set_link_af()
404 if (!mdev) in mctp_set_link_af()
408 WRITE_ONCE(mdev->net, nla_get_u32(tb[IFLA_MCTP_NET])); in mctp_set_link_af()
424 struct mctp_dev *mdev; in mctp_unregister() local
426 mdev = mctp_dev_get_rtnl(dev); in mctp_unregister()
427 if (!mdev) in mctp_unregister()
430 RCU_INIT_POINTER(mdev->dev->mctp_ptr, NULL); in mctp_unregister()
432 mctp_route_remove_dev(mdev); in mctp_unregister()
433 mctp_neigh_remove_dev(mdev); in mctp_unregister()
435 mctp_dev_put(mdev); in mctp_unregister()
440 struct mctp_dev *mdev; in mctp_register() local
450 mdev = mctp_add_dev(dev); in mctp_register()
451 if (IS_ERR(mdev)) in mctp_register()
452 return PTR_ERR(mdev); in mctp_register()
481 struct mctp_dev *mdev; in mctp_register_netdevice() local
483 mdev = mctp_add_dev(dev); in mctp_register_netdevice()
484 if (IS_ERR(mdev)) in mctp_register_netdevice()
485 return PTR_ERR(mdev); in mctp_register_netdevice()
487 mdev->ops = ops; in mctp_register_netdevice()
488 mdev->binding = binding; in mctp_register_netdevice()