This one was a little weird. I replaced all code implemented from
the procobjecttree.h with debugfs code, then deleted
procobjecttree.h and procobjecttree.c.  After that I removed the

Signed-off-by: Jeffrey Brown <jeffrey.br...@unisys.com>
---
 drivers/staging/unisys/include/procobjecttree.h    |  48 ---
 drivers/staging/unisys/include/timskmod.h          |   1 -
 drivers/staging/unisys/visorchipset/visorchipset.h |   6 +-
 .../unisys/visorchipset/visorchipset_main.c        |   7 +-
 drivers/staging/unisys/visorutil/procobjecttree.c  | 352 ---------------------
 5 files changed, 6 insertions(+), 408 deletions(-)
 delete mode 100644 drivers/staging/unisys/include/procobjecttree.h
 delete mode 100644 drivers/staging/unisys/visorutil/procobjecttree.c

diff --git a/drivers/staging/unisys/include/procobjecttree.h 
b/drivers/staging/unisys/include/procobjecttree.h
deleted file mode 100644
index 1174056..0000000
--- a/drivers/staging/unisys/include/procobjecttree.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/* procobjecttree.h
- *
- * Copyright (C) 2010 - 2013 UNISYS CORPORATION
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- * NON INFRINGEMENT.  See the GNU General Public License for more
- * details.
- */
-
-/** @file *********************************************************************
- *
- *  This describes the interfaces necessary for creating a tree of types,
- *  objects, and properties in /proc.
- *
- ******************************************************************************
- */
-
-#ifndef __PROCOBJECTTREE_H__
-#define __PROCOBJECTTREE_H__
-
-#include "uniklog.h"
-#include "timskmod.h"
-
-/* These are opaque structures to users.
- * Fields are declared only in the implementation .c files.
- */
-typedef struct MYPROCOBJECT_Tag MYPROCOBJECT;
-typedef struct MYPROCTYPE_Tag   MYPROCTYPE;
-
-MYPROCOBJECT *visor_proc_CreateObject(MYPROCTYPE *type, const char *name,
-                                     void *context);
-void          visor_proc_DestroyObject(MYPROCOBJECT *obj);
-MYPROCTYPE   *visor_proc_CreateType(struct proc_dir_entry *procRootDir,
-                                   const char **name,
-                                   const char **propertyNames,
-                                   void (*show_property)(struct seq_file *,
-                                                         void *, int));
-void          visor_proc_DestroyType(MYPROCTYPE *type);
-
-#endif
diff --git a/drivers/staging/unisys/include/timskmod.h 
b/drivers/staging/unisys/include/timskmod.h
index de11f44..c47396e 100644
--- a/drivers/staging/unisys/include/timskmod.h
+++ b/drivers/staging/unisys/include/timskmod.h
@@ -34,7 +34,6 @@
 #include <linux/sched.h>
 #include <linux/wait.h>
 #include <linux/vmalloc.h>
-#include <linux/proc_fs.h>
 #include <linux/cdev.h>
 #include <linux/types.h>
 #include <asm/irq.h>
diff --git a/drivers/staging/unisys/visorchipset/visorchipset.h 
b/drivers/staging/unisys/visorchipset/visorchipset.h
index 46dad63..b794982 100644
--- a/drivers/staging/unisys/visorchipset/visorchipset.h
+++ b/drivers/staging/unisys/visorchipset/visorchipset.h
@@ -24,7 +24,7 @@
 #include "channel.h"
 #include "controlvmchannel.h"
 #include "parser.h"
-#include "procobjecttree.h"
+#include <linux/debugfs.h>
 #include "vbusdeviceinfo.h"
 #include "vbushelper.h"
 
@@ -133,7 +133,7 @@ struct visorchipset_bus_info {
        u8 *description;        /* UTF8 */
        u64 reserved1;
        u32 reserved2;
-       MYPROCOBJECT *proc_object;
+       struct dentry *debugfs_object;
        struct {
                u32 server:1;
                /* Add new fields above. */
@@ -209,7 +209,7 @@ struct visorchipset_internalport_info {
        u64 reserved1;
        u32 reserved2;          /* CONTROLVM_ID */
        struct controlvm_message_header pending_msg_hdr;
-       MYPROCOBJECT *proc_object;
+       struct dentry *debugfs_object;
 
 };
 
diff --git a/drivers/staging/unisys/visorchipset/visorchipset_main.c 
b/drivers/staging/unisys/visorchipset/visorchipset_main.c
index c8f7bea..fa94e26 100644
--- a/drivers/staging/unisys/visorchipset/visorchipset_main.c
+++ b/drivers/staging/unisys/visorchipset/visorchipset_main.c
@@ -17,7 +17,6 @@
 
 #include "globals.h"
 #include "visorchipset.h"
-#include "procobjecttree.h"
 #include "visorchannel.h"
 #include "periodic_work.h"
 #include "testing.h"
@@ -544,9 +543,9 @@ busInfo_clear(void *v)
 {
        struct visorchipset_bus_info *p = (struct visorchipset_bus_info *) (v);
 
-       if (p->proc_object) {
-               visor_proc_DestroyObject(p->proc_object);
-               p->proc_object = NULL;
+       if (p->debugfs_object) {
+               debugfs_remove(p->debugfs_object);
+               p->debugfs_object = NULL;
        }
        kfree(p->name);
        p->name = NULL;
diff --git a/drivers/staging/unisys/visorutil/procobjecttree.c 
b/drivers/staging/unisys/visorutil/procobjecttree.c
deleted file mode 100644
index 195772d..0000000
--- a/drivers/staging/unisys/visorutil/procobjecttree.c
+++ /dev/null
@@ -1,352 +0,0 @@
-/* procobjecttree.c
- *
- * Copyright (C) 2010 - 2013 UNISYS CORPORATION
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- * NON INFRINGEMENT.  See the GNU General Public License for more
- * details.
- */
-
-#include "procobjecttree.h"
-
-#define MYDRVNAME "procobjecttree"
-
-
-
-/** This is context info that we stash in each /proc file entry, which we
- *  need in order to call the callback function that supplies the /proc read
- *  info for that file.
- */
-typedef struct {
-       void (*show_property)(struct seq_file *, void *, int);
-       MYPROCOBJECT *procObject;
-       int propertyIndex;
-
-} PROCDIRENTRYCONTEXT;
-
-/** This describes the attributes of a tree rooted at
- *  <procDirRoot>/<name[0]>/<name[1]>/...
- *  Properties for each object of this type will be located under
- *  <procDirRoot>/<name[0]>/<name[1]>/.../<objectName>/<propertyName>.
- */
-struct MYPROCTYPE_Tag {
-       const char **name;  /**< node names for this type, ending with NULL */
-       int nNames;         /**< num of node names in <name> */
-
-       /** root dir for this type tree in /proc */
-       struct proc_dir_entry *procDirRoot;
-
-       struct proc_dir_entry **procDirs;  /**< for each node in <name> */
-
-       /** bottom dir where objects will be rooted; i.e., this is
-        *  <procDirRoot>/<name[0]>/<name[1]>/.../, which is the same as the
-        *  last entry in the <procDirs> array. */
-       struct proc_dir_entry *procDir;
-
-       /** name for each property that objects of this type can have */
-       const char **propertyNames;
-
-       int nProperties;       /**< num of names in <propertyNames> */
-
-       /** Call this, passing MYPROCOBJECT.context and the property index
-        *  whenever someone reads the proc entry */
-       void (*show_property)(struct seq_file *, void *, int);
-};
-
-
-
-struct MYPROCOBJECT_Tag {
-       MYPROCTYPE *type;
-
-       /** This is the name of the dir node in /proc under which the
-        *  properties of this object will appear as files. */
-       char *name;
-
-       int namesize;   /**< number of bytes allocated for name */
-       void *context;  /**< passed to MYPROCTYPE.show_property */
-
-       /** <type.procDirRoot>/<type.name[0]>/<type.name[1]>/.../<name> */
-       struct proc_dir_entry *procDir;
-
-       /** a proc dir entry for each of the properties of the object;
-        *  properties are identified in MYPROCTYPE.propertyNames, so each of
-        *  the <procDirProperties> describes a single file like
-        *  <type.procDirRoot>/<type.name[0]>/<type.name[1]>/...
-        *           /<name>/<propertyName>
-        */
-       struct proc_dir_entry **procDirProperties;
-
-       /** this is a holding area for the context information that is needed
-        *  to run the /proc callback function */
-       PROCDIRENTRYCONTEXT *procDirPropertyContexts;
-};
-
-
-
-static struct proc_dir_entry *
-createProcDir(const char *name, struct proc_dir_entry *parent)
-{
-       struct proc_dir_entry *p = proc_mkdir_mode(name, S_IFDIR, parent);
-
-       if (p == NULL)
-               ERRDRV("failed to create /proc directory %s", name);
-       return p;
-}
-
-static struct proc_dir_entry *
-createProcFile(const char *name, struct proc_dir_entry *parent,
-              const struct file_operations *fops, void *data)
-{
-       struct proc_dir_entry *p = proc_create_data(name, 0, parent,
-                                                   fops, data);
-       if (p == NULL)
-               ERRDRV("failed to create /proc file %s", name);
-       return p;
-}
-
-static int seq_show(struct seq_file *seq, void *offset);
-static int proc_open(struct inode *inode, struct file *file)
-{
-       return single_open(file, seq_show, PDE_DATA(inode));
-}
-
-static const struct file_operations proc_fops = {
-       .open = proc_open,
-       .read = seq_read,
-       .llseek = seq_lseek,
-       .release = single_release,
-};
-
-
-
-MYPROCTYPE *visor_proc_CreateType(struct proc_dir_entry *procDirRoot,
-                                 const char **name,
-                                 const char **propertyNames,
-                                 void (*show_property)(struct seq_file *,
-                                                       void *, int))
-{
-       int i = 0;
-       MYPROCTYPE *rc = NULL, *type = NULL;
-       struct proc_dir_entry *parent = NULL;
-
-       if (procDirRoot == NULL) {
-               ERRDRV("procDirRoot cannot be NULL!\n");
-               goto Away;
-       }
-       if (name == NULL || name[0] == NULL) {
-               ERRDRV("name must contain at least 1 node name!\n");
-               goto Away;
-       }
-       type = kzalloc(sizeof(MYPROCTYPE), GFP_KERNEL | __GFP_NORETRY);
-       if (type == NULL) {
-               ERRDRV("out of memory\n");
-               goto Away;
-       }
-       type->name = name;
-       type->propertyNames = propertyNames;
-       type->nProperties = 0;
-       type->nNames = 0;
-       type->show_property = show_property;
-       type->procDirRoot = procDirRoot;
-       if (type->propertyNames != NULL)
-               while (type->propertyNames[type->nProperties] != NULL)
-                       type->nProperties++;
-       while (type->name[type->nNames] != NULL)
-               type->nNames++;
-       type->procDirs = kzalloc((type->nNames + 1) *
-                                sizeof(struct proc_dir_entry *),
-                                GFP_KERNEL | __GFP_NORETRY);
-       if (type->procDirs == NULL) {
-               ERRDRV("out of memory\n");
-               goto Away;
-       }
-       parent = procDirRoot;
-       for (i = 0; i < type->nNames; i++) {
-               type->procDirs[i] = createProcDir(type->name[i], parent);
-               if (type->procDirs[i] == NULL) {
-                       rc = NULL;
-                       goto Away;
-               }
-               parent = type->procDirs[i];
-       }
-       type->procDir = type->procDirs[type->nNames-1];
-       rc = type;
-Away:
-       if (rc == NULL) {
-               if (type != NULL) {
-                       visor_proc_DestroyType(type);
-                       type = NULL;
-               }
-       }
-       return rc;
-}
-EXPORT_SYMBOL_GPL(visor_proc_CreateType);
-
-
-
-void visor_proc_DestroyType(MYPROCTYPE *type)
-{
-       if (type == NULL)
-               return;
-       if (type->procDirs != NULL) {
-               int i = type->nNames-1;
-
-               while (i >= 0) {
-                       if (type->procDirs[i] != NULL) {
-                               struct proc_dir_entry *parent = NULL;
-
-                               if (i == 0)
-                                       parent = type->procDirRoot;
-                               else
-                                       parent = type->procDirs[i-1];
-                               remove_proc_entry(type->name[i], parent);
-                       }
-                       i--;
-               }
-               kfree(type->procDirs);
-               type->procDirs = NULL;
-       }
-       kfree(type);
-}
-EXPORT_SYMBOL_GPL(visor_proc_DestroyType);
-
-
-
-MYPROCOBJECT *visor_proc_CreateObject(MYPROCTYPE *type,
-                                     const char *name, void *context)
-{
-       MYPROCOBJECT *obj = NULL, *rc = NULL;
-       int i = 0;
-
-       if (type == NULL) {
-               ERRDRV("type cannot be NULL\n");
-               goto Away;
-       }
-       obj = kzalloc(sizeof(MYPROCOBJECT), GFP_KERNEL | __GFP_NORETRY);
-       if (obj == NULL) {
-               ERRDRV("out of memory\n");
-               goto Away;
-       }
-       obj->type = type;
-       obj->context = context;
-       if (name == NULL) {
-               obj->name = NULL;
-               obj->procDir = type->procDir;
-       } else {
-               obj->namesize = strlen(name)+1;
-               obj->name = kmalloc(obj->namesize, GFP_KERNEL | __GFP_NORETRY);
-               if (obj->name == NULL) {
-                       obj->namesize = 0;
-                       ERRDRV("out of memory\n");
-                       goto Away;
-               }
-               strcpy(obj->name, name);
-               obj->procDir = createProcDir(obj->name, type->procDir);
-               if (obj->procDir == NULL)
-                       goto Away;
-       }
-       obj->procDirPropertyContexts =
-               kzalloc((type->nProperties + 1) * sizeof(PROCDIRENTRYCONTEXT),
-                       GFP_KERNEL | __GFP_NORETRY);
-       if (obj->procDirPropertyContexts == NULL) {
-               ERRDRV("out of memory\n");
-               goto Away;
-       }
-       obj->procDirProperties =
-               kzalloc((type->nProperties + 1) * sizeof(struct proc_dir_entry 
*),
-                       GFP_KERNEL | __GFP_NORETRY);
-       if (obj->procDirProperties == NULL) {
-               ERRDRV("out of memory\n");
-               goto Away;
-       }
-       for (i = 0; i < type->nProperties; i++) {
-               obj->procDirPropertyContexts[i].procObject = obj;
-               obj->procDirPropertyContexts[i].propertyIndex = i;
-               obj->procDirPropertyContexts[i].show_property =
-                       type->show_property;
-               if (type->propertyNames[i][0] != '\0') {
-                       /* only create properties that have names */
-                       obj->procDirProperties[i] =
-                               createProcFile(type->propertyNames[i],
-                                              obj->procDir, &proc_fops,
-                                              
&obj->procDirPropertyContexts[i]);
-                       if (obj->procDirProperties[i] == NULL) {
-                               rc = NULL;
-                               goto Away;
-                       }
-               }
-       }
-       rc = obj;
-Away:
-       if (rc == NULL) {
-               if (obj != NULL) {
-                       visor_proc_DestroyObject(obj);
-                       obj = NULL;
-               }
-       }
-       return rc;
-}
-EXPORT_SYMBOL_GPL(visor_proc_CreateObject);
-
-
-
-void visor_proc_DestroyObject(MYPROCOBJECT *obj)
-{
-       MYPROCTYPE *type = NULL;
-
-       if (obj == NULL)
-               return;
-       type = obj->type;
-       if (type == NULL)
-               return;
-       if (obj->procDirProperties != NULL) {
-               int i = 0;
-
-               for (i = 0; i < type->nProperties; i++) {
-                       if (obj->procDirProperties[i] != NULL) {
-                               remove_proc_entry(type->propertyNames[i],
-                                                 obj->procDir);
-                               obj->procDirProperties[i] = NULL;
-                       }
-               }
-               kfree(obj->procDirProperties);
-               obj->procDirProperties = NULL;
-       }
-
-       kfree(obj->procDirPropertyContexts);
-       obj->procDirPropertyContexts = NULL;
-
-       if (obj->procDir != NULL) {
-               if (obj->name != NULL)
-                       remove_proc_entry(obj->name, type->procDir);
-               obj->procDir = NULL;
-       }
-
-       kfree(obj->name);
-       obj->name = NULL;
-       kfree(obj);
-}
-EXPORT_SYMBOL_GPL(visor_proc_DestroyObject);
-
-
-
-static int seq_show(struct seq_file *seq, void *offset)
-{
-       PROCDIRENTRYCONTEXT *ctx = (PROCDIRENTRYCONTEXT *)(seq->private);
-
-       if (ctx == NULL) {
-               ERRDRV("I don't have a freakin' clue...");
-               return 0;
-       }
-       (*ctx->show_property)(seq, ctx->procObject->context,
-                             ctx->propertyIndex);
-       return 0;
-}
-- 
1.9.1

_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to