Lines Matching refs:mdev

33 	struct mctp_dev *mdev = rcu_dereference(dev->mctp_ptr);
35 /* RCU guarantees that any mdev is still live.
38 if (mdev)
39 if (!refcount_inc_not_zero(&mdev->refs))
41 return mdev;
62 struct mctp_dev *mdev, mctp_eid_t eid,
78 hdr->ifa_index = mdev->dev->ifindex;
95 static int mctp_dump_dev_addrinfo(struct mctp_dev *mdev, struct sk_buff *skb,
104 for (; mcb->a_idx < mdev->num_addrs; mcb->a_idx++) {
105 rc = mctp_fill_addrinfo(skb, mdev, mdev->addrs[mcb->a_idx],
121 struct mctp_dev *mdev;
136 mdev = __mctp_dev_get(dev);
137 if (mdev) {
138 rc = mctp_dump_dev_addrinfo(mdev,
140 mctp_dev_put(mdev);
159 static void mctp_addr_notify(struct mctp_dev *mdev, mctp_eid_t eid, int msg_type,
163 struct net *net = dev_net(mdev->dev);
171 rc = mctp_fill_addrinfo(skb, mdev, eid, msg_type,
197 struct mctp_dev *mdev;
222 mdev = mctp_dev_get_rtnl(dev);
223 if (!mdev)
230 if (memchr(mdev->addrs, addr->s_addr, mdev->num_addrs))
233 tmp_addrs = kmalloc(mdev->num_addrs + 1, GFP_KERNEL);
236 memcpy(tmp_addrs, mdev->addrs, mdev->num_addrs);
237 tmp_addrs[mdev->num_addrs] = addr->s_addr;
240 spin_lock_irqsave(&mdev->addrs_lock, flags);
241 mdev->num_addrs++;
242 swap(mdev->addrs, tmp_addrs);
243 spin_unlock_irqrestore(&mdev->addrs_lock, flags);
247 mctp_addr_notify(mdev, addr->s_addr, RTM_NEWADDR, skb, nlh);
248 mctp_route_add_local(mdev, addr->s_addr);
260 struct mctp_dev *mdev;
285 mdev = mctp_dev_get_rtnl(dev);
286 if (!mdev)
289 pos = memchr(mdev->addrs, addr->s_addr, mdev->num_addrs);
293 rc = mctp_route_remove_local(mdev, addr->s_addr);
298 spin_lock_irqsave(&mdev->addrs_lock, flags);
299 memmove(pos, pos + 1, mdev->num_addrs - 1 - (pos - mdev->addrs));
300 mdev->num_addrs--;
301 spin_unlock_irqrestore(&mdev->addrs_lock, flags);
303 mctp_addr_notify(mdev, addr->s_addr, RTM_DELADDR, skb, nlh);
308 void mctp_dev_hold(struct mctp_dev *mdev)
310 refcount_inc(&mdev->refs);
313 void mctp_dev_put(struct mctp_dev *mdev)
315 if (mdev && refcount_dec_and_test(&mdev->refs)) {
316 kfree(mdev->addrs);
317 dev_put(mdev->dev);
318 kfree_rcu(mdev, rcu);
342 struct mctp_dev *mdev;
346 mdev = kzalloc(sizeof(*mdev), GFP_KERNEL);
347 if (!mdev)
350 spin_lock_init(&mdev->addrs_lock);
352 mdev->net = mctp_default_net(dev_net(dev));
355 refcount_set(&mdev->refs, 1);
356 rcu_assign_pointer(dev->mctp_ptr, mdev);
359 mdev->dev = dev;
361 return mdev;
367 struct mctp_dev *mdev;
369 mdev = mctp_dev_get_rtnl(dev);
370 if (!mdev)
372 if (nla_put_u32(skb, IFLA_MCTP_NET, mdev->net))
380 struct mctp_dev *mdev;
384 mdev = __mctp_dev_get(dev);
385 if (!mdev)
388 mctp_dev_put(mdev);
400 struct mctp_dev *mdev;
408 mdev = mctp_dev_get_rtnl(dev);
409 if (!mdev)
413 WRITE_ONCE(mdev->net, nla_get_u32(tb[IFLA_MCTP_NET]));
429 struct mctp_dev *mdev;
431 mdev = mctp_dev_get_rtnl(dev);
432 if (!mdev)
435 RCU_INIT_POINTER(mdev->dev->mctp_ptr, NULL);
437 mctp_route_remove_dev(mdev);
438 mctp_neigh_remove_dev(mdev);
440 mctp_dev_put(mdev);
445 struct mctp_dev *mdev;
455 mdev = mctp_add_dev(dev);
456 if (IS_ERR(mdev))
457 return PTR_ERR(mdev);
485 struct mctp_dev *mdev;
487 mdev = mctp_add_dev(dev);
488 if (IS_ERR(mdev))
489 return PTR_ERR(mdev);
491 mdev->ops = ops;