Lines Matching refs:mdev

32 	struct mctp_dev *mdev = rcu_dereference(dev->mctp_ptr);
34 /* RCU guarantees that any mdev is still live.
37 if (mdev)
38 if (!refcount_inc_not_zero(&mdev->refs))
40 return mdev;
61 struct mctp_dev *mdev, mctp_eid_t eid,
77 hdr->ifa_index = mdev->dev->ifindex;
94 static int mctp_dump_dev_addrinfo(struct mctp_dev *mdev, struct sk_buff *skb,
103 for (; mcb->a_idx < mdev->num_addrs; mcb->a_idx++) {
104 rc = mctp_fill_addrinfo(skb, mdev, mdev->addrs[mcb->a_idx],
119 struct mctp_dev *mdev;
130 mdev = __mctp_dev_get(dev);
131 if (!mdev)
133 rc = mctp_dump_dev_addrinfo(mdev, skb, cb);
134 mctp_dev_put(mdev);
144 static void mctp_addr_notify(struct mctp_dev *mdev, mctp_eid_t eid, int msg_type,
148 struct net *net = dev_net(mdev->dev);
156 rc = mctp_fill_addrinfo(skb, mdev, eid, msg_type,
182 struct mctp_dev *mdev;
207 mdev = mctp_dev_get_rtnl(dev);
208 if (!mdev)
215 if (memchr(mdev->addrs, addr->s_addr, mdev->num_addrs))
218 tmp_addrs = kmalloc(mdev->num_addrs + 1, GFP_KERNEL);
221 memcpy(tmp_addrs, mdev->addrs, mdev->num_addrs);
222 tmp_addrs[mdev->num_addrs] = addr->s_addr;
225 spin_lock_irqsave(&mdev->addrs_lock, flags);
226 mdev->num_addrs++;
227 swap(mdev->addrs, tmp_addrs);
228 spin_unlock_irqrestore(&mdev->addrs_lock, flags);
232 mctp_addr_notify(mdev, addr->s_addr, RTM_NEWADDR, skb, nlh);
233 mctp_route_add_local(mdev, addr->s_addr);
245 struct mctp_dev *mdev;
270 mdev = mctp_dev_get_rtnl(dev);
271 if (!mdev)
274 pos = memchr(mdev->addrs, addr->s_addr, mdev->num_addrs);
278 rc = mctp_route_remove_local(mdev, addr->s_addr);
283 spin_lock_irqsave(&mdev->addrs_lock, flags);
284 memmove(pos, pos + 1, mdev->num_addrs - 1 - (pos - mdev->addrs));
285 mdev->num_addrs--;
286 spin_unlock_irqrestore(&mdev->addrs_lock, flags);
288 mctp_addr_notify(mdev, addr->s_addr, RTM_DELADDR, skb, nlh);
293 void mctp_dev_hold(struct mctp_dev *mdev)
295 refcount_inc(&mdev->refs);
298 void mctp_dev_put(struct mctp_dev *mdev)
300 if (mdev && refcount_dec_and_test(&mdev->refs)) {
301 kfree(mdev->addrs);
302 dev_put(mdev->dev);
303 kfree_rcu(mdev, rcu);
327 struct mctp_dev *mdev;
331 mdev = kzalloc(sizeof(*mdev), GFP_KERNEL);
332 if (!mdev)
335 spin_lock_init(&mdev->addrs_lock);
337 mdev->net = mctp_default_net(dev_net(dev));
340 refcount_set(&mdev->refs, 1);
341 rcu_assign_pointer(dev->mctp_ptr, mdev);
344 mdev->dev = dev;
346 return mdev;
352 struct mctp_dev *mdev;
354 mdev = mctp_dev_get_rtnl(dev);
355 if (!mdev)
357 if (nla_put_u32(skb, IFLA_MCTP_NET, mdev->net))
359 if (nla_put_u8(skb, IFLA_MCTP_PHYS_BINDING, mdev->binding))
367 struct mctp_dev *mdev;
371 mdev = __mctp_dev_get(dev);
372 if (!mdev)
376 mctp_dev_put(mdev);
388 struct mctp_dev *mdev;
396 mdev = mctp_dev_get_rtnl(dev);
397 if (!mdev)
401 WRITE_ONCE(mdev->net, nla_get_u32(tb[IFLA_MCTP_NET]));
417 struct mctp_dev *mdev;
419 mdev = mctp_dev_get_rtnl(dev);
420 if (!mdev)
423 RCU_INIT_POINTER(mdev->dev->mctp_ptr, NULL);
425 mctp_route_remove_dev(mdev);
426 mctp_neigh_remove_dev(mdev);
428 mctp_dev_put(mdev);
433 struct mctp_dev *mdev;
443 mdev = mctp_add_dev(dev);
444 if (IS_ERR(mdev))
445 return PTR_ERR(mdev);
474 struct mctp_dev *mdev;
476 mdev = mctp_add_dev(dev);
477 if (IS_ERR(mdev))
478 return PTR_ERR(mdev);
480 mdev->ops = ops;
481 mdev->binding = binding;