Author: hselasky
Date: Thu Dec 31 12:30:19 2015
New Revision: 292987
URL: https://svnweb.freebsd.org/changeset/base/292987

Log:
  Minor LinuxKPI code cleanup:
  - Declare some static functions in linux_compat.c instead if inside
    various header files.
  - Prefix FreeBSD local functions in the LinuxKPI with "linux_" to
    avoid symbol name conflicts in the future and to make debugging
    easier.
  - Make the "struct kobj_ktype" declaractions constant to shave off a
    few bytes from the data segment.
  
  MFC after:    1 week
  Sponsored by: Mellanox Technologies

Modified:
  head/sys/compat/linuxkpi/common/include/linux/cdev.h
  head/sys/compat/linuxkpi/common/include/linux/device.h
  head/sys/compat/linuxkpi/common/include/linux/kobject.h
  head/sys/compat/linuxkpi/common/include/linux/miscdevice.h
  head/sys/compat/linuxkpi/common/src/linux_compat.c
  head/sys/compat/linuxkpi/common/src/linux_pci.c

Modified: head/sys/compat/linuxkpi/common/include/linux/cdev.h
==============================================================================
--- head/sys/compat/linuxkpi/common/include/linux/cdev.h        Thu Dec 31 
11:27:36 2015        (r292986)
+++ head/sys/compat/linuxkpi/common/include/linux/cdev.h        Thu Dec 31 
12:30:19 2015        (r292987)
@@ -41,6 +41,8 @@ struct inode;
 struct module;
 
 extern struct cdevsw linuxcdevsw;
+extern const struct kobj_type linux_cdev_ktype;
+extern const struct kobj_type linux_cdev_static_ktype;
 
 struct linux_cdev {
        struct kobject  kobj;
@@ -51,45 +53,10 @@ struct linux_cdev {
 };
 
 static inline void
-cdev_release(struct kobject *kobj)
-{
-       struct linux_cdev *cdev;
-       struct kobject *parent;
-
-       cdev = container_of(kobj, struct linux_cdev, kobj);
-       parent = kobj->parent;
-       if (cdev->cdev)
-               destroy_dev(cdev->cdev);
-       kfree(cdev);
-       kobject_put(parent);
-}
-
-static inline void
-cdev_static_release(struct kobject *kobj)
-{
-       struct linux_cdev *cdev;
-       struct kobject *parent;
-
-       cdev = container_of(kobj, struct linux_cdev, kobj);
-       parent = kobj->parent;
-       if (cdev->cdev)
-               destroy_dev(cdev->cdev);
-       kobject_put(parent);
-}
-
-static struct kobj_type cdev_ktype = {
-       .release = cdev_release,
-};
-
-static struct kobj_type cdev_static_ktype = {
-       .release = cdev_static_release,
-};
-
-static inline void
 cdev_init(struct linux_cdev *cdev, const struct file_operations *ops)
 {
 
-       kobject_init(&cdev->kobj, &cdev_static_ktype);
+       kobject_init(&cdev->kobj, &linux_cdev_static_ktype);
        cdev->ops = ops;
 }
 
@@ -100,7 +67,7 @@ cdev_alloc(void)
 
        cdev = kzalloc(sizeof(struct linux_cdev), M_WAITOK);
        if (cdev)
-               kobject_init(&cdev->kobj, &cdev_ktype);
+               kobject_init(&cdev->kobj, &linux_cdev_ktype);
        return (cdev);
 }
 

Modified: head/sys/compat/linuxkpi/common/include/linux/device.h
==============================================================================
--- head/sys/compat/linuxkpi/common/include/linux/device.h      Thu Dec 31 
11:27:36 2015        (r292986)
+++ head/sys/compat/linuxkpi/common/include/linux/device.h      Thu Dec 31 
12:30:19 2015        (r292987)
@@ -73,8 +73,10 @@ struct device {
        unsigned int    msix_max;
 };
 
-extern struct device linux_rootdev;
-extern struct kobject class_root;
+extern struct device linux_root_device;
+extern struct kobject linux_class_root;
+extern const struct kobj_type linux_dev_ktype;
+extern const struct kobj_type linux_class_ktype;
 
 struct class_attribute {
         struct attribute attr;
@@ -170,62 +172,14 @@ put_device(struct device *dev)
                kobject_put(&dev->kobj);
 }
 
-static inline ssize_t
-class_show(struct kobject *kobj, struct attribute *attr, char *buf)
-{
-       struct class_attribute *dattr;
-       ssize_t error;
-
-       dattr = container_of(attr, struct class_attribute, attr);
-       error = -EIO;
-       if (dattr->show)
-               error = dattr->show(container_of(kobj, struct class, kobj),
-                   dattr, buf);
-       return (error);
-}
-
-static inline ssize_t
-class_store(struct kobject *kobj, struct attribute *attr, const char *buf,
-    size_t count)
-{
-       struct class_attribute *dattr;
-       ssize_t error;
-
-       dattr = container_of(attr, struct class_attribute, attr);
-       error = -EIO;
-       if (dattr->store)
-               error = dattr->store(container_of(kobj, struct class, kobj),
-                   dattr, buf, count);
-       return (error);
-}
-
-static inline void
-class_release(struct kobject *kobj)
-{
-       struct class *class;
-
-       class = container_of(kobj, struct class, kobj);
-       if (class->class_release)
-               class->class_release(class);
-}
-
-static struct sysfs_ops class_sysfs = {
-       .show  = class_show,
-       .store = class_store,
-};
-static struct kobj_type class_ktype = {
-       .release = class_release,
-       .sysfs_ops = &class_sysfs
-};
-
 static inline int
 class_register(struct class *class)
 {
 
        class->bsdclass = devclass_create(class->name);
-       kobject_init(&class->kobj, &class_ktype);
+       kobject_init(&class->kobj, &linux_class_ktype);
        kobject_set_name(&class->kobj, class->name);
-       kobject_add(&class->kobj, &class_root, class->name);
+       kobject_add(&class->kobj, &linux_class_root, class->name);
 
        return (0);
 }
@@ -237,54 +191,6 @@ class_unregister(struct class *class)
        kobject_put(&class->kobj);
 }
 
-static inline void
-device_release(struct kobject *kobj)
-{
-       struct device *dev;
-
-       dev = container_of(kobj, struct device, kobj);
-       /* This is the precedence defined by linux. */
-       if (dev->release)
-               dev->release(dev);
-       else if (dev->class && dev->class->dev_release)
-               dev->class->dev_release(dev);
-}
-
-static inline ssize_t
-dev_show(struct kobject *kobj, struct attribute *attr, char *buf)
-{
-       struct device_attribute *dattr;
-       ssize_t error;
-
-       dattr = container_of(attr, struct device_attribute, attr);
-       error = -EIO;
-       if (dattr->show)
-               error = dattr->show(container_of(kobj, struct device, kobj),
-                   dattr, buf);
-       return (error);
-}
-
-static inline ssize_t
-dev_store(struct kobject *kobj, struct attribute *attr, const char *buf,
-    size_t count)
-{
-       struct device_attribute *dattr;
-       ssize_t error;
-
-       dattr = container_of(attr, struct device_attribute, attr);
-       error = -EIO;
-       if (dattr->store)
-               error = dattr->store(container_of(kobj, struct device, kobj),
-                   dattr, buf, count);
-       return (error);
-}
-
-static struct sysfs_ops dev_sysfs = { .show  = dev_show, .store = dev_store, };
-static struct kobj_type dev_ktype = {
-       .release = device_release,
-       .sysfs_ops = &dev_sysfs
-};
-
 /*
  * Devices are registered and created for exporting to sysfs.  create
  * implies register and register assumes the device fields have been
@@ -311,7 +217,7 @@ device_register(struct device *dev)
                device_set_softc(bsddev, dev);
        }
        dev->bsddev = bsddev;
-       kobject_init(&dev->kobj, &dev_ktype);
+       kobject_init(&dev->kobj, &linux_dev_ktype);
        kobject_add(&dev->kobj, &dev->class->kobj, dev_name(dev));
 
        return (0);
@@ -346,7 +252,7 @@ device_destroy(struct class *class, dev_
 }
 
 static inline void
-class_kfree(struct class *class)
+linux_class_kfree(struct class *class)
 {
 
        kfree(class);
@@ -361,7 +267,7 @@ class_create(struct module *owner, const
        class = kzalloc(sizeof(*class), M_WAITOK);
        class->owner = owner;
        class->name= name;
-       class->class_release = class_kfree;
+       class->class_release = linux_class_kfree;
        error = class_register(class);
        if (error) {
                kfree(class);
@@ -414,7 +320,8 @@ class_remove_file(struct class *class, c
                sysfs_remove_file(&class->kobj, &attr->attr);
 }
 
-static inline int dev_to_node(struct device *dev)
+static inline int
+dev_to_node(struct device *dev)
 {
                 return -1;
 }

Modified: head/sys/compat/linuxkpi/common/include/linux/kobject.h
==============================================================================
--- head/sys/compat/linuxkpi/common/include/linux/kobject.h     Thu Dec 31 
11:27:36 2015        (r292986)
+++ head/sys/compat/linuxkpi/common/include/linux/kobject.h     Thu Dec 31 
12:30:19 2015        (r292987)
@@ -46,13 +46,13 @@ struct kobj_type {
        struct attribute **default_attrs;
 };
 
-extern struct kobj_type kfree_type;
+extern const struct kobj_type linux_kfree_type;
 
 struct kobject {
        struct kobject          *parent;
        char                    *name;
        struct kref             kref;
-       struct kobj_type        *ktype;
+       const struct kobj_type  *ktype;
        struct list_head        entry;
        struct sysctl_oid       *oidp;
 };
@@ -74,7 +74,7 @@ struct kobj_attribute {
 };
 
 static inline void
-kobject_init(struct kobject *kobj, struct kobj_type *ktype)
+kobject_init(struct kobject *kobj, const struct kobj_type *ktype)
 {
 
        kref_init(&kobj->kref);
@@ -83,15 +83,14 @@ kobject_init(struct kobject *kobj, struc
        kobj->oidp = NULL;
 }
 
-static inline void kobject_put(struct kobject *kobj);
-void kobject_release(struct kref *kref);
+void linux_kobject_release(struct kref *kref);
 
 static inline void
 kobject_put(struct kobject *kobj)
 {
 
        if (kobj)
-               kref_put(&kobj->kref, kobject_release);
+               kref_put(&kobj->kref, linux_kobject_release);
 }
 
 static inline struct kobject *
@@ -115,7 +114,7 @@ kobject_create(void)
        kobj = kzalloc(sizeof(*kobj), GFP_KERNEL);
        if (kobj == NULL)
                return (NULL);
-       kobject_init(kobj, &kfree_type);
+       kobject_init(kobj, &linux_kfree_type);
 
        return (kobj);
 }
@@ -135,7 +134,6 @@ kobject_create_and_add(const char *name,
        return (NULL);
 }
 
-
 static inline char *
 kobject_name(const struct kobject *kobj)
 {
@@ -144,7 +142,7 @@ kobject_name(const struct kobject *kobj)
 }
 
 int    kobject_set_name(struct kobject *kobj, const char *fmt, ...);
-int    kobject_init_and_add(struct kobject *kobj, struct kobj_type *ktype,
+int    kobject_init_and_add(struct kobject *kobj, const struct kobj_type 
*ktype,
            struct kobject *parent, const char *fmt, ...);
 
 #endif /* _LINUX_KOBJECT_H_ */

Modified: head/sys/compat/linuxkpi/common/include/linux/miscdevice.h
==============================================================================
--- head/sys/compat/linuxkpi/common/include/linux/miscdevice.h  Thu Dec 31 
11:27:36 2015        (r292986)
+++ head/sys/compat/linuxkpi/common/include/linux/miscdevice.h  Thu Dec 31 
12:30:19 2015        (r292987)
@@ -46,13 +46,13 @@ struct miscdevice  {
        umode_t mode;
 };
 
-extern struct class    miscclass;
+extern struct class linux_class_misc;
 
 static inline int
 misc_register(struct miscdevice *misc)
 {
-       misc->this_device = device_create(&miscclass, &linux_rootdev, 0, misc, 
-           misc->name);
+       misc->this_device = device_create(&linux_class_misc,
+           &linux_root_device, 0, misc, misc->name);
        misc->cdev = cdev_alloc();
        if (misc->cdev == NULL)
                return -ENOMEM;
@@ -67,7 +67,7 @@ misc_register(struct miscdevice *misc)
 static inline int
 misc_deregister(struct miscdevice *misc)
 {
-       device_destroy(&miscclass, misc->this_device->devt);
+       device_destroy(&linux_class_misc, misc->this_device->devt);
        cdev_del(misc->cdev);
 
        return (0);

Modified: head/sys/compat/linuxkpi/common/src/linux_compat.c
==============================================================================
--- head/sys/compat/linuxkpi/common/src/linux_compat.c  Thu Dec 31 11:27:36 
2015        (r292986)
+++ head/sys/compat/linuxkpi/common/src/linux_compat.c  Thu Dec 31 12:30:19 
2015        (r292987)
@@ -77,9 +77,9 @@ MALLOC_DEFINE(M_KMALLOC, "linux", "Linux
 #undef cdev
 #define        RB_ROOT(head)   (head)->rbh_root
 
-struct kobject class_root;
-struct device linux_rootdev;
-struct class miscclass;
+struct kobject linux_class_root;
+struct device linux_root_device;
+struct class linux_class_misc;
 struct list_head pci_drivers;
 struct list_head pci_devices;
 struct net init_net;
@@ -151,10 +151,10 @@ kobject_set_name(struct kobject *kobj, c
        return (error);
 }
 
-static inline int
+static int
 kobject_add_complete(struct kobject *kobj, struct kobject *parent)
 {
-       struct kobj_type *t;
+       const struct kobj_type *t;
        int error;
 
        kobj->parent = parent;
@@ -191,7 +191,7 @@ kobject_add(struct kobject *kobj, struct
 }
 
 void
-kobject_release(struct kref *kref)
+linux_kobject_release(struct kref *kref)
 {
        struct kobject *kobj;
        char *name;
@@ -205,28 +205,131 @@ kobject_release(struct kref *kref)
 }
 
 static void
-kobject_kfree(struct kobject *kobj)
+linux_kobject_kfree(struct kobject *kobj)
 {
        kfree(kobj);
 }
 
 static void
-kobject_kfree_name(struct kobject *kobj)
+linux_kobject_kfree_name(struct kobject *kobj)
 {
        if (kobj) {
                kfree(kobj->name);
        }
 }
 
-struct kobj_type kfree_type = { .release = kobject_kfree };
+const struct kobj_type linux_kfree_type = {
+       .release = linux_kobject_kfree
+};
 
 static void
-dev_release(struct device *dev)
+linux_device_release(struct device *dev)
 {
-       pr_debug("dev_release: %s\n", dev_name(dev));
+       pr_debug("linux_device_release: %s\n", dev_name(dev));
        kfree(dev);
 }
 
+static ssize_t
+linux_class_show(struct kobject *kobj, struct attribute *attr, char *buf)
+{
+       struct class_attribute *dattr;
+       ssize_t error;
+
+       dattr = container_of(attr, struct class_attribute, attr);
+       error = -EIO;
+       if (dattr->show)
+               error = dattr->show(container_of(kobj, struct class, kobj),
+                   dattr, buf);
+       return (error);
+}
+
+static ssize_t
+linux_class_store(struct kobject *kobj, struct attribute *attr, const char 
*buf,
+    size_t count)
+{
+       struct class_attribute *dattr;
+       ssize_t error;
+
+       dattr = container_of(attr, struct class_attribute, attr);
+       error = -EIO;
+       if (dattr->store)
+               error = dattr->store(container_of(kobj, struct class, kobj),
+                   dattr, buf, count);
+       return (error);
+}
+
+static void
+linux_class_release(struct kobject *kobj)
+{
+       struct class *class;
+
+       class = container_of(kobj, struct class, kobj);
+       if (class->class_release)
+               class->class_release(class);
+}
+
+static const struct sysfs_ops linux_class_sysfs = {
+       .show  = linux_class_show,
+       .store = linux_class_store,
+};
+
+const struct kobj_type linux_class_ktype = {
+       .release = linux_class_release,
+       .sysfs_ops = &linux_class_sysfs
+};
+
+static void
+linux_dev_release(struct kobject *kobj)
+{
+       struct device *dev;
+
+       dev = container_of(kobj, struct device, kobj);
+       /* This is the precedence defined by linux. */
+       if (dev->release)
+               dev->release(dev);
+       else if (dev->class && dev->class->dev_release)
+               dev->class->dev_release(dev);
+}
+
+static ssize_t
+linux_dev_show(struct kobject *kobj, struct attribute *attr, char *buf)
+{
+       struct device_attribute *dattr;
+       ssize_t error;
+
+       dattr = container_of(attr, struct device_attribute, attr);
+       error = -EIO;
+       if (dattr->show)
+               error = dattr->show(container_of(kobj, struct device, kobj),
+                   dattr, buf);
+       return (error);
+}
+
+static ssize_t
+linux_dev_store(struct kobject *kobj, struct attribute *attr, const char *buf,
+    size_t count)
+{
+       struct device_attribute *dattr;
+       ssize_t error;
+
+       dattr = container_of(attr, struct device_attribute, attr);
+       error = -EIO;
+       if (dattr->store)
+               error = dattr->store(container_of(kobj, struct device, kobj),
+                   dattr, buf, count);
+       return (error);
+}
+
+static const struct sysfs_ops linux_dev_sysfs = {
+       .show  = linux_dev_show,
+       .store = linux_dev_store,
+};
+
+const struct kobj_type linux_dev_ktype = {
+       .release = linux_dev_release,
+       .sysfs_ops = &linux_dev_sysfs
+};
+
 struct device *
 device_create(struct class *class, struct device *parent, dev_t devt,
     void *drvdata, const char *fmt, ...)
@@ -239,7 +342,7 @@ device_create(struct class *class, struc
        dev->class = class;
        dev->devt = devt;
        dev->driver_data = drvdata;
-       dev->release = dev_release;
+       dev->release = linux_device_release;
        va_start(args, fmt);
        kobject_set_name_vargs(&dev->kobj, fmt, args);
        va_end(args);
@@ -249,7 +352,7 @@ device_create(struct class *class, struc
 }
 
 int
-kobject_init_and_add(struct kobject *kobj, struct kobj_type *ktype,
+kobject_init_and_add(struct kobject *kobj, const struct kobj_type *ktype,
     struct kobject *parent, const char *fmt, ...)
 {
        va_list args;
@@ -999,6 +1102,41 @@ destroy_workqueue(struct workqueue_struc
 }
 
 static void
+linux_cdev_release(struct kobject *kobj)
+{
+       struct linux_cdev *cdev;
+       struct kobject *parent;
+
+       cdev = container_of(kobj, struct linux_cdev, kobj);
+       parent = kobj->parent;
+       if (cdev->cdev)
+               destroy_dev(cdev->cdev);
+       kfree(cdev);
+       kobject_put(parent);
+}
+
+static void
+linux_cdev_static_release(struct kobject *kobj)
+{
+       struct linux_cdev *cdev;
+       struct kobject *parent;
+
+       cdev = container_of(kobj, struct linux_cdev, kobj);
+       parent = kobj->parent;
+       if (cdev->cdev)
+               destroy_dev(cdev->cdev);
+       kobject_put(parent);
+}
+
+const struct kobj_type linux_cdev_ktype = {
+       .release = linux_cdev_release,
+};
+
+const struct kobj_type linux_cdev_static_ktype = {
+       .release = linux_cdev_static_release,
+};
+
+static void
 linux_compat_init(void *arg)
 {
        struct sysctl_oid *rootoid;
@@ -1006,18 +1144,18 @@ linux_compat_init(void *arg)
 
        rootoid = SYSCTL_ADD_ROOT_NODE(NULL,
            OID_AUTO, "sys", CTLFLAG_RD|CTLFLAG_MPSAFE, NULL, "sys");
-       kobject_init(&class_root, &class_ktype);
-       kobject_set_name(&class_root, "class");
-       class_root.oidp = SYSCTL_ADD_NODE(NULL, SYSCTL_CHILDREN(rootoid),
+       kobject_init(&linux_class_root, &linux_class_ktype);
+       kobject_set_name(&linux_class_root, "class");
+       linux_class_root.oidp = SYSCTL_ADD_NODE(NULL, SYSCTL_CHILDREN(rootoid),
            OID_AUTO, "class", CTLFLAG_RD|CTLFLAG_MPSAFE, NULL, "class");
-       kobject_init(&linux_rootdev.kobj, &dev_ktype);
-       kobject_set_name(&linux_rootdev.kobj, "device");
-       linux_rootdev.kobj.oidp = SYSCTL_ADD_NODE(NULL,
+       kobject_init(&linux_root_device.kobj, &linux_dev_ktype);
+       kobject_set_name(&linux_root_device.kobj, "device");
+       linux_root_device.kobj.oidp = SYSCTL_ADD_NODE(NULL,
            SYSCTL_CHILDREN(rootoid), OID_AUTO, "device", CTLFLAG_RD, NULL,
            "device");
-       linux_rootdev.bsddev = root_bus;
-       miscclass.name = "misc";
-       class_register(&miscclass);
+       linux_root_device.bsddev = root_bus;
+       linux_class_misc.name = "misc";
+       class_register(&linux_class_misc);
        INIT_LIST_HEAD(&pci_drivers);
        INIT_LIST_HEAD(&pci_devices);
        spin_lock_init(&pci_lock);
@@ -1030,9 +1168,9 @@ SYSINIT(linux_compat, SI_SUB_DRIVERS, SI
 static void
 linux_compat_uninit(void *arg)
 {
-       kobject_kfree_name(&class_root);
-       kobject_kfree_name(&linux_rootdev.kobj);
-       kobject_kfree_name(&miscclass.kobj);
+       linux_kobject_kfree_name(&linux_class_root);
+       linux_kobject_kfree_name(&linux_root_device.kobj);
+       linux_kobject_kfree_name(&linux_class_misc.kobj);
 }
 SYSUNINIT(linux_compat, SI_SUB_DRIVERS, SI_ORDER_SECOND, linux_compat_uninit, 
NULL);
 

Modified: head/sys/compat/linuxkpi/common/src/linux_pci.c
==============================================================================
--- head/sys/compat/linuxkpi/common/src/linux_pci.c     Thu Dec 31 11:27:36 
2015        (r292986)
+++ head/sys/compat/linuxkpi/common/src/linux_pci.c     Thu Dec 31 12:30:19 
2015        (r292987)
@@ -119,16 +119,16 @@ linux_pci_attach(device_t dev)
 
        pdrv = linux_pci_find(dev, &id);
        pdev = device_get_softc(dev);
-       pdev->dev.parent = &linux_rootdev;
+       pdev->dev.parent = &linux_root_device;
        pdev->dev.bsddev = dev;
        INIT_LIST_HEAD(&pdev->dev.irqents);
        pdev->device = id->device;
        pdev->vendor = id->vendor;
        pdev->dev.dma_mask = &pdev->dma_mask;
        pdev->pdrv = pdrv;
-       kobject_init(&pdev->dev.kobj, &dev_ktype);
+       kobject_init(&pdev->dev.kobj, &linux_dev_ktype);
        kobject_set_name(&pdev->dev.kobj, device_get_nameunit(dev));
-       kobject_add(&pdev->dev.kobj, &linux_rootdev.kobj,
+       kobject_add(&pdev->dev.kobj, &linux_root_device.kobj,
            kobject_name(&pdev->dev.kobj));
        rle = _pci_get_rle(pdev, SYS_RES_IRQ, 0);
        if (rle)
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to