Lines Matching defs:devcd
34 * user/kernel space which happens when devcd is added with device_add()
45 * uevents writes to devcd fd
88 struct devcd_entry *devcd = dev_to_devcd(dev);
90 devcd->free(devcd->data);
91 module_put(devcd->owner);
97 if (devcd->failing_dev->kobj.sd)
98 sysfs_delete_link(&devcd->failing_dev->kobj, &dev->kobj,
101 put_device(devcd->failing_dev);
102 kfree(devcd);
107 struct devcd_entry *devcd;
109 devcd = container_of(wk, struct devcd_entry, del_wk.work);
111 device_del(&devcd->devcd_dev);
112 put_device(&devcd->devcd_dev);
120 struct devcd_entry *devcd = dev_to_devcd(dev);
122 return devcd->read(buffer, offset, count, devcd->data, devcd->datalen);
130 struct devcd_entry *devcd = dev_to_devcd(dev);
132 mutex_lock(&devcd->mutex);
133 if (!devcd->delete_work) {
134 devcd->delete_work = true;
135 mod_delayed_work(system_wq, &devcd->del_wk, 0);
137 mutex_unlock(&devcd->mutex);
163 struct devcd_entry *devcd = dev_to_devcd(dev);
165 mutex_lock(&devcd->mutex);
166 if (!devcd->delete_work)
167 devcd->delete_work = true;
169 flush_delayed_work(&devcd->del_wk);
170 mutex_unlock(&devcd->mutex);
192 * devcd_free(dev, data) kfree(devcd)
193 * mutex_lock(&devcd->mutex);
197 * running devcd_del() and result in memory abort while acquiring devcd->mutex which
198 * is called after kfree of devcd memory after dropping its last reference with
269 struct devcd_entry *devcd = dev_to_devcd(dev);
271 return devcd->failing_dev == failing;
334 struct devcd_entry *devcd;
350 devcd = kzalloc(sizeof(*devcd), gfp);
351 if (!devcd)
354 devcd->owner = owner;
355 devcd->data = data;
356 devcd->datalen = datalen;
357 devcd->read = read;
358 devcd->free = free;
359 devcd->failing_dev = get_device(dev);
360 devcd->delete_work = false;
362 mutex_init(&devcd->mutex);
363 device_initialize(&devcd->devcd_dev);
365 dev_set_name(&devcd->devcd_dev, "devcd%d",
367 devcd->devcd_dev.class = &devcd_class;
369 mutex_lock(&devcd->mutex);
370 dev_set_uevent_suppress(&devcd->devcd_dev, true);
371 if (device_add(&devcd->devcd_dev))
374 if (sysfs_create_link(&devcd->devcd_dev.kobj, &dev->kobj,
378 if (sysfs_create_link(&dev->kobj, &devcd->devcd_dev.kobj,
382 dev_set_uevent_suppress(&devcd->devcd_dev, false);
383 kobject_uevent(&devcd->devcd_dev.kobj, KOBJ_ADD);
384 INIT_DELAYED_WORK(&devcd->del_wk, devcd_del);
385 schedule_delayed_work(&devcd->del_wk, DEVCD_TIMEOUT);
386 mutex_unlock(&devcd->mutex);
389 put_device(&devcd->devcd_dev);
390 mutex_unlock(&devcd->mutex);