#define MAX_PROBE_HASH 255 /* random */
-static rwlock_t chrdevs_lock = RW_LOCK_UNLOCKED;
+static DEFINE_RWLOCK(chrdevs_lock);
static struct char_device_struct {
struct char_device_struct *next;
return cd;
}
-int register_chrdev_region(dev_t from, unsigned count, char *name)
+int register_chrdev_region(dev_t from, unsigned count, const char *name)
{
struct char_device_struct *cd;
dev_t to = from + count;
return PTR_ERR(cd);
}
-int alloc_chrdev_region(dev_t *dev, unsigned baseminor, unsigned count, char *name)
+int alloc_chrdev_region(dev_t *dev, unsigned baseminor, unsigned count,
+ const char *name)
{
struct char_device_struct *cd;
cd = __register_chrdev_region(0, baseminor, count, name);
cdev->owner = fops->owner;
cdev->ops = fops;
- strcpy(cdev->kobj.name, name);
- for (s = strchr(cdev->kobj.name, '/'); s; s = strchr(s, '/'))
+ kobject_set_name(&cdev->kobj, "%s", name);
+ for (s = strchr(kobject_name(&cdev->kobj),'/'); s; s = strchr(s, '/'))
*s = '!';
err = cdev_add(cdev, MKDEV(cd->major, 0), 256);
return 0;
}
-static spinlock_t cdev_lock = SPIN_LOCK_UNLOCKED;
+static DEFINE_SPINLOCK(cdev_lock);
+
+static struct kobject *cdev_get(struct cdev *p)
+{
+ struct module *owner = p->owner;
+ struct kobject *kobj;
+
+ if (owner && !try_module_get(owner))
+ return NULL;
+ kobj = kobject_get(&p->kobj);
+ if (!kobj)
+ module_put(owner);
+ return kobj;
+}
+
+void cdev_put(struct cdev *p)
+{
+ if (p) {
+ kobject_put(&p->kobj);
+ module_put(p->owner);
+ }
+}
+
/*
* Called every time a character special file is opened
*/
kobject_put(&p->kobj);
}
-struct kobject *cdev_get(struct cdev *p)
-{
- struct module *owner = p->owner;
- struct kobject *kobj;
-
- if (owner && !try_module_get(owner))
- return NULL;
- kobj = kobject_get(&p->kobj);
- if (!kobj)
- module_put(owner);
- return kobj;
-}
-
-void cdev_put(struct cdev *p)
-{
- if (p) {
- kobject_put(&p->kobj);
- module_put(p->owner);
- }
-}
static decl_subsys(cdev, NULL, NULL);
void cdev_init(struct cdev *cdev, struct file_operations *fops)
{
+ memset(cdev, 0, sizeof *cdev);
INIT_LIST_HEAD(&cdev->list);
cdev->kobj.ktype = &ktype_cdev_default;
kobject_init(&cdev->kobj);
EXPORT_SYMBOL(alloc_chrdev_region);
EXPORT_SYMBOL(cdev_init);
EXPORT_SYMBOL(cdev_alloc);
-EXPORT_SYMBOL(cdev_get);
-EXPORT_SYMBOL(cdev_put);
EXPORT_SYMBOL(cdev_del);
EXPORT_SYMBOL(cdev_add);
EXPORT_SYMBOL(register_chrdev);