Lines Matching refs:nsim_bus_dev
22 static struct nsim_bus_dev *to_nsim_bus_dev(struct device *dev)
24 return container_of(dev, struct nsim_bus_dev, dev);
27 static int nsim_bus_dev_vfs_enable(struct nsim_bus_dev *nsim_bus_dev,
30 nsim_bus_dev->vfconfigs = kcalloc(num_vfs,
33 if (!nsim_bus_dev->vfconfigs)
35 nsim_bus_dev->num_vfs = num_vfs;
40 static void nsim_bus_dev_vfs_disable(struct nsim_bus_dev *nsim_bus_dev)
42 kfree(nsim_bus_dev->vfconfigs);
43 nsim_bus_dev->vfconfigs = NULL;
44 nsim_bus_dev->num_vfs = 0;
51 struct nsim_bus_dev *nsim_bus_dev = to_nsim_bus_dev(dev);
60 if (nsim_bus_dev->num_vfs == num_vfs)
62 if (nsim_bus_dev->num_vfs && num_vfs) {
68 ret = nsim_bus_dev_vfs_enable(nsim_bus_dev, num_vfs);
72 nsim_bus_dev_vfs_disable(nsim_bus_dev);
86 struct nsim_bus_dev *nsim_bus_dev = to_nsim_bus_dev(dev);
88 return sprintf(buf, "%u\n", nsim_bus_dev->num_vfs);
99 struct nsim_bus_dev *nsim_bus_dev = to_nsim_bus_dev(dev);
105 /* Prevent to use nsim_bus_dev before initialization. */
106 if (!smp_load_acquire(&nsim_bus_dev->init))
114 mutex_lock(&nsim_bus_dev->nsim_bus_reload_lock);
116 ret = nsim_dev_port_add(nsim_bus_dev, port_index);
118 mutex_unlock(&nsim_bus_dev->nsim_bus_reload_lock);
128 struct nsim_bus_dev *nsim_bus_dev = to_nsim_bus_dev(dev);
134 /* Prevent to use nsim_bus_dev before initialization. */
135 if (!smp_load_acquire(&nsim_bus_dev->init))
143 mutex_lock(&nsim_bus_dev->nsim_bus_reload_lock);
145 ret = nsim_dev_port_del(nsim_bus_dev, port_index);
147 mutex_unlock(&nsim_bus_dev->nsim_bus_reload_lock);
171 struct nsim_bus_dev *nsim_bus_dev = to_nsim_bus_dev(dev);
173 nsim_bus_dev_vfs_disable(nsim_bus_dev);
181 static struct nsim_bus_dev *
187 struct nsim_bus_dev *nsim_bus_dev;
215 nsim_bus_dev = nsim_bus_dev_new(id, port_count);
216 if (IS_ERR(nsim_bus_dev)) {
217 err = PTR_ERR(nsim_bus_dev);
221 /* Allow using nsim_bus_dev */
222 smp_store_release(&nsim_bus_dev->init, true);
224 list_add_tail(&nsim_bus_dev->list, &nsim_bus_dev_list);
234 static void nsim_bus_dev_del(struct nsim_bus_dev *nsim_bus_dev);
239 struct nsim_bus_dev *nsim_bus_dev, *tmp;
263 list_for_each_entry_safe(nsim_bus_dev, tmp, &nsim_bus_dev_list, list) {
264 if (nsim_bus_dev->dev.id != id)
266 list_del(&nsim_bus_dev->list);
267 nsim_bus_dev_del(nsim_bus_dev);
285 struct nsim_bus_dev *nsim_bus_dev = to_nsim_bus_dev(dev);
287 return nsim_dev_probe(nsim_bus_dev);
292 struct nsim_bus_dev *nsim_bus_dev = to_nsim_bus_dev(dev);
294 nsim_dev_remove(nsim_bus_dev);
300 struct nsim_bus_dev *nsim_bus_dev = to_nsim_bus_dev(dev);
302 return nsim_bus_dev->num_vfs;
314 static struct nsim_bus_dev *
317 struct nsim_bus_dev *nsim_bus_dev;
320 nsim_bus_dev = kzalloc(sizeof(*nsim_bus_dev), GFP_KERNEL);
321 if (!nsim_bus_dev)
327 nsim_bus_dev->dev.id = err;
328 nsim_bus_dev->dev.bus = &nsim_bus;
329 nsim_bus_dev->dev.type = &nsim_bus_dev_type;
330 nsim_bus_dev->port_count = port_count;
331 nsim_bus_dev->initial_net = current->nsproxy->net_ns;
332 mutex_init(&nsim_bus_dev->nsim_bus_reload_lock);
333 /* Disallow using nsim_bus_dev */
334 smp_store_release(&nsim_bus_dev->init, false);
336 err = device_register(&nsim_bus_dev->dev);
339 return nsim_bus_dev;
342 ida_free(&nsim_bus_dev_ids, nsim_bus_dev->dev.id);
344 kfree(nsim_bus_dev);
348 static void nsim_bus_dev_del(struct nsim_bus_dev *nsim_bus_dev)
350 /* Disallow using nsim_bus_dev */
351 smp_store_release(&nsim_bus_dev->init, false);
352 device_unregister(&nsim_bus_dev->dev);
353 ida_free(&nsim_bus_dev_ids, nsim_bus_dev->dev.id);
354 kfree(nsim_bus_dev);
384 struct nsim_bus_dev *nsim_bus_dev, *tmp;
390 list_for_each_entry_safe(nsim_bus_dev, tmp, &nsim_bus_dev_list, list) {
391 list_del(&nsim_bus_dev->list);
392 nsim_bus_dev_del(nsim_bus_dev);