Lines Matching refs:mdev

39 			      struct mctp_dev *mdev, mctp_eid_t eid)  in mctp_fill_addrinfo()  argument
54 hdr->ifa_index = mdev->dev->ifindex; in mctp_fill_addrinfo()
71 static int mctp_dump_dev_addrinfo(struct mctp_dev *mdev, struct sk_buff *skb, in mctp_dump_dev_addrinfo() argument
77 for (; mcb->a_idx < mdev->num_addrs; mcb->a_idx++) { in mctp_dump_dev_addrinfo()
78 rc = mctp_fill_addrinfo(skb, cb, mdev, mdev->addrs[mcb->a_idx]); in mctp_dump_dev_addrinfo()
93 struct mctp_dev *mdev; in mctp_dump_addrinfo() local
108 mdev = __mctp_dev_get(dev); in mctp_dump_addrinfo()
109 if (mdev) { in mctp_dump_addrinfo()
110 rc = mctp_dump_dev_addrinfo(mdev, in mctp_dump_addrinfo()
142 struct mctp_dev *mdev; in mctp_rtm_newaddr() local
167 mdev = mctp_dev_get_rtnl(dev); in mctp_rtm_newaddr()
168 if (!mdev) in mctp_rtm_newaddr()
175 if (memchr(mdev->addrs, addr->s_addr, mdev->num_addrs)) in mctp_rtm_newaddr()
178 tmp_addrs = kmalloc(mdev->num_addrs + 1, GFP_KERNEL); in mctp_rtm_newaddr()
181 memcpy(tmp_addrs, mdev->addrs, mdev->num_addrs); in mctp_rtm_newaddr()
182 tmp_addrs[mdev->num_addrs] = addr->s_addr; in mctp_rtm_newaddr()
185 spin_lock_irqsave(&mdev->addrs_lock, flags); in mctp_rtm_newaddr()
186 mdev->num_addrs++; in mctp_rtm_newaddr()
187 swap(mdev->addrs, tmp_addrs); in mctp_rtm_newaddr()
188 spin_unlock_irqrestore(&mdev->addrs_lock, flags); in mctp_rtm_newaddr()
192 mctp_route_add_local(mdev, addr->s_addr); in mctp_rtm_newaddr()
204 struct mctp_dev *mdev; in mctp_rtm_deladdr() local
229 mdev = mctp_dev_get_rtnl(dev); in mctp_rtm_deladdr()
230 if (!mdev) in mctp_rtm_deladdr()
233 pos = memchr(mdev->addrs, addr->s_addr, mdev->num_addrs); in mctp_rtm_deladdr()
237 rc = mctp_route_remove_local(mdev, addr->s_addr); in mctp_rtm_deladdr()
242 spin_lock_irqsave(&mdev->addrs_lock, flags); in mctp_rtm_deladdr()
243 memmove(pos, pos + 1, mdev->num_addrs - 1 - (pos - mdev->addrs)); in mctp_rtm_deladdr()
244 mdev->num_addrs--; in mctp_rtm_deladdr()
245 spin_unlock_irqrestore(&mdev->addrs_lock, flags); in mctp_rtm_deladdr()
250 void mctp_dev_hold(struct mctp_dev *mdev) in mctp_dev_hold() argument
252 refcount_inc(&mdev->refs); in mctp_dev_hold()
255 void mctp_dev_put(struct mctp_dev *mdev) in mctp_dev_put() argument
257 if (refcount_dec_and_test(&mdev->refs)) { in mctp_dev_put()
258 dev_put(mdev->dev); in mctp_dev_put()
259 kfree_rcu(mdev, rcu); in mctp_dev_put()
283 struct mctp_dev *mdev; in mctp_add_dev() local
287 mdev = kzalloc(sizeof(*mdev), GFP_KERNEL); in mctp_add_dev()
288 if (!mdev) in mctp_add_dev()
291 spin_lock_init(&mdev->addrs_lock); in mctp_add_dev()
293 mdev->net = mctp_default_net(dev_net(dev)); in mctp_add_dev()
296 refcount_set(&mdev->refs, 1); in mctp_add_dev()
297 rcu_assign_pointer(dev->mctp_ptr, mdev); in mctp_add_dev()
300 mdev->dev = dev; in mctp_add_dev()
302 return mdev; in mctp_add_dev()
308 struct mctp_dev *mdev; in mctp_fill_link_af() local
310 mdev = mctp_dev_get_rtnl(dev); in mctp_fill_link_af()
311 if (!mdev) in mctp_fill_link_af()
313 if (nla_put_u32(skb, IFLA_MCTP_NET, mdev->net)) in mctp_fill_link_af()
321 struct mctp_dev *mdev; in mctp_get_link_af_size() local
325 mdev = __mctp_dev_get(dev); in mctp_get_link_af_size()
326 if (!mdev) in mctp_get_link_af_size()
340 struct mctp_dev *mdev; in mctp_set_link_af() local
348 mdev = mctp_dev_get_rtnl(dev); in mctp_set_link_af()
349 if (!mdev) in mctp_set_link_af()
353 WRITE_ONCE(mdev->net, nla_get_u32(tb[IFLA_MCTP_NET])); in mctp_set_link_af()
369 struct mctp_dev *mdev; in mctp_unregister() local
371 mdev = mctp_dev_get_rtnl(dev); in mctp_unregister()
372 if (mctp_known(dev) != (bool)mdev) { in mctp_unregister()
375 __func__, (bool)mdev, mctp_known(dev), dev->type); in mctp_unregister()
378 if (!mdev) in mctp_unregister()
381 RCU_INIT_POINTER(mdev->dev->mctp_ptr, NULL); in mctp_unregister()
383 mctp_route_remove_dev(mdev); in mctp_unregister()
384 mctp_neigh_remove_dev(mdev); in mctp_unregister()
385 kfree(mdev->addrs); in mctp_unregister()
387 mctp_dev_put(mdev); in mctp_unregister()
392 struct mctp_dev *mdev; in mctp_register() local
395 mdev = rtnl_dereference(dev->mctp_ptr); in mctp_register()
397 if (mdev) { in mctp_register()
408 mdev = mctp_add_dev(dev); in mctp_register()
409 if (IS_ERR(mdev)) in mctp_register()
410 return PTR_ERR(mdev); in mctp_register()
438 struct mctp_dev *mdev; in mctp_register_netdevice() local
440 mdev = mctp_add_dev(dev); in mctp_register_netdevice()
441 if (IS_ERR(mdev)) in mctp_register_netdevice()
442 return PTR_ERR(mdev); in mctp_register_netdevice()
444 mdev->ops = ops; in mctp_register_netdevice()