Lines Matching defs:devcd
30 * user/kernel space which happens when devcd is added with device_add()
41 * uevents writes to devcd fd
84 struct devcd_entry *devcd = dev_to_devcd(dev);
86 devcd->free(devcd->data);
87 module_put(devcd->owner);
93 if (devcd->failing_dev->kobj.sd)
94 sysfs_delete_link(&devcd->failing_dev->kobj, &dev->kobj,
97 put_device(devcd->failing_dev);
98 kfree(devcd);
103 struct devcd_entry *devcd;
105 devcd = container_of(wk, struct devcd_entry, del_wk.work);
107 device_del(&devcd->devcd_dev);
108 put_device(&devcd->devcd_dev);
116 struct devcd_entry *devcd = dev_to_devcd(dev);
118 return devcd->read(buffer, offset, count, devcd->data, devcd->datalen);
126 struct devcd_entry *devcd = dev_to_devcd(dev);
128 mutex_lock(&devcd->mutex);
129 if (!devcd->delete_work) {
130 devcd->delete_work = true;
131 mod_delayed_work(system_wq, &devcd->del_wk, 0);
133 mutex_unlock(&devcd->mutex);
159 struct devcd_entry *devcd = dev_to_devcd(dev);
161 mutex_lock(&devcd->mutex);
162 if (!devcd->delete_work)
163 devcd->delete_work = true;
165 flush_delayed_work(&devcd->del_wk);
166 mutex_unlock(&devcd->mutex);
188 * devcd_free(dev, data) kfree(devcd)
189 * mutex_lock(&devcd->mutex);
193 * running devcd_del() and result in memory abort while acquiring devcd->mutex which
194 * is called after kfree of devcd memory after dropping its last reference with
264 struct devcd_entry *devcd = dev_to_devcd(dev);
266 return devcd->failing_dev == failing;
329 struct devcd_entry *devcd;
345 devcd = kzalloc(sizeof(*devcd), gfp);
346 if (!devcd)
349 devcd->owner = owner;
350 devcd->data = data;
351 devcd->datalen = datalen;
352 devcd->read = read;
353 devcd->free = free;
354 devcd->failing_dev = get_device(dev);
355 devcd->delete_work = false;
357 mutex_init(&devcd->mutex);
358 device_initialize(&devcd->devcd_dev);
360 dev_set_name(&devcd->devcd_dev, "devcd%d",
362 devcd->devcd_dev.class = &devcd_class;
364 mutex_lock(&devcd->mutex);
365 dev_set_uevent_suppress(&devcd->devcd_dev, true);
366 if (device_add(&devcd->devcd_dev))
374 if (sysfs_create_link(&devcd->devcd_dev.kobj, &dev->kobj,
376 sysfs_create_link(&dev->kobj, &devcd->devcd_dev.kobj,
380 dev_set_uevent_suppress(&devcd->devcd_dev, false);
381 kobject_uevent(&devcd->devcd_dev.kobj, KOBJ_ADD);
382 INIT_DELAYED_WORK(&devcd->del_wk, devcd_del);
383 schedule_delayed_work(&devcd->del_wk, DEVCD_TIMEOUT);
384 mutex_unlock(&devcd->mutex);
387 put_device(&devcd->devcd_dev);
388 mutex_unlock(&devcd->mutex);